Name: series-workflowtrf6d Phase: Failed StartedAt: 2026-09-09 10:48:47 +0000 UTC FinishedAt: 2026-09-09 11:06:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtrf6d[0] Phase: Succeeded StartedAt: 2026-09-09 10:48:47 +0000 UTC FinishedAt: 2026-09-09 11:06:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtrf6d[0].run-triage Phase: Succeeded StartedAt: 2026-09-09 10:48:47 +0000 UTC FinishedAt: 2026-09-09 11:06:07 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "AI determined the patch has no functional impact", "targets": null, "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDExOjA1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgY2hhbmdlcyBhcmUgc3RyaWN0bHkgY29uZmluZWQgdG8gdGhlIFdhbmd4dW4gRXRoZXJuZXQgbmV0d29yayBkcml2ZXJzIChsaWJ3eCwgbmdiZSwgdHhnYmUpIHVuZGVyIGRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vLiBUaGVzZSBkcml2ZXJzIHJlcXVpcmUgdmVuZG9yLXNwZWNpZmljIFBDSWUgQVNJQyBoYXJkd2FyZSB0aGF0IGlzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgKFFFTVUvR0NFKSwgbWFraW5nIHRoZSBtb2RpZmllZCBjb2RlIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBmb3Igc3l6a2FsbGVyIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDExOjA1PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgNjc0ODNmZmY4NTI1N2VkYTA3NmFjNjkwNWZiZGIwNjI4NDdiZDhkZlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgU2VwIDkgMTE6MDU6NDIgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9lcnIuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfZXJyLmNcbmluZGV4IGI1NmZiZGM5NTlkZWMuLjhlYWRiNGQzYWJjZmYgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2Vyci5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2Vyci5jXG5AQCAtMjAxLDEyICYjNDM7MjAxLDE4IEBAIHN0YXRpYyBib29sIHd4X3JpbmdfdHhfcGVuZGluZyhzdHJ1Y3Qgd3ggKnd4KVxuIHtcbiBcdGludCBpO1xuIFxuJiM0MztcdHJjdV9yZWFkX2xvY2soKTtcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHd4LVx1MDAzZW51bV90eF9xdWV1ZXM7IGkmIzQzOyYjNDM7KSB7XG4tXHRcdHN0cnVjdCB3eF9yaW5nICp0eF9yaW5nID0gd3gtXHUwMDNldHhfcmluZ1tpXTtcbiYjNDM7XHRcdHN0cnVjdCB3eF9yaW5nICp0eF9yaW5nID0gcmN1X2RlcmVmZXJlbmNlKHd4LVx1MDAzZXR4X3JpbmdbaV0pO1xuIFxuLVx0XHRpZiAodHhfcmluZy1cdTAwM2VuZXh0X3RvX3VzZSAhPSB0eF9yaW5nLVx1MDAzZW5leHRfdG9fY2xlYW4pXG4mIzQzO1x0XHRpZiAoIXR4X3JpbmcpXG4mIzQzO1x0XHRcdGNvbnRpbnVlO1xuJiM0MztcdFx0aWYgKHR4X3JpbmctXHUwMDNlbmV4dF90b191c2UgIT0gdHhfcmluZy1cdTAwM2VuZXh0X3RvX2NsZWFuKSB7XG4mIzQzO1x0XHRcdHJjdV9yZWFkX3VubG9jaygpO1xuIFx0XHRcdHJldHVybiB0cnVlO1xuJiM0MztcdFx0fVxuIFx0fVxuJiM0MztcdHJjdV9yZWFkX3VubG9jaygpO1xuIFxuIFx0cmV0dXJuIGZhbHNlO1xuIH1cbkBAIC0yNjQsOCAmIzQzOzI3MCwxNCBAQCBzdGF0aWMgdm9pZCB3eF9kZXRlY3RfdHhfaGFuZyhzdHJ1Y3Qgd3ggKnd4KVxuIFxuIFx0LyogRm9yY2UgZGV0ZWN0aW9uIG9mIGh1bmcgY29udHJvbGxlciAqL1xuIFx0aWYgKG5ldGlmX2NhcnJpZXJfb2sod3gtXHUwMDNlbmV0ZGV2KSkge1xuLVx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyB3eC1cdTAwM2VudW1fdHhfcXVldWVzOyBpJiM0MzsmIzQzOylcbi1cdFx0XHRzZXRfYml0KFdYX1RYX0RFVEVDVF9IQU5HLCB3eC1cdTAwM2V0eF9yaW5nW2ldLVx1MDAzZXN0YXRlKTtcbiYjNDM7XHRcdHJjdV9yZWFkX2xvY2soKTtcbiYjNDM7XHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHd4LVx1MDAzZW51bV90eF9xdWV1ZXM7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRcdHN0cnVjdCB3eF9yaW5nICp0eF9yaW5nID0gcmN1X2RlcmVmZXJlbmNlKHd4LVx1MDAzZXR4X3JpbmdbaV0pO1xuJiM0MztcbiYjNDM7XHRcdFx0aWYgKHR4X3JpbmcpXG4mIzQzO1x0XHRcdFx0c2V0X2JpdChXWF9UWF9ERVRFQ1RfSEFORywgdHhfcmluZy1cdTAwM2VzdGF0ZSk7XG4mIzQzO1x0XHR9XG4mIzQzO1x0XHRyY3VfcmVhZF91bmxvY2soKTtcbiBcdH1cbiB9XG4gXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9ldGh0b29sLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2V0aHRvb2wuY1xuaW5kZXggOTQwZDJlNTk4NzZjNy4uZWFlNTk1MmMwZjVmYyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfZXRodG9vbC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2V0aHRvb2wuY1xuQEAgLTE1NCw4ICYjNDM7MTU0LDkgQEAgdm9pZCB3eF9nZXRfZXRodG9vbF9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxuIFx0XHR9XG4gXHR9XG4gXG4mIzQzO1x0cmN1X3JlYWRfbG9jaygpO1xuIFx0Zm9yIChqID0gMDsgaiBcdTAwM2MgbmV0ZGV2LVx1MDAzZW51bV90eF9xdWV1ZXM7IGomIzQzOyYjNDM7KSB7XG4tXHRcdHJpbmcgPSB3eC1cdTAwM2V0eF9yaW5nW2pdO1xuJiM0MztcdFx0cmluZyA9IHJjdV9kZXJlZmVyZW5jZSh3eC1cdTAwM2V0eF9yaW5nW2pdKTtcbiBcdFx0aWYgKCFyaW5nKSB7XG4gXHRcdFx0ZGF0YVtpJiM0MzsmIzQzO10gPSAwO1xuIFx0XHRcdGRhdGFbaSYjNDM7JiM0MztdID0gMDtcbkBAIC0xNzAsNyAmIzQzOzE3MSw3IEBAIHZvaWQgd3hfZ2V0X2V0aHRvb2xfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcbiBcdFx0aSAmIzQzOz0gMjtcbiBcdH1cbiBcdGZvciAoaiA9IDA7IGogXHUwMDNjIFdYX05VTV9SWF9RVUVVRVM7IGomIzQzOyYjNDM7KSB7XG4tXHRcdHJpbmcgPSB3eC1cdTAwM2VyeF9yaW5nW2pdO1xuJiM0MztcdFx0cmluZyA9IHJjdV9kZXJlZmVyZW5jZSh3eC1cdTAwM2VyeF9yaW5nW2pdKTtcbiBcdFx0aWYgKCFyaW5nKSB7XG4gXHRcdFx0ZGF0YVtpJiM0MzsmIzQzO10gPSAwO1xuIFx0XHRcdGRhdGFbaSYjNDM7JiM0MztdID0gMDtcbkBAIC0xODQsNiAmIzQzOzE4NSw3IEBAIHZvaWQgd3hfZ2V0X2V0aHRvb2xfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcbiBcdFx0fSB3aGlsZSAodTY0X3N0YXRzX2ZldGNoX3JldHJ5KFx1MDAyNnJpbmctXHUwMDNlc3luY3AsIHN0YXJ0KSk7XG4gXHRcdGkgJiM0Mzs9IDI7XG4gXHR9XG4mIzQzO1x0cmN1X3JlYWRfdW5sb2NrKCk7XG4gfVxuIEVYUE9SVF9TWU1CT0wod3hfZ2V0X2V0aHRvb2xfc3RhdHMpO1xuIFxuQEAgLTgwNSw5ICYjNDM7ODA3LDkgQEAgc3RhdGljIGludCB3eF9zZXRfcmluZ3BhcmFtX3ZmKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXG4gXG4gXHRpZiAoIW5ldGlmX3J1bm5pbmcod3gtXHUwMDNlbmV0ZGV2KSkge1xuIFx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyB3eC1cdTAwM2VudW1fdHhfcXVldWVzOyBpJiM0MzsmIzQzOylcbi1cdFx0XHR3eC1cdTAwM2V0eF9yaW5nW2ldLVx1MDAzZWNvdW50ID0gbmV3X3R4X2NvdW50O1xuJiM0MztcdFx0XHRyY3VfZGVyZWZlcmVuY2VfcHJvdGVjdGVkKHd4LVx1MDAzZXR4X3JpbmdbaV0sIDEpLVx1MDAzZWNvdW50ID0gbmV3X3R4X2NvdW50O1xuIFx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyB3eC1cdTAwM2VudW1fcnhfcXVldWVzOyBpJiM0MzsmIzQzOylcbi1cdFx0XHR3eC1cdTAwM2VyeF9yaW5nW2ldLVx1MDAzZWNvdW50ID0gbmV3X3J4X2NvdW50O1xuJiM0MztcdFx0XHRyY3VfZGVyZWZlcmVuY2VfcHJvdGVjdGVkKHd4LVx1MDAzZXJ4X3JpbmdbaV0sIDEpLVx1MDAzZWNvdW50ID0gbmV3X3J4X2NvdW50O1xuIFx0XHR3eC1cdTAwM2V0eF9yaW5nX2NvdW50ID0gbmV3X3R4X2NvdW50O1xuIFx0XHR3eC1cdTAwM2VyeF9yaW5nX2NvdW50ID0gbmV3X3J4X2NvdW50O1xuIFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfaHcuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfaHcuY1xuaW5kZXggMTIyYzQ5NTJkMjAzZi4uYzc4MTM2YWJlOTJmOSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfaHcuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9ody5jXG5AQCAtMTU5OCwxMyAmIzQzOzE1OTgsMTcgQEAgc3RhdGljIHZvaWQgd3hfdmxhbl9zdHJpcF9jb250cm9sKHN0cnVjdCB3eCAqd3gsIGJvb2wgZW5hYmxlKVxuIHtcbiBcdGludCBpLCBqO1xuIFxuJiM0MztcdHJjdV9yZWFkX2xvY2soKTtcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHd4LVx1MDAzZW51bV9yeF9xdWV1ZXM7IGkmIzQzOyYjNDM7KSB7XG4tXHRcdHN0cnVjdCB3eF9yaW5nICpyaW5nID0gd3gtXHUwMDNlcnhfcmluZ1tpXTtcbiYjNDM7XHRcdHN0cnVjdCB3eF9yaW5nICpyaW5nID0gcmN1X2RlcmVmZXJlbmNlKHd4LVx1MDAzZXJ4X3JpbmdbaV0pO1xuIFxuJiM0MztcdFx0aWYgKCFyaW5nKVxuJiM0MztcdFx0XHRjb250aW51ZTtcbiBcdFx0aiA9IHJpbmctXHUwMDNlcmVnX2lkeDtcbiBcdFx0d3IzMm0od3gsIFdYX1BYX1JSX0NGRyhqKSwgV1hfUFhfUlJfQ0ZHX1ZMQU4sXG4gXHRcdCAgICAgIGVuYWJsZSA/IFdYX1BYX1JSX0NGR19WTEFOIDogMCk7XG4gXHR9XG4mIzQzO1x0cmN1X3JlYWRfdW5sb2NrKCk7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIHd4X3ZsYW5fcHJvbWlzY19lbmFibGUoc3RydWN0IHd4ICp3eClcbkBAIC0xNzk3LDcgJiM0MzsxODAxLDcgQEAgc3RhdGljIHZvaWQgd3hfc2V0X3J4X2J1ZmZlcl9sZW4oc3RydWN0IHd4ICp3eClcbiBcdCAqIHRoZSBCYXNlIGFuZCBMZW5ndGggb2YgdGhlIFJ4IERlc2NyaXB0b3IgUmluZ1xuIFx0ICovXG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyB3eC1cdTAwM2VudW1fcnhfcXVldWVzOyBpJiM0MzsmIzQzOykge1xuLVx0XHRyeF9yaW5nID0gd3gtXHUwMDNlcnhfcmluZ1tpXTtcbiYjNDM7XHRcdHJ4X3JpbmcgPSByY3VfZGVyZWZlcmVuY2VfcHJvdGVjdGVkKHd4LVx1MDAzZXJ4X3JpbmdbaV0sIDEpO1xuIFx0XHRyeF9yaW5nLVx1MDAzZXJ4X2J1Zl9sZW4gPSBXWF9SWEJVRkZFUl8ySztcbiAjaWYgKFBBR0VfU0laRSBcdTAwM2MgODE5MilcbiBcdFx0aWYgKHRlc3RfYml0KFdYX0ZMQUdfUlNDX0VOQUJMRUQsIHd4LVx1MDAzZWZsYWdzKSlcbkBAIC0yMDIxLDggJiM0MzsyMDI1LDExIEBAIHN0YXRpYyB2b2lkIHd4X2NvbmZpZ3VyZV90eChzdHJ1Y3Qgd3ggKnd4KVxuIFx0ICAgICAgV1hfVERNX0NUTF9URSwgV1hfVERNX0NUTF9URSk7XG4gXG4gXHQvKiBTZXR1cCB0aGUgSFcgVHggSGVhZCBhbmQgVGFpbCBkZXNjcmlwdG9yIHBvaW50ZXJzICovXG4tXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyB3eC1cdTAwM2VudW1fdHhfcXVldWVzOyBpJiM0MzsmIzQzOylcbi1cdFx0d3hfY29uZmlndXJlX3R4X3Jpbmcod3gsIHd4LVx1MDAzZXR4X3JpbmdbaV0pO1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHd4LVx1MDAzZW51bV90eF9xdWV1ZXM7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRzdHJ1Y3Qgd3hfcmluZyAqdHhfcmluZyA9IHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQod3gtXHUwMDNldHhfcmluZ1tpXSwgMSk7XG4mIzQzO1xuJiM0MztcdFx0d3hfY29uZmlndXJlX3R4X3Jpbmcod3gsIHR4X3JpbmcpO1xuJiM0MztcdH1cbiBcbiBcdHdyMzJtKHd4LCBXWF9UU0NfQlVGX0FFLCBXWF9UU0NfQlVGX0FFX1RIUiwgMHgxMCk7XG4gXG5AQCAtMjI0Nyw4ICYjNDM7MjI1NCwxMSBAQCB2b2lkIHd4X2NvbmZpZ3VyZV9yeChzdHJ1Y3Qgd3ggKnd4KVxuIFx0LyogU2V0dXAgdGhlIEhXIFJ4IEhlYWQgYW5kIFRhaWwgRGVzY3JpcHRvciBQb2ludGVycyBhbmRcbiBcdCAqIHRoZSBCYXNlIGFuZCBMZW5ndGggb2YgdGhlIFJ4IERlc2NyaXB0b3IgUmluZ1xuIFx0ICovXG4tXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyB3eC1cdTAwM2VudW1fcnhfcXVldWVzOyBpJiM0MzsmIzQzOylcbi1cdFx0d3hfY29uZmlndXJlX3J4X3Jpbmcod3gsIHd4LVx1MDAzZXJ4X3JpbmdbaV0pO1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHd4LVx1MDAzZW51bV9yeF9xdWV1ZXM7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRzdHJ1Y3Qgd3hfcmluZyAqcnhfcmluZyA9IHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQod3gtXHUwMDNlcnhfcmluZ1tpXSwgMSk7XG4mIzQzO1xuJiM0MztcdFx0d3hfY29uZmlndXJlX3J4X3Jpbmcod3gsIHJ4X3JpbmcpO1xuJiM0MztcdH1cbiBcbiBcdC8qIEVuYWJsZSBhbGwgcmVjZWl2ZXMsIGRpc2FibGUgc2VjdXJpdHkgZW5naW5lIHByaW9yIHRvIGJsb2NrIHRyYWZmaWMgKi9cbiBcdHJldCA9IHd4X2Rpc2FibGVfc2VjX3J4X3BhdGgod3gpO1xuQEAgLTI4MzgsMTEgJiM0MzsyODQ4LDE3IEBAIGludCB3eF9mY19lbmFibGUoc3RydWN0IHd4ICp3eCwgYm9vbCB0eF9wYXVzZSwgYm9vbCByeF9wYXVzZSlcbiBcdCAqICBhbmQgcGVyZm9ybWFuY2UgcmVhc29ucy5cbiBcdCAqL1xuIFx0aWYgKHd4LVx1MDAzZW51bV9yeF9xdWV1ZXMgXHUwMDNlIDEgXHUwMDI2XHUwMDI2ICF0eF9wYXVzZSkge1xuLVx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyB3eC1cdTAwM2VudW1fcnhfcXVldWVzOyBpJiM0MzsmIzQzOylcbi1cdFx0XHR3eF9lbmFibGVfcnhfZHJvcCh3eCwgd3gtXHUwMDNlcnhfcmluZ1tpXSk7XG4mIzQzO1x0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyB3eC1cdTAwM2VudW1fcnhfcXVldWVzOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0XHRzdHJ1Y3Qgd3hfcmluZyAqcnhfcmluZyA9IHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQod3gtXHUwMDNlcnhfcmluZ1tpXSwgMSk7XG4mIzQzO1xuJiM0MztcdFx0XHR3eF9lbmFibGVfcnhfZHJvcCh3eCwgcnhfcmluZyk7XG4mIzQzO1x0XHR9XG4gXHR9IGVsc2Uge1xuLVx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyB3eC1cdTAwM2VudW1fcnhfcXVldWVzOyBpJiM0MzsmIzQzOylcbi1cdFx0XHR3eF9kaXNhYmxlX3J4X2Ryb3Aod3gsIHd4LVx1MDAzZXJ4X3JpbmdbaV0pO1xuJiM0MztcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2Mgd3gtXHUwMDNlbnVtX3J4X3F1ZXVlczsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdFx0c3RydWN0IHd4X3JpbmcgKnJ4X3JpbmcgPSByY3VfZGVyZWZlcmVuY2VfcHJvdGVjdGVkKHd4LVx1MDAzZXJ4X3JpbmdbaV0sIDEpO1xuJiM0MztcbiYjNDM7XHRcdFx0d3hfZGlzYWJsZV9yeF9kcm9wKHd4LCByeF9yaW5nKTtcbiYjNDM7XHRcdH1cbiBcdH1cbiBcbiBcdHJldHVybiAwO1xuQEAgLTI4NzAsOCAmIzQzOzI4ODYsMTUgQEAgc3RhdGljIHZvaWQgd3hfdXBkYXRlX3hvZmZfcnhfbGZjKHN0cnVjdCB3eCAqd3gpXG4gXHRpZiAoIWRhdGEpXG4gXHRcdHJldHVybjtcbiBcbi1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIHd4LVx1MDAzZW51bV90eF9xdWV1ZXM7IGkmIzQzOyYjNDM7KVxuLVx0XHRjbGVhcl9iaXQoV1hfSEFOR19DSEVDS19BUk1FRCwgd3gtXHUwMDNldHhfcmluZ1tpXS1cdTAwM2VzdGF0ZSk7XG4mIzQzO1x0cmN1X3JlYWRfbG9jaygpO1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHd4LVx1MDAzZW51bV90eF9xdWV1ZXM7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRzdHJ1Y3Qgd3hfcmluZyAqdHhfcmluZyA9IHJjdV9kZXJlZmVyZW5jZSh3eC1cdTAwM2V0eF9yaW5nW2ldKTtcbiYjNDM7XG4mIzQzO1x0XHRpZiAoIXR4X3JpbmcpXG4mIzQzO1x0XHRcdGNvbnRpbnVlO1xuJiM0MztcdFx0Y2xlYXJfYml0KFdYX0hBTkdfQ0hFQ0tfQVJNRUQsIHR4X3JpbmctXHUwMDNlc3RhdGUpO1xuJiM0MztcdH1cbiYjNDM7XHRyY3VfcmVhZF91bmxvY2soKTtcbiB9XG4gXG4gLyoqXG5AQCAtMjg5MywxMCAmIzQzOzI5MTYsMTMgQEAgdm9pZCB3eF91cGRhdGVfc3RhdHMoc3RydWN0IHd4ICp3eClcbiBcbiBcdHNwaW5fbG9jayhcdTAwMjZ3eC1cdTAwM2Vod19zdGF0c19sb2NrKTtcbiBcbiYjNDM7XHRyY3VfcmVhZF9sb2NrKCk7XG4gXHQvKiBnYXRoZXIgc29tZSBzdGF0cyB0byB0aGUgd3ggc3RydWN0IHRoYXQgYXJlIHBlciBxdWV1ZSAqL1xuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2Mgd3gtXHUwMDNlbnVtX3J4X3F1ZXVlczsgaSYjNDM7JiM0MzspIHtcbi1cdFx0c3RydWN0IHd4X3JpbmcgKnJ4X3JpbmcgPSB3eC1cdTAwM2VyeF9yaW5nW2ldO1xuJiM0MztcdFx0c3RydWN0IHd4X3JpbmcgKnJ4X3JpbmcgPSByY3VfZGVyZWZlcmVuY2Uod3gtXHUwMDNlcnhfcmluZ1tpXSk7XG4gXG4mIzQzO1x0XHRpZiAoIXJ4X3JpbmcpXG4mIzQzO1x0XHRcdGNvbnRpbnVlO1xuIFx0XHRub25fZW9wX2Rlc2NzICYjNDM7PSByeF9yaW5nLVx1MDAzZXJ4X3N0YXRzLm5vbl9lb3BfZGVzY3M7XG4gXHRcdGFsbG9jX3J4X2J1ZmZfZmFpbGVkICYjNDM7PSByeF9yaW5nLVx1MDAzZXJ4X3N0YXRzLmFsbG9jX3J4X2J1ZmZfZmFpbGVkO1xuIFx0XHRod19jc3VtX3J4X2dvb2QgJiM0Mzs9IHJ4X3JpbmctXHUwMDNlcnhfc3RhdHMuY3N1bV9nb29kX2NudDtcbkBAIC0yOTEyLDE5ICYjNDM7MjkzOCwyOCBAQCB2b2lkIHd4X3VwZGF0ZV9zdGF0cyhzdHJ1Y3Qgd3ggKnd4KVxuIFx0XHR1NjQgcnNjX2ZsdXNoID0gMDtcbiBcbiBcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2Mgd3gtXHUwMDNlbnVtX3J4X3F1ZXVlczsgaSYjNDM7JiM0MzspIHtcbi1cdFx0XHRyc2NfY291bnQgJiM0Mzs9IHd4LVx1MDAzZXJ4X3JpbmdbaV0tXHUwMDNlcnhfc3RhdHMucnNjX2NvdW50O1xuLVx0XHRcdHJzY19mbHVzaCAmIzQzOz0gd3gtXHUwMDNlcnhfcmluZ1tpXS1cdTAwM2VyeF9zdGF0cy5yc2NfZmx1c2g7XG4mIzQzO1x0XHRcdHN0cnVjdCB3eF9yaW5nICpyeF9yaW5nID0gcmN1X2RlcmVmZXJlbmNlKHd4LVx1MDAzZXJ4X3JpbmdbaV0pO1xuJiM0MztcbiYjNDM7XHRcdFx0aWYgKCFyeF9yaW5nKVxuJiM0MztcdFx0XHRcdGNvbnRpbnVlO1xuJiM0MztcbiYjNDM7XHRcdFx0cnNjX2NvdW50ICYjNDM7PSByeF9yaW5nLVx1MDAzZXJ4X3N0YXRzLnJzY19jb3VudDtcbiYjNDM7XHRcdFx0cnNjX2ZsdXNoICYjNDM7PSByeF9yaW5nLVx1MDAzZXJ4X3N0YXRzLnJzY19mbHVzaDtcbiBcdFx0fVxuIFx0XHR3eC1cdTAwM2Vyc2NfY291bnQgPSByc2NfY291bnQ7XG4gXHRcdHd4LVx1MDAzZXJzY19mbHVzaCA9IHJzY19mbHVzaDtcbiBcdH1cbiBcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHd4LVx1MDAzZW51bV90eF9xdWV1ZXM7IGkmIzQzOyYjNDM7KSB7XG4tXHRcdHN0cnVjdCB3eF9yaW5nICp0eF9yaW5nID0gd3gtXHUwMDNldHhfcmluZ1tpXTtcbiYjNDM7XHRcdHN0cnVjdCB3eF9yaW5nICp0eF9yaW5nID0gcmN1X2RlcmVmZXJlbmNlKHd4LVx1MDAzZXR4X3JpbmdbaV0pO1xuJiM0MztcbiYjNDM7XHRcdGlmICghdHhfcmluZylcbiYjNDM7XHRcdFx0Y29udGludWU7XG4gXG4gXHRcdHJlc3RhcnRfcXVldWUgJiM0Mzs9IHR4X3JpbmctXHUwMDNldHhfc3RhdHMucmVzdGFydF9xdWV1ZTtcbiBcdFx0dHhfYnVzeSAmIzQzOz0gdHhfcmluZy1cdTAwM2V0eF9zdGF0cy50eF9idXN5O1xuIFx0fVxuJiM0MztcdHJjdV9yZWFkX3VubG9jaygpO1xuIFx0d3gtXHUwMDNlcmVzdGFydF9xdWV1ZSA9IHJlc3RhcnRfcXVldWU7XG4gXHR3eC1cdTAwM2V0eF9idXN5ID0gdHhfYnVzeTtcbiBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2xpYi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9saWIuY1xuaW5kZXggZWQ1YWFkNzg1N2JkOS4uOWY5MGFhOTJmODQwYiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfbGliLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfbGliLmNcbkBAIC0xNzE0LDcgJiM0MzsxNzE0LDEyIEBAIG5ldGRldl90eF90IHd4X3htaXRfZnJhbWUoc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcbiBcdGlmIChyX2lkeCBcdTAwM2U9IHd4LVx1MDAzZW51bV90eF9xdWV1ZXMpXG4gXHRcdHJfaWR4ID0gcl9pZHggJSB3eC1cdTAwM2VudW1fdHhfcXVldWVzO1xuLVx0dHhfcmluZyA9IHd4LVx1MDAzZXR4X3Jpbmdbcl9pZHhdO1xuJiM0MztcdHR4X3JpbmcgPSByY3VfZGVyZWZlcmVuY2Uod3gtXHUwMDNldHhfcmluZ1tyX2lkeF0pO1xuJiM0MztcbiYjNDM7XHRpZiAodW5saWtlbHkoIXR4X3JpbmcpKSB7XG4mIzQzO1x0XHRkZXZfa2ZyZWVfc2tiX2FueShza2IpO1xuJiM0MztcdFx0cmV0dXJuIE5FVERFVl9UWF9PSztcbiYjNDM7XHR9XG4gXG4gXHRyZXR1cm4gd3hfeG1pdF9mcmFtZV9yaW5nKHNrYiwgdHhfcmluZyk7XG4gfVxuQEAgLTIwNTgsMjYgJiM0MzsyMDYzLDI2IEBAIHN0YXRpYyBib29sIHd4X2NhY2hlX3Jpbmdfdm1kcShzdHJ1Y3Qgd3ggKnd4KVxuIFx0XHRcdC8qIElmIHdlIGFyZSBncmVhdGVyIHRoYW4gaW5kaWNlcyBtb3ZlIHRvIG5leHQgcG9vbCAqL1xuIFx0XHRcdGlmICgocmVnX2lkeCBcdTAwMjYgfnZtZHEtXHUwMDNlbWFzaykgXHUwMDNlPSByc3MtXHUwMDNlaW5kaWNlcylcbiBcdFx0XHRcdHJlZ19pZHggPSBfX0FMSUdOX01BU0socmVnX2lkeCwgfnZtZHEtXHUwMDNlbWFzayk7XG4tXHRcdFx0d3gtXHUwMDNlcnhfcmluZ1tpXS1cdTAwM2VyZWdfaWR4ID0gcmVnX2lkeDtcbiYjNDM7XHRcdFx0cmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZCh3eC1cdTAwM2VyeF9yaW5nW2ldLCAxKS1cdTAwM2VyZWdfaWR4ID0gcmVnX2lkeDtcbiBcdFx0fVxuIFx0XHRyZWdfaWR4ID0gdm1kcS1cdTAwM2VvZmZzZXQgKiBfX0FMSUdOX01BU0soMSwgfnZtZHEtXHUwMDNlbWFzayk7XG4gXHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHd4LVx1MDAzZW51bV90eF9xdWV1ZXM7IGkmIzQzOyYjNDM7LCByZWdfaWR4JiM0MzsmIzQzOykge1xuIFx0XHRcdC8qIElmIHdlIGFyZSBncmVhdGVyIHRoYW4gaW5kaWNlcyBtb3ZlIHRvIG5leHQgcG9vbCAqL1xuIFx0XHRcdGlmICgocmVnX2lkeCBcdTAwMjYgcnNzLVx1MDAzZW1hc2spIFx1MDAzZT0gcnNzLVx1MDAzZWluZGljZXMpXG4gXHRcdFx0XHRyZWdfaWR4ID0gX19BTElHTl9NQVNLKHJlZ19pZHgsIH52bWRxLVx1MDAzZW1hc2spO1xuLVx0XHRcdHd4LVx1MDAzZXR4X3JpbmdbaV0tXHUwMDNlcmVnX2lkeCA9IHJlZ19pZHg7XG4mIzQzO1x0XHRcdHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQod3gtXHUwMDNldHhfcmluZ1tpXSwgMSktXHUwMDNlcmVnX2lkeCA9IHJlZ19pZHg7XG4gXHRcdH1cbiBcdH0gZWxzZSB7XG4gXHRcdC8qIHN0YXJ0IGF0IFZNRHEgcmVnaXN0ZXIgb2Zmc2V0IGZvciBTUi1JT1YgZW5hYmxlZCBzZXR1cHMgKi9cbiBcdFx0cmVnX2lkeCA9IHZtZHEtXHUwMDNlb2Zmc2V0O1xuIFx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyB3eC1cdTAwM2VudW1fcnhfcXVldWVzOyBpJiM0MzsmIzQzOylcbiBcdFx0XHQvKiBJZiB3ZSBhcmUgZ3JlYXRlciB0aGFuIGluZGljZXMgbW92ZSB0byBuZXh0IHBvb2wgKi9cbi1cdFx0XHR3eC1cdTAwM2VyeF9yaW5nW2ldLVx1MDAzZXJlZ19pZHggPSByZWdfaWR4ICYjNDM7IGk7XG4mIzQzO1x0XHRcdHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQod3gtXHUwMDNlcnhfcmluZ1tpXSwgMSktXHUwMDNlcmVnX2lkeCA9IHJlZ19pZHggJiM0MzsgaTtcbiBcbiBcdFx0cmVnX2lkeCA9IHZtZHEtXHUwMDNlb2Zmc2V0O1xuIFx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyB3eC1cdTAwM2VudW1fdHhfcXVldWVzOyBpJiM0MzsmIzQzOylcbiBcdFx0XHQvKiBJZiB3ZSBhcmUgZ3JlYXRlciB0aGFuIGluZGljZXMgbW92ZSB0byBuZXh0IHBvb2wgKi9cbi1cdFx0XHR3eC1cdTAwM2V0eF9yaW5nW2ldLVx1MDAzZXJlZ19pZHggPSByZWdfaWR4ICYjNDM7IGk7XG4mIzQzO1x0XHRcdHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQod3gtXHUwMDNldHhfcmluZ1tpXSwgMSktXHUwMDNlcmVnX2lkeCA9IHJlZ19pZHggJiM0MzsgaTtcbiBcdH1cbiBcbiBcdHJldHVybiB0cnVlO1xuQEAgLTIwOTgsMTAgJiM0MzsyMTAzLDEwIEBAIHN0YXRpYyB2b2lkIHd4X2NhY2hlX3JpbmdfcnNzKHN0cnVjdCB3eCAqd3gpXG4gXHRcdHJldHVybjtcbiBcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHd4LVx1MDAzZW51bV9yeF9xdWV1ZXM7IGkmIzQzOyYjNDM7KVxuLVx0XHR3eC1cdTAwM2VyeF9yaW5nW2ldLVx1MDAzZXJlZ19pZHggPSBpO1xuJiM0MztcdFx0cmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZCh3eC1cdTAwM2VyeF9yaW5nW2ldLCAxKS1cdTAwM2VyZWdfaWR4ID0gaTtcbiBcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHd4LVx1MDAzZW51bV90eF9xdWV1ZXM7IGkmIzQzOyYjNDM7KVxuLVx0XHR3eC1cdTAwM2V0eF9yaW5nW2ldLVx1MDAzZXJlZ19pZHggPSBpO1xuJiM0MztcdFx0cmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZCh3eC1cdTAwM2V0eF9yaW5nW2ldLCAxKS1cdTAwM2VyZWdfaWR4ID0gaTtcbiB9XG4gXG4gc3RhdGljIHZvaWQgd3hfYWRkX3Jpbmcoc3RydWN0IHd4X3JpbmcgKnJpbmcsIHN0cnVjdCB3eF9yaW5nX2NvbnRhaW5lciAqaGVhZClcbkBAIC0yMTkxLDcgJiM0MzsyMTk2LDcgQEAgc3RhdGljIGludCB3eF9hbGxvY19xX3ZlY3RvcihzdHJ1Y3Qgd3ggKnd4LFxuIFx0XHRyaW5nLVx1MDAzZXF1ZXVlX2luZGV4ID0gdHhyX2lkeDtcbiBcbiBcdFx0LyogYXNzaWduIHJpbmcgdG8gd3ggKi9cbi1cdFx0d3gtXHUwMDNldHhfcmluZ1t0eHJfaWR4XSA9IHJpbmc7XG4mIzQzO1x0XHRyY3VfYXNzaWduX3BvaW50ZXIod3gtXHUwMDNldHhfcmluZ1t0eHJfaWR4XSwgcmluZyk7XG4gXG4gXHRcdC8qIHVwZGF0ZSBjb3VudCBhbmQgaW5kZXggKi9cbiBcdFx0dHhyX2NvdW50LS07XG5AQCAtMjIxNyw3ICYjNDM7MjIyMiw3IEBAIHN0YXRpYyBpbnQgd3hfYWxsb2NfcV92ZWN0b3Ioc3RydWN0IHd4ICp3eCxcbiBcdFx0cmluZy1cdTAwM2VxdWV1ZV9pbmRleCA9IHJ4cl9pZHg7XG4gXG4gXHRcdC8qIGFzc2lnbiByaW5nIHRvIHd4ICovXG4tXHRcdHd4LVx1MDAzZXJ4X3JpbmdbcnhyX2lkeF0gPSByaW5nO1xuJiM0MztcdFx0cmN1X2Fzc2lnbl9wb2ludGVyKHd4LVx1MDAzZXJ4X3JpbmdbcnhyX2lkeF0sIHJpbmcpO1xuIFxuIFx0XHQvKiB1cGRhdGUgY291bnQgYW5kIGluZGV4ICovXG4gXHRcdHJ4cl9jb3VudC0tO1xuQEAgLTIyNDUsMTAgJiM0MzsyMjUwLDEwIEBAIHN0YXRpYyB2b2lkIHd4X2ZyZWVfcV92ZWN0b3Ioc3RydWN0IHd4ICp3eCwgaW50IHZfaWR4KVxuIFx0c3RydWN0IHd4X3JpbmcgKnJpbmc7XG4gXG4gXHR3eF9mb3JfZWFjaF9yaW5nKHJpbmcsIHFfdmVjdG9yLVx1MDAzZXR4KVxuLVx0XHR3eC1cdTAwM2V0eF9yaW5nW3JpbmctXHUwMDNlcXVldWVfaW5kZXhdID0gTlVMTDtcbiYjNDM7XHRcdHJjdV9hc3NpZ25fcG9pbnRlcih3eC1cdTAwM2V0eF9yaW5nW3JpbmctXHUwMDNlcXVldWVfaW5kZXhdLCBOVUxMKTtcbiBcbiBcdHd4X2Zvcl9lYWNoX3JpbmcocmluZywgcV92ZWN0b3ItXHUwMDNlcngpXG4tXHRcdHd4LVx1MDAzZXJ4X3JpbmdbcmluZy1cdTAwM2VxdWV1ZV9pbmRleF0gPSBOVUxMO1xuJiM0MztcdFx0cmN1X2Fzc2lnbl9wb2ludGVyKHd4LVx1MDAzZXJ4X3JpbmdbcmluZy1cdTAwM2VxdWV1ZV9pbmRleF0sIE5VTEwpO1xuIFxuIFx0d3gtXHUwMDNlcV92ZWN0b3Jbdl9pZHhdID0gTlVMTDtcbiBcdG5ldGlmX25hcGlfZGVsKFx1MDAyNnFfdmVjdG9yLVx1MDAzZW5hcGkpO1xuQEAgLTI2NTksNyAmIzQzOzI2NjQsNyBAQCB2b2lkIHd4X2NsZWFuX2FsbF9yeF9yaW5ncyhzdHJ1Y3Qgd3ggKnd4KVxuIFx0aW50IGk7XG4gXG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyB3eC1cdTAwM2VudW1fcnhfcXVldWVzOyBpJiM0MzsmIzQzOylcbi1cdFx0d3hfY2xlYW5fcnhfcmluZyh3eC1cdTAwM2VyeF9yaW5nW2ldKTtcbiYjNDM7XHRcdHd4X2NsZWFuX3J4X3JpbmcocmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZCh3eC1cdTAwM2VyeF9yaW5nW2ldLCAxKSk7XG4gfVxuIEVYUE9SVF9TWU1CT0wod3hfY2xlYW5fYWxsX3J4X3JpbmdzKTtcbiBcbkBAIC0yNzAxLDcgJiM0MzsyNzA2LDcgQEAgc3RhdGljIHZvaWQgd3hfZnJlZV9hbGxfcnhfcmVzb3VyY2VzKHN0cnVjdCB3eCAqd3gpXG4gXHRpbnQgaTtcbiBcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHd4LVx1MDAzZW51bV9yeF9xdWV1ZXM7IGkmIzQzOyYjNDM7KVxuLVx0XHR3eF9mcmVlX3J4X3Jlc291cmNlcyh3eC1cdTAwM2VyeF9yaW5nW2ldKTtcbiYjNDM7XHRcdHd4X2ZyZWVfcnhfcmVzb3VyY2VzKHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQod3gtXHUwMDNlcnhfcmluZ1tpXSwgMSkpO1xuIH1cbiBcbiAvKipcbkBAIC0yNzc1LDcgJiM0MzsyNzgwLDcgQEAgdm9pZCB3eF9jbGVhbl9hbGxfdHhfcmluZ3Moc3RydWN0IHd4ICp3eClcbiBcdGludCBpO1xuIFxuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2Mgd3gtXHUwMDNlbnVtX3R4X3F1ZXVlczsgaSYjNDM7JiM0MzspXG4tXHRcdHd4X2NsZWFuX3R4X3Jpbmcod3gtXHUwMDNldHhfcmluZ1tpXSk7XG4mIzQzO1x0XHR3eF9jbGVhbl90eF9yaW5nKHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQod3gtXHUwMDNldHhfcmluZ1tpXSwgMSkpO1xuIH1cbiBFWFBPUlRfU1lNQk9MKHd4X2NsZWFuX2FsbF90eF9yaW5ncyk7XG4gXG5AQCAtMjgyMyw3ICYjNDM7MjgyOCw3IEBAIHN0YXRpYyB2b2lkIHd4X2ZyZWVfYWxsX3R4X3Jlc291cmNlcyhzdHJ1Y3Qgd3ggKnd4KVxuIFx0aW50IGk7XG4gXG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyB3eC1cdTAwM2VudW1fdHhfcXVldWVzOyBpJiM0MzsmIzQzOylcbi1cdFx0d3hfZnJlZV90eF9yZXNvdXJjZXMod3gtXHUwMDNldHhfcmluZ1tpXSk7XG4mIzQzO1x0XHR3eF9mcmVlX3R4X3Jlc291cmNlcyhyY3VfZGVyZWZlcmVuY2VfcHJvdGVjdGVkKHd4LVx1MDAzZXR4X3JpbmdbaV0sIDEpKTtcbiB9XG4gXG4gdm9pZCB3eF9mcmVlX3Jlc291cmNlcyhzdHJ1Y3Qgd3ggKnd4KVxuQEAgLTI5MzMsNyAmIzQzOzI5MzgsNyBAQCBzdGF0aWMgaW50IHd4X3NldHVwX2FsbF9yeF9yZXNvdXJjZXMoc3RydWN0IHd4ICp3eClcbiBcdGludCBpLCBlcnIgPSAwO1xuIFxuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2Mgd3gtXHUwMDNlbnVtX3J4X3F1ZXVlczsgaSYjNDM7JiM0MzspIHtcbi1cdFx0ZXJyID0gd3hfc2V0dXBfcnhfcmVzb3VyY2VzKHd4LVx1MDAzZXJ4X3JpbmdbaV0pO1xuJiM0MztcdFx0ZXJyID0gd3hfc2V0dXBfcnhfcmVzb3VyY2VzKHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQod3gtXHUwMDNlcnhfcmluZ1tpXSwgMSkpO1xuIFx0XHRpZiAoIWVycilcbiBcdFx0XHRjb250aW51ZTtcbiBcbkBAIC0yOTQ1LDcgJiM0MzsyOTUwLDcgQEAgc3RhdGljIGludCB3eF9zZXR1cF9hbGxfcnhfcmVzb3VyY2VzKHN0cnVjdCB3eCAqd3gpXG4gZXJyX3NldHVwX3J4OlxuIFx0LyogcmV3aW5kIHRoZSBpbmRleCBmcmVlaW5nIHRoZSByaW5ncyBhcyB3ZSBnbyAqL1xuIFx0d2hpbGUgKGktLSlcbi1cdFx0d3hfZnJlZV9yeF9yZXNvdXJjZXMod3gtXHUwMDNlcnhfcmluZ1tpXSk7XG4mIzQzO1x0XHR3eF9mcmVlX3J4X3Jlc291cmNlcyhyY3VfZGVyZWZlcmVuY2VfcHJvdGVjdGVkKHd4LVx1MDAzZXJ4X3JpbmdbaV0sIDEpKTtcbiBcdHJldHVybiBlcnI7XG4gfVxuIFxuQEAgLTMwMzYsNyAmIzQzOzMwNDEsNyBAQCBzdGF0aWMgaW50IHd4X3NldHVwX2FsbF90eF9yZXNvdXJjZXMoc3RydWN0IHd4ICp3eClcbiBcdGludCBpLCBlcnIgPSAwO1xuIFxuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2Mgd3gtXHUwMDNlbnVtX3R4X3F1ZXVlczsgaSYjNDM7JiM0MzspIHtcbi1cdFx0ZXJyID0gd3hfc2V0dXBfdHhfcmVzb3VyY2VzKHd4LVx1MDAzZXR4X3JpbmdbaV0pO1xuJiM0MztcdFx0ZXJyID0gd3hfc2V0dXBfdHhfcmVzb3VyY2VzKHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQod3gtXHUwMDNldHhfcmluZ1tpXSwgMSkpO1xuIFx0XHRpZiAoIWVycilcbiBcdFx0XHRjb250aW51ZTtcbiBcbkBAIC0zMDQ4LDcgJiM0MzszMDUzLDcgQEAgc3RhdGljIGludCB3eF9zZXR1cF9hbGxfdHhfcmVzb3VyY2VzKHN0cnVjdCB3eCAqd3gpXG4gZXJyX3NldHVwX3R4OlxuIFx0LyogcmV3aW5kIHRoZSBpbmRleCBmcmVlaW5nIHRoZSByaW5ncyBhcyB3ZSBnbyAqL1xuIFx0d2hpbGUgKGktLSlcbi1cdFx0d3hfZnJlZV90eF9yZXNvdXJjZXMod3gtXHUwMDNldHhfcmluZ1tpXSk7XG4mIzQzO1x0XHR3eF9mcmVlX3R4X3Jlc291cmNlcyhyY3VfZGVyZWZlcmVuY2VfcHJvdGVjdGVkKHd4LVx1MDAzZXR4X3JpbmdbaV0sIDEpKTtcbiBcdHJldHVybiBlcnI7XG4gfVxuIFxuQEAgLTMwOTcsNyAmIzQzOzMxMDIsNyBAQCB2b2lkIHd4X2dldF9zdGF0czY0KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXG4gXG4gXHRyY3VfcmVhZF9sb2NrKCk7XG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyB3eC1cdTAwM2VudW1fcnhfcXVldWVzOyBpJiM0MzsmIzQzOykge1xuLVx0XHRzdHJ1Y3Qgd3hfcmluZyAqcmluZyA9IFJFQURfT05DRSh3eC1cdTAwM2VyeF9yaW5nW2ldKTtcbiYjNDM7XHRcdHN0cnVjdCB3eF9yaW5nICpyaW5nID0gcmN1X2RlcmVmZXJlbmNlKHd4LVx1MDAzZXJ4X3JpbmdbaV0pO1xuIFx0XHR1NjQgYnl0ZXMsIHBhY2tldHM7XG4gXHRcdHVuc2lnbmVkIGludCBzdGFydDtcbiBcbkBAIC0zMTEzLDcgJiM0MzszMTE4LDcgQEAgdm9pZCB3eF9nZXRfc3RhdHM2NChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxuIFx0fVxuIFxuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2Mgd3gtXHUwMDNlbnVtX3R4X3F1ZXVlczsgaSYjNDM7JiM0MzspIHtcbi1cdFx0c3RydWN0IHd4X3JpbmcgKnJpbmcgPSBSRUFEX09OQ0Uod3gtXHUwMDNldHhfcmluZ1tpXSk7XG4mIzQzO1x0XHRzdHJ1Y3Qgd3hfcmluZyAqcmluZyA9IHJjdV9kZXJlZmVyZW5jZSh3eC1cdTAwM2V0eF9yaW5nW2ldKTtcbiBcdFx0dTY0IGJ5dGVzLCBwYWNrZXRzO1xuIFx0XHR1bnNpZ25lZCBpbnQgc3RhcnQ7XG4gXG5AQCAtMzMyNCw3ICYjNDM7MzMyOSw3IEBAIGludCB3eF9zZXRfcmluZyhzdHJ1Y3Qgd3ggKnd4LCB1MzIgbmV3X3R4X2NvdW50LFxuIFx0ICovXG4gXHRpZiAobmV3X3R4X2NvdW50ICE9IHd4LVx1MDAzZXR4X3JpbmdfY291bnQpIHtcbiBcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2Mgd3gtXHUwMDNlbnVtX3R4X3F1ZXVlczsgaSYjNDM7JiM0MzspIHtcbi1cdFx0XHRtZW1jcHkoXHUwMDI2dGVtcF9yaW5nW2ldLCB3eC1cdTAwM2V0eF9yaW5nW2ldLFxuJiM0MztcdFx0XHRtZW1jcHkoXHUwMDI2dGVtcF9yaW5nW2ldLCByY3VfZGVyZWZlcmVuY2VfcHJvdGVjdGVkKHd4LVx1MDAzZXR4X3JpbmdbaV0sIDEpLFxuIFx0XHRcdCAgICAgICBzaXplb2Yoc3RydWN0IHd4X3JpbmcpKTtcbiBcbiBcdFx0XHR0ZW1wX3JpbmdbaV0uY291bnQgPSBuZXdfdHhfY291bnQ7XG5AQCAtMzM0MCw5ICYjNDM7MzM0NSwxMSBAQCBpbnQgd3hfc2V0X3Jpbmcoc3RydWN0IHd4ICp3eCwgdTMyIG5ld190eF9jb3VudCxcbiBcdFx0fVxuIFxuIFx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyB3eC1cdTAwM2VudW1fdHhfcXVldWVzOyBpJiM0MzsmIzQzOykge1xuLVx0XHRcdHd4X2ZyZWVfdHhfcmVzb3VyY2VzKHd4LVx1MDAzZXR4X3JpbmdbaV0pO1xuJiM0MztcdFx0XHRzdHJ1Y3Qgd3hfcmluZyAqdHhfcmluZyA9IHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQod3gtXHUwMDNldHhfcmluZ1tpXSwgMSk7XG4mIzQzO1xuJiM0MztcdFx0XHR3eF9mcmVlX3R4X3Jlc291cmNlcyh0eF9yaW5nKTtcbiBcbi1cdFx0XHRtZW1jcHkod3gtXHUwMDNldHhfcmluZ1tpXSwgXHUwMDI2dGVtcF9yaW5nW2ldLFxuJiM0MztcdFx0XHRtZW1jcHkodHhfcmluZywgXHUwMDI2dGVtcF9yaW5nW2ldLFxuIFx0XHRcdCAgICAgICBzaXplb2Yoc3RydWN0IHd4X3JpbmcpKTtcbiBcdFx0fVxuIFxuQEAgLTMzNTIsNyAmIzQzOzMzNTksNyBAQCBpbnQgd3hfc2V0X3Jpbmcoc3RydWN0IHd4ICp3eCwgdTMyIG5ld190eF9jb3VudCxcbiBcdC8qIFJlcGVhdCB0aGUgcHJvY2VzcyBmb3IgdGhlIFJ4IHJpbmdzIGlmIG5lZWRlZCAqL1xuIFx0aWYgKG5ld19yeF9jb3VudCAhPSB3eC1cdTAwM2VyeF9yaW5nX2NvdW50KSB7XG4gXHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHd4LVx1MDAzZW51bV9yeF9xdWV1ZXM7IGkmIzQzOyYjNDM7KSB7XG4tXHRcdFx0bWVtY3B5KFx1MDAyNnRlbXBfcmluZ1tpXSwgd3gtXHUwMDNlcnhfcmluZ1tpXSxcbiYjNDM7XHRcdFx0bWVtY3B5KFx1MDAyNnRlbXBfcmluZ1tpXSwgcmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZCh3eC1cdTAwM2VyeF9yaW5nW2ldLCAxKSxcbiBcdFx0XHQgICAgICAgc2l6ZW9mKHN0cnVjdCB3eF9yaW5nKSk7XG4gXG4gXHRcdFx0dGVtcF9yaW5nW2ldLmNvdW50ID0gbmV3X3J4X2NvdW50O1xuQEAgLTMzNjgsOCAmIzQzOzMzNzUsMTAgQEAgaW50IHd4X3NldF9yaW5nKHN0cnVjdCB3eCAqd3gsIHUzMiBuZXdfdHhfY291bnQsXG4gXHRcdH1cbiBcbiBcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2Mgd3gtXHUwMDNlbnVtX3J4X3F1ZXVlczsgaSYjNDM7JiM0MzspIHtcbi1cdFx0XHR3eF9mcmVlX3J4X3Jlc291cmNlcyh3eC1cdTAwM2VyeF9yaW5nW2ldKTtcbi1cdFx0XHRtZW1jcHkod3gtXHUwMDNlcnhfcmluZ1tpXSwgXHUwMDI2dGVtcF9yaW5nW2ldLFxuJiM0MztcdFx0XHRzdHJ1Y3Qgd3hfcmluZyAqcnhfcmluZyA9IHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQod3gtXHUwMDNlcnhfcmluZ1tpXSwgMSk7XG4mIzQzO1xuJiM0MztcdFx0XHR3eF9mcmVlX3J4X3Jlc291cmNlcyhyeF9yaW5nKTtcbiYjNDM7XHRcdFx0bWVtY3B5KHJ4X3JpbmcsIFx1MDAyNnRlbXBfcmluZ1tpXSxcbiBcdFx0XHQgICAgICAgc2l6ZW9mKHN0cnVjdCB3eF9yaW5nKSk7XG4gXHRcdH1cbiBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X3B0cC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9wdHAuY1xuaW5kZXggNDcwOGU3ZjM5NThmNy4uNjhkYzYyOTc3YWFiMiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfcHRwLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfcHRwLmNcbkBAIC0yNzQsMTEgJiM0MzsyNzQsMTUgQEAgc3RhdGljIHZvaWQgd3hfcHRwX3J4X2hhbmcoc3RydWN0IHd4ICp3eClcbiBcbiBcdC8qIGRldGVybWluZSB0aGUgbW9zdCByZWNlbnQgd2F0Y2hkb2cgb3IgcnhfdGltZXN0YW1wIGV2ZW50ICovXG4gXHRyeF9ldmVudCA9IHd4LVx1MDAzZWxhc3RfcnhfcHRwX2NoZWNrO1xuJiM0MztcdHJjdV9yZWFkX2xvY2soKTtcbiBcdGZvciAobiA9IDA7IG4gXHUwMDNjIHd4LVx1MDAzZW51bV9yeF9xdWV1ZXM7IG4mIzQzOyYjNDM7KSB7XG4tXHRcdHJ4X3JpbmcgPSB3eC1cdTAwM2VyeF9yaW5nW25dO1xuJiM0MztcdFx0cnhfcmluZyA9IHJjdV9kZXJlZmVyZW5jZSh3eC1cdTAwM2VyeF9yaW5nW25dKTtcbiYjNDM7XHRcdGlmICghcnhfcmluZylcbiYjNDM7XHRcdFx0Y29udGludWU7XG4gXHRcdGlmICh0aW1lX2FmdGVyKHJ4X3JpbmctXHUwMDNlbGFzdF9yeF90aW1lc3RhbXAsIHJ4X2V2ZW50KSlcbiBcdFx0XHRyeF9ldmVudCA9IHJ4X3JpbmctXHUwMDNlbGFzdF9yeF90aW1lc3RhbXA7XG4gXHR9XG4mIzQzO1x0cmN1X3JlYWRfdW5sb2NrKCk7XG4gXG4gXHQvKiBvbmx5IG5lZWQgdG8gcmVhZCB0aGUgaGlnaCBSWFNUTVAgcmVnaXN0ZXIgdG8gY2xlYXIgdGhlIGxvY2sgKi9cbiBcdGlmICh0aW1lX2lzX2JlZm9yZV9qaWZmaWVzKHJ4X2V2ZW50ICYjNDM7IDUgKiBIWikpIHtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X3R5cGUuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfdHlwZS5oXG5pbmRleCA5NDU0ZTkwMjU4ZDhlLi45OTUyZDAyMzQyNDAxIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF90eXBlLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfdHlwZS5oXG5AQCAtMTM1OSw4ICYjNDM7MTM1OSw4IEBAIHN0cnVjdCB3eCB7XG4gXHR1MzIgdHhfcmluZ19jb3VudDtcbiBcdHUzMiByeF9yaW5nX2NvdW50O1xuIFxuLVx0c3RydWN0IHd4X3JpbmcgKnR4X3JpbmdbNjRdIF9fX19jYWNoZWxpbmVfYWxpZ25lZF9pbl9zbXA7XG4tXHRzdHJ1Y3Qgd3hfcmluZyAqcnhfcmluZ1s2NF07XG4mIzQzO1x0c3RydWN0IHd4X3JpbmcgX19yY3UgKnR4X3JpbmdbNjRdIF9fX19jYWNoZWxpbmVfYWxpZ25lZF9pbl9zbXA7XG4mIzQzO1x0c3RydWN0IHd4X3JpbmcgX19yY3UgKnJ4X3JpbmdbNjRdO1xuIFx0c3RydWN0IHd4X3FfdmVjdG9yICpxX3ZlY3Rvcls2NF07XG4gXHRpbnQgbnVtX3J4X3Bvb2xzO1xuIFx0aW50IG51bV9yeF9xdWV1ZXNfcGVyX3Bvb2w7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF92Zl9jb21tb24uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfdmZfY29tbW9uLmNcbmluZGV4IDI2ZGU3OGU5YTY5ZWYuLmM4MzA4MjRjNDg2OWUgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X3ZmX2NvbW1vbi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X3ZmX2NvbW1vbi5jXG5AQCAtMjA1LDcgJiM0MzsyMDUsNyBAQCBzdGF0aWMgdm9pZCB3eF9jb25maWd1cmVfcnhfdmYoc3RydWN0IHd4ICp3eClcbiBcdCAqIHRoZSBCYXNlIGFuZCBMZW5ndGggb2YgdGhlIFJ4IERlc2NyaXB0b3IgUmluZ1xuIFx0ICovXG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyB3eC1cdTAwM2VudW1fcnhfcXVldWVzOyBpJiM0MzsmIzQzOykge1xuLVx0XHRzdHJ1Y3Qgd3hfcmluZyAqcnhfcmluZyA9IHd4LVx1MDAzZXJ4X3JpbmdbaV07XG4mIzQzO1x0XHRzdHJ1Y3Qgd3hfcmluZyAqcnhfcmluZyA9IHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQod3gtXHUwMDNlcnhfcmluZ1tpXSwgMSk7XG4gI2lmZGVmIEhBVkVfU1dJT1RMQl9TS0lQX0NQVV9TWU5DXG4gXHRcdHd4X3NldF9yeF9idWZmZXJfbGVuX3ZmKHd4LCByeF9yaW5nKTtcbiAjZW5kaWZcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X3ZmX2xpYi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF92Zl9saWIuY1xuaW5kZXggNzMyNWI0NzVlZTEwYy4uMGUwOWU2NmM2ZGU2ZCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfdmZfbGliLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfdmZfbGliLmNcbkBAIC0xNzUsOCAmIzQzOzE3NSwxMSBAQCB2b2lkIHd4X2NvbmZpZ3VyZV90eF92ZihzdHJ1Y3Qgd3ggKnd4KVxuIFx0dTMyIGk7XG4gXG4gXHQvKiBTZXR1cCB0aGUgSFcgVHggSGVhZCBhbmQgVGFpbCBkZXNjcmlwdG9yIHBvaW50ZXJzICovXG4tXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyB3eC1cdTAwM2VudW1fdHhfcXVldWVzOyBpJiM0MzsmIzQzOylcbi1cdFx0d3hfY29uZmlndXJlX3R4X3JpbmdfdmYod3gsIHd4LVx1MDAzZXR4X3JpbmdbaV0pO1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHd4LVx1MDAzZW51bV90eF9xdWV1ZXM7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRzdHJ1Y3Qgd3hfcmluZyAqdHhfcmluZyA9IHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQod3gtXHUwMDNldHhfcmluZ1tpXSwgMSk7XG4mIzQzO1xuJiM0MztcdFx0d3hfY29uZmlndXJlX3R4X3JpbmdfdmYod3gsIHR4X3JpbmcpO1xuJiM0MztcdH1cbiB9XG4gXG4gc3RhdGljIHZvaWQgd3hfY29uZmlndXJlX3NycmN0bF92ZihzdHJ1Y3Qgd3ggKnd4LCBzdHJ1Y3Qgd3hfcmluZyAqcmluZyxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9ldGh0b29sLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9ldGh0b29sLmNcbmluZGV4IDE5NjBmNzE1NDE1MWQuLjllOTA3MDJhNTE0NmEgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9ldGh0b29sLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX2V0aHRvb2wuY1xuQEAgLTM3LDkgJiM0MzszNyw5IEBAIHN0YXRpYyBpbnQgbmdiZV9zZXRfcmluZ3BhcmFtKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXG4gXG4gXHRpZiAoIW5ldGlmX3J1bm5pbmcod3gtXHUwMDNlbmV0ZGV2KSkge1xuIFx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyB3eC1cdTAwM2VudW1fdHhfcXVldWVzOyBpJiM0MzsmIzQzOylcbi1cdFx0XHR3eC1cdTAwM2V0eF9yaW5nW2ldLVx1MDAzZWNvdW50ID0gbmV3X3R4X2NvdW50O1xuJiM0MztcdFx0XHRyY3VfZGVyZWZlcmVuY2VfcHJvdGVjdGVkKHd4LVx1MDAzZXR4X3JpbmdbaV0sIDEpLVx1MDAzZWNvdW50ID0gbmV3X3R4X2NvdW50O1xuIFx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyB3eC1cdTAwM2VudW1fcnhfcXVldWVzOyBpJiM0MzsmIzQzOylcbi1cdFx0XHR3eC1cdTAwM2VyeF9yaW5nW2ldLVx1MDAzZWNvdW50ID0gbmV3X3J4X2NvdW50O1xuJiM0MztcdFx0XHRyY3VfZGVyZWZlcmVuY2VfcHJvdGVjdGVkKHd4LVx1MDAzZXJ4X3JpbmdbaV0sIDEpLVx1MDAzZWNvdW50ID0gbmV3X3J4X2NvdW50O1xuIFx0XHR3eC1cdTAwM2V0eF9yaW5nX2NvdW50ID0gbmV3X3R4X2NvdW50O1xuIFx0XHR3eC1cdTAwM2VyeF9yaW5nX2NvdW50ID0gbmV3X3J4X2NvdW50O1xuIFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX21haW4uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX21haW4uY1xuaW5kZXggODU1ZGM5NjNjNjEwYy4uZTQ1ZDdkZmRjOWY5MCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX21haW4uY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfbWFpbi5jXG5AQCAtNDA2LDcgJiM0Mzs0MDYsNyBAQCBzdGF0aWMgdm9pZCBuZ2JlX2Rpc2FibGVfZGV2aWNlKHN0cnVjdCB3eCAqd3gpXG4gXHQvKiBkaXNhYmxlIGFsbCBlbmFibGVkIHJ4IHF1ZXVlcyAqL1xuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2Mgd3gtXHUwMDNlbnVtX3J4X3F1ZXVlczsgaSYjNDM7JiM0MzspXG4gXHRcdC8qIHRoaXMgY2FsbCBhbHNvIGZsdXNoZXMgdGhlIHByZXZpb3VzIHdyaXRlICovXG4tXHRcdHd4X2Rpc2FibGVfcnhfcXVldWUod3gsIHd4LVx1MDAzZXJ4X3JpbmdbaV0pO1xuJiM0MztcdFx0d3hfZGlzYWJsZV9yeF9xdWV1ZSh3eCwgcmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZCh3eC1cdTAwM2VyeF9yaW5nW2ldLCAxKSk7XG4gXHQvKiBkaXNhYmxlIHJlY2VpdmVzICovXG4gXHR3eF9kaXNhYmxlX3J4KHd4KTtcbiBcdHd4X25hcGlfZGlzYWJsZV9hbGwod3gpO1xuQEAgLTQyMiw3ICYjNDM7NDIyLDcgQEAgc3RhdGljIHZvaWQgbmdiZV9kaXNhYmxlX2RldmljZShzdHJ1Y3Qgd3ggKnd4KVxuIFx0d3hfaXJxX2Rpc2FibGUod3gpO1xuIFx0LyogZGlzYWJsZSB0cmFuc21pdHMgaW4gdGhlIGhhcmR3YXJlIG5vdyB0aGF0IGludGVycnVwdHMgYXJlIG9mZiAqL1xuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2Mgd3gtXHUwMDNlbnVtX3R4X3F1ZXVlczsgaSYjNDM7JiM0MzspIHtcbi1cdFx0dTggcmVnX2lkeCA9IHd4LVx1MDAzZXR4X3JpbmdbaV0tXHUwMDNlcmVnX2lkeDtcbiYjNDM7XHRcdHU4IHJlZ19pZHggPSByY3VfZGVyZWZlcmVuY2VfcHJvdGVjdGVkKHd4LVx1MDAzZXR4X3JpbmdbaV0sIDEpLVx1MDAzZXJlZ19pZHg7XG4gXG4gXHRcdHdyMzIod3gsIFdYX1BYX1RSX0NGRyhyZWdfaWR4KSwgV1hfUFhfVFJfQ0ZHX1NXRkxTSCk7XG4gXHR9XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9ldGh0b29sLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX2V0aHRvb2wuY1xuaW5kZXggM2UzMmFjYTcyODA2NS4uZmNmYWY2ZjJmNTQ0YSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfZXRodG9vbC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX2V0aHRvb2wuY1xuQEAgLTYxLDkgJiM0Mzs2MSw5IEBAIHN0YXRpYyBpbnQgdHhnYmVfc2V0X3JpbmdwYXJhbShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxuIFxuIFx0aWYgKCFuZXRpZl9ydW5uaW5nKHd4LVx1MDAzZW5ldGRldikpIHtcbiBcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2Mgd3gtXHUwMDNlbnVtX3R4X3F1ZXVlczsgaSYjNDM7JiM0MzspXG4tXHRcdFx0d3gtXHUwMDNldHhfcmluZ1tpXS1cdTAwM2Vjb3VudCA9IG5ld190eF9jb3VudDtcbiYjNDM7XHRcdFx0cmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZCh3eC1cdTAwM2V0eF9yaW5nW2ldLCAxKS1cdTAwM2Vjb3VudCA9IG5ld190eF9jb3VudDtcbiBcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2Mgd3gtXHUwMDNlbnVtX3J4X3F1ZXVlczsgaSYjNDM7JiM0MzspXG4tXHRcdFx0d3gtXHUwMDNlcnhfcmluZ1tpXS1cdTAwM2Vjb3VudCA9IG5ld19yeF9jb3VudDtcbiYjNDM7XHRcdFx0cmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZCh3eC1cdTAwM2VyeF9yaW5nW2ldLCAxKS1cdTAwM2Vjb3VudCA9IG5ld19yeF9jb3VudDtcbiBcdFx0d3gtXHUwMDNldHhfcmluZ19jb3VudCA9IG5ld190eF9jb3VudDtcbiBcdFx0d3gtXHUwMDNlcnhfcmluZ19jb3VudCA9IG5ld19yeF9jb3VudDtcbiBcbkBAIC0zNjYsNyAmIzQzOzM2Niw3IEBAIHN0YXRpYyBpbnQgdHhnYmVfYWRkX2V0aHRvb2xfZmRpcl9lbnRyeShzdHJ1Y3QgdHhnYmUgKnR4Z2JlLFxuIFxuIFx0XHQvKiBNYXAgdGhlIHJpbmcgb250byB0aGUgYWJzb2x1dGUgcXVldWUgaW5kZXggKi9cbiBcdFx0aWYgKCF2Zilcbi1cdFx0XHRxdWV1ZSA9IHd4LVx1MDAzZXJ4X3JpbmdbcmluZ10tXHUwMDNlcmVnX2lkeDtcbiYjNDM7XHRcdFx0cXVldWUgPSByY3VfZGVyZWZlcmVuY2VfcHJvdGVjdGVkKHd4LVx1MDAzZXJ4X3JpbmdbcmluZ10sIDEpLVx1MDAzZXJlZ19pZHg7XG4gXHRcdGVsc2VcbiBcdFx0XHRxdWV1ZSA9ICgodmYgLSAxKSAqIHd4LVx1MDAzZW51bV9yeF9xdWV1ZXNfcGVyX3Bvb2wpICYjNDM7IHJpbmc7XG4gXHR9XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9mZGlyLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX2ZkaXIuY1xuaW5kZXggYTg0MDEwODI4NTUxNy4uNjBjOGVhNDc3ODI3ZCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfZmRpci5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX2ZkaXIuY1xuQEAgLTU5OSw3ICYjNDM7NTk5LDcgQEAgc3RhdGljIHZvaWQgdHhnYmVfZmRpcl9maWx0ZXJfcmVzdG9yZShzdHJ1Y3Qgd3ggKnd4KVxuIFx0XHRcdH1cbiBcbiBcdFx0XHQvKiBNYXAgdGhlIHJpbmcgb250byB0aGUgYWJzb2x1dGUgcXVldWUgaW5kZXggKi9cbi1cdFx0XHRxdWV1ZSA9IHd4LVx1MDAzZXJ4X3JpbmdbcmluZ10tXHUwMDNlcmVnX2lkeDtcbiYjNDM7XHRcdFx0cXVldWUgPSByY3VfZGVyZWZlcmVuY2VfcHJvdGVjdGVkKHd4LVx1MDAzZXJ4X3JpbmdbcmluZ10sIDEpLVx1MDAzZXJlZ19pZHg7XG4gXHRcdH1cbiBcbiBcdFx0cmV0ID0gdHhnYmVfZmRpcl93cml0ZV9wZXJmZWN0X2ZpbHRlcih3eCxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX21haW4uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfbWFpbi5jXG5pbmRleCBlYjkxYzRmMjhlY2Q0Li41MzYxMzYwZjdjNmVlIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9tYWluLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfbWFpbi5jXG5AQCAtMjM5LDcgJiM0MzsyMzksNyBAQCBzdGF0aWMgdm9pZCB0eGdiZV9kaXNhYmxlX2RldmljZShzdHJ1Y3Qgd3ggKnd4KVxuIFx0LyogZGlzYWJsZSBhbGwgZW5hYmxlZCByeCBxdWV1ZXMgKi9cbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHd4LVx1MDAzZW51bV9yeF9xdWV1ZXM7IGkmIzQzOyYjNDM7KVxuIFx0XHQvKiB0aGlzIGNhbGwgYWxzbyBmbHVzaGVzIHRoZSBwcmV2aW91cyB3cml0ZSAqL1xuLVx0XHR3eF9kaXNhYmxlX3J4X3F1ZXVlKHd4LCB3eC1cdTAwM2VyeF9yaW5nW2ldKTtcbiYjNDM7XHRcdHd4X2Rpc2FibGVfcnhfcXVldWUod3gsIHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQod3gtXHUwMDNlcnhfcmluZ1tpXSwgMSkpO1xuIFxuIFx0bmV0aWZfdHhfc3RvcF9hbGxfcXVldWVzKG5ldGRldik7XG4gXHRuZXRpZl90eF9kaXNhYmxlKG5ldGRldik7XG5AQCAtMjc1LDcgJiM0MzsyNzUsNyBAQCBzdGF0aWMgdm9pZCB0eGdiZV9kaXNhYmxlX2RldmljZShzdHJ1Y3Qgd3ggKnd4KVxuIFxuIFx0LyogZGlzYWJsZSB0cmFuc21pdHMgaW4gdGhlIGhhcmR3YXJlIG5vdyB0aGF0IGludGVycnVwdHMgYXJlIG9mZiAqL1xuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2Mgd3gtXHUwMDNlbnVtX3R4X3F1ZXVlczsgaSYjNDM7JiM0MzspIHtcbi1cdFx0dTggcmVnX2lkeCA9IHd4LVx1MDAzZXR4X3JpbmdbaV0tXHUwMDNlcmVnX2lkeDtcbiYjNDM7XHRcdHU4IHJlZ19pZHggPSByY3VfZGVyZWZlcmVuY2VfcHJvdGVjdGVkKHd4LVx1MDAzZXR4X3JpbmdbaV0sIDEpLVx1MDAzZXJlZ19pZHg7XG4gXG4gXHRcdHdyMzIod3gsIFdYX1BYX1RSX0NGRyhyZWdfaWR4KSwgV1hfUFhfVFJfQ0ZHX1NXRkxTSCk7XG4gXHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTE6MDU8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgY2hhbmdlcyBhcmUgc3RyaWN0bHkgY29uZmluZWQgdG8gdGhlIFdhbmd4dW4gRXRoZXJuZXQgbmV0d29yayBkcml2ZXJzIChsaWJ3eCwgbmdiZSwgdHhnYmUpIHVuZGVyIGRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vLiBUaGVzZSBkcml2ZXJzIHJlcXVpcmUgdmVuZG9yLXNwZWNpZmljIFBDSWUgQVNJQyBoYXJkd2FyZSB0aGF0IGlzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgKFFFTVUvR0NFKSwgbWFraW5nIHRoZSBtb2RpZmllZCBjb2RlIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBmb3Igc3l6a2FsbGVyIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3MKdG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncywKYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy4KCi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6CiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZAogIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuCiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLAogIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy4KCi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgJiMzNDtOTyBGVU5DVElPTkFMIENIQU5HRSYjMzQ7IChORkNJKSBPUiAmIzM0O1JFRkFDVE9SSU5HJiMzNDsgQ0xBSU1TOgogIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgJiMzNDtjbGVhbnVwcyYjMzQ7LCAmIzM0O3JlZmFjdG9yaW5ncyYjMzQ7LCBvciBzdGF0ZQogICYjMzQ7Tm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWQmIzM0Oy4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuCiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50CiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuCiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC4KCi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6CiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLAogIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLgogIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXIKICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoyLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOgoKLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOgogICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLgogICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pCiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuCiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50cwogICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy4KICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy4KLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6CiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczoKICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZwogICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuCiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQozLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6Ci0gQ29yZSBTdWJzeXN0ZW1zOgogICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLAogICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLgotIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczoKICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy4KLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6CiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuCi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczoKICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpXaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjoKCi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOgogIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzCiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHQKICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS4KICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgJiMzNDtmb2N1c2VkJiMzNDssCiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLgoKLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6CiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzCiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuCgotIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKToKICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrCiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuCiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyCiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlncwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOgotIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCi0gQ2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC4KLSBTdHJpcCBhbnkgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNjc0ODNmZmY4NTI1N2VkYTA3NmFjNjkwNWZiZGIwNjI4NDdiZDhkZgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBXZWQgU2VwIDkgMTE6MDU6NDIgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2Vyci5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9lcnIuYwppbmRleCBiNTZmYmRjOTU5ZGVjLi44ZWFkYjRkM2FiY2ZmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2Vyci5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfZXJyLmMKQEAgLTIwMSwxMiAmIzQzOzIwMSwxOCBAQCBzdGF0aWMgYm9vbCB3eF9yaW5nX3R4X3BlbmRpbmcoc3RydWN0IHd4ICp3eCkKIHsKIAlpbnQgaTsKIAomIzQzOwlyY3VfcmVhZF9sb2NrKCk7CiAJZm9yIChpID0gMDsgaSAmbHQ7IHd4LSZndDtudW1fdHhfcXVldWVzOyBpJiM0MzsmIzQzOykgewotCQlzdHJ1Y3Qgd3hfcmluZyAqdHhfcmluZyA9IHd4LSZndDt0eF9yaW5nW2ldOwomIzQzOwkJc3RydWN0IHd4X3JpbmcgKnR4X3JpbmcgPSByY3VfZGVyZWZlcmVuY2Uod3gtJmd0O3R4X3JpbmdbaV0pOwogCi0JCWlmICh0eF9yaW5nLSZndDtuZXh0X3RvX3VzZSAhPSB0eF9yaW5nLSZndDtuZXh0X3RvX2NsZWFuKQomIzQzOwkJaWYgKCF0eF9yaW5nKQomIzQzOwkJCWNvbnRpbnVlOwomIzQzOwkJaWYgKHR4X3JpbmctJmd0O25leHRfdG9fdXNlICE9IHR4X3JpbmctJmd0O25leHRfdG9fY2xlYW4pIHsKJiM0MzsJCQlyY3VfcmVhZF91bmxvY2soKTsKIAkJCXJldHVybiB0cnVlOwomIzQzOwkJfQogCX0KJiM0MzsJcmN1X3JlYWRfdW5sb2NrKCk7CiAKIAlyZXR1cm4gZmFsc2U7CiB9CkBAIC0yNjQsOCAmIzQzOzI3MCwxNCBAQCBzdGF0aWMgdm9pZCB3eF9kZXRlY3RfdHhfaGFuZyhzdHJ1Y3Qgd3ggKnd4KQogCiAJLyogRm9yY2UgZGV0ZWN0aW9uIG9mIGh1bmcgY29udHJvbGxlciAqLwogCWlmIChuZXRpZl9jYXJyaWVyX29rKHd4LSZndDtuZXRkZXYpKSB7Ci0JCWZvciAoaSA9IDA7IGkgJmx0OyB3eC0mZ3Q7bnVtX3R4X3F1ZXVlczsgaSYjNDM7JiM0MzspCi0JCQlzZXRfYml0KFdYX1RYX0RFVEVDVF9IQU5HLCB3eC0mZ3Q7dHhfcmluZ1tpXS0mZ3Q7c3RhdGUpOwomIzQzOwkJcmN1X3JlYWRfbG9jaygpOwomIzQzOwkJZm9yIChpID0gMDsgaSAmbHQ7IHd4LSZndDtudW1fdHhfcXVldWVzOyBpJiM0MzsmIzQzOykgewomIzQzOwkJCXN0cnVjdCB3eF9yaW5nICp0eF9yaW5nID0gcmN1X2RlcmVmZXJlbmNlKHd4LSZndDt0eF9yaW5nW2ldKTsKJiM0MzsKJiM0MzsJCQlpZiAodHhfcmluZykKJiM0MzsJCQkJc2V0X2JpdChXWF9UWF9ERVRFQ1RfSEFORywgdHhfcmluZy0mZ3Q7c3RhdGUpOwomIzQzOwkJfQomIzQzOwkJcmN1X3JlYWRfdW5sb2NrKCk7CiAJfQogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2V0aHRvb2wuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfZXRodG9vbC5jCmluZGV4IDk0MGQyZTU5ODc2YzcuLmVhZTU5NTJjMGY1ZmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfZXRodG9vbC5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfZXRodG9vbC5jCkBAIC0xNTQsOCAmIzQzOzE1NCw5IEBAIHZvaWQgd3hfZ2V0X2V0aHRvb2xfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwKIAkJfQogCX0KIAomIzQzOwlyY3VfcmVhZF9sb2NrKCk7CiAJZm9yIChqID0gMDsgaiAmbHQ7IG5ldGRldi0mZ3Q7bnVtX3R4X3F1ZXVlczsgaiYjNDM7JiM0MzspIHsKLQkJcmluZyA9IHd4LSZndDt0eF9yaW5nW2pdOwomIzQzOwkJcmluZyA9IHJjdV9kZXJlZmVyZW5jZSh3eC0mZ3Q7dHhfcmluZ1tqXSk7CiAJCWlmICghcmluZykgewogCQkJZGF0YVtpJiM0MzsmIzQzO10gPSAwOwogCQkJZGF0YVtpJiM0MzsmIzQzO10gPSAwOwpAQCAtMTcwLDcgJiM0MzsxNzEsNyBAQCB2b2lkIHd4X2dldF9ldGh0b29sX3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsCiAJCWkgJiM0Mzs9IDI7CiAJfQogCWZvciAoaiA9IDA7IGogJmx0OyBXWF9OVU1fUlhfUVVFVUVTOyBqJiM0MzsmIzQzOykgewotCQlyaW5nID0gd3gtJmd0O3J4X3Jpbmdbal07CiYjNDM7CQlyaW5nID0gcmN1X2RlcmVmZXJlbmNlKHd4LSZndDtyeF9yaW5nW2pdKTsKIAkJaWYgKCFyaW5nKSB7CiAJCQlkYXRhW2kmIzQzOyYjNDM7XSA9IDA7CiAJCQlkYXRhW2kmIzQzOyYjNDM7XSA9IDA7CkBAIC0xODQsNiAmIzQzOzE4NSw3IEBAIHZvaWQgd3hfZ2V0X2V0aHRvb2xfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwKIAkJfSB3aGlsZSAodTY0X3N0YXRzX2ZldGNoX3JldHJ5KCZhbXA7cmluZy0mZ3Q7c3luY3AsIHN0YXJ0KSk7CiAJCWkgJiM0Mzs9IDI7CiAJfQomIzQzOwlyY3VfcmVhZF91bmxvY2soKTsKIH0KIEVYUE9SVF9TWU1CT0wod3hfZ2V0X2V0aHRvb2xfc3RhdHMpOwogCkBAIC04MDUsOSAmIzQzOzgwNyw5IEBAIHN0YXRpYyBpbnQgd3hfc2V0X3JpbmdwYXJhbV92ZihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LAogCiAJaWYgKCFuZXRpZl9ydW5uaW5nKHd4LSZndDtuZXRkZXYpKSB7CiAJCWZvciAoaSA9IDA7IGkgJmx0OyB3eC0mZ3Q7bnVtX3R4X3F1ZXVlczsgaSYjNDM7JiM0MzspCi0JCQl3eC0mZ3Q7dHhfcmluZ1tpXS0mZ3Q7Y291bnQgPSBuZXdfdHhfY291bnQ7CiYjNDM7CQkJcmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZCh3eC0mZ3Q7dHhfcmluZ1tpXSwgMSktJmd0O2NvdW50ID0gbmV3X3R4X2NvdW50OwogCQlmb3IgKGkgPSAwOyBpICZsdDsgd3gtJmd0O251bV9yeF9xdWV1ZXM7IGkmIzQzOyYjNDM7KQotCQkJd3gtJmd0O3J4X3JpbmdbaV0tJmd0O2NvdW50ID0gbmV3X3J4X2NvdW50OwomIzQzOwkJCXJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQod3gtJmd0O3J4X3JpbmdbaV0sIDEpLSZndDtjb3VudCA9IG5ld19yeF9jb3VudDsKIAkJd3gtJmd0O3R4X3JpbmdfY291bnQgPSBuZXdfdHhfY291bnQ7CiAJCXd4LSZndDtyeF9yaW5nX2NvdW50ID0gbmV3X3J4X2NvdW50OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2h3LmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2h3LmMKaW5kZXggMTIyYzQ5NTJkMjAzZi4uYzc4MTM2YWJlOTJmOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9ody5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfaHcuYwpAQCAtMTU5OCwxMyAmIzQzOzE1OTgsMTcgQEAgc3RhdGljIHZvaWQgd3hfdmxhbl9zdHJpcF9jb250cm9sKHN0cnVjdCB3eCAqd3gsIGJvb2wgZW5hYmxlKQogewogCWludCBpLCBqOwogCiYjNDM7CXJjdV9yZWFkX2xvY2soKTsKIAlmb3IgKGkgPSAwOyBpICZsdDsgd3gtJmd0O251bV9yeF9xdWV1ZXM7IGkmIzQzOyYjNDM7KSB7Ci0JCXN0cnVjdCB3eF9yaW5nICpyaW5nID0gd3gtJmd0O3J4X3JpbmdbaV07CiYjNDM7CQlzdHJ1Y3Qgd3hfcmluZyAqcmluZyA9IHJjdV9kZXJlZmVyZW5jZSh3eC0mZ3Q7cnhfcmluZ1tpXSk7CiAKJiM0MzsJCWlmICghcmluZykKJiM0MzsJCQljb250aW51ZTsKIAkJaiA9IHJpbmctJmd0O3JlZ19pZHg7CiAJCXdyMzJtKHd4LCBXWF9QWF9SUl9DRkcoaiksIFdYX1BYX1JSX0NGR19WTEFOLAogCQkgICAgICBlbmFibGUgPyBXWF9QWF9SUl9DRkdfVkxBTiA6IDApOwogCX0KJiM0MzsJcmN1X3JlYWRfdW5sb2NrKCk7CiB9CiAKIHN0YXRpYyB2b2lkIHd4X3ZsYW5fcHJvbWlzY19lbmFibGUoc3RydWN0IHd4ICp3eCkKQEAgLTE3OTcsNyAmIzQzOzE4MDEsNyBAQCBzdGF0aWMgdm9pZCB3eF9zZXRfcnhfYnVmZmVyX2xlbihzdHJ1Y3Qgd3ggKnd4KQogCSAqIHRoZSBCYXNlIGFuZCBMZW5ndGggb2YgdGhlIFJ4IERlc2NyaXB0b3IgUmluZwogCSAqLwogCWZvciAoaSA9IDA7IGkgJmx0OyB3eC0mZ3Q7bnVtX3J4X3F1ZXVlczsgaSYjNDM7JiM0MzspIHsKLQkJcnhfcmluZyA9IHd4LSZndDtyeF9yaW5nW2ldOwomIzQzOwkJcnhfcmluZyA9IHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQod3gtJmd0O3J4X3JpbmdbaV0sIDEpOwogCQlyeF9yaW5nLSZndDtyeF9idWZfbGVuID0gV1hfUlhCVUZGRVJfMks7CiAjaWYgKFBBR0VfU0laRSAmbHQ7IDgxOTIpCiAJCWlmICh0ZXN0X2JpdChXWF9GTEFHX1JTQ19FTkFCTEVELCB3eC0mZ3Q7ZmxhZ3MpKQpAQCAtMjAyMSw4ICYjNDM7MjAyNSwxMSBAQCBzdGF0aWMgdm9pZCB3eF9jb25maWd1cmVfdHgoc3RydWN0IHd4ICp3eCkKIAkgICAgICBXWF9URE1fQ1RMX1RFLCBXWF9URE1fQ1RMX1RFKTsKIAogCS8qIFNldHVwIHRoZSBIVyBUeCBIZWFkIGFuZCBUYWlsIGRlc2NyaXB0b3IgcG9pbnRlcnMgKi8KLQlmb3IgKGkgPSAwOyBpICZsdDsgd3gtJmd0O251bV90eF9xdWV1ZXM7IGkmIzQzOyYjNDM7KQotCQl3eF9jb25maWd1cmVfdHhfcmluZyh3eCwgd3gtJmd0O3R4X3JpbmdbaV0pOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgd3gtJmd0O251bV90eF9xdWV1ZXM7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQlzdHJ1Y3Qgd3hfcmluZyAqdHhfcmluZyA9IHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQod3gtJmd0O3R4X3JpbmdbaV0sIDEpOwomIzQzOwomIzQzOwkJd3hfY29uZmlndXJlX3R4X3Jpbmcod3gsIHR4X3JpbmcpOwomIzQzOwl9CiAKIAl3cjMybSh3eCwgV1hfVFNDX0JVRl9BRSwgV1hfVFNDX0JVRl9BRV9USFIsIDB4MTApOwogCkBAIC0yMjQ3LDggJiM0MzsyMjU0LDExIEBAIHZvaWQgd3hfY29uZmlndXJlX3J4KHN0cnVjdCB3eCAqd3gpCiAJLyogU2V0dXAgdGhlIEhXIFJ4IEhlYWQgYW5kIFRhaWwgRGVzY3JpcHRvciBQb2ludGVycyBhbmQKIAkgKiB0aGUgQmFzZSBhbmQgTGVuZ3RoIG9mIHRoZSBSeCBEZXNjcmlwdG9yIFJpbmcKIAkgKi8KLQlmb3IgKGkgPSAwOyBpICZsdDsgd3gtJmd0O251bV9yeF9xdWV1ZXM7IGkmIzQzOyYjNDM7KQotCQl3eF9jb25maWd1cmVfcnhfcmluZyh3eCwgd3gtJmd0O3J4X3JpbmdbaV0pOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgd3gtJmd0O251bV9yeF9xdWV1ZXM7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQlzdHJ1Y3Qgd3hfcmluZyAqcnhfcmluZyA9IHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQod3gtJmd0O3J4X3JpbmdbaV0sIDEpOwomIzQzOwomIzQzOwkJd3hfY29uZmlndXJlX3J4X3Jpbmcod3gsIHJ4X3JpbmcpOwomIzQzOwl9CiAKIAkvKiBFbmFibGUgYWxsIHJlY2VpdmVzLCBkaXNhYmxlIHNlY3VyaXR5IGVuZ2luZSBwcmlvciB0byBibG9jayB0cmFmZmljICovCiAJcmV0ID0gd3hfZGlzYWJsZV9zZWNfcnhfcGF0aCh3eCk7CkBAIC0yODM4LDExICYjNDM7Mjg0OCwxNyBAQCBpbnQgd3hfZmNfZW5hYmxlKHN0cnVjdCB3eCAqd3gsIGJvb2wgdHhfcGF1c2UsIGJvb2wgcnhfcGF1c2UpCiAJICogIGFuZCBwZXJmb3JtYW5jZSByZWFzb25zLgogCSAqLwogCWlmICh3eC0mZ3Q7bnVtX3J4X3F1ZXVlcyAmZ3Q7IDEgJmFtcDsmYW1wOyAhdHhfcGF1c2UpIHsKLQkJZm9yIChpID0gMDsgaSAmbHQ7IHd4LSZndDtudW1fcnhfcXVldWVzOyBpJiM0MzsmIzQzOykKLQkJCXd4X2VuYWJsZV9yeF9kcm9wKHd4LCB3eC0mZ3Q7cnhfcmluZ1tpXSk7CiYjNDM7CQlmb3IgKGkgPSAwOyBpICZsdDsgd3gtJmd0O251bV9yeF9xdWV1ZXM7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQkJc3RydWN0IHd4X3JpbmcgKnJ4X3JpbmcgPSByY3VfZGVyZWZlcmVuY2VfcHJvdGVjdGVkKHd4LSZndDtyeF9yaW5nW2ldLCAxKTsKJiM0MzsKJiM0MzsJCQl3eF9lbmFibGVfcnhfZHJvcCh3eCwgcnhfcmluZyk7CiYjNDM7CQl9CiAJfSBlbHNlIHsKLQkJZm9yIChpID0gMDsgaSAmbHQ7IHd4LSZndDtudW1fcnhfcXVldWVzOyBpJiM0MzsmIzQzOykKLQkJCXd4X2Rpc2FibGVfcnhfZHJvcCh3eCwgd3gtJmd0O3J4X3JpbmdbaV0pOwomIzQzOwkJZm9yIChpID0gMDsgaSAmbHQ7IHd4LSZndDtudW1fcnhfcXVldWVzOyBpJiM0MzsmIzQzOykgewomIzQzOwkJCXN0cnVjdCB3eF9yaW5nICpyeF9yaW5nID0gcmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZCh3eC0mZ3Q7cnhfcmluZ1tpXSwgMSk7CiYjNDM7CiYjNDM7CQkJd3hfZGlzYWJsZV9yeF9kcm9wKHd4LCByeF9yaW5nKTsKJiM0MzsJCX0KIAl9CiAKIAlyZXR1cm4gMDsKQEAgLTI4NzAsOCAmIzQzOzI4ODYsMTUgQEAgc3RhdGljIHZvaWQgd3hfdXBkYXRlX3hvZmZfcnhfbGZjKHN0cnVjdCB3eCAqd3gpCiAJaWYgKCFkYXRhKQogCQlyZXR1cm47CiAKLQlmb3IgKGkgPSAwOyBpICZsdDsgd3gtJmd0O251bV90eF9xdWV1ZXM7IGkmIzQzOyYjNDM7KQotCQljbGVhcl9iaXQoV1hfSEFOR19DSEVDS19BUk1FRCwgd3gtJmd0O3R4X3JpbmdbaV0tJmd0O3N0YXRlKTsKJiM0MzsJcmN1X3JlYWRfbG9jaygpOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgd3gtJmd0O251bV90eF9xdWV1ZXM7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQlzdHJ1Y3Qgd3hfcmluZyAqdHhfcmluZyA9IHJjdV9kZXJlZmVyZW5jZSh3eC0mZ3Q7dHhfcmluZ1tpXSk7CiYjNDM7CiYjNDM7CQlpZiAoIXR4X3JpbmcpCiYjNDM7CQkJY29udGludWU7CiYjNDM7CQljbGVhcl9iaXQoV1hfSEFOR19DSEVDS19BUk1FRCwgdHhfcmluZy0mZ3Q7c3RhdGUpOwomIzQzOwl9CiYjNDM7CXJjdV9yZWFkX3VubG9jaygpOwogfQogCiAvKioKQEAgLTI4OTMsMTAgJiM0MzsyOTE2LDEzIEBAIHZvaWQgd3hfdXBkYXRlX3N0YXRzKHN0cnVjdCB3eCAqd3gpCiAKIAlzcGluX2xvY2soJmFtcDt3eC0mZ3Q7aHdfc3RhdHNfbG9jayk7CiAKJiM0MzsJcmN1X3JlYWRfbG9jaygpOwogCS8qIGdhdGhlciBzb21lIHN0YXRzIHRvIHRoZSB3eCBzdHJ1Y3QgdGhhdCBhcmUgcGVyIHF1ZXVlICovCiAJZm9yIChpID0gMDsgaSAmbHQ7IHd4LSZndDtudW1fcnhfcXVldWVzOyBpJiM0MzsmIzQzOykgewotCQlzdHJ1Y3Qgd3hfcmluZyAqcnhfcmluZyA9IHd4LSZndDtyeF9yaW5nW2ldOwomIzQzOwkJc3RydWN0IHd4X3JpbmcgKnJ4X3JpbmcgPSByY3VfZGVyZWZlcmVuY2Uod3gtJmd0O3J4X3JpbmdbaV0pOwogCiYjNDM7CQlpZiAoIXJ4X3JpbmcpCiYjNDM7CQkJY29udGludWU7CiAJCW5vbl9lb3BfZGVzY3MgJiM0Mzs9IHJ4X3JpbmctJmd0O3J4X3N0YXRzLm5vbl9lb3BfZGVzY3M7CiAJCWFsbG9jX3J4X2J1ZmZfZmFpbGVkICYjNDM7PSByeF9yaW5nLSZndDtyeF9zdGF0cy5hbGxvY19yeF9idWZmX2ZhaWxlZDsKIAkJaHdfY3N1bV9yeF9nb29kICYjNDM7PSByeF9yaW5nLSZndDtyeF9zdGF0cy5jc3VtX2dvb2RfY250OwpAQCAtMjkxMiwxOSAmIzQzOzI5MzgsMjggQEAgdm9pZCB3eF91cGRhdGVfc3RhdHMoc3RydWN0IHd4ICp3eCkKIAkJdTY0IHJzY19mbHVzaCA9IDA7CiAKIAkJZm9yIChpID0gMDsgaSAmbHQ7IHd4LSZndDtudW1fcnhfcXVldWVzOyBpJiM0MzsmIzQzOykgewotCQkJcnNjX2NvdW50ICYjNDM7PSB3eC0mZ3Q7cnhfcmluZ1tpXS0mZ3Q7cnhfc3RhdHMucnNjX2NvdW50OwotCQkJcnNjX2ZsdXNoICYjNDM7PSB3eC0mZ3Q7cnhfcmluZ1tpXS0mZ3Q7cnhfc3RhdHMucnNjX2ZsdXNoOwomIzQzOwkJCXN0cnVjdCB3eF9yaW5nICpyeF9yaW5nID0gcmN1X2RlcmVmZXJlbmNlKHd4LSZndDtyeF9yaW5nW2ldKTsKJiM0MzsKJiM0MzsJCQlpZiAoIXJ4X3JpbmcpCiYjNDM7CQkJCWNvbnRpbnVlOwomIzQzOwomIzQzOwkJCXJzY19jb3VudCAmIzQzOz0gcnhfcmluZy0mZ3Q7cnhfc3RhdHMucnNjX2NvdW50OwomIzQzOwkJCXJzY19mbHVzaCAmIzQzOz0gcnhfcmluZy0mZ3Q7cnhfc3RhdHMucnNjX2ZsdXNoOwogCQl9CiAJCXd4LSZndDtyc2NfY291bnQgPSByc2NfY291bnQ7CiAJCXd4LSZndDtyc2NfZmx1c2ggPSByc2NfZmx1c2g7CiAJfQogCiAJZm9yIChpID0gMDsgaSAmbHQ7IHd4LSZndDtudW1fdHhfcXVldWVzOyBpJiM0MzsmIzQzOykgewotCQlzdHJ1Y3Qgd3hfcmluZyAqdHhfcmluZyA9IHd4LSZndDt0eF9yaW5nW2ldOwomIzQzOwkJc3RydWN0IHd4X3JpbmcgKnR4X3JpbmcgPSByY3VfZGVyZWZlcmVuY2Uod3gtJmd0O3R4X3JpbmdbaV0pOwomIzQzOwomIzQzOwkJaWYgKCF0eF9yaW5nKQomIzQzOwkJCWNvbnRpbnVlOwogCiAJCXJlc3RhcnRfcXVldWUgJiM0Mzs9IHR4X3JpbmctJmd0O3R4X3N0YXRzLnJlc3RhcnRfcXVldWU7CiAJCXR4X2J1c3kgJiM0Mzs9IHR4X3JpbmctJmd0O3R4X3N0YXRzLnR4X2J1c3k7CiAJfQomIzQzOwlyY3VfcmVhZF91bmxvY2soKTsKIAl3eC0mZ3Q7cmVzdGFydF9xdWV1ZSA9IHJlc3RhcnRfcXVldWU7CiAJd3gtJmd0O3R4X2J1c3kgPSB0eF9idXN5OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2xpYi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9saWIuYwppbmRleCBlZDVhYWQ3ODU3YmQ5Li45ZjkwYWE5MmY4NDBiIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2xpYi5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfbGliLmMKQEAgLTE3MTQsNyAmIzQzOzE3MTQsMTIgQEAgbmV0ZGV2X3R4X3Qgd3hfeG1pdF9mcmFtZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCiAJaWYgKHJfaWR4ICZndDs9IHd4LSZndDtudW1fdHhfcXVldWVzKQogCQlyX2lkeCA9IHJfaWR4ICUgd3gtJmd0O251bV90eF9xdWV1ZXM7Ci0JdHhfcmluZyA9IHd4LSZndDt0eF9yaW5nW3JfaWR4XTsKJiM0MzsJdHhfcmluZyA9IHJjdV9kZXJlZmVyZW5jZSh3eC0mZ3Q7dHhfcmluZ1tyX2lkeF0pOwomIzQzOwomIzQzOwlpZiAodW5saWtlbHkoIXR4X3JpbmcpKSB7CiYjNDM7CQlkZXZfa2ZyZWVfc2tiX2FueShza2IpOwomIzQzOwkJcmV0dXJuIE5FVERFVl9UWF9PSzsKJiM0MzsJfQogCiAJcmV0dXJuIHd4X3htaXRfZnJhbWVfcmluZyhza2IsIHR4X3JpbmcpOwogfQpAQCAtMjA1OCwyNiAmIzQzOzIwNjMsMjYgQEAgc3RhdGljIGJvb2wgd3hfY2FjaGVfcmluZ192bWRxKHN0cnVjdCB3eCAqd3gpCiAJCQkvKiBJZiB3ZSBhcmUgZ3JlYXRlciB0aGFuIGluZGljZXMgbW92ZSB0byBuZXh0IHBvb2wgKi8KIAkJCWlmICgocmVnX2lkeCAmYW1wOyB+dm1kcS0mZ3Q7bWFzaykgJmd0Oz0gcnNzLSZndDtpbmRpY2VzKQogCQkJCXJlZ19pZHggPSBfX0FMSUdOX01BU0socmVnX2lkeCwgfnZtZHEtJmd0O21hc2spOwotCQkJd3gtJmd0O3J4X3JpbmdbaV0tJmd0O3JlZ19pZHggPSByZWdfaWR4OwomIzQzOwkJCXJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQod3gtJmd0O3J4X3JpbmdbaV0sIDEpLSZndDtyZWdfaWR4ID0gcmVnX2lkeDsKIAkJfQogCQlyZWdfaWR4ID0gdm1kcS0mZ3Q7b2Zmc2V0ICogX19BTElHTl9NQVNLKDEsIH52bWRxLSZndDttYXNrKTsKIAkJZm9yIChpID0gMDsgaSAmbHQ7IHd4LSZndDtudW1fdHhfcXVldWVzOyBpJiM0MzsmIzQzOywgcmVnX2lkeCYjNDM7JiM0MzspIHsKIAkJCS8qIElmIHdlIGFyZSBncmVhdGVyIHRoYW4gaW5kaWNlcyBtb3ZlIHRvIG5leHQgcG9vbCAqLwogCQkJaWYgKChyZWdfaWR4ICZhbXA7IHJzcy0mZ3Q7bWFzaykgJmd0Oz0gcnNzLSZndDtpbmRpY2VzKQogCQkJCXJlZ19pZHggPSBfX0FMSUdOX01BU0socmVnX2lkeCwgfnZtZHEtJmd0O21hc2spOwotCQkJd3gtJmd0O3R4X3JpbmdbaV0tJmd0O3JlZ19pZHggPSByZWdfaWR4OwomIzQzOwkJCXJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQod3gtJmd0O3R4X3JpbmdbaV0sIDEpLSZndDtyZWdfaWR4ID0gcmVnX2lkeDsKIAkJfQogCX0gZWxzZSB7CiAJCS8qIHN0YXJ0IGF0IFZNRHEgcmVnaXN0ZXIgb2Zmc2V0IGZvciBTUi1JT1YgZW5hYmxlZCBzZXR1cHMgKi8KIAkJcmVnX2lkeCA9IHZtZHEtJmd0O29mZnNldDsKIAkJZm9yIChpID0gMDsgaSAmbHQ7IHd4LSZndDtudW1fcnhfcXVldWVzOyBpJiM0MzsmIzQzOykKIAkJCS8qIElmIHdlIGFyZSBncmVhdGVyIHRoYW4gaW5kaWNlcyBtb3ZlIHRvIG5leHQgcG9vbCAqLwotCQkJd3gtJmd0O3J4X3JpbmdbaV0tJmd0O3JlZ19pZHggPSByZWdfaWR4ICYjNDM7IGk7CiYjNDM7CQkJcmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZCh3eC0mZ3Q7cnhfcmluZ1tpXSwgMSktJmd0O3JlZ19pZHggPSByZWdfaWR4ICYjNDM7IGk7CiAKIAkJcmVnX2lkeCA9IHZtZHEtJmd0O29mZnNldDsKIAkJZm9yIChpID0gMDsgaSAmbHQ7IHd4LSZndDtudW1fdHhfcXVldWVzOyBpJiM0MzsmIzQzOykKIAkJCS8qIElmIHdlIGFyZSBncmVhdGVyIHRoYW4gaW5kaWNlcyBtb3ZlIHRvIG5leHQgcG9vbCAqLwotCQkJd3gtJmd0O3R4X3JpbmdbaV0tJmd0O3JlZ19pZHggPSByZWdfaWR4ICYjNDM7IGk7CiYjNDM7CQkJcmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZCh3eC0mZ3Q7dHhfcmluZ1tpXSwgMSktJmd0O3JlZ19pZHggPSByZWdfaWR4ICYjNDM7IGk7CiAJfQogCiAJcmV0dXJuIHRydWU7CkBAIC0yMDk4LDEwICYjNDM7MjEwMywxMCBAQCBzdGF0aWMgdm9pZCB3eF9jYWNoZV9yaW5nX3JzcyhzdHJ1Y3Qgd3ggKnd4KQogCQlyZXR1cm47CiAKIAlmb3IgKGkgPSAwOyBpICZsdDsgd3gtJmd0O251bV9yeF9xdWV1ZXM7IGkmIzQzOyYjNDM7KQotCQl3eC0mZ3Q7cnhfcmluZ1tpXS0mZ3Q7cmVnX2lkeCA9IGk7CiYjNDM7CQlyY3VfZGVyZWZlcmVuY2VfcHJvdGVjdGVkKHd4LSZndDtyeF9yaW5nW2ldLCAxKS0mZ3Q7cmVnX2lkeCA9IGk7CiAKIAlmb3IgKGkgPSAwOyBpICZsdDsgd3gtJmd0O251bV90eF9xdWV1ZXM7IGkmIzQzOyYjNDM7KQotCQl3eC0mZ3Q7dHhfcmluZ1tpXS0mZ3Q7cmVnX2lkeCA9IGk7CiYjNDM7CQlyY3VfZGVyZWZlcmVuY2VfcHJvdGVjdGVkKHd4LSZndDt0eF9yaW5nW2ldLCAxKS0mZ3Q7cmVnX2lkeCA9IGk7CiB9CiAKIHN0YXRpYyB2b2lkIHd4X2FkZF9yaW5nKHN0cnVjdCB3eF9yaW5nICpyaW5nLCBzdHJ1Y3Qgd3hfcmluZ19jb250YWluZXIgKmhlYWQpCkBAIC0yMTkxLDcgJiM0MzsyMTk2LDcgQEAgc3RhdGljIGludCB3eF9hbGxvY19xX3ZlY3RvcihzdHJ1Y3Qgd3ggKnd4LAogCQlyaW5nLSZndDtxdWV1ZV9pbmRleCA9IHR4cl9pZHg7CiAKIAkJLyogYXNzaWduIHJpbmcgdG8gd3ggKi8KLQkJd3gtJmd0O3R4X3JpbmdbdHhyX2lkeF0gPSByaW5nOwomIzQzOwkJcmN1X2Fzc2lnbl9wb2ludGVyKHd4LSZndDt0eF9yaW5nW3R4cl9pZHhdLCByaW5nKTsKIAogCQkvKiB1cGRhdGUgY291bnQgYW5kIGluZGV4ICovCiAJCXR4cl9jb3VudC0tOwpAQCAtMjIxNyw3ICYjNDM7MjIyMiw3IEBAIHN0YXRpYyBpbnQgd3hfYWxsb2NfcV92ZWN0b3Ioc3RydWN0IHd4ICp3eCwKIAkJcmluZy0mZ3Q7cXVldWVfaW5kZXggPSByeHJfaWR4OwogCiAJCS8qIGFzc2lnbiByaW5nIHRvIHd4ICovCi0JCXd4LSZndDtyeF9yaW5nW3J4cl9pZHhdID0gcmluZzsKJiM0MzsJCXJjdV9hc3NpZ25fcG9pbnRlcih3eC0mZ3Q7cnhfcmluZ1tyeHJfaWR4XSwgcmluZyk7CiAKIAkJLyogdXBkYXRlIGNvdW50IGFuZCBpbmRleCAqLwogCQlyeHJfY291bnQtLTsKQEAgLTIyNDUsMTAgJiM0MzsyMjUwLDEwIEBAIHN0YXRpYyB2b2lkIHd4X2ZyZWVfcV92ZWN0b3Ioc3RydWN0IHd4ICp3eCwgaW50IHZfaWR4KQogCXN0cnVjdCB3eF9yaW5nICpyaW5nOwogCiAJd3hfZm9yX2VhY2hfcmluZyhyaW5nLCBxX3ZlY3Rvci0mZ3Q7dHgpCi0JCXd4LSZndDt0eF9yaW5nW3JpbmctJmd0O3F1ZXVlX2luZGV4XSA9IE5VTEw7CiYjNDM7CQlyY3VfYXNzaWduX3BvaW50ZXIod3gtJmd0O3R4X3JpbmdbcmluZy0mZ3Q7cXVldWVfaW5kZXhdLCBOVUxMKTsKIAogCXd4X2Zvcl9lYWNoX3JpbmcocmluZywgcV92ZWN0b3ItJmd0O3J4KQotCQl3eC0mZ3Q7cnhfcmluZ1tyaW5nLSZndDtxdWV1ZV9pbmRleF0gPSBOVUxMOwomIzQzOwkJcmN1X2Fzc2lnbl9wb2ludGVyKHd4LSZndDtyeF9yaW5nW3JpbmctJmd0O3F1ZXVlX2luZGV4XSwgTlVMTCk7CiAKIAl3eC0mZ3Q7cV92ZWN0b3Jbdl9pZHhdID0gTlVMTDsKIAluZXRpZl9uYXBpX2RlbCgmYW1wO3FfdmVjdG9yLSZndDtuYXBpKTsKQEAgLTI2NTksNyAmIzQzOzI2NjQsNyBAQCB2b2lkIHd4X2NsZWFuX2FsbF9yeF9yaW5ncyhzdHJ1Y3Qgd3ggKnd4KQogCWludCBpOwogCiAJZm9yIChpID0gMDsgaSAmbHQ7IHd4LSZndDtudW1fcnhfcXVldWVzOyBpJiM0MzsmIzQzOykKLQkJd3hfY2xlYW5fcnhfcmluZyh3eC0mZ3Q7cnhfcmluZ1tpXSk7CiYjNDM7CQl3eF9jbGVhbl9yeF9yaW5nKHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQod3gtJmd0O3J4X3JpbmdbaV0sIDEpKTsKIH0KIEVYUE9SVF9TWU1CT0wod3hfY2xlYW5fYWxsX3J4X3JpbmdzKTsKIApAQCAtMjcwMSw3ICYjNDM7MjcwNiw3IEBAIHN0YXRpYyB2b2lkIHd4X2ZyZWVfYWxsX3J4X3Jlc291cmNlcyhzdHJ1Y3Qgd3ggKnd4KQogCWludCBpOwogCiAJZm9yIChpID0gMDsgaSAmbHQ7IHd4LSZndDtudW1fcnhfcXVldWVzOyBpJiM0MzsmIzQzOykKLQkJd3hfZnJlZV9yeF9yZXNvdXJjZXMod3gtJmd0O3J4X3JpbmdbaV0pOwomIzQzOwkJd3hfZnJlZV9yeF9yZXNvdXJjZXMocmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZCh3eC0mZ3Q7cnhfcmluZ1tpXSwgMSkpOwogfQogCiAvKioKQEAgLTI3NzUsNyAmIzQzOzI3ODAsNyBAQCB2b2lkIHd4X2NsZWFuX2FsbF90eF9yaW5ncyhzdHJ1Y3Qgd3ggKnd4KQogCWludCBpOwogCiAJZm9yIChpID0gMDsgaSAmbHQ7IHd4LSZndDtudW1fdHhfcXVldWVzOyBpJiM0MzsmIzQzOykKLQkJd3hfY2xlYW5fdHhfcmluZyh3eC0mZ3Q7dHhfcmluZ1tpXSk7CiYjNDM7CQl3eF9jbGVhbl90eF9yaW5nKHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQod3gtJmd0O3R4X3JpbmdbaV0sIDEpKTsKIH0KIEVYUE9SVF9TWU1CT0wod3hfY2xlYW5fYWxsX3R4X3JpbmdzKTsKIApAQCAtMjgyMyw3ICYjNDM7MjgyOCw3IEBAIHN0YXRpYyB2b2lkIHd4X2ZyZWVfYWxsX3R4X3Jlc291cmNlcyhzdHJ1Y3Qgd3ggKnd4KQogCWludCBpOwogCiAJZm9yIChpID0gMDsgaSAmbHQ7IHd4LSZndDtudW1fdHhfcXVldWVzOyBpJiM0MzsmIzQzOykKLQkJd3hfZnJlZV90eF9yZXNvdXJjZXMod3gtJmd0O3R4X3JpbmdbaV0pOwomIzQzOwkJd3hfZnJlZV90eF9yZXNvdXJjZXMocmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZCh3eC0mZ3Q7dHhfcmluZ1tpXSwgMSkpOwogfQogCiB2b2lkIHd4X2ZyZWVfcmVzb3VyY2VzKHN0cnVjdCB3eCAqd3gpCkBAIC0yOTMzLDcgJiM0MzsyOTM4LDcgQEAgc3RhdGljIGludCB3eF9zZXR1cF9hbGxfcnhfcmVzb3VyY2VzKHN0cnVjdCB3eCAqd3gpCiAJaW50IGksIGVyciA9IDA7CiAKIAlmb3IgKGkgPSAwOyBpICZsdDsgd3gtJmd0O251bV9yeF9xdWV1ZXM7IGkmIzQzOyYjNDM7KSB7Ci0JCWVyciA9IHd4X3NldHVwX3J4X3Jlc291cmNlcyh3eC0mZ3Q7cnhfcmluZ1tpXSk7CiYjNDM7CQllcnIgPSB3eF9zZXR1cF9yeF9yZXNvdXJjZXMocmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZCh3eC0mZ3Q7cnhfcmluZ1tpXSwgMSkpOwogCQlpZiAoIWVycikKIAkJCWNvbnRpbnVlOwogCkBAIC0yOTQ1LDcgJiM0MzsyOTUwLDcgQEAgc3RhdGljIGludCB3eF9zZXR1cF9hbGxfcnhfcmVzb3VyY2VzKHN0cnVjdCB3eCAqd3gpCiBlcnJfc2V0dXBfcng6CiAJLyogcmV3aW5kIHRoZSBpbmRleCBmcmVlaW5nIHRoZSByaW5ncyBhcyB3ZSBnbyAqLwogCXdoaWxlIChpLS0pCi0JCXd4X2ZyZWVfcnhfcmVzb3VyY2VzKHd4LSZndDtyeF9yaW5nW2ldKTsKJiM0MzsJCXd4X2ZyZWVfcnhfcmVzb3VyY2VzKHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQod3gtJmd0O3J4X3JpbmdbaV0sIDEpKTsKIAlyZXR1cm4gZXJyOwogfQogCkBAIC0zMDM2LDcgJiM0MzszMDQxLDcgQEAgc3RhdGljIGludCB3eF9zZXR1cF9hbGxfdHhfcmVzb3VyY2VzKHN0cnVjdCB3eCAqd3gpCiAJaW50IGksIGVyciA9IDA7CiAKIAlmb3IgKGkgPSAwOyBpICZsdDsgd3gtJmd0O251bV90eF9xdWV1ZXM7IGkmIzQzOyYjNDM7KSB7Ci0JCWVyciA9IHd4X3NldHVwX3R4X3Jlc291cmNlcyh3eC0mZ3Q7dHhfcmluZ1tpXSk7CiYjNDM7CQllcnIgPSB3eF9zZXR1cF90eF9yZXNvdXJjZXMocmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZCh3eC0mZ3Q7dHhfcmluZ1tpXSwgMSkpOwogCQlpZiAoIWVycikKIAkJCWNvbnRpbnVlOwogCkBAIC0zMDQ4LDcgJiM0MzszMDUzLDcgQEAgc3RhdGljIGludCB3eF9zZXR1cF9hbGxfdHhfcmVzb3VyY2VzKHN0cnVjdCB3eCAqd3gpCiBlcnJfc2V0dXBfdHg6CiAJLyogcmV3aW5kIHRoZSBpbmRleCBmcmVlaW5nIHRoZSByaW5ncyBhcyB3ZSBnbyAqLwogCXdoaWxlIChpLS0pCi0JCXd4X2ZyZWVfdHhfcmVzb3VyY2VzKHd4LSZndDt0eF9yaW5nW2ldKTsKJiM0MzsJCXd4X2ZyZWVfdHhfcmVzb3VyY2VzKHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQod3gtJmd0O3R4X3JpbmdbaV0sIDEpKTsKIAlyZXR1cm4gZXJyOwogfQogCkBAIC0zMDk3LDcgJiM0MzszMTAyLDcgQEAgdm9pZCB3eF9nZXRfc3RhdHM2NChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LAogCiAJcmN1X3JlYWRfbG9jaygpOwogCWZvciAoaSA9IDA7IGkgJmx0OyB3eC0mZ3Q7bnVtX3J4X3F1ZXVlczsgaSYjNDM7JiM0MzspIHsKLQkJc3RydWN0IHd4X3JpbmcgKnJpbmcgPSBSRUFEX09OQ0Uod3gtJmd0O3J4X3JpbmdbaV0pOwomIzQzOwkJc3RydWN0IHd4X3JpbmcgKnJpbmcgPSByY3VfZGVyZWZlcmVuY2Uod3gtJmd0O3J4X3JpbmdbaV0pOwogCQl1NjQgYnl0ZXMsIHBhY2tldHM7CiAJCXVuc2lnbmVkIGludCBzdGFydDsKIApAQCAtMzExMyw3ICYjNDM7MzExOCw3IEBAIHZvaWQgd3hfZ2V0X3N0YXRzNjQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwKIAl9CiAKIAlmb3IgKGkgPSAwOyBpICZsdDsgd3gtJmd0O251bV90eF9xdWV1ZXM7IGkmIzQzOyYjNDM7KSB7Ci0JCXN0cnVjdCB3eF9yaW5nICpyaW5nID0gUkVBRF9PTkNFKHd4LSZndDt0eF9yaW5nW2ldKTsKJiM0MzsJCXN0cnVjdCB3eF9yaW5nICpyaW5nID0gcmN1X2RlcmVmZXJlbmNlKHd4LSZndDt0eF9yaW5nW2ldKTsKIAkJdTY0IGJ5dGVzLCBwYWNrZXRzOwogCQl1bnNpZ25lZCBpbnQgc3RhcnQ7CiAKQEAgLTMzMjQsNyAmIzQzOzMzMjksNyBAQCBpbnQgd3hfc2V0X3Jpbmcoc3RydWN0IHd4ICp3eCwgdTMyIG5ld190eF9jb3VudCwKIAkgKi8KIAlpZiAobmV3X3R4X2NvdW50ICE9IHd4LSZndDt0eF9yaW5nX2NvdW50KSB7CiAJCWZvciAoaSA9IDA7IGkgJmx0OyB3eC0mZ3Q7bnVtX3R4X3F1ZXVlczsgaSYjNDM7JiM0MzspIHsKLQkJCW1lbWNweSgmYW1wO3RlbXBfcmluZ1tpXSwgd3gtJmd0O3R4X3JpbmdbaV0sCiYjNDM7CQkJbWVtY3B5KCZhbXA7dGVtcF9yaW5nW2ldLCByY3VfZGVyZWZlcmVuY2VfcHJvdGVjdGVkKHd4LSZndDt0eF9yaW5nW2ldLCAxKSwKIAkJCSAgICAgICBzaXplb2Yoc3RydWN0IHd4X3JpbmcpKTsKIAogCQkJdGVtcF9yaW5nW2ldLmNvdW50ID0gbmV3X3R4X2NvdW50OwpAQCAtMzM0MCw5ICYjNDM7MzM0NSwxMSBAQCBpbnQgd3hfc2V0X3Jpbmcoc3RydWN0IHd4ICp3eCwgdTMyIG5ld190eF9jb3VudCwKIAkJfQogCiAJCWZvciAoaSA9IDA7IGkgJmx0OyB3eC0mZ3Q7bnVtX3R4X3F1ZXVlczsgaSYjNDM7JiM0MzspIHsKLQkJCXd4X2ZyZWVfdHhfcmVzb3VyY2VzKHd4LSZndDt0eF9yaW5nW2ldKTsKJiM0MzsJCQlzdHJ1Y3Qgd3hfcmluZyAqdHhfcmluZyA9IHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQod3gtJmd0O3R4X3JpbmdbaV0sIDEpOwomIzQzOwomIzQzOwkJCXd4X2ZyZWVfdHhfcmVzb3VyY2VzKHR4X3JpbmcpOwogCi0JCQltZW1jcHkod3gtJmd0O3R4X3JpbmdbaV0sICZhbXA7dGVtcF9yaW5nW2ldLAomIzQzOwkJCW1lbWNweSh0eF9yaW5nLCAmYW1wO3RlbXBfcmluZ1tpXSwKIAkJCSAgICAgICBzaXplb2Yoc3RydWN0IHd4X3JpbmcpKTsKIAkJfQogCkBAIC0zMzUyLDcgJiM0MzszMzU5LDcgQEAgaW50IHd4X3NldF9yaW5nKHN0cnVjdCB3eCAqd3gsIHUzMiBuZXdfdHhfY291bnQsCiAJLyogUmVwZWF0IHRoZSBwcm9jZXNzIGZvciB0aGUgUnggcmluZ3MgaWYgbmVlZGVkICovCiAJaWYgKG5ld19yeF9jb3VudCAhPSB3eC0mZ3Q7cnhfcmluZ19jb3VudCkgewogCQlmb3IgKGkgPSAwOyBpICZsdDsgd3gtJmd0O251bV9yeF9xdWV1ZXM7IGkmIzQzOyYjNDM7KSB7Ci0JCQltZW1jcHkoJmFtcDt0ZW1wX3JpbmdbaV0sIHd4LSZndDtyeF9yaW5nW2ldLAomIzQzOwkJCW1lbWNweSgmYW1wO3RlbXBfcmluZ1tpXSwgcmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZCh3eC0mZ3Q7cnhfcmluZ1tpXSwgMSksCiAJCQkgICAgICAgc2l6ZW9mKHN0cnVjdCB3eF9yaW5nKSk7CiAKIAkJCXRlbXBfcmluZ1tpXS5jb3VudCA9IG5ld19yeF9jb3VudDsKQEAgLTMzNjgsOCAmIzQzOzMzNzUsMTAgQEAgaW50IHd4X3NldF9yaW5nKHN0cnVjdCB3eCAqd3gsIHUzMiBuZXdfdHhfY291bnQsCiAJCX0KIAogCQlmb3IgKGkgPSAwOyBpICZsdDsgd3gtJmd0O251bV9yeF9xdWV1ZXM7IGkmIzQzOyYjNDM7KSB7Ci0JCQl3eF9mcmVlX3J4X3Jlc291cmNlcyh3eC0mZ3Q7cnhfcmluZ1tpXSk7Ci0JCQltZW1jcHkod3gtJmd0O3J4X3JpbmdbaV0sICZhbXA7dGVtcF9yaW5nW2ldLAomIzQzOwkJCXN0cnVjdCB3eF9yaW5nICpyeF9yaW5nID0gcmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZCh3eC0mZ3Q7cnhfcmluZ1tpXSwgMSk7CiYjNDM7CiYjNDM7CQkJd3hfZnJlZV9yeF9yZXNvdXJjZXMocnhfcmluZyk7CiYjNDM7CQkJbWVtY3B5KHJ4X3JpbmcsICZhbXA7dGVtcF9yaW5nW2ldLAogCQkJICAgICAgIHNpemVvZihzdHJ1Y3Qgd3hfcmluZykpOwogCQl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfcHRwLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X3B0cC5jCmluZGV4IDQ3MDhlN2YzOTU4ZjcuLjY4ZGM2Mjk3N2FhYjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfcHRwLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9wdHAuYwpAQCAtMjc0LDExICYjNDM7Mjc0LDE1IEBAIHN0YXRpYyB2b2lkIHd4X3B0cF9yeF9oYW5nKHN0cnVjdCB3eCAqd3gpCiAKIAkvKiBkZXRlcm1pbmUgdGhlIG1vc3QgcmVjZW50IHdhdGNoZG9nIG9yIHJ4X3RpbWVzdGFtcCBldmVudCAqLwogCXJ4X2V2ZW50ID0gd3gtJmd0O2xhc3RfcnhfcHRwX2NoZWNrOwomIzQzOwlyY3VfcmVhZF9sb2NrKCk7CiAJZm9yIChuID0gMDsgbiAmbHQ7IHd4LSZndDtudW1fcnhfcXVldWVzOyBuJiM0MzsmIzQzOykgewotCQlyeF9yaW5nID0gd3gtJmd0O3J4X3Jpbmdbbl07CiYjNDM7CQlyeF9yaW5nID0gcmN1X2RlcmVmZXJlbmNlKHd4LSZndDtyeF9yaW5nW25dKTsKJiM0MzsJCWlmICghcnhfcmluZykKJiM0MzsJCQljb250aW51ZTsKIAkJaWYgKHRpbWVfYWZ0ZXIocnhfcmluZy0mZ3Q7bGFzdF9yeF90aW1lc3RhbXAsIHJ4X2V2ZW50KSkKIAkJCXJ4X2V2ZW50ID0gcnhfcmluZy0mZ3Q7bGFzdF9yeF90aW1lc3RhbXA7CiAJfQomIzQzOwlyY3VfcmVhZF91bmxvY2soKTsKIAogCS8qIG9ubHkgbmVlZCB0byByZWFkIHRoZSBoaWdoIFJYU1RNUCByZWdpc3RlciB0byBjbGVhciB0aGUgbG9jayAqLwogCWlmICh0aW1lX2lzX2JlZm9yZV9qaWZmaWVzKHJ4X2V2ZW50ICYjNDM7IDUgKiBIWikpIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfdHlwZS5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF90eXBlLmgKaW5kZXggOTQ1NGU5MDI1OGQ4ZS4uOTk1MmQwMjM0MjQwMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF90eXBlLmgKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF90eXBlLmgKQEAgLTEzNTksOCAmIzQzOzEzNTksOCBAQCBzdHJ1Y3Qgd3ggewogCXUzMiB0eF9yaW5nX2NvdW50OwogCXUzMiByeF9yaW5nX2NvdW50OwogCi0Jc3RydWN0IHd4X3JpbmcgKnR4X3JpbmdbNjRdIF9fX19jYWNoZWxpbmVfYWxpZ25lZF9pbl9zbXA7Ci0Jc3RydWN0IHd4X3JpbmcgKnJ4X3JpbmdbNjRdOwomIzQzOwlzdHJ1Y3Qgd3hfcmluZyBfX3JjdSAqdHhfcmluZ1s2NF0gX19fX2NhY2hlbGluZV9hbGlnbmVkX2luX3NtcDsKJiM0MzsJc3RydWN0IHd4X3JpbmcgX19yY3UgKnJ4X3JpbmdbNjRdOwogCXN0cnVjdCB3eF9xX3ZlY3RvciAqcV92ZWN0b3JbNjRdOwogCWludCBudW1fcnhfcG9vbHM7CiAJaW50IG51bV9yeF9xdWV1ZXNfcGVyX3Bvb2w7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X3ZmX2NvbW1vbi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF92Zl9jb21tb24uYwppbmRleCAyNmRlNzhlOWE2OWVmLi5jODMwODI0YzQ4NjllIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X3ZmX2NvbW1vbi5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfdmZfY29tbW9uLmMKQEAgLTIwNSw3ICYjNDM7MjA1LDcgQEAgc3RhdGljIHZvaWQgd3hfY29uZmlndXJlX3J4X3ZmKHN0cnVjdCB3eCAqd3gpCiAJICogdGhlIEJhc2UgYW5kIExlbmd0aCBvZiB0aGUgUnggRGVzY3JpcHRvciBSaW5nCiAJICovCiAJZm9yIChpID0gMDsgaSAmbHQ7IHd4LSZndDtudW1fcnhfcXVldWVzOyBpJiM0MzsmIzQzOykgewotCQlzdHJ1Y3Qgd3hfcmluZyAqcnhfcmluZyA9IHd4LSZndDtyeF9yaW5nW2ldOwomIzQzOwkJc3RydWN0IHd4X3JpbmcgKnJ4X3JpbmcgPSByY3VfZGVyZWZlcmVuY2VfcHJvdGVjdGVkKHd4LSZndDtyeF9yaW5nW2ldLCAxKTsKICNpZmRlZiBIQVZFX1NXSU9UTEJfU0tJUF9DUFVfU1lOQwogCQl3eF9zZXRfcnhfYnVmZmVyX2xlbl92Zih3eCwgcnhfcmluZyk7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfdmZfbGliLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X3ZmX2xpYi5jCmluZGV4IDczMjViNDc1ZWUxMGMuLjBlMDllNjZjNmRlNmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfdmZfbGliLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF92Zl9saWIuYwpAQCAtMTc1LDggJiM0MzsxNzUsMTEgQEAgdm9pZCB3eF9jb25maWd1cmVfdHhfdmYoc3RydWN0IHd4ICp3eCkKIAl1MzIgaTsKIAogCS8qIFNldHVwIHRoZSBIVyBUeCBIZWFkIGFuZCBUYWlsIGRlc2NyaXB0b3IgcG9pbnRlcnMgKi8KLQlmb3IgKGkgPSAwOyBpICZsdDsgd3gtJmd0O251bV90eF9xdWV1ZXM7IGkmIzQzOyYjNDM7KQotCQl3eF9jb25maWd1cmVfdHhfcmluZ192Zih3eCwgd3gtJmd0O3R4X3JpbmdbaV0pOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgd3gtJmd0O251bV90eF9xdWV1ZXM7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQlzdHJ1Y3Qgd3hfcmluZyAqdHhfcmluZyA9IHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQod3gtJmd0O3R4X3JpbmdbaV0sIDEpOwomIzQzOwomIzQzOwkJd3hfY29uZmlndXJlX3R4X3JpbmdfdmYod3gsIHR4X3JpbmcpOwomIzQzOwl9CiB9CiAKIHN0YXRpYyB2b2lkIHd4X2NvbmZpZ3VyZV9zcnJjdGxfdmYoc3RydWN0IHd4ICp3eCwgc3RydWN0IHd4X3JpbmcgKnJpbmcsCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9ldGh0b29sLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9ldGh0b29sLmMKaW5kZXggMTk2MGY3MTU0MTUxZC4uOWU5MDcwMmE1MTQ2YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfZXRodG9vbC5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX2V0aHRvb2wuYwpAQCAtMzcsOSAmIzQzOzM3LDkgQEAgc3RhdGljIGludCBuZ2JlX3NldF9yaW5ncGFyYW0oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwKIAogCWlmICghbmV0aWZfcnVubmluZyh3eC0mZ3Q7bmV0ZGV2KSkgewogCQlmb3IgKGkgPSAwOyBpICZsdDsgd3gtJmd0O251bV90eF9xdWV1ZXM7IGkmIzQzOyYjNDM7KQotCQkJd3gtJmd0O3R4X3JpbmdbaV0tJmd0O2NvdW50ID0gbmV3X3R4X2NvdW50OwomIzQzOwkJCXJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQod3gtJmd0O3R4X3JpbmdbaV0sIDEpLSZndDtjb3VudCA9IG5ld190eF9jb3VudDsKIAkJZm9yIChpID0gMDsgaSAmbHQ7IHd4LSZndDtudW1fcnhfcXVldWVzOyBpJiM0MzsmIzQzOykKLQkJCXd4LSZndDtyeF9yaW5nW2ldLSZndDtjb3VudCA9IG5ld19yeF9jb3VudDsKJiM0MzsJCQlyY3VfZGVyZWZlcmVuY2VfcHJvdGVjdGVkKHd4LSZndDtyeF9yaW5nW2ldLCAxKS0mZ3Q7Y291bnQgPSBuZXdfcnhfY291bnQ7CiAJCXd4LSZndDt0eF9yaW5nX2NvdW50ID0gbmV3X3R4X2NvdW50OwogCQl3eC0mZ3Q7cnhfcmluZ19jb3VudCA9IG5ld19yeF9jb3VudDsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfbWFpbi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfbWFpbi5jCmluZGV4IDg1NWRjOTYzYzYxMGMuLmU0NWQ3ZGZkYzlmOTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX21haW4uYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9tYWluLmMKQEAgLTQwNiw3ICYjNDM7NDA2LDcgQEAgc3RhdGljIHZvaWQgbmdiZV9kaXNhYmxlX2RldmljZShzdHJ1Y3Qgd3ggKnd4KQogCS8qIGRpc2FibGUgYWxsIGVuYWJsZWQgcnggcXVldWVzICovCiAJZm9yIChpID0gMDsgaSAmbHQ7IHd4LSZndDtudW1fcnhfcXVldWVzOyBpJiM0MzsmIzQzOykKIAkJLyogdGhpcyBjYWxsIGFsc28gZmx1c2hlcyB0aGUgcHJldmlvdXMgd3JpdGUgKi8KLQkJd3hfZGlzYWJsZV9yeF9xdWV1ZSh3eCwgd3gtJmd0O3J4X3JpbmdbaV0pOwomIzQzOwkJd3hfZGlzYWJsZV9yeF9xdWV1ZSh3eCwgcmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZCh3eC0mZ3Q7cnhfcmluZ1tpXSwgMSkpOwogCS8qIGRpc2FibGUgcmVjZWl2ZXMgKi8KIAl3eF9kaXNhYmxlX3J4KHd4KTsKIAl3eF9uYXBpX2Rpc2FibGVfYWxsKHd4KTsKQEAgLTQyMiw3ICYjNDM7NDIyLDcgQEAgc3RhdGljIHZvaWQgbmdiZV9kaXNhYmxlX2RldmljZShzdHJ1Y3Qgd3ggKnd4KQogCXd4X2lycV9kaXNhYmxlKHd4KTsKIAkvKiBkaXNhYmxlIHRyYW5zbWl0cyBpbiB0aGUgaGFyZHdhcmUgbm93IHRoYXQgaW50ZXJydXB0cyBhcmUgb2ZmICovCiAJZm9yIChpID0gMDsgaSAmbHQ7IHd4LSZndDtudW1fdHhfcXVldWVzOyBpJiM0MzsmIzQzOykgewotCQl1OCByZWdfaWR4ID0gd3gtJmd0O3R4X3JpbmdbaV0tJmd0O3JlZ19pZHg7CiYjNDM7CQl1OCByZWdfaWR4ID0gcmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZCh3eC0mZ3Q7dHhfcmluZ1tpXSwgMSktJmd0O3JlZ19pZHg7CiAKIAkJd3IzMih3eCwgV1hfUFhfVFJfQ0ZHKHJlZ19pZHgpLCBXWF9QWF9UUl9DRkdfU1dGTFNIKTsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX2V0aHRvb2wuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfZXRodG9vbC5jCmluZGV4IDNlMzJhY2E3MjgwNjUuLmZjZmFmNmYyZjU0NGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfZXRodG9vbC5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfZXRodG9vbC5jCkBAIC02MSw5ICYjNDM7NjEsOSBAQCBzdGF0aWMgaW50IHR4Z2JlX3NldF9yaW5ncGFyYW0oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwKIAogCWlmICghbmV0aWZfcnVubmluZyh3eC0mZ3Q7bmV0ZGV2KSkgewogCQlmb3IgKGkgPSAwOyBpICZsdDsgd3gtJmd0O251bV90eF9xdWV1ZXM7IGkmIzQzOyYjNDM7KQotCQkJd3gtJmd0O3R4X3JpbmdbaV0tJmd0O2NvdW50ID0gbmV3X3R4X2NvdW50OwomIzQzOwkJCXJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQod3gtJmd0O3R4X3JpbmdbaV0sIDEpLSZndDtjb3VudCA9IG5ld190eF9jb3VudDsKIAkJZm9yIChpID0gMDsgaSAmbHQ7IHd4LSZndDtudW1fcnhfcXVldWVzOyBpJiM0MzsmIzQzOykKLQkJCXd4LSZndDtyeF9yaW5nW2ldLSZndDtjb3VudCA9IG5ld19yeF9jb3VudDsKJiM0MzsJCQlyY3VfZGVyZWZlcmVuY2VfcHJvdGVjdGVkKHd4LSZndDtyeF9yaW5nW2ldLCAxKS0mZ3Q7Y291bnQgPSBuZXdfcnhfY291bnQ7CiAJCXd4LSZndDt0eF9yaW5nX2NvdW50ID0gbmV3X3R4X2NvdW50OwogCQl3eC0mZ3Q7cnhfcmluZ19jb3VudCA9IG5ld19yeF9jb3VudDsKIApAQCAtMzY2LDcgJiM0MzszNjYsNyBAQCBzdGF0aWMgaW50IHR4Z2JlX2FkZF9ldGh0b29sX2ZkaXJfZW50cnkoc3RydWN0IHR4Z2JlICp0eGdiZSwKIAogCQkvKiBNYXAgdGhlIHJpbmcgb250byB0aGUgYWJzb2x1dGUgcXVldWUgaW5kZXggKi8KIAkJaWYgKCF2ZikKLQkJCXF1ZXVlID0gd3gtJmd0O3J4X3JpbmdbcmluZ10tJmd0O3JlZ19pZHg7CiYjNDM7CQkJcXVldWUgPSByY3VfZGVyZWZlcmVuY2VfcHJvdGVjdGVkKHd4LSZndDtyeF9yaW5nW3JpbmddLCAxKS0mZ3Q7cmVnX2lkeDsKIAkJZWxzZQogCQkJcXVldWUgPSAoKHZmIC0gMSkgKiB3eC0mZ3Q7bnVtX3J4X3F1ZXVlc19wZXJfcG9vbCkgJiM0MzsgcmluZzsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX2ZkaXIuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfZmRpci5jCmluZGV4IGE4NDAxMDgyODU1MTcuLjYwYzhlYTQ3NzgyN2QgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfZmRpci5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfZmRpci5jCkBAIC01OTksNyAmIzQzOzU5OSw3IEBAIHN0YXRpYyB2b2lkIHR4Z2JlX2ZkaXJfZmlsdGVyX3Jlc3RvcmUoc3RydWN0IHd4ICp3eCkKIAkJCX0KIAogCQkJLyogTWFwIHRoZSByaW5nIG9udG8gdGhlIGFic29sdXRlIHF1ZXVlIGluZGV4ICovCi0JCQlxdWV1ZSA9IHd4LSZndDtyeF9yaW5nW3JpbmddLSZndDtyZWdfaWR4OwomIzQzOwkJCXF1ZXVlID0gcmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZCh3eC0mZ3Q7cnhfcmluZ1tyaW5nXSwgMSktJmd0O3JlZ19pZHg7CiAJCX0KIAogCQlyZXQgPSB0eGdiZV9mZGlyX3dyaXRlX3BlcmZlY3RfZmlsdGVyKHd4LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9tYWluLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX21haW4uYwppbmRleCBlYjkxYzRmMjhlY2Q0Li41MzYxMzYwZjdjNmVlIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX21haW4uYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX21haW4uYwpAQCAtMjM5LDcgJiM0MzsyMzksNyBAQCBzdGF0aWMgdm9pZCB0eGdiZV9kaXNhYmxlX2RldmljZShzdHJ1Y3Qgd3ggKnd4KQogCS8qIGRpc2FibGUgYWxsIGVuYWJsZWQgcnggcXVldWVzICovCiAJZm9yIChpID0gMDsgaSAmbHQ7IHd4LSZndDtudW1fcnhfcXVldWVzOyBpJiM0MzsmIzQzOykKIAkJLyogdGhpcyBjYWxsIGFsc28gZmx1c2hlcyB0aGUgcHJldmlvdXMgd3JpdGUgKi8KLQkJd3hfZGlzYWJsZV9yeF9xdWV1ZSh3eCwgd3gtJmd0O3J4X3JpbmdbaV0pOwomIzQzOwkJd3hfZGlzYWJsZV9yeF9xdWV1ZSh3eCwgcmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZCh3eC0mZ3Q7cnhfcmluZ1tpXSwgMSkpOwogCiAJbmV0aWZfdHhfc3RvcF9hbGxfcXVldWVzKG5ldGRldik7CiAJbmV0aWZfdHhfZGlzYWJsZShuZXRkZXYpOwpAQCAtMjc1LDcgJiM0MzsyNzUsNyBAQCBzdGF0aWMgdm9pZCB0eGdiZV9kaXNhYmxlX2RldmljZShzdHJ1Y3Qgd3ggKnd4KQogCiAJLyogZGlzYWJsZSB0cmFuc21pdHMgaW4gdGhlIGhhcmR3YXJlIG5vdyB0aGF0IGludGVycnVwdHMgYXJlIG9mZiAqLwogCWZvciAoaSA9IDA7IGkgJmx0OyB3eC0mZ3Q7bnVtX3R4X3F1ZXVlczsgaSYjNDM7JiM0MzspIHsKLQkJdTggcmVnX2lkeCA9IHd4LSZndDt0eF9yaW5nW2ldLSZndDtyZWdfaWR4OwomIzQzOwkJdTggcmVnX2lkeCA9IHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQod3gtJmd0O3R4X3JpbmdbaV0sIDEpLSZndDtyZWdfaWR4OwogCiAJCXdyMzIod3gsIFdYX1BYX1RSX0NGRyhyZWdfaWR4KSwgV1hfUFhfVFJfQ0ZHX1NXRkxTSCk7CiAJfQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxMTowNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzE0MAoJCQkJCQkJb3V0cHV0OiA0MwoJCQkJCQkJdGhvdWdodHM6IDM3MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBQYXRjaCBmb3IgU3l6a2FsbGVyIEZ1enppbmcqKgoKT2theSwgdGhlIHVzZXImIzM5O3MgZ2l2ZW4gbWUgYSBwYXRjaCwgYW5kIG15IGZpcnN0IHRob3VnaHQgaXMsICYjMzQ7UmlnaHQsIHRpbWUgdG8gc2VlIHdoYXQgdGhpcyB0aGluZyYjMzk7cyB0b3VjaGluZy4mIzM0OyBMZXQmIzM5O3Mgc3RhcnQgd2l0aCBhIGZpbGUgbGlzdGluZyDigJMgdGhlIGNoYW5nZXMgYXJlIGNvbmNlbnRyYXRlZCB3aXRoaW4gdGhlIGB3YW5neHVuYCBldGhlcm5ldCBkcml2ZXIgc3Vic3lzdGVtLiBUaGUgZmlsZXMgaGl0IHN1Z2dlc3QgbW9kaWZpY2F0aW9ucyBhY3Jvc3Mgc2V2ZXJhbCBhcmVhczogZXJyb3IgaGFuZGxpbmcsIGV0aHRvb2wgaW50ZWdyYXRpb24sIGhhcmR3YXJlIGFjY2VzcywgYW5kIHZhcmlvdXMgbGlicmFyeSBmdW5jdGlvbnMgd2l0aGluIHRoZSBgbGlid3hgIGRpcmVjdG9yeSwgYWxvbmcgd2l0aCBgbmdiZWAgYW5kIGB0eGdiZWAgd2hpY2ggc2VlbSBsaWtlIHNwZWNpZmljIGRyaXZlciBpbXBsZW1lbnRhdGlvbnMuCgpOb3csIEkgbmVlZCB0byBnZXQgYSBiZXR0ZXIgaGFuZGxlIG9uIHdoYXQgYHdhbmd4dW5gIGFjdHVhbGx5ICppcyouIFRoaXMgbG9va3MgbGlrZSBzb21lIHNvcnQgb2YgRXRoZXJuZXQgY29udHJvbGxlciBvciBOSUMuIEkmIzM5O20gZ3Vlc3NpbmcgaXQmIzM5O3MgbGlrZWx5IEdiRSBvciAxMEdiRSBQQ0kgbmV0d29yayBpbnRlcmZhY2UgY2FyZHMgYmFzZWQgb24gdGhlIGRyaXZlciBuYW1lcywgYnV0IEkgbmVlZCBjb25maXJtYXRpb24uIExldCYjMzk7cyBzZWUgaWYgSSBjYW4gZmluZCBtb3JlIGNvbnRleHQgd2l0aGluIHRoZSBLY29uZmlnIGZpbGVzLCBvciBwZXJoYXBzIGEgcXVpY2sgc2VhcmNoIHRocm91Z2ggdGhlIHNvdXJjZSBjb2RlIGl0c2VsZiwgdG8gdW5kZXJzdGFuZCB0aGUgaGFyZHdhcmUuIFRoaXMgd2lsbCBnaXZlIG1lIGEgYmV0dGVyIGdyYXNwIG9mIHRoZSBwb3RlbnRpYWwgYXR0YWNrIHN1cmZhY2UgYW5kIHdoZXRoZXIgaXQmIzM5O3Mgd29ydGggYWxsb2NhdGluZyB0aGUgcmVzb3VyY2VzIHRvIGZ1enouCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTE6MDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIChOR0JFfFRYR0JFfExJQldYKSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9LY29uZmlnPTE3PWlmIE5FVF9WRU5ET1JfV0FOR1hVTlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9LY29uZmlnLTE4LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9LY29uZmlnOjE5OmNvbmZpZyBMSUJXWFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9LY29uZmlnLTIwLVx0dHJpc3RhdGVcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL0tjb25maWctMjctXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL0tjb25maWc6Mjg6Y29uZmlnIE5HQkVcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vS2NvbmZpZy0yOS1cdHRyaXN0YXRlIFwmIzM0O1dhbmd4dW4oUikgR2JFIFBDSSBFeHByZXNzIGFkYXB0ZXJzIHN1cHBvcnRcJiMzNDtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL0tjb25maWctNDItXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL0tjb25maWc6NDM6Y29uZmlnIFRYR0JFXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL0tjb25maWctNDQtXHR0cmlzdGF0ZSBcJiMzNDtXYW5neHVuKFIpIDEwLzI1LzQwR2JFIFBDSSBFeHByZXNzIGFkYXB0ZXJzIHN1cHBvcnRcJiMzNDtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL0tjb25maWctNjYtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL0tjb25maWc6Njc6Y29uZmlnIFRYR0JFVkZcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vS2NvbmZpZy02OC1cdHRyaXN0YXRlIFwmIzM0O1dhbmd4dW4oUikgMTAvMjUvNDBHIFZpcnR1YWwgRnVuY3Rpb24gRXRoZXJuZXQgc3VwcG9ydFwmIzM0O1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vS2NvbmZpZy04NC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vS2NvbmZpZzo4NTpjb25maWcgTkdCRVZGXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL0tjb25maWctODYtXHR0cmlzdGF0ZSBcJiMzNDtXYW5neHVuKFIpIEdiRSBWaXJ0dWFsIEZ1bmN0aW9uIEV0aGVybmV0IHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxMTowNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDIyMgoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDI2NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBXYW5neHVuIE5JQyBEcml2ZXIgU2l0dWF0aW9uKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIFNlY3Rpb24gMiBvZiB0aGUgaW5zdHJ1Y3Rpb25zIGhpZ2hsaWdodHMgJiMzNDtTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmUuJiMzNDsgU3BlY2lmaWNhbGx5LCBpdCBtZW50aW9ucyB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBhbmQgR1BVIGRyaXZlcnMgbGlrZSBgbWx4c3dgLCBgcGRzX2NvcmVgLCBgcWVkYCwgYGlvbmljYCwgYW5kIGBhbWRncHVgLiBUaGVzZSBhbGwgcmVxdWlyZSBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMsIHdoaWNoIGFyZSAqbm90KiBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLiBNeSBpbml0aWFsIHJlYWQgb2YgdGhpcyBzdWdnZXN0cyBXYW5neHVuIE5JQ3MgZmFsbCBpbnRvIHRoaXMgY2F0ZWdvcnksIGJ1dCBsZXQmIzM5O3MgYmUgc3VyZS4KCldhbmd4dW4gKHNwZWNpZmljYWxseSB0aGUgZHJpdmVycyBgbGlid3hgLCBgbmdiZWAsIGB0eGdiZWAsIGBuZ2JldmZgLCBhbmQgYHR4Z2JldmZgKSBhcmUgY2xlYXJseSBldGhlcm5ldCBkcml2ZXJzIGRlc2lnbmVkIGZvciBXYW5neHVuIEdiRSAvIDEwR2JFIC8gMjVHYkUgLyA0MEdiRSBhZGFwdGVycy4gTXkgdW5kZXJzdGFuZGluZyBpcyB0aGF0IHRoZXNlIGFyZSAqcGh5c2ljYWwqIFBDSSBOSUNzLiBJIGtub3cgdGhhdCBzdGFuZGFyZCBRRU1VIG5ldHdvcmsgY2FyZCBlbXVsYXRpb25zIGluY2x1ZGUgYGUxMDAwYCwgYGUxMDAwZWAsIGBydGw4MTM5YCwgYHZpcnRpby1uZXRgLCBgcGNuZXRgLCBgbmUya19wY2lgLCBgdm14bmV0M2AsIGFuZCBgaWdiYC4gU28sIFdhbmd4dW4gaXMgKmRlZmluaXRlbHkqIG5vdCBvbmUgb2YgdGhvc2UgZW11bGF0ZWQgb3B0aW9ucy4gR0NFIGlzbiYjMzk7dCByZWxldmFudCBoZXJlLgoKTm93LCBqdXN0IHRvIGJlIGFic29sdXRlbHkgdGhvcm91Z2gsIEkgd2FudCB0byBydWxlIG91dCB0aGUgcG9zc2liaWxpdHkgb2YgYW55IHZpcnR1YWwgb3Igc29mdHdhcmUtZW11bGF0ZWQgY29tcG9uZW50cyB3aXRoaW4gdGhlIFdhbmd4dW4gYXJjaGl0ZWN0dXJlLCBvciBhbnkgY29yZSBzdWJzeXN0ZW0gc3VwcG9ydC4gVGhlIGBkcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL0tjb25maWdgIGZpbGUgaW4gdGhlIGtlcm5lbCBzb3VyY2UgaXMgd2hlcmUgSSYjMzk7bGwgZmluZCB0aGF0LiBJJiMzOTttIGdvaW5nIHRvIHB1bGwgdGhhdCB1cCBhbmQgc2VlIGlmIHRoZXJlIGFyZSBhbnkgaGludHMgb2YgYSBtb3JlIGFic3RyYWN0IGxheWVyIG9yIGRlcGVuZGVuY2llcy4gSSBuZWVkIHRvIGJlIGNlcnRhaW4gdGhlcmUmIzM5O3Mgbm8gdmlydHVhbCBjb21wb25lbnQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTE6MDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gICAyOlx0I1xuICAgMzpcdCMgV2FuZ3h1biBuZXR3b3JrIGRldmljZSBjb25maWd1cmF0aW9uXG4gICA0Olx0I1xuICAgNTpcdFxuICAgNjpcdGNvbmZpZyBORVRfVkVORE9SX1dBTkdYVU5cbiAgIDc6XHRcdGJvb2wgXCYjMzQ7V2FuZ3h1biBkZXZpY2VzXCYjMzQ7XG4gICA4Olx0XHRkZWZhdWx0IHlcbiAgIDk6XHRcdGhlbHBcbiAgMTA6XHRcdCAgSWYgeW91IGhhdmUgYSBuZXR3b3JrIChFdGhlcm5ldCkgY2FyZCBmcm9tIFdhbmd4dW4oUiksIHNheSBZLlxuICAxMTpcdFxuICAxMjpcdFx0ICBOb3RlIHRoYXQgdGhlIGFuc3dlciB0byB0aGlzIHF1ZXN0aW9uIGRvZXNuJiMzOTt0IGRpcmVjdGx5IGFmZmVjdCB0aGVcbiAgMTM6XHRcdCAga2VybmVsOiBzYXlpbmcgTiB3aWxsIGp1c3QgY2F1c2UgdGhlIGNvbmZpZ3VyYXRvciB0byBza2lwIGFsbFxuICAxNDpcdFx0ICB0aGUgcXVlc3Rpb25zIGFib3V0IFdhbmd4dW4oUikgY2FyZHMuIElmIHlvdSBzYXkgWSwgeW91IHdpbGxcbiAgMTU6XHRcdCAgYmUgYXNrZWQgZm9yIHlvdXIgc3BlY2lmaWMgY2FyZCBpbiB0aGUgZm9sbG93aW5nIHF1ZXN0aW9ucy5cbiAgMTY6XHRcbiAgMTc6XHRpZiBORVRfVkVORE9SX1dBTkdYVU5cbiAgMTg6XHRcbiAgMTk6XHRjb25maWcgTElCV1hcbiAgMjA6XHRcdHRyaXN0YXRlXG4gIDIxOlx0XHRkZXBlbmRzIG9uIFBUUF8xNTg4X0NMT0NLX09QVElPTkFMXG4gIDIyOlx0XHRzZWxlY3QgUEFHRV9QT09MXG4gIDIzOlx0XHRzZWxlY3QgRElNTElCXG4gIDI0Olx0XHRzZWxlY3QgUEhZTElOS1xuICAyNTpcdFx0aGVscFxuICAyNjpcdFx0Q29tbW9uIGxpYnJhcnkgZm9yIFdhbmd4dW4oUikgRXRoZXJuZXQgZHJpdmVycy5cbiAgMjc6XHRcbiAgMjg6XHRjb25maWcgTkdCRVxuICAyOTpcdFx0dHJpc3RhdGUgXCYjMzQ7V2FuZ3h1bihSKSBHYkUgUENJIEV4cHJlc3MgYWRhcHRlcnMgc3VwcG9ydFwmIzM0O1xuICAzMDpcdFx0ZGVwZW5kcyBvbiBQQ0lcbiAgMzE6XHRcdGRlcGVuZHMgb24gUFRQXzE1ODhfQ0xPQ0tfT1BUSU9OQUxcbiAgMzI6XHRcdHNlbGVjdCBMSUJXWFxuICAzMzpcdFx0aGVscFxuICAzNDpcdFx0ICBUaGlzIGRyaXZlciBzdXBwb3J0cyBXYW5neHVuKFIpIEdiRSBQQ0kgRXhwcmVzcyBmYW1pbHkgb2ZcbiAgMzU6XHRcdCAgYWRhcHRlcnMuXG4gIDM2Olx0XG4gIDM3Olx0XHQgIE1vcmUgc3BlY2lmaWMgaW5mb3JtYXRpb24gb24gY29uZmlndXJpbmcgdGhlIGRyaXZlciBpcyBpblxuICAzODpcdFx0ICBcdTAwM2NmaWxlOkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9kZXZpY2VfZHJpdmVycy9ldGhlcm5ldC93YW5neHVuL25nYmUucnN0XHUwMDNlLlxuICAzOTpcdFxuICA0MDpcdFx0ICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlLiBUaGUgbW9kdWxlXG4gIDQxOlx0XHQgIHdpbGwgYmUgY2FsbGVkIG5nYmUuXG4gIDQyOlx0XG4gIDQzOlx0Y29uZmlnIFRYR0JFXG4gIDQ0Olx0XHR0cmlzdGF0ZSBcJiMzNDtXYW5neHVuKFIpIDEwLzI1LzQwR2JFIFBDSSBFeHByZXNzIGFkYXB0ZXJzIHN1cHBvcnRcJiMzNDtcbiAgNDU6XHRcdGRlcGVuZHMgb24gUENJXG4gIDQ2Olx0XHRkZXBlbmRzIG9uIENPTU1PTl9DTEtcbiAgNDc6XHRcdGRlcGVuZHMgb24gSTJDX0RFU0lHTldBUkVfUExBVEZPUk1cbiAgNDg6XHRcdGRlcGVuZHMgb24gUFRQXzE1ODhfQ0xPQ0tfT1BUSU9OQUxcbiAgNDk6XHRcdHNlbGVjdCBNQVJWRUxMXzEwR19QSFlcbiAgNTA6XHRcdHNlbGVjdCBSRUdNQVBcbiAgNTE6XHRcdHNlbGVjdCBIV01PTiBpZiBUWEdCRT15XG4gIDUyOlx0XHRzZWxlY3QgU0ZQXG4gIDUzOlx0XHRzZWxlY3QgR1BJT0xJQlxuICA1NDpcdFx0c2VsZWN0IEdQSU9MSUJfSVJRQ0hJUFxuICA1NTpcdFx0c2VsZWN0IFBDU19YUENTXG4gIDU2Olx0XHRzZWxlY3QgTElCV1hcbiAgNTc6XHRcdGhlbHBcbiAgNTg6XHRcdCAgVGhpcyBkcml2ZXIgc3VwcG9ydHMgV2FuZ3h1bihSKSAxMC8yNS80MEdiRSBQQ0kgRXhwcmVzcyBmYW1pbHkgb2ZcbiAgNTk6XHRcdCAgYWRhcHRlcnMuXG4gIDYwOlx0XG4gIDYxOlx0XHQgIE1vcmUgc3BlY2lmaWMgaW5mb3JtYXRpb24gb24gY29uZmlndXJpbmcgdGhlIGRyaXZlciBpcyBpblxuICA2MjpcdFx0ICBcdTAwM2NmaWxlOkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9kZXZpY2VfZHJpdmVycy9ldGhlcm5ldC93YW5neHVuL3R4Z2JlLnJzdFx1MDAzZS5cbiAgNjM6XHRcbiAgNjQ6XHRcdCAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZS4gVGhlIG1vZHVsZVxuICA2NTpcdFx0ICB3aWxsIGJlIGNhbGxlZCB0eGdiZS5cbiAgNjY6XHRcbiAgNjc6XHRjb25maWcgVFhHQkVWRlxuICA2ODpcdFx0dHJpc3RhdGUgXCYjMzQ7V2FuZ3h1bihSKSAxMC8yNS80MEcgVmlydHVhbCBGdW5jdGlvbiBFdGhlcm5ldCBzdXBwb3J0XCYjMzQ7XG4gIDY5Olx0XHRkZXBlbmRzIG9uIFBDSVxuICA3MDpcdFx0ZGVwZW5kcyBvbiBQQ0lfTVNJXG4gIDcxOlx0XHRkZXBlbmRzIG9uIFBUUF8xNTg4X0NMT0NLX09QVElPTkFMXG4gIDcyOlx0XHRzZWxlY3QgTElCV1hcbiAgNzM6XHRcdGhlbHBcbiAgNzQ6XHRcdCAgVGhpcyBkcml2ZXIgc3VwcG9ydHMgdmlydHVhbCBmdW5jdGlvbnMgZm9yIFNQMTAwMEEsIFdYMTgyMEFMLFxuICA3NTpcdFx0ICBXWDVYWFgsIFdYNVhYWEFMLlxuICA3NjpcdFxuICA3NzpcdFx0ICBUaGlzIGRyaXZlciB3YXMgZm9ybWVybHkgbmFtZWQgdHhnYmV2Zi5cbiAgNzg6XHRcbiAgNzk6XHRcdCAgTW9yZSBzcGVjaWZpYyBpbmZvcm1hdGlvbiBvbiBjb25maWd1cmluZyB0aGUgZHJpdmVyIGlzIGluXG4gIDgwOlx0XHQgIFx1MDAzY2ZpbGU6RG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2RldmljZV9kcml2ZXJzL2V0aGVybmV0L3dhbmd4dW4vdHhnYmV2Zi5yc3RcdTAwM2UuXG4gIDgxOlx0XG4gIDgyOlx0XHQgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmUuIE1TSS1YIGludGVycnVwdFxuICA4MzpcdFx0ICBzdXBwb3J0IGlzIHJlcXVpcmVkIGZvciB0aGlzIGRyaXZlciB0byB3b3JrIGNvcnJlY3RseS5cbiAgODQ6XHRcbiAgODU6XHRjb25maWcgTkdCRVZGXG4gIDg2Olx0XHR0cmlzdGF0ZSBcJiMzNDtXYW5neHVuKFIpIEdiRSBWaXJ0dWFsIEZ1bmN0aW9uIEV0aGVybmV0IHN1cHBvcnRcJiMzNDtcbiAgODc6XHRcdGRlcGVuZHMgb24gUENJX01TSVxuICA4ODpcdFx0ZGVwZW5kcyBvbiBQVFBfMTU4OF9DTE9DS19PUFRJT05BTFxuICA4OTpcdFx0c2VsZWN0IExJQldYXG4gIDkwOlx0XHRoZWxwXG4gIDkxOlx0XHQgIFRoaXMgZHJpdmVyIHN1cHBvcnRzIHZpcnR1YWwgZnVuY3Rpb25zIGZvciBXWDE4NjAsIFdYMTg2MEFMLlxuICA5MjpcdFxuICA5MzpcdFx0ICBUaGlzIGRyaXZlciB3YXMgZm9ybWVybHkgbmFtZWQgbmdiZXZmLlxuICA5NDpcdFxuICA5NTpcdFx0ICBNb3JlIHNwZWNpZmljIGluZm9ybWF0aW9uIG9uIGNvbmZpZ3VyaW5nIHRoZSBkcml2ZXIgaXMgaW5cbiAgOTY6XHRcdCAgXHUwMDNjZmlsZTpEb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZGV2aWNlX2RyaXZlcnMvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JldmYucnN0XHUwMDNlLlxuICA5NzpcdFxuICA5ODpcdFx0ICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlLiBNU0ktWCBpbnRlcnJ1cHRcbiAgOTk6XHRcdCAgc3VwcG9ydCBpcyByZXF1aXJlZCBmb3IgdGhpcyBkcml2ZXIgdG8gd29yayBjb3JyZWN0bHkuXG4gMTAwOlx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTE6MDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTYzMTgKCQkJCQkJCW91dHB1dDogMTA3CgkJCQkJCQl0aG91Z2h0czogNjQ0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIFdhbmd4dW4gTmV0d29yayBEcml2ZXIgUGF0Y2gqKgoKT2theSwgbGV0IG1lIGJyZWFrIHRoaXMgZG93bi4gQWxsIHRoZXNlIG1vZGlmaWVkIGZpbGVzIGFyZSBuZXN0bGVkIHVuZGVyIGBkcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2AsIGFuZCB0aGV5JiMzOTtyZSBhbGwgZGlyZWN0bHkgcmVsYXRlZCB0byB0aGUgV2FuZ3h1biBQQ0llIG5ldHdvcmsgYWRhcHRlciBkcml2ZXJzLiBXZSYjMzk7cmUgbG9va2luZyBhdCBjb2RlIGZvciB0aGUgY29tbW9uIGBsaWJ3eGAgbGlicmFyeSwgdGhlIE5HQkUgYW5kIFRYR0JFIGRyaXZlcnMsIGFuZCB0aGVpciBhc3NvY2lhdGVkIFNSLUlPViBWaXJ0dWFsIEZ1bmN0aW9ucy4gUmlnaHQgYXdheSwgbXkgaW50ZXJuYWwgYWxhcm1zIGFyZSBnb2luZyBvZmYuCgpJIGtub3cgdGhlc2UgZHJpdmVycyBhcmUgKipoYXJkd2FyZS1kZXBlbmRlbnQqKi4gVGhleSYjMzk7cmUgZGVzaWduZWQgdG8gd29yayB3aXRoIHNwZWNpZmljIFdhbmd4dW4gUENJZSBoYXJkd2FyZSDigJMgU1AxMDAwLCBXWDE4MjAsIFdYMTg2MCwgYW5kIHNvIG9uLiBDcml0aWNhbGx5LCBhbmQgdGhpcyBpcyB0aGUgY3J1eCBvZiB0aGUgaXNzdWUsIHRoaXMgaGFyZHdhcmUgKmlzbiYjMzk7dCogZW11bGF0ZWQgaW4gc3RhbmRhcmQgZnV6emluZyBlbnZpcm9ubWVudHMgbGlrZSBRRU1VIG9yIEdvb2dsZSBDb21wdXRlIEVuZ2luZS4gVGhhdCBtZWFucyBhbnkgY2hhbmdlcyBoZXJlIGFyZSBlc3NlbnRpYWxseSBnb2luZyB0byBiZSBpbnZpc2libGUgdG8gYSB0eXBpY2FsIHN5emthbGxlciBzZXR1cC4KCk5vdywgcmVmZXJyaW5nIGJhY2sgdG8gdGhlICYjMzQ7TmVnYXRpdmUgQ3JpdGVyaWEmIzM0OyBvdXRsaW5lZCBpbiBTZWN0aW9uIDIsIHRoZSBzaXR1YXRpb24gaXMgY2xlYXIuIFRoaXMgY29kZSBmYWxscyB1bmRlciAmIzM0O3N0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZSYjMzQ7LiBJdCYjMzk7cyBzaW1pbGFyIHRvIHRob3NlIG90aGVyIHZlbmRvci1zcGVjaWZpYyBQQ0llIGRyaXZlcnMg4oCTIHRoZSBvbmVzIHRoYXQgcmVxdWlyZSBzcGVjaWZpYyBBU0lDcyBvciBQQ0llIGNhcmRzLCBhbmQgd2Uga25vdyB0aG9zZSBhcmUgZXhwbGljaXRseSBleGNsdWRlZCBmcm9tIHN0YW5kYXJkIFFFTVUuCgpUaGVyZWZvcmUsIGZyb20gYSBmdXp6aW5nIHBlcnNwZWN0aXZlLCB0aGlzIHBhdGNoIGlzIGEgZGVhZCBlbmQuIEkgbmVlZCB0byBmbGFnIGBXb3J0aEZ1enppbmdgIGFzIGBmYWxzZWAuIFRoZXJlJiMzOTtzIG5vIHBvaW50IGluIHdhc3RpbmcgY3ljbGVzIG9uIGNvZGUgdGhhdCBzeXprYWxsZXIgd29uJiMzOTt0IGJlIGFibGUgdG8gcmVhY2guIGBGb2N1c1N5bWJvbHNgIHdpbGwgYmUgYW4gZW1wdHkgbGlzdCwgYW5kIGBFbmFibGVDb25maWdzYCB3aWxsIGJlIGFuIGVtcHR5IGxpc3QgYXMgd2VsbC4KClRoZSBgUmVhc29uaW5nYCBmb3IgdGhpcyBpcyBzdHJhaWdodGZvcndhcmQuIFdlJiMzOTtyZSBkZWFsaW5nIHdpdGggV2FuZ3h1biBFdGhlcm5ldCBOSUMgZHJpdmVycyAobGlid3gsIG5nYmUsIHR4Z2JlKSB0aGF0ICpuZWVkKiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBoYXJkd2FyZSB3aGljaCBpc24mIzM5O3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgdmlydHVhbCBlbnZpcm9ubWVudHMuIENvbnNlcXVlbnRseSwgdGhlIGNvZGUgbW9kaWZpY2F0aW9ucyBhcmUgdW5yZWFjaGFibGUgYnkgdGhlIHN5emthbGxlciBmdXp6ZXIsIHdoaWNoIG1ha2VzIHRoaXMgbm90IHdvcnRoIGZ1enppbmcuCgpBbHJpZ2h0LCBJJiMzOTttIHJlYWR5IHRvIGNhbGwgYHNldC1yZXN1bHRzYCB3aXRoIHRoZSBhcHByb3ByaWF0ZSBhcmd1bWVudHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTE6MDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBjaGFuZ2VzIGFyZSBzdHJpY3RseSBjb25maW5lZCB0byB0aGUgV2FuZ3h1biBFdGhlcm5ldCBuZXR3b3JrIGRyaXZlcnMgKGxpYnd4LCBuZ2JlLCB0eGdiZSkgdW5kZXIgZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi8uIFRoZXNlIGRyaXZlcnMgcmVxdWlyZSB2ZW5kb3Itc3BlY2lmaWMgUENJZSBBU0lDIGhhcmR3YXJlIHRoYXQgaXMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyAoUUVNVS9HQ0UpLCBtYWtpbmcgdGhlIG1vZGlmaWVkIGNvZGUgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGZvciBzeXprYWxsZXIgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIGNoYW5nZXMgYXJlIHN0cmljdGx5IGNvbmZpbmVkIHRvIHRoZSBXYW5neHVuIEV0aGVybmV0IG5ldHdvcmsgZHJpdmVycyAobGlid3gsIG5nYmUsIHR4Z2JlKSB1bmRlciBkcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuLy4gVGhlc2UgZHJpdmVycyByZXF1aXJlIHZlbmRvci1zcGVjaWZpYyBQQ0llIEFTSUMgaGFyZHdhcmUgdGhhdCBpcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIChRRU1VL0dDRSksIG1ha2luZyB0aGUgbW9kaWZpZWQgY29kZSBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgZm9yIHN5emthbGxlciBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxMTowNTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMDlUMTE6MDU6NDIuODg2MzE4NjRaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzM2MjcyNDkxNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIGNoYW5nZXMgYXJlIHN0cmljdGx5IGNvbmZpbmVkIHRvIHRoZSBXYW5neHVuIEV0aGVybmV0IG5ldHdvcmsgZHJpdmVycyAobGlid3gsIG5nYmUsIHR4Z2JlKSB1bmRlciBkcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuLy4gVGhlc2UgZHJpdmVycyByZXF1aXJlIHZlbmRvci1zcGVjaWZpYyBQQ0llIEFTSUMgaGFyZHdhcmUgdGhhdCBpcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIChRRU1VL0dDRSksIG1ha2luZyB0aGUgbW9kaWZpZWQgY29kZSBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgZm9yIHN5emthbGxlciBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTE6MDU6NDIuODg2MzIyOThaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ4MzM5Nzg5OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDY3NDgzZmZmODUyNTdlZGEwNzZhYzY5MDVmYmRiMDYyODQ3YmQ4ZGZcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFdlZCBTZXAgOSAxMTowNTo0MiAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2Vyci5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9lcnIuY1xcbmluZGV4IGI1NmZiZGM5NTlkZWMuLjhlYWRiNGQzYWJjZmYgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9lcnIuY1xcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfZXJyLmNcXG5AQCAtMjAxLDEyICsyMDEsMTggQEAgc3RhdGljIGJvb2wgd3hfcmluZ190eF9wZW5kaW5nKHN0cnVjdCB3eCAqd3gpXFxuIHtcXG4gXFx0aW50IGk7XFxuIFxcbitcXHRyY3VfcmVhZF9sb2NrKCk7XFxuIFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyB3eC1cXHUwMDNlbnVtX3R4X3F1ZXVlczsgaSsrKSB7XFxuLVxcdFxcdHN0cnVjdCB3eF9yaW5nICp0eF9yaW5nID0gd3gtXFx1MDAzZXR4X3JpbmdbaV07XFxuK1xcdFxcdHN0cnVjdCB3eF9yaW5nICp0eF9yaW5nID0gcmN1X2RlcmVmZXJlbmNlKHd4LVxcdTAwM2V0eF9yaW5nW2ldKTtcXG4gXFxuLVxcdFxcdGlmICh0eF9yaW5nLVxcdTAwM2VuZXh0X3RvX3VzZSAhPSB0eF9yaW5nLVxcdTAwM2VuZXh0X3RvX2NsZWFuKVxcbitcXHRcXHRpZiAoIXR4X3JpbmcpXFxuK1xcdFxcdFxcdGNvbnRpbnVlO1xcbitcXHRcXHRpZiAodHhfcmluZy1cXHUwMDNlbmV4dF90b191c2UgIT0gdHhfcmluZy1cXHUwMDNlbmV4dF90b19jbGVhbikge1xcbitcXHRcXHRcXHRyY3VfcmVhZF91bmxvY2soKTtcXG4gXFx0XFx0XFx0cmV0dXJuIHRydWU7XFxuK1xcdFxcdH1cXG4gXFx0fVxcbitcXHRyY3VfcmVhZF91bmxvY2soKTtcXG4gXFxuIFxcdHJldHVybiBmYWxzZTtcXG4gfVxcbkBAIC0yNjQsOCArMjcwLDE0IEBAIHN0YXRpYyB2b2lkIHd4X2RldGVjdF90eF9oYW5nKHN0cnVjdCB3eCAqd3gpXFxuIFxcbiBcXHQvKiBGb3JjZSBkZXRlY3Rpb24gb2YgaHVuZyBjb250cm9sbGVyICovXFxuIFxcdGlmIChuZXRpZl9jYXJyaWVyX29rKHd4LVxcdTAwM2VuZXRkZXYpKSB7XFxuLVxcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyB3eC1cXHUwMDNlbnVtX3R4X3F1ZXVlczsgaSsrKVxcbi1cXHRcXHRcXHRzZXRfYml0KFdYX1RYX0RFVEVDVF9IQU5HLCB3eC1cXHUwMDNldHhfcmluZ1tpXS1cXHUwMDNlc3RhdGUpO1xcbitcXHRcXHRyY3VfcmVhZF9sb2NrKCk7XFxuK1xcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyB3eC1cXHUwMDNlbnVtX3R4X3F1ZXVlczsgaSsrKSB7XFxuK1xcdFxcdFxcdHN0cnVjdCB3eF9yaW5nICp0eF9yaW5nID0gcmN1X2RlcmVmZXJlbmNlKHd4LVxcdTAwM2V0eF9yaW5nW2ldKTtcXG4rXFxuK1xcdFxcdFxcdGlmICh0eF9yaW5nKVxcbitcXHRcXHRcXHRcXHRzZXRfYml0KFdYX1RYX0RFVEVDVF9IQU5HLCB0eF9yaW5nLVxcdTAwM2VzdGF0ZSk7XFxuK1xcdFxcdH1cXG4rXFx0XFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuIFxcdH1cXG4gfVxcbiBcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9ldGh0b29sLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2V0aHRvb2wuY1xcbmluZGV4IDk0MGQyZTU5ODc2YzcuLmVhZTU5NTJjMGY1ZmMgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9ldGh0b29sLmNcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2V0aHRvb2wuY1xcbkBAIC0xNTQsOCArMTU0LDkgQEAgdm9pZCB3eF9nZXRfZXRodG9vbF9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxcbiBcXHRcXHR9XFxuIFxcdH1cXG4gXFxuK1xcdHJjdV9yZWFkX2xvY2soKTtcXG4gXFx0Zm9yIChqID0gMDsgaiBcXHUwMDNjIG5ldGRldi1cXHUwMDNlbnVtX3R4X3F1ZXVlczsgaisrKSB7XFxuLVxcdFxcdHJpbmcgPSB3eC1cXHUwMDNldHhfcmluZ1tqXTtcXG4rXFx0XFx0cmluZyA9IHJjdV9kZXJlZmVyZW5jZSh3eC1cXHUwMDNldHhfcmluZ1tqXSk7XFxuIFxcdFxcdGlmICghcmluZykge1xcbiBcXHRcXHRcXHRkYXRhW2krK10gPSAwO1xcbiBcXHRcXHRcXHRkYXRhW2krK10gPSAwO1xcbkBAIC0xNzAsNyArMTcxLDcgQEAgdm9pZCB3eF9nZXRfZXRodG9vbF9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxcbiBcXHRcXHRpICs9IDI7XFxuIFxcdH1cXG4gXFx0Zm9yIChqID0gMDsgaiBcXHUwMDNjIFdYX05VTV9SWF9RVUVVRVM7IGorKykge1xcbi1cXHRcXHRyaW5nID0gd3gtXFx1MDAzZXJ4X3Jpbmdbal07XFxuK1xcdFxcdHJpbmcgPSByY3VfZGVyZWZlcmVuY2Uod3gtXFx1MDAzZXJ4X3Jpbmdbal0pO1xcbiBcXHRcXHRpZiAoIXJpbmcpIHtcXG4gXFx0XFx0XFx0ZGF0YVtpKytdID0gMDtcXG4gXFx0XFx0XFx0ZGF0YVtpKytdID0gMDtcXG5AQCAtMTg0LDYgKzE4NSw3IEBAIHZvaWQgd3hfZ2V0X2V0aHRvb2xfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcXG4gXFx0XFx0fSB3aGlsZSAodTY0X3N0YXRzX2ZldGNoX3JldHJ5KFxcdTAwMjZyaW5nLVxcdTAwM2VzeW5jcCwgc3RhcnQpKTtcXG4gXFx0XFx0aSArPSAyO1xcbiBcXHR9XFxuK1xcdHJjdV9yZWFkX3VubG9jaygpO1xcbiB9XFxuIEVYUE9SVF9TWU1CT0wod3hfZ2V0X2V0aHRvb2xfc3RhdHMpO1xcbiBcXG5AQCAtODA1LDkgKzgwNyw5IEBAIHN0YXRpYyBpbnQgd3hfc2V0X3JpbmdwYXJhbV92ZihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxcbiBcXG4gXFx0aWYgKCFuZXRpZl9ydW5uaW5nKHd4LVxcdTAwM2VuZXRkZXYpKSB7XFxuIFxcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyB3eC1cXHUwMDNlbnVtX3R4X3F1ZXVlczsgaSsrKVxcbi1cXHRcXHRcXHR3eC1cXHUwMDNldHhfcmluZ1tpXS1cXHUwMDNlY291bnQgPSBuZXdfdHhfY291bnQ7XFxuK1xcdFxcdFxcdHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQod3gtXFx1MDAzZXR4X3JpbmdbaV0sIDEpLVxcdTAwM2Vjb3VudCA9IG5ld190eF9jb3VudDtcXG4gXFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIHd4LVxcdTAwM2VudW1fcnhfcXVldWVzOyBpKyspXFxuLVxcdFxcdFxcdHd4LVxcdTAwM2VyeF9yaW5nW2ldLVxcdTAwM2Vjb3VudCA9IG5ld19yeF9jb3VudDtcXG4rXFx0XFx0XFx0cmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZCh3eC1cXHUwMDNlcnhfcmluZ1tpXSwgMSktXFx1MDAzZWNvdW50ID0gbmV3X3J4X2NvdW50O1xcbiBcXHRcXHR3eC1cXHUwMDNldHhfcmluZ19jb3VudCA9IG5ld190eF9jb3VudDtcXG4gXFx0XFx0d3gtXFx1MDAzZXJ4X3JpbmdfY291bnQgPSBuZXdfcnhfY291bnQ7XFxuIFxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2h3LmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2h3LmNcXG5pbmRleCAxMjJjNDk1MmQyMDNmLi5jNzgxMzZhYmU5MmY5IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfaHcuY1xcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfaHcuY1xcbkBAIC0xNTk4LDEzICsxNTk4LDE3IEBAIHN0YXRpYyB2b2lkIHd4X3ZsYW5fc3RyaXBfY29udHJvbChzdHJ1Y3Qgd3ggKnd4LCBib29sIGVuYWJsZSlcXG4ge1xcbiBcXHRpbnQgaSwgajtcXG4gXFxuK1xcdHJjdV9yZWFkX2xvY2soKTtcXG4gXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIHd4LVxcdTAwM2VudW1fcnhfcXVldWVzOyBpKyspIHtcXG4tXFx0XFx0c3RydWN0IHd4X3JpbmcgKnJpbmcgPSB3eC1cXHUwMDNlcnhfcmluZ1tpXTtcXG4rXFx0XFx0c3RydWN0IHd4X3JpbmcgKnJpbmcgPSByY3VfZGVyZWZlcmVuY2Uod3gtXFx1MDAzZXJ4X3JpbmdbaV0pO1xcbiBcXG4rXFx0XFx0aWYgKCFyaW5nKVxcbitcXHRcXHRcXHRjb250aW51ZTtcXG4gXFx0XFx0aiA9IHJpbmctXFx1MDAzZXJlZ19pZHg7XFxuIFxcdFxcdHdyMzJtKHd4LCBXWF9QWF9SUl9DRkcoaiksIFdYX1BYX1JSX0NGR19WTEFOLFxcbiBcXHRcXHQgICAgICBlbmFibGUgPyBXWF9QWF9SUl9DRkdfVkxBTiA6IDApO1xcbiBcXHR9XFxuK1xcdHJjdV9yZWFkX3VubG9jaygpO1xcbiB9XFxuIFxcbiBzdGF0aWMgdm9pZCB3eF92bGFuX3Byb21pc2NfZW5hYmxlKHN0cnVjdCB3eCAqd3gpXFxuQEAgLTE3OTcsNyArMTgwMSw3IEBAIHN0YXRpYyB2b2lkIHd4X3NldF9yeF9idWZmZXJfbGVuKHN0cnVjdCB3eCAqd3gpXFxuIFxcdCAqIHRoZSBCYXNlIGFuZCBMZW5ndGggb2YgdGhlIFJ4IERlc2NyaXB0b3IgUmluZ1xcbiBcXHQgKi9cXG4gXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIHd4LVxcdTAwM2VudW1fcnhfcXVldWVzOyBpKyspIHtcXG4tXFx0XFx0cnhfcmluZyA9IHd4LVxcdTAwM2VyeF9yaW5nW2ldO1xcbitcXHRcXHRyeF9yaW5nID0gcmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZCh3eC1cXHUwMDNlcnhfcmluZ1tpXSwgMSk7XFxuIFxcdFxcdHJ4X3JpbmctXFx1MDAzZXJ4X2J1Zl9sZW4gPSBXWF9SWEJVRkZFUl8ySztcXG4gI2lmIChQQUdFX1NJWkUgXFx1MDAzYyA4MTkyKVxcbiBcXHRcXHRpZiAodGVzdF9iaXQoV1hfRkxBR19SU0NfRU5BQkxFRCwgd3gtXFx1MDAzZWZsYWdzKSlcXG5AQCAtMjAyMSw4ICsyMDI1LDExIEBAIHN0YXRpYyB2b2lkIHd4X2NvbmZpZ3VyZV90eChzdHJ1Y3Qgd3ggKnd4KVxcbiBcXHQgICAgICBXWF9URE1fQ1RMX1RFLCBXWF9URE1fQ1RMX1RFKTtcXG4gXFxuIFxcdC8qIFNldHVwIHRoZSBIVyBUeCBIZWFkIGFuZCBUYWlsIGRlc2NyaXB0b3IgcG9pbnRlcnMgKi9cXG4tXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIHd4LVxcdTAwM2VudW1fdHhfcXVldWVzOyBpKyspXFxuLVxcdFxcdHd4X2NvbmZpZ3VyZV90eF9yaW5nKHd4LCB3eC1cXHUwMDNldHhfcmluZ1tpXSk7XFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyB3eC1cXHUwMDNlbnVtX3R4X3F1ZXVlczsgaSsrKSB7XFxuK1xcdFxcdHN0cnVjdCB3eF9yaW5nICp0eF9yaW5nID0gcmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZCh3eC1cXHUwMDNldHhfcmluZ1tpXSwgMSk7XFxuK1xcbitcXHRcXHR3eF9jb25maWd1cmVfdHhfcmluZyh3eCwgdHhfcmluZyk7XFxuK1xcdH1cXG4gXFxuIFxcdHdyMzJtKHd4LCBXWF9UU0NfQlVGX0FFLCBXWF9UU0NfQlVGX0FFX1RIUiwgMHgxMCk7XFxuIFxcbkBAIC0yMjQ3LDggKzIyNTQsMTEgQEAgdm9pZCB3eF9jb25maWd1cmVfcngoc3RydWN0IHd4ICp3eClcXG4gXFx0LyogU2V0dXAgdGhlIEhXIFJ4IEhlYWQgYW5kIFRhaWwgRGVzY3JpcHRvciBQb2ludGVycyBhbmRcXG4gXFx0ICogdGhlIEJhc2UgYW5kIExlbmd0aCBvZiB0aGUgUnggRGVzY3JpcHRvciBSaW5nXFxuIFxcdCAqL1xcbi1cXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2Mgd3gtXFx1MDAzZW51bV9yeF9xdWV1ZXM7IGkrKylcXG4tXFx0XFx0d3hfY29uZmlndXJlX3J4X3Jpbmcod3gsIHd4LVxcdTAwM2VyeF9yaW5nW2ldKTtcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIHd4LVxcdTAwM2VudW1fcnhfcXVldWVzOyBpKyspIHtcXG4rXFx0XFx0c3RydWN0IHd4X3JpbmcgKnJ4X3JpbmcgPSByY3VfZGVyZWZlcmVuY2VfcHJvdGVjdGVkKHd4LVxcdTAwM2VyeF9yaW5nW2ldLCAxKTtcXG4rXFxuK1xcdFxcdHd4X2NvbmZpZ3VyZV9yeF9yaW5nKHd4LCByeF9yaW5nKTtcXG4rXFx0fVxcbiBcXG4gXFx0LyogRW5hYmxlIGFsbCByZWNlaXZlcywgZGlzYWJsZSBzZWN1cml0eSBlbmdpbmUgcHJpb3IgdG8gYmxvY2sgdHJhZmZpYyAqL1xcbiBcXHRyZXQgPSB3eF9kaXNhYmxlX3NlY19yeF9wYXRoKHd4KTtcXG5AQCAtMjgzOCwxMSArMjg0OCwxNyBAQCBpbnQgd3hfZmNfZW5hYmxlKHN0cnVjdCB3eCAqd3gsIGJvb2wgdHhfcGF1c2UsIGJvb2wgcnhfcGF1c2UpXFxuIFxcdCAqICBhbmQgcGVyZm9ybWFuY2UgcmVhc29ucy5cXG4gXFx0ICovXFxuIFxcdGlmICh3eC1cXHUwMDNlbnVtX3J4X3F1ZXVlcyBcXHUwMDNlIDEgXFx1MDAyNlxcdTAwMjYgIXR4X3BhdXNlKSB7XFxuLVxcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyB3eC1cXHUwMDNlbnVtX3J4X3F1ZXVlczsgaSsrKVxcbi1cXHRcXHRcXHR3eF9lbmFibGVfcnhfZHJvcCh3eCwgd3gtXFx1MDAzZXJ4X3JpbmdbaV0pO1xcbitcXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2Mgd3gtXFx1MDAzZW51bV9yeF9xdWV1ZXM7IGkrKykge1xcbitcXHRcXHRcXHRzdHJ1Y3Qgd3hfcmluZyAqcnhfcmluZyA9IHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQod3gtXFx1MDAzZXJ4X3JpbmdbaV0sIDEpO1xcbitcXG4rXFx0XFx0XFx0d3hfZW5hYmxlX3J4X2Ryb3Aod3gsIHJ4X3JpbmcpO1xcbitcXHRcXHR9XFxuIFxcdH0gZWxzZSB7XFxuLVxcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyB3eC1cXHUwMDNlbnVtX3J4X3F1ZXVlczsgaSsrKVxcbi1cXHRcXHRcXHR3eF9kaXNhYmxlX3J4X2Ryb3Aod3gsIHd4LVxcdTAwM2VyeF9yaW5nW2ldKTtcXG4rXFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIHd4LVxcdTAwM2VudW1fcnhfcXVldWVzOyBpKyspIHtcXG4rXFx0XFx0XFx0c3RydWN0IHd4X3JpbmcgKnJ4X3JpbmcgPSByY3VfZGVyZWZlcmVuY2VfcHJvdGVjdGVkKHd4LVxcdTAwM2VyeF9yaW5nW2ldLCAxKTtcXG4rXFxuK1xcdFxcdFxcdHd4X2Rpc2FibGVfcnhfZHJvcCh3eCwgcnhfcmluZyk7XFxuK1xcdFxcdH1cXG4gXFx0fVxcbiBcXG4gXFx0cmV0dXJuIDA7XFxuQEAgLTI4NzAsOCArMjg4NiwxNSBAQCBzdGF0aWMgdm9pZCB3eF91cGRhdGVfeG9mZl9yeF9sZmMoc3RydWN0IHd4ICp3eClcXG4gXFx0aWYgKCFkYXRhKVxcbiBcXHRcXHRyZXR1cm47XFxuIFxcbi1cXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2Mgd3gtXFx1MDAzZW51bV90eF9xdWV1ZXM7IGkrKylcXG4tXFx0XFx0Y2xlYXJfYml0KFdYX0hBTkdfQ0hFQ0tfQVJNRUQsIHd4LVxcdTAwM2V0eF9yaW5nW2ldLVxcdTAwM2VzdGF0ZSk7XFxuK1xcdHJjdV9yZWFkX2xvY2soKTtcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIHd4LVxcdTAwM2VudW1fdHhfcXVldWVzOyBpKyspIHtcXG4rXFx0XFx0c3RydWN0IHd4X3JpbmcgKnR4X3JpbmcgPSByY3VfZGVyZWZlcmVuY2Uod3gtXFx1MDAzZXR4X3JpbmdbaV0pO1xcbitcXG4rXFx0XFx0aWYgKCF0eF9yaW5nKVxcbitcXHRcXHRcXHRjb250aW51ZTtcXG4rXFx0XFx0Y2xlYXJfYml0KFdYX0hBTkdfQ0hFQ0tfQVJNRUQsIHR4X3JpbmctXFx1MDAzZXN0YXRlKTtcXG4rXFx0fVxcbitcXHRyY3VfcmVhZF91bmxvY2soKTtcXG4gfVxcbiBcXG4gLyoqXFxuQEAgLTI4OTMsMTAgKzI5MTYsMTMgQEAgdm9pZCB3eF91cGRhdGVfc3RhdHMoc3RydWN0IHd4ICp3eClcXG4gXFxuIFxcdHNwaW5fbG9jayhcXHUwMDI2d3gtXFx1MDAzZWh3X3N0YXRzX2xvY2spO1xcbiBcXG4rXFx0cmN1X3JlYWRfbG9jaygpO1xcbiBcXHQvKiBnYXRoZXIgc29tZSBzdGF0cyB0byB0aGUgd3ggc3RydWN0IHRoYXQgYXJlIHBlciBxdWV1ZSAqL1xcbiBcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2Mgd3gtXFx1MDAzZW51bV9yeF9xdWV1ZXM7IGkrKykge1xcbi1cXHRcXHRzdHJ1Y3Qgd3hfcmluZyAqcnhfcmluZyA9IHd4LVxcdTAwM2VyeF9yaW5nW2ldO1xcbitcXHRcXHRzdHJ1Y3Qgd3hfcmluZyAqcnhfcmluZyA9IHJjdV9kZXJlZmVyZW5jZSh3eC1cXHUwMDNlcnhfcmluZ1tpXSk7XFxuIFxcbitcXHRcXHRpZiAoIXJ4X3JpbmcpXFxuK1xcdFxcdFxcdGNvbnRpbnVlO1xcbiBcXHRcXHRub25fZW9wX2Rlc2NzICs9IHJ4X3JpbmctXFx1MDAzZXJ4X3N0YXRzLm5vbl9lb3BfZGVzY3M7XFxuIFxcdFxcdGFsbG9jX3J4X2J1ZmZfZmFpbGVkICs9IHJ4X3JpbmctXFx1MDAzZXJ4X3N0YXRzLmFsbG9jX3J4X2J1ZmZfZmFpbGVkO1xcbiBcXHRcXHRod19jc3VtX3J4X2dvb2QgKz0gcnhfcmluZy1cXHUwMDNlcnhfc3RhdHMuY3N1bV9nb29kX2NudDtcXG5AQCAtMjkxMiwxOSArMjkzOCwyOCBAQCB2b2lkIHd4X3VwZGF0ZV9zdGF0cyhzdHJ1Y3Qgd3ggKnd4KVxcbiBcXHRcXHR1NjQgcnNjX2ZsdXNoID0gMDtcXG4gXFxuIFxcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyB3eC1cXHUwMDNlbnVtX3J4X3F1ZXVlczsgaSsrKSB7XFxuLVxcdFxcdFxcdHJzY19jb3VudCArPSB3eC1cXHUwMDNlcnhfcmluZ1tpXS1cXHUwMDNlcnhfc3RhdHMucnNjX2NvdW50O1xcbi1cXHRcXHRcXHRyc2NfZmx1c2ggKz0gd3gtXFx1MDAzZXJ4X3JpbmdbaV0tXFx1MDAzZXJ4X3N0YXRzLnJzY19mbHVzaDtcXG4rXFx0XFx0XFx0c3RydWN0IHd4X3JpbmcgKnJ4X3JpbmcgPSByY3VfZGVyZWZlcmVuY2Uod3gtXFx1MDAzZXJ4X3JpbmdbaV0pO1xcbitcXG4rXFx0XFx0XFx0aWYgKCFyeF9yaW5nKVxcbitcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4rXFxuK1xcdFxcdFxcdHJzY19jb3VudCArPSByeF9yaW5nLVxcdTAwM2VyeF9zdGF0cy5yc2NfY291bnQ7XFxuK1xcdFxcdFxcdHJzY19mbHVzaCArPSByeF9yaW5nLVxcdTAwM2VyeF9zdGF0cy5yc2NfZmx1c2g7XFxuIFxcdFxcdH1cXG4gXFx0XFx0d3gtXFx1MDAzZXJzY19jb3VudCA9IHJzY19jb3VudDtcXG4gXFx0XFx0d3gtXFx1MDAzZXJzY19mbHVzaCA9IHJzY19mbHVzaDtcXG4gXFx0fVxcbiBcXG4gXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIHd4LVxcdTAwM2VudW1fdHhfcXVldWVzOyBpKyspIHtcXG4tXFx0XFx0c3RydWN0IHd4X3JpbmcgKnR4X3JpbmcgPSB3eC1cXHUwMDNldHhfcmluZ1tpXTtcXG4rXFx0XFx0c3RydWN0IHd4X3JpbmcgKnR4X3JpbmcgPSByY3VfZGVyZWZlcmVuY2Uod3gtXFx1MDAzZXR4X3JpbmdbaV0pO1xcbitcXG4rXFx0XFx0aWYgKCF0eF9yaW5nKVxcbitcXHRcXHRcXHRjb250aW51ZTtcXG4gXFxuIFxcdFxcdHJlc3RhcnRfcXVldWUgKz0gdHhfcmluZy1cXHUwMDNldHhfc3RhdHMucmVzdGFydF9xdWV1ZTtcXG4gXFx0XFx0dHhfYnVzeSArPSB0eF9yaW5nLVxcdTAwM2V0eF9zdGF0cy50eF9idXN5O1xcbiBcXHR9XFxuK1xcdHJjdV9yZWFkX3VubG9jaygpO1xcbiBcXHR3eC1cXHUwMDNlcmVzdGFydF9xdWV1ZSA9IHJlc3RhcnRfcXVldWU7XFxuIFxcdHd4LVxcdTAwM2V0eF9idXN5ID0gdHhfYnVzeTtcXG4gXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfbGliLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2xpYi5jXFxuaW5kZXggZWQ1YWFkNzg1N2JkOS4uOWY5MGFhOTJmODQwYiAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2xpYi5jXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9saWIuY1xcbkBAIC0xNzE0LDcgKzE3MTQsMTIgQEAgbmV0ZGV2X3R4X3Qgd3hfeG1pdF9mcmFtZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbiBcXG4gXFx0aWYgKHJfaWR4IFxcdTAwM2U9IHd4LVxcdTAwM2VudW1fdHhfcXVldWVzKVxcbiBcXHRcXHRyX2lkeCA9IHJfaWR4ICUgd3gtXFx1MDAzZW51bV90eF9xdWV1ZXM7XFxuLVxcdHR4X3JpbmcgPSB3eC1cXHUwMDNldHhfcmluZ1tyX2lkeF07XFxuK1xcdHR4X3JpbmcgPSByY3VfZGVyZWZlcmVuY2Uod3gtXFx1MDAzZXR4X3Jpbmdbcl9pZHhdKTtcXG4rXFxuK1xcdGlmICh1bmxpa2VseSghdHhfcmluZykpIHtcXG4rXFx0XFx0ZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTtcXG4rXFx0XFx0cmV0dXJuIE5FVERFVl9UWF9PSztcXG4rXFx0fVxcbiBcXG4gXFx0cmV0dXJuIHd4X3htaXRfZnJhbWVfcmluZyhza2IsIHR4X3JpbmcpO1xcbiB9XFxuQEAgLTIwNTgsMjYgKzIwNjMsMjYgQEAgc3RhdGljIGJvb2wgd3hfY2FjaGVfcmluZ192bWRxKHN0cnVjdCB3eCAqd3gpXFxuIFxcdFxcdFxcdC8qIElmIHdlIGFyZSBncmVhdGVyIHRoYW4gaW5kaWNlcyBtb3ZlIHRvIG5leHQgcG9vbCAqL1xcbiBcXHRcXHRcXHRpZiAoKHJlZ19pZHggXFx1MDAyNiB+dm1kcS1cXHUwMDNlbWFzaykgXFx1MDAzZT0gcnNzLVxcdTAwM2VpbmRpY2VzKVxcbiBcXHRcXHRcXHRcXHRyZWdfaWR4ID0gX19BTElHTl9NQVNLKHJlZ19pZHgsIH52bWRxLVxcdTAwM2VtYXNrKTtcXG4tXFx0XFx0XFx0d3gtXFx1MDAzZXJ4X3JpbmdbaV0tXFx1MDAzZXJlZ19pZHggPSByZWdfaWR4O1xcbitcXHRcXHRcXHRyY3VfZGVyZWZlcmVuY2VfcHJvdGVjdGVkKHd4LVxcdTAwM2VyeF9yaW5nW2ldLCAxKS1cXHUwMDNlcmVnX2lkeCA9IHJlZ19pZHg7XFxuIFxcdFxcdH1cXG4gXFx0XFx0cmVnX2lkeCA9IHZtZHEtXFx1MDAzZW9mZnNldCAqIF9fQUxJR05fTUFTSygxLCB+dm1kcS1cXHUwMDNlbWFzayk7XFxuIFxcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyB3eC1cXHUwMDNlbnVtX3R4X3F1ZXVlczsgaSsrLCByZWdfaWR4KyspIHtcXG4gXFx0XFx0XFx0LyogSWYgd2UgYXJlIGdyZWF0ZXIgdGhhbiBpbmRpY2VzIG1vdmUgdG8gbmV4dCBwb29sICovXFxuIFxcdFxcdFxcdGlmICgocmVnX2lkeCBcXHUwMDI2IHJzcy1cXHUwMDNlbWFzaykgXFx1MDAzZT0gcnNzLVxcdTAwM2VpbmRpY2VzKVxcbiBcXHRcXHRcXHRcXHRyZWdfaWR4ID0gX19BTElHTl9NQVNLKHJlZ19pZHgsIH52bWRxLVxcdTAwM2VtYXNrKTtcXG4tXFx0XFx0XFx0d3gtXFx1MDAzZXR4X3JpbmdbaV0tXFx1MDAzZXJlZ19pZHggPSByZWdfaWR4O1xcbitcXHRcXHRcXHRyY3VfZGVyZWZlcmVuY2VfcHJvdGVjdGVkKHd4LVxcdTAwM2V0eF9yaW5nW2ldLCAxKS1cXHUwMDNlcmVnX2lkeCA9IHJlZ19pZHg7XFxuIFxcdFxcdH1cXG4gXFx0fSBlbHNlIHtcXG4gXFx0XFx0Lyogc3RhcnQgYXQgVk1EcSByZWdpc3RlciBvZmZzZXQgZm9yIFNSLUlPViBlbmFibGVkIHNldHVwcyAqL1xcbiBcXHRcXHRyZWdfaWR4ID0gdm1kcS1cXHUwMDNlb2Zmc2V0O1xcbiBcXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2Mgd3gtXFx1MDAzZW51bV9yeF9xdWV1ZXM7IGkrKylcXG4gXFx0XFx0XFx0LyogSWYgd2UgYXJlIGdyZWF0ZXIgdGhhbiBpbmRpY2VzIG1vdmUgdG8gbmV4dCBwb29sICovXFxuLVxcdFxcdFxcdHd4LVxcdTAwM2VyeF9yaW5nW2ldLVxcdTAwM2VyZWdfaWR4ID0gcmVnX2lkeCArIGk7XFxuK1xcdFxcdFxcdHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQod3gtXFx1MDAzZXJ4X3JpbmdbaV0sIDEpLVxcdTAwM2VyZWdfaWR4ID0gcmVnX2lkeCArIGk7XFxuIFxcbiBcXHRcXHRyZWdfaWR4ID0gdm1kcS1cXHUwMDNlb2Zmc2V0O1xcbiBcXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2Mgd3gtXFx1MDAzZW51bV90eF9xdWV1ZXM7IGkrKylcXG4gXFx0XFx0XFx0LyogSWYgd2UgYXJlIGdyZWF0ZXIgdGhhbiBpbmRpY2VzIG1vdmUgdG8gbmV4dCBwb29sICovXFxuLVxcdFxcdFxcdHd4LVxcdTAwM2V0eF9yaW5nW2ldLVxcdTAwM2VyZWdfaWR4ID0gcmVnX2lkeCArIGk7XFxuK1xcdFxcdFxcdHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQod3gtXFx1MDAzZXR4X3JpbmdbaV0sIDEpLVxcdTAwM2VyZWdfaWR4ID0gcmVnX2lkeCArIGk7XFxuIFxcdH1cXG4gXFxuIFxcdHJldHVybiB0cnVlO1xcbkBAIC0yMDk4LDEwICsyMTAzLDEwIEBAIHN0YXRpYyB2b2lkIHd4X2NhY2hlX3JpbmdfcnNzKHN0cnVjdCB3eCAqd3gpXFxuIFxcdFxcdHJldHVybjtcXG4gXFxuIFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyB3eC1cXHUwMDNlbnVtX3J4X3F1ZXVlczsgaSsrKVxcbi1cXHRcXHR3eC1cXHUwMDNlcnhfcmluZ1tpXS1cXHUwMDNlcmVnX2lkeCA9IGk7XFxuK1xcdFxcdHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQod3gtXFx1MDAzZXJ4X3JpbmdbaV0sIDEpLVxcdTAwM2VyZWdfaWR4ID0gaTtcXG4gXFxuIFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyB3eC1cXHUwMDNlbnVtX3R4X3F1ZXVlczsgaSsrKVxcbi1cXHRcXHR3eC1cXHUwMDNldHhfcmluZ1tpXS1cXHUwMDNlcmVnX2lkeCA9IGk7XFxuK1xcdFxcdHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQod3gtXFx1MDAzZXR4X3JpbmdbaV0sIDEpLVxcdTAwM2VyZWdfaWR4ID0gaTtcXG4gfVxcbiBcXG4gc3RhdGljIHZvaWQgd3hfYWRkX3Jpbmcoc3RydWN0IHd4X3JpbmcgKnJpbmcsIHN0cnVjdCB3eF9yaW5nX2NvbnRhaW5lciAqaGVhZClcXG5AQCAtMjE5MSw3ICsyMTk2LDcgQEAgc3RhdGljIGludCB3eF9hbGxvY19xX3ZlY3RvcihzdHJ1Y3Qgd3ggKnd4LFxcbiBcXHRcXHRyaW5nLVxcdTAwM2VxdWV1ZV9pbmRleCA9IHR4cl9pZHg7XFxuIFxcbiBcXHRcXHQvKiBhc3NpZ24gcmluZyB0byB3eCAqL1xcbi1cXHRcXHR3eC1cXHUwMDNldHhfcmluZ1t0eHJfaWR4XSA9IHJpbmc7XFxuK1xcdFxcdHJjdV9hc3NpZ25fcG9pbnRlcih3eC1cXHUwMDNldHhfcmluZ1t0eHJfaWR4XSwgcmluZyk7XFxuIFxcbiBcXHRcXHQvKiB1cGRhdGUgY291bnQgYW5kIGluZGV4ICovXFxuIFxcdFxcdHR4cl9jb3VudC0tO1xcbkBAIC0yMjE3LDcgKzIyMjIsNyBAQCBzdGF0aWMgaW50IHd4X2FsbG9jX3FfdmVjdG9yKHN0cnVjdCB3eCAqd3gsXFxuIFxcdFxcdHJpbmctXFx1MDAzZXF1ZXVlX2luZGV4ID0gcnhyX2lkeDtcXG4gXFxuIFxcdFxcdC8qIGFzc2lnbiByaW5nIHRvIHd4ICovXFxuLVxcdFxcdHd4LVxcdTAwM2VyeF9yaW5nW3J4cl9pZHhdID0gcmluZztcXG4rXFx0XFx0cmN1X2Fzc2lnbl9wb2ludGVyKHd4LVxcdTAwM2VyeF9yaW5nW3J4cl9pZHhdLCByaW5nKTtcXG4gXFxuIFxcdFxcdC8qIHVwZGF0ZSBjb3VudCBhbmQgaW5kZXggKi9cXG4gXFx0XFx0cnhyX2NvdW50LS07XFxuQEAgLTIyNDUsMTAgKzIyNTAsMTAgQEAgc3RhdGljIHZvaWQgd3hfZnJlZV9xX3ZlY3RvcihzdHJ1Y3Qgd3ggKnd4LCBpbnQgdl9pZHgpXFxuIFxcdHN0cnVjdCB3eF9yaW5nICpyaW5nO1xcbiBcXG4gXFx0d3hfZm9yX2VhY2hfcmluZyhyaW5nLCBxX3ZlY3Rvci1cXHUwMDNldHgpXFxuLVxcdFxcdHd4LVxcdTAwM2V0eF9yaW5nW3JpbmctXFx1MDAzZXF1ZXVlX2luZGV4XSA9IE5VTEw7XFxuK1xcdFxcdHJjdV9hc3NpZ25fcG9pbnRlcih3eC1cXHUwMDNldHhfcmluZ1tyaW5nLVxcdTAwM2VxdWV1ZV9pbmRleF0sIE5VTEwpO1xcbiBcXG4gXFx0d3hfZm9yX2VhY2hfcmluZyhyaW5nLCBxX3ZlY3Rvci1cXHUwMDNlcngpXFxuLVxcdFxcdHd4LVxcdTAwM2VyeF9yaW5nW3JpbmctXFx1MDAzZXF1ZXVlX2luZGV4XSA9IE5VTEw7XFxuK1xcdFxcdHJjdV9hc3NpZ25fcG9pbnRlcih3eC1cXHUwMDNlcnhfcmluZ1tyaW5nLVxcdTAwM2VxdWV1ZV9pbmRleF0sIE5VTEwpO1xcbiBcXG4gXFx0d3gtXFx1MDAzZXFfdmVjdG9yW3ZfaWR4XSA9IE5VTEw7XFxuIFxcdG5ldGlmX25hcGlfZGVsKFxcdTAwMjZxX3ZlY3Rvci1cXHUwMDNlbmFwaSk7XFxuQEAgLTI2NTksNyArMjY2NCw3IEBAIHZvaWQgd3hfY2xlYW5fYWxsX3J4X3JpbmdzKHN0cnVjdCB3eCAqd3gpXFxuIFxcdGludCBpO1xcbiBcXG4gXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIHd4LVxcdTAwM2VudW1fcnhfcXVldWVzOyBpKyspXFxuLVxcdFxcdHd4X2NsZWFuX3J4X3Jpbmcod3gtXFx1MDAzZXJ4X3JpbmdbaV0pO1xcbitcXHRcXHR3eF9jbGVhbl9yeF9yaW5nKHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQod3gtXFx1MDAzZXJ4X3JpbmdbaV0sIDEpKTtcXG4gfVxcbiBFWFBPUlRfU1lNQk9MKHd4X2NsZWFuX2FsbF9yeF9yaW5ncyk7XFxuIFxcbkBAIC0yNzAxLDcgKzI3MDYsNyBAQCBzdGF0aWMgdm9pZCB3eF9mcmVlX2FsbF9yeF9yZXNvdXJjZXMoc3RydWN0IHd4ICp3eClcXG4gXFx0aW50IGk7XFxuIFxcbiBcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2Mgd3gtXFx1MDAzZW51bV9yeF9xdWV1ZXM7IGkrKylcXG4tXFx0XFx0d3hfZnJlZV9yeF9yZXNvdXJjZXMod3gtXFx1MDAzZXJ4X3JpbmdbaV0pO1xcbitcXHRcXHR3eF9mcmVlX3J4X3Jlc291cmNlcyhyY3VfZGVyZWZlcmVuY2VfcHJvdGVjdGVkKHd4LVxcdTAwM2VyeF9yaW5nW2ldLCAxKSk7XFxuIH1cXG4gXFxuIC8qKlxcbkBAIC0yNzc1LDcgKzI3ODAsNyBAQCB2b2lkIHd4X2NsZWFuX2FsbF90eF9yaW5ncyhzdHJ1Y3Qgd3ggKnd4KVxcbiBcXHRpbnQgaTtcXG4gXFxuIFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyB3eC1cXHUwMDNlbnVtX3R4X3F1ZXVlczsgaSsrKVxcbi1cXHRcXHR3eF9jbGVhbl90eF9yaW5nKHd4LVxcdTAwM2V0eF9yaW5nW2ldKTtcXG4rXFx0XFx0d3hfY2xlYW5fdHhfcmluZyhyY3VfZGVyZWZlcmVuY2VfcHJvdGVjdGVkKHd4LVxcdTAwM2V0eF9yaW5nW2ldLCAxKSk7XFxuIH1cXG4gRVhQT1JUX1NZTUJPTCh3eF9jbGVhbl9hbGxfdHhfcmluZ3MpO1xcbiBcXG5AQCAtMjgyMyw3ICsyODI4LDcgQEAgc3RhdGljIHZvaWQgd3hfZnJlZV9hbGxfdHhfcmVzb3VyY2VzKHN0cnVjdCB3eCAqd3gpXFxuIFxcdGludCBpO1xcbiBcXG4gXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIHd4LVxcdTAwM2VudW1fdHhfcXVldWVzOyBpKyspXFxuLVxcdFxcdHd4X2ZyZWVfdHhfcmVzb3VyY2VzKHd4LVxcdTAwM2V0eF9yaW5nW2ldKTtcXG4rXFx0XFx0d3hfZnJlZV90eF9yZXNvdXJjZXMocmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZCh3eC1cXHUwMDNldHhfcmluZ1tpXSwgMSkpO1xcbiB9XFxuIFxcbiB2b2lkIHd4X2ZyZWVfcmVzb3VyY2VzKHN0cnVjdCB3eCAqd3gpXFxuQEAgLTI5MzMsNyArMjkzOCw3IEBAIHN0YXRpYyBpbnQgd3hfc2V0dXBfYWxsX3J4X3Jlc291cmNlcyhzdHJ1Y3Qgd3ggKnd4KVxcbiBcXHRpbnQgaSwgZXJyID0gMDtcXG4gXFxuIFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyB3eC1cXHUwMDNlbnVtX3J4X3F1ZXVlczsgaSsrKSB7XFxuLVxcdFxcdGVyciA9IHd4X3NldHVwX3J4X3Jlc291cmNlcyh3eC1cXHUwMDNlcnhfcmluZ1tpXSk7XFxuK1xcdFxcdGVyciA9IHd4X3NldHVwX3J4X3Jlc291cmNlcyhyY3VfZGVyZWZlcmVuY2VfcHJvdGVjdGVkKHd4LVxcdTAwM2VyeF9yaW5nW2ldLCAxKSk7XFxuIFxcdFxcdGlmICghZXJyKVxcbiBcXHRcXHRcXHRjb250aW51ZTtcXG4gXFxuQEAgLTI5NDUsNyArMjk1MCw3IEBAIHN0YXRpYyBpbnQgd3hfc2V0dXBfYWxsX3J4X3Jlc291cmNlcyhzdHJ1Y3Qgd3ggKnd4KVxcbiBlcnJfc2V0dXBfcng6XFxuIFxcdC8qIHJld2luZCB0aGUgaW5kZXggZnJlZWluZyB0aGUgcmluZ3MgYXMgd2UgZ28gKi9cXG4gXFx0d2hpbGUgKGktLSlcXG4tXFx0XFx0d3hfZnJlZV9yeF9yZXNvdXJjZXMod3gtXFx1MDAzZXJ4X3JpbmdbaV0pO1xcbitcXHRcXHR3eF9mcmVlX3J4X3Jlc291cmNlcyhyY3VfZGVyZWZlcmVuY2VfcHJvdGVjdGVkKHd4LVxcdTAwM2VyeF9yaW5nW2ldLCAxKSk7XFxuIFxcdHJldHVybiBlcnI7XFxuIH1cXG4gXFxuQEAgLTMwMzYsNyArMzA0MSw3IEBAIHN0YXRpYyBpbnQgd3hfc2V0dXBfYWxsX3R4X3Jlc291cmNlcyhzdHJ1Y3Qgd3ggKnd4KVxcbiBcXHRpbnQgaSwgZXJyID0gMDtcXG4gXFxuIFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyB3eC1cXHUwMDNlbnVtX3R4X3F1ZXVlczsgaSsrKSB7XFxuLVxcdFxcdGVyciA9IHd4X3NldHVwX3R4X3Jlc291cmNlcyh3eC1cXHUwMDNldHhfcmluZ1tpXSk7XFxuK1xcdFxcdGVyciA9IHd4X3NldHVwX3R4X3Jlc291cmNlcyhyY3VfZGVyZWZlcmVuY2VfcHJvdGVjdGVkKHd4LVxcdTAwM2V0eF9yaW5nW2ldLCAxKSk7XFxuIFxcdFxcdGlmICghZXJyKVxcbiBcXHRcXHRcXHRjb250aW51ZTtcXG4gXFxuQEAgLTMwNDgsNyArMzA1Myw3IEBAIHN0YXRpYyBpbnQgd3hfc2V0dXBfYWxsX3R4X3Jlc291cmNlcyhzdHJ1Y3Qgd3ggKnd4KVxcbiBlcnJfc2V0dXBfdHg6XFxuIFxcdC8qIHJld2luZCB0aGUgaW5kZXggZnJlZWluZyB0aGUgcmluZ3MgYXMgd2UgZ28gKi9cXG4gXFx0d2hpbGUgKGktLSlcXG4tXFx0XFx0d3hfZnJlZV90eF9yZXNvdXJjZXMod3gtXFx1MDAzZXR4X3JpbmdbaV0pO1xcbitcXHRcXHR3eF9mcmVlX3R4X3Jlc291cmNlcyhyY3VfZGVyZWZlcmVuY2VfcHJvdGVjdGVkKHd4LVxcdTAwM2V0eF9yaW5nW2ldLCAxKSk7XFxuIFxcdHJldHVybiBlcnI7XFxuIH1cXG4gXFxuQEAgLTMwOTcsNyArMzEwMiw3IEBAIHZvaWQgd3hfZ2V0X3N0YXRzNjQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcXG4gXFxuIFxcdHJjdV9yZWFkX2xvY2soKTtcXG4gXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIHd4LVxcdTAwM2VudW1fcnhfcXVldWVzOyBpKyspIHtcXG4tXFx0XFx0c3RydWN0IHd4X3JpbmcgKnJpbmcgPSBSRUFEX09OQ0Uod3gtXFx1MDAzZXJ4X3JpbmdbaV0pO1xcbitcXHRcXHRzdHJ1Y3Qgd3hfcmluZyAqcmluZyA9IHJjdV9kZXJlZmVyZW5jZSh3eC1cXHUwMDNlcnhfcmluZ1tpXSk7XFxuIFxcdFxcdHU2NCBieXRlcywgcGFja2V0cztcXG4gXFx0XFx0dW5zaWduZWQgaW50IHN0YXJ0O1xcbiBcXG5AQCAtMzExMyw3ICszMTE4LDcgQEAgdm9pZCB3eF9nZXRfc3RhdHM2NChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxcbiBcXHR9XFxuIFxcbiBcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2Mgd3gtXFx1MDAzZW51bV90eF9xdWV1ZXM7IGkrKykge1xcbi1cXHRcXHRzdHJ1Y3Qgd3hfcmluZyAqcmluZyA9IFJFQURfT05DRSh3eC1cXHUwMDNldHhfcmluZ1tpXSk7XFxuK1xcdFxcdHN0cnVjdCB3eF9yaW5nICpyaW5nID0gcmN1X2RlcmVmZXJlbmNlKHd4LVxcdTAwM2V0eF9yaW5nW2ldKTtcXG4gXFx0XFx0dTY0IGJ5dGVzLCBwYWNrZXRzO1xcbiBcXHRcXHR1bnNpZ25lZCBpbnQgc3RhcnQ7XFxuIFxcbkBAIC0zMzI0LDcgKzMzMjksNyBAQCBpbnQgd3hfc2V0X3Jpbmcoc3RydWN0IHd4ICp3eCwgdTMyIG5ld190eF9jb3VudCxcXG4gXFx0ICovXFxuIFxcdGlmIChuZXdfdHhfY291bnQgIT0gd3gtXFx1MDAzZXR4X3JpbmdfY291bnQpIHtcXG4gXFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIHd4LVxcdTAwM2VudW1fdHhfcXVldWVzOyBpKyspIHtcXG4tXFx0XFx0XFx0bWVtY3B5KFxcdTAwMjZ0ZW1wX3JpbmdbaV0sIHd4LVxcdTAwM2V0eF9yaW5nW2ldLFxcbitcXHRcXHRcXHRtZW1jcHkoXFx1MDAyNnRlbXBfcmluZ1tpXSwgcmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZCh3eC1cXHUwMDNldHhfcmluZ1tpXSwgMSksXFxuIFxcdFxcdFxcdCAgICAgICBzaXplb2Yoc3RydWN0IHd4X3JpbmcpKTtcXG4gXFxuIFxcdFxcdFxcdHRlbXBfcmluZ1tpXS5jb3VudCA9IG5ld190eF9jb3VudDtcXG5AQCAtMzM0MCw5ICszMzQ1LDExIEBAIGludCB3eF9zZXRfcmluZyhzdHJ1Y3Qgd3ggKnd4LCB1MzIgbmV3X3R4X2NvdW50LFxcbiBcXHRcXHR9XFxuIFxcbiBcXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2Mgd3gtXFx1MDAzZW51bV90eF9xdWV1ZXM7IGkrKykge1xcbi1cXHRcXHRcXHR3eF9mcmVlX3R4X3Jlc291cmNlcyh3eC1cXHUwMDNldHhfcmluZ1tpXSk7XFxuK1xcdFxcdFxcdHN0cnVjdCB3eF9yaW5nICp0eF9yaW5nID0gcmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZCh3eC1cXHUwMDNldHhfcmluZ1tpXSwgMSk7XFxuK1xcbitcXHRcXHRcXHR3eF9mcmVlX3R4X3Jlc291cmNlcyh0eF9yaW5nKTtcXG4gXFxuLVxcdFxcdFxcdG1lbWNweSh3eC1cXHUwMDNldHhfcmluZ1tpXSwgXFx1MDAyNnRlbXBfcmluZ1tpXSxcXG4rXFx0XFx0XFx0bWVtY3B5KHR4X3JpbmcsIFxcdTAwMjZ0ZW1wX3JpbmdbaV0sXFxuIFxcdFxcdFxcdCAgICAgICBzaXplb2Yoc3RydWN0IHd4X3JpbmcpKTtcXG4gXFx0XFx0fVxcbiBcXG5AQCAtMzM1Miw3ICszMzU5LDcgQEAgaW50IHd4X3NldF9yaW5nKHN0cnVjdCB3eCAqd3gsIHUzMiBuZXdfdHhfY291bnQsXFxuIFxcdC8qIFJlcGVhdCB0aGUgcHJvY2VzcyBmb3IgdGhlIFJ4IHJpbmdzIGlmIG5lZWRlZCAqL1xcbiBcXHRpZiAobmV3X3J4X2NvdW50ICE9IHd4LVxcdTAwM2VyeF9yaW5nX2NvdW50KSB7XFxuIFxcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyB3eC1cXHUwMDNlbnVtX3J4X3F1ZXVlczsgaSsrKSB7XFxuLVxcdFxcdFxcdG1lbWNweShcXHUwMDI2dGVtcF9yaW5nW2ldLCB3eC1cXHUwMDNlcnhfcmluZ1tpXSxcXG4rXFx0XFx0XFx0bWVtY3B5KFxcdTAwMjZ0ZW1wX3JpbmdbaV0sIHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQod3gtXFx1MDAzZXJ4X3JpbmdbaV0sIDEpLFxcbiBcXHRcXHRcXHQgICAgICAgc2l6ZW9mKHN0cnVjdCB3eF9yaW5nKSk7XFxuIFxcbiBcXHRcXHRcXHR0ZW1wX3JpbmdbaV0uY291bnQgPSBuZXdfcnhfY291bnQ7XFxuQEAgLTMzNjgsOCArMzM3NSwxMCBAQCBpbnQgd3hfc2V0X3Jpbmcoc3RydWN0IHd4ICp3eCwgdTMyIG5ld190eF9jb3VudCxcXG4gXFx0XFx0fVxcbiBcXG4gXFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIHd4LVxcdTAwM2VudW1fcnhfcXVldWVzOyBpKyspIHtcXG4tXFx0XFx0XFx0d3hfZnJlZV9yeF9yZXNvdXJjZXMod3gtXFx1MDAzZXJ4X3JpbmdbaV0pO1xcbi1cXHRcXHRcXHRtZW1jcHkod3gtXFx1MDAzZXJ4X3JpbmdbaV0sIFxcdTAwMjZ0ZW1wX3JpbmdbaV0sXFxuK1xcdFxcdFxcdHN0cnVjdCB3eF9yaW5nICpyeF9yaW5nID0gcmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZCh3eC1cXHUwMDNlcnhfcmluZ1tpXSwgMSk7XFxuK1xcbitcXHRcXHRcXHR3eF9mcmVlX3J4X3Jlc291cmNlcyhyeF9yaW5nKTtcXG4rXFx0XFx0XFx0bWVtY3B5KHJ4X3JpbmcsIFxcdTAwMjZ0ZW1wX3JpbmdbaV0sXFxuIFxcdFxcdFxcdCAgICAgICBzaXplb2Yoc3RydWN0IHd4X3JpbmcpKTtcXG4gXFx0XFx0fVxcbiBcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9wdHAuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfcHRwLmNcXG5pbmRleCA0NzA4ZTdmMzk1OGY3Li42OGRjNjI5NzdhYWIyIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfcHRwLmNcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X3B0cC5jXFxuQEAgLTI3NCwxMSArMjc0LDE1IEBAIHN0YXRpYyB2b2lkIHd4X3B0cF9yeF9oYW5nKHN0cnVjdCB3eCAqd3gpXFxuIFxcbiBcXHQvKiBkZXRlcm1pbmUgdGhlIG1vc3QgcmVjZW50IHdhdGNoZG9nIG9yIHJ4X3RpbWVzdGFtcCBldmVudCAqL1xcbiBcXHRyeF9ldmVudCA9IHd4LVxcdTAwM2VsYXN0X3J4X3B0cF9jaGVjaztcXG4rXFx0cmN1X3JlYWRfbG9jaygpO1xcbiBcXHRmb3IgKG4gPSAwOyBuIFxcdTAwM2Mgd3gtXFx1MDAzZW51bV9yeF9xdWV1ZXM7IG4rKykge1xcbi1cXHRcXHRyeF9yaW5nID0gd3gtXFx1MDAzZXJ4X3Jpbmdbbl07XFxuK1xcdFxcdHJ4X3JpbmcgPSByY3VfZGVyZWZlcmVuY2Uod3gtXFx1MDAzZXJ4X3Jpbmdbbl0pO1xcbitcXHRcXHRpZiAoIXJ4X3JpbmcpXFxuK1xcdFxcdFxcdGNvbnRpbnVlO1xcbiBcXHRcXHRpZiAodGltZV9hZnRlcihyeF9yaW5nLVxcdTAwM2VsYXN0X3J4X3RpbWVzdGFtcCwgcnhfZXZlbnQpKVxcbiBcXHRcXHRcXHRyeF9ldmVudCA9IHJ4X3JpbmctXFx1MDAzZWxhc3RfcnhfdGltZXN0YW1wO1xcbiBcXHR9XFxuK1xcdHJjdV9yZWFkX3VubG9jaygpO1xcbiBcXG4gXFx0Lyogb25seSBuZWVkIHRvIHJlYWQgdGhlIGhpZ2ggUlhTVE1QIHJlZ2lzdGVyIHRvIGNsZWFyIHRoZSBsb2NrICovXFxuIFxcdGlmICh0aW1lX2lzX2JlZm9yZV9qaWZmaWVzKHJ4X2V2ZW50ICsgNSAqIEhaKSkge1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X3R5cGUuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfdHlwZS5oXFxuaW5kZXggOTQ1NGU5MDI1OGQ4ZS4uOTk1MmQwMjM0MjQwMSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X3R5cGUuaFxcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfdHlwZS5oXFxuQEAgLTEzNTksOCArMTM1OSw4IEBAIHN0cnVjdCB3eCB7XFxuIFxcdHUzMiB0eF9yaW5nX2NvdW50O1xcbiBcXHR1MzIgcnhfcmluZ19jb3VudDtcXG4gXFxuLVxcdHN0cnVjdCB3eF9yaW5nICp0eF9yaW5nWzY0XSBfX19fY2FjaGVsaW5lX2FsaWduZWRfaW5fc21wO1xcbi1cXHRzdHJ1Y3Qgd3hfcmluZyAqcnhfcmluZ1s2NF07XFxuK1xcdHN0cnVjdCB3eF9yaW5nIF9fcmN1ICp0eF9yaW5nWzY0XSBfX19fY2FjaGVsaW5lX2FsaWduZWRfaW5fc21wO1xcbitcXHRzdHJ1Y3Qgd3hfcmluZyBfX3JjdSAqcnhfcmluZ1s2NF07XFxuIFxcdHN0cnVjdCB3eF9xX3ZlY3RvciAqcV92ZWN0b3JbNjRdO1xcbiBcXHRpbnQgbnVtX3J4X3Bvb2xzO1xcbiBcXHRpbnQgbnVtX3J4X3F1ZXVlc19wZXJfcG9vbDtcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF92Zl9jb21tb24uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfdmZfY29tbW9uLmNcXG5pbmRleCAyNmRlNzhlOWE2OWVmLi5jODMwODI0YzQ4NjllIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfdmZfY29tbW9uLmNcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X3ZmX2NvbW1vbi5jXFxuQEAgLTIwNSw3ICsyMDUsNyBAQCBzdGF0aWMgdm9pZCB3eF9jb25maWd1cmVfcnhfdmYoc3RydWN0IHd4ICp3eClcXG4gXFx0ICogdGhlIEJhc2UgYW5kIExlbmd0aCBvZiB0aGUgUnggRGVzY3JpcHRvciBSaW5nXFxuIFxcdCAqL1xcbiBcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2Mgd3gtXFx1MDAzZW51bV9yeF9xdWV1ZXM7IGkrKykge1xcbi1cXHRcXHRzdHJ1Y3Qgd3hfcmluZyAqcnhfcmluZyA9IHd4LVxcdTAwM2VyeF9yaW5nW2ldO1xcbitcXHRcXHRzdHJ1Y3Qgd3hfcmluZyAqcnhfcmluZyA9IHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQod3gtXFx1MDAzZXJ4X3JpbmdbaV0sIDEpO1xcbiAjaWZkZWYgSEFWRV9TV0lPVExCX1NLSVBfQ1BVX1NZTkNcXG4gXFx0XFx0d3hfc2V0X3J4X2J1ZmZlcl9sZW5fdmYod3gsIHJ4X3JpbmcpO1xcbiAjZW5kaWZcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF92Zl9saWIuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfdmZfbGliLmNcXG5pbmRleCA3MzI1YjQ3NWVlMTBjLi4wZTA5ZTY2YzZkZTZkIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfdmZfbGliLmNcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X3ZmX2xpYi5jXFxuQEAgLTE3NSw4ICsxNzUsMTEgQEAgdm9pZCB3eF9jb25maWd1cmVfdHhfdmYoc3RydWN0IHd4ICp3eClcXG4gXFx0dTMyIGk7XFxuIFxcbiBcXHQvKiBTZXR1cCB0aGUgSFcgVHggSGVhZCBhbmQgVGFpbCBkZXNjcmlwdG9yIHBvaW50ZXJzICovXFxuLVxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyB3eC1cXHUwMDNlbnVtX3R4X3F1ZXVlczsgaSsrKVxcbi1cXHRcXHR3eF9jb25maWd1cmVfdHhfcmluZ192Zih3eCwgd3gtXFx1MDAzZXR4X3JpbmdbaV0pO1xcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2Mgd3gtXFx1MDAzZW51bV90eF9xdWV1ZXM7IGkrKykge1xcbitcXHRcXHRzdHJ1Y3Qgd3hfcmluZyAqdHhfcmluZyA9IHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQod3gtXFx1MDAzZXR4X3JpbmdbaV0sIDEpO1xcbitcXG4rXFx0XFx0d3hfY29uZmlndXJlX3R4X3JpbmdfdmYod3gsIHR4X3JpbmcpO1xcbitcXHR9XFxuIH1cXG4gXFxuIHN0YXRpYyB2b2lkIHd4X2NvbmZpZ3VyZV9zcnJjdGxfdmYoc3RydWN0IHd4ICp3eCwgc3RydWN0IHd4X3JpbmcgKnJpbmcsXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX2V0aHRvb2wuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX2V0aHRvb2wuY1xcbmluZGV4IDE5NjBmNzE1NDE1MWQuLjllOTA3MDJhNTE0NmEgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfZXRodG9vbC5jXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfZXRodG9vbC5jXFxuQEAgLTM3LDkgKzM3LDkgQEAgc3RhdGljIGludCBuZ2JlX3NldF9yaW5ncGFyYW0oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcXG4gXFxuIFxcdGlmICghbmV0aWZfcnVubmluZyh3eC1cXHUwMDNlbmV0ZGV2KSkge1xcbiBcXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2Mgd3gtXFx1MDAzZW51bV90eF9xdWV1ZXM7IGkrKylcXG4tXFx0XFx0XFx0d3gtXFx1MDAzZXR4X3JpbmdbaV0tXFx1MDAzZWNvdW50ID0gbmV3X3R4X2NvdW50O1xcbitcXHRcXHRcXHRyY3VfZGVyZWZlcmVuY2VfcHJvdGVjdGVkKHd4LVxcdTAwM2V0eF9yaW5nW2ldLCAxKS1cXHUwMDNlY291bnQgPSBuZXdfdHhfY291bnQ7XFxuIFxcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyB3eC1cXHUwMDNlbnVtX3J4X3F1ZXVlczsgaSsrKVxcbi1cXHRcXHRcXHR3eC1cXHUwMDNlcnhfcmluZ1tpXS1cXHUwMDNlY291bnQgPSBuZXdfcnhfY291bnQ7XFxuK1xcdFxcdFxcdHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQod3gtXFx1MDAzZXJ4X3JpbmdbaV0sIDEpLVxcdTAwM2Vjb3VudCA9IG5ld19yeF9jb3VudDtcXG4gXFx0XFx0d3gtXFx1MDAzZXR4X3JpbmdfY291bnQgPSBuZXdfdHhfY291bnQ7XFxuIFxcdFxcdHd4LVxcdTAwM2VyeF9yaW5nX2NvdW50ID0gbmV3X3J4X2NvdW50O1xcbiBcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfbWFpbi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfbWFpbi5jXFxuaW5kZXggODU1ZGM5NjNjNjEwYy4uZTQ1ZDdkZmRjOWY5MCAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9tYWluLmNcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9tYWluLmNcXG5AQCAtNDA2LDcgKzQwNiw3IEBAIHN0YXRpYyB2b2lkIG5nYmVfZGlzYWJsZV9kZXZpY2Uoc3RydWN0IHd4ICp3eClcXG4gXFx0LyogZGlzYWJsZSBhbGwgZW5hYmxlZCByeCBxdWV1ZXMgKi9cXG4gXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIHd4LVxcdTAwM2VudW1fcnhfcXVldWVzOyBpKyspXFxuIFxcdFxcdC8qIHRoaXMgY2FsbCBhbHNvIGZsdXNoZXMgdGhlIHByZXZpb3VzIHdyaXRlICovXFxuLVxcdFxcdHd4X2Rpc2FibGVfcnhfcXVldWUod3gsIHd4LVxcdTAwM2VyeF9yaW5nW2ldKTtcXG4rXFx0XFx0d3hfZGlzYWJsZV9yeF9xdWV1ZSh3eCwgcmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZCh3eC1cXHUwMDNlcnhfcmluZ1tpXSwgMSkpO1xcbiBcXHQvKiBkaXNhYmxlIHJlY2VpdmVzICovXFxuIFxcdHd4X2Rpc2FibGVfcngod3gpO1xcbiBcXHR3eF9uYXBpX2Rpc2FibGVfYWxsKHd4KTtcXG5AQCAtNDIyLDcgKzQyMiw3IEBAIHN0YXRpYyB2b2lkIG5nYmVfZGlzYWJsZV9kZXZpY2Uoc3RydWN0IHd4ICp3eClcXG4gXFx0d3hfaXJxX2Rpc2FibGUod3gpO1xcbiBcXHQvKiBkaXNhYmxlIHRyYW5zbWl0cyBpbiB0aGUgaGFyZHdhcmUgbm93IHRoYXQgaW50ZXJydXB0cyBhcmUgb2ZmICovXFxuIFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyB3eC1cXHUwMDNlbnVtX3R4X3F1ZXVlczsgaSsrKSB7XFxuLVxcdFxcdHU4IHJlZ19pZHggPSB3eC1cXHUwMDNldHhfcmluZ1tpXS1cXHUwMDNlcmVnX2lkeDtcXG4rXFx0XFx0dTggcmVnX2lkeCA9IHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQod3gtXFx1MDAzZXR4X3JpbmdbaV0sIDEpLVxcdTAwM2VyZWdfaWR4O1xcbiBcXG4gXFx0XFx0d3IzMih3eCwgV1hfUFhfVFJfQ0ZHKHJlZ19pZHgpLCBXWF9QWF9UUl9DRkdfU1dGTFNIKTtcXG4gXFx0fVxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX2V0aHRvb2wuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfZXRodG9vbC5jXFxuaW5kZXggM2UzMmFjYTcyODA2NS4uZmNmYWY2ZjJmNTQ0YSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX2V0aHRvb2wuY1xcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfZXRodG9vbC5jXFxuQEAgLTYxLDkgKzYxLDkgQEAgc3RhdGljIGludCB0eGdiZV9zZXRfcmluZ3BhcmFtKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXFxuIFxcbiBcXHRpZiAoIW5ldGlmX3J1bm5pbmcod3gtXFx1MDAzZW5ldGRldikpIHtcXG4gXFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIHd4LVxcdTAwM2VudW1fdHhfcXVldWVzOyBpKyspXFxuLVxcdFxcdFxcdHd4LVxcdTAwM2V0eF9yaW5nW2ldLVxcdTAwM2Vjb3VudCA9IG5ld190eF9jb3VudDtcXG4rXFx0XFx0XFx0cmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZCh3eC1cXHUwMDNldHhfcmluZ1tpXSwgMSktXFx1MDAzZWNvdW50ID0gbmV3X3R4X2NvdW50O1xcbiBcXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2Mgd3gtXFx1MDAzZW51bV9yeF9xdWV1ZXM7IGkrKylcXG4tXFx0XFx0XFx0d3gtXFx1MDAzZXJ4X3JpbmdbaV0tXFx1MDAzZWNvdW50ID0gbmV3X3J4X2NvdW50O1xcbitcXHRcXHRcXHRyY3VfZGVyZWZlcmVuY2VfcHJvdGVjdGVkKHd4LVxcdTAwM2VyeF9yaW5nW2ldLCAxKS1cXHUwMDNlY291bnQgPSBuZXdfcnhfY291bnQ7XFxuIFxcdFxcdHd4LVxcdTAwM2V0eF9yaW5nX2NvdW50ID0gbmV3X3R4X2NvdW50O1xcbiBcXHRcXHR3eC1cXHUwMDNlcnhfcmluZ19jb3VudCA9IG5ld19yeF9jb3VudDtcXG4gXFxuQEAgLTM2Niw3ICszNjYsNyBAQCBzdGF0aWMgaW50IHR4Z2JlX2FkZF9ldGh0b29sX2ZkaXJfZW50cnkoc3RydWN0IHR4Z2JlICp0eGdiZSxcXG4gXFxuIFxcdFxcdC8qIE1hcCB0aGUgcmluZyBvbnRvIHRoZSBhYnNvbHV0ZSBxdWV1ZSBpbmRleCAqL1xcbiBcXHRcXHRpZiAoIXZmKVxcbi1cXHRcXHRcXHRxdWV1ZSA9IHd4LVxcdTAwM2VyeF9yaW5nW3JpbmddLVxcdTAwM2VyZWdfaWR4O1xcbitcXHRcXHRcXHRxdWV1ZSA9IHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQod3gtXFx1MDAzZXJ4X3JpbmdbcmluZ10sIDEpLVxcdTAwM2VyZWdfaWR4O1xcbiBcXHRcXHRlbHNlXFxuIFxcdFxcdFxcdHF1ZXVlID0gKCh2ZiAtIDEpICogd3gtXFx1MDAzZW51bV9yeF9xdWV1ZXNfcGVyX3Bvb2wpICsgcmluZztcXG4gXFx0fVxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX2ZkaXIuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfZmRpci5jXFxuaW5kZXggYTg0MDEwODI4NTUxNy4uNjBjOGVhNDc3ODI3ZCAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX2ZkaXIuY1xcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfZmRpci5jXFxuQEAgLTU5OSw3ICs1OTksNyBAQCBzdGF0aWMgdm9pZCB0eGdiZV9mZGlyX2ZpbHRlcl9yZXN0b3JlKHN0cnVjdCB3eCAqd3gpXFxuIFxcdFxcdFxcdH1cXG4gXFxuIFxcdFxcdFxcdC8qIE1hcCB0aGUgcmluZyBvbnRvIHRoZSBhYnNvbHV0ZSBxdWV1ZSBpbmRleCAqL1xcbi1cXHRcXHRcXHRxdWV1ZSA9IHd4LVxcdTAwM2VyeF9yaW5nW3JpbmddLVxcdTAwM2VyZWdfaWR4O1xcbitcXHRcXHRcXHRxdWV1ZSA9IHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQod3gtXFx1MDAzZXJ4X3JpbmdbcmluZ10sIDEpLVxcdTAwM2VyZWdfaWR4O1xcbiBcXHRcXHR9XFxuIFxcbiBcXHRcXHRyZXQgPSB0eGdiZV9mZGlyX3dyaXRlX3BlcmZlY3RfZmlsdGVyKHd4LFxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX21haW4uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfbWFpbi5jXFxuaW5kZXggZWI5MWM0ZjI4ZWNkNC4uNTM2MTM2MGY3YzZlZSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX21haW4uY1xcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfbWFpbi5jXFxuQEAgLTIzOSw3ICsyMzksNyBAQCBzdGF0aWMgdm9pZCB0eGdiZV9kaXNhYmxlX2RldmljZShzdHJ1Y3Qgd3ggKnd4KVxcbiBcXHQvKiBkaXNhYmxlIGFsbCBlbmFibGVkIHJ4IHF1ZXVlcyAqL1xcbiBcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2Mgd3gtXFx1MDAzZW51bV9yeF9xdWV1ZXM7IGkrKylcXG4gXFx0XFx0LyogdGhpcyBjYWxsIGFsc28gZmx1c2hlcyB0aGUgcHJldmlvdXMgd3JpdGUgKi9cXG4tXFx0XFx0d3hfZGlzYWJsZV9yeF9xdWV1ZSh3eCwgd3gtXFx1MDAzZXJ4X3JpbmdbaV0pO1xcbitcXHRcXHR3eF9kaXNhYmxlX3J4X3F1ZXVlKHd4LCByY3VfZGVyZWZlcmVuY2VfcHJvdGVjdGVkKHd4LVxcdTAwM2VyeF9yaW5nW2ldLCAxKSk7XFxuIFxcbiBcXHRuZXRpZl90eF9zdG9wX2FsbF9xdWV1ZXMobmV0ZGV2KTtcXG4gXFx0bmV0aWZfdHhfZGlzYWJsZShuZXRkZXYpO1xcbkBAIC0yNzUsNyArMjc1LDcgQEAgc3RhdGljIHZvaWQgdHhnYmVfZGlzYWJsZV9kZXZpY2Uoc3RydWN0IHd4ICp3eClcXG4gXFxuIFxcdC8qIGRpc2FibGUgdHJhbnNtaXRzIGluIHRoZSBoYXJkd2FyZSBub3cgdGhhdCBpbnRlcnJ1cHRzIGFyZSBvZmYgKi9cXG4gXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIHd4LVxcdTAwM2VudW1fdHhfcXVldWVzOyBpKyspIHtcXG4tXFx0XFx0dTggcmVnX2lkeCA9IHd4LVxcdTAwM2V0eF9yaW5nW2ldLVxcdTAwM2VyZWdfaWR4O1xcbitcXHRcXHR1OCByZWdfaWR4ID0gcmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZCh3eC1cXHUwMDNldHhfcmluZ1tpXSwgMSktXFx1MDAzZXJlZ19pZHg7XFxuIFxcbiBcXHRcXHR3cjMyKHd4LCBXWF9QWF9UUl9DRkcocmVnX2lkeCksIFdYX1BYX1RSX0NGR19TV0ZMU0gpO1xcbiBcXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDExOjA1OjQzLjM3MDQyMzAwOVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MTI4Nzg2MDY1NjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIGNoYW5nZXMgYXJlIHN0cmljdGx5IGNvbmZpbmVkIHRvIHRoZSBXYW5neHVuIEV0aGVybmV0IG5ldHdvcmsgZHJpdmVycyAobGlid3gsIG5nYmUsIHR4Z2JlKSB1bmRlciBkcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuLy4gVGhlc2UgZHJpdmVycyByZXF1aXJlIHZlbmRvci1zcGVjaWZpYyBQQ0llIEFTSUMgaGFyZHdhcmUgdGhhdCBpcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIChRRU1VL0dDRSksIG1ha2luZyB0aGUgbW9kaWZpZWQgY29kZSBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgZm9yIHN5emthbGxlciBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzc1xudG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5UaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLFxuYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy5cblxuLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURTpcbiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZFxuICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLlxuICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsXG4gIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy5cblxuLSBETyBOT1QgQkxJTkRMWSBUUlVTVCBcIk5PIEZVTkNUSU9OQUwgQ0hBTkdFXCIgKE5GQ0kpIE9SIFwiUkVGQUNUT1JJTkdcIiBDTEFJTVM6XG4gIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgXCJjbGVhbnVwc1wiLCBcInJlZmFjdG9yaW5nc1wiLCBvciBzdGF0ZVxuICBcIk5vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkXCIuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLlxuICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnRcbiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuXG4gIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuXG5cbi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6XG4gIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKixcbiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuXG4gIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXJcbiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOlxuXG4tIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6XG4gICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLlxuICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKVxuICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy5cbiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50c1xuICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuXG4gICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLlxuLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6XG4gICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczpcbiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmdcbiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy5cbiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4zLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzpcbi0gQ29yZSBTdWJzeXN0ZW1zOlxuICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSxcbiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuXG4tIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczpcbiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuXG4tIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczpcbiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuXG4tIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6XG4gICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6XG5cbi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOlxuICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1c1xuICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdFxuICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS5cbiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzIFwiZm9jdXNlZFwiLFxuICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuXG5cbi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOlxuICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHNcbiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuXG5cbi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOlxuICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrXG4gIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLlxuICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXJcbiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlnc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6XG4tIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4tIENoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuXG4tIFN0cmlwIGFueSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA2NzQ4M2ZmZjg1MjU3ZWRhMDc2YWM2OTA1ZmJkYjA2Mjg0N2JkOGRmXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBTZXAgOSAxMTowNTo0MiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfZXJyLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2Vyci5jXG5pbmRleCBiNTZmYmRjOTU5ZGVjLi44ZWFkYjRkM2FiY2ZmIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9lcnIuY1xuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9lcnIuY1xuQEAgLTIwMSwxMiArMjAxLDE4IEBAIHN0YXRpYyBib29sIHd4X3JpbmdfdHhfcGVuZGluZyhzdHJ1Y3Qgd3ggKnd4KVxuIHtcbiBcdGludCBpO1xuIFxuK1x0cmN1X3JlYWRfbG9jaygpO1xuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2Mgd3gtXHUwMDNlbnVtX3R4X3F1ZXVlczsgaSsrKSB7XG4tXHRcdHN0cnVjdCB3eF9yaW5nICp0eF9yaW5nID0gd3gtXHUwMDNldHhfcmluZ1tpXTtcbitcdFx0c3RydWN0IHd4X3JpbmcgKnR4X3JpbmcgPSByY3VfZGVyZWZlcmVuY2Uod3gtXHUwMDNldHhfcmluZ1tpXSk7XG4gXG4tXHRcdGlmICh0eF9yaW5nLVx1MDAzZW5leHRfdG9fdXNlICE9IHR4X3JpbmctXHUwMDNlbmV4dF90b19jbGVhbilcbitcdFx0aWYgKCF0eF9yaW5nKVxuK1x0XHRcdGNvbnRpbnVlO1xuK1x0XHRpZiAodHhfcmluZy1cdTAwM2VuZXh0X3RvX3VzZSAhPSB0eF9yaW5nLVx1MDAzZW5leHRfdG9fY2xlYW4pIHtcbitcdFx0XHRyY3VfcmVhZF91bmxvY2soKTtcbiBcdFx0XHRyZXR1cm4gdHJ1ZTtcbitcdFx0fVxuIFx0fVxuK1x0cmN1X3JlYWRfdW5sb2NrKCk7XG4gXG4gXHRyZXR1cm4gZmFsc2U7XG4gfVxuQEAgLTI2NCw4ICsyNzAsMTQgQEAgc3RhdGljIHZvaWQgd3hfZGV0ZWN0X3R4X2hhbmcoc3RydWN0IHd4ICp3eClcbiBcbiBcdC8qIEZvcmNlIGRldGVjdGlvbiBvZiBodW5nIGNvbnRyb2xsZXIgKi9cbiBcdGlmIChuZXRpZl9jYXJyaWVyX29rKHd4LVx1MDAzZW5ldGRldikpIHtcbi1cdFx0Zm9yIChpID0gMDsgaSBcdTAwM2Mgd3gtXHUwMDNlbnVtX3R4X3F1ZXVlczsgaSsrKVxuLVx0XHRcdHNldF9iaXQoV1hfVFhfREVURUNUX0hBTkcsIHd4LVx1MDAzZXR4X3JpbmdbaV0tXHUwMDNlc3RhdGUpO1xuK1x0XHRyY3VfcmVhZF9sb2NrKCk7XG4rXHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHd4LVx1MDAzZW51bV90eF9xdWV1ZXM7IGkrKykge1xuK1x0XHRcdHN0cnVjdCB3eF9yaW5nICp0eF9yaW5nID0gcmN1X2RlcmVmZXJlbmNlKHd4LVx1MDAzZXR4X3JpbmdbaV0pO1xuK1xuK1x0XHRcdGlmICh0eF9yaW5nKVxuK1x0XHRcdFx0c2V0X2JpdChXWF9UWF9ERVRFQ1RfSEFORywgdHhfcmluZy1cdTAwM2VzdGF0ZSk7XG4rXHRcdH1cbitcdFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4gXHR9XG4gfVxuIFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfZXRodG9vbC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9ldGh0b29sLmNcbmluZGV4IDk0MGQyZTU5ODc2YzcuLmVhZTU5NTJjMGY1ZmMgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2V0aHRvb2wuY1xuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9ldGh0b29sLmNcbkBAIC0xNTQsOCArMTU0LDkgQEAgdm9pZCB3eF9nZXRfZXRodG9vbF9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxuIFx0XHR9XG4gXHR9XG4gXG4rXHRyY3VfcmVhZF9sb2NrKCk7XG4gXHRmb3IgKGogPSAwOyBqIFx1MDAzYyBuZXRkZXYtXHUwMDNlbnVtX3R4X3F1ZXVlczsgaisrKSB7XG4tXHRcdHJpbmcgPSB3eC1cdTAwM2V0eF9yaW5nW2pdO1xuK1x0XHRyaW5nID0gcmN1X2RlcmVmZXJlbmNlKHd4LVx1MDAzZXR4X3Jpbmdbal0pO1xuIFx0XHRpZiAoIXJpbmcpIHtcbiBcdFx0XHRkYXRhW2krK10gPSAwO1xuIFx0XHRcdGRhdGFbaSsrXSA9IDA7XG5AQCAtMTcwLDcgKzE3MSw3IEBAIHZvaWQgd3hfZ2V0X2V0aHRvb2xfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcbiBcdFx0aSArPSAyO1xuIFx0fVxuIFx0Zm9yIChqID0gMDsgaiBcdTAwM2MgV1hfTlVNX1JYX1FVRVVFUzsgaisrKSB7XG4tXHRcdHJpbmcgPSB3eC1cdTAwM2VyeF9yaW5nW2pdO1xuK1x0XHRyaW5nID0gcmN1X2RlcmVmZXJlbmNlKHd4LVx1MDAzZXJ4X3Jpbmdbal0pO1xuIFx0XHRpZiAoIXJpbmcpIHtcbiBcdFx0XHRkYXRhW2krK10gPSAwO1xuIFx0XHRcdGRhdGFbaSsrXSA9IDA7XG5AQCAtMTg0LDYgKzE4NSw3IEBAIHZvaWQgd3hfZ2V0X2V0aHRvb2xfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcbiBcdFx0fSB3aGlsZSAodTY0X3N0YXRzX2ZldGNoX3JldHJ5KFx1MDAyNnJpbmctXHUwMDNlc3luY3AsIHN0YXJ0KSk7XG4gXHRcdGkgKz0gMjtcbiBcdH1cbitcdHJjdV9yZWFkX3VubG9jaygpO1xuIH1cbiBFWFBPUlRfU1lNQk9MKHd4X2dldF9ldGh0b29sX3N0YXRzKTtcbiBcbkBAIC04MDUsOSArODA3LDkgQEAgc3RhdGljIGludCB3eF9zZXRfcmluZ3BhcmFtX3ZmKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXG4gXG4gXHRpZiAoIW5ldGlmX3J1bm5pbmcod3gtXHUwMDNlbmV0ZGV2KSkge1xuIFx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyB3eC1cdTAwM2VudW1fdHhfcXVldWVzOyBpKyspXG4tXHRcdFx0d3gtXHUwMDNldHhfcmluZ1tpXS1cdTAwM2Vjb3VudCA9IG5ld190eF9jb3VudDtcbitcdFx0XHRyY3VfZGVyZWZlcmVuY2VfcHJvdGVjdGVkKHd4LVx1MDAzZXR4X3JpbmdbaV0sIDEpLVx1MDAzZWNvdW50ID0gbmV3X3R4X2NvdW50O1xuIFx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyB3eC1cdTAwM2VudW1fcnhfcXVldWVzOyBpKyspXG4tXHRcdFx0d3gtXHUwMDNlcnhfcmluZ1tpXS1cdTAwM2Vjb3VudCA9IG5ld19yeF9jb3VudDtcbitcdFx0XHRyY3VfZGVyZWZlcmVuY2VfcHJvdGVjdGVkKHd4LVx1MDAzZXJ4X3JpbmdbaV0sIDEpLVx1MDAzZWNvdW50ID0gbmV3X3J4X2NvdW50O1xuIFx0XHR3eC1cdTAwM2V0eF9yaW5nX2NvdW50ID0gbmV3X3R4X2NvdW50O1xuIFx0XHR3eC1cdTAwM2VyeF9yaW5nX2NvdW50ID0gbmV3X3J4X2NvdW50O1xuIFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfaHcuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfaHcuY1xuaW5kZXggMTIyYzQ5NTJkMjAzZi4uYzc4MTM2YWJlOTJmOSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfaHcuY1xuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9ody5jXG5AQCAtMTU5OCwxMyArMTU5OCwxNyBAQCBzdGF0aWMgdm9pZCB3eF92bGFuX3N0cmlwX2NvbnRyb2woc3RydWN0IHd4ICp3eCwgYm9vbCBlbmFibGUpXG4ge1xuIFx0aW50IGksIGo7XG4gXG4rXHRyY3VfcmVhZF9sb2NrKCk7XG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyB3eC1cdTAwM2VudW1fcnhfcXVldWVzOyBpKyspIHtcbi1cdFx0c3RydWN0IHd4X3JpbmcgKnJpbmcgPSB3eC1cdTAwM2VyeF9yaW5nW2ldO1xuK1x0XHRzdHJ1Y3Qgd3hfcmluZyAqcmluZyA9IHJjdV9kZXJlZmVyZW5jZSh3eC1cdTAwM2VyeF9yaW5nW2ldKTtcbiBcbitcdFx0aWYgKCFyaW5nKVxuK1x0XHRcdGNvbnRpbnVlO1xuIFx0XHRqID0gcmluZy1cdTAwM2VyZWdfaWR4O1xuIFx0XHR3cjMybSh3eCwgV1hfUFhfUlJfQ0ZHKGopLCBXWF9QWF9SUl9DRkdfVkxBTixcbiBcdFx0ICAgICAgZW5hYmxlID8gV1hfUFhfUlJfQ0ZHX1ZMQU4gOiAwKTtcbiBcdH1cbitcdHJjdV9yZWFkX3VubG9jaygpO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCB3eF92bGFuX3Byb21pc2NfZW5hYmxlKHN0cnVjdCB3eCAqd3gpXG5AQCAtMTc5Nyw3ICsxODAxLDcgQEAgc3RhdGljIHZvaWQgd3hfc2V0X3J4X2J1ZmZlcl9sZW4oc3RydWN0IHd4ICp3eClcbiBcdCAqIHRoZSBCYXNlIGFuZCBMZW5ndGggb2YgdGhlIFJ4IERlc2NyaXB0b3IgUmluZ1xuIFx0ICovXG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyB3eC1cdTAwM2VudW1fcnhfcXVldWVzOyBpKyspIHtcbi1cdFx0cnhfcmluZyA9IHd4LVx1MDAzZXJ4X3JpbmdbaV07XG4rXHRcdHJ4X3JpbmcgPSByY3VfZGVyZWZlcmVuY2VfcHJvdGVjdGVkKHd4LVx1MDAzZXJ4X3JpbmdbaV0sIDEpO1xuIFx0XHRyeF9yaW5nLVx1MDAzZXJ4X2J1Zl9sZW4gPSBXWF9SWEJVRkZFUl8ySztcbiAjaWYgKFBBR0VfU0laRSBcdTAwM2MgODE5MilcbiBcdFx0aWYgKHRlc3RfYml0KFdYX0ZMQUdfUlNDX0VOQUJMRUQsIHd4LVx1MDAzZWZsYWdzKSlcbkBAIC0yMDIxLDggKzIwMjUsMTEgQEAgc3RhdGljIHZvaWQgd3hfY29uZmlndXJlX3R4KHN0cnVjdCB3eCAqd3gpXG4gXHQgICAgICBXWF9URE1fQ1RMX1RFLCBXWF9URE1fQ1RMX1RFKTtcbiBcbiBcdC8qIFNldHVwIHRoZSBIVyBUeCBIZWFkIGFuZCBUYWlsIGRlc2NyaXB0b3IgcG9pbnRlcnMgKi9cbi1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIHd4LVx1MDAzZW51bV90eF9xdWV1ZXM7IGkrKylcbi1cdFx0d3hfY29uZmlndXJlX3R4X3Jpbmcod3gsIHd4LVx1MDAzZXR4X3JpbmdbaV0pO1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2Mgd3gtXHUwMDNlbnVtX3R4X3F1ZXVlczsgaSsrKSB7XG4rXHRcdHN0cnVjdCB3eF9yaW5nICp0eF9yaW5nID0gcmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZCh3eC1cdTAwM2V0eF9yaW5nW2ldLCAxKTtcbitcbitcdFx0d3hfY29uZmlndXJlX3R4X3Jpbmcod3gsIHR4X3JpbmcpO1xuK1x0fVxuIFxuIFx0d3IzMm0od3gsIFdYX1RTQ19CVUZfQUUsIFdYX1RTQ19CVUZfQUVfVEhSLCAweDEwKTtcbiBcbkBAIC0yMjQ3LDggKzIyNTQsMTEgQEAgdm9pZCB3eF9jb25maWd1cmVfcngoc3RydWN0IHd4ICp3eClcbiBcdC8qIFNldHVwIHRoZSBIVyBSeCBIZWFkIGFuZCBUYWlsIERlc2NyaXB0b3IgUG9pbnRlcnMgYW5kXG4gXHQgKiB0aGUgQmFzZSBhbmQgTGVuZ3RoIG9mIHRoZSBSeCBEZXNjcmlwdG9yIFJpbmdcbiBcdCAqL1xuLVx0Zm9yIChpID0gMDsgaSBcdTAwM2Mgd3gtXHUwMDNlbnVtX3J4X3F1ZXVlczsgaSsrKVxuLVx0XHR3eF9jb25maWd1cmVfcnhfcmluZyh3eCwgd3gtXHUwMDNlcnhfcmluZ1tpXSk7XG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyB3eC1cdTAwM2VudW1fcnhfcXVldWVzOyBpKyspIHtcbitcdFx0c3RydWN0IHd4X3JpbmcgKnJ4X3JpbmcgPSByY3VfZGVyZWZlcmVuY2VfcHJvdGVjdGVkKHd4LVx1MDAzZXJ4X3JpbmdbaV0sIDEpO1xuK1xuK1x0XHR3eF9jb25maWd1cmVfcnhfcmluZyh3eCwgcnhfcmluZyk7XG4rXHR9XG4gXG4gXHQvKiBFbmFibGUgYWxsIHJlY2VpdmVzLCBkaXNhYmxlIHNlY3VyaXR5IGVuZ2luZSBwcmlvciB0byBibG9jayB0cmFmZmljICovXG4gXHRyZXQgPSB3eF9kaXNhYmxlX3NlY19yeF9wYXRoKHd4KTtcbkBAIC0yODM4LDExICsyODQ4LDE3IEBAIGludCB3eF9mY19lbmFibGUoc3RydWN0IHd4ICp3eCwgYm9vbCB0eF9wYXVzZSwgYm9vbCByeF9wYXVzZSlcbiBcdCAqICBhbmQgcGVyZm9ybWFuY2UgcmVhc29ucy5cbiBcdCAqL1xuIFx0aWYgKHd4LVx1MDAzZW51bV9yeF9xdWV1ZXMgXHUwMDNlIDEgXHUwMDI2XHUwMDI2ICF0eF9wYXVzZSkge1xuLVx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyB3eC1cdTAwM2VudW1fcnhfcXVldWVzOyBpKyspXG4tXHRcdFx0d3hfZW5hYmxlX3J4X2Ryb3Aod3gsIHd4LVx1MDAzZXJ4X3JpbmdbaV0pO1xuK1x0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyB3eC1cdTAwM2VudW1fcnhfcXVldWVzOyBpKyspIHtcbitcdFx0XHRzdHJ1Y3Qgd3hfcmluZyAqcnhfcmluZyA9IHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQod3gtXHUwMDNlcnhfcmluZ1tpXSwgMSk7XG4rXG4rXHRcdFx0d3hfZW5hYmxlX3J4X2Ryb3Aod3gsIHJ4X3JpbmcpO1xuK1x0XHR9XG4gXHR9IGVsc2Uge1xuLVx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyB3eC1cdTAwM2VudW1fcnhfcXVldWVzOyBpKyspXG4tXHRcdFx0d3hfZGlzYWJsZV9yeF9kcm9wKHd4LCB3eC1cdTAwM2VyeF9yaW5nW2ldKTtcbitcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2Mgd3gtXHUwMDNlbnVtX3J4X3F1ZXVlczsgaSsrKSB7XG4rXHRcdFx0c3RydWN0IHd4X3JpbmcgKnJ4X3JpbmcgPSByY3VfZGVyZWZlcmVuY2VfcHJvdGVjdGVkKHd4LVx1MDAzZXJ4X3JpbmdbaV0sIDEpO1xuK1xuK1x0XHRcdHd4X2Rpc2FibGVfcnhfZHJvcCh3eCwgcnhfcmluZyk7XG4rXHRcdH1cbiBcdH1cbiBcbiBcdHJldHVybiAwO1xuQEAgLTI4NzAsOCArMjg4NiwxNSBAQCBzdGF0aWMgdm9pZCB3eF91cGRhdGVfeG9mZl9yeF9sZmMoc3RydWN0IHd4ICp3eClcbiBcdGlmICghZGF0YSlcbiBcdFx0cmV0dXJuO1xuIFxuLVx0Zm9yIChpID0gMDsgaSBcdTAwM2Mgd3gtXHUwMDNlbnVtX3R4X3F1ZXVlczsgaSsrKVxuLVx0XHRjbGVhcl9iaXQoV1hfSEFOR19DSEVDS19BUk1FRCwgd3gtXHUwMDNldHhfcmluZ1tpXS1cdTAwM2VzdGF0ZSk7XG4rXHRyY3VfcmVhZF9sb2NrKCk7XG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyB3eC1cdTAwM2VudW1fdHhfcXVldWVzOyBpKyspIHtcbitcdFx0c3RydWN0IHd4X3JpbmcgKnR4X3JpbmcgPSByY3VfZGVyZWZlcmVuY2Uod3gtXHUwMDNldHhfcmluZ1tpXSk7XG4rXG4rXHRcdGlmICghdHhfcmluZylcbitcdFx0XHRjb250aW51ZTtcbitcdFx0Y2xlYXJfYml0KFdYX0hBTkdfQ0hFQ0tfQVJNRUQsIHR4X3JpbmctXHUwMDNlc3RhdGUpO1xuK1x0fVxuK1x0cmN1X3JlYWRfdW5sb2NrKCk7XG4gfVxuIFxuIC8qKlxuQEAgLTI4OTMsMTAgKzI5MTYsMTMgQEAgdm9pZCB3eF91cGRhdGVfc3RhdHMoc3RydWN0IHd4ICp3eClcbiBcbiBcdHNwaW5fbG9jayhcdTAwMjZ3eC1cdTAwM2Vod19zdGF0c19sb2NrKTtcbiBcbitcdHJjdV9yZWFkX2xvY2soKTtcbiBcdC8qIGdhdGhlciBzb21lIHN0YXRzIHRvIHRoZSB3eCBzdHJ1Y3QgdGhhdCBhcmUgcGVyIHF1ZXVlICovXG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyB3eC1cdTAwM2VudW1fcnhfcXVldWVzOyBpKyspIHtcbi1cdFx0c3RydWN0IHd4X3JpbmcgKnJ4X3JpbmcgPSB3eC1cdTAwM2VyeF9yaW5nW2ldO1xuK1x0XHRzdHJ1Y3Qgd3hfcmluZyAqcnhfcmluZyA9IHJjdV9kZXJlZmVyZW5jZSh3eC1cdTAwM2VyeF9yaW5nW2ldKTtcbiBcbitcdFx0aWYgKCFyeF9yaW5nKVxuK1x0XHRcdGNvbnRpbnVlO1xuIFx0XHRub25fZW9wX2Rlc2NzICs9IHJ4X3JpbmctXHUwMDNlcnhfc3RhdHMubm9uX2VvcF9kZXNjcztcbiBcdFx0YWxsb2NfcnhfYnVmZl9mYWlsZWQgKz0gcnhfcmluZy1cdTAwM2VyeF9zdGF0cy5hbGxvY19yeF9idWZmX2ZhaWxlZDtcbiBcdFx0aHdfY3N1bV9yeF9nb29kICs9IHJ4X3JpbmctXHUwMDNlcnhfc3RhdHMuY3N1bV9nb29kX2NudDtcbkBAIC0yOTEyLDE5ICsyOTM4LDI4IEBAIHZvaWQgd3hfdXBkYXRlX3N0YXRzKHN0cnVjdCB3eCAqd3gpXG4gXHRcdHU2NCByc2NfZmx1c2ggPSAwO1xuIFxuIFx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyB3eC1cdTAwM2VudW1fcnhfcXVldWVzOyBpKyspIHtcbi1cdFx0XHRyc2NfY291bnQgKz0gd3gtXHUwMDNlcnhfcmluZ1tpXS1cdTAwM2VyeF9zdGF0cy5yc2NfY291bnQ7XG4tXHRcdFx0cnNjX2ZsdXNoICs9IHd4LVx1MDAzZXJ4X3JpbmdbaV0tXHUwMDNlcnhfc3RhdHMucnNjX2ZsdXNoO1xuK1x0XHRcdHN0cnVjdCB3eF9yaW5nICpyeF9yaW5nID0gcmN1X2RlcmVmZXJlbmNlKHd4LVx1MDAzZXJ4X3JpbmdbaV0pO1xuK1xuK1x0XHRcdGlmICghcnhfcmluZylcbitcdFx0XHRcdGNvbnRpbnVlO1xuK1xuK1x0XHRcdHJzY19jb3VudCArPSByeF9yaW5nLVx1MDAzZXJ4X3N0YXRzLnJzY19jb3VudDtcbitcdFx0XHRyc2NfZmx1c2ggKz0gcnhfcmluZy1cdTAwM2VyeF9zdGF0cy5yc2NfZmx1c2g7XG4gXHRcdH1cbiBcdFx0d3gtXHUwMDNlcnNjX2NvdW50ID0gcnNjX2NvdW50O1xuIFx0XHR3eC1cdTAwM2Vyc2NfZmx1c2ggPSByc2NfZmx1c2g7XG4gXHR9XG4gXG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyB3eC1cdTAwM2VudW1fdHhfcXVldWVzOyBpKyspIHtcbi1cdFx0c3RydWN0IHd4X3JpbmcgKnR4X3JpbmcgPSB3eC1cdTAwM2V0eF9yaW5nW2ldO1xuK1x0XHRzdHJ1Y3Qgd3hfcmluZyAqdHhfcmluZyA9IHJjdV9kZXJlZmVyZW5jZSh3eC1cdTAwM2V0eF9yaW5nW2ldKTtcbitcbitcdFx0aWYgKCF0eF9yaW5nKVxuK1x0XHRcdGNvbnRpbnVlO1xuIFxuIFx0XHRyZXN0YXJ0X3F1ZXVlICs9IHR4X3JpbmctXHUwMDNldHhfc3RhdHMucmVzdGFydF9xdWV1ZTtcbiBcdFx0dHhfYnVzeSArPSB0eF9yaW5nLVx1MDAzZXR4X3N0YXRzLnR4X2J1c3k7XG4gXHR9XG4rXHRyY3VfcmVhZF91bmxvY2soKTtcbiBcdHd4LVx1MDAzZXJlc3RhcnRfcXVldWUgPSByZXN0YXJ0X3F1ZXVlO1xuIFx0d3gtXHUwMDNldHhfYnVzeSA9IHR4X2J1c3k7XG4gXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9saWIuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfbGliLmNcbmluZGV4IGVkNWFhZDc4NTdiZDkuLjlmOTBhYTkyZjg0MGIgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2xpYi5jXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2xpYi5jXG5AQCAtMTcxNCw3ICsxNzE0LDEyIEBAIG5ldGRldl90eF90IHd4X3htaXRfZnJhbWUoc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcbiBcdGlmIChyX2lkeCBcdTAwM2U9IHd4LVx1MDAzZW51bV90eF9xdWV1ZXMpXG4gXHRcdHJfaWR4ID0gcl9pZHggJSB3eC1cdTAwM2VudW1fdHhfcXVldWVzO1xuLVx0dHhfcmluZyA9IHd4LVx1MDAzZXR4X3Jpbmdbcl9pZHhdO1xuK1x0dHhfcmluZyA9IHJjdV9kZXJlZmVyZW5jZSh3eC1cdTAwM2V0eF9yaW5nW3JfaWR4XSk7XG4rXG4rXHRpZiAodW5saWtlbHkoIXR4X3JpbmcpKSB7XG4rXHRcdGRldl9rZnJlZV9za2JfYW55KHNrYik7XG4rXHRcdHJldHVybiBORVRERVZfVFhfT0s7XG4rXHR9XG4gXG4gXHRyZXR1cm4gd3hfeG1pdF9mcmFtZV9yaW5nKHNrYiwgdHhfcmluZyk7XG4gfVxuQEAgLTIwNTgsMjYgKzIwNjMsMjYgQEAgc3RhdGljIGJvb2wgd3hfY2FjaGVfcmluZ192bWRxKHN0cnVjdCB3eCAqd3gpXG4gXHRcdFx0LyogSWYgd2UgYXJlIGdyZWF0ZXIgdGhhbiBpbmRpY2VzIG1vdmUgdG8gbmV4dCBwb29sICovXG4gXHRcdFx0aWYgKChyZWdfaWR4IFx1MDAyNiB+dm1kcS1cdTAwM2VtYXNrKSBcdTAwM2U9IHJzcy1cdTAwM2VpbmRpY2VzKVxuIFx0XHRcdFx0cmVnX2lkeCA9IF9fQUxJR05fTUFTSyhyZWdfaWR4LCB+dm1kcS1cdTAwM2VtYXNrKTtcbi1cdFx0XHR3eC1cdTAwM2VyeF9yaW5nW2ldLVx1MDAzZXJlZ19pZHggPSByZWdfaWR4O1xuK1x0XHRcdHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQod3gtXHUwMDNlcnhfcmluZ1tpXSwgMSktXHUwMDNlcmVnX2lkeCA9IHJlZ19pZHg7XG4gXHRcdH1cbiBcdFx0cmVnX2lkeCA9IHZtZHEtXHUwMDNlb2Zmc2V0ICogX19BTElHTl9NQVNLKDEsIH52bWRxLVx1MDAzZW1hc2spO1xuIFx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyB3eC1cdTAwM2VudW1fdHhfcXVldWVzOyBpKyssIHJlZ19pZHgrKykge1xuIFx0XHRcdC8qIElmIHdlIGFyZSBncmVhdGVyIHRoYW4gaW5kaWNlcyBtb3ZlIHRvIG5leHQgcG9vbCAqL1xuIFx0XHRcdGlmICgocmVnX2lkeCBcdTAwMjYgcnNzLVx1MDAzZW1hc2spIFx1MDAzZT0gcnNzLVx1MDAzZWluZGljZXMpXG4gXHRcdFx0XHRyZWdfaWR4ID0gX19BTElHTl9NQVNLKHJlZ19pZHgsIH52bWRxLVx1MDAzZW1hc2spO1xuLVx0XHRcdHd4LVx1MDAzZXR4X3JpbmdbaV0tXHUwMDNlcmVnX2lkeCA9IHJlZ19pZHg7XG4rXHRcdFx0cmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZCh3eC1cdTAwM2V0eF9yaW5nW2ldLCAxKS1cdTAwM2VyZWdfaWR4ID0gcmVnX2lkeDtcbiBcdFx0fVxuIFx0fSBlbHNlIHtcbiBcdFx0Lyogc3RhcnQgYXQgVk1EcSByZWdpc3RlciBvZmZzZXQgZm9yIFNSLUlPViBlbmFibGVkIHNldHVwcyAqL1xuIFx0XHRyZWdfaWR4ID0gdm1kcS1cdTAwM2VvZmZzZXQ7XG4gXHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHd4LVx1MDAzZW51bV9yeF9xdWV1ZXM7IGkrKylcbiBcdFx0XHQvKiBJZiB3ZSBhcmUgZ3JlYXRlciB0aGFuIGluZGljZXMgbW92ZSB0byBuZXh0IHBvb2wgKi9cbi1cdFx0XHR3eC1cdTAwM2VyeF9yaW5nW2ldLVx1MDAzZXJlZ19pZHggPSByZWdfaWR4ICsgaTtcbitcdFx0XHRyY3VfZGVyZWZlcmVuY2VfcHJvdGVjdGVkKHd4LVx1MDAzZXJ4X3JpbmdbaV0sIDEpLVx1MDAzZXJlZ19pZHggPSByZWdfaWR4ICsgaTtcbiBcbiBcdFx0cmVnX2lkeCA9IHZtZHEtXHUwMDNlb2Zmc2V0O1xuIFx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyB3eC1cdTAwM2VudW1fdHhfcXVldWVzOyBpKyspXG4gXHRcdFx0LyogSWYgd2UgYXJlIGdyZWF0ZXIgdGhhbiBpbmRpY2VzIG1vdmUgdG8gbmV4dCBwb29sICovXG4tXHRcdFx0d3gtXHUwMDNldHhfcmluZ1tpXS1cdTAwM2VyZWdfaWR4ID0gcmVnX2lkeCArIGk7XG4rXHRcdFx0cmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZCh3eC1cdTAwM2V0eF9yaW5nW2ldLCAxKS1cdTAwM2VyZWdfaWR4ID0gcmVnX2lkeCArIGk7XG4gXHR9XG4gXG4gXHRyZXR1cm4gdHJ1ZTtcbkBAIC0yMDk4LDEwICsyMTAzLDEwIEBAIHN0YXRpYyB2b2lkIHd4X2NhY2hlX3JpbmdfcnNzKHN0cnVjdCB3eCAqd3gpXG4gXHRcdHJldHVybjtcbiBcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHd4LVx1MDAzZW51bV9yeF9xdWV1ZXM7IGkrKylcbi1cdFx0d3gtXHUwMDNlcnhfcmluZ1tpXS1cdTAwM2VyZWdfaWR4ID0gaTtcbitcdFx0cmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZCh3eC1cdTAwM2VyeF9yaW5nW2ldLCAxKS1cdTAwM2VyZWdfaWR4ID0gaTtcbiBcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHd4LVx1MDAzZW51bV90eF9xdWV1ZXM7IGkrKylcbi1cdFx0d3gtXHUwMDNldHhfcmluZ1tpXS1cdTAwM2VyZWdfaWR4ID0gaTtcbitcdFx0cmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZCh3eC1cdTAwM2V0eF9yaW5nW2ldLCAxKS1cdTAwM2VyZWdfaWR4ID0gaTtcbiB9XG4gXG4gc3RhdGljIHZvaWQgd3hfYWRkX3Jpbmcoc3RydWN0IHd4X3JpbmcgKnJpbmcsIHN0cnVjdCB3eF9yaW5nX2NvbnRhaW5lciAqaGVhZClcbkBAIC0yMTkxLDcgKzIxOTYsNyBAQCBzdGF0aWMgaW50IHd4X2FsbG9jX3FfdmVjdG9yKHN0cnVjdCB3eCAqd3gsXG4gXHRcdHJpbmctXHUwMDNlcXVldWVfaW5kZXggPSB0eHJfaWR4O1xuIFxuIFx0XHQvKiBhc3NpZ24gcmluZyB0byB3eCAqL1xuLVx0XHR3eC1cdTAwM2V0eF9yaW5nW3R4cl9pZHhdID0gcmluZztcbitcdFx0cmN1X2Fzc2lnbl9wb2ludGVyKHd4LVx1MDAzZXR4X3JpbmdbdHhyX2lkeF0sIHJpbmcpO1xuIFxuIFx0XHQvKiB1cGRhdGUgY291bnQgYW5kIGluZGV4ICovXG4gXHRcdHR4cl9jb3VudC0tO1xuQEAgLTIyMTcsNyArMjIyMiw3IEBAIHN0YXRpYyBpbnQgd3hfYWxsb2NfcV92ZWN0b3Ioc3RydWN0IHd4ICp3eCxcbiBcdFx0cmluZy1cdTAwM2VxdWV1ZV9pbmRleCA9IHJ4cl9pZHg7XG4gXG4gXHRcdC8qIGFzc2lnbiByaW5nIHRvIHd4ICovXG4tXHRcdHd4LVx1MDAzZXJ4X3JpbmdbcnhyX2lkeF0gPSByaW5nO1xuK1x0XHRyY3VfYXNzaWduX3BvaW50ZXIod3gtXHUwMDNlcnhfcmluZ1tyeHJfaWR4XSwgcmluZyk7XG4gXG4gXHRcdC8qIHVwZGF0ZSBjb3VudCBhbmQgaW5kZXggKi9cbiBcdFx0cnhyX2NvdW50LS07XG5AQCAtMjI0NSwxMCArMjI1MCwxMCBAQCBzdGF0aWMgdm9pZCB3eF9mcmVlX3FfdmVjdG9yKHN0cnVjdCB3eCAqd3gsIGludCB2X2lkeClcbiBcdHN0cnVjdCB3eF9yaW5nICpyaW5nO1xuIFxuIFx0d3hfZm9yX2VhY2hfcmluZyhyaW5nLCBxX3ZlY3Rvci1cdTAwM2V0eClcbi1cdFx0d3gtXHUwMDNldHhfcmluZ1tyaW5nLVx1MDAzZXF1ZXVlX2luZGV4XSA9IE5VTEw7XG4rXHRcdHJjdV9hc3NpZ25fcG9pbnRlcih3eC1cdTAwM2V0eF9yaW5nW3JpbmctXHUwMDNlcXVldWVfaW5kZXhdLCBOVUxMKTtcbiBcbiBcdHd4X2Zvcl9lYWNoX3JpbmcocmluZywgcV92ZWN0b3ItXHUwMDNlcngpXG4tXHRcdHd4LVx1MDAzZXJ4X3JpbmdbcmluZy1cdTAwM2VxdWV1ZV9pbmRleF0gPSBOVUxMO1xuK1x0XHRyY3VfYXNzaWduX3BvaW50ZXIod3gtXHUwMDNlcnhfcmluZ1tyaW5nLVx1MDAzZXF1ZXVlX2luZGV4XSwgTlVMTCk7XG4gXG4gXHR3eC1cdTAwM2VxX3ZlY3Rvclt2X2lkeF0gPSBOVUxMO1xuIFx0bmV0aWZfbmFwaV9kZWwoXHUwMDI2cV92ZWN0b3ItXHUwMDNlbmFwaSk7XG5AQCAtMjY1OSw3ICsyNjY0LDcgQEAgdm9pZCB3eF9jbGVhbl9hbGxfcnhfcmluZ3Moc3RydWN0IHd4ICp3eClcbiBcdGludCBpO1xuIFxuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2Mgd3gtXHUwMDNlbnVtX3J4X3F1ZXVlczsgaSsrKVxuLVx0XHR3eF9jbGVhbl9yeF9yaW5nKHd4LVx1MDAzZXJ4X3JpbmdbaV0pO1xuK1x0XHR3eF9jbGVhbl9yeF9yaW5nKHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQod3gtXHUwMDNlcnhfcmluZ1tpXSwgMSkpO1xuIH1cbiBFWFBPUlRfU1lNQk9MKHd4X2NsZWFuX2FsbF9yeF9yaW5ncyk7XG4gXG5AQCAtMjcwMSw3ICsyNzA2LDcgQEAgc3RhdGljIHZvaWQgd3hfZnJlZV9hbGxfcnhfcmVzb3VyY2VzKHN0cnVjdCB3eCAqd3gpXG4gXHRpbnQgaTtcbiBcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHd4LVx1MDAzZW51bV9yeF9xdWV1ZXM7IGkrKylcbi1cdFx0d3hfZnJlZV9yeF9yZXNvdXJjZXMod3gtXHUwMDNlcnhfcmluZ1tpXSk7XG4rXHRcdHd4X2ZyZWVfcnhfcmVzb3VyY2VzKHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQod3gtXHUwMDNlcnhfcmluZ1tpXSwgMSkpO1xuIH1cbiBcbiAvKipcbkBAIC0yNzc1LDcgKzI3ODAsNyBAQCB2b2lkIHd4X2NsZWFuX2FsbF90eF9yaW5ncyhzdHJ1Y3Qgd3ggKnd4KVxuIFx0aW50IGk7XG4gXG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyB3eC1cdTAwM2VudW1fdHhfcXVldWVzOyBpKyspXG4tXHRcdHd4X2NsZWFuX3R4X3Jpbmcod3gtXHUwMDNldHhfcmluZ1tpXSk7XG4rXHRcdHd4X2NsZWFuX3R4X3JpbmcocmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZCh3eC1cdTAwM2V0eF9yaW5nW2ldLCAxKSk7XG4gfVxuIEVYUE9SVF9TWU1CT0wod3hfY2xlYW5fYWxsX3R4X3JpbmdzKTtcbiBcbkBAIC0yODIzLDcgKzI4MjgsNyBAQCBzdGF0aWMgdm9pZCB3eF9mcmVlX2FsbF90eF9yZXNvdXJjZXMoc3RydWN0IHd4ICp3eClcbiBcdGludCBpO1xuIFxuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2Mgd3gtXHUwMDNlbnVtX3R4X3F1ZXVlczsgaSsrKVxuLVx0XHR3eF9mcmVlX3R4X3Jlc291cmNlcyh3eC1cdTAwM2V0eF9yaW5nW2ldKTtcbitcdFx0d3hfZnJlZV90eF9yZXNvdXJjZXMocmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZCh3eC1cdTAwM2V0eF9yaW5nW2ldLCAxKSk7XG4gfVxuIFxuIHZvaWQgd3hfZnJlZV9yZXNvdXJjZXMoc3RydWN0IHd4ICp3eClcbkBAIC0yOTMzLDcgKzI5MzgsNyBAQCBzdGF0aWMgaW50IHd4X3NldHVwX2FsbF9yeF9yZXNvdXJjZXMoc3RydWN0IHd4ICp3eClcbiBcdGludCBpLCBlcnIgPSAwO1xuIFxuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2Mgd3gtXHUwMDNlbnVtX3J4X3F1ZXVlczsgaSsrKSB7XG4tXHRcdGVyciA9IHd4X3NldHVwX3J4X3Jlc291cmNlcyh3eC1cdTAwM2VyeF9yaW5nW2ldKTtcbitcdFx0ZXJyID0gd3hfc2V0dXBfcnhfcmVzb3VyY2VzKHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQod3gtXHUwMDNlcnhfcmluZ1tpXSwgMSkpO1xuIFx0XHRpZiAoIWVycilcbiBcdFx0XHRjb250aW51ZTtcbiBcbkBAIC0yOTQ1LDcgKzI5NTAsNyBAQCBzdGF0aWMgaW50IHd4X3NldHVwX2FsbF9yeF9yZXNvdXJjZXMoc3RydWN0IHd4ICp3eClcbiBlcnJfc2V0dXBfcng6XG4gXHQvKiByZXdpbmQgdGhlIGluZGV4IGZyZWVpbmcgdGhlIHJpbmdzIGFzIHdlIGdvICovXG4gXHR3aGlsZSAoaS0tKVxuLVx0XHR3eF9mcmVlX3J4X3Jlc291cmNlcyh3eC1cdTAwM2VyeF9yaW5nW2ldKTtcbitcdFx0d3hfZnJlZV9yeF9yZXNvdXJjZXMocmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZCh3eC1cdTAwM2VyeF9yaW5nW2ldLCAxKSk7XG4gXHRyZXR1cm4gZXJyO1xuIH1cbiBcbkBAIC0zMDM2LDcgKzMwNDEsNyBAQCBzdGF0aWMgaW50IHd4X3NldHVwX2FsbF90eF9yZXNvdXJjZXMoc3RydWN0IHd4ICp3eClcbiBcdGludCBpLCBlcnIgPSAwO1xuIFxuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2Mgd3gtXHUwMDNlbnVtX3R4X3F1ZXVlczsgaSsrKSB7XG4tXHRcdGVyciA9IHd4X3NldHVwX3R4X3Jlc291cmNlcyh3eC1cdTAwM2V0eF9yaW5nW2ldKTtcbitcdFx0ZXJyID0gd3hfc2V0dXBfdHhfcmVzb3VyY2VzKHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQod3gtXHUwMDNldHhfcmluZ1tpXSwgMSkpO1xuIFx0XHRpZiAoIWVycilcbiBcdFx0XHRjb250aW51ZTtcbiBcbkBAIC0zMDQ4LDcgKzMwNTMsNyBAQCBzdGF0aWMgaW50IHd4X3NldHVwX2FsbF90eF9yZXNvdXJjZXMoc3RydWN0IHd4ICp3eClcbiBlcnJfc2V0dXBfdHg6XG4gXHQvKiByZXdpbmQgdGhlIGluZGV4IGZyZWVpbmcgdGhlIHJpbmdzIGFzIHdlIGdvICovXG4gXHR3aGlsZSAoaS0tKVxuLVx0XHR3eF9mcmVlX3R4X3Jlc291cmNlcyh3eC1cdTAwM2V0eF9yaW5nW2ldKTtcbitcdFx0d3hfZnJlZV90eF9yZXNvdXJjZXMocmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZCh3eC1cdTAwM2V0eF9yaW5nW2ldLCAxKSk7XG4gXHRyZXR1cm4gZXJyO1xuIH1cbiBcbkBAIC0zMDk3LDcgKzMxMDIsNyBAQCB2b2lkIHd4X2dldF9zdGF0czY0KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXG4gXG4gXHRyY3VfcmVhZF9sb2NrKCk7XG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyB3eC1cdTAwM2VudW1fcnhfcXVldWVzOyBpKyspIHtcbi1cdFx0c3RydWN0IHd4X3JpbmcgKnJpbmcgPSBSRUFEX09OQ0Uod3gtXHUwMDNlcnhfcmluZ1tpXSk7XG4rXHRcdHN0cnVjdCB3eF9yaW5nICpyaW5nID0gcmN1X2RlcmVmZXJlbmNlKHd4LVx1MDAzZXJ4X3JpbmdbaV0pO1xuIFx0XHR1NjQgYnl0ZXMsIHBhY2tldHM7XG4gXHRcdHVuc2lnbmVkIGludCBzdGFydDtcbiBcbkBAIC0zMTEzLDcgKzMxMTgsNyBAQCB2b2lkIHd4X2dldF9zdGF0czY0KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXG4gXHR9XG4gXG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyB3eC1cdTAwM2VudW1fdHhfcXVldWVzOyBpKyspIHtcbi1cdFx0c3RydWN0IHd4X3JpbmcgKnJpbmcgPSBSRUFEX09OQ0Uod3gtXHUwMDNldHhfcmluZ1tpXSk7XG4rXHRcdHN0cnVjdCB3eF9yaW5nICpyaW5nID0gcmN1X2RlcmVmZXJlbmNlKHd4LVx1MDAzZXR4X3JpbmdbaV0pO1xuIFx0XHR1NjQgYnl0ZXMsIHBhY2tldHM7XG4gXHRcdHVuc2lnbmVkIGludCBzdGFydDtcbiBcbkBAIC0zMzI0LDcgKzMzMjksNyBAQCBpbnQgd3hfc2V0X3Jpbmcoc3RydWN0IHd4ICp3eCwgdTMyIG5ld190eF9jb3VudCxcbiBcdCAqL1xuIFx0aWYgKG5ld190eF9jb3VudCAhPSB3eC1cdTAwM2V0eF9yaW5nX2NvdW50KSB7XG4gXHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHd4LVx1MDAzZW51bV90eF9xdWV1ZXM7IGkrKykge1xuLVx0XHRcdG1lbWNweShcdTAwMjZ0ZW1wX3JpbmdbaV0sIHd4LVx1MDAzZXR4X3JpbmdbaV0sXG4rXHRcdFx0bWVtY3B5KFx1MDAyNnRlbXBfcmluZ1tpXSwgcmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZCh3eC1cdTAwM2V0eF9yaW5nW2ldLCAxKSxcbiBcdFx0XHQgICAgICAgc2l6ZW9mKHN0cnVjdCB3eF9yaW5nKSk7XG4gXG4gXHRcdFx0dGVtcF9yaW5nW2ldLmNvdW50ID0gbmV3X3R4X2NvdW50O1xuQEAgLTMzNDAsOSArMzM0NSwxMSBAQCBpbnQgd3hfc2V0X3Jpbmcoc3RydWN0IHd4ICp3eCwgdTMyIG5ld190eF9jb3VudCxcbiBcdFx0fVxuIFxuIFx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyB3eC1cdTAwM2VudW1fdHhfcXVldWVzOyBpKyspIHtcbi1cdFx0XHR3eF9mcmVlX3R4X3Jlc291cmNlcyh3eC1cdTAwM2V0eF9yaW5nW2ldKTtcbitcdFx0XHRzdHJ1Y3Qgd3hfcmluZyAqdHhfcmluZyA9IHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQod3gtXHUwMDNldHhfcmluZ1tpXSwgMSk7XG4rXG4rXHRcdFx0d3hfZnJlZV90eF9yZXNvdXJjZXModHhfcmluZyk7XG4gXG4tXHRcdFx0bWVtY3B5KHd4LVx1MDAzZXR4X3JpbmdbaV0sIFx1MDAyNnRlbXBfcmluZ1tpXSxcbitcdFx0XHRtZW1jcHkodHhfcmluZywgXHUwMDI2dGVtcF9yaW5nW2ldLFxuIFx0XHRcdCAgICAgICBzaXplb2Yoc3RydWN0IHd4X3JpbmcpKTtcbiBcdFx0fVxuIFxuQEAgLTMzNTIsNyArMzM1OSw3IEBAIGludCB3eF9zZXRfcmluZyhzdHJ1Y3Qgd3ggKnd4LCB1MzIgbmV3X3R4X2NvdW50LFxuIFx0LyogUmVwZWF0IHRoZSBwcm9jZXNzIGZvciB0aGUgUnggcmluZ3MgaWYgbmVlZGVkICovXG4gXHRpZiAobmV3X3J4X2NvdW50ICE9IHd4LVx1MDAzZXJ4X3JpbmdfY291bnQpIHtcbiBcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2Mgd3gtXHUwMDNlbnVtX3J4X3F1ZXVlczsgaSsrKSB7XG4tXHRcdFx0bWVtY3B5KFx1MDAyNnRlbXBfcmluZ1tpXSwgd3gtXHUwMDNlcnhfcmluZ1tpXSxcbitcdFx0XHRtZW1jcHkoXHUwMDI2dGVtcF9yaW5nW2ldLCByY3VfZGVyZWZlcmVuY2VfcHJvdGVjdGVkKHd4LVx1MDAzZXJ4X3JpbmdbaV0sIDEpLFxuIFx0XHRcdCAgICAgICBzaXplb2Yoc3RydWN0IHd4X3JpbmcpKTtcbiBcbiBcdFx0XHR0ZW1wX3JpbmdbaV0uY291bnQgPSBuZXdfcnhfY291bnQ7XG5AQCAtMzM2OCw4ICszMzc1LDEwIEBAIGludCB3eF9zZXRfcmluZyhzdHJ1Y3Qgd3ggKnd4LCB1MzIgbmV3X3R4X2NvdW50LFxuIFx0XHR9XG4gXG4gXHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHd4LVx1MDAzZW51bV9yeF9xdWV1ZXM7IGkrKykge1xuLVx0XHRcdHd4X2ZyZWVfcnhfcmVzb3VyY2VzKHd4LVx1MDAzZXJ4X3JpbmdbaV0pO1xuLVx0XHRcdG1lbWNweSh3eC1cdTAwM2VyeF9yaW5nW2ldLCBcdTAwMjZ0ZW1wX3JpbmdbaV0sXG4rXHRcdFx0c3RydWN0IHd4X3JpbmcgKnJ4X3JpbmcgPSByY3VfZGVyZWZlcmVuY2VfcHJvdGVjdGVkKHd4LVx1MDAzZXJ4X3JpbmdbaV0sIDEpO1xuK1xuK1x0XHRcdHd4X2ZyZWVfcnhfcmVzb3VyY2VzKHJ4X3JpbmcpO1xuK1x0XHRcdG1lbWNweShyeF9yaW5nLCBcdTAwMjZ0ZW1wX3JpbmdbaV0sXG4gXHRcdFx0ICAgICAgIHNpemVvZihzdHJ1Y3Qgd3hfcmluZykpO1xuIFx0XHR9XG4gXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9wdHAuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfcHRwLmNcbmluZGV4IDQ3MDhlN2YzOTU4ZjcuLjY4ZGM2Mjk3N2FhYjIgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X3B0cC5jXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X3B0cC5jXG5AQCAtMjc0LDExICsyNzQsMTUgQEAgc3RhdGljIHZvaWQgd3hfcHRwX3J4X2hhbmcoc3RydWN0IHd4ICp3eClcbiBcbiBcdC8qIGRldGVybWluZSB0aGUgbW9zdCByZWNlbnQgd2F0Y2hkb2cgb3IgcnhfdGltZXN0YW1wIGV2ZW50ICovXG4gXHRyeF9ldmVudCA9IHd4LVx1MDAzZWxhc3RfcnhfcHRwX2NoZWNrO1xuK1x0cmN1X3JlYWRfbG9jaygpO1xuIFx0Zm9yIChuID0gMDsgbiBcdTAwM2Mgd3gtXHUwMDNlbnVtX3J4X3F1ZXVlczsgbisrKSB7XG4tXHRcdHJ4X3JpbmcgPSB3eC1cdTAwM2VyeF9yaW5nW25dO1xuK1x0XHRyeF9yaW5nID0gcmN1X2RlcmVmZXJlbmNlKHd4LVx1MDAzZXJ4X3Jpbmdbbl0pO1xuK1x0XHRpZiAoIXJ4X3JpbmcpXG4rXHRcdFx0Y29udGludWU7XG4gXHRcdGlmICh0aW1lX2FmdGVyKHJ4X3JpbmctXHUwMDNlbGFzdF9yeF90aW1lc3RhbXAsIHJ4X2V2ZW50KSlcbiBcdFx0XHRyeF9ldmVudCA9IHJ4X3JpbmctXHUwMDNlbGFzdF9yeF90aW1lc3RhbXA7XG4gXHR9XG4rXHRyY3VfcmVhZF91bmxvY2soKTtcbiBcbiBcdC8qIG9ubHkgbmVlZCB0byByZWFkIHRoZSBoaWdoIFJYU1RNUCByZWdpc3RlciB0byBjbGVhciB0aGUgbG9jayAqL1xuIFx0aWYgKHRpbWVfaXNfYmVmb3JlX2ppZmZpZXMocnhfZXZlbnQgKyA1ICogSFopKSB7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF90eXBlLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X3R5cGUuaFxuaW5kZXggOTQ1NGU5MDI1OGQ4ZS4uOTk1MmQwMjM0MjQwMSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfdHlwZS5oXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X3R5cGUuaFxuQEAgLTEzNTksOCArMTM1OSw4IEBAIHN0cnVjdCB3eCB7XG4gXHR1MzIgdHhfcmluZ19jb3VudDtcbiBcdHUzMiByeF9yaW5nX2NvdW50O1xuIFxuLVx0c3RydWN0IHd4X3JpbmcgKnR4X3JpbmdbNjRdIF9fX19jYWNoZWxpbmVfYWxpZ25lZF9pbl9zbXA7XG4tXHRzdHJ1Y3Qgd3hfcmluZyAqcnhfcmluZ1s2NF07XG4rXHRzdHJ1Y3Qgd3hfcmluZyBfX3JjdSAqdHhfcmluZ1s2NF0gX19fX2NhY2hlbGluZV9hbGlnbmVkX2luX3NtcDtcbitcdHN0cnVjdCB3eF9yaW5nIF9fcmN1ICpyeF9yaW5nWzY0XTtcbiBcdHN0cnVjdCB3eF9xX3ZlY3RvciAqcV92ZWN0b3JbNjRdO1xuIFx0aW50IG51bV9yeF9wb29scztcbiBcdGludCBudW1fcnhfcXVldWVzX3Blcl9wb29sO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfdmZfY29tbW9uLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X3ZmX2NvbW1vbi5jXG5pbmRleCAyNmRlNzhlOWE2OWVmLi5jODMwODI0YzQ4NjllIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF92Zl9jb21tb24uY1xuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF92Zl9jb21tb24uY1xuQEAgLTIwNSw3ICsyMDUsNyBAQCBzdGF0aWMgdm9pZCB3eF9jb25maWd1cmVfcnhfdmYoc3RydWN0IHd4ICp3eClcbiBcdCAqIHRoZSBCYXNlIGFuZCBMZW5ndGggb2YgdGhlIFJ4IERlc2NyaXB0b3IgUmluZ1xuIFx0ICovXG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyB3eC1cdTAwM2VudW1fcnhfcXVldWVzOyBpKyspIHtcbi1cdFx0c3RydWN0IHd4X3JpbmcgKnJ4X3JpbmcgPSB3eC1cdTAwM2VyeF9yaW5nW2ldO1xuK1x0XHRzdHJ1Y3Qgd3hfcmluZyAqcnhfcmluZyA9IHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQod3gtXHUwMDNlcnhfcmluZ1tpXSwgMSk7XG4gI2lmZGVmIEhBVkVfU1dJT1RMQl9TS0lQX0NQVV9TWU5DXG4gXHRcdHd4X3NldF9yeF9idWZmZXJfbGVuX3ZmKHd4LCByeF9yaW5nKTtcbiAjZW5kaWZcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X3ZmX2xpYi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF92Zl9saWIuY1xuaW5kZXggNzMyNWI0NzVlZTEwYy4uMGUwOWU2NmM2ZGU2ZCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfdmZfbGliLmNcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfdmZfbGliLmNcbkBAIC0xNzUsOCArMTc1LDExIEBAIHZvaWQgd3hfY29uZmlndXJlX3R4X3ZmKHN0cnVjdCB3eCAqd3gpXG4gXHR1MzIgaTtcbiBcbiBcdC8qIFNldHVwIHRoZSBIVyBUeCBIZWFkIGFuZCBUYWlsIGRlc2NyaXB0b3IgcG9pbnRlcnMgKi9cbi1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIHd4LVx1MDAzZW51bV90eF9xdWV1ZXM7IGkrKylcbi1cdFx0d3hfY29uZmlndXJlX3R4X3JpbmdfdmYod3gsIHd4LVx1MDAzZXR4X3JpbmdbaV0pO1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2Mgd3gtXHUwMDNlbnVtX3R4X3F1ZXVlczsgaSsrKSB7XG4rXHRcdHN0cnVjdCB3eF9yaW5nICp0eF9yaW5nID0gcmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZCh3eC1cdTAwM2V0eF9yaW5nW2ldLCAxKTtcbitcbitcdFx0d3hfY29uZmlndXJlX3R4X3JpbmdfdmYod3gsIHR4X3JpbmcpO1xuK1x0fVxuIH1cbiBcbiBzdGF0aWMgdm9pZCB3eF9jb25maWd1cmVfc3JyY3RsX3ZmKHN0cnVjdCB3eCAqd3gsIHN0cnVjdCB3eF9yaW5nICpyaW5nLFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX2V0aHRvb2wuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX2V0aHRvb2wuY1xuaW5kZXggMTk2MGY3MTU0MTUxZC4uOWU5MDcwMmE1MTQ2YSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX2V0aHRvb2wuY1xuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfZXRodG9vbC5jXG5AQCAtMzcsOSArMzcsOSBAQCBzdGF0aWMgaW50IG5nYmVfc2V0X3JpbmdwYXJhbShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxuIFxuIFx0aWYgKCFuZXRpZl9ydW5uaW5nKHd4LVx1MDAzZW5ldGRldikpIHtcbiBcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2Mgd3gtXHUwMDNlbnVtX3R4X3F1ZXVlczsgaSsrKVxuLVx0XHRcdHd4LVx1MDAzZXR4X3JpbmdbaV0tXHUwMDNlY291bnQgPSBuZXdfdHhfY291bnQ7XG4rXHRcdFx0cmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZCh3eC1cdTAwM2V0eF9yaW5nW2ldLCAxKS1cdTAwM2Vjb3VudCA9IG5ld190eF9jb3VudDtcbiBcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2Mgd3gtXHUwMDNlbnVtX3J4X3F1ZXVlczsgaSsrKVxuLVx0XHRcdHd4LVx1MDAzZXJ4X3JpbmdbaV0tXHUwMDNlY291bnQgPSBuZXdfcnhfY291bnQ7XG4rXHRcdFx0cmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZCh3eC1cdTAwM2VyeF9yaW5nW2ldLCAxKS1cdTAwM2Vjb3VudCA9IG5ld19yeF9jb3VudDtcbiBcdFx0d3gtXHUwMDNldHhfcmluZ19jb3VudCA9IG5ld190eF9jb3VudDtcbiBcdFx0d3gtXHUwMDNlcnhfcmluZ19jb3VudCA9IG5ld19yeF9jb3VudDtcbiBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9tYWluLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9tYWluLmNcbmluZGV4IDg1NWRjOTYzYzYxMGMuLmU0NWQ3ZGZkYzlmOTAgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9tYWluLmNcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX21haW4uY1xuQEAgLTQwNiw3ICs0MDYsNyBAQCBzdGF0aWMgdm9pZCBuZ2JlX2Rpc2FibGVfZGV2aWNlKHN0cnVjdCB3eCAqd3gpXG4gXHQvKiBkaXNhYmxlIGFsbCBlbmFibGVkIHJ4IHF1ZXVlcyAqL1xuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2Mgd3gtXHUwMDNlbnVtX3J4X3F1ZXVlczsgaSsrKVxuIFx0XHQvKiB0aGlzIGNhbGwgYWxzbyBmbHVzaGVzIHRoZSBwcmV2aW91cyB3cml0ZSAqL1xuLVx0XHR3eF9kaXNhYmxlX3J4X3F1ZXVlKHd4LCB3eC1cdTAwM2VyeF9yaW5nW2ldKTtcbitcdFx0d3hfZGlzYWJsZV9yeF9xdWV1ZSh3eCwgcmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZCh3eC1cdTAwM2VyeF9yaW5nW2ldLCAxKSk7XG4gXHQvKiBkaXNhYmxlIHJlY2VpdmVzICovXG4gXHR3eF9kaXNhYmxlX3J4KHd4KTtcbiBcdHd4X25hcGlfZGlzYWJsZV9hbGwod3gpO1xuQEAgLTQyMiw3ICs0MjIsNyBAQCBzdGF0aWMgdm9pZCBuZ2JlX2Rpc2FibGVfZGV2aWNlKHN0cnVjdCB3eCAqd3gpXG4gXHR3eF9pcnFfZGlzYWJsZSh3eCk7XG4gXHQvKiBkaXNhYmxlIHRyYW5zbWl0cyBpbiB0aGUgaGFyZHdhcmUgbm93IHRoYXQgaW50ZXJydXB0cyBhcmUgb2ZmICovXG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyB3eC1cdTAwM2VudW1fdHhfcXVldWVzOyBpKyspIHtcbi1cdFx0dTggcmVnX2lkeCA9IHd4LVx1MDAzZXR4X3JpbmdbaV0tXHUwMDNlcmVnX2lkeDtcbitcdFx0dTggcmVnX2lkeCA9IHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQod3gtXHUwMDNldHhfcmluZ1tpXSwgMSktXHUwMDNlcmVnX2lkeDtcbiBcbiBcdFx0d3IzMih3eCwgV1hfUFhfVFJfQ0ZHKHJlZ19pZHgpLCBXWF9QWF9UUl9DRkdfU1dGTFNIKTtcbiBcdH1cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX2V0aHRvb2wuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfZXRodG9vbC5jXG5pbmRleCAzZTMyYWNhNzI4MDY1Li5mY2ZhZjZmMmY1NDRhIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9ldGh0b29sLmNcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfZXRodG9vbC5jXG5AQCAtNjEsOSArNjEsOSBAQCBzdGF0aWMgaW50IHR4Z2JlX3NldF9yaW5ncGFyYW0oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcbiBcbiBcdGlmICghbmV0aWZfcnVubmluZyh3eC1cdTAwM2VuZXRkZXYpKSB7XG4gXHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHd4LVx1MDAzZW51bV90eF9xdWV1ZXM7IGkrKylcbi1cdFx0XHR3eC1cdTAwM2V0eF9yaW5nW2ldLVx1MDAzZWNvdW50ID0gbmV3X3R4X2NvdW50O1xuK1x0XHRcdHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQod3gtXHUwMDNldHhfcmluZ1tpXSwgMSktXHUwMDNlY291bnQgPSBuZXdfdHhfY291bnQ7XG4gXHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHd4LVx1MDAzZW51bV9yeF9xdWV1ZXM7IGkrKylcbi1cdFx0XHR3eC1cdTAwM2VyeF9yaW5nW2ldLVx1MDAzZWNvdW50ID0gbmV3X3J4X2NvdW50O1xuK1x0XHRcdHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQod3gtXHUwMDNlcnhfcmluZ1tpXSwgMSktXHUwMDNlY291bnQgPSBuZXdfcnhfY291bnQ7XG4gXHRcdHd4LVx1MDAzZXR4X3JpbmdfY291bnQgPSBuZXdfdHhfY291bnQ7XG4gXHRcdHd4LVx1MDAzZXJ4X3JpbmdfY291bnQgPSBuZXdfcnhfY291bnQ7XG4gXG5AQCAtMzY2LDcgKzM2Niw3IEBAIHN0YXRpYyBpbnQgdHhnYmVfYWRkX2V0aHRvb2xfZmRpcl9lbnRyeShzdHJ1Y3QgdHhnYmUgKnR4Z2JlLFxuIFxuIFx0XHQvKiBNYXAgdGhlIHJpbmcgb250byB0aGUgYWJzb2x1dGUgcXVldWUgaW5kZXggKi9cbiBcdFx0aWYgKCF2Zilcbi1cdFx0XHRxdWV1ZSA9IHd4LVx1MDAzZXJ4X3JpbmdbcmluZ10tXHUwMDNlcmVnX2lkeDtcbitcdFx0XHRxdWV1ZSA9IHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQod3gtXHUwMDNlcnhfcmluZ1tyaW5nXSwgMSktXHUwMDNlcmVnX2lkeDtcbiBcdFx0ZWxzZVxuIFx0XHRcdHF1ZXVlID0gKCh2ZiAtIDEpICogd3gtXHUwMDNlbnVtX3J4X3F1ZXVlc19wZXJfcG9vbCkgKyByaW5nO1xuIFx0fVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfZmRpci5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9mZGlyLmNcbmluZGV4IGE4NDAxMDgyODU1MTcuLjYwYzhlYTQ3NzgyN2QgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX2ZkaXIuY1xuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9mZGlyLmNcbkBAIC01OTksNyArNTk5LDcgQEAgc3RhdGljIHZvaWQgdHhnYmVfZmRpcl9maWx0ZXJfcmVzdG9yZShzdHJ1Y3Qgd3ggKnd4KVxuIFx0XHRcdH1cbiBcbiBcdFx0XHQvKiBNYXAgdGhlIHJpbmcgb250byB0aGUgYWJzb2x1dGUgcXVldWUgaW5kZXggKi9cbi1cdFx0XHRxdWV1ZSA9IHd4LVx1MDAzZXJ4X3JpbmdbcmluZ10tXHUwMDNlcmVnX2lkeDtcbitcdFx0XHRxdWV1ZSA9IHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQod3gtXHUwMDNlcnhfcmluZ1tyaW5nXSwgMSktXHUwMDNlcmVnX2lkeDtcbiBcdFx0fVxuIFxuIFx0XHRyZXQgPSB0eGdiZV9mZGlyX3dyaXRlX3BlcmZlY3RfZmlsdGVyKHd4LFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfbWFpbi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9tYWluLmNcbmluZGV4IGViOTFjNGYyOGVjZDQuLjUzNjEzNjBmN2M2ZWUgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX21haW4uY1xuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9tYWluLmNcbkBAIC0yMzksNyArMjM5LDcgQEAgc3RhdGljIHZvaWQgdHhnYmVfZGlzYWJsZV9kZXZpY2Uoc3RydWN0IHd4ICp3eClcbiBcdC8qIGRpc2FibGUgYWxsIGVuYWJsZWQgcnggcXVldWVzICovXG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyB3eC1cdTAwM2VudW1fcnhfcXVldWVzOyBpKyspXG4gXHRcdC8qIHRoaXMgY2FsbCBhbHNvIGZsdXNoZXMgdGhlIHByZXZpb3VzIHdyaXRlICovXG4tXHRcdHd4X2Rpc2FibGVfcnhfcXVldWUod3gsIHd4LVx1MDAzZXJ4X3JpbmdbaV0pO1xuK1x0XHR3eF9kaXNhYmxlX3J4X3F1ZXVlKHd4LCByY3VfZGVyZWZlcmVuY2VfcHJvdGVjdGVkKHd4LVx1MDAzZXJ4X3JpbmdbaV0sIDEpKTtcbiBcbiBcdG5ldGlmX3R4X3N0b3BfYWxsX3F1ZXVlcyhuZXRkZXYpO1xuIFx0bmV0aWZfdHhfZGlzYWJsZShuZXRkZXYpO1xuQEAgLTI3NSw3ICsyNzUsNyBAQCBzdGF0aWMgdm9pZCB0eGdiZV9kaXNhYmxlX2RldmljZShzdHJ1Y3Qgd3ggKnd4KVxuIFxuIFx0LyogZGlzYWJsZSB0cmFuc21pdHMgaW4gdGhlIGhhcmR3YXJlIG5vdyB0aGF0IGludGVycnVwdHMgYXJlIG9mZiAqL1xuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2Mgd3gtXHUwMDNlbnVtX3R4X3F1ZXVlczsgaSsrKSB7XG4tXHRcdHU4IHJlZ19pZHggPSB3eC1cdTAwM2V0eF9yaW5nW2ldLVx1MDAzZXJlZ19pZHg7XG4rXHRcdHU4IHJlZ19pZHggPSByY3VfZGVyZWZlcmVuY2VfcHJvdGVjdGVkKHd4LVx1MDAzZXR4X3JpbmdbaV0sIDEpLVx1MDAzZXJlZ19pZHg7XG4gXG4gXHRcdHdyMzIod3gsIFdYX1BYX1RSX0NGRyhyZWdfaWR4KSwgV1hfUFhfVFJfQ0ZHX1NXRkxTSCk7XG4gXHR9XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxMTowNTo0My4zNzA0MjUwNDlaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozMDEwMjg0ODE2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIFBhdGNoIGZvciBTeXprYWxsZXIgRnV6emluZyoqXG5cbk9rYXksIHRoZSB1c2VyJ3MgZ2l2ZW4gbWUgYSBwYXRjaCwgYW5kIG15IGZpcnN0IHRob3VnaHQgaXMsIFwiUmlnaHQsIHRpbWUgdG8gc2VlIHdoYXQgdGhpcyB0aGluZydzIHRvdWNoaW5nLlwiIExldCdzIHN0YXJ0IHdpdGggYSBmaWxlIGxpc3Rpbmcg4oCTIHRoZSBjaGFuZ2VzIGFyZSBjb25jZW50cmF0ZWQgd2l0aGluIHRoZSBgd2FuZ3h1bmAgZXRoZXJuZXQgZHJpdmVyIHN1YnN5c3RlbS4gVGhlIGZpbGVzIGhpdCBzdWdnZXN0IG1vZGlmaWNhdGlvbnMgYWNyb3NzIHNldmVyYWwgYXJlYXM6IGVycm9yIGhhbmRsaW5nLCBldGh0b29sIGludGVncmF0aW9uLCBoYXJkd2FyZSBhY2Nlc3MsIGFuZCB2YXJpb3VzIGxpYnJhcnkgZnVuY3Rpb25zIHdpdGhpbiB0aGUgYGxpYnd4YCBkaXJlY3RvcnksIGFsb25nIHdpdGggYG5nYmVgIGFuZCBgdHhnYmVgIHdoaWNoIHNlZW0gbGlrZSBzcGVjaWZpYyBkcml2ZXIgaW1wbGVtZW50YXRpb25zLlxuXG5Ob3csIEkgbmVlZCB0byBnZXQgYSBiZXR0ZXIgaGFuZGxlIG9uIHdoYXQgYHdhbmd4dW5gIGFjdHVhbGx5ICppcyouIFRoaXMgbG9va3MgbGlrZSBzb21lIHNvcnQgb2YgRXRoZXJuZXQgY29udHJvbGxlciBvciBOSUMuIEknbSBndWVzc2luZyBpdCdzIGxpa2VseSBHYkUgb3IgMTBHYkUgUENJIG5ldHdvcmsgaW50ZXJmYWNlIGNhcmRzIGJhc2VkIG9uIHRoZSBkcml2ZXIgbmFtZXMsIGJ1dCBJIG5lZWQgY29uZmlybWF0aW9uLiBMZXQncyBzZWUgaWYgSSBjYW4gZmluZCBtb3JlIGNvbnRleHQgd2l0aGluIHRoZSBLY29uZmlnIGZpbGVzLCBvciBwZXJoYXBzIGEgcXVpY2sgc2VhcmNoIHRocm91Z2ggdGhlIHNvdXJjZSBjb2RlIGl0c2VsZiwgdG8gdW5kZXJzdGFuZCB0aGUgaGFyZHdhcmUuIFRoaXMgd2lsbCBnaXZlIG1lIGEgYmV0dGVyIGdyYXNwIG9mIHRoZSBwb3RlbnRpYWwgYXR0YWNrIHN1cmZhY2UgYW5kIHdoZXRoZXIgaXQncyB3b3J0aCBhbGxvY2F0aW5nIHRoZSByZXNvdXJjZXMgdG8gZnV6ei5cblxuXG4iLCJJbnB1dFRva2VucyI6MTMxNDAsIk91dHB1dFRva2VucyI6NDMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNzAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxMTowNTo0Ni4zODA3MTIwNDVaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDY2Mjg2MDYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIChOR0JFfFRYR0JFfExJQldYKVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vS2NvbmZpZz0xNz1pZiBORVRfVkVORE9SX1dBTkdYVU5cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL0tjb25maWctMTgtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9LY29uZmlnOjE5OmNvbmZpZyBMSUJXWFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vS2NvbmZpZy0yMC1cXHR0cmlzdGF0ZVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9LY29uZmlnLTI3LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vS2NvbmZpZzoyODpjb25maWcgTkdCRVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vS2NvbmZpZy0yOS1cXHR0cmlzdGF0ZSBcXFwiV2FuZ3h1bihSKSBHYkUgUENJIEV4cHJlc3MgYWRhcHRlcnMgc3VwcG9ydFxcXCJcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vS2NvbmZpZy00Mi1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL0tjb25maWc6NDM6Y29uZmlnIFRYR0JFXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9LY29uZmlnLTQ0LVxcdHRyaXN0YXRlIFxcXCJXYW5neHVuKFIpIDEwLzI1LzQwR2JFIFBDSSBFeHByZXNzIGFkYXB0ZXJzIHN1cHBvcnRcXFwiXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL0tjb25maWctNjYtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9LY29uZmlnOjY3OmNvbmZpZyBUWEdCRVZGXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9LY29uZmlnLTY4LVxcdHRyaXN0YXRlIFxcXCJXYW5neHVuKFIpIDEwLzI1LzQwRyBWaXJ0dWFsIEZ1bmN0aW9uIEV0aGVybmV0IHN1cHBvcnRcXFwiXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL0tjb25maWctODQtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9LY29uZmlnOjg1OmNvbmZpZyBOR0JFVkZcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL0tjb25maWctODYtXFx0dHJpc3RhdGUgXFxcIldhbmd4dW4oUikgR2JFIFZpcnR1YWwgRnVuY3Rpb24gRXRoZXJuZXQgc3VwcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTE6MDU6NDYuNDI3MzQ2MzMxWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzIxMDIxNjQ3OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBXYW5neHVuIE5JQyBEcml2ZXIgU2l0dWF0aW9uKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBTZWN0aW9uIDIgb2YgdGhlIGluc3RydWN0aW9ucyBoaWdobGlnaHRzIFwiU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlLlwiIFNwZWNpZmljYWxseSwgaXQgbWVudGlvbnMgdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgYW5kIEdQVSBkcml2ZXJzIGxpa2UgYG1seHN3YCwgYHBkc19jb3JlYCwgYHFlZGAsIGBpb25pY2AsIGFuZCBgYW1kZ3B1YC4gVGhlc2UgYWxsIHJlcXVpcmUgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzLCB3aGljaCBhcmUgKm5vdCogZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4gTXkgaW5pdGlhbCByZWFkIG9mIHRoaXMgc3VnZ2VzdHMgV2FuZ3h1biBOSUNzIGZhbGwgaW50byB0aGlzIGNhdGVnb3J5LCBidXQgbGV0J3MgYmUgc3VyZS5cblxuV2FuZ3h1biAoc3BlY2lmaWNhbGx5IHRoZSBkcml2ZXJzIGBsaWJ3eGAsIGBuZ2JlYCwgYHR4Z2JlYCwgYG5nYmV2ZmAsIGFuZCBgdHhnYmV2ZmApIGFyZSBjbGVhcmx5IGV0aGVybmV0IGRyaXZlcnMgZGVzaWduZWQgZm9yIFdhbmd4dW4gR2JFIC8gMTBHYkUgLyAyNUdiRSAvIDQwR2JFIGFkYXB0ZXJzLiBNeSB1bmRlcnN0YW5kaW5nIGlzIHRoYXQgdGhlc2UgYXJlICpwaHlzaWNhbCogUENJIE5JQ3MuIEkga25vdyB0aGF0IHN0YW5kYXJkIFFFTVUgbmV0d29yayBjYXJkIGVtdWxhdGlvbnMgaW5jbHVkZSBgZTEwMDBgLCBgZTEwMDBlYCwgYHJ0bDgxMzlgLCBgdmlydGlvLW5ldGAsIGBwY25ldGAsIGBuZTJrX3BjaWAsIGB2bXhuZXQzYCwgYW5kIGBpZ2JgLiBTbywgV2FuZ3h1biBpcyAqZGVmaW5pdGVseSogbm90IG9uZSBvZiB0aG9zZSBlbXVsYXRlZCBvcHRpb25zLiBHQ0UgaXNuJ3QgcmVsZXZhbnQgaGVyZS5cblxuTm93LCBqdXN0IHRvIGJlIGFic29sdXRlbHkgdGhvcm91Z2gsIEkgd2FudCB0byBydWxlIG91dCB0aGUgcG9zc2liaWxpdHkgb2YgYW55IHZpcnR1YWwgb3Igc29mdHdhcmUtZW11bGF0ZWQgY29tcG9uZW50cyB3aXRoaW4gdGhlIFdhbmd4dW4gYXJjaGl0ZWN0dXJlLCBvciBhbnkgY29yZSBzdWJzeXN0ZW0gc3VwcG9ydC4gVGhlIGBkcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL0tjb25maWdgIGZpbGUgaW4gdGhlIGtlcm5lbCBzb3VyY2UgaXMgd2hlcmUgSSdsbCBmaW5kIHRoYXQuIEknbSBnb2luZyB0byBwdWxsIHRoYXQgdXAgYW5kIHNlZSBpZiB0aGVyZSBhcmUgYW55IGhpbnRzIG9mIGEgbW9yZSBhYnN0cmFjdCBsYXllciBvciBkZXBlbmRlbmNpZXMuIEkgbmVlZCB0byBiZSBjZXJ0YWluIHRoZXJlJ3Mgbm8gdmlydHVhbCBjb21wb25lbnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0MjIyLCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjY2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDExOjA1OjQ5LjYzNzU2NTg4MVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc2MTAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiAxMDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4gICAyOlxcdCNcXG4gICAzOlxcdCMgV2FuZ3h1biBuZXR3b3JrIGRldmljZSBjb25maWd1cmF0aW9uXFxuICAgNDpcXHQjXFxuICAgNTpcXHRcXG4gICA2OlxcdGNvbmZpZyBORVRfVkVORE9SX1dBTkdYVU5cXG4gICA3OlxcdFxcdGJvb2wgXFxcIldhbmd4dW4gZGV2aWNlc1xcXCJcXG4gICA4OlxcdFxcdGRlZmF1bHQgeVxcbiAgIDk6XFx0XFx0aGVscFxcbiAgMTA6XFx0XFx0ICBJZiB5b3UgaGF2ZSBhIG5ldHdvcmsgKEV0aGVybmV0KSBjYXJkIGZyb20gV2FuZ3h1bihSKSwgc2F5IFkuXFxuICAxMTpcXHRcXG4gIDEyOlxcdFxcdCAgTm90ZSB0aGF0IHRoZSBhbnN3ZXIgdG8gdGhpcyBxdWVzdGlvbiBkb2Vzbid0IGRpcmVjdGx5IGFmZmVjdCB0aGVcXG4gIDEzOlxcdFxcdCAga2VybmVsOiBzYXlpbmcgTiB3aWxsIGp1c3QgY2F1c2UgdGhlIGNvbmZpZ3VyYXRvciB0byBza2lwIGFsbFxcbiAgMTQ6XFx0XFx0ICB0aGUgcXVlc3Rpb25zIGFib3V0IFdhbmd4dW4oUikgY2FyZHMuIElmIHlvdSBzYXkgWSwgeW91IHdpbGxcXG4gIDE1OlxcdFxcdCAgYmUgYXNrZWQgZm9yIHlvdXIgc3BlY2lmaWMgY2FyZCBpbiB0aGUgZm9sbG93aW5nIHF1ZXN0aW9ucy5cXG4gIDE2OlxcdFxcbiAgMTc6XFx0aWYgTkVUX1ZFTkRPUl9XQU5HWFVOXFxuICAxODpcXHRcXG4gIDE5OlxcdGNvbmZpZyBMSUJXWFxcbiAgMjA6XFx0XFx0dHJpc3RhdGVcXG4gIDIxOlxcdFxcdGRlcGVuZHMgb24gUFRQXzE1ODhfQ0xPQ0tfT1BUSU9OQUxcXG4gIDIyOlxcdFxcdHNlbGVjdCBQQUdFX1BPT0xcXG4gIDIzOlxcdFxcdHNlbGVjdCBESU1MSUJcXG4gIDI0OlxcdFxcdHNlbGVjdCBQSFlMSU5LXFxuICAyNTpcXHRcXHRoZWxwXFxuICAyNjpcXHRcXHRDb21tb24gbGlicmFyeSBmb3IgV2FuZ3h1bihSKSBFdGhlcm5ldCBkcml2ZXJzLlxcbiAgMjc6XFx0XFxuICAyODpcXHRjb25maWcgTkdCRVxcbiAgMjk6XFx0XFx0dHJpc3RhdGUgXFxcIldhbmd4dW4oUikgR2JFIFBDSSBFeHByZXNzIGFkYXB0ZXJzIHN1cHBvcnRcXFwiXFxuICAzMDpcXHRcXHRkZXBlbmRzIG9uIFBDSVxcbiAgMzE6XFx0XFx0ZGVwZW5kcyBvbiBQVFBfMTU4OF9DTE9DS19PUFRJT05BTFxcbiAgMzI6XFx0XFx0c2VsZWN0IExJQldYXFxuICAzMzpcXHRcXHRoZWxwXFxuICAzNDpcXHRcXHQgIFRoaXMgZHJpdmVyIHN1cHBvcnRzIFdhbmd4dW4oUikgR2JFIFBDSSBFeHByZXNzIGZhbWlseSBvZlxcbiAgMzU6XFx0XFx0ICBhZGFwdGVycy5cXG4gIDM2OlxcdFxcbiAgMzc6XFx0XFx0ICBNb3JlIHNwZWNpZmljIGluZm9ybWF0aW9uIG9uIGNvbmZpZ3VyaW5nIHRoZSBkcml2ZXIgaXMgaW5cXG4gIDM4OlxcdFxcdCAgXFx1MDAzY2ZpbGU6RG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2RldmljZV9kcml2ZXJzL2V0aGVybmV0L3dhbmd4dW4vbmdiZS5yc3RcXHUwMDNlLlxcbiAgMzk6XFx0XFxuICA0MDpcXHRcXHQgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmUuIFRoZSBtb2R1bGVcXG4gIDQxOlxcdFxcdCAgd2lsbCBiZSBjYWxsZWQgbmdiZS5cXG4gIDQyOlxcdFxcbiAgNDM6XFx0Y29uZmlnIFRYR0JFXFxuICA0NDpcXHRcXHR0cmlzdGF0ZSBcXFwiV2FuZ3h1bihSKSAxMC8yNS80MEdiRSBQQ0kgRXhwcmVzcyBhZGFwdGVycyBzdXBwb3J0XFxcIlxcbiAgNDU6XFx0XFx0ZGVwZW5kcyBvbiBQQ0lcXG4gIDQ2OlxcdFxcdGRlcGVuZHMgb24gQ09NTU9OX0NMS1xcbiAgNDc6XFx0XFx0ZGVwZW5kcyBvbiBJMkNfREVTSUdOV0FSRV9QTEFURk9STVxcbiAgNDg6XFx0XFx0ZGVwZW5kcyBvbiBQVFBfMTU4OF9DTE9DS19PUFRJT05BTFxcbiAgNDk6XFx0XFx0c2VsZWN0IE1BUlZFTExfMTBHX1BIWVxcbiAgNTA6XFx0XFx0c2VsZWN0IFJFR01BUFxcbiAgNTE6XFx0XFx0c2VsZWN0IEhXTU9OIGlmIFRYR0JFPXlcXG4gIDUyOlxcdFxcdHNlbGVjdCBTRlBcXG4gIDUzOlxcdFxcdHNlbGVjdCBHUElPTElCXFxuICA1NDpcXHRcXHRzZWxlY3QgR1BJT0xJQl9JUlFDSElQXFxuICA1NTpcXHRcXHRzZWxlY3QgUENTX1hQQ1NcXG4gIDU2OlxcdFxcdHNlbGVjdCBMSUJXWFxcbiAgNTc6XFx0XFx0aGVscFxcbiAgNTg6XFx0XFx0ICBUaGlzIGRyaXZlciBzdXBwb3J0cyBXYW5neHVuKFIpIDEwLzI1LzQwR2JFIFBDSSBFeHByZXNzIGZhbWlseSBvZlxcbiAgNTk6XFx0XFx0ICBhZGFwdGVycy5cXG4gIDYwOlxcdFxcbiAgNjE6XFx0XFx0ICBNb3JlIHNwZWNpZmljIGluZm9ybWF0aW9uIG9uIGNvbmZpZ3VyaW5nIHRoZSBkcml2ZXIgaXMgaW5cXG4gIDYyOlxcdFxcdCAgXFx1MDAzY2ZpbGU6RG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2RldmljZV9kcml2ZXJzL2V0aGVybmV0L3dhbmd4dW4vdHhnYmUucnN0XFx1MDAzZS5cXG4gIDYzOlxcdFxcbiAgNjQ6XFx0XFx0ICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlLiBUaGUgbW9kdWxlXFxuICA2NTpcXHRcXHQgIHdpbGwgYmUgY2FsbGVkIHR4Z2JlLlxcbiAgNjY6XFx0XFxuICA2NzpcXHRjb25maWcgVFhHQkVWRlxcbiAgNjg6XFx0XFx0dHJpc3RhdGUgXFxcIldhbmd4dW4oUikgMTAvMjUvNDBHIFZpcnR1YWwgRnVuY3Rpb24gRXRoZXJuZXQgc3VwcG9ydFxcXCJcXG4gIDY5OlxcdFxcdGRlcGVuZHMgb24gUENJXFxuICA3MDpcXHRcXHRkZXBlbmRzIG9uIFBDSV9NU0lcXG4gIDcxOlxcdFxcdGRlcGVuZHMgb24gUFRQXzE1ODhfQ0xPQ0tfT1BUSU9OQUxcXG4gIDcyOlxcdFxcdHNlbGVjdCBMSUJXWFxcbiAgNzM6XFx0XFx0aGVscFxcbiAgNzQ6XFx0XFx0ICBUaGlzIGRyaXZlciBzdXBwb3J0cyB2aXJ0dWFsIGZ1bmN0aW9ucyBmb3IgU1AxMDAwQSwgV1gxODIwQUwsXFxuICA3NTpcXHRcXHQgIFdYNVhYWCwgV1g1WFhYQUwuXFxuICA3NjpcXHRcXG4gIDc3OlxcdFxcdCAgVGhpcyBkcml2ZXIgd2FzIGZvcm1lcmx5IG5hbWVkIHR4Z2JldmYuXFxuICA3ODpcXHRcXG4gIDc5OlxcdFxcdCAgTW9yZSBzcGVjaWZpYyBpbmZvcm1hdGlvbiBvbiBjb25maWd1cmluZyB0aGUgZHJpdmVyIGlzIGluXFxuICA4MDpcXHRcXHQgIFxcdTAwM2NmaWxlOkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9kZXZpY2VfZHJpdmVycy9ldGhlcm5ldC93YW5neHVuL3R4Z2JldmYucnN0XFx1MDAzZS5cXG4gIDgxOlxcdFxcbiAgODI6XFx0XFx0ICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlLiBNU0ktWCBpbnRlcnJ1cHRcXG4gIDgzOlxcdFxcdCAgc3VwcG9ydCBpcyByZXF1aXJlZCBmb3IgdGhpcyBkcml2ZXIgdG8gd29yayBjb3JyZWN0bHkuXFxuICA4NDpcXHRcXG4gIDg1OlxcdGNvbmZpZyBOR0JFVkZcXG4gIDg2OlxcdFxcdHRyaXN0YXRlIFxcXCJXYW5neHVuKFIpIEdiRSBWaXJ0dWFsIEZ1bmN0aW9uIEV0aGVybmV0IHN1cHBvcnRcXFwiXFxuICA4NzpcXHRcXHRkZXBlbmRzIG9uIFBDSV9NU0lcXG4gIDg4OlxcdFxcdGRlcGVuZHMgb24gUFRQXzE1ODhfQ0xPQ0tfT1BUSU9OQUxcXG4gIDg5OlxcdFxcdHNlbGVjdCBMSUJXWFxcbiAgOTA6XFx0XFx0aGVscFxcbiAgOTE6XFx0XFx0ICBUaGlzIGRyaXZlciBzdXBwb3J0cyB2aXJ0dWFsIGZ1bmN0aW9ucyBmb3IgV1gxODYwLCBXWDE4NjBBTC5cXG4gIDkyOlxcdFxcbiAgOTM6XFx0XFx0ICBUaGlzIGRyaXZlciB3YXMgZm9ybWVybHkgbmFtZWQgbmdiZXZmLlxcbiAgOTQ6XFx0XFxuICA5NTpcXHRcXHQgIE1vcmUgc3BlY2lmaWMgaW5mb3JtYXRpb24gb24gY29uZmlndXJpbmcgdGhlIGRyaXZlciBpcyBpblxcbiAgOTY6XFx0XFx0ICBcXHUwMDNjZmlsZTpEb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZGV2aWNlX2RyaXZlcnMvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JldmYucnN0XFx1MDAzZS5cXG4gIDk3OlxcdFxcbiAgOTg6XFx0XFx0ICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlLiBNU0ktWCBpbnRlcnJ1cHRcXG4gIDk5OlxcdFxcdCAgc3VwcG9ydCBpcyByZXF1aXJlZCBmb3IgdGhpcyBkcml2ZXIgdG8gd29yayBjb3JyZWN0bHkuXFxuIDEwMDpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTE6MDU6NDkuNjM3NjQ2MDIxWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NjYxMTM1NzE2NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBXYW5neHVuIE5ldHdvcmsgRHJpdmVyIFBhdGNoKipcblxuT2theSwgbGV0IG1lIGJyZWFrIHRoaXMgZG93bi4gQWxsIHRoZXNlIG1vZGlmaWVkIGZpbGVzIGFyZSBuZXN0bGVkIHVuZGVyIGBkcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2AsIGFuZCB0aGV5J3JlIGFsbCBkaXJlY3RseSByZWxhdGVkIHRvIHRoZSBXYW5neHVuIFBDSWUgbmV0d29yayBhZGFwdGVyIGRyaXZlcnMuIFdlJ3JlIGxvb2tpbmcgYXQgY29kZSBmb3IgdGhlIGNvbW1vbiBgbGlid3hgIGxpYnJhcnksIHRoZSBOR0JFIGFuZCBUWEdCRSBkcml2ZXJzLCBhbmQgdGhlaXIgYXNzb2NpYXRlZCBTUi1JT1YgVmlydHVhbCBGdW5jdGlvbnMuIFJpZ2h0IGF3YXksIG15IGludGVybmFsIGFsYXJtcyBhcmUgZ29pbmcgb2ZmLlxuXG5JIGtub3cgdGhlc2UgZHJpdmVycyBhcmUgKipoYXJkd2FyZS1kZXBlbmRlbnQqKi4gVGhleSdyZSBkZXNpZ25lZCB0byB3b3JrIHdpdGggc3BlY2lmaWMgV2FuZ3h1biBQQ0llIGhhcmR3YXJlIOKAkyBTUDEwMDAsIFdYMTgyMCwgV1gxODYwLCBhbmQgc28gb24uIENyaXRpY2FsbHksIGFuZCB0aGlzIGlzIHRoZSBjcnV4IG9mIHRoZSBpc3N1ZSwgdGhpcyBoYXJkd2FyZSAqaXNuJ3QqIGVtdWxhdGVkIGluIHN0YW5kYXJkIGZ1enppbmcgZW52aXJvbm1lbnRzIGxpa2UgUUVNVSBvciBHb29nbGUgQ29tcHV0ZSBFbmdpbmUuIFRoYXQgbWVhbnMgYW55IGNoYW5nZXMgaGVyZSBhcmUgZXNzZW50aWFsbHkgZ29pbmcgdG8gYmUgaW52aXNpYmxlIHRvIGEgdHlwaWNhbCBzeXprYWxsZXIgc2V0dXAuXG5cbk5vdywgcmVmZXJyaW5nIGJhY2sgdG8gdGhlIFwiTmVnYXRpdmUgQ3JpdGVyaWFcIiBvdXRsaW5lZCBpbiBTZWN0aW9uIDIsIHRoZSBzaXR1YXRpb24gaXMgY2xlYXIuIFRoaXMgY29kZSBmYWxscyB1bmRlciBcInN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZVwiLiBJdCdzIHNpbWlsYXIgdG8gdGhvc2Ugb3RoZXIgdmVuZG9yLXNwZWNpZmljIFBDSWUgZHJpdmVycyDigJMgdGhlIG9uZXMgdGhhdCByZXF1aXJlIHNwZWNpZmljIEFTSUNzIG9yIFBDSWUgY2FyZHMsIGFuZCB3ZSBrbm93IHRob3NlIGFyZSBleHBsaWNpdGx5IGV4Y2x1ZGVkIGZyb20gc3RhbmRhcmQgUUVNVS5cblxuVGhlcmVmb3JlLCBmcm9tIGEgZnV6emluZyBwZXJzcGVjdGl2ZSwgdGhpcyBwYXRjaCBpcyBhIGRlYWQgZW5kLiBJIG5lZWQgdG8gZmxhZyBgV29ydGhGdXp6aW5nYCBhcyBgZmFsc2VgLiBUaGVyZSdzIG5vIHBvaW50IGluIHdhc3RpbmcgY3ljbGVzIG9uIGNvZGUgdGhhdCBzeXprYWxsZXIgd29uJ3QgYmUgYWJsZSB0byByZWFjaC4gYEZvY3VzU3ltYm9sc2Agd2lsbCBiZSBhbiBlbXB0eSBsaXN0LCBhbmQgYEVuYWJsZUNvbmZpZ3NgIHdpbGwgYmUgYW4gZW1wdHkgbGlzdCBhcyB3ZWxsLlxuXG5UaGUgYFJlYXNvbmluZ2AgZm9yIHRoaXMgaXMgc3RyYWlnaHRmb3J3YXJkLiBXZSdyZSBkZWFsaW5nIHdpdGggV2FuZ3h1biBFdGhlcm5ldCBOSUMgZHJpdmVycyAobGlid3gsIG5nYmUsIHR4Z2JlKSB0aGF0ICpuZWVkKiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBoYXJkd2FyZSB3aGljaCBpc24ndCBlbXVsYXRlZCBpbiBzdGFuZGFyZCB2aXJ0dWFsIGVudmlyb25tZW50cy4gQ29uc2VxdWVudGx5LCB0aGUgY29kZSBtb2RpZmljYXRpb25zIGFyZSB1bnJlYWNoYWJsZSBieSB0aGUgc3l6a2FsbGVyIGZ1enplciwgd2hpY2ggbWFrZXMgdGhpcyBub3Qgd29ydGggZnV6emluZy5cblxuQWxyaWdodCwgSSdtIHJlYWR5IHRvIGNhbGwgYHNldC1yZXN1bHRzYCB3aXRoIHRoZSBhcHByb3ByaWF0ZSBhcmd1bWVudHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2MzE4LCJPdXRwdXRUb2tlbnMiOjEwNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY0NCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDExOjA1OjU2LjI0OTAwNTU2NVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjIzMjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgY2hhbmdlcyBhcmUgc3RyaWN0bHkgY29uZmluZWQgdG8gdGhlIFdhbmd4dW4gRXRoZXJuZXQgbmV0d29yayBkcml2ZXJzIChsaWJ3eCwgbmdiZSwgdHhnYmUpIHVuZGVyIGRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vLiBUaGVzZSBkcml2ZXJzIHJlcXVpcmUgdmVuZG9yLXNwZWNpZmljIFBDSWUgQVNJQyBoYXJkd2FyZSB0aGF0IGlzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgKFFFTVUvR0NFKSwgbWFraW5nIHRoZSBtb2RpZmllZCBjb2RlIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBmb3Igc3l6a2FsbGVyIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBjaGFuZ2VzIGFyZSBzdHJpY3RseSBjb25maW5lZCB0byB0aGUgV2FuZ3h1biBFdGhlcm5ldCBuZXR3b3JrIGRyaXZlcnMgKGxpYnd4LCBuZ2JlLCB0eGdiZSkgdW5kZXIgZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi8uIFRoZXNlIGRyaXZlcnMgcmVxdWlyZSB2ZW5kb3Itc3BlY2lmaWMgUENJZSBBU0lDIGhhcmR3YXJlIHRoYXQgaXMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyAoUUVNVS9HQ0UpLCBtYWtpbmcgdGhlIG1vZGlmaWVkIGNvZGUgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGZvciBzeXprYWxsZXIgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDExOjA1OjU2LjI0OTAzMTYzNVoiLCJTZXEiOjksIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMTcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowtrf6d[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-09 10:48:47 +0000 UTC FinishedAt: 2026-09-09 11:05:57 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "AI determined the patch has no functional impact", "targets": null, "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDExOjA1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgY2hhbmdlcyBhcmUgc3RyaWN0bHkgY29uZmluZWQgdG8gdGhlIFdhbmd4dW4gRXRoZXJuZXQgbmV0d29yayBkcml2ZXJzIChsaWJ3eCwgbmdiZSwgdHhnYmUpIHVuZGVyIGRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vLiBUaGVzZSBkcml2ZXJzIHJlcXVpcmUgdmVuZG9yLXNwZWNpZmljIFBDSWUgQVNJQyBoYXJkd2FyZSB0aGF0IGlzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgKFFFTVUvR0NFKSwgbWFraW5nIHRoZSBtb2RpZmllZCBjb2RlIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBmb3Igc3l6a2FsbGVyIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDExOjA1PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgNjc0ODNmZmY4NTI1N2VkYTA3NmFjNjkwNWZiZGIwNjI4NDdiZDhkZlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgU2VwIDkgMTE6MDU6NDIgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9lcnIuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfZXJyLmNcbmluZGV4IGI1NmZiZGM5NTlkZWMuLjhlYWRiNGQzYWJjZmYgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2Vyci5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2Vyci5jXG5AQCAtMjAxLDEyICYjNDM7MjAxLDE4IEBAIHN0YXRpYyBib29sIHd4X3JpbmdfdHhfcGVuZGluZyhzdHJ1Y3Qgd3ggKnd4KVxuIHtcbiBcdGludCBpO1xuIFxuJiM0MztcdHJjdV9yZWFkX2xvY2soKTtcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHd4LVx1MDAzZW51bV90eF9xdWV1ZXM7IGkmIzQzOyYjNDM7KSB7XG4tXHRcdHN0cnVjdCB3eF9yaW5nICp0eF9yaW5nID0gd3gtXHUwMDNldHhfcmluZ1tpXTtcbiYjNDM7XHRcdHN0cnVjdCB3eF9yaW5nICp0eF9yaW5nID0gcmN1X2RlcmVmZXJlbmNlKHd4LVx1MDAzZXR4X3JpbmdbaV0pO1xuIFxuLVx0XHRpZiAodHhfcmluZy1cdTAwM2VuZXh0X3RvX3VzZSAhPSB0eF9yaW5nLVx1MDAzZW5leHRfdG9fY2xlYW4pXG4mIzQzO1x0XHRpZiAoIXR4X3JpbmcpXG4mIzQzO1x0XHRcdGNvbnRpbnVlO1xuJiM0MztcdFx0aWYgKHR4X3JpbmctXHUwMDNlbmV4dF90b191c2UgIT0gdHhfcmluZy1cdTAwM2VuZXh0X3RvX2NsZWFuKSB7XG4mIzQzO1x0XHRcdHJjdV9yZWFkX3VubG9jaygpO1xuIFx0XHRcdHJldHVybiB0cnVlO1xuJiM0MztcdFx0fVxuIFx0fVxuJiM0MztcdHJjdV9yZWFkX3VubG9jaygpO1xuIFxuIFx0cmV0dXJuIGZhbHNlO1xuIH1cbkBAIC0yNjQsOCAmIzQzOzI3MCwxNCBAQCBzdGF0aWMgdm9pZCB3eF9kZXRlY3RfdHhfaGFuZyhzdHJ1Y3Qgd3ggKnd4KVxuIFxuIFx0LyogRm9yY2UgZGV0ZWN0aW9uIG9mIGh1bmcgY29udHJvbGxlciAqL1xuIFx0aWYgKG5ldGlmX2NhcnJpZXJfb2sod3gtXHUwMDNlbmV0ZGV2KSkge1xuLVx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyB3eC1cdTAwM2VudW1fdHhfcXVldWVzOyBpJiM0MzsmIzQzOylcbi1cdFx0XHRzZXRfYml0KFdYX1RYX0RFVEVDVF9IQU5HLCB3eC1cdTAwM2V0eF9yaW5nW2ldLVx1MDAzZXN0YXRlKTtcbiYjNDM7XHRcdHJjdV9yZWFkX2xvY2soKTtcbiYjNDM7XHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHd4LVx1MDAzZW51bV90eF9xdWV1ZXM7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRcdHN0cnVjdCB3eF9yaW5nICp0eF9yaW5nID0gcmN1X2RlcmVmZXJlbmNlKHd4LVx1MDAzZXR4X3JpbmdbaV0pO1xuJiM0MztcbiYjNDM7XHRcdFx0aWYgKHR4X3JpbmcpXG4mIzQzO1x0XHRcdFx0c2V0X2JpdChXWF9UWF9ERVRFQ1RfSEFORywgdHhfcmluZy1cdTAwM2VzdGF0ZSk7XG4mIzQzO1x0XHR9XG4mIzQzO1x0XHRyY3VfcmVhZF91bmxvY2soKTtcbiBcdH1cbiB9XG4gXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9ldGh0b29sLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2V0aHRvb2wuY1xuaW5kZXggOTQwZDJlNTk4NzZjNy4uZWFlNTk1MmMwZjVmYyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfZXRodG9vbC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2V0aHRvb2wuY1xuQEAgLTE1NCw4ICYjNDM7MTU0LDkgQEAgdm9pZCB3eF9nZXRfZXRodG9vbF9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxuIFx0XHR9XG4gXHR9XG4gXG4mIzQzO1x0cmN1X3JlYWRfbG9jaygpO1xuIFx0Zm9yIChqID0gMDsgaiBcdTAwM2MgbmV0ZGV2LVx1MDAzZW51bV90eF9xdWV1ZXM7IGomIzQzOyYjNDM7KSB7XG4tXHRcdHJpbmcgPSB3eC1cdTAwM2V0eF9yaW5nW2pdO1xuJiM0MztcdFx0cmluZyA9IHJjdV9kZXJlZmVyZW5jZSh3eC1cdTAwM2V0eF9yaW5nW2pdKTtcbiBcdFx0aWYgKCFyaW5nKSB7XG4gXHRcdFx0ZGF0YVtpJiM0MzsmIzQzO10gPSAwO1xuIFx0XHRcdGRhdGFbaSYjNDM7JiM0MztdID0gMDtcbkBAIC0xNzAsNyAmIzQzOzE3MSw3IEBAIHZvaWQgd3hfZ2V0X2V0aHRvb2xfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcbiBcdFx0aSAmIzQzOz0gMjtcbiBcdH1cbiBcdGZvciAoaiA9IDA7IGogXHUwMDNjIFdYX05VTV9SWF9RVUVVRVM7IGomIzQzOyYjNDM7KSB7XG4tXHRcdHJpbmcgPSB3eC1cdTAwM2VyeF9yaW5nW2pdO1xuJiM0MztcdFx0cmluZyA9IHJjdV9kZXJlZmVyZW5jZSh3eC1cdTAwM2VyeF9yaW5nW2pdKTtcbiBcdFx0aWYgKCFyaW5nKSB7XG4gXHRcdFx0ZGF0YVtpJiM0MzsmIzQzO10gPSAwO1xuIFx0XHRcdGRhdGFbaSYjNDM7JiM0MztdID0gMDtcbkBAIC0xODQsNiAmIzQzOzE4NSw3IEBAIHZvaWQgd3hfZ2V0X2V0aHRvb2xfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcbiBcdFx0fSB3aGlsZSAodTY0X3N0YXRzX2ZldGNoX3JldHJ5KFx1MDAyNnJpbmctXHUwMDNlc3luY3AsIHN0YXJ0KSk7XG4gXHRcdGkgJiM0Mzs9IDI7XG4gXHR9XG4mIzQzO1x0cmN1X3JlYWRfdW5sb2NrKCk7XG4gfVxuIEVYUE9SVF9TWU1CT0wod3hfZ2V0X2V0aHRvb2xfc3RhdHMpO1xuIFxuQEAgLTgwNSw5ICYjNDM7ODA3LDkgQEAgc3RhdGljIGludCB3eF9zZXRfcmluZ3BhcmFtX3ZmKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXG4gXG4gXHRpZiAoIW5ldGlmX3J1bm5pbmcod3gtXHUwMDNlbmV0ZGV2KSkge1xuIFx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyB3eC1cdTAwM2VudW1fdHhfcXVldWVzOyBpJiM0MzsmIzQzOylcbi1cdFx0XHR3eC1cdTAwM2V0eF9yaW5nW2ldLVx1MDAzZWNvdW50ID0gbmV3X3R4X2NvdW50O1xuJiM0MztcdFx0XHRyY3VfZGVyZWZlcmVuY2VfcHJvdGVjdGVkKHd4LVx1MDAzZXR4X3JpbmdbaV0sIDEpLVx1MDAzZWNvdW50ID0gbmV3X3R4X2NvdW50O1xuIFx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyB3eC1cdTAwM2VudW1fcnhfcXVldWVzOyBpJiM0MzsmIzQzOylcbi1cdFx0XHR3eC1cdTAwM2VyeF9yaW5nW2ldLVx1MDAzZWNvdW50ID0gbmV3X3J4X2NvdW50O1xuJiM0MztcdFx0XHRyY3VfZGVyZWZlcmVuY2VfcHJvdGVjdGVkKHd4LVx1MDAzZXJ4X3JpbmdbaV0sIDEpLVx1MDAzZWNvdW50ID0gbmV3X3J4X2NvdW50O1xuIFx0XHR3eC1cdTAwM2V0eF9yaW5nX2NvdW50ID0gbmV3X3R4X2NvdW50O1xuIFx0XHR3eC1cdTAwM2VyeF9yaW5nX2NvdW50ID0gbmV3X3J4X2NvdW50O1xuIFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfaHcuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfaHcuY1xuaW5kZXggMTIyYzQ5NTJkMjAzZi4uYzc4MTM2YWJlOTJmOSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfaHcuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9ody5jXG5AQCAtMTU5OCwxMyAmIzQzOzE1OTgsMTcgQEAgc3RhdGljIHZvaWQgd3hfdmxhbl9zdHJpcF9jb250cm9sKHN0cnVjdCB3eCAqd3gsIGJvb2wgZW5hYmxlKVxuIHtcbiBcdGludCBpLCBqO1xuIFxuJiM0MztcdHJjdV9yZWFkX2xvY2soKTtcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHd4LVx1MDAzZW51bV9yeF9xdWV1ZXM7IGkmIzQzOyYjNDM7KSB7XG4tXHRcdHN0cnVjdCB3eF9yaW5nICpyaW5nID0gd3gtXHUwMDNlcnhfcmluZ1tpXTtcbiYjNDM7XHRcdHN0cnVjdCB3eF9yaW5nICpyaW5nID0gcmN1X2RlcmVmZXJlbmNlKHd4LVx1MDAzZXJ4X3JpbmdbaV0pO1xuIFxuJiM0MztcdFx0aWYgKCFyaW5nKVxuJiM0MztcdFx0XHRjb250aW51ZTtcbiBcdFx0aiA9IHJpbmctXHUwMDNlcmVnX2lkeDtcbiBcdFx0d3IzMm0od3gsIFdYX1BYX1JSX0NGRyhqKSwgV1hfUFhfUlJfQ0ZHX1ZMQU4sXG4gXHRcdCAgICAgIGVuYWJsZSA/IFdYX1BYX1JSX0NGR19WTEFOIDogMCk7XG4gXHR9XG4mIzQzO1x0cmN1X3JlYWRfdW5sb2NrKCk7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIHd4X3ZsYW5fcHJvbWlzY19lbmFibGUoc3RydWN0IHd4ICp3eClcbkBAIC0xNzk3LDcgJiM0MzsxODAxLDcgQEAgc3RhdGljIHZvaWQgd3hfc2V0X3J4X2J1ZmZlcl9sZW4oc3RydWN0IHd4ICp3eClcbiBcdCAqIHRoZSBCYXNlIGFuZCBMZW5ndGggb2YgdGhlIFJ4IERlc2NyaXB0b3IgUmluZ1xuIFx0ICovXG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyB3eC1cdTAwM2VudW1fcnhfcXVldWVzOyBpJiM0MzsmIzQzOykge1xuLVx0XHRyeF9yaW5nID0gd3gtXHUwMDNlcnhfcmluZ1tpXTtcbiYjNDM7XHRcdHJ4X3JpbmcgPSByY3VfZGVyZWZlcmVuY2VfcHJvdGVjdGVkKHd4LVx1MDAzZXJ4X3JpbmdbaV0sIDEpO1xuIFx0XHRyeF9yaW5nLVx1MDAzZXJ4X2J1Zl9sZW4gPSBXWF9SWEJVRkZFUl8ySztcbiAjaWYgKFBBR0VfU0laRSBcdTAwM2MgODE5MilcbiBcdFx0aWYgKHRlc3RfYml0KFdYX0ZMQUdfUlNDX0VOQUJMRUQsIHd4LVx1MDAzZWZsYWdzKSlcbkBAIC0yMDIxLDggJiM0MzsyMDI1LDExIEBAIHN0YXRpYyB2b2lkIHd4X2NvbmZpZ3VyZV90eChzdHJ1Y3Qgd3ggKnd4KVxuIFx0ICAgICAgV1hfVERNX0NUTF9URSwgV1hfVERNX0NUTF9URSk7XG4gXG4gXHQvKiBTZXR1cCB0aGUgSFcgVHggSGVhZCBhbmQgVGFpbCBkZXNjcmlwdG9yIHBvaW50ZXJzICovXG4tXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyB3eC1cdTAwM2VudW1fdHhfcXVldWVzOyBpJiM0MzsmIzQzOylcbi1cdFx0d3hfY29uZmlndXJlX3R4X3Jpbmcod3gsIHd4LVx1MDAzZXR4X3JpbmdbaV0pO1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHd4LVx1MDAzZW51bV90eF9xdWV1ZXM7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRzdHJ1Y3Qgd3hfcmluZyAqdHhfcmluZyA9IHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQod3gtXHUwMDNldHhfcmluZ1tpXSwgMSk7XG4mIzQzO1xuJiM0MztcdFx0d3hfY29uZmlndXJlX3R4X3Jpbmcod3gsIHR4X3JpbmcpO1xuJiM0MztcdH1cbiBcbiBcdHdyMzJtKHd4LCBXWF9UU0NfQlVGX0FFLCBXWF9UU0NfQlVGX0FFX1RIUiwgMHgxMCk7XG4gXG5AQCAtMjI0Nyw4ICYjNDM7MjI1NCwxMSBAQCB2b2lkIHd4X2NvbmZpZ3VyZV9yeChzdHJ1Y3Qgd3ggKnd4KVxuIFx0LyogU2V0dXAgdGhlIEhXIFJ4IEhlYWQgYW5kIFRhaWwgRGVzY3JpcHRvciBQb2ludGVycyBhbmRcbiBcdCAqIHRoZSBCYXNlIGFuZCBMZW5ndGggb2YgdGhlIFJ4IERlc2NyaXB0b3IgUmluZ1xuIFx0ICovXG4tXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyB3eC1cdTAwM2VudW1fcnhfcXVldWVzOyBpJiM0MzsmIzQzOylcbi1cdFx0d3hfY29uZmlndXJlX3J4X3Jpbmcod3gsIHd4LVx1MDAzZXJ4X3JpbmdbaV0pO1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHd4LVx1MDAzZW51bV9yeF9xdWV1ZXM7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRzdHJ1Y3Qgd3hfcmluZyAqcnhfcmluZyA9IHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQod3gtXHUwMDNlcnhfcmluZ1tpXSwgMSk7XG4mIzQzO1xuJiM0MztcdFx0d3hfY29uZmlndXJlX3J4X3Jpbmcod3gsIHJ4X3JpbmcpO1xuJiM0MztcdH1cbiBcbiBcdC8qIEVuYWJsZSBhbGwgcmVjZWl2ZXMsIGRpc2FibGUgc2VjdXJpdHkgZW5naW5lIHByaW9yIHRvIGJsb2NrIHRyYWZmaWMgKi9cbiBcdHJldCA9IHd4X2Rpc2FibGVfc2VjX3J4X3BhdGgod3gpO1xuQEAgLTI4MzgsMTEgJiM0MzsyODQ4LDE3IEBAIGludCB3eF9mY19lbmFibGUoc3RydWN0IHd4ICp3eCwgYm9vbCB0eF9wYXVzZSwgYm9vbCByeF9wYXVzZSlcbiBcdCAqICBhbmQgcGVyZm9ybWFuY2UgcmVhc29ucy5cbiBcdCAqL1xuIFx0aWYgKHd4LVx1MDAzZW51bV9yeF9xdWV1ZXMgXHUwMDNlIDEgXHUwMDI2XHUwMDI2ICF0eF9wYXVzZSkge1xuLVx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyB3eC1cdTAwM2VudW1fcnhfcXVldWVzOyBpJiM0MzsmIzQzOylcbi1cdFx0XHR3eF9lbmFibGVfcnhfZHJvcCh3eCwgd3gtXHUwMDNlcnhfcmluZ1tpXSk7XG4mIzQzO1x0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyB3eC1cdTAwM2VudW1fcnhfcXVldWVzOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0XHRzdHJ1Y3Qgd3hfcmluZyAqcnhfcmluZyA9IHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQod3gtXHUwMDNlcnhfcmluZ1tpXSwgMSk7XG4mIzQzO1xuJiM0MztcdFx0XHR3eF9lbmFibGVfcnhfZHJvcCh3eCwgcnhfcmluZyk7XG4mIzQzO1x0XHR9XG4gXHR9IGVsc2Uge1xuLVx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyB3eC1cdTAwM2VudW1fcnhfcXVldWVzOyBpJiM0MzsmIzQzOylcbi1cdFx0XHR3eF9kaXNhYmxlX3J4X2Ryb3Aod3gsIHd4LVx1MDAzZXJ4X3JpbmdbaV0pO1xuJiM0MztcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2Mgd3gtXHUwMDNlbnVtX3J4X3F1ZXVlczsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdFx0c3RydWN0IHd4X3JpbmcgKnJ4X3JpbmcgPSByY3VfZGVyZWZlcmVuY2VfcHJvdGVjdGVkKHd4LVx1MDAzZXJ4X3JpbmdbaV0sIDEpO1xuJiM0MztcbiYjNDM7XHRcdFx0d3hfZGlzYWJsZV9yeF9kcm9wKHd4LCByeF9yaW5nKTtcbiYjNDM7XHRcdH1cbiBcdH1cbiBcbiBcdHJldHVybiAwO1xuQEAgLTI4NzAsOCAmIzQzOzI4ODYsMTUgQEAgc3RhdGljIHZvaWQgd3hfdXBkYXRlX3hvZmZfcnhfbGZjKHN0cnVjdCB3eCAqd3gpXG4gXHRpZiAoIWRhdGEpXG4gXHRcdHJldHVybjtcbiBcbi1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIHd4LVx1MDAzZW51bV90eF9xdWV1ZXM7IGkmIzQzOyYjNDM7KVxuLVx0XHRjbGVhcl9iaXQoV1hfSEFOR19DSEVDS19BUk1FRCwgd3gtXHUwMDNldHhfcmluZ1tpXS1cdTAwM2VzdGF0ZSk7XG4mIzQzO1x0cmN1X3JlYWRfbG9jaygpO1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHd4LVx1MDAzZW51bV90eF9xdWV1ZXM7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRzdHJ1Y3Qgd3hfcmluZyAqdHhfcmluZyA9IHJjdV9kZXJlZmVyZW5jZSh3eC1cdTAwM2V0eF9yaW5nW2ldKTtcbiYjNDM7XG4mIzQzO1x0XHRpZiAoIXR4X3JpbmcpXG4mIzQzO1x0XHRcdGNvbnRpbnVlO1xuJiM0MztcdFx0Y2xlYXJfYml0KFdYX0hBTkdfQ0hFQ0tfQVJNRUQsIHR4X3JpbmctXHUwMDNlc3RhdGUpO1xuJiM0MztcdH1cbiYjNDM7XHRyY3VfcmVhZF91bmxvY2soKTtcbiB9XG4gXG4gLyoqXG5AQCAtMjg5MywxMCAmIzQzOzI5MTYsMTMgQEAgdm9pZCB3eF91cGRhdGVfc3RhdHMoc3RydWN0IHd4ICp3eClcbiBcbiBcdHNwaW5fbG9jayhcdTAwMjZ3eC1cdTAwM2Vod19zdGF0c19sb2NrKTtcbiBcbiYjNDM7XHRyY3VfcmVhZF9sb2NrKCk7XG4gXHQvKiBnYXRoZXIgc29tZSBzdGF0cyB0byB0aGUgd3ggc3RydWN0IHRoYXQgYXJlIHBlciBxdWV1ZSAqL1xuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2Mgd3gtXHUwMDNlbnVtX3J4X3F1ZXVlczsgaSYjNDM7JiM0MzspIHtcbi1cdFx0c3RydWN0IHd4X3JpbmcgKnJ4X3JpbmcgPSB3eC1cdTAwM2VyeF9yaW5nW2ldO1xuJiM0MztcdFx0c3RydWN0IHd4X3JpbmcgKnJ4X3JpbmcgPSByY3VfZGVyZWZlcmVuY2Uod3gtXHUwMDNlcnhfcmluZ1tpXSk7XG4gXG4mIzQzO1x0XHRpZiAoIXJ4X3JpbmcpXG4mIzQzO1x0XHRcdGNvbnRpbnVlO1xuIFx0XHRub25fZW9wX2Rlc2NzICYjNDM7PSByeF9yaW5nLVx1MDAzZXJ4X3N0YXRzLm5vbl9lb3BfZGVzY3M7XG4gXHRcdGFsbG9jX3J4X2J1ZmZfZmFpbGVkICYjNDM7PSByeF9yaW5nLVx1MDAzZXJ4X3N0YXRzLmFsbG9jX3J4X2J1ZmZfZmFpbGVkO1xuIFx0XHRod19jc3VtX3J4X2dvb2QgJiM0Mzs9IHJ4X3JpbmctXHUwMDNlcnhfc3RhdHMuY3N1bV9nb29kX2NudDtcbkBAIC0yOTEyLDE5ICYjNDM7MjkzOCwyOCBAQCB2b2lkIHd4X3VwZGF0ZV9zdGF0cyhzdHJ1Y3Qgd3ggKnd4KVxuIFx0XHR1NjQgcnNjX2ZsdXNoID0gMDtcbiBcbiBcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2Mgd3gtXHUwMDNlbnVtX3J4X3F1ZXVlczsgaSYjNDM7JiM0MzspIHtcbi1cdFx0XHRyc2NfY291bnQgJiM0Mzs9IHd4LVx1MDAzZXJ4X3JpbmdbaV0tXHUwMDNlcnhfc3RhdHMucnNjX2NvdW50O1xuLVx0XHRcdHJzY19mbHVzaCAmIzQzOz0gd3gtXHUwMDNlcnhfcmluZ1tpXS1cdTAwM2VyeF9zdGF0cy5yc2NfZmx1c2g7XG4mIzQzO1x0XHRcdHN0cnVjdCB3eF9yaW5nICpyeF9yaW5nID0gcmN1X2RlcmVmZXJlbmNlKHd4LVx1MDAzZXJ4X3JpbmdbaV0pO1xuJiM0MztcbiYjNDM7XHRcdFx0aWYgKCFyeF9yaW5nKVxuJiM0MztcdFx0XHRcdGNvbnRpbnVlO1xuJiM0MztcbiYjNDM7XHRcdFx0cnNjX2NvdW50ICYjNDM7PSByeF9yaW5nLVx1MDAzZXJ4X3N0YXRzLnJzY19jb3VudDtcbiYjNDM7XHRcdFx0cnNjX2ZsdXNoICYjNDM7PSByeF9yaW5nLVx1MDAzZXJ4X3N0YXRzLnJzY19mbHVzaDtcbiBcdFx0fVxuIFx0XHR3eC1cdTAwM2Vyc2NfY291bnQgPSByc2NfY291bnQ7XG4gXHRcdHd4LVx1MDAzZXJzY19mbHVzaCA9IHJzY19mbHVzaDtcbiBcdH1cbiBcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHd4LVx1MDAzZW51bV90eF9xdWV1ZXM7IGkmIzQzOyYjNDM7KSB7XG4tXHRcdHN0cnVjdCB3eF9yaW5nICp0eF9yaW5nID0gd3gtXHUwMDNldHhfcmluZ1tpXTtcbiYjNDM7XHRcdHN0cnVjdCB3eF9yaW5nICp0eF9yaW5nID0gcmN1X2RlcmVmZXJlbmNlKHd4LVx1MDAzZXR4X3JpbmdbaV0pO1xuJiM0MztcbiYjNDM7XHRcdGlmICghdHhfcmluZylcbiYjNDM7XHRcdFx0Y29udGludWU7XG4gXG4gXHRcdHJlc3RhcnRfcXVldWUgJiM0Mzs9IHR4X3JpbmctXHUwMDNldHhfc3RhdHMucmVzdGFydF9xdWV1ZTtcbiBcdFx0dHhfYnVzeSAmIzQzOz0gdHhfcmluZy1cdTAwM2V0eF9zdGF0cy50eF9idXN5O1xuIFx0fVxuJiM0MztcdHJjdV9yZWFkX3VubG9jaygpO1xuIFx0d3gtXHUwMDNlcmVzdGFydF9xdWV1ZSA9IHJlc3RhcnRfcXVldWU7XG4gXHR3eC1cdTAwM2V0eF9idXN5ID0gdHhfYnVzeTtcbiBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2xpYi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9saWIuY1xuaW5kZXggZWQ1YWFkNzg1N2JkOS4uOWY5MGFhOTJmODQwYiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfbGliLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfbGliLmNcbkBAIC0xNzE0LDcgJiM0MzsxNzE0LDEyIEBAIG5ldGRldl90eF90IHd4X3htaXRfZnJhbWUoc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcbiBcdGlmIChyX2lkeCBcdTAwM2U9IHd4LVx1MDAzZW51bV90eF9xdWV1ZXMpXG4gXHRcdHJfaWR4ID0gcl9pZHggJSB3eC1cdTAwM2VudW1fdHhfcXVldWVzO1xuLVx0dHhfcmluZyA9IHd4LVx1MDAzZXR4X3Jpbmdbcl9pZHhdO1xuJiM0MztcdHR4X3JpbmcgPSByY3VfZGVyZWZlcmVuY2Uod3gtXHUwMDNldHhfcmluZ1tyX2lkeF0pO1xuJiM0MztcbiYjNDM7XHRpZiAodW5saWtlbHkoIXR4X3JpbmcpKSB7XG4mIzQzO1x0XHRkZXZfa2ZyZWVfc2tiX2FueShza2IpO1xuJiM0MztcdFx0cmV0dXJuIE5FVERFVl9UWF9PSztcbiYjNDM7XHR9XG4gXG4gXHRyZXR1cm4gd3hfeG1pdF9mcmFtZV9yaW5nKHNrYiwgdHhfcmluZyk7XG4gfVxuQEAgLTIwNTgsMjYgJiM0MzsyMDYzLDI2IEBAIHN0YXRpYyBib29sIHd4X2NhY2hlX3Jpbmdfdm1kcShzdHJ1Y3Qgd3ggKnd4KVxuIFx0XHRcdC8qIElmIHdlIGFyZSBncmVhdGVyIHRoYW4gaW5kaWNlcyBtb3ZlIHRvIG5leHQgcG9vbCAqL1xuIFx0XHRcdGlmICgocmVnX2lkeCBcdTAwMjYgfnZtZHEtXHUwMDNlbWFzaykgXHUwMDNlPSByc3MtXHUwMDNlaW5kaWNlcylcbiBcdFx0XHRcdHJlZ19pZHggPSBfX0FMSUdOX01BU0socmVnX2lkeCwgfnZtZHEtXHUwMDNlbWFzayk7XG4tXHRcdFx0d3gtXHUwMDNlcnhfcmluZ1tpXS1cdTAwM2VyZWdfaWR4ID0gcmVnX2lkeDtcbiYjNDM7XHRcdFx0cmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZCh3eC1cdTAwM2VyeF9yaW5nW2ldLCAxKS1cdTAwM2VyZWdfaWR4ID0gcmVnX2lkeDtcbiBcdFx0fVxuIFx0XHRyZWdfaWR4ID0gdm1kcS1cdTAwM2VvZmZzZXQgKiBfX0FMSUdOX01BU0soMSwgfnZtZHEtXHUwMDNlbWFzayk7XG4gXHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHd4LVx1MDAzZW51bV90eF9xdWV1ZXM7IGkmIzQzOyYjNDM7LCByZWdfaWR4JiM0MzsmIzQzOykge1xuIFx0XHRcdC8qIElmIHdlIGFyZSBncmVhdGVyIHRoYW4gaW5kaWNlcyBtb3ZlIHRvIG5leHQgcG9vbCAqL1xuIFx0XHRcdGlmICgocmVnX2lkeCBcdTAwMjYgcnNzLVx1MDAzZW1hc2spIFx1MDAzZT0gcnNzLVx1MDAzZWluZGljZXMpXG4gXHRcdFx0XHRyZWdfaWR4ID0gX19BTElHTl9NQVNLKHJlZ19pZHgsIH52bWRxLVx1MDAzZW1hc2spO1xuLVx0XHRcdHd4LVx1MDAzZXR4X3JpbmdbaV0tXHUwMDNlcmVnX2lkeCA9IHJlZ19pZHg7XG4mIzQzO1x0XHRcdHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQod3gtXHUwMDNldHhfcmluZ1tpXSwgMSktXHUwMDNlcmVnX2lkeCA9IHJlZ19pZHg7XG4gXHRcdH1cbiBcdH0gZWxzZSB7XG4gXHRcdC8qIHN0YXJ0IGF0IFZNRHEgcmVnaXN0ZXIgb2Zmc2V0IGZvciBTUi1JT1YgZW5hYmxlZCBzZXR1cHMgKi9cbiBcdFx0cmVnX2lkeCA9IHZtZHEtXHUwMDNlb2Zmc2V0O1xuIFx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyB3eC1cdTAwM2VudW1fcnhfcXVldWVzOyBpJiM0MzsmIzQzOylcbiBcdFx0XHQvKiBJZiB3ZSBhcmUgZ3JlYXRlciB0aGFuIGluZGljZXMgbW92ZSB0byBuZXh0IHBvb2wgKi9cbi1cdFx0XHR3eC1cdTAwM2VyeF9yaW5nW2ldLVx1MDAzZXJlZ19pZHggPSByZWdfaWR4ICYjNDM7IGk7XG4mIzQzO1x0XHRcdHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQod3gtXHUwMDNlcnhfcmluZ1tpXSwgMSktXHUwMDNlcmVnX2lkeCA9IHJlZ19pZHggJiM0MzsgaTtcbiBcbiBcdFx0cmVnX2lkeCA9IHZtZHEtXHUwMDNlb2Zmc2V0O1xuIFx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyB3eC1cdTAwM2VudW1fdHhfcXVldWVzOyBpJiM0MzsmIzQzOylcbiBcdFx0XHQvKiBJZiB3ZSBhcmUgZ3JlYXRlciB0aGFuIGluZGljZXMgbW92ZSB0byBuZXh0IHBvb2wgKi9cbi1cdFx0XHR3eC1cdTAwM2V0eF9yaW5nW2ldLVx1MDAzZXJlZ19pZHggPSByZWdfaWR4ICYjNDM7IGk7XG4mIzQzO1x0XHRcdHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQod3gtXHUwMDNldHhfcmluZ1tpXSwgMSktXHUwMDNlcmVnX2lkeCA9IHJlZ19pZHggJiM0MzsgaTtcbiBcdH1cbiBcbiBcdHJldHVybiB0cnVlO1xuQEAgLTIwOTgsMTAgJiM0MzsyMTAzLDEwIEBAIHN0YXRpYyB2b2lkIHd4X2NhY2hlX3JpbmdfcnNzKHN0cnVjdCB3eCAqd3gpXG4gXHRcdHJldHVybjtcbiBcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHd4LVx1MDAzZW51bV9yeF9xdWV1ZXM7IGkmIzQzOyYjNDM7KVxuLVx0XHR3eC1cdTAwM2VyeF9yaW5nW2ldLVx1MDAzZXJlZ19pZHggPSBpO1xuJiM0MztcdFx0cmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZCh3eC1cdTAwM2VyeF9yaW5nW2ldLCAxKS1cdTAwM2VyZWdfaWR4ID0gaTtcbiBcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHd4LVx1MDAzZW51bV90eF9xdWV1ZXM7IGkmIzQzOyYjNDM7KVxuLVx0XHR3eC1cdTAwM2V0eF9yaW5nW2ldLVx1MDAzZXJlZ19pZHggPSBpO1xuJiM0MztcdFx0cmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZCh3eC1cdTAwM2V0eF9yaW5nW2ldLCAxKS1cdTAwM2VyZWdfaWR4ID0gaTtcbiB9XG4gXG4gc3RhdGljIHZvaWQgd3hfYWRkX3Jpbmcoc3RydWN0IHd4X3JpbmcgKnJpbmcsIHN0cnVjdCB3eF9yaW5nX2NvbnRhaW5lciAqaGVhZClcbkBAIC0yMTkxLDcgJiM0MzsyMTk2LDcgQEAgc3RhdGljIGludCB3eF9hbGxvY19xX3ZlY3RvcihzdHJ1Y3Qgd3ggKnd4LFxuIFx0XHRyaW5nLVx1MDAzZXF1ZXVlX2luZGV4ID0gdHhyX2lkeDtcbiBcbiBcdFx0LyogYXNzaWduIHJpbmcgdG8gd3ggKi9cbi1cdFx0d3gtXHUwMDNldHhfcmluZ1t0eHJfaWR4XSA9IHJpbmc7XG4mIzQzO1x0XHRyY3VfYXNzaWduX3BvaW50ZXIod3gtXHUwMDNldHhfcmluZ1t0eHJfaWR4XSwgcmluZyk7XG4gXG4gXHRcdC8qIHVwZGF0ZSBjb3VudCBhbmQgaW5kZXggKi9cbiBcdFx0dHhyX2NvdW50LS07XG5AQCAtMjIxNyw3ICYjNDM7MjIyMiw3IEBAIHN0YXRpYyBpbnQgd3hfYWxsb2NfcV92ZWN0b3Ioc3RydWN0IHd4ICp3eCxcbiBcdFx0cmluZy1cdTAwM2VxdWV1ZV9pbmRleCA9IHJ4cl9pZHg7XG4gXG4gXHRcdC8qIGFzc2lnbiByaW5nIHRvIHd4ICovXG4tXHRcdHd4LVx1MDAzZXJ4X3JpbmdbcnhyX2lkeF0gPSByaW5nO1xuJiM0MztcdFx0cmN1X2Fzc2lnbl9wb2ludGVyKHd4LVx1MDAzZXJ4X3JpbmdbcnhyX2lkeF0sIHJpbmcpO1xuIFxuIFx0XHQvKiB1cGRhdGUgY291bnQgYW5kIGluZGV4ICovXG4gXHRcdHJ4cl9jb3VudC0tO1xuQEAgLTIyNDUsMTAgJiM0MzsyMjUwLDEwIEBAIHN0YXRpYyB2b2lkIHd4X2ZyZWVfcV92ZWN0b3Ioc3RydWN0IHd4ICp3eCwgaW50IHZfaWR4KVxuIFx0c3RydWN0IHd4X3JpbmcgKnJpbmc7XG4gXG4gXHR3eF9mb3JfZWFjaF9yaW5nKHJpbmcsIHFfdmVjdG9yLVx1MDAzZXR4KVxuLVx0XHR3eC1cdTAwM2V0eF9yaW5nW3JpbmctXHUwMDNlcXVldWVfaW5kZXhdID0gTlVMTDtcbiYjNDM7XHRcdHJjdV9hc3NpZ25fcG9pbnRlcih3eC1cdTAwM2V0eF9yaW5nW3JpbmctXHUwMDNlcXVldWVfaW5kZXhdLCBOVUxMKTtcbiBcbiBcdHd4X2Zvcl9lYWNoX3JpbmcocmluZywgcV92ZWN0b3ItXHUwMDNlcngpXG4tXHRcdHd4LVx1MDAzZXJ4X3JpbmdbcmluZy1cdTAwM2VxdWV1ZV9pbmRleF0gPSBOVUxMO1xuJiM0MztcdFx0cmN1X2Fzc2lnbl9wb2ludGVyKHd4LVx1MDAzZXJ4X3JpbmdbcmluZy1cdTAwM2VxdWV1ZV9pbmRleF0sIE5VTEwpO1xuIFxuIFx0d3gtXHUwMDNlcV92ZWN0b3Jbdl9pZHhdID0gTlVMTDtcbiBcdG5ldGlmX25hcGlfZGVsKFx1MDAyNnFfdmVjdG9yLVx1MDAzZW5hcGkpO1xuQEAgLTI2NTksNyAmIzQzOzI2NjQsNyBAQCB2b2lkIHd4X2NsZWFuX2FsbF9yeF9yaW5ncyhzdHJ1Y3Qgd3ggKnd4KVxuIFx0aW50IGk7XG4gXG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyB3eC1cdTAwM2VudW1fcnhfcXVldWVzOyBpJiM0MzsmIzQzOylcbi1cdFx0d3hfY2xlYW5fcnhfcmluZyh3eC1cdTAwM2VyeF9yaW5nW2ldKTtcbiYjNDM7XHRcdHd4X2NsZWFuX3J4X3JpbmcocmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZCh3eC1cdTAwM2VyeF9yaW5nW2ldLCAxKSk7XG4gfVxuIEVYUE9SVF9TWU1CT0wod3hfY2xlYW5fYWxsX3J4X3JpbmdzKTtcbiBcbkBAIC0yNzAxLDcgJiM0MzsyNzA2LDcgQEAgc3RhdGljIHZvaWQgd3hfZnJlZV9hbGxfcnhfcmVzb3VyY2VzKHN0cnVjdCB3eCAqd3gpXG4gXHRpbnQgaTtcbiBcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHd4LVx1MDAzZW51bV9yeF9xdWV1ZXM7IGkmIzQzOyYjNDM7KVxuLVx0XHR3eF9mcmVlX3J4X3Jlc291cmNlcyh3eC1cdTAwM2VyeF9yaW5nW2ldKTtcbiYjNDM7XHRcdHd4X2ZyZWVfcnhfcmVzb3VyY2VzKHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQod3gtXHUwMDNlcnhfcmluZ1tpXSwgMSkpO1xuIH1cbiBcbiAvKipcbkBAIC0yNzc1LDcgJiM0MzsyNzgwLDcgQEAgdm9pZCB3eF9jbGVhbl9hbGxfdHhfcmluZ3Moc3RydWN0IHd4ICp3eClcbiBcdGludCBpO1xuIFxuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2Mgd3gtXHUwMDNlbnVtX3R4X3F1ZXVlczsgaSYjNDM7JiM0MzspXG4tXHRcdHd4X2NsZWFuX3R4X3Jpbmcod3gtXHUwMDNldHhfcmluZ1tpXSk7XG4mIzQzO1x0XHR3eF9jbGVhbl90eF9yaW5nKHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQod3gtXHUwMDNldHhfcmluZ1tpXSwgMSkpO1xuIH1cbiBFWFBPUlRfU1lNQk9MKHd4X2NsZWFuX2FsbF90eF9yaW5ncyk7XG4gXG5AQCAtMjgyMyw3ICYjNDM7MjgyOCw3IEBAIHN0YXRpYyB2b2lkIHd4X2ZyZWVfYWxsX3R4X3Jlc291cmNlcyhzdHJ1Y3Qgd3ggKnd4KVxuIFx0aW50IGk7XG4gXG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyB3eC1cdTAwM2VudW1fdHhfcXVldWVzOyBpJiM0MzsmIzQzOylcbi1cdFx0d3hfZnJlZV90eF9yZXNvdXJjZXMod3gtXHUwMDNldHhfcmluZ1tpXSk7XG4mIzQzO1x0XHR3eF9mcmVlX3R4X3Jlc291cmNlcyhyY3VfZGVyZWZlcmVuY2VfcHJvdGVjdGVkKHd4LVx1MDAzZXR4X3JpbmdbaV0sIDEpKTtcbiB9XG4gXG4gdm9pZCB3eF9mcmVlX3Jlc291cmNlcyhzdHJ1Y3Qgd3ggKnd4KVxuQEAgLTI5MzMsNyAmIzQzOzI5MzgsNyBAQCBzdGF0aWMgaW50IHd4X3NldHVwX2FsbF9yeF9yZXNvdXJjZXMoc3RydWN0IHd4ICp3eClcbiBcdGludCBpLCBlcnIgPSAwO1xuIFxuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2Mgd3gtXHUwMDNlbnVtX3J4X3F1ZXVlczsgaSYjNDM7JiM0MzspIHtcbi1cdFx0ZXJyID0gd3hfc2V0dXBfcnhfcmVzb3VyY2VzKHd4LVx1MDAzZXJ4X3JpbmdbaV0pO1xuJiM0MztcdFx0ZXJyID0gd3hfc2V0dXBfcnhfcmVzb3VyY2VzKHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQod3gtXHUwMDNlcnhfcmluZ1tpXSwgMSkpO1xuIFx0XHRpZiAoIWVycilcbiBcdFx0XHRjb250aW51ZTtcbiBcbkBAIC0yOTQ1LDcgJiM0MzsyOTUwLDcgQEAgc3RhdGljIGludCB3eF9zZXR1cF9hbGxfcnhfcmVzb3VyY2VzKHN0cnVjdCB3eCAqd3gpXG4gZXJyX3NldHVwX3J4OlxuIFx0LyogcmV3aW5kIHRoZSBpbmRleCBmcmVlaW5nIHRoZSByaW5ncyBhcyB3ZSBnbyAqL1xuIFx0d2hpbGUgKGktLSlcbi1cdFx0d3hfZnJlZV9yeF9yZXNvdXJjZXMod3gtXHUwMDNlcnhfcmluZ1tpXSk7XG4mIzQzO1x0XHR3eF9mcmVlX3J4X3Jlc291cmNlcyhyY3VfZGVyZWZlcmVuY2VfcHJvdGVjdGVkKHd4LVx1MDAzZXJ4X3JpbmdbaV0sIDEpKTtcbiBcdHJldHVybiBlcnI7XG4gfVxuIFxuQEAgLTMwMzYsNyAmIzQzOzMwNDEsNyBAQCBzdGF0aWMgaW50IHd4X3NldHVwX2FsbF90eF9yZXNvdXJjZXMoc3RydWN0IHd4ICp3eClcbiBcdGludCBpLCBlcnIgPSAwO1xuIFxuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2Mgd3gtXHUwMDNlbnVtX3R4X3F1ZXVlczsgaSYjNDM7JiM0MzspIHtcbi1cdFx0ZXJyID0gd3hfc2V0dXBfdHhfcmVzb3VyY2VzKHd4LVx1MDAzZXR4X3JpbmdbaV0pO1xuJiM0MztcdFx0ZXJyID0gd3hfc2V0dXBfdHhfcmVzb3VyY2VzKHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQod3gtXHUwMDNldHhfcmluZ1tpXSwgMSkpO1xuIFx0XHRpZiAoIWVycilcbiBcdFx0XHRjb250aW51ZTtcbiBcbkBAIC0zMDQ4LDcgJiM0MzszMDUzLDcgQEAgc3RhdGljIGludCB3eF9zZXR1cF9hbGxfdHhfcmVzb3VyY2VzKHN0cnVjdCB3eCAqd3gpXG4gZXJyX3NldHVwX3R4OlxuIFx0LyogcmV3aW5kIHRoZSBpbmRleCBmcmVlaW5nIHRoZSByaW5ncyBhcyB3ZSBnbyAqL1xuIFx0d2hpbGUgKGktLSlcbi1cdFx0d3hfZnJlZV90eF9yZXNvdXJjZXMod3gtXHUwMDNldHhfcmluZ1tpXSk7XG4mIzQzO1x0XHR3eF9mcmVlX3R4X3Jlc291cmNlcyhyY3VfZGVyZWZlcmVuY2VfcHJvdGVjdGVkKHd4LVx1MDAzZXR4X3JpbmdbaV0sIDEpKTtcbiBcdHJldHVybiBlcnI7XG4gfVxuIFxuQEAgLTMwOTcsNyAmIzQzOzMxMDIsNyBAQCB2b2lkIHd4X2dldF9zdGF0czY0KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXG4gXG4gXHRyY3VfcmVhZF9sb2NrKCk7XG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyB3eC1cdTAwM2VudW1fcnhfcXVldWVzOyBpJiM0MzsmIzQzOykge1xuLVx0XHRzdHJ1Y3Qgd3hfcmluZyAqcmluZyA9IFJFQURfT05DRSh3eC1cdTAwM2VyeF9yaW5nW2ldKTtcbiYjNDM7XHRcdHN0cnVjdCB3eF9yaW5nICpyaW5nID0gcmN1X2RlcmVmZXJlbmNlKHd4LVx1MDAzZXJ4X3JpbmdbaV0pO1xuIFx0XHR1NjQgYnl0ZXMsIHBhY2tldHM7XG4gXHRcdHVuc2lnbmVkIGludCBzdGFydDtcbiBcbkBAIC0zMTEzLDcgJiM0MzszMTE4LDcgQEAgdm9pZCB3eF9nZXRfc3RhdHM2NChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxuIFx0fVxuIFxuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2Mgd3gtXHUwMDNlbnVtX3R4X3F1ZXVlczsgaSYjNDM7JiM0MzspIHtcbi1cdFx0c3RydWN0IHd4X3JpbmcgKnJpbmcgPSBSRUFEX09OQ0Uod3gtXHUwMDNldHhfcmluZ1tpXSk7XG4mIzQzO1x0XHRzdHJ1Y3Qgd3hfcmluZyAqcmluZyA9IHJjdV9kZXJlZmVyZW5jZSh3eC1cdTAwM2V0eF9yaW5nW2ldKTtcbiBcdFx0dTY0IGJ5dGVzLCBwYWNrZXRzO1xuIFx0XHR1bnNpZ25lZCBpbnQgc3RhcnQ7XG4gXG5AQCAtMzMyNCw3ICYjNDM7MzMyOSw3IEBAIGludCB3eF9zZXRfcmluZyhzdHJ1Y3Qgd3ggKnd4LCB1MzIgbmV3X3R4X2NvdW50LFxuIFx0ICovXG4gXHRpZiAobmV3X3R4X2NvdW50ICE9IHd4LVx1MDAzZXR4X3JpbmdfY291bnQpIHtcbiBcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2Mgd3gtXHUwMDNlbnVtX3R4X3F1ZXVlczsgaSYjNDM7JiM0MzspIHtcbi1cdFx0XHRtZW1jcHkoXHUwMDI2dGVtcF9yaW5nW2ldLCB3eC1cdTAwM2V0eF9yaW5nW2ldLFxuJiM0MztcdFx0XHRtZW1jcHkoXHUwMDI2dGVtcF9yaW5nW2ldLCByY3VfZGVyZWZlcmVuY2VfcHJvdGVjdGVkKHd4LVx1MDAzZXR4X3JpbmdbaV0sIDEpLFxuIFx0XHRcdCAgICAgICBzaXplb2Yoc3RydWN0IHd4X3JpbmcpKTtcbiBcbiBcdFx0XHR0ZW1wX3JpbmdbaV0uY291bnQgPSBuZXdfdHhfY291bnQ7XG5AQCAtMzM0MCw5ICYjNDM7MzM0NSwxMSBAQCBpbnQgd3hfc2V0X3Jpbmcoc3RydWN0IHd4ICp3eCwgdTMyIG5ld190eF9jb3VudCxcbiBcdFx0fVxuIFxuIFx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyB3eC1cdTAwM2VudW1fdHhfcXVldWVzOyBpJiM0MzsmIzQzOykge1xuLVx0XHRcdHd4X2ZyZWVfdHhfcmVzb3VyY2VzKHd4LVx1MDAzZXR4X3JpbmdbaV0pO1xuJiM0MztcdFx0XHRzdHJ1Y3Qgd3hfcmluZyAqdHhfcmluZyA9IHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQod3gtXHUwMDNldHhfcmluZ1tpXSwgMSk7XG4mIzQzO1xuJiM0MztcdFx0XHR3eF9mcmVlX3R4X3Jlc291cmNlcyh0eF9yaW5nKTtcbiBcbi1cdFx0XHRtZW1jcHkod3gtXHUwMDNldHhfcmluZ1tpXSwgXHUwMDI2dGVtcF9yaW5nW2ldLFxuJiM0MztcdFx0XHRtZW1jcHkodHhfcmluZywgXHUwMDI2dGVtcF9yaW5nW2ldLFxuIFx0XHRcdCAgICAgICBzaXplb2Yoc3RydWN0IHd4X3JpbmcpKTtcbiBcdFx0fVxuIFxuQEAgLTMzNTIsNyAmIzQzOzMzNTksNyBAQCBpbnQgd3hfc2V0X3Jpbmcoc3RydWN0IHd4ICp3eCwgdTMyIG5ld190eF9jb3VudCxcbiBcdC8qIFJlcGVhdCB0aGUgcHJvY2VzcyBmb3IgdGhlIFJ4IHJpbmdzIGlmIG5lZWRlZCAqL1xuIFx0aWYgKG5ld19yeF9jb3VudCAhPSB3eC1cdTAwM2VyeF9yaW5nX2NvdW50KSB7XG4gXHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHd4LVx1MDAzZW51bV9yeF9xdWV1ZXM7IGkmIzQzOyYjNDM7KSB7XG4tXHRcdFx0bWVtY3B5KFx1MDAyNnRlbXBfcmluZ1tpXSwgd3gtXHUwMDNlcnhfcmluZ1tpXSxcbiYjNDM7XHRcdFx0bWVtY3B5KFx1MDAyNnRlbXBfcmluZ1tpXSwgcmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZCh3eC1cdTAwM2VyeF9yaW5nW2ldLCAxKSxcbiBcdFx0XHQgICAgICAgc2l6ZW9mKHN0cnVjdCB3eF9yaW5nKSk7XG4gXG4gXHRcdFx0dGVtcF9yaW5nW2ldLmNvdW50ID0gbmV3X3J4X2NvdW50O1xuQEAgLTMzNjgsOCAmIzQzOzMzNzUsMTAgQEAgaW50IHd4X3NldF9yaW5nKHN0cnVjdCB3eCAqd3gsIHUzMiBuZXdfdHhfY291bnQsXG4gXHRcdH1cbiBcbiBcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2Mgd3gtXHUwMDNlbnVtX3J4X3F1ZXVlczsgaSYjNDM7JiM0MzspIHtcbi1cdFx0XHR3eF9mcmVlX3J4X3Jlc291cmNlcyh3eC1cdTAwM2VyeF9yaW5nW2ldKTtcbi1cdFx0XHRtZW1jcHkod3gtXHUwMDNlcnhfcmluZ1tpXSwgXHUwMDI2dGVtcF9yaW5nW2ldLFxuJiM0MztcdFx0XHRzdHJ1Y3Qgd3hfcmluZyAqcnhfcmluZyA9IHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQod3gtXHUwMDNlcnhfcmluZ1tpXSwgMSk7XG4mIzQzO1xuJiM0MztcdFx0XHR3eF9mcmVlX3J4X3Jlc291cmNlcyhyeF9yaW5nKTtcbiYjNDM7XHRcdFx0bWVtY3B5KHJ4X3JpbmcsIFx1MDAyNnRlbXBfcmluZ1tpXSxcbiBcdFx0XHQgICAgICAgc2l6ZW9mKHN0cnVjdCB3eF9yaW5nKSk7XG4gXHRcdH1cbiBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X3B0cC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9wdHAuY1xuaW5kZXggNDcwOGU3ZjM5NThmNy4uNjhkYzYyOTc3YWFiMiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfcHRwLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfcHRwLmNcbkBAIC0yNzQsMTEgJiM0MzsyNzQsMTUgQEAgc3RhdGljIHZvaWQgd3hfcHRwX3J4X2hhbmcoc3RydWN0IHd4ICp3eClcbiBcbiBcdC8qIGRldGVybWluZSB0aGUgbW9zdCByZWNlbnQgd2F0Y2hkb2cgb3IgcnhfdGltZXN0YW1wIGV2ZW50ICovXG4gXHRyeF9ldmVudCA9IHd4LVx1MDAzZWxhc3RfcnhfcHRwX2NoZWNrO1xuJiM0MztcdHJjdV9yZWFkX2xvY2soKTtcbiBcdGZvciAobiA9IDA7IG4gXHUwMDNjIHd4LVx1MDAzZW51bV9yeF9xdWV1ZXM7IG4mIzQzOyYjNDM7KSB7XG4tXHRcdHJ4X3JpbmcgPSB3eC1cdTAwM2VyeF9yaW5nW25dO1xuJiM0MztcdFx0cnhfcmluZyA9IHJjdV9kZXJlZmVyZW5jZSh3eC1cdTAwM2VyeF9yaW5nW25dKTtcbiYjNDM7XHRcdGlmICghcnhfcmluZylcbiYjNDM7XHRcdFx0Y29udGludWU7XG4gXHRcdGlmICh0aW1lX2FmdGVyKHJ4X3JpbmctXHUwMDNlbGFzdF9yeF90aW1lc3RhbXAsIHJ4X2V2ZW50KSlcbiBcdFx0XHRyeF9ldmVudCA9IHJ4X3JpbmctXHUwMDNlbGFzdF9yeF90aW1lc3RhbXA7XG4gXHR9XG4mIzQzO1x0cmN1X3JlYWRfdW5sb2NrKCk7XG4gXG4gXHQvKiBvbmx5IG5lZWQgdG8gcmVhZCB0aGUgaGlnaCBSWFNUTVAgcmVnaXN0ZXIgdG8gY2xlYXIgdGhlIGxvY2sgKi9cbiBcdGlmICh0aW1lX2lzX2JlZm9yZV9qaWZmaWVzKHJ4X2V2ZW50ICYjNDM7IDUgKiBIWikpIHtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X3R5cGUuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfdHlwZS5oXG5pbmRleCA5NDU0ZTkwMjU4ZDhlLi45OTUyZDAyMzQyNDAxIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF90eXBlLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfdHlwZS5oXG5AQCAtMTM1OSw4ICYjNDM7MTM1OSw4IEBAIHN0cnVjdCB3eCB7XG4gXHR1MzIgdHhfcmluZ19jb3VudDtcbiBcdHUzMiByeF9yaW5nX2NvdW50O1xuIFxuLVx0c3RydWN0IHd4X3JpbmcgKnR4X3JpbmdbNjRdIF9fX19jYWNoZWxpbmVfYWxpZ25lZF9pbl9zbXA7XG4tXHRzdHJ1Y3Qgd3hfcmluZyAqcnhfcmluZ1s2NF07XG4mIzQzO1x0c3RydWN0IHd4X3JpbmcgX19yY3UgKnR4X3JpbmdbNjRdIF9fX19jYWNoZWxpbmVfYWxpZ25lZF9pbl9zbXA7XG4mIzQzO1x0c3RydWN0IHd4X3JpbmcgX19yY3UgKnJ4X3JpbmdbNjRdO1xuIFx0c3RydWN0IHd4X3FfdmVjdG9yICpxX3ZlY3Rvcls2NF07XG4gXHRpbnQgbnVtX3J4X3Bvb2xzO1xuIFx0aW50IG51bV9yeF9xdWV1ZXNfcGVyX3Bvb2w7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF92Zl9jb21tb24uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfdmZfY29tbW9uLmNcbmluZGV4IDI2ZGU3OGU5YTY5ZWYuLmM4MzA4MjRjNDg2OWUgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X3ZmX2NvbW1vbi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X3ZmX2NvbW1vbi5jXG5AQCAtMjA1LDcgJiM0MzsyMDUsNyBAQCBzdGF0aWMgdm9pZCB3eF9jb25maWd1cmVfcnhfdmYoc3RydWN0IHd4ICp3eClcbiBcdCAqIHRoZSBCYXNlIGFuZCBMZW5ndGggb2YgdGhlIFJ4IERlc2NyaXB0b3IgUmluZ1xuIFx0ICovXG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyB3eC1cdTAwM2VudW1fcnhfcXVldWVzOyBpJiM0MzsmIzQzOykge1xuLVx0XHRzdHJ1Y3Qgd3hfcmluZyAqcnhfcmluZyA9IHd4LVx1MDAzZXJ4X3JpbmdbaV07XG4mIzQzO1x0XHRzdHJ1Y3Qgd3hfcmluZyAqcnhfcmluZyA9IHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQod3gtXHUwMDNlcnhfcmluZ1tpXSwgMSk7XG4gI2lmZGVmIEhBVkVfU1dJT1RMQl9TS0lQX0NQVV9TWU5DXG4gXHRcdHd4X3NldF9yeF9idWZmZXJfbGVuX3ZmKHd4LCByeF9yaW5nKTtcbiAjZW5kaWZcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X3ZmX2xpYi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF92Zl9saWIuY1xuaW5kZXggNzMyNWI0NzVlZTEwYy4uMGUwOWU2NmM2ZGU2ZCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfdmZfbGliLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfdmZfbGliLmNcbkBAIC0xNzUsOCAmIzQzOzE3NSwxMSBAQCB2b2lkIHd4X2NvbmZpZ3VyZV90eF92ZihzdHJ1Y3Qgd3ggKnd4KVxuIFx0dTMyIGk7XG4gXG4gXHQvKiBTZXR1cCB0aGUgSFcgVHggSGVhZCBhbmQgVGFpbCBkZXNjcmlwdG9yIHBvaW50ZXJzICovXG4tXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyB3eC1cdTAwM2VudW1fdHhfcXVldWVzOyBpJiM0MzsmIzQzOylcbi1cdFx0d3hfY29uZmlndXJlX3R4X3JpbmdfdmYod3gsIHd4LVx1MDAzZXR4X3JpbmdbaV0pO1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHd4LVx1MDAzZW51bV90eF9xdWV1ZXM7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRzdHJ1Y3Qgd3hfcmluZyAqdHhfcmluZyA9IHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQod3gtXHUwMDNldHhfcmluZ1tpXSwgMSk7XG4mIzQzO1xuJiM0MztcdFx0d3hfY29uZmlndXJlX3R4X3JpbmdfdmYod3gsIHR4X3JpbmcpO1xuJiM0MztcdH1cbiB9XG4gXG4gc3RhdGljIHZvaWQgd3hfY29uZmlndXJlX3NycmN0bF92ZihzdHJ1Y3Qgd3ggKnd4LCBzdHJ1Y3Qgd3hfcmluZyAqcmluZyxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9ldGh0b29sLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9ldGh0b29sLmNcbmluZGV4IDE5NjBmNzE1NDE1MWQuLjllOTA3MDJhNTE0NmEgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9ldGh0b29sLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX2V0aHRvb2wuY1xuQEAgLTM3LDkgJiM0MzszNyw5IEBAIHN0YXRpYyBpbnQgbmdiZV9zZXRfcmluZ3BhcmFtKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXG4gXG4gXHRpZiAoIW5ldGlmX3J1bm5pbmcod3gtXHUwMDNlbmV0ZGV2KSkge1xuIFx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyB3eC1cdTAwM2VudW1fdHhfcXVldWVzOyBpJiM0MzsmIzQzOylcbi1cdFx0XHR3eC1cdTAwM2V0eF9yaW5nW2ldLVx1MDAzZWNvdW50ID0gbmV3X3R4X2NvdW50O1xuJiM0MztcdFx0XHRyY3VfZGVyZWZlcmVuY2VfcHJvdGVjdGVkKHd4LVx1MDAzZXR4X3JpbmdbaV0sIDEpLVx1MDAzZWNvdW50ID0gbmV3X3R4X2NvdW50O1xuIFx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyB3eC1cdTAwM2VudW1fcnhfcXVldWVzOyBpJiM0MzsmIzQzOylcbi1cdFx0XHR3eC1cdTAwM2VyeF9yaW5nW2ldLVx1MDAzZWNvdW50ID0gbmV3X3J4X2NvdW50O1xuJiM0MztcdFx0XHRyY3VfZGVyZWZlcmVuY2VfcHJvdGVjdGVkKHd4LVx1MDAzZXJ4X3JpbmdbaV0sIDEpLVx1MDAzZWNvdW50ID0gbmV3X3J4X2NvdW50O1xuIFx0XHR3eC1cdTAwM2V0eF9yaW5nX2NvdW50ID0gbmV3X3R4X2NvdW50O1xuIFx0XHR3eC1cdTAwM2VyeF9yaW5nX2NvdW50ID0gbmV3X3J4X2NvdW50O1xuIFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX21haW4uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX21haW4uY1xuaW5kZXggODU1ZGM5NjNjNjEwYy4uZTQ1ZDdkZmRjOWY5MCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX21haW4uY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfbWFpbi5jXG5AQCAtNDA2LDcgJiM0Mzs0MDYsNyBAQCBzdGF0aWMgdm9pZCBuZ2JlX2Rpc2FibGVfZGV2aWNlKHN0cnVjdCB3eCAqd3gpXG4gXHQvKiBkaXNhYmxlIGFsbCBlbmFibGVkIHJ4IHF1ZXVlcyAqL1xuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2Mgd3gtXHUwMDNlbnVtX3J4X3F1ZXVlczsgaSYjNDM7JiM0MzspXG4gXHRcdC8qIHRoaXMgY2FsbCBhbHNvIGZsdXNoZXMgdGhlIHByZXZpb3VzIHdyaXRlICovXG4tXHRcdHd4X2Rpc2FibGVfcnhfcXVldWUod3gsIHd4LVx1MDAzZXJ4X3JpbmdbaV0pO1xuJiM0MztcdFx0d3hfZGlzYWJsZV9yeF9xdWV1ZSh3eCwgcmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZCh3eC1cdTAwM2VyeF9yaW5nW2ldLCAxKSk7XG4gXHQvKiBkaXNhYmxlIHJlY2VpdmVzICovXG4gXHR3eF9kaXNhYmxlX3J4KHd4KTtcbiBcdHd4X25hcGlfZGlzYWJsZV9hbGwod3gpO1xuQEAgLTQyMiw3ICYjNDM7NDIyLDcgQEAgc3RhdGljIHZvaWQgbmdiZV9kaXNhYmxlX2RldmljZShzdHJ1Y3Qgd3ggKnd4KVxuIFx0d3hfaXJxX2Rpc2FibGUod3gpO1xuIFx0LyogZGlzYWJsZSB0cmFuc21pdHMgaW4gdGhlIGhhcmR3YXJlIG5vdyB0aGF0IGludGVycnVwdHMgYXJlIG9mZiAqL1xuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2Mgd3gtXHUwMDNlbnVtX3R4X3F1ZXVlczsgaSYjNDM7JiM0MzspIHtcbi1cdFx0dTggcmVnX2lkeCA9IHd4LVx1MDAzZXR4X3JpbmdbaV0tXHUwMDNlcmVnX2lkeDtcbiYjNDM7XHRcdHU4IHJlZ19pZHggPSByY3VfZGVyZWZlcmVuY2VfcHJvdGVjdGVkKHd4LVx1MDAzZXR4X3JpbmdbaV0sIDEpLVx1MDAzZXJlZ19pZHg7XG4gXG4gXHRcdHdyMzIod3gsIFdYX1BYX1RSX0NGRyhyZWdfaWR4KSwgV1hfUFhfVFJfQ0ZHX1NXRkxTSCk7XG4gXHR9XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9ldGh0b29sLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX2V0aHRvb2wuY1xuaW5kZXggM2UzMmFjYTcyODA2NS4uZmNmYWY2ZjJmNTQ0YSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfZXRodG9vbC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX2V0aHRvb2wuY1xuQEAgLTYxLDkgJiM0Mzs2MSw5IEBAIHN0YXRpYyBpbnQgdHhnYmVfc2V0X3JpbmdwYXJhbShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxuIFxuIFx0aWYgKCFuZXRpZl9ydW5uaW5nKHd4LVx1MDAzZW5ldGRldikpIHtcbiBcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2Mgd3gtXHUwMDNlbnVtX3R4X3F1ZXVlczsgaSYjNDM7JiM0MzspXG4tXHRcdFx0d3gtXHUwMDNldHhfcmluZ1tpXS1cdTAwM2Vjb3VudCA9IG5ld190eF9jb3VudDtcbiYjNDM7XHRcdFx0cmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZCh3eC1cdTAwM2V0eF9yaW5nW2ldLCAxKS1cdTAwM2Vjb3VudCA9IG5ld190eF9jb3VudDtcbiBcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2Mgd3gtXHUwMDNlbnVtX3J4X3F1ZXVlczsgaSYjNDM7JiM0MzspXG4tXHRcdFx0d3gtXHUwMDNlcnhfcmluZ1tpXS1cdTAwM2Vjb3VudCA9IG5ld19yeF9jb3VudDtcbiYjNDM7XHRcdFx0cmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZCh3eC1cdTAwM2VyeF9yaW5nW2ldLCAxKS1cdTAwM2Vjb3VudCA9IG5ld19yeF9jb3VudDtcbiBcdFx0d3gtXHUwMDNldHhfcmluZ19jb3VudCA9IG5ld190eF9jb3VudDtcbiBcdFx0d3gtXHUwMDNlcnhfcmluZ19jb3VudCA9IG5ld19yeF9jb3VudDtcbiBcbkBAIC0zNjYsNyAmIzQzOzM2Niw3IEBAIHN0YXRpYyBpbnQgdHhnYmVfYWRkX2V0aHRvb2xfZmRpcl9lbnRyeShzdHJ1Y3QgdHhnYmUgKnR4Z2JlLFxuIFxuIFx0XHQvKiBNYXAgdGhlIHJpbmcgb250byB0aGUgYWJzb2x1dGUgcXVldWUgaW5kZXggKi9cbiBcdFx0aWYgKCF2Zilcbi1cdFx0XHRxdWV1ZSA9IHd4LVx1MDAzZXJ4X3JpbmdbcmluZ10tXHUwMDNlcmVnX2lkeDtcbiYjNDM7XHRcdFx0cXVldWUgPSByY3VfZGVyZWZlcmVuY2VfcHJvdGVjdGVkKHd4LVx1MDAzZXJ4X3JpbmdbcmluZ10sIDEpLVx1MDAzZXJlZ19pZHg7XG4gXHRcdGVsc2VcbiBcdFx0XHRxdWV1ZSA9ICgodmYgLSAxKSAqIHd4LVx1MDAzZW51bV9yeF9xdWV1ZXNfcGVyX3Bvb2wpICYjNDM7IHJpbmc7XG4gXHR9XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9mZGlyLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX2ZkaXIuY1xuaW5kZXggYTg0MDEwODI4NTUxNy4uNjBjOGVhNDc3ODI3ZCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfZmRpci5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX2ZkaXIuY1xuQEAgLTU5OSw3ICYjNDM7NTk5LDcgQEAgc3RhdGljIHZvaWQgdHhnYmVfZmRpcl9maWx0ZXJfcmVzdG9yZShzdHJ1Y3Qgd3ggKnd4KVxuIFx0XHRcdH1cbiBcbiBcdFx0XHQvKiBNYXAgdGhlIHJpbmcgb250byB0aGUgYWJzb2x1dGUgcXVldWUgaW5kZXggKi9cbi1cdFx0XHRxdWV1ZSA9IHd4LVx1MDAzZXJ4X3JpbmdbcmluZ10tXHUwMDNlcmVnX2lkeDtcbiYjNDM7XHRcdFx0cXVldWUgPSByY3VfZGVyZWZlcmVuY2VfcHJvdGVjdGVkKHd4LVx1MDAzZXJ4X3JpbmdbcmluZ10sIDEpLVx1MDAzZXJlZ19pZHg7XG4gXHRcdH1cbiBcbiBcdFx0cmV0ID0gdHhnYmVfZmRpcl93cml0ZV9wZXJmZWN0X2ZpbHRlcih3eCxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX21haW4uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfbWFpbi5jXG5pbmRleCBlYjkxYzRmMjhlY2Q0Li41MzYxMzYwZjdjNmVlIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9tYWluLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfbWFpbi5jXG5AQCAtMjM5LDcgJiM0MzsyMzksNyBAQCBzdGF0aWMgdm9pZCB0eGdiZV9kaXNhYmxlX2RldmljZShzdHJ1Y3Qgd3ggKnd4KVxuIFx0LyogZGlzYWJsZSBhbGwgZW5hYmxlZCByeCBxdWV1ZXMgKi9cbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHd4LVx1MDAzZW51bV9yeF9xdWV1ZXM7IGkmIzQzOyYjNDM7KVxuIFx0XHQvKiB0aGlzIGNhbGwgYWxzbyBmbHVzaGVzIHRoZSBwcmV2aW91cyB3cml0ZSAqL1xuLVx0XHR3eF9kaXNhYmxlX3J4X3F1ZXVlKHd4LCB3eC1cdTAwM2VyeF9yaW5nW2ldKTtcbiYjNDM7XHRcdHd4X2Rpc2FibGVfcnhfcXVldWUod3gsIHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQod3gtXHUwMDNlcnhfcmluZ1tpXSwgMSkpO1xuIFxuIFx0bmV0aWZfdHhfc3RvcF9hbGxfcXVldWVzKG5ldGRldik7XG4gXHRuZXRpZl90eF9kaXNhYmxlKG5ldGRldik7XG5AQCAtMjc1LDcgJiM0MzsyNzUsNyBAQCBzdGF0aWMgdm9pZCB0eGdiZV9kaXNhYmxlX2RldmljZShzdHJ1Y3Qgd3ggKnd4KVxuIFxuIFx0LyogZGlzYWJsZSB0cmFuc21pdHMgaW4gdGhlIGhhcmR3YXJlIG5vdyB0aGF0IGludGVycnVwdHMgYXJlIG9mZiAqL1xuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2Mgd3gtXHUwMDNlbnVtX3R4X3F1ZXVlczsgaSYjNDM7JiM0MzspIHtcbi1cdFx0dTggcmVnX2lkeCA9IHd4LVx1MDAzZXR4X3JpbmdbaV0tXHUwMDNlcmVnX2lkeDtcbiYjNDM7XHRcdHU4IHJlZ19pZHggPSByY3VfZGVyZWZlcmVuY2VfcHJvdGVjdGVkKHd4LVx1MDAzZXR4X3JpbmdbaV0sIDEpLVx1MDAzZXJlZ19pZHg7XG4gXG4gXHRcdHdyMzIod3gsIFdYX1BYX1RSX0NGRyhyZWdfaWR4KSwgV1hfUFhfVFJfQ0ZHX1NXRkxTSCk7XG4gXHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTE6MDU8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgY2hhbmdlcyBhcmUgc3RyaWN0bHkgY29uZmluZWQgdG8gdGhlIFdhbmd4dW4gRXRoZXJuZXQgbmV0d29yayBkcml2ZXJzIChsaWJ3eCwgbmdiZSwgdHhnYmUpIHVuZGVyIGRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vLiBUaGVzZSBkcml2ZXJzIHJlcXVpcmUgdmVuZG9yLXNwZWNpZmljIFBDSWUgQVNJQyBoYXJkd2FyZSB0aGF0IGlzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgKFFFTVUvR0NFKSwgbWFraW5nIHRoZSBtb2RpZmllZCBjb2RlIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBmb3Igc3l6a2FsbGVyIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3MKdG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncywKYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy4KCi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6CiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZAogIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuCiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLAogIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy4KCi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgJiMzNDtOTyBGVU5DVElPTkFMIENIQU5HRSYjMzQ7IChORkNJKSBPUiAmIzM0O1JFRkFDVE9SSU5HJiMzNDsgQ0xBSU1TOgogIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgJiMzNDtjbGVhbnVwcyYjMzQ7LCAmIzM0O3JlZmFjdG9yaW5ncyYjMzQ7LCBvciBzdGF0ZQogICYjMzQ7Tm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWQmIzM0Oy4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuCiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50CiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuCiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC4KCi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6CiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLAogIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLgogIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXIKICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoyLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOgoKLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOgogICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLgogICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pCiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuCiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50cwogICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy4KICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy4KLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6CiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczoKICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZwogICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuCiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQozLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6Ci0gQ29yZSBTdWJzeXN0ZW1zOgogICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLAogICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLgotIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczoKICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy4KLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6CiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuCi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczoKICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpXaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjoKCi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOgogIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzCiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHQKICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS4KICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgJiMzNDtmb2N1c2VkJiMzNDssCiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLgoKLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6CiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzCiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuCgotIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKToKICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrCiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuCiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyCiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlncwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOgotIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCi0gQ2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC4KLSBTdHJpcCBhbnkgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNjc0ODNmZmY4NTI1N2VkYTA3NmFjNjkwNWZiZGIwNjI4NDdiZDhkZgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBXZWQgU2VwIDkgMTE6MDU6NDIgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2Vyci5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9lcnIuYwppbmRleCBiNTZmYmRjOTU5ZGVjLi44ZWFkYjRkM2FiY2ZmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2Vyci5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfZXJyLmMKQEAgLTIwMSwxMiAmIzQzOzIwMSwxOCBAQCBzdGF0aWMgYm9vbCB3eF9yaW5nX3R4X3BlbmRpbmcoc3RydWN0IHd4ICp3eCkKIHsKIAlpbnQgaTsKIAomIzQzOwlyY3VfcmVhZF9sb2NrKCk7CiAJZm9yIChpID0gMDsgaSAmbHQ7IHd4LSZndDtudW1fdHhfcXVldWVzOyBpJiM0MzsmIzQzOykgewotCQlzdHJ1Y3Qgd3hfcmluZyAqdHhfcmluZyA9IHd4LSZndDt0eF9yaW5nW2ldOwomIzQzOwkJc3RydWN0IHd4X3JpbmcgKnR4X3JpbmcgPSByY3VfZGVyZWZlcmVuY2Uod3gtJmd0O3R4X3JpbmdbaV0pOwogCi0JCWlmICh0eF9yaW5nLSZndDtuZXh0X3RvX3VzZSAhPSB0eF9yaW5nLSZndDtuZXh0X3RvX2NsZWFuKQomIzQzOwkJaWYgKCF0eF9yaW5nKQomIzQzOwkJCWNvbnRpbnVlOwomIzQzOwkJaWYgKHR4X3JpbmctJmd0O25leHRfdG9fdXNlICE9IHR4X3JpbmctJmd0O25leHRfdG9fY2xlYW4pIHsKJiM0MzsJCQlyY3VfcmVhZF91bmxvY2soKTsKIAkJCXJldHVybiB0cnVlOwomIzQzOwkJfQogCX0KJiM0MzsJcmN1X3JlYWRfdW5sb2NrKCk7CiAKIAlyZXR1cm4gZmFsc2U7CiB9CkBAIC0yNjQsOCAmIzQzOzI3MCwxNCBAQCBzdGF0aWMgdm9pZCB3eF9kZXRlY3RfdHhfaGFuZyhzdHJ1Y3Qgd3ggKnd4KQogCiAJLyogRm9yY2UgZGV0ZWN0aW9uIG9mIGh1bmcgY29udHJvbGxlciAqLwogCWlmIChuZXRpZl9jYXJyaWVyX29rKHd4LSZndDtuZXRkZXYpKSB7Ci0JCWZvciAoaSA9IDA7IGkgJmx0OyB3eC0mZ3Q7bnVtX3R4X3F1ZXVlczsgaSYjNDM7JiM0MzspCi0JCQlzZXRfYml0KFdYX1RYX0RFVEVDVF9IQU5HLCB3eC0mZ3Q7dHhfcmluZ1tpXS0mZ3Q7c3RhdGUpOwomIzQzOwkJcmN1X3JlYWRfbG9jaygpOwomIzQzOwkJZm9yIChpID0gMDsgaSAmbHQ7IHd4LSZndDtudW1fdHhfcXVldWVzOyBpJiM0MzsmIzQzOykgewomIzQzOwkJCXN0cnVjdCB3eF9yaW5nICp0eF9yaW5nID0gcmN1X2RlcmVmZXJlbmNlKHd4LSZndDt0eF9yaW5nW2ldKTsKJiM0MzsKJiM0MzsJCQlpZiAodHhfcmluZykKJiM0MzsJCQkJc2V0X2JpdChXWF9UWF9ERVRFQ1RfSEFORywgdHhfcmluZy0mZ3Q7c3RhdGUpOwomIzQzOwkJfQomIzQzOwkJcmN1X3JlYWRfdW5sb2NrKCk7CiAJfQogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2V0aHRvb2wuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfZXRodG9vbC5jCmluZGV4IDk0MGQyZTU5ODc2YzcuLmVhZTU5NTJjMGY1ZmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfZXRodG9vbC5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfZXRodG9vbC5jCkBAIC0xNTQsOCAmIzQzOzE1NCw5IEBAIHZvaWQgd3hfZ2V0X2V0aHRvb2xfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwKIAkJfQogCX0KIAomIzQzOwlyY3VfcmVhZF9sb2NrKCk7CiAJZm9yIChqID0gMDsgaiAmbHQ7IG5ldGRldi0mZ3Q7bnVtX3R4X3F1ZXVlczsgaiYjNDM7JiM0MzspIHsKLQkJcmluZyA9IHd4LSZndDt0eF9yaW5nW2pdOwomIzQzOwkJcmluZyA9IHJjdV9kZXJlZmVyZW5jZSh3eC0mZ3Q7dHhfcmluZ1tqXSk7CiAJCWlmICghcmluZykgewogCQkJZGF0YVtpJiM0MzsmIzQzO10gPSAwOwogCQkJZGF0YVtpJiM0MzsmIzQzO10gPSAwOwpAQCAtMTcwLDcgJiM0MzsxNzEsNyBAQCB2b2lkIHd4X2dldF9ldGh0b29sX3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsCiAJCWkgJiM0Mzs9IDI7CiAJfQogCWZvciAoaiA9IDA7IGogJmx0OyBXWF9OVU1fUlhfUVVFVUVTOyBqJiM0MzsmIzQzOykgewotCQlyaW5nID0gd3gtJmd0O3J4X3Jpbmdbal07CiYjNDM7CQlyaW5nID0gcmN1X2RlcmVmZXJlbmNlKHd4LSZndDtyeF9yaW5nW2pdKTsKIAkJaWYgKCFyaW5nKSB7CiAJCQlkYXRhW2kmIzQzOyYjNDM7XSA9IDA7CiAJCQlkYXRhW2kmIzQzOyYjNDM7XSA9IDA7CkBAIC0xODQsNiAmIzQzOzE4NSw3IEBAIHZvaWQgd3hfZ2V0X2V0aHRvb2xfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwKIAkJfSB3aGlsZSAodTY0X3N0YXRzX2ZldGNoX3JldHJ5KCZhbXA7cmluZy0mZ3Q7c3luY3AsIHN0YXJ0KSk7CiAJCWkgJiM0Mzs9IDI7CiAJfQomIzQzOwlyY3VfcmVhZF91bmxvY2soKTsKIH0KIEVYUE9SVF9TWU1CT0wod3hfZ2V0X2V0aHRvb2xfc3RhdHMpOwogCkBAIC04MDUsOSAmIzQzOzgwNyw5IEBAIHN0YXRpYyBpbnQgd3hfc2V0X3JpbmdwYXJhbV92ZihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LAogCiAJaWYgKCFuZXRpZl9ydW5uaW5nKHd4LSZndDtuZXRkZXYpKSB7CiAJCWZvciAoaSA9IDA7IGkgJmx0OyB3eC0mZ3Q7bnVtX3R4X3F1ZXVlczsgaSYjNDM7JiM0MzspCi0JCQl3eC0mZ3Q7dHhfcmluZ1tpXS0mZ3Q7Y291bnQgPSBuZXdfdHhfY291bnQ7CiYjNDM7CQkJcmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZCh3eC0mZ3Q7dHhfcmluZ1tpXSwgMSktJmd0O2NvdW50ID0gbmV3X3R4X2NvdW50OwogCQlmb3IgKGkgPSAwOyBpICZsdDsgd3gtJmd0O251bV9yeF9xdWV1ZXM7IGkmIzQzOyYjNDM7KQotCQkJd3gtJmd0O3J4X3JpbmdbaV0tJmd0O2NvdW50ID0gbmV3X3J4X2NvdW50OwomIzQzOwkJCXJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQod3gtJmd0O3J4X3JpbmdbaV0sIDEpLSZndDtjb3VudCA9IG5ld19yeF9jb3VudDsKIAkJd3gtJmd0O3R4X3JpbmdfY291bnQgPSBuZXdfdHhfY291bnQ7CiAJCXd4LSZndDtyeF9yaW5nX2NvdW50ID0gbmV3X3J4X2NvdW50OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2h3LmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2h3LmMKaW5kZXggMTIyYzQ5NTJkMjAzZi4uYzc4MTM2YWJlOTJmOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9ody5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfaHcuYwpAQCAtMTU5OCwxMyAmIzQzOzE1OTgsMTcgQEAgc3RhdGljIHZvaWQgd3hfdmxhbl9zdHJpcF9jb250cm9sKHN0cnVjdCB3eCAqd3gsIGJvb2wgZW5hYmxlKQogewogCWludCBpLCBqOwogCiYjNDM7CXJjdV9yZWFkX2xvY2soKTsKIAlmb3IgKGkgPSAwOyBpICZsdDsgd3gtJmd0O251bV9yeF9xdWV1ZXM7IGkmIzQzOyYjNDM7KSB7Ci0JCXN0cnVjdCB3eF9yaW5nICpyaW5nID0gd3gtJmd0O3J4X3JpbmdbaV07CiYjNDM7CQlzdHJ1Y3Qgd3hfcmluZyAqcmluZyA9IHJjdV9kZXJlZmVyZW5jZSh3eC0mZ3Q7cnhfcmluZ1tpXSk7CiAKJiM0MzsJCWlmICghcmluZykKJiM0MzsJCQljb250aW51ZTsKIAkJaiA9IHJpbmctJmd0O3JlZ19pZHg7CiAJCXdyMzJtKHd4LCBXWF9QWF9SUl9DRkcoaiksIFdYX1BYX1JSX0NGR19WTEFOLAogCQkgICAgICBlbmFibGUgPyBXWF9QWF9SUl9DRkdfVkxBTiA6IDApOwogCX0KJiM0MzsJcmN1X3JlYWRfdW5sb2NrKCk7CiB9CiAKIHN0YXRpYyB2b2lkIHd4X3ZsYW5fcHJvbWlzY19lbmFibGUoc3RydWN0IHd4ICp3eCkKQEAgLTE3OTcsNyAmIzQzOzE4MDEsNyBAQCBzdGF0aWMgdm9pZCB3eF9zZXRfcnhfYnVmZmVyX2xlbihzdHJ1Y3Qgd3ggKnd4KQogCSAqIHRoZSBCYXNlIGFuZCBMZW5ndGggb2YgdGhlIFJ4IERlc2NyaXB0b3IgUmluZwogCSAqLwogCWZvciAoaSA9IDA7IGkgJmx0OyB3eC0mZ3Q7bnVtX3J4X3F1ZXVlczsgaSYjNDM7JiM0MzspIHsKLQkJcnhfcmluZyA9IHd4LSZndDtyeF9yaW5nW2ldOwomIzQzOwkJcnhfcmluZyA9IHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQod3gtJmd0O3J4X3JpbmdbaV0sIDEpOwogCQlyeF9yaW5nLSZndDtyeF9idWZfbGVuID0gV1hfUlhCVUZGRVJfMks7CiAjaWYgKFBBR0VfU0laRSAmbHQ7IDgxOTIpCiAJCWlmICh0ZXN0X2JpdChXWF9GTEFHX1JTQ19FTkFCTEVELCB3eC0mZ3Q7ZmxhZ3MpKQpAQCAtMjAyMSw4ICYjNDM7MjAyNSwxMSBAQCBzdGF0aWMgdm9pZCB3eF9jb25maWd1cmVfdHgoc3RydWN0IHd4ICp3eCkKIAkgICAgICBXWF9URE1fQ1RMX1RFLCBXWF9URE1fQ1RMX1RFKTsKIAogCS8qIFNldHVwIHRoZSBIVyBUeCBIZWFkIGFuZCBUYWlsIGRlc2NyaXB0b3IgcG9pbnRlcnMgKi8KLQlmb3IgKGkgPSAwOyBpICZsdDsgd3gtJmd0O251bV90eF9xdWV1ZXM7IGkmIzQzOyYjNDM7KQotCQl3eF9jb25maWd1cmVfdHhfcmluZyh3eCwgd3gtJmd0O3R4X3JpbmdbaV0pOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgd3gtJmd0O251bV90eF9xdWV1ZXM7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQlzdHJ1Y3Qgd3hfcmluZyAqdHhfcmluZyA9IHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQod3gtJmd0O3R4X3JpbmdbaV0sIDEpOwomIzQzOwomIzQzOwkJd3hfY29uZmlndXJlX3R4X3Jpbmcod3gsIHR4X3JpbmcpOwomIzQzOwl9CiAKIAl3cjMybSh3eCwgV1hfVFNDX0JVRl9BRSwgV1hfVFNDX0JVRl9BRV9USFIsIDB4MTApOwogCkBAIC0yMjQ3LDggJiM0MzsyMjU0LDExIEBAIHZvaWQgd3hfY29uZmlndXJlX3J4KHN0cnVjdCB3eCAqd3gpCiAJLyogU2V0dXAgdGhlIEhXIFJ4IEhlYWQgYW5kIFRhaWwgRGVzY3JpcHRvciBQb2ludGVycyBhbmQKIAkgKiB0aGUgQmFzZSBhbmQgTGVuZ3RoIG9mIHRoZSBSeCBEZXNjcmlwdG9yIFJpbmcKIAkgKi8KLQlmb3IgKGkgPSAwOyBpICZsdDsgd3gtJmd0O251bV9yeF9xdWV1ZXM7IGkmIzQzOyYjNDM7KQotCQl3eF9jb25maWd1cmVfcnhfcmluZyh3eCwgd3gtJmd0O3J4X3JpbmdbaV0pOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgd3gtJmd0O251bV9yeF9xdWV1ZXM7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQlzdHJ1Y3Qgd3hfcmluZyAqcnhfcmluZyA9IHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQod3gtJmd0O3J4X3JpbmdbaV0sIDEpOwomIzQzOwomIzQzOwkJd3hfY29uZmlndXJlX3J4X3Jpbmcod3gsIHJ4X3JpbmcpOwomIzQzOwl9CiAKIAkvKiBFbmFibGUgYWxsIHJlY2VpdmVzLCBkaXNhYmxlIHNlY3VyaXR5IGVuZ2luZSBwcmlvciB0byBibG9jayB0cmFmZmljICovCiAJcmV0ID0gd3hfZGlzYWJsZV9zZWNfcnhfcGF0aCh3eCk7CkBAIC0yODM4LDExICYjNDM7Mjg0OCwxNyBAQCBpbnQgd3hfZmNfZW5hYmxlKHN0cnVjdCB3eCAqd3gsIGJvb2wgdHhfcGF1c2UsIGJvb2wgcnhfcGF1c2UpCiAJICogIGFuZCBwZXJmb3JtYW5jZSByZWFzb25zLgogCSAqLwogCWlmICh3eC0mZ3Q7bnVtX3J4X3F1ZXVlcyAmZ3Q7IDEgJmFtcDsmYW1wOyAhdHhfcGF1c2UpIHsKLQkJZm9yIChpID0gMDsgaSAmbHQ7IHd4LSZndDtudW1fcnhfcXVldWVzOyBpJiM0MzsmIzQzOykKLQkJCXd4X2VuYWJsZV9yeF9kcm9wKHd4LCB3eC0mZ3Q7cnhfcmluZ1tpXSk7CiYjNDM7CQlmb3IgKGkgPSAwOyBpICZsdDsgd3gtJmd0O251bV9yeF9xdWV1ZXM7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQkJc3RydWN0IHd4X3JpbmcgKnJ4X3JpbmcgPSByY3VfZGVyZWZlcmVuY2VfcHJvdGVjdGVkKHd4LSZndDtyeF9yaW5nW2ldLCAxKTsKJiM0MzsKJiM0MzsJCQl3eF9lbmFibGVfcnhfZHJvcCh3eCwgcnhfcmluZyk7CiYjNDM7CQl9CiAJfSBlbHNlIHsKLQkJZm9yIChpID0gMDsgaSAmbHQ7IHd4LSZndDtudW1fcnhfcXVldWVzOyBpJiM0MzsmIzQzOykKLQkJCXd4X2Rpc2FibGVfcnhfZHJvcCh3eCwgd3gtJmd0O3J4X3JpbmdbaV0pOwomIzQzOwkJZm9yIChpID0gMDsgaSAmbHQ7IHd4LSZndDtudW1fcnhfcXVldWVzOyBpJiM0MzsmIzQzOykgewomIzQzOwkJCXN0cnVjdCB3eF9yaW5nICpyeF9yaW5nID0gcmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZCh3eC0mZ3Q7cnhfcmluZ1tpXSwgMSk7CiYjNDM7CiYjNDM7CQkJd3hfZGlzYWJsZV9yeF9kcm9wKHd4LCByeF9yaW5nKTsKJiM0MzsJCX0KIAl9CiAKIAlyZXR1cm4gMDsKQEAgLTI4NzAsOCAmIzQzOzI4ODYsMTUgQEAgc3RhdGljIHZvaWQgd3hfdXBkYXRlX3hvZmZfcnhfbGZjKHN0cnVjdCB3eCAqd3gpCiAJaWYgKCFkYXRhKQogCQlyZXR1cm47CiAKLQlmb3IgKGkgPSAwOyBpICZsdDsgd3gtJmd0O251bV90eF9xdWV1ZXM7IGkmIzQzOyYjNDM7KQotCQljbGVhcl9iaXQoV1hfSEFOR19DSEVDS19BUk1FRCwgd3gtJmd0O3R4X3JpbmdbaV0tJmd0O3N0YXRlKTsKJiM0MzsJcmN1X3JlYWRfbG9jaygpOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgd3gtJmd0O251bV90eF9xdWV1ZXM7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQlzdHJ1Y3Qgd3hfcmluZyAqdHhfcmluZyA9IHJjdV9kZXJlZmVyZW5jZSh3eC0mZ3Q7dHhfcmluZ1tpXSk7CiYjNDM7CiYjNDM7CQlpZiAoIXR4X3JpbmcpCiYjNDM7CQkJY29udGludWU7CiYjNDM7CQljbGVhcl9iaXQoV1hfSEFOR19DSEVDS19BUk1FRCwgdHhfcmluZy0mZ3Q7c3RhdGUpOwomIzQzOwl9CiYjNDM7CXJjdV9yZWFkX3VubG9jaygpOwogfQogCiAvKioKQEAgLTI4OTMsMTAgJiM0MzsyOTE2LDEzIEBAIHZvaWQgd3hfdXBkYXRlX3N0YXRzKHN0cnVjdCB3eCAqd3gpCiAKIAlzcGluX2xvY2soJmFtcDt3eC0mZ3Q7aHdfc3RhdHNfbG9jayk7CiAKJiM0MzsJcmN1X3JlYWRfbG9jaygpOwogCS8qIGdhdGhlciBzb21lIHN0YXRzIHRvIHRoZSB3eCBzdHJ1Y3QgdGhhdCBhcmUgcGVyIHF1ZXVlICovCiAJZm9yIChpID0gMDsgaSAmbHQ7IHd4LSZndDtudW1fcnhfcXVldWVzOyBpJiM0MzsmIzQzOykgewotCQlzdHJ1Y3Qgd3hfcmluZyAqcnhfcmluZyA9IHd4LSZndDtyeF9yaW5nW2ldOwomIzQzOwkJc3RydWN0IHd4X3JpbmcgKnJ4X3JpbmcgPSByY3VfZGVyZWZlcmVuY2Uod3gtJmd0O3J4X3JpbmdbaV0pOwogCiYjNDM7CQlpZiAoIXJ4X3JpbmcpCiYjNDM7CQkJY29udGludWU7CiAJCW5vbl9lb3BfZGVzY3MgJiM0Mzs9IHJ4X3JpbmctJmd0O3J4X3N0YXRzLm5vbl9lb3BfZGVzY3M7CiAJCWFsbG9jX3J4X2J1ZmZfZmFpbGVkICYjNDM7PSByeF9yaW5nLSZndDtyeF9zdGF0cy5hbGxvY19yeF9idWZmX2ZhaWxlZDsKIAkJaHdfY3N1bV9yeF9nb29kICYjNDM7PSByeF9yaW5nLSZndDtyeF9zdGF0cy5jc3VtX2dvb2RfY250OwpAQCAtMjkxMiwxOSAmIzQzOzI5MzgsMjggQEAgdm9pZCB3eF91cGRhdGVfc3RhdHMoc3RydWN0IHd4ICp3eCkKIAkJdTY0IHJzY19mbHVzaCA9IDA7CiAKIAkJZm9yIChpID0gMDsgaSAmbHQ7IHd4LSZndDtudW1fcnhfcXVldWVzOyBpJiM0MzsmIzQzOykgewotCQkJcnNjX2NvdW50ICYjNDM7PSB3eC0mZ3Q7cnhfcmluZ1tpXS0mZ3Q7cnhfc3RhdHMucnNjX2NvdW50OwotCQkJcnNjX2ZsdXNoICYjNDM7PSB3eC0mZ3Q7cnhfcmluZ1tpXS0mZ3Q7cnhfc3RhdHMucnNjX2ZsdXNoOwomIzQzOwkJCXN0cnVjdCB3eF9yaW5nICpyeF9yaW5nID0gcmN1X2RlcmVmZXJlbmNlKHd4LSZndDtyeF9yaW5nW2ldKTsKJiM0MzsKJiM0MzsJCQlpZiAoIXJ4X3JpbmcpCiYjNDM7CQkJCWNvbnRpbnVlOwomIzQzOwomIzQzOwkJCXJzY19jb3VudCAmIzQzOz0gcnhfcmluZy0mZ3Q7cnhfc3RhdHMucnNjX2NvdW50OwomIzQzOwkJCXJzY19mbHVzaCAmIzQzOz0gcnhfcmluZy0mZ3Q7cnhfc3RhdHMucnNjX2ZsdXNoOwogCQl9CiAJCXd4LSZndDtyc2NfY291bnQgPSByc2NfY291bnQ7CiAJCXd4LSZndDtyc2NfZmx1c2ggPSByc2NfZmx1c2g7CiAJfQogCiAJZm9yIChpID0gMDsgaSAmbHQ7IHd4LSZndDtudW1fdHhfcXVldWVzOyBpJiM0MzsmIzQzOykgewotCQlzdHJ1Y3Qgd3hfcmluZyAqdHhfcmluZyA9IHd4LSZndDt0eF9yaW5nW2ldOwomIzQzOwkJc3RydWN0IHd4X3JpbmcgKnR4X3JpbmcgPSByY3VfZGVyZWZlcmVuY2Uod3gtJmd0O3R4X3JpbmdbaV0pOwomIzQzOwomIzQzOwkJaWYgKCF0eF9yaW5nKQomIzQzOwkJCWNvbnRpbnVlOwogCiAJCXJlc3RhcnRfcXVldWUgJiM0Mzs9IHR4X3JpbmctJmd0O3R4X3N0YXRzLnJlc3RhcnRfcXVldWU7CiAJCXR4X2J1c3kgJiM0Mzs9IHR4X3JpbmctJmd0O3R4X3N0YXRzLnR4X2J1c3k7CiAJfQomIzQzOwlyY3VfcmVhZF91bmxvY2soKTsKIAl3eC0mZ3Q7cmVzdGFydF9xdWV1ZSA9IHJlc3RhcnRfcXVldWU7CiAJd3gtJmd0O3R4X2J1c3kgPSB0eF9idXN5OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2xpYi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9saWIuYwppbmRleCBlZDVhYWQ3ODU3YmQ5Li45ZjkwYWE5MmY4NDBiIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2xpYi5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfbGliLmMKQEAgLTE3MTQsNyAmIzQzOzE3MTQsMTIgQEAgbmV0ZGV2X3R4X3Qgd3hfeG1pdF9mcmFtZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCiAJaWYgKHJfaWR4ICZndDs9IHd4LSZndDtudW1fdHhfcXVldWVzKQogCQlyX2lkeCA9IHJfaWR4ICUgd3gtJmd0O251bV90eF9xdWV1ZXM7Ci0JdHhfcmluZyA9IHd4LSZndDt0eF9yaW5nW3JfaWR4XTsKJiM0MzsJdHhfcmluZyA9IHJjdV9kZXJlZmVyZW5jZSh3eC0mZ3Q7dHhfcmluZ1tyX2lkeF0pOwomIzQzOwomIzQzOwlpZiAodW5saWtlbHkoIXR4X3JpbmcpKSB7CiYjNDM7CQlkZXZfa2ZyZWVfc2tiX2FueShza2IpOwomIzQzOwkJcmV0dXJuIE5FVERFVl9UWF9PSzsKJiM0MzsJfQogCiAJcmV0dXJuIHd4X3htaXRfZnJhbWVfcmluZyhza2IsIHR4X3JpbmcpOwogfQpAQCAtMjA1OCwyNiAmIzQzOzIwNjMsMjYgQEAgc3RhdGljIGJvb2wgd3hfY2FjaGVfcmluZ192bWRxKHN0cnVjdCB3eCAqd3gpCiAJCQkvKiBJZiB3ZSBhcmUgZ3JlYXRlciB0aGFuIGluZGljZXMgbW92ZSB0byBuZXh0IHBvb2wgKi8KIAkJCWlmICgocmVnX2lkeCAmYW1wOyB+dm1kcS0mZ3Q7bWFzaykgJmd0Oz0gcnNzLSZndDtpbmRpY2VzKQogCQkJCXJlZ19pZHggPSBfX0FMSUdOX01BU0socmVnX2lkeCwgfnZtZHEtJmd0O21hc2spOwotCQkJd3gtJmd0O3J4X3JpbmdbaV0tJmd0O3JlZ19pZHggPSByZWdfaWR4OwomIzQzOwkJCXJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQod3gtJmd0O3J4X3JpbmdbaV0sIDEpLSZndDtyZWdfaWR4ID0gcmVnX2lkeDsKIAkJfQogCQlyZWdfaWR4ID0gdm1kcS0mZ3Q7b2Zmc2V0ICogX19BTElHTl9NQVNLKDEsIH52bWRxLSZndDttYXNrKTsKIAkJZm9yIChpID0gMDsgaSAmbHQ7IHd4LSZndDtudW1fdHhfcXVldWVzOyBpJiM0MzsmIzQzOywgcmVnX2lkeCYjNDM7JiM0MzspIHsKIAkJCS8qIElmIHdlIGFyZSBncmVhdGVyIHRoYW4gaW5kaWNlcyBtb3ZlIHRvIG5leHQgcG9vbCAqLwogCQkJaWYgKChyZWdfaWR4ICZhbXA7IHJzcy0mZ3Q7bWFzaykgJmd0Oz0gcnNzLSZndDtpbmRpY2VzKQogCQkJCXJlZ19pZHggPSBfX0FMSUdOX01BU0socmVnX2lkeCwgfnZtZHEtJmd0O21hc2spOwotCQkJd3gtJmd0O3R4X3JpbmdbaV0tJmd0O3JlZ19pZHggPSByZWdfaWR4OwomIzQzOwkJCXJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQod3gtJmd0O3R4X3JpbmdbaV0sIDEpLSZndDtyZWdfaWR4ID0gcmVnX2lkeDsKIAkJfQogCX0gZWxzZSB7CiAJCS8qIHN0YXJ0IGF0IFZNRHEgcmVnaXN0ZXIgb2Zmc2V0IGZvciBTUi1JT1YgZW5hYmxlZCBzZXR1cHMgKi8KIAkJcmVnX2lkeCA9IHZtZHEtJmd0O29mZnNldDsKIAkJZm9yIChpID0gMDsgaSAmbHQ7IHd4LSZndDtudW1fcnhfcXVldWVzOyBpJiM0MzsmIzQzOykKIAkJCS8qIElmIHdlIGFyZSBncmVhdGVyIHRoYW4gaW5kaWNlcyBtb3ZlIHRvIG5leHQgcG9vbCAqLwotCQkJd3gtJmd0O3J4X3JpbmdbaV0tJmd0O3JlZ19pZHggPSByZWdfaWR4ICYjNDM7IGk7CiYjNDM7CQkJcmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZCh3eC0mZ3Q7cnhfcmluZ1tpXSwgMSktJmd0O3JlZ19pZHggPSByZWdfaWR4ICYjNDM7IGk7CiAKIAkJcmVnX2lkeCA9IHZtZHEtJmd0O29mZnNldDsKIAkJZm9yIChpID0gMDsgaSAmbHQ7IHd4LSZndDtudW1fdHhfcXVldWVzOyBpJiM0MzsmIzQzOykKIAkJCS8qIElmIHdlIGFyZSBncmVhdGVyIHRoYW4gaW5kaWNlcyBtb3ZlIHRvIG5leHQgcG9vbCAqLwotCQkJd3gtJmd0O3R4X3JpbmdbaV0tJmd0O3JlZ19pZHggPSByZWdfaWR4ICYjNDM7IGk7CiYjNDM7CQkJcmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZCh3eC0mZ3Q7dHhfcmluZ1tpXSwgMSktJmd0O3JlZ19pZHggPSByZWdfaWR4ICYjNDM7IGk7CiAJfQogCiAJcmV0dXJuIHRydWU7CkBAIC0yMDk4LDEwICYjNDM7MjEwMywxMCBAQCBzdGF0aWMgdm9pZCB3eF9jYWNoZV9yaW5nX3JzcyhzdHJ1Y3Qgd3ggKnd4KQogCQlyZXR1cm47CiAKIAlmb3IgKGkgPSAwOyBpICZsdDsgd3gtJmd0O251bV9yeF9xdWV1ZXM7IGkmIzQzOyYjNDM7KQotCQl3eC0mZ3Q7cnhfcmluZ1tpXS0mZ3Q7cmVnX2lkeCA9IGk7CiYjNDM7CQlyY3VfZGVyZWZlcmVuY2VfcHJvdGVjdGVkKHd4LSZndDtyeF9yaW5nW2ldLCAxKS0mZ3Q7cmVnX2lkeCA9IGk7CiAKIAlmb3IgKGkgPSAwOyBpICZsdDsgd3gtJmd0O251bV90eF9xdWV1ZXM7IGkmIzQzOyYjNDM7KQotCQl3eC0mZ3Q7dHhfcmluZ1tpXS0mZ3Q7cmVnX2lkeCA9IGk7CiYjNDM7CQlyY3VfZGVyZWZlcmVuY2VfcHJvdGVjdGVkKHd4LSZndDt0eF9yaW5nW2ldLCAxKS0mZ3Q7cmVnX2lkeCA9IGk7CiB9CiAKIHN0YXRpYyB2b2lkIHd4X2FkZF9yaW5nKHN0cnVjdCB3eF9yaW5nICpyaW5nLCBzdHJ1Y3Qgd3hfcmluZ19jb250YWluZXIgKmhlYWQpCkBAIC0yMTkxLDcgJiM0MzsyMTk2LDcgQEAgc3RhdGljIGludCB3eF9hbGxvY19xX3ZlY3RvcihzdHJ1Y3Qgd3ggKnd4LAogCQlyaW5nLSZndDtxdWV1ZV9pbmRleCA9IHR4cl9pZHg7CiAKIAkJLyogYXNzaWduIHJpbmcgdG8gd3ggKi8KLQkJd3gtJmd0O3R4X3JpbmdbdHhyX2lkeF0gPSByaW5nOwomIzQzOwkJcmN1X2Fzc2lnbl9wb2ludGVyKHd4LSZndDt0eF9yaW5nW3R4cl9pZHhdLCByaW5nKTsKIAogCQkvKiB1cGRhdGUgY291bnQgYW5kIGluZGV4ICovCiAJCXR4cl9jb3VudC0tOwpAQCAtMjIxNyw3ICYjNDM7MjIyMiw3IEBAIHN0YXRpYyBpbnQgd3hfYWxsb2NfcV92ZWN0b3Ioc3RydWN0IHd4ICp3eCwKIAkJcmluZy0mZ3Q7cXVldWVfaW5kZXggPSByeHJfaWR4OwogCiAJCS8qIGFzc2lnbiByaW5nIHRvIHd4ICovCi0JCXd4LSZndDtyeF9yaW5nW3J4cl9pZHhdID0gcmluZzsKJiM0MzsJCXJjdV9hc3NpZ25fcG9pbnRlcih3eC0mZ3Q7cnhfcmluZ1tyeHJfaWR4XSwgcmluZyk7CiAKIAkJLyogdXBkYXRlIGNvdW50IGFuZCBpbmRleCAqLwogCQlyeHJfY291bnQtLTsKQEAgLTIyNDUsMTAgJiM0MzsyMjUwLDEwIEBAIHN0YXRpYyB2b2lkIHd4X2ZyZWVfcV92ZWN0b3Ioc3RydWN0IHd4ICp3eCwgaW50IHZfaWR4KQogCXN0cnVjdCB3eF9yaW5nICpyaW5nOwogCiAJd3hfZm9yX2VhY2hfcmluZyhyaW5nLCBxX3ZlY3Rvci0mZ3Q7dHgpCi0JCXd4LSZndDt0eF9yaW5nW3JpbmctJmd0O3F1ZXVlX2luZGV4XSA9IE5VTEw7CiYjNDM7CQlyY3VfYXNzaWduX3BvaW50ZXIod3gtJmd0O3R4X3JpbmdbcmluZy0mZ3Q7cXVldWVfaW5kZXhdLCBOVUxMKTsKIAogCXd4X2Zvcl9lYWNoX3JpbmcocmluZywgcV92ZWN0b3ItJmd0O3J4KQotCQl3eC0mZ3Q7cnhfcmluZ1tyaW5nLSZndDtxdWV1ZV9pbmRleF0gPSBOVUxMOwomIzQzOwkJcmN1X2Fzc2lnbl9wb2ludGVyKHd4LSZndDtyeF9yaW5nW3JpbmctJmd0O3F1ZXVlX2luZGV4XSwgTlVMTCk7CiAKIAl3eC0mZ3Q7cV92ZWN0b3Jbdl9pZHhdID0gTlVMTDsKIAluZXRpZl9uYXBpX2RlbCgmYW1wO3FfdmVjdG9yLSZndDtuYXBpKTsKQEAgLTI2NTksNyAmIzQzOzI2NjQsNyBAQCB2b2lkIHd4X2NsZWFuX2FsbF9yeF9yaW5ncyhzdHJ1Y3Qgd3ggKnd4KQogCWludCBpOwogCiAJZm9yIChpID0gMDsgaSAmbHQ7IHd4LSZndDtudW1fcnhfcXVldWVzOyBpJiM0MzsmIzQzOykKLQkJd3hfY2xlYW5fcnhfcmluZyh3eC0mZ3Q7cnhfcmluZ1tpXSk7CiYjNDM7CQl3eF9jbGVhbl9yeF9yaW5nKHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQod3gtJmd0O3J4X3JpbmdbaV0sIDEpKTsKIH0KIEVYUE9SVF9TWU1CT0wod3hfY2xlYW5fYWxsX3J4X3JpbmdzKTsKIApAQCAtMjcwMSw3ICYjNDM7MjcwNiw3IEBAIHN0YXRpYyB2b2lkIHd4X2ZyZWVfYWxsX3J4X3Jlc291cmNlcyhzdHJ1Y3Qgd3ggKnd4KQogCWludCBpOwogCiAJZm9yIChpID0gMDsgaSAmbHQ7IHd4LSZndDtudW1fcnhfcXVldWVzOyBpJiM0MzsmIzQzOykKLQkJd3hfZnJlZV9yeF9yZXNvdXJjZXMod3gtJmd0O3J4X3JpbmdbaV0pOwomIzQzOwkJd3hfZnJlZV9yeF9yZXNvdXJjZXMocmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZCh3eC0mZ3Q7cnhfcmluZ1tpXSwgMSkpOwogfQogCiAvKioKQEAgLTI3NzUsNyAmIzQzOzI3ODAsNyBAQCB2b2lkIHd4X2NsZWFuX2FsbF90eF9yaW5ncyhzdHJ1Y3Qgd3ggKnd4KQogCWludCBpOwogCiAJZm9yIChpID0gMDsgaSAmbHQ7IHd4LSZndDtudW1fdHhfcXVldWVzOyBpJiM0MzsmIzQzOykKLQkJd3hfY2xlYW5fdHhfcmluZyh3eC0mZ3Q7dHhfcmluZ1tpXSk7CiYjNDM7CQl3eF9jbGVhbl90eF9yaW5nKHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQod3gtJmd0O3R4X3JpbmdbaV0sIDEpKTsKIH0KIEVYUE9SVF9TWU1CT0wod3hfY2xlYW5fYWxsX3R4X3JpbmdzKTsKIApAQCAtMjgyMyw3ICYjNDM7MjgyOCw3IEBAIHN0YXRpYyB2b2lkIHd4X2ZyZWVfYWxsX3R4X3Jlc291cmNlcyhzdHJ1Y3Qgd3ggKnd4KQogCWludCBpOwogCiAJZm9yIChpID0gMDsgaSAmbHQ7IHd4LSZndDtudW1fdHhfcXVldWVzOyBpJiM0MzsmIzQzOykKLQkJd3hfZnJlZV90eF9yZXNvdXJjZXMod3gtJmd0O3R4X3JpbmdbaV0pOwomIzQzOwkJd3hfZnJlZV90eF9yZXNvdXJjZXMocmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZCh3eC0mZ3Q7dHhfcmluZ1tpXSwgMSkpOwogfQogCiB2b2lkIHd4X2ZyZWVfcmVzb3VyY2VzKHN0cnVjdCB3eCAqd3gpCkBAIC0yOTMzLDcgJiM0MzsyOTM4LDcgQEAgc3RhdGljIGludCB3eF9zZXR1cF9hbGxfcnhfcmVzb3VyY2VzKHN0cnVjdCB3eCAqd3gpCiAJaW50IGksIGVyciA9IDA7CiAKIAlmb3IgKGkgPSAwOyBpICZsdDsgd3gtJmd0O251bV9yeF9xdWV1ZXM7IGkmIzQzOyYjNDM7KSB7Ci0JCWVyciA9IHd4X3NldHVwX3J4X3Jlc291cmNlcyh3eC0mZ3Q7cnhfcmluZ1tpXSk7CiYjNDM7CQllcnIgPSB3eF9zZXR1cF9yeF9yZXNvdXJjZXMocmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZCh3eC0mZ3Q7cnhfcmluZ1tpXSwgMSkpOwogCQlpZiAoIWVycikKIAkJCWNvbnRpbnVlOwogCkBAIC0yOTQ1LDcgJiM0MzsyOTUwLDcgQEAgc3RhdGljIGludCB3eF9zZXR1cF9hbGxfcnhfcmVzb3VyY2VzKHN0cnVjdCB3eCAqd3gpCiBlcnJfc2V0dXBfcng6CiAJLyogcmV3aW5kIHRoZSBpbmRleCBmcmVlaW5nIHRoZSByaW5ncyBhcyB3ZSBnbyAqLwogCXdoaWxlIChpLS0pCi0JCXd4X2ZyZWVfcnhfcmVzb3VyY2VzKHd4LSZndDtyeF9yaW5nW2ldKTsKJiM0MzsJCXd4X2ZyZWVfcnhfcmVzb3VyY2VzKHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQod3gtJmd0O3J4X3JpbmdbaV0sIDEpKTsKIAlyZXR1cm4gZXJyOwogfQogCkBAIC0zMDM2LDcgJiM0MzszMDQxLDcgQEAgc3RhdGljIGludCB3eF9zZXR1cF9hbGxfdHhfcmVzb3VyY2VzKHN0cnVjdCB3eCAqd3gpCiAJaW50IGksIGVyciA9IDA7CiAKIAlmb3IgKGkgPSAwOyBpICZsdDsgd3gtJmd0O251bV90eF9xdWV1ZXM7IGkmIzQzOyYjNDM7KSB7Ci0JCWVyciA9IHd4X3NldHVwX3R4X3Jlc291cmNlcyh3eC0mZ3Q7dHhfcmluZ1tpXSk7CiYjNDM7CQllcnIgPSB3eF9zZXR1cF90eF9yZXNvdXJjZXMocmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZCh3eC0mZ3Q7dHhfcmluZ1tpXSwgMSkpOwogCQlpZiAoIWVycikKIAkJCWNvbnRpbnVlOwogCkBAIC0zMDQ4LDcgJiM0MzszMDUzLDcgQEAgc3RhdGljIGludCB3eF9zZXR1cF9hbGxfdHhfcmVzb3VyY2VzKHN0cnVjdCB3eCAqd3gpCiBlcnJfc2V0dXBfdHg6CiAJLyogcmV3aW5kIHRoZSBpbmRleCBmcmVlaW5nIHRoZSByaW5ncyBhcyB3ZSBnbyAqLwogCXdoaWxlIChpLS0pCi0JCXd4X2ZyZWVfdHhfcmVzb3VyY2VzKHd4LSZndDt0eF9yaW5nW2ldKTsKJiM0MzsJCXd4X2ZyZWVfdHhfcmVzb3VyY2VzKHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQod3gtJmd0O3R4X3JpbmdbaV0sIDEpKTsKIAlyZXR1cm4gZXJyOwogfQogCkBAIC0zMDk3LDcgJiM0MzszMTAyLDcgQEAgdm9pZCB3eF9nZXRfc3RhdHM2NChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LAogCiAJcmN1X3JlYWRfbG9jaygpOwogCWZvciAoaSA9IDA7IGkgJmx0OyB3eC0mZ3Q7bnVtX3J4X3F1ZXVlczsgaSYjNDM7JiM0MzspIHsKLQkJc3RydWN0IHd4X3JpbmcgKnJpbmcgPSBSRUFEX09OQ0Uod3gtJmd0O3J4X3JpbmdbaV0pOwomIzQzOwkJc3RydWN0IHd4X3JpbmcgKnJpbmcgPSByY3VfZGVyZWZlcmVuY2Uod3gtJmd0O3J4X3JpbmdbaV0pOwogCQl1NjQgYnl0ZXMsIHBhY2tldHM7CiAJCXVuc2lnbmVkIGludCBzdGFydDsKIApAQCAtMzExMyw3ICYjNDM7MzExOCw3IEBAIHZvaWQgd3hfZ2V0X3N0YXRzNjQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwKIAl9CiAKIAlmb3IgKGkgPSAwOyBpICZsdDsgd3gtJmd0O251bV90eF9xdWV1ZXM7IGkmIzQzOyYjNDM7KSB7Ci0JCXN0cnVjdCB3eF9yaW5nICpyaW5nID0gUkVBRF9PTkNFKHd4LSZndDt0eF9yaW5nW2ldKTsKJiM0MzsJCXN0cnVjdCB3eF9yaW5nICpyaW5nID0gcmN1X2RlcmVmZXJlbmNlKHd4LSZndDt0eF9yaW5nW2ldKTsKIAkJdTY0IGJ5dGVzLCBwYWNrZXRzOwogCQl1bnNpZ25lZCBpbnQgc3RhcnQ7CiAKQEAgLTMzMjQsNyAmIzQzOzMzMjksNyBAQCBpbnQgd3hfc2V0X3Jpbmcoc3RydWN0IHd4ICp3eCwgdTMyIG5ld190eF9jb3VudCwKIAkgKi8KIAlpZiAobmV3X3R4X2NvdW50ICE9IHd4LSZndDt0eF9yaW5nX2NvdW50KSB7CiAJCWZvciAoaSA9IDA7IGkgJmx0OyB3eC0mZ3Q7bnVtX3R4X3F1ZXVlczsgaSYjNDM7JiM0MzspIHsKLQkJCW1lbWNweSgmYW1wO3RlbXBfcmluZ1tpXSwgd3gtJmd0O3R4X3JpbmdbaV0sCiYjNDM7CQkJbWVtY3B5KCZhbXA7dGVtcF9yaW5nW2ldLCByY3VfZGVyZWZlcmVuY2VfcHJvdGVjdGVkKHd4LSZndDt0eF9yaW5nW2ldLCAxKSwKIAkJCSAgICAgICBzaXplb2Yoc3RydWN0IHd4X3JpbmcpKTsKIAogCQkJdGVtcF9yaW5nW2ldLmNvdW50ID0gbmV3X3R4X2NvdW50OwpAQCAtMzM0MCw5ICYjNDM7MzM0NSwxMSBAQCBpbnQgd3hfc2V0X3Jpbmcoc3RydWN0IHd4ICp3eCwgdTMyIG5ld190eF9jb3VudCwKIAkJfQogCiAJCWZvciAoaSA9IDA7IGkgJmx0OyB3eC0mZ3Q7bnVtX3R4X3F1ZXVlczsgaSYjNDM7JiM0MzspIHsKLQkJCXd4X2ZyZWVfdHhfcmVzb3VyY2VzKHd4LSZndDt0eF9yaW5nW2ldKTsKJiM0MzsJCQlzdHJ1Y3Qgd3hfcmluZyAqdHhfcmluZyA9IHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQod3gtJmd0O3R4X3JpbmdbaV0sIDEpOwomIzQzOwomIzQzOwkJCXd4X2ZyZWVfdHhfcmVzb3VyY2VzKHR4X3JpbmcpOwogCi0JCQltZW1jcHkod3gtJmd0O3R4X3JpbmdbaV0sICZhbXA7dGVtcF9yaW5nW2ldLAomIzQzOwkJCW1lbWNweSh0eF9yaW5nLCAmYW1wO3RlbXBfcmluZ1tpXSwKIAkJCSAgICAgICBzaXplb2Yoc3RydWN0IHd4X3JpbmcpKTsKIAkJfQogCkBAIC0zMzUyLDcgJiM0MzszMzU5LDcgQEAgaW50IHd4X3NldF9yaW5nKHN0cnVjdCB3eCAqd3gsIHUzMiBuZXdfdHhfY291bnQsCiAJLyogUmVwZWF0IHRoZSBwcm9jZXNzIGZvciB0aGUgUnggcmluZ3MgaWYgbmVlZGVkICovCiAJaWYgKG5ld19yeF9jb3VudCAhPSB3eC0mZ3Q7cnhfcmluZ19jb3VudCkgewogCQlmb3IgKGkgPSAwOyBpICZsdDsgd3gtJmd0O251bV9yeF9xdWV1ZXM7IGkmIzQzOyYjNDM7KSB7Ci0JCQltZW1jcHkoJmFtcDt0ZW1wX3JpbmdbaV0sIHd4LSZndDtyeF9yaW5nW2ldLAomIzQzOwkJCW1lbWNweSgmYW1wO3RlbXBfcmluZ1tpXSwgcmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZCh3eC0mZ3Q7cnhfcmluZ1tpXSwgMSksCiAJCQkgICAgICAgc2l6ZW9mKHN0cnVjdCB3eF9yaW5nKSk7CiAKIAkJCXRlbXBfcmluZ1tpXS5jb3VudCA9IG5ld19yeF9jb3VudDsKQEAgLTMzNjgsOCAmIzQzOzMzNzUsMTAgQEAgaW50IHd4X3NldF9yaW5nKHN0cnVjdCB3eCAqd3gsIHUzMiBuZXdfdHhfY291bnQsCiAJCX0KIAogCQlmb3IgKGkgPSAwOyBpICZsdDsgd3gtJmd0O251bV9yeF9xdWV1ZXM7IGkmIzQzOyYjNDM7KSB7Ci0JCQl3eF9mcmVlX3J4X3Jlc291cmNlcyh3eC0mZ3Q7cnhfcmluZ1tpXSk7Ci0JCQltZW1jcHkod3gtJmd0O3J4X3JpbmdbaV0sICZhbXA7dGVtcF9yaW5nW2ldLAomIzQzOwkJCXN0cnVjdCB3eF9yaW5nICpyeF9yaW5nID0gcmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZCh3eC0mZ3Q7cnhfcmluZ1tpXSwgMSk7CiYjNDM7CiYjNDM7CQkJd3hfZnJlZV9yeF9yZXNvdXJjZXMocnhfcmluZyk7CiYjNDM7CQkJbWVtY3B5KHJ4X3JpbmcsICZhbXA7dGVtcF9yaW5nW2ldLAogCQkJICAgICAgIHNpemVvZihzdHJ1Y3Qgd3hfcmluZykpOwogCQl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfcHRwLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X3B0cC5jCmluZGV4IDQ3MDhlN2YzOTU4ZjcuLjY4ZGM2Mjk3N2FhYjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfcHRwLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9wdHAuYwpAQCAtMjc0LDExICYjNDM7Mjc0LDE1IEBAIHN0YXRpYyB2b2lkIHd4X3B0cF9yeF9oYW5nKHN0cnVjdCB3eCAqd3gpCiAKIAkvKiBkZXRlcm1pbmUgdGhlIG1vc3QgcmVjZW50IHdhdGNoZG9nIG9yIHJ4X3RpbWVzdGFtcCBldmVudCAqLwogCXJ4X2V2ZW50ID0gd3gtJmd0O2xhc3RfcnhfcHRwX2NoZWNrOwomIzQzOwlyY3VfcmVhZF9sb2NrKCk7CiAJZm9yIChuID0gMDsgbiAmbHQ7IHd4LSZndDtudW1fcnhfcXVldWVzOyBuJiM0MzsmIzQzOykgewotCQlyeF9yaW5nID0gd3gtJmd0O3J4X3Jpbmdbbl07CiYjNDM7CQlyeF9yaW5nID0gcmN1X2RlcmVmZXJlbmNlKHd4LSZndDtyeF9yaW5nW25dKTsKJiM0MzsJCWlmICghcnhfcmluZykKJiM0MzsJCQljb250aW51ZTsKIAkJaWYgKHRpbWVfYWZ0ZXIocnhfcmluZy0mZ3Q7bGFzdF9yeF90aW1lc3RhbXAsIHJ4X2V2ZW50KSkKIAkJCXJ4X2V2ZW50ID0gcnhfcmluZy0mZ3Q7bGFzdF9yeF90aW1lc3RhbXA7CiAJfQomIzQzOwlyY3VfcmVhZF91bmxvY2soKTsKIAogCS8qIG9ubHkgbmVlZCB0byByZWFkIHRoZSBoaWdoIFJYU1RNUCByZWdpc3RlciB0byBjbGVhciB0aGUgbG9jayAqLwogCWlmICh0aW1lX2lzX2JlZm9yZV9qaWZmaWVzKHJ4X2V2ZW50ICYjNDM7IDUgKiBIWikpIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfdHlwZS5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF90eXBlLmgKaW5kZXggOTQ1NGU5MDI1OGQ4ZS4uOTk1MmQwMjM0MjQwMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF90eXBlLmgKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF90eXBlLmgKQEAgLTEzNTksOCAmIzQzOzEzNTksOCBAQCBzdHJ1Y3Qgd3ggewogCXUzMiB0eF9yaW5nX2NvdW50OwogCXUzMiByeF9yaW5nX2NvdW50OwogCi0Jc3RydWN0IHd4X3JpbmcgKnR4X3JpbmdbNjRdIF9fX19jYWNoZWxpbmVfYWxpZ25lZF9pbl9zbXA7Ci0Jc3RydWN0IHd4X3JpbmcgKnJ4X3JpbmdbNjRdOwomIzQzOwlzdHJ1Y3Qgd3hfcmluZyBfX3JjdSAqdHhfcmluZ1s2NF0gX19fX2NhY2hlbGluZV9hbGlnbmVkX2luX3NtcDsKJiM0MzsJc3RydWN0IHd4X3JpbmcgX19yY3UgKnJ4X3JpbmdbNjRdOwogCXN0cnVjdCB3eF9xX3ZlY3RvciAqcV92ZWN0b3JbNjRdOwogCWludCBudW1fcnhfcG9vbHM7CiAJaW50IG51bV9yeF9xdWV1ZXNfcGVyX3Bvb2w7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X3ZmX2NvbW1vbi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF92Zl9jb21tb24uYwppbmRleCAyNmRlNzhlOWE2OWVmLi5jODMwODI0YzQ4NjllIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X3ZmX2NvbW1vbi5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfdmZfY29tbW9uLmMKQEAgLTIwNSw3ICYjNDM7MjA1LDcgQEAgc3RhdGljIHZvaWQgd3hfY29uZmlndXJlX3J4X3ZmKHN0cnVjdCB3eCAqd3gpCiAJICogdGhlIEJhc2UgYW5kIExlbmd0aCBvZiB0aGUgUnggRGVzY3JpcHRvciBSaW5nCiAJICovCiAJZm9yIChpID0gMDsgaSAmbHQ7IHd4LSZndDtudW1fcnhfcXVldWVzOyBpJiM0MzsmIzQzOykgewotCQlzdHJ1Y3Qgd3hfcmluZyAqcnhfcmluZyA9IHd4LSZndDtyeF9yaW5nW2ldOwomIzQzOwkJc3RydWN0IHd4X3JpbmcgKnJ4X3JpbmcgPSByY3VfZGVyZWZlcmVuY2VfcHJvdGVjdGVkKHd4LSZndDtyeF9yaW5nW2ldLCAxKTsKICNpZmRlZiBIQVZFX1NXSU9UTEJfU0tJUF9DUFVfU1lOQwogCQl3eF9zZXRfcnhfYnVmZmVyX2xlbl92Zih3eCwgcnhfcmluZyk7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfdmZfbGliLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X3ZmX2xpYi5jCmluZGV4IDczMjViNDc1ZWUxMGMuLjBlMDllNjZjNmRlNmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfdmZfbGliLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF92Zl9saWIuYwpAQCAtMTc1LDggJiM0MzsxNzUsMTEgQEAgdm9pZCB3eF9jb25maWd1cmVfdHhfdmYoc3RydWN0IHd4ICp3eCkKIAl1MzIgaTsKIAogCS8qIFNldHVwIHRoZSBIVyBUeCBIZWFkIGFuZCBUYWlsIGRlc2NyaXB0b3IgcG9pbnRlcnMgKi8KLQlmb3IgKGkgPSAwOyBpICZsdDsgd3gtJmd0O251bV90eF9xdWV1ZXM7IGkmIzQzOyYjNDM7KQotCQl3eF9jb25maWd1cmVfdHhfcmluZ192Zih3eCwgd3gtJmd0O3R4X3JpbmdbaV0pOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgd3gtJmd0O251bV90eF9xdWV1ZXM7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQlzdHJ1Y3Qgd3hfcmluZyAqdHhfcmluZyA9IHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQod3gtJmd0O3R4X3JpbmdbaV0sIDEpOwomIzQzOwomIzQzOwkJd3hfY29uZmlndXJlX3R4X3JpbmdfdmYod3gsIHR4X3JpbmcpOwomIzQzOwl9CiB9CiAKIHN0YXRpYyB2b2lkIHd4X2NvbmZpZ3VyZV9zcnJjdGxfdmYoc3RydWN0IHd4ICp3eCwgc3RydWN0IHd4X3JpbmcgKnJpbmcsCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9ldGh0b29sLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9ldGh0b29sLmMKaW5kZXggMTk2MGY3MTU0MTUxZC4uOWU5MDcwMmE1MTQ2YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfZXRodG9vbC5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX2V0aHRvb2wuYwpAQCAtMzcsOSAmIzQzOzM3LDkgQEAgc3RhdGljIGludCBuZ2JlX3NldF9yaW5ncGFyYW0oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwKIAogCWlmICghbmV0aWZfcnVubmluZyh3eC0mZ3Q7bmV0ZGV2KSkgewogCQlmb3IgKGkgPSAwOyBpICZsdDsgd3gtJmd0O251bV90eF9xdWV1ZXM7IGkmIzQzOyYjNDM7KQotCQkJd3gtJmd0O3R4X3JpbmdbaV0tJmd0O2NvdW50ID0gbmV3X3R4X2NvdW50OwomIzQzOwkJCXJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQod3gtJmd0O3R4X3JpbmdbaV0sIDEpLSZndDtjb3VudCA9IG5ld190eF9jb3VudDsKIAkJZm9yIChpID0gMDsgaSAmbHQ7IHd4LSZndDtudW1fcnhfcXVldWVzOyBpJiM0MzsmIzQzOykKLQkJCXd4LSZndDtyeF9yaW5nW2ldLSZndDtjb3VudCA9IG5ld19yeF9jb3VudDsKJiM0MzsJCQlyY3VfZGVyZWZlcmVuY2VfcHJvdGVjdGVkKHd4LSZndDtyeF9yaW5nW2ldLCAxKS0mZ3Q7Y291bnQgPSBuZXdfcnhfY291bnQ7CiAJCXd4LSZndDt0eF9yaW5nX2NvdW50ID0gbmV3X3R4X2NvdW50OwogCQl3eC0mZ3Q7cnhfcmluZ19jb3VudCA9IG5ld19yeF9jb3VudDsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfbWFpbi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfbWFpbi5jCmluZGV4IDg1NWRjOTYzYzYxMGMuLmU0NWQ3ZGZkYzlmOTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX21haW4uYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9tYWluLmMKQEAgLTQwNiw3ICYjNDM7NDA2LDcgQEAgc3RhdGljIHZvaWQgbmdiZV9kaXNhYmxlX2RldmljZShzdHJ1Y3Qgd3ggKnd4KQogCS8qIGRpc2FibGUgYWxsIGVuYWJsZWQgcnggcXVldWVzICovCiAJZm9yIChpID0gMDsgaSAmbHQ7IHd4LSZndDtudW1fcnhfcXVldWVzOyBpJiM0MzsmIzQzOykKIAkJLyogdGhpcyBjYWxsIGFsc28gZmx1c2hlcyB0aGUgcHJldmlvdXMgd3JpdGUgKi8KLQkJd3hfZGlzYWJsZV9yeF9xdWV1ZSh3eCwgd3gtJmd0O3J4X3JpbmdbaV0pOwomIzQzOwkJd3hfZGlzYWJsZV9yeF9xdWV1ZSh3eCwgcmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZCh3eC0mZ3Q7cnhfcmluZ1tpXSwgMSkpOwogCS8qIGRpc2FibGUgcmVjZWl2ZXMgKi8KIAl3eF9kaXNhYmxlX3J4KHd4KTsKIAl3eF9uYXBpX2Rpc2FibGVfYWxsKHd4KTsKQEAgLTQyMiw3ICYjNDM7NDIyLDcgQEAgc3RhdGljIHZvaWQgbmdiZV9kaXNhYmxlX2RldmljZShzdHJ1Y3Qgd3ggKnd4KQogCXd4X2lycV9kaXNhYmxlKHd4KTsKIAkvKiBkaXNhYmxlIHRyYW5zbWl0cyBpbiB0aGUgaGFyZHdhcmUgbm93IHRoYXQgaW50ZXJydXB0cyBhcmUgb2ZmICovCiAJZm9yIChpID0gMDsgaSAmbHQ7IHd4LSZndDtudW1fdHhfcXVldWVzOyBpJiM0MzsmIzQzOykgewotCQl1OCByZWdfaWR4ID0gd3gtJmd0O3R4X3JpbmdbaV0tJmd0O3JlZ19pZHg7CiYjNDM7CQl1OCByZWdfaWR4ID0gcmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZCh3eC0mZ3Q7dHhfcmluZ1tpXSwgMSktJmd0O3JlZ19pZHg7CiAKIAkJd3IzMih3eCwgV1hfUFhfVFJfQ0ZHKHJlZ19pZHgpLCBXWF9QWF9UUl9DRkdfU1dGTFNIKTsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX2V0aHRvb2wuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfZXRodG9vbC5jCmluZGV4IDNlMzJhY2E3MjgwNjUuLmZjZmFmNmYyZjU0NGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfZXRodG9vbC5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfZXRodG9vbC5jCkBAIC02MSw5ICYjNDM7NjEsOSBAQCBzdGF0aWMgaW50IHR4Z2JlX3NldF9yaW5ncGFyYW0oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwKIAogCWlmICghbmV0aWZfcnVubmluZyh3eC0mZ3Q7bmV0ZGV2KSkgewogCQlmb3IgKGkgPSAwOyBpICZsdDsgd3gtJmd0O251bV90eF9xdWV1ZXM7IGkmIzQzOyYjNDM7KQotCQkJd3gtJmd0O3R4X3JpbmdbaV0tJmd0O2NvdW50ID0gbmV3X3R4X2NvdW50OwomIzQzOwkJCXJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQod3gtJmd0O3R4X3JpbmdbaV0sIDEpLSZndDtjb3VudCA9IG5ld190eF9jb3VudDsKIAkJZm9yIChpID0gMDsgaSAmbHQ7IHd4LSZndDtudW1fcnhfcXVldWVzOyBpJiM0MzsmIzQzOykKLQkJCXd4LSZndDtyeF9yaW5nW2ldLSZndDtjb3VudCA9IG5ld19yeF9jb3VudDsKJiM0MzsJCQlyY3VfZGVyZWZlcmVuY2VfcHJvdGVjdGVkKHd4LSZndDtyeF9yaW5nW2ldLCAxKS0mZ3Q7Y291bnQgPSBuZXdfcnhfY291bnQ7CiAJCXd4LSZndDt0eF9yaW5nX2NvdW50ID0gbmV3X3R4X2NvdW50OwogCQl3eC0mZ3Q7cnhfcmluZ19jb3VudCA9IG5ld19yeF9jb3VudDsKIApAQCAtMzY2LDcgJiM0MzszNjYsNyBAQCBzdGF0aWMgaW50IHR4Z2JlX2FkZF9ldGh0b29sX2ZkaXJfZW50cnkoc3RydWN0IHR4Z2JlICp0eGdiZSwKIAogCQkvKiBNYXAgdGhlIHJpbmcgb250byB0aGUgYWJzb2x1dGUgcXVldWUgaW5kZXggKi8KIAkJaWYgKCF2ZikKLQkJCXF1ZXVlID0gd3gtJmd0O3J4X3JpbmdbcmluZ10tJmd0O3JlZ19pZHg7CiYjNDM7CQkJcXVldWUgPSByY3VfZGVyZWZlcmVuY2VfcHJvdGVjdGVkKHd4LSZndDtyeF9yaW5nW3JpbmddLCAxKS0mZ3Q7cmVnX2lkeDsKIAkJZWxzZQogCQkJcXVldWUgPSAoKHZmIC0gMSkgKiB3eC0mZ3Q7bnVtX3J4X3F1ZXVlc19wZXJfcG9vbCkgJiM0MzsgcmluZzsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX2ZkaXIuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfZmRpci5jCmluZGV4IGE4NDAxMDgyODU1MTcuLjYwYzhlYTQ3NzgyN2QgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfZmRpci5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfZmRpci5jCkBAIC01OTksNyAmIzQzOzU5OSw3IEBAIHN0YXRpYyB2b2lkIHR4Z2JlX2ZkaXJfZmlsdGVyX3Jlc3RvcmUoc3RydWN0IHd4ICp3eCkKIAkJCX0KIAogCQkJLyogTWFwIHRoZSByaW5nIG9udG8gdGhlIGFic29sdXRlIHF1ZXVlIGluZGV4ICovCi0JCQlxdWV1ZSA9IHd4LSZndDtyeF9yaW5nW3JpbmddLSZndDtyZWdfaWR4OwomIzQzOwkJCXF1ZXVlID0gcmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZCh3eC0mZ3Q7cnhfcmluZ1tyaW5nXSwgMSktJmd0O3JlZ19pZHg7CiAJCX0KIAogCQlyZXQgPSB0eGdiZV9mZGlyX3dyaXRlX3BlcmZlY3RfZmlsdGVyKHd4LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9tYWluLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX21haW4uYwppbmRleCBlYjkxYzRmMjhlY2Q0Li41MzYxMzYwZjdjNmVlIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX21haW4uYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX21haW4uYwpAQCAtMjM5LDcgJiM0MzsyMzksNyBAQCBzdGF0aWMgdm9pZCB0eGdiZV9kaXNhYmxlX2RldmljZShzdHJ1Y3Qgd3ggKnd4KQogCS8qIGRpc2FibGUgYWxsIGVuYWJsZWQgcnggcXVldWVzICovCiAJZm9yIChpID0gMDsgaSAmbHQ7IHd4LSZndDtudW1fcnhfcXVldWVzOyBpJiM0MzsmIzQzOykKIAkJLyogdGhpcyBjYWxsIGFsc28gZmx1c2hlcyB0aGUgcHJldmlvdXMgd3JpdGUgKi8KLQkJd3hfZGlzYWJsZV9yeF9xdWV1ZSh3eCwgd3gtJmd0O3J4X3JpbmdbaV0pOwomIzQzOwkJd3hfZGlzYWJsZV9yeF9xdWV1ZSh3eCwgcmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZCh3eC0mZ3Q7cnhfcmluZ1tpXSwgMSkpOwogCiAJbmV0aWZfdHhfc3RvcF9hbGxfcXVldWVzKG5ldGRldik7CiAJbmV0aWZfdHhfZGlzYWJsZShuZXRkZXYpOwpAQCAtMjc1LDcgJiM0MzsyNzUsNyBAQCBzdGF0aWMgdm9pZCB0eGdiZV9kaXNhYmxlX2RldmljZShzdHJ1Y3Qgd3ggKnd4KQogCiAJLyogZGlzYWJsZSB0cmFuc21pdHMgaW4gdGhlIGhhcmR3YXJlIG5vdyB0aGF0IGludGVycnVwdHMgYXJlIG9mZiAqLwogCWZvciAoaSA9IDA7IGkgJmx0OyB3eC0mZ3Q7bnVtX3R4X3F1ZXVlczsgaSYjNDM7JiM0MzspIHsKLQkJdTggcmVnX2lkeCA9IHd4LSZndDt0eF9yaW5nW2ldLSZndDtyZWdfaWR4OwomIzQzOwkJdTggcmVnX2lkeCA9IHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQod3gtJmd0O3R4X3JpbmdbaV0sIDEpLSZndDtyZWdfaWR4OwogCiAJCXdyMzIod3gsIFdYX1BYX1RSX0NGRyhyZWdfaWR4KSwgV1hfUFhfVFJfQ0ZHX1NXRkxTSCk7CiAJfQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxMTowNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzE0MAoJCQkJCQkJb3V0cHV0OiA0MwoJCQkJCQkJdGhvdWdodHM6IDM3MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBQYXRjaCBmb3IgU3l6a2FsbGVyIEZ1enppbmcqKgoKT2theSwgdGhlIHVzZXImIzM5O3MgZ2l2ZW4gbWUgYSBwYXRjaCwgYW5kIG15IGZpcnN0IHRob3VnaHQgaXMsICYjMzQ7UmlnaHQsIHRpbWUgdG8gc2VlIHdoYXQgdGhpcyB0aGluZyYjMzk7cyB0b3VjaGluZy4mIzM0OyBMZXQmIzM5O3Mgc3RhcnQgd2l0aCBhIGZpbGUgbGlzdGluZyDigJMgdGhlIGNoYW5nZXMgYXJlIGNvbmNlbnRyYXRlZCB3aXRoaW4gdGhlIGB3YW5neHVuYCBldGhlcm5ldCBkcml2ZXIgc3Vic3lzdGVtLiBUaGUgZmlsZXMgaGl0IHN1Z2dlc3QgbW9kaWZpY2F0aW9ucyBhY3Jvc3Mgc2V2ZXJhbCBhcmVhczogZXJyb3IgaGFuZGxpbmcsIGV0aHRvb2wgaW50ZWdyYXRpb24sIGhhcmR3YXJlIGFjY2VzcywgYW5kIHZhcmlvdXMgbGlicmFyeSBmdW5jdGlvbnMgd2l0aGluIHRoZSBgbGlid3hgIGRpcmVjdG9yeSwgYWxvbmcgd2l0aCBgbmdiZWAgYW5kIGB0eGdiZWAgd2hpY2ggc2VlbSBsaWtlIHNwZWNpZmljIGRyaXZlciBpbXBsZW1lbnRhdGlvbnMuCgpOb3csIEkgbmVlZCB0byBnZXQgYSBiZXR0ZXIgaGFuZGxlIG9uIHdoYXQgYHdhbmd4dW5gIGFjdHVhbGx5ICppcyouIFRoaXMgbG9va3MgbGlrZSBzb21lIHNvcnQgb2YgRXRoZXJuZXQgY29udHJvbGxlciBvciBOSUMuIEkmIzM5O20gZ3Vlc3NpbmcgaXQmIzM5O3MgbGlrZWx5IEdiRSBvciAxMEdiRSBQQ0kgbmV0d29yayBpbnRlcmZhY2UgY2FyZHMgYmFzZWQgb24gdGhlIGRyaXZlciBuYW1lcywgYnV0IEkgbmVlZCBjb25maXJtYXRpb24uIExldCYjMzk7cyBzZWUgaWYgSSBjYW4gZmluZCBtb3JlIGNvbnRleHQgd2l0aGluIHRoZSBLY29uZmlnIGZpbGVzLCBvciBwZXJoYXBzIGEgcXVpY2sgc2VhcmNoIHRocm91Z2ggdGhlIHNvdXJjZSBjb2RlIGl0c2VsZiwgdG8gdW5kZXJzdGFuZCB0aGUgaGFyZHdhcmUuIFRoaXMgd2lsbCBnaXZlIG1lIGEgYmV0dGVyIGdyYXNwIG9mIHRoZSBwb3RlbnRpYWwgYXR0YWNrIHN1cmZhY2UgYW5kIHdoZXRoZXIgaXQmIzM5O3Mgd29ydGggYWxsb2NhdGluZyB0aGUgcmVzb3VyY2VzIHRvIGZ1enouCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTE6MDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIChOR0JFfFRYR0JFfExJQldYKSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9LY29uZmlnPTE3PWlmIE5FVF9WRU5ET1JfV0FOR1hVTlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9LY29uZmlnLTE4LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9LY29uZmlnOjE5OmNvbmZpZyBMSUJXWFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9LY29uZmlnLTIwLVx0dHJpc3RhdGVcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL0tjb25maWctMjctXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL0tjb25maWc6Mjg6Y29uZmlnIE5HQkVcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vS2NvbmZpZy0yOS1cdHRyaXN0YXRlIFwmIzM0O1dhbmd4dW4oUikgR2JFIFBDSSBFeHByZXNzIGFkYXB0ZXJzIHN1cHBvcnRcJiMzNDtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL0tjb25maWctNDItXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL0tjb25maWc6NDM6Y29uZmlnIFRYR0JFXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL0tjb25maWctNDQtXHR0cmlzdGF0ZSBcJiMzNDtXYW5neHVuKFIpIDEwLzI1LzQwR2JFIFBDSSBFeHByZXNzIGFkYXB0ZXJzIHN1cHBvcnRcJiMzNDtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL0tjb25maWctNjYtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL0tjb25maWc6Njc6Y29uZmlnIFRYR0JFVkZcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vS2NvbmZpZy02OC1cdHRyaXN0YXRlIFwmIzM0O1dhbmd4dW4oUikgMTAvMjUvNDBHIFZpcnR1YWwgRnVuY3Rpb24gRXRoZXJuZXQgc3VwcG9ydFwmIzM0O1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vS2NvbmZpZy04NC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vS2NvbmZpZzo4NTpjb25maWcgTkdCRVZGXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL0tjb25maWctODYtXHR0cmlzdGF0ZSBcJiMzNDtXYW5neHVuKFIpIEdiRSBWaXJ0dWFsIEZ1bmN0aW9uIEV0aGVybmV0IHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxMTowNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDIyMgoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDI2NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBXYW5neHVuIE5JQyBEcml2ZXIgU2l0dWF0aW9uKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIFNlY3Rpb24gMiBvZiB0aGUgaW5zdHJ1Y3Rpb25zIGhpZ2hsaWdodHMgJiMzNDtTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmUuJiMzNDsgU3BlY2lmaWNhbGx5LCBpdCBtZW50aW9ucyB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBhbmQgR1BVIGRyaXZlcnMgbGlrZSBgbWx4c3dgLCBgcGRzX2NvcmVgLCBgcWVkYCwgYGlvbmljYCwgYW5kIGBhbWRncHVgLiBUaGVzZSBhbGwgcmVxdWlyZSBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMsIHdoaWNoIGFyZSAqbm90KiBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLiBNeSBpbml0aWFsIHJlYWQgb2YgdGhpcyBzdWdnZXN0cyBXYW5neHVuIE5JQ3MgZmFsbCBpbnRvIHRoaXMgY2F0ZWdvcnksIGJ1dCBsZXQmIzM5O3MgYmUgc3VyZS4KCldhbmd4dW4gKHNwZWNpZmljYWxseSB0aGUgZHJpdmVycyBgbGlid3hgLCBgbmdiZWAsIGB0eGdiZWAsIGBuZ2JldmZgLCBhbmQgYHR4Z2JldmZgKSBhcmUgY2xlYXJseSBldGhlcm5ldCBkcml2ZXJzIGRlc2lnbmVkIGZvciBXYW5neHVuIEdiRSAvIDEwR2JFIC8gMjVHYkUgLyA0MEdiRSBhZGFwdGVycy4gTXkgdW5kZXJzdGFuZGluZyBpcyB0aGF0IHRoZXNlIGFyZSAqcGh5c2ljYWwqIFBDSSBOSUNzLiBJIGtub3cgdGhhdCBzdGFuZGFyZCBRRU1VIG5ldHdvcmsgY2FyZCBlbXVsYXRpb25zIGluY2x1ZGUgYGUxMDAwYCwgYGUxMDAwZWAsIGBydGw4MTM5YCwgYHZpcnRpby1uZXRgLCBgcGNuZXRgLCBgbmUya19wY2lgLCBgdm14bmV0M2AsIGFuZCBgaWdiYC4gU28sIFdhbmd4dW4gaXMgKmRlZmluaXRlbHkqIG5vdCBvbmUgb2YgdGhvc2UgZW11bGF0ZWQgb3B0aW9ucy4gR0NFIGlzbiYjMzk7dCByZWxldmFudCBoZXJlLgoKTm93LCBqdXN0IHRvIGJlIGFic29sdXRlbHkgdGhvcm91Z2gsIEkgd2FudCB0byBydWxlIG91dCB0aGUgcG9zc2liaWxpdHkgb2YgYW55IHZpcnR1YWwgb3Igc29mdHdhcmUtZW11bGF0ZWQgY29tcG9uZW50cyB3aXRoaW4gdGhlIFdhbmd4dW4gYXJjaGl0ZWN0dXJlLCBvciBhbnkgY29yZSBzdWJzeXN0ZW0gc3VwcG9ydC4gVGhlIGBkcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL0tjb25maWdgIGZpbGUgaW4gdGhlIGtlcm5lbCBzb3VyY2UgaXMgd2hlcmUgSSYjMzk7bGwgZmluZCB0aGF0LiBJJiMzOTttIGdvaW5nIHRvIHB1bGwgdGhhdCB1cCBhbmQgc2VlIGlmIHRoZXJlIGFyZSBhbnkgaGludHMgb2YgYSBtb3JlIGFic3RyYWN0IGxheWVyIG9yIGRlcGVuZGVuY2llcy4gSSBuZWVkIHRvIGJlIGNlcnRhaW4gdGhlcmUmIzM5O3Mgbm8gdmlydHVhbCBjb21wb25lbnQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTE6MDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gICAyOlx0I1xuICAgMzpcdCMgV2FuZ3h1biBuZXR3b3JrIGRldmljZSBjb25maWd1cmF0aW9uXG4gICA0Olx0I1xuICAgNTpcdFxuICAgNjpcdGNvbmZpZyBORVRfVkVORE9SX1dBTkdYVU5cbiAgIDc6XHRcdGJvb2wgXCYjMzQ7V2FuZ3h1biBkZXZpY2VzXCYjMzQ7XG4gICA4Olx0XHRkZWZhdWx0IHlcbiAgIDk6XHRcdGhlbHBcbiAgMTA6XHRcdCAgSWYgeW91IGhhdmUgYSBuZXR3b3JrIChFdGhlcm5ldCkgY2FyZCBmcm9tIFdhbmd4dW4oUiksIHNheSBZLlxuICAxMTpcdFxuICAxMjpcdFx0ICBOb3RlIHRoYXQgdGhlIGFuc3dlciB0byB0aGlzIHF1ZXN0aW9uIGRvZXNuJiMzOTt0IGRpcmVjdGx5IGFmZmVjdCB0aGVcbiAgMTM6XHRcdCAga2VybmVsOiBzYXlpbmcgTiB3aWxsIGp1c3QgY2F1c2UgdGhlIGNvbmZpZ3VyYXRvciB0byBza2lwIGFsbFxuICAxNDpcdFx0ICB0aGUgcXVlc3Rpb25zIGFib3V0IFdhbmd4dW4oUikgY2FyZHMuIElmIHlvdSBzYXkgWSwgeW91IHdpbGxcbiAgMTU6XHRcdCAgYmUgYXNrZWQgZm9yIHlvdXIgc3BlY2lmaWMgY2FyZCBpbiB0aGUgZm9sbG93aW5nIHF1ZXN0aW9ucy5cbiAgMTY6XHRcbiAgMTc6XHRpZiBORVRfVkVORE9SX1dBTkdYVU5cbiAgMTg6XHRcbiAgMTk6XHRjb25maWcgTElCV1hcbiAgMjA6XHRcdHRyaXN0YXRlXG4gIDIxOlx0XHRkZXBlbmRzIG9uIFBUUF8xNTg4X0NMT0NLX09QVElPTkFMXG4gIDIyOlx0XHRzZWxlY3QgUEFHRV9QT09MXG4gIDIzOlx0XHRzZWxlY3QgRElNTElCXG4gIDI0Olx0XHRzZWxlY3QgUEhZTElOS1xuICAyNTpcdFx0aGVscFxuICAyNjpcdFx0Q29tbW9uIGxpYnJhcnkgZm9yIFdhbmd4dW4oUikgRXRoZXJuZXQgZHJpdmVycy5cbiAgMjc6XHRcbiAgMjg6XHRjb25maWcgTkdCRVxuICAyOTpcdFx0dHJpc3RhdGUgXCYjMzQ7V2FuZ3h1bihSKSBHYkUgUENJIEV4cHJlc3MgYWRhcHRlcnMgc3VwcG9ydFwmIzM0O1xuICAzMDpcdFx0ZGVwZW5kcyBvbiBQQ0lcbiAgMzE6XHRcdGRlcGVuZHMgb24gUFRQXzE1ODhfQ0xPQ0tfT1BUSU9OQUxcbiAgMzI6XHRcdHNlbGVjdCBMSUJXWFxuICAzMzpcdFx0aGVscFxuICAzNDpcdFx0ICBUaGlzIGRyaXZlciBzdXBwb3J0cyBXYW5neHVuKFIpIEdiRSBQQ0kgRXhwcmVzcyBmYW1pbHkgb2ZcbiAgMzU6XHRcdCAgYWRhcHRlcnMuXG4gIDM2Olx0XG4gIDM3Olx0XHQgIE1vcmUgc3BlY2lmaWMgaW5mb3JtYXRpb24gb24gY29uZmlndXJpbmcgdGhlIGRyaXZlciBpcyBpblxuICAzODpcdFx0ICBcdTAwM2NmaWxlOkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9kZXZpY2VfZHJpdmVycy9ldGhlcm5ldC93YW5neHVuL25nYmUucnN0XHUwMDNlLlxuICAzOTpcdFxuICA0MDpcdFx0ICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlLiBUaGUgbW9kdWxlXG4gIDQxOlx0XHQgIHdpbGwgYmUgY2FsbGVkIG5nYmUuXG4gIDQyOlx0XG4gIDQzOlx0Y29uZmlnIFRYR0JFXG4gIDQ0Olx0XHR0cmlzdGF0ZSBcJiMzNDtXYW5neHVuKFIpIDEwLzI1LzQwR2JFIFBDSSBFeHByZXNzIGFkYXB0ZXJzIHN1cHBvcnRcJiMzNDtcbiAgNDU6XHRcdGRlcGVuZHMgb24gUENJXG4gIDQ2Olx0XHRkZXBlbmRzIG9uIENPTU1PTl9DTEtcbiAgNDc6XHRcdGRlcGVuZHMgb24gSTJDX0RFU0lHTldBUkVfUExBVEZPUk1cbiAgNDg6XHRcdGRlcGVuZHMgb24gUFRQXzE1ODhfQ0xPQ0tfT1BUSU9OQUxcbiAgNDk6XHRcdHNlbGVjdCBNQVJWRUxMXzEwR19QSFlcbiAgNTA6XHRcdHNlbGVjdCBSRUdNQVBcbiAgNTE6XHRcdHNlbGVjdCBIV01PTiBpZiBUWEdCRT15XG4gIDUyOlx0XHRzZWxlY3QgU0ZQXG4gIDUzOlx0XHRzZWxlY3QgR1BJT0xJQlxuICA1NDpcdFx0c2VsZWN0IEdQSU9MSUJfSVJRQ0hJUFxuICA1NTpcdFx0c2VsZWN0IFBDU19YUENTXG4gIDU2Olx0XHRzZWxlY3QgTElCV1hcbiAgNTc6XHRcdGhlbHBcbiAgNTg6XHRcdCAgVGhpcyBkcml2ZXIgc3VwcG9ydHMgV2FuZ3h1bihSKSAxMC8yNS80MEdiRSBQQ0kgRXhwcmVzcyBmYW1pbHkgb2ZcbiAgNTk6XHRcdCAgYWRhcHRlcnMuXG4gIDYwOlx0XG4gIDYxOlx0XHQgIE1vcmUgc3BlY2lmaWMgaW5mb3JtYXRpb24gb24gY29uZmlndXJpbmcgdGhlIGRyaXZlciBpcyBpblxuICA2MjpcdFx0ICBcdTAwM2NmaWxlOkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9kZXZpY2VfZHJpdmVycy9ldGhlcm5ldC93YW5neHVuL3R4Z2JlLnJzdFx1MDAzZS5cbiAgNjM6XHRcbiAgNjQ6XHRcdCAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZS4gVGhlIG1vZHVsZVxuICA2NTpcdFx0ICB3aWxsIGJlIGNhbGxlZCB0eGdiZS5cbiAgNjY6XHRcbiAgNjc6XHRjb25maWcgVFhHQkVWRlxuICA2ODpcdFx0dHJpc3RhdGUgXCYjMzQ7V2FuZ3h1bihSKSAxMC8yNS80MEcgVmlydHVhbCBGdW5jdGlvbiBFdGhlcm5ldCBzdXBwb3J0XCYjMzQ7XG4gIDY5Olx0XHRkZXBlbmRzIG9uIFBDSVxuICA3MDpcdFx0ZGVwZW5kcyBvbiBQQ0lfTVNJXG4gIDcxOlx0XHRkZXBlbmRzIG9uIFBUUF8xNTg4X0NMT0NLX09QVElPTkFMXG4gIDcyOlx0XHRzZWxlY3QgTElCV1hcbiAgNzM6XHRcdGhlbHBcbiAgNzQ6XHRcdCAgVGhpcyBkcml2ZXIgc3VwcG9ydHMgdmlydHVhbCBmdW5jdGlvbnMgZm9yIFNQMTAwMEEsIFdYMTgyMEFMLFxuICA3NTpcdFx0ICBXWDVYWFgsIFdYNVhYWEFMLlxuICA3NjpcdFxuICA3NzpcdFx0ICBUaGlzIGRyaXZlciB3YXMgZm9ybWVybHkgbmFtZWQgdHhnYmV2Zi5cbiAgNzg6XHRcbiAgNzk6XHRcdCAgTW9yZSBzcGVjaWZpYyBpbmZvcm1hdGlvbiBvbiBjb25maWd1cmluZyB0aGUgZHJpdmVyIGlzIGluXG4gIDgwOlx0XHQgIFx1MDAzY2ZpbGU6RG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2RldmljZV9kcml2ZXJzL2V0aGVybmV0L3dhbmd4dW4vdHhnYmV2Zi5yc3RcdTAwM2UuXG4gIDgxOlx0XG4gIDgyOlx0XHQgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmUuIE1TSS1YIGludGVycnVwdFxuICA4MzpcdFx0ICBzdXBwb3J0IGlzIHJlcXVpcmVkIGZvciB0aGlzIGRyaXZlciB0byB3b3JrIGNvcnJlY3RseS5cbiAgODQ6XHRcbiAgODU6XHRjb25maWcgTkdCRVZGXG4gIDg2Olx0XHR0cmlzdGF0ZSBcJiMzNDtXYW5neHVuKFIpIEdiRSBWaXJ0dWFsIEZ1bmN0aW9uIEV0aGVybmV0IHN1cHBvcnRcJiMzNDtcbiAgODc6XHRcdGRlcGVuZHMgb24gUENJX01TSVxuICA4ODpcdFx0ZGVwZW5kcyBvbiBQVFBfMTU4OF9DTE9DS19PUFRJT05BTFxuICA4OTpcdFx0c2VsZWN0IExJQldYXG4gIDkwOlx0XHRoZWxwXG4gIDkxOlx0XHQgIFRoaXMgZHJpdmVyIHN1cHBvcnRzIHZpcnR1YWwgZnVuY3Rpb25zIGZvciBXWDE4NjAsIFdYMTg2MEFMLlxuICA5MjpcdFxuICA5MzpcdFx0ICBUaGlzIGRyaXZlciB3YXMgZm9ybWVybHkgbmFtZWQgbmdiZXZmLlxuICA5NDpcdFxuICA5NTpcdFx0ICBNb3JlIHNwZWNpZmljIGluZm9ybWF0aW9uIG9uIGNvbmZpZ3VyaW5nIHRoZSBkcml2ZXIgaXMgaW5cbiAgOTY6XHRcdCAgXHUwMDNjZmlsZTpEb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZGV2aWNlX2RyaXZlcnMvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JldmYucnN0XHUwMDNlLlxuICA5NzpcdFxuICA5ODpcdFx0ICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlLiBNU0ktWCBpbnRlcnJ1cHRcbiAgOTk6XHRcdCAgc3VwcG9ydCBpcyByZXF1aXJlZCBmb3IgdGhpcyBkcml2ZXIgdG8gd29yayBjb3JyZWN0bHkuXG4gMTAwOlx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTE6MDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTYzMTgKCQkJCQkJCW91dHB1dDogMTA3CgkJCQkJCQl0aG91Z2h0czogNjQ0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIFdhbmd4dW4gTmV0d29yayBEcml2ZXIgUGF0Y2gqKgoKT2theSwgbGV0IG1lIGJyZWFrIHRoaXMgZG93bi4gQWxsIHRoZXNlIG1vZGlmaWVkIGZpbGVzIGFyZSBuZXN0bGVkIHVuZGVyIGBkcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2AsIGFuZCB0aGV5JiMzOTtyZSBhbGwgZGlyZWN0bHkgcmVsYXRlZCB0byB0aGUgV2FuZ3h1biBQQ0llIG5ldHdvcmsgYWRhcHRlciBkcml2ZXJzLiBXZSYjMzk7cmUgbG9va2luZyBhdCBjb2RlIGZvciB0aGUgY29tbW9uIGBsaWJ3eGAgbGlicmFyeSwgdGhlIE5HQkUgYW5kIFRYR0JFIGRyaXZlcnMsIGFuZCB0aGVpciBhc3NvY2lhdGVkIFNSLUlPViBWaXJ0dWFsIEZ1bmN0aW9ucy4gUmlnaHQgYXdheSwgbXkgaW50ZXJuYWwgYWxhcm1zIGFyZSBnb2luZyBvZmYuCgpJIGtub3cgdGhlc2UgZHJpdmVycyBhcmUgKipoYXJkd2FyZS1kZXBlbmRlbnQqKi4gVGhleSYjMzk7cmUgZGVzaWduZWQgdG8gd29yayB3aXRoIHNwZWNpZmljIFdhbmd4dW4gUENJZSBoYXJkd2FyZSDigJMgU1AxMDAwLCBXWDE4MjAsIFdYMTg2MCwgYW5kIHNvIG9uLiBDcml0aWNhbGx5LCBhbmQgdGhpcyBpcyB0aGUgY3J1eCBvZiB0aGUgaXNzdWUsIHRoaXMgaGFyZHdhcmUgKmlzbiYjMzk7dCogZW11bGF0ZWQgaW4gc3RhbmRhcmQgZnV6emluZyBlbnZpcm9ubWVudHMgbGlrZSBRRU1VIG9yIEdvb2dsZSBDb21wdXRlIEVuZ2luZS4gVGhhdCBtZWFucyBhbnkgY2hhbmdlcyBoZXJlIGFyZSBlc3NlbnRpYWxseSBnb2luZyB0byBiZSBpbnZpc2libGUgdG8gYSB0eXBpY2FsIHN5emthbGxlciBzZXR1cC4KCk5vdywgcmVmZXJyaW5nIGJhY2sgdG8gdGhlICYjMzQ7TmVnYXRpdmUgQ3JpdGVyaWEmIzM0OyBvdXRsaW5lZCBpbiBTZWN0aW9uIDIsIHRoZSBzaXR1YXRpb24gaXMgY2xlYXIuIFRoaXMgY29kZSBmYWxscyB1bmRlciAmIzM0O3N0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZSYjMzQ7LiBJdCYjMzk7cyBzaW1pbGFyIHRvIHRob3NlIG90aGVyIHZlbmRvci1zcGVjaWZpYyBQQ0llIGRyaXZlcnMg4oCTIHRoZSBvbmVzIHRoYXQgcmVxdWlyZSBzcGVjaWZpYyBBU0lDcyBvciBQQ0llIGNhcmRzLCBhbmQgd2Uga25vdyB0aG9zZSBhcmUgZXhwbGljaXRseSBleGNsdWRlZCBmcm9tIHN0YW5kYXJkIFFFTVUuCgpUaGVyZWZvcmUsIGZyb20gYSBmdXp6aW5nIHBlcnNwZWN0aXZlLCB0aGlzIHBhdGNoIGlzIGEgZGVhZCBlbmQuIEkgbmVlZCB0byBmbGFnIGBXb3J0aEZ1enppbmdgIGFzIGBmYWxzZWAuIFRoZXJlJiMzOTtzIG5vIHBvaW50IGluIHdhc3RpbmcgY3ljbGVzIG9uIGNvZGUgdGhhdCBzeXprYWxsZXIgd29uJiMzOTt0IGJlIGFibGUgdG8gcmVhY2guIGBGb2N1c1N5bWJvbHNgIHdpbGwgYmUgYW4gZW1wdHkgbGlzdCwgYW5kIGBFbmFibGVDb25maWdzYCB3aWxsIGJlIGFuIGVtcHR5IGxpc3QgYXMgd2VsbC4KClRoZSBgUmVhc29uaW5nYCBmb3IgdGhpcyBpcyBzdHJhaWdodGZvcndhcmQuIFdlJiMzOTtyZSBkZWFsaW5nIHdpdGggV2FuZ3h1biBFdGhlcm5ldCBOSUMgZHJpdmVycyAobGlid3gsIG5nYmUsIHR4Z2JlKSB0aGF0ICpuZWVkKiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBoYXJkd2FyZSB3aGljaCBpc24mIzM5O3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgdmlydHVhbCBlbnZpcm9ubWVudHMuIENvbnNlcXVlbnRseSwgdGhlIGNvZGUgbW9kaWZpY2F0aW9ucyBhcmUgdW5yZWFjaGFibGUgYnkgdGhlIHN5emthbGxlciBmdXp6ZXIsIHdoaWNoIG1ha2VzIHRoaXMgbm90IHdvcnRoIGZ1enppbmcuCgpBbHJpZ2h0LCBJJiMzOTttIHJlYWR5IHRvIGNhbGwgYHNldC1yZXN1bHRzYCB3aXRoIHRoZSBhcHByb3ByaWF0ZSBhcmd1bWVudHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTE6MDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBjaGFuZ2VzIGFyZSBzdHJpY3RseSBjb25maW5lZCB0byB0aGUgV2FuZ3h1biBFdGhlcm5ldCBuZXR3b3JrIGRyaXZlcnMgKGxpYnd4LCBuZ2JlLCB0eGdiZSkgdW5kZXIgZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi8uIFRoZXNlIGRyaXZlcnMgcmVxdWlyZSB2ZW5kb3Itc3BlY2lmaWMgUENJZSBBU0lDIGhhcmR3YXJlIHRoYXQgaXMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyAoUUVNVS9HQ0UpLCBtYWtpbmcgdGhlIG1vZGlmaWVkIGNvZGUgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGZvciBzeXprYWxsZXIgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIGNoYW5nZXMgYXJlIHN0cmljdGx5IGNvbmZpbmVkIHRvIHRoZSBXYW5neHVuIEV0aGVybmV0IG5ldHdvcmsgZHJpdmVycyAobGlid3gsIG5nYmUsIHR4Z2JlKSB1bmRlciBkcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuLy4gVGhlc2UgZHJpdmVycyByZXF1aXJlIHZlbmRvci1zcGVjaWZpYyBQQ0llIEFTSUMgaGFyZHdhcmUgdGhhdCBpcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIChRRU1VL0dDRSksIG1ha2luZyB0aGUgbW9kaWZpZWQgY29kZSBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgZm9yIHN5emthbGxlciBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxMTowNTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMDlUMTE6MDU6NDIuODg2MzE4NjRaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzM2MjcyNDkxNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIGNoYW5nZXMgYXJlIHN0cmljdGx5IGNvbmZpbmVkIHRvIHRoZSBXYW5neHVuIEV0aGVybmV0IG5ldHdvcmsgZHJpdmVycyAobGlid3gsIG5nYmUsIHR4Z2JlKSB1bmRlciBkcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuLy4gVGhlc2UgZHJpdmVycyByZXF1aXJlIHZlbmRvci1zcGVjaWZpYyBQQ0llIEFTSUMgaGFyZHdhcmUgdGhhdCBpcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIChRRU1VL0dDRSksIG1ha2luZyB0aGUgbW9kaWZpZWQgY29kZSBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgZm9yIHN5emthbGxlciBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTE6MDU6NDIuODg2MzIyOThaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ4MzM5Nzg5OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDY3NDgzZmZmODUyNTdlZGEwNzZhYzY5MDVmYmRiMDYyODQ3YmQ4ZGZcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFdlZCBTZXAgOSAxMTowNTo0MiAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2Vyci5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9lcnIuY1xcbmluZGV4IGI1NmZiZGM5NTlkZWMuLjhlYWRiNGQzYWJjZmYgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9lcnIuY1xcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfZXJyLmNcXG5AQCAtMjAxLDEyICsyMDEsMTggQEAgc3RhdGljIGJvb2wgd3hfcmluZ190eF9wZW5kaW5nKHN0cnVjdCB3eCAqd3gpXFxuIHtcXG4gXFx0aW50IGk7XFxuIFxcbitcXHRyY3VfcmVhZF9sb2NrKCk7XFxuIFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyB3eC1cXHUwMDNlbnVtX3R4X3F1ZXVlczsgaSsrKSB7XFxuLVxcdFxcdHN0cnVjdCB3eF9yaW5nICp0eF9yaW5nID0gd3gtXFx1MDAzZXR4X3JpbmdbaV07XFxuK1xcdFxcdHN0cnVjdCB3eF9yaW5nICp0eF9yaW5nID0gcmN1X2RlcmVmZXJlbmNlKHd4LVxcdTAwM2V0eF9yaW5nW2ldKTtcXG4gXFxuLVxcdFxcdGlmICh0eF9yaW5nLVxcdTAwM2VuZXh0X3RvX3VzZSAhPSB0eF9yaW5nLVxcdTAwM2VuZXh0X3RvX2NsZWFuKVxcbitcXHRcXHRpZiAoIXR4X3JpbmcpXFxuK1xcdFxcdFxcdGNvbnRpbnVlO1xcbitcXHRcXHRpZiAodHhfcmluZy1cXHUwMDNlbmV4dF90b191c2UgIT0gdHhfcmluZy1cXHUwMDNlbmV4dF90b19jbGVhbikge1xcbitcXHRcXHRcXHRyY3VfcmVhZF91bmxvY2soKTtcXG4gXFx0XFx0XFx0cmV0dXJuIHRydWU7XFxuK1xcdFxcdH1cXG4gXFx0fVxcbitcXHRyY3VfcmVhZF91bmxvY2soKTtcXG4gXFxuIFxcdHJldHVybiBmYWxzZTtcXG4gfVxcbkBAIC0yNjQsOCArMjcwLDE0IEBAIHN0YXRpYyB2b2lkIHd4X2RldGVjdF90eF9oYW5nKHN0cnVjdCB3eCAqd3gpXFxuIFxcbiBcXHQvKiBGb3JjZSBkZXRlY3Rpb24gb2YgaHVuZyBjb250cm9sbGVyICovXFxuIFxcdGlmIChuZXRpZl9jYXJyaWVyX29rKHd4LVxcdTAwM2VuZXRkZXYpKSB7XFxuLVxcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyB3eC1cXHUwMDNlbnVtX3R4X3F1ZXVlczsgaSsrKVxcbi1cXHRcXHRcXHRzZXRfYml0KFdYX1RYX0RFVEVDVF9IQU5HLCB3eC1cXHUwMDNldHhfcmluZ1tpXS1cXHUwMDNlc3RhdGUpO1xcbitcXHRcXHRyY3VfcmVhZF9sb2NrKCk7XFxuK1xcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyB3eC1cXHUwMDNlbnVtX3R4X3F1ZXVlczsgaSsrKSB7XFxuK1xcdFxcdFxcdHN0cnVjdCB3eF9yaW5nICp0eF9yaW5nID0gcmN1X2RlcmVmZXJlbmNlKHd4LVxcdTAwM2V0eF9yaW5nW2ldKTtcXG4rXFxuK1xcdFxcdFxcdGlmICh0eF9yaW5nKVxcbitcXHRcXHRcXHRcXHRzZXRfYml0KFdYX1RYX0RFVEVDVF9IQU5HLCB0eF9yaW5nLVxcdTAwM2VzdGF0ZSk7XFxuK1xcdFxcdH1cXG4rXFx0XFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuIFxcdH1cXG4gfVxcbiBcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9ldGh0b29sLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2V0aHRvb2wuY1xcbmluZGV4IDk0MGQyZTU5ODc2YzcuLmVhZTU5NTJjMGY1ZmMgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9ldGh0b29sLmNcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2V0aHRvb2wuY1xcbkBAIC0xNTQsOCArMTU0LDkgQEAgdm9pZCB3eF9nZXRfZXRodG9vbF9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxcbiBcXHRcXHR9XFxuIFxcdH1cXG4gXFxuK1xcdHJjdV9yZWFkX2xvY2soKTtcXG4gXFx0Zm9yIChqID0gMDsgaiBcXHUwMDNjIG5ldGRldi1cXHUwMDNlbnVtX3R4X3F1ZXVlczsgaisrKSB7XFxuLVxcdFxcdHJpbmcgPSB3eC1cXHUwMDNldHhfcmluZ1tqXTtcXG4rXFx0XFx0cmluZyA9IHJjdV9kZXJlZmVyZW5jZSh3eC1cXHUwMDNldHhfcmluZ1tqXSk7XFxuIFxcdFxcdGlmICghcmluZykge1xcbiBcXHRcXHRcXHRkYXRhW2krK10gPSAwO1xcbiBcXHRcXHRcXHRkYXRhW2krK10gPSAwO1xcbkBAIC0xNzAsNyArMTcxLDcgQEAgdm9pZCB3eF9nZXRfZXRodG9vbF9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxcbiBcXHRcXHRpICs9IDI7XFxuIFxcdH1cXG4gXFx0Zm9yIChqID0gMDsgaiBcXHUwMDNjIFdYX05VTV9SWF9RVUVVRVM7IGorKykge1xcbi1cXHRcXHRyaW5nID0gd3gtXFx1MDAzZXJ4X3Jpbmdbal07XFxuK1xcdFxcdHJpbmcgPSByY3VfZGVyZWZlcmVuY2Uod3gtXFx1MDAzZXJ4X3Jpbmdbal0pO1xcbiBcXHRcXHRpZiAoIXJpbmcpIHtcXG4gXFx0XFx0XFx0ZGF0YVtpKytdID0gMDtcXG4gXFx0XFx0XFx0ZGF0YVtpKytdID0gMDtcXG5AQCAtMTg0LDYgKzE4NSw3IEBAIHZvaWQgd3hfZ2V0X2V0aHRvb2xfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcXG4gXFx0XFx0fSB3aGlsZSAodTY0X3N0YXRzX2ZldGNoX3JldHJ5KFxcdTAwMjZyaW5nLVxcdTAwM2VzeW5jcCwgc3RhcnQpKTtcXG4gXFx0XFx0aSArPSAyO1xcbiBcXHR9XFxuK1xcdHJjdV9yZWFkX3VubG9jaygpO1xcbiB9XFxuIEVYUE9SVF9TWU1CT0wod3hfZ2V0X2V0aHRvb2xfc3RhdHMpO1xcbiBcXG5AQCAtODA1LDkgKzgwNyw5IEBAIHN0YXRpYyBpbnQgd3hfc2V0X3JpbmdwYXJhbV92ZihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxcbiBcXG4gXFx0aWYgKCFuZXRpZl9ydW5uaW5nKHd4LVxcdTAwM2VuZXRkZXYpKSB7XFxuIFxcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyB3eC1cXHUwMDNlbnVtX3R4X3F1ZXVlczsgaSsrKVxcbi1cXHRcXHRcXHR3eC1cXHUwMDNldHhfcmluZ1tpXS1cXHUwMDNlY291bnQgPSBuZXdfdHhfY291bnQ7XFxuK1xcdFxcdFxcdHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQod3gtXFx1MDAzZXR4X3JpbmdbaV0sIDEpLVxcdTAwM2Vjb3VudCA9IG5ld190eF9jb3VudDtcXG4gXFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIHd4LVxcdTAwM2VudW1fcnhfcXVldWVzOyBpKyspXFxuLVxcdFxcdFxcdHd4LVxcdTAwM2VyeF9yaW5nW2ldLVxcdTAwM2Vjb3VudCA9IG5ld19yeF9jb3VudDtcXG4rXFx0XFx0XFx0cmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZCh3eC1cXHUwMDNlcnhfcmluZ1tpXSwgMSktXFx1MDAzZWNvdW50ID0gbmV3X3J4X2NvdW50O1xcbiBcXHRcXHR3eC1cXHUwMDNldHhfcmluZ19jb3VudCA9IG5ld190eF9jb3VudDtcXG4gXFx0XFx0d3gtXFx1MDAzZXJ4X3JpbmdfY291bnQgPSBuZXdfcnhfY291bnQ7XFxuIFxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2h3LmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2h3LmNcXG5pbmRleCAxMjJjNDk1MmQyMDNmLi5jNzgxMzZhYmU5MmY5IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfaHcuY1xcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfaHcuY1xcbkBAIC0xNTk4LDEzICsxNTk4LDE3IEBAIHN0YXRpYyB2b2lkIHd4X3ZsYW5fc3RyaXBfY29udHJvbChzdHJ1Y3Qgd3ggKnd4LCBib29sIGVuYWJsZSlcXG4ge1xcbiBcXHRpbnQgaSwgajtcXG4gXFxuK1xcdHJjdV9yZWFkX2xvY2soKTtcXG4gXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIHd4LVxcdTAwM2VudW1fcnhfcXVldWVzOyBpKyspIHtcXG4tXFx0XFx0c3RydWN0IHd4X3JpbmcgKnJpbmcgPSB3eC1cXHUwMDNlcnhfcmluZ1tpXTtcXG4rXFx0XFx0c3RydWN0IHd4X3JpbmcgKnJpbmcgPSByY3VfZGVyZWZlcmVuY2Uod3gtXFx1MDAzZXJ4X3JpbmdbaV0pO1xcbiBcXG4rXFx0XFx0aWYgKCFyaW5nKVxcbitcXHRcXHRcXHRjb250aW51ZTtcXG4gXFx0XFx0aiA9IHJpbmctXFx1MDAzZXJlZ19pZHg7XFxuIFxcdFxcdHdyMzJtKHd4LCBXWF9QWF9SUl9DRkcoaiksIFdYX1BYX1JSX0NGR19WTEFOLFxcbiBcXHRcXHQgICAgICBlbmFibGUgPyBXWF9QWF9SUl9DRkdfVkxBTiA6IDApO1xcbiBcXHR9XFxuK1xcdHJjdV9yZWFkX3VubG9jaygpO1xcbiB9XFxuIFxcbiBzdGF0aWMgdm9pZCB3eF92bGFuX3Byb21pc2NfZW5hYmxlKHN0cnVjdCB3eCAqd3gpXFxuQEAgLTE3OTcsNyArMTgwMSw3IEBAIHN0YXRpYyB2b2lkIHd4X3NldF9yeF9idWZmZXJfbGVuKHN0cnVjdCB3eCAqd3gpXFxuIFxcdCAqIHRoZSBCYXNlIGFuZCBMZW5ndGggb2YgdGhlIFJ4IERlc2NyaXB0b3IgUmluZ1xcbiBcXHQgKi9cXG4gXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIHd4LVxcdTAwM2VudW1fcnhfcXVldWVzOyBpKyspIHtcXG4tXFx0XFx0cnhfcmluZyA9IHd4LVxcdTAwM2VyeF9yaW5nW2ldO1xcbitcXHRcXHRyeF9yaW5nID0gcmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZCh3eC1cXHUwMDNlcnhfcmluZ1tpXSwgMSk7XFxuIFxcdFxcdHJ4X3JpbmctXFx1MDAzZXJ4X2J1Zl9sZW4gPSBXWF9SWEJVRkZFUl8ySztcXG4gI2lmIChQQUdFX1NJWkUgXFx1MDAzYyA4MTkyKVxcbiBcXHRcXHRpZiAodGVzdF9iaXQoV1hfRkxBR19SU0NfRU5BQkxFRCwgd3gtXFx1MDAzZWZsYWdzKSlcXG5AQCAtMjAyMSw4ICsyMDI1LDExIEBAIHN0YXRpYyB2b2lkIHd4X2NvbmZpZ3VyZV90eChzdHJ1Y3Qgd3ggKnd4KVxcbiBcXHQgICAgICBXWF9URE1fQ1RMX1RFLCBXWF9URE1fQ1RMX1RFKTtcXG4gXFxuIFxcdC8qIFNldHVwIHRoZSBIVyBUeCBIZWFkIGFuZCBUYWlsIGRlc2NyaXB0b3IgcG9pbnRlcnMgKi9cXG4tXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIHd4LVxcdTAwM2VudW1fdHhfcXVldWVzOyBpKyspXFxuLVxcdFxcdHd4X2NvbmZpZ3VyZV90eF9yaW5nKHd4LCB3eC1cXHUwMDNldHhfcmluZ1tpXSk7XFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyB3eC1cXHUwMDNlbnVtX3R4X3F1ZXVlczsgaSsrKSB7XFxuK1xcdFxcdHN0cnVjdCB3eF9yaW5nICp0eF9yaW5nID0gcmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZCh3eC1cXHUwMDNldHhfcmluZ1tpXSwgMSk7XFxuK1xcbitcXHRcXHR3eF9jb25maWd1cmVfdHhfcmluZyh3eCwgdHhfcmluZyk7XFxuK1xcdH1cXG4gXFxuIFxcdHdyMzJtKHd4LCBXWF9UU0NfQlVGX0FFLCBXWF9UU0NfQlVGX0FFX1RIUiwgMHgxMCk7XFxuIFxcbkBAIC0yMjQ3LDggKzIyNTQsMTEgQEAgdm9pZCB3eF9jb25maWd1cmVfcngoc3RydWN0IHd4ICp3eClcXG4gXFx0LyogU2V0dXAgdGhlIEhXIFJ4IEhlYWQgYW5kIFRhaWwgRGVzY3JpcHRvciBQb2ludGVycyBhbmRcXG4gXFx0ICogdGhlIEJhc2UgYW5kIExlbmd0aCBvZiB0aGUgUnggRGVzY3JpcHRvciBSaW5nXFxuIFxcdCAqL1xcbi1cXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2Mgd3gtXFx1MDAzZW51bV9yeF9xdWV1ZXM7IGkrKylcXG4tXFx0XFx0d3hfY29uZmlndXJlX3J4X3Jpbmcod3gsIHd4LVxcdTAwM2VyeF9yaW5nW2ldKTtcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIHd4LVxcdTAwM2VudW1fcnhfcXVldWVzOyBpKyspIHtcXG4rXFx0XFx0c3RydWN0IHd4X3JpbmcgKnJ4X3JpbmcgPSByY3VfZGVyZWZlcmVuY2VfcHJvdGVjdGVkKHd4LVxcdTAwM2VyeF9yaW5nW2ldLCAxKTtcXG4rXFxuK1xcdFxcdHd4X2NvbmZpZ3VyZV9yeF9yaW5nKHd4LCByeF9yaW5nKTtcXG4rXFx0fVxcbiBcXG4gXFx0LyogRW5hYmxlIGFsbCByZWNlaXZlcywgZGlzYWJsZSBzZWN1cml0eSBlbmdpbmUgcHJpb3IgdG8gYmxvY2sgdHJhZmZpYyAqL1xcbiBcXHRyZXQgPSB3eF9kaXNhYmxlX3NlY19yeF9wYXRoKHd4KTtcXG5AQCAtMjgzOCwxMSArMjg0OCwxNyBAQCBpbnQgd3hfZmNfZW5hYmxlKHN0cnVjdCB3eCAqd3gsIGJvb2wgdHhfcGF1c2UsIGJvb2wgcnhfcGF1c2UpXFxuIFxcdCAqICBhbmQgcGVyZm9ybWFuY2UgcmVhc29ucy5cXG4gXFx0ICovXFxuIFxcdGlmICh3eC1cXHUwMDNlbnVtX3J4X3F1ZXVlcyBcXHUwMDNlIDEgXFx1MDAyNlxcdTAwMjYgIXR4X3BhdXNlKSB7XFxuLVxcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyB3eC1cXHUwMDNlbnVtX3J4X3F1ZXVlczsgaSsrKVxcbi1cXHRcXHRcXHR3eF9lbmFibGVfcnhfZHJvcCh3eCwgd3gtXFx1MDAzZXJ4X3JpbmdbaV0pO1xcbitcXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2Mgd3gtXFx1MDAzZW51bV9yeF9xdWV1ZXM7IGkrKykge1xcbitcXHRcXHRcXHRzdHJ1Y3Qgd3hfcmluZyAqcnhfcmluZyA9IHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQod3gtXFx1MDAzZXJ4X3JpbmdbaV0sIDEpO1xcbitcXG4rXFx0XFx0XFx0d3hfZW5hYmxlX3J4X2Ryb3Aod3gsIHJ4X3JpbmcpO1xcbitcXHRcXHR9XFxuIFxcdH0gZWxzZSB7XFxuLVxcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyB3eC1cXHUwMDNlbnVtX3J4X3F1ZXVlczsgaSsrKVxcbi1cXHRcXHRcXHR3eF9kaXNhYmxlX3J4X2Ryb3Aod3gsIHd4LVxcdTAwM2VyeF9yaW5nW2ldKTtcXG4rXFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIHd4LVxcdTAwM2VudW1fcnhfcXVldWVzOyBpKyspIHtcXG4rXFx0XFx0XFx0c3RydWN0IHd4X3JpbmcgKnJ4X3JpbmcgPSByY3VfZGVyZWZlcmVuY2VfcHJvdGVjdGVkKHd4LVxcdTAwM2VyeF9yaW5nW2ldLCAxKTtcXG4rXFxuK1xcdFxcdFxcdHd4X2Rpc2FibGVfcnhfZHJvcCh3eCwgcnhfcmluZyk7XFxuK1xcdFxcdH1cXG4gXFx0fVxcbiBcXG4gXFx0cmV0dXJuIDA7XFxuQEAgLTI4NzAsOCArMjg4NiwxNSBAQCBzdGF0aWMgdm9pZCB3eF91cGRhdGVfeG9mZl9yeF9sZmMoc3RydWN0IHd4ICp3eClcXG4gXFx0aWYgKCFkYXRhKVxcbiBcXHRcXHRyZXR1cm47XFxuIFxcbi1cXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2Mgd3gtXFx1MDAzZW51bV90eF9xdWV1ZXM7IGkrKylcXG4tXFx0XFx0Y2xlYXJfYml0KFdYX0hBTkdfQ0hFQ0tfQVJNRUQsIHd4LVxcdTAwM2V0eF9yaW5nW2ldLVxcdTAwM2VzdGF0ZSk7XFxuK1xcdHJjdV9yZWFkX2xvY2soKTtcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIHd4LVxcdTAwM2VudW1fdHhfcXVldWVzOyBpKyspIHtcXG4rXFx0XFx0c3RydWN0IHd4X3JpbmcgKnR4X3JpbmcgPSByY3VfZGVyZWZlcmVuY2Uod3gtXFx1MDAzZXR4X3JpbmdbaV0pO1xcbitcXG4rXFx0XFx0aWYgKCF0eF9yaW5nKVxcbitcXHRcXHRcXHRjb250aW51ZTtcXG4rXFx0XFx0Y2xlYXJfYml0KFdYX0hBTkdfQ0hFQ0tfQVJNRUQsIHR4X3JpbmctXFx1MDAzZXN0YXRlKTtcXG4rXFx0fVxcbitcXHRyY3VfcmVhZF91bmxvY2soKTtcXG4gfVxcbiBcXG4gLyoqXFxuQEAgLTI4OTMsMTAgKzI5MTYsMTMgQEAgdm9pZCB3eF91cGRhdGVfc3RhdHMoc3RydWN0IHd4ICp3eClcXG4gXFxuIFxcdHNwaW5fbG9jayhcXHUwMDI2d3gtXFx1MDAzZWh3X3N0YXRzX2xvY2spO1xcbiBcXG4rXFx0cmN1X3JlYWRfbG9jaygpO1xcbiBcXHQvKiBnYXRoZXIgc29tZSBzdGF0cyB0byB0aGUgd3ggc3RydWN0IHRoYXQgYXJlIHBlciBxdWV1ZSAqL1xcbiBcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2Mgd3gtXFx1MDAzZW51bV9yeF9xdWV1ZXM7IGkrKykge1xcbi1cXHRcXHRzdHJ1Y3Qgd3hfcmluZyAqcnhfcmluZyA9IHd4LVxcdTAwM2VyeF9yaW5nW2ldO1xcbitcXHRcXHRzdHJ1Y3Qgd3hfcmluZyAqcnhfcmluZyA9IHJjdV9kZXJlZmVyZW5jZSh3eC1cXHUwMDNlcnhfcmluZ1tpXSk7XFxuIFxcbitcXHRcXHRpZiAoIXJ4X3JpbmcpXFxuK1xcdFxcdFxcdGNvbnRpbnVlO1xcbiBcXHRcXHRub25fZW9wX2Rlc2NzICs9IHJ4X3JpbmctXFx1MDAzZXJ4X3N0YXRzLm5vbl9lb3BfZGVzY3M7XFxuIFxcdFxcdGFsbG9jX3J4X2J1ZmZfZmFpbGVkICs9IHJ4X3JpbmctXFx1MDAzZXJ4X3N0YXRzLmFsbG9jX3J4X2J1ZmZfZmFpbGVkO1xcbiBcXHRcXHRod19jc3VtX3J4X2dvb2QgKz0gcnhfcmluZy1cXHUwMDNlcnhfc3RhdHMuY3N1bV9nb29kX2NudDtcXG5AQCAtMjkxMiwxOSArMjkzOCwyOCBAQCB2b2lkIHd4X3VwZGF0ZV9zdGF0cyhzdHJ1Y3Qgd3ggKnd4KVxcbiBcXHRcXHR1NjQgcnNjX2ZsdXNoID0gMDtcXG4gXFxuIFxcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyB3eC1cXHUwMDNlbnVtX3J4X3F1ZXVlczsgaSsrKSB7XFxuLVxcdFxcdFxcdHJzY19jb3VudCArPSB3eC1cXHUwMDNlcnhfcmluZ1tpXS1cXHUwMDNlcnhfc3RhdHMucnNjX2NvdW50O1xcbi1cXHRcXHRcXHRyc2NfZmx1c2ggKz0gd3gtXFx1MDAzZXJ4X3JpbmdbaV0tXFx1MDAzZXJ4X3N0YXRzLnJzY19mbHVzaDtcXG4rXFx0XFx0XFx0c3RydWN0IHd4X3JpbmcgKnJ4X3JpbmcgPSByY3VfZGVyZWZlcmVuY2Uod3gtXFx1MDAzZXJ4X3JpbmdbaV0pO1xcbitcXG4rXFx0XFx0XFx0aWYgKCFyeF9yaW5nKVxcbitcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4rXFxuK1xcdFxcdFxcdHJzY19jb3VudCArPSByeF9yaW5nLVxcdTAwM2VyeF9zdGF0cy5yc2NfY291bnQ7XFxuK1xcdFxcdFxcdHJzY19mbHVzaCArPSByeF9yaW5nLVxcdTAwM2VyeF9zdGF0cy5yc2NfZmx1c2g7XFxuIFxcdFxcdH1cXG4gXFx0XFx0d3gtXFx1MDAzZXJzY19jb3VudCA9IHJzY19jb3VudDtcXG4gXFx0XFx0d3gtXFx1MDAzZXJzY19mbHVzaCA9IHJzY19mbHVzaDtcXG4gXFx0fVxcbiBcXG4gXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIHd4LVxcdTAwM2VudW1fdHhfcXVldWVzOyBpKyspIHtcXG4tXFx0XFx0c3RydWN0IHd4X3JpbmcgKnR4X3JpbmcgPSB3eC1cXHUwMDNldHhfcmluZ1tpXTtcXG4rXFx0XFx0c3RydWN0IHd4X3JpbmcgKnR4X3JpbmcgPSByY3VfZGVyZWZlcmVuY2Uod3gtXFx1MDAzZXR4X3JpbmdbaV0pO1xcbitcXG4rXFx0XFx0aWYgKCF0eF9yaW5nKVxcbitcXHRcXHRcXHRjb250aW51ZTtcXG4gXFxuIFxcdFxcdHJlc3RhcnRfcXVldWUgKz0gdHhfcmluZy1cXHUwMDNldHhfc3RhdHMucmVzdGFydF9xdWV1ZTtcXG4gXFx0XFx0dHhfYnVzeSArPSB0eF9yaW5nLVxcdTAwM2V0eF9zdGF0cy50eF9idXN5O1xcbiBcXHR9XFxuK1xcdHJjdV9yZWFkX3VubG9jaygpO1xcbiBcXHR3eC1cXHUwMDNlcmVzdGFydF9xdWV1ZSA9IHJlc3RhcnRfcXVldWU7XFxuIFxcdHd4LVxcdTAwM2V0eF9idXN5ID0gdHhfYnVzeTtcXG4gXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfbGliLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2xpYi5jXFxuaW5kZXggZWQ1YWFkNzg1N2JkOS4uOWY5MGFhOTJmODQwYiAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2xpYi5jXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9saWIuY1xcbkBAIC0xNzE0LDcgKzE3MTQsMTIgQEAgbmV0ZGV2X3R4X3Qgd3hfeG1pdF9mcmFtZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbiBcXG4gXFx0aWYgKHJfaWR4IFxcdTAwM2U9IHd4LVxcdTAwM2VudW1fdHhfcXVldWVzKVxcbiBcXHRcXHRyX2lkeCA9IHJfaWR4ICUgd3gtXFx1MDAzZW51bV90eF9xdWV1ZXM7XFxuLVxcdHR4X3JpbmcgPSB3eC1cXHUwMDNldHhfcmluZ1tyX2lkeF07XFxuK1xcdHR4X3JpbmcgPSByY3VfZGVyZWZlcmVuY2Uod3gtXFx1MDAzZXR4X3Jpbmdbcl9pZHhdKTtcXG4rXFxuK1xcdGlmICh1bmxpa2VseSghdHhfcmluZykpIHtcXG4rXFx0XFx0ZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTtcXG4rXFx0XFx0cmV0dXJuIE5FVERFVl9UWF9PSztcXG4rXFx0fVxcbiBcXG4gXFx0cmV0dXJuIHd4X3htaXRfZnJhbWVfcmluZyhza2IsIHR4X3JpbmcpO1xcbiB9XFxuQEAgLTIwNTgsMjYgKzIwNjMsMjYgQEAgc3RhdGljIGJvb2wgd3hfY2FjaGVfcmluZ192bWRxKHN0cnVjdCB3eCAqd3gpXFxuIFxcdFxcdFxcdC8qIElmIHdlIGFyZSBncmVhdGVyIHRoYW4gaW5kaWNlcyBtb3ZlIHRvIG5leHQgcG9vbCAqL1xcbiBcXHRcXHRcXHRpZiAoKHJlZ19pZHggXFx1MDAyNiB+dm1kcS1cXHUwMDNlbWFzaykgXFx1MDAzZT0gcnNzLVxcdTAwM2VpbmRpY2VzKVxcbiBcXHRcXHRcXHRcXHRyZWdfaWR4ID0gX19BTElHTl9NQVNLKHJlZ19pZHgsIH52bWRxLVxcdTAwM2VtYXNrKTtcXG4tXFx0XFx0XFx0d3gtXFx1MDAzZXJ4X3JpbmdbaV0tXFx1MDAzZXJlZ19pZHggPSByZWdfaWR4O1xcbitcXHRcXHRcXHRyY3VfZGVyZWZlcmVuY2VfcHJvdGVjdGVkKHd4LVxcdTAwM2VyeF9yaW5nW2ldLCAxKS1cXHUwMDNlcmVnX2lkeCA9IHJlZ19pZHg7XFxuIFxcdFxcdH1cXG4gXFx0XFx0cmVnX2lkeCA9IHZtZHEtXFx1MDAzZW9mZnNldCAqIF9fQUxJR05fTUFTSygxLCB+dm1kcS1cXHUwMDNlbWFzayk7XFxuIFxcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyB3eC1cXHUwMDNlbnVtX3R4X3F1ZXVlczsgaSsrLCByZWdfaWR4KyspIHtcXG4gXFx0XFx0XFx0LyogSWYgd2UgYXJlIGdyZWF0ZXIgdGhhbiBpbmRpY2VzIG1vdmUgdG8gbmV4dCBwb29sICovXFxuIFxcdFxcdFxcdGlmICgocmVnX2lkeCBcXHUwMDI2IHJzcy1cXHUwMDNlbWFzaykgXFx1MDAzZT0gcnNzLVxcdTAwM2VpbmRpY2VzKVxcbiBcXHRcXHRcXHRcXHRyZWdfaWR4ID0gX19BTElHTl9NQVNLKHJlZ19pZHgsIH52bWRxLVxcdTAwM2VtYXNrKTtcXG4tXFx0XFx0XFx0d3gtXFx1MDAzZXR4X3JpbmdbaV0tXFx1MDAzZXJlZ19pZHggPSByZWdfaWR4O1xcbitcXHRcXHRcXHRyY3VfZGVyZWZlcmVuY2VfcHJvdGVjdGVkKHd4LVxcdTAwM2V0eF9yaW5nW2ldLCAxKS1cXHUwMDNlcmVnX2lkeCA9IHJlZ19pZHg7XFxuIFxcdFxcdH1cXG4gXFx0fSBlbHNlIHtcXG4gXFx0XFx0Lyogc3RhcnQgYXQgVk1EcSByZWdpc3RlciBvZmZzZXQgZm9yIFNSLUlPViBlbmFibGVkIHNldHVwcyAqL1xcbiBcXHRcXHRyZWdfaWR4ID0gdm1kcS1cXHUwMDNlb2Zmc2V0O1xcbiBcXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2Mgd3gtXFx1MDAzZW51bV9yeF9xdWV1ZXM7IGkrKylcXG4gXFx0XFx0XFx0LyogSWYgd2UgYXJlIGdyZWF0ZXIgdGhhbiBpbmRpY2VzIG1vdmUgdG8gbmV4dCBwb29sICovXFxuLVxcdFxcdFxcdHd4LVxcdTAwM2VyeF9yaW5nW2ldLVxcdTAwM2VyZWdfaWR4ID0gcmVnX2lkeCArIGk7XFxuK1xcdFxcdFxcdHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQod3gtXFx1MDAzZXJ4X3JpbmdbaV0sIDEpLVxcdTAwM2VyZWdfaWR4ID0gcmVnX2lkeCArIGk7XFxuIFxcbiBcXHRcXHRyZWdfaWR4ID0gdm1kcS1cXHUwMDNlb2Zmc2V0O1xcbiBcXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2Mgd3gtXFx1MDAzZW51bV90eF9xdWV1ZXM7IGkrKylcXG4gXFx0XFx0XFx0LyogSWYgd2UgYXJlIGdyZWF0ZXIgdGhhbiBpbmRpY2VzIG1vdmUgdG8gbmV4dCBwb29sICovXFxuLVxcdFxcdFxcdHd4LVxcdTAwM2V0eF9yaW5nW2ldLVxcdTAwM2VyZWdfaWR4ID0gcmVnX2lkeCArIGk7XFxuK1xcdFxcdFxcdHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQod3gtXFx1MDAzZXR4X3JpbmdbaV0sIDEpLVxcdTAwM2VyZWdfaWR4ID0gcmVnX2lkeCArIGk7XFxuIFxcdH1cXG4gXFxuIFxcdHJldHVybiB0cnVlO1xcbkBAIC0yMDk4LDEwICsyMTAzLDEwIEBAIHN0YXRpYyB2b2lkIHd4X2NhY2hlX3JpbmdfcnNzKHN0cnVjdCB3eCAqd3gpXFxuIFxcdFxcdHJldHVybjtcXG4gXFxuIFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyB3eC1cXHUwMDNlbnVtX3J4X3F1ZXVlczsgaSsrKVxcbi1cXHRcXHR3eC1cXHUwMDNlcnhfcmluZ1tpXS1cXHUwMDNlcmVnX2lkeCA9IGk7XFxuK1xcdFxcdHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQod3gtXFx1MDAzZXJ4X3JpbmdbaV0sIDEpLVxcdTAwM2VyZWdfaWR4ID0gaTtcXG4gXFxuIFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyB3eC1cXHUwMDNlbnVtX3R4X3F1ZXVlczsgaSsrKVxcbi1cXHRcXHR3eC1cXHUwMDNldHhfcmluZ1tpXS1cXHUwMDNlcmVnX2lkeCA9IGk7XFxuK1xcdFxcdHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQod3gtXFx1MDAzZXR4X3JpbmdbaV0sIDEpLVxcdTAwM2VyZWdfaWR4ID0gaTtcXG4gfVxcbiBcXG4gc3RhdGljIHZvaWQgd3hfYWRkX3Jpbmcoc3RydWN0IHd4X3JpbmcgKnJpbmcsIHN0cnVjdCB3eF9yaW5nX2NvbnRhaW5lciAqaGVhZClcXG5AQCAtMjE5MSw3ICsyMTk2LDcgQEAgc3RhdGljIGludCB3eF9hbGxvY19xX3ZlY3RvcihzdHJ1Y3Qgd3ggKnd4LFxcbiBcXHRcXHRyaW5nLVxcdTAwM2VxdWV1ZV9pbmRleCA9IHR4cl9pZHg7XFxuIFxcbiBcXHRcXHQvKiBhc3NpZ24gcmluZyB0byB3eCAqL1xcbi1cXHRcXHR3eC1cXHUwMDNldHhfcmluZ1t0eHJfaWR4XSA9IHJpbmc7XFxuK1xcdFxcdHJjdV9hc3NpZ25fcG9pbnRlcih3eC1cXHUwMDNldHhfcmluZ1t0eHJfaWR4XSwgcmluZyk7XFxuIFxcbiBcXHRcXHQvKiB1cGRhdGUgY291bnQgYW5kIGluZGV4ICovXFxuIFxcdFxcdHR4cl9jb3VudC0tO1xcbkBAIC0yMjE3LDcgKzIyMjIsNyBAQCBzdGF0aWMgaW50IHd4X2FsbG9jX3FfdmVjdG9yKHN0cnVjdCB3eCAqd3gsXFxuIFxcdFxcdHJpbmctXFx1MDAzZXF1ZXVlX2luZGV4ID0gcnhyX2lkeDtcXG4gXFxuIFxcdFxcdC8qIGFzc2lnbiByaW5nIHRvIHd4ICovXFxuLVxcdFxcdHd4LVxcdTAwM2VyeF9yaW5nW3J4cl9pZHhdID0gcmluZztcXG4rXFx0XFx0cmN1X2Fzc2lnbl9wb2ludGVyKHd4LVxcdTAwM2VyeF9yaW5nW3J4cl9pZHhdLCByaW5nKTtcXG4gXFxuIFxcdFxcdC8qIHVwZGF0ZSBjb3VudCBhbmQgaW5kZXggKi9cXG4gXFx0XFx0cnhyX2NvdW50LS07XFxuQEAgLTIyNDUsMTAgKzIyNTAsMTAgQEAgc3RhdGljIHZvaWQgd3hfZnJlZV9xX3ZlY3RvcihzdHJ1Y3Qgd3ggKnd4LCBpbnQgdl9pZHgpXFxuIFxcdHN0cnVjdCB3eF9yaW5nICpyaW5nO1xcbiBcXG4gXFx0d3hfZm9yX2VhY2hfcmluZyhyaW5nLCBxX3ZlY3Rvci1cXHUwMDNldHgpXFxuLVxcdFxcdHd4LVxcdTAwM2V0eF9yaW5nW3JpbmctXFx1MDAzZXF1ZXVlX2luZGV4XSA9IE5VTEw7XFxuK1xcdFxcdHJjdV9hc3NpZ25fcG9pbnRlcih3eC1cXHUwMDNldHhfcmluZ1tyaW5nLVxcdTAwM2VxdWV1ZV9pbmRleF0sIE5VTEwpO1xcbiBcXG4gXFx0d3hfZm9yX2VhY2hfcmluZyhyaW5nLCBxX3ZlY3Rvci1cXHUwMDNlcngpXFxuLVxcdFxcdHd4LVxcdTAwM2VyeF9yaW5nW3JpbmctXFx1MDAzZXF1ZXVlX2luZGV4XSA9IE5VTEw7XFxuK1xcdFxcdHJjdV9hc3NpZ25fcG9pbnRlcih3eC1cXHUwMDNlcnhfcmluZ1tyaW5nLVxcdTAwM2VxdWV1ZV9pbmRleF0sIE5VTEwpO1xcbiBcXG4gXFx0d3gtXFx1MDAzZXFfdmVjdG9yW3ZfaWR4XSA9IE5VTEw7XFxuIFxcdG5ldGlmX25hcGlfZGVsKFxcdTAwMjZxX3ZlY3Rvci1cXHUwMDNlbmFwaSk7XFxuQEAgLTI2NTksNyArMjY2NCw3IEBAIHZvaWQgd3hfY2xlYW5fYWxsX3J4X3JpbmdzKHN0cnVjdCB3eCAqd3gpXFxuIFxcdGludCBpO1xcbiBcXG4gXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIHd4LVxcdTAwM2VudW1fcnhfcXVldWVzOyBpKyspXFxuLVxcdFxcdHd4X2NsZWFuX3J4X3Jpbmcod3gtXFx1MDAzZXJ4X3JpbmdbaV0pO1xcbitcXHRcXHR3eF9jbGVhbl9yeF9yaW5nKHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQod3gtXFx1MDAzZXJ4X3JpbmdbaV0sIDEpKTtcXG4gfVxcbiBFWFBPUlRfU1lNQk9MKHd4X2NsZWFuX2FsbF9yeF9yaW5ncyk7XFxuIFxcbkBAIC0yNzAxLDcgKzI3MDYsNyBAQCBzdGF0aWMgdm9pZCB3eF9mcmVlX2FsbF9yeF9yZXNvdXJjZXMoc3RydWN0IHd4ICp3eClcXG4gXFx0aW50IGk7XFxuIFxcbiBcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2Mgd3gtXFx1MDAzZW51bV9yeF9xdWV1ZXM7IGkrKylcXG4tXFx0XFx0d3hfZnJlZV9yeF9yZXNvdXJjZXMod3gtXFx1MDAzZXJ4X3JpbmdbaV0pO1xcbitcXHRcXHR3eF9mcmVlX3J4X3Jlc291cmNlcyhyY3VfZGVyZWZlcmVuY2VfcHJvdGVjdGVkKHd4LVxcdTAwM2VyeF9yaW5nW2ldLCAxKSk7XFxuIH1cXG4gXFxuIC8qKlxcbkBAIC0yNzc1LDcgKzI3ODAsNyBAQCB2b2lkIHd4X2NsZWFuX2FsbF90eF9yaW5ncyhzdHJ1Y3Qgd3ggKnd4KVxcbiBcXHRpbnQgaTtcXG4gXFxuIFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyB3eC1cXHUwMDNlbnVtX3R4X3F1ZXVlczsgaSsrKVxcbi1cXHRcXHR3eF9jbGVhbl90eF9yaW5nKHd4LVxcdTAwM2V0eF9yaW5nW2ldKTtcXG4rXFx0XFx0d3hfY2xlYW5fdHhfcmluZyhyY3VfZGVyZWZlcmVuY2VfcHJvdGVjdGVkKHd4LVxcdTAwM2V0eF9yaW5nW2ldLCAxKSk7XFxuIH1cXG4gRVhQT1JUX1NZTUJPTCh3eF9jbGVhbl9hbGxfdHhfcmluZ3MpO1xcbiBcXG5AQCAtMjgyMyw3ICsyODI4LDcgQEAgc3RhdGljIHZvaWQgd3hfZnJlZV9hbGxfdHhfcmVzb3VyY2VzKHN0cnVjdCB3eCAqd3gpXFxuIFxcdGludCBpO1xcbiBcXG4gXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIHd4LVxcdTAwM2VudW1fdHhfcXVldWVzOyBpKyspXFxuLVxcdFxcdHd4X2ZyZWVfdHhfcmVzb3VyY2VzKHd4LVxcdTAwM2V0eF9yaW5nW2ldKTtcXG4rXFx0XFx0d3hfZnJlZV90eF9yZXNvdXJjZXMocmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZCh3eC1cXHUwMDNldHhfcmluZ1tpXSwgMSkpO1xcbiB9XFxuIFxcbiB2b2lkIHd4X2ZyZWVfcmVzb3VyY2VzKHN0cnVjdCB3eCAqd3gpXFxuQEAgLTI5MzMsNyArMjkzOCw3IEBAIHN0YXRpYyBpbnQgd3hfc2V0dXBfYWxsX3J4X3Jlc291cmNlcyhzdHJ1Y3Qgd3ggKnd4KVxcbiBcXHRpbnQgaSwgZXJyID0gMDtcXG4gXFxuIFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyB3eC1cXHUwMDNlbnVtX3J4X3F1ZXVlczsgaSsrKSB7XFxuLVxcdFxcdGVyciA9IHd4X3NldHVwX3J4X3Jlc291cmNlcyh3eC1cXHUwMDNlcnhfcmluZ1tpXSk7XFxuK1xcdFxcdGVyciA9IHd4X3NldHVwX3J4X3Jlc291cmNlcyhyY3VfZGVyZWZlcmVuY2VfcHJvdGVjdGVkKHd4LVxcdTAwM2VyeF9yaW5nW2ldLCAxKSk7XFxuIFxcdFxcdGlmICghZXJyKVxcbiBcXHRcXHRcXHRjb250aW51ZTtcXG4gXFxuQEAgLTI5NDUsNyArMjk1MCw3IEBAIHN0YXRpYyBpbnQgd3hfc2V0dXBfYWxsX3J4X3Jlc291cmNlcyhzdHJ1Y3Qgd3ggKnd4KVxcbiBlcnJfc2V0dXBfcng6XFxuIFxcdC8qIHJld2luZCB0aGUgaW5kZXggZnJlZWluZyB0aGUgcmluZ3MgYXMgd2UgZ28gKi9cXG4gXFx0d2hpbGUgKGktLSlcXG4tXFx0XFx0d3hfZnJlZV9yeF9yZXNvdXJjZXMod3gtXFx1MDAzZXJ4X3JpbmdbaV0pO1xcbitcXHRcXHR3eF9mcmVlX3J4X3Jlc291cmNlcyhyY3VfZGVyZWZlcmVuY2VfcHJvdGVjdGVkKHd4LVxcdTAwM2VyeF9yaW5nW2ldLCAxKSk7XFxuIFxcdHJldHVybiBlcnI7XFxuIH1cXG4gXFxuQEAgLTMwMzYsNyArMzA0MSw3IEBAIHN0YXRpYyBpbnQgd3hfc2V0dXBfYWxsX3R4X3Jlc291cmNlcyhzdHJ1Y3Qgd3ggKnd4KVxcbiBcXHRpbnQgaSwgZXJyID0gMDtcXG4gXFxuIFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyB3eC1cXHUwMDNlbnVtX3R4X3F1ZXVlczsgaSsrKSB7XFxuLVxcdFxcdGVyciA9IHd4X3NldHVwX3R4X3Jlc291cmNlcyh3eC1cXHUwMDNldHhfcmluZ1tpXSk7XFxuK1xcdFxcdGVyciA9IHd4X3NldHVwX3R4X3Jlc291cmNlcyhyY3VfZGVyZWZlcmVuY2VfcHJvdGVjdGVkKHd4LVxcdTAwM2V0eF9yaW5nW2ldLCAxKSk7XFxuIFxcdFxcdGlmICghZXJyKVxcbiBcXHRcXHRcXHRjb250aW51ZTtcXG4gXFxuQEAgLTMwNDgsNyArMzA1Myw3IEBAIHN0YXRpYyBpbnQgd3hfc2V0dXBfYWxsX3R4X3Jlc291cmNlcyhzdHJ1Y3Qgd3ggKnd4KVxcbiBlcnJfc2V0dXBfdHg6XFxuIFxcdC8qIHJld2luZCB0aGUgaW5kZXggZnJlZWluZyB0aGUgcmluZ3MgYXMgd2UgZ28gKi9cXG4gXFx0d2hpbGUgKGktLSlcXG4tXFx0XFx0d3hfZnJlZV90eF9yZXNvdXJjZXMod3gtXFx1MDAzZXR4X3JpbmdbaV0pO1xcbitcXHRcXHR3eF9mcmVlX3R4X3Jlc291cmNlcyhyY3VfZGVyZWZlcmVuY2VfcHJvdGVjdGVkKHd4LVxcdTAwM2V0eF9yaW5nW2ldLCAxKSk7XFxuIFxcdHJldHVybiBlcnI7XFxuIH1cXG4gXFxuQEAgLTMwOTcsNyArMzEwMiw3IEBAIHZvaWQgd3hfZ2V0X3N0YXRzNjQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcXG4gXFxuIFxcdHJjdV9yZWFkX2xvY2soKTtcXG4gXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIHd4LVxcdTAwM2VudW1fcnhfcXVldWVzOyBpKyspIHtcXG4tXFx0XFx0c3RydWN0IHd4X3JpbmcgKnJpbmcgPSBSRUFEX09OQ0Uod3gtXFx1MDAzZXJ4X3JpbmdbaV0pO1xcbitcXHRcXHRzdHJ1Y3Qgd3hfcmluZyAqcmluZyA9IHJjdV9kZXJlZmVyZW5jZSh3eC1cXHUwMDNlcnhfcmluZ1tpXSk7XFxuIFxcdFxcdHU2NCBieXRlcywgcGFja2V0cztcXG4gXFx0XFx0dW5zaWduZWQgaW50IHN0YXJ0O1xcbiBcXG5AQCAtMzExMyw3ICszMTE4LDcgQEAgdm9pZCB3eF9nZXRfc3RhdHM2NChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxcbiBcXHR9XFxuIFxcbiBcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2Mgd3gtXFx1MDAzZW51bV90eF9xdWV1ZXM7IGkrKykge1xcbi1cXHRcXHRzdHJ1Y3Qgd3hfcmluZyAqcmluZyA9IFJFQURfT05DRSh3eC1cXHUwMDNldHhfcmluZ1tpXSk7XFxuK1xcdFxcdHN0cnVjdCB3eF9yaW5nICpyaW5nID0gcmN1X2RlcmVmZXJlbmNlKHd4LVxcdTAwM2V0eF9yaW5nW2ldKTtcXG4gXFx0XFx0dTY0IGJ5dGVzLCBwYWNrZXRzO1xcbiBcXHRcXHR1bnNpZ25lZCBpbnQgc3RhcnQ7XFxuIFxcbkBAIC0zMzI0LDcgKzMzMjksNyBAQCBpbnQgd3hfc2V0X3Jpbmcoc3RydWN0IHd4ICp3eCwgdTMyIG5ld190eF9jb3VudCxcXG4gXFx0ICovXFxuIFxcdGlmIChuZXdfdHhfY291bnQgIT0gd3gtXFx1MDAzZXR4X3JpbmdfY291bnQpIHtcXG4gXFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIHd4LVxcdTAwM2VudW1fdHhfcXVldWVzOyBpKyspIHtcXG4tXFx0XFx0XFx0bWVtY3B5KFxcdTAwMjZ0ZW1wX3JpbmdbaV0sIHd4LVxcdTAwM2V0eF9yaW5nW2ldLFxcbitcXHRcXHRcXHRtZW1jcHkoXFx1MDAyNnRlbXBfcmluZ1tpXSwgcmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZCh3eC1cXHUwMDNldHhfcmluZ1tpXSwgMSksXFxuIFxcdFxcdFxcdCAgICAgICBzaXplb2Yoc3RydWN0IHd4X3JpbmcpKTtcXG4gXFxuIFxcdFxcdFxcdHRlbXBfcmluZ1tpXS5jb3VudCA9IG5ld190eF9jb3VudDtcXG5AQCAtMzM0MCw5ICszMzQ1LDExIEBAIGludCB3eF9zZXRfcmluZyhzdHJ1Y3Qgd3ggKnd4LCB1MzIgbmV3X3R4X2NvdW50LFxcbiBcXHRcXHR9XFxuIFxcbiBcXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2Mgd3gtXFx1MDAzZW51bV90eF9xdWV1ZXM7IGkrKykge1xcbi1cXHRcXHRcXHR3eF9mcmVlX3R4X3Jlc291cmNlcyh3eC1cXHUwMDNldHhfcmluZ1tpXSk7XFxuK1xcdFxcdFxcdHN0cnVjdCB3eF9yaW5nICp0eF9yaW5nID0gcmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZCh3eC1cXHUwMDNldHhfcmluZ1tpXSwgMSk7XFxuK1xcbitcXHRcXHRcXHR3eF9mcmVlX3R4X3Jlc291cmNlcyh0eF9yaW5nKTtcXG4gXFxuLVxcdFxcdFxcdG1lbWNweSh3eC1cXHUwMDNldHhfcmluZ1tpXSwgXFx1MDAyNnRlbXBfcmluZ1tpXSxcXG4rXFx0XFx0XFx0bWVtY3B5KHR4X3JpbmcsIFxcdTAwMjZ0ZW1wX3JpbmdbaV0sXFxuIFxcdFxcdFxcdCAgICAgICBzaXplb2Yoc3RydWN0IHd4X3JpbmcpKTtcXG4gXFx0XFx0fVxcbiBcXG5AQCAtMzM1Miw3ICszMzU5LDcgQEAgaW50IHd4X3NldF9yaW5nKHN0cnVjdCB3eCAqd3gsIHUzMiBuZXdfdHhfY291bnQsXFxuIFxcdC8qIFJlcGVhdCB0aGUgcHJvY2VzcyBmb3IgdGhlIFJ4IHJpbmdzIGlmIG5lZWRlZCAqL1xcbiBcXHRpZiAobmV3X3J4X2NvdW50ICE9IHd4LVxcdTAwM2VyeF9yaW5nX2NvdW50KSB7XFxuIFxcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyB3eC1cXHUwMDNlbnVtX3J4X3F1ZXVlczsgaSsrKSB7XFxuLVxcdFxcdFxcdG1lbWNweShcXHUwMDI2dGVtcF9yaW5nW2ldLCB3eC1cXHUwMDNlcnhfcmluZ1tpXSxcXG4rXFx0XFx0XFx0bWVtY3B5KFxcdTAwMjZ0ZW1wX3JpbmdbaV0sIHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQod3gtXFx1MDAzZXJ4X3JpbmdbaV0sIDEpLFxcbiBcXHRcXHRcXHQgICAgICAgc2l6ZW9mKHN0cnVjdCB3eF9yaW5nKSk7XFxuIFxcbiBcXHRcXHRcXHR0ZW1wX3JpbmdbaV0uY291bnQgPSBuZXdfcnhfY291bnQ7XFxuQEAgLTMzNjgsOCArMzM3NSwxMCBAQCBpbnQgd3hfc2V0X3Jpbmcoc3RydWN0IHd4ICp3eCwgdTMyIG5ld190eF9jb3VudCxcXG4gXFx0XFx0fVxcbiBcXG4gXFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIHd4LVxcdTAwM2VudW1fcnhfcXVldWVzOyBpKyspIHtcXG4tXFx0XFx0XFx0d3hfZnJlZV9yeF9yZXNvdXJjZXMod3gtXFx1MDAzZXJ4X3JpbmdbaV0pO1xcbi1cXHRcXHRcXHRtZW1jcHkod3gtXFx1MDAzZXJ4X3JpbmdbaV0sIFxcdTAwMjZ0ZW1wX3JpbmdbaV0sXFxuK1xcdFxcdFxcdHN0cnVjdCB3eF9yaW5nICpyeF9yaW5nID0gcmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZCh3eC1cXHUwMDNlcnhfcmluZ1tpXSwgMSk7XFxuK1xcbitcXHRcXHRcXHR3eF9mcmVlX3J4X3Jlc291cmNlcyhyeF9yaW5nKTtcXG4rXFx0XFx0XFx0bWVtY3B5KHJ4X3JpbmcsIFxcdTAwMjZ0ZW1wX3JpbmdbaV0sXFxuIFxcdFxcdFxcdCAgICAgICBzaXplb2Yoc3RydWN0IHd4X3JpbmcpKTtcXG4gXFx0XFx0fVxcbiBcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9wdHAuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfcHRwLmNcXG5pbmRleCA0NzA4ZTdmMzk1OGY3Li42OGRjNjI5NzdhYWIyIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfcHRwLmNcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X3B0cC5jXFxuQEAgLTI3NCwxMSArMjc0LDE1IEBAIHN0YXRpYyB2b2lkIHd4X3B0cF9yeF9oYW5nKHN0cnVjdCB3eCAqd3gpXFxuIFxcbiBcXHQvKiBkZXRlcm1pbmUgdGhlIG1vc3QgcmVjZW50IHdhdGNoZG9nIG9yIHJ4X3RpbWVzdGFtcCBldmVudCAqL1xcbiBcXHRyeF9ldmVudCA9IHd4LVxcdTAwM2VsYXN0X3J4X3B0cF9jaGVjaztcXG4rXFx0cmN1X3JlYWRfbG9jaygpO1xcbiBcXHRmb3IgKG4gPSAwOyBuIFxcdTAwM2Mgd3gtXFx1MDAzZW51bV9yeF9xdWV1ZXM7IG4rKykge1xcbi1cXHRcXHRyeF9yaW5nID0gd3gtXFx1MDAzZXJ4X3Jpbmdbbl07XFxuK1xcdFxcdHJ4X3JpbmcgPSByY3VfZGVyZWZlcmVuY2Uod3gtXFx1MDAzZXJ4X3Jpbmdbbl0pO1xcbitcXHRcXHRpZiAoIXJ4X3JpbmcpXFxuK1xcdFxcdFxcdGNvbnRpbnVlO1xcbiBcXHRcXHRpZiAodGltZV9hZnRlcihyeF9yaW5nLVxcdTAwM2VsYXN0X3J4X3RpbWVzdGFtcCwgcnhfZXZlbnQpKVxcbiBcXHRcXHRcXHRyeF9ldmVudCA9IHJ4X3JpbmctXFx1MDAzZWxhc3RfcnhfdGltZXN0YW1wO1xcbiBcXHR9XFxuK1xcdHJjdV9yZWFkX3VubG9jaygpO1xcbiBcXG4gXFx0Lyogb25seSBuZWVkIHRvIHJlYWQgdGhlIGhpZ2ggUlhTVE1QIHJlZ2lzdGVyIHRvIGNsZWFyIHRoZSBsb2NrICovXFxuIFxcdGlmICh0aW1lX2lzX2JlZm9yZV9qaWZmaWVzKHJ4X2V2ZW50ICsgNSAqIEhaKSkge1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X3R5cGUuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfdHlwZS5oXFxuaW5kZXggOTQ1NGU5MDI1OGQ4ZS4uOTk1MmQwMjM0MjQwMSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X3R5cGUuaFxcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfdHlwZS5oXFxuQEAgLTEzNTksOCArMTM1OSw4IEBAIHN0cnVjdCB3eCB7XFxuIFxcdHUzMiB0eF9yaW5nX2NvdW50O1xcbiBcXHR1MzIgcnhfcmluZ19jb3VudDtcXG4gXFxuLVxcdHN0cnVjdCB3eF9yaW5nICp0eF9yaW5nWzY0XSBfX19fY2FjaGVsaW5lX2FsaWduZWRfaW5fc21wO1xcbi1cXHRzdHJ1Y3Qgd3hfcmluZyAqcnhfcmluZ1s2NF07XFxuK1xcdHN0cnVjdCB3eF9yaW5nIF9fcmN1ICp0eF9yaW5nWzY0XSBfX19fY2FjaGVsaW5lX2FsaWduZWRfaW5fc21wO1xcbitcXHRzdHJ1Y3Qgd3hfcmluZyBfX3JjdSAqcnhfcmluZ1s2NF07XFxuIFxcdHN0cnVjdCB3eF9xX3ZlY3RvciAqcV92ZWN0b3JbNjRdO1xcbiBcXHRpbnQgbnVtX3J4X3Bvb2xzO1xcbiBcXHRpbnQgbnVtX3J4X3F1ZXVlc19wZXJfcG9vbDtcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF92Zl9jb21tb24uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfdmZfY29tbW9uLmNcXG5pbmRleCAyNmRlNzhlOWE2OWVmLi5jODMwODI0YzQ4NjllIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfdmZfY29tbW9uLmNcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X3ZmX2NvbW1vbi5jXFxuQEAgLTIwNSw3ICsyMDUsNyBAQCBzdGF0aWMgdm9pZCB3eF9jb25maWd1cmVfcnhfdmYoc3RydWN0IHd4ICp3eClcXG4gXFx0ICogdGhlIEJhc2UgYW5kIExlbmd0aCBvZiB0aGUgUnggRGVzY3JpcHRvciBSaW5nXFxuIFxcdCAqL1xcbiBcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2Mgd3gtXFx1MDAzZW51bV9yeF9xdWV1ZXM7IGkrKykge1xcbi1cXHRcXHRzdHJ1Y3Qgd3hfcmluZyAqcnhfcmluZyA9IHd4LVxcdTAwM2VyeF9yaW5nW2ldO1xcbitcXHRcXHRzdHJ1Y3Qgd3hfcmluZyAqcnhfcmluZyA9IHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQod3gtXFx1MDAzZXJ4X3JpbmdbaV0sIDEpO1xcbiAjaWZkZWYgSEFWRV9TV0lPVExCX1NLSVBfQ1BVX1NZTkNcXG4gXFx0XFx0d3hfc2V0X3J4X2J1ZmZlcl9sZW5fdmYod3gsIHJ4X3JpbmcpO1xcbiAjZW5kaWZcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF92Zl9saWIuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfdmZfbGliLmNcXG5pbmRleCA3MzI1YjQ3NWVlMTBjLi4wZTA5ZTY2YzZkZTZkIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfdmZfbGliLmNcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X3ZmX2xpYi5jXFxuQEAgLTE3NSw4ICsxNzUsMTEgQEAgdm9pZCB3eF9jb25maWd1cmVfdHhfdmYoc3RydWN0IHd4ICp3eClcXG4gXFx0dTMyIGk7XFxuIFxcbiBcXHQvKiBTZXR1cCB0aGUgSFcgVHggSGVhZCBhbmQgVGFpbCBkZXNjcmlwdG9yIHBvaW50ZXJzICovXFxuLVxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyB3eC1cXHUwMDNlbnVtX3R4X3F1ZXVlczsgaSsrKVxcbi1cXHRcXHR3eF9jb25maWd1cmVfdHhfcmluZ192Zih3eCwgd3gtXFx1MDAzZXR4X3JpbmdbaV0pO1xcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2Mgd3gtXFx1MDAzZW51bV90eF9xdWV1ZXM7IGkrKykge1xcbitcXHRcXHRzdHJ1Y3Qgd3hfcmluZyAqdHhfcmluZyA9IHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQod3gtXFx1MDAzZXR4X3JpbmdbaV0sIDEpO1xcbitcXG4rXFx0XFx0d3hfY29uZmlndXJlX3R4X3JpbmdfdmYod3gsIHR4X3JpbmcpO1xcbitcXHR9XFxuIH1cXG4gXFxuIHN0YXRpYyB2b2lkIHd4X2NvbmZpZ3VyZV9zcnJjdGxfdmYoc3RydWN0IHd4ICp3eCwgc3RydWN0IHd4X3JpbmcgKnJpbmcsXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX2V0aHRvb2wuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX2V0aHRvb2wuY1xcbmluZGV4IDE5NjBmNzE1NDE1MWQuLjllOTA3MDJhNTE0NmEgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfZXRodG9vbC5jXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfZXRodG9vbC5jXFxuQEAgLTM3LDkgKzM3LDkgQEAgc3RhdGljIGludCBuZ2JlX3NldF9yaW5ncGFyYW0oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcXG4gXFxuIFxcdGlmICghbmV0aWZfcnVubmluZyh3eC1cXHUwMDNlbmV0ZGV2KSkge1xcbiBcXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2Mgd3gtXFx1MDAzZW51bV90eF9xdWV1ZXM7IGkrKylcXG4tXFx0XFx0XFx0d3gtXFx1MDAzZXR4X3JpbmdbaV0tXFx1MDAzZWNvdW50ID0gbmV3X3R4X2NvdW50O1xcbitcXHRcXHRcXHRyY3VfZGVyZWZlcmVuY2VfcHJvdGVjdGVkKHd4LVxcdTAwM2V0eF9yaW5nW2ldLCAxKS1cXHUwMDNlY291bnQgPSBuZXdfdHhfY291bnQ7XFxuIFxcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyB3eC1cXHUwMDNlbnVtX3J4X3F1ZXVlczsgaSsrKVxcbi1cXHRcXHRcXHR3eC1cXHUwMDNlcnhfcmluZ1tpXS1cXHUwMDNlY291bnQgPSBuZXdfcnhfY291bnQ7XFxuK1xcdFxcdFxcdHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQod3gtXFx1MDAzZXJ4X3JpbmdbaV0sIDEpLVxcdTAwM2Vjb3VudCA9IG5ld19yeF9jb3VudDtcXG4gXFx0XFx0d3gtXFx1MDAzZXR4X3JpbmdfY291bnQgPSBuZXdfdHhfY291bnQ7XFxuIFxcdFxcdHd4LVxcdTAwM2VyeF9yaW5nX2NvdW50ID0gbmV3X3J4X2NvdW50O1xcbiBcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfbWFpbi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfbWFpbi5jXFxuaW5kZXggODU1ZGM5NjNjNjEwYy4uZTQ1ZDdkZmRjOWY5MCAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9tYWluLmNcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9tYWluLmNcXG5AQCAtNDA2LDcgKzQwNiw3IEBAIHN0YXRpYyB2b2lkIG5nYmVfZGlzYWJsZV9kZXZpY2Uoc3RydWN0IHd4ICp3eClcXG4gXFx0LyogZGlzYWJsZSBhbGwgZW5hYmxlZCByeCBxdWV1ZXMgKi9cXG4gXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIHd4LVxcdTAwM2VudW1fcnhfcXVldWVzOyBpKyspXFxuIFxcdFxcdC8qIHRoaXMgY2FsbCBhbHNvIGZsdXNoZXMgdGhlIHByZXZpb3VzIHdyaXRlICovXFxuLVxcdFxcdHd4X2Rpc2FibGVfcnhfcXVldWUod3gsIHd4LVxcdTAwM2VyeF9yaW5nW2ldKTtcXG4rXFx0XFx0d3hfZGlzYWJsZV9yeF9xdWV1ZSh3eCwgcmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZCh3eC1cXHUwMDNlcnhfcmluZ1tpXSwgMSkpO1xcbiBcXHQvKiBkaXNhYmxlIHJlY2VpdmVzICovXFxuIFxcdHd4X2Rpc2FibGVfcngod3gpO1xcbiBcXHR3eF9uYXBpX2Rpc2FibGVfYWxsKHd4KTtcXG5AQCAtNDIyLDcgKzQyMiw3IEBAIHN0YXRpYyB2b2lkIG5nYmVfZGlzYWJsZV9kZXZpY2Uoc3RydWN0IHd4ICp3eClcXG4gXFx0d3hfaXJxX2Rpc2FibGUod3gpO1xcbiBcXHQvKiBkaXNhYmxlIHRyYW5zbWl0cyBpbiB0aGUgaGFyZHdhcmUgbm93IHRoYXQgaW50ZXJydXB0cyBhcmUgb2ZmICovXFxuIFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyB3eC1cXHUwMDNlbnVtX3R4X3F1ZXVlczsgaSsrKSB7XFxuLVxcdFxcdHU4IHJlZ19pZHggPSB3eC1cXHUwMDNldHhfcmluZ1tpXS1cXHUwMDNlcmVnX2lkeDtcXG4rXFx0XFx0dTggcmVnX2lkeCA9IHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQod3gtXFx1MDAzZXR4X3JpbmdbaV0sIDEpLVxcdTAwM2VyZWdfaWR4O1xcbiBcXG4gXFx0XFx0d3IzMih3eCwgV1hfUFhfVFJfQ0ZHKHJlZ19pZHgpLCBXWF9QWF9UUl9DRkdfU1dGTFNIKTtcXG4gXFx0fVxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX2V0aHRvb2wuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfZXRodG9vbC5jXFxuaW5kZXggM2UzMmFjYTcyODA2NS4uZmNmYWY2ZjJmNTQ0YSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX2V0aHRvb2wuY1xcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfZXRodG9vbC5jXFxuQEAgLTYxLDkgKzYxLDkgQEAgc3RhdGljIGludCB0eGdiZV9zZXRfcmluZ3BhcmFtKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXFxuIFxcbiBcXHRpZiAoIW5ldGlmX3J1bm5pbmcod3gtXFx1MDAzZW5ldGRldikpIHtcXG4gXFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIHd4LVxcdTAwM2VudW1fdHhfcXVldWVzOyBpKyspXFxuLVxcdFxcdFxcdHd4LVxcdTAwM2V0eF9yaW5nW2ldLVxcdTAwM2Vjb3VudCA9IG5ld190eF9jb3VudDtcXG4rXFx0XFx0XFx0cmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZCh3eC1cXHUwMDNldHhfcmluZ1tpXSwgMSktXFx1MDAzZWNvdW50ID0gbmV3X3R4X2NvdW50O1xcbiBcXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2Mgd3gtXFx1MDAzZW51bV9yeF9xdWV1ZXM7IGkrKylcXG4tXFx0XFx0XFx0d3gtXFx1MDAzZXJ4X3JpbmdbaV0tXFx1MDAzZWNvdW50ID0gbmV3X3J4X2NvdW50O1xcbitcXHRcXHRcXHRyY3VfZGVyZWZlcmVuY2VfcHJvdGVjdGVkKHd4LVxcdTAwM2VyeF9yaW5nW2ldLCAxKS1cXHUwMDNlY291bnQgPSBuZXdfcnhfY291bnQ7XFxuIFxcdFxcdHd4LVxcdTAwM2V0eF9yaW5nX2NvdW50ID0gbmV3X3R4X2NvdW50O1xcbiBcXHRcXHR3eC1cXHUwMDNlcnhfcmluZ19jb3VudCA9IG5ld19yeF9jb3VudDtcXG4gXFxuQEAgLTM2Niw3ICszNjYsNyBAQCBzdGF0aWMgaW50IHR4Z2JlX2FkZF9ldGh0b29sX2ZkaXJfZW50cnkoc3RydWN0IHR4Z2JlICp0eGdiZSxcXG4gXFxuIFxcdFxcdC8qIE1hcCB0aGUgcmluZyBvbnRvIHRoZSBhYnNvbHV0ZSBxdWV1ZSBpbmRleCAqL1xcbiBcXHRcXHRpZiAoIXZmKVxcbi1cXHRcXHRcXHRxdWV1ZSA9IHd4LVxcdTAwM2VyeF9yaW5nW3JpbmddLVxcdTAwM2VyZWdfaWR4O1xcbitcXHRcXHRcXHRxdWV1ZSA9IHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQod3gtXFx1MDAzZXJ4X3JpbmdbcmluZ10sIDEpLVxcdTAwM2VyZWdfaWR4O1xcbiBcXHRcXHRlbHNlXFxuIFxcdFxcdFxcdHF1ZXVlID0gKCh2ZiAtIDEpICogd3gtXFx1MDAzZW51bV9yeF9xdWV1ZXNfcGVyX3Bvb2wpICsgcmluZztcXG4gXFx0fVxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX2ZkaXIuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfZmRpci5jXFxuaW5kZXggYTg0MDEwODI4NTUxNy4uNjBjOGVhNDc3ODI3ZCAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX2ZkaXIuY1xcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfZmRpci5jXFxuQEAgLTU5OSw3ICs1OTksNyBAQCBzdGF0aWMgdm9pZCB0eGdiZV9mZGlyX2ZpbHRlcl9yZXN0b3JlKHN0cnVjdCB3eCAqd3gpXFxuIFxcdFxcdFxcdH1cXG4gXFxuIFxcdFxcdFxcdC8qIE1hcCB0aGUgcmluZyBvbnRvIHRoZSBhYnNvbHV0ZSBxdWV1ZSBpbmRleCAqL1xcbi1cXHRcXHRcXHRxdWV1ZSA9IHd4LVxcdTAwM2VyeF9yaW5nW3JpbmddLVxcdTAwM2VyZWdfaWR4O1xcbitcXHRcXHRcXHRxdWV1ZSA9IHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQod3gtXFx1MDAzZXJ4X3JpbmdbcmluZ10sIDEpLVxcdTAwM2VyZWdfaWR4O1xcbiBcXHRcXHR9XFxuIFxcbiBcXHRcXHRyZXQgPSB0eGdiZV9mZGlyX3dyaXRlX3BlcmZlY3RfZmlsdGVyKHd4LFxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX21haW4uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfbWFpbi5jXFxuaW5kZXggZWI5MWM0ZjI4ZWNkNC4uNTM2MTM2MGY3YzZlZSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX21haW4uY1xcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfbWFpbi5jXFxuQEAgLTIzOSw3ICsyMzksNyBAQCBzdGF0aWMgdm9pZCB0eGdiZV9kaXNhYmxlX2RldmljZShzdHJ1Y3Qgd3ggKnd4KVxcbiBcXHQvKiBkaXNhYmxlIGFsbCBlbmFibGVkIHJ4IHF1ZXVlcyAqL1xcbiBcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2Mgd3gtXFx1MDAzZW51bV9yeF9xdWV1ZXM7IGkrKylcXG4gXFx0XFx0LyogdGhpcyBjYWxsIGFsc28gZmx1c2hlcyB0aGUgcHJldmlvdXMgd3JpdGUgKi9cXG4tXFx0XFx0d3hfZGlzYWJsZV9yeF9xdWV1ZSh3eCwgd3gtXFx1MDAzZXJ4X3JpbmdbaV0pO1xcbitcXHRcXHR3eF9kaXNhYmxlX3J4X3F1ZXVlKHd4LCByY3VfZGVyZWZlcmVuY2VfcHJvdGVjdGVkKHd4LVxcdTAwM2VyeF9yaW5nW2ldLCAxKSk7XFxuIFxcbiBcXHRuZXRpZl90eF9zdG9wX2FsbF9xdWV1ZXMobmV0ZGV2KTtcXG4gXFx0bmV0aWZfdHhfZGlzYWJsZShuZXRkZXYpO1xcbkBAIC0yNzUsNyArMjc1LDcgQEAgc3RhdGljIHZvaWQgdHhnYmVfZGlzYWJsZV9kZXZpY2Uoc3RydWN0IHd4ICp3eClcXG4gXFxuIFxcdC8qIGRpc2FibGUgdHJhbnNtaXRzIGluIHRoZSBoYXJkd2FyZSBub3cgdGhhdCBpbnRlcnJ1cHRzIGFyZSBvZmYgKi9cXG4gXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIHd4LVxcdTAwM2VudW1fdHhfcXVldWVzOyBpKyspIHtcXG4tXFx0XFx0dTggcmVnX2lkeCA9IHd4LVxcdTAwM2V0eF9yaW5nW2ldLVxcdTAwM2VyZWdfaWR4O1xcbitcXHRcXHR1OCByZWdfaWR4ID0gcmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZCh3eC1cXHUwMDNldHhfcmluZ1tpXSwgMSktXFx1MDAzZXJlZ19pZHg7XFxuIFxcbiBcXHRcXHR3cjMyKHd4LCBXWF9QWF9UUl9DRkcocmVnX2lkeCksIFdYX1BYX1RSX0NGR19TV0ZMU0gpO1xcbiBcXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDExOjA1OjQzLjM3MDQyMzAwOVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MTI4Nzg2MDY1NjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIGNoYW5nZXMgYXJlIHN0cmljdGx5IGNvbmZpbmVkIHRvIHRoZSBXYW5neHVuIEV0aGVybmV0IG5ldHdvcmsgZHJpdmVycyAobGlid3gsIG5nYmUsIHR4Z2JlKSB1bmRlciBkcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuLy4gVGhlc2UgZHJpdmVycyByZXF1aXJlIHZlbmRvci1zcGVjaWZpYyBQQ0llIEFTSUMgaGFyZHdhcmUgdGhhdCBpcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIChRRU1VL0dDRSksIG1ha2luZyB0aGUgbW9kaWZpZWQgY29kZSBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgZm9yIHN5emthbGxlciBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzc1xudG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5UaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLFxuYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy5cblxuLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURTpcbiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZFxuICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLlxuICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsXG4gIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy5cblxuLSBETyBOT1QgQkxJTkRMWSBUUlVTVCBcIk5PIEZVTkNUSU9OQUwgQ0hBTkdFXCIgKE5GQ0kpIE9SIFwiUkVGQUNUT1JJTkdcIiBDTEFJTVM6XG4gIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgXCJjbGVhbnVwc1wiLCBcInJlZmFjdG9yaW5nc1wiLCBvciBzdGF0ZVxuICBcIk5vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkXCIuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLlxuICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnRcbiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuXG4gIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuXG5cbi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6XG4gIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKixcbiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuXG4gIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXJcbiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOlxuXG4tIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6XG4gICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLlxuICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKVxuICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy5cbiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50c1xuICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuXG4gICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLlxuLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6XG4gICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczpcbiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmdcbiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy5cbiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4zLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzpcbi0gQ29yZSBTdWJzeXN0ZW1zOlxuICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSxcbiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuXG4tIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczpcbiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuXG4tIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczpcbiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuXG4tIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6XG4gICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6XG5cbi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOlxuICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1c1xuICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdFxuICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS5cbiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzIFwiZm9jdXNlZFwiLFxuICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuXG5cbi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOlxuICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHNcbiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuXG5cbi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOlxuICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrXG4gIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLlxuICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXJcbiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlnc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6XG4tIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4tIENoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuXG4tIFN0cmlwIGFueSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA2NzQ4M2ZmZjg1MjU3ZWRhMDc2YWM2OTA1ZmJkYjA2Mjg0N2JkOGRmXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBTZXAgOSAxMTowNTo0MiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfZXJyLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2Vyci5jXG5pbmRleCBiNTZmYmRjOTU5ZGVjLi44ZWFkYjRkM2FiY2ZmIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9lcnIuY1xuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9lcnIuY1xuQEAgLTIwMSwxMiArMjAxLDE4IEBAIHN0YXRpYyBib29sIHd4X3JpbmdfdHhfcGVuZGluZyhzdHJ1Y3Qgd3ggKnd4KVxuIHtcbiBcdGludCBpO1xuIFxuK1x0cmN1X3JlYWRfbG9jaygpO1xuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2Mgd3gtXHUwMDNlbnVtX3R4X3F1ZXVlczsgaSsrKSB7XG4tXHRcdHN0cnVjdCB3eF9yaW5nICp0eF9yaW5nID0gd3gtXHUwMDNldHhfcmluZ1tpXTtcbitcdFx0c3RydWN0IHd4X3JpbmcgKnR4X3JpbmcgPSByY3VfZGVyZWZlcmVuY2Uod3gtXHUwMDNldHhfcmluZ1tpXSk7XG4gXG4tXHRcdGlmICh0eF9yaW5nLVx1MDAzZW5leHRfdG9fdXNlICE9IHR4X3JpbmctXHUwMDNlbmV4dF90b19jbGVhbilcbitcdFx0aWYgKCF0eF9yaW5nKVxuK1x0XHRcdGNvbnRpbnVlO1xuK1x0XHRpZiAodHhfcmluZy1cdTAwM2VuZXh0X3RvX3VzZSAhPSB0eF9yaW5nLVx1MDAzZW5leHRfdG9fY2xlYW4pIHtcbitcdFx0XHRyY3VfcmVhZF91bmxvY2soKTtcbiBcdFx0XHRyZXR1cm4gdHJ1ZTtcbitcdFx0fVxuIFx0fVxuK1x0cmN1X3JlYWRfdW5sb2NrKCk7XG4gXG4gXHRyZXR1cm4gZmFsc2U7XG4gfVxuQEAgLTI2NCw4ICsyNzAsMTQgQEAgc3RhdGljIHZvaWQgd3hfZGV0ZWN0X3R4X2hhbmcoc3RydWN0IHd4ICp3eClcbiBcbiBcdC8qIEZvcmNlIGRldGVjdGlvbiBvZiBodW5nIGNvbnRyb2xsZXIgKi9cbiBcdGlmIChuZXRpZl9jYXJyaWVyX29rKHd4LVx1MDAzZW5ldGRldikpIHtcbi1cdFx0Zm9yIChpID0gMDsgaSBcdTAwM2Mgd3gtXHUwMDNlbnVtX3R4X3F1ZXVlczsgaSsrKVxuLVx0XHRcdHNldF9iaXQoV1hfVFhfREVURUNUX0hBTkcsIHd4LVx1MDAzZXR4X3JpbmdbaV0tXHUwMDNlc3RhdGUpO1xuK1x0XHRyY3VfcmVhZF9sb2NrKCk7XG4rXHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHd4LVx1MDAzZW51bV90eF9xdWV1ZXM7IGkrKykge1xuK1x0XHRcdHN0cnVjdCB3eF9yaW5nICp0eF9yaW5nID0gcmN1X2RlcmVmZXJlbmNlKHd4LVx1MDAzZXR4X3JpbmdbaV0pO1xuK1xuK1x0XHRcdGlmICh0eF9yaW5nKVxuK1x0XHRcdFx0c2V0X2JpdChXWF9UWF9ERVRFQ1RfSEFORywgdHhfcmluZy1cdTAwM2VzdGF0ZSk7XG4rXHRcdH1cbitcdFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4gXHR9XG4gfVxuIFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfZXRodG9vbC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9ldGh0b29sLmNcbmluZGV4IDk0MGQyZTU5ODc2YzcuLmVhZTU5NTJjMGY1ZmMgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2V0aHRvb2wuY1xuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9ldGh0b29sLmNcbkBAIC0xNTQsOCArMTU0LDkgQEAgdm9pZCB3eF9nZXRfZXRodG9vbF9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxuIFx0XHR9XG4gXHR9XG4gXG4rXHRyY3VfcmVhZF9sb2NrKCk7XG4gXHRmb3IgKGogPSAwOyBqIFx1MDAzYyBuZXRkZXYtXHUwMDNlbnVtX3R4X3F1ZXVlczsgaisrKSB7XG4tXHRcdHJpbmcgPSB3eC1cdTAwM2V0eF9yaW5nW2pdO1xuK1x0XHRyaW5nID0gcmN1X2RlcmVmZXJlbmNlKHd4LVx1MDAzZXR4X3Jpbmdbal0pO1xuIFx0XHRpZiAoIXJpbmcpIHtcbiBcdFx0XHRkYXRhW2krK10gPSAwO1xuIFx0XHRcdGRhdGFbaSsrXSA9IDA7XG5AQCAtMTcwLDcgKzE3MSw3IEBAIHZvaWQgd3hfZ2V0X2V0aHRvb2xfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcbiBcdFx0aSArPSAyO1xuIFx0fVxuIFx0Zm9yIChqID0gMDsgaiBcdTAwM2MgV1hfTlVNX1JYX1FVRVVFUzsgaisrKSB7XG4tXHRcdHJpbmcgPSB3eC1cdTAwM2VyeF9yaW5nW2pdO1xuK1x0XHRyaW5nID0gcmN1X2RlcmVmZXJlbmNlKHd4LVx1MDAzZXJ4X3Jpbmdbal0pO1xuIFx0XHRpZiAoIXJpbmcpIHtcbiBcdFx0XHRkYXRhW2krK10gPSAwO1xuIFx0XHRcdGRhdGFbaSsrXSA9IDA7XG5AQCAtMTg0LDYgKzE4NSw3IEBAIHZvaWQgd3hfZ2V0X2V0aHRvb2xfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcbiBcdFx0fSB3aGlsZSAodTY0X3N0YXRzX2ZldGNoX3JldHJ5KFx1MDAyNnJpbmctXHUwMDNlc3luY3AsIHN0YXJ0KSk7XG4gXHRcdGkgKz0gMjtcbiBcdH1cbitcdHJjdV9yZWFkX3VubG9jaygpO1xuIH1cbiBFWFBPUlRfU1lNQk9MKHd4X2dldF9ldGh0b29sX3N0YXRzKTtcbiBcbkBAIC04MDUsOSArODA3LDkgQEAgc3RhdGljIGludCB3eF9zZXRfcmluZ3BhcmFtX3ZmKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXG4gXG4gXHRpZiAoIW5ldGlmX3J1bm5pbmcod3gtXHUwMDNlbmV0ZGV2KSkge1xuIFx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyB3eC1cdTAwM2VudW1fdHhfcXVldWVzOyBpKyspXG4tXHRcdFx0d3gtXHUwMDNldHhfcmluZ1tpXS1cdTAwM2Vjb3VudCA9IG5ld190eF9jb3VudDtcbitcdFx0XHRyY3VfZGVyZWZlcmVuY2VfcHJvdGVjdGVkKHd4LVx1MDAzZXR4X3JpbmdbaV0sIDEpLVx1MDAzZWNvdW50ID0gbmV3X3R4X2NvdW50O1xuIFx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyB3eC1cdTAwM2VudW1fcnhfcXVldWVzOyBpKyspXG4tXHRcdFx0d3gtXHUwMDNlcnhfcmluZ1tpXS1cdTAwM2Vjb3VudCA9IG5ld19yeF9jb3VudDtcbitcdFx0XHRyY3VfZGVyZWZlcmVuY2VfcHJvdGVjdGVkKHd4LVx1MDAzZXJ4X3JpbmdbaV0sIDEpLVx1MDAzZWNvdW50ID0gbmV3X3J4X2NvdW50O1xuIFx0XHR3eC1cdTAwM2V0eF9yaW5nX2NvdW50ID0gbmV3X3R4X2NvdW50O1xuIFx0XHR3eC1cdTAwM2VyeF9yaW5nX2NvdW50ID0gbmV3X3J4X2NvdW50O1xuIFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfaHcuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfaHcuY1xuaW5kZXggMTIyYzQ5NTJkMjAzZi4uYzc4MTM2YWJlOTJmOSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfaHcuY1xuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9ody5jXG5AQCAtMTU5OCwxMyArMTU5OCwxNyBAQCBzdGF0aWMgdm9pZCB3eF92bGFuX3N0cmlwX2NvbnRyb2woc3RydWN0IHd4ICp3eCwgYm9vbCBlbmFibGUpXG4ge1xuIFx0aW50IGksIGo7XG4gXG4rXHRyY3VfcmVhZF9sb2NrKCk7XG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyB3eC1cdTAwM2VudW1fcnhfcXVldWVzOyBpKyspIHtcbi1cdFx0c3RydWN0IHd4X3JpbmcgKnJpbmcgPSB3eC1cdTAwM2VyeF9yaW5nW2ldO1xuK1x0XHRzdHJ1Y3Qgd3hfcmluZyAqcmluZyA9IHJjdV9kZXJlZmVyZW5jZSh3eC1cdTAwM2VyeF9yaW5nW2ldKTtcbiBcbitcdFx0aWYgKCFyaW5nKVxuK1x0XHRcdGNvbnRpbnVlO1xuIFx0XHRqID0gcmluZy1cdTAwM2VyZWdfaWR4O1xuIFx0XHR3cjMybSh3eCwgV1hfUFhfUlJfQ0ZHKGopLCBXWF9QWF9SUl9DRkdfVkxBTixcbiBcdFx0ICAgICAgZW5hYmxlID8gV1hfUFhfUlJfQ0ZHX1ZMQU4gOiAwKTtcbiBcdH1cbitcdHJjdV9yZWFkX3VubG9jaygpO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCB3eF92bGFuX3Byb21pc2NfZW5hYmxlKHN0cnVjdCB3eCAqd3gpXG5AQCAtMTc5Nyw3ICsxODAxLDcgQEAgc3RhdGljIHZvaWQgd3hfc2V0X3J4X2J1ZmZlcl9sZW4oc3RydWN0IHd4ICp3eClcbiBcdCAqIHRoZSBCYXNlIGFuZCBMZW5ndGggb2YgdGhlIFJ4IERlc2NyaXB0b3IgUmluZ1xuIFx0ICovXG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyB3eC1cdTAwM2VudW1fcnhfcXVldWVzOyBpKyspIHtcbi1cdFx0cnhfcmluZyA9IHd4LVx1MDAzZXJ4X3JpbmdbaV07XG4rXHRcdHJ4X3JpbmcgPSByY3VfZGVyZWZlcmVuY2VfcHJvdGVjdGVkKHd4LVx1MDAzZXJ4X3JpbmdbaV0sIDEpO1xuIFx0XHRyeF9yaW5nLVx1MDAzZXJ4X2J1Zl9sZW4gPSBXWF9SWEJVRkZFUl8ySztcbiAjaWYgKFBBR0VfU0laRSBcdTAwM2MgODE5MilcbiBcdFx0aWYgKHRlc3RfYml0KFdYX0ZMQUdfUlNDX0VOQUJMRUQsIHd4LVx1MDAzZWZsYWdzKSlcbkBAIC0yMDIxLDggKzIwMjUsMTEgQEAgc3RhdGljIHZvaWQgd3hfY29uZmlndXJlX3R4KHN0cnVjdCB3eCAqd3gpXG4gXHQgICAgICBXWF9URE1fQ1RMX1RFLCBXWF9URE1fQ1RMX1RFKTtcbiBcbiBcdC8qIFNldHVwIHRoZSBIVyBUeCBIZWFkIGFuZCBUYWlsIGRlc2NyaXB0b3IgcG9pbnRlcnMgKi9cbi1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIHd4LVx1MDAzZW51bV90eF9xdWV1ZXM7IGkrKylcbi1cdFx0d3hfY29uZmlndXJlX3R4X3Jpbmcod3gsIHd4LVx1MDAzZXR4X3JpbmdbaV0pO1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2Mgd3gtXHUwMDNlbnVtX3R4X3F1ZXVlczsgaSsrKSB7XG4rXHRcdHN0cnVjdCB3eF9yaW5nICp0eF9yaW5nID0gcmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZCh3eC1cdTAwM2V0eF9yaW5nW2ldLCAxKTtcbitcbitcdFx0d3hfY29uZmlndXJlX3R4X3Jpbmcod3gsIHR4X3JpbmcpO1xuK1x0fVxuIFxuIFx0d3IzMm0od3gsIFdYX1RTQ19CVUZfQUUsIFdYX1RTQ19CVUZfQUVfVEhSLCAweDEwKTtcbiBcbkBAIC0yMjQ3LDggKzIyNTQsMTEgQEAgdm9pZCB3eF9jb25maWd1cmVfcngoc3RydWN0IHd4ICp3eClcbiBcdC8qIFNldHVwIHRoZSBIVyBSeCBIZWFkIGFuZCBUYWlsIERlc2NyaXB0b3IgUG9pbnRlcnMgYW5kXG4gXHQgKiB0aGUgQmFzZSBhbmQgTGVuZ3RoIG9mIHRoZSBSeCBEZXNjcmlwdG9yIFJpbmdcbiBcdCAqL1xuLVx0Zm9yIChpID0gMDsgaSBcdTAwM2Mgd3gtXHUwMDNlbnVtX3J4X3F1ZXVlczsgaSsrKVxuLVx0XHR3eF9jb25maWd1cmVfcnhfcmluZyh3eCwgd3gtXHUwMDNlcnhfcmluZ1tpXSk7XG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyB3eC1cdTAwM2VudW1fcnhfcXVldWVzOyBpKyspIHtcbitcdFx0c3RydWN0IHd4X3JpbmcgKnJ4X3JpbmcgPSByY3VfZGVyZWZlcmVuY2VfcHJvdGVjdGVkKHd4LVx1MDAzZXJ4X3JpbmdbaV0sIDEpO1xuK1xuK1x0XHR3eF9jb25maWd1cmVfcnhfcmluZyh3eCwgcnhfcmluZyk7XG4rXHR9XG4gXG4gXHQvKiBFbmFibGUgYWxsIHJlY2VpdmVzLCBkaXNhYmxlIHNlY3VyaXR5IGVuZ2luZSBwcmlvciB0byBibG9jayB0cmFmZmljICovXG4gXHRyZXQgPSB3eF9kaXNhYmxlX3NlY19yeF9wYXRoKHd4KTtcbkBAIC0yODM4LDExICsyODQ4LDE3IEBAIGludCB3eF9mY19lbmFibGUoc3RydWN0IHd4ICp3eCwgYm9vbCB0eF9wYXVzZSwgYm9vbCByeF9wYXVzZSlcbiBcdCAqICBhbmQgcGVyZm9ybWFuY2UgcmVhc29ucy5cbiBcdCAqL1xuIFx0aWYgKHd4LVx1MDAzZW51bV9yeF9xdWV1ZXMgXHUwMDNlIDEgXHUwMDI2XHUwMDI2ICF0eF9wYXVzZSkge1xuLVx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyB3eC1cdTAwM2VudW1fcnhfcXVldWVzOyBpKyspXG4tXHRcdFx0d3hfZW5hYmxlX3J4X2Ryb3Aod3gsIHd4LVx1MDAzZXJ4X3JpbmdbaV0pO1xuK1x0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyB3eC1cdTAwM2VudW1fcnhfcXVldWVzOyBpKyspIHtcbitcdFx0XHRzdHJ1Y3Qgd3hfcmluZyAqcnhfcmluZyA9IHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQod3gtXHUwMDNlcnhfcmluZ1tpXSwgMSk7XG4rXG4rXHRcdFx0d3hfZW5hYmxlX3J4X2Ryb3Aod3gsIHJ4X3JpbmcpO1xuK1x0XHR9XG4gXHR9IGVsc2Uge1xuLVx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyB3eC1cdTAwM2VudW1fcnhfcXVldWVzOyBpKyspXG4tXHRcdFx0d3hfZGlzYWJsZV9yeF9kcm9wKHd4LCB3eC1cdTAwM2VyeF9yaW5nW2ldKTtcbitcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2Mgd3gtXHUwMDNlbnVtX3J4X3F1ZXVlczsgaSsrKSB7XG4rXHRcdFx0c3RydWN0IHd4X3JpbmcgKnJ4X3JpbmcgPSByY3VfZGVyZWZlcmVuY2VfcHJvdGVjdGVkKHd4LVx1MDAzZXJ4X3JpbmdbaV0sIDEpO1xuK1xuK1x0XHRcdHd4X2Rpc2FibGVfcnhfZHJvcCh3eCwgcnhfcmluZyk7XG4rXHRcdH1cbiBcdH1cbiBcbiBcdHJldHVybiAwO1xuQEAgLTI4NzAsOCArMjg4NiwxNSBAQCBzdGF0aWMgdm9pZCB3eF91cGRhdGVfeG9mZl9yeF9sZmMoc3RydWN0IHd4ICp3eClcbiBcdGlmICghZGF0YSlcbiBcdFx0cmV0dXJuO1xuIFxuLVx0Zm9yIChpID0gMDsgaSBcdTAwM2Mgd3gtXHUwMDNlbnVtX3R4X3F1ZXVlczsgaSsrKVxuLVx0XHRjbGVhcl9iaXQoV1hfSEFOR19DSEVDS19BUk1FRCwgd3gtXHUwMDNldHhfcmluZ1tpXS1cdTAwM2VzdGF0ZSk7XG4rXHRyY3VfcmVhZF9sb2NrKCk7XG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyB3eC1cdTAwM2VudW1fdHhfcXVldWVzOyBpKyspIHtcbitcdFx0c3RydWN0IHd4X3JpbmcgKnR4X3JpbmcgPSByY3VfZGVyZWZlcmVuY2Uod3gtXHUwMDNldHhfcmluZ1tpXSk7XG4rXG4rXHRcdGlmICghdHhfcmluZylcbitcdFx0XHRjb250aW51ZTtcbitcdFx0Y2xlYXJfYml0KFdYX0hBTkdfQ0hFQ0tfQVJNRUQsIHR4X3JpbmctXHUwMDNlc3RhdGUpO1xuK1x0fVxuK1x0cmN1X3JlYWRfdW5sb2NrKCk7XG4gfVxuIFxuIC8qKlxuQEAgLTI4OTMsMTAgKzI5MTYsMTMgQEAgdm9pZCB3eF91cGRhdGVfc3RhdHMoc3RydWN0IHd4ICp3eClcbiBcbiBcdHNwaW5fbG9jayhcdTAwMjZ3eC1cdTAwM2Vod19zdGF0c19sb2NrKTtcbiBcbitcdHJjdV9yZWFkX2xvY2soKTtcbiBcdC8qIGdhdGhlciBzb21lIHN0YXRzIHRvIHRoZSB3eCBzdHJ1Y3QgdGhhdCBhcmUgcGVyIHF1ZXVlICovXG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyB3eC1cdTAwM2VudW1fcnhfcXVldWVzOyBpKyspIHtcbi1cdFx0c3RydWN0IHd4X3JpbmcgKnJ4X3JpbmcgPSB3eC1cdTAwM2VyeF9yaW5nW2ldO1xuK1x0XHRzdHJ1Y3Qgd3hfcmluZyAqcnhfcmluZyA9IHJjdV9kZXJlZmVyZW5jZSh3eC1cdTAwM2VyeF9yaW5nW2ldKTtcbiBcbitcdFx0aWYgKCFyeF9yaW5nKVxuK1x0XHRcdGNvbnRpbnVlO1xuIFx0XHRub25fZW9wX2Rlc2NzICs9IHJ4X3JpbmctXHUwMDNlcnhfc3RhdHMubm9uX2VvcF9kZXNjcztcbiBcdFx0YWxsb2NfcnhfYnVmZl9mYWlsZWQgKz0gcnhfcmluZy1cdTAwM2VyeF9zdGF0cy5hbGxvY19yeF9idWZmX2ZhaWxlZDtcbiBcdFx0aHdfY3N1bV9yeF9nb29kICs9IHJ4X3JpbmctXHUwMDNlcnhfc3RhdHMuY3N1bV9nb29kX2NudDtcbkBAIC0yOTEyLDE5ICsyOTM4LDI4IEBAIHZvaWQgd3hfdXBkYXRlX3N0YXRzKHN0cnVjdCB3eCAqd3gpXG4gXHRcdHU2NCByc2NfZmx1c2ggPSAwO1xuIFxuIFx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyB3eC1cdTAwM2VudW1fcnhfcXVldWVzOyBpKyspIHtcbi1cdFx0XHRyc2NfY291bnQgKz0gd3gtXHUwMDNlcnhfcmluZ1tpXS1cdTAwM2VyeF9zdGF0cy5yc2NfY291bnQ7XG4tXHRcdFx0cnNjX2ZsdXNoICs9IHd4LVx1MDAzZXJ4X3JpbmdbaV0tXHUwMDNlcnhfc3RhdHMucnNjX2ZsdXNoO1xuK1x0XHRcdHN0cnVjdCB3eF9yaW5nICpyeF9yaW5nID0gcmN1X2RlcmVmZXJlbmNlKHd4LVx1MDAzZXJ4X3JpbmdbaV0pO1xuK1xuK1x0XHRcdGlmICghcnhfcmluZylcbitcdFx0XHRcdGNvbnRpbnVlO1xuK1xuK1x0XHRcdHJzY19jb3VudCArPSByeF9yaW5nLVx1MDAzZXJ4X3N0YXRzLnJzY19jb3VudDtcbitcdFx0XHRyc2NfZmx1c2ggKz0gcnhfcmluZy1cdTAwM2VyeF9zdGF0cy5yc2NfZmx1c2g7XG4gXHRcdH1cbiBcdFx0d3gtXHUwMDNlcnNjX2NvdW50ID0gcnNjX2NvdW50O1xuIFx0XHR3eC1cdTAwM2Vyc2NfZmx1c2ggPSByc2NfZmx1c2g7XG4gXHR9XG4gXG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyB3eC1cdTAwM2VudW1fdHhfcXVldWVzOyBpKyspIHtcbi1cdFx0c3RydWN0IHd4X3JpbmcgKnR4X3JpbmcgPSB3eC1cdTAwM2V0eF9yaW5nW2ldO1xuK1x0XHRzdHJ1Y3Qgd3hfcmluZyAqdHhfcmluZyA9IHJjdV9kZXJlZmVyZW5jZSh3eC1cdTAwM2V0eF9yaW5nW2ldKTtcbitcbitcdFx0aWYgKCF0eF9yaW5nKVxuK1x0XHRcdGNvbnRpbnVlO1xuIFxuIFx0XHRyZXN0YXJ0X3F1ZXVlICs9IHR4X3JpbmctXHUwMDNldHhfc3RhdHMucmVzdGFydF9xdWV1ZTtcbiBcdFx0dHhfYnVzeSArPSB0eF9yaW5nLVx1MDAzZXR4X3N0YXRzLnR4X2J1c3k7XG4gXHR9XG4rXHRyY3VfcmVhZF91bmxvY2soKTtcbiBcdHd4LVx1MDAzZXJlc3RhcnRfcXVldWUgPSByZXN0YXJ0X3F1ZXVlO1xuIFx0d3gtXHUwMDNldHhfYnVzeSA9IHR4X2J1c3k7XG4gXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9saWIuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfbGliLmNcbmluZGV4IGVkNWFhZDc4NTdiZDkuLjlmOTBhYTkyZjg0MGIgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2xpYi5jXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2xpYi5jXG5AQCAtMTcxNCw3ICsxNzE0LDEyIEBAIG5ldGRldl90eF90IHd4X3htaXRfZnJhbWUoc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcbiBcdGlmIChyX2lkeCBcdTAwM2U9IHd4LVx1MDAzZW51bV90eF9xdWV1ZXMpXG4gXHRcdHJfaWR4ID0gcl9pZHggJSB3eC1cdTAwM2VudW1fdHhfcXVldWVzO1xuLVx0dHhfcmluZyA9IHd4LVx1MDAzZXR4X3Jpbmdbcl9pZHhdO1xuK1x0dHhfcmluZyA9IHJjdV9kZXJlZmVyZW5jZSh3eC1cdTAwM2V0eF9yaW5nW3JfaWR4XSk7XG4rXG4rXHRpZiAodW5saWtlbHkoIXR4X3JpbmcpKSB7XG4rXHRcdGRldl9rZnJlZV9za2JfYW55KHNrYik7XG4rXHRcdHJldHVybiBORVRERVZfVFhfT0s7XG4rXHR9XG4gXG4gXHRyZXR1cm4gd3hfeG1pdF9mcmFtZV9yaW5nKHNrYiwgdHhfcmluZyk7XG4gfVxuQEAgLTIwNTgsMjYgKzIwNjMsMjYgQEAgc3RhdGljIGJvb2wgd3hfY2FjaGVfcmluZ192bWRxKHN0cnVjdCB3eCAqd3gpXG4gXHRcdFx0LyogSWYgd2UgYXJlIGdyZWF0ZXIgdGhhbiBpbmRpY2VzIG1vdmUgdG8gbmV4dCBwb29sICovXG4gXHRcdFx0aWYgKChyZWdfaWR4IFx1MDAyNiB+dm1kcS1cdTAwM2VtYXNrKSBcdTAwM2U9IHJzcy1cdTAwM2VpbmRpY2VzKVxuIFx0XHRcdFx0cmVnX2lkeCA9IF9fQUxJR05fTUFTSyhyZWdfaWR4LCB+dm1kcS1cdTAwM2VtYXNrKTtcbi1cdFx0XHR3eC1cdTAwM2VyeF9yaW5nW2ldLVx1MDAzZXJlZ19pZHggPSByZWdfaWR4O1xuK1x0XHRcdHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQod3gtXHUwMDNlcnhfcmluZ1tpXSwgMSktXHUwMDNlcmVnX2lkeCA9IHJlZ19pZHg7XG4gXHRcdH1cbiBcdFx0cmVnX2lkeCA9IHZtZHEtXHUwMDNlb2Zmc2V0ICogX19BTElHTl9NQVNLKDEsIH52bWRxLVx1MDAzZW1hc2spO1xuIFx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyB3eC1cdTAwM2VudW1fdHhfcXVldWVzOyBpKyssIHJlZ19pZHgrKykge1xuIFx0XHRcdC8qIElmIHdlIGFyZSBncmVhdGVyIHRoYW4gaW5kaWNlcyBtb3ZlIHRvIG5leHQgcG9vbCAqL1xuIFx0XHRcdGlmICgocmVnX2lkeCBcdTAwMjYgcnNzLVx1MDAzZW1hc2spIFx1MDAzZT0gcnNzLVx1MDAzZWluZGljZXMpXG4gXHRcdFx0XHRyZWdfaWR4ID0gX19BTElHTl9NQVNLKHJlZ19pZHgsIH52bWRxLVx1MDAzZW1hc2spO1xuLVx0XHRcdHd4LVx1MDAzZXR4X3JpbmdbaV0tXHUwMDNlcmVnX2lkeCA9IHJlZ19pZHg7XG4rXHRcdFx0cmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZCh3eC1cdTAwM2V0eF9yaW5nW2ldLCAxKS1cdTAwM2VyZWdfaWR4ID0gcmVnX2lkeDtcbiBcdFx0fVxuIFx0fSBlbHNlIHtcbiBcdFx0Lyogc3RhcnQgYXQgVk1EcSByZWdpc3RlciBvZmZzZXQgZm9yIFNSLUlPViBlbmFibGVkIHNldHVwcyAqL1xuIFx0XHRyZWdfaWR4ID0gdm1kcS1cdTAwM2VvZmZzZXQ7XG4gXHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHd4LVx1MDAzZW51bV9yeF9xdWV1ZXM7IGkrKylcbiBcdFx0XHQvKiBJZiB3ZSBhcmUgZ3JlYXRlciB0aGFuIGluZGljZXMgbW92ZSB0byBuZXh0IHBvb2wgKi9cbi1cdFx0XHR3eC1cdTAwM2VyeF9yaW5nW2ldLVx1MDAzZXJlZ19pZHggPSByZWdfaWR4ICsgaTtcbitcdFx0XHRyY3VfZGVyZWZlcmVuY2VfcHJvdGVjdGVkKHd4LVx1MDAzZXJ4X3JpbmdbaV0sIDEpLVx1MDAzZXJlZ19pZHggPSByZWdfaWR4ICsgaTtcbiBcbiBcdFx0cmVnX2lkeCA9IHZtZHEtXHUwMDNlb2Zmc2V0O1xuIFx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyB3eC1cdTAwM2VudW1fdHhfcXVldWVzOyBpKyspXG4gXHRcdFx0LyogSWYgd2UgYXJlIGdyZWF0ZXIgdGhhbiBpbmRpY2VzIG1vdmUgdG8gbmV4dCBwb29sICovXG4tXHRcdFx0d3gtXHUwMDNldHhfcmluZ1tpXS1cdTAwM2VyZWdfaWR4ID0gcmVnX2lkeCArIGk7XG4rXHRcdFx0cmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZCh3eC1cdTAwM2V0eF9yaW5nW2ldLCAxKS1cdTAwM2VyZWdfaWR4ID0gcmVnX2lkeCArIGk7XG4gXHR9XG4gXG4gXHRyZXR1cm4gdHJ1ZTtcbkBAIC0yMDk4LDEwICsyMTAzLDEwIEBAIHN0YXRpYyB2b2lkIHd4X2NhY2hlX3JpbmdfcnNzKHN0cnVjdCB3eCAqd3gpXG4gXHRcdHJldHVybjtcbiBcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHd4LVx1MDAzZW51bV9yeF9xdWV1ZXM7IGkrKylcbi1cdFx0d3gtXHUwMDNlcnhfcmluZ1tpXS1cdTAwM2VyZWdfaWR4ID0gaTtcbitcdFx0cmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZCh3eC1cdTAwM2VyeF9yaW5nW2ldLCAxKS1cdTAwM2VyZWdfaWR4ID0gaTtcbiBcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHd4LVx1MDAzZW51bV90eF9xdWV1ZXM7IGkrKylcbi1cdFx0d3gtXHUwMDNldHhfcmluZ1tpXS1cdTAwM2VyZWdfaWR4ID0gaTtcbitcdFx0cmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZCh3eC1cdTAwM2V0eF9yaW5nW2ldLCAxKS1cdTAwM2VyZWdfaWR4ID0gaTtcbiB9XG4gXG4gc3RhdGljIHZvaWQgd3hfYWRkX3Jpbmcoc3RydWN0IHd4X3JpbmcgKnJpbmcsIHN0cnVjdCB3eF9yaW5nX2NvbnRhaW5lciAqaGVhZClcbkBAIC0yMTkxLDcgKzIxOTYsNyBAQCBzdGF0aWMgaW50IHd4X2FsbG9jX3FfdmVjdG9yKHN0cnVjdCB3eCAqd3gsXG4gXHRcdHJpbmctXHUwMDNlcXVldWVfaW5kZXggPSB0eHJfaWR4O1xuIFxuIFx0XHQvKiBhc3NpZ24gcmluZyB0byB3eCAqL1xuLVx0XHR3eC1cdTAwM2V0eF9yaW5nW3R4cl9pZHhdID0gcmluZztcbitcdFx0cmN1X2Fzc2lnbl9wb2ludGVyKHd4LVx1MDAzZXR4X3JpbmdbdHhyX2lkeF0sIHJpbmcpO1xuIFxuIFx0XHQvKiB1cGRhdGUgY291bnQgYW5kIGluZGV4ICovXG4gXHRcdHR4cl9jb3VudC0tO1xuQEAgLTIyMTcsNyArMjIyMiw3IEBAIHN0YXRpYyBpbnQgd3hfYWxsb2NfcV92ZWN0b3Ioc3RydWN0IHd4ICp3eCxcbiBcdFx0cmluZy1cdTAwM2VxdWV1ZV9pbmRleCA9IHJ4cl9pZHg7XG4gXG4gXHRcdC8qIGFzc2lnbiByaW5nIHRvIHd4ICovXG4tXHRcdHd4LVx1MDAzZXJ4X3JpbmdbcnhyX2lkeF0gPSByaW5nO1xuK1x0XHRyY3VfYXNzaWduX3BvaW50ZXIod3gtXHUwMDNlcnhfcmluZ1tyeHJfaWR4XSwgcmluZyk7XG4gXG4gXHRcdC8qIHVwZGF0ZSBjb3VudCBhbmQgaW5kZXggKi9cbiBcdFx0cnhyX2NvdW50LS07XG5AQCAtMjI0NSwxMCArMjI1MCwxMCBAQCBzdGF0aWMgdm9pZCB3eF9mcmVlX3FfdmVjdG9yKHN0cnVjdCB3eCAqd3gsIGludCB2X2lkeClcbiBcdHN0cnVjdCB3eF9yaW5nICpyaW5nO1xuIFxuIFx0d3hfZm9yX2VhY2hfcmluZyhyaW5nLCBxX3ZlY3Rvci1cdTAwM2V0eClcbi1cdFx0d3gtXHUwMDNldHhfcmluZ1tyaW5nLVx1MDAzZXF1ZXVlX2luZGV4XSA9IE5VTEw7XG4rXHRcdHJjdV9hc3NpZ25fcG9pbnRlcih3eC1cdTAwM2V0eF9yaW5nW3JpbmctXHUwMDNlcXVldWVfaW5kZXhdLCBOVUxMKTtcbiBcbiBcdHd4X2Zvcl9lYWNoX3JpbmcocmluZywgcV92ZWN0b3ItXHUwMDNlcngpXG4tXHRcdHd4LVx1MDAzZXJ4X3JpbmdbcmluZy1cdTAwM2VxdWV1ZV9pbmRleF0gPSBOVUxMO1xuK1x0XHRyY3VfYXNzaWduX3BvaW50ZXIod3gtXHUwMDNlcnhfcmluZ1tyaW5nLVx1MDAzZXF1ZXVlX2luZGV4XSwgTlVMTCk7XG4gXG4gXHR3eC1cdTAwM2VxX3ZlY3Rvclt2X2lkeF0gPSBOVUxMO1xuIFx0bmV0aWZfbmFwaV9kZWwoXHUwMDI2cV92ZWN0b3ItXHUwMDNlbmFwaSk7XG5AQCAtMjY1OSw3ICsyNjY0LDcgQEAgdm9pZCB3eF9jbGVhbl9hbGxfcnhfcmluZ3Moc3RydWN0IHd4ICp3eClcbiBcdGludCBpO1xuIFxuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2Mgd3gtXHUwMDNlbnVtX3J4X3F1ZXVlczsgaSsrKVxuLVx0XHR3eF9jbGVhbl9yeF9yaW5nKHd4LVx1MDAzZXJ4X3JpbmdbaV0pO1xuK1x0XHR3eF9jbGVhbl9yeF9yaW5nKHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQod3gtXHUwMDNlcnhfcmluZ1tpXSwgMSkpO1xuIH1cbiBFWFBPUlRfU1lNQk9MKHd4X2NsZWFuX2FsbF9yeF9yaW5ncyk7XG4gXG5AQCAtMjcwMSw3ICsyNzA2LDcgQEAgc3RhdGljIHZvaWQgd3hfZnJlZV9hbGxfcnhfcmVzb3VyY2VzKHN0cnVjdCB3eCAqd3gpXG4gXHRpbnQgaTtcbiBcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHd4LVx1MDAzZW51bV9yeF9xdWV1ZXM7IGkrKylcbi1cdFx0d3hfZnJlZV9yeF9yZXNvdXJjZXMod3gtXHUwMDNlcnhfcmluZ1tpXSk7XG4rXHRcdHd4X2ZyZWVfcnhfcmVzb3VyY2VzKHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQod3gtXHUwMDNlcnhfcmluZ1tpXSwgMSkpO1xuIH1cbiBcbiAvKipcbkBAIC0yNzc1LDcgKzI3ODAsNyBAQCB2b2lkIHd4X2NsZWFuX2FsbF90eF9yaW5ncyhzdHJ1Y3Qgd3ggKnd4KVxuIFx0aW50IGk7XG4gXG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyB3eC1cdTAwM2VudW1fdHhfcXVldWVzOyBpKyspXG4tXHRcdHd4X2NsZWFuX3R4X3Jpbmcod3gtXHUwMDNldHhfcmluZ1tpXSk7XG4rXHRcdHd4X2NsZWFuX3R4X3JpbmcocmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZCh3eC1cdTAwM2V0eF9yaW5nW2ldLCAxKSk7XG4gfVxuIEVYUE9SVF9TWU1CT0wod3hfY2xlYW5fYWxsX3R4X3JpbmdzKTtcbiBcbkBAIC0yODIzLDcgKzI4MjgsNyBAQCBzdGF0aWMgdm9pZCB3eF9mcmVlX2FsbF90eF9yZXNvdXJjZXMoc3RydWN0IHd4ICp3eClcbiBcdGludCBpO1xuIFxuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2Mgd3gtXHUwMDNlbnVtX3R4X3F1ZXVlczsgaSsrKVxuLVx0XHR3eF9mcmVlX3R4X3Jlc291cmNlcyh3eC1cdTAwM2V0eF9yaW5nW2ldKTtcbitcdFx0d3hfZnJlZV90eF9yZXNvdXJjZXMocmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZCh3eC1cdTAwM2V0eF9yaW5nW2ldLCAxKSk7XG4gfVxuIFxuIHZvaWQgd3hfZnJlZV9yZXNvdXJjZXMoc3RydWN0IHd4ICp3eClcbkBAIC0yOTMzLDcgKzI5MzgsNyBAQCBzdGF0aWMgaW50IHd4X3NldHVwX2FsbF9yeF9yZXNvdXJjZXMoc3RydWN0IHd4ICp3eClcbiBcdGludCBpLCBlcnIgPSAwO1xuIFxuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2Mgd3gtXHUwMDNlbnVtX3J4X3F1ZXVlczsgaSsrKSB7XG4tXHRcdGVyciA9IHd4X3NldHVwX3J4X3Jlc291cmNlcyh3eC1cdTAwM2VyeF9yaW5nW2ldKTtcbitcdFx0ZXJyID0gd3hfc2V0dXBfcnhfcmVzb3VyY2VzKHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQod3gtXHUwMDNlcnhfcmluZ1tpXSwgMSkpO1xuIFx0XHRpZiAoIWVycilcbiBcdFx0XHRjb250aW51ZTtcbiBcbkBAIC0yOTQ1LDcgKzI5NTAsNyBAQCBzdGF0aWMgaW50IHd4X3NldHVwX2FsbF9yeF9yZXNvdXJjZXMoc3RydWN0IHd4ICp3eClcbiBlcnJfc2V0dXBfcng6XG4gXHQvKiByZXdpbmQgdGhlIGluZGV4IGZyZWVpbmcgdGhlIHJpbmdzIGFzIHdlIGdvICovXG4gXHR3aGlsZSAoaS0tKVxuLVx0XHR3eF9mcmVlX3J4X3Jlc291cmNlcyh3eC1cdTAwM2VyeF9yaW5nW2ldKTtcbitcdFx0d3hfZnJlZV9yeF9yZXNvdXJjZXMocmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZCh3eC1cdTAwM2VyeF9yaW5nW2ldLCAxKSk7XG4gXHRyZXR1cm4gZXJyO1xuIH1cbiBcbkBAIC0zMDM2LDcgKzMwNDEsNyBAQCBzdGF0aWMgaW50IHd4X3NldHVwX2FsbF90eF9yZXNvdXJjZXMoc3RydWN0IHd4ICp3eClcbiBcdGludCBpLCBlcnIgPSAwO1xuIFxuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2Mgd3gtXHUwMDNlbnVtX3R4X3F1ZXVlczsgaSsrKSB7XG4tXHRcdGVyciA9IHd4X3NldHVwX3R4X3Jlc291cmNlcyh3eC1cdTAwM2V0eF9yaW5nW2ldKTtcbitcdFx0ZXJyID0gd3hfc2V0dXBfdHhfcmVzb3VyY2VzKHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQod3gtXHUwMDNldHhfcmluZ1tpXSwgMSkpO1xuIFx0XHRpZiAoIWVycilcbiBcdFx0XHRjb250aW51ZTtcbiBcbkBAIC0zMDQ4LDcgKzMwNTMsNyBAQCBzdGF0aWMgaW50IHd4X3NldHVwX2FsbF90eF9yZXNvdXJjZXMoc3RydWN0IHd4ICp3eClcbiBlcnJfc2V0dXBfdHg6XG4gXHQvKiByZXdpbmQgdGhlIGluZGV4IGZyZWVpbmcgdGhlIHJpbmdzIGFzIHdlIGdvICovXG4gXHR3aGlsZSAoaS0tKVxuLVx0XHR3eF9mcmVlX3R4X3Jlc291cmNlcyh3eC1cdTAwM2V0eF9yaW5nW2ldKTtcbitcdFx0d3hfZnJlZV90eF9yZXNvdXJjZXMocmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZCh3eC1cdTAwM2V0eF9yaW5nW2ldLCAxKSk7XG4gXHRyZXR1cm4gZXJyO1xuIH1cbiBcbkBAIC0zMDk3LDcgKzMxMDIsNyBAQCB2b2lkIHd4X2dldF9zdGF0czY0KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXG4gXG4gXHRyY3VfcmVhZF9sb2NrKCk7XG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyB3eC1cdTAwM2VudW1fcnhfcXVldWVzOyBpKyspIHtcbi1cdFx0c3RydWN0IHd4X3JpbmcgKnJpbmcgPSBSRUFEX09OQ0Uod3gtXHUwMDNlcnhfcmluZ1tpXSk7XG4rXHRcdHN0cnVjdCB3eF9yaW5nICpyaW5nID0gcmN1X2RlcmVmZXJlbmNlKHd4LVx1MDAzZXJ4X3JpbmdbaV0pO1xuIFx0XHR1NjQgYnl0ZXMsIHBhY2tldHM7XG4gXHRcdHVuc2lnbmVkIGludCBzdGFydDtcbiBcbkBAIC0zMTEzLDcgKzMxMTgsNyBAQCB2b2lkIHd4X2dldF9zdGF0czY0KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXG4gXHR9XG4gXG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyB3eC1cdTAwM2VudW1fdHhfcXVldWVzOyBpKyspIHtcbi1cdFx0c3RydWN0IHd4X3JpbmcgKnJpbmcgPSBSRUFEX09OQ0Uod3gtXHUwMDNldHhfcmluZ1tpXSk7XG4rXHRcdHN0cnVjdCB3eF9yaW5nICpyaW5nID0gcmN1X2RlcmVmZXJlbmNlKHd4LVx1MDAzZXR4X3JpbmdbaV0pO1xuIFx0XHR1NjQgYnl0ZXMsIHBhY2tldHM7XG4gXHRcdHVuc2lnbmVkIGludCBzdGFydDtcbiBcbkBAIC0zMzI0LDcgKzMzMjksNyBAQCBpbnQgd3hfc2V0X3Jpbmcoc3RydWN0IHd4ICp3eCwgdTMyIG5ld190eF9jb3VudCxcbiBcdCAqL1xuIFx0aWYgKG5ld190eF9jb3VudCAhPSB3eC1cdTAwM2V0eF9yaW5nX2NvdW50KSB7XG4gXHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHd4LVx1MDAzZW51bV90eF9xdWV1ZXM7IGkrKykge1xuLVx0XHRcdG1lbWNweShcdTAwMjZ0ZW1wX3JpbmdbaV0sIHd4LVx1MDAzZXR4X3JpbmdbaV0sXG4rXHRcdFx0bWVtY3B5KFx1MDAyNnRlbXBfcmluZ1tpXSwgcmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZCh3eC1cdTAwM2V0eF9yaW5nW2ldLCAxKSxcbiBcdFx0XHQgICAgICAgc2l6ZW9mKHN0cnVjdCB3eF9yaW5nKSk7XG4gXG4gXHRcdFx0dGVtcF9yaW5nW2ldLmNvdW50ID0gbmV3X3R4X2NvdW50O1xuQEAgLTMzNDAsOSArMzM0NSwxMSBAQCBpbnQgd3hfc2V0X3Jpbmcoc3RydWN0IHd4ICp3eCwgdTMyIG5ld190eF9jb3VudCxcbiBcdFx0fVxuIFxuIFx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyB3eC1cdTAwM2VudW1fdHhfcXVldWVzOyBpKyspIHtcbi1cdFx0XHR3eF9mcmVlX3R4X3Jlc291cmNlcyh3eC1cdTAwM2V0eF9yaW5nW2ldKTtcbitcdFx0XHRzdHJ1Y3Qgd3hfcmluZyAqdHhfcmluZyA9IHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQod3gtXHUwMDNldHhfcmluZ1tpXSwgMSk7XG4rXG4rXHRcdFx0d3hfZnJlZV90eF9yZXNvdXJjZXModHhfcmluZyk7XG4gXG4tXHRcdFx0bWVtY3B5KHd4LVx1MDAzZXR4X3JpbmdbaV0sIFx1MDAyNnRlbXBfcmluZ1tpXSxcbitcdFx0XHRtZW1jcHkodHhfcmluZywgXHUwMDI2dGVtcF9yaW5nW2ldLFxuIFx0XHRcdCAgICAgICBzaXplb2Yoc3RydWN0IHd4X3JpbmcpKTtcbiBcdFx0fVxuIFxuQEAgLTMzNTIsNyArMzM1OSw3IEBAIGludCB3eF9zZXRfcmluZyhzdHJ1Y3Qgd3ggKnd4LCB1MzIgbmV3X3R4X2NvdW50LFxuIFx0LyogUmVwZWF0IHRoZSBwcm9jZXNzIGZvciB0aGUgUnggcmluZ3MgaWYgbmVlZGVkICovXG4gXHRpZiAobmV3X3J4X2NvdW50ICE9IHd4LVx1MDAzZXJ4X3JpbmdfY291bnQpIHtcbiBcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2Mgd3gtXHUwMDNlbnVtX3J4X3F1ZXVlczsgaSsrKSB7XG4tXHRcdFx0bWVtY3B5KFx1MDAyNnRlbXBfcmluZ1tpXSwgd3gtXHUwMDNlcnhfcmluZ1tpXSxcbitcdFx0XHRtZW1jcHkoXHUwMDI2dGVtcF9yaW5nW2ldLCByY3VfZGVyZWZlcmVuY2VfcHJvdGVjdGVkKHd4LVx1MDAzZXJ4X3JpbmdbaV0sIDEpLFxuIFx0XHRcdCAgICAgICBzaXplb2Yoc3RydWN0IHd4X3JpbmcpKTtcbiBcbiBcdFx0XHR0ZW1wX3JpbmdbaV0uY291bnQgPSBuZXdfcnhfY291bnQ7XG5AQCAtMzM2OCw4ICszMzc1LDEwIEBAIGludCB3eF9zZXRfcmluZyhzdHJ1Y3Qgd3ggKnd4LCB1MzIgbmV3X3R4X2NvdW50LFxuIFx0XHR9XG4gXG4gXHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHd4LVx1MDAzZW51bV9yeF9xdWV1ZXM7IGkrKykge1xuLVx0XHRcdHd4X2ZyZWVfcnhfcmVzb3VyY2VzKHd4LVx1MDAzZXJ4X3JpbmdbaV0pO1xuLVx0XHRcdG1lbWNweSh3eC1cdTAwM2VyeF9yaW5nW2ldLCBcdTAwMjZ0ZW1wX3JpbmdbaV0sXG4rXHRcdFx0c3RydWN0IHd4X3JpbmcgKnJ4X3JpbmcgPSByY3VfZGVyZWZlcmVuY2VfcHJvdGVjdGVkKHd4LVx1MDAzZXJ4X3JpbmdbaV0sIDEpO1xuK1xuK1x0XHRcdHd4X2ZyZWVfcnhfcmVzb3VyY2VzKHJ4X3JpbmcpO1xuK1x0XHRcdG1lbWNweShyeF9yaW5nLCBcdTAwMjZ0ZW1wX3JpbmdbaV0sXG4gXHRcdFx0ICAgICAgIHNpemVvZihzdHJ1Y3Qgd3hfcmluZykpO1xuIFx0XHR9XG4gXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9wdHAuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfcHRwLmNcbmluZGV4IDQ3MDhlN2YzOTU4ZjcuLjY4ZGM2Mjk3N2FhYjIgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X3B0cC5jXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X3B0cC5jXG5AQCAtMjc0LDExICsyNzQsMTUgQEAgc3RhdGljIHZvaWQgd3hfcHRwX3J4X2hhbmcoc3RydWN0IHd4ICp3eClcbiBcbiBcdC8qIGRldGVybWluZSB0aGUgbW9zdCByZWNlbnQgd2F0Y2hkb2cgb3IgcnhfdGltZXN0YW1wIGV2ZW50ICovXG4gXHRyeF9ldmVudCA9IHd4LVx1MDAzZWxhc3RfcnhfcHRwX2NoZWNrO1xuK1x0cmN1X3JlYWRfbG9jaygpO1xuIFx0Zm9yIChuID0gMDsgbiBcdTAwM2Mgd3gtXHUwMDNlbnVtX3J4X3F1ZXVlczsgbisrKSB7XG4tXHRcdHJ4X3JpbmcgPSB3eC1cdTAwM2VyeF9yaW5nW25dO1xuK1x0XHRyeF9yaW5nID0gcmN1X2RlcmVmZXJlbmNlKHd4LVx1MDAzZXJ4X3Jpbmdbbl0pO1xuK1x0XHRpZiAoIXJ4X3JpbmcpXG4rXHRcdFx0Y29udGludWU7XG4gXHRcdGlmICh0aW1lX2FmdGVyKHJ4X3JpbmctXHUwMDNlbGFzdF9yeF90aW1lc3RhbXAsIHJ4X2V2ZW50KSlcbiBcdFx0XHRyeF9ldmVudCA9IHJ4X3JpbmctXHUwMDNlbGFzdF9yeF90aW1lc3RhbXA7XG4gXHR9XG4rXHRyY3VfcmVhZF91bmxvY2soKTtcbiBcbiBcdC8qIG9ubHkgbmVlZCB0byByZWFkIHRoZSBoaWdoIFJYU1RNUCByZWdpc3RlciB0byBjbGVhciB0aGUgbG9jayAqL1xuIFx0aWYgKHRpbWVfaXNfYmVmb3JlX2ppZmZpZXMocnhfZXZlbnQgKyA1ICogSFopKSB7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF90eXBlLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X3R5cGUuaFxuaW5kZXggOTQ1NGU5MDI1OGQ4ZS4uOTk1MmQwMjM0MjQwMSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfdHlwZS5oXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X3R5cGUuaFxuQEAgLTEzNTksOCArMTM1OSw4IEBAIHN0cnVjdCB3eCB7XG4gXHR1MzIgdHhfcmluZ19jb3VudDtcbiBcdHUzMiByeF9yaW5nX2NvdW50O1xuIFxuLVx0c3RydWN0IHd4X3JpbmcgKnR4X3JpbmdbNjRdIF9fX19jYWNoZWxpbmVfYWxpZ25lZF9pbl9zbXA7XG4tXHRzdHJ1Y3Qgd3hfcmluZyAqcnhfcmluZ1s2NF07XG4rXHRzdHJ1Y3Qgd3hfcmluZyBfX3JjdSAqdHhfcmluZ1s2NF0gX19fX2NhY2hlbGluZV9hbGlnbmVkX2luX3NtcDtcbitcdHN0cnVjdCB3eF9yaW5nIF9fcmN1ICpyeF9yaW5nWzY0XTtcbiBcdHN0cnVjdCB3eF9xX3ZlY3RvciAqcV92ZWN0b3JbNjRdO1xuIFx0aW50IG51bV9yeF9wb29scztcbiBcdGludCBudW1fcnhfcXVldWVzX3Blcl9wb29sO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfdmZfY29tbW9uLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X3ZmX2NvbW1vbi5jXG5pbmRleCAyNmRlNzhlOWE2OWVmLi5jODMwODI0YzQ4NjllIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF92Zl9jb21tb24uY1xuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF92Zl9jb21tb24uY1xuQEAgLTIwNSw3ICsyMDUsNyBAQCBzdGF0aWMgdm9pZCB3eF9jb25maWd1cmVfcnhfdmYoc3RydWN0IHd4ICp3eClcbiBcdCAqIHRoZSBCYXNlIGFuZCBMZW5ndGggb2YgdGhlIFJ4IERlc2NyaXB0b3IgUmluZ1xuIFx0ICovXG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyB3eC1cdTAwM2VudW1fcnhfcXVldWVzOyBpKyspIHtcbi1cdFx0c3RydWN0IHd4X3JpbmcgKnJ4X3JpbmcgPSB3eC1cdTAwM2VyeF9yaW5nW2ldO1xuK1x0XHRzdHJ1Y3Qgd3hfcmluZyAqcnhfcmluZyA9IHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQod3gtXHUwMDNlcnhfcmluZ1tpXSwgMSk7XG4gI2lmZGVmIEhBVkVfU1dJT1RMQl9TS0lQX0NQVV9TWU5DXG4gXHRcdHd4X3NldF9yeF9idWZmZXJfbGVuX3ZmKHd4LCByeF9yaW5nKTtcbiAjZW5kaWZcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X3ZmX2xpYi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF92Zl9saWIuY1xuaW5kZXggNzMyNWI0NzVlZTEwYy4uMGUwOWU2NmM2ZGU2ZCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfdmZfbGliLmNcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfdmZfbGliLmNcbkBAIC0xNzUsOCArMTc1LDExIEBAIHZvaWQgd3hfY29uZmlndXJlX3R4X3ZmKHN0cnVjdCB3eCAqd3gpXG4gXHR1MzIgaTtcbiBcbiBcdC8qIFNldHVwIHRoZSBIVyBUeCBIZWFkIGFuZCBUYWlsIGRlc2NyaXB0b3IgcG9pbnRlcnMgKi9cbi1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIHd4LVx1MDAzZW51bV90eF9xdWV1ZXM7IGkrKylcbi1cdFx0d3hfY29uZmlndXJlX3R4X3JpbmdfdmYod3gsIHd4LVx1MDAzZXR4X3JpbmdbaV0pO1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2Mgd3gtXHUwMDNlbnVtX3R4X3F1ZXVlczsgaSsrKSB7XG4rXHRcdHN0cnVjdCB3eF9yaW5nICp0eF9yaW5nID0gcmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZCh3eC1cdTAwM2V0eF9yaW5nW2ldLCAxKTtcbitcbitcdFx0d3hfY29uZmlndXJlX3R4X3JpbmdfdmYod3gsIHR4X3JpbmcpO1xuK1x0fVxuIH1cbiBcbiBzdGF0aWMgdm9pZCB3eF9jb25maWd1cmVfc3JyY3RsX3ZmKHN0cnVjdCB3eCAqd3gsIHN0cnVjdCB3eF9yaW5nICpyaW5nLFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX2V0aHRvb2wuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX2V0aHRvb2wuY1xuaW5kZXggMTk2MGY3MTU0MTUxZC4uOWU5MDcwMmE1MTQ2YSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX2V0aHRvb2wuY1xuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfZXRodG9vbC5jXG5AQCAtMzcsOSArMzcsOSBAQCBzdGF0aWMgaW50IG5nYmVfc2V0X3JpbmdwYXJhbShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxuIFxuIFx0aWYgKCFuZXRpZl9ydW5uaW5nKHd4LVx1MDAzZW5ldGRldikpIHtcbiBcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2Mgd3gtXHUwMDNlbnVtX3R4X3F1ZXVlczsgaSsrKVxuLVx0XHRcdHd4LVx1MDAzZXR4X3JpbmdbaV0tXHUwMDNlY291bnQgPSBuZXdfdHhfY291bnQ7XG4rXHRcdFx0cmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZCh3eC1cdTAwM2V0eF9yaW5nW2ldLCAxKS1cdTAwM2Vjb3VudCA9IG5ld190eF9jb3VudDtcbiBcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2Mgd3gtXHUwMDNlbnVtX3J4X3F1ZXVlczsgaSsrKVxuLVx0XHRcdHd4LVx1MDAzZXJ4X3JpbmdbaV0tXHUwMDNlY291bnQgPSBuZXdfcnhfY291bnQ7XG4rXHRcdFx0cmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZCh3eC1cdTAwM2VyeF9yaW5nW2ldLCAxKS1cdTAwM2Vjb3VudCA9IG5ld19yeF9jb3VudDtcbiBcdFx0d3gtXHUwMDNldHhfcmluZ19jb3VudCA9IG5ld190eF9jb3VudDtcbiBcdFx0d3gtXHUwMDNlcnhfcmluZ19jb3VudCA9IG5ld19yeF9jb3VudDtcbiBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9tYWluLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9tYWluLmNcbmluZGV4IDg1NWRjOTYzYzYxMGMuLmU0NWQ3ZGZkYzlmOTAgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9tYWluLmNcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX21haW4uY1xuQEAgLTQwNiw3ICs0MDYsNyBAQCBzdGF0aWMgdm9pZCBuZ2JlX2Rpc2FibGVfZGV2aWNlKHN0cnVjdCB3eCAqd3gpXG4gXHQvKiBkaXNhYmxlIGFsbCBlbmFibGVkIHJ4IHF1ZXVlcyAqL1xuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2Mgd3gtXHUwMDNlbnVtX3J4X3F1ZXVlczsgaSsrKVxuIFx0XHQvKiB0aGlzIGNhbGwgYWxzbyBmbHVzaGVzIHRoZSBwcmV2aW91cyB3cml0ZSAqL1xuLVx0XHR3eF9kaXNhYmxlX3J4X3F1ZXVlKHd4LCB3eC1cdTAwM2VyeF9yaW5nW2ldKTtcbitcdFx0d3hfZGlzYWJsZV9yeF9xdWV1ZSh3eCwgcmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZCh3eC1cdTAwM2VyeF9yaW5nW2ldLCAxKSk7XG4gXHQvKiBkaXNhYmxlIHJlY2VpdmVzICovXG4gXHR3eF9kaXNhYmxlX3J4KHd4KTtcbiBcdHd4X25hcGlfZGlzYWJsZV9hbGwod3gpO1xuQEAgLTQyMiw3ICs0MjIsNyBAQCBzdGF0aWMgdm9pZCBuZ2JlX2Rpc2FibGVfZGV2aWNlKHN0cnVjdCB3eCAqd3gpXG4gXHR3eF9pcnFfZGlzYWJsZSh3eCk7XG4gXHQvKiBkaXNhYmxlIHRyYW5zbWl0cyBpbiB0aGUgaGFyZHdhcmUgbm93IHRoYXQgaW50ZXJydXB0cyBhcmUgb2ZmICovXG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyB3eC1cdTAwM2VudW1fdHhfcXVldWVzOyBpKyspIHtcbi1cdFx0dTggcmVnX2lkeCA9IHd4LVx1MDAzZXR4X3JpbmdbaV0tXHUwMDNlcmVnX2lkeDtcbitcdFx0dTggcmVnX2lkeCA9IHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQod3gtXHUwMDNldHhfcmluZ1tpXSwgMSktXHUwMDNlcmVnX2lkeDtcbiBcbiBcdFx0d3IzMih3eCwgV1hfUFhfVFJfQ0ZHKHJlZ19pZHgpLCBXWF9QWF9UUl9DRkdfU1dGTFNIKTtcbiBcdH1cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX2V0aHRvb2wuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfZXRodG9vbC5jXG5pbmRleCAzZTMyYWNhNzI4MDY1Li5mY2ZhZjZmMmY1NDRhIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9ldGh0b29sLmNcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfZXRodG9vbC5jXG5AQCAtNjEsOSArNjEsOSBAQCBzdGF0aWMgaW50IHR4Z2JlX3NldF9yaW5ncGFyYW0oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcbiBcbiBcdGlmICghbmV0aWZfcnVubmluZyh3eC1cdTAwM2VuZXRkZXYpKSB7XG4gXHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHd4LVx1MDAzZW51bV90eF9xdWV1ZXM7IGkrKylcbi1cdFx0XHR3eC1cdTAwM2V0eF9yaW5nW2ldLVx1MDAzZWNvdW50ID0gbmV3X3R4X2NvdW50O1xuK1x0XHRcdHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQod3gtXHUwMDNldHhfcmluZ1tpXSwgMSktXHUwMDNlY291bnQgPSBuZXdfdHhfY291bnQ7XG4gXHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHd4LVx1MDAzZW51bV9yeF9xdWV1ZXM7IGkrKylcbi1cdFx0XHR3eC1cdTAwM2VyeF9yaW5nW2ldLVx1MDAzZWNvdW50ID0gbmV3X3J4X2NvdW50O1xuK1x0XHRcdHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQod3gtXHUwMDNlcnhfcmluZ1tpXSwgMSktXHUwMDNlY291bnQgPSBuZXdfcnhfY291bnQ7XG4gXHRcdHd4LVx1MDAzZXR4X3JpbmdfY291bnQgPSBuZXdfdHhfY291bnQ7XG4gXHRcdHd4LVx1MDAzZXJ4X3JpbmdfY291bnQgPSBuZXdfcnhfY291bnQ7XG4gXG5AQCAtMzY2LDcgKzM2Niw3IEBAIHN0YXRpYyBpbnQgdHhnYmVfYWRkX2V0aHRvb2xfZmRpcl9lbnRyeShzdHJ1Y3QgdHhnYmUgKnR4Z2JlLFxuIFxuIFx0XHQvKiBNYXAgdGhlIHJpbmcgb250byB0aGUgYWJzb2x1dGUgcXVldWUgaW5kZXggKi9cbiBcdFx0aWYgKCF2Zilcbi1cdFx0XHRxdWV1ZSA9IHd4LVx1MDAzZXJ4X3JpbmdbcmluZ10tXHUwMDNlcmVnX2lkeDtcbitcdFx0XHRxdWV1ZSA9IHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQod3gtXHUwMDNlcnhfcmluZ1tyaW5nXSwgMSktXHUwMDNlcmVnX2lkeDtcbiBcdFx0ZWxzZVxuIFx0XHRcdHF1ZXVlID0gKCh2ZiAtIDEpICogd3gtXHUwMDNlbnVtX3J4X3F1ZXVlc19wZXJfcG9vbCkgKyByaW5nO1xuIFx0fVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfZmRpci5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9mZGlyLmNcbmluZGV4IGE4NDAxMDgyODU1MTcuLjYwYzhlYTQ3NzgyN2QgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX2ZkaXIuY1xuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9mZGlyLmNcbkBAIC01OTksNyArNTk5LDcgQEAgc3RhdGljIHZvaWQgdHhnYmVfZmRpcl9maWx0ZXJfcmVzdG9yZShzdHJ1Y3Qgd3ggKnd4KVxuIFx0XHRcdH1cbiBcbiBcdFx0XHQvKiBNYXAgdGhlIHJpbmcgb250byB0aGUgYWJzb2x1dGUgcXVldWUgaW5kZXggKi9cbi1cdFx0XHRxdWV1ZSA9IHd4LVx1MDAzZXJ4X3JpbmdbcmluZ10tXHUwMDNlcmVnX2lkeDtcbitcdFx0XHRxdWV1ZSA9IHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQod3gtXHUwMDNlcnhfcmluZ1tyaW5nXSwgMSktXHUwMDNlcmVnX2lkeDtcbiBcdFx0fVxuIFxuIFx0XHRyZXQgPSB0eGdiZV9mZGlyX3dyaXRlX3BlcmZlY3RfZmlsdGVyKHd4LFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfbWFpbi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9tYWluLmNcbmluZGV4IGViOTFjNGYyOGVjZDQuLjUzNjEzNjBmN2M2ZWUgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX21haW4uY1xuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9tYWluLmNcbkBAIC0yMzksNyArMjM5LDcgQEAgc3RhdGljIHZvaWQgdHhnYmVfZGlzYWJsZV9kZXZpY2Uoc3RydWN0IHd4ICp3eClcbiBcdC8qIGRpc2FibGUgYWxsIGVuYWJsZWQgcnggcXVldWVzICovXG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyB3eC1cdTAwM2VudW1fcnhfcXVldWVzOyBpKyspXG4gXHRcdC8qIHRoaXMgY2FsbCBhbHNvIGZsdXNoZXMgdGhlIHByZXZpb3VzIHdyaXRlICovXG4tXHRcdHd4X2Rpc2FibGVfcnhfcXVldWUod3gsIHd4LVx1MDAzZXJ4X3JpbmdbaV0pO1xuK1x0XHR3eF9kaXNhYmxlX3J4X3F1ZXVlKHd4LCByY3VfZGVyZWZlcmVuY2VfcHJvdGVjdGVkKHd4LVx1MDAzZXJ4X3JpbmdbaV0sIDEpKTtcbiBcbiBcdG5ldGlmX3R4X3N0b3BfYWxsX3F1ZXVlcyhuZXRkZXYpO1xuIFx0bmV0aWZfdHhfZGlzYWJsZShuZXRkZXYpO1xuQEAgLTI3NSw3ICsyNzUsNyBAQCBzdGF0aWMgdm9pZCB0eGdiZV9kaXNhYmxlX2RldmljZShzdHJ1Y3Qgd3ggKnd4KVxuIFxuIFx0LyogZGlzYWJsZSB0cmFuc21pdHMgaW4gdGhlIGhhcmR3YXJlIG5vdyB0aGF0IGludGVycnVwdHMgYXJlIG9mZiAqL1xuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2Mgd3gtXHUwMDNlbnVtX3R4X3F1ZXVlczsgaSsrKSB7XG4tXHRcdHU4IHJlZ19pZHggPSB3eC1cdTAwM2V0eF9yaW5nW2ldLVx1MDAzZXJlZ19pZHg7XG4rXHRcdHU4IHJlZ19pZHggPSByY3VfZGVyZWZlcmVuY2VfcHJvdGVjdGVkKHd4LVx1MDAzZXR4X3JpbmdbaV0sIDEpLVx1MDAzZXJlZ19pZHg7XG4gXG4gXHRcdHdyMzIod3gsIFdYX1BYX1RSX0NGRyhyZWdfaWR4KSwgV1hfUFhfVFJfQ0ZHX1NXRkxTSCk7XG4gXHR9XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxMTowNTo0My4zNzA0MjUwNDlaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozMDEwMjg0ODE2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIFBhdGNoIGZvciBTeXprYWxsZXIgRnV6emluZyoqXG5cbk9rYXksIHRoZSB1c2VyJ3MgZ2l2ZW4gbWUgYSBwYXRjaCwgYW5kIG15IGZpcnN0IHRob3VnaHQgaXMsIFwiUmlnaHQsIHRpbWUgdG8gc2VlIHdoYXQgdGhpcyB0aGluZydzIHRvdWNoaW5nLlwiIExldCdzIHN0YXJ0IHdpdGggYSBmaWxlIGxpc3Rpbmcg4oCTIHRoZSBjaGFuZ2VzIGFyZSBjb25jZW50cmF0ZWQgd2l0aGluIHRoZSBgd2FuZ3h1bmAgZXRoZXJuZXQgZHJpdmVyIHN1YnN5c3RlbS4gVGhlIGZpbGVzIGhpdCBzdWdnZXN0IG1vZGlmaWNhdGlvbnMgYWNyb3NzIHNldmVyYWwgYXJlYXM6IGVycm9yIGhhbmRsaW5nLCBldGh0b29sIGludGVncmF0aW9uLCBoYXJkd2FyZSBhY2Nlc3MsIGFuZCB2YXJpb3VzIGxpYnJhcnkgZnVuY3Rpb25zIHdpdGhpbiB0aGUgYGxpYnd4YCBkaXJlY3RvcnksIGFsb25nIHdpdGggYG5nYmVgIGFuZCBgdHhnYmVgIHdoaWNoIHNlZW0gbGlrZSBzcGVjaWZpYyBkcml2ZXIgaW1wbGVtZW50YXRpb25zLlxuXG5Ob3csIEkgbmVlZCB0byBnZXQgYSBiZXR0ZXIgaGFuZGxlIG9uIHdoYXQgYHdhbmd4dW5gIGFjdHVhbGx5ICppcyouIFRoaXMgbG9va3MgbGlrZSBzb21lIHNvcnQgb2YgRXRoZXJuZXQgY29udHJvbGxlciBvciBOSUMuIEknbSBndWVzc2luZyBpdCdzIGxpa2VseSBHYkUgb3IgMTBHYkUgUENJIG5ldHdvcmsgaW50ZXJmYWNlIGNhcmRzIGJhc2VkIG9uIHRoZSBkcml2ZXIgbmFtZXMsIGJ1dCBJIG5lZWQgY29uZmlybWF0aW9uLiBMZXQncyBzZWUgaWYgSSBjYW4gZmluZCBtb3JlIGNvbnRleHQgd2l0aGluIHRoZSBLY29uZmlnIGZpbGVzLCBvciBwZXJoYXBzIGEgcXVpY2sgc2VhcmNoIHRocm91Z2ggdGhlIHNvdXJjZSBjb2RlIGl0c2VsZiwgdG8gdW5kZXJzdGFuZCB0aGUgaGFyZHdhcmUuIFRoaXMgd2lsbCBnaXZlIG1lIGEgYmV0dGVyIGdyYXNwIG9mIHRoZSBwb3RlbnRpYWwgYXR0YWNrIHN1cmZhY2UgYW5kIHdoZXRoZXIgaXQncyB3b3J0aCBhbGxvY2F0aW5nIHRoZSByZXNvdXJjZXMgdG8gZnV6ei5cblxuXG4iLCJJbnB1dFRva2VucyI6MTMxNDAsIk91dHB1dFRva2VucyI6NDMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNzAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxMTowNTo0Ni4zODA3MTIwNDVaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDY2Mjg2MDYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIChOR0JFfFRYR0JFfExJQldYKVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vS2NvbmZpZz0xNz1pZiBORVRfVkVORE9SX1dBTkdYVU5cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL0tjb25maWctMTgtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9LY29uZmlnOjE5OmNvbmZpZyBMSUJXWFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vS2NvbmZpZy0yMC1cXHR0cmlzdGF0ZVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9LY29uZmlnLTI3LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vS2NvbmZpZzoyODpjb25maWcgTkdCRVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vS2NvbmZpZy0yOS1cXHR0cmlzdGF0ZSBcXFwiV2FuZ3h1bihSKSBHYkUgUENJIEV4cHJlc3MgYWRhcHRlcnMgc3VwcG9ydFxcXCJcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vS2NvbmZpZy00Mi1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL0tjb25maWc6NDM6Y29uZmlnIFRYR0JFXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9LY29uZmlnLTQ0LVxcdHRyaXN0YXRlIFxcXCJXYW5neHVuKFIpIDEwLzI1LzQwR2JFIFBDSSBFeHByZXNzIGFkYXB0ZXJzIHN1cHBvcnRcXFwiXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL0tjb25maWctNjYtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9LY29uZmlnOjY3OmNvbmZpZyBUWEdCRVZGXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9LY29uZmlnLTY4LVxcdHRyaXN0YXRlIFxcXCJXYW5neHVuKFIpIDEwLzI1LzQwRyBWaXJ0dWFsIEZ1bmN0aW9uIEV0aGVybmV0IHN1cHBvcnRcXFwiXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL0tjb25maWctODQtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9LY29uZmlnOjg1OmNvbmZpZyBOR0JFVkZcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL0tjb25maWctODYtXFx0dHJpc3RhdGUgXFxcIldhbmd4dW4oUikgR2JFIFZpcnR1YWwgRnVuY3Rpb24gRXRoZXJuZXQgc3VwcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTE6MDU6NDYuNDI3MzQ2MzMxWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzIxMDIxNjQ3OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBXYW5neHVuIE5JQyBEcml2ZXIgU2l0dWF0aW9uKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBTZWN0aW9uIDIgb2YgdGhlIGluc3RydWN0aW9ucyBoaWdobGlnaHRzIFwiU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlLlwiIFNwZWNpZmljYWxseSwgaXQgbWVudGlvbnMgdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgYW5kIEdQVSBkcml2ZXJzIGxpa2UgYG1seHN3YCwgYHBkc19jb3JlYCwgYHFlZGAsIGBpb25pY2AsIGFuZCBgYW1kZ3B1YC4gVGhlc2UgYWxsIHJlcXVpcmUgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzLCB3aGljaCBhcmUgKm5vdCogZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4gTXkgaW5pdGlhbCByZWFkIG9mIHRoaXMgc3VnZ2VzdHMgV2FuZ3h1biBOSUNzIGZhbGwgaW50byB0aGlzIGNhdGVnb3J5LCBidXQgbGV0J3MgYmUgc3VyZS5cblxuV2FuZ3h1biAoc3BlY2lmaWNhbGx5IHRoZSBkcml2ZXJzIGBsaWJ3eGAsIGBuZ2JlYCwgYHR4Z2JlYCwgYG5nYmV2ZmAsIGFuZCBgdHhnYmV2ZmApIGFyZSBjbGVhcmx5IGV0aGVybmV0IGRyaXZlcnMgZGVzaWduZWQgZm9yIFdhbmd4dW4gR2JFIC8gMTBHYkUgLyAyNUdiRSAvIDQwR2JFIGFkYXB0ZXJzLiBNeSB1bmRlcnN0YW5kaW5nIGlzIHRoYXQgdGhlc2UgYXJlICpwaHlzaWNhbCogUENJIE5JQ3MuIEkga25vdyB0aGF0IHN0YW5kYXJkIFFFTVUgbmV0d29yayBjYXJkIGVtdWxhdGlvbnMgaW5jbHVkZSBgZTEwMDBgLCBgZTEwMDBlYCwgYHJ0bDgxMzlgLCBgdmlydGlvLW5ldGAsIGBwY25ldGAsIGBuZTJrX3BjaWAsIGB2bXhuZXQzYCwgYW5kIGBpZ2JgLiBTbywgV2FuZ3h1biBpcyAqZGVmaW5pdGVseSogbm90IG9uZSBvZiB0aG9zZSBlbXVsYXRlZCBvcHRpb25zLiBHQ0UgaXNuJ3QgcmVsZXZhbnQgaGVyZS5cblxuTm93LCBqdXN0IHRvIGJlIGFic29sdXRlbHkgdGhvcm91Z2gsIEkgd2FudCB0byBydWxlIG91dCB0aGUgcG9zc2liaWxpdHkgb2YgYW55IHZpcnR1YWwgb3Igc29mdHdhcmUtZW11bGF0ZWQgY29tcG9uZW50cyB3aXRoaW4gdGhlIFdhbmd4dW4gYXJjaGl0ZWN0dXJlLCBvciBhbnkgY29yZSBzdWJzeXN0ZW0gc3VwcG9ydC4gVGhlIGBkcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL0tjb25maWdgIGZpbGUgaW4gdGhlIGtlcm5lbCBzb3VyY2UgaXMgd2hlcmUgSSdsbCBmaW5kIHRoYXQuIEknbSBnb2luZyB0byBwdWxsIHRoYXQgdXAgYW5kIHNlZSBpZiB0aGVyZSBhcmUgYW55IGhpbnRzIG9mIGEgbW9yZSBhYnN0cmFjdCBsYXllciBvciBkZXBlbmRlbmNpZXMuIEkgbmVlZCB0byBiZSBjZXJ0YWluIHRoZXJlJ3Mgbm8gdmlydHVhbCBjb21wb25lbnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0MjIyLCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjY2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDExOjA1OjQ5LjYzNzU2NTg4MVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc2MTAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiAxMDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4gICAyOlxcdCNcXG4gICAzOlxcdCMgV2FuZ3h1biBuZXR3b3JrIGRldmljZSBjb25maWd1cmF0aW9uXFxuICAgNDpcXHQjXFxuICAgNTpcXHRcXG4gICA2OlxcdGNvbmZpZyBORVRfVkVORE9SX1dBTkdYVU5cXG4gICA3OlxcdFxcdGJvb2wgXFxcIldhbmd4dW4gZGV2aWNlc1xcXCJcXG4gICA4OlxcdFxcdGRlZmF1bHQgeVxcbiAgIDk6XFx0XFx0aGVscFxcbiAgMTA6XFx0XFx0ICBJZiB5b3UgaGF2ZSBhIG5ldHdvcmsgKEV0aGVybmV0KSBjYXJkIGZyb20gV2FuZ3h1bihSKSwgc2F5IFkuXFxuICAxMTpcXHRcXG4gIDEyOlxcdFxcdCAgTm90ZSB0aGF0IHRoZSBhbnN3ZXIgdG8gdGhpcyBxdWVzdGlvbiBkb2Vzbid0IGRpcmVjdGx5IGFmZmVjdCB0aGVcXG4gIDEzOlxcdFxcdCAga2VybmVsOiBzYXlpbmcgTiB3aWxsIGp1c3QgY2F1c2UgdGhlIGNvbmZpZ3VyYXRvciB0byBza2lwIGFsbFxcbiAgMTQ6XFx0XFx0ICB0aGUgcXVlc3Rpb25zIGFib3V0IFdhbmd4dW4oUikgY2FyZHMuIElmIHlvdSBzYXkgWSwgeW91IHdpbGxcXG4gIDE1OlxcdFxcdCAgYmUgYXNrZWQgZm9yIHlvdXIgc3BlY2lmaWMgY2FyZCBpbiB0aGUgZm9sbG93aW5nIHF1ZXN0aW9ucy5cXG4gIDE2OlxcdFxcbiAgMTc6XFx0aWYgTkVUX1ZFTkRPUl9XQU5HWFVOXFxuICAxODpcXHRcXG4gIDE5OlxcdGNvbmZpZyBMSUJXWFxcbiAgMjA6XFx0XFx0dHJpc3RhdGVcXG4gIDIxOlxcdFxcdGRlcGVuZHMgb24gUFRQXzE1ODhfQ0xPQ0tfT1BUSU9OQUxcXG4gIDIyOlxcdFxcdHNlbGVjdCBQQUdFX1BPT0xcXG4gIDIzOlxcdFxcdHNlbGVjdCBESU1MSUJcXG4gIDI0OlxcdFxcdHNlbGVjdCBQSFlMSU5LXFxuICAyNTpcXHRcXHRoZWxwXFxuICAyNjpcXHRcXHRDb21tb24gbGlicmFyeSBmb3IgV2FuZ3h1bihSKSBFdGhlcm5ldCBkcml2ZXJzLlxcbiAgMjc6XFx0XFxuICAyODpcXHRjb25maWcgTkdCRVxcbiAgMjk6XFx0XFx0dHJpc3RhdGUgXFxcIldhbmd4dW4oUikgR2JFIFBDSSBFeHByZXNzIGFkYXB0ZXJzIHN1cHBvcnRcXFwiXFxuICAzMDpcXHRcXHRkZXBlbmRzIG9uIFBDSVxcbiAgMzE6XFx0XFx0ZGVwZW5kcyBvbiBQVFBfMTU4OF9DTE9DS19PUFRJT05BTFxcbiAgMzI6XFx0XFx0c2VsZWN0IExJQldYXFxuICAzMzpcXHRcXHRoZWxwXFxuICAzNDpcXHRcXHQgIFRoaXMgZHJpdmVyIHN1cHBvcnRzIFdhbmd4dW4oUikgR2JFIFBDSSBFeHByZXNzIGZhbWlseSBvZlxcbiAgMzU6XFx0XFx0ICBhZGFwdGVycy5cXG4gIDM2OlxcdFxcbiAgMzc6XFx0XFx0ICBNb3JlIHNwZWNpZmljIGluZm9ybWF0aW9uIG9uIGNvbmZpZ3VyaW5nIHRoZSBkcml2ZXIgaXMgaW5cXG4gIDM4OlxcdFxcdCAgXFx1MDAzY2ZpbGU6RG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2RldmljZV9kcml2ZXJzL2V0aGVybmV0L3dhbmd4dW4vbmdiZS5yc3RcXHUwMDNlLlxcbiAgMzk6XFx0XFxuICA0MDpcXHRcXHQgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmUuIFRoZSBtb2R1bGVcXG4gIDQxOlxcdFxcdCAgd2lsbCBiZSBjYWxsZWQgbmdiZS5cXG4gIDQyOlxcdFxcbiAgNDM6XFx0Y29uZmlnIFRYR0JFXFxuICA0NDpcXHRcXHR0cmlzdGF0ZSBcXFwiV2FuZ3h1bihSKSAxMC8yNS80MEdiRSBQQ0kgRXhwcmVzcyBhZGFwdGVycyBzdXBwb3J0XFxcIlxcbiAgNDU6XFx0XFx0ZGVwZW5kcyBvbiBQQ0lcXG4gIDQ2OlxcdFxcdGRlcGVuZHMgb24gQ09NTU9OX0NMS1xcbiAgNDc6XFx0XFx0ZGVwZW5kcyBvbiBJMkNfREVTSUdOV0FSRV9QTEFURk9STVxcbiAgNDg6XFx0XFx0ZGVwZW5kcyBvbiBQVFBfMTU4OF9DTE9DS19PUFRJT05BTFxcbiAgNDk6XFx0XFx0c2VsZWN0IE1BUlZFTExfMTBHX1BIWVxcbiAgNTA6XFx0XFx0c2VsZWN0IFJFR01BUFxcbiAgNTE6XFx0XFx0c2VsZWN0IEhXTU9OIGlmIFRYR0JFPXlcXG4gIDUyOlxcdFxcdHNlbGVjdCBTRlBcXG4gIDUzOlxcdFxcdHNlbGVjdCBHUElPTElCXFxuICA1NDpcXHRcXHRzZWxlY3QgR1BJT0xJQl9JUlFDSElQXFxuICA1NTpcXHRcXHRzZWxlY3QgUENTX1hQQ1NcXG4gIDU2OlxcdFxcdHNlbGVjdCBMSUJXWFxcbiAgNTc6XFx0XFx0aGVscFxcbiAgNTg6XFx0XFx0ICBUaGlzIGRyaXZlciBzdXBwb3J0cyBXYW5neHVuKFIpIDEwLzI1LzQwR2JFIFBDSSBFeHByZXNzIGZhbWlseSBvZlxcbiAgNTk6XFx0XFx0ICBhZGFwdGVycy5cXG4gIDYwOlxcdFxcbiAgNjE6XFx0XFx0ICBNb3JlIHNwZWNpZmljIGluZm9ybWF0aW9uIG9uIGNvbmZpZ3VyaW5nIHRoZSBkcml2ZXIgaXMgaW5cXG4gIDYyOlxcdFxcdCAgXFx1MDAzY2ZpbGU6RG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2RldmljZV9kcml2ZXJzL2V0aGVybmV0L3dhbmd4dW4vdHhnYmUucnN0XFx1MDAzZS5cXG4gIDYzOlxcdFxcbiAgNjQ6XFx0XFx0ICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlLiBUaGUgbW9kdWxlXFxuICA2NTpcXHRcXHQgIHdpbGwgYmUgY2FsbGVkIHR4Z2JlLlxcbiAgNjY6XFx0XFxuICA2NzpcXHRjb25maWcgVFhHQkVWRlxcbiAgNjg6XFx0XFx0dHJpc3RhdGUgXFxcIldhbmd4dW4oUikgMTAvMjUvNDBHIFZpcnR1YWwgRnVuY3Rpb24gRXRoZXJuZXQgc3VwcG9ydFxcXCJcXG4gIDY5OlxcdFxcdGRlcGVuZHMgb24gUENJXFxuICA3MDpcXHRcXHRkZXBlbmRzIG9uIFBDSV9NU0lcXG4gIDcxOlxcdFxcdGRlcGVuZHMgb24gUFRQXzE1ODhfQ0xPQ0tfT1BUSU9OQUxcXG4gIDcyOlxcdFxcdHNlbGVjdCBMSUJXWFxcbiAgNzM6XFx0XFx0aGVscFxcbiAgNzQ6XFx0XFx0ICBUaGlzIGRyaXZlciBzdXBwb3J0cyB2aXJ0dWFsIGZ1bmN0aW9ucyBmb3IgU1AxMDAwQSwgV1gxODIwQUwsXFxuICA3NTpcXHRcXHQgIFdYNVhYWCwgV1g1WFhYQUwuXFxuICA3NjpcXHRcXG4gIDc3OlxcdFxcdCAgVGhpcyBkcml2ZXIgd2FzIGZvcm1lcmx5IG5hbWVkIHR4Z2JldmYuXFxuICA3ODpcXHRcXG4gIDc5OlxcdFxcdCAgTW9yZSBzcGVjaWZpYyBpbmZvcm1hdGlvbiBvbiBjb25maWd1cmluZyB0aGUgZHJpdmVyIGlzIGluXFxuICA4MDpcXHRcXHQgIFxcdTAwM2NmaWxlOkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9kZXZpY2VfZHJpdmVycy9ldGhlcm5ldC93YW5neHVuL3R4Z2JldmYucnN0XFx1MDAzZS5cXG4gIDgxOlxcdFxcbiAgODI6XFx0XFx0ICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlLiBNU0ktWCBpbnRlcnJ1cHRcXG4gIDgzOlxcdFxcdCAgc3VwcG9ydCBpcyByZXF1aXJlZCBmb3IgdGhpcyBkcml2ZXIgdG8gd29yayBjb3JyZWN0bHkuXFxuICA4NDpcXHRcXG4gIDg1OlxcdGNvbmZpZyBOR0JFVkZcXG4gIDg2OlxcdFxcdHRyaXN0YXRlIFxcXCJXYW5neHVuKFIpIEdiRSBWaXJ0dWFsIEZ1bmN0aW9uIEV0aGVybmV0IHN1cHBvcnRcXFwiXFxuICA4NzpcXHRcXHRkZXBlbmRzIG9uIFBDSV9NU0lcXG4gIDg4OlxcdFxcdGRlcGVuZHMgb24gUFRQXzE1ODhfQ0xPQ0tfT1BUSU9OQUxcXG4gIDg5OlxcdFxcdHNlbGVjdCBMSUJXWFxcbiAgOTA6XFx0XFx0aGVscFxcbiAgOTE6XFx0XFx0ICBUaGlzIGRyaXZlciBzdXBwb3J0cyB2aXJ0dWFsIGZ1bmN0aW9ucyBmb3IgV1gxODYwLCBXWDE4NjBBTC5cXG4gIDkyOlxcdFxcbiAgOTM6XFx0XFx0ICBUaGlzIGRyaXZlciB3YXMgZm9ybWVybHkgbmFtZWQgbmdiZXZmLlxcbiAgOTQ6XFx0XFxuICA5NTpcXHRcXHQgIE1vcmUgc3BlY2lmaWMgaW5mb3JtYXRpb24gb24gY29uZmlndXJpbmcgdGhlIGRyaXZlciBpcyBpblxcbiAgOTY6XFx0XFx0ICBcXHUwMDNjZmlsZTpEb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZGV2aWNlX2RyaXZlcnMvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JldmYucnN0XFx1MDAzZS5cXG4gIDk3OlxcdFxcbiAgOTg6XFx0XFx0ICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlLiBNU0ktWCBpbnRlcnJ1cHRcXG4gIDk5OlxcdFxcdCAgc3VwcG9ydCBpcyByZXF1aXJlZCBmb3IgdGhpcyBkcml2ZXIgdG8gd29yayBjb3JyZWN0bHkuXFxuIDEwMDpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTE6MDU6NDkuNjM3NjQ2MDIxWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NjYxMTM1NzE2NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBXYW5neHVuIE5ldHdvcmsgRHJpdmVyIFBhdGNoKipcblxuT2theSwgbGV0IG1lIGJyZWFrIHRoaXMgZG93bi4gQWxsIHRoZXNlIG1vZGlmaWVkIGZpbGVzIGFyZSBuZXN0bGVkIHVuZGVyIGBkcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2AsIGFuZCB0aGV5J3JlIGFsbCBkaXJlY3RseSByZWxhdGVkIHRvIHRoZSBXYW5neHVuIFBDSWUgbmV0d29yayBhZGFwdGVyIGRyaXZlcnMuIFdlJ3JlIGxvb2tpbmcgYXQgY29kZSBmb3IgdGhlIGNvbW1vbiBgbGlid3hgIGxpYnJhcnksIHRoZSBOR0JFIGFuZCBUWEdCRSBkcml2ZXJzLCBhbmQgdGhlaXIgYXNzb2NpYXRlZCBTUi1JT1YgVmlydHVhbCBGdW5jdGlvbnMuIFJpZ2h0IGF3YXksIG15IGludGVybmFsIGFsYXJtcyBhcmUgZ29pbmcgb2ZmLlxuXG5JIGtub3cgdGhlc2UgZHJpdmVycyBhcmUgKipoYXJkd2FyZS1kZXBlbmRlbnQqKi4gVGhleSdyZSBkZXNpZ25lZCB0byB3b3JrIHdpdGggc3BlY2lmaWMgV2FuZ3h1biBQQ0llIGhhcmR3YXJlIOKAkyBTUDEwMDAsIFdYMTgyMCwgV1gxODYwLCBhbmQgc28gb24uIENyaXRpY2FsbHksIGFuZCB0aGlzIGlzIHRoZSBjcnV4IG9mIHRoZSBpc3N1ZSwgdGhpcyBoYXJkd2FyZSAqaXNuJ3QqIGVtdWxhdGVkIGluIHN0YW5kYXJkIGZ1enppbmcgZW52aXJvbm1lbnRzIGxpa2UgUUVNVSBvciBHb29nbGUgQ29tcHV0ZSBFbmdpbmUuIFRoYXQgbWVhbnMgYW55IGNoYW5nZXMgaGVyZSBhcmUgZXNzZW50aWFsbHkgZ29pbmcgdG8gYmUgaW52aXNpYmxlIHRvIGEgdHlwaWNhbCBzeXprYWxsZXIgc2V0dXAuXG5cbk5vdywgcmVmZXJyaW5nIGJhY2sgdG8gdGhlIFwiTmVnYXRpdmUgQ3JpdGVyaWFcIiBvdXRsaW5lZCBpbiBTZWN0aW9uIDIsIHRoZSBzaXR1YXRpb24gaXMgY2xlYXIuIFRoaXMgY29kZSBmYWxscyB1bmRlciBcInN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZVwiLiBJdCdzIHNpbWlsYXIgdG8gdGhvc2Ugb3RoZXIgdmVuZG9yLXNwZWNpZmljIFBDSWUgZHJpdmVycyDigJMgdGhlIG9uZXMgdGhhdCByZXF1aXJlIHNwZWNpZmljIEFTSUNzIG9yIFBDSWUgY2FyZHMsIGFuZCB3ZSBrbm93IHRob3NlIGFyZSBleHBsaWNpdGx5IGV4Y2x1ZGVkIGZyb20gc3RhbmRhcmQgUUVNVS5cblxuVGhlcmVmb3JlLCBmcm9tIGEgZnV6emluZyBwZXJzcGVjdGl2ZSwgdGhpcyBwYXRjaCBpcyBhIGRlYWQgZW5kLiBJIG5lZWQgdG8gZmxhZyBgV29ydGhGdXp6aW5nYCBhcyBgZmFsc2VgLiBUaGVyZSdzIG5vIHBvaW50IGluIHdhc3RpbmcgY3ljbGVzIG9uIGNvZGUgdGhhdCBzeXprYWxsZXIgd29uJ3QgYmUgYWJsZSB0byByZWFjaC4gYEZvY3VzU3ltYm9sc2Agd2lsbCBiZSBhbiBlbXB0eSBsaXN0LCBhbmQgYEVuYWJsZUNvbmZpZ3NgIHdpbGwgYmUgYW4gZW1wdHkgbGlzdCBhcyB3ZWxsLlxuXG5UaGUgYFJlYXNvbmluZ2AgZm9yIHRoaXMgaXMgc3RyYWlnaHRmb3J3YXJkLiBXZSdyZSBkZWFsaW5nIHdpdGggV2FuZ3h1biBFdGhlcm5ldCBOSUMgZHJpdmVycyAobGlid3gsIG5nYmUsIHR4Z2JlKSB0aGF0ICpuZWVkKiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBoYXJkd2FyZSB3aGljaCBpc24ndCBlbXVsYXRlZCBpbiBzdGFuZGFyZCB2aXJ0dWFsIGVudmlyb25tZW50cy4gQ29uc2VxdWVudGx5LCB0aGUgY29kZSBtb2RpZmljYXRpb25zIGFyZSB1bnJlYWNoYWJsZSBieSB0aGUgc3l6a2FsbGVyIGZ1enplciwgd2hpY2ggbWFrZXMgdGhpcyBub3Qgd29ydGggZnV6emluZy5cblxuQWxyaWdodCwgSSdtIHJlYWR5IHRvIGNhbGwgYHNldC1yZXN1bHRzYCB3aXRoIHRoZSBhcHByb3ByaWF0ZSBhcmd1bWVudHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2MzE4LCJPdXRwdXRUb2tlbnMiOjEwNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY0NCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDExOjA1OjU2LjI0OTAwNTU2NVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjIzMjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgY2hhbmdlcyBhcmUgc3RyaWN0bHkgY29uZmluZWQgdG8gdGhlIFdhbmd4dW4gRXRoZXJuZXQgbmV0d29yayBkcml2ZXJzIChsaWJ3eCwgbmdiZSwgdHhnYmUpIHVuZGVyIGRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vLiBUaGVzZSBkcml2ZXJzIHJlcXVpcmUgdmVuZG9yLXNwZWNpZmljIFBDSWUgQVNJQyBoYXJkd2FyZSB0aGF0IGlzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgKFFFTVUvR0NFKSwgbWFraW5nIHRoZSBtb2RpZmllZCBjb2RlIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBmb3Igc3l6a2FsbGVyIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBjaGFuZ2VzIGFyZSBzdHJpY3RseSBjb25maW5lZCB0byB0aGUgV2FuZ3h1biBFdGhlcm5ldCBuZXR3b3JrIGRyaXZlcnMgKGxpYnd4LCBuZ2JlLCB0eGdiZSkgdW5kZXIgZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi8uIFRoZXNlIGRyaXZlcnMgcmVxdWlyZSB2ZW5kb3Itc3BlY2lmaWMgUENJZSBBU0lDIGhhcmR3YXJlIHRoYXQgaXMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyAoUUVNVS9HQ0UpLCBtYWtpbmcgdGhlIG1vZGlmaWVkIGNvZGUgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGZvciBzeXprYWxsZXIgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDExOjA1OjU2LjI0OTAzMTYzNVoiLCJTZXEiOjksIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMTcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowtrf6d[1] Phase: Running StartedAt: 2026-09-09 11:06:07 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtrf6d[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-09-09 11:06:07 +0000 UTC FinishedAt: 2026-09-09 11:06:16 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:code,Default:nil,Value:*1,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{},Result:nil,ExitCode:*1,}