Name: series-workflow4kxxh Phase: Failed StartedAt: 2026-08-16 19:47:04 +0000 UTC FinishedAt: 2026-08-16 20:40:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4kxxh[0] Phase: Succeeded StartedAt: 2026-08-16 19:47:04 +0000 UTC FinishedAt: 2026-08-16 20:40:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4kxxh[0].run-triage Phase: Succeeded StartedAt: 2026-08-16 19:47:04 +0000 UTC FinishedAt: 2026-08-16 20:40:04 +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+CgkJCTx0ZD4yMDI2LzA4LzE2IDIwOjM5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBMRUQgc3VwcG9ydCBmb3IgdGhlIE1vdG9yY29tbSBZVDkyMTUgZXRoZXJuZXQgc3dpdGNoIGNoaXAgKGEgRFNBIGRyaXZlcikuIFRoaXMgaXMgYSBoYXJkd2FyZS1zcGVjaWZpYyBkcml2ZXIgdGhhdCBjb21tdW5pY2F0ZXMgd2l0aCBhIHBoeXNpY2FsIGNoaXAgdmlhIE1ESU8uIFNpbmNlIHRoZXJlIGlzIG5vIHNvZnR3YXJlIGVtdWxhdGlvbiBmb3IgdGhpcyBzcGVjaWZpYyBzd2l0Y2ggY2hpcCBpbiBzdGFuZGFyZCBRRU1VL3ZpcnR1YWxpemVkIGVudmlyb25tZW50cywgdGhlIGRyaXZlciB3aWxsIGZhaWwgdG8gcHJvYmUgKGUuZy4sIGR1cmluZyBjaGlwIElEIGRldGVjdGlvbiksIGFuZCB0aGUgbmV3bHkgYWRkZWQgTEVEIHNldHVwIGNvZGUgd2lsbCBiZSB1bnJlYWNoYWJsZS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTYgMjA6Mzk8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCAyODYwOTgzZDNmNGRlMDFmOWZjZTM3NjBmZjMxOTkyOTE0YWQ5MTAzXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFN1biBBdWcgMTYgMjA6Mzg6NTkgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9kc2EvbW90b3Jjb21tLHl0OTIxeC55YW1sIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9kc2EvbW90b3Jjb21tLHl0OTIxeC55YW1sXG5pbmRleCAzM2E2NTUyZTQ2ZmMwLi45M2JhNWIxODEyMDViIDEwMDY0NFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9kc2EvbW90b3Jjb21tLHl0OTIxeC55YW1sXG4mIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L2RzYS9tb3RvcmNvbW0seXQ5MjF4LnlhbWxcbkBAIC0yMSw2ICYjNDM7MjEsOSBAQCBkZXNjcmlwdGlvbjogfFxuIFxuICAgQW55IHBvcnQgY2FuIGJlIHVzZWQgYXMgdGhlIENQVSBwb3J0LlxuIFxuJiM0MzsgIEVhY2ggcG9ydCBoYXMgYXQgbW9zdCAzIExFRHMgY29ubmVjdGVkIGFuZCBjYW4gYmUgZGVjbGFyZWQgdXNpbmcgdGhlIHN0YW5kYXJkXG4mIzQzOyAgTEVEcyBzdHJ1Y3R1cmUuXG4mIzQzO1xuIHByb3BlcnRpZXM6XG4gICBjb21wYXRpYmxlOlxuICAgICBjb25zdDogbW90b3Jjb21tLHl0OTIxNVxuQEAgLTU5LDYgJiM0Mzs2Miw3IEBAIHVuZXZhbHVhdGVkUHJvcGVydGllczogZmFsc2VcbiBleGFtcGxlczpcbiAgIC0gfFxuICAgICAjaW5jbHVkZSBcdTAwM2NkdC1iaW5kaW5ncy9ncGlvL2dwaW8uaFx1MDAzZVxuJiM0MzsgICAgI2luY2x1ZGUgXHUwMDNjZHQtYmluZGluZ3MvbGVkcy9jb21tb24uaFx1MDAzZVxuIFxuICAgICBtZGlvIHtcbiAgICAgICAgICNhZGRyZXNzLWNlbGxzID0gXHUwMDNjMVx1MDAzZTtcbkBAIC0xMTMsNiAmIzQzOzExNywyNSBAQCBleGFtcGxlczpcbiAgICAgICAgICAgICAgICAgICAgIGxhYmVsID0gXCYjMzQ7bGFuMVwmIzM0OztcbiAgICAgICAgICAgICAgICAgICAgIHBoeS1tb2RlID0gXCYjMzQ7aW50ZXJuYWxcJiMzNDs7XG4gICAgICAgICAgICAgICAgICAgICBwaHktaGFuZGxlID0gXHUwMDNjXHUwMDI2c3dfcGh5MFx1MDAzZTtcbiYjNDM7XG4mIzQzOyAgICAgICAgICAgICAgICAgICAgbGVkcyB7XG4mIzQzOyAgICAgICAgICAgICAgICAgICAgICAgICNhZGRyZXNzLWNlbGxzID0gXHUwMDNjMVx1MDAzZTtcbiYjNDM7ICAgICAgICAgICAgICAgICAgICAgICAgI3NpemUtY2VsbHMgPSBcdTAwM2MwXHUwMDNlO1xuJiM0MztcbiYjNDM7ICAgICAgICAgICAgICAgICAgICAgICAgbGVkQDAge1xuJiM0MzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVnID0gXHUwMDNjMFx1MDAzZTtcbiYjNDM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yID0gXHUwMDNjTEVEX0NPTE9SX0lEX1dISVRFXHUwMDNlO1xuJiM0MzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gPSBMRURfRlVOQ1RJT05fTEFOO1xuJiM0MzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdC1zdGF0ZSA9IFwmIzM0O2tlZXBcJiMzNDs7XG4mIzQzOyAgICAgICAgICAgICAgICAgICAgICAgIH07XG4mIzQzO1xuJiM0MzsgICAgICAgICAgICAgICAgICAgICAgICBsZWRAMSB7XG4mIzQzOyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWcgPSBcdTAwM2MxXHUwMDNlO1xuJiM0MzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3IgPSBcdTAwM2NMRURfQ09MT1JfSURfQU1CRVJcdTAwM2U7XG4mIzQzOyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiA9IExFRF9GVU5DVElPTl9MQU47XG4mIzQzOyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0LXN0YXRlID0gXCYjMzQ7a2VlcFwmIzM0OztcbiYjNDM7ICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiYjNDM7ICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICB9O1xuIFxuICAgICAgICAgICAgICAgICBldGhlcm5ldC1wb3J0QDEge1xuZGlmZiAtLWdpdCBhL01BSU5UQUlORVJTIGIvTUFJTlRBSU5FUlNcbmluZGV4IDk5MTQ2MDA1MGRhNzQuLjU1Y2M1YWMwZTg2ZjAgMTAwNjQ0XG4tLS0gYS9NQUlOVEFJTkVSU1xuJiM0MzsmIzQzOyYjNDM7IGIvTUFJTlRBSU5FUlNcbkBAIC0xODI1Niw3ICYjNDM7MTgyNTYsNyBAQCBNOlx0RGF2aWQgWWFuZyBcdTAwM2NtbXlhbmdmbEBnbWFpbC5jb21cdTAwM2VcbiBMOlx0bmV0ZGV2QHZnZXIua2VybmVsLm9yZ1xuIFM6XHRNYWludGFpbmVkXG4gRjpcdERvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvZHNhL21vdG9yY29tbSx5dDkyMXgueWFtbFxuLUY6XHRkcml2ZXJzL25ldC9kc2EveXQ5MjF4LipcbiYjNDM7RjpcdGRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vXG4gRjpcdG5ldC9kc2EvdGFnX3l0OTIxeC5jXG4gXG4gTU9YQSBTTUFSVElPL0lORFVTVElPL0lOVEVMTElPIFNFUklBTCBDQVJEXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZHNhL0tjb25maWcgYi9kcml2ZXJzL25ldC9kc2EvS2NvbmZpZ1xuaW5kZXggNGFiNTY3YzViYmFmYy4uOThlOWJiZTQ3ZGU3YiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2RzYS9LY29uZmlnXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9kc2EvS2NvbmZpZ1xuQEAgLTcyLDYgJiM0Mzs3Miw4IEBAIGNvbmZpZyBORVRfRFNBX01WODhFNjA2MFxuIFxuIHNvdXJjZSBcJiMzNDtkcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL0tjb25maWdcJiMzNDtcbiBcbiYjNDM7c291cmNlIFwmIzM0O2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vS2NvbmZpZ1wmIzM0O1xuJiM0MztcbiBzb3VyY2UgXCYjMzQ7ZHJpdmVycy9uZXQvZHNhL212ODhlNnh4eC9LY29uZmlnXCYjMzQ7XG4gXG4gc291cmNlIFwmIzM0O2RyaXZlcnMvbmV0L2RzYS9teGw4NjJ4eC9LY29uZmlnXCYjMzQ7XG5AQCAtMTU4LDEyICYjNDM7MTYwLDQgQEAgY29uZmlnIE5FVF9EU0FfVklURVNTRV9WU0M3M1hYX1BMQVRGT1JNXG4gXHQgIFRoaXMgZW5hYmxlcyBzdXBwb3J0IGZvciB0aGUgVml0ZXNzZSBWU0M3Mzg1LCBWU0M3Mzg4LCBWU0M3Mzk1XG4gXHQgIGFuZCBWU0M3Mzk4IFNwYXJYIGludGVncmF0ZWQgZXRoZXJuZXQgc3dpdGNoZXMsIGNvbm5lY3RlZCBvdmVyXG4gXHQgIGEgQ1BVLWF0dGFjaGVkIGFkZHJlc3MgYnVzIGFuZCB3b3JrIGluIG1lbW9yeS1tYXBwZWQgSS9PIG1vZGUuXG4tXG4tY29uZmlnIE5FVF9EU0FfWVQ5MjFYXG4tXHR0cmlzdGF0ZSBcJiMzNDtNb3RvcmNvbW0gWVQ5MjE1IGV0aGVybmV0IHN3aXRjaCBjaGlwIHN1cHBvcnRcJiMzNDtcbi1cdHNlbGVjdCBORVRfRFNBX1RBR19ZVDkyMVhcbi1cdHNlbGVjdCBORVRfSUVFRTgwMjFRX0hFTFBFUlMgaWYgRENCXG4tXHRoZWxwXG4tXHQgIFRoaXMgZW5hYmxlcyBzdXBwb3J0IGZvciB0aGUgTW90b3Jjb21tIFlUOTIxNSBldGhlcm5ldCBzd2l0Y2hcbi1cdCAgY2hpcC5cbiBlbmRtZW51XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZHNhL01ha2VmaWxlIGIvZHJpdmVycy9uZXQvZHNhL01ha2VmaWxlXG5pbmRleCBkMjk3NWJhZGZmYzA5Li4xMzgyMjViYWE0ZDU2IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZHNhL01ha2VmaWxlXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9kc2EvTWFrZWZpbGVcbkBAIC0xNCwxMSAmIzQzOzE0LDExIEBAIG9iai0kKENPTkZJR19ORVRfRFNBX1NNU0NfTEFOOTMwM19NRElPKSAmIzQzOz0gbGFuOTMwM19tZGlvLm9cbiBvYmotJChDT05GSUdfTkVUX0RTQV9WSVRFU1NFX1ZTQzczWFgpICYjNDM7PSB2aXRlc3NlLXZzYzczeHgtY29yZS5vXG4gb2JqLSQoQ09ORklHX05FVF9EU0FfVklURVNTRV9WU0M3M1hYX1BMQVRGT1JNKSAmIzQzOz0gdml0ZXNzZS12c2M3M3h4LXBsYXRmb3JtLm9cbiBvYmotJChDT05GSUdfTkVUX0RTQV9WSVRFU1NFX1ZTQzczWFhfU1BJKSAmIzQzOz0gdml0ZXNzZS12c2M3M3h4LXNwaS5vXG4tb2JqLSQoQ09ORklHX05FVF9EU0FfWVQ5MjFYKSAmIzQzOz0geXQ5MjF4Lm9cbiBvYmoteVx0XHRcdFx0JiM0Mzs9IGI1My9cbiBvYmoteVx0XHRcdFx0JiM0Mzs9IGhpcnNjaG1hbm4vXG4gb2JqLXlcdFx0XHRcdCYjNDM7PSBsYW50aXEvXG4gb2JqLXlcdFx0XHRcdCYjNDM7PSBtaWNyb2NoaXAvXG4mIzQzO29iai15XHRcdFx0XHQmIzQzOz0gbW90b3Jjb21tL1xuIG9iai15XHRcdFx0XHQmIzQzOz0gbXY4OGU2eHh4L1xuIG9iai15XHRcdFx0XHQmIzQzOz0gbXhsODYyeHgvXG4gb2JqLXlcdFx0XHRcdCYjNDM7PSBuZXRjL1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vS2NvbmZpZyBiL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vS2NvbmZpZ1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLjM0MzhlMGIxNDM2MTFcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vS2NvbmZpZ1xuQEAgLTAsMCAmIzQzOzEsMTcgQEBcbiYjNDM7IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogSVNDXG4mIzQzO2NvbmZpZyBORVRfRFNBX1lUOTIxWFxuJiM0MztcdHRyaXN0YXRlIFwmIzM0O01vdG9yY29tbSBZVDkyMTUgZXRoZXJuZXQgc3dpdGNoIGNoaXAgc3VwcG9ydFwmIzM0O1xuJiM0MztcdHNlbGVjdCBORVRfRFNBX1RBR19ZVDkyMVhcbiYjNDM7XHRzZWxlY3QgTkVUX0lFRUU4MDIxUV9IRUxQRVJTIGlmIERDQlxuJiM0MztcdGhlbHBcbiYjNDM7XHQgIFRoaXMgZW5hYmxlcyBzdXBwb3J0IGZvciB0aGUgTW90b3Jjb21tIFlUOTIxNSBldGhlcm5ldCBzd2l0Y2hcbiYjNDM7XHQgIGNoaXAuXG4mIzQzO1xuJiM0Mztjb25maWcgTkVUX0RTQV9ZVDkyMVhfTEVEU1xuJiM0MztcdGJvb2wgXCYjMzQ7TEVEIHN1cHBvcnQgZm9yIE1vdG9yY29tbSBZVDkyMTVcJiMzNDtcbiYjNDM7XHRkZWZhdWx0IHlcbiYjNDM7XHRkZXBlbmRzIG9uIE5FVF9EU0FfWVQ5MjFYXG4mIzQzO1x0ZGVwZW5kcyBvbiBMRURTX0NMQVNTPXkgfHwgTEVEU19DTEFTUz1ORVRfRFNBX1lUOTIxWFxuJiM0MztcdGhlbHBcbiYjNDM7XHQgIFRoaXMgZW5hYmxlcyBzdXBwb3J0IGZvciBjb250cm9sbGluZyB0aGUgTEVEcyBhdHRhY2hlZCB0byB0aGVcbiYjNDM7XHQgIE1vdG9yY29tbSBZVDkyMTUgc3dpdGNoIGNoaXBzLlxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vTWFrZWZpbGUgYi9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL01ha2VmaWxlXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uNWE2M2RiMDAyOWZmZVxuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9NYWtlZmlsZVxuQEAgLTAsMCAmIzQzOzEsNSBAQFxuJiM0MzsjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBJU0NcbiYjNDM7b2JqLSQoQ09ORklHX05FVF9EU0FfWVQ5MjFYKSAmIzQzOz0geXQ5MjF4Lm9cbiYjNDM7eXQ5MjF4LW9ianMgOj0gY2hpcC5vXG4mIzQzO3l0OTIxeC0kKENPTkZJR19ORVRfRFNBX1lUOTIxWF9MRURTKSAmIzQzOz0gbGVkcy5vXG4mIzQzO3l0OTIxeC1vYmpzICYjNDM7PSBzbWkub1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS95dDkyMXguYyBiL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jXG5zaW1pbGFyaXR5IGluZGV4IDk2JVxucmVuYW1lIGZyb20gZHJpdmVycy9uZXQvZHNhL3l0OTIxeC5jXG5yZW5hbWUgdG8gZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmNcbmluZGV4IDE1OWIxNjYwNmY2Y2EuLjU1M2VmYWNkNGY1ZWUgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9kc2EveXQ5MjF4LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jXG5AQCAtMTMsNyAmIzQzOzEzLDYgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9pZl9icmlkZ2UuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2lmX2hzci5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvaWZfdmxhbi5oXHUwMDNlXG4tI2luY2x1ZGUgXHUwMDNjbGludXgvaW9wb2xsLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9tZGlvLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9tb2R1bGUuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L29mLmhcdTAwM2VcbkBAIC0yNiw3ICYjNDM7MjUsOSBAQFxuICNpbmNsdWRlIFx1MDAzY25ldC9pZWVlODAyMXEuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY25ldC9wa3RfY2xzLmhcdTAwM2VcbiBcbi0jaW5jbHVkZSBcJiMzNDt5dDkyMXguaFwmIzM0O1xuJiM0MzsjaW5jbHVkZSBcJiMzNDtjaGlwLmhcJiMzNDtcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7bGVkcy5oXCYjMzQ7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O3NtaS5oXCYjMzQ7XG4gXG4gc3RydWN0IHl0OTIxeF9taWJfZGVzYyB7XG4gXHR1bnNpZ25lZCBpbnQgc2l6ZTtcbkBAIC0xNTEsMTMgJiM0MzsxNTIsOCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IHl0OTIxeF9pbmZvIHl0OTIxeF9pbmZvc1tdID0ge1xuIFx0e31cbiB9O1xuIFxuLSNkZWZpbmUgWVQ5MjFYX05BTUVcdFwmIzM0O3l0OTIxeFwmIzM0O1xuLVxuICNkZWZpbmUgWVQ5MjFYX1ZJRF9VTldBUkVcdDQwOTVcbiBcbi0jZGVmaW5lIFlUOTIxWF9QT0xMX1NMRUVQX1VTXHQxMDAwMFxuLSNkZWZpbmUgWVQ5MjFYX1BPTExfVElNRU9VVF9VU1x0MTAwMDAwXG4tXG4gLyogVGhlIGludGVydmFsIHNob3VsZCBiZSBzbWFsbCBlbm91Z2ggdG8gYXZvaWQgb3ZlcmZsb3cgb2YgMzJiaXQgTUlCcy5cbiAgKlxuICAqIFVudGlsIHdlIGNhbiByZWFkIE1JQnMgZnJvbSBzdGF0czY0IGNhbGwgZGlyZWN0bHkgKGkuZS4gc2xlZXBcbkBAIC0xOTYsMjA4ICYjNDM7MTkyLDYgQEAgc3RhdGljIHUzMiBldGhhZGRyX2xvMl90b191MzIoY29uc3QgdW5zaWduZWQgY2hhciAqYWRkcilcbiBcdHJldHVybiAoYWRkcls0XSBcdTAwM2NcdTAwM2MgOCkgfCBhZGRyWzVdO1xuIH1cbiBcbi1zdGF0aWMgaW50IHl0OTIxeF9yZWdfcmVhZChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiAqdmFscClcbi17XG4tXHRXQVJOX09OKCFtdXRleF9pc19sb2NrZWQoXHUwMDI2cHJpdi1cdTAwM2VyZWdfbG9jaykpO1xuLVxuLVx0cmV0dXJuIHByaXYtXHUwMDNlcmVnX29wcy1cdTAwM2VyZWFkKHByaXYtXHUwMDNlcmVnX2N0eCwgcmVnLCB2YWxwKTtcbi19XG4tXG4tc3RhdGljIGludCB5dDkyMXhfcmVnX3dyaXRlKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyIHZhbClcbi17XG4tXHRXQVJOX09OKCFtdXRleF9pc19sb2NrZWQoXHUwMDI2cHJpdi1cdTAwM2VyZWdfbG9jaykpO1xuLVxuLVx0cmV0dXJuIHByaXYtXHUwMDNlcmVnX29wcy1cdTAwM2V3cml0ZShwcml2LVx1MDAzZXJlZ19jdHgsIHJlZywgdmFsKTtcbi19XG4tXG4tc3RhdGljIGludFxuLXl0OTIxeF9yZWdfd2FpdChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiBtYXNrLCB1MzIgKnZhbHApXG4te1xuLVx0dTMyIHZhbDtcbi1cdGludCByZXM7XG4tXHRpbnQgcmV0O1xuLVxuLVx0cmV0ID0gcmVhZF9wb2xsX3RpbWVvdXQoeXQ5MjF4X3JlZ19yZWFkLCByZXMsXG4tXHRcdFx0XHRyZXMgfHwgKHZhbCBcdTAwMjYgbWFzaykgPT0gKnZhbHAsXG4tXHRcdFx0XHRZVDkyMVhfUE9MTF9TTEVFUF9VUywgWVQ5MjFYX1BPTExfVElNRU9VVF9VUyxcbi1cdFx0XHRcdGZhbHNlLCBwcml2LCByZWcsIFx1MDAyNnZhbCk7XG4tXHRpZiAocmV0KVxuLVx0XHRyZXR1cm4gcmV0O1xuLVx0aWYgKHJlcylcbi1cdFx0cmV0dXJuIHJlcztcbi1cbi1cdCp2YWxwID0gdmFsO1xuLVx0cmV0dXJuIDA7XG4tfVxuLVxuLXN0YXRpYyBpbnRcbi15dDkyMXhfcmVnX3VwZGF0ZV9iaXRzKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyIG1hc2ssIHUzMiB2YWwpXG4te1xuLVx0aW50IHJlcztcbi1cdHUzMiB2O1xuLVx0dTMyIHU7XG4tXG4tXHRyZXMgPSB5dDkyMXhfcmVnX3JlYWQocHJpdiwgcmVnLCBcdTAwMjZ2KTtcbi1cdGlmIChyZXMpXG4tXHRcdHJldHVybiByZXM7XG4tXG4tXHR1ID0gdjtcbi1cdHUgXHUwMDI2PSB+bWFzaztcbi1cdHUgfD0gdmFsO1xuLVx0aWYgKHUgPT0gdilcbi1cdFx0cmV0dXJuIDA7XG4tXG4tXHRyZXR1cm4geXQ5MjF4X3JlZ193cml0ZShwcml2LCByZWcsIHUpO1xuLX1cbi1cbi1zdGF0aWMgaW50IHl0OTIxeF9yZWdfc2V0X2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgbWFzaylcbi17XG4tXHRyZXR1cm4geXQ5MjF4X3JlZ191cGRhdGVfYml0cyhwcml2LCByZWcsIDAsIG1hc2spO1xuLX1cbi1cbi1zdGF0aWMgaW50IHl0OTIxeF9yZWdfY2xlYXJfYml0cyhzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiBtYXNrKVxuLXtcbi1cdHJldHVybiB5dDkyMXhfcmVnX3VwZGF0ZV9iaXRzKHByaXYsIHJlZywgbWFzaywgMCk7XG4tfVxuLVxuLXN0YXRpYyBpbnRcbi15dDkyMXhfcmVnX3RvZ2dsZV9iaXRzKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyIG1hc2ssIGJvb2wgc2V0KVxuLXtcbi1cdHJldHVybiB5dDkyMXhfcmVnX3VwZGF0ZV9iaXRzKHByaXYsIHJlZywgbWFzaywgIXNldCA/IDAgOiBtYXNrKTtcbi19XG4tXG4tLyogU29tZSBtdWx0aS13b3JkIHJlZ2lzdGVycywgbGlrZSBWTEFObl9DVFJMLCBzaG91bGQgYmUgdHJlYXRlZCBhcyBhIHNpbmdsZVxuLSAqIGxvbmcgcmVnaXN0ZXIuIE1vcmUgc3BlY2lmaWNhbGx5LCB3cml0ZXMgdG8gcGFydHMgb2YgaXRzIHdvcmRzIHdvbiYjMzk7dCBiZWNvbWVcbi0gKiB2aXNpYmxlLCB1bnRpbCB0aGUgbGFzdCB3b3JkIGlzIHdyaXR0ZW4uXG4tICpcbi0gKiBIZXJlIHdlIHJlcXVpcmUgZnVsbCByZWFkIGFuZCB3cml0ZSBvcGVyYXRpb25zIG92ZXIgdGhlc2UgcmVnaXN0ZXJzIHRvXG4tICogZWxpbWluYXRlIHBvdGVudGlhbCBpc3N1ZXMsIGFsdGhvdWdoIHBhcnRpYWwgcmVhZHMvd3JpdGVzIGFyZSBhbHNvIHBvc3NpYmxlLlxuLSAqL1xuLVxuLXN0YXRpYyB2b2lkIHVwZGF0ZV9jdHJsc191bmFsaWduZWQodTMyICpsbywgdTMyICpoaSwgdTY0IG1hc2ssIHU2NCB2YWwpXG4te1xuLVx0KmxvIFx1MDAyNj0gfmxvd2VyXzMyX2JpdHMobWFzayk7XG4tXHQqaGkgXHUwMDI2PSB+dXBwZXJfMzJfYml0cyhtYXNrKTtcbi1cdCpsbyB8PSBsb3dlcl8zMl9iaXRzKHZhbCk7XG4tXHQqaGkgfD0gdXBwZXJfMzJfYml0cyh2YWwpO1xuLX1cbi1cbi1zdGF0aWMgaW50XG4teXQ5MjF4X3JlZ3NfcmVhZChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiAqdmFscyxcbi1cdFx0IHVuc2lnbmVkIGludCBudW1fcmVncylcbi17XG4tXHRpbnQgcmVzO1xuLVxuLVx0Zm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgXHUwMDNjIG51bV9yZWdzOyBpJiM0MzsmIzQzOykge1xuLVx0XHRyZXMgPSB5dDkyMXhfcmVnX3JlYWQocHJpdiwgcmVnICYjNDM7IDQgKiBpLCBcdTAwMjZ2YWxzW2ldKTtcbi1cdFx0aWYgKHJlcylcbi1cdFx0XHRyZXR1cm4gcmVzO1xuLVx0fVxuLVxuLVx0cmV0dXJuIDA7XG4tfVxuLVxuLXN0YXRpYyBpbnRcbi15dDkyMXhfcmVnc193cml0ZShzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIGNvbnN0IHUzMiAqdmFscyxcbi1cdFx0ICB1bnNpZ25lZCBpbnQgbnVtX3JlZ3MpXG4te1xuLVx0aW50IHJlcztcbi1cbi1cdGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIFx1MDAzYyBudW1fcmVnczsgaSYjNDM7JiM0MzspIHtcbi1cdFx0cmVzID0geXQ5MjF4X3JlZ193cml0ZShwcml2LCByZWcgJiM0MzsgNCAqIGksIHZhbHNbaV0pO1xuLVx0XHRpZiAocmVzKVxuLVx0XHRcdHJldHVybiByZXM7XG4tXHR9XG4tXG4tXHRyZXR1cm4gMDtcbi19XG4tXG4tc3RhdGljIGludFxuLXl0OTIxeF9yZWdzX3VwZGF0ZV9iaXRzKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgY29uc3QgdTMyICptYXNrcyxcbi1cdFx0XHRjb25zdCB1MzIgKnZhbHMsIHVuc2lnbmVkIGludCBudW1fcmVncylcbi17XG4tXHRib29sIGNoYW5nZWQgPSBmYWxzZTtcbi1cdHUzMiB2c1s0XTtcbi1cdGludCByZXM7XG4tXG4tXHRCVUlMRF9CVUdfT04obnVtX3JlZ3MgXHUwMDNlIEFSUkFZX1NJWkUodnMpKTtcbi1cbi1cdHJlcyA9IHl0OTIxeF9yZWdzX3JlYWQocHJpdiwgcmVnLCB2cywgbnVtX3JlZ3MpO1xuLVx0aWYgKHJlcylcbi1cdFx0cmV0dXJuIHJlcztcbi1cbi1cdGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIFx1MDAzYyBudW1fcmVnczsgaSYjNDM7JiM0MzspIHtcbi1cdFx0dTMyIHUgPSB2c1tpXTtcbi1cbi1cdFx0dSBcdTAwMjY9IH5tYXNrc1tpXTtcbi1cdFx0dSB8PSB2YWxzW2ldO1xuLVx0XHRpZiAodSAhPSB2c1tpXSlcbi1cdFx0XHRjaGFuZ2VkID0gdHJ1ZTtcbi1cbi1cdFx0dnNbaV0gPSB1O1xuLVx0fVxuLVxuLVx0aWYgKCFjaGFuZ2VkKVxuLVx0XHRyZXR1cm4gMDtcbi1cbi1cdHJldHVybiB5dDkyMXhfcmVnc193cml0ZShwcml2LCByZWcsIHZzLCBudW1fcmVncyk7XG4tfVxuLVxuLXN0YXRpYyBpbnRcbi15dDkyMXhfcmVnc19jbGVhcl9iaXRzKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgY29uc3QgdTMyICptYXNrcyxcbi1cdFx0ICAgICAgIHVuc2lnbmVkIGludCBudW1fcmVncylcbi17XG4tXHRib29sIGNoYW5nZWQgPSBmYWxzZTtcbi1cdHUzMiB2c1s0XTtcbi1cdGludCByZXM7XG4tXG4tXHRCVUlMRF9CVUdfT04obnVtX3JlZ3MgXHUwMDNlIEFSUkFZX1NJWkUodnMpKTtcbi1cbi1cdHJlcyA9IHl0OTIxeF9yZWdzX3JlYWQocHJpdiwgcmVnLCB2cywgbnVtX3JlZ3MpO1xuLVx0aWYgKHJlcylcbi1cdFx0cmV0dXJuIHJlcztcbi1cbi1cdGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIFx1MDAzYyBudW1fcmVnczsgaSYjNDM7JiM0MzspIHtcbi1cdFx0dTMyIHUgPSB2c1tpXTtcbi1cbi1cdFx0dSBcdTAwMjY9IH5tYXNrc1tpXTtcbi1cdFx0aWYgKHUgIT0gdnNbaV0pXG4tXHRcdFx0Y2hhbmdlZCA9IHRydWU7XG4tXG4tXHRcdHZzW2ldID0gdTtcbi1cdH1cbi1cbi1cdGlmICghY2hhbmdlZClcbi1cdFx0cmV0dXJuIDA7XG4tXG4tXHRyZXR1cm4geXQ5MjF4X3JlZ3Nfd3JpdGUocHJpdiwgcmVnLCB2cywgbnVtX3JlZ3MpO1xuLX1cbi1cbi1zdGF0aWMgaW50XG4teXQ5MjF4X3JlZzY0X3dyaXRlKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgY29uc3QgdTMyICp2YWxzKVxuLXtcbi1cdHJldHVybiB5dDkyMXhfcmVnc193cml0ZShwcml2LCByZWcsIHZhbHMsIDIpO1xuLX1cbi1cbi1zdGF0aWMgaW50XG4teXQ5MjF4X3JlZzY0X3VwZGF0ZV9iaXRzKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgY29uc3QgdTMyICptYXNrcyxcbi1cdFx0XHQgY29uc3QgdTMyICp2YWxzKVxuLXtcbi1cdHJldHVybiB5dDkyMXhfcmVnc191cGRhdGVfYml0cyhwcml2LCByZWcsIG1hc2tzLCB2YWxzLCAyKTtcbi19XG4tXG4tc3RhdGljIGludFxuLXl0OTIxeF9yZWc2NF9jbGVhcl9iaXRzKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgY29uc3QgdTMyICptYXNrcylcbi17XG4tXHRyZXR1cm4geXQ5MjF4X3JlZ3NfY2xlYXJfYml0cyhwcml2LCByZWcsIG1hc2tzLCAyKTtcbi19XG4tXG4tc3RhdGljIGludFxuLXl0OTIxeF9yZWc5Nl93cml0ZShzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIGNvbnN0IHUzMiAqdmFscylcbi17XG4tXHRyZXR1cm4geXQ5MjF4X3JlZ3Nfd3JpdGUocHJpdiwgcmVnLCB2YWxzLCAzKTtcbi19XG4tXG4gc3RhdGljIGludCB5dDkyMXhfcmVnX21kaW9fcmVhZCh2b2lkICpjb250ZXh0LCB1MzIgcmVnLCB1MzIgKnZhbHApXG4ge1xuIFx0c3RydWN0IHl0OTIxeF9yZWdfbWRpbyAqbWRpbyA9IGNvbnRleHQ7XG5AQCAtNDc4Niw2ICYjNDM7NDU4MCwxMiBAQCBzdGF0aWMgaW50IHl0OTIxeF9kc2Ffc2V0dXAoc3RydWN0IGRzYV9zd2l0Y2ggKmRzKVxuIFx0aWYgKHJlcylcbiBcdFx0cmV0dXJuIHJlcztcbiBcbiYjNDM7I2lmIElTX0VOQUJMRUQoQ09ORklHX05FVF9EU0FfWVQ5MjFYX0xFRFMpXG4mIzQzO1x0cmVzID0geXQ5MjF4X2xlZHNfc2V0dXAocHJpdik7XG4mIzQzO1x0aWYgKHJlcylcbiYjNDM7XHRcdGRldl93YXJuKGRldiwgXCYjMzQ7RmFpbGVkIHRvIHNldHVwIExFRHM6ICVkXFxuXCYjMzQ7LCByZXMpO1xuJiM0MzsjZW5kaWZcbiYjNDM7XG4gXHRyZXR1cm4gMDtcbiB9XG4gXG5AQCAtNDg4Niw2ICYjNDM7NDY4NiwxMCBAQCBzdGF0aWMgdm9pZCB5dDkyMXhfbWRpb19yZW1vdmUoc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2KVxuIFx0aWYgKCFwcml2KVxuIFx0XHRyZXR1cm47XG4gXG4mIzQzOyNpZiBJU19FTkFCTEVEKENPTkZJR19ORVRfRFNBX1lUOTIxWF9MRURTKVxuJiM0MztcdHl0OTIxeF9sZWRzX3JlbW92ZShwcml2KTtcbiYjNDM7I2VuZGlmXG4mIzQzO1xuIFx0Zm9yIChzaXplX3QgaSA9IEFSUkFZX1NJWkUocHJpdi1cdTAwM2Vwb3J0cyk7IGktLSBcdTAwM2UgMDsgKSB7XG4gXHRcdHN0cnVjdCB5dDkyMXhfcG9ydCAqcHAgPSBcdTAwMjZwcml2LVx1MDAzZXBvcnRzW2ldO1xuIFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS95dDkyMXguaCBiL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5oXG5zaW1pbGFyaXR5IGluZGV4IDk5JVxucmVuYW1lIGZyb20gZHJpdmVycy9uZXQvZHNhL3l0OTIxeC5oXG5yZW5hbWUgdG8gZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmhcbmluZGV4IDVmM2I5OWUxODljNDEuLmU2ODE1Y2Y5Y2IzY2QgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9kc2EveXQ5MjF4LmhcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5oXG5AQCAtODUwLDkgJiM0Mzs4NTAsMTQgQEAgZW51bSB5dDkyMXhfZmRiX2VudHJ5X3N0YXR1cyB7XG4gI2RlZmluZSBZVDkyMVhfQUNMX05VTVx0XHQoWVQ5MjFYX0FDTF9CTEtfTlVNICogWVQ5MjFYX0FDTF9FTlRfUEVSX0JMSylcbiAjZGVmaW5lIFlUOTIxWF9VREZfTlVNXHRcdDhcbiBcbiYjNDM7I2RlZmluZSBZVDkyMVhfTEVEX0dST1VQX05VTVx0M1xuJiM0MzsjZGVmaW5lIFlUOTIxWF9MRURfUE9SVF9OVU1cdDEwXG4mIzQzO1xuIC8qIDggaW50ZXJuYWwgJiM0MzsgMiBleHRlcm5hbCAmIzQzOyAxIG1jdSAqL1xuICNkZWZpbmUgWVQ5MjFYX1BPUlRfTlVNXHRcdFx0MTFcbiBcbiYjNDM7I2RlZmluZSBZVDkyMVhfTkFNRVx0XCYjMzQ7eXQ5MjF4XCYjMzQ7XG4mIzQzO1xuICNkZWZpbmUgeXQ5MjF4X3BvcnRfaXNfaW50ZXJuYWwocG9ydCkgKChwb3J0KSBcdTAwM2MgOClcbiAjZGVmaW5lIHl0OTIxeF9wb3J0X2lzX2V4dGVybmFsKHBvcnQpICgocG9ydCkgPT0gOCB8fCAocG9ydCkgPT0gOSlcbiBcbkBAIC05MzgsNiAmIzQzOzk0MywxMyBAQCBzdHJ1Y3QgeXQ5MjF4X3BvcnQge1xuIFx0c3RydWN0IHl0OTIxeF9taWIgbWliO1xuIFx0dTY0IHJ4X2ZyYW1lcztcbiBcdHU2NCB0eF9mcmFtZXM7XG4mIzQzO1xuJiM0MzsjaWYgSVNfRU5BQkxFRChDT05GSUdfTkVUX0RTQV9ZVDkyMVhfTEVEUylcbiYjNDM7XHR1bnNpZ25lZCBjaGFyIGxlZF9kdXR5O1xuJiM0MztcdHVuc2lnbmVkIHNob3J0IGxlZF9jeWNsZTtcbiYjNDM7XG4mIzQzO1x0c3RydWN0IHl0OTIxeF9sZWQgKmxlZHNbWVQ5MjFYX0xFRF9HUk9VUF9OVU1dO1xuJiM0MzsjZW5kaWZcbiB9O1xuIFxuIHN0cnVjdCB5dDkyMXhfcmVnX29wcyB7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9sZWRzLmMgYi9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2xlZHMuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLmU3ZWYwZWY4MGEyNjZcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vbGVkcy5jXG5AQCAtMCwwICYjNDM7MSw2NTQgQEBcbiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb3ItbGF0ZXJcbiYjNDM7LypcbiYjNDM7ICogQ29weXJpZ2h0IChjKSAyMDI2IERhdmlkIFlhbmdcbiYjNDM7ICovXG4mIzQzO1xuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC91bGVkcy5oXHUwMDNlXG4mIzQzO1xuJiM0MzsjaW5jbHVkZSBcJiMzNDtjaGlwLmhcJiMzNDtcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7bGVkcy5oXCYjMzQ7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O3NtaS5oXCYjMzQ7XG4mIzQzO1xuJiM0MzsjZGVmaW5lIHRvX3l0OTIxeF9sZWQobGVkX2NkZXYpIFxcXG4mIzQzO1x0Y29udGFpbmVyX29mX2NvbnN0KChsZWRfY2RldiksIHN0cnVjdCB5dDkyMXhfbGVkLCBjZGV2KVxuJiM0MzsjZGVmaW5lIHRvX3l0OTIxeF9wb3J0KGxlZCkgKChsZWQpLVx1MDAzZXBvcnQpXG4mIzQzOyNkZWZpbmUgdG9feXQ5MjF4X3ByaXYocHApIFxcXG4mIzQzO1x0Y29udGFpbmVyX29mX2NvbnN0KChwcCksIHN0cnVjdCB5dDkyMXhfcHJpdiwgcG9ydHNbKHBwKS1cdTAwM2VpbmRleF0pXG4mIzQzOyNkZWZpbmUgdG9fZGV2aWNlKHByaXYpICgocHJpdiktXHUwMDNlZHMuZGV2KVxuJiM0MztcbiYjNDM7c3RhdGljIHUzMiB5dDkyMXhfbGVkX3JlZ2FkZHIoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCBpbnQgcG9ydCwgaW50IGdyb3VwKVxuJiM0Mzt7XG4mIzQzO1x0c3dpdGNoIChncm91cCkge1xuJiM0MztcdGNhc2UgMDpcbiYjNDM7XHRkZWZhdWx0OlxuJiM0MztcdFx0cmV0dXJuIFlUOTIxWF9MRUQwX1BPUlRuKHBvcnQpO1xuJiM0MztcdGNhc2UgMTpcbiYjNDM7XHRcdHJldHVybiBZVDkyMVhfTEVEMV9QT1JUbihwb3J0KTtcbiYjNDM7XHRjYXNlIDI6XG4mIzQzO1x0XHRyZXR1cm4gWVQ5MjFYX0xFRDJfUE9SVG4ocG9ydCk7XG4mIzQzO1x0fVxuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50XG4mIzQzO3l0OTIxeF9sZWRfZm9yY2VfZ2V0KHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgaW50IHBvcnQsIGludCBncm91cCwgYm9vbCAqb25wKVxuJiM0Mzt7XG4mIzQzO1x0dTMyIHZhbDtcbiYjNDM7XHRpbnQgcmVzO1xuJiM0MztcbiYjNDM7XHRyZXMgPSB5dDkyMXhfcmVnX3JlYWQocHJpdiwgWVQ5MjFYX0xFRDJfUE9SVG4ocG9ydCksIFx1MDAyNnZhbCk7XG4mIzQzO1x0aWYgKHJlcylcbiYjNDM7XHRcdHJldHVybiByZXM7XG4mIzQzO1xuJiM0MztcdCpvbnAgPSAodmFsIFx1MDAyNiBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbl9NKGdyb3VwKSkgPT1cbiYjNDM7XHQgICAgICAgWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW5fT04oZ3JvdXApO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50XG4mIzQzO3l0OTIxeF9sZWRfZm9yY2Vfc2V0KHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgaW50IHBvcnQsIGludCBncm91cCwgYm9vbCBvbilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB5dDkyMXhfcG9ydCAqcHAgPSBcdTAwMjZwcml2LVx1MDAzZXBvcnRzW3BvcnRdO1xuJiM0MztcdHN0cnVjdCB5dDkyMXhfbGVkICpsZWQgPSBwcC1cdTAwM2VsZWRzW2dyb3VwXTtcbiYjNDM7XHR1MzIgY3RybDtcbiYjNDM7XHR1MzIgbWFzaztcbiYjNDM7XG4mIzQzO1x0bGVkLVx1MDAzZXVzZV9jeWNsZSA9IGZhbHNlO1xuJiM0MztcdGxlZC1cdTAwM2V1c2VfZHV0eSA9IGZhbHNlO1xuJiM0MztcbiYjNDM7XHRtYXNrID0gWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW5fTShncm91cCk7XG4mIzQzO1x0Y3RybCA9IG9uID8gWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW5fT04oZ3JvdXApIDpcbiYjNDM7XHQgICAgICAgWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW5fT0ZGKGdyb3VwKTtcbiYjNDM7XHRyZXR1cm4geXQ5MjF4X3JlZ191cGRhdGVfYml0cyhwcml2LCBZVDkyMVhfTEVEMl9QT1JUbihwb3J0KSwgbWFzayxcbiYjNDM7XHRcdFx0XHQgICAgICBjdHJsKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludFxuJiM0Mzt5dDkyMXhfbGVkX2JsaW5rX3NlbGVjdChjb25zdCBzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHVuc2lnbmVkIGxvbmcgb24sXG4mIzQzO1x0XHRcdHVuc2lnbmVkIGxvbmcgb2ZmLCB1bnNpZ25lZCBzaG9ydCAqY3ljbGVwLFxuJiM0MztcdFx0XHR1bnNpZ25lZCBjaGFyICpkdXR5cClcbiYjNDM7e1xuJiM0MztcdHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGR1dHlzW10gPSB7XG4mIzQzO1x0XHRZVDkyMVhfTEVEX0RVVFkoMSwgNiksXG4mIzQzO1x0XHRZVDkyMVhfTEVEX0RVVFkoMSwgNCksXG4mIzQzO1x0XHRZVDkyMVhfTEVEX0RVVFkoMSwgMyksXG4mIzQzO1x0XHRZVDkyMVhfTEVEX0RVVFkoMSwgMiksXG4mIzQzO1x0fTtcbiYjNDM7XHR1bnNpZ25lZCBpbnQgY3ljbGVfdXBwZXI7XG4mIzQzO1x0dW5zaWduZWQgaW50IGN5Y2xlX3JlcTtcbiYjNDM7XHR1bnNpZ25lZCBpbnQgZHV0eV9yZXE7XG4mIzQzO1x0dW5zaWduZWQgaW50IGN5Y2xlO1xuJiM0MztcdHVuc2lnbmVkIGludCBkdXR5O1xuJiM0MztcbiYjNDM7XHRjeWNsZSA9IFlUOTIxWF9MRURfQkxJTktfTUFYO1xuJiM0MztcdGN5Y2xlX3VwcGVyID0gY3ljbGUgKiAxMTU4NSAvIDgxOTIgJiM0MzsgMTsgIC8qIE1fU1FSVDIgKiBjeWNsZSAqL1xuJiM0MztcdGlmIChjaGVja19hZGRfb3ZlcmZsb3cob24sIG9mZiwgXHUwMDI2Y3ljbGVfcmVxKSB8fCBjeWNsZV9yZXEgXHUwMDNlPSBjeWNsZV91cHBlcilcbiYjNDM7XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiYjNDM7XG4mIzQzO1x0Zm9yICg7IGN5Y2xlIFx1MDAzZSBZVDkyMVhfTEVEX0JMSU5LX01JTjsgY3ljbGVfdXBwZXIgXHUwMDNlXHUwMDNlPSAxLCBjeWNsZSBcdTAwM2VcdTAwM2U9IDEpXG4mIzQzO1x0XHRpZiAoY3ljbGVfcmVxIFx1MDAzZT0gY3ljbGVfdXBwZXIgXHUwMDNlXHUwMDNlIDEpXG4mIzQzO1x0XHRcdGJyZWFrO1xuJiM0MztcdCpjeWNsZXAgPSBjeWNsZTtcbiYjNDM7XG4mIzQzO1x0ZHV0eV9yZXEgPSBESVZfUk9VTkRfQ0xPU0VTVChZVDkyMVhfTEVEX0RVVFlfREVOT00gKlxuJiM0MztcdFx0XHRcdCAgICAgKG9uIFx1MDAzZSBvZmYgPyBvZmYgOiBvbiksIGN5Y2xlX3JlcSk7XG4mIzQzO1x0Zm9yICh1bnNpZ25lZCBpbnQgaSA9IEFSUkFZX1NJWkUoZHV0eXMpIC0gMTs7IGktLSlcbiYjNDM7XHRcdGlmIChpID09IDAgfHwgZHV0eV9yZXEgXHUwMDNlPSAoZHV0eXNbaSAtIDFdICYjNDM7IGR1dHlzW2ldKSAvIDIpIHtcbiYjNDM7XHRcdFx0ZHV0eSA9IGR1dHlzW2ldO1xuJiM0MztcdFx0XHRicmVhaztcbiYjNDM7XHRcdH1cbiYjNDM7XHRpZiAob24gXHUwMDNlIG9mZilcbiYjNDM7XHRcdGR1dHkgPSBZVDkyMVhfTEVEX0RVVFlfREVOT00gLSBkdXR5O1xuJiM0MztcdCpkdXR5cCA9IGR1dHk7XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50XG4mIzQzO3l0OTIxeF9sZWRfYmxpbmtfc2V0KHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgaW50IHBvcnQsIGludCBncm91cCxcbiYjNDM7XHRcdCAgICAgdW5zaWduZWQgbG9uZyAqb25wLCB1bnNpZ25lZCBsb25nICpvZmZwKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHl0OTIxeF9wb3J0ICpwcCA9IFx1MDAyNnByaXYtXHUwMDNlcG9ydHNbcG9ydF07XG4mIzQzO1x0c3RydWN0IHl0OTIxeF9sZWQgKmxlZCA9IHBwLVx1MDAzZWxlZHNbZ3JvdXBdO1xuJiM0MztcdHVuc2lnbmVkIHNob3J0IGN5Y2xlO1xuJiM0MztcdHVuc2lnbmVkIGNoYXIgZHV0eTtcbiYjNDM7XHRib29sIHVzZV9jeWNsZTtcbiYjNDM7XHR1MzIgY3RybDtcbiYjNDM7XHR1MzIgbWFzaztcbiYjNDM7XHR1MzIgdmFsO1xuJiM0MztcdGludCByZXM7XG4mIzQzO1xuJiM0MztcdGlmICghKm9ucCBcdTAwMjZcdTAwMjYgISpvZmZwKSB7XG4mIzQzO1x0XHRjeWNsZSA9IFlUOTIxWF9MRURfQkxJTktfREVGO1xuJiM0MztcdFx0ZHV0eSA9IFlUOTIxWF9MRURfRFVUWSgxLCAyKTtcbiYjNDM7XHRcdGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIFx1MDAzYyBZVDkyMVhfTEVEX0dST1VQX05VTTsgaSYjNDM7JiM0MzspXG4mIzQzO1x0XHRcdGlmIChpICE9IGdyb3VwIFx1MDAyNlx1MDAyNiBwcC1cdTAwM2VsZWRzW2ldIFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0XHQgICAgcHAtXHUwMDNlbGVkc1tpXS1cdTAwM2V1c2VfZHV0eSkge1xuJiM0MztcdFx0XHRcdGR1dHkgPSBwcC1cdTAwM2VsZWRfZHV0eTtcbiYjNDM7XHRcdFx0XHRicmVhaztcbiYjNDM7XHRcdFx0fVxuJiM0MztcbiYjNDM7XHRcdHVzZV9jeWNsZSA9IGZhbHNlO1xuJiM0MztcdH0gZWxzZSB7XG4mIzQzO1x0XHRib29sIGNoYW5nZV9jeWNsZTtcbiYjNDM7XHRcdGJvb2wgY2hhbmdlX2R1dHk7XG4mIzQzO1xuJiM0MztcdFx0cmVzID0geXQ5MjF4X2xlZF9ibGlua19zZWxlY3QocHJpdiwgKm9ucCwgKm9mZnAsIFx1MDAyNmN5Y2xlLCBcdTAwMjZkdXR5KTtcbiYjNDM7XHRcdGlmIChyZXMpXG4mIzQzO1x0XHRcdHJldHVybiByZXM7XG4mIzQzO1xuJiM0MztcdFx0dXNlX2N5Y2xlID0gY3ljbGUgXHUwMDNjIFlUOTIxWF9MRURfQkxJTktfREVGO1xuJiM0MztcdFx0Y2hhbmdlX2N5Y2xlID0gdXNlX2N5Y2xlIFx1MDAyNlx1MDAyNiBjeWNsZSAhPSBwcC1cdTAwM2VsZWRfY3ljbGU7XG4mIzQzO1x0XHRjaGFuZ2VfZHV0eSA9IGR1dHkgIT0gcHAtXHUwMDNlbGVkX2R1dHk7XG4mIzQzO1x0XHRpZiAoY2hhbmdlX2N5Y2xlIHx8IGNoYW5nZV9kdXR5KVxuJiM0MztcdFx0XHRmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSBcdTAwM2MgWVQ5MjFYX0xFRF9HUk9VUF9OVU07XG4mIzQzO1x0XHRcdCAgICAgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdFx0XHRpZiAoaSA9PSBncm91cCB8fCAhcHAtXHUwMDNlbGVkc1tpXSlcbiYjNDM7XHRcdFx0XHRcdGNvbnRpbnVlO1xuJiM0MztcdFx0XHRcdGlmICgoY2hhbmdlX2N5Y2xlIFx1MDAyNlx1MDAyNiBwcC1cdTAwM2VsZWRzW2ldLVx1MDAzZXVzZV9jeWNsZSkgfHxcbiYjNDM7XHRcdFx0XHQgICAgKGNoYW5nZV9kdXR5IFx1MDAyNlx1MDAyNiBwcC1cdTAwM2VsZWRzW2ldLVx1MDAzZXVzZV9kdXR5KSlcbiYjNDM7XHRcdFx0XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiYjNDM7XHRcdFx0fVxuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0LyogVGhlIGNoaXAgc2VlbXMgdG8gamFtIGEgd2hpbGUgaWYgY2hhbmdpbmcgZHV0eSBkaXJlY3RseSAqL1xuJiM0MztcdHJlcyA9IHl0OTIxeF9yZWdfcmVhZChwcml2LCBZVDkyMVhfTEVEMl9QT1JUbihwb3J0KSwgXHUwMDI2dmFsKTtcbiYjNDM7XHRpZiAocmVzKVxuJiM0MztcdFx0cmV0dXJuIHJlcztcbiYjNDM7XG4mIzQzO1x0Y3RybCA9IHZhbCBcdTAwMjYgfllUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuX00oZ3JvdXApO1xuJiM0MztcdGN0cmwgfD0gWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW5fRE9OVENBUkUoZ3JvdXApO1xuJiM0MztcdGlmICh2YWwgIT0gY3RybCkge1xuJiM0MztcdFx0cmVzID0geXQ5MjF4X3JlZ193cml0ZShwcml2LCBZVDkyMVhfTEVEMl9QT1JUbihwb3J0KSwgY3RybCk7XG4mIzQzO1x0XHRpZiAocmVzKVxuJiM0MztcdFx0XHRyZXR1cm4gcmVzO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0bWFzayA9IFlUOTIxWF9MRUQxX1BPUlRfQkxJTktfRFVUWV9NIHwgWVQ5MjFYX0xFRDFfUE9SVF9CTElOS19EVVRZX0NPTVA7XG4mIzQzO1x0c3dpdGNoIChkdXR5IFx1MDAzZT0gWVQ5MjFYX0xFRF9EVVRZKDEsIDIpID8gZHV0eSA6XG4mIzQzO1x0XHRZVDkyMVhfTEVEX0RVVFlfREVOT00gLSBkdXR5KSB7XG4mIzQzO1x0ZGVmYXVsdDpcbiYjNDM7XHRcdGR1dHkgPSBZVDkyMVhfTEVEX0RVVFkoMSwgMik7XG4mIzQzO1x0XHRmYWxsdGhyb3VnaDtcbiYjNDM7XHRjYXNlIFlUOTIxWF9MRURfRFVUWSgxLCAyKTpcbiYjNDM7XHRcdGN0cmwgPSBZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFlfMV8yO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0Y2FzZSBZVDkyMVhfTEVEX0RVVFkoMiwgMyk6XG4mIzQzO1x0XHRjdHJsID0gWVQ5MjFYX0xFRDFfUE9SVF9CTElOS19EVVRZXzJfMztcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdGNhc2UgWVQ5MjFYX0xFRF9EVVRZKDMsIDQpOlxuJiM0MztcdFx0Y3RybCA9IFlUOTIxWF9MRUQxX1BPUlRfQkxJTktfRFVUWV8zXzQ7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHRjYXNlIFlUOTIxWF9MRURfRFVUWSg1LCA2KTpcbiYjNDM7XHRcdGN0cmwgPSBZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFlfNV82O1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0fVxuJiM0MztcdGlmIChkdXR5IFx1MDAzYyBZVDkyMVhfTEVEX0RVVFkoMSwgMikpXG4mIzQzO1x0XHRjdHJsIHw9IFlUOTIxWF9MRUQxX1BPUlRfQkxJTktfRFVUWV9DT01QO1xuJiM0MztcdGlmICh1c2VfY3ljbGUpIHtcbiYjNDM7XHRcdG1hc2sgfD0gWVQ5MjFYX0xFRDFfUE9SVF9PVEhFUl9CTElOS19NO1xuJiM0MztcdFx0Y3RybCB8PSBZVDkyMVhfTEVEMV9QT1JUX09USEVSX0JMSU5LKDkgLSBfX2ZscyhjeWNsZSkpO1xuJiM0MztcdH1cbiYjNDM7XHRyZXMgPSB5dDkyMXhfcmVnX3VwZGF0ZV9iaXRzKHByaXYsIFlUOTIxWF9MRUQxX1BPUlRuKHBvcnQpLCBtYXNrLCBjdHJsKTtcbiYjNDM7XHRpZiAocmVzKVxuJiM0MztcdFx0cmV0dXJuIHJlcztcbiYjNDM7XG4mIzQzO1x0Y3RybCA9IHZhbCBcdTAwMjYgfihZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbl9NKGdyb3VwKSB8XG4mIzQzO1x0XHQgICAgICAgWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRV9CTElOS25fTShncm91cCkpO1xuJiM0MztcdGN0cmwgfD0gWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW5fQkxJTksoZ3JvdXApO1xuJiM0MztcdGlmICh1c2VfY3ljbGUpXG4mIzQzO1x0XHRjdHJsIHw9IFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VfQkxJTktuX09USEVSKGdyb3VwKTtcbiYjNDM7XHRlbHNlXG4mIzQzO1x0XHRjdHJsIHw9IFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VfQkxJTktuKGdyb3VwLCBfX2ZscyhjeWNsZSkgLSA5KTtcbiYjNDM7XHRyZXMgPSB5dDkyMXhfcmVnX3dyaXRlKHByaXYsIFlUOTIxWF9MRUQyX1BPUlRuKHBvcnQpLCBjdHJsKTtcbiYjNDM7XHRpZiAocmVzKVxuJiM0MztcdFx0cmV0dXJuIHJlcztcbiYjNDM7XG4mIzQzO1x0bGVkLVx1MDAzZXVzZV9jeWNsZSA9IHVzZV9jeWNsZTtcbiYjNDM7XHRpZiAodXNlX2N5Y2xlKVxuJiM0MztcdFx0cHAtXHUwMDNlbGVkX2N5Y2xlID0gY3ljbGU7XG4mIzQzO1x0bGVkLVx1MDAzZXVzZV9kdXR5ID0gdHJ1ZTtcbiYjNDM7XHRwcC1cdTAwM2VsZWRfZHV0eSA9IGR1dHk7XG4mIzQzO1xuJiM0MztcdCpvbnAgPSBESVZfUk9VTkRfQ0xPU0VTVChkdXR5ICogY3ljbGUsIFlUOTIxWF9MRURfRFVUWV9ERU5PTSk7XG4mIzQzO1x0Km9mZnAgPSBjeWNsZSAtICpvbnA7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0cnVjdCB5dDkyMXhfbGVkX3RyaWdnZXJfbWFwIHtcbiYjNDM7XHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuJiM0MztcdHUzMiBtYXNrO1xuJiM0Mzt9O1xuJiM0MztcbiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCB5dDkyMXhfbGVkX3RyaWdnZXJfbWFwIHl0OTIxeF9sZWRfdHJpZ2dlcl9tYXBzW10gPSB7XG4mIzQzO1x0e0JJVChUUklHR0VSX05FVERFVl9MSU5LKSxcbiYjNDM7XHQgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfRFVQTEVYX0hBTEYgfCBZVDkyMVhfTEVEeF9QT1JUX0FDVF9EVVBMRVhfRlVMTH0sXG4mIzQzO1x0e0JJVChUUklHR0VSX05FVERFVl9MSU5LXzEwKSwgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfMTBNfSxcbiYjNDM7XHR7QklUKFRSSUdHRVJfTkVUREVWX0xJTktfMTAwKSwgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfMTAwTX0sXG4mIzQzO1x0e0JJVChUUklHR0VSX05FVERFVl9MSU5LXzEwMDApLCBZVDkyMVhfTEVEeF9QT1JUX0FDVF8xMDAwTX0sXG4mIzQzO1x0e0JJVChUUklHR0VSX05FVERFVl9IQUxGX0RVUExFWCksIFlUOTIxWF9MRUR4X1BPUlRfQUNUX0RVUExFWF9IQUxGfSxcbiYjNDM7XHR7QklUKFRSSUdHRVJfTkVUREVWX0ZVTExfRFVQTEVYKSwgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfRFVQTEVYX0ZVTEx9LFxuJiM0MztcdHtCSVQoVFJJR0dFUl9ORVRERVZfVFgpLCBZVDkyMVhfTEVEeF9QT1JUX0FDVF9UWF9CTElOS30sXG4mIzQzO1x0e0JJVChUUklHR0VSX05FVERFVl9SWCksIFlUOTIxWF9MRUR4X1BPUlRfQUNUX1JYX0JMSU5LfSxcbiYjNDM7XHR7QklUKFRSSUdHRVJfTkVUREVWX1RYX0VSUikgfCBCSVQoVFJJR0dFUl9ORVRERVZfUlhfRVJSKSxcbiYjNDM7XHQgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfQ09MTElTSU9OX0JMSU5LfSxcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO3N0YXRpYyBib29sXG4mIzQzO3l0OTIxeF9sZWRfdHJpZ2dlcl9pc19zdXBwb3J0ZWQoY29uc3Qgc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCBpbnQgcG9ydCxcbiYjNDM7XHRcdFx0XHRpbnQgZ3JvdXAsIHVuc2lnbmVkIGxvbmcgZmxhZ3MpXG4mIzQzO3tcbiYjNDM7XHRpZiAoIWZsYWdzKVxuJiM0MztcdFx0cmV0dXJuIHRydWU7XG4mIzQzO1xuJiM0MztcdGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIFx1MDAzYyBBUlJBWV9TSVpFKHl0OTIxeF9sZWRfdHJpZ2dlcl9tYXBzKTsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdGNvbnN0IHN0cnVjdCB5dDkyMXhfbGVkX3RyaWdnZXJfbWFwICptYXAgPSBcdTAwMjZ5dDkyMXhfbGVkX3RyaWdnZXJfbWFwc1tpXTtcbiYjNDM7XG4mIzQzO1x0XHRpZiAoKGZsYWdzIFx1MDAyNiBtYXAtXHUwMDNlZmxhZ3MpID09IG1hcC1cdTAwM2VmbGFncykge1xuJiM0MztcdFx0XHRmbGFncyBcdTAwMjY9IH5tYXAtXHUwMDNlZmxhZ3M7XG4mIzQzO1x0XHRcdGlmICghZmxhZ3MpXG4mIzQzO1x0XHRcdFx0cmV0dXJuIHRydWU7XG4mIzQzO1x0XHR9XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gZmFsc2U7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnRcbiYjNDM7eXQ5MjF4X2xlZF90cmlnZ2VyX2dldChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIGludCBwb3J0LCBpbnQgZ3JvdXAsXG4mIzQzO1x0XHQgICAgICAgdW5zaWduZWQgbG9uZyAqZmxhZ3NwKVxuJiM0Mzt7XG4mIzQzO1x0dTMyIGFkZHI7XG4mIzQzO1x0dTMyIHZhbDtcbiYjNDM7XHRpbnQgcmVzO1xuJiM0MztcbiYjNDM7XHRyZXMgPSB5dDkyMXhfcmVnX3JlYWQocHJpdiwgWVQ5MjFYX0xFRDJfUE9SVG4ocG9ydCksIFx1MDAyNnZhbCk7XG4mIzQzO1x0aWYgKHJlcylcbiYjNDM7XHRcdHJldHVybiByZXM7XG4mIzQzO1xuJiM0MztcdGlmICgodmFsIFx1MDAyNiBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbl9NKGdyb3VwKSkgIT1cbiYjNDM7XHQgICAgWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW5fRE9OVENBUkUoZ3JvdXApKSB7XG4mIzQzO1x0XHQqZmxhZ3NwID0gMDtcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKGdyb3VwICE9IDIpIHtcbiYjNDM7XHRcdGFkZHIgPSB5dDkyMXhfbGVkX3JlZ2FkZHIocHJpdiwgcG9ydCwgZ3JvdXApO1xuJiM0MztcdFx0cmVzID0geXQ5MjF4X3JlZ19yZWFkKHByaXYsIGFkZHIsIFx1MDAyNnZhbCk7XG4mIzQzO1x0XHRpZiAocmVzKVxuJiM0MztcdFx0XHRyZXR1cm4gcmVzO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0KmZsYWdzcCA9IDA7XG4mIzQzO1x0Zm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgXHUwMDNjIEFSUkFZX1NJWkUoeXQ5MjF4X2xlZF90cmlnZ2VyX21hcHMpOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0Y29uc3Qgc3RydWN0IHl0OTIxeF9sZWRfdHJpZ2dlcl9tYXAgKm1hcCA9IFx1MDAyNnl0OTIxeF9sZWRfdHJpZ2dlcl9tYXBzW2ldO1xuJiM0MztcbiYjNDM7XHRcdGlmICgodmFsIFx1MDAyNiBtYXAtXHUwMDNlbWFzaykgPT0gbWFwLVx1MDAzZW1hc2spXG4mIzQzO1x0XHRcdCpmbGFnc3AgfD0gbWFwLVx1MDAzZWZsYWdzO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnRcbiYjNDM7eXQ5MjF4X2xlZF90cmlnZ2VyX3NldChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIGludCBwb3J0LCBpbnQgZ3JvdXAsXG4mIzQzO1x0XHQgICAgICAgdW5zaWduZWQgbG9uZyBmbGFncylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB5dDkyMXhfcG9ydCAqcHAgPSBcdTAwMjZwcml2LVx1MDAzZXBvcnRzW3BvcnRdO1xuJiM0MztcdHN0cnVjdCB5dDkyMXhfbGVkICpsZWQgPSBwcC1cdTAwM2VsZWRzW2dyb3VwXTtcbiYjNDM7XHR1MzIgYWRkcjtcbiYjNDM7XHR1MzIgY3RybDtcbiYjNDM7XHR1MzIgbWFzaztcbiYjNDM7XHRpbnQgcmVzO1xuJiM0MztcbiYjNDM7XHRjdHJsID0gMDtcbiYjNDM7XHRmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSBcdTAwM2MgQVJSQVlfU0laRSh5dDkyMXhfbGVkX3RyaWdnZXJfbWFwcyk7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRjb25zdCBzdHJ1Y3QgeXQ5MjF4X2xlZF90cmlnZ2VyX21hcCAqbWFwID0gXHUwMDI2eXQ5MjF4X2xlZF90cmlnZ2VyX21hcHNbaV07XG4mIzQzO1xuJiM0MztcdFx0aWYgKChmbGFncyBcdTAwMjYgbWFwLVx1MDAzZWZsYWdzKSA9PSBtYXAtXHUwMDNlZmxhZ3MpIHtcbiYjNDM7XHRcdFx0ZmxhZ3MgXHUwMDI2PSB+bWFwLVx1MDAzZWZsYWdzO1xuJiM0MztcdFx0XHRjdHJsIHw9IG1hcC1cdTAwM2VtYXNrO1xuJiM0MztcdFx0XHRpZiAoIWZsYWdzKVxuJiM0MztcdFx0XHRcdGJyZWFrO1xuJiM0MztcdFx0fVxuJiM0MztcdH1cbiYjNDM7XHRpZiAoZmxhZ3MpXG4mIzQzO1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4mIzQzO1xuJiM0MztcdGxlZC1cdTAwM2V1c2VfY3ljbGUgPSBmYWxzZTtcbiYjNDM7XHRsZWQtXHUwMDNldXNlX2R1dHkgPSBmYWxzZTtcbiYjNDM7XG4mIzQzO1x0bWFzayA9ICFncm91cCA/IFlUOTIxWF9MRUQwX1BPUlRfQUNUX00gOiBZVDkyMVhfTEVEeF9QT1JUX0FDVF9NO1xuJiM0MztcdGlmIChncm91cCA9PSAyKSB7XG4mIzQzO1x0XHRtYXNrIHw9IFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuX00oZ3JvdXApO1xuJiM0MztcdFx0Y3RybCB8PSBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbl9ET05UQ0FSRShncm91cCk7XG4mIzQzO1x0fVxuJiM0MztcdGFkZHIgPSB5dDkyMXhfbGVkX3JlZ2FkZHIocHJpdiwgcG9ydCwgZ3JvdXApO1xuJiM0MztcdHJlcyA9IHl0OTIxeF9yZWdfdXBkYXRlX2JpdHMocHJpdiwgYWRkciwgbWFzaywgY3RybCk7XG4mIzQzO1x0aWYgKHJlcylcbiYjNDM7XHRcdHJldHVybiByZXM7XG4mIzQzO1xuJiM0MztcdGlmIChncm91cCAhPSAyKSB7XG4mIzQzO1x0XHRtYXNrID0gWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW5fTShncm91cCk7XG4mIzQzO1x0XHRjdHJsID0gWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW5fRE9OVENBUkUoZ3JvdXApO1xuJiM0MztcdFx0cmVzID0geXQ5MjF4X3JlZ191cGRhdGVfYml0cyhwcml2LCBZVDkyMVhfTEVEMl9QT1JUbihwb3J0KSxcbiYjNDM7XHRcdFx0XHRcdCAgICAgbWFzaywgY3RybCk7XG4mIzQzO1x0XHRpZiAocmVzKVxuJiM0MztcdFx0XHRyZXR1cm4gcmVzO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnRcbiYjNDM7eXQ5MjF4X2NsZWRfYnJpZ2h0bmVzc19zZXRfYmxvY2tpbmcoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYsXG4mIzQzO1x0XHRcdFx0ICAgIGVudW0gbGVkX2JyaWdodG5lc3MgYnJpZ2h0bmVzcylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB5dDkyMXhfbGVkICpsZWQgPSB0b195dDkyMXhfbGVkKGxlZF9jZGV2KTtcbiYjNDM7XHRzdHJ1Y3QgeXQ5MjF4X3BvcnQgKnBwID0gdG9feXQ5MjF4X3BvcnQobGVkKTtcbiYjNDM7XHRzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYgPSB0b195dDkyMXhfcHJpdihwcCk7XG4mIzQzO1x0aW50IHJlcztcbiYjNDM7XG4mIzQzO1x0bXV0ZXhfbG9jayhcdTAwMjZwcml2LVx1MDAzZXJlZ19sb2NrKTtcbiYjNDM7XHRyZXMgPSB5dDkyMXhfbGVkX2ZvcmNlX3NldChwcml2LCBwcC1cdTAwM2VpbmRleCwgbGVkLVx1MDAzZWdyb3VwLCBicmlnaHRuZXNzKTtcbiYjNDM7XHRtdXRleF91bmxvY2soXHUwMDI2cHJpdi1cdTAwM2VyZWdfbG9jayk7XG4mIzQzO1xuJiM0MztcdHJldHVybiByZXM7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnRcbiYjNDM7eXQ5MjF4X2NsZWRfYmxpbmtfc2V0KHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2LCB1bnNpZ25lZCBsb25nICpkZWxheV9vbixcbiYjNDM7XHRcdCAgICAgIHVuc2lnbmVkIGxvbmcgKmRlbGF5X29mZilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB5dDkyMXhfbGVkICpsZWQgPSB0b195dDkyMXhfbGVkKGxlZF9jZGV2KTtcbiYjNDM7XHRzdHJ1Y3QgeXQ5MjF4X3BvcnQgKnBwID0gdG9feXQ5MjF4X3BvcnQobGVkKTtcbiYjNDM7XHRzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYgPSB0b195dDkyMXhfcHJpdihwcCk7XG4mIzQzO1x0aW50IHJlcztcbiYjNDM7XG4mIzQzO1x0bXV0ZXhfbG9jayhcdTAwMjZwcml2LVx1MDAzZXJlZ19sb2NrKTtcbiYjNDM7XHRyZXMgPSB5dDkyMXhfbGVkX2JsaW5rX3NldChwcml2LCBwcC1cdTAwM2VpbmRleCwgbGVkLVx1MDAzZWdyb3VwLCBkZWxheV9vbixcbiYjNDM7XHRcdFx0XHQgICBkZWxheV9vZmYpO1xuJiM0MztcdG11dGV4X3VubG9jayhcdTAwMjZwcml2LVx1MDAzZXJlZ19sb2NrKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHJlcztcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHN0cnVjdCBkZXZpY2UgKiBfX21heWJlX3VudXNlZFxuJiM0Mzt5dDkyMXhfY2xlZF9od19jb250cm9sX2dldF9kZXZpY2Uoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgeXQ5MjF4X2xlZCAqbGVkID0gdG9feXQ5MjF4X2xlZChsZWRfY2Rldik7XG4mIzQzO1x0c3RydWN0IHl0OTIxeF9wb3J0ICpwcCA9IHRvX3l0OTIxeF9wb3J0KGxlZCk7XG4mIzQzO1x0c3RydWN0IHl0OTIxeF9wcml2ICpwcml2ID0gdG9feXQ5MjF4X3ByaXYocHApO1xuJiM0MztcdHN0cnVjdCBkc2FfcG9ydCAqZHA7XG4mIzQzO1xuJiM0MztcdGRwID0gZHNhX3RvX3BvcnQoXHUwMDI2cHJpdi1cdTAwM2VkcywgcHAtXHUwMDNlaW5kZXgpO1xuJiM0MztcdGlmICghZHApXG4mIzQzO1x0XHRyZXR1cm4gTlVMTDtcbiYjNDM7XG4mIzQzO1x0aWYgKGRzYV9wb3J0X2lzX3VzZXIoZHApKVxuJiM0MztcdFx0cmV0dXJuIFx1MDAyNmRwLVx1MDAzZXVzZXItXHUwMDNlZGV2O1xuJiM0MztcdGlmIChkc2FfcG9ydF9pc19jcHUoZHApKVxuJiM0MztcdFx0cmV0dXJuIFx1MDAyNmRwLVx1MDAzZWNvbmR1aXQtXHUwMDNlZGV2O1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gTlVMTDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBfX21heWJlX3VudXNlZFxuJiM0Mzt5dDkyMXhfY2xlZF9od19jb250cm9sX2lzX3N1cHBvcnRlZChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldixcbiYjNDM7XHRcdFx0XHQgICAgdW5zaWduZWQgbG9uZyBmbGFncylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB5dDkyMXhfbGVkICpsZWQgPSB0b195dDkyMXhfbGVkKGxlZF9jZGV2KTtcbiYjNDM7XHRzdHJ1Y3QgeXQ5MjF4X3BvcnQgKnBwID0gdG9feXQ5MjF4X3BvcnQobGVkKTtcbiYjNDM7XHRzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYgPSB0b195dDkyMXhfcHJpdihwcCk7XG4mIzQzO1xuJiM0MztcdGlmICh5dDkyMXhfbGVkX3RyaWdnZXJfaXNfc3VwcG9ydGVkKHByaXYsIHBwLVx1MDAzZWluZGV4LCBsZWQtXHUwMDNlZ3JvdXAsIGZsYWdzKSlcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcdHJldHVybiAtRU9QTk9UU1VQUDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBfX21heWJlX3VudXNlZFxuJiM0Mzt5dDkyMXhfY2xlZF9od19jb250cm9sX2dldChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldiwgdW5zaWduZWQgbG9uZyAqZmxhZ3NwKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHl0OTIxeF9sZWQgKmxlZCA9IHRvX3l0OTIxeF9sZWQobGVkX2NkZXYpO1xuJiM0MztcdHN0cnVjdCB5dDkyMXhfcG9ydCAqcHAgPSB0b195dDkyMXhfcG9ydChsZWQpO1xuJiM0MztcdHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiA9IHRvX3l0OTIxeF9wcml2KHBwKTtcbiYjNDM7XHRpbnQgcmVzO1xuJiM0MztcbiYjNDM7XHRtdXRleF9sb2NrKFx1MDAyNnByaXYtXHUwMDNlcmVnX2xvY2spO1xuJiM0MztcdHJlcyA9IHl0OTIxeF9sZWRfdHJpZ2dlcl9nZXQocHJpdiwgcHAtXHUwMDNlaW5kZXgsIGxlZC1cdTAwM2Vncm91cCwgZmxhZ3NwKTtcbiYjNDM7XHRtdXRleF91bmxvY2soXHUwMDI2cHJpdi1cdTAwM2VyZWdfbG9jayk7XG4mIzQzO1xuJiM0MztcdHJldHVybiByZXM7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgX19tYXliZV91bnVzZWRcbiYjNDM7eXQ5MjF4X2NsZWRfaHdfY29udHJvbF9zZXQoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYsIHVuc2lnbmVkIGxvbmcgZmxhZ3MpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgeXQ5MjF4X2xlZCAqbGVkID0gdG9feXQ5MjF4X2xlZChsZWRfY2Rldik7XG4mIzQzO1x0c3RydWN0IHl0OTIxeF9wb3J0ICpwcCA9IHRvX3l0OTIxeF9wb3J0KGxlZCk7XG4mIzQzO1x0c3RydWN0IHl0OTIxeF9wcml2ICpwcml2ID0gdG9feXQ5MjF4X3ByaXYocHApO1xuJiM0MztcdGludCByZXM7XG4mIzQzO1xuJiM0MztcdG11dGV4X2xvY2soXHUwMDI2cHJpdi1cdTAwM2VyZWdfbG9jayk7XG4mIzQzO1x0cmVzID0geXQ5MjF4X2xlZF90cmlnZ2VyX3NldChwcml2LCBwcC1cdTAwM2VpbmRleCwgbGVkLVx1MDAzZWdyb3VwLCBmbGFncyk7XG4mIzQzO1x0bXV0ZXhfdW5sb2NrKFx1MDAyNnByaXYtXHUwMDNlcmVnX2xvY2spO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gcmVzO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50XG4mIzQzO3l0OTIxeF9sZWRfc2V0dXAoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCBpbnQgcG9ydCxcbiYjNDM7XHRcdCBzdHJ1Y3QgZndub2RlX2hhbmRsZSAqZndub2RlKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHl0OTIxeF9wb3J0ICpwcCA9IFx1MDAyNnByaXYtXHUwMDNlcG9ydHNbcG9ydF07XG4mIzQzO1x0c3RydWN0IGRldmljZSAqZGV2ID0gdG9fZGV2aWNlKHByaXYpO1xuJiM0MztcdHN0cnVjdCBsZWRfaW5pdF9kYXRhIGluaXRfZGF0YTtcbiYjNDM7XHRzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldjtcbiYjNDM7XHRjaGFyIG5hbWVbTEVEX01BWF9OQU1FX1NJWkVdO1xuJiM0MztcdGVudW0gbGVkX2RlZmF1bHRfc3RhdGUgc3RhdGU7XG4mIzQzO1x0c3RydWN0IHl0OTIxeF9sZWQgKmxlZDtcbiYjNDM7XHRib29sIGZvcmNlX2hpZ2g7XG4mIzQzO1x0Ym9vbCBmb3JjZV9sb3c7XG4mIzQzO1x0dTMyIGdyb3VwO1xuJiM0MztcdHUzMiBtYXNrO1xuJiM0MztcdHUzMiBjdHJsO1xuJiM0MztcdHUzMiB2YWw7XG4mIzQzO1x0Ym9vbCBvbjtcbiYjNDM7XHRpbnQgcmVzO1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdHJlcyA9IGZ3bm9kZV9wcm9wZXJ0eV9yZWFkX3UzMihmd25vZGUsIFwmIzM0O3JlZ1wmIzM0OywgXHUwMDI2Z3JvdXApO1xuJiM0MztcdGlmIChyZXMpXG4mIzQzO1x0XHRyZXR1cm4gcmVzO1xuJiM0MztcdGlmIChncm91cCBcdTAwM2U9IFlUOTIxWF9MRURfR1JPVVBfTlVNKSB7XG4mIzQzO1x0XHRkZXZfZXJyKGRldiwgXCYjMzQ7SW52YWxpZCBMRUQgcmVnICV1IGZvciBwb3J0ICVkXFxuXCYjMzQ7LCBncm91cCwgcG9ydCk7XG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XHR9XG4mIzQzO1x0aWYgKHBwLVx1MDAzZWxlZHNbZ3JvdXBdKVxuJiM0MztcdFx0cmV0dXJuIC1FRVhJU1Q7XG4mIzQzO1xuJiM0MztcdGZvcmNlX2hpZ2ggPSBmd25vZGVfcHJvcGVydHlfcmVhZF9ib29sKGZ3bm9kZSwgXCYjMzQ7YWN0aXZlLWhpZ2hcJiMzNDspO1xuJiM0MztcdGZvcmNlX2xvdyA9IGZ3bm9kZV9wcm9wZXJ0eV9yZWFkX2Jvb2woZndub2RlLCBcJiMzNDthY3RpdmUtbG93XCYjMzQ7KTtcbiYjNDM7XHRpZiAoZm9yY2VfaGlnaCBcdTAwMjZcdTAwMjYgZm9yY2VfbG93KSB7XG4mIzQzO1x0XHRkZXZfZXJyKGRldiwgXCYjMzQ7RHVwbGljYXRlIHBvbGFyaXRpZXMgZm9yIExFRCAlMDJkOiUwMnVcXG5cJiMzNDssXG4mIzQzO1x0XHRcdHBvcnQsIGdyb3VwKTtcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0bGVkID0gZGV2bV9remFsbG9jKGRldiwgc2l6ZW9mKCpsZWQpLCBHRlBfS0VSTkVMKTtcbiYjNDM7XHRpZiAoIWxlZClcbiYjNDM7XHRcdHJldHVybiAtRU5PTUVNO1xuJiM0MztcdGxlZC1cdTAwM2Vwb3J0ID0gcHA7XG4mIzQzO1x0bGVkLVx1MDAzZWdyb3VwID0gZ3JvdXA7XG4mIzQzO1xuJiM0MztcdHN0YXRlID0gbGVkX2luaXRfZGVmYXVsdF9zdGF0ZV9nZXQoZndub2RlKTtcbiYjNDM7XG4mIzQzO1x0bXV0ZXhfbG9jayhcdTAwMjZwcml2LVx1MDAzZXJlZ19sb2NrKTtcbiYjNDM7XG4mIzQzO1x0LyogSW52ZXJzaW9uIGlzIGludGVybmFsIC0gZm9yY2Ugb24gd2lsbCBnaXZlIGxvdyBsb2dpYy5cbiYjNDM7XHQgKiBJbiB0aGUgcmVzdCBvZiB0aGUgZmlsZSwgdHJlYXQgTEVEcyBhcyBpZiBhY3RpdmUtbG93LlxuJiM0MztcdCAqL1xuJiM0MztcdGlmIChmb3JjZV9oaWdoIHx8IGZvcmNlX2xvdykge1xuJiM0MztcdFx0cmVzID0geXQ5MjF4X3JlZ19yZWFkKHByaXYsIFlUOTIxWF9MRURfUEFSX0lOViwgXHUwMDI2dmFsKTtcbiYjNDM7XHRcdGlmIChyZXMpXG4mIzQzO1x0XHRcdGdvdG8gdW5sb2NrO1xuJiM0MztcbiYjNDM7XHRcdG1hc2sgPSBZVDkyMVhfTEVEX1BBUl9JTlZfSU5Wbm0oZ3JvdXAsIHBvcnQpO1xuJiM0MztcdFx0Y3RybCA9IGZvcmNlX2hpZ2ggPyB2YWwgfCBtYXNrIDogdmFsIFx1MDAyNiB+bWFzaztcbiYjNDM7XHRcdHJlcyA9IHl0OTIxeF9yZWdfd3JpdGUocHJpdiwgWVQ5MjFYX0xFRF9QQVJfSU5WLCBjdHJsKTtcbiYjNDM7XHRcdGlmIChyZXMpXG4mIzQzO1x0XHRcdGdvdG8gdW5sb2NrO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cHAtXHUwMDNlbGVkc1tncm91cF0gPSBsZWQ7XG4mIzQzO1xuJiM0MztcdHN3aXRjaCAoc3RhdGUpIHtcbiYjNDM7XHRjYXNlIExFRFNfREVGU1RBVEVfT0ZGOlxuJiM0MztcdGNhc2UgTEVEU19ERUZTVEFURV9PTjpcbiYjNDM7XHRkZWZhdWx0OlxuJiM0MztcdFx0b24gPSBzdGF0ZSA9PSBMRURTX0RFRlNUQVRFX09OO1xuJiM0MztcdFx0cmVzID0geXQ5MjF4X2xlZF9mb3JjZV9zZXQocHJpdiwgcG9ydCwgZ3JvdXAsIG9uKTtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdGNhc2UgTEVEU19ERUZTVEFURV9LRUVQOlxuJiM0MztcdFx0cmVzID0geXQ5MjF4X2xlZF9mb3JjZV9nZXQocHJpdiwgcG9ydCwgZ3JvdXAsIFx1MDAyNm9uKTtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO3VubG9jazpcbiYjNDM7XHRtdXRleF91bmxvY2soXHUwMDI2cHJpdi1cdTAwM2VyZWdfbG9jayk7XG4mIzQzO1x0aWYgKHJlcylcbiYjNDM7XHRcdGdvdG8gZXJyO1xuJiM0MztcbiYjNDM7XHRsZWRfY2RldiA9IFx1MDAyNmxlZC1cdTAwM2VjZGV2O1xuJiM0MztcdGxlZF9jZGV2LVx1MDAzZWJyaWdodG5lc3MgPSBvbjtcbiYjNDM7XHRsZWRfY2Rldi1cdTAwM2VtYXhfYnJpZ2h0bmVzcyA9IDE7XG4mIzQzO1x0bGVkX2NkZXYtXHUwMDNlZmxhZ3MgPSBMRURfUkVUQUlOX0FUX1NIVVRET1dOO1xuJiM0MztcdGxlZF9jZGV2LVx1MDAzZWJyaWdodG5lc3Nfc2V0X2Jsb2NraW5nID0geXQ5MjF4X2NsZWRfYnJpZ2h0bmVzc19zZXRfYmxvY2tpbmc7XG4mIzQzO1x0bGVkX2NkZXYtXHUwMDNlYmxpbmtfc2V0ID0geXQ5MjF4X2NsZWRfYmxpbmtfc2V0O1xuJiM0MzsjaWZkZWYgQ09ORklHX0xFRFNfVFJJR0dFUlNcbiYjNDM7XHRsZWRfY2Rldi1cdTAwM2Vod19jb250cm9sX3RyaWdnZXIgPSBcJiMzNDtuZXRkZXZcJiMzNDs7XG4mIzQzO1x0bGVkX2NkZXYtXHUwMDNlaHdfY29udHJvbF9nZXRfZGV2aWNlID0geXQ5MjF4X2NsZWRfaHdfY29udHJvbF9nZXRfZGV2aWNlO1xuJiM0MztcdGxlZF9jZGV2LVx1MDAzZWh3X2NvbnRyb2xfaXNfc3VwcG9ydGVkID0geXQ5MjF4X2NsZWRfaHdfY29udHJvbF9pc19zdXBwb3J0ZWQ7XG4mIzQzO1x0bGVkX2NkZXYtXHUwMDNlaHdfY29udHJvbF9nZXQgPSB5dDkyMXhfY2xlZF9od19jb250cm9sX2dldDtcbiYjNDM7XHRsZWRfY2Rldi1cdTAwM2Vod19jb250cm9sX3NldCA9IHl0OTIxeF9jbGVkX2h3X2NvbnRyb2xfc2V0O1xuJiM0MzsjZW5kaWZcbiYjNDM7XG4mIzQzO1x0c25wcmludGYobmFtZSwgc2l6ZW9mKG5hbWUpLCBZVDkyMVhfTkFNRSBcJiMzNDstJXU6JTAyZDolMDJ1XCYjMzQ7LFxuJiM0MztcdFx0IHByaXYtXHUwMDNlZHMuaW5kZXgsIHBvcnQsIGdyb3VwKTtcbiYjNDM7XHRpbml0X2RhdGEgPSAodHlwZW9mKGluaXRfZGF0YSkpe1xuJiM0MztcdFx0LmZ3bm9kZSA9IGZ3bm9kZSxcbiYjNDM7XHRcdC5kZWZhdWx0X2xhYmVsID0gXCYjMzQ7OnBvcnRcJiMzNDssXG4mIzQzO1x0XHQuZGV2aWNlbmFtZSA9IG5hbWUsXG4mIzQzO1x0XHQuZGV2bmFtZV9tYW5kYXRvcnkgPSB0cnVlLFxuJiM0MztcdH07XG4mIzQzO1x0cmVzID0gZGV2bV9sZWRfY2xhc3NkZXZfcmVnaXN0ZXJfZXh0KGRldiwgbGVkX2NkZXYsIFx1MDAyNmluaXRfZGF0YSk7XG4mIzQzO1x0aWYgKHJlcylcbiYjNDM7XHRcdGdvdG8gZXJyO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO2VycjpcbiYjNDM7XHRyZXQgPSByZXM7XG4mIzQzO1xuJiM0MztcdG11dGV4X2xvY2soXHUwMDI2cHJpdi1cdTAwM2VyZWdfbG9jayk7XG4mIzQzO1x0aWYgKHBwLVx1MDAzZWxlZHNbZ3JvdXBdKSB7XG4mIzQzO1x0XHRpZiAoZm9yY2VfaGlnaCB8fCBmb3JjZV9sb3cpIHtcbiYjNDM7XHRcdFx0cmVzID0geXQ5MjF4X3JlZ193cml0ZShwcml2LCBZVDkyMVhfTEVEX1BBUl9JTlYsIHZhbCk7XG4mIzQzO1x0XHRcdGlmIChyZXMpXG4mIzQzO1x0XHRcdFx0ZGV2X3dhcm4oZGV2LFxuJiM0MztcdFx0XHRcdFx0IFwmIzM0O0ZhaWxlZCB0byByZXZva2UgaW5pdGlhbGl6YXRpb24gZm9yIExFRCAlMDJkOiUwMnVcXG5cJiMzNDssXG4mIzQzO1x0XHRcdFx0XHQgcG9ydCwgZ3JvdXApO1xuJiM0MztcdFx0fVxuJiM0MztcbiYjNDM7XHRcdHBwLVx1MDAzZWxlZHNbZ3JvdXBdID0gTlVMTDtcbiYjNDM7XHR9XG4mIzQzO1x0bXV0ZXhfdW5sb2NrKFx1MDAyNnByaXYtXHUwMDNlcmVnX2xvY2spO1xuJiM0MztcbiYjNDM7XHRkZXZtX2tmcmVlKGRldiwgbGVkKTtcbiYjNDM7XHRyZXR1cm4gcmV0O1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCB5dDkyMXhfbGVkc19yZW1vdmVfcG9ydChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIGludCBwb3J0KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHl0OTIxeF9wb3J0ICpwcCA9IFx1MDAyNnByaXYtXHUwMDNlcG9ydHNbcG9ydF07XG4mIzQzO1x0c3RydWN0IGRldmljZSAqZGV2ID0gdG9fZGV2aWNlKHByaXYpO1xuJiM0MztcdGJvb2wgaGFzX2xlZHMgPSBmYWxzZTtcbiYjNDM7XG4mIzQzO1x0Zm9yIChpbnQgZ3JvdXAgPSAwOyBncm91cCBcdTAwM2MgWVQ5MjFYX0xFRF9HUk9VUF9OVU07IGdyb3VwJiM0MzsmIzQzOykge1xuJiM0MztcdFx0c3RydWN0IHl0OTIxeF9sZWQgKmxlZCA9IHBwLVx1MDAzZWxlZHNbZ3JvdXBdO1xuJiM0MztcbiYjNDM7XHRcdGlmIChsZWQpIHtcbiYjNDM7XHRcdFx0ZGV2bV9sZWRfY2xhc3NkZXZfdW5yZWdpc3RlcihkZXYsIFx1MDAyNmxlZC1cdTAwM2VjZGV2KTtcbiYjNDM7XHRcdFx0aGFzX2xlZHMgPSB0cnVlO1xuJiM0MztcdFx0fVxuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKCFoYXNfbGVkcylcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0LyogTm93IG5vIG9uZSBjYW4gYWNjZXNzIHRoZSBMRUQgY29udHJvbCBibG9ja3MsIGZyZWUgdGhlbSB3aXRob3V0XG4mIzQzO1x0ICogaG9sZGluZyB0aGUgbG9jay5cbiYjNDM7XHQgKi9cbiYjNDM7XHRmb3IgKGludCBncm91cCA9IDA7IGdyb3VwIFx1MDAzYyBZVDkyMVhfTEVEX0dST1VQX05VTTsgZ3JvdXAmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRzdHJ1Y3QgeXQ5MjF4X2xlZCAqbGVkID0gcHAtXHUwMDNlbGVkc1tncm91cF07XG4mIzQzO1xuJiM0MztcdFx0aWYgKGxlZCkge1xuJiM0MztcdFx0XHRwcC1cdTAwM2VsZWRzW2dyb3VwXSA9IE5VTEw7XG4mIzQzO1x0XHRcdGRldm1fa2ZyZWUoZGV2LCBsZWQpO1xuJiM0MztcdFx0fVxuJiM0MztcdH1cbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCB5dDkyMXhfbGVkc19zZXR1cF9wb3J0KHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgaW50IHBvcnQpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSB0b19kZXZpY2UocHJpdik7XG4mIzQzO1x0c3RydWN0IGRzYV9zd2l0Y2ggKmRzID0gXHUwMDI2cHJpdi1cdTAwM2VkcztcbiYjNDM7XHRzdHJ1Y3QgZGV2aWNlX25vZGUgKmxlZHNfbnA7XG4mIzQzO1x0c3RydWN0IGRzYV9wb3J0ICpkcDtcbiYjNDM7XG4mIzQzO1x0ZHAgPSBkc2FfdG9fcG9ydChkcywgcG9ydCk7XG4mIzQzO1x0bGVkc19ucCA9IG9mX2dldF9jaGlsZF9ieV9uYW1lKGRwLVx1MDAzZWRuLCBcJiMzNDtsZWRzXCYjMzQ7KTtcbiYjNDM7XHRpZiAoIWxlZHNfbnApXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO1x0aWYgKHBvcnQgXHUwMDNlPSBZVDkyMVhfTEVEX1BPUlRfTlVNKSB7XG4mIzQzO1x0XHRkZXZfZXJyKGRldiwgXCYjMzQ7Q2Fubm90IGNvbmZpZ3VyZSBMRURzIGZvciBwb3J0ICVkXFxuXCYjMzQ7LCBwb3J0KTtcbiYjNDM7XHRcdG9mX25vZGVfcHV0KGxlZHNfbnApO1xuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRmb3JfZWFjaF9jaGlsZF9vZl9ub2RlX3Njb3BlZChsZWRzX25wLCBsZWRfbnApIHtcbiYjNDM7XHRcdHl0OTIxeF9sZWRfc2V0dXAocHJpdiwgcG9ydCwgb2ZfZndub2RlX2hhbmRsZShsZWRfbnApKTtcbiYjNDM7XHRcdC8qIEFsbG93IHBhcnRpYWwgY29uZmlndXJhdGlvbjogTEVEcyBhcmUgb3B0aW9uYWwgKi9cbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdG9mX25vZGVfcHV0KGxlZHNfbnApO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0Mzt2b2lkIHl0OTIxeF9sZWRzX3JlbW92ZShzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYpXG4mIzQzO3tcbiYjNDM7XHRmb3IgKGludCBwb3J0ID0gMDsgcG9ydCBcdTAwM2MgWVQ5MjFYX0xFRF9QT1JUX05VTTsgcG9ydCYjNDM7JiM0MzspXG4mIzQzO1x0XHR5dDkyMXhfbGVkc19yZW1vdmVfcG9ydChwcml2LCBwb3J0KTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7aW50IHl0OTIxeF9sZWRzX3NldHVwKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBkc2Ffc3dpdGNoICpkcyA9IFx1MDAyNnByaXYtXHUwMDNlZHM7XG4mIzQzO1x0c3RydWN0IGRzYV9wb3J0ICpkcDtcbiYjNDM7XG4mIzQzO1x0LyogTEVEcyBhcmUgYWx3YXlzIGVuYWJsZWQuIFRoZXJlIGlzIG5vIHdheSB0byBkaXNhYmxlIHRoZW0gYWx0b2dldGhlclxuJiM0MztcdCAqIChhcyBmYXIgYXMgSSBrbm93KS5cbiYjNDM7XHQgKi9cbiYjNDM7XG4mIzQzO1x0ZHNhX3N3aXRjaF9mb3JfZWFjaF9wb3J0KGRwLCBkcykge1xuJiM0MztcdFx0aW50IHBvcnQgPSBkcC1cdTAwM2VpbmRleDtcbiYjNDM7XG4mIzQzO1x0XHRpZiAoIWRwLVx1MDAzZWRuKVxuJiM0MztcdFx0XHRjb250aW51ZTtcbiYjNDM7XG4mIzQzO1x0XHR5dDkyMXhfbGVkc19zZXR1cF9wb3J0KHByaXYsIHBvcnQpO1xuJiM0MztcdFx0LyogQWxsb3cgcGFydGlhbCBjb25maWd1cmF0aW9uOiBMRURzIGFyZSBvcHRpb25hbCAqL1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2xlZHMuaCBiL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vbGVkcy5oXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uM2MzNjQyOTg4YWM3N1xuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9sZWRzLmhcbkBAIC0wLDAgJiM0MzsxLDEyMSBAQFxuJiM0MzsvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vci1sYXRlciAqL1xuJiM0MzsvKlxuJiM0MzsgKiBDb3B5cmlnaHQgKGMpIDIwMjYgRGF2aWQgWWFuZ1xuJiM0MzsgKi9cbiYjNDM7XG4mIzQzOyNpZm5kZWYgX1lUX0xFRFNfSFxuJiM0MzsjZGVmaW5lIF9ZVF9MRURTX0hcbiYjNDM7XG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2JpdGZpZWxkLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvYml0cy5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2tjb25maWcuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9sZWRzLmhcdTAwM2VcbiYjNDM7XG4mIzQzOyNkZWZpbmUgWVQ5MjFYX0xFRF9DVFJMXHRcdFx0MHhkMDAwMFxuJiM0MzsjZGVmaW5lICBZVDkyMVhfTEVEX0NUUkxfVU5LXHRcdFx0QklUKDIxKVxuJiM0MzsjZGVmaW5lICBZVDkyMVhfTEVEX0NUUkxfTE9PUERFVEVDVF9CTElOS19NXHRHRU5NQVNLKDIwLCAxOSlcdC8qIGN5Y2xlID0gNTEyICogeCBtcyAqL1xuJiM0MzsjZGVmaW5lICAgWVQ5MjFYX0xFRF9DVFJMX0xPT1BERVRFQ1RfQkxJTksoeClcdFx0RklFTERfUFJFUChZVDkyMVhfTEVEX0NUUkxfTE9PUERFVEVDVF9CTElOS19NLCAoeCkpXG4mIzQzOyNkZWZpbmUgIFlUOTIxWF9MRURfQ1RSTF9QT1JUX05VTV9NXHRcdEdFTk1BU0soMTYsIDEzKVxuJiM0MzsjZGVmaW5lICAgWVQ5MjFYX0xFRF9DVFJMX1BPUlRfTlVNKHgpXHRcdFx0RklFTERfUFJFUChZVDkyMVhfTEVEX0NUUkxfUE9SVF9OVU1fTSwgKHgpKVxuJiM0MzsjZGVmaW5lICBZVDkyMVhfTEVEX0NUUkxfTU9ERV9NXHRcdFx0R0VOTUFTSygxLCAwKVxuJiM0MzsjZGVmaW5lICAgWVQ5MjFYX0xFRF9DVFJMX01PREUoeClcdFx0XHRGSUVMRF9QUkVQKFlUOTIxWF9MRURfQ1RSTF9NT0RFX00sICh4KSlcbiYjNDM7I2RlZmluZSAgIFlUOTIxWF9MRURfQ1RSTF9NT0RFX1BBUkFMTEVMXHRcdFx0WVQ5MjFYX0xFRF9DVFJMX01PREUoMClcbiYjNDM7I2RlZmluZSAgIFlUOTIxWF9MRURfQ1RSTF9NT0RFX1NFUklBTFx0XHRcdFlUOTIxWF9MRURfQ1RSTF9NT0RFKDIpXG4mIzQzOyNkZWZpbmUgWVQ5MjFYX0xFRDBfUE9SVG4ocG9ydClcdFx0KDB4ZDAwMDQgJiM0MzsgNCAqIChwb3J0KSlcbiYjNDM7I2RlZmluZSAgWVQ5MjFYX0xFRDBfUE9SVF9BQ1RfTVx0XHRcdEdFTk1BU0soMTcsIDApXG4mIzQzOyNkZWZpbmUgIFlUOTIxWF9MRUQwX1BPUlRfQUNUX0xJTktfVFJZX0RJU1x0QklUKDE3KVxuJiM0MzsjZGVmaW5lICBZVDkyMVhfTEVEMF9QT1JUX0FDVF9DT0xMSVNJT05fQkxJTktfSU5ESVx0QklUKDE2KVxuJiM0MzsjZGVmaW5lIFlUOTIxWF9MRUQxX1BPUlRuKHBvcnQpXHRcdCgweGQwMDQwICYjNDM7IDQgKiAocG9ydCkpXG4mIzQzOyNkZWZpbmUgIFlUOTIxWF9MRUQxX1BPUlRfT1RIRVJfQkxJTktfTVx0XHRHRU5NQVNLKDMxLCAzMClcdC8qIGN5Y2xlID0gNTEyIFx1MDAzZVx1MDAzZSB4IG1zICovXG4mIzQzOyNkZWZpbmUgICBZVDkyMVhfTEVEMV9QT1JUX09USEVSX0JMSU5LKHgpXHRcdEZJRUxEX1BSRVAoWVQ5MjFYX0xFRDFfUE9SVF9PVEhFUl9CTElOS19NLCAoeCkpXG4mIzQzOyNkZWZpbmUgIFlUOTIxWF9MRUQxX1BPUlRfRUVFX0JMSU5LX01cdFx0R0VOTUFTSygyOSwgMjgpXHQvKiBjeWNsZSA9IDUxMiBcdTAwM2VcdTAwM2UgeCBtcyAqL1xuJiM0MzsjZGVmaW5lICAgWVQ5MjFYX0xFRDFfUE9SVF9FRUVfQkxJTksoeClcdFx0XHRGSUVMRF9QUkVQKFlUOTIxWF9MRUQxX1BPUlRfRUVFX0JMSU5LX00sICh4KSlcbiYjNDM7I2RlZmluZSAgWVQ5MjFYX0xFRDFfUE9SVF9CTElOS19EVVRZX0NPTVBcdEJJVCgyNylcbiYjNDM7I2RlZmluZSAgWVQ5MjFYX0xFRDFfUE9SVF9CTElOS19EVVRZX01cdFx0R0VOTUFTSygyNiwgMjUpXG4mIzQzOyNkZWZpbmUgICBZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFkoeClcdFx0RklFTERfUFJFUChZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFlfTSwgKHgpKVxuJiM0MzsjZGVmaW5lICAgWVQ5MjFYX0xFRDFfUE9SVF9CTElOS19EVVRZXzFfMlx0XHRZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFkoMClcbiYjNDM7I2RlZmluZSAgIFlUOTIxWF9MRUQxX1BPUlRfQkxJTktfRFVUWV8yXzNcdFx0WVQ5MjFYX0xFRDFfUE9SVF9CTElOS19EVVRZKDEpXG4mIzQzOyNkZWZpbmUgICBZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFlfM180XHRcdFlUOTIxWF9MRUQxX1BPUlRfQkxJTktfRFVUWSgyKVxuJiM0MzsjZGVmaW5lICAgWVQ5MjFYX0xFRDFfUE9SVF9CTElOS19EVVRZXzVfNlx0XHRZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFkoMylcbiYjNDM7I2RlZmluZSBZVDkyMVhfTEVEMl9QT1JUbihwb3J0KVx0XHQoMHhkMDA4MCAmIzQzOyA0ICogKHBvcnQpKVxuJiM0MzsjZGVmaW5lICBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbl9NKGdycClcdFx0R0VOTUFTSyg0ICogKGdycCkgJiM0MzsgMTksIDQgKiAoZ3JwKSAmIzQzOyAxOClcbiYjNDM7I2RlZmluZSAgIFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuKGdycCwgeClcdFx0KCh4KSBcdTAwM2NcdTAwM2MgKDQgKiAoZ3JwKSAmIzQzOyAxOCkpXG4mIzQzOyNkZWZpbmUgICBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbl9ET05UQ0FSRShncnApXHRcdFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuKGdycCwgMClcbiYjNDM7I2RlZmluZSAgIFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuX0JMSU5LKGdycClcdFx0WVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW4oZ3JwLCAxKVxuJiM0MzsjZGVmaW5lICAgWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW5fT04oZ3JwKVx0XHRZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbihncnAsIDIpXG4mIzQzOyNkZWZpbmUgICBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbl9PRkYoZ3JwKVx0XHRZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbihncnAsIDMpXG4mIzQzOyNkZWZpbmUgIFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VfQkxJTktuX00oZ3JwKVx0R0VOTUFTSyg0ICogKGdycCkgJiM0MzsgMTcsIDQgKiAoZ3JwKSAmIzQzOyAxNilcdC8qIGN5Y2xlID0gNTEyIFx1MDAzY1x1MDAzYyB4IG1zICovXG4mIzQzOyNkZWZpbmUgICBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFX0JMSU5LbihncnAsIHgpXHRcdCgoeCkgXHUwMDNjXHUwMDNjICg0ICogKGdycCkgJiM0MzsgMTYpKVxuJiM0MzsjZGVmaW5lICAgWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRV9CTElOS25fT1RIRVIoZ3JwKVx0WVQ5MjFYX0xFRDJfUE9SVF9GT1JDRV9CTElOS24oZ3JwLCAzKVxuJiM0MzsjZGVmaW5lICBZVDkyMVhfTEVEeF9QT1JUX0FDVF9NXHRcdFx0R0VOTUFTSygxNSwgMClcbiYjNDM7I2RlZmluZSAgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfRUVFX0JMSU5LXHRcdEJJVCgxNSlcbiYjNDM7I2RlZmluZSAgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfTE9PUERFVEVDVF9CTElOS1x0QklUKDE0KVxuJiM0MzsjZGVmaW5lICBZVDkyMVhfTEVEeF9QT1JUX0FDVF9BQ1RJVkVfQkxJTktcdEJJVCgxMylcbiYjNDM7I2RlZmluZSAgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfRFVQTEVYX0ZVTExcdEJJVCgxMilcbiYjNDM7I2RlZmluZSAgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfRFVQTEVYX0hBTEZcdEJJVCgxMSlcbiYjNDM7I2RlZmluZSAgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfVFhfQkxJTktcdFx0QklUKDEwKVxuJiM0MzsjZGVmaW5lICBZVDkyMVhfTEVEeF9QT1JUX0FDVF9SWF9CTElOS1x0XHRCSVQoOSlcbiYjNDM7I2RlZmluZSAgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfVFhcdFx0QklUKDgpXG4mIzQzOyNkZWZpbmUgIFlUOTIxWF9MRUR4X1BPUlRfQUNUX1JYXHRcdEJJVCg3KVxuJiM0MzsjZGVmaW5lICBZVDkyMVhfTEVEeF9QT1JUX0FDVF8xMDAwTVx0XHRCSVQoNilcbiYjNDM7I2RlZmluZSAgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfMTAwTVx0XHRCSVQoNSlcbiYjNDM7I2RlZmluZSAgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfMTBNXHRcdEJJVCg0KVxuJiM0MzsjZGVmaW5lICBZVDkyMVhfTEVEeF9QT1JUX0FDVF9DT0xMSVNJT05fQkxJTktcdEJJVCgzKVxuJiM0MzsjZGVmaW5lICBZVDkyMVhfTEVEeF9QT1JUX0FDVF8xMDAwTV9CTElOS1x0QklUKDIpXG4mIzQzOyNkZWZpbmUgIFlUOTIxWF9MRUR4X1BPUlRfQUNUXzEwME1fQkxJTktcdEJJVCgxKVxuJiM0MzsjZGVmaW5lICBZVDkyMVhfTEVEeF9QT1JUX0FDVF8xME1fQkxJTktcdFx0QklUKDApXG4mIzQzOyNkZWZpbmUgWVQ5MjFYX0xFRF9TRVJfQ1RSTFx0XHQweGQwMTAwXG4mIzQzOyNkZWZpbmUgIFlUOTIxWF9MRURfU0VSX0NUUkxfVU5LXHRcdEdFTk1BU0soMjUsIDI0KVx0LyogZGVsYXk/ICovXG4mIzQzOyNkZWZpbmUgIFlUOTIxWF9MRURfU0VSX0NUUkxfQUNUSVZFX0xPV1x0XHRCSVQoNClcbiYjNDM7I2RlZmluZSAgWVQ5MjFYX0xFRF9TRVJfQ1RSTF9HUlBfTlVNX01cdFx0R0VOTUFTSygxLCAwKVx0LyogI2dycCAtIDEgKi9cbiYjNDM7I2RlZmluZSAgIFlUOTIxWF9MRURfU0VSX0NUUkxfR1JQX05VTSh4KVx0XHRGSUVMRF9QUkVQKFlUOTIxWF9MRURfU0VSX0NUUkxfR1JQX05VTV9NLCAoeCkpXG4mIzQzOyNkZWZpbmUgWVQ5MjFYX0xFRF9TRVJfTUFQbm0oZ3JwLCBwb3J0KVx0KDB4ZDAxMDQgJiM0MzsgOCAqICgyIC0gKGdycCkpICYjNDM7IDQgKiAoKHBvcnQpIC8gNSkpXG4mIzQzOyNkZWZpbmUgIFlUOTIxWF9MRURfU0VSX01BUF9EU1RuX1BPUlRfTShwb3J0KVx0R0VOTUFTSyg2ICogKChwb3J0KSAlIDUpICYjNDM7IDUsIDYgKiAoKHBvcnQpICUgNSkgJiM0MzsgMilcbiYjNDM7I2RlZmluZSAgIFlUOTIxWF9MRURfU0VSX01BUF9EU1RuX1BPUlQocG9ydCwgeClcdFx0KCh4KSBcdTAwM2NcdTAwM2MgKDYgKiAoKHBvcnQpICUgNSkgJiM0MzsgMikpXG4mIzQzOyNkZWZpbmUgIFlUOTIxWF9MRURfU0VSX01BUF9EU1RuX0xFRF9NKHBvcnQpXHRHRU5NQVNLKDYgKiAoKHBvcnQpICUgNSkgJiM0MzsgMSwgNiAqICgocG9ydCkgJSA1KSlcbiYjNDM7I2RlZmluZSAgIFlUOTIxWF9MRURfU0VSX01BUF9EU1RuX0xFRChwb3J0LCB4KVx0XHQoKHgpIFx1MDAzY1x1MDAzYyAoNiAqICgocG9ydCkgJSA1KSkpXG4mIzQzOyNkZWZpbmUgWVQ5MjFYX0xFRF9QQVJfUE9SVFNcdFx0MHhkMDFjNFxuJiM0MzsjZGVmaW5lIFlUOTIxWF9MRURfUEFSX0lOVlx0XHQweGQwMWM4XG4mIzQzOyNkZWZpbmUgIFlUOTIxWF9MRURfUEFSX0lOVl9JTlZubShncnAsIHBvcnQpXHRCSVQoMTAgKiAoZ3JwKSAmIzQzOyAocG9ydCkpXG4mIzQzOyNkZWZpbmUgWVQ5MjFYX0xFRF9QQVJfTUFQbihwb3J0KVx0KDB4ZDAxZDAgJiM0MzsgNCAqIChwb3J0KSlcbiYjNDM7I2RlZmluZSAgWVQ5MjFYX0xFRF9QQVJfTUFQX0RTVG5fUE9SVF9NKGdycClcdEdFTk1BU0soNiAqIChncnApICYjNDM7IDUsIDYgKiAoZ3JwKSAmIzQzOyAyKVxuJiM0MzsjZGVmaW5lICAgWVQ5MjFYX0xFRF9QQVJfTUFQX0RTVG5fUE9SVChncnAsIHgpXHRcdCgoeCkgXHUwMDNjXHUwMDNjICg2ICogKGdycCkgJiM0MzsgMikpXG4mIzQzOyNkZWZpbmUgIFlUOTIxWF9MRURfUEFSX01BUF9EU1RuX0xFRF9NKGdycClcdEdFTk1BU0soNiAqIChncnApICYjNDM7IDEsIDYgKiAoZ3JwKSlcbiYjNDM7I2RlZmluZSAgIFlUOTIxWF9MRURfUEFSX01BUF9EU1RuX0xFRChncnAsIHgpXHRcdCgoeCkgXHUwMDNjXHUwMDNjICg2ICogKGdycCkpKVxuJiM0MztcbiYjNDM7I2RlZmluZSBZVDkyMVhfTEVEX0JMSU5LX01JTlx0NjRcbiYjNDM7I2RlZmluZSBZVDkyMVhfTEVEX0JMSU5LX0RFRlx0NTEyXG4mIzQzOyNkZWZpbmUgWVQ5MjFYX0xFRF9CTElOS19NQVhcdDIwNDhcbiYjNDM7XG4mIzQzOy8qIDIgKiBsY20oMiwgMywgNCwgNikgKi9cbiYjNDM7I2RlZmluZSBZVDkyMVhfTEVEX0RVVFlfREVOT01cdFx0MjRcbiYjNDM7I2RlZmluZSBZVDkyMVhfTEVEX0RVVFkobm9tLCBkZW5vbSlcdChZVDkyMVhfTEVEX0RVVFlfREVOT00gKiAobm9tKSAvIChkZW5vbSkpXG4mIzQzO1xuJiM0MztzdHJ1Y3QgeXQ5MjF4X3ByaXY7XG4mIzQzO1xuJiM0MztzdHJ1Y3QgeXQ5MjF4X2xlZCB7XG4mIzQzO1x0c3RydWN0IGxlZF9jbGFzc2RldiBjZGV2O1xuJiM0MztcdHN0cnVjdCB5dDkyMXhfcG9ydCAqcG9ydDtcbiYjNDM7XHR1bnNpZ25lZCBjaGFyIGdyb3VwO1xuJiM0MztcbiYjNDM7XHRib29sIHVzZV9jeWNsZToxO1xuJiM0MztcdGJvb2wgdXNlX2R1dHk6MTtcbiYjNDM7fTtcbiYjNDM7XG4mIzQzOyNpZiBJU19FTkFCTEVEKENPTkZJR19ORVRfRFNBX1lUOTIxWF9MRURTKVxuJiM0MztcbiYjNDM7dm9pZCB5dDkyMXhfbGVkc19yZW1vdmUoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2KTtcbiYjNDM7aW50IHl0OTIxeF9sZWRzX3NldHVwKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdik7XG4mIzQzO1xuJiM0MzsjZWxzZVxuJiM0MztcbiYjNDM7c3RhdGljIGlubGluZSB2b2lkIHl0OTIxeF9sZWRzX3JlbW92ZShzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYpIHt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW5saW5lIGludCB5dDkyMXhfbGVkc19zZXR1cChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7I2VuZGlmXG4mIzQzO1xuJiM0MzsjZW5kaWZcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL3NtaS5jIGIvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9zbWkuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLjE2NGMyNWVmNDk0YTFcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vc21pLmNcbkBAIC0wLDAgJiM0MzsxLDE1NyBAQFxuJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vci1sYXRlclxuJiM0MzsvKlxuJiM0MzsgKiBDb3B5cmlnaHQgKGMpIDIwMjYgRGF2aWQgWWFuZ1xuJiM0MzsgKi9cbiYjNDM7XG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2lvcG9sbC5oXHUwMDNlXG4mIzQzO1xuJiM0MzsjaW5jbHVkZSBcJiMzNDtjaGlwLmhcJiMzNDtcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7c21pLmhcJiMzNDtcbiYjNDM7XG4mIzQzOyNkZWZpbmUgWVQ5MjFYX1BPTExfU0xFRVBfVVNcdDEwMDAwXG4mIzQzOyNkZWZpbmUgWVQ5MjFYX1BPTExfVElNRU9VVF9VU1x0MTAwMDAwXG4mIzQzO1xuJiM0MztpbnQgeXQ5MjF4X3JlZ19yZWFkKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyICp2YWxwKVxuJiM0Mzt7XG4mIzQzO1x0V0FSTl9PTighbXV0ZXhfaXNfbG9ja2VkKFx1MDAyNnByaXYtXHUwMDNlcmVnX2xvY2spKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHByaXYtXHUwMDNlcmVnX29wcy1cdTAwM2VyZWFkKHByaXYtXHUwMDNlcmVnX2N0eCwgcmVnLCB2YWxwKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7aW50IHl0OTIxeF9yZWdfd3JpdGUoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgdmFsKVxuJiM0Mzt7XG4mIzQzO1x0V0FSTl9PTighbXV0ZXhfaXNfbG9ja2VkKFx1MDAyNnByaXYtXHUwMDNlcmVnX2xvY2spKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHByaXYtXHUwMDNlcmVnX29wcy1cdTAwM2V3cml0ZShwcml2LVx1MDAzZXJlZ19jdHgsIHJlZywgdmFsKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7aW50IHl0OTIxeF9yZWdfd2FpdChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiBtYXNrLCB1MzIgKnZhbHApXG4mIzQzO3tcbiYjNDM7XHR1MzIgdmFsO1xuJiM0MztcdGludCByZXM7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gcmVhZF9wb2xsX3RpbWVvdXQoeXQ5MjF4X3JlZ19yZWFkLCByZXMsXG4mIzQzO1x0XHRcdFx0cmVzIHx8ICh2YWwgXHUwMDI2IG1hc2spID09ICp2YWxwLFxuJiM0MztcdFx0XHRcdFlUOTIxWF9QT0xMX1NMRUVQX1VTLCBZVDkyMVhfUE9MTF9USU1FT1VUX1VTLFxuJiM0MztcdFx0XHRcdGZhbHNlLCBwcml2LCByZWcsIFx1MDAyNnZhbCk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1x0aWYgKHJlcylcbiYjNDM7XHRcdHJldHVybiByZXM7XG4mIzQzO1xuJiM0MztcdCp2YWxwID0gdmFsO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztpbnQgeXQ5MjF4X3JlZ191cGRhdGVfYml0cyhzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiBtYXNrLCB1MzIgdmFsKVxuJiM0Mzt7XG4mIzQzO1x0aW50IHJlcztcbiYjNDM7XHR1MzIgdjtcbiYjNDM7XHR1MzIgdTtcbiYjNDM7XG4mIzQzO1x0cmVzID0geXQ5MjF4X3JlZ19yZWFkKHByaXYsIHJlZywgXHUwMDI2dik7XG4mIzQzO1x0aWYgKHJlcylcbiYjNDM7XHRcdHJldHVybiByZXM7XG4mIzQzO1xuJiM0MztcdHUgPSB2O1xuJiM0MztcdHUgXHUwMDI2PSB+bWFzaztcbiYjNDM7XHR1IHw9IHZhbDtcbiYjNDM7XHRpZiAodSA9PSB2KVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztcdHJldHVybiB5dDkyMXhfcmVnX3dyaXRlKHByaXYsIHJlZywgdSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO2ludFxuJiM0Mzt5dDkyMXhfcmVnc19yZWFkKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyICp2YWxzLFxuJiM0MztcdFx0IHVuc2lnbmVkIGludCBudW1fcmVncylcbiYjNDM7e1xuJiM0MztcdGludCByZXM7XG4mIzQzO1xuJiM0MztcdGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIFx1MDAzYyBudW1fcmVnczsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdHJlcyA9IHl0OTIxeF9yZWdfcmVhZChwcml2LCByZWcgJiM0MzsgNCAqIGksIFx1MDAyNnZhbHNbaV0pO1xuJiM0MztcdFx0aWYgKHJlcylcbiYjNDM7XHRcdFx0cmV0dXJuIHJlcztcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztpbnRcbiYjNDM7eXQ5MjF4X3JlZ3Nfd3JpdGUoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCBjb25zdCB1MzIgKnZhbHMsXG4mIzQzO1x0XHQgIHVuc2lnbmVkIGludCBudW1fcmVncylcbiYjNDM7e1xuJiM0MztcdGludCByZXM7XG4mIzQzO1xuJiM0MztcdGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIFx1MDAzYyBudW1fcmVnczsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdHJlcyA9IHl0OTIxeF9yZWdfd3JpdGUocHJpdiwgcmVnICYjNDM7IDQgKiBpLCB2YWxzW2ldKTtcbiYjNDM7XHRcdGlmIChyZXMpXG4mIzQzO1x0XHRcdHJldHVybiByZXM7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7aW50XG4mIzQzO3l0OTIxeF9yZWdzX3VwZGF0ZV9iaXRzKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgY29uc3QgdTMyICptYXNrcyxcbiYjNDM7XHRcdFx0Y29uc3QgdTMyICp2YWxzLCB1bnNpZ25lZCBpbnQgbnVtX3JlZ3MpXG4mIzQzO3tcbiYjNDM7XHRib29sIGNoYW5nZWQgPSBmYWxzZTtcbiYjNDM7XHR1MzIgdnNbNF07XG4mIzQzO1x0aW50IHJlcztcbiYjNDM7XG4mIzQzO1x0aWYgKFdBUk5fT05fT05DRShudW1fcmVncyBcdTAwM2UgQVJSQVlfU0laRSh2cykpKVxuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1xuJiM0MztcdHJlcyA9IHl0OTIxeF9yZWdzX3JlYWQocHJpdiwgcmVnLCB2cywgbnVtX3JlZ3MpO1xuJiM0MztcdGlmIChyZXMpXG4mIzQzO1x0XHRyZXR1cm4gcmVzO1xuJiM0MztcbiYjNDM7XHRmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSBcdTAwM2MgbnVtX3JlZ3M7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHR1MzIgdSA9IHZzW2ldO1xuJiM0MztcbiYjNDM7XHRcdHUgXHUwMDI2PSB+bWFza3NbaV07XG4mIzQzO1x0XHR1IHw9IHZhbHNbaV07XG4mIzQzO1x0XHRpZiAodSAhPSB2c1tpXSlcbiYjNDM7XHRcdFx0Y2hhbmdlZCA9IHRydWU7XG4mIzQzO1xuJiM0MztcdFx0dnNbaV0gPSB1O1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKCFjaGFuZ2VkKVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztcdHJldHVybiB5dDkyMXhfcmVnc193cml0ZShwcml2LCByZWcsIHZzLCBudW1fcmVncyk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO2ludFxuJiM0Mzt5dDkyMXhfcmVnc19jbGVhcl9iaXRzKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgY29uc3QgdTMyICptYXNrcyxcbiYjNDM7XHRcdCAgICAgICB1bnNpZ25lZCBpbnQgbnVtX3JlZ3MpXG4mIzQzO3tcbiYjNDM7XHRib29sIGNoYW5nZWQgPSBmYWxzZTtcbiYjNDM7XHR1MzIgdnNbNF07XG4mIzQzO1x0aW50IHJlcztcbiYjNDM7XG4mIzQzO1x0aWYgKFdBUk5fT05fT05DRShudW1fcmVncyBcdTAwM2UgQVJSQVlfU0laRSh2cykpKVxuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1xuJiM0MztcdHJlcyA9IHl0OTIxeF9yZWdzX3JlYWQocHJpdiwgcmVnLCB2cywgbnVtX3JlZ3MpO1xuJiM0MztcdGlmIChyZXMpXG4mIzQzO1x0XHRyZXR1cm4gcmVzO1xuJiM0MztcbiYjNDM7XHRmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSBcdTAwM2MgbnVtX3JlZ3M7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHR1MzIgdSA9IHZzW2ldO1xuJiM0MztcbiYjNDM7XHRcdHUgXHUwMDI2PSB+bWFza3NbaV07XG4mIzQzO1x0XHRpZiAodSAhPSB2c1tpXSlcbiYjNDM7XHRcdFx0Y2hhbmdlZCA9IHRydWU7XG4mIzQzO1xuJiM0MztcdFx0dnNbaV0gPSB1O1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKCFjaGFuZ2VkKVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztcdHJldHVybiB5dDkyMXhfcmVnc193cml0ZShwcml2LCByZWcsIHZzLCBudW1fcmVncyk7XG4mIzQzO31cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL3NtaS5oIGIvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9zbWkuaFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLjI5OTVlOTFmM2IzZDFcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vc21pLmhcbkBAIC0wLDAgJiM0MzsxLDkyIEBAXG4mIzQzOy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9yLWxhdGVyICovXG4mIzQzOy8qXG4mIzQzOyAqIENvcHlyaWdodCAoYykgMjAyNiBEYXZpZCBZYW5nXG4mIzQzOyAqL1xuJiM0MztcbiYjNDM7I2lmbmRlZiBfWVRfU01JX0hcbiYjNDM7I2RlZmluZSBfWVRfU01JX0hcbiYjNDM7XG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3R5cGVzLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvd29yZHBhcnQuaFx1MDAzZVxuJiM0MztcbiYjNDM7c3RydWN0IHl0OTIxeF9wcml2O1xuJiM0MztcbiYjNDM7aW50IHl0OTIxeF9yZWdfcmVhZChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiAqdmFscCk7XG4mIzQzO2ludCB5dDkyMXhfcmVnX3dyaXRlKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyIHZhbCk7XG4mIzQzO2ludCB5dDkyMXhfcmVnX3dhaXQoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgbWFzaywgdTMyICp2YWxwKTtcbiYjNDM7aW50IHl0OTIxeF9yZWdfdXBkYXRlX2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgbWFzayxcbiYjNDM7XHRcdFx0ICAgdTMyIHZhbCk7XG4mIzQzO1xuJiM0MztzdGF0aWMgaW5saW5lIGludFxuJiM0Mzt5dDkyMXhfcmVnX3NldF9iaXRzKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyIG1hc2spXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4geXQ5MjF4X3JlZ191cGRhdGVfYml0cyhwcml2LCByZWcsIDAsIG1hc2spO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW5saW5lIGludFxuJiM0Mzt5dDkyMXhfcmVnX2NsZWFyX2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgbWFzaylcbiYjNDM7e1xuJiM0MztcdHJldHVybiB5dDkyMXhfcmVnX3VwZGF0ZV9iaXRzKHByaXYsIHJlZywgbWFzaywgMCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbmxpbmUgaW50XG4mIzQzO3l0OTIxeF9yZWdfdG9nZ2xlX2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgbWFzaywgYm9vbCBzZXQpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4geXQ5MjF4X3JlZ191cGRhdGVfYml0cyhwcml2LCByZWcsIG1hc2ssICFzZXQgPyAwIDogbWFzayk7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qIFNvbWUgbXVsdGktd29yZCByZWdpc3RlcnMsIGxpa2UgVkxBTm5fQ1RSTCwgc2hvdWxkIGJlIHRyZWF0ZWQgYXMgYSBzaW5nbGVcbiYjNDM7ICogbG9uZyByZWdpc3Rlci4gTW9yZSBzcGVjaWZpY2FsbHksIHdyaXRlcyB0byBwYXJ0cyBvZiBpdHMgd29yZHMgd29uJiMzOTt0IGJlY29tZVxuJiM0MzsgKiB2aXNpYmxlLCB1bnRpbCB0aGUgbGFzdCB3b3JkIGlzIHdyaXR0ZW4uXG4mIzQzOyAqXG4mIzQzOyAqIEhlcmUgd2UgcmVxdWlyZSBmdWxsIHJlYWQgYW5kIHdyaXRlIG9wZXJhdGlvbnMgb3ZlciB0aGVzZSByZWdpc3RlcnMgdG9cbiYjNDM7ICogZWxpbWluYXRlIHBvdGVudGlhbCBpc3N1ZXMsIGFsdGhvdWdoIHBhcnRpYWwgcmVhZHMvd3JpdGVzIGFyZSBhbHNvIHBvc3NpYmxlLlxuJiM0MzsgKi9cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCB1cGRhdGVfY3RybHNfdW5hbGlnbmVkKHUzMiAqbG8sIHUzMiAqaGksIHU2NCBtYXNrLCB1NjQgdmFsKVxuJiM0Mzt7XG4mIzQzO1x0KmxvIFx1MDAyNj0gfmxvd2VyXzMyX2JpdHMobWFzayk7XG4mIzQzO1x0KmhpIFx1MDAyNj0gfnVwcGVyXzMyX2JpdHMobWFzayk7XG4mIzQzO1x0KmxvIHw9IGxvd2VyXzMyX2JpdHModmFsKTtcbiYjNDM7XHQqaGkgfD0gdXBwZXJfMzJfYml0cyh2YWwpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKiB5dDkyMXhfcmVnc18qKCkgYXJlIGV4cG9ydGVkIGZvciBsaW5rYWdlIG9ubHkuIERvIG5vdCB1c2UgdGhlbSBkaXJlY3RseS4gVXNlXG4mIzQzOyAqIHl0OTIxeF9yZWc2NF8qKCkgb3IgeXQ5MjF4X3JlZzk2XyooKSBpbnN0ZWFkLlxuJiM0MzsgKi9cbiYjNDM7XG4mIzQzO2ludCB5dDkyMXhfcmVnc19yZWFkKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyICp2YWxzLFxuJiM0MztcdFx0ICAgICB1bnNpZ25lZCBpbnQgbnVtX3JlZ3MpO1xuJiM0MztpbnQgeXQ5MjF4X3JlZ3Nfd3JpdGUoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCBjb25zdCB1MzIgKnZhbHMsXG4mIzQzO1x0XHQgICAgICB1bnNpZ25lZCBpbnQgbnVtX3JlZ3MpO1xuJiM0MztpbnQgeXQ5MjF4X3JlZ3NfdXBkYXRlX2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCBjb25zdCB1MzIgKm1hc2tzLFxuJiM0MztcdFx0XHQgICAgY29uc3QgdTMyICp2YWxzLCB1bnNpZ25lZCBpbnQgbnVtX3JlZ3MpO1xuJiM0MztpbnQgeXQ5MjF4X3JlZ3NfY2xlYXJfYml0cyhzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIGNvbnN0IHUzMiAqbWFza3MsXG4mIzQzO1x0XHRcdCAgIHVuc2lnbmVkIGludCBudW1fcmVncyk7XG4mIzQzO1xuJiM0MztzdGF0aWMgaW5saW5lIGludFxuJiM0Mzt5dDkyMXhfcmVnNjRfd3JpdGUoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCBjb25zdCB1MzIgKnZhbHMpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4geXQ5MjF4X3JlZ3Nfd3JpdGUocHJpdiwgcmVnLCB2YWxzLCAyKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGlubGluZSBpbnRcbiYjNDM7eXQ5MjF4X3JlZzY0X3VwZGF0ZV9iaXRzKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgY29uc3QgdTMyICptYXNrcyxcbiYjNDM7XHRcdFx0IGNvbnN0IHUzMiAqdmFscylcbiYjNDM7e1xuJiM0MztcdHJldHVybiB5dDkyMXhfcmVnc191cGRhdGVfYml0cyhwcml2LCByZWcsIG1hc2tzLCB2YWxzLCAyKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGlubGluZSBpbnRcbiYjNDM7eXQ5MjF4X3JlZzY0X2NsZWFyX2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCBjb25zdCB1MzIgKm1hc2tzKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIHl0OTIxeF9yZWdzX2NsZWFyX2JpdHMocHJpdiwgcmVnLCBtYXNrcywgMik7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbmxpbmUgaW50XG4mIzQzO3l0OTIxeF9yZWc5Nl93cml0ZShzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIGNvbnN0IHUzMiAqdmFscylcbiYjNDM7e1xuJiM0MztcdHJldHVybiB5dDkyMXhfcmVnc193cml0ZShwcml2LCByZWcsIHZhbHMsIDMpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsjZW5kaWZcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNiAyMDozOTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBMRUQgc3VwcG9ydCBmb3IgdGhlIE1vdG9yY29tbSBZVDkyMTUgZXRoZXJuZXQgc3dpdGNoIGNoaXAgKGEgRFNBIGRyaXZlcikuIFRoaXMgaXMgYSBoYXJkd2FyZS1zcGVjaWZpYyBkcml2ZXIgdGhhdCBjb21tdW5pY2F0ZXMgd2l0aCBhIHBoeXNpY2FsIGNoaXAgdmlhIE1ESU8uIFNpbmNlIHRoZXJlIGlzIG5vIHNvZnR3YXJlIGVtdWxhdGlvbiBmb3IgdGhpcyBzcGVjaWZpYyBzd2l0Y2ggY2hpcCBpbiBzdGFuZGFyZCBRRU1VL3ZpcnR1YWxpemVkIGVudmlyb25tZW50cywgdGhlIGRyaXZlciB3aWxsIGZhaWwgdG8gcHJvYmUgKGUuZy4sIGR1cmluZyBjaGlwIElEIGRldGVjdGlvbiksIGFuZCB0aGUgbmV3bHkgYWRkZWQgTEVEIHNldHVwIGNvZGUgd2lsbCBiZSB1bnJlYWNoYWJsZS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAyODYwOTgzZDNmNGRlMDFmOWZjZTM3NjBmZjMxOTkyOTE0YWQ5MTAzCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFN1biBBdWcgMTYgMjA6Mzg6NTkgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L2RzYS9tb3RvcmNvbW0seXQ5MjF4LnlhbWwgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L2RzYS9tb3RvcmNvbW0seXQ5MjF4LnlhbWwKaW5kZXggMzNhNjU1MmU0NmZjMC4uOTNiYTViMTgxMjA1YiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9kc2EvbW90b3Jjb21tLHl0OTIxeC55YW1sCiYjNDM7JiM0MzsmIzQzOyBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvZHNhL21vdG9yY29tbSx5dDkyMXgueWFtbApAQCAtMjEsNiAmIzQzOzIxLDkgQEAgZGVzY3JpcHRpb246IHwKIAogICBBbnkgcG9ydCBjYW4gYmUgdXNlZCBhcyB0aGUgQ1BVIHBvcnQuCiAKJiM0MzsgIEVhY2ggcG9ydCBoYXMgYXQgbW9zdCAzIExFRHMgY29ubmVjdGVkIGFuZCBjYW4gYmUgZGVjbGFyZWQgdXNpbmcgdGhlIHN0YW5kYXJkCiYjNDM7ICBMRURzIHN0cnVjdHVyZS4KJiM0MzsKIHByb3BlcnRpZXM6CiAgIGNvbXBhdGlibGU6CiAgICAgY29uc3Q6IG1vdG9yY29tbSx5dDkyMTUKQEAgLTU5LDYgJiM0Mzs2Miw3IEBAIHVuZXZhbHVhdGVkUHJvcGVydGllczogZmFsc2UKIGV4YW1wbGVzOgogICAtIHwKICAgICAjaW5jbHVkZSAmbHQ7ZHQtYmluZGluZ3MvZ3Bpby9ncGlvLmgmZ3Q7CiYjNDM7ICAgICNpbmNsdWRlICZsdDtkdC1iaW5kaW5ncy9sZWRzL2NvbW1vbi5oJmd0OwogCiAgICAgbWRpbyB7CiAgICAgICAgICNhZGRyZXNzLWNlbGxzID0gJmx0OzEmZ3Q7OwpAQCAtMTEzLDYgJiM0MzsxMTcsMjUgQEAgZXhhbXBsZXM6CiAgICAgICAgICAgICAgICAgICAgIGxhYmVsID0gJiMzNDtsYW4xJiMzNDs7CiAgICAgICAgICAgICAgICAgICAgIHBoeS1tb2RlID0gJiMzNDtpbnRlcm5hbCYjMzQ7OwogICAgICAgICAgICAgICAgICAgICBwaHktaGFuZGxlID0gJmx0OyZhbXA7c3dfcGh5MCZndDs7CiYjNDM7CiYjNDM7ICAgICAgICAgICAgICAgICAgICBsZWRzIHsKJiM0MzsgICAgICAgICAgICAgICAgICAgICAgICAjYWRkcmVzcy1jZWxscyA9ICZsdDsxJmd0OzsKJiM0MzsgICAgICAgICAgICAgICAgICAgICAgICAjc2l6ZS1jZWxscyA9ICZsdDswJmd0OzsKJiM0MzsKJiM0MzsgICAgICAgICAgICAgICAgICAgICAgICBsZWRAMCB7CiYjNDM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZyA9ICZsdDswJmd0OzsKJiM0MzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3IgPSAmbHQ7TEVEX0NPTE9SX0lEX1dISVRFJmd0OzsKJiM0MzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gPSBMRURfRlVOQ1RJT05fTEFOOwomIzQzOyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0LXN0YXRlID0gJiMzNDtrZWVwJiMzNDs7CiYjNDM7ICAgICAgICAgICAgICAgICAgICAgICAgfTsKJiM0MzsKJiM0MzsgICAgICAgICAgICAgICAgICAgICAgICBsZWRAMSB7CiYjNDM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZyA9ICZsdDsxJmd0OzsKJiM0MzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3IgPSAmbHQ7TEVEX0NPTE9SX0lEX0FNQkVSJmd0OzsKJiM0MzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gPSBMRURfRlVOQ1RJT05fTEFOOwomIzQzOyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0LXN0YXRlID0gJiMzNDtrZWVwJiMzNDs7CiYjNDM7ICAgICAgICAgICAgICAgICAgICAgICAgfTsKJiM0MzsgICAgICAgICAgICAgICAgICAgIH07CiAgICAgICAgICAgICAgICAgfTsKIAogICAgICAgICAgICAgICAgIGV0aGVybmV0LXBvcnRAMSB7CmRpZmYgLS1naXQgYS9NQUlOVEFJTkVSUyBiL01BSU5UQUlORVJTCmluZGV4IDk5MTQ2MDA1MGRhNzQuLjU1Y2M1YWMwZTg2ZjAgMTAwNjQ0Ci0tLSBhL01BSU5UQUlORVJTCiYjNDM7JiM0MzsmIzQzOyBiL01BSU5UQUlORVJTCkBAIC0xODI1Niw3ICYjNDM7MTgyNTYsNyBAQCBNOglEYXZpZCBZYW5nICZsdDttbXlhbmdmbEBnbWFpbC5jb20mZ3Q7CiBMOgluZXRkZXZAdmdlci5rZXJuZWwub3JnCiBTOglNYWludGFpbmVkCiBGOglEb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L2RzYS9tb3RvcmNvbW0seXQ5MjF4LnlhbWwKLUY6CWRyaXZlcnMvbmV0L2RzYS95dDkyMXguKgomIzQzO0Y6CWRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vCiBGOgluZXQvZHNhL3RhZ195dDkyMXguYwogCiBNT1hBIFNNQVJUSU8vSU5EVVNUSU8vSU5URUxMSU8gU0VSSUFMIENBUkQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS9LY29uZmlnIGIvZHJpdmVycy9uZXQvZHNhL0tjb25maWcKaW5kZXggNGFiNTY3YzViYmFmYy4uOThlOWJiZTQ3ZGU3YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZHNhL0tjb25maWcKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZHNhL0tjb25maWcKQEAgLTcyLDYgJiM0Mzs3Miw4IEBAIGNvbmZpZyBORVRfRFNBX01WODhFNjA2MAogCiBzb3VyY2UgJiMzNDtkcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL0tjb25maWcmIzM0OwogCiYjNDM7c291cmNlICYjMzQ7ZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9LY29uZmlnJiMzNDsKJiM0MzsKIHNvdXJjZSAmIzM0O2RyaXZlcnMvbmV0L2RzYS9tdjg4ZTZ4eHgvS2NvbmZpZyYjMzQ7CiAKIHNvdXJjZSAmIzM0O2RyaXZlcnMvbmV0L2RzYS9teGw4NjJ4eC9LY29uZmlnJiMzNDsKQEAgLTE1OCwxMiAmIzQzOzE2MCw0IEBAIGNvbmZpZyBORVRfRFNBX1ZJVEVTU0VfVlNDNzNYWF9QTEFURk9STQogCSAgVGhpcyBlbmFibGVzIHN1cHBvcnQgZm9yIHRoZSBWaXRlc3NlIFZTQzczODUsIFZTQzczODgsIFZTQzczOTUKIAkgIGFuZCBWU0M3Mzk4IFNwYXJYIGludGVncmF0ZWQgZXRoZXJuZXQgc3dpdGNoZXMsIGNvbm5lY3RlZCBvdmVyCiAJICBhIENQVS1hdHRhY2hlZCBhZGRyZXNzIGJ1cyBhbmQgd29yayBpbiBtZW1vcnktbWFwcGVkIEkvTyBtb2RlLgotCi1jb25maWcgTkVUX0RTQV9ZVDkyMVgKLQl0cmlzdGF0ZSAmIzM0O01vdG9yY29tbSBZVDkyMTUgZXRoZXJuZXQgc3dpdGNoIGNoaXAgc3VwcG9ydCYjMzQ7Ci0Jc2VsZWN0IE5FVF9EU0FfVEFHX1lUOTIxWAotCXNlbGVjdCBORVRfSUVFRTgwMjFRX0hFTFBFUlMgaWYgRENCCi0JaGVscAotCSAgVGhpcyBlbmFibGVzIHN1cHBvcnQgZm9yIHRoZSBNb3RvcmNvbW0gWVQ5MjE1IGV0aGVybmV0IHN3aXRjaAotCSAgY2hpcC4KIGVuZG1lbnUKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS9NYWtlZmlsZSBiL2RyaXZlcnMvbmV0L2RzYS9NYWtlZmlsZQppbmRleCBkMjk3NWJhZGZmYzA5Li4xMzgyMjViYWE0ZDU2IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9kc2EvTWFrZWZpbGUKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZHNhL01ha2VmaWxlCkBAIC0xNCwxMSAmIzQzOzE0LDExIEBAIG9iai0kKENPTkZJR19ORVRfRFNBX1NNU0NfTEFOOTMwM19NRElPKSAmIzQzOz0gbGFuOTMwM19tZGlvLm8KIG9iai0kKENPTkZJR19ORVRfRFNBX1ZJVEVTU0VfVlNDNzNYWCkgJiM0Mzs9IHZpdGVzc2UtdnNjNzN4eC1jb3JlLm8KIG9iai0kKENPTkZJR19ORVRfRFNBX1ZJVEVTU0VfVlNDNzNYWF9QTEFURk9STSkgJiM0Mzs9IHZpdGVzc2UtdnNjNzN4eC1wbGF0Zm9ybS5vCiBvYmotJChDT05GSUdfTkVUX0RTQV9WSVRFU1NFX1ZTQzczWFhfU1BJKSAmIzQzOz0gdml0ZXNzZS12c2M3M3h4LXNwaS5vCi1vYmotJChDT05GSUdfTkVUX0RTQV9ZVDkyMVgpICYjNDM7PSB5dDkyMXgubwogb2JqLXkJCQkJJiM0Mzs9IGI1My8KIG9iai15CQkJCSYjNDM7PSBoaXJzY2htYW5uLwogb2JqLXkJCQkJJiM0Mzs9IGxhbnRpcS8KIG9iai15CQkJCSYjNDM7PSBtaWNyb2NoaXAvCiYjNDM7b2JqLXkJCQkJJiM0Mzs9IG1vdG9yY29tbS8KIG9iai15CQkJCSYjNDM7PSBtdjg4ZTZ4eHgvCiBvYmoteQkJCQkmIzQzOz0gbXhsODYyeHgvCiBvYmoteQkJCQkmIzQzOz0gbmV0Yy8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vS2NvbmZpZyBiL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vS2NvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwLi4zNDM4ZTBiMTQzNjExCi0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9LY29uZmlnCkBAIC0wLDAgJiM0MzsxLDE3IEBACiYjNDM7IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogSVNDCiYjNDM7Y29uZmlnIE5FVF9EU0FfWVQ5MjFYCiYjNDM7CXRyaXN0YXRlICYjMzQ7TW90b3Jjb21tIFlUOTIxNSBldGhlcm5ldCBzd2l0Y2ggY2hpcCBzdXBwb3J0JiMzNDsKJiM0MzsJc2VsZWN0IE5FVF9EU0FfVEFHX1lUOTIxWAomIzQzOwlzZWxlY3QgTkVUX0lFRUU4MDIxUV9IRUxQRVJTIGlmIERDQgomIzQzOwloZWxwCiYjNDM7CSAgVGhpcyBlbmFibGVzIHN1cHBvcnQgZm9yIHRoZSBNb3RvcmNvbW0gWVQ5MjE1IGV0aGVybmV0IHN3aXRjaAomIzQzOwkgIGNoaXAuCiYjNDM7CiYjNDM7Y29uZmlnIE5FVF9EU0FfWVQ5MjFYX0xFRFMKJiM0MzsJYm9vbCAmIzM0O0xFRCBzdXBwb3J0IGZvciBNb3RvcmNvbW0gWVQ5MjE1JiMzNDsKJiM0MzsJZGVmYXVsdCB5CiYjNDM7CWRlcGVuZHMgb24gTkVUX0RTQV9ZVDkyMVgKJiM0MzsJZGVwZW5kcyBvbiBMRURTX0NMQVNTPXkgfHwgTEVEU19DTEFTUz1ORVRfRFNBX1lUOTIxWAomIzQzOwloZWxwCiYjNDM7CSAgVGhpcyBlbmFibGVzIHN1cHBvcnQgZm9yIGNvbnRyb2xsaW5nIHRoZSBMRURzIGF0dGFjaGVkIHRvIHRoZQomIzQzOwkgIE1vdG9yY29tbSBZVDkyMTUgc3dpdGNoIGNoaXBzLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9NYWtlZmlsZSBiL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMC4uNWE2M2RiMDAyOWZmZQotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vTWFrZWZpbGUKQEAgLTAsMCAmIzQzOzEsNSBAQAomIzQzOyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IElTQwomIzQzO29iai0kKENPTkZJR19ORVRfRFNBX1lUOTIxWCkgJiM0Mzs9IHl0OTIxeC5vCiYjNDM7eXQ5MjF4LW9ianMgOj0gY2hpcC5vCiYjNDM7eXQ5MjF4LSQoQ09ORklHX05FVF9EU0FfWVQ5MjFYX0xFRFMpICYjNDM7PSBsZWRzLm8KJiM0Mzt5dDkyMXgtb2JqcyAmIzQzOz0gc21pLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS95dDkyMXguYyBiL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jCnNpbWlsYXJpdHkgaW5kZXggOTYlCnJlbmFtZSBmcm9tIGRyaXZlcnMvbmV0L2RzYS95dDkyMXguYwpyZW5hbWUgdG8gZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMKaW5kZXggMTU5YjE2NjA2ZjZjYS4uNTUzZWZhY2Q0ZjVlZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZHNhL3l0OTIxeC5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jCkBAIC0xMyw3ICYjNDM7MTMsNiBAQAogI2luY2x1ZGUgJmx0O2xpbnV4L2lmX2JyaWRnZS5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2lmX2hzci5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2lmX3ZsYW4uaCZndDsKLSNpbmNsdWRlICZsdDtsaW51eC9pb3BvbGwuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9tZGlvLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvbW9kdWxlLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvb2YuaCZndDsKQEAgLTI2LDcgJiM0MzsyNSw5IEBACiAjaW5jbHVkZSAmbHQ7bmV0L2llZWU4MDIxcS5oJmd0OwogI2luY2x1ZGUgJmx0O25ldC9wa3RfY2xzLmgmZ3Q7CiAKLSNpbmNsdWRlICYjMzQ7eXQ5MjF4LmgmIzM0OwomIzQzOyNpbmNsdWRlICYjMzQ7Y2hpcC5oJiMzNDsKJiM0MzsjaW5jbHVkZSAmIzM0O2xlZHMuaCYjMzQ7CiYjNDM7I2luY2x1ZGUgJiMzNDtzbWkuaCYjMzQ7CiAKIHN0cnVjdCB5dDkyMXhfbWliX2Rlc2MgewogCXVuc2lnbmVkIGludCBzaXplOwpAQCAtMTUxLDEzICYjNDM7MTUyLDggQEAgc3RhdGljIGNvbnN0IHN0cnVjdCB5dDkyMXhfaW5mbyB5dDkyMXhfaW5mb3NbXSA9IHsKIAl7fQogfTsKIAotI2RlZmluZSBZVDkyMVhfTkFNRQkmIzM0O3l0OTIxeCYjMzQ7Ci0KICNkZWZpbmUgWVQ5MjFYX1ZJRF9VTldBUkUJNDA5NQogCi0jZGVmaW5lIFlUOTIxWF9QT0xMX1NMRUVQX1VTCTEwMDAwCi0jZGVmaW5lIFlUOTIxWF9QT0xMX1RJTUVPVVRfVVMJMTAwMDAwCi0KIC8qIFRoZSBpbnRlcnZhbCBzaG91bGQgYmUgc21hbGwgZW5vdWdoIHRvIGF2b2lkIG92ZXJmbG93IG9mIDMyYml0IE1JQnMuCiAgKgogICogVW50aWwgd2UgY2FuIHJlYWQgTUlCcyBmcm9tIHN0YXRzNjQgY2FsbCBkaXJlY3RseSAoaS5lLiBzbGVlcApAQCAtMTk2LDIwOCAmIzQzOzE5Miw2IEBAIHN0YXRpYyB1MzIgZXRoYWRkcl9sbzJfdG9fdTMyKGNvbnN0IHVuc2lnbmVkIGNoYXIgKmFkZHIpCiAJcmV0dXJuIChhZGRyWzRdICZsdDsmbHQ7IDgpIHwgYWRkcls1XTsKIH0KIAotc3RhdGljIGludCB5dDkyMXhfcmVnX3JlYWQoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgKnZhbHApCi17Ci0JV0FSTl9PTighbXV0ZXhfaXNfbG9ja2VkKCZhbXA7cHJpdi0mZ3Q7cmVnX2xvY2spKTsKLQotCXJldHVybiBwcml2LSZndDtyZWdfb3BzLSZndDtyZWFkKHByaXYtJmd0O3JlZ19jdHgsIHJlZywgdmFscCk7Ci19Ci0KLXN0YXRpYyBpbnQgeXQ5MjF4X3JlZ193cml0ZShzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiB2YWwpCi17Ci0JV0FSTl9PTighbXV0ZXhfaXNfbG9ja2VkKCZhbXA7cHJpdi0mZ3Q7cmVnX2xvY2spKTsKLQotCXJldHVybiBwcml2LSZndDtyZWdfb3BzLSZndDt3cml0ZShwcml2LSZndDtyZWdfY3R4LCByZWcsIHZhbCk7Ci19Ci0KLXN0YXRpYyBpbnQKLXl0OTIxeF9yZWdfd2FpdChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiBtYXNrLCB1MzIgKnZhbHApCi17Ci0JdTMyIHZhbDsKLQlpbnQgcmVzOwotCWludCByZXQ7Ci0KLQlyZXQgPSByZWFkX3BvbGxfdGltZW91dCh5dDkyMXhfcmVnX3JlYWQsIHJlcywKLQkJCQlyZXMgfHwgKHZhbCAmYW1wOyBtYXNrKSA9PSAqdmFscCwKLQkJCQlZVDkyMVhfUE9MTF9TTEVFUF9VUywgWVQ5MjFYX1BPTExfVElNRU9VVF9VUywKLQkJCQlmYWxzZSwgcHJpdiwgcmVnLCAmYW1wO3ZhbCk7Ci0JaWYgKHJldCkKLQkJcmV0dXJuIHJldDsKLQlpZiAocmVzKQotCQlyZXR1cm4gcmVzOwotCi0JKnZhbHAgPSB2YWw7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQKLXl0OTIxeF9yZWdfdXBkYXRlX2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgbWFzaywgdTMyIHZhbCkKLXsKLQlpbnQgcmVzOwotCXUzMiB2OwotCXUzMiB1OwotCi0JcmVzID0geXQ5MjF4X3JlZ19yZWFkKHByaXYsIHJlZywgJmFtcDt2KTsKLQlpZiAocmVzKQotCQlyZXR1cm4gcmVzOwotCi0JdSA9IHY7Ci0JdSAmYW1wOz0gfm1hc2s7Ci0JdSB8PSB2YWw7Ci0JaWYgKHUgPT0gdikKLQkJcmV0dXJuIDA7Ci0KLQlyZXR1cm4geXQ5MjF4X3JlZ193cml0ZShwcml2LCByZWcsIHUpOwotfQotCi1zdGF0aWMgaW50IHl0OTIxeF9yZWdfc2V0X2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgbWFzaykKLXsKLQlyZXR1cm4geXQ5MjF4X3JlZ191cGRhdGVfYml0cyhwcml2LCByZWcsIDAsIG1hc2spOwotfQotCi1zdGF0aWMgaW50IHl0OTIxeF9yZWdfY2xlYXJfYml0cyhzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiBtYXNrKQotewotCXJldHVybiB5dDkyMXhfcmVnX3VwZGF0ZV9iaXRzKHByaXYsIHJlZywgbWFzaywgMCk7Ci19Ci0KLXN0YXRpYyBpbnQKLXl0OTIxeF9yZWdfdG9nZ2xlX2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgbWFzaywgYm9vbCBzZXQpCi17Ci0JcmV0dXJuIHl0OTIxeF9yZWdfdXBkYXRlX2JpdHMocHJpdiwgcmVnLCBtYXNrLCAhc2V0ID8gMCA6IG1hc2spOwotfQotCi0vKiBTb21lIG11bHRpLXdvcmQgcmVnaXN0ZXJzLCBsaWtlIFZMQU5uX0NUUkwsIHNob3VsZCBiZSB0cmVhdGVkIGFzIGEgc2luZ2xlCi0gKiBsb25nIHJlZ2lzdGVyLiBNb3JlIHNwZWNpZmljYWxseSwgd3JpdGVzIHRvIHBhcnRzIG9mIGl0cyB3b3JkcyB3b24mIzM5O3QgYmVjb21lCi0gKiB2aXNpYmxlLCB1bnRpbCB0aGUgbGFzdCB3b3JkIGlzIHdyaXR0ZW4uCi0gKgotICogSGVyZSB3ZSByZXF1aXJlIGZ1bGwgcmVhZCBhbmQgd3JpdGUgb3BlcmF0aW9ucyBvdmVyIHRoZXNlIHJlZ2lzdGVycyB0bwotICogZWxpbWluYXRlIHBvdGVudGlhbCBpc3N1ZXMsIGFsdGhvdWdoIHBhcnRpYWwgcmVhZHMvd3JpdGVzIGFyZSBhbHNvIHBvc3NpYmxlLgotICovCi0KLXN0YXRpYyB2b2lkIHVwZGF0ZV9jdHJsc191bmFsaWduZWQodTMyICpsbywgdTMyICpoaSwgdTY0IG1hc2ssIHU2NCB2YWwpCi17Ci0JKmxvICZhbXA7PSB+bG93ZXJfMzJfYml0cyhtYXNrKTsKLQkqaGkgJmFtcDs9IH51cHBlcl8zMl9iaXRzKG1hc2spOwotCSpsbyB8PSBsb3dlcl8zMl9iaXRzKHZhbCk7Ci0JKmhpIHw9IHVwcGVyXzMyX2JpdHModmFsKTsKLX0KLQotc3RhdGljIGludAoteXQ5MjF4X3JlZ3NfcmVhZChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiAqdmFscywKLQkJIHVuc2lnbmVkIGludCBudW1fcmVncykKLXsKLQlpbnQgcmVzOwotCi0JZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgJmx0OyBudW1fcmVnczsgaSYjNDM7JiM0MzspIHsKLQkJcmVzID0geXQ5MjF4X3JlZ19yZWFkKHByaXYsIHJlZyAmIzQzOyA0ICogaSwgJmFtcDt2YWxzW2ldKTsKLQkJaWYgKHJlcykKLQkJCXJldHVybiByZXM7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQKLXl0OTIxeF9yZWdzX3dyaXRlKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgY29uc3QgdTMyICp2YWxzLAotCQkgIHVuc2lnbmVkIGludCBudW1fcmVncykKLXsKLQlpbnQgcmVzOwotCi0JZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgJmx0OyBudW1fcmVnczsgaSYjNDM7JiM0MzspIHsKLQkJcmVzID0geXQ5MjF4X3JlZ193cml0ZShwcml2LCByZWcgJiM0MzsgNCAqIGksIHZhbHNbaV0pOwotCQlpZiAocmVzKQotCQkJcmV0dXJuIHJlczsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludAoteXQ5MjF4X3JlZ3NfdXBkYXRlX2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCBjb25zdCB1MzIgKm1hc2tzLAotCQkJY29uc3QgdTMyICp2YWxzLCB1bnNpZ25lZCBpbnQgbnVtX3JlZ3MpCi17Ci0JYm9vbCBjaGFuZ2VkID0gZmFsc2U7Ci0JdTMyIHZzWzRdOwotCWludCByZXM7Ci0KLQlCVUlMRF9CVUdfT04obnVtX3JlZ3MgJmd0OyBBUlJBWV9TSVpFKHZzKSk7Ci0KLQlyZXMgPSB5dDkyMXhfcmVnc19yZWFkKHByaXYsIHJlZywgdnMsIG51bV9yZWdzKTsKLQlpZiAocmVzKQotCQlyZXR1cm4gcmVzOwotCi0JZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgJmx0OyBudW1fcmVnczsgaSYjNDM7JiM0MzspIHsKLQkJdTMyIHUgPSB2c1tpXTsKLQotCQl1ICZhbXA7PSB+bWFza3NbaV07Ci0JCXUgfD0gdmFsc1tpXTsKLQkJaWYgKHUgIT0gdnNbaV0pCi0JCQljaGFuZ2VkID0gdHJ1ZTsKLQotCQl2c1tpXSA9IHU7Ci0JfQotCi0JaWYgKCFjaGFuZ2VkKQotCQlyZXR1cm4gMDsKLQotCXJldHVybiB5dDkyMXhfcmVnc193cml0ZShwcml2LCByZWcsIHZzLCBudW1fcmVncyk7Ci19Ci0KLXN0YXRpYyBpbnQKLXl0OTIxeF9yZWdzX2NsZWFyX2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCBjb25zdCB1MzIgKm1hc2tzLAotCQkgICAgICAgdW5zaWduZWQgaW50IG51bV9yZWdzKQotewotCWJvb2wgY2hhbmdlZCA9IGZhbHNlOwotCXUzMiB2c1s0XTsKLQlpbnQgcmVzOwotCi0JQlVJTERfQlVHX09OKG51bV9yZWdzICZndDsgQVJSQVlfU0laRSh2cykpOwotCi0JcmVzID0geXQ5MjF4X3JlZ3NfcmVhZChwcml2LCByZWcsIHZzLCBudW1fcmVncyk7Ci0JaWYgKHJlcykKLQkJcmV0dXJuIHJlczsKLQotCWZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpICZsdDsgbnVtX3JlZ3M7IGkmIzQzOyYjNDM7KSB7Ci0JCXUzMiB1ID0gdnNbaV07Ci0KLQkJdSAmYW1wOz0gfm1hc2tzW2ldOwotCQlpZiAodSAhPSB2c1tpXSkKLQkJCWNoYW5nZWQgPSB0cnVlOwotCi0JCXZzW2ldID0gdTsKLQl9Ci0KLQlpZiAoIWNoYW5nZWQpCi0JCXJldHVybiAwOwotCi0JcmV0dXJuIHl0OTIxeF9yZWdzX3dyaXRlKHByaXYsIHJlZywgdnMsIG51bV9yZWdzKTsKLX0KLQotc3RhdGljIGludAoteXQ5MjF4X3JlZzY0X3dyaXRlKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgY29uc3QgdTMyICp2YWxzKQotewotCXJldHVybiB5dDkyMXhfcmVnc193cml0ZShwcml2LCByZWcsIHZhbHMsIDIpOwotfQotCi1zdGF0aWMgaW50Ci15dDkyMXhfcmVnNjRfdXBkYXRlX2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCBjb25zdCB1MzIgKm1hc2tzLAotCQkJIGNvbnN0IHUzMiAqdmFscykKLXsKLQlyZXR1cm4geXQ5MjF4X3JlZ3NfdXBkYXRlX2JpdHMocHJpdiwgcmVnLCBtYXNrcywgdmFscywgMik7Ci19Ci0KLXN0YXRpYyBpbnQKLXl0OTIxeF9yZWc2NF9jbGVhcl9iaXRzKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgY29uc3QgdTMyICptYXNrcykKLXsKLQlyZXR1cm4geXQ5MjF4X3JlZ3NfY2xlYXJfYml0cyhwcml2LCByZWcsIG1hc2tzLCAyKTsKLX0KLQotc3RhdGljIGludAoteXQ5MjF4X3JlZzk2X3dyaXRlKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgY29uc3QgdTMyICp2YWxzKQotewotCXJldHVybiB5dDkyMXhfcmVnc193cml0ZShwcml2LCByZWcsIHZhbHMsIDMpOwotfQotCiBzdGF0aWMgaW50IHl0OTIxeF9yZWdfbWRpb19yZWFkKHZvaWQgKmNvbnRleHQsIHUzMiByZWcsIHUzMiAqdmFscCkKIHsKIAlzdHJ1Y3QgeXQ5MjF4X3JlZ19tZGlvICptZGlvID0gY29udGV4dDsKQEAgLTQ3ODYsNiAmIzQzOzQ1ODAsMTIgQEAgc3RhdGljIGludCB5dDkyMXhfZHNhX3NldHVwKHN0cnVjdCBkc2Ffc3dpdGNoICpkcykKIAlpZiAocmVzKQogCQlyZXR1cm4gcmVzOwogCiYjNDM7I2lmIElTX0VOQUJMRUQoQ09ORklHX05FVF9EU0FfWVQ5MjFYX0xFRFMpCiYjNDM7CXJlcyA9IHl0OTIxeF9sZWRzX3NldHVwKHByaXYpOwomIzQzOwlpZiAocmVzKQomIzQzOwkJZGV2X3dhcm4oZGV2LCAmIzM0O0ZhaWxlZCB0byBzZXR1cCBMRURzOiAlZFxuJiMzNDssIHJlcyk7CiYjNDM7I2VuZGlmCiYjNDM7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTQ4ODYsNiAmIzQzOzQ2ODYsMTAgQEAgc3RhdGljIHZvaWQgeXQ5MjF4X21kaW9fcmVtb3ZlKHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldikKIAlpZiAoIXByaXYpCiAJCXJldHVybjsKIAomIzQzOyNpZiBJU19FTkFCTEVEKENPTkZJR19ORVRfRFNBX1lUOTIxWF9MRURTKQomIzQzOwl5dDkyMXhfbGVkc19yZW1vdmUocHJpdik7CiYjNDM7I2VuZGlmCiYjNDM7CiAJZm9yIChzaXplX3QgaSA9IEFSUkFZX1NJWkUocHJpdi0mZ3Q7cG9ydHMpOyBpLS0gJmd0OyAwOyApIHsKIAkJc3RydWN0IHl0OTIxeF9wb3J0ICpwcCA9ICZhbXA7cHJpdi0mZ3Q7cG9ydHNbaV07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS95dDkyMXguaCBiL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5oCnNpbWlsYXJpdHkgaW5kZXggOTklCnJlbmFtZSBmcm9tIGRyaXZlcnMvbmV0L2RzYS95dDkyMXguaApyZW5hbWUgdG8gZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmgKaW5kZXggNWYzYjk5ZTE4OWM0MS4uZTY4MTVjZjljYjNjZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZHNhL3l0OTIxeC5oCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5oCkBAIC04NTAsOSAmIzQzOzg1MCwxNCBAQCBlbnVtIHl0OTIxeF9mZGJfZW50cnlfc3RhdHVzIHsKICNkZWZpbmUgWVQ5MjFYX0FDTF9OVU0JCShZVDkyMVhfQUNMX0JMS19OVU0gKiBZVDkyMVhfQUNMX0VOVF9QRVJfQkxLKQogI2RlZmluZSBZVDkyMVhfVURGX05VTQkJOAogCiYjNDM7I2RlZmluZSBZVDkyMVhfTEVEX0dST1VQX05VTQkzCiYjNDM7I2RlZmluZSBZVDkyMVhfTEVEX1BPUlRfTlVNCTEwCiYjNDM7CiAvKiA4IGludGVybmFsICYjNDM7IDIgZXh0ZXJuYWwgJiM0MzsgMSBtY3UgKi8KICNkZWZpbmUgWVQ5MjFYX1BPUlRfTlVNCQkJMTEKIAomIzQzOyNkZWZpbmUgWVQ5MjFYX05BTUUJJiMzNDt5dDkyMXgmIzM0OwomIzQzOwogI2RlZmluZSB5dDkyMXhfcG9ydF9pc19pbnRlcm5hbChwb3J0KSAoKHBvcnQpICZsdDsgOCkKICNkZWZpbmUgeXQ5MjF4X3BvcnRfaXNfZXh0ZXJuYWwocG9ydCkgKChwb3J0KSA9PSA4IHx8IChwb3J0KSA9PSA5KQogCkBAIC05MzgsNiAmIzQzOzk0MywxMyBAQCBzdHJ1Y3QgeXQ5MjF4X3BvcnQgewogCXN0cnVjdCB5dDkyMXhfbWliIG1pYjsKIAl1NjQgcnhfZnJhbWVzOwogCXU2NCB0eF9mcmFtZXM7CiYjNDM7CiYjNDM7I2lmIElTX0VOQUJMRUQoQ09ORklHX05FVF9EU0FfWVQ5MjFYX0xFRFMpCiYjNDM7CXVuc2lnbmVkIGNoYXIgbGVkX2R1dHk7CiYjNDM7CXVuc2lnbmVkIHNob3J0IGxlZF9jeWNsZTsKJiM0MzsKJiM0MzsJc3RydWN0IHl0OTIxeF9sZWQgKmxlZHNbWVQ5MjFYX0xFRF9HUk9VUF9OVU1dOwomIzQzOyNlbmRpZgogfTsKIAogc3RydWN0IHl0OTIxeF9yZWdfb3BzIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vbGVkcy5jIGIvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9sZWRzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMC4uZTdlZjBlZjgwYTI2NgotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vbGVkcy5jCkBAIC0wLDAgJiM0MzsxLDY1NCBAQAomIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9yLWxhdGVyCiYjNDM7LyoKJiM0MzsgKiBDb3B5cmlnaHQgKGMpIDIwMjYgRGF2aWQgWWFuZwomIzQzOyAqLwomIzQzOwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC91bGVkcy5oJmd0OwomIzQzOwomIzQzOyNpbmNsdWRlICYjMzQ7Y2hpcC5oJiMzNDsKJiM0MzsjaW5jbHVkZSAmIzM0O2xlZHMuaCYjMzQ7CiYjNDM7I2luY2x1ZGUgJiMzNDtzbWkuaCYjMzQ7CiYjNDM7CiYjNDM7I2RlZmluZSB0b195dDkyMXhfbGVkKGxlZF9jZGV2KSBcCiYjNDM7CWNvbnRhaW5lcl9vZl9jb25zdCgobGVkX2NkZXYpLCBzdHJ1Y3QgeXQ5MjF4X2xlZCwgY2RldikKJiM0MzsjZGVmaW5lIHRvX3l0OTIxeF9wb3J0KGxlZCkgKChsZWQpLSZndDtwb3J0KQomIzQzOyNkZWZpbmUgdG9feXQ5MjF4X3ByaXYocHApIFwKJiM0MzsJY29udGFpbmVyX29mX2NvbnN0KChwcCksIHN0cnVjdCB5dDkyMXhfcHJpdiwgcG9ydHNbKHBwKS0mZ3Q7aW5kZXhdKQomIzQzOyNkZWZpbmUgdG9fZGV2aWNlKHByaXYpICgocHJpdiktJmd0O2RzLmRldikKJiM0MzsKJiM0MztzdGF0aWMgdTMyIHl0OTIxeF9sZWRfcmVnYWRkcihzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIGludCBwb3J0LCBpbnQgZ3JvdXApCiYjNDM7ewomIzQzOwlzd2l0Y2ggKGdyb3VwKSB7CiYjNDM7CWNhc2UgMDoKJiM0MzsJZGVmYXVsdDoKJiM0MzsJCXJldHVybiBZVDkyMVhfTEVEMF9QT1JUbihwb3J0KTsKJiM0MzsJY2FzZSAxOgomIzQzOwkJcmV0dXJuIFlUOTIxWF9MRUQxX1BPUlRuKHBvcnQpOwomIzQzOwljYXNlIDI6CiYjNDM7CQlyZXR1cm4gWVQ5MjFYX0xFRDJfUE9SVG4ocG9ydCk7CiYjNDM7CX0KJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludAomIzQzO3l0OTIxeF9sZWRfZm9yY2VfZ2V0KHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgaW50IHBvcnQsIGludCBncm91cCwgYm9vbCAqb25wKQomIzQzO3sKJiM0MzsJdTMyIHZhbDsKJiM0MzsJaW50IHJlczsKJiM0MzsKJiM0MzsJcmVzID0geXQ5MjF4X3JlZ19yZWFkKHByaXYsIFlUOTIxWF9MRUQyX1BPUlRuKHBvcnQpLCAmYW1wO3ZhbCk7CiYjNDM7CWlmIChyZXMpCiYjNDM7CQlyZXR1cm4gcmVzOwomIzQzOwomIzQzOwkqb25wID0gKHZhbCAmYW1wOyBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbl9NKGdyb3VwKSkgPT0KJiM0MzsJICAgICAgIFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuX09OKGdyb3VwKTsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQKJiM0Mzt5dDkyMXhfbGVkX2ZvcmNlX3NldChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIGludCBwb3J0LCBpbnQgZ3JvdXAsIGJvb2wgb24pCiYjNDM7ewomIzQzOwlzdHJ1Y3QgeXQ5MjF4X3BvcnQgKnBwID0gJmFtcDtwcml2LSZndDtwb3J0c1twb3J0XTsKJiM0MzsJc3RydWN0IHl0OTIxeF9sZWQgKmxlZCA9IHBwLSZndDtsZWRzW2dyb3VwXTsKJiM0MzsJdTMyIGN0cmw7CiYjNDM7CXUzMiBtYXNrOwomIzQzOwomIzQzOwlsZWQtJmd0O3VzZV9jeWNsZSA9IGZhbHNlOwomIzQzOwlsZWQtJmd0O3VzZV9kdXR5ID0gZmFsc2U7CiYjNDM7CiYjNDM7CW1hc2sgPSBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbl9NKGdyb3VwKTsKJiM0MzsJY3RybCA9IG9uID8gWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW5fT04oZ3JvdXApIDoKJiM0MzsJICAgICAgIFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuX09GRihncm91cCk7CiYjNDM7CXJldHVybiB5dDkyMXhfcmVnX3VwZGF0ZV9iaXRzKHByaXYsIFlUOTIxWF9MRUQyX1BPUlRuKHBvcnQpLCBtYXNrLAomIzQzOwkJCQkgICAgICBjdHJsKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludAomIzQzO3l0OTIxeF9sZWRfYmxpbmtfc2VsZWN0KGNvbnN0IHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdW5zaWduZWQgbG9uZyBvbiwKJiM0MzsJCQl1bnNpZ25lZCBsb25nIG9mZiwgdW5zaWduZWQgc2hvcnQgKmN5Y2xlcCwKJiM0MzsJCQl1bnNpZ25lZCBjaGFyICpkdXR5cCkKJiM0Mzt7CiYjNDM7CXN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGR1dHlzW10gPSB7CiYjNDM7CQlZVDkyMVhfTEVEX0RVVFkoMSwgNiksCiYjNDM7CQlZVDkyMVhfTEVEX0RVVFkoMSwgNCksCiYjNDM7CQlZVDkyMVhfTEVEX0RVVFkoMSwgMyksCiYjNDM7CQlZVDkyMVhfTEVEX0RVVFkoMSwgMiksCiYjNDM7CX07CiYjNDM7CXVuc2lnbmVkIGludCBjeWNsZV91cHBlcjsKJiM0MzsJdW5zaWduZWQgaW50IGN5Y2xlX3JlcTsKJiM0MzsJdW5zaWduZWQgaW50IGR1dHlfcmVxOwomIzQzOwl1bnNpZ25lZCBpbnQgY3ljbGU7CiYjNDM7CXVuc2lnbmVkIGludCBkdXR5OwomIzQzOwomIzQzOwljeWNsZSA9IFlUOTIxWF9MRURfQkxJTktfTUFYOwomIzQzOwljeWNsZV91cHBlciA9IGN5Y2xlICogMTE1ODUgLyA4MTkyICYjNDM7IDE7ICAvKiBNX1NRUlQyICogY3ljbGUgKi8KJiM0MzsJaWYgKGNoZWNrX2FkZF9vdmVyZmxvdyhvbiwgb2ZmLCAmYW1wO2N5Y2xlX3JlcSkgfHwgY3ljbGVfcmVxICZndDs9IGN5Y2xlX3VwcGVyKQomIzQzOwkJcmV0dXJuIC1FT1BOT1RTVVBQOwomIzQzOwomIzQzOwlmb3IgKDsgY3ljbGUgJmd0OyBZVDkyMVhfTEVEX0JMSU5LX01JTjsgY3ljbGVfdXBwZXIgJmd0OyZndDs9IDEsIGN5Y2xlICZndDsmZ3Q7PSAxKQomIzQzOwkJaWYgKGN5Y2xlX3JlcSAmZ3Q7PSBjeWNsZV91cHBlciAmZ3Q7Jmd0OyAxKQomIzQzOwkJCWJyZWFrOwomIzQzOwkqY3ljbGVwID0gY3ljbGU7CiYjNDM7CiYjNDM7CWR1dHlfcmVxID0gRElWX1JPVU5EX0NMT1NFU1QoWVQ5MjFYX0xFRF9EVVRZX0RFTk9NICoKJiM0MzsJCQkJICAgICAob24gJmd0OyBvZmYgPyBvZmYgOiBvbiksIGN5Y2xlX3JlcSk7CiYjNDM7CWZvciAodW5zaWduZWQgaW50IGkgPSBBUlJBWV9TSVpFKGR1dHlzKSAtIDE7OyBpLS0pCiYjNDM7CQlpZiAoaSA9PSAwIHx8IGR1dHlfcmVxICZndDs9IChkdXR5c1tpIC0gMV0gJiM0MzsgZHV0eXNbaV0pIC8gMikgewomIzQzOwkJCWR1dHkgPSBkdXR5c1tpXTsKJiM0MzsJCQlicmVhazsKJiM0MzsJCX0KJiM0MzsJaWYgKG9uICZndDsgb2ZmKQomIzQzOwkJZHV0eSA9IFlUOTIxWF9MRURfRFVUWV9ERU5PTSAtIGR1dHk7CiYjNDM7CSpkdXR5cCA9IGR1dHk7CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50CiYjNDM7eXQ5MjF4X2xlZF9ibGlua19zZXQoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCBpbnQgcG9ydCwgaW50IGdyb3VwLAomIzQzOwkJICAgICB1bnNpZ25lZCBsb25nICpvbnAsIHVuc2lnbmVkIGxvbmcgKm9mZnApCiYjNDM7ewomIzQzOwlzdHJ1Y3QgeXQ5MjF4X3BvcnQgKnBwID0gJmFtcDtwcml2LSZndDtwb3J0c1twb3J0XTsKJiM0MzsJc3RydWN0IHl0OTIxeF9sZWQgKmxlZCA9IHBwLSZndDtsZWRzW2dyb3VwXTsKJiM0MzsJdW5zaWduZWQgc2hvcnQgY3ljbGU7CiYjNDM7CXVuc2lnbmVkIGNoYXIgZHV0eTsKJiM0MzsJYm9vbCB1c2VfY3ljbGU7CiYjNDM7CXUzMiBjdHJsOwomIzQzOwl1MzIgbWFzazsKJiM0MzsJdTMyIHZhbDsKJiM0MzsJaW50IHJlczsKJiM0MzsKJiM0MzsJaWYgKCEqb25wICZhbXA7JmFtcDsgISpvZmZwKSB7CiYjNDM7CQljeWNsZSA9IFlUOTIxWF9MRURfQkxJTktfREVGOwomIzQzOwkJZHV0eSA9IFlUOTIxWF9MRURfRFVUWSgxLCAyKTsKJiM0MzsJCWZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpICZsdDsgWVQ5MjFYX0xFRF9HUk9VUF9OVU07IGkmIzQzOyYjNDM7KQomIzQzOwkJCWlmIChpICE9IGdyb3VwICZhbXA7JmFtcDsgcHAtJmd0O2xlZHNbaV0gJmFtcDsmYW1wOwomIzQzOwkJCSAgICBwcC0mZ3Q7bGVkc1tpXS0mZ3Q7dXNlX2R1dHkpIHsKJiM0MzsJCQkJZHV0eSA9IHBwLSZndDtsZWRfZHV0eTsKJiM0MzsJCQkJYnJlYWs7CiYjNDM7CQkJfQomIzQzOwomIzQzOwkJdXNlX2N5Y2xlID0gZmFsc2U7CiYjNDM7CX0gZWxzZSB7CiYjNDM7CQlib29sIGNoYW5nZV9jeWNsZTsKJiM0MzsJCWJvb2wgY2hhbmdlX2R1dHk7CiYjNDM7CiYjNDM7CQlyZXMgPSB5dDkyMXhfbGVkX2JsaW5rX3NlbGVjdChwcml2LCAqb25wLCAqb2ZmcCwgJmFtcDtjeWNsZSwgJmFtcDtkdXR5KTsKJiM0MzsJCWlmIChyZXMpCiYjNDM7CQkJcmV0dXJuIHJlczsKJiM0MzsKJiM0MzsJCXVzZV9jeWNsZSA9IGN5Y2xlICZsdDsgWVQ5MjFYX0xFRF9CTElOS19ERUY7CiYjNDM7CQljaGFuZ2VfY3ljbGUgPSB1c2VfY3ljbGUgJmFtcDsmYW1wOyBjeWNsZSAhPSBwcC0mZ3Q7bGVkX2N5Y2xlOwomIzQzOwkJY2hhbmdlX2R1dHkgPSBkdXR5ICE9IHBwLSZndDtsZWRfZHV0eTsKJiM0MzsJCWlmIChjaGFuZ2VfY3ljbGUgfHwgY2hhbmdlX2R1dHkpCiYjNDM7CQkJZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgJmx0OyBZVDkyMVhfTEVEX0dST1VQX05VTTsKJiM0MzsJCQkgICAgIGkmIzQzOyYjNDM7KSB7CiYjNDM7CQkJCWlmIChpID09IGdyb3VwIHx8ICFwcC0mZ3Q7bGVkc1tpXSkKJiM0MzsJCQkJCWNvbnRpbnVlOwomIzQzOwkJCQlpZiAoKGNoYW5nZV9jeWNsZSAmYW1wOyZhbXA7IHBwLSZndDtsZWRzW2ldLSZndDt1c2VfY3ljbGUpIHx8CiYjNDM7CQkJCSAgICAoY2hhbmdlX2R1dHkgJmFtcDsmYW1wOyBwcC0mZ3Q7bGVkc1tpXS0mZ3Q7dXNlX2R1dHkpKQomIzQzOwkJCQkJcmV0dXJuIC1FT1BOT1RTVVBQOwomIzQzOwkJCX0KJiM0MzsJfQomIzQzOwomIzQzOwkvKiBUaGUgY2hpcCBzZWVtcyB0byBqYW0gYSB3aGlsZSBpZiBjaGFuZ2luZyBkdXR5IGRpcmVjdGx5ICovCiYjNDM7CXJlcyA9IHl0OTIxeF9yZWdfcmVhZChwcml2LCBZVDkyMVhfTEVEMl9QT1JUbihwb3J0KSwgJmFtcDt2YWwpOwomIzQzOwlpZiAocmVzKQomIzQzOwkJcmV0dXJuIHJlczsKJiM0MzsKJiM0MzsJY3RybCA9IHZhbCAmYW1wOyB+WVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW5fTShncm91cCk7CiYjNDM7CWN0cmwgfD0gWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW5fRE9OVENBUkUoZ3JvdXApOwomIzQzOwlpZiAodmFsICE9IGN0cmwpIHsKJiM0MzsJCXJlcyA9IHl0OTIxeF9yZWdfd3JpdGUocHJpdiwgWVQ5MjFYX0xFRDJfUE9SVG4ocG9ydCksIGN0cmwpOwomIzQzOwkJaWYgKHJlcykKJiM0MzsJCQlyZXR1cm4gcmVzOwomIzQzOwl9CiYjNDM7CiYjNDM7CW1hc2sgPSBZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFlfTSB8IFlUOTIxWF9MRUQxX1BPUlRfQkxJTktfRFVUWV9DT01QOwomIzQzOwlzd2l0Y2ggKGR1dHkgJmd0Oz0gWVQ5MjFYX0xFRF9EVVRZKDEsIDIpID8gZHV0eSA6CiYjNDM7CQlZVDkyMVhfTEVEX0RVVFlfREVOT00gLSBkdXR5KSB7CiYjNDM7CWRlZmF1bHQ6CiYjNDM7CQlkdXR5ID0gWVQ5MjFYX0xFRF9EVVRZKDEsIDIpOwomIzQzOwkJZmFsbHRocm91Z2g7CiYjNDM7CWNhc2UgWVQ5MjFYX0xFRF9EVVRZKDEsIDIpOgomIzQzOwkJY3RybCA9IFlUOTIxWF9MRUQxX1BPUlRfQkxJTktfRFVUWV8xXzI7CiYjNDM7CQlicmVhazsKJiM0MzsJY2FzZSBZVDkyMVhfTEVEX0RVVFkoMiwgMyk6CiYjNDM7CQljdHJsID0gWVQ5MjFYX0xFRDFfUE9SVF9CTElOS19EVVRZXzJfMzsKJiM0MzsJCWJyZWFrOwomIzQzOwljYXNlIFlUOTIxWF9MRURfRFVUWSgzLCA0KToKJiM0MzsJCWN0cmwgPSBZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFlfM180OwomIzQzOwkJYnJlYWs7CiYjNDM7CWNhc2UgWVQ5MjFYX0xFRF9EVVRZKDUsIDYpOgomIzQzOwkJY3RybCA9IFlUOTIxWF9MRUQxX1BPUlRfQkxJTktfRFVUWV81XzY7CiYjNDM7CQlicmVhazsKJiM0MzsJfQomIzQzOwlpZiAoZHV0eSAmbHQ7IFlUOTIxWF9MRURfRFVUWSgxLCAyKSkKJiM0MzsJCWN0cmwgfD0gWVQ5MjFYX0xFRDFfUE9SVF9CTElOS19EVVRZX0NPTVA7CiYjNDM7CWlmICh1c2VfY3ljbGUpIHsKJiM0MzsJCW1hc2sgfD0gWVQ5MjFYX0xFRDFfUE9SVF9PVEhFUl9CTElOS19NOwomIzQzOwkJY3RybCB8PSBZVDkyMVhfTEVEMV9QT1JUX09USEVSX0JMSU5LKDkgLSBfX2ZscyhjeWNsZSkpOwomIzQzOwl9CiYjNDM7CXJlcyA9IHl0OTIxeF9yZWdfdXBkYXRlX2JpdHMocHJpdiwgWVQ5MjFYX0xFRDFfUE9SVG4ocG9ydCksIG1hc2ssIGN0cmwpOwomIzQzOwlpZiAocmVzKQomIzQzOwkJcmV0dXJuIHJlczsKJiM0MzsKJiM0MzsJY3RybCA9IHZhbCAmYW1wOyB+KFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuX00oZ3JvdXApIHwKJiM0MzsJCSAgICAgICBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFX0JMSU5Lbl9NKGdyb3VwKSk7CiYjNDM7CWN0cmwgfD0gWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW5fQkxJTksoZ3JvdXApOwomIzQzOwlpZiAodXNlX2N5Y2xlKQomIzQzOwkJY3RybCB8PSBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFX0JMSU5Lbl9PVEhFUihncm91cCk7CiYjNDM7CWVsc2UKJiM0MzsJCWN0cmwgfD0gWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRV9CTElOS24oZ3JvdXAsIF9fZmxzKGN5Y2xlKSAtIDkpOwomIzQzOwlyZXMgPSB5dDkyMXhfcmVnX3dyaXRlKHByaXYsIFlUOTIxWF9MRUQyX1BPUlRuKHBvcnQpLCBjdHJsKTsKJiM0MzsJaWYgKHJlcykKJiM0MzsJCXJldHVybiByZXM7CiYjNDM7CiYjNDM7CWxlZC0mZ3Q7dXNlX2N5Y2xlID0gdXNlX2N5Y2xlOwomIzQzOwlpZiAodXNlX2N5Y2xlKQomIzQzOwkJcHAtJmd0O2xlZF9jeWNsZSA9IGN5Y2xlOwomIzQzOwlsZWQtJmd0O3VzZV9kdXR5ID0gdHJ1ZTsKJiM0MzsJcHAtJmd0O2xlZF9kdXR5ID0gZHV0eTsKJiM0MzsKJiM0MzsJKm9ucCA9IERJVl9ST1VORF9DTE9TRVNUKGR1dHkgKiBjeWNsZSwgWVQ5MjFYX0xFRF9EVVRZX0RFTk9NKTsKJiM0MzsJKm9mZnAgPSBjeWNsZSAtICpvbnA7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdHJ1Y3QgeXQ5MjF4X2xlZF90cmlnZ2VyX21hcCB7CiYjNDM7CXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiYjNDM7CXUzMiBtYXNrOwomIzQzO307CiYjNDM7CiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCB5dDkyMXhfbGVkX3RyaWdnZXJfbWFwIHl0OTIxeF9sZWRfdHJpZ2dlcl9tYXBzW10gPSB7CiYjNDM7CXtCSVQoVFJJR0dFUl9ORVRERVZfTElOSyksCiYjNDM7CSBZVDkyMVhfTEVEeF9QT1JUX0FDVF9EVVBMRVhfSEFMRiB8IFlUOTIxWF9MRUR4X1BPUlRfQUNUX0RVUExFWF9GVUxMfSwKJiM0MzsJe0JJVChUUklHR0VSX05FVERFVl9MSU5LXzEwKSwgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfMTBNfSwKJiM0MzsJe0JJVChUUklHR0VSX05FVERFVl9MSU5LXzEwMCksIFlUOTIxWF9MRUR4X1BPUlRfQUNUXzEwME19LAomIzQzOwl7QklUKFRSSUdHRVJfTkVUREVWX0xJTktfMTAwMCksIFlUOTIxWF9MRUR4X1BPUlRfQUNUXzEwMDBNfSwKJiM0MzsJe0JJVChUUklHR0VSX05FVERFVl9IQUxGX0RVUExFWCksIFlUOTIxWF9MRUR4X1BPUlRfQUNUX0RVUExFWF9IQUxGfSwKJiM0MzsJe0JJVChUUklHR0VSX05FVERFVl9GVUxMX0RVUExFWCksIFlUOTIxWF9MRUR4X1BPUlRfQUNUX0RVUExFWF9GVUxMfSwKJiM0MzsJe0JJVChUUklHR0VSX05FVERFVl9UWCksIFlUOTIxWF9MRUR4X1BPUlRfQUNUX1RYX0JMSU5LfSwKJiM0MzsJe0JJVChUUklHR0VSX05FVERFVl9SWCksIFlUOTIxWF9MRUR4X1BPUlRfQUNUX1JYX0JMSU5LfSwKJiM0MzsJe0JJVChUUklHR0VSX05FVERFVl9UWF9FUlIpIHwgQklUKFRSSUdHRVJfTkVUREVWX1JYX0VSUiksCiYjNDM7CSBZVDkyMVhfTEVEeF9QT1JUX0FDVF9DT0xMSVNJT05fQkxJTkt9LAomIzQzO307CiYjNDM7CiYjNDM7c3RhdGljIGJvb2wKJiM0Mzt5dDkyMXhfbGVkX3RyaWdnZXJfaXNfc3VwcG9ydGVkKGNvbnN0IHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgaW50IHBvcnQsCiYjNDM7CQkJCWludCBncm91cCwgdW5zaWduZWQgbG9uZyBmbGFncykKJiM0Mzt7CiYjNDM7CWlmICghZmxhZ3MpCiYjNDM7CQlyZXR1cm4gdHJ1ZTsKJiM0MzsKJiM0MzsJZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgJmx0OyBBUlJBWV9TSVpFKHl0OTIxeF9sZWRfdHJpZ2dlcl9tYXBzKTsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCWNvbnN0IHN0cnVjdCB5dDkyMXhfbGVkX3RyaWdnZXJfbWFwICptYXAgPSAmYW1wO3l0OTIxeF9sZWRfdHJpZ2dlcl9tYXBzW2ldOwomIzQzOwomIzQzOwkJaWYgKChmbGFncyAmYW1wOyBtYXAtJmd0O2ZsYWdzKSA9PSBtYXAtJmd0O2ZsYWdzKSB7CiYjNDM7CQkJZmxhZ3MgJmFtcDs9IH5tYXAtJmd0O2ZsYWdzOwomIzQzOwkJCWlmICghZmxhZ3MpCiYjNDM7CQkJCXJldHVybiB0cnVlOwomIzQzOwkJfQomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiBmYWxzZTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludAomIzQzO3l0OTIxeF9sZWRfdHJpZ2dlcl9nZXQoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCBpbnQgcG9ydCwgaW50IGdyb3VwLAomIzQzOwkJICAgICAgIHVuc2lnbmVkIGxvbmcgKmZsYWdzcCkKJiM0Mzt7CiYjNDM7CXUzMiBhZGRyOwomIzQzOwl1MzIgdmFsOwomIzQzOwlpbnQgcmVzOwomIzQzOwomIzQzOwlyZXMgPSB5dDkyMXhfcmVnX3JlYWQocHJpdiwgWVQ5MjFYX0xFRDJfUE9SVG4ocG9ydCksICZhbXA7dmFsKTsKJiM0MzsJaWYgKHJlcykKJiM0MzsJCXJldHVybiByZXM7CiYjNDM7CiYjNDM7CWlmICgodmFsICZhbXA7IFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuX00oZ3JvdXApKSAhPQomIzQzOwkgICAgWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW5fRE9OVENBUkUoZ3JvdXApKSB7CiYjNDM7CQkqZmxhZ3NwID0gMDsKJiM0MzsJCXJldHVybiAwOwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmIChncm91cCAhPSAyKSB7CiYjNDM7CQlhZGRyID0geXQ5MjF4X2xlZF9yZWdhZGRyKHByaXYsIHBvcnQsIGdyb3VwKTsKJiM0MzsJCXJlcyA9IHl0OTIxeF9yZWdfcmVhZChwcml2LCBhZGRyLCAmYW1wO3ZhbCk7CiYjNDM7CQlpZiAocmVzKQomIzQzOwkJCXJldHVybiByZXM7CiYjNDM7CX0KJiM0MzsKJiM0MzsJKmZsYWdzcCA9IDA7CiYjNDM7CWZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpICZsdDsgQVJSQVlfU0laRSh5dDkyMXhfbGVkX3RyaWdnZXJfbWFwcyk7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQljb25zdCBzdHJ1Y3QgeXQ5MjF4X2xlZF90cmlnZ2VyX21hcCAqbWFwID0gJmFtcDt5dDkyMXhfbGVkX3RyaWdnZXJfbWFwc1tpXTsKJiM0MzsKJiM0MzsJCWlmICgodmFsICZhbXA7IG1hcC0mZ3Q7bWFzaykgPT0gbWFwLSZndDttYXNrKQomIzQzOwkJCSpmbGFnc3AgfD0gbWFwLSZndDtmbGFnczsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludAomIzQzO3l0OTIxeF9sZWRfdHJpZ2dlcl9zZXQoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCBpbnQgcG9ydCwgaW50IGdyb3VwLAomIzQzOwkJICAgICAgIHVuc2lnbmVkIGxvbmcgZmxhZ3MpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgeXQ5MjF4X3BvcnQgKnBwID0gJmFtcDtwcml2LSZndDtwb3J0c1twb3J0XTsKJiM0MzsJc3RydWN0IHl0OTIxeF9sZWQgKmxlZCA9IHBwLSZndDtsZWRzW2dyb3VwXTsKJiM0MzsJdTMyIGFkZHI7CiYjNDM7CXUzMiBjdHJsOwomIzQzOwl1MzIgbWFzazsKJiM0MzsJaW50IHJlczsKJiM0MzsKJiM0MzsJY3RybCA9IDA7CiYjNDM7CWZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpICZsdDsgQVJSQVlfU0laRSh5dDkyMXhfbGVkX3RyaWdnZXJfbWFwcyk7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQljb25zdCBzdHJ1Y3QgeXQ5MjF4X2xlZF90cmlnZ2VyX21hcCAqbWFwID0gJmFtcDt5dDkyMXhfbGVkX3RyaWdnZXJfbWFwc1tpXTsKJiM0MzsKJiM0MzsJCWlmICgoZmxhZ3MgJmFtcDsgbWFwLSZndDtmbGFncykgPT0gbWFwLSZndDtmbGFncykgewomIzQzOwkJCWZsYWdzICZhbXA7PSB+bWFwLSZndDtmbGFnczsKJiM0MzsJCQljdHJsIHw9IG1hcC0mZ3Q7bWFzazsKJiM0MzsJCQlpZiAoIWZsYWdzKQomIzQzOwkJCQlicmVhazsKJiM0MzsJCX0KJiM0MzsJfQomIzQzOwlpZiAoZmxhZ3MpCiYjNDM7CQlyZXR1cm4gLUVPUE5PVFNVUFA7CiYjNDM7CiYjNDM7CWxlZC0mZ3Q7dXNlX2N5Y2xlID0gZmFsc2U7CiYjNDM7CWxlZC0mZ3Q7dXNlX2R1dHkgPSBmYWxzZTsKJiM0MzsKJiM0MzsJbWFzayA9ICFncm91cCA/IFlUOTIxWF9MRUQwX1BPUlRfQUNUX00gOiBZVDkyMVhfTEVEeF9QT1JUX0FDVF9NOwomIzQzOwlpZiAoZ3JvdXAgPT0gMikgewomIzQzOwkJbWFzayB8PSBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbl9NKGdyb3VwKTsKJiM0MzsJCWN0cmwgfD0gWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW5fRE9OVENBUkUoZ3JvdXApOwomIzQzOwl9CiYjNDM7CWFkZHIgPSB5dDkyMXhfbGVkX3JlZ2FkZHIocHJpdiwgcG9ydCwgZ3JvdXApOwomIzQzOwlyZXMgPSB5dDkyMXhfcmVnX3VwZGF0ZV9iaXRzKHByaXYsIGFkZHIsIG1hc2ssIGN0cmwpOwomIzQzOwlpZiAocmVzKQomIzQzOwkJcmV0dXJuIHJlczsKJiM0MzsKJiM0MzsJaWYgKGdyb3VwICE9IDIpIHsKJiM0MzsJCW1hc2sgPSBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbl9NKGdyb3VwKTsKJiM0MzsJCWN0cmwgPSBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbl9ET05UQ0FSRShncm91cCk7CiYjNDM7CQlyZXMgPSB5dDkyMXhfcmVnX3VwZGF0ZV9iaXRzKHByaXYsIFlUOTIxWF9MRUQyX1BPUlRuKHBvcnQpLAomIzQzOwkJCQkJICAgICBtYXNrLCBjdHJsKTsKJiM0MzsJCWlmIChyZXMpCiYjNDM7CQkJcmV0dXJuIHJlczsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludAomIzQzO3l0OTIxeF9jbGVkX2JyaWdodG5lc3Nfc2V0X2Jsb2NraW5nKHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2LAomIzQzOwkJCQkgICAgZW51bSBsZWRfYnJpZ2h0bmVzcyBicmlnaHRuZXNzKQomIzQzO3sKJiM0MzsJc3RydWN0IHl0OTIxeF9sZWQgKmxlZCA9IHRvX3l0OTIxeF9sZWQobGVkX2NkZXYpOwomIzQzOwlzdHJ1Y3QgeXQ5MjF4X3BvcnQgKnBwID0gdG9feXQ5MjF4X3BvcnQobGVkKTsKJiM0MzsJc3RydWN0IHl0OTIxeF9wcml2ICpwcml2ID0gdG9feXQ5MjF4X3ByaXYocHApOwomIzQzOwlpbnQgcmVzOwomIzQzOwomIzQzOwltdXRleF9sb2NrKCZhbXA7cHJpdi0mZ3Q7cmVnX2xvY2spOwomIzQzOwlyZXMgPSB5dDkyMXhfbGVkX2ZvcmNlX3NldChwcml2LCBwcC0mZ3Q7aW5kZXgsIGxlZC0mZ3Q7Z3JvdXAsIGJyaWdodG5lc3MpOwomIzQzOwltdXRleF91bmxvY2soJmFtcDtwcml2LSZndDtyZWdfbG9jayk7CiYjNDM7CiYjNDM7CXJldHVybiByZXM7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQKJiM0Mzt5dDkyMXhfY2xlZF9ibGlua19zZXQoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYsIHVuc2lnbmVkIGxvbmcgKmRlbGF5X29uLAomIzQzOwkJICAgICAgdW5zaWduZWQgbG9uZyAqZGVsYXlfb2ZmKQomIzQzO3sKJiM0MzsJc3RydWN0IHl0OTIxeF9sZWQgKmxlZCA9IHRvX3l0OTIxeF9sZWQobGVkX2NkZXYpOwomIzQzOwlzdHJ1Y3QgeXQ5MjF4X3BvcnQgKnBwID0gdG9feXQ5MjF4X3BvcnQobGVkKTsKJiM0MzsJc3RydWN0IHl0OTIxeF9wcml2ICpwcml2ID0gdG9feXQ5MjF4X3ByaXYocHApOwomIzQzOwlpbnQgcmVzOwomIzQzOwomIzQzOwltdXRleF9sb2NrKCZhbXA7cHJpdi0mZ3Q7cmVnX2xvY2spOwomIzQzOwlyZXMgPSB5dDkyMXhfbGVkX2JsaW5rX3NldChwcml2LCBwcC0mZ3Q7aW5kZXgsIGxlZC0mZ3Q7Z3JvdXAsIGRlbGF5X29uLAomIzQzOwkJCQkgICBkZWxheV9vZmYpOwomIzQzOwltdXRleF91bmxvY2soJmFtcDtwcml2LSZndDtyZWdfbG9jayk7CiYjNDM7CiYjNDM7CXJldHVybiByZXM7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBzdHJ1Y3QgZGV2aWNlICogX19tYXliZV91bnVzZWQKJiM0Mzt5dDkyMXhfY2xlZF9od19jb250cm9sX2dldF9kZXZpY2Uoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgeXQ5MjF4X2xlZCAqbGVkID0gdG9feXQ5MjF4X2xlZChsZWRfY2Rldik7CiYjNDM7CXN0cnVjdCB5dDkyMXhfcG9ydCAqcHAgPSB0b195dDkyMXhfcG9ydChsZWQpOwomIzQzOwlzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYgPSB0b195dDkyMXhfcHJpdihwcCk7CiYjNDM7CXN0cnVjdCBkc2FfcG9ydCAqZHA7CiYjNDM7CiYjNDM7CWRwID0gZHNhX3RvX3BvcnQoJmFtcDtwcml2LSZndDtkcywgcHAtJmd0O2luZGV4KTsKJiM0MzsJaWYgKCFkcCkKJiM0MzsJCXJldHVybiBOVUxMOwomIzQzOwomIzQzOwlpZiAoZHNhX3BvcnRfaXNfdXNlcihkcCkpCiYjNDM7CQlyZXR1cm4gJmFtcDtkcC0mZ3Q7dXNlci0mZ3Q7ZGV2OwomIzQzOwlpZiAoZHNhX3BvcnRfaXNfY3B1KGRwKSkKJiM0MzsJCXJldHVybiAmYW1wO2RwLSZndDtjb25kdWl0LSZndDtkZXY7CiYjNDM7CiYjNDM7CXJldHVybiBOVUxMOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IF9fbWF5YmVfdW51c2VkCiYjNDM7eXQ5MjF4X2NsZWRfaHdfY29udHJvbF9pc19zdXBwb3J0ZWQoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYsCiYjNDM7CQkJCSAgICB1bnNpZ25lZCBsb25nIGZsYWdzKQomIzQzO3sKJiM0MzsJc3RydWN0IHl0OTIxeF9sZWQgKmxlZCA9IHRvX3l0OTIxeF9sZWQobGVkX2NkZXYpOwomIzQzOwlzdHJ1Y3QgeXQ5MjF4X3BvcnQgKnBwID0gdG9feXQ5MjF4X3BvcnQobGVkKTsKJiM0MzsJc3RydWN0IHl0OTIxeF9wcml2ICpwcml2ID0gdG9feXQ5MjF4X3ByaXYocHApOwomIzQzOwomIzQzOwlpZiAoeXQ5MjF4X2xlZF90cmlnZ2VyX2lzX3N1cHBvcnRlZChwcml2LCBwcC0mZ3Q7aW5kZXgsIGxlZC0mZ3Q7Z3JvdXAsIGZsYWdzKSkKJiM0MzsJCXJldHVybiAwOwomIzQzOwlyZXR1cm4gLUVPUE5PVFNVUFA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgX19tYXliZV91bnVzZWQKJiM0Mzt5dDkyMXhfY2xlZF9od19jb250cm9sX2dldChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldiwgdW5zaWduZWQgbG9uZyAqZmxhZ3NwKQomIzQzO3sKJiM0MzsJc3RydWN0IHl0OTIxeF9sZWQgKmxlZCA9IHRvX3l0OTIxeF9sZWQobGVkX2NkZXYpOwomIzQzOwlzdHJ1Y3QgeXQ5MjF4X3BvcnQgKnBwID0gdG9feXQ5MjF4X3BvcnQobGVkKTsKJiM0MzsJc3RydWN0IHl0OTIxeF9wcml2ICpwcml2ID0gdG9feXQ5MjF4X3ByaXYocHApOwomIzQzOwlpbnQgcmVzOwomIzQzOwomIzQzOwltdXRleF9sb2NrKCZhbXA7cHJpdi0mZ3Q7cmVnX2xvY2spOwomIzQzOwlyZXMgPSB5dDkyMXhfbGVkX3RyaWdnZXJfZ2V0KHByaXYsIHBwLSZndDtpbmRleCwgbGVkLSZndDtncm91cCwgZmxhZ3NwKTsKJiM0MzsJbXV0ZXhfdW5sb2NrKCZhbXA7cHJpdi0mZ3Q7cmVnX2xvY2spOwomIzQzOwomIzQzOwlyZXR1cm4gcmVzOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IF9fbWF5YmVfdW51c2VkCiYjNDM7eXQ5MjF4X2NsZWRfaHdfY29udHJvbF9zZXQoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYsIHVuc2lnbmVkIGxvbmcgZmxhZ3MpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgeXQ5MjF4X2xlZCAqbGVkID0gdG9feXQ5MjF4X2xlZChsZWRfY2Rldik7CiYjNDM7CXN0cnVjdCB5dDkyMXhfcG9ydCAqcHAgPSB0b195dDkyMXhfcG9ydChsZWQpOwomIzQzOwlzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYgPSB0b195dDkyMXhfcHJpdihwcCk7CiYjNDM7CWludCByZXM7CiYjNDM7CiYjNDM7CW11dGV4X2xvY2soJmFtcDtwcml2LSZndDtyZWdfbG9jayk7CiYjNDM7CXJlcyA9IHl0OTIxeF9sZWRfdHJpZ2dlcl9zZXQocHJpdiwgcHAtJmd0O2luZGV4LCBsZWQtJmd0O2dyb3VwLCBmbGFncyk7CiYjNDM7CW11dGV4X3VubG9jaygmYW1wO3ByaXYtJmd0O3JlZ19sb2NrKTsKJiM0MzsKJiM0MzsJcmV0dXJuIHJlczsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludAomIzQzO3l0OTIxeF9sZWRfc2V0dXAoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCBpbnQgcG9ydCwKJiM0MzsJCSBzdHJ1Y3QgZndub2RlX2hhbmRsZSAqZndub2RlKQomIzQzO3sKJiM0MzsJc3RydWN0IHl0OTIxeF9wb3J0ICpwcCA9ICZhbXA7cHJpdi0mZ3Q7cG9ydHNbcG9ydF07CiYjNDM7CXN0cnVjdCBkZXZpY2UgKmRldiA9IHRvX2RldmljZShwcml2KTsKJiM0MzsJc3RydWN0IGxlZF9pbml0X2RhdGEgaW5pdF9kYXRhOwomIzQzOwlzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldjsKJiM0MzsJY2hhciBuYW1lW0xFRF9NQVhfTkFNRV9TSVpFXTsKJiM0MzsJZW51bSBsZWRfZGVmYXVsdF9zdGF0ZSBzdGF0ZTsKJiM0MzsJc3RydWN0IHl0OTIxeF9sZWQgKmxlZDsKJiM0MzsJYm9vbCBmb3JjZV9oaWdoOwomIzQzOwlib29sIGZvcmNlX2xvdzsKJiM0MzsJdTMyIGdyb3VwOwomIzQzOwl1MzIgbWFzazsKJiM0MzsJdTMyIGN0cmw7CiYjNDM7CXUzMiB2YWw7CiYjNDM7CWJvb2wgb247CiYjNDM7CWludCByZXM7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CXJlcyA9IGZ3bm9kZV9wcm9wZXJ0eV9yZWFkX3UzMihmd25vZGUsICYjMzQ7cmVnJiMzNDssICZhbXA7Z3JvdXApOwomIzQzOwlpZiAocmVzKQomIzQzOwkJcmV0dXJuIHJlczsKJiM0MzsJaWYgKGdyb3VwICZndDs9IFlUOTIxWF9MRURfR1JPVVBfTlVNKSB7CiYjNDM7CQlkZXZfZXJyKGRldiwgJiMzNDtJbnZhbGlkIExFRCByZWcgJXUgZm9yIHBvcnQgJWRcbiYjMzQ7LCBncm91cCwgcG9ydCk7CiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJfQomIzQzOwlpZiAocHAtJmd0O2xlZHNbZ3JvdXBdKQomIzQzOwkJcmV0dXJuIC1FRVhJU1Q7CiYjNDM7CiYjNDM7CWZvcmNlX2hpZ2ggPSBmd25vZGVfcHJvcGVydHlfcmVhZF9ib29sKGZ3bm9kZSwgJiMzNDthY3RpdmUtaGlnaCYjMzQ7KTsKJiM0MzsJZm9yY2VfbG93ID0gZndub2RlX3Byb3BlcnR5X3JlYWRfYm9vbChmd25vZGUsICYjMzQ7YWN0aXZlLWxvdyYjMzQ7KTsKJiM0MzsJaWYgKGZvcmNlX2hpZ2ggJmFtcDsmYW1wOyBmb3JjZV9sb3cpIHsKJiM0MzsJCWRldl9lcnIoZGV2LCAmIzM0O0R1cGxpY2F0ZSBwb2xhcml0aWVzIGZvciBMRUQgJTAyZDolMDJ1XG4mIzM0OywKJiM0MzsJCQlwb3J0LCBncm91cCk7CiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJfQomIzQzOwomIzQzOwlsZWQgPSBkZXZtX2t6YWxsb2MoZGV2LCBzaXplb2YoKmxlZCksIEdGUF9LRVJORUwpOwomIzQzOwlpZiAoIWxlZCkKJiM0MzsJCXJldHVybiAtRU5PTUVNOwomIzQzOwlsZWQtJmd0O3BvcnQgPSBwcDsKJiM0MzsJbGVkLSZndDtncm91cCA9IGdyb3VwOwomIzQzOwomIzQzOwlzdGF0ZSA9IGxlZF9pbml0X2RlZmF1bHRfc3RhdGVfZ2V0KGZ3bm9kZSk7CiYjNDM7CiYjNDM7CW11dGV4X2xvY2soJmFtcDtwcml2LSZndDtyZWdfbG9jayk7CiYjNDM7CiYjNDM7CS8qIEludmVyc2lvbiBpcyBpbnRlcm5hbCAtIGZvcmNlIG9uIHdpbGwgZ2l2ZSBsb3cgbG9naWMuCiYjNDM7CSAqIEluIHRoZSByZXN0IG9mIHRoZSBmaWxlLCB0cmVhdCBMRURzIGFzIGlmIGFjdGl2ZS1sb3cuCiYjNDM7CSAqLwomIzQzOwlpZiAoZm9yY2VfaGlnaCB8fCBmb3JjZV9sb3cpIHsKJiM0MzsJCXJlcyA9IHl0OTIxeF9yZWdfcmVhZChwcml2LCBZVDkyMVhfTEVEX1BBUl9JTlYsICZhbXA7dmFsKTsKJiM0MzsJCWlmIChyZXMpCiYjNDM7CQkJZ290byB1bmxvY2s7CiYjNDM7CiYjNDM7CQltYXNrID0gWVQ5MjFYX0xFRF9QQVJfSU5WX0lOVm5tKGdyb3VwLCBwb3J0KTsKJiM0MzsJCWN0cmwgPSBmb3JjZV9oaWdoID8gdmFsIHwgbWFzayA6IHZhbCAmYW1wOyB+bWFzazsKJiM0MzsJCXJlcyA9IHl0OTIxeF9yZWdfd3JpdGUocHJpdiwgWVQ5MjFYX0xFRF9QQVJfSU5WLCBjdHJsKTsKJiM0MzsJCWlmIChyZXMpCiYjNDM7CQkJZ290byB1bmxvY2s7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcHAtJmd0O2xlZHNbZ3JvdXBdID0gbGVkOwomIzQzOwomIzQzOwlzd2l0Y2ggKHN0YXRlKSB7CiYjNDM7CWNhc2UgTEVEU19ERUZTVEFURV9PRkY6CiYjNDM7CWNhc2UgTEVEU19ERUZTVEFURV9PTjoKJiM0MzsJZGVmYXVsdDoKJiM0MzsJCW9uID0gc3RhdGUgPT0gTEVEU19ERUZTVEFURV9PTjsKJiM0MzsJCXJlcyA9IHl0OTIxeF9sZWRfZm9yY2Vfc2V0KHByaXYsIHBvcnQsIGdyb3VwLCBvbik7CiYjNDM7CQlicmVhazsKJiM0MzsJY2FzZSBMRURTX0RFRlNUQVRFX0tFRVA6CiYjNDM7CQlyZXMgPSB5dDkyMXhfbGVkX2ZvcmNlX2dldChwcml2LCBwb3J0LCBncm91cCwgJmFtcDtvbik7CiYjNDM7CQlicmVhazsKJiM0MzsJfQomIzQzOwomIzQzO3VubG9jazoKJiM0MzsJbXV0ZXhfdW5sb2NrKCZhbXA7cHJpdi0mZ3Q7cmVnX2xvY2spOwomIzQzOwlpZiAocmVzKQomIzQzOwkJZ290byBlcnI7CiYjNDM7CiYjNDM7CWxlZF9jZGV2ID0gJmFtcDtsZWQtJmd0O2NkZXY7CiYjNDM7CWxlZF9jZGV2LSZndDticmlnaHRuZXNzID0gb247CiYjNDM7CWxlZF9jZGV2LSZndDttYXhfYnJpZ2h0bmVzcyA9IDE7CiYjNDM7CWxlZF9jZGV2LSZndDtmbGFncyA9IExFRF9SRVRBSU5fQVRfU0hVVERPV047CiYjNDM7CWxlZF9jZGV2LSZndDticmlnaHRuZXNzX3NldF9ibG9ja2luZyA9IHl0OTIxeF9jbGVkX2JyaWdodG5lc3Nfc2V0X2Jsb2NraW5nOwomIzQzOwlsZWRfY2Rldi0mZ3Q7Ymxpbmtfc2V0ID0geXQ5MjF4X2NsZWRfYmxpbmtfc2V0OwomIzQzOyNpZmRlZiBDT05GSUdfTEVEU19UUklHR0VSUwomIzQzOwlsZWRfY2Rldi0mZ3Q7aHdfY29udHJvbF90cmlnZ2VyID0gJiMzNDtuZXRkZXYmIzM0OzsKJiM0MzsJbGVkX2NkZXYtJmd0O2h3X2NvbnRyb2xfZ2V0X2RldmljZSA9IHl0OTIxeF9jbGVkX2h3X2NvbnRyb2xfZ2V0X2RldmljZTsKJiM0MzsJbGVkX2NkZXYtJmd0O2h3X2NvbnRyb2xfaXNfc3VwcG9ydGVkID0geXQ5MjF4X2NsZWRfaHdfY29udHJvbF9pc19zdXBwb3J0ZWQ7CiYjNDM7CWxlZF9jZGV2LSZndDtod19jb250cm9sX2dldCA9IHl0OTIxeF9jbGVkX2h3X2NvbnRyb2xfZ2V0OwomIzQzOwlsZWRfY2Rldi0mZ3Q7aHdfY29udHJvbF9zZXQgPSB5dDkyMXhfY2xlZF9od19jb250cm9sX3NldDsKJiM0MzsjZW5kaWYKJiM0MzsKJiM0MzsJc25wcmludGYobmFtZSwgc2l6ZW9mKG5hbWUpLCBZVDkyMVhfTkFNRSAmIzM0Oy0ldTolMDJkOiUwMnUmIzM0OywKJiM0MzsJCSBwcml2LSZndDtkcy5pbmRleCwgcG9ydCwgZ3JvdXApOwomIzQzOwlpbml0X2RhdGEgPSAodHlwZW9mKGluaXRfZGF0YSkpewomIzQzOwkJLmZ3bm9kZSA9IGZ3bm9kZSwKJiM0MzsJCS5kZWZhdWx0X2xhYmVsID0gJiMzNDs6cG9ydCYjMzQ7LAomIzQzOwkJLmRldmljZW5hbWUgPSBuYW1lLAomIzQzOwkJLmRldm5hbWVfbWFuZGF0b3J5ID0gdHJ1ZSwKJiM0MzsJfTsKJiM0MzsJcmVzID0gZGV2bV9sZWRfY2xhc3NkZXZfcmVnaXN0ZXJfZXh0KGRldiwgbGVkX2NkZXYsICZhbXA7aW5pdF9kYXRhKTsKJiM0MzsJaWYgKHJlcykKJiM0MzsJCWdvdG8gZXJyOwomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0MzsKJiM0MztlcnI6CiYjNDM7CXJldCA9IHJlczsKJiM0MzsKJiM0MzsJbXV0ZXhfbG9jaygmYW1wO3ByaXYtJmd0O3JlZ19sb2NrKTsKJiM0MzsJaWYgKHBwLSZndDtsZWRzW2dyb3VwXSkgewomIzQzOwkJaWYgKGZvcmNlX2hpZ2ggfHwgZm9yY2VfbG93KSB7CiYjNDM7CQkJcmVzID0geXQ5MjF4X3JlZ193cml0ZShwcml2LCBZVDkyMVhfTEVEX1BBUl9JTlYsIHZhbCk7CiYjNDM7CQkJaWYgKHJlcykKJiM0MzsJCQkJZGV2X3dhcm4oZGV2LAomIzQzOwkJCQkJICYjMzQ7RmFpbGVkIHRvIHJldm9rZSBpbml0aWFsaXphdGlvbiBmb3IgTEVEICUwMmQ6JTAydVxuJiMzNDssCiYjNDM7CQkJCQkgcG9ydCwgZ3JvdXApOwomIzQzOwkJfQomIzQzOwomIzQzOwkJcHAtJmd0O2xlZHNbZ3JvdXBdID0gTlVMTDsKJiM0MzsJfQomIzQzOwltdXRleF91bmxvY2soJmFtcDtwcml2LSZndDtyZWdfbG9jayk7CiYjNDM7CiYjNDM7CWRldm1fa2ZyZWUoZGV2LCBsZWQpOwomIzQzOwlyZXR1cm4gcmV0OwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCB5dDkyMXhfbGVkc19yZW1vdmVfcG9ydChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIGludCBwb3J0KQomIzQzO3sKJiM0MzsJc3RydWN0IHl0OTIxeF9wb3J0ICpwcCA9ICZhbXA7cHJpdi0mZ3Q7cG9ydHNbcG9ydF07CiYjNDM7CXN0cnVjdCBkZXZpY2UgKmRldiA9IHRvX2RldmljZShwcml2KTsKJiM0MzsJYm9vbCBoYXNfbGVkcyA9IGZhbHNlOwomIzQzOwomIzQzOwlmb3IgKGludCBncm91cCA9IDA7IGdyb3VwICZsdDsgWVQ5MjFYX0xFRF9HUk9VUF9OVU07IGdyb3VwJiM0MzsmIzQzOykgewomIzQzOwkJc3RydWN0IHl0OTIxeF9sZWQgKmxlZCA9IHBwLSZndDtsZWRzW2dyb3VwXTsKJiM0MzsKJiM0MzsJCWlmIChsZWQpIHsKJiM0MzsJCQlkZXZtX2xlZF9jbGFzc2Rldl91bnJlZ2lzdGVyKGRldiwgJmFtcDtsZWQtJmd0O2NkZXYpOwomIzQzOwkJCWhhc19sZWRzID0gdHJ1ZTsKJiM0MzsJCX0KJiM0MzsJfQomIzQzOwomIzQzOwlpZiAoIWhhc19sZWRzKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwkvKiBOb3cgbm8gb25lIGNhbiBhY2Nlc3MgdGhlIExFRCBjb250cm9sIGJsb2NrcywgZnJlZSB0aGVtIHdpdGhvdXQKJiM0MzsJICogaG9sZGluZyB0aGUgbG9jay4KJiM0MzsJICovCiYjNDM7CWZvciAoaW50IGdyb3VwID0gMDsgZ3JvdXAgJmx0OyBZVDkyMVhfTEVEX0dST1VQX05VTTsgZ3JvdXAmIzQzOyYjNDM7KSB7CiYjNDM7CQlzdHJ1Y3QgeXQ5MjF4X2xlZCAqbGVkID0gcHAtJmd0O2xlZHNbZ3JvdXBdOwomIzQzOwomIzQzOwkJaWYgKGxlZCkgewomIzQzOwkJCXBwLSZndDtsZWRzW2dyb3VwXSA9IE5VTEw7CiYjNDM7CQkJZGV2bV9rZnJlZShkZXYsIGxlZCk7CiYjNDM7CQl9CiYjNDM7CX0KJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCB5dDkyMXhfbGVkc19zZXR1cF9wb3J0KHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgaW50IHBvcnQpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSB0b19kZXZpY2UocHJpdik7CiYjNDM7CXN0cnVjdCBkc2Ffc3dpdGNoICpkcyA9ICZhbXA7cHJpdi0mZ3Q7ZHM7CiYjNDM7CXN0cnVjdCBkZXZpY2Vfbm9kZSAqbGVkc19ucDsKJiM0MzsJc3RydWN0IGRzYV9wb3J0ICpkcDsKJiM0MzsKJiM0MzsJZHAgPSBkc2FfdG9fcG9ydChkcywgcG9ydCk7CiYjNDM7CWxlZHNfbnAgPSBvZl9nZXRfY2hpbGRfYnlfbmFtZShkcC0mZ3Q7ZG4sICYjMzQ7bGVkcyYjMzQ7KTsKJiM0MzsJaWYgKCFsZWRzX25wKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CWlmIChwb3J0ICZndDs9IFlUOTIxWF9MRURfUE9SVF9OVU0pIHsKJiM0MzsJCWRldl9lcnIoZGV2LCAmIzM0O0Nhbm5vdCBjb25maWd1cmUgTEVEcyBmb3IgcG9ydCAlZFxuJiMzNDssIHBvcnQpOwomIzQzOwkJb2Zfbm9kZV9wdXQobGVkc19ucCk7CiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJfQomIzQzOwomIzQzOwlmb3JfZWFjaF9jaGlsZF9vZl9ub2RlX3Njb3BlZChsZWRzX25wLCBsZWRfbnApIHsKJiM0MzsJCXl0OTIxeF9sZWRfc2V0dXAocHJpdiwgcG9ydCwgb2ZfZndub2RlX2hhbmRsZShsZWRfbnApKTsKJiM0MzsJCS8qIEFsbG93IHBhcnRpYWwgY29uZmlndXJhdGlvbjogTEVEcyBhcmUgb3B0aW9uYWwgKi8KJiM0MzsJfQomIzQzOwomIzQzOwlvZl9ub2RlX3B1dChsZWRzX25wKTsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3ZvaWQgeXQ5MjF4X2xlZHNfcmVtb3ZlKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdikKJiM0Mzt7CiYjNDM7CWZvciAoaW50IHBvcnQgPSAwOyBwb3J0ICZsdDsgWVQ5MjFYX0xFRF9QT1JUX05VTTsgcG9ydCYjNDM7JiM0MzspCiYjNDM7CQl5dDkyMXhfbGVkc19yZW1vdmVfcG9ydChwcml2LCBwb3J0KTsKJiM0Mzt9CiYjNDM7CiYjNDM7aW50IHl0OTIxeF9sZWRzX3NldHVwKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBkc2Ffc3dpdGNoICpkcyA9ICZhbXA7cHJpdi0mZ3Q7ZHM7CiYjNDM7CXN0cnVjdCBkc2FfcG9ydCAqZHA7CiYjNDM7CiYjNDM7CS8qIExFRHMgYXJlIGFsd2F5cyBlbmFibGVkLiBUaGVyZSBpcyBubyB3YXkgdG8gZGlzYWJsZSB0aGVtIGFsdG9nZXRoZXIKJiM0MzsJICogKGFzIGZhciBhcyBJIGtub3cpLgomIzQzOwkgKi8KJiM0MzsKJiM0MzsJZHNhX3N3aXRjaF9mb3JfZWFjaF9wb3J0KGRwLCBkcykgewomIzQzOwkJaW50IHBvcnQgPSBkcC0mZ3Q7aW5kZXg7CiYjNDM7CiYjNDM7CQlpZiAoIWRwLSZndDtkbikKJiM0MzsJCQljb250aW51ZTsKJiM0MzsKJiM0MzsJCXl0OTIxeF9sZWRzX3NldHVwX3BvcnQocHJpdiwgcG9ydCk7CiYjNDM7CQkvKiBBbGxvdyBwYXJ0aWFsIGNvbmZpZ3VyYXRpb246IExFRHMgYXJlIG9wdGlvbmFsICovCiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9sZWRzLmggYi9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2xlZHMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwLi4zYzM2NDI5ODhhYzc3Ci0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9sZWRzLmgKQEAgLTAsMCAmIzQzOzEsMTIxIEBACiYjNDM7LyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb3ItbGF0ZXIgKi8KJiM0MzsvKgomIzQzOyAqIENvcHlyaWdodCAoYykgMjAyNiBEYXZpZCBZYW5nCiYjNDM7ICovCiYjNDM7CiYjNDM7I2lmbmRlZiBfWVRfTEVEU19ICiYjNDM7I2RlZmluZSBfWVRfTEVEU19ICiYjNDM7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2JpdGZpZWxkLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2JpdHMuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgva2NvbmZpZy5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9sZWRzLmgmZ3Q7CiYjNDM7CiYjNDM7I2RlZmluZSBZVDkyMVhfTEVEX0NUUkwJCQkweGQwMDAwCiYjNDM7I2RlZmluZSAgWVQ5MjFYX0xFRF9DVFJMX1VOSwkJCUJJVCgyMSkKJiM0MzsjZGVmaW5lICBZVDkyMVhfTEVEX0NUUkxfTE9PUERFVEVDVF9CTElOS19NCUdFTk1BU0soMjAsIDE5KQkvKiBjeWNsZSA9IDUxMiAqIHggbXMgKi8KJiM0MzsjZGVmaW5lICAgWVQ5MjFYX0xFRF9DVFJMX0xPT1BERVRFQ1RfQkxJTksoeCkJCUZJRUxEX1BSRVAoWVQ5MjFYX0xFRF9DVFJMX0xPT1BERVRFQ1RfQkxJTktfTSwgKHgpKQomIzQzOyNkZWZpbmUgIFlUOTIxWF9MRURfQ1RSTF9QT1JUX05VTV9NCQlHRU5NQVNLKDE2LCAxMykKJiM0MzsjZGVmaW5lICAgWVQ5MjFYX0xFRF9DVFJMX1BPUlRfTlVNKHgpCQkJRklFTERfUFJFUChZVDkyMVhfTEVEX0NUUkxfUE9SVF9OVU1fTSwgKHgpKQomIzQzOyNkZWZpbmUgIFlUOTIxWF9MRURfQ1RSTF9NT0RFX00JCQlHRU5NQVNLKDEsIDApCiYjNDM7I2RlZmluZSAgIFlUOTIxWF9MRURfQ1RSTF9NT0RFKHgpCQkJRklFTERfUFJFUChZVDkyMVhfTEVEX0NUUkxfTU9ERV9NLCAoeCkpCiYjNDM7I2RlZmluZSAgIFlUOTIxWF9MRURfQ1RSTF9NT0RFX1BBUkFMTEVMCQkJWVQ5MjFYX0xFRF9DVFJMX01PREUoMCkKJiM0MzsjZGVmaW5lICAgWVQ5MjFYX0xFRF9DVFJMX01PREVfU0VSSUFMCQkJWVQ5MjFYX0xFRF9DVFJMX01PREUoMikKJiM0MzsjZGVmaW5lIFlUOTIxWF9MRUQwX1BPUlRuKHBvcnQpCQkoMHhkMDAwNCAmIzQzOyA0ICogKHBvcnQpKQomIzQzOyNkZWZpbmUgIFlUOTIxWF9MRUQwX1BPUlRfQUNUX00JCQlHRU5NQVNLKDE3LCAwKQomIzQzOyNkZWZpbmUgIFlUOTIxWF9MRUQwX1BPUlRfQUNUX0xJTktfVFJZX0RJUwlCSVQoMTcpCiYjNDM7I2RlZmluZSAgWVQ5MjFYX0xFRDBfUE9SVF9BQ1RfQ09MTElTSU9OX0JMSU5LX0lOREkJQklUKDE2KQomIzQzOyNkZWZpbmUgWVQ5MjFYX0xFRDFfUE9SVG4ocG9ydCkJCSgweGQwMDQwICYjNDM7IDQgKiAocG9ydCkpCiYjNDM7I2RlZmluZSAgWVQ5MjFYX0xFRDFfUE9SVF9PVEhFUl9CTElOS19NCQlHRU5NQVNLKDMxLCAzMCkJLyogY3ljbGUgPSA1MTIgJmd0OyZndDsgeCBtcyAqLwomIzQzOyNkZWZpbmUgICBZVDkyMVhfTEVEMV9QT1JUX09USEVSX0JMSU5LKHgpCQlGSUVMRF9QUkVQKFlUOTIxWF9MRUQxX1BPUlRfT1RIRVJfQkxJTktfTSwgKHgpKQomIzQzOyNkZWZpbmUgIFlUOTIxWF9MRUQxX1BPUlRfRUVFX0JMSU5LX00JCUdFTk1BU0soMjksIDI4KQkvKiBjeWNsZSA9IDUxMiAmZ3Q7Jmd0OyB4IG1zICovCiYjNDM7I2RlZmluZSAgIFlUOTIxWF9MRUQxX1BPUlRfRUVFX0JMSU5LKHgpCQkJRklFTERfUFJFUChZVDkyMVhfTEVEMV9QT1JUX0VFRV9CTElOS19NLCAoeCkpCiYjNDM7I2RlZmluZSAgWVQ5MjFYX0xFRDFfUE9SVF9CTElOS19EVVRZX0NPTVAJQklUKDI3KQomIzQzOyNkZWZpbmUgIFlUOTIxWF9MRUQxX1BPUlRfQkxJTktfRFVUWV9NCQlHRU5NQVNLKDI2LCAyNSkKJiM0MzsjZGVmaW5lICAgWVQ5MjFYX0xFRDFfUE9SVF9CTElOS19EVVRZKHgpCQlGSUVMRF9QUkVQKFlUOTIxWF9MRUQxX1BPUlRfQkxJTktfRFVUWV9NLCAoeCkpCiYjNDM7I2RlZmluZSAgIFlUOTIxWF9MRUQxX1BPUlRfQkxJTktfRFVUWV8xXzIJCVlUOTIxWF9MRUQxX1BPUlRfQkxJTktfRFVUWSgwKQomIzQzOyNkZWZpbmUgICBZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFlfMl8zCQlZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFkoMSkKJiM0MzsjZGVmaW5lICAgWVQ5MjFYX0xFRDFfUE9SVF9CTElOS19EVVRZXzNfNAkJWVQ5MjFYX0xFRDFfUE9SVF9CTElOS19EVVRZKDIpCiYjNDM7I2RlZmluZSAgIFlUOTIxWF9MRUQxX1BPUlRfQkxJTktfRFVUWV81XzYJCVlUOTIxWF9MRUQxX1BPUlRfQkxJTktfRFVUWSgzKQomIzQzOyNkZWZpbmUgWVQ5MjFYX0xFRDJfUE9SVG4ocG9ydCkJCSgweGQwMDgwICYjNDM7IDQgKiAocG9ydCkpCiYjNDM7I2RlZmluZSAgWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW5fTShncnApCQlHRU5NQVNLKDQgKiAoZ3JwKSAmIzQzOyAxOSwgNCAqIChncnApICYjNDM7IDE4KQomIzQzOyNkZWZpbmUgICBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbihncnAsIHgpCQkoKHgpICZsdDsmbHQ7ICg0ICogKGdycCkgJiM0MzsgMTgpKQomIzQzOyNkZWZpbmUgICBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbl9ET05UQ0FSRShncnApCQlZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbihncnAsIDApCiYjNDM7I2RlZmluZSAgIFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuX0JMSU5LKGdycCkJCVlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuKGdycCwgMSkKJiM0MzsjZGVmaW5lICAgWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW5fT04oZ3JwKQkJWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW4oZ3JwLCAyKQomIzQzOyNkZWZpbmUgICBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbl9PRkYoZ3JwKQkJWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW4oZ3JwLCAzKQomIzQzOyNkZWZpbmUgIFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VfQkxJTktuX00oZ3JwKQlHRU5NQVNLKDQgKiAoZ3JwKSAmIzQzOyAxNywgNCAqIChncnApICYjNDM7IDE2KQkvKiBjeWNsZSA9IDUxMiAmbHQ7Jmx0OyB4IG1zICovCiYjNDM7I2RlZmluZSAgIFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VfQkxJTktuKGdycCwgeCkJCSgoeCkgJmx0OyZsdDsgKDQgKiAoZ3JwKSAmIzQzOyAxNikpCiYjNDM7I2RlZmluZSAgIFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VfQkxJTktuX09USEVSKGdycCkJWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRV9CTElOS24oZ3JwLCAzKQomIzQzOyNkZWZpbmUgIFlUOTIxWF9MRUR4X1BPUlRfQUNUX00JCQlHRU5NQVNLKDE1LCAwKQomIzQzOyNkZWZpbmUgIFlUOTIxWF9MRUR4X1BPUlRfQUNUX0VFRV9CTElOSwkJQklUKDE1KQomIzQzOyNkZWZpbmUgIFlUOTIxWF9MRUR4X1BPUlRfQUNUX0xPT1BERVRFQ1RfQkxJTksJQklUKDE0KQomIzQzOyNkZWZpbmUgIFlUOTIxWF9MRUR4X1BPUlRfQUNUX0FDVElWRV9CTElOSwlCSVQoMTMpCiYjNDM7I2RlZmluZSAgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfRFVQTEVYX0ZVTEwJQklUKDEyKQomIzQzOyNkZWZpbmUgIFlUOTIxWF9MRUR4X1BPUlRfQUNUX0RVUExFWF9IQUxGCUJJVCgxMSkKJiM0MzsjZGVmaW5lICBZVDkyMVhfTEVEeF9QT1JUX0FDVF9UWF9CTElOSwkJQklUKDEwKQomIzQzOyNkZWZpbmUgIFlUOTIxWF9MRUR4X1BPUlRfQUNUX1JYX0JMSU5LCQlCSVQoOSkKJiM0MzsjZGVmaW5lICBZVDkyMVhfTEVEeF9QT1JUX0FDVF9UWAkJQklUKDgpCiYjNDM7I2RlZmluZSAgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfUlgJCUJJVCg3KQomIzQzOyNkZWZpbmUgIFlUOTIxWF9MRUR4X1BPUlRfQUNUXzEwMDBNCQlCSVQoNikKJiM0MzsjZGVmaW5lICBZVDkyMVhfTEVEeF9QT1JUX0FDVF8xMDBNCQlCSVQoNSkKJiM0MzsjZGVmaW5lICBZVDkyMVhfTEVEeF9QT1JUX0FDVF8xME0JCUJJVCg0KQomIzQzOyNkZWZpbmUgIFlUOTIxWF9MRUR4X1BPUlRfQUNUX0NPTExJU0lPTl9CTElOSwlCSVQoMykKJiM0MzsjZGVmaW5lICBZVDkyMVhfTEVEeF9QT1JUX0FDVF8xMDAwTV9CTElOSwlCSVQoMikKJiM0MzsjZGVmaW5lICBZVDkyMVhfTEVEeF9QT1JUX0FDVF8xMDBNX0JMSU5LCUJJVCgxKQomIzQzOyNkZWZpbmUgIFlUOTIxWF9MRUR4X1BPUlRfQUNUXzEwTV9CTElOSwkJQklUKDApCiYjNDM7I2RlZmluZSBZVDkyMVhfTEVEX1NFUl9DVFJMCQkweGQwMTAwCiYjNDM7I2RlZmluZSAgWVQ5MjFYX0xFRF9TRVJfQ1RSTF9VTksJCUdFTk1BU0soMjUsIDI0KQkvKiBkZWxheT8gKi8KJiM0MzsjZGVmaW5lICBZVDkyMVhfTEVEX1NFUl9DVFJMX0FDVElWRV9MT1cJCUJJVCg0KQomIzQzOyNkZWZpbmUgIFlUOTIxWF9MRURfU0VSX0NUUkxfR1JQX05VTV9NCQlHRU5NQVNLKDEsIDApCS8qICNncnAgLSAxICovCiYjNDM7I2RlZmluZSAgIFlUOTIxWF9MRURfU0VSX0NUUkxfR1JQX05VTSh4KQkJRklFTERfUFJFUChZVDkyMVhfTEVEX1NFUl9DVFJMX0dSUF9OVU1fTSwgKHgpKQomIzQzOyNkZWZpbmUgWVQ5MjFYX0xFRF9TRVJfTUFQbm0oZ3JwLCBwb3J0KQkoMHhkMDEwNCAmIzQzOyA4ICogKDIgLSAoZ3JwKSkgJiM0MzsgNCAqICgocG9ydCkgLyA1KSkKJiM0MzsjZGVmaW5lICBZVDkyMVhfTEVEX1NFUl9NQVBfRFNUbl9QT1JUX00ocG9ydCkJR0VOTUFTSyg2ICogKChwb3J0KSAlIDUpICYjNDM7IDUsIDYgKiAoKHBvcnQpICUgNSkgJiM0MzsgMikKJiM0MzsjZGVmaW5lICAgWVQ5MjFYX0xFRF9TRVJfTUFQX0RTVG5fUE9SVChwb3J0LCB4KQkJKCh4KSAmbHQ7Jmx0OyAoNiAqICgocG9ydCkgJSA1KSAmIzQzOyAyKSkKJiM0MzsjZGVmaW5lICBZVDkyMVhfTEVEX1NFUl9NQVBfRFNUbl9MRURfTShwb3J0KQlHRU5NQVNLKDYgKiAoKHBvcnQpICUgNSkgJiM0MzsgMSwgNiAqICgocG9ydCkgJSA1KSkKJiM0MzsjZGVmaW5lICAgWVQ5MjFYX0xFRF9TRVJfTUFQX0RTVG5fTEVEKHBvcnQsIHgpCQkoKHgpICZsdDsmbHQ7ICg2ICogKChwb3J0KSAlIDUpKSkKJiM0MzsjZGVmaW5lIFlUOTIxWF9MRURfUEFSX1BPUlRTCQkweGQwMWM0CiYjNDM7I2RlZmluZSBZVDkyMVhfTEVEX1BBUl9JTlYJCTB4ZDAxYzgKJiM0MzsjZGVmaW5lICBZVDkyMVhfTEVEX1BBUl9JTlZfSU5Wbm0oZ3JwLCBwb3J0KQlCSVQoMTAgKiAoZ3JwKSAmIzQzOyAocG9ydCkpCiYjNDM7I2RlZmluZSBZVDkyMVhfTEVEX1BBUl9NQVBuKHBvcnQpCSgweGQwMWQwICYjNDM7IDQgKiAocG9ydCkpCiYjNDM7I2RlZmluZSAgWVQ5MjFYX0xFRF9QQVJfTUFQX0RTVG5fUE9SVF9NKGdycCkJR0VOTUFTSyg2ICogKGdycCkgJiM0MzsgNSwgNiAqIChncnApICYjNDM7IDIpCiYjNDM7I2RlZmluZSAgIFlUOTIxWF9MRURfUEFSX01BUF9EU1RuX1BPUlQoZ3JwLCB4KQkJKCh4KSAmbHQ7Jmx0OyAoNiAqIChncnApICYjNDM7IDIpKQomIzQzOyNkZWZpbmUgIFlUOTIxWF9MRURfUEFSX01BUF9EU1RuX0xFRF9NKGdycCkJR0VOTUFTSyg2ICogKGdycCkgJiM0MzsgMSwgNiAqIChncnApKQomIzQzOyNkZWZpbmUgICBZVDkyMVhfTEVEX1BBUl9NQVBfRFNUbl9MRUQoZ3JwLCB4KQkJKCh4KSAmbHQ7Jmx0OyAoNiAqIChncnApKSkKJiM0MzsKJiM0MzsjZGVmaW5lIFlUOTIxWF9MRURfQkxJTktfTUlOCTY0CiYjNDM7I2RlZmluZSBZVDkyMVhfTEVEX0JMSU5LX0RFRgk1MTIKJiM0MzsjZGVmaW5lIFlUOTIxWF9MRURfQkxJTktfTUFYCTIwNDgKJiM0MzsKJiM0MzsvKiAyICogbGNtKDIsIDMsIDQsIDYpICovCiYjNDM7I2RlZmluZSBZVDkyMVhfTEVEX0RVVFlfREVOT00JCTI0CiYjNDM7I2RlZmluZSBZVDkyMVhfTEVEX0RVVFkobm9tLCBkZW5vbSkJKFlUOTIxWF9MRURfRFVUWV9ERU5PTSAqIChub20pIC8gKGRlbm9tKSkKJiM0MzsKJiM0MztzdHJ1Y3QgeXQ5MjF4X3ByaXY7CiYjNDM7CiYjNDM7c3RydWN0IHl0OTIxeF9sZWQgewomIzQzOwlzdHJ1Y3QgbGVkX2NsYXNzZGV2IGNkZXY7CiYjNDM7CXN0cnVjdCB5dDkyMXhfcG9ydCAqcG9ydDsKJiM0MzsJdW5zaWduZWQgY2hhciBncm91cDsKJiM0MzsKJiM0MzsJYm9vbCB1c2VfY3ljbGU6MTsKJiM0MzsJYm9vbCB1c2VfZHV0eToxOwomIzQzO307CiYjNDM7CiYjNDM7I2lmIElTX0VOQUJMRUQoQ09ORklHX05FVF9EU0FfWVQ5MjFYX0xFRFMpCiYjNDM7CiYjNDM7dm9pZCB5dDkyMXhfbGVkc19yZW1vdmUoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2KTsKJiM0MztpbnQgeXQ5MjF4X2xlZHNfc2V0dXAoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2KTsKJiM0MzsKJiM0MzsjZWxzZQomIzQzOwomIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCB5dDkyMXhfbGVkc19yZW1vdmUoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2KSB7fQomIzQzOwomIzQzO3N0YXRpYyBpbmxpbmUgaW50IHl0OTIxeF9sZWRzX3NldHVwKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdikKJiM0Mzt7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MzsjZW5kaWYKJiM0MzsKJiM0MzsjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vc21pLmMgYi9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL3NtaS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAuLjE2NGMyNWVmNDk0YTEKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL3NtaS5jCkBAIC0wLDAgJiM0MzsxLDE1NyBAQAomIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9yLWxhdGVyCiYjNDM7LyoKJiM0MzsgKiBDb3B5cmlnaHQgKGMpIDIwMjYgRGF2aWQgWWFuZwomIzQzOyAqLwomIzQzOwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9pb3BvbGwuaCZndDsKJiM0MzsKJiM0MzsjaW5jbHVkZSAmIzM0O2NoaXAuaCYjMzQ7CiYjNDM7I2luY2x1ZGUgJiMzNDtzbWkuaCYjMzQ7CiYjNDM7CiYjNDM7I2RlZmluZSBZVDkyMVhfUE9MTF9TTEVFUF9VUwkxMDAwMAomIzQzOyNkZWZpbmUgWVQ5MjFYX1BPTExfVElNRU9VVF9VUwkxMDAwMDAKJiM0MzsKJiM0MztpbnQgeXQ5MjF4X3JlZ19yZWFkKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyICp2YWxwKQomIzQzO3sKJiM0MzsJV0FSTl9PTighbXV0ZXhfaXNfbG9ja2VkKCZhbXA7cHJpdi0mZ3Q7cmVnX2xvY2spKTsKJiM0MzsKJiM0MzsJcmV0dXJuIHByaXYtJmd0O3JlZ19vcHMtJmd0O3JlYWQocHJpdi0mZ3Q7cmVnX2N0eCwgcmVnLCB2YWxwKTsKJiM0Mzt9CiYjNDM7CiYjNDM7aW50IHl0OTIxeF9yZWdfd3JpdGUoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgdmFsKQomIzQzO3sKJiM0MzsJV0FSTl9PTighbXV0ZXhfaXNfbG9ja2VkKCZhbXA7cHJpdi0mZ3Q7cmVnX2xvY2spKTsKJiM0MzsKJiM0MzsJcmV0dXJuIHByaXYtJmd0O3JlZ19vcHMtJmd0O3dyaXRlKHByaXYtJmd0O3JlZ19jdHgsIHJlZywgdmFsKTsKJiM0Mzt9CiYjNDM7CiYjNDM7aW50IHl0OTIxeF9yZWdfd2FpdChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiBtYXNrLCB1MzIgKnZhbHApCiYjNDM7ewomIzQzOwl1MzIgdmFsOwomIzQzOwlpbnQgcmVzOwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwlyZXQgPSByZWFkX3BvbGxfdGltZW91dCh5dDkyMXhfcmVnX3JlYWQsIHJlcywKJiM0MzsJCQkJcmVzIHx8ICh2YWwgJmFtcDsgbWFzaykgPT0gKnZhbHAsCiYjNDM7CQkJCVlUOTIxWF9QT0xMX1NMRUVQX1VTLCBZVDkyMVhfUE9MTF9USU1FT1VUX1VTLAomIzQzOwkJCQlmYWxzZSwgcHJpdiwgcmVnLCAmYW1wO3ZhbCk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwlpZiAocmVzKQomIzQzOwkJcmV0dXJuIHJlczsKJiM0MzsKJiM0MzsJKnZhbHAgPSB2YWw7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztpbnQgeXQ5MjF4X3JlZ191cGRhdGVfYml0cyhzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiBtYXNrLCB1MzIgdmFsKQomIzQzO3sKJiM0MzsJaW50IHJlczsKJiM0MzsJdTMyIHY7CiYjNDM7CXUzMiB1OwomIzQzOwomIzQzOwlyZXMgPSB5dDkyMXhfcmVnX3JlYWQocHJpdiwgcmVnLCAmYW1wO3YpOwomIzQzOwlpZiAocmVzKQomIzQzOwkJcmV0dXJuIHJlczsKJiM0MzsKJiM0MzsJdSA9IHY7CiYjNDM7CXUgJmFtcDs9IH5tYXNrOwomIzQzOwl1IHw9IHZhbDsKJiM0MzsJaWYgKHUgPT0gdikKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwlyZXR1cm4geXQ5MjF4X3JlZ193cml0ZShwcml2LCByZWcsIHUpOwomIzQzO30KJiM0MzsKJiM0MztpbnQKJiM0Mzt5dDkyMXhfcmVnc19yZWFkKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyICp2YWxzLAomIzQzOwkJIHVuc2lnbmVkIGludCBudW1fcmVncykKJiM0Mzt7CiYjNDM7CWludCByZXM7CiYjNDM7CiYjNDM7CWZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpICZsdDsgbnVtX3JlZ3M7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQlyZXMgPSB5dDkyMXhfcmVnX3JlYWQocHJpdiwgcmVnICYjNDM7IDQgKiBpLCAmYW1wO3ZhbHNbaV0pOwomIzQzOwkJaWYgKHJlcykKJiM0MzsJCQlyZXR1cm4gcmVzOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztpbnQKJiM0Mzt5dDkyMXhfcmVnc193cml0ZShzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIGNvbnN0IHUzMiAqdmFscywKJiM0MzsJCSAgdW5zaWduZWQgaW50IG51bV9yZWdzKQomIzQzO3sKJiM0MzsJaW50IHJlczsKJiM0MzsKJiM0MzsJZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgJmx0OyBudW1fcmVnczsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCXJlcyA9IHl0OTIxeF9yZWdfd3JpdGUocHJpdiwgcmVnICYjNDM7IDQgKiBpLCB2YWxzW2ldKTsKJiM0MzsJCWlmIChyZXMpCiYjNDM7CQkJcmV0dXJuIHJlczsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7aW50CiYjNDM7eXQ5MjF4X3JlZ3NfdXBkYXRlX2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCBjb25zdCB1MzIgKm1hc2tzLAomIzQzOwkJCWNvbnN0IHUzMiAqdmFscywgdW5zaWduZWQgaW50IG51bV9yZWdzKQomIzQzO3sKJiM0MzsJYm9vbCBjaGFuZ2VkID0gZmFsc2U7CiYjNDM7CXUzMiB2c1s0XTsKJiM0MzsJaW50IHJlczsKJiM0MzsKJiM0MzsJaWYgKFdBUk5fT05fT05DRShudW1fcmVncyAmZ3Q7IEFSUkFZX1NJWkUodnMpKSkKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwomIzQzOwlyZXMgPSB5dDkyMXhfcmVnc19yZWFkKHByaXYsIHJlZywgdnMsIG51bV9yZWdzKTsKJiM0MzsJaWYgKHJlcykKJiM0MzsJCXJldHVybiByZXM7CiYjNDM7CiYjNDM7CWZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpICZsdDsgbnVtX3JlZ3M7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQl1MzIgdSA9IHZzW2ldOwomIzQzOwomIzQzOwkJdSAmYW1wOz0gfm1hc2tzW2ldOwomIzQzOwkJdSB8PSB2YWxzW2ldOwomIzQzOwkJaWYgKHUgIT0gdnNbaV0pCiYjNDM7CQkJY2hhbmdlZCA9IHRydWU7CiYjNDM7CiYjNDM7CQl2c1tpXSA9IHU7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKCFjaGFuZ2VkKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CXJldHVybiB5dDkyMXhfcmVnc193cml0ZShwcml2LCByZWcsIHZzLCBudW1fcmVncyk7CiYjNDM7fQomIzQzOwomIzQzO2ludAomIzQzO3l0OTIxeF9yZWdzX2NsZWFyX2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCBjb25zdCB1MzIgKm1hc2tzLAomIzQzOwkJICAgICAgIHVuc2lnbmVkIGludCBudW1fcmVncykKJiM0Mzt7CiYjNDM7CWJvb2wgY2hhbmdlZCA9IGZhbHNlOwomIzQzOwl1MzIgdnNbNF07CiYjNDM7CWludCByZXM7CiYjNDM7CiYjNDM7CWlmIChXQVJOX09OX09OQ0UobnVtX3JlZ3MgJmd0OyBBUlJBWV9TSVpFKHZzKSkpCiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsKJiM0MzsJcmVzID0geXQ5MjF4X3JlZ3NfcmVhZChwcml2LCByZWcsIHZzLCBudW1fcmVncyk7CiYjNDM7CWlmIChyZXMpCiYjNDM7CQlyZXR1cm4gcmVzOwomIzQzOwomIzQzOwlmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSAmbHQ7IG51bV9yZWdzOyBpJiM0MzsmIzQzOykgewomIzQzOwkJdTMyIHUgPSB2c1tpXTsKJiM0MzsKJiM0MzsJCXUgJmFtcDs9IH5tYXNrc1tpXTsKJiM0MzsJCWlmICh1ICE9IHZzW2ldKQomIzQzOwkJCWNoYW5nZWQgPSB0cnVlOwomIzQzOwomIzQzOwkJdnNbaV0gPSB1OwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmICghY2hhbmdlZCkKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwlyZXR1cm4geXQ5MjF4X3JlZ3Nfd3JpdGUocHJpdiwgcmVnLCB2cywgbnVtX3JlZ3MpOwomIzQzO30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vc21pLmggYi9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL3NtaS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAuLjI5OTVlOTFmM2IzZDEKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL3NtaS5oCkBAIC0wLDAgJiM0MzsxLDkyIEBACiYjNDM7LyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb3ItbGF0ZXIgKi8KJiM0MzsvKgomIzQzOyAqIENvcHlyaWdodCAoYykgMjAyNiBEYXZpZCBZYW5nCiYjNDM7ICovCiYjNDM7CiYjNDM7I2lmbmRlZiBfWVRfU01JX0gKJiM0MzsjZGVmaW5lIF9ZVF9TTUlfSAomIzQzOwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC90eXBlcy5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC93b3JkcGFydC5oJmd0OwomIzQzOwomIzQzO3N0cnVjdCB5dDkyMXhfcHJpdjsKJiM0MzsKJiM0MztpbnQgeXQ5MjF4X3JlZ19yZWFkKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyICp2YWxwKTsKJiM0MztpbnQgeXQ5MjF4X3JlZ193cml0ZShzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiB2YWwpOwomIzQzO2ludCB5dDkyMXhfcmVnX3dhaXQoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgbWFzaywgdTMyICp2YWxwKTsKJiM0MztpbnQgeXQ5MjF4X3JlZ191cGRhdGVfYml0cyhzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiBtYXNrLAomIzQzOwkJCSAgIHUzMiB2YWwpOwomIzQzOwomIzQzO3N0YXRpYyBpbmxpbmUgaW50CiYjNDM7eXQ5MjF4X3JlZ19zZXRfYml0cyhzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiBtYXNrKQomIzQzO3sKJiM0MzsJcmV0dXJuIHl0OTIxeF9yZWdfdXBkYXRlX2JpdHMocHJpdiwgcmVnLCAwLCBtYXNrKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGlubGluZSBpbnQKJiM0Mzt5dDkyMXhfcmVnX2NsZWFyX2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgbWFzaykKJiM0Mzt7CiYjNDM7CXJldHVybiB5dDkyMXhfcmVnX3VwZGF0ZV9iaXRzKHByaXYsIHJlZywgbWFzaywgMCk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbmxpbmUgaW50CiYjNDM7eXQ5MjF4X3JlZ190b2dnbGVfYml0cyhzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiBtYXNrLCBib29sIHNldCkKJiM0Mzt7CiYjNDM7CXJldHVybiB5dDkyMXhfcmVnX3VwZGF0ZV9iaXRzKHByaXYsIHJlZywgbWFzaywgIXNldCA/IDAgOiBtYXNrKTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyogU29tZSBtdWx0aS13b3JkIHJlZ2lzdGVycywgbGlrZSBWTEFObl9DVFJMLCBzaG91bGQgYmUgdHJlYXRlZCBhcyBhIHNpbmdsZQomIzQzOyAqIGxvbmcgcmVnaXN0ZXIuIE1vcmUgc3BlY2lmaWNhbGx5LCB3cml0ZXMgdG8gcGFydHMgb2YgaXRzIHdvcmRzIHdvbiYjMzk7dCBiZWNvbWUKJiM0MzsgKiB2aXNpYmxlLCB1bnRpbCB0aGUgbGFzdCB3b3JkIGlzIHdyaXR0ZW4uCiYjNDM7ICoKJiM0MzsgKiBIZXJlIHdlIHJlcXVpcmUgZnVsbCByZWFkIGFuZCB3cml0ZSBvcGVyYXRpb25zIG92ZXIgdGhlc2UgcmVnaXN0ZXJzIHRvCiYjNDM7ICogZWxpbWluYXRlIHBvdGVudGlhbCBpc3N1ZXMsIGFsdGhvdWdoIHBhcnRpYWwgcmVhZHMvd3JpdGVzIGFyZSBhbHNvIHBvc3NpYmxlLgomIzQzOyAqLwomIzQzOwomIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCB1cGRhdGVfY3RybHNfdW5hbGlnbmVkKHUzMiAqbG8sIHUzMiAqaGksIHU2NCBtYXNrLCB1NjQgdmFsKQomIzQzO3sKJiM0MzsJKmxvICZhbXA7PSB+bG93ZXJfMzJfYml0cyhtYXNrKTsKJiM0MzsJKmhpICZhbXA7PSB+dXBwZXJfMzJfYml0cyhtYXNrKTsKJiM0MzsJKmxvIHw9IGxvd2VyXzMyX2JpdHModmFsKTsKJiM0MzsJKmhpIHw9IHVwcGVyXzMyX2JpdHModmFsKTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyogeXQ5MjF4X3JlZ3NfKigpIGFyZSBleHBvcnRlZCBmb3IgbGlua2FnZSBvbmx5LiBEbyBub3QgdXNlIHRoZW0gZGlyZWN0bHkuIFVzZQomIzQzOyAqIHl0OTIxeF9yZWc2NF8qKCkgb3IgeXQ5MjF4X3JlZzk2XyooKSBpbnN0ZWFkLgomIzQzOyAqLwomIzQzOwomIzQzO2ludCB5dDkyMXhfcmVnc19yZWFkKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyICp2YWxzLAomIzQzOwkJICAgICB1bnNpZ25lZCBpbnQgbnVtX3JlZ3MpOwomIzQzO2ludCB5dDkyMXhfcmVnc193cml0ZShzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIGNvbnN0IHUzMiAqdmFscywKJiM0MzsJCSAgICAgIHVuc2lnbmVkIGludCBudW1fcmVncyk7CiYjNDM7aW50IHl0OTIxeF9yZWdzX3VwZGF0ZV9iaXRzKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgY29uc3QgdTMyICptYXNrcywKJiM0MzsJCQkgICAgY29uc3QgdTMyICp2YWxzLCB1bnNpZ25lZCBpbnQgbnVtX3JlZ3MpOwomIzQzO2ludCB5dDkyMXhfcmVnc19jbGVhcl9iaXRzKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgY29uc3QgdTMyICptYXNrcywKJiM0MzsJCQkgICB1bnNpZ25lZCBpbnQgbnVtX3JlZ3MpOwomIzQzOwomIzQzO3N0YXRpYyBpbmxpbmUgaW50CiYjNDM7eXQ5MjF4X3JlZzY0X3dyaXRlKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgY29uc3QgdTMyICp2YWxzKQomIzQzO3sKJiM0MzsJcmV0dXJuIHl0OTIxeF9yZWdzX3dyaXRlKHByaXYsIHJlZywgdmFscywgMik7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbmxpbmUgaW50CiYjNDM7eXQ5MjF4X3JlZzY0X3VwZGF0ZV9iaXRzKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgY29uc3QgdTMyICptYXNrcywKJiM0MzsJCQkgY29uc3QgdTMyICp2YWxzKQomIzQzO3sKJiM0MzsJcmV0dXJuIHl0OTIxeF9yZWdzX3VwZGF0ZV9iaXRzKHByaXYsIHJlZywgbWFza3MsIHZhbHMsIDIpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW5saW5lIGludAomIzQzO3l0OTIxeF9yZWc2NF9jbGVhcl9iaXRzKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgY29uc3QgdTMyICptYXNrcykKJiM0Mzt7CiYjNDM7CXJldHVybiB5dDkyMXhfcmVnc19jbGVhcl9iaXRzKHByaXYsIHJlZywgbWFza3MsIDIpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW5saW5lIGludAomIzQzO3l0OTIxeF9yZWc5Nl93cml0ZShzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIGNvbnN0IHUzMiAqdmFscykKJiM0Mzt7CiYjNDM7CXJldHVybiB5dDkyMXhfcmVnc193cml0ZShwcml2LCByZWcsIHZhbHMsIDMpOwomIzQzO30KJiM0MzsKJiM0MzsjZW5kaWYKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTYgMjA6Mzk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjE0NDgKCQkJCQkJCW91dHB1dDogMjQKCQkJCQkJCXRob3VnaHRzOiAxMDU3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKldvcnRoRnV6emluZyBBc3Nlc3NtZW50OiBNb3RvcmNvbW0gWVQ5MjE1IEV0aGVybmV0IFN3aXRjaCBEcml2ZXIqKgoKT2theSwgc28gdGhpcyBwYXRjaCBhZGRzIExFRCBzdXBwb3J0IGZvciB0aGUgTW90b3Jjb21tIFlUOTIxNSBldGhlcm5ldCBzd2l0Y2ggY2hpcCwgbW92aW5nIHRoZSBkcml2ZXIgYXJvdW5kIGFuZCBpbnRyb2R1Y2luZyBhIG5ldyBjb25maWcgb3B0aW9uLiBNeSBmaXJzdCB0aG91Z2h0IGlzOiBjYW4gSSBldmVuIHJlYWNoIHRoaXMgdGhpbmcgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCBsaWtlIFFFTVU/IERTQSBkcml2ZXJzLCBpbiBnZW5lcmFsLCBhcmUgZm9yIHBoeXNpY2FsIHN3aXRjaCBjaGlwcywgY29ubmVjdGVkIHZpYSBNRElPL1NQSS9JMkMsIHdoaWNoIG1ha2VzIG1lIGRvdWJ0IGl0LiBVbmxlc3MgdGhlcmUmIzM5O3MgKnNwZWNpZmljKiBRRU1VIGVtdWxhdGlvbiBmb3IgdGhpcyBwYXJ0aWN1bGFyIGNoaXAsIG9yIG1heWJlIGV2ZW4gYSBzb2Z0d2FyZS1lbXVsYXRlZCB2ZXJzaW9uIHdpdGhpbiB0aGUga2VybmVsLCBJJiMzOTttIG91dCBvZiBsdWNrLiBJJiMzOTtkIG5lZWQgdG8gY2hlY2sgZm9yIFFFTVUgZW11bGF0aW9uLCBidXQgd2l0aG91dCBzb3VyY2UsIGl0JiMzOTtzIGRpZmZpY3VsdC4gRFNBIGRyaXZlcnMgYXJlbiYjMzk7dCB1c3VhbGx5IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCgpDb3VsZCBJIGdldCBhcm91bmQgaXQgd2l0aCBhIGRldmljZSB0cmVlIG92ZXJsYXksIG9yIHVzZXItc3BhY2UgdG9vbHMgbGlrZSBgaTJjLXN0dWJgIG9yIGBtZGlvLW1vY2t1cGA/IGBtZGlvLW1vY2t1cGAgZXhpc3RzLCBidXQgaXQmIzM5O3MgcmVhbGx5IGZvciBQSFlzLCBzbyBJIGRvbiYjMzk7dCBrbm93IGlmIGl0JiMzOTtsbCBlbXVsYXRlIGEgZnVsbCBEU0Egc3dpdGNoLiBFdmVuIGlmIGl0ICpjb3VsZCosIGlzIGl0IHdvcnRoIGZ1enppbmc/IFRoZXNlIGhhcmR3YXJlLXNwZWNpZmljIGRyaXZlcnMgdGhhdCBuZWVkIHBoeXNpY2FsIGhhcmR3YXJl4oCURFNBIHN3aXRjaGVzLCBQSFlz4oCUdXN1YWxseSBhcmVuJiMzOTt0IGZ1enplZCB1bmxlc3MgdGhlcmUmIzM5O3Mgc29mdHdhcmUgZW11bGF0aW9uIG9yIHRoZXkmIzM5O3JlIHBhcnQgb2YgYSBtb2NrYWJsZSBnZW5lcmljIHN1YnN5c3RlbS4KCkxvb2tpbmcgYXQgdGhlIGluc3RydWN0aW9ucyBhZ2FpbiwgaXQgc2F5cyB0byByZXR1cm4gYFdvcnRoRnV6emluZz1mYWxzZWAgaWYgdGhlIGNvZGUgcGF0aCBpcyBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cywgZXZlbiB3aXRoIHNvZnR3YXJlIGVtdWxhdGlvbiwgb3IgaWYgaXQmIzM5O3MgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMuIFRoaXMgaXMgYSB2ZW5kb3Itc3BlY2lmaWMgRXRoZXJuZXQgc3dpdGNoIGNoaXAgZHJpdmVyLCBzbyBpdCBmYWxscyBpbnRvIHRoZSBmaXJzdCBjYXRlZ29yeS4gSXQmIzM5O3MgYW4gTURJTyBkZXZpY2UuIENhbiBNRElPIGRldmljZXMgYmUgZnV6emVkIGluIHN5emthbGxlcj8gU3l6a2FsbGVyIGhhcyBJMkMvU1BJIGZ1enppbmcsIGJ1dCBJIGRvbiYjMzk7dCByZWNhbGwgaXQgYmVpbmcgZm9yIE1ESU8gZGlyZWN0bHksIG9yIERTQSwgZm9yIHRoYXQgbWF0dGVyLgoKVGhlIHByb21wdCBzcGVjaWZpY2FsbHkgbWVudGlvbnMgY29kZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWwgZW52aXJvbm1lbnRzLiBUaGlzIGlzIGEgRFNBIHN3aXRjaCBkcml2ZXIgdGhhdCBuZWVkcyBhbiBNRElPIGJ1cyBhbmQgYSBkZXZpY2UgdHJlZSBzZXR1cCwgc28gaW4gYSBzdGFuZGFyZCBRRU1VIGVudmlyb25tZW50LCB3aXRob3V0ICpzcGVjaWZpYyogZW11bGF0aW9uLCBpdCYjMzk7cyBoaWdobHkgdW5saWtlbHkgdG8gYmUgcmVhY2hhYmxlLiBUaGVyZWZvcmUsIGBXb3J0aEZ1enppbmc9ZmFsc2VgLgoKTGV0IG1lIGp1c3QgZG91YmxlLWNoZWNrLCB0aG91Z2gsIHRvIGJlIGFic29sdXRlbHkgc3VyZS4gVGhpcyBkcml2ZXIgcmVnaXN0ZXJzIGl0c2VsZiBhcyBhbiBNRElPIGRldmljZSBkcml2ZXI6IGBtZGlvX2RyaXZlcl9yZWdpc3RlcigmYW1wO3l0OTIxeF9tZGlvX2RyaXZlcilgLiBGb3IgdGhlIGRyaXZlciB0byBwcm9iZSwgYW4gTURJTyBkZXZpY2Ugd2l0aCBhIG1hdGNoaW5nIElEIG9yIGRldmljZSB0cmVlIGNvbXBhdGlibGUgc3RyaW5nIG5lZWRzIHRvIGJlIHByZXNlbnQuIEluIFFFTVUsIHVubGVzcyB0aGVyZSYjMzk7cyBhIHNwZWNpZmljIGJvYXJkIGluc3RhbnRpYXRpb24sIGl0IHdvbiYjMzk7dCBwcm9iZS4gV2hpbGUgc3l6a2FsbGVyIGNhbiBpbmplY3QgZGV2aWNlIHRyZWUgbm9kZXMsIHRoZSBkcml2ZXIgd291bGQgc3RpbGwgdHJ5IHRvIHJlYWQvd3JpdGUgTURJTyByZWdpc3RlcnMuIElmIHRoZXJlJiMzOTtzIG5vIGhhcmR3YXJlLCB0aGUgcHJvYmUgd2lsbCBmYWlsIGVhcmx5LCBsaWtlbHkgYnkgY2hlY2tpbmcgYSBoYXJkd2FyZSBJRC4gTGV0JiMzOTtzIGxvb2sgYXQgYHl0OTIxeF9tZGlvX3Byb2JlYCBqdXN0IHRvIGRvdWJsZSBjaGVjaywgdGhvdWdoIEkgZG9uJiMzOTt0IGhhdmUgdGhlIHNvdXJjZSBmb3IgdGhhdCBhdCB0aGUgbW9tZW50LiBCdXQgdGhlIGNvbmNsdXNpb24gcmVtYWluczogbm90IHdvcnRoIGZ1enppbmcsIGJhc2VkIG9uIHRoaXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTYgMjA6Mzk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7eXQ5MjF4X21kaW9fcHJvYmUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM9NDY4Mj1zdGF0aWMgdm9pZCB5dDkyMXhfbWRpb19yZW1vdmUoc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2KVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTQ3MTctXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzo0NzE4OnN0YXRpYyBpbnQgeXQ5MjF4X21kaW9fcHJvYmUoc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2KVxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNDcxOS17XG4tLVxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM9NDc3Mj1zdGF0aWMgc3RydWN0IG1kaW9fZHJpdmVyIHl0OTIxeF9tZGlvX2RyaXZlciA9IHtcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjQ3NzM6XHQucHJvYmUgPSB5dDkyMXhfbWRpb19wcm9iZSxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTQ3NzQtXHQucmVtb3ZlID0geXQ5MjF4X21kaW9fcmVtb3ZlLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE2IDIwOjM5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIzNDQ5CgkJCQkJCQlvdXRwdXQ6IDQyCgkJCQkJCQl0aG91Z2h0czogMTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgdGhlIGB5dDkyMXhfbWRpb19wcm9iZWAgRnVuY3Rpb24qKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byBgeXQ5MjF4X21kaW9fcHJvYmVgLiBNeSBpbW1lZGlhdGUgZ29hbCBpcyB0byB1bmRlcnN0YW5kIGl0cyByb2xlIHdpdGhpbiB0aGUgYnJvYWRlciBmcmFtZXdvcmssIHByZXN1bWFibHkgcmVsYXRlZCB0byB0aGUgaW5pdGlhbGl6YXRpb24gYW5kIGludGVyYWN0aW9uIHdpdGggYW4gTURJTyAoTWFuYWdlbWVudCBEYXRhIElucHV0L091dHB1dCkgaW50ZXJmYWNlLCBsaWtlbHkgYXNzb2NpYXRlZCB3aXRoIGEgUEhZIG9yIG90aGVyIG5ldHdvcmsgZGV2aWNlIHdpdGhpbiBhIHN5c3RlbSBsZXZlcmFnaW5nIGEgWXQ5MjF4IGNoaXAuIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIGtleSBhc3BlY3RzOgoKKiAgICoqRGV2aWNlIFRyZWUgSW50ZXJhY3Rpb246KiogSG93IGRvZXMgdGhpcyBmdW5jdGlvbiB1dGlsaXplIHRoZSBEZXZpY2UgVHJlZSAob3IgZXF1aXZhbGVudCBjb25maWd1cmF0aW9uIG1lY2hhbmlzbSkgdG8gaWRlbnRpZnkgYW5kIGNvbmZpZ3VyZSB0aGUgc3BlY2lmaWMgTURJTyBjb250cm9sbGVyIGFuZCBhdHRhY2hlZCBQSFkocyk/IEkmIzM5O2xsIGJlIHNlYXJjaGluZyBmb3IgY2FsbHMgdG8gZnVuY3Rpb25zIGxpa2UgYG9mX21hdGNoX3RhYmxlYCwgYG9mX3Byb3BlcnR5X3JlYWRfKmAsIGFuZCB0aGUgbGlrZS4gVGhpcyB3aWxsIGJlIHRoZSBmb3VuZGF0aW9uYWwgaW5mb3JtYXRpb24uCiogICAqKlJlc291cmNlIEFsbG9jYXRpb246KiogV2hhdCByZXNvdXJjZXMgZG9lcyBpdCByZXF1ZXN0IGFuZCBtYW5hZ2U/IFNwZWNpZmljYWxseSwgSSYjMzk7bSBpbnRlcmVzdGVkIGluIG1lbW9yeSByZWdpb25zIChmb3IgTU1JTyBhY2Nlc3MpLCBpbnRlcnJ1cHQgbGluZXMsIGFuZCBwb3NzaWJseSBjbG9jayBjb25maWd1cmF0aW9ucy4gVGhpcyBpbmNsdWRlcyBob3cgaXQgaGFuZGxlcyBlcnJvciBjb25kaXRpb25zIHJlbGF0ZWQgdG8gcmVzb3VyY2UgYWxsb2NhdGlvbiwgYW5kIHdoYXQgaXQgZG9lcyBpbiBjYXNlIG9mIGZhaWx1cmVzLgoqICAgKipNRElPIENvbnRyb2xsZXIgSW5pdGlhbGl6YXRpb246KiogSSBuZWVkIHRvIGZpbmQgdGhlIHNwZWNpZmljIGluaXRpYWxpemF0aW9uIHJvdXRpbmVzIGZvciB0aGUgdW5kZXJseWluZyBNRElPIGNvbnRyb2xsZXIuIFRoaXMgbWlnaHQgaW52b2x2ZSBzZXR0aW5nIHVwIHRoZSBjbG9jayBmcmVxdWVuY3ksIGNvbmZpZ3VyaW5nIHRoZSBNRElPIGJ1cyBzcGVlZCwgYW5kIHBvdGVudGlhbGx5IGVuYWJsaW5nIHNwZWNpZmljIE1ESU8gZnVuY3Rpb25hbGl0aWVzIChsaWtlIGF1dG8tbmVnb3RpYXRpb24sIGV0Yy4pLiBJIGFudGljaXBhdGUgbG93LWxldmVsIHJlZ2lzdGVyIHdyaXRlcyBhdCBzb21lIHBvaW50LgoqICAgKipQSFkgRGV0ZWN0aW9uIGFuZCBDb25maWd1cmF0aW9uOioqIElzIHRoZXJlIFBIWSBkZXRlY3Rpb24gaW52b2x2ZWQ/IERvZXMgaXQgcHJvYmUgZm9yIHNwZWNpZmljIFBIWXMgb3IgdXNlIGEgZ2VuZXJpYyBhcHByb2FjaD8gV2hhdCBhcmUgdGhlIG1lY2hhbmlzbXMgZm9yIGNvbmZpZ3VyaW5nIHRoZSBkZXRlY3RlZCBQSFk/IFRoaXMgaXMgY3JpdGljYWwgZm9yIHVuZGVyc3RhbmRpbmcgdGhlIGRldmljZSYjMzk7cyBvcGVyYXRpb25hbCBjaGFyYWN0ZXJpc3RpY3MuIEkgZXhwZWN0IHRvIHNlZSByZWdpc3RlciBhY2Nlc3NlcywgYnV0IEkmIzM5O20gbG9va2luZyBmb3IgdGhlIG92ZXJhbGwgbG9naWMgdG8gc2VlIGhvdyB0aGUgc29mdHdhcmUgZGV0ZXJtaW5lcyB3aGV0aGVyIFBIWXMgYXJlIHByZXNlbnQgb3Igbm90LgoqICAgKipEcml2ZXIgUmVnaXN0cmF0aW9uOioqIEhvdyBkb2VzIHRoZSBkcml2ZXIgcmVnaXN0ZXIgaXRzZWxmIHdpdGggdGhlIGtlcm5lbCYjMzk7cyBNRElPIHN1YnN5c3RlbSAoaWYgYXBwbGljYWJsZSk/IEkmIzM5O2xsIGxvb2sgZm9yIHJlZ2lzdHJhdGlvbnMgb2YgYnVzIGRyaXZlcnMsIGRldmljZSBkcml2ZXJzLCBvciBhbnl0aGluZyByZWxhdGVkIHRvIHRoZSBrZXJuZWwmIzM5O3MgY29yZSBNRElPIEFQSS4gSSYjMzk7bSB0cnlpbmcgdG8gc2VlIGhvdyB0aGUgc3lzdGVtIHVuZGVyc3RhbmRzIHdoYXQgaXMgY29ubmVjdGVkLgoqICAgKipFcnJvciBIYW5kbGluZzoqKiBJdCB3aWxsIGJlIGltcG9ydGFudCB0byBjYXJlZnVsbHkgZXhhbWluZSB0aGUgZXJyb3IgY29uZGl0aW9ucyBhbmQgaGFuZGxpbmcgdGhyb3VnaG91dCB0aGUgZnVuY3Rpb24uIEFyZSB0aGVyZSByZXRyaWVzPyBGYWxsYmFja3M/IEdyYWNlZnVsIGVycm9yIHJlcG9ydGluZz8gSG93IGRvZXMgaXQgaGFuZGxlIGRldmljZS1zcGVjaWZpYyBpc3N1ZXM/IEkmIzM5O2xsIGJlIGFzc2Vzc2luZyB0aGUgcm9idXN0bmVzcyBvZiB0aGUgaW1wbGVtZW50YXRpb24uCgpJbiBlc3NlbmNlLCBJIG5lZWQgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiBob3cgdGhpcyBmdW5jdGlvbiBzZXRzIHVwIHRoZSBNRElPIGludGVyZmFjZSwgZGlzY292ZXJzIGFuZCBjb25maWd1cmVzIGFueSBjb25uZWN0ZWQgUEhZcywgYW5kIGludGVncmF0ZXMgd2l0aCB0aGUgcmVzdCBvZiB0aGUgc3lzdGVtLiBJJiMzOTttIHJlYWR5IHRvIGRpZyBpbnRvIHRoZSBjb2RlIGFuZCBzdGFydCBmaWd1cmluZyB0aGlzIG91dC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNiAyMDozOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNDcxOCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDs0NzE4Olx0c3RhdGljIGludCB5dDkyMXhfbWRpb19wcm9iZShzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYpXG40NzE5Olx0e1xuNDcyMDpcdFx0c3RydWN0IGRldmljZSAqZGV2ID0gXHUwMDI2bWRpb2Rldi1cdTAwM2VkZXY7XG40NzIxOlx0XHRzdHJ1Y3QgeXQ5MjF4X3JlZ19tZGlvICptZGlvO1xuNDcyMjpcdFx0c3RydWN0IHl0OTIxeF9wcml2ICpwcml2O1xuNDcyMzpcdFx0c3RydWN0IGRzYV9zd2l0Y2ggKmRzO1xuNDcyNDpcdFxuNDcyNTpcdFx0cHJpdiA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZigqcHJpdiksIEdGUF9LRVJORUwpO1xuNDcyNjpcdFx0aWYgKCFwcml2KVxuNDcyNzpcdFx0XHRyZXR1cm4gLUVOT01FTTtcbjQ3Mjg6XHRcbjQ3Mjk6XHRcdG1kaW8gPSBkZXZtX2t6YWxsb2MoZGV2LCBzaXplb2YoKm1kaW8pLCBHRlBfS0VSTkVMKTtcbjQ3MzA6XHRcdGlmICghbWRpbylcbjQ3MzE6XHRcdFx0cmV0dXJuIC1FTk9NRU07XG40NzMyOlx0XG40NzMzOlx0XHRtZGlvLVx1MDAzZWJ1cyA9IG1kaW9kZXYtXHUwMDNlYnVzO1xuNDczNDpcdFx0bWRpby1cdTAwM2VhZGRyID0gbWRpb2Rldi1cdTAwM2VhZGRyO1xuNDczNTpcdFx0bWRpby1cdTAwM2Vzd2l0Y2hpZCA9IDA7XG40NzM2Olx0XG40NzM3Olx0XHRtdXRleF9pbml0KFx1MDAyNnByaXYtXHUwMDNlcmVnX2xvY2spO1xuNDczODpcdFxuNDczOTpcdFx0cHJpdi1cdTAwM2VyZWdfb3BzID0gXHUwMDI2eXQ5MjF4X3JlZ19vcHNfbWRpbztcbjQ3NDA6XHRcdHByaXYtXHUwMDNlcmVnX2N0eCA9IG1kaW87XG40NzQxOlx0XG40NzQyOlx0XHRmb3IgKHNpemVfdCBpID0gMDsgaSBcdTAwM2MgQVJSQVlfU0laRShwcml2LVx1MDAzZXBvcnRzKTsgaSYjNDM7JiM0MzspIHtcbjQ3NDM6XHRcdFx0c3RydWN0IHl0OTIxeF9wb3J0ICpwcCA9IFx1MDAyNnByaXYtXHUwMDNlcG9ydHNbaV07XG40NzQ0Olx0XG40NzQ1Olx0XHRcdHBwLVx1MDAzZWluZGV4ID0gaTtcbjQ3NDY6XHRcdFx0SU5JVF9ERUxBWUVEX1dPUksoXHUwMDI2cHAtXHUwMDNlbWliX3JlYWQsIHl0OTIxeF9wb2xsX21pYik7XG40NzQ3Olx0XHR9XG40NzQ4Olx0XG40NzQ5Olx0XHRkcyA9IFx1MDAyNnByaXYtXHUwMDNlZHM7XG40NzUwOlx0XHRkcy1cdTAwM2VkZXYgPSBkZXY7XG40NzUxOlx0XHRkcy1cdTAwM2Vhc3Npc3RlZF9sZWFybmluZ19vbl9jcHVfcG9ydCA9IHRydWU7XG40NzUyOlx0XHRkcy1cdTAwM2Vkc2NwX3ByaW9fbWFwcGluZ19pc19nbG9iYWwgPSB0cnVlO1xuNDc1MzpcdFx0ZHMtXHUwMDNlcHJpdiA9IHByaXY7XG40NzU0Olx0XHRkcy1cdTAwM2VvcHMgPSBcdTAwMjZ5dDkyMXhfZHNhX3N3aXRjaF9vcHM7XG40NzU1Olx0XHRkcy1cdTAwM2VhZ2VpbmdfdGltZV9taW4gPSAxICogNTAwMDtcbjQ3NTY6XHRcdGRzLVx1MDAzZWFnZWluZ190aW1lX21heCA9IFUxNl9NQVggKiA1MDAwO1xuNDc1NzpcdFx0ZHMtXHUwMDNlcGh5bGlua19tYWNfb3BzID0gXHUwMDI2eXQ5MjF4X3BoeWxpbmtfbWFjX29wcztcbjQ3NTg6XHRcdGRzLVx1MDAzZW51bV9sYWdfaWRzID0gWVQ5MjFYX0xBR19OVU07XG40NzU5Olx0XHRkcy1cdTAwM2VudW1fcG9ydHMgPSBZVDkyMVhfUE9SVF9OVU07XG40NzYwOlx0XG40NzYxOlx0XHRtZGlvZGV2X3NldF9kcnZkYXRhKG1kaW9kZXYsIHByaXYpO1xuNDc2MjpcdFxuNDc2MzpcdFx0cmV0dXJuIGRzYV9yZWdpc3Rlcl9zd2l0Y2goZHMpO1xuNDc2NDpcdH1cbjQ3NjU6XHRcbjQ3NjY6XHRzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCB5dDkyMXhfb2ZfbWF0Y2hbXSA9IHtcbjQ3Njc6XHRcdHsgLmNvbXBhdGlibGUgPSBcJiMzNDttb3RvcmNvbW0seXQ5MjE1XCYjMzQ7IH0sXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTYgMjA6Mzk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjQ5NDQKCQkJCQkJCW91dHB1dDogMjQKCQkJCQkJCXRob3VnaHRzOiAxMjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBEU0EgU3dpdGNoIFByb2JlKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHByb2JlIGZ1bmN0aW9uIGFuZCBpdCYjMzk7cyB0cnlpbmcgdG8gcmVnaXN0ZXIgYSBEU0Egc3dpdGNoLiBUaGF0JiMzOTtzIHRoZSBzdGFydGluZyBwb2ludC4gQnV0LCB0aGUgY3J1Y2lhbCBwaWVjZSBpcyB0aGF0IHRoaXMgcHJvYmUgcmVxdWlyZXMgYW4gTURJTyBkZXZpY2UgdG8gYmUgcHJlc2VudCwgYW5kIHNwZWNpZmljYWxseSwgb25lIHRoYXQgaWRlbnRpZmllcyBpdHNlbGYgd2l0aCB0aGUgJiMzNDttb3RvcmNvbW0seXQ5MjE1JiMzNDsgY29tcGF0aWJsZSBzdHJpbmcuCgpUaGUgaW1tZWRpYXRlIHByb2JsZW0gaXMgdGhhdCBTeXprYWxsZXIsIGluIGl0cyBjdXJyZW50IHN0YXRlLCBpc24mIzM5O3QgY2FwYWJsZSBvZiBlbXVsYXRpbmcgZWl0aGVyIE1ESU8gZGV2aWNlcyBvciBEU0Egc3dpdGNoZXMuIEkgY2FuIHNlZSBhIHBvdGVudGlhbCB3b3JrYXJvdW5kIOKAkyBpbmplY3RpbmcgYSBkZXZpY2UgdHJlZSBub2RlLCB0aGVvcmV0aWNhbGx5LCBjb3VsZCB0cmlnZ2VyIHRoZSBwcm9iZSBmdW5jdGlvbi4gQnV0IGV2ZW4gaWYgSSBnb3QgdGhhdCBmYXIsIHRoZSBkcml2ZXIgaXMgaW1tZWRpYXRlbHkgZ29pbmcgdG8gdHJ5IGFuZCB0YWxrIHRvIHRoZSBoYXJkd2FyZSB1c2luZyBNRElPLiBJJiMzOTttIHRoaW5raW5nIHNwZWNpZmljYWxseSBhYm91dCB0aGF0IGB5dDkyMXhfZHNhX3NldHVwYCBmdW5jdGlvbjsgaXQmIzM5O3MgY2FsbGVkIGJ5IGBkc2FfcmVnaXN0ZXJfc3dpdGNoYCwgc28gaXQmIzM5O3MgYSBrZXkgcGFydCBvZiB0aGUgc2V0dXAuIEkgbmVlZCB0byB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgdGhhdCBmdW5jdGlvbiB0byByZWFsbHkgdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgcmVsaWFuY2Ugb24gTURJTy4gTGV0JiMzOTtzIGRpZyBpbnRvIGB5dDkyMXhfZHNhX3NldHVwYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNiAyMDozOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt5dDkyMXhfZHNhX3NldHVwJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jPTQ0OTU9c3RhdGljIGludCB5dDkyMXhfY2hpcF9zZXR1cChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYpXG4tLVxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNDUzNi1cbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjQ1Mzc6c3RhdGljIGludCB5dDkyMXhfZHNhX3NldHVwKHN0cnVjdCBkc2Ffc3dpdGNoICpkcylcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTQ1Mzgte1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jPTQ1OTg9c3RhdGljIGNvbnN0IHN0cnVjdCBkc2Ffc3dpdGNoX29wcyB5dDkyMXhfZHNhX3N3aXRjaF9vcHMgPSB7XG4tLVxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNDY2OC1cdC8qIGNoaXAgKi9cbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjQ2Njk6XHQuc2V0dXBcdFx0XHQ9IHl0OTIxeF9kc2Ffc2V0dXAsXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy00NjcwLX07XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTYgMjA6Mzk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjU1OTkKCQkJCQkJCW91dHB1dDogNDIKCQkJCQkJCXRob3VnaHRzOiAxNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0OgoKKipEaXZpbmcgaW50byB0aGUgU2V0dXAgU2NyaXB0KioKCkFscmlnaHQsIHRpbWUgdG8gY3JhY2sgb3BlbiBgeXQ5MjF4X2RzYV9zZXR1cGAuIExldCYjMzk7cyBzZWUgd2hhdCB3ZSYjMzk7dmUgZ290IGhlcmUuIEkmIzM5O20gZXhwZWN0aW5nIHRoaXMgc2NyaXB0IHRvIGhhbmRsZSBhbGwgdGhlIGluaXRpYWwgY29uZmlndXJhdGlvbnMgYW5kIGdyb3VuZHdvcmsgZm9yIHRoZSBEU0Egc3lzdGVtLiBJJiMzOTtsbCBiZSBsb29raW5nIGNsb3NlbHkgYXQgaG93IGl0IGhhbmRsZXMga2V5IGdlbmVyYXRpb24sIGNlcnRpZmljYXRlIG1hbmFnZW1lbnQgKGlmIGFwcGxpY2FibGUpLCBhbmQgYW55IG5ldHdvcmsgc2V0dGluZ3Mgb3IgZGVwZW5kZW5jaWVzIGl0IHNldHMgdXAuIE15IGltbWVkaWF0ZSBmb2N1cyB3aWxsIGJlIG9uIHVuZGVyc3RhbmRpbmcgdGhlIGF1dG9tYXRpb24gZmxvdywgbG9va2luZyBmb3IgcG90ZW50aWFsIGFyZWFzIG9mIG9wdGltaXphdGlvbiwgYW5kIGlkZW50aWZ5aW5nIGFueSBhc3N1bXB0aW9ucyBvciBleHRlcm5hbCBkZXBlbmRlbmNpZXMgdGhpcyBzY3JpcHQgcmVsaWVzIG9uLiBGcm9tIGEgcXVpY2sgZ2xhbmNlIGF0IHRoZSBmaWxlIG5hbWUsICYjMzQ7c2V0dXAsJiMzNDsgSSBhbSBleHBlY3RpbmcgdGhpcyBzY3JpcHQgdG8gY292ZXIgZXZlcnl0aGluZyBmcm9tIHRoZSBzdGFydC4gSSYjMzk7bGwgbmVlZCB0byBrbm93IHdoZXRoZXIgdG8gbWFrZSBjaGFuZ2VzIHRvIHRoaXMgZmlsZSBvciBpZiBJIG5lZWQgdG8gbG9vayBmb3Igc29tZXRoaW5nIGRpZmZlcmVudC4gSSYjMzk7bGwgYmUgbG9va2luZyB0byBxdWlja2x5IGRldGVybWluZSBpZiBpdCYjMzk7cyB3ZWxsLWRvY3VtZW50ZWQgYW5kIGZvbGxvd3MgYmVzdCBwcmFjdGljZXM7IHJlYWRhYmlsaXR5IGlzIGtleS4gSSYjMzk7bGwgYmUgY2hlY2tpbmcgZm9yIHNlY3VyaXR5IHZ1bG5lcmFiaWxpdGllcyBhcyB3ZWxsLiBTaG91bGQgYmUgYW4gaW50ZXJlc3RpbmcgcmVhZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTYgMjA6Mzk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDQ1MzcsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7NDUzNzpcdHN0YXRpYyBpbnQgeXQ5MjF4X2RzYV9zZXR1cChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpXG40NTM4Olx0e1xuNDUzOTpcdFx0c3RydWN0IHl0OTIxeF9wcml2ICpwcml2ID0gdG9feXQ5MjF4X3ByaXYoZHMpO1xuNDU0MDpcdFx0c3RydWN0IGRldmljZSAqZGV2ID0gdG9fZGV2aWNlKHByaXYpO1xuNDU0MTpcdFx0c3RydWN0IGRldmljZV9ub2RlICpucCA9IGRldi1cdTAwM2VvZl9ub2RlO1xuNDU0MjpcdFx0c3RydWN0IGRldmljZV9ub2RlICpjaGlsZDtcbjQ1NDM6XHRcdGludCByZXM7XG40NTQ0Olx0XG40NTQ1Olx0XHRtdXRleF9sb2NrKFx1MDAyNnByaXYtXHUwMDNlcmVnX2xvY2spO1xuNDU0NjpcdFx0cmVzID0geXQ5MjF4X2NoaXBfcmVzZXQocHJpdik7XG40NTQ3Olx0XHRtdXRleF91bmxvY2soXHUwMDI2cHJpdi1cdTAwM2VyZWdfbG9jayk7XG40NTQ4Olx0XG40NTQ5Olx0XHRpZiAocmVzKVxuNDU1MDpcdFx0XHRyZXR1cm4gcmVzO1xuNDU1MTpcdFxuNDU1MjpcdFx0LyogUmVnaXN0ZXIgdGhlIGludGVybmFsIG1kaW8gYnVzLiBOb2RlcyBmb3IgaW50ZXJuYWwgcG9ydHMgc2hvdWxkIGhhdmVcbjQ1NTM6XHRcdCAqIHByb3BlciBwaHktaGFuZGxlIHBvaW50aW5nIHRvIHRoZWlyIFBIWXMuIE5vdCBlbmFibGluZyB0aGUgaW50ZXJuYWxcbjQ1NTQ6XHRcdCAqIGJ1cyBpcyBwb3NzaWJsZSwgdGhvdWdoIHByZXR0eSB3aXJlZCwgaWYgaW50ZXJuYWwgcG9ydHMgYXJlIG5vdCB1c2VkLlxuNDU1NTpcdFx0ICovXG40NTU2Olx0XHRjaGlsZCA9IG9mX2dldF9jaGlsZF9ieV9uYW1lKG5wLCBcJiMzNDttZGlvXCYjMzQ7KTtcbjQ1NTc6XHRcdGlmIChjaGlsZCkge1xuNDU1ODpcdFx0XHRyZXMgPSB5dDkyMXhfbWJ1c19pbnRfaW5pdChwcml2LCBjaGlsZCk7XG40NTU5Olx0XHRcdG9mX25vZGVfcHV0KGNoaWxkKTtcbjQ1NjA6XHRcdFx0aWYgKHJlcylcbjQ1NjE6XHRcdFx0XHRyZXR1cm4gcmVzO1xuNDU2MjpcdFx0fVxuNDU2MzpcdFxuNDU2NDpcdFx0LyogRXh0ZXJuYWwgbWRpbyBidXMgaXMgb3B0aW9uYWwgKi9cbjQ1NjU6XHRcdGNoaWxkID0gb2ZfZ2V0X2NoaWxkX2J5X25hbWUobnAsIFwmIzM0O21kaW8tZXh0ZXJuYWxcJiMzNDspO1xuNDU2NjpcdFx0aWYgKGNoaWxkKSB7XG40NTY3Olx0XHRcdHJlcyA9IHl0OTIxeF9tYnVzX2V4dF9pbml0KHByaXYsIGNoaWxkKTtcbjQ1Njg6XHRcdFx0b2Zfbm9kZV9wdXQoY2hpbGQpO1xuNDU2OTpcdFx0XHRpZiAocmVzKVxuNDU3MDpcdFx0XHRcdHJldHVybiByZXM7XG40NTcxOlx0XG40NTcyOlx0XHRcdGRldl9lcnIoZGV2LCBcJiMzNDtVbnRlc3RlZCBleHRlcm5hbCBtZGlvIGJ1c1xcblwmIzM0Oyk7XG40NTczOlx0XHRcdHJldHVybiAtRU5PREVWO1xuNDU3NDpcdFx0fVxuNDU3NTpcdFxuNDU3NjpcdFx0bXV0ZXhfbG9jayhcdTAwMjZwcml2LVx1MDAzZXJlZ19sb2NrKTtcbjQ1Nzc6XHRcdHJlcyA9IHl0OTIxeF9jaGlwX3NldHVwKHByaXYpO1xuNDU3ODpcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNnByaXYtXHUwMDNlcmVnX2xvY2spO1xuNDU3OTpcdFxuNDU4MDpcdFx0aWYgKHJlcylcbjQ1ODE6XHRcdFx0cmV0dXJuIHJlcztcbjQ1ODI6XHRcbjQ1ODM6XHQjaWYgSVNfRU5BQkxFRChDT05GSUdfTkVUX0RTQV9ZVDkyMVhfTEVEUylcbjQ1ODQ6XHRcdHJlcyA9IHl0OTIxeF9sZWRzX3NldHVwKHByaXYpO1xuNDU4NTpcdFx0aWYgKHJlcylcbjQ1ODY6XHRcdFx0ZGV2X3dhcm4oZGV2LCBcJiMzNDtGYWlsZWQgdG8gc2V0dXAgTEVEczogJWRcXG5cJiMzNDssIHJlcyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE2IDIwOjM5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI2NjUwCgkJCQkJCQlvdXRwdXQ6IDIzCgkJCQkJCQl0aG91Z2h0czogNDgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGFzc3VtaW5nIEkmIzM5O20gYWxyZWFkeSBxdWl0ZSBmYW1pbGlhciB3aXRoIGVtYmVkZGVkIHN5c3RlbXMgYW5kIGhhcmR3YXJlIGludGVyYWN0aW9uOgoKKipJbnZlc3RpZ2F0aW5nIHRoZSBgeXQ5MjF4X2NoaXBfcmVzZXRgIEZ1bmN0aW9uKioKClJpZ2h0LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBgeXQ5MjF4X2NoaXBfcmVzZXRgIGZ1bmN0aW9uLiBJdCBzZWVtcyBwcmV0dHkgb2J2aW91cyB0aGF0IGl0cyBwcmltYXJ5IHB1cnBvc2UgaXMgdG8sIHdlbGwsIHJlc2V0IHRoZSBoYXJkd2FyZSByZWxhdGVkIHRvIHRoYXQgYHl0OTIxeGAgY2hpcC4gVGhhdCYjMzk7cyB0aGUgZXhwZWN0ZWQgYmVoYXZpb3IsIGFueXdheS4gTXkgbWFpbiBjb25jZXJuIGlzIGdvaW5nIHRvIGJlIGhvdyBpdCBoYW5kbGVzIHRoZSBmdW5kYW1lbnRhbCBjaGVjazogd2hldGhlciB0aGUgaGFyZHdhcmUgaXMgYWN0dWFsbHkgKnByZXNlbnQqIGluIHRoZSBmaXJzdCBwbGFjZS4gSWYgdGhlIHN5c3RlbSYjMzk7cyBjb25maWd1cmVkIHdpdGhvdXQgdGhhdCBzcGVjaWZpYyBjaGlwLCBJIGRvbiYjMzk7dCB3YW50IHRoZSBmdW5jdGlvbiB0byBjcmFzaCwgYW5kIEkgbmVlZCB0byBrbm93IGhvdyBncmFjZWZ1bCB0aGUgZXJyb3IgaGFuZGxpbmcgaXMuIFRpbWUgdG8gZGl2ZSBpbnRvIHRoZSBjb2RlIGFuZCBzZWUgd2hhdCBoYXBwZW5zIHdoZW4gdGhlcmUmIzM5O3Mgbm8gcGh5c2ljYWwgaGFyZHdhcmUgdG8gdGFsayB0bzsgSSBuZWVkIHRvIHNlZSB3aGF0IHRoZSBmdW5jdGlvbiBkb2VzIHdpdGggdGhhdCBjYXNlLiBMZXQmIzM5O3Mgc3RhcnQgYnkgY2hlY2tpbmcgaXRzIGltcGxlbWVudGF0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNiAyMDozOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt5dDkyMXhfY2hpcF9yZXNldCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYz00MjI3PXN0YXRpYyBpbnQgeXQ5MjF4X2NoaXBfZGV0ZWN0KHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdilcbi0tXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy00MjkzLVxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6NDI5NDpzdGF0aWMgaW50IHl0OTIxeF9jaGlwX3Jlc2V0KHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdilcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTQyOTUte1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jPTQ1Mzc9c3RhdGljIGludCB5dDkyMXhfZHNhX3NldHVwKHN0cnVjdCBkc2Ffc3dpdGNoICpkcylcbi0tXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy00NTQ1LVx0bXV0ZXhfbG9jayhcdTAwMjZwcml2LVx1MDAzZXJlZ19sb2NrKTtcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjQ1NDY6XHRyZXMgPSB5dDkyMXhfY2hpcF9yZXNldChwcml2KTtcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTQ1NDctXHRtdXRleF91bmxvY2soXHUwMDI2cHJpdi1cdTAwM2VyZWdfbG9jayk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE2IDIwOjM5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI3MjEwCgkJCQkJCQlvdXRwdXQ6IDQyCgkJCQkJCQl0aG91Z2h0czogMTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGFzc3VtaW5nIEkmIzM5O20gZGVlcCBpbiBteSB0ZWNobmljYWwgZmllbGQ6CgoqKkFuYWx5emluZyB0aGUgQ2FsbDogYHl0OTIxeF9jaGlwX3Jlc2V0YCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuICYjMzQ7eXQ5MjF4X2NoaXBfcmVzZXQmIzM0Oy4uLiBJbW1lZGlhdGVseSwgdGhlIG5hbWUgaXRzZWxmIGlzIGludHJpZ3VpbmcuIFRoZSAmIzM0O3l0OTIxeCYjMzQ7IHN0cm9uZ2x5IHN1Z2dlc3RzIGEgc3BlY2lmaWMgY2hpcCwgbGlrZWx5IGEgY3VzdG9tIG9yIHNlbWktY3VzdG9tIGRlc2lnbiwgcGVyaGFwcyBhIFlvdHRhVGVrIHByb2R1Y3QsIGdpdmVuIHRoZSBuYW1pbmcgY29udmVudGlvbi4gVGhlIHVuZGVyc2NvcmUgc2VwYXJhdGluZyAmIzM0O2NoaXAmIzM0OyBhbmQgJiMzNDtyZXNldCYjMzQ7IGlzIHN0YW5kYXJkIHByYWN0aWNlLCBpbmRpY2F0aW5nIHRoaXMgaXMgYSBkZWRpY2F0ZWQgZnVuY3Rpb24gb3Igcm91dGluZSBzcGVjaWZpY2FsbHkgZm9yIHJlc2V0dGluZyB0aGF0IHBhcnRpY3VsYXIgaGFyZHdhcmUgY29tcG9uZW50LgoKU28sIG15IG1pbmQgaXMgYWxyZWFkeSBmb3JtdWxhdGluZyBxdWVzdGlvbnMuIFdoYXQga2luZCBvZiByZXNldCBhcmUgd2UgdGFsa2luZyBhYm91dD8gSXMgaXQgYSBoYXJkIHJlc2V0LCBhIHNvZnQgcmVzZXQsIGEgcmVnaXN0ZXItbGV2ZWwgcmVzZXQsIG9yIHNvbWV0aGluZyBlbHNlIGVudGlyZWx5PyBUaGUgc3BlY2lmaWNpdHkgb2YgdGhlIG5hbWUgaW1wbGllcyBhIG1vcmUgdGFyZ2V0ZWQgYXBwcm9hY2ggdGhhbiBhIGdlbmVyYWwgc3lzdGVtIHJlc2V0LCB3aGljaCBwaXF1ZXMgbXkgaW50ZXJlc3QuCgpJJiMzOTtsbCBuZWVkIHRvIGtub3cgdGhlIGNvbnRleHQ6IHdoZXJlIGlzIHRoaXMgZnVuY3Rpb24gY2FsbGVkIGZyb20/IFdoYXQgYXJlIHRoZSBwb3RlbnRpYWwgdHJpZ2dlciBjb25kaXRpb25zPyBXaGF0JiMzOTtzIHRoZSBlcnJvciBoYW5kbGluZyBsaWtlPyBBcmUgdGhlcmUgYW55IHByZWNvbmRpdGlvbnMgdGhhdCBuZWVkIHRvIGJlIG1ldCBiZWZvcmUgY2FsbGluZyBpdD8gSG93IGlzIHRoZSBjaGlwJiMzOTtzIHN0YXRlIGludGVycm9nYXRlZCBhZnRlciB0aGUgcmVzZXQgdG8gZW5zdXJlIGEgY2xlYW4gc2xhdGU/IFRoaXMgaXMgaW1wb3J0YW50LiBJZiB0aGUgY2hpcCBoYXMgYSBzdGF0ZSBtYWNoaW5lLCB0aGUgcmVzZXQgbXVzdCByZXR1cm4gaXQgdG8gYSBrbm93biBzdGF0ZTsgb3RoZXJ3aXNlLCB0aGVyZSB3aWxsIGJlIGlzc3Vlcy4KCkkmIzM5O20gbWVudGFsbHkgcHJlcGFyaW5nIHRvIGxvb2sgZm9yIHRoZSBmdW5jdGlvbiYjMzk7cyBkZWZpbml0aW9uLCB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGl0IHVzZXMsIGFuZCBhbnkgcmVsYXRlZCBkb2N1bWVudGF0aW9uLiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBjbHVlcyBhYm91dCB0aGUgaGFyZHdhcmUgcmVnaXN0ZXIgbWFwcGluZ3MsIGludGVycnVwdCBoYW5kbGluZywgYW5kIGFueSBwb3RlbnRpYWwgc2lkZSBlZmZlY3RzIG9uIG90aGVyIHBhcnRzIG9mIHRoZSBzeXN0ZW0uIEkgaGF2ZSBhbiBpbnRlcm5hbCBsaXN0IG9mIHBvdGVudGlhbCBnb3RjaGFzIHRvIHdhdGNoIGZvciwgbGlrZSBwb3dlciBzZXF1ZW5jaW5nIG9yIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgZHVyaW5nIHRoZSByZXNldCBwcm9jZXNzLiBUaGlzIGlzIGdvaW5nIHRvIGJlIGdvb2QuIExldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyBpbiB0aGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTYgMjA6Mzk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDQyOTQsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7NDI5NDpcdHN0YXRpYyBpbnQgeXQ5MjF4X2NoaXBfcmVzZXQoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2KVxuNDI5NTpcdHtcbjQyOTY6XHRcdHN0cnVjdCBkZXZpY2UgKmRldiA9IHRvX2RldmljZShwcml2KTtcbjQyOTc6XHRcdHUxNiBldGhfcF90YWc7XG40Mjk4Olx0XHR1MzIgdmFsO1xuNDI5OTpcdFx0aW50IHJlcztcbjQzMDA6XHRcbjQzMDE6XHRcdHJlcyA9IHl0OTIxeF9jaGlwX2RldGVjdChwcml2KTtcbjQzMDI6XHRcdGlmIChyZXMpXG40MzAzOlx0XHRcdHJldHVybiByZXM7XG40MzA0Olx0XG40MzA1Olx0XHQvKiBSZXNldCAqL1xuNDMwNjpcdFx0cmVzID0geXQ5MjF4X3JlZ193cml0ZShwcml2LCBZVDkyMVhfUlNULCBZVDkyMVhfUlNUX0hXKTtcbjQzMDc6XHRcdGlmIChyZXMpXG40MzA4Olx0XHRcdHJldHVybiByZXM7XG40MzA5Olx0XG40MzEwOlx0XHQvKiBSU1RfSFcgaXMgYWxtb3N0IHNhbWUgYXMgR1BJTyBoYXJkIHJlc2V0LCBzbyB3ZSBuZWVkIHRoaXMgZGVsYXkuICovXG40MzExOlx0XHRmc2xlZXAoWVQ5MjFYX1JTVF9ERUxBWV9VUyk7XG40MzEyOlx0XG40MzEzOlx0XHR2YWwgPSAwO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNiAyMDozOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNzk2MQoJCQkJCQkJb3V0cHV0OiA0MgoJCQkJCQkJdGhvdWdodHM6IDIxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIHRoZSBDaGlwIElEIERldGVjdGlvbiBQcm9jZWR1cmUqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGB5dDkyMXhfY2hpcF9kZXRlY3RgLiBUaGUgZnVuY3Rpb24mIzM5O3Mgam9iIGlzIHN0cmFpZ2h0Zm9yd2FyZDogZGV0ZXJtaW5lIHRoZSBzcGVjaWZpYyBzaWxpY29uIHJldmlzaW9uIG9mIHRoZSBgeXQ5MjF4YCBjaGlwIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGguIFRoZSBwcmltYXJ5IG1lY2hhbmlzbSBpcyBhIHJlZ2lzdGVyIHJlYWQuIFRoYXQmIzM5O3MgYSBjbGFzc2ljIGFuZCBlZmZpY2llbnQgYXBwcm9hY2guIEkmIzM5O20gYXNzdW1pbmcgdGhpcyByZWdpc3RlciBob2xkcyBhIHVuaXF1ZSBpZGVudGlmaWVyIG9yIGEgbWFza2FibGUgdmFsdWUgdGhhdCBhbGxvd3MgZGlmZmVyZW50aWF0aW9uIGJldHdlZW4gdmFyaW91cyBoYXJkd2FyZSByZXZpc2lvbnMuIEkmIzM5O2xsIG5lZWQgdG8gZGlnIGludG8gdGhlIGRhdGFzaGVldCBmb3IgdGhhdCBjaGlwIHRvIGZpZ3VyZSBvdXQgdGhlIGV4YWN0IHJlZ2lzdGVyIGFkZHJlc3MgYW5kIHRoZSBiaXQgZmllbGQgbGF5b3V0LiBJJiMzOTtsbCBhbHNvIHdhbnQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoZSBwb3NzaWJsZSB2YWx1ZXMuIEFyZSB3ZSBqdXN0IGlkZW50aWZ5aW5nIGRpZmZlcmVudCByZXZpc2lvbnMsIG9yIGFyZSB0aGVyZSBmdW5jdGlvbmFsIGRpZmZlcmVuY2VzIHRpZWQgdG8gdGhlc2UgSURzPyBJZiBzbywgSSYjMzk7bGwgaGF2ZSB0byBtYWtlIHN1cmUgdGhlIGNvZGUgaGFuZGxlcyB0aGVzZSB2YXJpYXRpb25zIGNvcnJlY3RseS4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgYW55IGVycm9yIGhhbmRsaW5nIGFyb3VuZCB0aGUgcmVnaXN0ZXIgcmVhZCBpdHNlbGYuIFdoYXQgaGFwcGVucyBpZiB0aGUgcmVhZCBmYWlscz8gRG9lcyBpdCByZXRyeSwgb3IgZG9lcyBpdCBhc3N1bWUgYSBkZWZhdWx0IElEPyBSb2J1c3QgZXJyb3IgaGFuZGxpbmcgaXMgY3J1Y2lhbC4gRmluYWxseSwgSSYjMzk7bGwgc2VlIGhvdyB0aGlzIGRldGVjdGlvbiByZXN1bHQgZmVlZHMgaW50byB0aGUgcmVzdCBvZiB0aGUgZHJpdmVyIGluaXRpYWxpemF0aW9uLiBBcmUgd2UgYnJhbmNoaW5nIGJhc2VkIG9uIHRoZSBkZXRlY3RlZCBJRD8gSWYgc28sIEkgd2FudCB0byBjb25maXJtIHRoZSBicmFuY2hpbmcgbG9naWMgaXMgc29saWQgYW5kIHRoZSBjb2RlIHBhdGhzIGZvciBlYWNoIHJldmlzaW9uIGFyZSBjb21wbGV0ZSBhbmQgdGVzdGVkLiBJJiMzOTttIGhvcGluZyBpdCYjMzk7cyB3ZWxsLXN0cnVjdHVyZWQgYW5kIGVhc3kgdG8gZm9sbG93LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNiAyMDozOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNDIyNywKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDs0MjI3Olx0c3RhdGljIGludCB5dDkyMXhfY2hpcF9kZXRlY3Qoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2KVxuNDIyODpcdHtcbjQyMjk6XHRcdHN0cnVjdCBkZXZpY2UgKmRldiA9IHRvX2RldmljZShwcml2KTtcbjQyMzA6XHRcdGNvbnN0IHN0cnVjdCB5dDkyMXhfaW5mbyAqaW5mbztcbjQyMzE6XHRcdHU4IGV4dG1vZGU7XG40MjMyOlx0XHR1MzIgY2hpcGlkO1xuNDIzMzpcdFx0dTMyIG1ham9yO1xuNDIzNDpcdFx0dTMyIG1vZGU7XG40MjM1Olx0XHR1MzIgdmFsO1xuNDIzNjpcdFx0aW50IHJlcztcbjQyMzc6XHRcbjQyMzg6XHRcdHJlcyA9IHl0OTIxeF9yZWdfcmVhZChwcml2LCBZVDkyMVhfQ0hJUF9JRCwgXHUwMDI2Y2hpcGlkKTtcbjQyMzk6XHRcdGlmIChyZXMpXG40MjQwOlx0XHRcdHJldHVybiByZXM7XG40MjQxOlx0XG40MjQyOlx0XHRtYWpvciA9IEZJRUxEX0dFVChZVDkyMVhfQ0hJUF9JRF9NQUpPUiwgY2hpcGlkKTtcbjQyNDM6XHRcbjQyNDQ6XHRcdGZvciAoaW5mbyA9IHl0OTIxeF9pbmZvczsgaW5mby1cdTAwM2VuYW1lOyBpbmZvJiM0MzsmIzQzOylcbjQyNDU6XHRcdFx0aWYgKGluZm8tXHUwMDNlbWFqb3IgPT0gbWFqb3IpXG40MjQ2Olx0XHRcdFx0YnJlYWs7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE2IDIwOjM5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI4NjM1CgkJCQkJCQlvdXRwdXQ6IDExOAoJCQkJCQkJdGhvdWdodHM6IDE5OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBQYXRjaCYjMzk7cyBGdXp6aW5nIFBvdGVudGlhbCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBGcm9tIHdoYXQgSSB1bmRlcnN0YW5kLCB0aGlzIHBhdGNoIGlzIGludHJvZHVjaW5nIExFRCBzdXBwb3J0IHNwZWNpZmljYWxseSBmb3IgYSBgeXQ5MjF4YCBoYXJkd2FyZSBzd2l0Y2ggY2hpcC4gU2luY2UgdGhlIGNvcmUgZnVuY3Rpb25hbGl0eSByZWxpZXMgb24gdGhpcyBzcGVjaWZpYyBoYXJkd2FyZSwgdGhlIGB5dDkyMXhfY2hpcF9kZXRlY3RgIGZ1bmN0aW9uIGlzIGdvaW5nIHRvIGZhaWwgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCBsaWtlIFFFTVUgb3IgR0NFIGJlY2F1c2UgdGhlIHVuZGVybHlpbmcgaGFyZHdhcmUgc2ltcGx5IHdvbiYjMzk7dCBiZSBwcmVzZW50LCBvciBhdCBsZWFzdCB3b24mIzM5O3QgcHJlc2VudCB3aXRoIGFuIGFwcHJvcHJpYXRlIElELiBDb25zZXF1ZW50bHksIHRoZSBkcml2ZXIgd2lsbCBmYWlsIGR1cmluZyB0aGUgcHJvYmUsIGFuZCB0aGUgTEVEIHNldHVwIGNvZGUsIHNwZWNpZmljYWxseSBgeXQ5MjF4X2xlZHNfc2V0dXBgLCB3aWxsIG5ldmVyIGJlIGV4ZWN1dGVkLgoKR2l2ZW4gbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgcHJvbXB0IOKAkyAmIzM0O1JldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnMgY29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4uLiYjMzQ7IOKAkyB0aGlzIGlzIGEgY2xlYXIgbWF0Y2guIFRoZSBpbnRyb2R1Y2VkIExFRCBzdXBwb3J0IGlzIGVudGlyZWx5IGNvbnRpbmdlbnQgb24gdGhlIHByZXNlbmNlIG9mIHBoeXNpY2FsIGhhcmR3YXJlLCBhbmQgdGh1cywgdW5yZWFjaGFibGUgaW4gYSB2aXJ0dWFsaXplZCBzZXR0aW5nLiBUaGVyZSYjMzk7cyBubyB3YXkgdG8gZW11bGF0ZSBpdCByZWxpYWJseSwgYW5kIG5vIGFtb3VudCBvZiBzb2Z0d2FyZSB0cmlja2VyeSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pIHdpbGwgY2hhbmdlIHRoYXQuIFRoZXJlZm9yZSwgSSB3aWxsIGNvbmZpZGVudGx5IHNldCBgV29ydGhGdXp6aW5nPWZhbHNlYC4gVGhpcyBwYXRjaCBpcyBpcnJlbGV2YW50IGZvciBmdXp6aW5nIGluIHZpcnR1YWwgZW52aXJvbm1lbnRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNiAyMDozOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFtdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgTEVEIHN1cHBvcnQgZm9yIHRoZSBNb3RvcmNvbW0gWVQ5MjE1IGV0aGVybmV0IHN3aXRjaCBjaGlwIChhIERTQSBkcml2ZXIpLiBUaGlzIGlzIGEgaGFyZHdhcmUtc3BlY2lmaWMgZHJpdmVyIHRoYXQgY29tbXVuaWNhdGVzIHdpdGggYSBwaHlzaWNhbCBjaGlwIHZpYSBNRElPLiBTaW5jZSB0aGVyZSBpcyBubyBzb2Z0d2FyZSBlbXVsYXRpb24gZm9yIHRoaXMgc3BlY2lmaWMgc3dpdGNoIGNoaXAgaW4gc3RhbmRhcmQgUUVNVS92aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMsIHRoZSBkcml2ZXIgd2lsbCBmYWlsIHRvIHByb2JlIChlLmcuLCBkdXJpbmcgY2hpcCBJRCBkZXRlY3Rpb24pLCBhbmQgdGhlIG5ld2x5IGFkZGVkIExFRCBzZXR1cCBjb2RlIHdpbGwgYmUgdW5yZWFjaGFibGUuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIExFRCBzdXBwb3J0IGZvciB0aGUgTW90b3Jjb21tIFlUOTIxNSBldGhlcm5ldCBzd2l0Y2ggY2hpcCAoYSBEU0EgZHJpdmVyKS4gVGhpcyBpcyBhIGhhcmR3YXJlLXNwZWNpZmljIGRyaXZlciB0aGF0IGNvbW11bmljYXRlcyB3aXRoIGEgcGh5c2ljYWwgY2hpcCB2aWEgTURJTy4gU2luY2UgdGhlcmUgaXMgbm8gc29mdHdhcmUgZW11bGF0aW9uIGZvciB0aGlzIHNwZWNpZmljIHN3aXRjaCBjaGlwIGluIHN0YW5kYXJkIFFFTVUvdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLCB0aGUgZHJpdmVyIHdpbGwgZmFpbCB0byBwcm9iZSAoZS5nLiwgZHVyaW5nIGNoaXAgSUQgZGV0ZWN0aW9uKSwgYW5kIHRoZSBuZXdseSBhZGRlZCBMRUQgc2V0dXAgY29kZSB3aWxsIGJlIHVucmVhY2hhYmxlLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTYgMjA6Mzk8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE2VDIwOjM5OjAxLjI2OTY1Mzg4NloiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUxODI4MDQ5MDYyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBMRUQgc3VwcG9ydCBmb3IgdGhlIE1vdG9yY29tbSBZVDkyMTUgZXRoZXJuZXQgc3dpdGNoIGNoaXAgKGEgRFNBIGRyaXZlcikuIFRoaXMgaXMgYSBoYXJkd2FyZS1zcGVjaWZpYyBkcml2ZXIgdGhhdCBjb21tdW5pY2F0ZXMgd2l0aCBhIHBoeXNpY2FsIGNoaXAgdmlhIE1ESU8uIFNpbmNlIHRoZXJlIGlzIG5vIHNvZnR3YXJlIGVtdWxhdGlvbiBmb3IgdGhpcyBzcGVjaWZpYyBzd2l0Y2ggY2hpcCBpbiBzdGFuZGFyZCBRRU1VL3ZpcnR1YWxpemVkIGVudmlyb25tZW50cywgdGhlIGRyaXZlciB3aWxsIGZhaWwgdG8gcHJvYmUgKGUuZy4sIGR1cmluZyBjaGlwIElEIGRldGVjdGlvbiksIGFuZCB0aGUgbmV3bHkgYWRkZWQgTEVEIHNldHVwIGNvZGUgd2lsbCBiZSB1bnJlYWNoYWJsZS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE2VDIwOjM5OjAxLjI2OTY1OTk0NloiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQzNjIwOTExMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDI4NjA5ODNkM2Y0ZGUwMWY5ZmNlMzc2MGZmMzE5OTI5MTRhZDkxMDNcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFN1biBBdWcgMTYgMjA6Mzg6NTkgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9kc2EvbW90b3Jjb21tLHl0OTIxeC55YW1sIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9kc2EvbW90b3Jjb21tLHl0OTIxeC55YW1sXFxuaW5kZXggMzNhNjU1MmU0NmZjMC4uOTNiYTViMTgxMjA1YiAxMDA2NDRcXG4tLS0gYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L2RzYS9tb3RvcmNvbW0seXQ5MjF4LnlhbWxcXG4rKysgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L2RzYS9tb3RvcmNvbW0seXQ5MjF4LnlhbWxcXG5AQCAtMjEsNiArMjEsOSBAQCBkZXNjcmlwdGlvbjogfFxcbiBcXG4gICBBbnkgcG9ydCBjYW4gYmUgdXNlZCBhcyB0aGUgQ1BVIHBvcnQuXFxuIFxcbisgIEVhY2ggcG9ydCBoYXMgYXQgbW9zdCAzIExFRHMgY29ubmVjdGVkIGFuZCBjYW4gYmUgZGVjbGFyZWQgdXNpbmcgdGhlIHN0YW5kYXJkXFxuKyAgTEVEcyBzdHJ1Y3R1cmUuXFxuK1xcbiBwcm9wZXJ0aWVzOlxcbiAgIGNvbXBhdGlibGU6XFxuICAgICBjb25zdDogbW90b3Jjb21tLHl0OTIxNVxcbkBAIC01OSw2ICs2Miw3IEBAIHVuZXZhbHVhdGVkUHJvcGVydGllczogZmFsc2VcXG4gZXhhbXBsZXM6XFxuICAgLSB8XFxuICAgICAjaW5jbHVkZSBcXHUwMDNjZHQtYmluZGluZ3MvZ3Bpby9ncGlvLmhcXHUwMDNlXFxuKyAgICAjaW5jbHVkZSBcXHUwMDNjZHQtYmluZGluZ3MvbGVkcy9jb21tb24uaFxcdTAwM2VcXG4gXFxuICAgICBtZGlvIHtcXG4gICAgICAgICAjYWRkcmVzcy1jZWxscyA9IFxcdTAwM2MxXFx1MDAzZTtcXG5AQCAtMTEzLDYgKzExNywyNSBAQCBleGFtcGxlczpcXG4gICAgICAgICAgICAgICAgICAgICBsYWJlbCA9IFxcXCJsYW4xXFxcIjtcXG4gICAgICAgICAgICAgICAgICAgICBwaHktbW9kZSA9IFxcXCJpbnRlcm5hbFxcXCI7XFxuICAgICAgICAgICAgICAgICAgICAgcGh5LWhhbmRsZSA9IFxcdTAwM2NcXHUwMDI2c3dfcGh5MFxcdTAwM2U7XFxuK1xcbisgICAgICAgICAgICAgICAgICAgIGxlZHMge1xcbisgICAgICAgICAgICAgICAgICAgICAgICAjYWRkcmVzcy1jZWxscyA9IFxcdTAwM2MxXFx1MDAzZTtcXG4rICAgICAgICAgICAgICAgICAgICAgICAgI3NpemUtY2VsbHMgPSBcXHUwMDNjMFxcdTAwM2U7XFxuK1xcbisgICAgICAgICAgICAgICAgICAgICAgICBsZWRAMCB7XFxuKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWcgPSBcXHUwMDNjMFxcdTAwM2U7XFxuKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvciA9IFxcdTAwM2NMRURfQ09MT1JfSURfV0hJVEVcXHUwMDNlO1xcbisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gPSBMRURfRlVOQ1RJT05fTEFOO1xcbisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdC1zdGF0ZSA9IFxcXCJrZWVwXFxcIjtcXG4rICAgICAgICAgICAgICAgICAgICAgICAgfTtcXG4rXFxuKyAgICAgICAgICAgICAgICAgICAgICAgIGxlZEAxIHtcXG4rICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZyA9IFxcdTAwM2MxXFx1MDAzZTtcXG4rICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yID0gXFx1MDAzY0xFRF9DT0xPUl9JRF9BTUJFUlxcdTAwM2U7XFxuKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiA9IExFRF9GVU5DVElPTl9MQU47XFxuKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0LXN0YXRlID0gXFxcImtlZXBcXFwiO1xcbisgICAgICAgICAgICAgICAgICAgICAgICB9O1xcbisgICAgICAgICAgICAgICAgICAgIH07XFxuICAgICAgICAgICAgICAgICB9O1xcbiBcXG4gICAgICAgICAgICAgICAgIGV0aGVybmV0LXBvcnRAMSB7XFxuZGlmZiAtLWdpdCBhL01BSU5UQUlORVJTIGIvTUFJTlRBSU5FUlNcXG5pbmRleCA5OTE0NjAwNTBkYTc0Li41NWNjNWFjMGU4NmYwIDEwMDY0NFxcbi0tLSBhL01BSU5UQUlORVJTXFxuKysrIGIvTUFJTlRBSU5FUlNcXG5AQCAtMTgyNTYsNyArMTgyNTYsNyBAQCBNOlxcdERhdmlkIFlhbmcgXFx1MDAzY21teWFuZ2ZsQGdtYWlsLmNvbVxcdTAwM2VcXG4gTDpcXHRuZXRkZXZAdmdlci5rZXJuZWwub3JnXFxuIFM6XFx0TWFpbnRhaW5lZFxcbiBGOlxcdERvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvZHNhL21vdG9yY29tbSx5dDkyMXgueWFtbFxcbi1GOlxcdGRyaXZlcnMvbmV0L2RzYS95dDkyMXguKlxcbitGOlxcdGRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vXFxuIEY6XFx0bmV0L2RzYS90YWdfeXQ5MjF4LmNcXG4gXFxuIE1PWEEgU01BUlRJTy9JTkRVU1RJTy9JTlRFTExJTyBTRVJJQUwgQ0FSRFxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EvS2NvbmZpZyBiL2RyaXZlcnMvbmV0L2RzYS9LY29uZmlnXFxuaW5kZXggNGFiNTY3YzViYmFmYy4uOThlOWJiZTQ3ZGU3YiAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9kc2EvS2NvbmZpZ1xcbisrKyBiL2RyaXZlcnMvbmV0L2RzYS9LY29uZmlnXFxuQEAgLTcyLDYgKzcyLDggQEAgY29uZmlnIE5FVF9EU0FfTVY4OEU2MDYwXFxuIFxcbiBzb3VyY2UgXFxcImRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAvS2NvbmZpZ1xcXCJcXG4gXFxuK3NvdXJjZSBcXFwiZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9LY29uZmlnXFxcIlxcbitcXG4gc291cmNlIFxcXCJkcml2ZXJzL25ldC9kc2EvbXY4OGU2eHh4L0tjb25maWdcXFwiXFxuIFxcbiBzb3VyY2UgXFxcImRyaXZlcnMvbmV0L2RzYS9teGw4NjJ4eC9LY29uZmlnXFxcIlxcbkBAIC0xNTgsMTIgKzE2MCw0IEBAIGNvbmZpZyBORVRfRFNBX1ZJVEVTU0VfVlNDNzNYWF9QTEFURk9STVxcbiBcXHQgIFRoaXMgZW5hYmxlcyBzdXBwb3J0IGZvciB0aGUgVml0ZXNzZSBWU0M3Mzg1LCBWU0M3Mzg4LCBWU0M3Mzk1XFxuIFxcdCAgYW5kIFZTQzczOTggU3BhclggaW50ZWdyYXRlZCBldGhlcm5ldCBzd2l0Y2hlcywgY29ubmVjdGVkIG92ZXJcXG4gXFx0ICBhIENQVS1hdHRhY2hlZCBhZGRyZXNzIGJ1cyBhbmQgd29yayBpbiBtZW1vcnktbWFwcGVkIEkvTyBtb2RlLlxcbi1cXG4tY29uZmlnIE5FVF9EU0FfWVQ5MjFYXFxuLVxcdHRyaXN0YXRlIFxcXCJNb3RvcmNvbW0gWVQ5MjE1IGV0aGVybmV0IHN3aXRjaCBjaGlwIHN1cHBvcnRcXFwiXFxuLVxcdHNlbGVjdCBORVRfRFNBX1RBR19ZVDkyMVhcXG4tXFx0c2VsZWN0IE5FVF9JRUVFODAyMVFfSEVMUEVSUyBpZiBEQ0JcXG4tXFx0aGVscFxcbi1cXHQgIFRoaXMgZW5hYmxlcyBzdXBwb3J0IGZvciB0aGUgTW90b3Jjb21tIFlUOTIxNSBldGhlcm5ldCBzd2l0Y2hcXG4tXFx0ICBjaGlwLlxcbiBlbmRtZW51XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS9NYWtlZmlsZSBiL2RyaXZlcnMvbmV0L2RzYS9NYWtlZmlsZVxcbmluZGV4IGQyOTc1YmFkZmZjMDkuLjEzODIyNWJhYTRkNTYgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZHNhL01ha2VmaWxlXFxuKysrIGIvZHJpdmVycy9uZXQvZHNhL01ha2VmaWxlXFxuQEAgLTE0LDExICsxNCwxMSBAQCBvYmotJChDT05GSUdfTkVUX0RTQV9TTVNDX0xBTjkzMDNfTURJTykgKz0gbGFuOTMwM19tZGlvLm9cXG4gb2JqLSQoQ09ORklHX05FVF9EU0FfVklURVNTRV9WU0M3M1hYKSArPSB2aXRlc3NlLXZzYzczeHgtY29yZS5vXFxuIG9iai0kKENPTkZJR19ORVRfRFNBX1ZJVEVTU0VfVlNDNzNYWF9QTEFURk9STSkgKz0gdml0ZXNzZS12c2M3M3h4LXBsYXRmb3JtLm9cXG4gb2JqLSQoQ09ORklHX05FVF9EU0FfVklURVNTRV9WU0M3M1hYX1NQSSkgKz0gdml0ZXNzZS12c2M3M3h4LXNwaS5vXFxuLW9iai0kKENPTkZJR19ORVRfRFNBX1lUOTIxWCkgKz0geXQ5MjF4Lm9cXG4gb2JqLXlcXHRcXHRcXHRcXHQrPSBiNTMvXFxuIG9iai15XFx0XFx0XFx0XFx0Kz0gaGlyc2NobWFubi9cXG4gb2JqLXlcXHRcXHRcXHRcXHQrPSBsYW50aXEvXFxuIG9iai15XFx0XFx0XFx0XFx0Kz0gbWljcm9jaGlwL1xcbitvYmoteVxcdFxcdFxcdFxcdCs9IG1vdG9yY29tbS9cXG4gb2JqLXlcXHRcXHRcXHRcXHQrPSBtdjg4ZTZ4eHgvXFxuIG9iai15XFx0XFx0XFx0XFx0Kz0gbXhsODYyeHgvXFxuIG9iai15XFx0XFx0XFx0XFx0Kz0gbmV0Yy9cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9LY29uZmlnIGIvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9LY29uZmlnXFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcXG5pbmRleCAwMDAwMDAwMDAwMDAwLi4zNDM4ZTBiMTQzNjExXFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vS2NvbmZpZ1xcbkBAIC0wLDAgKzEsMTcgQEBcXG4rIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogSVNDXFxuK2NvbmZpZyBORVRfRFNBX1lUOTIxWFxcbitcXHR0cmlzdGF0ZSBcXFwiTW90b3Jjb21tIFlUOTIxNSBldGhlcm5ldCBzd2l0Y2ggY2hpcCBzdXBwb3J0XFxcIlxcbitcXHRzZWxlY3QgTkVUX0RTQV9UQUdfWVQ5MjFYXFxuK1xcdHNlbGVjdCBORVRfSUVFRTgwMjFRX0hFTFBFUlMgaWYgRENCXFxuK1xcdGhlbHBcXG4rXFx0ICBUaGlzIGVuYWJsZXMgc3VwcG9ydCBmb3IgdGhlIE1vdG9yY29tbSBZVDkyMTUgZXRoZXJuZXQgc3dpdGNoXFxuK1xcdCAgY2hpcC5cXG4rXFxuK2NvbmZpZyBORVRfRFNBX1lUOTIxWF9MRURTXFxuK1xcdGJvb2wgXFxcIkxFRCBzdXBwb3J0IGZvciBNb3RvcmNvbW0gWVQ5MjE1XFxcIlxcbitcXHRkZWZhdWx0IHlcXG4rXFx0ZGVwZW5kcyBvbiBORVRfRFNBX1lUOTIxWFxcbitcXHRkZXBlbmRzIG9uIExFRFNfQ0xBU1M9eSB8fCBMRURTX0NMQVNTPU5FVF9EU0FfWVQ5MjFYXFxuK1xcdGhlbHBcXG4rXFx0ICBUaGlzIGVuYWJsZXMgc3VwcG9ydCBmb3IgY29udHJvbGxpbmcgdGhlIExFRHMgYXR0YWNoZWQgdG8gdGhlXFxuK1xcdCAgTW90b3Jjb21tIFlUOTIxNSBzd2l0Y2ggY2hpcHMuXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vTWFrZWZpbGUgYi9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL01ha2VmaWxlXFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcXG5pbmRleCAwMDAwMDAwMDAwMDAwLi41YTYzZGIwMDI5ZmZlXFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vTWFrZWZpbGVcXG5AQCAtMCwwICsxLDUgQEBcXG4rIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogSVNDXFxuK29iai0kKENPTkZJR19ORVRfRFNBX1lUOTIxWCkgKz0geXQ5MjF4Lm9cXG4reXQ5MjF4LW9ianMgOj0gY2hpcC5vXFxuK3l0OTIxeC0kKENPTkZJR19ORVRfRFNBX1lUOTIxWF9MRURTKSArPSBsZWRzLm9cXG4reXQ5MjF4LW9ianMgKz0gc21pLm9cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZHNhL3l0OTIxeC5jIGIvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmNcXG5zaW1pbGFyaXR5IGluZGV4IDk2JVxcbnJlbmFtZSBmcm9tIGRyaXZlcnMvbmV0L2RzYS95dDkyMXguY1xcbnJlbmFtZSB0byBkcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuY1xcbmluZGV4IDE1OWIxNjYwNmY2Y2EuLjU1M2VmYWNkNGY1ZWUgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZHNhL3l0OTIxeC5jXFxuKysrIGIvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmNcXG5AQCAtMTMsNyArMTMsNiBAQFxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvaWZfYnJpZGdlLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9pZl9oc3IuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2lmX3ZsYW4uaFxcdTAwM2VcXG4tI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2lvcG9sbC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvbWRpby5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvbW9kdWxlLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9vZi5oXFx1MDAzZVxcbkBAIC0yNiw3ICsyNSw5IEBAXFxuICNpbmNsdWRlIFxcdTAwM2NuZXQvaWVlZTgwMjFxLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NuZXQvcGt0X2Nscy5oXFx1MDAzZVxcbiBcXG4tI2luY2x1ZGUgXFxcInl0OTIxeC5oXFxcIlxcbisjaW5jbHVkZSBcXFwiY2hpcC5oXFxcIlxcbisjaW5jbHVkZSBcXFwibGVkcy5oXFxcIlxcbisjaW5jbHVkZSBcXFwic21pLmhcXFwiXFxuIFxcbiBzdHJ1Y3QgeXQ5MjF4X21pYl9kZXNjIHtcXG4gXFx0dW5zaWduZWQgaW50IHNpemU7XFxuQEAgLTE1MSwxMyArMTUyLDggQEAgc3RhdGljIGNvbnN0IHN0cnVjdCB5dDkyMXhfaW5mbyB5dDkyMXhfaW5mb3NbXSA9IHtcXG4gXFx0e31cXG4gfTtcXG4gXFxuLSNkZWZpbmUgWVQ5MjFYX05BTUVcXHRcXFwieXQ5MjF4XFxcIlxcbi1cXG4gI2RlZmluZSBZVDkyMVhfVklEX1VOV0FSRVxcdDQwOTVcXG4gXFxuLSNkZWZpbmUgWVQ5MjFYX1BPTExfU0xFRVBfVVNcXHQxMDAwMFxcbi0jZGVmaW5lIFlUOTIxWF9QT0xMX1RJTUVPVVRfVVNcXHQxMDAwMDBcXG4tXFxuIC8qIFRoZSBpbnRlcnZhbCBzaG91bGQgYmUgc21hbGwgZW5vdWdoIHRvIGF2b2lkIG92ZXJmbG93IG9mIDMyYml0IE1JQnMuXFxuICAqXFxuICAqIFVudGlsIHdlIGNhbiByZWFkIE1JQnMgZnJvbSBzdGF0czY0IGNhbGwgZGlyZWN0bHkgKGkuZS4gc2xlZXBcXG5AQCAtMTk2LDIwOCArMTkyLDYgQEAgc3RhdGljIHUzMiBldGhhZGRyX2xvMl90b191MzIoY29uc3QgdW5zaWduZWQgY2hhciAqYWRkcilcXG4gXFx0cmV0dXJuIChhZGRyWzRdIFxcdTAwM2NcXHUwMDNjIDgpIHwgYWRkcls1XTtcXG4gfVxcbiBcXG4tc3RhdGljIGludCB5dDkyMXhfcmVnX3JlYWQoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgKnZhbHApXFxuLXtcXG4tXFx0V0FSTl9PTighbXV0ZXhfaXNfbG9ja2VkKFxcdTAwMjZwcml2LVxcdTAwM2VyZWdfbG9jaykpO1xcbi1cXG4tXFx0cmV0dXJuIHByaXYtXFx1MDAzZXJlZ19vcHMtXFx1MDAzZXJlYWQocHJpdi1cXHUwMDNlcmVnX2N0eCwgcmVnLCB2YWxwKTtcXG4tfVxcbi1cXG4tc3RhdGljIGludCB5dDkyMXhfcmVnX3dyaXRlKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyIHZhbClcXG4te1xcbi1cXHRXQVJOX09OKCFtdXRleF9pc19sb2NrZWQoXFx1MDAyNnByaXYtXFx1MDAzZXJlZ19sb2NrKSk7XFxuLVxcbi1cXHRyZXR1cm4gcHJpdi1cXHUwMDNlcmVnX29wcy1cXHUwMDNld3JpdGUocHJpdi1cXHUwMDNlcmVnX2N0eCwgcmVnLCB2YWwpO1xcbi19XFxuLVxcbi1zdGF0aWMgaW50XFxuLXl0OTIxeF9yZWdfd2FpdChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiBtYXNrLCB1MzIgKnZhbHApXFxuLXtcXG4tXFx0dTMyIHZhbDtcXG4tXFx0aW50IHJlcztcXG4tXFx0aW50IHJldDtcXG4tXFxuLVxcdHJldCA9IHJlYWRfcG9sbF90aW1lb3V0KHl0OTIxeF9yZWdfcmVhZCwgcmVzLFxcbi1cXHRcXHRcXHRcXHRyZXMgfHwgKHZhbCBcXHUwMDI2IG1hc2spID09ICp2YWxwLFxcbi1cXHRcXHRcXHRcXHRZVDkyMVhfUE9MTF9TTEVFUF9VUywgWVQ5MjFYX1BPTExfVElNRU9VVF9VUyxcXG4tXFx0XFx0XFx0XFx0ZmFsc2UsIHByaXYsIHJlZywgXFx1MDAyNnZhbCk7XFxuLVxcdGlmIChyZXQpXFxuLVxcdFxcdHJldHVybiByZXQ7XFxuLVxcdGlmIChyZXMpXFxuLVxcdFxcdHJldHVybiByZXM7XFxuLVxcbi1cXHQqdmFscCA9IHZhbDtcXG4tXFx0cmV0dXJuIDA7XFxuLX1cXG4tXFxuLXN0YXRpYyBpbnRcXG4teXQ5MjF4X3JlZ191cGRhdGVfYml0cyhzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiBtYXNrLCB1MzIgdmFsKVxcbi17XFxuLVxcdGludCByZXM7XFxuLVxcdHUzMiB2O1xcbi1cXHR1MzIgdTtcXG4tXFxuLVxcdHJlcyA9IHl0OTIxeF9yZWdfcmVhZChwcml2LCByZWcsIFxcdTAwMjZ2KTtcXG4tXFx0aWYgKHJlcylcXG4tXFx0XFx0cmV0dXJuIHJlcztcXG4tXFxuLVxcdHUgPSB2O1xcbi1cXHR1IFxcdTAwMjY9IH5tYXNrO1xcbi1cXHR1IHw9IHZhbDtcXG4tXFx0aWYgKHUgPT0gdilcXG4tXFx0XFx0cmV0dXJuIDA7XFxuLVxcbi1cXHRyZXR1cm4geXQ5MjF4X3JlZ193cml0ZShwcml2LCByZWcsIHUpO1xcbi19XFxuLVxcbi1zdGF0aWMgaW50IHl0OTIxeF9yZWdfc2V0X2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgbWFzaylcXG4te1xcbi1cXHRyZXR1cm4geXQ5MjF4X3JlZ191cGRhdGVfYml0cyhwcml2LCByZWcsIDAsIG1hc2spO1xcbi19XFxuLVxcbi1zdGF0aWMgaW50IHl0OTIxeF9yZWdfY2xlYXJfYml0cyhzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiBtYXNrKVxcbi17XFxuLVxcdHJldHVybiB5dDkyMXhfcmVnX3VwZGF0ZV9iaXRzKHByaXYsIHJlZywgbWFzaywgMCk7XFxuLX1cXG4tXFxuLXN0YXRpYyBpbnRcXG4teXQ5MjF4X3JlZ190b2dnbGVfYml0cyhzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiBtYXNrLCBib29sIHNldClcXG4te1xcbi1cXHRyZXR1cm4geXQ5MjF4X3JlZ191cGRhdGVfYml0cyhwcml2LCByZWcsIG1hc2ssICFzZXQgPyAwIDogbWFzayk7XFxuLX1cXG4tXFxuLS8qIFNvbWUgbXVsdGktd29yZCByZWdpc3RlcnMsIGxpa2UgVkxBTm5fQ1RSTCwgc2hvdWxkIGJlIHRyZWF0ZWQgYXMgYSBzaW5nbGVcXG4tICogbG9uZyByZWdpc3Rlci4gTW9yZSBzcGVjaWZpY2FsbHksIHdyaXRlcyB0byBwYXJ0cyBvZiBpdHMgd29yZHMgd29uJ3QgYmVjb21lXFxuLSAqIHZpc2libGUsIHVudGlsIHRoZSBsYXN0IHdvcmQgaXMgd3JpdHRlbi5cXG4tICpcXG4tICogSGVyZSB3ZSByZXF1aXJlIGZ1bGwgcmVhZCBhbmQgd3JpdGUgb3BlcmF0aW9ucyBvdmVyIHRoZXNlIHJlZ2lzdGVycyB0b1xcbi0gKiBlbGltaW5hdGUgcG90ZW50aWFsIGlzc3VlcywgYWx0aG91Z2ggcGFydGlhbCByZWFkcy93cml0ZXMgYXJlIGFsc28gcG9zc2libGUuXFxuLSAqL1xcbi1cXG4tc3RhdGljIHZvaWQgdXBkYXRlX2N0cmxzX3VuYWxpZ25lZCh1MzIgKmxvLCB1MzIgKmhpLCB1NjQgbWFzaywgdTY0IHZhbClcXG4te1xcbi1cXHQqbG8gXFx1MDAyNj0gfmxvd2VyXzMyX2JpdHMobWFzayk7XFxuLVxcdCpoaSBcXHUwMDI2PSB+dXBwZXJfMzJfYml0cyhtYXNrKTtcXG4tXFx0KmxvIHw9IGxvd2VyXzMyX2JpdHModmFsKTtcXG4tXFx0KmhpIHw9IHVwcGVyXzMyX2JpdHModmFsKTtcXG4tfVxcbi1cXG4tc3RhdGljIGludFxcbi15dDkyMXhfcmVnc19yZWFkKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyICp2YWxzLFxcbi1cXHRcXHQgdW5zaWduZWQgaW50IG51bV9yZWdzKVxcbi17XFxuLVxcdGludCByZXM7XFxuLVxcbi1cXHRmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSBcXHUwMDNjIG51bV9yZWdzOyBpKyspIHtcXG4tXFx0XFx0cmVzID0geXQ5MjF4X3JlZ19yZWFkKHByaXYsIHJlZyArIDQgKiBpLCBcXHUwMDI2dmFsc1tpXSk7XFxuLVxcdFxcdGlmIChyZXMpXFxuLVxcdFxcdFxcdHJldHVybiByZXM7XFxuLVxcdH1cXG4tXFxuLVxcdHJldHVybiAwO1xcbi19XFxuLVxcbi1zdGF0aWMgaW50XFxuLXl0OTIxeF9yZWdzX3dyaXRlKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgY29uc3QgdTMyICp2YWxzLFxcbi1cXHRcXHQgIHVuc2lnbmVkIGludCBudW1fcmVncylcXG4te1xcbi1cXHRpbnQgcmVzO1xcbi1cXG4tXFx0Zm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgXFx1MDAzYyBudW1fcmVnczsgaSsrKSB7XFxuLVxcdFxcdHJlcyA9IHl0OTIxeF9yZWdfd3JpdGUocHJpdiwgcmVnICsgNCAqIGksIHZhbHNbaV0pO1xcbi1cXHRcXHRpZiAocmVzKVxcbi1cXHRcXHRcXHRyZXR1cm4gcmVzO1xcbi1cXHR9XFxuLVxcbi1cXHRyZXR1cm4gMDtcXG4tfVxcbi1cXG4tc3RhdGljIGludFxcbi15dDkyMXhfcmVnc191cGRhdGVfYml0cyhzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIGNvbnN0IHUzMiAqbWFza3MsXFxuLVxcdFxcdFxcdGNvbnN0IHUzMiAqdmFscywgdW5zaWduZWQgaW50IG51bV9yZWdzKVxcbi17XFxuLVxcdGJvb2wgY2hhbmdlZCA9IGZhbHNlO1xcbi1cXHR1MzIgdnNbNF07XFxuLVxcdGludCByZXM7XFxuLVxcbi1cXHRCVUlMRF9CVUdfT04obnVtX3JlZ3MgXFx1MDAzZSBBUlJBWV9TSVpFKHZzKSk7XFxuLVxcbi1cXHRyZXMgPSB5dDkyMXhfcmVnc19yZWFkKHByaXYsIHJlZywgdnMsIG51bV9yZWdzKTtcXG4tXFx0aWYgKHJlcylcXG4tXFx0XFx0cmV0dXJuIHJlcztcXG4tXFxuLVxcdGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIFxcdTAwM2MgbnVtX3JlZ3M7IGkrKykge1xcbi1cXHRcXHR1MzIgdSA9IHZzW2ldO1xcbi1cXG4tXFx0XFx0dSBcXHUwMDI2PSB+bWFza3NbaV07XFxuLVxcdFxcdHUgfD0gdmFsc1tpXTtcXG4tXFx0XFx0aWYgKHUgIT0gdnNbaV0pXFxuLVxcdFxcdFxcdGNoYW5nZWQgPSB0cnVlO1xcbi1cXG4tXFx0XFx0dnNbaV0gPSB1O1xcbi1cXHR9XFxuLVxcbi1cXHRpZiAoIWNoYW5nZWQpXFxuLVxcdFxcdHJldHVybiAwO1xcbi1cXG4tXFx0cmV0dXJuIHl0OTIxeF9yZWdzX3dyaXRlKHByaXYsIHJlZywgdnMsIG51bV9yZWdzKTtcXG4tfVxcbi1cXG4tc3RhdGljIGludFxcbi15dDkyMXhfcmVnc19jbGVhcl9iaXRzKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgY29uc3QgdTMyICptYXNrcyxcXG4tXFx0XFx0ICAgICAgIHVuc2lnbmVkIGludCBudW1fcmVncylcXG4te1xcbi1cXHRib29sIGNoYW5nZWQgPSBmYWxzZTtcXG4tXFx0dTMyIHZzWzRdO1xcbi1cXHRpbnQgcmVzO1xcbi1cXG4tXFx0QlVJTERfQlVHX09OKG51bV9yZWdzIFxcdTAwM2UgQVJSQVlfU0laRSh2cykpO1xcbi1cXG4tXFx0cmVzID0geXQ5MjF4X3JlZ3NfcmVhZChwcml2LCByZWcsIHZzLCBudW1fcmVncyk7XFxuLVxcdGlmIChyZXMpXFxuLVxcdFxcdHJldHVybiByZXM7XFxuLVxcbi1cXHRmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSBcXHUwMDNjIG51bV9yZWdzOyBpKyspIHtcXG4tXFx0XFx0dTMyIHUgPSB2c1tpXTtcXG4tXFxuLVxcdFxcdHUgXFx1MDAyNj0gfm1hc2tzW2ldO1xcbi1cXHRcXHRpZiAodSAhPSB2c1tpXSlcXG4tXFx0XFx0XFx0Y2hhbmdlZCA9IHRydWU7XFxuLVxcbi1cXHRcXHR2c1tpXSA9IHU7XFxuLVxcdH1cXG4tXFxuLVxcdGlmICghY2hhbmdlZClcXG4tXFx0XFx0cmV0dXJuIDA7XFxuLVxcbi1cXHRyZXR1cm4geXQ5MjF4X3JlZ3Nfd3JpdGUocHJpdiwgcmVnLCB2cywgbnVtX3JlZ3MpO1xcbi19XFxuLVxcbi1zdGF0aWMgaW50XFxuLXl0OTIxeF9yZWc2NF93cml0ZShzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIGNvbnN0IHUzMiAqdmFscylcXG4te1xcbi1cXHRyZXR1cm4geXQ5MjF4X3JlZ3Nfd3JpdGUocHJpdiwgcmVnLCB2YWxzLCAyKTtcXG4tfVxcbi1cXG4tc3RhdGljIGludFxcbi15dDkyMXhfcmVnNjRfdXBkYXRlX2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCBjb25zdCB1MzIgKm1hc2tzLFxcbi1cXHRcXHRcXHQgY29uc3QgdTMyICp2YWxzKVxcbi17XFxuLVxcdHJldHVybiB5dDkyMXhfcmVnc191cGRhdGVfYml0cyhwcml2LCByZWcsIG1hc2tzLCB2YWxzLCAyKTtcXG4tfVxcbi1cXG4tc3RhdGljIGludFxcbi15dDkyMXhfcmVnNjRfY2xlYXJfYml0cyhzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIGNvbnN0IHUzMiAqbWFza3MpXFxuLXtcXG4tXFx0cmV0dXJuIHl0OTIxeF9yZWdzX2NsZWFyX2JpdHMocHJpdiwgcmVnLCBtYXNrcywgMik7XFxuLX1cXG4tXFxuLXN0YXRpYyBpbnRcXG4teXQ5MjF4X3JlZzk2X3dyaXRlKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgY29uc3QgdTMyICp2YWxzKVxcbi17XFxuLVxcdHJldHVybiB5dDkyMXhfcmVnc193cml0ZShwcml2LCByZWcsIHZhbHMsIDMpO1xcbi19XFxuLVxcbiBzdGF0aWMgaW50IHl0OTIxeF9yZWdfbWRpb19yZWFkKHZvaWQgKmNvbnRleHQsIHUzMiByZWcsIHUzMiAqdmFscClcXG4ge1xcbiBcXHRzdHJ1Y3QgeXQ5MjF4X3JlZ19tZGlvICptZGlvID0gY29udGV4dDtcXG5AQCAtNDc4Niw2ICs0NTgwLDEyIEBAIHN0YXRpYyBpbnQgeXQ5MjF4X2RzYV9zZXR1cChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpXFxuIFxcdGlmIChyZXMpXFxuIFxcdFxcdHJldHVybiByZXM7XFxuIFxcbisjaWYgSVNfRU5BQkxFRChDT05GSUdfTkVUX0RTQV9ZVDkyMVhfTEVEUylcXG4rXFx0cmVzID0geXQ5MjF4X2xlZHNfc2V0dXAocHJpdik7XFxuK1xcdGlmIChyZXMpXFxuK1xcdFxcdGRldl93YXJuKGRldiwgXFxcIkZhaWxlZCB0byBzZXR1cCBMRURzOiAlZFxcXFxuXFxcIiwgcmVzKTtcXG4rI2VuZGlmXFxuK1xcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG5AQCAtNDg4Niw2ICs0Njg2LDEwIEBAIHN0YXRpYyB2b2lkIHl0OTIxeF9tZGlvX3JlbW92ZShzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYpXFxuIFxcdGlmICghcHJpdilcXG4gXFx0XFx0cmV0dXJuO1xcbiBcXG4rI2lmIElTX0VOQUJMRUQoQ09ORklHX05FVF9EU0FfWVQ5MjFYX0xFRFMpXFxuK1xcdHl0OTIxeF9sZWRzX3JlbW92ZShwcml2KTtcXG4rI2VuZGlmXFxuK1xcbiBcXHRmb3IgKHNpemVfdCBpID0gQVJSQVlfU0laRShwcml2LVxcdTAwM2Vwb3J0cyk7IGktLSBcXHUwMDNlIDA7ICkge1xcbiBcXHRcXHRzdHJ1Y3QgeXQ5MjF4X3BvcnQgKnBwID0gXFx1MDAyNnByaXYtXFx1MDAzZXBvcnRzW2ldO1xcbiBcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZHNhL3l0OTIxeC5oIGIvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmhcXG5zaW1pbGFyaXR5IGluZGV4IDk5JVxcbnJlbmFtZSBmcm9tIGRyaXZlcnMvbmV0L2RzYS95dDkyMXguaFxcbnJlbmFtZSB0byBkcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuaFxcbmluZGV4IDVmM2I5OWUxODljNDEuLmU2ODE1Y2Y5Y2IzY2QgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZHNhL3l0OTIxeC5oXFxuKysrIGIvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmhcXG5AQCAtODUwLDkgKzg1MCwxNCBAQCBlbnVtIHl0OTIxeF9mZGJfZW50cnlfc3RhdHVzIHtcXG4gI2RlZmluZSBZVDkyMVhfQUNMX05VTVxcdFxcdChZVDkyMVhfQUNMX0JMS19OVU0gKiBZVDkyMVhfQUNMX0VOVF9QRVJfQkxLKVxcbiAjZGVmaW5lIFlUOTIxWF9VREZfTlVNXFx0XFx0OFxcbiBcXG4rI2RlZmluZSBZVDkyMVhfTEVEX0dST1VQX05VTVxcdDNcXG4rI2RlZmluZSBZVDkyMVhfTEVEX1BPUlRfTlVNXFx0MTBcXG4rXFxuIC8qIDggaW50ZXJuYWwgKyAyIGV4dGVybmFsICsgMSBtY3UgKi9cXG4gI2RlZmluZSBZVDkyMVhfUE9SVF9OVU1cXHRcXHRcXHQxMVxcbiBcXG4rI2RlZmluZSBZVDkyMVhfTkFNRVxcdFxcXCJ5dDkyMXhcXFwiXFxuK1xcbiAjZGVmaW5lIHl0OTIxeF9wb3J0X2lzX2ludGVybmFsKHBvcnQpICgocG9ydCkgXFx1MDAzYyA4KVxcbiAjZGVmaW5lIHl0OTIxeF9wb3J0X2lzX2V4dGVybmFsKHBvcnQpICgocG9ydCkgPT0gOCB8fCAocG9ydCkgPT0gOSlcXG4gXFxuQEAgLTkzOCw2ICs5NDMsMTMgQEAgc3RydWN0IHl0OTIxeF9wb3J0IHtcXG4gXFx0c3RydWN0IHl0OTIxeF9taWIgbWliO1xcbiBcXHR1NjQgcnhfZnJhbWVzO1xcbiBcXHR1NjQgdHhfZnJhbWVzO1xcbitcXG4rI2lmIElTX0VOQUJMRUQoQ09ORklHX05FVF9EU0FfWVQ5MjFYX0xFRFMpXFxuK1xcdHVuc2lnbmVkIGNoYXIgbGVkX2R1dHk7XFxuK1xcdHVuc2lnbmVkIHNob3J0IGxlZF9jeWNsZTtcXG4rXFxuK1xcdHN0cnVjdCB5dDkyMXhfbGVkICpsZWRzW1lUOTIxWF9MRURfR1JPVVBfTlVNXTtcXG4rI2VuZGlmXFxuIH07XFxuIFxcbiBzdHJ1Y3QgeXQ5MjF4X3JlZ19vcHMge1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2xlZHMuYyBiL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vbGVkcy5jXFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcXG5pbmRleCAwMDAwMDAwMDAwMDAwLi5lN2VmMGVmODBhMjY2XFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vbGVkcy5jXFxuQEAgLTAsMCArMSw2NTQgQEBcXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb3ItbGF0ZXJcXG4rLypcXG4rICogQ29weXJpZ2h0IChjKSAyMDI2IERhdmlkIFlhbmdcXG4rICovXFxuK1xcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvdWxlZHMuaFxcdTAwM2VcXG4rXFxuKyNpbmNsdWRlIFxcXCJjaGlwLmhcXFwiXFxuKyNpbmNsdWRlIFxcXCJsZWRzLmhcXFwiXFxuKyNpbmNsdWRlIFxcXCJzbWkuaFxcXCJcXG4rXFxuKyNkZWZpbmUgdG9feXQ5MjF4X2xlZChsZWRfY2RldikgXFxcXFxcbitcXHRjb250YWluZXJfb2ZfY29uc3QoKGxlZF9jZGV2KSwgc3RydWN0IHl0OTIxeF9sZWQsIGNkZXYpXFxuKyNkZWZpbmUgdG9feXQ5MjF4X3BvcnQobGVkKSAoKGxlZCktXFx1MDAzZXBvcnQpXFxuKyNkZWZpbmUgdG9feXQ5MjF4X3ByaXYocHApIFxcXFxcXG4rXFx0Y29udGFpbmVyX29mX2NvbnN0KChwcCksIHN0cnVjdCB5dDkyMXhfcHJpdiwgcG9ydHNbKHBwKS1cXHUwMDNlaW5kZXhdKVxcbisjZGVmaW5lIHRvX2RldmljZShwcml2KSAoKHByaXYpLVxcdTAwM2Vkcy5kZXYpXFxuK1xcbitzdGF0aWMgdTMyIHl0OTIxeF9sZWRfcmVnYWRkcihzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIGludCBwb3J0LCBpbnQgZ3JvdXApXFxuK3tcXG4rXFx0c3dpdGNoIChncm91cCkge1xcbitcXHRjYXNlIDA6XFxuK1xcdGRlZmF1bHQ6XFxuK1xcdFxcdHJldHVybiBZVDkyMVhfTEVEMF9QT1JUbihwb3J0KTtcXG4rXFx0Y2FzZSAxOlxcbitcXHRcXHRyZXR1cm4gWVQ5MjFYX0xFRDFfUE9SVG4ocG9ydCk7XFxuK1xcdGNhc2UgMjpcXG4rXFx0XFx0cmV0dXJuIFlUOTIxWF9MRUQyX1BPUlRuKHBvcnQpO1xcbitcXHR9XFxuK31cXG4rXFxuK3N0YXRpYyBpbnRcXG4reXQ5MjF4X2xlZF9mb3JjZV9nZXQoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCBpbnQgcG9ydCwgaW50IGdyb3VwLCBib29sICpvbnApXFxuK3tcXG4rXFx0dTMyIHZhbDtcXG4rXFx0aW50IHJlcztcXG4rXFxuK1xcdHJlcyA9IHl0OTIxeF9yZWdfcmVhZChwcml2LCBZVDkyMVhfTEVEMl9QT1JUbihwb3J0KSwgXFx1MDAyNnZhbCk7XFxuK1xcdGlmIChyZXMpXFxuK1xcdFxcdHJldHVybiByZXM7XFxuK1xcbitcXHQqb25wID0gKHZhbCBcXHUwMDI2IFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuX00oZ3JvdXApKSA9PVxcbitcXHQgICAgICAgWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW5fT04oZ3JvdXApO1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rc3RhdGljIGludFxcbit5dDkyMXhfbGVkX2ZvcmNlX3NldChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIGludCBwb3J0LCBpbnQgZ3JvdXAsIGJvb2wgb24pXFxuK3tcXG4rXFx0c3RydWN0IHl0OTIxeF9wb3J0ICpwcCA9IFxcdTAwMjZwcml2LVxcdTAwM2Vwb3J0c1twb3J0XTtcXG4rXFx0c3RydWN0IHl0OTIxeF9sZWQgKmxlZCA9IHBwLVxcdTAwM2VsZWRzW2dyb3VwXTtcXG4rXFx0dTMyIGN0cmw7XFxuK1xcdHUzMiBtYXNrO1xcbitcXG4rXFx0bGVkLVxcdTAwM2V1c2VfY3ljbGUgPSBmYWxzZTtcXG4rXFx0bGVkLVxcdTAwM2V1c2VfZHV0eSA9IGZhbHNlO1xcbitcXG4rXFx0bWFzayA9IFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuX00oZ3JvdXApO1xcbitcXHRjdHJsID0gb24gPyBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbl9PTihncm91cCkgOlxcbitcXHQgICAgICAgWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW5fT0ZGKGdyb3VwKTtcXG4rXFx0cmV0dXJuIHl0OTIxeF9yZWdfdXBkYXRlX2JpdHMocHJpdiwgWVQ5MjFYX0xFRDJfUE9SVG4ocG9ydCksIG1hc2ssXFxuK1xcdFxcdFxcdFxcdCAgICAgIGN0cmwpO1xcbit9XFxuK1xcbitzdGF0aWMgaW50XFxuK3l0OTIxeF9sZWRfYmxpbmtfc2VsZWN0KGNvbnN0IHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdW5zaWduZWQgbG9uZyBvbixcXG4rXFx0XFx0XFx0dW5zaWduZWQgbG9uZyBvZmYsIHVuc2lnbmVkIHNob3J0ICpjeWNsZXAsXFxuK1xcdFxcdFxcdHVuc2lnbmVkIGNoYXIgKmR1dHlwKVxcbit7XFxuK1xcdHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGR1dHlzW10gPSB7XFxuK1xcdFxcdFlUOTIxWF9MRURfRFVUWSgxLCA2KSxcXG4rXFx0XFx0WVQ5MjFYX0xFRF9EVVRZKDEsIDQpLFxcbitcXHRcXHRZVDkyMVhfTEVEX0RVVFkoMSwgMyksXFxuK1xcdFxcdFlUOTIxWF9MRURfRFVUWSgxLCAyKSxcXG4rXFx0fTtcXG4rXFx0dW5zaWduZWQgaW50IGN5Y2xlX3VwcGVyO1xcbitcXHR1bnNpZ25lZCBpbnQgY3ljbGVfcmVxO1xcbitcXHR1bnNpZ25lZCBpbnQgZHV0eV9yZXE7XFxuK1xcdHVuc2lnbmVkIGludCBjeWNsZTtcXG4rXFx0dW5zaWduZWQgaW50IGR1dHk7XFxuK1xcbitcXHRjeWNsZSA9IFlUOTIxWF9MRURfQkxJTktfTUFYO1xcbitcXHRjeWNsZV91cHBlciA9IGN5Y2xlICogMTE1ODUgLyA4MTkyICsgMTsgIC8qIE1fU1FSVDIgKiBjeWNsZSAqL1xcbitcXHRpZiAoY2hlY2tfYWRkX292ZXJmbG93KG9uLCBvZmYsIFxcdTAwMjZjeWNsZV9yZXEpIHx8IGN5Y2xlX3JlcSBcXHUwMDNlPSBjeWNsZV91cHBlcilcXG4rXFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbitcXG4rXFx0Zm9yICg7IGN5Y2xlIFxcdTAwM2UgWVQ5MjFYX0xFRF9CTElOS19NSU47IGN5Y2xlX3VwcGVyIFxcdTAwM2VcXHUwMDNlPSAxLCBjeWNsZSBcXHUwMDNlXFx1MDAzZT0gMSlcXG4rXFx0XFx0aWYgKGN5Y2xlX3JlcSBcXHUwMDNlPSBjeWNsZV91cHBlciBcXHUwMDNlXFx1MDAzZSAxKVxcbitcXHRcXHRcXHRicmVhaztcXG4rXFx0KmN5Y2xlcCA9IGN5Y2xlO1xcbitcXG4rXFx0ZHV0eV9yZXEgPSBESVZfUk9VTkRfQ0xPU0VTVChZVDkyMVhfTEVEX0RVVFlfREVOT00gKlxcbitcXHRcXHRcXHRcXHQgICAgIChvbiBcXHUwMDNlIG9mZiA/IG9mZiA6IG9uKSwgY3ljbGVfcmVxKTtcXG4rXFx0Zm9yICh1bnNpZ25lZCBpbnQgaSA9IEFSUkFZX1NJWkUoZHV0eXMpIC0gMTs7IGktLSlcXG4rXFx0XFx0aWYgKGkgPT0gMCB8fCBkdXR5X3JlcSBcXHUwMDNlPSAoZHV0eXNbaSAtIDFdICsgZHV0eXNbaV0pIC8gMikge1xcbitcXHRcXHRcXHRkdXR5ID0gZHV0eXNbaV07XFxuK1xcdFxcdFxcdGJyZWFrO1xcbitcXHRcXHR9XFxuK1xcdGlmIChvbiBcXHUwMDNlIG9mZilcXG4rXFx0XFx0ZHV0eSA9IFlUOTIxWF9MRURfRFVUWV9ERU5PTSAtIGR1dHk7XFxuK1xcdCpkdXR5cCA9IGR1dHk7XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rc3RhdGljIGludFxcbit5dDkyMXhfbGVkX2JsaW5rX3NldChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIGludCBwb3J0LCBpbnQgZ3JvdXAsXFxuK1xcdFxcdCAgICAgdW5zaWduZWQgbG9uZyAqb25wLCB1bnNpZ25lZCBsb25nICpvZmZwKVxcbit7XFxuK1xcdHN0cnVjdCB5dDkyMXhfcG9ydCAqcHAgPSBcXHUwMDI2cHJpdi1cXHUwMDNlcG9ydHNbcG9ydF07XFxuK1xcdHN0cnVjdCB5dDkyMXhfbGVkICpsZWQgPSBwcC1cXHUwMDNlbGVkc1tncm91cF07XFxuK1xcdHVuc2lnbmVkIHNob3J0IGN5Y2xlO1xcbitcXHR1bnNpZ25lZCBjaGFyIGR1dHk7XFxuK1xcdGJvb2wgdXNlX2N5Y2xlO1xcbitcXHR1MzIgY3RybDtcXG4rXFx0dTMyIG1hc2s7XFxuK1xcdHUzMiB2YWw7XFxuK1xcdGludCByZXM7XFxuK1xcbitcXHRpZiAoISpvbnAgXFx1MDAyNlxcdTAwMjYgISpvZmZwKSB7XFxuK1xcdFxcdGN5Y2xlID0gWVQ5MjFYX0xFRF9CTElOS19ERUY7XFxuK1xcdFxcdGR1dHkgPSBZVDkyMVhfTEVEX0RVVFkoMSwgMik7XFxuK1xcdFxcdGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIFxcdTAwM2MgWVQ5MjFYX0xFRF9HUk9VUF9OVU07IGkrKylcXG4rXFx0XFx0XFx0aWYgKGkgIT0gZ3JvdXAgXFx1MDAyNlxcdTAwMjYgcHAtXFx1MDAzZWxlZHNbaV0gXFx1MDAyNlxcdTAwMjZcXG4rXFx0XFx0XFx0ICAgIHBwLVxcdTAwM2VsZWRzW2ldLVxcdTAwM2V1c2VfZHV0eSkge1xcbitcXHRcXHRcXHRcXHRkdXR5ID0gcHAtXFx1MDAzZWxlZF9kdXR5O1xcbitcXHRcXHRcXHRcXHRicmVhaztcXG4rXFx0XFx0XFx0fVxcbitcXG4rXFx0XFx0dXNlX2N5Y2xlID0gZmFsc2U7XFxuK1xcdH0gZWxzZSB7XFxuK1xcdFxcdGJvb2wgY2hhbmdlX2N5Y2xlO1xcbitcXHRcXHRib29sIGNoYW5nZV9kdXR5O1xcbitcXG4rXFx0XFx0cmVzID0geXQ5MjF4X2xlZF9ibGlua19zZWxlY3QocHJpdiwgKm9ucCwgKm9mZnAsIFxcdTAwMjZjeWNsZSwgXFx1MDAyNmR1dHkpO1xcbitcXHRcXHRpZiAocmVzKVxcbitcXHRcXHRcXHRyZXR1cm4gcmVzO1xcbitcXG4rXFx0XFx0dXNlX2N5Y2xlID0gY3ljbGUgXFx1MDAzYyBZVDkyMVhfTEVEX0JMSU5LX0RFRjtcXG4rXFx0XFx0Y2hhbmdlX2N5Y2xlID0gdXNlX2N5Y2xlIFxcdTAwMjZcXHUwMDI2IGN5Y2xlICE9IHBwLVxcdTAwM2VsZWRfY3ljbGU7XFxuK1xcdFxcdGNoYW5nZV9kdXR5ID0gZHV0eSAhPSBwcC1cXHUwMDNlbGVkX2R1dHk7XFxuK1xcdFxcdGlmIChjaGFuZ2VfY3ljbGUgfHwgY2hhbmdlX2R1dHkpXFxuK1xcdFxcdFxcdGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIFxcdTAwM2MgWVQ5MjFYX0xFRF9HUk9VUF9OVU07XFxuK1xcdFxcdFxcdCAgICAgaSsrKSB7XFxuK1xcdFxcdFxcdFxcdGlmIChpID09IGdyb3VwIHx8ICFwcC1cXHUwMDNlbGVkc1tpXSlcXG4rXFx0XFx0XFx0XFx0XFx0Y29udGludWU7XFxuK1xcdFxcdFxcdFxcdGlmICgoY2hhbmdlX2N5Y2xlIFxcdTAwMjZcXHUwMDI2IHBwLVxcdTAwM2VsZWRzW2ldLVxcdTAwM2V1c2VfY3ljbGUpIHx8XFxuK1xcdFxcdFxcdFxcdCAgICAoY2hhbmdlX2R1dHkgXFx1MDAyNlxcdTAwMjYgcHAtXFx1MDAzZWxlZHNbaV0tXFx1MDAzZXVzZV9kdXR5KSlcXG4rXFx0XFx0XFx0XFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbitcXHRcXHRcXHR9XFxuK1xcdH1cXG4rXFxuK1xcdC8qIFRoZSBjaGlwIHNlZW1zIHRvIGphbSBhIHdoaWxlIGlmIGNoYW5naW5nIGR1dHkgZGlyZWN0bHkgKi9cXG4rXFx0cmVzID0geXQ5MjF4X3JlZ19yZWFkKHByaXYsIFlUOTIxWF9MRUQyX1BPUlRuKHBvcnQpLCBcXHUwMDI2dmFsKTtcXG4rXFx0aWYgKHJlcylcXG4rXFx0XFx0cmV0dXJuIHJlcztcXG4rXFxuK1xcdGN0cmwgPSB2YWwgXFx1MDAyNiB+WVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW5fTShncm91cCk7XFxuK1xcdGN0cmwgfD0gWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW5fRE9OVENBUkUoZ3JvdXApO1xcbitcXHRpZiAodmFsICE9IGN0cmwpIHtcXG4rXFx0XFx0cmVzID0geXQ5MjF4X3JlZ193cml0ZShwcml2LCBZVDkyMVhfTEVEMl9QT1JUbihwb3J0KSwgY3RybCk7XFxuK1xcdFxcdGlmIChyZXMpXFxuK1xcdFxcdFxcdHJldHVybiByZXM7XFxuK1xcdH1cXG4rXFxuK1xcdG1hc2sgPSBZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFlfTSB8IFlUOTIxWF9MRUQxX1BPUlRfQkxJTktfRFVUWV9DT01QO1xcbitcXHRzd2l0Y2ggKGR1dHkgXFx1MDAzZT0gWVQ5MjFYX0xFRF9EVVRZKDEsIDIpID8gZHV0eSA6XFxuK1xcdFxcdFlUOTIxWF9MRURfRFVUWV9ERU5PTSAtIGR1dHkpIHtcXG4rXFx0ZGVmYXVsdDpcXG4rXFx0XFx0ZHV0eSA9IFlUOTIxWF9MRURfRFVUWSgxLCAyKTtcXG4rXFx0XFx0ZmFsbHRocm91Z2g7XFxuK1xcdGNhc2UgWVQ5MjFYX0xFRF9EVVRZKDEsIDIpOlxcbitcXHRcXHRjdHJsID0gWVQ5MjFYX0xFRDFfUE9SVF9CTElOS19EVVRZXzFfMjtcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdGNhc2UgWVQ5MjFYX0xFRF9EVVRZKDIsIDMpOlxcbitcXHRcXHRjdHJsID0gWVQ5MjFYX0xFRDFfUE9SVF9CTElOS19EVVRZXzJfMztcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdGNhc2UgWVQ5MjFYX0xFRF9EVVRZKDMsIDQpOlxcbitcXHRcXHRjdHJsID0gWVQ5MjFYX0xFRDFfUE9SVF9CTElOS19EVVRZXzNfNDtcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdGNhc2UgWVQ5MjFYX0xFRF9EVVRZKDUsIDYpOlxcbitcXHRcXHRjdHJsID0gWVQ5MjFYX0xFRDFfUE9SVF9CTElOS19EVVRZXzVfNjtcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdH1cXG4rXFx0aWYgKGR1dHkgXFx1MDAzYyBZVDkyMVhfTEVEX0RVVFkoMSwgMikpXFxuK1xcdFxcdGN0cmwgfD0gWVQ5MjFYX0xFRDFfUE9SVF9CTElOS19EVVRZX0NPTVA7XFxuK1xcdGlmICh1c2VfY3ljbGUpIHtcXG4rXFx0XFx0bWFzayB8PSBZVDkyMVhfTEVEMV9QT1JUX09USEVSX0JMSU5LX007XFxuK1xcdFxcdGN0cmwgfD0gWVQ5MjFYX0xFRDFfUE9SVF9PVEhFUl9CTElOSyg5IC0gX19mbHMoY3ljbGUpKTtcXG4rXFx0fVxcbitcXHRyZXMgPSB5dDkyMXhfcmVnX3VwZGF0ZV9iaXRzKHByaXYsIFlUOTIxWF9MRUQxX1BPUlRuKHBvcnQpLCBtYXNrLCBjdHJsKTtcXG4rXFx0aWYgKHJlcylcXG4rXFx0XFx0cmV0dXJuIHJlcztcXG4rXFxuK1xcdGN0cmwgPSB2YWwgXFx1MDAyNiB+KFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuX00oZ3JvdXApIHxcXG4rXFx0XFx0ICAgICAgIFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VfQkxJTktuX00oZ3JvdXApKTtcXG4rXFx0Y3RybCB8PSBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbl9CTElOSyhncm91cCk7XFxuK1xcdGlmICh1c2VfY3ljbGUpXFxuK1xcdFxcdGN0cmwgfD0gWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRV9CTElOS25fT1RIRVIoZ3JvdXApO1xcbitcXHRlbHNlXFxuK1xcdFxcdGN0cmwgfD0gWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRV9CTElOS24oZ3JvdXAsIF9fZmxzKGN5Y2xlKSAtIDkpO1xcbitcXHRyZXMgPSB5dDkyMXhfcmVnX3dyaXRlKHByaXYsIFlUOTIxWF9MRUQyX1BPUlRuKHBvcnQpLCBjdHJsKTtcXG4rXFx0aWYgKHJlcylcXG4rXFx0XFx0cmV0dXJuIHJlcztcXG4rXFxuK1xcdGxlZC1cXHUwMDNldXNlX2N5Y2xlID0gdXNlX2N5Y2xlO1xcbitcXHRpZiAodXNlX2N5Y2xlKVxcbitcXHRcXHRwcC1cXHUwMDNlbGVkX2N5Y2xlID0gY3ljbGU7XFxuK1xcdGxlZC1cXHUwMDNldXNlX2R1dHkgPSB0cnVlO1xcbitcXHRwcC1cXHUwMDNlbGVkX2R1dHkgPSBkdXR5O1xcbitcXG4rXFx0Km9ucCA9IERJVl9ST1VORF9DTE9TRVNUKGR1dHkgKiBjeWNsZSwgWVQ5MjFYX0xFRF9EVVRZX0RFTk9NKTtcXG4rXFx0Km9mZnAgPSBjeWNsZSAtICpvbnA7XFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitzdHJ1Y3QgeXQ5MjF4X2xlZF90cmlnZ2VyX21hcCB7XFxuK1xcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XFxuK1xcdHUzMiBtYXNrO1xcbit9O1xcbitcXG4rc3RhdGljIGNvbnN0IHN0cnVjdCB5dDkyMXhfbGVkX3RyaWdnZXJfbWFwIHl0OTIxeF9sZWRfdHJpZ2dlcl9tYXBzW10gPSB7XFxuK1xcdHtCSVQoVFJJR0dFUl9ORVRERVZfTElOSyksXFxuK1xcdCBZVDkyMVhfTEVEeF9QT1JUX0FDVF9EVVBMRVhfSEFMRiB8IFlUOTIxWF9MRUR4X1BPUlRfQUNUX0RVUExFWF9GVUxMfSxcXG4rXFx0e0JJVChUUklHR0VSX05FVERFVl9MSU5LXzEwKSwgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfMTBNfSxcXG4rXFx0e0JJVChUUklHR0VSX05FVERFVl9MSU5LXzEwMCksIFlUOTIxWF9MRUR4X1BPUlRfQUNUXzEwME19LFxcbitcXHR7QklUKFRSSUdHRVJfTkVUREVWX0xJTktfMTAwMCksIFlUOTIxWF9MRUR4X1BPUlRfQUNUXzEwMDBNfSxcXG4rXFx0e0JJVChUUklHR0VSX05FVERFVl9IQUxGX0RVUExFWCksIFlUOTIxWF9MRUR4X1BPUlRfQUNUX0RVUExFWF9IQUxGfSxcXG4rXFx0e0JJVChUUklHR0VSX05FVERFVl9GVUxMX0RVUExFWCksIFlUOTIxWF9MRUR4X1BPUlRfQUNUX0RVUExFWF9GVUxMfSxcXG4rXFx0e0JJVChUUklHR0VSX05FVERFVl9UWCksIFlUOTIxWF9MRUR4X1BPUlRfQUNUX1RYX0JMSU5LfSxcXG4rXFx0e0JJVChUUklHR0VSX05FVERFVl9SWCksIFlUOTIxWF9MRUR4X1BPUlRfQUNUX1JYX0JMSU5LfSxcXG4rXFx0e0JJVChUUklHR0VSX05FVERFVl9UWF9FUlIpIHwgQklUKFRSSUdHRVJfTkVUREVWX1JYX0VSUiksXFxuK1xcdCBZVDkyMVhfTEVEeF9QT1JUX0FDVF9DT0xMSVNJT05fQkxJTkt9LFxcbit9O1xcbitcXG4rc3RhdGljIGJvb2xcXG4reXQ5MjF4X2xlZF90cmlnZ2VyX2lzX3N1cHBvcnRlZChjb25zdCBzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIGludCBwb3J0LFxcbitcXHRcXHRcXHRcXHRpbnQgZ3JvdXAsIHVuc2lnbmVkIGxvbmcgZmxhZ3MpXFxuK3tcXG4rXFx0aWYgKCFmbGFncylcXG4rXFx0XFx0cmV0dXJuIHRydWU7XFxuK1xcbitcXHRmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSBcXHUwMDNjIEFSUkFZX1NJWkUoeXQ5MjF4X2xlZF90cmlnZ2VyX21hcHMpOyBpKyspIHtcXG4rXFx0XFx0Y29uc3Qgc3RydWN0IHl0OTIxeF9sZWRfdHJpZ2dlcl9tYXAgKm1hcCA9IFxcdTAwMjZ5dDkyMXhfbGVkX3RyaWdnZXJfbWFwc1tpXTtcXG4rXFxuK1xcdFxcdGlmICgoZmxhZ3MgXFx1MDAyNiBtYXAtXFx1MDAzZWZsYWdzKSA9PSBtYXAtXFx1MDAzZWZsYWdzKSB7XFxuK1xcdFxcdFxcdGZsYWdzIFxcdTAwMjY9IH5tYXAtXFx1MDAzZWZsYWdzO1xcbitcXHRcXHRcXHRpZiAoIWZsYWdzKVxcbitcXHRcXHRcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4rXFx0XFx0fVxcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gZmFsc2U7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnRcXG4reXQ5MjF4X2xlZF90cmlnZ2VyX2dldChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIGludCBwb3J0LCBpbnQgZ3JvdXAsXFxuK1xcdFxcdCAgICAgICB1bnNpZ25lZCBsb25nICpmbGFnc3ApXFxuK3tcXG4rXFx0dTMyIGFkZHI7XFxuK1xcdHUzMiB2YWw7XFxuK1xcdGludCByZXM7XFxuK1xcbitcXHRyZXMgPSB5dDkyMXhfcmVnX3JlYWQocHJpdiwgWVQ5MjFYX0xFRDJfUE9SVG4ocG9ydCksIFxcdTAwMjZ2YWwpO1xcbitcXHRpZiAocmVzKVxcbitcXHRcXHRyZXR1cm4gcmVzO1xcbitcXG4rXFx0aWYgKCh2YWwgXFx1MDAyNiBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbl9NKGdyb3VwKSkgIT1cXG4rXFx0ICAgIFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuX0RPTlRDQVJFKGdyb3VwKSkge1xcbitcXHRcXHQqZmxhZ3NwID0gMDtcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcdH1cXG4rXFxuK1xcdGlmIChncm91cCAhPSAyKSB7XFxuK1xcdFxcdGFkZHIgPSB5dDkyMXhfbGVkX3JlZ2FkZHIocHJpdiwgcG9ydCwgZ3JvdXApO1xcbitcXHRcXHRyZXMgPSB5dDkyMXhfcmVnX3JlYWQocHJpdiwgYWRkciwgXFx1MDAyNnZhbCk7XFxuK1xcdFxcdGlmIChyZXMpXFxuK1xcdFxcdFxcdHJldHVybiByZXM7XFxuK1xcdH1cXG4rXFxuK1xcdCpmbGFnc3AgPSAwO1xcbitcXHRmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSBcXHUwMDNjIEFSUkFZX1NJWkUoeXQ5MjF4X2xlZF90cmlnZ2VyX21hcHMpOyBpKyspIHtcXG4rXFx0XFx0Y29uc3Qgc3RydWN0IHl0OTIxeF9sZWRfdHJpZ2dlcl9tYXAgKm1hcCA9IFxcdTAwMjZ5dDkyMXhfbGVkX3RyaWdnZXJfbWFwc1tpXTtcXG4rXFxuK1xcdFxcdGlmICgodmFsIFxcdTAwMjYgbWFwLVxcdTAwM2VtYXNrKSA9PSBtYXAtXFx1MDAzZW1hc2spXFxuK1xcdFxcdFxcdCpmbGFnc3AgfD0gbWFwLVxcdTAwM2VmbGFncztcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnRcXG4reXQ5MjF4X2xlZF90cmlnZ2VyX3NldChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIGludCBwb3J0LCBpbnQgZ3JvdXAsXFxuK1xcdFxcdCAgICAgICB1bnNpZ25lZCBsb25nIGZsYWdzKVxcbit7XFxuK1xcdHN0cnVjdCB5dDkyMXhfcG9ydCAqcHAgPSBcXHUwMDI2cHJpdi1cXHUwMDNlcG9ydHNbcG9ydF07XFxuK1xcdHN0cnVjdCB5dDkyMXhfbGVkICpsZWQgPSBwcC1cXHUwMDNlbGVkc1tncm91cF07XFxuK1xcdHUzMiBhZGRyO1xcbitcXHR1MzIgY3RybDtcXG4rXFx0dTMyIG1hc2s7XFxuK1xcdGludCByZXM7XFxuK1xcbitcXHRjdHJsID0gMDtcXG4rXFx0Zm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgXFx1MDAzYyBBUlJBWV9TSVpFKHl0OTIxeF9sZWRfdHJpZ2dlcl9tYXBzKTsgaSsrKSB7XFxuK1xcdFxcdGNvbnN0IHN0cnVjdCB5dDkyMXhfbGVkX3RyaWdnZXJfbWFwICptYXAgPSBcXHUwMDI2eXQ5MjF4X2xlZF90cmlnZ2VyX21hcHNbaV07XFxuK1xcbitcXHRcXHRpZiAoKGZsYWdzIFxcdTAwMjYgbWFwLVxcdTAwM2VmbGFncykgPT0gbWFwLVxcdTAwM2VmbGFncykge1xcbitcXHRcXHRcXHRmbGFncyBcXHUwMDI2PSB+bWFwLVxcdTAwM2VmbGFncztcXG4rXFx0XFx0XFx0Y3RybCB8PSBtYXAtXFx1MDAzZW1hc2s7XFxuK1xcdFxcdFxcdGlmICghZmxhZ3MpXFxuK1xcdFxcdFxcdFxcdGJyZWFrO1xcbitcXHRcXHR9XFxuK1xcdH1cXG4rXFx0aWYgKGZsYWdzKVxcbitcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuK1xcbitcXHRsZWQtXFx1MDAzZXVzZV9jeWNsZSA9IGZhbHNlO1xcbitcXHRsZWQtXFx1MDAzZXVzZV9kdXR5ID0gZmFsc2U7XFxuK1xcbitcXHRtYXNrID0gIWdyb3VwID8gWVQ5MjFYX0xFRDBfUE9SVF9BQ1RfTSA6IFlUOTIxWF9MRUR4X1BPUlRfQUNUX007XFxuK1xcdGlmIChncm91cCA9PSAyKSB7XFxuK1xcdFxcdG1hc2sgfD0gWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW5fTShncm91cCk7XFxuK1xcdFxcdGN0cmwgfD0gWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW5fRE9OVENBUkUoZ3JvdXApO1xcbitcXHR9XFxuK1xcdGFkZHIgPSB5dDkyMXhfbGVkX3JlZ2FkZHIocHJpdiwgcG9ydCwgZ3JvdXApO1xcbitcXHRyZXMgPSB5dDkyMXhfcmVnX3VwZGF0ZV9iaXRzKHByaXYsIGFkZHIsIG1hc2ssIGN0cmwpO1xcbitcXHRpZiAocmVzKVxcbitcXHRcXHRyZXR1cm4gcmVzO1xcbitcXG4rXFx0aWYgKGdyb3VwICE9IDIpIHtcXG4rXFx0XFx0bWFzayA9IFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuX00oZ3JvdXApO1xcbitcXHRcXHRjdHJsID0gWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW5fRE9OVENBUkUoZ3JvdXApO1xcbitcXHRcXHRyZXMgPSB5dDkyMXhfcmVnX3VwZGF0ZV9iaXRzKHByaXYsIFlUOTIxWF9MRUQyX1BPUlRuKHBvcnQpLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgIG1hc2ssIGN0cmwpO1xcbitcXHRcXHRpZiAocmVzKVxcbitcXHRcXHRcXHRyZXR1cm4gcmVzO1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rc3RhdGljIGludFxcbit5dDkyMXhfY2xlZF9icmlnaHRuZXNzX3NldF9ibG9ja2luZyhzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldixcXG4rXFx0XFx0XFx0XFx0ICAgIGVudW0gbGVkX2JyaWdodG5lc3MgYnJpZ2h0bmVzcylcXG4re1xcbitcXHRzdHJ1Y3QgeXQ5MjF4X2xlZCAqbGVkID0gdG9feXQ5MjF4X2xlZChsZWRfY2Rldik7XFxuK1xcdHN0cnVjdCB5dDkyMXhfcG9ydCAqcHAgPSB0b195dDkyMXhfcG9ydChsZWQpO1xcbitcXHRzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYgPSB0b195dDkyMXhfcHJpdihwcCk7XFxuK1xcdGludCByZXM7XFxuK1xcbitcXHRtdXRleF9sb2NrKFxcdTAwMjZwcml2LVxcdTAwM2VyZWdfbG9jayk7XFxuK1xcdHJlcyA9IHl0OTIxeF9sZWRfZm9yY2Vfc2V0KHByaXYsIHBwLVxcdTAwM2VpbmRleCwgbGVkLVxcdTAwM2Vncm91cCwgYnJpZ2h0bmVzcyk7XFxuK1xcdG11dGV4X3VubG9jayhcXHUwMDI2cHJpdi1cXHUwMDNlcmVnX2xvY2spO1xcbitcXG4rXFx0cmV0dXJuIHJlcztcXG4rfVxcbitcXG4rc3RhdGljIGludFxcbit5dDkyMXhfY2xlZF9ibGlua19zZXQoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYsIHVuc2lnbmVkIGxvbmcgKmRlbGF5X29uLFxcbitcXHRcXHQgICAgICB1bnNpZ25lZCBsb25nICpkZWxheV9vZmYpXFxuK3tcXG4rXFx0c3RydWN0IHl0OTIxeF9sZWQgKmxlZCA9IHRvX3l0OTIxeF9sZWQobGVkX2NkZXYpO1xcbitcXHRzdHJ1Y3QgeXQ5MjF4X3BvcnQgKnBwID0gdG9feXQ5MjF4X3BvcnQobGVkKTtcXG4rXFx0c3RydWN0IHl0OTIxeF9wcml2ICpwcml2ID0gdG9feXQ5MjF4X3ByaXYocHApO1xcbitcXHRpbnQgcmVzO1xcbitcXG4rXFx0bXV0ZXhfbG9jayhcXHUwMDI2cHJpdi1cXHUwMDNlcmVnX2xvY2spO1xcbitcXHRyZXMgPSB5dDkyMXhfbGVkX2JsaW5rX3NldChwcml2LCBwcC1cXHUwMDNlaW5kZXgsIGxlZC1cXHUwMDNlZ3JvdXAsIGRlbGF5X29uLFxcbitcXHRcXHRcXHRcXHQgICBkZWxheV9vZmYpO1xcbitcXHRtdXRleF91bmxvY2soXFx1MDAyNnByaXYtXFx1MDAzZXJlZ19sb2NrKTtcXG4rXFxuK1xcdHJldHVybiByZXM7XFxuK31cXG4rXFxuK3N0YXRpYyBzdHJ1Y3QgZGV2aWNlICogX19tYXliZV91bnVzZWRcXG4reXQ5MjF4X2NsZWRfaHdfY29udHJvbF9nZXRfZGV2aWNlKHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2KVxcbit7XFxuK1xcdHN0cnVjdCB5dDkyMXhfbGVkICpsZWQgPSB0b195dDkyMXhfbGVkKGxlZF9jZGV2KTtcXG4rXFx0c3RydWN0IHl0OTIxeF9wb3J0ICpwcCA9IHRvX3l0OTIxeF9wb3J0KGxlZCk7XFxuK1xcdHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiA9IHRvX3l0OTIxeF9wcml2KHBwKTtcXG4rXFx0c3RydWN0IGRzYV9wb3J0ICpkcDtcXG4rXFxuK1xcdGRwID0gZHNhX3RvX3BvcnQoXFx1MDAyNnByaXYtXFx1MDAzZWRzLCBwcC1cXHUwMDNlaW5kZXgpO1xcbitcXHRpZiAoIWRwKVxcbitcXHRcXHRyZXR1cm4gTlVMTDtcXG4rXFxuK1xcdGlmIChkc2FfcG9ydF9pc191c2VyKGRwKSlcXG4rXFx0XFx0cmV0dXJuIFxcdTAwMjZkcC1cXHUwMDNldXNlci1cXHUwMDNlZGV2O1xcbitcXHRpZiAoZHNhX3BvcnRfaXNfY3B1KGRwKSlcXG4rXFx0XFx0cmV0dXJuIFxcdTAwMjZkcC1cXHUwMDNlY29uZHVpdC1cXHUwMDNlZGV2O1xcbitcXG4rXFx0cmV0dXJuIE5VTEw7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgX19tYXliZV91bnVzZWRcXG4reXQ5MjF4X2NsZWRfaHdfY29udHJvbF9pc19zdXBwb3J0ZWQoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYsXFxuK1xcdFxcdFxcdFxcdCAgICB1bnNpZ25lZCBsb25nIGZsYWdzKVxcbit7XFxuK1xcdHN0cnVjdCB5dDkyMXhfbGVkICpsZWQgPSB0b195dDkyMXhfbGVkKGxlZF9jZGV2KTtcXG4rXFx0c3RydWN0IHl0OTIxeF9wb3J0ICpwcCA9IHRvX3l0OTIxeF9wb3J0KGxlZCk7XFxuK1xcdHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiA9IHRvX3l0OTIxeF9wcml2KHBwKTtcXG4rXFxuK1xcdGlmICh5dDkyMXhfbGVkX3RyaWdnZXJfaXNfc3VwcG9ydGVkKHByaXYsIHBwLVxcdTAwM2VpbmRleCwgbGVkLVxcdTAwM2Vncm91cCwgZmxhZ3MpKVxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IF9fbWF5YmVfdW51c2VkXFxuK3l0OTIxeF9jbGVkX2h3X2NvbnRyb2xfZ2V0KHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2LCB1bnNpZ25lZCBsb25nICpmbGFnc3ApXFxuK3tcXG4rXFx0c3RydWN0IHl0OTIxeF9sZWQgKmxlZCA9IHRvX3l0OTIxeF9sZWQobGVkX2NkZXYpO1xcbitcXHRzdHJ1Y3QgeXQ5MjF4X3BvcnQgKnBwID0gdG9feXQ5MjF4X3BvcnQobGVkKTtcXG4rXFx0c3RydWN0IHl0OTIxeF9wcml2ICpwcml2ID0gdG9feXQ5MjF4X3ByaXYocHApO1xcbitcXHRpbnQgcmVzO1xcbitcXG4rXFx0bXV0ZXhfbG9jayhcXHUwMDI2cHJpdi1cXHUwMDNlcmVnX2xvY2spO1xcbitcXHRyZXMgPSB5dDkyMXhfbGVkX3RyaWdnZXJfZ2V0KHByaXYsIHBwLVxcdTAwM2VpbmRleCwgbGVkLVxcdTAwM2Vncm91cCwgZmxhZ3NwKTtcXG4rXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZwcml2LVxcdTAwM2VyZWdfbG9jayk7XFxuK1xcbitcXHRyZXR1cm4gcmVzO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IF9fbWF5YmVfdW51c2VkXFxuK3l0OTIxeF9jbGVkX2h3X2NvbnRyb2xfc2V0KHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2LCB1bnNpZ25lZCBsb25nIGZsYWdzKVxcbit7XFxuK1xcdHN0cnVjdCB5dDkyMXhfbGVkICpsZWQgPSB0b195dDkyMXhfbGVkKGxlZF9jZGV2KTtcXG4rXFx0c3RydWN0IHl0OTIxeF9wb3J0ICpwcCA9IHRvX3l0OTIxeF9wb3J0KGxlZCk7XFxuK1xcdHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiA9IHRvX3l0OTIxeF9wcml2KHBwKTtcXG4rXFx0aW50IHJlcztcXG4rXFxuK1xcdG11dGV4X2xvY2soXFx1MDAyNnByaXYtXFx1MDAzZXJlZ19sb2NrKTtcXG4rXFx0cmVzID0geXQ5MjF4X2xlZF90cmlnZ2VyX3NldChwcml2LCBwcC1cXHUwMDNlaW5kZXgsIGxlZC1cXHUwMDNlZ3JvdXAsIGZsYWdzKTtcXG4rXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZwcml2LVxcdTAwM2VyZWdfbG9jayk7XFxuK1xcbitcXHRyZXR1cm4gcmVzO1xcbit9XFxuK1xcbitzdGF0aWMgaW50XFxuK3l0OTIxeF9sZWRfc2V0dXAoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCBpbnQgcG9ydCxcXG4rXFx0XFx0IHN0cnVjdCBmd25vZGVfaGFuZGxlICpmd25vZGUpXFxuK3tcXG4rXFx0c3RydWN0IHl0OTIxeF9wb3J0ICpwcCA9IFxcdTAwMjZwcml2LVxcdTAwM2Vwb3J0c1twb3J0XTtcXG4rXFx0c3RydWN0IGRldmljZSAqZGV2ID0gdG9fZGV2aWNlKHByaXYpO1xcbitcXHRzdHJ1Y3QgbGVkX2luaXRfZGF0YSBpbml0X2RhdGE7XFxuK1xcdHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2O1xcbitcXHRjaGFyIG5hbWVbTEVEX01BWF9OQU1FX1NJWkVdO1xcbitcXHRlbnVtIGxlZF9kZWZhdWx0X3N0YXRlIHN0YXRlO1xcbitcXHRzdHJ1Y3QgeXQ5MjF4X2xlZCAqbGVkO1xcbitcXHRib29sIGZvcmNlX2hpZ2g7XFxuK1xcdGJvb2wgZm9yY2VfbG93O1xcbitcXHR1MzIgZ3JvdXA7XFxuK1xcdHUzMiBtYXNrO1xcbitcXHR1MzIgY3RybDtcXG4rXFx0dTMyIHZhbDtcXG4rXFx0Ym9vbCBvbjtcXG4rXFx0aW50IHJlcztcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdHJlcyA9IGZ3bm9kZV9wcm9wZXJ0eV9yZWFkX3UzMihmd25vZGUsIFxcXCJyZWdcXFwiLCBcXHUwMDI2Z3JvdXApO1xcbitcXHRpZiAocmVzKVxcbitcXHRcXHRyZXR1cm4gcmVzO1xcbitcXHRpZiAoZ3JvdXAgXFx1MDAzZT0gWVQ5MjFYX0xFRF9HUk9VUF9OVU0pIHtcXG4rXFx0XFx0ZGV2X2VycihkZXYsIFxcXCJJbnZhbGlkIExFRCByZWcgJXUgZm9yIHBvcnQgJWRcXFxcblxcXCIsIGdyb3VwLCBwb3J0KTtcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcdH1cXG4rXFx0aWYgKHBwLVxcdTAwM2VsZWRzW2dyb3VwXSlcXG4rXFx0XFx0cmV0dXJuIC1FRVhJU1Q7XFxuK1xcbitcXHRmb3JjZV9oaWdoID0gZndub2RlX3Byb3BlcnR5X3JlYWRfYm9vbChmd25vZGUsIFxcXCJhY3RpdmUtaGlnaFxcXCIpO1xcbitcXHRmb3JjZV9sb3cgPSBmd25vZGVfcHJvcGVydHlfcmVhZF9ib29sKGZ3bm9kZSwgXFxcImFjdGl2ZS1sb3dcXFwiKTtcXG4rXFx0aWYgKGZvcmNlX2hpZ2ggXFx1MDAyNlxcdTAwMjYgZm9yY2VfbG93KSB7XFxuK1xcdFxcdGRldl9lcnIoZGV2LCBcXFwiRHVwbGljYXRlIHBvbGFyaXRpZXMgZm9yIExFRCAlMDJkOiUwMnVcXFxcblxcXCIsXFxuK1xcdFxcdFxcdHBvcnQsIGdyb3VwKTtcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcdH1cXG4rXFxuK1xcdGxlZCA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZigqbGVkKSwgR0ZQX0tFUk5FTCk7XFxuK1xcdGlmICghbGVkKVxcbitcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4rXFx0bGVkLVxcdTAwM2Vwb3J0ID0gcHA7XFxuK1xcdGxlZC1cXHUwMDNlZ3JvdXAgPSBncm91cDtcXG4rXFxuK1xcdHN0YXRlID0gbGVkX2luaXRfZGVmYXVsdF9zdGF0ZV9nZXQoZndub2RlKTtcXG4rXFxuK1xcdG11dGV4X2xvY2soXFx1MDAyNnByaXYtXFx1MDAzZXJlZ19sb2NrKTtcXG4rXFxuK1xcdC8qIEludmVyc2lvbiBpcyBpbnRlcm5hbCAtIGZvcmNlIG9uIHdpbGwgZ2l2ZSBsb3cgbG9naWMuXFxuK1xcdCAqIEluIHRoZSByZXN0IG9mIHRoZSBmaWxlLCB0cmVhdCBMRURzIGFzIGlmIGFjdGl2ZS1sb3cuXFxuK1xcdCAqL1xcbitcXHRpZiAoZm9yY2VfaGlnaCB8fCBmb3JjZV9sb3cpIHtcXG4rXFx0XFx0cmVzID0geXQ5MjF4X3JlZ19yZWFkKHByaXYsIFlUOTIxWF9MRURfUEFSX0lOViwgXFx1MDAyNnZhbCk7XFxuK1xcdFxcdGlmIChyZXMpXFxuK1xcdFxcdFxcdGdvdG8gdW5sb2NrO1xcbitcXG4rXFx0XFx0bWFzayA9IFlUOTIxWF9MRURfUEFSX0lOVl9JTlZubShncm91cCwgcG9ydCk7XFxuK1xcdFxcdGN0cmwgPSBmb3JjZV9oaWdoID8gdmFsIHwgbWFzayA6IHZhbCBcXHUwMDI2IH5tYXNrO1xcbitcXHRcXHRyZXMgPSB5dDkyMXhfcmVnX3dyaXRlKHByaXYsIFlUOTIxWF9MRURfUEFSX0lOViwgY3RybCk7XFxuK1xcdFxcdGlmIChyZXMpXFxuK1xcdFxcdFxcdGdvdG8gdW5sb2NrO1xcbitcXHR9XFxuK1xcbitcXHRwcC1cXHUwMDNlbGVkc1tncm91cF0gPSBsZWQ7XFxuK1xcbitcXHRzd2l0Y2ggKHN0YXRlKSB7XFxuK1xcdGNhc2UgTEVEU19ERUZTVEFURV9PRkY6XFxuK1xcdGNhc2UgTEVEU19ERUZTVEFURV9PTjpcXG4rXFx0ZGVmYXVsdDpcXG4rXFx0XFx0b24gPSBzdGF0ZSA9PSBMRURTX0RFRlNUQVRFX09OO1xcbitcXHRcXHRyZXMgPSB5dDkyMXhfbGVkX2ZvcmNlX3NldChwcml2LCBwb3J0LCBncm91cCwgb24pO1xcbitcXHRcXHRicmVhaztcXG4rXFx0Y2FzZSBMRURTX0RFRlNUQVRFX0tFRVA6XFxuK1xcdFxcdHJlcyA9IHl0OTIxeF9sZWRfZm9yY2VfZ2V0KHByaXYsIHBvcnQsIGdyb3VwLCBcXHUwMDI2b24pO1xcbitcXHRcXHRicmVhaztcXG4rXFx0fVxcbitcXG4rdW5sb2NrOlxcbitcXHRtdXRleF91bmxvY2soXFx1MDAyNnByaXYtXFx1MDAzZXJlZ19sb2NrKTtcXG4rXFx0aWYgKHJlcylcXG4rXFx0XFx0Z290byBlcnI7XFxuK1xcbitcXHRsZWRfY2RldiA9IFxcdTAwMjZsZWQtXFx1MDAzZWNkZXY7XFxuK1xcdGxlZF9jZGV2LVxcdTAwM2VicmlnaHRuZXNzID0gb247XFxuK1xcdGxlZF9jZGV2LVxcdTAwM2VtYXhfYnJpZ2h0bmVzcyA9IDE7XFxuK1xcdGxlZF9jZGV2LVxcdTAwM2VmbGFncyA9IExFRF9SRVRBSU5fQVRfU0hVVERPV047XFxuK1xcdGxlZF9jZGV2LVxcdTAwM2VicmlnaHRuZXNzX3NldF9ibG9ja2luZyA9IHl0OTIxeF9jbGVkX2JyaWdodG5lc3Nfc2V0X2Jsb2NraW5nO1xcbitcXHRsZWRfY2Rldi1cXHUwMDNlYmxpbmtfc2V0ID0geXQ5MjF4X2NsZWRfYmxpbmtfc2V0O1xcbisjaWZkZWYgQ09ORklHX0xFRFNfVFJJR0dFUlNcXG4rXFx0bGVkX2NkZXYtXFx1MDAzZWh3X2NvbnRyb2xfdHJpZ2dlciA9IFxcXCJuZXRkZXZcXFwiO1xcbitcXHRsZWRfY2Rldi1cXHUwMDNlaHdfY29udHJvbF9nZXRfZGV2aWNlID0geXQ5MjF4X2NsZWRfaHdfY29udHJvbF9nZXRfZGV2aWNlO1xcbitcXHRsZWRfY2Rldi1cXHUwMDNlaHdfY29udHJvbF9pc19zdXBwb3J0ZWQgPSB5dDkyMXhfY2xlZF9od19jb250cm9sX2lzX3N1cHBvcnRlZDtcXG4rXFx0bGVkX2NkZXYtXFx1MDAzZWh3X2NvbnRyb2xfZ2V0ID0geXQ5MjF4X2NsZWRfaHdfY29udHJvbF9nZXQ7XFxuK1xcdGxlZF9jZGV2LVxcdTAwM2Vod19jb250cm9sX3NldCA9IHl0OTIxeF9jbGVkX2h3X2NvbnRyb2xfc2V0O1xcbisjZW5kaWZcXG4rXFxuK1xcdHNucHJpbnRmKG5hbWUsIHNpemVvZihuYW1lKSwgWVQ5MjFYX05BTUUgXFxcIi0ldTolMDJkOiUwMnVcXFwiLFxcbitcXHRcXHQgcHJpdi1cXHUwMDNlZHMuaW5kZXgsIHBvcnQsIGdyb3VwKTtcXG4rXFx0aW5pdF9kYXRhID0gKHR5cGVvZihpbml0X2RhdGEpKXtcXG4rXFx0XFx0LmZ3bm9kZSA9IGZ3bm9kZSxcXG4rXFx0XFx0LmRlZmF1bHRfbGFiZWwgPSBcXFwiOnBvcnRcXFwiLFxcbitcXHRcXHQuZGV2aWNlbmFtZSA9IG5hbWUsXFxuK1xcdFxcdC5kZXZuYW1lX21hbmRhdG9yeSA9IHRydWUsXFxuK1xcdH07XFxuK1xcdHJlcyA9IGRldm1fbGVkX2NsYXNzZGV2X3JlZ2lzdGVyX2V4dChkZXYsIGxlZF9jZGV2LCBcXHUwMDI2aW5pdF9kYXRhKTtcXG4rXFx0aWYgKHJlcylcXG4rXFx0XFx0Z290byBlcnI7XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rXFxuK2VycjpcXG4rXFx0cmV0ID0gcmVzO1xcbitcXG4rXFx0bXV0ZXhfbG9jayhcXHUwMDI2cHJpdi1cXHUwMDNlcmVnX2xvY2spO1xcbitcXHRpZiAocHAtXFx1MDAzZWxlZHNbZ3JvdXBdKSB7XFxuK1xcdFxcdGlmIChmb3JjZV9oaWdoIHx8IGZvcmNlX2xvdykge1xcbitcXHRcXHRcXHRyZXMgPSB5dDkyMXhfcmVnX3dyaXRlKHByaXYsIFlUOTIxWF9MRURfUEFSX0lOViwgdmFsKTtcXG4rXFx0XFx0XFx0aWYgKHJlcylcXG4rXFx0XFx0XFx0XFx0ZGV2X3dhcm4oZGV2LFxcbitcXHRcXHRcXHRcXHRcXHQgXFxcIkZhaWxlZCB0byByZXZva2UgaW5pdGlhbGl6YXRpb24gZm9yIExFRCAlMDJkOiUwMnVcXFxcblxcXCIsXFxuK1xcdFxcdFxcdFxcdFxcdCBwb3J0LCBncm91cCk7XFxuK1xcdFxcdH1cXG4rXFxuK1xcdFxcdHBwLVxcdTAwM2VsZWRzW2dyb3VwXSA9IE5VTEw7XFxuK1xcdH1cXG4rXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZwcml2LVxcdTAwM2VyZWdfbG9jayk7XFxuK1xcbitcXHRkZXZtX2tmcmVlKGRldiwgbGVkKTtcXG4rXFx0cmV0dXJuIHJldDtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgeXQ5MjF4X2xlZHNfcmVtb3ZlX3BvcnQoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCBpbnQgcG9ydClcXG4re1xcbitcXHRzdHJ1Y3QgeXQ5MjF4X3BvcnQgKnBwID0gXFx1MDAyNnByaXYtXFx1MDAzZXBvcnRzW3BvcnRdO1xcbitcXHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSB0b19kZXZpY2UocHJpdik7XFxuK1xcdGJvb2wgaGFzX2xlZHMgPSBmYWxzZTtcXG4rXFxuK1xcdGZvciAoaW50IGdyb3VwID0gMDsgZ3JvdXAgXFx1MDAzYyBZVDkyMVhfTEVEX0dST1VQX05VTTsgZ3JvdXArKykge1xcbitcXHRcXHRzdHJ1Y3QgeXQ5MjF4X2xlZCAqbGVkID0gcHAtXFx1MDAzZWxlZHNbZ3JvdXBdO1xcbitcXG4rXFx0XFx0aWYgKGxlZCkge1xcbitcXHRcXHRcXHRkZXZtX2xlZF9jbGFzc2Rldl91bnJlZ2lzdGVyKGRldiwgXFx1MDAyNmxlZC1cXHUwMDNlY2Rldik7XFxuK1xcdFxcdFxcdGhhc19sZWRzID0gdHJ1ZTtcXG4rXFx0XFx0fVxcbitcXHR9XFxuK1xcbitcXHRpZiAoIWhhc19sZWRzKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHQvKiBOb3cgbm8gb25lIGNhbiBhY2Nlc3MgdGhlIExFRCBjb250cm9sIGJsb2NrcywgZnJlZSB0aGVtIHdpdGhvdXRcXG4rXFx0ICogaG9sZGluZyB0aGUgbG9jay5cXG4rXFx0ICovXFxuK1xcdGZvciAoaW50IGdyb3VwID0gMDsgZ3JvdXAgXFx1MDAzYyBZVDkyMVhfTEVEX0dST1VQX05VTTsgZ3JvdXArKykge1xcbitcXHRcXHRzdHJ1Y3QgeXQ5MjF4X2xlZCAqbGVkID0gcHAtXFx1MDAzZWxlZHNbZ3JvdXBdO1xcbitcXG4rXFx0XFx0aWYgKGxlZCkge1xcbitcXHRcXHRcXHRwcC1cXHUwMDNlbGVkc1tncm91cF0gPSBOVUxMO1xcbitcXHRcXHRcXHRkZXZtX2tmcmVlKGRldiwgbGVkKTtcXG4rXFx0XFx0fVxcbitcXHR9XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgeXQ5MjF4X2xlZHNfc2V0dXBfcG9ydChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIGludCBwb3J0KVxcbit7XFxuK1xcdHN0cnVjdCBkZXZpY2UgKmRldiA9IHRvX2RldmljZShwcml2KTtcXG4rXFx0c3RydWN0IGRzYV9zd2l0Y2ggKmRzID0gXFx1MDAyNnByaXYtXFx1MDAzZWRzO1xcbitcXHRzdHJ1Y3QgZGV2aWNlX25vZGUgKmxlZHNfbnA7XFxuK1xcdHN0cnVjdCBkc2FfcG9ydCAqZHA7XFxuK1xcbitcXHRkcCA9IGRzYV90b19wb3J0KGRzLCBwb3J0KTtcXG4rXFx0bGVkc19ucCA9IG9mX2dldF9jaGlsZF9ieV9uYW1lKGRwLVxcdTAwM2VkbiwgXFxcImxlZHNcXFwiKTtcXG4rXFx0aWYgKCFsZWRzX25wKVxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFxuK1xcdGlmIChwb3J0IFxcdTAwM2U9IFlUOTIxWF9MRURfUE9SVF9OVU0pIHtcXG4rXFx0XFx0ZGV2X2VycihkZXYsIFxcXCJDYW5ub3QgY29uZmlndXJlIExFRHMgZm9yIHBvcnQgJWRcXFxcblxcXCIsIHBvcnQpO1xcbitcXHRcXHRvZl9ub2RlX3B1dChsZWRzX25wKTtcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcdH1cXG4rXFxuK1xcdGZvcl9lYWNoX2NoaWxkX29mX25vZGVfc2NvcGVkKGxlZHNfbnAsIGxlZF9ucCkge1xcbitcXHRcXHR5dDkyMXhfbGVkX3NldHVwKHByaXYsIHBvcnQsIG9mX2Z3bm9kZV9oYW5kbGUobGVkX25wKSk7XFxuK1xcdFxcdC8qIEFsbG93IHBhcnRpYWwgY29uZmlndXJhdGlvbjogTEVEcyBhcmUgb3B0aW9uYWwgKi9cXG4rXFx0fVxcbitcXG4rXFx0b2Zfbm9kZV9wdXQobGVkc19ucCk7XFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbit2b2lkIHl0OTIxeF9sZWRzX3JlbW92ZShzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYpXFxuK3tcXG4rXFx0Zm9yIChpbnQgcG9ydCA9IDA7IHBvcnQgXFx1MDAzYyBZVDkyMVhfTEVEX1BPUlRfTlVNOyBwb3J0KyspXFxuK1xcdFxcdHl0OTIxeF9sZWRzX3JlbW92ZV9wb3J0KHByaXYsIHBvcnQpO1xcbit9XFxuK1xcbitpbnQgeXQ5MjF4X2xlZHNfc2V0dXAoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2KVxcbit7XFxuK1xcdHN0cnVjdCBkc2Ffc3dpdGNoICpkcyA9IFxcdTAwMjZwcml2LVxcdTAwM2VkcztcXG4rXFx0c3RydWN0IGRzYV9wb3J0ICpkcDtcXG4rXFxuK1xcdC8qIExFRHMgYXJlIGFsd2F5cyBlbmFibGVkLiBUaGVyZSBpcyBubyB3YXkgdG8gZGlzYWJsZSB0aGVtIGFsdG9nZXRoZXJcXG4rXFx0ICogKGFzIGZhciBhcyBJIGtub3cpLlxcbitcXHQgKi9cXG4rXFxuK1xcdGRzYV9zd2l0Y2hfZm9yX2VhY2hfcG9ydChkcCwgZHMpIHtcXG4rXFx0XFx0aW50IHBvcnQgPSBkcC1cXHUwMDNlaW5kZXg7XFxuK1xcbitcXHRcXHRpZiAoIWRwLVxcdTAwM2VkbilcXG4rXFx0XFx0XFx0Y29udGludWU7XFxuK1xcbitcXHRcXHR5dDkyMXhfbGVkc19zZXR1cF9wb3J0KHByaXYsIHBvcnQpO1xcbitcXHRcXHQvKiBBbGxvdyBwYXJ0aWFsIGNvbmZpZ3VyYXRpb246IExFRHMgYXJlIG9wdGlvbmFsICovXFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vbGVkcy5oIGIvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9sZWRzLmhcXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxcbmluZGV4IDAwMDAwMDAwMDAwMDAuLjNjMzY0Mjk4OGFjNzdcXG4tLS0gL2Rldi9udWxsXFxuKysrIGIvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9sZWRzLmhcXG5AQCAtMCwwICsxLDEyMSBAQFxcbisvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vci1sYXRlciAqL1xcbisvKlxcbisgKiBDb3B5cmlnaHQgKGMpIDIwMjYgRGF2aWQgWWFuZ1xcbisgKi9cXG4rXFxuKyNpZm5kZWYgX1lUX0xFRFNfSFxcbisjZGVmaW5lIF9ZVF9MRURTX0hcXG4rXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9iaXRmaWVsZC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvYml0cy5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgva2NvbmZpZy5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvbGVkcy5oXFx1MDAzZVxcbitcXG4rI2RlZmluZSBZVDkyMVhfTEVEX0NUUkxcXHRcXHRcXHQweGQwMDAwXFxuKyNkZWZpbmUgIFlUOTIxWF9MRURfQ1RSTF9VTktcXHRcXHRcXHRCSVQoMjEpXFxuKyNkZWZpbmUgIFlUOTIxWF9MRURfQ1RSTF9MT09QREVURUNUX0JMSU5LX01cXHRHRU5NQVNLKDIwLCAxOSlcXHQvKiBjeWNsZSA9IDUxMiAqIHggbXMgKi9cXG4rI2RlZmluZSAgIFlUOTIxWF9MRURfQ1RSTF9MT09QREVURUNUX0JMSU5LKHgpXFx0XFx0RklFTERfUFJFUChZVDkyMVhfTEVEX0NUUkxfTE9PUERFVEVDVF9CTElOS19NLCAoeCkpXFxuKyNkZWZpbmUgIFlUOTIxWF9MRURfQ1RSTF9QT1JUX05VTV9NXFx0XFx0R0VOTUFTSygxNiwgMTMpXFxuKyNkZWZpbmUgICBZVDkyMVhfTEVEX0NUUkxfUE9SVF9OVU0oeClcXHRcXHRcXHRGSUVMRF9QUkVQKFlUOTIxWF9MRURfQ1RSTF9QT1JUX05VTV9NLCAoeCkpXFxuKyNkZWZpbmUgIFlUOTIxWF9MRURfQ1RSTF9NT0RFX01cXHRcXHRcXHRHRU5NQVNLKDEsIDApXFxuKyNkZWZpbmUgICBZVDkyMVhfTEVEX0NUUkxfTU9ERSh4KVxcdFxcdFxcdEZJRUxEX1BSRVAoWVQ5MjFYX0xFRF9DVFJMX01PREVfTSwgKHgpKVxcbisjZGVmaW5lICAgWVQ5MjFYX0xFRF9DVFJMX01PREVfUEFSQUxMRUxcXHRcXHRcXHRZVDkyMVhfTEVEX0NUUkxfTU9ERSgwKVxcbisjZGVmaW5lICAgWVQ5MjFYX0xFRF9DVFJMX01PREVfU0VSSUFMXFx0XFx0XFx0WVQ5MjFYX0xFRF9DVFJMX01PREUoMilcXG4rI2RlZmluZSBZVDkyMVhfTEVEMF9QT1JUbihwb3J0KVxcdFxcdCgweGQwMDA0ICsgNCAqIChwb3J0KSlcXG4rI2RlZmluZSAgWVQ5MjFYX0xFRDBfUE9SVF9BQ1RfTVxcdFxcdFxcdEdFTk1BU0soMTcsIDApXFxuKyNkZWZpbmUgIFlUOTIxWF9MRUQwX1BPUlRfQUNUX0xJTktfVFJZX0RJU1xcdEJJVCgxNylcXG4rI2RlZmluZSAgWVQ5MjFYX0xFRDBfUE9SVF9BQ1RfQ09MTElTSU9OX0JMSU5LX0lORElcXHRCSVQoMTYpXFxuKyNkZWZpbmUgWVQ5MjFYX0xFRDFfUE9SVG4ocG9ydClcXHRcXHQoMHhkMDA0MCArIDQgKiAocG9ydCkpXFxuKyNkZWZpbmUgIFlUOTIxWF9MRUQxX1BPUlRfT1RIRVJfQkxJTktfTVxcdFxcdEdFTk1BU0soMzEsIDMwKVxcdC8qIGN5Y2xlID0gNTEyIFxcdTAwM2VcXHUwMDNlIHggbXMgKi9cXG4rI2RlZmluZSAgIFlUOTIxWF9MRUQxX1BPUlRfT1RIRVJfQkxJTksoeClcXHRcXHRGSUVMRF9QUkVQKFlUOTIxWF9MRUQxX1BPUlRfT1RIRVJfQkxJTktfTSwgKHgpKVxcbisjZGVmaW5lICBZVDkyMVhfTEVEMV9QT1JUX0VFRV9CTElOS19NXFx0XFx0R0VOTUFTSygyOSwgMjgpXFx0LyogY3ljbGUgPSA1MTIgXFx1MDAzZVxcdTAwM2UgeCBtcyAqL1xcbisjZGVmaW5lICAgWVQ5MjFYX0xFRDFfUE9SVF9FRUVfQkxJTksoeClcXHRcXHRcXHRGSUVMRF9QUkVQKFlUOTIxWF9MRUQxX1BPUlRfRUVFX0JMSU5LX00sICh4KSlcXG4rI2RlZmluZSAgWVQ5MjFYX0xFRDFfUE9SVF9CTElOS19EVVRZX0NPTVBcXHRCSVQoMjcpXFxuKyNkZWZpbmUgIFlUOTIxWF9MRUQxX1BPUlRfQkxJTktfRFVUWV9NXFx0XFx0R0VOTUFTSygyNiwgMjUpXFxuKyNkZWZpbmUgICBZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFkoeClcXHRcXHRGSUVMRF9QUkVQKFlUOTIxWF9MRUQxX1BPUlRfQkxJTktfRFVUWV9NLCAoeCkpXFxuKyNkZWZpbmUgICBZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFlfMV8yXFx0XFx0WVQ5MjFYX0xFRDFfUE9SVF9CTElOS19EVVRZKDApXFxuKyNkZWZpbmUgICBZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFlfMl8zXFx0XFx0WVQ5MjFYX0xFRDFfUE9SVF9CTElOS19EVVRZKDEpXFxuKyNkZWZpbmUgICBZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFlfM180XFx0XFx0WVQ5MjFYX0xFRDFfUE9SVF9CTElOS19EVVRZKDIpXFxuKyNkZWZpbmUgICBZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFlfNV82XFx0XFx0WVQ5MjFYX0xFRDFfUE9SVF9CTElOS19EVVRZKDMpXFxuKyNkZWZpbmUgWVQ5MjFYX0xFRDJfUE9SVG4ocG9ydClcXHRcXHQoMHhkMDA4MCArIDQgKiAocG9ydCkpXFxuKyNkZWZpbmUgIFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuX00oZ3JwKVxcdFxcdEdFTk1BU0soNCAqIChncnApICsgMTksIDQgKiAoZ3JwKSArIDE4KVxcbisjZGVmaW5lICAgWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW4oZ3JwLCB4KVxcdFxcdCgoeCkgXFx1MDAzY1xcdTAwM2MgKDQgKiAoZ3JwKSArIDE4KSlcXG4rI2RlZmluZSAgIFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuX0RPTlRDQVJFKGdycClcXHRcXHRZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbihncnAsIDApXFxuKyNkZWZpbmUgICBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbl9CTElOSyhncnApXFx0XFx0WVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW4oZ3JwLCAxKVxcbisjZGVmaW5lICAgWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW5fT04oZ3JwKVxcdFxcdFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuKGdycCwgMilcXG4rI2RlZmluZSAgIFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuX09GRihncnApXFx0XFx0WVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW4oZ3JwLCAzKVxcbisjZGVmaW5lICBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFX0JMSU5Lbl9NKGdycClcXHRHRU5NQVNLKDQgKiAoZ3JwKSArIDE3LCA0ICogKGdycCkgKyAxNilcXHQvKiBjeWNsZSA9IDUxMiBcXHUwMDNjXFx1MDAzYyB4IG1zICovXFxuKyNkZWZpbmUgICBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFX0JMSU5LbihncnAsIHgpXFx0XFx0KCh4KSBcXHUwMDNjXFx1MDAzYyAoNCAqIChncnApICsgMTYpKVxcbisjZGVmaW5lICAgWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRV9CTElOS25fT1RIRVIoZ3JwKVxcdFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VfQkxJTktuKGdycCwgMylcXG4rI2RlZmluZSAgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfTVxcdFxcdFxcdEdFTk1BU0soMTUsIDApXFxuKyNkZWZpbmUgIFlUOTIxWF9MRUR4X1BPUlRfQUNUX0VFRV9CTElOS1xcdFxcdEJJVCgxNSlcXG4rI2RlZmluZSAgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfTE9PUERFVEVDVF9CTElOS1xcdEJJVCgxNClcXG4rI2RlZmluZSAgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfQUNUSVZFX0JMSU5LXFx0QklUKDEzKVxcbisjZGVmaW5lICBZVDkyMVhfTEVEeF9QT1JUX0FDVF9EVVBMRVhfRlVMTFxcdEJJVCgxMilcXG4rI2RlZmluZSAgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfRFVQTEVYX0hBTEZcXHRCSVQoMTEpXFxuKyNkZWZpbmUgIFlUOTIxWF9MRUR4X1BPUlRfQUNUX1RYX0JMSU5LXFx0XFx0QklUKDEwKVxcbisjZGVmaW5lICBZVDkyMVhfTEVEeF9QT1JUX0FDVF9SWF9CTElOS1xcdFxcdEJJVCg5KVxcbisjZGVmaW5lICBZVDkyMVhfTEVEeF9QT1JUX0FDVF9UWFxcdFxcdEJJVCg4KVxcbisjZGVmaW5lICBZVDkyMVhfTEVEeF9QT1JUX0FDVF9SWFxcdFxcdEJJVCg3KVxcbisjZGVmaW5lICBZVDkyMVhfTEVEeF9QT1JUX0FDVF8xMDAwTVxcdFxcdEJJVCg2KVxcbisjZGVmaW5lICBZVDkyMVhfTEVEeF9QT1JUX0FDVF8xMDBNXFx0XFx0QklUKDUpXFxuKyNkZWZpbmUgIFlUOTIxWF9MRUR4X1BPUlRfQUNUXzEwTVxcdFxcdEJJVCg0KVxcbisjZGVmaW5lICBZVDkyMVhfTEVEeF9QT1JUX0FDVF9DT0xMSVNJT05fQkxJTktcXHRCSVQoMylcXG4rI2RlZmluZSAgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfMTAwME1fQkxJTktcXHRCSVQoMilcXG4rI2RlZmluZSAgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfMTAwTV9CTElOS1xcdEJJVCgxKVxcbisjZGVmaW5lICBZVDkyMVhfTEVEeF9QT1JUX0FDVF8xME1fQkxJTktcXHRcXHRCSVQoMClcXG4rI2RlZmluZSBZVDkyMVhfTEVEX1NFUl9DVFJMXFx0XFx0MHhkMDEwMFxcbisjZGVmaW5lICBZVDkyMVhfTEVEX1NFUl9DVFJMX1VOS1xcdFxcdEdFTk1BU0soMjUsIDI0KVxcdC8qIGRlbGF5PyAqL1xcbisjZGVmaW5lICBZVDkyMVhfTEVEX1NFUl9DVFJMX0FDVElWRV9MT1dcXHRcXHRCSVQoNClcXG4rI2RlZmluZSAgWVQ5MjFYX0xFRF9TRVJfQ1RSTF9HUlBfTlVNX01cXHRcXHRHRU5NQVNLKDEsIDApXFx0LyogI2dycCAtIDEgKi9cXG4rI2RlZmluZSAgIFlUOTIxWF9MRURfU0VSX0NUUkxfR1JQX05VTSh4KVxcdFxcdEZJRUxEX1BSRVAoWVQ5MjFYX0xFRF9TRVJfQ1RSTF9HUlBfTlVNX00sICh4KSlcXG4rI2RlZmluZSBZVDkyMVhfTEVEX1NFUl9NQVBubShncnAsIHBvcnQpXFx0KDB4ZDAxMDQgKyA4ICogKDIgLSAoZ3JwKSkgKyA0ICogKChwb3J0KSAvIDUpKVxcbisjZGVmaW5lICBZVDkyMVhfTEVEX1NFUl9NQVBfRFNUbl9QT1JUX00ocG9ydClcXHRHRU5NQVNLKDYgKiAoKHBvcnQpICUgNSkgKyA1LCA2ICogKChwb3J0KSAlIDUpICsgMilcXG4rI2RlZmluZSAgIFlUOTIxWF9MRURfU0VSX01BUF9EU1RuX1BPUlQocG9ydCwgeClcXHRcXHQoKHgpIFxcdTAwM2NcXHUwMDNjICg2ICogKChwb3J0KSAlIDUpICsgMikpXFxuKyNkZWZpbmUgIFlUOTIxWF9MRURfU0VSX01BUF9EU1RuX0xFRF9NKHBvcnQpXFx0R0VOTUFTSyg2ICogKChwb3J0KSAlIDUpICsgMSwgNiAqICgocG9ydCkgJSA1KSlcXG4rI2RlZmluZSAgIFlUOTIxWF9MRURfU0VSX01BUF9EU1RuX0xFRChwb3J0LCB4KVxcdFxcdCgoeCkgXFx1MDAzY1xcdTAwM2MgKDYgKiAoKHBvcnQpICUgNSkpKVxcbisjZGVmaW5lIFlUOTIxWF9MRURfUEFSX1BPUlRTXFx0XFx0MHhkMDFjNFxcbisjZGVmaW5lIFlUOTIxWF9MRURfUEFSX0lOVlxcdFxcdDB4ZDAxYzhcXG4rI2RlZmluZSAgWVQ5MjFYX0xFRF9QQVJfSU5WX0lOVm5tKGdycCwgcG9ydClcXHRCSVQoMTAgKiAoZ3JwKSArIChwb3J0KSlcXG4rI2RlZmluZSBZVDkyMVhfTEVEX1BBUl9NQVBuKHBvcnQpXFx0KDB4ZDAxZDAgKyA0ICogKHBvcnQpKVxcbisjZGVmaW5lICBZVDkyMVhfTEVEX1BBUl9NQVBfRFNUbl9QT1JUX00oZ3JwKVxcdEdFTk1BU0soNiAqIChncnApICsgNSwgNiAqIChncnApICsgMilcXG4rI2RlZmluZSAgIFlUOTIxWF9MRURfUEFSX01BUF9EU1RuX1BPUlQoZ3JwLCB4KVxcdFxcdCgoeCkgXFx1MDAzY1xcdTAwM2MgKDYgKiAoZ3JwKSArIDIpKVxcbisjZGVmaW5lICBZVDkyMVhfTEVEX1BBUl9NQVBfRFNUbl9MRURfTShncnApXFx0R0VOTUFTSyg2ICogKGdycCkgKyAxLCA2ICogKGdycCkpXFxuKyNkZWZpbmUgICBZVDkyMVhfTEVEX1BBUl9NQVBfRFNUbl9MRUQoZ3JwLCB4KVxcdFxcdCgoeCkgXFx1MDAzY1xcdTAwM2MgKDYgKiAoZ3JwKSkpXFxuK1xcbisjZGVmaW5lIFlUOTIxWF9MRURfQkxJTktfTUlOXFx0NjRcXG4rI2RlZmluZSBZVDkyMVhfTEVEX0JMSU5LX0RFRlxcdDUxMlxcbisjZGVmaW5lIFlUOTIxWF9MRURfQkxJTktfTUFYXFx0MjA0OFxcbitcXG4rLyogMiAqIGxjbSgyLCAzLCA0LCA2KSAqL1xcbisjZGVmaW5lIFlUOTIxWF9MRURfRFVUWV9ERU5PTVxcdFxcdDI0XFxuKyNkZWZpbmUgWVQ5MjFYX0xFRF9EVVRZKG5vbSwgZGVub20pXFx0KFlUOTIxWF9MRURfRFVUWV9ERU5PTSAqIChub20pIC8gKGRlbm9tKSlcXG4rXFxuK3N0cnVjdCB5dDkyMXhfcHJpdjtcXG4rXFxuK3N0cnVjdCB5dDkyMXhfbGVkIHtcXG4rXFx0c3RydWN0IGxlZF9jbGFzc2RldiBjZGV2O1xcbitcXHRzdHJ1Y3QgeXQ5MjF4X3BvcnQgKnBvcnQ7XFxuK1xcdHVuc2lnbmVkIGNoYXIgZ3JvdXA7XFxuK1xcbitcXHRib29sIHVzZV9jeWNsZToxO1xcbitcXHRib29sIHVzZV9kdXR5OjE7XFxuK307XFxuK1xcbisjaWYgSVNfRU5BQkxFRChDT05GSUdfTkVUX0RTQV9ZVDkyMVhfTEVEUylcXG4rXFxuK3ZvaWQgeXQ5MjF4X2xlZHNfcmVtb3ZlKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdik7XFxuK2ludCB5dDkyMXhfbGVkc19zZXR1cChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYpO1xcbitcXG4rI2Vsc2VcXG4rXFxuK3N0YXRpYyBpbmxpbmUgdm9pZCB5dDkyMXhfbGVkc19yZW1vdmUoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2KSB7fVxcbitcXG4rc3RhdGljIGlubGluZSBpbnQgeXQ5MjF4X2xlZHNfc2V0dXAoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2KVxcbit7XFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbisjZW5kaWZcXG4rXFxuKyNlbmRpZlxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL3NtaS5jIGIvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9zbWkuY1xcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uMTY0YzI1ZWY0OTRhMVxcbi0tLSAvZGV2L251bGxcXG4rKysgYi9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL3NtaS5jXFxuQEAgLTAsMCArMSwxNTcgQEBcXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb3ItbGF0ZXJcXG4rLypcXG4rICogQ29weXJpZ2h0IChjKSAyMDI2IERhdmlkIFlhbmdcXG4rICovXFxuK1xcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvaW9wb2xsLmhcXHUwMDNlXFxuK1xcbisjaW5jbHVkZSBcXFwiY2hpcC5oXFxcIlxcbisjaW5jbHVkZSBcXFwic21pLmhcXFwiXFxuK1xcbisjZGVmaW5lIFlUOTIxWF9QT0xMX1NMRUVQX1VTXFx0MTAwMDBcXG4rI2RlZmluZSBZVDkyMVhfUE9MTF9USU1FT1VUX1VTXFx0MTAwMDAwXFxuK1xcbitpbnQgeXQ5MjF4X3JlZ19yZWFkKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyICp2YWxwKVxcbit7XFxuK1xcdFdBUk5fT04oIW11dGV4X2lzX2xvY2tlZChcXHUwMDI2cHJpdi1cXHUwMDNlcmVnX2xvY2spKTtcXG4rXFxuK1xcdHJldHVybiBwcml2LVxcdTAwM2VyZWdfb3BzLVxcdTAwM2VyZWFkKHByaXYtXFx1MDAzZXJlZ19jdHgsIHJlZywgdmFscCk7XFxuK31cXG4rXFxuK2ludCB5dDkyMXhfcmVnX3dyaXRlKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyIHZhbClcXG4re1xcbitcXHRXQVJOX09OKCFtdXRleF9pc19sb2NrZWQoXFx1MDAyNnByaXYtXFx1MDAzZXJlZ19sb2NrKSk7XFxuK1xcbitcXHRyZXR1cm4gcHJpdi1cXHUwMDNlcmVnX29wcy1cXHUwMDNld3JpdGUocHJpdi1cXHUwMDNlcmVnX2N0eCwgcmVnLCB2YWwpO1xcbit9XFxuK1xcbitpbnQgeXQ5MjF4X3JlZ193YWl0KHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyIG1hc2ssIHUzMiAqdmFscClcXG4re1xcbitcXHR1MzIgdmFsO1xcbitcXHRpbnQgcmVzO1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0cmV0ID0gcmVhZF9wb2xsX3RpbWVvdXQoeXQ5MjF4X3JlZ19yZWFkLCByZXMsXFxuK1xcdFxcdFxcdFxcdHJlcyB8fCAodmFsIFxcdTAwMjYgbWFzaykgPT0gKnZhbHAsXFxuK1xcdFxcdFxcdFxcdFlUOTIxWF9QT0xMX1NMRUVQX1VTLCBZVDkyMVhfUE9MTF9USU1FT1VUX1VTLFxcbitcXHRcXHRcXHRcXHRmYWxzZSwgcHJpdiwgcmVnLCBcXHUwMDI2dmFsKTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0aWYgKHJlcylcXG4rXFx0XFx0cmV0dXJuIHJlcztcXG4rXFxuK1xcdCp2YWxwID0gdmFsO1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4raW50IHl0OTIxeF9yZWdfdXBkYXRlX2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgbWFzaywgdTMyIHZhbClcXG4re1xcbitcXHRpbnQgcmVzO1xcbitcXHR1MzIgdjtcXG4rXFx0dTMyIHU7XFxuK1xcbitcXHRyZXMgPSB5dDkyMXhfcmVnX3JlYWQocHJpdiwgcmVnLCBcXHUwMDI2dik7XFxuK1xcdGlmIChyZXMpXFxuK1xcdFxcdHJldHVybiByZXM7XFxuK1xcbitcXHR1ID0gdjtcXG4rXFx0dSBcXHUwMDI2PSB+bWFzaztcXG4rXFx0dSB8PSB2YWw7XFxuK1xcdGlmICh1ID09IHYpXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXG4rXFx0cmV0dXJuIHl0OTIxeF9yZWdfd3JpdGUocHJpdiwgcmVnLCB1KTtcXG4rfVxcbitcXG4raW50XFxuK3l0OTIxeF9yZWdzX3JlYWQoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgKnZhbHMsXFxuK1xcdFxcdCB1bnNpZ25lZCBpbnQgbnVtX3JlZ3MpXFxuK3tcXG4rXFx0aW50IHJlcztcXG4rXFxuK1xcdGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIFxcdTAwM2MgbnVtX3JlZ3M7IGkrKykge1xcbitcXHRcXHRyZXMgPSB5dDkyMXhfcmVnX3JlYWQocHJpdiwgcmVnICsgNCAqIGksIFxcdTAwMjZ2YWxzW2ldKTtcXG4rXFx0XFx0aWYgKHJlcylcXG4rXFx0XFx0XFx0cmV0dXJuIHJlcztcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK2ludFxcbit5dDkyMXhfcmVnc193cml0ZShzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIGNvbnN0IHUzMiAqdmFscyxcXG4rXFx0XFx0ICB1bnNpZ25lZCBpbnQgbnVtX3JlZ3MpXFxuK3tcXG4rXFx0aW50IHJlcztcXG4rXFxuK1xcdGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIFxcdTAwM2MgbnVtX3JlZ3M7IGkrKykge1xcbitcXHRcXHRyZXMgPSB5dDkyMXhfcmVnX3dyaXRlKHByaXYsIHJlZyArIDQgKiBpLCB2YWxzW2ldKTtcXG4rXFx0XFx0aWYgKHJlcylcXG4rXFx0XFx0XFx0cmV0dXJuIHJlcztcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK2ludFxcbit5dDkyMXhfcmVnc191cGRhdGVfYml0cyhzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIGNvbnN0IHUzMiAqbWFza3MsXFxuK1xcdFxcdFxcdGNvbnN0IHUzMiAqdmFscywgdW5zaWduZWQgaW50IG51bV9yZWdzKVxcbit7XFxuK1xcdGJvb2wgY2hhbmdlZCA9IGZhbHNlO1xcbitcXHR1MzIgdnNbNF07XFxuK1xcdGludCByZXM7XFxuK1xcbitcXHRpZiAoV0FSTl9PTl9PTkNFKG51bV9yZWdzIFxcdTAwM2UgQVJSQVlfU0laRSh2cykpKVxcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFxuK1xcdHJlcyA9IHl0OTIxeF9yZWdzX3JlYWQocHJpdiwgcmVnLCB2cywgbnVtX3JlZ3MpO1xcbitcXHRpZiAocmVzKVxcbitcXHRcXHRyZXR1cm4gcmVzO1xcbitcXG4rXFx0Zm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgXFx1MDAzYyBudW1fcmVnczsgaSsrKSB7XFxuK1xcdFxcdHUzMiB1ID0gdnNbaV07XFxuK1xcbitcXHRcXHR1IFxcdTAwMjY9IH5tYXNrc1tpXTtcXG4rXFx0XFx0dSB8PSB2YWxzW2ldO1xcbitcXHRcXHRpZiAodSAhPSB2c1tpXSlcXG4rXFx0XFx0XFx0Y2hhbmdlZCA9IHRydWU7XFxuK1xcbitcXHRcXHR2c1tpXSA9IHU7XFxuK1xcdH1cXG4rXFxuK1xcdGlmICghY2hhbmdlZClcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcbitcXHRyZXR1cm4geXQ5MjF4X3JlZ3Nfd3JpdGUocHJpdiwgcmVnLCB2cywgbnVtX3JlZ3MpO1xcbit9XFxuK1xcbitpbnRcXG4reXQ5MjF4X3JlZ3NfY2xlYXJfYml0cyhzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIGNvbnN0IHUzMiAqbWFza3MsXFxuK1xcdFxcdCAgICAgICB1bnNpZ25lZCBpbnQgbnVtX3JlZ3MpXFxuK3tcXG4rXFx0Ym9vbCBjaGFuZ2VkID0gZmFsc2U7XFxuK1xcdHUzMiB2c1s0XTtcXG4rXFx0aW50IHJlcztcXG4rXFxuK1xcdGlmIChXQVJOX09OX09OQ0UobnVtX3JlZ3MgXFx1MDAzZSBBUlJBWV9TSVpFKHZzKSkpXFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXG4rXFx0cmVzID0geXQ5MjF4X3JlZ3NfcmVhZChwcml2LCByZWcsIHZzLCBudW1fcmVncyk7XFxuK1xcdGlmIChyZXMpXFxuK1xcdFxcdHJldHVybiByZXM7XFxuK1xcbitcXHRmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSBcXHUwMDNjIG51bV9yZWdzOyBpKyspIHtcXG4rXFx0XFx0dTMyIHUgPSB2c1tpXTtcXG4rXFxuK1xcdFxcdHUgXFx1MDAyNj0gfm1hc2tzW2ldO1xcbitcXHRcXHRpZiAodSAhPSB2c1tpXSlcXG4rXFx0XFx0XFx0Y2hhbmdlZCA9IHRydWU7XFxuK1xcbitcXHRcXHR2c1tpXSA9IHU7XFxuK1xcdH1cXG4rXFxuK1xcdGlmICghY2hhbmdlZClcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcbitcXHRyZXR1cm4geXQ5MjF4X3JlZ3Nfd3JpdGUocHJpdiwgcmVnLCB2cywgbnVtX3JlZ3MpO1xcbit9XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vc21pLmggYi9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL3NtaS5oXFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcXG5pbmRleCAwMDAwMDAwMDAwMDAwLi4yOTk1ZTkxZjNiM2QxXFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vc21pLmhcXG5AQCAtMCwwICsxLDkyIEBAXFxuKy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9yLWxhdGVyICovXFxuKy8qXFxuKyAqIENvcHlyaWdodCAoYykgMjAyNiBEYXZpZCBZYW5nXFxuKyAqL1xcbitcXG4rI2lmbmRlZiBfWVRfU01JX0hcXG4rI2RlZmluZSBfWVRfU01JX0hcXG4rXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC90eXBlcy5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvd29yZHBhcnQuaFxcdTAwM2VcXG4rXFxuK3N0cnVjdCB5dDkyMXhfcHJpdjtcXG4rXFxuK2ludCB5dDkyMXhfcmVnX3JlYWQoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgKnZhbHApO1xcbitpbnQgeXQ5MjF4X3JlZ193cml0ZShzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiB2YWwpO1xcbitpbnQgeXQ5MjF4X3JlZ193YWl0KHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyIG1hc2ssIHUzMiAqdmFscCk7XFxuK2ludCB5dDkyMXhfcmVnX3VwZGF0ZV9iaXRzKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyIG1hc2ssXFxuK1xcdFxcdFxcdCAgIHUzMiB2YWwpO1xcbitcXG4rc3RhdGljIGlubGluZSBpbnRcXG4reXQ5MjF4X3JlZ19zZXRfYml0cyhzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiBtYXNrKVxcbit7XFxuK1xcdHJldHVybiB5dDkyMXhfcmVnX3VwZGF0ZV9iaXRzKHByaXYsIHJlZywgMCwgbWFzayk7XFxuK31cXG4rXFxuK3N0YXRpYyBpbmxpbmUgaW50XFxuK3l0OTIxeF9yZWdfY2xlYXJfYml0cyhzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiBtYXNrKVxcbit7XFxuK1xcdHJldHVybiB5dDkyMXhfcmVnX3VwZGF0ZV9iaXRzKHByaXYsIHJlZywgbWFzaywgMCk7XFxuK31cXG4rXFxuK3N0YXRpYyBpbmxpbmUgaW50XFxuK3l0OTIxeF9yZWdfdG9nZ2xlX2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgbWFzaywgYm9vbCBzZXQpXFxuK3tcXG4rXFx0cmV0dXJuIHl0OTIxeF9yZWdfdXBkYXRlX2JpdHMocHJpdiwgcmVnLCBtYXNrLCAhc2V0ID8gMCA6IG1hc2spO1xcbit9XFxuK1xcbisvKiBTb21lIG11bHRpLXdvcmQgcmVnaXN0ZXJzLCBsaWtlIFZMQU5uX0NUUkwsIHNob3VsZCBiZSB0cmVhdGVkIGFzIGEgc2luZ2xlXFxuKyAqIGxvbmcgcmVnaXN0ZXIuIE1vcmUgc3BlY2lmaWNhbGx5LCB3cml0ZXMgdG8gcGFydHMgb2YgaXRzIHdvcmRzIHdvbid0IGJlY29tZVxcbisgKiB2aXNpYmxlLCB1bnRpbCB0aGUgbGFzdCB3b3JkIGlzIHdyaXR0ZW4uXFxuKyAqXFxuKyAqIEhlcmUgd2UgcmVxdWlyZSBmdWxsIHJlYWQgYW5kIHdyaXRlIG9wZXJhdGlvbnMgb3ZlciB0aGVzZSByZWdpc3RlcnMgdG9cXG4rICogZWxpbWluYXRlIHBvdGVudGlhbCBpc3N1ZXMsIGFsdGhvdWdoIHBhcnRpYWwgcmVhZHMvd3JpdGVzIGFyZSBhbHNvIHBvc3NpYmxlLlxcbisgKi9cXG4rXFxuK3N0YXRpYyBpbmxpbmUgdm9pZCB1cGRhdGVfY3RybHNfdW5hbGlnbmVkKHUzMiAqbG8sIHUzMiAqaGksIHU2NCBtYXNrLCB1NjQgdmFsKVxcbit7XFxuK1xcdCpsbyBcXHUwMDI2PSB+bG93ZXJfMzJfYml0cyhtYXNrKTtcXG4rXFx0KmhpIFxcdTAwMjY9IH51cHBlcl8zMl9iaXRzKG1hc2spO1xcbitcXHQqbG8gfD0gbG93ZXJfMzJfYml0cyh2YWwpO1xcbitcXHQqaGkgfD0gdXBwZXJfMzJfYml0cyh2YWwpO1xcbit9XFxuK1xcbisvKiB5dDkyMXhfcmVnc18qKCkgYXJlIGV4cG9ydGVkIGZvciBsaW5rYWdlIG9ubHkuIERvIG5vdCB1c2UgdGhlbSBkaXJlY3RseS4gVXNlXFxuKyAqIHl0OTIxeF9yZWc2NF8qKCkgb3IgeXQ5MjF4X3JlZzk2XyooKSBpbnN0ZWFkLlxcbisgKi9cXG4rXFxuK2ludCB5dDkyMXhfcmVnc19yZWFkKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyICp2YWxzLFxcbitcXHRcXHQgICAgIHVuc2lnbmVkIGludCBudW1fcmVncyk7XFxuK2ludCB5dDkyMXhfcmVnc193cml0ZShzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIGNvbnN0IHUzMiAqdmFscyxcXG4rXFx0XFx0ICAgICAgdW5zaWduZWQgaW50IG51bV9yZWdzKTtcXG4raW50IHl0OTIxeF9yZWdzX3VwZGF0ZV9iaXRzKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgY29uc3QgdTMyICptYXNrcyxcXG4rXFx0XFx0XFx0ICAgIGNvbnN0IHUzMiAqdmFscywgdW5zaWduZWQgaW50IG51bV9yZWdzKTtcXG4raW50IHl0OTIxeF9yZWdzX2NsZWFyX2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCBjb25zdCB1MzIgKm1hc2tzLFxcbitcXHRcXHRcXHQgICB1bnNpZ25lZCBpbnQgbnVtX3JlZ3MpO1xcbitcXG4rc3RhdGljIGlubGluZSBpbnRcXG4reXQ5MjF4X3JlZzY0X3dyaXRlKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgY29uc3QgdTMyICp2YWxzKVxcbit7XFxuK1xcdHJldHVybiB5dDkyMXhfcmVnc193cml0ZShwcml2LCByZWcsIHZhbHMsIDIpO1xcbit9XFxuK1xcbitzdGF0aWMgaW5saW5lIGludFxcbit5dDkyMXhfcmVnNjRfdXBkYXRlX2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCBjb25zdCB1MzIgKm1hc2tzLFxcbitcXHRcXHRcXHQgY29uc3QgdTMyICp2YWxzKVxcbit7XFxuK1xcdHJldHVybiB5dDkyMXhfcmVnc191cGRhdGVfYml0cyhwcml2LCByZWcsIG1hc2tzLCB2YWxzLCAyKTtcXG4rfVxcbitcXG4rc3RhdGljIGlubGluZSBpbnRcXG4reXQ5MjF4X3JlZzY0X2NsZWFyX2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCBjb25zdCB1MzIgKm1hc2tzKVxcbit7XFxuK1xcdHJldHVybiB5dDkyMXhfcmVnc19jbGVhcl9iaXRzKHByaXYsIHJlZywgbWFza3MsIDIpO1xcbit9XFxuK1xcbitzdGF0aWMgaW5saW5lIGludFxcbit5dDkyMXhfcmVnOTZfd3JpdGUoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCBjb25zdCB1MzIgKnZhbHMpXFxuK3tcXG4rXFx0cmV0dXJuIHl0OTIxeF9yZWdzX3dyaXRlKHByaXYsIHJlZywgdmFscywgMyk7XFxuK31cXG4rXFxuKyNlbmRpZlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNlQyMDozOTowMi43MDY2NTIzNTdaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo1MDM5MTAzNzk5MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBMRUQgc3VwcG9ydCBmb3IgdGhlIE1vdG9yY29tbSBZVDkyMTUgZXRoZXJuZXQgc3dpdGNoIGNoaXAgKGEgRFNBIGRyaXZlcikuIFRoaXMgaXMgYSBoYXJkd2FyZS1zcGVjaWZpYyBkcml2ZXIgdGhhdCBjb21tdW5pY2F0ZXMgd2l0aCBhIHBoeXNpY2FsIGNoaXAgdmlhIE1ESU8uIFNpbmNlIHRoZXJlIGlzIG5vIHNvZnR3YXJlIGVtdWxhdGlvbiBmb3IgdGhpcyBzcGVjaWZpYyBzd2l0Y2ggY2hpcCBpbiBzdGFuZGFyZCBRRU1VL3ZpcnR1YWxpemVkIGVudmlyb25tZW50cywgdGhlIGRyaXZlciB3aWxsIGZhaWwgdG8gcHJvYmUgKGUuZy4sIGR1cmluZyBjaGlwIElEIGRldGVjdGlvbiksIGFuZCB0aGUgbmV3bHkgYWRkZWQgTEVEIHNldHVwIGNvZGUgd2lsbCBiZSB1bnJlYWNoYWJsZS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDI4NjA5ODNkM2Y0ZGUwMWY5ZmNlMzc2MGZmMzE5OTI5MTRhZDkxMDNcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU3VuIEF1ZyAxNiAyMDozODo1OSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvZHNhL21vdG9yY29tbSx5dDkyMXgueWFtbCBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvZHNhL21vdG9yY29tbSx5dDkyMXgueWFtbFxuaW5kZXggMzNhNjU1MmU0NmZjMC4uOTNiYTViMTgxMjA1YiAxMDA2NDRcbi0tLSBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvZHNhL21vdG9yY29tbSx5dDkyMXgueWFtbFxuKysrIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9kc2EvbW90b3Jjb21tLHl0OTIxeC55YW1sXG5AQCAtMjEsNiArMjEsOSBAQCBkZXNjcmlwdGlvbjogfFxuIFxuICAgQW55IHBvcnQgY2FuIGJlIHVzZWQgYXMgdGhlIENQVSBwb3J0LlxuIFxuKyAgRWFjaCBwb3J0IGhhcyBhdCBtb3N0IDMgTEVEcyBjb25uZWN0ZWQgYW5kIGNhbiBiZSBkZWNsYXJlZCB1c2luZyB0aGUgc3RhbmRhcmRcbisgIExFRHMgc3RydWN0dXJlLlxuK1xuIHByb3BlcnRpZXM6XG4gICBjb21wYXRpYmxlOlxuICAgICBjb25zdDogbW90b3Jjb21tLHl0OTIxNVxuQEAgLTU5LDYgKzYyLDcgQEAgdW5ldmFsdWF0ZWRQcm9wZXJ0aWVzOiBmYWxzZVxuIGV4YW1wbGVzOlxuICAgLSB8XG4gICAgICNpbmNsdWRlIFx1MDAzY2R0LWJpbmRpbmdzL2dwaW8vZ3Bpby5oXHUwMDNlXG4rICAgICNpbmNsdWRlIFx1MDAzY2R0LWJpbmRpbmdzL2xlZHMvY29tbW9uLmhcdTAwM2VcbiBcbiAgICAgbWRpbyB7XG4gICAgICAgICAjYWRkcmVzcy1jZWxscyA9IFx1MDAzYzFcdTAwM2U7XG5AQCAtMTEzLDYgKzExNywyNSBAQCBleGFtcGxlczpcbiAgICAgICAgICAgICAgICAgICAgIGxhYmVsID0gXCJsYW4xXCI7XG4gICAgICAgICAgICAgICAgICAgICBwaHktbW9kZSA9IFwiaW50ZXJuYWxcIjtcbiAgICAgICAgICAgICAgICAgICAgIHBoeS1oYW5kbGUgPSBcdTAwM2NcdTAwMjZzd19waHkwXHUwMDNlO1xuK1xuKyAgICAgICAgICAgICAgICAgICAgbGVkcyB7XG4rICAgICAgICAgICAgICAgICAgICAgICAgI2FkZHJlc3MtY2VsbHMgPSBcdTAwM2MxXHUwMDNlO1xuKyAgICAgICAgICAgICAgICAgICAgICAgICNzaXplLWNlbGxzID0gXHUwMDNjMFx1MDAzZTtcbitcbisgICAgICAgICAgICAgICAgICAgICAgICBsZWRAMCB7XG4rICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZyA9IFx1MDAzYzBcdTAwM2U7XG4rICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yID0gXHUwMDNjTEVEX0NPTE9SX0lEX1dISVRFXHUwMDNlO1xuKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiA9IExFRF9GVU5DVElPTl9MQU47XG4rICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQtc3RhdGUgPSBcImtlZXBcIjtcbisgICAgICAgICAgICAgICAgICAgICAgICB9O1xuK1xuKyAgICAgICAgICAgICAgICAgICAgICAgIGxlZEAxIHtcbisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVnID0gXHUwMDNjMVx1MDAzZTtcbisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3IgPSBcdTAwM2NMRURfQ09MT1JfSURfQU1CRVJcdTAwM2U7XG4rICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uID0gTEVEX0ZVTkNUSU9OX0xBTjtcbisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdC1zdGF0ZSA9IFwia2VlcFwiO1xuKyAgICAgICAgICAgICAgICAgICAgICAgIH07XG4rICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICB9O1xuIFxuICAgICAgICAgICAgICAgICBldGhlcm5ldC1wb3J0QDEge1xuZGlmZiAtLWdpdCBhL01BSU5UQUlORVJTIGIvTUFJTlRBSU5FUlNcbmluZGV4IDk5MTQ2MDA1MGRhNzQuLjU1Y2M1YWMwZTg2ZjAgMTAwNjQ0XG4tLS0gYS9NQUlOVEFJTkVSU1xuKysrIGIvTUFJTlRBSU5FUlNcbkBAIC0xODI1Niw3ICsxODI1Niw3IEBAIE06XHREYXZpZCBZYW5nIFx1MDAzY21teWFuZ2ZsQGdtYWlsLmNvbVx1MDAzZVxuIEw6XHRuZXRkZXZAdmdlci5rZXJuZWwub3JnXG4gUzpcdE1haW50YWluZWRcbiBGOlx0RG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9kc2EvbW90b3Jjb21tLHl0OTIxeC55YW1sXG4tRjpcdGRyaXZlcnMvbmV0L2RzYS95dDkyMXguKlxuK0Y6XHRkcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL1xuIEY6XHRuZXQvZHNhL3RhZ195dDkyMXguY1xuIFxuIE1PWEEgU01BUlRJTy9JTkRVU1RJTy9JTlRFTExJTyBTRVJJQUwgQ0FSRFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS9LY29uZmlnIGIvZHJpdmVycy9uZXQvZHNhL0tjb25maWdcbmluZGV4IDRhYjU2N2M1YmJhZmMuLjk4ZTliYmU0N2RlN2IgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9kc2EvS2NvbmZpZ1xuKysrIGIvZHJpdmVycy9uZXQvZHNhL0tjb25maWdcbkBAIC03Miw2ICs3Miw4IEBAIGNvbmZpZyBORVRfRFNBX01WODhFNjA2MFxuIFxuIHNvdXJjZSBcImRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAvS2NvbmZpZ1wiXG4gXG4rc291cmNlIFwiZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9LY29uZmlnXCJcbitcbiBzb3VyY2UgXCJkcml2ZXJzL25ldC9kc2EvbXY4OGU2eHh4L0tjb25maWdcIlxuIFxuIHNvdXJjZSBcImRyaXZlcnMvbmV0L2RzYS9teGw4NjJ4eC9LY29uZmlnXCJcbkBAIC0xNTgsMTIgKzE2MCw0IEBAIGNvbmZpZyBORVRfRFNBX1ZJVEVTU0VfVlNDNzNYWF9QTEFURk9STVxuIFx0ICBUaGlzIGVuYWJsZXMgc3VwcG9ydCBmb3IgdGhlIFZpdGVzc2UgVlNDNzM4NSwgVlNDNzM4OCwgVlNDNzM5NVxuIFx0ICBhbmQgVlNDNzM5OCBTcGFyWCBpbnRlZ3JhdGVkIGV0aGVybmV0IHN3aXRjaGVzLCBjb25uZWN0ZWQgb3ZlclxuIFx0ICBhIENQVS1hdHRhY2hlZCBhZGRyZXNzIGJ1cyBhbmQgd29yayBpbiBtZW1vcnktbWFwcGVkIEkvTyBtb2RlLlxuLVxuLWNvbmZpZyBORVRfRFNBX1lUOTIxWFxuLVx0dHJpc3RhdGUgXCJNb3RvcmNvbW0gWVQ5MjE1IGV0aGVybmV0IHN3aXRjaCBjaGlwIHN1cHBvcnRcIlxuLVx0c2VsZWN0IE5FVF9EU0FfVEFHX1lUOTIxWFxuLVx0c2VsZWN0IE5FVF9JRUVFODAyMVFfSEVMUEVSUyBpZiBEQ0Jcbi1cdGhlbHBcbi1cdCAgVGhpcyBlbmFibGVzIHN1cHBvcnQgZm9yIHRoZSBNb3RvcmNvbW0gWVQ5MjE1IGV0aGVybmV0IHN3aXRjaFxuLVx0ICBjaGlwLlxuIGVuZG1lbnVcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EvTWFrZWZpbGUgYi9kcml2ZXJzL25ldC9kc2EvTWFrZWZpbGVcbmluZGV4IGQyOTc1YmFkZmZjMDkuLjEzODIyNWJhYTRkNTYgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9kc2EvTWFrZWZpbGVcbisrKyBiL2RyaXZlcnMvbmV0L2RzYS9NYWtlZmlsZVxuQEAgLTE0LDExICsxNCwxMSBAQCBvYmotJChDT05GSUdfTkVUX0RTQV9TTVNDX0xBTjkzMDNfTURJTykgKz0gbGFuOTMwM19tZGlvLm9cbiBvYmotJChDT05GSUdfTkVUX0RTQV9WSVRFU1NFX1ZTQzczWFgpICs9IHZpdGVzc2UtdnNjNzN4eC1jb3JlLm9cbiBvYmotJChDT05GSUdfTkVUX0RTQV9WSVRFU1NFX1ZTQzczWFhfUExBVEZPUk0pICs9IHZpdGVzc2UtdnNjNzN4eC1wbGF0Zm9ybS5vXG4gb2JqLSQoQ09ORklHX05FVF9EU0FfVklURVNTRV9WU0M3M1hYX1NQSSkgKz0gdml0ZXNzZS12c2M3M3h4LXNwaS5vXG4tb2JqLSQoQ09ORklHX05FVF9EU0FfWVQ5MjFYKSArPSB5dDkyMXgub1xuIG9iai15XHRcdFx0XHQrPSBiNTMvXG4gb2JqLXlcdFx0XHRcdCs9IGhpcnNjaG1hbm4vXG4gb2JqLXlcdFx0XHRcdCs9IGxhbnRpcS9cbiBvYmoteVx0XHRcdFx0Kz0gbWljcm9jaGlwL1xuK29iai15XHRcdFx0XHQrPSBtb3RvcmNvbW0vXG4gb2JqLXlcdFx0XHRcdCs9IG12ODhlNnh4eC9cbiBvYmoteVx0XHRcdFx0Kz0gbXhsODYyeHgvXG4gb2JqLXlcdFx0XHRcdCs9IG5ldGMvXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9LY29uZmlnIGIvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9LY29uZmlnXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uMzQzOGUwYjE0MzYxMVxuLS0tIC9kZXYvbnVsbFxuKysrIGIvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9LY29uZmlnXG5AQCAtMCwwICsxLDE3IEBAXG4rIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogSVNDXG4rY29uZmlnIE5FVF9EU0FfWVQ5MjFYXG4rXHR0cmlzdGF0ZSBcIk1vdG9yY29tbSBZVDkyMTUgZXRoZXJuZXQgc3dpdGNoIGNoaXAgc3VwcG9ydFwiXG4rXHRzZWxlY3QgTkVUX0RTQV9UQUdfWVQ5MjFYXG4rXHRzZWxlY3QgTkVUX0lFRUU4MDIxUV9IRUxQRVJTIGlmIERDQlxuK1x0aGVscFxuK1x0ICBUaGlzIGVuYWJsZXMgc3VwcG9ydCBmb3IgdGhlIE1vdG9yY29tbSBZVDkyMTUgZXRoZXJuZXQgc3dpdGNoXG4rXHQgIGNoaXAuXG4rXG4rY29uZmlnIE5FVF9EU0FfWVQ5MjFYX0xFRFNcbitcdGJvb2wgXCJMRUQgc3VwcG9ydCBmb3IgTW90b3Jjb21tIFlUOTIxNVwiXG4rXHRkZWZhdWx0IHlcbitcdGRlcGVuZHMgb24gTkVUX0RTQV9ZVDkyMVhcbitcdGRlcGVuZHMgb24gTEVEU19DTEFTUz15IHx8IExFRFNfQ0xBU1M9TkVUX0RTQV9ZVDkyMVhcbitcdGhlbHBcbitcdCAgVGhpcyBlbmFibGVzIHN1cHBvcnQgZm9yIGNvbnRyb2xsaW5nIHRoZSBMRURzIGF0dGFjaGVkIHRvIHRoZVxuK1x0ICBNb3RvcmNvbW0gWVQ5MjE1IHN3aXRjaCBjaGlwcy5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL01ha2VmaWxlIGIvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9NYWtlZmlsZVxubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLjVhNjNkYjAwMjlmZmVcbi0tLSAvZGV2L251bGxcbisrKyBiL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vTWFrZWZpbGVcbkBAIC0wLDAgKzEsNSBAQFxuKyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IElTQ1xuK29iai0kKENPTkZJR19ORVRfRFNBX1lUOTIxWCkgKz0geXQ5MjF4Lm9cbit5dDkyMXgtb2JqcyA6PSBjaGlwLm9cbit5dDkyMXgtJChDT05GSUdfTkVUX0RTQV9ZVDkyMVhfTEVEUykgKz0gbGVkcy5vXG4reXQ5MjF4LW9ianMgKz0gc21pLm9cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EveXQ5MjF4LmMgYi9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuY1xuc2ltaWxhcml0eSBpbmRleCA5NiVcbnJlbmFtZSBmcm9tIGRyaXZlcnMvbmV0L2RzYS95dDkyMXguY1xucmVuYW1lIHRvIGRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jXG5pbmRleCAxNTliMTY2MDZmNmNhLi41NTNlZmFjZDRmNWVlIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZHNhL3l0OTIxeC5jXG4rKysgYi9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuY1xuQEAgLTEzLDcgKzEzLDYgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9pZl9icmlkZ2UuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2lmX2hzci5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvaWZfdmxhbi5oXHUwMDNlXG4tI2luY2x1ZGUgXHUwMDNjbGludXgvaW9wb2xsLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9tZGlvLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9tb2R1bGUuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L29mLmhcdTAwM2VcbkBAIC0yNiw3ICsyNSw5IEBAXG4gI2luY2x1ZGUgXHUwMDNjbmV0L2llZWU4MDIxcS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbmV0L3BrdF9jbHMuaFx1MDAzZVxuIFxuLSNpbmNsdWRlIFwieXQ5MjF4LmhcIlxuKyNpbmNsdWRlIFwiY2hpcC5oXCJcbisjaW5jbHVkZSBcImxlZHMuaFwiXG4rI2luY2x1ZGUgXCJzbWkuaFwiXG4gXG4gc3RydWN0IHl0OTIxeF9taWJfZGVzYyB7XG4gXHR1bnNpZ25lZCBpbnQgc2l6ZTtcbkBAIC0xNTEsMTMgKzE1Miw4IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgeXQ5MjF4X2luZm8geXQ5MjF4X2luZm9zW10gPSB7XG4gXHR7fVxuIH07XG4gXG4tI2RlZmluZSBZVDkyMVhfTkFNRVx0XCJ5dDkyMXhcIlxuLVxuICNkZWZpbmUgWVQ5MjFYX1ZJRF9VTldBUkVcdDQwOTVcbiBcbi0jZGVmaW5lIFlUOTIxWF9QT0xMX1NMRUVQX1VTXHQxMDAwMFxuLSNkZWZpbmUgWVQ5MjFYX1BPTExfVElNRU9VVF9VU1x0MTAwMDAwXG4tXG4gLyogVGhlIGludGVydmFsIHNob3VsZCBiZSBzbWFsbCBlbm91Z2ggdG8gYXZvaWQgb3ZlcmZsb3cgb2YgMzJiaXQgTUlCcy5cbiAgKlxuICAqIFVudGlsIHdlIGNhbiByZWFkIE1JQnMgZnJvbSBzdGF0czY0IGNhbGwgZGlyZWN0bHkgKGkuZS4gc2xlZXBcbkBAIC0xOTYsMjA4ICsxOTIsNiBAQCBzdGF0aWMgdTMyIGV0aGFkZHJfbG8yX3RvX3UzMihjb25zdCB1bnNpZ25lZCBjaGFyICphZGRyKVxuIFx0cmV0dXJuIChhZGRyWzRdIFx1MDAzY1x1MDAzYyA4KSB8IGFkZHJbNV07XG4gfVxuIFxuLXN0YXRpYyBpbnQgeXQ5MjF4X3JlZ19yZWFkKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyICp2YWxwKVxuLXtcbi1cdFdBUk5fT04oIW11dGV4X2lzX2xvY2tlZChcdTAwMjZwcml2LVx1MDAzZXJlZ19sb2NrKSk7XG4tXG4tXHRyZXR1cm4gcHJpdi1cdTAwM2VyZWdfb3BzLVx1MDAzZXJlYWQocHJpdi1cdTAwM2VyZWdfY3R4LCByZWcsIHZhbHApO1xuLX1cbi1cbi1zdGF0aWMgaW50IHl0OTIxeF9yZWdfd3JpdGUoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgdmFsKVxuLXtcbi1cdFdBUk5fT04oIW11dGV4X2lzX2xvY2tlZChcdTAwMjZwcml2LVx1MDAzZXJlZ19sb2NrKSk7XG4tXG4tXHRyZXR1cm4gcHJpdi1cdTAwM2VyZWdfb3BzLVx1MDAzZXdyaXRlKHByaXYtXHUwMDNlcmVnX2N0eCwgcmVnLCB2YWwpO1xuLX1cbi1cbi1zdGF0aWMgaW50XG4teXQ5MjF4X3JlZ193YWl0KHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyIG1hc2ssIHUzMiAqdmFscClcbi17XG4tXHR1MzIgdmFsO1xuLVx0aW50IHJlcztcbi1cdGludCByZXQ7XG4tXG4tXHRyZXQgPSByZWFkX3BvbGxfdGltZW91dCh5dDkyMXhfcmVnX3JlYWQsIHJlcyxcbi1cdFx0XHRcdHJlcyB8fCAodmFsIFx1MDAyNiBtYXNrKSA9PSAqdmFscCxcbi1cdFx0XHRcdFlUOTIxWF9QT0xMX1NMRUVQX1VTLCBZVDkyMVhfUE9MTF9USU1FT1VUX1VTLFxuLVx0XHRcdFx0ZmFsc2UsIHByaXYsIHJlZywgXHUwMDI2dmFsKTtcbi1cdGlmIChyZXQpXG4tXHRcdHJldHVybiByZXQ7XG4tXHRpZiAocmVzKVxuLVx0XHRyZXR1cm4gcmVzO1xuLVxuLVx0KnZhbHAgPSB2YWw7XG4tXHRyZXR1cm4gMDtcbi19XG4tXG4tc3RhdGljIGludFxuLXl0OTIxeF9yZWdfdXBkYXRlX2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgbWFzaywgdTMyIHZhbClcbi17XG4tXHRpbnQgcmVzO1xuLVx0dTMyIHY7XG4tXHR1MzIgdTtcbi1cbi1cdHJlcyA9IHl0OTIxeF9yZWdfcmVhZChwcml2LCByZWcsIFx1MDAyNnYpO1xuLVx0aWYgKHJlcylcbi1cdFx0cmV0dXJuIHJlcztcbi1cbi1cdHUgPSB2O1xuLVx0dSBcdTAwMjY9IH5tYXNrO1xuLVx0dSB8PSB2YWw7XG4tXHRpZiAodSA9PSB2KVxuLVx0XHRyZXR1cm4gMDtcbi1cbi1cdHJldHVybiB5dDkyMXhfcmVnX3dyaXRlKHByaXYsIHJlZywgdSk7XG4tfVxuLVxuLXN0YXRpYyBpbnQgeXQ5MjF4X3JlZ19zZXRfYml0cyhzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiBtYXNrKVxuLXtcbi1cdHJldHVybiB5dDkyMXhfcmVnX3VwZGF0ZV9iaXRzKHByaXYsIHJlZywgMCwgbWFzayk7XG4tfVxuLVxuLXN0YXRpYyBpbnQgeXQ5MjF4X3JlZ19jbGVhcl9iaXRzKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyIG1hc2spXG4te1xuLVx0cmV0dXJuIHl0OTIxeF9yZWdfdXBkYXRlX2JpdHMocHJpdiwgcmVnLCBtYXNrLCAwKTtcbi19XG4tXG4tc3RhdGljIGludFxuLXl0OTIxeF9yZWdfdG9nZ2xlX2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgbWFzaywgYm9vbCBzZXQpXG4te1xuLVx0cmV0dXJuIHl0OTIxeF9yZWdfdXBkYXRlX2JpdHMocHJpdiwgcmVnLCBtYXNrLCAhc2V0ID8gMCA6IG1hc2spO1xuLX1cbi1cbi0vKiBTb21lIG11bHRpLXdvcmQgcmVnaXN0ZXJzLCBsaWtlIFZMQU5uX0NUUkwsIHNob3VsZCBiZSB0cmVhdGVkIGFzIGEgc2luZ2xlXG4tICogbG9uZyByZWdpc3Rlci4gTW9yZSBzcGVjaWZpY2FsbHksIHdyaXRlcyB0byBwYXJ0cyBvZiBpdHMgd29yZHMgd29uJ3QgYmVjb21lXG4tICogdmlzaWJsZSwgdW50aWwgdGhlIGxhc3Qgd29yZCBpcyB3cml0dGVuLlxuLSAqXG4tICogSGVyZSB3ZSByZXF1aXJlIGZ1bGwgcmVhZCBhbmQgd3JpdGUgb3BlcmF0aW9ucyBvdmVyIHRoZXNlIHJlZ2lzdGVycyB0b1xuLSAqIGVsaW1pbmF0ZSBwb3RlbnRpYWwgaXNzdWVzLCBhbHRob3VnaCBwYXJ0aWFsIHJlYWRzL3dyaXRlcyBhcmUgYWxzbyBwb3NzaWJsZS5cbi0gKi9cbi1cbi1zdGF0aWMgdm9pZCB1cGRhdGVfY3RybHNfdW5hbGlnbmVkKHUzMiAqbG8sIHUzMiAqaGksIHU2NCBtYXNrLCB1NjQgdmFsKVxuLXtcbi1cdCpsbyBcdTAwMjY9IH5sb3dlcl8zMl9iaXRzKG1hc2spO1xuLVx0KmhpIFx1MDAyNj0gfnVwcGVyXzMyX2JpdHMobWFzayk7XG4tXHQqbG8gfD0gbG93ZXJfMzJfYml0cyh2YWwpO1xuLVx0KmhpIHw9IHVwcGVyXzMyX2JpdHModmFsKTtcbi19XG4tXG4tc3RhdGljIGludFxuLXl0OTIxeF9yZWdzX3JlYWQoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgKnZhbHMsXG4tXHRcdCB1bnNpZ25lZCBpbnQgbnVtX3JlZ3MpXG4te1xuLVx0aW50IHJlcztcbi1cbi1cdGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIFx1MDAzYyBudW1fcmVnczsgaSsrKSB7XG4tXHRcdHJlcyA9IHl0OTIxeF9yZWdfcmVhZChwcml2LCByZWcgKyA0ICogaSwgXHUwMDI2dmFsc1tpXSk7XG4tXHRcdGlmIChyZXMpXG4tXHRcdFx0cmV0dXJuIHJlcztcbi1cdH1cbi1cbi1cdHJldHVybiAwO1xuLX1cbi1cbi1zdGF0aWMgaW50XG4teXQ5MjF4X3JlZ3Nfd3JpdGUoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCBjb25zdCB1MzIgKnZhbHMsXG4tXHRcdCAgdW5zaWduZWQgaW50IG51bV9yZWdzKVxuLXtcbi1cdGludCByZXM7XG4tXG4tXHRmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSBcdTAwM2MgbnVtX3JlZ3M7IGkrKykge1xuLVx0XHRyZXMgPSB5dDkyMXhfcmVnX3dyaXRlKHByaXYsIHJlZyArIDQgKiBpLCB2YWxzW2ldKTtcbi1cdFx0aWYgKHJlcylcbi1cdFx0XHRyZXR1cm4gcmVzO1xuLVx0fVxuLVxuLVx0cmV0dXJuIDA7XG4tfVxuLVxuLXN0YXRpYyBpbnRcbi15dDkyMXhfcmVnc191cGRhdGVfYml0cyhzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIGNvbnN0IHUzMiAqbWFza3MsXG4tXHRcdFx0Y29uc3QgdTMyICp2YWxzLCB1bnNpZ25lZCBpbnQgbnVtX3JlZ3MpXG4te1xuLVx0Ym9vbCBjaGFuZ2VkID0gZmFsc2U7XG4tXHR1MzIgdnNbNF07XG4tXHRpbnQgcmVzO1xuLVxuLVx0QlVJTERfQlVHX09OKG51bV9yZWdzIFx1MDAzZSBBUlJBWV9TSVpFKHZzKSk7XG4tXG4tXHRyZXMgPSB5dDkyMXhfcmVnc19yZWFkKHByaXYsIHJlZywgdnMsIG51bV9yZWdzKTtcbi1cdGlmIChyZXMpXG4tXHRcdHJldHVybiByZXM7XG4tXG4tXHRmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSBcdTAwM2MgbnVtX3JlZ3M7IGkrKykge1xuLVx0XHR1MzIgdSA9IHZzW2ldO1xuLVxuLVx0XHR1IFx1MDAyNj0gfm1hc2tzW2ldO1xuLVx0XHR1IHw9IHZhbHNbaV07XG4tXHRcdGlmICh1ICE9IHZzW2ldKVxuLVx0XHRcdGNoYW5nZWQgPSB0cnVlO1xuLVxuLVx0XHR2c1tpXSA9IHU7XG4tXHR9XG4tXG4tXHRpZiAoIWNoYW5nZWQpXG4tXHRcdHJldHVybiAwO1xuLVxuLVx0cmV0dXJuIHl0OTIxeF9yZWdzX3dyaXRlKHByaXYsIHJlZywgdnMsIG51bV9yZWdzKTtcbi19XG4tXG4tc3RhdGljIGludFxuLXl0OTIxeF9yZWdzX2NsZWFyX2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCBjb25zdCB1MzIgKm1hc2tzLFxuLVx0XHQgICAgICAgdW5zaWduZWQgaW50IG51bV9yZWdzKVxuLXtcbi1cdGJvb2wgY2hhbmdlZCA9IGZhbHNlO1xuLVx0dTMyIHZzWzRdO1xuLVx0aW50IHJlcztcbi1cbi1cdEJVSUxEX0JVR19PTihudW1fcmVncyBcdTAwM2UgQVJSQVlfU0laRSh2cykpO1xuLVxuLVx0cmVzID0geXQ5MjF4X3JlZ3NfcmVhZChwcml2LCByZWcsIHZzLCBudW1fcmVncyk7XG4tXHRpZiAocmVzKVxuLVx0XHRyZXR1cm4gcmVzO1xuLVxuLVx0Zm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgXHUwMDNjIG51bV9yZWdzOyBpKyspIHtcbi1cdFx0dTMyIHUgPSB2c1tpXTtcbi1cbi1cdFx0dSBcdTAwMjY9IH5tYXNrc1tpXTtcbi1cdFx0aWYgKHUgIT0gdnNbaV0pXG4tXHRcdFx0Y2hhbmdlZCA9IHRydWU7XG4tXG4tXHRcdHZzW2ldID0gdTtcbi1cdH1cbi1cbi1cdGlmICghY2hhbmdlZClcbi1cdFx0cmV0dXJuIDA7XG4tXG4tXHRyZXR1cm4geXQ5MjF4X3JlZ3Nfd3JpdGUocHJpdiwgcmVnLCB2cywgbnVtX3JlZ3MpO1xuLX1cbi1cbi1zdGF0aWMgaW50XG4teXQ5MjF4X3JlZzY0X3dyaXRlKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgY29uc3QgdTMyICp2YWxzKVxuLXtcbi1cdHJldHVybiB5dDkyMXhfcmVnc193cml0ZShwcml2LCByZWcsIHZhbHMsIDIpO1xuLX1cbi1cbi1zdGF0aWMgaW50XG4teXQ5MjF4X3JlZzY0X3VwZGF0ZV9iaXRzKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgY29uc3QgdTMyICptYXNrcyxcbi1cdFx0XHQgY29uc3QgdTMyICp2YWxzKVxuLXtcbi1cdHJldHVybiB5dDkyMXhfcmVnc191cGRhdGVfYml0cyhwcml2LCByZWcsIG1hc2tzLCB2YWxzLCAyKTtcbi19XG4tXG4tc3RhdGljIGludFxuLXl0OTIxeF9yZWc2NF9jbGVhcl9iaXRzKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgY29uc3QgdTMyICptYXNrcylcbi17XG4tXHRyZXR1cm4geXQ5MjF4X3JlZ3NfY2xlYXJfYml0cyhwcml2LCByZWcsIG1hc2tzLCAyKTtcbi19XG4tXG4tc3RhdGljIGludFxuLXl0OTIxeF9yZWc5Nl93cml0ZShzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIGNvbnN0IHUzMiAqdmFscylcbi17XG4tXHRyZXR1cm4geXQ5MjF4X3JlZ3Nfd3JpdGUocHJpdiwgcmVnLCB2YWxzLCAzKTtcbi19XG4tXG4gc3RhdGljIGludCB5dDkyMXhfcmVnX21kaW9fcmVhZCh2b2lkICpjb250ZXh0LCB1MzIgcmVnLCB1MzIgKnZhbHApXG4ge1xuIFx0c3RydWN0IHl0OTIxeF9yZWdfbWRpbyAqbWRpbyA9IGNvbnRleHQ7XG5AQCAtNDc4Niw2ICs0NTgwLDEyIEBAIHN0YXRpYyBpbnQgeXQ5MjF4X2RzYV9zZXR1cChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpXG4gXHRpZiAocmVzKVxuIFx0XHRyZXR1cm4gcmVzO1xuIFxuKyNpZiBJU19FTkFCTEVEKENPTkZJR19ORVRfRFNBX1lUOTIxWF9MRURTKVxuK1x0cmVzID0geXQ5MjF4X2xlZHNfc2V0dXAocHJpdik7XG4rXHRpZiAocmVzKVxuK1x0XHRkZXZfd2FybihkZXYsIFwiRmFpbGVkIHRvIHNldHVwIExFRHM6ICVkXFxuXCIsIHJlcyk7XG4rI2VuZGlmXG4rXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG5AQCAtNDg4Niw2ICs0Njg2LDEwIEBAIHN0YXRpYyB2b2lkIHl0OTIxeF9tZGlvX3JlbW92ZShzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYpXG4gXHRpZiAoIXByaXYpXG4gXHRcdHJldHVybjtcbiBcbisjaWYgSVNfRU5BQkxFRChDT05GSUdfTkVUX0RTQV9ZVDkyMVhfTEVEUylcbitcdHl0OTIxeF9sZWRzX3JlbW92ZShwcml2KTtcbisjZW5kaWZcbitcbiBcdGZvciAoc2l6ZV90IGkgPSBBUlJBWV9TSVpFKHByaXYtXHUwMDNlcG9ydHMpOyBpLS0gXHUwMDNlIDA7ICkge1xuIFx0XHRzdHJ1Y3QgeXQ5MjF4X3BvcnQgKnBwID0gXHUwMDI2cHJpdi1cdTAwM2Vwb3J0c1tpXTtcbiBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EveXQ5MjF4LmggYi9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuaFxuc2ltaWxhcml0eSBpbmRleCA5OSVcbnJlbmFtZSBmcm9tIGRyaXZlcnMvbmV0L2RzYS95dDkyMXguaFxucmVuYW1lIHRvIGRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5oXG5pbmRleCA1ZjNiOTllMTg5YzQxLi5lNjgxNWNmOWNiM2NkIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZHNhL3l0OTIxeC5oXG4rKysgYi9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuaFxuQEAgLTg1MCw5ICs4NTAsMTQgQEAgZW51bSB5dDkyMXhfZmRiX2VudHJ5X3N0YXR1cyB7XG4gI2RlZmluZSBZVDkyMVhfQUNMX05VTVx0XHQoWVQ5MjFYX0FDTF9CTEtfTlVNICogWVQ5MjFYX0FDTF9FTlRfUEVSX0JMSylcbiAjZGVmaW5lIFlUOTIxWF9VREZfTlVNXHRcdDhcbiBcbisjZGVmaW5lIFlUOTIxWF9MRURfR1JPVVBfTlVNXHQzXG4rI2RlZmluZSBZVDkyMVhfTEVEX1BPUlRfTlVNXHQxMFxuK1xuIC8qIDggaW50ZXJuYWwgKyAyIGV4dGVybmFsICsgMSBtY3UgKi9cbiAjZGVmaW5lIFlUOTIxWF9QT1JUX05VTVx0XHRcdDExXG4gXG4rI2RlZmluZSBZVDkyMVhfTkFNRVx0XCJ5dDkyMXhcIlxuK1xuICNkZWZpbmUgeXQ5MjF4X3BvcnRfaXNfaW50ZXJuYWwocG9ydCkgKChwb3J0KSBcdTAwM2MgOClcbiAjZGVmaW5lIHl0OTIxeF9wb3J0X2lzX2V4dGVybmFsKHBvcnQpICgocG9ydCkgPT0gOCB8fCAocG9ydCkgPT0gOSlcbiBcbkBAIC05MzgsNiArOTQzLDEzIEBAIHN0cnVjdCB5dDkyMXhfcG9ydCB7XG4gXHRzdHJ1Y3QgeXQ5MjF4X21pYiBtaWI7XG4gXHR1NjQgcnhfZnJhbWVzO1xuIFx0dTY0IHR4X2ZyYW1lcztcbitcbisjaWYgSVNfRU5BQkxFRChDT05GSUdfTkVUX0RTQV9ZVDkyMVhfTEVEUylcbitcdHVuc2lnbmVkIGNoYXIgbGVkX2R1dHk7XG4rXHR1bnNpZ25lZCBzaG9ydCBsZWRfY3ljbGU7XG4rXG4rXHRzdHJ1Y3QgeXQ5MjF4X2xlZCAqbGVkc1tZVDkyMVhfTEVEX0dST1VQX05VTV07XG4rI2VuZGlmXG4gfTtcbiBcbiBzdHJ1Y3QgeXQ5MjF4X3JlZ19vcHMge1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vbGVkcy5jIGIvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9sZWRzLmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwLi5lN2VmMGVmODBhMjY2XG4tLS0gL2Rldi9udWxsXG4rKysgYi9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2xlZHMuY1xuQEAgLTAsMCArMSw2NTQgQEBcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vci1sYXRlclxuKy8qXG4rICogQ29weXJpZ2h0IChjKSAyMDI2IERhdmlkIFlhbmdcbisgKi9cbitcbisjaW5jbHVkZSBcdTAwM2NsaW51eC91bGVkcy5oXHUwMDNlXG4rXG4rI2luY2x1ZGUgXCJjaGlwLmhcIlxuKyNpbmNsdWRlIFwibGVkcy5oXCJcbisjaW5jbHVkZSBcInNtaS5oXCJcbitcbisjZGVmaW5lIHRvX3l0OTIxeF9sZWQobGVkX2NkZXYpIFxcXG4rXHRjb250YWluZXJfb2ZfY29uc3QoKGxlZF9jZGV2KSwgc3RydWN0IHl0OTIxeF9sZWQsIGNkZXYpXG4rI2RlZmluZSB0b195dDkyMXhfcG9ydChsZWQpICgobGVkKS1cdTAwM2Vwb3J0KVxuKyNkZWZpbmUgdG9feXQ5MjF4X3ByaXYocHApIFxcXG4rXHRjb250YWluZXJfb2ZfY29uc3QoKHBwKSwgc3RydWN0IHl0OTIxeF9wcml2LCBwb3J0c1socHApLVx1MDAzZWluZGV4XSlcbisjZGVmaW5lIHRvX2RldmljZShwcml2KSAoKHByaXYpLVx1MDAzZWRzLmRldilcbitcbitzdGF0aWMgdTMyIHl0OTIxeF9sZWRfcmVnYWRkcihzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIGludCBwb3J0LCBpbnQgZ3JvdXApXG4re1xuK1x0c3dpdGNoIChncm91cCkge1xuK1x0Y2FzZSAwOlxuK1x0ZGVmYXVsdDpcbitcdFx0cmV0dXJuIFlUOTIxWF9MRUQwX1BPUlRuKHBvcnQpO1xuK1x0Y2FzZSAxOlxuK1x0XHRyZXR1cm4gWVQ5MjFYX0xFRDFfUE9SVG4ocG9ydCk7XG4rXHRjYXNlIDI6XG4rXHRcdHJldHVybiBZVDkyMVhfTEVEMl9QT1JUbihwb3J0KTtcbitcdH1cbit9XG4rXG4rc3RhdGljIGludFxuK3l0OTIxeF9sZWRfZm9yY2VfZ2V0KHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgaW50IHBvcnQsIGludCBncm91cCwgYm9vbCAqb25wKVxuK3tcbitcdHUzMiB2YWw7XG4rXHRpbnQgcmVzO1xuK1xuK1x0cmVzID0geXQ5MjF4X3JlZ19yZWFkKHByaXYsIFlUOTIxWF9MRUQyX1BPUlRuKHBvcnQpLCBcdTAwMjZ2YWwpO1xuK1x0aWYgKHJlcylcbitcdFx0cmV0dXJuIHJlcztcbitcbitcdCpvbnAgPSAodmFsIFx1MDAyNiBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbl9NKGdyb3VwKSkgPT1cbitcdCAgICAgICBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbl9PTihncm91cCk7XG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rc3RhdGljIGludFxuK3l0OTIxeF9sZWRfZm9yY2Vfc2V0KHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgaW50IHBvcnQsIGludCBncm91cCwgYm9vbCBvbilcbit7XG4rXHRzdHJ1Y3QgeXQ5MjF4X3BvcnQgKnBwID0gXHUwMDI2cHJpdi1cdTAwM2Vwb3J0c1twb3J0XTtcbitcdHN0cnVjdCB5dDkyMXhfbGVkICpsZWQgPSBwcC1cdTAwM2VsZWRzW2dyb3VwXTtcbitcdHUzMiBjdHJsO1xuK1x0dTMyIG1hc2s7XG4rXG4rXHRsZWQtXHUwMDNldXNlX2N5Y2xlID0gZmFsc2U7XG4rXHRsZWQtXHUwMDNldXNlX2R1dHkgPSBmYWxzZTtcbitcbitcdG1hc2sgPSBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbl9NKGdyb3VwKTtcbitcdGN0cmwgPSBvbiA/IFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuX09OKGdyb3VwKSA6XG4rXHQgICAgICAgWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW5fT0ZGKGdyb3VwKTtcbitcdHJldHVybiB5dDkyMXhfcmVnX3VwZGF0ZV9iaXRzKHByaXYsIFlUOTIxWF9MRUQyX1BPUlRuKHBvcnQpLCBtYXNrLFxuK1x0XHRcdFx0ICAgICAgY3RybCk7XG4rfVxuK1xuK3N0YXRpYyBpbnRcbit5dDkyMXhfbGVkX2JsaW5rX3NlbGVjdChjb25zdCBzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHVuc2lnbmVkIGxvbmcgb24sXG4rXHRcdFx0dW5zaWduZWQgbG9uZyBvZmYsIHVuc2lnbmVkIHNob3J0ICpjeWNsZXAsXG4rXHRcdFx0dW5zaWduZWQgY2hhciAqZHV0eXApXG4re1xuK1x0c3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgZHV0eXNbXSA9IHtcbitcdFx0WVQ5MjFYX0xFRF9EVVRZKDEsIDYpLFxuK1x0XHRZVDkyMVhfTEVEX0RVVFkoMSwgNCksXG4rXHRcdFlUOTIxWF9MRURfRFVUWSgxLCAzKSxcbitcdFx0WVQ5MjFYX0xFRF9EVVRZKDEsIDIpLFxuK1x0fTtcbitcdHVuc2lnbmVkIGludCBjeWNsZV91cHBlcjtcbitcdHVuc2lnbmVkIGludCBjeWNsZV9yZXE7XG4rXHR1bnNpZ25lZCBpbnQgZHV0eV9yZXE7XG4rXHR1bnNpZ25lZCBpbnQgY3ljbGU7XG4rXHR1bnNpZ25lZCBpbnQgZHV0eTtcbitcbitcdGN5Y2xlID0gWVQ5MjFYX0xFRF9CTElOS19NQVg7XG4rXHRjeWNsZV91cHBlciA9IGN5Y2xlICogMTE1ODUgLyA4MTkyICsgMTsgIC8qIE1fU1FSVDIgKiBjeWNsZSAqL1xuK1x0aWYgKGNoZWNrX2FkZF9vdmVyZmxvdyhvbiwgb2ZmLCBcdTAwMjZjeWNsZV9yZXEpIHx8IGN5Y2xlX3JlcSBcdTAwM2U9IGN5Y2xlX3VwcGVyKVxuK1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4rXG4rXHRmb3IgKDsgY3ljbGUgXHUwMDNlIFlUOTIxWF9MRURfQkxJTktfTUlOOyBjeWNsZV91cHBlciBcdTAwM2VcdTAwM2U9IDEsIGN5Y2xlIFx1MDAzZVx1MDAzZT0gMSlcbitcdFx0aWYgKGN5Y2xlX3JlcSBcdTAwM2U9IGN5Y2xlX3VwcGVyIFx1MDAzZVx1MDAzZSAxKVxuK1x0XHRcdGJyZWFrO1xuK1x0KmN5Y2xlcCA9IGN5Y2xlO1xuK1xuK1x0ZHV0eV9yZXEgPSBESVZfUk9VTkRfQ0xPU0VTVChZVDkyMVhfTEVEX0RVVFlfREVOT00gKlxuK1x0XHRcdFx0ICAgICAob24gXHUwMDNlIG9mZiA/IG9mZiA6IG9uKSwgY3ljbGVfcmVxKTtcbitcdGZvciAodW5zaWduZWQgaW50IGkgPSBBUlJBWV9TSVpFKGR1dHlzKSAtIDE7OyBpLS0pXG4rXHRcdGlmIChpID09IDAgfHwgZHV0eV9yZXEgXHUwMDNlPSAoZHV0eXNbaSAtIDFdICsgZHV0eXNbaV0pIC8gMikge1xuK1x0XHRcdGR1dHkgPSBkdXR5c1tpXTtcbitcdFx0XHRicmVhaztcbitcdFx0fVxuK1x0aWYgKG9uIFx1MDAzZSBvZmYpXG4rXHRcdGR1dHkgPSBZVDkyMVhfTEVEX0RVVFlfREVOT00gLSBkdXR5O1xuK1x0KmR1dHlwID0gZHV0eTtcbitcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgaW50XG4reXQ5MjF4X2xlZF9ibGlua19zZXQoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCBpbnQgcG9ydCwgaW50IGdyb3VwLFxuK1x0XHQgICAgIHVuc2lnbmVkIGxvbmcgKm9ucCwgdW5zaWduZWQgbG9uZyAqb2ZmcClcbit7XG4rXHRzdHJ1Y3QgeXQ5MjF4X3BvcnQgKnBwID0gXHUwMDI2cHJpdi1cdTAwM2Vwb3J0c1twb3J0XTtcbitcdHN0cnVjdCB5dDkyMXhfbGVkICpsZWQgPSBwcC1cdTAwM2VsZWRzW2dyb3VwXTtcbitcdHVuc2lnbmVkIHNob3J0IGN5Y2xlO1xuK1x0dW5zaWduZWQgY2hhciBkdXR5O1xuK1x0Ym9vbCB1c2VfY3ljbGU7XG4rXHR1MzIgY3RybDtcbitcdHUzMiBtYXNrO1xuK1x0dTMyIHZhbDtcbitcdGludCByZXM7XG4rXG4rXHRpZiAoISpvbnAgXHUwMDI2XHUwMDI2ICEqb2ZmcCkge1xuK1x0XHRjeWNsZSA9IFlUOTIxWF9MRURfQkxJTktfREVGO1xuK1x0XHRkdXR5ID0gWVQ5MjFYX0xFRF9EVVRZKDEsIDIpO1xuK1x0XHRmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSBcdTAwM2MgWVQ5MjFYX0xFRF9HUk9VUF9OVU07IGkrKylcbitcdFx0XHRpZiAoaSAhPSBncm91cCBcdTAwMjZcdTAwMjYgcHAtXHUwMDNlbGVkc1tpXSBcdTAwMjZcdTAwMjZcbitcdFx0XHQgICAgcHAtXHUwMDNlbGVkc1tpXS1cdTAwM2V1c2VfZHV0eSkge1xuK1x0XHRcdFx0ZHV0eSA9IHBwLVx1MDAzZWxlZF9kdXR5O1xuK1x0XHRcdFx0YnJlYWs7XG4rXHRcdFx0fVxuK1xuK1x0XHR1c2VfY3ljbGUgPSBmYWxzZTtcbitcdH0gZWxzZSB7XG4rXHRcdGJvb2wgY2hhbmdlX2N5Y2xlO1xuK1x0XHRib29sIGNoYW5nZV9kdXR5O1xuK1xuK1x0XHRyZXMgPSB5dDkyMXhfbGVkX2JsaW5rX3NlbGVjdChwcml2LCAqb25wLCAqb2ZmcCwgXHUwMDI2Y3ljbGUsIFx1MDAyNmR1dHkpO1xuK1x0XHRpZiAocmVzKVxuK1x0XHRcdHJldHVybiByZXM7XG4rXG4rXHRcdHVzZV9jeWNsZSA9IGN5Y2xlIFx1MDAzYyBZVDkyMVhfTEVEX0JMSU5LX0RFRjtcbitcdFx0Y2hhbmdlX2N5Y2xlID0gdXNlX2N5Y2xlIFx1MDAyNlx1MDAyNiBjeWNsZSAhPSBwcC1cdTAwM2VsZWRfY3ljbGU7XG4rXHRcdGNoYW5nZV9kdXR5ID0gZHV0eSAhPSBwcC1cdTAwM2VsZWRfZHV0eTtcbitcdFx0aWYgKGNoYW5nZV9jeWNsZSB8fCBjaGFuZ2VfZHV0eSlcbitcdFx0XHRmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSBcdTAwM2MgWVQ5MjFYX0xFRF9HUk9VUF9OVU07XG4rXHRcdFx0ICAgICBpKyspIHtcbitcdFx0XHRcdGlmIChpID09IGdyb3VwIHx8ICFwcC1cdTAwM2VsZWRzW2ldKVxuK1x0XHRcdFx0XHRjb250aW51ZTtcbitcdFx0XHRcdGlmICgoY2hhbmdlX2N5Y2xlIFx1MDAyNlx1MDAyNiBwcC1cdTAwM2VsZWRzW2ldLVx1MDAzZXVzZV9jeWNsZSkgfHxcbitcdFx0XHRcdCAgICAoY2hhbmdlX2R1dHkgXHUwMDI2XHUwMDI2IHBwLVx1MDAzZWxlZHNbaV0tXHUwMDNldXNlX2R1dHkpKVxuK1x0XHRcdFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4rXHRcdFx0fVxuK1x0fVxuK1xuK1x0LyogVGhlIGNoaXAgc2VlbXMgdG8gamFtIGEgd2hpbGUgaWYgY2hhbmdpbmcgZHV0eSBkaXJlY3RseSAqL1xuK1x0cmVzID0geXQ5MjF4X3JlZ19yZWFkKHByaXYsIFlUOTIxWF9MRUQyX1BPUlRuKHBvcnQpLCBcdTAwMjZ2YWwpO1xuK1x0aWYgKHJlcylcbitcdFx0cmV0dXJuIHJlcztcbitcbitcdGN0cmwgPSB2YWwgXHUwMDI2IH5ZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbl9NKGdyb3VwKTtcbitcdGN0cmwgfD0gWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW5fRE9OVENBUkUoZ3JvdXApO1xuK1x0aWYgKHZhbCAhPSBjdHJsKSB7XG4rXHRcdHJlcyA9IHl0OTIxeF9yZWdfd3JpdGUocHJpdiwgWVQ5MjFYX0xFRDJfUE9SVG4ocG9ydCksIGN0cmwpO1xuK1x0XHRpZiAocmVzKVxuK1x0XHRcdHJldHVybiByZXM7XG4rXHR9XG4rXG4rXHRtYXNrID0gWVQ5MjFYX0xFRDFfUE9SVF9CTElOS19EVVRZX00gfCBZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFlfQ09NUDtcbitcdHN3aXRjaCAoZHV0eSBcdTAwM2U9IFlUOTIxWF9MRURfRFVUWSgxLCAyKSA/IGR1dHkgOlxuK1x0XHRZVDkyMVhfTEVEX0RVVFlfREVOT00gLSBkdXR5KSB7XG4rXHRkZWZhdWx0OlxuK1x0XHRkdXR5ID0gWVQ5MjFYX0xFRF9EVVRZKDEsIDIpO1xuK1x0XHRmYWxsdGhyb3VnaDtcbitcdGNhc2UgWVQ5MjFYX0xFRF9EVVRZKDEsIDIpOlxuK1x0XHRjdHJsID0gWVQ5MjFYX0xFRDFfUE9SVF9CTElOS19EVVRZXzFfMjtcbitcdFx0YnJlYWs7XG4rXHRjYXNlIFlUOTIxWF9MRURfRFVUWSgyLCAzKTpcbitcdFx0Y3RybCA9IFlUOTIxWF9MRUQxX1BPUlRfQkxJTktfRFVUWV8yXzM7XG4rXHRcdGJyZWFrO1xuK1x0Y2FzZSBZVDkyMVhfTEVEX0RVVFkoMywgNCk6XG4rXHRcdGN0cmwgPSBZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFlfM180O1xuK1x0XHRicmVhaztcbitcdGNhc2UgWVQ5MjFYX0xFRF9EVVRZKDUsIDYpOlxuK1x0XHRjdHJsID0gWVQ5MjFYX0xFRDFfUE9SVF9CTElOS19EVVRZXzVfNjtcbitcdFx0YnJlYWs7XG4rXHR9XG4rXHRpZiAoZHV0eSBcdTAwM2MgWVQ5MjFYX0xFRF9EVVRZKDEsIDIpKVxuK1x0XHRjdHJsIHw9IFlUOTIxWF9MRUQxX1BPUlRfQkxJTktfRFVUWV9DT01QO1xuK1x0aWYgKHVzZV9jeWNsZSkge1xuK1x0XHRtYXNrIHw9IFlUOTIxWF9MRUQxX1BPUlRfT1RIRVJfQkxJTktfTTtcbitcdFx0Y3RybCB8PSBZVDkyMVhfTEVEMV9QT1JUX09USEVSX0JMSU5LKDkgLSBfX2ZscyhjeWNsZSkpO1xuK1x0fVxuK1x0cmVzID0geXQ5MjF4X3JlZ191cGRhdGVfYml0cyhwcml2LCBZVDkyMVhfTEVEMV9QT1JUbihwb3J0KSwgbWFzaywgY3RybCk7XG4rXHRpZiAocmVzKVxuK1x0XHRyZXR1cm4gcmVzO1xuK1xuK1x0Y3RybCA9IHZhbCBcdTAwMjYgfihZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbl9NKGdyb3VwKSB8XG4rXHRcdCAgICAgICBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFX0JMSU5Lbl9NKGdyb3VwKSk7XG4rXHRjdHJsIHw9IFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuX0JMSU5LKGdyb3VwKTtcbitcdGlmICh1c2VfY3ljbGUpXG4rXHRcdGN0cmwgfD0gWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRV9CTElOS25fT1RIRVIoZ3JvdXApO1xuK1x0ZWxzZVxuK1x0XHRjdHJsIHw9IFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VfQkxJTktuKGdyb3VwLCBfX2ZscyhjeWNsZSkgLSA5KTtcbitcdHJlcyA9IHl0OTIxeF9yZWdfd3JpdGUocHJpdiwgWVQ5MjFYX0xFRDJfUE9SVG4ocG9ydCksIGN0cmwpO1xuK1x0aWYgKHJlcylcbitcdFx0cmV0dXJuIHJlcztcbitcbitcdGxlZC1cdTAwM2V1c2VfY3ljbGUgPSB1c2VfY3ljbGU7XG4rXHRpZiAodXNlX2N5Y2xlKVxuK1x0XHRwcC1cdTAwM2VsZWRfY3ljbGUgPSBjeWNsZTtcbitcdGxlZC1cdTAwM2V1c2VfZHV0eSA9IHRydWU7XG4rXHRwcC1cdTAwM2VsZWRfZHV0eSA9IGR1dHk7XG4rXG4rXHQqb25wID0gRElWX1JPVU5EX0NMT1NFU1QoZHV0eSAqIGN5Y2xlLCBZVDkyMVhfTEVEX0RVVFlfREVOT00pO1xuK1x0Km9mZnAgPSBjeWNsZSAtICpvbnA7XG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rc3RydWN0IHl0OTIxeF9sZWRfdHJpZ2dlcl9tYXAge1xuK1x0dW5zaWduZWQgbG9uZyBmbGFncztcbitcdHUzMiBtYXNrO1xuK307XG4rXG4rc3RhdGljIGNvbnN0IHN0cnVjdCB5dDkyMXhfbGVkX3RyaWdnZXJfbWFwIHl0OTIxeF9sZWRfdHJpZ2dlcl9tYXBzW10gPSB7XG4rXHR7QklUKFRSSUdHRVJfTkVUREVWX0xJTkspLFxuK1x0IFlUOTIxWF9MRUR4X1BPUlRfQUNUX0RVUExFWF9IQUxGIHwgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfRFVQTEVYX0ZVTEx9LFxuK1x0e0JJVChUUklHR0VSX05FVERFVl9MSU5LXzEwKSwgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfMTBNfSxcbitcdHtCSVQoVFJJR0dFUl9ORVRERVZfTElOS18xMDApLCBZVDkyMVhfTEVEeF9QT1JUX0FDVF8xMDBNfSxcbitcdHtCSVQoVFJJR0dFUl9ORVRERVZfTElOS18xMDAwKSwgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfMTAwME19LFxuK1x0e0JJVChUUklHR0VSX05FVERFVl9IQUxGX0RVUExFWCksIFlUOTIxWF9MRUR4X1BPUlRfQUNUX0RVUExFWF9IQUxGfSxcbitcdHtCSVQoVFJJR0dFUl9ORVRERVZfRlVMTF9EVVBMRVgpLCBZVDkyMVhfTEVEeF9QT1JUX0FDVF9EVVBMRVhfRlVMTH0sXG4rXHR7QklUKFRSSUdHRVJfTkVUREVWX1RYKSwgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfVFhfQkxJTkt9LFxuK1x0e0JJVChUUklHR0VSX05FVERFVl9SWCksIFlUOTIxWF9MRUR4X1BPUlRfQUNUX1JYX0JMSU5LfSxcbitcdHtCSVQoVFJJR0dFUl9ORVRERVZfVFhfRVJSKSB8IEJJVChUUklHR0VSX05FVERFVl9SWF9FUlIpLFxuK1x0IFlUOTIxWF9MRUR4X1BPUlRfQUNUX0NPTExJU0lPTl9CTElOS30sXG4rfTtcbitcbitzdGF0aWMgYm9vbFxuK3l0OTIxeF9sZWRfdHJpZ2dlcl9pc19zdXBwb3J0ZWQoY29uc3Qgc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCBpbnQgcG9ydCxcbitcdFx0XHRcdGludCBncm91cCwgdW5zaWduZWQgbG9uZyBmbGFncylcbit7XG4rXHRpZiAoIWZsYWdzKVxuK1x0XHRyZXR1cm4gdHJ1ZTtcbitcbitcdGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIFx1MDAzYyBBUlJBWV9TSVpFKHl0OTIxeF9sZWRfdHJpZ2dlcl9tYXBzKTsgaSsrKSB7XG4rXHRcdGNvbnN0IHN0cnVjdCB5dDkyMXhfbGVkX3RyaWdnZXJfbWFwICptYXAgPSBcdTAwMjZ5dDkyMXhfbGVkX3RyaWdnZXJfbWFwc1tpXTtcbitcbitcdFx0aWYgKChmbGFncyBcdTAwMjYgbWFwLVx1MDAzZWZsYWdzKSA9PSBtYXAtXHUwMDNlZmxhZ3MpIHtcbitcdFx0XHRmbGFncyBcdTAwMjY9IH5tYXAtXHUwMDNlZmxhZ3M7XG4rXHRcdFx0aWYgKCFmbGFncylcbitcdFx0XHRcdHJldHVybiB0cnVlO1xuK1x0XHR9XG4rXHR9XG4rXG4rXHRyZXR1cm4gZmFsc2U7XG4rfVxuK1xuK3N0YXRpYyBpbnRcbit5dDkyMXhfbGVkX3RyaWdnZXJfZ2V0KHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgaW50IHBvcnQsIGludCBncm91cCxcbitcdFx0ICAgICAgIHVuc2lnbmVkIGxvbmcgKmZsYWdzcClcbit7XG4rXHR1MzIgYWRkcjtcbitcdHUzMiB2YWw7XG4rXHRpbnQgcmVzO1xuK1xuK1x0cmVzID0geXQ5MjF4X3JlZ19yZWFkKHByaXYsIFlUOTIxWF9MRUQyX1BPUlRuKHBvcnQpLCBcdTAwMjZ2YWwpO1xuK1x0aWYgKHJlcylcbitcdFx0cmV0dXJuIHJlcztcbitcbitcdGlmICgodmFsIFx1MDAyNiBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbl9NKGdyb3VwKSkgIT1cbitcdCAgICBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbl9ET05UQ0FSRShncm91cCkpIHtcbitcdFx0KmZsYWdzcCA9IDA7XG4rXHRcdHJldHVybiAwO1xuK1x0fVxuK1xuK1x0aWYgKGdyb3VwICE9IDIpIHtcbitcdFx0YWRkciA9IHl0OTIxeF9sZWRfcmVnYWRkcihwcml2LCBwb3J0LCBncm91cCk7XG4rXHRcdHJlcyA9IHl0OTIxeF9yZWdfcmVhZChwcml2LCBhZGRyLCBcdTAwMjZ2YWwpO1xuK1x0XHRpZiAocmVzKVxuK1x0XHRcdHJldHVybiByZXM7XG4rXHR9XG4rXG4rXHQqZmxhZ3NwID0gMDtcbitcdGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIFx1MDAzYyBBUlJBWV9TSVpFKHl0OTIxeF9sZWRfdHJpZ2dlcl9tYXBzKTsgaSsrKSB7XG4rXHRcdGNvbnN0IHN0cnVjdCB5dDkyMXhfbGVkX3RyaWdnZXJfbWFwICptYXAgPSBcdTAwMjZ5dDkyMXhfbGVkX3RyaWdnZXJfbWFwc1tpXTtcbitcbitcdFx0aWYgKCh2YWwgXHUwMDI2IG1hcC1cdTAwM2VtYXNrKSA9PSBtYXAtXHUwMDNlbWFzaylcbitcdFx0XHQqZmxhZ3NwIHw9IG1hcC1cdTAwM2VmbGFncztcbitcdH1cbitcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgaW50XG4reXQ5MjF4X2xlZF90cmlnZ2VyX3NldChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIGludCBwb3J0LCBpbnQgZ3JvdXAsXG4rXHRcdCAgICAgICB1bnNpZ25lZCBsb25nIGZsYWdzKVxuK3tcbitcdHN0cnVjdCB5dDkyMXhfcG9ydCAqcHAgPSBcdTAwMjZwcml2LVx1MDAzZXBvcnRzW3BvcnRdO1xuK1x0c3RydWN0IHl0OTIxeF9sZWQgKmxlZCA9IHBwLVx1MDAzZWxlZHNbZ3JvdXBdO1xuK1x0dTMyIGFkZHI7XG4rXHR1MzIgY3RybDtcbitcdHUzMiBtYXNrO1xuK1x0aW50IHJlcztcbitcbitcdGN0cmwgPSAwO1xuK1x0Zm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgXHUwMDNjIEFSUkFZX1NJWkUoeXQ5MjF4X2xlZF90cmlnZ2VyX21hcHMpOyBpKyspIHtcbitcdFx0Y29uc3Qgc3RydWN0IHl0OTIxeF9sZWRfdHJpZ2dlcl9tYXAgKm1hcCA9IFx1MDAyNnl0OTIxeF9sZWRfdHJpZ2dlcl9tYXBzW2ldO1xuK1xuK1x0XHRpZiAoKGZsYWdzIFx1MDAyNiBtYXAtXHUwMDNlZmxhZ3MpID09IG1hcC1cdTAwM2VmbGFncykge1xuK1x0XHRcdGZsYWdzIFx1MDAyNj0gfm1hcC1cdTAwM2VmbGFncztcbitcdFx0XHRjdHJsIHw9IG1hcC1cdTAwM2VtYXNrO1xuK1x0XHRcdGlmICghZmxhZ3MpXG4rXHRcdFx0XHRicmVhaztcbitcdFx0fVxuK1x0fVxuK1x0aWYgKGZsYWdzKVxuK1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4rXG4rXHRsZWQtXHUwMDNldXNlX2N5Y2xlID0gZmFsc2U7XG4rXHRsZWQtXHUwMDNldXNlX2R1dHkgPSBmYWxzZTtcbitcbitcdG1hc2sgPSAhZ3JvdXAgPyBZVDkyMVhfTEVEMF9QT1JUX0FDVF9NIDogWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfTTtcbitcdGlmIChncm91cCA9PSAyKSB7XG4rXHRcdG1hc2sgfD0gWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW5fTShncm91cCk7XG4rXHRcdGN0cmwgfD0gWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW5fRE9OVENBUkUoZ3JvdXApO1xuK1x0fVxuK1x0YWRkciA9IHl0OTIxeF9sZWRfcmVnYWRkcihwcml2LCBwb3J0LCBncm91cCk7XG4rXHRyZXMgPSB5dDkyMXhfcmVnX3VwZGF0ZV9iaXRzKHByaXYsIGFkZHIsIG1hc2ssIGN0cmwpO1xuK1x0aWYgKHJlcylcbitcdFx0cmV0dXJuIHJlcztcbitcbitcdGlmIChncm91cCAhPSAyKSB7XG4rXHRcdG1hc2sgPSBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbl9NKGdyb3VwKTtcbitcdFx0Y3RybCA9IFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuX0RPTlRDQVJFKGdyb3VwKTtcbitcdFx0cmVzID0geXQ5MjF4X3JlZ191cGRhdGVfYml0cyhwcml2LCBZVDkyMVhfTEVEMl9QT1JUbihwb3J0KSxcbitcdFx0XHRcdFx0ICAgICBtYXNrLCBjdHJsKTtcbitcdFx0aWYgKHJlcylcbitcdFx0XHRyZXR1cm4gcmVzO1xuK1x0fVxuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK3N0YXRpYyBpbnRcbit5dDkyMXhfY2xlZF9icmlnaHRuZXNzX3NldF9ibG9ja2luZyhzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldixcbitcdFx0XHRcdCAgICBlbnVtIGxlZF9icmlnaHRuZXNzIGJyaWdodG5lc3MpXG4re1xuK1x0c3RydWN0IHl0OTIxeF9sZWQgKmxlZCA9IHRvX3l0OTIxeF9sZWQobGVkX2NkZXYpO1xuK1x0c3RydWN0IHl0OTIxeF9wb3J0ICpwcCA9IHRvX3l0OTIxeF9wb3J0KGxlZCk7XG4rXHRzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYgPSB0b195dDkyMXhfcHJpdihwcCk7XG4rXHRpbnQgcmVzO1xuK1xuK1x0bXV0ZXhfbG9jayhcdTAwMjZwcml2LVx1MDAzZXJlZ19sb2NrKTtcbitcdHJlcyA9IHl0OTIxeF9sZWRfZm9yY2Vfc2V0KHByaXYsIHBwLVx1MDAzZWluZGV4LCBsZWQtXHUwMDNlZ3JvdXAsIGJyaWdodG5lc3MpO1xuK1x0bXV0ZXhfdW5sb2NrKFx1MDAyNnByaXYtXHUwMDNlcmVnX2xvY2spO1xuK1xuK1x0cmV0dXJuIHJlcztcbit9XG4rXG4rc3RhdGljIGludFxuK3l0OTIxeF9jbGVkX2JsaW5rX3NldChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldiwgdW5zaWduZWQgbG9uZyAqZGVsYXlfb24sXG4rXHRcdCAgICAgIHVuc2lnbmVkIGxvbmcgKmRlbGF5X29mZilcbit7XG4rXHRzdHJ1Y3QgeXQ5MjF4X2xlZCAqbGVkID0gdG9feXQ5MjF4X2xlZChsZWRfY2Rldik7XG4rXHRzdHJ1Y3QgeXQ5MjF4X3BvcnQgKnBwID0gdG9feXQ5MjF4X3BvcnQobGVkKTtcbitcdHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiA9IHRvX3l0OTIxeF9wcml2KHBwKTtcbitcdGludCByZXM7XG4rXG4rXHRtdXRleF9sb2NrKFx1MDAyNnByaXYtXHUwMDNlcmVnX2xvY2spO1xuK1x0cmVzID0geXQ5MjF4X2xlZF9ibGlua19zZXQocHJpdiwgcHAtXHUwMDNlaW5kZXgsIGxlZC1cdTAwM2Vncm91cCwgZGVsYXlfb24sXG4rXHRcdFx0XHQgICBkZWxheV9vZmYpO1xuK1x0bXV0ZXhfdW5sb2NrKFx1MDAyNnByaXYtXHUwMDNlcmVnX2xvY2spO1xuK1xuK1x0cmV0dXJuIHJlcztcbit9XG4rXG4rc3RhdGljIHN0cnVjdCBkZXZpY2UgKiBfX21heWJlX3VudXNlZFxuK3l0OTIxeF9jbGVkX2h3X2NvbnRyb2xfZ2V0X2RldmljZShzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2Rldilcbit7XG4rXHRzdHJ1Y3QgeXQ5MjF4X2xlZCAqbGVkID0gdG9feXQ5MjF4X2xlZChsZWRfY2Rldik7XG4rXHRzdHJ1Y3QgeXQ5MjF4X3BvcnQgKnBwID0gdG9feXQ5MjF4X3BvcnQobGVkKTtcbitcdHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiA9IHRvX3l0OTIxeF9wcml2KHBwKTtcbitcdHN0cnVjdCBkc2FfcG9ydCAqZHA7XG4rXG4rXHRkcCA9IGRzYV90b19wb3J0KFx1MDAyNnByaXYtXHUwMDNlZHMsIHBwLVx1MDAzZWluZGV4KTtcbitcdGlmICghZHApXG4rXHRcdHJldHVybiBOVUxMO1xuK1xuK1x0aWYgKGRzYV9wb3J0X2lzX3VzZXIoZHApKVxuK1x0XHRyZXR1cm4gXHUwMDI2ZHAtXHUwMDNldXNlci1cdTAwM2VkZXY7XG4rXHRpZiAoZHNhX3BvcnRfaXNfY3B1KGRwKSlcbitcdFx0cmV0dXJuIFx1MDAyNmRwLVx1MDAzZWNvbmR1aXQtXHUwMDNlZGV2O1xuK1xuK1x0cmV0dXJuIE5VTEw7XG4rfVxuK1xuK3N0YXRpYyBpbnQgX19tYXliZV91bnVzZWRcbit5dDkyMXhfY2xlZF9od19jb250cm9sX2lzX3N1cHBvcnRlZChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldixcbitcdFx0XHRcdCAgICB1bnNpZ25lZCBsb25nIGZsYWdzKVxuK3tcbitcdHN0cnVjdCB5dDkyMXhfbGVkICpsZWQgPSB0b195dDkyMXhfbGVkKGxlZF9jZGV2KTtcbitcdHN0cnVjdCB5dDkyMXhfcG9ydCAqcHAgPSB0b195dDkyMXhfcG9ydChsZWQpO1xuK1x0c3RydWN0IHl0OTIxeF9wcml2ICpwcml2ID0gdG9feXQ5MjF4X3ByaXYocHApO1xuK1xuK1x0aWYgKHl0OTIxeF9sZWRfdHJpZ2dlcl9pc19zdXBwb3J0ZWQocHJpdiwgcHAtXHUwMDNlaW5kZXgsIGxlZC1cdTAwM2Vncm91cCwgZmxhZ3MpKVxuK1x0XHRyZXR1cm4gMDtcbitcdHJldHVybiAtRU9QTk9UU1VQUDtcbit9XG4rXG4rc3RhdGljIGludCBfX21heWJlX3VudXNlZFxuK3l0OTIxeF9jbGVkX2h3X2NvbnRyb2xfZ2V0KHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2LCB1bnNpZ25lZCBsb25nICpmbGFnc3ApXG4re1xuK1x0c3RydWN0IHl0OTIxeF9sZWQgKmxlZCA9IHRvX3l0OTIxeF9sZWQobGVkX2NkZXYpO1xuK1x0c3RydWN0IHl0OTIxeF9wb3J0ICpwcCA9IHRvX3l0OTIxeF9wb3J0KGxlZCk7XG4rXHRzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYgPSB0b195dDkyMXhfcHJpdihwcCk7XG4rXHRpbnQgcmVzO1xuK1xuK1x0bXV0ZXhfbG9jayhcdTAwMjZwcml2LVx1MDAzZXJlZ19sb2NrKTtcbitcdHJlcyA9IHl0OTIxeF9sZWRfdHJpZ2dlcl9nZXQocHJpdiwgcHAtXHUwMDNlaW5kZXgsIGxlZC1cdTAwM2Vncm91cCwgZmxhZ3NwKTtcbitcdG11dGV4X3VubG9jayhcdTAwMjZwcml2LVx1MDAzZXJlZ19sb2NrKTtcbitcbitcdHJldHVybiByZXM7XG4rfVxuK1xuK3N0YXRpYyBpbnQgX19tYXliZV91bnVzZWRcbit5dDkyMXhfY2xlZF9od19jb250cm9sX3NldChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldiwgdW5zaWduZWQgbG9uZyBmbGFncylcbit7XG4rXHRzdHJ1Y3QgeXQ5MjF4X2xlZCAqbGVkID0gdG9feXQ5MjF4X2xlZChsZWRfY2Rldik7XG4rXHRzdHJ1Y3QgeXQ5MjF4X3BvcnQgKnBwID0gdG9feXQ5MjF4X3BvcnQobGVkKTtcbitcdHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiA9IHRvX3l0OTIxeF9wcml2KHBwKTtcbitcdGludCByZXM7XG4rXG4rXHRtdXRleF9sb2NrKFx1MDAyNnByaXYtXHUwMDNlcmVnX2xvY2spO1xuK1x0cmVzID0geXQ5MjF4X2xlZF90cmlnZ2VyX3NldChwcml2LCBwcC1cdTAwM2VpbmRleCwgbGVkLVx1MDAzZWdyb3VwLCBmbGFncyk7XG4rXHRtdXRleF91bmxvY2soXHUwMDI2cHJpdi1cdTAwM2VyZWdfbG9jayk7XG4rXG4rXHRyZXR1cm4gcmVzO1xuK31cbitcbitzdGF0aWMgaW50XG4reXQ5MjF4X2xlZF9zZXR1cChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIGludCBwb3J0LFxuK1x0XHQgc3RydWN0IGZ3bm9kZV9oYW5kbGUgKmZ3bm9kZSlcbit7XG4rXHRzdHJ1Y3QgeXQ5MjF4X3BvcnQgKnBwID0gXHUwMDI2cHJpdi1cdTAwM2Vwb3J0c1twb3J0XTtcbitcdHN0cnVjdCBkZXZpY2UgKmRldiA9IHRvX2RldmljZShwcml2KTtcbitcdHN0cnVjdCBsZWRfaW5pdF9kYXRhIGluaXRfZGF0YTtcbitcdHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2O1xuK1x0Y2hhciBuYW1lW0xFRF9NQVhfTkFNRV9TSVpFXTtcbitcdGVudW0gbGVkX2RlZmF1bHRfc3RhdGUgc3RhdGU7XG4rXHRzdHJ1Y3QgeXQ5MjF4X2xlZCAqbGVkO1xuK1x0Ym9vbCBmb3JjZV9oaWdoO1xuK1x0Ym9vbCBmb3JjZV9sb3c7XG4rXHR1MzIgZ3JvdXA7XG4rXHR1MzIgbWFzaztcbitcdHUzMiBjdHJsO1xuK1x0dTMyIHZhbDtcbitcdGJvb2wgb247XG4rXHRpbnQgcmVzO1xuK1x0aW50IHJldDtcbitcbitcdHJlcyA9IGZ3bm9kZV9wcm9wZXJ0eV9yZWFkX3UzMihmd25vZGUsIFwicmVnXCIsIFx1MDAyNmdyb3VwKTtcbitcdGlmIChyZXMpXG4rXHRcdHJldHVybiByZXM7XG4rXHRpZiAoZ3JvdXAgXHUwMDNlPSBZVDkyMVhfTEVEX0dST1VQX05VTSkge1xuK1x0XHRkZXZfZXJyKGRldiwgXCJJbnZhbGlkIExFRCByZWcgJXUgZm9yIHBvcnQgJWRcXG5cIiwgZ3JvdXAsIHBvcnQpO1xuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcdH1cbitcdGlmIChwcC1cdTAwM2VsZWRzW2dyb3VwXSlcbitcdFx0cmV0dXJuIC1FRVhJU1Q7XG4rXG4rXHRmb3JjZV9oaWdoID0gZndub2RlX3Byb3BlcnR5X3JlYWRfYm9vbChmd25vZGUsIFwiYWN0aXZlLWhpZ2hcIik7XG4rXHRmb3JjZV9sb3cgPSBmd25vZGVfcHJvcGVydHlfcmVhZF9ib29sKGZ3bm9kZSwgXCJhY3RpdmUtbG93XCIpO1xuK1x0aWYgKGZvcmNlX2hpZ2ggXHUwMDI2XHUwMDI2IGZvcmNlX2xvdykge1xuK1x0XHRkZXZfZXJyKGRldiwgXCJEdXBsaWNhdGUgcG9sYXJpdGllcyBmb3IgTEVEICUwMmQ6JTAydVxcblwiLFxuK1x0XHRcdHBvcnQsIGdyb3VwKTtcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHR9XG4rXG4rXHRsZWQgPSBkZXZtX2t6YWxsb2MoZGV2LCBzaXplb2YoKmxlZCksIEdGUF9LRVJORUwpO1xuK1x0aWYgKCFsZWQpXG4rXHRcdHJldHVybiAtRU5PTUVNO1xuK1x0bGVkLVx1MDAzZXBvcnQgPSBwcDtcbitcdGxlZC1cdTAwM2Vncm91cCA9IGdyb3VwO1xuK1xuK1x0c3RhdGUgPSBsZWRfaW5pdF9kZWZhdWx0X3N0YXRlX2dldChmd25vZGUpO1xuK1xuK1x0bXV0ZXhfbG9jayhcdTAwMjZwcml2LVx1MDAzZXJlZ19sb2NrKTtcbitcbitcdC8qIEludmVyc2lvbiBpcyBpbnRlcm5hbCAtIGZvcmNlIG9uIHdpbGwgZ2l2ZSBsb3cgbG9naWMuXG4rXHQgKiBJbiB0aGUgcmVzdCBvZiB0aGUgZmlsZSwgdHJlYXQgTEVEcyBhcyBpZiBhY3RpdmUtbG93LlxuK1x0ICovXG4rXHRpZiAoZm9yY2VfaGlnaCB8fCBmb3JjZV9sb3cpIHtcbitcdFx0cmVzID0geXQ5MjF4X3JlZ19yZWFkKHByaXYsIFlUOTIxWF9MRURfUEFSX0lOViwgXHUwMDI2dmFsKTtcbitcdFx0aWYgKHJlcylcbitcdFx0XHRnb3RvIHVubG9jaztcbitcbitcdFx0bWFzayA9IFlUOTIxWF9MRURfUEFSX0lOVl9JTlZubShncm91cCwgcG9ydCk7XG4rXHRcdGN0cmwgPSBmb3JjZV9oaWdoID8gdmFsIHwgbWFzayA6IHZhbCBcdTAwMjYgfm1hc2s7XG4rXHRcdHJlcyA9IHl0OTIxeF9yZWdfd3JpdGUocHJpdiwgWVQ5MjFYX0xFRF9QQVJfSU5WLCBjdHJsKTtcbitcdFx0aWYgKHJlcylcbitcdFx0XHRnb3RvIHVubG9jaztcbitcdH1cbitcbitcdHBwLVx1MDAzZWxlZHNbZ3JvdXBdID0gbGVkO1xuK1xuK1x0c3dpdGNoIChzdGF0ZSkge1xuK1x0Y2FzZSBMRURTX0RFRlNUQVRFX09GRjpcbitcdGNhc2UgTEVEU19ERUZTVEFURV9PTjpcbitcdGRlZmF1bHQ6XG4rXHRcdG9uID0gc3RhdGUgPT0gTEVEU19ERUZTVEFURV9PTjtcbitcdFx0cmVzID0geXQ5MjF4X2xlZF9mb3JjZV9zZXQocHJpdiwgcG9ydCwgZ3JvdXAsIG9uKTtcbitcdFx0YnJlYWs7XG4rXHRjYXNlIExFRFNfREVGU1RBVEVfS0VFUDpcbitcdFx0cmVzID0geXQ5MjF4X2xlZF9mb3JjZV9nZXQocHJpdiwgcG9ydCwgZ3JvdXAsIFx1MDAyNm9uKTtcbitcdFx0YnJlYWs7XG4rXHR9XG4rXG4rdW5sb2NrOlxuK1x0bXV0ZXhfdW5sb2NrKFx1MDAyNnByaXYtXHUwMDNlcmVnX2xvY2spO1xuK1x0aWYgKHJlcylcbitcdFx0Z290byBlcnI7XG4rXG4rXHRsZWRfY2RldiA9IFx1MDAyNmxlZC1cdTAwM2VjZGV2O1xuK1x0bGVkX2NkZXYtXHUwMDNlYnJpZ2h0bmVzcyA9IG9uO1xuK1x0bGVkX2NkZXYtXHUwMDNlbWF4X2JyaWdodG5lc3MgPSAxO1xuK1x0bGVkX2NkZXYtXHUwMDNlZmxhZ3MgPSBMRURfUkVUQUlOX0FUX1NIVVRET1dOO1xuK1x0bGVkX2NkZXYtXHUwMDNlYnJpZ2h0bmVzc19zZXRfYmxvY2tpbmcgPSB5dDkyMXhfY2xlZF9icmlnaHRuZXNzX3NldF9ibG9ja2luZztcbitcdGxlZF9jZGV2LVx1MDAzZWJsaW5rX3NldCA9IHl0OTIxeF9jbGVkX2JsaW5rX3NldDtcbisjaWZkZWYgQ09ORklHX0xFRFNfVFJJR0dFUlNcbitcdGxlZF9jZGV2LVx1MDAzZWh3X2NvbnRyb2xfdHJpZ2dlciA9IFwibmV0ZGV2XCI7XG4rXHRsZWRfY2Rldi1cdTAwM2Vod19jb250cm9sX2dldF9kZXZpY2UgPSB5dDkyMXhfY2xlZF9od19jb250cm9sX2dldF9kZXZpY2U7XG4rXHRsZWRfY2Rldi1cdTAwM2Vod19jb250cm9sX2lzX3N1cHBvcnRlZCA9IHl0OTIxeF9jbGVkX2h3X2NvbnRyb2xfaXNfc3VwcG9ydGVkO1xuK1x0bGVkX2NkZXYtXHUwMDNlaHdfY29udHJvbF9nZXQgPSB5dDkyMXhfY2xlZF9od19jb250cm9sX2dldDtcbitcdGxlZF9jZGV2LVx1MDAzZWh3X2NvbnRyb2xfc2V0ID0geXQ5MjF4X2NsZWRfaHdfY29udHJvbF9zZXQ7XG4rI2VuZGlmXG4rXG4rXHRzbnByaW50ZihuYW1lLCBzaXplb2YobmFtZSksIFlUOTIxWF9OQU1FIFwiLSV1OiUwMmQ6JTAydVwiLFxuK1x0XHQgcHJpdi1cdTAwM2Vkcy5pbmRleCwgcG9ydCwgZ3JvdXApO1xuK1x0aW5pdF9kYXRhID0gKHR5cGVvZihpbml0X2RhdGEpKXtcbitcdFx0LmZ3bm9kZSA9IGZ3bm9kZSxcbitcdFx0LmRlZmF1bHRfbGFiZWwgPSBcIjpwb3J0XCIsXG4rXHRcdC5kZXZpY2VuYW1lID0gbmFtZSxcbitcdFx0LmRldm5hbWVfbWFuZGF0b3J5ID0gdHJ1ZSxcbitcdH07XG4rXHRyZXMgPSBkZXZtX2xlZF9jbGFzc2Rldl9yZWdpc3Rlcl9leHQoZGV2LCBsZWRfY2RldiwgXHUwMDI2aW5pdF9kYXRhKTtcbitcdGlmIChyZXMpXG4rXHRcdGdvdG8gZXJyO1xuK1xuK1x0cmV0dXJuIDA7XG4rXG4rZXJyOlxuK1x0cmV0ID0gcmVzO1xuK1xuK1x0bXV0ZXhfbG9jayhcdTAwMjZwcml2LVx1MDAzZXJlZ19sb2NrKTtcbitcdGlmIChwcC1cdTAwM2VsZWRzW2dyb3VwXSkge1xuK1x0XHRpZiAoZm9yY2VfaGlnaCB8fCBmb3JjZV9sb3cpIHtcbitcdFx0XHRyZXMgPSB5dDkyMXhfcmVnX3dyaXRlKHByaXYsIFlUOTIxWF9MRURfUEFSX0lOViwgdmFsKTtcbitcdFx0XHRpZiAocmVzKVxuK1x0XHRcdFx0ZGV2X3dhcm4oZGV2LFxuK1x0XHRcdFx0XHQgXCJGYWlsZWQgdG8gcmV2b2tlIGluaXRpYWxpemF0aW9uIGZvciBMRUQgJTAyZDolMDJ1XFxuXCIsXG4rXHRcdFx0XHRcdCBwb3J0LCBncm91cCk7XG4rXHRcdH1cbitcbitcdFx0cHAtXHUwMDNlbGVkc1tncm91cF0gPSBOVUxMO1xuK1x0fVxuK1x0bXV0ZXhfdW5sb2NrKFx1MDAyNnByaXYtXHUwMDNlcmVnX2xvY2spO1xuK1xuK1x0ZGV2bV9rZnJlZShkZXYsIGxlZCk7XG4rXHRyZXR1cm4gcmV0O1xuK31cbitcbitzdGF0aWMgdm9pZCB5dDkyMXhfbGVkc19yZW1vdmVfcG9ydChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIGludCBwb3J0KVxuK3tcbitcdHN0cnVjdCB5dDkyMXhfcG9ydCAqcHAgPSBcdTAwMjZwcml2LVx1MDAzZXBvcnRzW3BvcnRdO1xuK1x0c3RydWN0IGRldmljZSAqZGV2ID0gdG9fZGV2aWNlKHByaXYpO1xuK1x0Ym9vbCBoYXNfbGVkcyA9IGZhbHNlO1xuK1xuK1x0Zm9yIChpbnQgZ3JvdXAgPSAwOyBncm91cCBcdTAwM2MgWVQ5MjFYX0xFRF9HUk9VUF9OVU07IGdyb3VwKyspIHtcbitcdFx0c3RydWN0IHl0OTIxeF9sZWQgKmxlZCA9IHBwLVx1MDAzZWxlZHNbZ3JvdXBdO1xuK1xuK1x0XHRpZiAobGVkKSB7XG4rXHRcdFx0ZGV2bV9sZWRfY2xhc3NkZXZfdW5yZWdpc3RlcihkZXYsIFx1MDAyNmxlZC1cdTAwM2VjZGV2KTtcbitcdFx0XHRoYXNfbGVkcyA9IHRydWU7XG4rXHRcdH1cbitcdH1cbitcbitcdGlmICghaGFzX2xlZHMpXG4rXHRcdHJldHVybjtcbitcbitcdC8qIE5vdyBubyBvbmUgY2FuIGFjY2VzcyB0aGUgTEVEIGNvbnRyb2wgYmxvY2tzLCBmcmVlIHRoZW0gd2l0aG91dFxuK1x0ICogaG9sZGluZyB0aGUgbG9jay5cbitcdCAqL1xuK1x0Zm9yIChpbnQgZ3JvdXAgPSAwOyBncm91cCBcdTAwM2MgWVQ5MjFYX0xFRF9HUk9VUF9OVU07IGdyb3VwKyspIHtcbitcdFx0c3RydWN0IHl0OTIxeF9sZWQgKmxlZCA9IHBwLVx1MDAzZWxlZHNbZ3JvdXBdO1xuK1xuK1x0XHRpZiAobGVkKSB7XG4rXHRcdFx0cHAtXHUwMDNlbGVkc1tncm91cF0gPSBOVUxMO1xuK1x0XHRcdGRldm1fa2ZyZWUoZGV2LCBsZWQpO1xuK1x0XHR9XG4rXHR9XG4rfVxuK1xuK3N0YXRpYyBpbnQgeXQ5MjF4X2xlZHNfc2V0dXBfcG9ydChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIGludCBwb3J0KVxuK3tcbitcdHN0cnVjdCBkZXZpY2UgKmRldiA9IHRvX2RldmljZShwcml2KTtcbitcdHN0cnVjdCBkc2Ffc3dpdGNoICpkcyA9IFx1MDAyNnByaXYtXHUwMDNlZHM7XG4rXHRzdHJ1Y3QgZGV2aWNlX25vZGUgKmxlZHNfbnA7XG4rXHRzdHJ1Y3QgZHNhX3BvcnQgKmRwO1xuK1xuK1x0ZHAgPSBkc2FfdG9fcG9ydChkcywgcG9ydCk7XG4rXHRsZWRzX25wID0gb2ZfZ2V0X2NoaWxkX2J5X25hbWUoZHAtXHUwMDNlZG4sIFwibGVkc1wiKTtcbitcdGlmICghbGVkc19ucClcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHRpZiAocG9ydCBcdTAwM2U9IFlUOTIxWF9MRURfUE9SVF9OVU0pIHtcbitcdFx0ZGV2X2VycihkZXYsIFwiQ2Fubm90IGNvbmZpZ3VyZSBMRURzIGZvciBwb3J0ICVkXFxuXCIsIHBvcnQpO1xuK1x0XHRvZl9ub2RlX3B1dChsZWRzX25wKTtcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHR9XG4rXG4rXHRmb3JfZWFjaF9jaGlsZF9vZl9ub2RlX3Njb3BlZChsZWRzX25wLCBsZWRfbnApIHtcbitcdFx0eXQ5MjF4X2xlZF9zZXR1cChwcml2LCBwb3J0LCBvZl9md25vZGVfaGFuZGxlKGxlZF9ucCkpO1xuK1x0XHQvKiBBbGxvdyBwYXJ0aWFsIGNvbmZpZ3VyYXRpb246IExFRHMgYXJlIG9wdGlvbmFsICovXG4rXHR9XG4rXG4rXHRvZl9ub2RlX3B1dChsZWRzX25wKTtcbitcdHJldHVybiAwO1xuK31cbitcbit2b2lkIHl0OTIxeF9sZWRzX3JlbW92ZShzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYpXG4re1xuK1x0Zm9yIChpbnQgcG9ydCA9IDA7IHBvcnQgXHUwMDNjIFlUOTIxWF9MRURfUE9SVF9OVU07IHBvcnQrKylcbitcdFx0eXQ5MjF4X2xlZHNfcmVtb3ZlX3BvcnQocHJpdiwgcG9ydCk7XG4rfVxuK1xuK2ludCB5dDkyMXhfbGVkc19zZXR1cChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYpXG4re1xuK1x0c3RydWN0IGRzYV9zd2l0Y2ggKmRzID0gXHUwMDI2cHJpdi1cdTAwM2VkcztcbitcdHN0cnVjdCBkc2FfcG9ydCAqZHA7XG4rXG4rXHQvKiBMRURzIGFyZSBhbHdheXMgZW5hYmxlZC4gVGhlcmUgaXMgbm8gd2F5IHRvIGRpc2FibGUgdGhlbSBhbHRvZ2V0aGVyXG4rXHQgKiAoYXMgZmFyIGFzIEkga25vdykuXG4rXHQgKi9cbitcbitcdGRzYV9zd2l0Y2hfZm9yX2VhY2hfcG9ydChkcCwgZHMpIHtcbitcdFx0aW50IHBvcnQgPSBkcC1cdTAwM2VpbmRleDtcbitcbitcdFx0aWYgKCFkcC1cdTAwM2VkbilcbitcdFx0XHRjb250aW51ZTtcbitcbitcdFx0eXQ5MjF4X2xlZHNfc2V0dXBfcG9ydChwcml2LCBwb3J0KTtcbitcdFx0LyogQWxsb3cgcGFydGlhbCBjb25maWd1cmF0aW9uOiBMRURzIGFyZSBvcHRpb25hbCAqL1xuK1x0fVxuK1xuK1x0cmV0dXJuIDA7XG4rfVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vbGVkcy5oIGIvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9sZWRzLmhcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwLi4zYzM2NDI5ODhhYzc3XG4tLS0gL2Rldi9udWxsXG4rKysgYi9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2xlZHMuaFxuQEAgLTAsMCArMSwxMjEgQEBcbisvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vci1sYXRlciAqL1xuKy8qXG4rICogQ29weXJpZ2h0IChjKSAyMDI2IERhdmlkIFlhbmdcbisgKi9cbitcbisjaWZuZGVmIF9ZVF9MRURTX0hcbisjZGVmaW5lIF9ZVF9MRURTX0hcbitcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9iaXRmaWVsZC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvYml0cy5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgva2NvbmZpZy5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvbGVkcy5oXHUwMDNlXG4rXG4rI2RlZmluZSBZVDkyMVhfTEVEX0NUUkxcdFx0XHQweGQwMDAwXG4rI2RlZmluZSAgWVQ5MjFYX0xFRF9DVFJMX1VOS1x0XHRcdEJJVCgyMSlcbisjZGVmaW5lICBZVDkyMVhfTEVEX0NUUkxfTE9PUERFVEVDVF9CTElOS19NXHRHRU5NQVNLKDIwLCAxOSlcdC8qIGN5Y2xlID0gNTEyICogeCBtcyAqL1xuKyNkZWZpbmUgICBZVDkyMVhfTEVEX0NUUkxfTE9PUERFVEVDVF9CTElOSyh4KVx0XHRGSUVMRF9QUkVQKFlUOTIxWF9MRURfQ1RSTF9MT09QREVURUNUX0JMSU5LX00sICh4KSlcbisjZGVmaW5lICBZVDkyMVhfTEVEX0NUUkxfUE9SVF9OVU1fTVx0XHRHRU5NQVNLKDE2LCAxMylcbisjZGVmaW5lICAgWVQ5MjFYX0xFRF9DVFJMX1BPUlRfTlVNKHgpXHRcdFx0RklFTERfUFJFUChZVDkyMVhfTEVEX0NUUkxfUE9SVF9OVU1fTSwgKHgpKVxuKyNkZWZpbmUgIFlUOTIxWF9MRURfQ1RSTF9NT0RFX01cdFx0XHRHRU5NQVNLKDEsIDApXG4rI2RlZmluZSAgIFlUOTIxWF9MRURfQ1RSTF9NT0RFKHgpXHRcdFx0RklFTERfUFJFUChZVDkyMVhfTEVEX0NUUkxfTU9ERV9NLCAoeCkpXG4rI2RlZmluZSAgIFlUOTIxWF9MRURfQ1RSTF9NT0RFX1BBUkFMTEVMXHRcdFx0WVQ5MjFYX0xFRF9DVFJMX01PREUoMClcbisjZGVmaW5lICAgWVQ5MjFYX0xFRF9DVFJMX01PREVfU0VSSUFMXHRcdFx0WVQ5MjFYX0xFRF9DVFJMX01PREUoMilcbisjZGVmaW5lIFlUOTIxWF9MRUQwX1BPUlRuKHBvcnQpXHRcdCgweGQwMDA0ICsgNCAqIChwb3J0KSlcbisjZGVmaW5lICBZVDkyMVhfTEVEMF9QT1JUX0FDVF9NXHRcdFx0R0VOTUFTSygxNywgMClcbisjZGVmaW5lICBZVDkyMVhfTEVEMF9QT1JUX0FDVF9MSU5LX1RSWV9ESVNcdEJJVCgxNylcbisjZGVmaW5lICBZVDkyMVhfTEVEMF9QT1JUX0FDVF9DT0xMSVNJT05fQkxJTktfSU5ESVx0QklUKDE2KVxuKyNkZWZpbmUgWVQ5MjFYX0xFRDFfUE9SVG4ocG9ydClcdFx0KDB4ZDAwNDAgKyA0ICogKHBvcnQpKVxuKyNkZWZpbmUgIFlUOTIxWF9MRUQxX1BPUlRfT1RIRVJfQkxJTktfTVx0XHRHRU5NQVNLKDMxLCAzMClcdC8qIGN5Y2xlID0gNTEyIFx1MDAzZVx1MDAzZSB4IG1zICovXG4rI2RlZmluZSAgIFlUOTIxWF9MRUQxX1BPUlRfT1RIRVJfQkxJTksoeClcdFx0RklFTERfUFJFUChZVDkyMVhfTEVEMV9QT1JUX09USEVSX0JMSU5LX00sICh4KSlcbisjZGVmaW5lICBZVDkyMVhfTEVEMV9QT1JUX0VFRV9CTElOS19NXHRcdEdFTk1BU0soMjksIDI4KVx0LyogY3ljbGUgPSA1MTIgXHUwMDNlXHUwMDNlIHggbXMgKi9cbisjZGVmaW5lICAgWVQ5MjFYX0xFRDFfUE9SVF9FRUVfQkxJTksoeClcdFx0XHRGSUVMRF9QUkVQKFlUOTIxWF9MRUQxX1BPUlRfRUVFX0JMSU5LX00sICh4KSlcbisjZGVmaW5lICBZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFlfQ09NUFx0QklUKDI3KVxuKyNkZWZpbmUgIFlUOTIxWF9MRUQxX1BPUlRfQkxJTktfRFVUWV9NXHRcdEdFTk1BU0soMjYsIDI1KVxuKyNkZWZpbmUgICBZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFkoeClcdFx0RklFTERfUFJFUChZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFlfTSwgKHgpKVxuKyNkZWZpbmUgICBZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFlfMV8yXHRcdFlUOTIxWF9MRUQxX1BPUlRfQkxJTktfRFVUWSgwKVxuKyNkZWZpbmUgICBZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFlfMl8zXHRcdFlUOTIxWF9MRUQxX1BPUlRfQkxJTktfRFVUWSgxKVxuKyNkZWZpbmUgICBZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFlfM180XHRcdFlUOTIxWF9MRUQxX1BPUlRfQkxJTktfRFVUWSgyKVxuKyNkZWZpbmUgICBZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFlfNV82XHRcdFlUOTIxWF9MRUQxX1BPUlRfQkxJTktfRFVUWSgzKVxuKyNkZWZpbmUgWVQ5MjFYX0xFRDJfUE9SVG4ocG9ydClcdFx0KDB4ZDAwODAgKyA0ICogKHBvcnQpKVxuKyNkZWZpbmUgIFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuX00oZ3JwKVx0XHRHRU5NQVNLKDQgKiAoZ3JwKSArIDE5LCA0ICogKGdycCkgKyAxOClcbisjZGVmaW5lICAgWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW4oZ3JwLCB4KVx0XHQoKHgpIFx1MDAzY1x1MDAzYyAoNCAqIChncnApICsgMTgpKVxuKyNkZWZpbmUgICBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbl9ET05UQ0FSRShncnApXHRcdFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuKGdycCwgMClcbisjZGVmaW5lICAgWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW5fQkxJTksoZ3JwKVx0XHRZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbihncnAsIDEpXG4rI2RlZmluZSAgIFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuX09OKGdycClcdFx0WVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW4oZ3JwLCAyKVxuKyNkZWZpbmUgICBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbl9PRkYoZ3JwKVx0XHRZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbihncnAsIDMpXG4rI2RlZmluZSAgWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRV9CTElOS25fTShncnApXHRHRU5NQVNLKDQgKiAoZ3JwKSArIDE3LCA0ICogKGdycCkgKyAxNilcdC8qIGN5Y2xlID0gNTEyIFx1MDAzY1x1MDAzYyB4IG1zICovXG4rI2RlZmluZSAgIFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VfQkxJTktuKGdycCwgeClcdFx0KCh4KSBcdTAwM2NcdTAwM2MgKDQgKiAoZ3JwKSArIDE2KSlcbisjZGVmaW5lICAgWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRV9CTElOS25fT1RIRVIoZ3JwKVx0WVQ5MjFYX0xFRDJfUE9SVF9GT1JDRV9CTElOS24oZ3JwLCAzKVxuKyNkZWZpbmUgIFlUOTIxWF9MRUR4X1BPUlRfQUNUX01cdFx0XHRHRU5NQVNLKDE1LCAwKVxuKyNkZWZpbmUgIFlUOTIxWF9MRUR4X1BPUlRfQUNUX0VFRV9CTElOS1x0XHRCSVQoMTUpXG4rI2RlZmluZSAgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfTE9PUERFVEVDVF9CTElOS1x0QklUKDE0KVxuKyNkZWZpbmUgIFlUOTIxWF9MRUR4X1BPUlRfQUNUX0FDVElWRV9CTElOS1x0QklUKDEzKVxuKyNkZWZpbmUgIFlUOTIxWF9MRUR4X1BPUlRfQUNUX0RVUExFWF9GVUxMXHRCSVQoMTIpXG4rI2RlZmluZSAgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfRFVQTEVYX0hBTEZcdEJJVCgxMSlcbisjZGVmaW5lICBZVDkyMVhfTEVEeF9QT1JUX0FDVF9UWF9CTElOS1x0XHRCSVQoMTApXG4rI2RlZmluZSAgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfUlhfQkxJTktcdFx0QklUKDkpXG4rI2RlZmluZSAgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfVFhcdFx0QklUKDgpXG4rI2RlZmluZSAgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfUlhcdFx0QklUKDcpXG4rI2RlZmluZSAgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfMTAwME1cdFx0QklUKDYpXG4rI2RlZmluZSAgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfMTAwTVx0XHRCSVQoNSlcbisjZGVmaW5lICBZVDkyMVhfTEVEeF9QT1JUX0FDVF8xME1cdFx0QklUKDQpXG4rI2RlZmluZSAgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfQ09MTElTSU9OX0JMSU5LXHRCSVQoMylcbisjZGVmaW5lICBZVDkyMVhfTEVEeF9QT1JUX0FDVF8xMDAwTV9CTElOS1x0QklUKDIpXG4rI2RlZmluZSAgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfMTAwTV9CTElOS1x0QklUKDEpXG4rI2RlZmluZSAgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfMTBNX0JMSU5LXHRcdEJJVCgwKVxuKyNkZWZpbmUgWVQ5MjFYX0xFRF9TRVJfQ1RSTFx0XHQweGQwMTAwXG4rI2RlZmluZSAgWVQ5MjFYX0xFRF9TRVJfQ1RSTF9VTktcdFx0R0VOTUFTSygyNSwgMjQpXHQvKiBkZWxheT8gKi9cbisjZGVmaW5lICBZVDkyMVhfTEVEX1NFUl9DVFJMX0FDVElWRV9MT1dcdFx0QklUKDQpXG4rI2RlZmluZSAgWVQ5MjFYX0xFRF9TRVJfQ1RSTF9HUlBfTlVNX01cdFx0R0VOTUFTSygxLCAwKVx0LyogI2dycCAtIDEgKi9cbisjZGVmaW5lICAgWVQ5MjFYX0xFRF9TRVJfQ1RSTF9HUlBfTlVNKHgpXHRcdEZJRUxEX1BSRVAoWVQ5MjFYX0xFRF9TRVJfQ1RSTF9HUlBfTlVNX00sICh4KSlcbisjZGVmaW5lIFlUOTIxWF9MRURfU0VSX01BUG5tKGdycCwgcG9ydClcdCgweGQwMTA0ICsgOCAqICgyIC0gKGdycCkpICsgNCAqICgocG9ydCkgLyA1KSlcbisjZGVmaW5lICBZVDkyMVhfTEVEX1NFUl9NQVBfRFNUbl9QT1JUX00ocG9ydClcdEdFTk1BU0soNiAqICgocG9ydCkgJSA1KSArIDUsIDYgKiAoKHBvcnQpICUgNSkgKyAyKVxuKyNkZWZpbmUgICBZVDkyMVhfTEVEX1NFUl9NQVBfRFNUbl9QT1JUKHBvcnQsIHgpXHRcdCgoeCkgXHUwMDNjXHUwMDNjICg2ICogKChwb3J0KSAlIDUpICsgMikpXG4rI2RlZmluZSAgWVQ5MjFYX0xFRF9TRVJfTUFQX0RTVG5fTEVEX00ocG9ydClcdEdFTk1BU0soNiAqICgocG9ydCkgJSA1KSArIDEsIDYgKiAoKHBvcnQpICUgNSkpXG4rI2RlZmluZSAgIFlUOTIxWF9MRURfU0VSX01BUF9EU1RuX0xFRChwb3J0LCB4KVx0XHQoKHgpIFx1MDAzY1x1MDAzYyAoNiAqICgocG9ydCkgJSA1KSkpXG4rI2RlZmluZSBZVDkyMVhfTEVEX1BBUl9QT1JUU1x0XHQweGQwMWM0XG4rI2RlZmluZSBZVDkyMVhfTEVEX1BBUl9JTlZcdFx0MHhkMDFjOFxuKyNkZWZpbmUgIFlUOTIxWF9MRURfUEFSX0lOVl9JTlZubShncnAsIHBvcnQpXHRCSVQoMTAgKiAoZ3JwKSArIChwb3J0KSlcbisjZGVmaW5lIFlUOTIxWF9MRURfUEFSX01BUG4ocG9ydClcdCgweGQwMWQwICsgNCAqIChwb3J0KSlcbisjZGVmaW5lICBZVDkyMVhfTEVEX1BBUl9NQVBfRFNUbl9QT1JUX00oZ3JwKVx0R0VOTUFTSyg2ICogKGdycCkgKyA1LCA2ICogKGdycCkgKyAyKVxuKyNkZWZpbmUgICBZVDkyMVhfTEVEX1BBUl9NQVBfRFNUbl9QT1JUKGdycCwgeClcdFx0KCh4KSBcdTAwM2NcdTAwM2MgKDYgKiAoZ3JwKSArIDIpKVxuKyNkZWZpbmUgIFlUOTIxWF9MRURfUEFSX01BUF9EU1RuX0xFRF9NKGdycClcdEdFTk1BU0soNiAqIChncnApICsgMSwgNiAqIChncnApKVxuKyNkZWZpbmUgICBZVDkyMVhfTEVEX1BBUl9NQVBfRFNUbl9MRUQoZ3JwLCB4KVx0XHQoKHgpIFx1MDAzY1x1MDAzYyAoNiAqIChncnApKSlcbitcbisjZGVmaW5lIFlUOTIxWF9MRURfQkxJTktfTUlOXHQ2NFxuKyNkZWZpbmUgWVQ5MjFYX0xFRF9CTElOS19ERUZcdDUxMlxuKyNkZWZpbmUgWVQ5MjFYX0xFRF9CTElOS19NQVhcdDIwNDhcbitcbisvKiAyICogbGNtKDIsIDMsIDQsIDYpICovXG4rI2RlZmluZSBZVDkyMVhfTEVEX0RVVFlfREVOT01cdFx0MjRcbisjZGVmaW5lIFlUOTIxWF9MRURfRFVUWShub20sIGRlbm9tKVx0KFlUOTIxWF9MRURfRFVUWV9ERU5PTSAqIChub20pIC8gKGRlbm9tKSlcbitcbitzdHJ1Y3QgeXQ5MjF4X3ByaXY7XG4rXG4rc3RydWN0IHl0OTIxeF9sZWQge1xuK1x0c3RydWN0IGxlZF9jbGFzc2RldiBjZGV2O1xuK1x0c3RydWN0IHl0OTIxeF9wb3J0ICpwb3J0O1xuK1x0dW5zaWduZWQgY2hhciBncm91cDtcbitcbitcdGJvb2wgdXNlX2N5Y2xlOjE7XG4rXHRib29sIHVzZV9kdXR5OjE7XG4rfTtcbitcbisjaWYgSVNfRU5BQkxFRChDT05GSUdfTkVUX0RTQV9ZVDkyMVhfTEVEUylcbitcbit2b2lkIHl0OTIxeF9sZWRzX3JlbW92ZShzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYpO1xuK2ludCB5dDkyMXhfbGVkc19zZXR1cChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYpO1xuK1xuKyNlbHNlXG4rXG4rc3RhdGljIGlubGluZSB2b2lkIHl0OTIxeF9sZWRzX3JlbW92ZShzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYpIHt9XG4rXG4rc3RhdGljIGlubGluZSBpbnQgeXQ5MjF4X2xlZHNfc2V0dXAoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2KVxuK3tcbitcdHJldHVybiAwO1xuK31cbitcbisjZW5kaWZcbitcbisjZW5kaWZcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL3NtaS5jIGIvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9zbWkuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLjE2NGMyNWVmNDk0YTFcbi0tLSAvZGV2L251bGxcbisrKyBiL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vc21pLmNcbkBAIC0wLDAgKzEsMTU3IEBAXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb3ItbGF0ZXJcbisvKlxuKyAqIENvcHlyaWdodCAoYykgMjAyNiBEYXZpZCBZYW5nXG4rICovXG4rXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvaW9wb2xsLmhcdTAwM2VcbitcbisjaW5jbHVkZSBcImNoaXAuaFwiXG4rI2luY2x1ZGUgXCJzbWkuaFwiXG4rXG4rI2RlZmluZSBZVDkyMVhfUE9MTF9TTEVFUF9VU1x0MTAwMDBcbisjZGVmaW5lIFlUOTIxWF9QT0xMX1RJTUVPVVRfVVNcdDEwMDAwMFxuK1xuK2ludCB5dDkyMXhfcmVnX3JlYWQoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgKnZhbHApXG4re1xuK1x0V0FSTl9PTighbXV0ZXhfaXNfbG9ja2VkKFx1MDAyNnByaXYtXHUwMDNlcmVnX2xvY2spKTtcbitcbitcdHJldHVybiBwcml2LVx1MDAzZXJlZ19vcHMtXHUwMDNlcmVhZChwcml2LVx1MDAzZXJlZ19jdHgsIHJlZywgdmFscCk7XG4rfVxuK1xuK2ludCB5dDkyMXhfcmVnX3dyaXRlKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyIHZhbClcbit7XG4rXHRXQVJOX09OKCFtdXRleF9pc19sb2NrZWQoXHUwMDI2cHJpdi1cdTAwM2VyZWdfbG9jaykpO1xuK1xuK1x0cmV0dXJuIHByaXYtXHUwMDNlcmVnX29wcy1cdTAwM2V3cml0ZShwcml2LVx1MDAzZXJlZ19jdHgsIHJlZywgdmFsKTtcbit9XG4rXG4raW50IHl0OTIxeF9yZWdfd2FpdChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiBtYXNrLCB1MzIgKnZhbHApXG4re1xuK1x0dTMyIHZhbDtcbitcdGludCByZXM7XG4rXHRpbnQgcmV0O1xuK1xuK1x0cmV0ID0gcmVhZF9wb2xsX3RpbWVvdXQoeXQ5MjF4X3JlZ19yZWFkLCByZXMsXG4rXHRcdFx0XHRyZXMgfHwgKHZhbCBcdTAwMjYgbWFzaykgPT0gKnZhbHAsXG4rXHRcdFx0XHRZVDkyMVhfUE9MTF9TTEVFUF9VUywgWVQ5MjFYX1BPTExfVElNRU9VVF9VUyxcbitcdFx0XHRcdGZhbHNlLCBwcml2LCByZWcsIFx1MDAyNnZhbCk7XG4rXHRpZiAocmV0KVxuK1x0XHRyZXR1cm4gcmV0O1xuK1x0aWYgKHJlcylcbitcdFx0cmV0dXJuIHJlcztcbitcbitcdCp2YWxwID0gdmFsO1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK2ludCB5dDkyMXhfcmVnX3VwZGF0ZV9iaXRzKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyIG1hc2ssIHUzMiB2YWwpXG4re1xuK1x0aW50IHJlcztcbitcdHUzMiB2O1xuK1x0dTMyIHU7XG4rXG4rXHRyZXMgPSB5dDkyMXhfcmVnX3JlYWQocHJpdiwgcmVnLCBcdTAwMjZ2KTtcbitcdGlmIChyZXMpXG4rXHRcdHJldHVybiByZXM7XG4rXG4rXHR1ID0gdjtcbitcdHUgXHUwMDI2PSB+bWFzaztcbitcdHUgfD0gdmFsO1xuK1x0aWYgKHUgPT0gdilcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHRyZXR1cm4geXQ5MjF4X3JlZ193cml0ZShwcml2LCByZWcsIHUpO1xuK31cbitcbitpbnRcbit5dDkyMXhfcmVnc19yZWFkKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyICp2YWxzLFxuK1x0XHQgdW5zaWduZWQgaW50IG51bV9yZWdzKVxuK3tcbitcdGludCByZXM7XG4rXG4rXHRmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSBcdTAwM2MgbnVtX3JlZ3M7IGkrKykge1xuK1x0XHRyZXMgPSB5dDkyMXhfcmVnX3JlYWQocHJpdiwgcmVnICsgNCAqIGksIFx1MDAyNnZhbHNbaV0pO1xuK1x0XHRpZiAocmVzKVxuK1x0XHRcdHJldHVybiByZXM7XG4rXHR9XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4raW50XG4reXQ5MjF4X3JlZ3Nfd3JpdGUoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCBjb25zdCB1MzIgKnZhbHMsXG4rXHRcdCAgdW5zaWduZWQgaW50IG51bV9yZWdzKVxuK3tcbitcdGludCByZXM7XG4rXG4rXHRmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSBcdTAwM2MgbnVtX3JlZ3M7IGkrKykge1xuK1x0XHRyZXMgPSB5dDkyMXhfcmVnX3dyaXRlKHByaXYsIHJlZyArIDQgKiBpLCB2YWxzW2ldKTtcbitcdFx0aWYgKHJlcylcbitcdFx0XHRyZXR1cm4gcmVzO1xuK1x0fVxuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK2ludFxuK3l0OTIxeF9yZWdzX3VwZGF0ZV9iaXRzKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgY29uc3QgdTMyICptYXNrcyxcbitcdFx0XHRjb25zdCB1MzIgKnZhbHMsIHVuc2lnbmVkIGludCBudW1fcmVncylcbit7XG4rXHRib29sIGNoYW5nZWQgPSBmYWxzZTtcbitcdHUzMiB2c1s0XTtcbitcdGludCByZXM7XG4rXG4rXHRpZiAoV0FSTl9PTl9PTkNFKG51bV9yZWdzIFx1MDAzZSBBUlJBWV9TSVpFKHZzKSkpXG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1xuK1x0cmVzID0geXQ5MjF4X3JlZ3NfcmVhZChwcml2LCByZWcsIHZzLCBudW1fcmVncyk7XG4rXHRpZiAocmVzKVxuK1x0XHRyZXR1cm4gcmVzO1xuK1xuK1x0Zm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgXHUwMDNjIG51bV9yZWdzOyBpKyspIHtcbitcdFx0dTMyIHUgPSB2c1tpXTtcbitcbitcdFx0dSBcdTAwMjY9IH5tYXNrc1tpXTtcbitcdFx0dSB8PSB2YWxzW2ldO1xuK1x0XHRpZiAodSAhPSB2c1tpXSlcbitcdFx0XHRjaGFuZ2VkID0gdHJ1ZTtcbitcbitcdFx0dnNbaV0gPSB1O1xuK1x0fVxuK1xuK1x0aWYgKCFjaGFuZ2VkKVxuK1x0XHRyZXR1cm4gMDtcbitcbitcdHJldHVybiB5dDkyMXhfcmVnc193cml0ZShwcml2LCByZWcsIHZzLCBudW1fcmVncyk7XG4rfVxuK1xuK2ludFxuK3l0OTIxeF9yZWdzX2NsZWFyX2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCBjb25zdCB1MzIgKm1hc2tzLFxuK1x0XHQgICAgICAgdW5zaWduZWQgaW50IG51bV9yZWdzKVxuK3tcbitcdGJvb2wgY2hhbmdlZCA9IGZhbHNlO1xuK1x0dTMyIHZzWzRdO1xuK1x0aW50IHJlcztcbitcbitcdGlmIChXQVJOX09OX09OQ0UobnVtX3JlZ3MgXHUwMDNlIEFSUkFZX1NJWkUodnMpKSlcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXG4rXHRyZXMgPSB5dDkyMXhfcmVnc19yZWFkKHByaXYsIHJlZywgdnMsIG51bV9yZWdzKTtcbitcdGlmIChyZXMpXG4rXHRcdHJldHVybiByZXM7XG4rXG4rXHRmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSBcdTAwM2MgbnVtX3JlZ3M7IGkrKykge1xuK1x0XHR1MzIgdSA9IHZzW2ldO1xuK1xuK1x0XHR1IFx1MDAyNj0gfm1hc2tzW2ldO1xuK1x0XHRpZiAodSAhPSB2c1tpXSlcbitcdFx0XHRjaGFuZ2VkID0gdHJ1ZTtcbitcbitcdFx0dnNbaV0gPSB1O1xuK1x0fVxuK1xuK1x0aWYgKCFjaGFuZ2VkKVxuK1x0XHRyZXR1cm4gMDtcbitcbitcdHJldHVybiB5dDkyMXhfcmVnc193cml0ZShwcml2LCByZWcsIHZzLCBudW1fcmVncyk7XG4rfVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vc21pLmggYi9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL3NtaS5oXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uMjk5NWU5MWYzYjNkMVxuLS0tIC9kZXYvbnVsbFxuKysrIGIvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9zbWkuaFxuQEAgLTAsMCArMSw5MiBAQFxuKy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9yLWxhdGVyICovXG4rLypcbisgKiBDb3B5cmlnaHQgKGMpIDIwMjYgRGF2aWQgWWFuZ1xuKyAqL1xuK1xuKyNpZm5kZWYgX1lUX1NNSV9IXG4rI2RlZmluZSBfWVRfU01JX0hcbitcbisjaW5jbHVkZSBcdTAwM2NsaW51eC90eXBlcy5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvd29yZHBhcnQuaFx1MDAzZVxuK1xuK3N0cnVjdCB5dDkyMXhfcHJpdjtcbitcbitpbnQgeXQ5MjF4X3JlZ19yZWFkKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyICp2YWxwKTtcbitpbnQgeXQ5MjF4X3JlZ193cml0ZShzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiB2YWwpO1xuK2ludCB5dDkyMXhfcmVnX3dhaXQoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgbWFzaywgdTMyICp2YWxwKTtcbitpbnQgeXQ5MjF4X3JlZ191cGRhdGVfYml0cyhzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiBtYXNrLFxuK1x0XHRcdCAgIHUzMiB2YWwpO1xuK1xuK3N0YXRpYyBpbmxpbmUgaW50XG4reXQ5MjF4X3JlZ19zZXRfYml0cyhzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiBtYXNrKVxuK3tcbitcdHJldHVybiB5dDkyMXhfcmVnX3VwZGF0ZV9iaXRzKHByaXYsIHJlZywgMCwgbWFzayk7XG4rfVxuK1xuK3N0YXRpYyBpbmxpbmUgaW50XG4reXQ5MjF4X3JlZ19jbGVhcl9iaXRzKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyIG1hc2spXG4re1xuK1x0cmV0dXJuIHl0OTIxeF9yZWdfdXBkYXRlX2JpdHMocHJpdiwgcmVnLCBtYXNrLCAwKTtcbit9XG4rXG4rc3RhdGljIGlubGluZSBpbnRcbit5dDkyMXhfcmVnX3RvZ2dsZV9iaXRzKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyIG1hc2ssIGJvb2wgc2V0KVxuK3tcbitcdHJldHVybiB5dDkyMXhfcmVnX3VwZGF0ZV9iaXRzKHByaXYsIHJlZywgbWFzaywgIXNldCA/IDAgOiBtYXNrKTtcbit9XG4rXG4rLyogU29tZSBtdWx0aS13b3JkIHJlZ2lzdGVycywgbGlrZSBWTEFObl9DVFJMLCBzaG91bGQgYmUgdHJlYXRlZCBhcyBhIHNpbmdsZVxuKyAqIGxvbmcgcmVnaXN0ZXIuIE1vcmUgc3BlY2lmaWNhbGx5LCB3cml0ZXMgdG8gcGFydHMgb2YgaXRzIHdvcmRzIHdvbid0IGJlY29tZVxuKyAqIHZpc2libGUsIHVudGlsIHRoZSBsYXN0IHdvcmQgaXMgd3JpdHRlbi5cbisgKlxuKyAqIEhlcmUgd2UgcmVxdWlyZSBmdWxsIHJlYWQgYW5kIHdyaXRlIG9wZXJhdGlvbnMgb3ZlciB0aGVzZSByZWdpc3RlcnMgdG9cbisgKiBlbGltaW5hdGUgcG90ZW50aWFsIGlzc3VlcywgYWx0aG91Z2ggcGFydGlhbCByZWFkcy93cml0ZXMgYXJlIGFsc28gcG9zc2libGUuXG4rICovXG4rXG4rc3RhdGljIGlubGluZSB2b2lkIHVwZGF0ZV9jdHJsc191bmFsaWduZWQodTMyICpsbywgdTMyICpoaSwgdTY0IG1hc2ssIHU2NCB2YWwpXG4re1xuK1x0KmxvIFx1MDAyNj0gfmxvd2VyXzMyX2JpdHMobWFzayk7XG4rXHQqaGkgXHUwMDI2PSB+dXBwZXJfMzJfYml0cyhtYXNrKTtcbitcdCpsbyB8PSBsb3dlcl8zMl9iaXRzKHZhbCk7XG4rXHQqaGkgfD0gdXBwZXJfMzJfYml0cyh2YWwpO1xuK31cbitcbisvKiB5dDkyMXhfcmVnc18qKCkgYXJlIGV4cG9ydGVkIGZvciBsaW5rYWdlIG9ubHkuIERvIG5vdCB1c2UgdGhlbSBkaXJlY3RseS4gVXNlXG4rICogeXQ5MjF4X3JlZzY0XyooKSBvciB5dDkyMXhfcmVnOTZfKigpIGluc3RlYWQuXG4rICovXG4rXG4raW50IHl0OTIxeF9yZWdzX3JlYWQoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgKnZhbHMsXG4rXHRcdCAgICAgdW5zaWduZWQgaW50IG51bV9yZWdzKTtcbitpbnQgeXQ5MjF4X3JlZ3Nfd3JpdGUoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCBjb25zdCB1MzIgKnZhbHMsXG4rXHRcdCAgICAgIHVuc2lnbmVkIGludCBudW1fcmVncyk7XG4raW50IHl0OTIxeF9yZWdzX3VwZGF0ZV9iaXRzKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgY29uc3QgdTMyICptYXNrcyxcbitcdFx0XHQgICAgY29uc3QgdTMyICp2YWxzLCB1bnNpZ25lZCBpbnQgbnVtX3JlZ3MpO1xuK2ludCB5dDkyMXhfcmVnc19jbGVhcl9iaXRzKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgY29uc3QgdTMyICptYXNrcyxcbitcdFx0XHQgICB1bnNpZ25lZCBpbnQgbnVtX3JlZ3MpO1xuK1xuK3N0YXRpYyBpbmxpbmUgaW50XG4reXQ5MjF4X3JlZzY0X3dyaXRlKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgY29uc3QgdTMyICp2YWxzKVxuK3tcbitcdHJldHVybiB5dDkyMXhfcmVnc193cml0ZShwcml2LCByZWcsIHZhbHMsIDIpO1xuK31cbitcbitzdGF0aWMgaW5saW5lIGludFxuK3l0OTIxeF9yZWc2NF91cGRhdGVfYml0cyhzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIGNvbnN0IHUzMiAqbWFza3MsXG4rXHRcdFx0IGNvbnN0IHUzMiAqdmFscylcbit7XG4rXHRyZXR1cm4geXQ5MjF4X3JlZ3NfdXBkYXRlX2JpdHMocHJpdiwgcmVnLCBtYXNrcywgdmFscywgMik7XG4rfVxuK1xuK3N0YXRpYyBpbmxpbmUgaW50XG4reXQ5MjF4X3JlZzY0X2NsZWFyX2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCBjb25zdCB1MzIgKm1hc2tzKVxuK3tcbitcdHJldHVybiB5dDkyMXhfcmVnc19jbGVhcl9iaXRzKHByaXYsIHJlZywgbWFza3MsIDIpO1xuK31cbitcbitzdGF0aWMgaW5saW5lIGludFxuK3l0OTIxeF9yZWc5Nl93cml0ZShzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIGNvbnN0IHUzMiAqdmFscylcbit7XG4rXHRyZXR1cm4geXQ5MjF4X3JlZ3Nfd3JpdGUocHJpdiwgcmVnLCB2YWxzLCAzKTtcbit9XG4rXG4rI2VuZGlmXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNlQyMDozOTowMi43MDY2NTM2NTdaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMzUxMTQ4NzUwMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipXb3J0aEZ1enppbmcgQXNzZXNzbWVudDogTW90b3Jjb21tIFlUOTIxNSBFdGhlcm5ldCBTd2l0Y2ggRHJpdmVyKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBhZGRzIExFRCBzdXBwb3J0IGZvciB0aGUgTW90b3Jjb21tIFlUOTIxNSBldGhlcm5ldCBzd2l0Y2ggY2hpcCwgbW92aW5nIHRoZSBkcml2ZXIgYXJvdW5kIGFuZCBpbnRyb2R1Y2luZyBhIG5ldyBjb25maWcgb3B0aW9uLiBNeSBmaXJzdCB0aG91Z2h0IGlzOiBjYW4gSSBldmVuIHJlYWNoIHRoaXMgdGhpbmcgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCBsaWtlIFFFTVU/IERTQSBkcml2ZXJzLCBpbiBnZW5lcmFsLCBhcmUgZm9yIHBoeXNpY2FsIHN3aXRjaCBjaGlwcywgY29ubmVjdGVkIHZpYSBNRElPL1NQSS9JMkMsIHdoaWNoIG1ha2VzIG1lIGRvdWJ0IGl0LiBVbmxlc3MgdGhlcmUncyAqc3BlY2lmaWMqIFFFTVUgZW11bGF0aW9uIGZvciB0aGlzIHBhcnRpY3VsYXIgY2hpcCwgb3IgbWF5YmUgZXZlbiBhIHNvZnR3YXJlLWVtdWxhdGVkIHZlcnNpb24gd2l0aGluIHRoZSBrZXJuZWwsIEknbSBvdXQgb2YgbHVjay4gSSdkIG5lZWQgdG8gY2hlY2sgZm9yIFFFTVUgZW11bGF0aW9uLCBidXQgd2l0aG91dCBzb3VyY2UsIGl0J3MgZGlmZmljdWx0LiBEU0EgZHJpdmVycyBhcmVuJ3QgdXN1YWxseSBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuXG5Db3VsZCBJIGdldCBhcm91bmQgaXQgd2l0aCBhIGRldmljZSB0cmVlIG92ZXJsYXksIG9yIHVzZXItc3BhY2UgdG9vbHMgbGlrZSBgaTJjLXN0dWJgIG9yIGBtZGlvLW1vY2t1cGA/IGBtZGlvLW1vY2t1cGAgZXhpc3RzLCBidXQgaXQncyByZWFsbHkgZm9yIFBIWXMsIHNvIEkgZG9uJ3Qga25vdyBpZiBpdCdsbCBlbXVsYXRlIGEgZnVsbCBEU0Egc3dpdGNoLiBFdmVuIGlmIGl0ICpjb3VsZCosIGlzIGl0IHdvcnRoIGZ1enppbmc/IFRoZXNlIGhhcmR3YXJlLXNwZWNpZmljIGRyaXZlcnMgdGhhdCBuZWVkIHBoeXNpY2FsIGhhcmR3YXJl4oCURFNBIHN3aXRjaGVzLCBQSFlz4oCUdXN1YWxseSBhcmVuJ3QgZnV6emVkIHVubGVzcyB0aGVyZSdzIHNvZnR3YXJlIGVtdWxhdGlvbiBvciB0aGV5J3JlIHBhcnQgb2YgYSBtb2NrYWJsZSBnZW5lcmljIHN1YnN5c3RlbS5cblxuTG9va2luZyBhdCB0aGUgaW5zdHJ1Y3Rpb25zIGFnYWluLCBpdCBzYXlzIHRvIHJldHVybiBgV29ydGhGdXp6aW5nPWZhbHNlYCBpZiB0aGUgY29kZSBwYXRoIGlzIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLCBldmVuIHdpdGggc29mdHdhcmUgZW11bGF0aW9uLCBvciBpZiBpdCdzIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzLiBUaGlzIGlzIGEgdmVuZG9yLXNwZWNpZmljIEV0aGVybmV0IHN3aXRjaCBjaGlwIGRyaXZlciwgc28gaXQgZmFsbHMgaW50byB0aGUgZmlyc3QgY2F0ZWdvcnkuIEl0J3MgYW4gTURJTyBkZXZpY2UuIENhbiBNRElPIGRldmljZXMgYmUgZnV6emVkIGluIHN5emthbGxlcj8gU3l6a2FsbGVyIGhhcyBJMkMvU1BJIGZ1enppbmcsIGJ1dCBJIGRvbid0IHJlY2FsbCBpdCBiZWluZyBmb3IgTURJTyBkaXJlY3RseSwgb3IgRFNBLCBmb3IgdGhhdCBtYXR0ZXIuXG5cblRoZSBwcm9tcHQgc3BlY2lmaWNhbGx5IG1lbnRpb25zIGNvZGUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsIGVudmlyb25tZW50cy4gVGhpcyBpcyBhIERTQSBzd2l0Y2ggZHJpdmVyIHRoYXQgbmVlZHMgYW4gTURJTyBidXMgYW5kIGEgZGV2aWNlIHRyZWUgc2V0dXAsIHNvIGluIGEgc3RhbmRhcmQgUUVNVSBlbnZpcm9ubWVudCwgd2l0aG91dCAqc3BlY2lmaWMqIGVtdWxhdGlvbiwgaXQncyBoaWdobHkgdW5saWtlbHkgdG8gYmUgcmVhY2hhYmxlLiBUaGVyZWZvcmUsIGBXb3J0aEZ1enppbmc9ZmFsc2VgLlxuXG5MZXQgbWUganVzdCBkb3VibGUtY2hlY2ssIHRob3VnaCwgdG8gYmUgYWJzb2x1dGVseSBzdXJlLiBUaGlzIGRyaXZlciByZWdpc3RlcnMgaXRzZWxmIGFzIGFuIE1ESU8gZGV2aWNlIGRyaXZlcjogYG1kaW9fZHJpdmVyX3JlZ2lzdGVyKFx1MDAyNnl0OTIxeF9tZGlvX2RyaXZlcilgLiBGb3IgdGhlIGRyaXZlciB0byBwcm9iZSwgYW4gTURJTyBkZXZpY2Ugd2l0aCBhIG1hdGNoaW5nIElEIG9yIGRldmljZSB0cmVlIGNvbXBhdGlibGUgc3RyaW5nIG5lZWRzIHRvIGJlIHByZXNlbnQuIEluIFFFTVUsIHVubGVzcyB0aGVyZSdzIGEgc3BlY2lmaWMgYm9hcmQgaW5zdGFudGlhdGlvbiwgaXQgd29uJ3QgcHJvYmUuIFdoaWxlIHN5emthbGxlciBjYW4gaW5qZWN0IGRldmljZSB0cmVlIG5vZGVzLCB0aGUgZHJpdmVyIHdvdWxkIHN0aWxsIHRyeSB0byByZWFkL3dyaXRlIE1ESU8gcmVnaXN0ZXJzLiBJZiB0aGVyZSdzIG5vIGhhcmR3YXJlLCB0aGUgcHJvYmUgd2lsbCBmYWlsIGVhcmx5LCBsaWtlbHkgYnkgY2hlY2tpbmcgYSBoYXJkd2FyZSBJRC4gTGV0J3MgbG9vayBhdCBgeXQ5MjF4X21kaW9fcHJvYmVgIGp1c3QgdG8gZG91YmxlIGNoZWNrLCB0aG91Z2ggSSBkb24ndCBoYXZlIHRoZSBzb3VyY2UgZm9yIHRoYXQgYXQgdGhlIG1vbWVudC4gQnV0IHRoZSBjb25jbHVzaW9uIHJlbWFpbnM6IG5vdCB3b3J0aCBmdXp6aW5nLCBiYXNlZCBvbiB0aGlzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTQ0OCwiT3V0cHV0VG9rZW5zIjoyNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwNTcsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNlQyMDozOToxNi4yMTgxNDQ0M1oiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjk0NTM5Mzk3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInl0OTIxeF9tZGlvX3Byb2JlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jPTQ2ODI9c3RhdGljIHZvaWQgeXQ5MjF4X21kaW9fcmVtb3ZlKHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldilcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTQ3MTctXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6NDcxODpzdGF0aWMgaW50IHl0OTIxeF9tZGlvX3Byb2JlKHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldilcXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy00NzE5LXtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jPTQ3NzI9c3RhdGljIHN0cnVjdCBtZGlvX2RyaXZlciB5dDkyMXhfbWRpb19kcml2ZXIgPSB7XFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6NDc3MzpcXHQucHJvYmUgPSB5dDkyMXhfbWRpb19wcm9iZSxcXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy00Nzc0LVxcdC5yZW1vdmUgPSB5dDkyMXhfbWRpb19yZW1vdmUsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE2VDIwOjM5OjE3LjkxMjY5MTU4N1oiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUwOTM4ODIxNTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIHRoZSBgeXQ5MjF4X21kaW9fcHJvYmVgIEZ1bmN0aW9uKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIGB5dDkyMXhfbWRpb19wcm9iZWAuIE15IGltbWVkaWF0ZSBnb2FsIGlzIHRvIHVuZGVyc3RhbmQgaXRzIHJvbGUgd2l0aGluIHRoZSBicm9hZGVyIGZyYW1ld29yaywgcHJlc3VtYWJseSByZWxhdGVkIHRvIHRoZSBpbml0aWFsaXphdGlvbiBhbmQgaW50ZXJhY3Rpb24gd2l0aCBhbiBNRElPIChNYW5hZ2VtZW50IERhdGEgSW5wdXQvT3V0cHV0KSBpbnRlcmZhY2UsIGxpa2VseSBhc3NvY2lhdGVkIHdpdGggYSBQSFkgb3Igb3RoZXIgbmV0d29yayBkZXZpY2Ugd2l0aGluIGEgc3lzdGVtIGxldmVyYWdpbmcgYSBZdDkyMXggY2hpcC4gSSdsbCBiZSBsb29raW5nIGZvciBrZXkgYXNwZWN0czpcblxuKiAgICoqRGV2aWNlIFRyZWUgSW50ZXJhY3Rpb246KiogSG93IGRvZXMgdGhpcyBmdW5jdGlvbiB1dGlsaXplIHRoZSBEZXZpY2UgVHJlZSAob3IgZXF1aXZhbGVudCBjb25maWd1cmF0aW9uIG1lY2hhbmlzbSkgdG8gaWRlbnRpZnkgYW5kIGNvbmZpZ3VyZSB0aGUgc3BlY2lmaWMgTURJTyBjb250cm9sbGVyIGFuZCBhdHRhY2hlZCBQSFkocyk/IEknbGwgYmUgc2VhcmNoaW5nIGZvciBjYWxscyB0byBmdW5jdGlvbnMgbGlrZSBgb2ZfbWF0Y2hfdGFibGVgLCBgb2ZfcHJvcGVydHlfcmVhZF8qYCwgYW5kIHRoZSBsaWtlLiBUaGlzIHdpbGwgYmUgdGhlIGZvdW5kYXRpb25hbCBpbmZvcm1hdGlvbi5cbiogICAqKlJlc291cmNlIEFsbG9jYXRpb246KiogV2hhdCByZXNvdXJjZXMgZG9lcyBpdCByZXF1ZXN0IGFuZCBtYW5hZ2U/IFNwZWNpZmljYWxseSwgSSdtIGludGVyZXN0ZWQgaW4gbWVtb3J5IHJlZ2lvbnMgKGZvciBNTUlPIGFjY2VzcyksIGludGVycnVwdCBsaW5lcywgYW5kIHBvc3NpYmx5IGNsb2NrIGNvbmZpZ3VyYXRpb25zLiBUaGlzIGluY2x1ZGVzIGhvdyBpdCBoYW5kbGVzIGVycm9yIGNvbmRpdGlvbnMgcmVsYXRlZCB0byByZXNvdXJjZSBhbGxvY2F0aW9uLCBhbmQgd2hhdCBpdCBkb2VzIGluIGNhc2Ugb2YgZmFpbHVyZXMuXG4qICAgKipNRElPIENvbnRyb2xsZXIgSW5pdGlhbGl6YXRpb246KiogSSBuZWVkIHRvIGZpbmQgdGhlIHNwZWNpZmljIGluaXRpYWxpemF0aW9uIHJvdXRpbmVzIGZvciB0aGUgdW5kZXJseWluZyBNRElPIGNvbnRyb2xsZXIuIFRoaXMgbWlnaHQgaW52b2x2ZSBzZXR0aW5nIHVwIHRoZSBjbG9jayBmcmVxdWVuY3ksIGNvbmZpZ3VyaW5nIHRoZSBNRElPIGJ1cyBzcGVlZCwgYW5kIHBvdGVudGlhbGx5IGVuYWJsaW5nIHNwZWNpZmljIE1ESU8gZnVuY3Rpb25hbGl0aWVzIChsaWtlIGF1dG8tbmVnb3RpYXRpb24sIGV0Yy4pLiBJIGFudGljaXBhdGUgbG93LWxldmVsIHJlZ2lzdGVyIHdyaXRlcyBhdCBzb21lIHBvaW50LlxuKiAgICoqUEhZIERldGVjdGlvbiBhbmQgQ29uZmlndXJhdGlvbjoqKiBJcyB0aGVyZSBQSFkgZGV0ZWN0aW9uIGludm9sdmVkPyBEb2VzIGl0IHByb2JlIGZvciBzcGVjaWZpYyBQSFlzIG9yIHVzZSBhIGdlbmVyaWMgYXBwcm9hY2g/IFdoYXQgYXJlIHRoZSBtZWNoYW5pc21zIGZvciBjb25maWd1cmluZyB0aGUgZGV0ZWN0ZWQgUEhZPyBUaGlzIGlzIGNyaXRpY2FsIGZvciB1bmRlcnN0YW5kaW5nIHRoZSBkZXZpY2UncyBvcGVyYXRpb25hbCBjaGFyYWN0ZXJpc3RpY3MuIEkgZXhwZWN0IHRvIHNlZSByZWdpc3RlciBhY2Nlc3NlcywgYnV0IEknbSBsb29raW5nIGZvciB0aGUgb3ZlcmFsbCBsb2dpYyB0byBzZWUgaG93IHRoZSBzb2Z0d2FyZSBkZXRlcm1pbmVzIHdoZXRoZXIgUEhZcyBhcmUgcHJlc2VudCBvciBub3QuXG4qICAgKipEcml2ZXIgUmVnaXN0cmF0aW9uOioqIEhvdyBkb2VzIHRoZSBkcml2ZXIgcmVnaXN0ZXIgaXRzZWxmIHdpdGggdGhlIGtlcm5lbCdzIE1ESU8gc3Vic3lzdGVtIChpZiBhcHBsaWNhYmxlKT8gSSdsbCBsb29rIGZvciByZWdpc3RyYXRpb25zIG9mIGJ1cyBkcml2ZXJzLCBkZXZpY2UgZHJpdmVycywgb3IgYW55dGhpbmcgcmVsYXRlZCB0byB0aGUga2VybmVsJ3MgY29yZSBNRElPIEFQSS4gSSdtIHRyeWluZyB0byBzZWUgaG93IHRoZSBzeXN0ZW0gdW5kZXJzdGFuZHMgd2hhdCBpcyBjb25uZWN0ZWQuXG4qICAgKipFcnJvciBIYW5kbGluZzoqKiBJdCB3aWxsIGJlIGltcG9ydGFudCB0byBjYXJlZnVsbHkgZXhhbWluZSB0aGUgZXJyb3IgY29uZGl0aW9ucyBhbmQgaGFuZGxpbmcgdGhyb3VnaG91dCB0aGUgZnVuY3Rpb24uIEFyZSB0aGVyZSByZXRyaWVzPyBGYWxsYmFja3M/IEdyYWNlZnVsIGVycm9yIHJlcG9ydGluZz8gSG93IGRvZXMgaXQgaGFuZGxlIGRldmljZS1zcGVjaWZpYyBpc3N1ZXM/IEknbGwgYmUgYXNzZXNzaW5nIHRoZSByb2J1c3RuZXNzIG9mIHRoZSBpbXBsZW1lbnRhdGlvbi5cblxuSW4gZXNzZW5jZSwgSSBuZWVkIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2YgaG93IHRoaXMgZnVuY3Rpb24gc2V0cyB1cCB0aGUgTURJTyBpbnRlcmZhY2UsIGRpc2NvdmVycyBhbmQgY29uZmlndXJlcyBhbnkgY29ubmVjdGVkIFBIWXMsIGFuZCBpbnRlZ3JhdGVzIHdpdGggdGhlIHJlc3Qgb2YgdGhlIHN5c3RlbS4gSSdtIHJlYWR5IHRvIGRpZyBpbnRvIHRoZSBjb2RlIGFuZCBzdGFydCBmaWd1cmluZyB0aGlzIG91dC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjM0NDksIk91dHB1dFRva2VucyI6NDIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNlQyMDozOToyMy4wMDY1NzY0MVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI0MDQ3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA0NzE4LFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCI0NzE4OlxcdHN0YXRpYyBpbnQgeXQ5MjF4X21kaW9fcHJvYmUoc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2KVxcbjQ3MTk6XFx0e1xcbjQ3MjA6XFx0XFx0c3RydWN0IGRldmljZSAqZGV2ID0gXFx1MDAyNm1kaW9kZXYtXFx1MDAzZWRldjtcXG40NzIxOlxcdFxcdHN0cnVjdCB5dDkyMXhfcmVnX21kaW8gKm1kaW87XFxuNDcyMjpcXHRcXHRzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXY7XFxuNDcyMzpcXHRcXHRzdHJ1Y3QgZHNhX3N3aXRjaCAqZHM7XFxuNDcyNDpcXHRcXG40NzI1OlxcdFxcdHByaXYgPSBkZXZtX2t6YWxsb2MoZGV2LCBzaXplb2YoKnByaXYpLCBHRlBfS0VSTkVMKTtcXG40NzI2OlxcdFxcdGlmICghcHJpdilcXG40NzI3OlxcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbjQ3Mjg6XFx0XFxuNDcyOTpcXHRcXHRtZGlvID0gZGV2bV9remFsbG9jKGRldiwgc2l6ZW9mKCptZGlvKSwgR0ZQX0tFUk5FTCk7XFxuNDczMDpcXHRcXHRpZiAoIW1kaW8pXFxuNDczMTpcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG40NzMyOlxcdFxcbjQ3MzM6XFx0XFx0bWRpby1cXHUwMDNlYnVzID0gbWRpb2Rldi1cXHUwMDNlYnVzO1xcbjQ3MzQ6XFx0XFx0bWRpby1cXHUwMDNlYWRkciA9IG1kaW9kZXYtXFx1MDAzZWFkZHI7XFxuNDczNTpcXHRcXHRtZGlvLVxcdTAwM2Vzd2l0Y2hpZCA9IDA7XFxuNDczNjpcXHRcXG40NzM3OlxcdFxcdG11dGV4X2luaXQoXFx1MDAyNnByaXYtXFx1MDAzZXJlZ19sb2NrKTtcXG40NzM4OlxcdFxcbjQ3Mzk6XFx0XFx0cHJpdi1cXHUwMDNlcmVnX29wcyA9IFxcdTAwMjZ5dDkyMXhfcmVnX29wc19tZGlvO1xcbjQ3NDA6XFx0XFx0cHJpdi1cXHUwMDNlcmVnX2N0eCA9IG1kaW87XFxuNDc0MTpcXHRcXG40NzQyOlxcdFxcdGZvciAoc2l6ZV90IGkgPSAwOyBpIFxcdTAwM2MgQVJSQVlfU0laRShwcml2LVxcdTAwM2Vwb3J0cyk7IGkrKykge1xcbjQ3NDM6XFx0XFx0XFx0c3RydWN0IHl0OTIxeF9wb3J0ICpwcCA9IFxcdTAwMjZwcml2LVxcdTAwM2Vwb3J0c1tpXTtcXG40NzQ0OlxcdFxcbjQ3NDU6XFx0XFx0XFx0cHAtXFx1MDAzZWluZGV4ID0gaTtcXG40NzQ2OlxcdFxcdFxcdElOSVRfREVMQVlFRF9XT1JLKFxcdTAwMjZwcC1cXHUwMDNlbWliX3JlYWQsIHl0OTIxeF9wb2xsX21pYik7XFxuNDc0NzpcXHRcXHR9XFxuNDc0ODpcXHRcXG40NzQ5OlxcdFxcdGRzID0gXFx1MDAyNnByaXYtXFx1MDAzZWRzO1xcbjQ3NTA6XFx0XFx0ZHMtXFx1MDAzZWRldiA9IGRldjtcXG40NzUxOlxcdFxcdGRzLVxcdTAwM2Vhc3Npc3RlZF9sZWFybmluZ19vbl9jcHVfcG9ydCA9IHRydWU7XFxuNDc1MjpcXHRcXHRkcy1cXHUwMDNlZHNjcF9wcmlvX21hcHBpbmdfaXNfZ2xvYmFsID0gdHJ1ZTtcXG40NzUzOlxcdFxcdGRzLVxcdTAwM2Vwcml2ID0gcHJpdjtcXG40NzU0OlxcdFxcdGRzLVxcdTAwM2VvcHMgPSBcXHUwMDI2eXQ5MjF4X2RzYV9zd2l0Y2hfb3BzO1xcbjQ3NTU6XFx0XFx0ZHMtXFx1MDAzZWFnZWluZ190aW1lX21pbiA9IDEgKiA1MDAwO1xcbjQ3NTY6XFx0XFx0ZHMtXFx1MDAzZWFnZWluZ190aW1lX21heCA9IFUxNl9NQVggKiA1MDAwO1xcbjQ3NTc6XFx0XFx0ZHMtXFx1MDAzZXBoeWxpbmtfbWFjX29wcyA9IFxcdTAwMjZ5dDkyMXhfcGh5bGlua19tYWNfb3BzO1xcbjQ3NTg6XFx0XFx0ZHMtXFx1MDAzZW51bV9sYWdfaWRzID0gWVQ5MjFYX0xBR19OVU07XFxuNDc1OTpcXHRcXHRkcy1cXHUwMDNlbnVtX3BvcnRzID0gWVQ5MjFYX1BPUlRfTlVNO1xcbjQ3NjA6XFx0XFxuNDc2MTpcXHRcXHRtZGlvZGV2X3NldF9kcnZkYXRhKG1kaW9kZXYsIHByaXYpO1xcbjQ3NjI6XFx0XFxuNDc2MzpcXHRcXHRyZXR1cm4gZHNhX3JlZ2lzdGVyX3N3aXRjaChkcyk7XFxuNDc2NDpcXHR9XFxuNDc2NTpcXHRcXG40NzY2OlxcdHN0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIHl0OTIxeF9vZl9tYXRjaFtdID0ge1xcbjQ3Njc6XFx0XFx0eyAuY29tcGF0aWJsZSA9IFxcXCJtb3RvcmNvbW0seXQ5MjE1XFxcIiB9LFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNlQyMDozOToyMy4wMDY4MTg5M1oiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM5MzIxMDc4NDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBEU0EgU3dpdGNoIFByb2JlKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwcm9iZSBmdW5jdGlvbiBhbmQgaXQncyB0cnlpbmcgdG8gcmVnaXN0ZXIgYSBEU0Egc3dpdGNoLiBUaGF0J3MgdGhlIHN0YXJ0aW5nIHBvaW50LiBCdXQsIHRoZSBjcnVjaWFsIHBpZWNlIGlzIHRoYXQgdGhpcyBwcm9iZSByZXF1aXJlcyBhbiBNRElPIGRldmljZSB0byBiZSBwcmVzZW50LCBhbmQgc3BlY2lmaWNhbGx5LCBvbmUgdGhhdCBpZGVudGlmaWVzIGl0c2VsZiB3aXRoIHRoZSBcIm1vdG9yY29tbSx5dDkyMTVcIiBjb21wYXRpYmxlIHN0cmluZy5cblxuVGhlIGltbWVkaWF0ZSBwcm9ibGVtIGlzIHRoYXQgU3l6a2FsbGVyLCBpbiBpdHMgY3VycmVudCBzdGF0ZSwgaXNuJ3QgY2FwYWJsZSBvZiBlbXVsYXRpbmcgZWl0aGVyIE1ESU8gZGV2aWNlcyBvciBEU0Egc3dpdGNoZXMuIEkgY2FuIHNlZSBhIHBvdGVudGlhbCB3b3JrYXJvdW5kIOKAkyBpbmplY3RpbmcgYSBkZXZpY2UgdHJlZSBub2RlLCB0aGVvcmV0aWNhbGx5LCBjb3VsZCB0cmlnZ2VyIHRoZSBwcm9iZSBmdW5jdGlvbi4gQnV0IGV2ZW4gaWYgSSBnb3QgdGhhdCBmYXIsIHRoZSBkcml2ZXIgaXMgaW1tZWRpYXRlbHkgZ29pbmcgdG8gdHJ5IGFuZCB0YWxrIHRvIHRoZSBoYXJkd2FyZSB1c2luZyBNRElPLiBJJ20gdGhpbmtpbmcgc3BlY2lmaWNhbGx5IGFib3V0IHRoYXQgYHl0OTIxeF9kc2Ffc2V0dXBgIGZ1bmN0aW9uOyBpdCdzIGNhbGxlZCBieSBgZHNhX3JlZ2lzdGVyX3N3aXRjaGAsIHNvIGl0J3MgYSBrZXkgcGFydCBvZiB0aGUgc2V0dXAuIEkgbmVlZCB0byB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgdGhhdCBmdW5jdGlvbiB0byByZWFsbHkgdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgcmVsaWFuY2Ugb24gTURJTy4gTGV0J3MgZGlnIGludG8gYHl0OTIxeF9kc2Ffc2V0dXBgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNDk0NCwiT3V0cHV0VG9rZW5zIjoyNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyOCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE2VDIwOjM5OjI2LjkzODkzMjA0MloiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjcyOTczMTk1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInl0OTIxeF9kc2Ffc2V0dXBcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM9NDQ5NT1zdGF0aWMgaW50IHl0OTIxeF9jaGlwX3NldHVwKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdilcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTQ1MzYtXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6NDUzNzpzdGF0aWMgaW50IHl0OTIxeF9kc2Ffc2V0dXAoc3RydWN0IGRzYV9zd2l0Y2ggKmRzKVxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTQ1Mzgte1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM9NDU5OD1zdGF0aWMgY29uc3Qgc3RydWN0IGRzYV9zd2l0Y2hfb3BzIHl0OTIxeF9kc2Ffc3dpdGNoX29wcyA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTQ2NjgtXFx0LyogY2hpcCAqL1xcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjQ2Njk6XFx0LnNldHVwXFx0XFx0XFx0PSB5dDkyMXhfZHNhX3NldHVwLFxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTQ2NzAtfTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTZUMjA6Mzk6MjguNjExOTExMzQ3WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzIwODk5NjU1NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQ6XG5cbioqRGl2aW5nIGludG8gdGhlIFNldHVwIFNjcmlwdCoqXG5cbkFscmlnaHQsIHRpbWUgdG8gY3JhY2sgb3BlbiBgeXQ5MjF4X2RzYV9zZXR1cGAuIExldCdzIHNlZSB3aGF0IHdlJ3ZlIGdvdCBoZXJlLiBJJ20gZXhwZWN0aW5nIHRoaXMgc2NyaXB0IHRvIGhhbmRsZSBhbGwgdGhlIGluaXRpYWwgY29uZmlndXJhdGlvbnMgYW5kIGdyb3VuZHdvcmsgZm9yIHRoZSBEU0Egc3lzdGVtLiBJJ2xsIGJlIGxvb2tpbmcgY2xvc2VseSBhdCBob3cgaXQgaGFuZGxlcyBrZXkgZ2VuZXJhdGlvbiwgY2VydGlmaWNhdGUgbWFuYWdlbWVudCAoaWYgYXBwbGljYWJsZSksIGFuZCBhbnkgbmV0d29yayBzZXR0aW5ncyBvciBkZXBlbmRlbmNpZXMgaXQgc2V0cyB1cC4gTXkgaW1tZWRpYXRlIGZvY3VzIHdpbGwgYmUgb24gdW5kZXJzdGFuZGluZyB0aGUgYXV0b21hdGlvbiBmbG93LCBsb29raW5nIGZvciBwb3RlbnRpYWwgYXJlYXMgb2Ygb3B0aW1pemF0aW9uLCBhbmQgaWRlbnRpZnlpbmcgYW55IGFzc3VtcHRpb25zIG9yIGV4dGVybmFsIGRlcGVuZGVuY2llcyB0aGlzIHNjcmlwdCByZWxpZXMgb24uIEZyb20gYSBxdWljayBnbGFuY2UgYXQgdGhlIGZpbGUgbmFtZSwgXCJzZXR1cCxcIiBJIGFtIGV4cGVjdGluZyB0aGlzIHNjcmlwdCB0byBjb3ZlciBldmVyeXRoaW5nIGZyb20gdGhlIHN0YXJ0LiBJJ2xsIG5lZWQgdG8ga25vdyB3aGV0aGVyIHRvIG1ha2UgY2hhbmdlcyB0byB0aGlzIGZpbGUgb3IgaWYgSSBuZWVkIHRvIGxvb2sgZm9yIHNvbWV0aGluZyBkaWZmZXJlbnQuIEknbGwgYmUgbG9va2luZyB0byBxdWlja2x5IGRldGVybWluZSBpZiBpdCdzIHdlbGwtZG9jdW1lbnRlZCBhbmQgZm9sbG93cyBiZXN0IHByYWN0aWNlczsgcmVhZGFiaWxpdHkgaXMga2V5LiBJJ2xsIGJlIGNoZWNraW5nIGZvciBzZWN1cml0eSB2dWxuZXJhYmlsaXRpZXMgYXMgd2VsbC4gU2hvdWxkIGJlIGFuIGludGVyZXN0aW5nIHJlYWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI1NTk5LCJPdXRwdXRUb2tlbnMiOjQyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTZUMjA6Mzk6MzEuODIwOTExNDYyWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMwODk2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA0NTM3LFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCI0NTM3OlxcdHN0YXRpYyBpbnQgeXQ5MjF4X2RzYV9zZXR1cChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpXFxuNDUzODpcXHR7XFxuNDUzOTpcXHRcXHRzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYgPSB0b195dDkyMXhfcHJpdihkcyk7XFxuNDU0MDpcXHRcXHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSB0b19kZXZpY2UocHJpdik7XFxuNDU0MTpcXHRcXHRzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wID0gZGV2LVxcdTAwM2VvZl9ub2RlO1xcbjQ1NDI6XFx0XFx0c3RydWN0IGRldmljZV9ub2RlICpjaGlsZDtcXG40NTQzOlxcdFxcdGludCByZXM7XFxuNDU0NDpcXHRcXG40NTQ1OlxcdFxcdG11dGV4X2xvY2soXFx1MDAyNnByaXYtXFx1MDAzZXJlZ19sb2NrKTtcXG40NTQ2OlxcdFxcdHJlcyA9IHl0OTIxeF9jaGlwX3Jlc2V0KHByaXYpO1xcbjQ1NDc6XFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZwcml2LVxcdTAwM2VyZWdfbG9jayk7XFxuNDU0ODpcXHRcXG40NTQ5OlxcdFxcdGlmIChyZXMpXFxuNDU1MDpcXHRcXHRcXHRyZXR1cm4gcmVzO1xcbjQ1NTE6XFx0XFxuNDU1MjpcXHRcXHQvKiBSZWdpc3RlciB0aGUgaW50ZXJuYWwgbWRpbyBidXMuIE5vZGVzIGZvciBpbnRlcm5hbCBwb3J0cyBzaG91bGQgaGF2ZVxcbjQ1NTM6XFx0XFx0ICogcHJvcGVyIHBoeS1oYW5kbGUgcG9pbnRpbmcgdG8gdGhlaXIgUEhZcy4gTm90IGVuYWJsaW5nIHRoZSBpbnRlcm5hbFxcbjQ1NTQ6XFx0XFx0ICogYnVzIGlzIHBvc3NpYmxlLCB0aG91Z2ggcHJldHR5IHdpcmVkLCBpZiBpbnRlcm5hbCBwb3J0cyBhcmUgbm90IHVzZWQuXFxuNDU1NTpcXHRcXHQgKi9cXG40NTU2OlxcdFxcdGNoaWxkID0gb2ZfZ2V0X2NoaWxkX2J5X25hbWUobnAsIFxcXCJtZGlvXFxcIik7XFxuNDU1NzpcXHRcXHRpZiAoY2hpbGQpIHtcXG40NTU4OlxcdFxcdFxcdHJlcyA9IHl0OTIxeF9tYnVzX2ludF9pbml0KHByaXYsIGNoaWxkKTtcXG40NTU5OlxcdFxcdFxcdG9mX25vZGVfcHV0KGNoaWxkKTtcXG40NTYwOlxcdFxcdFxcdGlmIChyZXMpXFxuNDU2MTpcXHRcXHRcXHRcXHRyZXR1cm4gcmVzO1xcbjQ1NjI6XFx0XFx0fVxcbjQ1NjM6XFx0XFxuNDU2NDpcXHRcXHQvKiBFeHRlcm5hbCBtZGlvIGJ1cyBpcyBvcHRpb25hbCAqL1xcbjQ1NjU6XFx0XFx0Y2hpbGQgPSBvZl9nZXRfY2hpbGRfYnlfbmFtZShucCwgXFxcIm1kaW8tZXh0ZXJuYWxcXFwiKTtcXG40NTY2OlxcdFxcdGlmIChjaGlsZCkge1xcbjQ1Njc6XFx0XFx0XFx0cmVzID0geXQ5MjF4X21idXNfZXh0X2luaXQocHJpdiwgY2hpbGQpO1xcbjQ1Njg6XFx0XFx0XFx0b2Zfbm9kZV9wdXQoY2hpbGQpO1xcbjQ1Njk6XFx0XFx0XFx0aWYgKHJlcylcXG40NTcwOlxcdFxcdFxcdFxcdHJldHVybiByZXM7XFxuNDU3MTpcXHRcXG40NTcyOlxcdFxcdFxcdGRldl9lcnIoZGV2LCBcXFwiVW50ZXN0ZWQgZXh0ZXJuYWwgbWRpbyBidXNcXFxcblxcXCIpO1xcbjQ1NzM6XFx0XFx0XFx0cmV0dXJuIC1FTk9ERVY7XFxuNDU3NDpcXHRcXHR9XFxuNDU3NTpcXHRcXG40NTc2OlxcdFxcdG11dGV4X2xvY2soXFx1MDAyNnByaXYtXFx1MDAzZXJlZ19sb2NrKTtcXG40NTc3OlxcdFxcdHJlcyA9IHl0OTIxeF9jaGlwX3NldHVwKHByaXYpO1xcbjQ1Nzg6XFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZwcml2LVxcdTAwM2VyZWdfbG9jayk7XFxuNDU3OTpcXHRcXG40NTgwOlxcdFxcdGlmIChyZXMpXFxuNDU4MTpcXHRcXHRcXHRyZXR1cm4gcmVzO1xcbjQ1ODI6XFx0XFxuNDU4MzpcXHQjaWYgSVNfRU5BQkxFRChDT05GSUdfTkVUX0RTQV9ZVDkyMVhfTEVEUylcXG40NTg0OlxcdFxcdHJlcyA9IHl0OTIxeF9sZWRzX3NldHVwKHByaXYpO1xcbjQ1ODU6XFx0XFx0aWYgKHJlcylcXG40NTg2OlxcdFxcdFxcdGRldl93YXJuKGRldiwgXFxcIkZhaWxlZCB0byBzZXR1cCBMRURzOiAlZFxcXFxuXFxcIiwgcmVzKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTZUMjA6Mzk6MzEuODIxMjI5MjEyWiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMzODU2ODMxODUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgYXNzdW1pbmcgSSdtIGFscmVhZHkgcXVpdGUgZmFtaWxpYXIgd2l0aCBlbWJlZGRlZCBzeXN0ZW1zIGFuZCBoYXJkd2FyZSBpbnRlcmFjdGlvbjpcblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBgeXQ5MjF4X2NoaXBfcmVzZXRgIEZ1bmN0aW9uKipcblxuUmlnaHQsIHNvIEknbSBsb29raW5nIGF0IHRoaXMgYHl0OTIxeF9jaGlwX3Jlc2V0YCBmdW5jdGlvbi4gSXQgc2VlbXMgcHJldHR5IG9idmlvdXMgdGhhdCBpdHMgcHJpbWFyeSBwdXJwb3NlIGlzIHRvLCB3ZWxsLCByZXNldCB0aGUgaGFyZHdhcmUgcmVsYXRlZCB0byB0aGF0IGB5dDkyMXhgIGNoaXAuIFRoYXQncyB0aGUgZXhwZWN0ZWQgYmVoYXZpb3IsIGFueXdheS4gTXkgbWFpbiBjb25jZXJuIGlzIGdvaW5nIHRvIGJlIGhvdyBpdCBoYW5kbGVzIHRoZSBmdW5kYW1lbnRhbCBjaGVjazogd2hldGhlciB0aGUgaGFyZHdhcmUgaXMgYWN0dWFsbHkgKnByZXNlbnQqIGluIHRoZSBmaXJzdCBwbGFjZS4gSWYgdGhlIHN5c3RlbSdzIGNvbmZpZ3VyZWQgd2l0aG91dCB0aGF0IHNwZWNpZmljIGNoaXAsIEkgZG9uJ3Qgd2FudCB0aGUgZnVuY3Rpb24gdG8gY3Jhc2gsIGFuZCBJIG5lZWQgdG8ga25vdyBob3cgZ3JhY2VmdWwgdGhlIGVycm9yIGhhbmRsaW5nIGlzLiBUaW1lIHRvIGRpdmUgaW50byB0aGUgY29kZSBhbmQgc2VlIHdoYXQgaGFwcGVucyB3aGVuIHRoZXJlJ3Mgbm8gcGh5c2ljYWwgaGFyZHdhcmUgdG8gdGFsayB0bzsgSSBuZWVkIHRvIHNlZSB3aGF0IHRoZSBmdW5jdGlvbiBkb2VzIHdpdGggdGhhdCBjYXNlLiBMZXQncyBzdGFydCBieSBjaGVja2luZyBpdHMgaW1wbGVtZW50YXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI2NjUwLCJPdXRwdXRUb2tlbnMiOjIzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNlQyMDozOTozNS4yMDY5MTkwMDZaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1MDM0MzUzMTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwieXQ5MjF4X2NoaXBfcmVzZXRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM9NDIyNz1zdGF0aWMgaW50IHl0OTIxeF9jaGlwX2RldGVjdChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYpXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy00MjkzLVxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjQyOTQ6c3RhdGljIGludCB5dDkyMXhfY2hpcF9yZXNldChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYpXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNDI5NS17XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYz00NTM3PXN0YXRpYyBpbnQgeXQ5MjF4X2RzYV9zZXR1cChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy00NTQ1LVxcdG11dGV4X2xvY2soXFx1MDAyNnByaXYtXFx1MDAzZXJlZ19sb2NrKTtcXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzo0NTQ2OlxcdHJlcyA9IHl0OTIxeF9jaGlwX3Jlc2V0KHByaXYpO1xcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTQ1NDctXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZwcml2LVxcdTAwM2VyZWdfbG9jayk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE2VDIwOjM5OjM2LjcxMDM1OTIwNFoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MzI2ODE1OTY3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGFzc3VtaW5nIEknbSBkZWVwIGluIG15IHRlY2huaWNhbCBmaWVsZDpcblxuKipBbmFseXppbmcgdGhlIENhbGw6IGB5dDkyMXhfY2hpcF9yZXNldGAqKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXZlIGludG8gdGhpcy4gXCJ5dDkyMXhfY2hpcF9yZXNldFwiLi4uIEltbWVkaWF0ZWx5LCB0aGUgbmFtZSBpdHNlbGYgaXMgaW50cmlndWluZy4gVGhlIFwieXQ5MjF4XCIgc3Ryb25nbHkgc3VnZ2VzdHMgYSBzcGVjaWZpYyBjaGlwLCBsaWtlbHkgYSBjdXN0b20gb3Igc2VtaS1jdXN0b20gZGVzaWduLCBwZXJoYXBzIGEgWW90dGFUZWsgcHJvZHVjdCwgZ2l2ZW4gdGhlIG5hbWluZyBjb252ZW50aW9uLiBUaGUgdW5kZXJzY29yZSBzZXBhcmF0aW5nIFwiY2hpcFwiIGFuZCBcInJlc2V0XCIgaXMgc3RhbmRhcmQgcHJhY3RpY2UsIGluZGljYXRpbmcgdGhpcyBpcyBhIGRlZGljYXRlZCBmdW5jdGlvbiBvciByb3V0aW5lIHNwZWNpZmljYWxseSBmb3IgcmVzZXR0aW5nIHRoYXQgcGFydGljdWxhciBoYXJkd2FyZSBjb21wb25lbnQuXG5cblNvLCBteSBtaW5kIGlzIGFscmVhZHkgZm9ybXVsYXRpbmcgcXVlc3Rpb25zLiBXaGF0IGtpbmQgb2YgcmVzZXQgYXJlIHdlIHRhbGtpbmcgYWJvdXQ/IElzIGl0IGEgaGFyZCByZXNldCwgYSBzb2Z0IHJlc2V0LCBhIHJlZ2lzdGVyLWxldmVsIHJlc2V0LCBvciBzb21ldGhpbmcgZWxzZSBlbnRpcmVseT8gVGhlIHNwZWNpZmljaXR5IG9mIHRoZSBuYW1lIGltcGxpZXMgYSBtb3JlIHRhcmdldGVkIGFwcHJvYWNoIHRoYW4gYSBnZW5lcmFsIHN5c3RlbSByZXNldCwgd2hpY2ggcGlxdWVzIG15IGludGVyZXN0LlxuXG5JJ2xsIG5lZWQgdG8ga25vdyB0aGUgY29udGV4dDogd2hlcmUgaXMgdGhpcyBmdW5jdGlvbiBjYWxsZWQgZnJvbT8gV2hhdCBhcmUgdGhlIHBvdGVudGlhbCB0cmlnZ2VyIGNvbmRpdGlvbnM/IFdoYXQncyB0aGUgZXJyb3IgaGFuZGxpbmcgbGlrZT8gQXJlIHRoZXJlIGFueSBwcmVjb25kaXRpb25zIHRoYXQgbmVlZCB0byBiZSBtZXQgYmVmb3JlIGNhbGxpbmcgaXQ/IEhvdyBpcyB0aGUgY2hpcCdzIHN0YXRlIGludGVycm9nYXRlZCBhZnRlciB0aGUgcmVzZXQgdG8gZW5zdXJlIGEgY2xlYW4gc2xhdGU/IFRoaXMgaXMgaW1wb3J0YW50LiBJZiB0aGUgY2hpcCBoYXMgYSBzdGF0ZSBtYWNoaW5lLCB0aGUgcmVzZXQgbXVzdCByZXR1cm4gaXQgdG8gYSBrbm93biBzdGF0ZTsgb3RoZXJ3aXNlLCB0aGVyZSB3aWxsIGJlIGlzc3Vlcy5cblxuSSdtIG1lbnRhbGx5IHByZXBhcmluZyB0byBsb29rIGZvciB0aGUgZnVuY3Rpb24ncyBkZWZpbml0aW9uLCB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGl0IHVzZXMsIGFuZCBhbnkgcmVsYXRlZCBkb2N1bWVudGF0aW9uLiBJJ2xsIGJlIGxvb2tpbmcgZm9yIGNsdWVzIGFib3V0IHRoZSBoYXJkd2FyZSByZWdpc3RlciBtYXBwaW5ncywgaW50ZXJydXB0IGhhbmRsaW5nLCBhbmQgYW55IHBvdGVudGlhbCBzaWRlIGVmZmVjdHMgb24gb3RoZXIgcGFydHMgb2YgdGhlIHN5c3RlbS4gSSBoYXZlIGFuIGludGVybmFsIGxpc3Qgb2YgcG90ZW50aWFsIGdvdGNoYXMgdG8gd2F0Y2ggZm9yLCBsaWtlIHBvd2VyIHNlcXVlbmNpbmcgb3IgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyBkdXJpbmcgdGhlIHJlc2V0IHByb2Nlc3MuIFRoaXMgaXMgZ29pbmcgdG8gYmUgZ29vZC4gTGV0J3Mgc2VlIHdoYXQncyBpbiB0aGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjcyMTAsIk91dHB1dFRva2VucyI6NDIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNlQyMDozOTo0Mi4wMzcxNzc1MzFaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjgwMTcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDQyOTQsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjQyOTQ6XFx0c3RhdGljIGludCB5dDkyMXhfY2hpcF9yZXNldChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYpXFxuNDI5NTpcXHR7XFxuNDI5NjpcXHRcXHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSB0b19kZXZpY2UocHJpdik7XFxuNDI5NzpcXHRcXHR1MTYgZXRoX3BfdGFnO1xcbjQyOTg6XFx0XFx0dTMyIHZhbDtcXG40Mjk5OlxcdFxcdGludCByZXM7XFxuNDMwMDpcXHRcXG40MzAxOlxcdFxcdHJlcyA9IHl0OTIxeF9jaGlwX2RldGVjdChwcml2KTtcXG40MzAyOlxcdFxcdGlmIChyZXMpXFxuNDMwMzpcXHRcXHRcXHRyZXR1cm4gcmVzO1xcbjQzMDQ6XFx0XFxuNDMwNTpcXHRcXHQvKiBSZXNldCAqL1xcbjQzMDY6XFx0XFx0cmVzID0geXQ5MjF4X3JlZ193cml0ZShwcml2LCBZVDkyMVhfUlNULCBZVDkyMVhfUlNUX0hXKTtcXG40MzA3OlxcdFxcdGlmIChyZXMpXFxuNDMwODpcXHRcXHRcXHRyZXR1cm4gcmVzO1xcbjQzMDk6XFx0XFxuNDMxMDpcXHRcXHQvKiBSU1RfSFcgaXMgYWxtb3N0IHNhbWUgYXMgR1BJTyBoYXJkIHJlc2V0LCBzbyB3ZSBuZWVkIHRoaXMgZGVsYXkuICovXFxuNDMxMTpcXHRcXHRmc2xlZXAoWVQ5MjFYX1JTVF9ERUxBWV9VUyk7XFxuNDMxMjpcXHRcXG40MzEzOlxcdFxcdHZhbCA9IDA7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE2VDIwOjM5OjQyLjAzNzQ1OTIyMVoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MzQxNDE3MTE0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyB0aGUgQ2hpcCBJRCBEZXRlY3Rpb24gUHJvY2VkdXJlKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgYHl0OTIxeF9jaGlwX2RldGVjdGAuIFRoZSBmdW5jdGlvbidzIGpvYiBpcyBzdHJhaWdodGZvcndhcmQ6IGRldGVybWluZSB0aGUgc3BlY2lmaWMgc2lsaWNvbiByZXZpc2lvbiBvZiB0aGUgYHl0OTIxeGAgY2hpcCB3ZSdyZSBkZWFsaW5nIHdpdGguIFRoZSBwcmltYXJ5IG1lY2hhbmlzbSBpcyBhIHJlZ2lzdGVyIHJlYWQuIFRoYXQncyBhIGNsYXNzaWMgYW5kIGVmZmljaWVudCBhcHByb2FjaC4gSSdtIGFzc3VtaW5nIHRoaXMgcmVnaXN0ZXIgaG9sZHMgYSB1bmlxdWUgaWRlbnRpZmllciBvciBhIG1hc2thYmxlIHZhbHVlIHRoYXQgYWxsb3dzIGRpZmZlcmVudGlhdGlvbiBiZXR3ZWVuIHZhcmlvdXMgaGFyZHdhcmUgcmV2aXNpb25zLiBJJ2xsIG5lZWQgdG8gZGlnIGludG8gdGhlIGRhdGFzaGVldCBmb3IgdGhhdCBjaGlwIHRvIGZpZ3VyZSBvdXQgdGhlIGV4YWN0IHJlZ2lzdGVyIGFkZHJlc3MgYW5kIHRoZSBiaXQgZmllbGQgbGF5b3V0LiBJJ2xsIGFsc28gd2FudCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhlIHBvc3NpYmxlIHZhbHVlcy4gQXJlIHdlIGp1c3QgaWRlbnRpZnlpbmcgZGlmZmVyZW50IHJldmlzaW9ucywgb3IgYXJlIHRoZXJlIGZ1bmN0aW9uYWwgZGlmZmVyZW5jZXMgdGllZCB0byB0aGVzZSBJRHM/IElmIHNvLCBJJ2xsIGhhdmUgdG8gbWFrZSBzdXJlIHRoZSBjb2RlIGhhbmRsZXMgdGhlc2UgdmFyaWF0aW9ucyBjb3JyZWN0bHkuIEknbGwgYmUgbG9va2luZyBmb3IgYW55IGVycm9yIGhhbmRsaW5nIGFyb3VuZCB0aGUgcmVnaXN0ZXIgcmVhZCBpdHNlbGYuIFdoYXQgaGFwcGVucyBpZiB0aGUgcmVhZCBmYWlscz8gRG9lcyBpdCByZXRyeSwgb3IgZG9lcyBpdCBhc3N1bWUgYSBkZWZhdWx0IElEPyBSb2J1c3QgZXJyb3IgaGFuZGxpbmcgaXMgY3J1Y2lhbC4gRmluYWxseSwgSSdsbCBzZWUgaG93IHRoaXMgZGV0ZWN0aW9uIHJlc3VsdCBmZWVkcyBpbnRvIHRoZSByZXN0IG9mIHRoZSBkcml2ZXIgaW5pdGlhbGl6YXRpb24uIEFyZSB3ZSBicmFuY2hpbmcgYmFzZWQgb24gdGhlIGRldGVjdGVkIElEPyBJZiBzbywgSSB3YW50IHRvIGNvbmZpcm0gdGhlIGJyYW5jaGluZyBsb2dpYyBpcyBzb2xpZCBhbmQgdGhlIGNvZGUgcGF0aHMgZm9yIGVhY2ggcmV2aXNpb24gYXJlIGNvbXBsZXRlIGFuZCB0ZXN0ZWQuIEknbSBob3BpbmcgaXQncyB3ZWxsLXN0cnVjdHVyZWQgYW5kIGVhc3kgdG8gZm9sbG93LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNzk2MSwiT3V0cHV0VG9rZW5zIjo0MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTZUMjA6Mzk6NDYuMzc4ODc5MDI1WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2NzYxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA0MjI3LFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCI0MjI3OlxcdHN0YXRpYyBpbnQgeXQ5MjF4X2NoaXBfZGV0ZWN0KHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdilcXG40MjI4OlxcdHtcXG40MjI5OlxcdFxcdHN0cnVjdCBkZXZpY2UgKmRldiA9IHRvX2RldmljZShwcml2KTtcXG40MjMwOlxcdFxcdGNvbnN0IHN0cnVjdCB5dDkyMXhfaW5mbyAqaW5mbztcXG40MjMxOlxcdFxcdHU4IGV4dG1vZGU7XFxuNDIzMjpcXHRcXHR1MzIgY2hpcGlkO1xcbjQyMzM6XFx0XFx0dTMyIG1ham9yO1xcbjQyMzQ6XFx0XFx0dTMyIG1vZGU7XFxuNDIzNTpcXHRcXHR1MzIgdmFsO1xcbjQyMzY6XFx0XFx0aW50IHJlcztcXG40MjM3OlxcdFxcbjQyMzg6XFx0XFx0cmVzID0geXQ5MjF4X3JlZ19yZWFkKHByaXYsIFlUOTIxWF9DSElQX0lELCBcXHUwMDI2Y2hpcGlkKTtcXG40MjM5OlxcdFxcdGlmIChyZXMpXFxuNDI0MDpcXHRcXHRcXHRyZXR1cm4gcmVzO1xcbjQyNDE6XFx0XFxuNDI0MjpcXHRcXHRtYWpvciA9IEZJRUxEX0dFVChZVDkyMVhfQ0hJUF9JRF9NQUpPUiwgY2hpcGlkKTtcXG40MjQzOlxcdFxcbjQyNDQ6XFx0XFx0Zm9yIChpbmZvID0geXQ5MjF4X2luZm9zOyBpbmZvLVxcdTAwM2VuYW1lOyBpbmZvKyspXFxuNDI0NTpcXHRcXHRcXHRpZiAoaW5mby1cXHUwMDNlbWFqb3IgPT0gbWFqb3IpXFxuNDI0NjpcXHRcXHRcXHRcXHRicmVhaztcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTZUMjA6Mzk6NDYuMzc5MDQ3OTE1WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY3MTg2MTU2OTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgUGF0Y2gncyBGdXp6aW5nIFBvdGVudGlhbCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRnJvbSB3aGF0IEkgdW5kZXJzdGFuZCwgdGhpcyBwYXRjaCBpcyBpbnRyb2R1Y2luZyBMRUQgc3VwcG9ydCBzcGVjaWZpY2FsbHkgZm9yIGEgYHl0OTIxeGAgaGFyZHdhcmUgc3dpdGNoIGNoaXAuIFNpbmNlIHRoZSBjb3JlIGZ1bmN0aW9uYWxpdHkgcmVsaWVzIG9uIHRoaXMgc3BlY2lmaWMgaGFyZHdhcmUsIHRoZSBgeXQ5MjF4X2NoaXBfZGV0ZWN0YCBmdW5jdGlvbiBpcyBnb2luZyB0byBmYWlsIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQgbGlrZSBRRU1VIG9yIEdDRSBiZWNhdXNlIHRoZSB1bmRlcmx5aW5nIGhhcmR3YXJlIHNpbXBseSB3b24ndCBiZSBwcmVzZW50LCBvciBhdCBsZWFzdCB3b24ndCBwcmVzZW50IHdpdGggYW4gYXBwcm9wcmlhdGUgSUQuIENvbnNlcXVlbnRseSwgdGhlIGRyaXZlciB3aWxsIGZhaWwgZHVyaW5nIHRoZSBwcm9iZSwgYW5kIHRoZSBMRUQgc2V0dXAgY29kZSwgc3BlY2lmaWNhbGx5IGB5dDkyMXhfbGVkc19zZXR1cGAsIHdpbGwgbmV2ZXIgYmUgZXhlY3V0ZWQuXG5cbkdpdmVuIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIHByb21wdCDigJMgXCJSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zIGNvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuLi5cIiDigJMgdGhpcyBpcyBhIGNsZWFyIG1hdGNoLiBUaGUgaW50cm9kdWNlZCBMRUQgc3VwcG9ydCBpcyBlbnRpcmVseSBjb250aW5nZW50IG9uIHRoZSBwcmVzZW5jZSBvZiBwaHlzaWNhbCBoYXJkd2FyZSwgYW5kIHRodXMsIHVucmVhY2hhYmxlIGluIGEgdmlydHVhbGl6ZWQgc2V0dGluZy4gVGhlcmUncyBubyB3YXkgdG8gZW11bGF0ZSBpdCByZWxpYWJseSwgYW5kIG5vIGFtb3VudCBvZiBzb2Z0d2FyZSB0cmlja2VyeSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pIHdpbGwgY2hhbmdlIHRoYXQuIFRoZXJlZm9yZSwgSSB3aWxsIGNvbmZpZGVudGx5IHNldCBgV29ydGhGdXp6aW5nPWZhbHNlYC4gVGhpcyBwYXRjaCBpcyBpcnJlbGV2YW50IGZvciBmdXp6aW5nIGluIHZpcnR1YWwgZW52aXJvbm1lbnRzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyODYzNSwiT3V0cHV0VG9rZW5zIjoxMTgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOTksIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNlQyMDozOTo1My4wOTc2NjU5MzhaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjE1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW10sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIExFRCBzdXBwb3J0IGZvciB0aGUgTW90b3Jjb21tIFlUOTIxNSBldGhlcm5ldCBzd2l0Y2ggY2hpcCAoYSBEU0EgZHJpdmVyKS4gVGhpcyBpcyBhIGhhcmR3YXJlLXNwZWNpZmljIGRyaXZlciB0aGF0IGNvbW11bmljYXRlcyB3aXRoIGEgcGh5c2ljYWwgY2hpcCB2aWEgTURJTy4gU2luY2UgdGhlcmUgaXMgbm8gc29mdHdhcmUgZW11bGF0aW9uIGZvciB0aGlzIHNwZWNpZmljIHN3aXRjaCBjaGlwIGluIHN0YW5kYXJkIFFFTVUvdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLCB0aGUgZHJpdmVyIHdpbGwgZmFpbCB0byBwcm9iZSAoZS5nLiwgZHVyaW5nIGNoaXAgSUQgZGV0ZWN0aW9uKSwgYW5kIHRoZSBuZXdseSBhZGRlZCBMRUQgc2V0dXAgY29kZSB3aWxsIGJlIHVucmVhY2hhYmxlLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBMRUQgc3VwcG9ydCBmb3IgdGhlIE1vdG9yY29tbSBZVDkyMTUgZXRoZXJuZXQgc3dpdGNoIGNoaXAgKGEgRFNBIGRyaXZlcikuIFRoaXMgaXMgYSBoYXJkd2FyZS1zcGVjaWZpYyBkcml2ZXIgdGhhdCBjb21tdW5pY2F0ZXMgd2l0aCBhIHBoeXNpY2FsIGNoaXAgdmlhIE1ESU8uIFNpbmNlIHRoZXJlIGlzIG5vIHNvZnR3YXJlIGVtdWxhdGlvbiBmb3IgdGhpcyBzcGVjaWZpYyBzd2l0Y2ggY2hpcCBpbiBzdGFuZGFyZCBRRU1VL3ZpcnR1YWxpemVkIGVudmlyb25tZW50cywgdGhlIGRyaXZlciB3aWxsIGZhaWwgdG8gcHJvYmUgKGUuZy4sIGR1cmluZyBjaGlwIElEIGRldGVjdGlvbiksIGFuZCB0aGUgbmV3bHkgYWRkZWQgTEVEIHNldHVwIGNvZGUgd2lsbCBiZSB1bnJlYWNoYWJsZS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE2VDIwOjM5OjUzLjA5NzY5MjI3OFoiLCJTZXEiOjE5LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjM2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },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-workflow4kxxh[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-16 19:47:04 +0000 UTC FinishedAt: 2026-08-16 20:39:55 +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+CgkJCTx0ZD4yMDI2LzA4LzE2IDIwOjM5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBMRUQgc3VwcG9ydCBmb3IgdGhlIE1vdG9yY29tbSBZVDkyMTUgZXRoZXJuZXQgc3dpdGNoIGNoaXAgKGEgRFNBIGRyaXZlcikuIFRoaXMgaXMgYSBoYXJkd2FyZS1zcGVjaWZpYyBkcml2ZXIgdGhhdCBjb21tdW5pY2F0ZXMgd2l0aCBhIHBoeXNpY2FsIGNoaXAgdmlhIE1ESU8uIFNpbmNlIHRoZXJlIGlzIG5vIHNvZnR3YXJlIGVtdWxhdGlvbiBmb3IgdGhpcyBzcGVjaWZpYyBzd2l0Y2ggY2hpcCBpbiBzdGFuZGFyZCBRRU1VL3ZpcnR1YWxpemVkIGVudmlyb25tZW50cywgdGhlIGRyaXZlciB3aWxsIGZhaWwgdG8gcHJvYmUgKGUuZy4sIGR1cmluZyBjaGlwIElEIGRldGVjdGlvbiksIGFuZCB0aGUgbmV3bHkgYWRkZWQgTEVEIHNldHVwIGNvZGUgd2lsbCBiZSB1bnJlYWNoYWJsZS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTYgMjA6Mzk8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCAyODYwOTgzZDNmNGRlMDFmOWZjZTM3NjBmZjMxOTkyOTE0YWQ5MTAzXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFN1biBBdWcgMTYgMjA6Mzg6NTkgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9kc2EvbW90b3Jjb21tLHl0OTIxeC55YW1sIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9kc2EvbW90b3Jjb21tLHl0OTIxeC55YW1sXG5pbmRleCAzM2E2NTUyZTQ2ZmMwLi45M2JhNWIxODEyMDViIDEwMDY0NFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9kc2EvbW90b3Jjb21tLHl0OTIxeC55YW1sXG4mIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L2RzYS9tb3RvcmNvbW0seXQ5MjF4LnlhbWxcbkBAIC0yMSw2ICYjNDM7MjEsOSBAQCBkZXNjcmlwdGlvbjogfFxuIFxuICAgQW55IHBvcnQgY2FuIGJlIHVzZWQgYXMgdGhlIENQVSBwb3J0LlxuIFxuJiM0MzsgIEVhY2ggcG9ydCBoYXMgYXQgbW9zdCAzIExFRHMgY29ubmVjdGVkIGFuZCBjYW4gYmUgZGVjbGFyZWQgdXNpbmcgdGhlIHN0YW5kYXJkXG4mIzQzOyAgTEVEcyBzdHJ1Y3R1cmUuXG4mIzQzO1xuIHByb3BlcnRpZXM6XG4gICBjb21wYXRpYmxlOlxuICAgICBjb25zdDogbW90b3Jjb21tLHl0OTIxNVxuQEAgLTU5LDYgJiM0Mzs2Miw3IEBAIHVuZXZhbHVhdGVkUHJvcGVydGllczogZmFsc2VcbiBleGFtcGxlczpcbiAgIC0gfFxuICAgICAjaW5jbHVkZSBcdTAwM2NkdC1iaW5kaW5ncy9ncGlvL2dwaW8uaFx1MDAzZVxuJiM0MzsgICAgI2luY2x1ZGUgXHUwMDNjZHQtYmluZGluZ3MvbGVkcy9jb21tb24uaFx1MDAzZVxuIFxuICAgICBtZGlvIHtcbiAgICAgICAgICNhZGRyZXNzLWNlbGxzID0gXHUwMDNjMVx1MDAzZTtcbkBAIC0xMTMsNiAmIzQzOzExNywyNSBAQCBleGFtcGxlczpcbiAgICAgICAgICAgICAgICAgICAgIGxhYmVsID0gXCYjMzQ7bGFuMVwmIzM0OztcbiAgICAgICAgICAgICAgICAgICAgIHBoeS1tb2RlID0gXCYjMzQ7aW50ZXJuYWxcJiMzNDs7XG4gICAgICAgICAgICAgICAgICAgICBwaHktaGFuZGxlID0gXHUwMDNjXHUwMDI2c3dfcGh5MFx1MDAzZTtcbiYjNDM7XG4mIzQzOyAgICAgICAgICAgICAgICAgICAgbGVkcyB7XG4mIzQzOyAgICAgICAgICAgICAgICAgICAgICAgICNhZGRyZXNzLWNlbGxzID0gXHUwMDNjMVx1MDAzZTtcbiYjNDM7ICAgICAgICAgICAgICAgICAgICAgICAgI3NpemUtY2VsbHMgPSBcdTAwM2MwXHUwMDNlO1xuJiM0MztcbiYjNDM7ICAgICAgICAgICAgICAgICAgICAgICAgbGVkQDAge1xuJiM0MzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVnID0gXHUwMDNjMFx1MDAzZTtcbiYjNDM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yID0gXHUwMDNjTEVEX0NPTE9SX0lEX1dISVRFXHUwMDNlO1xuJiM0MzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gPSBMRURfRlVOQ1RJT05fTEFOO1xuJiM0MzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdC1zdGF0ZSA9IFwmIzM0O2tlZXBcJiMzNDs7XG4mIzQzOyAgICAgICAgICAgICAgICAgICAgICAgIH07XG4mIzQzO1xuJiM0MzsgICAgICAgICAgICAgICAgICAgICAgICBsZWRAMSB7XG4mIzQzOyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWcgPSBcdTAwM2MxXHUwMDNlO1xuJiM0MzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3IgPSBcdTAwM2NMRURfQ09MT1JfSURfQU1CRVJcdTAwM2U7XG4mIzQzOyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiA9IExFRF9GVU5DVElPTl9MQU47XG4mIzQzOyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0LXN0YXRlID0gXCYjMzQ7a2VlcFwmIzM0OztcbiYjNDM7ICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiYjNDM7ICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICB9O1xuIFxuICAgICAgICAgICAgICAgICBldGhlcm5ldC1wb3J0QDEge1xuZGlmZiAtLWdpdCBhL01BSU5UQUlORVJTIGIvTUFJTlRBSU5FUlNcbmluZGV4IDk5MTQ2MDA1MGRhNzQuLjU1Y2M1YWMwZTg2ZjAgMTAwNjQ0XG4tLS0gYS9NQUlOVEFJTkVSU1xuJiM0MzsmIzQzOyYjNDM7IGIvTUFJTlRBSU5FUlNcbkBAIC0xODI1Niw3ICYjNDM7MTgyNTYsNyBAQCBNOlx0RGF2aWQgWWFuZyBcdTAwM2NtbXlhbmdmbEBnbWFpbC5jb21cdTAwM2VcbiBMOlx0bmV0ZGV2QHZnZXIua2VybmVsLm9yZ1xuIFM6XHRNYWludGFpbmVkXG4gRjpcdERvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvZHNhL21vdG9yY29tbSx5dDkyMXgueWFtbFxuLUY6XHRkcml2ZXJzL25ldC9kc2EveXQ5MjF4LipcbiYjNDM7RjpcdGRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vXG4gRjpcdG5ldC9kc2EvdGFnX3l0OTIxeC5jXG4gXG4gTU9YQSBTTUFSVElPL0lORFVTVElPL0lOVEVMTElPIFNFUklBTCBDQVJEXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZHNhL0tjb25maWcgYi9kcml2ZXJzL25ldC9kc2EvS2NvbmZpZ1xuaW5kZXggNGFiNTY3YzViYmFmYy4uOThlOWJiZTQ3ZGU3YiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2RzYS9LY29uZmlnXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9kc2EvS2NvbmZpZ1xuQEAgLTcyLDYgJiM0Mzs3Miw4IEBAIGNvbmZpZyBORVRfRFNBX01WODhFNjA2MFxuIFxuIHNvdXJjZSBcJiMzNDtkcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL0tjb25maWdcJiMzNDtcbiBcbiYjNDM7c291cmNlIFwmIzM0O2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vS2NvbmZpZ1wmIzM0O1xuJiM0MztcbiBzb3VyY2UgXCYjMzQ7ZHJpdmVycy9uZXQvZHNhL212ODhlNnh4eC9LY29uZmlnXCYjMzQ7XG4gXG4gc291cmNlIFwmIzM0O2RyaXZlcnMvbmV0L2RzYS9teGw4NjJ4eC9LY29uZmlnXCYjMzQ7XG5AQCAtMTU4LDEyICYjNDM7MTYwLDQgQEAgY29uZmlnIE5FVF9EU0FfVklURVNTRV9WU0M3M1hYX1BMQVRGT1JNXG4gXHQgIFRoaXMgZW5hYmxlcyBzdXBwb3J0IGZvciB0aGUgVml0ZXNzZSBWU0M3Mzg1LCBWU0M3Mzg4LCBWU0M3Mzk1XG4gXHQgIGFuZCBWU0M3Mzk4IFNwYXJYIGludGVncmF0ZWQgZXRoZXJuZXQgc3dpdGNoZXMsIGNvbm5lY3RlZCBvdmVyXG4gXHQgIGEgQ1BVLWF0dGFjaGVkIGFkZHJlc3MgYnVzIGFuZCB3b3JrIGluIG1lbW9yeS1tYXBwZWQgSS9PIG1vZGUuXG4tXG4tY29uZmlnIE5FVF9EU0FfWVQ5MjFYXG4tXHR0cmlzdGF0ZSBcJiMzNDtNb3RvcmNvbW0gWVQ5MjE1IGV0aGVybmV0IHN3aXRjaCBjaGlwIHN1cHBvcnRcJiMzNDtcbi1cdHNlbGVjdCBORVRfRFNBX1RBR19ZVDkyMVhcbi1cdHNlbGVjdCBORVRfSUVFRTgwMjFRX0hFTFBFUlMgaWYgRENCXG4tXHRoZWxwXG4tXHQgIFRoaXMgZW5hYmxlcyBzdXBwb3J0IGZvciB0aGUgTW90b3Jjb21tIFlUOTIxNSBldGhlcm5ldCBzd2l0Y2hcbi1cdCAgY2hpcC5cbiBlbmRtZW51XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZHNhL01ha2VmaWxlIGIvZHJpdmVycy9uZXQvZHNhL01ha2VmaWxlXG5pbmRleCBkMjk3NWJhZGZmYzA5Li4xMzgyMjViYWE0ZDU2IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZHNhL01ha2VmaWxlXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9kc2EvTWFrZWZpbGVcbkBAIC0xNCwxMSAmIzQzOzE0LDExIEBAIG9iai0kKENPTkZJR19ORVRfRFNBX1NNU0NfTEFOOTMwM19NRElPKSAmIzQzOz0gbGFuOTMwM19tZGlvLm9cbiBvYmotJChDT05GSUdfTkVUX0RTQV9WSVRFU1NFX1ZTQzczWFgpICYjNDM7PSB2aXRlc3NlLXZzYzczeHgtY29yZS5vXG4gb2JqLSQoQ09ORklHX05FVF9EU0FfVklURVNTRV9WU0M3M1hYX1BMQVRGT1JNKSAmIzQzOz0gdml0ZXNzZS12c2M3M3h4LXBsYXRmb3JtLm9cbiBvYmotJChDT05GSUdfTkVUX0RTQV9WSVRFU1NFX1ZTQzczWFhfU1BJKSAmIzQzOz0gdml0ZXNzZS12c2M3M3h4LXNwaS5vXG4tb2JqLSQoQ09ORklHX05FVF9EU0FfWVQ5MjFYKSAmIzQzOz0geXQ5MjF4Lm9cbiBvYmoteVx0XHRcdFx0JiM0Mzs9IGI1My9cbiBvYmoteVx0XHRcdFx0JiM0Mzs9IGhpcnNjaG1hbm4vXG4gb2JqLXlcdFx0XHRcdCYjNDM7PSBsYW50aXEvXG4gb2JqLXlcdFx0XHRcdCYjNDM7PSBtaWNyb2NoaXAvXG4mIzQzO29iai15XHRcdFx0XHQmIzQzOz0gbW90b3Jjb21tL1xuIG9iai15XHRcdFx0XHQmIzQzOz0gbXY4OGU2eHh4L1xuIG9iai15XHRcdFx0XHQmIzQzOz0gbXhsODYyeHgvXG4gb2JqLXlcdFx0XHRcdCYjNDM7PSBuZXRjL1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vS2NvbmZpZyBiL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vS2NvbmZpZ1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLjM0MzhlMGIxNDM2MTFcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vS2NvbmZpZ1xuQEAgLTAsMCAmIzQzOzEsMTcgQEBcbiYjNDM7IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogSVNDXG4mIzQzO2NvbmZpZyBORVRfRFNBX1lUOTIxWFxuJiM0MztcdHRyaXN0YXRlIFwmIzM0O01vdG9yY29tbSBZVDkyMTUgZXRoZXJuZXQgc3dpdGNoIGNoaXAgc3VwcG9ydFwmIzM0O1xuJiM0MztcdHNlbGVjdCBORVRfRFNBX1RBR19ZVDkyMVhcbiYjNDM7XHRzZWxlY3QgTkVUX0lFRUU4MDIxUV9IRUxQRVJTIGlmIERDQlxuJiM0MztcdGhlbHBcbiYjNDM7XHQgIFRoaXMgZW5hYmxlcyBzdXBwb3J0IGZvciB0aGUgTW90b3Jjb21tIFlUOTIxNSBldGhlcm5ldCBzd2l0Y2hcbiYjNDM7XHQgIGNoaXAuXG4mIzQzO1xuJiM0Mztjb25maWcgTkVUX0RTQV9ZVDkyMVhfTEVEU1xuJiM0MztcdGJvb2wgXCYjMzQ7TEVEIHN1cHBvcnQgZm9yIE1vdG9yY29tbSBZVDkyMTVcJiMzNDtcbiYjNDM7XHRkZWZhdWx0IHlcbiYjNDM7XHRkZXBlbmRzIG9uIE5FVF9EU0FfWVQ5MjFYXG4mIzQzO1x0ZGVwZW5kcyBvbiBMRURTX0NMQVNTPXkgfHwgTEVEU19DTEFTUz1ORVRfRFNBX1lUOTIxWFxuJiM0MztcdGhlbHBcbiYjNDM7XHQgIFRoaXMgZW5hYmxlcyBzdXBwb3J0IGZvciBjb250cm9sbGluZyB0aGUgTEVEcyBhdHRhY2hlZCB0byB0aGVcbiYjNDM7XHQgIE1vdG9yY29tbSBZVDkyMTUgc3dpdGNoIGNoaXBzLlxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vTWFrZWZpbGUgYi9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL01ha2VmaWxlXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uNWE2M2RiMDAyOWZmZVxuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9NYWtlZmlsZVxuQEAgLTAsMCAmIzQzOzEsNSBAQFxuJiM0MzsjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBJU0NcbiYjNDM7b2JqLSQoQ09ORklHX05FVF9EU0FfWVQ5MjFYKSAmIzQzOz0geXQ5MjF4Lm9cbiYjNDM7eXQ5MjF4LW9ianMgOj0gY2hpcC5vXG4mIzQzO3l0OTIxeC0kKENPTkZJR19ORVRfRFNBX1lUOTIxWF9MRURTKSAmIzQzOz0gbGVkcy5vXG4mIzQzO3l0OTIxeC1vYmpzICYjNDM7PSBzbWkub1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS95dDkyMXguYyBiL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jXG5zaW1pbGFyaXR5IGluZGV4IDk2JVxucmVuYW1lIGZyb20gZHJpdmVycy9uZXQvZHNhL3l0OTIxeC5jXG5yZW5hbWUgdG8gZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmNcbmluZGV4IDE1OWIxNjYwNmY2Y2EuLjU1M2VmYWNkNGY1ZWUgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9kc2EveXQ5MjF4LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jXG5AQCAtMTMsNyAmIzQzOzEzLDYgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9pZl9icmlkZ2UuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2lmX2hzci5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvaWZfdmxhbi5oXHUwMDNlXG4tI2luY2x1ZGUgXHUwMDNjbGludXgvaW9wb2xsLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9tZGlvLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9tb2R1bGUuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L29mLmhcdTAwM2VcbkBAIC0yNiw3ICYjNDM7MjUsOSBAQFxuICNpbmNsdWRlIFx1MDAzY25ldC9pZWVlODAyMXEuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY25ldC9wa3RfY2xzLmhcdTAwM2VcbiBcbi0jaW5jbHVkZSBcJiMzNDt5dDkyMXguaFwmIzM0O1xuJiM0MzsjaW5jbHVkZSBcJiMzNDtjaGlwLmhcJiMzNDtcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7bGVkcy5oXCYjMzQ7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O3NtaS5oXCYjMzQ7XG4gXG4gc3RydWN0IHl0OTIxeF9taWJfZGVzYyB7XG4gXHR1bnNpZ25lZCBpbnQgc2l6ZTtcbkBAIC0xNTEsMTMgJiM0MzsxNTIsOCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IHl0OTIxeF9pbmZvIHl0OTIxeF9pbmZvc1tdID0ge1xuIFx0e31cbiB9O1xuIFxuLSNkZWZpbmUgWVQ5MjFYX05BTUVcdFwmIzM0O3l0OTIxeFwmIzM0O1xuLVxuICNkZWZpbmUgWVQ5MjFYX1ZJRF9VTldBUkVcdDQwOTVcbiBcbi0jZGVmaW5lIFlUOTIxWF9QT0xMX1NMRUVQX1VTXHQxMDAwMFxuLSNkZWZpbmUgWVQ5MjFYX1BPTExfVElNRU9VVF9VU1x0MTAwMDAwXG4tXG4gLyogVGhlIGludGVydmFsIHNob3VsZCBiZSBzbWFsbCBlbm91Z2ggdG8gYXZvaWQgb3ZlcmZsb3cgb2YgMzJiaXQgTUlCcy5cbiAgKlxuICAqIFVudGlsIHdlIGNhbiByZWFkIE1JQnMgZnJvbSBzdGF0czY0IGNhbGwgZGlyZWN0bHkgKGkuZS4gc2xlZXBcbkBAIC0xOTYsMjA4ICYjNDM7MTkyLDYgQEAgc3RhdGljIHUzMiBldGhhZGRyX2xvMl90b191MzIoY29uc3QgdW5zaWduZWQgY2hhciAqYWRkcilcbiBcdHJldHVybiAoYWRkcls0XSBcdTAwM2NcdTAwM2MgOCkgfCBhZGRyWzVdO1xuIH1cbiBcbi1zdGF0aWMgaW50IHl0OTIxeF9yZWdfcmVhZChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiAqdmFscClcbi17XG4tXHRXQVJOX09OKCFtdXRleF9pc19sb2NrZWQoXHUwMDI2cHJpdi1cdTAwM2VyZWdfbG9jaykpO1xuLVxuLVx0cmV0dXJuIHByaXYtXHUwMDNlcmVnX29wcy1cdTAwM2VyZWFkKHByaXYtXHUwMDNlcmVnX2N0eCwgcmVnLCB2YWxwKTtcbi19XG4tXG4tc3RhdGljIGludCB5dDkyMXhfcmVnX3dyaXRlKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyIHZhbClcbi17XG4tXHRXQVJOX09OKCFtdXRleF9pc19sb2NrZWQoXHUwMDI2cHJpdi1cdTAwM2VyZWdfbG9jaykpO1xuLVxuLVx0cmV0dXJuIHByaXYtXHUwMDNlcmVnX29wcy1cdTAwM2V3cml0ZShwcml2LVx1MDAzZXJlZ19jdHgsIHJlZywgdmFsKTtcbi19XG4tXG4tc3RhdGljIGludFxuLXl0OTIxeF9yZWdfd2FpdChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiBtYXNrLCB1MzIgKnZhbHApXG4te1xuLVx0dTMyIHZhbDtcbi1cdGludCByZXM7XG4tXHRpbnQgcmV0O1xuLVxuLVx0cmV0ID0gcmVhZF9wb2xsX3RpbWVvdXQoeXQ5MjF4X3JlZ19yZWFkLCByZXMsXG4tXHRcdFx0XHRyZXMgfHwgKHZhbCBcdTAwMjYgbWFzaykgPT0gKnZhbHAsXG4tXHRcdFx0XHRZVDkyMVhfUE9MTF9TTEVFUF9VUywgWVQ5MjFYX1BPTExfVElNRU9VVF9VUyxcbi1cdFx0XHRcdGZhbHNlLCBwcml2LCByZWcsIFx1MDAyNnZhbCk7XG4tXHRpZiAocmV0KVxuLVx0XHRyZXR1cm4gcmV0O1xuLVx0aWYgKHJlcylcbi1cdFx0cmV0dXJuIHJlcztcbi1cbi1cdCp2YWxwID0gdmFsO1xuLVx0cmV0dXJuIDA7XG4tfVxuLVxuLXN0YXRpYyBpbnRcbi15dDkyMXhfcmVnX3VwZGF0ZV9iaXRzKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyIG1hc2ssIHUzMiB2YWwpXG4te1xuLVx0aW50IHJlcztcbi1cdHUzMiB2O1xuLVx0dTMyIHU7XG4tXG4tXHRyZXMgPSB5dDkyMXhfcmVnX3JlYWQocHJpdiwgcmVnLCBcdTAwMjZ2KTtcbi1cdGlmIChyZXMpXG4tXHRcdHJldHVybiByZXM7XG4tXG4tXHR1ID0gdjtcbi1cdHUgXHUwMDI2PSB+bWFzaztcbi1cdHUgfD0gdmFsO1xuLVx0aWYgKHUgPT0gdilcbi1cdFx0cmV0dXJuIDA7XG4tXG4tXHRyZXR1cm4geXQ5MjF4X3JlZ193cml0ZShwcml2LCByZWcsIHUpO1xuLX1cbi1cbi1zdGF0aWMgaW50IHl0OTIxeF9yZWdfc2V0X2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgbWFzaylcbi17XG4tXHRyZXR1cm4geXQ5MjF4X3JlZ191cGRhdGVfYml0cyhwcml2LCByZWcsIDAsIG1hc2spO1xuLX1cbi1cbi1zdGF0aWMgaW50IHl0OTIxeF9yZWdfY2xlYXJfYml0cyhzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiBtYXNrKVxuLXtcbi1cdHJldHVybiB5dDkyMXhfcmVnX3VwZGF0ZV9iaXRzKHByaXYsIHJlZywgbWFzaywgMCk7XG4tfVxuLVxuLXN0YXRpYyBpbnRcbi15dDkyMXhfcmVnX3RvZ2dsZV9iaXRzKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyIG1hc2ssIGJvb2wgc2V0KVxuLXtcbi1cdHJldHVybiB5dDkyMXhfcmVnX3VwZGF0ZV9iaXRzKHByaXYsIHJlZywgbWFzaywgIXNldCA/IDAgOiBtYXNrKTtcbi19XG4tXG4tLyogU29tZSBtdWx0aS13b3JkIHJlZ2lzdGVycywgbGlrZSBWTEFObl9DVFJMLCBzaG91bGQgYmUgdHJlYXRlZCBhcyBhIHNpbmdsZVxuLSAqIGxvbmcgcmVnaXN0ZXIuIE1vcmUgc3BlY2lmaWNhbGx5LCB3cml0ZXMgdG8gcGFydHMgb2YgaXRzIHdvcmRzIHdvbiYjMzk7dCBiZWNvbWVcbi0gKiB2aXNpYmxlLCB1bnRpbCB0aGUgbGFzdCB3b3JkIGlzIHdyaXR0ZW4uXG4tICpcbi0gKiBIZXJlIHdlIHJlcXVpcmUgZnVsbCByZWFkIGFuZCB3cml0ZSBvcGVyYXRpb25zIG92ZXIgdGhlc2UgcmVnaXN0ZXJzIHRvXG4tICogZWxpbWluYXRlIHBvdGVudGlhbCBpc3N1ZXMsIGFsdGhvdWdoIHBhcnRpYWwgcmVhZHMvd3JpdGVzIGFyZSBhbHNvIHBvc3NpYmxlLlxuLSAqL1xuLVxuLXN0YXRpYyB2b2lkIHVwZGF0ZV9jdHJsc191bmFsaWduZWQodTMyICpsbywgdTMyICpoaSwgdTY0IG1hc2ssIHU2NCB2YWwpXG4te1xuLVx0KmxvIFx1MDAyNj0gfmxvd2VyXzMyX2JpdHMobWFzayk7XG4tXHQqaGkgXHUwMDI2PSB+dXBwZXJfMzJfYml0cyhtYXNrKTtcbi1cdCpsbyB8PSBsb3dlcl8zMl9iaXRzKHZhbCk7XG4tXHQqaGkgfD0gdXBwZXJfMzJfYml0cyh2YWwpO1xuLX1cbi1cbi1zdGF0aWMgaW50XG4teXQ5MjF4X3JlZ3NfcmVhZChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiAqdmFscyxcbi1cdFx0IHVuc2lnbmVkIGludCBudW1fcmVncylcbi17XG4tXHRpbnQgcmVzO1xuLVxuLVx0Zm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgXHUwMDNjIG51bV9yZWdzOyBpJiM0MzsmIzQzOykge1xuLVx0XHRyZXMgPSB5dDkyMXhfcmVnX3JlYWQocHJpdiwgcmVnICYjNDM7IDQgKiBpLCBcdTAwMjZ2YWxzW2ldKTtcbi1cdFx0aWYgKHJlcylcbi1cdFx0XHRyZXR1cm4gcmVzO1xuLVx0fVxuLVxuLVx0cmV0dXJuIDA7XG4tfVxuLVxuLXN0YXRpYyBpbnRcbi15dDkyMXhfcmVnc193cml0ZShzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIGNvbnN0IHUzMiAqdmFscyxcbi1cdFx0ICB1bnNpZ25lZCBpbnQgbnVtX3JlZ3MpXG4te1xuLVx0aW50IHJlcztcbi1cbi1cdGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIFx1MDAzYyBudW1fcmVnczsgaSYjNDM7JiM0MzspIHtcbi1cdFx0cmVzID0geXQ5MjF4X3JlZ193cml0ZShwcml2LCByZWcgJiM0MzsgNCAqIGksIHZhbHNbaV0pO1xuLVx0XHRpZiAocmVzKVxuLVx0XHRcdHJldHVybiByZXM7XG4tXHR9XG4tXG4tXHRyZXR1cm4gMDtcbi19XG4tXG4tc3RhdGljIGludFxuLXl0OTIxeF9yZWdzX3VwZGF0ZV9iaXRzKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgY29uc3QgdTMyICptYXNrcyxcbi1cdFx0XHRjb25zdCB1MzIgKnZhbHMsIHVuc2lnbmVkIGludCBudW1fcmVncylcbi17XG4tXHRib29sIGNoYW5nZWQgPSBmYWxzZTtcbi1cdHUzMiB2c1s0XTtcbi1cdGludCByZXM7XG4tXG4tXHRCVUlMRF9CVUdfT04obnVtX3JlZ3MgXHUwMDNlIEFSUkFZX1NJWkUodnMpKTtcbi1cbi1cdHJlcyA9IHl0OTIxeF9yZWdzX3JlYWQocHJpdiwgcmVnLCB2cywgbnVtX3JlZ3MpO1xuLVx0aWYgKHJlcylcbi1cdFx0cmV0dXJuIHJlcztcbi1cbi1cdGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIFx1MDAzYyBudW1fcmVnczsgaSYjNDM7JiM0MzspIHtcbi1cdFx0dTMyIHUgPSB2c1tpXTtcbi1cbi1cdFx0dSBcdTAwMjY9IH5tYXNrc1tpXTtcbi1cdFx0dSB8PSB2YWxzW2ldO1xuLVx0XHRpZiAodSAhPSB2c1tpXSlcbi1cdFx0XHRjaGFuZ2VkID0gdHJ1ZTtcbi1cbi1cdFx0dnNbaV0gPSB1O1xuLVx0fVxuLVxuLVx0aWYgKCFjaGFuZ2VkKVxuLVx0XHRyZXR1cm4gMDtcbi1cbi1cdHJldHVybiB5dDkyMXhfcmVnc193cml0ZShwcml2LCByZWcsIHZzLCBudW1fcmVncyk7XG4tfVxuLVxuLXN0YXRpYyBpbnRcbi15dDkyMXhfcmVnc19jbGVhcl9iaXRzKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgY29uc3QgdTMyICptYXNrcyxcbi1cdFx0ICAgICAgIHVuc2lnbmVkIGludCBudW1fcmVncylcbi17XG4tXHRib29sIGNoYW5nZWQgPSBmYWxzZTtcbi1cdHUzMiB2c1s0XTtcbi1cdGludCByZXM7XG4tXG4tXHRCVUlMRF9CVUdfT04obnVtX3JlZ3MgXHUwMDNlIEFSUkFZX1NJWkUodnMpKTtcbi1cbi1cdHJlcyA9IHl0OTIxeF9yZWdzX3JlYWQocHJpdiwgcmVnLCB2cywgbnVtX3JlZ3MpO1xuLVx0aWYgKHJlcylcbi1cdFx0cmV0dXJuIHJlcztcbi1cbi1cdGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIFx1MDAzYyBudW1fcmVnczsgaSYjNDM7JiM0MzspIHtcbi1cdFx0dTMyIHUgPSB2c1tpXTtcbi1cbi1cdFx0dSBcdTAwMjY9IH5tYXNrc1tpXTtcbi1cdFx0aWYgKHUgIT0gdnNbaV0pXG4tXHRcdFx0Y2hhbmdlZCA9IHRydWU7XG4tXG4tXHRcdHZzW2ldID0gdTtcbi1cdH1cbi1cbi1cdGlmICghY2hhbmdlZClcbi1cdFx0cmV0dXJuIDA7XG4tXG4tXHRyZXR1cm4geXQ5MjF4X3JlZ3Nfd3JpdGUocHJpdiwgcmVnLCB2cywgbnVtX3JlZ3MpO1xuLX1cbi1cbi1zdGF0aWMgaW50XG4teXQ5MjF4X3JlZzY0X3dyaXRlKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgY29uc3QgdTMyICp2YWxzKVxuLXtcbi1cdHJldHVybiB5dDkyMXhfcmVnc193cml0ZShwcml2LCByZWcsIHZhbHMsIDIpO1xuLX1cbi1cbi1zdGF0aWMgaW50XG4teXQ5MjF4X3JlZzY0X3VwZGF0ZV9iaXRzKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgY29uc3QgdTMyICptYXNrcyxcbi1cdFx0XHQgY29uc3QgdTMyICp2YWxzKVxuLXtcbi1cdHJldHVybiB5dDkyMXhfcmVnc191cGRhdGVfYml0cyhwcml2LCByZWcsIG1hc2tzLCB2YWxzLCAyKTtcbi19XG4tXG4tc3RhdGljIGludFxuLXl0OTIxeF9yZWc2NF9jbGVhcl9iaXRzKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgY29uc3QgdTMyICptYXNrcylcbi17XG4tXHRyZXR1cm4geXQ5MjF4X3JlZ3NfY2xlYXJfYml0cyhwcml2LCByZWcsIG1hc2tzLCAyKTtcbi19XG4tXG4tc3RhdGljIGludFxuLXl0OTIxeF9yZWc5Nl93cml0ZShzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIGNvbnN0IHUzMiAqdmFscylcbi17XG4tXHRyZXR1cm4geXQ5MjF4X3JlZ3Nfd3JpdGUocHJpdiwgcmVnLCB2YWxzLCAzKTtcbi19XG4tXG4gc3RhdGljIGludCB5dDkyMXhfcmVnX21kaW9fcmVhZCh2b2lkICpjb250ZXh0LCB1MzIgcmVnLCB1MzIgKnZhbHApXG4ge1xuIFx0c3RydWN0IHl0OTIxeF9yZWdfbWRpbyAqbWRpbyA9IGNvbnRleHQ7XG5AQCAtNDc4Niw2ICYjNDM7NDU4MCwxMiBAQCBzdGF0aWMgaW50IHl0OTIxeF9kc2Ffc2V0dXAoc3RydWN0IGRzYV9zd2l0Y2ggKmRzKVxuIFx0aWYgKHJlcylcbiBcdFx0cmV0dXJuIHJlcztcbiBcbiYjNDM7I2lmIElTX0VOQUJMRUQoQ09ORklHX05FVF9EU0FfWVQ5MjFYX0xFRFMpXG4mIzQzO1x0cmVzID0geXQ5MjF4X2xlZHNfc2V0dXAocHJpdik7XG4mIzQzO1x0aWYgKHJlcylcbiYjNDM7XHRcdGRldl93YXJuKGRldiwgXCYjMzQ7RmFpbGVkIHRvIHNldHVwIExFRHM6ICVkXFxuXCYjMzQ7LCByZXMpO1xuJiM0MzsjZW5kaWZcbiYjNDM7XG4gXHRyZXR1cm4gMDtcbiB9XG4gXG5AQCAtNDg4Niw2ICYjNDM7NDY4NiwxMCBAQCBzdGF0aWMgdm9pZCB5dDkyMXhfbWRpb19yZW1vdmUoc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2KVxuIFx0aWYgKCFwcml2KVxuIFx0XHRyZXR1cm47XG4gXG4mIzQzOyNpZiBJU19FTkFCTEVEKENPTkZJR19ORVRfRFNBX1lUOTIxWF9MRURTKVxuJiM0MztcdHl0OTIxeF9sZWRzX3JlbW92ZShwcml2KTtcbiYjNDM7I2VuZGlmXG4mIzQzO1xuIFx0Zm9yIChzaXplX3QgaSA9IEFSUkFZX1NJWkUocHJpdi1cdTAwM2Vwb3J0cyk7IGktLSBcdTAwM2UgMDsgKSB7XG4gXHRcdHN0cnVjdCB5dDkyMXhfcG9ydCAqcHAgPSBcdTAwMjZwcml2LVx1MDAzZXBvcnRzW2ldO1xuIFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS95dDkyMXguaCBiL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5oXG5zaW1pbGFyaXR5IGluZGV4IDk5JVxucmVuYW1lIGZyb20gZHJpdmVycy9uZXQvZHNhL3l0OTIxeC5oXG5yZW5hbWUgdG8gZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmhcbmluZGV4IDVmM2I5OWUxODljNDEuLmU2ODE1Y2Y5Y2IzY2QgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9kc2EveXQ5MjF4LmhcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5oXG5AQCAtODUwLDkgJiM0Mzs4NTAsMTQgQEAgZW51bSB5dDkyMXhfZmRiX2VudHJ5X3N0YXR1cyB7XG4gI2RlZmluZSBZVDkyMVhfQUNMX05VTVx0XHQoWVQ5MjFYX0FDTF9CTEtfTlVNICogWVQ5MjFYX0FDTF9FTlRfUEVSX0JMSylcbiAjZGVmaW5lIFlUOTIxWF9VREZfTlVNXHRcdDhcbiBcbiYjNDM7I2RlZmluZSBZVDkyMVhfTEVEX0dST1VQX05VTVx0M1xuJiM0MzsjZGVmaW5lIFlUOTIxWF9MRURfUE9SVF9OVU1cdDEwXG4mIzQzO1xuIC8qIDggaW50ZXJuYWwgJiM0MzsgMiBleHRlcm5hbCAmIzQzOyAxIG1jdSAqL1xuICNkZWZpbmUgWVQ5MjFYX1BPUlRfTlVNXHRcdFx0MTFcbiBcbiYjNDM7I2RlZmluZSBZVDkyMVhfTkFNRVx0XCYjMzQ7eXQ5MjF4XCYjMzQ7XG4mIzQzO1xuICNkZWZpbmUgeXQ5MjF4X3BvcnRfaXNfaW50ZXJuYWwocG9ydCkgKChwb3J0KSBcdTAwM2MgOClcbiAjZGVmaW5lIHl0OTIxeF9wb3J0X2lzX2V4dGVybmFsKHBvcnQpICgocG9ydCkgPT0gOCB8fCAocG9ydCkgPT0gOSlcbiBcbkBAIC05MzgsNiAmIzQzOzk0MywxMyBAQCBzdHJ1Y3QgeXQ5MjF4X3BvcnQge1xuIFx0c3RydWN0IHl0OTIxeF9taWIgbWliO1xuIFx0dTY0IHJ4X2ZyYW1lcztcbiBcdHU2NCB0eF9mcmFtZXM7XG4mIzQzO1xuJiM0MzsjaWYgSVNfRU5BQkxFRChDT05GSUdfTkVUX0RTQV9ZVDkyMVhfTEVEUylcbiYjNDM7XHR1bnNpZ25lZCBjaGFyIGxlZF9kdXR5O1xuJiM0MztcdHVuc2lnbmVkIHNob3J0IGxlZF9jeWNsZTtcbiYjNDM7XG4mIzQzO1x0c3RydWN0IHl0OTIxeF9sZWQgKmxlZHNbWVQ5MjFYX0xFRF9HUk9VUF9OVU1dO1xuJiM0MzsjZW5kaWZcbiB9O1xuIFxuIHN0cnVjdCB5dDkyMXhfcmVnX29wcyB7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9sZWRzLmMgYi9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2xlZHMuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLmU3ZWYwZWY4MGEyNjZcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vbGVkcy5jXG5AQCAtMCwwICYjNDM7MSw2NTQgQEBcbiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb3ItbGF0ZXJcbiYjNDM7LypcbiYjNDM7ICogQ29weXJpZ2h0IChjKSAyMDI2IERhdmlkIFlhbmdcbiYjNDM7ICovXG4mIzQzO1xuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC91bGVkcy5oXHUwMDNlXG4mIzQzO1xuJiM0MzsjaW5jbHVkZSBcJiMzNDtjaGlwLmhcJiMzNDtcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7bGVkcy5oXCYjMzQ7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O3NtaS5oXCYjMzQ7XG4mIzQzO1xuJiM0MzsjZGVmaW5lIHRvX3l0OTIxeF9sZWQobGVkX2NkZXYpIFxcXG4mIzQzO1x0Y29udGFpbmVyX29mX2NvbnN0KChsZWRfY2RldiksIHN0cnVjdCB5dDkyMXhfbGVkLCBjZGV2KVxuJiM0MzsjZGVmaW5lIHRvX3l0OTIxeF9wb3J0KGxlZCkgKChsZWQpLVx1MDAzZXBvcnQpXG4mIzQzOyNkZWZpbmUgdG9feXQ5MjF4X3ByaXYocHApIFxcXG4mIzQzO1x0Y29udGFpbmVyX29mX2NvbnN0KChwcCksIHN0cnVjdCB5dDkyMXhfcHJpdiwgcG9ydHNbKHBwKS1cdTAwM2VpbmRleF0pXG4mIzQzOyNkZWZpbmUgdG9fZGV2aWNlKHByaXYpICgocHJpdiktXHUwMDNlZHMuZGV2KVxuJiM0MztcbiYjNDM7c3RhdGljIHUzMiB5dDkyMXhfbGVkX3JlZ2FkZHIoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCBpbnQgcG9ydCwgaW50IGdyb3VwKVxuJiM0Mzt7XG4mIzQzO1x0c3dpdGNoIChncm91cCkge1xuJiM0MztcdGNhc2UgMDpcbiYjNDM7XHRkZWZhdWx0OlxuJiM0MztcdFx0cmV0dXJuIFlUOTIxWF9MRUQwX1BPUlRuKHBvcnQpO1xuJiM0MztcdGNhc2UgMTpcbiYjNDM7XHRcdHJldHVybiBZVDkyMVhfTEVEMV9QT1JUbihwb3J0KTtcbiYjNDM7XHRjYXNlIDI6XG4mIzQzO1x0XHRyZXR1cm4gWVQ5MjFYX0xFRDJfUE9SVG4ocG9ydCk7XG4mIzQzO1x0fVxuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50XG4mIzQzO3l0OTIxeF9sZWRfZm9yY2VfZ2V0KHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgaW50IHBvcnQsIGludCBncm91cCwgYm9vbCAqb25wKVxuJiM0Mzt7XG4mIzQzO1x0dTMyIHZhbDtcbiYjNDM7XHRpbnQgcmVzO1xuJiM0MztcbiYjNDM7XHRyZXMgPSB5dDkyMXhfcmVnX3JlYWQocHJpdiwgWVQ5MjFYX0xFRDJfUE9SVG4ocG9ydCksIFx1MDAyNnZhbCk7XG4mIzQzO1x0aWYgKHJlcylcbiYjNDM7XHRcdHJldHVybiByZXM7XG4mIzQzO1xuJiM0MztcdCpvbnAgPSAodmFsIFx1MDAyNiBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbl9NKGdyb3VwKSkgPT1cbiYjNDM7XHQgICAgICAgWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW5fT04oZ3JvdXApO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50XG4mIzQzO3l0OTIxeF9sZWRfZm9yY2Vfc2V0KHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgaW50IHBvcnQsIGludCBncm91cCwgYm9vbCBvbilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB5dDkyMXhfcG9ydCAqcHAgPSBcdTAwMjZwcml2LVx1MDAzZXBvcnRzW3BvcnRdO1xuJiM0MztcdHN0cnVjdCB5dDkyMXhfbGVkICpsZWQgPSBwcC1cdTAwM2VsZWRzW2dyb3VwXTtcbiYjNDM7XHR1MzIgY3RybDtcbiYjNDM7XHR1MzIgbWFzaztcbiYjNDM7XG4mIzQzO1x0bGVkLVx1MDAzZXVzZV9jeWNsZSA9IGZhbHNlO1xuJiM0MztcdGxlZC1cdTAwM2V1c2VfZHV0eSA9IGZhbHNlO1xuJiM0MztcbiYjNDM7XHRtYXNrID0gWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW5fTShncm91cCk7XG4mIzQzO1x0Y3RybCA9IG9uID8gWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW5fT04oZ3JvdXApIDpcbiYjNDM7XHQgICAgICAgWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW5fT0ZGKGdyb3VwKTtcbiYjNDM7XHRyZXR1cm4geXQ5MjF4X3JlZ191cGRhdGVfYml0cyhwcml2LCBZVDkyMVhfTEVEMl9QT1JUbihwb3J0KSwgbWFzayxcbiYjNDM7XHRcdFx0XHQgICAgICBjdHJsKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludFxuJiM0Mzt5dDkyMXhfbGVkX2JsaW5rX3NlbGVjdChjb25zdCBzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHVuc2lnbmVkIGxvbmcgb24sXG4mIzQzO1x0XHRcdHVuc2lnbmVkIGxvbmcgb2ZmLCB1bnNpZ25lZCBzaG9ydCAqY3ljbGVwLFxuJiM0MztcdFx0XHR1bnNpZ25lZCBjaGFyICpkdXR5cClcbiYjNDM7e1xuJiM0MztcdHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGR1dHlzW10gPSB7XG4mIzQzO1x0XHRZVDkyMVhfTEVEX0RVVFkoMSwgNiksXG4mIzQzO1x0XHRZVDkyMVhfTEVEX0RVVFkoMSwgNCksXG4mIzQzO1x0XHRZVDkyMVhfTEVEX0RVVFkoMSwgMyksXG4mIzQzO1x0XHRZVDkyMVhfTEVEX0RVVFkoMSwgMiksXG4mIzQzO1x0fTtcbiYjNDM7XHR1bnNpZ25lZCBpbnQgY3ljbGVfdXBwZXI7XG4mIzQzO1x0dW5zaWduZWQgaW50IGN5Y2xlX3JlcTtcbiYjNDM7XHR1bnNpZ25lZCBpbnQgZHV0eV9yZXE7XG4mIzQzO1x0dW5zaWduZWQgaW50IGN5Y2xlO1xuJiM0MztcdHVuc2lnbmVkIGludCBkdXR5O1xuJiM0MztcbiYjNDM7XHRjeWNsZSA9IFlUOTIxWF9MRURfQkxJTktfTUFYO1xuJiM0MztcdGN5Y2xlX3VwcGVyID0gY3ljbGUgKiAxMTU4NSAvIDgxOTIgJiM0MzsgMTsgIC8qIE1fU1FSVDIgKiBjeWNsZSAqL1xuJiM0MztcdGlmIChjaGVja19hZGRfb3ZlcmZsb3cob24sIG9mZiwgXHUwMDI2Y3ljbGVfcmVxKSB8fCBjeWNsZV9yZXEgXHUwMDNlPSBjeWNsZV91cHBlcilcbiYjNDM7XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiYjNDM7XG4mIzQzO1x0Zm9yICg7IGN5Y2xlIFx1MDAzZSBZVDkyMVhfTEVEX0JMSU5LX01JTjsgY3ljbGVfdXBwZXIgXHUwMDNlXHUwMDNlPSAxLCBjeWNsZSBcdTAwM2VcdTAwM2U9IDEpXG4mIzQzO1x0XHRpZiAoY3ljbGVfcmVxIFx1MDAzZT0gY3ljbGVfdXBwZXIgXHUwMDNlXHUwMDNlIDEpXG4mIzQzO1x0XHRcdGJyZWFrO1xuJiM0MztcdCpjeWNsZXAgPSBjeWNsZTtcbiYjNDM7XG4mIzQzO1x0ZHV0eV9yZXEgPSBESVZfUk9VTkRfQ0xPU0VTVChZVDkyMVhfTEVEX0RVVFlfREVOT00gKlxuJiM0MztcdFx0XHRcdCAgICAgKG9uIFx1MDAzZSBvZmYgPyBvZmYgOiBvbiksIGN5Y2xlX3JlcSk7XG4mIzQzO1x0Zm9yICh1bnNpZ25lZCBpbnQgaSA9IEFSUkFZX1NJWkUoZHV0eXMpIC0gMTs7IGktLSlcbiYjNDM7XHRcdGlmIChpID09IDAgfHwgZHV0eV9yZXEgXHUwMDNlPSAoZHV0eXNbaSAtIDFdICYjNDM7IGR1dHlzW2ldKSAvIDIpIHtcbiYjNDM7XHRcdFx0ZHV0eSA9IGR1dHlzW2ldO1xuJiM0MztcdFx0XHRicmVhaztcbiYjNDM7XHRcdH1cbiYjNDM7XHRpZiAob24gXHUwMDNlIG9mZilcbiYjNDM7XHRcdGR1dHkgPSBZVDkyMVhfTEVEX0RVVFlfREVOT00gLSBkdXR5O1xuJiM0MztcdCpkdXR5cCA9IGR1dHk7XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50XG4mIzQzO3l0OTIxeF9sZWRfYmxpbmtfc2V0KHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgaW50IHBvcnQsIGludCBncm91cCxcbiYjNDM7XHRcdCAgICAgdW5zaWduZWQgbG9uZyAqb25wLCB1bnNpZ25lZCBsb25nICpvZmZwKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHl0OTIxeF9wb3J0ICpwcCA9IFx1MDAyNnByaXYtXHUwMDNlcG9ydHNbcG9ydF07XG4mIzQzO1x0c3RydWN0IHl0OTIxeF9sZWQgKmxlZCA9IHBwLVx1MDAzZWxlZHNbZ3JvdXBdO1xuJiM0MztcdHVuc2lnbmVkIHNob3J0IGN5Y2xlO1xuJiM0MztcdHVuc2lnbmVkIGNoYXIgZHV0eTtcbiYjNDM7XHRib29sIHVzZV9jeWNsZTtcbiYjNDM7XHR1MzIgY3RybDtcbiYjNDM7XHR1MzIgbWFzaztcbiYjNDM7XHR1MzIgdmFsO1xuJiM0MztcdGludCByZXM7XG4mIzQzO1xuJiM0MztcdGlmICghKm9ucCBcdTAwMjZcdTAwMjYgISpvZmZwKSB7XG4mIzQzO1x0XHRjeWNsZSA9IFlUOTIxWF9MRURfQkxJTktfREVGO1xuJiM0MztcdFx0ZHV0eSA9IFlUOTIxWF9MRURfRFVUWSgxLCAyKTtcbiYjNDM7XHRcdGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIFx1MDAzYyBZVDkyMVhfTEVEX0dST1VQX05VTTsgaSYjNDM7JiM0MzspXG4mIzQzO1x0XHRcdGlmIChpICE9IGdyb3VwIFx1MDAyNlx1MDAyNiBwcC1cdTAwM2VsZWRzW2ldIFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0XHQgICAgcHAtXHUwMDNlbGVkc1tpXS1cdTAwM2V1c2VfZHV0eSkge1xuJiM0MztcdFx0XHRcdGR1dHkgPSBwcC1cdTAwM2VsZWRfZHV0eTtcbiYjNDM7XHRcdFx0XHRicmVhaztcbiYjNDM7XHRcdFx0fVxuJiM0MztcbiYjNDM7XHRcdHVzZV9jeWNsZSA9IGZhbHNlO1xuJiM0MztcdH0gZWxzZSB7XG4mIzQzO1x0XHRib29sIGNoYW5nZV9jeWNsZTtcbiYjNDM7XHRcdGJvb2wgY2hhbmdlX2R1dHk7XG4mIzQzO1xuJiM0MztcdFx0cmVzID0geXQ5MjF4X2xlZF9ibGlua19zZWxlY3QocHJpdiwgKm9ucCwgKm9mZnAsIFx1MDAyNmN5Y2xlLCBcdTAwMjZkdXR5KTtcbiYjNDM7XHRcdGlmIChyZXMpXG4mIzQzO1x0XHRcdHJldHVybiByZXM7XG4mIzQzO1xuJiM0MztcdFx0dXNlX2N5Y2xlID0gY3ljbGUgXHUwMDNjIFlUOTIxWF9MRURfQkxJTktfREVGO1xuJiM0MztcdFx0Y2hhbmdlX2N5Y2xlID0gdXNlX2N5Y2xlIFx1MDAyNlx1MDAyNiBjeWNsZSAhPSBwcC1cdTAwM2VsZWRfY3ljbGU7XG4mIzQzO1x0XHRjaGFuZ2VfZHV0eSA9IGR1dHkgIT0gcHAtXHUwMDNlbGVkX2R1dHk7XG4mIzQzO1x0XHRpZiAoY2hhbmdlX2N5Y2xlIHx8IGNoYW5nZV9kdXR5KVxuJiM0MztcdFx0XHRmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSBcdTAwM2MgWVQ5MjFYX0xFRF9HUk9VUF9OVU07XG4mIzQzO1x0XHRcdCAgICAgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdFx0XHRpZiAoaSA9PSBncm91cCB8fCAhcHAtXHUwMDNlbGVkc1tpXSlcbiYjNDM7XHRcdFx0XHRcdGNvbnRpbnVlO1xuJiM0MztcdFx0XHRcdGlmICgoY2hhbmdlX2N5Y2xlIFx1MDAyNlx1MDAyNiBwcC1cdTAwM2VsZWRzW2ldLVx1MDAzZXVzZV9jeWNsZSkgfHxcbiYjNDM7XHRcdFx0XHQgICAgKGNoYW5nZV9kdXR5IFx1MDAyNlx1MDAyNiBwcC1cdTAwM2VsZWRzW2ldLVx1MDAzZXVzZV9kdXR5KSlcbiYjNDM7XHRcdFx0XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiYjNDM7XHRcdFx0fVxuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0LyogVGhlIGNoaXAgc2VlbXMgdG8gamFtIGEgd2hpbGUgaWYgY2hhbmdpbmcgZHV0eSBkaXJlY3RseSAqL1xuJiM0MztcdHJlcyA9IHl0OTIxeF9yZWdfcmVhZChwcml2LCBZVDkyMVhfTEVEMl9QT1JUbihwb3J0KSwgXHUwMDI2dmFsKTtcbiYjNDM7XHRpZiAocmVzKVxuJiM0MztcdFx0cmV0dXJuIHJlcztcbiYjNDM7XG4mIzQzO1x0Y3RybCA9IHZhbCBcdTAwMjYgfllUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuX00oZ3JvdXApO1xuJiM0MztcdGN0cmwgfD0gWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW5fRE9OVENBUkUoZ3JvdXApO1xuJiM0MztcdGlmICh2YWwgIT0gY3RybCkge1xuJiM0MztcdFx0cmVzID0geXQ5MjF4X3JlZ193cml0ZShwcml2LCBZVDkyMVhfTEVEMl9QT1JUbihwb3J0KSwgY3RybCk7XG4mIzQzO1x0XHRpZiAocmVzKVxuJiM0MztcdFx0XHRyZXR1cm4gcmVzO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0bWFzayA9IFlUOTIxWF9MRUQxX1BPUlRfQkxJTktfRFVUWV9NIHwgWVQ5MjFYX0xFRDFfUE9SVF9CTElOS19EVVRZX0NPTVA7XG4mIzQzO1x0c3dpdGNoIChkdXR5IFx1MDAzZT0gWVQ5MjFYX0xFRF9EVVRZKDEsIDIpID8gZHV0eSA6XG4mIzQzO1x0XHRZVDkyMVhfTEVEX0RVVFlfREVOT00gLSBkdXR5KSB7XG4mIzQzO1x0ZGVmYXVsdDpcbiYjNDM7XHRcdGR1dHkgPSBZVDkyMVhfTEVEX0RVVFkoMSwgMik7XG4mIzQzO1x0XHRmYWxsdGhyb3VnaDtcbiYjNDM7XHRjYXNlIFlUOTIxWF9MRURfRFVUWSgxLCAyKTpcbiYjNDM7XHRcdGN0cmwgPSBZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFlfMV8yO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0Y2FzZSBZVDkyMVhfTEVEX0RVVFkoMiwgMyk6XG4mIzQzO1x0XHRjdHJsID0gWVQ5MjFYX0xFRDFfUE9SVF9CTElOS19EVVRZXzJfMztcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdGNhc2UgWVQ5MjFYX0xFRF9EVVRZKDMsIDQpOlxuJiM0MztcdFx0Y3RybCA9IFlUOTIxWF9MRUQxX1BPUlRfQkxJTktfRFVUWV8zXzQ7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHRjYXNlIFlUOTIxWF9MRURfRFVUWSg1LCA2KTpcbiYjNDM7XHRcdGN0cmwgPSBZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFlfNV82O1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0fVxuJiM0MztcdGlmIChkdXR5IFx1MDAzYyBZVDkyMVhfTEVEX0RVVFkoMSwgMikpXG4mIzQzO1x0XHRjdHJsIHw9IFlUOTIxWF9MRUQxX1BPUlRfQkxJTktfRFVUWV9DT01QO1xuJiM0MztcdGlmICh1c2VfY3ljbGUpIHtcbiYjNDM7XHRcdG1hc2sgfD0gWVQ5MjFYX0xFRDFfUE9SVF9PVEhFUl9CTElOS19NO1xuJiM0MztcdFx0Y3RybCB8PSBZVDkyMVhfTEVEMV9QT1JUX09USEVSX0JMSU5LKDkgLSBfX2ZscyhjeWNsZSkpO1xuJiM0MztcdH1cbiYjNDM7XHRyZXMgPSB5dDkyMXhfcmVnX3VwZGF0ZV9iaXRzKHByaXYsIFlUOTIxWF9MRUQxX1BPUlRuKHBvcnQpLCBtYXNrLCBjdHJsKTtcbiYjNDM7XHRpZiAocmVzKVxuJiM0MztcdFx0cmV0dXJuIHJlcztcbiYjNDM7XG4mIzQzO1x0Y3RybCA9IHZhbCBcdTAwMjYgfihZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbl9NKGdyb3VwKSB8XG4mIzQzO1x0XHQgICAgICAgWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRV9CTElOS25fTShncm91cCkpO1xuJiM0MztcdGN0cmwgfD0gWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW5fQkxJTksoZ3JvdXApO1xuJiM0MztcdGlmICh1c2VfY3ljbGUpXG4mIzQzO1x0XHRjdHJsIHw9IFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VfQkxJTktuX09USEVSKGdyb3VwKTtcbiYjNDM7XHRlbHNlXG4mIzQzO1x0XHRjdHJsIHw9IFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VfQkxJTktuKGdyb3VwLCBfX2ZscyhjeWNsZSkgLSA5KTtcbiYjNDM7XHRyZXMgPSB5dDkyMXhfcmVnX3dyaXRlKHByaXYsIFlUOTIxWF9MRUQyX1BPUlRuKHBvcnQpLCBjdHJsKTtcbiYjNDM7XHRpZiAocmVzKVxuJiM0MztcdFx0cmV0dXJuIHJlcztcbiYjNDM7XG4mIzQzO1x0bGVkLVx1MDAzZXVzZV9jeWNsZSA9IHVzZV9jeWNsZTtcbiYjNDM7XHRpZiAodXNlX2N5Y2xlKVxuJiM0MztcdFx0cHAtXHUwMDNlbGVkX2N5Y2xlID0gY3ljbGU7XG4mIzQzO1x0bGVkLVx1MDAzZXVzZV9kdXR5ID0gdHJ1ZTtcbiYjNDM7XHRwcC1cdTAwM2VsZWRfZHV0eSA9IGR1dHk7XG4mIzQzO1xuJiM0MztcdCpvbnAgPSBESVZfUk9VTkRfQ0xPU0VTVChkdXR5ICogY3ljbGUsIFlUOTIxWF9MRURfRFVUWV9ERU5PTSk7XG4mIzQzO1x0Km9mZnAgPSBjeWNsZSAtICpvbnA7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0cnVjdCB5dDkyMXhfbGVkX3RyaWdnZXJfbWFwIHtcbiYjNDM7XHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuJiM0MztcdHUzMiBtYXNrO1xuJiM0Mzt9O1xuJiM0MztcbiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCB5dDkyMXhfbGVkX3RyaWdnZXJfbWFwIHl0OTIxeF9sZWRfdHJpZ2dlcl9tYXBzW10gPSB7XG4mIzQzO1x0e0JJVChUUklHR0VSX05FVERFVl9MSU5LKSxcbiYjNDM7XHQgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfRFVQTEVYX0hBTEYgfCBZVDkyMVhfTEVEeF9QT1JUX0FDVF9EVVBMRVhfRlVMTH0sXG4mIzQzO1x0e0JJVChUUklHR0VSX05FVERFVl9MSU5LXzEwKSwgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfMTBNfSxcbiYjNDM7XHR7QklUKFRSSUdHRVJfTkVUREVWX0xJTktfMTAwKSwgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfMTAwTX0sXG4mIzQzO1x0e0JJVChUUklHR0VSX05FVERFVl9MSU5LXzEwMDApLCBZVDkyMVhfTEVEeF9QT1JUX0FDVF8xMDAwTX0sXG4mIzQzO1x0e0JJVChUUklHR0VSX05FVERFVl9IQUxGX0RVUExFWCksIFlUOTIxWF9MRUR4X1BPUlRfQUNUX0RVUExFWF9IQUxGfSxcbiYjNDM7XHR7QklUKFRSSUdHRVJfTkVUREVWX0ZVTExfRFVQTEVYKSwgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfRFVQTEVYX0ZVTEx9LFxuJiM0MztcdHtCSVQoVFJJR0dFUl9ORVRERVZfVFgpLCBZVDkyMVhfTEVEeF9QT1JUX0FDVF9UWF9CTElOS30sXG4mIzQzO1x0e0JJVChUUklHR0VSX05FVERFVl9SWCksIFlUOTIxWF9MRUR4X1BPUlRfQUNUX1JYX0JMSU5LfSxcbiYjNDM7XHR7QklUKFRSSUdHRVJfTkVUREVWX1RYX0VSUikgfCBCSVQoVFJJR0dFUl9ORVRERVZfUlhfRVJSKSxcbiYjNDM7XHQgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfQ09MTElTSU9OX0JMSU5LfSxcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO3N0YXRpYyBib29sXG4mIzQzO3l0OTIxeF9sZWRfdHJpZ2dlcl9pc19zdXBwb3J0ZWQoY29uc3Qgc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCBpbnQgcG9ydCxcbiYjNDM7XHRcdFx0XHRpbnQgZ3JvdXAsIHVuc2lnbmVkIGxvbmcgZmxhZ3MpXG4mIzQzO3tcbiYjNDM7XHRpZiAoIWZsYWdzKVxuJiM0MztcdFx0cmV0dXJuIHRydWU7XG4mIzQzO1xuJiM0MztcdGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIFx1MDAzYyBBUlJBWV9TSVpFKHl0OTIxeF9sZWRfdHJpZ2dlcl9tYXBzKTsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdGNvbnN0IHN0cnVjdCB5dDkyMXhfbGVkX3RyaWdnZXJfbWFwICptYXAgPSBcdTAwMjZ5dDkyMXhfbGVkX3RyaWdnZXJfbWFwc1tpXTtcbiYjNDM7XG4mIzQzO1x0XHRpZiAoKGZsYWdzIFx1MDAyNiBtYXAtXHUwMDNlZmxhZ3MpID09IG1hcC1cdTAwM2VmbGFncykge1xuJiM0MztcdFx0XHRmbGFncyBcdTAwMjY9IH5tYXAtXHUwMDNlZmxhZ3M7XG4mIzQzO1x0XHRcdGlmICghZmxhZ3MpXG4mIzQzO1x0XHRcdFx0cmV0dXJuIHRydWU7XG4mIzQzO1x0XHR9XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gZmFsc2U7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnRcbiYjNDM7eXQ5MjF4X2xlZF90cmlnZ2VyX2dldChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIGludCBwb3J0LCBpbnQgZ3JvdXAsXG4mIzQzO1x0XHQgICAgICAgdW5zaWduZWQgbG9uZyAqZmxhZ3NwKVxuJiM0Mzt7XG4mIzQzO1x0dTMyIGFkZHI7XG4mIzQzO1x0dTMyIHZhbDtcbiYjNDM7XHRpbnQgcmVzO1xuJiM0MztcbiYjNDM7XHRyZXMgPSB5dDkyMXhfcmVnX3JlYWQocHJpdiwgWVQ5MjFYX0xFRDJfUE9SVG4ocG9ydCksIFx1MDAyNnZhbCk7XG4mIzQzO1x0aWYgKHJlcylcbiYjNDM7XHRcdHJldHVybiByZXM7XG4mIzQzO1xuJiM0MztcdGlmICgodmFsIFx1MDAyNiBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbl9NKGdyb3VwKSkgIT1cbiYjNDM7XHQgICAgWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW5fRE9OVENBUkUoZ3JvdXApKSB7XG4mIzQzO1x0XHQqZmxhZ3NwID0gMDtcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKGdyb3VwICE9IDIpIHtcbiYjNDM7XHRcdGFkZHIgPSB5dDkyMXhfbGVkX3JlZ2FkZHIocHJpdiwgcG9ydCwgZ3JvdXApO1xuJiM0MztcdFx0cmVzID0geXQ5MjF4X3JlZ19yZWFkKHByaXYsIGFkZHIsIFx1MDAyNnZhbCk7XG4mIzQzO1x0XHRpZiAocmVzKVxuJiM0MztcdFx0XHRyZXR1cm4gcmVzO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0KmZsYWdzcCA9IDA7XG4mIzQzO1x0Zm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgXHUwMDNjIEFSUkFZX1NJWkUoeXQ5MjF4X2xlZF90cmlnZ2VyX21hcHMpOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0Y29uc3Qgc3RydWN0IHl0OTIxeF9sZWRfdHJpZ2dlcl9tYXAgKm1hcCA9IFx1MDAyNnl0OTIxeF9sZWRfdHJpZ2dlcl9tYXBzW2ldO1xuJiM0MztcbiYjNDM7XHRcdGlmICgodmFsIFx1MDAyNiBtYXAtXHUwMDNlbWFzaykgPT0gbWFwLVx1MDAzZW1hc2spXG4mIzQzO1x0XHRcdCpmbGFnc3AgfD0gbWFwLVx1MDAzZWZsYWdzO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnRcbiYjNDM7eXQ5MjF4X2xlZF90cmlnZ2VyX3NldChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIGludCBwb3J0LCBpbnQgZ3JvdXAsXG4mIzQzO1x0XHQgICAgICAgdW5zaWduZWQgbG9uZyBmbGFncylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB5dDkyMXhfcG9ydCAqcHAgPSBcdTAwMjZwcml2LVx1MDAzZXBvcnRzW3BvcnRdO1xuJiM0MztcdHN0cnVjdCB5dDkyMXhfbGVkICpsZWQgPSBwcC1cdTAwM2VsZWRzW2dyb3VwXTtcbiYjNDM7XHR1MzIgYWRkcjtcbiYjNDM7XHR1MzIgY3RybDtcbiYjNDM7XHR1MzIgbWFzaztcbiYjNDM7XHRpbnQgcmVzO1xuJiM0MztcbiYjNDM7XHRjdHJsID0gMDtcbiYjNDM7XHRmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSBcdTAwM2MgQVJSQVlfU0laRSh5dDkyMXhfbGVkX3RyaWdnZXJfbWFwcyk7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRjb25zdCBzdHJ1Y3QgeXQ5MjF4X2xlZF90cmlnZ2VyX21hcCAqbWFwID0gXHUwMDI2eXQ5MjF4X2xlZF90cmlnZ2VyX21hcHNbaV07XG4mIzQzO1xuJiM0MztcdFx0aWYgKChmbGFncyBcdTAwMjYgbWFwLVx1MDAzZWZsYWdzKSA9PSBtYXAtXHUwMDNlZmxhZ3MpIHtcbiYjNDM7XHRcdFx0ZmxhZ3MgXHUwMDI2PSB+bWFwLVx1MDAzZWZsYWdzO1xuJiM0MztcdFx0XHRjdHJsIHw9IG1hcC1cdTAwM2VtYXNrO1xuJiM0MztcdFx0XHRpZiAoIWZsYWdzKVxuJiM0MztcdFx0XHRcdGJyZWFrO1xuJiM0MztcdFx0fVxuJiM0MztcdH1cbiYjNDM7XHRpZiAoZmxhZ3MpXG4mIzQzO1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4mIzQzO1xuJiM0MztcdGxlZC1cdTAwM2V1c2VfY3ljbGUgPSBmYWxzZTtcbiYjNDM7XHRsZWQtXHUwMDNldXNlX2R1dHkgPSBmYWxzZTtcbiYjNDM7XG4mIzQzO1x0bWFzayA9ICFncm91cCA/IFlUOTIxWF9MRUQwX1BPUlRfQUNUX00gOiBZVDkyMVhfTEVEeF9QT1JUX0FDVF9NO1xuJiM0MztcdGlmIChncm91cCA9PSAyKSB7XG4mIzQzO1x0XHRtYXNrIHw9IFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuX00oZ3JvdXApO1xuJiM0MztcdFx0Y3RybCB8PSBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbl9ET05UQ0FSRShncm91cCk7XG4mIzQzO1x0fVxuJiM0MztcdGFkZHIgPSB5dDkyMXhfbGVkX3JlZ2FkZHIocHJpdiwgcG9ydCwgZ3JvdXApO1xuJiM0MztcdHJlcyA9IHl0OTIxeF9yZWdfdXBkYXRlX2JpdHMocHJpdiwgYWRkciwgbWFzaywgY3RybCk7XG4mIzQzO1x0aWYgKHJlcylcbiYjNDM7XHRcdHJldHVybiByZXM7XG4mIzQzO1xuJiM0MztcdGlmIChncm91cCAhPSAyKSB7XG4mIzQzO1x0XHRtYXNrID0gWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW5fTShncm91cCk7XG4mIzQzO1x0XHRjdHJsID0gWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW5fRE9OVENBUkUoZ3JvdXApO1xuJiM0MztcdFx0cmVzID0geXQ5MjF4X3JlZ191cGRhdGVfYml0cyhwcml2LCBZVDkyMVhfTEVEMl9QT1JUbihwb3J0KSxcbiYjNDM7XHRcdFx0XHRcdCAgICAgbWFzaywgY3RybCk7XG4mIzQzO1x0XHRpZiAocmVzKVxuJiM0MztcdFx0XHRyZXR1cm4gcmVzO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnRcbiYjNDM7eXQ5MjF4X2NsZWRfYnJpZ2h0bmVzc19zZXRfYmxvY2tpbmcoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYsXG4mIzQzO1x0XHRcdFx0ICAgIGVudW0gbGVkX2JyaWdodG5lc3MgYnJpZ2h0bmVzcylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB5dDkyMXhfbGVkICpsZWQgPSB0b195dDkyMXhfbGVkKGxlZF9jZGV2KTtcbiYjNDM7XHRzdHJ1Y3QgeXQ5MjF4X3BvcnQgKnBwID0gdG9feXQ5MjF4X3BvcnQobGVkKTtcbiYjNDM7XHRzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYgPSB0b195dDkyMXhfcHJpdihwcCk7XG4mIzQzO1x0aW50IHJlcztcbiYjNDM7XG4mIzQzO1x0bXV0ZXhfbG9jayhcdTAwMjZwcml2LVx1MDAzZXJlZ19sb2NrKTtcbiYjNDM7XHRyZXMgPSB5dDkyMXhfbGVkX2ZvcmNlX3NldChwcml2LCBwcC1cdTAwM2VpbmRleCwgbGVkLVx1MDAzZWdyb3VwLCBicmlnaHRuZXNzKTtcbiYjNDM7XHRtdXRleF91bmxvY2soXHUwMDI2cHJpdi1cdTAwM2VyZWdfbG9jayk7XG4mIzQzO1xuJiM0MztcdHJldHVybiByZXM7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnRcbiYjNDM7eXQ5MjF4X2NsZWRfYmxpbmtfc2V0KHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2LCB1bnNpZ25lZCBsb25nICpkZWxheV9vbixcbiYjNDM7XHRcdCAgICAgIHVuc2lnbmVkIGxvbmcgKmRlbGF5X29mZilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB5dDkyMXhfbGVkICpsZWQgPSB0b195dDkyMXhfbGVkKGxlZF9jZGV2KTtcbiYjNDM7XHRzdHJ1Y3QgeXQ5MjF4X3BvcnQgKnBwID0gdG9feXQ5MjF4X3BvcnQobGVkKTtcbiYjNDM7XHRzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYgPSB0b195dDkyMXhfcHJpdihwcCk7XG4mIzQzO1x0aW50IHJlcztcbiYjNDM7XG4mIzQzO1x0bXV0ZXhfbG9jayhcdTAwMjZwcml2LVx1MDAzZXJlZ19sb2NrKTtcbiYjNDM7XHRyZXMgPSB5dDkyMXhfbGVkX2JsaW5rX3NldChwcml2LCBwcC1cdTAwM2VpbmRleCwgbGVkLVx1MDAzZWdyb3VwLCBkZWxheV9vbixcbiYjNDM7XHRcdFx0XHQgICBkZWxheV9vZmYpO1xuJiM0MztcdG11dGV4X3VubG9jayhcdTAwMjZwcml2LVx1MDAzZXJlZ19sb2NrKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHJlcztcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHN0cnVjdCBkZXZpY2UgKiBfX21heWJlX3VudXNlZFxuJiM0Mzt5dDkyMXhfY2xlZF9od19jb250cm9sX2dldF9kZXZpY2Uoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgeXQ5MjF4X2xlZCAqbGVkID0gdG9feXQ5MjF4X2xlZChsZWRfY2Rldik7XG4mIzQzO1x0c3RydWN0IHl0OTIxeF9wb3J0ICpwcCA9IHRvX3l0OTIxeF9wb3J0KGxlZCk7XG4mIzQzO1x0c3RydWN0IHl0OTIxeF9wcml2ICpwcml2ID0gdG9feXQ5MjF4X3ByaXYocHApO1xuJiM0MztcdHN0cnVjdCBkc2FfcG9ydCAqZHA7XG4mIzQzO1xuJiM0MztcdGRwID0gZHNhX3RvX3BvcnQoXHUwMDI2cHJpdi1cdTAwM2VkcywgcHAtXHUwMDNlaW5kZXgpO1xuJiM0MztcdGlmICghZHApXG4mIzQzO1x0XHRyZXR1cm4gTlVMTDtcbiYjNDM7XG4mIzQzO1x0aWYgKGRzYV9wb3J0X2lzX3VzZXIoZHApKVxuJiM0MztcdFx0cmV0dXJuIFx1MDAyNmRwLVx1MDAzZXVzZXItXHUwMDNlZGV2O1xuJiM0MztcdGlmIChkc2FfcG9ydF9pc19jcHUoZHApKVxuJiM0MztcdFx0cmV0dXJuIFx1MDAyNmRwLVx1MDAzZWNvbmR1aXQtXHUwMDNlZGV2O1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gTlVMTDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBfX21heWJlX3VudXNlZFxuJiM0Mzt5dDkyMXhfY2xlZF9od19jb250cm9sX2lzX3N1cHBvcnRlZChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldixcbiYjNDM7XHRcdFx0XHQgICAgdW5zaWduZWQgbG9uZyBmbGFncylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB5dDkyMXhfbGVkICpsZWQgPSB0b195dDkyMXhfbGVkKGxlZF9jZGV2KTtcbiYjNDM7XHRzdHJ1Y3QgeXQ5MjF4X3BvcnQgKnBwID0gdG9feXQ5MjF4X3BvcnQobGVkKTtcbiYjNDM7XHRzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYgPSB0b195dDkyMXhfcHJpdihwcCk7XG4mIzQzO1xuJiM0MztcdGlmICh5dDkyMXhfbGVkX3RyaWdnZXJfaXNfc3VwcG9ydGVkKHByaXYsIHBwLVx1MDAzZWluZGV4LCBsZWQtXHUwMDNlZ3JvdXAsIGZsYWdzKSlcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcdHJldHVybiAtRU9QTk9UU1VQUDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBfX21heWJlX3VudXNlZFxuJiM0Mzt5dDkyMXhfY2xlZF9od19jb250cm9sX2dldChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldiwgdW5zaWduZWQgbG9uZyAqZmxhZ3NwKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHl0OTIxeF9sZWQgKmxlZCA9IHRvX3l0OTIxeF9sZWQobGVkX2NkZXYpO1xuJiM0MztcdHN0cnVjdCB5dDkyMXhfcG9ydCAqcHAgPSB0b195dDkyMXhfcG9ydChsZWQpO1xuJiM0MztcdHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiA9IHRvX3l0OTIxeF9wcml2KHBwKTtcbiYjNDM7XHRpbnQgcmVzO1xuJiM0MztcbiYjNDM7XHRtdXRleF9sb2NrKFx1MDAyNnByaXYtXHUwMDNlcmVnX2xvY2spO1xuJiM0MztcdHJlcyA9IHl0OTIxeF9sZWRfdHJpZ2dlcl9nZXQocHJpdiwgcHAtXHUwMDNlaW5kZXgsIGxlZC1cdTAwM2Vncm91cCwgZmxhZ3NwKTtcbiYjNDM7XHRtdXRleF91bmxvY2soXHUwMDI2cHJpdi1cdTAwM2VyZWdfbG9jayk7XG4mIzQzO1xuJiM0MztcdHJldHVybiByZXM7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgX19tYXliZV91bnVzZWRcbiYjNDM7eXQ5MjF4X2NsZWRfaHdfY29udHJvbF9zZXQoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYsIHVuc2lnbmVkIGxvbmcgZmxhZ3MpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgeXQ5MjF4X2xlZCAqbGVkID0gdG9feXQ5MjF4X2xlZChsZWRfY2Rldik7XG4mIzQzO1x0c3RydWN0IHl0OTIxeF9wb3J0ICpwcCA9IHRvX3l0OTIxeF9wb3J0KGxlZCk7XG4mIzQzO1x0c3RydWN0IHl0OTIxeF9wcml2ICpwcml2ID0gdG9feXQ5MjF4X3ByaXYocHApO1xuJiM0MztcdGludCByZXM7XG4mIzQzO1xuJiM0MztcdG11dGV4X2xvY2soXHUwMDI2cHJpdi1cdTAwM2VyZWdfbG9jayk7XG4mIzQzO1x0cmVzID0geXQ5MjF4X2xlZF90cmlnZ2VyX3NldChwcml2LCBwcC1cdTAwM2VpbmRleCwgbGVkLVx1MDAzZWdyb3VwLCBmbGFncyk7XG4mIzQzO1x0bXV0ZXhfdW5sb2NrKFx1MDAyNnByaXYtXHUwMDNlcmVnX2xvY2spO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gcmVzO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50XG4mIzQzO3l0OTIxeF9sZWRfc2V0dXAoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCBpbnQgcG9ydCxcbiYjNDM7XHRcdCBzdHJ1Y3QgZndub2RlX2hhbmRsZSAqZndub2RlKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHl0OTIxeF9wb3J0ICpwcCA9IFx1MDAyNnByaXYtXHUwMDNlcG9ydHNbcG9ydF07XG4mIzQzO1x0c3RydWN0IGRldmljZSAqZGV2ID0gdG9fZGV2aWNlKHByaXYpO1xuJiM0MztcdHN0cnVjdCBsZWRfaW5pdF9kYXRhIGluaXRfZGF0YTtcbiYjNDM7XHRzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldjtcbiYjNDM7XHRjaGFyIG5hbWVbTEVEX01BWF9OQU1FX1NJWkVdO1xuJiM0MztcdGVudW0gbGVkX2RlZmF1bHRfc3RhdGUgc3RhdGU7XG4mIzQzO1x0c3RydWN0IHl0OTIxeF9sZWQgKmxlZDtcbiYjNDM7XHRib29sIGZvcmNlX2hpZ2g7XG4mIzQzO1x0Ym9vbCBmb3JjZV9sb3c7XG4mIzQzO1x0dTMyIGdyb3VwO1xuJiM0MztcdHUzMiBtYXNrO1xuJiM0MztcdHUzMiBjdHJsO1xuJiM0MztcdHUzMiB2YWw7XG4mIzQzO1x0Ym9vbCBvbjtcbiYjNDM7XHRpbnQgcmVzO1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdHJlcyA9IGZ3bm9kZV9wcm9wZXJ0eV9yZWFkX3UzMihmd25vZGUsIFwmIzM0O3JlZ1wmIzM0OywgXHUwMDI2Z3JvdXApO1xuJiM0MztcdGlmIChyZXMpXG4mIzQzO1x0XHRyZXR1cm4gcmVzO1xuJiM0MztcdGlmIChncm91cCBcdTAwM2U9IFlUOTIxWF9MRURfR1JPVVBfTlVNKSB7XG4mIzQzO1x0XHRkZXZfZXJyKGRldiwgXCYjMzQ7SW52YWxpZCBMRUQgcmVnICV1IGZvciBwb3J0ICVkXFxuXCYjMzQ7LCBncm91cCwgcG9ydCk7XG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XHR9XG4mIzQzO1x0aWYgKHBwLVx1MDAzZWxlZHNbZ3JvdXBdKVxuJiM0MztcdFx0cmV0dXJuIC1FRVhJU1Q7XG4mIzQzO1xuJiM0MztcdGZvcmNlX2hpZ2ggPSBmd25vZGVfcHJvcGVydHlfcmVhZF9ib29sKGZ3bm9kZSwgXCYjMzQ7YWN0aXZlLWhpZ2hcJiMzNDspO1xuJiM0MztcdGZvcmNlX2xvdyA9IGZ3bm9kZV9wcm9wZXJ0eV9yZWFkX2Jvb2woZndub2RlLCBcJiMzNDthY3RpdmUtbG93XCYjMzQ7KTtcbiYjNDM7XHRpZiAoZm9yY2VfaGlnaCBcdTAwMjZcdTAwMjYgZm9yY2VfbG93KSB7XG4mIzQzO1x0XHRkZXZfZXJyKGRldiwgXCYjMzQ7RHVwbGljYXRlIHBvbGFyaXRpZXMgZm9yIExFRCAlMDJkOiUwMnVcXG5cJiMzNDssXG4mIzQzO1x0XHRcdHBvcnQsIGdyb3VwKTtcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0bGVkID0gZGV2bV9remFsbG9jKGRldiwgc2l6ZW9mKCpsZWQpLCBHRlBfS0VSTkVMKTtcbiYjNDM7XHRpZiAoIWxlZClcbiYjNDM7XHRcdHJldHVybiAtRU5PTUVNO1xuJiM0MztcdGxlZC1cdTAwM2Vwb3J0ID0gcHA7XG4mIzQzO1x0bGVkLVx1MDAzZWdyb3VwID0gZ3JvdXA7XG4mIzQzO1xuJiM0MztcdHN0YXRlID0gbGVkX2luaXRfZGVmYXVsdF9zdGF0ZV9nZXQoZndub2RlKTtcbiYjNDM7XG4mIzQzO1x0bXV0ZXhfbG9jayhcdTAwMjZwcml2LVx1MDAzZXJlZ19sb2NrKTtcbiYjNDM7XG4mIzQzO1x0LyogSW52ZXJzaW9uIGlzIGludGVybmFsIC0gZm9yY2Ugb24gd2lsbCBnaXZlIGxvdyBsb2dpYy5cbiYjNDM7XHQgKiBJbiB0aGUgcmVzdCBvZiB0aGUgZmlsZSwgdHJlYXQgTEVEcyBhcyBpZiBhY3RpdmUtbG93LlxuJiM0MztcdCAqL1xuJiM0MztcdGlmIChmb3JjZV9oaWdoIHx8IGZvcmNlX2xvdykge1xuJiM0MztcdFx0cmVzID0geXQ5MjF4X3JlZ19yZWFkKHByaXYsIFlUOTIxWF9MRURfUEFSX0lOViwgXHUwMDI2dmFsKTtcbiYjNDM7XHRcdGlmIChyZXMpXG4mIzQzO1x0XHRcdGdvdG8gdW5sb2NrO1xuJiM0MztcbiYjNDM7XHRcdG1hc2sgPSBZVDkyMVhfTEVEX1BBUl9JTlZfSU5Wbm0oZ3JvdXAsIHBvcnQpO1xuJiM0MztcdFx0Y3RybCA9IGZvcmNlX2hpZ2ggPyB2YWwgfCBtYXNrIDogdmFsIFx1MDAyNiB+bWFzaztcbiYjNDM7XHRcdHJlcyA9IHl0OTIxeF9yZWdfd3JpdGUocHJpdiwgWVQ5MjFYX0xFRF9QQVJfSU5WLCBjdHJsKTtcbiYjNDM7XHRcdGlmIChyZXMpXG4mIzQzO1x0XHRcdGdvdG8gdW5sb2NrO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cHAtXHUwMDNlbGVkc1tncm91cF0gPSBsZWQ7XG4mIzQzO1xuJiM0MztcdHN3aXRjaCAoc3RhdGUpIHtcbiYjNDM7XHRjYXNlIExFRFNfREVGU1RBVEVfT0ZGOlxuJiM0MztcdGNhc2UgTEVEU19ERUZTVEFURV9PTjpcbiYjNDM7XHRkZWZhdWx0OlxuJiM0MztcdFx0b24gPSBzdGF0ZSA9PSBMRURTX0RFRlNUQVRFX09OO1xuJiM0MztcdFx0cmVzID0geXQ5MjF4X2xlZF9mb3JjZV9zZXQocHJpdiwgcG9ydCwgZ3JvdXAsIG9uKTtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdGNhc2UgTEVEU19ERUZTVEFURV9LRUVQOlxuJiM0MztcdFx0cmVzID0geXQ5MjF4X2xlZF9mb3JjZV9nZXQocHJpdiwgcG9ydCwgZ3JvdXAsIFx1MDAyNm9uKTtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO3VubG9jazpcbiYjNDM7XHRtdXRleF91bmxvY2soXHUwMDI2cHJpdi1cdTAwM2VyZWdfbG9jayk7XG4mIzQzO1x0aWYgKHJlcylcbiYjNDM7XHRcdGdvdG8gZXJyO1xuJiM0MztcbiYjNDM7XHRsZWRfY2RldiA9IFx1MDAyNmxlZC1cdTAwM2VjZGV2O1xuJiM0MztcdGxlZF9jZGV2LVx1MDAzZWJyaWdodG5lc3MgPSBvbjtcbiYjNDM7XHRsZWRfY2Rldi1cdTAwM2VtYXhfYnJpZ2h0bmVzcyA9IDE7XG4mIzQzO1x0bGVkX2NkZXYtXHUwMDNlZmxhZ3MgPSBMRURfUkVUQUlOX0FUX1NIVVRET1dOO1xuJiM0MztcdGxlZF9jZGV2LVx1MDAzZWJyaWdodG5lc3Nfc2V0X2Jsb2NraW5nID0geXQ5MjF4X2NsZWRfYnJpZ2h0bmVzc19zZXRfYmxvY2tpbmc7XG4mIzQzO1x0bGVkX2NkZXYtXHUwMDNlYmxpbmtfc2V0ID0geXQ5MjF4X2NsZWRfYmxpbmtfc2V0O1xuJiM0MzsjaWZkZWYgQ09ORklHX0xFRFNfVFJJR0dFUlNcbiYjNDM7XHRsZWRfY2Rldi1cdTAwM2Vod19jb250cm9sX3RyaWdnZXIgPSBcJiMzNDtuZXRkZXZcJiMzNDs7XG4mIzQzO1x0bGVkX2NkZXYtXHUwMDNlaHdfY29udHJvbF9nZXRfZGV2aWNlID0geXQ5MjF4X2NsZWRfaHdfY29udHJvbF9nZXRfZGV2aWNlO1xuJiM0MztcdGxlZF9jZGV2LVx1MDAzZWh3X2NvbnRyb2xfaXNfc3VwcG9ydGVkID0geXQ5MjF4X2NsZWRfaHdfY29udHJvbF9pc19zdXBwb3J0ZWQ7XG4mIzQzO1x0bGVkX2NkZXYtXHUwMDNlaHdfY29udHJvbF9nZXQgPSB5dDkyMXhfY2xlZF9od19jb250cm9sX2dldDtcbiYjNDM7XHRsZWRfY2Rldi1cdTAwM2Vod19jb250cm9sX3NldCA9IHl0OTIxeF9jbGVkX2h3X2NvbnRyb2xfc2V0O1xuJiM0MzsjZW5kaWZcbiYjNDM7XG4mIzQzO1x0c25wcmludGYobmFtZSwgc2l6ZW9mKG5hbWUpLCBZVDkyMVhfTkFNRSBcJiMzNDstJXU6JTAyZDolMDJ1XCYjMzQ7LFxuJiM0MztcdFx0IHByaXYtXHUwMDNlZHMuaW5kZXgsIHBvcnQsIGdyb3VwKTtcbiYjNDM7XHRpbml0X2RhdGEgPSAodHlwZW9mKGluaXRfZGF0YSkpe1xuJiM0MztcdFx0LmZ3bm9kZSA9IGZ3bm9kZSxcbiYjNDM7XHRcdC5kZWZhdWx0X2xhYmVsID0gXCYjMzQ7OnBvcnRcJiMzNDssXG4mIzQzO1x0XHQuZGV2aWNlbmFtZSA9IG5hbWUsXG4mIzQzO1x0XHQuZGV2bmFtZV9tYW5kYXRvcnkgPSB0cnVlLFxuJiM0MztcdH07XG4mIzQzO1x0cmVzID0gZGV2bV9sZWRfY2xhc3NkZXZfcmVnaXN0ZXJfZXh0KGRldiwgbGVkX2NkZXYsIFx1MDAyNmluaXRfZGF0YSk7XG4mIzQzO1x0aWYgKHJlcylcbiYjNDM7XHRcdGdvdG8gZXJyO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO2VycjpcbiYjNDM7XHRyZXQgPSByZXM7XG4mIzQzO1xuJiM0MztcdG11dGV4X2xvY2soXHUwMDI2cHJpdi1cdTAwM2VyZWdfbG9jayk7XG4mIzQzO1x0aWYgKHBwLVx1MDAzZWxlZHNbZ3JvdXBdKSB7XG4mIzQzO1x0XHRpZiAoZm9yY2VfaGlnaCB8fCBmb3JjZV9sb3cpIHtcbiYjNDM7XHRcdFx0cmVzID0geXQ5MjF4X3JlZ193cml0ZShwcml2LCBZVDkyMVhfTEVEX1BBUl9JTlYsIHZhbCk7XG4mIzQzO1x0XHRcdGlmIChyZXMpXG4mIzQzO1x0XHRcdFx0ZGV2X3dhcm4oZGV2LFxuJiM0MztcdFx0XHRcdFx0IFwmIzM0O0ZhaWxlZCB0byByZXZva2UgaW5pdGlhbGl6YXRpb24gZm9yIExFRCAlMDJkOiUwMnVcXG5cJiMzNDssXG4mIzQzO1x0XHRcdFx0XHQgcG9ydCwgZ3JvdXApO1xuJiM0MztcdFx0fVxuJiM0MztcbiYjNDM7XHRcdHBwLVx1MDAzZWxlZHNbZ3JvdXBdID0gTlVMTDtcbiYjNDM7XHR9XG4mIzQzO1x0bXV0ZXhfdW5sb2NrKFx1MDAyNnByaXYtXHUwMDNlcmVnX2xvY2spO1xuJiM0MztcbiYjNDM7XHRkZXZtX2tmcmVlKGRldiwgbGVkKTtcbiYjNDM7XHRyZXR1cm4gcmV0O1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCB5dDkyMXhfbGVkc19yZW1vdmVfcG9ydChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIGludCBwb3J0KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHl0OTIxeF9wb3J0ICpwcCA9IFx1MDAyNnByaXYtXHUwMDNlcG9ydHNbcG9ydF07XG4mIzQzO1x0c3RydWN0IGRldmljZSAqZGV2ID0gdG9fZGV2aWNlKHByaXYpO1xuJiM0MztcdGJvb2wgaGFzX2xlZHMgPSBmYWxzZTtcbiYjNDM7XG4mIzQzO1x0Zm9yIChpbnQgZ3JvdXAgPSAwOyBncm91cCBcdTAwM2MgWVQ5MjFYX0xFRF9HUk9VUF9OVU07IGdyb3VwJiM0MzsmIzQzOykge1xuJiM0MztcdFx0c3RydWN0IHl0OTIxeF9sZWQgKmxlZCA9IHBwLVx1MDAzZWxlZHNbZ3JvdXBdO1xuJiM0MztcbiYjNDM7XHRcdGlmIChsZWQpIHtcbiYjNDM7XHRcdFx0ZGV2bV9sZWRfY2xhc3NkZXZfdW5yZWdpc3RlcihkZXYsIFx1MDAyNmxlZC1cdTAwM2VjZGV2KTtcbiYjNDM7XHRcdFx0aGFzX2xlZHMgPSB0cnVlO1xuJiM0MztcdFx0fVxuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKCFoYXNfbGVkcylcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0LyogTm93IG5vIG9uZSBjYW4gYWNjZXNzIHRoZSBMRUQgY29udHJvbCBibG9ja3MsIGZyZWUgdGhlbSB3aXRob3V0XG4mIzQzO1x0ICogaG9sZGluZyB0aGUgbG9jay5cbiYjNDM7XHQgKi9cbiYjNDM7XHRmb3IgKGludCBncm91cCA9IDA7IGdyb3VwIFx1MDAzYyBZVDkyMVhfTEVEX0dST1VQX05VTTsgZ3JvdXAmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRzdHJ1Y3QgeXQ5MjF4X2xlZCAqbGVkID0gcHAtXHUwMDNlbGVkc1tncm91cF07XG4mIzQzO1xuJiM0MztcdFx0aWYgKGxlZCkge1xuJiM0MztcdFx0XHRwcC1cdTAwM2VsZWRzW2dyb3VwXSA9IE5VTEw7XG4mIzQzO1x0XHRcdGRldm1fa2ZyZWUoZGV2LCBsZWQpO1xuJiM0MztcdFx0fVxuJiM0MztcdH1cbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCB5dDkyMXhfbGVkc19zZXR1cF9wb3J0KHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgaW50IHBvcnQpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSB0b19kZXZpY2UocHJpdik7XG4mIzQzO1x0c3RydWN0IGRzYV9zd2l0Y2ggKmRzID0gXHUwMDI2cHJpdi1cdTAwM2VkcztcbiYjNDM7XHRzdHJ1Y3QgZGV2aWNlX25vZGUgKmxlZHNfbnA7XG4mIzQzO1x0c3RydWN0IGRzYV9wb3J0ICpkcDtcbiYjNDM7XG4mIzQzO1x0ZHAgPSBkc2FfdG9fcG9ydChkcywgcG9ydCk7XG4mIzQzO1x0bGVkc19ucCA9IG9mX2dldF9jaGlsZF9ieV9uYW1lKGRwLVx1MDAzZWRuLCBcJiMzNDtsZWRzXCYjMzQ7KTtcbiYjNDM7XHRpZiAoIWxlZHNfbnApXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO1x0aWYgKHBvcnQgXHUwMDNlPSBZVDkyMVhfTEVEX1BPUlRfTlVNKSB7XG4mIzQzO1x0XHRkZXZfZXJyKGRldiwgXCYjMzQ7Q2Fubm90IGNvbmZpZ3VyZSBMRURzIGZvciBwb3J0ICVkXFxuXCYjMzQ7LCBwb3J0KTtcbiYjNDM7XHRcdG9mX25vZGVfcHV0KGxlZHNfbnApO1xuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRmb3JfZWFjaF9jaGlsZF9vZl9ub2RlX3Njb3BlZChsZWRzX25wLCBsZWRfbnApIHtcbiYjNDM7XHRcdHl0OTIxeF9sZWRfc2V0dXAocHJpdiwgcG9ydCwgb2ZfZndub2RlX2hhbmRsZShsZWRfbnApKTtcbiYjNDM7XHRcdC8qIEFsbG93IHBhcnRpYWwgY29uZmlndXJhdGlvbjogTEVEcyBhcmUgb3B0aW9uYWwgKi9cbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdG9mX25vZGVfcHV0KGxlZHNfbnApO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0Mzt2b2lkIHl0OTIxeF9sZWRzX3JlbW92ZShzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYpXG4mIzQzO3tcbiYjNDM7XHRmb3IgKGludCBwb3J0ID0gMDsgcG9ydCBcdTAwM2MgWVQ5MjFYX0xFRF9QT1JUX05VTTsgcG9ydCYjNDM7JiM0MzspXG4mIzQzO1x0XHR5dDkyMXhfbGVkc19yZW1vdmVfcG9ydChwcml2LCBwb3J0KTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7aW50IHl0OTIxeF9sZWRzX3NldHVwKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBkc2Ffc3dpdGNoICpkcyA9IFx1MDAyNnByaXYtXHUwMDNlZHM7XG4mIzQzO1x0c3RydWN0IGRzYV9wb3J0ICpkcDtcbiYjNDM7XG4mIzQzO1x0LyogTEVEcyBhcmUgYWx3YXlzIGVuYWJsZWQuIFRoZXJlIGlzIG5vIHdheSB0byBkaXNhYmxlIHRoZW0gYWx0b2dldGhlclxuJiM0MztcdCAqIChhcyBmYXIgYXMgSSBrbm93KS5cbiYjNDM7XHQgKi9cbiYjNDM7XG4mIzQzO1x0ZHNhX3N3aXRjaF9mb3JfZWFjaF9wb3J0KGRwLCBkcykge1xuJiM0MztcdFx0aW50IHBvcnQgPSBkcC1cdTAwM2VpbmRleDtcbiYjNDM7XG4mIzQzO1x0XHRpZiAoIWRwLVx1MDAzZWRuKVxuJiM0MztcdFx0XHRjb250aW51ZTtcbiYjNDM7XG4mIzQzO1x0XHR5dDkyMXhfbGVkc19zZXR1cF9wb3J0KHByaXYsIHBvcnQpO1xuJiM0MztcdFx0LyogQWxsb3cgcGFydGlhbCBjb25maWd1cmF0aW9uOiBMRURzIGFyZSBvcHRpb25hbCAqL1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2xlZHMuaCBiL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vbGVkcy5oXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uM2MzNjQyOTg4YWM3N1xuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9sZWRzLmhcbkBAIC0wLDAgJiM0MzsxLDEyMSBAQFxuJiM0MzsvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vci1sYXRlciAqL1xuJiM0MzsvKlxuJiM0MzsgKiBDb3B5cmlnaHQgKGMpIDIwMjYgRGF2aWQgWWFuZ1xuJiM0MzsgKi9cbiYjNDM7XG4mIzQzOyNpZm5kZWYgX1lUX0xFRFNfSFxuJiM0MzsjZGVmaW5lIF9ZVF9MRURTX0hcbiYjNDM7XG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2JpdGZpZWxkLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvYml0cy5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2tjb25maWcuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9sZWRzLmhcdTAwM2VcbiYjNDM7XG4mIzQzOyNkZWZpbmUgWVQ5MjFYX0xFRF9DVFJMXHRcdFx0MHhkMDAwMFxuJiM0MzsjZGVmaW5lICBZVDkyMVhfTEVEX0NUUkxfVU5LXHRcdFx0QklUKDIxKVxuJiM0MzsjZGVmaW5lICBZVDkyMVhfTEVEX0NUUkxfTE9PUERFVEVDVF9CTElOS19NXHRHRU5NQVNLKDIwLCAxOSlcdC8qIGN5Y2xlID0gNTEyICogeCBtcyAqL1xuJiM0MzsjZGVmaW5lICAgWVQ5MjFYX0xFRF9DVFJMX0xPT1BERVRFQ1RfQkxJTksoeClcdFx0RklFTERfUFJFUChZVDkyMVhfTEVEX0NUUkxfTE9PUERFVEVDVF9CTElOS19NLCAoeCkpXG4mIzQzOyNkZWZpbmUgIFlUOTIxWF9MRURfQ1RSTF9QT1JUX05VTV9NXHRcdEdFTk1BU0soMTYsIDEzKVxuJiM0MzsjZGVmaW5lICAgWVQ5MjFYX0xFRF9DVFJMX1BPUlRfTlVNKHgpXHRcdFx0RklFTERfUFJFUChZVDkyMVhfTEVEX0NUUkxfUE9SVF9OVU1fTSwgKHgpKVxuJiM0MzsjZGVmaW5lICBZVDkyMVhfTEVEX0NUUkxfTU9ERV9NXHRcdFx0R0VOTUFTSygxLCAwKVxuJiM0MzsjZGVmaW5lICAgWVQ5MjFYX0xFRF9DVFJMX01PREUoeClcdFx0XHRGSUVMRF9QUkVQKFlUOTIxWF9MRURfQ1RSTF9NT0RFX00sICh4KSlcbiYjNDM7I2RlZmluZSAgIFlUOTIxWF9MRURfQ1RSTF9NT0RFX1BBUkFMTEVMXHRcdFx0WVQ5MjFYX0xFRF9DVFJMX01PREUoMClcbiYjNDM7I2RlZmluZSAgIFlUOTIxWF9MRURfQ1RSTF9NT0RFX1NFUklBTFx0XHRcdFlUOTIxWF9MRURfQ1RSTF9NT0RFKDIpXG4mIzQzOyNkZWZpbmUgWVQ5MjFYX0xFRDBfUE9SVG4ocG9ydClcdFx0KDB4ZDAwMDQgJiM0MzsgNCAqIChwb3J0KSlcbiYjNDM7I2RlZmluZSAgWVQ5MjFYX0xFRDBfUE9SVF9BQ1RfTVx0XHRcdEdFTk1BU0soMTcsIDApXG4mIzQzOyNkZWZpbmUgIFlUOTIxWF9MRUQwX1BPUlRfQUNUX0xJTktfVFJZX0RJU1x0QklUKDE3KVxuJiM0MzsjZGVmaW5lICBZVDkyMVhfTEVEMF9QT1JUX0FDVF9DT0xMSVNJT05fQkxJTktfSU5ESVx0QklUKDE2KVxuJiM0MzsjZGVmaW5lIFlUOTIxWF9MRUQxX1BPUlRuKHBvcnQpXHRcdCgweGQwMDQwICYjNDM7IDQgKiAocG9ydCkpXG4mIzQzOyNkZWZpbmUgIFlUOTIxWF9MRUQxX1BPUlRfT1RIRVJfQkxJTktfTVx0XHRHRU5NQVNLKDMxLCAzMClcdC8qIGN5Y2xlID0gNTEyIFx1MDAzZVx1MDAzZSB4IG1zICovXG4mIzQzOyNkZWZpbmUgICBZVDkyMVhfTEVEMV9QT1JUX09USEVSX0JMSU5LKHgpXHRcdEZJRUxEX1BSRVAoWVQ5MjFYX0xFRDFfUE9SVF9PVEhFUl9CTElOS19NLCAoeCkpXG4mIzQzOyNkZWZpbmUgIFlUOTIxWF9MRUQxX1BPUlRfRUVFX0JMSU5LX01cdFx0R0VOTUFTSygyOSwgMjgpXHQvKiBjeWNsZSA9IDUxMiBcdTAwM2VcdTAwM2UgeCBtcyAqL1xuJiM0MzsjZGVmaW5lICAgWVQ5MjFYX0xFRDFfUE9SVF9FRUVfQkxJTksoeClcdFx0XHRGSUVMRF9QUkVQKFlUOTIxWF9MRUQxX1BPUlRfRUVFX0JMSU5LX00sICh4KSlcbiYjNDM7I2RlZmluZSAgWVQ5MjFYX0xFRDFfUE9SVF9CTElOS19EVVRZX0NPTVBcdEJJVCgyNylcbiYjNDM7I2RlZmluZSAgWVQ5MjFYX0xFRDFfUE9SVF9CTElOS19EVVRZX01cdFx0R0VOTUFTSygyNiwgMjUpXG4mIzQzOyNkZWZpbmUgICBZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFkoeClcdFx0RklFTERfUFJFUChZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFlfTSwgKHgpKVxuJiM0MzsjZGVmaW5lICAgWVQ5MjFYX0xFRDFfUE9SVF9CTElOS19EVVRZXzFfMlx0XHRZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFkoMClcbiYjNDM7I2RlZmluZSAgIFlUOTIxWF9MRUQxX1BPUlRfQkxJTktfRFVUWV8yXzNcdFx0WVQ5MjFYX0xFRDFfUE9SVF9CTElOS19EVVRZKDEpXG4mIzQzOyNkZWZpbmUgICBZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFlfM180XHRcdFlUOTIxWF9MRUQxX1BPUlRfQkxJTktfRFVUWSgyKVxuJiM0MzsjZGVmaW5lICAgWVQ5MjFYX0xFRDFfUE9SVF9CTElOS19EVVRZXzVfNlx0XHRZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFkoMylcbiYjNDM7I2RlZmluZSBZVDkyMVhfTEVEMl9QT1JUbihwb3J0KVx0XHQoMHhkMDA4MCAmIzQzOyA0ICogKHBvcnQpKVxuJiM0MzsjZGVmaW5lICBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbl9NKGdycClcdFx0R0VOTUFTSyg0ICogKGdycCkgJiM0MzsgMTksIDQgKiAoZ3JwKSAmIzQzOyAxOClcbiYjNDM7I2RlZmluZSAgIFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuKGdycCwgeClcdFx0KCh4KSBcdTAwM2NcdTAwM2MgKDQgKiAoZ3JwKSAmIzQzOyAxOCkpXG4mIzQzOyNkZWZpbmUgICBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbl9ET05UQ0FSRShncnApXHRcdFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuKGdycCwgMClcbiYjNDM7I2RlZmluZSAgIFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuX0JMSU5LKGdycClcdFx0WVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW4oZ3JwLCAxKVxuJiM0MzsjZGVmaW5lICAgWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW5fT04oZ3JwKVx0XHRZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbihncnAsIDIpXG4mIzQzOyNkZWZpbmUgICBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbl9PRkYoZ3JwKVx0XHRZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbihncnAsIDMpXG4mIzQzOyNkZWZpbmUgIFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VfQkxJTktuX00oZ3JwKVx0R0VOTUFTSyg0ICogKGdycCkgJiM0MzsgMTcsIDQgKiAoZ3JwKSAmIzQzOyAxNilcdC8qIGN5Y2xlID0gNTEyIFx1MDAzY1x1MDAzYyB4IG1zICovXG4mIzQzOyNkZWZpbmUgICBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFX0JMSU5LbihncnAsIHgpXHRcdCgoeCkgXHUwMDNjXHUwMDNjICg0ICogKGdycCkgJiM0MzsgMTYpKVxuJiM0MzsjZGVmaW5lICAgWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRV9CTElOS25fT1RIRVIoZ3JwKVx0WVQ5MjFYX0xFRDJfUE9SVF9GT1JDRV9CTElOS24oZ3JwLCAzKVxuJiM0MzsjZGVmaW5lICBZVDkyMVhfTEVEeF9QT1JUX0FDVF9NXHRcdFx0R0VOTUFTSygxNSwgMClcbiYjNDM7I2RlZmluZSAgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfRUVFX0JMSU5LXHRcdEJJVCgxNSlcbiYjNDM7I2RlZmluZSAgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfTE9PUERFVEVDVF9CTElOS1x0QklUKDE0KVxuJiM0MzsjZGVmaW5lICBZVDkyMVhfTEVEeF9QT1JUX0FDVF9BQ1RJVkVfQkxJTktcdEJJVCgxMylcbiYjNDM7I2RlZmluZSAgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfRFVQTEVYX0ZVTExcdEJJVCgxMilcbiYjNDM7I2RlZmluZSAgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfRFVQTEVYX0hBTEZcdEJJVCgxMSlcbiYjNDM7I2RlZmluZSAgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfVFhfQkxJTktcdFx0QklUKDEwKVxuJiM0MzsjZGVmaW5lICBZVDkyMVhfTEVEeF9QT1JUX0FDVF9SWF9CTElOS1x0XHRCSVQoOSlcbiYjNDM7I2RlZmluZSAgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfVFhcdFx0QklUKDgpXG4mIzQzOyNkZWZpbmUgIFlUOTIxWF9MRUR4X1BPUlRfQUNUX1JYXHRcdEJJVCg3KVxuJiM0MzsjZGVmaW5lICBZVDkyMVhfTEVEeF9QT1JUX0FDVF8xMDAwTVx0XHRCSVQoNilcbiYjNDM7I2RlZmluZSAgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfMTAwTVx0XHRCSVQoNSlcbiYjNDM7I2RlZmluZSAgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfMTBNXHRcdEJJVCg0KVxuJiM0MzsjZGVmaW5lICBZVDkyMVhfTEVEeF9QT1JUX0FDVF9DT0xMSVNJT05fQkxJTktcdEJJVCgzKVxuJiM0MzsjZGVmaW5lICBZVDkyMVhfTEVEeF9QT1JUX0FDVF8xMDAwTV9CTElOS1x0QklUKDIpXG4mIzQzOyNkZWZpbmUgIFlUOTIxWF9MRUR4X1BPUlRfQUNUXzEwME1fQkxJTktcdEJJVCgxKVxuJiM0MzsjZGVmaW5lICBZVDkyMVhfTEVEeF9QT1JUX0FDVF8xME1fQkxJTktcdFx0QklUKDApXG4mIzQzOyNkZWZpbmUgWVQ5MjFYX0xFRF9TRVJfQ1RSTFx0XHQweGQwMTAwXG4mIzQzOyNkZWZpbmUgIFlUOTIxWF9MRURfU0VSX0NUUkxfVU5LXHRcdEdFTk1BU0soMjUsIDI0KVx0LyogZGVsYXk/ICovXG4mIzQzOyNkZWZpbmUgIFlUOTIxWF9MRURfU0VSX0NUUkxfQUNUSVZFX0xPV1x0XHRCSVQoNClcbiYjNDM7I2RlZmluZSAgWVQ5MjFYX0xFRF9TRVJfQ1RSTF9HUlBfTlVNX01cdFx0R0VOTUFTSygxLCAwKVx0LyogI2dycCAtIDEgKi9cbiYjNDM7I2RlZmluZSAgIFlUOTIxWF9MRURfU0VSX0NUUkxfR1JQX05VTSh4KVx0XHRGSUVMRF9QUkVQKFlUOTIxWF9MRURfU0VSX0NUUkxfR1JQX05VTV9NLCAoeCkpXG4mIzQzOyNkZWZpbmUgWVQ5MjFYX0xFRF9TRVJfTUFQbm0oZ3JwLCBwb3J0KVx0KDB4ZDAxMDQgJiM0MzsgOCAqICgyIC0gKGdycCkpICYjNDM7IDQgKiAoKHBvcnQpIC8gNSkpXG4mIzQzOyNkZWZpbmUgIFlUOTIxWF9MRURfU0VSX01BUF9EU1RuX1BPUlRfTShwb3J0KVx0R0VOTUFTSyg2ICogKChwb3J0KSAlIDUpICYjNDM7IDUsIDYgKiAoKHBvcnQpICUgNSkgJiM0MzsgMilcbiYjNDM7I2RlZmluZSAgIFlUOTIxWF9MRURfU0VSX01BUF9EU1RuX1BPUlQocG9ydCwgeClcdFx0KCh4KSBcdTAwM2NcdTAwM2MgKDYgKiAoKHBvcnQpICUgNSkgJiM0MzsgMikpXG4mIzQzOyNkZWZpbmUgIFlUOTIxWF9MRURfU0VSX01BUF9EU1RuX0xFRF9NKHBvcnQpXHRHRU5NQVNLKDYgKiAoKHBvcnQpICUgNSkgJiM0MzsgMSwgNiAqICgocG9ydCkgJSA1KSlcbiYjNDM7I2RlZmluZSAgIFlUOTIxWF9MRURfU0VSX01BUF9EU1RuX0xFRChwb3J0LCB4KVx0XHQoKHgpIFx1MDAzY1x1MDAzYyAoNiAqICgocG9ydCkgJSA1KSkpXG4mIzQzOyNkZWZpbmUgWVQ5MjFYX0xFRF9QQVJfUE9SVFNcdFx0MHhkMDFjNFxuJiM0MzsjZGVmaW5lIFlUOTIxWF9MRURfUEFSX0lOVlx0XHQweGQwMWM4XG4mIzQzOyNkZWZpbmUgIFlUOTIxWF9MRURfUEFSX0lOVl9JTlZubShncnAsIHBvcnQpXHRCSVQoMTAgKiAoZ3JwKSAmIzQzOyAocG9ydCkpXG4mIzQzOyNkZWZpbmUgWVQ5MjFYX0xFRF9QQVJfTUFQbihwb3J0KVx0KDB4ZDAxZDAgJiM0MzsgNCAqIChwb3J0KSlcbiYjNDM7I2RlZmluZSAgWVQ5MjFYX0xFRF9QQVJfTUFQX0RTVG5fUE9SVF9NKGdycClcdEdFTk1BU0soNiAqIChncnApICYjNDM7IDUsIDYgKiAoZ3JwKSAmIzQzOyAyKVxuJiM0MzsjZGVmaW5lICAgWVQ5MjFYX0xFRF9QQVJfTUFQX0RTVG5fUE9SVChncnAsIHgpXHRcdCgoeCkgXHUwMDNjXHUwMDNjICg2ICogKGdycCkgJiM0MzsgMikpXG4mIzQzOyNkZWZpbmUgIFlUOTIxWF9MRURfUEFSX01BUF9EU1RuX0xFRF9NKGdycClcdEdFTk1BU0soNiAqIChncnApICYjNDM7IDEsIDYgKiAoZ3JwKSlcbiYjNDM7I2RlZmluZSAgIFlUOTIxWF9MRURfUEFSX01BUF9EU1RuX0xFRChncnAsIHgpXHRcdCgoeCkgXHUwMDNjXHUwMDNjICg2ICogKGdycCkpKVxuJiM0MztcbiYjNDM7I2RlZmluZSBZVDkyMVhfTEVEX0JMSU5LX01JTlx0NjRcbiYjNDM7I2RlZmluZSBZVDkyMVhfTEVEX0JMSU5LX0RFRlx0NTEyXG4mIzQzOyNkZWZpbmUgWVQ5MjFYX0xFRF9CTElOS19NQVhcdDIwNDhcbiYjNDM7XG4mIzQzOy8qIDIgKiBsY20oMiwgMywgNCwgNikgKi9cbiYjNDM7I2RlZmluZSBZVDkyMVhfTEVEX0RVVFlfREVOT01cdFx0MjRcbiYjNDM7I2RlZmluZSBZVDkyMVhfTEVEX0RVVFkobm9tLCBkZW5vbSlcdChZVDkyMVhfTEVEX0RVVFlfREVOT00gKiAobm9tKSAvIChkZW5vbSkpXG4mIzQzO1xuJiM0MztzdHJ1Y3QgeXQ5MjF4X3ByaXY7XG4mIzQzO1xuJiM0MztzdHJ1Y3QgeXQ5MjF4X2xlZCB7XG4mIzQzO1x0c3RydWN0IGxlZF9jbGFzc2RldiBjZGV2O1xuJiM0MztcdHN0cnVjdCB5dDkyMXhfcG9ydCAqcG9ydDtcbiYjNDM7XHR1bnNpZ25lZCBjaGFyIGdyb3VwO1xuJiM0MztcbiYjNDM7XHRib29sIHVzZV9jeWNsZToxO1xuJiM0MztcdGJvb2wgdXNlX2R1dHk6MTtcbiYjNDM7fTtcbiYjNDM7XG4mIzQzOyNpZiBJU19FTkFCTEVEKENPTkZJR19ORVRfRFNBX1lUOTIxWF9MRURTKVxuJiM0MztcbiYjNDM7dm9pZCB5dDkyMXhfbGVkc19yZW1vdmUoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2KTtcbiYjNDM7aW50IHl0OTIxeF9sZWRzX3NldHVwKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdik7XG4mIzQzO1xuJiM0MzsjZWxzZVxuJiM0MztcbiYjNDM7c3RhdGljIGlubGluZSB2b2lkIHl0OTIxeF9sZWRzX3JlbW92ZShzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYpIHt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW5saW5lIGludCB5dDkyMXhfbGVkc19zZXR1cChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7I2VuZGlmXG4mIzQzO1xuJiM0MzsjZW5kaWZcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL3NtaS5jIGIvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9zbWkuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLjE2NGMyNWVmNDk0YTFcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vc21pLmNcbkBAIC0wLDAgJiM0MzsxLDE1NyBAQFxuJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vci1sYXRlclxuJiM0MzsvKlxuJiM0MzsgKiBDb3B5cmlnaHQgKGMpIDIwMjYgRGF2aWQgWWFuZ1xuJiM0MzsgKi9cbiYjNDM7XG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2lvcG9sbC5oXHUwMDNlXG4mIzQzO1xuJiM0MzsjaW5jbHVkZSBcJiMzNDtjaGlwLmhcJiMzNDtcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7c21pLmhcJiMzNDtcbiYjNDM7XG4mIzQzOyNkZWZpbmUgWVQ5MjFYX1BPTExfU0xFRVBfVVNcdDEwMDAwXG4mIzQzOyNkZWZpbmUgWVQ5MjFYX1BPTExfVElNRU9VVF9VU1x0MTAwMDAwXG4mIzQzO1xuJiM0MztpbnQgeXQ5MjF4X3JlZ19yZWFkKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyICp2YWxwKVxuJiM0Mzt7XG4mIzQzO1x0V0FSTl9PTighbXV0ZXhfaXNfbG9ja2VkKFx1MDAyNnByaXYtXHUwMDNlcmVnX2xvY2spKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHByaXYtXHUwMDNlcmVnX29wcy1cdTAwM2VyZWFkKHByaXYtXHUwMDNlcmVnX2N0eCwgcmVnLCB2YWxwKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7aW50IHl0OTIxeF9yZWdfd3JpdGUoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgdmFsKVxuJiM0Mzt7XG4mIzQzO1x0V0FSTl9PTighbXV0ZXhfaXNfbG9ja2VkKFx1MDAyNnByaXYtXHUwMDNlcmVnX2xvY2spKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHByaXYtXHUwMDNlcmVnX29wcy1cdTAwM2V3cml0ZShwcml2LVx1MDAzZXJlZ19jdHgsIHJlZywgdmFsKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7aW50IHl0OTIxeF9yZWdfd2FpdChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiBtYXNrLCB1MzIgKnZhbHApXG4mIzQzO3tcbiYjNDM7XHR1MzIgdmFsO1xuJiM0MztcdGludCByZXM7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gcmVhZF9wb2xsX3RpbWVvdXQoeXQ5MjF4X3JlZ19yZWFkLCByZXMsXG4mIzQzO1x0XHRcdFx0cmVzIHx8ICh2YWwgXHUwMDI2IG1hc2spID09ICp2YWxwLFxuJiM0MztcdFx0XHRcdFlUOTIxWF9QT0xMX1NMRUVQX1VTLCBZVDkyMVhfUE9MTF9USU1FT1VUX1VTLFxuJiM0MztcdFx0XHRcdGZhbHNlLCBwcml2LCByZWcsIFx1MDAyNnZhbCk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1x0aWYgKHJlcylcbiYjNDM7XHRcdHJldHVybiByZXM7XG4mIzQzO1xuJiM0MztcdCp2YWxwID0gdmFsO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztpbnQgeXQ5MjF4X3JlZ191cGRhdGVfYml0cyhzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiBtYXNrLCB1MzIgdmFsKVxuJiM0Mzt7XG4mIzQzO1x0aW50IHJlcztcbiYjNDM7XHR1MzIgdjtcbiYjNDM7XHR1MzIgdTtcbiYjNDM7XG4mIzQzO1x0cmVzID0geXQ5MjF4X3JlZ19yZWFkKHByaXYsIHJlZywgXHUwMDI2dik7XG4mIzQzO1x0aWYgKHJlcylcbiYjNDM7XHRcdHJldHVybiByZXM7XG4mIzQzO1xuJiM0MztcdHUgPSB2O1xuJiM0MztcdHUgXHUwMDI2PSB+bWFzaztcbiYjNDM7XHR1IHw9IHZhbDtcbiYjNDM7XHRpZiAodSA9PSB2KVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztcdHJldHVybiB5dDkyMXhfcmVnX3dyaXRlKHByaXYsIHJlZywgdSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO2ludFxuJiM0Mzt5dDkyMXhfcmVnc19yZWFkKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyICp2YWxzLFxuJiM0MztcdFx0IHVuc2lnbmVkIGludCBudW1fcmVncylcbiYjNDM7e1xuJiM0MztcdGludCByZXM7XG4mIzQzO1xuJiM0MztcdGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIFx1MDAzYyBudW1fcmVnczsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdHJlcyA9IHl0OTIxeF9yZWdfcmVhZChwcml2LCByZWcgJiM0MzsgNCAqIGksIFx1MDAyNnZhbHNbaV0pO1xuJiM0MztcdFx0aWYgKHJlcylcbiYjNDM7XHRcdFx0cmV0dXJuIHJlcztcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztpbnRcbiYjNDM7eXQ5MjF4X3JlZ3Nfd3JpdGUoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCBjb25zdCB1MzIgKnZhbHMsXG4mIzQzO1x0XHQgIHVuc2lnbmVkIGludCBudW1fcmVncylcbiYjNDM7e1xuJiM0MztcdGludCByZXM7XG4mIzQzO1xuJiM0MztcdGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIFx1MDAzYyBudW1fcmVnczsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdHJlcyA9IHl0OTIxeF9yZWdfd3JpdGUocHJpdiwgcmVnICYjNDM7IDQgKiBpLCB2YWxzW2ldKTtcbiYjNDM7XHRcdGlmIChyZXMpXG4mIzQzO1x0XHRcdHJldHVybiByZXM7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7aW50XG4mIzQzO3l0OTIxeF9yZWdzX3VwZGF0ZV9iaXRzKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgY29uc3QgdTMyICptYXNrcyxcbiYjNDM7XHRcdFx0Y29uc3QgdTMyICp2YWxzLCB1bnNpZ25lZCBpbnQgbnVtX3JlZ3MpXG4mIzQzO3tcbiYjNDM7XHRib29sIGNoYW5nZWQgPSBmYWxzZTtcbiYjNDM7XHR1MzIgdnNbNF07XG4mIzQzO1x0aW50IHJlcztcbiYjNDM7XG4mIzQzO1x0aWYgKFdBUk5fT05fT05DRShudW1fcmVncyBcdTAwM2UgQVJSQVlfU0laRSh2cykpKVxuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1xuJiM0MztcdHJlcyA9IHl0OTIxeF9yZWdzX3JlYWQocHJpdiwgcmVnLCB2cywgbnVtX3JlZ3MpO1xuJiM0MztcdGlmIChyZXMpXG4mIzQzO1x0XHRyZXR1cm4gcmVzO1xuJiM0MztcbiYjNDM7XHRmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSBcdTAwM2MgbnVtX3JlZ3M7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHR1MzIgdSA9IHZzW2ldO1xuJiM0MztcbiYjNDM7XHRcdHUgXHUwMDI2PSB+bWFza3NbaV07XG4mIzQzO1x0XHR1IHw9IHZhbHNbaV07XG4mIzQzO1x0XHRpZiAodSAhPSB2c1tpXSlcbiYjNDM7XHRcdFx0Y2hhbmdlZCA9IHRydWU7XG4mIzQzO1xuJiM0MztcdFx0dnNbaV0gPSB1O1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKCFjaGFuZ2VkKVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztcdHJldHVybiB5dDkyMXhfcmVnc193cml0ZShwcml2LCByZWcsIHZzLCBudW1fcmVncyk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO2ludFxuJiM0Mzt5dDkyMXhfcmVnc19jbGVhcl9iaXRzKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgY29uc3QgdTMyICptYXNrcyxcbiYjNDM7XHRcdCAgICAgICB1bnNpZ25lZCBpbnQgbnVtX3JlZ3MpXG4mIzQzO3tcbiYjNDM7XHRib29sIGNoYW5nZWQgPSBmYWxzZTtcbiYjNDM7XHR1MzIgdnNbNF07XG4mIzQzO1x0aW50IHJlcztcbiYjNDM7XG4mIzQzO1x0aWYgKFdBUk5fT05fT05DRShudW1fcmVncyBcdTAwM2UgQVJSQVlfU0laRSh2cykpKVxuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1xuJiM0MztcdHJlcyA9IHl0OTIxeF9yZWdzX3JlYWQocHJpdiwgcmVnLCB2cywgbnVtX3JlZ3MpO1xuJiM0MztcdGlmIChyZXMpXG4mIzQzO1x0XHRyZXR1cm4gcmVzO1xuJiM0MztcbiYjNDM7XHRmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSBcdTAwM2MgbnVtX3JlZ3M7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHR1MzIgdSA9IHZzW2ldO1xuJiM0MztcbiYjNDM7XHRcdHUgXHUwMDI2PSB+bWFza3NbaV07XG4mIzQzO1x0XHRpZiAodSAhPSB2c1tpXSlcbiYjNDM7XHRcdFx0Y2hhbmdlZCA9IHRydWU7XG4mIzQzO1xuJiM0MztcdFx0dnNbaV0gPSB1O1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKCFjaGFuZ2VkKVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztcdHJldHVybiB5dDkyMXhfcmVnc193cml0ZShwcml2LCByZWcsIHZzLCBudW1fcmVncyk7XG4mIzQzO31cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL3NtaS5oIGIvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9zbWkuaFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLjI5OTVlOTFmM2IzZDFcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vc21pLmhcbkBAIC0wLDAgJiM0MzsxLDkyIEBAXG4mIzQzOy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9yLWxhdGVyICovXG4mIzQzOy8qXG4mIzQzOyAqIENvcHlyaWdodCAoYykgMjAyNiBEYXZpZCBZYW5nXG4mIzQzOyAqL1xuJiM0MztcbiYjNDM7I2lmbmRlZiBfWVRfU01JX0hcbiYjNDM7I2RlZmluZSBfWVRfU01JX0hcbiYjNDM7XG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3R5cGVzLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvd29yZHBhcnQuaFx1MDAzZVxuJiM0MztcbiYjNDM7c3RydWN0IHl0OTIxeF9wcml2O1xuJiM0MztcbiYjNDM7aW50IHl0OTIxeF9yZWdfcmVhZChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiAqdmFscCk7XG4mIzQzO2ludCB5dDkyMXhfcmVnX3dyaXRlKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyIHZhbCk7XG4mIzQzO2ludCB5dDkyMXhfcmVnX3dhaXQoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgbWFzaywgdTMyICp2YWxwKTtcbiYjNDM7aW50IHl0OTIxeF9yZWdfdXBkYXRlX2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgbWFzayxcbiYjNDM7XHRcdFx0ICAgdTMyIHZhbCk7XG4mIzQzO1xuJiM0MztzdGF0aWMgaW5saW5lIGludFxuJiM0Mzt5dDkyMXhfcmVnX3NldF9iaXRzKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyIG1hc2spXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4geXQ5MjF4X3JlZ191cGRhdGVfYml0cyhwcml2LCByZWcsIDAsIG1hc2spO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW5saW5lIGludFxuJiM0Mzt5dDkyMXhfcmVnX2NsZWFyX2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgbWFzaylcbiYjNDM7e1xuJiM0MztcdHJldHVybiB5dDkyMXhfcmVnX3VwZGF0ZV9iaXRzKHByaXYsIHJlZywgbWFzaywgMCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbmxpbmUgaW50XG4mIzQzO3l0OTIxeF9yZWdfdG9nZ2xlX2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgbWFzaywgYm9vbCBzZXQpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4geXQ5MjF4X3JlZ191cGRhdGVfYml0cyhwcml2LCByZWcsIG1hc2ssICFzZXQgPyAwIDogbWFzayk7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qIFNvbWUgbXVsdGktd29yZCByZWdpc3RlcnMsIGxpa2UgVkxBTm5fQ1RSTCwgc2hvdWxkIGJlIHRyZWF0ZWQgYXMgYSBzaW5nbGVcbiYjNDM7ICogbG9uZyByZWdpc3Rlci4gTW9yZSBzcGVjaWZpY2FsbHksIHdyaXRlcyB0byBwYXJ0cyBvZiBpdHMgd29yZHMgd29uJiMzOTt0IGJlY29tZVxuJiM0MzsgKiB2aXNpYmxlLCB1bnRpbCB0aGUgbGFzdCB3b3JkIGlzIHdyaXR0ZW4uXG4mIzQzOyAqXG4mIzQzOyAqIEhlcmUgd2UgcmVxdWlyZSBmdWxsIHJlYWQgYW5kIHdyaXRlIG9wZXJhdGlvbnMgb3ZlciB0aGVzZSByZWdpc3RlcnMgdG9cbiYjNDM7ICogZWxpbWluYXRlIHBvdGVudGlhbCBpc3N1ZXMsIGFsdGhvdWdoIHBhcnRpYWwgcmVhZHMvd3JpdGVzIGFyZSBhbHNvIHBvc3NpYmxlLlxuJiM0MzsgKi9cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCB1cGRhdGVfY3RybHNfdW5hbGlnbmVkKHUzMiAqbG8sIHUzMiAqaGksIHU2NCBtYXNrLCB1NjQgdmFsKVxuJiM0Mzt7XG4mIzQzO1x0KmxvIFx1MDAyNj0gfmxvd2VyXzMyX2JpdHMobWFzayk7XG4mIzQzO1x0KmhpIFx1MDAyNj0gfnVwcGVyXzMyX2JpdHMobWFzayk7XG4mIzQzO1x0KmxvIHw9IGxvd2VyXzMyX2JpdHModmFsKTtcbiYjNDM7XHQqaGkgfD0gdXBwZXJfMzJfYml0cyh2YWwpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKiB5dDkyMXhfcmVnc18qKCkgYXJlIGV4cG9ydGVkIGZvciBsaW5rYWdlIG9ubHkuIERvIG5vdCB1c2UgdGhlbSBkaXJlY3RseS4gVXNlXG4mIzQzOyAqIHl0OTIxeF9yZWc2NF8qKCkgb3IgeXQ5MjF4X3JlZzk2XyooKSBpbnN0ZWFkLlxuJiM0MzsgKi9cbiYjNDM7XG4mIzQzO2ludCB5dDkyMXhfcmVnc19yZWFkKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyICp2YWxzLFxuJiM0MztcdFx0ICAgICB1bnNpZ25lZCBpbnQgbnVtX3JlZ3MpO1xuJiM0MztpbnQgeXQ5MjF4X3JlZ3Nfd3JpdGUoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCBjb25zdCB1MzIgKnZhbHMsXG4mIzQzO1x0XHQgICAgICB1bnNpZ25lZCBpbnQgbnVtX3JlZ3MpO1xuJiM0MztpbnQgeXQ5MjF4X3JlZ3NfdXBkYXRlX2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCBjb25zdCB1MzIgKm1hc2tzLFxuJiM0MztcdFx0XHQgICAgY29uc3QgdTMyICp2YWxzLCB1bnNpZ25lZCBpbnQgbnVtX3JlZ3MpO1xuJiM0MztpbnQgeXQ5MjF4X3JlZ3NfY2xlYXJfYml0cyhzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIGNvbnN0IHUzMiAqbWFza3MsXG4mIzQzO1x0XHRcdCAgIHVuc2lnbmVkIGludCBudW1fcmVncyk7XG4mIzQzO1xuJiM0MztzdGF0aWMgaW5saW5lIGludFxuJiM0Mzt5dDkyMXhfcmVnNjRfd3JpdGUoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCBjb25zdCB1MzIgKnZhbHMpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4geXQ5MjF4X3JlZ3Nfd3JpdGUocHJpdiwgcmVnLCB2YWxzLCAyKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGlubGluZSBpbnRcbiYjNDM7eXQ5MjF4X3JlZzY0X3VwZGF0ZV9iaXRzKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgY29uc3QgdTMyICptYXNrcyxcbiYjNDM7XHRcdFx0IGNvbnN0IHUzMiAqdmFscylcbiYjNDM7e1xuJiM0MztcdHJldHVybiB5dDkyMXhfcmVnc191cGRhdGVfYml0cyhwcml2LCByZWcsIG1hc2tzLCB2YWxzLCAyKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGlubGluZSBpbnRcbiYjNDM7eXQ5MjF4X3JlZzY0X2NsZWFyX2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCBjb25zdCB1MzIgKm1hc2tzKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIHl0OTIxeF9yZWdzX2NsZWFyX2JpdHMocHJpdiwgcmVnLCBtYXNrcywgMik7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbmxpbmUgaW50XG4mIzQzO3l0OTIxeF9yZWc5Nl93cml0ZShzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIGNvbnN0IHUzMiAqdmFscylcbiYjNDM7e1xuJiM0MztcdHJldHVybiB5dDkyMXhfcmVnc193cml0ZShwcml2LCByZWcsIHZhbHMsIDMpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsjZW5kaWZcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNiAyMDozOTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBMRUQgc3VwcG9ydCBmb3IgdGhlIE1vdG9yY29tbSBZVDkyMTUgZXRoZXJuZXQgc3dpdGNoIGNoaXAgKGEgRFNBIGRyaXZlcikuIFRoaXMgaXMgYSBoYXJkd2FyZS1zcGVjaWZpYyBkcml2ZXIgdGhhdCBjb21tdW5pY2F0ZXMgd2l0aCBhIHBoeXNpY2FsIGNoaXAgdmlhIE1ESU8uIFNpbmNlIHRoZXJlIGlzIG5vIHNvZnR3YXJlIGVtdWxhdGlvbiBmb3IgdGhpcyBzcGVjaWZpYyBzd2l0Y2ggY2hpcCBpbiBzdGFuZGFyZCBRRU1VL3ZpcnR1YWxpemVkIGVudmlyb25tZW50cywgdGhlIGRyaXZlciB3aWxsIGZhaWwgdG8gcHJvYmUgKGUuZy4sIGR1cmluZyBjaGlwIElEIGRldGVjdGlvbiksIGFuZCB0aGUgbmV3bHkgYWRkZWQgTEVEIHNldHVwIGNvZGUgd2lsbCBiZSB1bnJlYWNoYWJsZS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAyODYwOTgzZDNmNGRlMDFmOWZjZTM3NjBmZjMxOTkyOTE0YWQ5MTAzCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFN1biBBdWcgMTYgMjA6Mzg6NTkgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L2RzYS9tb3RvcmNvbW0seXQ5MjF4LnlhbWwgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L2RzYS9tb3RvcmNvbW0seXQ5MjF4LnlhbWwKaW5kZXggMzNhNjU1MmU0NmZjMC4uOTNiYTViMTgxMjA1YiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9kc2EvbW90b3Jjb21tLHl0OTIxeC55YW1sCiYjNDM7JiM0MzsmIzQzOyBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvZHNhL21vdG9yY29tbSx5dDkyMXgueWFtbApAQCAtMjEsNiAmIzQzOzIxLDkgQEAgZGVzY3JpcHRpb246IHwKIAogICBBbnkgcG9ydCBjYW4gYmUgdXNlZCBhcyB0aGUgQ1BVIHBvcnQuCiAKJiM0MzsgIEVhY2ggcG9ydCBoYXMgYXQgbW9zdCAzIExFRHMgY29ubmVjdGVkIGFuZCBjYW4gYmUgZGVjbGFyZWQgdXNpbmcgdGhlIHN0YW5kYXJkCiYjNDM7ICBMRURzIHN0cnVjdHVyZS4KJiM0MzsKIHByb3BlcnRpZXM6CiAgIGNvbXBhdGlibGU6CiAgICAgY29uc3Q6IG1vdG9yY29tbSx5dDkyMTUKQEAgLTU5LDYgJiM0Mzs2Miw3IEBAIHVuZXZhbHVhdGVkUHJvcGVydGllczogZmFsc2UKIGV4YW1wbGVzOgogICAtIHwKICAgICAjaW5jbHVkZSAmbHQ7ZHQtYmluZGluZ3MvZ3Bpby9ncGlvLmgmZ3Q7CiYjNDM7ICAgICNpbmNsdWRlICZsdDtkdC1iaW5kaW5ncy9sZWRzL2NvbW1vbi5oJmd0OwogCiAgICAgbWRpbyB7CiAgICAgICAgICNhZGRyZXNzLWNlbGxzID0gJmx0OzEmZ3Q7OwpAQCAtMTEzLDYgJiM0MzsxMTcsMjUgQEAgZXhhbXBsZXM6CiAgICAgICAgICAgICAgICAgICAgIGxhYmVsID0gJiMzNDtsYW4xJiMzNDs7CiAgICAgICAgICAgICAgICAgICAgIHBoeS1tb2RlID0gJiMzNDtpbnRlcm5hbCYjMzQ7OwogICAgICAgICAgICAgICAgICAgICBwaHktaGFuZGxlID0gJmx0OyZhbXA7c3dfcGh5MCZndDs7CiYjNDM7CiYjNDM7ICAgICAgICAgICAgICAgICAgICBsZWRzIHsKJiM0MzsgICAgICAgICAgICAgICAgICAgICAgICAjYWRkcmVzcy1jZWxscyA9ICZsdDsxJmd0OzsKJiM0MzsgICAgICAgICAgICAgICAgICAgICAgICAjc2l6ZS1jZWxscyA9ICZsdDswJmd0OzsKJiM0MzsKJiM0MzsgICAgICAgICAgICAgICAgICAgICAgICBsZWRAMCB7CiYjNDM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZyA9ICZsdDswJmd0OzsKJiM0MzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3IgPSAmbHQ7TEVEX0NPTE9SX0lEX1dISVRFJmd0OzsKJiM0MzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gPSBMRURfRlVOQ1RJT05fTEFOOwomIzQzOyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0LXN0YXRlID0gJiMzNDtrZWVwJiMzNDs7CiYjNDM7ICAgICAgICAgICAgICAgICAgICAgICAgfTsKJiM0MzsKJiM0MzsgICAgICAgICAgICAgICAgICAgICAgICBsZWRAMSB7CiYjNDM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZyA9ICZsdDsxJmd0OzsKJiM0MzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3IgPSAmbHQ7TEVEX0NPTE9SX0lEX0FNQkVSJmd0OzsKJiM0MzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gPSBMRURfRlVOQ1RJT05fTEFOOwomIzQzOyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0LXN0YXRlID0gJiMzNDtrZWVwJiMzNDs7CiYjNDM7ICAgICAgICAgICAgICAgICAgICAgICAgfTsKJiM0MzsgICAgICAgICAgICAgICAgICAgIH07CiAgICAgICAgICAgICAgICAgfTsKIAogICAgICAgICAgICAgICAgIGV0aGVybmV0LXBvcnRAMSB7CmRpZmYgLS1naXQgYS9NQUlOVEFJTkVSUyBiL01BSU5UQUlORVJTCmluZGV4IDk5MTQ2MDA1MGRhNzQuLjU1Y2M1YWMwZTg2ZjAgMTAwNjQ0Ci0tLSBhL01BSU5UQUlORVJTCiYjNDM7JiM0MzsmIzQzOyBiL01BSU5UQUlORVJTCkBAIC0xODI1Niw3ICYjNDM7MTgyNTYsNyBAQCBNOglEYXZpZCBZYW5nICZsdDttbXlhbmdmbEBnbWFpbC5jb20mZ3Q7CiBMOgluZXRkZXZAdmdlci5rZXJuZWwub3JnCiBTOglNYWludGFpbmVkCiBGOglEb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L2RzYS9tb3RvcmNvbW0seXQ5MjF4LnlhbWwKLUY6CWRyaXZlcnMvbmV0L2RzYS95dDkyMXguKgomIzQzO0Y6CWRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vCiBGOgluZXQvZHNhL3RhZ195dDkyMXguYwogCiBNT1hBIFNNQVJUSU8vSU5EVVNUSU8vSU5URUxMSU8gU0VSSUFMIENBUkQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS9LY29uZmlnIGIvZHJpdmVycy9uZXQvZHNhL0tjb25maWcKaW5kZXggNGFiNTY3YzViYmFmYy4uOThlOWJiZTQ3ZGU3YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZHNhL0tjb25maWcKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZHNhL0tjb25maWcKQEAgLTcyLDYgJiM0Mzs3Miw4IEBAIGNvbmZpZyBORVRfRFNBX01WODhFNjA2MAogCiBzb3VyY2UgJiMzNDtkcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL0tjb25maWcmIzM0OwogCiYjNDM7c291cmNlICYjMzQ7ZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9LY29uZmlnJiMzNDsKJiM0MzsKIHNvdXJjZSAmIzM0O2RyaXZlcnMvbmV0L2RzYS9tdjg4ZTZ4eHgvS2NvbmZpZyYjMzQ7CiAKIHNvdXJjZSAmIzM0O2RyaXZlcnMvbmV0L2RzYS9teGw4NjJ4eC9LY29uZmlnJiMzNDsKQEAgLTE1OCwxMiAmIzQzOzE2MCw0IEBAIGNvbmZpZyBORVRfRFNBX1ZJVEVTU0VfVlNDNzNYWF9QTEFURk9STQogCSAgVGhpcyBlbmFibGVzIHN1cHBvcnQgZm9yIHRoZSBWaXRlc3NlIFZTQzczODUsIFZTQzczODgsIFZTQzczOTUKIAkgIGFuZCBWU0M3Mzk4IFNwYXJYIGludGVncmF0ZWQgZXRoZXJuZXQgc3dpdGNoZXMsIGNvbm5lY3RlZCBvdmVyCiAJICBhIENQVS1hdHRhY2hlZCBhZGRyZXNzIGJ1cyBhbmQgd29yayBpbiBtZW1vcnktbWFwcGVkIEkvTyBtb2RlLgotCi1jb25maWcgTkVUX0RTQV9ZVDkyMVgKLQl0cmlzdGF0ZSAmIzM0O01vdG9yY29tbSBZVDkyMTUgZXRoZXJuZXQgc3dpdGNoIGNoaXAgc3VwcG9ydCYjMzQ7Ci0Jc2VsZWN0IE5FVF9EU0FfVEFHX1lUOTIxWAotCXNlbGVjdCBORVRfSUVFRTgwMjFRX0hFTFBFUlMgaWYgRENCCi0JaGVscAotCSAgVGhpcyBlbmFibGVzIHN1cHBvcnQgZm9yIHRoZSBNb3RvcmNvbW0gWVQ5MjE1IGV0aGVybmV0IHN3aXRjaAotCSAgY2hpcC4KIGVuZG1lbnUKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS9NYWtlZmlsZSBiL2RyaXZlcnMvbmV0L2RzYS9NYWtlZmlsZQppbmRleCBkMjk3NWJhZGZmYzA5Li4xMzgyMjViYWE0ZDU2IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9kc2EvTWFrZWZpbGUKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZHNhL01ha2VmaWxlCkBAIC0xNCwxMSAmIzQzOzE0LDExIEBAIG9iai0kKENPTkZJR19ORVRfRFNBX1NNU0NfTEFOOTMwM19NRElPKSAmIzQzOz0gbGFuOTMwM19tZGlvLm8KIG9iai0kKENPTkZJR19ORVRfRFNBX1ZJVEVTU0VfVlNDNzNYWCkgJiM0Mzs9IHZpdGVzc2UtdnNjNzN4eC1jb3JlLm8KIG9iai0kKENPTkZJR19ORVRfRFNBX1ZJVEVTU0VfVlNDNzNYWF9QTEFURk9STSkgJiM0Mzs9IHZpdGVzc2UtdnNjNzN4eC1wbGF0Zm9ybS5vCiBvYmotJChDT05GSUdfTkVUX0RTQV9WSVRFU1NFX1ZTQzczWFhfU1BJKSAmIzQzOz0gdml0ZXNzZS12c2M3M3h4LXNwaS5vCi1vYmotJChDT05GSUdfTkVUX0RTQV9ZVDkyMVgpICYjNDM7PSB5dDkyMXgubwogb2JqLXkJCQkJJiM0Mzs9IGI1My8KIG9iai15CQkJCSYjNDM7PSBoaXJzY2htYW5uLwogb2JqLXkJCQkJJiM0Mzs9IGxhbnRpcS8KIG9iai15CQkJCSYjNDM7PSBtaWNyb2NoaXAvCiYjNDM7b2JqLXkJCQkJJiM0Mzs9IG1vdG9yY29tbS8KIG9iai15CQkJCSYjNDM7PSBtdjg4ZTZ4eHgvCiBvYmoteQkJCQkmIzQzOz0gbXhsODYyeHgvCiBvYmoteQkJCQkmIzQzOz0gbmV0Yy8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vS2NvbmZpZyBiL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vS2NvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwLi4zNDM4ZTBiMTQzNjExCi0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9LY29uZmlnCkBAIC0wLDAgJiM0MzsxLDE3IEBACiYjNDM7IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogSVNDCiYjNDM7Y29uZmlnIE5FVF9EU0FfWVQ5MjFYCiYjNDM7CXRyaXN0YXRlICYjMzQ7TW90b3Jjb21tIFlUOTIxNSBldGhlcm5ldCBzd2l0Y2ggY2hpcCBzdXBwb3J0JiMzNDsKJiM0MzsJc2VsZWN0IE5FVF9EU0FfVEFHX1lUOTIxWAomIzQzOwlzZWxlY3QgTkVUX0lFRUU4MDIxUV9IRUxQRVJTIGlmIERDQgomIzQzOwloZWxwCiYjNDM7CSAgVGhpcyBlbmFibGVzIHN1cHBvcnQgZm9yIHRoZSBNb3RvcmNvbW0gWVQ5MjE1IGV0aGVybmV0IHN3aXRjaAomIzQzOwkgIGNoaXAuCiYjNDM7CiYjNDM7Y29uZmlnIE5FVF9EU0FfWVQ5MjFYX0xFRFMKJiM0MzsJYm9vbCAmIzM0O0xFRCBzdXBwb3J0IGZvciBNb3RvcmNvbW0gWVQ5MjE1JiMzNDsKJiM0MzsJZGVmYXVsdCB5CiYjNDM7CWRlcGVuZHMgb24gTkVUX0RTQV9ZVDkyMVgKJiM0MzsJZGVwZW5kcyBvbiBMRURTX0NMQVNTPXkgfHwgTEVEU19DTEFTUz1ORVRfRFNBX1lUOTIxWAomIzQzOwloZWxwCiYjNDM7CSAgVGhpcyBlbmFibGVzIHN1cHBvcnQgZm9yIGNvbnRyb2xsaW5nIHRoZSBMRURzIGF0dGFjaGVkIHRvIHRoZQomIzQzOwkgIE1vdG9yY29tbSBZVDkyMTUgc3dpdGNoIGNoaXBzLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9NYWtlZmlsZSBiL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMC4uNWE2M2RiMDAyOWZmZQotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vTWFrZWZpbGUKQEAgLTAsMCAmIzQzOzEsNSBAQAomIzQzOyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IElTQwomIzQzO29iai0kKENPTkZJR19ORVRfRFNBX1lUOTIxWCkgJiM0Mzs9IHl0OTIxeC5vCiYjNDM7eXQ5MjF4LW9ianMgOj0gY2hpcC5vCiYjNDM7eXQ5MjF4LSQoQ09ORklHX05FVF9EU0FfWVQ5MjFYX0xFRFMpICYjNDM7PSBsZWRzLm8KJiM0Mzt5dDkyMXgtb2JqcyAmIzQzOz0gc21pLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS95dDkyMXguYyBiL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jCnNpbWlsYXJpdHkgaW5kZXggOTYlCnJlbmFtZSBmcm9tIGRyaXZlcnMvbmV0L2RzYS95dDkyMXguYwpyZW5hbWUgdG8gZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMKaW5kZXggMTU5YjE2NjA2ZjZjYS4uNTUzZWZhY2Q0ZjVlZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZHNhL3l0OTIxeC5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jCkBAIC0xMyw3ICYjNDM7MTMsNiBAQAogI2luY2x1ZGUgJmx0O2xpbnV4L2lmX2JyaWRnZS5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2lmX2hzci5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2lmX3ZsYW4uaCZndDsKLSNpbmNsdWRlICZsdDtsaW51eC9pb3BvbGwuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9tZGlvLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvbW9kdWxlLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvb2YuaCZndDsKQEAgLTI2LDcgJiM0MzsyNSw5IEBACiAjaW5jbHVkZSAmbHQ7bmV0L2llZWU4MDIxcS5oJmd0OwogI2luY2x1ZGUgJmx0O25ldC9wa3RfY2xzLmgmZ3Q7CiAKLSNpbmNsdWRlICYjMzQ7eXQ5MjF4LmgmIzM0OwomIzQzOyNpbmNsdWRlICYjMzQ7Y2hpcC5oJiMzNDsKJiM0MzsjaW5jbHVkZSAmIzM0O2xlZHMuaCYjMzQ7CiYjNDM7I2luY2x1ZGUgJiMzNDtzbWkuaCYjMzQ7CiAKIHN0cnVjdCB5dDkyMXhfbWliX2Rlc2MgewogCXVuc2lnbmVkIGludCBzaXplOwpAQCAtMTUxLDEzICYjNDM7MTUyLDggQEAgc3RhdGljIGNvbnN0IHN0cnVjdCB5dDkyMXhfaW5mbyB5dDkyMXhfaW5mb3NbXSA9IHsKIAl7fQogfTsKIAotI2RlZmluZSBZVDkyMVhfTkFNRQkmIzM0O3l0OTIxeCYjMzQ7Ci0KICNkZWZpbmUgWVQ5MjFYX1ZJRF9VTldBUkUJNDA5NQogCi0jZGVmaW5lIFlUOTIxWF9QT0xMX1NMRUVQX1VTCTEwMDAwCi0jZGVmaW5lIFlUOTIxWF9QT0xMX1RJTUVPVVRfVVMJMTAwMDAwCi0KIC8qIFRoZSBpbnRlcnZhbCBzaG91bGQgYmUgc21hbGwgZW5vdWdoIHRvIGF2b2lkIG92ZXJmbG93IG9mIDMyYml0IE1JQnMuCiAgKgogICogVW50aWwgd2UgY2FuIHJlYWQgTUlCcyBmcm9tIHN0YXRzNjQgY2FsbCBkaXJlY3RseSAoaS5lLiBzbGVlcApAQCAtMTk2LDIwOCAmIzQzOzE5Miw2IEBAIHN0YXRpYyB1MzIgZXRoYWRkcl9sbzJfdG9fdTMyKGNvbnN0IHVuc2lnbmVkIGNoYXIgKmFkZHIpCiAJcmV0dXJuIChhZGRyWzRdICZsdDsmbHQ7IDgpIHwgYWRkcls1XTsKIH0KIAotc3RhdGljIGludCB5dDkyMXhfcmVnX3JlYWQoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgKnZhbHApCi17Ci0JV0FSTl9PTighbXV0ZXhfaXNfbG9ja2VkKCZhbXA7cHJpdi0mZ3Q7cmVnX2xvY2spKTsKLQotCXJldHVybiBwcml2LSZndDtyZWdfb3BzLSZndDtyZWFkKHByaXYtJmd0O3JlZ19jdHgsIHJlZywgdmFscCk7Ci19Ci0KLXN0YXRpYyBpbnQgeXQ5MjF4X3JlZ193cml0ZShzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiB2YWwpCi17Ci0JV0FSTl9PTighbXV0ZXhfaXNfbG9ja2VkKCZhbXA7cHJpdi0mZ3Q7cmVnX2xvY2spKTsKLQotCXJldHVybiBwcml2LSZndDtyZWdfb3BzLSZndDt3cml0ZShwcml2LSZndDtyZWdfY3R4LCByZWcsIHZhbCk7Ci19Ci0KLXN0YXRpYyBpbnQKLXl0OTIxeF9yZWdfd2FpdChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiBtYXNrLCB1MzIgKnZhbHApCi17Ci0JdTMyIHZhbDsKLQlpbnQgcmVzOwotCWludCByZXQ7Ci0KLQlyZXQgPSByZWFkX3BvbGxfdGltZW91dCh5dDkyMXhfcmVnX3JlYWQsIHJlcywKLQkJCQlyZXMgfHwgKHZhbCAmYW1wOyBtYXNrKSA9PSAqdmFscCwKLQkJCQlZVDkyMVhfUE9MTF9TTEVFUF9VUywgWVQ5MjFYX1BPTExfVElNRU9VVF9VUywKLQkJCQlmYWxzZSwgcHJpdiwgcmVnLCAmYW1wO3ZhbCk7Ci0JaWYgKHJldCkKLQkJcmV0dXJuIHJldDsKLQlpZiAocmVzKQotCQlyZXR1cm4gcmVzOwotCi0JKnZhbHAgPSB2YWw7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQKLXl0OTIxeF9yZWdfdXBkYXRlX2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgbWFzaywgdTMyIHZhbCkKLXsKLQlpbnQgcmVzOwotCXUzMiB2OwotCXUzMiB1OwotCi0JcmVzID0geXQ5MjF4X3JlZ19yZWFkKHByaXYsIHJlZywgJmFtcDt2KTsKLQlpZiAocmVzKQotCQlyZXR1cm4gcmVzOwotCi0JdSA9IHY7Ci0JdSAmYW1wOz0gfm1hc2s7Ci0JdSB8PSB2YWw7Ci0JaWYgKHUgPT0gdikKLQkJcmV0dXJuIDA7Ci0KLQlyZXR1cm4geXQ5MjF4X3JlZ193cml0ZShwcml2LCByZWcsIHUpOwotfQotCi1zdGF0aWMgaW50IHl0OTIxeF9yZWdfc2V0X2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgbWFzaykKLXsKLQlyZXR1cm4geXQ5MjF4X3JlZ191cGRhdGVfYml0cyhwcml2LCByZWcsIDAsIG1hc2spOwotfQotCi1zdGF0aWMgaW50IHl0OTIxeF9yZWdfY2xlYXJfYml0cyhzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiBtYXNrKQotewotCXJldHVybiB5dDkyMXhfcmVnX3VwZGF0ZV9iaXRzKHByaXYsIHJlZywgbWFzaywgMCk7Ci19Ci0KLXN0YXRpYyBpbnQKLXl0OTIxeF9yZWdfdG9nZ2xlX2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgbWFzaywgYm9vbCBzZXQpCi17Ci0JcmV0dXJuIHl0OTIxeF9yZWdfdXBkYXRlX2JpdHMocHJpdiwgcmVnLCBtYXNrLCAhc2V0ID8gMCA6IG1hc2spOwotfQotCi0vKiBTb21lIG11bHRpLXdvcmQgcmVnaXN0ZXJzLCBsaWtlIFZMQU5uX0NUUkwsIHNob3VsZCBiZSB0cmVhdGVkIGFzIGEgc2luZ2xlCi0gKiBsb25nIHJlZ2lzdGVyLiBNb3JlIHNwZWNpZmljYWxseSwgd3JpdGVzIHRvIHBhcnRzIG9mIGl0cyB3b3JkcyB3b24mIzM5O3QgYmVjb21lCi0gKiB2aXNpYmxlLCB1bnRpbCB0aGUgbGFzdCB3b3JkIGlzIHdyaXR0ZW4uCi0gKgotICogSGVyZSB3ZSByZXF1aXJlIGZ1bGwgcmVhZCBhbmQgd3JpdGUgb3BlcmF0aW9ucyBvdmVyIHRoZXNlIHJlZ2lzdGVycyB0bwotICogZWxpbWluYXRlIHBvdGVudGlhbCBpc3N1ZXMsIGFsdGhvdWdoIHBhcnRpYWwgcmVhZHMvd3JpdGVzIGFyZSBhbHNvIHBvc3NpYmxlLgotICovCi0KLXN0YXRpYyB2b2lkIHVwZGF0ZV9jdHJsc191bmFsaWduZWQodTMyICpsbywgdTMyICpoaSwgdTY0IG1hc2ssIHU2NCB2YWwpCi17Ci0JKmxvICZhbXA7PSB+bG93ZXJfMzJfYml0cyhtYXNrKTsKLQkqaGkgJmFtcDs9IH51cHBlcl8zMl9iaXRzKG1hc2spOwotCSpsbyB8PSBsb3dlcl8zMl9iaXRzKHZhbCk7Ci0JKmhpIHw9IHVwcGVyXzMyX2JpdHModmFsKTsKLX0KLQotc3RhdGljIGludAoteXQ5MjF4X3JlZ3NfcmVhZChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiAqdmFscywKLQkJIHVuc2lnbmVkIGludCBudW1fcmVncykKLXsKLQlpbnQgcmVzOwotCi0JZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgJmx0OyBudW1fcmVnczsgaSYjNDM7JiM0MzspIHsKLQkJcmVzID0geXQ5MjF4X3JlZ19yZWFkKHByaXYsIHJlZyAmIzQzOyA0ICogaSwgJmFtcDt2YWxzW2ldKTsKLQkJaWYgKHJlcykKLQkJCXJldHVybiByZXM7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQKLXl0OTIxeF9yZWdzX3dyaXRlKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgY29uc3QgdTMyICp2YWxzLAotCQkgIHVuc2lnbmVkIGludCBudW1fcmVncykKLXsKLQlpbnQgcmVzOwotCi0JZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgJmx0OyBudW1fcmVnczsgaSYjNDM7JiM0MzspIHsKLQkJcmVzID0geXQ5MjF4X3JlZ193cml0ZShwcml2LCByZWcgJiM0MzsgNCAqIGksIHZhbHNbaV0pOwotCQlpZiAocmVzKQotCQkJcmV0dXJuIHJlczsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludAoteXQ5MjF4X3JlZ3NfdXBkYXRlX2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCBjb25zdCB1MzIgKm1hc2tzLAotCQkJY29uc3QgdTMyICp2YWxzLCB1bnNpZ25lZCBpbnQgbnVtX3JlZ3MpCi17Ci0JYm9vbCBjaGFuZ2VkID0gZmFsc2U7Ci0JdTMyIHZzWzRdOwotCWludCByZXM7Ci0KLQlCVUlMRF9CVUdfT04obnVtX3JlZ3MgJmd0OyBBUlJBWV9TSVpFKHZzKSk7Ci0KLQlyZXMgPSB5dDkyMXhfcmVnc19yZWFkKHByaXYsIHJlZywgdnMsIG51bV9yZWdzKTsKLQlpZiAocmVzKQotCQlyZXR1cm4gcmVzOwotCi0JZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgJmx0OyBudW1fcmVnczsgaSYjNDM7JiM0MzspIHsKLQkJdTMyIHUgPSB2c1tpXTsKLQotCQl1ICZhbXA7PSB+bWFza3NbaV07Ci0JCXUgfD0gdmFsc1tpXTsKLQkJaWYgKHUgIT0gdnNbaV0pCi0JCQljaGFuZ2VkID0gdHJ1ZTsKLQotCQl2c1tpXSA9IHU7Ci0JfQotCi0JaWYgKCFjaGFuZ2VkKQotCQlyZXR1cm4gMDsKLQotCXJldHVybiB5dDkyMXhfcmVnc193cml0ZShwcml2LCByZWcsIHZzLCBudW1fcmVncyk7Ci19Ci0KLXN0YXRpYyBpbnQKLXl0OTIxeF9yZWdzX2NsZWFyX2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCBjb25zdCB1MzIgKm1hc2tzLAotCQkgICAgICAgdW5zaWduZWQgaW50IG51bV9yZWdzKQotewotCWJvb2wgY2hhbmdlZCA9IGZhbHNlOwotCXUzMiB2c1s0XTsKLQlpbnQgcmVzOwotCi0JQlVJTERfQlVHX09OKG51bV9yZWdzICZndDsgQVJSQVlfU0laRSh2cykpOwotCi0JcmVzID0geXQ5MjF4X3JlZ3NfcmVhZChwcml2LCByZWcsIHZzLCBudW1fcmVncyk7Ci0JaWYgKHJlcykKLQkJcmV0dXJuIHJlczsKLQotCWZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpICZsdDsgbnVtX3JlZ3M7IGkmIzQzOyYjNDM7KSB7Ci0JCXUzMiB1ID0gdnNbaV07Ci0KLQkJdSAmYW1wOz0gfm1hc2tzW2ldOwotCQlpZiAodSAhPSB2c1tpXSkKLQkJCWNoYW5nZWQgPSB0cnVlOwotCi0JCXZzW2ldID0gdTsKLQl9Ci0KLQlpZiAoIWNoYW5nZWQpCi0JCXJldHVybiAwOwotCi0JcmV0dXJuIHl0OTIxeF9yZWdzX3dyaXRlKHByaXYsIHJlZywgdnMsIG51bV9yZWdzKTsKLX0KLQotc3RhdGljIGludAoteXQ5MjF4X3JlZzY0X3dyaXRlKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgY29uc3QgdTMyICp2YWxzKQotewotCXJldHVybiB5dDkyMXhfcmVnc193cml0ZShwcml2LCByZWcsIHZhbHMsIDIpOwotfQotCi1zdGF0aWMgaW50Ci15dDkyMXhfcmVnNjRfdXBkYXRlX2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCBjb25zdCB1MzIgKm1hc2tzLAotCQkJIGNvbnN0IHUzMiAqdmFscykKLXsKLQlyZXR1cm4geXQ5MjF4X3JlZ3NfdXBkYXRlX2JpdHMocHJpdiwgcmVnLCBtYXNrcywgdmFscywgMik7Ci19Ci0KLXN0YXRpYyBpbnQKLXl0OTIxeF9yZWc2NF9jbGVhcl9iaXRzKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgY29uc3QgdTMyICptYXNrcykKLXsKLQlyZXR1cm4geXQ5MjF4X3JlZ3NfY2xlYXJfYml0cyhwcml2LCByZWcsIG1hc2tzLCAyKTsKLX0KLQotc3RhdGljIGludAoteXQ5MjF4X3JlZzk2X3dyaXRlKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgY29uc3QgdTMyICp2YWxzKQotewotCXJldHVybiB5dDkyMXhfcmVnc193cml0ZShwcml2LCByZWcsIHZhbHMsIDMpOwotfQotCiBzdGF0aWMgaW50IHl0OTIxeF9yZWdfbWRpb19yZWFkKHZvaWQgKmNvbnRleHQsIHUzMiByZWcsIHUzMiAqdmFscCkKIHsKIAlzdHJ1Y3QgeXQ5MjF4X3JlZ19tZGlvICptZGlvID0gY29udGV4dDsKQEAgLTQ3ODYsNiAmIzQzOzQ1ODAsMTIgQEAgc3RhdGljIGludCB5dDkyMXhfZHNhX3NldHVwKHN0cnVjdCBkc2Ffc3dpdGNoICpkcykKIAlpZiAocmVzKQogCQlyZXR1cm4gcmVzOwogCiYjNDM7I2lmIElTX0VOQUJMRUQoQ09ORklHX05FVF9EU0FfWVQ5MjFYX0xFRFMpCiYjNDM7CXJlcyA9IHl0OTIxeF9sZWRzX3NldHVwKHByaXYpOwomIzQzOwlpZiAocmVzKQomIzQzOwkJZGV2X3dhcm4oZGV2LCAmIzM0O0ZhaWxlZCB0byBzZXR1cCBMRURzOiAlZFxuJiMzNDssIHJlcyk7CiYjNDM7I2VuZGlmCiYjNDM7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTQ4ODYsNiAmIzQzOzQ2ODYsMTAgQEAgc3RhdGljIHZvaWQgeXQ5MjF4X21kaW9fcmVtb3ZlKHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldikKIAlpZiAoIXByaXYpCiAJCXJldHVybjsKIAomIzQzOyNpZiBJU19FTkFCTEVEKENPTkZJR19ORVRfRFNBX1lUOTIxWF9MRURTKQomIzQzOwl5dDkyMXhfbGVkc19yZW1vdmUocHJpdik7CiYjNDM7I2VuZGlmCiYjNDM7CiAJZm9yIChzaXplX3QgaSA9IEFSUkFZX1NJWkUocHJpdi0mZ3Q7cG9ydHMpOyBpLS0gJmd0OyAwOyApIHsKIAkJc3RydWN0IHl0OTIxeF9wb3J0ICpwcCA9ICZhbXA7cHJpdi0mZ3Q7cG9ydHNbaV07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS95dDkyMXguaCBiL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5oCnNpbWlsYXJpdHkgaW5kZXggOTklCnJlbmFtZSBmcm9tIGRyaXZlcnMvbmV0L2RzYS95dDkyMXguaApyZW5hbWUgdG8gZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmgKaW5kZXggNWYzYjk5ZTE4OWM0MS4uZTY4MTVjZjljYjNjZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZHNhL3l0OTIxeC5oCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5oCkBAIC04NTAsOSAmIzQzOzg1MCwxNCBAQCBlbnVtIHl0OTIxeF9mZGJfZW50cnlfc3RhdHVzIHsKICNkZWZpbmUgWVQ5MjFYX0FDTF9OVU0JCShZVDkyMVhfQUNMX0JMS19OVU0gKiBZVDkyMVhfQUNMX0VOVF9QRVJfQkxLKQogI2RlZmluZSBZVDkyMVhfVURGX05VTQkJOAogCiYjNDM7I2RlZmluZSBZVDkyMVhfTEVEX0dST1VQX05VTQkzCiYjNDM7I2RlZmluZSBZVDkyMVhfTEVEX1BPUlRfTlVNCTEwCiYjNDM7CiAvKiA4IGludGVybmFsICYjNDM7IDIgZXh0ZXJuYWwgJiM0MzsgMSBtY3UgKi8KICNkZWZpbmUgWVQ5MjFYX1BPUlRfTlVNCQkJMTEKIAomIzQzOyNkZWZpbmUgWVQ5MjFYX05BTUUJJiMzNDt5dDkyMXgmIzM0OwomIzQzOwogI2RlZmluZSB5dDkyMXhfcG9ydF9pc19pbnRlcm5hbChwb3J0KSAoKHBvcnQpICZsdDsgOCkKICNkZWZpbmUgeXQ5MjF4X3BvcnRfaXNfZXh0ZXJuYWwocG9ydCkgKChwb3J0KSA9PSA4IHx8IChwb3J0KSA9PSA5KQogCkBAIC05MzgsNiAmIzQzOzk0MywxMyBAQCBzdHJ1Y3QgeXQ5MjF4X3BvcnQgewogCXN0cnVjdCB5dDkyMXhfbWliIG1pYjsKIAl1NjQgcnhfZnJhbWVzOwogCXU2NCB0eF9mcmFtZXM7CiYjNDM7CiYjNDM7I2lmIElTX0VOQUJMRUQoQ09ORklHX05FVF9EU0FfWVQ5MjFYX0xFRFMpCiYjNDM7CXVuc2lnbmVkIGNoYXIgbGVkX2R1dHk7CiYjNDM7CXVuc2lnbmVkIHNob3J0IGxlZF9jeWNsZTsKJiM0MzsKJiM0MzsJc3RydWN0IHl0OTIxeF9sZWQgKmxlZHNbWVQ5MjFYX0xFRF9HUk9VUF9OVU1dOwomIzQzOyNlbmRpZgogfTsKIAogc3RydWN0IHl0OTIxeF9yZWdfb3BzIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vbGVkcy5jIGIvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9sZWRzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMC4uZTdlZjBlZjgwYTI2NgotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vbGVkcy5jCkBAIC0wLDAgJiM0MzsxLDY1NCBAQAomIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9yLWxhdGVyCiYjNDM7LyoKJiM0MzsgKiBDb3B5cmlnaHQgKGMpIDIwMjYgRGF2aWQgWWFuZwomIzQzOyAqLwomIzQzOwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC91bGVkcy5oJmd0OwomIzQzOwomIzQzOyNpbmNsdWRlICYjMzQ7Y2hpcC5oJiMzNDsKJiM0MzsjaW5jbHVkZSAmIzM0O2xlZHMuaCYjMzQ7CiYjNDM7I2luY2x1ZGUgJiMzNDtzbWkuaCYjMzQ7CiYjNDM7CiYjNDM7I2RlZmluZSB0b195dDkyMXhfbGVkKGxlZF9jZGV2KSBcCiYjNDM7CWNvbnRhaW5lcl9vZl9jb25zdCgobGVkX2NkZXYpLCBzdHJ1Y3QgeXQ5MjF4X2xlZCwgY2RldikKJiM0MzsjZGVmaW5lIHRvX3l0OTIxeF9wb3J0KGxlZCkgKChsZWQpLSZndDtwb3J0KQomIzQzOyNkZWZpbmUgdG9feXQ5MjF4X3ByaXYocHApIFwKJiM0MzsJY29udGFpbmVyX29mX2NvbnN0KChwcCksIHN0cnVjdCB5dDkyMXhfcHJpdiwgcG9ydHNbKHBwKS0mZ3Q7aW5kZXhdKQomIzQzOyNkZWZpbmUgdG9fZGV2aWNlKHByaXYpICgocHJpdiktJmd0O2RzLmRldikKJiM0MzsKJiM0MztzdGF0aWMgdTMyIHl0OTIxeF9sZWRfcmVnYWRkcihzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIGludCBwb3J0LCBpbnQgZ3JvdXApCiYjNDM7ewomIzQzOwlzd2l0Y2ggKGdyb3VwKSB7CiYjNDM7CWNhc2UgMDoKJiM0MzsJZGVmYXVsdDoKJiM0MzsJCXJldHVybiBZVDkyMVhfTEVEMF9QT1JUbihwb3J0KTsKJiM0MzsJY2FzZSAxOgomIzQzOwkJcmV0dXJuIFlUOTIxWF9MRUQxX1BPUlRuKHBvcnQpOwomIzQzOwljYXNlIDI6CiYjNDM7CQlyZXR1cm4gWVQ5MjFYX0xFRDJfUE9SVG4ocG9ydCk7CiYjNDM7CX0KJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludAomIzQzO3l0OTIxeF9sZWRfZm9yY2VfZ2V0KHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgaW50IHBvcnQsIGludCBncm91cCwgYm9vbCAqb25wKQomIzQzO3sKJiM0MzsJdTMyIHZhbDsKJiM0MzsJaW50IHJlczsKJiM0MzsKJiM0MzsJcmVzID0geXQ5MjF4X3JlZ19yZWFkKHByaXYsIFlUOTIxWF9MRUQyX1BPUlRuKHBvcnQpLCAmYW1wO3ZhbCk7CiYjNDM7CWlmIChyZXMpCiYjNDM7CQlyZXR1cm4gcmVzOwomIzQzOwomIzQzOwkqb25wID0gKHZhbCAmYW1wOyBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbl9NKGdyb3VwKSkgPT0KJiM0MzsJICAgICAgIFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuX09OKGdyb3VwKTsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQKJiM0Mzt5dDkyMXhfbGVkX2ZvcmNlX3NldChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIGludCBwb3J0LCBpbnQgZ3JvdXAsIGJvb2wgb24pCiYjNDM7ewomIzQzOwlzdHJ1Y3QgeXQ5MjF4X3BvcnQgKnBwID0gJmFtcDtwcml2LSZndDtwb3J0c1twb3J0XTsKJiM0MzsJc3RydWN0IHl0OTIxeF9sZWQgKmxlZCA9IHBwLSZndDtsZWRzW2dyb3VwXTsKJiM0MzsJdTMyIGN0cmw7CiYjNDM7CXUzMiBtYXNrOwomIzQzOwomIzQzOwlsZWQtJmd0O3VzZV9jeWNsZSA9IGZhbHNlOwomIzQzOwlsZWQtJmd0O3VzZV9kdXR5ID0gZmFsc2U7CiYjNDM7CiYjNDM7CW1hc2sgPSBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbl9NKGdyb3VwKTsKJiM0MzsJY3RybCA9IG9uID8gWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW5fT04oZ3JvdXApIDoKJiM0MzsJICAgICAgIFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuX09GRihncm91cCk7CiYjNDM7CXJldHVybiB5dDkyMXhfcmVnX3VwZGF0ZV9iaXRzKHByaXYsIFlUOTIxWF9MRUQyX1BPUlRuKHBvcnQpLCBtYXNrLAomIzQzOwkJCQkgICAgICBjdHJsKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludAomIzQzO3l0OTIxeF9sZWRfYmxpbmtfc2VsZWN0KGNvbnN0IHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdW5zaWduZWQgbG9uZyBvbiwKJiM0MzsJCQl1bnNpZ25lZCBsb25nIG9mZiwgdW5zaWduZWQgc2hvcnQgKmN5Y2xlcCwKJiM0MzsJCQl1bnNpZ25lZCBjaGFyICpkdXR5cCkKJiM0Mzt7CiYjNDM7CXN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGR1dHlzW10gPSB7CiYjNDM7CQlZVDkyMVhfTEVEX0RVVFkoMSwgNiksCiYjNDM7CQlZVDkyMVhfTEVEX0RVVFkoMSwgNCksCiYjNDM7CQlZVDkyMVhfTEVEX0RVVFkoMSwgMyksCiYjNDM7CQlZVDkyMVhfTEVEX0RVVFkoMSwgMiksCiYjNDM7CX07CiYjNDM7CXVuc2lnbmVkIGludCBjeWNsZV91cHBlcjsKJiM0MzsJdW5zaWduZWQgaW50IGN5Y2xlX3JlcTsKJiM0MzsJdW5zaWduZWQgaW50IGR1dHlfcmVxOwomIzQzOwl1bnNpZ25lZCBpbnQgY3ljbGU7CiYjNDM7CXVuc2lnbmVkIGludCBkdXR5OwomIzQzOwomIzQzOwljeWNsZSA9IFlUOTIxWF9MRURfQkxJTktfTUFYOwomIzQzOwljeWNsZV91cHBlciA9IGN5Y2xlICogMTE1ODUgLyA4MTkyICYjNDM7IDE7ICAvKiBNX1NRUlQyICogY3ljbGUgKi8KJiM0MzsJaWYgKGNoZWNrX2FkZF9vdmVyZmxvdyhvbiwgb2ZmLCAmYW1wO2N5Y2xlX3JlcSkgfHwgY3ljbGVfcmVxICZndDs9IGN5Y2xlX3VwcGVyKQomIzQzOwkJcmV0dXJuIC1FT1BOT1RTVVBQOwomIzQzOwomIzQzOwlmb3IgKDsgY3ljbGUgJmd0OyBZVDkyMVhfTEVEX0JMSU5LX01JTjsgY3ljbGVfdXBwZXIgJmd0OyZndDs9IDEsIGN5Y2xlICZndDsmZ3Q7PSAxKQomIzQzOwkJaWYgKGN5Y2xlX3JlcSAmZ3Q7PSBjeWNsZV91cHBlciAmZ3Q7Jmd0OyAxKQomIzQzOwkJCWJyZWFrOwomIzQzOwkqY3ljbGVwID0gY3ljbGU7CiYjNDM7CiYjNDM7CWR1dHlfcmVxID0gRElWX1JPVU5EX0NMT1NFU1QoWVQ5MjFYX0xFRF9EVVRZX0RFTk9NICoKJiM0MzsJCQkJICAgICAob24gJmd0OyBvZmYgPyBvZmYgOiBvbiksIGN5Y2xlX3JlcSk7CiYjNDM7CWZvciAodW5zaWduZWQgaW50IGkgPSBBUlJBWV9TSVpFKGR1dHlzKSAtIDE7OyBpLS0pCiYjNDM7CQlpZiAoaSA9PSAwIHx8IGR1dHlfcmVxICZndDs9IChkdXR5c1tpIC0gMV0gJiM0MzsgZHV0eXNbaV0pIC8gMikgewomIzQzOwkJCWR1dHkgPSBkdXR5c1tpXTsKJiM0MzsJCQlicmVhazsKJiM0MzsJCX0KJiM0MzsJaWYgKG9uICZndDsgb2ZmKQomIzQzOwkJZHV0eSA9IFlUOTIxWF9MRURfRFVUWV9ERU5PTSAtIGR1dHk7CiYjNDM7CSpkdXR5cCA9IGR1dHk7CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50CiYjNDM7eXQ5MjF4X2xlZF9ibGlua19zZXQoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCBpbnQgcG9ydCwgaW50IGdyb3VwLAomIzQzOwkJICAgICB1bnNpZ25lZCBsb25nICpvbnAsIHVuc2lnbmVkIGxvbmcgKm9mZnApCiYjNDM7ewomIzQzOwlzdHJ1Y3QgeXQ5MjF4X3BvcnQgKnBwID0gJmFtcDtwcml2LSZndDtwb3J0c1twb3J0XTsKJiM0MzsJc3RydWN0IHl0OTIxeF9sZWQgKmxlZCA9IHBwLSZndDtsZWRzW2dyb3VwXTsKJiM0MzsJdW5zaWduZWQgc2hvcnQgY3ljbGU7CiYjNDM7CXVuc2lnbmVkIGNoYXIgZHV0eTsKJiM0MzsJYm9vbCB1c2VfY3ljbGU7CiYjNDM7CXUzMiBjdHJsOwomIzQzOwl1MzIgbWFzazsKJiM0MzsJdTMyIHZhbDsKJiM0MzsJaW50IHJlczsKJiM0MzsKJiM0MzsJaWYgKCEqb25wICZhbXA7JmFtcDsgISpvZmZwKSB7CiYjNDM7CQljeWNsZSA9IFlUOTIxWF9MRURfQkxJTktfREVGOwomIzQzOwkJZHV0eSA9IFlUOTIxWF9MRURfRFVUWSgxLCAyKTsKJiM0MzsJCWZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpICZsdDsgWVQ5MjFYX0xFRF9HUk9VUF9OVU07IGkmIzQzOyYjNDM7KQomIzQzOwkJCWlmIChpICE9IGdyb3VwICZhbXA7JmFtcDsgcHAtJmd0O2xlZHNbaV0gJmFtcDsmYW1wOwomIzQzOwkJCSAgICBwcC0mZ3Q7bGVkc1tpXS0mZ3Q7dXNlX2R1dHkpIHsKJiM0MzsJCQkJZHV0eSA9IHBwLSZndDtsZWRfZHV0eTsKJiM0MzsJCQkJYnJlYWs7CiYjNDM7CQkJfQomIzQzOwomIzQzOwkJdXNlX2N5Y2xlID0gZmFsc2U7CiYjNDM7CX0gZWxzZSB7CiYjNDM7CQlib29sIGNoYW5nZV9jeWNsZTsKJiM0MzsJCWJvb2wgY2hhbmdlX2R1dHk7CiYjNDM7CiYjNDM7CQlyZXMgPSB5dDkyMXhfbGVkX2JsaW5rX3NlbGVjdChwcml2LCAqb25wLCAqb2ZmcCwgJmFtcDtjeWNsZSwgJmFtcDtkdXR5KTsKJiM0MzsJCWlmIChyZXMpCiYjNDM7CQkJcmV0dXJuIHJlczsKJiM0MzsKJiM0MzsJCXVzZV9jeWNsZSA9IGN5Y2xlICZsdDsgWVQ5MjFYX0xFRF9CTElOS19ERUY7CiYjNDM7CQljaGFuZ2VfY3ljbGUgPSB1c2VfY3ljbGUgJmFtcDsmYW1wOyBjeWNsZSAhPSBwcC0mZ3Q7bGVkX2N5Y2xlOwomIzQzOwkJY2hhbmdlX2R1dHkgPSBkdXR5ICE9IHBwLSZndDtsZWRfZHV0eTsKJiM0MzsJCWlmIChjaGFuZ2VfY3ljbGUgfHwgY2hhbmdlX2R1dHkpCiYjNDM7CQkJZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgJmx0OyBZVDkyMVhfTEVEX0dST1VQX05VTTsKJiM0MzsJCQkgICAgIGkmIzQzOyYjNDM7KSB7CiYjNDM7CQkJCWlmIChpID09IGdyb3VwIHx8ICFwcC0mZ3Q7bGVkc1tpXSkKJiM0MzsJCQkJCWNvbnRpbnVlOwomIzQzOwkJCQlpZiAoKGNoYW5nZV9jeWNsZSAmYW1wOyZhbXA7IHBwLSZndDtsZWRzW2ldLSZndDt1c2VfY3ljbGUpIHx8CiYjNDM7CQkJCSAgICAoY2hhbmdlX2R1dHkgJmFtcDsmYW1wOyBwcC0mZ3Q7bGVkc1tpXS0mZ3Q7dXNlX2R1dHkpKQomIzQzOwkJCQkJcmV0dXJuIC1FT1BOT1RTVVBQOwomIzQzOwkJCX0KJiM0MzsJfQomIzQzOwomIzQzOwkvKiBUaGUgY2hpcCBzZWVtcyB0byBqYW0gYSB3aGlsZSBpZiBjaGFuZ2luZyBkdXR5IGRpcmVjdGx5ICovCiYjNDM7CXJlcyA9IHl0OTIxeF9yZWdfcmVhZChwcml2LCBZVDkyMVhfTEVEMl9QT1JUbihwb3J0KSwgJmFtcDt2YWwpOwomIzQzOwlpZiAocmVzKQomIzQzOwkJcmV0dXJuIHJlczsKJiM0MzsKJiM0MzsJY3RybCA9IHZhbCAmYW1wOyB+WVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW5fTShncm91cCk7CiYjNDM7CWN0cmwgfD0gWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW5fRE9OVENBUkUoZ3JvdXApOwomIzQzOwlpZiAodmFsICE9IGN0cmwpIHsKJiM0MzsJCXJlcyA9IHl0OTIxeF9yZWdfd3JpdGUocHJpdiwgWVQ5MjFYX0xFRDJfUE9SVG4ocG9ydCksIGN0cmwpOwomIzQzOwkJaWYgKHJlcykKJiM0MzsJCQlyZXR1cm4gcmVzOwomIzQzOwl9CiYjNDM7CiYjNDM7CW1hc2sgPSBZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFlfTSB8IFlUOTIxWF9MRUQxX1BPUlRfQkxJTktfRFVUWV9DT01QOwomIzQzOwlzd2l0Y2ggKGR1dHkgJmd0Oz0gWVQ5MjFYX0xFRF9EVVRZKDEsIDIpID8gZHV0eSA6CiYjNDM7CQlZVDkyMVhfTEVEX0RVVFlfREVOT00gLSBkdXR5KSB7CiYjNDM7CWRlZmF1bHQ6CiYjNDM7CQlkdXR5ID0gWVQ5MjFYX0xFRF9EVVRZKDEsIDIpOwomIzQzOwkJZmFsbHRocm91Z2g7CiYjNDM7CWNhc2UgWVQ5MjFYX0xFRF9EVVRZKDEsIDIpOgomIzQzOwkJY3RybCA9IFlUOTIxWF9MRUQxX1BPUlRfQkxJTktfRFVUWV8xXzI7CiYjNDM7CQlicmVhazsKJiM0MzsJY2FzZSBZVDkyMVhfTEVEX0RVVFkoMiwgMyk6CiYjNDM7CQljdHJsID0gWVQ5MjFYX0xFRDFfUE9SVF9CTElOS19EVVRZXzJfMzsKJiM0MzsJCWJyZWFrOwomIzQzOwljYXNlIFlUOTIxWF9MRURfRFVUWSgzLCA0KToKJiM0MzsJCWN0cmwgPSBZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFlfM180OwomIzQzOwkJYnJlYWs7CiYjNDM7CWNhc2UgWVQ5MjFYX0xFRF9EVVRZKDUsIDYpOgomIzQzOwkJY3RybCA9IFlUOTIxWF9MRUQxX1BPUlRfQkxJTktfRFVUWV81XzY7CiYjNDM7CQlicmVhazsKJiM0MzsJfQomIzQzOwlpZiAoZHV0eSAmbHQ7IFlUOTIxWF9MRURfRFVUWSgxLCAyKSkKJiM0MzsJCWN0cmwgfD0gWVQ5MjFYX0xFRDFfUE9SVF9CTElOS19EVVRZX0NPTVA7CiYjNDM7CWlmICh1c2VfY3ljbGUpIHsKJiM0MzsJCW1hc2sgfD0gWVQ5MjFYX0xFRDFfUE9SVF9PVEhFUl9CTElOS19NOwomIzQzOwkJY3RybCB8PSBZVDkyMVhfTEVEMV9QT1JUX09USEVSX0JMSU5LKDkgLSBfX2ZscyhjeWNsZSkpOwomIzQzOwl9CiYjNDM7CXJlcyA9IHl0OTIxeF9yZWdfdXBkYXRlX2JpdHMocHJpdiwgWVQ5MjFYX0xFRDFfUE9SVG4ocG9ydCksIG1hc2ssIGN0cmwpOwomIzQzOwlpZiAocmVzKQomIzQzOwkJcmV0dXJuIHJlczsKJiM0MzsKJiM0MzsJY3RybCA9IHZhbCAmYW1wOyB+KFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuX00oZ3JvdXApIHwKJiM0MzsJCSAgICAgICBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFX0JMSU5Lbl9NKGdyb3VwKSk7CiYjNDM7CWN0cmwgfD0gWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW5fQkxJTksoZ3JvdXApOwomIzQzOwlpZiAodXNlX2N5Y2xlKQomIzQzOwkJY3RybCB8PSBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFX0JMSU5Lbl9PVEhFUihncm91cCk7CiYjNDM7CWVsc2UKJiM0MzsJCWN0cmwgfD0gWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRV9CTElOS24oZ3JvdXAsIF9fZmxzKGN5Y2xlKSAtIDkpOwomIzQzOwlyZXMgPSB5dDkyMXhfcmVnX3dyaXRlKHByaXYsIFlUOTIxWF9MRUQyX1BPUlRuKHBvcnQpLCBjdHJsKTsKJiM0MzsJaWYgKHJlcykKJiM0MzsJCXJldHVybiByZXM7CiYjNDM7CiYjNDM7CWxlZC0mZ3Q7dXNlX2N5Y2xlID0gdXNlX2N5Y2xlOwomIzQzOwlpZiAodXNlX2N5Y2xlKQomIzQzOwkJcHAtJmd0O2xlZF9jeWNsZSA9IGN5Y2xlOwomIzQzOwlsZWQtJmd0O3VzZV9kdXR5ID0gdHJ1ZTsKJiM0MzsJcHAtJmd0O2xlZF9kdXR5ID0gZHV0eTsKJiM0MzsKJiM0MzsJKm9ucCA9IERJVl9ST1VORF9DTE9TRVNUKGR1dHkgKiBjeWNsZSwgWVQ5MjFYX0xFRF9EVVRZX0RFTk9NKTsKJiM0MzsJKm9mZnAgPSBjeWNsZSAtICpvbnA7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdHJ1Y3QgeXQ5MjF4X2xlZF90cmlnZ2VyX21hcCB7CiYjNDM7CXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiYjNDM7CXUzMiBtYXNrOwomIzQzO307CiYjNDM7CiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCB5dDkyMXhfbGVkX3RyaWdnZXJfbWFwIHl0OTIxeF9sZWRfdHJpZ2dlcl9tYXBzW10gPSB7CiYjNDM7CXtCSVQoVFJJR0dFUl9ORVRERVZfTElOSyksCiYjNDM7CSBZVDkyMVhfTEVEeF9QT1JUX0FDVF9EVVBMRVhfSEFMRiB8IFlUOTIxWF9MRUR4X1BPUlRfQUNUX0RVUExFWF9GVUxMfSwKJiM0MzsJe0JJVChUUklHR0VSX05FVERFVl9MSU5LXzEwKSwgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfMTBNfSwKJiM0MzsJe0JJVChUUklHR0VSX05FVERFVl9MSU5LXzEwMCksIFlUOTIxWF9MRUR4X1BPUlRfQUNUXzEwME19LAomIzQzOwl7QklUKFRSSUdHRVJfTkVUREVWX0xJTktfMTAwMCksIFlUOTIxWF9MRUR4X1BPUlRfQUNUXzEwMDBNfSwKJiM0MzsJe0JJVChUUklHR0VSX05FVERFVl9IQUxGX0RVUExFWCksIFlUOTIxWF9MRUR4X1BPUlRfQUNUX0RVUExFWF9IQUxGfSwKJiM0MzsJe0JJVChUUklHR0VSX05FVERFVl9GVUxMX0RVUExFWCksIFlUOTIxWF9MRUR4X1BPUlRfQUNUX0RVUExFWF9GVUxMfSwKJiM0MzsJe0JJVChUUklHR0VSX05FVERFVl9UWCksIFlUOTIxWF9MRUR4X1BPUlRfQUNUX1RYX0JMSU5LfSwKJiM0MzsJe0JJVChUUklHR0VSX05FVERFVl9SWCksIFlUOTIxWF9MRUR4X1BPUlRfQUNUX1JYX0JMSU5LfSwKJiM0MzsJe0JJVChUUklHR0VSX05FVERFVl9UWF9FUlIpIHwgQklUKFRSSUdHRVJfTkVUREVWX1JYX0VSUiksCiYjNDM7CSBZVDkyMVhfTEVEeF9QT1JUX0FDVF9DT0xMSVNJT05fQkxJTkt9LAomIzQzO307CiYjNDM7CiYjNDM7c3RhdGljIGJvb2wKJiM0Mzt5dDkyMXhfbGVkX3RyaWdnZXJfaXNfc3VwcG9ydGVkKGNvbnN0IHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgaW50IHBvcnQsCiYjNDM7CQkJCWludCBncm91cCwgdW5zaWduZWQgbG9uZyBmbGFncykKJiM0Mzt7CiYjNDM7CWlmICghZmxhZ3MpCiYjNDM7CQlyZXR1cm4gdHJ1ZTsKJiM0MzsKJiM0MzsJZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgJmx0OyBBUlJBWV9TSVpFKHl0OTIxeF9sZWRfdHJpZ2dlcl9tYXBzKTsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCWNvbnN0IHN0cnVjdCB5dDkyMXhfbGVkX3RyaWdnZXJfbWFwICptYXAgPSAmYW1wO3l0OTIxeF9sZWRfdHJpZ2dlcl9tYXBzW2ldOwomIzQzOwomIzQzOwkJaWYgKChmbGFncyAmYW1wOyBtYXAtJmd0O2ZsYWdzKSA9PSBtYXAtJmd0O2ZsYWdzKSB7CiYjNDM7CQkJZmxhZ3MgJmFtcDs9IH5tYXAtJmd0O2ZsYWdzOwomIzQzOwkJCWlmICghZmxhZ3MpCiYjNDM7CQkJCXJldHVybiB0cnVlOwomIzQzOwkJfQomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiBmYWxzZTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludAomIzQzO3l0OTIxeF9sZWRfdHJpZ2dlcl9nZXQoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCBpbnQgcG9ydCwgaW50IGdyb3VwLAomIzQzOwkJICAgICAgIHVuc2lnbmVkIGxvbmcgKmZsYWdzcCkKJiM0Mzt7CiYjNDM7CXUzMiBhZGRyOwomIzQzOwl1MzIgdmFsOwomIzQzOwlpbnQgcmVzOwomIzQzOwomIzQzOwlyZXMgPSB5dDkyMXhfcmVnX3JlYWQocHJpdiwgWVQ5MjFYX0xFRDJfUE9SVG4ocG9ydCksICZhbXA7dmFsKTsKJiM0MzsJaWYgKHJlcykKJiM0MzsJCXJldHVybiByZXM7CiYjNDM7CiYjNDM7CWlmICgodmFsICZhbXA7IFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuX00oZ3JvdXApKSAhPQomIzQzOwkgICAgWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW5fRE9OVENBUkUoZ3JvdXApKSB7CiYjNDM7CQkqZmxhZ3NwID0gMDsKJiM0MzsJCXJldHVybiAwOwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmIChncm91cCAhPSAyKSB7CiYjNDM7CQlhZGRyID0geXQ5MjF4X2xlZF9yZWdhZGRyKHByaXYsIHBvcnQsIGdyb3VwKTsKJiM0MzsJCXJlcyA9IHl0OTIxeF9yZWdfcmVhZChwcml2LCBhZGRyLCAmYW1wO3ZhbCk7CiYjNDM7CQlpZiAocmVzKQomIzQzOwkJCXJldHVybiByZXM7CiYjNDM7CX0KJiM0MzsKJiM0MzsJKmZsYWdzcCA9IDA7CiYjNDM7CWZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpICZsdDsgQVJSQVlfU0laRSh5dDkyMXhfbGVkX3RyaWdnZXJfbWFwcyk7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQljb25zdCBzdHJ1Y3QgeXQ5MjF4X2xlZF90cmlnZ2VyX21hcCAqbWFwID0gJmFtcDt5dDkyMXhfbGVkX3RyaWdnZXJfbWFwc1tpXTsKJiM0MzsKJiM0MzsJCWlmICgodmFsICZhbXA7IG1hcC0mZ3Q7bWFzaykgPT0gbWFwLSZndDttYXNrKQomIzQzOwkJCSpmbGFnc3AgfD0gbWFwLSZndDtmbGFnczsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludAomIzQzO3l0OTIxeF9sZWRfdHJpZ2dlcl9zZXQoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCBpbnQgcG9ydCwgaW50IGdyb3VwLAomIzQzOwkJICAgICAgIHVuc2lnbmVkIGxvbmcgZmxhZ3MpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgeXQ5MjF4X3BvcnQgKnBwID0gJmFtcDtwcml2LSZndDtwb3J0c1twb3J0XTsKJiM0MzsJc3RydWN0IHl0OTIxeF9sZWQgKmxlZCA9IHBwLSZndDtsZWRzW2dyb3VwXTsKJiM0MzsJdTMyIGFkZHI7CiYjNDM7CXUzMiBjdHJsOwomIzQzOwl1MzIgbWFzazsKJiM0MzsJaW50IHJlczsKJiM0MzsKJiM0MzsJY3RybCA9IDA7CiYjNDM7CWZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpICZsdDsgQVJSQVlfU0laRSh5dDkyMXhfbGVkX3RyaWdnZXJfbWFwcyk7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQljb25zdCBzdHJ1Y3QgeXQ5MjF4X2xlZF90cmlnZ2VyX21hcCAqbWFwID0gJmFtcDt5dDkyMXhfbGVkX3RyaWdnZXJfbWFwc1tpXTsKJiM0MzsKJiM0MzsJCWlmICgoZmxhZ3MgJmFtcDsgbWFwLSZndDtmbGFncykgPT0gbWFwLSZndDtmbGFncykgewomIzQzOwkJCWZsYWdzICZhbXA7PSB+bWFwLSZndDtmbGFnczsKJiM0MzsJCQljdHJsIHw9IG1hcC0mZ3Q7bWFzazsKJiM0MzsJCQlpZiAoIWZsYWdzKQomIzQzOwkJCQlicmVhazsKJiM0MzsJCX0KJiM0MzsJfQomIzQzOwlpZiAoZmxhZ3MpCiYjNDM7CQlyZXR1cm4gLUVPUE5PVFNVUFA7CiYjNDM7CiYjNDM7CWxlZC0mZ3Q7dXNlX2N5Y2xlID0gZmFsc2U7CiYjNDM7CWxlZC0mZ3Q7dXNlX2R1dHkgPSBmYWxzZTsKJiM0MzsKJiM0MzsJbWFzayA9ICFncm91cCA/IFlUOTIxWF9MRUQwX1BPUlRfQUNUX00gOiBZVDkyMVhfTEVEeF9QT1JUX0FDVF9NOwomIzQzOwlpZiAoZ3JvdXAgPT0gMikgewomIzQzOwkJbWFzayB8PSBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbl9NKGdyb3VwKTsKJiM0MzsJCWN0cmwgfD0gWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW5fRE9OVENBUkUoZ3JvdXApOwomIzQzOwl9CiYjNDM7CWFkZHIgPSB5dDkyMXhfbGVkX3JlZ2FkZHIocHJpdiwgcG9ydCwgZ3JvdXApOwomIzQzOwlyZXMgPSB5dDkyMXhfcmVnX3VwZGF0ZV9iaXRzKHByaXYsIGFkZHIsIG1hc2ssIGN0cmwpOwomIzQzOwlpZiAocmVzKQomIzQzOwkJcmV0dXJuIHJlczsKJiM0MzsKJiM0MzsJaWYgKGdyb3VwICE9IDIpIHsKJiM0MzsJCW1hc2sgPSBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbl9NKGdyb3VwKTsKJiM0MzsJCWN0cmwgPSBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbl9ET05UQ0FSRShncm91cCk7CiYjNDM7CQlyZXMgPSB5dDkyMXhfcmVnX3VwZGF0ZV9iaXRzKHByaXYsIFlUOTIxWF9MRUQyX1BPUlRuKHBvcnQpLAomIzQzOwkJCQkJICAgICBtYXNrLCBjdHJsKTsKJiM0MzsJCWlmIChyZXMpCiYjNDM7CQkJcmV0dXJuIHJlczsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludAomIzQzO3l0OTIxeF9jbGVkX2JyaWdodG5lc3Nfc2V0X2Jsb2NraW5nKHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2LAomIzQzOwkJCQkgICAgZW51bSBsZWRfYnJpZ2h0bmVzcyBicmlnaHRuZXNzKQomIzQzO3sKJiM0MzsJc3RydWN0IHl0OTIxeF9sZWQgKmxlZCA9IHRvX3l0OTIxeF9sZWQobGVkX2NkZXYpOwomIzQzOwlzdHJ1Y3QgeXQ5MjF4X3BvcnQgKnBwID0gdG9feXQ5MjF4X3BvcnQobGVkKTsKJiM0MzsJc3RydWN0IHl0OTIxeF9wcml2ICpwcml2ID0gdG9feXQ5MjF4X3ByaXYocHApOwomIzQzOwlpbnQgcmVzOwomIzQzOwomIzQzOwltdXRleF9sb2NrKCZhbXA7cHJpdi0mZ3Q7cmVnX2xvY2spOwomIzQzOwlyZXMgPSB5dDkyMXhfbGVkX2ZvcmNlX3NldChwcml2LCBwcC0mZ3Q7aW5kZXgsIGxlZC0mZ3Q7Z3JvdXAsIGJyaWdodG5lc3MpOwomIzQzOwltdXRleF91bmxvY2soJmFtcDtwcml2LSZndDtyZWdfbG9jayk7CiYjNDM7CiYjNDM7CXJldHVybiByZXM7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQKJiM0Mzt5dDkyMXhfY2xlZF9ibGlua19zZXQoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYsIHVuc2lnbmVkIGxvbmcgKmRlbGF5X29uLAomIzQzOwkJICAgICAgdW5zaWduZWQgbG9uZyAqZGVsYXlfb2ZmKQomIzQzO3sKJiM0MzsJc3RydWN0IHl0OTIxeF9sZWQgKmxlZCA9IHRvX3l0OTIxeF9sZWQobGVkX2NkZXYpOwomIzQzOwlzdHJ1Y3QgeXQ5MjF4X3BvcnQgKnBwID0gdG9feXQ5MjF4X3BvcnQobGVkKTsKJiM0MzsJc3RydWN0IHl0OTIxeF9wcml2ICpwcml2ID0gdG9feXQ5MjF4X3ByaXYocHApOwomIzQzOwlpbnQgcmVzOwomIzQzOwomIzQzOwltdXRleF9sb2NrKCZhbXA7cHJpdi0mZ3Q7cmVnX2xvY2spOwomIzQzOwlyZXMgPSB5dDkyMXhfbGVkX2JsaW5rX3NldChwcml2LCBwcC0mZ3Q7aW5kZXgsIGxlZC0mZ3Q7Z3JvdXAsIGRlbGF5X29uLAomIzQzOwkJCQkgICBkZWxheV9vZmYpOwomIzQzOwltdXRleF91bmxvY2soJmFtcDtwcml2LSZndDtyZWdfbG9jayk7CiYjNDM7CiYjNDM7CXJldHVybiByZXM7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBzdHJ1Y3QgZGV2aWNlICogX19tYXliZV91bnVzZWQKJiM0Mzt5dDkyMXhfY2xlZF9od19jb250cm9sX2dldF9kZXZpY2Uoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgeXQ5MjF4X2xlZCAqbGVkID0gdG9feXQ5MjF4X2xlZChsZWRfY2Rldik7CiYjNDM7CXN0cnVjdCB5dDkyMXhfcG9ydCAqcHAgPSB0b195dDkyMXhfcG9ydChsZWQpOwomIzQzOwlzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYgPSB0b195dDkyMXhfcHJpdihwcCk7CiYjNDM7CXN0cnVjdCBkc2FfcG9ydCAqZHA7CiYjNDM7CiYjNDM7CWRwID0gZHNhX3RvX3BvcnQoJmFtcDtwcml2LSZndDtkcywgcHAtJmd0O2luZGV4KTsKJiM0MzsJaWYgKCFkcCkKJiM0MzsJCXJldHVybiBOVUxMOwomIzQzOwomIzQzOwlpZiAoZHNhX3BvcnRfaXNfdXNlcihkcCkpCiYjNDM7CQlyZXR1cm4gJmFtcDtkcC0mZ3Q7dXNlci0mZ3Q7ZGV2OwomIzQzOwlpZiAoZHNhX3BvcnRfaXNfY3B1KGRwKSkKJiM0MzsJCXJldHVybiAmYW1wO2RwLSZndDtjb25kdWl0LSZndDtkZXY7CiYjNDM7CiYjNDM7CXJldHVybiBOVUxMOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IF9fbWF5YmVfdW51c2VkCiYjNDM7eXQ5MjF4X2NsZWRfaHdfY29udHJvbF9pc19zdXBwb3J0ZWQoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYsCiYjNDM7CQkJCSAgICB1bnNpZ25lZCBsb25nIGZsYWdzKQomIzQzO3sKJiM0MzsJc3RydWN0IHl0OTIxeF9sZWQgKmxlZCA9IHRvX3l0OTIxeF9sZWQobGVkX2NkZXYpOwomIzQzOwlzdHJ1Y3QgeXQ5MjF4X3BvcnQgKnBwID0gdG9feXQ5MjF4X3BvcnQobGVkKTsKJiM0MzsJc3RydWN0IHl0OTIxeF9wcml2ICpwcml2ID0gdG9feXQ5MjF4X3ByaXYocHApOwomIzQzOwomIzQzOwlpZiAoeXQ5MjF4X2xlZF90cmlnZ2VyX2lzX3N1cHBvcnRlZChwcml2LCBwcC0mZ3Q7aW5kZXgsIGxlZC0mZ3Q7Z3JvdXAsIGZsYWdzKSkKJiM0MzsJCXJldHVybiAwOwomIzQzOwlyZXR1cm4gLUVPUE5PVFNVUFA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgX19tYXliZV91bnVzZWQKJiM0Mzt5dDkyMXhfY2xlZF9od19jb250cm9sX2dldChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldiwgdW5zaWduZWQgbG9uZyAqZmxhZ3NwKQomIzQzO3sKJiM0MzsJc3RydWN0IHl0OTIxeF9sZWQgKmxlZCA9IHRvX3l0OTIxeF9sZWQobGVkX2NkZXYpOwomIzQzOwlzdHJ1Y3QgeXQ5MjF4X3BvcnQgKnBwID0gdG9feXQ5MjF4X3BvcnQobGVkKTsKJiM0MzsJc3RydWN0IHl0OTIxeF9wcml2ICpwcml2ID0gdG9feXQ5MjF4X3ByaXYocHApOwomIzQzOwlpbnQgcmVzOwomIzQzOwomIzQzOwltdXRleF9sb2NrKCZhbXA7cHJpdi0mZ3Q7cmVnX2xvY2spOwomIzQzOwlyZXMgPSB5dDkyMXhfbGVkX3RyaWdnZXJfZ2V0KHByaXYsIHBwLSZndDtpbmRleCwgbGVkLSZndDtncm91cCwgZmxhZ3NwKTsKJiM0MzsJbXV0ZXhfdW5sb2NrKCZhbXA7cHJpdi0mZ3Q7cmVnX2xvY2spOwomIzQzOwomIzQzOwlyZXR1cm4gcmVzOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IF9fbWF5YmVfdW51c2VkCiYjNDM7eXQ5MjF4X2NsZWRfaHdfY29udHJvbF9zZXQoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYsIHVuc2lnbmVkIGxvbmcgZmxhZ3MpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgeXQ5MjF4X2xlZCAqbGVkID0gdG9feXQ5MjF4X2xlZChsZWRfY2Rldik7CiYjNDM7CXN0cnVjdCB5dDkyMXhfcG9ydCAqcHAgPSB0b195dDkyMXhfcG9ydChsZWQpOwomIzQzOwlzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYgPSB0b195dDkyMXhfcHJpdihwcCk7CiYjNDM7CWludCByZXM7CiYjNDM7CiYjNDM7CW11dGV4X2xvY2soJmFtcDtwcml2LSZndDtyZWdfbG9jayk7CiYjNDM7CXJlcyA9IHl0OTIxeF9sZWRfdHJpZ2dlcl9zZXQocHJpdiwgcHAtJmd0O2luZGV4LCBsZWQtJmd0O2dyb3VwLCBmbGFncyk7CiYjNDM7CW11dGV4X3VubG9jaygmYW1wO3ByaXYtJmd0O3JlZ19sb2NrKTsKJiM0MzsKJiM0MzsJcmV0dXJuIHJlczsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludAomIzQzO3l0OTIxeF9sZWRfc2V0dXAoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCBpbnQgcG9ydCwKJiM0MzsJCSBzdHJ1Y3QgZndub2RlX2hhbmRsZSAqZndub2RlKQomIzQzO3sKJiM0MzsJc3RydWN0IHl0OTIxeF9wb3J0ICpwcCA9ICZhbXA7cHJpdi0mZ3Q7cG9ydHNbcG9ydF07CiYjNDM7CXN0cnVjdCBkZXZpY2UgKmRldiA9IHRvX2RldmljZShwcml2KTsKJiM0MzsJc3RydWN0IGxlZF9pbml0X2RhdGEgaW5pdF9kYXRhOwomIzQzOwlzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldjsKJiM0MzsJY2hhciBuYW1lW0xFRF9NQVhfTkFNRV9TSVpFXTsKJiM0MzsJZW51bSBsZWRfZGVmYXVsdF9zdGF0ZSBzdGF0ZTsKJiM0MzsJc3RydWN0IHl0OTIxeF9sZWQgKmxlZDsKJiM0MzsJYm9vbCBmb3JjZV9oaWdoOwomIzQzOwlib29sIGZvcmNlX2xvdzsKJiM0MzsJdTMyIGdyb3VwOwomIzQzOwl1MzIgbWFzazsKJiM0MzsJdTMyIGN0cmw7CiYjNDM7CXUzMiB2YWw7CiYjNDM7CWJvb2wgb247CiYjNDM7CWludCByZXM7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CXJlcyA9IGZ3bm9kZV9wcm9wZXJ0eV9yZWFkX3UzMihmd25vZGUsICYjMzQ7cmVnJiMzNDssICZhbXA7Z3JvdXApOwomIzQzOwlpZiAocmVzKQomIzQzOwkJcmV0dXJuIHJlczsKJiM0MzsJaWYgKGdyb3VwICZndDs9IFlUOTIxWF9MRURfR1JPVVBfTlVNKSB7CiYjNDM7CQlkZXZfZXJyKGRldiwgJiMzNDtJbnZhbGlkIExFRCByZWcgJXUgZm9yIHBvcnQgJWRcbiYjMzQ7LCBncm91cCwgcG9ydCk7CiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJfQomIzQzOwlpZiAocHAtJmd0O2xlZHNbZ3JvdXBdKQomIzQzOwkJcmV0dXJuIC1FRVhJU1Q7CiYjNDM7CiYjNDM7CWZvcmNlX2hpZ2ggPSBmd25vZGVfcHJvcGVydHlfcmVhZF9ib29sKGZ3bm9kZSwgJiMzNDthY3RpdmUtaGlnaCYjMzQ7KTsKJiM0MzsJZm9yY2VfbG93ID0gZndub2RlX3Byb3BlcnR5X3JlYWRfYm9vbChmd25vZGUsICYjMzQ7YWN0aXZlLWxvdyYjMzQ7KTsKJiM0MzsJaWYgKGZvcmNlX2hpZ2ggJmFtcDsmYW1wOyBmb3JjZV9sb3cpIHsKJiM0MzsJCWRldl9lcnIoZGV2LCAmIzM0O0R1cGxpY2F0ZSBwb2xhcml0aWVzIGZvciBMRUQgJTAyZDolMDJ1XG4mIzM0OywKJiM0MzsJCQlwb3J0LCBncm91cCk7CiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJfQomIzQzOwomIzQzOwlsZWQgPSBkZXZtX2t6YWxsb2MoZGV2LCBzaXplb2YoKmxlZCksIEdGUF9LRVJORUwpOwomIzQzOwlpZiAoIWxlZCkKJiM0MzsJCXJldHVybiAtRU5PTUVNOwomIzQzOwlsZWQtJmd0O3BvcnQgPSBwcDsKJiM0MzsJbGVkLSZndDtncm91cCA9IGdyb3VwOwomIzQzOwomIzQzOwlzdGF0ZSA9IGxlZF9pbml0X2RlZmF1bHRfc3RhdGVfZ2V0KGZ3bm9kZSk7CiYjNDM7CiYjNDM7CW11dGV4X2xvY2soJmFtcDtwcml2LSZndDtyZWdfbG9jayk7CiYjNDM7CiYjNDM7CS8qIEludmVyc2lvbiBpcyBpbnRlcm5hbCAtIGZvcmNlIG9uIHdpbGwgZ2l2ZSBsb3cgbG9naWMuCiYjNDM7CSAqIEluIHRoZSByZXN0IG9mIHRoZSBmaWxlLCB0cmVhdCBMRURzIGFzIGlmIGFjdGl2ZS1sb3cuCiYjNDM7CSAqLwomIzQzOwlpZiAoZm9yY2VfaGlnaCB8fCBmb3JjZV9sb3cpIHsKJiM0MzsJCXJlcyA9IHl0OTIxeF9yZWdfcmVhZChwcml2LCBZVDkyMVhfTEVEX1BBUl9JTlYsICZhbXA7dmFsKTsKJiM0MzsJCWlmIChyZXMpCiYjNDM7CQkJZ290byB1bmxvY2s7CiYjNDM7CiYjNDM7CQltYXNrID0gWVQ5MjFYX0xFRF9QQVJfSU5WX0lOVm5tKGdyb3VwLCBwb3J0KTsKJiM0MzsJCWN0cmwgPSBmb3JjZV9oaWdoID8gdmFsIHwgbWFzayA6IHZhbCAmYW1wOyB+bWFzazsKJiM0MzsJCXJlcyA9IHl0OTIxeF9yZWdfd3JpdGUocHJpdiwgWVQ5MjFYX0xFRF9QQVJfSU5WLCBjdHJsKTsKJiM0MzsJCWlmIChyZXMpCiYjNDM7CQkJZ290byB1bmxvY2s7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcHAtJmd0O2xlZHNbZ3JvdXBdID0gbGVkOwomIzQzOwomIzQzOwlzd2l0Y2ggKHN0YXRlKSB7CiYjNDM7CWNhc2UgTEVEU19ERUZTVEFURV9PRkY6CiYjNDM7CWNhc2UgTEVEU19ERUZTVEFURV9PTjoKJiM0MzsJZGVmYXVsdDoKJiM0MzsJCW9uID0gc3RhdGUgPT0gTEVEU19ERUZTVEFURV9PTjsKJiM0MzsJCXJlcyA9IHl0OTIxeF9sZWRfZm9yY2Vfc2V0KHByaXYsIHBvcnQsIGdyb3VwLCBvbik7CiYjNDM7CQlicmVhazsKJiM0MzsJY2FzZSBMRURTX0RFRlNUQVRFX0tFRVA6CiYjNDM7CQlyZXMgPSB5dDkyMXhfbGVkX2ZvcmNlX2dldChwcml2LCBwb3J0LCBncm91cCwgJmFtcDtvbik7CiYjNDM7CQlicmVhazsKJiM0MzsJfQomIzQzOwomIzQzO3VubG9jazoKJiM0MzsJbXV0ZXhfdW5sb2NrKCZhbXA7cHJpdi0mZ3Q7cmVnX2xvY2spOwomIzQzOwlpZiAocmVzKQomIzQzOwkJZ290byBlcnI7CiYjNDM7CiYjNDM7CWxlZF9jZGV2ID0gJmFtcDtsZWQtJmd0O2NkZXY7CiYjNDM7CWxlZF9jZGV2LSZndDticmlnaHRuZXNzID0gb247CiYjNDM7CWxlZF9jZGV2LSZndDttYXhfYnJpZ2h0bmVzcyA9IDE7CiYjNDM7CWxlZF9jZGV2LSZndDtmbGFncyA9IExFRF9SRVRBSU5fQVRfU0hVVERPV047CiYjNDM7CWxlZF9jZGV2LSZndDticmlnaHRuZXNzX3NldF9ibG9ja2luZyA9IHl0OTIxeF9jbGVkX2JyaWdodG5lc3Nfc2V0X2Jsb2NraW5nOwomIzQzOwlsZWRfY2Rldi0mZ3Q7Ymxpbmtfc2V0ID0geXQ5MjF4X2NsZWRfYmxpbmtfc2V0OwomIzQzOyNpZmRlZiBDT05GSUdfTEVEU19UUklHR0VSUwomIzQzOwlsZWRfY2Rldi0mZ3Q7aHdfY29udHJvbF90cmlnZ2VyID0gJiMzNDtuZXRkZXYmIzM0OzsKJiM0MzsJbGVkX2NkZXYtJmd0O2h3X2NvbnRyb2xfZ2V0X2RldmljZSA9IHl0OTIxeF9jbGVkX2h3X2NvbnRyb2xfZ2V0X2RldmljZTsKJiM0MzsJbGVkX2NkZXYtJmd0O2h3X2NvbnRyb2xfaXNfc3VwcG9ydGVkID0geXQ5MjF4X2NsZWRfaHdfY29udHJvbF9pc19zdXBwb3J0ZWQ7CiYjNDM7CWxlZF9jZGV2LSZndDtod19jb250cm9sX2dldCA9IHl0OTIxeF9jbGVkX2h3X2NvbnRyb2xfZ2V0OwomIzQzOwlsZWRfY2Rldi0mZ3Q7aHdfY29udHJvbF9zZXQgPSB5dDkyMXhfY2xlZF9od19jb250cm9sX3NldDsKJiM0MzsjZW5kaWYKJiM0MzsKJiM0MzsJc25wcmludGYobmFtZSwgc2l6ZW9mKG5hbWUpLCBZVDkyMVhfTkFNRSAmIzM0Oy0ldTolMDJkOiUwMnUmIzM0OywKJiM0MzsJCSBwcml2LSZndDtkcy5pbmRleCwgcG9ydCwgZ3JvdXApOwomIzQzOwlpbml0X2RhdGEgPSAodHlwZW9mKGluaXRfZGF0YSkpewomIzQzOwkJLmZ3bm9kZSA9IGZ3bm9kZSwKJiM0MzsJCS5kZWZhdWx0X2xhYmVsID0gJiMzNDs6cG9ydCYjMzQ7LAomIzQzOwkJLmRldmljZW5hbWUgPSBuYW1lLAomIzQzOwkJLmRldm5hbWVfbWFuZGF0b3J5ID0gdHJ1ZSwKJiM0MzsJfTsKJiM0MzsJcmVzID0gZGV2bV9sZWRfY2xhc3NkZXZfcmVnaXN0ZXJfZXh0KGRldiwgbGVkX2NkZXYsICZhbXA7aW5pdF9kYXRhKTsKJiM0MzsJaWYgKHJlcykKJiM0MzsJCWdvdG8gZXJyOwomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0MzsKJiM0MztlcnI6CiYjNDM7CXJldCA9IHJlczsKJiM0MzsKJiM0MzsJbXV0ZXhfbG9jaygmYW1wO3ByaXYtJmd0O3JlZ19sb2NrKTsKJiM0MzsJaWYgKHBwLSZndDtsZWRzW2dyb3VwXSkgewomIzQzOwkJaWYgKGZvcmNlX2hpZ2ggfHwgZm9yY2VfbG93KSB7CiYjNDM7CQkJcmVzID0geXQ5MjF4X3JlZ193cml0ZShwcml2LCBZVDkyMVhfTEVEX1BBUl9JTlYsIHZhbCk7CiYjNDM7CQkJaWYgKHJlcykKJiM0MzsJCQkJZGV2X3dhcm4oZGV2LAomIzQzOwkJCQkJICYjMzQ7RmFpbGVkIHRvIHJldm9rZSBpbml0aWFsaXphdGlvbiBmb3IgTEVEICUwMmQ6JTAydVxuJiMzNDssCiYjNDM7CQkJCQkgcG9ydCwgZ3JvdXApOwomIzQzOwkJfQomIzQzOwomIzQzOwkJcHAtJmd0O2xlZHNbZ3JvdXBdID0gTlVMTDsKJiM0MzsJfQomIzQzOwltdXRleF91bmxvY2soJmFtcDtwcml2LSZndDtyZWdfbG9jayk7CiYjNDM7CiYjNDM7CWRldm1fa2ZyZWUoZGV2LCBsZWQpOwomIzQzOwlyZXR1cm4gcmV0OwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCB5dDkyMXhfbGVkc19yZW1vdmVfcG9ydChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIGludCBwb3J0KQomIzQzO3sKJiM0MzsJc3RydWN0IHl0OTIxeF9wb3J0ICpwcCA9ICZhbXA7cHJpdi0mZ3Q7cG9ydHNbcG9ydF07CiYjNDM7CXN0cnVjdCBkZXZpY2UgKmRldiA9IHRvX2RldmljZShwcml2KTsKJiM0MzsJYm9vbCBoYXNfbGVkcyA9IGZhbHNlOwomIzQzOwomIzQzOwlmb3IgKGludCBncm91cCA9IDA7IGdyb3VwICZsdDsgWVQ5MjFYX0xFRF9HUk9VUF9OVU07IGdyb3VwJiM0MzsmIzQzOykgewomIzQzOwkJc3RydWN0IHl0OTIxeF9sZWQgKmxlZCA9IHBwLSZndDtsZWRzW2dyb3VwXTsKJiM0MzsKJiM0MzsJCWlmIChsZWQpIHsKJiM0MzsJCQlkZXZtX2xlZF9jbGFzc2Rldl91bnJlZ2lzdGVyKGRldiwgJmFtcDtsZWQtJmd0O2NkZXYpOwomIzQzOwkJCWhhc19sZWRzID0gdHJ1ZTsKJiM0MzsJCX0KJiM0MzsJfQomIzQzOwomIzQzOwlpZiAoIWhhc19sZWRzKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwkvKiBOb3cgbm8gb25lIGNhbiBhY2Nlc3MgdGhlIExFRCBjb250cm9sIGJsb2NrcywgZnJlZSB0aGVtIHdpdGhvdXQKJiM0MzsJICogaG9sZGluZyB0aGUgbG9jay4KJiM0MzsJICovCiYjNDM7CWZvciAoaW50IGdyb3VwID0gMDsgZ3JvdXAgJmx0OyBZVDkyMVhfTEVEX0dST1VQX05VTTsgZ3JvdXAmIzQzOyYjNDM7KSB7CiYjNDM7CQlzdHJ1Y3QgeXQ5MjF4X2xlZCAqbGVkID0gcHAtJmd0O2xlZHNbZ3JvdXBdOwomIzQzOwomIzQzOwkJaWYgKGxlZCkgewomIzQzOwkJCXBwLSZndDtsZWRzW2dyb3VwXSA9IE5VTEw7CiYjNDM7CQkJZGV2bV9rZnJlZShkZXYsIGxlZCk7CiYjNDM7CQl9CiYjNDM7CX0KJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCB5dDkyMXhfbGVkc19zZXR1cF9wb3J0KHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgaW50IHBvcnQpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSB0b19kZXZpY2UocHJpdik7CiYjNDM7CXN0cnVjdCBkc2Ffc3dpdGNoICpkcyA9ICZhbXA7cHJpdi0mZ3Q7ZHM7CiYjNDM7CXN0cnVjdCBkZXZpY2Vfbm9kZSAqbGVkc19ucDsKJiM0MzsJc3RydWN0IGRzYV9wb3J0ICpkcDsKJiM0MzsKJiM0MzsJZHAgPSBkc2FfdG9fcG9ydChkcywgcG9ydCk7CiYjNDM7CWxlZHNfbnAgPSBvZl9nZXRfY2hpbGRfYnlfbmFtZShkcC0mZ3Q7ZG4sICYjMzQ7bGVkcyYjMzQ7KTsKJiM0MzsJaWYgKCFsZWRzX25wKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CWlmIChwb3J0ICZndDs9IFlUOTIxWF9MRURfUE9SVF9OVU0pIHsKJiM0MzsJCWRldl9lcnIoZGV2LCAmIzM0O0Nhbm5vdCBjb25maWd1cmUgTEVEcyBmb3IgcG9ydCAlZFxuJiMzNDssIHBvcnQpOwomIzQzOwkJb2Zfbm9kZV9wdXQobGVkc19ucCk7CiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJfQomIzQzOwomIzQzOwlmb3JfZWFjaF9jaGlsZF9vZl9ub2RlX3Njb3BlZChsZWRzX25wLCBsZWRfbnApIHsKJiM0MzsJCXl0OTIxeF9sZWRfc2V0dXAocHJpdiwgcG9ydCwgb2ZfZndub2RlX2hhbmRsZShsZWRfbnApKTsKJiM0MzsJCS8qIEFsbG93IHBhcnRpYWwgY29uZmlndXJhdGlvbjogTEVEcyBhcmUgb3B0aW9uYWwgKi8KJiM0MzsJfQomIzQzOwomIzQzOwlvZl9ub2RlX3B1dChsZWRzX25wKTsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3ZvaWQgeXQ5MjF4X2xlZHNfcmVtb3ZlKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdikKJiM0Mzt7CiYjNDM7CWZvciAoaW50IHBvcnQgPSAwOyBwb3J0ICZsdDsgWVQ5MjFYX0xFRF9QT1JUX05VTTsgcG9ydCYjNDM7JiM0MzspCiYjNDM7CQl5dDkyMXhfbGVkc19yZW1vdmVfcG9ydChwcml2LCBwb3J0KTsKJiM0Mzt9CiYjNDM7CiYjNDM7aW50IHl0OTIxeF9sZWRzX3NldHVwKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBkc2Ffc3dpdGNoICpkcyA9ICZhbXA7cHJpdi0mZ3Q7ZHM7CiYjNDM7CXN0cnVjdCBkc2FfcG9ydCAqZHA7CiYjNDM7CiYjNDM7CS8qIExFRHMgYXJlIGFsd2F5cyBlbmFibGVkLiBUaGVyZSBpcyBubyB3YXkgdG8gZGlzYWJsZSB0aGVtIGFsdG9nZXRoZXIKJiM0MzsJICogKGFzIGZhciBhcyBJIGtub3cpLgomIzQzOwkgKi8KJiM0MzsKJiM0MzsJZHNhX3N3aXRjaF9mb3JfZWFjaF9wb3J0KGRwLCBkcykgewomIzQzOwkJaW50IHBvcnQgPSBkcC0mZ3Q7aW5kZXg7CiYjNDM7CiYjNDM7CQlpZiAoIWRwLSZndDtkbikKJiM0MzsJCQljb250aW51ZTsKJiM0MzsKJiM0MzsJCXl0OTIxeF9sZWRzX3NldHVwX3BvcnQocHJpdiwgcG9ydCk7CiYjNDM7CQkvKiBBbGxvdyBwYXJ0aWFsIGNvbmZpZ3VyYXRpb246IExFRHMgYXJlIG9wdGlvbmFsICovCiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9sZWRzLmggYi9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2xlZHMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwLi4zYzM2NDI5ODhhYzc3Ci0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9sZWRzLmgKQEAgLTAsMCAmIzQzOzEsMTIxIEBACiYjNDM7LyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb3ItbGF0ZXIgKi8KJiM0MzsvKgomIzQzOyAqIENvcHlyaWdodCAoYykgMjAyNiBEYXZpZCBZYW5nCiYjNDM7ICovCiYjNDM7CiYjNDM7I2lmbmRlZiBfWVRfTEVEU19ICiYjNDM7I2RlZmluZSBfWVRfTEVEU19ICiYjNDM7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2JpdGZpZWxkLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2JpdHMuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgva2NvbmZpZy5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9sZWRzLmgmZ3Q7CiYjNDM7CiYjNDM7I2RlZmluZSBZVDkyMVhfTEVEX0NUUkwJCQkweGQwMDAwCiYjNDM7I2RlZmluZSAgWVQ5MjFYX0xFRF9DVFJMX1VOSwkJCUJJVCgyMSkKJiM0MzsjZGVmaW5lICBZVDkyMVhfTEVEX0NUUkxfTE9PUERFVEVDVF9CTElOS19NCUdFTk1BU0soMjAsIDE5KQkvKiBjeWNsZSA9IDUxMiAqIHggbXMgKi8KJiM0MzsjZGVmaW5lICAgWVQ5MjFYX0xFRF9DVFJMX0xPT1BERVRFQ1RfQkxJTksoeCkJCUZJRUxEX1BSRVAoWVQ5MjFYX0xFRF9DVFJMX0xPT1BERVRFQ1RfQkxJTktfTSwgKHgpKQomIzQzOyNkZWZpbmUgIFlUOTIxWF9MRURfQ1RSTF9QT1JUX05VTV9NCQlHRU5NQVNLKDE2LCAxMykKJiM0MzsjZGVmaW5lICAgWVQ5MjFYX0xFRF9DVFJMX1BPUlRfTlVNKHgpCQkJRklFTERfUFJFUChZVDkyMVhfTEVEX0NUUkxfUE9SVF9OVU1fTSwgKHgpKQomIzQzOyNkZWZpbmUgIFlUOTIxWF9MRURfQ1RSTF9NT0RFX00JCQlHRU5NQVNLKDEsIDApCiYjNDM7I2RlZmluZSAgIFlUOTIxWF9MRURfQ1RSTF9NT0RFKHgpCQkJRklFTERfUFJFUChZVDkyMVhfTEVEX0NUUkxfTU9ERV9NLCAoeCkpCiYjNDM7I2RlZmluZSAgIFlUOTIxWF9MRURfQ1RSTF9NT0RFX1BBUkFMTEVMCQkJWVQ5MjFYX0xFRF9DVFJMX01PREUoMCkKJiM0MzsjZGVmaW5lICAgWVQ5MjFYX0xFRF9DVFJMX01PREVfU0VSSUFMCQkJWVQ5MjFYX0xFRF9DVFJMX01PREUoMikKJiM0MzsjZGVmaW5lIFlUOTIxWF9MRUQwX1BPUlRuKHBvcnQpCQkoMHhkMDAwNCAmIzQzOyA0ICogKHBvcnQpKQomIzQzOyNkZWZpbmUgIFlUOTIxWF9MRUQwX1BPUlRfQUNUX00JCQlHRU5NQVNLKDE3LCAwKQomIzQzOyNkZWZpbmUgIFlUOTIxWF9MRUQwX1BPUlRfQUNUX0xJTktfVFJZX0RJUwlCSVQoMTcpCiYjNDM7I2RlZmluZSAgWVQ5MjFYX0xFRDBfUE9SVF9BQ1RfQ09MTElTSU9OX0JMSU5LX0lOREkJQklUKDE2KQomIzQzOyNkZWZpbmUgWVQ5MjFYX0xFRDFfUE9SVG4ocG9ydCkJCSgweGQwMDQwICYjNDM7IDQgKiAocG9ydCkpCiYjNDM7I2RlZmluZSAgWVQ5MjFYX0xFRDFfUE9SVF9PVEhFUl9CTElOS19NCQlHRU5NQVNLKDMxLCAzMCkJLyogY3ljbGUgPSA1MTIgJmd0OyZndDsgeCBtcyAqLwomIzQzOyNkZWZpbmUgICBZVDkyMVhfTEVEMV9QT1JUX09USEVSX0JMSU5LKHgpCQlGSUVMRF9QUkVQKFlUOTIxWF9MRUQxX1BPUlRfT1RIRVJfQkxJTktfTSwgKHgpKQomIzQzOyNkZWZpbmUgIFlUOTIxWF9MRUQxX1BPUlRfRUVFX0JMSU5LX00JCUdFTk1BU0soMjksIDI4KQkvKiBjeWNsZSA9IDUxMiAmZ3Q7Jmd0OyB4IG1zICovCiYjNDM7I2RlZmluZSAgIFlUOTIxWF9MRUQxX1BPUlRfRUVFX0JMSU5LKHgpCQkJRklFTERfUFJFUChZVDkyMVhfTEVEMV9QT1JUX0VFRV9CTElOS19NLCAoeCkpCiYjNDM7I2RlZmluZSAgWVQ5MjFYX0xFRDFfUE9SVF9CTElOS19EVVRZX0NPTVAJQklUKDI3KQomIzQzOyNkZWZpbmUgIFlUOTIxWF9MRUQxX1BPUlRfQkxJTktfRFVUWV9NCQlHRU5NQVNLKDI2LCAyNSkKJiM0MzsjZGVmaW5lICAgWVQ5MjFYX0xFRDFfUE9SVF9CTElOS19EVVRZKHgpCQlGSUVMRF9QUkVQKFlUOTIxWF9MRUQxX1BPUlRfQkxJTktfRFVUWV9NLCAoeCkpCiYjNDM7I2RlZmluZSAgIFlUOTIxWF9MRUQxX1BPUlRfQkxJTktfRFVUWV8xXzIJCVlUOTIxWF9MRUQxX1BPUlRfQkxJTktfRFVUWSgwKQomIzQzOyNkZWZpbmUgICBZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFlfMl8zCQlZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFkoMSkKJiM0MzsjZGVmaW5lICAgWVQ5MjFYX0xFRDFfUE9SVF9CTElOS19EVVRZXzNfNAkJWVQ5MjFYX0xFRDFfUE9SVF9CTElOS19EVVRZKDIpCiYjNDM7I2RlZmluZSAgIFlUOTIxWF9MRUQxX1BPUlRfQkxJTktfRFVUWV81XzYJCVlUOTIxWF9MRUQxX1BPUlRfQkxJTktfRFVUWSgzKQomIzQzOyNkZWZpbmUgWVQ5MjFYX0xFRDJfUE9SVG4ocG9ydCkJCSgweGQwMDgwICYjNDM7IDQgKiAocG9ydCkpCiYjNDM7I2RlZmluZSAgWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW5fTShncnApCQlHRU5NQVNLKDQgKiAoZ3JwKSAmIzQzOyAxOSwgNCAqIChncnApICYjNDM7IDE4KQomIzQzOyNkZWZpbmUgICBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbihncnAsIHgpCQkoKHgpICZsdDsmbHQ7ICg0ICogKGdycCkgJiM0MzsgMTgpKQomIzQzOyNkZWZpbmUgICBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbl9ET05UQ0FSRShncnApCQlZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbihncnAsIDApCiYjNDM7I2RlZmluZSAgIFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuX0JMSU5LKGdycCkJCVlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuKGdycCwgMSkKJiM0MzsjZGVmaW5lICAgWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW5fT04oZ3JwKQkJWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW4oZ3JwLCAyKQomIzQzOyNkZWZpbmUgICBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbl9PRkYoZ3JwKQkJWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW4oZ3JwLCAzKQomIzQzOyNkZWZpbmUgIFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VfQkxJTktuX00oZ3JwKQlHRU5NQVNLKDQgKiAoZ3JwKSAmIzQzOyAxNywgNCAqIChncnApICYjNDM7IDE2KQkvKiBjeWNsZSA9IDUxMiAmbHQ7Jmx0OyB4IG1zICovCiYjNDM7I2RlZmluZSAgIFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VfQkxJTktuKGdycCwgeCkJCSgoeCkgJmx0OyZsdDsgKDQgKiAoZ3JwKSAmIzQzOyAxNikpCiYjNDM7I2RlZmluZSAgIFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VfQkxJTktuX09USEVSKGdycCkJWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRV9CTElOS24oZ3JwLCAzKQomIzQzOyNkZWZpbmUgIFlUOTIxWF9MRUR4X1BPUlRfQUNUX00JCQlHRU5NQVNLKDE1LCAwKQomIzQzOyNkZWZpbmUgIFlUOTIxWF9MRUR4X1BPUlRfQUNUX0VFRV9CTElOSwkJQklUKDE1KQomIzQzOyNkZWZpbmUgIFlUOTIxWF9MRUR4X1BPUlRfQUNUX0xPT1BERVRFQ1RfQkxJTksJQklUKDE0KQomIzQzOyNkZWZpbmUgIFlUOTIxWF9MRUR4X1BPUlRfQUNUX0FDVElWRV9CTElOSwlCSVQoMTMpCiYjNDM7I2RlZmluZSAgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfRFVQTEVYX0ZVTEwJQklUKDEyKQomIzQzOyNkZWZpbmUgIFlUOTIxWF9MRUR4X1BPUlRfQUNUX0RVUExFWF9IQUxGCUJJVCgxMSkKJiM0MzsjZGVmaW5lICBZVDkyMVhfTEVEeF9QT1JUX0FDVF9UWF9CTElOSwkJQklUKDEwKQomIzQzOyNkZWZpbmUgIFlUOTIxWF9MRUR4X1BPUlRfQUNUX1JYX0JMSU5LCQlCSVQoOSkKJiM0MzsjZGVmaW5lICBZVDkyMVhfTEVEeF9QT1JUX0FDVF9UWAkJQklUKDgpCiYjNDM7I2RlZmluZSAgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfUlgJCUJJVCg3KQomIzQzOyNkZWZpbmUgIFlUOTIxWF9MRUR4X1BPUlRfQUNUXzEwMDBNCQlCSVQoNikKJiM0MzsjZGVmaW5lICBZVDkyMVhfTEVEeF9QT1JUX0FDVF8xMDBNCQlCSVQoNSkKJiM0MzsjZGVmaW5lICBZVDkyMVhfTEVEeF9QT1JUX0FDVF8xME0JCUJJVCg0KQomIzQzOyNkZWZpbmUgIFlUOTIxWF9MRUR4X1BPUlRfQUNUX0NPTExJU0lPTl9CTElOSwlCSVQoMykKJiM0MzsjZGVmaW5lICBZVDkyMVhfTEVEeF9QT1JUX0FDVF8xMDAwTV9CTElOSwlCSVQoMikKJiM0MzsjZGVmaW5lICBZVDkyMVhfTEVEeF9QT1JUX0FDVF8xMDBNX0JMSU5LCUJJVCgxKQomIzQzOyNkZWZpbmUgIFlUOTIxWF9MRUR4X1BPUlRfQUNUXzEwTV9CTElOSwkJQklUKDApCiYjNDM7I2RlZmluZSBZVDkyMVhfTEVEX1NFUl9DVFJMCQkweGQwMTAwCiYjNDM7I2RlZmluZSAgWVQ5MjFYX0xFRF9TRVJfQ1RSTF9VTksJCUdFTk1BU0soMjUsIDI0KQkvKiBkZWxheT8gKi8KJiM0MzsjZGVmaW5lICBZVDkyMVhfTEVEX1NFUl9DVFJMX0FDVElWRV9MT1cJCUJJVCg0KQomIzQzOyNkZWZpbmUgIFlUOTIxWF9MRURfU0VSX0NUUkxfR1JQX05VTV9NCQlHRU5NQVNLKDEsIDApCS8qICNncnAgLSAxICovCiYjNDM7I2RlZmluZSAgIFlUOTIxWF9MRURfU0VSX0NUUkxfR1JQX05VTSh4KQkJRklFTERfUFJFUChZVDkyMVhfTEVEX1NFUl9DVFJMX0dSUF9OVU1fTSwgKHgpKQomIzQzOyNkZWZpbmUgWVQ5MjFYX0xFRF9TRVJfTUFQbm0oZ3JwLCBwb3J0KQkoMHhkMDEwNCAmIzQzOyA4ICogKDIgLSAoZ3JwKSkgJiM0MzsgNCAqICgocG9ydCkgLyA1KSkKJiM0MzsjZGVmaW5lICBZVDkyMVhfTEVEX1NFUl9NQVBfRFNUbl9QT1JUX00ocG9ydCkJR0VOTUFTSyg2ICogKChwb3J0KSAlIDUpICYjNDM7IDUsIDYgKiAoKHBvcnQpICUgNSkgJiM0MzsgMikKJiM0MzsjZGVmaW5lICAgWVQ5MjFYX0xFRF9TRVJfTUFQX0RTVG5fUE9SVChwb3J0LCB4KQkJKCh4KSAmbHQ7Jmx0OyAoNiAqICgocG9ydCkgJSA1KSAmIzQzOyAyKSkKJiM0MzsjZGVmaW5lICBZVDkyMVhfTEVEX1NFUl9NQVBfRFNUbl9MRURfTShwb3J0KQlHRU5NQVNLKDYgKiAoKHBvcnQpICUgNSkgJiM0MzsgMSwgNiAqICgocG9ydCkgJSA1KSkKJiM0MzsjZGVmaW5lICAgWVQ5MjFYX0xFRF9TRVJfTUFQX0RTVG5fTEVEKHBvcnQsIHgpCQkoKHgpICZsdDsmbHQ7ICg2ICogKChwb3J0KSAlIDUpKSkKJiM0MzsjZGVmaW5lIFlUOTIxWF9MRURfUEFSX1BPUlRTCQkweGQwMWM0CiYjNDM7I2RlZmluZSBZVDkyMVhfTEVEX1BBUl9JTlYJCTB4ZDAxYzgKJiM0MzsjZGVmaW5lICBZVDkyMVhfTEVEX1BBUl9JTlZfSU5Wbm0oZ3JwLCBwb3J0KQlCSVQoMTAgKiAoZ3JwKSAmIzQzOyAocG9ydCkpCiYjNDM7I2RlZmluZSBZVDkyMVhfTEVEX1BBUl9NQVBuKHBvcnQpCSgweGQwMWQwICYjNDM7IDQgKiAocG9ydCkpCiYjNDM7I2RlZmluZSAgWVQ5MjFYX0xFRF9QQVJfTUFQX0RTVG5fUE9SVF9NKGdycCkJR0VOTUFTSyg2ICogKGdycCkgJiM0MzsgNSwgNiAqIChncnApICYjNDM7IDIpCiYjNDM7I2RlZmluZSAgIFlUOTIxWF9MRURfUEFSX01BUF9EU1RuX1BPUlQoZ3JwLCB4KQkJKCh4KSAmbHQ7Jmx0OyAoNiAqIChncnApICYjNDM7IDIpKQomIzQzOyNkZWZpbmUgIFlUOTIxWF9MRURfUEFSX01BUF9EU1RuX0xFRF9NKGdycCkJR0VOTUFTSyg2ICogKGdycCkgJiM0MzsgMSwgNiAqIChncnApKQomIzQzOyNkZWZpbmUgICBZVDkyMVhfTEVEX1BBUl9NQVBfRFNUbl9MRUQoZ3JwLCB4KQkJKCh4KSAmbHQ7Jmx0OyAoNiAqIChncnApKSkKJiM0MzsKJiM0MzsjZGVmaW5lIFlUOTIxWF9MRURfQkxJTktfTUlOCTY0CiYjNDM7I2RlZmluZSBZVDkyMVhfTEVEX0JMSU5LX0RFRgk1MTIKJiM0MzsjZGVmaW5lIFlUOTIxWF9MRURfQkxJTktfTUFYCTIwNDgKJiM0MzsKJiM0MzsvKiAyICogbGNtKDIsIDMsIDQsIDYpICovCiYjNDM7I2RlZmluZSBZVDkyMVhfTEVEX0RVVFlfREVOT00JCTI0CiYjNDM7I2RlZmluZSBZVDkyMVhfTEVEX0RVVFkobm9tLCBkZW5vbSkJKFlUOTIxWF9MRURfRFVUWV9ERU5PTSAqIChub20pIC8gKGRlbm9tKSkKJiM0MzsKJiM0MztzdHJ1Y3QgeXQ5MjF4X3ByaXY7CiYjNDM7CiYjNDM7c3RydWN0IHl0OTIxeF9sZWQgewomIzQzOwlzdHJ1Y3QgbGVkX2NsYXNzZGV2IGNkZXY7CiYjNDM7CXN0cnVjdCB5dDkyMXhfcG9ydCAqcG9ydDsKJiM0MzsJdW5zaWduZWQgY2hhciBncm91cDsKJiM0MzsKJiM0MzsJYm9vbCB1c2VfY3ljbGU6MTsKJiM0MzsJYm9vbCB1c2VfZHV0eToxOwomIzQzO307CiYjNDM7CiYjNDM7I2lmIElTX0VOQUJMRUQoQ09ORklHX05FVF9EU0FfWVQ5MjFYX0xFRFMpCiYjNDM7CiYjNDM7dm9pZCB5dDkyMXhfbGVkc19yZW1vdmUoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2KTsKJiM0MztpbnQgeXQ5MjF4X2xlZHNfc2V0dXAoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2KTsKJiM0MzsKJiM0MzsjZWxzZQomIzQzOwomIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCB5dDkyMXhfbGVkc19yZW1vdmUoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2KSB7fQomIzQzOwomIzQzO3N0YXRpYyBpbmxpbmUgaW50IHl0OTIxeF9sZWRzX3NldHVwKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdikKJiM0Mzt7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MzsjZW5kaWYKJiM0MzsKJiM0MzsjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vc21pLmMgYi9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL3NtaS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAuLjE2NGMyNWVmNDk0YTEKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL3NtaS5jCkBAIC0wLDAgJiM0MzsxLDE1NyBAQAomIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9yLWxhdGVyCiYjNDM7LyoKJiM0MzsgKiBDb3B5cmlnaHQgKGMpIDIwMjYgRGF2aWQgWWFuZwomIzQzOyAqLwomIzQzOwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9pb3BvbGwuaCZndDsKJiM0MzsKJiM0MzsjaW5jbHVkZSAmIzM0O2NoaXAuaCYjMzQ7CiYjNDM7I2luY2x1ZGUgJiMzNDtzbWkuaCYjMzQ7CiYjNDM7CiYjNDM7I2RlZmluZSBZVDkyMVhfUE9MTF9TTEVFUF9VUwkxMDAwMAomIzQzOyNkZWZpbmUgWVQ5MjFYX1BPTExfVElNRU9VVF9VUwkxMDAwMDAKJiM0MzsKJiM0MztpbnQgeXQ5MjF4X3JlZ19yZWFkKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyICp2YWxwKQomIzQzO3sKJiM0MzsJV0FSTl9PTighbXV0ZXhfaXNfbG9ja2VkKCZhbXA7cHJpdi0mZ3Q7cmVnX2xvY2spKTsKJiM0MzsKJiM0MzsJcmV0dXJuIHByaXYtJmd0O3JlZ19vcHMtJmd0O3JlYWQocHJpdi0mZ3Q7cmVnX2N0eCwgcmVnLCB2YWxwKTsKJiM0Mzt9CiYjNDM7CiYjNDM7aW50IHl0OTIxeF9yZWdfd3JpdGUoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgdmFsKQomIzQzO3sKJiM0MzsJV0FSTl9PTighbXV0ZXhfaXNfbG9ja2VkKCZhbXA7cHJpdi0mZ3Q7cmVnX2xvY2spKTsKJiM0MzsKJiM0MzsJcmV0dXJuIHByaXYtJmd0O3JlZ19vcHMtJmd0O3dyaXRlKHByaXYtJmd0O3JlZ19jdHgsIHJlZywgdmFsKTsKJiM0Mzt9CiYjNDM7CiYjNDM7aW50IHl0OTIxeF9yZWdfd2FpdChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiBtYXNrLCB1MzIgKnZhbHApCiYjNDM7ewomIzQzOwl1MzIgdmFsOwomIzQzOwlpbnQgcmVzOwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwlyZXQgPSByZWFkX3BvbGxfdGltZW91dCh5dDkyMXhfcmVnX3JlYWQsIHJlcywKJiM0MzsJCQkJcmVzIHx8ICh2YWwgJmFtcDsgbWFzaykgPT0gKnZhbHAsCiYjNDM7CQkJCVlUOTIxWF9QT0xMX1NMRUVQX1VTLCBZVDkyMVhfUE9MTF9USU1FT1VUX1VTLAomIzQzOwkJCQlmYWxzZSwgcHJpdiwgcmVnLCAmYW1wO3ZhbCk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwlpZiAocmVzKQomIzQzOwkJcmV0dXJuIHJlczsKJiM0MzsKJiM0MzsJKnZhbHAgPSB2YWw7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztpbnQgeXQ5MjF4X3JlZ191cGRhdGVfYml0cyhzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiBtYXNrLCB1MzIgdmFsKQomIzQzO3sKJiM0MzsJaW50IHJlczsKJiM0MzsJdTMyIHY7CiYjNDM7CXUzMiB1OwomIzQzOwomIzQzOwlyZXMgPSB5dDkyMXhfcmVnX3JlYWQocHJpdiwgcmVnLCAmYW1wO3YpOwomIzQzOwlpZiAocmVzKQomIzQzOwkJcmV0dXJuIHJlczsKJiM0MzsKJiM0MzsJdSA9IHY7CiYjNDM7CXUgJmFtcDs9IH5tYXNrOwomIzQzOwl1IHw9IHZhbDsKJiM0MzsJaWYgKHUgPT0gdikKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwlyZXR1cm4geXQ5MjF4X3JlZ193cml0ZShwcml2LCByZWcsIHUpOwomIzQzO30KJiM0MzsKJiM0MztpbnQKJiM0Mzt5dDkyMXhfcmVnc19yZWFkKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyICp2YWxzLAomIzQzOwkJIHVuc2lnbmVkIGludCBudW1fcmVncykKJiM0Mzt7CiYjNDM7CWludCByZXM7CiYjNDM7CiYjNDM7CWZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpICZsdDsgbnVtX3JlZ3M7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQlyZXMgPSB5dDkyMXhfcmVnX3JlYWQocHJpdiwgcmVnICYjNDM7IDQgKiBpLCAmYW1wO3ZhbHNbaV0pOwomIzQzOwkJaWYgKHJlcykKJiM0MzsJCQlyZXR1cm4gcmVzOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztpbnQKJiM0Mzt5dDkyMXhfcmVnc193cml0ZShzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIGNvbnN0IHUzMiAqdmFscywKJiM0MzsJCSAgdW5zaWduZWQgaW50IG51bV9yZWdzKQomIzQzO3sKJiM0MzsJaW50IHJlczsKJiM0MzsKJiM0MzsJZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgJmx0OyBudW1fcmVnczsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCXJlcyA9IHl0OTIxeF9yZWdfd3JpdGUocHJpdiwgcmVnICYjNDM7IDQgKiBpLCB2YWxzW2ldKTsKJiM0MzsJCWlmIChyZXMpCiYjNDM7CQkJcmV0dXJuIHJlczsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7aW50CiYjNDM7eXQ5MjF4X3JlZ3NfdXBkYXRlX2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCBjb25zdCB1MzIgKm1hc2tzLAomIzQzOwkJCWNvbnN0IHUzMiAqdmFscywgdW5zaWduZWQgaW50IG51bV9yZWdzKQomIzQzO3sKJiM0MzsJYm9vbCBjaGFuZ2VkID0gZmFsc2U7CiYjNDM7CXUzMiB2c1s0XTsKJiM0MzsJaW50IHJlczsKJiM0MzsKJiM0MzsJaWYgKFdBUk5fT05fT05DRShudW1fcmVncyAmZ3Q7IEFSUkFZX1NJWkUodnMpKSkKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwomIzQzOwlyZXMgPSB5dDkyMXhfcmVnc19yZWFkKHByaXYsIHJlZywgdnMsIG51bV9yZWdzKTsKJiM0MzsJaWYgKHJlcykKJiM0MzsJCXJldHVybiByZXM7CiYjNDM7CiYjNDM7CWZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpICZsdDsgbnVtX3JlZ3M7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQl1MzIgdSA9IHZzW2ldOwomIzQzOwomIzQzOwkJdSAmYW1wOz0gfm1hc2tzW2ldOwomIzQzOwkJdSB8PSB2YWxzW2ldOwomIzQzOwkJaWYgKHUgIT0gdnNbaV0pCiYjNDM7CQkJY2hhbmdlZCA9IHRydWU7CiYjNDM7CiYjNDM7CQl2c1tpXSA9IHU7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKCFjaGFuZ2VkKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CXJldHVybiB5dDkyMXhfcmVnc193cml0ZShwcml2LCByZWcsIHZzLCBudW1fcmVncyk7CiYjNDM7fQomIzQzOwomIzQzO2ludAomIzQzO3l0OTIxeF9yZWdzX2NsZWFyX2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCBjb25zdCB1MzIgKm1hc2tzLAomIzQzOwkJICAgICAgIHVuc2lnbmVkIGludCBudW1fcmVncykKJiM0Mzt7CiYjNDM7CWJvb2wgY2hhbmdlZCA9IGZhbHNlOwomIzQzOwl1MzIgdnNbNF07CiYjNDM7CWludCByZXM7CiYjNDM7CiYjNDM7CWlmIChXQVJOX09OX09OQ0UobnVtX3JlZ3MgJmd0OyBBUlJBWV9TSVpFKHZzKSkpCiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsKJiM0MzsJcmVzID0geXQ5MjF4X3JlZ3NfcmVhZChwcml2LCByZWcsIHZzLCBudW1fcmVncyk7CiYjNDM7CWlmIChyZXMpCiYjNDM7CQlyZXR1cm4gcmVzOwomIzQzOwomIzQzOwlmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSAmbHQ7IG51bV9yZWdzOyBpJiM0MzsmIzQzOykgewomIzQzOwkJdTMyIHUgPSB2c1tpXTsKJiM0MzsKJiM0MzsJCXUgJmFtcDs9IH5tYXNrc1tpXTsKJiM0MzsJCWlmICh1ICE9IHZzW2ldKQomIzQzOwkJCWNoYW5nZWQgPSB0cnVlOwomIzQzOwomIzQzOwkJdnNbaV0gPSB1OwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmICghY2hhbmdlZCkKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwlyZXR1cm4geXQ5MjF4X3JlZ3Nfd3JpdGUocHJpdiwgcmVnLCB2cywgbnVtX3JlZ3MpOwomIzQzO30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vc21pLmggYi9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL3NtaS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAuLjI5OTVlOTFmM2IzZDEKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL3NtaS5oCkBAIC0wLDAgJiM0MzsxLDkyIEBACiYjNDM7LyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb3ItbGF0ZXIgKi8KJiM0MzsvKgomIzQzOyAqIENvcHlyaWdodCAoYykgMjAyNiBEYXZpZCBZYW5nCiYjNDM7ICovCiYjNDM7CiYjNDM7I2lmbmRlZiBfWVRfU01JX0gKJiM0MzsjZGVmaW5lIF9ZVF9TTUlfSAomIzQzOwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC90eXBlcy5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC93b3JkcGFydC5oJmd0OwomIzQzOwomIzQzO3N0cnVjdCB5dDkyMXhfcHJpdjsKJiM0MzsKJiM0MztpbnQgeXQ5MjF4X3JlZ19yZWFkKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyICp2YWxwKTsKJiM0MztpbnQgeXQ5MjF4X3JlZ193cml0ZShzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiB2YWwpOwomIzQzO2ludCB5dDkyMXhfcmVnX3dhaXQoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgbWFzaywgdTMyICp2YWxwKTsKJiM0MztpbnQgeXQ5MjF4X3JlZ191cGRhdGVfYml0cyhzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiBtYXNrLAomIzQzOwkJCSAgIHUzMiB2YWwpOwomIzQzOwomIzQzO3N0YXRpYyBpbmxpbmUgaW50CiYjNDM7eXQ5MjF4X3JlZ19zZXRfYml0cyhzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiBtYXNrKQomIzQzO3sKJiM0MzsJcmV0dXJuIHl0OTIxeF9yZWdfdXBkYXRlX2JpdHMocHJpdiwgcmVnLCAwLCBtYXNrKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGlubGluZSBpbnQKJiM0Mzt5dDkyMXhfcmVnX2NsZWFyX2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgbWFzaykKJiM0Mzt7CiYjNDM7CXJldHVybiB5dDkyMXhfcmVnX3VwZGF0ZV9iaXRzKHByaXYsIHJlZywgbWFzaywgMCk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbmxpbmUgaW50CiYjNDM7eXQ5MjF4X3JlZ190b2dnbGVfYml0cyhzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiBtYXNrLCBib29sIHNldCkKJiM0Mzt7CiYjNDM7CXJldHVybiB5dDkyMXhfcmVnX3VwZGF0ZV9iaXRzKHByaXYsIHJlZywgbWFzaywgIXNldCA/IDAgOiBtYXNrKTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyogU29tZSBtdWx0aS13b3JkIHJlZ2lzdGVycywgbGlrZSBWTEFObl9DVFJMLCBzaG91bGQgYmUgdHJlYXRlZCBhcyBhIHNpbmdsZQomIzQzOyAqIGxvbmcgcmVnaXN0ZXIuIE1vcmUgc3BlY2lmaWNhbGx5LCB3cml0ZXMgdG8gcGFydHMgb2YgaXRzIHdvcmRzIHdvbiYjMzk7dCBiZWNvbWUKJiM0MzsgKiB2aXNpYmxlLCB1bnRpbCB0aGUgbGFzdCB3b3JkIGlzIHdyaXR0ZW4uCiYjNDM7ICoKJiM0MzsgKiBIZXJlIHdlIHJlcXVpcmUgZnVsbCByZWFkIGFuZCB3cml0ZSBvcGVyYXRpb25zIG92ZXIgdGhlc2UgcmVnaXN0ZXJzIHRvCiYjNDM7ICogZWxpbWluYXRlIHBvdGVudGlhbCBpc3N1ZXMsIGFsdGhvdWdoIHBhcnRpYWwgcmVhZHMvd3JpdGVzIGFyZSBhbHNvIHBvc3NpYmxlLgomIzQzOyAqLwomIzQzOwomIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCB1cGRhdGVfY3RybHNfdW5hbGlnbmVkKHUzMiAqbG8sIHUzMiAqaGksIHU2NCBtYXNrLCB1NjQgdmFsKQomIzQzO3sKJiM0MzsJKmxvICZhbXA7PSB+bG93ZXJfMzJfYml0cyhtYXNrKTsKJiM0MzsJKmhpICZhbXA7PSB+dXBwZXJfMzJfYml0cyhtYXNrKTsKJiM0MzsJKmxvIHw9IGxvd2VyXzMyX2JpdHModmFsKTsKJiM0MzsJKmhpIHw9IHVwcGVyXzMyX2JpdHModmFsKTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyogeXQ5MjF4X3JlZ3NfKigpIGFyZSBleHBvcnRlZCBmb3IgbGlua2FnZSBvbmx5LiBEbyBub3QgdXNlIHRoZW0gZGlyZWN0bHkuIFVzZQomIzQzOyAqIHl0OTIxeF9yZWc2NF8qKCkgb3IgeXQ5MjF4X3JlZzk2XyooKSBpbnN0ZWFkLgomIzQzOyAqLwomIzQzOwomIzQzO2ludCB5dDkyMXhfcmVnc19yZWFkKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyICp2YWxzLAomIzQzOwkJICAgICB1bnNpZ25lZCBpbnQgbnVtX3JlZ3MpOwomIzQzO2ludCB5dDkyMXhfcmVnc193cml0ZShzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIGNvbnN0IHUzMiAqdmFscywKJiM0MzsJCSAgICAgIHVuc2lnbmVkIGludCBudW1fcmVncyk7CiYjNDM7aW50IHl0OTIxeF9yZWdzX3VwZGF0ZV9iaXRzKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgY29uc3QgdTMyICptYXNrcywKJiM0MzsJCQkgICAgY29uc3QgdTMyICp2YWxzLCB1bnNpZ25lZCBpbnQgbnVtX3JlZ3MpOwomIzQzO2ludCB5dDkyMXhfcmVnc19jbGVhcl9iaXRzKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgY29uc3QgdTMyICptYXNrcywKJiM0MzsJCQkgICB1bnNpZ25lZCBpbnQgbnVtX3JlZ3MpOwomIzQzOwomIzQzO3N0YXRpYyBpbmxpbmUgaW50CiYjNDM7eXQ5MjF4X3JlZzY0X3dyaXRlKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgY29uc3QgdTMyICp2YWxzKQomIzQzO3sKJiM0MzsJcmV0dXJuIHl0OTIxeF9yZWdzX3dyaXRlKHByaXYsIHJlZywgdmFscywgMik7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbmxpbmUgaW50CiYjNDM7eXQ5MjF4X3JlZzY0X3VwZGF0ZV9iaXRzKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgY29uc3QgdTMyICptYXNrcywKJiM0MzsJCQkgY29uc3QgdTMyICp2YWxzKQomIzQzO3sKJiM0MzsJcmV0dXJuIHl0OTIxeF9yZWdzX3VwZGF0ZV9iaXRzKHByaXYsIHJlZywgbWFza3MsIHZhbHMsIDIpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW5saW5lIGludAomIzQzO3l0OTIxeF9yZWc2NF9jbGVhcl9iaXRzKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgY29uc3QgdTMyICptYXNrcykKJiM0Mzt7CiYjNDM7CXJldHVybiB5dDkyMXhfcmVnc19jbGVhcl9iaXRzKHByaXYsIHJlZywgbWFza3MsIDIpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW5saW5lIGludAomIzQzO3l0OTIxeF9yZWc5Nl93cml0ZShzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIGNvbnN0IHUzMiAqdmFscykKJiM0Mzt7CiYjNDM7CXJldHVybiB5dDkyMXhfcmVnc193cml0ZShwcml2LCByZWcsIHZhbHMsIDMpOwomIzQzO30KJiM0MzsKJiM0MzsjZW5kaWYKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTYgMjA6Mzk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjE0NDgKCQkJCQkJCW91dHB1dDogMjQKCQkJCQkJCXRob3VnaHRzOiAxMDU3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKldvcnRoRnV6emluZyBBc3Nlc3NtZW50OiBNb3RvcmNvbW0gWVQ5MjE1IEV0aGVybmV0IFN3aXRjaCBEcml2ZXIqKgoKT2theSwgc28gdGhpcyBwYXRjaCBhZGRzIExFRCBzdXBwb3J0IGZvciB0aGUgTW90b3Jjb21tIFlUOTIxNSBldGhlcm5ldCBzd2l0Y2ggY2hpcCwgbW92aW5nIHRoZSBkcml2ZXIgYXJvdW5kIGFuZCBpbnRyb2R1Y2luZyBhIG5ldyBjb25maWcgb3B0aW9uLiBNeSBmaXJzdCB0aG91Z2h0IGlzOiBjYW4gSSBldmVuIHJlYWNoIHRoaXMgdGhpbmcgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCBsaWtlIFFFTVU/IERTQSBkcml2ZXJzLCBpbiBnZW5lcmFsLCBhcmUgZm9yIHBoeXNpY2FsIHN3aXRjaCBjaGlwcywgY29ubmVjdGVkIHZpYSBNRElPL1NQSS9JMkMsIHdoaWNoIG1ha2VzIG1lIGRvdWJ0IGl0LiBVbmxlc3MgdGhlcmUmIzM5O3MgKnNwZWNpZmljKiBRRU1VIGVtdWxhdGlvbiBmb3IgdGhpcyBwYXJ0aWN1bGFyIGNoaXAsIG9yIG1heWJlIGV2ZW4gYSBzb2Z0d2FyZS1lbXVsYXRlZCB2ZXJzaW9uIHdpdGhpbiB0aGUga2VybmVsLCBJJiMzOTttIG91dCBvZiBsdWNrLiBJJiMzOTtkIG5lZWQgdG8gY2hlY2sgZm9yIFFFTVUgZW11bGF0aW9uLCBidXQgd2l0aG91dCBzb3VyY2UsIGl0JiMzOTtzIGRpZmZpY3VsdC4gRFNBIGRyaXZlcnMgYXJlbiYjMzk7dCB1c3VhbGx5IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCgpDb3VsZCBJIGdldCBhcm91bmQgaXQgd2l0aCBhIGRldmljZSB0cmVlIG92ZXJsYXksIG9yIHVzZXItc3BhY2UgdG9vbHMgbGlrZSBgaTJjLXN0dWJgIG9yIGBtZGlvLW1vY2t1cGA/IGBtZGlvLW1vY2t1cGAgZXhpc3RzLCBidXQgaXQmIzM5O3MgcmVhbGx5IGZvciBQSFlzLCBzbyBJIGRvbiYjMzk7dCBrbm93IGlmIGl0JiMzOTtsbCBlbXVsYXRlIGEgZnVsbCBEU0Egc3dpdGNoLiBFdmVuIGlmIGl0ICpjb3VsZCosIGlzIGl0IHdvcnRoIGZ1enppbmc/IFRoZXNlIGhhcmR3YXJlLXNwZWNpZmljIGRyaXZlcnMgdGhhdCBuZWVkIHBoeXNpY2FsIGhhcmR3YXJl4oCURFNBIHN3aXRjaGVzLCBQSFlz4oCUdXN1YWxseSBhcmVuJiMzOTt0IGZ1enplZCB1bmxlc3MgdGhlcmUmIzM5O3Mgc29mdHdhcmUgZW11bGF0aW9uIG9yIHRoZXkmIzM5O3JlIHBhcnQgb2YgYSBtb2NrYWJsZSBnZW5lcmljIHN1YnN5c3RlbS4KCkxvb2tpbmcgYXQgdGhlIGluc3RydWN0aW9ucyBhZ2FpbiwgaXQgc2F5cyB0byByZXR1cm4gYFdvcnRoRnV6emluZz1mYWxzZWAgaWYgdGhlIGNvZGUgcGF0aCBpcyBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cywgZXZlbiB3aXRoIHNvZnR3YXJlIGVtdWxhdGlvbiwgb3IgaWYgaXQmIzM5O3MgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMuIFRoaXMgaXMgYSB2ZW5kb3Itc3BlY2lmaWMgRXRoZXJuZXQgc3dpdGNoIGNoaXAgZHJpdmVyLCBzbyBpdCBmYWxscyBpbnRvIHRoZSBmaXJzdCBjYXRlZ29yeS4gSXQmIzM5O3MgYW4gTURJTyBkZXZpY2UuIENhbiBNRElPIGRldmljZXMgYmUgZnV6emVkIGluIHN5emthbGxlcj8gU3l6a2FsbGVyIGhhcyBJMkMvU1BJIGZ1enppbmcsIGJ1dCBJIGRvbiYjMzk7dCByZWNhbGwgaXQgYmVpbmcgZm9yIE1ESU8gZGlyZWN0bHksIG9yIERTQSwgZm9yIHRoYXQgbWF0dGVyLgoKVGhlIHByb21wdCBzcGVjaWZpY2FsbHkgbWVudGlvbnMgY29kZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWwgZW52aXJvbm1lbnRzLiBUaGlzIGlzIGEgRFNBIHN3aXRjaCBkcml2ZXIgdGhhdCBuZWVkcyBhbiBNRElPIGJ1cyBhbmQgYSBkZXZpY2UgdHJlZSBzZXR1cCwgc28gaW4gYSBzdGFuZGFyZCBRRU1VIGVudmlyb25tZW50LCB3aXRob3V0ICpzcGVjaWZpYyogZW11bGF0aW9uLCBpdCYjMzk7cyBoaWdobHkgdW5saWtlbHkgdG8gYmUgcmVhY2hhYmxlLiBUaGVyZWZvcmUsIGBXb3J0aEZ1enppbmc9ZmFsc2VgLgoKTGV0IG1lIGp1c3QgZG91YmxlLWNoZWNrLCB0aG91Z2gsIHRvIGJlIGFic29sdXRlbHkgc3VyZS4gVGhpcyBkcml2ZXIgcmVnaXN0ZXJzIGl0c2VsZiBhcyBhbiBNRElPIGRldmljZSBkcml2ZXI6IGBtZGlvX2RyaXZlcl9yZWdpc3RlcigmYW1wO3l0OTIxeF9tZGlvX2RyaXZlcilgLiBGb3IgdGhlIGRyaXZlciB0byBwcm9iZSwgYW4gTURJTyBkZXZpY2Ugd2l0aCBhIG1hdGNoaW5nIElEIG9yIGRldmljZSB0cmVlIGNvbXBhdGlibGUgc3RyaW5nIG5lZWRzIHRvIGJlIHByZXNlbnQuIEluIFFFTVUsIHVubGVzcyB0aGVyZSYjMzk7cyBhIHNwZWNpZmljIGJvYXJkIGluc3RhbnRpYXRpb24sIGl0IHdvbiYjMzk7dCBwcm9iZS4gV2hpbGUgc3l6a2FsbGVyIGNhbiBpbmplY3QgZGV2aWNlIHRyZWUgbm9kZXMsIHRoZSBkcml2ZXIgd291bGQgc3RpbGwgdHJ5IHRvIHJlYWQvd3JpdGUgTURJTyByZWdpc3RlcnMuIElmIHRoZXJlJiMzOTtzIG5vIGhhcmR3YXJlLCB0aGUgcHJvYmUgd2lsbCBmYWlsIGVhcmx5LCBsaWtlbHkgYnkgY2hlY2tpbmcgYSBoYXJkd2FyZSBJRC4gTGV0JiMzOTtzIGxvb2sgYXQgYHl0OTIxeF9tZGlvX3Byb2JlYCBqdXN0IHRvIGRvdWJsZSBjaGVjaywgdGhvdWdoIEkgZG9uJiMzOTt0IGhhdmUgdGhlIHNvdXJjZSBmb3IgdGhhdCBhdCB0aGUgbW9tZW50LiBCdXQgdGhlIGNvbmNsdXNpb24gcmVtYWluczogbm90IHdvcnRoIGZ1enppbmcsIGJhc2VkIG9uIHRoaXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTYgMjA6Mzk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7eXQ5MjF4X21kaW9fcHJvYmUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM9NDY4Mj1zdGF0aWMgdm9pZCB5dDkyMXhfbWRpb19yZW1vdmUoc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2KVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTQ3MTctXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzo0NzE4OnN0YXRpYyBpbnQgeXQ5MjF4X21kaW9fcHJvYmUoc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2KVxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNDcxOS17XG4tLVxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM9NDc3Mj1zdGF0aWMgc3RydWN0IG1kaW9fZHJpdmVyIHl0OTIxeF9tZGlvX2RyaXZlciA9IHtcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjQ3NzM6XHQucHJvYmUgPSB5dDkyMXhfbWRpb19wcm9iZSxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTQ3NzQtXHQucmVtb3ZlID0geXQ5MjF4X21kaW9fcmVtb3ZlLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE2IDIwOjM5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIzNDQ5CgkJCQkJCQlvdXRwdXQ6IDQyCgkJCQkJCQl0aG91Z2h0czogMTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgdGhlIGB5dDkyMXhfbWRpb19wcm9iZWAgRnVuY3Rpb24qKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byBgeXQ5MjF4X21kaW9fcHJvYmVgLiBNeSBpbW1lZGlhdGUgZ29hbCBpcyB0byB1bmRlcnN0YW5kIGl0cyByb2xlIHdpdGhpbiB0aGUgYnJvYWRlciBmcmFtZXdvcmssIHByZXN1bWFibHkgcmVsYXRlZCB0byB0aGUgaW5pdGlhbGl6YXRpb24gYW5kIGludGVyYWN0aW9uIHdpdGggYW4gTURJTyAoTWFuYWdlbWVudCBEYXRhIElucHV0L091dHB1dCkgaW50ZXJmYWNlLCBsaWtlbHkgYXNzb2NpYXRlZCB3aXRoIGEgUEhZIG9yIG90aGVyIG5ldHdvcmsgZGV2aWNlIHdpdGhpbiBhIHN5c3RlbSBsZXZlcmFnaW5nIGEgWXQ5MjF4IGNoaXAuIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIGtleSBhc3BlY3RzOgoKKiAgICoqRGV2aWNlIFRyZWUgSW50ZXJhY3Rpb246KiogSG93IGRvZXMgdGhpcyBmdW5jdGlvbiB1dGlsaXplIHRoZSBEZXZpY2UgVHJlZSAob3IgZXF1aXZhbGVudCBjb25maWd1cmF0aW9uIG1lY2hhbmlzbSkgdG8gaWRlbnRpZnkgYW5kIGNvbmZpZ3VyZSB0aGUgc3BlY2lmaWMgTURJTyBjb250cm9sbGVyIGFuZCBhdHRhY2hlZCBQSFkocyk/IEkmIzM5O2xsIGJlIHNlYXJjaGluZyBmb3IgY2FsbHMgdG8gZnVuY3Rpb25zIGxpa2UgYG9mX21hdGNoX3RhYmxlYCwgYG9mX3Byb3BlcnR5X3JlYWRfKmAsIGFuZCB0aGUgbGlrZS4gVGhpcyB3aWxsIGJlIHRoZSBmb3VuZGF0aW9uYWwgaW5mb3JtYXRpb24uCiogICAqKlJlc291cmNlIEFsbG9jYXRpb246KiogV2hhdCByZXNvdXJjZXMgZG9lcyBpdCByZXF1ZXN0IGFuZCBtYW5hZ2U/IFNwZWNpZmljYWxseSwgSSYjMzk7bSBpbnRlcmVzdGVkIGluIG1lbW9yeSByZWdpb25zIChmb3IgTU1JTyBhY2Nlc3MpLCBpbnRlcnJ1cHQgbGluZXMsIGFuZCBwb3NzaWJseSBjbG9jayBjb25maWd1cmF0aW9ucy4gVGhpcyBpbmNsdWRlcyBob3cgaXQgaGFuZGxlcyBlcnJvciBjb25kaXRpb25zIHJlbGF0ZWQgdG8gcmVzb3VyY2UgYWxsb2NhdGlvbiwgYW5kIHdoYXQgaXQgZG9lcyBpbiBjYXNlIG9mIGZhaWx1cmVzLgoqICAgKipNRElPIENvbnRyb2xsZXIgSW5pdGlhbGl6YXRpb246KiogSSBuZWVkIHRvIGZpbmQgdGhlIHNwZWNpZmljIGluaXRpYWxpemF0aW9uIHJvdXRpbmVzIGZvciB0aGUgdW5kZXJseWluZyBNRElPIGNvbnRyb2xsZXIuIFRoaXMgbWlnaHQgaW52b2x2ZSBzZXR0aW5nIHVwIHRoZSBjbG9jayBmcmVxdWVuY3ksIGNvbmZpZ3VyaW5nIHRoZSBNRElPIGJ1cyBzcGVlZCwgYW5kIHBvdGVudGlhbGx5IGVuYWJsaW5nIHNwZWNpZmljIE1ESU8gZnVuY3Rpb25hbGl0aWVzIChsaWtlIGF1dG8tbmVnb3RpYXRpb24sIGV0Yy4pLiBJIGFudGljaXBhdGUgbG93LWxldmVsIHJlZ2lzdGVyIHdyaXRlcyBhdCBzb21lIHBvaW50LgoqICAgKipQSFkgRGV0ZWN0aW9uIGFuZCBDb25maWd1cmF0aW9uOioqIElzIHRoZXJlIFBIWSBkZXRlY3Rpb24gaW52b2x2ZWQ/IERvZXMgaXQgcHJvYmUgZm9yIHNwZWNpZmljIFBIWXMgb3IgdXNlIGEgZ2VuZXJpYyBhcHByb2FjaD8gV2hhdCBhcmUgdGhlIG1lY2hhbmlzbXMgZm9yIGNvbmZpZ3VyaW5nIHRoZSBkZXRlY3RlZCBQSFk/IFRoaXMgaXMgY3JpdGljYWwgZm9yIHVuZGVyc3RhbmRpbmcgdGhlIGRldmljZSYjMzk7cyBvcGVyYXRpb25hbCBjaGFyYWN0ZXJpc3RpY3MuIEkgZXhwZWN0IHRvIHNlZSByZWdpc3RlciBhY2Nlc3NlcywgYnV0IEkmIzM5O20gbG9va2luZyBmb3IgdGhlIG92ZXJhbGwgbG9naWMgdG8gc2VlIGhvdyB0aGUgc29mdHdhcmUgZGV0ZXJtaW5lcyB3aGV0aGVyIFBIWXMgYXJlIHByZXNlbnQgb3Igbm90LgoqICAgKipEcml2ZXIgUmVnaXN0cmF0aW9uOioqIEhvdyBkb2VzIHRoZSBkcml2ZXIgcmVnaXN0ZXIgaXRzZWxmIHdpdGggdGhlIGtlcm5lbCYjMzk7cyBNRElPIHN1YnN5c3RlbSAoaWYgYXBwbGljYWJsZSk/IEkmIzM5O2xsIGxvb2sgZm9yIHJlZ2lzdHJhdGlvbnMgb2YgYnVzIGRyaXZlcnMsIGRldmljZSBkcml2ZXJzLCBvciBhbnl0aGluZyByZWxhdGVkIHRvIHRoZSBrZXJuZWwmIzM5O3MgY29yZSBNRElPIEFQSS4gSSYjMzk7bSB0cnlpbmcgdG8gc2VlIGhvdyB0aGUgc3lzdGVtIHVuZGVyc3RhbmRzIHdoYXQgaXMgY29ubmVjdGVkLgoqICAgKipFcnJvciBIYW5kbGluZzoqKiBJdCB3aWxsIGJlIGltcG9ydGFudCB0byBjYXJlZnVsbHkgZXhhbWluZSB0aGUgZXJyb3IgY29uZGl0aW9ucyBhbmQgaGFuZGxpbmcgdGhyb3VnaG91dCB0aGUgZnVuY3Rpb24uIEFyZSB0aGVyZSByZXRyaWVzPyBGYWxsYmFja3M/IEdyYWNlZnVsIGVycm9yIHJlcG9ydGluZz8gSG93IGRvZXMgaXQgaGFuZGxlIGRldmljZS1zcGVjaWZpYyBpc3N1ZXM/IEkmIzM5O2xsIGJlIGFzc2Vzc2luZyB0aGUgcm9idXN0bmVzcyBvZiB0aGUgaW1wbGVtZW50YXRpb24uCgpJbiBlc3NlbmNlLCBJIG5lZWQgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiBob3cgdGhpcyBmdW5jdGlvbiBzZXRzIHVwIHRoZSBNRElPIGludGVyZmFjZSwgZGlzY292ZXJzIGFuZCBjb25maWd1cmVzIGFueSBjb25uZWN0ZWQgUEhZcywgYW5kIGludGVncmF0ZXMgd2l0aCB0aGUgcmVzdCBvZiB0aGUgc3lzdGVtLiBJJiMzOTttIHJlYWR5IHRvIGRpZyBpbnRvIHRoZSBjb2RlIGFuZCBzdGFydCBmaWd1cmluZyB0aGlzIG91dC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNiAyMDozOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNDcxOCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDs0NzE4Olx0c3RhdGljIGludCB5dDkyMXhfbWRpb19wcm9iZShzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYpXG40NzE5Olx0e1xuNDcyMDpcdFx0c3RydWN0IGRldmljZSAqZGV2ID0gXHUwMDI2bWRpb2Rldi1cdTAwM2VkZXY7XG40NzIxOlx0XHRzdHJ1Y3QgeXQ5MjF4X3JlZ19tZGlvICptZGlvO1xuNDcyMjpcdFx0c3RydWN0IHl0OTIxeF9wcml2ICpwcml2O1xuNDcyMzpcdFx0c3RydWN0IGRzYV9zd2l0Y2ggKmRzO1xuNDcyNDpcdFxuNDcyNTpcdFx0cHJpdiA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZigqcHJpdiksIEdGUF9LRVJORUwpO1xuNDcyNjpcdFx0aWYgKCFwcml2KVxuNDcyNzpcdFx0XHRyZXR1cm4gLUVOT01FTTtcbjQ3Mjg6XHRcbjQ3Mjk6XHRcdG1kaW8gPSBkZXZtX2t6YWxsb2MoZGV2LCBzaXplb2YoKm1kaW8pLCBHRlBfS0VSTkVMKTtcbjQ3MzA6XHRcdGlmICghbWRpbylcbjQ3MzE6XHRcdFx0cmV0dXJuIC1FTk9NRU07XG40NzMyOlx0XG40NzMzOlx0XHRtZGlvLVx1MDAzZWJ1cyA9IG1kaW9kZXYtXHUwMDNlYnVzO1xuNDczNDpcdFx0bWRpby1cdTAwM2VhZGRyID0gbWRpb2Rldi1cdTAwM2VhZGRyO1xuNDczNTpcdFx0bWRpby1cdTAwM2Vzd2l0Y2hpZCA9IDA7XG40NzM2Olx0XG40NzM3Olx0XHRtdXRleF9pbml0KFx1MDAyNnByaXYtXHUwMDNlcmVnX2xvY2spO1xuNDczODpcdFxuNDczOTpcdFx0cHJpdi1cdTAwM2VyZWdfb3BzID0gXHUwMDI2eXQ5MjF4X3JlZ19vcHNfbWRpbztcbjQ3NDA6XHRcdHByaXYtXHUwMDNlcmVnX2N0eCA9IG1kaW87XG40NzQxOlx0XG40NzQyOlx0XHRmb3IgKHNpemVfdCBpID0gMDsgaSBcdTAwM2MgQVJSQVlfU0laRShwcml2LVx1MDAzZXBvcnRzKTsgaSYjNDM7JiM0MzspIHtcbjQ3NDM6XHRcdFx0c3RydWN0IHl0OTIxeF9wb3J0ICpwcCA9IFx1MDAyNnByaXYtXHUwMDNlcG9ydHNbaV07XG40NzQ0Olx0XG40NzQ1Olx0XHRcdHBwLVx1MDAzZWluZGV4ID0gaTtcbjQ3NDY6XHRcdFx0SU5JVF9ERUxBWUVEX1dPUksoXHUwMDI2cHAtXHUwMDNlbWliX3JlYWQsIHl0OTIxeF9wb2xsX21pYik7XG40NzQ3Olx0XHR9XG40NzQ4Olx0XG40NzQ5Olx0XHRkcyA9IFx1MDAyNnByaXYtXHUwMDNlZHM7XG40NzUwOlx0XHRkcy1cdTAwM2VkZXYgPSBkZXY7XG40NzUxOlx0XHRkcy1cdTAwM2Vhc3Npc3RlZF9sZWFybmluZ19vbl9jcHVfcG9ydCA9IHRydWU7XG40NzUyOlx0XHRkcy1cdTAwM2Vkc2NwX3ByaW9fbWFwcGluZ19pc19nbG9iYWwgPSB0cnVlO1xuNDc1MzpcdFx0ZHMtXHUwMDNlcHJpdiA9IHByaXY7XG40NzU0Olx0XHRkcy1cdTAwM2VvcHMgPSBcdTAwMjZ5dDkyMXhfZHNhX3N3aXRjaF9vcHM7XG40NzU1Olx0XHRkcy1cdTAwM2VhZ2VpbmdfdGltZV9taW4gPSAxICogNTAwMDtcbjQ3NTY6XHRcdGRzLVx1MDAzZWFnZWluZ190aW1lX21heCA9IFUxNl9NQVggKiA1MDAwO1xuNDc1NzpcdFx0ZHMtXHUwMDNlcGh5bGlua19tYWNfb3BzID0gXHUwMDI2eXQ5MjF4X3BoeWxpbmtfbWFjX29wcztcbjQ3NTg6XHRcdGRzLVx1MDAzZW51bV9sYWdfaWRzID0gWVQ5MjFYX0xBR19OVU07XG40NzU5Olx0XHRkcy1cdTAwM2VudW1fcG9ydHMgPSBZVDkyMVhfUE9SVF9OVU07XG40NzYwOlx0XG40NzYxOlx0XHRtZGlvZGV2X3NldF9kcnZkYXRhKG1kaW9kZXYsIHByaXYpO1xuNDc2MjpcdFxuNDc2MzpcdFx0cmV0dXJuIGRzYV9yZWdpc3Rlcl9zd2l0Y2goZHMpO1xuNDc2NDpcdH1cbjQ3NjU6XHRcbjQ3NjY6XHRzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCB5dDkyMXhfb2ZfbWF0Y2hbXSA9IHtcbjQ3Njc6XHRcdHsgLmNvbXBhdGlibGUgPSBcJiMzNDttb3RvcmNvbW0seXQ5MjE1XCYjMzQ7IH0sXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTYgMjA6Mzk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjQ5NDQKCQkJCQkJCW91dHB1dDogMjQKCQkJCQkJCXRob3VnaHRzOiAxMjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBEU0EgU3dpdGNoIFByb2JlKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHByb2JlIGZ1bmN0aW9uIGFuZCBpdCYjMzk7cyB0cnlpbmcgdG8gcmVnaXN0ZXIgYSBEU0Egc3dpdGNoLiBUaGF0JiMzOTtzIHRoZSBzdGFydGluZyBwb2ludC4gQnV0LCB0aGUgY3J1Y2lhbCBwaWVjZSBpcyB0aGF0IHRoaXMgcHJvYmUgcmVxdWlyZXMgYW4gTURJTyBkZXZpY2UgdG8gYmUgcHJlc2VudCwgYW5kIHNwZWNpZmljYWxseSwgb25lIHRoYXQgaWRlbnRpZmllcyBpdHNlbGYgd2l0aCB0aGUgJiMzNDttb3RvcmNvbW0seXQ5MjE1JiMzNDsgY29tcGF0aWJsZSBzdHJpbmcuCgpUaGUgaW1tZWRpYXRlIHByb2JsZW0gaXMgdGhhdCBTeXprYWxsZXIsIGluIGl0cyBjdXJyZW50IHN0YXRlLCBpc24mIzM5O3QgY2FwYWJsZSBvZiBlbXVsYXRpbmcgZWl0aGVyIE1ESU8gZGV2aWNlcyBvciBEU0Egc3dpdGNoZXMuIEkgY2FuIHNlZSBhIHBvdGVudGlhbCB3b3JrYXJvdW5kIOKAkyBpbmplY3RpbmcgYSBkZXZpY2UgdHJlZSBub2RlLCB0aGVvcmV0aWNhbGx5LCBjb3VsZCB0cmlnZ2VyIHRoZSBwcm9iZSBmdW5jdGlvbi4gQnV0IGV2ZW4gaWYgSSBnb3QgdGhhdCBmYXIsIHRoZSBkcml2ZXIgaXMgaW1tZWRpYXRlbHkgZ29pbmcgdG8gdHJ5IGFuZCB0YWxrIHRvIHRoZSBoYXJkd2FyZSB1c2luZyBNRElPLiBJJiMzOTttIHRoaW5raW5nIHNwZWNpZmljYWxseSBhYm91dCB0aGF0IGB5dDkyMXhfZHNhX3NldHVwYCBmdW5jdGlvbjsgaXQmIzM5O3MgY2FsbGVkIGJ5IGBkc2FfcmVnaXN0ZXJfc3dpdGNoYCwgc28gaXQmIzM5O3MgYSBrZXkgcGFydCBvZiB0aGUgc2V0dXAuIEkgbmVlZCB0byB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgdGhhdCBmdW5jdGlvbiB0byByZWFsbHkgdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgcmVsaWFuY2Ugb24gTURJTy4gTGV0JiMzOTtzIGRpZyBpbnRvIGB5dDkyMXhfZHNhX3NldHVwYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNiAyMDozOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt5dDkyMXhfZHNhX3NldHVwJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jPTQ0OTU9c3RhdGljIGludCB5dDkyMXhfY2hpcF9zZXR1cChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYpXG4tLVxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNDUzNi1cbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjQ1Mzc6c3RhdGljIGludCB5dDkyMXhfZHNhX3NldHVwKHN0cnVjdCBkc2Ffc3dpdGNoICpkcylcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTQ1Mzgte1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jPTQ1OTg9c3RhdGljIGNvbnN0IHN0cnVjdCBkc2Ffc3dpdGNoX29wcyB5dDkyMXhfZHNhX3N3aXRjaF9vcHMgPSB7XG4tLVxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNDY2OC1cdC8qIGNoaXAgKi9cbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjQ2Njk6XHQuc2V0dXBcdFx0XHQ9IHl0OTIxeF9kc2Ffc2V0dXAsXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy00NjcwLX07XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTYgMjA6Mzk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjU1OTkKCQkJCQkJCW91dHB1dDogNDIKCQkJCQkJCXRob3VnaHRzOiAxNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0OgoKKipEaXZpbmcgaW50byB0aGUgU2V0dXAgU2NyaXB0KioKCkFscmlnaHQsIHRpbWUgdG8gY3JhY2sgb3BlbiBgeXQ5MjF4X2RzYV9zZXR1cGAuIExldCYjMzk7cyBzZWUgd2hhdCB3ZSYjMzk7dmUgZ290IGhlcmUuIEkmIzM5O20gZXhwZWN0aW5nIHRoaXMgc2NyaXB0IHRvIGhhbmRsZSBhbGwgdGhlIGluaXRpYWwgY29uZmlndXJhdGlvbnMgYW5kIGdyb3VuZHdvcmsgZm9yIHRoZSBEU0Egc3lzdGVtLiBJJiMzOTtsbCBiZSBsb29raW5nIGNsb3NlbHkgYXQgaG93IGl0IGhhbmRsZXMga2V5IGdlbmVyYXRpb24sIGNlcnRpZmljYXRlIG1hbmFnZW1lbnQgKGlmIGFwcGxpY2FibGUpLCBhbmQgYW55IG5ldHdvcmsgc2V0dGluZ3Mgb3IgZGVwZW5kZW5jaWVzIGl0IHNldHMgdXAuIE15IGltbWVkaWF0ZSBmb2N1cyB3aWxsIGJlIG9uIHVuZGVyc3RhbmRpbmcgdGhlIGF1dG9tYXRpb24gZmxvdywgbG9va2luZyBmb3IgcG90ZW50aWFsIGFyZWFzIG9mIG9wdGltaXphdGlvbiwgYW5kIGlkZW50aWZ5aW5nIGFueSBhc3N1bXB0aW9ucyBvciBleHRlcm5hbCBkZXBlbmRlbmNpZXMgdGhpcyBzY3JpcHQgcmVsaWVzIG9uLiBGcm9tIGEgcXVpY2sgZ2xhbmNlIGF0IHRoZSBmaWxlIG5hbWUsICYjMzQ7c2V0dXAsJiMzNDsgSSBhbSBleHBlY3RpbmcgdGhpcyBzY3JpcHQgdG8gY292ZXIgZXZlcnl0aGluZyBmcm9tIHRoZSBzdGFydC4gSSYjMzk7bGwgbmVlZCB0byBrbm93IHdoZXRoZXIgdG8gbWFrZSBjaGFuZ2VzIHRvIHRoaXMgZmlsZSBvciBpZiBJIG5lZWQgdG8gbG9vayBmb3Igc29tZXRoaW5nIGRpZmZlcmVudC4gSSYjMzk7bGwgYmUgbG9va2luZyB0byBxdWlja2x5IGRldGVybWluZSBpZiBpdCYjMzk7cyB3ZWxsLWRvY3VtZW50ZWQgYW5kIGZvbGxvd3MgYmVzdCBwcmFjdGljZXM7IHJlYWRhYmlsaXR5IGlzIGtleS4gSSYjMzk7bGwgYmUgY2hlY2tpbmcgZm9yIHNlY3VyaXR5IHZ1bG5lcmFiaWxpdGllcyBhcyB3ZWxsLiBTaG91bGQgYmUgYW4gaW50ZXJlc3RpbmcgcmVhZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTYgMjA6Mzk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDQ1MzcsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7NDUzNzpcdHN0YXRpYyBpbnQgeXQ5MjF4X2RzYV9zZXR1cChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpXG40NTM4Olx0e1xuNDUzOTpcdFx0c3RydWN0IHl0OTIxeF9wcml2ICpwcml2ID0gdG9feXQ5MjF4X3ByaXYoZHMpO1xuNDU0MDpcdFx0c3RydWN0IGRldmljZSAqZGV2ID0gdG9fZGV2aWNlKHByaXYpO1xuNDU0MTpcdFx0c3RydWN0IGRldmljZV9ub2RlICpucCA9IGRldi1cdTAwM2VvZl9ub2RlO1xuNDU0MjpcdFx0c3RydWN0IGRldmljZV9ub2RlICpjaGlsZDtcbjQ1NDM6XHRcdGludCByZXM7XG40NTQ0Olx0XG40NTQ1Olx0XHRtdXRleF9sb2NrKFx1MDAyNnByaXYtXHUwMDNlcmVnX2xvY2spO1xuNDU0NjpcdFx0cmVzID0geXQ5MjF4X2NoaXBfcmVzZXQocHJpdik7XG40NTQ3Olx0XHRtdXRleF91bmxvY2soXHUwMDI2cHJpdi1cdTAwM2VyZWdfbG9jayk7XG40NTQ4Olx0XG40NTQ5Olx0XHRpZiAocmVzKVxuNDU1MDpcdFx0XHRyZXR1cm4gcmVzO1xuNDU1MTpcdFxuNDU1MjpcdFx0LyogUmVnaXN0ZXIgdGhlIGludGVybmFsIG1kaW8gYnVzLiBOb2RlcyBmb3IgaW50ZXJuYWwgcG9ydHMgc2hvdWxkIGhhdmVcbjQ1NTM6XHRcdCAqIHByb3BlciBwaHktaGFuZGxlIHBvaW50aW5nIHRvIHRoZWlyIFBIWXMuIE5vdCBlbmFibGluZyB0aGUgaW50ZXJuYWxcbjQ1NTQ6XHRcdCAqIGJ1cyBpcyBwb3NzaWJsZSwgdGhvdWdoIHByZXR0eSB3aXJlZCwgaWYgaW50ZXJuYWwgcG9ydHMgYXJlIG5vdCB1c2VkLlxuNDU1NTpcdFx0ICovXG40NTU2Olx0XHRjaGlsZCA9IG9mX2dldF9jaGlsZF9ieV9uYW1lKG5wLCBcJiMzNDttZGlvXCYjMzQ7KTtcbjQ1NTc6XHRcdGlmIChjaGlsZCkge1xuNDU1ODpcdFx0XHRyZXMgPSB5dDkyMXhfbWJ1c19pbnRfaW5pdChwcml2LCBjaGlsZCk7XG40NTU5Olx0XHRcdG9mX25vZGVfcHV0KGNoaWxkKTtcbjQ1NjA6XHRcdFx0aWYgKHJlcylcbjQ1NjE6XHRcdFx0XHRyZXR1cm4gcmVzO1xuNDU2MjpcdFx0fVxuNDU2MzpcdFxuNDU2NDpcdFx0LyogRXh0ZXJuYWwgbWRpbyBidXMgaXMgb3B0aW9uYWwgKi9cbjQ1NjU6XHRcdGNoaWxkID0gb2ZfZ2V0X2NoaWxkX2J5X25hbWUobnAsIFwmIzM0O21kaW8tZXh0ZXJuYWxcJiMzNDspO1xuNDU2NjpcdFx0aWYgKGNoaWxkKSB7XG40NTY3Olx0XHRcdHJlcyA9IHl0OTIxeF9tYnVzX2V4dF9pbml0KHByaXYsIGNoaWxkKTtcbjQ1Njg6XHRcdFx0b2Zfbm9kZV9wdXQoY2hpbGQpO1xuNDU2OTpcdFx0XHRpZiAocmVzKVxuNDU3MDpcdFx0XHRcdHJldHVybiByZXM7XG40NTcxOlx0XG40NTcyOlx0XHRcdGRldl9lcnIoZGV2LCBcJiMzNDtVbnRlc3RlZCBleHRlcm5hbCBtZGlvIGJ1c1xcblwmIzM0Oyk7XG40NTczOlx0XHRcdHJldHVybiAtRU5PREVWO1xuNDU3NDpcdFx0fVxuNDU3NTpcdFxuNDU3NjpcdFx0bXV0ZXhfbG9jayhcdTAwMjZwcml2LVx1MDAzZXJlZ19sb2NrKTtcbjQ1Nzc6XHRcdHJlcyA9IHl0OTIxeF9jaGlwX3NldHVwKHByaXYpO1xuNDU3ODpcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNnByaXYtXHUwMDNlcmVnX2xvY2spO1xuNDU3OTpcdFxuNDU4MDpcdFx0aWYgKHJlcylcbjQ1ODE6XHRcdFx0cmV0dXJuIHJlcztcbjQ1ODI6XHRcbjQ1ODM6XHQjaWYgSVNfRU5BQkxFRChDT05GSUdfTkVUX0RTQV9ZVDkyMVhfTEVEUylcbjQ1ODQ6XHRcdHJlcyA9IHl0OTIxeF9sZWRzX3NldHVwKHByaXYpO1xuNDU4NTpcdFx0aWYgKHJlcylcbjQ1ODY6XHRcdFx0ZGV2X3dhcm4oZGV2LCBcJiMzNDtGYWlsZWQgdG8gc2V0dXAgTEVEczogJWRcXG5cJiMzNDssIHJlcyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE2IDIwOjM5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI2NjUwCgkJCQkJCQlvdXRwdXQ6IDIzCgkJCQkJCQl0aG91Z2h0czogNDgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGFzc3VtaW5nIEkmIzM5O20gYWxyZWFkeSBxdWl0ZSBmYW1pbGlhciB3aXRoIGVtYmVkZGVkIHN5c3RlbXMgYW5kIGhhcmR3YXJlIGludGVyYWN0aW9uOgoKKipJbnZlc3RpZ2F0aW5nIHRoZSBgeXQ5MjF4X2NoaXBfcmVzZXRgIEZ1bmN0aW9uKioKClJpZ2h0LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBgeXQ5MjF4X2NoaXBfcmVzZXRgIGZ1bmN0aW9uLiBJdCBzZWVtcyBwcmV0dHkgb2J2aW91cyB0aGF0IGl0cyBwcmltYXJ5IHB1cnBvc2UgaXMgdG8sIHdlbGwsIHJlc2V0IHRoZSBoYXJkd2FyZSByZWxhdGVkIHRvIHRoYXQgYHl0OTIxeGAgY2hpcC4gVGhhdCYjMzk7cyB0aGUgZXhwZWN0ZWQgYmVoYXZpb3IsIGFueXdheS4gTXkgbWFpbiBjb25jZXJuIGlzIGdvaW5nIHRvIGJlIGhvdyBpdCBoYW5kbGVzIHRoZSBmdW5kYW1lbnRhbCBjaGVjazogd2hldGhlciB0aGUgaGFyZHdhcmUgaXMgYWN0dWFsbHkgKnByZXNlbnQqIGluIHRoZSBmaXJzdCBwbGFjZS4gSWYgdGhlIHN5c3RlbSYjMzk7cyBjb25maWd1cmVkIHdpdGhvdXQgdGhhdCBzcGVjaWZpYyBjaGlwLCBJIGRvbiYjMzk7dCB3YW50IHRoZSBmdW5jdGlvbiB0byBjcmFzaCwgYW5kIEkgbmVlZCB0byBrbm93IGhvdyBncmFjZWZ1bCB0aGUgZXJyb3IgaGFuZGxpbmcgaXMuIFRpbWUgdG8gZGl2ZSBpbnRvIHRoZSBjb2RlIGFuZCBzZWUgd2hhdCBoYXBwZW5zIHdoZW4gdGhlcmUmIzM5O3Mgbm8gcGh5c2ljYWwgaGFyZHdhcmUgdG8gdGFsayB0bzsgSSBuZWVkIHRvIHNlZSB3aGF0IHRoZSBmdW5jdGlvbiBkb2VzIHdpdGggdGhhdCBjYXNlLiBMZXQmIzM5O3Mgc3RhcnQgYnkgY2hlY2tpbmcgaXRzIGltcGxlbWVudGF0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNiAyMDozOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt5dDkyMXhfY2hpcF9yZXNldCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYz00MjI3PXN0YXRpYyBpbnQgeXQ5MjF4X2NoaXBfZGV0ZWN0KHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdilcbi0tXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy00MjkzLVxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6NDI5NDpzdGF0aWMgaW50IHl0OTIxeF9jaGlwX3Jlc2V0KHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdilcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTQyOTUte1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jPTQ1Mzc9c3RhdGljIGludCB5dDkyMXhfZHNhX3NldHVwKHN0cnVjdCBkc2Ffc3dpdGNoICpkcylcbi0tXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy00NTQ1LVx0bXV0ZXhfbG9jayhcdTAwMjZwcml2LVx1MDAzZXJlZ19sb2NrKTtcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjQ1NDY6XHRyZXMgPSB5dDkyMXhfY2hpcF9yZXNldChwcml2KTtcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTQ1NDctXHRtdXRleF91bmxvY2soXHUwMDI2cHJpdi1cdTAwM2VyZWdfbG9jayk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE2IDIwOjM5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI3MjEwCgkJCQkJCQlvdXRwdXQ6IDQyCgkJCQkJCQl0aG91Z2h0czogMTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGFzc3VtaW5nIEkmIzM5O20gZGVlcCBpbiBteSB0ZWNobmljYWwgZmllbGQ6CgoqKkFuYWx5emluZyB0aGUgQ2FsbDogYHl0OTIxeF9jaGlwX3Jlc2V0YCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuICYjMzQ7eXQ5MjF4X2NoaXBfcmVzZXQmIzM0Oy4uLiBJbW1lZGlhdGVseSwgdGhlIG5hbWUgaXRzZWxmIGlzIGludHJpZ3VpbmcuIFRoZSAmIzM0O3l0OTIxeCYjMzQ7IHN0cm9uZ2x5IHN1Z2dlc3RzIGEgc3BlY2lmaWMgY2hpcCwgbGlrZWx5IGEgY3VzdG9tIG9yIHNlbWktY3VzdG9tIGRlc2lnbiwgcGVyaGFwcyBhIFlvdHRhVGVrIHByb2R1Y3QsIGdpdmVuIHRoZSBuYW1pbmcgY29udmVudGlvbi4gVGhlIHVuZGVyc2NvcmUgc2VwYXJhdGluZyAmIzM0O2NoaXAmIzM0OyBhbmQgJiMzNDtyZXNldCYjMzQ7IGlzIHN0YW5kYXJkIHByYWN0aWNlLCBpbmRpY2F0aW5nIHRoaXMgaXMgYSBkZWRpY2F0ZWQgZnVuY3Rpb24gb3Igcm91dGluZSBzcGVjaWZpY2FsbHkgZm9yIHJlc2V0dGluZyB0aGF0IHBhcnRpY3VsYXIgaGFyZHdhcmUgY29tcG9uZW50LgoKU28sIG15IG1pbmQgaXMgYWxyZWFkeSBmb3JtdWxhdGluZyBxdWVzdGlvbnMuIFdoYXQga2luZCBvZiByZXNldCBhcmUgd2UgdGFsa2luZyBhYm91dD8gSXMgaXQgYSBoYXJkIHJlc2V0LCBhIHNvZnQgcmVzZXQsIGEgcmVnaXN0ZXItbGV2ZWwgcmVzZXQsIG9yIHNvbWV0aGluZyBlbHNlIGVudGlyZWx5PyBUaGUgc3BlY2lmaWNpdHkgb2YgdGhlIG5hbWUgaW1wbGllcyBhIG1vcmUgdGFyZ2V0ZWQgYXBwcm9hY2ggdGhhbiBhIGdlbmVyYWwgc3lzdGVtIHJlc2V0LCB3aGljaCBwaXF1ZXMgbXkgaW50ZXJlc3QuCgpJJiMzOTtsbCBuZWVkIHRvIGtub3cgdGhlIGNvbnRleHQ6IHdoZXJlIGlzIHRoaXMgZnVuY3Rpb24gY2FsbGVkIGZyb20/IFdoYXQgYXJlIHRoZSBwb3RlbnRpYWwgdHJpZ2dlciBjb25kaXRpb25zPyBXaGF0JiMzOTtzIHRoZSBlcnJvciBoYW5kbGluZyBsaWtlPyBBcmUgdGhlcmUgYW55IHByZWNvbmRpdGlvbnMgdGhhdCBuZWVkIHRvIGJlIG1ldCBiZWZvcmUgY2FsbGluZyBpdD8gSG93IGlzIHRoZSBjaGlwJiMzOTtzIHN0YXRlIGludGVycm9nYXRlZCBhZnRlciB0aGUgcmVzZXQgdG8gZW5zdXJlIGEgY2xlYW4gc2xhdGU/IFRoaXMgaXMgaW1wb3J0YW50LiBJZiB0aGUgY2hpcCBoYXMgYSBzdGF0ZSBtYWNoaW5lLCB0aGUgcmVzZXQgbXVzdCByZXR1cm4gaXQgdG8gYSBrbm93biBzdGF0ZTsgb3RoZXJ3aXNlLCB0aGVyZSB3aWxsIGJlIGlzc3Vlcy4KCkkmIzM5O20gbWVudGFsbHkgcHJlcGFyaW5nIHRvIGxvb2sgZm9yIHRoZSBmdW5jdGlvbiYjMzk7cyBkZWZpbml0aW9uLCB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGl0IHVzZXMsIGFuZCBhbnkgcmVsYXRlZCBkb2N1bWVudGF0aW9uLiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBjbHVlcyBhYm91dCB0aGUgaGFyZHdhcmUgcmVnaXN0ZXIgbWFwcGluZ3MsIGludGVycnVwdCBoYW5kbGluZywgYW5kIGFueSBwb3RlbnRpYWwgc2lkZSBlZmZlY3RzIG9uIG90aGVyIHBhcnRzIG9mIHRoZSBzeXN0ZW0uIEkgaGF2ZSBhbiBpbnRlcm5hbCBsaXN0IG9mIHBvdGVudGlhbCBnb3RjaGFzIHRvIHdhdGNoIGZvciwgbGlrZSBwb3dlciBzZXF1ZW5jaW5nIG9yIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgZHVyaW5nIHRoZSByZXNldCBwcm9jZXNzLiBUaGlzIGlzIGdvaW5nIHRvIGJlIGdvb2QuIExldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyBpbiB0aGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTYgMjA6Mzk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDQyOTQsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7NDI5NDpcdHN0YXRpYyBpbnQgeXQ5MjF4X2NoaXBfcmVzZXQoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2KVxuNDI5NTpcdHtcbjQyOTY6XHRcdHN0cnVjdCBkZXZpY2UgKmRldiA9IHRvX2RldmljZShwcml2KTtcbjQyOTc6XHRcdHUxNiBldGhfcF90YWc7XG40Mjk4Olx0XHR1MzIgdmFsO1xuNDI5OTpcdFx0aW50IHJlcztcbjQzMDA6XHRcbjQzMDE6XHRcdHJlcyA9IHl0OTIxeF9jaGlwX2RldGVjdChwcml2KTtcbjQzMDI6XHRcdGlmIChyZXMpXG40MzAzOlx0XHRcdHJldHVybiByZXM7XG40MzA0Olx0XG40MzA1Olx0XHQvKiBSZXNldCAqL1xuNDMwNjpcdFx0cmVzID0geXQ5MjF4X3JlZ193cml0ZShwcml2LCBZVDkyMVhfUlNULCBZVDkyMVhfUlNUX0hXKTtcbjQzMDc6XHRcdGlmIChyZXMpXG40MzA4Olx0XHRcdHJldHVybiByZXM7XG40MzA5Olx0XG40MzEwOlx0XHQvKiBSU1RfSFcgaXMgYWxtb3N0IHNhbWUgYXMgR1BJTyBoYXJkIHJlc2V0LCBzbyB3ZSBuZWVkIHRoaXMgZGVsYXkuICovXG40MzExOlx0XHRmc2xlZXAoWVQ5MjFYX1JTVF9ERUxBWV9VUyk7XG40MzEyOlx0XG40MzEzOlx0XHR2YWwgPSAwO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNiAyMDozOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNzk2MQoJCQkJCQkJb3V0cHV0OiA0MgoJCQkJCQkJdGhvdWdodHM6IDIxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIHRoZSBDaGlwIElEIERldGVjdGlvbiBQcm9jZWR1cmUqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGB5dDkyMXhfY2hpcF9kZXRlY3RgLiBUaGUgZnVuY3Rpb24mIzM5O3Mgam9iIGlzIHN0cmFpZ2h0Zm9yd2FyZDogZGV0ZXJtaW5lIHRoZSBzcGVjaWZpYyBzaWxpY29uIHJldmlzaW9uIG9mIHRoZSBgeXQ5MjF4YCBjaGlwIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGguIFRoZSBwcmltYXJ5IG1lY2hhbmlzbSBpcyBhIHJlZ2lzdGVyIHJlYWQuIFRoYXQmIzM5O3MgYSBjbGFzc2ljIGFuZCBlZmZpY2llbnQgYXBwcm9hY2guIEkmIzM5O20gYXNzdW1pbmcgdGhpcyByZWdpc3RlciBob2xkcyBhIHVuaXF1ZSBpZGVudGlmaWVyIG9yIGEgbWFza2FibGUgdmFsdWUgdGhhdCBhbGxvd3MgZGlmZmVyZW50aWF0aW9uIGJldHdlZW4gdmFyaW91cyBoYXJkd2FyZSByZXZpc2lvbnMuIEkmIzM5O2xsIG5lZWQgdG8gZGlnIGludG8gdGhlIGRhdGFzaGVldCBmb3IgdGhhdCBjaGlwIHRvIGZpZ3VyZSBvdXQgdGhlIGV4YWN0IHJlZ2lzdGVyIGFkZHJlc3MgYW5kIHRoZSBiaXQgZmllbGQgbGF5b3V0LiBJJiMzOTtsbCBhbHNvIHdhbnQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoZSBwb3NzaWJsZSB2YWx1ZXMuIEFyZSB3ZSBqdXN0IGlkZW50aWZ5aW5nIGRpZmZlcmVudCByZXZpc2lvbnMsIG9yIGFyZSB0aGVyZSBmdW5jdGlvbmFsIGRpZmZlcmVuY2VzIHRpZWQgdG8gdGhlc2UgSURzPyBJZiBzbywgSSYjMzk7bGwgaGF2ZSB0byBtYWtlIHN1cmUgdGhlIGNvZGUgaGFuZGxlcyB0aGVzZSB2YXJpYXRpb25zIGNvcnJlY3RseS4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgYW55IGVycm9yIGhhbmRsaW5nIGFyb3VuZCB0aGUgcmVnaXN0ZXIgcmVhZCBpdHNlbGYuIFdoYXQgaGFwcGVucyBpZiB0aGUgcmVhZCBmYWlscz8gRG9lcyBpdCByZXRyeSwgb3IgZG9lcyBpdCBhc3N1bWUgYSBkZWZhdWx0IElEPyBSb2J1c3QgZXJyb3IgaGFuZGxpbmcgaXMgY3J1Y2lhbC4gRmluYWxseSwgSSYjMzk7bGwgc2VlIGhvdyB0aGlzIGRldGVjdGlvbiByZXN1bHQgZmVlZHMgaW50byB0aGUgcmVzdCBvZiB0aGUgZHJpdmVyIGluaXRpYWxpemF0aW9uLiBBcmUgd2UgYnJhbmNoaW5nIGJhc2VkIG9uIHRoZSBkZXRlY3RlZCBJRD8gSWYgc28sIEkgd2FudCB0byBjb25maXJtIHRoZSBicmFuY2hpbmcgbG9naWMgaXMgc29saWQgYW5kIHRoZSBjb2RlIHBhdGhzIGZvciBlYWNoIHJldmlzaW9uIGFyZSBjb21wbGV0ZSBhbmQgdGVzdGVkLiBJJiMzOTttIGhvcGluZyBpdCYjMzk7cyB3ZWxsLXN0cnVjdHVyZWQgYW5kIGVhc3kgdG8gZm9sbG93LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNiAyMDozOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNDIyNywKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDs0MjI3Olx0c3RhdGljIGludCB5dDkyMXhfY2hpcF9kZXRlY3Qoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2KVxuNDIyODpcdHtcbjQyMjk6XHRcdHN0cnVjdCBkZXZpY2UgKmRldiA9IHRvX2RldmljZShwcml2KTtcbjQyMzA6XHRcdGNvbnN0IHN0cnVjdCB5dDkyMXhfaW5mbyAqaW5mbztcbjQyMzE6XHRcdHU4IGV4dG1vZGU7XG40MjMyOlx0XHR1MzIgY2hpcGlkO1xuNDIzMzpcdFx0dTMyIG1ham9yO1xuNDIzNDpcdFx0dTMyIG1vZGU7XG40MjM1Olx0XHR1MzIgdmFsO1xuNDIzNjpcdFx0aW50IHJlcztcbjQyMzc6XHRcbjQyMzg6XHRcdHJlcyA9IHl0OTIxeF9yZWdfcmVhZChwcml2LCBZVDkyMVhfQ0hJUF9JRCwgXHUwMDI2Y2hpcGlkKTtcbjQyMzk6XHRcdGlmIChyZXMpXG40MjQwOlx0XHRcdHJldHVybiByZXM7XG40MjQxOlx0XG40MjQyOlx0XHRtYWpvciA9IEZJRUxEX0dFVChZVDkyMVhfQ0hJUF9JRF9NQUpPUiwgY2hpcGlkKTtcbjQyNDM6XHRcbjQyNDQ6XHRcdGZvciAoaW5mbyA9IHl0OTIxeF9pbmZvczsgaW5mby1cdTAwM2VuYW1lOyBpbmZvJiM0MzsmIzQzOylcbjQyNDU6XHRcdFx0aWYgKGluZm8tXHUwMDNlbWFqb3IgPT0gbWFqb3IpXG40MjQ2Olx0XHRcdFx0YnJlYWs7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE2IDIwOjM5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI4NjM1CgkJCQkJCQlvdXRwdXQ6IDExOAoJCQkJCQkJdGhvdWdodHM6IDE5OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBQYXRjaCYjMzk7cyBGdXp6aW5nIFBvdGVudGlhbCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBGcm9tIHdoYXQgSSB1bmRlcnN0YW5kLCB0aGlzIHBhdGNoIGlzIGludHJvZHVjaW5nIExFRCBzdXBwb3J0IHNwZWNpZmljYWxseSBmb3IgYSBgeXQ5MjF4YCBoYXJkd2FyZSBzd2l0Y2ggY2hpcC4gU2luY2UgdGhlIGNvcmUgZnVuY3Rpb25hbGl0eSByZWxpZXMgb24gdGhpcyBzcGVjaWZpYyBoYXJkd2FyZSwgdGhlIGB5dDkyMXhfY2hpcF9kZXRlY3RgIGZ1bmN0aW9uIGlzIGdvaW5nIHRvIGZhaWwgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCBsaWtlIFFFTVUgb3IgR0NFIGJlY2F1c2UgdGhlIHVuZGVybHlpbmcgaGFyZHdhcmUgc2ltcGx5IHdvbiYjMzk7dCBiZSBwcmVzZW50LCBvciBhdCBsZWFzdCB3b24mIzM5O3QgcHJlc2VudCB3aXRoIGFuIGFwcHJvcHJpYXRlIElELiBDb25zZXF1ZW50bHksIHRoZSBkcml2ZXIgd2lsbCBmYWlsIGR1cmluZyB0aGUgcHJvYmUsIGFuZCB0aGUgTEVEIHNldHVwIGNvZGUsIHNwZWNpZmljYWxseSBgeXQ5MjF4X2xlZHNfc2V0dXBgLCB3aWxsIG5ldmVyIGJlIGV4ZWN1dGVkLgoKR2l2ZW4gbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgcHJvbXB0IOKAkyAmIzM0O1JldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnMgY29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4uLiYjMzQ7IOKAkyB0aGlzIGlzIGEgY2xlYXIgbWF0Y2guIFRoZSBpbnRyb2R1Y2VkIExFRCBzdXBwb3J0IGlzIGVudGlyZWx5IGNvbnRpbmdlbnQgb24gdGhlIHByZXNlbmNlIG9mIHBoeXNpY2FsIGhhcmR3YXJlLCBhbmQgdGh1cywgdW5yZWFjaGFibGUgaW4gYSB2aXJ0dWFsaXplZCBzZXR0aW5nLiBUaGVyZSYjMzk7cyBubyB3YXkgdG8gZW11bGF0ZSBpdCByZWxpYWJseSwgYW5kIG5vIGFtb3VudCBvZiBzb2Z0d2FyZSB0cmlja2VyeSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pIHdpbGwgY2hhbmdlIHRoYXQuIFRoZXJlZm9yZSwgSSB3aWxsIGNvbmZpZGVudGx5IHNldCBgV29ydGhGdXp6aW5nPWZhbHNlYC4gVGhpcyBwYXRjaCBpcyBpcnJlbGV2YW50IGZvciBmdXp6aW5nIGluIHZpcnR1YWwgZW52aXJvbm1lbnRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNiAyMDozOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFtdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgTEVEIHN1cHBvcnQgZm9yIHRoZSBNb3RvcmNvbW0gWVQ5MjE1IGV0aGVybmV0IHN3aXRjaCBjaGlwIChhIERTQSBkcml2ZXIpLiBUaGlzIGlzIGEgaGFyZHdhcmUtc3BlY2lmaWMgZHJpdmVyIHRoYXQgY29tbXVuaWNhdGVzIHdpdGggYSBwaHlzaWNhbCBjaGlwIHZpYSBNRElPLiBTaW5jZSB0aGVyZSBpcyBubyBzb2Z0d2FyZSBlbXVsYXRpb24gZm9yIHRoaXMgc3BlY2lmaWMgc3dpdGNoIGNoaXAgaW4gc3RhbmRhcmQgUUVNVS92aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMsIHRoZSBkcml2ZXIgd2lsbCBmYWlsIHRvIHByb2JlIChlLmcuLCBkdXJpbmcgY2hpcCBJRCBkZXRlY3Rpb24pLCBhbmQgdGhlIG5ld2x5IGFkZGVkIExFRCBzZXR1cCBjb2RlIHdpbGwgYmUgdW5yZWFjaGFibGUuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIExFRCBzdXBwb3J0IGZvciB0aGUgTW90b3Jjb21tIFlUOTIxNSBldGhlcm5ldCBzd2l0Y2ggY2hpcCAoYSBEU0EgZHJpdmVyKS4gVGhpcyBpcyBhIGhhcmR3YXJlLXNwZWNpZmljIGRyaXZlciB0aGF0IGNvbW11bmljYXRlcyB3aXRoIGEgcGh5c2ljYWwgY2hpcCB2aWEgTURJTy4gU2luY2UgdGhlcmUgaXMgbm8gc29mdHdhcmUgZW11bGF0aW9uIGZvciB0aGlzIHNwZWNpZmljIHN3aXRjaCBjaGlwIGluIHN0YW5kYXJkIFFFTVUvdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLCB0aGUgZHJpdmVyIHdpbGwgZmFpbCB0byBwcm9iZSAoZS5nLiwgZHVyaW5nIGNoaXAgSUQgZGV0ZWN0aW9uKSwgYW5kIHRoZSBuZXdseSBhZGRlZCBMRUQgc2V0dXAgY29kZSB3aWxsIGJlIHVucmVhY2hhYmxlLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTYgMjA6Mzk8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE2VDIwOjM5OjAxLjI2OTY1Mzg4NloiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUxODI4MDQ5MDYyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBMRUQgc3VwcG9ydCBmb3IgdGhlIE1vdG9yY29tbSBZVDkyMTUgZXRoZXJuZXQgc3dpdGNoIGNoaXAgKGEgRFNBIGRyaXZlcikuIFRoaXMgaXMgYSBoYXJkd2FyZS1zcGVjaWZpYyBkcml2ZXIgdGhhdCBjb21tdW5pY2F0ZXMgd2l0aCBhIHBoeXNpY2FsIGNoaXAgdmlhIE1ESU8uIFNpbmNlIHRoZXJlIGlzIG5vIHNvZnR3YXJlIGVtdWxhdGlvbiBmb3IgdGhpcyBzcGVjaWZpYyBzd2l0Y2ggY2hpcCBpbiBzdGFuZGFyZCBRRU1VL3ZpcnR1YWxpemVkIGVudmlyb25tZW50cywgdGhlIGRyaXZlciB3aWxsIGZhaWwgdG8gcHJvYmUgKGUuZy4sIGR1cmluZyBjaGlwIElEIGRldGVjdGlvbiksIGFuZCB0aGUgbmV3bHkgYWRkZWQgTEVEIHNldHVwIGNvZGUgd2lsbCBiZSB1bnJlYWNoYWJsZS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE2VDIwOjM5OjAxLjI2OTY1OTk0NloiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQzNjIwOTExMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDI4NjA5ODNkM2Y0ZGUwMWY5ZmNlMzc2MGZmMzE5OTI5MTRhZDkxMDNcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFN1biBBdWcgMTYgMjA6Mzg6NTkgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9kc2EvbW90b3Jjb21tLHl0OTIxeC55YW1sIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9kc2EvbW90b3Jjb21tLHl0OTIxeC55YW1sXFxuaW5kZXggMzNhNjU1MmU0NmZjMC4uOTNiYTViMTgxMjA1YiAxMDA2NDRcXG4tLS0gYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L2RzYS9tb3RvcmNvbW0seXQ5MjF4LnlhbWxcXG4rKysgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L2RzYS9tb3RvcmNvbW0seXQ5MjF4LnlhbWxcXG5AQCAtMjEsNiArMjEsOSBAQCBkZXNjcmlwdGlvbjogfFxcbiBcXG4gICBBbnkgcG9ydCBjYW4gYmUgdXNlZCBhcyB0aGUgQ1BVIHBvcnQuXFxuIFxcbisgIEVhY2ggcG9ydCBoYXMgYXQgbW9zdCAzIExFRHMgY29ubmVjdGVkIGFuZCBjYW4gYmUgZGVjbGFyZWQgdXNpbmcgdGhlIHN0YW5kYXJkXFxuKyAgTEVEcyBzdHJ1Y3R1cmUuXFxuK1xcbiBwcm9wZXJ0aWVzOlxcbiAgIGNvbXBhdGlibGU6XFxuICAgICBjb25zdDogbW90b3Jjb21tLHl0OTIxNVxcbkBAIC01OSw2ICs2Miw3IEBAIHVuZXZhbHVhdGVkUHJvcGVydGllczogZmFsc2VcXG4gZXhhbXBsZXM6XFxuICAgLSB8XFxuICAgICAjaW5jbHVkZSBcXHUwMDNjZHQtYmluZGluZ3MvZ3Bpby9ncGlvLmhcXHUwMDNlXFxuKyAgICAjaW5jbHVkZSBcXHUwMDNjZHQtYmluZGluZ3MvbGVkcy9jb21tb24uaFxcdTAwM2VcXG4gXFxuICAgICBtZGlvIHtcXG4gICAgICAgICAjYWRkcmVzcy1jZWxscyA9IFxcdTAwM2MxXFx1MDAzZTtcXG5AQCAtMTEzLDYgKzExNywyNSBAQCBleGFtcGxlczpcXG4gICAgICAgICAgICAgICAgICAgICBsYWJlbCA9IFxcXCJsYW4xXFxcIjtcXG4gICAgICAgICAgICAgICAgICAgICBwaHktbW9kZSA9IFxcXCJpbnRlcm5hbFxcXCI7XFxuICAgICAgICAgICAgICAgICAgICAgcGh5LWhhbmRsZSA9IFxcdTAwM2NcXHUwMDI2c3dfcGh5MFxcdTAwM2U7XFxuK1xcbisgICAgICAgICAgICAgICAgICAgIGxlZHMge1xcbisgICAgICAgICAgICAgICAgICAgICAgICAjYWRkcmVzcy1jZWxscyA9IFxcdTAwM2MxXFx1MDAzZTtcXG4rICAgICAgICAgICAgICAgICAgICAgICAgI3NpemUtY2VsbHMgPSBcXHUwMDNjMFxcdTAwM2U7XFxuK1xcbisgICAgICAgICAgICAgICAgICAgICAgICBsZWRAMCB7XFxuKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWcgPSBcXHUwMDNjMFxcdTAwM2U7XFxuKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvciA9IFxcdTAwM2NMRURfQ09MT1JfSURfV0hJVEVcXHUwMDNlO1xcbisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gPSBMRURfRlVOQ1RJT05fTEFOO1xcbisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdC1zdGF0ZSA9IFxcXCJrZWVwXFxcIjtcXG4rICAgICAgICAgICAgICAgICAgICAgICAgfTtcXG4rXFxuKyAgICAgICAgICAgICAgICAgICAgICAgIGxlZEAxIHtcXG4rICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZyA9IFxcdTAwM2MxXFx1MDAzZTtcXG4rICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yID0gXFx1MDAzY0xFRF9DT0xPUl9JRF9BTUJFUlxcdTAwM2U7XFxuKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiA9IExFRF9GVU5DVElPTl9MQU47XFxuKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0LXN0YXRlID0gXFxcImtlZXBcXFwiO1xcbisgICAgICAgICAgICAgICAgICAgICAgICB9O1xcbisgICAgICAgICAgICAgICAgICAgIH07XFxuICAgICAgICAgICAgICAgICB9O1xcbiBcXG4gICAgICAgICAgICAgICAgIGV0aGVybmV0LXBvcnRAMSB7XFxuZGlmZiAtLWdpdCBhL01BSU5UQUlORVJTIGIvTUFJTlRBSU5FUlNcXG5pbmRleCA5OTE0NjAwNTBkYTc0Li41NWNjNWFjMGU4NmYwIDEwMDY0NFxcbi0tLSBhL01BSU5UQUlORVJTXFxuKysrIGIvTUFJTlRBSU5FUlNcXG5AQCAtMTgyNTYsNyArMTgyNTYsNyBAQCBNOlxcdERhdmlkIFlhbmcgXFx1MDAzY21teWFuZ2ZsQGdtYWlsLmNvbVxcdTAwM2VcXG4gTDpcXHRuZXRkZXZAdmdlci5rZXJuZWwub3JnXFxuIFM6XFx0TWFpbnRhaW5lZFxcbiBGOlxcdERvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvZHNhL21vdG9yY29tbSx5dDkyMXgueWFtbFxcbi1GOlxcdGRyaXZlcnMvbmV0L2RzYS95dDkyMXguKlxcbitGOlxcdGRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vXFxuIEY6XFx0bmV0L2RzYS90YWdfeXQ5MjF4LmNcXG4gXFxuIE1PWEEgU01BUlRJTy9JTkRVU1RJTy9JTlRFTExJTyBTRVJJQUwgQ0FSRFxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EvS2NvbmZpZyBiL2RyaXZlcnMvbmV0L2RzYS9LY29uZmlnXFxuaW5kZXggNGFiNTY3YzViYmFmYy4uOThlOWJiZTQ3ZGU3YiAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9kc2EvS2NvbmZpZ1xcbisrKyBiL2RyaXZlcnMvbmV0L2RzYS9LY29uZmlnXFxuQEAgLTcyLDYgKzcyLDggQEAgY29uZmlnIE5FVF9EU0FfTVY4OEU2MDYwXFxuIFxcbiBzb3VyY2UgXFxcImRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAvS2NvbmZpZ1xcXCJcXG4gXFxuK3NvdXJjZSBcXFwiZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9LY29uZmlnXFxcIlxcbitcXG4gc291cmNlIFxcXCJkcml2ZXJzL25ldC9kc2EvbXY4OGU2eHh4L0tjb25maWdcXFwiXFxuIFxcbiBzb3VyY2UgXFxcImRyaXZlcnMvbmV0L2RzYS9teGw4NjJ4eC9LY29uZmlnXFxcIlxcbkBAIC0xNTgsMTIgKzE2MCw0IEBAIGNvbmZpZyBORVRfRFNBX1ZJVEVTU0VfVlNDNzNYWF9QTEFURk9STVxcbiBcXHQgIFRoaXMgZW5hYmxlcyBzdXBwb3J0IGZvciB0aGUgVml0ZXNzZSBWU0M3Mzg1LCBWU0M3Mzg4LCBWU0M3Mzk1XFxuIFxcdCAgYW5kIFZTQzczOTggU3BhclggaW50ZWdyYXRlZCBldGhlcm5ldCBzd2l0Y2hlcywgY29ubmVjdGVkIG92ZXJcXG4gXFx0ICBhIENQVS1hdHRhY2hlZCBhZGRyZXNzIGJ1cyBhbmQgd29yayBpbiBtZW1vcnktbWFwcGVkIEkvTyBtb2RlLlxcbi1cXG4tY29uZmlnIE5FVF9EU0FfWVQ5MjFYXFxuLVxcdHRyaXN0YXRlIFxcXCJNb3RvcmNvbW0gWVQ5MjE1IGV0aGVybmV0IHN3aXRjaCBjaGlwIHN1cHBvcnRcXFwiXFxuLVxcdHNlbGVjdCBORVRfRFNBX1RBR19ZVDkyMVhcXG4tXFx0c2VsZWN0IE5FVF9JRUVFODAyMVFfSEVMUEVSUyBpZiBEQ0JcXG4tXFx0aGVscFxcbi1cXHQgIFRoaXMgZW5hYmxlcyBzdXBwb3J0IGZvciB0aGUgTW90b3Jjb21tIFlUOTIxNSBldGhlcm5ldCBzd2l0Y2hcXG4tXFx0ICBjaGlwLlxcbiBlbmRtZW51XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS9NYWtlZmlsZSBiL2RyaXZlcnMvbmV0L2RzYS9NYWtlZmlsZVxcbmluZGV4IGQyOTc1YmFkZmZjMDkuLjEzODIyNWJhYTRkNTYgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZHNhL01ha2VmaWxlXFxuKysrIGIvZHJpdmVycy9uZXQvZHNhL01ha2VmaWxlXFxuQEAgLTE0LDExICsxNCwxMSBAQCBvYmotJChDT05GSUdfTkVUX0RTQV9TTVNDX0xBTjkzMDNfTURJTykgKz0gbGFuOTMwM19tZGlvLm9cXG4gb2JqLSQoQ09ORklHX05FVF9EU0FfVklURVNTRV9WU0M3M1hYKSArPSB2aXRlc3NlLXZzYzczeHgtY29yZS5vXFxuIG9iai0kKENPTkZJR19ORVRfRFNBX1ZJVEVTU0VfVlNDNzNYWF9QTEFURk9STSkgKz0gdml0ZXNzZS12c2M3M3h4LXBsYXRmb3JtLm9cXG4gb2JqLSQoQ09ORklHX05FVF9EU0FfVklURVNTRV9WU0M3M1hYX1NQSSkgKz0gdml0ZXNzZS12c2M3M3h4LXNwaS5vXFxuLW9iai0kKENPTkZJR19ORVRfRFNBX1lUOTIxWCkgKz0geXQ5MjF4Lm9cXG4gb2JqLXlcXHRcXHRcXHRcXHQrPSBiNTMvXFxuIG9iai15XFx0XFx0XFx0XFx0Kz0gaGlyc2NobWFubi9cXG4gb2JqLXlcXHRcXHRcXHRcXHQrPSBsYW50aXEvXFxuIG9iai15XFx0XFx0XFx0XFx0Kz0gbWljcm9jaGlwL1xcbitvYmoteVxcdFxcdFxcdFxcdCs9IG1vdG9yY29tbS9cXG4gb2JqLXlcXHRcXHRcXHRcXHQrPSBtdjg4ZTZ4eHgvXFxuIG9iai15XFx0XFx0XFx0XFx0Kz0gbXhsODYyeHgvXFxuIG9iai15XFx0XFx0XFx0XFx0Kz0gbmV0Yy9cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9LY29uZmlnIGIvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9LY29uZmlnXFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcXG5pbmRleCAwMDAwMDAwMDAwMDAwLi4zNDM4ZTBiMTQzNjExXFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vS2NvbmZpZ1xcbkBAIC0wLDAgKzEsMTcgQEBcXG4rIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogSVNDXFxuK2NvbmZpZyBORVRfRFNBX1lUOTIxWFxcbitcXHR0cmlzdGF0ZSBcXFwiTW90b3Jjb21tIFlUOTIxNSBldGhlcm5ldCBzd2l0Y2ggY2hpcCBzdXBwb3J0XFxcIlxcbitcXHRzZWxlY3QgTkVUX0RTQV9UQUdfWVQ5MjFYXFxuK1xcdHNlbGVjdCBORVRfSUVFRTgwMjFRX0hFTFBFUlMgaWYgRENCXFxuK1xcdGhlbHBcXG4rXFx0ICBUaGlzIGVuYWJsZXMgc3VwcG9ydCBmb3IgdGhlIE1vdG9yY29tbSBZVDkyMTUgZXRoZXJuZXQgc3dpdGNoXFxuK1xcdCAgY2hpcC5cXG4rXFxuK2NvbmZpZyBORVRfRFNBX1lUOTIxWF9MRURTXFxuK1xcdGJvb2wgXFxcIkxFRCBzdXBwb3J0IGZvciBNb3RvcmNvbW0gWVQ5MjE1XFxcIlxcbitcXHRkZWZhdWx0IHlcXG4rXFx0ZGVwZW5kcyBvbiBORVRfRFNBX1lUOTIxWFxcbitcXHRkZXBlbmRzIG9uIExFRFNfQ0xBU1M9eSB8fCBMRURTX0NMQVNTPU5FVF9EU0FfWVQ5MjFYXFxuK1xcdGhlbHBcXG4rXFx0ICBUaGlzIGVuYWJsZXMgc3VwcG9ydCBmb3IgY29udHJvbGxpbmcgdGhlIExFRHMgYXR0YWNoZWQgdG8gdGhlXFxuK1xcdCAgTW90b3Jjb21tIFlUOTIxNSBzd2l0Y2ggY2hpcHMuXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vTWFrZWZpbGUgYi9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL01ha2VmaWxlXFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcXG5pbmRleCAwMDAwMDAwMDAwMDAwLi41YTYzZGIwMDI5ZmZlXFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vTWFrZWZpbGVcXG5AQCAtMCwwICsxLDUgQEBcXG4rIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogSVNDXFxuK29iai0kKENPTkZJR19ORVRfRFNBX1lUOTIxWCkgKz0geXQ5MjF4Lm9cXG4reXQ5MjF4LW9ianMgOj0gY2hpcC5vXFxuK3l0OTIxeC0kKENPTkZJR19ORVRfRFNBX1lUOTIxWF9MRURTKSArPSBsZWRzLm9cXG4reXQ5MjF4LW9ianMgKz0gc21pLm9cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZHNhL3l0OTIxeC5jIGIvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmNcXG5zaW1pbGFyaXR5IGluZGV4IDk2JVxcbnJlbmFtZSBmcm9tIGRyaXZlcnMvbmV0L2RzYS95dDkyMXguY1xcbnJlbmFtZSB0byBkcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuY1xcbmluZGV4IDE1OWIxNjYwNmY2Y2EuLjU1M2VmYWNkNGY1ZWUgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZHNhL3l0OTIxeC5jXFxuKysrIGIvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmNcXG5AQCAtMTMsNyArMTMsNiBAQFxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvaWZfYnJpZGdlLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9pZl9oc3IuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2lmX3ZsYW4uaFxcdTAwM2VcXG4tI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2lvcG9sbC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvbWRpby5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvbW9kdWxlLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9vZi5oXFx1MDAzZVxcbkBAIC0yNiw3ICsyNSw5IEBAXFxuICNpbmNsdWRlIFxcdTAwM2NuZXQvaWVlZTgwMjFxLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NuZXQvcGt0X2Nscy5oXFx1MDAzZVxcbiBcXG4tI2luY2x1ZGUgXFxcInl0OTIxeC5oXFxcIlxcbisjaW5jbHVkZSBcXFwiY2hpcC5oXFxcIlxcbisjaW5jbHVkZSBcXFwibGVkcy5oXFxcIlxcbisjaW5jbHVkZSBcXFwic21pLmhcXFwiXFxuIFxcbiBzdHJ1Y3QgeXQ5MjF4X21pYl9kZXNjIHtcXG4gXFx0dW5zaWduZWQgaW50IHNpemU7XFxuQEAgLTE1MSwxMyArMTUyLDggQEAgc3RhdGljIGNvbnN0IHN0cnVjdCB5dDkyMXhfaW5mbyB5dDkyMXhfaW5mb3NbXSA9IHtcXG4gXFx0e31cXG4gfTtcXG4gXFxuLSNkZWZpbmUgWVQ5MjFYX05BTUVcXHRcXFwieXQ5MjF4XFxcIlxcbi1cXG4gI2RlZmluZSBZVDkyMVhfVklEX1VOV0FSRVxcdDQwOTVcXG4gXFxuLSNkZWZpbmUgWVQ5MjFYX1BPTExfU0xFRVBfVVNcXHQxMDAwMFxcbi0jZGVmaW5lIFlUOTIxWF9QT0xMX1RJTUVPVVRfVVNcXHQxMDAwMDBcXG4tXFxuIC8qIFRoZSBpbnRlcnZhbCBzaG91bGQgYmUgc21hbGwgZW5vdWdoIHRvIGF2b2lkIG92ZXJmbG93IG9mIDMyYml0IE1JQnMuXFxuICAqXFxuICAqIFVudGlsIHdlIGNhbiByZWFkIE1JQnMgZnJvbSBzdGF0czY0IGNhbGwgZGlyZWN0bHkgKGkuZS4gc2xlZXBcXG5AQCAtMTk2LDIwOCArMTkyLDYgQEAgc3RhdGljIHUzMiBldGhhZGRyX2xvMl90b191MzIoY29uc3QgdW5zaWduZWQgY2hhciAqYWRkcilcXG4gXFx0cmV0dXJuIChhZGRyWzRdIFxcdTAwM2NcXHUwMDNjIDgpIHwgYWRkcls1XTtcXG4gfVxcbiBcXG4tc3RhdGljIGludCB5dDkyMXhfcmVnX3JlYWQoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgKnZhbHApXFxuLXtcXG4tXFx0V0FSTl9PTighbXV0ZXhfaXNfbG9ja2VkKFxcdTAwMjZwcml2LVxcdTAwM2VyZWdfbG9jaykpO1xcbi1cXG4tXFx0cmV0dXJuIHByaXYtXFx1MDAzZXJlZ19vcHMtXFx1MDAzZXJlYWQocHJpdi1cXHUwMDNlcmVnX2N0eCwgcmVnLCB2YWxwKTtcXG4tfVxcbi1cXG4tc3RhdGljIGludCB5dDkyMXhfcmVnX3dyaXRlKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyIHZhbClcXG4te1xcbi1cXHRXQVJOX09OKCFtdXRleF9pc19sb2NrZWQoXFx1MDAyNnByaXYtXFx1MDAzZXJlZ19sb2NrKSk7XFxuLVxcbi1cXHRyZXR1cm4gcHJpdi1cXHUwMDNlcmVnX29wcy1cXHUwMDNld3JpdGUocHJpdi1cXHUwMDNlcmVnX2N0eCwgcmVnLCB2YWwpO1xcbi19XFxuLVxcbi1zdGF0aWMgaW50XFxuLXl0OTIxeF9yZWdfd2FpdChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiBtYXNrLCB1MzIgKnZhbHApXFxuLXtcXG4tXFx0dTMyIHZhbDtcXG4tXFx0aW50IHJlcztcXG4tXFx0aW50IHJldDtcXG4tXFxuLVxcdHJldCA9IHJlYWRfcG9sbF90aW1lb3V0KHl0OTIxeF9yZWdfcmVhZCwgcmVzLFxcbi1cXHRcXHRcXHRcXHRyZXMgfHwgKHZhbCBcXHUwMDI2IG1hc2spID09ICp2YWxwLFxcbi1cXHRcXHRcXHRcXHRZVDkyMVhfUE9MTF9TTEVFUF9VUywgWVQ5MjFYX1BPTExfVElNRU9VVF9VUyxcXG4tXFx0XFx0XFx0XFx0ZmFsc2UsIHByaXYsIHJlZywgXFx1MDAyNnZhbCk7XFxuLVxcdGlmIChyZXQpXFxuLVxcdFxcdHJldHVybiByZXQ7XFxuLVxcdGlmIChyZXMpXFxuLVxcdFxcdHJldHVybiByZXM7XFxuLVxcbi1cXHQqdmFscCA9IHZhbDtcXG4tXFx0cmV0dXJuIDA7XFxuLX1cXG4tXFxuLXN0YXRpYyBpbnRcXG4teXQ5MjF4X3JlZ191cGRhdGVfYml0cyhzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiBtYXNrLCB1MzIgdmFsKVxcbi17XFxuLVxcdGludCByZXM7XFxuLVxcdHUzMiB2O1xcbi1cXHR1MzIgdTtcXG4tXFxuLVxcdHJlcyA9IHl0OTIxeF9yZWdfcmVhZChwcml2LCByZWcsIFxcdTAwMjZ2KTtcXG4tXFx0aWYgKHJlcylcXG4tXFx0XFx0cmV0dXJuIHJlcztcXG4tXFxuLVxcdHUgPSB2O1xcbi1cXHR1IFxcdTAwMjY9IH5tYXNrO1xcbi1cXHR1IHw9IHZhbDtcXG4tXFx0aWYgKHUgPT0gdilcXG4tXFx0XFx0cmV0dXJuIDA7XFxuLVxcbi1cXHRyZXR1cm4geXQ5MjF4X3JlZ193cml0ZShwcml2LCByZWcsIHUpO1xcbi19XFxuLVxcbi1zdGF0aWMgaW50IHl0OTIxeF9yZWdfc2V0X2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgbWFzaylcXG4te1xcbi1cXHRyZXR1cm4geXQ5MjF4X3JlZ191cGRhdGVfYml0cyhwcml2LCByZWcsIDAsIG1hc2spO1xcbi19XFxuLVxcbi1zdGF0aWMgaW50IHl0OTIxeF9yZWdfY2xlYXJfYml0cyhzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiBtYXNrKVxcbi17XFxuLVxcdHJldHVybiB5dDkyMXhfcmVnX3VwZGF0ZV9iaXRzKHByaXYsIHJlZywgbWFzaywgMCk7XFxuLX1cXG4tXFxuLXN0YXRpYyBpbnRcXG4teXQ5MjF4X3JlZ190b2dnbGVfYml0cyhzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiBtYXNrLCBib29sIHNldClcXG4te1xcbi1cXHRyZXR1cm4geXQ5MjF4X3JlZ191cGRhdGVfYml0cyhwcml2LCByZWcsIG1hc2ssICFzZXQgPyAwIDogbWFzayk7XFxuLX1cXG4tXFxuLS8qIFNvbWUgbXVsdGktd29yZCByZWdpc3RlcnMsIGxpa2UgVkxBTm5fQ1RSTCwgc2hvdWxkIGJlIHRyZWF0ZWQgYXMgYSBzaW5nbGVcXG4tICogbG9uZyByZWdpc3Rlci4gTW9yZSBzcGVjaWZpY2FsbHksIHdyaXRlcyB0byBwYXJ0cyBvZiBpdHMgd29yZHMgd29uJ3QgYmVjb21lXFxuLSAqIHZpc2libGUsIHVudGlsIHRoZSBsYXN0IHdvcmQgaXMgd3JpdHRlbi5cXG4tICpcXG4tICogSGVyZSB3ZSByZXF1aXJlIGZ1bGwgcmVhZCBhbmQgd3JpdGUgb3BlcmF0aW9ucyBvdmVyIHRoZXNlIHJlZ2lzdGVycyB0b1xcbi0gKiBlbGltaW5hdGUgcG90ZW50aWFsIGlzc3VlcywgYWx0aG91Z2ggcGFydGlhbCByZWFkcy93cml0ZXMgYXJlIGFsc28gcG9zc2libGUuXFxuLSAqL1xcbi1cXG4tc3RhdGljIHZvaWQgdXBkYXRlX2N0cmxzX3VuYWxpZ25lZCh1MzIgKmxvLCB1MzIgKmhpLCB1NjQgbWFzaywgdTY0IHZhbClcXG4te1xcbi1cXHQqbG8gXFx1MDAyNj0gfmxvd2VyXzMyX2JpdHMobWFzayk7XFxuLVxcdCpoaSBcXHUwMDI2PSB+dXBwZXJfMzJfYml0cyhtYXNrKTtcXG4tXFx0KmxvIHw9IGxvd2VyXzMyX2JpdHModmFsKTtcXG4tXFx0KmhpIHw9IHVwcGVyXzMyX2JpdHModmFsKTtcXG4tfVxcbi1cXG4tc3RhdGljIGludFxcbi15dDkyMXhfcmVnc19yZWFkKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyICp2YWxzLFxcbi1cXHRcXHQgdW5zaWduZWQgaW50IG51bV9yZWdzKVxcbi17XFxuLVxcdGludCByZXM7XFxuLVxcbi1cXHRmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSBcXHUwMDNjIG51bV9yZWdzOyBpKyspIHtcXG4tXFx0XFx0cmVzID0geXQ5MjF4X3JlZ19yZWFkKHByaXYsIHJlZyArIDQgKiBpLCBcXHUwMDI2dmFsc1tpXSk7XFxuLVxcdFxcdGlmIChyZXMpXFxuLVxcdFxcdFxcdHJldHVybiByZXM7XFxuLVxcdH1cXG4tXFxuLVxcdHJldHVybiAwO1xcbi19XFxuLVxcbi1zdGF0aWMgaW50XFxuLXl0OTIxeF9yZWdzX3dyaXRlKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgY29uc3QgdTMyICp2YWxzLFxcbi1cXHRcXHQgIHVuc2lnbmVkIGludCBudW1fcmVncylcXG4te1xcbi1cXHRpbnQgcmVzO1xcbi1cXG4tXFx0Zm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgXFx1MDAzYyBudW1fcmVnczsgaSsrKSB7XFxuLVxcdFxcdHJlcyA9IHl0OTIxeF9yZWdfd3JpdGUocHJpdiwgcmVnICsgNCAqIGksIHZhbHNbaV0pO1xcbi1cXHRcXHRpZiAocmVzKVxcbi1cXHRcXHRcXHRyZXR1cm4gcmVzO1xcbi1cXHR9XFxuLVxcbi1cXHRyZXR1cm4gMDtcXG4tfVxcbi1cXG4tc3RhdGljIGludFxcbi15dDkyMXhfcmVnc191cGRhdGVfYml0cyhzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIGNvbnN0IHUzMiAqbWFza3MsXFxuLVxcdFxcdFxcdGNvbnN0IHUzMiAqdmFscywgdW5zaWduZWQgaW50IG51bV9yZWdzKVxcbi17XFxuLVxcdGJvb2wgY2hhbmdlZCA9IGZhbHNlO1xcbi1cXHR1MzIgdnNbNF07XFxuLVxcdGludCByZXM7XFxuLVxcbi1cXHRCVUlMRF9CVUdfT04obnVtX3JlZ3MgXFx1MDAzZSBBUlJBWV9TSVpFKHZzKSk7XFxuLVxcbi1cXHRyZXMgPSB5dDkyMXhfcmVnc19yZWFkKHByaXYsIHJlZywgdnMsIG51bV9yZWdzKTtcXG4tXFx0aWYgKHJlcylcXG4tXFx0XFx0cmV0dXJuIHJlcztcXG4tXFxuLVxcdGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIFxcdTAwM2MgbnVtX3JlZ3M7IGkrKykge1xcbi1cXHRcXHR1MzIgdSA9IHZzW2ldO1xcbi1cXG4tXFx0XFx0dSBcXHUwMDI2PSB+bWFza3NbaV07XFxuLVxcdFxcdHUgfD0gdmFsc1tpXTtcXG4tXFx0XFx0aWYgKHUgIT0gdnNbaV0pXFxuLVxcdFxcdFxcdGNoYW5nZWQgPSB0cnVlO1xcbi1cXG4tXFx0XFx0dnNbaV0gPSB1O1xcbi1cXHR9XFxuLVxcbi1cXHRpZiAoIWNoYW5nZWQpXFxuLVxcdFxcdHJldHVybiAwO1xcbi1cXG4tXFx0cmV0dXJuIHl0OTIxeF9yZWdzX3dyaXRlKHByaXYsIHJlZywgdnMsIG51bV9yZWdzKTtcXG4tfVxcbi1cXG4tc3RhdGljIGludFxcbi15dDkyMXhfcmVnc19jbGVhcl9iaXRzKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgY29uc3QgdTMyICptYXNrcyxcXG4tXFx0XFx0ICAgICAgIHVuc2lnbmVkIGludCBudW1fcmVncylcXG4te1xcbi1cXHRib29sIGNoYW5nZWQgPSBmYWxzZTtcXG4tXFx0dTMyIHZzWzRdO1xcbi1cXHRpbnQgcmVzO1xcbi1cXG4tXFx0QlVJTERfQlVHX09OKG51bV9yZWdzIFxcdTAwM2UgQVJSQVlfU0laRSh2cykpO1xcbi1cXG4tXFx0cmVzID0geXQ5MjF4X3JlZ3NfcmVhZChwcml2LCByZWcsIHZzLCBudW1fcmVncyk7XFxuLVxcdGlmIChyZXMpXFxuLVxcdFxcdHJldHVybiByZXM7XFxuLVxcbi1cXHRmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSBcXHUwMDNjIG51bV9yZWdzOyBpKyspIHtcXG4tXFx0XFx0dTMyIHUgPSB2c1tpXTtcXG4tXFxuLVxcdFxcdHUgXFx1MDAyNj0gfm1hc2tzW2ldO1xcbi1cXHRcXHRpZiAodSAhPSB2c1tpXSlcXG4tXFx0XFx0XFx0Y2hhbmdlZCA9IHRydWU7XFxuLVxcbi1cXHRcXHR2c1tpXSA9IHU7XFxuLVxcdH1cXG4tXFxuLVxcdGlmICghY2hhbmdlZClcXG4tXFx0XFx0cmV0dXJuIDA7XFxuLVxcbi1cXHRyZXR1cm4geXQ5MjF4X3JlZ3Nfd3JpdGUocHJpdiwgcmVnLCB2cywgbnVtX3JlZ3MpO1xcbi19XFxuLVxcbi1zdGF0aWMgaW50XFxuLXl0OTIxeF9yZWc2NF93cml0ZShzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIGNvbnN0IHUzMiAqdmFscylcXG4te1xcbi1cXHRyZXR1cm4geXQ5MjF4X3JlZ3Nfd3JpdGUocHJpdiwgcmVnLCB2YWxzLCAyKTtcXG4tfVxcbi1cXG4tc3RhdGljIGludFxcbi15dDkyMXhfcmVnNjRfdXBkYXRlX2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCBjb25zdCB1MzIgKm1hc2tzLFxcbi1cXHRcXHRcXHQgY29uc3QgdTMyICp2YWxzKVxcbi17XFxuLVxcdHJldHVybiB5dDkyMXhfcmVnc191cGRhdGVfYml0cyhwcml2LCByZWcsIG1hc2tzLCB2YWxzLCAyKTtcXG4tfVxcbi1cXG4tc3RhdGljIGludFxcbi15dDkyMXhfcmVnNjRfY2xlYXJfYml0cyhzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIGNvbnN0IHUzMiAqbWFza3MpXFxuLXtcXG4tXFx0cmV0dXJuIHl0OTIxeF9yZWdzX2NsZWFyX2JpdHMocHJpdiwgcmVnLCBtYXNrcywgMik7XFxuLX1cXG4tXFxuLXN0YXRpYyBpbnRcXG4teXQ5MjF4X3JlZzk2X3dyaXRlKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgY29uc3QgdTMyICp2YWxzKVxcbi17XFxuLVxcdHJldHVybiB5dDkyMXhfcmVnc193cml0ZShwcml2LCByZWcsIHZhbHMsIDMpO1xcbi19XFxuLVxcbiBzdGF0aWMgaW50IHl0OTIxeF9yZWdfbWRpb19yZWFkKHZvaWQgKmNvbnRleHQsIHUzMiByZWcsIHUzMiAqdmFscClcXG4ge1xcbiBcXHRzdHJ1Y3QgeXQ5MjF4X3JlZ19tZGlvICptZGlvID0gY29udGV4dDtcXG5AQCAtNDc4Niw2ICs0NTgwLDEyIEBAIHN0YXRpYyBpbnQgeXQ5MjF4X2RzYV9zZXR1cChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpXFxuIFxcdGlmIChyZXMpXFxuIFxcdFxcdHJldHVybiByZXM7XFxuIFxcbisjaWYgSVNfRU5BQkxFRChDT05GSUdfTkVUX0RTQV9ZVDkyMVhfTEVEUylcXG4rXFx0cmVzID0geXQ5MjF4X2xlZHNfc2V0dXAocHJpdik7XFxuK1xcdGlmIChyZXMpXFxuK1xcdFxcdGRldl93YXJuKGRldiwgXFxcIkZhaWxlZCB0byBzZXR1cCBMRURzOiAlZFxcXFxuXFxcIiwgcmVzKTtcXG4rI2VuZGlmXFxuK1xcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG5AQCAtNDg4Niw2ICs0Njg2LDEwIEBAIHN0YXRpYyB2b2lkIHl0OTIxeF9tZGlvX3JlbW92ZShzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYpXFxuIFxcdGlmICghcHJpdilcXG4gXFx0XFx0cmV0dXJuO1xcbiBcXG4rI2lmIElTX0VOQUJMRUQoQ09ORklHX05FVF9EU0FfWVQ5MjFYX0xFRFMpXFxuK1xcdHl0OTIxeF9sZWRzX3JlbW92ZShwcml2KTtcXG4rI2VuZGlmXFxuK1xcbiBcXHRmb3IgKHNpemVfdCBpID0gQVJSQVlfU0laRShwcml2LVxcdTAwM2Vwb3J0cyk7IGktLSBcXHUwMDNlIDA7ICkge1xcbiBcXHRcXHRzdHJ1Y3QgeXQ5MjF4X3BvcnQgKnBwID0gXFx1MDAyNnByaXYtXFx1MDAzZXBvcnRzW2ldO1xcbiBcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZHNhL3l0OTIxeC5oIGIvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmhcXG5zaW1pbGFyaXR5IGluZGV4IDk5JVxcbnJlbmFtZSBmcm9tIGRyaXZlcnMvbmV0L2RzYS95dDkyMXguaFxcbnJlbmFtZSB0byBkcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuaFxcbmluZGV4IDVmM2I5OWUxODljNDEuLmU2ODE1Y2Y5Y2IzY2QgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZHNhL3l0OTIxeC5oXFxuKysrIGIvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmhcXG5AQCAtODUwLDkgKzg1MCwxNCBAQCBlbnVtIHl0OTIxeF9mZGJfZW50cnlfc3RhdHVzIHtcXG4gI2RlZmluZSBZVDkyMVhfQUNMX05VTVxcdFxcdChZVDkyMVhfQUNMX0JMS19OVU0gKiBZVDkyMVhfQUNMX0VOVF9QRVJfQkxLKVxcbiAjZGVmaW5lIFlUOTIxWF9VREZfTlVNXFx0XFx0OFxcbiBcXG4rI2RlZmluZSBZVDkyMVhfTEVEX0dST1VQX05VTVxcdDNcXG4rI2RlZmluZSBZVDkyMVhfTEVEX1BPUlRfTlVNXFx0MTBcXG4rXFxuIC8qIDggaW50ZXJuYWwgKyAyIGV4dGVybmFsICsgMSBtY3UgKi9cXG4gI2RlZmluZSBZVDkyMVhfUE9SVF9OVU1cXHRcXHRcXHQxMVxcbiBcXG4rI2RlZmluZSBZVDkyMVhfTkFNRVxcdFxcXCJ5dDkyMXhcXFwiXFxuK1xcbiAjZGVmaW5lIHl0OTIxeF9wb3J0X2lzX2ludGVybmFsKHBvcnQpICgocG9ydCkgXFx1MDAzYyA4KVxcbiAjZGVmaW5lIHl0OTIxeF9wb3J0X2lzX2V4dGVybmFsKHBvcnQpICgocG9ydCkgPT0gOCB8fCAocG9ydCkgPT0gOSlcXG4gXFxuQEAgLTkzOCw2ICs5NDMsMTMgQEAgc3RydWN0IHl0OTIxeF9wb3J0IHtcXG4gXFx0c3RydWN0IHl0OTIxeF9taWIgbWliO1xcbiBcXHR1NjQgcnhfZnJhbWVzO1xcbiBcXHR1NjQgdHhfZnJhbWVzO1xcbitcXG4rI2lmIElTX0VOQUJMRUQoQ09ORklHX05FVF9EU0FfWVQ5MjFYX0xFRFMpXFxuK1xcdHVuc2lnbmVkIGNoYXIgbGVkX2R1dHk7XFxuK1xcdHVuc2lnbmVkIHNob3J0IGxlZF9jeWNsZTtcXG4rXFxuK1xcdHN0cnVjdCB5dDkyMXhfbGVkICpsZWRzW1lUOTIxWF9MRURfR1JPVVBfTlVNXTtcXG4rI2VuZGlmXFxuIH07XFxuIFxcbiBzdHJ1Y3QgeXQ5MjF4X3JlZ19vcHMge1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2xlZHMuYyBiL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vbGVkcy5jXFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcXG5pbmRleCAwMDAwMDAwMDAwMDAwLi5lN2VmMGVmODBhMjY2XFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vbGVkcy5jXFxuQEAgLTAsMCArMSw2NTQgQEBcXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb3ItbGF0ZXJcXG4rLypcXG4rICogQ29weXJpZ2h0IChjKSAyMDI2IERhdmlkIFlhbmdcXG4rICovXFxuK1xcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvdWxlZHMuaFxcdTAwM2VcXG4rXFxuKyNpbmNsdWRlIFxcXCJjaGlwLmhcXFwiXFxuKyNpbmNsdWRlIFxcXCJsZWRzLmhcXFwiXFxuKyNpbmNsdWRlIFxcXCJzbWkuaFxcXCJcXG4rXFxuKyNkZWZpbmUgdG9feXQ5MjF4X2xlZChsZWRfY2RldikgXFxcXFxcbitcXHRjb250YWluZXJfb2ZfY29uc3QoKGxlZF9jZGV2KSwgc3RydWN0IHl0OTIxeF9sZWQsIGNkZXYpXFxuKyNkZWZpbmUgdG9feXQ5MjF4X3BvcnQobGVkKSAoKGxlZCktXFx1MDAzZXBvcnQpXFxuKyNkZWZpbmUgdG9feXQ5MjF4X3ByaXYocHApIFxcXFxcXG4rXFx0Y29udGFpbmVyX29mX2NvbnN0KChwcCksIHN0cnVjdCB5dDkyMXhfcHJpdiwgcG9ydHNbKHBwKS1cXHUwMDNlaW5kZXhdKVxcbisjZGVmaW5lIHRvX2RldmljZShwcml2KSAoKHByaXYpLVxcdTAwM2Vkcy5kZXYpXFxuK1xcbitzdGF0aWMgdTMyIHl0OTIxeF9sZWRfcmVnYWRkcihzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIGludCBwb3J0LCBpbnQgZ3JvdXApXFxuK3tcXG4rXFx0c3dpdGNoIChncm91cCkge1xcbitcXHRjYXNlIDA6XFxuK1xcdGRlZmF1bHQ6XFxuK1xcdFxcdHJldHVybiBZVDkyMVhfTEVEMF9QT1JUbihwb3J0KTtcXG4rXFx0Y2FzZSAxOlxcbitcXHRcXHRyZXR1cm4gWVQ5MjFYX0xFRDFfUE9SVG4ocG9ydCk7XFxuK1xcdGNhc2UgMjpcXG4rXFx0XFx0cmV0dXJuIFlUOTIxWF9MRUQyX1BPUlRuKHBvcnQpO1xcbitcXHR9XFxuK31cXG4rXFxuK3N0YXRpYyBpbnRcXG4reXQ5MjF4X2xlZF9mb3JjZV9nZXQoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCBpbnQgcG9ydCwgaW50IGdyb3VwLCBib29sICpvbnApXFxuK3tcXG4rXFx0dTMyIHZhbDtcXG4rXFx0aW50IHJlcztcXG4rXFxuK1xcdHJlcyA9IHl0OTIxeF9yZWdfcmVhZChwcml2LCBZVDkyMVhfTEVEMl9QT1JUbihwb3J0KSwgXFx1MDAyNnZhbCk7XFxuK1xcdGlmIChyZXMpXFxuK1xcdFxcdHJldHVybiByZXM7XFxuK1xcbitcXHQqb25wID0gKHZhbCBcXHUwMDI2IFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuX00oZ3JvdXApKSA9PVxcbitcXHQgICAgICAgWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW5fT04oZ3JvdXApO1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rc3RhdGljIGludFxcbit5dDkyMXhfbGVkX2ZvcmNlX3NldChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIGludCBwb3J0LCBpbnQgZ3JvdXAsIGJvb2wgb24pXFxuK3tcXG4rXFx0c3RydWN0IHl0OTIxeF9wb3J0ICpwcCA9IFxcdTAwMjZwcml2LVxcdTAwM2Vwb3J0c1twb3J0XTtcXG4rXFx0c3RydWN0IHl0OTIxeF9sZWQgKmxlZCA9IHBwLVxcdTAwM2VsZWRzW2dyb3VwXTtcXG4rXFx0dTMyIGN0cmw7XFxuK1xcdHUzMiBtYXNrO1xcbitcXG4rXFx0bGVkLVxcdTAwM2V1c2VfY3ljbGUgPSBmYWxzZTtcXG4rXFx0bGVkLVxcdTAwM2V1c2VfZHV0eSA9IGZhbHNlO1xcbitcXG4rXFx0bWFzayA9IFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuX00oZ3JvdXApO1xcbitcXHRjdHJsID0gb24gPyBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbl9PTihncm91cCkgOlxcbitcXHQgICAgICAgWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW5fT0ZGKGdyb3VwKTtcXG4rXFx0cmV0dXJuIHl0OTIxeF9yZWdfdXBkYXRlX2JpdHMocHJpdiwgWVQ5MjFYX0xFRDJfUE9SVG4ocG9ydCksIG1hc2ssXFxuK1xcdFxcdFxcdFxcdCAgICAgIGN0cmwpO1xcbit9XFxuK1xcbitzdGF0aWMgaW50XFxuK3l0OTIxeF9sZWRfYmxpbmtfc2VsZWN0KGNvbnN0IHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdW5zaWduZWQgbG9uZyBvbixcXG4rXFx0XFx0XFx0dW5zaWduZWQgbG9uZyBvZmYsIHVuc2lnbmVkIHNob3J0ICpjeWNsZXAsXFxuK1xcdFxcdFxcdHVuc2lnbmVkIGNoYXIgKmR1dHlwKVxcbit7XFxuK1xcdHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGR1dHlzW10gPSB7XFxuK1xcdFxcdFlUOTIxWF9MRURfRFVUWSgxLCA2KSxcXG4rXFx0XFx0WVQ5MjFYX0xFRF9EVVRZKDEsIDQpLFxcbitcXHRcXHRZVDkyMVhfTEVEX0RVVFkoMSwgMyksXFxuK1xcdFxcdFlUOTIxWF9MRURfRFVUWSgxLCAyKSxcXG4rXFx0fTtcXG4rXFx0dW5zaWduZWQgaW50IGN5Y2xlX3VwcGVyO1xcbitcXHR1bnNpZ25lZCBpbnQgY3ljbGVfcmVxO1xcbitcXHR1bnNpZ25lZCBpbnQgZHV0eV9yZXE7XFxuK1xcdHVuc2lnbmVkIGludCBjeWNsZTtcXG4rXFx0dW5zaWduZWQgaW50IGR1dHk7XFxuK1xcbitcXHRjeWNsZSA9IFlUOTIxWF9MRURfQkxJTktfTUFYO1xcbitcXHRjeWNsZV91cHBlciA9IGN5Y2xlICogMTE1ODUgLyA4MTkyICsgMTsgIC8qIE1fU1FSVDIgKiBjeWNsZSAqL1xcbitcXHRpZiAoY2hlY2tfYWRkX292ZXJmbG93KG9uLCBvZmYsIFxcdTAwMjZjeWNsZV9yZXEpIHx8IGN5Y2xlX3JlcSBcXHUwMDNlPSBjeWNsZV91cHBlcilcXG4rXFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbitcXG4rXFx0Zm9yICg7IGN5Y2xlIFxcdTAwM2UgWVQ5MjFYX0xFRF9CTElOS19NSU47IGN5Y2xlX3VwcGVyIFxcdTAwM2VcXHUwMDNlPSAxLCBjeWNsZSBcXHUwMDNlXFx1MDAzZT0gMSlcXG4rXFx0XFx0aWYgKGN5Y2xlX3JlcSBcXHUwMDNlPSBjeWNsZV91cHBlciBcXHUwMDNlXFx1MDAzZSAxKVxcbitcXHRcXHRcXHRicmVhaztcXG4rXFx0KmN5Y2xlcCA9IGN5Y2xlO1xcbitcXG4rXFx0ZHV0eV9yZXEgPSBESVZfUk9VTkRfQ0xPU0VTVChZVDkyMVhfTEVEX0RVVFlfREVOT00gKlxcbitcXHRcXHRcXHRcXHQgICAgIChvbiBcXHUwMDNlIG9mZiA/IG9mZiA6IG9uKSwgY3ljbGVfcmVxKTtcXG4rXFx0Zm9yICh1bnNpZ25lZCBpbnQgaSA9IEFSUkFZX1NJWkUoZHV0eXMpIC0gMTs7IGktLSlcXG4rXFx0XFx0aWYgKGkgPT0gMCB8fCBkdXR5X3JlcSBcXHUwMDNlPSAoZHV0eXNbaSAtIDFdICsgZHV0eXNbaV0pIC8gMikge1xcbitcXHRcXHRcXHRkdXR5ID0gZHV0eXNbaV07XFxuK1xcdFxcdFxcdGJyZWFrO1xcbitcXHRcXHR9XFxuK1xcdGlmIChvbiBcXHUwMDNlIG9mZilcXG4rXFx0XFx0ZHV0eSA9IFlUOTIxWF9MRURfRFVUWV9ERU5PTSAtIGR1dHk7XFxuK1xcdCpkdXR5cCA9IGR1dHk7XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rc3RhdGljIGludFxcbit5dDkyMXhfbGVkX2JsaW5rX3NldChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIGludCBwb3J0LCBpbnQgZ3JvdXAsXFxuK1xcdFxcdCAgICAgdW5zaWduZWQgbG9uZyAqb25wLCB1bnNpZ25lZCBsb25nICpvZmZwKVxcbit7XFxuK1xcdHN0cnVjdCB5dDkyMXhfcG9ydCAqcHAgPSBcXHUwMDI2cHJpdi1cXHUwMDNlcG9ydHNbcG9ydF07XFxuK1xcdHN0cnVjdCB5dDkyMXhfbGVkICpsZWQgPSBwcC1cXHUwMDNlbGVkc1tncm91cF07XFxuK1xcdHVuc2lnbmVkIHNob3J0IGN5Y2xlO1xcbitcXHR1bnNpZ25lZCBjaGFyIGR1dHk7XFxuK1xcdGJvb2wgdXNlX2N5Y2xlO1xcbitcXHR1MzIgY3RybDtcXG4rXFx0dTMyIG1hc2s7XFxuK1xcdHUzMiB2YWw7XFxuK1xcdGludCByZXM7XFxuK1xcbitcXHRpZiAoISpvbnAgXFx1MDAyNlxcdTAwMjYgISpvZmZwKSB7XFxuK1xcdFxcdGN5Y2xlID0gWVQ5MjFYX0xFRF9CTElOS19ERUY7XFxuK1xcdFxcdGR1dHkgPSBZVDkyMVhfTEVEX0RVVFkoMSwgMik7XFxuK1xcdFxcdGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIFxcdTAwM2MgWVQ5MjFYX0xFRF9HUk9VUF9OVU07IGkrKylcXG4rXFx0XFx0XFx0aWYgKGkgIT0gZ3JvdXAgXFx1MDAyNlxcdTAwMjYgcHAtXFx1MDAzZWxlZHNbaV0gXFx1MDAyNlxcdTAwMjZcXG4rXFx0XFx0XFx0ICAgIHBwLVxcdTAwM2VsZWRzW2ldLVxcdTAwM2V1c2VfZHV0eSkge1xcbitcXHRcXHRcXHRcXHRkdXR5ID0gcHAtXFx1MDAzZWxlZF9kdXR5O1xcbitcXHRcXHRcXHRcXHRicmVhaztcXG4rXFx0XFx0XFx0fVxcbitcXG4rXFx0XFx0dXNlX2N5Y2xlID0gZmFsc2U7XFxuK1xcdH0gZWxzZSB7XFxuK1xcdFxcdGJvb2wgY2hhbmdlX2N5Y2xlO1xcbitcXHRcXHRib29sIGNoYW5nZV9kdXR5O1xcbitcXG4rXFx0XFx0cmVzID0geXQ5MjF4X2xlZF9ibGlua19zZWxlY3QocHJpdiwgKm9ucCwgKm9mZnAsIFxcdTAwMjZjeWNsZSwgXFx1MDAyNmR1dHkpO1xcbitcXHRcXHRpZiAocmVzKVxcbitcXHRcXHRcXHRyZXR1cm4gcmVzO1xcbitcXG4rXFx0XFx0dXNlX2N5Y2xlID0gY3ljbGUgXFx1MDAzYyBZVDkyMVhfTEVEX0JMSU5LX0RFRjtcXG4rXFx0XFx0Y2hhbmdlX2N5Y2xlID0gdXNlX2N5Y2xlIFxcdTAwMjZcXHUwMDI2IGN5Y2xlICE9IHBwLVxcdTAwM2VsZWRfY3ljbGU7XFxuK1xcdFxcdGNoYW5nZV9kdXR5ID0gZHV0eSAhPSBwcC1cXHUwMDNlbGVkX2R1dHk7XFxuK1xcdFxcdGlmIChjaGFuZ2VfY3ljbGUgfHwgY2hhbmdlX2R1dHkpXFxuK1xcdFxcdFxcdGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIFxcdTAwM2MgWVQ5MjFYX0xFRF9HUk9VUF9OVU07XFxuK1xcdFxcdFxcdCAgICAgaSsrKSB7XFxuK1xcdFxcdFxcdFxcdGlmIChpID09IGdyb3VwIHx8ICFwcC1cXHUwMDNlbGVkc1tpXSlcXG4rXFx0XFx0XFx0XFx0XFx0Y29udGludWU7XFxuK1xcdFxcdFxcdFxcdGlmICgoY2hhbmdlX2N5Y2xlIFxcdTAwMjZcXHUwMDI2IHBwLVxcdTAwM2VsZWRzW2ldLVxcdTAwM2V1c2VfY3ljbGUpIHx8XFxuK1xcdFxcdFxcdFxcdCAgICAoY2hhbmdlX2R1dHkgXFx1MDAyNlxcdTAwMjYgcHAtXFx1MDAzZWxlZHNbaV0tXFx1MDAzZXVzZV9kdXR5KSlcXG4rXFx0XFx0XFx0XFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbitcXHRcXHRcXHR9XFxuK1xcdH1cXG4rXFxuK1xcdC8qIFRoZSBjaGlwIHNlZW1zIHRvIGphbSBhIHdoaWxlIGlmIGNoYW5naW5nIGR1dHkgZGlyZWN0bHkgKi9cXG4rXFx0cmVzID0geXQ5MjF4X3JlZ19yZWFkKHByaXYsIFlUOTIxWF9MRUQyX1BPUlRuKHBvcnQpLCBcXHUwMDI2dmFsKTtcXG4rXFx0aWYgKHJlcylcXG4rXFx0XFx0cmV0dXJuIHJlcztcXG4rXFxuK1xcdGN0cmwgPSB2YWwgXFx1MDAyNiB+WVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW5fTShncm91cCk7XFxuK1xcdGN0cmwgfD0gWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW5fRE9OVENBUkUoZ3JvdXApO1xcbitcXHRpZiAodmFsICE9IGN0cmwpIHtcXG4rXFx0XFx0cmVzID0geXQ5MjF4X3JlZ193cml0ZShwcml2LCBZVDkyMVhfTEVEMl9QT1JUbihwb3J0KSwgY3RybCk7XFxuK1xcdFxcdGlmIChyZXMpXFxuK1xcdFxcdFxcdHJldHVybiByZXM7XFxuK1xcdH1cXG4rXFxuK1xcdG1hc2sgPSBZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFlfTSB8IFlUOTIxWF9MRUQxX1BPUlRfQkxJTktfRFVUWV9DT01QO1xcbitcXHRzd2l0Y2ggKGR1dHkgXFx1MDAzZT0gWVQ5MjFYX0xFRF9EVVRZKDEsIDIpID8gZHV0eSA6XFxuK1xcdFxcdFlUOTIxWF9MRURfRFVUWV9ERU5PTSAtIGR1dHkpIHtcXG4rXFx0ZGVmYXVsdDpcXG4rXFx0XFx0ZHV0eSA9IFlUOTIxWF9MRURfRFVUWSgxLCAyKTtcXG4rXFx0XFx0ZmFsbHRocm91Z2g7XFxuK1xcdGNhc2UgWVQ5MjFYX0xFRF9EVVRZKDEsIDIpOlxcbitcXHRcXHRjdHJsID0gWVQ5MjFYX0xFRDFfUE9SVF9CTElOS19EVVRZXzFfMjtcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdGNhc2UgWVQ5MjFYX0xFRF9EVVRZKDIsIDMpOlxcbitcXHRcXHRjdHJsID0gWVQ5MjFYX0xFRDFfUE9SVF9CTElOS19EVVRZXzJfMztcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdGNhc2UgWVQ5MjFYX0xFRF9EVVRZKDMsIDQpOlxcbitcXHRcXHRjdHJsID0gWVQ5MjFYX0xFRDFfUE9SVF9CTElOS19EVVRZXzNfNDtcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdGNhc2UgWVQ5MjFYX0xFRF9EVVRZKDUsIDYpOlxcbitcXHRcXHRjdHJsID0gWVQ5MjFYX0xFRDFfUE9SVF9CTElOS19EVVRZXzVfNjtcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdH1cXG4rXFx0aWYgKGR1dHkgXFx1MDAzYyBZVDkyMVhfTEVEX0RVVFkoMSwgMikpXFxuK1xcdFxcdGN0cmwgfD0gWVQ5MjFYX0xFRDFfUE9SVF9CTElOS19EVVRZX0NPTVA7XFxuK1xcdGlmICh1c2VfY3ljbGUpIHtcXG4rXFx0XFx0bWFzayB8PSBZVDkyMVhfTEVEMV9QT1JUX09USEVSX0JMSU5LX007XFxuK1xcdFxcdGN0cmwgfD0gWVQ5MjFYX0xFRDFfUE9SVF9PVEhFUl9CTElOSyg5IC0gX19mbHMoY3ljbGUpKTtcXG4rXFx0fVxcbitcXHRyZXMgPSB5dDkyMXhfcmVnX3VwZGF0ZV9iaXRzKHByaXYsIFlUOTIxWF9MRUQxX1BPUlRuKHBvcnQpLCBtYXNrLCBjdHJsKTtcXG4rXFx0aWYgKHJlcylcXG4rXFx0XFx0cmV0dXJuIHJlcztcXG4rXFxuK1xcdGN0cmwgPSB2YWwgXFx1MDAyNiB+KFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuX00oZ3JvdXApIHxcXG4rXFx0XFx0ICAgICAgIFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VfQkxJTktuX00oZ3JvdXApKTtcXG4rXFx0Y3RybCB8PSBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbl9CTElOSyhncm91cCk7XFxuK1xcdGlmICh1c2VfY3ljbGUpXFxuK1xcdFxcdGN0cmwgfD0gWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRV9CTElOS25fT1RIRVIoZ3JvdXApO1xcbitcXHRlbHNlXFxuK1xcdFxcdGN0cmwgfD0gWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRV9CTElOS24oZ3JvdXAsIF9fZmxzKGN5Y2xlKSAtIDkpO1xcbitcXHRyZXMgPSB5dDkyMXhfcmVnX3dyaXRlKHByaXYsIFlUOTIxWF9MRUQyX1BPUlRuKHBvcnQpLCBjdHJsKTtcXG4rXFx0aWYgKHJlcylcXG4rXFx0XFx0cmV0dXJuIHJlcztcXG4rXFxuK1xcdGxlZC1cXHUwMDNldXNlX2N5Y2xlID0gdXNlX2N5Y2xlO1xcbitcXHRpZiAodXNlX2N5Y2xlKVxcbitcXHRcXHRwcC1cXHUwMDNlbGVkX2N5Y2xlID0gY3ljbGU7XFxuK1xcdGxlZC1cXHUwMDNldXNlX2R1dHkgPSB0cnVlO1xcbitcXHRwcC1cXHUwMDNlbGVkX2R1dHkgPSBkdXR5O1xcbitcXG4rXFx0Km9ucCA9IERJVl9ST1VORF9DTE9TRVNUKGR1dHkgKiBjeWNsZSwgWVQ5MjFYX0xFRF9EVVRZX0RFTk9NKTtcXG4rXFx0Km9mZnAgPSBjeWNsZSAtICpvbnA7XFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitzdHJ1Y3QgeXQ5MjF4X2xlZF90cmlnZ2VyX21hcCB7XFxuK1xcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XFxuK1xcdHUzMiBtYXNrO1xcbit9O1xcbitcXG4rc3RhdGljIGNvbnN0IHN0cnVjdCB5dDkyMXhfbGVkX3RyaWdnZXJfbWFwIHl0OTIxeF9sZWRfdHJpZ2dlcl9tYXBzW10gPSB7XFxuK1xcdHtCSVQoVFJJR0dFUl9ORVRERVZfTElOSyksXFxuK1xcdCBZVDkyMVhfTEVEeF9QT1JUX0FDVF9EVVBMRVhfSEFMRiB8IFlUOTIxWF9MRUR4X1BPUlRfQUNUX0RVUExFWF9GVUxMfSxcXG4rXFx0e0JJVChUUklHR0VSX05FVERFVl9MSU5LXzEwKSwgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfMTBNfSxcXG4rXFx0e0JJVChUUklHR0VSX05FVERFVl9MSU5LXzEwMCksIFlUOTIxWF9MRUR4X1BPUlRfQUNUXzEwME19LFxcbitcXHR7QklUKFRSSUdHRVJfTkVUREVWX0xJTktfMTAwMCksIFlUOTIxWF9MRUR4X1BPUlRfQUNUXzEwMDBNfSxcXG4rXFx0e0JJVChUUklHR0VSX05FVERFVl9IQUxGX0RVUExFWCksIFlUOTIxWF9MRUR4X1BPUlRfQUNUX0RVUExFWF9IQUxGfSxcXG4rXFx0e0JJVChUUklHR0VSX05FVERFVl9GVUxMX0RVUExFWCksIFlUOTIxWF9MRUR4X1BPUlRfQUNUX0RVUExFWF9GVUxMfSxcXG4rXFx0e0JJVChUUklHR0VSX05FVERFVl9UWCksIFlUOTIxWF9MRUR4X1BPUlRfQUNUX1RYX0JMSU5LfSxcXG4rXFx0e0JJVChUUklHR0VSX05FVERFVl9SWCksIFlUOTIxWF9MRUR4X1BPUlRfQUNUX1JYX0JMSU5LfSxcXG4rXFx0e0JJVChUUklHR0VSX05FVERFVl9UWF9FUlIpIHwgQklUKFRSSUdHRVJfTkVUREVWX1JYX0VSUiksXFxuK1xcdCBZVDkyMVhfTEVEeF9QT1JUX0FDVF9DT0xMSVNJT05fQkxJTkt9LFxcbit9O1xcbitcXG4rc3RhdGljIGJvb2xcXG4reXQ5MjF4X2xlZF90cmlnZ2VyX2lzX3N1cHBvcnRlZChjb25zdCBzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIGludCBwb3J0LFxcbitcXHRcXHRcXHRcXHRpbnQgZ3JvdXAsIHVuc2lnbmVkIGxvbmcgZmxhZ3MpXFxuK3tcXG4rXFx0aWYgKCFmbGFncylcXG4rXFx0XFx0cmV0dXJuIHRydWU7XFxuK1xcbitcXHRmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSBcXHUwMDNjIEFSUkFZX1NJWkUoeXQ5MjF4X2xlZF90cmlnZ2VyX21hcHMpOyBpKyspIHtcXG4rXFx0XFx0Y29uc3Qgc3RydWN0IHl0OTIxeF9sZWRfdHJpZ2dlcl9tYXAgKm1hcCA9IFxcdTAwMjZ5dDkyMXhfbGVkX3RyaWdnZXJfbWFwc1tpXTtcXG4rXFxuK1xcdFxcdGlmICgoZmxhZ3MgXFx1MDAyNiBtYXAtXFx1MDAzZWZsYWdzKSA9PSBtYXAtXFx1MDAzZWZsYWdzKSB7XFxuK1xcdFxcdFxcdGZsYWdzIFxcdTAwMjY9IH5tYXAtXFx1MDAzZWZsYWdzO1xcbitcXHRcXHRcXHRpZiAoIWZsYWdzKVxcbitcXHRcXHRcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4rXFx0XFx0fVxcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gZmFsc2U7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnRcXG4reXQ5MjF4X2xlZF90cmlnZ2VyX2dldChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIGludCBwb3J0LCBpbnQgZ3JvdXAsXFxuK1xcdFxcdCAgICAgICB1bnNpZ25lZCBsb25nICpmbGFnc3ApXFxuK3tcXG4rXFx0dTMyIGFkZHI7XFxuK1xcdHUzMiB2YWw7XFxuK1xcdGludCByZXM7XFxuK1xcbitcXHRyZXMgPSB5dDkyMXhfcmVnX3JlYWQocHJpdiwgWVQ5MjFYX0xFRDJfUE9SVG4ocG9ydCksIFxcdTAwMjZ2YWwpO1xcbitcXHRpZiAocmVzKVxcbitcXHRcXHRyZXR1cm4gcmVzO1xcbitcXG4rXFx0aWYgKCh2YWwgXFx1MDAyNiBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbl9NKGdyb3VwKSkgIT1cXG4rXFx0ICAgIFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuX0RPTlRDQVJFKGdyb3VwKSkge1xcbitcXHRcXHQqZmxhZ3NwID0gMDtcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcdH1cXG4rXFxuK1xcdGlmIChncm91cCAhPSAyKSB7XFxuK1xcdFxcdGFkZHIgPSB5dDkyMXhfbGVkX3JlZ2FkZHIocHJpdiwgcG9ydCwgZ3JvdXApO1xcbitcXHRcXHRyZXMgPSB5dDkyMXhfcmVnX3JlYWQocHJpdiwgYWRkciwgXFx1MDAyNnZhbCk7XFxuK1xcdFxcdGlmIChyZXMpXFxuK1xcdFxcdFxcdHJldHVybiByZXM7XFxuK1xcdH1cXG4rXFxuK1xcdCpmbGFnc3AgPSAwO1xcbitcXHRmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSBcXHUwMDNjIEFSUkFZX1NJWkUoeXQ5MjF4X2xlZF90cmlnZ2VyX21hcHMpOyBpKyspIHtcXG4rXFx0XFx0Y29uc3Qgc3RydWN0IHl0OTIxeF9sZWRfdHJpZ2dlcl9tYXAgKm1hcCA9IFxcdTAwMjZ5dDkyMXhfbGVkX3RyaWdnZXJfbWFwc1tpXTtcXG4rXFxuK1xcdFxcdGlmICgodmFsIFxcdTAwMjYgbWFwLVxcdTAwM2VtYXNrKSA9PSBtYXAtXFx1MDAzZW1hc2spXFxuK1xcdFxcdFxcdCpmbGFnc3AgfD0gbWFwLVxcdTAwM2VmbGFncztcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnRcXG4reXQ5MjF4X2xlZF90cmlnZ2VyX3NldChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIGludCBwb3J0LCBpbnQgZ3JvdXAsXFxuK1xcdFxcdCAgICAgICB1bnNpZ25lZCBsb25nIGZsYWdzKVxcbit7XFxuK1xcdHN0cnVjdCB5dDkyMXhfcG9ydCAqcHAgPSBcXHUwMDI2cHJpdi1cXHUwMDNlcG9ydHNbcG9ydF07XFxuK1xcdHN0cnVjdCB5dDkyMXhfbGVkICpsZWQgPSBwcC1cXHUwMDNlbGVkc1tncm91cF07XFxuK1xcdHUzMiBhZGRyO1xcbitcXHR1MzIgY3RybDtcXG4rXFx0dTMyIG1hc2s7XFxuK1xcdGludCByZXM7XFxuK1xcbitcXHRjdHJsID0gMDtcXG4rXFx0Zm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgXFx1MDAzYyBBUlJBWV9TSVpFKHl0OTIxeF9sZWRfdHJpZ2dlcl9tYXBzKTsgaSsrKSB7XFxuK1xcdFxcdGNvbnN0IHN0cnVjdCB5dDkyMXhfbGVkX3RyaWdnZXJfbWFwICptYXAgPSBcXHUwMDI2eXQ5MjF4X2xlZF90cmlnZ2VyX21hcHNbaV07XFxuK1xcbitcXHRcXHRpZiAoKGZsYWdzIFxcdTAwMjYgbWFwLVxcdTAwM2VmbGFncykgPT0gbWFwLVxcdTAwM2VmbGFncykge1xcbitcXHRcXHRcXHRmbGFncyBcXHUwMDI2PSB+bWFwLVxcdTAwM2VmbGFncztcXG4rXFx0XFx0XFx0Y3RybCB8PSBtYXAtXFx1MDAzZW1hc2s7XFxuK1xcdFxcdFxcdGlmICghZmxhZ3MpXFxuK1xcdFxcdFxcdFxcdGJyZWFrO1xcbitcXHRcXHR9XFxuK1xcdH1cXG4rXFx0aWYgKGZsYWdzKVxcbitcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuK1xcbitcXHRsZWQtXFx1MDAzZXVzZV9jeWNsZSA9IGZhbHNlO1xcbitcXHRsZWQtXFx1MDAzZXVzZV9kdXR5ID0gZmFsc2U7XFxuK1xcbitcXHRtYXNrID0gIWdyb3VwID8gWVQ5MjFYX0xFRDBfUE9SVF9BQ1RfTSA6IFlUOTIxWF9MRUR4X1BPUlRfQUNUX007XFxuK1xcdGlmIChncm91cCA9PSAyKSB7XFxuK1xcdFxcdG1hc2sgfD0gWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW5fTShncm91cCk7XFxuK1xcdFxcdGN0cmwgfD0gWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW5fRE9OVENBUkUoZ3JvdXApO1xcbitcXHR9XFxuK1xcdGFkZHIgPSB5dDkyMXhfbGVkX3JlZ2FkZHIocHJpdiwgcG9ydCwgZ3JvdXApO1xcbitcXHRyZXMgPSB5dDkyMXhfcmVnX3VwZGF0ZV9iaXRzKHByaXYsIGFkZHIsIG1hc2ssIGN0cmwpO1xcbitcXHRpZiAocmVzKVxcbitcXHRcXHRyZXR1cm4gcmVzO1xcbitcXG4rXFx0aWYgKGdyb3VwICE9IDIpIHtcXG4rXFx0XFx0bWFzayA9IFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuX00oZ3JvdXApO1xcbitcXHRcXHRjdHJsID0gWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW5fRE9OVENBUkUoZ3JvdXApO1xcbitcXHRcXHRyZXMgPSB5dDkyMXhfcmVnX3VwZGF0ZV9iaXRzKHByaXYsIFlUOTIxWF9MRUQyX1BPUlRuKHBvcnQpLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgIG1hc2ssIGN0cmwpO1xcbitcXHRcXHRpZiAocmVzKVxcbitcXHRcXHRcXHRyZXR1cm4gcmVzO1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rc3RhdGljIGludFxcbit5dDkyMXhfY2xlZF9icmlnaHRuZXNzX3NldF9ibG9ja2luZyhzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldixcXG4rXFx0XFx0XFx0XFx0ICAgIGVudW0gbGVkX2JyaWdodG5lc3MgYnJpZ2h0bmVzcylcXG4re1xcbitcXHRzdHJ1Y3QgeXQ5MjF4X2xlZCAqbGVkID0gdG9feXQ5MjF4X2xlZChsZWRfY2Rldik7XFxuK1xcdHN0cnVjdCB5dDkyMXhfcG9ydCAqcHAgPSB0b195dDkyMXhfcG9ydChsZWQpO1xcbitcXHRzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYgPSB0b195dDkyMXhfcHJpdihwcCk7XFxuK1xcdGludCByZXM7XFxuK1xcbitcXHRtdXRleF9sb2NrKFxcdTAwMjZwcml2LVxcdTAwM2VyZWdfbG9jayk7XFxuK1xcdHJlcyA9IHl0OTIxeF9sZWRfZm9yY2Vfc2V0KHByaXYsIHBwLVxcdTAwM2VpbmRleCwgbGVkLVxcdTAwM2Vncm91cCwgYnJpZ2h0bmVzcyk7XFxuK1xcdG11dGV4X3VubG9jayhcXHUwMDI2cHJpdi1cXHUwMDNlcmVnX2xvY2spO1xcbitcXG4rXFx0cmV0dXJuIHJlcztcXG4rfVxcbitcXG4rc3RhdGljIGludFxcbit5dDkyMXhfY2xlZF9ibGlua19zZXQoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYsIHVuc2lnbmVkIGxvbmcgKmRlbGF5X29uLFxcbitcXHRcXHQgICAgICB1bnNpZ25lZCBsb25nICpkZWxheV9vZmYpXFxuK3tcXG4rXFx0c3RydWN0IHl0OTIxeF9sZWQgKmxlZCA9IHRvX3l0OTIxeF9sZWQobGVkX2NkZXYpO1xcbitcXHRzdHJ1Y3QgeXQ5MjF4X3BvcnQgKnBwID0gdG9feXQ5MjF4X3BvcnQobGVkKTtcXG4rXFx0c3RydWN0IHl0OTIxeF9wcml2ICpwcml2ID0gdG9feXQ5MjF4X3ByaXYocHApO1xcbitcXHRpbnQgcmVzO1xcbitcXG4rXFx0bXV0ZXhfbG9jayhcXHUwMDI2cHJpdi1cXHUwMDNlcmVnX2xvY2spO1xcbitcXHRyZXMgPSB5dDkyMXhfbGVkX2JsaW5rX3NldChwcml2LCBwcC1cXHUwMDNlaW5kZXgsIGxlZC1cXHUwMDNlZ3JvdXAsIGRlbGF5X29uLFxcbitcXHRcXHRcXHRcXHQgICBkZWxheV9vZmYpO1xcbitcXHRtdXRleF91bmxvY2soXFx1MDAyNnByaXYtXFx1MDAzZXJlZ19sb2NrKTtcXG4rXFxuK1xcdHJldHVybiByZXM7XFxuK31cXG4rXFxuK3N0YXRpYyBzdHJ1Y3QgZGV2aWNlICogX19tYXliZV91bnVzZWRcXG4reXQ5MjF4X2NsZWRfaHdfY29udHJvbF9nZXRfZGV2aWNlKHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2KVxcbit7XFxuK1xcdHN0cnVjdCB5dDkyMXhfbGVkICpsZWQgPSB0b195dDkyMXhfbGVkKGxlZF9jZGV2KTtcXG4rXFx0c3RydWN0IHl0OTIxeF9wb3J0ICpwcCA9IHRvX3l0OTIxeF9wb3J0KGxlZCk7XFxuK1xcdHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiA9IHRvX3l0OTIxeF9wcml2KHBwKTtcXG4rXFx0c3RydWN0IGRzYV9wb3J0ICpkcDtcXG4rXFxuK1xcdGRwID0gZHNhX3RvX3BvcnQoXFx1MDAyNnByaXYtXFx1MDAzZWRzLCBwcC1cXHUwMDNlaW5kZXgpO1xcbitcXHRpZiAoIWRwKVxcbitcXHRcXHRyZXR1cm4gTlVMTDtcXG4rXFxuK1xcdGlmIChkc2FfcG9ydF9pc191c2VyKGRwKSlcXG4rXFx0XFx0cmV0dXJuIFxcdTAwMjZkcC1cXHUwMDNldXNlci1cXHUwMDNlZGV2O1xcbitcXHRpZiAoZHNhX3BvcnRfaXNfY3B1KGRwKSlcXG4rXFx0XFx0cmV0dXJuIFxcdTAwMjZkcC1cXHUwMDNlY29uZHVpdC1cXHUwMDNlZGV2O1xcbitcXG4rXFx0cmV0dXJuIE5VTEw7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgX19tYXliZV91bnVzZWRcXG4reXQ5MjF4X2NsZWRfaHdfY29udHJvbF9pc19zdXBwb3J0ZWQoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYsXFxuK1xcdFxcdFxcdFxcdCAgICB1bnNpZ25lZCBsb25nIGZsYWdzKVxcbit7XFxuK1xcdHN0cnVjdCB5dDkyMXhfbGVkICpsZWQgPSB0b195dDkyMXhfbGVkKGxlZF9jZGV2KTtcXG4rXFx0c3RydWN0IHl0OTIxeF9wb3J0ICpwcCA9IHRvX3l0OTIxeF9wb3J0KGxlZCk7XFxuK1xcdHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiA9IHRvX3l0OTIxeF9wcml2KHBwKTtcXG4rXFxuK1xcdGlmICh5dDkyMXhfbGVkX3RyaWdnZXJfaXNfc3VwcG9ydGVkKHByaXYsIHBwLVxcdTAwM2VpbmRleCwgbGVkLVxcdTAwM2Vncm91cCwgZmxhZ3MpKVxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IF9fbWF5YmVfdW51c2VkXFxuK3l0OTIxeF9jbGVkX2h3X2NvbnRyb2xfZ2V0KHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2LCB1bnNpZ25lZCBsb25nICpmbGFnc3ApXFxuK3tcXG4rXFx0c3RydWN0IHl0OTIxeF9sZWQgKmxlZCA9IHRvX3l0OTIxeF9sZWQobGVkX2NkZXYpO1xcbitcXHRzdHJ1Y3QgeXQ5MjF4X3BvcnQgKnBwID0gdG9feXQ5MjF4X3BvcnQobGVkKTtcXG4rXFx0c3RydWN0IHl0OTIxeF9wcml2ICpwcml2ID0gdG9feXQ5MjF4X3ByaXYocHApO1xcbitcXHRpbnQgcmVzO1xcbitcXG4rXFx0bXV0ZXhfbG9jayhcXHUwMDI2cHJpdi1cXHUwMDNlcmVnX2xvY2spO1xcbitcXHRyZXMgPSB5dDkyMXhfbGVkX3RyaWdnZXJfZ2V0KHByaXYsIHBwLVxcdTAwM2VpbmRleCwgbGVkLVxcdTAwM2Vncm91cCwgZmxhZ3NwKTtcXG4rXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZwcml2LVxcdTAwM2VyZWdfbG9jayk7XFxuK1xcbitcXHRyZXR1cm4gcmVzO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IF9fbWF5YmVfdW51c2VkXFxuK3l0OTIxeF9jbGVkX2h3X2NvbnRyb2xfc2V0KHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2LCB1bnNpZ25lZCBsb25nIGZsYWdzKVxcbit7XFxuK1xcdHN0cnVjdCB5dDkyMXhfbGVkICpsZWQgPSB0b195dDkyMXhfbGVkKGxlZF9jZGV2KTtcXG4rXFx0c3RydWN0IHl0OTIxeF9wb3J0ICpwcCA9IHRvX3l0OTIxeF9wb3J0KGxlZCk7XFxuK1xcdHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiA9IHRvX3l0OTIxeF9wcml2KHBwKTtcXG4rXFx0aW50IHJlcztcXG4rXFxuK1xcdG11dGV4X2xvY2soXFx1MDAyNnByaXYtXFx1MDAzZXJlZ19sb2NrKTtcXG4rXFx0cmVzID0geXQ5MjF4X2xlZF90cmlnZ2VyX3NldChwcml2LCBwcC1cXHUwMDNlaW5kZXgsIGxlZC1cXHUwMDNlZ3JvdXAsIGZsYWdzKTtcXG4rXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZwcml2LVxcdTAwM2VyZWdfbG9jayk7XFxuK1xcbitcXHRyZXR1cm4gcmVzO1xcbit9XFxuK1xcbitzdGF0aWMgaW50XFxuK3l0OTIxeF9sZWRfc2V0dXAoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCBpbnQgcG9ydCxcXG4rXFx0XFx0IHN0cnVjdCBmd25vZGVfaGFuZGxlICpmd25vZGUpXFxuK3tcXG4rXFx0c3RydWN0IHl0OTIxeF9wb3J0ICpwcCA9IFxcdTAwMjZwcml2LVxcdTAwM2Vwb3J0c1twb3J0XTtcXG4rXFx0c3RydWN0IGRldmljZSAqZGV2ID0gdG9fZGV2aWNlKHByaXYpO1xcbitcXHRzdHJ1Y3QgbGVkX2luaXRfZGF0YSBpbml0X2RhdGE7XFxuK1xcdHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2O1xcbitcXHRjaGFyIG5hbWVbTEVEX01BWF9OQU1FX1NJWkVdO1xcbitcXHRlbnVtIGxlZF9kZWZhdWx0X3N0YXRlIHN0YXRlO1xcbitcXHRzdHJ1Y3QgeXQ5MjF4X2xlZCAqbGVkO1xcbitcXHRib29sIGZvcmNlX2hpZ2g7XFxuK1xcdGJvb2wgZm9yY2VfbG93O1xcbitcXHR1MzIgZ3JvdXA7XFxuK1xcdHUzMiBtYXNrO1xcbitcXHR1MzIgY3RybDtcXG4rXFx0dTMyIHZhbDtcXG4rXFx0Ym9vbCBvbjtcXG4rXFx0aW50IHJlcztcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdHJlcyA9IGZ3bm9kZV9wcm9wZXJ0eV9yZWFkX3UzMihmd25vZGUsIFxcXCJyZWdcXFwiLCBcXHUwMDI2Z3JvdXApO1xcbitcXHRpZiAocmVzKVxcbitcXHRcXHRyZXR1cm4gcmVzO1xcbitcXHRpZiAoZ3JvdXAgXFx1MDAzZT0gWVQ5MjFYX0xFRF9HUk9VUF9OVU0pIHtcXG4rXFx0XFx0ZGV2X2VycihkZXYsIFxcXCJJbnZhbGlkIExFRCByZWcgJXUgZm9yIHBvcnQgJWRcXFxcblxcXCIsIGdyb3VwLCBwb3J0KTtcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcdH1cXG4rXFx0aWYgKHBwLVxcdTAwM2VsZWRzW2dyb3VwXSlcXG4rXFx0XFx0cmV0dXJuIC1FRVhJU1Q7XFxuK1xcbitcXHRmb3JjZV9oaWdoID0gZndub2RlX3Byb3BlcnR5X3JlYWRfYm9vbChmd25vZGUsIFxcXCJhY3RpdmUtaGlnaFxcXCIpO1xcbitcXHRmb3JjZV9sb3cgPSBmd25vZGVfcHJvcGVydHlfcmVhZF9ib29sKGZ3bm9kZSwgXFxcImFjdGl2ZS1sb3dcXFwiKTtcXG4rXFx0aWYgKGZvcmNlX2hpZ2ggXFx1MDAyNlxcdTAwMjYgZm9yY2VfbG93KSB7XFxuK1xcdFxcdGRldl9lcnIoZGV2LCBcXFwiRHVwbGljYXRlIHBvbGFyaXRpZXMgZm9yIExFRCAlMDJkOiUwMnVcXFxcblxcXCIsXFxuK1xcdFxcdFxcdHBvcnQsIGdyb3VwKTtcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcdH1cXG4rXFxuK1xcdGxlZCA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZigqbGVkKSwgR0ZQX0tFUk5FTCk7XFxuK1xcdGlmICghbGVkKVxcbitcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4rXFx0bGVkLVxcdTAwM2Vwb3J0ID0gcHA7XFxuK1xcdGxlZC1cXHUwMDNlZ3JvdXAgPSBncm91cDtcXG4rXFxuK1xcdHN0YXRlID0gbGVkX2luaXRfZGVmYXVsdF9zdGF0ZV9nZXQoZndub2RlKTtcXG4rXFxuK1xcdG11dGV4X2xvY2soXFx1MDAyNnByaXYtXFx1MDAzZXJlZ19sb2NrKTtcXG4rXFxuK1xcdC8qIEludmVyc2lvbiBpcyBpbnRlcm5hbCAtIGZvcmNlIG9uIHdpbGwgZ2l2ZSBsb3cgbG9naWMuXFxuK1xcdCAqIEluIHRoZSByZXN0IG9mIHRoZSBmaWxlLCB0cmVhdCBMRURzIGFzIGlmIGFjdGl2ZS1sb3cuXFxuK1xcdCAqL1xcbitcXHRpZiAoZm9yY2VfaGlnaCB8fCBmb3JjZV9sb3cpIHtcXG4rXFx0XFx0cmVzID0geXQ5MjF4X3JlZ19yZWFkKHByaXYsIFlUOTIxWF9MRURfUEFSX0lOViwgXFx1MDAyNnZhbCk7XFxuK1xcdFxcdGlmIChyZXMpXFxuK1xcdFxcdFxcdGdvdG8gdW5sb2NrO1xcbitcXG4rXFx0XFx0bWFzayA9IFlUOTIxWF9MRURfUEFSX0lOVl9JTlZubShncm91cCwgcG9ydCk7XFxuK1xcdFxcdGN0cmwgPSBmb3JjZV9oaWdoID8gdmFsIHwgbWFzayA6IHZhbCBcXHUwMDI2IH5tYXNrO1xcbitcXHRcXHRyZXMgPSB5dDkyMXhfcmVnX3dyaXRlKHByaXYsIFlUOTIxWF9MRURfUEFSX0lOViwgY3RybCk7XFxuK1xcdFxcdGlmIChyZXMpXFxuK1xcdFxcdFxcdGdvdG8gdW5sb2NrO1xcbitcXHR9XFxuK1xcbitcXHRwcC1cXHUwMDNlbGVkc1tncm91cF0gPSBsZWQ7XFxuK1xcbitcXHRzd2l0Y2ggKHN0YXRlKSB7XFxuK1xcdGNhc2UgTEVEU19ERUZTVEFURV9PRkY6XFxuK1xcdGNhc2UgTEVEU19ERUZTVEFURV9PTjpcXG4rXFx0ZGVmYXVsdDpcXG4rXFx0XFx0b24gPSBzdGF0ZSA9PSBMRURTX0RFRlNUQVRFX09OO1xcbitcXHRcXHRyZXMgPSB5dDkyMXhfbGVkX2ZvcmNlX3NldChwcml2LCBwb3J0LCBncm91cCwgb24pO1xcbitcXHRcXHRicmVhaztcXG4rXFx0Y2FzZSBMRURTX0RFRlNUQVRFX0tFRVA6XFxuK1xcdFxcdHJlcyA9IHl0OTIxeF9sZWRfZm9yY2VfZ2V0KHByaXYsIHBvcnQsIGdyb3VwLCBcXHUwMDI2b24pO1xcbitcXHRcXHRicmVhaztcXG4rXFx0fVxcbitcXG4rdW5sb2NrOlxcbitcXHRtdXRleF91bmxvY2soXFx1MDAyNnByaXYtXFx1MDAzZXJlZ19sb2NrKTtcXG4rXFx0aWYgKHJlcylcXG4rXFx0XFx0Z290byBlcnI7XFxuK1xcbitcXHRsZWRfY2RldiA9IFxcdTAwMjZsZWQtXFx1MDAzZWNkZXY7XFxuK1xcdGxlZF9jZGV2LVxcdTAwM2VicmlnaHRuZXNzID0gb247XFxuK1xcdGxlZF9jZGV2LVxcdTAwM2VtYXhfYnJpZ2h0bmVzcyA9IDE7XFxuK1xcdGxlZF9jZGV2LVxcdTAwM2VmbGFncyA9IExFRF9SRVRBSU5fQVRfU0hVVERPV047XFxuK1xcdGxlZF9jZGV2LVxcdTAwM2VicmlnaHRuZXNzX3NldF9ibG9ja2luZyA9IHl0OTIxeF9jbGVkX2JyaWdodG5lc3Nfc2V0X2Jsb2NraW5nO1xcbitcXHRsZWRfY2Rldi1cXHUwMDNlYmxpbmtfc2V0ID0geXQ5MjF4X2NsZWRfYmxpbmtfc2V0O1xcbisjaWZkZWYgQ09ORklHX0xFRFNfVFJJR0dFUlNcXG4rXFx0bGVkX2NkZXYtXFx1MDAzZWh3X2NvbnRyb2xfdHJpZ2dlciA9IFxcXCJuZXRkZXZcXFwiO1xcbitcXHRsZWRfY2Rldi1cXHUwMDNlaHdfY29udHJvbF9nZXRfZGV2aWNlID0geXQ5MjF4X2NsZWRfaHdfY29udHJvbF9nZXRfZGV2aWNlO1xcbitcXHRsZWRfY2Rldi1cXHUwMDNlaHdfY29udHJvbF9pc19zdXBwb3J0ZWQgPSB5dDkyMXhfY2xlZF9od19jb250cm9sX2lzX3N1cHBvcnRlZDtcXG4rXFx0bGVkX2NkZXYtXFx1MDAzZWh3X2NvbnRyb2xfZ2V0ID0geXQ5MjF4X2NsZWRfaHdfY29udHJvbF9nZXQ7XFxuK1xcdGxlZF9jZGV2LVxcdTAwM2Vod19jb250cm9sX3NldCA9IHl0OTIxeF9jbGVkX2h3X2NvbnRyb2xfc2V0O1xcbisjZW5kaWZcXG4rXFxuK1xcdHNucHJpbnRmKG5hbWUsIHNpemVvZihuYW1lKSwgWVQ5MjFYX05BTUUgXFxcIi0ldTolMDJkOiUwMnVcXFwiLFxcbitcXHRcXHQgcHJpdi1cXHUwMDNlZHMuaW5kZXgsIHBvcnQsIGdyb3VwKTtcXG4rXFx0aW5pdF9kYXRhID0gKHR5cGVvZihpbml0X2RhdGEpKXtcXG4rXFx0XFx0LmZ3bm9kZSA9IGZ3bm9kZSxcXG4rXFx0XFx0LmRlZmF1bHRfbGFiZWwgPSBcXFwiOnBvcnRcXFwiLFxcbitcXHRcXHQuZGV2aWNlbmFtZSA9IG5hbWUsXFxuK1xcdFxcdC5kZXZuYW1lX21hbmRhdG9yeSA9IHRydWUsXFxuK1xcdH07XFxuK1xcdHJlcyA9IGRldm1fbGVkX2NsYXNzZGV2X3JlZ2lzdGVyX2V4dChkZXYsIGxlZF9jZGV2LCBcXHUwMDI2aW5pdF9kYXRhKTtcXG4rXFx0aWYgKHJlcylcXG4rXFx0XFx0Z290byBlcnI7XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rXFxuK2VycjpcXG4rXFx0cmV0ID0gcmVzO1xcbitcXG4rXFx0bXV0ZXhfbG9jayhcXHUwMDI2cHJpdi1cXHUwMDNlcmVnX2xvY2spO1xcbitcXHRpZiAocHAtXFx1MDAzZWxlZHNbZ3JvdXBdKSB7XFxuK1xcdFxcdGlmIChmb3JjZV9oaWdoIHx8IGZvcmNlX2xvdykge1xcbitcXHRcXHRcXHRyZXMgPSB5dDkyMXhfcmVnX3dyaXRlKHByaXYsIFlUOTIxWF9MRURfUEFSX0lOViwgdmFsKTtcXG4rXFx0XFx0XFx0aWYgKHJlcylcXG4rXFx0XFx0XFx0XFx0ZGV2X3dhcm4oZGV2LFxcbitcXHRcXHRcXHRcXHRcXHQgXFxcIkZhaWxlZCB0byByZXZva2UgaW5pdGlhbGl6YXRpb24gZm9yIExFRCAlMDJkOiUwMnVcXFxcblxcXCIsXFxuK1xcdFxcdFxcdFxcdFxcdCBwb3J0LCBncm91cCk7XFxuK1xcdFxcdH1cXG4rXFxuK1xcdFxcdHBwLVxcdTAwM2VsZWRzW2dyb3VwXSA9IE5VTEw7XFxuK1xcdH1cXG4rXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZwcml2LVxcdTAwM2VyZWdfbG9jayk7XFxuK1xcbitcXHRkZXZtX2tmcmVlKGRldiwgbGVkKTtcXG4rXFx0cmV0dXJuIHJldDtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgeXQ5MjF4X2xlZHNfcmVtb3ZlX3BvcnQoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCBpbnQgcG9ydClcXG4re1xcbitcXHRzdHJ1Y3QgeXQ5MjF4X3BvcnQgKnBwID0gXFx1MDAyNnByaXYtXFx1MDAzZXBvcnRzW3BvcnRdO1xcbitcXHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSB0b19kZXZpY2UocHJpdik7XFxuK1xcdGJvb2wgaGFzX2xlZHMgPSBmYWxzZTtcXG4rXFxuK1xcdGZvciAoaW50IGdyb3VwID0gMDsgZ3JvdXAgXFx1MDAzYyBZVDkyMVhfTEVEX0dST1VQX05VTTsgZ3JvdXArKykge1xcbitcXHRcXHRzdHJ1Y3QgeXQ5MjF4X2xlZCAqbGVkID0gcHAtXFx1MDAzZWxlZHNbZ3JvdXBdO1xcbitcXG4rXFx0XFx0aWYgKGxlZCkge1xcbitcXHRcXHRcXHRkZXZtX2xlZF9jbGFzc2Rldl91bnJlZ2lzdGVyKGRldiwgXFx1MDAyNmxlZC1cXHUwMDNlY2Rldik7XFxuK1xcdFxcdFxcdGhhc19sZWRzID0gdHJ1ZTtcXG4rXFx0XFx0fVxcbitcXHR9XFxuK1xcbitcXHRpZiAoIWhhc19sZWRzKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHQvKiBOb3cgbm8gb25lIGNhbiBhY2Nlc3MgdGhlIExFRCBjb250cm9sIGJsb2NrcywgZnJlZSB0aGVtIHdpdGhvdXRcXG4rXFx0ICogaG9sZGluZyB0aGUgbG9jay5cXG4rXFx0ICovXFxuK1xcdGZvciAoaW50IGdyb3VwID0gMDsgZ3JvdXAgXFx1MDAzYyBZVDkyMVhfTEVEX0dST1VQX05VTTsgZ3JvdXArKykge1xcbitcXHRcXHRzdHJ1Y3QgeXQ5MjF4X2xlZCAqbGVkID0gcHAtXFx1MDAzZWxlZHNbZ3JvdXBdO1xcbitcXG4rXFx0XFx0aWYgKGxlZCkge1xcbitcXHRcXHRcXHRwcC1cXHUwMDNlbGVkc1tncm91cF0gPSBOVUxMO1xcbitcXHRcXHRcXHRkZXZtX2tmcmVlKGRldiwgbGVkKTtcXG4rXFx0XFx0fVxcbitcXHR9XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgeXQ5MjF4X2xlZHNfc2V0dXBfcG9ydChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIGludCBwb3J0KVxcbit7XFxuK1xcdHN0cnVjdCBkZXZpY2UgKmRldiA9IHRvX2RldmljZShwcml2KTtcXG4rXFx0c3RydWN0IGRzYV9zd2l0Y2ggKmRzID0gXFx1MDAyNnByaXYtXFx1MDAzZWRzO1xcbitcXHRzdHJ1Y3QgZGV2aWNlX25vZGUgKmxlZHNfbnA7XFxuK1xcdHN0cnVjdCBkc2FfcG9ydCAqZHA7XFxuK1xcbitcXHRkcCA9IGRzYV90b19wb3J0KGRzLCBwb3J0KTtcXG4rXFx0bGVkc19ucCA9IG9mX2dldF9jaGlsZF9ieV9uYW1lKGRwLVxcdTAwM2VkbiwgXFxcImxlZHNcXFwiKTtcXG4rXFx0aWYgKCFsZWRzX25wKVxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFxuK1xcdGlmIChwb3J0IFxcdTAwM2U9IFlUOTIxWF9MRURfUE9SVF9OVU0pIHtcXG4rXFx0XFx0ZGV2X2VycihkZXYsIFxcXCJDYW5ub3QgY29uZmlndXJlIExFRHMgZm9yIHBvcnQgJWRcXFxcblxcXCIsIHBvcnQpO1xcbitcXHRcXHRvZl9ub2RlX3B1dChsZWRzX25wKTtcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcdH1cXG4rXFxuK1xcdGZvcl9lYWNoX2NoaWxkX29mX25vZGVfc2NvcGVkKGxlZHNfbnAsIGxlZF9ucCkge1xcbitcXHRcXHR5dDkyMXhfbGVkX3NldHVwKHByaXYsIHBvcnQsIG9mX2Z3bm9kZV9oYW5kbGUobGVkX25wKSk7XFxuK1xcdFxcdC8qIEFsbG93IHBhcnRpYWwgY29uZmlndXJhdGlvbjogTEVEcyBhcmUgb3B0aW9uYWwgKi9cXG4rXFx0fVxcbitcXG4rXFx0b2Zfbm9kZV9wdXQobGVkc19ucCk7XFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbit2b2lkIHl0OTIxeF9sZWRzX3JlbW92ZShzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYpXFxuK3tcXG4rXFx0Zm9yIChpbnQgcG9ydCA9IDA7IHBvcnQgXFx1MDAzYyBZVDkyMVhfTEVEX1BPUlRfTlVNOyBwb3J0KyspXFxuK1xcdFxcdHl0OTIxeF9sZWRzX3JlbW92ZV9wb3J0KHByaXYsIHBvcnQpO1xcbit9XFxuK1xcbitpbnQgeXQ5MjF4X2xlZHNfc2V0dXAoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2KVxcbit7XFxuK1xcdHN0cnVjdCBkc2Ffc3dpdGNoICpkcyA9IFxcdTAwMjZwcml2LVxcdTAwM2VkcztcXG4rXFx0c3RydWN0IGRzYV9wb3J0ICpkcDtcXG4rXFxuK1xcdC8qIExFRHMgYXJlIGFsd2F5cyBlbmFibGVkLiBUaGVyZSBpcyBubyB3YXkgdG8gZGlzYWJsZSB0aGVtIGFsdG9nZXRoZXJcXG4rXFx0ICogKGFzIGZhciBhcyBJIGtub3cpLlxcbitcXHQgKi9cXG4rXFxuK1xcdGRzYV9zd2l0Y2hfZm9yX2VhY2hfcG9ydChkcCwgZHMpIHtcXG4rXFx0XFx0aW50IHBvcnQgPSBkcC1cXHUwMDNlaW5kZXg7XFxuK1xcbitcXHRcXHRpZiAoIWRwLVxcdTAwM2VkbilcXG4rXFx0XFx0XFx0Y29udGludWU7XFxuK1xcbitcXHRcXHR5dDkyMXhfbGVkc19zZXR1cF9wb3J0KHByaXYsIHBvcnQpO1xcbitcXHRcXHQvKiBBbGxvdyBwYXJ0aWFsIGNvbmZpZ3VyYXRpb246IExFRHMgYXJlIG9wdGlvbmFsICovXFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vbGVkcy5oIGIvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9sZWRzLmhcXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxcbmluZGV4IDAwMDAwMDAwMDAwMDAuLjNjMzY0Mjk4OGFjNzdcXG4tLS0gL2Rldi9udWxsXFxuKysrIGIvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9sZWRzLmhcXG5AQCAtMCwwICsxLDEyMSBAQFxcbisvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vci1sYXRlciAqL1xcbisvKlxcbisgKiBDb3B5cmlnaHQgKGMpIDIwMjYgRGF2aWQgWWFuZ1xcbisgKi9cXG4rXFxuKyNpZm5kZWYgX1lUX0xFRFNfSFxcbisjZGVmaW5lIF9ZVF9MRURTX0hcXG4rXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9iaXRmaWVsZC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvYml0cy5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgva2NvbmZpZy5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvbGVkcy5oXFx1MDAzZVxcbitcXG4rI2RlZmluZSBZVDkyMVhfTEVEX0NUUkxcXHRcXHRcXHQweGQwMDAwXFxuKyNkZWZpbmUgIFlUOTIxWF9MRURfQ1RSTF9VTktcXHRcXHRcXHRCSVQoMjEpXFxuKyNkZWZpbmUgIFlUOTIxWF9MRURfQ1RSTF9MT09QREVURUNUX0JMSU5LX01cXHRHRU5NQVNLKDIwLCAxOSlcXHQvKiBjeWNsZSA9IDUxMiAqIHggbXMgKi9cXG4rI2RlZmluZSAgIFlUOTIxWF9MRURfQ1RSTF9MT09QREVURUNUX0JMSU5LKHgpXFx0XFx0RklFTERfUFJFUChZVDkyMVhfTEVEX0NUUkxfTE9PUERFVEVDVF9CTElOS19NLCAoeCkpXFxuKyNkZWZpbmUgIFlUOTIxWF9MRURfQ1RSTF9QT1JUX05VTV9NXFx0XFx0R0VOTUFTSygxNiwgMTMpXFxuKyNkZWZpbmUgICBZVDkyMVhfTEVEX0NUUkxfUE9SVF9OVU0oeClcXHRcXHRcXHRGSUVMRF9QUkVQKFlUOTIxWF9MRURfQ1RSTF9QT1JUX05VTV9NLCAoeCkpXFxuKyNkZWZpbmUgIFlUOTIxWF9MRURfQ1RSTF9NT0RFX01cXHRcXHRcXHRHRU5NQVNLKDEsIDApXFxuKyNkZWZpbmUgICBZVDkyMVhfTEVEX0NUUkxfTU9ERSh4KVxcdFxcdFxcdEZJRUxEX1BSRVAoWVQ5MjFYX0xFRF9DVFJMX01PREVfTSwgKHgpKVxcbisjZGVmaW5lICAgWVQ5MjFYX0xFRF9DVFJMX01PREVfUEFSQUxMRUxcXHRcXHRcXHRZVDkyMVhfTEVEX0NUUkxfTU9ERSgwKVxcbisjZGVmaW5lICAgWVQ5MjFYX0xFRF9DVFJMX01PREVfU0VSSUFMXFx0XFx0XFx0WVQ5MjFYX0xFRF9DVFJMX01PREUoMilcXG4rI2RlZmluZSBZVDkyMVhfTEVEMF9QT1JUbihwb3J0KVxcdFxcdCgweGQwMDA0ICsgNCAqIChwb3J0KSlcXG4rI2RlZmluZSAgWVQ5MjFYX0xFRDBfUE9SVF9BQ1RfTVxcdFxcdFxcdEdFTk1BU0soMTcsIDApXFxuKyNkZWZpbmUgIFlUOTIxWF9MRUQwX1BPUlRfQUNUX0xJTktfVFJZX0RJU1xcdEJJVCgxNylcXG4rI2RlZmluZSAgWVQ5MjFYX0xFRDBfUE9SVF9BQ1RfQ09MTElTSU9OX0JMSU5LX0lORElcXHRCSVQoMTYpXFxuKyNkZWZpbmUgWVQ5MjFYX0xFRDFfUE9SVG4ocG9ydClcXHRcXHQoMHhkMDA0MCArIDQgKiAocG9ydCkpXFxuKyNkZWZpbmUgIFlUOTIxWF9MRUQxX1BPUlRfT1RIRVJfQkxJTktfTVxcdFxcdEdFTk1BU0soMzEsIDMwKVxcdC8qIGN5Y2xlID0gNTEyIFxcdTAwM2VcXHUwMDNlIHggbXMgKi9cXG4rI2RlZmluZSAgIFlUOTIxWF9MRUQxX1BPUlRfT1RIRVJfQkxJTksoeClcXHRcXHRGSUVMRF9QUkVQKFlUOTIxWF9MRUQxX1BPUlRfT1RIRVJfQkxJTktfTSwgKHgpKVxcbisjZGVmaW5lICBZVDkyMVhfTEVEMV9QT1JUX0VFRV9CTElOS19NXFx0XFx0R0VOTUFTSygyOSwgMjgpXFx0LyogY3ljbGUgPSA1MTIgXFx1MDAzZVxcdTAwM2UgeCBtcyAqL1xcbisjZGVmaW5lICAgWVQ5MjFYX0xFRDFfUE9SVF9FRUVfQkxJTksoeClcXHRcXHRcXHRGSUVMRF9QUkVQKFlUOTIxWF9MRUQxX1BPUlRfRUVFX0JMSU5LX00sICh4KSlcXG4rI2RlZmluZSAgWVQ5MjFYX0xFRDFfUE9SVF9CTElOS19EVVRZX0NPTVBcXHRCSVQoMjcpXFxuKyNkZWZpbmUgIFlUOTIxWF9MRUQxX1BPUlRfQkxJTktfRFVUWV9NXFx0XFx0R0VOTUFTSygyNiwgMjUpXFxuKyNkZWZpbmUgICBZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFkoeClcXHRcXHRGSUVMRF9QUkVQKFlUOTIxWF9MRUQxX1BPUlRfQkxJTktfRFVUWV9NLCAoeCkpXFxuKyNkZWZpbmUgICBZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFlfMV8yXFx0XFx0WVQ5MjFYX0xFRDFfUE9SVF9CTElOS19EVVRZKDApXFxuKyNkZWZpbmUgICBZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFlfMl8zXFx0XFx0WVQ5MjFYX0xFRDFfUE9SVF9CTElOS19EVVRZKDEpXFxuKyNkZWZpbmUgICBZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFlfM180XFx0XFx0WVQ5MjFYX0xFRDFfUE9SVF9CTElOS19EVVRZKDIpXFxuKyNkZWZpbmUgICBZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFlfNV82XFx0XFx0WVQ5MjFYX0xFRDFfUE9SVF9CTElOS19EVVRZKDMpXFxuKyNkZWZpbmUgWVQ5MjFYX0xFRDJfUE9SVG4ocG9ydClcXHRcXHQoMHhkMDA4MCArIDQgKiAocG9ydCkpXFxuKyNkZWZpbmUgIFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuX00oZ3JwKVxcdFxcdEdFTk1BU0soNCAqIChncnApICsgMTksIDQgKiAoZ3JwKSArIDE4KVxcbisjZGVmaW5lICAgWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW4oZ3JwLCB4KVxcdFxcdCgoeCkgXFx1MDAzY1xcdTAwM2MgKDQgKiAoZ3JwKSArIDE4KSlcXG4rI2RlZmluZSAgIFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuX0RPTlRDQVJFKGdycClcXHRcXHRZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbihncnAsIDApXFxuKyNkZWZpbmUgICBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbl9CTElOSyhncnApXFx0XFx0WVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW4oZ3JwLCAxKVxcbisjZGVmaW5lICAgWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW5fT04oZ3JwKVxcdFxcdFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuKGdycCwgMilcXG4rI2RlZmluZSAgIFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuX09GRihncnApXFx0XFx0WVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW4oZ3JwLCAzKVxcbisjZGVmaW5lICBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFX0JMSU5Lbl9NKGdycClcXHRHRU5NQVNLKDQgKiAoZ3JwKSArIDE3LCA0ICogKGdycCkgKyAxNilcXHQvKiBjeWNsZSA9IDUxMiBcXHUwMDNjXFx1MDAzYyB4IG1zICovXFxuKyNkZWZpbmUgICBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFX0JMSU5LbihncnAsIHgpXFx0XFx0KCh4KSBcXHUwMDNjXFx1MDAzYyAoNCAqIChncnApICsgMTYpKVxcbisjZGVmaW5lICAgWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRV9CTElOS25fT1RIRVIoZ3JwKVxcdFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VfQkxJTktuKGdycCwgMylcXG4rI2RlZmluZSAgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfTVxcdFxcdFxcdEdFTk1BU0soMTUsIDApXFxuKyNkZWZpbmUgIFlUOTIxWF9MRUR4X1BPUlRfQUNUX0VFRV9CTElOS1xcdFxcdEJJVCgxNSlcXG4rI2RlZmluZSAgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfTE9PUERFVEVDVF9CTElOS1xcdEJJVCgxNClcXG4rI2RlZmluZSAgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfQUNUSVZFX0JMSU5LXFx0QklUKDEzKVxcbisjZGVmaW5lICBZVDkyMVhfTEVEeF9QT1JUX0FDVF9EVVBMRVhfRlVMTFxcdEJJVCgxMilcXG4rI2RlZmluZSAgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfRFVQTEVYX0hBTEZcXHRCSVQoMTEpXFxuKyNkZWZpbmUgIFlUOTIxWF9MRUR4X1BPUlRfQUNUX1RYX0JMSU5LXFx0XFx0QklUKDEwKVxcbisjZGVmaW5lICBZVDkyMVhfTEVEeF9QT1JUX0FDVF9SWF9CTElOS1xcdFxcdEJJVCg5KVxcbisjZGVmaW5lICBZVDkyMVhfTEVEeF9QT1JUX0FDVF9UWFxcdFxcdEJJVCg4KVxcbisjZGVmaW5lICBZVDkyMVhfTEVEeF9QT1JUX0FDVF9SWFxcdFxcdEJJVCg3KVxcbisjZGVmaW5lICBZVDkyMVhfTEVEeF9QT1JUX0FDVF8xMDAwTVxcdFxcdEJJVCg2KVxcbisjZGVmaW5lICBZVDkyMVhfTEVEeF9QT1JUX0FDVF8xMDBNXFx0XFx0QklUKDUpXFxuKyNkZWZpbmUgIFlUOTIxWF9MRUR4X1BPUlRfQUNUXzEwTVxcdFxcdEJJVCg0KVxcbisjZGVmaW5lICBZVDkyMVhfTEVEeF9QT1JUX0FDVF9DT0xMSVNJT05fQkxJTktcXHRCSVQoMylcXG4rI2RlZmluZSAgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfMTAwME1fQkxJTktcXHRCSVQoMilcXG4rI2RlZmluZSAgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfMTAwTV9CTElOS1xcdEJJVCgxKVxcbisjZGVmaW5lICBZVDkyMVhfTEVEeF9QT1JUX0FDVF8xME1fQkxJTktcXHRcXHRCSVQoMClcXG4rI2RlZmluZSBZVDkyMVhfTEVEX1NFUl9DVFJMXFx0XFx0MHhkMDEwMFxcbisjZGVmaW5lICBZVDkyMVhfTEVEX1NFUl9DVFJMX1VOS1xcdFxcdEdFTk1BU0soMjUsIDI0KVxcdC8qIGRlbGF5PyAqL1xcbisjZGVmaW5lICBZVDkyMVhfTEVEX1NFUl9DVFJMX0FDVElWRV9MT1dcXHRcXHRCSVQoNClcXG4rI2RlZmluZSAgWVQ5MjFYX0xFRF9TRVJfQ1RSTF9HUlBfTlVNX01cXHRcXHRHRU5NQVNLKDEsIDApXFx0LyogI2dycCAtIDEgKi9cXG4rI2RlZmluZSAgIFlUOTIxWF9MRURfU0VSX0NUUkxfR1JQX05VTSh4KVxcdFxcdEZJRUxEX1BSRVAoWVQ5MjFYX0xFRF9TRVJfQ1RSTF9HUlBfTlVNX00sICh4KSlcXG4rI2RlZmluZSBZVDkyMVhfTEVEX1NFUl9NQVBubShncnAsIHBvcnQpXFx0KDB4ZDAxMDQgKyA4ICogKDIgLSAoZ3JwKSkgKyA0ICogKChwb3J0KSAvIDUpKVxcbisjZGVmaW5lICBZVDkyMVhfTEVEX1NFUl9NQVBfRFNUbl9QT1JUX00ocG9ydClcXHRHRU5NQVNLKDYgKiAoKHBvcnQpICUgNSkgKyA1LCA2ICogKChwb3J0KSAlIDUpICsgMilcXG4rI2RlZmluZSAgIFlUOTIxWF9MRURfU0VSX01BUF9EU1RuX1BPUlQocG9ydCwgeClcXHRcXHQoKHgpIFxcdTAwM2NcXHUwMDNjICg2ICogKChwb3J0KSAlIDUpICsgMikpXFxuKyNkZWZpbmUgIFlUOTIxWF9MRURfU0VSX01BUF9EU1RuX0xFRF9NKHBvcnQpXFx0R0VOTUFTSyg2ICogKChwb3J0KSAlIDUpICsgMSwgNiAqICgocG9ydCkgJSA1KSlcXG4rI2RlZmluZSAgIFlUOTIxWF9MRURfU0VSX01BUF9EU1RuX0xFRChwb3J0LCB4KVxcdFxcdCgoeCkgXFx1MDAzY1xcdTAwM2MgKDYgKiAoKHBvcnQpICUgNSkpKVxcbisjZGVmaW5lIFlUOTIxWF9MRURfUEFSX1BPUlRTXFx0XFx0MHhkMDFjNFxcbisjZGVmaW5lIFlUOTIxWF9MRURfUEFSX0lOVlxcdFxcdDB4ZDAxYzhcXG4rI2RlZmluZSAgWVQ5MjFYX0xFRF9QQVJfSU5WX0lOVm5tKGdycCwgcG9ydClcXHRCSVQoMTAgKiAoZ3JwKSArIChwb3J0KSlcXG4rI2RlZmluZSBZVDkyMVhfTEVEX1BBUl9NQVBuKHBvcnQpXFx0KDB4ZDAxZDAgKyA0ICogKHBvcnQpKVxcbisjZGVmaW5lICBZVDkyMVhfTEVEX1BBUl9NQVBfRFNUbl9QT1JUX00oZ3JwKVxcdEdFTk1BU0soNiAqIChncnApICsgNSwgNiAqIChncnApICsgMilcXG4rI2RlZmluZSAgIFlUOTIxWF9MRURfUEFSX01BUF9EU1RuX1BPUlQoZ3JwLCB4KVxcdFxcdCgoeCkgXFx1MDAzY1xcdTAwM2MgKDYgKiAoZ3JwKSArIDIpKVxcbisjZGVmaW5lICBZVDkyMVhfTEVEX1BBUl9NQVBfRFNUbl9MRURfTShncnApXFx0R0VOTUFTSyg2ICogKGdycCkgKyAxLCA2ICogKGdycCkpXFxuKyNkZWZpbmUgICBZVDkyMVhfTEVEX1BBUl9NQVBfRFNUbl9MRUQoZ3JwLCB4KVxcdFxcdCgoeCkgXFx1MDAzY1xcdTAwM2MgKDYgKiAoZ3JwKSkpXFxuK1xcbisjZGVmaW5lIFlUOTIxWF9MRURfQkxJTktfTUlOXFx0NjRcXG4rI2RlZmluZSBZVDkyMVhfTEVEX0JMSU5LX0RFRlxcdDUxMlxcbisjZGVmaW5lIFlUOTIxWF9MRURfQkxJTktfTUFYXFx0MjA0OFxcbitcXG4rLyogMiAqIGxjbSgyLCAzLCA0LCA2KSAqL1xcbisjZGVmaW5lIFlUOTIxWF9MRURfRFVUWV9ERU5PTVxcdFxcdDI0XFxuKyNkZWZpbmUgWVQ5MjFYX0xFRF9EVVRZKG5vbSwgZGVub20pXFx0KFlUOTIxWF9MRURfRFVUWV9ERU5PTSAqIChub20pIC8gKGRlbm9tKSlcXG4rXFxuK3N0cnVjdCB5dDkyMXhfcHJpdjtcXG4rXFxuK3N0cnVjdCB5dDkyMXhfbGVkIHtcXG4rXFx0c3RydWN0IGxlZF9jbGFzc2RldiBjZGV2O1xcbitcXHRzdHJ1Y3QgeXQ5MjF4X3BvcnQgKnBvcnQ7XFxuK1xcdHVuc2lnbmVkIGNoYXIgZ3JvdXA7XFxuK1xcbitcXHRib29sIHVzZV9jeWNsZToxO1xcbitcXHRib29sIHVzZV9kdXR5OjE7XFxuK307XFxuK1xcbisjaWYgSVNfRU5BQkxFRChDT05GSUdfTkVUX0RTQV9ZVDkyMVhfTEVEUylcXG4rXFxuK3ZvaWQgeXQ5MjF4X2xlZHNfcmVtb3ZlKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdik7XFxuK2ludCB5dDkyMXhfbGVkc19zZXR1cChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYpO1xcbitcXG4rI2Vsc2VcXG4rXFxuK3N0YXRpYyBpbmxpbmUgdm9pZCB5dDkyMXhfbGVkc19yZW1vdmUoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2KSB7fVxcbitcXG4rc3RhdGljIGlubGluZSBpbnQgeXQ5MjF4X2xlZHNfc2V0dXAoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2KVxcbit7XFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbisjZW5kaWZcXG4rXFxuKyNlbmRpZlxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL3NtaS5jIGIvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9zbWkuY1xcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uMTY0YzI1ZWY0OTRhMVxcbi0tLSAvZGV2L251bGxcXG4rKysgYi9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL3NtaS5jXFxuQEAgLTAsMCArMSwxNTcgQEBcXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb3ItbGF0ZXJcXG4rLypcXG4rICogQ29weXJpZ2h0IChjKSAyMDI2IERhdmlkIFlhbmdcXG4rICovXFxuK1xcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvaW9wb2xsLmhcXHUwMDNlXFxuK1xcbisjaW5jbHVkZSBcXFwiY2hpcC5oXFxcIlxcbisjaW5jbHVkZSBcXFwic21pLmhcXFwiXFxuK1xcbisjZGVmaW5lIFlUOTIxWF9QT0xMX1NMRUVQX1VTXFx0MTAwMDBcXG4rI2RlZmluZSBZVDkyMVhfUE9MTF9USU1FT1VUX1VTXFx0MTAwMDAwXFxuK1xcbitpbnQgeXQ5MjF4X3JlZ19yZWFkKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyICp2YWxwKVxcbit7XFxuK1xcdFdBUk5fT04oIW11dGV4X2lzX2xvY2tlZChcXHUwMDI2cHJpdi1cXHUwMDNlcmVnX2xvY2spKTtcXG4rXFxuK1xcdHJldHVybiBwcml2LVxcdTAwM2VyZWdfb3BzLVxcdTAwM2VyZWFkKHByaXYtXFx1MDAzZXJlZ19jdHgsIHJlZywgdmFscCk7XFxuK31cXG4rXFxuK2ludCB5dDkyMXhfcmVnX3dyaXRlKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyIHZhbClcXG4re1xcbitcXHRXQVJOX09OKCFtdXRleF9pc19sb2NrZWQoXFx1MDAyNnByaXYtXFx1MDAzZXJlZ19sb2NrKSk7XFxuK1xcbitcXHRyZXR1cm4gcHJpdi1cXHUwMDNlcmVnX29wcy1cXHUwMDNld3JpdGUocHJpdi1cXHUwMDNlcmVnX2N0eCwgcmVnLCB2YWwpO1xcbit9XFxuK1xcbitpbnQgeXQ5MjF4X3JlZ193YWl0KHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyIG1hc2ssIHUzMiAqdmFscClcXG4re1xcbitcXHR1MzIgdmFsO1xcbitcXHRpbnQgcmVzO1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0cmV0ID0gcmVhZF9wb2xsX3RpbWVvdXQoeXQ5MjF4X3JlZ19yZWFkLCByZXMsXFxuK1xcdFxcdFxcdFxcdHJlcyB8fCAodmFsIFxcdTAwMjYgbWFzaykgPT0gKnZhbHAsXFxuK1xcdFxcdFxcdFxcdFlUOTIxWF9QT0xMX1NMRUVQX1VTLCBZVDkyMVhfUE9MTF9USU1FT1VUX1VTLFxcbitcXHRcXHRcXHRcXHRmYWxzZSwgcHJpdiwgcmVnLCBcXHUwMDI2dmFsKTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0aWYgKHJlcylcXG4rXFx0XFx0cmV0dXJuIHJlcztcXG4rXFxuK1xcdCp2YWxwID0gdmFsO1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4raW50IHl0OTIxeF9yZWdfdXBkYXRlX2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgbWFzaywgdTMyIHZhbClcXG4re1xcbitcXHRpbnQgcmVzO1xcbitcXHR1MzIgdjtcXG4rXFx0dTMyIHU7XFxuK1xcbitcXHRyZXMgPSB5dDkyMXhfcmVnX3JlYWQocHJpdiwgcmVnLCBcXHUwMDI2dik7XFxuK1xcdGlmIChyZXMpXFxuK1xcdFxcdHJldHVybiByZXM7XFxuK1xcbitcXHR1ID0gdjtcXG4rXFx0dSBcXHUwMDI2PSB+bWFzaztcXG4rXFx0dSB8PSB2YWw7XFxuK1xcdGlmICh1ID09IHYpXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXG4rXFx0cmV0dXJuIHl0OTIxeF9yZWdfd3JpdGUocHJpdiwgcmVnLCB1KTtcXG4rfVxcbitcXG4raW50XFxuK3l0OTIxeF9yZWdzX3JlYWQoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgKnZhbHMsXFxuK1xcdFxcdCB1bnNpZ25lZCBpbnQgbnVtX3JlZ3MpXFxuK3tcXG4rXFx0aW50IHJlcztcXG4rXFxuK1xcdGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIFxcdTAwM2MgbnVtX3JlZ3M7IGkrKykge1xcbitcXHRcXHRyZXMgPSB5dDkyMXhfcmVnX3JlYWQocHJpdiwgcmVnICsgNCAqIGksIFxcdTAwMjZ2YWxzW2ldKTtcXG4rXFx0XFx0aWYgKHJlcylcXG4rXFx0XFx0XFx0cmV0dXJuIHJlcztcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK2ludFxcbit5dDkyMXhfcmVnc193cml0ZShzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIGNvbnN0IHUzMiAqdmFscyxcXG4rXFx0XFx0ICB1bnNpZ25lZCBpbnQgbnVtX3JlZ3MpXFxuK3tcXG4rXFx0aW50IHJlcztcXG4rXFxuK1xcdGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIFxcdTAwM2MgbnVtX3JlZ3M7IGkrKykge1xcbitcXHRcXHRyZXMgPSB5dDkyMXhfcmVnX3dyaXRlKHByaXYsIHJlZyArIDQgKiBpLCB2YWxzW2ldKTtcXG4rXFx0XFx0aWYgKHJlcylcXG4rXFx0XFx0XFx0cmV0dXJuIHJlcztcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK2ludFxcbit5dDkyMXhfcmVnc191cGRhdGVfYml0cyhzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIGNvbnN0IHUzMiAqbWFza3MsXFxuK1xcdFxcdFxcdGNvbnN0IHUzMiAqdmFscywgdW5zaWduZWQgaW50IG51bV9yZWdzKVxcbit7XFxuK1xcdGJvb2wgY2hhbmdlZCA9IGZhbHNlO1xcbitcXHR1MzIgdnNbNF07XFxuK1xcdGludCByZXM7XFxuK1xcbitcXHRpZiAoV0FSTl9PTl9PTkNFKG51bV9yZWdzIFxcdTAwM2UgQVJSQVlfU0laRSh2cykpKVxcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFxuK1xcdHJlcyA9IHl0OTIxeF9yZWdzX3JlYWQocHJpdiwgcmVnLCB2cywgbnVtX3JlZ3MpO1xcbitcXHRpZiAocmVzKVxcbitcXHRcXHRyZXR1cm4gcmVzO1xcbitcXG4rXFx0Zm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgXFx1MDAzYyBudW1fcmVnczsgaSsrKSB7XFxuK1xcdFxcdHUzMiB1ID0gdnNbaV07XFxuK1xcbitcXHRcXHR1IFxcdTAwMjY9IH5tYXNrc1tpXTtcXG4rXFx0XFx0dSB8PSB2YWxzW2ldO1xcbitcXHRcXHRpZiAodSAhPSB2c1tpXSlcXG4rXFx0XFx0XFx0Y2hhbmdlZCA9IHRydWU7XFxuK1xcbitcXHRcXHR2c1tpXSA9IHU7XFxuK1xcdH1cXG4rXFxuK1xcdGlmICghY2hhbmdlZClcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcbitcXHRyZXR1cm4geXQ5MjF4X3JlZ3Nfd3JpdGUocHJpdiwgcmVnLCB2cywgbnVtX3JlZ3MpO1xcbit9XFxuK1xcbitpbnRcXG4reXQ5MjF4X3JlZ3NfY2xlYXJfYml0cyhzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIGNvbnN0IHUzMiAqbWFza3MsXFxuK1xcdFxcdCAgICAgICB1bnNpZ25lZCBpbnQgbnVtX3JlZ3MpXFxuK3tcXG4rXFx0Ym9vbCBjaGFuZ2VkID0gZmFsc2U7XFxuK1xcdHUzMiB2c1s0XTtcXG4rXFx0aW50IHJlcztcXG4rXFxuK1xcdGlmIChXQVJOX09OX09OQ0UobnVtX3JlZ3MgXFx1MDAzZSBBUlJBWV9TSVpFKHZzKSkpXFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXG4rXFx0cmVzID0geXQ5MjF4X3JlZ3NfcmVhZChwcml2LCByZWcsIHZzLCBudW1fcmVncyk7XFxuK1xcdGlmIChyZXMpXFxuK1xcdFxcdHJldHVybiByZXM7XFxuK1xcbitcXHRmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSBcXHUwMDNjIG51bV9yZWdzOyBpKyspIHtcXG4rXFx0XFx0dTMyIHUgPSB2c1tpXTtcXG4rXFxuK1xcdFxcdHUgXFx1MDAyNj0gfm1hc2tzW2ldO1xcbitcXHRcXHRpZiAodSAhPSB2c1tpXSlcXG4rXFx0XFx0XFx0Y2hhbmdlZCA9IHRydWU7XFxuK1xcbitcXHRcXHR2c1tpXSA9IHU7XFxuK1xcdH1cXG4rXFxuK1xcdGlmICghY2hhbmdlZClcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcbitcXHRyZXR1cm4geXQ5MjF4X3JlZ3Nfd3JpdGUocHJpdiwgcmVnLCB2cywgbnVtX3JlZ3MpO1xcbit9XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vc21pLmggYi9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL3NtaS5oXFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcXG5pbmRleCAwMDAwMDAwMDAwMDAwLi4yOTk1ZTkxZjNiM2QxXFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vc21pLmhcXG5AQCAtMCwwICsxLDkyIEBAXFxuKy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9yLWxhdGVyICovXFxuKy8qXFxuKyAqIENvcHlyaWdodCAoYykgMjAyNiBEYXZpZCBZYW5nXFxuKyAqL1xcbitcXG4rI2lmbmRlZiBfWVRfU01JX0hcXG4rI2RlZmluZSBfWVRfU01JX0hcXG4rXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC90eXBlcy5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvd29yZHBhcnQuaFxcdTAwM2VcXG4rXFxuK3N0cnVjdCB5dDkyMXhfcHJpdjtcXG4rXFxuK2ludCB5dDkyMXhfcmVnX3JlYWQoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgKnZhbHApO1xcbitpbnQgeXQ5MjF4X3JlZ193cml0ZShzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiB2YWwpO1xcbitpbnQgeXQ5MjF4X3JlZ193YWl0KHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyIG1hc2ssIHUzMiAqdmFscCk7XFxuK2ludCB5dDkyMXhfcmVnX3VwZGF0ZV9iaXRzKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyIG1hc2ssXFxuK1xcdFxcdFxcdCAgIHUzMiB2YWwpO1xcbitcXG4rc3RhdGljIGlubGluZSBpbnRcXG4reXQ5MjF4X3JlZ19zZXRfYml0cyhzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiBtYXNrKVxcbit7XFxuK1xcdHJldHVybiB5dDkyMXhfcmVnX3VwZGF0ZV9iaXRzKHByaXYsIHJlZywgMCwgbWFzayk7XFxuK31cXG4rXFxuK3N0YXRpYyBpbmxpbmUgaW50XFxuK3l0OTIxeF9yZWdfY2xlYXJfYml0cyhzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiBtYXNrKVxcbit7XFxuK1xcdHJldHVybiB5dDkyMXhfcmVnX3VwZGF0ZV9iaXRzKHByaXYsIHJlZywgbWFzaywgMCk7XFxuK31cXG4rXFxuK3N0YXRpYyBpbmxpbmUgaW50XFxuK3l0OTIxeF9yZWdfdG9nZ2xlX2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgbWFzaywgYm9vbCBzZXQpXFxuK3tcXG4rXFx0cmV0dXJuIHl0OTIxeF9yZWdfdXBkYXRlX2JpdHMocHJpdiwgcmVnLCBtYXNrLCAhc2V0ID8gMCA6IG1hc2spO1xcbit9XFxuK1xcbisvKiBTb21lIG11bHRpLXdvcmQgcmVnaXN0ZXJzLCBsaWtlIFZMQU5uX0NUUkwsIHNob3VsZCBiZSB0cmVhdGVkIGFzIGEgc2luZ2xlXFxuKyAqIGxvbmcgcmVnaXN0ZXIuIE1vcmUgc3BlY2lmaWNhbGx5LCB3cml0ZXMgdG8gcGFydHMgb2YgaXRzIHdvcmRzIHdvbid0IGJlY29tZVxcbisgKiB2aXNpYmxlLCB1bnRpbCB0aGUgbGFzdCB3b3JkIGlzIHdyaXR0ZW4uXFxuKyAqXFxuKyAqIEhlcmUgd2UgcmVxdWlyZSBmdWxsIHJlYWQgYW5kIHdyaXRlIG9wZXJhdGlvbnMgb3ZlciB0aGVzZSByZWdpc3RlcnMgdG9cXG4rICogZWxpbWluYXRlIHBvdGVudGlhbCBpc3N1ZXMsIGFsdGhvdWdoIHBhcnRpYWwgcmVhZHMvd3JpdGVzIGFyZSBhbHNvIHBvc3NpYmxlLlxcbisgKi9cXG4rXFxuK3N0YXRpYyBpbmxpbmUgdm9pZCB1cGRhdGVfY3RybHNfdW5hbGlnbmVkKHUzMiAqbG8sIHUzMiAqaGksIHU2NCBtYXNrLCB1NjQgdmFsKVxcbit7XFxuK1xcdCpsbyBcXHUwMDI2PSB+bG93ZXJfMzJfYml0cyhtYXNrKTtcXG4rXFx0KmhpIFxcdTAwMjY9IH51cHBlcl8zMl9iaXRzKG1hc2spO1xcbitcXHQqbG8gfD0gbG93ZXJfMzJfYml0cyh2YWwpO1xcbitcXHQqaGkgfD0gdXBwZXJfMzJfYml0cyh2YWwpO1xcbit9XFxuK1xcbisvKiB5dDkyMXhfcmVnc18qKCkgYXJlIGV4cG9ydGVkIGZvciBsaW5rYWdlIG9ubHkuIERvIG5vdCB1c2UgdGhlbSBkaXJlY3RseS4gVXNlXFxuKyAqIHl0OTIxeF9yZWc2NF8qKCkgb3IgeXQ5MjF4X3JlZzk2XyooKSBpbnN0ZWFkLlxcbisgKi9cXG4rXFxuK2ludCB5dDkyMXhfcmVnc19yZWFkKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyICp2YWxzLFxcbitcXHRcXHQgICAgIHVuc2lnbmVkIGludCBudW1fcmVncyk7XFxuK2ludCB5dDkyMXhfcmVnc193cml0ZShzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIGNvbnN0IHUzMiAqdmFscyxcXG4rXFx0XFx0ICAgICAgdW5zaWduZWQgaW50IG51bV9yZWdzKTtcXG4raW50IHl0OTIxeF9yZWdzX3VwZGF0ZV9iaXRzKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgY29uc3QgdTMyICptYXNrcyxcXG4rXFx0XFx0XFx0ICAgIGNvbnN0IHUzMiAqdmFscywgdW5zaWduZWQgaW50IG51bV9yZWdzKTtcXG4raW50IHl0OTIxeF9yZWdzX2NsZWFyX2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCBjb25zdCB1MzIgKm1hc2tzLFxcbitcXHRcXHRcXHQgICB1bnNpZ25lZCBpbnQgbnVtX3JlZ3MpO1xcbitcXG4rc3RhdGljIGlubGluZSBpbnRcXG4reXQ5MjF4X3JlZzY0X3dyaXRlKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgY29uc3QgdTMyICp2YWxzKVxcbit7XFxuK1xcdHJldHVybiB5dDkyMXhfcmVnc193cml0ZShwcml2LCByZWcsIHZhbHMsIDIpO1xcbit9XFxuK1xcbitzdGF0aWMgaW5saW5lIGludFxcbit5dDkyMXhfcmVnNjRfdXBkYXRlX2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCBjb25zdCB1MzIgKm1hc2tzLFxcbitcXHRcXHRcXHQgY29uc3QgdTMyICp2YWxzKVxcbit7XFxuK1xcdHJldHVybiB5dDkyMXhfcmVnc191cGRhdGVfYml0cyhwcml2LCByZWcsIG1hc2tzLCB2YWxzLCAyKTtcXG4rfVxcbitcXG4rc3RhdGljIGlubGluZSBpbnRcXG4reXQ5MjF4X3JlZzY0X2NsZWFyX2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCBjb25zdCB1MzIgKm1hc2tzKVxcbit7XFxuK1xcdHJldHVybiB5dDkyMXhfcmVnc19jbGVhcl9iaXRzKHByaXYsIHJlZywgbWFza3MsIDIpO1xcbit9XFxuK1xcbitzdGF0aWMgaW5saW5lIGludFxcbit5dDkyMXhfcmVnOTZfd3JpdGUoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCBjb25zdCB1MzIgKnZhbHMpXFxuK3tcXG4rXFx0cmV0dXJuIHl0OTIxeF9yZWdzX3dyaXRlKHByaXYsIHJlZywgdmFscywgMyk7XFxuK31cXG4rXFxuKyNlbmRpZlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNlQyMDozOTowMi43MDY2NTIzNTdaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo1MDM5MTAzNzk5MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBMRUQgc3VwcG9ydCBmb3IgdGhlIE1vdG9yY29tbSBZVDkyMTUgZXRoZXJuZXQgc3dpdGNoIGNoaXAgKGEgRFNBIGRyaXZlcikuIFRoaXMgaXMgYSBoYXJkd2FyZS1zcGVjaWZpYyBkcml2ZXIgdGhhdCBjb21tdW5pY2F0ZXMgd2l0aCBhIHBoeXNpY2FsIGNoaXAgdmlhIE1ESU8uIFNpbmNlIHRoZXJlIGlzIG5vIHNvZnR3YXJlIGVtdWxhdGlvbiBmb3IgdGhpcyBzcGVjaWZpYyBzd2l0Y2ggY2hpcCBpbiBzdGFuZGFyZCBRRU1VL3ZpcnR1YWxpemVkIGVudmlyb25tZW50cywgdGhlIGRyaXZlciB3aWxsIGZhaWwgdG8gcHJvYmUgKGUuZy4sIGR1cmluZyBjaGlwIElEIGRldGVjdGlvbiksIGFuZCB0aGUgbmV3bHkgYWRkZWQgTEVEIHNldHVwIGNvZGUgd2lsbCBiZSB1bnJlYWNoYWJsZS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDI4NjA5ODNkM2Y0ZGUwMWY5ZmNlMzc2MGZmMzE5OTI5MTRhZDkxMDNcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU3VuIEF1ZyAxNiAyMDozODo1OSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvZHNhL21vdG9yY29tbSx5dDkyMXgueWFtbCBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvZHNhL21vdG9yY29tbSx5dDkyMXgueWFtbFxuaW5kZXggMzNhNjU1MmU0NmZjMC4uOTNiYTViMTgxMjA1YiAxMDA2NDRcbi0tLSBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvZHNhL21vdG9yY29tbSx5dDkyMXgueWFtbFxuKysrIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9kc2EvbW90b3Jjb21tLHl0OTIxeC55YW1sXG5AQCAtMjEsNiArMjEsOSBAQCBkZXNjcmlwdGlvbjogfFxuIFxuICAgQW55IHBvcnQgY2FuIGJlIHVzZWQgYXMgdGhlIENQVSBwb3J0LlxuIFxuKyAgRWFjaCBwb3J0IGhhcyBhdCBtb3N0IDMgTEVEcyBjb25uZWN0ZWQgYW5kIGNhbiBiZSBkZWNsYXJlZCB1c2luZyB0aGUgc3RhbmRhcmRcbisgIExFRHMgc3RydWN0dXJlLlxuK1xuIHByb3BlcnRpZXM6XG4gICBjb21wYXRpYmxlOlxuICAgICBjb25zdDogbW90b3Jjb21tLHl0OTIxNVxuQEAgLTU5LDYgKzYyLDcgQEAgdW5ldmFsdWF0ZWRQcm9wZXJ0aWVzOiBmYWxzZVxuIGV4YW1wbGVzOlxuICAgLSB8XG4gICAgICNpbmNsdWRlIFx1MDAzY2R0LWJpbmRpbmdzL2dwaW8vZ3Bpby5oXHUwMDNlXG4rICAgICNpbmNsdWRlIFx1MDAzY2R0LWJpbmRpbmdzL2xlZHMvY29tbW9uLmhcdTAwM2VcbiBcbiAgICAgbWRpbyB7XG4gICAgICAgICAjYWRkcmVzcy1jZWxscyA9IFx1MDAzYzFcdTAwM2U7XG5AQCAtMTEzLDYgKzExNywyNSBAQCBleGFtcGxlczpcbiAgICAgICAgICAgICAgICAgICAgIGxhYmVsID0gXCJsYW4xXCI7XG4gICAgICAgICAgICAgICAgICAgICBwaHktbW9kZSA9IFwiaW50ZXJuYWxcIjtcbiAgICAgICAgICAgICAgICAgICAgIHBoeS1oYW5kbGUgPSBcdTAwM2NcdTAwMjZzd19waHkwXHUwMDNlO1xuK1xuKyAgICAgICAgICAgICAgICAgICAgbGVkcyB7XG4rICAgICAgICAgICAgICAgICAgICAgICAgI2FkZHJlc3MtY2VsbHMgPSBcdTAwM2MxXHUwMDNlO1xuKyAgICAgICAgICAgICAgICAgICAgICAgICNzaXplLWNlbGxzID0gXHUwMDNjMFx1MDAzZTtcbitcbisgICAgICAgICAgICAgICAgICAgICAgICBsZWRAMCB7XG4rICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZyA9IFx1MDAzYzBcdTAwM2U7XG4rICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yID0gXHUwMDNjTEVEX0NPTE9SX0lEX1dISVRFXHUwMDNlO1xuKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiA9IExFRF9GVU5DVElPTl9MQU47XG4rICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQtc3RhdGUgPSBcImtlZXBcIjtcbisgICAgICAgICAgICAgICAgICAgICAgICB9O1xuK1xuKyAgICAgICAgICAgICAgICAgICAgICAgIGxlZEAxIHtcbisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVnID0gXHUwMDNjMVx1MDAzZTtcbisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3IgPSBcdTAwM2NMRURfQ09MT1JfSURfQU1CRVJcdTAwM2U7XG4rICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uID0gTEVEX0ZVTkNUSU9OX0xBTjtcbisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdC1zdGF0ZSA9IFwia2VlcFwiO1xuKyAgICAgICAgICAgICAgICAgICAgICAgIH07XG4rICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICB9O1xuIFxuICAgICAgICAgICAgICAgICBldGhlcm5ldC1wb3J0QDEge1xuZGlmZiAtLWdpdCBhL01BSU5UQUlORVJTIGIvTUFJTlRBSU5FUlNcbmluZGV4IDk5MTQ2MDA1MGRhNzQuLjU1Y2M1YWMwZTg2ZjAgMTAwNjQ0XG4tLS0gYS9NQUlOVEFJTkVSU1xuKysrIGIvTUFJTlRBSU5FUlNcbkBAIC0xODI1Niw3ICsxODI1Niw3IEBAIE06XHREYXZpZCBZYW5nIFx1MDAzY21teWFuZ2ZsQGdtYWlsLmNvbVx1MDAzZVxuIEw6XHRuZXRkZXZAdmdlci5rZXJuZWwub3JnXG4gUzpcdE1haW50YWluZWRcbiBGOlx0RG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9kc2EvbW90b3Jjb21tLHl0OTIxeC55YW1sXG4tRjpcdGRyaXZlcnMvbmV0L2RzYS95dDkyMXguKlxuK0Y6XHRkcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL1xuIEY6XHRuZXQvZHNhL3RhZ195dDkyMXguY1xuIFxuIE1PWEEgU01BUlRJTy9JTkRVU1RJTy9JTlRFTExJTyBTRVJJQUwgQ0FSRFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS9LY29uZmlnIGIvZHJpdmVycy9uZXQvZHNhL0tjb25maWdcbmluZGV4IDRhYjU2N2M1YmJhZmMuLjk4ZTliYmU0N2RlN2IgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9kc2EvS2NvbmZpZ1xuKysrIGIvZHJpdmVycy9uZXQvZHNhL0tjb25maWdcbkBAIC03Miw2ICs3Miw4IEBAIGNvbmZpZyBORVRfRFNBX01WODhFNjA2MFxuIFxuIHNvdXJjZSBcImRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAvS2NvbmZpZ1wiXG4gXG4rc291cmNlIFwiZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9LY29uZmlnXCJcbitcbiBzb3VyY2UgXCJkcml2ZXJzL25ldC9kc2EvbXY4OGU2eHh4L0tjb25maWdcIlxuIFxuIHNvdXJjZSBcImRyaXZlcnMvbmV0L2RzYS9teGw4NjJ4eC9LY29uZmlnXCJcbkBAIC0xNTgsMTIgKzE2MCw0IEBAIGNvbmZpZyBORVRfRFNBX1ZJVEVTU0VfVlNDNzNYWF9QTEFURk9STVxuIFx0ICBUaGlzIGVuYWJsZXMgc3VwcG9ydCBmb3IgdGhlIFZpdGVzc2UgVlNDNzM4NSwgVlNDNzM4OCwgVlNDNzM5NVxuIFx0ICBhbmQgVlNDNzM5OCBTcGFyWCBpbnRlZ3JhdGVkIGV0aGVybmV0IHN3aXRjaGVzLCBjb25uZWN0ZWQgb3ZlclxuIFx0ICBhIENQVS1hdHRhY2hlZCBhZGRyZXNzIGJ1cyBhbmQgd29yayBpbiBtZW1vcnktbWFwcGVkIEkvTyBtb2RlLlxuLVxuLWNvbmZpZyBORVRfRFNBX1lUOTIxWFxuLVx0dHJpc3RhdGUgXCJNb3RvcmNvbW0gWVQ5MjE1IGV0aGVybmV0IHN3aXRjaCBjaGlwIHN1cHBvcnRcIlxuLVx0c2VsZWN0IE5FVF9EU0FfVEFHX1lUOTIxWFxuLVx0c2VsZWN0IE5FVF9JRUVFODAyMVFfSEVMUEVSUyBpZiBEQ0Jcbi1cdGhlbHBcbi1cdCAgVGhpcyBlbmFibGVzIHN1cHBvcnQgZm9yIHRoZSBNb3RvcmNvbW0gWVQ5MjE1IGV0aGVybmV0IHN3aXRjaFxuLVx0ICBjaGlwLlxuIGVuZG1lbnVcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EvTWFrZWZpbGUgYi9kcml2ZXJzL25ldC9kc2EvTWFrZWZpbGVcbmluZGV4IGQyOTc1YmFkZmZjMDkuLjEzODIyNWJhYTRkNTYgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9kc2EvTWFrZWZpbGVcbisrKyBiL2RyaXZlcnMvbmV0L2RzYS9NYWtlZmlsZVxuQEAgLTE0LDExICsxNCwxMSBAQCBvYmotJChDT05GSUdfTkVUX0RTQV9TTVNDX0xBTjkzMDNfTURJTykgKz0gbGFuOTMwM19tZGlvLm9cbiBvYmotJChDT05GSUdfTkVUX0RTQV9WSVRFU1NFX1ZTQzczWFgpICs9IHZpdGVzc2UtdnNjNzN4eC1jb3JlLm9cbiBvYmotJChDT05GSUdfTkVUX0RTQV9WSVRFU1NFX1ZTQzczWFhfUExBVEZPUk0pICs9IHZpdGVzc2UtdnNjNzN4eC1wbGF0Zm9ybS5vXG4gb2JqLSQoQ09ORklHX05FVF9EU0FfVklURVNTRV9WU0M3M1hYX1NQSSkgKz0gdml0ZXNzZS12c2M3M3h4LXNwaS5vXG4tb2JqLSQoQ09ORklHX05FVF9EU0FfWVQ5MjFYKSArPSB5dDkyMXgub1xuIG9iai15XHRcdFx0XHQrPSBiNTMvXG4gb2JqLXlcdFx0XHRcdCs9IGhpcnNjaG1hbm4vXG4gb2JqLXlcdFx0XHRcdCs9IGxhbnRpcS9cbiBvYmoteVx0XHRcdFx0Kz0gbWljcm9jaGlwL1xuK29iai15XHRcdFx0XHQrPSBtb3RvcmNvbW0vXG4gb2JqLXlcdFx0XHRcdCs9IG12ODhlNnh4eC9cbiBvYmoteVx0XHRcdFx0Kz0gbXhsODYyeHgvXG4gb2JqLXlcdFx0XHRcdCs9IG5ldGMvXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9LY29uZmlnIGIvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9LY29uZmlnXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uMzQzOGUwYjE0MzYxMVxuLS0tIC9kZXYvbnVsbFxuKysrIGIvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9LY29uZmlnXG5AQCAtMCwwICsxLDE3IEBAXG4rIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogSVNDXG4rY29uZmlnIE5FVF9EU0FfWVQ5MjFYXG4rXHR0cmlzdGF0ZSBcIk1vdG9yY29tbSBZVDkyMTUgZXRoZXJuZXQgc3dpdGNoIGNoaXAgc3VwcG9ydFwiXG4rXHRzZWxlY3QgTkVUX0RTQV9UQUdfWVQ5MjFYXG4rXHRzZWxlY3QgTkVUX0lFRUU4MDIxUV9IRUxQRVJTIGlmIERDQlxuK1x0aGVscFxuK1x0ICBUaGlzIGVuYWJsZXMgc3VwcG9ydCBmb3IgdGhlIE1vdG9yY29tbSBZVDkyMTUgZXRoZXJuZXQgc3dpdGNoXG4rXHQgIGNoaXAuXG4rXG4rY29uZmlnIE5FVF9EU0FfWVQ5MjFYX0xFRFNcbitcdGJvb2wgXCJMRUQgc3VwcG9ydCBmb3IgTW90b3Jjb21tIFlUOTIxNVwiXG4rXHRkZWZhdWx0IHlcbitcdGRlcGVuZHMgb24gTkVUX0RTQV9ZVDkyMVhcbitcdGRlcGVuZHMgb24gTEVEU19DTEFTUz15IHx8IExFRFNfQ0xBU1M9TkVUX0RTQV9ZVDkyMVhcbitcdGhlbHBcbitcdCAgVGhpcyBlbmFibGVzIHN1cHBvcnQgZm9yIGNvbnRyb2xsaW5nIHRoZSBMRURzIGF0dGFjaGVkIHRvIHRoZVxuK1x0ICBNb3RvcmNvbW0gWVQ5MjE1IHN3aXRjaCBjaGlwcy5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL01ha2VmaWxlIGIvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9NYWtlZmlsZVxubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLjVhNjNkYjAwMjlmZmVcbi0tLSAvZGV2L251bGxcbisrKyBiL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vTWFrZWZpbGVcbkBAIC0wLDAgKzEsNSBAQFxuKyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IElTQ1xuK29iai0kKENPTkZJR19ORVRfRFNBX1lUOTIxWCkgKz0geXQ5MjF4Lm9cbit5dDkyMXgtb2JqcyA6PSBjaGlwLm9cbit5dDkyMXgtJChDT05GSUdfTkVUX0RTQV9ZVDkyMVhfTEVEUykgKz0gbGVkcy5vXG4reXQ5MjF4LW9ianMgKz0gc21pLm9cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EveXQ5MjF4LmMgYi9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuY1xuc2ltaWxhcml0eSBpbmRleCA5NiVcbnJlbmFtZSBmcm9tIGRyaXZlcnMvbmV0L2RzYS95dDkyMXguY1xucmVuYW1lIHRvIGRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jXG5pbmRleCAxNTliMTY2MDZmNmNhLi41NTNlZmFjZDRmNWVlIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZHNhL3l0OTIxeC5jXG4rKysgYi9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuY1xuQEAgLTEzLDcgKzEzLDYgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9pZl9icmlkZ2UuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2lmX2hzci5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvaWZfdmxhbi5oXHUwMDNlXG4tI2luY2x1ZGUgXHUwMDNjbGludXgvaW9wb2xsLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9tZGlvLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9tb2R1bGUuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L29mLmhcdTAwM2VcbkBAIC0yNiw3ICsyNSw5IEBAXG4gI2luY2x1ZGUgXHUwMDNjbmV0L2llZWU4MDIxcS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbmV0L3BrdF9jbHMuaFx1MDAzZVxuIFxuLSNpbmNsdWRlIFwieXQ5MjF4LmhcIlxuKyNpbmNsdWRlIFwiY2hpcC5oXCJcbisjaW5jbHVkZSBcImxlZHMuaFwiXG4rI2luY2x1ZGUgXCJzbWkuaFwiXG4gXG4gc3RydWN0IHl0OTIxeF9taWJfZGVzYyB7XG4gXHR1bnNpZ25lZCBpbnQgc2l6ZTtcbkBAIC0xNTEsMTMgKzE1Miw4IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgeXQ5MjF4X2luZm8geXQ5MjF4X2luZm9zW10gPSB7XG4gXHR7fVxuIH07XG4gXG4tI2RlZmluZSBZVDkyMVhfTkFNRVx0XCJ5dDkyMXhcIlxuLVxuICNkZWZpbmUgWVQ5MjFYX1ZJRF9VTldBUkVcdDQwOTVcbiBcbi0jZGVmaW5lIFlUOTIxWF9QT0xMX1NMRUVQX1VTXHQxMDAwMFxuLSNkZWZpbmUgWVQ5MjFYX1BPTExfVElNRU9VVF9VU1x0MTAwMDAwXG4tXG4gLyogVGhlIGludGVydmFsIHNob3VsZCBiZSBzbWFsbCBlbm91Z2ggdG8gYXZvaWQgb3ZlcmZsb3cgb2YgMzJiaXQgTUlCcy5cbiAgKlxuICAqIFVudGlsIHdlIGNhbiByZWFkIE1JQnMgZnJvbSBzdGF0czY0IGNhbGwgZGlyZWN0bHkgKGkuZS4gc2xlZXBcbkBAIC0xOTYsMjA4ICsxOTIsNiBAQCBzdGF0aWMgdTMyIGV0aGFkZHJfbG8yX3RvX3UzMihjb25zdCB1bnNpZ25lZCBjaGFyICphZGRyKVxuIFx0cmV0dXJuIChhZGRyWzRdIFx1MDAzY1x1MDAzYyA4KSB8IGFkZHJbNV07XG4gfVxuIFxuLXN0YXRpYyBpbnQgeXQ5MjF4X3JlZ19yZWFkKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyICp2YWxwKVxuLXtcbi1cdFdBUk5fT04oIW11dGV4X2lzX2xvY2tlZChcdTAwMjZwcml2LVx1MDAzZXJlZ19sb2NrKSk7XG4tXG4tXHRyZXR1cm4gcHJpdi1cdTAwM2VyZWdfb3BzLVx1MDAzZXJlYWQocHJpdi1cdTAwM2VyZWdfY3R4LCByZWcsIHZhbHApO1xuLX1cbi1cbi1zdGF0aWMgaW50IHl0OTIxeF9yZWdfd3JpdGUoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgdmFsKVxuLXtcbi1cdFdBUk5fT04oIW11dGV4X2lzX2xvY2tlZChcdTAwMjZwcml2LVx1MDAzZXJlZ19sb2NrKSk7XG4tXG4tXHRyZXR1cm4gcHJpdi1cdTAwM2VyZWdfb3BzLVx1MDAzZXdyaXRlKHByaXYtXHUwMDNlcmVnX2N0eCwgcmVnLCB2YWwpO1xuLX1cbi1cbi1zdGF0aWMgaW50XG4teXQ5MjF4X3JlZ193YWl0KHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyIG1hc2ssIHUzMiAqdmFscClcbi17XG4tXHR1MzIgdmFsO1xuLVx0aW50IHJlcztcbi1cdGludCByZXQ7XG4tXG4tXHRyZXQgPSByZWFkX3BvbGxfdGltZW91dCh5dDkyMXhfcmVnX3JlYWQsIHJlcyxcbi1cdFx0XHRcdHJlcyB8fCAodmFsIFx1MDAyNiBtYXNrKSA9PSAqdmFscCxcbi1cdFx0XHRcdFlUOTIxWF9QT0xMX1NMRUVQX1VTLCBZVDkyMVhfUE9MTF9USU1FT1VUX1VTLFxuLVx0XHRcdFx0ZmFsc2UsIHByaXYsIHJlZywgXHUwMDI2dmFsKTtcbi1cdGlmIChyZXQpXG4tXHRcdHJldHVybiByZXQ7XG4tXHRpZiAocmVzKVxuLVx0XHRyZXR1cm4gcmVzO1xuLVxuLVx0KnZhbHAgPSB2YWw7XG4tXHRyZXR1cm4gMDtcbi19XG4tXG4tc3RhdGljIGludFxuLXl0OTIxeF9yZWdfdXBkYXRlX2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgbWFzaywgdTMyIHZhbClcbi17XG4tXHRpbnQgcmVzO1xuLVx0dTMyIHY7XG4tXHR1MzIgdTtcbi1cbi1cdHJlcyA9IHl0OTIxeF9yZWdfcmVhZChwcml2LCByZWcsIFx1MDAyNnYpO1xuLVx0aWYgKHJlcylcbi1cdFx0cmV0dXJuIHJlcztcbi1cbi1cdHUgPSB2O1xuLVx0dSBcdTAwMjY9IH5tYXNrO1xuLVx0dSB8PSB2YWw7XG4tXHRpZiAodSA9PSB2KVxuLVx0XHRyZXR1cm4gMDtcbi1cbi1cdHJldHVybiB5dDkyMXhfcmVnX3dyaXRlKHByaXYsIHJlZywgdSk7XG4tfVxuLVxuLXN0YXRpYyBpbnQgeXQ5MjF4X3JlZ19zZXRfYml0cyhzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiBtYXNrKVxuLXtcbi1cdHJldHVybiB5dDkyMXhfcmVnX3VwZGF0ZV9iaXRzKHByaXYsIHJlZywgMCwgbWFzayk7XG4tfVxuLVxuLXN0YXRpYyBpbnQgeXQ5MjF4X3JlZ19jbGVhcl9iaXRzKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyIG1hc2spXG4te1xuLVx0cmV0dXJuIHl0OTIxeF9yZWdfdXBkYXRlX2JpdHMocHJpdiwgcmVnLCBtYXNrLCAwKTtcbi19XG4tXG4tc3RhdGljIGludFxuLXl0OTIxeF9yZWdfdG9nZ2xlX2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgbWFzaywgYm9vbCBzZXQpXG4te1xuLVx0cmV0dXJuIHl0OTIxeF9yZWdfdXBkYXRlX2JpdHMocHJpdiwgcmVnLCBtYXNrLCAhc2V0ID8gMCA6IG1hc2spO1xuLX1cbi1cbi0vKiBTb21lIG11bHRpLXdvcmQgcmVnaXN0ZXJzLCBsaWtlIFZMQU5uX0NUUkwsIHNob3VsZCBiZSB0cmVhdGVkIGFzIGEgc2luZ2xlXG4tICogbG9uZyByZWdpc3Rlci4gTW9yZSBzcGVjaWZpY2FsbHksIHdyaXRlcyB0byBwYXJ0cyBvZiBpdHMgd29yZHMgd29uJ3QgYmVjb21lXG4tICogdmlzaWJsZSwgdW50aWwgdGhlIGxhc3Qgd29yZCBpcyB3cml0dGVuLlxuLSAqXG4tICogSGVyZSB3ZSByZXF1aXJlIGZ1bGwgcmVhZCBhbmQgd3JpdGUgb3BlcmF0aW9ucyBvdmVyIHRoZXNlIHJlZ2lzdGVycyB0b1xuLSAqIGVsaW1pbmF0ZSBwb3RlbnRpYWwgaXNzdWVzLCBhbHRob3VnaCBwYXJ0aWFsIHJlYWRzL3dyaXRlcyBhcmUgYWxzbyBwb3NzaWJsZS5cbi0gKi9cbi1cbi1zdGF0aWMgdm9pZCB1cGRhdGVfY3RybHNfdW5hbGlnbmVkKHUzMiAqbG8sIHUzMiAqaGksIHU2NCBtYXNrLCB1NjQgdmFsKVxuLXtcbi1cdCpsbyBcdTAwMjY9IH5sb3dlcl8zMl9iaXRzKG1hc2spO1xuLVx0KmhpIFx1MDAyNj0gfnVwcGVyXzMyX2JpdHMobWFzayk7XG4tXHQqbG8gfD0gbG93ZXJfMzJfYml0cyh2YWwpO1xuLVx0KmhpIHw9IHVwcGVyXzMyX2JpdHModmFsKTtcbi19XG4tXG4tc3RhdGljIGludFxuLXl0OTIxeF9yZWdzX3JlYWQoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgKnZhbHMsXG4tXHRcdCB1bnNpZ25lZCBpbnQgbnVtX3JlZ3MpXG4te1xuLVx0aW50IHJlcztcbi1cbi1cdGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIFx1MDAzYyBudW1fcmVnczsgaSsrKSB7XG4tXHRcdHJlcyA9IHl0OTIxeF9yZWdfcmVhZChwcml2LCByZWcgKyA0ICogaSwgXHUwMDI2dmFsc1tpXSk7XG4tXHRcdGlmIChyZXMpXG4tXHRcdFx0cmV0dXJuIHJlcztcbi1cdH1cbi1cbi1cdHJldHVybiAwO1xuLX1cbi1cbi1zdGF0aWMgaW50XG4teXQ5MjF4X3JlZ3Nfd3JpdGUoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCBjb25zdCB1MzIgKnZhbHMsXG4tXHRcdCAgdW5zaWduZWQgaW50IG51bV9yZWdzKVxuLXtcbi1cdGludCByZXM7XG4tXG4tXHRmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSBcdTAwM2MgbnVtX3JlZ3M7IGkrKykge1xuLVx0XHRyZXMgPSB5dDkyMXhfcmVnX3dyaXRlKHByaXYsIHJlZyArIDQgKiBpLCB2YWxzW2ldKTtcbi1cdFx0aWYgKHJlcylcbi1cdFx0XHRyZXR1cm4gcmVzO1xuLVx0fVxuLVxuLVx0cmV0dXJuIDA7XG4tfVxuLVxuLXN0YXRpYyBpbnRcbi15dDkyMXhfcmVnc191cGRhdGVfYml0cyhzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIGNvbnN0IHUzMiAqbWFza3MsXG4tXHRcdFx0Y29uc3QgdTMyICp2YWxzLCB1bnNpZ25lZCBpbnQgbnVtX3JlZ3MpXG4te1xuLVx0Ym9vbCBjaGFuZ2VkID0gZmFsc2U7XG4tXHR1MzIgdnNbNF07XG4tXHRpbnQgcmVzO1xuLVxuLVx0QlVJTERfQlVHX09OKG51bV9yZWdzIFx1MDAzZSBBUlJBWV9TSVpFKHZzKSk7XG4tXG4tXHRyZXMgPSB5dDkyMXhfcmVnc19yZWFkKHByaXYsIHJlZywgdnMsIG51bV9yZWdzKTtcbi1cdGlmIChyZXMpXG4tXHRcdHJldHVybiByZXM7XG4tXG4tXHRmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSBcdTAwM2MgbnVtX3JlZ3M7IGkrKykge1xuLVx0XHR1MzIgdSA9IHZzW2ldO1xuLVxuLVx0XHR1IFx1MDAyNj0gfm1hc2tzW2ldO1xuLVx0XHR1IHw9IHZhbHNbaV07XG4tXHRcdGlmICh1ICE9IHZzW2ldKVxuLVx0XHRcdGNoYW5nZWQgPSB0cnVlO1xuLVxuLVx0XHR2c1tpXSA9IHU7XG4tXHR9XG4tXG4tXHRpZiAoIWNoYW5nZWQpXG4tXHRcdHJldHVybiAwO1xuLVxuLVx0cmV0dXJuIHl0OTIxeF9yZWdzX3dyaXRlKHByaXYsIHJlZywgdnMsIG51bV9yZWdzKTtcbi19XG4tXG4tc3RhdGljIGludFxuLXl0OTIxeF9yZWdzX2NsZWFyX2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCBjb25zdCB1MzIgKm1hc2tzLFxuLVx0XHQgICAgICAgdW5zaWduZWQgaW50IG51bV9yZWdzKVxuLXtcbi1cdGJvb2wgY2hhbmdlZCA9IGZhbHNlO1xuLVx0dTMyIHZzWzRdO1xuLVx0aW50IHJlcztcbi1cbi1cdEJVSUxEX0JVR19PTihudW1fcmVncyBcdTAwM2UgQVJSQVlfU0laRSh2cykpO1xuLVxuLVx0cmVzID0geXQ5MjF4X3JlZ3NfcmVhZChwcml2LCByZWcsIHZzLCBudW1fcmVncyk7XG4tXHRpZiAocmVzKVxuLVx0XHRyZXR1cm4gcmVzO1xuLVxuLVx0Zm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgXHUwMDNjIG51bV9yZWdzOyBpKyspIHtcbi1cdFx0dTMyIHUgPSB2c1tpXTtcbi1cbi1cdFx0dSBcdTAwMjY9IH5tYXNrc1tpXTtcbi1cdFx0aWYgKHUgIT0gdnNbaV0pXG4tXHRcdFx0Y2hhbmdlZCA9IHRydWU7XG4tXG4tXHRcdHZzW2ldID0gdTtcbi1cdH1cbi1cbi1cdGlmICghY2hhbmdlZClcbi1cdFx0cmV0dXJuIDA7XG4tXG4tXHRyZXR1cm4geXQ5MjF4X3JlZ3Nfd3JpdGUocHJpdiwgcmVnLCB2cywgbnVtX3JlZ3MpO1xuLX1cbi1cbi1zdGF0aWMgaW50XG4teXQ5MjF4X3JlZzY0X3dyaXRlKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgY29uc3QgdTMyICp2YWxzKVxuLXtcbi1cdHJldHVybiB5dDkyMXhfcmVnc193cml0ZShwcml2LCByZWcsIHZhbHMsIDIpO1xuLX1cbi1cbi1zdGF0aWMgaW50XG4teXQ5MjF4X3JlZzY0X3VwZGF0ZV9iaXRzKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgY29uc3QgdTMyICptYXNrcyxcbi1cdFx0XHQgY29uc3QgdTMyICp2YWxzKVxuLXtcbi1cdHJldHVybiB5dDkyMXhfcmVnc191cGRhdGVfYml0cyhwcml2LCByZWcsIG1hc2tzLCB2YWxzLCAyKTtcbi19XG4tXG4tc3RhdGljIGludFxuLXl0OTIxeF9yZWc2NF9jbGVhcl9iaXRzKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgY29uc3QgdTMyICptYXNrcylcbi17XG4tXHRyZXR1cm4geXQ5MjF4X3JlZ3NfY2xlYXJfYml0cyhwcml2LCByZWcsIG1hc2tzLCAyKTtcbi19XG4tXG4tc3RhdGljIGludFxuLXl0OTIxeF9yZWc5Nl93cml0ZShzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIGNvbnN0IHUzMiAqdmFscylcbi17XG4tXHRyZXR1cm4geXQ5MjF4X3JlZ3Nfd3JpdGUocHJpdiwgcmVnLCB2YWxzLCAzKTtcbi19XG4tXG4gc3RhdGljIGludCB5dDkyMXhfcmVnX21kaW9fcmVhZCh2b2lkICpjb250ZXh0LCB1MzIgcmVnLCB1MzIgKnZhbHApXG4ge1xuIFx0c3RydWN0IHl0OTIxeF9yZWdfbWRpbyAqbWRpbyA9IGNvbnRleHQ7XG5AQCAtNDc4Niw2ICs0NTgwLDEyIEBAIHN0YXRpYyBpbnQgeXQ5MjF4X2RzYV9zZXR1cChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpXG4gXHRpZiAocmVzKVxuIFx0XHRyZXR1cm4gcmVzO1xuIFxuKyNpZiBJU19FTkFCTEVEKENPTkZJR19ORVRfRFNBX1lUOTIxWF9MRURTKVxuK1x0cmVzID0geXQ5MjF4X2xlZHNfc2V0dXAocHJpdik7XG4rXHRpZiAocmVzKVxuK1x0XHRkZXZfd2FybihkZXYsIFwiRmFpbGVkIHRvIHNldHVwIExFRHM6ICVkXFxuXCIsIHJlcyk7XG4rI2VuZGlmXG4rXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG5AQCAtNDg4Niw2ICs0Njg2LDEwIEBAIHN0YXRpYyB2b2lkIHl0OTIxeF9tZGlvX3JlbW92ZShzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYpXG4gXHRpZiAoIXByaXYpXG4gXHRcdHJldHVybjtcbiBcbisjaWYgSVNfRU5BQkxFRChDT05GSUdfTkVUX0RTQV9ZVDkyMVhfTEVEUylcbitcdHl0OTIxeF9sZWRzX3JlbW92ZShwcml2KTtcbisjZW5kaWZcbitcbiBcdGZvciAoc2l6ZV90IGkgPSBBUlJBWV9TSVpFKHByaXYtXHUwMDNlcG9ydHMpOyBpLS0gXHUwMDNlIDA7ICkge1xuIFx0XHRzdHJ1Y3QgeXQ5MjF4X3BvcnQgKnBwID0gXHUwMDI2cHJpdi1cdTAwM2Vwb3J0c1tpXTtcbiBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EveXQ5MjF4LmggYi9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuaFxuc2ltaWxhcml0eSBpbmRleCA5OSVcbnJlbmFtZSBmcm9tIGRyaXZlcnMvbmV0L2RzYS95dDkyMXguaFxucmVuYW1lIHRvIGRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5oXG5pbmRleCA1ZjNiOTllMTg5YzQxLi5lNjgxNWNmOWNiM2NkIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZHNhL3l0OTIxeC5oXG4rKysgYi9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuaFxuQEAgLTg1MCw5ICs4NTAsMTQgQEAgZW51bSB5dDkyMXhfZmRiX2VudHJ5X3N0YXR1cyB7XG4gI2RlZmluZSBZVDkyMVhfQUNMX05VTVx0XHQoWVQ5MjFYX0FDTF9CTEtfTlVNICogWVQ5MjFYX0FDTF9FTlRfUEVSX0JMSylcbiAjZGVmaW5lIFlUOTIxWF9VREZfTlVNXHRcdDhcbiBcbisjZGVmaW5lIFlUOTIxWF9MRURfR1JPVVBfTlVNXHQzXG4rI2RlZmluZSBZVDkyMVhfTEVEX1BPUlRfTlVNXHQxMFxuK1xuIC8qIDggaW50ZXJuYWwgKyAyIGV4dGVybmFsICsgMSBtY3UgKi9cbiAjZGVmaW5lIFlUOTIxWF9QT1JUX05VTVx0XHRcdDExXG4gXG4rI2RlZmluZSBZVDkyMVhfTkFNRVx0XCJ5dDkyMXhcIlxuK1xuICNkZWZpbmUgeXQ5MjF4X3BvcnRfaXNfaW50ZXJuYWwocG9ydCkgKChwb3J0KSBcdTAwM2MgOClcbiAjZGVmaW5lIHl0OTIxeF9wb3J0X2lzX2V4dGVybmFsKHBvcnQpICgocG9ydCkgPT0gOCB8fCAocG9ydCkgPT0gOSlcbiBcbkBAIC05MzgsNiArOTQzLDEzIEBAIHN0cnVjdCB5dDkyMXhfcG9ydCB7XG4gXHRzdHJ1Y3QgeXQ5MjF4X21pYiBtaWI7XG4gXHR1NjQgcnhfZnJhbWVzO1xuIFx0dTY0IHR4X2ZyYW1lcztcbitcbisjaWYgSVNfRU5BQkxFRChDT05GSUdfTkVUX0RTQV9ZVDkyMVhfTEVEUylcbitcdHVuc2lnbmVkIGNoYXIgbGVkX2R1dHk7XG4rXHR1bnNpZ25lZCBzaG9ydCBsZWRfY3ljbGU7XG4rXG4rXHRzdHJ1Y3QgeXQ5MjF4X2xlZCAqbGVkc1tZVDkyMVhfTEVEX0dST1VQX05VTV07XG4rI2VuZGlmXG4gfTtcbiBcbiBzdHJ1Y3QgeXQ5MjF4X3JlZ19vcHMge1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vbGVkcy5jIGIvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9sZWRzLmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwLi5lN2VmMGVmODBhMjY2XG4tLS0gL2Rldi9udWxsXG4rKysgYi9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2xlZHMuY1xuQEAgLTAsMCArMSw2NTQgQEBcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vci1sYXRlclxuKy8qXG4rICogQ29weXJpZ2h0IChjKSAyMDI2IERhdmlkIFlhbmdcbisgKi9cbitcbisjaW5jbHVkZSBcdTAwM2NsaW51eC91bGVkcy5oXHUwMDNlXG4rXG4rI2luY2x1ZGUgXCJjaGlwLmhcIlxuKyNpbmNsdWRlIFwibGVkcy5oXCJcbisjaW5jbHVkZSBcInNtaS5oXCJcbitcbisjZGVmaW5lIHRvX3l0OTIxeF9sZWQobGVkX2NkZXYpIFxcXG4rXHRjb250YWluZXJfb2ZfY29uc3QoKGxlZF9jZGV2KSwgc3RydWN0IHl0OTIxeF9sZWQsIGNkZXYpXG4rI2RlZmluZSB0b195dDkyMXhfcG9ydChsZWQpICgobGVkKS1cdTAwM2Vwb3J0KVxuKyNkZWZpbmUgdG9feXQ5MjF4X3ByaXYocHApIFxcXG4rXHRjb250YWluZXJfb2ZfY29uc3QoKHBwKSwgc3RydWN0IHl0OTIxeF9wcml2LCBwb3J0c1socHApLVx1MDAzZWluZGV4XSlcbisjZGVmaW5lIHRvX2RldmljZShwcml2KSAoKHByaXYpLVx1MDAzZWRzLmRldilcbitcbitzdGF0aWMgdTMyIHl0OTIxeF9sZWRfcmVnYWRkcihzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIGludCBwb3J0LCBpbnQgZ3JvdXApXG4re1xuK1x0c3dpdGNoIChncm91cCkge1xuK1x0Y2FzZSAwOlxuK1x0ZGVmYXVsdDpcbitcdFx0cmV0dXJuIFlUOTIxWF9MRUQwX1BPUlRuKHBvcnQpO1xuK1x0Y2FzZSAxOlxuK1x0XHRyZXR1cm4gWVQ5MjFYX0xFRDFfUE9SVG4ocG9ydCk7XG4rXHRjYXNlIDI6XG4rXHRcdHJldHVybiBZVDkyMVhfTEVEMl9QT1JUbihwb3J0KTtcbitcdH1cbit9XG4rXG4rc3RhdGljIGludFxuK3l0OTIxeF9sZWRfZm9yY2VfZ2V0KHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgaW50IHBvcnQsIGludCBncm91cCwgYm9vbCAqb25wKVxuK3tcbitcdHUzMiB2YWw7XG4rXHRpbnQgcmVzO1xuK1xuK1x0cmVzID0geXQ5MjF4X3JlZ19yZWFkKHByaXYsIFlUOTIxWF9MRUQyX1BPUlRuKHBvcnQpLCBcdTAwMjZ2YWwpO1xuK1x0aWYgKHJlcylcbitcdFx0cmV0dXJuIHJlcztcbitcbitcdCpvbnAgPSAodmFsIFx1MDAyNiBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbl9NKGdyb3VwKSkgPT1cbitcdCAgICAgICBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbl9PTihncm91cCk7XG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rc3RhdGljIGludFxuK3l0OTIxeF9sZWRfZm9yY2Vfc2V0KHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgaW50IHBvcnQsIGludCBncm91cCwgYm9vbCBvbilcbit7XG4rXHRzdHJ1Y3QgeXQ5MjF4X3BvcnQgKnBwID0gXHUwMDI2cHJpdi1cdTAwM2Vwb3J0c1twb3J0XTtcbitcdHN0cnVjdCB5dDkyMXhfbGVkICpsZWQgPSBwcC1cdTAwM2VsZWRzW2dyb3VwXTtcbitcdHUzMiBjdHJsO1xuK1x0dTMyIG1hc2s7XG4rXG4rXHRsZWQtXHUwMDNldXNlX2N5Y2xlID0gZmFsc2U7XG4rXHRsZWQtXHUwMDNldXNlX2R1dHkgPSBmYWxzZTtcbitcbitcdG1hc2sgPSBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbl9NKGdyb3VwKTtcbitcdGN0cmwgPSBvbiA/IFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuX09OKGdyb3VwKSA6XG4rXHQgICAgICAgWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW5fT0ZGKGdyb3VwKTtcbitcdHJldHVybiB5dDkyMXhfcmVnX3VwZGF0ZV9iaXRzKHByaXYsIFlUOTIxWF9MRUQyX1BPUlRuKHBvcnQpLCBtYXNrLFxuK1x0XHRcdFx0ICAgICAgY3RybCk7XG4rfVxuK1xuK3N0YXRpYyBpbnRcbit5dDkyMXhfbGVkX2JsaW5rX3NlbGVjdChjb25zdCBzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHVuc2lnbmVkIGxvbmcgb24sXG4rXHRcdFx0dW5zaWduZWQgbG9uZyBvZmYsIHVuc2lnbmVkIHNob3J0ICpjeWNsZXAsXG4rXHRcdFx0dW5zaWduZWQgY2hhciAqZHV0eXApXG4re1xuK1x0c3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgZHV0eXNbXSA9IHtcbitcdFx0WVQ5MjFYX0xFRF9EVVRZKDEsIDYpLFxuK1x0XHRZVDkyMVhfTEVEX0RVVFkoMSwgNCksXG4rXHRcdFlUOTIxWF9MRURfRFVUWSgxLCAzKSxcbitcdFx0WVQ5MjFYX0xFRF9EVVRZKDEsIDIpLFxuK1x0fTtcbitcdHVuc2lnbmVkIGludCBjeWNsZV91cHBlcjtcbitcdHVuc2lnbmVkIGludCBjeWNsZV9yZXE7XG4rXHR1bnNpZ25lZCBpbnQgZHV0eV9yZXE7XG4rXHR1bnNpZ25lZCBpbnQgY3ljbGU7XG4rXHR1bnNpZ25lZCBpbnQgZHV0eTtcbitcbitcdGN5Y2xlID0gWVQ5MjFYX0xFRF9CTElOS19NQVg7XG4rXHRjeWNsZV91cHBlciA9IGN5Y2xlICogMTE1ODUgLyA4MTkyICsgMTsgIC8qIE1fU1FSVDIgKiBjeWNsZSAqL1xuK1x0aWYgKGNoZWNrX2FkZF9vdmVyZmxvdyhvbiwgb2ZmLCBcdTAwMjZjeWNsZV9yZXEpIHx8IGN5Y2xlX3JlcSBcdTAwM2U9IGN5Y2xlX3VwcGVyKVxuK1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4rXG4rXHRmb3IgKDsgY3ljbGUgXHUwMDNlIFlUOTIxWF9MRURfQkxJTktfTUlOOyBjeWNsZV91cHBlciBcdTAwM2VcdTAwM2U9IDEsIGN5Y2xlIFx1MDAzZVx1MDAzZT0gMSlcbitcdFx0aWYgKGN5Y2xlX3JlcSBcdTAwM2U9IGN5Y2xlX3VwcGVyIFx1MDAzZVx1MDAzZSAxKVxuK1x0XHRcdGJyZWFrO1xuK1x0KmN5Y2xlcCA9IGN5Y2xlO1xuK1xuK1x0ZHV0eV9yZXEgPSBESVZfUk9VTkRfQ0xPU0VTVChZVDkyMVhfTEVEX0RVVFlfREVOT00gKlxuK1x0XHRcdFx0ICAgICAob24gXHUwMDNlIG9mZiA/IG9mZiA6IG9uKSwgY3ljbGVfcmVxKTtcbitcdGZvciAodW5zaWduZWQgaW50IGkgPSBBUlJBWV9TSVpFKGR1dHlzKSAtIDE7OyBpLS0pXG4rXHRcdGlmIChpID09IDAgfHwgZHV0eV9yZXEgXHUwMDNlPSAoZHV0eXNbaSAtIDFdICsgZHV0eXNbaV0pIC8gMikge1xuK1x0XHRcdGR1dHkgPSBkdXR5c1tpXTtcbitcdFx0XHRicmVhaztcbitcdFx0fVxuK1x0aWYgKG9uIFx1MDAzZSBvZmYpXG4rXHRcdGR1dHkgPSBZVDkyMVhfTEVEX0RVVFlfREVOT00gLSBkdXR5O1xuK1x0KmR1dHlwID0gZHV0eTtcbitcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgaW50XG4reXQ5MjF4X2xlZF9ibGlua19zZXQoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCBpbnQgcG9ydCwgaW50IGdyb3VwLFxuK1x0XHQgICAgIHVuc2lnbmVkIGxvbmcgKm9ucCwgdW5zaWduZWQgbG9uZyAqb2ZmcClcbit7XG4rXHRzdHJ1Y3QgeXQ5MjF4X3BvcnQgKnBwID0gXHUwMDI2cHJpdi1cdTAwM2Vwb3J0c1twb3J0XTtcbitcdHN0cnVjdCB5dDkyMXhfbGVkICpsZWQgPSBwcC1cdTAwM2VsZWRzW2dyb3VwXTtcbitcdHVuc2lnbmVkIHNob3J0IGN5Y2xlO1xuK1x0dW5zaWduZWQgY2hhciBkdXR5O1xuK1x0Ym9vbCB1c2VfY3ljbGU7XG4rXHR1MzIgY3RybDtcbitcdHUzMiBtYXNrO1xuK1x0dTMyIHZhbDtcbitcdGludCByZXM7XG4rXG4rXHRpZiAoISpvbnAgXHUwMDI2XHUwMDI2ICEqb2ZmcCkge1xuK1x0XHRjeWNsZSA9IFlUOTIxWF9MRURfQkxJTktfREVGO1xuK1x0XHRkdXR5ID0gWVQ5MjFYX0xFRF9EVVRZKDEsIDIpO1xuK1x0XHRmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSBcdTAwM2MgWVQ5MjFYX0xFRF9HUk9VUF9OVU07IGkrKylcbitcdFx0XHRpZiAoaSAhPSBncm91cCBcdTAwMjZcdTAwMjYgcHAtXHUwMDNlbGVkc1tpXSBcdTAwMjZcdTAwMjZcbitcdFx0XHQgICAgcHAtXHUwMDNlbGVkc1tpXS1cdTAwM2V1c2VfZHV0eSkge1xuK1x0XHRcdFx0ZHV0eSA9IHBwLVx1MDAzZWxlZF9kdXR5O1xuK1x0XHRcdFx0YnJlYWs7XG4rXHRcdFx0fVxuK1xuK1x0XHR1c2VfY3ljbGUgPSBmYWxzZTtcbitcdH0gZWxzZSB7XG4rXHRcdGJvb2wgY2hhbmdlX2N5Y2xlO1xuK1x0XHRib29sIGNoYW5nZV9kdXR5O1xuK1xuK1x0XHRyZXMgPSB5dDkyMXhfbGVkX2JsaW5rX3NlbGVjdChwcml2LCAqb25wLCAqb2ZmcCwgXHUwMDI2Y3ljbGUsIFx1MDAyNmR1dHkpO1xuK1x0XHRpZiAocmVzKVxuK1x0XHRcdHJldHVybiByZXM7XG4rXG4rXHRcdHVzZV9jeWNsZSA9IGN5Y2xlIFx1MDAzYyBZVDkyMVhfTEVEX0JMSU5LX0RFRjtcbitcdFx0Y2hhbmdlX2N5Y2xlID0gdXNlX2N5Y2xlIFx1MDAyNlx1MDAyNiBjeWNsZSAhPSBwcC1cdTAwM2VsZWRfY3ljbGU7XG4rXHRcdGNoYW5nZV9kdXR5ID0gZHV0eSAhPSBwcC1cdTAwM2VsZWRfZHV0eTtcbitcdFx0aWYgKGNoYW5nZV9jeWNsZSB8fCBjaGFuZ2VfZHV0eSlcbitcdFx0XHRmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSBcdTAwM2MgWVQ5MjFYX0xFRF9HUk9VUF9OVU07XG4rXHRcdFx0ICAgICBpKyspIHtcbitcdFx0XHRcdGlmIChpID09IGdyb3VwIHx8ICFwcC1cdTAwM2VsZWRzW2ldKVxuK1x0XHRcdFx0XHRjb250aW51ZTtcbitcdFx0XHRcdGlmICgoY2hhbmdlX2N5Y2xlIFx1MDAyNlx1MDAyNiBwcC1cdTAwM2VsZWRzW2ldLVx1MDAzZXVzZV9jeWNsZSkgfHxcbitcdFx0XHRcdCAgICAoY2hhbmdlX2R1dHkgXHUwMDI2XHUwMDI2IHBwLVx1MDAzZWxlZHNbaV0tXHUwMDNldXNlX2R1dHkpKVxuK1x0XHRcdFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4rXHRcdFx0fVxuK1x0fVxuK1xuK1x0LyogVGhlIGNoaXAgc2VlbXMgdG8gamFtIGEgd2hpbGUgaWYgY2hhbmdpbmcgZHV0eSBkaXJlY3RseSAqL1xuK1x0cmVzID0geXQ5MjF4X3JlZ19yZWFkKHByaXYsIFlUOTIxWF9MRUQyX1BPUlRuKHBvcnQpLCBcdTAwMjZ2YWwpO1xuK1x0aWYgKHJlcylcbitcdFx0cmV0dXJuIHJlcztcbitcbitcdGN0cmwgPSB2YWwgXHUwMDI2IH5ZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbl9NKGdyb3VwKTtcbitcdGN0cmwgfD0gWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW5fRE9OVENBUkUoZ3JvdXApO1xuK1x0aWYgKHZhbCAhPSBjdHJsKSB7XG4rXHRcdHJlcyA9IHl0OTIxeF9yZWdfd3JpdGUocHJpdiwgWVQ5MjFYX0xFRDJfUE9SVG4ocG9ydCksIGN0cmwpO1xuK1x0XHRpZiAocmVzKVxuK1x0XHRcdHJldHVybiByZXM7XG4rXHR9XG4rXG4rXHRtYXNrID0gWVQ5MjFYX0xFRDFfUE9SVF9CTElOS19EVVRZX00gfCBZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFlfQ09NUDtcbitcdHN3aXRjaCAoZHV0eSBcdTAwM2U9IFlUOTIxWF9MRURfRFVUWSgxLCAyKSA/IGR1dHkgOlxuK1x0XHRZVDkyMVhfTEVEX0RVVFlfREVOT00gLSBkdXR5KSB7XG4rXHRkZWZhdWx0OlxuK1x0XHRkdXR5ID0gWVQ5MjFYX0xFRF9EVVRZKDEsIDIpO1xuK1x0XHRmYWxsdGhyb3VnaDtcbitcdGNhc2UgWVQ5MjFYX0xFRF9EVVRZKDEsIDIpOlxuK1x0XHRjdHJsID0gWVQ5MjFYX0xFRDFfUE9SVF9CTElOS19EVVRZXzFfMjtcbitcdFx0YnJlYWs7XG4rXHRjYXNlIFlUOTIxWF9MRURfRFVUWSgyLCAzKTpcbitcdFx0Y3RybCA9IFlUOTIxWF9MRUQxX1BPUlRfQkxJTktfRFVUWV8yXzM7XG4rXHRcdGJyZWFrO1xuK1x0Y2FzZSBZVDkyMVhfTEVEX0RVVFkoMywgNCk6XG4rXHRcdGN0cmwgPSBZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFlfM180O1xuK1x0XHRicmVhaztcbitcdGNhc2UgWVQ5MjFYX0xFRF9EVVRZKDUsIDYpOlxuK1x0XHRjdHJsID0gWVQ5MjFYX0xFRDFfUE9SVF9CTElOS19EVVRZXzVfNjtcbitcdFx0YnJlYWs7XG4rXHR9XG4rXHRpZiAoZHV0eSBcdTAwM2MgWVQ5MjFYX0xFRF9EVVRZKDEsIDIpKVxuK1x0XHRjdHJsIHw9IFlUOTIxWF9MRUQxX1BPUlRfQkxJTktfRFVUWV9DT01QO1xuK1x0aWYgKHVzZV9jeWNsZSkge1xuK1x0XHRtYXNrIHw9IFlUOTIxWF9MRUQxX1BPUlRfT1RIRVJfQkxJTktfTTtcbitcdFx0Y3RybCB8PSBZVDkyMVhfTEVEMV9QT1JUX09USEVSX0JMSU5LKDkgLSBfX2ZscyhjeWNsZSkpO1xuK1x0fVxuK1x0cmVzID0geXQ5MjF4X3JlZ191cGRhdGVfYml0cyhwcml2LCBZVDkyMVhfTEVEMV9QT1JUbihwb3J0KSwgbWFzaywgY3RybCk7XG4rXHRpZiAocmVzKVxuK1x0XHRyZXR1cm4gcmVzO1xuK1xuK1x0Y3RybCA9IHZhbCBcdTAwMjYgfihZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbl9NKGdyb3VwKSB8XG4rXHRcdCAgICAgICBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFX0JMSU5Lbl9NKGdyb3VwKSk7XG4rXHRjdHJsIHw9IFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuX0JMSU5LKGdyb3VwKTtcbitcdGlmICh1c2VfY3ljbGUpXG4rXHRcdGN0cmwgfD0gWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRV9CTElOS25fT1RIRVIoZ3JvdXApO1xuK1x0ZWxzZVxuK1x0XHRjdHJsIHw9IFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VfQkxJTktuKGdyb3VwLCBfX2ZscyhjeWNsZSkgLSA5KTtcbitcdHJlcyA9IHl0OTIxeF9yZWdfd3JpdGUocHJpdiwgWVQ5MjFYX0xFRDJfUE9SVG4ocG9ydCksIGN0cmwpO1xuK1x0aWYgKHJlcylcbitcdFx0cmV0dXJuIHJlcztcbitcbitcdGxlZC1cdTAwM2V1c2VfY3ljbGUgPSB1c2VfY3ljbGU7XG4rXHRpZiAodXNlX2N5Y2xlKVxuK1x0XHRwcC1cdTAwM2VsZWRfY3ljbGUgPSBjeWNsZTtcbitcdGxlZC1cdTAwM2V1c2VfZHV0eSA9IHRydWU7XG4rXHRwcC1cdTAwM2VsZWRfZHV0eSA9IGR1dHk7XG4rXG4rXHQqb25wID0gRElWX1JPVU5EX0NMT1NFU1QoZHV0eSAqIGN5Y2xlLCBZVDkyMVhfTEVEX0RVVFlfREVOT00pO1xuK1x0Km9mZnAgPSBjeWNsZSAtICpvbnA7XG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rc3RydWN0IHl0OTIxeF9sZWRfdHJpZ2dlcl9tYXAge1xuK1x0dW5zaWduZWQgbG9uZyBmbGFncztcbitcdHUzMiBtYXNrO1xuK307XG4rXG4rc3RhdGljIGNvbnN0IHN0cnVjdCB5dDkyMXhfbGVkX3RyaWdnZXJfbWFwIHl0OTIxeF9sZWRfdHJpZ2dlcl9tYXBzW10gPSB7XG4rXHR7QklUKFRSSUdHRVJfTkVUREVWX0xJTkspLFxuK1x0IFlUOTIxWF9MRUR4X1BPUlRfQUNUX0RVUExFWF9IQUxGIHwgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfRFVQTEVYX0ZVTEx9LFxuK1x0e0JJVChUUklHR0VSX05FVERFVl9MSU5LXzEwKSwgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfMTBNfSxcbitcdHtCSVQoVFJJR0dFUl9ORVRERVZfTElOS18xMDApLCBZVDkyMVhfTEVEeF9QT1JUX0FDVF8xMDBNfSxcbitcdHtCSVQoVFJJR0dFUl9ORVRERVZfTElOS18xMDAwKSwgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfMTAwME19LFxuK1x0e0JJVChUUklHR0VSX05FVERFVl9IQUxGX0RVUExFWCksIFlUOTIxWF9MRUR4X1BPUlRfQUNUX0RVUExFWF9IQUxGfSxcbitcdHtCSVQoVFJJR0dFUl9ORVRERVZfRlVMTF9EVVBMRVgpLCBZVDkyMVhfTEVEeF9QT1JUX0FDVF9EVVBMRVhfRlVMTH0sXG4rXHR7QklUKFRSSUdHRVJfTkVUREVWX1RYKSwgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfVFhfQkxJTkt9LFxuK1x0e0JJVChUUklHR0VSX05FVERFVl9SWCksIFlUOTIxWF9MRUR4X1BPUlRfQUNUX1JYX0JMSU5LfSxcbitcdHtCSVQoVFJJR0dFUl9ORVRERVZfVFhfRVJSKSB8IEJJVChUUklHR0VSX05FVERFVl9SWF9FUlIpLFxuK1x0IFlUOTIxWF9MRUR4X1BPUlRfQUNUX0NPTExJU0lPTl9CTElOS30sXG4rfTtcbitcbitzdGF0aWMgYm9vbFxuK3l0OTIxeF9sZWRfdHJpZ2dlcl9pc19zdXBwb3J0ZWQoY29uc3Qgc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCBpbnQgcG9ydCxcbitcdFx0XHRcdGludCBncm91cCwgdW5zaWduZWQgbG9uZyBmbGFncylcbit7XG4rXHRpZiAoIWZsYWdzKVxuK1x0XHRyZXR1cm4gdHJ1ZTtcbitcbitcdGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIFx1MDAzYyBBUlJBWV9TSVpFKHl0OTIxeF9sZWRfdHJpZ2dlcl9tYXBzKTsgaSsrKSB7XG4rXHRcdGNvbnN0IHN0cnVjdCB5dDkyMXhfbGVkX3RyaWdnZXJfbWFwICptYXAgPSBcdTAwMjZ5dDkyMXhfbGVkX3RyaWdnZXJfbWFwc1tpXTtcbitcbitcdFx0aWYgKChmbGFncyBcdTAwMjYgbWFwLVx1MDAzZWZsYWdzKSA9PSBtYXAtXHUwMDNlZmxhZ3MpIHtcbitcdFx0XHRmbGFncyBcdTAwMjY9IH5tYXAtXHUwMDNlZmxhZ3M7XG4rXHRcdFx0aWYgKCFmbGFncylcbitcdFx0XHRcdHJldHVybiB0cnVlO1xuK1x0XHR9XG4rXHR9XG4rXG4rXHRyZXR1cm4gZmFsc2U7XG4rfVxuK1xuK3N0YXRpYyBpbnRcbit5dDkyMXhfbGVkX3RyaWdnZXJfZ2V0KHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgaW50IHBvcnQsIGludCBncm91cCxcbitcdFx0ICAgICAgIHVuc2lnbmVkIGxvbmcgKmZsYWdzcClcbit7XG4rXHR1MzIgYWRkcjtcbitcdHUzMiB2YWw7XG4rXHRpbnQgcmVzO1xuK1xuK1x0cmVzID0geXQ5MjF4X3JlZ19yZWFkKHByaXYsIFlUOTIxWF9MRUQyX1BPUlRuKHBvcnQpLCBcdTAwMjZ2YWwpO1xuK1x0aWYgKHJlcylcbitcdFx0cmV0dXJuIHJlcztcbitcbitcdGlmICgodmFsIFx1MDAyNiBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbl9NKGdyb3VwKSkgIT1cbitcdCAgICBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbl9ET05UQ0FSRShncm91cCkpIHtcbitcdFx0KmZsYWdzcCA9IDA7XG4rXHRcdHJldHVybiAwO1xuK1x0fVxuK1xuK1x0aWYgKGdyb3VwICE9IDIpIHtcbitcdFx0YWRkciA9IHl0OTIxeF9sZWRfcmVnYWRkcihwcml2LCBwb3J0LCBncm91cCk7XG4rXHRcdHJlcyA9IHl0OTIxeF9yZWdfcmVhZChwcml2LCBhZGRyLCBcdTAwMjZ2YWwpO1xuK1x0XHRpZiAocmVzKVxuK1x0XHRcdHJldHVybiByZXM7XG4rXHR9XG4rXG4rXHQqZmxhZ3NwID0gMDtcbitcdGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIFx1MDAzYyBBUlJBWV9TSVpFKHl0OTIxeF9sZWRfdHJpZ2dlcl9tYXBzKTsgaSsrKSB7XG4rXHRcdGNvbnN0IHN0cnVjdCB5dDkyMXhfbGVkX3RyaWdnZXJfbWFwICptYXAgPSBcdTAwMjZ5dDkyMXhfbGVkX3RyaWdnZXJfbWFwc1tpXTtcbitcbitcdFx0aWYgKCh2YWwgXHUwMDI2IG1hcC1cdTAwM2VtYXNrKSA9PSBtYXAtXHUwMDNlbWFzaylcbitcdFx0XHQqZmxhZ3NwIHw9IG1hcC1cdTAwM2VmbGFncztcbitcdH1cbitcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgaW50XG4reXQ5MjF4X2xlZF90cmlnZ2VyX3NldChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIGludCBwb3J0LCBpbnQgZ3JvdXAsXG4rXHRcdCAgICAgICB1bnNpZ25lZCBsb25nIGZsYWdzKVxuK3tcbitcdHN0cnVjdCB5dDkyMXhfcG9ydCAqcHAgPSBcdTAwMjZwcml2LVx1MDAzZXBvcnRzW3BvcnRdO1xuK1x0c3RydWN0IHl0OTIxeF9sZWQgKmxlZCA9IHBwLVx1MDAzZWxlZHNbZ3JvdXBdO1xuK1x0dTMyIGFkZHI7XG4rXHR1MzIgY3RybDtcbitcdHUzMiBtYXNrO1xuK1x0aW50IHJlcztcbitcbitcdGN0cmwgPSAwO1xuK1x0Zm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgXHUwMDNjIEFSUkFZX1NJWkUoeXQ5MjF4X2xlZF90cmlnZ2VyX21hcHMpOyBpKyspIHtcbitcdFx0Y29uc3Qgc3RydWN0IHl0OTIxeF9sZWRfdHJpZ2dlcl9tYXAgKm1hcCA9IFx1MDAyNnl0OTIxeF9sZWRfdHJpZ2dlcl9tYXBzW2ldO1xuK1xuK1x0XHRpZiAoKGZsYWdzIFx1MDAyNiBtYXAtXHUwMDNlZmxhZ3MpID09IG1hcC1cdTAwM2VmbGFncykge1xuK1x0XHRcdGZsYWdzIFx1MDAyNj0gfm1hcC1cdTAwM2VmbGFncztcbitcdFx0XHRjdHJsIHw9IG1hcC1cdTAwM2VtYXNrO1xuK1x0XHRcdGlmICghZmxhZ3MpXG4rXHRcdFx0XHRicmVhaztcbitcdFx0fVxuK1x0fVxuK1x0aWYgKGZsYWdzKVxuK1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4rXG4rXHRsZWQtXHUwMDNldXNlX2N5Y2xlID0gZmFsc2U7XG4rXHRsZWQtXHUwMDNldXNlX2R1dHkgPSBmYWxzZTtcbitcbitcdG1hc2sgPSAhZ3JvdXAgPyBZVDkyMVhfTEVEMF9QT1JUX0FDVF9NIDogWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfTTtcbitcdGlmIChncm91cCA9PSAyKSB7XG4rXHRcdG1hc2sgfD0gWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW5fTShncm91cCk7XG4rXHRcdGN0cmwgfD0gWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW5fRE9OVENBUkUoZ3JvdXApO1xuK1x0fVxuK1x0YWRkciA9IHl0OTIxeF9sZWRfcmVnYWRkcihwcml2LCBwb3J0LCBncm91cCk7XG4rXHRyZXMgPSB5dDkyMXhfcmVnX3VwZGF0ZV9iaXRzKHByaXYsIGFkZHIsIG1hc2ssIGN0cmwpO1xuK1x0aWYgKHJlcylcbitcdFx0cmV0dXJuIHJlcztcbitcbitcdGlmIChncm91cCAhPSAyKSB7XG4rXHRcdG1hc2sgPSBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbl9NKGdyb3VwKTtcbitcdFx0Y3RybCA9IFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuX0RPTlRDQVJFKGdyb3VwKTtcbitcdFx0cmVzID0geXQ5MjF4X3JlZ191cGRhdGVfYml0cyhwcml2LCBZVDkyMVhfTEVEMl9QT1JUbihwb3J0KSxcbitcdFx0XHRcdFx0ICAgICBtYXNrLCBjdHJsKTtcbitcdFx0aWYgKHJlcylcbitcdFx0XHRyZXR1cm4gcmVzO1xuK1x0fVxuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK3N0YXRpYyBpbnRcbit5dDkyMXhfY2xlZF9icmlnaHRuZXNzX3NldF9ibG9ja2luZyhzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldixcbitcdFx0XHRcdCAgICBlbnVtIGxlZF9icmlnaHRuZXNzIGJyaWdodG5lc3MpXG4re1xuK1x0c3RydWN0IHl0OTIxeF9sZWQgKmxlZCA9IHRvX3l0OTIxeF9sZWQobGVkX2NkZXYpO1xuK1x0c3RydWN0IHl0OTIxeF9wb3J0ICpwcCA9IHRvX3l0OTIxeF9wb3J0KGxlZCk7XG4rXHRzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYgPSB0b195dDkyMXhfcHJpdihwcCk7XG4rXHRpbnQgcmVzO1xuK1xuK1x0bXV0ZXhfbG9jayhcdTAwMjZwcml2LVx1MDAzZXJlZ19sb2NrKTtcbitcdHJlcyA9IHl0OTIxeF9sZWRfZm9yY2Vfc2V0KHByaXYsIHBwLVx1MDAzZWluZGV4LCBsZWQtXHUwMDNlZ3JvdXAsIGJyaWdodG5lc3MpO1xuK1x0bXV0ZXhfdW5sb2NrKFx1MDAyNnByaXYtXHUwMDNlcmVnX2xvY2spO1xuK1xuK1x0cmV0dXJuIHJlcztcbit9XG4rXG4rc3RhdGljIGludFxuK3l0OTIxeF9jbGVkX2JsaW5rX3NldChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldiwgdW5zaWduZWQgbG9uZyAqZGVsYXlfb24sXG4rXHRcdCAgICAgIHVuc2lnbmVkIGxvbmcgKmRlbGF5X29mZilcbit7XG4rXHRzdHJ1Y3QgeXQ5MjF4X2xlZCAqbGVkID0gdG9feXQ5MjF4X2xlZChsZWRfY2Rldik7XG4rXHRzdHJ1Y3QgeXQ5MjF4X3BvcnQgKnBwID0gdG9feXQ5MjF4X3BvcnQobGVkKTtcbitcdHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiA9IHRvX3l0OTIxeF9wcml2KHBwKTtcbitcdGludCByZXM7XG4rXG4rXHRtdXRleF9sb2NrKFx1MDAyNnByaXYtXHUwMDNlcmVnX2xvY2spO1xuK1x0cmVzID0geXQ5MjF4X2xlZF9ibGlua19zZXQocHJpdiwgcHAtXHUwMDNlaW5kZXgsIGxlZC1cdTAwM2Vncm91cCwgZGVsYXlfb24sXG4rXHRcdFx0XHQgICBkZWxheV9vZmYpO1xuK1x0bXV0ZXhfdW5sb2NrKFx1MDAyNnByaXYtXHUwMDNlcmVnX2xvY2spO1xuK1xuK1x0cmV0dXJuIHJlcztcbit9XG4rXG4rc3RhdGljIHN0cnVjdCBkZXZpY2UgKiBfX21heWJlX3VudXNlZFxuK3l0OTIxeF9jbGVkX2h3X2NvbnRyb2xfZ2V0X2RldmljZShzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2Rldilcbit7XG4rXHRzdHJ1Y3QgeXQ5MjF4X2xlZCAqbGVkID0gdG9feXQ5MjF4X2xlZChsZWRfY2Rldik7XG4rXHRzdHJ1Y3QgeXQ5MjF4X3BvcnQgKnBwID0gdG9feXQ5MjF4X3BvcnQobGVkKTtcbitcdHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiA9IHRvX3l0OTIxeF9wcml2KHBwKTtcbitcdHN0cnVjdCBkc2FfcG9ydCAqZHA7XG4rXG4rXHRkcCA9IGRzYV90b19wb3J0KFx1MDAyNnByaXYtXHUwMDNlZHMsIHBwLVx1MDAzZWluZGV4KTtcbitcdGlmICghZHApXG4rXHRcdHJldHVybiBOVUxMO1xuK1xuK1x0aWYgKGRzYV9wb3J0X2lzX3VzZXIoZHApKVxuK1x0XHRyZXR1cm4gXHUwMDI2ZHAtXHUwMDNldXNlci1cdTAwM2VkZXY7XG4rXHRpZiAoZHNhX3BvcnRfaXNfY3B1KGRwKSlcbitcdFx0cmV0dXJuIFx1MDAyNmRwLVx1MDAzZWNvbmR1aXQtXHUwMDNlZGV2O1xuK1xuK1x0cmV0dXJuIE5VTEw7XG4rfVxuK1xuK3N0YXRpYyBpbnQgX19tYXliZV91bnVzZWRcbit5dDkyMXhfY2xlZF9od19jb250cm9sX2lzX3N1cHBvcnRlZChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldixcbitcdFx0XHRcdCAgICB1bnNpZ25lZCBsb25nIGZsYWdzKVxuK3tcbitcdHN0cnVjdCB5dDkyMXhfbGVkICpsZWQgPSB0b195dDkyMXhfbGVkKGxlZF9jZGV2KTtcbitcdHN0cnVjdCB5dDkyMXhfcG9ydCAqcHAgPSB0b195dDkyMXhfcG9ydChsZWQpO1xuK1x0c3RydWN0IHl0OTIxeF9wcml2ICpwcml2ID0gdG9feXQ5MjF4X3ByaXYocHApO1xuK1xuK1x0aWYgKHl0OTIxeF9sZWRfdHJpZ2dlcl9pc19zdXBwb3J0ZWQocHJpdiwgcHAtXHUwMDNlaW5kZXgsIGxlZC1cdTAwM2Vncm91cCwgZmxhZ3MpKVxuK1x0XHRyZXR1cm4gMDtcbitcdHJldHVybiAtRU9QTk9UU1VQUDtcbit9XG4rXG4rc3RhdGljIGludCBfX21heWJlX3VudXNlZFxuK3l0OTIxeF9jbGVkX2h3X2NvbnRyb2xfZ2V0KHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2LCB1bnNpZ25lZCBsb25nICpmbGFnc3ApXG4re1xuK1x0c3RydWN0IHl0OTIxeF9sZWQgKmxlZCA9IHRvX3l0OTIxeF9sZWQobGVkX2NkZXYpO1xuK1x0c3RydWN0IHl0OTIxeF9wb3J0ICpwcCA9IHRvX3l0OTIxeF9wb3J0KGxlZCk7XG4rXHRzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYgPSB0b195dDkyMXhfcHJpdihwcCk7XG4rXHRpbnQgcmVzO1xuK1xuK1x0bXV0ZXhfbG9jayhcdTAwMjZwcml2LVx1MDAzZXJlZ19sb2NrKTtcbitcdHJlcyA9IHl0OTIxeF9sZWRfdHJpZ2dlcl9nZXQocHJpdiwgcHAtXHUwMDNlaW5kZXgsIGxlZC1cdTAwM2Vncm91cCwgZmxhZ3NwKTtcbitcdG11dGV4X3VubG9jayhcdTAwMjZwcml2LVx1MDAzZXJlZ19sb2NrKTtcbitcbitcdHJldHVybiByZXM7XG4rfVxuK1xuK3N0YXRpYyBpbnQgX19tYXliZV91bnVzZWRcbit5dDkyMXhfY2xlZF9od19jb250cm9sX3NldChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldiwgdW5zaWduZWQgbG9uZyBmbGFncylcbit7XG4rXHRzdHJ1Y3QgeXQ5MjF4X2xlZCAqbGVkID0gdG9feXQ5MjF4X2xlZChsZWRfY2Rldik7XG4rXHRzdHJ1Y3QgeXQ5MjF4X3BvcnQgKnBwID0gdG9feXQ5MjF4X3BvcnQobGVkKTtcbitcdHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiA9IHRvX3l0OTIxeF9wcml2KHBwKTtcbitcdGludCByZXM7XG4rXG4rXHRtdXRleF9sb2NrKFx1MDAyNnByaXYtXHUwMDNlcmVnX2xvY2spO1xuK1x0cmVzID0geXQ5MjF4X2xlZF90cmlnZ2VyX3NldChwcml2LCBwcC1cdTAwM2VpbmRleCwgbGVkLVx1MDAzZWdyb3VwLCBmbGFncyk7XG4rXHRtdXRleF91bmxvY2soXHUwMDI2cHJpdi1cdTAwM2VyZWdfbG9jayk7XG4rXG4rXHRyZXR1cm4gcmVzO1xuK31cbitcbitzdGF0aWMgaW50XG4reXQ5MjF4X2xlZF9zZXR1cChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIGludCBwb3J0LFxuK1x0XHQgc3RydWN0IGZ3bm9kZV9oYW5kbGUgKmZ3bm9kZSlcbit7XG4rXHRzdHJ1Y3QgeXQ5MjF4X3BvcnQgKnBwID0gXHUwMDI2cHJpdi1cdTAwM2Vwb3J0c1twb3J0XTtcbitcdHN0cnVjdCBkZXZpY2UgKmRldiA9IHRvX2RldmljZShwcml2KTtcbitcdHN0cnVjdCBsZWRfaW5pdF9kYXRhIGluaXRfZGF0YTtcbitcdHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2O1xuK1x0Y2hhciBuYW1lW0xFRF9NQVhfTkFNRV9TSVpFXTtcbitcdGVudW0gbGVkX2RlZmF1bHRfc3RhdGUgc3RhdGU7XG4rXHRzdHJ1Y3QgeXQ5MjF4X2xlZCAqbGVkO1xuK1x0Ym9vbCBmb3JjZV9oaWdoO1xuK1x0Ym9vbCBmb3JjZV9sb3c7XG4rXHR1MzIgZ3JvdXA7XG4rXHR1MzIgbWFzaztcbitcdHUzMiBjdHJsO1xuK1x0dTMyIHZhbDtcbitcdGJvb2wgb247XG4rXHRpbnQgcmVzO1xuK1x0aW50IHJldDtcbitcbitcdHJlcyA9IGZ3bm9kZV9wcm9wZXJ0eV9yZWFkX3UzMihmd25vZGUsIFwicmVnXCIsIFx1MDAyNmdyb3VwKTtcbitcdGlmIChyZXMpXG4rXHRcdHJldHVybiByZXM7XG4rXHRpZiAoZ3JvdXAgXHUwMDNlPSBZVDkyMVhfTEVEX0dST1VQX05VTSkge1xuK1x0XHRkZXZfZXJyKGRldiwgXCJJbnZhbGlkIExFRCByZWcgJXUgZm9yIHBvcnQgJWRcXG5cIiwgZ3JvdXAsIHBvcnQpO1xuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcdH1cbitcdGlmIChwcC1cdTAwM2VsZWRzW2dyb3VwXSlcbitcdFx0cmV0dXJuIC1FRVhJU1Q7XG4rXG4rXHRmb3JjZV9oaWdoID0gZndub2RlX3Byb3BlcnR5X3JlYWRfYm9vbChmd25vZGUsIFwiYWN0aXZlLWhpZ2hcIik7XG4rXHRmb3JjZV9sb3cgPSBmd25vZGVfcHJvcGVydHlfcmVhZF9ib29sKGZ3bm9kZSwgXCJhY3RpdmUtbG93XCIpO1xuK1x0aWYgKGZvcmNlX2hpZ2ggXHUwMDI2XHUwMDI2IGZvcmNlX2xvdykge1xuK1x0XHRkZXZfZXJyKGRldiwgXCJEdXBsaWNhdGUgcG9sYXJpdGllcyBmb3IgTEVEICUwMmQ6JTAydVxcblwiLFxuK1x0XHRcdHBvcnQsIGdyb3VwKTtcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHR9XG4rXG4rXHRsZWQgPSBkZXZtX2t6YWxsb2MoZGV2LCBzaXplb2YoKmxlZCksIEdGUF9LRVJORUwpO1xuK1x0aWYgKCFsZWQpXG4rXHRcdHJldHVybiAtRU5PTUVNO1xuK1x0bGVkLVx1MDAzZXBvcnQgPSBwcDtcbitcdGxlZC1cdTAwM2Vncm91cCA9IGdyb3VwO1xuK1xuK1x0c3RhdGUgPSBsZWRfaW5pdF9kZWZhdWx0X3N0YXRlX2dldChmd25vZGUpO1xuK1xuK1x0bXV0ZXhfbG9jayhcdTAwMjZwcml2LVx1MDAzZXJlZ19sb2NrKTtcbitcbitcdC8qIEludmVyc2lvbiBpcyBpbnRlcm5hbCAtIGZvcmNlIG9uIHdpbGwgZ2l2ZSBsb3cgbG9naWMuXG4rXHQgKiBJbiB0aGUgcmVzdCBvZiB0aGUgZmlsZSwgdHJlYXQgTEVEcyBhcyBpZiBhY3RpdmUtbG93LlxuK1x0ICovXG4rXHRpZiAoZm9yY2VfaGlnaCB8fCBmb3JjZV9sb3cpIHtcbitcdFx0cmVzID0geXQ5MjF4X3JlZ19yZWFkKHByaXYsIFlUOTIxWF9MRURfUEFSX0lOViwgXHUwMDI2dmFsKTtcbitcdFx0aWYgKHJlcylcbitcdFx0XHRnb3RvIHVubG9jaztcbitcbitcdFx0bWFzayA9IFlUOTIxWF9MRURfUEFSX0lOVl9JTlZubShncm91cCwgcG9ydCk7XG4rXHRcdGN0cmwgPSBmb3JjZV9oaWdoID8gdmFsIHwgbWFzayA6IHZhbCBcdTAwMjYgfm1hc2s7XG4rXHRcdHJlcyA9IHl0OTIxeF9yZWdfd3JpdGUocHJpdiwgWVQ5MjFYX0xFRF9QQVJfSU5WLCBjdHJsKTtcbitcdFx0aWYgKHJlcylcbitcdFx0XHRnb3RvIHVubG9jaztcbitcdH1cbitcbitcdHBwLVx1MDAzZWxlZHNbZ3JvdXBdID0gbGVkO1xuK1xuK1x0c3dpdGNoIChzdGF0ZSkge1xuK1x0Y2FzZSBMRURTX0RFRlNUQVRFX09GRjpcbitcdGNhc2UgTEVEU19ERUZTVEFURV9PTjpcbitcdGRlZmF1bHQ6XG4rXHRcdG9uID0gc3RhdGUgPT0gTEVEU19ERUZTVEFURV9PTjtcbitcdFx0cmVzID0geXQ5MjF4X2xlZF9mb3JjZV9zZXQocHJpdiwgcG9ydCwgZ3JvdXAsIG9uKTtcbitcdFx0YnJlYWs7XG4rXHRjYXNlIExFRFNfREVGU1RBVEVfS0VFUDpcbitcdFx0cmVzID0geXQ5MjF4X2xlZF9mb3JjZV9nZXQocHJpdiwgcG9ydCwgZ3JvdXAsIFx1MDAyNm9uKTtcbitcdFx0YnJlYWs7XG4rXHR9XG4rXG4rdW5sb2NrOlxuK1x0bXV0ZXhfdW5sb2NrKFx1MDAyNnByaXYtXHUwMDNlcmVnX2xvY2spO1xuK1x0aWYgKHJlcylcbitcdFx0Z290byBlcnI7XG4rXG4rXHRsZWRfY2RldiA9IFx1MDAyNmxlZC1cdTAwM2VjZGV2O1xuK1x0bGVkX2NkZXYtXHUwMDNlYnJpZ2h0bmVzcyA9IG9uO1xuK1x0bGVkX2NkZXYtXHUwMDNlbWF4X2JyaWdodG5lc3MgPSAxO1xuK1x0bGVkX2NkZXYtXHUwMDNlZmxhZ3MgPSBMRURfUkVUQUlOX0FUX1NIVVRET1dOO1xuK1x0bGVkX2NkZXYtXHUwMDNlYnJpZ2h0bmVzc19zZXRfYmxvY2tpbmcgPSB5dDkyMXhfY2xlZF9icmlnaHRuZXNzX3NldF9ibG9ja2luZztcbitcdGxlZF9jZGV2LVx1MDAzZWJsaW5rX3NldCA9IHl0OTIxeF9jbGVkX2JsaW5rX3NldDtcbisjaWZkZWYgQ09ORklHX0xFRFNfVFJJR0dFUlNcbitcdGxlZF9jZGV2LVx1MDAzZWh3X2NvbnRyb2xfdHJpZ2dlciA9IFwibmV0ZGV2XCI7XG4rXHRsZWRfY2Rldi1cdTAwM2Vod19jb250cm9sX2dldF9kZXZpY2UgPSB5dDkyMXhfY2xlZF9od19jb250cm9sX2dldF9kZXZpY2U7XG4rXHRsZWRfY2Rldi1cdTAwM2Vod19jb250cm9sX2lzX3N1cHBvcnRlZCA9IHl0OTIxeF9jbGVkX2h3X2NvbnRyb2xfaXNfc3VwcG9ydGVkO1xuK1x0bGVkX2NkZXYtXHUwMDNlaHdfY29udHJvbF9nZXQgPSB5dDkyMXhfY2xlZF9od19jb250cm9sX2dldDtcbitcdGxlZF9jZGV2LVx1MDAzZWh3X2NvbnRyb2xfc2V0ID0geXQ5MjF4X2NsZWRfaHdfY29udHJvbF9zZXQ7XG4rI2VuZGlmXG4rXG4rXHRzbnByaW50ZihuYW1lLCBzaXplb2YobmFtZSksIFlUOTIxWF9OQU1FIFwiLSV1OiUwMmQ6JTAydVwiLFxuK1x0XHQgcHJpdi1cdTAwM2Vkcy5pbmRleCwgcG9ydCwgZ3JvdXApO1xuK1x0aW5pdF9kYXRhID0gKHR5cGVvZihpbml0X2RhdGEpKXtcbitcdFx0LmZ3bm9kZSA9IGZ3bm9kZSxcbitcdFx0LmRlZmF1bHRfbGFiZWwgPSBcIjpwb3J0XCIsXG4rXHRcdC5kZXZpY2VuYW1lID0gbmFtZSxcbitcdFx0LmRldm5hbWVfbWFuZGF0b3J5ID0gdHJ1ZSxcbitcdH07XG4rXHRyZXMgPSBkZXZtX2xlZF9jbGFzc2Rldl9yZWdpc3Rlcl9leHQoZGV2LCBsZWRfY2RldiwgXHUwMDI2aW5pdF9kYXRhKTtcbitcdGlmIChyZXMpXG4rXHRcdGdvdG8gZXJyO1xuK1xuK1x0cmV0dXJuIDA7XG4rXG4rZXJyOlxuK1x0cmV0ID0gcmVzO1xuK1xuK1x0bXV0ZXhfbG9jayhcdTAwMjZwcml2LVx1MDAzZXJlZ19sb2NrKTtcbitcdGlmIChwcC1cdTAwM2VsZWRzW2dyb3VwXSkge1xuK1x0XHRpZiAoZm9yY2VfaGlnaCB8fCBmb3JjZV9sb3cpIHtcbitcdFx0XHRyZXMgPSB5dDkyMXhfcmVnX3dyaXRlKHByaXYsIFlUOTIxWF9MRURfUEFSX0lOViwgdmFsKTtcbitcdFx0XHRpZiAocmVzKVxuK1x0XHRcdFx0ZGV2X3dhcm4oZGV2LFxuK1x0XHRcdFx0XHQgXCJGYWlsZWQgdG8gcmV2b2tlIGluaXRpYWxpemF0aW9uIGZvciBMRUQgJTAyZDolMDJ1XFxuXCIsXG4rXHRcdFx0XHRcdCBwb3J0LCBncm91cCk7XG4rXHRcdH1cbitcbitcdFx0cHAtXHUwMDNlbGVkc1tncm91cF0gPSBOVUxMO1xuK1x0fVxuK1x0bXV0ZXhfdW5sb2NrKFx1MDAyNnByaXYtXHUwMDNlcmVnX2xvY2spO1xuK1xuK1x0ZGV2bV9rZnJlZShkZXYsIGxlZCk7XG4rXHRyZXR1cm4gcmV0O1xuK31cbitcbitzdGF0aWMgdm9pZCB5dDkyMXhfbGVkc19yZW1vdmVfcG9ydChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIGludCBwb3J0KVxuK3tcbitcdHN0cnVjdCB5dDkyMXhfcG9ydCAqcHAgPSBcdTAwMjZwcml2LVx1MDAzZXBvcnRzW3BvcnRdO1xuK1x0c3RydWN0IGRldmljZSAqZGV2ID0gdG9fZGV2aWNlKHByaXYpO1xuK1x0Ym9vbCBoYXNfbGVkcyA9IGZhbHNlO1xuK1xuK1x0Zm9yIChpbnQgZ3JvdXAgPSAwOyBncm91cCBcdTAwM2MgWVQ5MjFYX0xFRF9HUk9VUF9OVU07IGdyb3VwKyspIHtcbitcdFx0c3RydWN0IHl0OTIxeF9sZWQgKmxlZCA9IHBwLVx1MDAzZWxlZHNbZ3JvdXBdO1xuK1xuK1x0XHRpZiAobGVkKSB7XG4rXHRcdFx0ZGV2bV9sZWRfY2xhc3NkZXZfdW5yZWdpc3RlcihkZXYsIFx1MDAyNmxlZC1cdTAwM2VjZGV2KTtcbitcdFx0XHRoYXNfbGVkcyA9IHRydWU7XG4rXHRcdH1cbitcdH1cbitcbitcdGlmICghaGFzX2xlZHMpXG4rXHRcdHJldHVybjtcbitcbitcdC8qIE5vdyBubyBvbmUgY2FuIGFjY2VzcyB0aGUgTEVEIGNvbnRyb2wgYmxvY2tzLCBmcmVlIHRoZW0gd2l0aG91dFxuK1x0ICogaG9sZGluZyB0aGUgbG9jay5cbitcdCAqL1xuK1x0Zm9yIChpbnQgZ3JvdXAgPSAwOyBncm91cCBcdTAwM2MgWVQ5MjFYX0xFRF9HUk9VUF9OVU07IGdyb3VwKyspIHtcbitcdFx0c3RydWN0IHl0OTIxeF9sZWQgKmxlZCA9IHBwLVx1MDAzZWxlZHNbZ3JvdXBdO1xuK1xuK1x0XHRpZiAobGVkKSB7XG4rXHRcdFx0cHAtXHUwMDNlbGVkc1tncm91cF0gPSBOVUxMO1xuK1x0XHRcdGRldm1fa2ZyZWUoZGV2LCBsZWQpO1xuK1x0XHR9XG4rXHR9XG4rfVxuK1xuK3N0YXRpYyBpbnQgeXQ5MjF4X2xlZHNfc2V0dXBfcG9ydChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIGludCBwb3J0KVxuK3tcbitcdHN0cnVjdCBkZXZpY2UgKmRldiA9IHRvX2RldmljZShwcml2KTtcbitcdHN0cnVjdCBkc2Ffc3dpdGNoICpkcyA9IFx1MDAyNnByaXYtXHUwMDNlZHM7XG4rXHRzdHJ1Y3QgZGV2aWNlX25vZGUgKmxlZHNfbnA7XG4rXHRzdHJ1Y3QgZHNhX3BvcnQgKmRwO1xuK1xuK1x0ZHAgPSBkc2FfdG9fcG9ydChkcywgcG9ydCk7XG4rXHRsZWRzX25wID0gb2ZfZ2V0X2NoaWxkX2J5X25hbWUoZHAtXHUwMDNlZG4sIFwibGVkc1wiKTtcbitcdGlmICghbGVkc19ucClcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHRpZiAocG9ydCBcdTAwM2U9IFlUOTIxWF9MRURfUE9SVF9OVU0pIHtcbitcdFx0ZGV2X2VycihkZXYsIFwiQ2Fubm90IGNvbmZpZ3VyZSBMRURzIGZvciBwb3J0ICVkXFxuXCIsIHBvcnQpO1xuK1x0XHRvZl9ub2RlX3B1dChsZWRzX25wKTtcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHR9XG4rXG4rXHRmb3JfZWFjaF9jaGlsZF9vZl9ub2RlX3Njb3BlZChsZWRzX25wLCBsZWRfbnApIHtcbitcdFx0eXQ5MjF4X2xlZF9zZXR1cChwcml2LCBwb3J0LCBvZl9md25vZGVfaGFuZGxlKGxlZF9ucCkpO1xuK1x0XHQvKiBBbGxvdyBwYXJ0aWFsIGNvbmZpZ3VyYXRpb246IExFRHMgYXJlIG9wdGlvbmFsICovXG4rXHR9XG4rXG4rXHRvZl9ub2RlX3B1dChsZWRzX25wKTtcbitcdHJldHVybiAwO1xuK31cbitcbit2b2lkIHl0OTIxeF9sZWRzX3JlbW92ZShzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYpXG4re1xuK1x0Zm9yIChpbnQgcG9ydCA9IDA7IHBvcnQgXHUwMDNjIFlUOTIxWF9MRURfUE9SVF9OVU07IHBvcnQrKylcbitcdFx0eXQ5MjF4X2xlZHNfcmVtb3ZlX3BvcnQocHJpdiwgcG9ydCk7XG4rfVxuK1xuK2ludCB5dDkyMXhfbGVkc19zZXR1cChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYpXG4re1xuK1x0c3RydWN0IGRzYV9zd2l0Y2ggKmRzID0gXHUwMDI2cHJpdi1cdTAwM2VkcztcbitcdHN0cnVjdCBkc2FfcG9ydCAqZHA7XG4rXG4rXHQvKiBMRURzIGFyZSBhbHdheXMgZW5hYmxlZC4gVGhlcmUgaXMgbm8gd2F5IHRvIGRpc2FibGUgdGhlbSBhbHRvZ2V0aGVyXG4rXHQgKiAoYXMgZmFyIGFzIEkga25vdykuXG4rXHQgKi9cbitcbitcdGRzYV9zd2l0Y2hfZm9yX2VhY2hfcG9ydChkcCwgZHMpIHtcbitcdFx0aW50IHBvcnQgPSBkcC1cdTAwM2VpbmRleDtcbitcbitcdFx0aWYgKCFkcC1cdTAwM2VkbilcbitcdFx0XHRjb250aW51ZTtcbitcbitcdFx0eXQ5MjF4X2xlZHNfc2V0dXBfcG9ydChwcml2LCBwb3J0KTtcbitcdFx0LyogQWxsb3cgcGFydGlhbCBjb25maWd1cmF0aW9uOiBMRURzIGFyZSBvcHRpb25hbCAqL1xuK1x0fVxuK1xuK1x0cmV0dXJuIDA7XG4rfVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vbGVkcy5oIGIvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9sZWRzLmhcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwLi4zYzM2NDI5ODhhYzc3XG4tLS0gL2Rldi9udWxsXG4rKysgYi9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2xlZHMuaFxuQEAgLTAsMCArMSwxMjEgQEBcbisvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vci1sYXRlciAqL1xuKy8qXG4rICogQ29weXJpZ2h0IChjKSAyMDI2IERhdmlkIFlhbmdcbisgKi9cbitcbisjaWZuZGVmIF9ZVF9MRURTX0hcbisjZGVmaW5lIF9ZVF9MRURTX0hcbitcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9iaXRmaWVsZC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvYml0cy5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgva2NvbmZpZy5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvbGVkcy5oXHUwMDNlXG4rXG4rI2RlZmluZSBZVDkyMVhfTEVEX0NUUkxcdFx0XHQweGQwMDAwXG4rI2RlZmluZSAgWVQ5MjFYX0xFRF9DVFJMX1VOS1x0XHRcdEJJVCgyMSlcbisjZGVmaW5lICBZVDkyMVhfTEVEX0NUUkxfTE9PUERFVEVDVF9CTElOS19NXHRHRU5NQVNLKDIwLCAxOSlcdC8qIGN5Y2xlID0gNTEyICogeCBtcyAqL1xuKyNkZWZpbmUgICBZVDkyMVhfTEVEX0NUUkxfTE9PUERFVEVDVF9CTElOSyh4KVx0XHRGSUVMRF9QUkVQKFlUOTIxWF9MRURfQ1RSTF9MT09QREVURUNUX0JMSU5LX00sICh4KSlcbisjZGVmaW5lICBZVDkyMVhfTEVEX0NUUkxfUE9SVF9OVU1fTVx0XHRHRU5NQVNLKDE2LCAxMylcbisjZGVmaW5lICAgWVQ5MjFYX0xFRF9DVFJMX1BPUlRfTlVNKHgpXHRcdFx0RklFTERfUFJFUChZVDkyMVhfTEVEX0NUUkxfUE9SVF9OVU1fTSwgKHgpKVxuKyNkZWZpbmUgIFlUOTIxWF9MRURfQ1RSTF9NT0RFX01cdFx0XHRHRU5NQVNLKDEsIDApXG4rI2RlZmluZSAgIFlUOTIxWF9MRURfQ1RSTF9NT0RFKHgpXHRcdFx0RklFTERfUFJFUChZVDkyMVhfTEVEX0NUUkxfTU9ERV9NLCAoeCkpXG4rI2RlZmluZSAgIFlUOTIxWF9MRURfQ1RSTF9NT0RFX1BBUkFMTEVMXHRcdFx0WVQ5MjFYX0xFRF9DVFJMX01PREUoMClcbisjZGVmaW5lICAgWVQ5MjFYX0xFRF9DVFJMX01PREVfU0VSSUFMXHRcdFx0WVQ5MjFYX0xFRF9DVFJMX01PREUoMilcbisjZGVmaW5lIFlUOTIxWF9MRUQwX1BPUlRuKHBvcnQpXHRcdCgweGQwMDA0ICsgNCAqIChwb3J0KSlcbisjZGVmaW5lICBZVDkyMVhfTEVEMF9QT1JUX0FDVF9NXHRcdFx0R0VOTUFTSygxNywgMClcbisjZGVmaW5lICBZVDkyMVhfTEVEMF9QT1JUX0FDVF9MSU5LX1RSWV9ESVNcdEJJVCgxNylcbisjZGVmaW5lICBZVDkyMVhfTEVEMF9QT1JUX0FDVF9DT0xMSVNJT05fQkxJTktfSU5ESVx0QklUKDE2KVxuKyNkZWZpbmUgWVQ5MjFYX0xFRDFfUE9SVG4ocG9ydClcdFx0KDB4ZDAwNDAgKyA0ICogKHBvcnQpKVxuKyNkZWZpbmUgIFlUOTIxWF9MRUQxX1BPUlRfT1RIRVJfQkxJTktfTVx0XHRHRU5NQVNLKDMxLCAzMClcdC8qIGN5Y2xlID0gNTEyIFx1MDAzZVx1MDAzZSB4IG1zICovXG4rI2RlZmluZSAgIFlUOTIxWF9MRUQxX1BPUlRfT1RIRVJfQkxJTksoeClcdFx0RklFTERfUFJFUChZVDkyMVhfTEVEMV9QT1JUX09USEVSX0JMSU5LX00sICh4KSlcbisjZGVmaW5lICBZVDkyMVhfTEVEMV9QT1JUX0VFRV9CTElOS19NXHRcdEdFTk1BU0soMjksIDI4KVx0LyogY3ljbGUgPSA1MTIgXHUwMDNlXHUwMDNlIHggbXMgKi9cbisjZGVmaW5lICAgWVQ5MjFYX0xFRDFfUE9SVF9FRUVfQkxJTksoeClcdFx0XHRGSUVMRF9QUkVQKFlUOTIxWF9MRUQxX1BPUlRfRUVFX0JMSU5LX00sICh4KSlcbisjZGVmaW5lICBZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFlfQ09NUFx0QklUKDI3KVxuKyNkZWZpbmUgIFlUOTIxWF9MRUQxX1BPUlRfQkxJTktfRFVUWV9NXHRcdEdFTk1BU0soMjYsIDI1KVxuKyNkZWZpbmUgICBZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFkoeClcdFx0RklFTERfUFJFUChZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFlfTSwgKHgpKVxuKyNkZWZpbmUgICBZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFlfMV8yXHRcdFlUOTIxWF9MRUQxX1BPUlRfQkxJTktfRFVUWSgwKVxuKyNkZWZpbmUgICBZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFlfMl8zXHRcdFlUOTIxWF9MRUQxX1BPUlRfQkxJTktfRFVUWSgxKVxuKyNkZWZpbmUgICBZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFlfM180XHRcdFlUOTIxWF9MRUQxX1BPUlRfQkxJTktfRFVUWSgyKVxuKyNkZWZpbmUgICBZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFlfNV82XHRcdFlUOTIxWF9MRUQxX1BPUlRfQkxJTktfRFVUWSgzKVxuKyNkZWZpbmUgWVQ5MjFYX0xFRDJfUE9SVG4ocG9ydClcdFx0KDB4ZDAwODAgKyA0ICogKHBvcnQpKVxuKyNkZWZpbmUgIFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuX00oZ3JwKVx0XHRHRU5NQVNLKDQgKiAoZ3JwKSArIDE5LCA0ICogKGdycCkgKyAxOClcbisjZGVmaW5lICAgWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW4oZ3JwLCB4KVx0XHQoKHgpIFx1MDAzY1x1MDAzYyAoNCAqIChncnApICsgMTgpKVxuKyNkZWZpbmUgICBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbl9ET05UQ0FSRShncnApXHRcdFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuKGdycCwgMClcbisjZGVmaW5lICAgWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW5fQkxJTksoZ3JwKVx0XHRZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbihncnAsIDEpXG4rI2RlZmluZSAgIFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuX09OKGdycClcdFx0WVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW4oZ3JwLCAyKVxuKyNkZWZpbmUgICBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbl9PRkYoZ3JwKVx0XHRZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbihncnAsIDMpXG4rI2RlZmluZSAgWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRV9CTElOS25fTShncnApXHRHRU5NQVNLKDQgKiAoZ3JwKSArIDE3LCA0ICogKGdycCkgKyAxNilcdC8qIGN5Y2xlID0gNTEyIFx1MDAzY1x1MDAzYyB4IG1zICovXG4rI2RlZmluZSAgIFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VfQkxJTktuKGdycCwgeClcdFx0KCh4KSBcdTAwM2NcdTAwM2MgKDQgKiAoZ3JwKSArIDE2KSlcbisjZGVmaW5lICAgWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRV9CTElOS25fT1RIRVIoZ3JwKVx0WVQ5MjFYX0xFRDJfUE9SVF9GT1JDRV9CTElOS24oZ3JwLCAzKVxuKyNkZWZpbmUgIFlUOTIxWF9MRUR4X1BPUlRfQUNUX01cdFx0XHRHRU5NQVNLKDE1LCAwKVxuKyNkZWZpbmUgIFlUOTIxWF9MRUR4X1BPUlRfQUNUX0VFRV9CTElOS1x0XHRCSVQoMTUpXG4rI2RlZmluZSAgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfTE9PUERFVEVDVF9CTElOS1x0QklUKDE0KVxuKyNkZWZpbmUgIFlUOTIxWF9MRUR4X1BPUlRfQUNUX0FDVElWRV9CTElOS1x0QklUKDEzKVxuKyNkZWZpbmUgIFlUOTIxWF9MRUR4X1BPUlRfQUNUX0RVUExFWF9GVUxMXHRCSVQoMTIpXG4rI2RlZmluZSAgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfRFVQTEVYX0hBTEZcdEJJVCgxMSlcbisjZGVmaW5lICBZVDkyMVhfTEVEeF9QT1JUX0FDVF9UWF9CTElOS1x0XHRCSVQoMTApXG4rI2RlZmluZSAgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfUlhfQkxJTktcdFx0QklUKDkpXG4rI2RlZmluZSAgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfVFhcdFx0QklUKDgpXG4rI2RlZmluZSAgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfUlhcdFx0QklUKDcpXG4rI2RlZmluZSAgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfMTAwME1cdFx0QklUKDYpXG4rI2RlZmluZSAgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfMTAwTVx0XHRCSVQoNSlcbisjZGVmaW5lICBZVDkyMVhfTEVEeF9QT1JUX0FDVF8xME1cdFx0QklUKDQpXG4rI2RlZmluZSAgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfQ09MTElTSU9OX0JMSU5LXHRCSVQoMylcbisjZGVmaW5lICBZVDkyMVhfTEVEeF9QT1JUX0FDVF8xMDAwTV9CTElOS1x0QklUKDIpXG4rI2RlZmluZSAgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfMTAwTV9CTElOS1x0QklUKDEpXG4rI2RlZmluZSAgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfMTBNX0JMSU5LXHRcdEJJVCgwKVxuKyNkZWZpbmUgWVQ5MjFYX0xFRF9TRVJfQ1RSTFx0XHQweGQwMTAwXG4rI2RlZmluZSAgWVQ5MjFYX0xFRF9TRVJfQ1RSTF9VTktcdFx0R0VOTUFTSygyNSwgMjQpXHQvKiBkZWxheT8gKi9cbisjZGVmaW5lICBZVDkyMVhfTEVEX1NFUl9DVFJMX0FDVElWRV9MT1dcdFx0QklUKDQpXG4rI2RlZmluZSAgWVQ5MjFYX0xFRF9TRVJfQ1RSTF9HUlBfTlVNX01cdFx0R0VOTUFTSygxLCAwKVx0LyogI2dycCAtIDEgKi9cbisjZGVmaW5lICAgWVQ5MjFYX0xFRF9TRVJfQ1RSTF9HUlBfTlVNKHgpXHRcdEZJRUxEX1BSRVAoWVQ5MjFYX0xFRF9TRVJfQ1RSTF9HUlBfTlVNX00sICh4KSlcbisjZGVmaW5lIFlUOTIxWF9MRURfU0VSX01BUG5tKGdycCwgcG9ydClcdCgweGQwMTA0ICsgOCAqICgyIC0gKGdycCkpICsgNCAqICgocG9ydCkgLyA1KSlcbisjZGVmaW5lICBZVDkyMVhfTEVEX1NFUl9NQVBfRFNUbl9QT1JUX00ocG9ydClcdEdFTk1BU0soNiAqICgocG9ydCkgJSA1KSArIDUsIDYgKiAoKHBvcnQpICUgNSkgKyAyKVxuKyNkZWZpbmUgICBZVDkyMVhfTEVEX1NFUl9NQVBfRFNUbl9QT1JUKHBvcnQsIHgpXHRcdCgoeCkgXHUwMDNjXHUwMDNjICg2ICogKChwb3J0KSAlIDUpICsgMikpXG4rI2RlZmluZSAgWVQ5MjFYX0xFRF9TRVJfTUFQX0RTVG5fTEVEX00ocG9ydClcdEdFTk1BU0soNiAqICgocG9ydCkgJSA1KSArIDEsIDYgKiAoKHBvcnQpICUgNSkpXG4rI2RlZmluZSAgIFlUOTIxWF9MRURfU0VSX01BUF9EU1RuX0xFRChwb3J0LCB4KVx0XHQoKHgpIFx1MDAzY1x1MDAzYyAoNiAqICgocG9ydCkgJSA1KSkpXG4rI2RlZmluZSBZVDkyMVhfTEVEX1BBUl9QT1JUU1x0XHQweGQwMWM0XG4rI2RlZmluZSBZVDkyMVhfTEVEX1BBUl9JTlZcdFx0MHhkMDFjOFxuKyNkZWZpbmUgIFlUOTIxWF9MRURfUEFSX0lOVl9JTlZubShncnAsIHBvcnQpXHRCSVQoMTAgKiAoZ3JwKSArIChwb3J0KSlcbisjZGVmaW5lIFlUOTIxWF9MRURfUEFSX01BUG4ocG9ydClcdCgweGQwMWQwICsgNCAqIChwb3J0KSlcbisjZGVmaW5lICBZVDkyMVhfTEVEX1BBUl9NQVBfRFNUbl9QT1JUX00oZ3JwKVx0R0VOTUFTSyg2ICogKGdycCkgKyA1LCA2ICogKGdycCkgKyAyKVxuKyNkZWZpbmUgICBZVDkyMVhfTEVEX1BBUl9NQVBfRFNUbl9QT1JUKGdycCwgeClcdFx0KCh4KSBcdTAwM2NcdTAwM2MgKDYgKiAoZ3JwKSArIDIpKVxuKyNkZWZpbmUgIFlUOTIxWF9MRURfUEFSX01BUF9EU1RuX0xFRF9NKGdycClcdEdFTk1BU0soNiAqIChncnApICsgMSwgNiAqIChncnApKVxuKyNkZWZpbmUgICBZVDkyMVhfTEVEX1BBUl9NQVBfRFNUbl9MRUQoZ3JwLCB4KVx0XHQoKHgpIFx1MDAzY1x1MDAzYyAoNiAqIChncnApKSlcbitcbisjZGVmaW5lIFlUOTIxWF9MRURfQkxJTktfTUlOXHQ2NFxuKyNkZWZpbmUgWVQ5MjFYX0xFRF9CTElOS19ERUZcdDUxMlxuKyNkZWZpbmUgWVQ5MjFYX0xFRF9CTElOS19NQVhcdDIwNDhcbitcbisvKiAyICogbGNtKDIsIDMsIDQsIDYpICovXG4rI2RlZmluZSBZVDkyMVhfTEVEX0RVVFlfREVOT01cdFx0MjRcbisjZGVmaW5lIFlUOTIxWF9MRURfRFVUWShub20sIGRlbm9tKVx0KFlUOTIxWF9MRURfRFVUWV9ERU5PTSAqIChub20pIC8gKGRlbm9tKSlcbitcbitzdHJ1Y3QgeXQ5MjF4X3ByaXY7XG4rXG4rc3RydWN0IHl0OTIxeF9sZWQge1xuK1x0c3RydWN0IGxlZF9jbGFzc2RldiBjZGV2O1xuK1x0c3RydWN0IHl0OTIxeF9wb3J0ICpwb3J0O1xuK1x0dW5zaWduZWQgY2hhciBncm91cDtcbitcbitcdGJvb2wgdXNlX2N5Y2xlOjE7XG4rXHRib29sIHVzZV9kdXR5OjE7XG4rfTtcbitcbisjaWYgSVNfRU5BQkxFRChDT05GSUdfTkVUX0RTQV9ZVDkyMVhfTEVEUylcbitcbit2b2lkIHl0OTIxeF9sZWRzX3JlbW92ZShzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYpO1xuK2ludCB5dDkyMXhfbGVkc19zZXR1cChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYpO1xuK1xuKyNlbHNlXG4rXG4rc3RhdGljIGlubGluZSB2b2lkIHl0OTIxeF9sZWRzX3JlbW92ZShzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYpIHt9XG4rXG4rc3RhdGljIGlubGluZSBpbnQgeXQ5MjF4X2xlZHNfc2V0dXAoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2KVxuK3tcbitcdHJldHVybiAwO1xuK31cbitcbisjZW5kaWZcbitcbisjZW5kaWZcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL3NtaS5jIGIvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9zbWkuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLjE2NGMyNWVmNDk0YTFcbi0tLSAvZGV2L251bGxcbisrKyBiL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vc21pLmNcbkBAIC0wLDAgKzEsMTU3IEBAXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb3ItbGF0ZXJcbisvKlxuKyAqIENvcHlyaWdodCAoYykgMjAyNiBEYXZpZCBZYW5nXG4rICovXG4rXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvaW9wb2xsLmhcdTAwM2VcbitcbisjaW5jbHVkZSBcImNoaXAuaFwiXG4rI2luY2x1ZGUgXCJzbWkuaFwiXG4rXG4rI2RlZmluZSBZVDkyMVhfUE9MTF9TTEVFUF9VU1x0MTAwMDBcbisjZGVmaW5lIFlUOTIxWF9QT0xMX1RJTUVPVVRfVVNcdDEwMDAwMFxuK1xuK2ludCB5dDkyMXhfcmVnX3JlYWQoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgKnZhbHApXG4re1xuK1x0V0FSTl9PTighbXV0ZXhfaXNfbG9ja2VkKFx1MDAyNnByaXYtXHUwMDNlcmVnX2xvY2spKTtcbitcbitcdHJldHVybiBwcml2LVx1MDAzZXJlZ19vcHMtXHUwMDNlcmVhZChwcml2LVx1MDAzZXJlZ19jdHgsIHJlZywgdmFscCk7XG4rfVxuK1xuK2ludCB5dDkyMXhfcmVnX3dyaXRlKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyIHZhbClcbit7XG4rXHRXQVJOX09OKCFtdXRleF9pc19sb2NrZWQoXHUwMDI2cHJpdi1cdTAwM2VyZWdfbG9jaykpO1xuK1xuK1x0cmV0dXJuIHByaXYtXHUwMDNlcmVnX29wcy1cdTAwM2V3cml0ZShwcml2LVx1MDAzZXJlZ19jdHgsIHJlZywgdmFsKTtcbit9XG4rXG4raW50IHl0OTIxeF9yZWdfd2FpdChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiBtYXNrLCB1MzIgKnZhbHApXG4re1xuK1x0dTMyIHZhbDtcbitcdGludCByZXM7XG4rXHRpbnQgcmV0O1xuK1xuK1x0cmV0ID0gcmVhZF9wb2xsX3RpbWVvdXQoeXQ5MjF4X3JlZ19yZWFkLCByZXMsXG4rXHRcdFx0XHRyZXMgfHwgKHZhbCBcdTAwMjYgbWFzaykgPT0gKnZhbHAsXG4rXHRcdFx0XHRZVDkyMVhfUE9MTF9TTEVFUF9VUywgWVQ5MjFYX1BPTExfVElNRU9VVF9VUyxcbitcdFx0XHRcdGZhbHNlLCBwcml2LCByZWcsIFx1MDAyNnZhbCk7XG4rXHRpZiAocmV0KVxuK1x0XHRyZXR1cm4gcmV0O1xuK1x0aWYgKHJlcylcbitcdFx0cmV0dXJuIHJlcztcbitcbitcdCp2YWxwID0gdmFsO1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK2ludCB5dDkyMXhfcmVnX3VwZGF0ZV9iaXRzKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyIG1hc2ssIHUzMiB2YWwpXG4re1xuK1x0aW50IHJlcztcbitcdHUzMiB2O1xuK1x0dTMyIHU7XG4rXG4rXHRyZXMgPSB5dDkyMXhfcmVnX3JlYWQocHJpdiwgcmVnLCBcdTAwMjZ2KTtcbitcdGlmIChyZXMpXG4rXHRcdHJldHVybiByZXM7XG4rXG4rXHR1ID0gdjtcbitcdHUgXHUwMDI2PSB+bWFzaztcbitcdHUgfD0gdmFsO1xuK1x0aWYgKHUgPT0gdilcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHRyZXR1cm4geXQ5MjF4X3JlZ193cml0ZShwcml2LCByZWcsIHUpO1xuK31cbitcbitpbnRcbit5dDkyMXhfcmVnc19yZWFkKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyICp2YWxzLFxuK1x0XHQgdW5zaWduZWQgaW50IG51bV9yZWdzKVxuK3tcbitcdGludCByZXM7XG4rXG4rXHRmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSBcdTAwM2MgbnVtX3JlZ3M7IGkrKykge1xuK1x0XHRyZXMgPSB5dDkyMXhfcmVnX3JlYWQocHJpdiwgcmVnICsgNCAqIGksIFx1MDAyNnZhbHNbaV0pO1xuK1x0XHRpZiAocmVzKVxuK1x0XHRcdHJldHVybiByZXM7XG4rXHR9XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4raW50XG4reXQ5MjF4X3JlZ3Nfd3JpdGUoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCBjb25zdCB1MzIgKnZhbHMsXG4rXHRcdCAgdW5zaWduZWQgaW50IG51bV9yZWdzKVxuK3tcbitcdGludCByZXM7XG4rXG4rXHRmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSBcdTAwM2MgbnVtX3JlZ3M7IGkrKykge1xuK1x0XHRyZXMgPSB5dDkyMXhfcmVnX3dyaXRlKHByaXYsIHJlZyArIDQgKiBpLCB2YWxzW2ldKTtcbitcdFx0aWYgKHJlcylcbitcdFx0XHRyZXR1cm4gcmVzO1xuK1x0fVxuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK2ludFxuK3l0OTIxeF9yZWdzX3VwZGF0ZV9iaXRzKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgY29uc3QgdTMyICptYXNrcyxcbitcdFx0XHRjb25zdCB1MzIgKnZhbHMsIHVuc2lnbmVkIGludCBudW1fcmVncylcbit7XG4rXHRib29sIGNoYW5nZWQgPSBmYWxzZTtcbitcdHUzMiB2c1s0XTtcbitcdGludCByZXM7XG4rXG4rXHRpZiAoV0FSTl9PTl9PTkNFKG51bV9yZWdzIFx1MDAzZSBBUlJBWV9TSVpFKHZzKSkpXG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1xuK1x0cmVzID0geXQ5MjF4X3JlZ3NfcmVhZChwcml2LCByZWcsIHZzLCBudW1fcmVncyk7XG4rXHRpZiAocmVzKVxuK1x0XHRyZXR1cm4gcmVzO1xuK1xuK1x0Zm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgXHUwMDNjIG51bV9yZWdzOyBpKyspIHtcbitcdFx0dTMyIHUgPSB2c1tpXTtcbitcbitcdFx0dSBcdTAwMjY9IH5tYXNrc1tpXTtcbitcdFx0dSB8PSB2YWxzW2ldO1xuK1x0XHRpZiAodSAhPSB2c1tpXSlcbitcdFx0XHRjaGFuZ2VkID0gdHJ1ZTtcbitcbitcdFx0dnNbaV0gPSB1O1xuK1x0fVxuK1xuK1x0aWYgKCFjaGFuZ2VkKVxuK1x0XHRyZXR1cm4gMDtcbitcbitcdHJldHVybiB5dDkyMXhfcmVnc193cml0ZShwcml2LCByZWcsIHZzLCBudW1fcmVncyk7XG4rfVxuK1xuK2ludFxuK3l0OTIxeF9yZWdzX2NsZWFyX2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCBjb25zdCB1MzIgKm1hc2tzLFxuK1x0XHQgICAgICAgdW5zaWduZWQgaW50IG51bV9yZWdzKVxuK3tcbitcdGJvb2wgY2hhbmdlZCA9IGZhbHNlO1xuK1x0dTMyIHZzWzRdO1xuK1x0aW50IHJlcztcbitcbitcdGlmIChXQVJOX09OX09OQ0UobnVtX3JlZ3MgXHUwMDNlIEFSUkFZX1NJWkUodnMpKSlcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXG4rXHRyZXMgPSB5dDkyMXhfcmVnc19yZWFkKHByaXYsIHJlZywgdnMsIG51bV9yZWdzKTtcbitcdGlmIChyZXMpXG4rXHRcdHJldHVybiByZXM7XG4rXG4rXHRmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSBcdTAwM2MgbnVtX3JlZ3M7IGkrKykge1xuK1x0XHR1MzIgdSA9IHZzW2ldO1xuK1xuK1x0XHR1IFx1MDAyNj0gfm1hc2tzW2ldO1xuK1x0XHRpZiAodSAhPSB2c1tpXSlcbitcdFx0XHRjaGFuZ2VkID0gdHJ1ZTtcbitcbitcdFx0dnNbaV0gPSB1O1xuK1x0fVxuK1xuK1x0aWYgKCFjaGFuZ2VkKVxuK1x0XHRyZXR1cm4gMDtcbitcbitcdHJldHVybiB5dDkyMXhfcmVnc193cml0ZShwcml2LCByZWcsIHZzLCBudW1fcmVncyk7XG4rfVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vc21pLmggYi9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL3NtaS5oXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uMjk5NWU5MWYzYjNkMVxuLS0tIC9kZXYvbnVsbFxuKysrIGIvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9zbWkuaFxuQEAgLTAsMCArMSw5MiBAQFxuKy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9yLWxhdGVyICovXG4rLypcbisgKiBDb3B5cmlnaHQgKGMpIDIwMjYgRGF2aWQgWWFuZ1xuKyAqL1xuK1xuKyNpZm5kZWYgX1lUX1NNSV9IXG4rI2RlZmluZSBfWVRfU01JX0hcbitcbisjaW5jbHVkZSBcdTAwM2NsaW51eC90eXBlcy5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvd29yZHBhcnQuaFx1MDAzZVxuK1xuK3N0cnVjdCB5dDkyMXhfcHJpdjtcbitcbitpbnQgeXQ5MjF4X3JlZ19yZWFkKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyICp2YWxwKTtcbitpbnQgeXQ5MjF4X3JlZ193cml0ZShzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiB2YWwpO1xuK2ludCB5dDkyMXhfcmVnX3dhaXQoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgbWFzaywgdTMyICp2YWxwKTtcbitpbnQgeXQ5MjF4X3JlZ191cGRhdGVfYml0cyhzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiBtYXNrLFxuK1x0XHRcdCAgIHUzMiB2YWwpO1xuK1xuK3N0YXRpYyBpbmxpbmUgaW50XG4reXQ5MjF4X3JlZ19zZXRfYml0cyhzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiBtYXNrKVxuK3tcbitcdHJldHVybiB5dDkyMXhfcmVnX3VwZGF0ZV9iaXRzKHByaXYsIHJlZywgMCwgbWFzayk7XG4rfVxuK1xuK3N0YXRpYyBpbmxpbmUgaW50XG4reXQ5MjF4X3JlZ19jbGVhcl9iaXRzKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyIG1hc2spXG4re1xuK1x0cmV0dXJuIHl0OTIxeF9yZWdfdXBkYXRlX2JpdHMocHJpdiwgcmVnLCBtYXNrLCAwKTtcbit9XG4rXG4rc3RhdGljIGlubGluZSBpbnRcbit5dDkyMXhfcmVnX3RvZ2dsZV9iaXRzKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyIG1hc2ssIGJvb2wgc2V0KVxuK3tcbitcdHJldHVybiB5dDkyMXhfcmVnX3VwZGF0ZV9iaXRzKHByaXYsIHJlZywgbWFzaywgIXNldCA/IDAgOiBtYXNrKTtcbit9XG4rXG4rLyogU29tZSBtdWx0aS13b3JkIHJlZ2lzdGVycywgbGlrZSBWTEFObl9DVFJMLCBzaG91bGQgYmUgdHJlYXRlZCBhcyBhIHNpbmdsZVxuKyAqIGxvbmcgcmVnaXN0ZXIuIE1vcmUgc3BlY2lmaWNhbGx5LCB3cml0ZXMgdG8gcGFydHMgb2YgaXRzIHdvcmRzIHdvbid0IGJlY29tZVxuKyAqIHZpc2libGUsIHVudGlsIHRoZSBsYXN0IHdvcmQgaXMgd3JpdHRlbi5cbisgKlxuKyAqIEhlcmUgd2UgcmVxdWlyZSBmdWxsIHJlYWQgYW5kIHdyaXRlIG9wZXJhdGlvbnMgb3ZlciB0aGVzZSByZWdpc3RlcnMgdG9cbisgKiBlbGltaW5hdGUgcG90ZW50aWFsIGlzc3VlcywgYWx0aG91Z2ggcGFydGlhbCByZWFkcy93cml0ZXMgYXJlIGFsc28gcG9zc2libGUuXG4rICovXG4rXG4rc3RhdGljIGlubGluZSB2b2lkIHVwZGF0ZV9jdHJsc191bmFsaWduZWQodTMyICpsbywgdTMyICpoaSwgdTY0IG1hc2ssIHU2NCB2YWwpXG4re1xuK1x0KmxvIFx1MDAyNj0gfmxvd2VyXzMyX2JpdHMobWFzayk7XG4rXHQqaGkgXHUwMDI2PSB+dXBwZXJfMzJfYml0cyhtYXNrKTtcbitcdCpsbyB8PSBsb3dlcl8zMl9iaXRzKHZhbCk7XG4rXHQqaGkgfD0gdXBwZXJfMzJfYml0cyh2YWwpO1xuK31cbitcbisvKiB5dDkyMXhfcmVnc18qKCkgYXJlIGV4cG9ydGVkIGZvciBsaW5rYWdlIG9ubHkuIERvIG5vdCB1c2UgdGhlbSBkaXJlY3RseS4gVXNlXG4rICogeXQ5MjF4X3JlZzY0XyooKSBvciB5dDkyMXhfcmVnOTZfKigpIGluc3RlYWQuXG4rICovXG4rXG4raW50IHl0OTIxeF9yZWdzX3JlYWQoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgKnZhbHMsXG4rXHRcdCAgICAgdW5zaWduZWQgaW50IG51bV9yZWdzKTtcbitpbnQgeXQ5MjF4X3JlZ3Nfd3JpdGUoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCBjb25zdCB1MzIgKnZhbHMsXG4rXHRcdCAgICAgIHVuc2lnbmVkIGludCBudW1fcmVncyk7XG4raW50IHl0OTIxeF9yZWdzX3VwZGF0ZV9iaXRzKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgY29uc3QgdTMyICptYXNrcyxcbitcdFx0XHQgICAgY29uc3QgdTMyICp2YWxzLCB1bnNpZ25lZCBpbnQgbnVtX3JlZ3MpO1xuK2ludCB5dDkyMXhfcmVnc19jbGVhcl9iaXRzKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgY29uc3QgdTMyICptYXNrcyxcbitcdFx0XHQgICB1bnNpZ25lZCBpbnQgbnVtX3JlZ3MpO1xuK1xuK3N0YXRpYyBpbmxpbmUgaW50XG4reXQ5MjF4X3JlZzY0X3dyaXRlKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgY29uc3QgdTMyICp2YWxzKVxuK3tcbitcdHJldHVybiB5dDkyMXhfcmVnc193cml0ZShwcml2LCByZWcsIHZhbHMsIDIpO1xuK31cbitcbitzdGF0aWMgaW5saW5lIGludFxuK3l0OTIxeF9yZWc2NF91cGRhdGVfYml0cyhzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIGNvbnN0IHUzMiAqbWFza3MsXG4rXHRcdFx0IGNvbnN0IHUzMiAqdmFscylcbit7XG4rXHRyZXR1cm4geXQ5MjF4X3JlZ3NfdXBkYXRlX2JpdHMocHJpdiwgcmVnLCBtYXNrcywgdmFscywgMik7XG4rfVxuK1xuK3N0YXRpYyBpbmxpbmUgaW50XG4reXQ5MjF4X3JlZzY0X2NsZWFyX2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCBjb25zdCB1MzIgKm1hc2tzKVxuK3tcbitcdHJldHVybiB5dDkyMXhfcmVnc19jbGVhcl9iaXRzKHByaXYsIHJlZywgbWFza3MsIDIpO1xuK31cbitcbitzdGF0aWMgaW5saW5lIGludFxuK3l0OTIxeF9yZWc5Nl93cml0ZShzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIGNvbnN0IHUzMiAqdmFscylcbit7XG4rXHRyZXR1cm4geXQ5MjF4X3JlZ3Nfd3JpdGUocHJpdiwgcmVnLCB2YWxzLCAzKTtcbit9XG4rXG4rI2VuZGlmXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNlQyMDozOTowMi43MDY2NTM2NTdaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMzUxMTQ4NzUwMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipXb3J0aEZ1enppbmcgQXNzZXNzbWVudDogTW90b3Jjb21tIFlUOTIxNSBFdGhlcm5ldCBTd2l0Y2ggRHJpdmVyKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBhZGRzIExFRCBzdXBwb3J0IGZvciB0aGUgTW90b3Jjb21tIFlUOTIxNSBldGhlcm5ldCBzd2l0Y2ggY2hpcCwgbW92aW5nIHRoZSBkcml2ZXIgYXJvdW5kIGFuZCBpbnRyb2R1Y2luZyBhIG5ldyBjb25maWcgb3B0aW9uLiBNeSBmaXJzdCB0aG91Z2h0IGlzOiBjYW4gSSBldmVuIHJlYWNoIHRoaXMgdGhpbmcgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCBsaWtlIFFFTVU/IERTQSBkcml2ZXJzLCBpbiBnZW5lcmFsLCBhcmUgZm9yIHBoeXNpY2FsIHN3aXRjaCBjaGlwcywgY29ubmVjdGVkIHZpYSBNRElPL1NQSS9JMkMsIHdoaWNoIG1ha2VzIG1lIGRvdWJ0IGl0LiBVbmxlc3MgdGhlcmUncyAqc3BlY2lmaWMqIFFFTVUgZW11bGF0aW9uIGZvciB0aGlzIHBhcnRpY3VsYXIgY2hpcCwgb3IgbWF5YmUgZXZlbiBhIHNvZnR3YXJlLWVtdWxhdGVkIHZlcnNpb24gd2l0aGluIHRoZSBrZXJuZWwsIEknbSBvdXQgb2YgbHVjay4gSSdkIG5lZWQgdG8gY2hlY2sgZm9yIFFFTVUgZW11bGF0aW9uLCBidXQgd2l0aG91dCBzb3VyY2UsIGl0J3MgZGlmZmljdWx0LiBEU0EgZHJpdmVycyBhcmVuJ3QgdXN1YWxseSBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuXG5Db3VsZCBJIGdldCBhcm91bmQgaXQgd2l0aCBhIGRldmljZSB0cmVlIG92ZXJsYXksIG9yIHVzZXItc3BhY2UgdG9vbHMgbGlrZSBgaTJjLXN0dWJgIG9yIGBtZGlvLW1vY2t1cGA/IGBtZGlvLW1vY2t1cGAgZXhpc3RzLCBidXQgaXQncyByZWFsbHkgZm9yIFBIWXMsIHNvIEkgZG9uJ3Qga25vdyBpZiBpdCdsbCBlbXVsYXRlIGEgZnVsbCBEU0Egc3dpdGNoLiBFdmVuIGlmIGl0ICpjb3VsZCosIGlzIGl0IHdvcnRoIGZ1enppbmc/IFRoZXNlIGhhcmR3YXJlLXNwZWNpZmljIGRyaXZlcnMgdGhhdCBuZWVkIHBoeXNpY2FsIGhhcmR3YXJl4oCURFNBIHN3aXRjaGVzLCBQSFlz4oCUdXN1YWxseSBhcmVuJ3QgZnV6emVkIHVubGVzcyB0aGVyZSdzIHNvZnR3YXJlIGVtdWxhdGlvbiBvciB0aGV5J3JlIHBhcnQgb2YgYSBtb2NrYWJsZSBnZW5lcmljIHN1YnN5c3RlbS5cblxuTG9va2luZyBhdCB0aGUgaW5zdHJ1Y3Rpb25zIGFnYWluLCBpdCBzYXlzIHRvIHJldHVybiBgV29ydGhGdXp6aW5nPWZhbHNlYCBpZiB0aGUgY29kZSBwYXRoIGlzIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLCBldmVuIHdpdGggc29mdHdhcmUgZW11bGF0aW9uLCBvciBpZiBpdCdzIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzLiBUaGlzIGlzIGEgdmVuZG9yLXNwZWNpZmljIEV0aGVybmV0IHN3aXRjaCBjaGlwIGRyaXZlciwgc28gaXQgZmFsbHMgaW50byB0aGUgZmlyc3QgY2F0ZWdvcnkuIEl0J3MgYW4gTURJTyBkZXZpY2UuIENhbiBNRElPIGRldmljZXMgYmUgZnV6emVkIGluIHN5emthbGxlcj8gU3l6a2FsbGVyIGhhcyBJMkMvU1BJIGZ1enppbmcsIGJ1dCBJIGRvbid0IHJlY2FsbCBpdCBiZWluZyBmb3IgTURJTyBkaXJlY3RseSwgb3IgRFNBLCBmb3IgdGhhdCBtYXR0ZXIuXG5cblRoZSBwcm9tcHQgc3BlY2lmaWNhbGx5IG1lbnRpb25zIGNvZGUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsIGVudmlyb25tZW50cy4gVGhpcyBpcyBhIERTQSBzd2l0Y2ggZHJpdmVyIHRoYXQgbmVlZHMgYW4gTURJTyBidXMgYW5kIGEgZGV2aWNlIHRyZWUgc2V0dXAsIHNvIGluIGEgc3RhbmRhcmQgUUVNVSBlbnZpcm9ubWVudCwgd2l0aG91dCAqc3BlY2lmaWMqIGVtdWxhdGlvbiwgaXQncyBoaWdobHkgdW5saWtlbHkgdG8gYmUgcmVhY2hhYmxlLiBUaGVyZWZvcmUsIGBXb3J0aEZ1enppbmc9ZmFsc2VgLlxuXG5MZXQgbWUganVzdCBkb3VibGUtY2hlY2ssIHRob3VnaCwgdG8gYmUgYWJzb2x1dGVseSBzdXJlLiBUaGlzIGRyaXZlciByZWdpc3RlcnMgaXRzZWxmIGFzIGFuIE1ESU8gZGV2aWNlIGRyaXZlcjogYG1kaW9fZHJpdmVyX3JlZ2lzdGVyKFx1MDAyNnl0OTIxeF9tZGlvX2RyaXZlcilgLiBGb3IgdGhlIGRyaXZlciB0byBwcm9iZSwgYW4gTURJTyBkZXZpY2Ugd2l0aCBhIG1hdGNoaW5nIElEIG9yIGRldmljZSB0cmVlIGNvbXBhdGlibGUgc3RyaW5nIG5lZWRzIHRvIGJlIHByZXNlbnQuIEluIFFFTVUsIHVubGVzcyB0aGVyZSdzIGEgc3BlY2lmaWMgYm9hcmQgaW5zdGFudGlhdGlvbiwgaXQgd29uJ3QgcHJvYmUuIFdoaWxlIHN5emthbGxlciBjYW4gaW5qZWN0IGRldmljZSB0cmVlIG5vZGVzLCB0aGUgZHJpdmVyIHdvdWxkIHN0aWxsIHRyeSB0byByZWFkL3dyaXRlIE1ESU8gcmVnaXN0ZXJzLiBJZiB0aGVyZSdzIG5vIGhhcmR3YXJlLCB0aGUgcHJvYmUgd2lsbCBmYWlsIGVhcmx5LCBsaWtlbHkgYnkgY2hlY2tpbmcgYSBoYXJkd2FyZSBJRC4gTGV0J3MgbG9vayBhdCBgeXQ5MjF4X21kaW9fcHJvYmVgIGp1c3QgdG8gZG91YmxlIGNoZWNrLCB0aG91Z2ggSSBkb24ndCBoYXZlIHRoZSBzb3VyY2UgZm9yIHRoYXQgYXQgdGhlIG1vbWVudC4gQnV0IHRoZSBjb25jbHVzaW9uIHJlbWFpbnM6IG5vdCB3b3J0aCBmdXp6aW5nLCBiYXNlZCBvbiB0aGlzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTQ0OCwiT3V0cHV0VG9rZW5zIjoyNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwNTcsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNlQyMDozOToxNi4yMTgxNDQ0M1oiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjk0NTM5Mzk3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInl0OTIxeF9tZGlvX3Byb2JlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jPTQ2ODI9c3RhdGljIHZvaWQgeXQ5MjF4X21kaW9fcmVtb3ZlKHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldilcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTQ3MTctXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6NDcxODpzdGF0aWMgaW50IHl0OTIxeF9tZGlvX3Byb2JlKHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldilcXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy00NzE5LXtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jPTQ3NzI9c3RhdGljIHN0cnVjdCBtZGlvX2RyaXZlciB5dDkyMXhfbWRpb19kcml2ZXIgPSB7XFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6NDc3MzpcXHQucHJvYmUgPSB5dDkyMXhfbWRpb19wcm9iZSxcXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy00Nzc0LVxcdC5yZW1vdmUgPSB5dDkyMXhfbWRpb19yZW1vdmUsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE2VDIwOjM5OjE3LjkxMjY5MTU4N1oiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUwOTM4ODIxNTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIHRoZSBgeXQ5MjF4X21kaW9fcHJvYmVgIEZ1bmN0aW9uKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIGB5dDkyMXhfbWRpb19wcm9iZWAuIE15IGltbWVkaWF0ZSBnb2FsIGlzIHRvIHVuZGVyc3RhbmQgaXRzIHJvbGUgd2l0aGluIHRoZSBicm9hZGVyIGZyYW1ld29yaywgcHJlc3VtYWJseSByZWxhdGVkIHRvIHRoZSBpbml0aWFsaXphdGlvbiBhbmQgaW50ZXJhY3Rpb24gd2l0aCBhbiBNRElPIChNYW5hZ2VtZW50IERhdGEgSW5wdXQvT3V0cHV0KSBpbnRlcmZhY2UsIGxpa2VseSBhc3NvY2lhdGVkIHdpdGggYSBQSFkgb3Igb3RoZXIgbmV0d29yayBkZXZpY2Ugd2l0aGluIGEgc3lzdGVtIGxldmVyYWdpbmcgYSBZdDkyMXggY2hpcC4gSSdsbCBiZSBsb29raW5nIGZvciBrZXkgYXNwZWN0czpcblxuKiAgICoqRGV2aWNlIFRyZWUgSW50ZXJhY3Rpb246KiogSG93IGRvZXMgdGhpcyBmdW5jdGlvbiB1dGlsaXplIHRoZSBEZXZpY2UgVHJlZSAob3IgZXF1aXZhbGVudCBjb25maWd1cmF0aW9uIG1lY2hhbmlzbSkgdG8gaWRlbnRpZnkgYW5kIGNvbmZpZ3VyZSB0aGUgc3BlY2lmaWMgTURJTyBjb250cm9sbGVyIGFuZCBhdHRhY2hlZCBQSFkocyk/IEknbGwgYmUgc2VhcmNoaW5nIGZvciBjYWxscyB0byBmdW5jdGlvbnMgbGlrZSBgb2ZfbWF0Y2hfdGFibGVgLCBgb2ZfcHJvcGVydHlfcmVhZF8qYCwgYW5kIHRoZSBsaWtlLiBUaGlzIHdpbGwgYmUgdGhlIGZvdW5kYXRpb25hbCBpbmZvcm1hdGlvbi5cbiogICAqKlJlc291cmNlIEFsbG9jYXRpb246KiogV2hhdCByZXNvdXJjZXMgZG9lcyBpdCByZXF1ZXN0IGFuZCBtYW5hZ2U/IFNwZWNpZmljYWxseSwgSSdtIGludGVyZXN0ZWQgaW4gbWVtb3J5IHJlZ2lvbnMgKGZvciBNTUlPIGFjY2VzcyksIGludGVycnVwdCBsaW5lcywgYW5kIHBvc3NpYmx5IGNsb2NrIGNvbmZpZ3VyYXRpb25zLiBUaGlzIGluY2x1ZGVzIGhvdyBpdCBoYW5kbGVzIGVycm9yIGNvbmRpdGlvbnMgcmVsYXRlZCB0byByZXNvdXJjZSBhbGxvY2F0aW9uLCBhbmQgd2hhdCBpdCBkb2VzIGluIGNhc2Ugb2YgZmFpbHVyZXMuXG4qICAgKipNRElPIENvbnRyb2xsZXIgSW5pdGlhbGl6YXRpb246KiogSSBuZWVkIHRvIGZpbmQgdGhlIHNwZWNpZmljIGluaXRpYWxpemF0aW9uIHJvdXRpbmVzIGZvciB0aGUgdW5kZXJseWluZyBNRElPIGNvbnRyb2xsZXIuIFRoaXMgbWlnaHQgaW52b2x2ZSBzZXR0aW5nIHVwIHRoZSBjbG9jayBmcmVxdWVuY3ksIGNvbmZpZ3VyaW5nIHRoZSBNRElPIGJ1cyBzcGVlZCwgYW5kIHBvdGVudGlhbGx5IGVuYWJsaW5nIHNwZWNpZmljIE1ESU8gZnVuY3Rpb25hbGl0aWVzIChsaWtlIGF1dG8tbmVnb3RpYXRpb24sIGV0Yy4pLiBJIGFudGljaXBhdGUgbG93LWxldmVsIHJlZ2lzdGVyIHdyaXRlcyBhdCBzb21lIHBvaW50LlxuKiAgICoqUEhZIERldGVjdGlvbiBhbmQgQ29uZmlndXJhdGlvbjoqKiBJcyB0aGVyZSBQSFkgZGV0ZWN0aW9uIGludm9sdmVkPyBEb2VzIGl0IHByb2JlIGZvciBzcGVjaWZpYyBQSFlzIG9yIHVzZSBhIGdlbmVyaWMgYXBwcm9hY2g/IFdoYXQgYXJlIHRoZSBtZWNoYW5pc21zIGZvciBjb25maWd1cmluZyB0aGUgZGV0ZWN0ZWQgUEhZPyBUaGlzIGlzIGNyaXRpY2FsIGZvciB1bmRlcnN0YW5kaW5nIHRoZSBkZXZpY2UncyBvcGVyYXRpb25hbCBjaGFyYWN0ZXJpc3RpY3MuIEkgZXhwZWN0IHRvIHNlZSByZWdpc3RlciBhY2Nlc3NlcywgYnV0IEknbSBsb29raW5nIGZvciB0aGUgb3ZlcmFsbCBsb2dpYyB0byBzZWUgaG93IHRoZSBzb2Z0d2FyZSBkZXRlcm1pbmVzIHdoZXRoZXIgUEhZcyBhcmUgcHJlc2VudCBvciBub3QuXG4qICAgKipEcml2ZXIgUmVnaXN0cmF0aW9uOioqIEhvdyBkb2VzIHRoZSBkcml2ZXIgcmVnaXN0ZXIgaXRzZWxmIHdpdGggdGhlIGtlcm5lbCdzIE1ESU8gc3Vic3lzdGVtIChpZiBhcHBsaWNhYmxlKT8gSSdsbCBsb29rIGZvciByZWdpc3RyYXRpb25zIG9mIGJ1cyBkcml2ZXJzLCBkZXZpY2UgZHJpdmVycywgb3IgYW55dGhpbmcgcmVsYXRlZCB0byB0aGUga2VybmVsJ3MgY29yZSBNRElPIEFQSS4gSSdtIHRyeWluZyB0byBzZWUgaG93IHRoZSBzeXN0ZW0gdW5kZXJzdGFuZHMgd2hhdCBpcyBjb25uZWN0ZWQuXG4qICAgKipFcnJvciBIYW5kbGluZzoqKiBJdCB3aWxsIGJlIGltcG9ydGFudCB0byBjYXJlZnVsbHkgZXhhbWluZSB0aGUgZXJyb3IgY29uZGl0aW9ucyBhbmQgaGFuZGxpbmcgdGhyb3VnaG91dCB0aGUgZnVuY3Rpb24uIEFyZSB0aGVyZSByZXRyaWVzPyBGYWxsYmFja3M/IEdyYWNlZnVsIGVycm9yIHJlcG9ydGluZz8gSG93IGRvZXMgaXQgaGFuZGxlIGRldmljZS1zcGVjaWZpYyBpc3N1ZXM/IEknbGwgYmUgYXNzZXNzaW5nIHRoZSByb2J1c3RuZXNzIG9mIHRoZSBpbXBsZW1lbnRhdGlvbi5cblxuSW4gZXNzZW5jZSwgSSBuZWVkIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2YgaG93IHRoaXMgZnVuY3Rpb24gc2V0cyB1cCB0aGUgTURJTyBpbnRlcmZhY2UsIGRpc2NvdmVycyBhbmQgY29uZmlndXJlcyBhbnkgY29ubmVjdGVkIFBIWXMsIGFuZCBpbnRlZ3JhdGVzIHdpdGggdGhlIHJlc3Qgb2YgdGhlIHN5c3RlbS4gSSdtIHJlYWR5IHRvIGRpZyBpbnRvIHRoZSBjb2RlIGFuZCBzdGFydCBmaWd1cmluZyB0aGlzIG91dC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjM0NDksIk91dHB1dFRva2VucyI6NDIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNlQyMDozOToyMy4wMDY1NzY0MVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI0MDQ3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA0NzE4LFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCI0NzE4OlxcdHN0YXRpYyBpbnQgeXQ5MjF4X21kaW9fcHJvYmUoc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2KVxcbjQ3MTk6XFx0e1xcbjQ3MjA6XFx0XFx0c3RydWN0IGRldmljZSAqZGV2ID0gXFx1MDAyNm1kaW9kZXYtXFx1MDAzZWRldjtcXG40NzIxOlxcdFxcdHN0cnVjdCB5dDkyMXhfcmVnX21kaW8gKm1kaW87XFxuNDcyMjpcXHRcXHRzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXY7XFxuNDcyMzpcXHRcXHRzdHJ1Y3QgZHNhX3N3aXRjaCAqZHM7XFxuNDcyNDpcXHRcXG40NzI1OlxcdFxcdHByaXYgPSBkZXZtX2t6YWxsb2MoZGV2LCBzaXplb2YoKnByaXYpLCBHRlBfS0VSTkVMKTtcXG40NzI2OlxcdFxcdGlmICghcHJpdilcXG40NzI3OlxcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbjQ3Mjg6XFx0XFxuNDcyOTpcXHRcXHRtZGlvID0gZGV2bV9remFsbG9jKGRldiwgc2l6ZW9mKCptZGlvKSwgR0ZQX0tFUk5FTCk7XFxuNDczMDpcXHRcXHRpZiAoIW1kaW8pXFxuNDczMTpcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG40NzMyOlxcdFxcbjQ3MzM6XFx0XFx0bWRpby1cXHUwMDNlYnVzID0gbWRpb2Rldi1cXHUwMDNlYnVzO1xcbjQ3MzQ6XFx0XFx0bWRpby1cXHUwMDNlYWRkciA9IG1kaW9kZXYtXFx1MDAzZWFkZHI7XFxuNDczNTpcXHRcXHRtZGlvLVxcdTAwM2Vzd2l0Y2hpZCA9IDA7XFxuNDczNjpcXHRcXG40NzM3OlxcdFxcdG11dGV4X2luaXQoXFx1MDAyNnByaXYtXFx1MDAzZXJlZ19sb2NrKTtcXG40NzM4OlxcdFxcbjQ3Mzk6XFx0XFx0cHJpdi1cXHUwMDNlcmVnX29wcyA9IFxcdTAwMjZ5dDkyMXhfcmVnX29wc19tZGlvO1xcbjQ3NDA6XFx0XFx0cHJpdi1cXHUwMDNlcmVnX2N0eCA9IG1kaW87XFxuNDc0MTpcXHRcXG40NzQyOlxcdFxcdGZvciAoc2l6ZV90IGkgPSAwOyBpIFxcdTAwM2MgQVJSQVlfU0laRShwcml2LVxcdTAwM2Vwb3J0cyk7IGkrKykge1xcbjQ3NDM6XFx0XFx0XFx0c3RydWN0IHl0OTIxeF9wb3J0ICpwcCA9IFxcdTAwMjZwcml2LVxcdTAwM2Vwb3J0c1tpXTtcXG40NzQ0OlxcdFxcbjQ3NDU6XFx0XFx0XFx0cHAtXFx1MDAzZWluZGV4ID0gaTtcXG40NzQ2OlxcdFxcdFxcdElOSVRfREVMQVlFRF9XT1JLKFxcdTAwMjZwcC1cXHUwMDNlbWliX3JlYWQsIHl0OTIxeF9wb2xsX21pYik7XFxuNDc0NzpcXHRcXHR9XFxuNDc0ODpcXHRcXG40NzQ5OlxcdFxcdGRzID0gXFx1MDAyNnByaXYtXFx1MDAzZWRzO1xcbjQ3NTA6XFx0XFx0ZHMtXFx1MDAzZWRldiA9IGRldjtcXG40NzUxOlxcdFxcdGRzLVxcdTAwM2Vhc3Npc3RlZF9sZWFybmluZ19vbl9jcHVfcG9ydCA9IHRydWU7XFxuNDc1MjpcXHRcXHRkcy1cXHUwMDNlZHNjcF9wcmlvX21hcHBpbmdfaXNfZ2xvYmFsID0gdHJ1ZTtcXG40NzUzOlxcdFxcdGRzLVxcdTAwM2Vwcml2ID0gcHJpdjtcXG40NzU0OlxcdFxcdGRzLVxcdTAwM2VvcHMgPSBcXHUwMDI2eXQ5MjF4X2RzYV9zd2l0Y2hfb3BzO1xcbjQ3NTU6XFx0XFx0ZHMtXFx1MDAzZWFnZWluZ190aW1lX21pbiA9IDEgKiA1MDAwO1xcbjQ3NTY6XFx0XFx0ZHMtXFx1MDAzZWFnZWluZ190aW1lX21heCA9IFUxNl9NQVggKiA1MDAwO1xcbjQ3NTc6XFx0XFx0ZHMtXFx1MDAzZXBoeWxpbmtfbWFjX29wcyA9IFxcdTAwMjZ5dDkyMXhfcGh5bGlua19tYWNfb3BzO1xcbjQ3NTg6XFx0XFx0ZHMtXFx1MDAzZW51bV9sYWdfaWRzID0gWVQ5MjFYX0xBR19OVU07XFxuNDc1OTpcXHRcXHRkcy1cXHUwMDNlbnVtX3BvcnRzID0gWVQ5MjFYX1BPUlRfTlVNO1xcbjQ3NjA6XFx0XFxuNDc2MTpcXHRcXHRtZGlvZGV2X3NldF9kcnZkYXRhKG1kaW9kZXYsIHByaXYpO1xcbjQ3NjI6XFx0XFxuNDc2MzpcXHRcXHRyZXR1cm4gZHNhX3JlZ2lzdGVyX3N3aXRjaChkcyk7XFxuNDc2NDpcXHR9XFxuNDc2NTpcXHRcXG40NzY2OlxcdHN0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIHl0OTIxeF9vZl9tYXRjaFtdID0ge1xcbjQ3Njc6XFx0XFx0eyAuY29tcGF0aWJsZSA9IFxcXCJtb3RvcmNvbW0seXQ5MjE1XFxcIiB9LFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNlQyMDozOToyMy4wMDY4MTg5M1oiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM5MzIxMDc4NDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBEU0EgU3dpdGNoIFByb2JlKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwcm9iZSBmdW5jdGlvbiBhbmQgaXQncyB0cnlpbmcgdG8gcmVnaXN0ZXIgYSBEU0Egc3dpdGNoLiBUaGF0J3MgdGhlIHN0YXJ0aW5nIHBvaW50LiBCdXQsIHRoZSBjcnVjaWFsIHBpZWNlIGlzIHRoYXQgdGhpcyBwcm9iZSByZXF1aXJlcyBhbiBNRElPIGRldmljZSB0byBiZSBwcmVzZW50LCBhbmQgc3BlY2lmaWNhbGx5LCBvbmUgdGhhdCBpZGVudGlmaWVzIGl0c2VsZiB3aXRoIHRoZSBcIm1vdG9yY29tbSx5dDkyMTVcIiBjb21wYXRpYmxlIHN0cmluZy5cblxuVGhlIGltbWVkaWF0ZSBwcm9ibGVtIGlzIHRoYXQgU3l6a2FsbGVyLCBpbiBpdHMgY3VycmVudCBzdGF0ZSwgaXNuJ3QgY2FwYWJsZSBvZiBlbXVsYXRpbmcgZWl0aGVyIE1ESU8gZGV2aWNlcyBvciBEU0Egc3dpdGNoZXMuIEkgY2FuIHNlZSBhIHBvdGVudGlhbCB3b3JrYXJvdW5kIOKAkyBpbmplY3RpbmcgYSBkZXZpY2UgdHJlZSBub2RlLCB0aGVvcmV0aWNhbGx5LCBjb3VsZCB0cmlnZ2VyIHRoZSBwcm9iZSBmdW5jdGlvbi4gQnV0IGV2ZW4gaWYgSSBnb3QgdGhhdCBmYXIsIHRoZSBkcml2ZXIgaXMgaW1tZWRpYXRlbHkgZ29pbmcgdG8gdHJ5IGFuZCB0YWxrIHRvIHRoZSBoYXJkd2FyZSB1c2luZyBNRElPLiBJJ20gdGhpbmtpbmcgc3BlY2lmaWNhbGx5IGFib3V0IHRoYXQgYHl0OTIxeF9kc2Ffc2V0dXBgIGZ1bmN0aW9uOyBpdCdzIGNhbGxlZCBieSBgZHNhX3JlZ2lzdGVyX3N3aXRjaGAsIHNvIGl0J3MgYSBrZXkgcGFydCBvZiB0aGUgc2V0dXAuIEkgbmVlZCB0byB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgdGhhdCBmdW5jdGlvbiB0byByZWFsbHkgdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgcmVsaWFuY2Ugb24gTURJTy4gTGV0J3MgZGlnIGludG8gYHl0OTIxeF9kc2Ffc2V0dXBgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNDk0NCwiT3V0cHV0VG9rZW5zIjoyNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyOCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE2VDIwOjM5OjI2LjkzODkzMjA0MloiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjcyOTczMTk1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInl0OTIxeF9kc2Ffc2V0dXBcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM9NDQ5NT1zdGF0aWMgaW50IHl0OTIxeF9jaGlwX3NldHVwKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdilcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTQ1MzYtXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6NDUzNzpzdGF0aWMgaW50IHl0OTIxeF9kc2Ffc2V0dXAoc3RydWN0IGRzYV9zd2l0Y2ggKmRzKVxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTQ1Mzgte1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM9NDU5OD1zdGF0aWMgY29uc3Qgc3RydWN0IGRzYV9zd2l0Y2hfb3BzIHl0OTIxeF9kc2Ffc3dpdGNoX29wcyA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTQ2NjgtXFx0LyogY2hpcCAqL1xcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjQ2Njk6XFx0LnNldHVwXFx0XFx0XFx0PSB5dDkyMXhfZHNhX3NldHVwLFxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTQ2NzAtfTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTZUMjA6Mzk6MjguNjExOTExMzQ3WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzIwODk5NjU1NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQ6XG5cbioqRGl2aW5nIGludG8gdGhlIFNldHVwIFNjcmlwdCoqXG5cbkFscmlnaHQsIHRpbWUgdG8gY3JhY2sgb3BlbiBgeXQ5MjF4X2RzYV9zZXR1cGAuIExldCdzIHNlZSB3aGF0IHdlJ3ZlIGdvdCBoZXJlLiBJJ20gZXhwZWN0aW5nIHRoaXMgc2NyaXB0IHRvIGhhbmRsZSBhbGwgdGhlIGluaXRpYWwgY29uZmlndXJhdGlvbnMgYW5kIGdyb3VuZHdvcmsgZm9yIHRoZSBEU0Egc3lzdGVtLiBJJ2xsIGJlIGxvb2tpbmcgY2xvc2VseSBhdCBob3cgaXQgaGFuZGxlcyBrZXkgZ2VuZXJhdGlvbiwgY2VydGlmaWNhdGUgbWFuYWdlbWVudCAoaWYgYXBwbGljYWJsZSksIGFuZCBhbnkgbmV0d29yayBzZXR0aW5ncyBvciBkZXBlbmRlbmNpZXMgaXQgc2V0cyB1cC4gTXkgaW1tZWRpYXRlIGZvY3VzIHdpbGwgYmUgb24gdW5kZXJzdGFuZGluZyB0aGUgYXV0b21hdGlvbiBmbG93LCBsb29raW5nIGZvciBwb3RlbnRpYWwgYXJlYXMgb2Ygb3B0aW1pemF0aW9uLCBhbmQgaWRlbnRpZnlpbmcgYW55IGFzc3VtcHRpb25zIG9yIGV4dGVybmFsIGRlcGVuZGVuY2llcyB0aGlzIHNjcmlwdCByZWxpZXMgb24uIEZyb20gYSBxdWljayBnbGFuY2UgYXQgdGhlIGZpbGUgbmFtZSwgXCJzZXR1cCxcIiBJIGFtIGV4cGVjdGluZyB0aGlzIHNjcmlwdCB0byBjb3ZlciBldmVyeXRoaW5nIGZyb20gdGhlIHN0YXJ0LiBJJ2xsIG5lZWQgdG8ga25vdyB3aGV0aGVyIHRvIG1ha2UgY2hhbmdlcyB0byB0aGlzIGZpbGUgb3IgaWYgSSBuZWVkIHRvIGxvb2sgZm9yIHNvbWV0aGluZyBkaWZmZXJlbnQuIEknbGwgYmUgbG9va2luZyB0byBxdWlja2x5IGRldGVybWluZSBpZiBpdCdzIHdlbGwtZG9jdW1lbnRlZCBhbmQgZm9sbG93cyBiZXN0IHByYWN0aWNlczsgcmVhZGFiaWxpdHkgaXMga2V5LiBJJ2xsIGJlIGNoZWNraW5nIGZvciBzZWN1cml0eSB2dWxuZXJhYmlsaXRpZXMgYXMgd2VsbC4gU2hvdWxkIGJlIGFuIGludGVyZXN0aW5nIHJlYWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI1NTk5LCJPdXRwdXRUb2tlbnMiOjQyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTZUMjA6Mzk6MzEuODIwOTExNDYyWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMwODk2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA0NTM3LFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCI0NTM3OlxcdHN0YXRpYyBpbnQgeXQ5MjF4X2RzYV9zZXR1cChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpXFxuNDUzODpcXHR7XFxuNDUzOTpcXHRcXHRzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYgPSB0b195dDkyMXhfcHJpdihkcyk7XFxuNDU0MDpcXHRcXHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSB0b19kZXZpY2UocHJpdik7XFxuNDU0MTpcXHRcXHRzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wID0gZGV2LVxcdTAwM2VvZl9ub2RlO1xcbjQ1NDI6XFx0XFx0c3RydWN0IGRldmljZV9ub2RlICpjaGlsZDtcXG40NTQzOlxcdFxcdGludCByZXM7XFxuNDU0NDpcXHRcXG40NTQ1OlxcdFxcdG11dGV4X2xvY2soXFx1MDAyNnByaXYtXFx1MDAzZXJlZ19sb2NrKTtcXG40NTQ2OlxcdFxcdHJlcyA9IHl0OTIxeF9jaGlwX3Jlc2V0KHByaXYpO1xcbjQ1NDc6XFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZwcml2LVxcdTAwM2VyZWdfbG9jayk7XFxuNDU0ODpcXHRcXG40NTQ5OlxcdFxcdGlmIChyZXMpXFxuNDU1MDpcXHRcXHRcXHRyZXR1cm4gcmVzO1xcbjQ1NTE6XFx0XFxuNDU1MjpcXHRcXHQvKiBSZWdpc3RlciB0aGUgaW50ZXJuYWwgbWRpbyBidXMuIE5vZGVzIGZvciBpbnRlcm5hbCBwb3J0cyBzaG91bGQgaGF2ZVxcbjQ1NTM6XFx0XFx0ICogcHJvcGVyIHBoeS1oYW5kbGUgcG9pbnRpbmcgdG8gdGhlaXIgUEhZcy4gTm90IGVuYWJsaW5nIHRoZSBpbnRlcm5hbFxcbjQ1NTQ6XFx0XFx0ICogYnVzIGlzIHBvc3NpYmxlLCB0aG91Z2ggcHJldHR5IHdpcmVkLCBpZiBpbnRlcm5hbCBwb3J0cyBhcmUgbm90IHVzZWQuXFxuNDU1NTpcXHRcXHQgKi9cXG40NTU2OlxcdFxcdGNoaWxkID0gb2ZfZ2V0X2NoaWxkX2J5X25hbWUobnAsIFxcXCJtZGlvXFxcIik7XFxuNDU1NzpcXHRcXHRpZiAoY2hpbGQpIHtcXG40NTU4OlxcdFxcdFxcdHJlcyA9IHl0OTIxeF9tYnVzX2ludF9pbml0KHByaXYsIGNoaWxkKTtcXG40NTU5OlxcdFxcdFxcdG9mX25vZGVfcHV0KGNoaWxkKTtcXG40NTYwOlxcdFxcdFxcdGlmIChyZXMpXFxuNDU2MTpcXHRcXHRcXHRcXHRyZXR1cm4gcmVzO1xcbjQ1NjI6XFx0XFx0fVxcbjQ1NjM6XFx0XFxuNDU2NDpcXHRcXHQvKiBFeHRlcm5hbCBtZGlvIGJ1cyBpcyBvcHRpb25hbCAqL1xcbjQ1NjU6XFx0XFx0Y2hpbGQgPSBvZl9nZXRfY2hpbGRfYnlfbmFtZShucCwgXFxcIm1kaW8tZXh0ZXJuYWxcXFwiKTtcXG40NTY2OlxcdFxcdGlmIChjaGlsZCkge1xcbjQ1Njc6XFx0XFx0XFx0cmVzID0geXQ5MjF4X21idXNfZXh0X2luaXQocHJpdiwgY2hpbGQpO1xcbjQ1Njg6XFx0XFx0XFx0b2Zfbm9kZV9wdXQoY2hpbGQpO1xcbjQ1Njk6XFx0XFx0XFx0aWYgKHJlcylcXG40NTcwOlxcdFxcdFxcdFxcdHJldHVybiByZXM7XFxuNDU3MTpcXHRcXG40NTcyOlxcdFxcdFxcdGRldl9lcnIoZGV2LCBcXFwiVW50ZXN0ZWQgZXh0ZXJuYWwgbWRpbyBidXNcXFxcblxcXCIpO1xcbjQ1NzM6XFx0XFx0XFx0cmV0dXJuIC1FTk9ERVY7XFxuNDU3NDpcXHRcXHR9XFxuNDU3NTpcXHRcXG40NTc2OlxcdFxcdG11dGV4X2xvY2soXFx1MDAyNnByaXYtXFx1MDAzZXJlZ19sb2NrKTtcXG40NTc3OlxcdFxcdHJlcyA9IHl0OTIxeF9jaGlwX3NldHVwKHByaXYpO1xcbjQ1Nzg6XFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZwcml2LVxcdTAwM2VyZWdfbG9jayk7XFxuNDU3OTpcXHRcXG40NTgwOlxcdFxcdGlmIChyZXMpXFxuNDU4MTpcXHRcXHRcXHRyZXR1cm4gcmVzO1xcbjQ1ODI6XFx0XFxuNDU4MzpcXHQjaWYgSVNfRU5BQkxFRChDT05GSUdfTkVUX0RTQV9ZVDkyMVhfTEVEUylcXG40NTg0OlxcdFxcdHJlcyA9IHl0OTIxeF9sZWRzX3NldHVwKHByaXYpO1xcbjQ1ODU6XFx0XFx0aWYgKHJlcylcXG40NTg2OlxcdFxcdFxcdGRldl93YXJuKGRldiwgXFxcIkZhaWxlZCB0byBzZXR1cCBMRURzOiAlZFxcXFxuXFxcIiwgcmVzKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTZUMjA6Mzk6MzEuODIxMjI5MjEyWiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMzODU2ODMxODUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgYXNzdW1pbmcgSSdtIGFscmVhZHkgcXVpdGUgZmFtaWxpYXIgd2l0aCBlbWJlZGRlZCBzeXN0ZW1zIGFuZCBoYXJkd2FyZSBpbnRlcmFjdGlvbjpcblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBgeXQ5MjF4X2NoaXBfcmVzZXRgIEZ1bmN0aW9uKipcblxuUmlnaHQsIHNvIEknbSBsb29raW5nIGF0IHRoaXMgYHl0OTIxeF9jaGlwX3Jlc2V0YCBmdW5jdGlvbi4gSXQgc2VlbXMgcHJldHR5IG9idmlvdXMgdGhhdCBpdHMgcHJpbWFyeSBwdXJwb3NlIGlzIHRvLCB3ZWxsLCByZXNldCB0aGUgaGFyZHdhcmUgcmVsYXRlZCB0byB0aGF0IGB5dDkyMXhgIGNoaXAuIFRoYXQncyB0aGUgZXhwZWN0ZWQgYmVoYXZpb3IsIGFueXdheS4gTXkgbWFpbiBjb25jZXJuIGlzIGdvaW5nIHRvIGJlIGhvdyBpdCBoYW5kbGVzIHRoZSBmdW5kYW1lbnRhbCBjaGVjazogd2hldGhlciB0aGUgaGFyZHdhcmUgaXMgYWN0dWFsbHkgKnByZXNlbnQqIGluIHRoZSBmaXJzdCBwbGFjZS4gSWYgdGhlIHN5c3RlbSdzIGNvbmZpZ3VyZWQgd2l0aG91dCB0aGF0IHNwZWNpZmljIGNoaXAsIEkgZG9uJ3Qgd2FudCB0aGUgZnVuY3Rpb24gdG8gY3Jhc2gsIGFuZCBJIG5lZWQgdG8ga25vdyBob3cgZ3JhY2VmdWwgdGhlIGVycm9yIGhhbmRsaW5nIGlzLiBUaW1lIHRvIGRpdmUgaW50byB0aGUgY29kZSBhbmQgc2VlIHdoYXQgaGFwcGVucyB3aGVuIHRoZXJlJ3Mgbm8gcGh5c2ljYWwgaGFyZHdhcmUgdG8gdGFsayB0bzsgSSBuZWVkIHRvIHNlZSB3aGF0IHRoZSBmdW5jdGlvbiBkb2VzIHdpdGggdGhhdCBjYXNlLiBMZXQncyBzdGFydCBieSBjaGVja2luZyBpdHMgaW1wbGVtZW50YXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI2NjUwLCJPdXRwdXRUb2tlbnMiOjIzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNlQyMDozOTozNS4yMDY5MTkwMDZaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1MDM0MzUzMTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwieXQ5MjF4X2NoaXBfcmVzZXRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM9NDIyNz1zdGF0aWMgaW50IHl0OTIxeF9jaGlwX2RldGVjdChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYpXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy00MjkzLVxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjQyOTQ6c3RhdGljIGludCB5dDkyMXhfY2hpcF9yZXNldChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYpXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNDI5NS17XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYz00NTM3PXN0YXRpYyBpbnQgeXQ5MjF4X2RzYV9zZXR1cChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy00NTQ1LVxcdG11dGV4X2xvY2soXFx1MDAyNnByaXYtXFx1MDAzZXJlZ19sb2NrKTtcXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzo0NTQ2OlxcdHJlcyA9IHl0OTIxeF9jaGlwX3Jlc2V0KHByaXYpO1xcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTQ1NDctXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZwcml2LVxcdTAwM2VyZWdfbG9jayk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE2VDIwOjM5OjM2LjcxMDM1OTIwNFoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MzI2ODE1OTY3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGFzc3VtaW5nIEknbSBkZWVwIGluIG15IHRlY2huaWNhbCBmaWVsZDpcblxuKipBbmFseXppbmcgdGhlIENhbGw6IGB5dDkyMXhfY2hpcF9yZXNldGAqKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXZlIGludG8gdGhpcy4gXCJ5dDkyMXhfY2hpcF9yZXNldFwiLi4uIEltbWVkaWF0ZWx5LCB0aGUgbmFtZSBpdHNlbGYgaXMgaW50cmlndWluZy4gVGhlIFwieXQ5MjF4XCIgc3Ryb25nbHkgc3VnZ2VzdHMgYSBzcGVjaWZpYyBjaGlwLCBsaWtlbHkgYSBjdXN0b20gb3Igc2VtaS1jdXN0b20gZGVzaWduLCBwZXJoYXBzIGEgWW90dGFUZWsgcHJvZHVjdCwgZ2l2ZW4gdGhlIG5hbWluZyBjb252ZW50aW9uLiBUaGUgdW5kZXJzY29yZSBzZXBhcmF0aW5nIFwiY2hpcFwiIGFuZCBcInJlc2V0XCIgaXMgc3RhbmRhcmQgcHJhY3RpY2UsIGluZGljYXRpbmcgdGhpcyBpcyBhIGRlZGljYXRlZCBmdW5jdGlvbiBvciByb3V0aW5lIHNwZWNpZmljYWxseSBmb3IgcmVzZXR0aW5nIHRoYXQgcGFydGljdWxhciBoYXJkd2FyZSBjb21wb25lbnQuXG5cblNvLCBteSBtaW5kIGlzIGFscmVhZHkgZm9ybXVsYXRpbmcgcXVlc3Rpb25zLiBXaGF0IGtpbmQgb2YgcmVzZXQgYXJlIHdlIHRhbGtpbmcgYWJvdXQ/IElzIGl0IGEgaGFyZCByZXNldCwgYSBzb2Z0IHJlc2V0LCBhIHJlZ2lzdGVyLWxldmVsIHJlc2V0LCBvciBzb21ldGhpbmcgZWxzZSBlbnRpcmVseT8gVGhlIHNwZWNpZmljaXR5IG9mIHRoZSBuYW1lIGltcGxpZXMgYSBtb3JlIHRhcmdldGVkIGFwcHJvYWNoIHRoYW4gYSBnZW5lcmFsIHN5c3RlbSByZXNldCwgd2hpY2ggcGlxdWVzIG15IGludGVyZXN0LlxuXG5JJ2xsIG5lZWQgdG8ga25vdyB0aGUgY29udGV4dDogd2hlcmUgaXMgdGhpcyBmdW5jdGlvbiBjYWxsZWQgZnJvbT8gV2hhdCBhcmUgdGhlIHBvdGVudGlhbCB0cmlnZ2VyIGNvbmRpdGlvbnM/IFdoYXQncyB0aGUgZXJyb3IgaGFuZGxpbmcgbGlrZT8gQXJlIHRoZXJlIGFueSBwcmVjb25kaXRpb25zIHRoYXQgbmVlZCB0byBiZSBtZXQgYmVmb3JlIGNhbGxpbmcgaXQ/IEhvdyBpcyB0aGUgY2hpcCdzIHN0YXRlIGludGVycm9nYXRlZCBhZnRlciB0aGUgcmVzZXQgdG8gZW5zdXJlIGEgY2xlYW4gc2xhdGU/IFRoaXMgaXMgaW1wb3J0YW50LiBJZiB0aGUgY2hpcCBoYXMgYSBzdGF0ZSBtYWNoaW5lLCB0aGUgcmVzZXQgbXVzdCByZXR1cm4gaXQgdG8gYSBrbm93biBzdGF0ZTsgb3RoZXJ3aXNlLCB0aGVyZSB3aWxsIGJlIGlzc3Vlcy5cblxuSSdtIG1lbnRhbGx5IHByZXBhcmluZyB0byBsb29rIGZvciB0aGUgZnVuY3Rpb24ncyBkZWZpbml0aW9uLCB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGl0IHVzZXMsIGFuZCBhbnkgcmVsYXRlZCBkb2N1bWVudGF0aW9uLiBJJ2xsIGJlIGxvb2tpbmcgZm9yIGNsdWVzIGFib3V0IHRoZSBoYXJkd2FyZSByZWdpc3RlciBtYXBwaW5ncywgaW50ZXJydXB0IGhhbmRsaW5nLCBhbmQgYW55IHBvdGVudGlhbCBzaWRlIGVmZmVjdHMgb24gb3RoZXIgcGFydHMgb2YgdGhlIHN5c3RlbS4gSSBoYXZlIGFuIGludGVybmFsIGxpc3Qgb2YgcG90ZW50aWFsIGdvdGNoYXMgdG8gd2F0Y2ggZm9yLCBsaWtlIHBvd2VyIHNlcXVlbmNpbmcgb3IgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyBkdXJpbmcgdGhlIHJlc2V0IHByb2Nlc3MuIFRoaXMgaXMgZ29pbmcgdG8gYmUgZ29vZC4gTGV0J3Mgc2VlIHdoYXQncyBpbiB0aGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjcyMTAsIk91dHB1dFRva2VucyI6NDIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNlQyMDozOTo0Mi4wMzcxNzc1MzFaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjgwMTcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDQyOTQsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjQyOTQ6XFx0c3RhdGljIGludCB5dDkyMXhfY2hpcF9yZXNldChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYpXFxuNDI5NTpcXHR7XFxuNDI5NjpcXHRcXHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSB0b19kZXZpY2UocHJpdik7XFxuNDI5NzpcXHRcXHR1MTYgZXRoX3BfdGFnO1xcbjQyOTg6XFx0XFx0dTMyIHZhbDtcXG40Mjk5OlxcdFxcdGludCByZXM7XFxuNDMwMDpcXHRcXG40MzAxOlxcdFxcdHJlcyA9IHl0OTIxeF9jaGlwX2RldGVjdChwcml2KTtcXG40MzAyOlxcdFxcdGlmIChyZXMpXFxuNDMwMzpcXHRcXHRcXHRyZXR1cm4gcmVzO1xcbjQzMDQ6XFx0XFxuNDMwNTpcXHRcXHQvKiBSZXNldCAqL1xcbjQzMDY6XFx0XFx0cmVzID0geXQ5MjF4X3JlZ193cml0ZShwcml2LCBZVDkyMVhfUlNULCBZVDkyMVhfUlNUX0hXKTtcXG40MzA3OlxcdFxcdGlmIChyZXMpXFxuNDMwODpcXHRcXHRcXHRyZXR1cm4gcmVzO1xcbjQzMDk6XFx0XFxuNDMxMDpcXHRcXHQvKiBSU1RfSFcgaXMgYWxtb3N0IHNhbWUgYXMgR1BJTyBoYXJkIHJlc2V0LCBzbyB3ZSBuZWVkIHRoaXMgZGVsYXkuICovXFxuNDMxMTpcXHRcXHRmc2xlZXAoWVQ5MjFYX1JTVF9ERUxBWV9VUyk7XFxuNDMxMjpcXHRcXG40MzEzOlxcdFxcdHZhbCA9IDA7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE2VDIwOjM5OjQyLjAzNzQ1OTIyMVoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MzQxNDE3MTE0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyB0aGUgQ2hpcCBJRCBEZXRlY3Rpb24gUHJvY2VkdXJlKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgYHl0OTIxeF9jaGlwX2RldGVjdGAuIFRoZSBmdW5jdGlvbidzIGpvYiBpcyBzdHJhaWdodGZvcndhcmQ6IGRldGVybWluZSB0aGUgc3BlY2lmaWMgc2lsaWNvbiByZXZpc2lvbiBvZiB0aGUgYHl0OTIxeGAgY2hpcCB3ZSdyZSBkZWFsaW5nIHdpdGguIFRoZSBwcmltYXJ5IG1lY2hhbmlzbSBpcyBhIHJlZ2lzdGVyIHJlYWQuIFRoYXQncyBhIGNsYXNzaWMgYW5kIGVmZmljaWVudCBhcHByb2FjaC4gSSdtIGFzc3VtaW5nIHRoaXMgcmVnaXN0ZXIgaG9sZHMgYSB1bmlxdWUgaWRlbnRpZmllciBvciBhIG1hc2thYmxlIHZhbHVlIHRoYXQgYWxsb3dzIGRpZmZlcmVudGlhdGlvbiBiZXR3ZWVuIHZhcmlvdXMgaGFyZHdhcmUgcmV2aXNpb25zLiBJJ2xsIG5lZWQgdG8gZGlnIGludG8gdGhlIGRhdGFzaGVldCBmb3IgdGhhdCBjaGlwIHRvIGZpZ3VyZSBvdXQgdGhlIGV4YWN0IHJlZ2lzdGVyIGFkZHJlc3MgYW5kIHRoZSBiaXQgZmllbGQgbGF5b3V0LiBJJ2xsIGFsc28gd2FudCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhlIHBvc3NpYmxlIHZhbHVlcy4gQXJlIHdlIGp1c3QgaWRlbnRpZnlpbmcgZGlmZmVyZW50IHJldmlzaW9ucywgb3IgYXJlIHRoZXJlIGZ1bmN0aW9uYWwgZGlmZmVyZW5jZXMgdGllZCB0byB0aGVzZSBJRHM/IElmIHNvLCBJJ2xsIGhhdmUgdG8gbWFrZSBzdXJlIHRoZSBjb2RlIGhhbmRsZXMgdGhlc2UgdmFyaWF0aW9ucyBjb3JyZWN0bHkuIEknbGwgYmUgbG9va2luZyBmb3IgYW55IGVycm9yIGhhbmRsaW5nIGFyb3VuZCB0aGUgcmVnaXN0ZXIgcmVhZCBpdHNlbGYuIFdoYXQgaGFwcGVucyBpZiB0aGUgcmVhZCBmYWlscz8gRG9lcyBpdCByZXRyeSwgb3IgZG9lcyBpdCBhc3N1bWUgYSBkZWZhdWx0IElEPyBSb2J1c3QgZXJyb3IgaGFuZGxpbmcgaXMgY3J1Y2lhbC4gRmluYWxseSwgSSdsbCBzZWUgaG93IHRoaXMgZGV0ZWN0aW9uIHJlc3VsdCBmZWVkcyBpbnRvIHRoZSByZXN0IG9mIHRoZSBkcml2ZXIgaW5pdGlhbGl6YXRpb24uIEFyZSB3ZSBicmFuY2hpbmcgYmFzZWQgb24gdGhlIGRldGVjdGVkIElEPyBJZiBzbywgSSB3YW50IHRvIGNvbmZpcm0gdGhlIGJyYW5jaGluZyBsb2dpYyBpcyBzb2xpZCBhbmQgdGhlIGNvZGUgcGF0aHMgZm9yIGVhY2ggcmV2aXNpb24gYXJlIGNvbXBsZXRlIGFuZCB0ZXN0ZWQuIEknbSBob3BpbmcgaXQncyB3ZWxsLXN0cnVjdHVyZWQgYW5kIGVhc3kgdG8gZm9sbG93LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNzk2MSwiT3V0cHV0VG9rZW5zIjo0MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTZUMjA6Mzk6NDYuMzc4ODc5MDI1WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2NzYxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA0MjI3LFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCI0MjI3OlxcdHN0YXRpYyBpbnQgeXQ5MjF4X2NoaXBfZGV0ZWN0KHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdilcXG40MjI4OlxcdHtcXG40MjI5OlxcdFxcdHN0cnVjdCBkZXZpY2UgKmRldiA9IHRvX2RldmljZShwcml2KTtcXG40MjMwOlxcdFxcdGNvbnN0IHN0cnVjdCB5dDkyMXhfaW5mbyAqaW5mbztcXG40MjMxOlxcdFxcdHU4IGV4dG1vZGU7XFxuNDIzMjpcXHRcXHR1MzIgY2hpcGlkO1xcbjQyMzM6XFx0XFx0dTMyIG1ham9yO1xcbjQyMzQ6XFx0XFx0dTMyIG1vZGU7XFxuNDIzNTpcXHRcXHR1MzIgdmFsO1xcbjQyMzY6XFx0XFx0aW50IHJlcztcXG40MjM3OlxcdFxcbjQyMzg6XFx0XFx0cmVzID0geXQ5MjF4X3JlZ19yZWFkKHByaXYsIFlUOTIxWF9DSElQX0lELCBcXHUwMDI2Y2hpcGlkKTtcXG40MjM5OlxcdFxcdGlmIChyZXMpXFxuNDI0MDpcXHRcXHRcXHRyZXR1cm4gcmVzO1xcbjQyNDE6XFx0XFxuNDI0MjpcXHRcXHRtYWpvciA9IEZJRUxEX0dFVChZVDkyMVhfQ0hJUF9JRF9NQUpPUiwgY2hpcGlkKTtcXG40MjQzOlxcdFxcbjQyNDQ6XFx0XFx0Zm9yIChpbmZvID0geXQ5MjF4X2luZm9zOyBpbmZvLVxcdTAwM2VuYW1lOyBpbmZvKyspXFxuNDI0NTpcXHRcXHRcXHRpZiAoaW5mby1cXHUwMDNlbWFqb3IgPT0gbWFqb3IpXFxuNDI0NjpcXHRcXHRcXHRcXHRicmVhaztcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTZUMjA6Mzk6NDYuMzc5MDQ3OTE1WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY3MTg2MTU2OTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgUGF0Y2gncyBGdXp6aW5nIFBvdGVudGlhbCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRnJvbSB3aGF0IEkgdW5kZXJzdGFuZCwgdGhpcyBwYXRjaCBpcyBpbnRyb2R1Y2luZyBMRUQgc3VwcG9ydCBzcGVjaWZpY2FsbHkgZm9yIGEgYHl0OTIxeGAgaGFyZHdhcmUgc3dpdGNoIGNoaXAuIFNpbmNlIHRoZSBjb3JlIGZ1bmN0aW9uYWxpdHkgcmVsaWVzIG9uIHRoaXMgc3BlY2lmaWMgaGFyZHdhcmUsIHRoZSBgeXQ5MjF4X2NoaXBfZGV0ZWN0YCBmdW5jdGlvbiBpcyBnb2luZyB0byBmYWlsIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQgbGlrZSBRRU1VIG9yIEdDRSBiZWNhdXNlIHRoZSB1bmRlcmx5aW5nIGhhcmR3YXJlIHNpbXBseSB3b24ndCBiZSBwcmVzZW50LCBvciBhdCBsZWFzdCB3b24ndCBwcmVzZW50IHdpdGggYW4gYXBwcm9wcmlhdGUgSUQuIENvbnNlcXVlbnRseSwgdGhlIGRyaXZlciB3aWxsIGZhaWwgZHVyaW5nIHRoZSBwcm9iZSwgYW5kIHRoZSBMRUQgc2V0dXAgY29kZSwgc3BlY2lmaWNhbGx5IGB5dDkyMXhfbGVkc19zZXR1cGAsIHdpbGwgbmV2ZXIgYmUgZXhlY3V0ZWQuXG5cbkdpdmVuIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIHByb21wdCDigJMgXCJSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zIGNvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuLi5cIiDigJMgdGhpcyBpcyBhIGNsZWFyIG1hdGNoLiBUaGUgaW50cm9kdWNlZCBMRUQgc3VwcG9ydCBpcyBlbnRpcmVseSBjb250aW5nZW50IG9uIHRoZSBwcmVzZW5jZSBvZiBwaHlzaWNhbCBoYXJkd2FyZSwgYW5kIHRodXMsIHVucmVhY2hhYmxlIGluIGEgdmlydHVhbGl6ZWQgc2V0dGluZy4gVGhlcmUncyBubyB3YXkgdG8gZW11bGF0ZSBpdCByZWxpYWJseSwgYW5kIG5vIGFtb3VudCBvZiBzb2Z0d2FyZSB0cmlja2VyeSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pIHdpbGwgY2hhbmdlIHRoYXQuIFRoZXJlZm9yZSwgSSB3aWxsIGNvbmZpZGVudGx5IHNldCBgV29ydGhGdXp6aW5nPWZhbHNlYC4gVGhpcyBwYXRjaCBpcyBpcnJlbGV2YW50IGZvciBmdXp6aW5nIGluIHZpcnR1YWwgZW52aXJvbm1lbnRzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyODYzNSwiT3V0cHV0VG9rZW5zIjoxMTgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOTksIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNlQyMDozOTo1My4wOTc2NjU5MzhaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjE1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW10sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIExFRCBzdXBwb3J0IGZvciB0aGUgTW90b3Jjb21tIFlUOTIxNSBldGhlcm5ldCBzd2l0Y2ggY2hpcCAoYSBEU0EgZHJpdmVyKS4gVGhpcyBpcyBhIGhhcmR3YXJlLXNwZWNpZmljIGRyaXZlciB0aGF0IGNvbW11bmljYXRlcyB3aXRoIGEgcGh5c2ljYWwgY2hpcCB2aWEgTURJTy4gU2luY2UgdGhlcmUgaXMgbm8gc29mdHdhcmUgZW11bGF0aW9uIGZvciB0aGlzIHNwZWNpZmljIHN3aXRjaCBjaGlwIGluIHN0YW5kYXJkIFFFTVUvdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLCB0aGUgZHJpdmVyIHdpbGwgZmFpbCB0byBwcm9iZSAoZS5nLiwgZHVyaW5nIGNoaXAgSUQgZGV0ZWN0aW9uKSwgYW5kIHRoZSBuZXdseSBhZGRlZCBMRUQgc2V0dXAgY29kZSB3aWxsIGJlIHVucmVhY2hhYmxlLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBMRUQgc3VwcG9ydCBmb3IgdGhlIE1vdG9yY29tbSBZVDkyMTUgZXRoZXJuZXQgc3dpdGNoIGNoaXAgKGEgRFNBIGRyaXZlcikuIFRoaXMgaXMgYSBoYXJkd2FyZS1zcGVjaWZpYyBkcml2ZXIgdGhhdCBjb21tdW5pY2F0ZXMgd2l0aCBhIHBoeXNpY2FsIGNoaXAgdmlhIE1ESU8uIFNpbmNlIHRoZXJlIGlzIG5vIHNvZnR3YXJlIGVtdWxhdGlvbiBmb3IgdGhpcyBzcGVjaWZpYyBzd2l0Y2ggY2hpcCBpbiBzdGFuZGFyZCBRRU1VL3ZpcnR1YWxpemVkIGVudmlyb25tZW50cywgdGhlIGRyaXZlciB3aWxsIGZhaWwgdG8gcHJvYmUgKGUuZy4sIGR1cmluZyBjaGlwIElEIGRldGVjdGlvbiksIGFuZCB0aGUgbmV3bHkgYWRkZWQgTEVEIHNldHVwIGNvZGUgd2lsbCBiZSB1bnJlYWNoYWJsZS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE2VDIwOjM5OjUzLjA5NzY5MjI3OFoiLCJTZXEiOjE5LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjM2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },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-workflow4kxxh[1] Phase: Running StartedAt: 2026-08-16 20:40:04 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4kxxh[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-08-16 20:40:04 +0000 UTC FinishedAt: 2026-08-16 20:40:09 +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,}