Name: series-workflowcgllg Phase: Running StartedAt: 2026-07-09 00:29:10 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcgllg[0] Phase: Running StartedAt: 2026-07-09 00:29:10 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcgllg[0].run-triage Phase: Running StartedAt: 2026-07-09 00:29:10 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcgllg[0].run-triage(0) Phase: Running StartedAt: 2026-07-09 00:29:10 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +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+CgkJCTx0ZD4yMDI2LzA3LzA5IDAxOjExPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgaGFyZHdhcmUtc3BlY2lmaWMgRXRoZXJuZXQgUEhZIGRyaXZlciBmb3IgQWlyb2hhIFNvQ3MgYW5kIHJlZmFjdG9ycyB0aGUgZXhpc3RpbmcgTWVkaWFUZWsgUEhZIGRyaXZlciB0byBzaGFyZSBjb2RlLiBTaW5jZSBQSFkgZGV2aWNlcyBhcmUgaW5zdGFudGlhdGVkIGJ5IHRoZSBNRElPIGJ1cyBiYXNlZCBvbiBoYXJkd2FyZSBwcm9iaW5nIChyZWFkaW5nIFBIWSBJRCByZWdpc3RlcnMpIG9yIGRldmljZSB0cmVlLCBhbmQgdGhlcmUgaXMgbm8gdmlydHVhbCBNRElPIGJ1cyBvciBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgKGxpa2UgUUVNVS9HQ0UpIHRoYXQgY2FuIGluc3RhbnRpYXRlIHRoaXMgc3BlY2lmaWMgUEhZLCB0aGUgY29kZSBpcyBpbXBvc3NpYmxlIHRvIHJlYWNoIGFuZCB0ZXN0IHZpYSBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOSAwMToxMTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGUyN2I1NWNkNmE5ZWJiNGE2YmNjYjEyYzlmNjAyYjYxN2ZiMGQwZWJcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IEp1bCA5IDAxOjExOjUzIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL01BSU5UQUlORVJTIGIvTUFJTlRBSU5FUlNcbmluZGV4IDUyZjFhNTVlY2E5OWJmLi42NWNjMjFiMzljM2RiYyAxMDA2NDRcbi0tLSBhL01BSU5UQUlORVJTXG4mIzQzOyYjNDM7JiM0MzsgYi9NQUlOVEFJTkVSU1xuQEAgLTc2MCw2ICYjNDM7NzYwLDE0IEBAIFM6XHRNYWludGFpbmVkXG4gRjpcdERvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvYWlyb2hhLGVuNzU4MS1ldGgueWFtbFxuIEY6XHRkcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvXG4gXG4mIzQzO0FJUk9IQSBFVEhFUk5FVCBQSFkgRFJJVkVSXG4mIzQzO006XHRDaHJpc3RpYW4gTWFyYW5naSBcdTAwM2NhbnN1ZWxzbXRoQGdtYWlsLmNvbVx1MDAzZVxuJiM0MztMOlx0bGludXgtYXJtLWtlcm5lbEBsaXN0cy5pbmZyYWRlYWQub3JnIChtb2RlcmF0ZWQgZm9yIG5vbi1zdWJzY3JpYmVycylcbiYjNDM7TDpcdGxpbnV4LW1lZGlhdGVrQGxpc3RzLmluZnJhZGVhZC5vcmcgKG1vZGVyYXRlZCBmb3Igbm9uLXN1YnNjcmliZXJzKVxuJiM0MztMOlx0bmV0ZGV2QHZnZXIua2VybmVsLm9yZ1xuJiM0MztTOlx0TWFpbnRhaW5lZFxuJiM0MztGOlx0ZHJpdmVycy9uZXQvcGh5L21lZGlhdGVrL2Fpcm9oYS1nZS1zb2MuY1xuJiM0MztcbiBBSVJPSEEgUENJRSBQSFkgRFJJVkVSXG4gTTpcdExvcmVuem8gQmlhbmNvbmkgXHUwMDNjbG9yZW56b0BrZXJuZWwub3JnXHUwMDNlXG4gTDpcdGxpbnV4LWFybS1rZXJuZWxAbGlzdHMuaW5mcmFkZWFkLm9yZyAobW9kZXJhdGVkIGZvciBub24tc3Vic2NyaWJlcnMpXG5AQCAtMTY0ODMsNiAmIzQzOzE2NDkxLDcgQEAgTDpcdG5ldGRldkB2Z2VyLmtlcm5lbC5vcmdcbiBTOlx0TWFpbnRhaW5lZFxuIEY6XHRkcml2ZXJzL25ldC9waHkvbWVkaWF0ZWsvbXRrLTJwNWdlLmNcbiBGOlx0ZHJpdmVycy9uZXQvcGh5L21lZGlhdGVrL210ay1nZS1zb2MuY1xuJiM0MztGOlx0ZHJpdmVycy9uZXQvcGh5L21lZGlhdGVrL210ay1nZS1zb2MuaFxuIEY6XHRkcml2ZXJzL25ldC9waHkvbWVkaWF0ZWsvbXRrLXBoeS1saWIuY1xuIEY6XHRkcml2ZXJzL25ldC9waHkvbWVkaWF0ZWsvbXRrLWdlLmNcbiBGOlx0ZHJpdmVycy9uZXQvcGh5L21lZGlhdGVrL210ay5oXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGh5L21lZGlhdGVrL0tjb25maWcgYi9kcml2ZXJzL25ldC9waHkvbWVkaWF0ZWsvS2NvbmZpZ1xuaW5kZXggYmI3ZGM4NzYyNzFlODMuLmZlNTFmNDYxNmM1NDRmIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvcGh5L21lZGlhdGVrL0tjb25maWdcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3BoeS9tZWRpYXRlay9LY29uZmlnXG5AQCAtMSw0ICYjNDM7MSwxNyBAQFxuICMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuJiM0Mztjb25maWcgQUlST0hBX0dFX1NPQ19QSFlcbiYjNDM7XHR0cmlzdGF0ZSBcJiMzNDtBaXJvaGEgU29DIEV0aGVybmV0IFBIWXNcJiMzNDtcbiYjNDM7XHRkZXBlbmRzIG9uIEFSTTY0IHx8IENPTVBJTEVfVEVTVFxuJiM0MztcdGRlcGVuZHMgb24gQVJDSF9BSVJPSEEgfHwgQ09NUElMRV9URVNUXG4mIzQzO1x0c2VsZWN0IE1US19ORVRfUEhZTElCXG4mIzQzO1x0c2VsZWN0IFBIWV9QQUNLQUdFXG4mIzQzO1x0aGVscFxuJiM0MztcdCAgU3VwcG9ydHMgQWlyb2hhIFNvQyBidWlsdC1pbiBHaWdhYml0IEV0aGVybmV0IFBIWXMuXG4mIzQzO1xuJiM0MztcdCAgSW5jbHVkZSBzdXBwb3J0IGZvciBidWlsdC1pbiBFdGhlcm5ldCBQSFlzIHdoaWNoIGFyZSBwcmVzZW50IGluXG4mIzQzO1x0ICB0aGUgQU43NTgxIGFuZCBBTjc1ODMgU29Dcy4gVGhlc2UgUEhZcyBkIHdpbGwgZHluYW1pY2FsbHlcbiYjNDM7XHQgIGNhbGlicmF0ZSBkdXJpbmcgc3RhcnR1cC5cbiYjNDM7XG4gY29uZmlnIE1FRElBVEVLXzJQNUdFX1BIWVxuIFx0dHJpc3RhdGUgXCYjMzQ7TWVkaWFUZWsgMi41R2IgRXRoZXJuZXQgUEhZc1wmIzM0O1xuIFx0ZGVwZW5kcyBvbiAoQVJNNjQgXHUwMDI2XHUwMDI2IEFSQ0hfTUVESUFURUspIHx8IENPTVBJTEVfVEVTVFxuQEAgLTI0LDggJiM0MzszNyw3IEBAIGNvbmZpZyBNRURJQVRFS19HRV9QSFlcbiBjb25maWcgTUVESUFURUtfR0VfU09DX1BIWVxuIFx0dHJpc3RhdGUgXCYjMzQ7TWVkaWFUZWsgU29DIEV0aGVybmV0IFBIWXNcJiMzNDtcbiBcdGRlcGVuZHMgb24gQVJNNjQgfHwgQ09NUElMRV9URVNUXG4tXHRkZXBlbmRzIG9uIEFSQ0hfQUlST0hBIHx8IChBUkNIX01FRElBVEVLIFx1MDAyNlx1MDAyNiBOVk1FTV9NVEtfRUZVU0UpIHx8IFxcXG4tXHRcdCAgIENPTVBJTEVfVEVTVFxuJiM0MztcdGRlcGVuZHMgb24gKEFSQ0hfTUVESUFURUsgXHUwMDI2XHUwMDI2IE5WTUVNX01US19FRlVTRSkgfHwgQ09NUElMRV9URVNUXG4gXHRzZWxlY3QgTVRLX05FVF9QSFlMSUJcbiBcdHNlbGVjdCBQSFlfUEFDS0FHRVxuIFx0aGVscFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BoeS9tZWRpYXRlay9NYWtlZmlsZSBiL2RyaXZlcnMvbmV0L3BoeS9tZWRpYXRlay9NYWtlZmlsZVxuaW5kZXggYWM1N2VjYzc5OWZjODEuLmViNDMwZjAwODE2OWUyIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvcGh5L21lZGlhdGVrL01ha2VmaWxlXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9waHkvbWVkaWF0ZWsvTWFrZWZpbGVcbkBAIC0xLDQgJiM0MzsxLDUgQEBcbiAjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4mIzQzO29iai0kKENPTkZJR19BSVJPSEFfR0VfU09DX1BIWSlcdFx0JiM0Mzs9IGFpcm9oYS1nZS1zb2Mub1xuIG9iai0kKENPTkZJR19NRURJQVRFS18yUDVHRV9QSFkpXHQmIzQzOz0gbXRrLTJwNWdlLm9cbiBvYmotJChDT05GSUdfTUVESUFURUtfR0VfUEhZKVx0XHQmIzQzOz0gbXRrLWdlLm9cbiBvYmotJChDT05GSUdfTUVESUFURUtfR0VfU09DX1BIWSlcdCYjNDM7PSBtdGstZ2Utc29jLm9cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9waHkvbWVkaWF0ZWsvYWlyb2hhLWdlLXNvYy5jIGIvZHJpdmVycy9uZXQvcGh5L21lZGlhdGVrL2Fpcm9oYS1nZS1zb2MuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi42MDFhNjRkODMzNjU0MlxuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvcGh5L21lZGlhdGVrL2Fpcm9oYS1nZS1zb2MuY1xuQEAgLTAsMCAmIzQzOzEsMTgxMiBAQFxuJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCYjNDM7XG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2JpdGZpZWxkLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvcGluY3RybC9jb25zdW1lci5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3BoeS5oXHUwMDNlXG4mIzQzO1xuJiM0MzsjaW5jbHVkZSBcJiMzNDsuLi9waHlsaWIuaFwmIzM0O1xuJiM0MzsjaW5jbHVkZSBcJiMzNDttdGsuaFwmIzM0O1xuJiM0MzsjaW5jbHVkZSBcJiMzNDttdGstZ2Utc29jLmhcJiMzNDtcbiYjNDM7XG4mIzQzOyNkZWZpbmUgQUlST0hBX0RFRkFVTFRfUE9SVDBfQUREUlx0XHQweDlcbiYjNDM7I2RlZmluZSBBSVJPSEFfUEhZX01BWF9MRURTXHRcdFx0MlxuJiM0MztcbiYjNDM7ZW51bSBhaXJvaGFfbWRpX3Jlc2lzdGVyX3R5cGUge1xuJiM0MztcdE1ESV8wUixcbiYjNDM7XHRNRElfNVIsXG4mIzQzO1xuJiM0MztcdE1ESV9UWVBFX01BWCxcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO2VudW0gYWlyb2hhX3RyYW5zZm9ybWVyX3R5cGUge1xuJiM0MztcdFRYTVIsXG4mIzQzO1x0RElTQ1JFVEUsXG4mIzQzO1xuJiM0MztcdFRSQU5TRk9STUVSX1RZUEVfTUFYLFxuJiM0Mzt9O1xuJiM0MztcbiYjNDM7ZW51bSBhaXJvaGFfY2FsaWJfY29uc3RfdHlwZSB7XG4mIzQzO1x0VFhfQU1QX1RFU1RfQSxcbiYjNDM7XHRUWF9BTVBfVEVTVF9CLFxuJiM0MztcdFRYX0FNUF9URVNUX0MsXG4mIzQzO1x0VFhfQU1QX1RFU1RfRCxcbiYjNDM7XHRUWF9BTVBfMUdfQSxcbiYjNDM7XHRUWF9BTVBfMUdfQixcbiYjNDM7XHRUWF9BTVBfMUdfQyxcbiYjNDM7XHRUWF9BTVBfMUdfRCxcbiYjNDM7XHRUWF9BTVBfMTAwTV9BLFxuJiM0MztcdFRYX0FNUF8xMDBNX0IsXG4mIzQzO1x0VFhfQU1QXzEwTV9BLFxuJiM0MztcdFRYX0FNUF8xME1fQixcbiYjNDM7XHRSNTBfQSxcbiYjNDM7XHRSNTBfQixcbiYjNDM7XHRSNTBfQyxcbiYjNDM7XHRSNTBfRCxcbiYjNDM7XG4mIzQzO1x0Q0FMSUJfQ09OU1RfVFlQRV9NQVgsXG4mIzQzO307XG4mIzQzO1xuJiM0MztzdHJ1Y3QgYWlyb2hhX3NvY3BoeV9zaGFyZWQge1xuJiM0MztcdHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXZfcDA7XG4mIzQzO1x0ZW51bSBhaXJvaGFfdHJhbnNmb3JtZXJfdHlwZSB0cmFuc2Zvcm1lcl90eXBlWzRdO1xuJiM0MztcdGVudW0gYWlyb2hhX21kaV9yZXNpc3Rlcl90eXBlIG1kaV9yZXNpc3Rlcl90eXBlO1xuJiM0MztcdGJvb2wgcmV4dF9zd19jYWxpYl9kb25lO1xuJiM0MztcdGludCAoKnR4X2FtcF9jb21wZW5zYXRpb25fdGJsKVtUUkFOU0ZPUk1FUl9UWVBFX01BWF1bTURJX1RZUEVfTUFYXVtDQUxJQl9DT05TVF9UWVBFX01BWF1bNF07XG4mIzQzO1x0dTggKnI1MF9jYWxfdGJsO1xuJiM0Mzt9O1xuJiM0MztcbiYjNDM7LypcbiYjNDM7ICogMiBjaGlwIHJldmlzaW9uXG4mIzQzOyAqIFRYTVIgb3IgZGlzY3JldGVcbiYjNDM7ICogMiBNREkgdHlwZVxuJiM0MzsgKiBUWCBBTVAgdGVzdC9UWCBBTVAgMUcvVFggQU1QIDEwME0vVFggQU1QIDEwTS9SNTBcbiYjNDM7ICogNCBQSFlcbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBpbnQgYW43NTgxX3R4X2FtcF9jb21wZW5zYXRpb25fdGJsWzJdW1RSQU5TRk9STUVSX1RZUEVfTUFYXVtNRElfVFlQRV9NQVhdW0NBTElCX0NPTlNUX1RZUEVfTUFYXVs0XSA9IHtcbiYjNDM7XHR7IC8qIElDIHZlcnNpb24gMSAqL1xuJiM0MztcdFx0W1RYTVJdID0ge1xuJiM0MztcdFx0XHR7IH0sXG4mIzQzO1x0XHRcdHtcbiYjNDM7XHRcdFx0XHRbVFhfQU1QX1RFU1RfQV0gPSB7IC0xMiwgLTExLCAtOSwgLTYgfSxcbiYjNDM7XHRcdFx0XHRbVFhfQU1QX1RFU1RfQl0gPSB7IC05LCAtMTMsIC05LCAtNSB9LFxuJiM0MztcdFx0XHRcdFtUWF9BTVBfVEVTVF9DXSA9IHsgLTUsIC00LCAtMywgMSB9LFxuJiM0MztcdFx0XHRcdFtUWF9BTVBfVEVTVF9EXSA9IHsgLTksIC04LCAtNywgLTUgfSxcbiYjNDM7XHRcdFx0XHRbVFhfQU1QXzFHX0FdID0geyAtMTIsIC0xMSwgLTksIC02IH0sXG4mIzQzO1x0XHRcdFx0W1RYX0FNUF8xR19CXSA9IHsgLTksIC0xMywgLTksIC01IH0sXG4mIzQzO1x0XHRcdFx0W1RYX0FNUF8xR19DXSA9IHsgLTUsIC00LCAtMywgMSB9LFxuJiM0MztcdFx0XHRcdFtUWF9BTVBfMUdfRF0gPSB7IC05LCAtOCwgLTcsIC01IH0sXG4mIzQzO1x0XHRcdFx0W1RYX0FNUF8xMDBNX0FdID0geyAtMiwgLTIsIDAsIDIgfSxcbiYjNDM7XHRcdFx0XHRbVFhfQU1QXzEwME1fQl0gPSB7IC0yLCAtMiwgMSwgMSB9LFxuJiM0MztcdFx0XHRcdFtUWF9BTVBfMTBNX0FdID0geyAwLCAwLCAwLCAwIH0sXG4mIzQzO1x0XHRcdFx0W1RYX0FNUF8xME1fQl0gPSB7IDAsIDAsIDAsIDAgfSxcbiYjNDM7XHRcdFx0XHRbUjUwX0FdID0geyAxNSwgMTUsIDE1LCAxNSB9LFxuJiM0MztcdFx0XHRcdFtSNTBfQl0gPSB7IDE1LCAxNSwgMTgsIDE1IH0sXG4mIzQzO1x0XHRcdFx0W1I1MF9DXSA9IHsgLTgsIC04LCAtOCwgLTggfSxcbiYjNDM7XHRcdFx0XHRbUjUwX0RdID0geyAtOCwgLTgsIC04LCAtOCB9LFxuJiM0MztcdFx0XHR9LFxuJiM0MztcdFx0fSxcbiYjNDM7XHRcdFtESVNDUkVURV0gPSB7XG4mIzQzO1x0XHRcdHsgfSxcbiYjNDM7XHRcdFx0e1xuJiM0MztcdFx0XHRcdFtUWF9BTVBfVEVTVF9BXSA9IHsgLTksIC03LCAtNywgLTUgfSxcbiYjNDM7XHRcdFx0XHRbVFhfQU1QX1RFU1RfQl0gPSB7IC05LCAtOSwgLTcsIC00IH0sXG4mIzQzO1x0XHRcdFx0W1RYX0FNUF9URVNUX0NdID0geyAtOSwgLTcsIC05LCAtNiB9LFxuJiM0MztcdFx0XHRcdFtUWF9BTVBfVEVTVF9EXSA9IHsgLTExLCAtOSwgLTEwLCAtOCB9LFxuJiM0MztcdFx0XHRcdFtUWF9BTVBfMUdfQV0gPSB7IC05LCAtNywgLTcsIC01IH0sXG4mIzQzO1x0XHRcdFx0W1RYX0FNUF8xR19CXSA9IHsgLTksIC04LCAtNywgLTQgfSxcbiYjNDM7XHRcdFx0XHRbVFhfQU1QXzFHX0NdID0geyAtOSwgLTcsIC05LCAtNiB9LFxuJiM0MztcdFx0XHRcdFtUWF9BTVBfMUdfRF0gPSB7IC0xMSwgLTgsIC0xMCwgLTggfSxcbiYjNDM7XHRcdFx0XHRbVFhfQU1QXzEwME1fQV0gPSB7IDQsIDMsIDQsIDQgfSxcbiYjNDM7XHRcdFx0XHRbVFhfQU1QXzEwME1fQl0gPSB7IDQsIDQsIDUsIDQgfSxcbiYjNDM7XHRcdFx0XHRbVFhfQU1QXzEwTV9BXSA9IHsgMCwgMCwgMCwgMCB9LFxuJiM0MztcdFx0XHRcdFtUWF9BTVBfMTBNX0JdID0geyAwLCAwLCAwLCAwIH0sXG4mIzQzO1x0XHRcdFx0W1I1MF9BXSA9IHsgMCwgMCwgMCwgMCB9LFxuJiM0MztcdFx0XHRcdFtSNTBfQl0gPSB7IDAsIDAsIDAsIDAgfSxcbiYjNDM7XHRcdFx0XHRbUjUwX0NdID0geyAwLCAwLCAwLCAwIH0sXG4mIzQzO1x0XHRcdFx0W1I1MF9EXSA9IHsgMCwgMCwgMCwgMCB9LFxuJiM0MztcdFx0XHR9LFxuJiM0MztcdFx0fSxcbiYjNDM7XHR9LFxuJiM0MztcdHsgLyogSUMgdmVyc2lvbiAyICovXG4mIzQzO1x0XHRbVFhNUl0gPSB7XG4mIzQzO1x0XHRcdHsgfSxcbiYjNDM7XHRcdFx0e1xuJiM0MztcdFx0XHRcdFtUWF9BTVBfVEVTVF9BXSA9IHsgLTEwLCAtMTIsIC0xMiwgLTExIH0sXG4mIzQzO1x0XHRcdFx0W1RYX0FNUF9URVNUX0JdID0geyAtMTAsIC0xMSwgLTExLCAtMTAgfSxcbiYjNDM7XHRcdFx0XHRbVFhfQU1QX1RFU1RfQ10gPSB7IC01LCAtNywgLTksIC0zIH0sXG4mIzQzO1x0XHRcdFx0W1RYX0FNUF9URVNUX0RdID0geyAtOCwgLTEwLCAtNywgLTggfSxcbiYjNDM7XHRcdFx0XHRbVFhfQU1QXzFHX0FdID0geyAtMTIsIC02LCAtNiwgNCB9LFxuJiM0MztcdFx0XHRcdFtUWF9BTVBfMUdfQl0gPSB7IC0xMCwgLTUsIC01LCAxIH0sXG4mIzQzO1x0XHRcdFx0W1RYX0FNUF8xR19DXSA9IHsgLTUsIC0zLCAtNCwgMTEgfSxcbiYjNDM7XHRcdFx0XHRbVFhfQU1QXzFHX0RdID0geyAtOCwgLTMsIC0zLCA0IH0sXG4mIzQzO1x0XHRcdFx0W1RYX0FNUF8xMDBNX0FdID0geyAyLCAxLCAwLCAzIH0sXG4mIzQzO1x0XHRcdFx0W1RYX0FNUF8xMDBNX0JdID0geyAwLCAwLCAwLCAzIH0sXG4mIzQzO1x0XHRcdFx0W1RYX0FNUF8xME1fQV0gPSB7IDAsIDAsIDAsIDAgfSxcbiYjNDM7XHRcdFx0XHRbVFhfQU1QXzEwTV9CXSA9IHsgMCwgMCwgMCwgMCB9LFxuJiM0MztcdFx0XHRcdFtSNTBfQV0gPSB7IDE1LCAxNSwgMTUsIDE1IH0sXG4mIzQzO1x0XHRcdFx0W1I1MF9CXSA9IHsgMTUsIDE1LCAxOCwgMTUgfSxcbiYjNDM7XHRcdFx0XHRbUjUwX0NdID0geyA0LCA0LCA0LCA0IH0sXG4mIzQzO1x0XHRcdFx0W1I1MF9EXSA9IHsgNCwgNCwgNCwgNCB9LFxuJiM0MztcdFx0XHR9LFxuJiM0MztcdFx0fSxcbiYjNDM7XHRcdFtESVNDUkVURV0gPSB7XG4mIzQzO1x0XHRcdHsgfSxcbiYjNDM7XHRcdFx0e1xuJiM0MztcdFx0XHRcdFtUWF9BTVBfVEVTVF9BXSA9IHsgLTExLCAxMSwgLTEyLCAtNyB9LFxuJiM0MztcdFx0XHRcdFtUWF9BTVBfVEVTVF9CXSA9IHsgLTksIC0xMCwgLTksIC04IH0sXG4mIzQzO1x0XHRcdFx0W1RYX0FNUF9URVNUX0NdID0geyAtNiwgLTMsIC03LCAtNCB9LFxuJiM0MztcdFx0XHRcdFtUWF9BTVBfVEVTVF9EXSA9IHsgLTcsIC04LCAtMTAsIC03IH0sXG4mIzQzO1x0XHRcdFx0W1RYX0FNUF8xR19BXSA9IHsgLTExLCAtMTEsIC0xMiwgLTcgfSxcbiYjNDM7XHRcdFx0XHRbVFhfQU1QXzFHX0JdID0geyAtOSwgLTEwLCAtOSwgLTggfSxcbiYjNDM7XHRcdFx0XHRbVFhfQU1QXzFHX0NdID0geyAtNiwgLTMsIC03LCAtNCB9LFxuJiM0MztcdFx0XHRcdFtUWF9BTVBfMUdfRF0gPSB7IC03LCAtOCwgLTEwLCAtNyB9LFxuJiM0MztcdFx0XHRcdFtUWF9BTVBfMTAwTV9BXSA9IHsgMiwgMiwgMSwgMiB9LFxuJiM0MztcdFx0XHRcdFtUWF9BTVBfMTAwTV9CXSA9IHsgMywgMywgMywgMyB9LFxuJiM0MztcdFx0XHRcdFtUWF9BTVBfMTBNX0FdID0geyAwLCAwLCAwLCAwIH0sXG4mIzQzO1x0XHRcdFx0W1RYX0FNUF8xME1fQl0gPSB7IDAsIDAsIDAsIDAgfSxcbiYjNDM7XHRcdFx0XHRbUjUwX0FdID0geyAxMiwgMTIsIDEyLCAxMiB9LFxuJiM0MztcdFx0XHRcdFtSNTBfQl0gPSB7IDcsIDcsIDcsIDcgfSxcbiYjNDM7XHRcdFx0XHRbUjUwX0NdID0geyAyLCAyLCAwLCAwIH0sXG4mIzQzO1x0XHRcdFx0W1I1MF9EXSA9IHsgMCwgMCwgMiwgMiB9LFxuJiM0MztcdFx0XHR9LFxuJiM0MztcdFx0fSxcbiYjNDM7XHR9LFxuJiM0Mzt9O1xuJiM0MztcbiYjNDM7c3RhdGljIHU4IGFuNzU4MV96Y2FsX3RvX3I0NW9obVs2NF0gPSB7XG4mIzQzO1x0MTI3LCAxMjcsIDEyNywgMTI3LCAxMjcsIDEyNywgMTI3LCAxMjcsIDEyNywgMTI3LCAxMjcsIDEyNywgMTI3LCAxMjcsIDEyNywgMTI3LFxuJiM0MztcdDEyNywgMTI3LCAxMjcsIDEyNywgMTI3LCAxMjcsIDEyNywgMTI3LCAxMjMsIDExOSwgMTE1LCAxMTIsIDEwOCwgMTA0LCAxMDAsICA5NixcbiYjNDM7XHQgOTQsICA5MiwgIDg4LCAgODUsICA4MiwgIDgwLCAgNzYsICA3NCwgIDcyLCAgNjgsICA2NiwgIDY0LCAgNjIsICA2MCwgIDU2LCAgNTUsXG4mIzQzO1x0IDUyLCAgNTAsICA0OCwgIDQ2LCAgNDQsICA0MiwgIDQwLCAgMzksICAzNiwgIDM1LCAgMzIsICAzMiwgIDMwLCAgMjgsICAyNywgIDI1XG4mIzQzO307XG4mIzQzO1xuJiM0MzsvKlxuJiM0MzsgKiAyIGNoaXAgcmV2aXNpb25cbiYjNDM7ICogVFhNUiBvciBkaXNjcmV0ZVxuJiM0MzsgKiAyIE1ESSB0eXBlXG4mIzQzOyAqIFRYIEFNUCB0ZXN0L1RYIEFNUCAxRy9UWCBBTVAgMTAwTS9UWCBBTVAgMTBNL1I1MFxuJiM0MzsgKiA0IFBIWVxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGludCBhbjc1ODNfdHhfYW1wX2NvbXBlbnNhdGlvbl90YmxbVFJBTlNGT1JNRVJfVFlQRV9NQVhdW01ESV9UWVBFX01BWF1bQ0FMSUJfQ09OU1RfVFlQRV9NQVhdWzRdID0ge1xuJiM0MztcdFtUWE1SXSA9IHtcbiYjNDM7XHRcdFtNRElfMFJdID0ge1xuJiM0MztcdFx0XHRbVFhfQU1QX1RFU1RfQV0gPSB7IC0zLCAtMywgLTMsIC0zIH0sXG4mIzQzO1x0XHRcdFtUWF9BTVBfVEVTVF9CXSA9IHsgLTMsIC0zLCAtMywgLTMgfSxcbiYjNDM7XHRcdFx0W1RYX0FNUF9URVNUX0NdID0geyAtMywgLTMsIC0zLCAtMyB9LFxuJiM0MztcdFx0XHRbVFhfQU1QX1RFU1RfRF0gPSB7IC0zLCAtMywgLTMsIC0zIH0sXG4mIzQzO1x0XHRcdFtUWF9BTVBfMUdfQV0gPSB7IDAsIDAsIDAsIDAgfSxcbiYjNDM7XHRcdFx0W1RYX0FNUF8xR19CXSA9IHsgMCwgMCwgMCwgMCB9LFxuJiM0MztcdFx0XHRbVFhfQU1QXzFHX0NdID0geyAwLCAwLCAwLCAwIH0sXG4mIzQzO1x0XHRcdFtUWF9BTVBfMUdfRF0gPSB7IDAsIDAsIDAsIDAgfSxcbiYjNDM7XHRcdFx0W1RYX0FNUF8xMDBNX0FdID0geyA0LCA0LCA0LCA0IH0sXG4mIzQzO1x0XHRcdFtUWF9BTVBfMTAwTV9CXSA9IHsgNCwgNCwgNCwgNCB9LFxuJiM0MztcdFx0XHRbVFhfQU1QXzEwTV9BXSA9IHsgMCwgMCwgMCwgMCB9LFxuJiM0MztcdFx0XHRbVFhfQU1QXzEwTV9CXSA9IHsgMCwgMCwgMCwgMCB9LFxuJiM0MztcdFx0XHRbUjUwX0FdID0geyA0LCA0LCAwLCAwIH0sXG4mIzQzO1x0XHRcdFtSNTBfQl0gPSB7IDQsIDQsIDAsIDAgfSxcbiYjNDM7XHRcdFx0W1I1MF9DXSA9IHsgNSwgNSwgMywgNCB9LFxuJiM0MztcdFx0XHRbUjUwX0RdID0geyA0LCA0LCA0LCAwIH0sXG4mIzQzO1x0XHR9LFxuJiM0MztcdFx0W01ESV81Ul0gPSB7XG4mIzQzO1x0XHRcdFtUWF9BTVBfVEVTVF9BXSA9IHsgLTMsIC0zLCAtMywgLTMgfSxcbiYjNDM7XHRcdFx0W1RYX0FNUF9URVNUX0JdID0geyAtMywgLTMsIC0zLCAtMyB9LFxuJiM0MztcdFx0XHRbVFhfQU1QX1RFU1RfQ10gPSB7IC0zLCAtMywgLTMsIC0zIH0sXG4mIzQzO1x0XHRcdFtUWF9BTVBfVEVTVF9EXSA9IHsgLTMsIC0zLCAtMywgLTMgfSxcbiYjNDM7XHRcdFx0W1RYX0FNUF8xR19BXSA9IHsgMCwgMCwgMCwgMCB9LFxuJiM0MztcdFx0XHRbVFhfQU1QXzFHX0JdID0geyAwLCAwLCAwLCAwIH0sXG4mIzQzO1x0XHRcdFtUWF9BTVBfMUdfQ10gPSB7IDAsIDAsIDAsIDAgfSxcbiYjNDM7XHRcdFx0W1RYX0FNUF8xR19EXSA9IHsgMCwgMCwgMCwgMCB9LFxuJiM0MztcdFx0XHRbVFhfQU1QXzEwME1fQV0gPSB7IDQsIDQsIDQsIDQgfSxcbiYjNDM7XHRcdFx0W1RYX0FNUF8xMDBNX0JdID0geyA0LCA0LCA0LCA0IH0sXG4mIzQzO1x0XHRcdFtUWF9BTVBfMTBNX0FdID0geyAwLCAwLCAwLCAwIH0sXG4mIzQzO1x0XHRcdFtUWF9BTVBfMTBNX0JdID0geyAwLCAwLCAwLCAwIH0sXG4mIzQzO1x0XHRcdFtSNTBfQV0gPSB7IC00LCAtNCwgLTQsIC00IH0sXG4mIzQzO1x0XHRcdFtSNTBfQl0gPSB7IC00LCAtNCwgLTQsIC00IH0sXG4mIzQzO1x0XHRcdFtSNTBfQ10gPSB7IC0yLCAtMiwgLTIsIC0yIH0sXG4mIzQzO1x0XHRcdFtSNTBfRF0gPSB7IC0zLCAtMywgLTIsIC0yIH0sXG4mIzQzO1x0XHR9LFxuJiM0MztcdH0sXG4mIzQzO1x0W0RJU0NSRVRFXSA9IHtcbiYjNDM7XHRcdFtNRElfMFJdID0ge1xuJiM0MztcdFx0XHRbVFhfQU1QX1RFU1RfQV0gPSB7IC0zLCAtMywgLTMsIC0zIH0sXG4mIzQzO1x0XHRcdFtUWF9BTVBfVEVTVF9CXSA9IHsgLTMsIC0zLCAtMywgLTMgfSxcbiYjNDM7XHRcdFx0W1RYX0FNUF9URVNUX0NdID0geyAtMywgLTMsIC0zLCAtMyB9LFxuJiM0MztcdFx0XHRbVFhfQU1QX1RFU1RfRF0gPSB7IC0zLCAtMywgLTMsIC0zIH0sXG4mIzQzO1x0XHRcdFtUWF9BTVBfMUdfQV0gPSB7IDAsIDAsIDAsIDAgfSxcbiYjNDM7XHRcdFx0W1RYX0FNUF8xR19CXSA9IHsgMCwgMCwgMCwgMCB9LFxuJiM0MztcdFx0XHRbVFhfQU1QXzFHX0NdID0geyAwLCAwLCAwLCAwIH0sXG4mIzQzO1x0XHRcdFtUWF9BTVBfMUdfRF0gPSB7IDAsIDAsIDAsIDAgfSxcbiYjNDM7XHRcdFx0W1RYX0FNUF8xMDBNX0FdID0geyA0LCA0LCA0LCA0IH0sXG4mIzQzO1x0XHRcdFtUWF9BTVBfMTAwTV9CXSA9IHsgNCwgNCwgNCwgNCB9LFxuJiM0MztcdFx0XHRbVFhfQU1QXzEwTV9BXSA9IHsgMCwgMCwgMCwgMCB9LFxuJiM0MztcdFx0XHRbVFhfQU1QXzEwTV9CXSA9IHsgMCwgMCwgMCwgMCB9LFxuJiM0MztcdFx0XHRbUjUwX0FdID0geyA0LCA0LCA0LCA0IH0sXG4mIzQzO1x0XHRcdFtSNTBfQl0gPSB7IDQsIDQsIDQsIDQgfSxcbiYjNDM7XHRcdFx0W1I1MF9DXSA9IHsgNiwgNiwgNiwgNiB9LFxuJiM0MztcdFx0XHRbUjUwX0RdID0geyA0LCA0LCA0LCA0IH0sXG4mIzQzO1x0XHR9LFxuJiM0MztcdFx0W01ESV81Ul0gPSB7XG4mIzQzO1x0XHRcdFtUWF9BTVBfVEVTVF9BXSA9IHsgLTMsIC0zLCAtMywgLTMgfSxcbiYjNDM7XHRcdFx0W1RYX0FNUF9URVNUX0JdID0geyAtMywgLTMsIC0zLCAtMyB9LFxuJiM0MztcdFx0XHRbVFhfQU1QX1RFU1RfQ10gPSB7IC0zLCAtMywgLTMsIC0zIH0sXG4mIzQzO1x0XHRcdFtUWF9BTVBfVEVTVF9EXSA9IHsgLTMsIC0zLCAtMywgLTMgfSxcbiYjNDM7XHRcdFx0W1RYX0FNUF8xR19BXSA9IHsgMCwgMCwgMCwgMCB9LFxuJiM0MztcdFx0XHRbVFhfQU1QXzFHX0JdID0geyAwLCAwLCAwLCAwIH0sXG4mIzQzO1x0XHRcdFtUWF9BTVBfMUdfQ10gPSB7IDAsIDAsIDAsIDAgfSxcbiYjNDM7XHRcdFx0W1RYX0FNUF8xR19EXSA9IHsgMCwgMCwgMCwgMCB9LFxuJiM0MztcdFx0XHRbVFhfQU1QXzEwME1fQV0gPSB7IDQsIDQsIDQsIDQgfSxcbiYjNDM7XHRcdFx0W1RYX0FNUF8xMDBNX0JdID0geyA0LCA0LCA0LCA0IH0sXG4mIzQzO1x0XHRcdFtUWF9BTVBfMTBNX0FdID0geyAwLCAwLCAwLCAwIH0sXG4mIzQzO1x0XHRcdFtUWF9BTVBfMTBNX0JdID0geyAwLCAwLCAwLCAwIH0sXG4mIzQzO1x0XHRcdFtSNTBfQV0gPSB7IDAsIDAsIDAsIDAgfSxcbiYjNDM7XHRcdFx0W1I1MF9CXSA9IHsgMCwgMCwgMCwgMCB9LFxuJiM0MztcdFx0XHRbUjUwX0NdID0geyAwLCAwLCAwLCAwIH0sXG4mIzQzO1x0XHRcdFtSNTBfRF0gPSB7IDAsIDAsIDAsIDAgfSxcbiYjNDM7XHRcdH0sXG4mIzQzO1x0fSxcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO3N0YXRpYyB1OCBhbjc1ODNfemNhbF90b19yNTBvaG1fMFJbNjRdID0ge1xuJiM0MztcdDEyNywgMTI3LCAxMjcsIDEyNywgMTI3LCAxMjcsIDEyNywgMTI3LCAxMjcsIDEyNywgMTI3LCAxMjcsIDEyNywgMTI3LCAxMjcsIDEyNyxcbiYjNDM7XHQxMjcsIDEyNywgMTI3LCAxMjIsIDExOCwgMTE0LCAxMTAsIDEwNiwgMTAyLCAgOTgsICA5NiwgIDkyLCAgODgsICA4NSwgIDgyLCAgODAsXG4mIzQzO1x0IDc2LCAgNzIsICA3MCwgIDY4LCAgNjQsICA2MiwgIDYwLCAgNTcsICA1NSwgIDUyLCAgNTAsICA0OCwgIDQ2LCAgNDQsICA0MSwgIDQwLFxuJiM0MztcdCAzOCwgIDM2LCAgMzMsICAzMiwgIDMwLCAgMjgsICAyNiwgIDI0LCAgMjQsICAyMiwgIDIwLCAgMTgsICAxNiwgIDE2LCAgMTQsICAxMixcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO3N0YXRpYyB1OCBhbjc1ODNfemNhbF90b19yNTBvaG1fNVJbNjRdID0ge1xuJiM0MztcdDEyNywgMTI3LCAxMjcsIDEyNywgMTI3LCAxMjcsIDEyNywgMTI3LCAxMjcsIDEyNywgMTI3LCAxMjcsIDEyNywgMTI3LCAxMjcsIDEyNyxcbiYjNDM7XHQxMjcsIDEyNywgMTI3LCAxMjcsIDEyNywgMTI3LCAxMjcsIDEyNywgMTI3LCAxMjQsIDEyMCwgMTE2LCAxMTIsIDExMCwgMTA2LCAxMDIsXG4mIzQzO1x0IDk5LCAgOTYsICA5MywgIDkwLCAgODgsICA4NCwgIDgxLCAgNzksICA3NiwgIDczLCAgNzEsICA2OCwgIDY2LCAgNjQsICA2MSwgIDU5LFxuJiM0MztcdCA1NiwgIDU0LCAgNTIsICA1MCwgIDQ4LCAgNDYsICA0NCwgIDQyLCAgNDAsICAzOSwgIDM3LCAgMzYsICAzMywgIDMyLCAgMzEsICAyOSxcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgYWlyb2hhX2NhbF9jeWNsZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCBpbnQgZGV2YWQsXG4mIzQzO1x0XHRcdCAgICB1MzIgcmVnbnVtLCB1MTYgbWFzaywgdTE2IGNhbF92YWwpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgYWlyb2hhX3NvY3BoeV9zaGFyZWQgKnNoYXJlZCA9IHBoeV9wYWNrYWdlX2dldF9wcml2KHBoeWRldik7XG4mIzQzO1x0c3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldl9wMDtcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRwaHlkZXZfcDAgPSBzaGFyZWQtXHUwMDNlcGh5ZGV2X3AwO1xuJiM0MztcbiYjNDM7XHRwaHlfbW9kaWZ5X21tZChwaHlkZXYsIGRldmFkLCByZWdudW0sIG1hc2ssIGNhbF92YWwpO1xuJiM0MztcbiYjNDM7XHRyZXQgPSBtdGtfY2FsX2N5Y2xlX3dhaXQocGh5ZGV2X3AwKTtcbiYjNDM7XHRwaHlkZXZfZGJnKHBoeWRldiwgXCYjMzQ7Y2FsX3ZhbDogMHgleCwgcmV0OiAlZFxcblwmIzM0OywgY2FsX3ZhbCwgcmV0KTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHJldDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBhaXJvaGFfcmV4dF9jYWxfc3coc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbiYjNDM7e1xuJiM0MztcdGludCBjYWxpYnJhdGlvbl9wb2xhcml0eTtcbiYjNDM7XHR1OCB6Y2FsX2N0cmwgPSAzMjtcbiYjNDM7XHRpbnQgZmlyc3RfY2FsaWI7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0LyogQkcgdm9sdGFnZSBvdXRwdXQgKi9cbiYjNDM7XHRwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDIsIDB4MTAwLCAweGMwMDApO1xuJiM0MztcdC8qIHRzdF9tb2RlMiAqL1xuJiM0MztcdHBoeV93cml0ZV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMiwgMHhmZiwgMHgyKTtcbiYjNDM7XG4mIzQzO1x0cGh5X2NsZWFyX2JpdHNfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDIsIDB4ZmYsXG4mIzQzO1x0XHRcdCAgIEdFTk1BU0soMTUsIDQpIHwgR0VOTUFTSygxLCAwKSk7XG4mIzQzO1xuJiM0MztcdHBoeV93cml0ZV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSwgTVRLX1BIWV9SR19BTkFfQ0FMX1JHMCxcbiYjNDM7XHRcdCAgICAgIE1US19QSFlfUkdfQ0FMX0NLSU5WIHwgTVRLX1BIWV9SR19BTkFfQ0FMRU4gfFxuJiM0MztcdFx0ICAgICAgTVRLX1BIWV9SR19SRVhUX0NBTEVOKTtcbiYjNDM7XHRwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIE1US19QSFlfUkdfQU5BX0NBTF9SRzEsIDApO1xuJiM0MztcdHBoeV93cml0ZV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSwgTVRLX1BIWV9SR19BTkFfQ0FMX1JHNiwgMCk7XG4mIzQzO1xuJiM0MztcdHBoeWRldl9kYmcocGh5ZGV2LCBcJiMzNDtTdGFydCBSRVhUIFNXIGNhbC5cXG5cJiMzNDspO1xuJiM0MztcdGZpcnN0X2NhbGliID0gYWlyb2hhX2NhbF9jeWNsZShwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCBNVEtfUEhZX1JHX0FOQV9DQUxfUkc1LFxuJiM0MztcdFx0XHRcdCAgICAgICBNVEtfUEhZX1JHX1JFWFRfWkNBTF9DVFJMX01BU0ssIHpjYWxfY3RybCk7XG4mIzQzO1xuJiM0MztcdGlmIChmaXJzdF9jYWxpYiBcdTAwM2MgMCkge1xuJiM0MztcdFx0cGh5ZGV2X2VycihwaHlkZXYsIFwmIzM0O1JFWFQgU1cgY2FsaWJyYXRpb24gZmFpbGVkLlxcblwmIzM0Oyk7XG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdC8qIElmIFJFWFQgY2FsaWJyYXRpb24gZmFpbGVkOlxuJiM0MztcdCAqIC0gaW5jcmVhc2UgZEIgdW50aWwgY2FsaWJyYXRpb24gc3VjY2VlZC5cbiYjNDM7XHQgKiBJZiBSRVhUIGNhbGlicmF0aW9uIHN1Y2NlZWRlZDpcbiYjNDM7XHQgKiAtIGRlY3JlYXNlIGRCIHVudGlsIGNhbGlicmF0aW9uIGZhaWwgdG8gZmluZSB0dW5lIGl0LlxuJiM0MztcdCAqL1xuJiM0MztcdGlmIChmaXJzdF9jYWxpYiA9PSAxKVxuJiM0MztcdFx0Y2FsaWJyYXRpb25fcG9sYXJpdHkgPSAtMTtcbiYjNDM7XHRlbHNlXG4mIzQzO1x0XHRjYWxpYnJhdGlvbl9wb2xhcml0eSA9IDE7XG4mIzQzO1xuJiM0MztcdHdoaWxlICh6Y2FsX2N0cmwgXHUwMDNlIDAgXHUwMDI2XHUwMDI2XG4mIzQzO1x0ICAgICAgIHpjYWxfY3RybCBcdTAwM2MgRklFTERfTUFYKE1US19QSFlfUkdfUkVYVF9aQ0FMX0NUUkxfTUFTSykpIHtcbiYjNDM7XHRcdHpjYWxfY3RybCAmIzQzOz0gY2FsaWJyYXRpb25fcG9sYXJpdHk7XG4mIzQzO1xuJiM0MztcdFx0cmV0ID0gYWlyb2hhX2NhbF9jeWNsZShwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCBNVEtfUEhZX1JHX0FOQV9DQUxfUkc1LFxuJiM0MztcdFx0XHRcdCAgICAgICBNVEtfUEhZX1JHX1JFWFRfWkNBTF9DVFJMX01BU0ssIHpjYWxfY3RybCk7XG4mIzQzO1x0XHQvKiBFeGl0IGlmIHdlIGVpdGhlciBmYWlsZWQgb3Igc3VjY2VlZGVkIGNvbXBhcmVkIHRvIHRoZVxuJiM0MztcdFx0ICogZmlyc3QgY2FsaWJyYXRpb24gcmVzdWx0LiAoYWthIHdlIGZpbmlzaGVkIGZpbmUgdHVuaW5nIG9yXG4mIzQzO1x0XHQgKiB3ZSBzdWNjZWVkZWQgd2l0aCBjYWxpYnJhdGlvbilcbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0aWYgKHJldCAhPSBmaXJzdF9jYWxpYilcbiYjNDM7XHRcdFx0YnJlYWs7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKSB7XG4mIzQzO1x0XHRwaHlkZXZfZXJyKHBoeWRldiwgXCYjMzQ7UkVYVCBTVyBjYWxpYnJhdGlvbiBmYWlsZWQuXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKHpjYWxfY3RybCA9PSAwIHx8XG4mIzQzO1x0ICAgIHpjYWxfY3RybCA9PSBGSUVMRF9NQVgoTVRLX1BIWV9SR19SRVhUX1pDQUxfQ1RSTF9NQVNLKSkge1xuJiM0MztcdFx0emNhbF9jdHJsID0gMzI7XG4mIzQzO1x0XHRwaHlkZXZfZXJyKHBoeWRldiwgXCYjMzQ7UkVYVCBTVyBjYWxpYnJhdGlvbiBzYXR1cmF0aW9uLiBEZWZhdWx0aW5nIHRvICV4LlxcblwmIzM0OyxcbiYjNDM7XHRcdFx0ICAgemNhbF9jdHJsKTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHBoeV9tb2RpZnlfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIE1US19QSFlfUkdfQU5BX0NBTF9SRzUsXG4mIzQzO1x0XHQgICAgICAgTVRLX1BIWV9SR19SRVhUX1RSSU1fTUFTSyxcbiYjNDM7XHRcdCAgICAgICBGSUVMRF9QUkVQKE1US19QSFlfUkdfUkVYVF9UUklNX01BU0ssIHpjYWxfY3RybCkpO1xuJiM0MztcdHBoeV9tb2RpZnlfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDIsIE1US19QSFlfUkdfQkdfUkFTRUwsXG4mIzQzO1x0XHQgICAgICAgTVRLX1BIWV9SR19CR19SQVNFTF9NQVNLLFxuJiM0MztcdFx0ICAgICAgIEZJRUxEX1BSRVAoTVRLX1BIWV9SR19CR19SQVNFTF9NQVNLLCB6Y2FsX2N0cmwgXHUwMDNlXHUwMDNlIDMpKTtcbiYjNDM7XG4mIzQzO1x0cGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCBNVEtfUEhZX1JHX0FOQV9DQUxfUkcwLCAwKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgYWlyb2hhX3R4X29mZnNldF9jYWxfc3coc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgdTggdHhnX2NhbGVuX3gpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgYWlyb2hhX3NvY3BoeV9zaGFyZWQgKnNoYXJlZCA9IHBoeV9wYWNrYWdlX2dldF9wcml2KHBoeWRldik7XG4mIzQzO1x0c3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldl9wMDtcbiYjNDM7XHR1MTYgZGV2MWVfMTQ1X3RtcCwgYm1jcl90bXA7XG4mIzQzO1x0aW50IGNhbGlicmF0aW9uX3BvbGFyaXR5O1xuJiM0MztcdHUxNiByZWdfZGFjMSwgcmVnX2RhYzI7XG4mIzQzO1x0aW50IHpjYWxfY3RybCA9IDA7XG4mIzQzO1x0aW50IGZpcnN0X2NhbGliO1xuJiM0MztcdHUxNiByZWcsIG1hc2s7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0cGh5ZGV2X3AwID0gc2hhcmVkLVx1MDAzZXBoeWRldl9wMDtcbiYjNDM7XG4mIzQzO1x0LyogQkcgdm9sdGFnZSBvdXRwdXQgKi9cbiYjNDM7XHRwaHlfd3JpdGVfbW1kKHBoeWRldl9wMCwgTURJT19NTURfVkVORDIsIDB4MTAwLCAweGMwMDApO1xuJiM0MztcbiYjNDM7XHRwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIE1US19QSFlfUkdfQU5BX0NBTF9SRzAsXG4mIzQzO1x0XHQgICAgICBNVEtfUEhZX1JHX0FOQV9DQUxFTik7XG4mIzQzO1x0cGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCBNVEtfUEhZX1JHX0FOQV9DQUxfUkcxLFxuJiM0MztcdFx0ICAgICAgTVRLX1BIWV9SR19UWFZPU19DQUxFTik7XG4mIzQzO1x0cGh5X3dyaXRlX21tZChwaHlkZXZfcDAsIE1ESU9fTU1EX1ZFTkQxLCBNVEtfUEhZX1JHX0FOQV9DQUxfUkcwLFxuJiM0MztcdFx0ICAgICAgTVRLX1BIWV9SR19BTkFfQ0FMRU4pO1xuJiM0MztcdHBoeV93cml0ZV9tbWQocGh5ZGV2X3AwLCBNRElPX01NRF9WRU5EMSwgTVRLX1BIWV9SR19BTkFfQ0FMX1JHMSxcbiYjNDM7XHRcdCAgICAgIE1US19QSFlfUkdfVFhWT1NfQ0FMRU4pO1xuJiM0MztcbiYjNDM7XHQvKiBGb3JjZSAxRyBmdWxsIGR1cGxleCBmb3IgY2FsaWJyYXRpb24gKi9cbiYjNDM7XHRibWNyX3RtcCA9IHBoeV9yZWFkKHBoeWRldiwgTUlJX0JNQ1IpO1xuJiM0MztcdHBoeV93cml0ZShwaHlkZXYsIE1JSV9CTUNSLCBCTUNSX0ZVTExEUExYIHwgQk1DUl9TUEVFRDEwMDApO1xuJiM0MztcbiYjNDM7XHQvKiBGb3JjZSBNREkgKi9cbiYjNDM7XHRkZXYxZV8xNDVfdG1wID0gcGh5X3JlYWRfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIDB4MDE0NSk7XG4mIzQzO1x0cGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCAweDAxNDUsIDB4MTAxMCk7XG4mIzQzO1xuJiM0MztcdC8qIDFlXzk2WzE1XTpieXBhc3NfdHhfb2Zmc2V0X2NhbCwgSHcgYnlwYXNzLCBGdyBjYWwgKi9cbiYjNDM7XHRwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIDB4OTYsXG4mIzQzO1x0XHQgICAgICAweDgwMDApO1xuJiM0MztcdHBoeV93cml0ZV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSwgMHgzZSxcbiYjNDM7XHRcdCAgICAgIDB4ZjgwOCk7XG4mIzQzO1xuJiM0MztcdHN3aXRjaCAodHhnX2NhbGVuX3gpIHtcbiYjNDM7XHRjYXNlIFBBSVJfQTpcbiYjNDM7XHRcdHBoeV93cml0ZV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSwgMHhkZCwgQklUKDEyKSk7XG4mIzQzO1x0XHRyZWdfZGFjMSA9IE1US19QSFlfUkdfREFTTl9EQUNfSU4wX0E7XG4mIzQzO1x0XHRyZWdfZGFjMiA9IE1US19QSFlfUkdfREFTTl9EQUNfSU4xX0E7XG4mIzQzO1x0XHRyZWcgPSBNVEtfUEhZX1JHX0NSX1RYX0FNUF9PRkZTRVRfQV9CO1xuJiM0MztcdFx0bWFzayA9IE1US19QSFlfQ1JfVFhfQU1QX09GRlNFVF9BX01BU0s7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHRjYXNlIFBBSVJfQjpcbiYjNDM7XHRcdHBoeV93cml0ZV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSwgMHhkZCwgQklUKDgpKTtcbiYjNDM7XHRcdHJlZ19kYWMxID0gTVRLX1BIWV9SR19EQVNOX0RBQ19JTjBfQjtcbiYjNDM7XHRcdHJlZ19kYWMyID0gTVRLX1BIWV9SR19EQVNOX0RBQ19JTjFfQjtcbiYjNDM7XHRcdHJlZyA9IE1US19QSFlfUkdfQ1JfVFhfQU1QX09GRlNFVF9BX0I7XG4mIzQzO1x0XHRtYXNrID0gTVRLX1BIWV9DUl9UWF9BTVBfT0ZGU0VUX0JfTUFTSztcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdGNhc2UgUEFJUl9DOlxuJiM0MztcdFx0cGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCAweGRkLCBCSVQoNCkpO1xuJiM0MztcdFx0cmVnX2RhYzEgPSBNVEtfUEhZX1JHX0RBU05fREFDX0lOMF9DO1xuJiM0MztcdFx0cmVnX2RhYzIgPSBNVEtfUEhZX1JHX0RBU05fREFDX0lOMV9DO1xuJiM0MztcdFx0cmVnID0gTVRLX1BIWV9SR19DUl9UWF9BTVBfT0ZGU0VUX0NfRDtcbiYjNDM7XHRcdG1hc2sgPSBNVEtfUEhZX0NSX1RYX0FNUF9PRkZTRVRfQ19NQVNLO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0Y2FzZSBQQUlSX0Q6XG4mIzQzO1x0XHRwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIDB4ZGQsIEJJVCgwKSk7XG4mIzQzO1x0XHRyZWdfZGFjMSA9IE1US19QSFlfUkdfREFTTl9EQUNfSU4wX0Q7XG4mIzQzO1x0XHRyZWdfZGFjMiA9IE1US19QSFlfUkdfREFTTl9EQUNfSU4xX0Q7XG4mIzQzO1x0XHRyZWcgPSBNVEtfUEhZX1JHX0NSX1RYX0FNUF9PRkZTRVRfQ19EO1xuJiM0MztcdFx0bWFzayA9IE1US19QSFlfQ1JfVFhfQU1QX09GRlNFVF9EX01BU0s7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHRkZWZhdWx0OlxuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIHJlZ19kYWMxLFxuJiM0MztcdFx0ICAgICAgMHg4MDAwKTtcbiYjNDM7XHRwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIHJlZ19kYWMyLFxuJiM0MztcdFx0ICAgICAgMHg4MDAwKTtcbiYjNDM7XG4mIzQzO1x0cGh5ZGV2X2RiZyhwaHlkZXYsIFwmIzM0O1N0YXJ0IFRYIE9mZnNldCBTVyBjYWwuXFxuXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO1x0Zmlyc3RfY2FsaWIgPSBhaXJvaGFfY2FsX2N5Y2xlKHBoeWRldiwgTURJT19NTURfVkVORDEsIHJlZywgbWFzayxcbiYjNDM7XHRcdFx0XHQgICAgICAgemNhbF9jdHJsIFx1MDAzY1x1MDAzYyBfX2ZmcyhtYXNrKSk7XG4mIzQzO1xuJiM0MztcdC8qIElmIFRYIE9mZnNldCBjYWxpYnJhdGlvbiBmYWlsZWQ6XG4mIzQzO1x0ICogLSBpbmNyZWFzZSBkQiB1bnRpbCBjYWxpYnJhdGlvbiBzdWNjZWVkLlxuJiM0MztcdCAqIElmIFRYIE9mZnNldCBjYWxpYnJhdGlvbiBzdWNjZWVkZWQ6XG4mIzQzO1x0ICogLSBkZWNyZWFzZSBkQiB1bnRpbCBjYWxpYnJhdGlvbiBmYWlsIHRvIGZpbmUgdHVuZSBpdC5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAoZmlyc3RfY2FsaWIgPT0gMSlcbiYjNDM7XHRcdGNhbGlicmF0aW9uX3BvbGFyaXR5ID0gLTE7XG4mIzQzO1x0ZWxzZVxuJiM0MztcdFx0Y2FsaWJyYXRpb25fcG9sYXJpdHkgPSAxO1xuJiM0MztcbiYjNDM7XHR3aGlsZSAoemNhbF9jdHJsIFx1MDAzZSAtMzIgXHUwMDI2XHUwMDI2IHpjYWxfY3RybCBcdTAwM2MgMzIpIHtcbiYjNDM7XHRcdHUzMiB2YWw7XG4mIzQzO1xuJiM0MztcdFx0emNhbF9jdHJsICYjNDM7PSBjYWxpYnJhdGlvbl9wb2xhcml0eTtcbiYjNDM7XHRcdGlmICh6Y2FsX2N0cmwgXHUwMDNlPSAwKVxuJiM0MztcdFx0XHR2YWwgPSB6Y2FsX2N0cmw7XG4mIzQzO1x0XHRlbHNlXG4mIzQzO1x0XHRcdC8qIEJJVCg1KSBzaWduYWwgbmVnYXRpdmUgbnVtYmVyIGZvciBUWCBPZmZzZXQgKi9cbiYjNDM7XHRcdFx0dmFsID0gQklUKDUpIHwgYWJzKHpjYWxfY3RybCk7XG4mIzQzO1xuJiM0MztcdFx0cmV0ID0gYWlyb2hhX2NhbF9jeWNsZShwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCByZWcsIG1hc2ssXG4mIzQzO1x0XHRcdFx0ICAgICAgIHZhbCBcdTAwM2NcdTAwM2MgX19mZnMobWFzaykpO1xuJiM0MztcdFx0LyogRXhpdCBpZiB3ZSBlaXRoZXIgZmFpbGVkIG9yIHN1Y2NlZWRlZCBjb21wYXJlZCB0byB0aGVcbiYjNDM7XHRcdCAqIGZpcnN0IGNhbGlicmF0aW9uIHJlc3VsdC4gKGFrYSB3ZSBmaW5pc2hlZCBmaW5lIHR1bmluZyBvclxuJiM0MztcdFx0ICogd2Ugc3VjY2VlZGVkIHdpdGggY2FsaWJyYXRpb24pXG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdGlmIChyZXQgIT0gZmlyc3RfY2FsaWIpXG4mIzQzO1x0XHRcdGJyZWFrO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMCkge1xuJiM0MztcdFx0cGh5ZGV2X2VycihwaHlkZXYsIFwmIzM0O1RYIE9mZnNldCBjYWxpYnJhdGlvbiBmYWlsZWQuXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKHpjYWxfY3RybCA9PSAtMzIgfHxcbiYjNDM7XHQgICAgemNhbF9jdHJsID09IDMyKSB7XG4mIzQzO1x0XHR6Y2FsX2N0cmwgPSAwO1xuJiM0MztcdFx0cGh5ZGV2X2VycihwaHlkZXYsIFwmIzM0O1RYIE9mZnNldCBTVyBjYWxpYnJhdGlvbiBzYXR1cmF0aW9uLiBEZWZhdWx0aW5nIHRvICV4LlxcblwmIzM0OyxcbiYjNDM7XHRcdFx0ICAgemNhbF9jdHJsKTtcbiYjNDM7XG4mIzQzO1x0XHRwaHlfbW9kaWZ5X21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCByZWcsIG1hc2ssXG4mIzQzO1x0XHRcdCAgICAgICB6Y2FsX2N0cmwgXHUwMDNjXHUwMDNjIF9fZmZzKG1hc2spKTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHBoeV93cml0ZV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMiwgMHgxMDAsIDB4MCk7XG4mIzQzO1xuJiM0MztcdHBoeV93cml0ZV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSwgTVRLX1BIWV9SR19EQVNOX0RBQ19JTjBfQSwgMCk7XG4mIzQzO1x0cGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCBNVEtfUEhZX1JHX0RBU05fREFDX0lOMF9CLCAwKTtcbiYjNDM7XHRwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIE1US19QSFlfUkdfREFTTl9EQUNfSU4wX0MsIDApO1xuJiM0MztcdHBoeV93cml0ZV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSwgTVRLX1BIWV9SR19EQVNOX0RBQ19JTjBfRCwgMCk7XG4mIzQzO1x0cGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCBNVEtfUEhZX1JHX0RBU05fREFDX0lOMV9BLCAwKTtcbiYjNDM7XHRwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIE1US19QSFlfUkdfREFTTl9EQUNfSU4xX0IsIDApO1xuJiM0MztcdHBoeV93cml0ZV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSwgTVRLX1BIWV9SR19EQVNOX0RBQ19JTjFfQywgMCk7XG4mIzQzO1x0cGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCBNVEtfUEhZX1JHX0RBU05fREFDX0lOMV9ELCAwKTtcbiYjNDM7XG4mIzQzO1x0cGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCBNVEtfUEhZX1JHX0FOQV9DQUxfUkcwLCAwKTtcbiYjNDM7XHRwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIE1US19QSFlfUkdfQU5BX0NBTF9SRzEsIDApO1xuJiM0MztcdHBoeV93cml0ZV9tbWQocGh5ZGV2X3AwLCBNRElPX01NRF9WRU5EMSwgTVRLX1BIWV9SR19BTkFfQ0FMX1JHMCwgMCk7XG4mIzQzO1x0cGh5X3dyaXRlX21tZChwaHlkZXZfcDAsIE1ESU9fTU1EX1ZFTkQxLCBNVEtfUEhZX1JHX0FOQV9DQUxfUkcxLCAwKTtcbiYjNDM7XHRwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIDB4OTYsIDB4MCk7XG4mIzQzO1x0cGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCAweDNlLCAweGMwMDApO1xuJiM0MztcdHBoeV93cml0ZV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSwgMHhkZCwgMCk7XG4mIzQzO1xuJiM0MztcdC8qIFJlc3RvcmUgQk1DUiAqL1xuJiM0MztcdHBoeV93cml0ZShwaHlkZXYsIE1JSV9CTUNSLCBibWNyX3RtcCk7XG4mIzQzO1xuJiM0MztcdC8qIFJlc3RvcmUgTURJICovXG4mIzQzO1x0cGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCAweDAxNDUsIGRldjFlXzE0NV90bXApO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBhaXJvaGFfdHhfYW1wX2NhbF9zdyhzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCB1OCB0eGdfY2FsZW5feClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBhaXJvaGFfc29jcGh5X3NoYXJlZCAqc2hhcmVkID0gcGh5X3BhY2thZ2VfZ2V0X3ByaXYocGh5ZGV2KTtcbiYjNDM7XHR1MTYgbWFza19nYmUsIG1hc2tfdGJ0LCBtYXNrX3RzdCwgbWFza19oYnQ7XG4mIzQzO1x0dTE2IHJlZywgcmVnXzEwMCwgcmVnX2RhYzEsIHJlZ19kYWMyO1xuJiM0MztcdHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXZfcDA7XG4mIzQzO1x0aW50IGNhbGlicmF0aW9uX3BvbGFyaXR5O1xuJiM0MztcdHU4IHpjYWxfY3RybCA9IDMyO1xuJiM0MztcdGludCBmaXJzdF9jYWxpYjtcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRwaHlkZXZfcDAgPSBzaGFyZWQtXHUwMDNlcGh5ZGV2X3AwO1xuJiM0MztcbiYjNDM7XHQvKiBCRyB2b2x0YWdlIG91dHB1dCAqL1xuJiM0MztcdHBoeV93cml0ZV9tbWQocGh5ZGV2X3AwLCBNRElPX01NRF9WRU5EMiwgMHgxMDAsIDB4YzAwMCk7XG4mIzQzO1xuJiM0MztcdHBoeV93cml0ZV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSwgMHgxNDUsIDB4MTAxMCk7XG4mIzQzO1xuJiM0MztcdHBoeV93cml0ZV9tbWQocGh5ZGV2X3AwLCBNRElPX01NRF9WRU5EMSwgTVRLX1BIWV9SR19BTkFfQ0FMX1JHMCxcbiYjNDM7XHRcdCAgICAgIE1US19QSFlfUkdfQ0FMX0NLSU5WIHwgTVRLX1BIWV9SR19BTkFfQ0FMRU4pO1xuJiM0MztcdHBoeV93cml0ZV9tbWQocGh5ZGV2X3AwLCBNRElPX01NRF9WRU5EMSwgTVRLX1BIWV9SR19BTkFfQ0FMX1JHMSxcbiYjNDM7XHRcdCAgICAgIE1US19QSFlfUkdfVFhWT1NfQ0FMRU4pO1xuJiM0MztcbiYjNDM7XHQvKiBzZWxlY3QgMVYgKi9cbiYjNDM7XHRwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIE1US19QSFlfUkdfQU5BX0NBTF9SRzYsIDB4MTApO1xuJiM0MztcbiYjNDM7XHQvKiBlbmFibGUgVHggVkxEKi9cbiYjNDM7XHRwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIDB4M2UsIDB4ZjgwOCk7XG4mIzQzO1xuJiM0MztcdC8qIEZvcmNlIDFHIGZ1bGwgZHVwbGV4IGZvciBjYWxpYnJhdGlvbiAqL1xuJiM0MztcdHBoeV93cml0ZShwaHlkZXYsIE1JSV9CTUNSLCBCTUNSX0ZVTExEUExYIHwgQk1DUl9TUEVFRDEwMDApO1xuJiM0MztcbiYjNDM7XHRzd2l0Y2ggKHR4Z19jYWxlbl94KSB7XG4mIzQzO1x0Y2FzZSBQQUlSX0E6XG4mIzQzO1x0XHRwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIDB4ZGQsIEJJVCgxMikpO1xuJiM0MztcdFx0cmVnX2RhYzEgPSBNVEtfUEhZX1JHX0RBU05fREFDX0lOMF9BO1xuJiM0MztcdFx0cmVnX2RhYzIgPSBNVEtfUEhZX1JHX0RBU05fREFDX0lOMV9BO1xuJiM0MztcdFx0cmVnID0gTVRLX1BIWV9UWFZMRF9EQV9SRztcbiYjNDM7XHRcdG1hc2tfZ2JlID0gTVRLX1BIWV9EQV9UWF9JMk1QQl9BX0dCRV9NQVNLO1xuJiM0MztcdFx0bWFza190YnQgPSBNVEtfUEhZX0RBX1RYX0kyTVBCX0FfVEJUX01BU0s7XG4mIzQzO1x0XHRyZWdfMTAwID0gTVRLX1BIWV9UWF9JMk1QQl9URVNUX01PREVfQTI7XG4mIzQzO1x0XHRtYXNrX2hidCA9IE1US19QSFlfREFfVFhfSTJNUEJfQV9IQlRfTUFTSztcbiYjNDM7XHRcdG1hc2tfdHN0ID0gTVRLX1BIWV9EQV9UWF9JMk1QQl9BX1RTVF9NQVNLO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0Y2FzZSBQQUlSX0I6XG4mIzQzO1x0XHRwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIDB4ZGQsIEJJVCg4KSk7XG4mIzQzO1x0XHRyZWdfZGFjMSA9IE1US19QSFlfUkdfREFTTl9EQUNfSU4wX0I7XG4mIzQzO1x0XHRyZWdfZGFjMiA9IE1US19QSFlfUkdfREFTTl9EQUNfSU4xX0I7XG4mIzQzO1x0XHRyZWcgPSBNVEtfUEhZX1RYX0kyTVBCX1RFU1RfTU9ERV9CMTtcbiYjNDM7XHRcdG1hc2tfZ2JlID0gTVRLX1BIWV9EQV9UWF9JMk1QQl9CX0dCRV9NQVNLO1xuJiM0MztcdFx0bWFza190YnQgPSBNVEtfUEhZX0RBX1RYX0kyTVBCX0JfVEJUX01BU0s7XG4mIzQzO1x0XHRyZWdfMTAwID0gTVRLX1BIWV9UWF9JMk1QQl9URVNUX01PREVfQjI7XG4mIzQzO1x0XHRtYXNrX2hidCA9IE1US19QSFlfREFfVFhfSTJNUEJfQl9IQlRfTUFTSztcbiYjNDM7XHRcdG1hc2tfdHN0ID0gTVRLX1BIWV9EQV9UWF9JMk1QQl9CX1RTVF9NQVNLO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0Y2FzZSBQQUlSX0M6XG4mIzQzO1x0XHRwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIDB4ZGQsIEJJVCg0KSk7XG4mIzQzO1x0XHRyZWdfZGFjMSA9IE1US19QSFlfUkdfREFTTl9EQUNfSU4wX0M7XG4mIzQzO1x0XHRyZWdfZGFjMiA9IE1US19QSFlfUkdfREFTTl9EQUNfSU4xX0M7XG4mIzQzO1x0XHRyZWcgPSBNVEtfUEhZX1RYX0kyTVBCX1RFU1RfTU9ERV9DMTtcbiYjNDM7XHRcdG1hc2tfZ2JlID0gTVRLX1BIWV9EQV9UWF9JMk1QQl9DX0dCRV9NQVNLO1xuJiM0MztcdFx0bWFza190YnQgPSBNVEtfUEhZX0RBX1RYX0kyTVBCX0NfVEJUX01BU0s7XG4mIzQzO1x0XHRyZWdfMTAwID0gTVRLX1BIWV9UWF9JMk1QQl9URVNUX01PREVfQzI7XG4mIzQzO1x0XHRtYXNrX2hidCA9IE1US19QSFlfREFfVFhfSTJNUEJfQ19IQlRfTUFTSztcbiYjNDM7XHRcdG1hc2tfdHN0ID0gTVRLX1BIWV9EQV9UWF9JMk1QQl9DX1RTVF9NQVNLO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0Y2FzZSBQQUlSX0Q6XG4mIzQzO1x0XHRwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIDB4ZGQsIEJJVCgwKSk7XG4mIzQzO1x0XHRyZWdfZGFjMSA9IE1US19QSFlfUkdfREFTTl9EQUNfSU4wX0Q7XG4mIzQzO1x0XHRyZWdfZGFjMiA9IE1US19QSFlfUkdfREFTTl9EQUNfSU4xX0Q7XG4mIzQzO1x0XHRyZWcgPSBNVEtfUEhZX1RYX0kyTVBCX1RFU1RfTU9ERV9EMTtcbiYjNDM7XHRcdG1hc2tfZ2JlID0gTVRLX1BIWV9EQV9UWF9JMk1QQl9EX0dCRV9NQVNLO1xuJiM0MztcdFx0bWFza190YnQgPSBNVEtfUEhZX0RBX1RYX0kyTVBCX0RfVEJUX01BU0s7XG4mIzQzO1x0XHRyZWdfMTAwID0gTVRLX1BIWV9UWF9JMk1QQl9URVNUX01PREVfRDI7XG4mIzQzO1x0XHRtYXNrX2hidCA9IE1US19QSFlfREFfVFhfSTJNUEJfRF9IQlRfTUFTSztcbiYjNDM7XHRcdG1hc2tfdHN0ID0gTVRLX1BIWV9EQV9UWF9JMk1QQl9EX1RTVF9NQVNLO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0ZGVmYXVsdDpcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCByZWdfZGFjMSxcbiYjNDM7XHRcdCAgICAgIDB4ODAwMCB8IDB4ZjApO1xuJiM0MztcdHBoeV93cml0ZV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSwgcmVnX2RhYzIsXG4mIzQzO1x0XHQgICAgICAweDgwMDAgfCAweGYwKTtcbiYjNDM7XG4mIzQzO1x0cGh5ZGV2X2RiZyhwaHlkZXYsIFwmIzM0O1N0YXJ0IFRYIEFtcCBTVyBjYWwuXFxuXCYjMzQ7KTtcbiYjNDM7XHRmaXJzdF9jYWxpYiA9IGFpcm9oYV9jYWxfY3ljbGUocGh5ZGV2LCBNRElPX01NRF9WRU5EMSwgcmVnLFxuJiM0MztcdFx0XHRcdCAgICAgICBtYXNrX2diZSwgemNhbF9jdHJsIFx1MDAzY1x1MDAzYyBfX2ZmcyhtYXNrX2diZSkpO1xuJiM0MztcbiYjNDM7XHQvKiBJZiBUWCBBbXAgY2FsaWJyYXRpb24gZmFpbGVkOlxuJiM0MztcdCAqIC0gaW5jcmVhc2UgZEIgdW50aWwgY2FsaWJyYXRpb24gc3VjY2VlZC5cbiYjNDM7XHQgKiBJZiBUWCBBbXAgY2FsaWJyYXRpb24gc3VjY2VlZGVkOlxuJiM0MztcdCAqIC0gZGVjcmVhc2UgZEIgdW50aWwgY2FsaWJyYXRpb24gZmFpbCB0byBmaW5lIHR1bmUgaXQuXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKGZpcnN0X2NhbGliID09IDEpXG4mIzQzO1x0XHRjYWxpYnJhdGlvbl9wb2xhcml0eSA9IC0xO1xuJiM0MztcdGVsc2VcbiYjNDM7XHRcdGNhbGlicmF0aW9uX3BvbGFyaXR5ID0gMTtcbiYjNDM7XG4mIzQzO1x0d2hpbGUgKHpjYWxfY3RybCBcdTAwM2UgMCBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAgICAgemNhbF9jdHJsIFx1MDAzYyBGSUVMRF9NQVgoTVRLX1BIWV9SR19SRVhUX1pDQUxfQ1RSTF9NQVNLKSkge1xuJiM0MztcdFx0emNhbF9jdHJsICYjNDM7PSBjYWxpYnJhdGlvbl9wb2xhcml0eTtcbiYjNDM7XG4mIzQzO1x0XHRyZXQgPSBhaXJvaGFfY2FsX2N5Y2xlKHBoeWRldiwgTURJT19NTURfVkVORDEsIHJlZyxcbiYjNDM7XHRcdFx0XHQgICAgICAgbWFza19nYmUsIHpjYWxfY3RybCBcdTAwM2NcdTAwM2MgX19mZnMobWFza19nYmUpKTtcbiYjNDM7XHRcdC8qIEV4aXQgaWYgd2UgZWl0aGVyIGZhaWxlZCBvciBzdWNjZWVkZWQgY29tcGFyZWQgdG8gdGhlXG4mIzQzO1x0XHQgKiBmaXJzdCBjYWxpYnJhdGlvbiByZXN1bHQuIChha2Egd2UgZmluaXNoZWQgZmluZSB0dW5pbmcgb3JcbiYjNDM7XHRcdCAqIHdlIHN1Y2NlZWRlZCB3aXRoIGNhbGlicmF0aW9uKVxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRpZiAocmV0ICE9IGZpcnN0X2NhbGliKVxuJiM0MztcdFx0XHRicmVhaztcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApIHtcbiYjNDM7XHRcdHBoeWRldl9lcnIocGh5ZGV2LCBcJiMzNDtUWCBBTVAgY2FsaWJyYXRpb24gZmFpbGVkLlxcblwmIzM0Oyk7XG4mIzQzO1x0XHRwaHlfbW9kaWZ5X21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCByZWcsXG4mIzQzO1x0XHRcdCAgICAgICBtYXNrX2diZSB8IG1hc2tfdGJ0LFxuJiM0MztcdFx0XHQgICAgICAgKHpjYWxfY3RybCBcdTAwM2NcdTAwM2MgX19mZnMobWFza19nYmUpKSB8XG4mIzQzO1x0XHRcdCAgICAgICAoemNhbF9jdHJsIFx1MDAzY1x1MDAzYyBfX2ZmcyhtYXNrX3RidCkpKTtcbiYjNDM7XG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmICh6Y2FsX2N0cmwgPT0gMCB8fFxuJiM0MztcdCAgICB6Y2FsX2N0cmwgPT0gRklFTERfTUFYKE1US19QSFlfUkdfUkVYVF9aQ0FMX0NUUkxfTUFTSykpXG4mIzQzO1x0XHRwaHlkZXZfd2FybihwaHlkZXYsIFwmIzM0O1RYIEFNUCBTVyBjYWxpYnJhdGlvbiBzYXR1cmF0aW9uLlxcblwmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdHBoeV9tb2RpZnlfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIHJlZyxcbiYjNDM7XHRcdCAgICAgICBtYXNrX2diZSB8IG1hc2tfdGJ0LFxuJiM0MztcdFx0ICAgICAgICh6Y2FsX2N0cmwgXHUwMDNjXHUwMDNjIF9fZmZzKG1hc2tfZ2JlKSkgfFxuJiM0MztcdFx0ICAgICAgICh6Y2FsX2N0cmwgXHUwMDNjXHUwMDNjIF9fZmZzKG1hc2tfdGJ0KSkpO1xuJiM0MztcbiYjNDM7XHRwaHlfbW9kaWZ5X21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCByZWdfMTAwLFxuJiM0MztcdFx0ICAgICAgIG1hc2tfaGJ0IHwgbWFza190c3QsXG4mIzQzO1x0XHQgICAgICAgKHpjYWxfY3RybCBcdTAwM2NcdTAwM2MgX19mZnMobWFza19oYnQpKSB8XG4mIzQzO1x0XHQgICAgICAgKHpjYWxfY3RybCBcdTAwM2NcdTAwM2MgX19mZnMobWFza190c3QpKSk7XG4mIzQzO1xuJiM0MztcdHBoeV93cml0ZV9tbWQocGh5ZGV2X3AwLCBNRElPX01NRF9WRU5EMiwgMHgxMDAsIDB4MCk7XG4mIzQzO1xuJiM0MztcdHBoeV93cml0ZV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSwgTVRLX1BIWV9SR19EQVNOX0RBQ19JTjBfQSwgMCk7XG4mIzQzO1x0cGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCBNVEtfUEhZX1JHX0RBU05fREFDX0lOMF9CLCAwKTtcbiYjNDM7XHRwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIE1US19QSFlfUkdfREFTTl9EQUNfSU4wX0MsIDApO1xuJiM0MztcdHBoeV93cml0ZV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSwgTVRLX1BIWV9SR19EQVNOX0RBQ19JTjBfRCwgMCk7XG4mIzQzO1x0cGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCBNVEtfUEhZX1JHX0RBU05fREFDX0lOMV9BLCAwKTtcbiYjNDM7XHRwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIE1US19QSFlfUkdfREFTTl9EQUNfSU4xX0IsIDApO1xuJiM0MztcdHBoeV93cml0ZV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSwgTVRLX1BIWV9SR19EQVNOX0RBQ19JTjFfQywgMCk7XG4mIzQzO1x0cGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCBNVEtfUEhZX1JHX0RBU05fREFDX0lOMV9ELCAwKTtcbiYjNDM7XHRwaHlfd3JpdGVfbW1kKHBoeWRldl9wMCwgTURJT19NTURfVkVORDEsIDB4MTQ1LCAweDEwMDApO1xuJiM0MztcbiYjNDM7XHRwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIE1US19QSFlfUkdfQU5BX0NBTF9SRzAsIDApO1xuJiM0MztcdHBoeV93cml0ZV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSwgTVRLX1BIWV9SR19BTkFfQ0FMX1JHMSwgMCk7XG4mIzQzO1x0cGh5X3dyaXRlX21tZChwaHlkZXZfcDAsIE1ESU9fTU1EX1ZFTkQxLCBNVEtfUEhZX1JHX0FOQV9DQUxfUkcwLCAwKTtcbiYjNDM7XHRwaHlfd3JpdGVfbW1kKHBoeWRldl9wMCwgTURJT19NTURfVkVORDEsIE1US19QSFlfUkdfQU5BX0NBTF9SRzEsIDApO1xuJiM0MztcdHBoeV93cml0ZV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSwgMHgzZSwgMHhjMDAwKTtcbiYjNDM7XHRwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIDB4ZGQsIDApO1xuJiM0MztcbiYjNDM7XHQvKiBSZXN0b3JlIEFOIGVuYWJsZSAqL1xuJiM0MztcdHBoeV93cml0ZShwaHlkZXYsIE1JSV9CTUNSLCBCTUNSX0FORU5BQkxFKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgYWlyb2hhX3R4X3I1MF9jYWxfc3coc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgdTggdHhnX2NhbGVuX3gpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgYWlyb2hhX3NvY3BoeV9zaGFyZWQgKnNoYXJlZCA9IHBoeV9wYWNrYWdlX2dldF9wcml2KHBoeWRldik7XG4mIzQzO1x0c3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldl9wMDtcbiYjNDM7XHR1MTYgZGV2MWVfMTQ1X3RtcCwgYm1jcl90bXA7XG4mIzQzO1x0aW50IGNhbGlicmF0aW9uX3BvbGFyaXR5O1xuJiM0MztcdHU4IHpjYWxfY3RybCA9IDMyO1xuJiM0MztcdGludCBmaXJzdF9jYWxpYjtcbiYjNDM7XHR1MTYgcmVnO1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdHBoeWRldl9wMCA9IHNoYXJlZC1cdTAwM2VwaHlkZXZfcDA7XG4mIzQzO1xuJiM0MztcdC8qIEJHIHZvbHRhZ2Ugb3V0cHV0ICovXG4mIzQzO1x0cGh5X3dyaXRlX21tZChwaHlkZXZfcDAsIE1ESU9fTU1EX1ZFTkQyLCAweDEwMCwgMHhjMDAwKTtcbiYjNDM7XG4mIzQzO1x0cGh5X3dyaXRlX21tZChwaHlkZXZfcDAsIE1ESU9fTU1EX1ZFTkQxLCBNVEtfUEhZX1JHX0FOQV9DQUxfUkcwLFxuJiM0MztcdFx0ICAgICAgTVRLX1BIWV9SR19DQUxfQ0tJTlYgfCBNVEtfUEhZX1JHX0FOQV9DQUxFTik7XG4mIzQzO1x0cGh5X3dyaXRlX21tZChwaHlkZXZfcDAsIE1ESU9fTU1EX1ZFTkQxLCBNVEtfUEhZX1JHX0FOQV9DQUxfUkcxLCAwKTtcbiYjNDM7XHQvKiBzZWxlY3QgMVYgKi9cbiYjNDM7XHRwaHlfd3JpdGVfbW1kKHBoeWRldl9wMCwgTURJT19NTURfVkVORDEsIE1US19QSFlfUkdfQU5BX0NBTF9SRzYsIDB4MTApO1xuJiM0MztcbiYjNDM7XHRwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIE1US19QSFlfUkdfQU5BX0NBTF9SRzAsXG4mIzQzO1x0XHQgICAgICBNVEtfUEhZX1JHX0NBTF9DS0lOViB8IE1US19QSFlfUkdfQU5BX0NBTEVOKTtcbiYjNDM7XHRwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIE1US19QSFlfUkdfQU5BX0NBTF9SRzEsIDApO1xuJiM0MztcdC8qIHNlbGVjdCAxViAqL1xuJiM0MztcdHBoeV93cml0ZV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSwgTVRLX1BIWV9SR19BTkFfQ0FMX1JHNiwgMHgxMCk7XG4mIzQzO1xuJiM0MztcdC8qIEZvcmNlIDFHIGZ1bGwgZHVwbGV4IGZvciBjYWxpYnJhdGlvbiAqL1xuJiM0MztcdGJtY3JfdG1wID0gcGh5X3JlYWQocGh5ZGV2LCBNSUlfQk1DUik7XG4mIzQzO1x0cGh5X3dyaXRlKHBoeWRldiwgTUlJX0JNQ1IsIEJNQ1JfRlVMTERQTFggfCBCTUNSX1NQRUVEMTAwMCk7XG4mIzQzO1xuJiM0MztcdC8qIEZvcmNlIE1ESSAqL1xuJiM0MztcdGRldjFlXzE0NV90bXAgPSBwaHlfcmVhZF9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSwgMHgwMTQ1KTtcbiYjNDM7XHRwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIDB4MDE0NSwgMHgxMDEwKTtcbiYjNDM7XG4mIzQzO1x0LyogZGlzYWJsZSB0eCBzbGV3IGNvbnRyb2wgKi9cbiYjNDM7XHRwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIDB4MDE4NSwgMHgwMDAwKTtcbiYjNDM7XHRwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIDB4MDBmYiwgMHgwMTAwKTtcbiYjNDM7XG4mIzQzO1x0c3dpdGNoICh0eGdfY2FsZW5feCkge1xuJiM0MztcdGNhc2UgUEFJUl9BOlxuJiM0MztcdFx0cGh5X3NldF9iaXRzX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLFxuJiM0MztcdFx0XHRcdCBNVEtfUEhZX1JHX0FOQV9DQUxfUkcwLFxuJiM0MztcdFx0XHRcdCBNVEtfUEhZX1JHX1pDQUxFTl9BKTtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdGNhc2UgUEFJUl9COlxuJiM0MztcdFx0cGh5X3NldF9iaXRzX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLFxuJiM0MztcdFx0XHRcdCBNVEtfUEhZX1JHX0FOQV9DQUxfUkcxLFxuJiM0MztcdFx0XHRcdCBNVEtfUEhZX1JHX1pDQUxFTl9CKTtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdGNhc2UgUEFJUl9DOlxuJiM0MztcdFx0cGh5X3NldF9iaXRzX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLFxuJiM0MztcdFx0XHRcdCBNVEtfUEhZX1JHX0FOQV9DQUxfUkcxLFxuJiM0MztcdFx0XHRcdCBNVEtfUEhZX1JHX1pDQUxFTl9DKTtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdGNhc2UgUEFJUl9EOlxuJiM0MztcdFx0cGh5X3NldF9iaXRzX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLFxuJiM0MztcdFx0XHRcdCBNVEtfUEhZX1JHX0FOQV9DQUxfUkcxLFxuJiM0MztcdFx0XHRcdCBNVEtfUEhZX1JHX1pDQUxFTl9EKTtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdGRlZmF1bHQ6XG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHBoeWRldl9kYmcocGh5ZGV2LCBcJiMzNDtTdGFydCBUWCByNTAgU1cgY2FsLlxcblwmIzM0Oyk7XG4mIzQzO1x0Zmlyc3RfY2FsaWIgPSBhaXJvaGFfY2FsX2N5Y2xlKHBoeWRldl9wMCwgTURJT19NTURfVkVORDEsIE1US19QSFlfUkdfQU5BX0NBTF9SRzUsXG4mIzQzO1x0XHRcdFx0ICAgICAgIE1US19QSFlfUkdfUkVYVF9aQ0FMX0NUUkxfTUFTSywgemNhbF9jdHJsKTtcbiYjNDM7XG4mIzQzO1x0aWYgKGZpcnN0X2NhbGliIFx1MDAzYyAwKSB7XG4mIzQzO1x0XHRwaHlkZXZfZXJyKHBoeWRldiwgXCYjMzQ7VFggcjUwIFNXIGNhbGlicmF0aW9uIGZhaWxlZC5cXG5cJiMzNDspO1xuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHQvKiBJZiBUWCByNTAgY2FsaWJyYXRpb24gZmFpbGVkOlxuJiM0MztcdCAqIC0gaW5jcmVhc2UgZEIgdW50aWwgY2FsaWJyYXRpb24gc3VjY2VlZC5cbiYjNDM7XHQgKiBJZiBUWCByNTAgY2FsaWJyYXRpb24gc3VjY2VlZGVkOlxuJiM0MztcdCAqIC0gZGVjcmVhc2UgZEIgdW50aWwgY2FsaWJyYXRpb24gZmFpbCB0byBmaW5lIHR1bmUgaXQuXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKGZpcnN0X2NhbGliID09IDEpXG4mIzQzO1x0XHRjYWxpYnJhdGlvbl9wb2xhcml0eSA9IC0xO1xuJiM0MztcdGVsc2VcbiYjNDM7XHRcdGNhbGlicmF0aW9uX3BvbGFyaXR5ID0gMTtcbiYjNDM7XG4mIzQzO1x0d2hpbGUgKHpjYWxfY3RybCBcdTAwM2UgMCBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAgICAgemNhbF9jdHJsIFx1MDAzYyBGSUVMRF9NQVgoTVRLX1BIWV9SR19SRVhUX1pDQUxfQ1RSTF9NQVNLKSkge1xuJiM0MztcdFx0emNhbF9jdHJsICYjNDM7PSBjYWxpYnJhdGlvbl9wb2xhcml0eTtcbiYjNDM7XG4mIzQzO1x0XHRyZXQgPSBhaXJvaGFfY2FsX2N5Y2xlKHBoeWRldl9wMCwgTURJT19NTURfVkVORDEsIE1US19QSFlfUkdfQU5BX0NBTF9SRzUsXG4mIzQzO1x0XHRcdFx0ICAgICAgIE1US19QSFlfUkdfUkVYVF9aQ0FMX0NUUkxfTUFTSywgemNhbF9jdHJsKTtcbiYjNDM7XHRcdC8qIEV4aXQgaWYgd2UgZWl0aGVyIGZhaWxlZCBvciBzdWNjZWVkZWQgY29tcGFyZWQgdG8gdGhlXG4mIzQzO1x0XHQgKiBmaXJzdCBjYWxpYnJhdGlvbiByZXN1bHQuIChha2Egd2UgZmluaXNoZWQgZmluZSB0dW5pbmcgb3JcbiYjNDM7XHRcdCAqIHdlIHN1Y2NlZWRlZCB3aXRoIGNhbGlicmF0aW9uKVxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRpZiAocmV0ICE9IGZpcnN0X2NhbGliKVxuJiM0MztcdFx0XHRicmVhaztcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApIHtcbiYjNDM7XHRcdHBoeWRldl9lcnIocGh5ZGV2LCBcJiMzNDtUWCByNTAgU1cgY2FsaWJyYXRpb24gZmFpbGVkLlxcblwmIzM0Oyk7XG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmICh6Y2FsX2N0cmwgPT0gMCB8fFxuJiM0MztcdCAgICB6Y2FsX2N0cmwgPT0gRklFTERfTUFYKE1US19QSFlfUkdfUkVYVF9aQ0FMX0NUUkxfTUFTSykpXG4mIzQzO1x0XHRwaHlkZXZfd2FybihwaHlkZXYsIFwmIzM0O1RYIHI1MCBTVyBjYWxpYnJhdGlvbiBzYXR1cmF0aW9uLlxcblwmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdHpjYWxfY3RybCA9IHNoYXJlZC1cdTAwM2VyNTBfY2FsX3RibFt6Y2FsX2N0cmxdO1xuJiM0MztcbiYjNDM7XHRzd2l0Y2ggKHR4Z19jYWxlbl94KSB7XG4mIzQzO1x0Y2FzZSBQQUlSX0E6XG4mIzQzO1x0XHRyZWcgPSBCSVQoNykgfCBGSUVMRF9QUkVQKE1US19QSFlfQ1JfVFhfUjUwX09GRlNFVF9BX01BU0ssIHpjYWxfY3RybCk7XG4mIzQzO1x0XHRwaHlfbW9kaWZ5X21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLFxuJiM0MztcdFx0XHQgICAgICAgTVRLX1BIWV9SR19DUl9UWF9SNTBfT0ZGU0VUX0FfQixcbiYjNDM7XHRcdFx0ICAgICAgIEJJVCg3KSB8IE1US19QSFlfQ1JfVFhfUjUwX09GRlNFVF9BX01BU0ssIHJlZyk7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHRjYXNlIFBBSVJfQjpcbiYjNDM7XHRcdHJlZyA9IEJJVCg3KSB8IEZJRUxEX1BSRVAoTVRLX1BIWV9DUl9UWF9SNTBfT0ZGU0VUX0JfTUFTSywgemNhbF9jdHJsKTtcbiYjNDM7XHRcdHBoeV9tb2RpZnlfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsXG4mIzQzO1x0XHRcdCAgICAgICBNVEtfUEhZX1JHX0NSX1RYX1I1MF9PRkZTRVRfQV9CLFxuJiM0MztcdFx0XHQgICAgICAgQklUKDcpIHwgTVRLX1BIWV9DUl9UWF9SNTBfT0ZGU0VUX0JfTUFTSywgcmVnKTtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdGNhc2UgUEFJUl9DOlxuJiM0MztcdFx0cmVnID0gQklUKDcpIHwgRklFTERfUFJFUChNVEtfUEhZX0NSX1RYX1I1MF9PRkZTRVRfQ19NQVNLLCB6Y2FsX2N0cmwpO1xuJiM0MztcdFx0cGh5X21vZGlmeV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSxcbiYjNDM7XHRcdFx0ICAgICAgIE1US19QSFlfUkdfQ1JfVFhfUjUwX09GRlNFVF9DX0QsXG4mIzQzO1x0XHRcdCAgICAgICBCSVQoNykgfCBNVEtfUEhZX0NSX1RYX1I1MF9PRkZTRVRfQ19NQVNLLCByZWcpO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0Y2FzZSBQQUlSX0Q6XG4mIzQzO1x0XHRyZWcgPSBCSVQoNykgfCBGSUVMRF9QUkVQKE1US19QSFlfQ1JfVFhfUjUwX09GRlNFVF9EX01BU0ssIHpjYWxfY3RybCk7XG4mIzQzO1x0XHRwaHlfbW9kaWZ5X21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLFxuJiM0MztcdFx0XHQgICAgICAgTVRLX1BIWV9SR19DUl9UWF9SNTBfT0ZGU0VUX0NfRCxcbiYjNDM7XHRcdFx0ICAgICAgIEJJVCg3KSB8IE1US19QSFlfQ1JfVFhfUjUwX09GRlNFVF9EX01BU0ssIHJlZyk7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHRkZWZhdWx0OlxuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIE1US19QSFlfUkdfQU5BX0NBTF9SRzAsIDApO1xuJiM0MztcdHBoeV93cml0ZV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSwgTVRLX1BIWV9SR19BTkFfQ0FMX1JHMSwgMCk7XG4mIzQzO1x0cGh5X3dyaXRlX21tZChwaHlkZXZfcDAsIE1ESU9fTU1EX1ZFTkQxLCBNVEtfUEhZX1JHX0FOQV9DQUxfUkcwLCAwKTtcbiYjNDM7XHRwaHlfd3JpdGVfbW1kKHBoeWRldl9wMCwgTURJT19NTURfVkVORDEsIE1US19QSFlfUkdfQU5BX0NBTF9SRzEsIDApO1xuJiM0MztcbiYjNDM7XHQvKiBFbmFibGUgdHggc2xldyBjb250cm9sICovXG4mIzQzO1x0cGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCAweDAxODUsIDB4MDAwMSk7XG4mIzQzO1x0cGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCAweDAwZmIsIDB4MDAwMCk7XG4mIzQzO1xuJiM0MztcdHBoeV93cml0ZV9tbWQocGh5ZGV2X3AwLCBNRElPX01NRF9WRU5EMiwgMHgxMDAsIDB4MCk7XG4mIzQzO1xuJiM0MztcdHBoeV93cml0ZV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSwgTVRLX1BIWV9SR19BTkFfQ0FMX1JHNiwgMHgwKTtcbiYjNDM7XHRwaHlfd3JpdGVfbW1kKHBoeWRldl9wMCwgTURJT19NTURfVkVORDEsIE1US19QSFlfUkdfQU5BX0NBTF9SRzYsIDB4MCk7XG4mIzQzO1xuJiM0MztcdC8qIFJlc3RvcmUgQk1DUiAqL1xuJiM0MztcdHBoeV93cml0ZShwaHlkZXYsIE1JSV9CTUNSLCBibWNyX3RtcCk7XG4mIzQzO1xuJiM0MztcdC8qIFJlc3RvcmUgTURJICovXG4mIzQzO1x0cGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCAweDAxNDUsIGRldjFlXzE0NV90bXApO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBhaXJvaGFfcnhfb2Zmc2V0X2NhbF9zdyhzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuJiM0Mzt7XG4mIzQzO1x0LyogSHcgYnlwYXNzLCBGdyBjYWwgKi9cbiYjNDM7XHRwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIDB4OTYsIDB4ODAwMCk7XG4mIzQzO1x0LyogdHgvcnhfY2FsX2NyaXRlcmlhX3ZhbHVlICovXG4mIzQzO1x0cGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCAweDM3LCAweDAwMzMpO1xuJiM0MztcbiYjNDM7XHQvKiByeCBvZmZzZXQgY2FsIGJ5IEh3IHNldHVwICovXG4mIzQzO1x0cGh5X2NsZWFyX2JpdHNfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIDB4MzksXG4mIzQzO1x0XHRcdCAgIEJJVCgxNCkgfCBCSVQoMTEpKTtcbiYjNDM7XG4mIzQzO1x0LyogZGlzYWJsZSBydHVuZSBjYWxpYnJhdGlvbiAqL1xuJiM0MztcdHBoeV9jbGVhcl9iaXRzX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQyLCAweDEwNyxcbiYjNDM7XHRcdFx0ICAgQklUKDEyKSk7XG4mIzQzO1xuJiM0MztcdC8qIGJ5cGFzcyB0eC9yeCBkYyBvZmZzZXQgY2FuY2VsbGF0aW9uIHByb2Nlc3MgKi9cbiYjNDM7XHRwaHlfc2V0X2JpdHNfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIDB4MTcxLFxuJiM0MztcdFx0XHQgQklUKDgpIHwgQklUKDcpKTtcbiYjNDM7XG4mIzQzO1x0Lyogcnggb2Zmc2V0IGNhbGlicmF0aW9uIHN0YXJ0ICovXG4mIzQzO1x0cGh5X3NldF9iaXRzX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCAweDM5LFxuJiM0MztcdFx0XHQgQklUKDEzKSk7XG4mIzQzO1xuJiM0MztcdC8qIHJ4IG9mZnNldCBjYWxpYnJhdGlvbiBzdG9wICovXG4mIzQzO1x0cGh5X2NsZWFyX2JpdHNfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIDB4MzksXG4mIzQzO1x0XHRcdCAgIEJJVCgxMykpO1xuJiM0MztcbiYjNDM7XHRtZGVsYXkoMTApO1xuJiM0MztcbiYjNDM7XHRwaHlfY2xlYXJfYml0c19tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSwgMHgxNzEsXG4mIzQzO1x0XHRcdCAgIEJJVCg4KSB8IEJJVCg3KSk7XG4mIzQzO1xuJiM0MztcdGlmIChwaHlkZXYtXHUwMDNlZHJ2LVx1MDAzZXBoeV9pZCA9PSBBSVJPSEFfR1BIWV9JRF9BTjc1ODEpXG4mIzQzO1x0XHRwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsXG4mIzQzO1x0XHRcdCAgICAgIE1US19QSFlfUkdfQU5BX0NBTF9SRzYsIDB4MSk7XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IGFpcm9oYV9jYWxfc3coc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgZW51bSBDQUxfSVRFTSBjYWxfaXRlbSxcbiYjNDM7XHRcdFx0IHU4IHN0YXJ0X3BhaXIsIHU4IGVuZF9wYWlyKVxuJiM0Mzt7XG4mIzQzO1x0dTggcGFpcl9uO1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdGZvciAocGFpcl9uID0gc3RhcnRfcGFpcjsgcGFpcl9uIFx1MDAzYz0gZW5kX3BhaXI7IHBhaXJfbiYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdHN3aXRjaCAoY2FsX2l0ZW0pIHtcbiYjNDM7XHRcdGNhc2UgUkVYVDpcbiYjNDM7XHRcdFx0cmV0ID0gYWlyb2hhX3JleHRfY2FsX3N3KHBoeWRldik7XG4mIzQzO1x0XHRcdGJyZWFrO1xuJiM0MztcdFx0Y2FzZSBUWF9PRkZTRVQ6XG4mIzQzO1x0XHRcdHJldCA9IGFpcm9oYV90eF9vZmZzZXRfY2FsX3N3KHBoeWRldiwgcGFpcl9uKTtcbiYjNDM7XHRcdFx0YnJlYWs7XG4mIzQzO1x0XHRjYXNlIFRYX0FNUDpcbiYjNDM7XHRcdFx0cmV0ID0gYWlyb2hhX3R4X2FtcF9jYWxfc3cocGh5ZGV2LCBwYWlyX24pO1xuJiM0MztcdFx0XHRicmVhaztcbiYjNDM7XHRcdGNhc2UgVFhfUjUwOlxuJiM0MztcdFx0XHRyZXQgPSBhaXJvaGFfdHhfcjUwX2NhbF9zdyhwaHlkZXYsIHBhaXJfbik7XG4mIzQzO1x0XHRcdGJyZWFrO1xuJiM0MztcdFx0Y2FzZSBSWF9PRkZTRVQ6XG4mIzQzO1x0XHRcdHJldCA9IGFpcm9oYV9yeF9vZmZzZXRfY2FsX3N3KHBoeWRldik7XG4mIzQzO1x0XHRcdGJyZWFrO1xuJiM0MztcdFx0ZGVmYXVsdDpcbiYjNDM7XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1x0XHR9XG4mIzQzO1x0XHRpZiAocmV0KVxuJiM0MztcdFx0XHRyZXR1cm4gcmV0O1xuJiM0MztcdH1cbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBhaXJvaGFfc3RhcnRfY2FsKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIGVudW0gQ0FMX0lURU0gY2FsX2l0ZW0sXG4mIzQzO1x0XHRcdCAgICBlbnVtIENBTF9NT0RFIGNhbF9tb2RlLCB1OCBzdGFydF9wYWlyLFxuJiM0MztcdFx0XHQgICAgdTggZW5kX3BhaXIsIHUzMiAqYnVmKVxuJiM0Mzt7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0c3dpdGNoIChjYWxfbW9kZSkge1xuJiM0MztcdGNhc2UgU1dfTTpcbiYjNDM7XHRcdHJldCA9IGFpcm9oYV9jYWxfc3cocGh5ZGV2LCBjYWxfaXRlbSwgc3RhcnRfcGFpciwgZW5kX3BhaXIpO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0ZGVmYXVsdDpcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKHJldCkge1xuJiM0MztcdFx0cGh5ZGV2X2VycihwaHlkZXYsIFwmIzM0O2NhbCAlZCBmYWlsZWRcXG5cJiMzNDssIGNhbF9pdGVtKTtcbiYjNDM7XHRcdHJldHVybiAtRUlPO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgYWlyb2hhX3BoeV9jYWxpYihzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGFpcm9oYV9zb2NwaHlfc2hhcmVkICpzaGFyZWQgPSBwaHlfcGFja2FnZV9nZXRfcHJpdihwaHlkZXYpO1xuJiM0MztcdHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXZfcDA7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0cGh5ZGV2X3AwID0gc2hhcmVkLVx1MDAzZXBoeWRldl9wMDtcbiYjNDM7XG4mIzQzO1x0LyogUHJlQ2FsaWJyYXRlIFNldCAqL1xuJiM0MztcdHBoeV93cml0ZV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSwgMHg1YywgMHg2NjY2KTtcbiYjNDM7XG4mIzQzO1x0aWYgKCFzaGFyZWQtXHUwMDNlcmV4dF9zd19jYWxpYl9kb25lKSB7XG4mIzQzO1x0XHRyZXQgPSBhaXJvaGFfc3RhcnRfY2FsKHBoeWRldiwgUkVYVCwgU1dfTSwgTk9fUEFJUiwgTk9fUEFJUiwgTlVMTCk7XG4mIzQzO1x0XHRpZiAocmV0KVxuJiM0MztcdFx0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRcdHNoYXJlZC1cdTAwM2VyZXh0X3N3X2NhbGliX2RvbmUgPSB0cnVlO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0ID0gYWlyb2hhX3N0YXJ0X2NhbChwaHlkZXYsIFRYX1I1MCwgU1dfTSwgUEFJUl9BLCBQQUlSX0QsIE5VTEwpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRyZXQgPSBhaXJvaGFfc3RhcnRfY2FsKHBoeWRldiwgVFhfT0ZGU0VULCBTV19NLCBQQUlSX0EsIFBBSVJfRCwgTlVMTCk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdHJldCA9IGFpcm9oYV9zdGFydF9jYWwocGh5ZGV2LCBUWF9BTVAsIFNXX00sIFBBSVJfQSwgUEFJUl9ELCBOVUxMKTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gYWlyb2hhX3N0YXJ0X2NhbChwaHlkZXYsIFJYX09GRlNFVCwgU1dfTSwgTk9fUEFJUiwgTk9fUEFJUiwgTlVMTCk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdC8qIEdhdGluZywgc2hvcnQgd2l0aCBvdGhlciBwYWlyICovXG4mIzQzO1x0cGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCAweDE1LCAweDApO1xuJiM0MztcbiYjNDM7XHRwaHlfd3JpdGVfbW1kKHBoeWRldl9wMCwgTURJT19NTURfVkVORDIsIDB4MTAwLCAweDApO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBhaXJvaGFfcGh5X2F1dG9fc2VsZWN0X3RyYW5zZm9ybWVyKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgYWlyb2hhX3NvY3BoeV9zaGFyZWQgKnNoYXJlZCA9IHBoeV9wYWNrYWdlX2dldF9wcml2KHBoeWRldik7XG4mIzQzO1x0c3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldl9wMDtcbiYjNDM7XHR1OCBwaHlfb2Zmc2V0O1xuJiM0MztcdHUxNiBibWNyX3RtcDtcbiYjNDM7XHR1MTYgdmFsO1xuJiM0MztcdGludCBpO1xuJiM0MztcbiYjNDM7XHRwaHlkZXZfcDAgPSBzaGFyZWQtXHUwMDNlcGh5ZGV2X3AwO1xuJiM0MztcdHBoeV9vZmZzZXQgPSBwaHlkZXYtXHUwMDNlbWRpby5hZGRyIC0gcGh5ZGV2X3AwLVx1MDAzZW1kaW8uYWRkcjtcbiYjNDM7XG4mIzQzO1x0LyogRm9yY2UgMUcgZnVsbCBkdXBsZXggZm9yIGNhbGlicmF0aW9uICovXG4mIzQzO1x0Ym1jcl90bXAgPSBwaHlfcmVhZChwaHlkZXYsIE1JSV9CTUNSKTtcbiYjNDM7XHRwaHlfd3JpdGUocGh5ZGV2LCBNSUlfQk1DUiwgQk1DUl9GVUxMRFBMWCB8IEJNQ1JfU1BFRUQxMDAwKTtcbiYjNDM7XG4mIzQzO1x0cGh5X21vZGlmeV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMiwgMHgyNzEsIEdFTk1BU0soNCwgMCksXG4mIzQzO1x0XHQgICAgICAgRklFTERfUFJFUChHRU5NQVNLKDQsIDApLCAweDMpKTtcbiYjNDM7XG4mIzQzO1x0cGh5X21vZGlmeV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMiwgMHgyNjksIEdFTk1BU0soMTUsIDEyKSxcbiYjNDM7XHRcdCAgICAgICBGSUVMRF9QUkVQKEdFTk1BU0soMTUsIDEyKSwgMHgyKSk7XG4mIzQzO1xuJiM0MztcdHBoeV9tb2RpZnlfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDIsIDB4MjZmLCBHRU5NQVNLKDE0LCAxMiksXG4mIzQzO1x0XHQgICAgICAgRklFTERfUFJFUChHRU5NQVNLKDE0LCAxMiksIDB4MCkpO1xuJiM0MztcbiYjNDM7XHRwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIDB4ZGQsIEJJVCgxMikpO1xuJiM0MztcbiYjNDM7XHRwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIE1US19QSFlfUkdfREFTTl9EQUNfSU4wX0EsXG4mIzQzO1x0XHQgICAgICAweDgwMDAgfCAweGYwKTtcbiYjNDM7XHRwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIE1US19QSFlfUkdfREFTTl9EQUNfSU4xX0EsXG4mIzQzO1x0XHQgICAgICAweDgwMDAgfCAweGYwKTtcbiYjNDM7XHRwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIE1US19QSFlfUkdfREFTTl9EQUNfSU4wX0IsXG4mIzQzO1x0XHQgICAgICAweDgwMDAgfCAweGYwKTtcbiYjNDM7XHRwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIE1US19QSFlfUkdfREFTTl9EQUNfSU4xX0IsXG4mIzQzO1x0XHQgICAgICAweDgwMDAgfCAweGYwKTtcbiYjNDM7XHRwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIE1US19QSFlfUkdfREFTTl9EQUNfSU4wX0MsXG4mIzQzO1x0XHQgICAgICAweDgwMDAgfCAweGYwKTtcbiYjNDM7XHRwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIE1US19QSFlfUkdfREFTTl9EQUNfSU4xX0MsXG4mIzQzO1x0XHQgICAgICAweDgwMDAgfCAweGYwKTtcbiYjNDM7XHRwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIE1US19QSFlfUkdfREFTTl9EQUNfSU4wX0QsXG4mIzQzO1x0XHQgICAgICAweDgwMDAgfCAweGYwKTtcbiYjNDM7XHRwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIE1US19QSFlfUkdfREFTTl9EQUNfSU4xX0QsXG4mIzQzO1x0XHQgICAgICAweDgwMDAgfCAweGYwKTtcbiYjNDM7XG4mIzQzO1x0LyogRm9yY2UgcEdBIGdhaW4gKi9cbiYjNDM7XHRwaHlfc2VsZWN0X3BhZ2UocGh5ZGV2LCBNVEtfUEhZX1BBR0VfRVhURU5ERURfNTJCNSk7XG4mIzQzO1x0X19tdGtfdHJfbW9kaWZ5KHBoeWRldiwgMHgxLCAweGYsIDB4MTAsXG4mIzQzO1x0XHRcdEdFTk1BU0soMjAsIDE1KSxcbiYjNDM7XHRcdFx0RklFTERfUFJFUChHRU5NQVNLKDIwLCAxNSksIDB4MWYpKTtcbiYjNDM7XG4mIzQzO1x0X19tdGtfdHJfbW9kaWZ5KHBoeWRldiwgMHgxLCAweGYsIDB4MTEsXG4mIzQzO1x0XHRcdEdFTk1BU0soMjMsIDE4KSB8IEdFTk1BU0soMTUsIDEwKSB8IEdFTk1BU0soNywgMiksXG4mIzQzO1x0XHRcdEZJRUxEX1BSRVAoR0VOTUFTSygyMywgMTgpLCAweDFmKSB8XG4mIzQzO1x0XHRcdEZJRUxEX1BSRVAoR0VOTUFTSygxNSwgMTApLCAweDFmKSB8XG4mIzQzO1x0XHRcdEZJRUxEX1BSRVAoR0VOTUFTSyg3LCAyKSwgMHgxZikpO1xuJiM0MztcdHBoeV9yZXN0b3JlX3BhZ2UocGh5ZGV2LCBNVEtfUEhZX1BBR0VfU1RBTkRBUkQsIDApO1xuJiM0MztcbiYjNDM7XHRwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIDB4YzksIDB4ZmZmZik7XG4mIzQzO1x0cGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCAweDE1MSwgMHgxMik7XG4mIzQzO1xuJiM0MztcdHN3aXRjaCAocGh5X29mZnNldCkge1xuJiM0MztcdGNhc2UgMDpcbiYjNDM7XHRcdHZhbCA9IDB4MTtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdGNhc2UgMTpcbiYjNDM7XHRcdHZhbCA9IDB4MztcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdGNhc2UgMjpcbiYjNDM7XHRcdHZhbCA9IDB4NTtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdGNhc2UgMzpcbiYjNDM7XHRcdHZhbCA9IDB4NztcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdGRlZmF1bHQ6XG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XHR9XG4mIzQzO1x0cGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQyLCAweDE1LFxuJiM0MztcdFx0ICAgICAgRklFTERfUFJFUChHRU5NQVNLKDE0LCAxMiksIHZhbCkgfCAweDE2MSk7XG4mIzQzO1x0bWRlbGF5KDUwMCk7XG4mIzQzO1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIDM7IGkmIzQzOyYjNDM7KVxuJiM0MztcdFx0dmFsID0gcGh5X3JlYWRfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDIsIDB4MWEpO1xuJiM0MztcbiYjNDM7XHQvKiBDaGVjayB0aGUgdmFsdWUgYW5kIHJlcG9ydCB0cmFuc2Zvcm1lciB0eXBlIGZvciBsYXRlciAqL1xuJiM0MztcdHNoYXJlZC1cdTAwM2V0cmFuc2Zvcm1lcl90eXBlW3BoeV9vZmZzZXRdID0gdmFsIFx1MDAzYyAweGUwO1xuJiM0MztcbiYjNDM7XHQvKiBTd2l0Y2ggdG8gRGVmYXVsdCAqL1xuJiM0MztcdHBoeV93cml0ZV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMiwgMHgxNSwgMHgxMDAwKTtcbiYjNDM7XG4mIzQzO1x0cGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCAweGRkLCAweDApO1xuJiM0MztcbiYjNDM7XHRwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIE1US19QSFlfUkdfREFTTl9EQUNfSU4wX0EsXG4mIzQzO1x0XHQgICAgICAweDApO1xuJiM0MztcdHBoeV93cml0ZV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSwgTVRLX1BIWV9SR19EQVNOX0RBQ19JTjFfQSxcbiYjNDM7XHRcdCAgICAgIDB4MCk7XG4mIzQzO1x0cGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCBNVEtfUEhZX1JHX0RBU05fREFDX0lOMF9CLFxuJiM0MztcdFx0ICAgICAgMHgwKTtcbiYjNDM7XHRwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIE1US19QSFlfUkdfREFTTl9EQUNfSU4xX0IsXG4mIzQzO1x0XHQgICAgICAweDApO1xuJiM0MztcdHBoeV93cml0ZV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSwgTVRLX1BIWV9SR19EQVNOX0RBQ19JTjBfQyxcbiYjNDM7XHRcdCAgICAgIDB4MCk7XG4mIzQzO1x0cGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCBNVEtfUEhZX1JHX0RBU05fREFDX0lOMV9DLFxuJiM0MztcdFx0ICAgICAgMHgwKTtcbiYjNDM7XHRwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIE1US19QSFlfUkdfREFTTl9EQUNfSU4wX0QsXG4mIzQzO1x0XHQgICAgICAweDApO1xuJiM0MztcdHBoeV93cml0ZV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSwgTVRLX1BIWV9SR19EQVNOX0RBQ19JTjFfRCxcbiYjNDM7XHRcdCAgICAgIDB4MCk7XG4mIzQzO1xuJiM0MztcdHBoeV93cml0ZV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSwgMHhjOSwgMHhmZmYpO1xuJiM0MztcdHBoeV93cml0ZV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSwgMHgxNTEsIDB4MCk7XG4mIzQzO1xuJiM0MztcdHBoeV9zZWxlY3RfcGFnZShwaHlkZXYsIE1US19QSFlfUEFHRV9FWFRFTkRFRF81MkI1KTtcbiYjNDM7XHRfX210a190cl9tb2RpZnkocGh5ZGV2LCAweDEsIDB4ZiwgMHgxMCxcbiYjNDM7XHRcdFx0R0VOTUFTSygyMCwgMTUpLFxuJiM0MztcdFx0XHRGSUVMRF9QUkVQKEdFTk1BU0soMjAsIDE1KSwgMHg0KSk7XG4mIzQzO1xuJiM0MztcdF9fbXRrX3RyX21vZGlmeShwaHlkZXYsIDB4MSwgMHhmLCAweDExLFxuJiM0MztcdFx0XHRHRU5NQVNLKDIzLCAxOCkgfCBHRU5NQVNLKDE1LCAxMCkgfCBHRU5NQVNLKDcsIDIpLFxuJiM0MztcdFx0XHRGSUVMRF9QUkVQKEdFTk1BU0soMjMsIDE4KSwgMHgwKSB8XG4mIzQzO1x0XHRcdEZJRUxEX1BSRVAoR0VOTUFTSygxNSwgMTApLCAweDApIHxcbiYjNDM7XHRcdFx0RklFTERfUFJFUChHRU5NQVNLKDcsIDIpLCAweDApKTtcbiYjNDM7XHRwaHlfcmVzdG9yZV9wYWdlKHBoeWRldiwgTVRLX1BIWV9QQUdFX1NUQU5EQVJELCAwKTtcbiYjNDM7XG4mIzQzO1x0LyogUmVzdG9yZSBCTUNSICovXG4mIzQzO1x0cGh5X3dyaXRlKHBoeWRldiwgTUlJX0JNQ1IsIGJtY3JfdG1wKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgYWlyb2hhX3BoeV90eF9hbXBfY29tcGVuc2F0aW9uKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgYWlyb2hhX3NvY3BoeV9zaGFyZWQgKnNoYXJlZCA9IHBoeV9wYWNrYWdlX2dldF9wcml2KHBoeWRldik7XG4mIzQzO1xuJiM0MztcdHUxNiByZWdfMWVfMTJfcmVhZDtcbiYjNDM7XHR1MTYgcmVnXzFlXzE2X3JlYWQ7XG4mIzQzO1x0dTE2IHJlZ18xZV8xN19yZWFkO1xuJiM0MztcdHUxNiByZWdfMWVfMThfcmVhZDtcbiYjNDM7XHR1MTYgcmVnXzFlXzE5X3JlYWQ7XG4mIzQzO1x0dTE2IHJlZ18xZV8yMF9yZWFkO1xuJiM0MztcdHUxNiByZWdfMWVfMjFfcmVhZDtcbiYjNDM7XHR1MTYgcmVnXzFlXzIyX3JlYWQ7XG4mIzQzO1x0dTE2IHJlZ18xZV8xNzRfcmVhZDtcbiYjNDM7XHR1MTYgcmVnXzFlXzE3NV9yZWFkO1xuJiM0MztcbiYjNDM7XHRpbnQgcmVnXzFlXzEyX2hlYWRlcjtcbiYjNDM7XHRpbnQgcmVnXzFlXzE2X2hlYWRlcjtcbiYjNDM7XHRpbnQgcmVnXzFlXzE3X2hlYWRlcjtcbiYjNDM7XHRpbnQgcmVnXzFlXzE4X2hlYWRlcjtcbiYjNDM7XHRpbnQgcmVnXzFlXzE5X2hlYWRlcjtcbiYjNDM7XHRpbnQgcmVnXzFlXzIxX2hlYWRlcjtcbiYjNDM7XHRpbnQgcmVnXzFlXzE3NF9oZWFkZXI7XG4mIzQzO1x0aW50IHJlZ18xZV8xNzVfaGVhZGVyO1xuJiM0MztcbiYjNDM7XHRpbnQgcmVnXzFlXzEyX2VuZDtcbiYjNDM7XHRpbnQgcmVnXzFlXzE2X2VuZDtcbiYjNDM7XHRpbnQgcmVnXzFlXzE3X2VuZDtcbiYjNDM7XHRpbnQgcmVnXzFlXzE4X2VuZDtcbiYjNDM7XHRpbnQgcmVnXzFlXzIwX2VuZDtcbiYjNDM7XHRpbnQgcmVnXzFlXzIyX2VuZDtcbiYjNDM7XHRpbnQgcmVnXzFlXzE3NF9lbmQ7XG4mIzQzO1x0aW50IHJlZ18xZV8xNzVfZW5kO1xuJiM0MztcbiYjNDM7XHRzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2X3AwO1xuJiM0MztcdHU4IHBoeV9vZmZzZXQ7XG4mIzQzO1xuJiM0MztcdGludCB0eGFtcF9sb3dfbGltaXQgPSAtMztcbiYjNDM7XHRpbnQgdHhhbXBfaGlnaF9saW1pdCA9IDB4NDI7XG4mIzQzO1xuJiM0MztcdGludCByNTBfbG93X2xpbWl0ID0gLTg7XG4mIzQzO1x0aW50IHI1MF9oaWdoX2xpbWl0ID0gMHg4ODtcbiYjNDM7XG4mIzQzO1x0Ym9vbCBvdmVyZmxvdztcbiYjNDM7XHRpbnQgKCp0eF9hbXBfdGFibGUpW0NBTElCX0NPTlNUX1RZUEVfTUFYXVs0XTtcbiYjNDM7XHRpbnQgdHJhbnNmb3JtZXJfdHlwZSwgbWRpX3Jlc2lzdGVyX3R5cGU7XG4mIzQzO1xuJiM0MztcdHBoeWRldl9wMCA9IHNoYXJlZC1cdTAwM2VwaHlkZXZfcDA7XG4mIzQzO1x0cGh5X29mZnNldCA9IHBoeWRldi1cdTAwM2VtZGlvLmFkZHIgLSBwaHlkZXZfcDAtXHUwMDNlbWRpby5hZGRyO1xuJiM0MztcbiYjNDM7XHR0cmFuc2Zvcm1lcl90eXBlID0gc2hhcmVkLVx1MDAzZXRyYW5zZm9ybWVyX3R5cGVbcGh5X29mZnNldF07XG4mIzQzO1x0bWRpX3Jlc2lzdGVyX3R5cGUgPSBzaGFyZWQtXHUwMDNlbWRpX3Jlc2lzdGVyX3R5cGU7XG4mIzQzO1x0dHhfYW1wX3RhYmxlID0gc2hhcmVkLVx1MDAzZXR4X2FtcF9jb21wZW5zYXRpb25fdGJsW3RyYW5zZm9ybWVyX3R5cGVdW21kaV9yZXNpc3Rlcl90eXBlXTtcbiYjNDM7XG4mIzQzO1x0cmVnXzFlXzEyX3JlYWQgPSBwaHlfcmVhZF9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSwgMHgxMik7XG4mIzQzO1x0cmVnXzFlXzE2X3JlYWQgPSBwaHlfcmVhZF9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSwgMHgxNik7XG4mIzQzO1x0cmVnXzFlXzE3X3JlYWQgPSBwaHlfcmVhZF9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSwgMHgxNyk7XG4mIzQzO1x0cmVnXzFlXzE4X3JlYWQgPSBwaHlfcmVhZF9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSwgMHgxOCk7XG4mIzQzO1x0cmVnXzFlXzE5X3JlYWQgPSBwaHlfcmVhZF9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSwgMHgxOSk7XG4mIzQzO1x0cmVnXzFlXzIwX3JlYWQgPSBwaHlfcmVhZF9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSwgMHgyMCk7XG4mIzQzO1x0cmVnXzFlXzIxX3JlYWQgPSBwaHlfcmVhZF9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSwgMHgyMSk7XG4mIzQzO1x0cmVnXzFlXzIyX3JlYWQgPSBwaHlfcmVhZF9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSwgMHgyMik7XG4mIzQzO1x0cmVnXzFlXzE3NF9yZWFkID0gcGh5X3JlYWRfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIDB4MTc0KTtcbiYjNDM7XHRyZWdfMWVfMTc1X3JlYWQgPSBwaHlfcmVhZF9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSwgMHgxNzUpO1xuJiM0MztcbiYjNDM7XHRyZWdfMWVfMTJfaGVhZGVyID0gKChyZWdfMWVfMTJfcmVhZCBcdTAwMjYgMHhmYzAwKSAvIDEwMjQpICYjNDM7ICp0eF9hbXBfdGFibGVbVFhfQU1QXzFHX0FdW3BoeV9vZmZzZXRdO1xuJiM0MztcdHJlZ18xZV8xN19oZWFkZXIgPSAoKHJlZ18xZV8xN19yZWFkIFx1MDAyNiAweDNmMDApIC8gMjU2KSAmIzQzOyAqdHhfYW1wX3RhYmxlW1RYX0FNUF8xR19CXVtwaHlfb2Zmc2V0XTtcbiYjNDM7XHRyZWdfMWVfMTlfaGVhZGVyID0gKChyZWdfMWVfMTlfcmVhZCBcdTAwMjYgMHgzZjAwKSAvIDI1NikgJiM0MzsgKnR4X2FtcF90YWJsZVtUWF9BTVBfMUdfQ11bcGh5X29mZnNldF07XG4mIzQzO1x0cmVnXzFlXzIxX2hlYWRlciA9ICgocmVnXzFlXzIxX3JlYWQgXHUwMDI2IDB4M2YwMCkgLyAyNTYpICYjNDM7ICp0eF9hbXBfdGFibGVbVFhfQU1QXzFHX0RdW3BoeV9vZmZzZXRdO1xuJiM0MztcbiYjNDM7XHRvdmVyZmxvdyA9IGZhbHNlO1xuJiM0MztcdGlmIChyZWdfMWVfMTJfaGVhZGVyIFx1MDAzYyB0eGFtcF9sb3dfbGltaXQgfHxcbiYjNDM7XHQgICAgcmVnXzFlXzEyX2hlYWRlciBcdTAwM2UgdHhhbXBfaGlnaF9saW1pdClcbiYjNDM7XHRcdG92ZXJmbG93ID0gdHJ1ZTtcbiYjNDM7XHRpZiAocmVnXzFlXzE3X2hlYWRlciBcdTAwM2MgdHhhbXBfbG93X2xpbWl0IHx8XG4mIzQzO1x0ICAgIHJlZ18xZV8xN19oZWFkZXIgXHUwMDNlIHR4YW1wX2hpZ2hfbGltaXQpXG4mIzQzO1x0XHRvdmVyZmxvdyA9IHRydWU7XG4mIzQzO1x0aWYgKHJlZ18xZV8xOV9oZWFkZXIgXHUwMDNjIHR4YW1wX2xvd19saW1pdCB8fFxuJiM0MztcdCAgICByZWdfMWVfMTlfaGVhZGVyIFx1MDAzZSB0eGFtcF9oaWdoX2xpbWl0KVxuJiM0MztcdFx0b3ZlcmZsb3cgPSB0cnVlO1xuJiM0MztcdGlmIChyZWdfMWVfMjFfaGVhZGVyIFx1MDAzYyB0eGFtcF9sb3dfbGltaXQgfHxcbiYjNDM7XHQgICAgcmVnXzFlXzIxX2hlYWRlciBcdTAwM2UgdHhhbXBfaGlnaF9saW1pdClcbiYjNDM7XHRcdG92ZXJmbG93ID0gdHJ1ZTtcbiYjNDM7XG4mIzQzO1x0aWYgKG92ZXJmbG93KSB7XG4mIzQzO1x0XHRyZWdfMWVfMTJfaGVhZGVyID0gMHgyMDtcbiYjNDM7XHRcdHJlZ18xZV8xN19oZWFkZXIgPSAweDIwO1xuJiM0MztcdFx0cmVnXzFlXzE5X2hlYWRlciA9IDB4MjA7XG4mIzQzO1x0XHRyZWdfMWVfMjFfaGVhZGVyID0gMHgyMDtcbiYjNDM7XHR9IGVsc2Uge1xuJiM0MztcdFx0aWYgKHJlZ18xZV8xMl9oZWFkZXIgXHUwMDNjIDApXG4mIzQzO1x0XHRcdHJlZ18xZV8xMl9oZWFkZXIgPSAwO1xuJiM0MztcdFx0ZWxzZSBpZiAocmVnXzFlXzEyX2hlYWRlciBcdTAwM2UgMHgzZilcbiYjNDM7XHRcdFx0cmVnXzFlXzEyX2hlYWRlciA9IDB4M2Y7XG4mIzQzO1x0XHRpZiAocmVnXzFlXzE3X2hlYWRlciBcdTAwM2MgMClcbiYjNDM7XHRcdFx0cmVnXzFlXzE3X2hlYWRlciA9IDA7XG4mIzQzO1x0XHRlbHNlIGlmIChyZWdfMWVfMTdfaGVhZGVyIFx1MDAzZSAweDNmKVxuJiM0MztcdFx0XHRyZWdfMWVfMTdfaGVhZGVyID0gMHgzZjtcbiYjNDM7XHRcdGlmIChyZWdfMWVfMTlfaGVhZGVyIFx1MDAzYyAwKVxuJiM0MztcdFx0XHRyZWdfMWVfMTlfaGVhZGVyID0gMDtcbiYjNDM7XHRcdGVsc2UgaWYgKHJlZ18xZV8xOV9oZWFkZXIgXHUwMDNlIDB4M2YpXG4mIzQzO1x0XHRcdHJlZ18xZV8xOV9oZWFkZXIgPSAweDNmO1xuJiM0MztcdFx0aWYgKHJlZ18xZV8yMV9oZWFkZXIgXHUwMDNjIDApXG4mIzQzO1x0XHRcdHJlZ18xZV8yMV9oZWFkZXIgPSAwO1xuJiM0MztcdFx0ZWxzZSBpZiAocmVnXzFlXzIxX2hlYWRlciBcdTAwM2UgMHgzZilcbiYjNDM7XHRcdFx0cmVnXzFlXzIxX2hlYWRlciA9IDB4M2Y7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZWdfMWVfMTZfZW5kID0gKHJlZ18xZV8xNl9yZWFkIFx1MDAyNiAweDAwM2YpICYjNDM7ICp0eF9hbXBfdGFibGVbVFhfQU1QX1RFU1RfQV1bcGh5X29mZnNldF07XG4mIzQzO1x0cmVnXzFlXzE4X2VuZCA9IChyZWdfMWVfMThfcmVhZCBcdTAwMjYgMHgwMDNmKSAmIzQzOyAqdHhfYW1wX3RhYmxlW1RYX0FNUF9URVNUX0JdW3BoeV9vZmZzZXRdO1xuJiM0MztcdHJlZ18xZV8yMF9lbmQgPSAocmVnXzFlXzIwX3JlYWQgXHUwMDI2IDB4MDAzZikgJiM0MzsgKnR4X2FtcF90YWJsZVtUWF9BTVBfVEVTVF9DXVtwaHlfb2Zmc2V0XTtcbiYjNDM7XHRyZWdfMWVfMjJfZW5kID0gKHJlZ18xZV8yMl9yZWFkIFx1MDAyNiAweDAwM2YpICYjNDM7ICp0eF9hbXBfdGFibGVbVFhfQU1QX1RFU1RfRF1bcGh5X29mZnNldF07XG4mIzQzO1xuJiM0MztcdG92ZXJmbG93ID0gZmFsc2U7XG4mIzQzO1x0aWYgKHJlZ18xZV8xNl9lbmQgXHUwMDNjIHR4YW1wX2xvd19saW1pdCB8fFxuJiM0MztcdCAgICByZWdfMWVfMTZfZW5kIFx1MDAzZSB0eGFtcF9oaWdoX2xpbWl0KVxuJiM0MztcdFx0b3ZlcmZsb3cgPSB0cnVlO1xuJiM0MztcdGlmIChyZWdfMWVfMThfZW5kIFx1MDAzYyB0eGFtcF9sb3dfbGltaXQgfHxcbiYjNDM7XHQgICAgcmVnXzFlXzE4X2VuZCBcdTAwM2UgdHhhbXBfaGlnaF9saW1pdClcbiYjNDM7XHRcdG92ZXJmbG93ID0gdHJ1ZTtcbiYjNDM7XHRpZiAocmVnXzFlXzIwX2VuZCBcdTAwM2MgdHhhbXBfbG93X2xpbWl0IHx8XG4mIzQzO1x0ICAgIHJlZ18xZV8yMF9lbmQgXHUwMDNlIHR4YW1wX2hpZ2hfbGltaXQpXG4mIzQzO1x0XHRvdmVyZmxvdyA9IHRydWU7XG4mIzQzO1x0aWYgKHJlZ18xZV8yMl9lbmQgXHUwMDNjIHR4YW1wX2xvd19saW1pdCB8fFxuJiM0MztcdCAgICByZWdfMWVfMjJfZW5kIFx1MDAzZSB0eGFtcF9oaWdoX2xpbWl0KVxuJiM0MztcdFx0b3ZlcmZsb3cgPSB0cnVlO1xuJiM0MztcbiYjNDM7XHRpZiAob3ZlcmZsb3cpIHtcbiYjNDM7XHRcdHJlZ18xZV8xNl9lbmQgPSAweDIwO1xuJiM0MztcdFx0cmVnXzFlXzE4X2VuZCA9IDB4MjA7XG4mIzQzO1x0XHRyZWdfMWVfMjBfZW5kID0gMHgyMDtcbiYjNDM7XHRcdHJlZ18xZV8yMl9lbmQgPSAweDIwO1xuJiM0MztcdH0gZWxzZSB7XG4mIzQzO1x0XHRpZiAocmVnXzFlXzE2X2VuZCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0cmVnXzFlXzE2X2VuZCA9IDA7XG4mIzQzO1x0XHRlbHNlIGlmIChyZWdfMWVfMTZfZW5kIFx1MDAzZSAweDNmKVxuJiM0MztcdFx0XHRyZWdfMWVfMTZfZW5kID0gMHgzZjtcbiYjNDM7XHRcdGlmIChyZWdfMWVfMThfZW5kIFx1MDAzYyAwKVxuJiM0MztcdFx0XHRyZWdfMWVfMThfZW5kID0gMDtcbiYjNDM7XHRcdGVsc2UgaWYgKHJlZ18xZV8xOF9lbmQgXHUwMDNlIDB4M2YpXG4mIzQzO1x0XHRcdHJlZ18xZV8xOF9lbmQgPSAweDNmO1xuJiM0MztcdFx0aWYgKHJlZ18xZV8yMF9lbmQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdHJlZ18xZV8yMF9lbmQgPSAwO1xuJiM0MztcdFx0ZWxzZSBpZiAocmVnXzFlXzIwX2VuZCBcdTAwM2UgMHgzZilcbiYjNDM7XHRcdFx0cmVnXzFlXzIwX2VuZCA9IDB4M2Y7XG4mIzQzO1x0XHRpZiAocmVnXzFlXzIyX2VuZCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0cmVnXzFlXzIyX2VuZCA9IDA7XG4mIzQzO1x0XHRlbHNlIGlmIChyZWdfMWVfMjJfZW5kIFx1MDAzZSAweDNmKVxuJiM0MztcdFx0XHRyZWdfMWVfMjJfZW5kID0gMHgzZjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJlZ18xZV8xNl9oZWFkZXIgPSAoKHJlZ18xZV8xNl9yZWFkIFx1MDAyNiAweGZjMDApIC8gMTAyNCkgJiM0MzsgKnR4X2FtcF90YWJsZVtUWF9BTVBfMTAwTV9BXVtwaHlfb2Zmc2V0XTtcbiYjNDM7XHRyZWdfMWVfMThfaGVhZGVyID0gKChyZWdfMWVfMThfcmVhZCBcdTAwMjYgMHgzZjAwKSAvIDI1NikgJiM0MzsgKnR4X2FtcF90YWJsZVtUWF9BTVBfMTAwTV9CXVtwaHlfb2Zmc2V0XTtcbiYjNDM7XG4mIzQzO1x0b3ZlcmZsb3cgPSBmYWxzZTtcbiYjNDM7XHRpZiAocmVnXzFlXzE2X2hlYWRlciBcdTAwM2MgdHhhbXBfbG93X2xpbWl0IHx8XG4mIzQzO1x0ICAgIHJlZ18xZV8xNl9oZWFkZXIgXHUwMDNlIHR4YW1wX2hpZ2hfbGltaXQpXG4mIzQzO1x0XHRvdmVyZmxvdyA9IHRydWU7XG4mIzQzO1x0aWYgKHJlZ18xZV8xOF9oZWFkZXIgXHUwMDNjIHR4YW1wX2xvd19saW1pdCB8fFxuJiM0MztcdCAgICByZWdfMWVfMThfaGVhZGVyIFx1MDAzZSB0eGFtcF9oaWdoX2xpbWl0KVxuJiM0MztcdFx0b3ZlcmZsb3cgPSB0cnVlO1xuJiM0MztcbiYjNDM7XHRpZiAob3ZlcmZsb3cpIHtcbiYjNDM7XHRcdHJlZ18xZV8xNl9oZWFkZXIgPSAweDIwO1xuJiM0MztcdFx0cmVnXzFlXzE4X2hlYWRlciA9IDB4MjA7XG4mIzQzO1x0fSBlbHNlIHtcbiYjNDM7XHRcdGlmIChyZWdfMWVfMTZfaGVhZGVyIFx1MDAzYyAwKVxuJiM0MztcdFx0XHRyZWdfMWVfMTZfaGVhZGVyID0gMDtcbiYjNDM7XHRcdGVsc2UgaWYgKHJlZ18xZV8xNl9oZWFkZXIgXHUwMDNlIDB4M2YpXG4mIzQzO1x0XHRcdHJlZ18xZV8xNl9oZWFkZXIgPSAweDNmO1xuJiM0MztcdFx0aWYgKHJlZ18xZV8xOF9oZWFkZXIgXHUwMDNjIDApXG4mIzQzO1x0XHRcdHJlZ18xZV8xOF9oZWFkZXIgPSAwO1xuJiM0MztcdFx0ZWxzZSBpZiAocmVnXzFlXzE4X2hlYWRlciBcdTAwM2UgMHgzZilcbiYjNDM7XHRcdFx0cmVnXzFlXzE4X2hlYWRlciA9IDB4M2Y7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZWdfMWVfMTJfZW5kID0gKHJlZ18xZV8xMl9yZWFkIFx1MDAyNiAweDAwM2YpICYjNDM7ICp0eF9hbXBfdGFibGVbVFhfQU1QXzEwTV9BXVtwaHlfb2Zmc2V0XTtcbiYjNDM7XHRyZWdfMWVfMTdfZW5kID0gKHJlZ18xZV8xN19yZWFkIFx1MDAyNiAweDAwM2YpICYjNDM7ICp0eF9hbXBfdGFibGVbVFhfQU1QXzEwTV9CXVtwaHlfb2Zmc2V0XTtcbiYjNDM7XG4mIzQzO1x0b3ZlcmZsb3cgPSBmYWxzZTtcbiYjNDM7XHRpZiAocmVnXzFlXzEyX2VuZCBcdTAwM2MgdHhhbXBfbG93X2xpbWl0IHx8XG4mIzQzO1x0ICAgIHJlZ18xZV8xMl9lbmQgXHUwMDNlIHR4YW1wX2hpZ2hfbGltaXQpXG4mIzQzO1x0XHRvdmVyZmxvdyA9IHRydWU7XG4mIzQzO1x0aWYgKHJlZ18xZV8xN19lbmQgXHUwMDNjIHR4YW1wX2xvd19saW1pdCB8fFxuJiM0MztcdCAgICByZWdfMWVfMTdfZW5kIFx1MDAzZSB0eGFtcF9oaWdoX2xpbWl0KVxuJiM0MztcdFx0b3ZlcmZsb3cgPSB0cnVlO1xuJiM0MztcbiYjNDM7XHRpZiAob3ZlcmZsb3cpIHtcbiYjNDM7XHRcdHJlZ18xZV8xMl9lbmQgPSAweDIwO1xuJiM0MztcdFx0cmVnXzFlXzE3X2VuZCA9IDB4MjA7XG4mIzQzO1x0fSBlbHNlIHtcbiYjNDM7XHRcdGlmIChyZWdfMWVfMTJfZW5kIFx1MDAzYyAwKVxuJiM0MztcdFx0XHRyZWdfMWVfMTJfZW5kID0gMDtcbiYjNDM7XHRcdGVsc2UgaWYgKHJlZ18xZV8xMl9lbmQgXHUwMDNlIDB4M2YpXG4mIzQzO1x0XHRcdHJlZ18xZV8xMl9lbmQgPSAweDNmO1xuJiM0MztcdFx0aWYgKHJlZ18xZV8xN19lbmQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdHJlZ18xZV8xN19lbmQgPSAwO1xuJiM0MztcdFx0ZWxzZSBpZiAocmVnXzFlXzE3X2VuZCBcdTAwM2UgMHgzZilcbiYjNDM7XHRcdFx0cmVnXzFlXzE3X2VuZCA9IDB4M2Y7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZWdfMWVfMTc0X2hlYWRlciA9ICgocmVnXzFlXzE3NF9yZWFkIFx1MDAyNiAweDdmMDApIC8gMjU2KSAmIzQzOyAqdHhfYW1wX3RhYmxlW1I1MF9BXVtwaHlfb2Zmc2V0XTtcbiYjNDM7XHRyZWdfMWVfMTc0X2VuZCA9IChyZWdfMWVfMTc0X3JlYWQgXHUwMDI2IDB4MDA3ZikgJiM0MzsgKnR4X2FtcF90YWJsZVtSNTBfQl1bcGh5X29mZnNldF07XG4mIzQzO1x0cmVnXzFlXzE3NV9oZWFkZXIgPSAoKHJlZ18xZV8xNzVfcmVhZCBcdTAwMjYgMHg3ZjAwKSAvIDI1NikgJiM0MzsgKnR4X2FtcF90YWJsZVtSNTBfQ11bcGh5X29mZnNldF07XG4mIzQzO1x0cmVnXzFlXzE3NV9lbmQgPSAocmVnXzFlXzE3NV9yZWFkIFx1MDAyNiAweDAwN2YpICYjNDM7ICp0eF9hbXBfdGFibGVbUjUwX0RdW3BoeV9vZmZzZXRdO1xuJiM0MztcbiYjNDM7XHRvdmVyZmxvdyA9IGZhbHNlO1xuJiM0MztcdGlmIChyZWdfMWVfMTc0X2hlYWRlciBcdTAwM2MgcjUwX2xvd19saW1pdCB8fFxuJiM0MztcdCAgICByZWdfMWVfMTc0X2hlYWRlciBcdTAwM2UgcjUwX2hpZ2hfbGltaXQpXG4mIzQzO1x0XHRvdmVyZmxvdyA9IHRydWU7XG4mIzQzO1x0aWYgKHJlZ18xZV8xNzRfZW5kIFx1MDAzYyByNTBfbG93X2xpbWl0IHx8XG4mIzQzO1x0ICAgIHJlZ18xZV8xNzRfZW5kIFx1MDAzZSByNTBfaGlnaF9saW1pdClcbiYjNDM7XHRcdG92ZXJmbG93ID0gdHJ1ZTtcbiYjNDM7XHRpZiAocmVnXzFlXzE3NV9oZWFkZXIgXHUwMDNjIHI1MF9sb3dfbGltaXQgfHxcbiYjNDM7XHQgICAgcmVnXzFlXzE3NV9oZWFkZXIgXHUwMDNlIHI1MF9oaWdoX2xpbWl0KVxuJiM0MztcdFx0b3ZlcmZsb3cgPSB0cnVlO1xuJiM0MztcdGlmIChyZWdfMWVfMTc1X2VuZCBcdTAwM2MgcjUwX2xvd19saW1pdCB8fFxuJiM0MztcdCAgICByZWdfMWVfMTc1X2VuZCBcdTAwM2UgcjUwX2hpZ2hfbGltaXQpXG4mIzQzO1x0XHRvdmVyZmxvdyA9IHRydWU7XG4mIzQzO1xuJiM0MztcdGlmIChvdmVyZmxvdykge1xuJiM0MztcdFx0cmVnXzFlXzE3NF9oZWFkZXIgPSAweDM0O1xuJiM0MztcdFx0cmVnXzFlXzE3NF9lbmQgPSAweDM0O1xuJiM0MztcdFx0cmVnXzFlXzE3NV9oZWFkZXIgPSAweDM0O1xuJiM0MztcdFx0cmVnXzFlXzE3NV9lbmQgPSAweDM0O1xuJiM0MztcdH0gZWxzZSB7XG4mIzQzO1x0XHRpZiAocmVnXzFlXzE3NF9oZWFkZXIgXHUwMDNjIDApXG4mIzQzO1x0XHRcdHJlZ18xZV8xNzRfaGVhZGVyID0gMDtcbiYjNDM7XHRcdGVsc2UgaWYgKHJlZ18xZV8xNzRfaGVhZGVyIFx1MDAzZSAweDdmKVxuJiM0MztcdFx0XHRyZWdfMWVfMTc0X2hlYWRlciA9IDB4N2Y7XG4mIzQzO1x0XHRpZiAocmVnXzFlXzE3NF9lbmQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdHJlZ18xZV8xNzRfZW5kID0gMDtcbiYjNDM7XHRcdGVsc2UgaWYgKHJlZ18xZV8xNzRfZW5kIFx1MDAzZSAweDdmKVxuJiM0MztcdFx0XHRyZWdfMWVfMTc0X2VuZCA9IDB4N2Y7XG4mIzQzO1x0XHRpZiAocmVnXzFlXzE3NV9oZWFkZXIgXHUwMDNjIDApXG4mIzQzO1x0XHRcdHJlZ18xZV8xNzVfaGVhZGVyID0gMDtcbiYjNDM7XHRcdGVsc2UgaWYgKHJlZ18xZV8xNzVfaGVhZGVyIFx1MDAzZSAweDdmKVxuJiM0MztcdFx0XHRyZWdfMWVfMTc1X2hlYWRlciA9IDB4N2Y7XG4mIzQzO1x0XHRpZiAocmVnXzFlXzE3NV9lbmQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdHJlZ18xZV8xNzVfZW5kID0gMDtcbiYjNDM7XHRcdGVsc2UgaWYgKHJlZ18xZV8xNzVfZW5kIFx1MDAzZSAweDdmKVxuJiM0MztcdFx0XHRyZWdfMWVfMTc1X2VuZCA9IDB4N2Y7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIDB4MTIsXG4mIzQzO1x0XHQgICAgICAocmVnXzFlXzEyX2hlYWRlciAqIDEwMjQpICYjNDM7IHJlZ18xZV8xMl9lbmQpO1xuJiM0MztcdHBoeV93cml0ZV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSwgMHgxNixcbiYjNDM7XHRcdCAgICAgIChyZWdfMWVfMTZfaGVhZGVyICogMTAyNCkgJiM0MzsgcmVnXzFlXzE2X2VuZCk7XG4mIzQzO1x0cGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCAweDE3LFxuJiM0MztcdFx0ICAgICAgKHJlZ18xZV8xN19oZWFkZXIgKiAyNTYpICYjNDM7IHJlZ18xZV8xN19lbmQpO1xuJiM0MztcdHBoeV93cml0ZV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSwgMHgxOCxcbiYjNDM7XHRcdCAgICAgIChyZWdfMWVfMThfaGVhZGVyICogMjU2KSAmIzQzOyByZWdfMWVfMThfZW5kKTtcbiYjNDM7XHRwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIDB4MTksXG4mIzQzO1x0XHQgICAgICAocmVnXzFlXzE5X3JlYWQgXHUwMDI2IDB4MDBmZikgJiM0MzsgKHJlZ18xZV8xOV9oZWFkZXIgKiAyNTYpKTtcbiYjNDM7XHRwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIDB4MjAsXG4mIzQzO1x0XHQgICAgICAocmVnXzFlXzIwX3JlYWQgXHUwMDI2IDB4ZmYwMCkgJiM0MzsgcmVnXzFlXzIwX2VuZCk7XG4mIzQzO1x0cGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCAweDIxLFxuJiM0MztcdFx0ICAgICAgKHJlZ18xZV8yMV9yZWFkIFx1MDAyNiAweDAwZmYpICYjNDM7IChyZWdfMWVfMjFfaGVhZGVyICogMjU2KSk7XG4mIzQzO1x0cGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCAweDIyLFxuJiM0MztcdFx0ICAgICAgKHJlZ18xZV8yMl9yZWFkIFx1MDAyNiAweGZmMDApICYjNDM7IHJlZ18xZV8yMl9lbmQpO1xuJiM0MztcdHBoeV93cml0ZV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSwgMHgxNzQsXG4mIzQzO1x0XHQgICAgICAweDgwODAgJiM0MzsgKHJlZ18xZV8xNzRfaGVhZGVyICogMjU2KSAmIzQzOyByZWdfMWVfMTc0X2VuZCk7XG4mIzQzO1x0cGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCAweDE3NSxcbiYjNDM7XHRcdCAgICAgIDB4ODA4MCAmIzQzOyAocmVnXzFlXzE3NV9oZWFkZXIgKiAyNTYpICYjNDM7IHJlZ18xZV8xNzVfZW5kKTtcbiYjNDM7XG4mIzQzO1x0cGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCAweDE3NiwgMHg0NDAwKTtcbiYjNDM7XHRwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIDB4MTc3LCAweDAwNDQpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBhbjc1ODFfcGh5X2NvbmZpZ19pbml0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgYWlyb2hhX3NvY3BoeV9zaGFyZWQgKnNoYXJlZCA9IHBoeV9wYWNrYWdlX2dldF9wcml2KHBoeWRldik7XG4mIzQzO1x0c3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldl9wMDtcbiYjNDM7XHR1MzIgc29jX3BkaWRyO1xuJiM0MztcdHU4IHBoeV9vZmZzZXQ7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0cGh5ZGV2X3AwID0gc2hhcmVkLVx1MDAzZXBoeWRldl9wMDtcbiYjNDM7XHRwaHlfb2Zmc2V0ID0gcGh5ZGV2LVx1MDAzZW1kaW8uYWRkciAtIHBoeWRldl9wMC1cdTAwM2VtZGlvLmFkZHI7XG4mIzQzO1xuJiM0MztcdC8qIEZJWE1FOiBSZWFkIFNvQyBQRElEUiBpZiBhdmFpbGFibGUgb3IgZGVmYXVsdCB0byAxICovXG4mIzQzO1x0c29jX3BkaWRyID0gMTtcbiYjNDM7XG4mIzQzO1x0c2hhcmVkLVx1MDAzZW1kaV9yZXNpc3Rlcl90eXBlID0gTURJXzVSO1xuJiM0MztcdGlmIChzb2NfcGRpZHIgPT0gMSlcbiYjNDM7XHRcdHNoYXJlZC1cdTAwM2V0eF9hbXBfY29tcGVuc2F0aW9uX3RibCA9IFx1MDAyNmFuNzU4MV90eF9hbXBfY29tcGVuc2F0aW9uX3RibFswXTtcbiYjNDM7XHRlbHNlXG4mIzQzO1x0XHRzaGFyZWQtXHUwMDNldHhfYW1wX2NvbXBlbnNhdGlvbl90YmwgPSBcdTAwMjZhbjc1ODFfdHhfYW1wX2NvbXBlbnNhdGlvbl90YmxbMV07XG4mIzQzO1x0c2hhcmVkLVx1MDAzZXI1MF9jYWxfdGJsID0gYW43NTgxX3pjYWxfdG9fcjQ1b2htO1xuJiM0MztcbiYjNDM7XHRyZXQgPSBhaXJvaGFfcGh5X2NhbGliKHBoeWRldik7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdHJldCA9IGFpcm9oYV9waHlfYXV0b19zZWxlY3RfdHJhbnNmb3JtZXIocGh5ZGV2KTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gYWlyb2hhX3BoeV90eF9hbXBfY29tcGVuc2F0aW9uKHBoeWRldik7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdC8qIFJYIHNldHRpbmcgZm9yIDVSX1RYTVIgYmVmb3JlIEFOIHNldHRpbmcgKi9cbiYjNDM7XHRwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIDB4ZTYsIDB4MTExMSk7XG4mIzQzO1x0cGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCAweGU3LCAweDU1NTUpO1xuJiM0MztcdHBoeV93cml0ZV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSwgMHhlOSwgMHgwMDAxKTtcbiYjNDM7XHRwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIDB4ZmUsIDB4MDAwMCk7XG4mIzQzO1xuJiM0MztcdC8qIExvbmcgTG9vcCBSZWFjaCBzZXR0aW5nICovXG4mIzQzO1x0cGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCAweDExLCAweGZmMDApO1xuJiM0MztcdHBoeV93cml0ZV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMiwgMHgyMDIsIDB4MjMxMCk7XG4mIzQzO1x0cGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQyLCAweDIwMywgMHgwMDI1KTtcbiYjNDM7XHRwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDIsIDB4MjA0LCAweDIzMTApO1xuJiM0MztcdHBoeV93cml0ZV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMiwgMHgyMDUsIDB4MDAyNSk7XG4mIzQzO1x0cGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQyLCAweDIwNiwgMHgyMzEwKTtcbiYjNDM7XHRwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDIsIDB4MjA3LCAweDAwMjUpO1xuJiM0MztcdHBoeV93cml0ZV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMiwgMHgyMDgsIDB4MjMxMCk7XG4mIzQzO1x0cGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQyLCAweDIwOSwgMHgwMDI1KTtcbiYjNDM7XHRwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDIsIDB4MjBhLCAweDIzMTApO1xuJiM0MztcdHBoeV93cml0ZV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMiwgMHgyMGIsIDB4MDAyNSk7XG4mIzQzO1x0cGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQyLCAweDIwZSwgMHgyMzEwKTtcbiYjNDM7XHRwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDIsIDB4MjBmLCAweDAwMjUpO1xuJiM0MztcdHBoeV93cml0ZV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMiwgMHgyMTAsIDB4MjMxMCk7XG4mIzQzO1x0cGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQyLCAweDIxMSwgMHgwMDI1KTtcbiYjNDM7XHRwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDIsIDB4MjEyLCAweDIzMTApO1xuJiM0MztcdHBoeV93cml0ZV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMiwgMHgyMTMsIDB4MDAyNSk7XG4mIzQzO1x0cGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQyLCAweDIxNCwgMHgyMzEwKTtcbiYjNDM7XHRwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDIsIDB4MjE1LCAweDAwMjUpO1xuJiM0MztcdHBoeV93cml0ZV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMiwgMHgyMTYsIDB4MjMxMCk7XG4mIzQzO1x0cGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQyLCAweDIxNywgMHgwMDI1KTtcbiYjNDM7XHRwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDIsIDB4MjFhLCAweDIzMTApO1xuJiM0MztcdHBoeV93cml0ZV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMiwgMHgyMWIsIDB4MDAyNSk7XG4mIzQzO1x0cGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQyLCAweDIxYywgMHgyMzEwKTtcbiYjNDM7XHRwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDIsIDB4MjFkLCAweDAwMjUpO1xuJiM0MztcdHBoeV93cml0ZV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMiwgMHgyMWUsIDB4MjMxMCk7XG4mIzQzO1x0cGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQyLCAweDIxZiwgMHgwMDI1KTtcbiYjNDM7XHRwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDIsIDB4MjIwLCAweDIzMTApO1xuJiM0MztcdHBoeV93cml0ZV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMiwgMHgyMjEsIDB4MDAyNSk7XG4mIzQzO1x0cGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQyLCAweDIyMiwgMHgyMzEwKTtcbiYjNDM7XHRwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDIsIDB4MjIzLCAweDAwMjUpO1xuJiM0MztcdHBoeV93cml0ZV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMiwgMHgyMjYsIDB4MjMxMCk7XG4mIzQzO1x0cGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQyLCAweDIyNywgMHgwMDI1KTtcbiYjNDM7XHRwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDIsIDB4MjI4LCAweDIzMTApO1xuJiM0MztcdHBoeV93cml0ZV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMiwgMHgyMjksIDB4MDAyNSk7XG4mIzQzO1x0cGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQyLCAweDIyYSwgMHgyMzEwKTtcbiYjNDM7XHRwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDIsIDB4MjJiLCAweDAwMjUpO1xuJiM0MztcdHBoeV93cml0ZV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMiwgMHgyMmMsIDB4MjMxMCk7XG4mIzQzO1x0cGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQyLCAweDIyZCwgMHgwMDI1KTtcbiYjNDM7XHRwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDIsIDB4MjJlLCAweDIzMTApO1xuJiM0MztcdHBoeV93cml0ZV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMiwgMHgyMmYsIDB4MDAyNSk7XG4mIzQzO1xuJiM0MztcdC8qIFJYIFNldHRpbmcgKi9cbiYjNDM7XHRwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIDB4M2MsIDB4YzAwMCk7XG4mIzQzO1x0cGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCAweDNkLCAweDAwMDApO1xuJiM0MztcdHBoeV93cml0ZV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSwgMHgzZSwgMHhjMDAwKTtcbiYjNDM7XG4mIzQzO1x0LyogRUVFIHNldHRpbmcgKi9cbiYjNDM7XHRwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfQU4sIDB4M2MsIDB4MDAwMCk7XG4mIzQzO1xuJiM0MztcdC8qIFJYICovXG4mIzQzO1x0cGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQyLCAweDQxLCAweDMzMzMpO1xuJiM0MztcdHBoeV93cml0ZV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMiwgMHg0NCwgMHgwMGMwKTtcbiYjNDM7XG4mIzQzO1x0LyogMTBNIHNldHRpbmdzICovXG4mIzQzO1x0cGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCAweDFhMywgMHgwMGQyKTtcbiYjNDM7XHRwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIDB4MWE0LCAweDAxMGUpO1xuJiM0MztcdHBoeV93cml0ZV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMiwgMHgyN2IsIDB4MTE3Nyk7XG4mIzQzO1x0cGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQyLCAweDI3YywgMHgwODA4KTtcbiYjNDM7XG4mIzQzO1x0cGh5X3NlbGVjdF9wYWdlKHBoeWRldiwgTVRLX1BIWV9QQUdFX0VYVEVOREVEXzEpO1xuJiM0MztcdF9fcGh5X3dyaXRlKHBoeWRldiwgMHgxNCwgMHgzYTE4KTtcbiYjNDM7XHRwaHlfcmVzdG9yZV9wYWdlKHBoeWRldiwgTVRLX1BIWV9QQUdFX1NUQU5EQVJELCAwKTtcbiYjNDM7XG4mIzQzO1x0cGh5X3dyaXRlKHBoeWRldiwgMHg5LCAweDFlMDApO1xuJiM0MztcbiYjNDM7XHRwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDIsIDB4MjY5LCAweDIxMTQpO1xuJiM0MztcdHBoeV93cml0ZV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMiwgMHgyNmEsIDB4MTExMyk7XG4mIzQzO1x0cGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQyLCAweDI2ZiwgMHgwMDAwKTtcbiYjNDM7XHRwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDIsIDB4MjcxLCAweDJjNjMpO1xuJiM0MztcdHBoeV93cml0ZV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMiwgMHgyNzIsIDB4MGMyYik7XG4mIzQzO1xuJiM0MztcdC8qIEVFRSBzZXQgYmVjYXVzZSBwb3dlciBkb3duIGNhbiYjMzk7dCBzZXQgdG9rZW5yaW5nICovXG4mIzQzO1x0cGh5X3NlbGVjdF9wYWdlKHBoeWRldiwgTVRLX1BIWV9QQUdFX0VYVEVOREVEXzUyQjUpO1xuJiM0MztcdF9fbXRrX3RyX3dyaXRlKHBoeWRldiwgMHgwLCAweDcsIDB4MTUsIDB4MDA1NWEwKTtcbiYjNDM7XHRfX210a190cl93cml0ZShwaHlkZXYsIDB4MCwgMHg3LCAweDE3LCAweDA3ZmYzZik7XG4mIzQzO1x0X19tdGtfdHJfd3JpdGUocGh5ZGV2LCAweDEsIDB4ZiwgMHgwLCAweDAwMDAxZSk7XG4mIzQzO1x0X19tdGtfdHJfd3JpdGUocGh5ZGV2LCAweDEsIDB4ZiwgMHgxLCAweDZmYjkwYSk7XG4mIzQzO1x0X19tdGtfdHJfd3JpdGUocGh5ZGV2LCAweDEsIDB4ZiwgMHgxOCwgMHgwZTJmMDApO1xuJiM0MztcdF9fbXRrX3RyX3dyaXRlKHBoeWRldiwgMHgxLCAweGQsIDB4MjYsIDB4NDQ0NDQ0KTtcbiYjNDM7XHRfX210a190cl93cml0ZShwaHlkZXYsIDB4MiwgMHhkLCAweDMsIDB4MDAwMDA0KTtcbiYjNDM7XHRfX210a190cl93cml0ZShwaHlkZXYsIDB4MiwgMHhkLCAweDYsIDB4MmViYWVmKTtcbiYjNDM7XHRfX210a190cl93cml0ZShwaHlkZXYsIDB4MiwgMHhkLCAweDgsIDB4MDAwMDBiKTtcbiYjNDM7XHRfX210a190cl93cml0ZShwaHlkZXYsIDB4MiwgMHhkLCAweGMsIDB4MDA1MDRkKTtcbiYjNDM7XHRfX210a190cl93cml0ZShwaHlkZXYsIDB4MiwgMHhkLCAweGQsIDB4MDIzMTRmKTtcbiYjNDM7XHRfX210a190cl93cml0ZShwaHlkZXYsIDB4MiwgMHhkLCAweGYsIDB4MDAzMDI4KTtcbiYjNDM7XHRfX210a190cl93cml0ZShwaHlkZXYsIDB4MiwgMHhkLCAweDEwLCAweDAwMDAwYSk7XG4mIzQzO1x0X19tdGtfdHJfd3JpdGUocGh5ZGV2LCAweDIsIDB4ZCwgMHgxMSwgMHgwNDAwMDEpO1xuJiM0MztcdF9fbXRrX3RyX3dyaXRlKHBoeWRldiwgMHgyLCAweGQsIDB4MTQsIDB4MDAwMjRhKTtcbiYjNDM7XHRfX210a190cl93cml0ZShwaHlkZXYsIDB4MiwgMHhkLCAweDFjLCAweDAwMzIxMCk7XG4mIzQzO1x0cGh5X3Jlc3RvcmVfcGFnZShwaHlkZXYsIE1US19QSFlfUEFHRV9TVEFOREFSRCwgMCk7XG4mIzQzO1xuJiM0MztcdHBoeV93cml0ZV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSwgMHgxMjAsIDB4ODAxNCk7XG4mIzQzO1x0cGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCAweDEyMiwgMHhmZmZmKTtcbiYjNDM7XHRwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIDB4MTQ0LCAweDAyMDApO1xuJiM0MztcdHBoeV93cml0ZV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSwgMHgxNGEsIDB4ZWUyMCk7XG4mIzQzO1x0cGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCAweDE5YiwgMHgwMTExKTtcbiYjNDM7XHRwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIDB4MjM0LCAweDExODEpO1xuJiM0MztcdHBoeV93cml0ZV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSwgMHgyMzgsIDB4MDEyMCk7XG4mIzQzO1x0cGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCAweDIzOSwgMHgwMTE3KTtcbiYjNDM7XHRwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIDB4MmQxLCAweDA3MzMpO1xuJiM0MztcdHBoeV93cml0ZV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSwgMHgzMjMsIDB4MDAxMSk7XG4mIzQzO1x0cGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCAweDMyNCwgMHgwMTNmKTtcbiYjNDM7XHRwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIDB4MzI2LCAweDAwMzcpO1xuJiM0MztcdHBoeV93cml0ZV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMiwgMHgyNjgsIDB4MDdmNCk7XG4mIzQzO1xuJiM0MztcdGlmIChzaGFyZWQtXHUwMDNldHJhbnNmb3JtZXJfdHlwZVtwaHlfb2Zmc2V0XSA9PSBUWE1SKSB7XG4mIzQzO1x0XHRwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIDB4MDAsIDB4MDE4Nyk7XG4mIzQzO1x0XHRwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIDB4MDEsIDB4MDFjYyk7XG4mIzQzO1x0XHRwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIDB4MDIsIDB4MDFjMik7XG4mIzQzO1x0XHRwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIDB4MDMsIDB4MDEwOSk7XG4mIzQzO1x0XHRwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIDB4MDQsIDB4MDIwYik7XG4mIzQzO1x0XHRwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIDB4MDUsIDB4MDIwMik7XG4mIzQzO1x0XHRwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIDB4MDYsIDB4MDM4Nyk7XG4mIzQzO1x0XHRwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIDB4MDcsIDB4MDNjNSk7XG4mIzQzO1x0XHRwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIDB4MDgsIDB4MDNjMik7XG4mIzQzO1x0XHRwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIDB4MDksIDB4MDMwOSk7XG4mIzQzO1x0XHRwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIDB4MGEsIDB4MDAwZSk7XG4mIzQzO1x0XHRwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIDB4MGIsIDB4MDAwMik7XG4mIzQzO1xuJiM0MztcdFx0cGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCAweDIzLCAweDA4ODApO1xuJiM0MztcdFx0cGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCAweDI0LCAweDA4ODApO1xuJiM0MztcdFx0cGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCAweDI1LCAweDA4ODApO1xuJiM0MztcdFx0cGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCAweDI2LCAweDA4ODApO1xuJiM0MztcdH0gZWxzZSB7XG4mIzQzO1x0XHRpZiAoc29jX3BkaWRyID09IDIpIHtcbiYjNDM7XHRcdFx0cGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQyLCAweDI2OSwgMHgxMTE0KTtcbiYjNDM7XHRcdFx0cGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQyLCAweDI2YSwgMHgxMTEzKTtcbiYjNDM7XHRcdFx0cGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQyLCAweDI2ZiwgMHgyMDAwKTtcbiYjNDM7XHRcdFx0cGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQyLCAweDI3MSwgMHg0Yzg4KTtcbiYjNDM7XHRcdFx0cGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQyLCAweDI3MiwgMHgwYzJiKTtcbiYjNDM7XG4mIzQzO1x0XHRcdC8qIDEwME0gc2hhcnAgKi9cbiYjNDM7XHRcdFx0cGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCAweDAwLCAweDAxOTApO1xuJiM0MztcdFx0XHRwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIDB4MDEsIDB4MDFjOCk7XG4mIzQzO1x0XHRcdHBoeV93cml0ZV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSwgMHgwMiwgMHgwMWMwKTtcbiYjNDM7XHRcdFx0cGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCAweDAzLCAweDAwMzApO1xuJiM0MztcdFx0XHRwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIDB4MDQsIDB4MDIwOCk7XG4mIzQzO1x0XHRcdHBoeV93cml0ZV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSwgMHgwNSwgMHgwMDAwKTtcbiYjNDM7XHRcdFx0cGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCAweDA2LCAweDAzMTgpO1xuJiM0MztcdFx0XHRwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIDB4MDcsIDB4MDNjOCk7XG4mIzQzO1x0XHRcdHBoeV93cml0ZV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSwgMHgwOCwgMHgwM2MwKTtcbiYjNDM7XHRcdFx0cGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCAweDA5LCAweDAyMzApO1xuJiM0MztcdFx0XHRwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIDB4MGEsIDB4MDAwOCk7XG4mIzQzO1x0XHRcdHBoeV93cml0ZV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSwgMHgwYiwgMHgwMjAwKTtcbiYjNDM7XG4mIzQzO1x0XHRcdHBoeV93cml0ZV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSwgMHgyMywgMHgwODg1KTtcbiYjNDM7XHRcdFx0cGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCAweDI0LCAweDA4ODUpO1xuJiM0MztcdFx0XHRwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIDB4MjUsIDB4MDg4NSk7XG4mIzQzO1x0XHRcdHBoeV93cml0ZV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSwgMHgyNiwgMHgwODg1KTtcbiYjNDM7XHRcdH0gZWxzZSB7XG4mIzQzO1x0XHRcdHBoeV93cml0ZV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSwgMHgwMCwgMHgwMTkwKTtcbiYjNDM7XHRcdFx0cGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCAweDAxLCAweDAxY2YpO1xuJiM0MztcdFx0XHRwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIDB4MDIsIDB4MDFjMCk7XG4mIzQzO1x0XHRcdHBoeV93cml0ZV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSwgMHgwMywgMHgwMDMwKTtcbiYjNDM7XHRcdFx0cGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCAweDA0LCAweDAyMGYpO1xuJiM0MztcdFx0XHRwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIDB4MDUsIDB4MDAwMCk7XG4mIzQzO1x0XHRcdHBoeV93cml0ZV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSwgMHgwNiwgMHgwMzE4KTtcbiYjNDM7XHRcdFx0cGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCAweDA3LCAweDAzY2YpO1xuJiM0MztcdFx0XHRwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIDB4MDgsIDB4MDNjMCk7XG4mIzQzO1x0XHRcdHBoeV93cml0ZV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSwgMHgwOSwgMHgwMjMwKTtcbiYjNDM7XHRcdFx0cGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCAweDBhLCAweDAwMGYpO1xuJiM0MztcdFx0XHRwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIDB4MGIsIDB4MDIwMCk7XG4mIzQzO1xuJiM0MztcdFx0XHRwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIDB4MjMsIDB4MDAwMyk7XG4mIzQzO1x0XHRcdHBoeV93cml0ZV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSwgMHgyNCwgMHgwMDAzKTtcbiYjNDM7XHRcdFx0cGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCAweDI1LCAweDAwMDMpO1xuJiM0MztcdFx0XHRwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIDB4MjYsIDB4MDAwMyk7XG4mIzQzO1x0XHR9XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBhbjc1ODFfcGh5X3Byb2JlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgYWlyb2hhX3NvY3BoeV9zaGFyZWQgKnNoYXJlZDtcbiYjNDM7XHRzdHJ1Y3QgbXRrX3NvY3BoeV9wcml2ICpwcml2O1xuJiM0MztcdHN0cnVjdCBwaW5jdHJsICpwaW5jdHJsO1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdC8qIFRvZ2dsZSBwaW5jdHJsIHRvIGVuYWJsZSBQSFkgTEVEICovXG4mIzQzO1x0cGluY3RybCA9IGRldm1fcGluY3RybF9nZXRfc2VsZWN0KFx1MDAyNnBoeWRldi1cdTAwM2VtZGlvLmRldiwgXCYjMzQ7Z2JlLWxlZFwmIzM0Oyk7XG4mIzQzO1x0aWYgKElTX0VSUihwaW5jdHJsKSlcbiYjNDM7XHRcdGRldl9lcnIoXHUwMDI2cGh5ZGV2LVx1MDAzZW1kaW8uYnVzLVx1MDAzZWRldixcbiYjNDM7XHRcdFx0XCYjMzQ7RmFpbGVkIHRvIHNldHVwIFBIWSBMRUQgcGluY3RybFxcblwmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdHJldCA9IGRldm1fcGh5X3BhY2thZ2Vfam9pbihcdTAwMjZwaHlkZXYtXHUwMDNlbWRpby5kZXYsIHBoeWRldiwgMCxcbiYjNDM7XHRcdFx0XHQgICAgc2l6ZW9mKHN0cnVjdCBhaXJvaGFfc29jcGh5X3NoYXJlZCkpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRwcml2ID0gZGV2bV9remFsbG9jKFx1MDAyNnBoeWRldi1cdTAwM2VtZGlvLmRldiwgc2l6ZW9mKCpwcml2KSwgR0ZQX0tFUk5FTCk7XG4mIzQzO1x0aWYgKCFwcml2KVxuJiM0MztcdFx0cmV0dXJuIC1FTk9NRU07XG4mIzQzO1xuJiM0MztcdGlmIChwaHlkZXYtXHUwMDNlbWRpby5hZGRyID09IEFJUk9IQV9ERUZBVUxUX1BPUlQwX0FERFIpXG4mIzQzO1x0XHRzaGFyZWQtXHUwMDNlcGh5ZGV2X3AwID0gcGh5ZGV2O1xuJiM0MztcbiYjNDM7XHRwaHlkZXYtXHUwMDNlcHJpdiA9IHByaXY7XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IGFuNzU4MV9waHlfbGVkX3BvbGFyaXR5X3NldChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCBpbnQgaW5kZXgsXG4mIzQzO1x0XHRcdFx0ICAgICAgIHVuc2lnbmVkIGxvbmcgbW9kZXMpXG4mIzQzO3tcbiYjNDM7XHR1MTYgdmFsID0gMDtcbiYjNDM7XHR1MzIgbW9kZTtcbiYjNDM7XG4mIzQzO1x0aWYgKGluZGV4IFx1MDAzZT0gQUlST0hBX1BIWV9NQVhfTEVEUylcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcbiYjNDM7XHRmb3JfZWFjaF9zZXRfYml0KG1vZGUsIFx1MDAyNm1vZGVzLCBfX1BIWV9MRURfTU9ERVNfTlVNKSB7XG4mIzQzO1x0XHRzd2l0Y2ggKG1vZGUpIHtcbiYjNDM7XHRcdGNhc2UgUEhZX0xFRF9BQ1RJVkVfTE9XOlxuJiM0MztcdFx0XHR2YWwgPSBNVEtfUEhZX0xFRF9PTl9QT0xBUklUWTtcbiYjNDM7XHRcdFx0YnJlYWs7XG4mIzQzO1x0XHRjYXNlIFBIWV9MRURfQUNUSVZFX0hJR0g6XG4mIzQzO1x0XHRcdGJyZWFrO1xuJiM0MztcdFx0ZGVmYXVsdDpcbiYjNDM7XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1x0XHR9XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gcGh5X21vZGlmeV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMiwgaW5kZXggP1xuJiM0MztcdFx0XHQgICAgICBNVEtfUEhZX0xFRDFfT05fQ1RSTCA6IE1US19QSFlfTEVEMF9PTl9DVFJMLFxuJiM0MztcdFx0XHQgICAgICBNVEtfUEhZX0xFRF9PTl9QT0xBUklUWSwgdmFsKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBhbjc1ODNfcGh5X2NvbmZpZ19pbml0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgYWlyb2hhX3NvY3BoeV9zaGFyZWQgKnNoYXJlZCA9IHBoeV9wYWNrYWdlX2dldF9wcml2KHBoeWRldik7XG4mIzQzO1x0c3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldl9wMDtcbiYjNDM7XHR1OCBwaHlfb2Zmc2V0O1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdC8qIEJNQ1JfUERPV04gaXMgZW5hYmxlZCBieSBkZWZhdWx0ICovXG4mIzQzO1x0cGh5X2NsZWFyX2JpdHMocGh5ZGV2LCBNSUlfQk1DUiwgQk1DUl9QRE9XTik7XG4mIzQzO1xuJiM0MztcdHBoeWRldl9wMCA9IHNoYXJlZC1cdTAwM2VwaHlkZXZfcDA7XG4mIzQzO1x0cGh5X29mZnNldCA9IHBoeWRldi1cdTAwM2VtZGlvLmFkZHIgLSBwaHlkZXZfcDAtXHUwMDNlbWRpby5hZGRyO1xuJiM0MztcbiYjNDM7XHQvKiBGSVhNRTogUmVhZCBTb0MgTURJIFJlc2lzdGVyIFR5cGUgaWYgYXZhaWxhYmxlIG9yIGRlZmF1bHQgdG8gNVIgKi9cbiYjNDM7XHRzaGFyZWQtXHUwMDNlbWRpX3Jlc2lzdGVyX3R5cGUgPSBNRElfNVI7XG4mIzQzO1xuJiM0MztcdHNoYXJlZC1cdTAwM2VtZGlfcmVzaXN0ZXJfdHlwZSA9IE1ESV81UjtcbiYjNDM7XHRpZiAoc2hhcmVkLVx1MDAzZW1kaV9yZXNpc3Rlcl90eXBlID09IE1ESV8wUilcbiYjNDM7XHRcdHNoYXJlZC1cdTAwM2VyNTBfY2FsX3RibCA9IGFuNzU4M196Y2FsX3RvX3I1MG9obV8wUjtcbiYjNDM7XHRpZiAoc2hhcmVkLVx1MDAzZW1kaV9yZXNpc3Rlcl90eXBlID09IE1ESV81UilcbiYjNDM7XHRcdHNoYXJlZC1cdTAwM2VyNTBfY2FsX3RibCA9IGFuNzU4M196Y2FsX3RvX3I1MG9obV81UjtcbiYjNDM7XHRzaGFyZWQtXHUwMDNldHhfYW1wX2NvbXBlbnNhdGlvbl90YmwgPSBcdTAwMjZhbjc1ODNfdHhfYW1wX2NvbXBlbnNhdGlvbl90Ymw7XG4mIzQzO1xuJiM0MztcdHJldCA9IGFpcm9oYV9waHlfY2FsaWIocGh5ZGV2KTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gYWlyb2hhX3BoeV9hdXRvX3NlbGVjdF90cmFuc2Zvcm1lcihwaHlkZXYpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRyZXQgPSBhaXJvaGFfcGh5X3R4X2FtcF9jb21wZW5zYXRpb24ocGh5ZGV2KTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0LyogRW5hYmxlIElkbGUgTW9kZSBQb3dlciBTZXR0aW5nICovXG4mIzQzO1x0aWYgKHBoeV9vZmZzZXQgPT0gMCkge1xuJiM0MztcdFx0cGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQyLCAweDI2OCwgMHgwN0YxKTtcbiYjNDM7XHRcdHBoeV93cml0ZV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMiwgMHg3MDMsIDB4MzExMSk7XG4mIzQzO1x0XHRwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDIsIDB4MjcxLCAweDNDMjQpO1xuJiM0MztcdFx0cGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQyLCAweDcwMSwgMHgxMDIzKTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmIChzaGFyZWQtXHUwMDNldHJhbnNmb3JtZXJfdHlwZVtwaHlfb2Zmc2V0XSA9PSBUWE1SKSB7XG4mIzQzO1x0XHRwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIDB4MjMsIDB4MDg4MSk7XG4mIzQzO1x0XHRwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIDB4MjQsIDB4MDg4MSk7XG4mIzQzO1x0XHRwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIDB4MjUsIDB4MDg4MSk7XG4mIzQzO1x0XHRwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIDB4MjYsIDB4MDg4MSk7XG4mIzQzO1xuJiM0MztcdFx0aWYgKHNoYXJlZC1cdTAwM2VtZGlfcmVzaXN0ZXJfdHlwZSA9PSBNRElfMFIpXG4mIzQzO1x0XHRcdHBoeV93cml0ZV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSwgMHgwNSwgMHgwMjA1KTtcbiYjNDM7XHRcdGVsc2VcbiYjNDM7XHRcdFx0cGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCAweDA1LCAweDAyMDApO1xuJiM0MztcdH0gZWxzZSB7XG4mIzQzO1x0XHRpZiAoc2hhcmVkLVx1MDAzZW1kaV9yZXNpc3Rlcl90eXBlID09IE1ESV8wUikge1xuJiM0MztcdFx0XHQvKiBSWCBzZXR0aW5nIGZvciA1Ul9UWE1SIGJlZm9yZSBBTiBzZXR0aW5nICovXG4mIzQzO1x0XHRcdHBoeV93cml0ZV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSwgMHhlNywgMHg2NjY2KTtcbiYjNDM7XHRcdFx0cGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCAweGU5LCAweDAwMDMpO1xuJiM0MztcdFx0XHRwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIDB4ZmUsIDB4MDAwNik7XG4mIzQzO1x0XHRcdHBoeV93cml0ZV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSwgMHhlNiwgMHgxMTExKTtcbiYjNDM7XHRcdFx0LyogMTAwTSBzaGFycCAqL1xuJiM0MztcdFx0XHRwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIDB4MjMsIDB4MGM4Nik7XG4mIzQzO1x0XHRcdHBoeV93cml0ZV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSwgMHgyNCwgMHgwYzg2KTtcbiYjNDM7XHRcdFx0cGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCAweDI1LCAweDBjODYpO1xuJiM0MztcdFx0XHRwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIDB4MjYsIDB4MGM4Nik7XG4mIzQzO1x0XHRcdHBoeV93cml0ZV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSwgMHgwMSwgMHgwMWNiKTtcbiYjNDM7XHRcdFx0cGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCAweDAyLCAweDAxYzIpO1xuJiM0MztcdFx0XHRwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIDB4MDMsIDB4MDEwOCk7XG4mIzQzO1x0XHRcdHBoeV93cml0ZV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSwgMHgwNCwgMHgwMjExKTtcbiYjNDM7XHRcdFx0cGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCAweDA1LCAweDAyMDUpO1xuJiM0MztcdFx0XHRwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIDB4MDYsIDB4MDM4Nyk7XG4mIzQzO1x0XHRcdHBoeV93cml0ZV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSwgMHgwNywgMHgwM2NlKTtcbiYjNDM7XHRcdFx0cGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCAweDA4LCAweDAzYzgpO1xuJiM0MztcdFx0XHRwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIDB4MGIsIDB4MDAwNSk7XG4mIzQzO1x0XHR9IGVsc2Uge1xuJiM0MztcdFx0XHQvKiAxMDBNIHNoYXJwICovXG4mIzQzO1x0XHRcdHBoeV93cml0ZV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSwgMHgyMywgMHgwODg2KTtcbiYjNDM7XHRcdFx0cGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCAweDI0LCAweDA4ODYpO1xuJiM0MztcdFx0XHRwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIDB4MjUsIDB4MDg4Nik7XG4mIzQzO1x0XHRcdHBoeV93cml0ZV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSwgMHgyNiwgMHgwODg2KTtcbiYjNDM7XHRcdFx0cGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCAweDAwLCAweDAxOTUpO1xuJiM0MztcdFx0XHRwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIDB4MDEsIDB4MDFjYik7XG4mIzQzO1x0XHRcdHBoeV93cml0ZV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSwgMHgwMiwgMHgwMWMyKTtcbiYjNDM7XHRcdFx0cGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCAweDAzLCAweDAxMDgpO1xuJiM0MztcdFx0XHRwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIDB4MDQsIDB4MDIxMSk7XG4mIzQzO1x0XHRcdHBoeV93cml0ZV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSwgMHgwNSwgMHgwMjA1KTtcbiYjNDM7XHRcdFx0cGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCAweDA2LCAweDAzODcpO1xuJiM0MztcdFx0XHRwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIDB4MDcsIDB4MDNjZSk7XG4mIzQzO1x0XHRcdHBoeV93cml0ZV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSwgMHgwOCwgMHgwM2MzKTtcbiYjNDM7XHRcdFx0cGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCAweDBhLCAweDAwMTApO1xuJiM0MztcdFx0XHRwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIDB4MGIsIDB4MDAwNSk7XG4mIzQzO1x0XHR9XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHQvKiBSWCBTZXR0aW5nICovXG4mIzQzO1x0cGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCAweDNjLCAweGMwMDApO1xuJiM0MztcdHBoeV93cml0ZV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSwgMHgzZCwgMHgwMDAwKTtcbiYjNDM7XHRwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIDB4M2UsIDB4YzAwMCk7XG4mIzQzO1xuJiM0MztcdC8qIEVFRSBzZXR0aW5nICovXG4mIzQzO1x0cGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX0FOLCAweDNjLCAweDAwMDApO1xuJiM0MztcbiYjNDM7XHQvKiAxME0gc2V0dGluZ3MgKi9cbiYjNDM7XHRwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIDB4MWEzLCAweDAwZDIpO1xuJiM0MztcdHBoeV93cml0ZV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSwgMHgxYTQsIDB4MDEwZSk7XG4mIzQzO1x0cGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQyLCAweDI3YiwgMHgxMTc3KTtcbiYjNDM7XHRwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDIsIDB4MjdjLCAweDA4MDgpO1xuJiM0MztcbiYjNDM7XHRwaHlfc2VsZWN0X3BhZ2UocGh5ZGV2LCBNVEtfUEhZX1BBR0VfRVhURU5ERURfMyk7XG4mIzQzO1x0X19waHlfd3JpdGUocGh5ZGV2LCAweDE0LCAweDE5MCk7XG4mIzQzO1x0cGh5X3Jlc3RvcmVfcGFnZShwaHlkZXYsIE1US19QSFlfUEFHRV9TVEFOREFSRCwgMCk7XG4mIzQzO1xuJiM0MztcdHBoeV9zZWxlY3RfcGFnZShwaHlkZXYsIE1US19QSFlfUEFHRV9FWFRFTkRFRF8xKTtcbiYjNDM7XHRfX3BoeV93cml0ZShwaHlkZXYsIDB4MTQsIDB4M2ExOCk7XG4mIzQzO1x0cGh5X3Jlc3RvcmVfcGFnZShwaHlkZXYsIE1US19QSFlfUEFHRV9TVEFOREFSRCwgMCk7XG4mIzQzO1xuJiM0MztcdHBoeV93cml0ZShwaHlkZXYsIDB4OSwgMHgwNjAwKTtcbiYjNDM7XG4mIzQzO1x0LyogRUVFIGtlZXAgb25seSBQYWlyIEEgT04gKi9cbiYjNDM7XHRwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIDB4NjMwLCAweDAwNkUpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHN0cnVjdCBwaHlfZHJpdmVyIG10a19zb2NwaHlfZHJpdmVyW10gPSB7XG4mIzQzO1x0e1xuJiM0MztcdFx0UEhZX0lEX01BVENIX0VYQUNUKEFJUk9IQV9HUEhZX0lEX0FONzU4MSksXG4mIzQzO1x0XHQubmFtZVx0XHQ9IFwmIzM0O0Fpcm9oYSBBTjc1ODEgUEhZXCYjMzQ7LFxuJiM0MztcdFx0LmNvbmZpZ19pbml0XHQ9IGFuNzU4MV9waHlfY29uZmlnX2luaXQsXG4mIzQzO1x0XHQuY29uZmlnX2ludHJcdD0gZ2VucGh5X25vX2NvbmZpZ19pbnRyLFxuJiM0MztcdFx0LmhhbmRsZV9pbnRlcnJ1cHQgPSBnZW5waHlfaGFuZGxlX2ludGVycnVwdF9ub19hY2ssXG4mIzQzO1x0XHQucHJvYmVcdFx0PSBhbjc1ODFfcGh5X3Byb2JlLFxuJiM0MztcdFx0LmxlZF9ibGlua19zZXRcdD0gbXQ3OTh4X3BoeV9sZWRfYmxpbmtfc2V0LFxuJiM0MztcdFx0LmxlZF9icmlnaHRuZXNzX3NldCA9IG10Nzk4eF9waHlfbGVkX2JyaWdodG5lc3Nfc2V0LFxuJiM0MztcdFx0LmxlZF9od19pc19zdXBwb3J0ZWQgPSBtdDc5OHhfcGh5X2xlZF9od19pc19zdXBwb3J0ZWQsXG4mIzQzO1x0XHQubGVkX2h3X2NvbnRyb2xfc2V0ID0gbXQ3OTh4X3BoeV9sZWRfaHdfY29udHJvbF9zZXQsXG4mIzQzO1x0XHQubGVkX2h3X2NvbnRyb2xfZ2V0ID0gbXQ3OTh4X3BoeV9sZWRfaHdfY29udHJvbF9nZXQsXG4mIzQzO1x0XHQubGVkX3BvbGFyaXR5X3NldCA9IGFuNzU4MV9waHlfbGVkX3BvbGFyaXR5X3NldCxcbiYjNDM7XHRcdC5yZWFkX3BhZ2VcdD0gbXRrX3BoeV9yZWFkX3BhZ2UsXG4mIzQzO1x0XHQud3JpdGVfcGFnZVx0PSBtdGtfcGh5X3dyaXRlX3BhZ2UsXG4mIzQzO1x0fSxcbiYjNDM7XHR7XG4mIzQzO1x0XHRQSFlfSURfTUFUQ0hfRVhBQ1QoQUlST0hBX0dQSFlfSURfQU43NTgzKSxcbiYjNDM7XHRcdC5uYW1lXHRcdD0gXCYjMzQ7QWlyb2hhIEFONzU4MyBQSFlcJiMzNDssXG4mIzQzO1x0XHQuY29uZmlnX2luaXRcdD0gYW43NTgzX3BoeV9jb25maWdfaW5pdCxcbiYjNDM7XHRcdC5wcm9iZVx0XHQ9IGFuNzU4MV9waHlfcHJvYmUsXG4mIzQzO1x0XHQubGVkX2JsaW5rX3NldFx0PSBtdDc5OHhfcGh5X2xlZF9ibGlua19zZXQsXG4mIzQzO1x0XHQubGVkX2JyaWdodG5lc3Nfc2V0ID0gbXQ3OTh4X3BoeV9sZWRfYnJpZ2h0bmVzc19zZXQsXG4mIzQzO1x0XHQubGVkX2h3X2lzX3N1cHBvcnRlZCA9IG10Nzk4eF9waHlfbGVkX2h3X2lzX3N1cHBvcnRlZCxcbiYjNDM7XHRcdC5sZWRfaHdfY29udHJvbF9zZXQgPSBtdDc5OHhfcGh5X2xlZF9od19jb250cm9sX3NldCxcbiYjNDM7XHRcdC5sZWRfaHdfY29udHJvbF9nZXQgPSBtdDc5OHhfcGh5X2xlZF9od19jb250cm9sX2dldCxcbiYjNDM7XHRcdC5sZWRfcG9sYXJpdHlfc2V0ID0gYW43NTgxX3BoeV9sZWRfcG9sYXJpdHlfc2V0LFxuJiM0MztcdFx0LnJlYWRfcGFnZVx0PSBtdGtfcGh5X3JlYWRfcGFnZSxcbiYjNDM7XHRcdC53cml0ZV9wYWdlXHQ9IG10a19waHlfd3JpdGVfcGFnZSxcbiYjNDM7XHR9LFxuJiM0Mzt9O1xuJiM0MztcbiYjNDM7bW9kdWxlX3BoeV9kcml2ZXIobXRrX3NvY3BoeV9kcml2ZXIpO1xuJiM0MztcbiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBtZGlvX2RldmljZV9pZCBfX21heWJlX3VudXNlZCBhaXJvaGFfc29jcGh5X3RibFtdID0ge1xuJiM0MztcdHsgUEhZX0lEX01BVENIX0VYQUNUKEFJUk9IQV9HUEhZX0lEX0FONzU4MSkgfSxcbiYjNDM7XHR7IFBIWV9JRF9NQVRDSF9FWEFDVChBSVJPSEFfR1BIWV9JRF9BTjc1ODMpIH0sXG4mIzQzO1x0eyB9XG4mIzQzO307XG4mIzQzO1xuJiM0MztNT0RVTEVfREVTQ1JJUFRJT04oXCYjMzQ7QWlyb2hhIFNvQyBHaWdhYml0IEV0aGVybmV0IFBIWSBkcml2ZXJcJiMzNDspO1xuJiM0MztNT0RVTEVfQVVUSE9SKFwmIzM0O0NocmlzdGlhbiBNYXJhbmdpIFx1MDAzY2Fuc3VlbHNtdGhAZ21haWwuY29tXHUwMDNlXCYjMzQ7KTtcbiYjNDM7TU9EVUxFX0xJQ0VOU0UoXCYjMzQ7R1BMXCYjMzQ7KTtcbiYjNDM7TU9EVUxFX1ZFUlNJT04oXCYjMzQ7MDEuMDEuMjAyNjAzMDZcJiMzNDspO1xuJiM0MztcbiYjNDM7TU9EVUxFX0RFVklDRV9UQUJMRShtZGlvLCBhaXJvaGFfc29jcGh5X3RibCk7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGh5L21lZGlhdGVrL210ay1nZS1zb2MuYyBiL2RyaXZlcnMvbmV0L3BoeS9tZWRpYXRlay9tdGstZ2Utc29jLmNcbmluZGV4IDlhNTQ5NDk2NDRkNWE1Li44NjhhZTA4OTAxM2QzZCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3BoeS9tZWRpYXRlay9tdGstZ2Utc29jLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3BoeS9tZWRpYXRlay9tdGstZ2Utc29jLmNcbkBAIC0xMSwzMjIgJiM0MzsxMSwxMCBAQFxuIFxuICNpbmNsdWRlIFwmIzM0Oy4uL3BoeWxpYi5oXCYjMzQ7XG4gI2luY2x1ZGUgXCYjMzQ7bXRrLmhcJiMzNDtcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7bXRrLWdlLXNvYy5oXCYjMzQ7XG4gXG4gI2RlZmluZSBNVEtfUEhZX01BWF9MRURTXHRcdFx0MlxuIFxuLSNkZWZpbmUgTVRLX0dQSFlfSURfTVQ3OTgxXHRcdFx0MHgwM2EyOTQ2MVxuLSNkZWZpbmUgTVRLX0dQSFlfSURfTVQ3OTg4XHRcdFx0MHgwM2EyOTQ4MVxuLSNkZWZpbmUgTVRLX0dQSFlfSURfQU43NTgxXHRcdFx0MHgwM2EyOTRjMVxuLSNkZWZpbmUgTVRLX0dQSFlfSURfQU43NTgzXHRcdFx0MHhjMGZmMDQyMFxuLVxuLSNkZWZpbmUgTVRLX0VYVF9QQUdFX0FDQ0VTU1x0XHRcdDB4MWZcbi0jZGVmaW5lIE1US19QSFlfUEFHRV9TVEFOREFSRFx0XHRcdDB4MDAwMFxuLSNkZWZpbmUgTVRLX1BIWV9QQUdFX0VYVEVOREVEXzNcdFx0XHQweDAwMDNcbi1cbi0jZGVmaW5lIE1US19QSFlfTFBJX1JFR18xNFx0XHRcdDB4MTRcbi0jZGVmaW5lIE1US19QSFlfTFBJX1dBS0VfVElNRVJfMTAwMF9NQVNLXHRHRU5NQVNLKDgsIDApXG4tXG4tI2RlZmluZSBNVEtfUEhZX0xQSV9SRUdfMWNcdFx0XHQweDFjXG4tI2RlZmluZSBNVEtfUEhZX1NNSV9ERVRfT05fVEhSRVNIX01BU0tcdFx0R0VOTUFTSygxMywgOClcbi1cbi0jZGVmaW5lIE1US19QSFlfUEFHRV9FWFRFTkRFRF8yQTMwXHRcdDB4MmEzMFxuLVxuLS8qIFJlZ2lzdGVycyBvbiBUb2tlbiBSaW5nIGRlYnVnIG5vZGVzICovXG4tLyogY2hfYWRkciA9IDB4MCwgbm9kZV9hZGRyID0gMHg3LCBkYXRhX2FkZHIgPSAweDE1ICovXG4tLyogTm9ybU1zZUxvVGhyZXNoICovXG4tI2RlZmluZSBOT1JNQUxfTVNFX0xPX1RIUkVTSF9NQVNLXHRcdEdFTk1BU0soMTUsIDgpXG4tXG4tLyogY2hfYWRkciA9IDB4MCwgbm9kZV9hZGRyID0gMHhmLCBkYXRhX2FkZHIgPSAweDNjICovXG4tLyogUmVtQWNrQ250TGltaXRDdHJsICovXG4tI2RlZmluZSBSRU1PVEVfQUNLX0NPVU5UX0xJTUlUX0NUUkxfTUFTS1x0R0VOTUFTSygyLCAxKVxuLVxuLS8qIGNoX2FkZHIgPSAweDEsIG5vZGVfYWRkciA9IDB4ZCwgZGF0YV9hZGRyID0gMHgyMCAqL1xuLS8qIFZjb1NsaWNlclRocmVzaEJpdHNIaWdoICovXG4tI2RlZmluZSBWQ09fU0xJQ0VSX1RIUkVTSF9ISUdIX01BU0tcdFx0R0VOTUFTSygyMywgMClcbi1cbi0vKiBjaF9hZGRyID0gMHgxLCBub2RlX2FkZHIgPSAweGYsIGRhdGFfYWRkciA9IDB4MCAqL1xuLS8qIERmZVRhaWxFbmFibGVWZ2FUaHJlc2gxMDAwICovXG4tI2RlZmluZSBERkVfVEFJTF9FQU5CTEVfVkdBX1RSSEVTSF8xMDAwXHRcdEdFTk1BU0soNSwgMSlcbi1cbi0vKiBjaF9hZGRyID0gMHgxLCBub2RlX2FkZHIgPSAweGYsIGRhdGFfYWRkciA9IDB4MSAqL1xuLS8qIE1ydmxUckZpeDEwMEtwICovXG4tI2RlZmluZSBNUlZMX1RSX0ZJWF8xMDBLUF9NQVNLXHRcdFx0R0VOTUFTSygyMiwgMjApXG4tLyogTXJ2bFRyRml4MTAwS2YgKi9cbi0jZGVmaW5lIE1SVkxfVFJfRklYXzEwMEtGX01BU0tcdFx0XHRHRU5NQVNLKDE5LCAxNylcbi0vKiBNcnZsVHJGaXgxMDAwS3AgKi9cbi0jZGVmaW5lIE1SVkxfVFJfRklYXzEwMDBLUF9NQVNLXHRcdFx0R0VOTUFTSygxNiwgMTQpXG4tLyogTXJ2bFRyRml4MTAwMEtmICovXG4tI2RlZmluZSBNUlZMX1RSX0ZJWF8xMDAwS0ZfTUFTS1x0XHRcdEdFTk1BU0soMTMsIDExKVxuLVxuLS8qIGNoX2FkZHIgPSAweDEsIG5vZGVfYWRkciA9IDB4ZiwgZGF0YV9hZGRyID0gMHgxMiAqL1xuLS8qIFZnYURlY1JhdGUgKi9cbi0jZGVmaW5lIFZHQV9ERUNJTUFUSU9OX1JBVEVfTUFTS1x0XHRHRU5NQVNLKDgsIDUpXG4tXG4tLyogY2hfYWRkciA9IDB4MSwgbm9kZV9hZGRyID0gMHhmLCBkYXRhX2FkZHIgPSAweDE3ICovXG4tLyogU2x2RFNQcmVhZHlUaW1lICovXG4tI2RlZmluZSBTTEFWRV9EU1BfUkVBRFlfVElNRV9NQVNLXHRcdEdFTk1BU0soMjIsIDE1KVxuLS8qIE1hc0RTUHJlYWR5VGltZSAqL1xuLSNkZWZpbmUgTUFTVEVSX0RTUF9SRUFEWV9USU1FX01BU0tcdFx0R0VOTUFTSygxNCwgNylcbi1cbi0vKiBjaF9hZGRyID0gMHgxLCBub2RlX2FkZHIgPSAweGYsIGRhdGFfYWRkciA9IDB4MTggKi9cbi0vKiBFbmFiUmFuZFVwZFRyaWcgKi9cbi0jZGVmaW5lIEVOQUJMRV9SQU5ET01fVVBET1dOX0NPVU5URVJfVFJJR0dFUlx0QklUKDgpXG4tXG4tLyogY2hfYWRkciA9IDB4MSwgbm9kZV9hZGRyID0gMHhmLCBkYXRhX2FkZHIgPSAweDIwICovXG4tLyogUmVzZXRTeW5jT2Zmc2V0ICovXG4tI2RlZmluZSBSRVNFVF9TWU5DX09GRlNFVF9NQVNLXHRcdFx0R0VOTUFTSygxMSwgOClcbi1cbi0vKiBjaF9hZGRyID0gMHgyLCBub2RlX2FkZHIgPSAweGQsIGRhdGFfYWRkciA9IDB4MCAqL1xuLS8qIEZmZVVwZEdhaW5Gb3JjZVZhbCAqL1xuLSNkZWZpbmUgRkZFX1VQREFURV9HQUlOX0ZPUkNFX1ZBTF9NQVNLXHRcdEdFTk1BU0soOSwgNylcbi0vKiBGZmVVcGRHYWluRm9yY2UgKi9cbi0jZGVmaW5lIEZGRV9VUERBVEVfR0FJTl9GT1JDRVx0XHRcdEJJVCg2KVxuLVxuLS8qIGNoX2FkZHIgPSAweDIsIG5vZGVfYWRkciA9IDB4ZCwgZGF0YV9hZGRyID0gMHgzICovXG4tLyogVHJGcmVlemUgKi9cbi0jZGVmaW5lIFRSX0ZSRUVaRV9NQVNLXHRcdFx0XHRHRU5NQVNLKDExLCAwKVxuLVxuLS8qIGNoX2FkZHIgPSAweDIsIG5vZGVfYWRkciA9IDB4ZCwgZGF0YV9hZGRyID0gMHg2ICovXG4tLyogU1M6IFN0ZWFkeS1zdGF0ZSwgS1A6IFByb3BvcnRpb25hbCBHYWluICovXG4tLyogU1NUcktwMTAwICovXG4tI2RlZmluZSBTU19UUl9LUDEwMF9NQVNLXHRcdFx0R0VOTUFTSygyMSwgMTkpXG4tLyogU1NUcktmMTAwICovXG4tI2RlZmluZSBTU19UUl9LRjEwMF9NQVNLXHRcdFx0R0VOTUFTSygxOCwgMTYpXG4tLyogU1NUcktwMTAwME1hcyAqL1xuLSNkZWZpbmUgU1NfVFJfS1AxMDAwX01BU1RFUl9NQVNLXHRcdEdFTk1BU0soMTUsIDEzKVxuLS8qIFNTVHJLZjEwMDBNYXMgKi9cbi0jZGVmaW5lIFNTX1RSX0tGMTAwMF9NQVNURVJfTUFTS1x0XHRHRU5NQVNLKDEyLCAxMClcbi0vKiBTU1RyS3AxMDAwU2x2ICovXG4tI2RlZmluZSBTU19UUl9LUDEwMDBfU0xBVkVfTUFTS1x0XHRcdEdFTk1BU0soOSwgNylcbi0vKiBTU1RyS2YxMDAwU2x2ICovXG4tI2RlZmluZSBTU19UUl9LRjEwMDBfU0xBVkVfTUFTS1x0XHRcdEdFTk1BU0soNiwgNClcbi1cbi0vKiBjaF9hZGRyID0gMHgyLCBub2RlX2FkZHIgPSAweGQsIGRhdGFfYWRkciA9IDB4OCAqL1xuLS8qIGNsZWFyIHRoaXMgYml0IGlmIHdhbm5hIHNlbGVjdCBmcm9tIEFGRSAqL1xuLS8qIFJlZ3NpZ2RldF9zZWxfMTAwMCAqL1xuLSNkZWZpbmUgRUVFMTAwMF9TRUxFQ1RfU0lHTkFMX0RFVEVDVElPTl9GUk9NX0RGRVx0QklUKDQpXG4tXG4tLyogY2hfYWRkciA9IDB4Miwgbm9kZV9hZGRyID0gMHhkLCBkYXRhX2FkZHIgPSAweGQgKi9cbi0vKiBSZWdFRUVfc3QyVHJLZjEwMDAgKi9cbi0jZGVmaW5lIEVFRTEwMDBfU1RBR0UyX1RSX0tGX01BU0tcdFx0R0VOTUFTSygxMywgMTEpXG4tXG4tLyogY2hfYWRkciA9IDB4Miwgbm9kZV9hZGRyID0gMHhkLCBkYXRhX2FkZHIgPSAweGYgKi9cbi0vKiBSZWdFRUVfc2x2X3dha2V0cl90aW1lcl90YXIgKi9cbi0jZGVmaW5lIFNMQVZFX1dBS0VUUl9USU1FUl9NQVNLXHRcdFx0R0VOTUFTSygyMCwgMTEpXG4tLyogUmVnRUVFX3Nsdl9yZW10eF90aW1lcl90YXIgKi9cbi0jZGVmaW5lIFNMQVZFX1JFTVRYX1RJTUVSX01BU0tcdFx0XHRHRU5NQVNLKDEwLCAxKVxuLVxuLS8qIGNoX2FkZHIgPSAweDIsIG5vZGVfYWRkciA9IDB4ZCwgZGF0YV9hZGRyID0gMHgxMCAqL1xuLS8qIFJlZ0VFRV9zbHZfd2FrZV9pbnRfdGltZXJfdGFyICovXG4tI2RlZmluZSBTTEFWRV9XQUtFSU5UX1RJTUVSX01BU0tcdFx0R0VOTUFTSygxMCwgMSlcbi1cbi0vKiBjaF9hZGRyID0gMHgyLCBub2RlX2FkZHIgPSAweGQsIGRhdGFfYWRkciA9IDB4MTQgKi9cbi0vKiBSZWdFRUVfdHJmcmVlemVfdGltZXIyICovXG4tI2RlZmluZSBUUl9GUkVFWkVfVElNRVIyX01BU0tcdFx0XHRHRU5NQVNLKDksIDApXG4tXG4tLyogY2hfYWRkciA9IDB4Miwgbm9kZV9hZGRyID0gMHhkLCBkYXRhX2FkZHIgPSAweDFjICovXG4tLyogUmVnRUVFMTAwU3RnMV90YXIgKi9cbi0jZGVmaW5lIEVFRTEwMF9MUFNZTkNfU1RBR0UxX1VQREFURV9USU1FUl9NQVNLXHRHRU5NQVNLKDgsIDApXG4tXG4tLyogY2hfYWRkciA9IDB4Miwgbm9kZV9hZGRyID0gMHhkLCBkYXRhX2FkZHIgPSAweDI1ICovXG4tLyogUkVHRUVFX3dha2Vfc2x2X3RyX3dhaXRfZGZlc2lnZGV0X2VuICovXG4tI2RlZmluZSBXQUtFX1NMQVZFX1RSX1dBSVRfREZFX0RFVEVDVElPTl9FTlx0QklUKDExKVxuLVxuLSNkZWZpbmUgQU5BTE9HX0lOVEVSTkFMX09QRVJBVElPTl9NQVhfVVNcdDIwXG4tI2RlZmluZSBUWFJFU0VSVkVfTUlOXHRcdFx0XHQwXG4tI2RlZmluZSBUWFJFU0VSVkVfTUFYXHRcdFx0XHQ3XG4tXG4tI2RlZmluZSBNVEtfUEhZX0FOQVJHX1JHXHRcdFx0MHgxMFxuLSNkZWZpbmUgICBNVEtfUEhZX1RDTEtPRkZTRVRfTUFTS1x0XHRHRU5NQVNLKDEyLCA4KVxuLVxuLS8qIFJlZ2lzdGVycyBvbiBNRElPX01NRF9WRU5EMSAqL1xuLSNkZWZpbmUgTVRLX1BIWV9UWFZMRF9EQV9SR1x0XHRcdDB4MTJcbi0jZGVmaW5lICAgTVRLX1BIWV9EQV9UWF9JMk1QQl9BX0dCRV9NQVNLXHRHRU5NQVNLKDE1LCAxMClcbi0jZGVmaW5lICAgTVRLX1BIWV9EQV9UWF9JMk1QQl9BX1RCVF9NQVNLXHRHRU5NQVNLKDUsIDApXG4tXG4tI2RlZmluZSBNVEtfUEhZX1RYX0kyTVBCX1RFU1RfTU9ERV9BMlx0XHQweDE2XG4tI2RlZmluZSAgIE1US19QSFlfREFfVFhfSTJNUEJfQV9IQlRfTUFTS1x0R0VOTUFTSygxNSwgMTApXG4tI2RlZmluZSAgIE1US19QSFlfREFfVFhfSTJNUEJfQV9UU1RfTUFTS1x0R0VOTUFTSyg1LCAwKVxuLVxuLSNkZWZpbmUgTVRLX1BIWV9UWF9JMk1QQl9URVNUX01PREVfQjFcdFx0MHgxN1xuLSNkZWZpbmUgICBNVEtfUEhZX0RBX1RYX0kyTVBCX0JfR0JFX01BU0tcdEdFTk1BU0soMTMsIDgpXG4tI2RlZmluZSAgIE1US19QSFlfREFfVFhfSTJNUEJfQl9UQlRfTUFTS1x0R0VOTUFTSyg1LCAwKVxuLVxuLSNkZWZpbmUgTVRLX1BIWV9UWF9JMk1QQl9URVNUX01PREVfQjJcdFx0MHgxOFxuLSNkZWZpbmUgICBNVEtfUEhZX0RBX1RYX0kyTVBCX0JfSEJUX01BU0tcdEdFTk1BU0soMTMsIDgpXG4tI2RlZmluZSAgIE1US19QSFlfREFfVFhfSTJNUEJfQl9UU1RfTUFTS1x0R0VOTUFTSyg1LCAwKVxuLVxuLSNkZWZpbmUgTVRLX1BIWV9UWF9JMk1QQl9URVNUX01PREVfQzFcdFx0MHgxOVxuLSNkZWZpbmUgICBNVEtfUEhZX0RBX1RYX0kyTVBCX0NfR0JFX01BU0tcdEdFTk1BU0soMTMsIDgpXG4tI2RlZmluZSAgIE1US19QSFlfREFfVFhfSTJNUEJfQ19UQlRfTUFTS1x0R0VOTUFTSyg1LCAwKVxuLVxuLSNkZWZpbmUgTVRLX1BIWV9UWF9JMk1QQl9URVNUX01PREVfQzJcdFx0MHgyMFxuLSNkZWZpbmUgICBNVEtfUEhZX0RBX1RYX0kyTVBCX0NfSEJUX01BU0tcdEdFTk1BU0soMTMsIDgpXG4tI2RlZmluZSAgIE1US19QSFlfREFfVFhfSTJNUEJfQ19UU1RfTUFTS1x0R0VOTUFTSyg1LCAwKVxuLVxuLSNkZWZpbmUgTVRLX1BIWV9UWF9JMk1QQl9URVNUX01PREVfRDFcdFx0MHgyMVxuLSNkZWZpbmUgICBNVEtfUEhZX0RBX1RYX0kyTVBCX0RfR0JFX01BU0tcdEdFTk1BU0soMTMsIDgpXG4tI2RlZmluZSAgIE1US19QSFlfREFfVFhfSTJNUEJfRF9UQlRfTUFTS1x0R0VOTUFTSyg1LCAwKVxuLVxuLSNkZWZpbmUgTVRLX1BIWV9UWF9JMk1QQl9URVNUX01PREVfRDJcdFx0MHgyMlxuLSNkZWZpbmUgICBNVEtfUEhZX0RBX1RYX0kyTVBCX0RfSEJUX01BU0tcdEdFTk1BU0soMTMsIDgpXG4tI2RlZmluZSAgIE1US19QSFlfREFfVFhfSTJNUEJfRF9UU1RfTUFTS1x0R0VOTUFTSyg1LCAwKVxuLVxuLSNkZWZpbmUgTVRLX1BIWV9SWEFEQ19DVFJMX1JHN1x0XHRcdDB4YzZcbi0jZGVmaW5lICAgTVRLX1BIWV9EQV9BRF9CVUZfQklBU19MUF9NQVNLXHRHRU5NQVNLKDksIDgpXG4tXG4tI2RlZmluZSBNVEtfUEhZX1JYQURDX0NUUkxfUkc5XHRcdFx0MHhjOFxuLSNkZWZpbmUgICBNVEtfUEhZX0RBX1JYX1BTQk5fVEJUX01BU0tcdFx0R0VOTUFTSygxNCwgMTIpXG4tI2RlZmluZSAgIE1US19QSFlfREFfUlhfUFNCTl9IQlRfTUFTS1x0XHRHRU5NQVNLKDEwLCA4KVxuLSNkZWZpbmUgICBNVEtfUEhZX0RBX1JYX1BTQk5fR0JFX01BU0tcdFx0R0VOTUFTSyg2LCA0KVxuLSNkZWZpbmUgICBNVEtfUEhZX0RBX1JYX1BTQk5fTFBfTUFTS1x0XHRHRU5NQVNLKDIsIDApXG4tXG4tI2RlZmluZSBNVEtfUEhZX0xET19PVVRQVVRfVlx0XHRcdDB4ZDdcbi1cbi0jZGVmaW5lIE1US19QSFlfUkdfQU5BX0NBTF9SRzBcdFx0XHQweGRiXG4tI2RlZmluZSAgIE1US19QSFlfUkdfQ0FMX0NLSU5WXHRcdFx0QklUKDEyKVxuLSNkZWZpbmUgICBNVEtfUEhZX1JHX0FOQV9DQUxFTlx0XHRcdEJJVCg4KVxuLSNkZWZpbmUgICBNVEtfUEhZX1JHX1pDQUxFTl9BXHRcdFx0QklUKDApXG4tXG4tI2RlZmluZSBNVEtfUEhZX1JHX0FOQV9DQUxfUkcxXHRcdFx0MHhkY1xuLSNkZWZpbmUgICBNVEtfUEhZX1JHX1pDQUxFTl9CXHRcdFx0QklUKDEyKVxuLSNkZWZpbmUgICBNVEtfUEhZX1JHX1pDQUxFTl9DXHRcdFx0QklUKDgpXG4tI2RlZmluZSAgIE1US19QSFlfUkdfWkNBTEVOX0RcdFx0XHRCSVQoNClcbi0jZGVmaW5lICAgTVRLX1BIWV9SR19UWFZPU19DQUxFTlx0XHRCSVQoMClcbi1cbi0jZGVmaW5lIE1US19QSFlfUkdfQU5BX0NBTF9SRzVcdFx0XHQweGUwXG4tI2RlZmluZSAgIE1US19QSFlfUkdfUkVYVF9UUklNX01BU0tcdFx0R0VOTUFTSygxMywgOClcbi1cbi0jZGVmaW5lIE1US19QSFlfUkdfVFhfRklMVEVSXHRcdFx0MHhmZVxuLVxuLSNkZWZpbmUgTVRLX1BIWV9SR19MUElfUENTX0RTUF9DVFJMX1JFRzEyMFx0MHgxMjBcbi0jZGVmaW5lICAgTVRLX1BIWV9MUElfU0lHX0VOX0xPX1RIUkVTSDEwMDBfTUFTS1x0R0VOTUFTSygxMiwgOClcbi0jZGVmaW5lICAgTVRLX1BIWV9MUElfU0lHX0VOX0hJX1RIUkVTSDEwMDBfTUFTS1x0R0VOTUFTSyg0LCAwKVxuLVxuLSNkZWZpbmUgTVRLX1BIWV9SR19MUElfUENTX0RTUF9DVFJMX1JFRzEyMlx0MHgxMjJcbi0jZGVmaW5lICAgTVRLX1BIWV9MUElfTk9STV9NU0VfSElfVEhSRVNIMTAwMF9NQVNLXHRHRU5NQVNLKDcsIDApXG4tXG4tI2RlZmluZSBNVEtfUEhZX1JHX1RFU1RNVVhfQURDX0NUUkxcdFx0MHgxNDRcbi0jZGVmaW5lICAgTVRLX1BIWV9SR19UWEVOX0RJR19NQVNLXHRcdEdFTk1BU0soNSwgNSlcbi1cbi0jZGVmaW5lIE1US19QSFlfUkdfQ1JfVFhfQU1QX09GRlNFVF9BX0JcdFx0MHgxNzJcbi0jZGVmaW5lICAgTVRLX1BIWV9DUl9UWF9BTVBfT0ZGU0VUX0FfTUFTS1x0R0VOTUFTSygxMywgOClcbi0jZGVmaW5lICAgTVRLX1BIWV9DUl9UWF9BTVBfT0ZGU0VUX0JfTUFTS1x0R0VOTUFTSyg2LCAwKVxuLVxuLSNkZWZpbmUgTVRLX1BIWV9SR19DUl9UWF9BTVBfT0ZGU0VUX0NfRFx0XHQweDE3M1xuLSNkZWZpbmUgICBNVEtfUEhZX0NSX1RYX0FNUF9PRkZTRVRfQ19NQVNLXHRHRU5NQVNLKDEzLCA4KVxuLSNkZWZpbmUgICBNVEtfUEhZX0NSX1RYX0FNUF9PRkZTRVRfRF9NQVNLXHRHRU5NQVNLKDYsIDApXG4tXG4tI2RlZmluZSBNVEtfUEhZX1JHX0FEX0NBTF9DT01QXHRcdFx0MHgxN2Fcbi0jZGVmaW5lICAgTVRLX1BIWV9BRF9DQUxfQ09NUF9PVVRfTUFTS1x0XHRHRU5NQVNLKDgsIDgpXG4tXG4tI2RlZmluZSBNVEtfUEhZX1JHX0FEX0NBTF9DTEtcdFx0XHQweDE3YlxuLSNkZWZpbmUgICBNVEtfUEhZX0RBX0NBTF9DTEtcdFx0XHRCSVQoMClcbi1cbi0jZGVmaW5lIE1US19QSFlfUkdfQURfQ0FMSU5cdFx0XHQweDE3Y1xuLSNkZWZpbmUgICBNVEtfUEhZX0RBX0NBTElOX0ZMQUdcdFx0XHRCSVQoMClcbi1cbi0jZGVmaW5lIE1US19QSFlfUkdfREFTTl9EQUNfSU4wX0FcdFx0MHgxN2Rcbi0jZGVmaW5lICAgTVRLX1BIWV9EQVNOX0RBQ19JTjBfQV9NQVNLXHRcdEdFTk1BU0soOSwgMClcbi1cbi0jZGVmaW5lIE1US19QSFlfUkdfREFTTl9EQUNfSU4wX0JcdFx0MHgxN2Vcbi0jZGVmaW5lICAgTVRLX1BIWV9EQVNOX0RBQ19JTjBfQl9NQVNLXHRcdEdFTk1BU0soOSwgMClcbi1cbi0jZGVmaW5lIE1US19QSFlfUkdfREFTTl9EQUNfSU4wX0NcdFx0MHgxN2Zcbi0jZGVmaW5lICAgTVRLX1BIWV9EQVNOX0RBQ19JTjBfQ19NQVNLXHRcdEdFTk1BU0soOSwgMClcbi1cbi0jZGVmaW5lIE1US19QSFlfUkdfREFTTl9EQUNfSU4wX0RcdFx0MHgxODBcbi0jZGVmaW5lICAgTVRLX1BIWV9EQVNOX0RBQ19JTjBfRF9NQVNLXHRcdEdFTk1BU0soOSwgMClcbi1cbi0jZGVmaW5lIE1US19QSFlfUkdfREFTTl9EQUNfSU4xX0FcdFx0MHgxODFcbi0jZGVmaW5lICAgTVRLX1BIWV9EQVNOX0RBQ19JTjFfQV9NQVNLXHRcdEdFTk1BU0soOSwgMClcbi1cbi0jZGVmaW5lIE1US19QSFlfUkdfREFTTl9EQUNfSU4xX0JcdFx0MHgxODJcbi0jZGVmaW5lICAgTVRLX1BIWV9EQVNOX0RBQ19JTjFfQl9NQVNLXHRcdEdFTk1BU0soOSwgMClcbi1cbi0jZGVmaW5lIE1US19QSFlfUkdfREFTTl9EQUNfSU4xX0NcdFx0MHgxODNcbi0jZGVmaW5lICAgTVRLX1BIWV9EQVNOX0RBQ19JTjFfQ19NQVNLXHRcdEdFTk1BU0soOSwgMClcbi1cbi0jZGVmaW5lIE1US19QSFlfUkdfREFTTl9EQUNfSU4xX0RcdFx0MHgxODRcbi0jZGVmaW5lICAgTVRLX1BIWV9EQVNOX0RBQ19JTjFfRF9NQVNLXHRcdEdFTk1BU0soOSwgMClcbi1cbi0jZGVmaW5lIE1US19QSFlfUkdfREVWMUVfUkVHMTliXHRcdFx0MHgxOWJcbi0jZGVmaW5lICAgTVRLX1BIWV9CWVBBU1NfRFNQX0xQSV9SRUFEWVx0XHRCSVQoOClcbi1cbi0jZGVmaW5lIE1US19QSFlfUkdfTFBfSUlSMl9LMV9MXHRcdFx0MHgyMmFcbi0jZGVmaW5lIE1US19QSFlfUkdfTFBfSUlSMl9LMV9VXHRcdFx0MHgyMmJcbi0jZGVmaW5lIE1US19QSFlfUkdfTFBfSUlSMl9LMl9MXHRcdFx0MHgyMmNcbi0jZGVmaW5lIE1US19QSFlfUkdfTFBfSUlSMl9LMl9VXHRcdFx0MHgyMmRcbi0jZGVmaW5lIE1US19QSFlfUkdfTFBfSUlSMl9LM19MXHRcdFx0MHgyMmVcbi0jZGVmaW5lIE1US19QSFlfUkdfTFBfSUlSMl9LM19VXHRcdFx0MHgyMmZcbi0jZGVmaW5lIE1US19QSFlfUkdfTFBfSUlSMl9LNF9MXHRcdFx0MHgyMzBcbi0jZGVmaW5lIE1US19QSFlfUkdfTFBfSUlSMl9LNF9VXHRcdFx0MHgyMzFcbi0jZGVmaW5lIE1US19QSFlfUkdfTFBfSUlSMl9LNV9MXHRcdFx0MHgyMzJcbi0jZGVmaW5lIE1US19QSFlfUkdfTFBfSUlSMl9LNV9VXHRcdFx0MHgyMzNcbi1cbi0jZGVmaW5lIE1US19QSFlfUkdfREVWMUVfUkVHMjM0XHRcdFx0MHgyMzRcbi0jZGVmaW5lICAgTVRLX1BIWV9UUl9PUEVOX0xPT1BfRU5fTUFTS1x0XHRHRU5NQVNLKDAsIDApXG4tI2RlZmluZSAgIE1US19QSFlfTFBGX1hfQVZFUkFHRV9NQVNLXHRcdEdFTk1BU0soNywgNClcbi0jZGVmaW5lICAgTVRLX1BIWV9UUl9MUF9JSVJfRUVFX0VOXHRcdEJJVCgxMilcbi1cbi0jZGVmaW5lIE1US19QSFlfUkdfTFBGX0NOVF9WQUxcdFx0XHQweDIzNVxuLVxuLSNkZWZpbmUgTVRLX1BIWV9SR19ERVYxRV9SRUcyMzhcdFx0XHQweDIzOFxuLSNkZWZpbmUgICBNVEtfUEhZX0xQSV9TTFZfU0VORF9UWF9USU1FUl9NQVNLXHRHRU5NQVNLKDgsIDApXG4tI2RlZmluZSAgIE1US19QSFlfTFBJX1NMVl9TRU5EX1RYX0VOXHRcdEJJVCgxMilcbi1cbi0jZGVmaW5lIE1US19QSFlfUkdfREVWMUVfUkVHMjM5XHRcdFx0MHgyMzlcbi0jZGVmaW5lICAgTVRLX1BIWV9MUElfU0VORF9MT0NfVElNRVJfTUFTS1x0R0VOTUFTSyg4LCAwKVxuLSNkZWZpbmUgICBNVEtfUEhZX0xQSV9UWFBDU19MT0NfUkNWXHRcdEJJVCgxMilcbi1cbi0jZGVmaW5lIE1US19QSFlfUkdfREVWMUVfUkVHMjdDXHRcdFx0MHgyN2Ncbi0jZGVmaW5lICAgTVRLX1BIWV9WR0FTVEFURV9GRkVfVEhSX1NUMV9NQVNLXHRHRU5NQVNLKDEyLCA4KVxuLSNkZWZpbmUgTVRLX1BIWV9SR19ERVYxRV9SRUcyN0RcdFx0XHQweDI3ZFxuLSNkZWZpbmUgICBNVEtfUEhZX1ZHQVNUQVRFX0ZGRV9USFJfU1QyX01BU0tcdEdFTk1BU0soNCwgMClcbi1cbi0jZGVmaW5lIE1US19QSFlfUkdfREVWMUVfUkVHMkM3XHRcdFx0MHgyYzdcbi0jZGVmaW5lICAgTVRLX1BIWV9NQVhfR0FJTl9NQVNLXHRcdFx0R0VOTUFTSyg0LCAwKVxuLSNkZWZpbmUgICBNVEtfUEhZX01JTl9HQUlOX01BU0tcdFx0XHRHRU5NQVNLKDEyLCA4KVxuLVxuLSNkZWZpbmUgTVRLX1BIWV9SR19ERVYxRV9SRUcyRDFcdFx0XHQweDJkMVxuLSNkZWZpbmUgICBNVEtfUEhZX1ZDT19TTElDRVJfVEhSRVNIX0JJVFNfSElHSF9FRUVfTUFTS1x0R0VOTUFTSyg3LCAwKVxuLSNkZWZpbmUgICBNVEtfUEhZX0xQSV9TS0lQX1NEX1NMVl9UUlx0XHRCSVQoOClcbi0jZGVmaW5lICAgTVRLX1BIWV9MUElfVFJfUkVBRFlcdFx0XHRCSVQoOSlcbi0jZGVmaW5lICAgTVRLX1BIWV9MUElfVkNPX0VFRV9TVEcwX0VOXHRcdEJJVCgxMClcbi1cbi0jZGVmaW5lIE1US19QSFlfUkdfREVWMUVfUkVHMzIzXHRcdFx0MHgzMjNcbi0jZGVmaW5lICAgTVRLX1BIWV9FRUVfV0FLRV9NQVNfSU5UX0RDXHRcdEJJVCgwKVxuLSNkZWZpbmUgICBNVEtfUEhZX0VFRV9XQUtFX1NMVl9JTlRfRENcdFx0QklUKDQpXG4tXG4tI2RlZmluZSBNVEtfUEhZX1JHX0RFVjFFX1JFRzMyNFx0XHRcdDB4MzI0XG4tI2RlZmluZSAgIE1US19QSFlfU01JX0RFVENOVF9NQVhfTUFTS1x0XHRHRU5NQVNLKDUsIDApXG4tI2RlZmluZSAgIE1US19QSFlfU01JX0RFVF9NQVhfRU5cdFx0QklUKDgpXG4tXG4tI2RlZmluZSBNVEtfUEhZX1JHX0RFVjFFX1JFRzMyNlx0XHRcdDB4MzI2XG4tI2RlZmluZSAgIE1US19QSFlfTFBJX01PREVfU0RfT05cdFx0QklUKDApXG4tI2RlZmluZSAgIE1US19QSFlfUkVTRVRfUkFORFVQRF9DTlRcdFx0QklUKDEpXG4tI2RlZmluZSAgIE1US19QSFlfVFJFQ19VUERBVEVfRU5BQl9DTFJcdFx0QklUKDIpXG4tI2RlZmluZSAgIE1US19QSFlfTFBJX1FVSVRfV0FJVF9ERkVfU0lHX0RFVF9PRkZcdEJJVCg0KVxuLSNkZWZpbmUgICBNVEtfUEhZX1RSX1JFQURZX1NLSVBfQUZFX1dBS0VVUFx0QklUKDUpXG4tXG4tI2RlZmluZSBNVEtfUEhZX0xET19QVU1QX0VOX1BBSVJBQlx0XHQweDUwMlxuLSNkZWZpbmUgTVRLX1BIWV9MRE9fUFVNUF9FTl9QQUlSQ0RcdFx0MHg1MDNcbi1cbi0jZGVmaW5lIE1US19QSFlfREFfVFhfUjUwX1BBSVJfQVx0XHQweDUzZFxuLSNkZWZpbmUgTVRLX1BIWV9EQV9UWF9SNTBfUEFJUl9CXHRcdDB4NTNlXG4tI2RlZmluZSBNVEtfUEhZX0RBX1RYX1I1MF9QQUlSX0NcdFx0MHg1M2Zcbi0jZGVmaW5lIE1US19QSFlfREFfVFhfUjUwX1BBSVJfRFx0XHQweDU0MFxuLVxuLS8qIFJlZ2lzdGVycyBvbiBNRElPX01NRF9WRU5EMiAqL1xuLSNkZWZpbmUgTVRLX1BIWV9MRUQxX0RFRkFVTFRfUE9MQVJJVElFU1x0XHRCSVQoMSlcbi1cbi0jZGVmaW5lIE1US19QSFlfUkdfQkdfUkFTRUxcdFx0XHQweDExNVxuLSNkZWZpbmUgICBNVEtfUEhZX1JHX0JHX1JBU0VMX01BU0tcdFx0R0VOTUFTSygyLCAwKVxuLVxuLS8qICYjMzk7Ym9vdHRyYXAmIzM5OyByZWdpc3RlciByZWZsZWN0aW5nIHRoZSBjb25maWd1cmF0aW9uIG9mIHRoZSA0IFBIWSBMRURzICovXG4tI2RlZmluZSBSR19HUElPX01JU0NfVFBCQU5LMFx0XHRcdDB4NmYwXG4tI2RlZmluZSAgIFJHX0dQSU9fTUlTQ19UUEJBTkswX0JPT1RNT0RFXHRcdEdFTk1BU0soMTEsIDgpXG4tXG4gLyogVGhlc2UgbWFjcm8gcHJpdmlkZXMgZWZ1c2UgcGFyc2luZyBmb3IgaW50ZXJuYWwgcGh5LiAqL1xuICNkZWZpbmUgRUZTX0RBX1RYX0kyTVBCX0EoeClcdFx0XHQoKCh4KSBcdTAwM2VcdTAwM2UgMCkgXHUwMDI2IEdFTk1BU0soNSwgMCkpXG4gI2RlZmluZSBFRlNfREFfVFhfSTJNUEJfQih4KVx0XHRcdCgoKHgpIFx1MDAzZVx1MDAzZSA2KSBcdTAwMjYgR0VOTUFTSyg1LCAwKSlcbkBAIC0zNDYsNTEgJiM0MzszNCwxNiBAQFxuICNkZWZpbmUgRUZTX1JHX0JHX1JBU0VMKHgpXHRcdFx0KCgoeCkgXHUwMDNlXHUwMDNlIDQpIFx1MDAyNiBHRU5NQVNLKDIsIDApKVxuICNkZWZpbmUgRUZTX1JHX1JFWFRfVFJJTSh4KVx0XHRcdCgoKHgpIFx1MDAzZVx1MDAzZSA3KSBcdTAwMjYgR0VOTUFTSyg1LCAwKSlcbiBcbi1lbnVtIHtcbi1cdE5PX1BBSVIsXG4tXHRQQUlSX0EsXG4tXHRQQUlSX0IsXG4tXHRQQUlSX0MsXG4tXHRQQUlSX0QsXG4tfTtcbi1cbi1lbnVtIGNhbGlicmF0aW9uX21vZGUge1xuLVx0RUZVU0VfSyxcbi1cdFNXX0tcbi19O1xuLVxuLWVudW0gQ0FMX0lURU0ge1xuLVx0UkVYVCxcbi1cdFRYX09GRlNFVCxcbi1cdFRYX0FNUCxcbi1cdFRYX1I1MCxcbi1cdFRYX1ZDTVxuLX07XG4tXG4tZW51bSBDQUxfTU9ERSB7XG4tXHRFRlVTRV9NLFxuLVx0U1dfTVxuLX07XG4tXG4gc3RydWN0IG10a19zb2NwaHlfc2hhcmVkIHtcbiBcdHUzMlx0XHRcdGJvb3R0cmFwO1xuIFx0c3RydWN0IG10a19zb2NwaHlfcHJpdlx0cHJpdls0XTtcbiB9O1xuIFxuLS8qIE9uZSBjYWxpYnJhdGlvbiBjeWNsZSBjb25zaXN0cyBvZjpcbi0gKiAxLlNldCBEQV9DQUxJTl9GTEFHIGhpZ2ggdG8gc3RhcnQgY2FsaWJyYXRpb24uIEtlZXAgaXQgaGlnaFxuLSAqICAgdW50aWwgQURfQ0FMX0NPTVAgaXMgcmVhZHkgdG8gb3V0cHV0IGNhbGlicmF0aW9uIHJlc3VsdC5cbi0gKiAyLldhaXQgdW50aWwgREFfQ0FMX0NMSyBpcyBhdmFpbGFibGUuXG4tICogMy5GZXRjaCBBRF9DQUxfQ09NUF9PVVQuXG4tICovXG4tc3RhdGljIGludCBjYWxfY3ljbGUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgaW50IGRldmFkLFxuLVx0XHQgICAgIHUzMiByZWdudW0sIHUxNiBtYXNrLCB1MTYgY2FsX3ZhbClcbiYjNDM7aW50IG10a19jYWxfY3ljbGVfd2FpdChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuIHtcbiBcdGludCByZWdfdmFsO1xuIFx0aW50IHJldDtcbiBcbi1cdHBoeV9tb2RpZnlfbW1kKHBoeWRldiwgZGV2YWQsIHJlZ251bSxcbi1cdFx0ICAgICAgIG1hc2ssIGNhbF92YWwpO1xuIFx0cGh5X3NldF9iaXRzX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCBNVEtfUEhZX1JHX0FEX0NBTElOLFxuIFx0XHRcdCBNVEtfUEhZX0RBX0NBTElOX0ZMQUcpO1xuIFxuQEAgLTQwOSw3ICYjNDM7NjIsMjUgQEAgc3RhdGljIGludCBjYWxfY3ljbGUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgaW50IGRldmFkLFxuIFx0cmV0ID0gcGh5X3JlYWRfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIE1US19QSFlfUkdfQURfQ0FMX0NPTVApO1xuIFx0aWYgKHJldCBcdTAwM2MgMClcbiBcdFx0cmV0dXJuIHJldDtcbi1cdHJldCA9IEZJRUxEX0dFVChNVEtfUEhZX0FEX0NBTF9DT01QX09VVF9NQVNLLCByZXQpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gRklFTERfR0VUKE1US19QSFlfQURfQ0FMX0NPTVBfT1VUX01BU0ssIHJldCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qIE9uZSBjYWxpYnJhdGlvbiBjeWNsZSBjb25zaXN0cyBvZjpcbiYjNDM7ICogMS5TZXQgREFfQ0FMSU5fRkxBRyBoaWdoIHRvIHN0YXJ0IGNhbGlicmF0aW9uLiBLZWVwIGl0IGhpZ2hcbiYjNDM7ICogICB1bnRpbCBBRF9DQUxfQ09NUCBpcyByZWFkeSB0byBvdXRwdXQgY2FsaWJyYXRpb24gcmVzdWx0LlxuJiM0MzsgKiAyLldhaXQgdW50aWwgREFfQ0FMX0NMSyBpcyBhdmFpbGFibGUuXG4mIzQzOyAqIDMuRmV0Y2ggQURfQ0FMX0NPTVBfT1VULlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGludCBjYWxfY3ljbGUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgaW50IGRldmFkLFxuJiM0MztcdFx0ICAgICB1MzIgcmVnbnVtLCB1MTYgbWFzaywgdTE2IGNhbF92YWwpXG4mIzQzO3tcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRwaHlfbW9kaWZ5X21tZChwaHlkZXYsIGRldmFkLCByZWdudW0sXG4mIzQzO1x0XHQgICAgICAgbWFzaywgY2FsX3ZhbCk7XG4mIzQzO1xuJiM0MztcdHJldCA9IG10a19jYWxfY3ljbGVfd2FpdChwaHlkZXYpO1xuIFx0cGh5ZGV2X2RiZyhwaHlkZXYsIFwmIzM0O2NhbF92YWw6IDB4JXgsIHJldDogJWRcXG5cJiMzNDssIGNhbF92YWwsIHJldCk7XG4gXG4gXHRyZXR1cm4gcmV0O1xuQEAgLTEyMTUsNzMgJiM0Mzs4ODYsNiBAQCBzdGF0aWMgaW50IG10Nzk4eF9waHlfY29uZmlnX2luaXQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbiBcdHJldHVybiBtdDc5OHhfcGh5X2NhbGlicmF0aW9uKHBoeWRldik7XG4gfVxuIFxuLXN0YXRpYyBpbnQgbXQ3OTh4X3BoeV9sZWRfYmxpbmtfc2V0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIHU4IGluZGV4LFxuLVx0XHRcdFx0ICAgIHVuc2lnbmVkIGxvbmcgKmRlbGF5X29uLFxuLVx0XHRcdFx0ICAgIHVuc2lnbmVkIGxvbmcgKmRlbGF5X29mZilcbi17XG4tXHRib29sIGJsaW5raW5nID0gZmFsc2U7XG4tXHRpbnQgZXJyO1xuLVxuLVx0ZXJyID0gbXRrX3BoeV9sZWRfbnVtX2RseV9jZmcoaW5kZXgsIGRlbGF5X29uLCBkZWxheV9vZmYsIFx1MDAyNmJsaW5raW5nKTtcbi1cdGlmIChlcnIgXHUwMDNjIDApXG4tXHRcdHJldHVybiBlcnI7XG4tXG4tXHRlcnIgPSBtdGtfcGh5X2h3X2xlZF9ibGlua19zZXQocGh5ZGV2LCBpbmRleCwgYmxpbmtpbmcpO1xuLVx0aWYgKGVycilcbi1cdFx0cmV0dXJuIGVycjtcbi1cbi1cdHJldHVybiBtdGtfcGh5X2h3X2xlZF9vbl9zZXQocGh5ZGV2LCBpbmRleCwgTVRLX0dQSFlfTEVEX09OX01BU0ssXG4tXHRcdFx0XHQgICAgIGZhbHNlKTtcbi19XG4tXG4tc3RhdGljIGludCBtdDc5OHhfcGh5X2xlZF9icmlnaHRuZXNzX3NldChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LFxuLVx0XHRcdFx0XHQgdTggaW5kZXgsIGVudW0gbGVkX2JyaWdodG5lc3MgdmFsdWUpXG4te1xuLVx0aW50IGVycjtcbi1cbi1cdGVyciA9IG10a19waHlfaHdfbGVkX2JsaW5rX3NldChwaHlkZXYsIGluZGV4LCBmYWxzZSk7XG4tXHRpZiAoZXJyKVxuLVx0XHRyZXR1cm4gZXJyO1xuLVxuLVx0cmV0dXJuIG10a19waHlfaHdfbGVkX29uX3NldChwaHlkZXYsIGluZGV4LCBNVEtfR1BIWV9MRURfT05fTUFTSyxcbi1cdFx0XHRcdCAgICAgKHZhbHVlICE9IExFRF9PRkYpKTtcbi19XG4tXG4tc3RhdGljIGNvbnN0IHVuc2lnbmVkIGxvbmcgc3VwcG9ydGVkX3RyaWdnZXJzID1cbi1cdEJJVChUUklHR0VSX05FVERFVl9GVUxMX0RVUExFWCkgfFxuLVx0QklUKFRSSUdHRVJfTkVUREVWX0hBTEZfRFVQTEVYKSB8XG4tXHRCSVQoVFJJR0dFUl9ORVRERVZfTElOSykgICAgICAgIHxcbi1cdEJJVChUUklHR0VSX05FVERFVl9MSU5LXzEwKSAgICAgfFxuLVx0QklUKFRSSUdHRVJfTkVUREVWX0xJTktfMTAwKSAgICB8XG4tXHRCSVQoVFJJR0dFUl9ORVRERVZfTElOS18xMDAwKSAgIHxcbi1cdEJJVChUUklHR0VSX05FVERFVl9SWCkgICAgICAgICAgfFxuLVx0QklUKFRSSUdHRVJfTkVUREVWX1RYKTtcbi1cbi1zdGF0aWMgaW50IG10Nzk4eF9waHlfbGVkX2h3X2lzX3N1cHBvcnRlZChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCB1OCBpbmRleCxcbi1cdFx0XHRcdFx0ICB1bnNpZ25lZCBsb25nIHJ1bGVzKVxuLXtcbi1cdHJldHVybiBtdGtfcGh5X2xlZF9od19pc19zdXBwb3J0ZWQocGh5ZGV2LCBpbmRleCwgcnVsZXMsXG4tXHRcdFx0XHRcdCAgIHN1cHBvcnRlZF90cmlnZ2Vycyk7XG4tfVxuLVxuLXN0YXRpYyBpbnQgbXQ3OTh4X3BoeV9sZWRfaHdfY29udHJvbF9nZXQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgdTggaW5kZXgsXG4tXHRcdFx0XHRcdCB1bnNpZ25lZCBsb25nICpydWxlcylcbi17XG4tXHRyZXR1cm4gbXRrX3BoeV9sZWRfaHdfY3RybF9nZXQocGh5ZGV2LCBpbmRleCwgcnVsZXMsXG4tXHRcdFx0XHQgICAgICAgTVRLX0dQSFlfTEVEX09OX1NFVCxcbi1cdFx0XHRcdCAgICAgICBNVEtfR1BIWV9MRURfUlhfQkxJTktfU0VULFxuLVx0XHRcdFx0ICAgICAgIE1US19HUEhZX0xFRF9UWF9CTElOS19TRVQpO1xuLX07XG4tXG4tc3RhdGljIGludCBtdDc5OHhfcGh5X2xlZF9od19jb250cm9sX3NldChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCB1OCBpbmRleCxcbi1cdFx0XHRcdFx0IHVuc2lnbmVkIGxvbmcgcnVsZXMpXG4te1xuLVx0cmV0dXJuIG10a19waHlfbGVkX2h3X2N0cmxfc2V0KHBoeWRldiwgaW5kZXgsIHJ1bGVzLFxuLVx0XHRcdFx0ICAgICAgIE1US19HUEhZX0xFRF9PTl9TRVQsXG4tXHRcdFx0XHQgICAgICAgTVRLX0dQSFlfTEVEX1JYX0JMSU5LX1NFVCxcbi1cdFx0XHRcdCAgICAgICBNVEtfR1BIWV9MRURfVFhfQkxJTktfU0VUKTtcbi19O1xuLVxuIHN0YXRpYyBib29sIG10Nzk4OF9waHlfbGVkX2dldF9wb2xhcml0eShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCBpbnQgbGVkX251bSlcbiB7XG4gXHRzdHJ1Y3QgbXRrX3NvY3BoeV9zaGFyZWQgKnByaXYgPSBwaHlfcGFja2FnZV9nZXRfcHJpdihwaHlkZXYpO1xuQEAgLTE0MTgsNTggJiM0MzsxMDIyLDYgQEAgc3RhdGljIGludCBtdDc5ODFfcGh5X3Byb2JlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4gXHRyZXR1cm4gbXQ3OTh4X3BoeV9jYWxpYnJhdGlvbihwaHlkZXYpO1xuIH1cbiBcbi1zdGF0aWMgaW50IGFuNzU4MV9waHlfcHJvYmUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbi17XG4tXHRzdHJ1Y3QgbXRrX3NvY3BoeV9wcml2ICpwcml2O1xuLVx0c3RydWN0IHBpbmN0cmwgKnBpbmN0cmw7XG4tXG4tXHQvKiBUb2dnbGUgcGluY3RybCB0byBlbmFibGUgUEhZIExFRCAqL1xuLVx0cGluY3RybCA9IGRldm1fcGluY3RybF9nZXRfc2VsZWN0KFx1MDAyNnBoeWRldi1cdTAwM2VtZGlvLmRldiwgXCYjMzQ7Z2JlLWxlZFwmIzM0Oyk7XG4tXHRpZiAoSVNfRVJSKHBpbmN0cmwpKVxuLVx0XHRkZXZfZXJyKFx1MDAyNnBoeWRldi1cdTAwM2VtZGlvLmJ1cy1cdTAwM2VkZXYsXG4tXHRcdFx0XCYjMzQ7RmFpbGVkIHRvIHNldHVwIFBIWSBMRUQgcGluY3RybFxcblwmIzM0Oyk7XG4tXG4tXHRwcml2ID0gZGV2bV9remFsbG9jKFx1MDAyNnBoeWRldi1cdTAwM2VtZGlvLmRldiwgc2l6ZW9mKCpwcml2KSwgR0ZQX0tFUk5FTCk7XG4tXHRpZiAoIXByaXYpXG4tXHRcdHJldHVybiAtRU5PTUVNO1xuLVxuLVx0cGh5ZGV2LVx1MDAzZXByaXYgPSBwcml2O1xuLVxuLVx0cmV0dXJuIDA7XG4tfVxuLVxuLXN0YXRpYyBpbnQgYW43NTgxX3BoeV9sZWRfcG9sYXJpdHlfc2V0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIGludCBpbmRleCxcbi1cdFx0XHRcdCAgICAgICB1bnNpZ25lZCBsb25nIG1vZGVzKVxuLXtcbi1cdHUxNiB2YWwgPSAwO1xuLVx0dTMyIG1vZGU7XG4tXG4tXHRpZiAoaW5kZXggXHUwMDNlPSBNVEtfUEhZX01BWF9MRURTKVxuLVx0XHRyZXR1cm4gLUVJTlZBTDtcbi1cbi1cdGZvcl9lYWNoX3NldF9iaXQobW9kZSwgXHUwMDI2bW9kZXMsIF9fUEhZX0xFRF9NT0RFU19OVU0pIHtcbi1cdFx0c3dpdGNoIChtb2RlKSB7XG4tXHRcdGNhc2UgUEhZX0xFRF9BQ1RJVkVfTE9XOlxuLVx0XHRcdHZhbCA9IE1US19QSFlfTEVEX09OX1BPTEFSSVRZO1xuLVx0XHRcdGJyZWFrO1xuLVx0XHRjYXNlIFBIWV9MRURfQUNUSVZFX0hJR0g6XG4tXHRcdFx0YnJlYWs7XG4tXHRcdGRlZmF1bHQ6XG4tXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4tXHRcdH1cbi1cdH1cbi1cbi1cdHJldHVybiBwaHlfbW9kaWZ5X21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQyLCBpbmRleCA/XG4tXHRcdFx0ICAgICAgTVRLX1BIWV9MRUQxX09OX0NUUkwgOiBNVEtfUEhZX0xFRDBfT05fQ1RSTCxcbi1cdFx0XHQgICAgICBNVEtfUEhZX0xFRF9PTl9QT0xBUklUWSwgdmFsKTtcbi19XG4tXG4tc3RhdGljIGludCBhbjc1ODNfcGh5X2NvbmZpZ19pbml0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4te1xuLVx0LyogQk1DUl9QRE9XTiBpcyBlbmFibGVkIGJ5IGRlZmF1bHQgKi9cbi1cdHJldHVybiBwaHlfY2xlYXJfYml0cyhwaHlkZXYsIE1JSV9CTUNSLCBCTUNSX1BET1dOKTtcbi19XG4tXG4gc3RhdGljIHN0cnVjdCBwaHlfZHJpdmVyIG10a19zb2NwaHlfZHJpdmVyW10gPSB7XG4gXHR7XG4gXHRcdFBIWV9JRF9NQVRDSF9FWEFDVChNVEtfR1BIWV9JRF9NVDc5ODEpLFxuQEAgLTE1MDUsMzEgJiM0MzsxMDU3LDYgQEAgc3RhdGljIHN0cnVjdCBwaHlfZHJpdmVyIG10a19zb2NwaHlfZHJpdmVyW10gPSB7XG4gXHRcdC5sZWRfaHdfY29udHJvbF9zZXQgPSBtdDc5OHhfcGh5X2xlZF9od19jb250cm9sX3NldCxcbiBcdFx0LmxlZF9od19jb250cm9sX2dldCA9IG10Nzk4eF9waHlfbGVkX2h3X2NvbnRyb2xfZ2V0LFxuIFx0fSxcbi1cdHtcbi1cdFx0UEhZX0lEX01BVENIX0VYQUNUKE1US19HUEhZX0lEX0FONzU4MSksXG4tXHRcdC5uYW1lXHRcdD0gXCYjMzQ7QWlyb2hhIEFONzU4MSBQSFlcJiMzNDssXG4tXHRcdC5jb25maWdfaW50clx0PSBnZW5waHlfbm9fY29uZmlnX2ludHIsXG4tXHRcdC5oYW5kbGVfaW50ZXJydXB0ID0gZ2VucGh5X2hhbmRsZV9pbnRlcnJ1cHRfbm9fYWNrLFxuLVx0XHQucHJvYmVcdFx0PSBhbjc1ODFfcGh5X3Byb2JlLFxuLVx0XHQubGVkX2JsaW5rX3NldFx0PSBtdDc5OHhfcGh5X2xlZF9ibGlua19zZXQsXG4tXHRcdC5sZWRfYnJpZ2h0bmVzc19zZXQgPSBtdDc5OHhfcGh5X2xlZF9icmlnaHRuZXNzX3NldCxcbi1cdFx0LmxlZF9od19pc19zdXBwb3J0ZWQgPSBtdDc5OHhfcGh5X2xlZF9od19pc19zdXBwb3J0ZWQsXG4tXHRcdC5sZWRfaHdfY29udHJvbF9zZXQgPSBtdDc5OHhfcGh5X2xlZF9od19jb250cm9sX3NldCxcbi1cdFx0LmxlZF9od19jb250cm9sX2dldCA9IG10Nzk4eF9waHlfbGVkX2h3X2NvbnRyb2xfZ2V0LFxuLVx0XHQubGVkX3BvbGFyaXR5X3NldCA9IGFuNzU4MV9waHlfbGVkX3BvbGFyaXR5X3NldCxcbi1cdH0sXG4tXHR7XG4tXHRcdFBIWV9JRF9NQVRDSF9FWEFDVChNVEtfR1BIWV9JRF9BTjc1ODMpLFxuLVx0XHQubmFtZVx0XHQ9IFwmIzM0O0Fpcm9oYSBBTjc1ODMgUEhZXCYjMzQ7LFxuLVx0XHQuY29uZmlnX2luaXRcdD0gYW43NTgzX3BoeV9jb25maWdfaW5pdCxcbi1cdFx0LnByb2JlXHRcdD0gYW43NTgxX3BoeV9wcm9iZSxcbi1cdFx0LmxlZF9ibGlua19zZXRcdD0gbXQ3OTh4X3BoeV9sZWRfYmxpbmtfc2V0LFxuLVx0XHQubGVkX2JyaWdodG5lc3Nfc2V0ID0gbXQ3OTh4X3BoeV9sZWRfYnJpZ2h0bmVzc19zZXQsXG4tXHRcdC5sZWRfaHdfaXNfc3VwcG9ydGVkID0gbXQ3OTh4X3BoeV9sZWRfaHdfaXNfc3VwcG9ydGVkLFxuLVx0XHQubGVkX2h3X2NvbnRyb2xfc2V0ID0gbXQ3OTh4X3BoeV9sZWRfaHdfY29udHJvbF9zZXQsXG4tXHRcdC5sZWRfaHdfY29udHJvbF9nZXQgPSBtdDc5OHhfcGh5X2xlZF9od19jb250cm9sX2dldCxcbi1cdFx0LmxlZF9wb2xhcml0eV9zZXQgPSBhbjc1ODFfcGh5X2xlZF9wb2xhcml0eV9zZXQsXG4tXHR9LFxuIH07XG4gXG4gbW9kdWxlX3BoeV9kcml2ZXIobXRrX3NvY3BoeV9kcml2ZXIpO1xuQEAgLTE1MzcsOCAmIzQzOzEwNjQsNiBAQCBtb2R1bGVfcGh5X2RyaXZlcihtdGtfc29jcGh5X2RyaXZlcik7XG4gc3RhdGljIGNvbnN0IHN0cnVjdCBtZGlvX2RldmljZV9pZCBfX21heWJlX3VudXNlZCBtdGtfc29jcGh5X3RibFtdID0ge1xuIFx0eyBQSFlfSURfTUFUQ0hfRVhBQ1QoTVRLX0dQSFlfSURfTVQ3OTgxKSB9LFxuIFx0eyBQSFlfSURfTUFUQ0hfRVhBQ1QoTVRLX0dQSFlfSURfTVQ3OTg4KSB9LFxuLVx0eyBQSFlfSURfTUFUQ0hfRVhBQ1QoTVRLX0dQSFlfSURfQU43NTgxKSB9LFxuLVx0eyBQSFlfSURfTUFUQ0hfRVhBQ1QoTVRLX0dQSFlfSURfQU43NTgzKSB9LFxuIFx0eyB9XG4gfTtcbiBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9waHkvbWVkaWF0ZWsvbXRrLWdlLXNvYy5oIGIvZHJpdmVycy9uZXQvcGh5L21lZGlhdGVrL210ay1nZS1zb2MuaFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi41ZTlkMjRhOTgzM2M3N1xuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvcGh5L21lZGlhdGVrL210ay1nZS1zb2MuaFxuQEAgLTAsMCAmIzQzOzEsMzY0IEBAXG4mIzQzOy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wICovXG4mIzQzO1xuJiM0MzsjaWZuZGVmIF9NVEtfR0VfU09DX0hfXG4mIzQzOyNkZWZpbmUgX01US19HRV9TT0NfSF9cbiYjNDM7XG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2JpdGZpZWxkLmhcdTAwM2VcbiYjNDM7XG4mIzQzOyNkZWZpbmUgTVRLX0dQSFlfSURfTVQ3OTgxXHRcdFx0MHgwM2EyOTQ2MVxuJiM0MzsjZGVmaW5lIE1US19HUEhZX0lEX01UNzk4OFx0XHRcdDB4MDNhMjk0ODFcbiYjNDM7I2RlZmluZSBBSVJPSEFfR1BIWV9JRF9BTjc1ODFcdFx0XHQweDAzYTI5NGMxXG4mIzQzOyNkZWZpbmUgQUlST0hBX0dQSFlfSURfQU43NTgzXHRcdFx0MHhjMGZmMDQyMFxuJiM0MztcbiYjNDM7I2RlZmluZSBNVEtfRVhUX1BBR0VfQUNDRVNTXHRcdFx0MHgxZlxuJiM0MzsjZGVmaW5lIE1US19QSFlfUEFHRV9TVEFOREFSRFx0XHRcdDB4MDAwMFxuJiM0MzsjZGVmaW5lIE1US19QSFlfUEFHRV9FWFRFTkRFRF8xXHRcdFx0MHgwMDAxXG4mIzQzOyNkZWZpbmUgTVRLX1BIWV9QQUdFX0VYVEVOREVEXzNcdFx0XHQweDAwMDNcbiYjNDM7XG4mIzQzOyNkZWZpbmUgTVRLX1BIWV9MUElfUkVHXzE0XHRcdFx0MHgxNFxuJiM0MzsjZGVmaW5lIE1US19QSFlfTFBJX1dBS0VfVElNRVJfMTAwMF9NQVNLXHRHRU5NQVNLKDgsIDApXG4mIzQzO1xuJiM0MzsjZGVmaW5lIE1US19QSFlfTFBJX1JFR18xY1x0XHRcdDB4MWNcbiYjNDM7I2RlZmluZSBNVEtfUEhZX1NNSV9ERVRfT05fVEhSRVNIX01BU0tcdFx0R0VOTUFTSygxMywgOClcbiYjNDM7XG4mIzQzOyNkZWZpbmUgTVRLX1BIWV9QQUdFX0VYVEVOREVEXzJBMzBcdFx0MHgyYTMwXG4mIzQzO1xuJiM0MzsvKiBSZWdpc3RlcnMgb24gVG9rZW4gUmluZyBkZWJ1ZyBub2RlcyAqL1xuJiM0MzsvKiBjaF9hZGRyID0gMHgwLCBub2RlX2FkZHIgPSAweDcsIGRhdGFfYWRkciA9IDB4MTUgKi9cbiYjNDM7LyogTm9ybU1zZUxvVGhyZXNoICovXG4mIzQzOyNkZWZpbmUgTk9STUFMX01TRV9MT19USFJFU0hfTUFTS1x0XHRHRU5NQVNLKDE1LCA4KVxuJiM0MztcbiYjNDM7LyogY2hfYWRkciA9IDB4MCwgbm9kZV9hZGRyID0gMHhmLCBkYXRhX2FkZHIgPSAweDNjICovXG4mIzQzOy8qIFJlbUFja0NudExpbWl0Q3RybCAqL1xuJiM0MzsjZGVmaW5lIFJFTU9URV9BQ0tfQ09VTlRfTElNSVRfQ1RSTF9NQVNLXHRHRU5NQVNLKDIsIDEpXG4mIzQzO1xuJiM0MzsvKiBjaF9hZGRyID0gMHgxLCBub2RlX2FkZHIgPSAweGQsIGRhdGFfYWRkciA9IDB4MjAgKi9cbiYjNDM7LyogVmNvU2xpY2VyVGhyZXNoQml0c0hpZ2ggKi9cbiYjNDM7I2RlZmluZSBWQ09fU0xJQ0VSX1RIUkVTSF9ISUdIX01BU0tcdFx0R0VOTUFTSygyMywgMClcbiYjNDM7XG4mIzQzOy8qIGNoX2FkZHIgPSAweDEsIG5vZGVfYWRkciA9IDB4ZiwgZGF0YV9hZGRyID0gMHgwICovXG4mIzQzOy8qIERmZVRhaWxFbmFibGVWZ2FUaHJlc2gxMDAwICovXG4mIzQzOyNkZWZpbmUgREZFX1RBSUxfRUFOQkxFX1ZHQV9UUkhFU0hfMTAwMFx0XHRHRU5NQVNLKDUsIDEpXG4mIzQzO1xuJiM0MzsvKiBjaF9hZGRyID0gMHgxLCBub2RlX2FkZHIgPSAweGYsIGRhdGFfYWRkciA9IDB4MSAqL1xuJiM0MzsvKiBNcnZsVHJGaXgxMDBLcCAqL1xuJiM0MzsjZGVmaW5lIE1SVkxfVFJfRklYXzEwMEtQX01BU0tcdFx0XHRHRU5NQVNLKDIyLCAyMClcbiYjNDM7LyogTXJ2bFRyRml4MTAwS2YgKi9cbiYjNDM7I2RlZmluZSBNUlZMX1RSX0ZJWF8xMDBLRl9NQVNLXHRcdFx0R0VOTUFTSygxOSwgMTcpXG4mIzQzOy8qIE1ydmxUckZpeDEwMDBLcCAqL1xuJiM0MzsjZGVmaW5lIE1SVkxfVFJfRklYXzEwMDBLUF9NQVNLXHRcdFx0R0VOTUFTSygxNiwgMTQpXG4mIzQzOy8qIE1ydmxUckZpeDEwMDBLZiAqL1xuJiM0MzsjZGVmaW5lIE1SVkxfVFJfRklYXzEwMDBLRl9NQVNLXHRcdFx0R0VOTUFTSygxMywgMTEpXG4mIzQzO1xuJiM0MzsvKiBjaF9hZGRyID0gMHgxLCBub2RlX2FkZHIgPSAweGYsIGRhdGFfYWRkciA9IDB4MTIgKi9cbiYjNDM7LyogVmdhRGVjUmF0ZSAqL1xuJiM0MzsjZGVmaW5lIFZHQV9ERUNJTUFUSU9OX1JBVEVfTUFTS1x0XHRHRU5NQVNLKDgsIDUpXG4mIzQzO1xuJiM0MzsvKiBjaF9hZGRyID0gMHgxLCBub2RlX2FkZHIgPSAweGYsIGRhdGFfYWRkciA9IDB4MTcgKi9cbiYjNDM7LyogU2x2RFNQcmVhZHlUaW1lICovXG4mIzQzOyNkZWZpbmUgU0xBVkVfRFNQX1JFQURZX1RJTUVfTUFTS1x0XHRHRU5NQVNLKDIyLCAxNSlcbiYjNDM7LyogTWFzRFNQcmVhZHlUaW1lICovXG4mIzQzOyNkZWZpbmUgTUFTVEVSX0RTUF9SRUFEWV9USU1FX01BU0tcdFx0R0VOTUFTSygxNCwgNylcbiYjNDM7XG4mIzQzOy8qIGNoX2FkZHIgPSAweDEsIG5vZGVfYWRkciA9IDB4ZiwgZGF0YV9hZGRyID0gMHgxOCAqL1xuJiM0MzsvKiBFbmFiUmFuZFVwZFRyaWcgKi9cbiYjNDM7I2RlZmluZSBFTkFCTEVfUkFORE9NX1VQRE9XTl9DT1VOVEVSX1RSSUdHRVJcdEJJVCg4KVxuJiM0MztcbiYjNDM7LyogY2hfYWRkciA9IDB4MSwgbm9kZV9hZGRyID0gMHhmLCBkYXRhX2FkZHIgPSAweDIwICovXG4mIzQzOy8qIFJlc2V0U3luY09mZnNldCAqL1xuJiM0MzsjZGVmaW5lIFJFU0VUX1NZTkNfT0ZGU0VUX01BU0tcdFx0XHRHRU5NQVNLKDExLCA4KVxuJiM0MztcbiYjNDM7LyogY2hfYWRkciA9IDB4Miwgbm9kZV9hZGRyID0gMHhkLCBkYXRhX2FkZHIgPSAweDAgKi9cbiYjNDM7LyogRmZlVXBkR2FpbkZvcmNlVmFsICovXG4mIzQzOyNkZWZpbmUgRkZFX1VQREFURV9HQUlOX0ZPUkNFX1ZBTF9NQVNLXHRcdEdFTk1BU0soOSwgNylcbiYjNDM7LyogRmZlVXBkR2FpbkZvcmNlICovXG4mIzQzOyNkZWZpbmUgRkZFX1VQREFURV9HQUlOX0ZPUkNFXHRcdFx0QklUKDYpXG4mIzQzO1xuJiM0MzsvKiBjaF9hZGRyID0gMHgyLCBub2RlX2FkZHIgPSAweGQsIGRhdGFfYWRkciA9IDB4MyAqL1xuJiM0MzsvKiBUckZyZWV6ZSAqL1xuJiM0MzsjZGVmaW5lIFRSX0ZSRUVaRV9NQVNLXHRcdFx0XHRHRU5NQVNLKDExLCAwKVxuJiM0MztcbiYjNDM7LyogY2hfYWRkciA9IDB4Miwgbm9kZV9hZGRyID0gMHhkLCBkYXRhX2FkZHIgPSAweDYgKi9cbiYjNDM7LyogU1M6IFN0ZWFkeS1zdGF0ZSwgS1A6IFByb3BvcnRpb25hbCBHYWluICovXG4mIzQzOy8qIFNTVHJLcDEwMCAqL1xuJiM0MzsjZGVmaW5lIFNTX1RSX0tQMTAwX01BU0tcdFx0XHRHRU5NQVNLKDIxLCAxOSlcbiYjNDM7LyogU1NUcktmMTAwICovXG4mIzQzOyNkZWZpbmUgU1NfVFJfS0YxMDBfTUFTS1x0XHRcdEdFTk1BU0soMTgsIDE2KVxuJiM0MzsvKiBTU1RyS3AxMDAwTWFzICovXG4mIzQzOyNkZWZpbmUgU1NfVFJfS1AxMDAwX01BU1RFUl9NQVNLXHRcdEdFTk1BU0soMTUsIDEzKVxuJiM0MzsvKiBTU1RyS2YxMDAwTWFzICovXG4mIzQzOyNkZWZpbmUgU1NfVFJfS0YxMDAwX01BU1RFUl9NQVNLXHRcdEdFTk1BU0soMTIsIDEwKVxuJiM0MzsvKiBTU1RyS3AxMDAwU2x2ICovXG4mIzQzOyNkZWZpbmUgU1NfVFJfS1AxMDAwX1NMQVZFX01BU0tcdFx0XHRHRU5NQVNLKDksIDcpXG4mIzQzOy8qIFNTVHJLZjEwMDBTbHYgKi9cbiYjNDM7I2RlZmluZSBTU19UUl9LRjEwMDBfU0xBVkVfTUFTS1x0XHRcdEdFTk1BU0soNiwgNClcbiYjNDM7XG4mIzQzOy8qIGNoX2FkZHIgPSAweDIsIG5vZGVfYWRkciA9IDB4ZCwgZGF0YV9hZGRyID0gMHg4ICovXG4mIzQzOy8qIGNsZWFyIHRoaXMgYml0IGlmIHdhbm5hIHNlbGVjdCBmcm9tIEFGRSAqL1xuJiM0MzsvKiBSZWdzaWdkZXRfc2VsXzEwMDAgKi9cbiYjNDM7I2RlZmluZSBFRUUxMDAwX1NFTEVDVF9TSUdOQUxfREVURUNUSU9OX0ZST01fREZFXHRCSVQoNClcbiYjNDM7XG4mIzQzOy8qIGNoX2FkZHIgPSAweDIsIG5vZGVfYWRkciA9IDB4ZCwgZGF0YV9hZGRyID0gMHhkICovXG4mIzQzOy8qIFJlZ0VFRV9zdDJUcktmMTAwMCAqL1xuJiM0MzsjZGVmaW5lIEVFRTEwMDBfU1RBR0UyX1RSX0tGX01BU0tcdFx0R0VOTUFTSygxMywgMTEpXG4mIzQzO1xuJiM0MzsvKiBjaF9hZGRyID0gMHgyLCBub2RlX2FkZHIgPSAweGQsIGRhdGFfYWRkciA9IDB4ZiAqL1xuJiM0MzsvKiBSZWdFRUVfc2x2X3dha2V0cl90aW1lcl90YXIgKi9cbiYjNDM7I2RlZmluZSBTTEFWRV9XQUtFVFJfVElNRVJfTUFTS1x0XHRcdEdFTk1BU0soMjAsIDExKVxuJiM0MzsvKiBSZWdFRUVfc2x2X3JlbXR4X3RpbWVyX3RhciAqL1xuJiM0MzsjZGVmaW5lIFNMQVZFX1JFTVRYX1RJTUVSX01BU0tcdFx0XHRHRU5NQVNLKDEwLCAxKVxuJiM0MztcbiYjNDM7LyogY2hfYWRkciA9IDB4Miwgbm9kZV9hZGRyID0gMHhkLCBkYXRhX2FkZHIgPSAweDEwICovXG4mIzQzOy8qIFJlZ0VFRV9zbHZfd2FrZV9pbnRfdGltZXJfdGFyICovXG4mIzQzOyNkZWZpbmUgU0xBVkVfV0FLRUlOVF9USU1FUl9NQVNLXHRcdEdFTk1BU0soMTAsIDEpXG4mIzQzO1xuJiM0MzsvKiBjaF9hZGRyID0gMHgyLCBub2RlX2FkZHIgPSAweGQsIGRhdGFfYWRkciA9IDB4MTQgKi9cbiYjNDM7LyogUmVnRUVFX3RyZnJlZXplX3RpbWVyMiAqL1xuJiM0MzsjZGVmaW5lIFRSX0ZSRUVaRV9USU1FUjJfTUFTS1x0XHRcdEdFTk1BU0soOSwgMClcbiYjNDM7XG4mIzQzOy8qIGNoX2FkZHIgPSAweDIsIG5vZGVfYWRkciA9IDB4ZCwgZGF0YV9hZGRyID0gMHgxYyAqL1xuJiM0MzsvKiBSZWdFRUUxMDBTdGcxX3RhciAqL1xuJiM0MzsjZGVmaW5lIEVFRTEwMF9MUFNZTkNfU1RBR0UxX1VQREFURV9USU1FUl9NQVNLXHRHRU5NQVNLKDgsIDApXG4mIzQzO1xuJiM0MzsvKiBjaF9hZGRyID0gMHgyLCBub2RlX2FkZHIgPSAweGQsIGRhdGFfYWRkciA9IDB4MjUgKi9cbiYjNDM7LyogUkVHRUVFX3dha2Vfc2x2X3RyX3dhaXRfZGZlc2lnZGV0X2VuICovXG4mIzQzOyNkZWZpbmUgV0FLRV9TTEFWRV9UUl9XQUlUX0RGRV9ERVRFQ1RJT05fRU5cdEJJVCgxMSlcbiYjNDM7XG4mIzQzOyNkZWZpbmUgQU5BTE9HX0lOVEVSTkFMX09QRVJBVElPTl9NQVhfVVNcdDIwXG4mIzQzOyNkZWZpbmUgVFhSRVNFUlZFX01JTlx0XHRcdFx0MFxuJiM0MzsjZGVmaW5lIFRYUkVTRVJWRV9NQVhcdFx0XHRcdDdcbiYjNDM7XG4mIzQzOyNkZWZpbmUgTVRLX1BIWV9BTkFSR19SR1x0XHRcdDB4MTBcbiYjNDM7I2RlZmluZSAgIE1US19QSFlfVENMS09GRlNFVF9NQVNLXHRcdEdFTk1BU0soMTIsIDgpXG4mIzQzO1xuJiM0MzsvKiBSZWdpc3RlcnMgb24gTURJT19NTURfVkVORDEgKi9cbiYjNDM7I2RlZmluZSBNVEtfUEhZX1RYVkxEX0RBX1JHXHRcdFx0MHgxMlxuJiM0MzsjZGVmaW5lICAgTVRLX1BIWV9EQV9UWF9JMk1QQl9BX0dCRV9NQVNLXHRHRU5NQVNLKDE1LCAxMClcbiYjNDM7I2RlZmluZSAgIE1US19QSFlfREFfVFhfSTJNUEJfQV9UQlRfTUFTS1x0R0VOTUFTSyg1LCAwKVxuJiM0MztcbiYjNDM7I2RlZmluZSBNVEtfUEhZX1RYX0kyTVBCX1RFU1RfTU9ERV9BMlx0XHQweDE2XG4mIzQzOyNkZWZpbmUgICBNVEtfUEhZX0RBX1RYX0kyTVBCX0FfSEJUX01BU0tcdEdFTk1BU0soMTUsIDEwKVxuJiM0MzsjZGVmaW5lICAgTVRLX1BIWV9EQV9UWF9JMk1QQl9BX1RTVF9NQVNLXHRHRU5NQVNLKDUsIDApXG4mIzQzO1xuJiM0MzsjZGVmaW5lIE1US19QSFlfVFhfSTJNUEJfVEVTVF9NT0RFX0IxXHRcdDB4MTdcbiYjNDM7I2RlZmluZSAgIE1US19QSFlfREFfVFhfSTJNUEJfQl9HQkVfTUFTS1x0R0VOTUFTSygxMywgOClcbiYjNDM7I2RlZmluZSAgIE1US19QSFlfREFfVFhfSTJNUEJfQl9UQlRfTUFTS1x0R0VOTUFTSyg1LCAwKVxuJiM0MztcbiYjNDM7I2RlZmluZSBNVEtfUEhZX1RYX0kyTVBCX1RFU1RfTU9ERV9CMlx0XHQweDE4XG4mIzQzOyNkZWZpbmUgICBNVEtfUEhZX0RBX1RYX0kyTVBCX0JfSEJUX01BU0tcdEdFTk1BU0soMTMsIDgpXG4mIzQzOyNkZWZpbmUgICBNVEtfUEhZX0RBX1RYX0kyTVBCX0JfVFNUX01BU0tcdEdFTk1BU0soNSwgMClcbiYjNDM7XG4mIzQzOyNkZWZpbmUgTVRLX1BIWV9UWF9JMk1QQl9URVNUX01PREVfQzFcdFx0MHgxOVxuJiM0MzsjZGVmaW5lICAgTVRLX1BIWV9EQV9UWF9JMk1QQl9DX0dCRV9NQVNLXHRHRU5NQVNLKDEzLCA4KVxuJiM0MzsjZGVmaW5lICAgTVRLX1BIWV9EQV9UWF9JMk1QQl9DX1RCVF9NQVNLXHRHRU5NQVNLKDUsIDApXG4mIzQzO1xuJiM0MzsjZGVmaW5lIE1US19QSFlfVFhfSTJNUEJfVEVTVF9NT0RFX0MyXHRcdDB4MjBcbiYjNDM7I2RlZmluZSAgIE1US19QSFlfREFfVFhfSTJNUEJfQ19IQlRfTUFTS1x0R0VOTUFTSygxMywgOClcbiYjNDM7I2RlZmluZSAgIE1US19QSFlfREFfVFhfSTJNUEJfQ19UU1RfTUFTS1x0R0VOTUFTSyg1LCAwKVxuJiM0MztcbiYjNDM7I2RlZmluZSBNVEtfUEhZX1RYX0kyTVBCX1RFU1RfTU9ERV9EMVx0XHQweDIxXG4mIzQzOyNkZWZpbmUgICBNVEtfUEhZX0RBX1RYX0kyTVBCX0RfR0JFX01BU0tcdEdFTk1BU0soMTMsIDgpXG4mIzQzOyNkZWZpbmUgICBNVEtfUEhZX0RBX1RYX0kyTVBCX0RfVEJUX01BU0tcdEdFTk1BU0soNSwgMClcbiYjNDM7XG4mIzQzOyNkZWZpbmUgTVRLX1BIWV9UWF9JMk1QQl9URVNUX01PREVfRDJcdFx0MHgyMlxuJiM0MzsjZGVmaW5lICAgTVRLX1BIWV9EQV9UWF9JMk1QQl9EX0hCVF9NQVNLXHRHRU5NQVNLKDEzLCA4KVxuJiM0MzsjZGVmaW5lICAgTVRLX1BIWV9EQV9UWF9JMk1QQl9EX1RTVF9NQVNLXHRHRU5NQVNLKDUsIDApXG4mIzQzO1xuJiM0MzsjZGVmaW5lIE1US19QSFlfUlhBRENfQ1RSTF9SRzdcdFx0XHQweGM2XG4mIzQzOyNkZWZpbmUgICBNVEtfUEhZX0RBX0FEX0JVRl9CSUFTX0xQX01BU0tcdEdFTk1BU0soOSwgOClcbiYjNDM7XG4mIzQzOyNkZWZpbmUgTVRLX1BIWV9SWEFEQ19DVFJMX1JHOVx0XHRcdDB4YzhcbiYjNDM7I2RlZmluZSAgIE1US19QSFlfREFfUlhfUFNCTl9UQlRfTUFTS1x0XHRHRU5NQVNLKDE0LCAxMilcbiYjNDM7I2RlZmluZSAgIE1US19QSFlfREFfUlhfUFNCTl9IQlRfTUFTS1x0XHRHRU5NQVNLKDEwLCA4KVxuJiM0MzsjZGVmaW5lICAgTVRLX1BIWV9EQV9SWF9QU0JOX0dCRV9NQVNLXHRcdEdFTk1BU0soNiwgNClcbiYjNDM7I2RlZmluZSAgIE1US19QSFlfREFfUlhfUFNCTl9MUF9NQVNLXHRcdEdFTk1BU0soMiwgMClcbiYjNDM7XG4mIzQzOyNkZWZpbmUgTVRLX1BIWV9MRE9fT1VUUFVUX1ZcdFx0XHQweGQ3XG4mIzQzO1xuJiM0MzsjZGVmaW5lIE1US19QSFlfUkdfQU5BX0NBTF9SRzBcdFx0XHQweGRiXG4mIzQzOyNkZWZpbmUgICBNVEtfUEhZX1JHX0NBTF9DS0lOVlx0XHRcdEJJVCgxMilcbiYjNDM7I2RlZmluZSAgIE1US19QSFlfUkdfQU5BX0NBTEVOXHRcdFx0QklUKDgpXG4mIzQzOyNkZWZpbmUgICBNVEtfUEhZX1JHX1JFWFRfQ0FMRU5cdFx0XHRCSVQoNClcbiYjNDM7I2RlZmluZSAgIE1US19QSFlfUkdfWkNBTEVOX0FcdFx0XHRCSVQoMClcbiYjNDM7XG4mIzQzOyNkZWZpbmUgTVRLX1BIWV9SR19BTkFfQ0FMX1JHMVx0XHRcdDB4ZGNcbiYjNDM7I2RlZmluZSAgIE1US19QSFlfUkdfWkNBTEVOX0JcdFx0XHRCSVQoMTIpXG4mIzQzOyNkZWZpbmUgICBNVEtfUEhZX1JHX1pDQUxFTl9DXHRcdFx0QklUKDgpXG4mIzQzOyNkZWZpbmUgICBNVEtfUEhZX1JHX1pDQUxFTl9EXHRcdFx0QklUKDQpXG4mIzQzOyNkZWZpbmUgICBNVEtfUEhZX1JHX1RYVk9TX0NBTEVOXHRcdEJJVCgwKVxuJiM0MztcbiYjNDM7I2RlZmluZSBNVEtfUEhZX1JHX0FOQV9DQUxfUkc1XHRcdFx0MHhlMFxuJiM0MzsjZGVmaW5lICAgTVRLX1BIWV9SR19SRVhUX1RSSU1fTUFTS1x0XHRHRU5NQVNLKDEzLCA4KVxuJiM0MzsjZGVmaW5lICAgTVRLX1BIWV9SR19SRVhUX1pDQUxfQ1RSTF9NQVNLXHRHRU5NQVNLKDUsIDApXG4mIzQzO1xuJiM0MzsjZGVmaW5lIE1US19QSFlfUkdfQU5BX0NBTF9SRzZcdFx0XHQweGUxXG4mIzQzO1xuJiM0MzsjZGVmaW5lIE1US19QSFlfUkdfVFhfRklMVEVSXHRcdFx0MHhmZVxuJiM0MztcbiYjNDM7I2RlZmluZSBNVEtfUEhZX1JHX0xQSV9QQ1NfRFNQX0NUUkxfUkVHMTIwXHQweDEyMFxuJiM0MzsjZGVmaW5lICAgTVRLX1BIWV9MUElfU0lHX0VOX0xPX1RIUkVTSDEwMDBfTUFTS1x0R0VOTUFTSygxMiwgOClcbiYjNDM7I2RlZmluZSAgIE1US19QSFlfTFBJX1NJR19FTl9ISV9USFJFU0gxMDAwX01BU0tcdEdFTk1BU0soNCwgMClcbiYjNDM7XG4mIzQzOyNkZWZpbmUgTVRLX1BIWV9SR19MUElfUENTX0RTUF9DVFJMX1JFRzEyMlx0MHgxMjJcbiYjNDM7I2RlZmluZSAgIE1US19QSFlfTFBJX05PUk1fTVNFX0hJX1RIUkVTSDEwMDBfTUFTS1x0R0VOTUFTSyg3LCAwKVxuJiM0MztcbiYjNDM7I2RlZmluZSBNVEtfUEhZX1JHX1RFU1RNVVhfQURDX0NUUkxcdFx0MHgxNDRcbiYjNDM7I2RlZmluZSAgIE1US19QSFlfUkdfVFhFTl9ESUdfTUFTS1x0XHRHRU5NQVNLKDUsIDUpXG4mIzQzO1xuJiM0MzsjZGVmaW5lIE1US19QSFlfUkdfQ1JfVFhfQU1QX09GRlNFVF9BX0JcdFx0MHgxNzJcbiYjNDM7I2RlZmluZSAgIE1US19QSFlfQ1JfVFhfQU1QX09GRlNFVF9BX01BU0tcdEdFTk1BU0soMTMsIDgpXG4mIzQzOyNkZWZpbmUgICBNVEtfUEhZX0NSX1RYX0FNUF9PRkZTRVRfQl9NQVNLXHRHRU5NQVNLKDYsIDApXG4mIzQzO1xuJiM0MzsjZGVmaW5lIE1US19QSFlfUkdfQ1JfVFhfQU1QX09GRlNFVF9DX0RcdFx0MHgxNzNcbiYjNDM7I2RlZmluZSAgIE1US19QSFlfQ1JfVFhfQU1QX09GRlNFVF9DX01BU0tcdEdFTk1BU0soMTMsIDgpXG4mIzQzOyNkZWZpbmUgICBNVEtfUEhZX0NSX1RYX0FNUF9PRkZTRVRfRF9NQVNLXHRHRU5NQVNLKDYsIDApXG4mIzQzO1xuJiM0MzsjZGVmaW5lIE1US19QSFlfUkdfQ1JfVFhfUjUwX09GRlNFVF9BX0JcdFx0MHgxNzRcbiYjNDM7I2RlZmluZSAgIE1US19QSFlfQ1JfVFhfUjUwX09GRlNFVF9BX01BU0tcdEdFTk1BU0soMTMsIDgpXG4mIzQzOyNkZWZpbmUgICBNVEtfUEhZX0NSX1RYX1I1MF9PRkZTRVRfQl9NQVNLXHRHRU5NQVNLKDYsIDApXG4mIzQzO1xuJiM0MzsjZGVmaW5lIE1US19QSFlfUkdfQ1JfVFhfUjUwX09GRlNFVF9DX0RcdFx0MHgxNzVcbiYjNDM7I2RlZmluZSAgIE1US19QSFlfQ1JfVFhfUjUwX09GRlNFVF9DX01BU0tcdEdFTk1BU0soMTMsIDgpXG4mIzQzOyNkZWZpbmUgICBNVEtfUEhZX0NSX1RYX1I1MF9PRkZTRVRfRF9NQVNLXHRHRU5NQVNLKDYsIDApXG4mIzQzO1xuJiM0MzsjZGVmaW5lIE1US19QSFlfUkdfQURfQ0FMX0NPTVBcdFx0XHQweDE3YVxuJiM0MzsjZGVmaW5lICAgTVRLX1BIWV9BRF9DQUxfQ09NUF9PVVRfTUFTS1x0XHRHRU5NQVNLKDgsIDgpXG4mIzQzO1xuJiM0MzsjZGVmaW5lIE1US19QSFlfUkdfQURfQ0FMX0NMS1x0XHRcdDB4MTdiXG4mIzQzOyNkZWZpbmUgICBNVEtfUEhZX0RBX0NBTF9DTEtcdFx0XHRCSVQoMClcbiYjNDM7XG4mIzQzOyNkZWZpbmUgTVRLX1BIWV9SR19BRF9DQUxJTlx0XHRcdDB4MTdjXG4mIzQzOyNkZWZpbmUgICBNVEtfUEhZX0RBX0NBTElOX0ZMQUdcdFx0XHRCSVQoMClcbiYjNDM7XG4mIzQzOyNkZWZpbmUgTVRLX1BIWV9SR19EQVNOX0RBQ19JTjBfQVx0XHQweDE3ZFxuJiM0MzsjZGVmaW5lICAgTVRLX1BIWV9EQVNOX0RBQ19JTjBfQV9NQVNLXHRcdEdFTk1BU0soOSwgMClcbiYjNDM7XG4mIzQzOyNkZWZpbmUgTVRLX1BIWV9SR19EQVNOX0RBQ19JTjBfQlx0XHQweDE3ZVxuJiM0MzsjZGVmaW5lICAgTVRLX1BIWV9EQVNOX0RBQ19JTjBfQl9NQVNLXHRcdEdFTk1BU0soOSwgMClcbiYjNDM7XG4mIzQzOyNkZWZpbmUgTVRLX1BIWV9SR19EQVNOX0RBQ19JTjBfQ1x0XHQweDE3ZlxuJiM0MzsjZGVmaW5lICAgTVRLX1BIWV9EQVNOX0RBQ19JTjBfQ19NQVNLXHRcdEdFTk1BU0soOSwgMClcbiYjNDM7XG4mIzQzOyNkZWZpbmUgTVRLX1BIWV9SR19EQVNOX0RBQ19JTjBfRFx0XHQweDE4MFxuJiM0MzsjZGVmaW5lICAgTVRLX1BIWV9EQVNOX0RBQ19JTjBfRF9NQVNLXHRcdEdFTk1BU0soOSwgMClcbiYjNDM7XG4mIzQzOyNkZWZpbmUgTVRLX1BIWV9SR19EQVNOX0RBQ19JTjFfQVx0XHQweDE4MVxuJiM0MzsjZGVmaW5lICAgTVRLX1BIWV9EQVNOX0RBQ19JTjFfQV9NQVNLXHRcdEdFTk1BU0soOSwgMClcbiYjNDM7XG4mIzQzOyNkZWZpbmUgTVRLX1BIWV9SR19EQVNOX0RBQ19JTjFfQlx0XHQweDE4MlxuJiM0MzsjZGVmaW5lICAgTVRLX1BIWV9EQVNOX0RBQ19JTjFfQl9NQVNLXHRcdEdFTk1BU0soOSwgMClcbiYjNDM7XG4mIzQzOyNkZWZpbmUgTVRLX1BIWV9SR19EQVNOX0RBQ19JTjFfQ1x0XHQweDE4M1xuJiM0MzsjZGVmaW5lICAgTVRLX1BIWV9EQVNOX0RBQ19JTjFfQ19NQVNLXHRcdEdFTk1BU0soOSwgMClcbiYjNDM7XG4mIzQzOyNkZWZpbmUgTVRLX1BIWV9SR19EQVNOX0RBQ19JTjFfRFx0XHQweDE4NFxuJiM0MzsjZGVmaW5lICAgTVRLX1BIWV9EQVNOX0RBQ19JTjFfRF9NQVNLXHRcdEdFTk1BU0soOSwgMClcbiYjNDM7XG4mIzQzOyNkZWZpbmUgTVRLX1BIWV9SR19ERVYxRV9SRUcxOWJcdFx0XHQweDE5YlxuJiM0MzsjZGVmaW5lICAgTVRLX1BIWV9CWVBBU1NfRFNQX0xQSV9SRUFEWVx0XHRCSVQoOClcbiYjNDM7XG4mIzQzOyNkZWZpbmUgTVRLX1BIWV9SR19MUF9JSVIyX0sxX0xcdFx0XHQweDIyYVxuJiM0MzsjZGVmaW5lIE1US19QSFlfUkdfTFBfSUlSMl9LMV9VXHRcdFx0MHgyMmJcbiYjNDM7I2RlZmluZSBNVEtfUEhZX1JHX0xQX0lJUjJfSzJfTFx0XHRcdDB4MjJjXG4mIzQzOyNkZWZpbmUgTVRLX1BIWV9SR19MUF9JSVIyX0syX1VcdFx0XHQweDIyZFxuJiM0MzsjZGVmaW5lIE1US19QSFlfUkdfTFBfSUlSMl9LM19MXHRcdFx0MHgyMmVcbiYjNDM7I2RlZmluZSBNVEtfUEhZX1JHX0xQX0lJUjJfSzNfVVx0XHRcdDB4MjJmXG4mIzQzOyNkZWZpbmUgTVRLX1BIWV9SR19MUF9JSVIyX0s0X0xcdFx0XHQweDIzMFxuJiM0MzsjZGVmaW5lIE1US19QSFlfUkdfTFBfSUlSMl9LNF9VXHRcdFx0MHgyMzFcbiYjNDM7I2RlZmluZSBNVEtfUEhZX1JHX0xQX0lJUjJfSzVfTFx0XHRcdDB4MjMyXG4mIzQzOyNkZWZpbmUgTVRLX1BIWV9SR19MUF9JSVIyX0s1X1VcdFx0XHQweDIzM1xuJiM0MztcbiYjNDM7I2RlZmluZSBNVEtfUEhZX1JHX0RFVjFFX1JFRzIzNFx0XHRcdDB4MjM0XG4mIzQzOyNkZWZpbmUgICBNVEtfUEhZX1RSX09QRU5fTE9PUF9FTl9NQVNLXHRcdEdFTk1BU0soMCwgMClcbiYjNDM7I2RlZmluZSAgIE1US19QSFlfTFBGX1hfQVZFUkFHRV9NQVNLXHRcdEdFTk1BU0soNywgNClcbiYjNDM7I2RlZmluZSAgIE1US19QSFlfVFJfTFBfSUlSX0VFRV9FTlx0XHRCSVQoMTIpXG4mIzQzO1xuJiM0MzsjZGVmaW5lIE1US19QSFlfUkdfTFBGX0NOVF9WQUxcdFx0XHQweDIzNVxuJiM0MztcbiYjNDM7I2RlZmluZSBNVEtfUEhZX1JHX0RFVjFFX1JFRzIzOFx0XHRcdDB4MjM4XG4mIzQzOyNkZWZpbmUgICBNVEtfUEhZX0xQSV9TTFZfU0VORF9UWF9USU1FUl9NQVNLXHRHRU5NQVNLKDgsIDApXG4mIzQzOyNkZWZpbmUgICBNVEtfUEhZX0xQSV9TTFZfU0VORF9UWF9FTlx0XHRCSVQoMTIpXG4mIzQzO1xuJiM0MzsjZGVmaW5lIE1US19QSFlfUkdfREVWMUVfUkVHMjM5XHRcdFx0MHgyMzlcbiYjNDM7I2RlZmluZSAgIE1US19QSFlfTFBJX1NFTkRfTE9DX1RJTUVSX01BU0tcdEdFTk1BU0soOCwgMClcbiYjNDM7I2RlZmluZSAgIE1US19QSFlfTFBJX1RYUENTX0xPQ19SQ1ZcdFx0QklUKDEyKVxuJiM0MztcbiYjNDM7I2RlZmluZSBNVEtfUEhZX1JHX0RFVjFFX1JFRzI3Q1x0XHRcdDB4MjdjXG4mIzQzOyNkZWZpbmUgICBNVEtfUEhZX1ZHQVNUQVRFX0ZGRV9USFJfU1QxX01BU0tcdEdFTk1BU0soMTIsIDgpXG4mIzQzOyNkZWZpbmUgTVRLX1BIWV9SR19ERVYxRV9SRUcyN0RcdFx0XHQweDI3ZFxuJiM0MzsjZGVmaW5lICAgTVRLX1BIWV9WR0FTVEFURV9GRkVfVEhSX1NUMl9NQVNLXHRHRU5NQVNLKDQsIDApXG4mIzQzO1xuJiM0MzsjZGVmaW5lIE1US19QSFlfUkdfREVWMUVfUkVHMkM3XHRcdFx0MHgyYzdcbiYjNDM7I2RlZmluZSAgIE1US19QSFlfTUFYX0dBSU5fTUFTS1x0XHRcdEdFTk1BU0soNCwgMClcbiYjNDM7I2RlZmluZSAgIE1US19QSFlfTUlOX0dBSU5fTUFTS1x0XHRcdEdFTk1BU0soMTIsIDgpXG4mIzQzO1xuJiM0MzsjZGVmaW5lIE1US19QSFlfUkdfREVWMUVfUkVHMkQxXHRcdFx0MHgyZDFcbiYjNDM7I2RlZmluZSAgIE1US19QSFlfVkNPX1NMSUNFUl9USFJFU0hfQklUU19ISUdIX0VFRV9NQVNLXHRHRU5NQVNLKDcsIDApXG4mIzQzOyNkZWZpbmUgICBNVEtfUEhZX0xQSV9TS0lQX1NEX1NMVl9UUlx0XHRCSVQoOClcbiYjNDM7I2RlZmluZSAgIE1US19QSFlfTFBJX1RSX1JFQURZXHRcdFx0QklUKDkpXG4mIzQzOyNkZWZpbmUgICBNVEtfUEhZX0xQSV9WQ09fRUVFX1NURzBfRU5cdFx0QklUKDEwKVxuJiM0MztcbiYjNDM7I2RlZmluZSBNVEtfUEhZX1JHX0RFVjFFX1JFRzMyM1x0XHRcdDB4MzIzXG4mIzQzOyNkZWZpbmUgICBNVEtfUEhZX0VFRV9XQUtFX01BU19JTlRfRENcdFx0QklUKDApXG4mIzQzOyNkZWZpbmUgICBNVEtfUEhZX0VFRV9XQUtFX1NMVl9JTlRfRENcdFx0QklUKDQpXG4mIzQzO1xuJiM0MzsjZGVmaW5lIE1US19QSFlfUkdfREVWMUVfUkVHMzI0XHRcdFx0MHgzMjRcbiYjNDM7I2RlZmluZSAgIE1US19QSFlfU01JX0RFVENOVF9NQVhfTUFTS1x0XHRHRU5NQVNLKDUsIDApXG4mIzQzOyNkZWZpbmUgICBNVEtfUEhZX1NNSV9ERVRfTUFYX0VOXHRcdEJJVCg4KVxuJiM0MztcbiYjNDM7I2RlZmluZSBNVEtfUEhZX1JHX0RFVjFFX1JFRzMyNlx0XHRcdDB4MzI2XG4mIzQzOyNkZWZpbmUgICBNVEtfUEhZX0xQSV9NT0RFX1NEX09OXHRcdEJJVCgwKVxuJiM0MzsjZGVmaW5lICAgTVRLX1BIWV9SRVNFVF9SQU5EVVBEX0NOVFx0XHRCSVQoMSlcbiYjNDM7I2RlZmluZSAgIE1US19QSFlfVFJFQ19VUERBVEVfRU5BQl9DTFJcdFx0QklUKDIpXG4mIzQzOyNkZWZpbmUgICBNVEtfUEhZX0xQSV9RVUlUX1dBSVRfREZFX1NJR19ERVRfT0ZGXHRCSVQoNClcbiYjNDM7I2RlZmluZSAgIE1US19QSFlfVFJfUkVBRFlfU0tJUF9BRkVfV0FLRVVQXHRCSVQoNSlcbiYjNDM7XG4mIzQzOyNkZWZpbmUgTVRLX1BIWV9MRE9fUFVNUF9FTl9QQUlSQUJcdFx0MHg1MDJcbiYjNDM7I2RlZmluZSBNVEtfUEhZX0xET19QVU1QX0VOX1BBSVJDRFx0XHQweDUwM1xuJiM0MztcbiYjNDM7I2RlZmluZSBNVEtfUEhZX0RBX1RYX1I1MF9QQUlSX0FcdFx0MHg1M2RcbiYjNDM7I2RlZmluZSBNVEtfUEhZX0RBX1RYX1I1MF9QQUlSX0JcdFx0MHg1M2VcbiYjNDM7I2RlZmluZSBNVEtfUEhZX0RBX1RYX1I1MF9QQUlSX0NcdFx0MHg1M2ZcbiYjNDM7I2RlZmluZSBNVEtfUEhZX0RBX1RYX1I1MF9QQUlSX0RcdFx0MHg1NDBcbiYjNDM7XG4mIzQzOy8qIFJlZ2lzdGVycyBvbiBNRElPX01NRF9WRU5EMiAqL1xuJiM0MzsjZGVmaW5lIE1US19QSFlfTEVEMV9ERUZBVUxUX1BPTEFSSVRJRVNcdFx0QklUKDEpXG4mIzQzO1xuJiM0MzsjZGVmaW5lIE1US19QSFlfUkdfQkdfUkFTRUxcdFx0XHQweDExNVxuJiM0MzsjZGVmaW5lICAgTVRLX1BIWV9SR19CR19SQVNFTF9NQVNLXHRcdEdFTk1BU0soMiwgMClcbiYjNDM7XG4mIzQzOy8qICYjMzk7Ym9vdHRyYXAmIzM5OyByZWdpc3RlciByZWZsZWN0aW5nIHRoZSBjb25maWd1cmF0aW9uIG9mIHRoZSA0IFBIWSBMRURzICovXG4mIzQzOyNkZWZpbmUgUkdfR1BJT19NSVNDX1RQQkFOSzBcdFx0XHQweDZmMFxuJiM0MzsjZGVmaW5lICAgUkdfR1BJT19NSVNDX1RQQkFOSzBfQk9PVE1PREVcdFx0R0VOTUFTSygxMSwgOClcbiYjNDM7XG4mIzQzO2VudW0gQ0FMX0lURU0ge1xuJiM0MztcdFJFWFQsXG4mIzQzO1x0VFhfT0ZGU0VULFxuJiM0MztcdFRYX0FNUCxcbiYjNDM7XHRUWF9SNTAsXG4mIzQzO1x0VFhfVkNNLFxuJiM0MztcdFJYX09GRlNFVCxcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO2VudW0ge1xuJiM0MztcdE5PX1BBSVIsXG4mIzQzO1x0UEFJUl9BLFxuJiM0MztcdFBBSVJfQixcbiYjNDM7XHRQQUlSX0MsXG4mIzQzO1x0UEFJUl9ELFxuJiM0Mzt9O1xuJiM0MztcbiYjNDM7ZW51bSBjYWxpYnJhdGlvbl9tb2RlIHtcbiYjNDM7XHRFRlVTRV9LLFxuJiM0MztcdFNXX0tcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO2VudW0gQ0FMX01PREUge1xuJiM0MztcdEVGVVNFX00sXG4mIzQzO1x0U1dfTVxuJiM0Mzt9O1xuJiM0MztcbiYjNDM7LyogTVRLIEdFIFNvQyBjb21tb24gZnVuY3Rpb25zICovXG4mIzQzO2ludCBtdGtfY2FsX2N5Y2xlX3dhaXQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldik7XG4mIzQzO1xuJiM0MzsjZW5kaWYgLyogX01US19HRV9TT0NfSF8gKi9cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9waHkvbWVkaWF0ZWsvbXRrLXBoeS1saWIuYyBiL2RyaXZlcnMvbmV0L3BoeS9tZWRpYXRlay9tdGstcGh5LWxpYi5jXG5pbmRleCBkZmQwZjRlNDM5YTIxNC4uOGMyYjI2ZjliODQwM2IgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9waHkvbWVkaWF0ZWsvbXRrLXBoeS1saWIuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvcGh5L21lZGlhdGVrL210ay1waHktbGliLmNcbkBAIC0zNiw4ICYjNDM7MzYsOCBAQCBzdGF0aWMgdm9pZCBfX210a190cl9yZWFkKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIHU4IGNoX2FkZHIsIHU4IG5vZGVfYWRkcixcbiBcdFx0KnRyX2hpZ2gsICp0cl9sb3cpO1xuIH1cbiBcbi1zdGF0aWMgdm9pZCBfX210a190cl93cml0ZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCB1OCBjaF9hZGRyLCB1OCBub2RlX2FkZHIsXG4tXHRcdFx0ICAgdTggZGF0YV9hZGRyLCB1MzIgdHJfZGF0YSlcbiYjNDM7dm9pZCBfX210a190cl93cml0ZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCB1OCBjaF9hZGRyLCB1OCBub2RlX2FkZHIsXG4mIzQzO1x0XHQgICAgdTggZGF0YV9hZGRyLCB1MzIgdHJfZGF0YSlcbiB7XG4gXHRfX3BoeV93cml0ZShwaHlkZXYsIDB4MTEsIHRyX2RhdGEgXHUwMDI2IDB4ZmZmZik7XG4gXHRfX3BoeV93cml0ZShwaHlkZXYsIDB4MTIsIHRyX2RhdGEgXHUwMDNlXHUwMDNlIDE2KTtcbkBAIC00NSw2ICYjNDM7NDUsNyBAQCBzdGF0aWMgdm9pZCBfX210a190cl93cml0ZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCB1OCBjaF9hZGRyLCB1OCBub2RlX2FkZHIsXG4gXHRcdHRyX2RhdGEgXHUwMDNlXHUwMDNlIDE2LCB0cl9kYXRhIFx1MDAyNiAweGZmZmYpO1xuIFx0X19tdGtfdHJfYWNjZXNzKHBoeWRldiwgZmFsc2UsIGNoX2FkZHIsIG5vZGVfYWRkciwgZGF0YV9hZGRyKTtcbiB9XG4mIzQzO0VYUE9SVF9TWU1CT0xfR1BMKF9fbXRrX3RyX3dyaXRlKTtcbiBcbiB2b2lkIF9fbXRrX3RyX21vZGlmeShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCB1OCBjaF9hZGRyLCB1OCBub2RlX2FkZHIsXG4gXHRcdCAgICAgdTggZGF0YV9hZGRyLCB1MzIgbWFzaywgdTMyIHNldClcbkBAIC0zNDEsNiAmIzQzOzM0Miw3OCBAQCB2b2lkIG10a19waHlfbGVkc19zdGF0ZV9pbml0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4gfVxuIEVYUE9SVF9TWU1CT0xfR1BMKG10a19waHlfbGVkc19zdGF0ZV9pbml0KTtcbiBcbiYjNDM7aW50IG10Nzk4eF9waHlfbGVkX2JsaW5rX3NldChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCB1OCBpbmRleCxcbiYjNDM7XHRcdFx0ICAgICB1bnNpZ25lZCBsb25nICpkZWxheV9vbixcbiYjNDM7XHRcdFx0ICAgICB1bnNpZ25lZCBsb25nICpkZWxheV9vZmYpXG4mIzQzO3tcbiYjNDM7XHRib29sIGJsaW5raW5nID0gZmFsc2U7XG4mIzQzO1x0aW50IGVycjtcbiYjNDM7XG4mIzQzO1x0ZXJyID0gbXRrX3BoeV9sZWRfbnVtX2RseV9jZmcoaW5kZXgsIGRlbGF5X29uLCBkZWxheV9vZmYsIFx1MDAyNmJsaW5raW5nKTtcbiYjNDM7XHRpZiAoZXJyIFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIGVycjtcbiYjNDM7XG4mIzQzO1x0ZXJyID0gbXRrX3BoeV9od19sZWRfYmxpbmtfc2V0KHBoeWRldiwgaW5kZXgsIGJsaW5raW5nKTtcbiYjNDM7XHRpZiAoZXJyKVxuJiM0MztcdFx0cmV0dXJuIGVycjtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIG10a19waHlfaHdfbGVkX29uX3NldChwaHlkZXYsIGluZGV4LCBNVEtfR1BIWV9MRURfT05fTUFTSyxcbiYjNDM7XHRcdFx0XHQgICAgIGZhbHNlKTtcbiYjNDM7fVxuJiM0MztFWFBPUlRfU1lNQk9MX0dQTChtdDc5OHhfcGh5X2xlZF9ibGlua19zZXQpO1xuJiM0MztcbiYjNDM7aW50IG10Nzk4eF9waHlfbGVkX2JyaWdodG5lc3Nfc2V0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsXG4mIzQzO1x0XHRcdFx0ICB1OCBpbmRleCwgZW51bSBsZWRfYnJpZ2h0bmVzcyB2YWx1ZSlcbiYjNDM7e1xuJiM0MztcdGludCBlcnI7XG4mIzQzO1xuJiM0MztcdGVyciA9IG10a19waHlfaHdfbGVkX2JsaW5rX3NldChwaHlkZXYsIGluZGV4LCBmYWxzZSk7XG4mIzQzO1x0aWYgKGVycilcbiYjNDM7XHRcdHJldHVybiBlcnI7XG4mIzQzO1xuJiM0MztcdHJldHVybiBtdGtfcGh5X2h3X2xlZF9vbl9zZXQocGh5ZGV2LCBpbmRleCwgTVRLX0dQSFlfTEVEX09OX01BU0ssXG4mIzQzO1x0XHRcdFx0ICAgICAodmFsdWUgIT0gTEVEX09GRikpO1xuJiM0Mzt9XG4mIzQzO0VYUE9SVF9TWU1CT0xfR1BMKG10Nzk4eF9waHlfbGVkX2JyaWdodG5lc3Nfc2V0KTtcbiYjNDM7XG4mIzQzO3N0YXRpYyBjb25zdCB1bnNpZ25lZCBsb25nIHN1cHBvcnRlZF90cmlnZ2VycyA9XG4mIzQzO1x0QklUKFRSSUdHRVJfTkVUREVWX0ZVTExfRFVQTEVYKSB8XG4mIzQzO1x0QklUKFRSSUdHRVJfTkVUREVWX0hBTEZfRFVQTEVYKSB8XG4mIzQzO1x0QklUKFRSSUdHRVJfTkVUREVWX0xJTkspICAgICAgICB8XG4mIzQzO1x0QklUKFRSSUdHRVJfTkVUREVWX0xJTktfMTApICAgICB8XG4mIzQzO1x0QklUKFRSSUdHRVJfTkVUREVWX0xJTktfMTAwKSAgICB8XG4mIzQzO1x0QklUKFRSSUdHRVJfTkVUREVWX0xJTktfMTAwMCkgICB8XG4mIzQzO1x0QklUKFRSSUdHRVJfTkVUREVWX1JYKSAgICAgICAgICB8XG4mIzQzO1x0QklUKFRSSUdHRVJfTkVUREVWX1RYKTtcbiYjNDM7XG4mIzQzO2ludCBtdDc5OHhfcGh5X2xlZF9od19pc19zdXBwb3J0ZWQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgdTggaW5kZXgsXG4mIzQzO1x0XHRcdFx0ICAgdW5zaWduZWQgbG9uZyBydWxlcylcbiYjNDM7e1xuJiM0MztcdHJldHVybiBtdGtfcGh5X2xlZF9od19pc19zdXBwb3J0ZWQocGh5ZGV2LCBpbmRleCwgcnVsZXMsXG4mIzQzO1x0XHRcdFx0XHQgICBzdXBwb3J0ZWRfdHJpZ2dlcnMpO1xuJiM0Mzt9XG4mIzQzO0VYUE9SVF9TWU1CT0xfR1BMKG10Nzk4eF9waHlfbGVkX2h3X2lzX3N1cHBvcnRlZCk7XG4mIzQzO1xuJiM0MztpbnQgbXQ3OTh4X3BoeV9sZWRfaHdfY29udHJvbF9nZXQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgdTggaW5kZXgsXG4mIzQzO1x0XHRcdFx0ICB1bnNpZ25lZCBsb25nICpydWxlcylcbiYjNDM7e1xuJiM0MztcdHJldHVybiBtdGtfcGh5X2xlZF9od19jdHJsX2dldChwaHlkZXYsIGluZGV4LCBydWxlcyxcbiYjNDM7XHRcdFx0XHQgICAgICAgTVRLX0dQSFlfTEVEX09OX1NFVCxcbiYjNDM7XHRcdFx0XHQgICAgICAgTVRLX0dQSFlfTEVEX1JYX0JMSU5LX1NFVCxcbiYjNDM7XHRcdFx0XHQgICAgICAgTVRLX0dQSFlfTEVEX1RYX0JMSU5LX1NFVCk7XG4mIzQzO307XG4mIzQzO0VYUE9SVF9TWU1CT0xfR1BMKG10Nzk4eF9waHlfbGVkX2h3X2NvbnRyb2xfZ2V0KTtcbiYjNDM7XG4mIzQzO2ludCBtdDc5OHhfcGh5X2xlZF9od19jb250cm9sX3NldChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCB1OCBpbmRleCxcbiYjNDM7XHRcdFx0XHQgIHVuc2lnbmVkIGxvbmcgcnVsZXMpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gbXRrX3BoeV9sZWRfaHdfY3RybF9zZXQocGh5ZGV2LCBpbmRleCwgcnVsZXMsXG4mIzQzO1x0XHRcdFx0ICAgICAgIE1US19HUEhZX0xFRF9PTl9TRVQsXG4mIzQzO1x0XHRcdFx0ICAgICAgIE1US19HUEhZX0xFRF9SWF9CTElOS19TRVQsXG4mIzQzO1x0XHRcdFx0ICAgICAgIE1US19HUEhZX0xFRF9UWF9CTElOS19TRVQpO1xuJiM0Mzt9O1xuJiM0MztFWFBPUlRfU1lNQk9MX0dQTChtdDc5OHhfcGh5X2xlZF9od19jb250cm9sX3NldCk7XG4mIzQzO1xuIE1PRFVMRV9ERVNDUklQVElPTihcJiMzNDtNZWRpYVRlayBFdGhlcm5ldCBQSFkgZHJpdmVyIGNvbW1vblwmIzM0Oyk7XG4gTU9EVUxFX0FVVEhPUihcJiMzNDtTa3kgSHVhbmcgXHUwMDNjU2t5TGFrZS5IdWFuZ0BtZWRpYXRlay5jb21cdTAwM2VcJiMzNDspO1xuIE1PRFVMRV9BVVRIT1IoXCYjMzQ7RGFuaWVsIEdvbGxlIFx1MDAzY2RhbmllbEBtYWtyb3RvcGlhLm9yZ1x1MDAzZVwmIzM0Oyk7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGh5L21lZGlhdGVrL210ay5oIGIvZHJpdmVycy9uZXQvcGh5L21lZGlhdGVrL210ay5oXG5pbmRleCAzMjBmNzZmZmE4MWZhMi4uY2Q5ZDRjNTU1MGMzYjcgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9waHkvbWVkaWF0ZWsvbXRrLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3BoeS9tZWRpYXRlay9tdGsuaFxuQEAgLTEzLDYgJiM0MzsxMyw3IEBAXG4gXG4gI2RlZmluZSBNVEtfRVhUX1BBR0VfQUNDRVNTXHRcdFx0MHgxZlxuICNkZWZpbmUgTVRLX1BIWV9QQUdFX0VYVEVOREVEXzFcdFx0XHQweDAwMDFcbiYjNDM7I2RlZmluZSBNVEtfUEhZX1BBR0VfRVhURU5ERURfM1x0XHRcdDB4MDAwM1xuICNkZWZpbmUgTVRLX1BIWV9QQUdFX1NUQU5EQVJEXHRcdFx0MHgwMDAwXG4gI2RlZmluZSBNVEtfUEhZX1BBR0VfRVhURU5ERURfNTJCNVx0XHQweDUyYjVcbiBcbkBAIC03Miw2ICYjNDM7NzMsOCBAQCBzdHJ1Y3QgbXRrX3NvY3BoeV9wcml2IHtcbiBcdHVuc2lnbmVkIGxvbmdcdFx0bGVkX3N0YXRlO1xuIH07XG4gXG4mIzQzO3ZvaWQgX19tdGtfdHJfd3JpdGUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgdTggY2hfYWRkciwgdTggbm9kZV9hZGRyLFxuJiM0MztcdFx0ICAgIHU4IGRhdGFfYWRkciwgdTMyIHRyX2RhdGEpO1xuIHZvaWQgX19tdGtfdHJfbW9kaWZ5KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIHU4IGNoX2FkZHIsIHU4IG5vZGVfYWRkcixcbiBcdFx0ICAgICB1OCBkYXRhX2FkZHIsIHUzMiBtYXNrLCB1MzIgc2V0KTtcbiB2b2lkIG10a190cl9tb2RpZnkoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgdTggY2hfYWRkciwgdTggbm9kZV9hZGRyLFxuQEAgLTEwMSw0ICYjNDM7MTA0LDE2IEBAIGludCBtdGtfcGh5X2h3X2xlZF9ibGlua19zZXQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgdTggaW5kZXgsXG4gXHRcdFx0ICAgICBib29sIGJsaW5raW5nKTtcbiB2b2lkIG10a19waHlfbGVkc19zdGF0ZV9pbml0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpO1xuIFxuJiM0MztpbnQgbXQ3OTh4X3BoeV9sZWRfYmxpbmtfc2V0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIHU4IGluZGV4LFxuJiM0MztcdFx0XHQgICAgIHVuc2lnbmVkIGxvbmcgKmRlbGF5X29uLFxuJiM0MztcdFx0XHQgICAgIHVuc2lnbmVkIGxvbmcgKmRlbGF5X29mZik7XG4mIzQzO2ludCBtdDc5OHhfcGh5X2xlZF9icmlnaHRuZXNzX3NldChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LFxuJiM0MztcdFx0XHRcdCAgdTggaW5kZXgsIGVudW0gbGVkX2JyaWdodG5lc3MgdmFsdWUpO1xuJiM0MztpbnQgbXQ3OTh4X3BoeV9sZWRfaHdfaXNfc3VwcG9ydGVkKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIHU4IGluZGV4LFxuJiM0MztcdFx0XHRcdCAgIHVuc2lnbmVkIGxvbmcgcnVsZXMpO1xuJiM0MztpbnQgbXQ3OTh4X3BoeV9sZWRfaHdfY29udHJvbF9nZXQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgdTggaW5kZXgsXG4mIzQzO1x0XHRcdFx0ICB1bnNpZ25lZCBsb25nICpydWxlcyk7XG4mIzQzO2ludCBtdDc5OHhfcGh5X2xlZF9od19jb250cm9sX3NldChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCB1OCBpbmRleCxcbiYjNDM7XHRcdFx0XHQgIHVuc2lnbmVkIGxvbmcgcnVsZXMpO1xuJiM0MztcbiAjZW5kaWYgLyogX01US19FUEhZX0hfICovXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDkgMDE6MTE8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBoYXJkd2FyZS1zcGVjaWZpYyBFdGhlcm5ldCBQSFkgZHJpdmVyIGZvciBBaXJvaGEgU29DcyBhbmQgcmVmYWN0b3JzIHRoZSBleGlzdGluZyBNZWRpYVRlayBQSFkgZHJpdmVyIHRvIHNoYXJlIGNvZGUuIFNpbmNlIFBIWSBkZXZpY2VzIGFyZSBpbnN0YW50aWF0ZWQgYnkgdGhlIE1ESU8gYnVzIGJhc2VkIG9uIGhhcmR3YXJlIHByb2JpbmcgKHJlYWRpbmcgUEhZIElEIHJlZ2lzdGVycykgb3IgZGV2aWNlIHRyZWUsIGFuZCB0aGVyZSBpcyBubyB2aXJ0dWFsIE1ESU8gYnVzIG9yIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyAobGlrZSBRRU1VL0dDRSkgdGhhdCBjYW4gaW5zdGFudGlhdGUgdGhpcyBzcGVjaWZpYyBQSFksIHRoZSBjb2RlIGlzIGltcG9zc2libGUgdG8gcmVhY2ggYW5kIHRlc3QgdmlhIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdAogICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksCiAgIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBlMjdiNTVjZDZhOWViYjRhNmJjY2IxMmM5ZjYwMmI2MTdmYjBkMGViCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFRodSBKdWwgOSAwMToxMTo1MyAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL01BSU5UQUlORVJTIGIvTUFJTlRBSU5FUlMKaW5kZXggNTJmMWE1NWVjYTk5YmYuLjY1Y2MyMWIzOWMzZGJjIDEwMDY0NAotLS0gYS9NQUlOVEFJTkVSUwomIzQzOyYjNDM7JiM0MzsgYi9NQUlOVEFJTkVSUwpAQCAtNzYwLDYgJiM0Mzs3NjAsMTQgQEAgUzoJTWFpbnRhaW5lZAogRjoJRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9haXJvaGEsZW43NTgxLWV0aC55YW1sCiBGOglkcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvCiAKJiM0MztBSVJPSEEgRVRIRVJORVQgUEhZIERSSVZFUgomIzQzO006CUNocmlzdGlhbiBNYXJhbmdpICZsdDthbnN1ZWxzbXRoQGdtYWlsLmNvbSZndDsKJiM0MztMOglsaW51eC1hcm0ta2VybmVsQGxpc3RzLmluZnJhZGVhZC5vcmcgKG1vZGVyYXRlZCBmb3Igbm9uLXN1YnNjcmliZXJzKQomIzQzO0w6CWxpbnV4LW1lZGlhdGVrQGxpc3RzLmluZnJhZGVhZC5vcmcgKG1vZGVyYXRlZCBmb3Igbm9uLXN1YnNjcmliZXJzKQomIzQzO0w6CW5ldGRldkB2Z2VyLmtlcm5lbC5vcmcKJiM0MztTOglNYWludGFpbmVkCiYjNDM7RjoJZHJpdmVycy9uZXQvcGh5L21lZGlhdGVrL2Fpcm9oYS1nZS1zb2MuYwomIzQzOwogQUlST0hBIFBDSUUgUEhZIERSSVZFUgogTToJTG9yZW56byBCaWFuY29uaSAmbHQ7bG9yZW56b0BrZXJuZWwub3JnJmd0OwogTDoJbGludXgtYXJtLWtlcm5lbEBsaXN0cy5pbmZyYWRlYWQub3JnIChtb2RlcmF0ZWQgZm9yIG5vbi1zdWJzY3JpYmVycykKQEAgLTE2NDgzLDYgJiM0MzsxNjQ5MSw3IEBAIEw6CW5ldGRldkB2Z2VyLmtlcm5lbC5vcmcKIFM6CU1haW50YWluZWQKIEY6CWRyaXZlcnMvbmV0L3BoeS9tZWRpYXRlay9tdGstMnA1Z2UuYwogRjoJZHJpdmVycy9uZXQvcGh5L21lZGlhdGVrL210ay1nZS1zb2MuYwomIzQzO0Y6CWRyaXZlcnMvbmV0L3BoeS9tZWRpYXRlay9tdGstZ2Utc29jLmgKIEY6CWRyaXZlcnMvbmV0L3BoeS9tZWRpYXRlay9tdGstcGh5LWxpYi5jCiBGOglkcml2ZXJzL25ldC9waHkvbWVkaWF0ZWsvbXRrLWdlLmMKIEY6CWRyaXZlcnMvbmV0L3BoeS9tZWRpYXRlay9tdGsuaApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGh5L21lZGlhdGVrL0tjb25maWcgYi9kcml2ZXJzL25ldC9waHkvbWVkaWF0ZWsvS2NvbmZpZwppbmRleCBiYjdkYzg3NjI3MWU4My4uZmU1MWY0NjE2YzU0NGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3BoeS9tZWRpYXRlay9LY29uZmlnCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3BoeS9tZWRpYXRlay9LY29uZmlnCkBAIC0xLDQgJiM0MzsxLDE3IEBACiAjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHkKJiM0Mztjb25maWcgQUlST0hBX0dFX1NPQ19QSFkKJiM0MzsJdHJpc3RhdGUgJiMzNDtBaXJvaGEgU29DIEV0aGVybmV0IFBIWXMmIzM0OwomIzQzOwlkZXBlbmRzIG9uIEFSTTY0IHx8IENPTVBJTEVfVEVTVAomIzQzOwlkZXBlbmRzIG9uIEFSQ0hfQUlST0hBIHx8IENPTVBJTEVfVEVTVAomIzQzOwlzZWxlY3QgTVRLX05FVF9QSFlMSUIKJiM0MzsJc2VsZWN0IFBIWV9QQUNLQUdFCiYjNDM7CWhlbHAKJiM0MzsJICBTdXBwb3J0cyBBaXJvaGEgU29DIGJ1aWx0LWluIEdpZ2FiaXQgRXRoZXJuZXQgUEhZcy4KJiM0MzsKJiM0MzsJICBJbmNsdWRlIHN1cHBvcnQgZm9yIGJ1aWx0LWluIEV0aGVybmV0IFBIWXMgd2hpY2ggYXJlIHByZXNlbnQgaW4KJiM0MzsJICB0aGUgQU43NTgxIGFuZCBBTjc1ODMgU29Dcy4gVGhlc2UgUEhZcyBkIHdpbGwgZHluYW1pY2FsbHkKJiM0MzsJICBjYWxpYnJhdGUgZHVyaW5nIHN0YXJ0dXAuCiYjNDM7CiBjb25maWcgTUVESUFURUtfMlA1R0VfUEhZCiAJdHJpc3RhdGUgJiMzNDtNZWRpYVRlayAyLjVHYiBFdGhlcm5ldCBQSFlzJiMzNDsKIAlkZXBlbmRzIG9uIChBUk02NCAmYW1wOyZhbXA7IEFSQ0hfTUVESUFURUspIHx8IENPTVBJTEVfVEVTVApAQCAtMjQsOCAmIzQzOzM3LDcgQEAgY29uZmlnIE1FRElBVEVLX0dFX1BIWQogY29uZmlnIE1FRElBVEVLX0dFX1NPQ19QSFkKIAl0cmlzdGF0ZSAmIzM0O01lZGlhVGVrIFNvQyBFdGhlcm5ldCBQSFlzJiMzNDsKIAlkZXBlbmRzIG9uIEFSTTY0IHx8IENPTVBJTEVfVEVTVAotCWRlcGVuZHMgb24gQVJDSF9BSVJPSEEgfHwgKEFSQ0hfTUVESUFURUsgJmFtcDsmYW1wOyBOVk1FTV9NVEtfRUZVU0UpIHx8IFwKLQkJICAgQ09NUElMRV9URVNUCiYjNDM7CWRlcGVuZHMgb24gKEFSQ0hfTUVESUFURUsgJmFtcDsmYW1wOyBOVk1FTV9NVEtfRUZVU0UpIHx8IENPTVBJTEVfVEVTVAogCXNlbGVjdCBNVEtfTkVUX1BIWUxJQgogCXNlbGVjdCBQSFlfUEFDS0FHRQogCWhlbHAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BoeS9tZWRpYXRlay9NYWtlZmlsZSBiL2RyaXZlcnMvbmV0L3BoeS9tZWRpYXRlay9NYWtlZmlsZQppbmRleCBhYzU3ZWNjNzk5ZmM4MS4uZWI0MzBmMDA4MTY5ZTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3BoeS9tZWRpYXRlay9NYWtlZmlsZQomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9waHkvbWVkaWF0ZWsvTWFrZWZpbGUKQEAgLTEsNCAmIzQzOzEsNSBAQAogIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAomIzQzO29iai0kKENPTkZJR19BSVJPSEFfR0VfU09DX1BIWSkJCSYjNDM7PSBhaXJvaGEtZ2Utc29jLm8KIG9iai0kKENPTkZJR19NRURJQVRFS18yUDVHRV9QSFkpCSYjNDM7PSBtdGstMnA1Z2Uubwogb2JqLSQoQ09ORklHX01FRElBVEVLX0dFX1BIWSkJCSYjNDM7PSBtdGstZ2Uubwogb2JqLSQoQ09ORklHX01FRElBVEVLX0dFX1NPQ19QSFkpCSYjNDM7PSBtdGstZ2Utc29jLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BoeS9tZWRpYXRlay9haXJvaGEtZ2Utc29jLmMgYi9kcml2ZXJzL25ldC9waHkvbWVkaWF0ZWsvYWlyb2hhLWdlLXNvYy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwLi42MDFhNjRkODMzNjU0MgotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3BoeS9tZWRpYXRlay9haXJvaGEtZ2Utc29jLmMKQEAgLTAsMCAmIzQzOzEsMTgxMiBAQAomIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wJiM0MzsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvYml0ZmllbGQuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvcGluY3RybC9jb25zdW1lci5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9waHkuaCZndDsKJiM0MzsKJiM0MzsjaW5jbHVkZSAmIzM0Oy4uL3BoeWxpYi5oJiMzNDsKJiM0MzsjaW5jbHVkZSAmIzM0O210ay5oJiMzNDsKJiM0MzsjaW5jbHVkZSAmIzM0O210ay1nZS1zb2MuaCYjMzQ7CiYjNDM7CiYjNDM7I2RlZmluZSBBSVJPSEFfREVGQVVMVF9QT1JUMF9BRERSCQkweDkKJiM0MzsjZGVmaW5lIEFJUk9IQV9QSFlfTUFYX0xFRFMJCQkyCiYjNDM7CiYjNDM7ZW51bSBhaXJvaGFfbWRpX3Jlc2lzdGVyX3R5cGUgewomIzQzOwlNRElfMFIsCiYjNDM7CU1ESV81UiwKJiM0MzsKJiM0MzsJTURJX1RZUEVfTUFYLAomIzQzO307CiYjNDM7CiYjNDM7ZW51bSBhaXJvaGFfdHJhbnNmb3JtZXJfdHlwZSB7CiYjNDM7CVRYTVIsCiYjNDM7CURJU0NSRVRFLAomIzQzOwomIzQzOwlUUkFOU0ZPUk1FUl9UWVBFX01BWCwKJiM0Mzt9OwomIzQzOwomIzQzO2VudW0gYWlyb2hhX2NhbGliX2NvbnN0X3R5cGUgewomIzQzOwlUWF9BTVBfVEVTVF9BLAomIzQzOwlUWF9BTVBfVEVTVF9CLAomIzQzOwlUWF9BTVBfVEVTVF9DLAomIzQzOwlUWF9BTVBfVEVTVF9ELAomIzQzOwlUWF9BTVBfMUdfQSwKJiM0MzsJVFhfQU1QXzFHX0IsCiYjNDM7CVRYX0FNUF8xR19DLAomIzQzOwlUWF9BTVBfMUdfRCwKJiM0MzsJVFhfQU1QXzEwME1fQSwKJiM0MzsJVFhfQU1QXzEwME1fQiwKJiM0MzsJVFhfQU1QXzEwTV9BLAomIzQzOwlUWF9BTVBfMTBNX0IsCiYjNDM7CVI1MF9BLAomIzQzOwlSNTBfQiwKJiM0MzsJUjUwX0MsCiYjNDM7CVI1MF9ELAomIzQzOwomIzQzOwlDQUxJQl9DT05TVF9UWVBFX01BWCwKJiM0Mzt9OwomIzQzOwomIzQzO3N0cnVjdCBhaXJvaGFfc29jcGh5X3NoYXJlZCB7CiYjNDM7CXN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXZfcDA7CiYjNDM7CWVudW0gYWlyb2hhX3RyYW5zZm9ybWVyX3R5cGUgdHJhbnNmb3JtZXJfdHlwZVs0XTsKJiM0MzsJZW51bSBhaXJvaGFfbWRpX3Jlc2lzdGVyX3R5cGUgbWRpX3Jlc2lzdGVyX3R5cGU7CiYjNDM7CWJvb2wgcmV4dF9zd19jYWxpYl9kb25lOwomIzQzOwlpbnQgKCp0eF9hbXBfY29tcGVuc2F0aW9uX3RibClbVFJBTlNGT1JNRVJfVFlQRV9NQVhdW01ESV9UWVBFX01BWF1bQ0FMSUJfQ09OU1RfVFlQRV9NQVhdWzRdOwomIzQzOwl1OCAqcjUwX2NhbF90Ymw7CiYjNDM7fTsKJiM0MzsKJiM0MzsvKgomIzQzOyAqIDIgY2hpcCByZXZpc2lvbgomIzQzOyAqIFRYTVIgb3IgZGlzY3JldGUKJiM0MzsgKiAyIE1ESSB0eXBlCiYjNDM7ICogVFggQU1QIHRlc3QvVFggQU1QIDFHL1RYIEFNUCAxMDBNL1RYIEFNUCAxME0vUjUwCiYjNDM7ICogNCBQSFkKJiM0MzsgKi8KJiM0MztzdGF0aWMgaW50IGFuNzU4MV90eF9hbXBfY29tcGVuc2F0aW9uX3RibFsyXVtUUkFOU0ZPUk1FUl9UWVBFX01BWF1bTURJX1RZUEVfTUFYXVtDQUxJQl9DT05TVF9UWVBFX01BWF1bNF0gPSB7CiYjNDM7CXsgLyogSUMgdmVyc2lvbiAxICovCiYjNDM7CQlbVFhNUl0gPSB7CiYjNDM7CQkJeyB9LAomIzQzOwkJCXsKJiM0MzsJCQkJW1RYX0FNUF9URVNUX0FdID0geyAtMTIsIC0xMSwgLTksIC02IH0sCiYjNDM7CQkJCVtUWF9BTVBfVEVTVF9CXSA9IHsgLTksIC0xMywgLTksIC01IH0sCiYjNDM7CQkJCVtUWF9BTVBfVEVTVF9DXSA9IHsgLTUsIC00LCAtMywgMSB9LAomIzQzOwkJCQlbVFhfQU1QX1RFU1RfRF0gPSB7IC05LCAtOCwgLTcsIC01IH0sCiYjNDM7CQkJCVtUWF9BTVBfMUdfQV0gPSB7IC0xMiwgLTExLCAtOSwgLTYgfSwKJiM0MzsJCQkJW1RYX0FNUF8xR19CXSA9IHsgLTksIC0xMywgLTksIC01IH0sCiYjNDM7CQkJCVtUWF9BTVBfMUdfQ10gPSB7IC01LCAtNCwgLTMsIDEgfSwKJiM0MzsJCQkJW1RYX0FNUF8xR19EXSA9IHsgLTksIC04LCAtNywgLTUgfSwKJiM0MzsJCQkJW1RYX0FNUF8xMDBNX0FdID0geyAtMiwgLTIsIDAsIDIgfSwKJiM0MzsJCQkJW1RYX0FNUF8xMDBNX0JdID0geyAtMiwgLTIsIDEsIDEgfSwKJiM0MzsJCQkJW1RYX0FNUF8xME1fQV0gPSB7IDAsIDAsIDAsIDAgfSwKJiM0MzsJCQkJW1RYX0FNUF8xME1fQl0gPSB7IDAsIDAsIDAsIDAgfSwKJiM0MzsJCQkJW1I1MF9BXSA9IHsgMTUsIDE1LCAxNSwgMTUgfSwKJiM0MzsJCQkJW1I1MF9CXSA9IHsgMTUsIDE1LCAxOCwgMTUgfSwKJiM0MzsJCQkJW1I1MF9DXSA9IHsgLTgsIC04LCAtOCwgLTggfSwKJiM0MzsJCQkJW1I1MF9EXSA9IHsgLTgsIC04LCAtOCwgLTggfSwKJiM0MzsJCQl9LAomIzQzOwkJfSwKJiM0MzsJCVtESVNDUkVURV0gPSB7CiYjNDM7CQkJeyB9LAomIzQzOwkJCXsKJiM0MzsJCQkJW1RYX0FNUF9URVNUX0FdID0geyAtOSwgLTcsIC03LCAtNSB9LAomIzQzOwkJCQlbVFhfQU1QX1RFU1RfQl0gPSB7IC05LCAtOSwgLTcsIC00IH0sCiYjNDM7CQkJCVtUWF9BTVBfVEVTVF9DXSA9IHsgLTksIC03LCAtOSwgLTYgfSwKJiM0MzsJCQkJW1RYX0FNUF9URVNUX0RdID0geyAtMTEsIC05LCAtMTAsIC04IH0sCiYjNDM7CQkJCVtUWF9BTVBfMUdfQV0gPSB7IC05LCAtNywgLTcsIC01IH0sCiYjNDM7CQkJCVtUWF9BTVBfMUdfQl0gPSB7IC05LCAtOCwgLTcsIC00IH0sCiYjNDM7CQkJCVtUWF9BTVBfMUdfQ10gPSB7IC05LCAtNywgLTksIC02IH0sCiYjNDM7CQkJCVtUWF9BTVBfMUdfRF0gPSB7IC0xMSwgLTgsIC0xMCwgLTggfSwKJiM0MzsJCQkJW1RYX0FNUF8xMDBNX0FdID0geyA0LCAzLCA0LCA0IH0sCiYjNDM7CQkJCVtUWF9BTVBfMTAwTV9CXSA9IHsgNCwgNCwgNSwgNCB9LAomIzQzOwkJCQlbVFhfQU1QXzEwTV9BXSA9IHsgMCwgMCwgMCwgMCB9LAomIzQzOwkJCQlbVFhfQU1QXzEwTV9CXSA9IHsgMCwgMCwgMCwgMCB9LAomIzQzOwkJCQlbUjUwX0FdID0geyAwLCAwLCAwLCAwIH0sCiYjNDM7CQkJCVtSNTBfQl0gPSB7IDAsIDAsIDAsIDAgfSwKJiM0MzsJCQkJW1I1MF9DXSA9IHsgMCwgMCwgMCwgMCB9LAomIzQzOwkJCQlbUjUwX0RdID0geyAwLCAwLCAwLCAwIH0sCiYjNDM7CQkJfSwKJiM0MzsJCX0sCiYjNDM7CX0sCiYjNDM7CXsgLyogSUMgdmVyc2lvbiAyICovCiYjNDM7CQlbVFhNUl0gPSB7CiYjNDM7CQkJeyB9LAomIzQzOwkJCXsKJiM0MzsJCQkJW1RYX0FNUF9URVNUX0FdID0geyAtMTAsIC0xMiwgLTEyLCAtMTEgfSwKJiM0MzsJCQkJW1RYX0FNUF9URVNUX0JdID0geyAtMTAsIC0xMSwgLTExLCAtMTAgfSwKJiM0MzsJCQkJW1RYX0FNUF9URVNUX0NdID0geyAtNSwgLTcsIC05LCAtMyB9LAomIzQzOwkJCQlbVFhfQU1QX1RFU1RfRF0gPSB7IC04LCAtMTAsIC03LCAtOCB9LAomIzQzOwkJCQlbVFhfQU1QXzFHX0FdID0geyAtMTIsIC02LCAtNiwgNCB9LAomIzQzOwkJCQlbVFhfQU1QXzFHX0JdID0geyAtMTAsIC01LCAtNSwgMSB9LAomIzQzOwkJCQlbVFhfQU1QXzFHX0NdID0geyAtNSwgLTMsIC00LCAxMSB9LAomIzQzOwkJCQlbVFhfQU1QXzFHX0RdID0geyAtOCwgLTMsIC0zLCA0IH0sCiYjNDM7CQkJCVtUWF9BTVBfMTAwTV9BXSA9IHsgMiwgMSwgMCwgMyB9LAomIzQzOwkJCQlbVFhfQU1QXzEwME1fQl0gPSB7IDAsIDAsIDAsIDMgfSwKJiM0MzsJCQkJW1RYX0FNUF8xME1fQV0gPSB7IDAsIDAsIDAsIDAgfSwKJiM0MzsJCQkJW1RYX0FNUF8xME1fQl0gPSB7IDAsIDAsIDAsIDAgfSwKJiM0MzsJCQkJW1I1MF9BXSA9IHsgMTUsIDE1LCAxNSwgMTUgfSwKJiM0MzsJCQkJW1I1MF9CXSA9IHsgMTUsIDE1LCAxOCwgMTUgfSwKJiM0MzsJCQkJW1I1MF9DXSA9IHsgNCwgNCwgNCwgNCB9LAomIzQzOwkJCQlbUjUwX0RdID0geyA0LCA0LCA0LCA0IH0sCiYjNDM7CQkJfSwKJiM0MzsJCX0sCiYjNDM7CQlbRElTQ1JFVEVdID0gewomIzQzOwkJCXsgfSwKJiM0MzsJCQl7CiYjNDM7CQkJCVtUWF9BTVBfVEVTVF9BXSA9IHsgLTExLCAxMSwgLTEyLCAtNyB9LAomIzQzOwkJCQlbVFhfQU1QX1RFU1RfQl0gPSB7IC05LCAtMTAsIC05LCAtOCB9LAomIzQzOwkJCQlbVFhfQU1QX1RFU1RfQ10gPSB7IC02LCAtMywgLTcsIC00IH0sCiYjNDM7CQkJCVtUWF9BTVBfVEVTVF9EXSA9IHsgLTcsIC04LCAtMTAsIC03IH0sCiYjNDM7CQkJCVtUWF9BTVBfMUdfQV0gPSB7IC0xMSwgLTExLCAtMTIsIC03IH0sCiYjNDM7CQkJCVtUWF9BTVBfMUdfQl0gPSB7IC05LCAtMTAsIC05LCAtOCB9LAomIzQzOwkJCQlbVFhfQU1QXzFHX0NdID0geyAtNiwgLTMsIC03LCAtNCB9LAomIzQzOwkJCQlbVFhfQU1QXzFHX0RdID0geyAtNywgLTgsIC0xMCwgLTcgfSwKJiM0MzsJCQkJW1RYX0FNUF8xMDBNX0FdID0geyAyLCAyLCAxLCAyIH0sCiYjNDM7CQkJCVtUWF9BTVBfMTAwTV9CXSA9IHsgMywgMywgMywgMyB9LAomIzQzOwkJCQlbVFhfQU1QXzEwTV9BXSA9IHsgMCwgMCwgMCwgMCB9LAomIzQzOwkJCQlbVFhfQU1QXzEwTV9CXSA9IHsgMCwgMCwgMCwgMCB9LAomIzQzOwkJCQlbUjUwX0FdID0geyAxMiwgMTIsIDEyLCAxMiB9LAomIzQzOwkJCQlbUjUwX0JdID0geyA3LCA3LCA3LCA3IH0sCiYjNDM7CQkJCVtSNTBfQ10gPSB7IDIsIDIsIDAsIDAgfSwKJiM0MzsJCQkJW1I1MF9EXSA9IHsgMCwgMCwgMiwgMiB9LAomIzQzOwkJCX0sCiYjNDM7CQl9LAomIzQzOwl9LAomIzQzO307CiYjNDM7CiYjNDM7c3RhdGljIHU4IGFuNzU4MV96Y2FsX3RvX3I0NW9obVs2NF0gPSB7CiYjNDM7CTEyNywgMTI3LCAxMjcsIDEyNywgMTI3LCAxMjcsIDEyNywgMTI3LCAxMjcsIDEyNywgMTI3LCAxMjcsIDEyNywgMTI3LCAxMjcsIDEyNywKJiM0MzsJMTI3LCAxMjcsIDEyNywgMTI3LCAxMjcsIDEyNywgMTI3LCAxMjcsIDEyMywgMTE5LCAxMTUsIDExMiwgMTA4LCAxMDQsIDEwMCwgIDk2LAomIzQzOwkgOTQsICA5MiwgIDg4LCAgODUsICA4MiwgIDgwLCAgNzYsICA3NCwgIDcyLCAgNjgsICA2NiwgIDY0LCAgNjIsICA2MCwgIDU2LCAgNTUsCiYjNDM7CSA1MiwgIDUwLCAgNDgsICA0NiwgIDQ0LCAgNDIsICA0MCwgIDM5LCAgMzYsICAzNSwgIDMyLCAgMzIsICAzMCwgIDI4LCAgMjcsICAyNQomIzQzO307CiYjNDM7CiYjNDM7LyoKJiM0MzsgKiAyIGNoaXAgcmV2aXNpb24KJiM0MzsgKiBUWE1SIG9yIGRpc2NyZXRlCiYjNDM7ICogMiBNREkgdHlwZQomIzQzOyAqIFRYIEFNUCB0ZXN0L1RYIEFNUCAxRy9UWCBBTVAgMTAwTS9UWCBBTVAgMTBNL1I1MAomIzQzOyAqIDQgUEhZCiYjNDM7ICovCiYjNDM7c3RhdGljIGludCBhbjc1ODNfdHhfYW1wX2NvbXBlbnNhdGlvbl90YmxbVFJBTlNGT1JNRVJfVFlQRV9NQVhdW01ESV9UWVBFX01BWF1bQ0FMSUJfQ09OU1RfVFlQRV9NQVhdWzRdID0gewomIzQzOwlbVFhNUl0gPSB7CiYjNDM7CQlbTURJXzBSXSA9IHsKJiM0MzsJCQlbVFhfQU1QX1RFU1RfQV0gPSB7IC0zLCAtMywgLTMsIC0zIH0sCiYjNDM7CQkJW1RYX0FNUF9URVNUX0JdID0geyAtMywgLTMsIC0zLCAtMyB9LAomIzQzOwkJCVtUWF9BTVBfVEVTVF9DXSA9IHsgLTMsIC0zLCAtMywgLTMgfSwKJiM0MzsJCQlbVFhfQU1QX1RFU1RfRF0gPSB7IC0zLCAtMywgLTMsIC0zIH0sCiYjNDM7CQkJW1RYX0FNUF8xR19BXSA9IHsgMCwgMCwgMCwgMCB9LAomIzQzOwkJCVtUWF9BTVBfMUdfQl0gPSB7IDAsIDAsIDAsIDAgfSwKJiM0MzsJCQlbVFhfQU1QXzFHX0NdID0geyAwLCAwLCAwLCAwIH0sCiYjNDM7CQkJW1RYX0FNUF8xR19EXSA9IHsgMCwgMCwgMCwgMCB9LAomIzQzOwkJCVtUWF9BTVBfMTAwTV9BXSA9IHsgNCwgNCwgNCwgNCB9LAomIzQzOwkJCVtUWF9BTVBfMTAwTV9CXSA9IHsgNCwgNCwgNCwgNCB9LAomIzQzOwkJCVtUWF9BTVBfMTBNX0FdID0geyAwLCAwLCAwLCAwIH0sCiYjNDM7CQkJW1RYX0FNUF8xME1fQl0gPSB7IDAsIDAsIDAsIDAgfSwKJiM0MzsJCQlbUjUwX0FdID0geyA0LCA0LCAwLCAwIH0sCiYjNDM7CQkJW1I1MF9CXSA9IHsgNCwgNCwgMCwgMCB9LAomIzQzOwkJCVtSNTBfQ10gPSB7IDUsIDUsIDMsIDQgfSwKJiM0MzsJCQlbUjUwX0RdID0geyA0LCA0LCA0LCAwIH0sCiYjNDM7CQl9LAomIzQzOwkJW01ESV81Ul0gPSB7CiYjNDM7CQkJW1RYX0FNUF9URVNUX0FdID0geyAtMywgLTMsIC0zLCAtMyB9LAomIzQzOwkJCVtUWF9BTVBfVEVTVF9CXSA9IHsgLTMsIC0zLCAtMywgLTMgfSwKJiM0MzsJCQlbVFhfQU1QX1RFU1RfQ10gPSB7IC0zLCAtMywgLTMsIC0zIH0sCiYjNDM7CQkJW1RYX0FNUF9URVNUX0RdID0geyAtMywgLTMsIC0zLCAtMyB9LAomIzQzOwkJCVtUWF9BTVBfMUdfQV0gPSB7IDAsIDAsIDAsIDAgfSwKJiM0MzsJCQlbVFhfQU1QXzFHX0JdID0geyAwLCAwLCAwLCAwIH0sCiYjNDM7CQkJW1RYX0FNUF8xR19DXSA9IHsgMCwgMCwgMCwgMCB9LAomIzQzOwkJCVtUWF9BTVBfMUdfRF0gPSB7IDAsIDAsIDAsIDAgfSwKJiM0MzsJCQlbVFhfQU1QXzEwME1fQV0gPSB7IDQsIDQsIDQsIDQgfSwKJiM0MzsJCQlbVFhfQU1QXzEwME1fQl0gPSB7IDQsIDQsIDQsIDQgfSwKJiM0MzsJCQlbVFhfQU1QXzEwTV9BXSA9IHsgMCwgMCwgMCwgMCB9LAomIzQzOwkJCVtUWF9BTVBfMTBNX0JdID0geyAwLCAwLCAwLCAwIH0sCiYjNDM7CQkJW1I1MF9BXSA9IHsgLTQsIC00LCAtNCwgLTQgfSwKJiM0MzsJCQlbUjUwX0JdID0geyAtNCwgLTQsIC00LCAtNCB9LAomIzQzOwkJCVtSNTBfQ10gPSB7IC0yLCAtMiwgLTIsIC0yIH0sCiYjNDM7CQkJW1I1MF9EXSA9IHsgLTMsIC0zLCAtMiwgLTIgfSwKJiM0MzsJCX0sCiYjNDM7CX0sCiYjNDM7CVtESVNDUkVURV0gPSB7CiYjNDM7CQlbTURJXzBSXSA9IHsKJiM0MzsJCQlbVFhfQU1QX1RFU1RfQV0gPSB7IC0zLCAtMywgLTMsIC0zIH0sCiYjNDM7CQkJW1RYX0FNUF9URVNUX0JdID0geyAtMywgLTMsIC0zLCAtMyB9LAomIzQzOwkJCVtUWF9BTVBfVEVTVF9DXSA9IHsgLTMsIC0zLCAtMywgLTMgfSwKJiM0MzsJCQlbVFhfQU1QX1RFU1RfRF0gPSB7IC0zLCAtMywgLTMsIC0zIH0sCiYjNDM7CQkJW1RYX0FNUF8xR19BXSA9IHsgMCwgMCwgMCwgMCB9LAomIzQzOwkJCVtUWF9BTVBfMUdfQl0gPSB7IDAsIDAsIDAsIDAgfSwKJiM0MzsJCQlbVFhfQU1QXzFHX0NdID0geyAwLCAwLCAwLCAwIH0sCiYjNDM7CQkJW1RYX0FNUF8xR19EXSA9IHsgMCwgMCwgMCwgMCB9LAomIzQzOwkJCVtUWF9BTVBfMTAwTV9BXSA9IHsgNCwgNCwgNCwgNCB9LAomIzQzOwkJCVtUWF9BTVBfMTAwTV9CXSA9IHsgNCwgNCwgNCwgNCB9LAomIzQzOwkJCVtUWF9BTVBfMTBNX0FdID0geyAwLCAwLCAwLCAwIH0sCiYjNDM7CQkJW1RYX0FNUF8xME1fQl0gPSB7IDAsIDAsIDAsIDAgfSwKJiM0MzsJCQlbUjUwX0FdID0geyA0LCA0LCA0LCA0IH0sCiYjNDM7CQkJW1I1MF9CXSA9IHsgNCwgNCwgNCwgNCB9LAomIzQzOwkJCVtSNTBfQ10gPSB7IDYsIDYsIDYsIDYgfSwKJiM0MzsJCQlbUjUwX0RdID0geyA0LCA0LCA0LCA0IH0sCiYjNDM7CQl9LAomIzQzOwkJW01ESV81Ul0gPSB7CiYjNDM7CQkJW1RYX0FNUF9URVNUX0FdID0geyAtMywgLTMsIC0zLCAtMyB9LAomIzQzOwkJCVtUWF9BTVBfVEVTVF9CXSA9IHsgLTMsIC0zLCAtMywgLTMgfSwKJiM0MzsJCQlbVFhfQU1QX1RFU1RfQ10gPSB7IC0zLCAtMywgLTMsIC0zIH0sCiYjNDM7CQkJW1RYX0FNUF9URVNUX0RdID0geyAtMywgLTMsIC0zLCAtMyB9LAomIzQzOwkJCVtUWF9BTVBfMUdfQV0gPSB7IDAsIDAsIDAsIDAgfSwKJiM0MzsJCQlbVFhfQU1QXzFHX0JdID0geyAwLCAwLCAwLCAwIH0sCiYjNDM7CQkJW1RYX0FNUF8xR19DXSA9IHsgMCwgMCwgMCwgMCB9LAomIzQzOwkJCVtUWF9BTVBfMUdfRF0gPSB7IDAsIDAsIDAsIDAgfSwKJiM0MzsJCQlbVFhfQU1QXzEwME1fQV0gPSB7IDQsIDQsIDQsIDQgfSwKJiM0MzsJCQlbVFhfQU1QXzEwME1fQl0gPSB7IDQsIDQsIDQsIDQgfSwKJiM0MzsJCQlbVFhfQU1QXzEwTV9BXSA9IHsgMCwgMCwgMCwgMCB9LAomIzQzOwkJCVtUWF9BTVBfMTBNX0JdID0geyAwLCAwLCAwLCAwIH0sCiYjNDM7CQkJW1I1MF9BXSA9IHsgMCwgMCwgMCwgMCB9LAomIzQzOwkJCVtSNTBfQl0gPSB7IDAsIDAsIDAsIDAgfSwKJiM0MzsJCQlbUjUwX0NdID0geyAwLCAwLCAwLCAwIH0sCiYjNDM7CQkJW1I1MF9EXSA9IHsgMCwgMCwgMCwgMCB9LAomIzQzOwkJfSwKJiM0MzsJfSwKJiM0Mzt9OwomIzQzOwomIzQzO3N0YXRpYyB1OCBhbjc1ODNfemNhbF90b19yNTBvaG1fMFJbNjRdID0gewomIzQzOwkxMjcsIDEyNywgMTI3LCAxMjcsIDEyNywgMTI3LCAxMjcsIDEyNywgMTI3LCAxMjcsIDEyNywgMTI3LCAxMjcsIDEyNywgMTI3LCAxMjcsCiYjNDM7CTEyNywgMTI3LCAxMjcsIDEyMiwgMTE4LCAxMTQsIDExMCwgMTA2LCAxMDIsICA5OCwgIDk2LCAgOTIsICA4OCwgIDg1LCAgODIsICA4MCwKJiM0MzsJIDc2LCAgNzIsICA3MCwgIDY4LCAgNjQsICA2MiwgIDYwLCAgNTcsICA1NSwgIDUyLCAgNTAsICA0OCwgIDQ2LCAgNDQsICA0MSwgIDQwLAomIzQzOwkgMzgsICAzNiwgIDMzLCAgMzIsICAzMCwgIDI4LCAgMjYsICAyNCwgIDI0LCAgMjIsICAyMCwgIDE4LCAgMTYsICAxNiwgIDE0LCAgMTIsCiYjNDM7fTsKJiM0MzsKJiM0MztzdGF0aWMgdTggYW43NTgzX3pjYWxfdG9fcjUwb2htXzVSWzY0XSA9IHsKJiM0MzsJMTI3LCAxMjcsIDEyNywgMTI3LCAxMjcsIDEyNywgMTI3LCAxMjcsIDEyNywgMTI3LCAxMjcsIDEyNywgMTI3LCAxMjcsIDEyNywgMTI3LAomIzQzOwkxMjcsIDEyNywgMTI3LCAxMjcsIDEyNywgMTI3LCAxMjcsIDEyNywgMTI3LCAxMjQsIDEyMCwgMTE2LCAxMTIsIDExMCwgMTA2LCAxMDIsCiYjNDM7CSA5OSwgIDk2LCAgOTMsICA5MCwgIDg4LCAgODQsICA4MSwgIDc5LCAgNzYsICA3MywgIDcxLCAgNjgsICA2NiwgIDY0LCAgNjEsICA1OSwKJiM0MzsJIDU2LCAgNTQsICA1MiwgIDUwLCAgNDgsICA0NiwgIDQ0LCAgNDIsICA0MCwgIDM5LCAgMzcsICAzNiwgIDMzLCAgMzIsICAzMSwgIDI5LAomIzQzO307CiYjNDM7CiYjNDM7c3RhdGljIGludCBhaXJvaGFfY2FsX2N5Y2xlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIGludCBkZXZhZCwKJiM0MzsJCQkgICAgdTMyIHJlZ251bSwgdTE2IG1hc2ssIHUxNiBjYWxfdmFsKQomIzQzO3sKJiM0MzsJc3RydWN0IGFpcm9oYV9zb2NwaHlfc2hhcmVkICpzaGFyZWQgPSBwaHlfcGFja2FnZV9nZXRfcHJpdihwaHlkZXYpOwomIzQzOwlzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2X3AwOwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwlwaHlkZXZfcDAgPSBzaGFyZWQtJmd0O3BoeWRldl9wMDsKJiM0MzsKJiM0MzsJcGh5X21vZGlmeV9tbWQocGh5ZGV2LCBkZXZhZCwgcmVnbnVtLCBtYXNrLCBjYWxfdmFsKTsKJiM0MzsKJiM0MzsJcmV0ID0gbXRrX2NhbF9jeWNsZV93YWl0KHBoeWRldl9wMCk7CiYjNDM7CXBoeWRldl9kYmcocGh5ZGV2LCAmIzM0O2NhbF92YWw6IDB4JXgsIHJldDogJWRcbiYjMzQ7LCBjYWxfdmFsLCByZXQpOwomIzQzOwomIzQzOwlyZXR1cm4gcmV0OwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IGFpcm9oYV9yZXh0X2NhbF9zdyhzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KQomIzQzO3sKJiM0MzsJaW50IGNhbGlicmF0aW9uX3BvbGFyaXR5OwomIzQzOwl1OCB6Y2FsX2N0cmwgPSAzMjsKJiM0MzsJaW50IGZpcnN0X2NhbGliOwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwkvKiBCRyB2b2x0YWdlIG91dHB1dCAqLwomIzQzOwlwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDIsIDB4MTAwLCAweGMwMDApOwomIzQzOwkvKiB0c3RfbW9kZTIgKi8KJiM0MzsJcGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQyLCAweGZmLCAweDIpOwomIzQzOwomIzQzOwlwaHlfY2xlYXJfYml0c19tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMiwgMHhmZiwKJiM0MzsJCQkgICBHRU5NQVNLKDE1LCA0KSB8IEdFTk1BU0soMSwgMCkpOwomIzQzOwomIzQzOwlwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIE1US19QSFlfUkdfQU5BX0NBTF9SRzAsCiYjNDM7CQkgICAgICBNVEtfUEhZX1JHX0NBTF9DS0lOViB8IE1US19QSFlfUkdfQU5BX0NBTEVOIHwKJiM0MzsJCSAgICAgIE1US19QSFlfUkdfUkVYVF9DQUxFTik7CiYjNDM7CXBoeV93cml0ZV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSwgTVRLX1BIWV9SR19BTkFfQ0FMX1JHMSwgMCk7CiYjNDM7CXBoeV93cml0ZV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSwgTVRLX1BIWV9SR19BTkFfQ0FMX1JHNiwgMCk7CiYjNDM7CiYjNDM7CXBoeWRldl9kYmcocGh5ZGV2LCAmIzM0O1N0YXJ0IFJFWFQgU1cgY2FsLlxuJiMzNDspOwomIzQzOwlmaXJzdF9jYWxpYiA9IGFpcm9oYV9jYWxfY3ljbGUocGh5ZGV2LCBNRElPX01NRF9WRU5EMSwgTVRLX1BIWV9SR19BTkFfQ0FMX1JHNSwKJiM0MzsJCQkJICAgICAgIE1US19QSFlfUkdfUkVYVF9aQ0FMX0NUUkxfTUFTSywgemNhbF9jdHJsKTsKJiM0MzsKJiM0MzsJaWYgKGZpcnN0X2NhbGliICZsdDsgMCkgewomIzQzOwkJcGh5ZGV2X2VycihwaHlkZXYsICYjMzQ7UkVYVCBTVyBjYWxpYnJhdGlvbiBmYWlsZWQuXG4mIzM0Oyk7CiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJfQomIzQzOwomIzQzOwkvKiBJZiBSRVhUIGNhbGlicmF0aW9uIGZhaWxlZDoKJiM0MzsJICogLSBpbmNyZWFzZSBkQiB1bnRpbCBjYWxpYnJhdGlvbiBzdWNjZWVkLgomIzQzOwkgKiBJZiBSRVhUIGNhbGlicmF0aW9uIHN1Y2NlZWRlZDoKJiM0MzsJICogLSBkZWNyZWFzZSBkQiB1bnRpbCBjYWxpYnJhdGlvbiBmYWlsIHRvIGZpbmUgdHVuZSBpdC4KJiM0MzsJICovCiYjNDM7CWlmIChmaXJzdF9jYWxpYiA9PSAxKQomIzQzOwkJY2FsaWJyYXRpb25fcG9sYXJpdHkgPSAtMTsKJiM0MzsJZWxzZQomIzQzOwkJY2FsaWJyYXRpb25fcG9sYXJpdHkgPSAxOwomIzQzOwomIzQzOwl3aGlsZSAoemNhbF9jdHJsICZndDsgMCAmYW1wOyZhbXA7CiYjNDM7CSAgICAgICB6Y2FsX2N0cmwgJmx0OyBGSUVMRF9NQVgoTVRLX1BIWV9SR19SRVhUX1pDQUxfQ1RSTF9NQVNLKSkgewomIzQzOwkJemNhbF9jdHJsICYjNDM7PSBjYWxpYnJhdGlvbl9wb2xhcml0eTsKJiM0MzsKJiM0MzsJCXJldCA9IGFpcm9oYV9jYWxfY3ljbGUocGh5ZGV2LCBNRElPX01NRF9WRU5EMSwgTVRLX1BIWV9SR19BTkFfQ0FMX1JHNSwKJiM0MzsJCQkJICAgICAgIE1US19QSFlfUkdfUkVYVF9aQ0FMX0NUUkxfTUFTSywgemNhbF9jdHJsKTsKJiM0MzsJCS8qIEV4aXQgaWYgd2UgZWl0aGVyIGZhaWxlZCBvciBzdWNjZWVkZWQgY29tcGFyZWQgdG8gdGhlCiYjNDM7CQkgKiBmaXJzdCBjYWxpYnJhdGlvbiByZXN1bHQuIChha2Egd2UgZmluaXNoZWQgZmluZSB0dW5pbmcgb3IKJiM0MzsJCSAqIHdlIHN1Y2NlZWRlZCB3aXRoIGNhbGlicmF0aW9uKQomIzQzOwkJICovCiYjNDM7CQlpZiAocmV0ICE9IGZpcnN0X2NhbGliKQomIzQzOwkJCWJyZWFrOwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmIChyZXQgJmx0OyAwKSB7CiYjNDM7CQlwaHlkZXZfZXJyKHBoeWRldiwgJiMzNDtSRVhUIFNXIGNhbGlicmF0aW9uIGZhaWxlZC5cbiYjMzQ7KTsKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmICh6Y2FsX2N0cmwgPT0gMCB8fAomIzQzOwkgICAgemNhbF9jdHJsID09IEZJRUxEX01BWChNVEtfUEhZX1JHX1JFWFRfWkNBTF9DVFJMX01BU0spKSB7CiYjNDM7CQl6Y2FsX2N0cmwgPSAzMjsKJiM0MzsJCXBoeWRldl9lcnIocGh5ZGV2LCAmIzM0O1JFWFQgU1cgY2FsaWJyYXRpb24gc2F0dXJhdGlvbi4gRGVmYXVsdGluZyB0byAleC5cbiYjMzQ7LAomIzQzOwkJCSAgIHpjYWxfY3RybCk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcGh5X21vZGlmeV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSwgTVRLX1BIWV9SR19BTkFfQ0FMX1JHNSwKJiM0MzsJCSAgICAgICBNVEtfUEhZX1JHX1JFWFRfVFJJTV9NQVNLLAomIzQzOwkJICAgICAgIEZJRUxEX1BSRVAoTVRLX1BIWV9SR19SRVhUX1RSSU1fTUFTSywgemNhbF9jdHJsKSk7CiYjNDM7CXBoeV9tb2RpZnlfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDIsIE1US19QSFlfUkdfQkdfUkFTRUwsCiYjNDM7CQkgICAgICAgTVRLX1BIWV9SR19CR19SQVNFTF9NQVNLLAomIzQzOwkJICAgICAgIEZJRUxEX1BSRVAoTVRLX1BIWV9SR19CR19SQVNFTF9NQVNLLCB6Y2FsX2N0cmwgJmd0OyZndDsgMykpOwomIzQzOwomIzQzOwlwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIE1US19QSFlfUkdfQU5BX0NBTF9SRzAsIDApOwomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBhaXJvaGFfdHhfb2Zmc2V0X2NhbF9zdyhzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCB1OCB0eGdfY2FsZW5feCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBhaXJvaGFfc29jcGh5X3NoYXJlZCAqc2hhcmVkID0gcGh5X3BhY2thZ2VfZ2V0X3ByaXYocGh5ZGV2KTsKJiM0MzsJc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldl9wMDsKJiM0MzsJdTE2IGRldjFlXzE0NV90bXAsIGJtY3JfdG1wOwomIzQzOwlpbnQgY2FsaWJyYXRpb25fcG9sYXJpdHk7CiYjNDM7CXUxNiByZWdfZGFjMSwgcmVnX2RhYzI7CiYjNDM7CWludCB6Y2FsX2N0cmwgPSAwOwomIzQzOwlpbnQgZmlyc3RfY2FsaWI7CiYjNDM7CXUxNiByZWcsIG1hc2s7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CXBoeWRldl9wMCA9IHNoYXJlZC0mZ3Q7cGh5ZGV2X3AwOwomIzQzOwomIzQzOwkvKiBCRyB2b2x0YWdlIG91dHB1dCAqLwomIzQzOwlwaHlfd3JpdGVfbW1kKHBoeWRldl9wMCwgTURJT19NTURfVkVORDIsIDB4MTAwLCAweGMwMDApOwomIzQzOwomIzQzOwlwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIE1US19QSFlfUkdfQU5BX0NBTF9SRzAsCiYjNDM7CQkgICAgICBNVEtfUEhZX1JHX0FOQV9DQUxFTik7CiYjNDM7CXBoeV93cml0ZV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSwgTVRLX1BIWV9SR19BTkFfQ0FMX1JHMSwKJiM0MzsJCSAgICAgIE1US19QSFlfUkdfVFhWT1NfQ0FMRU4pOwomIzQzOwlwaHlfd3JpdGVfbW1kKHBoeWRldl9wMCwgTURJT19NTURfVkVORDEsIE1US19QSFlfUkdfQU5BX0NBTF9SRzAsCiYjNDM7CQkgICAgICBNVEtfUEhZX1JHX0FOQV9DQUxFTik7CiYjNDM7CXBoeV93cml0ZV9tbWQocGh5ZGV2X3AwLCBNRElPX01NRF9WRU5EMSwgTVRLX1BIWV9SR19BTkFfQ0FMX1JHMSwKJiM0MzsJCSAgICAgIE1US19QSFlfUkdfVFhWT1NfQ0FMRU4pOwomIzQzOwomIzQzOwkvKiBGb3JjZSAxRyBmdWxsIGR1cGxleCBmb3IgY2FsaWJyYXRpb24gKi8KJiM0MzsJYm1jcl90bXAgPSBwaHlfcmVhZChwaHlkZXYsIE1JSV9CTUNSKTsKJiM0MzsJcGh5X3dyaXRlKHBoeWRldiwgTUlJX0JNQ1IsIEJNQ1JfRlVMTERQTFggfCBCTUNSX1NQRUVEMTAwMCk7CiYjNDM7CiYjNDM7CS8qIEZvcmNlIE1ESSAqLwomIzQzOwlkZXYxZV8xNDVfdG1wID0gcGh5X3JlYWRfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIDB4MDE0NSk7CiYjNDM7CXBoeV93cml0ZV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSwgMHgwMTQ1LCAweDEwMTApOwomIzQzOwomIzQzOwkvKiAxZV85NlsxNV06YnlwYXNzX3R4X29mZnNldF9jYWwsIEh3IGJ5cGFzcywgRncgY2FsICovCiYjNDM7CXBoeV93cml0ZV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSwgMHg5NiwKJiM0MzsJCSAgICAgIDB4ODAwMCk7CiYjNDM7CXBoeV93cml0ZV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSwgMHgzZSwKJiM0MzsJCSAgICAgIDB4ZjgwOCk7CiYjNDM7CiYjNDM7CXN3aXRjaCAodHhnX2NhbGVuX3gpIHsKJiM0MzsJY2FzZSBQQUlSX0E6CiYjNDM7CQlwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIDB4ZGQsIEJJVCgxMikpOwomIzQzOwkJcmVnX2RhYzEgPSBNVEtfUEhZX1JHX0RBU05fREFDX0lOMF9BOwomIzQzOwkJcmVnX2RhYzIgPSBNVEtfUEhZX1JHX0RBU05fREFDX0lOMV9BOwomIzQzOwkJcmVnID0gTVRLX1BIWV9SR19DUl9UWF9BTVBfT0ZGU0VUX0FfQjsKJiM0MzsJCW1hc2sgPSBNVEtfUEhZX0NSX1RYX0FNUF9PRkZTRVRfQV9NQVNLOwomIzQzOwkJYnJlYWs7CiYjNDM7CWNhc2UgUEFJUl9COgomIzQzOwkJcGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCAweGRkLCBCSVQoOCkpOwomIzQzOwkJcmVnX2RhYzEgPSBNVEtfUEhZX1JHX0RBU05fREFDX0lOMF9COwomIzQzOwkJcmVnX2RhYzIgPSBNVEtfUEhZX1JHX0RBU05fREFDX0lOMV9COwomIzQzOwkJcmVnID0gTVRLX1BIWV9SR19DUl9UWF9BTVBfT0ZGU0VUX0FfQjsKJiM0MzsJCW1hc2sgPSBNVEtfUEhZX0NSX1RYX0FNUF9PRkZTRVRfQl9NQVNLOwomIzQzOwkJYnJlYWs7CiYjNDM7CWNhc2UgUEFJUl9DOgomIzQzOwkJcGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCAweGRkLCBCSVQoNCkpOwomIzQzOwkJcmVnX2RhYzEgPSBNVEtfUEhZX1JHX0RBU05fREFDX0lOMF9DOwomIzQzOwkJcmVnX2RhYzIgPSBNVEtfUEhZX1JHX0RBU05fREFDX0lOMV9DOwomIzQzOwkJcmVnID0gTVRLX1BIWV9SR19DUl9UWF9BTVBfT0ZGU0VUX0NfRDsKJiM0MzsJCW1hc2sgPSBNVEtfUEhZX0NSX1RYX0FNUF9PRkZTRVRfQ19NQVNLOwomIzQzOwkJYnJlYWs7CiYjNDM7CWNhc2UgUEFJUl9EOgomIzQzOwkJcGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCAweGRkLCBCSVQoMCkpOwomIzQzOwkJcmVnX2RhYzEgPSBNVEtfUEhZX1JHX0RBU05fREFDX0lOMF9EOwomIzQzOwkJcmVnX2RhYzIgPSBNVEtfUEhZX1JHX0RBU05fREFDX0lOMV9EOwomIzQzOwkJcmVnID0gTVRLX1BIWV9SR19DUl9UWF9BTVBfT0ZGU0VUX0NfRDsKJiM0MzsJCW1hc2sgPSBNVEtfUEhZX0NSX1RYX0FNUF9PRkZTRVRfRF9NQVNLOwomIzQzOwkJYnJlYWs7CiYjNDM7CWRlZmF1bHQ6CiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJfQomIzQzOwomIzQzOwlwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIHJlZ19kYWMxLAomIzQzOwkJICAgICAgMHg4MDAwKTsKJiM0MzsJcGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCByZWdfZGFjMiwKJiM0MzsJCSAgICAgIDB4ODAwMCk7CiYjNDM7CiYjNDM7CXBoeWRldl9kYmcocGh5ZGV2LCAmIzM0O1N0YXJ0IFRYIE9mZnNldCBTVyBjYWwuXG4mIzM0Oyk7CiYjNDM7CiYjNDM7CWZpcnN0X2NhbGliID0gYWlyb2hhX2NhbF9jeWNsZShwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCByZWcsIG1hc2ssCiYjNDM7CQkJCSAgICAgICB6Y2FsX2N0cmwgJmx0OyZsdDsgX19mZnMobWFzaykpOwomIzQzOwomIzQzOwkvKiBJZiBUWCBPZmZzZXQgY2FsaWJyYXRpb24gZmFpbGVkOgomIzQzOwkgKiAtIGluY3JlYXNlIGRCIHVudGlsIGNhbGlicmF0aW9uIHN1Y2NlZWQuCiYjNDM7CSAqIElmIFRYIE9mZnNldCBjYWxpYnJhdGlvbiBzdWNjZWVkZWQ6CiYjNDM7CSAqIC0gZGVjcmVhc2UgZEIgdW50aWwgY2FsaWJyYXRpb24gZmFpbCB0byBmaW5lIHR1bmUgaXQuCiYjNDM7CSAqLwomIzQzOwlpZiAoZmlyc3RfY2FsaWIgPT0gMSkKJiM0MzsJCWNhbGlicmF0aW9uX3BvbGFyaXR5ID0gLTE7CiYjNDM7CWVsc2UKJiM0MzsJCWNhbGlicmF0aW9uX3BvbGFyaXR5ID0gMTsKJiM0MzsKJiM0MzsJd2hpbGUgKHpjYWxfY3RybCAmZ3Q7IC0zMiAmYW1wOyZhbXA7IHpjYWxfY3RybCAmbHQ7IDMyKSB7CiYjNDM7CQl1MzIgdmFsOwomIzQzOwomIzQzOwkJemNhbF9jdHJsICYjNDM7PSBjYWxpYnJhdGlvbl9wb2xhcml0eTsKJiM0MzsJCWlmICh6Y2FsX2N0cmwgJmd0Oz0gMCkKJiM0MzsJCQl2YWwgPSB6Y2FsX2N0cmw7CiYjNDM7CQllbHNlCiYjNDM7CQkJLyogQklUKDUpIHNpZ25hbCBuZWdhdGl2ZSBudW1iZXIgZm9yIFRYIE9mZnNldCAqLwomIzQzOwkJCXZhbCA9IEJJVCg1KSB8IGFicyh6Y2FsX2N0cmwpOwomIzQzOwomIzQzOwkJcmV0ID0gYWlyb2hhX2NhbF9jeWNsZShwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCByZWcsIG1hc2ssCiYjNDM7CQkJCSAgICAgICB2YWwgJmx0OyZsdDsgX19mZnMobWFzaykpOwomIzQzOwkJLyogRXhpdCBpZiB3ZSBlaXRoZXIgZmFpbGVkIG9yIHN1Y2NlZWRlZCBjb21wYXJlZCB0byB0aGUKJiM0MzsJCSAqIGZpcnN0IGNhbGlicmF0aW9uIHJlc3VsdC4gKGFrYSB3ZSBmaW5pc2hlZCBmaW5lIHR1bmluZyBvcgomIzQzOwkJICogd2Ugc3VjY2VlZGVkIHdpdGggY2FsaWJyYXRpb24pCiYjNDM7CQkgKi8KJiM0MzsJCWlmIChyZXQgIT0gZmlyc3RfY2FsaWIpCiYjNDM7CQkJYnJlYWs7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKHJldCAmbHQ7IDApIHsKJiM0MzsJCXBoeWRldl9lcnIocGh5ZGV2LCAmIzM0O1RYIE9mZnNldCBjYWxpYnJhdGlvbiBmYWlsZWQuXG4mIzM0Oyk7CiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAoemNhbF9jdHJsID09IC0zMiB8fAomIzQzOwkgICAgemNhbF9jdHJsID09IDMyKSB7CiYjNDM7CQl6Y2FsX2N0cmwgPSAwOwomIzQzOwkJcGh5ZGV2X2VycihwaHlkZXYsICYjMzQ7VFggT2Zmc2V0IFNXIGNhbGlicmF0aW9uIHNhdHVyYXRpb24uIERlZmF1bHRpbmcgdG8gJXguXG4mIzM0OywKJiM0MzsJCQkgICB6Y2FsX2N0cmwpOwomIzQzOwomIzQzOwkJcGh5X21vZGlmeV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSwgcmVnLCBtYXNrLAomIzQzOwkJCSAgICAgICB6Y2FsX2N0cmwgJmx0OyZsdDsgX19mZnMobWFzaykpOwomIzQzOwl9CiYjNDM7CiYjNDM7CXBoeV93cml0ZV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMiwgMHgxMDAsIDB4MCk7CiYjNDM7CiYjNDM7CXBoeV93cml0ZV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSwgTVRLX1BIWV9SR19EQVNOX0RBQ19JTjBfQSwgMCk7CiYjNDM7CXBoeV93cml0ZV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSwgTVRLX1BIWV9SR19EQVNOX0RBQ19JTjBfQiwgMCk7CiYjNDM7CXBoeV93cml0ZV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSwgTVRLX1BIWV9SR19EQVNOX0RBQ19JTjBfQywgMCk7CiYjNDM7CXBoeV93cml0ZV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSwgTVRLX1BIWV9SR19EQVNOX0RBQ19JTjBfRCwgMCk7CiYjNDM7CXBoeV93cml0ZV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSwgTVRLX1BIWV9SR19EQVNOX0RBQ19JTjFfQSwgMCk7CiYjNDM7CXBoeV93cml0ZV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSwgTVRLX1BIWV9SR19EQVNOX0RBQ19JTjFfQiwgMCk7CiYjNDM7CXBoeV93cml0ZV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSwgTVRLX1BIWV9SR19EQVNOX0RBQ19JTjFfQywgMCk7CiYjNDM7CXBoeV93cml0ZV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSwgTVRLX1BIWV9SR19EQVNOX0RBQ19JTjFfRCwgMCk7CiYjNDM7CiYjNDM7CXBoeV93cml0ZV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSwgTVRLX1BIWV9SR19BTkFfQ0FMX1JHMCwgMCk7CiYjNDM7CXBoeV93cml0ZV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSwgTVRLX1BIWV9SR19BTkFfQ0FMX1JHMSwgMCk7CiYjNDM7CXBoeV93cml0ZV9tbWQocGh5ZGV2X3AwLCBNRElPX01NRF9WRU5EMSwgTVRLX1BIWV9SR19BTkFfQ0FMX1JHMCwgMCk7CiYjNDM7CXBoeV93cml0ZV9tbWQocGh5ZGV2X3AwLCBNRElPX01NRF9WRU5EMSwgTVRLX1BIWV9SR19BTkFfQ0FMX1JHMSwgMCk7CiYjNDM7CXBoeV93cml0ZV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSwgMHg5NiwgMHgwKTsKJiM0MzsJcGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCAweDNlLCAweGMwMDApOwomIzQzOwlwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIDB4ZGQsIDApOwomIzQzOwomIzQzOwkvKiBSZXN0b3JlIEJNQ1IgKi8KJiM0MzsJcGh5X3dyaXRlKHBoeWRldiwgTUlJX0JNQ1IsIGJtY3JfdG1wKTsKJiM0MzsKJiM0MzsJLyogUmVzdG9yZSBNREkgKi8KJiM0MzsJcGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCAweDAxNDUsIGRldjFlXzE0NV90bXApOwomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBhaXJvaGFfdHhfYW1wX2NhbF9zdyhzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCB1OCB0eGdfY2FsZW5feCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBhaXJvaGFfc29jcGh5X3NoYXJlZCAqc2hhcmVkID0gcGh5X3BhY2thZ2VfZ2V0X3ByaXYocGh5ZGV2KTsKJiM0MzsJdTE2IG1hc2tfZ2JlLCBtYXNrX3RidCwgbWFza190c3QsIG1hc2tfaGJ0OwomIzQzOwl1MTYgcmVnLCByZWdfMTAwLCByZWdfZGFjMSwgcmVnX2RhYzI7CiYjNDM7CXN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXZfcDA7CiYjNDM7CWludCBjYWxpYnJhdGlvbl9wb2xhcml0eTsKJiM0MzsJdTggemNhbF9jdHJsID0gMzI7CiYjNDM7CWludCBmaXJzdF9jYWxpYjsKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJcGh5ZGV2X3AwID0gc2hhcmVkLSZndDtwaHlkZXZfcDA7CiYjNDM7CiYjNDM7CS8qIEJHIHZvbHRhZ2Ugb3V0cHV0ICovCiYjNDM7CXBoeV93cml0ZV9tbWQocGh5ZGV2X3AwLCBNRElPX01NRF9WRU5EMiwgMHgxMDAsIDB4YzAwMCk7CiYjNDM7CiYjNDM7CXBoeV93cml0ZV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSwgMHgxNDUsIDB4MTAxMCk7CiYjNDM7CiYjNDM7CXBoeV93cml0ZV9tbWQocGh5ZGV2X3AwLCBNRElPX01NRF9WRU5EMSwgTVRLX1BIWV9SR19BTkFfQ0FMX1JHMCwKJiM0MzsJCSAgICAgIE1US19QSFlfUkdfQ0FMX0NLSU5WIHwgTVRLX1BIWV9SR19BTkFfQ0FMRU4pOwomIzQzOwlwaHlfd3JpdGVfbW1kKHBoeWRldl9wMCwgTURJT19NTURfVkVORDEsIE1US19QSFlfUkdfQU5BX0NBTF9SRzEsCiYjNDM7CQkgICAgICBNVEtfUEhZX1JHX1RYVk9TX0NBTEVOKTsKJiM0MzsKJiM0MzsJLyogc2VsZWN0IDFWICovCiYjNDM7CXBoeV93cml0ZV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSwgTVRLX1BIWV9SR19BTkFfQ0FMX1JHNiwgMHgxMCk7CiYjNDM7CiYjNDM7CS8qIGVuYWJsZSBUeCBWTEQqLwomIzQzOwlwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIDB4M2UsIDB4ZjgwOCk7CiYjNDM7CiYjNDM7CS8qIEZvcmNlIDFHIGZ1bGwgZHVwbGV4IGZvciBjYWxpYnJhdGlvbiAqLwomIzQzOwlwaHlfd3JpdGUocGh5ZGV2LCBNSUlfQk1DUiwgQk1DUl9GVUxMRFBMWCB8IEJNQ1JfU1BFRUQxMDAwKTsKJiM0MzsKJiM0MzsJc3dpdGNoICh0eGdfY2FsZW5feCkgewomIzQzOwljYXNlIFBBSVJfQToKJiM0MzsJCXBoeV93cml0ZV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSwgMHhkZCwgQklUKDEyKSk7CiYjNDM7CQlyZWdfZGFjMSA9IE1US19QSFlfUkdfREFTTl9EQUNfSU4wX0E7CiYjNDM7CQlyZWdfZGFjMiA9IE1US19QSFlfUkdfREFTTl9EQUNfSU4xX0E7CiYjNDM7CQlyZWcgPSBNVEtfUEhZX1RYVkxEX0RBX1JHOwomIzQzOwkJbWFza19nYmUgPSBNVEtfUEhZX0RBX1RYX0kyTVBCX0FfR0JFX01BU0s7CiYjNDM7CQltYXNrX3RidCA9IE1US19QSFlfREFfVFhfSTJNUEJfQV9UQlRfTUFTSzsKJiM0MzsJCXJlZ18xMDAgPSBNVEtfUEhZX1RYX0kyTVBCX1RFU1RfTU9ERV9BMjsKJiM0MzsJCW1hc2tfaGJ0ID0gTVRLX1BIWV9EQV9UWF9JMk1QQl9BX0hCVF9NQVNLOwomIzQzOwkJbWFza190c3QgPSBNVEtfUEhZX0RBX1RYX0kyTVBCX0FfVFNUX01BU0s7CiYjNDM7CQlicmVhazsKJiM0MzsJY2FzZSBQQUlSX0I6CiYjNDM7CQlwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIDB4ZGQsIEJJVCg4KSk7CiYjNDM7CQlyZWdfZGFjMSA9IE1US19QSFlfUkdfREFTTl9EQUNfSU4wX0I7CiYjNDM7CQlyZWdfZGFjMiA9IE1US19QSFlfUkdfREFTTl9EQUNfSU4xX0I7CiYjNDM7CQlyZWcgPSBNVEtfUEhZX1RYX0kyTVBCX1RFU1RfTU9ERV9CMTsKJiM0MzsJCW1hc2tfZ2JlID0gTVRLX1BIWV9EQV9UWF9JMk1QQl9CX0dCRV9NQVNLOwomIzQzOwkJbWFza190YnQgPSBNVEtfUEhZX0RBX1RYX0kyTVBCX0JfVEJUX01BU0s7CiYjNDM7CQlyZWdfMTAwID0gTVRLX1BIWV9UWF9JMk1QQl9URVNUX01PREVfQjI7CiYjNDM7CQltYXNrX2hidCA9IE1US19QSFlfREFfVFhfSTJNUEJfQl9IQlRfTUFTSzsKJiM0MzsJCW1hc2tfdHN0ID0gTVRLX1BIWV9EQV9UWF9JMk1QQl9CX1RTVF9NQVNLOwomIzQzOwkJYnJlYWs7CiYjNDM7CWNhc2UgUEFJUl9DOgomIzQzOwkJcGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCAweGRkLCBCSVQoNCkpOwomIzQzOwkJcmVnX2RhYzEgPSBNVEtfUEhZX1JHX0RBU05fREFDX0lOMF9DOwomIzQzOwkJcmVnX2RhYzIgPSBNVEtfUEhZX1JHX0RBU05fREFDX0lOMV9DOwomIzQzOwkJcmVnID0gTVRLX1BIWV9UWF9JMk1QQl9URVNUX01PREVfQzE7CiYjNDM7CQltYXNrX2diZSA9IE1US19QSFlfREFfVFhfSTJNUEJfQ19HQkVfTUFTSzsKJiM0MzsJCW1hc2tfdGJ0ID0gTVRLX1BIWV9EQV9UWF9JMk1QQl9DX1RCVF9NQVNLOwomIzQzOwkJcmVnXzEwMCA9IE1US19QSFlfVFhfSTJNUEJfVEVTVF9NT0RFX0MyOwomIzQzOwkJbWFza19oYnQgPSBNVEtfUEhZX0RBX1RYX0kyTVBCX0NfSEJUX01BU0s7CiYjNDM7CQltYXNrX3RzdCA9IE1US19QSFlfREFfVFhfSTJNUEJfQ19UU1RfTUFTSzsKJiM0MzsJCWJyZWFrOwomIzQzOwljYXNlIFBBSVJfRDoKJiM0MzsJCXBoeV93cml0ZV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSwgMHhkZCwgQklUKDApKTsKJiM0MzsJCXJlZ19kYWMxID0gTVRLX1BIWV9SR19EQVNOX0RBQ19JTjBfRDsKJiM0MzsJCXJlZ19kYWMyID0gTVRLX1BIWV9SR19EQVNOX0RBQ19JTjFfRDsKJiM0MzsJCXJlZyA9IE1US19QSFlfVFhfSTJNUEJfVEVTVF9NT0RFX0QxOwomIzQzOwkJbWFza19nYmUgPSBNVEtfUEhZX0RBX1RYX0kyTVBCX0RfR0JFX01BU0s7CiYjNDM7CQltYXNrX3RidCA9IE1US19QSFlfREFfVFhfSTJNUEJfRF9UQlRfTUFTSzsKJiM0MzsJCXJlZ18xMDAgPSBNVEtfUEhZX1RYX0kyTVBCX1RFU1RfTU9ERV9EMjsKJiM0MzsJCW1hc2tfaGJ0ID0gTVRLX1BIWV9EQV9UWF9JMk1QQl9EX0hCVF9NQVNLOwomIzQzOwkJbWFza190c3QgPSBNVEtfUEhZX0RBX1RYX0kyTVBCX0RfVFNUX01BU0s7CiYjNDM7CQlicmVhazsKJiM0MzsJZGVmYXVsdDoKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwl9CiYjNDM7CiYjNDM7CXBoeV93cml0ZV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSwgcmVnX2RhYzEsCiYjNDM7CQkgICAgICAweDgwMDAgfCAweGYwKTsKJiM0MzsJcGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCByZWdfZGFjMiwKJiM0MzsJCSAgICAgIDB4ODAwMCB8IDB4ZjApOwomIzQzOwomIzQzOwlwaHlkZXZfZGJnKHBoeWRldiwgJiMzNDtTdGFydCBUWCBBbXAgU1cgY2FsLlxuJiMzNDspOwomIzQzOwlmaXJzdF9jYWxpYiA9IGFpcm9oYV9jYWxfY3ljbGUocGh5ZGV2LCBNRElPX01NRF9WRU5EMSwgcmVnLAomIzQzOwkJCQkgICAgICAgbWFza19nYmUsIHpjYWxfY3RybCAmbHQ7Jmx0OyBfX2ZmcyhtYXNrX2diZSkpOwomIzQzOwomIzQzOwkvKiBJZiBUWCBBbXAgY2FsaWJyYXRpb24gZmFpbGVkOgomIzQzOwkgKiAtIGluY3JlYXNlIGRCIHVudGlsIGNhbGlicmF0aW9uIHN1Y2NlZWQuCiYjNDM7CSAqIElmIFRYIEFtcCBjYWxpYnJhdGlvbiBzdWNjZWVkZWQ6CiYjNDM7CSAqIC0gZGVjcmVhc2UgZEIgdW50aWwgY2FsaWJyYXRpb24gZmFpbCB0byBmaW5lIHR1bmUgaXQuCiYjNDM7CSAqLwomIzQzOwlpZiAoZmlyc3RfY2FsaWIgPT0gMSkKJiM0MzsJCWNhbGlicmF0aW9uX3BvbGFyaXR5ID0gLTE7CiYjNDM7CWVsc2UKJiM0MzsJCWNhbGlicmF0aW9uX3BvbGFyaXR5ID0gMTsKJiM0MzsKJiM0MzsJd2hpbGUgKHpjYWxfY3RybCAmZ3Q7IDAgJmFtcDsmYW1wOwomIzQzOwkgICAgICAgemNhbF9jdHJsICZsdDsgRklFTERfTUFYKE1US19QSFlfUkdfUkVYVF9aQ0FMX0NUUkxfTUFTSykpIHsKJiM0MzsJCXpjYWxfY3RybCAmIzQzOz0gY2FsaWJyYXRpb25fcG9sYXJpdHk7CiYjNDM7CiYjNDM7CQlyZXQgPSBhaXJvaGFfY2FsX2N5Y2xlKHBoeWRldiwgTURJT19NTURfVkVORDEsIHJlZywKJiM0MzsJCQkJICAgICAgIG1hc2tfZ2JlLCB6Y2FsX2N0cmwgJmx0OyZsdDsgX19mZnMobWFza19nYmUpKTsKJiM0MzsJCS8qIEV4aXQgaWYgd2UgZWl0aGVyIGZhaWxlZCBvciBzdWNjZWVkZWQgY29tcGFyZWQgdG8gdGhlCiYjNDM7CQkgKiBmaXJzdCBjYWxpYnJhdGlvbiByZXN1bHQuIChha2Egd2UgZmluaXNoZWQgZmluZSB0dW5pbmcgb3IKJiM0MzsJCSAqIHdlIHN1Y2NlZWRlZCB3aXRoIGNhbGlicmF0aW9uKQomIzQzOwkJICovCiYjNDM7CQlpZiAocmV0ICE9IGZpcnN0X2NhbGliKQomIzQzOwkJCWJyZWFrOwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmIChyZXQgJmx0OyAwKSB7CiYjNDM7CQlwaHlkZXZfZXJyKHBoeWRldiwgJiMzNDtUWCBBTVAgY2FsaWJyYXRpb24gZmFpbGVkLlxuJiMzNDspOwomIzQzOwkJcGh5X21vZGlmeV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSwgcmVnLAomIzQzOwkJCSAgICAgICBtYXNrX2diZSB8IG1hc2tfdGJ0LAomIzQzOwkJCSAgICAgICAoemNhbF9jdHJsICZsdDsmbHQ7IF9fZmZzKG1hc2tfZ2JlKSkgfAomIzQzOwkJCSAgICAgICAoemNhbF9jdHJsICZsdDsmbHQ7IF9fZmZzKG1hc2tfdGJ0KSkpOwomIzQzOwomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKHpjYWxfY3RybCA9PSAwIHx8CiYjNDM7CSAgICB6Y2FsX2N0cmwgPT0gRklFTERfTUFYKE1US19QSFlfUkdfUkVYVF9aQ0FMX0NUUkxfTUFTSykpCiYjNDM7CQlwaHlkZXZfd2FybihwaHlkZXYsICYjMzQ7VFggQU1QIFNXIGNhbGlicmF0aW9uIHNhdHVyYXRpb24uXG4mIzM0Oyk7CiYjNDM7CiYjNDM7CXBoeV9tb2RpZnlfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIHJlZywKJiM0MzsJCSAgICAgICBtYXNrX2diZSB8IG1hc2tfdGJ0LAomIzQzOwkJICAgICAgICh6Y2FsX2N0cmwgJmx0OyZsdDsgX19mZnMobWFza19nYmUpKSB8CiYjNDM7CQkgICAgICAgKHpjYWxfY3RybCAmbHQ7Jmx0OyBfX2ZmcyhtYXNrX3RidCkpKTsKJiM0MzsKJiM0MzsJcGh5X21vZGlmeV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSwgcmVnXzEwMCwKJiM0MzsJCSAgICAgICBtYXNrX2hidCB8IG1hc2tfdHN0LAomIzQzOwkJICAgICAgICh6Y2FsX2N0cmwgJmx0OyZsdDsgX19mZnMobWFza19oYnQpKSB8CiYjNDM7CQkgICAgICAgKHpjYWxfY3RybCAmbHQ7Jmx0OyBfX2ZmcyhtYXNrX3RzdCkpKTsKJiM0MzsKJiM0MzsJcGh5X3dyaXRlX21tZChwaHlkZXZfcDAsIE1ESU9fTU1EX1ZFTkQyLCAweDEwMCwgMHgwKTsKJiM0MzsKJiM0MzsJcGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCBNVEtfUEhZX1JHX0RBU05fREFDX0lOMF9BLCAwKTsKJiM0MzsJcGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCBNVEtfUEhZX1JHX0RBU05fREFDX0lOMF9CLCAwKTsKJiM0MzsJcGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCBNVEtfUEhZX1JHX0RBU05fREFDX0lOMF9DLCAwKTsKJiM0MzsJcGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCBNVEtfUEhZX1JHX0RBU05fREFDX0lOMF9ELCAwKTsKJiM0MzsJcGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCBNVEtfUEhZX1JHX0RBU05fREFDX0lOMV9BLCAwKTsKJiM0MzsJcGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCBNVEtfUEhZX1JHX0RBU05fREFDX0lOMV9CLCAwKTsKJiM0MzsJcGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCBNVEtfUEhZX1JHX0RBU05fREFDX0lOMV9DLCAwKTsKJiM0MzsJcGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCBNVEtfUEhZX1JHX0RBU05fREFDX0lOMV9ELCAwKTsKJiM0MzsJcGh5X3dyaXRlX21tZChwaHlkZXZfcDAsIE1ESU9fTU1EX1ZFTkQxLCAweDE0NSwgMHgxMDAwKTsKJiM0MzsKJiM0MzsJcGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCBNVEtfUEhZX1JHX0FOQV9DQUxfUkcwLCAwKTsKJiM0MzsJcGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCBNVEtfUEhZX1JHX0FOQV9DQUxfUkcxLCAwKTsKJiM0MzsJcGh5X3dyaXRlX21tZChwaHlkZXZfcDAsIE1ESU9fTU1EX1ZFTkQxLCBNVEtfUEhZX1JHX0FOQV9DQUxfUkcwLCAwKTsKJiM0MzsJcGh5X3dyaXRlX21tZChwaHlkZXZfcDAsIE1ESU9fTU1EX1ZFTkQxLCBNVEtfUEhZX1JHX0FOQV9DQUxfUkcxLCAwKTsKJiM0MzsJcGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCAweDNlLCAweGMwMDApOwomIzQzOwlwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIDB4ZGQsIDApOwomIzQzOwomIzQzOwkvKiBSZXN0b3JlIEFOIGVuYWJsZSAqLwomIzQzOwlwaHlfd3JpdGUocGh5ZGV2LCBNSUlfQk1DUiwgQk1DUl9BTkVOQUJMRSk7CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IGFpcm9oYV90eF9yNTBfY2FsX3N3KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIHU4IHR4Z19jYWxlbl94KQomIzQzO3sKJiM0MzsJc3RydWN0IGFpcm9oYV9zb2NwaHlfc2hhcmVkICpzaGFyZWQgPSBwaHlfcGFja2FnZV9nZXRfcHJpdihwaHlkZXYpOwomIzQzOwlzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2X3AwOwomIzQzOwl1MTYgZGV2MWVfMTQ1X3RtcCwgYm1jcl90bXA7CiYjNDM7CWludCBjYWxpYnJhdGlvbl9wb2xhcml0eTsKJiM0MzsJdTggemNhbF9jdHJsID0gMzI7CiYjNDM7CWludCBmaXJzdF9jYWxpYjsKJiM0MzsJdTE2IHJlZzsKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJcGh5ZGV2X3AwID0gc2hhcmVkLSZndDtwaHlkZXZfcDA7CiYjNDM7CiYjNDM7CS8qIEJHIHZvbHRhZ2Ugb3V0cHV0ICovCiYjNDM7CXBoeV93cml0ZV9tbWQocGh5ZGV2X3AwLCBNRElPX01NRF9WRU5EMiwgMHgxMDAsIDB4YzAwMCk7CiYjNDM7CiYjNDM7CXBoeV93cml0ZV9tbWQocGh5ZGV2X3AwLCBNRElPX01NRF9WRU5EMSwgTVRLX1BIWV9SR19BTkFfQ0FMX1JHMCwKJiM0MzsJCSAgICAgIE1US19QSFlfUkdfQ0FMX0NLSU5WIHwgTVRLX1BIWV9SR19BTkFfQ0FMRU4pOwomIzQzOwlwaHlfd3JpdGVfbW1kKHBoeWRldl9wMCwgTURJT19NTURfVkVORDEsIE1US19QSFlfUkdfQU5BX0NBTF9SRzEsIDApOwomIzQzOwkvKiBzZWxlY3QgMVYgKi8KJiM0MzsJcGh5X3dyaXRlX21tZChwaHlkZXZfcDAsIE1ESU9fTU1EX1ZFTkQxLCBNVEtfUEhZX1JHX0FOQV9DQUxfUkc2LCAweDEwKTsKJiM0MzsKJiM0MzsJcGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCBNVEtfUEhZX1JHX0FOQV9DQUxfUkcwLAomIzQzOwkJICAgICAgTVRLX1BIWV9SR19DQUxfQ0tJTlYgfCBNVEtfUEhZX1JHX0FOQV9DQUxFTik7CiYjNDM7CXBoeV93cml0ZV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSwgTVRLX1BIWV9SR19BTkFfQ0FMX1JHMSwgMCk7CiYjNDM7CS8qIHNlbGVjdCAxViAqLwomIzQzOwlwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIE1US19QSFlfUkdfQU5BX0NBTF9SRzYsIDB4MTApOwomIzQzOwomIzQzOwkvKiBGb3JjZSAxRyBmdWxsIGR1cGxleCBmb3IgY2FsaWJyYXRpb24gKi8KJiM0MzsJYm1jcl90bXAgPSBwaHlfcmVhZChwaHlkZXYsIE1JSV9CTUNSKTsKJiM0MzsJcGh5X3dyaXRlKHBoeWRldiwgTUlJX0JNQ1IsIEJNQ1JfRlVMTERQTFggfCBCTUNSX1NQRUVEMTAwMCk7CiYjNDM7CiYjNDM7CS8qIEZvcmNlIE1ESSAqLwomIzQzOwlkZXYxZV8xNDVfdG1wID0gcGh5X3JlYWRfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIDB4MDE0NSk7CiYjNDM7CXBoeV93cml0ZV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSwgMHgwMTQ1LCAweDEwMTApOwomIzQzOwomIzQzOwkvKiBkaXNhYmxlIHR4IHNsZXcgY29udHJvbCAqLwomIzQzOwlwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIDB4MDE4NSwgMHgwMDAwKTsKJiM0MzsJcGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCAweDAwZmIsIDB4MDEwMCk7CiYjNDM7CiYjNDM7CXN3aXRjaCAodHhnX2NhbGVuX3gpIHsKJiM0MzsJY2FzZSBQQUlSX0E6CiYjNDM7CQlwaHlfc2V0X2JpdHNfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsCiYjNDM7CQkJCSBNVEtfUEhZX1JHX0FOQV9DQUxfUkcwLAomIzQzOwkJCQkgTVRLX1BIWV9SR19aQ0FMRU5fQSk7CiYjNDM7CQlicmVhazsKJiM0MzsJY2FzZSBQQUlSX0I6CiYjNDM7CQlwaHlfc2V0X2JpdHNfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsCiYjNDM7CQkJCSBNVEtfUEhZX1JHX0FOQV9DQUxfUkcxLAomIzQzOwkJCQkgTVRLX1BIWV9SR19aQ0FMRU5fQik7CiYjNDM7CQlicmVhazsKJiM0MzsJY2FzZSBQQUlSX0M6CiYjNDM7CQlwaHlfc2V0X2JpdHNfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsCiYjNDM7CQkJCSBNVEtfUEhZX1JHX0FOQV9DQUxfUkcxLAomIzQzOwkJCQkgTVRLX1BIWV9SR19aQ0FMRU5fQyk7CiYjNDM7CQlicmVhazsKJiM0MzsJY2FzZSBQQUlSX0Q6CiYjNDM7CQlwaHlfc2V0X2JpdHNfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsCiYjNDM7CQkJCSBNVEtfUEhZX1JHX0FOQV9DQUxfUkcxLAomIzQzOwkJCQkgTVRLX1BIWV9SR19aQ0FMRU5fRCk7CiYjNDM7CQlicmVhazsKJiM0MzsJZGVmYXVsdDoKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwl9CiYjNDM7CiYjNDM7CXBoeWRldl9kYmcocGh5ZGV2LCAmIzM0O1N0YXJ0IFRYIHI1MCBTVyBjYWwuXG4mIzM0Oyk7CiYjNDM7CWZpcnN0X2NhbGliID0gYWlyb2hhX2NhbF9jeWNsZShwaHlkZXZfcDAsIE1ESU9fTU1EX1ZFTkQxLCBNVEtfUEhZX1JHX0FOQV9DQUxfUkc1LAomIzQzOwkJCQkgICAgICAgTVRLX1BIWV9SR19SRVhUX1pDQUxfQ1RSTF9NQVNLLCB6Y2FsX2N0cmwpOwomIzQzOwomIzQzOwlpZiAoZmlyc3RfY2FsaWIgJmx0OyAwKSB7CiYjNDM7CQlwaHlkZXZfZXJyKHBoeWRldiwgJiMzNDtUWCByNTAgU1cgY2FsaWJyYXRpb24gZmFpbGVkLlxuJiMzNDspOwomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CX0KJiM0MzsKJiM0MzsJLyogSWYgVFggcjUwIGNhbGlicmF0aW9uIGZhaWxlZDoKJiM0MzsJICogLSBpbmNyZWFzZSBkQiB1bnRpbCBjYWxpYnJhdGlvbiBzdWNjZWVkLgomIzQzOwkgKiBJZiBUWCByNTAgY2FsaWJyYXRpb24gc3VjY2VlZGVkOgomIzQzOwkgKiAtIGRlY3JlYXNlIGRCIHVudGlsIGNhbGlicmF0aW9uIGZhaWwgdG8gZmluZSB0dW5lIGl0LgomIzQzOwkgKi8KJiM0MzsJaWYgKGZpcnN0X2NhbGliID09IDEpCiYjNDM7CQljYWxpYnJhdGlvbl9wb2xhcml0eSA9IC0xOwomIzQzOwllbHNlCiYjNDM7CQljYWxpYnJhdGlvbl9wb2xhcml0eSA9IDE7CiYjNDM7CiYjNDM7CXdoaWxlICh6Y2FsX2N0cmwgJmd0OyAwICZhbXA7JmFtcDsKJiM0MzsJICAgICAgIHpjYWxfY3RybCAmbHQ7IEZJRUxEX01BWChNVEtfUEhZX1JHX1JFWFRfWkNBTF9DVFJMX01BU0spKSB7CiYjNDM7CQl6Y2FsX2N0cmwgJiM0Mzs9IGNhbGlicmF0aW9uX3BvbGFyaXR5OwomIzQzOwomIzQzOwkJcmV0ID0gYWlyb2hhX2NhbF9jeWNsZShwaHlkZXZfcDAsIE1ESU9fTU1EX1ZFTkQxLCBNVEtfUEhZX1JHX0FOQV9DQUxfUkc1LAomIzQzOwkJCQkgICAgICAgTVRLX1BIWV9SR19SRVhUX1pDQUxfQ1RSTF9NQVNLLCB6Y2FsX2N0cmwpOwomIzQzOwkJLyogRXhpdCBpZiB3ZSBlaXRoZXIgZmFpbGVkIG9yIHN1Y2NlZWRlZCBjb21wYXJlZCB0byB0aGUKJiM0MzsJCSAqIGZpcnN0IGNhbGlicmF0aW9uIHJlc3VsdC4gKGFrYSB3ZSBmaW5pc2hlZCBmaW5lIHR1bmluZyBvcgomIzQzOwkJICogd2Ugc3VjY2VlZGVkIHdpdGggY2FsaWJyYXRpb24pCiYjNDM7CQkgKi8KJiM0MzsJCWlmIChyZXQgIT0gZmlyc3RfY2FsaWIpCiYjNDM7CQkJYnJlYWs7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKHJldCAmbHQ7IDApIHsKJiM0MzsJCXBoeWRldl9lcnIocGh5ZGV2LCAmIzM0O1RYIHI1MCBTVyBjYWxpYnJhdGlvbiBmYWlsZWQuXG4mIzM0Oyk7CiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAoemNhbF9jdHJsID09IDAgfHwKJiM0MzsJICAgIHpjYWxfY3RybCA9PSBGSUVMRF9NQVgoTVRLX1BIWV9SR19SRVhUX1pDQUxfQ1RSTF9NQVNLKSkKJiM0MzsJCXBoeWRldl93YXJuKHBoeWRldiwgJiMzNDtUWCByNTAgU1cgY2FsaWJyYXRpb24gc2F0dXJhdGlvbi5cbiYjMzQ7KTsKJiM0MzsKJiM0MzsJemNhbF9jdHJsID0gc2hhcmVkLSZndDtyNTBfY2FsX3RibFt6Y2FsX2N0cmxdOwomIzQzOwomIzQzOwlzd2l0Y2ggKHR4Z19jYWxlbl94KSB7CiYjNDM7CWNhc2UgUEFJUl9BOgomIzQzOwkJcmVnID0gQklUKDcpIHwgRklFTERfUFJFUChNVEtfUEhZX0NSX1RYX1I1MF9PRkZTRVRfQV9NQVNLLCB6Y2FsX2N0cmwpOwomIzQzOwkJcGh5X21vZGlmeV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSwKJiM0MzsJCQkgICAgICAgTVRLX1BIWV9SR19DUl9UWF9SNTBfT0ZGU0VUX0FfQiwKJiM0MzsJCQkgICAgICAgQklUKDcpIHwgTVRLX1BIWV9DUl9UWF9SNTBfT0ZGU0VUX0FfTUFTSywgcmVnKTsKJiM0MzsJCWJyZWFrOwomIzQzOwljYXNlIFBBSVJfQjoKJiM0MzsJCXJlZyA9IEJJVCg3KSB8IEZJRUxEX1BSRVAoTVRLX1BIWV9DUl9UWF9SNTBfT0ZGU0VUX0JfTUFTSywgemNhbF9jdHJsKTsKJiM0MzsJCXBoeV9tb2RpZnlfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsCiYjNDM7CQkJICAgICAgIE1US19QSFlfUkdfQ1JfVFhfUjUwX09GRlNFVF9BX0IsCiYjNDM7CQkJICAgICAgIEJJVCg3KSB8IE1US19QSFlfQ1JfVFhfUjUwX09GRlNFVF9CX01BU0ssIHJlZyk7CiYjNDM7CQlicmVhazsKJiM0MzsJY2FzZSBQQUlSX0M6CiYjNDM7CQlyZWcgPSBCSVQoNykgfCBGSUVMRF9QUkVQKE1US19QSFlfQ1JfVFhfUjUwX09GRlNFVF9DX01BU0ssIHpjYWxfY3RybCk7CiYjNDM7CQlwaHlfbW9kaWZ5X21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLAomIzQzOwkJCSAgICAgICBNVEtfUEhZX1JHX0NSX1RYX1I1MF9PRkZTRVRfQ19ELAomIzQzOwkJCSAgICAgICBCSVQoNykgfCBNVEtfUEhZX0NSX1RYX1I1MF9PRkZTRVRfQ19NQVNLLCByZWcpOwomIzQzOwkJYnJlYWs7CiYjNDM7CWNhc2UgUEFJUl9EOgomIzQzOwkJcmVnID0gQklUKDcpIHwgRklFTERfUFJFUChNVEtfUEhZX0NSX1RYX1I1MF9PRkZTRVRfRF9NQVNLLCB6Y2FsX2N0cmwpOwomIzQzOwkJcGh5X21vZGlmeV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSwKJiM0MzsJCQkgICAgICAgTVRLX1BIWV9SR19DUl9UWF9SNTBfT0ZGU0VUX0NfRCwKJiM0MzsJCQkgICAgICAgQklUKDcpIHwgTVRLX1BIWV9DUl9UWF9SNTBfT0ZGU0VUX0RfTUFTSywgcmVnKTsKJiM0MzsJCWJyZWFrOwomIzQzOwlkZWZhdWx0OgomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCBNVEtfUEhZX1JHX0FOQV9DQUxfUkcwLCAwKTsKJiM0MzsJcGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCBNVEtfUEhZX1JHX0FOQV9DQUxfUkcxLCAwKTsKJiM0MzsJcGh5X3dyaXRlX21tZChwaHlkZXZfcDAsIE1ESU9fTU1EX1ZFTkQxLCBNVEtfUEhZX1JHX0FOQV9DQUxfUkcwLCAwKTsKJiM0MzsJcGh5X3dyaXRlX21tZChwaHlkZXZfcDAsIE1ESU9fTU1EX1ZFTkQxLCBNVEtfUEhZX1JHX0FOQV9DQUxfUkcxLCAwKTsKJiM0MzsKJiM0MzsJLyogRW5hYmxlIHR4IHNsZXcgY29udHJvbCAqLwomIzQzOwlwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIDB4MDE4NSwgMHgwMDAxKTsKJiM0MzsJcGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCAweDAwZmIsIDB4MDAwMCk7CiYjNDM7CiYjNDM7CXBoeV93cml0ZV9tbWQocGh5ZGV2X3AwLCBNRElPX01NRF9WRU5EMiwgMHgxMDAsIDB4MCk7CiYjNDM7CiYjNDM7CXBoeV93cml0ZV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSwgTVRLX1BIWV9SR19BTkFfQ0FMX1JHNiwgMHgwKTsKJiM0MzsJcGh5X3dyaXRlX21tZChwaHlkZXZfcDAsIE1ESU9fTU1EX1ZFTkQxLCBNVEtfUEhZX1JHX0FOQV9DQUxfUkc2LCAweDApOwomIzQzOwomIzQzOwkvKiBSZXN0b3JlIEJNQ1IgKi8KJiM0MzsJcGh5X3dyaXRlKHBoeWRldiwgTUlJX0JNQ1IsIGJtY3JfdG1wKTsKJiM0MzsKJiM0MzsJLyogUmVzdG9yZSBNREkgKi8KJiM0MzsJcGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCAweDAxNDUsIGRldjFlXzE0NV90bXApOwomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBhaXJvaGFfcnhfb2Zmc2V0X2NhbF9zdyhzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KQomIzQzO3sKJiM0MzsJLyogSHcgYnlwYXNzLCBGdyBjYWwgKi8KJiM0MzsJcGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCAweDk2LCAweDgwMDApOwomIzQzOwkvKiB0eC9yeF9jYWxfY3JpdGVyaWFfdmFsdWUgKi8KJiM0MzsJcGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCAweDM3LCAweDAwMzMpOwomIzQzOwomIzQzOwkvKiByeCBvZmZzZXQgY2FsIGJ5IEh3IHNldHVwICovCiYjNDM7CXBoeV9jbGVhcl9iaXRzX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCAweDM5LAomIzQzOwkJCSAgIEJJVCgxNCkgfCBCSVQoMTEpKTsKJiM0MzsKJiM0MzsJLyogZGlzYWJsZSBydHVuZSBjYWxpYnJhdGlvbiAqLwomIzQzOwlwaHlfY2xlYXJfYml0c19tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMiwgMHgxMDcsCiYjNDM7CQkJICAgQklUKDEyKSk7CiYjNDM7CiYjNDM7CS8qIGJ5cGFzcyB0eC9yeCBkYyBvZmZzZXQgY2FuY2VsbGF0aW9uIHByb2Nlc3MgKi8KJiM0MzsJcGh5X3NldF9iaXRzX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCAweDE3MSwKJiM0MzsJCQkgQklUKDgpIHwgQklUKDcpKTsKJiM0MzsKJiM0MzsJLyogcnggb2Zmc2V0IGNhbGlicmF0aW9uIHN0YXJ0ICovCiYjNDM7CXBoeV9zZXRfYml0c19tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSwgMHgzOSwKJiM0MzsJCQkgQklUKDEzKSk7CiYjNDM7CiYjNDM7CS8qIHJ4IG9mZnNldCBjYWxpYnJhdGlvbiBzdG9wICovCiYjNDM7CXBoeV9jbGVhcl9iaXRzX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCAweDM5LAomIzQzOwkJCSAgIEJJVCgxMykpOwomIzQzOwomIzQzOwltZGVsYXkoMTApOwomIzQzOwomIzQzOwlwaHlfY2xlYXJfYml0c19tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSwgMHgxNzEsCiYjNDM7CQkJICAgQklUKDgpIHwgQklUKDcpKTsKJiM0MzsKJiM0MzsJaWYgKHBoeWRldi0mZ3Q7ZHJ2LSZndDtwaHlfaWQgPT0gQUlST0hBX0dQSFlfSURfQU43NTgxKQomIzQzOwkJcGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLAomIzQzOwkJCSAgICAgIE1US19QSFlfUkdfQU5BX0NBTF9SRzYsIDB4MSk7CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IGFpcm9oYV9jYWxfc3coc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgZW51bSBDQUxfSVRFTSBjYWxfaXRlbSwKJiM0MzsJCQkgdTggc3RhcnRfcGFpciwgdTggZW5kX3BhaXIpCiYjNDM7ewomIzQzOwl1OCBwYWlyX247CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CWZvciAocGFpcl9uID0gc3RhcnRfcGFpcjsgcGFpcl9uICZsdDs9IGVuZF9wYWlyOyBwYWlyX24mIzQzOyYjNDM7KSB7CiYjNDM7CQlzd2l0Y2ggKGNhbF9pdGVtKSB7CiYjNDM7CQljYXNlIFJFWFQ6CiYjNDM7CQkJcmV0ID0gYWlyb2hhX3JleHRfY2FsX3N3KHBoeWRldik7CiYjNDM7CQkJYnJlYWs7CiYjNDM7CQljYXNlIFRYX09GRlNFVDoKJiM0MzsJCQlyZXQgPSBhaXJvaGFfdHhfb2Zmc2V0X2NhbF9zdyhwaHlkZXYsIHBhaXJfbik7CiYjNDM7CQkJYnJlYWs7CiYjNDM7CQljYXNlIFRYX0FNUDoKJiM0MzsJCQlyZXQgPSBhaXJvaGFfdHhfYW1wX2NhbF9zdyhwaHlkZXYsIHBhaXJfbik7CiYjNDM7CQkJYnJlYWs7CiYjNDM7CQljYXNlIFRYX1I1MDoKJiM0MzsJCQlyZXQgPSBhaXJvaGFfdHhfcjUwX2NhbF9zdyhwaHlkZXYsIHBhaXJfbik7CiYjNDM7CQkJYnJlYWs7CiYjNDM7CQljYXNlIFJYX09GRlNFVDoKJiM0MzsJCQlyZXQgPSBhaXJvaGFfcnhfb2Zmc2V0X2NhbF9zdyhwaHlkZXYpOwomIzQzOwkJCWJyZWFrOwomIzQzOwkJZGVmYXVsdDoKJiM0MzsJCQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJCX0KJiM0MzsJCWlmIChyZXQpCiYjNDM7CQkJcmV0dXJuIHJldDsKJiM0MzsJfQomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBhaXJvaGFfc3RhcnRfY2FsKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIGVudW0gQ0FMX0lURU0gY2FsX2l0ZW0sCiYjNDM7CQkJICAgIGVudW0gQ0FMX01PREUgY2FsX21vZGUsIHU4IHN0YXJ0X3BhaXIsCiYjNDM7CQkJICAgIHU4IGVuZF9wYWlyLCB1MzIgKmJ1ZikKJiM0Mzt7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CXN3aXRjaCAoY2FsX21vZGUpIHsKJiM0MzsJY2FzZSBTV19NOgomIzQzOwkJcmV0ID0gYWlyb2hhX2NhbF9zdyhwaHlkZXYsIGNhbF9pdGVtLCBzdGFydF9wYWlyLCBlbmRfcGFpcik7CiYjNDM7CQlicmVhazsKJiM0MzsJZGVmYXVsdDoKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmIChyZXQpIHsKJiM0MzsJCXBoeWRldl9lcnIocGh5ZGV2LCAmIzM0O2NhbCAlZCBmYWlsZWRcbiYjMzQ7LCBjYWxfaXRlbSk7CiYjNDM7CQlyZXR1cm4gLUVJTzsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBhaXJvaGFfcGh5X2NhbGliKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgYWlyb2hhX3NvY3BoeV9zaGFyZWQgKnNoYXJlZCA9IHBoeV9wYWNrYWdlX2dldF9wcml2KHBoeWRldik7CiYjNDM7CXN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXZfcDA7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CXBoeWRldl9wMCA9IHNoYXJlZC0mZ3Q7cGh5ZGV2X3AwOwomIzQzOwomIzQzOwkvKiBQcmVDYWxpYnJhdGUgU2V0ICovCiYjNDM7CXBoeV93cml0ZV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSwgMHg1YywgMHg2NjY2KTsKJiM0MzsKJiM0MzsJaWYgKCFzaGFyZWQtJmd0O3JleHRfc3dfY2FsaWJfZG9uZSkgewomIzQzOwkJcmV0ID0gYWlyb2hhX3N0YXJ0X2NhbChwaHlkZXYsIFJFWFQsIFNXX00sIE5PX1BBSVIsIE5PX1BBSVIsIE5VTEwpOwomIzQzOwkJaWYgKHJldCkKJiM0MzsJCQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwkJc2hhcmVkLSZndDtyZXh0X3N3X2NhbGliX2RvbmUgPSB0cnVlOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldCA9IGFpcm9oYV9zdGFydF9jYWwocGh5ZGV2LCBUWF9SNTAsIFNXX00sIFBBSVJfQSwgUEFJUl9ELCBOVUxMKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CXJldCA9IGFpcm9oYV9zdGFydF9jYWwocGh5ZGV2LCBUWF9PRkZTRVQsIFNXX00sIFBBSVJfQSwgUEFJUl9ELCBOVUxMKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CXJldCA9IGFpcm9oYV9zdGFydF9jYWwocGh5ZGV2LCBUWF9BTVAsIFNXX00sIFBBSVJfQSwgUEFJUl9ELCBOVUxMKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CXJldCA9IGFpcm9oYV9zdGFydF9jYWwocGh5ZGV2LCBSWF9PRkZTRVQsIFNXX00sIE5PX1BBSVIsIE5PX1BBSVIsIE5VTEwpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJLyogR2F0aW5nLCBzaG9ydCB3aXRoIG90aGVyIHBhaXIgKi8KJiM0MzsJcGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCAweDE1LCAweDApOwomIzQzOwomIzQzOwlwaHlfd3JpdGVfbW1kKHBoeWRldl9wMCwgTURJT19NTURfVkVORDIsIDB4MTAwLCAweDApOwomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBhaXJvaGFfcGh5X2F1dG9fc2VsZWN0X3RyYW5zZm9ybWVyKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgYWlyb2hhX3NvY3BoeV9zaGFyZWQgKnNoYXJlZCA9IHBoeV9wYWNrYWdlX2dldF9wcml2KHBoeWRldik7CiYjNDM7CXN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXZfcDA7CiYjNDM7CXU4IHBoeV9vZmZzZXQ7CiYjNDM7CXUxNiBibWNyX3RtcDsKJiM0MzsJdTE2IHZhbDsKJiM0MzsJaW50IGk7CiYjNDM7CiYjNDM7CXBoeWRldl9wMCA9IHNoYXJlZC0mZ3Q7cGh5ZGV2X3AwOwomIzQzOwlwaHlfb2Zmc2V0ID0gcGh5ZGV2LSZndDttZGlvLmFkZHIgLSBwaHlkZXZfcDAtJmd0O21kaW8uYWRkcjsKJiM0MzsKJiM0MzsJLyogRm9yY2UgMUcgZnVsbCBkdXBsZXggZm9yIGNhbGlicmF0aW9uICovCiYjNDM7CWJtY3JfdG1wID0gcGh5X3JlYWQocGh5ZGV2LCBNSUlfQk1DUik7CiYjNDM7CXBoeV93cml0ZShwaHlkZXYsIE1JSV9CTUNSLCBCTUNSX0ZVTExEUExYIHwgQk1DUl9TUEVFRDEwMDApOwomIzQzOwomIzQzOwlwaHlfbW9kaWZ5X21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQyLCAweDI3MSwgR0VOTUFTSyg0LCAwKSwKJiM0MzsJCSAgICAgICBGSUVMRF9QUkVQKEdFTk1BU0soNCwgMCksIDB4MykpOwomIzQzOwomIzQzOwlwaHlfbW9kaWZ5X21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQyLCAweDI2OSwgR0VOTUFTSygxNSwgMTIpLAomIzQzOwkJICAgICAgIEZJRUxEX1BSRVAoR0VOTUFTSygxNSwgMTIpLCAweDIpKTsKJiM0MzsKJiM0MzsJcGh5X21vZGlmeV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMiwgMHgyNmYsIEdFTk1BU0soMTQsIDEyKSwKJiM0MzsJCSAgICAgICBGSUVMRF9QUkVQKEdFTk1BU0soMTQsIDEyKSwgMHgwKSk7CiYjNDM7CiYjNDM7CXBoeV93cml0ZV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSwgMHhkZCwgQklUKDEyKSk7CiYjNDM7CiYjNDM7CXBoeV93cml0ZV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSwgTVRLX1BIWV9SR19EQVNOX0RBQ19JTjBfQSwKJiM0MzsJCSAgICAgIDB4ODAwMCB8IDB4ZjApOwomIzQzOwlwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIE1US19QSFlfUkdfREFTTl9EQUNfSU4xX0EsCiYjNDM7CQkgICAgICAweDgwMDAgfCAweGYwKTsKJiM0MzsJcGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCBNVEtfUEhZX1JHX0RBU05fREFDX0lOMF9CLAomIzQzOwkJICAgICAgMHg4MDAwIHwgMHhmMCk7CiYjNDM7CXBoeV93cml0ZV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSwgTVRLX1BIWV9SR19EQVNOX0RBQ19JTjFfQiwKJiM0MzsJCSAgICAgIDB4ODAwMCB8IDB4ZjApOwomIzQzOwlwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIE1US19QSFlfUkdfREFTTl9EQUNfSU4wX0MsCiYjNDM7CQkgICAgICAweDgwMDAgfCAweGYwKTsKJiM0MzsJcGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCBNVEtfUEhZX1JHX0RBU05fREFDX0lOMV9DLAomIzQzOwkJICAgICAgMHg4MDAwIHwgMHhmMCk7CiYjNDM7CXBoeV93cml0ZV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSwgTVRLX1BIWV9SR19EQVNOX0RBQ19JTjBfRCwKJiM0MzsJCSAgICAgIDB4ODAwMCB8IDB4ZjApOwomIzQzOwlwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIE1US19QSFlfUkdfREFTTl9EQUNfSU4xX0QsCiYjNDM7CQkgICAgICAweDgwMDAgfCAweGYwKTsKJiM0MzsKJiM0MzsJLyogRm9yY2UgcEdBIGdhaW4gKi8KJiM0MzsJcGh5X3NlbGVjdF9wYWdlKHBoeWRldiwgTVRLX1BIWV9QQUdFX0VYVEVOREVEXzUyQjUpOwomIzQzOwlfX210a190cl9tb2RpZnkocGh5ZGV2LCAweDEsIDB4ZiwgMHgxMCwKJiM0MzsJCQlHRU5NQVNLKDIwLCAxNSksCiYjNDM7CQkJRklFTERfUFJFUChHRU5NQVNLKDIwLCAxNSksIDB4MWYpKTsKJiM0MzsKJiM0MzsJX19tdGtfdHJfbW9kaWZ5KHBoeWRldiwgMHgxLCAweGYsIDB4MTEsCiYjNDM7CQkJR0VOTUFTSygyMywgMTgpIHwgR0VOTUFTSygxNSwgMTApIHwgR0VOTUFTSyg3LCAyKSwKJiM0MzsJCQlGSUVMRF9QUkVQKEdFTk1BU0soMjMsIDE4KSwgMHgxZikgfAomIzQzOwkJCUZJRUxEX1BSRVAoR0VOTUFTSygxNSwgMTApLCAweDFmKSB8CiYjNDM7CQkJRklFTERfUFJFUChHRU5NQVNLKDcsIDIpLCAweDFmKSk7CiYjNDM7CXBoeV9yZXN0b3JlX3BhZ2UocGh5ZGV2LCBNVEtfUEhZX1BBR0VfU1RBTkRBUkQsIDApOwomIzQzOwomIzQzOwlwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIDB4YzksIDB4ZmZmZik7CiYjNDM7CXBoeV93cml0ZV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSwgMHgxNTEsIDB4MTIpOwomIzQzOwomIzQzOwlzd2l0Y2ggKHBoeV9vZmZzZXQpIHsKJiM0MzsJY2FzZSAwOgomIzQzOwkJdmFsID0gMHgxOwomIzQzOwkJYnJlYWs7CiYjNDM7CWNhc2UgMToKJiM0MzsJCXZhbCA9IDB4MzsKJiM0MzsJCWJyZWFrOwomIzQzOwljYXNlIDI6CiYjNDM7CQl2YWwgPSAweDU7CiYjNDM7CQlicmVhazsKJiM0MzsJY2FzZSAzOgomIzQzOwkJdmFsID0gMHg3OwomIzQzOwkJYnJlYWs7CiYjNDM7CWRlZmF1bHQ6CiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJfQomIzQzOwlwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDIsIDB4MTUsCiYjNDM7CQkgICAgICBGSUVMRF9QUkVQKEdFTk1BU0soMTQsIDEyKSwgdmFsKSB8IDB4MTYxKTsKJiM0MzsJbWRlbGF5KDUwMCk7CiYjNDM7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyAzOyBpJiM0MzsmIzQzOykKJiM0MzsJCXZhbCA9IHBoeV9yZWFkX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQyLCAweDFhKTsKJiM0MzsKJiM0MzsJLyogQ2hlY2sgdGhlIHZhbHVlIGFuZCByZXBvcnQgdHJhbnNmb3JtZXIgdHlwZSBmb3IgbGF0ZXIgKi8KJiM0MzsJc2hhcmVkLSZndDt0cmFuc2Zvcm1lcl90eXBlW3BoeV9vZmZzZXRdID0gdmFsICZsdDsgMHhlMDsKJiM0MzsKJiM0MzsJLyogU3dpdGNoIHRvIERlZmF1bHQgKi8KJiM0MzsJcGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQyLCAweDE1LCAweDEwMDApOwomIzQzOwomIzQzOwlwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIDB4ZGQsIDB4MCk7CiYjNDM7CiYjNDM7CXBoeV93cml0ZV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSwgTVRLX1BIWV9SR19EQVNOX0RBQ19JTjBfQSwKJiM0MzsJCSAgICAgIDB4MCk7CiYjNDM7CXBoeV93cml0ZV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSwgTVRLX1BIWV9SR19EQVNOX0RBQ19JTjFfQSwKJiM0MzsJCSAgICAgIDB4MCk7CiYjNDM7CXBoeV93cml0ZV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSwgTVRLX1BIWV9SR19EQVNOX0RBQ19JTjBfQiwKJiM0MzsJCSAgICAgIDB4MCk7CiYjNDM7CXBoeV93cml0ZV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSwgTVRLX1BIWV9SR19EQVNOX0RBQ19JTjFfQiwKJiM0MzsJCSAgICAgIDB4MCk7CiYjNDM7CXBoeV93cml0ZV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSwgTVRLX1BIWV9SR19EQVNOX0RBQ19JTjBfQywKJiM0MzsJCSAgICAgIDB4MCk7CiYjNDM7CXBoeV93cml0ZV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSwgTVRLX1BIWV9SR19EQVNOX0RBQ19JTjFfQywKJiM0MzsJCSAgICAgIDB4MCk7CiYjNDM7CXBoeV93cml0ZV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSwgTVRLX1BIWV9SR19EQVNOX0RBQ19JTjBfRCwKJiM0MzsJCSAgICAgIDB4MCk7CiYjNDM7CXBoeV93cml0ZV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSwgTVRLX1BIWV9SR19EQVNOX0RBQ19JTjFfRCwKJiM0MzsJCSAgICAgIDB4MCk7CiYjNDM7CiYjNDM7CXBoeV93cml0ZV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSwgMHhjOSwgMHhmZmYpOwomIzQzOwlwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIDB4MTUxLCAweDApOwomIzQzOwomIzQzOwlwaHlfc2VsZWN0X3BhZ2UocGh5ZGV2LCBNVEtfUEhZX1BBR0VfRVhURU5ERURfNTJCNSk7CiYjNDM7CV9fbXRrX3RyX21vZGlmeShwaHlkZXYsIDB4MSwgMHhmLCAweDEwLAomIzQzOwkJCUdFTk1BU0soMjAsIDE1KSwKJiM0MzsJCQlGSUVMRF9QUkVQKEdFTk1BU0soMjAsIDE1KSwgMHg0KSk7CiYjNDM7CiYjNDM7CV9fbXRrX3RyX21vZGlmeShwaHlkZXYsIDB4MSwgMHhmLCAweDExLAomIzQzOwkJCUdFTk1BU0soMjMsIDE4KSB8IEdFTk1BU0soMTUsIDEwKSB8IEdFTk1BU0soNywgMiksCiYjNDM7CQkJRklFTERfUFJFUChHRU5NQVNLKDIzLCAxOCksIDB4MCkgfAomIzQzOwkJCUZJRUxEX1BSRVAoR0VOTUFTSygxNSwgMTApLCAweDApIHwKJiM0MzsJCQlGSUVMRF9QUkVQKEdFTk1BU0soNywgMiksIDB4MCkpOwomIzQzOwlwaHlfcmVzdG9yZV9wYWdlKHBoeWRldiwgTVRLX1BIWV9QQUdFX1NUQU5EQVJELCAwKTsKJiM0MzsKJiM0MzsJLyogUmVzdG9yZSBCTUNSICovCiYjNDM7CXBoeV93cml0ZShwaHlkZXYsIE1JSV9CTUNSLCBibWNyX3RtcCk7CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IGFpcm9oYV9waHlfdHhfYW1wX2NvbXBlbnNhdGlvbihzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KQomIzQzO3sKJiM0MzsJc3RydWN0IGFpcm9oYV9zb2NwaHlfc2hhcmVkICpzaGFyZWQgPSBwaHlfcGFja2FnZV9nZXRfcHJpdihwaHlkZXYpOwomIzQzOwomIzQzOwl1MTYgcmVnXzFlXzEyX3JlYWQ7CiYjNDM7CXUxNiByZWdfMWVfMTZfcmVhZDsKJiM0MzsJdTE2IHJlZ18xZV8xN19yZWFkOwomIzQzOwl1MTYgcmVnXzFlXzE4X3JlYWQ7CiYjNDM7CXUxNiByZWdfMWVfMTlfcmVhZDsKJiM0MzsJdTE2IHJlZ18xZV8yMF9yZWFkOwomIzQzOwl1MTYgcmVnXzFlXzIxX3JlYWQ7CiYjNDM7CXUxNiByZWdfMWVfMjJfcmVhZDsKJiM0MzsJdTE2IHJlZ18xZV8xNzRfcmVhZDsKJiM0MzsJdTE2IHJlZ18xZV8xNzVfcmVhZDsKJiM0MzsKJiM0MzsJaW50IHJlZ18xZV8xMl9oZWFkZXI7CiYjNDM7CWludCByZWdfMWVfMTZfaGVhZGVyOwomIzQzOwlpbnQgcmVnXzFlXzE3X2hlYWRlcjsKJiM0MzsJaW50IHJlZ18xZV8xOF9oZWFkZXI7CiYjNDM7CWludCByZWdfMWVfMTlfaGVhZGVyOwomIzQzOwlpbnQgcmVnXzFlXzIxX2hlYWRlcjsKJiM0MzsJaW50IHJlZ18xZV8xNzRfaGVhZGVyOwomIzQzOwlpbnQgcmVnXzFlXzE3NV9oZWFkZXI7CiYjNDM7CiYjNDM7CWludCByZWdfMWVfMTJfZW5kOwomIzQzOwlpbnQgcmVnXzFlXzE2X2VuZDsKJiM0MzsJaW50IHJlZ18xZV8xN19lbmQ7CiYjNDM7CWludCByZWdfMWVfMThfZW5kOwomIzQzOwlpbnQgcmVnXzFlXzIwX2VuZDsKJiM0MzsJaW50IHJlZ18xZV8yMl9lbmQ7CiYjNDM7CWludCByZWdfMWVfMTc0X2VuZDsKJiM0MzsJaW50IHJlZ18xZV8xNzVfZW5kOwomIzQzOwomIzQzOwlzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2X3AwOwomIzQzOwl1OCBwaHlfb2Zmc2V0OwomIzQzOwomIzQzOwlpbnQgdHhhbXBfbG93X2xpbWl0ID0gLTM7CiYjNDM7CWludCB0eGFtcF9oaWdoX2xpbWl0ID0gMHg0MjsKJiM0MzsKJiM0MzsJaW50IHI1MF9sb3dfbGltaXQgPSAtODsKJiM0MzsJaW50IHI1MF9oaWdoX2xpbWl0ID0gMHg4ODsKJiM0MzsKJiM0MzsJYm9vbCBvdmVyZmxvdzsKJiM0MzsJaW50ICgqdHhfYW1wX3RhYmxlKVtDQUxJQl9DT05TVF9UWVBFX01BWF1bNF07CiYjNDM7CWludCB0cmFuc2Zvcm1lcl90eXBlLCBtZGlfcmVzaXN0ZXJfdHlwZTsKJiM0MzsKJiM0MzsJcGh5ZGV2X3AwID0gc2hhcmVkLSZndDtwaHlkZXZfcDA7CiYjNDM7CXBoeV9vZmZzZXQgPSBwaHlkZXYtJmd0O21kaW8uYWRkciAtIHBoeWRldl9wMC0mZ3Q7bWRpby5hZGRyOwomIzQzOwomIzQzOwl0cmFuc2Zvcm1lcl90eXBlID0gc2hhcmVkLSZndDt0cmFuc2Zvcm1lcl90eXBlW3BoeV9vZmZzZXRdOwomIzQzOwltZGlfcmVzaXN0ZXJfdHlwZSA9IHNoYXJlZC0mZ3Q7bWRpX3Jlc2lzdGVyX3R5cGU7CiYjNDM7CXR4X2FtcF90YWJsZSA9IHNoYXJlZC0mZ3Q7dHhfYW1wX2NvbXBlbnNhdGlvbl90YmxbdHJhbnNmb3JtZXJfdHlwZV1bbWRpX3Jlc2lzdGVyX3R5cGVdOwomIzQzOwomIzQzOwlyZWdfMWVfMTJfcmVhZCA9IHBoeV9yZWFkX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCAweDEyKTsKJiM0MzsJcmVnXzFlXzE2X3JlYWQgPSBwaHlfcmVhZF9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSwgMHgxNik7CiYjNDM7CXJlZ18xZV8xN19yZWFkID0gcGh5X3JlYWRfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIDB4MTcpOwomIzQzOwlyZWdfMWVfMThfcmVhZCA9IHBoeV9yZWFkX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCAweDE4KTsKJiM0MzsJcmVnXzFlXzE5X3JlYWQgPSBwaHlfcmVhZF9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSwgMHgxOSk7CiYjNDM7CXJlZ18xZV8yMF9yZWFkID0gcGh5X3JlYWRfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIDB4MjApOwomIzQzOwlyZWdfMWVfMjFfcmVhZCA9IHBoeV9yZWFkX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCAweDIxKTsKJiM0MzsJcmVnXzFlXzIyX3JlYWQgPSBwaHlfcmVhZF9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSwgMHgyMik7CiYjNDM7CXJlZ18xZV8xNzRfcmVhZCA9IHBoeV9yZWFkX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCAweDE3NCk7CiYjNDM7CXJlZ18xZV8xNzVfcmVhZCA9IHBoeV9yZWFkX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCAweDE3NSk7CiYjNDM7CiYjNDM7CXJlZ18xZV8xMl9oZWFkZXIgPSAoKHJlZ18xZV8xMl9yZWFkICZhbXA7IDB4ZmMwMCkgLyAxMDI0KSAmIzQzOyAqdHhfYW1wX3RhYmxlW1RYX0FNUF8xR19BXVtwaHlfb2Zmc2V0XTsKJiM0MzsJcmVnXzFlXzE3X2hlYWRlciA9ICgocmVnXzFlXzE3X3JlYWQgJmFtcDsgMHgzZjAwKSAvIDI1NikgJiM0MzsgKnR4X2FtcF90YWJsZVtUWF9BTVBfMUdfQl1bcGh5X29mZnNldF07CiYjNDM7CXJlZ18xZV8xOV9oZWFkZXIgPSAoKHJlZ18xZV8xOV9yZWFkICZhbXA7IDB4M2YwMCkgLyAyNTYpICYjNDM7ICp0eF9hbXBfdGFibGVbVFhfQU1QXzFHX0NdW3BoeV9vZmZzZXRdOwomIzQzOwlyZWdfMWVfMjFfaGVhZGVyID0gKChyZWdfMWVfMjFfcmVhZCAmYW1wOyAweDNmMDApIC8gMjU2KSAmIzQzOyAqdHhfYW1wX3RhYmxlW1RYX0FNUF8xR19EXVtwaHlfb2Zmc2V0XTsKJiM0MzsKJiM0MzsJb3ZlcmZsb3cgPSBmYWxzZTsKJiM0MzsJaWYgKHJlZ18xZV8xMl9oZWFkZXIgJmx0OyB0eGFtcF9sb3dfbGltaXQgfHwKJiM0MzsJICAgIHJlZ18xZV8xMl9oZWFkZXIgJmd0OyB0eGFtcF9oaWdoX2xpbWl0KQomIzQzOwkJb3ZlcmZsb3cgPSB0cnVlOwomIzQzOwlpZiAocmVnXzFlXzE3X2hlYWRlciAmbHQ7IHR4YW1wX2xvd19saW1pdCB8fAomIzQzOwkgICAgcmVnXzFlXzE3X2hlYWRlciAmZ3Q7IHR4YW1wX2hpZ2hfbGltaXQpCiYjNDM7CQlvdmVyZmxvdyA9IHRydWU7CiYjNDM7CWlmIChyZWdfMWVfMTlfaGVhZGVyICZsdDsgdHhhbXBfbG93X2xpbWl0IHx8CiYjNDM7CSAgICByZWdfMWVfMTlfaGVhZGVyICZndDsgdHhhbXBfaGlnaF9saW1pdCkKJiM0MzsJCW92ZXJmbG93ID0gdHJ1ZTsKJiM0MzsJaWYgKHJlZ18xZV8yMV9oZWFkZXIgJmx0OyB0eGFtcF9sb3dfbGltaXQgfHwKJiM0MzsJICAgIHJlZ18xZV8yMV9oZWFkZXIgJmd0OyB0eGFtcF9oaWdoX2xpbWl0KQomIzQzOwkJb3ZlcmZsb3cgPSB0cnVlOwomIzQzOwomIzQzOwlpZiAob3ZlcmZsb3cpIHsKJiM0MzsJCXJlZ18xZV8xMl9oZWFkZXIgPSAweDIwOwomIzQzOwkJcmVnXzFlXzE3X2hlYWRlciA9IDB4MjA7CiYjNDM7CQlyZWdfMWVfMTlfaGVhZGVyID0gMHgyMDsKJiM0MzsJCXJlZ18xZV8yMV9oZWFkZXIgPSAweDIwOwomIzQzOwl9IGVsc2UgewomIzQzOwkJaWYgKHJlZ18xZV8xMl9oZWFkZXIgJmx0OyAwKQomIzQzOwkJCXJlZ18xZV8xMl9oZWFkZXIgPSAwOwomIzQzOwkJZWxzZSBpZiAocmVnXzFlXzEyX2hlYWRlciAmZ3Q7IDB4M2YpCiYjNDM7CQkJcmVnXzFlXzEyX2hlYWRlciA9IDB4M2Y7CiYjNDM7CQlpZiAocmVnXzFlXzE3X2hlYWRlciAmbHQ7IDApCiYjNDM7CQkJcmVnXzFlXzE3X2hlYWRlciA9IDA7CiYjNDM7CQllbHNlIGlmIChyZWdfMWVfMTdfaGVhZGVyICZndDsgMHgzZikKJiM0MzsJCQlyZWdfMWVfMTdfaGVhZGVyID0gMHgzZjsKJiM0MzsJCWlmIChyZWdfMWVfMTlfaGVhZGVyICZsdDsgMCkKJiM0MzsJCQlyZWdfMWVfMTlfaGVhZGVyID0gMDsKJiM0MzsJCWVsc2UgaWYgKHJlZ18xZV8xOV9oZWFkZXIgJmd0OyAweDNmKQomIzQzOwkJCXJlZ18xZV8xOV9oZWFkZXIgPSAweDNmOwomIzQzOwkJaWYgKHJlZ18xZV8yMV9oZWFkZXIgJmx0OyAwKQomIzQzOwkJCXJlZ18xZV8yMV9oZWFkZXIgPSAwOwomIzQzOwkJZWxzZSBpZiAocmVnXzFlXzIxX2hlYWRlciAmZ3Q7IDB4M2YpCiYjNDM7CQkJcmVnXzFlXzIxX2hlYWRlciA9IDB4M2Y7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmVnXzFlXzE2X2VuZCA9IChyZWdfMWVfMTZfcmVhZCAmYW1wOyAweDAwM2YpICYjNDM7ICp0eF9hbXBfdGFibGVbVFhfQU1QX1RFU1RfQV1bcGh5X29mZnNldF07CiYjNDM7CXJlZ18xZV8xOF9lbmQgPSAocmVnXzFlXzE4X3JlYWQgJmFtcDsgMHgwMDNmKSAmIzQzOyAqdHhfYW1wX3RhYmxlW1RYX0FNUF9URVNUX0JdW3BoeV9vZmZzZXRdOwomIzQzOwlyZWdfMWVfMjBfZW5kID0gKHJlZ18xZV8yMF9yZWFkICZhbXA7IDB4MDAzZikgJiM0MzsgKnR4X2FtcF90YWJsZVtUWF9BTVBfVEVTVF9DXVtwaHlfb2Zmc2V0XTsKJiM0MzsJcmVnXzFlXzIyX2VuZCA9IChyZWdfMWVfMjJfcmVhZCAmYW1wOyAweDAwM2YpICYjNDM7ICp0eF9hbXBfdGFibGVbVFhfQU1QX1RFU1RfRF1bcGh5X29mZnNldF07CiYjNDM7CiYjNDM7CW92ZXJmbG93ID0gZmFsc2U7CiYjNDM7CWlmIChyZWdfMWVfMTZfZW5kICZsdDsgdHhhbXBfbG93X2xpbWl0IHx8CiYjNDM7CSAgICByZWdfMWVfMTZfZW5kICZndDsgdHhhbXBfaGlnaF9saW1pdCkKJiM0MzsJCW92ZXJmbG93ID0gdHJ1ZTsKJiM0MzsJaWYgKHJlZ18xZV8xOF9lbmQgJmx0OyB0eGFtcF9sb3dfbGltaXQgfHwKJiM0MzsJICAgIHJlZ18xZV8xOF9lbmQgJmd0OyB0eGFtcF9oaWdoX2xpbWl0KQomIzQzOwkJb3ZlcmZsb3cgPSB0cnVlOwomIzQzOwlpZiAocmVnXzFlXzIwX2VuZCAmbHQ7IHR4YW1wX2xvd19saW1pdCB8fAomIzQzOwkgICAgcmVnXzFlXzIwX2VuZCAmZ3Q7IHR4YW1wX2hpZ2hfbGltaXQpCiYjNDM7CQlvdmVyZmxvdyA9IHRydWU7CiYjNDM7CWlmIChyZWdfMWVfMjJfZW5kICZsdDsgdHhhbXBfbG93X2xpbWl0IHx8CiYjNDM7CSAgICByZWdfMWVfMjJfZW5kICZndDsgdHhhbXBfaGlnaF9saW1pdCkKJiM0MzsJCW92ZXJmbG93ID0gdHJ1ZTsKJiM0MzsKJiM0MzsJaWYgKG92ZXJmbG93KSB7CiYjNDM7CQlyZWdfMWVfMTZfZW5kID0gMHgyMDsKJiM0MzsJCXJlZ18xZV8xOF9lbmQgPSAweDIwOwomIzQzOwkJcmVnXzFlXzIwX2VuZCA9IDB4MjA7CiYjNDM7CQlyZWdfMWVfMjJfZW5kID0gMHgyMDsKJiM0MzsJfSBlbHNlIHsKJiM0MzsJCWlmIChyZWdfMWVfMTZfZW5kICZsdDsgMCkKJiM0MzsJCQlyZWdfMWVfMTZfZW5kID0gMDsKJiM0MzsJCWVsc2UgaWYgKHJlZ18xZV8xNl9lbmQgJmd0OyAweDNmKQomIzQzOwkJCXJlZ18xZV8xNl9lbmQgPSAweDNmOwomIzQzOwkJaWYgKHJlZ18xZV8xOF9lbmQgJmx0OyAwKQomIzQzOwkJCXJlZ18xZV8xOF9lbmQgPSAwOwomIzQzOwkJZWxzZSBpZiAocmVnXzFlXzE4X2VuZCAmZ3Q7IDB4M2YpCiYjNDM7CQkJcmVnXzFlXzE4X2VuZCA9IDB4M2Y7CiYjNDM7CQlpZiAocmVnXzFlXzIwX2VuZCAmbHQ7IDApCiYjNDM7CQkJcmVnXzFlXzIwX2VuZCA9IDA7CiYjNDM7CQllbHNlIGlmIChyZWdfMWVfMjBfZW5kICZndDsgMHgzZikKJiM0MzsJCQlyZWdfMWVfMjBfZW5kID0gMHgzZjsKJiM0MzsJCWlmIChyZWdfMWVfMjJfZW5kICZsdDsgMCkKJiM0MzsJCQlyZWdfMWVfMjJfZW5kID0gMDsKJiM0MzsJCWVsc2UgaWYgKHJlZ18xZV8yMl9lbmQgJmd0OyAweDNmKQomIzQzOwkJCXJlZ18xZV8yMl9lbmQgPSAweDNmOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJlZ18xZV8xNl9oZWFkZXIgPSAoKHJlZ18xZV8xNl9yZWFkICZhbXA7IDB4ZmMwMCkgLyAxMDI0KSAmIzQzOyAqdHhfYW1wX3RhYmxlW1RYX0FNUF8xMDBNX0FdW3BoeV9vZmZzZXRdOwomIzQzOwlyZWdfMWVfMThfaGVhZGVyID0gKChyZWdfMWVfMThfcmVhZCAmYW1wOyAweDNmMDApIC8gMjU2KSAmIzQzOyAqdHhfYW1wX3RhYmxlW1RYX0FNUF8xMDBNX0JdW3BoeV9vZmZzZXRdOwomIzQzOwomIzQzOwlvdmVyZmxvdyA9IGZhbHNlOwomIzQzOwlpZiAocmVnXzFlXzE2X2hlYWRlciAmbHQ7IHR4YW1wX2xvd19saW1pdCB8fAomIzQzOwkgICAgcmVnXzFlXzE2X2hlYWRlciAmZ3Q7IHR4YW1wX2hpZ2hfbGltaXQpCiYjNDM7CQlvdmVyZmxvdyA9IHRydWU7CiYjNDM7CWlmIChyZWdfMWVfMThfaGVhZGVyICZsdDsgdHhhbXBfbG93X2xpbWl0IHx8CiYjNDM7CSAgICByZWdfMWVfMThfaGVhZGVyICZndDsgdHhhbXBfaGlnaF9saW1pdCkKJiM0MzsJCW92ZXJmbG93ID0gdHJ1ZTsKJiM0MzsKJiM0MzsJaWYgKG92ZXJmbG93KSB7CiYjNDM7CQlyZWdfMWVfMTZfaGVhZGVyID0gMHgyMDsKJiM0MzsJCXJlZ18xZV8xOF9oZWFkZXIgPSAweDIwOwomIzQzOwl9IGVsc2UgewomIzQzOwkJaWYgKHJlZ18xZV8xNl9oZWFkZXIgJmx0OyAwKQomIzQzOwkJCXJlZ18xZV8xNl9oZWFkZXIgPSAwOwomIzQzOwkJZWxzZSBpZiAocmVnXzFlXzE2X2hlYWRlciAmZ3Q7IDB4M2YpCiYjNDM7CQkJcmVnXzFlXzE2X2hlYWRlciA9IDB4M2Y7CiYjNDM7CQlpZiAocmVnXzFlXzE4X2hlYWRlciAmbHQ7IDApCiYjNDM7CQkJcmVnXzFlXzE4X2hlYWRlciA9IDA7CiYjNDM7CQllbHNlIGlmIChyZWdfMWVfMThfaGVhZGVyICZndDsgMHgzZikKJiM0MzsJCQlyZWdfMWVfMThfaGVhZGVyID0gMHgzZjsKJiM0MzsJfQomIzQzOwomIzQzOwlyZWdfMWVfMTJfZW5kID0gKHJlZ18xZV8xMl9yZWFkICZhbXA7IDB4MDAzZikgJiM0MzsgKnR4X2FtcF90YWJsZVtUWF9BTVBfMTBNX0FdW3BoeV9vZmZzZXRdOwomIzQzOwlyZWdfMWVfMTdfZW5kID0gKHJlZ18xZV8xN19yZWFkICZhbXA7IDB4MDAzZikgJiM0MzsgKnR4X2FtcF90YWJsZVtUWF9BTVBfMTBNX0JdW3BoeV9vZmZzZXRdOwomIzQzOwomIzQzOwlvdmVyZmxvdyA9IGZhbHNlOwomIzQzOwlpZiAocmVnXzFlXzEyX2VuZCAmbHQ7IHR4YW1wX2xvd19saW1pdCB8fAomIzQzOwkgICAgcmVnXzFlXzEyX2VuZCAmZ3Q7IHR4YW1wX2hpZ2hfbGltaXQpCiYjNDM7CQlvdmVyZmxvdyA9IHRydWU7CiYjNDM7CWlmIChyZWdfMWVfMTdfZW5kICZsdDsgdHhhbXBfbG93X2xpbWl0IHx8CiYjNDM7CSAgICByZWdfMWVfMTdfZW5kICZndDsgdHhhbXBfaGlnaF9saW1pdCkKJiM0MzsJCW92ZXJmbG93ID0gdHJ1ZTsKJiM0MzsKJiM0MzsJaWYgKG92ZXJmbG93KSB7CiYjNDM7CQlyZWdfMWVfMTJfZW5kID0gMHgyMDsKJiM0MzsJCXJlZ18xZV8xN19lbmQgPSAweDIwOwomIzQzOwl9IGVsc2UgewomIzQzOwkJaWYgKHJlZ18xZV8xMl9lbmQgJmx0OyAwKQomIzQzOwkJCXJlZ18xZV8xMl9lbmQgPSAwOwomIzQzOwkJZWxzZSBpZiAocmVnXzFlXzEyX2VuZCAmZ3Q7IDB4M2YpCiYjNDM7CQkJcmVnXzFlXzEyX2VuZCA9IDB4M2Y7CiYjNDM7CQlpZiAocmVnXzFlXzE3X2VuZCAmbHQ7IDApCiYjNDM7CQkJcmVnXzFlXzE3X2VuZCA9IDA7CiYjNDM7CQllbHNlIGlmIChyZWdfMWVfMTdfZW5kICZndDsgMHgzZikKJiM0MzsJCQlyZWdfMWVfMTdfZW5kID0gMHgzZjsKJiM0MzsJfQomIzQzOwomIzQzOwlyZWdfMWVfMTc0X2hlYWRlciA9ICgocmVnXzFlXzE3NF9yZWFkICZhbXA7IDB4N2YwMCkgLyAyNTYpICYjNDM7ICp0eF9hbXBfdGFibGVbUjUwX0FdW3BoeV9vZmZzZXRdOwomIzQzOwlyZWdfMWVfMTc0X2VuZCA9IChyZWdfMWVfMTc0X3JlYWQgJmFtcDsgMHgwMDdmKSAmIzQzOyAqdHhfYW1wX3RhYmxlW1I1MF9CXVtwaHlfb2Zmc2V0XTsKJiM0MzsJcmVnXzFlXzE3NV9oZWFkZXIgPSAoKHJlZ18xZV8xNzVfcmVhZCAmYW1wOyAweDdmMDApIC8gMjU2KSAmIzQzOyAqdHhfYW1wX3RhYmxlW1I1MF9DXVtwaHlfb2Zmc2V0XTsKJiM0MzsJcmVnXzFlXzE3NV9lbmQgPSAocmVnXzFlXzE3NV9yZWFkICZhbXA7IDB4MDA3ZikgJiM0MzsgKnR4X2FtcF90YWJsZVtSNTBfRF1bcGh5X29mZnNldF07CiYjNDM7CiYjNDM7CW92ZXJmbG93ID0gZmFsc2U7CiYjNDM7CWlmIChyZWdfMWVfMTc0X2hlYWRlciAmbHQ7IHI1MF9sb3dfbGltaXQgfHwKJiM0MzsJICAgIHJlZ18xZV8xNzRfaGVhZGVyICZndDsgcjUwX2hpZ2hfbGltaXQpCiYjNDM7CQlvdmVyZmxvdyA9IHRydWU7CiYjNDM7CWlmIChyZWdfMWVfMTc0X2VuZCAmbHQ7IHI1MF9sb3dfbGltaXQgfHwKJiM0MzsJICAgIHJlZ18xZV8xNzRfZW5kICZndDsgcjUwX2hpZ2hfbGltaXQpCiYjNDM7CQlvdmVyZmxvdyA9IHRydWU7CiYjNDM7CWlmIChyZWdfMWVfMTc1X2hlYWRlciAmbHQ7IHI1MF9sb3dfbGltaXQgfHwKJiM0MzsJICAgIHJlZ18xZV8xNzVfaGVhZGVyICZndDsgcjUwX2hpZ2hfbGltaXQpCiYjNDM7CQlvdmVyZmxvdyA9IHRydWU7CiYjNDM7CWlmIChyZWdfMWVfMTc1X2VuZCAmbHQ7IHI1MF9sb3dfbGltaXQgfHwKJiM0MzsJICAgIHJlZ18xZV8xNzVfZW5kICZndDsgcjUwX2hpZ2hfbGltaXQpCiYjNDM7CQlvdmVyZmxvdyA9IHRydWU7CiYjNDM7CiYjNDM7CWlmIChvdmVyZmxvdykgewomIzQzOwkJcmVnXzFlXzE3NF9oZWFkZXIgPSAweDM0OwomIzQzOwkJcmVnXzFlXzE3NF9lbmQgPSAweDM0OwomIzQzOwkJcmVnXzFlXzE3NV9oZWFkZXIgPSAweDM0OwomIzQzOwkJcmVnXzFlXzE3NV9lbmQgPSAweDM0OwomIzQzOwl9IGVsc2UgewomIzQzOwkJaWYgKHJlZ18xZV8xNzRfaGVhZGVyICZsdDsgMCkKJiM0MzsJCQlyZWdfMWVfMTc0X2hlYWRlciA9IDA7CiYjNDM7CQllbHNlIGlmIChyZWdfMWVfMTc0X2hlYWRlciAmZ3Q7IDB4N2YpCiYjNDM7CQkJcmVnXzFlXzE3NF9oZWFkZXIgPSAweDdmOwomIzQzOwkJaWYgKHJlZ18xZV8xNzRfZW5kICZsdDsgMCkKJiM0MzsJCQlyZWdfMWVfMTc0X2VuZCA9IDA7CiYjNDM7CQllbHNlIGlmIChyZWdfMWVfMTc0X2VuZCAmZ3Q7IDB4N2YpCiYjNDM7CQkJcmVnXzFlXzE3NF9lbmQgPSAweDdmOwomIzQzOwkJaWYgKHJlZ18xZV8xNzVfaGVhZGVyICZsdDsgMCkKJiM0MzsJCQlyZWdfMWVfMTc1X2hlYWRlciA9IDA7CiYjNDM7CQllbHNlIGlmIChyZWdfMWVfMTc1X2hlYWRlciAmZ3Q7IDB4N2YpCiYjNDM7CQkJcmVnXzFlXzE3NV9oZWFkZXIgPSAweDdmOwomIzQzOwkJaWYgKHJlZ18xZV8xNzVfZW5kICZsdDsgMCkKJiM0MzsJCQlyZWdfMWVfMTc1X2VuZCA9IDA7CiYjNDM7CQllbHNlIGlmIChyZWdfMWVfMTc1X2VuZCAmZ3Q7IDB4N2YpCiYjNDM7CQkJcmVnXzFlXzE3NV9lbmQgPSAweDdmOwomIzQzOwl9CiYjNDM7CiYjNDM7CXBoeV93cml0ZV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSwgMHgxMiwKJiM0MzsJCSAgICAgIChyZWdfMWVfMTJfaGVhZGVyICogMTAyNCkgJiM0MzsgcmVnXzFlXzEyX2VuZCk7CiYjNDM7CXBoeV93cml0ZV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSwgMHgxNiwKJiM0MzsJCSAgICAgIChyZWdfMWVfMTZfaGVhZGVyICogMTAyNCkgJiM0MzsgcmVnXzFlXzE2X2VuZCk7CiYjNDM7CXBoeV93cml0ZV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSwgMHgxNywKJiM0MzsJCSAgICAgIChyZWdfMWVfMTdfaGVhZGVyICogMjU2KSAmIzQzOyByZWdfMWVfMTdfZW5kKTsKJiM0MzsJcGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCAweDE4LAomIzQzOwkJICAgICAgKHJlZ18xZV8xOF9oZWFkZXIgKiAyNTYpICYjNDM7IHJlZ18xZV8xOF9lbmQpOwomIzQzOwlwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIDB4MTksCiYjNDM7CQkgICAgICAocmVnXzFlXzE5X3JlYWQgJmFtcDsgMHgwMGZmKSAmIzQzOyAocmVnXzFlXzE5X2hlYWRlciAqIDI1NikpOwomIzQzOwlwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIDB4MjAsCiYjNDM7CQkgICAgICAocmVnXzFlXzIwX3JlYWQgJmFtcDsgMHhmZjAwKSAmIzQzOyByZWdfMWVfMjBfZW5kKTsKJiM0MzsJcGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCAweDIxLAomIzQzOwkJICAgICAgKHJlZ18xZV8yMV9yZWFkICZhbXA7IDB4MDBmZikgJiM0MzsgKHJlZ18xZV8yMV9oZWFkZXIgKiAyNTYpKTsKJiM0MzsJcGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCAweDIyLAomIzQzOwkJICAgICAgKHJlZ18xZV8yMl9yZWFkICZhbXA7IDB4ZmYwMCkgJiM0MzsgcmVnXzFlXzIyX2VuZCk7CiYjNDM7CXBoeV93cml0ZV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSwgMHgxNzQsCiYjNDM7CQkgICAgICAweDgwODAgJiM0MzsgKHJlZ18xZV8xNzRfaGVhZGVyICogMjU2KSAmIzQzOyByZWdfMWVfMTc0X2VuZCk7CiYjNDM7CXBoeV93cml0ZV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSwgMHgxNzUsCiYjNDM7CQkgICAgICAweDgwODAgJiM0MzsgKHJlZ18xZV8xNzVfaGVhZGVyICogMjU2KSAmIzQzOyByZWdfMWVfMTc1X2VuZCk7CiYjNDM7CiYjNDM7CXBoeV93cml0ZV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSwgMHgxNzYsIDB4NDQwMCk7CiYjNDM7CXBoeV93cml0ZV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSwgMHgxNzcsIDB4MDA0NCk7CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IGFuNzU4MV9waHlfY29uZmlnX2luaXQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBhaXJvaGFfc29jcGh5X3NoYXJlZCAqc2hhcmVkID0gcGh5X3BhY2thZ2VfZ2V0X3ByaXYocGh5ZGV2KTsKJiM0MzsJc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldl9wMDsKJiM0MzsJdTMyIHNvY19wZGlkcjsKJiM0MzsJdTggcGh5X29mZnNldDsKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJcGh5ZGV2X3AwID0gc2hhcmVkLSZndDtwaHlkZXZfcDA7CiYjNDM7CXBoeV9vZmZzZXQgPSBwaHlkZXYtJmd0O21kaW8uYWRkciAtIHBoeWRldl9wMC0mZ3Q7bWRpby5hZGRyOwomIzQzOwomIzQzOwkvKiBGSVhNRTogUmVhZCBTb0MgUERJRFIgaWYgYXZhaWxhYmxlIG9yIGRlZmF1bHQgdG8gMSAqLwomIzQzOwlzb2NfcGRpZHIgPSAxOwomIzQzOwomIzQzOwlzaGFyZWQtJmd0O21kaV9yZXNpc3Rlcl90eXBlID0gTURJXzVSOwomIzQzOwlpZiAoc29jX3BkaWRyID09IDEpCiYjNDM7CQlzaGFyZWQtJmd0O3R4X2FtcF9jb21wZW5zYXRpb25fdGJsID0gJmFtcDthbjc1ODFfdHhfYW1wX2NvbXBlbnNhdGlvbl90YmxbMF07CiYjNDM7CWVsc2UKJiM0MzsJCXNoYXJlZC0mZ3Q7dHhfYW1wX2NvbXBlbnNhdGlvbl90YmwgPSAmYW1wO2FuNzU4MV90eF9hbXBfY29tcGVuc2F0aW9uX3RibFsxXTsKJiM0MzsJc2hhcmVkLSZndDtyNTBfY2FsX3RibCA9IGFuNzU4MV96Y2FsX3RvX3I0NW9obTsKJiM0MzsKJiM0MzsJcmV0ID0gYWlyb2hhX3BoeV9jYWxpYihwaHlkZXYpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJcmV0ID0gYWlyb2hhX3BoeV9hdXRvX3NlbGVjdF90cmFuc2Zvcm1lcihwaHlkZXYpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJcmV0ID0gYWlyb2hhX3BoeV90eF9hbXBfY29tcGVuc2F0aW9uKHBoeWRldik7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwkvKiBSWCBzZXR0aW5nIGZvciA1Ul9UWE1SIGJlZm9yZSBBTiBzZXR0aW5nICovCiYjNDM7CXBoeV93cml0ZV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSwgMHhlNiwgMHgxMTExKTsKJiM0MzsJcGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCAweGU3LCAweDU1NTUpOwomIzQzOwlwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIDB4ZTksIDB4MDAwMSk7CiYjNDM7CXBoeV93cml0ZV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSwgMHhmZSwgMHgwMDAwKTsKJiM0MzsKJiM0MzsJLyogTG9uZyBMb29wIFJlYWNoIHNldHRpbmcgKi8KJiM0MzsJcGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCAweDExLCAweGZmMDApOwomIzQzOwlwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDIsIDB4MjAyLCAweDIzMTApOwomIzQzOwlwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDIsIDB4MjAzLCAweDAwMjUpOwomIzQzOwlwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDIsIDB4MjA0LCAweDIzMTApOwomIzQzOwlwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDIsIDB4MjA1LCAweDAwMjUpOwomIzQzOwlwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDIsIDB4MjA2LCAweDIzMTApOwomIzQzOwlwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDIsIDB4MjA3LCAweDAwMjUpOwomIzQzOwlwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDIsIDB4MjA4LCAweDIzMTApOwomIzQzOwlwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDIsIDB4MjA5LCAweDAwMjUpOwomIzQzOwlwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDIsIDB4MjBhLCAweDIzMTApOwomIzQzOwlwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDIsIDB4MjBiLCAweDAwMjUpOwomIzQzOwlwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDIsIDB4MjBlLCAweDIzMTApOwomIzQzOwlwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDIsIDB4MjBmLCAweDAwMjUpOwomIzQzOwlwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDIsIDB4MjEwLCAweDIzMTApOwomIzQzOwlwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDIsIDB4MjExLCAweDAwMjUpOwomIzQzOwlwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDIsIDB4MjEyLCAweDIzMTApOwomIzQzOwlwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDIsIDB4MjEzLCAweDAwMjUpOwomIzQzOwlwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDIsIDB4MjE0LCAweDIzMTApOwomIzQzOwlwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDIsIDB4MjE1LCAweDAwMjUpOwomIzQzOwlwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDIsIDB4MjE2LCAweDIzMTApOwomIzQzOwlwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDIsIDB4MjE3LCAweDAwMjUpOwomIzQzOwlwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDIsIDB4MjFhLCAweDIzMTApOwomIzQzOwlwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDIsIDB4MjFiLCAweDAwMjUpOwomIzQzOwlwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDIsIDB4MjFjLCAweDIzMTApOwomIzQzOwlwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDIsIDB4MjFkLCAweDAwMjUpOwomIzQzOwlwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDIsIDB4MjFlLCAweDIzMTApOwomIzQzOwlwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDIsIDB4MjFmLCAweDAwMjUpOwomIzQzOwlwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDIsIDB4MjIwLCAweDIzMTApOwomIzQzOwlwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDIsIDB4MjIxLCAweDAwMjUpOwomIzQzOwlwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDIsIDB4MjIyLCAweDIzMTApOwomIzQzOwlwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDIsIDB4MjIzLCAweDAwMjUpOwomIzQzOwlwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDIsIDB4MjI2LCAweDIzMTApOwomIzQzOwlwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDIsIDB4MjI3LCAweDAwMjUpOwomIzQzOwlwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDIsIDB4MjI4LCAweDIzMTApOwomIzQzOwlwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDIsIDB4MjI5LCAweDAwMjUpOwomIzQzOwlwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDIsIDB4MjJhLCAweDIzMTApOwomIzQzOwlwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDIsIDB4MjJiLCAweDAwMjUpOwomIzQzOwlwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDIsIDB4MjJjLCAweDIzMTApOwomIzQzOwlwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDIsIDB4MjJkLCAweDAwMjUpOwomIzQzOwlwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDIsIDB4MjJlLCAweDIzMTApOwomIzQzOwlwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDIsIDB4MjJmLCAweDAwMjUpOwomIzQzOwomIzQzOwkvKiBSWCBTZXR0aW5nICovCiYjNDM7CXBoeV93cml0ZV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSwgMHgzYywgMHhjMDAwKTsKJiM0MzsJcGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCAweDNkLCAweDAwMDApOwomIzQzOwlwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIDB4M2UsIDB4YzAwMCk7CiYjNDM7CiYjNDM7CS8qIEVFRSBzZXR0aW5nICovCiYjNDM7CXBoeV93cml0ZV9tbWQocGh5ZGV2LCBNRElPX01NRF9BTiwgMHgzYywgMHgwMDAwKTsKJiM0MzsKJiM0MzsJLyogUlggKi8KJiM0MzsJcGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQyLCAweDQxLCAweDMzMzMpOwomIzQzOwlwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDIsIDB4NDQsIDB4MDBjMCk7CiYjNDM7CiYjNDM7CS8qIDEwTSBzZXR0aW5ncyAqLwomIzQzOwlwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIDB4MWEzLCAweDAwZDIpOwomIzQzOwlwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIDB4MWE0LCAweDAxMGUpOwomIzQzOwlwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDIsIDB4MjdiLCAweDExNzcpOwomIzQzOwlwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDIsIDB4MjdjLCAweDA4MDgpOwomIzQzOwomIzQzOwlwaHlfc2VsZWN0X3BhZ2UocGh5ZGV2LCBNVEtfUEhZX1BBR0VfRVhURU5ERURfMSk7CiYjNDM7CV9fcGh5X3dyaXRlKHBoeWRldiwgMHgxNCwgMHgzYTE4KTsKJiM0MzsJcGh5X3Jlc3RvcmVfcGFnZShwaHlkZXYsIE1US19QSFlfUEFHRV9TVEFOREFSRCwgMCk7CiYjNDM7CiYjNDM7CXBoeV93cml0ZShwaHlkZXYsIDB4OSwgMHgxZTAwKTsKJiM0MzsKJiM0MzsJcGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQyLCAweDI2OSwgMHgyMTE0KTsKJiM0MzsJcGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQyLCAweDI2YSwgMHgxMTEzKTsKJiM0MzsJcGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQyLCAweDI2ZiwgMHgwMDAwKTsKJiM0MzsJcGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQyLCAweDI3MSwgMHgyYzYzKTsKJiM0MzsJcGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQyLCAweDI3MiwgMHgwYzJiKTsKJiM0MzsKJiM0MzsJLyogRUVFIHNldCBiZWNhdXNlIHBvd2VyIGRvd24gY2FuJiMzOTt0IHNldCB0b2tlbnJpbmcgKi8KJiM0MzsJcGh5X3NlbGVjdF9wYWdlKHBoeWRldiwgTVRLX1BIWV9QQUdFX0VYVEVOREVEXzUyQjUpOwomIzQzOwlfX210a190cl93cml0ZShwaHlkZXYsIDB4MCwgMHg3LCAweDE1LCAweDAwNTVhMCk7CiYjNDM7CV9fbXRrX3RyX3dyaXRlKHBoeWRldiwgMHgwLCAweDcsIDB4MTcsIDB4MDdmZjNmKTsKJiM0MzsJX19tdGtfdHJfd3JpdGUocGh5ZGV2LCAweDEsIDB4ZiwgMHgwLCAweDAwMDAxZSk7CiYjNDM7CV9fbXRrX3RyX3dyaXRlKHBoeWRldiwgMHgxLCAweGYsIDB4MSwgMHg2ZmI5MGEpOwomIzQzOwlfX210a190cl93cml0ZShwaHlkZXYsIDB4MSwgMHhmLCAweDE4LCAweDBlMmYwMCk7CiYjNDM7CV9fbXRrX3RyX3dyaXRlKHBoeWRldiwgMHgxLCAweGQsIDB4MjYsIDB4NDQ0NDQ0KTsKJiM0MzsJX19tdGtfdHJfd3JpdGUocGh5ZGV2LCAweDIsIDB4ZCwgMHgzLCAweDAwMDAwNCk7CiYjNDM7CV9fbXRrX3RyX3dyaXRlKHBoeWRldiwgMHgyLCAweGQsIDB4NiwgMHgyZWJhZWYpOwomIzQzOwlfX210a190cl93cml0ZShwaHlkZXYsIDB4MiwgMHhkLCAweDgsIDB4MDAwMDBiKTsKJiM0MzsJX19tdGtfdHJfd3JpdGUocGh5ZGV2LCAweDIsIDB4ZCwgMHhjLCAweDAwNTA0ZCk7CiYjNDM7CV9fbXRrX3RyX3dyaXRlKHBoeWRldiwgMHgyLCAweGQsIDB4ZCwgMHgwMjMxNGYpOwomIzQzOwlfX210a190cl93cml0ZShwaHlkZXYsIDB4MiwgMHhkLCAweGYsIDB4MDAzMDI4KTsKJiM0MzsJX19tdGtfdHJfd3JpdGUocGh5ZGV2LCAweDIsIDB4ZCwgMHgxMCwgMHgwMDAwMGEpOwomIzQzOwlfX210a190cl93cml0ZShwaHlkZXYsIDB4MiwgMHhkLCAweDExLCAweDA0MDAwMSk7CiYjNDM7CV9fbXRrX3RyX3dyaXRlKHBoeWRldiwgMHgyLCAweGQsIDB4MTQsIDB4MDAwMjRhKTsKJiM0MzsJX19tdGtfdHJfd3JpdGUocGh5ZGV2LCAweDIsIDB4ZCwgMHgxYywgMHgwMDMyMTApOwomIzQzOwlwaHlfcmVzdG9yZV9wYWdlKHBoeWRldiwgTVRLX1BIWV9QQUdFX1NUQU5EQVJELCAwKTsKJiM0MzsKJiM0MzsJcGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCAweDEyMCwgMHg4MDE0KTsKJiM0MzsJcGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCAweDEyMiwgMHhmZmZmKTsKJiM0MzsJcGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCAweDE0NCwgMHgwMjAwKTsKJiM0MzsJcGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCAweDE0YSwgMHhlZTIwKTsKJiM0MzsJcGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCAweDE5YiwgMHgwMTExKTsKJiM0MzsJcGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCAweDIzNCwgMHgxMTgxKTsKJiM0MzsJcGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCAweDIzOCwgMHgwMTIwKTsKJiM0MzsJcGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCAweDIzOSwgMHgwMTE3KTsKJiM0MzsJcGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCAweDJkMSwgMHgwNzMzKTsKJiM0MzsJcGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCAweDMyMywgMHgwMDExKTsKJiM0MzsJcGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCAweDMyNCwgMHgwMTNmKTsKJiM0MzsJcGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCAweDMyNiwgMHgwMDM3KTsKJiM0MzsJcGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQyLCAweDI2OCwgMHgwN2Y0KTsKJiM0MzsKJiM0MzsJaWYgKHNoYXJlZC0mZ3Q7dHJhbnNmb3JtZXJfdHlwZVtwaHlfb2Zmc2V0XSA9PSBUWE1SKSB7CiYjNDM7CQlwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIDB4MDAsIDB4MDE4Nyk7CiYjNDM7CQlwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIDB4MDEsIDB4MDFjYyk7CiYjNDM7CQlwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIDB4MDIsIDB4MDFjMik7CiYjNDM7CQlwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIDB4MDMsIDB4MDEwOSk7CiYjNDM7CQlwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIDB4MDQsIDB4MDIwYik7CiYjNDM7CQlwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIDB4MDUsIDB4MDIwMik7CiYjNDM7CQlwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIDB4MDYsIDB4MDM4Nyk7CiYjNDM7CQlwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIDB4MDcsIDB4MDNjNSk7CiYjNDM7CQlwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIDB4MDgsIDB4MDNjMik7CiYjNDM7CQlwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIDB4MDksIDB4MDMwOSk7CiYjNDM7CQlwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIDB4MGEsIDB4MDAwZSk7CiYjNDM7CQlwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIDB4MGIsIDB4MDAwMik7CiYjNDM7CiYjNDM7CQlwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIDB4MjMsIDB4MDg4MCk7CiYjNDM7CQlwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIDB4MjQsIDB4MDg4MCk7CiYjNDM7CQlwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIDB4MjUsIDB4MDg4MCk7CiYjNDM7CQlwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIDB4MjYsIDB4MDg4MCk7CiYjNDM7CX0gZWxzZSB7CiYjNDM7CQlpZiAoc29jX3BkaWRyID09IDIpIHsKJiM0MzsJCQlwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDIsIDB4MjY5LCAweDExMTQpOwomIzQzOwkJCXBoeV93cml0ZV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMiwgMHgyNmEsIDB4MTExMyk7CiYjNDM7CQkJcGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQyLCAweDI2ZiwgMHgyMDAwKTsKJiM0MzsJCQlwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDIsIDB4MjcxLCAweDRjODgpOwomIzQzOwkJCXBoeV93cml0ZV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMiwgMHgyNzIsIDB4MGMyYik7CiYjNDM7CiYjNDM7CQkJLyogMTAwTSBzaGFycCAqLwomIzQzOwkJCXBoeV93cml0ZV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSwgMHgwMCwgMHgwMTkwKTsKJiM0MzsJCQlwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIDB4MDEsIDB4MDFjOCk7CiYjNDM7CQkJcGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCAweDAyLCAweDAxYzApOwomIzQzOwkJCXBoeV93cml0ZV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSwgMHgwMywgMHgwMDMwKTsKJiM0MzsJCQlwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIDB4MDQsIDB4MDIwOCk7CiYjNDM7CQkJcGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCAweDA1LCAweDAwMDApOwomIzQzOwkJCXBoeV93cml0ZV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSwgMHgwNiwgMHgwMzE4KTsKJiM0MzsJCQlwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIDB4MDcsIDB4MDNjOCk7CiYjNDM7CQkJcGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCAweDA4LCAweDAzYzApOwomIzQzOwkJCXBoeV93cml0ZV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSwgMHgwOSwgMHgwMjMwKTsKJiM0MzsJCQlwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIDB4MGEsIDB4MDAwOCk7CiYjNDM7CQkJcGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCAweDBiLCAweDAyMDApOwomIzQzOwomIzQzOwkJCXBoeV93cml0ZV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSwgMHgyMywgMHgwODg1KTsKJiM0MzsJCQlwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIDB4MjQsIDB4MDg4NSk7CiYjNDM7CQkJcGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCAweDI1LCAweDA4ODUpOwomIzQzOwkJCXBoeV93cml0ZV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSwgMHgyNiwgMHgwODg1KTsKJiM0MzsJCX0gZWxzZSB7CiYjNDM7CQkJcGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCAweDAwLCAweDAxOTApOwomIzQzOwkJCXBoeV93cml0ZV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSwgMHgwMSwgMHgwMWNmKTsKJiM0MzsJCQlwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIDB4MDIsIDB4MDFjMCk7CiYjNDM7CQkJcGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCAweDAzLCAweDAwMzApOwomIzQzOwkJCXBoeV93cml0ZV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSwgMHgwNCwgMHgwMjBmKTsKJiM0MzsJCQlwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIDB4MDUsIDB4MDAwMCk7CiYjNDM7CQkJcGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCAweDA2LCAweDAzMTgpOwomIzQzOwkJCXBoeV93cml0ZV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSwgMHgwNywgMHgwM2NmKTsKJiM0MzsJCQlwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIDB4MDgsIDB4MDNjMCk7CiYjNDM7CQkJcGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCAweDA5LCAweDAyMzApOwomIzQzOwkJCXBoeV93cml0ZV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSwgMHgwYSwgMHgwMDBmKTsKJiM0MzsJCQlwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIDB4MGIsIDB4MDIwMCk7CiYjNDM7CiYjNDM7CQkJcGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCAweDIzLCAweDAwMDMpOwomIzQzOwkJCXBoeV93cml0ZV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSwgMHgyNCwgMHgwMDAzKTsKJiM0MzsJCQlwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIDB4MjUsIDB4MDAwMyk7CiYjNDM7CQkJcGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCAweDI2LCAweDAwMDMpOwomIzQzOwkJfQomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IGFuNzU4MV9waHlfcHJvYmUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBhaXJvaGFfc29jcGh5X3NoYXJlZCAqc2hhcmVkOwomIzQzOwlzdHJ1Y3QgbXRrX3NvY3BoeV9wcml2ICpwcml2OwomIzQzOwlzdHJ1Y3QgcGluY3RybCAqcGluY3RybDsKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJLyogVG9nZ2xlIHBpbmN0cmwgdG8gZW5hYmxlIFBIWSBMRUQgKi8KJiM0MzsJcGluY3RybCA9IGRldm1fcGluY3RybF9nZXRfc2VsZWN0KCZhbXA7cGh5ZGV2LSZndDttZGlvLmRldiwgJiMzNDtnYmUtbGVkJiMzNDspOwomIzQzOwlpZiAoSVNfRVJSKHBpbmN0cmwpKQomIzQzOwkJZGV2X2VycigmYW1wO3BoeWRldi0mZ3Q7bWRpby5idXMtJmd0O2RldiwKJiM0MzsJCQkmIzM0O0ZhaWxlZCB0byBzZXR1cCBQSFkgTEVEIHBpbmN0cmxcbiYjMzQ7KTsKJiM0MzsKJiM0MzsJcmV0ID0gZGV2bV9waHlfcGFja2FnZV9qb2luKCZhbXA7cGh5ZGV2LSZndDttZGlvLmRldiwgcGh5ZGV2LCAwLAomIzQzOwkJCQkgICAgc2l6ZW9mKHN0cnVjdCBhaXJvaGFfc29jcGh5X3NoYXJlZCkpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJcHJpdiA9IGRldm1fa3phbGxvYygmYW1wO3BoeWRldi0mZ3Q7bWRpby5kZXYsIHNpemVvZigqcHJpdiksIEdGUF9LRVJORUwpOwomIzQzOwlpZiAoIXByaXYpCiYjNDM7CQlyZXR1cm4gLUVOT01FTTsKJiM0MzsKJiM0MzsJaWYgKHBoeWRldi0mZ3Q7bWRpby5hZGRyID09IEFJUk9IQV9ERUZBVUxUX1BPUlQwX0FERFIpCiYjNDM7CQlzaGFyZWQtJmd0O3BoeWRldl9wMCA9IHBoeWRldjsKJiM0MzsKJiM0MzsJcGh5ZGV2LSZndDtwcml2ID0gcHJpdjsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgYW43NTgxX3BoeV9sZWRfcG9sYXJpdHlfc2V0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIGludCBpbmRleCwKJiM0MzsJCQkJICAgICAgIHVuc2lnbmVkIGxvbmcgbW9kZXMpCiYjNDM7ewomIzQzOwl1MTYgdmFsID0gMDsKJiM0MzsJdTMyIG1vZGU7CiYjNDM7CiYjNDM7CWlmIChpbmRleCAmZ3Q7PSBBSVJPSEFfUEhZX01BWF9MRURTKQomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CiYjNDM7CWZvcl9lYWNoX3NldF9iaXQobW9kZSwgJmFtcDttb2RlcywgX19QSFlfTEVEX01PREVTX05VTSkgewomIzQzOwkJc3dpdGNoIChtb2RlKSB7CiYjNDM7CQljYXNlIFBIWV9MRURfQUNUSVZFX0xPVzoKJiM0MzsJCQl2YWwgPSBNVEtfUEhZX0xFRF9PTl9QT0xBUklUWTsKJiM0MzsJCQlicmVhazsKJiM0MzsJCWNhc2UgUEhZX0xFRF9BQ1RJVkVfSElHSDoKJiM0MzsJCQlicmVhazsKJiM0MzsJCWRlZmF1bHQ6CiYjNDM7CQkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CQl9CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIHBoeV9tb2RpZnlfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDIsIGluZGV4ID8KJiM0MzsJCQkgICAgICBNVEtfUEhZX0xFRDFfT05fQ1RSTCA6IE1US19QSFlfTEVEMF9PTl9DVFJMLAomIzQzOwkJCSAgICAgIE1US19QSFlfTEVEX09OX1BPTEFSSVRZLCB2YWwpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IGFuNzU4M19waHlfY29uZmlnX2luaXQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBhaXJvaGFfc29jcGh5X3NoYXJlZCAqc2hhcmVkID0gcGh5X3BhY2thZ2VfZ2V0X3ByaXYocGh5ZGV2KTsKJiM0MzsJc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldl9wMDsKJiM0MzsJdTggcGh5X29mZnNldDsKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJLyogQk1DUl9QRE9XTiBpcyBlbmFibGVkIGJ5IGRlZmF1bHQgKi8KJiM0MzsJcGh5X2NsZWFyX2JpdHMocGh5ZGV2LCBNSUlfQk1DUiwgQk1DUl9QRE9XTik7CiYjNDM7CiYjNDM7CXBoeWRldl9wMCA9IHNoYXJlZC0mZ3Q7cGh5ZGV2X3AwOwomIzQzOwlwaHlfb2Zmc2V0ID0gcGh5ZGV2LSZndDttZGlvLmFkZHIgLSBwaHlkZXZfcDAtJmd0O21kaW8uYWRkcjsKJiM0MzsKJiM0MzsJLyogRklYTUU6IFJlYWQgU29DIE1ESSBSZXNpc3RlciBUeXBlIGlmIGF2YWlsYWJsZSBvciBkZWZhdWx0IHRvIDVSICovCiYjNDM7CXNoYXJlZC0mZ3Q7bWRpX3Jlc2lzdGVyX3R5cGUgPSBNRElfNVI7CiYjNDM7CiYjNDM7CXNoYXJlZC0mZ3Q7bWRpX3Jlc2lzdGVyX3R5cGUgPSBNRElfNVI7CiYjNDM7CWlmIChzaGFyZWQtJmd0O21kaV9yZXNpc3Rlcl90eXBlID09IE1ESV8wUikKJiM0MzsJCXNoYXJlZC0mZ3Q7cjUwX2NhbF90YmwgPSBhbjc1ODNfemNhbF90b19yNTBvaG1fMFI7CiYjNDM7CWlmIChzaGFyZWQtJmd0O21kaV9yZXNpc3Rlcl90eXBlID09IE1ESV81UikKJiM0MzsJCXNoYXJlZC0mZ3Q7cjUwX2NhbF90YmwgPSBhbjc1ODNfemNhbF90b19yNTBvaG1fNVI7CiYjNDM7CXNoYXJlZC0mZ3Q7dHhfYW1wX2NvbXBlbnNhdGlvbl90YmwgPSAmYW1wO2FuNzU4M190eF9hbXBfY29tcGVuc2F0aW9uX3RibDsKJiM0MzsKJiM0MzsJcmV0ID0gYWlyb2hhX3BoeV9jYWxpYihwaHlkZXYpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJcmV0ID0gYWlyb2hhX3BoeV9hdXRvX3NlbGVjdF90cmFuc2Zvcm1lcihwaHlkZXYpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJcmV0ID0gYWlyb2hhX3BoeV90eF9hbXBfY29tcGVuc2F0aW9uKHBoeWRldik7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwkvKiBFbmFibGUgSWRsZSBNb2RlIFBvd2VyIFNldHRpbmcgKi8KJiM0MzsJaWYgKHBoeV9vZmZzZXQgPT0gMCkgewomIzQzOwkJcGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQyLCAweDI2OCwgMHgwN0YxKTsKJiM0MzsJCXBoeV93cml0ZV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMiwgMHg3MDMsIDB4MzExMSk7CiYjNDM7CQlwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDIsIDB4MjcxLCAweDNDMjQpOwomIzQzOwkJcGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQyLCAweDcwMSwgMHgxMDIzKTsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAoc2hhcmVkLSZndDt0cmFuc2Zvcm1lcl90eXBlW3BoeV9vZmZzZXRdID09IFRYTVIpIHsKJiM0MzsJCXBoeV93cml0ZV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSwgMHgyMywgMHgwODgxKTsKJiM0MzsJCXBoeV93cml0ZV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSwgMHgyNCwgMHgwODgxKTsKJiM0MzsJCXBoeV93cml0ZV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSwgMHgyNSwgMHgwODgxKTsKJiM0MzsJCXBoeV93cml0ZV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSwgMHgyNiwgMHgwODgxKTsKJiM0MzsKJiM0MzsJCWlmIChzaGFyZWQtJmd0O21kaV9yZXNpc3Rlcl90eXBlID09IE1ESV8wUikKJiM0MzsJCQlwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIDB4MDUsIDB4MDIwNSk7CiYjNDM7CQllbHNlCiYjNDM7CQkJcGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCAweDA1LCAweDAyMDApOwomIzQzOwl9IGVsc2UgewomIzQzOwkJaWYgKHNoYXJlZC0mZ3Q7bWRpX3Jlc2lzdGVyX3R5cGUgPT0gTURJXzBSKSB7CiYjNDM7CQkJLyogUlggc2V0dGluZyBmb3IgNVJfVFhNUiBiZWZvcmUgQU4gc2V0dGluZyAqLwomIzQzOwkJCXBoeV93cml0ZV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSwgMHhlNywgMHg2NjY2KTsKJiM0MzsJCQlwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIDB4ZTksIDB4MDAwMyk7CiYjNDM7CQkJcGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCAweGZlLCAweDAwMDYpOwomIzQzOwkJCXBoeV93cml0ZV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSwgMHhlNiwgMHgxMTExKTsKJiM0MzsJCQkvKiAxMDBNIHNoYXJwICovCiYjNDM7CQkJcGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCAweDIzLCAweDBjODYpOwomIzQzOwkJCXBoeV93cml0ZV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSwgMHgyNCwgMHgwYzg2KTsKJiM0MzsJCQlwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIDB4MjUsIDB4MGM4Nik7CiYjNDM7CQkJcGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCAweDI2LCAweDBjODYpOwomIzQzOwkJCXBoeV93cml0ZV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSwgMHgwMSwgMHgwMWNiKTsKJiM0MzsJCQlwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIDB4MDIsIDB4MDFjMik7CiYjNDM7CQkJcGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCAweDAzLCAweDAxMDgpOwomIzQzOwkJCXBoeV93cml0ZV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSwgMHgwNCwgMHgwMjExKTsKJiM0MzsJCQlwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIDB4MDUsIDB4MDIwNSk7CiYjNDM7CQkJcGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCAweDA2LCAweDAzODcpOwomIzQzOwkJCXBoeV93cml0ZV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSwgMHgwNywgMHgwM2NlKTsKJiM0MzsJCQlwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIDB4MDgsIDB4MDNjOCk7CiYjNDM7CQkJcGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCAweDBiLCAweDAwMDUpOwomIzQzOwkJfSBlbHNlIHsKJiM0MzsJCQkvKiAxMDBNIHNoYXJwICovCiYjNDM7CQkJcGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCAweDIzLCAweDA4ODYpOwomIzQzOwkJCXBoeV93cml0ZV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSwgMHgyNCwgMHgwODg2KTsKJiM0MzsJCQlwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIDB4MjUsIDB4MDg4Nik7CiYjNDM7CQkJcGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCAweDI2LCAweDA4ODYpOwomIzQzOwkJCXBoeV93cml0ZV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSwgMHgwMCwgMHgwMTk1KTsKJiM0MzsJCQlwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIDB4MDEsIDB4MDFjYik7CiYjNDM7CQkJcGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCAweDAyLCAweDAxYzIpOwomIzQzOwkJCXBoeV93cml0ZV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSwgMHgwMywgMHgwMTA4KTsKJiM0MzsJCQlwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIDB4MDQsIDB4MDIxMSk7CiYjNDM7CQkJcGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCAweDA1LCAweDAyMDUpOwomIzQzOwkJCXBoeV93cml0ZV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSwgMHgwNiwgMHgwMzg3KTsKJiM0MzsJCQlwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIDB4MDcsIDB4MDNjZSk7CiYjNDM7CQkJcGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCAweDA4LCAweDAzYzMpOwomIzQzOwkJCXBoeV93cml0ZV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSwgMHgwYSwgMHgwMDEwKTsKJiM0MzsJCQlwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIDB4MGIsIDB4MDAwNSk7CiYjNDM7CQl9CiYjNDM7CX0KJiM0MzsKJiM0MzsJLyogUlggU2V0dGluZyAqLwomIzQzOwlwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIDB4M2MsIDB4YzAwMCk7CiYjNDM7CXBoeV93cml0ZV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSwgMHgzZCwgMHgwMDAwKTsKJiM0MzsJcGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCAweDNlLCAweGMwMDApOwomIzQzOwomIzQzOwkvKiBFRUUgc2V0dGluZyAqLwomIzQzOwlwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfQU4sIDB4M2MsIDB4MDAwMCk7CiYjNDM7CiYjNDM7CS8qIDEwTSBzZXR0aW5ncyAqLwomIzQzOwlwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIDB4MWEzLCAweDAwZDIpOwomIzQzOwlwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIDB4MWE0LCAweDAxMGUpOwomIzQzOwlwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDIsIDB4MjdiLCAweDExNzcpOwomIzQzOwlwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDIsIDB4MjdjLCAweDA4MDgpOwomIzQzOwomIzQzOwlwaHlfc2VsZWN0X3BhZ2UocGh5ZGV2LCBNVEtfUEhZX1BBR0VfRVhURU5ERURfMyk7CiYjNDM7CV9fcGh5X3dyaXRlKHBoeWRldiwgMHgxNCwgMHgxOTApOwomIzQzOwlwaHlfcmVzdG9yZV9wYWdlKHBoeWRldiwgTVRLX1BIWV9QQUdFX1NUQU5EQVJELCAwKTsKJiM0MzsKJiM0MzsJcGh5X3NlbGVjdF9wYWdlKHBoeWRldiwgTVRLX1BIWV9QQUdFX0VYVEVOREVEXzEpOwomIzQzOwlfX3BoeV93cml0ZShwaHlkZXYsIDB4MTQsIDB4M2ExOCk7CiYjNDM7CXBoeV9yZXN0b3JlX3BhZ2UocGh5ZGV2LCBNVEtfUEhZX1BBR0VfU1RBTkRBUkQsIDApOwomIzQzOwomIzQzOwlwaHlfd3JpdGUocGh5ZGV2LCAweDksIDB4MDYwMCk7CiYjNDM7CiYjNDM7CS8qIEVFRSBrZWVwIG9ubHkgUGFpciBBIE9OICovCiYjNDM7CXBoeV93cml0ZV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSwgMHg2MzAsIDB4MDA2RSk7CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgc3RydWN0IHBoeV9kcml2ZXIgbXRrX3NvY3BoeV9kcml2ZXJbXSA9IHsKJiM0MzsJewomIzQzOwkJUEhZX0lEX01BVENIX0VYQUNUKEFJUk9IQV9HUEhZX0lEX0FONzU4MSksCiYjNDM7CQkubmFtZQkJPSAmIzM0O0Fpcm9oYSBBTjc1ODEgUEhZJiMzNDssCiYjNDM7CQkuY29uZmlnX2luaXQJPSBhbjc1ODFfcGh5X2NvbmZpZ19pbml0LAomIzQzOwkJLmNvbmZpZ19pbnRyCT0gZ2VucGh5X25vX2NvbmZpZ19pbnRyLAomIzQzOwkJLmhhbmRsZV9pbnRlcnJ1cHQgPSBnZW5waHlfaGFuZGxlX2ludGVycnVwdF9ub19hY2ssCiYjNDM7CQkucHJvYmUJCT0gYW43NTgxX3BoeV9wcm9iZSwKJiM0MzsJCS5sZWRfYmxpbmtfc2V0CT0gbXQ3OTh4X3BoeV9sZWRfYmxpbmtfc2V0LAomIzQzOwkJLmxlZF9icmlnaHRuZXNzX3NldCA9IG10Nzk4eF9waHlfbGVkX2JyaWdodG5lc3Nfc2V0LAomIzQzOwkJLmxlZF9od19pc19zdXBwb3J0ZWQgPSBtdDc5OHhfcGh5X2xlZF9od19pc19zdXBwb3J0ZWQsCiYjNDM7CQkubGVkX2h3X2NvbnRyb2xfc2V0ID0gbXQ3OTh4X3BoeV9sZWRfaHdfY29udHJvbF9zZXQsCiYjNDM7CQkubGVkX2h3X2NvbnRyb2xfZ2V0ID0gbXQ3OTh4X3BoeV9sZWRfaHdfY29udHJvbF9nZXQsCiYjNDM7CQkubGVkX3BvbGFyaXR5X3NldCA9IGFuNzU4MV9waHlfbGVkX3BvbGFyaXR5X3NldCwKJiM0MzsJCS5yZWFkX3BhZ2UJPSBtdGtfcGh5X3JlYWRfcGFnZSwKJiM0MzsJCS53cml0ZV9wYWdlCT0gbXRrX3BoeV93cml0ZV9wYWdlLAomIzQzOwl9LAomIzQzOwl7CiYjNDM7CQlQSFlfSURfTUFUQ0hfRVhBQ1QoQUlST0hBX0dQSFlfSURfQU43NTgzKSwKJiM0MzsJCS5uYW1lCQk9ICYjMzQ7QWlyb2hhIEFONzU4MyBQSFkmIzM0OywKJiM0MzsJCS5jb25maWdfaW5pdAk9IGFuNzU4M19waHlfY29uZmlnX2luaXQsCiYjNDM7CQkucHJvYmUJCT0gYW43NTgxX3BoeV9wcm9iZSwKJiM0MzsJCS5sZWRfYmxpbmtfc2V0CT0gbXQ3OTh4X3BoeV9sZWRfYmxpbmtfc2V0LAomIzQzOwkJLmxlZF9icmlnaHRuZXNzX3NldCA9IG10Nzk4eF9waHlfbGVkX2JyaWdodG5lc3Nfc2V0LAomIzQzOwkJLmxlZF9od19pc19zdXBwb3J0ZWQgPSBtdDc5OHhfcGh5X2xlZF9od19pc19zdXBwb3J0ZWQsCiYjNDM7CQkubGVkX2h3X2NvbnRyb2xfc2V0ID0gbXQ3OTh4X3BoeV9sZWRfaHdfY29udHJvbF9zZXQsCiYjNDM7CQkubGVkX2h3X2NvbnRyb2xfZ2V0ID0gbXQ3OTh4X3BoeV9sZWRfaHdfY29udHJvbF9nZXQsCiYjNDM7CQkubGVkX3BvbGFyaXR5X3NldCA9IGFuNzU4MV9waHlfbGVkX3BvbGFyaXR5X3NldCwKJiM0MzsJCS5yZWFkX3BhZ2UJPSBtdGtfcGh5X3JlYWRfcGFnZSwKJiM0MzsJCS53cml0ZV9wYWdlCT0gbXRrX3BoeV93cml0ZV9wYWdlLAomIzQzOwl9LAomIzQzO307CiYjNDM7CiYjNDM7bW9kdWxlX3BoeV9kcml2ZXIobXRrX3NvY3BoeV9kcml2ZXIpOwomIzQzOwomIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3QgbWRpb19kZXZpY2VfaWQgX19tYXliZV91bnVzZWQgYWlyb2hhX3NvY3BoeV90YmxbXSA9IHsKJiM0MzsJeyBQSFlfSURfTUFUQ0hfRVhBQ1QoQUlST0hBX0dQSFlfSURfQU43NTgxKSB9LAomIzQzOwl7IFBIWV9JRF9NQVRDSF9FWEFDVChBSVJPSEFfR1BIWV9JRF9BTjc1ODMpIH0sCiYjNDM7CXsgfQomIzQzO307CiYjNDM7CiYjNDM7TU9EVUxFX0RFU0NSSVBUSU9OKCYjMzQ7QWlyb2hhIFNvQyBHaWdhYml0IEV0aGVybmV0IFBIWSBkcml2ZXImIzM0Oyk7CiYjNDM7TU9EVUxFX0FVVEhPUigmIzM0O0NocmlzdGlhbiBNYXJhbmdpICZsdDthbnN1ZWxzbXRoQGdtYWlsLmNvbSZndDsmIzM0Oyk7CiYjNDM7TU9EVUxFX0xJQ0VOU0UoJiMzNDtHUEwmIzM0Oyk7CiYjNDM7TU9EVUxFX1ZFUlNJT04oJiMzNDswMS4wMS4yMDI2MDMwNiYjMzQ7KTsKJiM0MzsKJiM0MztNT0RVTEVfREVWSUNFX1RBQkxFKG1kaW8sIGFpcm9oYV9zb2NwaHlfdGJsKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BoeS9tZWRpYXRlay9tdGstZ2Utc29jLmMgYi9kcml2ZXJzL25ldC9waHkvbWVkaWF0ZWsvbXRrLWdlLXNvYy5jCmluZGV4IDlhNTQ5NDk2NDRkNWE1Li44NjhhZTA4OTAxM2QzZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvcGh5L21lZGlhdGVrL210ay1nZS1zb2MuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9waHkvbWVkaWF0ZWsvbXRrLWdlLXNvYy5jCkBAIC0xMSwzMjIgJiM0MzsxMSwxMCBAQAogCiAjaW5jbHVkZSAmIzM0Oy4uL3BoeWxpYi5oJiMzNDsKICNpbmNsdWRlICYjMzQ7bXRrLmgmIzM0OwomIzQzOyNpbmNsdWRlICYjMzQ7bXRrLWdlLXNvYy5oJiMzNDsKIAogI2RlZmluZSBNVEtfUEhZX01BWF9MRURTCQkJMgogCi0jZGVmaW5lIE1US19HUEhZX0lEX01UNzk4MQkJCTB4MDNhMjk0NjEKLSNkZWZpbmUgTVRLX0dQSFlfSURfTVQ3OTg4CQkJMHgwM2EyOTQ4MQotI2RlZmluZSBNVEtfR1BIWV9JRF9BTjc1ODEJCQkweDAzYTI5NGMxCi0jZGVmaW5lIE1US19HUEhZX0lEX0FONzU4MwkJCTB4YzBmZjA0MjAKLQotI2RlZmluZSBNVEtfRVhUX1BBR0VfQUNDRVNTCQkJMHgxZgotI2RlZmluZSBNVEtfUEhZX1BBR0VfU1RBTkRBUkQJCQkweDAwMDAKLSNkZWZpbmUgTVRLX1BIWV9QQUdFX0VYVEVOREVEXzMJCQkweDAwMDMKLQotI2RlZmluZSBNVEtfUEhZX0xQSV9SRUdfMTQJCQkweDE0Ci0jZGVmaW5lIE1US19QSFlfTFBJX1dBS0VfVElNRVJfMTAwMF9NQVNLCUdFTk1BU0soOCwgMCkKLQotI2RlZmluZSBNVEtfUEhZX0xQSV9SRUdfMWMJCQkweDFjCi0jZGVmaW5lIE1US19QSFlfU01JX0RFVF9PTl9USFJFU0hfTUFTSwkJR0VOTUFTSygxMywgOCkKLQotI2RlZmluZSBNVEtfUEhZX1BBR0VfRVhURU5ERURfMkEzMAkJMHgyYTMwCi0KLS8qIFJlZ2lzdGVycyBvbiBUb2tlbiBSaW5nIGRlYnVnIG5vZGVzICovCi0vKiBjaF9hZGRyID0gMHgwLCBub2RlX2FkZHIgPSAweDcsIGRhdGFfYWRkciA9IDB4MTUgKi8KLS8qIE5vcm1Nc2VMb1RocmVzaCAqLwotI2RlZmluZSBOT1JNQUxfTVNFX0xPX1RIUkVTSF9NQVNLCQlHRU5NQVNLKDE1LCA4KQotCi0vKiBjaF9hZGRyID0gMHgwLCBub2RlX2FkZHIgPSAweGYsIGRhdGFfYWRkciA9IDB4M2MgKi8KLS8qIFJlbUFja0NudExpbWl0Q3RybCAqLwotI2RlZmluZSBSRU1PVEVfQUNLX0NPVU5UX0xJTUlUX0NUUkxfTUFTSwlHRU5NQVNLKDIsIDEpCi0KLS8qIGNoX2FkZHIgPSAweDEsIG5vZGVfYWRkciA9IDB4ZCwgZGF0YV9hZGRyID0gMHgyMCAqLwotLyogVmNvU2xpY2VyVGhyZXNoQml0c0hpZ2ggKi8KLSNkZWZpbmUgVkNPX1NMSUNFUl9USFJFU0hfSElHSF9NQVNLCQlHRU5NQVNLKDIzLCAwKQotCi0vKiBjaF9hZGRyID0gMHgxLCBub2RlX2FkZHIgPSAweGYsIGRhdGFfYWRkciA9IDB4MCAqLwotLyogRGZlVGFpbEVuYWJsZVZnYVRocmVzaDEwMDAgKi8KLSNkZWZpbmUgREZFX1RBSUxfRUFOQkxFX1ZHQV9UUkhFU0hfMTAwMAkJR0VOTUFTSyg1LCAxKQotCi0vKiBjaF9hZGRyID0gMHgxLCBub2RlX2FkZHIgPSAweGYsIGRhdGFfYWRkciA9IDB4MSAqLwotLyogTXJ2bFRyRml4MTAwS3AgKi8KLSNkZWZpbmUgTVJWTF9UUl9GSVhfMTAwS1BfTUFTSwkJCUdFTk1BU0soMjIsIDIwKQotLyogTXJ2bFRyRml4MTAwS2YgKi8KLSNkZWZpbmUgTVJWTF9UUl9GSVhfMTAwS0ZfTUFTSwkJCUdFTk1BU0soMTksIDE3KQotLyogTXJ2bFRyRml4MTAwMEtwICovCi0jZGVmaW5lIE1SVkxfVFJfRklYXzEwMDBLUF9NQVNLCQkJR0VOTUFTSygxNiwgMTQpCi0vKiBNcnZsVHJGaXgxMDAwS2YgKi8KLSNkZWZpbmUgTVJWTF9UUl9GSVhfMTAwMEtGX01BU0sJCQlHRU5NQVNLKDEzLCAxMSkKLQotLyogY2hfYWRkciA9IDB4MSwgbm9kZV9hZGRyID0gMHhmLCBkYXRhX2FkZHIgPSAweDEyICovCi0vKiBWZ2FEZWNSYXRlICovCi0jZGVmaW5lIFZHQV9ERUNJTUFUSU9OX1JBVEVfTUFTSwkJR0VOTUFTSyg4LCA1KQotCi0vKiBjaF9hZGRyID0gMHgxLCBub2RlX2FkZHIgPSAweGYsIGRhdGFfYWRkciA9IDB4MTcgKi8KLS8qIFNsdkRTUHJlYWR5VGltZSAqLwotI2RlZmluZSBTTEFWRV9EU1BfUkVBRFlfVElNRV9NQVNLCQlHRU5NQVNLKDIyLCAxNSkKLS8qIE1hc0RTUHJlYWR5VGltZSAqLwotI2RlZmluZSBNQVNURVJfRFNQX1JFQURZX1RJTUVfTUFTSwkJR0VOTUFTSygxNCwgNykKLQotLyogY2hfYWRkciA9IDB4MSwgbm9kZV9hZGRyID0gMHhmLCBkYXRhX2FkZHIgPSAweDE4ICovCi0vKiBFbmFiUmFuZFVwZFRyaWcgKi8KLSNkZWZpbmUgRU5BQkxFX1JBTkRPTV9VUERPV05fQ09VTlRFUl9UUklHR0VSCUJJVCg4KQotCi0vKiBjaF9hZGRyID0gMHgxLCBub2RlX2FkZHIgPSAweGYsIGRhdGFfYWRkciA9IDB4MjAgKi8KLS8qIFJlc2V0U3luY09mZnNldCAqLwotI2RlZmluZSBSRVNFVF9TWU5DX09GRlNFVF9NQVNLCQkJR0VOTUFTSygxMSwgOCkKLQotLyogY2hfYWRkciA9IDB4Miwgbm9kZV9hZGRyID0gMHhkLCBkYXRhX2FkZHIgPSAweDAgKi8KLS8qIEZmZVVwZEdhaW5Gb3JjZVZhbCAqLwotI2RlZmluZSBGRkVfVVBEQVRFX0dBSU5fRk9SQ0VfVkFMX01BU0sJCUdFTk1BU0soOSwgNykKLS8qIEZmZVVwZEdhaW5Gb3JjZSAqLwotI2RlZmluZSBGRkVfVVBEQVRFX0dBSU5fRk9SQ0UJCQlCSVQoNikKLQotLyogY2hfYWRkciA9IDB4Miwgbm9kZV9hZGRyID0gMHhkLCBkYXRhX2FkZHIgPSAweDMgKi8KLS8qIFRyRnJlZXplICovCi0jZGVmaW5lIFRSX0ZSRUVaRV9NQVNLCQkJCUdFTk1BU0soMTEsIDApCi0KLS8qIGNoX2FkZHIgPSAweDIsIG5vZGVfYWRkciA9IDB4ZCwgZGF0YV9hZGRyID0gMHg2ICovCi0vKiBTUzogU3RlYWR5LXN0YXRlLCBLUDogUHJvcG9ydGlvbmFsIEdhaW4gKi8KLS8qIFNTVHJLcDEwMCAqLwotI2RlZmluZSBTU19UUl9LUDEwMF9NQVNLCQkJR0VOTUFTSygyMSwgMTkpCi0vKiBTU1RyS2YxMDAgKi8KLSNkZWZpbmUgU1NfVFJfS0YxMDBfTUFTSwkJCUdFTk1BU0soMTgsIDE2KQotLyogU1NUcktwMTAwME1hcyAqLwotI2RlZmluZSBTU19UUl9LUDEwMDBfTUFTVEVSX01BU0sJCUdFTk1BU0soMTUsIDEzKQotLyogU1NUcktmMTAwME1hcyAqLwotI2RlZmluZSBTU19UUl9LRjEwMDBfTUFTVEVSX01BU0sJCUdFTk1BU0soMTIsIDEwKQotLyogU1NUcktwMTAwMFNsdiAqLwotI2RlZmluZSBTU19UUl9LUDEwMDBfU0xBVkVfTUFTSwkJCUdFTk1BU0soOSwgNykKLS8qIFNTVHJLZjEwMDBTbHYgKi8KLSNkZWZpbmUgU1NfVFJfS0YxMDAwX1NMQVZFX01BU0sJCQlHRU5NQVNLKDYsIDQpCi0KLS8qIGNoX2FkZHIgPSAweDIsIG5vZGVfYWRkciA9IDB4ZCwgZGF0YV9hZGRyID0gMHg4ICovCi0vKiBjbGVhciB0aGlzIGJpdCBpZiB3YW5uYSBzZWxlY3QgZnJvbSBBRkUgKi8KLS8qIFJlZ3NpZ2RldF9zZWxfMTAwMCAqLwotI2RlZmluZSBFRUUxMDAwX1NFTEVDVF9TSUdOQUxfREVURUNUSU9OX0ZST01fREZFCUJJVCg0KQotCi0vKiBjaF9hZGRyID0gMHgyLCBub2RlX2FkZHIgPSAweGQsIGRhdGFfYWRkciA9IDB4ZCAqLwotLyogUmVnRUVFX3N0MlRyS2YxMDAwICovCi0jZGVmaW5lIEVFRTEwMDBfU1RBR0UyX1RSX0tGX01BU0sJCUdFTk1BU0soMTMsIDExKQotCi0vKiBjaF9hZGRyID0gMHgyLCBub2RlX2FkZHIgPSAweGQsIGRhdGFfYWRkciA9IDB4ZiAqLwotLyogUmVnRUVFX3Nsdl93YWtldHJfdGltZXJfdGFyICovCi0jZGVmaW5lIFNMQVZFX1dBS0VUUl9USU1FUl9NQVNLCQkJR0VOTUFTSygyMCwgMTEpCi0vKiBSZWdFRUVfc2x2X3JlbXR4X3RpbWVyX3RhciAqLwotI2RlZmluZSBTTEFWRV9SRU1UWF9USU1FUl9NQVNLCQkJR0VOTUFTSygxMCwgMSkKLQotLyogY2hfYWRkciA9IDB4Miwgbm9kZV9hZGRyID0gMHhkLCBkYXRhX2FkZHIgPSAweDEwICovCi0vKiBSZWdFRUVfc2x2X3dha2VfaW50X3RpbWVyX3RhciAqLwotI2RlZmluZSBTTEFWRV9XQUtFSU5UX1RJTUVSX01BU0sJCUdFTk1BU0soMTAsIDEpCi0KLS8qIGNoX2FkZHIgPSAweDIsIG5vZGVfYWRkciA9IDB4ZCwgZGF0YV9hZGRyID0gMHgxNCAqLwotLyogUmVnRUVFX3RyZnJlZXplX3RpbWVyMiAqLwotI2RlZmluZSBUUl9GUkVFWkVfVElNRVIyX01BU0sJCQlHRU5NQVNLKDksIDApCi0KLS8qIGNoX2FkZHIgPSAweDIsIG5vZGVfYWRkciA9IDB4ZCwgZGF0YV9hZGRyID0gMHgxYyAqLwotLyogUmVnRUVFMTAwU3RnMV90YXIgKi8KLSNkZWZpbmUgRUVFMTAwX0xQU1lOQ19TVEFHRTFfVVBEQVRFX1RJTUVSX01BU0sJR0VOTUFTSyg4LCAwKQotCi0vKiBjaF9hZGRyID0gMHgyLCBub2RlX2FkZHIgPSAweGQsIGRhdGFfYWRkciA9IDB4MjUgKi8KLS8qIFJFR0VFRV93YWtlX3Nsdl90cl93YWl0X2RmZXNpZ2RldF9lbiAqLwotI2RlZmluZSBXQUtFX1NMQVZFX1RSX1dBSVRfREZFX0RFVEVDVElPTl9FTglCSVQoMTEpCi0KLSNkZWZpbmUgQU5BTE9HX0lOVEVSTkFMX09QRVJBVElPTl9NQVhfVVMJMjAKLSNkZWZpbmUgVFhSRVNFUlZFX01JTgkJCQkwCi0jZGVmaW5lIFRYUkVTRVJWRV9NQVgJCQkJNwotCi0jZGVmaW5lIE1US19QSFlfQU5BUkdfUkcJCQkweDEwCi0jZGVmaW5lICAgTVRLX1BIWV9UQ0xLT0ZGU0VUX01BU0sJCUdFTk1BU0soMTIsIDgpCi0KLS8qIFJlZ2lzdGVycyBvbiBNRElPX01NRF9WRU5EMSAqLwotI2RlZmluZSBNVEtfUEhZX1RYVkxEX0RBX1JHCQkJMHgxMgotI2RlZmluZSAgIE1US19QSFlfREFfVFhfSTJNUEJfQV9HQkVfTUFTSwlHRU5NQVNLKDE1LCAxMCkKLSNkZWZpbmUgICBNVEtfUEhZX0RBX1RYX0kyTVBCX0FfVEJUX01BU0sJR0VOTUFTSyg1LCAwKQotCi0jZGVmaW5lIE1US19QSFlfVFhfSTJNUEJfVEVTVF9NT0RFX0EyCQkweDE2Ci0jZGVmaW5lICAgTVRLX1BIWV9EQV9UWF9JMk1QQl9BX0hCVF9NQVNLCUdFTk1BU0soMTUsIDEwKQotI2RlZmluZSAgIE1US19QSFlfREFfVFhfSTJNUEJfQV9UU1RfTUFTSwlHRU5NQVNLKDUsIDApCi0KLSNkZWZpbmUgTVRLX1BIWV9UWF9JMk1QQl9URVNUX01PREVfQjEJCTB4MTcKLSNkZWZpbmUgICBNVEtfUEhZX0RBX1RYX0kyTVBCX0JfR0JFX01BU0sJR0VOTUFTSygxMywgOCkKLSNkZWZpbmUgICBNVEtfUEhZX0RBX1RYX0kyTVBCX0JfVEJUX01BU0sJR0VOTUFTSyg1LCAwKQotCi0jZGVmaW5lIE1US19QSFlfVFhfSTJNUEJfVEVTVF9NT0RFX0IyCQkweDE4Ci0jZGVmaW5lICAgTVRLX1BIWV9EQV9UWF9JMk1QQl9CX0hCVF9NQVNLCUdFTk1BU0soMTMsIDgpCi0jZGVmaW5lICAgTVRLX1BIWV9EQV9UWF9JMk1QQl9CX1RTVF9NQVNLCUdFTk1BU0soNSwgMCkKLQotI2RlZmluZSBNVEtfUEhZX1RYX0kyTVBCX1RFU1RfTU9ERV9DMQkJMHgxOQotI2RlZmluZSAgIE1US19QSFlfREFfVFhfSTJNUEJfQ19HQkVfTUFTSwlHRU5NQVNLKDEzLCA4KQotI2RlZmluZSAgIE1US19QSFlfREFfVFhfSTJNUEJfQ19UQlRfTUFTSwlHRU5NQVNLKDUsIDApCi0KLSNkZWZpbmUgTVRLX1BIWV9UWF9JMk1QQl9URVNUX01PREVfQzIJCTB4MjAKLSNkZWZpbmUgICBNVEtfUEhZX0RBX1RYX0kyTVBCX0NfSEJUX01BU0sJR0VOTUFTSygxMywgOCkKLSNkZWZpbmUgICBNVEtfUEhZX0RBX1RYX0kyTVBCX0NfVFNUX01BU0sJR0VOTUFTSyg1LCAwKQotCi0jZGVmaW5lIE1US19QSFlfVFhfSTJNUEJfVEVTVF9NT0RFX0QxCQkweDIxCi0jZGVmaW5lICAgTVRLX1BIWV9EQV9UWF9JMk1QQl9EX0dCRV9NQVNLCUdFTk1BU0soMTMsIDgpCi0jZGVmaW5lICAgTVRLX1BIWV9EQV9UWF9JMk1QQl9EX1RCVF9NQVNLCUdFTk1BU0soNSwgMCkKLQotI2RlZmluZSBNVEtfUEhZX1RYX0kyTVBCX1RFU1RfTU9ERV9EMgkJMHgyMgotI2RlZmluZSAgIE1US19QSFlfREFfVFhfSTJNUEJfRF9IQlRfTUFTSwlHRU5NQVNLKDEzLCA4KQotI2RlZmluZSAgIE1US19QSFlfREFfVFhfSTJNUEJfRF9UU1RfTUFTSwlHRU5NQVNLKDUsIDApCi0KLSNkZWZpbmUgTVRLX1BIWV9SWEFEQ19DVFJMX1JHNwkJCTB4YzYKLSNkZWZpbmUgICBNVEtfUEhZX0RBX0FEX0JVRl9CSUFTX0xQX01BU0sJR0VOTUFTSyg5LCA4KQotCi0jZGVmaW5lIE1US19QSFlfUlhBRENfQ1RSTF9SRzkJCQkweGM4Ci0jZGVmaW5lICAgTVRLX1BIWV9EQV9SWF9QU0JOX1RCVF9NQVNLCQlHRU5NQVNLKDE0LCAxMikKLSNkZWZpbmUgICBNVEtfUEhZX0RBX1JYX1BTQk5fSEJUX01BU0sJCUdFTk1BU0soMTAsIDgpCi0jZGVmaW5lICAgTVRLX1BIWV9EQV9SWF9QU0JOX0dCRV9NQVNLCQlHRU5NQVNLKDYsIDQpCi0jZGVmaW5lICAgTVRLX1BIWV9EQV9SWF9QU0JOX0xQX01BU0sJCUdFTk1BU0soMiwgMCkKLQotI2RlZmluZSBNVEtfUEhZX0xET19PVVRQVVRfVgkJCTB4ZDcKLQotI2RlZmluZSBNVEtfUEhZX1JHX0FOQV9DQUxfUkcwCQkJMHhkYgotI2RlZmluZSAgIE1US19QSFlfUkdfQ0FMX0NLSU5WCQkJQklUKDEyKQotI2RlZmluZSAgIE1US19QSFlfUkdfQU5BX0NBTEVOCQkJQklUKDgpCi0jZGVmaW5lICAgTVRLX1BIWV9SR19aQ0FMRU5fQQkJCUJJVCgwKQotCi0jZGVmaW5lIE1US19QSFlfUkdfQU5BX0NBTF9SRzEJCQkweGRjCi0jZGVmaW5lICAgTVRLX1BIWV9SR19aQ0FMRU5fQgkJCUJJVCgxMikKLSNkZWZpbmUgICBNVEtfUEhZX1JHX1pDQUxFTl9DCQkJQklUKDgpCi0jZGVmaW5lICAgTVRLX1BIWV9SR19aQ0FMRU5fRAkJCUJJVCg0KQotI2RlZmluZSAgIE1US19QSFlfUkdfVFhWT1NfQ0FMRU4JCUJJVCgwKQotCi0jZGVmaW5lIE1US19QSFlfUkdfQU5BX0NBTF9SRzUJCQkweGUwCi0jZGVmaW5lICAgTVRLX1BIWV9SR19SRVhUX1RSSU1fTUFTSwkJR0VOTUFTSygxMywgOCkKLQotI2RlZmluZSBNVEtfUEhZX1JHX1RYX0ZJTFRFUgkJCTB4ZmUKLQotI2RlZmluZSBNVEtfUEhZX1JHX0xQSV9QQ1NfRFNQX0NUUkxfUkVHMTIwCTB4MTIwCi0jZGVmaW5lICAgTVRLX1BIWV9MUElfU0lHX0VOX0xPX1RIUkVTSDEwMDBfTUFTSwlHRU5NQVNLKDEyLCA4KQotI2RlZmluZSAgIE1US19QSFlfTFBJX1NJR19FTl9ISV9USFJFU0gxMDAwX01BU0sJR0VOTUFTSyg0LCAwKQotCi0jZGVmaW5lIE1US19QSFlfUkdfTFBJX1BDU19EU1BfQ1RSTF9SRUcxMjIJMHgxMjIKLSNkZWZpbmUgICBNVEtfUEhZX0xQSV9OT1JNX01TRV9ISV9USFJFU0gxMDAwX01BU0sJR0VOTUFTSyg3LCAwKQotCi0jZGVmaW5lIE1US19QSFlfUkdfVEVTVE1VWF9BRENfQ1RSTAkJMHgxNDQKLSNkZWZpbmUgICBNVEtfUEhZX1JHX1RYRU5fRElHX01BU0sJCUdFTk1BU0soNSwgNSkKLQotI2RlZmluZSBNVEtfUEhZX1JHX0NSX1RYX0FNUF9PRkZTRVRfQV9CCQkweDE3MgotI2RlZmluZSAgIE1US19QSFlfQ1JfVFhfQU1QX09GRlNFVF9BX01BU0sJR0VOTUFTSygxMywgOCkKLSNkZWZpbmUgICBNVEtfUEhZX0NSX1RYX0FNUF9PRkZTRVRfQl9NQVNLCUdFTk1BU0soNiwgMCkKLQotI2RlZmluZSBNVEtfUEhZX1JHX0NSX1RYX0FNUF9PRkZTRVRfQ19ECQkweDE3MwotI2RlZmluZSAgIE1US19QSFlfQ1JfVFhfQU1QX09GRlNFVF9DX01BU0sJR0VOTUFTSygxMywgOCkKLSNkZWZpbmUgICBNVEtfUEhZX0NSX1RYX0FNUF9PRkZTRVRfRF9NQVNLCUdFTk1BU0soNiwgMCkKLQotI2RlZmluZSBNVEtfUEhZX1JHX0FEX0NBTF9DT01QCQkJMHgxN2EKLSNkZWZpbmUgICBNVEtfUEhZX0FEX0NBTF9DT01QX09VVF9NQVNLCQlHRU5NQVNLKDgsIDgpCi0KLSNkZWZpbmUgTVRLX1BIWV9SR19BRF9DQUxfQ0xLCQkJMHgxN2IKLSNkZWZpbmUgICBNVEtfUEhZX0RBX0NBTF9DTEsJCQlCSVQoMCkKLQotI2RlZmluZSBNVEtfUEhZX1JHX0FEX0NBTElOCQkJMHgxN2MKLSNkZWZpbmUgICBNVEtfUEhZX0RBX0NBTElOX0ZMQUcJCQlCSVQoMCkKLQotI2RlZmluZSBNVEtfUEhZX1JHX0RBU05fREFDX0lOMF9BCQkweDE3ZAotI2RlZmluZSAgIE1US19QSFlfREFTTl9EQUNfSU4wX0FfTUFTSwkJR0VOTUFTSyg5LCAwKQotCi0jZGVmaW5lIE1US19QSFlfUkdfREFTTl9EQUNfSU4wX0IJCTB4MTdlCi0jZGVmaW5lICAgTVRLX1BIWV9EQVNOX0RBQ19JTjBfQl9NQVNLCQlHRU5NQVNLKDksIDApCi0KLSNkZWZpbmUgTVRLX1BIWV9SR19EQVNOX0RBQ19JTjBfQwkJMHgxN2YKLSNkZWZpbmUgICBNVEtfUEhZX0RBU05fREFDX0lOMF9DX01BU0sJCUdFTk1BU0soOSwgMCkKLQotI2RlZmluZSBNVEtfUEhZX1JHX0RBU05fREFDX0lOMF9ECQkweDE4MAotI2RlZmluZSAgIE1US19QSFlfREFTTl9EQUNfSU4wX0RfTUFTSwkJR0VOTUFTSyg5LCAwKQotCi0jZGVmaW5lIE1US19QSFlfUkdfREFTTl9EQUNfSU4xX0EJCTB4MTgxCi0jZGVmaW5lICAgTVRLX1BIWV9EQVNOX0RBQ19JTjFfQV9NQVNLCQlHRU5NQVNLKDksIDApCi0KLSNkZWZpbmUgTVRLX1BIWV9SR19EQVNOX0RBQ19JTjFfQgkJMHgxODIKLSNkZWZpbmUgICBNVEtfUEhZX0RBU05fREFDX0lOMV9CX01BU0sJCUdFTk1BU0soOSwgMCkKLQotI2RlZmluZSBNVEtfUEhZX1JHX0RBU05fREFDX0lOMV9DCQkweDE4MwotI2RlZmluZSAgIE1US19QSFlfREFTTl9EQUNfSU4xX0NfTUFTSwkJR0VOTUFTSyg5LCAwKQotCi0jZGVmaW5lIE1US19QSFlfUkdfREFTTl9EQUNfSU4xX0QJCTB4MTg0Ci0jZGVmaW5lICAgTVRLX1BIWV9EQVNOX0RBQ19JTjFfRF9NQVNLCQlHRU5NQVNLKDksIDApCi0KLSNkZWZpbmUgTVRLX1BIWV9SR19ERVYxRV9SRUcxOWIJCQkweDE5YgotI2RlZmluZSAgIE1US19QSFlfQllQQVNTX0RTUF9MUElfUkVBRFkJCUJJVCg4KQotCi0jZGVmaW5lIE1US19QSFlfUkdfTFBfSUlSMl9LMV9MCQkJMHgyMmEKLSNkZWZpbmUgTVRLX1BIWV9SR19MUF9JSVIyX0sxX1UJCQkweDIyYgotI2RlZmluZSBNVEtfUEhZX1JHX0xQX0lJUjJfSzJfTAkJCTB4MjJjCi0jZGVmaW5lIE1US19QSFlfUkdfTFBfSUlSMl9LMl9VCQkJMHgyMmQKLSNkZWZpbmUgTVRLX1BIWV9SR19MUF9JSVIyX0szX0wJCQkweDIyZQotI2RlZmluZSBNVEtfUEhZX1JHX0xQX0lJUjJfSzNfVQkJCTB4MjJmCi0jZGVmaW5lIE1US19QSFlfUkdfTFBfSUlSMl9LNF9MCQkJMHgyMzAKLSNkZWZpbmUgTVRLX1BIWV9SR19MUF9JSVIyX0s0X1UJCQkweDIzMQotI2RlZmluZSBNVEtfUEhZX1JHX0xQX0lJUjJfSzVfTAkJCTB4MjMyCi0jZGVmaW5lIE1US19QSFlfUkdfTFBfSUlSMl9LNV9VCQkJMHgyMzMKLQotI2RlZmluZSBNVEtfUEhZX1JHX0RFVjFFX1JFRzIzNAkJCTB4MjM0Ci0jZGVmaW5lICAgTVRLX1BIWV9UUl9PUEVOX0xPT1BfRU5fTUFTSwkJR0VOTUFTSygwLCAwKQotI2RlZmluZSAgIE1US19QSFlfTFBGX1hfQVZFUkFHRV9NQVNLCQlHRU5NQVNLKDcsIDQpCi0jZGVmaW5lICAgTVRLX1BIWV9UUl9MUF9JSVJfRUVFX0VOCQlCSVQoMTIpCi0KLSNkZWZpbmUgTVRLX1BIWV9SR19MUEZfQ05UX1ZBTAkJCTB4MjM1Ci0KLSNkZWZpbmUgTVRLX1BIWV9SR19ERVYxRV9SRUcyMzgJCQkweDIzOAotI2RlZmluZSAgIE1US19QSFlfTFBJX1NMVl9TRU5EX1RYX1RJTUVSX01BU0sJR0VOTUFTSyg4LCAwKQotI2RlZmluZSAgIE1US19QSFlfTFBJX1NMVl9TRU5EX1RYX0VOCQlCSVQoMTIpCi0KLSNkZWZpbmUgTVRLX1BIWV9SR19ERVYxRV9SRUcyMzkJCQkweDIzOQotI2RlZmluZSAgIE1US19QSFlfTFBJX1NFTkRfTE9DX1RJTUVSX01BU0sJR0VOTUFTSyg4LCAwKQotI2RlZmluZSAgIE1US19QSFlfTFBJX1RYUENTX0xPQ19SQ1YJCUJJVCgxMikKLQotI2RlZmluZSBNVEtfUEhZX1JHX0RFVjFFX1JFRzI3QwkJCTB4MjdjCi0jZGVmaW5lICAgTVRLX1BIWV9WR0FTVEFURV9GRkVfVEhSX1NUMV9NQVNLCUdFTk1BU0soMTIsIDgpCi0jZGVmaW5lIE1US19QSFlfUkdfREVWMUVfUkVHMjdECQkJMHgyN2QKLSNkZWZpbmUgICBNVEtfUEhZX1ZHQVNUQVRFX0ZGRV9USFJfU1QyX01BU0sJR0VOTUFTSyg0LCAwKQotCi0jZGVmaW5lIE1US19QSFlfUkdfREVWMUVfUkVHMkM3CQkJMHgyYzcKLSNkZWZpbmUgICBNVEtfUEhZX01BWF9HQUlOX01BU0sJCQlHRU5NQVNLKDQsIDApCi0jZGVmaW5lICAgTVRLX1BIWV9NSU5fR0FJTl9NQVNLCQkJR0VOTUFTSygxMiwgOCkKLQotI2RlZmluZSBNVEtfUEhZX1JHX0RFVjFFX1JFRzJEMQkJCTB4MmQxCi0jZGVmaW5lICAgTVRLX1BIWV9WQ09fU0xJQ0VSX1RIUkVTSF9CSVRTX0hJR0hfRUVFX01BU0sJR0VOTUFTSyg3LCAwKQotI2RlZmluZSAgIE1US19QSFlfTFBJX1NLSVBfU0RfU0xWX1RSCQlCSVQoOCkKLSNkZWZpbmUgICBNVEtfUEhZX0xQSV9UUl9SRUFEWQkJCUJJVCg5KQotI2RlZmluZSAgIE1US19QSFlfTFBJX1ZDT19FRUVfU1RHMF9FTgkJQklUKDEwKQotCi0jZGVmaW5lIE1US19QSFlfUkdfREVWMUVfUkVHMzIzCQkJMHgzMjMKLSNkZWZpbmUgICBNVEtfUEhZX0VFRV9XQUtFX01BU19JTlRfREMJCUJJVCgwKQotI2RlZmluZSAgIE1US19QSFlfRUVFX1dBS0VfU0xWX0lOVF9EQwkJQklUKDQpCi0KLSNkZWZpbmUgTVRLX1BIWV9SR19ERVYxRV9SRUczMjQJCQkweDMyNAotI2RlZmluZSAgIE1US19QSFlfU01JX0RFVENOVF9NQVhfTUFTSwkJR0VOTUFTSyg1LCAwKQotI2RlZmluZSAgIE1US19QSFlfU01JX0RFVF9NQVhfRU4JCUJJVCg4KQotCi0jZGVmaW5lIE1US19QSFlfUkdfREVWMUVfUkVHMzI2CQkJMHgzMjYKLSNkZWZpbmUgICBNVEtfUEhZX0xQSV9NT0RFX1NEX09OCQlCSVQoMCkKLSNkZWZpbmUgICBNVEtfUEhZX1JFU0VUX1JBTkRVUERfQ05UCQlCSVQoMSkKLSNkZWZpbmUgICBNVEtfUEhZX1RSRUNfVVBEQVRFX0VOQUJfQ0xSCQlCSVQoMikKLSNkZWZpbmUgICBNVEtfUEhZX0xQSV9RVUlUX1dBSVRfREZFX1NJR19ERVRfT0ZGCUJJVCg0KQotI2RlZmluZSAgIE1US19QSFlfVFJfUkVBRFlfU0tJUF9BRkVfV0FLRVVQCUJJVCg1KQotCi0jZGVmaW5lIE1US19QSFlfTERPX1BVTVBfRU5fUEFJUkFCCQkweDUwMgotI2RlZmluZSBNVEtfUEhZX0xET19QVU1QX0VOX1BBSVJDRAkJMHg1MDMKLQotI2RlZmluZSBNVEtfUEhZX0RBX1RYX1I1MF9QQUlSX0EJCTB4NTNkCi0jZGVmaW5lIE1US19QSFlfREFfVFhfUjUwX1BBSVJfQgkJMHg1M2UKLSNkZWZpbmUgTVRLX1BIWV9EQV9UWF9SNTBfUEFJUl9DCQkweDUzZgotI2RlZmluZSBNVEtfUEhZX0RBX1RYX1I1MF9QQUlSX0QJCTB4NTQwCi0KLS8qIFJlZ2lzdGVycyBvbiBNRElPX01NRF9WRU5EMiAqLwotI2RlZmluZSBNVEtfUEhZX0xFRDFfREVGQVVMVF9QT0xBUklUSUVTCQlCSVQoMSkKLQotI2RlZmluZSBNVEtfUEhZX1JHX0JHX1JBU0VMCQkJMHgxMTUKLSNkZWZpbmUgICBNVEtfUEhZX1JHX0JHX1JBU0VMX01BU0sJCUdFTk1BU0soMiwgMCkKLQotLyogJiMzOTtib290dHJhcCYjMzk7IHJlZ2lzdGVyIHJlZmxlY3RpbmcgdGhlIGNvbmZpZ3VyYXRpb24gb2YgdGhlIDQgUEhZIExFRHMgKi8KLSNkZWZpbmUgUkdfR1BJT19NSVNDX1RQQkFOSzAJCQkweDZmMAotI2RlZmluZSAgIFJHX0dQSU9fTUlTQ19UUEJBTkswX0JPT1RNT0RFCQlHRU5NQVNLKDExLCA4KQotCiAvKiBUaGVzZSBtYWNybyBwcml2aWRlcyBlZnVzZSBwYXJzaW5nIGZvciBpbnRlcm5hbCBwaHkuICovCiAjZGVmaW5lIEVGU19EQV9UWF9JMk1QQl9BKHgpCQkJKCgoeCkgJmd0OyZndDsgMCkgJmFtcDsgR0VOTUFTSyg1LCAwKSkKICNkZWZpbmUgRUZTX0RBX1RYX0kyTVBCX0IoeCkJCQkoKCh4KSAmZ3Q7Jmd0OyA2KSAmYW1wOyBHRU5NQVNLKDUsIDApKQpAQCAtMzQ2LDUxICYjNDM7MzQsMTYgQEAKICNkZWZpbmUgRUZTX1JHX0JHX1JBU0VMKHgpCQkJKCgoeCkgJmd0OyZndDsgNCkgJmFtcDsgR0VOTUFTSygyLCAwKSkKICNkZWZpbmUgRUZTX1JHX1JFWFRfVFJJTSh4KQkJCSgoKHgpICZndDsmZ3Q7IDcpICZhbXA7IEdFTk1BU0soNSwgMCkpCiAKLWVudW0gewotCU5PX1BBSVIsCi0JUEFJUl9BLAotCVBBSVJfQiwKLQlQQUlSX0MsCi0JUEFJUl9ELAotfTsKLQotZW51bSBjYWxpYnJhdGlvbl9tb2RlIHsKLQlFRlVTRV9LLAotCVNXX0sKLX07Ci0KLWVudW0gQ0FMX0lURU0gewotCVJFWFQsCi0JVFhfT0ZGU0VULAotCVRYX0FNUCwKLQlUWF9SNTAsCi0JVFhfVkNNCi19OwotCi1lbnVtIENBTF9NT0RFIHsKLQlFRlVTRV9NLAotCVNXX00KLX07Ci0KIHN0cnVjdCBtdGtfc29jcGh5X3NoYXJlZCB7CiAJdTMyCQkJYm9vdHRyYXA7CiAJc3RydWN0IG10a19zb2NwaHlfcHJpdglwcml2WzRdOwogfTsKIAotLyogT25lIGNhbGlicmF0aW9uIGN5Y2xlIGNvbnNpc3RzIG9mOgotICogMS5TZXQgREFfQ0FMSU5fRkxBRyBoaWdoIHRvIHN0YXJ0IGNhbGlicmF0aW9uLiBLZWVwIGl0IGhpZ2gKLSAqICAgdW50aWwgQURfQ0FMX0NPTVAgaXMgcmVhZHkgdG8gb3V0cHV0IGNhbGlicmF0aW9uIHJlc3VsdC4KLSAqIDIuV2FpdCB1bnRpbCBEQV9DQUxfQ0xLIGlzIGF2YWlsYWJsZS4KLSAqIDMuRmV0Y2ggQURfQ0FMX0NPTVBfT1VULgotICovCi1zdGF0aWMgaW50IGNhbF9jeWNsZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCBpbnQgZGV2YWQsCi0JCSAgICAgdTMyIHJlZ251bSwgdTE2IG1hc2ssIHUxNiBjYWxfdmFsKQomIzQzO2ludCBtdGtfY2FsX2N5Y2xlX3dhaXQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldikKIHsKIAlpbnQgcmVnX3ZhbDsKIAlpbnQgcmV0OwogCi0JcGh5X21vZGlmeV9tbWQocGh5ZGV2LCBkZXZhZCwgcmVnbnVtLAotCQkgICAgICAgbWFzaywgY2FsX3ZhbCk7CiAJcGh5X3NldF9iaXRzX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCBNVEtfUEhZX1JHX0FEX0NBTElOLAogCQkJIE1US19QSFlfREFfQ0FMSU5fRkxBRyk7CiAKQEAgLTQwOSw3ICYjNDM7NjIsMjUgQEAgc3RhdGljIGludCBjYWxfY3ljbGUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgaW50IGRldmFkLAogCXJldCA9IHBoeV9yZWFkX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCBNVEtfUEhZX1JHX0FEX0NBTF9DT01QKTsKIAlpZiAocmV0ICZsdDsgMCkKIAkJcmV0dXJuIHJldDsKLQlyZXQgPSBGSUVMRF9HRVQoTVRLX1BIWV9BRF9DQUxfQ09NUF9PVVRfTUFTSywgcmV0KTsKJiM0MzsKJiM0MzsJcmV0dXJuIEZJRUxEX0dFVChNVEtfUEhZX0FEX0NBTF9DT01QX09VVF9NQVNLLCByZXQpOwomIzQzO30KJiM0MzsKJiM0MzsvKiBPbmUgY2FsaWJyYXRpb24gY3ljbGUgY29uc2lzdHMgb2Y6CiYjNDM7ICogMS5TZXQgREFfQ0FMSU5fRkxBRyBoaWdoIHRvIHN0YXJ0IGNhbGlicmF0aW9uLiBLZWVwIGl0IGhpZ2gKJiM0MzsgKiAgIHVudGlsIEFEX0NBTF9DT01QIGlzIHJlYWR5IHRvIG91dHB1dCBjYWxpYnJhdGlvbiByZXN1bHQuCiYjNDM7ICogMi5XYWl0IHVudGlsIERBX0NBTF9DTEsgaXMgYXZhaWxhYmxlLgomIzQzOyAqIDMuRmV0Y2ggQURfQ0FMX0NPTVBfT1VULgomIzQzOyAqLwomIzQzO3N0YXRpYyBpbnQgY2FsX2N5Y2xlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIGludCBkZXZhZCwKJiM0MzsJCSAgICAgdTMyIHJlZ251bSwgdTE2IG1hc2ssIHUxNiBjYWxfdmFsKQomIzQzO3sKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJcGh5X21vZGlmeV9tbWQocGh5ZGV2LCBkZXZhZCwgcmVnbnVtLAomIzQzOwkJICAgICAgIG1hc2ssIGNhbF92YWwpOwomIzQzOwomIzQzOwlyZXQgPSBtdGtfY2FsX2N5Y2xlX3dhaXQocGh5ZGV2KTsKIAlwaHlkZXZfZGJnKHBoeWRldiwgJiMzNDtjYWxfdmFsOiAweCV4LCByZXQ6ICVkXG4mIzM0OywgY2FsX3ZhbCwgcmV0KTsKIAogCXJldHVybiByZXQ7CkBAIC0xMjE1LDczICYjNDM7ODg2LDYgQEAgc3RhdGljIGludCBtdDc5OHhfcGh5X2NvbmZpZ19pbml0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpCiAJcmV0dXJuIG10Nzk4eF9waHlfY2FsaWJyYXRpb24ocGh5ZGV2KTsKIH0KIAotc3RhdGljIGludCBtdDc5OHhfcGh5X2xlZF9ibGlua19zZXQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgdTggaW5kZXgsCi0JCQkJICAgIHVuc2lnbmVkIGxvbmcgKmRlbGF5X29uLAotCQkJCSAgICB1bnNpZ25lZCBsb25nICpkZWxheV9vZmYpCi17Ci0JYm9vbCBibGlua2luZyA9IGZhbHNlOwotCWludCBlcnI7Ci0KLQllcnIgPSBtdGtfcGh5X2xlZF9udW1fZGx5X2NmZyhpbmRleCwgZGVsYXlfb24sIGRlbGF5X29mZiwgJmFtcDtibGlua2luZyk7Ci0JaWYgKGVyciAmbHQ7IDApCi0JCXJldHVybiBlcnI7Ci0KLQllcnIgPSBtdGtfcGh5X2h3X2xlZF9ibGlua19zZXQocGh5ZGV2LCBpbmRleCwgYmxpbmtpbmcpOwotCWlmIChlcnIpCi0JCXJldHVybiBlcnI7Ci0KLQlyZXR1cm4gbXRrX3BoeV9od19sZWRfb25fc2V0KHBoeWRldiwgaW5kZXgsIE1US19HUEhZX0xFRF9PTl9NQVNLLAotCQkJCSAgICAgZmFsc2UpOwotfQotCi1zdGF0aWMgaW50IG10Nzk4eF9waHlfbGVkX2JyaWdodG5lc3Nfc2V0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsCi0JCQkJCSB1OCBpbmRleCwgZW51bSBsZWRfYnJpZ2h0bmVzcyB2YWx1ZSkKLXsKLQlpbnQgZXJyOwotCi0JZXJyID0gbXRrX3BoeV9od19sZWRfYmxpbmtfc2V0KHBoeWRldiwgaW5kZXgsIGZhbHNlKTsKLQlpZiAoZXJyKQotCQlyZXR1cm4gZXJyOwotCi0JcmV0dXJuIG10a19waHlfaHdfbGVkX29uX3NldChwaHlkZXYsIGluZGV4LCBNVEtfR1BIWV9MRURfT05fTUFTSywKLQkJCQkgICAgICh2YWx1ZSAhPSBMRURfT0ZGKSk7Ci19Ci0KLXN0YXRpYyBjb25zdCB1bnNpZ25lZCBsb25nIHN1cHBvcnRlZF90cmlnZ2VycyA9Ci0JQklUKFRSSUdHRVJfTkVUREVWX0ZVTExfRFVQTEVYKSB8Ci0JQklUKFRSSUdHRVJfTkVUREVWX0hBTEZfRFVQTEVYKSB8Ci0JQklUKFRSSUdHRVJfTkVUREVWX0xJTkspICAgICAgICB8Ci0JQklUKFRSSUdHRVJfTkVUREVWX0xJTktfMTApICAgICB8Ci0JQklUKFRSSUdHRVJfTkVUREVWX0xJTktfMTAwKSAgICB8Ci0JQklUKFRSSUdHRVJfTkVUREVWX0xJTktfMTAwMCkgICB8Ci0JQklUKFRSSUdHRVJfTkVUREVWX1JYKSAgICAgICAgICB8Ci0JQklUKFRSSUdHRVJfTkVUREVWX1RYKTsKLQotc3RhdGljIGludCBtdDc5OHhfcGh5X2xlZF9od19pc19zdXBwb3J0ZWQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgdTggaW5kZXgsCi0JCQkJCSAgdW5zaWduZWQgbG9uZyBydWxlcykKLXsKLQlyZXR1cm4gbXRrX3BoeV9sZWRfaHdfaXNfc3VwcG9ydGVkKHBoeWRldiwgaW5kZXgsIHJ1bGVzLAotCQkJCQkgICBzdXBwb3J0ZWRfdHJpZ2dlcnMpOwotfQotCi1zdGF0aWMgaW50IG10Nzk4eF9waHlfbGVkX2h3X2NvbnRyb2xfZ2V0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIHU4IGluZGV4LAotCQkJCQkgdW5zaWduZWQgbG9uZyAqcnVsZXMpCi17Ci0JcmV0dXJuIG10a19waHlfbGVkX2h3X2N0cmxfZ2V0KHBoeWRldiwgaW5kZXgsIHJ1bGVzLAotCQkJCSAgICAgICBNVEtfR1BIWV9MRURfT05fU0VULAotCQkJCSAgICAgICBNVEtfR1BIWV9MRURfUlhfQkxJTktfU0VULAotCQkJCSAgICAgICBNVEtfR1BIWV9MRURfVFhfQkxJTktfU0VUKTsKLX07Ci0KLXN0YXRpYyBpbnQgbXQ3OTh4X3BoeV9sZWRfaHdfY29udHJvbF9zZXQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgdTggaW5kZXgsCi0JCQkJCSB1bnNpZ25lZCBsb25nIHJ1bGVzKQotewotCXJldHVybiBtdGtfcGh5X2xlZF9od19jdHJsX3NldChwaHlkZXYsIGluZGV4LCBydWxlcywKLQkJCQkgICAgICAgTVRLX0dQSFlfTEVEX09OX1NFVCwKLQkJCQkgICAgICAgTVRLX0dQSFlfTEVEX1JYX0JMSU5LX1NFVCwKLQkJCQkgICAgICAgTVRLX0dQSFlfTEVEX1RYX0JMSU5LX1NFVCk7Ci19OwotCiBzdGF0aWMgYm9vbCBtdDc5ODhfcGh5X2xlZF9nZXRfcG9sYXJpdHkoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgaW50IGxlZF9udW0pCiB7CiAJc3RydWN0IG10a19zb2NwaHlfc2hhcmVkICpwcml2ID0gcGh5X3BhY2thZ2VfZ2V0X3ByaXYocGh5ZGV2KTsKQEAgLTE0MTgsNTggJiM0MzsxMDIyLDYgQEAgc3RhdGljIGludCBtdDc5ODFfcGh5X3Byb2JlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpCiAJcmV0dXJuIG10Nzk4eF9waHlfY2FsaWJyYXRpb24ocGh5ZGV2KTsKIH0KIAotc3RhdGljIGludCBhbjc1ODFfcGh5X3Byb2JlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpCi17Ci0Jc3RydWN0IG10a19zb2NwaHlfcHJpdiAqcHJpdjsKLQlzdHJ1Y3QgcGluY3RybCAqcGluY3RybDsKLQotCS8qIFRvZ2dsZSBwaW5jdHJsIHRvIGVuYWJsZSBQSFkgTEVEICovCi0JcGluY3RybCA9IGRldm1fcGluY3RybF9nZXRfc2VsZWN0KCZhbXA7cGh5ZGV2LSZndDttZGlvLmRldiwgJiMzNDtnYmUtbGVkJiMzNDspOwotCWlmIChJU19FUlIocGluY3RybCkpCi0JCWRldl9lcnIoJmFtcDtwaHlkZXYtJmd0O21kaW8uYnVzLSZndDtkZXYsCi0JCQkmIzM0O0ZhaWxlZCB0byBzZXR1cCBQSFkgTEVEIHBpbmN0cmxcbiYjMzQ7KTsKLQotCXByaXYgPSBkZXZtX2t6YWxsb2MoJmFtcDtwaHlkZXYtJmd0O21kaW8uZGV2LCBzaXplb2YoKnByaXYpLCBHRlBfS0VSTkVMKTsKLQlpZiAoIXByaXYpCi0JCXJldHVybiAtRU5PTUVNOwotCi0JcGh5ZGV2LSZndDtwcml2ID0gcHJpdjsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IGFuNzU4MV9waHlfbGVkX3BvbGFyaXR5X3NldChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCBpbnQgaW5kZXgsCi0JCQkJICAgICAgIHVuc2lnbmVkIGxvbmcgbW9kZXMpCi17Ci0JdTE2IHZhbCA9IDA7Ci0JdTMyIG1vZGU7Ci0KLQlpZiAoaW5kZXggJmd0Oz0gTVRLX1BIWV9NQVhfTEVEUykKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlmb3JfZWFjaF9zZXRfYml0KG1vZGUsICZhbXA7bW9kZXMsIF9fUEhZX0xFRF9NT0RFU19OVU0pIHsKLQkJc3dpdGNoIChtb2RlKSB7Ci0JCWNhc2UgUEhZX0xFRF9BQ1RJVkVfTE9XOgotCQkJdmFsID0gTVRLX1BIWV9MRURfT05fUE9MQVJJVFk7Ci0JCQlicmVhazsKLQkJY2FzZSBQSFlfTEVEX0FDVElWRV9ISUdIOgotCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJfQotCX0KLQotCXJldHVybiBwaHlfbW9kaWZ5X21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQyLCBpbmRleCA/Ci0JCQkgICAgICBNVEtfUEhZX0xFRDFfT05fQ1RSTCA6IE1US19QSFlfTEVEMF9PTl9DVFJMLAotCQkJICAgICAgTVRLX1BIWV9MRURfT05fUE9MQVJJVFksIHZhbCk7Ci19Ci0KLXN0YXRpYyBpbnQgYW43NTgzX3BoeV9jb25maWdfaW5pdChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KQotewotCS8qIEJNQ1JfUERPV04gaXMgZW5hYmxlZCBieSBkZWZhdWx0ICovCi0JcmV0dXJuIHBoeV9jbGVhcl9iaXRzKHBoeWRldiwgTUlJX0JNQ1IsIEJNQ1JfUERPV04pOwotfQotCiBzdGF0aWMgc3RydWN0IHBoeV9kcml2ZXIgbXRrX3NvY3BoeV9kcml2ZXJbXSA9IHsKIAl7CiAJCVBIWV9JRF9NQVRDSF9FWEFDVChNVEtfR1BIWV9JRF9NVDc5ODEpLApAQCAtMTUwNSwzMSAmIzQzOzEwNTcsNiBAQCBzdGF0aWMgc3RydWN0IHBoeV9kcml2ZXIgbXRrX3NvY3BoeV9kcml2ZXJbXSA9IHsKIAkJLmxlZF9od19jb250cm9sX3NldCA9IG10Nzk4eF9waHlfbGVkX2h3X2NvbnRyb2xfc2V0LAogCQkubGVkX2h3X2NvbnRyb2xfZ2V0ID0gbXQ3OTh4X3BoeV9sZWRfaHdfY29udHJvbF9nZXQsCiAJfSwKLQl7Ci0JCVBIWV9JRF9NQVRDSF9FWEFDVChNVEtfR1BIWV9JRF9BTjc1ODEpLAotCQkubmFtZQkJPSAmIzM0O0Fpcm9oYSBBTjc1ODEgUEhZJiMzNDssCi0JCS5jb25maWdfaW50cgk9IGdlbnBoeV9ub19jb25maWdfaW50ciwKLQkJLmhhbmRsZV9pbnRlcnJ1cHQgPSBnZW5waHlfaGFuZGxlX2ludGVycnVwdF9ub19hY2ssCi0JCS5wcm9iZQkJPSBhbjc1ODFfcGh5X3Byb2JlLAotCQkubGVkX2JsaW5rX3NldAk9IG10Nzk4eF9waHlfbGVkX2JsaW5rX3NldCwKLQkJLmxlZF9icmlnaHRuZXNzX3NldCA9IG10Nzk4eF9waHlfbGVkX2JyaWdodG5lc3Nfc2V0LAotCQkubGVkX2h3X2lzX3N1cHBvcnRlZCA9IG10Nzk4eF9waHlfbGVkX2h3X2lzX3N1cHBvcnRlZCwKLQkJLmxlZF9od19jb250cm9sX3NldCA9IG10Nzk4eF9waHlfbGVkX2h3X2NvbnRyb2xfc2V0LAotCQkubGVkX2h3X2NvbnRyb2xfZ2V0ID0gbXQ3OTh4X3BoeV9sZWRfaHdfY29udHJvbF9nZXQsCi0JCS5sZWRfcG9sYXJpdHlfc2V0ID0gYW43NTgxX3BoeV9sZWRfcG9sYXJpdHlfc2V0LAotCX0sCi0JewotCQlQSFlfSURfTUFUQ0hfRVhBQ1QoTVRLX0dQSFlfSURfQU43NTgzKSwKLQkJLm5hbWUJCT0gJiMzNDtBaXJvaGEgQU43NTgzIFBIWSYjMzQ7LAotCQkuY29uZmlnX2luaXQJPSBhbjc1ODNfcGh5X2NvbmZpZ19pbml0LAotCQkucHJvYmUJCT0gYW43NTgxX3BoeV9wcm9iZSwKLQkJLmxlZF9ibGlua19zZXQJPSBtdDc5OHhfcGh5X2xlZF9ibGlua19zZXQsCi0JCS5sZWRfYnJpZ2h0bmVzc19zZXQgPSBtdDc5OHhfcGh5X2xlZF9icmlnaHRuZXNzX3NldCwKLQkJLmxlZF9od19pc19zdXBwb3J0ZWQgPSBtdDc5OHhfcGh5X2xlZF9od19pc19zdXBwb3J0ZWQsCi0JCS5sZWRfaHdfY29udHJvbF9zZXQgPSBtdDc5OHhfcGh5X2xlZF9od19jb250cm9sX3NldCwKLQkJLmxlZF9od19jb250cm9sX2dldCA9IG10Nzk4eF9waHlfbGVkX2h3X2NvbnRyb2xfZ2V0LAotCQkubGVkX3BvbGFyaXR5X3NldCA9IGFuNzU4MV9waHlfbGVkX3BvbGFyaXR5X3NldCwKLQl9LAogfTsKIAogbW9kdWxlX3BoeV9kcml2ZXIobXRrX3NvY3BoeV9kcml2ZXIpOwpAQCAtMTUzNyw4ICYjNDM7MTA2NCw2IEBAIG1vZHVsZV9waHlfZHJpdmVyKG10a19zb2NwaHlfZHJpdmVyKTsKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbWRpb19kZXZpY2VfaWQgX19tYXliZV91bnVzZWQgbXRrX3NvY3BoeV90YmxbXSA9IHsKIAl7IFBIWV9JRF9NQVRDSF9FWEFDVChNVEtfR1BIWV9JRF9NVDc5ODEpIH0sCiAJeyBQSFlfSURfTUFUQ0hfRVhBQ1QoTVRLX0dQSFlfSURfTVQ3OTg4KSB9LAotCXsgUEhZX0lEX01BVENIX0VYQUNUKE1US19HUEhZX0lEX0FONzU4MSkgfSwKLQl7IFBIWV9JRF9NQVRDSF9FWEFDVChNVEtfR1BIWV9JRF9BTjc1ODMpIH0sCiAJeyB9CiB9OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9waHkvbWVkaWF0ZWsvbXRrLWdlLXNvYy5oIGIvZHJpdmVycy9uZXQvcGh5L21lZGlhdGVrL210ay1nZS1zb2MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMC4uNWU5ZDI0YTk4MzNjNzcKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9waHkvbWVkaWF0ZWsvbXRrLWdlLXNvYy5oCkBAIC0wLDAgJiM0MzsxLDM2NCBAQAomIzQzOy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wICovCiYjNDM7CiYjNDM7I2lmbmRlZiBfTVRLX0dFX1NPQ19IXwomIzQzOyNkZWZpbmUgX01US19HRV9TT0NfSF8KJiM0MzsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvYml0ZmllbGQuaCZndDsKJiM0MzsKJiM0MzsjZGVmaW5lIE1US19HUEhZX0lEX01UNzk4MQkJCTB4MDNhMjk0NjEKJiM0MzsjZGVmaW5lIE1US19HUEhZX0lEX01UNzk4OAkJCTB4MDNhMjk0ODEKJiM0MzsjZGVmaW5lIEFJUk9IQV9HUEhZX0lEX0FONzU4MQkJCTB4MDNhMjk0YzEKJiM0MzsjZGVmaW5lIEFJUk9IQV9HUEhZX0lEX0FONzU4MwkJCTB4YzBmZjA0MjAKJiM0MzsKJiM0MzsjZGVmaW5lIE1US19FWFRfUEFHRV9BQ0NFU1MJCQkweDFmCiYjNDM7I2RlZmluZSBNVEtfUEhZX1BBR0VfU1RBTkRBUkQJCQkweDAwMDAKJiM0MzsjZGVmaW5lIE1US19QSFlfUEFHRV9FWFRFTkRFRF8xCQkJMHgwMDAxCiYjNDM7I2RlZmluZSBNVEtfUEhZX1BBR0VfRVhURU5ERURfMwkJCTB4MDAwMwomIzQzOwomIzQzOyNkZWZpbmUgTVRLX1BIWV9MUElfUkVHXzE0CQkJMHgxNAomIzQzOyNkZWZpbmUgTVRLX1BIWV9MUElfV0FLRV9USU1FUl8xMDAwX01BU0sJR0VOTUFTSyg4LCAwKQomIzQzOwomIzQzOyNkZWZpbmUgTVRLX1BIWV9MUElfUkVHXzFjCQkJMHgxYwomIzQzOyNkZWZpbmUgTVRLX1BIWV9TTUlfREVUX09OX1RIUkVTSF9NQVNLCQlHRU5NQVNLKDEzLCA4KQomIzQzOwomIzQzOyNkZWZpbmUgTVRLX1BIWV9QQUdFX0VYVEVOREVEXzJBMzAJCTB4MmEzMAomIzQzOwomIzQzOy8qIFJlZ2lzdGVycyBvbiBUb2tlbiBSaW5nIGRlYnVnIG5vZGVzICovCiYjNDM7LyogY2hfYWRkciA9IDB4MCwgbm9kZV9hZGRyID0gMHg3LCBkYXRhX2FkZHIgPSAweDE1ICovCiYjNDM7LyogTm9ybU1zZUxvVGhyZXNoICovCiYjNDM7I2RlZmluZSBOT1JNQUxfTVNFX0xPX1RIUkVTSF9NQVNLCQlHRU5NQVNLKDE1LCA4KQomIzQzOwomIzQzOy8qIGNoX2FkZHIgPSAweDAsIG5vZGVfYWRkciA9IDB4ZiwgZGF0YV9hZGRyID0gMHgzYyAqLwomIzQzOy8qIFJlbUFja0NudExpbWl0Q3RybCAqLwomIzQzOyNkZWZpbmUgUkVNT1RFX0FDS19DT1VOVF9MSU1JVF9DVFJMX01BU0sJR0VOTUFTSygyLCAxKQomIzQzOwomIzQzOy8qIGNoX2FkZHIgPSAweDEsIG5vZGVfYWRkciA9IDB4ZCwgZGF0YV9hZGRyID0gMHgyMCAqLwomIzQzOy8qIFZjb1NsaWNlclRocmVzaEJpdHNIaWdoICovCiYjNDM7I2RlZmluZSBWQ09fU0xJQ0VSX1RIUkVTSF9ISUdIX01BU0sJCUdFTk1BU0soMjMsIDApCiYjNDM7CiYjNDM7LyogY2hfYWRkciA9IDB4MSwgbm9kZV9hZGRyID0gMHhmLCBkYXRhX2FkZHIgPSAweDAgKi8KJiM0MzsvKiBEZmVUYWlsRW5hYmxlVmdhVGhyZXNoMTAwMCAqLwomIzQzOyNkZWZpbmUgREZFX1RBSUxfRUFOQkxFX1ZHQV9UUkhFU0hfMTAwMAkJR0VOTUFTSyg1LCAxKQomIzQzOwomIzQzOy8qIGNoX2FkZHIgPSAweDEsIG5vZGVfYWRkciA9IDB4ZiwgZGF0YV9hZGRyID0gMHgxICovCiYjNDM7LyogTXJ2bFRyRml4MTAwS3AgKi8KJiM0MzsjZGVmaW5lIE1SVkxfVFJfRklYXzEwMEtQX01BU0sJCQlHRU5NQVNLKDIyLCAyMCkKJiM0MzsvKiBNcnZsVHJGaXgxMDBLZiAqLwomIzQzOyNkZWZpbmUgTVJWTF9UUl9GSVhfMTAwS0ZfTUFTSwkJCUdFTk1BU0soMTksIDE3KQomIzQzOy8qIE1ydmxUckZpeDEwMDBLcCAqLwomIzQzOyNkZWZpbmUgTVJWTF9UUl9GSVhfMTAwMEtQX01BU0sJCQlHRU5NQVNLKDE2LCAxNCkKJiM0MzsvKiBNcnZsVHJGaXgxMDAwS2YgKi8KJiM0MzsjZGVmaW5lIE1SVkxfVFJfRklYXzEwMDBLRl9NQVNLCQkJR0VOTUFTSygxMywgMTEpCiYjNDM7CiYjNDM7LyogY2hfYWRkciA9IDB4MSwgbm9kZV9hZGRyID0gMHhmLCBkYXRhX2FkZHIgPSAweDEyICovCiYjNDM7LyogVmdhRGVjUmF0ZSAqLwomIzQzOyNkZWZpbmUgVkdBX0RFQ0lNQVRJT05fUkFURV9NQVNLCQlHRU5NQVNLKDgsIDUpCiYjNDM7CiYjNDM7LyogY2hfYWRkciA9IDB4MSwgbm9kZV9hZGRyID0gMHhmLCBkYXRhX2FkZHIgPSAweDE3ICovCiYjNDM7LyogU2x2RFNQcmVhZHlUaW1lICovCiYjNDM7I2RlZmluZSBTTEFWRV9EU1BfUkVBRFlfVElNRV9NQVNLCQlHRU5NQVNLKDIyLCAxNSkKJiM0MzsvKiBNYXNEU1ByZWFkeVRpbWUgKi8KJiM0MzsjZGVmaW5lIE1BU1RFUl9EU1BfUkVBRFlfVElNRV9NQVNLCQlHRU5NQVNLKDE0LCA3KQomIzQzOwomIzQzOy8qIGNoX2FkZHIgPSAweDEsIG5vZGVfYWRkciA9IDB4ZiwgZGF0YV9hZGRyID0gMHgxOCAqLwomIzQzOy8qIEVuYWJSYW5kVXBkVHJpZyAqLwomIzQzOyNkZWZpbmUgRU5BQkxFX1JBTkRPTV9VUERPV05fQ09VTlRFUl9UUklHR0VSCUJJVCg4KQomIzQzOwomIzQzOy8qIGNoX2FkZHIgPSAweDEsIG5vZGVfYWRkciA9IDB4ZiwgZGF0YV9hZGRyID0gMHgyMCAqLwomIzQzOy8qIFJlc2V0U3luY09mZnNldCAqLwomIzQzOyNkZWZpbmUgUkVTRVRfU1lOQ19PRkZTRVRfTUFTSwkJCUdFTk1BU0soMTEsIDgpCiYjNDM7CiYjNDM7LyogY2hfYWRkciA9IDB4Miwgbm9kZV9hZGRyID0gMHhkLCBkYXRhX2FkZHIgPSAweDAgKi8KJiM0MzsvKiBGZmVVcGRHYWluRm9yY2VWYWwgKi8KJiM0MzsjZGVmaW5lIEZGRV9VUERBVEVfR0FJTl9GT1JDRV9WQUxfTUFTSwkJR0VOTUFTSyg5LCA3KQomIzQzOy8qIEZmZVVwZEdhaW5Gb3JjZSAqLwomIzQzOyNkZWZpbmUgRkZFX1VQREFURV9HQUlOX0ZPUkNFCQkJQklUKDYpCiYjNDM7CiYjNDM7LyogY2hfYWRkciA9IDB4Miwgbm9kZV9hZGRyID0gMHhkLCBkYXRhX2FkZHIgPSAweDMgKi8KJiM0MzsvKiBUckZyZWV6ZSAqLwomIzQzOyNkZWZpbmUgVFJfRlJFRVpFX01BU0sJCQkJR0VOTUFTSygxMSwgMCkKJiM0MzsKJiM0MzsvKiBjaF9hZGRyID0gMHgyLCBub2RlX2FkZHIgPSAweGQsIGRhdGFfYWRkciA9IDB4NiAqLwomIzQzOy8qIFNTOiBTdGVhZHktc3RhdGUsIEtQOiBQcm9wb3J0aW9uYWwgR2FpbiAqLwomIzQzOy8qIFNTVHJLcDEwMCAqLwomIzQzOyNkZWZpbmUgU1NfVFJfS1AxMDBfTUFTSwkJCUdFTk1BU0soMjEsIDE5KQomIzQzOy8qIFNTVHJLZjEwMCAqLwomIzQzOyNkZWZpbmUgU1NfVFJfS0YxMDBfTUFTSwkJCUdFTk1BU0soMTgsIDE2KQomIzQzOy8qIFNTVHJLcDEwMDBNYXMgKi8KJiM0MzsjZGVmaW5lIFNTX1RSX0tQMTAwMF9NQVNURVJfTUFTSwkJR0VOTUFTSygxNSwgMTMpCiYjNDM7LyogU1NUcktmMTAwME1hcyAqLwomIzQzOyNkZWZpbmUgU1NfVFJfS0YxMDAwX01BU1RFUl9NQVNLCQlHRU5NQVNLKDEyLCAxMCkKJiM0MzsvKiBTU1RyS3AxMDAwU2x2ICovCiYjNDM7I2RlZmluZSBTU19UUl9LUDEwMDBfU0xBVkVfTUFTSwkJCUdFTk1BU0soOSwgNykKJiM0MzsvKiBTU1RyS2YxMDAwU2x2ICovCiYjNDM7I2RlZmluZSBTU19UUl9LRjEwMDBfU0xBVkVfTUFTSwkJCUdFTk1BU0soNiwgNCkKJiM0MzsKJiM0MzsvKiBjaF9hZGRyID0gMHgyLCBub2RlX2FkZHIgPSAweGQsIGRhdGFfYWRkciA9IDB4OCAqLwomIzQzOy8qIGNsZWFyIHRoaXMgYml0IGlmIHdhbm5hIHNlbGVjdCBmcm9tIEFGRSAqLwomIzQzOy8qIFJlZ3NpZ2RldF9zZWxfMTAwMCAqLwomIzQzOyNkZWZpbmUgRUVFMTAwMF9TRUxFQ1RfU0lHTkFMX0RFVEVDVElPTl9GUk9NX0RGRQlCSVQoNCkKJiM0MzsKJiM0MzsvKiBjaF9hZGRyID0gMHgyLCBub2RlX2FkZHIgPSAweGQsIGRhdGFfYWRkciA9IDB4ZCAqLwomIzQzOy8qIFJlZ0VFRV9zdDJUcktmMTAwMCAqLwomIzQzOyNkZWZpbmUgRUVFMTAwMF9TVEFHRTJfVFJfS0ZfTUFTSwkJR0VOTUFTSygxMywgMTEpCiYjNDM7CiYjNDM7LyogY2hfYWRkciA9IDB4Miwgbm9kZV9hZGRyID0gMHhkLCBkYXRhX2FkZHIgPSAweGYgKi8KJiM0MzsvKiBSZWdFRUVfc2x2X3dha2V0cl90aW1lcl90YXIgKi8KJiM0MzsjZGVmaW5lIFNMQVZFX1dBS0VUUl9USU1FUl9NQVNLCQkJR0VOTUFTSygyMCwgMTEpCiYjNDM7LyogUmVnRUVFX3Nsdl9yZW10eF90aW1lcl90YXIgKi8KJiM0MzsjZGVmaW5lIFNMQVZFX1JFTVRYX1RJTUVSX01BU0sJCQlHRU5NQVNLKDEwLCAxKQomIzQzOwomIzQzOy8qIGNoX2FkZHIgPSAweDIsIG5vZGVfYWRkciA9IDB4ZCwgZGF0YV9hZGRyID0gMHgxMCAqLwomIzQzOy8qIFJlZ0VFRV9zbHZfd2FrZV9pbnRfdGltZXJfdGFyICovCiYjNDM7I2RlZmluZSBTTEFWRV9XQUtFSU5UX1RJTUVSX01BU0sJCUdFTk1BU0soMTAsIDEpCiYjNDM7CiYjNDM7LyogY2hfYWRkciA9IDB4Miwgbm9kZV9hZGRyID0gMHhkLCBkYXRhX2FkZHIgPSAweDE0ICovCiYjNDM7LyogUmVnRUVFX3RyZnJlZXplX3RpbWVyMiAqLwomIzQzOyNkZWZpbmUgVFJfRlJFRVpFX1RJTUVSMl9NQVNLCQkJR0VOTUFTSyg5LCAwKQomIzQzOwomIzQzOy8qIGNoX2FkZHIgPSAweDIsIG5vZGVfYWRkciA9IDB4ZCwgZGF0YV9hZGRyID0gMHgxYyAqLwomIzQzOy8qIFJlZ0VFRTEwMFN0ZzFfdGFyICovCiYjNDM7I2RlZmluZSBFRUUxMDBfTFBTWU5DX1NUQUdFMV9VUERBVEVfVElNRVJfTUFTSwlHRU5NQVNLKDgsIDApCiYjNDM7CiYjNDM7LyogY2hfYWRkciA9IDB4Miwgbm9kZV9hZGRyID0gMHhkLCBkYXRhX2FkZHIgPSAweDI1ICovCiYjNDM7LyogUkVHRUVFX3dha2Vfc2x2X3RyX3dhaXRfZGZlc2lnZGV0X2VuICovCiYjNDM7I2RlZmluZSBXQUtFX1NMQVZFX1RSX1dBSVRfREZFX0RFVEVDVElPTl9FTglCSVQoMTEpCiYjNDM7CiYjNDM7I2RlZmluZSBBTkFMT0dfSU5URVJOQUxfT1BFUkFUSU9OX01BWF9VUwkyMAomIzQzOyNkZWZpbmUgVFhSRVNFUlZFX01JTgkJCQkwCiYjNDM7I2RlZmluZSBUWFJFU0VSVkVfTUFYCQkJCTcKJiM0MzsKJiM0MzsjZGVmaW5lIE1US19QSFlfQU5BUkdfUkcJCQkweDEwCiYjNDM7I2RlZmluZSAgIE1US19QSFlfVENMS09GRlNFVF9NQVNLCQlHRU5NQVNLKDEyLCA4KQomIzQzOwomIzQzOy8qIFJlZ2lzdGVycyBvbiBNRElPX01NRF9WRU5EMSAqLwomIzQzOyNkZWZpbmUgTVRLX1BIWV9UWFZMRF9EQV9SRwkJCTB4MTIKJiM0MzsjZGVmaW5lICAgTVRLX1BIWV9EQV9UWF9JMk1QQl9BX0dCRV9NQVNLCUdFTk1BU0soMTUsIDEwKQomIzQzOyNkZWZpbmUgICBNVEtfUEhZX0RBX1RYX0kyTVBCX0FfVEJUX01BU0sJR0VOTUFTSyg1LCAwKQomIzQzOwomIzQzOyNkZWZpbmUgTVRLX1BIWV9UWF9JMk1QQl9URVNUX01PREVfQTIJCTB4MTYKJiM0MzsjZGVmaW5lICAgTVRLX1BIWV9EQV9UWF9JMk1QQl9BX0hCVF9NQVNLCUdFTk1BU0soMTUsIDEwKQomIzQzOyNkZWZpbmUgICBNVEtfUEhZX0RBX1RYX0kyTVBCX0FfVFNUX01BU0sJR0VOTUFTSyg1LCAwKQomIzQzOwomIzQzOyNkZWZpbmUgTVRLX1BIWV9UWF9JMk1QQl9URVNUX01PREVfQjEJCTB4MTcKJiM0MzsjZGVmaW5lICAgTVRLX1BIWV9EQV9UWF9JMk1QQl9CX0dCRV9NQVNLCUdFTk1BU0soMTMsIDgpCiYjNDM7I2RlZmluZSAgIE1US19QSFlfREFfVFhfSTJNUEJfQl9UQlRfTUFTSwlHRU5NQVNLKDUsIDApCiYjNDM7CiYjNDM7I2RlZmluZSBNVEtfUEhZX1RYX0kyTVBCX1RFU1RfTU9ERV9CMgkJMHgxOAomIzQzOyNkZWZpbmUgICBNVEtfUEhZX0RBX1RYX0kyTVBCX0JfSEJUX01BU0sJR0VOTUFTSygxMywgOCkKJiM0MzsjZGVmaW5lICAgTVRLX1BIWV9EQV9UWF9JMk1QQl9CX1RTVF9NQVNLCUdFTk1BU0soNSwgMCkKJiM0MzsKJiM0MzsjZGVmaW5lIE1US19QSFlfVFhfSTJNUEJfVEVTVF9NT0RFX0MxCQkweDE5CiYjNDM7I2RlZmluZSAgIE1US19QSFlfREFfVFhfSTJNUEJfQ19HQkVfTUFTSwlHRU5NQVNLKDEzLCA4KQomIzQzOyNkZWZpbmUgICBNVEtfUEhZX0RBX1RYX0kyTVBCX0NfVEJUX01BU0sJR0VOTUFTSyg1LCAwKQomIzQzOwomIzQzOyNkZWZpbmUgTVRLX1BIWV9UWF9JMk1QQl9URVNUX01PREVfQzIJCTB4MjAKJiM0MzsjZGVmaW5lICAgTVRLX1BIWV9EQV9UWF9JMk1QQl9DX0hCVF9NQVNLCUdFTk1BU0soMTMsIDgpCiYjNDM7I2RlZmluZSAgIE1US19QSFlfREFfVFhfSTJNUEJfQ19UU1RfTUFTSwlHRU5NQVNLKDUsIDApCiYjNDM7CiYjNDM7I2RlZmluZSBNVEtfUEhZX1RYX0kyTVBCX1RFU1RfTU9ERV9EMQkJMHgyMQomIzQzOyNkZWZpbmUgICBNVEtfUEhZX0RBX1RYX0kyTVBCX0RfR0JFX01BU0sJR0VOTUFTSygxMywgOCkKJiM0MzsjZGVmaW5lICAgTVRLX1BIWV9EQV9UWF9JMk1QQl9EX1RCVF9NQVNLCUdFTk1BU0soNSwgMCkKJiM0MzsKJiM0MzsjZGVmaW5lIE1US19QSFlfVFhfSTJNUEJfVEVTVF9NT0RFX0QyCQkweDIyCiYjNDM7I2RlZmluZSAgIE1US19QSFlfREFfVFhfSTJNUEJfRF9IQlRfTUFTSwlHRU5NQVNLKDEzLCA4KQomIzQzOyNkZWZpbmUgICBNVEtfUEhZX0RBX1RYX0kyTVBCX0RfVFNUX01BU0sJR0VOTUFTSyg1LCAwKQomIzQzOwomIzQzOyNkZWZpbmUgTVRLX1BIWV9SWEFEQ19DVFJMX1JHNwkJCTB4YzYKJiM0MzsjZGVmaW5lICAgTVRLX1BIWV9EQV9BRF9CVUZfQklBU19MUF9NQVNLCUdFTk1BU0soOSwgOCkKJiM0MzsKJiM0MzsjZGVmaW5lIE1US19QSFlfUlhBRENfQ1RSTF9SRzkJCQkweGM4CiYjNDM7I2RlZmluZSAgIE1US19QSFlfREFfUlhfUFNCTl9UQlRfTUFTSwkJR0VOTUFTSygxNCwgMTIpCiYjNDM7I2RlZmluZSAgIE1US19QSFlfREFfUlhfUFNCTl9IQlRfTUFTSwkJR0VOTUFTSygxMCwgOCkKJiM0MzsjZGVmaW5lICAgTVRLX1BIWV9EQV9SWF9QU0JOX0dCRV9NQVNLCQlHRU5NQVNLKDYsIDQpCiYjNDM7I2RlZmluZSAgIE1US19QSFlfREFfUlhfUFNCTl9MUF9NQVNLCQlHRU5NQVNLKDIsIDApCiYjNDM7CiYjNDM7I2RlZmluZSBNVEtfUEhZX0xET19PVVRQVVRfVgkJCTB4ZDcKJiM0MzsKJiM0MzsjZGVmaW5lIE1US19QSFlfUkdfQU5BX0NBTF9SRzAJCQkweGRiCiYjNDM7I2RlZmluZSAgIE1US19QSFlfUkdfQ0FMX0NLSU5WCQkJQklUKDEyKQomIzQzOyNkZWZpbmUgICBNVEtfUEhZX1JHX0FOQV9DQUxFTgkJCUJJVCg4KQomIzQzOyNkZWZpbmUgICBNVEtfUEhZX1JHX1JFWFRfQ0FMRU4JCQlCSVQoNCkKJiM0MzsjZGVmaW5lICAgTVRLX1BIWV9SR19aQ0FMRU5fQQkJCUJJVCgwKQomIzQzOwomIzQzOyNkZWZpbmUgTVRLX1BIWV9SR19BTkFfQ0FMX1JHMQkJCTB4ZGMKJiM0MzsjZGVmaW5lICAgTVRLX1BIWV9SR19aQ0FMRU5fQgkJCUJJVCgxMikKJiM0MzsjZGVmaW5lICAgTVRLX1BIWV9SR19aQ0FMRU5fQwkJCUJJVCg4KQomIzQzOyNkZWZpbmUgICBNVEtfUEhZX1JHX1pDQUxFTl9ECQkJQklUKDQpCiYjNDM7I2RlZmluZSAgIE1US19QSFlfUkdfVFhWT1NfQ0FMRU4JCUJJVCgwKQomIzQzOwomIzQzOyNkZWZpbmUgTVRLX1BIWV9SR19BTkFfQ0FMX1JHNQkJCTB4ZTAKJiM0MzsjZGVmaW5lICAgTVRLX1BIWV9SR19SRVhUX1RSSU1fTUFTSwkJR0VOTUFTSygxMywgOCkKJiM0MzsjZGVmaW5lICAgTVRLX1BIWV9SR19SRVhUX1pDQUxfQ1RSTF9NQVNLCUdFTk1BU0soNSwgMCkKJiM0MzsKJiM0MzsjZGVmaW5lIE1US19QSFlfUkdfQU5BX0NBTF9SRzYJCQkweGUxCiYjNDM7CiYjNDM7I2RlZmluZSBNVEtfUEhZX1JHX1RYX0ZJTFRFUgkJCTB4ZmUKJiM0MzsKJiM0MzsjZGVmaW5lIE1US19QSFlfUkdfTFBJX1BDU19EU1BfQ1RSTF9SRUcxMjAJMHgxMjAKJiM0MzsjZGVmaW5lICAgTVRLX1BIWV9MUElfU0lHX0VOX0xPX1RIUkVTSDEwMDBfTUFTSwlHRU5NQVNLKDEyLCA4KQomIzQzOyNkZWZpbmUgICBNVEtfUEhZX0xQSV9TSUdfRU5fSElfVEhSRVNIMTAwMF9NQVNLCUdFTk1BU0soNCwgMCkKJiM0MzsKJiM0MzsjZGVmaW5lIE1US19QSFlfUkdfTFBJX1BDU19EU1BfQ1RSTF9SRUcxMjIJMHgxMjIKJiM0MzsjZGVmaW5lICAgTVRLX1BIWV9MUElfTk9STV9NU0VfSElfVEhSRVNIMTAwMF9NQVNLCUdFTk1BU0soNywgMCkKJiM0MzsKJiM0MzsjZGVmaW5lIE1US19QSFlfUkdfVEVTVE1VWF9BRENfQ1RSTAkJMHgxNDQKJiM0MzsjZGVmaW5lICAgTVRLX1BIWV9SR19UWEVOX0RJR19NQVNLCQlHRU5NQVNLKDUsIDUpCiYjNDM7CiYjNDM7I2RlZmluZSBNVEtfUEhZX1JHX0NSX1RYX0FNUF9PRkZTRVRfQV9CCQkweDE3MgomIzQzOyNkZWZpbmUgICBNVEtfUEhZX0NSX1RYX0FNUF9PRkZTRVRfQV9NQVNLCUdFTk1BU0soMTMsIDgpCiYjNDM7I2RlZmluZSAgIE1US19QSFlfQ1JfVFhfQU1QX09GRlNFVF9CX01BU0sJR0VOTUFTSyg2LCAwKQomIzQzOwomIzQzOyNkZWZpbmUgTVRLX1BIWV9SR19DUl9UWF9BTVBfT0ZGU0VUX0NfRAkJMHgxNzMKJiM0MzsjZGVmaW5lICAgTVRLX1BIWV9DUl9UWF9BTVBfT0ZGU0VUX0NfTUFTSwlHRU5NQVNLKDEzLCA4KQomIzQzOyNkZWZpbmUgICBNVEtfUEhZX0NSX1RYX0FNUF9PRkZTRVRfRF9NQVNLCUdFTk1BU0soNiwgMCkKJiM0MzsKJiM0MzsjZGVmaW5lIE1US19QSFlfUkdfQ1JfVFhfUjUwX09GRlNFVF9BX0IJCTB4MTc0CiYjNDM7I2RlZmluZSAgIE1US19QSFlfQ1JfVFhfUjUwX09GRlNFVF9BX01BU0sJR0VOTUFTSygxMywgOCkKJiM0MzsjZGVmaW5lICAgTVRLX1BIWV9DUl9UWF9SNTBfT0ZGU0VUX0JfTUFTSwlHRU5NQVNLKDYsIDApCiYjNDM7CiYjNDM7I2RlZmluZSBNVEtfUEhZX1JHX0NSX1RYX1I1MF9PRkZTRVRfQ19ECQkweDE3NQomIzQzOyNkZWZpbmUgICBNVEtfUEhZX0NSX1RYX1I1MF9PRkZTRVRfQ19NQVNLCUdFTk1BU0soMTMsIDgpCiYjNDM7I2RlZmluZSAgIE1US19QSFlfQ1JfVFhfUjUwX09GRlNFVF9EX01BU0sJR0VOTUFTSyg2LCAwKQomIzQzOwomIzQzOyNkZWZpbmUgTVRLX1BIWV9SR19BRF9DQUxfQ09NUAkJCTB4MTdhCiYjNDM7I2RlZmluZSAgIE1US19QSFlfQURfQ0FMX0NPTVBfT1VUX01BU0sJCUdFTk1BU0soOCwgOCkKJiM0MzsKJiM0MzsjZGVmaW5lIE1US19QSFlfUkdfQURfQ0FMX0NMSwkJCTB4MTdiCiYjNDM7I2RlZmluZSAgIE1US19QSFlfREFfQ0FMX0NMSwkJCUJJVCgwKQomIzQzOwomIzQzOyNkZWZpbmUgTVRLX1BIWV9SR19BRF9DQUxJTgkJCTB4MTdjCiYjNDM7I2RlZmluZSAgIE1US19QSFlfREFfQ0FMSU5fRkxBRwkJCUJJVCgwKQomIzQzOwomIzQzOyNkZWZpbmUgTVRLX1BIWV9SR19EQVNOX0RBQ19JTjBfQQkJMHgxN2QKJiM0MzsjZGVmaW5lICAgTVRLX1BIWV9EQVNOX0RBQ19JTjBfQV9NQVNLCQlHRU5NQVNLKDksIDApCiYjNDM7CiYjNDM7I2RlZmluZSBNVEtfUEhZX1JHX0RBU05fREFDX0lOMF9CCQkweDE3ZQomIzQzOyNkZWZpbmUgICBNVEtfUEhZX0RBU05fREFDX0lOMF9CX01BU0sJCUdFTk1BU0soOSwgMCkKJiM0MzsKJiM0MzsjZGVmaW5lIE1US19QSFlfUkdfREFTTl9EQUNfSU4wX0MJCTB4MTdmCiYjNDM7I2RlZmluZSAgIE1US19QSFlfREFTTl9EQUNfSU4wX0NfTUFTSwkJR0VOTUFTSyg5LCAwKQomIzQzOwomIzQzOyNkZWZpbmUgTVRLX1BIWV9SR19EQVNOX0RBQ19JTjBfRAkJMHgxODAKJiM0MzsjZGVmaW5lICAgTVRLX1BIWV9EQVNOX0RBQ19JTjBfRF9NQVNLCQlHRU5NQVNLKDksIDApCiYjNDM7CiYjNDM7I2RlZmluZSBNVEtfUEhZX1JHX0RBU05fREFDX0lOMV9BCQkweDE4MQomIzQzOyNkZWZpbmUgICBNVEtfUEhZX0RBU05fREFDX0lOMV9BX01BU0sJCUdFTk1BU0soOSwgMCkKJiM0MzsKJiM0MzsjZGVmaW5lIE1US19QSFlfUkdfREFTTl9EQUNfSU4xX0IJCTB4MTgyCiYjNDM7I2RlZmluZSAgIE1US19QSFlfREFTTl9EQUNfSU4xX0JfTUFTSwkJR0VOTUFTSyg5LCAwKQomIzQzOwomIzQzOyNkZWZpbmUgTVRLX1BIWV9SR19EQVNOX0RBQ19JTjFfQwkJMHgxODMKJiM0MzsjZGVmaW5lICAgTVRLX1BIWV9EQVNOX0RBQ19JTjFfQ19NQVNLCQlHRU5NQVNLKDksIDApCiYjNDM7CiYjNDM7I2RlZmluZSBNVEtfUEhZX1JHX0RBU05fREFDX0lOMV9ECQkweDE4NAomIzQzOyNkZWZpbmUgICBNVEtfUEhZX0RBU05fREFDX0lOMV9EX01BU0sJCUdFTk1BU0soOSwgMCkKJiM0MzsKJiM0MzsjZGVmaW5lIE1US19QSFlfUkdfREVWMUVfUkVHMTliCQkJMHgxOWIKJiM0MzsjZGVmaW5lICAgTVRLX1BIWV9CWVBBU1NfRFNQX0xQSV9SRUFEWQkJQklUKDgpCiYjNDM7CiYjNDM7I2RlZmluZSBNVEtfUEhZX1JHX0xQX0lJUjJfSzFfTAkJCTB4MjJhCiYjNDM7I2RlZmluZSBNVEtfUEhZX1JHX0xQX0lJUjJfSzFfVQkJCTB4MjJiCiYjNDM7I2RlZmluZSBNVEtfUEhZX1JHX0xQX0lJUjJfSzJfTAkJCTB4MjJjCiYjNDM7I2RlZmluZSBNVEtfUEhZX1JHX0xQX0lJUjJfSzJfVQkJCTB4MjJkCiYjNDM7I2RlZmluZSBNVEtfUEhZX1JHX0xQX0lJUjJfSzNfTAkJCTB4MjJlCiYjNDM7I2RlZmluZSBNVEtfUEhZX1JHX0xQX0lJUjJfSzNfVQkJCTB4MjJmCiYjNDM7I2RlZmluZSBNVEtfUEhZX1JHX0xQX0lJUjJfSzRfTAkJCTB4MjMwCiYjNDM7I2RlZmluZSBNVEtfUEhZX1JHX0xQX0lJUjJfSzRfVQkJCTB4MjMxCiYjNDM7I2RlZmluZSBNVEtfUEhZX1JHX0xQX0lJUjJfSzVfTAkJCTB4MjMyCiYjNDM7I2RlZmluZSBNVEtfUEhZX1JHX0xQX0lJUjJfSzVfVQkJCTB4MjMzCiYjNDM7CiYjNDM7I2RlZmluZSBNVEtfUEhZX1JHX0RFVjFFX1JFRzIzNAkJCTB4MjM0CiYjNDM7I2RlZmluZSAgIE1US19QSFlfVFJfT1BFTl9MT09QX0VOX01BU0sJCUdFTk1BU0soMCwgMCkKJiM0MzsjZGVmaW5lICAgTVRLX1BIWV9MUEZfWF9BVkVSQUdFX01BU0sJCUdFTk1BU0soNywgNCkKJiM0MzsjZGVmaW5lICAgTVRLX1BIWV9UUl9MUF9JSVJfRUVFX0VOCQlCSVQoMTIpCiYjNDM7CiYjNDM7I2RlZmluZSBNVEtfUEhZX1JHX0xQRl9DTlRfVkFMCQkJMHgyMzUKJiM0MzsKJiM0MzsjZGVmaW5lIE1US19QSFlfUkdfREVWMUVfUkVHMjM4CQkJMHgyMzgKJiM0MzsjZGVmaW5lICAgTVRLX1BIWV9MUElfU0xWX1NFTkRfVFhfVElNRVJfTUFTSwlHRU5NQVNLKDgsIDApCiYjNDM7I2RlZmluZSAgIE1US19QSFlfTFBJX1NMVl9TRU5EX1RYX0VOCQlCSVQoMTIpCiYjNDM7CiYjNDM7I2RlZmluZSBNVEtfUEhZX1JHX0RFVjFFX1JFRzIzOQkJCTB4MjM5CiYjNDM7I2RlZmluZSAgIE1US19QSFlfTFBJX1NFTkRfTE9DX1RJTUVSX01BU0sJR0VOTUFTSyg4LCAwKQomIzQzOyNkZWZpbmUgICBNVEtfUEhZX0xQSV9UWFBDU19MT0NfUkNWCQlCSVQoMTIpCiYjNDM7CiYjNDM7I2RlZmluZSBNVEtfUEhZX1JHX0RFVjFFX1JFRzI3QwkJCTB4MjdjCiYjNDM7I2RlZmluZSAgIE1US19QSFlfVkdBU1RBVEVfRkZFX1RIUl9TVDFfTUFTSwlHRU5NQVNLKDEyLCA4KQomIzQzOyNkZWZpbmUgTVRLX1BIWV9SR19ERVYxRV9SRUcyN0QJCQkweDI3ZAomIzQzOyNkZWZpbmUgICBNVEtfUEhZX1ZHQVNUQVRFX0ZGRV9USFJfU1QyX01BU0sJR0VOTUFTSyg0LCAwKQomIzQzOwomIzQzOyNkZWZpbmUgTVRLX1BIWV9SR19ERVYxRV9SRUcyQzcJCQkweDJjNwomIzQzOyNkZWZpbmUgICBNVEtfUEhZX01BWF9HQUlOX01BU0sJCQlHRU5NQVNLKDQsIDApCiYjNDM7I2RlZmluZSAgIE1US19QSFlfTUlOX0dBSU5fTUFTSwkJCUdFTk1BU0soMTIsIDgpCiYjNDM7CiYjNDM7I2RlZmluZSBNVEtfUEhZX1JHX0RFVjFFX1JFRzJEMQkJCTB4MmQxCiYjNDM7I2RlZmluZSAgIE1US19QSFlfVkNPX1NMSUNFUl9USFJFU0hfQklUU19ISUdIX0VFRV9NQVNLCUdFTk1BU0soNywgMCkKJiM0MzsjZGVmaW5lICAgTVRLX1BIWV9MUElfU0tJUF9TRF9TTFZfVFIJCUJJVCg4KQomIzQzOyNkZWZpbmUgICBNVEtfUEhZX0xQSV9UUl9SRUFEWQkJCUJJVCg5KQomIzQzOyNkZWZpbmUgICBNVEtfUEhZX0xQSV9WQ09fRUVFX1NURzBfRU4JCUJJVCgxMCkKJiM0MzsKJiM0MzsjZGVmaW5lIE1US19QSFlfUkdfREVWMUVfUkVHMzIzCQkJMHgzMjMKJiM0MzsjZGVmaW5lICAgTVRLX1BIWV9FRUVfV0FLRV9NQVNfSU5UX0RDCQlCSVQoMCkKJiM0MzsjZGVmaW5lICAgTVRLX1BIWV9FRUVfV0FLRV9TTFZfSU5UX0RDCQlCSVQoNCkKJiM0MzsKJiM0MzsjZGVmaW5lIE1US19QSFlfUkdfREVWMUVfUkVHMzI0CQkJMHgzMjQKJiM0MzsjZGVmaW5lICAgTVRLX1BIWV9TTUlfREVUQ05UX01BWF9NQVNLCQlHRU5NQVNLKDUsIDApCiYjNDM7I2RlZmluZSAgIE1US19QSFlfU01JX0RFVF9NQVhfRU4JCUJJVCg4KQomIzQzOwomIzQzOyNkZWZpbmUgTVRLX1BIWV9SR19ERVYxRV9SRUczMjYJCQkweDMyNgomIzQzOyNkZWZpbmUgICBNVEtfUEhZX0xQSV9NT0RFX1NEX09OCQlCSVQoMCkKJiM0MzsjZGVmaW5lICAgTVRLX1BIWV9SRVNFVF9SQU5EVVBEX0NOVAkJQklUKDEpCiYjNDM7I2RlZmluZSAgIE1US19QSFlfVFJFQ19VUERBVEVfRU5BQl9DTFIJCUJJVCgyKQomIzQzOyNkZWZpbmUgICBNVEtfUEhZX0xQSV9RVUlUX1dBSVRfREZFX1NJR19ERVRfT0ZGCUJJVCg0KQomIzQzOyNkZWZpbmUgICBNVEtfUEhZX1RSX1JFQURZX1NLSVBfQUZFX1dBS0VVUAlCSVQoNSkKJiM0MzsKJiM0MzsjZGVmaW5lIE1US19QSFlfTERPX1BVTVBfRU5fUEFJUkFCCQkweDUwMgomIzQzOyNkZWZpbmUgTVRLX1BIWV9MRE9fUFVNUF9FTl9QQUlSQ0QJCTB4NTAzCiYjNDM7CiYjNDM7I2RlZmluZSBNVEtfUEhZX0RBX1RYX1I1MF9QQUlSX0EJCTB4NTNkCiYjNDM7I2RlZmluZSBNVEtfUEhZX0RBX1RYX1I1MF9QQUlSX0IJCTB4NTNlCiYjNDM7I2RlZmluZSBNVEtfUEhZX0RBX1RYX1I1MF9QQUlSX0MJCTB4NTNmCiYjNDM7I2RlZmluZSBNVEtfUEhZX0RBX1RYX1I1MF9QQUlSX0QJCTB4NTQwCiYjNDM7CiYjNDM7LyogUmVnaXN0ZXJzIG9uIE1ESU9fTU1EX1ZFTkQyICovCiYjNDM7I2RlZmluZSBNVEtfUEhZX0xFRDFfREVGQVVMVF9QT0xBUklUSUVTCQlCSVQoMSkKJiM0MzsKJiM0MzsjZGVmaW5lIE1US19QSFlfUkdfQkdfUkFTRUwJCQkweDExNQomIzQzOyNkZWZpbmUgICBNVEtfUEhZX1JHX0JHX1JBU0VMX01BU0sJCUdFTk1BU0soMiwgMCkKJiM0MzsKJiM0MzsvKiAmIzM5O2Jvb3R0cmFwJiMzOTsgcmVnaXN0ZXIgcmVmbGVjdGluZyB0aGUgY29uZmlndXJhdGlvbiBvZiB0aGUgNCBQSFkgTEVEcyAqLwomIzQzOyNkZWZpbmUgUkdfR1BJT19NSVNDX1RQQkFOSzAJCQkweDZmMAomIzQzOyNkZWZpbmUgICBSR19HUElPX01JU0NfVFBCQU5LMF9CT09UTU9ERQkJR0VOTUFTSygxMSwgOCkKJiM0MzsKJiM0MztlbnVtIENBTF9JVEVNIHsKJiM0MzsJUkVYVCwKJiM0MzsJVFhfT0ZGU0VULAomIzQzOwlUWF9BTVAsCiYjNDM7CVRYX1I1MCwKJiM0MzsJVFhfVkNNLAomIzQzOwlSWF9PRkZTRVQsCiYjNDM7fTsKJiM0MzsKJiM0MztlbnVtIHsKJiM0MzsJTk9fUEFJUiwKJiM0MzsJUEFJUl9BLAomIzQzOwlQQUlSX0IsCiYjNDM7CVBBSVJfQywKJiM0MzsJUEFJUl9ELAomIzQzO307CiYjNDM7CiYjNDM7ZW51bSBjYWxpYnJhdGlvbl9tb2RlIHsKJiM0MzsJRUZVU0VfSywKJiM0MzsJU1dfSwomIzQzO307CiYjNDM7CiYjNDM7ZW51bSBDQUxfTU9ERSB7CiYjNDM7CUVGVVNFX00sCiYjNDM7CVNXX00KJiM0Mzt9OwomIzQzOwomIzQzOy8qIE1USyBHRSBTb0MgY29tbW9uIGZ1bmN0aW9ucyAqLwomIzQzO2ludCBtdGtfY2FsX2N5Y2xlX3dhaXQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldik7CiYjNDM7CiYjNDM7I2VuZGlmIC8qIF9NVEtfR0VfU09DX0hfICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9waHkvbWVkaWF0ZWsvbXRrLXBoeS1saWIuYyBiL2RyaXZlcnMvbmV0L3BoeS9tZWRpYXRlay9tdGstcGh5LWxpYi5jCmluZGV4IGRmZDBmNGU0MzlhMjE0Li44YzJiMjZmOWI4NDAzYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvcGh5L21lZGlhdGVrL210ay1waHktbGliLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvcGh5L21lZGlhdGVrL210ay1waHktbGliLmMKQEAgLTM2LDggJiM0MzszNiw4IEBAIHN0YXRpYyB2b2lkIF9fbXRrX3RyX3JlYWQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgdTggY2hfYWRkciwgdTggbm9kZV9hZGRyLAogCQkqdHJfaGlnaCwgKnRyX2xvdyk7CiB9CiAKLXN0YXRpYyB2b2lkIF9fbXRrX3RyX3dyaXRlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIHU4IGNoX2FkZHIsIHU4IG5vZGVfYWRkciwKLQkJCSAgIHU4IGRhdGFfYWRkciwgdTMyIHRyX2RhdGEpCiYjNDM7dm9pZCBfX210a190cl93cml0ZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCB1OCBjaF9hZGRyLCB1OCBub2RlX2FkZHIsCiYjNDM7CQkgICAgdTggZGF0YV9hZGRyLCB1MzIgdHJfZGF0YSkKIHsKIAlfX3BoeV93cml0ZShwaHlkZXYsIDB4MTEsIHRyX2RhdGEgJmFtcDsgMHhmZmZmKTsKIAlfX3BoeV93cml0ZShwaHlkZXYsIDB4MTIsIHRyX2RhdGEgJmd0OyZndDsgMTYpOwpAQCAtNDUsNiAmIzQzOzQ1LDcgQEAgc3RhdGljIHZvaWQgX19tdGtfdHJfd3JpdGUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgdTggY2hfYWRkciwgdTggbm9kZV9hZGRyLAogCQl0cl9kYXRhICZndDsmZ3Q7IDE2LCB0cl9kYXRhICZhbXA7IDB4ZmZmZik7CiAJX19tdGtfdHJfYWNjZXNzKHBoeWRldiwgZmFsc2UsIGNoX2FkZHIsIG5vZGVfYWRkciwgZGF0YV9hZGRyKTsKIH0KJiM0MztFWFBPUlRfU1lNQk9MX0dQTChfX210a190cl93cml0ZSk7CiAKIHZvaWQgX19tdGtfdHJfbW9kaWZ5KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIHU4IGNoX2FkZHIsIHU4IG5vZGVfYWRkciwKIAkJICAgICB1OCBkYXRhX2FkZHIsIHUzMiBtYXNrLCB1MzIgc2V0KQpAQCAtMzQxLDYgJiM0MzszNDIsNzggQEAgdm9pZCBtdGtfcGh5X2xlZHNfc3RhdGVfaW5pdChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KQogfQogRVhQT1JUX1NZTUJPTF9HUEwobXRrX3BoeV9sZWRzX3N0YXRlX2luaXQpOwogCiYjNDM7aW50IG10Nzk4eF9waHlfbGVkX2JsaW5rX3NldChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCB1OCBpbmRleCwKJiM0MzsJCQkgICAgIHVuc2lnbmVkIGxvbmcgKmRlbGF5X29uLAomIzQzOwkJCSAgICAgdW5zaWduZWQgbG9uZyAqZGVsYXlfb2ZmKQomIzQzO3sKJiM0MzsJYm9vbCBibGlua2luZyA9IGZhbHNlOwomIzQzOwlpbnQgZXJyOwomIzQzOwomIzQzOwllcnIgPSBtdGtfcGh5X2xlZF9udW1fZGx5X2NmZyhpbmRleCwgZGVsYXlfb24sIGRlbGF5X29mZiwgJmFtcDtibGlua2luZyk7CiYjNDM7CWlmIChlcnIgJmx0OyAwKQomIzQzOwkJcmV0dXJuIGVycjsKJiM0MzsKJiM0MzsJZXJyID0gbXRrX3BoeV9od19sZWRfYmxpbmtfc2V0KHBoeWRldiwgaW5kZXgsIGJsaW5raW5nKTsKJiM0MzsJaWYgKGVycikKJiM0MzsJCXJldHVybiBlcnI7CiYjNDM7CiYjNDM7CXJldHVybiBtdGtfcGh5X2h3X2xlZF9vbl9zZXQocGh5ZGV2LCBpbmRleCwgTVRLX0dQSFlfTEVEX09OX01BU0ssCiYjNDM7CQkJCSAgICAgZmFsc2UpOwomIzQzO30KJiM0MztFWFBPUlRfU1lNQk9MX0dQTChtdDc5OHhfcGh5X2xlZF9ibGlua19zZXQpOwomIzQzOwomIzQzO2ludCBtdDc5OHhfcGh5X2xlZF9icmlnaHRuZXNzX3NldChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LAomIzQzOwkJCQkgIHU4IGluZGV4LCBlbnVtIGxlZF9icmlnaHRuZXNzIHZhbHVlKQomIzQzO3sKJiM0MzsJaW50IGVycjsKJiM0MzsKJiM0MzsJZXJyID0gbXRrX3BoeV9od19sZWRfYmxpbmtfc2V0KHBoeWRldiwgaW5kZXgsIGZhbHNlKTsKJiM0MzsJaWYgKGVycikKJiM0MzsJCXJldHVybiBlcnI7CiYjNDM7CiYjNDM7CXJldHVybiBtdGtfcGh5X2h3X2xlZF9vbl9zZXQocGh5ZGV2LCBpbmRleCwgTVRLX0dQSFlfTEVEX09OX01BU0ssCiYjNDM7CQkJCSAgICAgKHZhbHVlICE9IExFRF9PRkYpKTsKJiM0Mzt9CiYjNDM7RVhQT1JUX1NZTUJPTF9HUEwobXQ3OTh4X3BoeV9sZWRfYnJpZ2h0bmVzc19zZXQpOwomIzQzOwomIzQzO3N0YXRpYyBjb25zdCB1bnNpZ25lZCBsb25nIHN1cHBvcnRlZF90cmlnZ2VycyA9CiYjNDM7CUJJVChUUklHR0VSX05FVERFVl9GVUxMX0RVUExFWCkgfAomIzQzOwlCSVQoVFJJR0dFUl9ORVRERVZfSEFMRl9EVVBMRVgpIHwKJiM0MzsJQklUKFRSSUdHRVJfTkVUREVWX0xJTkspICAgICAgICB8CiYjNDM7CUJJVChUUklHR0VSX05FVERFVl9MSU5LXzEwKSAgICAgfAomIzQzOwlCSVQoVFJJR0dFUl9ORVRERVZfTElOS18xMDApICAgIHwKJiM0MzsJQklUKFRSSUdHRVJfTkVUREVWX0xJTktfMTAwMCkgICB8CiYjNDM7CUJJVChUUklHR0VSX05FVERFVl9SWCkgICAgICAgICAgfAomIzQzOwlCSVQoVFJJR0dFUl9ORVRERVZfVFgpOwomIzQzOwomIzQzO2ludCBtdDc5OHhfcGh5X2xlZF9od19pc19zdXBwb3J0ZWQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgdTggaW5kZXgsCiYjNDM7CQkJCSAgIHVuc2lnbmVkIGxvbmcgcnVsZXMpCiYjNDM7ewomIzQzOwlyZXR1cm4gbXRrX3BoeV9sZWRfaHdfaXNfc3VwcG9ydGVkKHBoeWRldiwgaW5kZXgsIHJ1bGVzLAomIzQzOwkJCQkJICAgc3VwcG9ydGVkX3RyaWdnZXJzKTsKJiM0Mzt9CiYjNDM7RVhQT1JUX1NZTUJPTF9HUEwobXQ3OTh4X3BoeV9sZWRfaHdfaXNfc3VwcG9ydGVkKTsKJiM0MzsKJiM0MztpbnQgbXQ3OTh4X3BoeV9sZWRfaHdfY29udHJvbF9nZXQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgdTggaW5kZXgsCiYjNDM7CQkJCSAgdW5zaWduZWQgbG9uZyAqcnVsZXMpCiYjNDM7ewomIzQzOwlyZXR1cm4gbXRrX3BoeV9sZWRfaHdfY3RybF9nZXQocGh5ZGV2LCBpbmRleCwgcnVsZXMsCiYjNDM7CQkJCSAgICAgICBNVEtfR1BIWV9MRURfT05fU0VULAomIzQzOwkJCQkgICAgICAgTVRLX0dQSFlfTEVEX1JYX0JMSU5LX1NFVCwKJiM0MzsJCQkJICAgICAgIE1US19HUEhZX0xFRF9UWF9CTElOS19TRVQpOwomIzQzO307CiYjNDM7RVhQT1JUX1NZTUJPTF9HUEwobXQ3OTh4X3BoeV9sZWRfaHdfY29udHJvbF9nZXQpOwomIzQzOwomIzQzO2ludCBtdDc5OHhfcGh5X2xlZF9od19jb250cm9sX3NldChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCB1OCBpbmRleCwKJiM0MzsJCQkJICB1bnNpZ25lZCBsb25nIHJ1bGVzKQomIzQzO3sKJiM0MzsJcmV0dXJuIG10a19waHlfbGVkX2h3X2N0cmxfc2V0KHBoeWRldiwgaW5kZXgsIHJ1bGVzLAomIzQzOwkJCQkgICAgICAgTVRLX0dQSFlfTEVEX09OX1NFVCwKJiM0MzsJCQkJICAgICAgIE1US19HUEhZX0xFRF9SWF9CTElOS19TRVQsCiYjNDM7CQkJCSAgICAgICBNVEtfR1BIWV9MRURfVFhfQkxJTktfU0VUKTsKJiM0Mzt9OwomIzQzO0VYUE9SVF9TWU1CT0xfR1BMKG10Nzk4eF9waHlfbGVkX2h3X2NvbnRyb2xfc2V0KTsKJiM0MzsKIE1PRFVMRV9ERVNDUklQVElPTigmIzM0O01lZGlhVGVrIEV0aGVybmV0IFBIWSBkcml2ZXIgY29tbW9uJiMzNDspOwogTU9EVUxFX0FVVEhPUigmIzM0O1NreSBIdWFuZyAmbHQ7U2t5TGFrZS5IdWFuZ0BtZWRpYXRlay5jb20mZ3Q7JiMzNDspOwogTU9EVUxFX0FVVEhPUigmIzM0O0RhbmllbCBHb2xsZSAmbHQ7ZGFuaWVsQG1ha3JvdG9waWEub3JnJmd0OyYjMzQ7KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BoeS9tZWRpYXRlay9tdGsuaCBiL2RyaXZlcnMvbmV0L3BoeS9tZWRpYXRlay9tdGsuaAppbmRleCAzMjBmNzZmZmE4MWZhMi4uY2Q5ZDRjNTU1MGMzYjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3BoeS9tZWRpYXRlay9tdGsuaAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9waHkvbWVkaWF0ZWsvbXRrLmgKQEAgLTEzLDYgJiM0MzsxMyw3IEBACiAKICNkZWZpbmUgTVRLX0VYVF9QQUdFX0FDQ0VTUwkJCTB4MWYKICNkZWZpbmUgTVRLX1BIWV9QQUdFX0VYVEVOREVEXzEJCQkweDAwMDEKJiM0MzsjZGVmaW5lIE1US19QSFlfUEFHRV9FWFRFTkRFRF8zCQkJMHgwMDAzCiAjZGVmaW5lIE1US19QSFlfUEFHRV9TVEFOREFSRAkJCTB4MDAwMAogI2RlZmluZSBNVEtfUEhZX1BBR0VfRVhURU5ERURfNTJCNQkJMHg1MmI1CiAKQEAgLTcyLDYgJiM0Mzs3Myw4IEBAIHN0cnVjdCBtdGtfc29jcGh5X3ByaXYgewogCXVuc2lnbmVkIGxvbmcJCWxlZF9zdGF0ZTsKIH07CiAKJiM0Mzt2b2lkIF9fbXRrX3RyX3dyaXRlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIHU4IGNoX2FkZHIsIHU4IG5vZGVfYWRkciwKJiM0MzsJCSAgICB1OCBkYXRhX2FkZHIsIHUzMiB0cl9kYXRhKTsKIHZvaWQgX19tdGtfdHJfbW9kaWZ5KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIHU4IGNoX2FkZHIsIHU4IG5vZGVfYWRkciwKIAkJICAgICB1OCBkYXRhX2FkZHIsIHUzMiBtYXNrLCB1MzIgc2V0KTsKIHZvaWQgbXRrX3RyX21vZGlmeShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCB1OCBjaF9hZGRyLCB1OCBub2RlX2FkZHIsCkBAIC0xMDEsNCAmIzQzOzEwNCwxNiBAQCBpbnQgbXRrX3BoeV9od19sZWRfYmxpbmtfc2V0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIHU4IGluZGV4LAogCQkJICAgICBib29sIGJsaW5raW5nKTsKIHZvaWQgbXRrX3BoeV9sZWRzX3N0YXRlX2luaXQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldik7CiAKJiM0MztpbnQgbXQ3OTh4X3BoeV9sZWRfYmxpbmtfc2V0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIHU4IGluZGV4LAomIzQzOwkJCSAgICAgdW5zaWduZWQgbG9uZyAqZGVsYXlfb24sCiYjNDM7CQkJICAgICB1bnNpZ25lZCBsb25nICpkZWxheV9vZmYpOwomIzQzO2ludCBtdDc5OHhfcGh5X2xlZF9icmlnaHRuZXNzX3NldChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LAomIzQzOwkJCQkgIHU4IGluZGV4LCBlbnVtIGxlZF9icmlnaHRuZXNzIHZhbHVlKTsKJiM0MztpbnQgbXQ3OTh4X3BoeV9sZWRfaHdfaXNfc3VwcG9ydGVkKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIHU4IGluZGV4LAomIzQzOwkJCQkgICB1bnNpZ25lZCBsb25nIHJ1bGVzKTsKJiM0MztpbnQgbXQ3OTh4X3BoeV9sZWRfaHdfY29udHJvbF9nZXQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgdTggaW5kZXgsCiYjNDM7CQkJCSAgdW5zaWduZWQgbG9uZyAqcnVsZXMpOwomIzQzO2ludCBtdDc5OHhfcGh5X2xlZF9od19jb250cm9sX3NldChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCB1OCBpbmRleCwKJiM0MzsJCQkJICB1bnNpZ25lZCBsb25nIHJ1bGVzKTsKJiM0MzsKICNlbmRpZiAvKiBfTVRLX0VQSFlfSF8gKi8KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDkgMDE6MTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTU2NjUKCQkJCQkJCW91dHB1dDogMTkKCQkJCQkJCXRob3VnaHRzOiA5NjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQSBOZXcgUEhZIERyaXZlcjogUmVhY2hhYmlsaXR5IGFuZCBGdXp6aW5nIENvbnNpZGVyYXRpb25zKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHNlcmllcyB0aGF0IGludHJvZHVjZXMgYSBuZXcgRXRoZXJuZXQgUEhZIGRyaXZlciwgYGFpcm9oYS1nZS1zb2MuY2AsIHNwZWNpZmljYWxseSBmb3IgQWlyb2hhIFNvQ3MuIEl0IGNsZWFubHkgc2VwYXJhdGVzIHRoZSBBaXJvaGEgUEhZIGZ1bmN0aW9uYWxpdHkgZnJvbSB0aGUgZXhpc3RpbmcgTWVkaWFUZWsgU29DIFBIWSBkcml2ZXIgKGBtdGstZ2Utc29jLmNgKS4gV2UgaGF2ZSBhIG5ldyBLY29uZmlnIG9wdGlvbiwgYEFJUk9IQV9HRV9TT0NfUEhZYCwgdGhlIG5ldyBkcml2ZXIgZmlsZSwgYW5kIG1vZGlmaWNhdGlvbnMgdG8gdGhlIE1lZGlhVGVrIGZpbGVzIHRvIHJlZmxlY3QgdGhpcyBzcGxpdC4KCk15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIGFib3V0IHJlYWNoYWJpbGl0eS4gVGhpcyBpcyBhIFBIWSBkcml2ZXIsIHdoaWNoIG1lYW5zIGl0IGdldHMgaW5zdGFudGlhdGVkIHdoZW4gdGhlIFBIWSBpdHNlbGYgaXMgcHJlc2VudCBhbmQgZGV0ZWN0YWJsZS4gSW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLCB0aGluZ3MgZ2V0IGEgYml0IG1vcmUgY29tcGxleC4gU3l6a2FsbGVyIHVzdWFsbHkgcmVsaWVzIG9uIGVtdWxhdGVkIE1ESU8gYnVzZXMgb3IgZHVtbXkgUEhZcyB0byByZWFjaCBQSFkgZHJpdmVycy4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgaXQmIzM5O3MgZXZlbiAqcG9zc2libGUqIGZvciBTeXprYWxsZXIgdG8gdHJpZ2dlciB0aGlzIGRyaXZlci4gVGhlIGRyaXZlciB1c2VzIGBQSFlfSURfTUFUQ0hfRVhBQ1RgIHdpdGggc3BlY2lmaWMgSURzOiBgQUlST0hBX0dQSFlfSURfQU43NTgxYCBhbmQgYEFJUk9IQV9HUEhZX0lEX0FONzU4M2AuIFNvLCBpZiBgQ09ORklHX0FJUk9IQV9HRV9TT0NfUEhZYCBpcyBlbmFibGVkLCB0aGUgZHJpdmVyIHdpbGwgYmUgYnVpbHQuCgpJcyBpdCB3b3J0aCBmdXp6aW5nPyBZZXMsIGFic29sdXRlbHkuIEl0JiMzOTtzIGEgbmV3IGRyaXZlciB3aXRoIGZ1bmN0aW9uYWwgY2hhbmdlcywgYSBwcmltZSB0YXJnZXQgZm9yIGZpbmRpbmcgYnVncy4gVGhlIG1vcmUgY29kZSB0aGF04oCZcyBhZGRlZCBvciBjaGFuZ2VkIHRoZSBtb3JlIHRoZSBwb3NzaWJpbGl0eSBvZiBuZXcgYnVncyBiZWluZyBwcmVzZW50LgoKQnV0IGJhY2sgdG8gcmVhY2hhYmlsaXR5LiBTeXprYWxsZXIgKmNhbiogZnV6eiBQSFkgZHJpdmVycywgaWYgaXQmIzM5O3MgcHJvYmVkLiBUaGF04oCZcyB0aGUga2V5IGhlcmUuIFNvLCBob3cgY2FuIHRoaXMgZHJpdmVyIGJlIHByb2JlZD8gSXQgbWF0Y2hlcyBiYXNlZCBvbiBQSFkgSURzLCB3aGljaCBzdWdnZXN0cyBpdCYjMzk7cyBmb3VuZCBkdXJpbmcgYW4gTURJTyBidXMgc2Nhbi4gSWYgdGhlcmXigJlzIGFuIGVtdWxhdGVkIE1ESU8gYnVzLCBTeXprYWxsZXIgY291bGQgcG90ZW50aWFsbHkgaW5qZWN0IGFuIE1ESU8gZGV2aWNlIHRoYXQgc2ltdWxhdGVzIHRoZSBBaXJvaGEgUEhZLCBidXQgSSYjMzk7bSBub3Qgc3VyZSBpZiBpdCBoYXMgdGhhdCBjYXBhYmlsaXR5LgoKTm93LCBJJiMzOTttIHJlY2FsbGluZyB0aGUgaW5zdHJ1Y3Rpb25zIHdoaWNoIHN0YXRlIHNvbWV0aGluZyBsaWtlLCAmIzM0O0NvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSYjMzQ7LiBTbywgZXZlbiBpZiB0aGVyZSB3ZXJlIGFuIGVtdWxhdGVkIG5ldHdvcmsgY2FyZCBpbiBRRU1VLCBpdCB3b3VsZCBuZWVkIHRvIHVzZSB0aGlzIHNwZWNpZmljIFBIWSwgd2hpY2ggc2VlbXMgdW5saWtlbHkuIFN5emthbGxlciBkb2VzbiYjMzk7dCBkaXJlY3RseSBpbnN0YW50aWF0ZSBhcmJpdHJhcnkgUEhZczsgdGhleeKAmXJlIGNyZWF0ZWQgYnkgZGV2aWNlIHRyZWUgb3IgTURJTyBidXMgc2Nhbm5pbmcuIENhbiBTeXNmcyBvciBOZXRsaW5rIGluc3RhbnRpYXRlIGEgUEhZPyBObywgdHlwaWNhbGx5IG5vdC4gSXTigJlzIHRoZSBNRElPIGNvbnRyb2xsZXIgdGhhdCBkb2VzIHRoZSBwcm9iaW5nLgoKVGhlIGJvdHRvbSBsaW5lIGlzIHRoYXQgdW5sZXNzIFFFTVUgZW11bGF0ZXMgdGhlIEFpcm9oYSBvciBNZWRpYVRlayBTb0Mgd2l0aCB0aGlzIHNwZWNpZmljIE1ESU8gYnVzIGFuZCBQSFksIHRoZSBkcml2ZXIgd29uJiMzOTt0IGJlIHByb2JlZCwgd2hpY2ggcmVuZGVycyBpdCB1bnJlYWNoYWJsZS4KCkhvd2V2ZXIsIHRoZSBpbnN0cnVjdGlvbnMgYWxzbyBzYXk6ICYjMzQ7SWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaCB0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4mIzM0OyBTbywgZXZlbiBpZiB0aGUgaGFyZHdhcmUgaXNuJiMzOTt0IGRpcmVjdGx5IHJlYWNoYWJsZSwgYmVjYXVzZSBpdCBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBpdCBpcyB3b3J0aCBmdXp6aW5nLiBUaGUgcXVlc3Rpb24sIHRoZW4sIGlzIHdoZXRoZXIgdGhlcmUgaXMgYSB2aXJ0dWFsIE1ESU8gZHJpdmVyLCB3aGljaCB3b3VsZCBhbGxvdyBTeXprYWxsZXIgdG8gaW5qZWN0IE1ESU8gZGV2aWNlcywgdG8gdGVzdCB0aGlzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA5IDAxOjEyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bWRpby4qbW9ja3VwJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOSAwMToxMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NzM0NgoJCQkJCQkJb3V0cHV0OiAxOAoJCQkJCQkJdGhvdWdodHM6IDE5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHN1bW1hcnksIHByZXNlbnRlZCBhcyBhIHN0cmVhbSBvZiB0aG91Z2h0OgoKKipDaGVja2luZyB0aGUgUEhZIERyaXZlciBMYW5kc2NhcGUqKgoKUmlnaHQsIGxldCYjMzk7cyBnZXQgZG93biB0byBpdC4gR2l2ZW4gdGhlIGNvbnRleHQsIG15IGluaXRpYWwgdGhvdWdodCBpcyB0byB6ZXJvIGluIG9uIHRoZSBwaHlzaWNhbCBsYXllciBpbnRlcmZhY2UgZHJpdmVycywgc3BlY2lmaWNhbGx5IGluIHRoZSBgZHJpdmVycy9uZXQvcGh5L2AgZGlyZWN0b3J5LiBUaGF0JiMzOTtzIHRoZSBsb2dpY2FsIHN0YXJ0aW5nIHBvaW50IHdoZW4gSSYjMzk7bSBkZWFsaW5nIHdpdGggbmV0d29ya2luZyBoYXJkd2FyZSBhdCBhIGxvd2VyIGxldmVsLiBNeSBpbnR1aXRpb24gdGVsbHMgbWUgdGhhdCB0aGUgY2x1ZSB0byB0aGUgcHJvYmxlbSB3aWxsIHByb2JhYmx5IGJlIGZvdW5kIHdpdGhpbiB0aGUgUEhZIGRyaXZlciBjb2RlLiBJJiMzOTttIGVzcGVjaWFsbHkga2VlbiB0byBsb29rIGZvciBhbnkgaW5zdGFuY2VzIG9mIGEgJiMzNDt2aXJ0dWFsJiMzNDsgb3IgJiMzNDtkdW1teSYjMzQ7IE1ESU8gaW1wbGVtZW50YXRpb24uIFRoYXQgd291bGQgc3VnZ2VzdCBhIHNwZWNpZmljIGhhcmR3YXJlIGNvbmZpZ3VyYXRpb24sIHBlcmhhcHMgZm9yIHRlc3Rpbmcgb3IgZW11bGF0aW9uIHB1cnBvc2VzLCB3aGljaCBpcyBsaWtlbHkgdG8gYmUgYXQgdGhlIGhlYXJ0IG9mIHRoZSBpc3N1ZSBJJiMzOTttIGRlYWxpbmcgd2l0aC4gTGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIHRoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA5IDAxOjEyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bWRpby4qZHVtbXkmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA5IDAxOjEyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU3NTY3CgkJCQkJCQlvdXRwdXQ6IDE5CgkJCQkJCQl0aG91Z2h0czogMTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzczoKCioqRGl2aW5nIGludG8gdGhlIEZpeGVkIFBIWSBDb2RlKioKCkFscmlnaHQsIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJIG5lZWQgdG8gaW52ZXN0aWdhdGUgc29tZXRoaW5nIHJlbGF0ZWQgdG8gbmV0d29yayBpbnRlcmZhY2VzLCBhbmQgSSBoYXZlIGEgaHVuY2ggdGhlIGlzc3VlIG1pZ2h0IGJlIGRvd24gaW4gdGhlIGxvdy1sZXZlbCBQSFkgbGF5ZXIuIE15IGd1dCBmZWVsaW5nIGlzIGxlYWRpbmcgbWUgc3RyYWlnaHQgdG8gYGRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuY2AuIFRoYXQmIzM5O3MgdGhlIGxpa2VseSBzcG90IGZvciBmaXhlZCBQSFkgY29uZmlndXJhdGlvbiBhbmQgY29udHJvbC4gSSYjMzk7bSBleHBlY3RpbmcgdG8gZmluZCB0aGUgc3RhbmRhcmQgUEhZIGludGVyZmFjZSBmdW5jdGlvbnMgaW1wbGVtZW50ZWQgdGhlcmUsIHRoaW5ncyBsaWtlIHJlYWQvd3JpdGUgcmVnaXN0ZXJzLCBsaW5rIHN0YXRlIGRldGVjdGlvbiwgYW5kIHBvdGVudGlhbGx5IGV2ZW4gaW5pdGlhbGl6YXRpb24gcm91dGluZXMgaWYgaXQmIzM5O3Mgbm90IGhhbmRsZWQgZWxzZXdoZXJlLiBUaGlzIHdpbGwgYmUgdGhlIHN0YXJ0aW5nIHBvaW50IHRvIHVuZGVyc3RhbmQgaG93IHRoZSBmaXhlZCBQSFkgaXMgaGFuZGxlZCBieSB0aGUgZHJpdmVyLiBJ4oCZbGwgYmUgbG9va2luZyBmb3IgcG90ZW50aWFsIGFyZWFzIG9mIGNvbmZpZ3VyYXRpb24sIGluaXRpYWxpemF0aW9uIGFuZCBsaW5rIHN0YXR1cyBkZXRlY3Rpb24gdG8gc2VlIGlmIHRoZSBwcm9ibGVtIGxpZXMgd2l0aCB0aGUgZHJpdmVyIGNvZGUsIG9yIHdpdGggbXkgZXhwZWN0YXRpb25zIG9mIGhvdyBpdCBzaG91bGQgb3BlcmF0ZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOSAwMToxMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtmaXhlZF9waHlfcmVnaXN0ZXImIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM9NDgyPXN0YXRpYyBpbnQgX19pbml0IGRzYV9sb29wX2luaXQodm9pZClcbi0tXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy00OTEtXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBOVU1fRklYRURfUEhZUzsgaSYjNDM7JiM0MzspXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzo0OTI6XHRcdHBoeWRldnNbaV0gPSBmaXhlZF9waHlfcmVnaXN0ZXJfMTAwZmQoKTtcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTQ5My1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9iNDQuYz0yMjM0PXN0YXRpYyBpbnQgYjQ0X3JlZ2lzdGVyX3BoeV9vbmUoc3RydWN0IGI0NCAqYnApXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYjQ0LmMtMjI3Mi1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2I0NC5jOjIyNzM6XHRcdHBoeWRldiA9IGZpeGVkX3BoeV9yZWdpc3Rlcl8xMDBmZCgpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYjQ0LmMtMjI3NC1cdFx0aWYgKCFJU19FUlIocGh5ZGV2KSlcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9iZ21hYy5jPTE0Mzk9aW50IGJnbWFjX3BoeV9jb25uZWN0X2RpcmVjdChzdHJ1Y3QgYmdtYWMgKmJnbWFjKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JnbWFjLmMtMTQ0OC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JnbWFjLmM6MTQ0OTpcdHBoeV9kZXYgPSBmaXhlZF9waHlfcmVnaXN0ZXIoXHUwMDI2ZnBoeV9zdGF0dXMsIE5VTEwpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYmdtYWMuYy0xNDUwLVx0aWYgKElTX0VSUihwaHlfZGV2KSkge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZhcmFkYXkvZnRnbWFjMTAwLmM9MTg0OD1zdGF0aWMgaW50IGZ0Z21hYzEwMF9wcm9iZV9uY3NpKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZmFyYWRheS9mdGdtYWMxMDAuYy0xODY2LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZmFyYWRheS9mdGdtYWMxMDAuYzoxODY3Olx0cGh5ZGV2ID0gZml4ZWRfcGh5X3JlZ2lzdGVyKFx1MDAyNm5jc2lfcGh5X3N0YXR1cywgbnApO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvZmFyYWRheS9mdGdtYWMxMDAuYy0xODY4LVx0aWYgKElTX0VSUihwaHlkZXYpKSB7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZlY19tYWluLmM9Mjk4MT1zdGF0aWMgaW50IGZlY19lbmV0X21paV9wcm9iZShzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZmVjX21haW4uYy0zMDAyLVx0XHRcdG5ldGRldl9pbmZvKG5kZXYsIFwmIzM0O25vIFBIWSwgYXNzdW1pbmcgZGlyZWN0IGNvbm5lY3Rpb24gdG8gc3dpdGNoXFxuXCYjMzQ7KTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mZWNfbWFpbi5jOjMwMDM6XHRcdFx0cGh5X2RldiA9IGZpeGVkX3BoeV9yZWdpc3Rlcl8xMDBmZCgpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZlY19tYWluLmMtMzAwNC1cdFx0XHRpZiAoSVNfRVJSKHBoeV9kZXYpKSB7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2hpYm1jZ2UvaGJnX21kaW8uYz0yMzg9c3RhdGljIGludCBoYmdfZml4ZWRfcGh5X2luaXQoc3RydWN0IGhiZ19wcml2ICpwcml2KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9oaWJtY2dlL2hiZ19tZGlvLmMtMjUwLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2hpYm1jZ2UvaGJnX21kaW8uYzoyNTE6XHRwaHlkZXYgPSBmaXhlZF9waHlfcmVnaXN0ZXIoXHUwMDI2aGJnX2ZpeGVkX3BoeV9zdGF0dXMsIE5VTEwpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2hpYm1jZ2UvaGJnX21kaW8uYy0yNTItXHRpZiAoSVNfRVJSKHBoeWRldikpIHtcbi0tXG5kcml2ZXJzL25ldC9tZGlvL29mX21kaW8uYz00MTI9aW50IG9mX3BoeV9yZWdpc3Rlcl9maXhlZF9saW5rKHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnApXG4tLVxuZHJpdmVycy9uZXQvbWRpby9vZl9tZGlvLmMtNDU5LXJlZ2lzdGVyX3BoeTpcbmRyaXZlcnMvbmV0L21kaW8vb2ZfbWRpby5jOjQ2MDpcdHJldHVybiBQVFJfRVJSX09SX1pFUk8oZml4ZWRfcGh5X3JlZ2lzdGVyKFx1MDAyNnN0YXR1cywgbnApKTtcbmRyaXZlcnMvbmV0L21kaW8vb2ZfbWRpby5jLTQ2MS19XG4tLVxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jPTExOD1zdGF0aWMgaW50IGZpeGVkX3BoeV9nZXRfZnJlZV9hZGRyKHZvaWQpXG4tLVxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jLTEzMC1cbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYzoxMzE6c3RydWN0IHBoeV9kZXZpY2UgKmZpeGVkX3BoeV9yZWdpc3Rlcihjb25zdCBzdHJ1Y3QgZml4ZWRfcGh5X3N0YXR1cyAqc3RhdHVzLFxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jLTEzMi1cdFx0XHRcdCAgICAgIHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnApXG4tLVxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jLTE3Mi19XG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmM6MTczOkVYUE9SVF9TWU1CT0xfR1BMKGZpeGVkX3BoeV9yZWdpc3Rlcik7XG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmMtMTc0LVxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jOjE3NTpzdHJ1Y3QgcGh5X2RldmljZSAqZml4ZWRfcGh5X3JlZ2lzdGVyXzEwMGZkKHZvaWQpXG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmMtMTc2LXtcbi0tXG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmMtMTgxLVxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jOjE4MjpcdHJldHVybiBmaXhlZF9waHlfcmVnaXN0ZXIoXHUwMDI2c3RhdHVzLCBOVUxMKTtcbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYy0xODMtfVxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jOjE4NDpFWFBPUlRfU1lNQk9MX0dQTChmaXhlZF9waHlfcmVnaXN0ZXJfMTAwZmQpO1xuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jLTE4NS1cbi0tXG5pbmNsdWRlL2xpbnV4L3BoeV9maXhlZC5oPTE5PWV4dGVybiBpbnQgZml4ZWRfcGh5X2NoYW5nZV9jYXJyaWVyKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGJvb2wgbmV3X2NhcnJpZXIpO1xuaW5jbHVkZS9saW51eC9waHlfZml4ZWQuaDoyMDpzdHJ1Y3QgcGh5X2RldmljZSAqZml4ZWRfcGh5X3JlZ2lzdGVyKGNvbnN0IHN0cnVjdCBmaXhlZF9waHlfc3RhdHVzICpzdGF0dXMsXG5pbmNsdWRlL2xpbnV4L3BoeV9maXhlZC5oLTIxLVx0XHRcdFx0ICAgICAgc3RydWN0IGRldmljZV9ub2RlICpucCk7XG5pbmNsdWRlL2xpbnV4L3BoeV9maXhlZC5oOjIyOnN0cnVjdCBwaHlfZGV2aWNlICpmaXhlZF9waHlfcmVnaXN0ZXJfMTAwZmQodm9pZCk7XG5pbmNsdWRlL2xpbnV4L3BoeV9maXhlZC5oLTIzLVxuLS1cbmluY2x1ZGUvbGludXgvcGh5X2ZpeGVkLmg9Mjk9c3RhdGljIGlubGluZSBzdHJ1Y3QgcGh5X2RldmljZSAqXG5pbmNsdWRlL2xpbnV4L3BoeV9maXhlZC5oOjMwOmZpeGVkX3BoeV9yZWdpc3Rlcihjb25zdCBzdHJ1Y3QgZml4ZWRfcGh5X3N0YXR1cyAqc3RhdHVzLFxuaW5jbHVkZS9saW51eC9waHlfZml4ZWQuaC0zMS1cdFx0ICAgc3RydWN0IGRldmljZV9ub2RlICpucClcbi0tXG5pbmNsdWRlL2xpbnV4L3BoeV9maXhlZC5oLTM1LVxuaW5jbHVkZS9saW51eC9waHlfZml4ZWQuaDozNjpzdGF0aWMgaW5saW5lIHN0cnVjdCBwaHlfZGV2aWNlICpmaXhlZF9waHlfcmVnaXN0ZXJfMTAwZmQodm9pZClcbmluY2x1ZGUvbGludXgvcGh5X2ZpeGVkLmgtMzcte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA5IDAxOjEyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU5NDQ0CgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogNjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBGaXhlZCBQSFkgRHJpdmVyKioKCk9rYXksIHNvIHRoZSBgZml4ZWRfcGh5YCBkcml2ZXIgc2VlbXMgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZCDigJMgaXQmIzM5O3MgZGVzaWduZWQgdG8gcmVnaXN0ZXIgYSBQSFkgd2l0aCBhIHNwZWNpZmljLCBoYXJkY29kZWQgSUQ6IGBmaXhlZF9waHlfaWRgLiBIbW0sIHRoYXQmIzM5O3Mgbm90IHZlcnkgZmxleGlibGUuIEl0JiMzOTtzIGVzc2VudGlhbGx5IGxvY2tpbmcgdXMgaW50byBhIHBhcnRpY3VsYXIgY29uZmlndXJhdGlvbi4gQnV0IHdhaXQsIGEgdGhvdWdodCBzdHJpa2VzIG1lOiBjYW4gU3l6a2FsbGVyLCB3aXRoIGl0cyBhYmlsaXR5IHRvIG1hbmlwdWxhdGUgYW5kIGNyZWF0ZSB2aXJ0dWFsIGhhcmR3YXJlLCBwb3RlbnRpYWxseSBjcmVhdGUgYSBkdW1teSBNRElPIGJ1cyBhbmQgcmVnaXN0ZXIgUEhZcyB3aXRoICphcmJpdHJhcnkqIElEcywgZXNzZW50aWFsbHkgYnlwYXNzaW5nIHRoaXMgaGFyZGNvZGVkIHJlc3RyaWN0aW9uPyBUaGlzIGNvdWxkIGhhdmUgaW50ZXJlc3RpbmcgaW1wbGljYXRpb25zLiBJZiB3ZSBjb3VsZCBnZXQgdGhhdCB3b3JraW5nLCBpdCBjb3VsZCBwcm92aWRlIHNvbWUgdXNlZnVsIGZ1enppbmcgY292ZXJhZ2UuIFRoZSBrZXkgcXVlc3Rpb24gaXMgd2hldGhlciBTeXprYWxsZXImIzM5O3MgTURJTyBjYXBhYmlsaXRpZXMgaW5jbHVkZSBzdWNoIGZ1bmN0aW9uYWxpdHksIGFuZCBJIHN1c3BlY3QgdGhhdCBpcyBhIHRoaW5nIHRvIGJlIGV4YW1pbmVkLiBMZXQgbWUgZG8gYSBxdWljayBzY2FuIG9mIHRoZSBTeXprYWxsZXIgZG9jdW1lbnRhdGlvbiBhbmQgY29kZSB0byBzZWUgd2hhdCBraW5kIG9mIE1ESU8gc3VwcG9ydCBpcyBpbiBwbGFjZS4gSSBzaG91bGQgYmUgYWJsZSB0byBnZXQgYSBiZXR0ZXIgYW5zd2VyIGlmIEkgc2VhcmNoIHNwZWNpZmljYWxseSBmb3Iga2V5d29yZHMgcmVsYXRpbmcgdG8gU3l6a2FsbGVyIGFuZCBNRElPLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOSAwMToxMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3N5el8uKm1kaW8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOSAwMToxMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1OTc2MQoJCQkJCQkJb3V0cHV0OiAxOQoJCQkJCQkJdGhvdWdodHM6IDEwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgcHJlc2VudGVkIGFzIGlmIGl0IHdlcmUgbXkgb3duIGludGVybmFsIG1vbm9sb2d1ZToKCioqQ29uc2lkZXJpbmcgYSBTcGVjaWZpYyBOYW1pbmcgQ29udmVudGlvbioqCgpBbHJpZ2h0LCBsZXQmIzM5O3Mgc2VlLi4uIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgcGF0dGVybnMgaGVyZS4gSSYjMzk7dmUgYmVlbiB3b3JraW5nIHdpdGggdGhpcyBkYXRhc2V0LCB0aGlzIGFsZ29yaXRobSwgdGhpcyBzeXN0ZW0sIHdoYXRldmVyIGl0IGlzLi4uIGFuZCBJIGtlZXAgc2VlaW5nIHRoZXNlIGVudHJpZXMuIE5vdywgSSYjMzk7bSB0cnlpbmcgdG8gd3JhcCBteSBoZWFkIGFyb3VuZCBhIHBhcnRpY3VsYXIgY29udmVudGlvbiBpbiB0aGlzIGluc3RhbmNlIC0gc3BlY2lmaWNhbGx5LCBhbnl0aGluZyB0aGF0IHN0YXJ0cyB3aXRoIGBzeXpfYCBmb2xsb3dlZCBieSwgd2VsbCwgKmFueXRoaW5nKiwgcmVhbGx5LCBhbmQgdGhlbiBlbmRzIHdpdGggYHBoeWAuIFRoYXQmIzM5O3MgdGhlIGtleS4gV2hhdCBpcyB0aGF0IHJlcHJlc2VudGluZz8gQXJlIHRoZXNlIHBoeXNpY2FsIHBoZW5vbWVuYT8gU2ltdWxhdGlvbnM/IEV4cGVyaW1lbnRhbCByZXN1bHRzPyBJcyBpdCBzb21ldGhpbmcgc3BlY2lmaWMgdG8gdGhlICpzeXoqIHBhcnQ/IFdoYXQgZG9lcyBpdCByZWxhdGUgdG8/CgpJJiMzOTttIHByb2JhYmx5IGRlYWxpbmcgd2l0aCBzb21lIHVuZGVybHlpbmcgcGh5c2ljcyBtb2RlbCB0aGVuLiBUaGF0IGBwaHlgIHN1ZmZpeCBpcyBzY3JlYW1pbmcgJiMzNDtwaHlzaWNhbCYjMzQ7LCAmIzM0O3BoeXNpY3MmIzM0Oywgc29tZXRoaW5nIHBoeXNpY2FsLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGF0LiBJIG5lZWQgdG8ga25vdyAqd2hhdCogaXQgaW5kaWNhdGVzLiBJdCBjb3VsZCBiZSBzb21lIHNwZWNpZmljIGZpbGUgZm9ybWF0LCBhIGRhdGEgY2F0ZWdvcnksIGEgcGFydGljdWxhciBwYXJhbWV0ZXIsIGEgcmVsYXRlZCB2YWx1ZSwgYW5kIEkgbmVlZCBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIHRoZSBkYXRhIGNvbnRleHQgdG8gZW5zdXJlIEkgdXNlIHRoYXQgZGF0YSBhcHByb3ByaWF0ZWx5IGFuZCBjb25zaWRlciBpdHMgbGltaXRhdGlvbnMgaW4gd2hhdGV2ZXIgbXkgbmV4dCBzdGVwcyBhcmUuIFRoaXMgaXMgYSB2ZXJ5IHRhcmdldGVkIHF1ZXJ5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOSAwMToxMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3N5el8uKnBoeSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA5IDAxOjEyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYwMDcwCgkJCQkJCQlvdXRwdXQ6IDE2CgkJCQkJCQl0aG91Z2h0czogMTcwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEN1cnJlbnQgVGhpbmtpbmcgb24gUEhZIERyaXZlciBJbnN0YW50aWF0aW9uIGFuZCBSZWFjaGFiaWxpdHkqKgoKT2theSwgc28gSSYjMzk7bSB0cnlpbmcgdG8gZmlndXJlIG91dCBob3cgdG8gZ2V0IGF0IHRoaXMgUEhZIGRyaXZlciB3aXRoaW4gdGhlIFFFTVUgZW52aXJvbm1lbnQuIFRoZSBmaXJzdCByb2FkYmxvY2sgaXMgdGhlIG9idmlvdXMgb25lOiBpZiBJIGNhbiYjMzk7dCBpbnN0YW50aWF0ZSB0aGUgZGFtbiB0aGluZyB3aXRoaW4gUUVNVSwgaXQmIzM5O3MgYmFzaWNhbGx5IHVucmVhY2hhYmxlIGZvciBteSB0ZXN0aW5nIHB1cnBvc2VzLiBTbywgaG93ICpkbyogSSBpbnN0YW50aWF0ZSBpdD8gSSYjMzk7bSBpbW1lZGlhdGVseSB0aGlua2luZywgY2FuIEkgbWF5YmUgZ2V0IGl0IGdvaW5nIGZyb20gdXNlcnNwYWNlIHNvbWVob3c/IE5vLCB0aGF0JiMzOTtzIG5vdCByaWdodC4gUEhZIGRldmljZXMgYXJlIGNyZWF0ZWQgYW5kIG1hbmFnZWQgYnkgdGhlIE1ESU8gYnVzIGRyaXZlciwgd2hpY2ggaXMgdGhlIGVudGl0eSBpbiBjb250cm9sIGhlcmUuCgpBbHJpZ2h0LCBzbyB0aGUgZm9jdXMgc2hpZnRzIHRvIHRoZSBNRElPIGJ1cyBkcml2ZXIuIElzIHRoZXJlIGEgd2F5IHRvIGJyaW5nIHRoYXQgdXAgZnJvbSB1c2Vyc3BhY2U/IFBvdGVudGlhbGx5IHRocm91Z2ggYGkyY2Agb3IgYHNwaWAsIG1heWJlPyBTb21lIE1ESU8gYnVzZXMgKmFyZSogb24gSTJDIG9yIFNQSSBpbnRlcmZhY2VzLCBidXQgdHlwaWNhbGx5LCB0aGV5JiMzOTtyZSBtZW1vcnktbWFwcGVkLCB3aGljaCB3b3VsZCBydWxlIHRob3NlIG91dCBhcyBlYXN5IG9wdGlvbnMuIFdoYXQgYWJvdXQgYG1kaW8tZ3Bpb2A/IE5vdyB3ZSYjMzk7cmUgZ2V0dGluZyBzb21ld2hlcmUuIERldmljZSB0cmVlIHNlZW1zIGxpa2UgdGhlIGxpa2VseSByb3V0ZSBmb3IgYG1kaW8tZ3Bpb2AgYW5kIEkgdGhpbmsgdGhhdCYjMzk7cyB0aGUga2V5LgoKQnV0IGNhbiBzeXprYWxsZXIgbG9hZCBjdXN0b20gZGV2aWNlIHRyZWVzPyBJIGNhbiYjMzk7dCByZWNhbGwgaGF2aW5nIHNlZW4gdGhhdCBjYXBhYmlsaXR5IGluIHBsYWNlIGFuZCBpdCB0dXJucyBvdXQsIGl0IGNhbiYjMzk7dC4gTm90IGFyYml0cmFyeSBvbmVzIGFueXdheSwgc28gdGhhdCBpZGVhIGdldHMgc2hvdCBkb3duLiBOb3cgSSYjMzk7bSBncmFzcGluZyBhdCBzdHJhd3MuIFdhaXTigKYgaXMgdGhlcmUgYSAqdmlydHVhbCogTURJTyBidXMsIHNvbWV0aGluZyB0aGF0IHdvdWxkIGJlIGluc3RhbnRpYXRlZCB3aXRoaW4gdGhlIHNpbXVsYXRpb24/IExldCBtZSBjaGVja+KApiBJJiMzOTtsbCBoZWFkIG92ZXIgdG8gYGRyaXZlcnMvbmV0L21kaW8vbWRpby1tb2NrdXAuY2Agb3Igc29tZXRoaW5nIHNpbWlsYXIsIHNvbWV0aGluZyB0aGF0IG1pZ2h0IHNpbXVsYXRlIHRoaXMgZW52aXJvbm1lbnQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA5IDAxOjEyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21vY2t1cCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtcbkZ1bGwgb3V0cHV0IGlzIHRvbyBsb25nLCBzaG93aW5nIDUwMCBvdXQgb2YgMTEwNyBsaW5lcy5cblVzZSBtb3JlIHByZWNpc2UgZXhwcmVzc2lvbiBpZiBwb3NzaWJsZS5cblxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9ncGlvL2dwaW8tbW9ja3VwLnJzdD0zPUdQSU8gVGVzdGluZyBEcml2ZXJcbi0tXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2dwaW8vZ3Bpby1tb2NrdXAucnN0LTEzLVxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9ncGlvL2dwaW8tbW9ja3VwLnJzdDoxNDpUaGUgR1BJTyBUZXN0aW5nIERyaXZlciAoZ3Bpby1tb2NrdXApIHByb3ZpZGVzIGEgd2F5IHRvIGNyZWF0ZSBzaW11bGF0ZWQgR1BJT1xuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9ncGlvL2dwaW8tbW9ja3VwLnJzdC0xNS1jaGlwcyBmb3IgdGVzdGluZyBwdXJwb3Nlcy4gVGhlIGxpbmVzIGV4cG9zZWQgYnkgdGhlc2UgY2hpcHMgY2FuIGJlIGFjY2Vzc2VkXG4tLVxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9ncGlvL2dwaW8tbW9ja3VwLnJzdD0xOT1DcmVhdGluZyBzaW11bGF0ZWQgY2hpcHMgdXNpbmcgbW9kdWxlIHBhcmFtc1xuLS1cbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvZ3Bpby9ncGlvLW1vY2t1cC5yc3QtMjEtXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2dwaW8vZ3Bpby1tb2NrdXAucnN0OjIyOldoZW4gbG9hZGluZyB0aGUgZ3Bpby1tb2NrdXAgZHJpdmVyIGEgbnVtYmVyIG9mIHBhcmFtZXRlcnMgY2FuIGJlIHBhc3NlZCB0byB0aGVcbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvZ3Bpby9ncGlvLW1vY2t1cC5yc3QtMjMtbW9kdWxlLlxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9ncGlvL2dwaW8tbW9ja3VwLnJzdC0yNC1cbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvZ3Bpby9ncGlvLW1vY2t1cC5yc3Q6MjU6ICAgIGdwaW9fbW9ja3VwX3Jhbmdlc1xuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9ncGlvL2dwaW8tbW9ja3VwLnJzdC0yNi1cbi0tXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2dwaW8vZ3Bpby1tb2NrdXAucnN0LTMyLVxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9ncGlvL2dwaW8tbW9ja3VwLnJzdDozMzogICAgICAgIEV4YW1wbGU6IGdwaW9fbW9ja3VwX3Jhbmdlcz0tMSw4LC0xLDE2LDQwNSw0MDlcbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvZ3Bpby9ncGlvLW1vY2t1cC5yc3QtMzQtXG4tLVxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9ncGlvL2dwaW8tbW9ja3VwLnJzdC0zOC1cbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvZ3Bpby9ncGlvLW1vY2t1cC5yc3Q6Mzk6ICAgIGdwaW9fbW9ja3VwX25hbWVkX2xpbmVzXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2dwaW8vZ3Bpby1tb2NrdXAucnN0LTQwLVxuLS1cbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvZ3Bpby9ncGlvLW1vY2t1cC5yc3QtNDMtXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2dwaW8vZ3Bpby1tb2NrdXAucnN0OjQ0OiAgICAgICAgVGhlIG5hbWUgZm9ybWF0IGlzOiBncGlvLW1vY2t1cC1YLVkgd2hlcmUgWCBpcyBtb2NrdXAgY2hpcCYjMzk7cyBJRFxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9ncGlvL2dwaW8tbW9ja3VwLnJzdC00NS0gICAgICAgIGFuZCBZIGlzIHRoZSBsaW5lIG9mZnNldC5cbi0tXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2dwaW8vZ3Bpby1tb2NrdXAucnN0PTQ3PU1hbmlwdWxhdGluZyBzaW11bGF0ZWQgbGluZXNcbi0tXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2dwaW8vZ3Bpby1tb2NrdXAucnN0LTQ5LVxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9ncGlvL2dwaW8tbW9ja3VwLnJzdDo1MDpFYWNoIG1vY2t1cCBjaGlwIGNyZWF0ZXMgaXRzIG93biBzdWJkaXJlY3RvcnkgaW4gL3N5cy9rZXJuZWwvZGVidWcvZ3Bpby1tb2NrdXAvLlxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9ncGlvL2dwaW8tbW9ja3VwLnJzdC01MS1UaGUgZGlyZWN0b3J5IGlzIG5hbWVkIGFmdGVyIHRoZSBjaGlwJiMzOTtzIGxhYmVsLiBBIHN5bWxpbmsgaXMgYWxzbyBjcmVhdGVkLCBuYW1lZFxuLS1cbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvZ3Bpby9vYnNvbGV0ZS5yc3Q9ND1PYnNvbGV0ZSBHUElPIEFQSXNcbi0tXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2dwaW8vb2Jzb2xldGUucnN0LTExLSAgICBTeXNmcyBJbnRlcmZhY2UgXHUwMDNjLi4vLi4vdXNlcnNwYWNlLWFwaS9ncGlvL3N5c2ZzXHUwMDNlXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2dwaW8vb2Jzb2xldGUucnN0OjEyOiAgICBNb2NrdXAgVGVzdGluZyBNb2R1bGUgXHUwMDNjZ3Bpby1tb2NrdXBcdTAwM2VcbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvZ3Bpby9vYnNvbGV0ZS5yc3QtMTMtXG4tLVxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9rZXJuZWwtcGFyYW1ldGVycy50eHQ9OTU9S2VybmVsIHBhcmFtZXRlcnNcbi0tXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dC0xODc3LVxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9rZXJuZWwtcGFyYW1ldGVycy50eHQ6MTg3ODpcdGdwaW8tbW9ja3VwLmdwaW9fbW9ja3VwX3Jhbmdlc1xuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9rZXJuZWwtcGFyYW1ldGVycy50eHQtMTg3OS1cdFx0XHRbSFddIFNldHMgdGhlIHJhbmdlcyBvZiBncGlvY2hpcCBvZiBmb3IgdGhpcyBkZXZpY2UuXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dC0xODgwLVx0XHRcdEZvcm1hdDogXHUwMDNjc3RhcnQxXHUwMDNlLFx1MDAzY2VuZDFcdTAwM2UsXHUwMDNjc3RhcnQyXHUwMDNlLFx1MDAzY2VuZDJcdTAwM2UuLi5cbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUva2VybmVsLXBhcmFtZXRlcnMudHh0OjE4ODE6XHRncGlvLW1vY2t1cC5ncGlvX21vY2t1cF9uYW1lZF9saW5lc1xuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9rZXJuZWwtcGFyYW1ldGVycy50eHQtMTg4Mi1cdFx0XHRbSFddIExldCB0aGUgZHJpdmVyIGtub3cgR1BJTyBsaW5lcyBzaG91bGQgYmUgbmFtZWQuXG4tLVxuRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL2luY29tcGxldGUtZGV2aWNlcy55YW1sPTI2PXByb3BlcnRpZXM6XG4tLVxuRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL2luY29tcGxldGUtZGV2aWNlcy55YW1sLTI0Mi0gICAgICAgICAgLSBjb21wYXQzXG5Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvaW5jb21wbGV0ZS1kZXZpY2VzLnlhbWw6MjQzOiAgICAgICAgICAtIGdwaW8tbW9ja3VwXG5Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvaW5jb21wbGV0ZS1kZXZpY2VzLnlhbWwtMjQ0LSAgICAgICAgICAtIGdwaW8tc2ltdWxhdG9yXG4tLVxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2RzYS9kc2EucnN0PTE2MT1JdCBpcyBkZXNpcmFibGUgdGhhdCBhbGwgdGFnZ2luZyBwcm90b2NvbHMgYXJlIHRlc3RhYmxlIHdpdGggdGhlIGBgZHNhX2xvb3BgYFxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2RzYS9kc2EucnN0OjE2Mjptb2NrdXAgZHJpdmVyLCB3aGljaCBjYW4gYmUgYXR0YWNoZWQgdG8gYW55IG5ldHdvcmsgaW50ZXJmYWNlLiBUaGUgZ29hbCBpcyB0aGF0XG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZHNhL2RzYS5yc3QtMTYzLWFueSBuZXR3b3JrIGludGVyZmFjZSBzaG91bGQgYmUgY2FwYWJsZSBvZiB0cmFuc21pdHRpbmcgdGhlIHNhbWUgcGFja2V0IGluIHRoZVxuLS1cbk1BSU5UQUlORVJTPTExMTUyPVM6XHRNYWludGFpbmVkXG5NQUlOVEFJTkVSUzoxMTE1MzpGOlx0ZHJpdmVycy9ncGlvL2dwaW8tbW9ja3VwLmNcbk1BSU5UQUlORVJTLTExMTU0LUY6XHR0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9ncGlvL1xuLS1cbmRyaXZlcnMvZ3Bpby9LY29uZmlnPTIwNjQ9Y29uZmlnIEdQSU9fTU9DS1VQXG4tLVxuZHJpdmVycy9ncGlvL0tjb25maWctMjA3Mi1cdCAgVXNlciBjb3VsZCB1c2UgaXQgdGhyb3VnaCB0aGUgc2NyaXB0IGluXG5kcml2ZXJzL2dwaW8vS2NvbmZpZzoyMDczOlx0ICB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9ncGlvL2dwaW8tbW9ja3VwLnNoLiBSZWZlcmVuY2UgdGhlIHVzYWdlIGluXG5kcml2ZXJzL2dwaW8vS2NvbmZpZy0yMDc0LVx0ICBpdC5cbi0tXG5kcml2ZXJzL2dwaW8vTWFrZWZpbGU9MTI0PW9iai0kKENPTkZJR19HUElPX01NX0xBTlRJUSlcdFx0JiM0Mzs9IGdwaW8tbW0tbGFudGlxLm9cbmRyaXZlcnMvZ3Bpby9NYWtlZmlsZToxMjU6b2JqLSQoQ09ORklHX0dQSU9fTU9DS1VQKVx0XHQmIzQzOz0gZ3Bpby1tb2NrdXAub1xuZHJpdmVycy9ncGlvL01ha2VmaWxlLTEyNi1vYmotJChDT05GSUdfR1BJT19NT1hURVQpXHRcdCYjNDM7PSBncGlvLW1veHRldC5vXG4tLVxuZHJpdmVycy9ncGlvL2dwaW8tbW9ja3VwLmMtNDYtICovXG5kcml2ZXJzL2dwaW8vZ3Bpby1tb2NrdXAuYzo0NzpzdHJ1Y3QgZ3Bpb19tb2NrdXBfbGluZV9zdGF0dXMge1xuZHJpdmVycy9ncGlvL2dwaW8tbW9ja3VwLmMtNDgtXHRpbnQgZGlyO1xuLS1cbmRyaXZlcnMvZ3Bpby9ncGlvLW1vY2t1cC5jLTUzLVxuZHJpdmVycy9ncGlvL2dwaW8tbW9ja3VwLmM6NTQ6c3RydWN0IGdwaW9fbW9ja3VwX2NoaXAge1xuZHJpdmVycy9ncGlvL2dwaW8tbW9ja3VwLmMtNTUtXHRzdHJ1Y3QgZ3Bpb19jaGlwIGdjO1xuZHJpdmVycy9ncGlvL2dwaW8tbW9ja3VwLmM6NTY6XHRzdHJ1Y3QgZ3Bpb19tb2NrdXBfbGluZV9zdGF0dXMgKmxpbmVzO1xuZHJpdmVycy9ncGlvL2dwaW8tbW9ja3VwLmMtNTctXHRzdHJ1Y3QgaXJxX2RvbWFpbiAqaXJxX3NpbV9kb21haW47XG4tLVxuZHJpdmVycy9ncGlvL2dwaW8tbW9ja3VwLmMtNjEtXG5kcml2ZXJzL2dwaW8vZ3Bpby1tb2NrdXAuYzo2MjpzdHJ1Y3QgZ3Bpb19tb2NrdXBfZGJnZnNfcHJpdmF0ZSB7XG5kcml2ZXJzL2dwaW8vZ3Bpby1tb2NrdXAuYzo2MzpcdHN0cnVjdCBncGlvX21vY2t1cF9jaGlwICpjaGlwO1xuZHJpdmVycy9ncGlvL2dwaW8tbW9ja3VwLmMtNjQtXHR1bnNpZ25lZCBpbnQgb2Zmc2V0O1xuLS1cbmRyaXZlcnMvZ3Bpby9ncGlvLW1vY2t1cC5jLTY2LVxuZHJpdmVycy9ncGlvL2dwaW8tbW9ja3VwLmM6Njc6c3RhdGljIGludCBncGlvX21vY2t1cF9yYW5nZXNbR1BJT19NT0NLVVBfTUFYX1JBTkdFU107XG5kcml2ZXJzL2dwaW8vZ3Bpby1tb2NrdXAuYzo2ODpzdGF0aWMgaW50IGdwaW9fbW9ja3VwX251bV9yYW5nZXM7XG5kcml2ZXJzL2dwaW8vZ3Bpby1tb2NrdXAuYzo2OTptb2R1bGVfcGFyYW1fYXJyYXkoZ3Bpb19tb2NrdXBfcmFuZ2VzLCBpbnQsIFx1MDAyNmdwaW9fbW9ja3VwX251bV9yYW5nZXMsIDA0MDApO1xuZHJpdmVycy9ncGlvL2dwaW8tbW9ja3VwLmMtNzAtXG5kcml2ZXJzL2dwaW8vZ3Bpby1tb2NrdXAuYzo3MTpzdGF0aWMgYm9vbCBncGlvX21vY2t1cF9uYW1lZF9saW5lcztcbmRyaXZlcnMvZ3Bpby9ncGlvLW1vY2t1cC5jOjcyOm1vZHVsZV9wYXJhbV9uYW1lZChncGlvX21vY2t1cF9uYW1lZF9saW5lcyxcbmRyaXZlcnMvZ3Bpby9ncGlvLW1vY2t1cC5jOjczOlx0XHQgICBncGlvX21vY2t1cF9uYW1lZF9saW5lcywgYm9vbCwgMDQwMCk7XG5kcml2ZXJzL2dwaW8vZ3Bpby1tb2NrdXAuYy03NC1cbmRyaXZlcnMvZ3Bpby9ncGlvLW1vY2t1cC5jOjc1OnN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpncGlvX21vY2t1cF9kYmdfZGlyO1xuZHJpdmVycy9ncGlvL2dwaW8tbW9ja3VwLmMtNzYtXG5kcml2ZXJzL2dwaW8vZ3Bpby1tb2NrdXAuYzo3NzpzdGF0aWMgaW50IGdwaW9fbW9ja3VwX3JhbmdlX2Jhc2UodW5zaWduZWQgaW50IGluZGV4KVxuZHJpdmVycy9ncGlvL2dwaW8tbW9ja3VwLmMtNzgte1xuZHJpdmVycy9ncGlvL2dwaW8tbW9ja3VwLmM6Nzk6XHRyZXR1cm4gZ3Bpb19tb2NrdXBfcmFuZ2VzW2luZGV4ICogMl07XG5kcml2ZXJzL2dwaW8vZ3Bpby1tb2NrdXAuYy04MC19XG5kcml2ZXJzL2dwaW8vZ3Bpby1tb2NrdXAuYy04MS1cbmRyaXZlcnMvZ3Bpby9ncGlvLW1vY2t1cC5jOjgyOnN0YXRpYyBpbnQgZ3Bpb19tb2NrdXBfcmFuZ2VfbmdwaW8odW5zaWduZWQgaW50IGluZGV4KVxuZHJpdmVycy9ncGlvL2dwaW8tbW9ja3VwLmMtODMte1xuZHJpdmVycy9ncGlvL2dwaW8tbW9ja3VwLmM6ODQ6XHRyZXR1cm4gZ3Bpb19tb2NrdXBfcmFuZ2VzW2luZGV4ICogMiAmIzQzOyAxXTtcbmRyaXZlcnMvZ3Bpby9ncGlvLW1vY2t1cC5jLTg1LX1cbmRyaXZlcnMvZ3Bpby9ncGlvLW1vY2t1cC5jLTg2LVxuZHJpdmVycy9ncGlvL2dwaW8tbW9ja3VwLmM6ODc6c3RhdGljIGludCBfX2dwaW9fbW9ja3VwX2dldChzdHJ1Y3QgZ3Bpb19tb2NrdXBfY2hpcCAqY2hpcCxcbmRyaXZlcnMvZ3Bpby9ncGlvLW1vY2t1cC5jLTg4LVx0XHRcdCAgICAgdW5zaWduZWQgaW50IG9mZnNldClcbi0tXG5kcml2ZXJzL2dwaW8vZ3Bpby1tb2NrdXAuYy05Mi1cbmRyaXZlcnMvZ3Bpby9ncGlvLW1vY2t1cC5jOjkzOnN0YXRpYyBpbnQgZ3Bpb19tb2NrdXBfZ2V0KHN0cnVjdCBncGlvX2NoaXAgKmdjLCB1bnNpZ25lZCBpbnQgb2Zmc2V0KVxuZHJpdmVycy9ncGlvL2dwaW8tbW9ja3VwLmMtOTQte1xuZHJpdmVycy9ncGlvL2dwaW8tbW9ja3VwLmM6OTU6XHRzdHJ1Y3QgZ3Bpb19tb2NrdXBfY2hpcCAqY2hpcCA9IGdwaW9jaGlwX2dldF9kYXRhKGdjKTtcbmRyaXZlcnMvZ3Bpby9ncGlvLW1vY2t1cC5jLTk2LVx0aW50IHZhbDtcbi0tXG5kcml2ZXJzL2dwaW8vZ3Bpby1tb2NrdXAuYy05OC1cdHNjb3BlZF9ndWFyZChtdXRleCwgXHUwMDI2Y2hpcC1cdTAwM2Vsb2NrKVxuZHJpdmVycy9ncGlvL2dwaW8tbW9ja3VwLmM6OTk6XHRcdHZhbCA9IF9fZ3Bpb19tb2NrdXBfZ2V0KGNoaXAsIG9mZnNldCk7XG5kcml2ZXJzL2dwaW8vZ3Bpby1tb2NrdXAuYy0xMDAtXG4tLVxuZHJpdmVycy9ncGlvL2dwaW8tbW9ja3VwLmMtMTAzLVxuZHJpdmVycy9ncGlvL2dwaW8tbW9ja3VwLmM6MTA0OnN0YXRpYyBpbnQgZ3Bpb19tb2NrdXBfZ2V0X211bHRpcGxlKHN0cnVjdCBncGlvX2NoaXAgKmdjLFxuZHJpdmVycy9ncGlvL2dwaW8tbW9ja3VwLmMtMTA1LVx0XHRcdFx0ICAgIHVuc2lnbmVkIGxvbmcgKm1hc2ssIHVuc2lnbmVkIGxvbmcgKmJpdHMpXG5kcml2ZXJzL2dwaW8vZ3Bpby1tb2NrdXAuYy0xMDYte1xuZHJpdmVycy9ncGlvL2dwaW8tbW9ja3VwLmM6MTA3Olx0c3RydWN0IGdwaW9fbW9ja3VwX2NoaXAgKmNoaXAgPSBncGlvY2hpcF9nZXRfZGF0YShnYyk7XG5kcml2ZXJzL2dwaW8vZ3Bpby1tb2NrdXAuYy0xMDgtXHR1bnNpZ25lZCBpbnQgYml0LCB2YWw7XG4tLVxuZHJpdmVycy9ncGlvL2dwaW8tbW9ja3VwLmMtMTExLVx0XHRmb3JfZWFjaF9zZXRfYml0KGJpdCwgbWFzaywgZ2MtXHUwMDNlbmdwaW8pIHtcbmRyaXZlcnMvZ3Bpby9ncGlvLW1vY2t1cC5jOjExMjpcdFx0XHR2YWwgPSBfX2dwaW9fbW9ja3VwX2dldChjaGlwLCBiaXQpO1xuZHJpdmVycy9ncGlvL2dwaW8tbW9ja3VwLmMtMTEzLVx0XHRcdF9fYXNzaWduX2JpdChiaXQsIGJpdHMsIHZhbCk7XG4tLVxuZHJpdmVycy9ncGlvL2dwaW8tbW9ja3VwLmMtMTE5LVxuZHJpdmVycy9ncGlvL2dwaW8tbW9ja3VwLmM6MTIwOnN0YXRpYyB2b2lkIF9fZ3Bpb19tb2NrdXBfc2V0KHN0cnVjdCBncGlvX21vY2t1cF9jaGlwICpjaGlwLFxuZHJpdmVycy9ncGlvL2dwaW8tbW9ja3VwLmMtMTIxLVx0XHRcdCAgICAgIHVuc2lnbmVkIGludCBvZmZzZXQsIGludCB2YWx1ZSlcbi0tXG5kcml2ZXJzL2dwaW8vZ3Bpby1tb2NrdXAuYy0xMjUtXG5kcml2ZXJzL2dwaW8vZ3Bpby1tb2NrdXAuYzoxMjY6c3RhdGljIGludCBncGlvX21vY2t1cF9zZXQoc3RydWN0IGdwaW9fY2hpcCAqZ2MsXG5kcml2ZXJzL2dwaW8vZ3Bpby1tb2NrdXAuYy0xMjctXHRcdFx0ICAgdW5zaWduZWQgaW50IG9mZnNldCwgaW50IHZhbHVlKVxuZHJpdmVycy9ncGlvL2dwaW8tbW9ja3VwLmMtMTI4LXtcbmRyaXZlcnMvZ3Bpby9ncGlvLW1vY2t1cC5jOjEyOTpcdHN0cnVjdCBncGlvX21vY2t1cF9jaGlwICpjaGlwID0gZ3Bpb2NoaXBfZ2V0X2RhdGEoZ2MpO1xuZHJpdmVycy9ncGlvL2dwaW8tbW9ja3VwLmMtMTMwLVxuLS1cbmRyaXZlcnMvZ3Bpby9ncGlvLW1vY2t1cC5jLTEzMi1cbmRyaXZlcnMvZ3Bpby9ncGlvLW1vY2t1cC5jOjEzMzpcdF9fZ3Bpb19tb2NrdXBfc2V0KGNoaXAsIG9mZnNldCwgdmFsdWUpO1xuZHJpdmVycy9ncGlvL2dwaW8tbW9ja3VwLmMtMTM0LVxuLS1cbmRyaXZlcnMvZ3Bpby9ncGlvLW1vY2t1cC5jLTEzNy1cbmRyaXZlcnMvZ3Bpby9ncGlvLW1vY2t1cC5jOjEzODpzdGF0aWMgaW50IGdwaW9fbW9ja3VwX3NldF9tdWx0aXBsZShzdHJ1Y3QgZ3Bpb19jaGlwICpnYyxcbmRyaXZlcnMvZ3Bpby9ncGlvLW1vY2t1cC5jLTEzOS1cdFx0XHRcdCAgICB1bnNpZ25lZCBsb25nICptYXNrLCB1bnNpZ25lZCBsb25nICpiaXRzKVxuZHJpdmVycy9ncGlvL2dwaW8tbW9ja3VwLmMtMTQwLXtcbmRyaXZlcnMvZ3Bpby9ncGlvLW1vY2t1cC5jOjE0MTpcdHN0cnVjdCBncGlvX21vY2t1cF9jaGlwICpjaGlwID0gZ3Bpb2NoaXBfZ2V0X2RhdGEoZ2MpO1xuZHJpdmVycy9ncGlvL2dwaW8tbW9ja3VwLmMtMTQyLVx0dW5zaWduZWQgaW50IGJpdDtcbi0tXG5kcml2ZXJzL2dwaW8vZ3Bpby1tb2NrdXAuYy0xNDYtXHRmb3JfZWFjaF9zZXRfYml0KGJpdCwgbWFzaywgZ2MtXHUwMDNlbmdwaW8pXG5kcml2ZXJzL2dwaW8vZ3Bpby1tb2NrdXAuYzoxNDc6XHRcdF9fZ3Bpb19tb2NrdXBfc2V0KGNoaXAsIGJpdCwgdGVzdF9iaXQoYml0LCBiaXRzKSk7XG5kcml2ZXJzL2dwaW8vZ3Bpby1tb2NrdXAuYy0xNDgtXG4tLVxuZHJpdmVycy9ncGlvL2dwaW8tbW9ja3VwLmMtMTUxLVxuZHJpdmVycy9ncGlvL2dwaW8tbW9ja3VwLmM6MTUyOnN0YXRpYyBpbnQgZ3Bpb19tb2NrdXBfYXBwbHlfcHVsbChzdHJ1Y3QgZ3Bpb19tb2NrdXBfY2hpcCAqY2hpcCxcbmRyaXZlcnMvZ3Bpby9ncGlvLW1vY2t1cC5jLTE1My1cdFx0XHRcdCAgdW5zaWduZWQgaW50IG9mZnNldCwgaW50IHZhbHVlKVxuZHJpdmVycy9ncGlvL2dwaW8tbW9ja3VwLmMtMTU0LXtcbmRyaXZlcnMvZ3Bpby9ncGlvLW1vY2t1cC5jOjE1NTpcdHN0cnVjdCBncGlvX21vY2t1cF9saW5lX3N0YXR1cyAqbGluZSA9IFx1MDAyNmNoaXAtXHUwMDNlbGluZXNbb2Zmc2V0XTtcbmRyaXZlcnMvZ3Bpby9ncGlvLW1vY2t1cC5jLTE1Ni1cdGludCBjdXJyLCBpcnEsIGlycV90eXBlLCByZXQgPSAwO1xuLS1cbmRyaXZlcnMvZ3Bpby9ncGlvLW1vY2t1cC5jLTE2MC1cdGlmIChsaW5lLVx1MDAzZXJlcXVlc3RlZCBcdTAwMjZcdTAwMjYgbGluZS1cdTAwM2VkaXIgPT0gR1BJT19MSU5FX0RJUkVDVElPTl9JTikge1xuZHJpdmVycy9ncGlvL2dwaW8tbW9ja3VwLmM6MTYxOlx0XHRjdXJyID0gX19ncGlvX21vY2t1cF9nZXQoY2hpcCwgb2Zmc2V0KTtcbmRyaXZlcnMvZ3Bpby9ncGlvLW1vY2t1cC5jLTE2Mi1cdFx0aWYgKGN1cnIgPT0gdmFsdWUpXG4tLVxuZHJpdmVycy9ncGlvL2dwaW8tbW9ja3VwLmMtMTg4LVx0aWYgKCFsaW5lLVx1MDAzZXJlcXVlc3RlZCB8fCBsaW5lLVx1MDAzZWRpciA9PSBHUElPX0xJTkVfRElSRUNUSU9OX0lOKVxuZHJpdmVycy9ncGlvL2dwaW8tbW9ja3VwLmM6MTg5Olx0XHRfX2dwaW9fbW9ja3VwX3NldChjaGlwLCBvZmZzZXQsIHZhbHVlKTtcbmRyaXZlcnMvZ3Bpby9ncGlvLW1vY2t1cC5jLTE5MC1cbi0tXG5kcml2ZXJzL2dwaW8vZ3Bpby1tb2NrdXAuYy0xOTUtXG5kcml2ZXJzL2dwaW8vZ3Bpby1tb2NrdXAuYzoxOTY6c3RhdGljIGludCBncGlvX21vY2t1cF9zZXRfY29uZmlnKHN0cnVjdCBncGlvX2NoaXAgKmdjLFxuZHJpdmVycy9ncGlvL2dwaW8tbW9ja3VwLmMtMTk3LVx0XHRcdFx0ICB1bnNpZ25lZCBpbnQgb2Zmc2V0LCB1bnNpZ25lZCBsb25nIGNvbmZpZylcbmRyaXZlcnMvZ3Bpby9ncGlvLW1vY2t1cC5jLTE5OC17XG5kcml2ZXJzL2dwaW8vZ3Bpby1tb2NrdXAuYzoxOTk6XHRzdHJ1Y3QgZ3Bpb19tb2NrdXBfY2hpcCAqY2hpcCA9IGdwaW9jaGlwX2dldF9kYXRhKGdjKTtcbmRyaXZlcnMvZ3Bpby9ncGlvLW1vY2t1cC5jLTIwMC1cbi0tXG5kcml2ZXJzL2dwaW8vZ3Bpby1tb2NrdXAuYy0yMDItXHRjYXNlIFBJTl9DT05GSUdfQklBU19QVUxMX1VQOlxuZHJpdmVycy9ncGlvL2dwaW8tbW9ja3VwLmM6MjAzOlx0XHRyZXR1cm4gZ3Bpb19tb2NrdXBfYXBwbHlfcHVsbChjaGlwLCBvZmZzZXQsIDEpO1xuZHJpdmVycy9ncGlvL2dwaW8tbW9ja3VwLmMtMjA0LVx0Y2FzZSBQSU5fQ09ORklHX0JJQVNfUFVMTF9ET1dOOlxuZHJpdmVycy9ncGlvL2dwaW8tbW9ja3VwLmM6MjA1Olx0XHRyZXR1cm4gZ3Bpb19tb2NrdXBfYXBwbHlfcHVsbChjaGlwLCBvZmZzZXQsIDApO1xuZHJpdmVycy9ncGlvL2dwaW8tbW9ja3VwLmMtMjA2LVx0ZGVmYXVsdDpcbi0tXG5kcml2ZXJzL2dwaW8vZ3Bpby1tb2NrdXAuYy0yMTEtXG5kcml2ZXJzL2dwaW8vZ3Bpby1tb2NrdXAuYzoyMTI6c3RhdGljIGludCBncGlvX21vY2t1cF9kaXJvdXQoc3RydWN0IGdwaW9fY2hpcCAqZ2MsXG5kcml2ZXJzL2dwaW8vZ3Bpby1tb2NrdXAuYy0yMTMtXHRcdFx0ICAgICAgdW5zaWduZWQgaW50IG9mZnNldCwgaW50IHZhbHVlKVxuZHJpdmVycy9ncGlvL2dwaW8tbW9ja3VwLmMtMjE0LXtcbmRyaXZlcnMvZ3Bpby9ncGlvLW1vY2t1cC5jOjIxNTpcdHN0cnVjdCBncGlvX21vY2t1cF9jaGlwICpjaGlwID0gZ3Bpb2NoaXBfZ2V0X2RhdGEoZ2MpO1xuZHJpdmVycy9ncGlvL2dwaW8tbW9ja3VwLmMtMjE2LVxuLS1cbmRyaXZlcnMvZ3Bpby9ncGlvLW1vY2t1cC5jLTIxOC1cdFx0Y2hpcC1cdTAwM2VsaW5lc1tvZmZzZXRdLmRpciA9IEdQSU9fTElORV9ESVJFQ1RJT05fT1VUO1xuZHJpdmVycy9ncGlvL2dwaW8tbW9ja3VwLmM6MjE5Olx0XHRfX2dwaW9fbW9ja3VwX3NldChjaGlwLCBvZmZzZXQsIHZhbHVlKTtcbmRyaXZlcnMvZ3Bpby9ncGlvLW1vY2t1cC5jLTIyMC1cdH1cbi0tXG5kcml2ZXJzL2dwaW8vZ3Bpby1tb2NrdXAuYy0yMjQtXG5kcml2ZXJzL2dwaW8vZ3Bpby1tb2NrdXAuYzoyMjU6c3RhdGljIGludCBncGlvX21vY2t1cF9kaXJpbihzdHJ1Y3QgZ3Bpb19jaGlwICpnYywgdW5zaWduZWQgaW50IG9mZnNldClcbmRyaXZlcnMvZ3Bpby9ncGlvLW1vY2t1cC5jLTIyNi17XG5kcml2ZXJzL2dwaW8vZ3Bpby1tb2NrdXAuYzoyMjc6XHRzdHJ1Y3QgZ3Bpb19tb2NrdXBfY2hpcCAqY2hpcCA9IGdwaW9jaGlwX2dldF9kYXRhKGdjKTtcbmRyaXZlcnMvZ3Bpby9ncGlvLW1vY2t1cC5jLTIyOC1cbi0tXG5kcml2ZXJzL2dwaW8vZ3Bpby1tb2NrdXAuYy0yMzQtXG5kcml2ZXJzL2dwaW8vZ3Bpby1tb2NrdXAuYzoyMzU6c3RhdGljIGludCBncGlvX21vY2t1cF9nZXRfZGlyZWN0aW9uKHN0cnVjdCBncGlvX2NoaXAgKmdjLCB1bnNpZ25lZCBpbnQgb2Zmc2V0KVxuZHJpdmVycy9ncGlvL2dwaW8tbW9ja3VwLmMtMjM2LXtcbmRyaXZlcnMvZ3Bpby9ncGlvLW1vY2t1cC5jOjIzNzpcdHN0cnVjdCBncGlvX21vY2t1cF9jaGlwICpjaGlwID0gZ3Bpb2NoaXBfZ2V0X2RhdGEoZ2MpO1xuZHJpdmVycy9ncGlvL2dwaW8tbW9ja3VwLmMtMjM4LVx0aW50IGRpcmVjdGlvbjtcbi0tXG5kcml2ZXJzL2dwaW8vZ3Bpby1tb2NrdXAuYy0yNDUtXG5kcml2ZXJzL2dwaW8vZ3Bpby1tb2NrdXAuYzoyNDY6c3RhdGljIGludCBncGlvX21vY2t1cF90b19pcnEoc3RydWN0IGdwaW9fY2hpcCAqZ2MsIHVuc2lnbmVkIGludCBvZmZzZXQpXG5kcml2ZXJzL2dwaW8vZ3Bpby1tb2NrdXAuYy0yNDcte1xuZHJpdmVycy9ncGlvL2dwaW8tbW9ja3VwLmM6MjQ4Olx0c3RydWN0IGdwaW9fbW9ja3VwX2NoaXAgKmNoaXAgPSBncGlvY2hpcF9nZXRfZGF0YShnYyk7XG5kcml2ZXJzL2dwaW8vZ3Bpby1tb2NrdXAuYy0yNDktXG4tLVxuZHJpdmVycy9ncGlvL2dwaW8tbW9ja3VwLmMtMjUyLVxuZHJpdmVycy9ncGlvL2dwaW8tbW9ja3VwLmM6MjUzOnN0YXRpYyBpbnQgZ3Bpb19tb2NrdXBfcmVxdWVzdChzdHJ1Y3QgZ3Bpb19jaGlwICpnYywgdW5zaWduZWQgaW50IG9mZnNldClcbmRyaXZlcnMvZ3Bpby9ncGlvLW1vY2t1cC5jLTI1NC17XG5kcml2ZXJzL2dwaW8vZ3Bpby1tb2NrdXAuYzoyNTU6XHRzdHJ1Y3QgZ3Bpb19tb2NrdXBfY2hpcCAqY2hpcCA9IGdwaW9jaGlwX2dldF9kYXRhKGdjKTtcbmRyaXZlcnMvZ3Bpby9ncGlvLW1vY2t1cC5jLTI1Ni1cbi0tXG5kcml2ZXJzL2dwaW8vZ3Bpby1tb2NrdXAuYy0yNjItXG5kcml2ZXJzL2dwaW8vZ3Bpby1tb2NrdXAuYzoyNjM6c3RhdGljIHZvaWQgZ3Bpb19tb2NrdXBfZnJlZShzdHJ1Y3QgZ3Bpb19jaGlwICpnYywgdW5zaWduZWQgaW50IG9mZnNldClcbmRyaXZlcnMvZ3Bpby9ncGlvLW1vY2t1cC5jLTI2NC17XG5kcml2ZXJzL2dwaW8vZ3Bpby1tb2NrdXAuYzoyNjU6XHRzdHJ1Y3QgZ3Bpb19tb2NrdXBfY2hpcCAqY2hpcCA9IGdwaW9jaGlwX2dldF9kYXRhKGdjKTtcbmRyaXZlcnMvZ3Bpby9ncGlvLW1vY2t1cC5jLTI2Ni1cbi0tXG5kcml2ZXJzL2dwaW8vZ3Bpby1tb2NrdXAuYy0yNjktXHRjaGlwLVx1MDAzZWxpbmVzW29mZnNldF0ucmVxdWVzdGVkID0gZmFsc2U7XG5kcml2ZXJzL2dwaW8vZ3Bpby1tb2NrdXAuYzoyNzA6XHRfX2dwaW9fbW9ja3VwX3NldChjaGlwLCBvZmZzZXQsIGNoaXAtXHUwMDNlbGluZXNbb2Zmc2V0XS5wdWxsKTtcbmRyaXZlcnMvZ3Bpby9ncGlvLW1vY2t1cC5jLTI3MS19XG5kcml2ZXJzL2dwaW8vZ3Bpby1tb2NrdXAuYy0yNzItXG5kcml2ZXJzL2dwaW8vZ3Bpby1tb2NrdXAuYzoyNzM6c3RhdGljIHNzaXplX3QgZ3Bpb19tb2NrdXBfZGVidWdmc19yZWFkKHN0cnVjdCBmaWxlICpmaWxlLFxuZHJpdmVycy9ncGlvL2dwaW8tbW9ja3VwLmMtMjc0LVx0XHRcdFx0XHRjaGFyIF9fdXNlciAqdXNyX2J1Zixcbi0tXG5kcml2ZXJzL2dwaW8vZ3Bpby1tb2NrdXAuYy0yNzYte1xuZHJpdmVycy9ncGlvL2dwaW8tbW9ja3VwLmM6Mjc3Olx0c3RydWN0IGdwaW9fbW9ja3VwX2RiZ2ZzX3ByaXZhdGUgKnByaXY7XG5kcml2ZXJzL2dwaW8vZ3Bpby1tb2NrdXAuYzoyNzg6XHRzdHJ1Y3QgZ3Bpb19tb2NrdXBfY2hpcCAqY2hpcDtcbmRyaXZlcnMvZ3Bpby9ncGlvLW1vY2t1cC5jLTI3OS1cdHN0cnVjdCBzZXFfZmlsZSAqc2ZpbGU7XG4tLVxuZHJpdmVycy9ncGlvL2dwaW8tbW9ja3VwLmMtMjkxLVxuZHJpdmVycy9ncGlvL2dwaW8tbW9ja3VwLmM6MjkyOlx0dmFsID0gZ3Bpb19tb2NrdXBfZ2V0KGdjLCBwcml2LVx1MDAzZW9mZnNldCk7XG5kcml2ZXJzL2dwaW8vZ3Bpby1tb2NrdXAuYy0yOTMtXHRjbnQgPSBzbnByaW50ZihidWYsIHNpemVvZihidWYpLCBcJiMzNDslZFxcblwmIzM0OywgdmFsKTtcbi0tXG5kcml2ZXJzL2dwaW8vZ3Bpby1tb2NrdXAuYy0yOTctXG5kcml2ZXJzL2dwaW8vZ3Bpby1tb2NrdXAuYzoyOTg6c3RhdGljIHNzaXplX3QgZ3Bpb19tb2NrdXBfZGVidWdmc193cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSxcbmRyaXZlcnMvZ3Bpby9ncGlvLW1vY2t1cC5jLTI5OS1cdFx0XHRcdFx0IGNvbnN0IGNoYXIgX191c2VyICp1c3JfYnVmLFxuLS1cbmRyaXZlcnMvZ3Bpby9ncGlvLW1vY2t1cC5jLTMwMS17XG5kcml2ZXJzL2dwaW8vZ3Bpby1tb2NrdXAuYzozMDI6XHRzdHJ1Y3QgZ3Bpb19tb2NrdXBfZGJnZnNfcHJpdmF0ZSAqcHJpdjtcbmRyaXZlcnMvZ3Bpby9ncGlvLW1vY2t1cC5jLTMwMy1cdGludCBydiwgdmFsO1xuLS1cbmRyaXZlcnMvZ3Bpby9ncGlvLW1vY2t1cC5jLTMxNi1cdHByaXYgPSBzZmlsZS1cdTAwM2Vwcml2YXRlO1xuZHJpdmVycy9ncGlvL2dwaW8tbW9ja3VwLmM6MzE3Olx0cnYgPSBncGlvX21vY2t1cF9hcHBseV9wdWxsKHByaXYtXHUwMDNlY2hpcCwgcHJpdi1cdTAwM2VvZmZzZXQsIHZhbCk7XG5kcml2ZXJzL2dwaW8vZ3Bpby1tb2NrdXAuYy0zMTgtXHRpZiAocnYpXG4tLVxuZHJpdmVycy9ncGlvL2dwaW8tbW9ja3VwLmMtMzIzLVxuZHJpdmVycy9ncGlvL2dwaW8tbW9ja3VwLmM6MzI0OnN0YXRpYyBpbnQgZ3Bpb19tb2NrdXBfZGVidWdmc19vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKVxuZHJpdmVycy9ncGlvL2dwaW8tbW9ja3VwLmMtMzI1LXtcbi0tXG5kcml2ZXJzL2dwaW8vZ3Bpby1tb2NrdXAuYy0zMjktLypcbmRyaXZlcnMvZ3Bpby9ncGlvLW1vY2t1cC5jOjMzMDogKiBFYWNoIG1vY2t1cCBjaGlwIGlzIHJlcHJlc2VudGVkIGJ5IGEgZGlyZWN0b3J5IG5hbWVkIGFmdGVyIHRoZSBjaGlwJiMzOTtzIGRldmljZVxuZHJpdmVycy9ncGlvL2dwaW8tbW9ja3VwLmM6MzMxOiAqIG5hbWUgdW5kZXIgL3N5cy9rZXJuZWwvZGVidWcvZ3Bpby1tb2NrdXAvLiBFYWNoIGxpbmUgaXMgcmVwcmVzZW50ZWQgYnlcbmRyaXZlcnMvZ3Bpby9ncGlvLW1vY2t1cC5jLTMzMi0gKiBhIGZpbGUgdXNpbmcgdGhlIGxpbmUmIzM5O3Mgb2Zmc2V0IGFzIHRoZSBuYW1lIHVuZGVyIHRoZSBjaGlwJiMzOTtzIGRpcmVjdG9yeS5cbi0tXG5kcml2ZXJzL2dwaW8vZ3Bpby1tb2NrdXAuYy0zMzQtICogUmVhZGluZyBmcm9tIHRoZSBsaW5lJiMzOTtzIGZpbGUgeWllbGRzIHRoZSBjdXJyZW50ICp2YWx1ZSosIHdyaXRpbmcgdG8gdGhlXG5kcml2ZXJzL2dwaW8vZ3Bpby1tb2NrdXAuYzozMzU6ICogbGluZSYjMzk7cyBmaWxlIGNoYW5nZXMgdGhlIGN1cnJlbnQgKnB1bGwqLiBEZWZhdWx0IHB1bGwgZm9yIG1vY2t1cCBsaW5lcyBpc1xuZHJpdmVycy9ncGlvL2dwaW8tbW9ja3VwLmMtMzM2LSAqIGRvd24uXG4tLVxuZHJpdmVycy9ncGlvL2dwaW8tbW9ja3VwLmMtMzQ5LSAqL1xuZHJpdmVycy9ncGlvL2dwaW8tbW9ja3VwLmM6MzUwOnN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGdwaW9fbW9ja3VwX2RlYnVnZnNfb3BzID0ge1xuZHJpdmVycy9ncGlvL2dwaW8tbW9ja3VwLmMtMzUxLVx0Lm93bmVyID0gVEhJU19NT0RVTEUsXG5kcml2ZXJzL2dwaW8vZ3Bpby1tb2NrdXAuYzozNTI6XHQub3BlbiA9IGdwaW9fbW9ja3VwX2RlYnVnZnNfb3BlbixcbmRyaXZlcnMvZ3Bpby9ncGlvLW1vY2t1cC5jOjM1MzpcdC5yZWFkID0gZ3Bpb19tb2NrdXBfZGVidWdmc19yZWFkLFxuZHJpdmVycy9ncGlvL2dwaW8tbW9ja3VwLmM6MzU0Olx0LndyaXRlID0gZ3Bpb19tb2NrdXBfZGVidWdmc193cml0ZSxcbmRyaXZlcnMvZ3Bpby9ncGlvLW1vY2t1cC5jLTM1NS1cdC5yZWxlYXNlID0gc2luZ2xlX3JlbGVhc2UsXG4tLVxuZHJpdmVycy9ncGlvL2dwaW8tbW9ja3VwLmMtMzU3LVxuZHJpdmVycy9ncGlvL2dwaW8tbW9ja3VwLmM6MzU4OnN0YXRpYyB2b2lkIGdwaW9fbW9ja3VwX2RlYnVnZnNfc2V0dXAoc3RydWN0IGRldmljZSAqZGV2LFxuZHJpdmVycy9ncGlvL2dwaW8tbW9ja3VwLmM6MzU5Olx0XHRcdFx0ICAgICAgc3RydWN0IGdwaW9fbW9ja3VwX2NoaXAgKmNoaXApXG5kcml2ZXJzL2dwaW8vZ3Bpby1tb2NrdXAuYy0zNjAte1xuZHJpdmVycy9ncGlvL2dwaW8tbW9ja3VwLmM6MzYxOlx0c3RydWN0IGdwaW9fbW9ja3VwX2RiZ2ZzX3ByaXZhdGUgKnByaXY7XG5kcml2ZXJzL2dwaW8vZ3Bpby1tb2NrdXAuYy0zNjItXHRzdHJ1Y3QgZ3Bpb19jaGlwICpnYztcbi0tXG5kcml2ZXJzL2dwaW8vZ3Bpby1tb2NrdXAuYy0zNzAtXHQgKiBUaGVyZSBjYW4gb25seSBiZSBhIHNpbmdsZSBHUElPIGRldmljZSBwZXIgcGxhdGZvcm0gZGV2aWNlIGluXG5kcml2ZXJzL2dwaW8vZ3Bpby1tb2NrdXAuYzozNzE6XHQgKiBncGlvLW1vY2t1cCBzbyB1c2luZyBkZXZpY2VfZmluZF9hbnlfY2hpbGQoKSBpcyBPSy5cbmRyaXZlcnMvZ3Bpby9ncGlvLW1vY2t1cC5jLTM3Mi1cdCAqL1xuLS1cbmRyaXZlcnMvZ3Bpby9ncGlvLW1vY2t1cC5jLTM3Ny1cdGRldm5hbWUgPSBkZXZfbmFtZShjaGlsZCk7XG5kcml2ZXJzL2dwaW8vZ3Bpby1tb2NrdXAuYzozNzg6XHRjaGlwLVx1MDAzZWRiZ19kaXIgPSBkZWJ1Z2ZzX2NyZWF0ZV9kaXIoZGV2bmFtZSwgZ3Bpb19tb2NrdXBfZGJnX2Rpcik7XG5kcml2ZXJzL2dwaW8vZ3Bpby1tb2NrdXAuYy0zNzktXG4tLVxuZHJpdmVycy9ncGlvL2dwaW8tbW9ja3VwLmMtMzkyLVx0XHRkZWJ1Z2ZzX2NyZWF0ZV9maWxlKG5hbWUsIDA2MDAsIGNoaXAtXHUwMDNlZGJnX2RpciwgcHJpdixcbmRyaXZlcnMvZ3Bpby9ncGlvLW1vY2t1cC5jOjM5MzpcdFx0XHRcdCAgICBcdTAwMjZncGlvX21vY2t1cF9kZWJ1Z2ZzX29wcyk7XG5kcml2ZXJzL2dwaW8vZ3Bpby1tb2NrdXAuYy0zOTQtXHR9XG4tLVxuZHJpdmVycy9ncGlvL2dwaW8tbW9ja3VwLmMtMzk2LVxuZHJpdmVycy9ncGlvL2dwaW8tbW9ja3VwLmM6Mzk3OnN0YXRpYyB2b2lkIGdwaW9fbW9ja3VwX2RlYnVnZnNfY2xlYW51cCh2b2lkICpkYXRhKVxuZHJpdmVycy9ncGlvL2dwaW8tbW9ja3VwLmMtMzk4LXtcbmRyaXZlcnMvZ3Bpby9ncGlvLW1vY2t1cC5jOjM5OTpcdHN0cnVjdCBncGlvX21vY2t1cF9jaGlwICpjaGlwID0gZGF0YTtcbmRyaXZlcnMvZ3Bpby9ncGlvLW1vY2t1cC5jLTQwMC1cbi0tXG5kcml2ZXJzL2dwaW8vZ3Bpby1tb2NrdXAuYy00MDMtXG5kcml2ZXJzL2dwaW8vZ3Bpby1tb2NrdXAuYzo0MDQ6c3RhdGljIHZvaWQgZ3Bpb19tb2NrdXBfZGlzcG9zZV9tYXBwaW5ncyh2b2lkICpkYXRhKVxuZHJpdmVycy9ncGlvL2dwaW8tbW9ja3VwLmMtNDA1LXtcbmRyaXZlcnMvZ3Bpby9ncGlvLW1vY2t1cC5jOjQwNjpcdHN0cnVjdCBncGlvX21vY2t1cF9jaGlwICpjaGlwID0gZGF0YTtcbmRyaXZlcnMvZ3Bpby9ncGlvLW1vY2t1cC5jLTQwNy1cdHN0cnVjdCBncGlvX2NoaXAgKmdjID0gXHUwMDI2Y2hpcC1cdTAwM2VnYztcbi0tXG5kcml2ZXJzL2dwaW8vZ3Bpby1tb2NrdXAuYy00MTYtXG5kcml2ZXJzL2dwaW8vZ3Bpby1tb2NrdXAuYzo0MTc6c3RhdGljIGludCBncGlvX21vY2t1cF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxuZHJpdmVycy9ncGlvL2dwaW8tbW9ja3VwLmMtNDE4LXtcbmRyaXZlcnMvZ3Bpby9ncGlvLW1vY2t1cC5jOjQxOTpcdHN0cnVjdCBncGlvX21vY2t1cF9jaGlwICpjaGlwO1xuZHJpdmVycy9ncGlvL2dwaW8tbW9ja3VwLmMtNDIwLVx0c3RydWN0IGdwaW9fY2hpcCAqZ2M7XG4tLVxuZHJpdmVycy9ncGlvL2dwaW8tbW9ja3VwLmMtNDUxLVx0Z2MtXHUwMDNlcGFyZW50ID0gZGV2O1xuZHJpdmVycy9ncGlvL2dwaW8tbW9ja3VwLmM6NDUyOlx0Z2MtXHUwMDNlZ2V0ID0gZ3Bpb19tb2NrdXBfZ2V0O1xuZHJpdmVycy9ncGlvL2dwaW8tbW9ja3VwLmM6NDUzOlx0Z2MtXHUwMDNlc2V0ID0gZ3Bpb19tb2NrdXBfc2V0O1xuZHJpdmVycy9ncGlvL2dwaW8tbW9ja3VwLmM6NDU0Olx0Z2MtXHUwMDNlZ2V0X211bHRpcGxlID0gZ3Bpb19tb2NrdXBfZ2V0X211bHRpcGxlO1xuZHJpdmVycy9ncGlvL2dwaW8tbW9ja3VwLmM6NDU1Olx0Z2MtXHUwMDNlc2V0X211bHRpcGxlID0gZ3Bpb19tb2NrdXBfc2V0X211bHRpcGxlO1xuZHJpdmVycy9ncGlvL2dwaW8tbW9ja3VwLmM6NDU2Olx0Z2MtXHUwMDNlZGlyZWN0aW9uX291dHB1dCA9IGdwaW9fbW9ja3VwX2Rpcm91dDtcbmRyaXZlcnMvZ3Bpby9ncGlvLW1vY2t1cC5jOjQ1NzpcdGdjLVx1MDAzZWRpcmVjdGlvbl9pbnB1dCA9IGdwaW9fbW9ja3VwX2RpcmluO1xuZHJpdmVycy9ncGlvL2dwaW8tbW9ja3VwLmM6NDU4Olx0Z2MtXHUwMDNlZ2V0X2RpcmVjdGlvbiA9IGdwaW9fbW9ja3VwX2dldF9kaXJlY3Rpb247XG5kcml2ZXJzL2dwaW8vZ3Bpby1tb2NrdXAuYzo0NTk6XHRnYy1cdTAwM2VzZXRfY29uZmlnID0gZ3Bpb19tb2NrdXBfc2V0X2NvbmZpZztcbmRyaXZlcnMvZ3Bpby9ncGlvLW1vY2t1cC5jOjQ2MDpcdGdjLVx1MDAzZXRvX2lycSA9IGdwaW9fbW9ja3VwX3RvX2lycTtcbmRyaXZlcnMvZ3Bpby9ncGlvLW1vY2t1cC5jOjQ2MTpcdGdjLVx1MDAzZXJlcXVlc3QgPSBncGlvX21vY2t1cF9yZXF1ZXN0O1xuZHJpdmVycy9ncGlvL2dwaW8tbW9ja3VwLmM6NDYyOlx0Z2MtXHUwMDNlZnJlZSA9IGdwaW9fbW9ja3VwX2ZyZWU7XG5kcml2ZXJzL2dwaW8vZ3Bpby1tb2NrdXAuYy00NjMtXG4tLVxuZHJpdmVycy9ncGlvL2dwaW8tbW9ja3VwLmMtNDc2LVxuZHJpdmVycy9ncGlvL2dwaW8tbW9ja3VwLmM6NDc3Olx0cnYgPSBkZXZtX2FkZF9hY3Rpb25fb3JfcmVzZXQoZGV2LCBncGlvX21vY2t1cF9kaXNwb3NlX21hcHBpbmdzLCBjaGlwKTtcbmRyaXZlcnMvZ3Bpby9ncGlvLW1vY2t1cC5jLTQ3OC1cdGlmIChydilcbi0tXG5kcml2ZXJzL2dwaW8vZ3Bpby1tb2NrdXAuYy00ODQtXG5kcml2ZXJzL2dwaW8vZ3Bpby1tb2NrdXAuYzo0ODU6XHRncGlvX21vY2t1cF9kZWJ1Z2ZzX3NldHVwKGRldiwgY2hpcCk7XG5kcml2ZXJzL2dwaW8vZ3Bpby1tb2NrdXAuYy00ODYtXG5kcml2ZXJzL2dwaW8vZ3Bpby1tb2NrdXAuYzo0ODc6XHRyZXR1cm4gZGV2bV9hZGRfYWN0aW9uX29yX3Jlc2V0KGRldiwgZ3Bpb19tb2NrdXBfZGVidWdmc19jbGVhbnVwLCBjaGlwKTtcbmRyaXZlcnMvZ3Bpby9ncGlvLW1vY2t1cC5jLTQ4OC19XG5kcml2ZXJzL2dwaW8vZ3Bpby1tb2NrdXAuYy00ODktXG5kcml2ZXJzL2dwaW8vZ3Bpby1tb2NrdXAuYzo0OTA6c3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgZ3Bpb19tb2NrdXBfb2ZfbWF0Y2hbXSA9IHtcbmRyaXZlcnMvZ3Bpby9ncGlvLW1vY2t1cC5jOjQ5MTpcdHsgLmNvbXBhdGlibGUgPSBcJiMzNDtncGlvLW1vY2t1cFwmIzM0OywgfSxcbmRyaXZlcnMvZ3Bpby9ncGlvLW1vY2t1cC5jLTQ5Mi1cdHt9LFxuZHJpdmVycy9ncGlvL2dwaW8tbW9ja3VwLmMtNDkzLX07XG5kcml2ZXJzL2dwaW8vZ3Bpby1tb2NrdXAuYzo0OTQ6TU9EVUxFX0RFVklDRV9UQUJMRShvZiwgZ3Bpb19tb2NrdXBfb2ZfbWF0Y2gpO1xuZHJpdmVycy9ncGlvL2dwaW8tbW9ja3VwLmMtNDk1LVxuZHJpdmVycy9ncGlvL2dwaW8tbW9ja3VwLmM6NDk2OnN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGdwaW9fbW9ja3VwX2RyaXZlciA9IHtcbmRyaXZlcnMvZ3Bpby9ncGlvLW1vY2t1cC5jLTQ5Ny1cdC5kcml2ZXIgPSB7XG5kcml2ZXJzL2dwaW8vZ3Bpby1tb2NrdXAuYzo0OTg6XHRcdC5uYW1lID0gXCYjMzQ7Z3Bpby1tb2NrdXBcJiMzNDssXG5kcml2ZXJzL2dwaW8vZ3Bpby1tb2NrdXAuYzo0OTk6XHRcdC5vZl9tYXRjaF90YWJsZSA9IGdwaW9fbW9ja3VwX29mX21hdGNoLFxuZHJpdmVycy9ncGlvL2dwaW8tbW9ja3VwLmMtNTAwLVx0fSxcbmRyaXZlcnMvZ3Bpby9ncGlvLW1vY2t1cC5jOjUwMTpcdC5wcm9iZSA9IGdwaW9fbW9ja3VwX3Byb2JlLFxuZHJpdmVycy9ncGlvL2dwaW8tbW9ja3VwLmMtNTAyLX07XG5kcml2ZXJzL2dwaW8vZ3Bpby1tb2NrdXAuYy01MDMtXG5kcml2ZXJzL2dwaW8vZ3Bpby1tb2NrdXAuYzo1MDQ6c3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmdwaW9fbW9ja3VwX3BkZXZzW0dQSU9fTU9DS1VQX01BWF9HQ107XG5kcml2ZXJzL2dwaW8vZ3Bpby1tb2NrdXAuYy01MDUtXG5kcml2ZXJzL2dwaW8vZ3Bpby1tb2NrdXAuYzo1MDY6c3RhdGljIHZvaWQgZ3Bpb19tb2NrdXBfdW5yZWdpc3Rlcl9wZGV2cyh2b2lkKVxuZHJpdmVycy9ncGlvL2dwaW8tbW9ja3VwLmMtNTA3LXtcbi0tXG5kcml2ZXJzL2dwaW8vZ3Bpby1tb2NrdXAuYy01MTItXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBHUElPX01PQ0tVUF9NQVhfR0M7IGkmIzQzOyYjNDM7KSB7XG5kcml2ZXJzL2dwaW8vZ3Bpby1tb2NrdXAuYzo1MTM6XHRcdHBkZXYgPSBncGlvX21vY2t1cF9wZGV2c1tpXTtcbmRyaXZlcnMvZ3Bpby9ncGlvLW1vY2t1cC5jLTUxNC1cdFx0aWYgKCFwZGV2KVxuLS1cbmRyaXZlcnMvZ3Bpby9ncGlvLW1vY2t1cC5jLTUyMi1cbmRyaXZlcnMvZ3Bpby9ncGlvLW1vY2t1cC5jOjUyMzpzdGF0aWMgaW50IF9faW5pdCBncGlvX21vY2t1cF9yZWdpc3Rlcl9jaGlwKGludCBpZHgpXG5kcml2ZXJzL2dwaW8vZ3Bpby1tb2NrdXAuYy01MjQte1xuLS1cbmRyaXZlcnMvZ3Bpby9ncGlvLW1vY2t1cC5jLTUzNi1cbmRyaXZlcnMvZ3Bpby9ncGlvLW1vY2t1cC5jOjUzNzpcdHNucHJpbnRmKGNoaXBfbGFiZWwsIHNpemVvZihjaGlwX2xhYmVsKSwgXCYjMzQ7Z3Bpby1tb2NrdXAtJWNcJiMzNDssIGlkeCAmIzQzOyAmIzM5O0EmIzM5Oyk7XG5kcml2ZXJzL2dwaW8vZ3Bpby1tb2NrdXAuYy01MzgtXHRwcm9wZXJ0aWVzW3Byb3AmIzQzOyYjNDM7XSA9IFBST1BFUlRZX0VOVFJZX1NUUklORyhcJiMzNDtjaGlwLWxhYmVsXCYjMzQ7LCBjaGlwX2xhYmVsKTtcbmRyaXZlcnMvZ3Bpby9ncGlvLW1vY2t1cC5jLTUzOS1cbmRyaXZlcnMvZ3Bpby9ncGlvLW1vY2t1cC5jOjU0MDpcdGJhc2UgPSBncGlvX21vY2t1cF9yYW5nZV9iYXNlKGlkeCk7XG5kcml2ZXJzL2dwaW8vZ3Bpby1tb2NrdXAuYy01NDEtXHRpZiAoYmFzZSBcdTAwM2U9IDApXG4tLVxuZHJpdmVycy9ncGlvL2dwaW8tbW9ja3VwLmMtNTQzLVxuZHJpdmVycy9ncGlvL2dwaW8tbW9ja3VwLmM6NTQ0Olx0bmdwaW8gPSBiYXNlIFx1MDAzYyAwID8gZ3Bpb19tb2NrdXBfcmFuZ2VfbmdwaW8oaWR4KVxuZHJpdmVycy9ncGlvL2dwaW8tbW9ja3VwLmM6NTQ1Olx0XHRcdCA6IGdwaW9fbW9ja3VwX3JhbmdlX25ncGlvKGlkeCkgLSBiYXNlO1xuZHJpdmVycy9ncGlvL2dwaW8tbW9ja3VwLmMtNTQ2LVx0cHJvcGVydGllc1twcm9wJiM0MzsmIzQzO10gPSBQUk9QRVJUWV9FTlRSWV9VMTYoXCYjMzQ7bnItZ3Bpb3NcJiMzNDssIG5ncGlvKTtcbmRyaXZlcnMvZ3Bpby9ncGlvLW1vY2t1cC5jLTU0Ny1cbmRyaXZlcnMvZ3Bpby9ncGlvLW1vY2t1cC5jOjU0ODpcdGlmIChncGlvX21vY2t1cF9uYW1lZF9saW5lcykge1xuZHJpdmVycy9ncGlvL2dwaW8tbW9ja3VwLmMtNTQ5LVx0XHRsaW5lX25hbWVzID0ga2FzcHJpbnRmX3N0cmFycmF5KEdGUF9LRVJORUwsIGNoaXBfbGFiZWwsIG5ncGlvKTtcbi0tXG5kcml2ZXJzL2dwaW8vZ3Bpby1tb2NrdXAuYy01NjItXG5kcml2ZXJzL2dwaW8vZ3Bpby1tb2NrdXAuYzo1NjM6XHRwZGV2aW5mby5uYW1lID0gXCYjMzQ7Z3Bpby1tb2NrdXBcJiMzNDs7XG5kcml2ZXJzL2dwaW8vZ3Bpby1tb2NrdXAuYy01NjQtXHRwZGV2aW5mby5pZCA9IGlkeDtcbi0tXG5kcml2ZXJzL2dwaW8vZ3Bpby1tb2NrdXAuYy01NzQtXG5kcml2ZXJzL2dwaW8vZ3Bpby1tb2NrdXAuYzo1NzU6XHRncGlvX21vY2t1cF9wZGV2c1tpZHhdID0gcGRldjtcbmRyaXZlcnMvZ3Bpby9ncGlvLW1vY2t1cC5jLTU3Ni1cbi0tXG5kcml2ZXJzL2dwaW8vZ3Bpby1tb2NrdXAuYy01NzktXG5kcml2ZXJzL2dwaW8vZ3Bpby1tb2NrdXAuYzo1ODA6c3RhdGljIGludCBfX2luaXQgZ3Bpb19tb2NrdXBfaW5pdCh2b2lkKVxuZHJpdmVycy9ncGlvL2dwaW8tbW9ja3VwLmMtNTgxLXtcbi0tXG5kcml2ZXJzL2dwaW8vZ3Bpby1tb2NrdXAuYy01ODMtXG5kcml2ZXJzL2dwaW8vZ3Bpby1tb2NrdXAuYzo1ODQ6XHRpZiAoKGdwaW9fbW9ja3VwX251bV9yYW5nZXMgJSAyKSB8fFxuZHJpdmVycy9ncGlvL2dwaW8tbW9ja3VwLmM6NTg1Olx0ICAgIChncGlvX21vY2t1cF9udW1fcmFuZ2VzIFx1MDAzZSBHUElPX01PQ0tVUF9NQVhfUkFOR0VTKSlcbmRyaXZlcnMvZ3Bpby9ncGlvLW1vY2t1cC5jLTU4Ni1cdFx0cmV0dXJuIC1FSU5WQUw7XG4tLVxuZHJpdmVycy9ncGlvL2dwaW8tbW9ja3VwLmMtNTg4LVx0LyogRWFjaCBjaGlwIGlzIGRlc2NyaWJlZCBieSB0d28gdmFsdWVzLiAqL1xuZHJpdmVycy9ncGlvL2dwaW8tbW9ja3VwLmM6NTg5Olx0bnVtX2NoaXBzID0gZ3Bpb19tb2NrdXBfbnVtX3JhbmdlcyAvIDI7XG5kcml2ZXJzL2dwaW8vZ3Bpby1tb2NrdXAuYy01OTAtXG4tLVxuZHJpdmVycy9ncGlvL2dwaW8tbW9ja3VwLmMtNTk1LVx0Zm9yIChpID0gMDsgaSBcdTAwM2MgbnVtX2NoaXBzOyBpJiM0MzsmIzQzOykge1xuZHJpdmVycy9ncGlvL2dwaW8tbW9ja3VwLmM6NTk2Olx0XHRiYXNlID0gZ3Bpb19tb2NrdXBfcmFuZ2VfYmFzZShpKTtcbmRyaXZlcnMvZ3Bpby9ncGlvLW1vY2t1cC5jOjU5NzpcdFx0bmdwaW8gPSBncGlvX21vY2t1cF9yYW5nZV9uZ3BpbyhpKTtcbmRyaXZlcnMvZ3Bpby9ncGlvLW1vY2t1cC5jLTU5OC1cbi0tXG5kcml2ZXJzL2dwaW8vZ3Bpby1tb2NrdXAuYy02MTAtXG5kcml2ZXJzL2dwaW8vZ3Bpby1tb2NrdXAuYzo2MTE6XHRncGlvX21vY2t1cF9kYmdfZGlyID0gZGVidWdmc19jcmVhdGVfZGlyKFwmIzM0O2dwaW8tbW9ja3VwXCYjMzQ7LCBOVUxMKTtcbmRyaXZlcnMvZ3Bpby9ncGlvLW1vY2t1cC5jLTYxMi1cbmRyaXZlcnMvZ3Bpby9ncGlvLW1vY2t1cC5jOjYxMzpcdGVyciA9IHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcihcdTAwMjZncGlvX21vY2t1cF9kcml2ZXIpO1xuZHJpdmVycy9ncGlvL2dwaW8tbW9ja3VwLmMtNjE0LVx0aWYgKGVycikge1xuZHJpdmVycy9ncGlvL2dwaW8tbW9ja3VwLmMtNjE1LVx0XHRwcl9lcnIoXCYjMzQ7ZXJyb3IgcmVnaXN0ZXJpbmcgcGxhdGZvcm0gZHJpdmVyXFxuXCYjMzQ7KTtcbmRyaXZlcnMvZ3Bpby9ncGlvLW1vY2t1cC5jOjYxNjpcdFx0ZGVidWdmc19yZW1vdmVfcmVjdXJzaXZlKGdwaW9fbW9ja3VwX2RiZ19kaXIpO1xuZHJpdmVycy9ncGlvL2dwaW8tbW9ja3VwLmMtNjE3LVx0XHRyZXR1cm4gZXJyO1xuLS1cbmRyaXZlcnMvZ3Bpby9ncGlvLW1vY2t1cC5jLTYyMC1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIG51bV9jaGlwczsgaSYjNDM7JiM0MzspIHtcbmRyaXZlcnMvZ3Bpby9ncGlvLW1vY2t1cC5jOjYyMTpcdFx0ZXJyID0gZ3Bpb19tb2NrdXBfcmVnaXN0ZXJfY2hpcChpKTtcbmRyaXZlcnMvZ3Bpby9ncGlvLW1vY2t1cC5jLTYyMi1cdFx0aWYgKGVycikge1xuZHJpdmVycy9ncGlvL2dwaW8tbW9ja3VwLmM6NjIzOlx0XHRcdHBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKFx1MDAyNmdwaW9fbW9ja3VwX2RyaXZlcik7XG5kcml2ZXJzL2dwaW8vZ3Bpby1tb2NrdXAuYzo2MjQ6XHRcdFx0Z3Bpb19tb2NrdXBfdW5yZWdpc3Rlcl9wZGV2cygpO1xuZHJpdmVycy9ncGlvL2dwaW8tbW9ja3VwLmM6NjI1Olx0XHRcdGRlYnVnZnNfcmVtb3ZlX3JlY3Vyc2l2ZShncGlvX21vY2t1cF9kYmdfZGlyKTtcbmRyaXZlcnMvZ3Bpby9ncGlvLW1vY2t1cC5jLTYyNi1cdFx0XHRyZXR1cm4gZXJyO1xuLS1cbmRyaXZlcnMvZ3Bpby9ncGlvLW1vY2t1cC5jLTYzMi1cbmRyaXZlcnMvZ3Bpby9ncGlvLW1vY2t1cC5jOjYzMzpzdGF0aWMgdm9pZCBfX2V4aXQgZ3Bpb19tb2NrdXBfZXhpdCh2b2lkKVxuZHJpdmVycy9ncGlvL2dwaW8tbW9ja3VwLmMtNjM0LXtcbmRyaXZlcnMvZ3Bpby9ncGlvLW1vY2t1cC5jOjYzNTpcdGdwaW9fbW9ja3VwX3VucmVnaXN0ZXJfcGRldnMoKTtcbmRyaXZlcnMvZ3Bpby9ncGlvLW1vY2t1cC5jOjYzNjpcdGRlYnVnZnNfcmVtb3ZlX3JlY3Vyc2l2ZShncGlvX21vY2t1cF9kYmdfZGlyKTtcbmRyaXZlcnMvZ3Bpby9ncGlvLW1vY2t1cC5jOjYzNzpcdHBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKFx1MDAyNmdwaW9fbW9ja3VwX2RyaXZlcik7XG5kcml2ZXJzL2dwaW8vZ3Bpby1tb2NrdXAuYy02MzgtfVxuZHJpdmVycy9ncGlvL2dwaW8tbW9ja3VwLmMtNjM5LVxuZHJpdmVycy9ncGlvL2dwaW8tbW9ja3VwLmM6NjQwOm1vZHVsZV9pbml0KGdwaW9fbW9ja3VwX2luaXQpO1xuZHJpdmVycy9ncGlvL2dwaW8tbW9ja3VwLmM6NjQxOm1vZHVsZV9leGl0KGdwaW9fbW9ja3VwX2V4aXQpO1xuZHJpdmVycy9ncGlvL2dwaW8tbW9ja3VwLmMtNjQyLVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jPTQ0Nj1zdGF0aWMgaW50IF9faW5pdCBkc2FfbG9vcF9jcmVhdGVfc3dpdGNoX21kaW9kZXYodm9pZClcbi0tXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy00NTUtXHRcdH0sXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzo0NTY6XHRcdC5uYW1lID0gXCYjMzQ7RFNBIG1vY2t1cCBkcml2ZXJcJiMzNDssXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy00NTctXHRcdC5lbmFibGVkX3BvcnRzID0gMHgxZixcbi0tXG5kcml2ZXJzL3NvdW5kd2lyZS9idXMuYz00MTU9c3RhdGljIGludCBzZHdfbnRyYW5zZmVyX25vX3BtKHN0cnVjdCBzZHdfc2xhdmUgKnNsYXZlLCB1MzIgYWRkciwgdTggZmxhZ3MsXG4tLVxuZHJpdmVycy9zb3VuZHdpcmUvYnVzLmMtNDMwLVx0XHRyZXQgPSBzZHdfdHJhbnNmZXIoc2xhdmUtXHUwMDNlYnVzLCBcdTAwMjZtc2cpO1xuZHJpdmVycy9zb3VuZHdpcmUvYnVzLmM6NDMxOlx0XHRpZiAocmV0IFx1MDAzYyAwIFx1MDAyNlx1MDAyNiAhc2xhdmUtXHUwMDNlaXNfbW9ja3VwX2RldmljZSlcbmRyaXZlcnMvc291bmR3aXJlL2J1cy5jLTQzMi1cdFx0XHRyZXR1cm4gcmV0O1xuLS1cbmRyaXZlcnMvc291bmR3aXJlL3N0cmVhbS5jPTEzMj1zdGF0aWMgaW50IHNkd19wcm9ncmFtX3NsYXZlX3BvcnRfcGFyYW1zKHN0cnVjdCBzZHdfYnVzICpidXMsXG4tLVxuZHJpdmVycy9zb3VuZHdpcmUvc3RyZWFtLmMtMTQ0LVxuZHJpdmVycy9zb3VuZHdpcmUvc3RyZWFtLmM6MTQ1Olx0aWYgKHNfcnQtXHUwMDNlc2xhdmUtXHUwMDNlaXNfbW9ja3VwX2RldmljZSlcbmRyaXZlcnMvc291bmR3aXJlL3N0cmVhbS5jLTE0Ni1cdFx0cmV0dXJuIDA7XG4tLVxuaW5jbHVkZS9saW51eC9zb3VuZHdpcmUvc2R3Lmg9NjE3PXN0cnVjdCBzZHdfc2xhdmVfb3BzIHtcbi0tXG5pbmNsdWRlL2xpbnV4L3NvdW5kd2lyZS9zZHcuaC02NjAtICogZm9yIGEgU2xhdmUgaGFwcGVucyBmb3IgdGhlIGZpcnN0IHRpbWUgYWZ0ZXIgZW51bWVyYXRpb25cbmluY2x1ZGUvbGludXgvc291bmR3aXJlL3Nkdy5oOjY2MTogKiBAaXNfbW9ja3VwX2RldmljZTogc3RhdHVzIGZsYWcgdXNlZCB0byBzcXVlbGNoIGVycm9ycyBpbiB0aGUgY29tbWFuZC9jb250cm9sXG5pbmNsdWRlL2xpbnV4L3NvdW5kd2lyZS9zZHcuaDo2NjI6ICogcHJvdG9jb2wgZm9yIFNvdW5kV2lyZSBtb2NrdXAgZGV2aWNlc1xuaW5jbHVkZS9saW51eC9zb3VuZHdpcmUvc2R3LmgtNjYzLSAqIEBzZHdfZGV2X2xvY2s6IG11dGV4IHVzZWQgdG8gcHJvdGVjdCBjYWxsYmFja3MvcmVtb3ZlIHJhY2VzXG4tLVxuaW5jbHVkZS9saW51eC9zb3VuZHdpcmUvc2R3Lmg9NjY2PXN0cnVjdCBzZHdfc2xhdmUge1xuLS1cbmluY2x1ZGUvbGludXgvc291bmR3aXJlL3Nkdy5oLTY4Ni1cdGJvb2wgZmlyc3RfaW50ZXJydXB0X2RvbmU7XG5pbmNsdWRlL2xpbnV4L3NvdW5kd2lyZS9zZHcuaDo2ODc6XHRib29sIGlzX21vY2t1cF9kZXZpY2U7XG5pbmNsdWRlL2xpbnV4L3NvdW5kd2lyZS9zZHcuaC02ODgtXHRzdHJ1Y3QgbXV0ZXggc2R3X2Rldl9sb2NrOyAvKiBwcm90ZWN0IGNhbGxiYWNrcy9yZW1vdmUgcmFjZXMgKi9cbi0tXG5zb3VuZC9zb2MvY29kZWNzL0tjb25maWc9MjAyNT1jb25maWcgU05EX1NPQ19TRFdfTU9DS1VQXG5zb3VuZC9zb2MvY29kZWNzL0tjb25maWc6MjAyNjpcdHRyaXN0YXRlIFwmIzM0O1NvdW5kV2lyZSBtb2NrdXAgY29kZWNcJiMzNDtcbnNvdW5kL3NvYy9jb2RlY3MvS2NvbmZpZy0yMDI3LVx0ZGVwZW5kcyBvbiBFWFBFUlRcbi0tXG5zb3VuZC9zb2MvY29kZWNzL0tjb25maWctMjAyOS1cdGhlbHBcbnNvdW5kL3NvYy9jb2RlY3MvS2NvbmZpZzoyMDMwOlx0ICBUaGlzIG9wdGlvbiBlbmFibGVzIGEgU291bmRXaXJlIG1vY2t1cCBjb2RlYyB0aGF0IGRvZXMgbm90IGRyaXZlIHRoZVxuc291bmQvc29jL2NvZGVjcy9LY29uZmlnLTIwMzEtXHQgIGJ1cywgdGFrZSBwYXJ0IGluIHRoZSBjb21tYW5kL2NvbW1hbmQgcHJvdG9jb2wgb3IgZ2VuZXJhdGUgZGF0YSBvbiBhXG4tLVxuc291bmQvc29jL2NvZGVjcy9LY29uZmlnLTIwMzUtXHQgIHRvcG9sb2dpZXMgdGhhdCBkaWZmZXIgZnJvbSB0aGUgYWN0dWFsIGhhcmR3YXJlIGxheW91dC5cbnNvdW5kL3NvYy9jb2RlY3MvS2NvbmZpZzoyMDM2Olx0ICBUaGlzIG1vY2t1cCBkZXZpY2UgY291bGQgYmUgdG90YWxseSB2aXJ0dWFsIGJ1dCBjb3VsZCBhbHNvIGJlIGFcbnNvdW5kL3NvYy9jb2RlY3MvS2NvbmZpZy0yMDM3LVx0ICByZWFsIHBoeXNpY2FsIG9uZSB3aXRoIG9uZSBrZXkgcmVzdHJpY3Rpb246IGl0IGlzIG5vdCBhbGxvd2VkIGJ5IHRoZVxuLS1cbnNvdW5kL3NvYy9jb2RlY3MvTWFrZWZpbGU9MjkxPXNuZC1zb2MtcnRxOTEyOC15IDo9IHJ0cTkxMjgub1xuc291bmQvc29jL2NvZGVjcy9NYWtlZmlsZToyOTI6c25kLXNvYy1zZHctbW9ja3VwLXkgOj0gc2R3LW1vY2t1cC5vXG5zb3VuZC9zb2MvY29kZWNzL01ha2VmaWxlLTI5My1zbmQtc29jLXNndGw1MDAwLXkgOj0gc2d0bDUwMDAub1xuLS1cbnNvdW5kL3NvYy9jb2RlY3MvTWFrZWZpbGU9NzMxPW9iai0kKENPTkZJR19TTkRfU09DX1JUUTkxMjgpXHQmIzQzOz0gc25kLXNvYy1ydHE5MTI4Lm9cbnNvdW5kL3NvYy9jb2RlY3MvTWFrZWZpbGU6NzMyOm9iai0kKENPTkZJR19TTkRfU09DX1NEV19NT0NLVVApICAgICAmIzQzOz0gc25kLXNvYy1zZHctbW9ja3VwLm9cbnNvdW5kL3NvYy9jb2RlY3MvTWFrZWZpbGUtNzMzLW9iai0kKENPTkZJR19TTkRfU09DX1NHVEw1MDAwKSAgJiM0Mzs9IHNuZC1zb2Mtc2d0bDUwMDAub1xuLS1cbnNvdW5kL3NvYy9jb2RlY3Mvc2R3LW1vY2t1cC5jLTItLy9cbnNvdW5kL3NvYy9jb2RlY3Mvc2R3LW1vY2t1cC5jOjM6Ly8gc2R3LW1vY2t1cC5jIC0tIGEgbW9ja3VwIFNvdW5kV2lyZSBjb2RlYyBmb3IgdGVzdHMgd2hlcmUgb25seSB0aGUgaG9zdFxuc291bmQvc29jL2NvZGVjcy9zZHctbW9ja3VwLmMtNC0vLyBkcml2ZXMgdGhlIGJ1cy5cbi0tXG5zb3VuZC9zb2MvY29kZWNzL3Nkdy1tb2NrdXAuYy0yMS1cbnNvdW5kL3NvYy9jb2RlY3Mvc2R3LW1vY2t1cC5jOjIyOnN0cnVjdCAgc2R3X21vY2t1cF9wcml2IHtcbnNvdW5kL3NvYy9jb2RlY3Mvc2R3LW1vY2t1cC5jLTIzLVx0c3RydWN0IHNkd19zbGF2ZSAqc2xhdmU7XG4tLVxuc291bmQvc29jL2NvZGVjcy9zZHctbW9ja3VwLmMtMjUtXG5zb3VuZC9zb2MvY29kZWNzL3Nkdy1tb2NrdXAuYzoyNjpzdGF0aWMgaW50IHNkd19tb2NrdXBfY29tcG9uZW50X3Byb2JlKHN0cnVjdCBzbmRfc29jX2NvbXBvbmVudCAqY29tcG9uZW50KVxuc291bmQvc29jL2NvZGVjcy9zZHctbW9ja3VwLmMtMjcte1xuLS1cbnNvdW5kL3NvYy9jb2RlY3Mvc2R3LW1vY2t1cC5jLTMwLVxuc291bmQvc29jL2NvZGVjcy9zZHctbW9ja3VwLmM6MzE6c3RhdGljIHZvaWQgc2R3X21vY2t1cF9jb21wb25lbnRfcmVtb3ZlKHN0cnVjdCBzbmRfc29jX2NvbXBvbmVudCAqY29tcG9uZW50KVxuc291bmQvc29jL2NvZGVjcy9zZHctbW9ja3VwLmMtMzIte1xuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA5IDAxOjEyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDcxMzI5CgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogMTAyOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipVbnJlYWNoYWJsZSBQSFkgRHJpdmVyIEFuYWx5c2lzKioKCk9rYXksIHNvIHRoZXJlJiMzOTtzIG5vIGBtZGlvLW1vY2t1cGAgSSBjYW4gaW1tZWRpYXRlbHkgbGV2ZXJhZ2UuIExldCYjMzk7cyBzZWUgaG93IHN5emthbGxlciBoYW5kbGVzIG5ldHdvcmtpbmcgZHJpdmVycyBnZW5lcmFsbHkuIEkgcmVjYWxsIGl0IHV0aWxpemVzIHZhcmlvdXMgbmV0ZGV2cyBsaWtlIGB0dW5gL2B0YXBgLCBgdmV0aGAsIGBtYWM4MDIxMV9od3NpbWAsIGFuZCBvdGhlcnMuIEhvd2V2ZXIsIGZvciBoYXJkd2FyZS1zcGVjaWZpYyBkcml2ZXJzLCBJJiMzOTttIHVzdWFsbHkgc3R1Y2sgdW5sZXNzIHRoZSBoYXJkd2FyZSBjYW4gYmUgZW11bGF0ZWQuCgpTeXprYWxsZXIgZG9lcyBoYXZlIGNsZXZlciB3b3JrYXJvdW5kczogYHN5el91c2JfY29ubmVjdGAgZm9yIFVTQiwgYHN5el9wY2lfY29ubmVjdGAgKG1heWJlLCBJJiMzOTttIG5vdCBlbnRpcmVseSBzdXJlIGFib3V0IGl0cyBjdXJyZW50IHN0YXR1cyksIGBzeXpfdmhjaWAgZm9yIEJsdWV0b290aCwgYW5kIHJlbGF0ZWQgY2FsbHMgZm9yIDgwMi4xMS4gQnV0IGZvciBNRElPIFBIWXMsIHRoZXJlJiMzOTtzIG5vIGVxdWl2YWxlbnQgdmlydHVhbCBNRElPIGJ1cyBJIGNhbiB1c2UgdG8gaW5qZWN0IGFyYml0cmFyeSBQSFlzLgoKTm93LCB0aGUgaW5zdHJ1Y3Rpb25zIEkgc2F3IG1lbnRpb24gc29tZXRoaW5nIGltcG9ydGFudDogJiMzNDtSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zLi4uIGNvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuLi4gZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSYjMzQ7LiBUaGF0JiMzOTtzIHdoYXQgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaGVyZS4gSXMgdGhpcyBQSFkgZHJpdmVyIHJlYWNoYWJsZT8KClRoaXMgaXMgZWl0aGVyIGEgcGxhdGZvcm0gZHJpdmVyIG9yIGFuIE1ESU8gZHJpdmVyLiBJZiBzbywgaXQgd2lsbCBuZWVkIGEgZGV2aWNlIHRyZWUgbm9kZSBvciBhIHBsYXRmb3JtIGRldmljZSB0byBiZSBpbnN0YW50aWF0ZWQuIENhbiBzeXprYWxsZXIgZG8gdGhhdCwgbWF5YmUgd2l0aCBgc3l6X2Rldl9jcmVhdGVgPyBOb3BlLCBub3QgZGlyZWN0bHkuIEkgKmNvdWxkKiBpbnN0YW50aWF0ZSBNRElPIGRldmljZXMgaWYgdGhlcmUgd2FzIGEgdmlydHVhbCBNRElPIGJ1cy4KCkFjdHVhbGx5LCB0aGUgYGRzYV9sb29wYCBkcml2ZXIgdXNlcyBgZml4ZWRfcGh5X3JlZ2lzdGVyXzEwMGZkKClgLCB3aGljaCBtZWFucyB0aGVyZSBtaWdodCBiZSBvdGhlciB3YXlzIHRvIGRvIGl0LiBMZXQgbWUgY2hlY2sgaWYgdGhlcmUgaXMgYW55IGBtZGlvYCBidXMgdGhhdCBjYW4gYmUgY3JlYXRlZCBmcm9tIHVzZXJzcGFjZS4uLiBub3BlLCBub3RoaW5nLiBTbywgaXMgdGhpcyBQSFkgZHJpdmVyIHJlYWNoYWJsZT8gSWYgaXQmIzM5O3MgYW4gTURJTyBQSFkgZHJpdmVyLCBpdCByZWdpc3RlcnMgaXRzZWxmIHdpdGggYHBoeV9kcml2ZXJfcmVnaXN0ZXIoKWAuIFdoZW4gYW4gTURJTyBidXMgc2NhbnMsIGl0IHJlYWRzIHRoZSBQSFkgSUQgcmVnaXN0ZXJzLCBhbmQgaWYgdGhleSBtYXRjaCwgdGhlIGRyaXZlciBpcyBib3VuZC4gU2luY2UgdGhlcmUgaXMgbm8gdmlydHVhbCBNRElPIGJ1cyBJIGNhbiBjb250cm9sIHRvIHJldHVybiBhcmJpdHJhcnkgUEhZIElEcywgdGhpcyBpcyBub3QgZ29pbmcgdG8gYmluZC4KCldhaXQsIHdoYXQgaWYgUUVNVSBlbXVsYXRlcyBhIG5ldHdvcmsgY2FyZCB3aXRoIGFuIE1ESU8gYnVzPyBRRU1VIGVtdWxhdGVzIGBlMTAwMGAsIGBydGw4MTM5YCwgYHBjbmV0YCwgYG5lMmtfcGNpYCwgYHZpcnRpby1uZXRgLCBgdm14bmV0M2AuIEJ1dCBub25lIG9mIHRoZXNlIHVzZSBBaXJvaGEgb3IgTWVkaWFUZWsgUEhZIGRyaXZlcnMuIEkgc2hvdWxkIGRvdWJsZS1jaGVjayBRRU1VIGZvciBhbnkgTURJTyBlbXVsYXRpb24gc3l6a2FsbGVyIGFjdHVhbGx5IHVzZXMsIHRob3VnaC4gUUVNVSBoYXMgYGlteC5mZWNgLCB3aGljaCBoYXMgYW4gTURJTyBidXMsIGJ1dCBpdCYjMzk7cyBmb3IgQVJNIG1hY2hpbmVzLiBTeXprYWxsZXIgdXN1YWxseSBydW5zIG9uIHg4Nl82NCBvciBhcm02NCBgdmlydGAsIHdoaWNoIHVzZXMgYHZpcnRpby1uZXRgLgoKWWVhaCwgdGhhdCBQSFkgZHJpdmVyIGlzIHVucmVhY2hhYmxlLiBMZXQmIzM5O3MgbG9vayBmb3Igb3RoZXIgYXZlbnVlcy4gQ2FuIEkgaW5zdGFudGlhdGUgYSBQSFkgZHJpdmVyIHZpYSBzeXNmcz8gTWF5YmUgc29tZXRoaW5nIGxpa2UgYGVjaG8gJiMzNDsweDAzYTI5NGMxJiMzNDsgJmd0OyAvc3lzL2J1cy9tZGlvX2J1cy9kcml2ZXJzL0Fpcm9oYVwgQU43NTgxXCBQSFkvYmluZGA/IFlvdSBjYW4gYmluZCBhIGRyaXZlciB0byBhbiAqZXhpc3RpbmcqIGRldmljZS4gQnV0IHlvdSBuZWVkIGFuIGV4aXN0aW5nIE1ESU8gZGV2aWNlLiBJcyB0aGVyZSBvbmUgYnkgZGVmYXVsdD8gSWYgdGhlcmUmIzM5O3Mgbm8gTURJTyBidXMsIHRoZXJlJiMzOTtzIG5vIE1ESU8gZGV2aWNlcy4gSXMgdGhlcmUgYW4gTURJTyBidXMgY3JlYXRlZCBieSBkZWZhdWx0PyBMZXQgbWUgY2hlY2sgaWYgYSBgZml4ZWQtMGAgTURJTyBidXMgaXMgY3JlYXRlZC4gWWVzLCBgZml4ZWRfbWRpb19idXNgIGlzIGNyZWF0ZWQgYnkgYGZpeGVkX21kaW9fYnVzX2luaXQoKWAuIENhbiBJIGJpbmQgdGhpcyBkcml2ZXIgdG8gYSBmaXhlZCBQSFk/IEZpeGVkIFBIWXMgaGF2ZSBQSFkgSUQgYDB4MDAwMDAwMDBgIG9yIHNpbWlsYXIuIFRoZSBkcml2ZXIgbWF0Y2hlcyBvbiBgUEhZX0lEX01BVENIX0VYQUNUKEFJUk9IQV9HUEhZX0lEX0FONzU4MSlgLiBJZiBJIHdyaXRlIHRvIGAvc3lzL2J1cy9tZGlvX2J1cy9kZXZpY2VzL2ZpeGVkLTA6MDAvZHJpdmVyX292ZXJyaWRlYCBhbmQgdGhlbiBiaW5kPyBGaXJzdCwgbGV0JiMzOTtzIHNlZSBpZiBgZHJpdmVyX292ZXJyaWRlYCBleGlzdHMgZm9yIE1ESU8gYnVzLi4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA5IDAxOjEyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZHJpdmVyX292ZXJyaWRlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcGh5LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA5IDAxOjEyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDczMjg0CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMzgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHN1bW1hcml6ZWQgZnJvbSBhbiBleHBlcnQmIzM5O3MgcGVyc3BlY3RpdmU6CgoqKk1ESU8gRHJpdmVyIElucXVpcnkqKgoKQWxyaWdodCwgbGV0JiMzOTtzIHNlZS4gSSYjMzk7bSBsb29raW5nIGludG8gdGhlIE1ESU8gYnVzIGRyaXZlciBzaXR1YXRpb24sIGFuZCBJIG5lZWQgdG8gZmlndXJlIG91dCBob3cgZGV2aWNlIG92ZXJyaWRlcyBhcmUgaGFuZGxlZC4uLiBvciwgcmF0aGVyLCB3aHkgdGhleSBtaWdodCAqbm90KiBiZS4gVGhlIGZpcnN0IHRoaW5nIHRoYXQganVtcHMgb3V0IGF0IG1lIGlzIHRoYXQgdGhlIE1ESU8gYnVzIGl0c2VsZiBkb2VzbiYjMzk7dCBleHBsaWNpdGx5IGltcGxlbWVudCBgZHJpdmVyX292ZXJyaWRlYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgdGhhdCYjMzk7cyBieSBkZXNpZ24uIFRoZSB3YXkgdG8gZmluZCBvdXQgd2hlcmUgdGhlIGRyaXZlciBvdmVycmlkZSBmdW5jdGlvbmFsaXR5IGZvciB0aGUgTURJTyBidXMgbGllcyBpcyB0byBsb29rIHdoZXJlIHRoZSBNRElPIGJ1cyBpcyBkZWZpbmVkLiBBaCBoYSEgSSBuZWVkIHRvIGNoZWNrIHRoZSBgbWRpb19idXNfdHlwZWAgc3RydWN0dXJlLiBUaGF0IHdvdWxkIGJlIGluIGBkcml2ZXJzL25ldC9waHkvbWRpb19idXMuY2AuIFRoYXQgc2hvdWxkIHBvaW50IG1lIHRvIHRoZSByaWdodCBwbGFjZSB0byBmaWd1cmUgb3V0IGhvdyBkZXZpY2VzIGFyZSBoYW5kbGVkLiBUaGF0JiMzOTtzIHdoZXJlIHRoZSBoZWFydCBvZiB0aGUgYnVzIGxpZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA5IDAxOjEzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZHJpdmVyX292ZXJyaWRlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcGh5L21kaW9fYnVzLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOSAwMToxMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3MzU2OQoJCQkJCQkJb3V0cHV0OiAxMzEKCQkJCQkJCXRob3VnaHRzOiA5NTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqVW5yZWFjaGFibGUgUEhZIERyaXZlcjogV29ydGhGdXp6aW5nPWZhbHNlKioKCk9rYXksIHNvIEkmIzM5O3ZlIGJlZW4gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCwgYWZ0ZXIgc29tZSB0aGlua2luZywgSSYjMzk7dmUgY29tZSB0byB0aGUgY29uY2x1c2lvbiB0aGF0IGl0JiMzOTtzIG5vdCB3b3J0aCBmdXp6aW5nLiBUaGUgY29yZSBpc3N1ZSBpcyB0aGF0IHRoaXMgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBQSFkgZHJpdmVyLCBzcGVjaWZpY2FsbHkgZm9yIEFpcm9oYSBTb0NzLCBhbmQgaXQgcmVmYWN0b3JzIHRoZSBleGlzdGluZyBNZWRpYVRlayBQSFkgZHJpdmVyIHRvIHNoYXJlIGNvZGUuIE15IHByaW1hcnkgY29uY2VybiBpcyB0aGF0IHRoZXNlIGFyZSBoYXJkd2FyZS1zcGVjaWZpYyBQSFkgZHJpdmVycywgYW5kIHRoZXJlZm9yZSwgdGhlaXIgY29kZSBwYXRocyBhcmUgKmltcG9zc2libGUqIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cywgbGlrZSB0aGUgb25lcyB1c2VkIGZvciBmdXp6aW5nLgoKSSBzdGFydGVkIGJ5IGNvbnNpZGVyaW5nIHRoZSB0eXBpY2FsIGluc3RhbnRpYXRpb24gb2YgUEhZIGRyaXZlcnMuIFlvdSBjYW4mIzM5O3QganVzdCBmb3JjZS1iaW5kIGEgUEhZIGRyaXZlci4gSSBsb29rZWQgYXQgYGkyY2AgYW5kIGBzcGlgLCBidXQgdGhleSB1c2UgdGhlIGBuZXdfZGV2aWNlYCBzeXNmcyBhdHRyaWJ1dGUsIHdoaWNoIE1ESU8gZG9lc24mIzM5O3QgaGF2ZS4gVGhpcyBpbW1lZGlhdGVseSBmbGFncyB0aGUgcHJvYmxlbTogd2UgY2FuJiMzOTt0IGNyZWF0ZSBNRElPIGRldmljZXMgZnJvbSB1c2Vyc3BhY2UsIHRoZXJlZm9yZSB3ZSBjYW4mIzM5O3QgcmVsaWFibHkgcmVhY2ggdGhpcyBkcml2ZXIgaW4gUUVNVSBvciBHQ0UuCgpJIGJyaWVmbHkgY29uc2lkZXJlZCBpZiB0aGVyZSYjMzk7cyBzb21lIG90aGVyIHdheSwgbGlrZSBgZHNhX2xvb3BgIG9yIG90aGVyIGV4aXN0aW5nIGRyaXZlcnMgdGhhdCBtaWdodCBjcmVhdGUgZml4ZWQgUEhZcy4gSG93ZXZlciwgSSBkaWRuJiMzOTt0IHNlZSBhbnl0aGluZyBvYnZpb3VzLiBHaXZlbiB0aGUgbGFjayBvZiBhIHZpcnR1YWwgTURJTyBidXMgb3Igc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgaW4gdGhlc2UgZW52aXJvbm1lbnRzLCB0aGVyZSBpcyBubyB3YXkgdG8gaW5zdGFudGlhdGUgdGhpcyBwYXJ0aWN1bGFyIFBIWSBkcml2ZXIuCgpPa2F5LCBsZXQgbWUgYnJlYWsgZG93biB0aGUgcGF0Y2ggaXRzZWxmLiBJIHNlZSBpdCBhZGRzIGBkcml2ZXJzL25ldC9waHkvbWVkaWF0ZWsvYWlyb2hhLWdlLXNvYy5jYCwgbW9kaWZpZXMgYGRyaXZlcnMvbmV0L3BoeS9tZWRpYXRlay9tdGstZ2Utc29jLmNgIHRvIHJlbW92ZSBBaXJvaGEgUEhZcywgYW5kIHVwZGF0ZXMgc29tZSBoZWFkZXIgZmlsZXMuIEl0IGFsc28gbW9kaWZpZXMgYGRyaXZlcnMvbmV0L3BoeS9tZWRpYXRlay9tdGstcGh5LWxpYi5jYCwgbWFraW5nIHNvbWUgZnVuY3Rpb25zIGV4cG9ydGVkIHRvIGJlIHVzZWQuIFRoZSBleHBvcnQgaXMgZXNzZW50aWFsbHkganVzdCBhZGRpbmcgYEVYUE9SVF9TWU1CT0xfR1BMYC4gVGhlcmUgYXJlIG5vIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byByZWFjaGFibGUgY29yZSBsb2dpYy4gU28gdGhlIHdob2xlIHBhdGNoIGlzIGFkZGluZyB0aGUgbmV3IGhhcmR3YXJlLXNwZWNpZmljIEFpcm9oYSBQSFkgZHJpdmVyIGFuZCByZWZhY3RvcmluZyB0aGUgZXhpc3RpbmcgTWVkaWFUZWsgUEhZIGRyaXZlciB0byBzaGFyZSBjb2RlIHdpdGggaXQuCgpJJiMzOTttIHZlcmlmeWluZyB0aGF0IHRoZXJlJiMzOTtzIG5vIHdheSB0byByZWFjaCB0aGlzIGNvZGUuIElzIHRoZXJlIGEgY2hhbmNlIHRoYXQgdGhpcyBkcml2ZXIgY291bGQgYmUgcHJvYmVkIHZpYSBzb21lIG90aGVyIGRyaXZlciwgbGlrZSBgbWRpby1iY20tdW5pbWFjLmNgPyBObywgeW91JiMzOTtkIG5lZWQgdGhlIGFjdHVhbCBoYXJkd2FyZSBvciBhbiBlbXVsYXRvciBvZiB0aGUgaGFyZHdhcmUuIFN5emthbGxlciBkb2VzbiYjMzk7dCBlbXVsYXRlIEFpcm9oYSBvciBNZWRpYVRlayBTb0NzLiBUaGVyZWZvcmUsIGl0JiMzOTtzIHVucmVhY2hhYmxlLgoKU28gbXkgcmVhc29uaW5nIGlzOiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IGhhcmR3YXJlLXNwZWNpZmljIEV0aGVybmV0IFBIWSBkcml2ZXIgZm9yIEFpcm9oYSBTb0NzIGFuZCByZWZhY3RvcnMgdGhlIGV4aXN0aW5nIE1lZGlhVGVrIFBIWSBkcml2ZXIgdG8gc2hhcmUgY29kZS4gU2luY2UgUEhZIGRldmljZXMgYXJlIGluc3RhbnRpYXRlZCBieSB0aGUgTURJTyBidXMgYmFzZWQgb24gaGFyZHdhcmUgcHJvYmluZyAocmVhZGluZyBQSFkgSUQgcmVnaXN0ZXJzKSBvciBkZXZpY2UgdHJlZSwgYW5kIHRoZXJlIGlzIG5vIHZpcnR1YWwgTURJTyBidXMgb3Igc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIChsaWtlIFFFTVUvR0NFKSB0aGF0IGNhbiBpbnN0YW50aWF0ZSB0aGlzIHNwZWNpZmljIFBIWSwgdGhlIGNvZGUgaXMgaW1wb3NzaWJsZSB0byByZWFjaCBhbmQgdGVzdCB2aWEgZnV6emluZy4mIzM0OwoKTGV0JiMzOTtzIHF1aWNrbHkgY2hlY2sgdGhlIGd1aWRlbGluZXMuIFRoZSBpbnN0cnVjdGlvbnMgc2F5LCAmIzM0O1JldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnMgY29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4mIzM0OyBUaGlzICpwZXJmZWN0bHkqIGFsaWducyB3aXRoIHRoZSBzaXR1YXRpb24gaGVyZS4gSSYjMzk7bSBnb2luZyB0byBzZXQgYFdvcnRoRnV6emluZz1mYWxzZWAuCgpJIHdhbnQgdG8gYmUgdGhvcm91Z2gsIHNvIEkmIzM5O2xsIGNoZWNrIGFueSBvdGhlciBtb2RpZmllZCBmaWxlcy4gT2theSwgSSBzZWUgYE1BSU5UQUlORVJTYCAoZG9jcyksIGBLY29uZmlnYCwgYE1ha2VmaWxlYCwgYW5kIHRoZSBzb3VyY2UgYW5kIGhlYWRlciBmaWxlcyBmb3IgdGhlIG5ldyBkcml2ZXIgYW5kIHRoZSByZWZhY3RvcmVkIGNvZGUuIEFsbCB0aGUgY2hhbmdlcyBhcmUgcmVsYXRlZCB0byB0aGUgQWlyb2hhIFBIWSBkcml2ZXIgYW5kIHJlbGF0ZWQgY29kZS4gVGhlc2UgYXJlIGFsbCBoYXJkd2FyZS1zcGVjaWZpYyBQSFkgZHJpdmVycywgc28gaXQmIzM5O3MgYSBjbG9zZWQgY2FzZS4gYFdvcnRoRnV6emluZz1mYWxzZWAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA5IDAxOjEzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogW10sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBoYXJkd2FyZS1zcGVjaWZpYyBFdGhlcm5ldCBQSFkgZHJpdmVyIGZvciBBaXJvaGEgU29DcyBhbmQgcmVmYWN0b3JzIHRoZSBleGlzdGluZyBNZWRpYVRlayBQSFkgZHJpdmVyIHRvIHNoYXJlIGNvZGUuIFNpbmNlIFBIWSBkZXZpY2VzIGFyZSBpbnN0YW50aWF0ZWQgYnkgdGhlIE1ESU8gYnVzIGJhc2VkIG9uIGhhcmR3YXJlIHByb2JpbmcgKHJlYWRpbmcgUEhZIElEIHJlZ2lzdGVycykgb3IgZGV2aWNlIHRyZWUsIGFuZCB0aGVyZSBpcyBubyB2aXJ0dWFsIE1ESU8gYnVzIG9yIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyAobGlrZSBRRU1VL0dDRSkgdGhhdCBjYW4gaW5zdGFudGlhdGUgdGhpcyBzcGVjaWZpYyBQSFksIHRoZSBjb2RlIGlzIGltcG9zc2libGUgdG8gcmVhY2ggYW5kIHRlc3QgdmlhIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IGhhcmR3YXJlLXNwZWNpZmljIEV0aGVybmV0IFBIWSBkcml2ZXIgZm9yIEFpcm9oYSBTb0NzIGFuZCByZWZhY3RvcnMgdGhlIGV4aXN0aW5nIE1lZGlhVGVrIFBIWSBkcml2ZXIgdG8gc2hhcmUgY29kZS4gU2luY2UgUEhZIGRldmljZXMgYXJlIGluc3RhbnRpYXRlZCBieSB0aGUgTURJTyBidXMgYmFzZWQgb24gaGFyZHdhcmUgcHJvYmluZyAocmVhZGluZyBQSFkgSUQgcmVnaXN0ZXJzKSBvciBkZXZpY2UgdHJlZSwgYW5kIHRoZXJlIGlzIG5vIHZpcnR1YWwgTURJTyBidXMgb3Igc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIChsaWtlIFFFTVUvR0NFKSB0aGF0IGNhbiBpbnN0YW50aWF0ZSB0aGlzIHNwZWNpZmljIFBIWSwgdGhlIGNvZGUgaXMgaW1wb3NzaWJsZSB0byByZWFjaCBhbmQgdGVzdCB2aWEgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNy0wOVQwMToxMTo1NS40MzYwODg1NDdaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3ODA3MzQ5OTM0NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBoYXJkd2FyZS1zcGVjaWZpYyBFdGhlcm5ldCBQSFkgZHJpdmVyIGZvciBBaXJvaGEgU29DcyBhbmQgcmVmYWN0b3JzIHRoZSBleGlzdGluZyBNZWRpYVRlayBQSFkgZHJpdmVyIHRvIHNoYXJlIGNvZGUuIFNpbmNlIFBIWSBkZXZpY2VzIGFyZSBpbnN0YW50aWF0ZWQgYnkgdGhlIE1ESU8gYnVzIGJhc2VkIG9uIGhhcmR3YXJlIHByb2JpbmcgKHJlYWRpbmcgUEhZIElEIHJlZ2lzdGVycykgb3IgZGV2aWNlIHRyZWUsIGFuZCB0aGVyZSBpcyBubyB2aXJ0dWFsIE1ESU8gYnVzIG9yIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyAobGlrZSBRRU1VL0dDRSkgdGhhdCBjYW4gaW5zdGFudGlhdGUgdGhpcyBzcGVjaWZpYyBQSFksIHRoZSBjb2RlIGlzIGltcG9zc2libGUgdG8gcmVhY2ggYW5kIHRlc3QgdmlhIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wOVQwMToxMTo1NS40MzYwOTg5NDdaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgwMDM4NjQ1OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGUyN2I1NWNkNmE5ZWJiNGE2YmNjYjEyYzlmNjAyYjYxN2ZiMGQwZWJcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFRodSBKdWwgOSAwMToxMTo1MyAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9NQUlOVEFJTkVSUyBiL01BSU5UQUlORVJTXFxuaW5kZXggNTJmMWE1NWVjYTk5YmYuLjY1Y2MyMWIzOWMzZGJjIDEwMDY0NFxcbi0tLSBhL01BSU5UQUlORVJTXFxuKysrIGIvTUFJTlRBSU5FUlNcXG5AQCAtNzYwLDYgKzc2MCwxNCBAQCBTOlxcdE1haW50YWluZWRcXG4gRjpcXHREb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L2Fpcm9oYSxlbjc1ODEtZXRoLnlhbWxcXG4gRjpcXHRkcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvXFxuIFxcbitBSVJPSEEgRVRIRVJORVQgUEhZIERSSVZFUlxcbitNOlxcdENocmlzdGlhbiBNYXJhbmdpIFxcdTAwM2NhbnN1ZWxzbXRoQGdtYWlsLmNvbVxcdTAwM2VcXG4rTDpcXHRsaW51eC1hcm0ta2VybmVsQGxpc3RzLmluZnJhZGVhZC5vcmcgKG1vZGVyYXRlZCBmb3Igbm9uLXN1YnNjcmliZXJzKVxcbitMOlxcdGxpbnV4LW1lZGlhdGVrQGxpc3RzLmluZnJhZGVhZC5vcmcgKG1vZGVyYXRlZCBmb3Igbm9uLXN1YnNjcmliZXJzKVxcbitMOlxcdG5ldGRldkB2Z2VyLmtlcm5lbC5vcmdcXG4rUzpcXHRNYWludGFpbmVkXFxuK0Y6XFx0ZHJpdmVycy9uZXQvcGh5L21lZGlhdGVrL2Fpcm9oYS1nZS1zb2MuY1xcbitcXG4gQUlST0hBIFBDSUUgUEhZIERSSVZFUlxcbiBNOlxcdExvcmVuem8gQmlhbmNvbmkgXFx1MDAzY2xvcmVuem9Aa2VybmVsLm9yZ1xcdTAwM2VcXG4gTDpcXHRsaW51eC1hcm0ta2VybmVsQGxpc3RzLmluZnJhZGVhZC5vcmcgKG1vZGVyYXRlZCBmb3Igbm9uLXN1YnNjcmliZXJzKVxcbkBAIC0xNjQ4Myw2ICsxNjQ5MSw3IEBAIEw6XFx0bmV0ZGV2QHZnZXIua2VybmVsLm9yZ1xcbiBTOlxcdE1haW50YWluZWRcXG4gRjpcXHRkcml2ZXJzL25ldC9waHkvbWVkaWF0ZWsvbXRrLTJwNWdlLmNcXG4gRjpcXHRkcml2ZXJzL25ldC9waHkvbWVkaWF0ZWsvbXRrLWdlLXNvYy5jXFxuK0Y6XFx0ZHJpdmVycy9uZXQvcGh5L21lZGlhdGVrL210ay1nZS1zb2MuaFxcbiBGOlxcdGRyaXZlcnMvbmV0L3BoeS9tZWRpYXRlay9tdGstcGh5LWxpYi5jXFxuIEY6XFx0ZHJpdmVycy9uZXQvcGh5L21lZGlhdGVrL210ay1nZS5jXFxuIEY6XFx0ZHJpdmVycy9uZXQvcGh5L21lZGlhdGVrL210ay5oXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BoeS9tZWRpYXRlay9LY29uZmlnIGIvZHJpdmVycy9uZXQvcGh5L21lZGlhdGVrL0tjb25maWdcXG5pbmRleCBiYjdkYzg3NjI3MWU4My4uZmU1MWY0NjE2YzU0NGYgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvcGh5L21lZGlhdGVrL0tjb25maWdcXG4rKysgYi9kcml2ZXJzL25ldC9waHkvbWVkaWF0ZWsvS2NvbmZpZ1xcbkBAIC0xLDQgKzEsMTcgQEBcXG4gIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuK2NvbmZpZyBBSVJPSEFfR0VfU09DX1BIWVxcbitcXHR0cmlzdGF0ZSBcXFwiQWlyb2hhIFNvQyBFdGhlcm5ldCBQSFlzXFxcIlxcbitcXHRkZXBlbmRzIG9uIEFSTTY0IHx8IENPTVBJTEVfVEVTVFxcbitcXHRkZXBlbmRzIG9uIEFSQ0hfQUlST0hBIHx8IENPTVBJTEVfVEVTVFxcbitcXHRzZWxlY3QgTVRLX05FVF9QSFlMSUJcXG4rXFx0c2VsZWN0IFBIWV9QQUNLQUdFXFxuK1xcdGhlbHBcXG4rXFx0ICBTdXBwb3J0cyBBaXJvaGEgU29DIGJ1aWx0LWluIEdpZ2FiaXQgRXRoZXJuZXQgUEhZcy5cXG4rXFxuK1xcdCAgSW5jbHVkZSBzdXBwb3J0IGZvciBidWlsdC1pbiBFdGhlcm5ldCBQSFlzIHdoaWNoIGFyZSBwcmVzZW50IGluXFxuK1xcdCAgdGhlIEFONzU4MSBhbmQgQU43NTgzIFNvQ3MuIFRoZXNlIFBIWXMgZCB3aWxsIGR5bmFtaWNhbGx5XFxuK1xcdCAgY2FsaWJyYXRlIGR1cmluZyBzdGFydHVwLlxcbitcXG4gY29uZmlnIE1FRElBVEVLXzJQNUdFX1BIWVxcbiBcXHR0cmlzdGF0ZSBcXFwiTWVkaWFUZWsgMi41R2IgRXRoZXJuZXQgUEhZc1xcXCJcXG4gXFx0ZGVwZW5kcyBvbiAoQVJNNjQgXFx1MDAyNlxcdTAwMjYgQVJDSF9NRURJQVRFSykgfHwgQ09NUElMRV9URVNUXFxuQEAgLTI0LDggKzM3LDcgQEAgY29uZmlnIE1FRElBVEVLX0dFX1BIWVxcbiBjb25maWcgTUVESUFURUtfR0VfU09DX1BIWVxcbiBcXHR0cmlzdGF0ZSBcXFwiTWVkaWFUZWsgU29DIEV0aGVybmV0IFBIWXNcXFwiXFxuIFxcdGRlcGVuZHMgb24gQVJNNjQgfHwgQ09NUElMRV9URVNUXFxuLVxcdGRlcGVuZHMgb24gQVJDSF9BSVJPSEEgfHwgKEFSQ0hfTUVESUFURUsgXFx1MDAyNlxcdTAwMjYgTlZNRU1fTVRLX0VGVVNFKSB8fCBcXFxcXFxuLVxcdFxcdCAgIENPTVBJTEVfVEVTVFxcbitcXHRkZXBlbmRzIG9uIChBUkNIX01FRElBVEVLIFxcdTAwMjZcXHUwMDI2IE5WTUVNX01US19FRlVTRSkgfHwgQ09NUElMRV9URVNUXFxuIFxcdHNlbGVjdCBNVEtfTkVUX1BIWUxJQlxcbiBcXHRzZWxlY3QgUEhZX1BBQ0tBR0VcXG4gXFx0aGVscFxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9waHkvbWVkaWF0ZWsvTWFrZWZpbGUgYi9kcml2ZXJzL25ldC9waHkvbWVkaWF0ZWsvTWFrZWZpbGVcXG5pbmRleCBhYzU3ZWNjNzk5ZmM4MS4uZWI0MzBmMDA4MTY5ZTIgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvcGh5L21lZGlhdGVrL01ha2VmaWxlXFxuKysrIGIvZHJpdmVycy9uZXQvcGh5L21lZGlhdGVrL01ha2VmaWxlXFxuQEAgLTEsNCArMSw1IEBAXFxuICMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG4rb2JqLSQoQ09ORklHX0FJUk9IQV9HRV9TT0NfUEhZKVxcdFxcdCs9IGFpcm9oYS1nZS1zb2Mub1xcbiBvYmotJChDT05GSUdfTUVESUFURUtfMlA1R0VfUEhZKVxcdCs9IG10ay0ycDVnZS5vXFxuIG9iai0kKENPTkZJR19NRURJQVRFS19HRV9QSFkpXFx0XFx0Kz0gbXRrLWdlLm9cXG4gb2JqLSQoQ09ORklHX01FRElBVEVLX0dFX1NPQ19QSFkpXFx0Kz0gbXRrLWdlLXNvYy5vXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BoeS9tZWRpYXRlay9haXJvaGEtZ2Utc29jLmMgYi9kcml2ZXJzL25ldC9waHkvbWVkaWF0ZWsvYWlyb2hhLWdlLXNvYy5jXFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcXG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uNjAxYTY0ZDgzMzY1NDJcXG4tLS0gL2Rldi9udWxsXFxuKysrIGIvZHJpdmVycy9uZXQvcGh5L21lZGlhdGVrL2Fpcm9oYS1nZS1zb2MuY1xcbkBAIC0wLDAgKzEsMTgxMiBAQFxcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCtcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2JpdGZpZWxkLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9waW5jdHJsL2NvbnN1bWVyLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9waHkuaFxcdTAwM2VcXG4rXFxuKyNpbmNsdWRlIFxcXCIuLi9waHlsaWIuaFxcXCJcXG4rI2luY2x1ZGUgXFxcIm10ay5oXFxcIlxcbisjaW5jbHVkZSBcXFwibXRrLWdlLXNvYy5oXFxcIlxcbitcXG4rI2RlZmluZSBBSVJPSEFfREVGQVVMVF9QT1JUMF9BRERSXFx0XFx0MHg5XFxuKyNkZWZpbmUgQUlST0hBX1BIWV9NQVhfTEVEU1xcdFxcdFxcdDJcXG4rXFxuK2VudW0gYWlyb2hhX21kaV9yZXNpc3Rlcl90eXBlIHtcXG4rXFx0TURJXzBSLFxcbitcXHRNRElfNVIsXFxuK1xcbitcXHRNRElfVFlQRV9NQVgsXFxuK307XFxuK1xcbitlbnVtIGFpcm9oYV90cmFuc2Zvcm1lcl90eXBlIHtcXG4rXFx0VFhNUixcXG4rXFx0RElTQ1JFVEUsXFxuK1xcbitcXHRUUkFOU0ZPUk1FUl9UWVBFX01BWCxcXG4rfTtcXG4rXFxuK2VudW0gYWlyb2hhX2NhbGliX2NvbnN0X3R5cGUge1xcbitcXHRUWF9BTVBfVEVTVF9BLFxcbitcXHRUWF9BTVBfVEVTVF9CLFxcbitcXHRUWF9BTVBfVEVTVF9DLFxcbitcXHRUWF9BTVBfVEVTVF9ELFxcbitcXHRUWF9BTVBfMUdfQSxcXG4rXFx0VFhfQU1QXzFHX0IsXFxuK1xcdFRYX0FNUF8xR19DLFxcbitcXHRUWF9BTVBfMUdfRCxcXG4rXFx0VFhfQU1QXzEwME1fQSxcXG4rXFx0VFhfQU1QXzEwME1fQixcXG4rXFx0VFhfQU1QXzEwTV9BLFxcbitcXHRUWF9BTVBfMTBNX0IsXFxuK1xcdFI1MF9BLFxcbitcXHRSNTBfQixcXG4rXFx0UjUwX0MsXFxuK1xcdFI1MF9ELFxcbitcXG4rXFx0Q0FMSUJfQ09OU1RfVFlQRV9NQVgsXFxuK307XFxuK1xcbitzdHJ1Y3QgYWlyb2hhX3NvY3BoeV9zaGFyZWQge1xcbitcXHRzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2X3AwO1xcbitcXHRlbnVtIGFpcm9oYV90cmFuc2Zvcm1lcl90eXBlIHRyYW5zZm9ybWVyX3R5cGVbNF07XFxuK1xcdGVudW0gYWlyb2hhX21kaV9yZXNpc3Rlcl90eXBlIG1kaV9yZXNpc3Rlcl90eXBlO1xcbitcXHRib29sIHJleHRfc3dfY2FsaWJfZG9uZTtcXG4rXFx0aW50ICgqdHhfYW1wX2NvbXBlbnNhdGlvbl90YmwpW1RSQU5TRk9STUVSX1RZUEVfTUFYXVtNRElfVFlQRV9NQVhdW0NBTElCX0NPTlNUX1RZUEVfTUFYXVs0XTtcXG4rXFx0dTggKnI1MF9jYWxfdGJsO1xcbit9O1xcbitcXG4rLypcXG4rICogMiBjaGlwIHJldmlzaW9uXFxuKyAqIFRYTVIgb3IgZGlzY3JldGVcXG4rICogMiBNREkgdHlwZVxcbisgKiBUWCBBTVAgdGVzdC9UWCBBTVAgMUcvVFggQU1QIDEwME0vVFggQU1QIDEwTS9SNTBcXG4rICogNCBQSFlcXG4rICovXFxuK3N0YXRpYyBpbnQgYW43NTgxX3R4X2FtcF9jb21wZW5zYXRpb25fdGJsWzJdW1RSQU5TRk9STUVSX1RZUEVfTUFYXVtNRElfVFlQRV9NQVhdW0NBTElCX0NPTlNUX1RZUEVfTUFYXVs0XSA9IHtcXG4rXFx0eyAvKiBJQyB2ZXJzaW9uIDEgKi9cXG4rXFx0XFx0W1RYTVJdID0ge1xcbitcXHRcXHRcXHR7IH0sXFxuK1xcdFxcdFxcdHtcXG4rXFx0XFx0XFx0XFx0W1RYX0FNUF9URVNUX0FdID0geyAtMTIsIC0xMSwgLTksIC02IH0sXFxuK1xcdFxcdFxcdFxcdFtUWF9BTVBfVEVTVF9CXSA9IHsgLTksIC0xMywgLTksIC01IH0sXFxuK1xcdFxcdFxcdFxcdFtUWF9BTVBfVEVTVF9DXSA9IHsgLTUsIC00LCAtMywgMSB9LFxcbitcXHRcXHRcXHRcXHRbVFhfQU1QX1RFU1RfRF0gPSB7IC05LCAtOCwgLTcsIC01IH0sXFxuK1xcdFxcdFxcdFxcdFtUWF9BTVBfMUdfQV0gPSB7IC0xMiwgLTExLCAtOSwgLTYgfSxcXG4rXFx0XFx0XFx0XFx0W1RYX0FNUF8xR19CXSA9IHsgLTksIC0xMywgLTksIC01IH0sXFxuK1xcdFxcdFxcdFxcdFtUWF9BTVBfMUdfQ10gPSB7IC01LCAtNCwgLTMsIDEgfSxcXG4rXFx0XFx0XFx0XFx0W1RYX0FNUF8xR19EXSA9IHsgLTksIC04LCAtNywgLTUgfSxcXG4rXFx0XFx0XFx0XFx0W1RYX0FNUF8xMDBNX0FdID0geyAtMiwgLTIsIDAsIDIgfSxcXG4rXFx0XFx0XFx0XFx0W1RYX0FNUF8xMDBNX0JdID0geyAtMiwgLTIsIDEsIDEgfSxcXG4rXFx0XFx0XFx0XFx0W1RYX0FNUF8xME1fQV0gPSB7IDAsIDAsIDAsIDAgfSxcXG4rXFx0XFx0XFx0XFx0W1RYX0FNUF8xME1fQl0gPSB7IDAsIDAsIDAsIDAgfSxcXG4rXFx0XFx0XFx0XFx0W1I1MF9BXSA9IHsgMTUsIDE1LCAxNSwgMTUgfSxcXG4rXFx0XFx0XFx0XFx0W1I1MF9CXSA9IHsgMTUsIDE1LCAxOCwgMTUgfSxcXG4rXFx0XFx0XFx0XFx0W1I1MF9DXSA9IHsgLTgsIC04LCAtOCwgLTggfSxcXG4rXFx0XFx0XFx0XFx0W1I1MF9EXSA9IHsgLTgsIC04LCAtOCwgLTggfSxcXG4rXFx0XFx0XFx0fSxcXG4rXFx0XFx0fSxcXG4rXFx0XFx0W0RJU0NSRVRFXSA9IHtcXG4rXFx0XFx0XFx0eyB9LFxcbitcXHRcXHRcXHR7XFxuK1xcdFxcdFxcdFxcdFtUWF9BTVBfVEVTVF9BXSA9IHsgLTksIC03LCAtNywgLTUgfSxcXG4rXFx0XFx0XFx0XFx0W1RYX0FNUF9URVNUX0JdID0geyAtOSwgLTksIC03LCAtNCB9LFxcbitcXHRcXHRcXHRcXHRbVFhfQU1QX1RFU1RfQ10gPSB7IC05LCAtNywgLTksIC02IH0sXFxuK1xcdFxcdFxcdFxcdFtUWF9BTVBfVEVTVF9EXSA9IHsgLTExLCAtOSwgLTEwLCAtOCB9LFxcbitcXHRcXHRcXHRcXHRbVFhfQU1QXzFHX0FdID0geyAtOSwgLTcsIC03LCAtNSB9LFxcbitcXHRcXHRcXHRcXHRbVFhfQU1QXzFHX0JdID0geyAtOSwgLTgsIC03LCAtNCB9LFxcbitcXHRcXHRcXHRcXHRbVFhfQU1QXzFHX0NdID0geyAtOSwgLTcsIC05LCAtNiB9LFxcbitcXHRcXHRcXHRcXHRbVFhfQU1QXzFHX0RdID0geyAtMTEsIC04LCAtMTAsIC04IH0sXFxuK1xcdFxcdFxcdFxcdFtUWF9BTVBfMTAwTV9BXSA9IHsgNCwgMywgNCwgNCB9LFxcbitcXHRcXHRcXHRcXHRbVFhfQU1QXzEwME1fQl0gPSB7IDQsIDQsIDUsIDQgfSxcXG4rXFx0XFx0XFx0XFx0W1RYX0FNUF8xME1fQV0gPSB7IDAsIDAsIDAsIDAgfSxcXG4rXFx0XFx0XFx0XFx0W1RYX0FNUF8xME1fQl0gPSB7IDAsIDAsIDAsIDAgfSxcXG4rXFx0XFx0XFx0XFx0W1I1MF9BXSA9IHsgMCwgMCwgMCwgMCB9LFxcbitcXHRcXHRcXHRcXHRbUjUwX0JdID0geyAwLCAwLCAwLCAwIH0sXFxuK1xcdFxcdFxcdFxcdFtSNTBfQ10gPSB7IDAsIDAsIDAsIDAgfSxcXG4rXFx0XFx0XFx0XFx0W1I1MF9EXSA9IHsgMCwgMCwgMCwgMCB9LFxcbitcXHRcXHRcXHR9LFxcbitcXHRcXHR9LFxcbitcXHR9LFxcbitcXHR7IC8qIElDIHZlcnNpb24gMiAqL1xcbitcXHRcXHRbVFhNUl0gPSB7XFxuK1xcdFxcdFxcdHsgfSxcXG4rXFx0XFx0XFx0e1xcbitcXHRcXHRcXHRcXHRbVFhfQU1QX1RFU1RfQV0gPSB7IC0xMCwgLTEyLCAtMTIsIC0xMSB9LFxcbitcXHRcXHRcXHRcXHRbVFhfQU1QX1RFU1RfQl0gPSB7IC0xMCwgLTExLCAtMTEsIC0xMCB9LFxcbitcXHRcXHRcXHRcXHRbVFhfQU1QX1RFU1RfQ10gPSB7IC01LCAtNywgLTksIC0zIH0sXFxuK1xcdFxcdFxcdFxcdFtUWF9BTVBfVEVTVF9EXSA9IHsgLTgsIC0xMCwgLTcsIC04IH0sXFxuK1xcdFxcdFxcdFxcdFtUWF9BTVBfMUdfQV0gPSB7IC0xMiwgLTYsIC02LCA0IH0sXFxuK1xcdFxcdFxcdFxcdFtUWF9BTVBfMUdfQl0gPSB7IC0xMCwgLTUsIC01LCAxIH0sXFxuK1xcdFxcdFxcdFxcdFtUWF9BTVBfMUdfQ10gPSB7IC01LCAtMywgLTQsIDExIH0sXFxuK1xcdFxcdFxcdFxcdFtUWF9BTVBfMUdfRF0gPSB7IC04LCAtMywgLTMsIDQgfSxcXG4rXFx0XFx0XFx0XFx0W1RYX0FNUF8xMDBNX0FdID0geyAyLCAxLCAwLCAzIH0sXFxuK1xcdFxcdFxcdFxcdFtUWF9BTVBfMTAwTV9CXSA9IHsgMCwgMCwgMCwgMyB9LFxcbitcXHRcXHRcXHRcXHRbVFhfQU1QXzEwTV9BXSA9IHsgMCwgMCwgMCwgMCB9LFxcbitcXHRcXHRcXHRcXHRbVFhfQU1QXzEwTV9CXSA9IHsgMCwgMCwgMCwgMCB9LFxcbitcXHRcXHRcXHRcXHRbUjUwX0FdID0geyAxNSwgMTUsIDE1LCAxNSB9LFxcbitcXHRcXHRcXHRcXHRbUjUwX0JdID0geyAxNSwgMTUsIDE4LCAxNSB9LFxcbitcXHRcXHRcXHRcXHRbUjUwX0NdID0geyA0LCA0LCA0LCA0IH0sXFxuK1xcdFxcdFxcdFxcdFtSNTBfRF0gPSB7IDQsIDQsIDQsIDQgfSxcXG4rXFx0XFx0XFx0fSxcXG4rXFx0XFx0fSxcXG4rXFx0XFx0W0RJU0NSRVRFXSA9IHtcXG4rXFx0XFx0XFx0eyB9LFxcbitcXHRcXHRcXHR7XFxuK1xcdFxcdFxcdFxcdFtUWF9BTVBfVEVTVF9BXSA9IHsgLTExLCAxMSwgLTEyLCAtNyB9LFxcbitcXHRcXHRcXHRcXHRbVFhfQU1QX1RFU1RfQl0gPSB7IC05LCAtMTAsIC05LCAtOCB9LFxcbitcXHRcXHRcXHRcXHRbVFhfQU1QX1RFU1RfQ10gPSB7IC02LCAtMywgLTcsIC00IH0sXFxuK1xcdFxcdFxcdFxcdFtUWF9BTVBfVEVTVF9EXSA9IHsgLTcsIC04LCAtMTAsIC03IH0sXFxuK1xcdFxcdFxcdFxcdFtUWF9BTVBfMUdfQV0gPSB7IC0xMSwgLTExLCAtMTIsIC03IH0sXFxuK1xcdFxcdFxcdFxcdFtUWF9BTVBfMUdfQl0gPSB7IC05LCAtMTAsIC05LCAtOCB9LFxcbitcXHRcXHRcXHRcXHRbVFhfQU1QXzFHX0NdID0geyAtNiwgLTMsIC03LCAtNCB9LFxcbitcXHRcXHRcXHRcXHRbVFhfQU1QXzFHX0RdID0geyAtNywgLTgsIC0xMCwgLTcgfSxcXG4rXFx0XFx0XFx0XFx0W1RYX0FNUF8xMDBNX0FdID0geyAyLCAyLCAxLCAyIH0sXFxuK1xcdFxcdFxcdFxcdFtUWF9BTVBfMTAwTV9CXSA9IHsgMywgMywgMywgMyB9LFxcbitcXHRcXHRcXHRcXHRbVFhfQU1QXzEwTV9BXSA9IHsgMCwgMCwgMCwgMCB9LFxcbitcXHRcXHRcXHRcXHRbVFhfQU1QXzEwTV9CXSA9IHsgMCwgMCwgMCwgMCB9LFxcbitcXHRcXHRcXHRcXHRbUjUwX0FdID0geyAxMiwgMTIsIDEyLCAxMiB9LFxcbitcXHRcXHRcXHRcXHRbUjUwX0JdID0geyA3LCA3LCA3LCA3IH0sXFxuK1xcdFxcdFxcdFxcdFtSNTBfQ10gPSB7IDIsIDIsIDAsIDAgfSxcXG4rXFx0XFx0XFx0XFx0W1I1MF9EXSA9IHsgMCwgMCwgMiwgMiB9LFxcbitcXHRcXHRcXHR9LFxcbitcXHRcXHR9LFxcbitcXHR9LFxcbit9O1xcbitcXG4rc3RhdGljIHU4IGFuNzU4MV96Y2FsX3RvX3I0NW9obVs2NF0gPSB7XFxuK1xcdDEyNywgMTI3LCAxMjcsIDEyNywgMTI3LCAxMjcsIDEyNywgMTI3LCAxMjcsIDEyNywgMTI3LCAxMjcsIDEyNywgMTI3LCAxMjcsIDEyNyxcXG4rXFx0MTI3LCAxMjcsIDEyNywgMTI3LCAxMjcsIDEyNywgMTI3LCAxMjcsIDEyMywgMTE5LCAxMTUsIDExMiwgMTA4LCAxMDQsIDEwMCwgIDk2LFxcbitcXHQgOTQsICA5MiwgIDg4LCAgODUsICA4MiwgIDgwLCAgNzYsICA3NCwgIDcyLCAgNjgsICA2NiwgIDY0LCAgNjIsICA2MCwgIDU2LCAgNTUsXFxuK1xcdCA1MiwgIDUwLCAgNDgsICA0NiwgIDQ0LCAgNDIsICA0MCwgIDM5LCAgMzYsICAzNSwgIDMyLCAgMzIsICAzMCwgIDI4LCAgMjcsICAyNVxcbit9O1xcbitcXG4rLypcXG4rICogMiBjaGlwIHJldmlzaW9uXFxuKyAqIFRYTVIgb3IgZGlzY3JldGVcXG4rICogMiBNREkgdHlwZVxcbisgKiBUWCBBTVAgdGVzdC9UWCBBTVAgMUcvVFggQU1QIDEwME0vVFggQU1QIDEwTS9SNTBcXG4rICogNCBQSFlcXG4rICovXFxuK3N0YXRpYyBpbnQgYW43NTgzX3R4X2FtcF9jb21wZW5zYXRpb25fdGJsW1RSQU5TRk9STUVSX1RZUEVfTUFYXVtNRElfVFlQRV9NQVhdW0NBTElCX0NPTlNUX1RZUEVfTUFYXVs0XSA9IHtcXG4rXFx0W1RYTVJdID0ge1xcbitcXHRcXHRbTURJXzBSXSA9IHtcXG4rXFx0XFx0XFx0W1RYX0FNUF9URVNUX0FdID0geyAtMywgLTMsIC0zLCAtMyB9LFxcbitcXHRcXHRcXHRbVFhfQU1QX1RFU1RfQl0gPSB7IC0zLCAtMywgLTMsIC0zIH0sXFxuK1xcdFxcdFxcdFtUWF9BTVBfVEVTVF9DXSA9IHsgLTMsIC0zLCAtMywgLTMgfSxcXG4rXFx0XFx0XFx0W1RYX0FNUF9URVNUX0RdID0geyAtMywgLTMsIC0zLCAtMyB9LFxcbitcXHRcXHRcXHRbVFhfQU1QXzFHX0FdID0geyAwLCAwLCAwLCAwIH0sXFxuK1xcdFxcdFxcdFtUWF9BTVBfMUdfQl0gPSB7IDAsIDAsIDAsIDAgfSxcXG4rXFx0XFx0XFx0W1RYX0FNUF8xR19DXSA9IHsgMCwgMCwgMCwgMCB9LFxcbitcXHRcXHRcXHRbVFhfQU1QXzFHX0RdID0geyAwLCAwLCAwLCAwIH0sXFxuK1xcdFxcdFxcdFtUWF9BTVBfMTAwTV9BXSA9IHsgNCwgNCwgNCwgNCB9LFxcbitcXHRcXHRcXHRbVFhfQU1QXzEwME1fQl0gPSB7IDQsIDQsIDQsIDQgfSxcXG4rXFx0XFx0XFx0W1RYX0FNUF8xME1fQV0gPSB7IDAsIDAsIDAsIDAgfSxcXG4rXFx0XFx0XFx0W1RYX0FNUF8xME1fQl0gPSB7IDAsIDAsIDAsIDAgfSxcXG4rXFx0XFx0XFx0W1I1MF9BXSA9IHsgNCwgNCwgMCwgMCB9LFxcbitcXHRcXHRcXHRbUjUwX0JdID0geyA0LCA0LCAwLCAwIH0sXFxuK1xcdFxcdFxcdFtSNTBfQ10gPSB7IDUsIDUsIDMsIDQgfSxcXG4rXFx0XFx0XFx0W1I1MF9EXSA9IHsgNCwgNCwgNCwgMCB9LFxcbitcXHRcXHR9LFxcbitcXHRcXHRbTURJXzVSXSA9IHtcXG4rXFx0XFx0XFx0W1RYX0FNUF9URVNUX0FdID0geyAtMywgLTMsIC0zLCAtMyB9LFxcbitcXHRcXHRcXHRbVFhfQU1QX1RFU1RfQl0gPSB7IC0zLCAtMywgLTMsIC0zIH0sXFxuK1xcdFxcdFxcdFtUWF9BTVBfVEVTVF9DXSA9IHsgLTMsIC0zLCAtMywgLTMgfSxcXG4rXFx0XFx0XFx0W1RYX0FNUF9URVNUX0RdID0geyAtMywgLTMsIC0zLCAtMyB9LFxcbitcXHRcXHRcXHRbVFhfQU1QXzFHX0FdID0geyAwLCAwLCAwLCAwIH0sXFxuK1xcdFxcdFxcdFtUWF9BTVBfMUdfQl0gPSB7IDAsIDAsIDAsIDAgfSxcXG4rXFx0XFx0XFx0W1RYX0FNUF8xR19DXSA9IHsgMCwgMCwgMCwgMCB9LFxcbitcXHRcXHRcXHRbVFhfQU1QXzFHX0RdID0geyAwLCAwLCAwLCAwIH0sXFxuK1xcdFxcdFxcdFtUWF9BTVBfMTAwTV9BXSA9IHsgNCwgNCwgNCwgNCB9LFxcbitcXHRcXHRcXHRbVFhfQU1QXzEwME1fQl0gPSB7IDQsIDQsIDQsIDQgfSxcXG4rXFx0XFx0XFx0W1RYX0FNUF8xME1fQV0gPSB7IDAsIDAsIDAsIDAgfSxcXG4rXFx0XFx0XFx0W1RYX0FNUF8xME1fQl0gPSB7IDAsIDAsIDAsIDAgfSxcXG4rXFx0XFx0XFx0W1I1MF9BXSA9IHsgLTQsIC00LCAtNCwgLTQgfSxcXG4rXFx0XFx0XFx0W1I1MF9CXSA9IHsgLTQsIC00LCAtNCwgLTQgfSxcXG4rXFx0XFx0XFx0W1I1MF9DXSA9IHsgLTIsIC0yLCAtMiwgLTIgfSxcXG4rXFx0XFx0XFx0W1I1MF9EXSA9IHsgLTMsIC0zLCAtMiwgLTIgfSxcXG4rXFx0XFx0fSxcXG4rXFx0fSxcXG4rXFx0W0RJU0NSRVRFXSA9IHtcXG4rXFx0XFx0W01ESV8wUl0gPSB7XFxuK1xcdFxcdFxcdFtUWF9BTVBfVEVTVF9BXSA9IHsgLTMsIC0zLCAtMywgLTMgfSxcXG4rXFx0XFx0XFx0W1RYX0FNUF9URVNUX0JdID0geyAtMywgLTMsIC0zLCAtMyB9LFxcbitcXHRcXHRcXHRbVFhfQU1QX1RFU1RfQ10gPSB7IC0zLCAtMywgLTMsIC0zIH0sXFxuK1xcdFxcdFxcdFtUWF9BTVBfVEVTVF9EXSA9IHsgLTMsIC0zLCAtMywgLTMgfSxcXG4rXFx0XFx0XFx0W1RYX0FNUF8xR19BXSA9IHsgMCwgMCwgMCwgMCB9LFxcbitcXHRcXHRcXHRbVFhfQU1QXzFHX0JdID0geyAwLCAwLCAwLCAwIH0sXFxuK1xcdFxcdFxcdFtUWF9BTVBfMUdfQ10gPSB7IDAsIDAsIDAsIDAgfSxcXG4rXFx0XFx0XFx0W1RYX0FNUF8xR19EXSA9IHsgMCwgMCwgMCwgMCB9LFxcbitcXHRcXHRcXHRbVFhfQU1QXzEwME1fQV0gPSB7IDQsIDQsIDQsIDQgfSxcXG4rXFx0XFx0XFx0W1RYX0FNUF8xMDBNX0JdID0geyA0LCA0LCA0LCA0IH0sXFxuK1xcdFxcdFxcdFtUWF9BTVBfMTBNX0FdID0geyAwLCAwLCAwLCAwIH0sXFxuK1xcdFxcdFxcdFtUWF9BTVBfMTBNX0JdID0geyAwLCAwLCAwLCAwIH0sXFxuK1xcdFxcdFxcdFtSNTBfQV0gPSB7IDQsIDQsIDQsIDQgfSxcXG4rXFx0XFx0XFx0W1I1MF9CXSA9IHsgNCwgNCwgNCwgNCB9LFxcbitcXHRcXHRcXHRbUjUwX0NdID0geyA2LCA2LCA2LCA2IH0sXFxuK1xcdFxcdFxcdFtSNTBfRF0gPSB7IDQsIDQsIDQsIDQgfSxcXG4rXFx0XFx0fSxcXG4rXFx0XFx0W01ESV81Ul0gPSB7XFxuK1xcdFxcdFxcdFtUWF9BTVBfVEVTVF9BXSA9IHsgLTMsIC0zLCAtMywgLTMgfSxcXG4rXFx0XFx0XFx0W1RYX0FNUF9URVNUX0JdID0geyAtMywgLTMsIC0zLCAtMyB9LFxcbitcXHRcXHRcXHRbVFhfQU1QX1RFU1RfQ10gPSB7IC0zLCAtMywgLTMsIC0zIH0sXFxuK1xcdFxcdFxcdFtUWF9BTVBfVEVTVF9EXSA9IHsgLTMsIC0zLCAtMywgLTMgfSxcXG4rXFx0XFx0XFx0W1RYX0FNUF8xR19BXSA9IHsgMCwgMCwgMCwgMCB9LFxcbitcXHRcXHRcXHRbVFhfQU1QXzFHX0JdID0geyAwLCAwLCAwLCAwIH0sXFxuK1xcdFxcdFxcdFtUWF9BTVBfMUdfQ10gPSB7IDAsIDAsIDAsIDAgfSxcXG4rXFx0XFx0XFx0W1RYX0FNUF8xR19EXSA9IHsgMCwgMCwgMCwgMCB9LFxcbitcXHRcXHRcXHRbVFhfQU1QXzEwME1fQV0gPSB7IDQsIDQsIDQsIDQgfSxcXG4rXFx0XFx0XFx0W1RYX0FNUF8xMDBNX0JdID0geyA0LCA0LCA0LCA0IH0sXFxuK1xcdFxcdFxcdFtUWF9BTVBfMTBNX0FdID0geyAwLCAwLCAwLCAwIH0sXFxuK1xcdFxcdFxcdFtUWF9BTVBfMTBNX0JdID0geyAwLCAwLCAwLCAwIH0sXFxuK1xcdFxcdFxcdFtSNTBfQV0gPSB7IDAsIDAsIDAsIDAgfSxcXG4rXFx0XFx0XFx0W1I1MF9CXSA9IHsgMCwgMCwgMCwgMCB9LFxcbitcXHRcXHRcXHRbUjUwX0NdID0geyAwLCAwLCAwLCAwIH0sXFxuK1xcdFxcdFxcdFtSNTBfRF0gPSB7IDAsIDAsIDAsIDAgfSxcXG4rXFx0XFx0fSxcXG4rXFx0fSxcXG4rfTtcXG4rXFxuK3N0YXRpYyB1OCBhbjc1ODNfemNhbF90b19yNTBvaG1fMFJbNjRdID0ge1xcbitcXHQxMjcsIDEyNywgMTI3LCAxMjcsIDEyNywgMTI3LCAxMjcsIDEyNywgMTI3LCAxMjcsIDEyNywgMTI3LCAxMjcsIDEyNywgMTI3LCAxMjcsXFxuK1xcdDEyNywgMTI3LCAxMjcsIDEyMiwgMTE4LCAxMTQsIDExMCwgMTA2LCAxMDIsICA5OCwgIDk2LCAgOTIsICA4OCwgIDg1LCAgODIsICA4MCxcXG4rXFx0IDc2LCAgNzIsICA3MCwgIDY4LCAgNjQsICA2MiwgIDYwLCAgNTcsICA1NSwgIDUyLCAgNTAsICA0OCwgIDQ2LCAgNDQsICA0MSwgIDQwLFxcbitcXHQgMzgsICAzNiwgIDMzLCAgMzIsICAzMCwgIDI4LCAgMjYsICAyNCwgIDI0LCAgMjIsICAyMCwgIDE4LCAgMTYsICAxNiwgIDE0LCAgMTIsXFxuK307XFxuK1xcbitzdGF0aWMgdTggYW43NTgzX3pjYWxfdG9fcjUwb2htXzVSWzY0XSA9IHtcXG4rXFx0MTI3LCAxMjcsIDEyNywgMTI3LCAxMjcsIDEyNywgMTI3LCAxMjcsIDEyNywgMTI3LCAxMjcsIDEyNywgMTI3LCAxMjcsIDEyNywgMTI3LFxcbitcXHQxMjcsIDEyNywgMTI3LCAxMjcsIDEyNywgMTI3LCAxMjcsIDEyNywgMTI3LCAxMjQsIDEyMCwgMTE2LCAxMTIsIDExMCwgMTA2LCAxMDIsXFxuK1xcdCA5OSwgIDk2LCAgOTMsICA5MCwgIDg4LCAgODQsICA4MSwgIDc5LCAgNzYsICA3MywgIDcxLCAgNjgsICA2NiwgIDY0LCAgNjEsICA1OSxcXG4rXFx0IDU2LCAgNTQsICA1MiwgIDUwLCAgNDgsICA0NiwgIDQ0LCAgNDIsICA0MCwgIDM5LCAgMzcsICAzNiwgIDMzLCAgMzIsICAzMSwgIDI5LFxcbit9O1xcbitcXG4rc3RhdGljIGludCBhaXJvaGFfY2FsX2N5Y2xlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIGludCBkZXZhZCxcXG4rXFx0XFx0XFx0ICAgIHUzMiByZWdudW0sIHUxNiBtYXNrLCB1MTYgY2FsX3ZhbClcXG4re1xcbitcXHRzdHJ1Y3QgYWlyb2hhX3NvY3BoeV9zaGFyZWQgKnNoYXJlZCA9IHBoeV9wYWNrYWdlX2dldF9wcml2KHBoeWRldik7XFxuK1xcdHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXZfcDA7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRwaHlkZXZfcDAgPSBzaGFyZWQtXFx1MDAzZXBoeWRldl9wMDtcXG4rXFxuK1xcdHBoeV9tb2RpZnlfbW1kKHBoeWRldiwgZGV2YWQsIHJlZ251bSwgbWFzaywgY2FsX3ZhbCk7XFxuK1xcbitcXHRyZXQgPSBtdGtfY2FsX2N5Y2xlX3dhaXQocGh5ZGV2X3AwKTtcXG4rXFx0cGh5ZGV2X2RiZyhwaHlkZXYsIFxcXCJjYWxfdmFsOiAweCV4LCByZXQ6ICVkXFxcXG5cXFwiLCBjYWxfdmFsLCByZXQpO1xcbitcXG4rXFx0cmV0dXJuIHJldDtcXG4rfVxcbitcXG4rc3RhdGljIGludCBhaXJvaGFfcmV4dF9jYWxfc3coc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG4re1xcbitcXHRpbnQgY2FsaWJyYXRpb25fcG9sYXJpdHk7XFxuK1xcdHU4IHpjYWxfY3RybCA9IDMyO1xcbitcXHRpbnQgZmlyc3RfY2FsaWI7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHQvKiBCRyB2b2x0YWdlIG91dHB1dCAqL1xcbitcXHRwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDIsIDB4MTAwLCAweGMwMDApO1xcbitcXHQvKiB0c3RfbW9kZTIgKi9cXG4rXFx0cGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQyLCAweGZmLCAweDIpO1xcbitcXG4rXFx0cGh5X2NsZWFyX2JpdHNfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDIsIDB4ZmYsXFxuK1xcdFxcdFxcdCAgIEdFTk1BU0soMTUsIDQpIHwgR0VOTUFTSygxLCAwKSk7XFxuK1xcbitcXHRwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIE1US19QSFlfUkdfQU5BX0NBTF9SRzAsXFxuK1xcdFxcdCAgICAgIE1US19QSFlfUkdfQ0FMX0NLSU5WIHwgTVRLX1BIWV9SR19BTkFfQ0FMRU4gfFxcbitcXHRcXHQgICAgICBNVEtfUEhZX1JHX1JFWFRfQ0FMRU4pO1xcbitcXHRwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIE1US19QSFlfUkdfQU5BX0NBTF9SRzEsIDApO1xcbitcXHRwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIE1US19QSFlfUkdfQU5BX0NBTF9SRzYsIDApO1xcbitcXG4rXFx0cGh5ZGV2X2RiZyhwaHlkZXYsIFxcXCJTdGFydCBSRVhUIFNXIGNhbC5cXFxcblxcXCIpO1xcbitcXHRmaXJzdF9jYWxpYiA9IGFpcm9oYV9jYWxfY3ljbGUocGh5ZGV2LCBNRElPX01NRF9WRU5EMSwgTVRLX1BIWV9SR19BTkFfQ0FMX1JHNSxcXG4rXFx0XFx0XFx0XFx0ICAgICAgIE1US19QSFlfUkdfUkVYVF9aQ0FMX0NUUkxfTUFTSywgemNhbF9jdHJsKTtcXG4rXFxuK1xcdGlmIChmaXJzdF9jYWxpYiBcXHUwMDNjIDApIHtcXG4rXFx0XFx0cGh5ZGV2X2VycihwaHlkZXYsIFxcXCJSRVhUIFNXIGNhbGlicmF0aW9uIGZhaWxlZC5cXFxcblxcXCIpO1xcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFx0fVxcbitcXG4rXFx0LyogSWYgUkVYVCBjYWxpYnJhdGlvbiBmYWlsZWQ6XFxuK1xcdCAqIC0gaW5jcmVhc2UgZEIgdW50aWwgY2FsaWJyYXRpb24gc3VjY2VlZC5cXG4rXFx0ICogSWYgUkVYVCBjYWxpYnJhdGlvbiBzdWNjZWVkZWQ6XFxuK1xcdCAqIC0gZGVjcmVhc2UgZEIgdW50aWwgY2FsaWJyYXRpb24gZmFpbCB0byBmaW5lIHR1bmUgaXQuXFxuK1xcdCAqL1xcbitcXHRpZiAoZmlyc3RfY2FsaWIgPT0gMSlcXG4rXFx0XFx0Y2FsaWJyYXRpb25fcG9sYXJpdHkgPSAtMTtcXG4rXFx0ZWxzZVxcbitcXHRcXHRjYWxpYnJhdGlvbl9wb2xhcml0eSA9IDE7XFxuK1xcbitcXHR3aGlsZSAoemNhbF9jdHJsIFxcdTAwM2UgMCBcXHUwMDI2XFx1MDAyNlxcbitcXHQgICAgICAgemNhbF9jdHJsIFxcdTAwM2MgRklFTERfTUFYKE1US19QSFlfUkdfUkVYVF9aQ0FMX0NUUkxfTUFTSykpIHtcXG4rXFx0XFx0emNhbF9jdHJsICs9IGNhbGlicmF0aW9uX3BvbGFyaXR5O1xcbitcXG4rXFx0XFx0cmV0ID0gYWlyb2hhX2NhbF9jeWNsZShwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCBNVEtfUEhZX1JHX0FOQV9DQUxfUkc1LFxcbitcXHRcXHRcXHRcXHQgICAgICAgTVRLX1BIWV9SR19SRVhUX1pDQUxfQ1RSTF9NQVNLLCB6Y2FsX2N0cmwpO1xcbitcXHRcXHQvKiBFeGl0IGlmIHdlIGVpdGhlciBmYWlsZWQgb3Igc3VjY2VlZGVkIGNvbXBhcmVkIHRvIHRoZVxcbitcXHRcXHQgKiBmaXJzdCBjYWxpYnJhdGlvbiByZXN1bHQuIChha2Egd2UgZmluaXNoZWQgZmluZSB0dW5pbmcgb3JcXG4rXFx0XFx0ICogd2Ugc3VjY2VlZGVkIHdpdGggY2FsaWJyYXRpb24pXFxuK1xcdFxcdCAqL1xcbitcXHRcXHRpZiAocmV0ICE9IGZpcnN0X2NhbGliKVxcbitcXHRcXHRcXHRicmVhaztcXG4rXFx0fVxcbitcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApIHtcXG4rXFx0XFx0cGh5ZGV2X2VycihwaHlkZXYsIFxcXCJSRVhUIFNXIGNhbGlicmF0aW9uIGZhaWxlZC5cXFxcblxcXCIpO1xcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFx0fVxcbitcXG4rXFx0aWYgKHpjYWxfY3RybCA9PSAwIHx8XFxuK1xcdCAgICB6Y2FsX2N0cmwgPT0gRklFTERfTUFYKE1US19QSFlfUkdfUkVYVF9aQ0FMX0NUUkxfTUFTSykpIHtcXG4rXFx0XFx0emNhbF9jdHJsID0gMzI7XFxuK1xcdFxcdHBoeWRldl9lcnIocGh5ZGV2LCBcXFwiUkVYVCBTVyBjYWxpYnJhdGlvbiBzYXR1cmF0aW9uLiBEZWZhdWx0aW5nIHRvICV4LlxcXFxuXFxcIixcXG4rXFx0XFx0XFx0ICAgemNhbF9jdHJsKTtcXG4rXFx0fVxcbitcXG4rXFx0cGh5X21vZGlmeV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSwgTVRLX1BIWV9SR19BTkFfQ0FMX1JHNSxcXG4rXFx0XFx0ICAgICAgIE1US19QSFlfUkdfUkVYVF9UUklNX01BU0ssXFxuK1xcdFxcdCAgICAgICBGSUVMRF9QUkVQKE1US19QSFlfUkdfUkVYVF9UUklNX01BU0ssIHpjYWxfY3RybCkpO1xcbitcXHRwaHlfbW9kaWZ5X21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQyLCBNVEtfUEhZX1JHX0JHX1JBU0VMLFxcbitcXHRcXHQgICAgICAgTVRLX1BIWV9SR19CR19SQVNFTF9NQVNLLFxcbitcXHRcXHQgICAgICAgRklFTERfUFJFUChNVEtfUEhZX1JHX0JHX1JBU0VMX01BU0ssIHpjYWxfY3RybCBcXHUwMDNlXFx1MDAzZSAzKSk7XFxuK1xcbitcXHRwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIE1US19QSFlfUkdfQU5BX0NBTF9SRzAsIDApO1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgYWlyb2hhX3R4X29mZnNldF9jYWxfc3coc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgdTggdHhnX2NhbGVuX3gpXFxuK3tcXG4rXFx0c3RydWN0IGFpcm9oYV9zb2NwaHlfc2hhcmVkICpzaGFyZWQgPSBwaHlfcGFja2FnZV9nZXRfcHJpdihwaHlkZXYpO1xcbitcXHRzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2X3AwO1xcbitcXHR1MTYgZGV2MWVfMTQ1X3RtcCwgYm1jcl90bXA7XFxuK1xcdGludCBjYWxpYnJhdGlvbl9wb2xhcml0eTtcXG4rXFx0dTE2IHJlZ19kYWMxLCByZWdfZGFjMjtcXG4rXFx0aW50IHpjYWxfY3RybCA9IDA7XFxuK1xcdGludCBmaXJzdF9jYWxpYjtcXG4rXFx0dTE2IHJlZywgbWFzaztcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdHBoeWRldl9wMCA9IHNoYXJlZC1cXHUwMDNlcGh5ZGV2X3AwO1xcbitcXG4rXFx0LyogQkcgdm9sdGFnZSBvdXRwdXQgKi9cXG4rXFx0cGh5X3dyaXRlX21tZChwaHlkZXZfcDAsIE1ESU9fTU1EX1ZFTkQyLCAweDEwMCwgMHhjMDAwKTtcXG4rXFxuK1xcdHBoeV93cml0ZV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSwgTVRLX1BIWV9SR19BTkFfQ0FMX1JHMCxcXG4rXFx0XFx0ICAgICAgTVRLX1BIWV9SR19BTkFfQ0FMRU4pO1xcbitcXHRwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIE1US19QSFlfUkdfQU5BX0NBTF9SRzEsXFxuK1xcdFxcdCAgICAgIE1US19QSFlfUkdfVFhWT1NfQ0FMRU4pO1xcbitcXHRwaHlfd3JpdGVfbW1kKHBoeWRldl9wMCwgTURJT19NTURfVkVORDEsIE1US19QSFlfUkdfQU5BX0NBTF9SRzAsXFxuK1xcdFxcdCAgICAgIE1US19QSFlfUkdfQU5BX0NBTEVOKTtcXG4rXFx0cGh5X3dyaXRlX21tZChwaHlkZXZfcDAsIE1ESU9fTU1EX1ZFTkQxLCBNVEtfUEhZX1JHX0FOQV9DQUxfUkcxLFxcbitcXHRcXHQgICAgICBNVEtfUEhZX1JHX1RYVk9TX0NBTEVOKTtcXG4rXFxuK1xcdC8qIEZvcmNlIDFHIGZ1bGwgZHVwbGV4IGZvciBjYWxpYnJhdGlvbiAqL1xcbitcXHRibWNyX3RtcCA9IHBoeV9yZWFkKHBoeWRldiwgTUlJX0JNQ1IpO1xcbitcXHRwaHlfd3JpdGUocGh5ZGV2LCBNSUlfQk1DUiwgQk1DUl9GVUxMRFBMWCB8IEJNQ1JfU1BFRUQxMDAwKTtcXG4rXFxuK1xcdC8qIEZvcmNlIE1ESSAqL1xcbitcXHRkZXYxZV8xNDVfdG1wID0gcGh5X3JlYWRfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIDB4MDE0NSk7XFxuK1xcdHBoeV93cml0ZV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSwgMHgwMTQ1LCAweDEwMTApO1xcbitcXG4rXFx0LyogMWVfOTZbMTVdOmJ5cGFzc190eF9vZmZzZXRfY2FsLCBIdyBieXBhc3MsIEZ3IGNhbCAqL1xcbitcXHRwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIDB4OTYsXFxuK1xcdFxcdCAgICAgIDB4ODAwMCk7XFxuK1xcdHBoeV93cml0ZV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSwgMHgzZSxcXG4rXFx0XFx0ICAgICAgMHhmODA4KTtcXG4rXFxuK1xcdHN3aXRjaCAodHhnX2NhbGVuX3gpIHtcXG4rXFx0Y2FzZSBQQUlSX0E6XFxuK1xcdFxcdHBoeV93cml0ZV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSwgMHhkZCwgQklUKDEyKSk7XFxuK1xcdFxcdHJlZ19kYWMxID0gTVRLX1BIWV9SR19EQVNOX0RBQ19JTjBfQTtcXG4rXFx0XFx0cmVnX2RhYzIgPSBNVEtfUEhZX1JHX0RBU05fREFDX0lOMV9BO1xcbitcXHRcXHRyZWcgPSBNVEtfUEhZX1JHX0NSX1RYX0FNUF9PRkZTRVRfQV9CO1xcbitcXHRcXHRtYXNrID0gTVRLX1BIWV9DUl9UWF9BTVBfT0ZGU0VUX0FfTUFTSztcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdGNhc2UgUEFJUl9COlxcbitcXHRcXHRwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIDB4ZGQsIEJJVCg4KSk7XFxuK1xcdFxcdHJlZ19kYWMxID0gTVRLX1BIWV9SR19EQVNOX0RBQ19JTjBfQjtcXG4rXFx0XFx0cmVnX2RhYzIgPSBNVEtfUEhZX1JHX0RBU05fREFDX0lOMV9CO1xcbitcXHRcXHRyZWcgPSBNVEtfUEhZX1JHX0NSX1RYX0FNUF9PRkZTRVRfQV9CO1xcbitcXHRcXHRtYXNrID0gTVRLX1BIWV9DUl9UWF9BTVBfT0ZGU0VUX0JfTUFTSztcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdGNhc2UgUEFJUl9DOlxcbitcXHRcXHRwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIDB4ZGQsIEJJVCg0KSk7XFxuK1xcdFxcdHJlZ19kYWMxID0gTVRLX1BIWV9SR19EQVNOX0RBQ19JTjBfQztcXG4rXFx0XFx0cmVnX2RhYzIgPSBNVEtfUEhZX1JHX0RBU05fREFDX0lOMV9DO1xcbitcXHRcXHRyZWcgPSBNVEtfUEhZX1JHX0NSX1RYX0FNUF9PRkZTRVRfQ19EO1xcbitcXHRcXHRtYXNrID0gTVRLX1BIWV9DUl9UWF9BTVBfT0ZGU0VUX0NfTUFTSztcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdGNhc2UgUEFJUl9EOlxcbitcXHRcXHRwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIDB4ZGQsIEJJVCgwKSk7XFxuK1xcdFxcdHJlZ19kYWMxID0gTVRLX1BIWV9SR19EQVNOX0RBQ19JTjBfRDtcXG4rXFx0XFx0cmVnX2RhYzIgPSBNVEtfUEhZX1JHX0RBU05fREFDX0lOMV9EO1xcbitcXHRcXHRyZWcgPSBNVEtfUEhZX1JHX0NSX1RYX0FNUF9PRkZTRVRfQ19EO1xcbitcXHRcXHRtYXNrID0gTVRLX1BIWV9DUl9UWF9BTVBfT0ZGU0VUX0RfTUFTSztcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdGRlZmF1bHQ6XFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXHR9XFxuK1xcbitcXHRwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIHJlZ19kYWMxLFxcbitcXHRcXHQgICAgICAweDgwMDApO1xcbitcXHRwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIHJlZ19kYWMyLFxcbitcXHRcXHQgICAgICAweDgwMDApO1xcbitcXG4rXFx0cGh5ZGV2X2RiZyhwaHlkZXYsIFxcXCJTdGFydCBUWCBPZmZzZXQgU1cgY2FsLlxcXFxuXFxcIik7XFxuK1xcbitcXHRmaXJzdF9jYWxpYiA9IGFpcm9oYV9jYWxfY3ljbGUocGh5ZGV2LCBNRElPX01NRF9WRU5EMSwgcmVnLCBtYXNrLFxcbitcXHRcXHRcXHRcXHQgICAgICAgemNhbF9jdHJsIFxcdTAwM2NcXHUwMDNjIF9fZmZzKG1hc2spKTtcXG4rXFxuK1xcdC8qIElmIFRYIE9mZnNldCBjYWxpYnJhdGlvbiBmYWlsZWQ6XFxuK1xcdCAqIC0gaW5jcmVhc2UgZEIgdW50aWwgY2FsaWJyYXRpb24gc3VjY2VlZC5cXG4rXFx0ICogSWYgVFggT2Zmc2V0IGNhbGlicmF0aW9uIHN1Y2NlZWRlZDpcXG4rXFx0ICogLSBkZWNyZWFzZSBkQiB1bnRpbCBjYWxpYnJhdGlvbiBmYWlsIHRvIGZpbmUgdHVuZSBpdC5cXG4rXFx0ICovXFxuK1xcdGlmIChmaXJzdF9jYWxpYiA9PSAxKVxcbitcXHRcXHRjYWxpYnJhdGlvbl9wb2xhcml0eSA9IC0xO1xcbitcXHRlbHNlXFxuK1xcdFxcdGNhbGlicmF0aW9uX3BvbGFyaXR5ID0gMTtcXG4rXFxuK1xcdHdoaWxlICh6Y2FsX2N0cmwgXFx1MDAzZSAtMzIgXFx1MDAyNlxcdTAwMjYgemNhbF9jdHJsIFxcdTAwM2MgMzIpIHtcXG4rXFx0XFx0dTMyIHZhbDtcXG4rXFxuK1xcdFxcdHpjYWxfY3RybCArPSBjYWxpYnJhdGlvbl9wb2xhcml0eTtcXG4rXFx0XFx0aWYgKHpjYWxfY3RybCBcXHUwMDNlPSAwKVxcbitcXHRcXHRcXHR2YWwgPSB6Y2FsX2N0cmw7XFxuK1xcdFxcdGVsc2VcXG4rXFx0XFx0XFx0LyogQklUKDUpIHNpZ25hbCBuZWdhdGl2ZSBudW1iZXIgZm9yIFRYIE9mZnNldCAqL1xcbitcXHRcXHRcXHR2YWwgPSBCSVQoNSkgfCBhYnMoemNhbF9jdHJsKTtcXG4rXFxuK1xcdFxcdHJldCA9IGFpcm9oYV9jYWxfY3ljbGUocGh5ZGV2LCBNRElPX01NRF9WRU5EMSwgcmVnLCBtYXNrLFxcbitcXHRcXHRcXHRcXHQgICAgICAgdmFsIFxcdTAwM2NcXHUwMDNjIF9fZmZzKG1hc2spKTtcXG4rXFx0XFx0LyogRXhpdCBpZiB3ZSBlaXRoZXIgZmFpbGVkIG9yIHN1Y2NlZWRlZCBjb21wYXJlZCB0byB0aGVcXG4rXFx0XFx0ICogZmlyc3QgY2FsaWJyYXRpb24gcmVzdWx0LiAoYWthIHdlIGZpbmlzaGVkIGZpbmUgdHVuaW5nIG9yXFxuK1xcdFxcdCAqIHdlIHN1Y2NlZWRlZCB3aXRoIGNhbGlicmF0aW9uKVxcbitcXHRcXHQgKi9cXG4rXFx0XFx0aWYgKHJldCAhPSBmaXJzdF9jYWxpYilcXG4rXFx0XFx0XFx0YnJlYWs7XFxuK1xcdH1cXG4rXFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKSB7XFxuK1xcdFxcdHBoeWRldl9lcnIocGh5ZGV2LCBcXFwiVFggT2Zmc2V0IGNhbGlicmF0aW9uIGZhaWxlZC5cXFxcblxcXCIpO1xcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFx0fVxcbitcXG4rXFx0aWYgKHpjYWxfY3RybCA9PSAtMzIgfHxcXG4rXFx0ICAgIHpjYWxfY3RybCA9PSAzMikge1xcbitcXHRcXHR6Y2FsX2N0cmwgPSAwO1xcbitcXHRcXHRwaHlkZXZfZXJyKHBoeWRldiwgXFxcIlRYIE9mZnNldCBTVyBjYWxpYnJhdGlvbiBzYXR1cmF0aW9uLiBEZWZhdWx0aW5nIHRvICV4LlxcXFxuXFxcIixcXG4rXFx0XFx0XFx0ICAgemNhbF9jdHJsKTtcXG4rXFxuK1xcdFxcdHBoeV9tb2RpZnlfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIHJlZywgbWFzayxcXG4rXFx0XFx0XFx0ICAgICAgIHpjYWxfY3RybCBcXHUwMDNjXFx1MDAzYyBfX2ZmcyhtYXNrKSk7XFxuK1xcdH1cXG4rXFxuK1xcdHBoeV93cml0ZV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMiwgMHgxMDAsIDB4MCk7XFxuK1xcbitcXHRwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIE1US19QSFlfUkdfREFTTl9EQUNfSU4wX0EsIDApO1xcbitcXHRwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIE1US19QSFlfUkdfREFTTl9EQUNfSU4wX0IsIDApO1xcbitcXHRwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIE1US19QSFlfUkdfREFTTl9EQUNfSU4wX0MsIDApO1xcbitcXHRwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIE1US19QSFlfUkdfREFTTl9EQUNfSU4wX0QsIDApO1xcbitcXHRwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIE1US19QSFlfUkdfREFTTl9EQUNfSU4xX0EsIDApO1xcbitcXHRwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIE1US19QSFlfUkdfREFTTl9EQUNfSU4xX0IsIDApO1xcbitcXHRwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIE1US19QSFlfUkdfREFTTl9EQUNfSU4xX0MsIDApO1xcbitcXHRwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIE1US19QSFlfUkdfREFTTl9EQUNfSU4xX0QsIDApO1xcbitcXG4rXFx0cGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCBNVEtfUEhZX1JHX0FOQV9DQUxfUkcwLCAwKTtcXG4rXFx0cGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCBNVEtfUEhZX1JHX0FOQV9DQUxfUkcxLCAwKTtcXG4rXFx0cGh5X3dyaXRlX21tZChwaHlkZXZfcDAsIE1ESU9fTU1EX1ZFTkQxLCBNVEtfUEhZX1JHX0FOQV9DQUxfUkcwLCAwKTtcXG4rXFx0cGh5X3dyaXRlX21tZChwaHlkZXZfcDAsIE1ESU9fTU1EX1ZFTkQxLCBNVEtfUEhZX1JHX0FOQV9DQUxfUkcxLCAwKTtcXG4rXFx0cGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCAweDk2LCAweDApO1xcbitcXHRwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIDB4M2UsIDB4YzAwMCk7XFxuK1xcdHBoeV93cml0ZV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSwgMHhkZCwgMCk7XFxuK1xcbitcXHQvKiBSZXN0b3JlIEJNQ1IgKi9cXG4rXFx0cGh5X3dyaXRlKHBoeWRldiwgTUlJX0JNQ1IsIGJtY3JfdG1wKTtcXG4rXFxuK1xcdC8qIFJlc3RvcmUgTURJICovXFxuK1xcdHBoeV93cml0ZV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSwgMHgwMTQ1LCBkZXYxZV8xNDVfdG1wKTtcXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IGFpcm9oYV90eF9hbXBfY2FsX3N3KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIHU4IHR4Z19jYWxlbl94KVxcbit7XFxuK1xcdHN0cnVjdCBhaXJvaGFfc29jcGh5X3NoYXJlZCAqc2hhcmVkID0gcGh5X3BhY2thZ2VfZ2V0X3ByaXYocGh5ZGV2KTtcXG4rXFx0dTE2IG1hc2tfZ2JlLCBtYXNrX3RidCwgbWFza190c3QsIG1hc2tfaGJ0O1xcbitcXHR1MTYgcmVnLCByZWdfMTAwLCByZWdfZGFjMSwgcmVnX2RhYzI7XFxuK1xcdHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXZfcDA7XFxuK1xcdGludCBjYWxpYnJhdGlvbl9wb2xhcml0eTtcXG4rXFx0dTggemNhbF9jdHJsID0gMzI7XFxuK1xcdGludCBmaXJzdF9jYWxpYjtcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdHBoeWRldl9wMCA9IHNoYXJlZC1cXHUwMDNlcGh5ZGV2X3AwO1xcbitcXG4rXFx0LyogQkcgdm9sdGFnZSBvdXRwdXQgKi9cXG4rXFx0cGh5X3dyaXRlX21tZChwaHlkZXZfcDAsIE1ESU9fTU1EX1ZFTkQyLCAweDEwMCwgMHhjMDAwKTtcXG4rXFxuK1xcdHBoeV93cml0ZV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSwgMHgxNDUsIDB4MTAxMCk7XFxuK1xcbitcXHRwaHlfd3JpdGVfbW1kKHBoeWRldl9wMCwgTURJT19NTURfVkVORDEsIE1US19QSFlfUkdfQU5BX0NBTF9SRzAsXFxuK1xcdFxcdCAgICAgIE1US19QSFlfUkdfQ0FMX0NLSU5WIHwgTVRLX1BIWV9SR19BTkFfQ0FMRU4pO1xcbitcXHRwaHlfd3JpdGVfbW1kKHBoeWRldl9wMCwgTURJT19NTURfVkVORDEsIE1US19QSFlfUkdfQU5BX0NBTF9SRzEsXFxuK1xcdFxcdCAgICAgIE1US19QSFlfUkdfVFhWT1NfQ0FMRU4pO1xcbitcXG4rXFx0Lyogc2VsZWN0IDFWICovXFxuK1xcdHBoeV93cml0ZV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSwgTVRLX1BIWV9SR19BTkFfQ0FMX1JHNiwgMHgxMCk7XFxuK1xcbitcXHQvKiBlbmFibGUgVHggVkxEKi9cXG4rXFx0cGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCAweDNlLCAweGY4MDgpO1xcbitcXG4rXFx0LyogRm9yY2UgMUcgZnVsbCBkdXBsZXggZm9yIGNhbGlicmF0aW9uICovXFxuK1xcdHBoeV93cml0ZShwaHlkZXYsIE1JSV9CTUNSLCBCTUNSX0ZVTExEUExYIHwgQk1DUl9TUEVFRDEwMDApO1xcbitcXG4rXFx0c3dpdGNoICh0eGdfY2FsZW5feCkge1xcbitcXHRjYXNlIFBBSVJfQTpcXG4rXFx0XFx0cGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCAweGRkLCBCSVQoMTIpKTtcXG4rXFx0XFx0cmVnX2RhYzEgPSBNVEtfUEhZX1JHX0RBU05fREFDX0lOMF9BO1xcbitcXHRcXHRyZWdfZGFjMiA9IE1US19QSFlfUkdfREFTTl9EQUNfSU4xX0E7XFxuK1xcdFxcdHJlZyA9IE1US19QSFlfVFhWTERfREFfUkc7XFxuK1xcdFxcdG1hc2tfZ2JlID0gTVRLX1BIWV9EQV9UWF9JMk1QQl9BX0dCRV9NQVNLO1xcbitcXHRcXHRtYXNrX3RidCA9IE1US19QSFlfREFfVFhfSTJNUEJfQV9UQlRfTUFTSztcXG4rXFx0XFx0cmVnXzEwMCA9IE1US19QSFlfVFhfSTJNUEJfVEVTVF9NT0RFX0EyO1xcbitcXHRcXHRtYXNrX2hidCA9IE1US19QSFlfREFfVFhfSTJNUEJfQV9IQlRfTUFTSztcXG4rXFx0XFx0bWFza190c3QgPSBNVEtfUEhZX0RBX1RYX0kyTVBCX0FfVFNUX01BU0s7XFxuK1xcdFxcdGJyZWFrO1xcbitcXHRjYXNlIFBBSVJfQjpcXG4rXFx0XFx0cGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCAweGRkLCBCSVQoOCkpO1xcbitcXHRcXHRyZWdfZGFjMSA9IE1US19QSFlfUkdfREFTTl9EQUNfSU4wX0I7XFxuK1xcdFxcdHJlZ19kYWMyID0gTVRLX1BIWV9SR19EQVNOX0RBQ19JTjFfQjtcXG4rXFx0XFx0cmVnID0gTVRLX1BIWV9UWF9JMk1QQl9URVNUX01PREVfQjE7XFxuK1xcdFxcdG1hc2tfZ2JlID0gTVRLX1BIWV9EQV9UWF9JMk1QQl9CX0dCRV9NQVNLO1xcbitcXHRcXHRtYXNrX3RidCA9IE1US19QSFlfREFfVFhfSTJNUEJfQl9UQlRfTUFTSztcXG4rXFx0XFx0cmVnXzEwMCA9IE1US19QSFlfVFhfSTJNUEJfVEVTVF9NT0RFX0IyO1xcbitcXHRcXHRtYXNrX2hidCA9IE1US19QSFlfREFfVFhfSTJNUEJfQl9IQlRfTUFTSztcXG4rXFx0XFx0bWFza190c3QgPSBNVEtfUEhZX0RBX1RYX0kyTVBCX0JfVFNUX01BU0s7XFxuK1xcdFxcdGJyZWFrO1xcbitcXHRjYXNlIFBBSVJfQzpcXG4rXFx0XFx0cGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCAweGRkLCBCSVQoNCkpO1xcbitcXHRcXHRyZWdfZGFjMSA9IE1US19QSFlfUkdfREFTTl9EQUNfSU4wX0M7XFxuK1xcdFxcdHJlZ19kYWMyID0gTVRLX1BIWV9SR19EQVNOX0RBQ19JTjFfQztcXG4rXFx0XFx0cmVnID0gTVRLX1BIWV9UWF9JMk1QQl9URVNUX01PREVfQzE7XFxuK1xcdFxcdG1hc2tfZ2JlID0gTVRLX1BIWV9EQV9UWF9JMk1QQl9DX0dCRV9NQVNLO1xcbitcXHRcXHRtYXNrX3RidCA9IE1US19QSFlfREFfVFhfSTJNUEJfQ19UQlRfTUFTSztcXG4rXFx0XFx0cmVnXzEwMCA9IE1US19QSFlfVFhfSTJNUEJfVEVTVF9NT0RFX0MyO1xcbitcXHRcXHRtYXNrX2hidCA9IE1US19QSFlfREFfVFhfSTJNUEJfQ19IQlRfTUFTSztcXG4rXFx0XFx0bWFza190c3QgPSBNVEtfUEhZX0RBX1RYX0kyTVBCX0NfVFNUX01BU0s7XFxuK1xcdFxcdGJyZWFrO1xcbitcXHRjYXNlIFBBSVJfRDpcXG4rXFx0XFx0cGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCAweGRkLCBCSVQoMCkpO1xcbitcXHRcXHRyZWdfZGFjMSA9IE1US19QSFlfUkdfREFTTl9EQUNfSU4wX0Q7XFxuK1xcdFxcdHJlZ19kYWMyID0gTVRLX1BIWV9SR19EQVNOX0RBQ19JTjFfRDtcXG4rXFx0XFx0cmVnID0gTVRLX1BIWV9UWF9JMk1QQl9URVNUX01PREVfRDE7XFxuK1xcdFxcdG1hc2tfZ2JlID0gTVRLX1BIWV9EQV9UWF9JMk1QQl9EX0dCRV9NQVNLO1xcbitcXHRcXHRtYXNrX3RidCA9IE1US19QSFlfREFfVFhfSTJNUEJfRF9UQlRfTUFTSztcXG4rXFx0XFx0cmVnXzEwMCA9IE1US19QSFlfVFhfSTJNUEJfVEVTVF9NT0RFX0QyO1xcbitcXHRcXHRtYXNrX2hidCA9IE1US19QSFlfREFfVFhfSTJNUEJfRF9IQlRfTUFTSztcXG4rXFx0XFx0bWFza190c3QgPSBNVEtfUEhZX0RBX1RYX0kyTVBCX0RfVFNUX01BU0s7XFxuK1xcdFxcdGJyZWFrO1xcbitcXHRkZWZhdWx0OlxcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFx0fVxcbitcXG4rXFx0cGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCByZWdfZGFjMSxcXG4rXFx0XFx0ICAgICAgMHg4MDAwIHwgMHhmMCk7XFxuK1xcdHBoeV93cml0ZV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSwgcmVnX2RhYzIsXFxuK1xcdFxcdCAgICAgIDB4ODAwMCB8IDB4ZjApO1xcbitcXG4rXFx0cGh5ZGV2X2RiZyhwaHlkZXYsIFxcXCJTdGFydCBUWCBBbXAgU1cgY2FsLlxcXFxuXFxcIik7XFxuK1xcdGZpcnN0X2NhbGliID0gYWlyb2hhX2NhbF9jeWNsZShwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCByZWcsXFxuK1xcdFxcdFxcdFxcdCAgICAgICBtYXNrX2diZSwgemNhbF9jdHJsIFxcdTAwM2NcXHUwMDNjIF9fZmZzKG1hc2tfZ2JlKSk7XFxuK1xcbitcXHQvKiBJZiBUWCBBbXAgY2FsaWJyYXRpb24gZmFpbGVkOlxcbitcXHQgKiAtIGluY3JlYXNlIGRCIHVudGlsIGNhbGlicmF0aW9uIHN1Y2NlZWQuXFxuK1xcdCAqIElmIFRYIEFtcCBjYWxpYnJhdGlvbiBzdWNjZWVkZWQ6XFxuK1xcdCAqIC0gZGVjcmVhc2UgZEIgdW50aWwgY2FsaWJyYXRpb24gZmFpbCB0byBmaW5lIHR1bmUgaXQuXFxuK1xcdCAqL1xcbitcXHRpZiAoZmlyc3RfY2FsaWIgPT0gMSlcXG4rXFx0XFx0Y2FsaWJyYXRpb25fcG9sYXJpdHkgPSAtMTtcXG4rXFx0ZWxzZVxcbitcXHRcXHRjYWxpYnJhdGlvbl9wb2xhcml0eSA9IDE7XFxuK1xcbitcXHR3aGlsZSAoemNhbF9jdHJsIFxcdTAwM2UgMCBcXHUwMDI2XFx1MDAyNlxcbitcXHQgICAgICAgemNhbF9jdHJsIFxcdTAwM2MgRklFTERfTUFYKE1US19QSFlfUkdfUkVYVF9aQ0FMX0NUUkxfTUFTSykpIHtcXG4rXFx0XFx0emNhbF9jdHJsICs9IGNhbGlicmF0aW9uX3BvbGFyaXR5O1xcbitcXG4rXFx0XFx0cmV0ID0gYWlyb2hhX2NhbF9jeWNsZShwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCByZWcsXFxuK1xcdFxcdFxcdFxcdCAgICAgICBtYXNrX2diZSwgemNhbF9jdHJsIFxcdTAwM2NcXHUwMDNjIF9fZmZzKG1hc2tfZ2JlKSk7XFxuK1xcdFxcdC8qIEV4aXQgaWYgd2UgZWl0aGVyIGZhaWxlZCBvciBzdWNjZWVkZWQgY29tcGFyZWQgdG8gdGhlXFxuK1xcdFxcdCAqIGZpcnN0IGNhbGlicmF0aW9uIHJlc3VsdC4gKGFrYSB3ZSBmaW5pc2hlZCBmaW5lIHR1bmluZyBvclxcbitcXHRcXHQgKiB3ZSBzdWNjZWVkZWQgd2l0aCBjYWxpYnJhdGlvbilcXG4rXFx0XFx0ICovXFxuK1xcdFxcdGlmIChyZXQgIT0gZmlyc3RfY2FsaWIpXFxuK1xcdFxcdFxcdGJyZWFrO1xcbitcXHR9XFxuK1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMCkge1xcbitcXHRcXHRwaHlkZXZfZXJyKHBoeWRldiwgXFxcIlRYIEFNUCBjYWxpYnJhdGlvbiBmYWlsZWQuXFxcXG5cXFwiKTtcXG4rXFx0XFx0cGh5X21vZGlmeV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSwgcmVnLFxcbitcXHRcXHRcXHQgICAgICAgbWFza19nYmUgfCBtYXNrX3RidCxcXG4rXFx0XFx0XFx0ICAgICAgICh6Y2FsX2N0cmwgXFx1MDAzY1xcdTAwM2MgX19mZnMobWFza19nYmUpKSB8XFxuK1xcdFxcdFxcdCAgICAgICAoemNhbF9jdHJsIFxcdTAwM2NcXHUwMDNjIF9fZmZzKG1hc2tfdGJ0KSkpO1xcbitcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcdH1cXG4rXFxuK1xcdGlmICh6Y2FsX2N0cmwgPT0gMCB8fFxcbitcXHQgICAgemNhbF9jdHJsID09IEZJRUxEX01BWChNVEtfUEhZX1JHX1JFWFRfWkNBTF9DVFJMX01BU0spKVxcbitcXHRcXHRwaHlkZXZfd2FybihwaHlkZXYsIFxcXCJUWCBBTVAgU1cgY2FsaWJyYXRpb24gc2F0dXJhdGlvbi5cXFxcblxcXCIpO1xcbitcXG4rXFx0cGh5X21vZGlmeV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSwgcmVnLFxcbitcXHRcXHQgICAgICAgbWFza19nYmUgfCBtYXNrX3RidCxcXG4rXFx0XFx0ICAgICAgICh6Y2FsX2N0cmwgXFx1MDAzY1xcdTAwM2MgX19mZnMobWFza19nYmUpKSB8XFxuK1xcdFxcdCAgICAgICAoemNhbF9jdHJsIFxcdTAwM2NcXHUwMDNjIF9fZmZzKG1hc2tfdGJ0KSkpO1xcbitcXG4rXFx0cGh5X21vZGlmeV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSwgcmVnXzEwMCxcXG4rXFx0XFx0ICAgICAgIG1hc2tfaGJ0IHwgbWFza190c3QsXFxuK1xcdFxcdCAgICAgICAoemNhbF9jdHJsIFxcdTAwM2NcXHUwMDNjIF9fZmZzKG1hc2tfaGJ0KSkgfFxcbitcXHRcXHQgICAgICAgKHpjYWxfY3RybCBcXHUwMDNjXFx1MDAzYyBfX2ZmcyhtYXNrX3RzdCkpKTtcXG4rXFxuK1xcdHBoeV93cml0ZV9tbWQocGh5ZGV2X3AwLCBNRElPX01NRF9WRU5EMiwgMHgxMDAsIDB4MCk7XFxuK1xcbitcXHRwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIE1US19QSFlfUkdfREFTTl9EQUNfSU4wX0EsIDApO1xcbitcXHRwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIE1US19QSFlfUkdfREFTTl9EQUNfSU4wX0IsIDApO1xcbitcXHRwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIE1US19QSFlfUkdfREFTTl9EQUNfSU4wX0MsIDApO1xcbitcXHRwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIE1US19QSFlfUkdfREFTTl9EQUNfSU4wX0QsIDApO1xcbitcXHRwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIE1US19QSFlfUkdfREFTTl9EQUNfSU4xX0EsIDApO1xcbitcXHRwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIE1US19QSFlfUkdfREFTTl9EQUNfSU4xX0IsIDApO1xcbitcXHRwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIE1US19QSFlfUkdfREFTTl9EQUNfSU4xX0MsIDApO1xcbitcXHRwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIE1US19QSFlfUkdfREFTTl9EQUNfSU4xX0QsIDApO1xcbitcXHRwaHlfd3JpdGVfbW1kKHBoeWRldl9wMCwgTURJT19NTURfVkVORDEsIDB4MTQ1LCAweDEwMDApO1xcbitcXG4rXFx0cGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCBNVEtfUEhZX1JHX0FOQV9DQUxfUkcwLCAwKTtcXG4rXFx0cGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCBNVEtfUEhZX1JHX0FOQV9DQUxfUkcxLCAwKTtcXG4rXFx0cGh5X3dyaXRlX21tZChwaHlkZXZfcDAsIE1ESU9fTU1EX1ZFTkQxLCBNVEtfUEhZX1JHX0FOQV9DQUxfUkcwLCAwKTtcXG4rXFx0cGh5X3dyaXRlX21tZChwaHlkZXZfcDAsIE1ESU9fTU1EX1ZFTkQxLCBNVEtfUEhZX1JHX0FOQV9DQUxfUkcxLCAwKTtcXG4rXFx0cGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCAweDNlLCAweGMwMDApO1xcbitcXHRwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIDB4ZGQsIDApO1xcbitcXG4rXFx0LyogUmVzdG9yZSBBTiBlbmFibGUgKi9cXG4rXFx0cGh5X3dyaXRlKHBoeWRldiwgTUlJX0JNQ1IsIEJNQ1JfQU5FTkFCTEUpO1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgYWlyb2hhX3R4X3I1MF9jYWxfc3coc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgdTggdHhnX2NhbGVuX3gpXFxuK3tcXG4rXFx0c3RydWN0IGFpcm9oYV9zb2NwaHlfc2hhcmVkICpzaGFyZWQgPSBwaHlfcGFja2FnZV9nZXRfcHJpdihwaHlkZXYpO1xcbitcXHRzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2X3AwO1xcbitcXHR1MTYgZGV2MWVfMTQ1X3RtcCwgYm1jcl90bXA7XFxuK1xcdGludCBjYWxpYnJhdGlvbl9wb2xhcml0eTtcXG4rXFx0dTggemNhbF9jdHJsID0gMzI7XFxuK1xcdGludCBmaXJzdF9jYWxpYjtcXG4rXFx0dTE2IHJlZztcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdHBoeWRldl9wMCA9IHNoYXJlZC1cXHUwMDNlcGh5ZGV2X3AwO1xcbitcXG4rXFx0LyogQkcgdm9sdGFnZSBvdXRwdXQgKi9cXG4rXFx0cGh5X3dyaXRlX21tZChwaHlkZXZfcDAsIE1ESU9fTU1EX1ZFTkQyLCAweDEwMCwgMHhjMDAwKTtcXG4rXFxuK1xcdHBoeV93cml0ZV9tbWQocGh5ZGV2X3AwLCBNRElPX01NRF9WRU5EMSwgTVRLX1BIWV9SR19BTkFfQ0FMX1JHMCxcXG4rXFx0XFx0ICAgICAgTVRLX1BIWV9SR19DQUxfQ0tJTlYgfCBNVEtfUEhZX1JHX0FOQV9DQUxFTik7XFxuK1xcdHBoeV93cml0ZV9tbWQocGh5ZGV2X3AwLCBNRElPX01NRF9WRU5EMSwgTVRLX1BIWV9SR19BTkFfQ0FMX1JHMSwgMCk7XFxuK1xcdC8qIHNlbGVjdCAxViAqL1xcbitcXHRwaHlfd3JpdGVfbW1kKHBoeWRldl9wMCwgTURJT19NTURfVkVORDEsIE1US19QSFlfUkdfQU5BX0NBTF9SRzYsIDB4MTApO1xcbitcXG4rXFx0cGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCBNVEtfUEhZX1JHX0FOQV9DQUxfUkcwLFxcbitcXHRcXHQgICAgICBNVEtfUEhZX1JHX0NBTF9DS0lOViB8IE1US19QSFlfUkdfQU5BX0NBTEVOKTtcXG4rXFx0cGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCBNVEtfUEhZX1JHX0FOQV9DQUxfUkcxLCAwKTtcXG4rXFx0Lyogc2VsZWN0IDFWICovXFxuK1xcdHBoeV93cml0ZV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSwgTVRLX1BIWV9SR19BTkFfQ0FMX1JHNiwgMHgxMCk7XFxuK1xcbitcXHQvKiBGb3JjZSAxRyBmdWxsIGR1cGxleCBmb3IgY2FsaWJyYXRpb24gKi9cXG4rXFx0Ym1jcl90bXAgPSBwaHlfcmVhZChwaHlkZXYsIE1JSV9CTUNSKTtcXG4rXFx0cGh5X3dyaXRlKHBoeWRldiwgTUlJX0JNQ1IsIEJNQ1JfRlVMTERQTFggfCBCTUNSX1NQRUVEMTAwMCk7XFxuK1xcbitcXHQvKiBGb3JjZSBNREkgKi9cXG4rXFx0ZGV2MWVfMTQ1X3RtcCA9IHBoeV9yZWFkX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCAweDAxNDUpO1xcbitcXHRwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIDB4MDE0NSwgMHgxMDEwKTtcXG4rXFxuK1xcdC8qIGRpc2FibGUgdHggc2xldyBjb250cm9sICovXFxuK1xcdHBoeV93cml0ZV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSwgMHgwMTg1LCAweDAwMDApO1xcbitcXHRwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIDB4MDBmYiwgMHgwMTAwKTtcXG4rXFxuK1xcdHN3aXRjaCAodHhnX2NhbGVuX3gpIHtcXG4rXFx0Y2FzZSBQQUlSX0E6XFxuK1xcdFxcdHBoeV9zZXRfYml0c19tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSxcXG4rXFx0XFx0XFx0XFx0IE1US19QSFlfUkdfQU5BX0NBTF9SRzAsXFxuK1xcdFxcdFxcdFxcdCBNVEtfUEhZX1JHX1pDQUxFTl9BKTtcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdGNhc2UgUEFJUl9COlxcbitcXHRcXHRwaHlfc2V0X2JpdHNfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsXFxuK1xcdFxcdFxcdFxcdCBNVEtfUEhZX1JHX0FOQV9DQUxfUkcxLFxcbitcXHRcXHRcXHRcXHQgTVRLX1BIWV9SR19aQ0FMRU5fQik7XFxuK1xcdFxcdGJyZWFrO1xcbitcXHRjYXNlIFBBSVJfQzpcXG4rXFx0XFx0cGh5X3NldF9iaXRzX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLFxcbitcXHRcXHRcXHRcXHQgTVRLX1BIWV9SR19BTkFfQ0FMX1JHMSxcXG4rXFx0XFx0XFx0XFx0IE1US19QSFlfUkdfWkNBTEVOX0MpO1xcbitcXHRcXHRicmVhaztcXG4rXFx0Y2FzZSBQQUlSX0Q6XFxuK1xcdFxcdHBoeV9zZXRfYml0c19tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSxcXG4rXFx0XFx0XFx0XFx0IE1US19QSFlfUkdfQU5BX0NBTF9SRzEsXFxuK1xcdFxcdFxcdFxcdCBNVEtfUEhZX1JHX1pDQUxFTl9EKTtcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdGRlZmF1bHQ6XFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXHR9XFxuK1xcbitcXHRwaHlkZXZfZGJnKHBoeWRldiwgXFxcIlN0YXJ0IFRYIHI1MCBTVyBjYWwuXFxcXG5cXFwiKTtcXG4rXFx0Zmlyc3RfY2FsaWIgPSBhaXJvaGFfY2FsX2N5Y2xlKHBoeWRldl9wMCwgTURJT19NTURfVkVORDEsIE1US19QSFlfUkdfQU5BX0NBTF9SRzUsXFxuK1xcdFxcdFxcdFxcdCAgICAgICBNVEtfUEhZX1JHX1JFWFRfWkNBTF9DVFJMX01BU0ssIHpjYWxfY3RybCk7XFxuK1xcbitcXHRpZiAoZmlyc3RfY2FsaWIgXFx1MDAzYyAwKSB7XFxuK1xcdFxcdHBoeWRldl9lcnIocGh5ZGV2LCBcXFwiVFggcjUwIFNXIGNhbGlicmF0aW9uIGZhaWxlZC5cXFxcblxcXCIpO1xcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFx0fVxcbitcXG4rXFx0LyogSWYgVFggcjUwIGNhbGlicmF0aW9uIGZhaWxlZDpcXG4rXFx0ICogLSBpbmNyZWFzZSBkQiB1bnRpbCBjYWxpYnJhdGlvbiBzdWNjZWVkLlxcbitcXHQgKiBJZiBUWCByNTAgY2FsaWJyYXRpb24gc3VjY2VlZGVkOlxcbitcXHQgKiAtIGRlY3JlYXNlIGRCIHVudGlsIGNhbGlicmF0aW9uIGZhaWwgdG8gZmluZSB0dW5lIGl0LlxcbitcXHQgKi9cXG4rXFx0aWYgKGZpcnN0X2NhbGliID09IDEpXFxuK1xcdFxcdGNhbGlicmF0aW9uX3BvbGFyaXR5ID0gLTE7XFxuK1xcdGVsc2VcXG4rXFx0XFx0Y2FsaWJyYXRpb25fcG9sYXJpdHkgPSAxO1xcbitcXG4rXFx0d2hpbGUgKHpjYWxfY3RybCBcXHUwMDNlIDAgXFx1MDAyNlxcdTAwMjZcXG4rXFx0ICAgICAgIHpjYWxfY3RybCBcXHUwMDNjIEZJRUxEX01BWChNVEtfUEhZX1JHX1JFWFRfWkNBTF9DVFJMX01BU0spKSB7XFxuK1xcdFxcdHpjYWxfY3RybCArPSBjYWxpYnJhdGlvbl9wb2xhcml0eTtcXG4rXFxuK1xcdFxcdHJldCA9IGFpcm9oYV9jYWxfY3ljbGUocGh5ZGV2X3AwLCBNRElPX01NRF9WRU5EMSwgTVRLX1BIWV9SR19BTkFfQ0FMX1JHNSxcXG4rXFx0XFx0XFx0XFx0ICAgICAgIE1US19QSFlfUkdfUkVYVF9aQ0FMX0NUUkxfTUFTSywgemNhbF9jdHJsKTtcXG4rXFx0XFx0LyogRXhpdCBpZiB3ZSBlaXRoZXIgZmFpbGVkIG9yIHN1Y2NlZWRlZCBjb21wYXJlZCB0byB0aGVcXG4rXFx0XFx0ICogZmlyc3QgY2FsaWJyYXRpb24gcmVzdWx0LiAoYWthIHdlIGZpbmlzaGVkIGZpbmUgdHVuaW5nIG9yXFxuK1xcdFxcdCAqIHdlIHN1Y2NlZWRlZCB3aXRoIGNhbGlicmF0aW9uKVxcbitcXHRcXHQgKi9cXG4rXFx0XFx0aWYgKHJldCAhPSBmaXJzdF9jYWxpYilcXG4rXFx0XFx0XFx0YnJlYWs7XFxuK1xcdH1cXG4rXFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKSB7XFxuK1xcdFxcdHBoeWRldl9lcnIocGh5ZGV2LCBcXFwiVFggcjUwIFNXIGNhbGlicmF0aW9uIGZhaWxlZC5cXFxcblxcXCIpO1xcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFx0fVxcbitcXG4rXFx0aWYgKHpjYWxfY3RybCA9PSAwIHx8XFxuK1xcdCAgICB6Y2FsX2N0cmwgPT0gRklFTERfTUFYKE1US19QSFlfUkdfUkVYVF9aQ0FMX0NUUkxfTUFTSykpXFxuK1xcdFxcdHBoeWRldl93YXJuKHBoeWRldiwgXFxcIlRYIHI1MCBTVyBjYWxpYnJhdGlvbiBzYXR1cmF0aW9uLlxcXFxuXFxcIik7XFxuK1xcbitcXHR6Y2FsX2N0cmwgPSBzaGFyZWQtXFx1MDAzZXI1MF9jYWxfdGJsW3pjYWxfY3RybF07XFxuK1xcbitcXHRzd2l0Y2ggKHR4Z19jYWxlbl94KSB7XFxuK1xcdGNhc2UgUEFJUl9BOlxcbitcXHRcXHRyZWcgPSBCSVQoNykgfCBGSUVMRF9QUkVQKE1US19QSFlfQ1JfVFhfUjUwX09GRlNFVF9BX01BU0ssIHpjYWxfY3RybCk7XFxuK1xcdFxcdHBoeV9tb2RpZnlfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsXFxuK1xcdFxcdFxcdCAgICAgICBNVEtfUEhZX1JHX0NSX1RYX1I1MF9PRkZTRVRfQV9CLFxcbitcXHRcXHRcXHQgICAgICAgQklUKDcpIHwgTVRLX1BIWV9DUl9UWF9SNTBfT0ZGU0VUX0FfTUFTSywgcmVnKTtcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdGNhc2UgUEFJUl9COlxcbitcXHRcXHRyZWcgPSBCSVQoNykgfCBGSUVMRF9QUkVQKE1US19QSFlfQ1JfVFhfUjUwX09GRlNFVF9CX01BU0ssIHpjYWxfY3RybCk7XFxuK1xcdFxcdHBoeV9tb2RpZnlfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsXFxuK1xcdFxcdFxcdCAgICAgICBNVEtfUEhZX1JHX0NSX1RYX1I1MF9PRkZTRVRfQV9CLFxcbitcXHRcXHRcXHQgICAgICAgQklUKDcpIHwgTVRLX1BIWV9DUl9UWF9SNTBfT0ZGU0VUX0JfTUFTSywgcmVnKTtcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdGNhc2UgUEFJUl9DOlxcbitcXHRcXHRyZWcgPSBCSVQoNykgfCBGSUVMRF9QUkVQKE1US19QSFlfQ1JfVFhfUjUwX09GRlNFVF9DX01BU0ssIHpjYWxfY3RybCk7XFxuK1xcdFxcdHBoeV9tb2RpZnlfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsXFxuK1xcdFxcdFxcdCAgICAgICBNVEtfUEhZX1JHX0NSX1RYX1I1MF9PRkZTRVRfQ19ELFxcbitcXHRcXHRcXHQgICAgICAgQklUKDcpIHwgTVRLX1BIWV9DUl9UWF9SNTBfT0ZGU0VUX0NfTUFTSywgcmVnKTtcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdGNhc2UgUEFJUl9EOlxcbitcXHRcXHRyZWcgPSBCSVQoNykgfCBGSUVMRF9QUkVQKE1US19QSFlfQ1JfVFhfUjUwX09GRlNFVF9EX01BU0ssIHpjYWxfY3RybCk7XFxuK1xcdFxcdHBoeV9tb2RpZnlfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsXFxuK1xcdFxcdFxcdCAgICAgICBNVEtfUEhZX1JHX0NSX1RYX1I1MF9PRkZTRVRfQ19ELFxcbitcXHRcXHRcXHQgICAgICAgQklUKDcpIHwgTVRLX1BIWV9DUl9UWF9SNTBfT0ZGU0VUX0RfTUFTSywgcmVnKTtcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdGRlZmF1bHQ6XFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXHR9XFxuK1xcbitcXHRwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIE1US19QSFlfUkdfQU5BX0NBTF9SRzAsIDApO1xcbitcXHRwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIE1US19QSFlfUkdfQU5BX0NBTF9SRzEsIDApO1xcbitcXHRwaHlfd3JpdGVfbW1kKHBoeWRldl9wMCwgTURJT19NTURfVkVORDEsIE1US19QSFlfUkdfQU5BX0NBTF9SRzAsIDApO1xcbitcXHRwaHlfd3JpdGVfbW1kKHBoeWRldl9wMCwgTURJT19NTURfVkVORDEsIE1US19QSFlfUkdfQU5BX0NBTF9SRzEsIDApO1xcbitcXG4rXFx0LyogRW5hYmxlIHR4IHNsZXcgY29udHJvbCAqL1xcbitcXHRwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIDB4MDE4NSwgMHgwMDAxKTtcXG4rXFx0cGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCAweDAwZmIsIDB4MDAwMCk7XFxuK1xcbitcXHRwaHlfd3JpdGVfbW1kKHBoeWRldl9wMCwgTURJT19NTURfVkVORDIsIDB4MTAwLCAweDApO1xcbitcXG4rXFx0cGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCBNVEtfUEhZX1JHX0FOQV9DQUxfUkc2LCAweDApO1xcbitcXHRwaHlfd3JpdGVfbW1kKHBoeWRldl9wMCwgTURJT19NTURfVkVORDEsIE1US19QSFlfUkdfQU5BX0NBTF9SRzYsIDB4MCk7XFxuK1xcbitcXHQvKiBSZXN0b3JlIEJNQ1IgKi9cXG4rXFx0cGh5X3dyaXRlKHBoeWRldiwgTUlJX0JNQ1IsIGJtY3JfdG1wKTtcXG4rXFxuK1xcdC8qIFJlc3RvcmUgTURJICovXFxuK1xcdHBoeV93cml0ZV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSwgMHgwMTQ1LCBkZXYxZV8xNDVfdG1wKTtcXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IGFpcm9oYV9yeF9vZmZzZXRfY2FsX3N3KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuK3tcXG4rXFx0LyogSHcgYnlwYXNzLCBGdyBjYWwgKi9cXG4rXFx0cGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCAweDk2LCAweDgwMDApO1xcbitcXHQvKiB0eC9yeF9jYWxfY3JpdGVyaWFfdmFsdWUgKi9cXG4rXFx0cGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCAweDM3LCAweDAwMzMpO1xcbitcXG4rXFx0Lyogcnggb2Zmc2V0IGNhbCBieSBIdyBzZXR1cCAqL1xcbitcXHRwaHlfY2xlYXJfYml0c19tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSwgMHgzOSxcXG4rXFx0XFx0XFx0ICAgQklUKDE0KSB8IEJJVCgxMSkpO1xcbitcXG4rXFx0LyogZGlzYWJsZSBydHVuZSBjYWxpYnJhdGlvbiAqL1xcbitcXHRwaHlfY2xlYXJfYml0c19tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMiwgMHgxMDcsXFxuK1xcdFxcdFxcdCAgIEJJVCgxMikpO1xcbitcXG4rXFx0LyogYnlwYXNzIHR4L3J4IGRjIG9mZnNldCBjYW5jZWxsYXRpb24gcHJvY2VzcyAqL1xcbitcXHRwaHlfc2V0X2JpdHNfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIDB4MTcxLFxcbitcXHRcXHRcXHQgQklUKDgpIHwgQklUKDcpKTtcXG4rXFxuK1xcdC8qIHJ4IG9mZnNldCBjYWxpYnJhdGlvbiBzdGFydCAqL1xcbitcXHRwaHlfc2V0X2JpdHNfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIDB4MzksXFxuK1xcdFxcdFxcdCBCSVQoMTMpKTtcXG4rXFxuK1xcdC8qIHJ4IG9mZnNldCBjYWxpYnJhdGlvbiBzdG9wICovXFxuK1xcdHBoeV9jbGVhcl9iaXRzX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCAweDM5LFxcbitcXHRcXHRcXHQgICBCSVQoMTMpKTtcXG4rXFxuK1xcdG1kZWxheSgxMCk7XFxuK1xcbitcXHRwaHlfY2xlYXJfYml0c19tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSwgMHgxNzEsXFxuK1xcdFxcdFxcdCAgIEJJVCg4KSB8IEJJVCg3KSk7XFxuK1xcbitcXHRpZiAocGh5ZGV2LVxcdTAwM2VkcnYtXFx1MDAzZXBoeV9pZCA9PSBBSVJPSEFfR1BIWV9JRF9BTjc1ODEpXFxuK1xcdFxcdHBoeV93cml0ZV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSxcXG4rXFx0XFx0XFx0ICAgICAgTVRLX1BIWV9SR19BTkFfQ0FMX1JHNiwgMHgxKTtcXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IGFpcm9oYV9jYWxfc3coc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgZW51bSBDQUxfSVRFTSBjYWxfaXRlbSxcXG4rXFx0XFx0XFx0IHU4IHN0YXJ0X3BhaXIsIHU4IGVuZF9wYWlyKVxcbit7XFxuK1xcdHU4IHBhaXJfbjtcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdGZvciAocGFpcl9uID0gc3RhcnRfcGFpcjsgcGFpcl9uIFxcdTAwM2M9IGVuZF9wYWlyOyBwYWlyX24rKykge1xcbitcXHRcXHRzd2l0Y2ggKGNhbF9pdGVtKSB7XFxuK1xcdFxcdGNhc2UgUkVYVDpcXG4rXFx0XFx0XFx0cmV0ID0gYWlyb2hhX3JleHRfY2FsX3N3KHBoeWRldik7XFxuK1xcdFxcdFxcdGJyZWFrO1xcbitcXHRcXHRjYXNlIFRYX09GRlNFVDpcXG4rXFx0XFx0XFx0cmV0ID0gYWlyb2hhX3R4X29mZnNldF9jYWxfc3cocGh5ZGV2LCBwYWlyX24pO1xcbitcXHRcXHRcXHRicmVhaztcXG4rXFx0XFx0Y2FzZSBUWF9BTVA6XFxuK1xcdFxcdFxcdHJldCA9IGFpcm9oYV90eF9hbXBfY2FsX3N3KHBoeWRldiwgcGFpcl9uKTtcXG4rXFx0XFx0XFx0YnJlYWs7XFxuK1xcdFxcdGNhc2UgVFhfUjUwOlxcbitcXHRcXHRcXHRyZXQgPSBhaXJvaGFfdHhfcjUwX2NhbF9zdyhwaHlkZXYsIHBhaXJfbik7XFxuK1xcdFxcdFxcdGJyZWFrO1xcbitcXHRcXHRjYXNlIFJYX09GRlNFVDpcXG4rXFx0XFx0XFx0cmV0ID0gYWlyb2hhX3J4X29mZnNldF9jYWxfc3cocGh5ZGV2KTtcXG4rXFx0XFx0XFx0YnJlYWs7XFxuK1xcdFxcdGRlZmF1bHQ6XFxuK1xcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXHRcXHR9XFxuK1xcdFxcdGlmIChyZXQpXFxuK1xcdFxcdFxcdHJldHVybiByZXQ7XFxuK1xcdH1cXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgYWlyb2hhX3N0YXJ0X2NhbChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCBlbnVtIENBTF9JVEVNIGNhbF9pdGVtLFxcbitcXHRcXHRcXHQgICAgZW51bSBDQUxfTU9ERSBjYWxfbW9kZSwgdTggc3RhcnRfcGFpcixcXG4rXFx0XFx0XFx0ICAgIHU4IGVuZF9wYWlyLCB1MzIgKmJ1ZilcXG4re1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0c3dpdGNoIChjYWxfbW9kZSkge1xcbitcXHRjYXNlIFNXX006XFxuK1xcdFxcdHJldCA9IGFpcm9oYV9jYWxfc3cocGh5ZGV2LCBjYWxfaXRlbSwgc3RhcnRfcGFpciwgZW5kX3BhaXIpO1xcbitcXHRcXHRicmVhaztcXG4rXFx0ZGVmYXVsdDpcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcdH1cXG4rXFxuK1xcdGlmIChyZXQpIHtcXG4rXFx0XFx0cGh5ZGV2X2VycihwaHlkZXYsIFxcXCJjYWwgJWQgZmFpbGVkXFxcXG5cXFwiLCBjYWxfaXRlbSk7XFxuK1xcdFxcdHJldHVybiAtRUlPO1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rc3RhdGljIGludCBhaXJvaGFfcGh5X2NhbGliKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuK3tcXG4rXFx0c3RydWN0IGFpcm9oYV9zb2NwaHlfc2hhcmVkICpzaGFyZWQgPSBwaHlfcGFja2FnZV9nZXRfcHJpdihwaHlkZXYpO1xcbitcXHRzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2X3AwO1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0cGh5ZGV2X3AwID0gc2hhcmVkLVxcdTAwM2VwaHlkZXZfcDA7XFxuK1xcbitcXHQvKiBQcmVDYWxpYnJhdGUgU2V0ICovXFxuK1xcdHBoeV93cml0ZV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSwgMHg1YywgMHg2NjY2KTtcXG4rXFxuK1xcdGlmICghc2hhcmVkLVxcdTAwM2VyZXh0X3N3X2NhbGliX2RvbmUpIHtcXG4rXFx0XFx0cmV0ID0gYWlyb2hhX3N0YXJ0X2NhbChwaHlkZXYsIFJFWFQsIFNXX00sIE5PX1BBSVIsIE5PX1BBSVIsIE5VTEwpO1xcbitcXHRcXHRpZiAocmV0KVxcbitcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0XFx0c2hhcmVkLVxcdTAwM2VyZXh0X3N3X2NhbGliX2RvbmUgPSB0cnVlO1xcbitcXHR9XFxuK1xcbitcXHRyZXQgPSBhaXJvaGFfc3RhcnRfY2FsKHBoeWRldiwgVFhfUjUwLCBTV19NLCBQQUlSX0EsIFBBSVJfRCwgTlVMTCk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHRyZXQgPSBhaXJvaGFfc3RhcnRfY2FsKHBoeWRldiwgVFhfT0ZGU0VULCBTV19NLCBQQUlSX0EsIFBBSVJfRCwgTlVMTCk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHRyZXQgPSBhaXJvaGFfc3RhcnRfY2FsKHBoeWRldiwgVFhfQU1QLCBTV19NLCBQQUlSX0EsIFBBSVJfRCwgTlVMTCk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHRyZXQgPSBhaXJvaGFfc3RhcnRfY2FsKHBoeWRldiwgUlhfT0ZGU0VULCBTV19NLCBOT19QQUlSLCBOT19QQUlSLCBOVUxMKTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdC8qIEdhdGluZywgc2hvcnQgd2l0aCBvdGhlciBwYWlyICovXFxuK1xcdHBoeV93cml0ZV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSwgMHgxNSwgMHgwKTtcXG4rXFxuK1xcdHBoeV93cml0ZV9tbWQocGh5ZGV2X3AwLCBNRElPX01NRF9WRU5EMiwgMHgxMDAsIDB4MCk7XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rc3RhdGljIGludCBhaXJvaGFfcGh5X2F1dG9fc2VsZWN0X3RyYW5zZm9ybWVyKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuK3tcXG4rXFx0c3RydWN0IGFpcm9oYV9zb2NwaHlfc2hhcmVkICpzaGFyZWQgPSBwaHlfcGFja2FnZV9nZXRfcHJpdihwaHlkZXYpO1xcbitcXHRzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2X3AwO1xcbitcXHR1OCBwaHlfb2Zmc2V0O1xcbitcXHR1MTYgYm1jcl90bXA7XFxuK1xcdHUxNiB2YWw7XFxuK1xcdGludCBpO1xcbitcXG4rXFx0cGh5ZGV2X3AwID0gc2hhcmVkLVxcdTAwM2VwaHlkZXZfcDA7XFxuK1xcdHBoeV9vZmZzZXQgPSBwaHlkZXYtXFx1MDAzZW1kaW8uYWRkciAtIHBoeWRldl9wMC1cXHUwMDNlbWRpby5hZGRyO1xcbitcXG4rXFx0LyogRm9yY2UgMUcgZnVsbCBkdXBsZXggZm9yIGNhbGlicmF0aW9uICovXFxuK1xcdGJtY3JfdG1wID0gcGh5X3JlYWQocGh5ZGV2LCBNSUlfQk1DUik7XFxuK1xcdHBoeV93cml0ZShwaHlkZXYsIE1JSV9CTUNSLCBCTUNSX0ZVTExEUExYIHwgQk1DUl9TUEVFRDEwMDApO1xcbitcXG4rXFx0cGh5X21vZGlmeV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMiwgMHgyNzEsIEdFTk1BU0soNCwgMCksXFxuK1xcdFxcdCAgICAgICBGSUVMRF9QUkVQKEdFTk1BU0soNCwgMCksIDB4MykpO1xcbitcXG4rXFx0cGh5X21vZGlmeV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMiwgMHgyNjksIEdFTk1BU0soMTUsIDEyKSxcXG4rXFx0XFx0ICAgICAgIEZJRUxEX1BSRVAoR0VOTUFTSygxNSwgMTIpLCAweDIpKTtcXG4rXFxuK1xcdHBoeV9tb2RpZnlfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDIsIDB4MjZmLCBHRU5NQVNLKDE0LCAxMiksXFxuK1xcdFxcdCAgICAgICBGSUVMRF9QUkVQKEdFTk1BU0soMTQsIDEyKSwgMHgwKSk7XFxuK1xcbitcXHRwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIDB4ZGQsIEJJVCgxMikpO1xcbitcXG4rXFx0cGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCBNVEtfUEhZX1JHX0RBU05fREFDX0lOMF9BLFxcbitcXHRcXHQgICAgICAweDgwMDAgfCAweGYwKTtcXG4rXFx0cGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCBNVEtfUEhZX1JHX0RBU05fREFDX0lOMV9BLFxcbitcXHRcXHQgICAgICAweDgwMDAgfCAweGYwKTtcXG4rXFx0cGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCBNVEtfUEhZX1JHX0RBU05fREFDX0lOMF9CLFxcbitcXHRcXHQgICAgICAweDgwMDAgfCAweGYwKTtcXG4rXFx0cGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCBNVEtfUEhZX1JHX0RBU05fREFDX0lOMV9CLFxcbitcXHRcXHQgICAgICAweDgwMDAgfCAweGYwKTtcXG4rXFx0cGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCBNVEtfUEhZX1JHX0RBU05fREFDX0lOMF9DLFxcbitcXHRcXHQgICAgICAweDgwMDAgfCAweGYwKTtcXG4rXFx0cGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCBNVEtfUEhZX1JHX0RBU05fREFDX0lOMV9DLFxcbitcXHRcXHQgICAgICAweDgwMDAgfCAweGYwKTtcXG4rXFx0cGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCBNVEtfUEhZX1JHX0RBU05fREFDX0lOMF9ELFxcbitcXHRcXHQgICAgICAweDgwMDAgfCAweGYwKTtcXG4rXFx0cGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCBNVEtfUEhZX1JHX0RBU05fREFDX0lOMV9ELFxcbitcXHRcXHQgICAgICAweDgwMDAgfCAweGYwKTtcXG4rXFxuK1xcdC8qIEZvcmNlIHBHQSBnYWluICovXFxuK1xcdHBoeV9zZWxlY3RfcGFnZShwaHlkZXYsIE1US19QSFlfUEFHRV9FWFRFTkRFRF81MkI1KTtcXG4rXFx0X19tdGtfdHJfbW9kaWZ5KHBoeWRldiwgMHgxLCAweGYsIDB4MTAsXFxuK1xcdFxcdFxcdEdFTk1BU0soMjAsIDE1KSxcXG4rXFx0XFx0XFx0RklFTERfUFJFUChHRU5NQVNLKDIwLCAxNSksIDB4MWYpKTtcXG4rXFxuK1xcdF9fbXRrX3RyX21vZGlmeShwaHlkZXYsIDB4MSwgMHhmLCAweDExLFxcbitcXHRcXHRcXHRHRU5NQVNLKDIzLCAxOCkgfCBHRU5NQVNLKDE1LCAxMCkgfCBHRU5NQVNLKDcsIDIpLFxcbitcXHRcXHRcXHRGSUVMRF9QUkVQKEdFTk1BU0soMjMsIDE4KSwgMHgxZikgfFxcbitcXHRcXHRcXHRGSUVMRF9QUkVQKEdFTk1BU0soMTUsIDEwKSwgMHgxZikgfFxcbitcXHRcXHRcXHRGSUVMRF9QUkVQKEdFTk1BU0soNywgMiksIDB4MWYpKTtcXG4rXFx0cGh5X3Jlc3RvcmVfcGFnZShwaHlkZXYsIE1US19QSFlfUEFHRV9TVEFOREFSRCwgMCk7XFxuK1xcbitcXHRwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIDB4YzksIDB4ZmZmZik7XFxuK1xcdHBoeV93cml0ZV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSwgMHgxNTEsIDB4MTIpO1xcbitcXG4rXFx0c3dpdGNoIChwaHlfb2Zmc2V0KSB7XFxuK1xcdGNhc2UgMDpcXG4rXFx0XFx0dmFsID0gMHgxO1xcbitcXHRcXHRicmVhaztcXG4rXFx0Y2FzZSAxOlxcbitcXHRcXHR2YWwgPSAweDM7XFxuK1xcdFxcdGJyZWFrO1xcbitcXHRjYXNlIDI6XFxuK1xcdFxcdHZhbCA9IDB4NTtcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdGNhc2UgMzpcXG4rXFx0XFx0dmFsID0gMHg3O1xcbitcXHRcXHRicmVhaztcXG4rXFx0ZGVmYXVsdDpcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcdH1cXG4rXFx0cGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQyLCAweDE1LFxcbitcXHRcXHQgICAgICBGSUVMRF9QUkVQKEdFTk1BU0soMTQsIDEyKSwgdmFsKSB8IDB4MTYxKTtcXG4rXFx0bWRlbGF5KDUwMCk7XFxuK1xcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgMzsgaSsrKVxcbitcXHRcXHR2YWwgPSBwaHlfcmVhZF9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMiwgMHgxYSk7XFxuK1xcbitcXHQvKiBDaGVjayB0aGUgdmFsdWUgYW5kIHJlcG9ydCB0cmFuc2Zvcm1lciB0eXBlIGZvciBsYXRlciAqL1xcbitcXHRzaGFyZWQtXFx1MDAzZXRyYW5zZm9ybWVyX3R5cGVbcGh5X29mZnNldF0gPSB2YWwgXFx1MDAzYyAweGUwO1xcbitcXG4rXFx0LyogU3dpdGNoIHRvIERlZmF1bHQgKi9cXG4rXFx0cGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQyLCAweDE1LCAweDEwMDApO1xcbitcXG4rXFx0cGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCAweGRkLCAweDApO1xcbitcXG4rXFx0cGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCBNVEtfUEhZX1JHX0RBU05fREFDX0lOMF9BLFxcbitcXHRcXHQgICAgICAweDApO1xcbitcXHRwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIE1US19QSFlfUkdfREFTTl9EQUNfSU4xX0EsXFxuK1xcdFxcdCAgICAgIDB4MCk7XFxuK1xcdHBoeV93cml0ZV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSwgTVRLX1BIWV9SR19EQVNOX0RBQ19JTjBfQixcXG4rXFx0XFx0ICAgICAgMHgwKTtcXG4rXFx0cGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCBNVEtfUEhZX1JHX0RBU05fREFDX0lOMV9CLFxcbitcXHRcXHQgICAgICAweDApO1xcbitcXHRwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIE1US19QSFlfUkdfREFTTl9EQUNfSU4wX0MsXFxuK1xcdFxcdCAgICAgIDB4MCk7XFxuK1xcdHBoeV93cml0ZV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSwgTVRLX1BIWV9SR19EQVNOX0RBQ19JTjFfQyxcXG4rXFx0XFx0ICAgICAgMHgwKTtcXG4rXFx0cGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCBNVEtfUEhZX1JHX0RBU05fREFDX0lOMF9ELFxcbitcXHRcXHQgICAgICAweDApO1xcbitcXHRwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIE1US19QSFlfUkdfREFTTl9EQUNfSU4xX0QsXFxuK1xcdFxcdCAgICAgIDB4MCk7XFxuK1xcbitcXHRwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIDB4YzksIDB4ZmZmKTtcXG4rXFx0cGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCAweDE1MSwgMHgwKTtcXG4rXFxuK1xcdHBoeV9zZWxlY3RfcGFnZShwaHlkZXYsIE1US19QSFlfUEFHRV9FWFRFTkRFRF81MkI1KTtcXG4rXFx0X19tdGtfdHJfbW9kaWZ5KHBoeWRldiwgMHgxLCAweGYsIDB4MTAsXFxuK1xcdFxcdFxcdEdFTk1BU0soMjAsIDE1KSxcXG4rXFx0XFx0XFx0RklFTERfUFJFUChHRU5NQVNLKDIwLCAxNSksIDB4NCkpO1xcbitcXG4rXFx0X19tdGtfdHJfbW9kaWZ5KHBoeWRldiwgMHgxLCAweGYsIDB4MTEsXFxuK1xcdFxcdFxcdEdFTk1BU0soMjMsIDE4KSB8IEdFTk1BU0soMTUsIDEwKSB8IEdFTk1BU0soNywgMiksXFxuK1xcdFxcdFxcdEZJRUxEX1BSRVAoR0VOTUFTSygyMywgMTgpLCAweDApIHxcXG4rXFx0XFx0XFx0RklFTERfUFJFUChHRU5NQVNLKDE1LCAxMCksIDB4MCkgfFxcbitcXHRcXHRcXHRGSUVMRF9QUkVQKEdFTk1BU0soNywgMiksIDB4MCkpO1xcbitcXHRwaHlfcmVzdG9yZV9wYWdlKHBoeWRldiwgTVRLX1BIWV9QQUdFX1NUQU5EQVJELCAwKTtcXG4rXFxuK1xcdC8qIFJlc3RvcmUgQk1DUiAqL1xcbitcXHRwaHlfd3JpdGUocGh5ZGV2LCBNSUlfQk1DUiwgYm1jcl90bXApO1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgYWlyb2hhX3BoeV90eF9hbXBfY29tcGVuc2F0aW9uKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuK3tcXG4rXFx0c3RydWN0IGFpcm9oYV9zb2NwaHlfc2hhcmVkICpzaGFyZWQgPSBwaHlfcGFja2FnZV9nZXRfcHJpdihwaHlkZXYpO1xcbitcXG4rXFx0dTE2IHJlZ18xZV8xMl9yZWFkO1xcbitcXHR1MTYgcmVnXzFlXzE2X3JlYWQ7XFxuK1xcdHUxNiByZWdfMWVfMTdfcmVhZDtcXG4rXFx0dTE2IHJlZ18xZV8xOF9yZWFkO1xcbitcXHR1MTYgcmVnXzFlXzE5X3JlYWQ7XFxuK1xcdHUxNiByZWdfMWVfMjBfcmVhZDtcXG4rXFx0dTE2IHJlZ18xZV8yMV9yZWFkO1xcbitcXHR1MTYgcmVnXzFlXzIyX3JlYWQ7XFxuK1xcdHUxNiByZWdfMWVfMTc0X3JlYWQ7XFxuK1xcdHUxNiByZWdfMWVfMTc1X3JlYWQ7XFxuK1xcbitcXHRpbnQgcmVnXzFlXzEyX2hlYWRlcjtcXG4rXFx0aW50IHJlZ18xZV8xNl9oZWFkZXI7XFxuK1xcdGludCByZWdfMWVfMTdfaGVhZGVyO1xcbitcXHRpbnQgcmVnXzFlXzE4X2hlYWRlcjtcXG4rXFx0aW50IHJlZ18xZV8xOV9oZWFkZXI7XFxuK1xcdGludCByZWdfMWVfMjFfaGVhZGVyO1xcbitcXHRpbnQgcmVnXzFlXzE3NF9oZWFkZXI7XFxuK1xcdGludCByZWdfMWVfMTc1X2hlYWRlcjtcXG4rXFxuK1xcdGludCByZWdfMWVfMTJfZW5kO1xcbitcXHRpbnQgcmVnXzFlXzE2X2VuZDtcXG4rXFx0aW50IHJlZ18xZV8xN19lbmQ7XFxuK1xcdGludCByZWdfMWVfMThfZW5kO1xcbitcXHRpbnQgcmVnXzFlXzIwX2VuZDtcXG4rXFx0aW50IHJlZ18xZV8yMl9lbmQ7XFxuK1xcdGludCByZWdfMWVfMTc0X2VuZDtcXG4rXFx0aW50IHJlZ18xZV8xNzVfZW5kO1xcbitcXG4rXFx0c3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldl9wMDtcXG4rXFx0dTggcGh5X29mZnNldDtcXG4rXFxuK1xcdGludCB0eGFtcF9sb3dfbGltaXQgPSAtMztcXG4rXFx0aW50IHR4YW1wX2hpZ2hfbGltaXQgPSAweDQyO1xcbitcXG4rXFx0aW50IHI1MF9sb3dfbGltaXQgPSAtODtcXG4rXFx0aW50IHI1MF9oaWdoX2xpbWl0ID0gMHg4ODtcXG4rXFxuK1xcdGJvb2wgb3ZlcmZsb3c7XFxuK1xcdGludCAoKnR4X2FtcF90YWJsZSlbQ0FMSUJfQ09OU1RfVFlQRV9NQVhdWzRdO1xcbitcXHRpbnQgdHJhbnNmb3JtZXJfdHlwZSwgbWRpX3Jlc2lzdGVyX3R5cGU7XFxuK1xcbitcXHRwaHlkZXZfcDAgPSBzaGFyZWQtXFx1MDAzZXBoeWRldl9wMDtcXG4rXFx0cGh5X29mZnNldCA9IHBoeWRldi1cXHUwMDNlbWRpby5hZGRyIC0gcGh5ZGV2X3AwLVxcdTAwM2VtZGlvLmFkZHI7XFxuK1xcbitcXHR0cmFuc2Zvcm1lcl90eXBlID0gc2hhcmVkLVxcdTAwM2V0cmFuc2Zvcm1lcl90eXBlW3BoeV9vZmZzZXRdO1xcbitcXHRtZGlfcmVzaXN0ZXJfdHlwZSA9IHNoYXJlZC1cXHUwMDNlbWRpX3Jlc2lzdGVyX3R5cGU7XFxuK1xcdHR4X2FtcF90YWJsZSA9IHNoYXJlZC1cXHUwMDNldHhfYW1wX2NvbXBlbnNhdGlvbl90YmxbdHJhbnNmb3JtZXJfdHlwZV1bbWRpX3Jlc2lzdGVyX3R5cGVdO1xcbitcXG4rXFx0cmVnXzFlXzEyX3JlYWQgPSBwaHlfcmVhZF9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSwgMHgxMik7XFxuK1xcdHJlZ18xZV8xNl9yZWFkID0gcGh5X3JlYWRfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIDB4MTYpO1xcbitcXHRyZWdfMWVfMTdfcmVhZCA9IHBoeV9yZWFkX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCAweDE3KTtcXG4rXFx0cmVnXzFlXzE4X3JlYWQgPSBwaHlfcmVhZF9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSwgMHgxOCk7XFxuK1xcdHJlZ18xZV8xOV9yZWFkID0gcGh5X3JlYWRfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIDB4MTkpO1xcbitcXHRyZWdfMWVfMjBfcmVhZCA9IHBoeV9yZWFkX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCAweDIwKTtcXG4rXFx0cmVnXzFlXzIxX3JlYWQgPSBwaHlfcmVhZF9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSwgMHgyMSk7XFxuK1xcdHJlZ18xZV8yMl9yZWFkID0gcGh5X3JlYWRfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIDB4MjIpO1xcbitcXHRyZWdfMWVfMTc0X3JlYWQgPSBwaHlfcmVhZF9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSwgMHgxNzQpO1xcbitcXHRyZWdfMWVfMTc1X3JlYWQgPSBwaHlfcmVhZF9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSwgMHgxNzUpO1xcbitcXG4rXFx0cmVnXzFlXzEyX2hlYWRlciA9ICgocmVnXzFlXzEyX3JlYWQgXFx1MDAyNiAweGZjMDApIC8gMTAyNCkgKyAqdHhfYW1wX3RhYmxlW1RYX0FNUF8xR19BXVtwaHlfb2Zmc2V0XTtcXG4rXFx0cmVnXzFlXzE3X2hlYWRlciA9ICgocmVnXzFlXzE3X3JlYWQgXFx1MDAyNiAweDNmMDApIC8gMjU2KSArICp0eF9hbXBfdGFibGVbVFhfQU1QXzFHX0JdW3BoeV9vZmZzZXRdO1xcbitcXHRyZWdfMWVfMTlfaGVhZGVyID0gKChyZWdfMWVfMTlfcmVhZCBcXHUwMDI2IDB4M2YwMCkgLyAyNTYpICsgKnR4X2FtcF90YWJsZVtUWF9BTVBfMUdfQ11bcGh5X29mZnNldF07XFxuK1xcdHJlZ18xZV8yMV9oZWFkZXIgPSAoKHJlZ18xZV8yMV9yZWFkIFxcdTAwMjYgMHgzZjAwKSAvIDI1NikgKyAqdHhfYW1wX3RhYmxlW1RYX0FNUF8xR19EXVtwaHlfb2Zmc2V0XTtcXG4rXFxuK1xcdG92ZXJmbG93ID0gZmFsc2U7XFxuK1xcdGlmIChyZWdfMWVfMTJfaGVhZGVyIFxcdTAwM2MgdHhhbXBfbG93X2xpbWl0IHx8XFxuK1xcdCAgICByZWdfMWVfMTJfaGVhZGVyIFxcdTAwM2UgdHhhbXBfaGlnaF9saW1pdClcXG4rXFx0XFx0b3ZlcmZsb3cgPSB0cnVlO1xcbitcXHRpZiAocmVnXzFlXzE3X2hlYWRlciBcXHUwMDNjIHR4YW1wX2xvd19saW1pdCB8fFxcbitcXHQgICAgcmVnXzFlXzE3X2hlYWRlciBcXHUwMDNlIHR4YW1wX2hpZ2hfbGltaXQpXFxuK1xcdFxcdG92ZXJmbG93ID0gdHJ1ZTtcXG4rXFx0aWYgKHJlZ18xZV8xOV9oZWFkZXIgXFx1MDAzYyB0eGFtcF9sb3dfbGltaXQgfHxcXG4rXFx0ICAgIHJlZ18xZV8xOV9oZWFkZXIgXFx1MDAzZSB0eGFtcF9oaWdoX2xpbWl0KVxcbitcXHRcXHRvdmVyZmxvdyA9IHRydWU7XFxuK1xcdGlmIChyZWdfMWVfMjFfaGVhZGVyIFxcdTAwM2MgdHhhbXBfbG93X2xpbWl0IHx8XFxuK1xcdCAgICByZWdfMWVfMjFfaGVhZGVyIFxcdTAwM2UgdHhhbXBfaGlnaF9saW1pdClcXG4rXFx0XFx0b3ZlcmZsb3cgPSB0cnVlO1xcbitcXG4rXFx0aWYgKG92ZXJmbG93KSB7XFxuK1xcdFxcdHJlZ18xZV8xMl9oZWFkZXIgPSAweDIwO1xcbitcXHRcXHRyZWdfMWVfMTdfaGVhZGVyID0gMHgyMDtcXG4rXFx0XFx0cmVnXzFlXzE5X2hlYWRlciA9IDB4MjA7XFxuK1xcdFxcdHJlZ18xZV8yMV9oZWFkZXIgPSAweDIwO1xcbitcXHR9IGVsc2Uge1xcbitcXHRcXHRpZiAocmVnXzFlXzEyX2hlYWRlciBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdHJlZ18xZV8xMl9oZWFkZXIgPSAwO1xcbitcXHRcXHRlbHNlIGlmIChyZWdfMWVfMTJfaGVhZGVyIFxcdTAwM2UgMHgzZilcXG4rXFx0XFx0XFx0cmVnXzFlXzEyX2hlYWRlciA9IDB4M2Y7XFxuK1xcdFxcdGlmIChyZWdfMWVfMTdfaGVhZGVyIFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0cmVnXzFlXzE3X2hlYWRlciA9IDA7XFxuK1xcdFxcdGVsc2UgaWYgKHJlZ18xZV8xN19oZWFkZXIgXFx1MDAzZSAweDNmKVxcbitcXHRcXHRcXHRyZWdfMWVfMTdfaGVhZGVyID0gMHgzZjtcXG4rXFx0XFx0aWYgKHJlZ18xZV8xOV9oZWFkZXIgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRyZWdfMWVfMTlfaGVhZGVyID0gMDtcXG4rXFx0XFx0ZWxzZSBpZiAocmVnXzFlXzE5X2hlYWRlciBcXHUwMDNlIDB4M2YpXFxuK1xcdFxcdFxcdHJlZ18xZV8xOV9oZWFkZXIgPSAweDNmO1xcbitcXHRcXHRpZiAocmVnXzFlXzIxX2hlYWRlciBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdHJlZ18xZV8yMV9oZWFkZXIgPSAwO1xcbitcXHRcXHRlbHNlIGlmIChyZWdfMWVfMjFfaGVhZGVyIFxcdTAwM2UgMHgzZilcXG4rXFx0XFx0XFx0cmVnXzFlXzIxX2hlYWRlciA9IDB4M2Y7XFxuK1xcdH1cXG4rXFxuK1xcdHJlZ18xZV8xNl9lbmQgPSAocmVnXzFlXzE2X3JlYWQgXFx1MDAyNiAweDAwM2YpICsgKnR4X2FtcF90YWJsZVtUWF9BTVBfVEVTVF9BXVtwaHlfb2Zmc2V0XTtcXG4rXFx0cmVnXzFlXzE4X2VuZCA9IChyZWdfMWVfMThfcmVhZCBcXHUwMDI2IDB4MDAzZikgKyAqdHhfYW1wX3RhYmxlW1RYX0FNUF9URVNUX0JdW3BoeV9vZmZzZXRdO1xcbitcXHRyZWdfMWVfMjBfZW5kID0gKHJlZ18xZV8yMF9yZWFkIFxcdTAwMjYgMHgwMDNmKSArICp0eF9hbXBfdGFibGVbVFhfQU1QX1RFU1RfQ11bcGh5X29mZnNldF07XFxuK1xcdHJlZ18xZV8yMl9lbmQgPSAocmVnXzFlXzIyX3JlYWQgXFx1MDAyNiAweDAwM2YpICsgKnR4X2FtcF90YWJsZVtUWF9BTVBfVEVTVF9EXVtwaHlfb2Zmc2V0XTtcXG4rXFxuK1xcdG92ZXJmbG93ID0gZmFsc2U7XFxuK1xcdGlmIChyZWdfMWVfMTZfZW5kIFxcdTAwM2MgdHhhbXBfbG93X2xpbWl0IHx8XFxuK1xcdCAgICByZWdfMWVfMTZfZW5kIFxcdTAwM2UgdHhhbXBfaGlnaF9saW1pdClcXG4rXFx0XFx0b3ZlcmZsb3cgPSB0cnVlO1xcbitcXHRpZiAocmVnXzFlXzE4X2VuZCBcXHUwMDNjIHR4YW1wX2xvd19saW1pdCB8fFxcbitcXHQgICAgcmVnXzFlXzE4X2VuZCBcXHUwMDNlIHR4YW1wX2hpZ2hfbGltaXQpXFxuK1xcdFxcdG92ZXJmbG93ID0gdHJ1ZTtcXG4rXFx0aWYgKHJlZ18xZV8yMF9lbmQgXFx1MDAzYyB0eGFtcF9sb3dfbGltaXQgfHxcXG4rXFx0ICAgIHJlZ18xZV8yMF9lbmQgXFx1MDAzZSB0eGFtcF9oaWdoX2xpbWl0KVxcbitcXHRcXHRvdmVyZmxvdyA9IHRydWU7XFxuK1xcdGlmIChyZWdfMWVfMjJfZW5kIFxcdTAwM2MgdHhhbXBfbG93X2xpbWl0IHx8XFxuK1xcdCAgICByZWdfMWVfMjJfZW5kIFxcdTAwM2UgdHhhbXBfaGlnaF9saW1pdClcXG4rXFx0XFx0b3ZlcmZsb3cgPSB0cnVlO1xcbitcXG4rXFx0aWYgKG92ZXJmbG93KSB7XFxuK1xcdFxcdHJlZ18xZV8xNl9lbmQgPSAweDIwO1xcbitcXHRcXHRyZWdfMWVfMThfZW5kID0gMHgyMDtcXG4rXFx0XFx0cmVnXzFlXzIwX2VuZCA9IDB4MjA7XFxuK1xcdFxcdHJlZ18xZV8yMl9lbmQgPSAweDIwO1xcbitcXHR9IGVsc2Uge1xcbitcXHRcXHRpZiAocmVnXzFlXzE2X2VuZCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdHJlZ18xZV8xNl9lbmQgPSAwO1xcbitcXHRcXHRlbHNlIGlmIChyZWdfMWVfMTZfZW5kIFxcdTAwM2UgMHgzZilcXG4rXFx0XFx0XFx0cmVnXzFlXzE2X2VuZCA9IDB4M2Y7XFxuK1xcdFxcdGlmIChyZWdfMWVfMThfZW5kIFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0cmVnXzFlXzE4X2VuZCA9IDA7XFxuK1xcdFxcdGVsc2UgaWYgKHJlZ18xZV8xOF9lbmQgXFx1MDAzZSAweDNmKVxcbitcXHRcXHRcXHRyZWdfMWVfMThfZW5kID0gMHgzZjtcXG4rXFx0XFx0aWYgKHJlZ18xZV8yMF9lbmQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRyZWdfMWVfMjBfZW5kID0gMDtcXG4rXFx0XFx0ZWxzZSBpZiAocmVnXzFlXzIwX2VuZCBcXHUwMDNlIDB4M2YpXFxuK1xcdFxcdFxcdHJlZ18xZV8yMF9lbmQgPSAweDNmO1xcbitcXHRcXHRpZiAocmVnXzFlXzIyX2VuZCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdHJlZ18xZV8yMl9lbmQgPSAwO1xcbitcXHRcXHRlbHNlIGlmIChyZWdfMWVfMjJfZW5kIFxcdTAwM2UgMHgzZilcXG4rXFx0XFx0XFx0cmVnXzFlXzIyX2VuZCA9IDB4M2Y7XFxuK1xcdH1cXG4rXFxuK1xcdHJlZ18xZV8xNl9oZWFkZXIgPSAoKHJlZ18xZV8xNl9yZWFkIFxcdTAwMjYgMHhmYzAwKSAvIDEwMjQpICsgKnR4X2FtcF90YWJsZVtUWF9BTVBfMTAwTV9BXVtwaHlfb2Zmc2V0XTtcXG4rXFx0cmVnXzFlXzE4X2hlYWRlciA9ICgocmVnXzFlXzE4X3JlYWQgXFx1MDAyNiAweDNmMDApIC8gMjU2KSArICp0eF9hbXBfdGFibGVbVFhfQU1QXzEwME1fQl1bcGh5X29mZnNldF07XFxuK1xcbitcXHRvdmVyZmxvdyA9IGZhbHNlO1xcbitcXHRpZiAocmVnXzFlXzE2X2hlYWRlciBcXHUwMDNjIHR4YW1wX2xvd19saW1pdCB8fFxcbitcXHQgICAgcmVnXzFlXzE2X2hlYWRlciBcXHUwMDNlIHR4YW1wX2hpZ2hfbGltaXQpXFxuK1xcdFxcdG92ZXJmbG93ID0gdHJ1ZTtcXG4rXFx0aWYgKHJlZ18xZV8xOF9oZWFkZXIgXFx1MDAzYyB0eGFtcF9sb3dfbGltaXQgfHxcXG4rXFx0ICAgIHJlZ18xZV8xOF9oZWFkZXIgXFx1MDAzZSB0eGFtcF9oaWdoX2xpbWl0KVxcbitcXHRcXHRvdmVyZmxvdyA9IHRydWU7XFxuK1xcbitcXHRpZiAob3ZlcmZsb3cpIHtcXG4rXFx0XFx0cmVnXzFlXzE2X2hlYWRlciA9IDB4MjA7XFxuK1xcdFxcdHJlZ18xZV8xOF9oZWFkZXIgPSAweDIwO1xcbitcXHR9IGVsc2Uge1xcbitcXHRcXHRpZiAocmVnXzFlXzE2X2hlYWRlciBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdHJlZ18xZV8xNl9oZWFkZXIgPSAwO1xcbitcXHRcXHRlbHNlIGlmIChyZWdfMWVfMTZfaGVhZGVyIFxcdTAwM2UgMHgzZilcXG4rXFx0XFx0XFx0cmVnXzFlXzE2X2hlYWRlciA9IDB4M2Y7XFxuK1xcdFxcdGlmIChyZWdfMWVfMThfaGVhZGVyIFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0cmVnXzFlXzE4X2hlYWRlciA9IDA7XFxuK1xcdFxcdGVsc2UgaWYgKHJlZ18xZV8xOF9oZWFkZXIgXFx1MDAzZSAweDNmKVxcbitcXHRcXHRcXHRyZWdfMWVfMThfaGVhZGVyID0gMHgzZjtcXG4rXFx0fVxcbitcXG4rXFx0cmVnXzFlXzEyX2VuZCA9IChyZWdfMWVfMTJfcmVhZCBcXHUwMDI2IDB4MDAzZikgKyAqdHhfYW1wX3RhYmxlW1RYX0FNUF8xME1fQV1bcGh5X29mZnNldF07XFxuK1xcdHJlZ18xZV8xN19lbmQgPSAocmVnXzFlXzE3X3JlYWQgXFx1MDAyNiAweDAwM2YpICsgKnR4X2FtcF90YWJsZVtUWF9BTVBfMTBNX0JdW3BoeV9vZmZzZXRdO1xcbitcXG4rXFx0b3ZlcmZsb3cgPSBmYWxzZTtcXG4rXFx0aWYgKHJlZ18xZV8xMl9lbmQgXFx1MDAzYyB0eGFtcF9sb3dfbGltaXQgfHxcXG4rXFx0ICAgIHJlZ18xZV8xMl9lbmQgXFx1MDAzZSB0eGFtcF9oaWdoX2xpbWl0KVxcbitcXHRcXHRvdmVyZmxvdyA9IHRydWU7XFxuK1xcdGlmIChyZWdfMWVfMTdfZW5kIFxcdTAwM2MgdHhhbXBfbG93X2xpbWl0IHx8XFxuK1xcdCAgICByZWdfMWVfMTdfZW5kIFxcdTAwM2UgdHhhbXBfaGlnaF9saW1pdClcXG4rXFx0XFx0b3ZlcmZsb3cgPSB0cnVlO1xcbitcXG4rXFx0aWYgKG92ZXJmbG93KSB7XFxuK1xcdFxcdHJlZ18xZV8xMl9lbmQgPSAweDIwO1xcbitcXHRcXHRyZWdfMWVfMTdfZW5kID0gMHgyMDtcXG4rXFx0fSBlbHNlIHtcXG4rXFx0XFx0aWYgKHJlZ18xZV8xMl9lbmQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRyZWdfMWVfMTJfZW5kID0gMDtcXG4rXFx0XFx0ZWxzZSBpZiAocmVnXzFlXzEyX2VuZCBcXHUwMDNlIDB4M2YpXFxuK1xcdFxcdFxcdHJlZ18xZV8xMl9lbmQgPSAweDNmO1xcbitcXHRcXHRpZiAocmVnXzFlXzE3X2VuZCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdHJlZ18xZV8xN19lbmQgPSAwO1xcbitcXHRcXHRlbHNlIGlmIChyZWdfMWVfMTdfZW5kIFxcdTAwM2UgMHgzZilcXG4rXFx0XFx0XFx0cmVnXzFlXzE3X2VuZCA9IDB4M2Y7XFxuK1xcdH1cXG4rXFxuK1xcdHJlZ18xZV8xNzRfaGVhZGVyID0gKChyZWdfMWVfMTc0X3JlYWQgXFx1MDAyNiAweDdmMDApIC8gMjU2KSArICp0eF9hbXBfdGFibGVbUjUwX0FdW3BoeV9vZmZzZXRdO1xcbitcXHRyZWdfMWVfMTc0X2VuZCA9IChyZWdfMWVfMTc0X3JlYWQgXFx1MDAyNiAweDAwN2YpICsgKnR4X2FtcF90YWJsZVtSNTBfQl1bcGh5X29mZnNldF07XFxuK1xcdHJlZ18xZV8xNzVfaGVhZGVyID0gKChyZWdfMWVfMTc1X3JlYWQgXFx1MDAyNiAweDdmMDApIC8gMjU2KSArICp0eF9hbXBfdGFibGVbUjUwX0NdW3BoeV9vZmZzZXRdO1xcbitcXHRyZWdfMWVfMTc1X2VuZCA9IChyZWdfMWVfMTc1X3JlYWQgXFx1MDAyNiAweDAwN2YpICsgKnR4X2FtcF90YWJsZVtSNTBfRF1bcGh5X29mZnNldF07XFxuK1xcbitcXHRvdmVyZmxvdyA9IGZhbHNlO1xcbitcXHRpZiAocmVnXzFlXzE3NF9oZWFkZXIgXFx1MDAzYyByNTBfbG93X2xpbWl0IHx8XFxuK1xcdCAgICByZWdfMWVfMTc0X2hlYWRlciBcXHUwMDNlIHI1MF9oaWdoX2xpbWl0KVxcbitcXHRcXHRvdmVyZmxvdyA9IHRydWU7XFxuK1xcdGlmIChyZWdfMWVfMTc0X2VuZCBcXHUwMDNjIHI1MF9sb3dfbGltaXQgfHxcXG4rXFx0ICAgIHJlZ18xZV8xNzRfZW5kIFxcdTAwM2UgcjUwX2hpZ2hfbGltaXQpXFxuK1xcdFxcdG92ZXJmbG93ID0gdHJ1ZTtcXG4rXFx0aWYgKHJlZ18xZV8xNzVfaGVhZGVyIFxcdTAwM2MgcjUwX2xvd19saW1pdCB8fFxcbitcXHQgICAgcmVnXzFlXzE3NV9oZWFkZXIgXFx1MDAzZSByNTBfaGlnaF9saW1pdClcXG4rXFx0XFx0b3ZlcmZsb3cgPSB0cnVlO1xcbitcXHRpZiAocmVnXzFlXzE3NV9lbmQgXFx1MDAzYyByNTBfbG93X2xpbWl0IHx8XFxuK1xcdCAgICByZWdfMWVfMTc1X2VuZCBcXHUwMDNlIHI1MF9oaWdoX2xpbWl0KVxcbitcXHRcXHRvdmVyZmxvdyA9IHRydWU7XFxuK1xcbitcXHRpZiAob3ZlcmZsb3cpIHtcXG4rXFx0XFx0cmVnXzFlXzE3NF9oZWFkZXIgPSAweDM0O1xcbitcXHRcXHRyZWdfMWVfMTc0X2VuZCA9IDB4MzQ7XFxuK1xcdFxcdHJlZ18xZV8xNzVfaGVhZGVyID0gMHgzNDtcXG4rXFx0XFx0cmVnXzFlXzE3NV9lbmQgPSAweDM0O1xcbitcXHR9IGVsc2Uge1xcbitcXHRcXHRpZiAocmVnXzFlXzE3NF9oZWFkZXIgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRyZWdfMWVfMTc0X2hlYWRlciA9IDA7XFxuK1xcdFxcdGVsc2UgaWYgKHJlZ18xZV8xNzRfaGVhZGVyIFxcdTAwM2UgMHg3ZilcXG4rXFx0XFx0XFx0cmVnXzFlXzE3NF9oZWFkZXIgPSAweDdmO1xcbitcXHRcXHRpZiAocmVnXzFlXzE3NF9lbmQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRyZWdfMWVfMTc0X2VuZCA9IDA7XFxuK1xcdFxcdGVsc2UgaWYgKHJlZ18xZV8xNzRfZW5kIFxcdTAwM2UgMHg3ZilcXG4rXFx0XFx0XFx0cmVnXzFlXzE3NF9lbmQgPSAweDdmO1xcbitcXHRcXHRpZiAocmVnXzFlXzE3NV9oZWFkZXIgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRyZWdfMWVfMTc1X2hlYWRlciA9IDA7XFxuK1xcdFxcdGVsc2UgaWYgKHJlZ18xZV8xNzVfaGVhZGVyIFxcdTAwM2UgMHg3ZilcXG4rXFx0XFx0XFx0cmVnXzFlXzE3NV9oZWFkZXIgPSAweDdmO1xcbitcXHRcXHRpZiAocmVnXzFlXzE3NV9lbmQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRyZWdfMWVfMTc1X2VuZCA9IDA7XFxuK1xcdFxcdGVsc2UgaWYgKHJlZ18xZV8xNzVfZW5kIFxcdTAwM2UgMHg3ZilcXG4rXFx0XFx0XFx0cmVnXzFlXzE3NV9lbmQgPSAweDdmO1xcbitcXHR9XFxuK1xcbitcXHRwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIDB4MTIsXFxuK1xcdFxcdCAgICAgIChyZWdfMWVfMTJfaGVhZGVyICogMTAyNCkgKyByZWdfMWVfMTJfZW5kKTtcXG4rXFx0cGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCAweDE2LFxcbitcXHRcXHQgICAgICAocmVnXzFlXzE2X2hlYWRlciAqIDEwMjQpICsgcmVnXzFlXzE2X2VuZCk7XFxuK1xcdHBoeV93cml0ZV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSwgMHgxNyxcXG4rXFx0XFx0ICAgICAgKHJlZ18xZV8xN19oZWFkZXIgKiAyNTYpICsgcmVnXzFlXzE3X2VuZCk7XFxuK1xcdHBoeV93cml0ZV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSwgMHgxOCxcXG4rXFx0XFx0ICAgICAgKHJlZ18xZV8xOF9oZWFkZXIgKiAyNTYpICsgcmVnXzFlXzE4X2VuZCk7XFxuK1xcdHBoeV93cml0ZV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSwgMHgxOSxcXG4rXFx0XFx0ICAgICAgKHJlZ18xZV8xOV9yZWFkIFxcdTAwMjYgMHgwMGZmKSArIChyZWdfMWVfMTlfaGVhZGVyICogMjU2KSk7XFxuK1xcdHBoeV93cml0ZV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSwgMHgyMCxcXG4rXFx0XFx0ICAgICAgKHJlZ18xZV8yMF9yZWFkIFxcdTAwMjYgMHhmZjAwKSArIHJlZ18xZV8yMF9lbmQpO1xcbitcXHRwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIDB4MjEsXFxuK1xcdFxcdCAgICAgIChyZWdfMWVfMjFfcmVhZCBcXHUwMDI2IDB4MDBmZikgKyAocmVnXzFlXzIxX2hlYWRlciAqIDI1NikpO1xcbitcXHRwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIDB4MjIsXFxuK1xcdFxcdCAgICAgIChyZWdfMWVfMjJfcmVhZCBcXHUwMDI2IDB4ZmYwMCkgKyByZWdfMWVfMjJfZW5kKTtcXG4rXFx0cGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCAweDE3NCxcXG4rXFx0XFx0ICAgICAgMHg4MDgwICsgKHJlZ18xZV8xNzRfaGVhZGVyICogMjU2KSArIHJlZ18xZV8xNzRfZW5kKTtcXG4rXFx0cGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCAweDE3NSxcXG4rXFx0XFx0ICAgICAgMHg4MDgwICsgKHJlZ18xZV8xNzVfaGVhZGVyICogMjU2KSArIHJlZ18xZV8xNzVfZW5kKTtcXG4rXFxuK1xcdHBoeV93cml0ZV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSwgMHgxNzYsIDB4NDQwMCk7XFxuK1xcdHBoeV93cml0ZV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSwgMHgxNzcsIDB4MDA0NCk7XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rc3RhdGljIGludCBhbjc1ODFfcGh5X2NvbmZpZ19pbml0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuK3tcXG4rXFx0c3RydWN0IGFpcm9oYV9zb2NwaHlfc2hhcmVkICpzaGFyZWQgPSBwaHlfcGFja2FnZV9nZXRfcHJpdihwaHlkZXYpO1xcbitcXHRzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2X3AwO1xcbitcXHR1MzIgc29jX3BkaWRyO1xcbitcXHR1OCBwaHlfb2Zmc2V0O1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0cGh5ZGV2X3AwID0gc2hhcmVkLVxcdTAwM2VwaHlkZXZfcDA7XFxuK1xcdHBoeV9vZmZzZXQgPSBwaHlkZXYtXFx1MDAzZW1kaW8uYWRkciAtIHBoeWRldl9wMC1cXHUwMDNlbWRpby5hZGRyO1xcbitcXG4rXFx0LyogRklYTUU6IFJlYWQgU29DIFBESURSIGlmIGF2YWlsYWJsZSBvciBkZWZhdWx0IHRvIDEgKi9cXG4rXFx0c29jX3BkaWRyID0gMTtcXG4rXFxuK1xcdHNoYXJlZC1cXHUwMDNlbWRpX3Jlc2lzdGVyX3R5cGUgPSBNRElfNVI7XFxuK1xcdGlmIChzb2NfcGRpZHIgPT0gMSlcXG4rXFx0XFx0c2hhcmVkLVxcdTAwM2V0eF9hbXBfY29tcGVuc2F0aW9uX3RibCA9IFxcdTAwMjZhbjc1ODFfdHhfYW1wX2NvbXBlbnNhdGlvbl90YmxbMF07XFxuK1xcdGVsc2VcXG4rXFx0XFx0c2hhcmVkLVxcdTAwM2V0eF9hbXBfY29tcGVuc2F0aW9uX3RibCA9IFxcdTAwMjZhbjc1ODFfdHhfYW1wX2NvbXBlbnNhdGlvbl90YmxbMV07XFxuK1xcdHNoYXJlZC1cXHUwMDNlcjUwX2NhbF90YmwgPSBhbjc1ODFfemNhbF90b19yNDVvaG07XFxuK1xcbitcXHRyZXQgPSBhaXJvaGFfcGh5X2NhbGliKHBoeWRldik7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHRyZXQgPSBhaXJvaGFfcGh5X2F1dG9fc2VsZWN0X3RyYW5zZm9ybWVyKHBoeWRldik7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHRyZXQgPSBhaXJvaGFfcGh5X3R4X2FtcF9jb21wZW5zYXRpb24ocGh5ZGV2KTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdC8qIFJYIHNldHRpbmcgZm9yIDVSX1RYTVIgYmVmb3JlIEFOIHNldHRpbmcgKi9cXG4rXFx0cGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCAweGU2LCAweDExMTEpO1xcbitcXHRwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIDB4ZTcsIDB4NTU1NSk7XFxuK1xcdHBoeV93cml0ZV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSwgMHhlOSwgMHgwMDAxKTtcXG4rXFx0cGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCAweGZlLCAweDAwMDApO1xcbitcXG4rXFx0LyogTG9uZyBMb29wIFJlYWNoIHNldHRpbmcgKi9cXG4rXFx0cGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCAweDExLCAweGZmMDApO1xcbitcXHRwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDIsIDB4MjAyLCAweDIzMTApO1xcbitcXHRwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDIsIDB4MjAzLCAweDAwMjUpO1xcbitcXHRwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDIsIDB4MjA0LCAweDIzMTApO1xcbitcXHRwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDIsIDB4MjA1LCAweDAwMjUpO1xcbitcXHRwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDIsIDB4MjA2LCAweDIzMTApO1xcbitcXHRwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDIsIDB4MjA3LCAweDAwMjUpO1xcbitcXHRwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDIsIDB4MjA4LCAweDIzMTApO1xcbitcXHRwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDIsIDB4MjA5LCAweDAwMjUpO1xcbitcXHRwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDIsIDB4MjBhLCAweDIzMTApO1xcbitcXHRwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDIsIDB4MjBiLCAweDAwMjUpO1xcbitcXHRwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDIsIDB4MjBlLCAweDIzMTApO1xcbitcXHRwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDIsIDB4MjBmLCAweDAwMjUpO1xcbitcXHRwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDIsIDB4MjEwLCAweDIzMTApO1xcbitcXHRwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDIsIDB4MjExLCAweDAwMjUpO1xcbitcXHRwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDIsIDB4MjEyLCAweDIzMTApO1xcbitcXHRwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDIsIDB4MjEzLCAweDAwMjUpO1xcbitcXHRwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDIsIDB4MjE0LCAweDIzMTApO1xcbitcXHRwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDIsIDB4MjE1LCAweDAwMjUpO1xcbitcXHRwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDIsIDB4MjE2LCAweDIzMTApO1xcbitcXHRwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDIsIDB4MjE3LCAweDAwMjUpO1xcbitcXHRwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDIsIDB4MjFhLCAweDIzMTApO1xcbitcXHRwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDIsIDB4MjFiLCAweDAwMjUpO1xcbitcXHRwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDIsIDB4MjFjLCAweDIzMTApO1xcbitcXHRwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDIsIDB4MjFkLCAweDAwMjUpO1xcbitcXHRwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDIsIDB4MjFlLCAweDIzMTApO1xcbitcXHRwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDIsIDB4MjFmLCAweDAwMjUpO1xcbitcXHRwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDIsIDB4MjIwLCAweDIzMTApO1xcbitcXHRwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDIsIDB4MjIxLCAweDAwMjUpO1xcbitcXHRwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDIsIDB4MjIyLCAweDIzMTApO1xcbitcXHRwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDIsIDB4MjIzLCAweDAwMjUpO1xcbitcXHRwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDIsIDB4MjI2LCAweDIzMTApO1xcbitcXHRwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDIsIDB4MjI3LCAweDAwMjUpO1xcbitcXHRwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDIsIDB4MjI4LCAweDIzMTApO1xcbitcXHRwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDIsIDB4MjI5LCAweDAwMjUpO1xcbitcXHRwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDIsIDB4MjJhLCAweDIzMTApO1xcbitcXHRwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDIsIDB4MjJiLCAweDAwMjUpO1xcbitcXHRwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDIsIDB4MjJjLCAweDIzMTApO1xcbitcXHRwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDIsIDB4MjJkLCAweDAwMjUpO1xcbitcXHRwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDIsIDB4MjJlLCAweDIzMTApO1xcbitcXHRwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDIsIDB4MjJmLCAweDAwMjUpO1xcbitcXG4rXFx0LyogUlggU2V0dGluZyAqL1xcbitcXHRwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIDB4M2MsIDB4YzAwMCk7XFxuK1xcdHBoeV93cml0ZV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSwgMHgzZCwgMHgwMDAwKTtcXG4rXFx0cGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCAweDNlLCAweGMwMDApO1xcbitcXG4rXFx0LyogRUVFIHNldHRpbmcgKi9cXG4rXFx0cGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX0FOLCAweDNjLCAweDAwMDApO1xcbitcXG4rXFx0LyogUlggKi9cXG4rXFx0cGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQyLCAweDQxLCAweDMzMzMpO1xcbitcXHRwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDIsIDB4NDQsIDB4MDBjMCk7XFxuK1xcbitcXHQvKiAxME0gc2V0dGluZ3MgKi9cXG4rXFx0cGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCAweDFhMywgMHgwMGQyKTtcXG4rXFx0cGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCAweDFhNCwgMHgwMTBlKTtcXG4rXFx0cGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQyLCAweDI3YiwgMHgxMTc3KTtcXG4rXFx0cGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQyLCAweDI3YywgMHgwODA4KTtcXG4rXFxuK1xcdHBoeV9zZWxlY3RfcGFnZShwaHlkZXYsIE1US19QSFlfUEFHRV9FWFRFTkRFRF8xKTtcXG4rXFx0X19waHlfd3JpdGUocGh5ZGV2LCAweDE0LCAweDNhMTgpO1xcbitcXHRwaHlfcmVzdG9yZV9wYWdlKHBoeWRldiwgTVRLX1BIWV9QQUdFX1NUQU5EQVJELCAwKTtcXG4rXFxuK1xcdHBoeV93cml0ZShwaHlkZXYsIDB4OSwgMHgxZTAwKTtcXG4rXFxuK1xcdHBoeV93cml0ZV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMiwgMHgyNjksIDB4MjExNCk7XFxuK1xcdHBoeV93cml0ZV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMiwgMHgyNmEsIDB4MTExMyk7XFxuK1xcdHBoeV93cml0ZV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMiwgMHgyNmYsIDB4MDAwMCk7XFxuK1xcdHBoeV93cml0ZV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMiwgMHgyNzEsIDB4MmM2Myk7XFxuK1xcdHBoeV93cml0ZV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMiwgMHgyNzIsIDB4MGMyYik7XFxuK1xcbitcXHQvKiBFRUUgc2V0IGJlY2F1c2UgcG93ZXIgZG93biBjYW4ndCBzZXQgdG9rZW5yaW5nICovXFxuK1xcdHBoeV9zZWxlY3RfcGFnZShwaHlkZXYsIE1US19QSFlfUEFHRV9FWFRFTkRFRF81MkI1KTtcXG4rXFx0X19tdGtfdHJfd3JpdGUocGh5ZGV2LCAweDAsIDB4NywgMHgxNSwgMHgwMDU1YTApO1xcbitcXHRfX210a190cl93cml0ZShwaHlkZXYsIDB4MCwgMHg3LCAweDE3LCAweDA3ZmYzZik7XFxuK1xcdF9fbXRrX3RyX3dyaXRlKHBoeWRldiwgMHgxLCAweGYsIDB4MCwgMHgwMDAwMWUpO1xcbitcXHRfX210a190cl93cml0ZShwaHlkZXYsIDB4MSwgMHhmLCAweDEsIDB4NmZiOTBhKTtcXG4rXFx0X19tdGtfdHJfd3JpdGUocGh5ZGV2LCAweDEsIDB4ZiwgMHgxOCwgMHgwZTJmMDApO1xcbitcXHRfX210a190cl93cml0ZShwaHlkZXYsIDB4MSwgMHhkLCAweDI2LCAweDQ0NDQ0NCk7XFxuK1xcdF9fbXRrX3RyX3dyaXRlKHBoeWRldiwgMHgyLCAweGQsIDB4MywgMHgwMDAwMDQpO1xcbitcXHRfX210a190cl93cml0ZShwaHlkZXYsIDB4MiwgMHhkLCAweDYsIDB4MmViYWVmKTtcXG4rXFx0X19tdGtfdHJfd3JpdGUocGh5ZGV2LCAweDIsIDB4ZCwgMHg4LCAweDAwMDAwYik7XFxuK1xcdF9fbXRrX3RyX3dyaXRlKHBoeWRldiwgMHgyLCAweGQsIDB4YywgMHgwMDUwNGQpO1xcbitcXHRfX210a190cl93cml0ZShwaHlkZXYsIDB4MiwgMHhkLCAweGQsIDB4MDIzMTRmKTtcXG4rXFx0X19tdGtfdHJfd3JpdGUocGh5ZGV2LCAweDIsIDB4ZCwgMHhmLCAweDAwMzAyOCk7XFxuK1xcdF9fbXRrX3RyX3dyaXRlKHBoeWRldiwgMHgyLCAweGQsIDB4MTAsIDB4MDAwMDBhKTtcXG4rXFx0X19tdGtfdHJfd3JpdGUocGh5ZGV2LCAweDIsIDB4ZCwgMHgxMSwgMHgwNDAwMDEpO1xcbitcXHRfX210a190cl93cml0ZShwaHlkZXYsIDB4MiwgMHhkLCAweDE0LCAweDAwMDI0YSk7XFxuK1xcdF9fbXRrX3RyX3dyaXRlKHBoeWRldiwgMHgyLCAweGQsIDB4MWMsIDB4MDAzMjEwKTtcXG4rXFx0cGh5X3Jlc3RvcmVfcGFnZShwaHlkZXYsIE1US19QSFlfUEFHRV9TVEFOREFSRCwgMCk7XFxuK1xcbitcXHRwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIDB4MTIwLCAweDgwMTQpO1xcbitcXHRwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIDB4MTIyLCAweGZmZmYpO1xcbitcXHRwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIDB4MTQ0LCAweDAyMDApO1xcbitcXHRwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIDB4MTRhLCAweGVlMjApO1xcbitcXHRwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIDB4MTliLCAweDAxMTEpO1xcbitcXHRwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIDB4MjM0LCAweDExODEpO1xcbitcXHRwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIDB4MjM4LCAweDAxMjApO1xcbitcXHRwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIDB4MjM5LCAweDAxMTcpO1xcbitcXHRwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIDB4MmQxLCAweDA3MzMpO1xcbitcXHRwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIDB4MzIzLCAweDAwMTEpO1xcbitcXHRwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIDB4MzI0LCAweDAxM2YpO1xcbitcXHRwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIDB4MzI2LCAweDAwMzcpO1xcbitcXHRwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDIsIDB4MjY4LCAweDA3ZjQpO1xcbitcXG4rXFx0aWYgKHNoYXJlZC1cXHUwMDNldHJhbnNmb3JtZXJfdHlwZVtwaHlfb2Zmc2V0XSA9PSBUWE1SKSB7XFxuK1xcdFxcdHBoeV93cml0ZV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSwgMHgwMCwgMHgwMTg3KTtcXG4rXFx0XFx0cGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCAweDAxLCAweDAxY2MpO1xcbitcXHRcXHRwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIDB4MDIsIDB4MDFjMik7XFxuK1xcdFxcdHBoeV93cml0ZV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSwgMHgwMywgMHgwMTA5KTtcXG4rXFx0XFx0cGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCAweDA0LCAweDAyMGIpO1xcbitcXHRcXHRwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIDB4MDUsIDB4MDIwMik7XFxuK1xcdFxcdHBoeV93cml0ZV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSwgMHgwNiwgMHgwMzg3KTtcXG4rXFx0XFx0cGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCAweDA3LCAweDAzYzUpO1xcbitcXHRcXHRwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIDB4MDgsIDB4MDNjMik7XFxuK1xcdFxcdHBoeV93cml0ZV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSwgMHgwOSwgMHgwMzA5KTtcXG4rXFx0XFx0cGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCAweDBhLCAweDAwMGUpO1xcbitcXHRcXHRwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIDB4MGIsIDB4MDAwMik7XFxuK1xcbitcXHRcXHRwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIDB4MjMsIDB4MDg4MCk7XFxuK1xcdFxcdHBoeV93cml0ZV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSwgMHgyNCwgMHgwODgwKTtcXG4rXFx0XFx0cGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCAweDI1LCAweDA4ODApO1xcbitcXHRcXHRwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIDB4MjYsIDB4MDg4MCk7XFxuK1xcdH0gZWxzZSB7XFxuK1xcdFxcdGlmIChzb2NfcGRpZHIgPT0gMikge1xcbitcXHRcXHRcXHRwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDIsIDB4MjY5LCAweDExMTQpO1xcbitcXHRcXHRcXHRwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDIsIDB4MjZhLCAweDExMTMpO1xcbitcXHRcXHRcXHRwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDIsIDB4MjZmLCAweDIwMDApO1xcbitcXHRcXHRcXHRwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDIsIDB4MjcxLCAweDRjODgpO1xcbitcXHRcXHRcXHRwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDIsIDB4MjcyLCAweDBjMmIpO1xcbitcXG4rXFx0XFx0XFx0LyogMTAwTSBzaGFycCAqL1xcbitcXHRcXHRcXHRwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIDB4MDAsIDB4MDE5MCk7XFxuK1xcdFxcdFxcdHBoeV93cml0ZV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSwgMHgwMSwgMHgwMWM4KTtcXG4rXFx0XFx0XFx0cGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCAweDAyLCAweDAxYzApO1xcbitcXHRcXHRcXHRwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIDB4MDMsIDB4MDAzMCk7XFxuK1xcdFxcdFxcdHBoeV93cml0ZV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSwgMHgwNCwgMHgwMjA4KTtcXG4rXFx0XFx0XFx0cGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCAweDA1LCAweDAwMDApO1xcbitcXHRcXHRcXHRwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIDB4MDYsIDB4MDMxOCk7XFxuK1xcdFxcdFxcdHBoeV93cml0ZV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSwgMHgwNywgMHgwM2M4KTtcXG4rXFx0XFx0XFx0cGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCAweDA4LCAweDAzYzApO1xcbitcXHRcXHRcXHRwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIDB4MDksIDB4MDIzMCk7XFxuK1xcdFxcdFxcdHBoeV93cml0ZV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSwgMHgwYSwgMHgwMDA4KTtcXG4rXFx0XFx0XFx0cGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCAweDBiLCAweDAyMDApO1xcbitcXG4rXFx0XFx0XFx0cGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCAweDIzLCAweDA4ODUpO1xcbitcXHRcXHRcXHRwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIDB4MjQsIDB4MDg4NSk7XFxuK1xcdFxcdFxcdHBoeV93cml0ZV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSwgMHgyNSwgMHgwODg1KTtcXG4rXFx0XFx0XFx0cGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCAweDI2LCAweDA4ODUpO1xcbitcXHRcXHR9IGVsc2Uge1xcbitcXHRcXHRcXHRwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIDB4MDAsIDB4MDE5MCk7XFxuK1xcdFxcdFxcdHBoeV93cml0ZV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSwgMHgwMSwgMHgwMWNmKTtcXG4rXFx0XFx0XFx0cGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCAweDAyLCAweDAxYzApO1xcbitcXHRcXHRcXHRwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIDB4MDMsIDB4MDAzMCk7XFxuK1xcdFxcdFxcdHBoeV93cml0ZV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSwgMHgwNCwgMHgwMjBmKTtcXG4rXFx0XFx0XFx0cGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCAweDA1LCAweDAwMDApO1xcbitcXHRcXHRcXHRwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIDB4MDYsIDB4MDMxOCk7XFxuK1xcdFxcdFxcdHBoeV93cml0ZV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSwgMHgwNywgMHgwM2NmKTtcXG4rXFx0XFx0XFx0cGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCAweDA4LCAweDAzYzApO1xcbitcXHRcXHRcXHRwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIDB4MDksIDB4MDIzMCk7XFxuK1xcdFxcdFxcdHBoeV93cml0ZV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSwgMHgwYSwgMHgwMDBmKTtcXG4rXFx0XFx0XFx0cGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCAweDBiLCAweDAyMDApO1xcbitcXG4rXFx0XFx0XFx0cGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCAweDIzLCAweDAwMDMpO1xcbitcXHRcXHRcXHRwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIDB4MjQsIDB4MDAwMyk7XFxuK1xcdFxcdFxcdHBoeV93cml0ZV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSwgMHgyNSwgMHgwMDAzKTtcXG4rXFx0XFx0XFx0cGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCAweDI2LCAweDAwMDMpO1xcbitcXHRcXHR9XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IGFuNzU4MV9waHlfcHJvYmUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG4re1xcbitcXHRzdHJ1Y3QgYWlyb2hhX3NvY3BoeV9zaGFyZWQgKnNoYXJlZDtcXG4rXFx0c3RydWN0IG10a19zb2NwaHlfcHJpdiAqcHJpdjtcXG4rXFx0c3RydWN0IHBpbmN0cmwgKnBpbmN0cmw7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHQvKiBUb2dnbGUgcGluY3RybCB0byBlbmFibGUgUEhZIExFRCAqL1xcbitcXHRwaW5jdHJsID0gZGV2bV9waW5jdHJsX2dldF9zZWxlY3QoXFx1MDAyNnBoeWRldi1cXHUwMDNlbWRpby5kZXYsIFxcXCJnYmUtbGVkXFxcIik7XFxuK1xcdGlmIChJU19FUlIocGluY3RybCkpXFxuK1xcdFxcdGRldl9lcnIoXFx1MDAyNnBoeWRldi1cXHUwMDNlbWRpby5idXMtXFx1MDAzZWRldixcXG4rXFx0XFx0XFx0XFxcIkZhaWxlZCB0byBzZXR1cCBQSFkgTEVEIHBpbmN0cmxcXFxcblxcXCIpO1xcbitcXG4rXFx0cmV0ID0gZGV2bV9waHlfcGFja2FnZV9qb2luKFxcdTAwMjZwaHlkZXYtXFx1MDAzZW1kaW8uZGV2LCBwaHlkZXYsIDAsXFxuK1xcdFxcdFxcdFxcdCAgICBzaXplb2Yoc3RydWN0IGFpcm9oYV9zb2NwaHlfc2hhcmVkKSk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHRwcml2ID0gZGV2bV9remFsbG9jKFxcdTAwMjZwaHlkZXYtXFx1MDAzZW1kaW8uZGV2LCBzaXplb2YoKnByaXYpLCBHRlBfS0VSTkVMKTtcXG4rXFx0aWYgKCFwcml2KVxcbitcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4rXFxuK1xcdGlmIChwaHlkZXYtXFx1MDAzZW1kaW8uYWRkciA9PSBBSVJPSEFfREVGQVVMVF9QT1JUMF9BRERSKVxcbitcXHRcXHRzaGFyZWQtXFx1MDAzZXBoeWRldl9wMCA9IHBoeWRldjtcXG4rXFxuK1xcdHBoeWRldi1cXHUwMDNlcHJpdiA9IHByaXY7XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rc3RhdGljIGludCBhbjc1ODFfcGh5X2xlZF9wb2xhcml0eV9zZXQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgaW50IGluZGV4LFxcbitcXHRcXHRcXHRcXHQgICAgICAgdW5zaWduZWQgbG9uZyBtb2RlcylcXG4re1xcbitcXHR1MTYgdmFsID0gMDtcXG4rXFx0dTMyIG1vZGU7XFxuK1xcbitcXHRpZiAoaW5kZXggXFx1MDAzZT0gQUlST0hBX1BIWV9NQVhfTEVEUylcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcbitcXHRmb3JfZWFjaF9zZXRfYml0KG1vZGUsIFxcdTAwMjZtb2RlcywgX19QSFlfTEVEX01PREVTX05VTSkge1xcbitcXHRcXHRzd2l0Y2ggKG1vZGUpIHtcXG4rXFx0XFx0Y2FzZSBQSFlfTEVEX0FDVElWRV9MT1c6XFxuK1xcdFxcdFxcdHZhbCA9IE1US19QSFlfTEVEX09OX1BPTEFSSVRZO1xcbitcXHRcXHRcXHRicmVhaztcXG4rXFx0XFx0Y2FzZSBQSFlfTEVEX0FDVElWRV9ISUdIOlxcbitcXHRcXHRcXHRicmVhaztcXG4rXFx0XFx0ZGVmYXVsdDpcXG4rXFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcdFxcdH1cXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIHBoeV9tb2RpZnlfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDIsIGluZGV4ID9cXG4rXFx0XFx0XFx0ICAgICAgTVRLX1BIWV9MRUQxX09OX0NUUkwgOiBNVEtfUEhZX0xFRDBfT05fQ1RSTCxcXG4rXFx0XFx0XFx0ICAgICAgTVRLX1BIWV9MRURfT05fUE9MQVJJVFksIHZhbCk7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgYW43NTgzX3BoeV9jb25maWdfaW5pdChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbit7XFxuK1xcdHN0cnVjdCBhaXJvaGFfc29jcGh5X3NoYXJlZCAqc2hhcmVkID0gcGh5X3BhY2thZ2VfZ2V0X3ByaXYocGh5ZGV2KTtcXG4rXFx0c3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldl9wMDtcXG4rXFx0dTggcGh5X29mZnNldDtcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdC8qIEJNQ1JfUERPV04gaXMgZW5hYmxlZCBieSBkZWZhdWx0ICovXFxuK1xcdHBoeV9jbGVhcl9iaXRzKHBoeWRldiwgTUlJX0JNQ1IsIEJNQ1JfUERPV04pO1xcbitcXG4rXFx0cGh5ZGV2X3AwID0gc2hhcmVkLVxcdTAwM2VwaHlkZXZfcDA7XFxuK1xcdHBoeV9vZmZzZXQgPSBwaHlkZXYtXFx1MDAzZW1kaW8uYWRkciAtIHBoeWRldl9wMC1cXHUwMDNlbWRpby5hZGRyO1xcbitcXG4rXFx0LyogRklYTUU6IFJlYWQgU29DIE1ESSBSZXNpc3RlciBUeXBlIGlmIGF2YWlsYWJsZSBvciBkZWZhdWx0IHRvIDVSICovXFxuK1xcdHNoYXJlZC1cXHUwMDNlbWRpX3Jlc2lzdGVyX3R5cGUgPSBNRElfNVI7XFxuK1xcbitcXHRzaGFyZWQtXFx1MDAzZW1kaV9yZXNpc3Rlcl90eXBlID0gTURJXzVSO1xcbitcXHRpZiAoc2hhcmVkLVxcdTAwM2VtZGlfcmVzaXN0ZXJfdHlwZSA9PSBNRElfMFIpXFxuK1xcdFxcdHNoYXJlZC1cXHUwMDNlcjUwX2NhbF90YmwgPSBhbjc1ODNfemNhbF90b19yNTBvaG1fMFI7XFxuK1xcdGlmIChzaGFyZWQtXFx1MDAzZW1kaV9yZXNpc3Rlcl90eXBlID09IE1ESV81UilcXG4rXFx0XFx0c2hhcmVkLVxcdTAwM2VyNTBfY2FsX3RibCA9IGFuNzU4M196Y2FsX3RvX3I1MG9obV81UjtcXG4rXFx0c2hhcmVkLVxcdTAwM2V0eF9hbXBfY29tcGVuc2F0aW9uX3RibCA9IFxcdTAwMjZhbjc1ODNfdHhfYW1wX2NvbXBlbnNhdGlvbl90Ymw7XFxuK1xcbitcXHRyZXQgPSBhaXJvaGFfcGh5X2NhbGliKHBoeWRldik7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHRyZXQgPSBhaXJvaGFfcGh5X2F1dG9fc2VsZWN0X3RyYW5zZm9ybWVyKHBoeWRldik7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHRyZXQgPSBhaXJvaGFfcGh5X3R4X2FtcF9jb21wZW5zYXRpb24ocGh5ZGV2KTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdC8qIEVuYWJsZSBJZGxlIE1vZGUgUG93ZXIgU2V0dGluZyAqL1xcbitcXHRpZiAocGh5X29mZnNldCA9PSAwKSB7XFxuK1xcdFxcdHBoeV93cml0ZV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMiwgMHgyNjgsIDB4MDdGMSk7XFxuK1xcdFxcdHBoeV93cml0ZV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMiwgMHg3MDMsIDB4MzExMSk7XFxuK1xcdFxcdHBoeV93cml0ZV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMiwgMHgyNzEsIDB4M0MyNCk7XFxuK1xcdFxcdHBoeV93cml0ZV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMiwgMHg3MDEsIDB4MTAyMyk7XFxuK1xcdH1cXG4rXFxuK1xcdGlmIChzaGFyZWQtXFx1MDAzZXRyYW5zZm9ybWVyX3R5cGVbcGh5X29mZnNldF0gPT0gVFhNUikge1xcbitcXHRcXHRwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIDB4MjMsIDB4MDg4MSk7XFxuK1xcdFxcdHBoeV93cml0ZV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSwgMHgyNCwgMHgwODgxKTtcXG4rXFx0XFx0cGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCAweDI1LCAweDA4ODEpO1xcbitcXHRcXHRwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIDB4MjYsIDB4MDg4MSk7XFxuK1xcbitcXHRcXHRpZiAoc2hhcmVkLVxcdTAwM2VtZGlfcmVzaXN0ZXJfdHlwZSA9PSBNRElfMFIpXFxuK1xcdFxcdFxcdHBoeV93cml0ZV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSwgMHgwNSwgMHgwMjA1KTtcXG4rXFx0XFx0ZWxzZVxcbitcXHRcXHRcXHRwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIDB4MDUsIDB4MDIwMCk7XFxuK1xcdH0gZWxzZSB7XFxuK1xcdFxcdGlmIChzaGFyZWQtXFx1MDAzZW1kaV9yZXNpc3Rlcl90eXBlID09IE1ESV8wUikge1xcbitcXHRcXHRcXHQvKiBSWCBzZXR0aW5nIGZvciA1Ul9UWE1SIGJlZm9yZSBBTiBzZXR0aW5nICovXFxuK1xcdFxcdFxcdHBoeV93cml0ZV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSwgMHhlNywgMHg2NjY2KTtcXG4rXFx0XFx0XFx0cGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCAweGU5LCAweDAwMDMpO1xcbitcXHRcXHRcXHRwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIDB4ZmUsIDB4MDAwNik7XFxuK1xcdFxcdFxcdHBoeV93cml0ZV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSwgMHhlNiwgMHgxMTExKTtcXG4rXFx0XFx0XFx0LyogMTAwTSBzaGFycCAqL1xcbitcXHRcXHRcXHRwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIDB4MjMsIDB4MGM4Nik7XFxuK1xcdFxcdFxcdHBoeV93cml0ZV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSwgMHgyNCwgMHgwYzg2KTtcXG4rXFx0XFx0XFx0cGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCAweDI1LCAweDBjODYpO1xcbitcXHRcXHRcXHRwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIDB4MjYsIDB4MGM4Nik7XFxuK1xcdFxcdFxcdHBoeV93cml0ZV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSwgMHgwMSwgMHgwMWNiKTtcXG4rXFx0XFx0XFx0cGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCAweDAyLCAweDAxYzIpO1xcbitcXHRcXHRcXHRwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIDB4MDMsIDB4MDEwOCk7XFxuK1xcdFxcdFxcdHBoeV93cml0ZV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSwgMHgwNCwgMHgwMjExKTtcXG4rXFx0XFx0XFx0cGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCAweDA1LCAweDAyMDUpO1xcbitcXHRcXHRcXHRwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIDB4MDYsIDB4MDM4Nyk7XFxuK1xcdFxcdFxcdHBoeV93cml0ZV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSwgMHgwNywgMHgwM2NlKTtcXG4rXFx0XFx0XFx0cGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCAweDA4LCAweDAzYzgpO1xcbitcXHRcXHRcXHRwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIDB4MGIsIDB4MDAwNSk7XFxuK1xcdFxcdH0gZWxzZSB7XFxuK1xcdFxcdFxcdC8qIDEwME0gc2hhcnAgKi9cXG4rXFx0XFx0XFx0cGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCAweDIzLCAweDA4ODYpO1xcbitcXHRcXHRcXHRwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIDB4MjQsIDB4MDg4Nik7XFxuK1xcdFxcdFxcdHBoeV93cml0ZV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSwgMHgyNSwgMHgwODg2KTtcXG4rXFx0XFx0XFx0cGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCAweDI2LCAweDA4ODYpO1xcbitcXHRcXHRcXHRwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIDB4MDAsIDB4MDE5NSk7XFxuK1xcdFxcdFxcdHBoeV93cml0ZV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSwgMHgwMSwgMHgwMWNiKTtcXG4rXFx0XFx0XFx0cGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCAweDAyLCAweDAxYzIpO1xcbitcXHRcXHRcXHRwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIDB4MDMsIDB4MDEwOCk7XFxuK1xcdFxcdFxcdHBoeV93cml0ZV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSwgMHgwNCwgMHgwMjExKTtcXG4rXFx0XFx0XFx0cGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCAweDA1LCAweDAyMDUpO1xcbitcXHRcXHRcXHRwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIDB4MDYsIDB4MDM4Nyk7XFxuK1xcdFxcdFxcdHBoeV93cml0ZV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSwgMHgwNywgMHgwM2NlKTtcXG4rXFx0XFx0XFx0cGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCAweDA4LCAweDAzYzMpO1xcbitcXHRcXHRcXHRwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIDB4MGEsIDB4MDAxMCk7XFxuK1xcdFxcdFxcdHBoeV93cml0ZV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSwgMHgwYiwgMHgwMDA1KTtcXG4rXFx0XFx0fVxcbitcXHR9XFxuK1xcbitcXHQvKiBSWCBTZXR0aW5nICovXFxuK1xcdHBoeV93cml0ZV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSwgMHgzYywgMHhjMDAwKTtcXG4rXFx0cGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCAweDNkLCAweDAwMDApO1xcbitcXHRwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIDB4M2UsIDB4YzAwMCk7XFxuK1xcbitcXHQvKiBFRUUgc2V0dGluZyAqL1xcbitcXHRwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfQU4sIDB4M2MsIDB4MDAwMCk7XFxuK1xcbitcXHQvKiAxME0gc2V0dGluZ3MgKi9cXG4rXFx0cGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCAweDFhMywgMHgwMGQyKTtcXG4rXFx0cGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCAweDFhNCwgMHgwMTBlKTtcXG4rXFx0cGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQyLCAweDI3YiwgMHgxMTc3KTtcXG4rXFx0cGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQyLCAweDI3YywgMHgwODA4KTtcXG4rXFxuK1xcdHBoeV9zZWxlY3RfcGFnZShwaHlkZXYsIE1US19QSFlfUEFHRV9FWFRFTkRFRF8zKTtcXG4rXFx0X19waHlfd3JpdGUocGh5ZGV2LCAweDE0LCAweDE5MCk7XFxuK1xcdHBoeV9yZXN0b3JlX3BhZ2UocGh5ZGV2LCBNVEtfUEhZX1BBR0VfU1RBTkRBUkQsIDApO1xcbitcXG4rXFx0cGh5X3NlbGVjdF9wYWdlKHBoeWRldiwgTVRLX1BIWV9QQUdFX0VYVEVOREVEXzEpO1xcbitcXHRfX3BoeV93cml0ZShwaHlkZXYsIDB4MTQsIDB4M2ExOCk7XFxuK1xcdHBoeV9yZXN0b3JlX3BhZ2UocGh5ZGV2LCBNVEtfUEhZX1BBR0VfU1RBTkRBUkQsIDApO1xcbitcXG4rXFx0cGh5X3dyaXRlKHBoeWRldiwgMHg5LCAweDA2MDApO1xcbitcXG4rXFx0LyogRUVFIGtlZXAgb25seSBQYWlyIEEgT04gKi9cXG4rXFx0cGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCAweDYzMCwgMHgwMDZFKTtcXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitzdGF0aWMgc3RydWN0IHBoeV9kcml2ZXIgbXRrX3NvY3BoeV9kcml2ZXJbXSA9IHtcXG4rXFx0e1xcbitcXHRcXHRQSFlfSURfTUFUQ0hfRVhBQ1QoQUlST0hBX0dQSFlfSURfQU43NTgxKSxcXG4rXFx0XFx0Lm5hbWVcXHRcXHQ9IFxcXCJBaXJvaGEgQU43NTgxIFBIWVxcXCIsXFxuK1xcdFxcdC5jb25maWdfaW5pdFxcdD0gYW43NTgxX3BoeV9jb25maWdfaW5pdCxcXG4rXFx0XFx0LmNvbmZpZ19pbnRyXFx0PSBnZW5waHlfbm9fY29uZmlnX2ludHIsXFxuK1xcdFxcdC5oYW5kbGVfaW50ZXJydXB0ID0gZ2VucGh5X2hhbmRsZV9pbnRlcnJ1cHRfbm9fYWNrLFxcbitcXHRcXHQucHJvYmVcXHRcXHQ9IGFuNzU4MV9waHlfcHJvYmUsXFxuK1xcdFxcdC5sZWRfYmxpbmtfc2V0XFx0PSBtdDc5OHhfcGh5X2xlZF9ibGlua19zZXQsXFxuK1xcdFxcdC5sZWRfYnJpZ2h0bmVzc19zZXQgPSBtdDc5OHhfcGh5X2xlZF9icmlnaHRuZXNzX3NldCxcXG4rXFx0XFx0LmxlZF9od19pc19zdXBwb3J0ZWQgPSBtdDc5OHhfcGh5X2xlZF9od19pc19zdXBwb3J0ZWQsXFxuK1xcdFxcdC5sZWRfaHdfY29udHJvbF9zZXQgPSBtdDc5OHhfcGh5X2xlZF9od19jb250cm9sX3NldCxcXG4rXFx0XFx0LmxlZF9od19jb250cm9sX2dldCA9IG10Nzk4eF9waHlfbGVkX2h3X2NvbnRyb2xfZ2V0LFxcbitcXHRcXHQubGVkX3BvbGFyaXR5X3NldCA9IGFuNzU4MV9waHlfbGVkX3BvbGFyaXR5X3NldCxcXG4rXFx0XFx0LnJlYWRfcGFnZVxcdD0gbXRrX3BoeV9yZWFkX3BhZ2UsXFxuK1xcdFxcdC53cml0ZV9wYWdlXFx0PSBtdGtfcGh5X3dyaXRlX3BhZ2UsXFxuK1xcdH0sXFxuK1xcdHtcXG4rXFx0XFx0UEhZX0lEX01BVENIX0VYQUNUKEFJUk9IQV9HUEhZX0lEX0FONzU4MyksXFxuK1xcdFxcdC5uYW1lXFx0XFx0PSBcXFwiQWlyb2hhIEFONzU4MyBQSFlcXFwiLFxcbitcXHRcXHQuY29uZmlnX2luaXRcXHQ9IGFuNzU4M19waHlfY29uZmlnX2luaXQsXFxuK1xcdFxcdC5wcm9iZVxcdFxcdD0gYW43NTgxX3BoeV9wcm9iZSxcXG4rXFx0XFx0LmxlZF9ibGlua19zZXRcXHQ9IG10Nzk4eF9waHlfbGVkX2JsaW5rX3NldCxcXG4rXFx0XFx0LmxlZF9icmlnaHRuZXNzX3NldCA9IG10Nzk4eF9waHlfbGVkX2JyaWdodG5lc3Nfc2V0LFxcbitcXHRcXHQubGVkX2h3X2lzX3N1cHBvcnRlZCA9IG10Nzk4eF9waHlfbGVkX2h3X2lzX3N1cHBvcnRlZCxcXG4rXFx0XFx0LmxlZF9od19jb250cm9sX3NldCA9IG10Nzk4eF9waHlfbGVkX2h3X2NvbnRyb2xfc2V0LFxcbitcXHRcXHQubGVkX2h3X2NvbnRyb2xfZ2V0ID0gbXQ3OTh4X3BoeV9sZWRfaHdfY29udHJvbF9nZXQsXFxuK1xcdFxcdC5sZWRfcG9sYXJpdHlfc2V0ID0gYW43NTgxX3BoeV9sZWRfcG9sYXJpdHlfc2V0LFxcbitcXHRcXHQucmVhZF9wYWdlXFx0PSBtdGtfcGh5X3JlYWRfcGFnZSxcXG4rXFx0XFx0LndyaXRlX3BhZ2VcXHQ9IG10a19waHlfd3JpdGVfcGFnZSxcXG4rXFx0fSxcXG4rfTtcXG4rXFxuK21vZHVsZV9waHlfZHJpdmVyKG10a19zb2NwaHlfZHJpdmVyKTtcXG4rXFxuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbWRpb19kZXZpY2VfaWQgX19tYXliZV91bnVzZWQgYWlyb2hhX3NvY3BoeV90YmxbXSA9IHtcXG4rXFx0eyBQSFlfSURfTUFUQ0hfRVhBQ1QoQUlST0hBX0dQSFlfSURfQU43NTgxKSB9LFxcbitcXHR7IFBIWV9JRF9NQVRDSF9FWEFDVChBSVJPSEFfR1BIWV9JRF9BTjc1ODMpIH0sXFxuK1xcdHsgfVxcbit9O1xcbitcXG4rTU9EVUxFX0RFU0NSSVBUSU9OKFxcXCJBaXJvaGEgU29DIEdpZ2FiaXQgRXRoZXJuZXQgUEhZIGRyaXZlclxcXCIpO1xcbitNT0RVTEVfQVVUSE9SKFxcXCJDaHJpc3RpYW4gTWFyYW5naSBcXHUwMDNjYW5zdWVsc210aEBnbWFpbC5jb21cXHUwMDNlXFxcIik7XFxuK01PRFVMRV9MSUNFTlNFKFxcXCJHUExcXFwiKTtcXG4rTU9EVUxFX1ZFUlNJT04oXFxcIjAxLjAxLjIwMjYwMzA2XFxcIik7XFxuK1xcbitNT0RVTEVfREVWSUNFX1RBQkxFKG1kaW8sIGFpcm9oYV9zb2NwaHlfdGJsKTtcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGh5L21lZGlhdGVrL210ay1nZS1zb2MuYyBiL2RyaXZlcnMvbmV0L3BoeS9tZWRpYXRlay9tdGstZ2Utc29jLmNcXG5pbmRleCA5YTU0OTQ5NjQ0ZDVhNS4uODY4YWUwODkwMTNkM2QgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvcGh5L21lZGlhdGVrL210ay1nZS1zb2MuY1xcbisrKyBiL2RyaXZlcnMvbmV0L3BoeS9tZWRpYXRlay9tdGstZ2Utc29jLmNcXG5AQCAtMTEsMzIyICsxMSwxMCBAQFxcbiBcXG4gI2luY2x1ZGUgXFxcIi4uL3BoeWxpYi5oXFxcIlxcbiAjaW5jbHVkZSBcXFwibXRrLmhcXFwiXFxuKyNpbmNsdWRlIFxcXCJtdGstZ2Utc29jLmhcXFwiXFxuIFxcbiAjZGVmaW5lIE1US19QSFlfTUFYX0xFRFNcXHRcXHRcXHQyXFxuIFxcbi0jZGVmaW5lIE1US19HUEhZX0lEX01UNzk4MVxcdFxcdFxcdDB4MDNhMjk0NjFcXG4tI2RlZmluZSBNVEtfR1BIWV9JRF9NVDc5ODhcXHRcXHRcXHQweDAzYTI5NDgxXFxuLSNkZWZpbmUgTVRLX0dQSFlfSURfQU43NTgxXFx0XFx0XFx0MHgwM2EyOTRjMVxcbi0jZGVmaW5lIE1US19HUEhZX0lEX0FONzU4M1xcdFxcdFxcdDB4YzBmZjA0MjBcXG4tXFxuLSNkZWZpbmUgTVRLX0VYVF9QQUdFX0FDQ0VTU1xcdFxcdFxcdDB4MWZcXG4tI2RlZmluZSBNVEtfUEhZX1BBR0VfU1RBTkRBUkRcXHRcXHRcXHQweDAwMDBcXG4tI2RlZmluZSBNVEtfUEhZX1BBR0VfRVhURU5ERURfM1xcdFxcdFxcdDB4MDAwM1xcbi1cXG4tI2RlZmluZSBNVEtfUEhZX0xQSV9SRUdfMTRcXHRcXHRcXHQweDE0XFxuLSNkZWZpbmUgTVRLX1BIWV9MUElfV0FLRV9USU1FUl8xMDAwX01BU0tcXHRHRU5NQVNLKDgsIDApXFxuLVxcbi0jZGVmaW5lIE1US19QSFlfTFBJX1JFR18xY1xcdFxcdFxcdDB4MWNcXG4tI2RlZmluZSBNVEtfUEhZX1NNSV9ERVRfT05fVEhSRVNIX01BU0tcXHRcXHRHRU5NQVNLKDEzLCA4KVxcbi1cXG4tI2RlZmluZSBNVEtfUEhZX1BBR0VfRVhURU5ERURfMkEzMFxcdFxcdDB4MmEzMFxcbi1cXG4tLyogUmVnaXN0ZXJzIG9uIFRva2VuIFJpbmcgZGVidWcgbm9kZXMgKi9cXG4tLyogY2hfYWRkciA9IDB4MCwgbm9kZV9hZGRyID0gMHg3LCBkYXRhX2FkZHIgPSAweDE1ICovXFxuLS8qIE5vcm1Nc2VMb1RocmVzaCAqL1xcbi0jZGVmaW5lIE5PUk1BTF9NU0VfTE9fVEhSRVNIX01BU0tcXHRcXHRHRU5NQVNLKDE1LCA4KVxcbi1cXG4tLyogY2hfYWRkciA9IDB4MCwgbm9kZV9hZGRyID0gMHhmLCBkYXRhX2FkZHIgPSAweDNjICovXFxuLS8qIFJlbUFja0NudExpbWl0Q3RybCAqL1xcbi0jZGVmaW5lIFJFTU9URV9BQ0tfQ09VTlRfTElNSVRfQ1RSTF9NQVNLXFx0R0VOTUFTSygyLCAxKVxcbi1cXG4tLyogY2hfYWRkciA9IDB4MSwgbm9kZV9hZGRyID0gMHhkLCBkYXRhX2FkZHIgPSAweDIwICovXFxuLS8qIFZjb1NsaWNlclRocmVzaEJpdHNIaWdoICovXFxuLSNkZWZpbmUgVkNPX1NMSUNFUl9USFJFU0hfSElHSF9NQVNLXFx0XFx0R0VOTUFTSygyMywgMClcXG4tXFxuLS8qIGNoX2FkZHIgPSAweDEsIG5vZGVfYWRkciA9IDB4ZiwgZGF0YV9hZGRyID0gMHgwICovXFxuLS8qIERmZVRhaWxFbmFibGVWZ2FUaHJlc2gxMDAwICovXFxuLSNkZWZpbmUgREZFX1RBSUxfRUFOQkxFX1ZHQV9UUkhFU0hfMTAwMFxcdFxcdEdFTk1BU0soNSwgMSlcXG4tXFxuLS8qIGNoX2FkZHIgPSAweDEsIG5vZGVfYWRkciA9IDB4ZiwgZGF0YV9hZGRyID0gMHgxICovXFxuLS8qIE1ydmxUckZpeDEwMEtwICovXFxuLSNkZWZpbmUgTVJWTF9UUl9GSVhfMTAwS1BfTUFTS1xcdFxcdFxcdEdFTk1BU0soMjIsIDIwKVxcbi0vKiBNcnZsVHJGaXgxMDBLZiAqL1xcbi0jZGVmaW5lIE1SVkxfVFJfRklYXzEwMEtGX01BU0tcXHRcXHRcXHRHRU5NQVNLKDE5LCAxNylcXG4tLyogTXJ2bFRyRml4MTAwMEtwICovXFxuLSNkZWZpbmUgTVJWTF9UUl9GSVhfMTAwMEtQX01BU0tcXHRcXHRcXHRHRU5NQVNLKDE2LCAxNClcXG4tLyogTXJ2bFRyRml4MTAwMEtmICovXFxuLSNkZWZpbmUgTVJWTF9UUl9GSVhfMTAwMEtGX01BU0tcXHRcXHRcXHRHRU5NQVNLKDEzLCAxMSlcXG4tXFxuLS8qIGNoX2FkZHIgPSAweDEsIG5vZGVfYWRkciA9IDB4ZiwgZGF0YV9hZGRyID0gMHgxMiAqL1xcbi0vKiBWZ2FEZWNSYXRlICovXFxuLSNkZWZpbmUgVkdBX0RFQ0lNQVRJT05fUkFURV9NQVNLXFx0XFx0R0VOTUFTSyg4LCA1KVxcbi1cXG4tLyogY2hfYWRkciA9IDB4MSwgbm9kZV9hZGRyID0gMHhmLCBkYXRhX2FkZHIgPSAweDE3ICovXFxuLS8qIFNsdkRTUHJlYWR5VGltZSAqL1xcbi0jZGVmaW5lIFNMQVZFX0RTUF9SRUFEWV9USU1FX01BU0tcXHRcXHRHRU5NQVNLKDIyLCAxNSlcXG4tLyogTWFzRFNQcmVhZHlUaW1lICovXFxuLSNkZWZpbmUgTUFTVEVSX0RTUF9SRUFEWV9USU1FX01BU0tcXHRcXHRHRU5NQVNLKDE0LCA3KVxcbi1cXG4tLyogY2hfYWRkciA9IDB4MSwgbm9kZV9hZGRyID0gMHhmLCBkYXRhX2FkZHIgPSAweDE4ICovXFxuLS8qIEVuYWJSYW5kVXBkVHJpZyAqL1xcbi0jZGVmaW5lIEVOQUJMRV9SQU5ET01fVVBET1dOX0NPVU5URVJfVFJJR0dFUlxcdEJJVCg4KVxcbi1cXG4tLyogY2hfYWRkciA9IDB4MSwgbm9kZV9hZGRyID0gMHhmLCBkYXRhX2FkZHIgPSAweDIwICovXFxuLS8qIFJlc2V0U3luY09mZnNldCAqL1xcbi0jZGVmaW5lIFJFU0VUX1NZTkNfT0ZGU0VUX01BU0tcXHRcXHRcXHRHRU5NQVNLKDExLCA4KVxcbi1cXG4tLyogY2hfYWRkciA9IDB4Miwgbm9kZV9hZGRyID0gMHhkLCBkYXRhX2FkZHIgPSAweDAgKi9cXG4tLyogRmZlVXBkR2FpbkZvcmNlVmFsICovXFxuLSNkZWZpbmUgRkZFX1VQREFURV9HQUlOX0ZPUkNFX1ZBTF9NQVNLXFx0XFx0R0VOTUFTSyg5LCA3KVxcbi0vKiBGZmVVcGRHYWluRm9yY2UgKi9cXG4tI2RlZmluZSBGRkVfVVBEQVRFX0dBSU5fRk9SQ0VcXHRcXHRcXHRCSVQoNilcXG4tXFxuLS8qIGNoX2FkZHIgPSAweDIsIG5vZGVfYWRkciA9IDB4ZCwgZGF0YV9hZGRyID0gMHgzICovXFxuLS8qIFRyRnJlZXplICovXFxuLSNkZWZpbmUgVFJfRlJFRVpFX01BU0tcXHRcXHRcXHRcXHRHRU5NQVNLKDExLCAwKVxcbi1cXG4tLyogY2hfYWRkciA9IDB4Miwgbm9kZV9hZGRyID0gMHhkLCBkYXRhX2FkZHIgPSAweDYgKi9cXG4tLyogU1M6IFN0ZWFkeS1zdGF0ZSwgS1A6IFByb3BvcnRpb25hbCBHYWluICovXFxuLS8qIFNTVHJLcDEwMCAqL1xcbi0jZGVmaW5lIFNTX1RSX0tQMTAwX01BU0tcXHRcXHRcXHRHRU5NQVNLKDIxLCAxOSlcXG4tLyogU1NUcktmMTAwICovXFxuLSNkZWZpbmUgU1NfVFJfS0YxMDBfTUFTS1xcdFxcdFxcdEdFTk1BU0soMTgsIDE2KVxcbi0vKiBTU1RyS3AxMDAwTWFzICovXFxuLSNkZWZpbmUgU1NfVFJfS1AxMDAwX01BU1RFUl9NQVNLXFx0XFx0R0VOTUFTSygxNSwgMTMpXFxuLS8qIFNTVHJLZjEwMDBNYXMgKi9cXG4tI2RlZmluZSBTU19UUl9LRjEwMDBfTUFTVEVSX01BU0tcXHRcXHRHRU5NQVNLKDEyLCAxMClcXG4tLyogU1NUcktwMTAwMFNsdiAqL1xcbi0jZGVmaW5lIFNTX1RSX0tQMTAwMF9TTEFWRV9NQVNLXFx0XFx0XFx0R0VOTUFTSyg5LCA3KVxcbi0vKiBTU1RyS2YxMDAwU2x2ICovXFxuLSNkZWZpbmUgU1NfVFJfS0YxMDAwX1NMQVZFX01BU0tcXHRcXHRcXHRHRU5NQVNLKDYsIDQpXFxuLVxcbi0vKiBjaF9hZGRyID0gMHgyLCBub2RlX2FkZHIgPSAweGQsIGRhdGFfYWRkciA9IDB4OCAqL1xcbi0vKiBjbGVhciB0aGlzIGJpdCBpZiB3YW5uYSBzZWxlY3QgZnJvbSBBRkUgKi9cXG4tLyogUmVnc2lnZGV0X3NlbF8xMDAwICovXFxuLSNkZWZpbmUgRUVFMTAwMF9TRUxFQ1RfU0lHTkFMX0RFVEVDVElPTl9GUk9NX0RGRVxcdEJJVCg0KVxcbi1cXG4tLyogY2hfYWRkciA9IDB4Miwgbm9kZV9hZGRyID0gMHhkLCBkYXRhX2FkZHIgPSAweGQgKi9cXG4tLyogUmVnRUVFX3N0MlRyS2YxMDAwICovXFxuLSNkZWZpbmUgRUVFMTAwMF9TVEFHRTJfVFJfS0ZfTUFTS1xcdFxcdEdFTk1BU0soMTMsIDExKVxcbi1cXG4tLyogY2hfYWRkciA9IDB4Miwgbm9kZV9hZGRyID0gMHhkLCBkYXRhX2FkZHIgPSAweGYgKi9cXG4tLyogUmVnRUVFX3Nsdl93YWtldHJfdGltZXJfdGFyICovXFxuLSNkZWZpbmUgU0xBVkVfV0FLRVRSX1RJTUVSX01BU0tcXHRcXHRcXHRHRU5NQVNLKDIwLCAxMSlcXG4tLyogUmVnRUVFX3Nsdl9yZW10eF90aW1lcl90YXIgKi9cXG4tI2RlZmluZSBTTEFWRV9SRU1UWF9USU1FUl9NQVNLXFx0XFx0XFx0R0VOTUFTSygxMCwgMSlcXG4tXFxuLS8qIGNoX2FkZHIgPSAweDIsIG5vZGVfYWRkciA9IDB4ZCwgZGF0YV9hZGRyID0gMHgxMCAqL1xcbi0vKiBSZWdFRUVfc2x2X3dha2VfaW50X3RpbWVyX3RhciAqL1xcbi0jZGVmaW5lIFNMQVZFX1dBS0VJTlRfVElNRVJfTUFTS1xcdFxcdEdFTk1BU0soMTAsIDEpXFxuLVxcbi0vKiBjaF9hZGRyID0gMHgyLCBub2RlX2FkZHIgPSAweGQsIGRhdGFfYWRkciA9IDB4MTQgKi9cXG4tLyogUmVnRUVFX3RyZnJlZXplX3RpbWVyMiAqL1xcbi0jZGVmaW5lIFRSX0ZSRUVaRV9USU1FUjJfTUFTS1xcdFxcdFxcdEdFTk1BU0soOSwgMClcXG4tXFxuLS8qIGNoX2FkZHIgPSAweDIsIG5vZGVfYWRkciA9IDB4ZCwgZGF0YV9hZGRyID0gMHgxYyAqL1xcbi0vKiBSZWdFRUUxMDBTdGcxX3RhciAqL1xcbi0jZGVmaW5lIEVFRTEwMF9MUFNZTkNfU1RBR0UxX1VQREFURV9USU1FUl9NQVNLXFx0R0VOTUFTSyg4LCAwKVxcbi1cXG4tLyogY2hfYWRkciA9IDB4Miwgbm9kZV9hZGRyID0gMHhkLCBkYXRhX2FkZHIgPSAweDI1ICovXFxuLS8qIFJFR0VFRV93YWtlX3Nsdl90cl93YWl0X2RmZXNpZ2RldF9lbiAqL1xcbi0jZGVmaW5lIFdBS0VfU0xBVkVfVFJfV0FJVF9ERkVfREVURUNUSU9OX0VOXFx0QklUKDExKVxcbi1cXG4tI2RlZmluZSBBTkFMT0dfSU5URVJOQUxfT1BFUkFUSU9OX01BWF9VU1xcdDIwXFxuLSNkZWZpbmUgVFhSRVNFUlZFX01JTlxcdFxcdFxcdFxcdDBcXG4tI2RlZmluZSBUWFJFU0VSVkVfTUFYXFx0XFx0XFx0XFx0N1xcbi1cXG4tI2RlZmluZSBNVEtfUEhZX0FOQVJHX1JHXFx0XFx0XFx0MHgxMFxcbi0jZGVmaW5lICAgTVRLX1BIWV9UQ0xLT0ZGU0VUX01BU0tcXHRcXHRHRU5NQVNLKDEyLCA4KVxcbi1cXG4tLyogUmVnaXN0ZXJzIG9uIE1ESU9fTU1EX1ZFTkQxICovXFxuLSNkZWZpbmUgTVRLX1BIWV9UWFZMRF9EQV9SR1xcdFxcdFxcdDB4MTJcXG4tI2RlZmluZSAgIE1US19QSFlfREFfVFhfSTJNUEJfQV9HQkVfTUFTS1xcdEdFTk1BU0soMTUsIDEwKVxcbi0jZGVmaW5lICAgTVRLX1BIWV9EQV9UWF9JMk1QQl9BX1RCVF9NQVNLXFx0R0VOTUFTSyg1LCAwKVxcbi1cXG4tI2RlZmluZSBNVEtfUEhZX1RYX0kyTVBCX1RFU1RfTU9ERV9BMlxcdFxcdDB4MTZcXG4tI2RlZmluZSAgIE1US19QSFlfREFfVFhfSTJNUEJfQV9IQlRfTUFTS1xcdEdFTk1BU0soMTUsIDEwKVxcbi0jZGVmaW5lICAgTVRLX1BIWV9EQV9UWF9JMk1QQl9BX1RTVF9NQVNLXFx0R0VOTUFTSyg1LCAwKVxcbi1cXG4tI2RlZmluZSBNVEtfUEhZX1RYX0kyTVBCX1RFU1RfTU9ERV9CMVxcdFxcdDB4MTdcXG4tI2RlZmluZSAgIE1US19QSFlfREFfVFhfSTJNUEJfQl9HQkVfTUFTS1xcdEdFTk1BU0soMTMsIDgpXFxuLSNkZWZpbmUgICBNVEtfUEhZX0RBX1RYX0kyTVBCX0JfVEJUX01BU0tcXHRHRU5NQVNLKDUsIDApXFxuLVxcbi0jZGVmaW5lIE1US19QSFlfVFhfSTJNUEJfVEVTVF9NT0RFX0IyXFx0XFx0MHgxOFxcbi0jZGVmaW5lICAgTVRLX1BIWV9EQV9UWF9JMk1QQl9CX0hCVF9NQVNLXFx0R0VOTUFTSygxMywgOClcXG4tI2RlZmluZSAgIE1US19QSFlfREFfVFhfSTJNUEJfQl9UU1RfTUFTS1xcdEdFTk1BU0soNSwgMClcXG4tXFxuLSNkZWZpbmUgTVRLX1BIWV9UWF9JMk1QQl9URVNUX01PREVfQzFcXHRcXHQweDE5XFxuLSNkZWZpbmUgICBNVEtfUEhZX0RBX1RYX0kyTVBCX0NfR0JFX01BU0tcXHRHRU5NQVNLKDEzLCA4KVxcbi0jZGVmaW5lICAgTVRLX1BIWV9EQV9UWF9JMk1QQl9DX1RCVF9NQVNLXFx0R0VOTUFTSyg1LCAwKVxcbi1cXG4tI2RlZmluZSBNVEtfUEhZX1RYX0kyTVBCX1RFU1RfTU9ERV9DMlxcdFxcdDB4MjBcXG4tI2RlZmluZSAgIE1US19QSFlfREFfVFhfSTJNUEJfQ19IQlRfTUFTS1xcdEdFTk1BU0soMTMsIDgpXFxuLSNkZWZpbmUgICBNVEtfUEhZX0RBX1RYX0kyTVBCX0NfVFNUX01BU0tcXHRHRU5NQVNLKDUsIDApXFxuLVxcbi0jZGVmaW5lIE1US19QSFlfVFhfSTJNUEJfVEVTVF9NT0RFX0QxXFx0XFx0MHgyMVxcbi0jZGVmaW5lICAgTVRLX1BIWV9EQV9UWF9JMk1QQl9EX0dCRV9NQVNLXFx0R0VOTUFTSygxMywgOClcXG4tI2RlZmluZSAgIE1US19QSFlfREFfVFhfSTJNUEJfRF9UQlRfTUFTS1xcdEdFTk1BU0soNSwgMClcXG4tXFxuLSNkZWZpbmUgTVRLX1BIWV9UWF9JMk1QQl9URVNUX01PREVfRDJcXHRcXHQweDIyXFxuLSNkZWZpbmUgICBNVEtfUEhZX0RBX1RYX0kyTVBCX0RfSEJUX01BU0tcXHRHRU5NQVNLKDEzLCA4KVxcbi0jZGVmaW5lICAgTVRLX1BIWV9EQV9UWF9JMk1QQl9EX1RTVF9NQVNLXFx0R0VOTUFTSyg1LCAwKVxcbi1cXG4tI2RlZmluZSBNVEtfUEhZX1JYQURDX0NUUkxfUkc3XFx0XFx0XFx0MHhjNlxcbi0jZGVmaW5lICAgTVRLX1BIWV9EQV9BRF9CVUZfQklBU19MUF9NQVNLXFx0R0VOTUFTSyg5LCA4KVxcbi1cXG4tI2RlZmluZSBNVEtfUEhZX1JYQURDX0NUUkxfUkc5XFx0XFx0XFx0MHhjOFxcbi0jZGVmaW5lICAgTVRLX1BIWV9EQV9SWF9QU0JOX1RCVF9NQVNLXFx0XFx0R0VOTUFTSygxNCwgMTIpXFxuLSNkZWZpbmUgICBNVEtfUEhZX0RBX1JYX1BTQk5fSEJUX01BU0tcXHRcXHRHRU5NQVNLKDEwLCA4KVxcbi0jZGVmaW5lICAgTVRLX1BIWV9EQV9SWF9QU0JOX0dCRV9NQVNLXFx0XFx0R0VOTUFTSyg2LCA0KVxcbi0jZGVmaW5lICAgTVRLX1BIWV9EQV9SWF9QU0JOX0xQX01BU0tcXHRcXHRHRU5NQVNLKDIsIDApXFxuLVxcbi0jZGVmaW5lIE1US19QSFlfTERPX09VVFBVVF9WXFx0XFx0XFx0MHhkN1xcbi1cXG4tI2RlZmluZSBNVEtfUEhZX1JHX0FOQV9DQUxfUkcwXFx0XFx0XFx0MHhkYlxcbi0jZGVmaW5lICAgTVRLX1BIWV9SR19DQUxfQ0tJTlZcXHRcXHRcXHRCSVQoMTIpXFxuLSNkZWZpbmUgICBNVEtfUEhZX1JHX0FOQV9DQUxFTlxcdFxcdFxcdEJJVCg4KVxcbi0jZGVmaW5lICAgTVRLX1BIWV9SR19aQ0FMRU5fQVxcdFxcdFxcdEJJVCgwKVxcbi1cXG4tI2RlZmluZSBNVEtfUEhZX1JHX0FOQV9DQUxfUkcxXFx0XFx0XFx0MHhkY1xcbi0jZGVmaW5lICAgTVRLX1BIWV9SR19aQ0FMRU5fQlxcdFxcdFxcdEJJVCgxMilcXG4tI2RlZmluZSAgIE1US19QSFlfUkdfWkNBTEVOX0NcXHRcXHRcXHRCSVQoOClcXG4tI2RlZmluZSAgIE1US19QSFlfUkdfWkNBTEVOX0RcXHRcXHRcXHRCSVQoNClcXG4tI2RlZmluZSAgIE1US19QSFlfUkdfVFhWT1NfQ0FMRU5cXHRcXHRCSVQoMClcXG4tXFxuLSNkZWZpbmUgTVRLX1BIWV9SR19BTkFfQ0FMX1JHNVxcdFxcdFxcdDB4ZTBcXG4tI2RlZmluZSAgIE1US19QSFlfUkdfUkVYVF9UUklNX01BU0tcXHRcXHRHRU5NQVNLKDEzLCA4KVxcbi1cXG4tI2RlZmluZSBNVEtfUEhZX1JHX1RYX0ZJTFRFUlxcdFxcdFxcdDB4ZmVcXG4tXFxuLSNkZWZpbmUgTVRLX1BIWV9SR19MUElfUENTX0RTUF9DVFJMX1JFRzEyMFxcdDB4MTIwXFxuLSNkZWZpbmUgICBNVEtfUEhZX0xQSV9TSUdfRU5fTE9fVEhSRVNIMTAwMF9NQVNLXFx0R0VOTUFTSygxMiwgOClcXG4tI2RlZmluZSAgIE1US19QSFlfTFBJX1NJR19FTl9ISV9USFJFU0gxMDAwX01BU0tcXHRHRU5NQVNLKDQsIDApXFxuLVxcbi0jZGVmaW5lIE1US19QSFlfUkdfTFBJX1BDU19EU1BfQ1RSTF9SRUcxMjJcXHQweDEyMlxcbi0jZGVmaW5lICAgTVRLX1BIWV9MUElfTk9STV9NU0VfSElfVEhSRVNIMTAwMF9NQVNLXFx0R0VOTUFTSyg3LCAwKVxcbi1cXG4tI2RlZmluZSBNVEtfUEhZX1JHX1RFU1RNVVhfQURDX0NUUkxcXHRcXHQweDE0NFxcbi0jZGVmaW5lICAgTVRLX1BIWV9SR19UWEVOX0RJR19NQVNLXFx0XFx0R0VOTUFTSyg1LCA1KVxcbi1cXG4tI2RlZmluZSBNVEtfUEhZX1JHX0NSX1RYX0FNUF9PRkZTRVRfQV9CXFx0XFx0MHgxNzJcXG4tI2RlZmluZSAgIE1US19QSFlfQ1JfVFhfQU1QX09GRlNFVF9BX01BU0tcXHRHRU5NQVNLKDEzLCA4KVxcbi0jZGVmaW5lICAgTVRLX1BIWV9DUl9UWF9BTVBfT0ZGU0VUX0JfTUFTS1xcdEdFTk1BU0soNiwgMClcXG4tXFxuLSNkZWZpbmUgTVRLX1BIWV9SR19DUl9UWF9BTVBfT0ZGU0VUX0NfRFxcdFxcdDB4MTczXFxuLSNkZWZpbmUgICBNVEtfUEhZX0NSX1RYX0FNUF9PRkZTRVRfQ19NQVNLXFx0R0VOTUFTSygxMywgOClcXG4tI2RlZmluZSAgIE1US19QSFlfQ1JfVFhfQU1QX09GRlNFVF9EX01BU0tcXHRHRU5NQVNLKDYsIDApXFxuLVxcbi0jZGVmaW5lIE1US19QSFlfUkdfQURfQ0FMX0NPTVBcXHRcXHRcXHQweDE3YVxcbi0jZGVmaW5lICAgTVRLX1BIWV9BRF9DQUxfQ09NUF9PVVRfTUFTS1xcdFxcdEdFTk1BU0soOCwgOClcXG4tXFxuLSNkZWZpbmUgTVRLX1BIWV9SR19BRF9DQUxfQ0xLXFx0XFx0XFx0MHgxN2JcXG4tI2RlZmluZSAgIE1US19QSFlfREFfQ0FMX0NMS1xcdFxcdFxcdEJJVCgwKVxcbi1cXG4tI2RlZmluZSBNVEtfUEhZX1JHX0FEX0NBTElOXFx0XFx0XFx0MHgxN2NcXG4tI2RlZmluZSAgIE1US19QSFlfREFfQ0FMSU5fRkxBR1xcdFxcdFxcdEJJVCgwKVxcbi1cXG4tI2RlZmluZSBNVEtfUEhZX1JHX0RBU05fREFDX0lOMF9BXFx0XFx0MHgxN2RcXG4tI2RlZmluZSAgIE1US19QSFlfREFTTl9EQUNfSU4wX0FfTUFTS1xcdFxcdEdFTk1BU0soOSwgMClcXG4tXFxuLSNkZWZpbmUgTVRLX1BIWV9SR19EQVNOX0RBQ19JTjBfQlxcdFxcdDB4MTdlXFxuLSNkZWZpbmUgICBNVEtfUEhZX0RBU05fREFDX0lOMF9CX01BU0tcXHRcXHRHRU5NQVNLKDksIDApXFxuLVxcbi0jZGVmaW5lIE1US19QSFlfUkdfREFTTl9EQUNfSU4wX0NcXHRcXHQweDE3Zlxcbi0jZGVmaW5lICAgTVRLX1BIWV9EQVNOX0RBQ19JTjBfQ19NQVNLXFx0XFx0R0VOTUFTSyg5LCAwKVxcbi1cXG4tI2RlZmluZSBNVEtfUEhZX1JHX0RBU05fREFDX0lOMF9EXFx0XFx0MHgxODBcXG4tI2RlZmluZSAgIE1US19QSFlfREFTTl9EQUNfSU4wX0RfTUFTS1xcdFxcdEdFTk1BU0soOSwgMClcXG4tXFxuLSNkZWZpbmUgTVRLX1BIWV9SR19EQVNOX0RBQ19JTjFfQVxcdFxcdDB4MTgxXFxuLSNkZWZpbmUgICBNVEtfUEhZX0RBU05fREFDX0lOMV9BX01BU0tcXHRcXHRHRU5NQVNLKDksIDApXFxuLVxcbi0jZGVmaW5lIE1US19QSFlfUkdfREFTTl9EQUNfSU4xX0JcXHRcXHQweDE4Mlxcbi0jZGVmaW5lICAgTVRLX1BIWV9EQVNOX0RBQ19JTjFfQl9NQVNLXFx0XFx0R0VOTUFTSyg5LCAwKVxcbi1cXG4tI2RlZmluZSBNVEtfUEhZX1JHX0RBU05fREFDX0lOMV9DXFx0XFx0MHgxODNcXG4tI2RlZmluZSAgIE1US19QSFlfREFTTl9EQUNfSU4xX0NfTUFTS1xcdFxcdEdFTk1BU0soOSwgMClcXG4tXFxuLSNkZWZpbmUgTVRLX1BIWV9SR19EQVNOX0RBQ19JTjFfRFxcdFxcdDB4MTg0XFxuLSNkZWZpbmUgICBNVEtfUEhZX0RBU05fREFDX0lOMV9EX01BU0tcXHRcXHRHRU5NQVNLKDksIDApXFxuLVxcbi0jZGVmaW5lIE1US19QSFlfUkdfREVWMUVfUkVHMTliXFx0XFx0XFx0MHgxOWJcXG4tI2RlZmluZSAgIE1US19QSFlfQllQQVNTX0RTUF9MUElfUkVBRFlcXHRcXHRCSVQoOClcXG4tXFxuLSNkZWZpbmUgTVRLX1BIWV9SR19MUF9JSVIyX0sxX0xcXHRcXHRcXHQweDIyYVxcbi0jZGVmaW5lIE1US19QSFlfUkdfTFBfSUlSMl9LMV9VXFx0XFx0XFx0MHgyMmJcXG4tI2RlZmluZSBNVEtfUEhZX1JHX0xQX0lJUjJfSzJfTFxcdFxcdFxcdDB4MjJjXFxuLSNkZWZpbmUgTVRLX1BIWV9SR19MUF9JSVIyX0syX1VcXHRcXHRcXHQweDIyZFxcbi0jZGVmaW5lIE1US19QSFlfUkdfTFBfSUlSMl9LM19MXFx0XFx0XFx0MHgyMmVcXG4tI2RlZmluZSBNVEtfUEhZX1JHX0xQX0lJUjJfSzNfVVxcdFxcdFxcdDB4MjJmXFxuLSNkZWZpbmUgTVRLX1BIWV9SR19MUF9JSVIyX0s0X0xcXHRcXHRcXHQweDIzMFxcbi0jZGVmaW5lIE1US19QSFlfUkdfTFBfSUlSMl9LNF9VXFx0XFx0XFx0MHgyMzFcXG4tI2RlZmluZSBNVEtfUEhZX1JHX0xQX0lJUjJfSzVfTFxcdFxcdFxcdDB4MjMyXFxuLSNkZWZpbmUgTVRLX1BIWV9SR19MUF9JSVIyX0s1X1VcXHRcXHRcXHQweDIzM1xcbi1cXG4tI2RlZmluZSBNVEtfUEhZX1JHX0RFVjFFX1JFRzIzNFxcdFxcdFxcdDB4MjM0XFxuLSNkZWZpbmUgICBNVEtfUEhZX1RSX09QRU5fTE9PUF9FTl9NQVNLXFx0XFx0R0VOTUFTSygwLCAwKVxcbi0jZGVmaW5lICAgTVRLX1BIWV9MUEZfWF9BVkVSQUdFX01BU0tcXHRcXHRHRU5NQVNLKDcsIDQpXFxuLSNkZWZpbmUgICBNVEtfUEhZX1RSX0xQX0lJUl9FRUVfRU5cXHRcXHRCSVQoMTIpXFxuLVxcbi0jZGVmaW5lIE1US19QSFlfUkdfTFBGX0NOVF9WQUxcXHRcXHRcXHQweDIzNVxcbi1cXG4tI2RlZmluZSBNVEtfUEhZX1JHX0RFVjFFX1JFRzIzOFxcdFxcdFxcdDB4MjM4XFxuLSNkZWZpbmUgICBNVEtfUEhZX0xQSV9TTFZfU0VORF9UWF9USU1FUl9NQVNLXFx0R0VOTUFTSyg4LCAwKVxcbi0jZGVmaW5lICAgTVRLX1BIWV9MUElfU0xWX1NFTkRfVFhfRU5cXHRcXHRCSVQoMTIpXFxuLVxcbi0jZGVmaW5lIE1US19QSFlfUkdfREVWMUVfUkVHMjM5XFx0XFx0XFx0MHgyMzlcXG4tI2RlZmluZSAgIE1US19QSFlfTFBJX1NFTkRfTE9DX1RJTUVSX01BU0tcXHRHRU5NQVNLKDgsIDApXFxuLSNkZWZpbmUgICBNVEtfUEhZX0xQSV9UWFBDU19MT0NfUkNWXFx0XFx0QklUKDEyKVxcbi1cXG4tI2RlZmluZSBNVEtfUEhZX1JHX0RFVjFFX1JFRzI3Q1xcdFxcdFxcdDB4MjdjXFxuLSNkZWZpbmUgICBNVEtfUEhZX1ZHQVNUQVRFX0ZGRV9USFJfU1QxX01BU0tcXHRHRU5NQVNLKDEyLCA4KVxcbi0jZGVmaW5lIE1US19QSFlfUkdfREVWMUVfUkVHMjdEXFx0XFx0XFx0MHgyN2RcXG4tI2RlZmluZSAgIE1US19QSFlfVkdBU1RBVEVfRkZFX1RIUl9TVDJfTUFTS1xcdEdFTk1BU0soNCwgMClcXG4tXFxuLSNkZWZpbmUgTVRLX1BIWV9SR19ERVYxRV9SRUcyQzdcXHRcXHRcXHQweDJjN1xcbi0jZGVmaW5lICAgTVRLX1BIWV9NQVhfR0FJTl9NQVNLXFx0XFx0XFx0R0VOTUFTSyg0LCAwKVxcbi0jZGVmaW5lICAgTVRLX1BIWV9NSU5fR0FJTl9NQVNLXFx0XFx0XFx0R0VOTUFTSygxMiwgOClcXG4tXFxuLSNkZWZpbmUgTVRLX1BIWV9SR19ERVYxRV9SRUcyRDFcXHRcXHRcXHQweDJkMVxcbi0jZGVmaW5lICAgTVRLX1BIWV9WQ09fU0xJQ0VSX1RIUkVTSF9CSVRTX0hJR0hfRUVFX01BU0tcXHRHRU5NQVNLKDcsIDApXFxuLSNkZWZpbmUgICBNVEtfUEhZX0xQSV9TS0lQX1NEX1NMVl9UUlxcdFxcdEJJVCg4KVxcbi0jZGVmaW5lICAgTVRLX1BIWV9MUElfVFJfUkVBRFlcXHRcXHRcXHRCSVQoOSlcXG4tI2RlZmluZSAgIE1US19QSFlfTFBJX1ZDT19FRUVfU1RHMF9FTlxcdFxcdEJJVCgxMClcXG4tXFxuLSNkZWZpbmUgTVRLX1BIWV9SR19ERVYxRV9SRUczMjNcXHRcXHRcXHQweDMyM1xcbi0jZGVmaW5lICAgTVRLX1BIWV9FRUVfV0FLRV9NQVNfSU5UX0RDXFx0XFx0QklUKDApXFxuLSNkZWZpbmUgICBNVEtfUEhZX0VFRV9XQUtFX1NMVl9JTlRfRENcXHRcXHRCSVQoNClcXG4tXFxuLSNkZWZpbmUgTVRLX1BIWV9SR19ERVYxRV9SRUczMjRcXHRcXHRcXHQweDMyNFxcbi0jZGVmaW5lICAgTVRLX1BIWV9TTUlfREVUQ05UX01BWF9NQVNLXFx0XFx0R0VOTUFTSyg1LCAwKVxcbi0jZGVmaW5lICAgTVRLX1BIWV9TTUlfREVUX01BWF9FTlxcdFxcdEJJVCg4KVxcbi1cXG4tI2RlZmluZSBNVEtfUEhZX1JHX0RFVjFFX1JFRzMyNlxcdFxcdFxcdDB4MzI2XFxuLSNkZWZpbmUgICBNVEtfUEhZX0xQSV9NT0RFX1NEX09OXFx0XFx0QklUKDApXFxuLSNkZWZpbmUgICBNVEtfUEhZX1JFU0VUX1JBTkRVUERfQ05UXFx0XFx0QklUKDEpXFxuLSNkZWZpbmUgICBNVEtfUEhZX1RSRUNfVVBEQVRFX0VOQUJfQ0xSXFx0XFx0QklUKDIpXFxuLSNkZWZpbmUgICBNVEtfUEhZX0xQSV9RVUlUX1dBSVRfREZFX1NJR19ERVRfT0ZGXFx0QklUKDQpXFxuLSNkZWZpbmUgICBNVEtfUEhZX1RSX1JFQURZX1NLSVBfQUZFX1dBS0VVUFxcdEJJVCg1KVxcbi1cXG4tI2RlZmluZSBNVEtfUEhZX0xET19QVU1QX0VOX1BBSVJBQlxcdFxcdDB4NTAyXFxuLSNkZWZpbmUgTVRLX1BIWV9MRE9fUFVNUF9FTl9QQUlSQ0RcXHRcXHQweDUwM1xcbi1cXG4tI2RlZmluZSBNVEtfUEhZX0RBX1RYX1I1MF9QQUlSX0FcXHRcXHQweDUzZFxcbi0jZGVmaW5lIE1US19QSFlfREFfVFhfUjUwX1BBSVJfQlxcdFxcdDB4NTNlXFxuLSNkZWZpbmUgTVRLX1BIWV9EQV9UWF9SNTBfUEFJUl9DXFx0XFx0MHg1M2ZcXG4tI2RlZmluZSBNVEtfUEhZX0RBX1RYX1I1MF9QQUlSX0RcXHRcXHQweDU0MFxcbi1cXG4tLyogUmVnaXN0ZXJzIG9uIE1ESU9fTU1EX1ZFTkQyICovXFxuLSNkZWZpbmUgTVRLX1BIWV9MRUQxX0RFRkFVTFRfUE9MQVJJVElFU1xcdFxcdEJJVCgxKVxcbi1cXG4tI2RlZmluZSBNVEtfUEhZX1JHX0JHX1JBU0VMXFx0XFx0XFx0MHgxMTVcXG4tI2RlZmluZSAgIE1US19QSFlfUkdfQkdfUkFTRUxfTUFTS1xcdFxcdEdFTk1BU0soMiwgMClcXG4tXFxuLS8qICdib290dHJhcCcgcmVnaXN0ZXIgcmVmbGVjdGluZyB0aGUgY29uZmlndXJhdGlvbiBvZiB0aGUgNCBQSFkgTEVEcyAqL1xcbi0jZGVmaW5lIFJHX0dQSU9fTUlTQ19UUEJBTkswXFx0XFx0XFx0MHg2ZjBcXG4tI2RlZmluZSAgIFJHX0dQSU9fTUlTQ19UUEJBTkswX0JPT1RNT0RFXFx0XFx0R0VOTUFTSygxMSwgOClcXG4tXFxuIC8qIFRoZXNlIG1hY3JvIHByaXZpZGVzIGVmdXNlIHBhcnNpbmcgZm9yIGludGVybmFsIHBoeS4gKi9cXG4gI2RlZmluZSBFRlNfREFfVFhfSTJNUEJfQSh4KVxcdFxcdFxcdCgoKHgpIFxcdTAwM2VcXHUwMDNlIDApIFxcdTAwMjYgR0VOTUFTSyg1LCAwKSlcXG4gI2RlZmluZSBFRlNfREFfVFhfSTJNUEJfQih4KVxcdFxcdFxcdCgoKHgpIFxcdTAwM2VcXHUwMDNlIDYpIFxcdTAwMjYgR0VOTUFTSyg1LCAwKSlcXG5AQCAtMzQ2LDUxICszNCwxNiBAQFxcbiAjZGVmaW5lIEVGU19SR19CR19SQVNFTCh4KVxcdFxcdFxcdCgoKHgpIFxcdTAwM2VcXHUwMDNlIDQpIFxcdTAwMjYgR0VOTUFTSygyLCAwKSlcXG4gI2RlZmluZSBFRlNfUkdfUkVYVF9UUklNKHgpXFx0XFx0XFx0KCgoeCkgXFx1MDAzZVxcdTAwM2UgNykgXFx1MDAyNiBHRU5NQVNLKDUsIDApKVxcbiBcXG4tZW51bSB7XFxuLVxcdE5PX1BBSVIsXFxuLVxcdFBBSVJfQSxcXG4tXFx0UEFJUl9CLFxcbi1cXHRQQUlSX0MsXFxuLVxcdFBBSVJfRCxcXG4tfTtcXG4tXFxuLWVudW0gY2FsaWJyYXRpb25fbW9kZSB7XFxuLVxcdEVGVVNFX0ssXFxuLVxcdFNXX0tcXG4tfTtcXG4tXFxuLWVudW0gQ0FMX0lURU0ge1xcbi1cXHRSRVhULFxcbi1cXHRUWF9PRkZTRVQsXFxuLVxcdFRYX0FNUCxcXG4tXFx0VFhfUjUwLFxcbi1cXHRUWF9WQ01cXG4tfTtcXG4tXFxuLWVudW0gQ0FMX01PREUge1xcbi1cXHRFRlVTRV9NLFxcbi1cXHRTV19NXFxuLX07XFxuLVxcbiBzdHJ1Y3QgbXRrX3NvY3BoeV9zaGFyZWQge1xcbiBcXHR1MzJcXHRcXHRcXHRib290dHJhcDtcXG4gXFx0c3RydWN0IG10a19zb2NwaHlfcHJpdlxcdHByaXZbNF07XFxuIH07XFxuIFxcbi0vKiBPbmUgY2FsaWJyYXRpb24gY3ljbGUgY29uc2lzdHMgb2Y6XFxuLSAqIDEuU2V0IERBX0NBTElOX0ZMQUcgaGlnaCB0byBzdGFydCBjYWxpYnJhdGlvbi4gS2VlcCBpdCBoaWdoXFxuLSAqICAgdW50aWwgQURfQ0FMX0NPTVAgaXMgcmVhZHkgdG8gb3V0cHV0IGNhbGlicmF0aW9uIHJlc3VsdC5cXG4tICogMi5XYWl0IHVudGlsIERBX0NBTF9DTEsgaXMgYXZhaWxhYmxlLlxcbi0gKiAzLkZldGNoIEFEX0NBTF9DT01QX09VVC5cXG4tICovXFxuLXN0YXRpYyBpbnQgY2FsX2N5Y2xlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIGludCBkZXZhZCxcXG4tXFx0XFx0ICAgICB1MzIgcmVnbnVtLCB1MTYgbWFzaywgdTE2IGNhbF92YWwpXFxuK2ludCBtdGtfY2FsX2N5Y2xlX3dhaXQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG4ge1xcbiBcXHRpbnQgcmVnX3ZhbDtcXG4gXFx0aW50IHJldDtcXG4gXFxuLVxcdHBoeV9tb2RpZnlfbW1kKHBoeWRldiwgZGV2YWQsIHJlZ251bSxcXG4tXFx0XFx0ICAgICAgIG1hc2ssIGNhbF92YWwpO1xcbiBcXHRwaHlfc2V0X2JpdHNfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIE1US19QSFlfUkdfQURfQ0FMSU4sXFxuIFxcdFxcdFxcdCBNVEtfUEhZX0RBX0NBTElOX0ZMQUcpO1xcbiBcXG5AQCAtNDA5LDcgKzYyLDI1IEBAIHN0YXRpYyBpbnQgY2FsX2N5Y2xlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIGludCBkZXZhZCxcXG4gXFx0cmV0ID0gcGh5X3JlYWRfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIE1US19QSFlfUkdfQURfQ0FMX0NPTVApO1xcbiBcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4gXFx0XFx0cmV0dXJuIHJldDtcXG4tXFx0cmV0ID0gRklFTERfR0VUKE1US19QSFlfQURfQ0FMX0NPTVBfT1VUX01BU0ssIHJldCk7XFxuK1xcbitcXHRyZXR1cm4gRklFTERfR0VUKE1US19QSFlfQURfQ0FMX0NPTVBfT1VUX01BU0ssIHJldCk7XFxuK31cXG4rXFxuKy8qIE9uZSBjYWxpYnJhdGlvbiBjeWNsZSBjb25zaXN0cyBvZjpcXG4rICogMS5TZXQgREFfQ0FMSU5fRkxBRyBoaWdoIHRvIHN0YXJ0IGNhbGlicmF0aW9uLiBLZWVwIGl0IGhpZ2hcXG4rICogICB1bnRpbCBBRF9DQUxfQ09NUCBpcyByZWFkeSB0byBvdXRwdXQgY2FsaWJyYXRpb24gcmVzdWx0LlxcbisgKiAyLldhaXQgdW50aWwgREFfQ0FMX0NMSyBpcyBhdmFpbGFibGUuXFxuKyAqIDMuRmV0Y2ggQURfQ0FMX0NPTVBfT1VULlxcbisgKi9cXG4rc3RhdGljIGludCBjYWxfY3ljbGUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgaW50IGRldmFkLFxcbitcXHRcXHQgICAgIHUzMiByZWdudW0sIHUxNiBtYXNrLCB1MTYgY2FsX3ZhbClcXG4re1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0cGh5X21vZGlmeV9tbWQocGh5ZGV2LCBkZXZhZCwgcmVnbnVtLFxcbitcXHRcXHQgICAgICAgbWFzaywgY2FsX3ZhbCk7XFxuK1xcbitcXHRyZXQgPSBtdGtfY2FsX2N5Y2xlX3dhaXQocGh5ZGV2KTtcXG4gXFx0cGh5ZGV2X2RiZyhwaHlkZXYsIFxcXCJjYWxfdmFsOiAweCV4LCByZXQ6ICVkXFxcXG5cXFwiLCBjYWxfdmFsLCByZXQpO1xcbiBcXG4gXFx0cmV0dXJuIHJldDtcXG5AQCAtMTIxNSw3MyArODg2LDYgQEAgc3RhdGljIGludCBtdDc5OHhfcGh5X2NvbmZpZ19pbml0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuIFxcdHJldHVybiBtdDc5OHhfcGh5X2NhbGlicmF0aW9uKHBoeWRldik7XFxuIH1cXG4gXFxuLXN0YXRpYyBpbnQgbXQ3OTh4X3BoeV9sZWRfYmxpbmtfc2V0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIHU4IGluZGV4LFxcbi1cXHRcXHRcXHRcXHQgICAgdW5zaWduZWQgbG9uZyAqZGVsYXlfb24sXFxuLVxcdFxcdFxcdFxcdCAgICB1bnNpZ25lZCBsb25nICpkZWxheV9vZmYpXFxuLXtcXG4tXFx0Ym9vbCBibGlua2luZyA9IGZhbHNlO1xcbi1cXHRpbnQgZXJyO1xcbi1cXG4tXFx0ZXJyID0gbXRrX3BoeV9sZWRfbnVtX2RseV9jZmcoaW5kZXgsIGRlbGF5X29uLCBkZWxheV9vZmYsIFxcdTAwMjZibGlua2luZyk7XFxuLVxcdGlmIChlcnIgXFx1MDAzYyAwKVxcbi1cXHRcXHRyZXR1cm4gZXJyO1xcbi1cXG4tXFx0ZXJyID0gbXRrX3BoeV9od19sZWRfYmxpbmtfc2V0KHBoeWRldiwgaW5kZXgsIGJsaW5raW5nKTtcXG4tXFx0aWYgKGVycilcXG4tXFx0XFx0cmV0dXJuIGVycjtcXG4tXFxuLVxcdHJldHVybiBtdGtfcGh5X2h3X2xlZF9vbl9zZXQocGh5ZGV2LCBpbmRleCwgTVRLX0dQSFlfTEVEX09OX01BU0ssXFxuLVxcdFxcdFxcdFxcdCAgICAgZmFsc2UpO1xcbi19XFxuLVxcbi1zdGF0aWMgaW50IG10Nzk4eF9waHlfbGVkX2JyaWdodG5lc3Nfc2V0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsXFxuLVxcdFxcdFxcdFxcdFxcdCB1OCBpbmRleCwgZW51bSBsZWRfYnJpZ2h0bmVzcyB2YWx1ZSlcXG4te1xcbi1cXHRpbnQgZXJyO1xcbi1cXG4tXFx0ZXJyID0gbXRrX3BoeV9od19sZWRfYmxpbmtfc2V0KHBoeWRldiwgaW5kZXgsIGZhbHNlKTtcXG4tXFx0aWYgKGVycilcXG4tXFx0XFx0cmV0dXJuIGVycjtcXG4tXFxuLVxcdHJldHVybiBtdGtfcGh5X2h3X2xlZF9vbl9zZXQocGh5ZGV2LCBpbmRleCwgTVRLX0dQSFlfTEVEX09OX01BU0ssXFxuLVxcdFxcdFxcdFxcdCAgICAgKHZhbHVlICE9IExFRF9PRkYpKTtcXG4tfVxcbi1cXG4tc3RhdGljIGNvbnN0IHVuc2lnbmVkIGxvbmcgc3VwcG9ydGVkX3RyaWdnZXJzID1cXG4tXFx0QklUKFRSSUdHRVJfTkVUREVWX0ZVTExfRFVQTEVYKSB8XFxuLVxcdEJJVChUUklHR0VSX05FVERFVl9IQUxGX0RVUExFWCkgfFxcbi1cXHRCSVQoVFJJR0dFUl9ORVRERVZfTElOSykgICAgICAgIHxcXG4tXFx0QklUKFRSSUdHRVJfTkVUREVWX0xJTktfMTApICAgICB8XFxuLVxcdEJJVChUUklHR0VSX05FVERFVl9MSU5LXzEwMCkgICAgfFxcbi1cXHRCSVQoVFJJR0dFUl9ORVRERVZfTElOS18xMDAwKSAgIHxcXG4tXFx0QklUKFRSSUdHRVJfTkVUREVWX1JYKSAgICAgICAgICB8XFxuLVxcdEJJVChUUklHR0VSX05FVERFVl9UWCk7XFxuLVxcbi1zdGF0aWMgaW50IG10Nzk4eF9waHlfbGVkX2h3X2lzX3N1cHBvcnRlZChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCB1OCBpbmRleCxcXG4tXFx0XFx0XFx0XFx0XFx0ICB1bnNpZ25lZCBsb25nIHJ1bGVzKVxcbi17XFxuLVxcdHJldHVybiBtdGtfcGh5X2xlZF9od19pc19zdXBwb3J0ZWQocGh5ZGV2LCBpbmRleCwgcnVsZXMsXFxuLVxcdFxcdFxcdFxcdFxcdCAgIHN1cHBvcnRlZF90cmlnZ2Vycyk7XFxuLX1cXG4tXFxuLXN0YXRpYyBpbnQgbXQ3OTh4X3BoeV9sZWRfaHdfY29udHJvbF9nZXQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgdTggaW5kZXgsXFxuLVxcdFxcdFxcdFxcdFxcdCB1bnNpZ25lZCBsb25nICpydWxlcylcXG4te1xcbi1cXHRyZXR1cm4gbXRrX3BoeV9sZWRfaHdfY3RybF9nZXQocGh5ZGV2LCBpbmRleCwgcnVsZXMsXFxuLVxcdFxcdFxcdFxcdCAgICAgICBNVEtfR1BIWV9MRURfT05fU0VULFxcbi1cXHRcXHRcXHRcXHQgICAgICAgTVRLX0dQSFlfTEVEX1JYX0JMSU5LX1NFVCxcXG4tXFx0XFx0XFx0XFx0ICAgICAgIE1US19HUEhZX0xFRF9UWF9CTElOS19TRVQpO1xcbi19O1xcbi1cXG4tc3RhdGljIGludCBtdDc5OHhfcGh5X2xlZF9od19jb250cm9sX3NldChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCB1OCBpbmRleCxcXG4tXFx0XFx0XFx0XFx0XFx0IHVuc2lnbmVkIGxvbmcgcnVsZXMpXFxuLXtcXG4tXFx0cmV0dXJuIG10a19waHlfbGVkX2h3X2N0cmxfc2V0KHBoeWRldiwgaW5kZXgsIHJ1bGVzLFxcbi1cXHRcXHRcXHRcXHQgICAgICAgTVRLX0dQSFlfTEVEX09OX1NFVCxcXG4tXFx0XFx0XFx0XFx0ICAgICAgIE1US19HUEhZX0xFRF9SWF9CTElOS19TRVQsXFxuLVxcdFxcdFxcdFxcdCAgICAgICBNVEtfR1BIWV9MRURfVFhfQkxJTktfU0VUKTtcXG4tfTtcXG4tXFxuIHN0YXRpYyBib29sIG10Nzk4OF9waHlfbGVkX2dldF9wb2xhcml0eShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCBpbnQgbGVkX251bSlcXG4ge1xcbiBcXHRzdHJ1Y3QgbXRrX3NvY3BoeV9zaGFyZWQgKnByaXYgPSBwaHlfcGFja2FnZV9nZXRfcHJpdihwaHlkZXYpO1xcbkBAIC0xNDE4LDU4ICsxMDIyLDYgQEAgc3RhdGljIGludCBtdDc5ODFfcGh5X3Byb2JlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuIFxcdHJldHVybiBtdDc5OHhfcGh5X2NhbGlicmF0aW9uKHBoeWRldik7XFxuIH1cXG4gXFxuLXN0YXRpYyBpbnQgYW43NTgxX3BoeV9wcm9iZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbi17XFxuLVxcdHN0cnVjdCBtdGtfc29jcGh5X3ByaXYgKnByaXY7XFxuLVxcdHN0cnVjdCBwaW5jdHJsICpwaW5jdHJsO1xcbi1cXG4tXFx0LyogVG9nZ2xlIHBpbmN0cmwgdG8gZW5hYmxlIFBIWSBMRUQgKi9cXG4tXFx0cGluY3RybCA9IGRldm1fcGluY3RybF9nZXRfc2VsZWN0KFxcdTAwMjZwaHlkZXYtXFx1MDAzZW1kaW8uZGV2LCBcXFwiZ2JlLWxlZFxcXCIpO1xcbi1cXHRpZiAoSVNfRVJSKHBpbmN0cmwpKVxcbi1cXHRcXHRkZXZfZXJyKFxcdTAwMjZwaHlkZXYtXFx1MDAzZW1kaW8uYnVzLVxcdTAwM2VkZXYsXFxuLVxcdFxcdFxcdFxcXCJGYWlsZWQgdG8gc2V0dXAgUEhZIExFRCBwaW5jdHJsXFxcXG5cXFwiKTtcXG4tXFxuLVxcdHByaXYgPSBkZXZtX2t6YWxsb2MoXFx1MDAyNnBoeWRldi1cXHUwMDNlbWRpby5kZXYsIHNpemVvZigqcHJpdiksIEdGUF9LRVJORUwpO1xcbi1cXHRpZiAoIXByaXYpXFxuLVxcdFxcdHJldHVybiAtRU5PTUVNO1xcbi1cXG4tXFx0cGh5ZGV2LVxcdTAwM2Vwcml2ID0gcHJpdjtcXG4tXFxuLVxcdHJldHVybiAwO1xcbi19XFxuLVxcbi1zdGF0aWMgaW50IGFuNzU4MV9waHlfbGVkX3BvbGFyaXR5X3NldChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCBpbnQgaW5kZXgsXFxuLVxcdFxcdFxcdFxcdCAgICAgICB1bnNpZ25lZCBsb25nIG1vZGVzKVxcbi17XFxuLVxcdHUxNiB2YWwgPSAwO1xcbi1cXHR1MzIgbW9kZTtcXG4tXFxuLVxcdGlmIChpbmRleCBcXHUwMDNlPSBNVEtfUEhZX01BWF9MRURTKVxcbi1cXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4tXFxuLVxcdGZvcl9lYWNoX3NldF9iaXQobW9kZSwgXFx1MDAyNm1vZGVzLCBfX1BIWV9MRURfTU9ERVNfTlVNKSB7XFxuLVxcdFxcdHN3aXRjaCAobW9kZSkge1xcbi1cXHRcXHRjYXNlIFBIWV9MRURfQUNUSVZFX0xPVzpcXG4tXFx0XFx0XFx0dmFsID0gTVRLX1BIWV9MRURfT05fUE9MQVJJVFk7XFxuLVxcdFxcdFxcdGJyZWFrO1xcbi1cXHRcXHRjYXNlIFBIWV9MRURfQUNUSVZFX0hJR0g6XFxuLVxcdFxcdFxcdGJyZWFrO1xcbi1cXHRcXHRkZWZhdWx0Olxcbi1cXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4tXFx0XFx0fVxcbi1cXHR9XFxuLVxcbi1cXHRyZXR1cm4gcGh5X21vZGlmeV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMiwgaW5kZXggP1xcbi1cXHRcXHRcXHQgICAgICBNVEtfUEhZX0xFRDFfT05fQ1RSTCA6IE1US19QSFlfTEVEMF9PTl9DVFJMLFxcbi1cXHRcXHRcXHQgICAgICBNVEtfUEhZX0xFRF9PTl9QT0xBUklUWSwgdmFsKTtcXG4tfVxcbi1cXG4tc3RhdGljIGludCBhbjc1ODNfcGh5X2NvbmZpZ19pbml0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuLXtcXG4tXFx0LyogQk1DUl9QRE9XTiBpcyBlbmFibGVkIGJ5IGRlZmF1bHQgKi9cXG4tXFx0cmV0dXJuIHBoeV9jbGVhcl9iaXRzKHBoeWRldiwgTUlJX0JNQ1IsIEJNQ1JfUERPV04pO1xcbi19XFxuLVxcbiBzdGF0aWMgc3RydWN0IHBoeV9kcml2ZXIgbXRrX3NvY3BoeV9kcml2ZXJbXSA9IHtcXG4gXFx0e1xcbiBcXHRcXHRQSFlfSURfTUFUQ0hfRVhBQ1QoTVRLX0dQSFlfSURfTVQ3OTgxKSxcXG5AQCAtMTUwNSwzMSArMTA1Nyw2IEBAIHN0YXRpYyBzdHJ1Y3QgcGh5X2RyaXZlciBtdGtfc29jcGh5X2RyaXZlcltdID0ge1xcbiBcXHRcXHQubGVkX2h3X2NvbnRyb2xfc2V0ID0gbXQ3OTh4X3BoeV9sZWRfaHdfY29udHJvbF9zZXQsXFxuIFxcdFxcdC5sZWRfaHdfY29udHJvbF9nZXQgPSBtdDc5OHhfcGh5X2xlZF9od19jb250cm9sX2dldCxcXG4gXFx0fSxcXG4tXFx0e1xcbi1cXHRcXHRQSFlfSURfTUFUQ0hfRVhBQ1QoTVRLX0dQSFlfSURfQU43NTgxKSxcXG4tXFx0XFx0Lm5hbWVcXHRcXHQ9IFxcXCJBaXJvaGEgQU43NTgxIFBIWVxcXCIsXFxuLVxcdFxcdC5jb25maWdfaW50clxcdD0gZ2VucGh5X25vX2NvbmZpZ19pbnRyLFxcbi1cXHRcXHQuaGFuZGxlX2ludGVycnVwdCA9IGdlbnBoeV9oYW5kbGVfaW50ZXJydXB0X25vX2FjayxcXG4tXFx0XFx0LnByb2JlXFx0XFx0PSBhbjc1ODFfcGh5X3Byb2JlLFxcbi1cXHRcXHQubGVkX2JsaW5rX3NldFxcdD0gbXQ3OTh4X3BoeV9sZWRfYmxpbmtfc2V0LFxcbi1cXHRcXHQubGVkX2JyaWdodG5lc3Nfc2V0ID0gbXQ3OTh4X3BoeV9sZWRfYnJpZ2h0bmVzc19zZXQsXFxuLVxcdFxcdC5sZWRfaHdfaXNfc3VwcG9ydGVkID0gbXQ3OTh4X3BoeV9sZWRfaHdfaXNfc3VwcG9ydGVkLFxcbi1cXHRcXHQubGVkX2h3X2NvbnRyb2xfc2V0ID0gbXQ3OTh4X3BoeV9sZWRfaHdfY29udHJvbF9zZXQsXFxuLVxcdFxcdC5sZWRfaHdfY29udHJvbF9nZXQgPSBtdDc5OHhfcGh5X2xlZF9od19jb250cm9sX2dldCxcXG4tXFx0XFx0LmxlZF9wb2xhcml0eV9zZXQgPSBhbjc1ODFfcGh5X2xlZF9wb2xhcml0eV9zZXQsXFxuLVxcdH0sXFxuLVxcdHtcXG4tXFx0XFx0UEhZX0lEX01BVENIX0VYQUNUKE1US19HUEhZX0lEX0FONzU4MyksXFxuLVxcdFxcdC5uYW1lXFx0XFx0PSBcXFwiQWlyb2hhIEFONzU4MyBQSFlcXFwiLFxcbi1cXHRcXHQuY29uZmlnX2luaXRcXHQ9IGFuNzU4M19waHlfY29uZmlnX2luaXQsXFxuLVxcdFxcdC5wcm9iZVxcdFxcdD0gYW43NTgxX3BoeV9wcm9iZSxcXG4tXFx0XFx0LmxlZF9ibGlua19zZXRcXHQ9IG10Nzk4eF9waHlfbGVkX2JsaW5rX3NldCxcXG4tXFx0XFx0LmxlZF9icmlnaHRuZXNzX3NldCA9IG10Nzk4eF9waHlfbGVkX2JyaWdodG5lc3Nfc2V0LFxcbi1cXHRcXHQubGVkX2h3X2lzX3N1cHBvcnRlZCA9IG10Nzk4eF9waHlfbGVkX2h3X2lzX3N1cHBvcnRlZCxcXG4tXFx0XFx0LmxlZF9od19jb250cm9sX3NldCA9IG10Nzk4eF9waHlfbGVkX2h3X2NvbnRyb2xfc2V0LFxcbi1cXHRcXHQubGVkX2h3X2NvbnRyb2xfZ2V0ID0gbXQ3OTh4X3BoeV9sZWRfaHdfY29udHJvbF9nZXQsXFxuLVxcdFxcdC5sZWRfcG9sYXJpdHlfc2V0ID0gYW43NTgxX3BoeV9sZWRfcG9sYXJpdHlfc2V0LFxcbi1cXHR9LFxcbiB9O1xcbiBcXG4gbW9kdWxlX3BoeV9kcml2ZXIobXRrX3NvY3BoeV9kcml2ZXIpO1xcbkBAIC0xNTM3LDggKzEwNjQsNiBAQCBtb2R1bGVfcGh5X2RyaXZlcihtdGtfc29jcGh5X2RyaXZlcik7XFxuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbWRpb19kZXZpY2VfaWQgX19tYXliZV91bnVzZWQgbXRrX3NvY3BoeV90YmxbXSA9IHtcXG4gXFx0eyBQSFlfSURfTUFUQ0hfRVhBQ1QoTVRLX0dQSFlfSURfTVQ3OTgxKSB9LFxcbiBcXHR7IFBIWV9JRF9NQVRDSF9FWEFDVChNVEtfR1BIWV9JRF9NVDc5ODgpIH0sXFxuLVxcdHsgUEhZX0lEX01BVENIX0VYQUNUKE1US19HUEhZX0lEX0FONzU4MSkgfSxcXG4tXFx0eyBQSFlfSURfTUFUQ0hfRVhBQ1QoTVRLX0dQSFlfSURfQU43NTgzKSB9LFxcbiBcXHR7IH1cXG4gfTtcXG4gXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BoeS9tZWRpYXRlay9tdGstZ2Utc29jLmggYi9kcml2ZXJzL25ldC9waHkvbWVkaWF0ZWsvbXRrLWdlLXNvYy5oXFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcXG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uNWU5ZDI0YTk4MzNjNzdcXG4tLS0gL2Rldi9udWxsXFxuKysrIGIvZHJpdmVycy9uZXQvcGh5L21lZGlhdGVrL210ay1nZS1zb2MuaFxcbkBAIC0wLDAgKzEsMzY0IEBAXFxuKy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wICovXFxuK1xcbisjaWZuZGVmIF9NVEtfR0VfU09DX0hfXFxuKyNkZWZpbmUgX01US19HRV9TT0NfSF9cXG4rXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9iaXRmaWVsZC5oXFx1MDAzZVxcbitcXG4rI2RlZmluZSBNVEtfR1BIWV9JRF9NVDc5ODFcXHRcXHRcXHQweDAzYTI5NDYxXFxuKyNkZWZpbmUgTVRLX0dQSFlfSURfTVQ3OTg4XFx0XFx0XFx0MHgwM2EyOTQ4MVxcbisjZGVmaW5lIEFJUk9IQV9HUEhZX0lEX0FONzU4MVxcdFxcdFxcdDB4MDNhMjk0YzFcXG4rI2RlZmluZSBBSVJPSEFfR1BIWV9JRF9BTjc1ODNcXHRcXHRcXHQweGMwZmYwNDIwXFxuK1xcbisjZGVmaW5lIE1US19FWFRfUEFHRV9BQ0NFU1NcXHRcXHRcXHQweDFmXFxuKyNkZWZpbmUgTVRLX1BIWV9QQUdFX1NUQU5EQVJEXFx0XFx0XFx0MHgwMDAwXFxuKyNkZWZpbmUgTVRLX1BIWV9QQUdFX0VYVEVOREVEXzFcXHRcXHRcXHQweDAwMDFcXG4rI2RlZmluZSBNVEtfUEhZX1BBR0VfRVhURU5ERURfM1xcdFxcdFxcdDB4MDAwM1xcbitcXG4rI2RlZmluZSBNVEtfUEhZX0xQSV9SRUdfMTRcXHRcXHRcXHQweDE0XFxuKyNkZWZpbmUgTVRLX1BIWV9MUElfV0FLRV9USU1FUl8xMDAwX01BU0tcXHRHRU5NQVNLKDgsIDApXFxuK1xcbisjZGVmaW5lIE1US19QSFlfTFBJX1JFR18xY1xcdFxcdFxcdDB4MWNcXG4rI2RlZmluZSBNVEtfUEhZX1NNSV9ERVRfT05fVEhSRVNIX01BU0tcXHRcXHRHRU5NQVNLKDEzLCA4KVxcbitcXG4rI2RlZmluZSBNVEtfUEhZX1BBR0VfRVhURU5ERURfMkEzMFxcdFxcdDB4MmEzMFxcbitcXG4rLyogUmVnaXN0ZXJzIG9uIFRva2VuIFJpbmcgZGVidWcgbm9kZXMgKi9cXG4rLyogY2hfYWRkciA9IDB4MCwgbm9kZV9hZGRyID0gMHg3LCBkYXRhX2FkZHIgPSAweDE1ICovXFxuKy8qIE5vcm1Nc2VMb1RocmVzaCAqL1xcbisjZGVmaW5lIE5PUk1BTF9NU0VfTE9fVEhSRVNIX01BU0tcXHRcXHRHRU5NQVNLKDE1LCA4KVxcbitcXG4rLyogY2hfYWRkciA9IDB4MCwgbm9kZV9hZGRyID0gMHhmLCBkYXRhX2FkZHIgPSAweDNjICovXFxuKy8qIFJlbUFja0NudExpbWl0Q3RybCAqL1xcbisjZGVmaW5lIFJFTU9URV9BQ0tfQ09VTlRfTElNSVRfQ1RSTF9NQVNLXFx0R0VOTUFTSygyLCAxKVxcbitcXG4rLyogY2hfYWRkciA9IDB4MSwgbm9kZV9hZGRyID0gMHhkLCBkYXRhX2FkZHIgPSAweDIwICovXFxuKy8qIFZjb1NsaWNlclRocmVzaEJpdHNIaWdoICovXFxuKyNkZWZpbmUgVkNPX1NMSUNFUl9USFJFU0hfSElHSF9NQVNLXFx0XFx0R0VOTUFTSygyMywgMClcXG4rXFxuKy8qIGNoX2FkZHIgPSAweDEsIG5vZGVfYWRkciA9IDB4ZiwgZGF0YV9hZGRyID0gMHgwICovXFxuKy8qIERmZVRhaWxFbmFibGVWZ2FUaHJlc2gxMDAwICovXFxuKyNkZWZpbmUgREZFX1RBSUxfRUFOQkxFX1ZHQV9UUkhFU0hfMTAwMFxcdFxcdEdFTk1BU0soNSwgMSlcXG4rXFxuKy8qIGNoX2FkZHIgPSAweDEsIG5vZGVfYWRkciA9IDB4ZiwgZGF0YV9hZGRyID0gMHgxICovXFxuKy8qIE1ydmxUckZpeDEwMEtwICovXFxuKyNkZWZpbmUgTVJWTF9UUl9GSVhfMTAwS1BfTUFTS1xcdFxcdFxcdEdFTk1BU0soMjIsIDIwKVxcbisvKiBNcnZsVHJGaXgxMDBLZiAqL1xcbisjZGVmaW5lIE1SVkxfVFJfRklYXzEwMEtGX01BU0tcXHRcXHRcXHRHRU5NQVNLKDE5LCAxNylcXG4rLyogTXJ2bFRyRml4MTAwMEtwICovXFxuKyNkZWZpbmUgTVJWTF9UUl9GSVhfMTAwMEtQX01BU0tcXHRcXHRcXHRHRU5NQVNLKDE2LCAxNClcXG4rLyogTXJ2bFRyRml4MTAwMEtmICovXFxuKyNkZWZpbmUgTVJWTF9UUl9GSVhfMTAwMEtGX01BU0tcXHRcXHRcXHRHRU5NQVNLKDEzLCAxMSlcXG4rXFxuKy8qIGNoX2FkZHIgPSAweDEsIG5vZGVfYWRkciA9IDB4ZiwgZGF0YV9hZGRyID0gMHgxMiAqL1xcbisvKiBWZ2FEZWNSYXRlICovXFxuKyNkZWZpbmUgVkdBX0RFQ0lNQVRJT05fUkFURV9NQVNLXFx0XFx0R0VOTUFTSyg4LCA1KVxcbitcXG4rLyogY2hfYWRkciA9IDB4MSwgbm9kZV9hZGRyID0gMHhmLCBkYXRhX2FkZHIgPSAweDE3ICovXFxuKy8qIFNsdkRTUHJlYWR5VGltZSAqL1xcbisjZGVmaW5lIFNMQVZFX0RTUF9SRUFEWV9USU1FX01BU0tcXHRcXHRHRU5NQVNLKDIyLCAxNSlcXG4rLyogTWFzRFNQcmVhZHlUaW1lICovXFxuKyNkZWZpbmUgTUFTVEVSX0RTUF9SRUFEWV9USU1FX01BU0tcXHRcXHRHRU5NQVNLKDE0LCA3KVxcbitcXG4rLyogY2hfYWRkciA9IDB4MSwgbm9kZV9hZGRyID0gMHhmLCBkYXRhX2FkZHIgPSAweDE4ICovXFxuKy8qIEVuYWJSYW5kVXBkVHJpZyAqL1xcbisjZGVmaW5lIEVOQUJMRV9SQU5ET01fVVBET1dOX0NPVU5URVJfVFJJR0dFUlxcdEJJVCg4KVxcbitcXG4rLyogY2hfYWRkciA9IDB4MSwgbm9kZV9hZGRyID0gMHhmLCBkYXRhX2FkZHIgPSAweDIwICovXFxuKy8qIFJlc2V0U3luY09mZnNldCAqL1xcbisjZGVmaW5lIFJFU0VUX1NZTkNfT0ZGU0VUX01BU0tcXHRcXHRcXHRHRU5NQVNLKDExLCA4KVxcbitcXG4rLyogY2hfYWRkciA9IDB4Miwgbm9kZV9hZGRyID0gMHhkLCBkYXRhX2FkZHIgPSAweDAgKi9cXG4rLyogRmZlVXBkR2FpbkZvcmNlVmFsICovXFxuKyNkZWZpbmUgRkZFX1VQREFURV9HQUlOX0ZPUkNFX1ZBTF9NQVNLXFx0XFx0R0VOTUFTSyg5LCA3KVxcbisvKiBGZmVVcGRHYWluRm9yY2UgKi9cXG4rI2RlZmluZSBGRkVfVVBEQVRFX0dBSU5fRk9SQ0VcXHRcXHRcXHRCSVQoNilcXG4rXFxuKy8qIGNoX2FkZHIgPSAweDIsIG5vZGVfYWRkciA9IDB4ZCwgZGF0YV9hZGRyID0gMHgzICovXFxuKy8qIFRyRnJlZXplICovXFxuKyNkZWZpbmUgVFJfRlJFRVpFX01BU0tcXHRcXHRcXHRcXHRHRU5NQVNLKDExLCAwKVxcbitcXG4rLyogY2hfYWRkciA9IDB4Miwgbm9kZV9hZGRyID0gMHhkLCBkYXRhX2FkZHIgPSAweDYgKi9cXG4rLyogU1M6IFN0ZWFkeS1zdGF0ZSwgS1A6IFByb3BvcnRpb25hbCBHYWluICovXFxuKy8qIFNTVHJLcDEwMCAqL1xcbisjZGVmaW5lIFNTX1RSX0tQMTAwX01BU0tcXHRcXHRcXHRHRU5NQVNLKDIxLCAxOSlcXG4rLyogU1NUcktmMTAwICovXFxuKyNkZWZpbmUgU1NfVFJfS0YxMDBfTUFTS1xcdFxcdFxcdEdFTk1BU0soMTgsIDE2KVxcbisvKiBTU1RyS3AxMDAwTWFzICovXFxuKyNkZWZpbmUgU1NfVFJfS1AxMDAwX01BU1RFUl9NQVNLXFx0XFx0R0VOTUFTSygxNSwgMTMpXFxuKy8qIFNTVHJLZjEwMDBNYXMgKi9cXG4rI2RlZmluZSBTU19UUl9LRjEwMDBfTUFTVEVSX01BU0tcXHRcXHRHRU5NQVNLKDEyLCAxMClcXG4rLyogU1NUcktwMTAwMFNsdiAqL1xcbisjZGVmaW5lIFNTX1RSX0tQMTAwMF9TTEFWRV9NQVNLXFx0XFx0XFx0R0VOTUFTSyg5LCA3KVxcbisvKiBTU1RyS2YxMDAwU2x2ICovXFxuKyNkZWZpbmUgU1NfVFJfS0YxMDAwX1NMQVZFX01BU0tcXHRcXHRcXHRHRU5NQVNLKDYsIDQpXFxuK1xcbisvKiBjaF9hZGRyID0gMHgyLCBub2RlX2FkZHIgPSAweGQsIGRhdGFfYWRkciA9IDB4OCAqL1xcbisvKiBjbGVhciB0aGlzIGJpdCBpZiB3YW5uYSBzZWxlY3QgZnJvbSBBRkUgKi9cXG4rLyogUmVnc2lnZGV0X3NlbF8xMDAwICovXFxuKyNkZWZpbmUgRUVFMTAwMF9TRUxFQ1RfU0lHTkFMX0RFVEVDVElPTl9GUk9NX0RGRVxcdEJJVCg0KVxcbitcXG4rLyogY2hfYWRkciA9IDB4Miwgbm9kZV9hZGRyID0gMHhkLCBkYXRhX2FkZHIgPSAweGQgKi9cXG4rLyogUmVnRUVFX3N0MlRyS2YxMDAwICovXFxuKyNkZWZpbmUgRUVFMTAwMF9TVEFHRTJfVFJfS0ZfTUFTS1xcdFxcdEdFTk1BU0soMTMsIDExKVxcbitcXG4rLyogY2hfYWRkciA9IDB4Miwgbm9kZV9hZGRyID0gMHhkLCBkYXRhX2FkZHIgPSAweGYgKi9cXG4rLyogUmVnRUVFX3Nsdl93YWtldHJfdGltZXJfdGFyICovXFxuKyNkZWZpbmUgU0xBVkVfV0FLRVRSX1RJTUVSX01BU0tcXHRcXHRcXHRHRU5NQVNLKDIwLCAxMSlcXG4rLyogUmVnRUVFX3Nsdl9yZW10eF90aW1lcl90YXIgKi9cXG4rI2RlZmluZSBTTEFWRV9SRU1UWF9USU1FUl9NQVNLXFx0XFx0XFx0R0VOTUFTSygxMCwgMSlcXG4rXFxuKy8qIGNoX2FkZHIgPSAweDIsIG5vZGVfYWRkciA9IDB4ZCwgZGF0YV9hZGRyID0gMHgxMCAqL1xcbisvKiBSZWdFRUVfc2x2X3dha2VfaW50X3RpbWVyX3RhciAqL1xcbisjZGVmaW5lIFNMQVZFX1dBS0VJTlRfVElNRVJfTUFTS1xcdFxcdEdFTk1BU0soMTAsIDEpXFxuK1xcbisvKiBjaF9hZGRyID0gMHgyLCBub2RlX2FkZHIgPSAweGQsIGRhdGFfYWRkciA9IDB4MTQgKi9cXG4rLyogUmVnRUVFX3RyZnJlZXplX3RpbWVyMiAqL1xcbisjZGVmaW5lIFRSX0ZSRUVaRV9USU1FUjJfTUFTS1xcdFxcdFxcdEdFTk1BU0soOSwgMClcXG4rXFxuKy8qIGNoX2FkZHIgPSAweDIsIG5vZGVfYWRkciA9IDB4ZCwgZGF0YV9hZGRyID0gMHgxYyAqL1xcbisvKiBSZWdFRUUxMDBTdGcxX3RhciAqL1xcbisjZGVmaW5lIEVFRTEwMF9MUFNZTkNfU1RBR0UxX1VQREFURV9USU1FUl9NQVNLXFx0R0VOTUFTSyg4LCAwKVxcbitcXG4rLyogY2hfYWRkciA9IDB4Miwgbm9kZV9hZGRyID0gMHhkLCBkYXRhX2FkZHIgPSAweDI1ICovXFxuKy8qIFJFR0VFRV93YWtlX3Nsdl90cl93YWl0X2RmZXNpZ2RldF9lbiAqL1xcbisjZGVmaW5lIFdBS0VfU0xBVkVfVFJfV0FJVF9ERkVfREVURUNUSU9OX0VOXFx0QklUKDExKVxcbitcXG4rI2RlZmluZSBBTkFMT0dfSU5URVJOQUxfT1BFUkFUSU9OX01BWF9VU1xcdDIwXFxuKyNkZWZpbmUgVFhSRVNFUlZFX01JTlxcdFxcdFxcdFxcdDBcXG4rI2RlZmluZSBUWFJFU0VSVkVfTUFYXFx0XFx0XFx0XFx0N1xcbitcXG4rI2RlZmluZSBNVEtfUEhZX0FOQVJHX1JHXFx0XFx0XFx0MHgxMFxcbisjZGVmaW5lICAgTVRLX1BIWV9UQ0xLT0ZGU0VUX01BU0tcXHRcXHRHRU5NQVNLKDEyLCA4KVxcbitcXG4rLyogUmVnaXN0ZXJzIG9uIE1ESU9fTU1EX1ZFTkQxICovXFxuKyNkZWZpbmUgTVRLX1BIWV9UWFZMRF9EQV9SR1xcdFxcdFxcdDB4MTJcXG4rI2RlZmluZSAgIE1US19QSFlfREFfVFhfSTJNUEJfQV9HQkVfTUFTS1xcdEdFTk1BU0soMTUsIDEwKVxcbisjZGVmaW5lICAgTVRLX1BIWV9EQV9UWF9JMk1QQl9BX1RCVF9NQVNLXFx0R0VOTUFTSyg1LCAwKVxcbitcXG4rI2RlZmluZSBNVEtfUEhZX1RYX0kyTVBCX1RFU1RfTU9ERV9BMlxcdFxcdDB4MTZcXG4rI2RlZmluZSAgIE1US19QSFlfREFfVFhfSTJNUEJfQV9IQlRfTUFTS1xcdEdFTk1BU0soMTUsIDEwKVxcbisjZGVmaW5lICAgTVRLX1BIWV9EQV9UWF9JMk1QQl9BX1RTVF9NQVNLXFx0R0VOTUFTSyg1LCAwKVxcbitcXG4rI2RlZmluZSBNVEtfUEhZX1RYX0kyTVBCX1RFU1RfTU9ERV9CMVxcdFxcdDB4MTdcXG4rI2RlZmluZSAgIE1US19QSFlfREFfVFhfSTJNUEJfQl9HQkVfTUFTS1xcdEdFTk1BU0soMTMsIDgpXFxuKyNkZWZpbmUgICBNVEtfUEhZX0RBX1RYX0kyTVBCX0JfVEJUX01BU0tcXHRHRU5NQVNLKDUsIDApXFxuK1xcbisjZGVmaW5lIE1US19QSFlfVFhfSTJNUEJfVEVTVF9NT0RFX0IyXFx0XFx0MHgxOFxcbisjZGVmaW5lICAgTVRLX1BIWV9EQV9UWF9JMk1QQl9CX0hCVF9NQVNLXFx0R0VOTUFTSygxMywgOClcXG4rI2RlZmluZSAgIE1US19QSFlfREFfVFhfSTJNUEJfQl9UU1RfTUFTS1xcdEdFTk1BU0soNSwgMClcXG4rXFxuKyNkZWZpbmUgTVRLX1BIWV9UWF9JMk1QQl9URVNUX01PREVfQzFcXHRcXHQweDE5XFxuKyNkZWZpbmUgICBNVEtfUEhZX0RBX1RYX0kyTVBCX0NfR0JFX01BU0tcXHRHRU5NQVNLKDEzLCA4KVxcbisjZGVmaW5lICAgTVRLX1BIWV9EQV9UWF9JMk1QQl9DX1RCVF9NQVNLXFx0R0VOTUFTSyg1LCAwKVxcbitcXG4rI2RlZmluZSBNVEtfUEhZX1RYX0kyTVBCX1RFU1RfTU9ERV9DMlxcdFxcdDB4MjBcXG4rI2RlZmluZSAgIE1US19QSFlfREFfVFhfSTJNUEJfQ19IQlRfTUFTS1xcdEdFTk1BU0soMTMsIDgpXFxuKyNkZWZpbmUgICBNVEtfUEhZX0RBX1RYX0kyTVBCX0NfVFNUX01BU0tcXHRHRU5NQVNLKDUsIDApXFxuK1xcbisjZGVmaW5lIE1US19QSFlfVFhfSTJNUEJfVEVTVF9NT0RFX0QxXFx0XFx0MHgyMVxcbisjZGVmaW5lICAgTVRLX1BIWV9EQV9UWF9JMk1QQl9EX0dCRV9NQVNLXFx0R0VOTUFTSygxMywgOClcXG4rI2RlZmluZSAgIE1US19QSFlfREFfVFhfSTJNUEJfRF9UQlRfTUFTS1xcdEdFTk1BU0soNSwgMClcXG4rXFxuKyNkZWZpbmUgTVRLX1BIWV9UWF9JMk1QQl9URVNUX01PREVfRDJcXHRcXHQweDIyXFxuKyNkZWZpbmUgICBNVEtfUEhZX0RBX1RYX0kyTVBCX0RfSEJUX01BU0tcXHRHRU5NQVNLKDEzLCA4KVxcbisjZGVmaW5lICAgTVRLX1BIWV9EQV9UWF9JMk1QQl9EX1RTVF9NQVNLXFx0R0VOTUFTSyg1LCAwKVxcbitcXG4rI2RlZmluZSBNVEtfUEhZX1JYQURDX0NUUkxfUkc3XFx0XFx0XFx0MHhjNlxcbisjZGVmaW5lICAgTVRLX1BIWV9EQV9BRF9CVUZfQklBU19MUF9NQVNLXFx0R0VOTUFTSyg5LCA4KVxcbitcXG4rI2RlZmluZSBNVEtfUEhZX1JYQURDX0NUUkxfUkc5XFx0XFx0XFx0MHhjOFxcbisjZGVmaW5lICAgTVRLX1BIWV9EQV9SWF9QU0JOX1RCVF9NQVNLXFx0XFx0R0VOTUFTSygxNCwgMTIpXFxuKyNkZWZpbmUgICBNVEtfUEhZX0RBX1JYX1BTQk5fSEJUX01BU0tcXHRcXHRHRU5NQVNLKDEwLCA4KVxcbisjZGVmaW5lICAgTVRLX1BIWV9EQV9SWF9QU0JOX0dCRV9NQVNLXFx0XFx0R0VOTUFTSyg2LCA0KVxcbisjZGVmaW5lICAgTVRLX1BIWV9EQV9SWF9QU0JOX0xQX01BU0tcXHRcXHRHRU5NQVNLKDIsIDApXFxuK1xcbisjZGVmaW5lIE1US19QSFlfTERPX09VVFBVVF9WXFx0XFx0XFx0MHhkN1xcbitcXG4rI2RlZmluZSBNVEtfUEhZX1JHX0FOQV9DQUxfUkcwXFx0XFx0XFx0MHhkYlxcbisjZGVmaW5lICAgTVRLX1BIWV9SR19DQUxfQ0tJTlZcXHRcXHRcXHRCSVQoMTIpXFxuKyNkZWZpbmUgICBNVEtfUEhZX1JHX0FOQV9DQUxFTlxcdFxcdFxcdEJJVCg4KVxcbisjZGVmaW5lICAgTVRLX1BIWV9SR19SRVhUX0NBTEVOXFx0XFx0XFx0QklUKDQpXFxuKyNkZWZpbmUgICBNVEtfUEhZX1JHX1pDQUxFTl9BXFx0XFx0XFx0QklUKDApXFxuK1xcbisjZGVmaW5lIE1US19QSFlfUkdfQU5BX0NBTF9SRzFcXHRcXHRcXHQweGRjXFxuKyNkZWZpbmUgICBNVEtfUEhZX1JHX1pDQUxFTl9CXFx0XFx0XFx0QklUKDEyKVxcbisjZGVmaW5lICAgTVRLX1BIWV9SR19aQ0FMRU5fQ1xcdFxcdFxcdEJJVCg4KVxcbisjZGVmaW5lICAgTVRLX1BIWV9SR19aQ0FMRU5fRFxcdFxcdFxcdEJJVCg0KVxcbisjZGVmaW5lICAgTVRLX1BIWV9SR19UWFZPU19DQUxFTlxcdFxcdEJJVCgwKVxcbitcXG4rI2RlZmluZSBNVEtfUEhZX1JHX0FOQV9DQUxfUkc1XFx0XFx0XFx0MHhlMFxcbisjZGVmaW5lICAgTVRLX1BIWV9SR19SRVhUX1RSSU1fTUFTS1xcdFxcdEdFTk1BU0soMTMsIDgpXFxuKyNkZWZpbmUgICBNVEtfUEhZX1JHX1JFWFRfWkNBTF9DVFJMX01BU0tcXHRHRU5NQVNLKDUsIDApXFxuK1xcbisjZGVmaW5lIE1US19QSFlfUkdfQU5BX0NBTF9SRzZcXHRcXHRcXHQweGUxXFxuK1xcbisjZGVmaW5lIE1US19QSFlfUkdfVFhfRklMVEVSXFx0XFx0XFx0MHhmZVxcbitcXG4rI2RlZmluZSBNVEtfUEhZX1JHX0xQSV9QQ1NfRFNQX0NUUkxfUkVHMTIwXFx0MHgxMjBcXG4rI2RlZmluZSAgIE1US19QSFlfTFBJX1NJR19FTl9MT19USFJFU0gxMDAwX01BU0tcXHRHRU5NQVNLKDEyLCA4KVxcbisjZGVmaW5lICAgTVRLX1BIWV9MUElfU0lHX0VOX0hJX1RIUkVTSDEwMDBfTUFTS1xcdEdFTk1BU0soNCwgMClcXG4rXFxuKyNkZWZpbmUgTVRLX1BIWV9SR19MUElfUENTX0RTUF9DVFJMX1JFRzEyMlxcdDB4MTIyXFxuKyNkZWZpbmUgICBNVEtfUEhZX0xQSV9OT1JNX01TRV9ISV9USFJFU0gxMDAwX01BU0tcXHRHRU5NQVNLKDcsIDApXFxuK1xcbisjZGVmaW5lIE1US19QSFlfUkdfVEVTVE1VWF9BRENfQ1RSTFxcdFxcdDB4MTQ0XFxuKyNkZWZpbmUgICBNVEtfUEhZX1JHX1RYRU5fRElHX01BU0tcXHRcXHRHRU5NQVNLKDUsIDUpXFxuK1xcbisjZGVmaW5lIE1US19QSFlfUkdfQ1JfVFhfQU1QX09GRlNFVF9BX0JcXHRcXHQweDE3MlxcbisjZGVmaW5lICAgTVRLX1BIWV9DUl9UWF9BTVBfT0ZGU0VUX0FfTUFTS1xcdEdFTk1BU0soMTMsIDgpXFxuKyNkZWZpbmUgICBNVEtfUEhZX0NSX1RYX0FNUF9PRkZTRVRfQl9NQVNLXFx0R0VOTUFTSyg2LCAwKVxcbitcXG4rI2RlZmluZSBNVEtfUEhZX1JHX0NSX1RYX0FNUF9PRkZTRVRfQ19EXFx0XFx0MHgxNzNcXG4rI2RlZmluZSAgIE1US19QSFlfQ1JfVFhfQU1QX09GRlNFVF9DX01BU0tcXHRHRU5NQVNLKDEzLCA4KVxcbisjZGVmaW5lICAgTVRLX1BIWV9DUl9UWF9BTVBfT0ZGU0VUX0RfTUFTS1xcdEdFTk1BU0soNiwgMClcXG4rXFxuKyNkZWZpbmUgTVRLX1BIWV9SR19DUl9UWF9SNTBfT0ZGU0VUX0FfQlxcdFxcdDB4MTc0XFxuKyNkZWZpbmUgICBNVEtfUEhZX0NSX1RYX1I1MF9PRkZTRVRfQV9NQVNLXFx0R0VOTUFTSygxMywgOClcXG4rI2RlZmluZSAgIE1US19QSFlfQ1JfVFhfUjUwX09GRlNFVF9CX01BU0tcXHRHRU5NQVNLKDYsIDApXFxuK1xcbisjZGVmaW5lIE1US19QSFlfUkdfQ1JfVFhfUjUwX09GRlNFVF9DX0RcXHRcXHQweDE3NVxcbisjZGVmaW5lICAgTVRLX1BIWV9DUl9UWF9SNTBfT0ZGU0VUX0NfTUFTS1xcdEdFTk1BU0soMTMsIDgpXFxuKyNkZWZpbmUgICBNVEtfUEhZX0NSX1RYX1I1MF9PRkZTRVRfRF9NQVNLXFx0R0VOTUFTSyg2LCAwKVxcbitcXG4rI2RlZmluZSBNVEtfUEhZX1JHX0FEX0NBTF9DT01QXFx0XFx0XFx0MHgxN2FcXG4rI2RlZmluZSAgIE1US19QSFlfQURfQ0FMX0NPTVBfT1VUX01BU0tcXHRcXHRHRU5NQVNLKDgsIDgpXFxuK1xcbisjZGVmaW5lIE1US19QSFlfUkdfQURfQ0FMX0NMS1xcdFxcdFxcdDB4MTdiXFxuKyNkZWZpbmUgICBNVEtfUEhZX0RBX0NBTF9DTEtcXHRcXHRcXHRCSVQoMClcXG4rXFxuKyNkZWZpbmUgTVRLX1BIWV9SR19BRF9DQUxJTlxcdFxcdFxcdDB4MTdjXFxuKyNkZWZpbmUgICBNVEtfUEhZX0RBX0NBTElOX0ZMQUdcXHRcXHRcXHRCSVQoMClcXG4rXFxuKyNkZWZpbmUgTVRLX1BIWV9SR19EQVNOX0RBQ19JTjBfQVxcdFxcdDB4MTdkXFxuKyNkZWZpbmUgICBNVEtfUEhZX0RBU05fREFDX0lOMF9BX01BU0tcXHRcXHRHRU5NQVNLKDksIDApXFxuK1xcbisjZGVmaW5lIE1US19QSFlfUkdfREFTTl9EQUNfSU4wX0JcXHRcXHQweDE3ZVxcbisjZGVmaW5lICAgTVRLX1BIWV9EQVNOX0RBQ19JTjBfQl9NQVNLXFx0XFx0R0VOTUFTSyg5LCAwKVxcbitcXG4rI2RlZmluZSBNVEtfUEhZX1JHX0RBU05fREFDX0lOMF9DXFx0XFx0MHgxN2ZcXG4rI2RlZmluZSAgIE1US19QSFlfREFTTl9EQUNfSU4wX0NfTUFTS1xcdFxcdEdFTk1BU0soOSwgMClcXG4rXFxuKyNkZWZpbmUgTVRLX1BIWV9SR19EQVNOX0RBQ19JTjBfRFxcdFxcdDB4MTgwXFxuKyNkZWZpbmUgICBNVEtfUEhZX0RBU05fREFDX0lOMF9EX01BU0tcXHRcXHRHRU5NQVNLKDksIDApXFxuK1xcbisjZGVmaW5lIE1US19QSFlfUkdfREFTTl9EQUNfSU4xX0FcXHRcXHQweDE4MVxcbisjZGVmaW5lICAgTVRLX1BIWV9EQVNOX0RBQ19JTjFfQV9NQVNLXFx0XFx0R0VOTUFTSyg5LCAwKVxcbitcXG4rI2RlZmluZSBNVEtfUEhZX1JHX0RBU05fREFDX0lOMV9CXFx0XFx0MHgxODJcXG4rI2RlZmluZSAgIE1US19QSFlfREFTTl9EQUNfSU4xX0JfTUFTS1xcdFxcdEdFTk1BU0soOSwgMClcXG4rXFxuKyNkZWZpbmUgTVRLX1BIWV9SR19EQVNOX0RBQ19JTjFfQ1xcdFxcdDB4MTgzXFxuKyNkZWZpbmUgICBNVEtfUEhZX0RBU05fREFDX0lOMV9DX01BU0tcXHRcXHRHRU5NQVNLKDksIDApXFxuK1xcbisjZGVmaW5lIE1US19QSFlfUkdfREFTTl9EQUNfSU4xX0RcXHRcXHQweDE4NFxcbisjZGVmaW5lICAgTVRLX1BIWV9EQVNOX0RBQ19JTjFfRF9NQVNLXFx0XFx0R0VOTUFTSyg5LCAwKVxcbitcXG4rI2RlZmluZSBNVEtfUEhZX1JHX0RFVjFFX1JFRzE5YlxcdFxcdFxcdDB4MTliXFxuKyNkZWZpbmUgICBNVEtfUEhZX0JZUEFTU19EU1BfTFBJX1JFQURZXFx0XFx0QklUKDgpXFxuK1xcbisjZGVmaW5lIE1US19QSFlfUkdfTFBfSUlSMl9LMV9MXFx0XFx0XFx0MHgyMmFcXG4rI2RlZmluZSBNVEtfUEhZX1JHX0xQX0lJUjJfSzFfVVxcdFxcdFxcdDB4MjJiXFxuKyNkZWZpbmUgTVRLX1BIWV9SR19MUF9JSVIyX0syX0xcXHRcXHRcXHQweDIyY1xcbisjZGVmaW5lIE1US19QSFlfUkdfTFBfSUlSMl9LMl9VXFx0XFx0XFx0MHgyMmRcXG4rI2RlZmluZSBNVEtfUEhZX1JHX0xQX0lJUjJfSzNfTFxcdFxcdFxcdDB4MjJlXFxuKyNkZWZpbmUgTVRLX1BIWV9SR19MUF9JSVIyX0szX1VcXHRcXHRcXHQweDIyZlxcbisjZGVmaW5lIE1US19QSFlfUkdfTFBfSUlSMl9LNF9MXFx0XFx0XFx0MHgyMzBcXG4rI2RlZmluZSBNVEtfUEhZX1JHX0xQX0lJUjJfSzRfVVxcdFxcdFxcdDB4MjMxXFxuKyNkZWZpbmUgTVRLX1BIWV9SR19MUF9JSVIyX0s1X0xcXHRcXHRcXHQweDIzMlxcbisjZGVmaW5lIE1US19QSFlfUkdfTFBfSUlSMl9LNV9VXFx0XFx0XFx0MHgyMzNcXG4rXFxuKyNkZWZpbmUgTVRLX1BIWV9SR19ERVYxRV9SRUcyMzRcXHRcXHRcXHQweDIzNFxcbisjZGVmaW5lICAgTVRLX1BIWV9UUl9PUEVOX0xPT1BfRU5fTUFTS1xcdFxcdEdFTk1BU0soMCwgMClcXG4rI2RlZmluZSAgIE1US19QSFlfTFBGX1hfQVZFUkFHRV9NQVNLXFx0XFx0R0VOTUFTSyg3LCA0KVxcbisjZGVmaW5lICAgTVRLX1BIWV9UUl9MUF9JSVJfRUVFX0VOXFx0XFx0QklUKDEyKVxcbitcXG4rI2RlZmluZSBNVEtfUEhZX1JHX0xQRl9DTlRfVkFMXFx0XFx0XFx0MHgyMzVcXG4rXFxuKyNkZWZpbmUgTVRLX1BIWV9SR19ERVYxRV9SRUcyMzhcXHRcXHRcXHQweDIzOFxcbisjZGVmaW5lICAgTVRLX1BIWV9MUElfU0xWX1NFTkRfVFhfVElNRVJfTUFTS1xcdEdFTk1BU0soOCwgMClcXG4rI2RlZmluZSAgIE1US19QSFlfTFBJX1NMVl9TRU5EX1RYX0VOXFx0XFx0QklUKDEyKVxcbitcXG4rI2RlZmluZSBNVEtfUEhZX1JHX0RFVjFFX1JFRzIzOVxcdFxcdFxcdDB4MjM5XFxuKyNkZWZpbmUgICBNVEtfUEhZX0xQSV9TRU5EX0xPQ19USU1FUl9NQVNLXFx0R0VOTUFTSyg4LCAwKVxcbisjZGVmaW5lICAgTVRLX1BIWV9MUElfVFhQQ1NfTE9DX1JDVlxcdFxcdEJJVCgxMilcXG4rXFxuKyNkZWZpbmUgTVRLX1BIWV9SR19ERVYxRV9SRUcyN0NcXHRcXHRcXHQweDI3Y1xcbisjZGVmaW5lICAgTVRLX1BIWV9WR0FTVEFURV9GRkVfVEhSX1NUMV9NQVNLXFx0R0VOTUFTSygxMiwgOClcXG4rI2RlZmluZSBNVEtfUEhZX1JHX0RFVjFFX1JFRzI3RFxcdFxcdFxcdDB4MjdkXFxuKyNkZWZpbmUgICBNVEtfUEhZX1ZHQVNUQVRFX0ZGRV9USFJfU1QyX01BU0tcXHRHRU5NQVNLKDQsIDApXFxuK1xcbisjZGVmaW5lIE1US19QSFlfUkdfREVWMUVfUkVHMkM3XFx0XFx0XFx0MHgyYzdcXG4rI2RlZmluZSAgIE1US19QSFlfTUFYX0dBSU5fTUFTS1xcdFxcdFxcdEdFTk1BU0soNCwgMClcXG4rI2RlZmluZSAgIE1US19QSFlfTUlOX0dBSU5fTUFTS1xcdFxcdFxcdEdFTk1BU0soMTIsIDgpXFxuK1xcbisjZGVmaW5lIE1US19QSFlfUkdfREVWMUVfUkVHMkQxXFx0XFx0XFx0MHgyZDFcXG4rI2RlZmluZSAgIE1US19QSFlfVkNPX1NMSUNFUl9USFJFU0hfQklUU19ISUdIX0VFRV9NQVNLXFx0R0VOTUFTSyg3LCAwKVxcbisjZGVmaW5lICAgTVRLX1BIWV9MUElfU0tJUF9TRF9TTFZfVFJcXHRcXHRCSVQoOClcXG4rI2RlZmluZSAgIE1US19QSFlfTFBJX1RSX1JFQURZXFx0XFx0XFx0QklUKDkpXFxuKyNkZWZpbmUgICBNVEtfUEhZX0xQSV9WQ09fRUVFX1NURzBfRU5cXHRcXHRCSVQoMTApXFxuK1xcbisjZGVmaW5lIE1US19QSFlfUkdfREVWMUVfUkVHMzIzXFx0XFx0XFx0MHgzMjNcXG4rI2RlZmluZSAgIE1US19QSFlfRUVFX1dBS0VfTUFTX0lOVF9EQ1xcdFxcdEJJVCgwKVxcbisjZGVmaW5lICAgTVRLX1BIWV9FRUVfV0FLRV9TTFZfSU5UX0RDXFx0XFx0QklUKDQpXFxuK1xcbisjZGVmaW5lIE1US19QSFlfUkdfREVWMUVfUkVHMzI0XFx0XFx0XFx0MHgzMjRcXG4rI2RlZmluZSAgIE1US19QSFlfU01JX0RFVENOVF9NQVhfTUFTS1xcdFxcdEdFTk1BU0soNSwgMClcXG4rI2RlZmluZSAgIE1US19QSFlfU01JX0RFVF9NQVhfRU5cXHRcXHRCSVQoOClcXG4rXFxuKyNkZWZpbmUgTVRLX1BIWV9SR19ERVYxRV9SRUczMjZcXHRcXHRcXHQweDMyNlxcbisjZGVmaW5lICAgTVRLX1BIWV9MUElfTU9ERV9TRF9PTlxcdFxcdEJJVCgwKVxcbisjZGVmaW5lICAgTVRLX1BIWV9SRVNFVF9SQU5EVVBEX0NOVFxcdFxcdEJJVCgxKVxcbisjZGVmaW5lICAgTVRLX1BIWV9UUkVDX1VQREFURV9FTkFCX0NMUlxcdFxcdEJJVCgyKVxcbisjZGVmaW5lICAgTVRLX1BIWV9MUElfUVVJVF9XQUlUX0RGRV9TSUdfREVUX09GRlxcdEJJVCg0KVxcbisjZGVmaW5lICAgTVRLX1BIWV9UUl9SRUFEWV9TS0lQX0FGRV9XQUtFVVBcXHRCSVQoNSlcXG4rXFxuKyNkZWZpbmUgTVRLX1BIWV9MRE9fUFVNUF9FTl9QQUlSQUJcXHRcXHQweDUwMlxcbisjZGVmaW5lIE1US19QSFlfTERPX1BVTVBfRU5fUEFJUkNEXFx0XFx0MHg1MDNcXG4rXFxuKyNkZWZpbmUgTVRLX1BIWV9EQV9UWF9SNTBfUEFJUl9BXFx0XFx0MHg1M2RcXG4rI2RlZmluZSBNVEtfUEhZX0RBX1RYX1I1MF9QQUlSX0JcXHRcXHQweDUzZVxcbisjZGVmaW5lIE1US19QSFlfREFfVFhfUjUwX1BBSVJfQ1xcdFxcdDB4NTNmXFxuKyNkZWZpbmUgTVRLX1BIWV9EQV9UWF9SNTBfUEFJUl9EXFx0XFx0MHg1NDBcXG4rXFxuKy8qIFJlZ2lzdGVycyBvbiBNRElPX01NRF9WRU5EMiAqL1xcbisjZGVmaW5lIE1US19QSFlfTEVEMV9ERUZBVUxUX1BPTEFSSVRJRVNcXHRcXHRCSVQoMSlcXG4rXFxuKyNkZWZpbmUgTVRLX1BIWV9SR19CR19SQVNFTFxcdFxcdFxcdDB4MTE1XFxuKyNkZWZpbmUgICBNVEtfUEhZX1JHX0JHX1JBU0VMX01BU0tcXHRcXHRHRU5NQVNLKDIsIDApXFxuK1xcbisvKiAnYm9vdHRyYXAnIHJlZ2lzdGVyIHJlZmxlY3RpbmcgdGhlIGNvbmZpZ3VyYXRpb24gb2YgdGhlIDQgUEhZIExFRHMgKi9cXG4rI2RlZmluZSBSR19HUElPX01JU0NfVFBCQU5LMFxcdFxcdFxcdDB4NmYwXFxuKyNkZWZpbmUgICBSR19HUElPX01JU0NfVFBCQU5LMF9CT09UTU9ERVxcdFxcdEdFTk1BU0soMTEsIDgpXFxuK1xcbitlbnVtIENBTF9JVEVNIHtcXG4rXFx0UkVYVCxcXG4rXFx0VFhfT0ZGU0VULFxcbitcXHRUWF9BTVAsXFxuK1xcdFRYX1I1MCxcXG4rXFx0VFhfVkNNLFxcbitcXHRSWF9PRkZTRVQsXFxuK307XFxuK1xcbitlbnVtIHtcXG4rXFx0Tk9fUEFJUixcXG4rXFx0UEFJUl9BLFxcbitcXHRQQUlSX0IsXFxuK1xcdFBBSVJfQyxcXG4rXFx0UEFJUl9ELFxcbit9O1xcbitcXG4rZW51bSBjYWxpYnJhdGlvbl9tb2RlIHtcXG4rXFx0RUZVU0VfSyxcXG4rXFx0U1dfS1xcbit9O1xcbitcXG4rZW51bSBDQUxfTU9ERSB7XFxuK1xcdEVGVVNFX00sXFxuK1xcdFNXX01cXG4rfTtcXG4rXFxuKy8qIE1USyBHRSBTb0MgY29tbW9uIGZ1bmN0aW9ucyAqL1xcbitpbnQgbXRrX2NhbF9jeWNsZV93YWl0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpO1xcbitcXG4rI2VuZGlmIC8qIF9NVEtfR0VfU09DX0hfICovXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BoeS9tZWRpYXRlay9tdGstcGh5LWxpYi5jIGIvZHJpdmVycy9uZXQvcGh5L21lZGlhdGVrL210ay1waHktbGliLmNcXG5pbmRleCBkZmQwZjRlNDM5YTIxNC4uOGMyYjI2ZjliODQwM2IgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvcGh5L21lZGlhdGVrL210ay1waHktbGliLmNcXG4rKysgYi9kcml2ZXJzL25ldC9waHkvbWVkaWF0ZWsvbXRrLXBoeS1saWIuY1xcbkBAIC0zNiw4ICszNiw4IEBAIHN0YXRpYyB2b2lkIF9fbXRrX3RyX3JlYWQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgdTggY2hfYWRkciwgdTggbm9kZV9hZGRyLFxcbiBcXHRcXHQqdHJfaGlnaCwgKnRyX2xvdyk7XFxuIH1cXG4gXFxuLXN0YXRpYyB2b2lkIF9fbXRrX3RyX3dyaXRlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIHU4IGNoX2FkZHIsIHU4IG5vZGVfYWRkcixcXG4tXFx0XFx0XFx0ICAgdTggZGF0YV9hZGRyLCB1MzIgdHJfZGF0YSlcXG4rdm9pZCBfX210a190cl93cml0ZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCB1OCBjaF9hZGRyLCB1OCBub2RlX2FkZHIsXFxuK1xcdFxcdCAgICB1OCBkYXRhX2FkZHIsIHUzMiB0cl9kYXRhKVxcbiB7XFxuIFxcdF9fcGh5X3dyaXRlKHBoeWRldiwgMHgxMSwgdHJfZGF0YSBcXHUwMDI2IDB4ZmZmZik7XFxuIFxcdF9fcGh5X3dyaXRlKHBoeWRldiwgMHgxMiwgdHJfZGF0YSBcXHUwMDNlXFx1MDAzZSAxNik7XFxuQEAgLTQ1LDYgKzQ1LDcgQEAgc3RhdGljIHZvaWQgX19tdGtfdHJfd3JpdGUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgdTggY2hfYWRkciwgdTggbm9kZV9hZGRyLFxcbiBcXHRcXHR0cl9kYXRhIFxcdTAwM2VcXHUwMDNlIDE2LCB0cl9kYXRhIFxcdTAwMjYgMHhmZmZmKTtcXG4gXFx0X19tdGtfdHJfYWNjZXNzKHBoeWRldiwgZmFsc2UsIGNoX2FkZHIsIG5vZGVfYWRkciwgZGF0YV9hZGRyKTtcXG4gfVxcbitFWFBPUlRfU1lNQk9MX0dQTChfX210a190cl93cml0ZSk7XFxuIFxcbiB2b2lkIF9fbXRrX3RyX21vZGlmeShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCB1OCBjaF9hZGRyLCB1OCBub2RlX2FkZHIsXFxuIFxcdFxcdCAgICAgdTggZGF0YV9hZGRyLCB1MzIgbWFzaywgdTMyIHNldClcXG5AQCAtMzQxLDYgKzM0Miw3OCBAQCB2b2lkIG10a19waHlfbGVkc19zdGF0ZV9pbml0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuIH1cXG4gRVhQT1JUX1NZTUJPTF9HUEwobXRrX3BoeV9sZWRzX3N0YXRlX2luaXQpO1xcbiBcXG4raW50IG10Nzk4eF9waHlfbGVkX2JsaW5rX3NldChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCB1OCBpbmRleCxcXG4rXFx0XFx0XFx0ICAgICB1bnNpZ25lZCBsb25nICpkZWxheV9vbixcXG4rXFx0XFx0XFx0ICAgICB1bnNpZ25lZCBsb25nICpkZWxheV9vZmYpXFxuK3tcXG4rXFx0Ym9vbCBibGlua2luZyA9IGZhbHNlO1xcbitcXHRpbnQgZXJyO1xcbitcXG4rXFx0ZXJyID0gbXRrX3BoeV9sZWRfbnVtX2RseV9jZmcoaW5kZXgsIGRlbGF5X29uLCBkZWxheV9vZmYsIFxcdTAwMjZibGlua2luZyk7XFxuK1xcdGlmIChlcnIgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm4gZXJyO1xcbitcXG4rXFx0ZXJyID0gbXRrX3BoeV9od19sZWRfYmxpbmtfc2V0KHBoeWRldiwgaW5kZXgsIGJsaW5raW5nKTtcXG4rXFx0aWYgKGVycilcXG4rXFx0XFx0cmV0dXJuIGVycjtcXG4rXFxuK1xcdHJldHVybiBtdGtfcGh5X2h3X2xlZF9vbl9zZXQocGh5ZGV2LCBpbmRleCwgTVRLX0dQSFlfTEVEX09OX01BU0ssXFxuK1xcdFxcdFxcdFxcdCAgICAgZmFsc2UpO1xcbit9XFxuK0VYUE9SVF9TWU1CT0xfR1BMKG10Nzk4eF9waHlfbGVkX2JsaW5rX3NldCk7XFxuK1xcbitpbnQgbXQ3OTh4X3BoeV9sZWRfYnJpZ2h0bmVzc19zZXQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldixcXG4rXFx0XFx0XFx0XFx0ICB1OCBpbmRleCwgZW51bSBsZWRfYnJpZ2h0bmVzcyB2YWx1ZSlcXG4re1xcbitcXHRpbnQgZXJyO1xcbitcXG4rXFx0ZXJyID0gbXRrX3BoeV9od19sZWRfYmxpbmtfc2V0KHBoeWRldiwgaW5kZXgsIGZhbHNlKTtcXG4rXFx0aWYgKGVycilcXG4rXFx0XFx0cmV0dXJuIGVycjtcXG4rXFxuK1xcdHJldHVybiBtdGtfcGh5X2h3X2xlZF9vbl9zZXQocGh5ZGV2LCBpbmRleCwgTVRLX0dQSFlfTEVEX09OX01BU0ssXFxuK1xcdFxcdFxcdFxcdCAgICAgKHZhbHVlICE9IExFRF9PRkYpKTtcXG4rfVxcbitFWFBPUlRfU1lNQk9MX0dQTChtdDc5OHhfcGh5X2xlZF9icmlnaHRuZXNzX3NldCk7XFxuK1xcbitzdGF0aWMgY29uc3QgdW5zaWduZWQgbG9uZyBzdXBwb3J0ZWRfdHJpZ2dlcnMgPVxcbitcXHRCSVQoVFJJR0dFUl9ORVRERVZfRlVMTF9EVVBMRVgpIHxcXG4rXFx0QklUKFRSSUdHRVJfTkVUREVWX0hBTEZfRFVQTEVYKSB8XFxuK1xcdEJJVChUUklHR0VSX05FVERFVl9MSU5LKSAgICAgICAgfFxcbitcXHRCSVQoVFJJR0dFUl9ORVRERVZfTElOS18xMCkgICAgIHxcXG4rXFx0QklUKFRSSUdHRVJfTkVUREVWX0xJTktfMTAwKSAgICB8XFxuK1xcdEJJVChUUklHR0VSX05FVERFVl9MSU5LXzEwMDApICAgfFxcbitcXHRCSVQoVFJJR0dFUl9ORVRERVZfUlgpICAgICAgICAgIHxcXG4rXFx0QklUKFRSSUdHRVJfTkVUREVWX1RYKTtcXG4rXFxuK2ludCBtdDc5OHhfcGh5X2xlZF9od19pc19zdXBwb3J0ZWQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgdTggaW5kZXgsXFxuK1xcdFxcdFxcdFxcdCAgIHVuc2lnbmVkIGxvbmcgcnVsZXMpXFxuK3tcXG4rXFx0cmV0dXJuIG10a19waHlfbGVkX2h3X2lzX3N1cHBvcnRlZChwaHlkZXYsIGluZGV4LCBydWxlcyxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgc3VwcG9ydGVkX3RyaWdnZXJzKTtcXG4rfVxcbitFWFBPUlRfU1lNQk9MX0dQTChtdDc5OHhfcGh5X2xlZF9od19pc19zdXBwb3J0ZWQpO1xcbitcXG4raW50IG10Nzk4eF9waHlfbGVkX2h3X2NvbnRyb2xfZ2V0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIHU4IGluZGV4LFxcbitcXHRcXHRcXHRcXHQgIHVuc2lnbmVkIGxvbmcgKnJ1bGVzKVxcbit7XFxuK1xcdHJldHVybiBtdGtfcGh5X2xlZF9od19jdHJsX2dldChwaHlkZXYsIGluZGV4LCBydWxlcyxcXG4rXFx0XFx0XFx0XFx0ICAgICAgIE1US19HUEhZX0xFRF9PTl9TRVQsXFxuK1xcdFxcdFxcdFxcdCAgICAgICBNVEtfR1BIWV9MRURfUlhfQkxJTktfU0VULFxcbitcXHRcXHRcXHRcXHQgICAgICAgTVRLX0dQSFlfTEVEX1RYX0JMSU5LX1NFVCk7XFxuK307XFxuK0VYUE9SVF9TWU1CT0xfR1BMKG10Nzk4eF9waHlfbGVkX2h3X2NvbnRyb2xfZ2V0KTtcXG4rXFxuK2ludCBtdDc5OHhfcGh5X2xlZF9od19jb250cm9sX3NldChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCB1OCBpbmRleCxcXG4rXFx0XFx0XFx0XFx0ICB1bnNpZ25lZCBsb25nIHJ1bGVzKVxcbit7XFxuK1xcdHJldHVybiBtdGtfcGh5X2xlZF9od19jdHJsX3NldChwaHlkZXYsIGluZGV4LCBydWxlcyxcXG4rXFx0XFx0XFx0XFx0ICAgICAgIE1US19HUEhZX0xFRF9PTl9TRVQsXFxuK1xcdFxcdFxcdFxcdCAgICAgICBNVEtfR1BIWV9MRURfUlhfQkxJTktfU0VULFxcbitcXHRcXHRcXHRcXHQgICAgICAgTVRLX0dQSFlfTEVEX1RYX0JMSU5LX1NFVCk7XFxuK307XFxuK0VYUE9SVF9TWU1CT0xfR1BMKG10Nzk4eF9waHlfbGVkX2h3X2NvbnRyb2xfc2V0KTtcXG4rXFxuIE1PRFVMRV9ERVNDUklQVElPTihcXFwiTWVkaWFUZWsgRXRoZXJuZXQgUEhZIGRyaXZlciBjb21tb25cXFwiKTtcXG4gTU9EVUxFX0FVVEhPUihcXFwiU2t5IEh1YW5nIFxcdTAwM2NTa3lMYWtlLkh1YW5nQG1lZGlhdGVrLmNvbVxcdTAwM2VcXFwiKTtcXG4gTU9EVUxFX0FVVEhPUihcXFwiRGFuaWVsIEdvbGxlIFxcdTAwM2NkYW5pZWxAbWFrcm90b3BpYS5vcmdcXHUwMDNlXFxcIik7XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BoeS9tZWRpYXRlay9tdGsuaCBiL2RyaXZlcnMvbmV0L3BoeS9tZWRpYXRlay9tdGsuaFxcbmluZGV4IDMyMGY3NmZmYTgxZmEyLi5jZDlkNGM1NTUwYzNiNyAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9waHkvbWVkaWF0ZWsvbXRrLmhcXG4rKysgYi9kcml2ZXJzL25ldC9waHkvbWVkaWF0ZWsvbXRrLmhcXG5AQCAtMTMsNiArMTMsNyBAQFxcbiBcXG4gI2RlZmluZSBNVEtfRVhUX1BBR0VfQUNDRVNTXFx0XFx0XFx0MHgxZlxcbiAjZGVmaW5lIE1US19QSFlfUEFHRV9FWFRFTkRFRF8xXFx0XFx0XFx0MHgwMDAxXFxuKyNkZWZpbmUgTVRLX1BIWV9QQUdFX0VYVEVOREVEXzNcXHRcXHRcXHQweDAwMDNcXG4gI2RlZmluZSBNVEtfUEhZX1BBR0VfU1RBTkRBUkRcXHRcXHRcXHQweDAwMDBcXG4gI2RlZmluZSBNVEtfUEhZX1BBR0VfRVhURU5ERURfNTJCNVxcdFxcdDB4NTJiNVxcbiBcXG5AQCAtNzIsNiArNzMsOCBAQCBzdHJ1Y3QgbXRrX3NvY3BoeV9wcml2IHtcXG4gXFx0dW5zaWduZWQgbG9uZ1xcdFxcdGxlZF9zdGF0ZTtcXG4gfTtcXG4gXFxuK3ZvaWQgX19tdGtfdHJfd3JpdGUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgdTggY2hfYWRkciwgdTggbm9kZV9hZGRyLFxcbitcXHRcXHQgICAgdTggZGF0YV9hZGRyLCB1MzIgdHJfZGF0YSk7XFxuIHZvaWQgX19tdGtfdHJfbW9kaWZ5KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIHU4IGNoX2FkZHIsIHU4IG5vZGVfYWRkcixcXG4gXFx0XFx0ICAgICB1OCBkYXRhX2FkZHIsIHUzMiBtYXNrLCB1MzIgc2V0KTtcXG4gdm9pZCBtdGtfdHJfbW9kaWZ5KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIHU4IGNoX2FkZHIsIHU4IG5vZGVfYWRkcixcXG5AQCAtMTAxLDQgKzEwNCwxNiBAQCBpbnQgbXRrX3BoeV9od19sZWRfYmxpbmtfc2V0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIHU4IGluZGV4LFxcbiBcXHRcXHRcXHQgICAgIGJvb2wgYmxpbmtpbmcpO1xcbiB2b2lkIG10a19waHlfbGVkc19zdGF0ZV9pbml0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpO1xcbiBcXG4raW50IG10Nzk4eF9waHlfbGVkX2JsaW5rX3NldChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCB1OCBpbmRleCxcXG4rXFx0XFx0XFx0ICAgICB1bnNpZ25lZCBsb25nICpkZWxheV9vbixcXG4rXFx0XFx0XFx0ICAgICB1bnNpZ25lZCBsb25nICpkZWxheV9vZmYpO1xcbitpbnQgbXQ3OTh4X3BoeV9sZWRfYnJpZ2h0bmVzc19zZXQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldixcXG4rXFx0XFx0XFx0XFx0ICB1OCBpbmRleCwgZW51bSBsZWRfYnJpZ2h0bmVzcyB2YWx1ZSk7XFxuK2ludCBtdDc5OHhfcGh5X2xlZF9od19pc19zdXBwb3J0ZWQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgdTggaW5kZXgsXFxuK1xcdFxcdFxcdFxcdCAgIHVuc2lnbmVkIGxvbmcgcnVsZXMpO1xcbitpbnQgbXQ3OTh4X3BoeV9sZWRfaHdfY29udHJvbF9nZXQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgdTggaW5kZXgsXFxuK1xcdFxcdFxcdFxcdCAgdW5zaWduZWQgbG9uZyAqcnVsZXMpO1xcbitpbnQgbXQ3OTh4X3BoeV9sZWRfaHdfY29udHJvbF9zZXQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgdTggaW5kZXgsXFxuK1xcdFxcdFxcdFxcdCAgdW5zaWduZWQgbG9uZyBydWxlcyk7XFxuK1xcbiAjZW5kaWYgLyogX01US19FUEhZX0hfICovXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA5VDAxOjExOjU2LjIzNzIyMTkwNVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzcyNzIzNTkyNjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgaGFyZHdhcmUtc3BlY2lmaWMgRXRoZXJuZXQgUEhZIGRyaXZlciBmb3IgQWlyb2hhIFNvQ3MgYW5kIHJlZmFjdG9ycyB0aGUgZXhpc3RpbmcgTWVkaWFUZWsgUEhZIGRyaXZlciB0byBzaGFyZSBjb2RlLiBTaW5jZSBQSFkgZGV2aWNlcyBhcmUgaW5zdGFudGlhdGVkIGJ5IHRoZSBNRElPIGJ1cyBiYXNlZCBvbiBoYXJkd2FyZSBwcm9iaW5nIChyZWFkaW5nIFBIWSBJRCByZWdpc3RlcnMpIG9yIGRldmljZSB0cmVlLCBhbmQgdGhlcmUgaXMgbm8gdmlydHVhbCBNRElPIGJ1cyBvciBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgKGxpa2UgUUVNVS9HQ0UpIHRoYXQgY2FuIGluc3RhbnRpYXRlIHRoaXMgc3BlY2lmaWMgUEhZLCB0aGUgY29kZSBpcyBpbXBvc3NpYmxlIHRvIHJlYWNoIGFuZCB0ZXN0IHZpYSBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdFxuICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LFxuICAgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBlMjdiNTVjZDZhOWViYjRhNmJjY2IxMmM5ZjYwMmI2MTdmYjBkMGViXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBKdWwgOSAwMToxMTo1MyAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL01BSU5UQUlORVJTIGIvTUFJTlRBSU5FUlNcbmluZGV4IDUyZjFhNTVlY2E5OWJmLi42NWNjMjFiMzljM2RiYyAxMDA2NDRcbi0tLSBhL01BSU5UQUlORVJTXG4rKysgYi9NQUlOVEFJTkVSU1xuQEAgLTc2MCw2ICs3NjAsMTQgQEAgUzpcdE1haW50YWluZWRcbiBGOlx0RG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9haXJvaGEsZW43NTgxLWV0aC55YW1sXG4gRjpcdGRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9cbiBcbitBSVJPSEEgRVRIRVJORVQgUEhZIERSSVZFUlxuK006XHRDaHJpc3RpYW4gTWFyYW5naSBcdTAwM2NhbnN1ZWxzbXRoQGdtYWlsLmNvbVx1MDAzZVxuK0w6XHRsaW51eC1hcm0ta2VybmVsQGxpc3RzLmluZnJhZGVhZC5vcmcgKG1vZGVyYXRlZCBmb3Igbm9uLXN1YnNjcmliZXJzKVxuK0w6XHRsaW51eC1tZWRpYXRla0BsaXN0cy5pbmZyYWRlYWQub3JnIChtb2RlcmF0ZWQgZm9yIG5vbi1zdWJzY3JpYmVycylcbitMOlx0bmV0ZGV2QHZnZXIua2VybmVsLm9yZ1xuK1M6XHRNYWludGFpbmVkXG4rRjpcdGRyaXZlcnMvbmV0L3BoeS9tZWRpYXRlay9haXJvaGEtZ2Utc29jLmNcbitcbiBBSVJPSEEgUENJRSBQSFkgRFJJVkVSXG4gTTpcdExvcmVuem8gQmlhbmNvbmkgXHUwMDNjbG9yZW56b0BrZXJuZWwub3JnXHUwMDNlXG4gTDpcdGxpbnV4LWFybS1rZXJuZWxAbGlzdHMuaW5mcmFkZWFkLm9yZyAobW9kZXJhdGVkIGZvciBub24tc3Vic2NyaWJlcnMpXG5AQCAtMTY0ODMsNiArMTY0OTEsNyBAQCBMOlx0bmV0ZGV2QHZnZXIua2VybmVsLm9yZ1xuIFM6XHRNYWludGFpbmVkXG4gRjpcdGRyaXZlcnMvbmV0L3BoeS9tZWRpYXRlay9tdGstMnA1Z2UuY1xuIEY6XHRkcml2ZXJzL25ldC9waHkvbWVkaWF0ZWsvbXRrLWdlLXNvYy5jXG4rRjpcdGRyaXZlcnMvbmV0L3BoeS9tZWRpYXRlay9tdGstZ2Utc29jLmhcbiBGOlx0ZHJpdmVycy9uZXQvcGh5L21lZGlhdGVrL210ay1waHktbGliLmNcbiBGOlx0ZHJpdmVycy9uZXQvcGh5L21lZGlhdGVrL210ay1nZS5jXG4gRjpcdGRyaXZlcnMvbmV0L3BoeS9tZWRpYXRlay9tdGsuaFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BoeS9tZWRpYXRlay9LY29uZmlnIGIvZHJpdmVycy9uZXQvcGh5L21lZGlhdGVrL0tjb25maWdcbmluZGV4IGJiN2RjODc2MjcxZTgzLi5mZTUxZjQ2MTZjNTQ0ZiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3BoeS9tZWRpYXRlay9LY29uZmlnXG4rKysgYi9kcml2ZXJzL25ldC9waHkvbWVkaWF0ZWsvS2NvbmZpZ1xuQEAgLTEsNCArMSwxNyBAQFxuICMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuK2NvbmZpZyBBSVJPSEFfR0VfU09DX1BIWVxuK1x0dHJpc3RhdGUgXCJBaXJvaGEgU29DIEV0aGVybmV0IFBIWXNcIlxuK1x0ZGVwZW5kcyBvbiBBUk02NCB8fCBDT01QSUxFX1RFU1RcbitcdGRlcGVuZHMgb24gQVJDSF9BSVJPSEEgfHwgQ09NUElMRV9URVNUXG4rXHRzZWxlY3QgTVRLX05FVF9QSFlMSUJcbitcdHNlbGVjdCBQSFlfUEFDS0FHRVxuK1x0aGVscFxuK1x0ICBTdXBwb3J0cyBBaXJvaGEgU29DIGJ1aWx0LWluIEdpZ2FiaXQgRXRoZXJuZXQgUEhZcy5cbitcbitcdCAgSW5jbHVkZSBzdXBwb3J0IGZvciBidWlsdC1pbiBFdGhlcm5ldCBQSFlzIHdoaWNoIGFyZSBwcmVzZW50IGluXG4rXHQgIHRoZSBBTjc1ODEgYW5kIEFONzU4MyBTb0NzLiBUaGVzZSBQSFlzIGQgd2lsbCBkeW5hbWljYWxseVxuK1x0ICBjYWxpYnJhdGUgZHVyaW5nIHN0YXJ0dXAuXG4rXG4gY29uZmlnIE1FRElBVEVLXzJQNUdFX1BIWVxuIFx0dHJpc3RhdGUgXCJNZWRpYVRlayAyLjVHYiBFdGhlcm5ldCBQSFlzXCJcbiBcdGRlcGVuZHMgb24gKEFSTTY0IFx1MDAyNlx1MDAyNiBBUkNIX01FRElBVEVLKSB8fCBDT01QSUxFX1RFU1RcbkBAIC0yNCw4ICszNyw3IEBAIGNvbmZpZyBNRURJQVRFS19HRV9QSFlcbiBjb25maWcgTUVESUFURUtfR0VfU09DX1BIWVxuIFx0dHJpc3RhdGUgXCJNZWRpYVRlayBTb0MgRXRoZXJuZXQgUEhZc1wiXG4gXHRkZXBlbmRzIG9uIEFSTTY0IHx8IENPTVBJTEVfVEVTVFxuLVx0ZGVwZW5kcyBvbiBBUkNIX0FJUk9IQSB8fCAoQVJDSF9NRURJQVRFSyBcdTAwMjZcdTAwMjYgTlZNRU1fTVRLX0VGVVNFKSB8fCBcXFxuLVx0XHQgICBDT01QSUxFX1RFU1RcbitcdGRlcGVuZHMgb24gKEFSQ0hfTUVESUFURUsgXHUwMDI2XHUwMDI2IE5WTUVNX01US19FRlVTRSkgfHwgQ09NUElMRV9URVNUXG4gXHRzZWxlY3QgTVRLX05FVF9QSFlMSUJcbiBcdHNlbGVjdCBQSFlfUEFDS0FHRVxuIFx0aGVscFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BoeS9tZWRpYXRlay9NYWtlZmlsZSBiL2RyaXZlcnMvbmV0L3BoeS9tZWRpYXRlay9NYWtlZmlsZVxuaW5kZXggYWM1N2VjYzc5OWZjODEuLmViNDMwZjAwODE2OWUyIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvcGh5L21lZGlhdGVrL01ha2VmaWxlXG4rKysgYi9kcml2ZXJzL25ldC9waHkvbWVkaWF0ZWsvTWFrZWZpbGVcbkBAIC0xLDQgKzEsNSBAQFxuICMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbitvYmotJChDT05GSUdfQUlST0hBX0dFX1NPQ19QSFkpXHRcdCs9IGFpcm9oYS1nZS1zb2Mub1xuIG9iai0kKENPTkZJR19NRURJQVRFS18yUDVHRV9QSFkpXHQrPSBtdGstMnA1Z2Uub1xuIG9iai0kKENPTkZJR19NRURJQVRFS19HRV9QSFkpXHRcdCs9IG10ay1nZS5vXG4gb2JqLSQoQ09ORklHX01FRElBVEVLX0dFX1NPQ19QSFkpXHQrPSBtdGstZ2Utc29jLm9cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9waHkvbWVkaWF0ZWsvYWlyb2hhLWdlLXNvYy5jIGIvZHJpdmVycy9uZXQvcGh5L21lZGlhdGVrL2Fpcm9oYS1nZS1zb2MuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi42MDFhNjRkODMzNjU0MlxuLS0tIC9kZXYvbnVsbFxuKysrIGIvZHJpdmVycy9uZXQvcGh5L21lZGlhdGVrL2Fpcm9oYS1nZS1zb2MuY1xuQEAgLTAsMCArMSwxODEyIEBAXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjArXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvYml0ZmllbGQuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3BpbmN0cmwvY29uc3VtZXIuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3BoeS5oXHUwMDNlXG4rXG4rI2luY2x1ZGUgXCIuLi9waHlsaWIuaFwiXG4rI2luY2x1ZGUgXCJtdGsuaFwiXG4rI2luY2x1ZGUgXCJtdGstZ2Utc29jLmhcIlxuK1xuKyNkZWZpbmUgQUlST0hBX0RFRkFVTFRfUE9SVDBfQUREUlx0XHQweDlcbisjZGVmaW5lIEFJUk9IQV9QSFlfTUFYX0xFRFNcdFx0XHQyXG4rXG4rZW51bSBhaXJvaGFfbWRpX3Jlc2lzdGVyX3R5cGUge1xuK1x0TURJXzBSLFxuK1x0TURJXzVSLFxuK1xuK1x0TURJX1RZUEVfTUFYLFxuK307XG4rXG4rZW51bSBhaXJvaGFfdHJhbnNmb3JtZXJfdHlwZSB7XG4rXHRUWE1SLFxuK1x0RElTQ1JFVEUsXG4rXG4rXHRUUkFOU0ZPUk1FUl9UWVBFX01BWCxcbit9O1xuK1xuK2VudW0gYWlyb2hhX2NhbGliX2NvbnN0X3R5cGUge1xuK1x0VFhfQU1QX1RFU1RfQSxcbitcdFRYX0FNUF9URVNUX0IsXG4rXHRUWF9BTVBfVEVTVF9DLFxuK1x0VFhfQU1QX1RFU1RfRCxcbitcdFRYX0FNUF8xR19BLFxuK1x0VFhfQU1QXzFHX0IsXG4rXHRUWF9BTVBfMUdfQyxcbitcdFRYX0FNUF8xR19ELFxuK1x0VFhfQU1QXzEwME1fQSxcbitcdFRYX0FNUF8xMDBNX0IsXG4rXHRUWF9BTVBfMTBNX0EsXG4rXHRUWF9BTVBfMTBNX0IsXG4rXHRSNTBfQSxcbitcdFI1MF9CLFxuK1x0UjUwX0MsXG4rXHRSNTBfRCxcbitcbitcdENBTElCX0NPTlNUX1RZUEVfTUFYLFxuK307XG4rXG4rc3RydWN0IGFpcm9oYV9zb2NwaHlfc2hhcmVkIHtcbitcdHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXZfcDA7XG4rXHRlbnVtIGFpcm9oYV90cmFuc2Zvcm1lcl90eXBlIHRyYW5zZm9ybWVyX3R5cGVbNF07XG4rXHRlbnVtIGFpcm9oYV9tZGlfcmVzaXN0ZXJfdHlwZSBtZGlfcmVzaXN0ZXJfdHlwZTtcbitcdGJvb2wgcmV4dF9zd19jYWxpYl9kb25lO1xuK1x0aW50ICgqdHhfYW1wX2NvbXBlbnNhdGlvbl90YmwpW1RSQU5TRk9STUVSX1RZUEVfTUFYXVtNRElfVFlQRV9NQVhdW0NBTElCX0NPTlNUX1RZUEVfTUFYXVs0XTtcbitcdHU4ICpyNTBfY2FsX3RibDtcbit9O1xuK1xuKy8qXG4rICogMiBjaGlwIHJldmlzaW9uXG4rICogVFhNUiBvciBkaXNjcmV0ZVxuKyAqIDIgTURJIHR5cGVcbisgKiBUWCBBTVAgdGVzdC9UWCBBTVAgMUcvVFggQU1QIDEwME0vVFggQU1QIDEwTS9SNTBcbisgKiA0IFBIWVxuKyAqL1xuK3N0YXRpYyBpbnQgYW43NTgxX3R4X2FtcF9jb21wZW5zYXRpb25fdGJsWzJdW1RSQU5TRk9STUVSX1RZUEVfTUFYXVtNRElfVFlQRV9NQVhdW0NBTElCX0NPTlNUX1RZUEVfTUFYXVs0XSA9IHtcbitcdHsgLyogSUMgdmVyc2lvbiAxICovXG4rXHRcdFtUWE1SXSA9IHtcbitcdFx0XHR7IH0sXG4rXHRcdFx0e1xuK1x0XHRcdFx0W1RYX0FNUF9URVNUX0FdID0geyAtMTIsIC0xMSwgLTksIC02IH0sXG4rXHRcdFx0XHRbVFhfQU1QX1RFU1RfQl0gPSB7IC05LCAtMTMsIC05LCAtNSB9LFxuK1x0XHRcdFx0W1RYX0FNUF9URVNUX0NdID0geyAtNSwgLTQsIC0zLCAxIH0sXG4rXHRcdFx0XHRbVFhfQU1QX1RFU1RfRF0gPSB7IC05LCAtOCwgLTcsIC01IH0sXG4rXHRcdFx0XHRbVFhfQU1QXzFHX0FdID0geyAtMTIsIC0xMSwgLTksIC02IH0sXG4rXHRcdFx0XHRbVFhfQU1QXzFHX0JdID0geyAtOSwgLTEzLCAtOSwgLTUgfSxcbitcdFx0XHRcdFtUWF9BTVBfMUdfQ10gPSB7IC01LCAtNCwgLTMsIDEgfSxcbitcdFx0XHRcdFtUWF9BTVBfMUdfRF0gPSB7IC05LCAtOCwgLTcsIC01IH0sXG4rXHRcdFx0XHRbVFhfQU1QXzEwME1fQV0gPSB7IC0yLCAtMiwgMCwgMiB9LFxuK1x0XHRcdFx0W1RYX0FNUF8xMDBNX0JdID0geyAtMiwgLTIsIDEsIDEgfSxcbitcdFx0XHRcdFtUWF9BTVBfMTBNX0FdID0geyAwLCAwLCAwLCAwIH0sXG4rXHRcdFx0XHRbVFhfQU1QXzEwTV9CXSA9IHsgMCwgMCwgMCwgMCB9LFxuK1x0XHRcdFx0W1I1MF9BXSA9IHsgMTUsIDE1LCAxNSwgMTUgfSxcbitcdFx0XHRcdFtSNTBfQl0gPSB7IDE1LCAxNSwgMTgsIDE1IH0sXG4rXHRcdFx0XHRbUjUwX0NdID0geyAtOCwgLTgsIC04LCAtOCB9LFxuK1x0XHRcdFx0W1I1MF9EXSA9IHsgLTgsIC04LCAtOCwgLTggfSxcbitcdFx0XHR9LFxuK1x0XHR9LFxuK1x0XHRbRElTQ1JFVEVdID0ge1xuK1x0XHRcdHsgfSxcbitcdFx0XHR7XG4rXHRcdFx0XHRbVFhfQU1QX1RFU1RfQV0gPSB7IC05LCAtNywgLTcsIC01IH0sXG4rXHRcdFx0XHRbVFhfQU1QX1RFU1RfQl0gPSB7IC05LCAtOSwgLTcsIC00IH0sXG4rXHRcdFx0XHRbVFhfQU1QX1RFU1RfQ10gPSB7IC05LCAtNywgLTksIC02IH0sXG4rXHRcdFx0XHRbVFhfQU1QX1RFU1RfRF0gPSB7IC0xMSwgLTksIC0xMCwgLTggfSxcbitcdFx0XHRcdFtUWF9BTVBfMUdfQV0gPSB7IC05LCAtNywgLTcsIC01IH0sXG4rXHRcdFx0XHRbVFhfQU1QXzFHX0JdID0geyAtOSwgLTgsIC03LCAtNCB9LFxuK1x0XHRcdFx0W1RYX0FNUF8xR19DXSA9IHsgLTksIC03LCAtOSwgLTYgfSxcbitcdFx0XHRcdFtUWF9BTVBfMUdfRF0gPSB7IC0xMSwgLTgsIC0xMCwgLTggfSxcbitcdFx0XHRcdFtUWF9BTVBfMTAwTV9BXSA9IHsgNCwgMywgNCwgNCB9LFxuK1x0XHRcdFx0W1RYX0FNUF8xMDBNX0JdID0geyA0LCA0LCA1LCA0IH0sXG4rXHRcdFx0XHRbVFhfQU1QXzEwTV9BXSA9IHsgMCwgMCwgMCwgMCB9LFxuK1x0XHRcdFx0W1RYX0FNUF8xME1fQl0gPSB7IDAsIDAsIDAsIDAgfSxcbitcdFx0XHRcdFtSNTBfQV0gPSB7IDAsIDAsIDAsIDAgfSxcbitcdFx0XHRcdFtSNTBfQl0gPSB7IDAsIDAsIDAsIDAgfSxcbitcdFx0XHRcdFtSNTBfQ10gPSB7IDAsIDAsIDAsIDAgfSxcbitcdFx0XHRcdFtSNTBfRF0gPSB7IDAsIDAsIDAsIDAgfSxcbitcdFx0XHR9LFxuK1x0XHR9LFxuK1x0fSxcbitcdHsgLyogSUMgdmVyc2lvbiAyICovXG4rXHRcdFtUWE1SXSA9IHtcbitcdFx0XHR7IH0sXG4rXHRcdFx0e1xuK1x0XHRcdFx0W1RYX0FNUF9URVNUX0FdID0geyAtMTAsIC0xMiwgLTEyLCAtMTEgfSxcbitcdFx0XHRcdFtUWF9BTVBfVEVTVF9CXSA9IHsgLTEwLCAtMTEsIC0xMSwgLTEwIH0sXG4rXHRcdFx0XHRbVFhfQU1QX1RFU1RfQ10gPSB7IC01LCAtNywgLTksIC0zIH0sXG4rXHRcdFx0XHRbVFhfQU1QX1RFU1RfRF0gPSB7IC04LCAtMTAsIC03LCAtOCB9LFxuK1x0XHRcdFx0W1RYX0FNUF8xR19BXSA9IHsgLTEyLCAtNiwgLTYsIDQgfSxcbitcdFx0XHRcdFtUWF9BTVBfMUdfQl0gPSB7IC0xMCwgLTUsIC01LCAxIH0sXG4rXHRcdFx0XHRbVFhfQU1QXzFHX0NdID0geyAtNSwgLTMsIC00LCAxMSB9LFxuK1x0XHRcdFx0W1RYX0FNUF8xR19EXSA9IHsgLTgsIC0zLCAtMywgNCB9LFxuK1x0XHRcdFx0W1RYX0FNUF8xMDBNX0FdID0geyAyLCAxLCAwLCAzIH0sXG4rXHRcdFx0XHRbVFhfQU1QXzEwME1fQl0gPSB7IDAsIDAsIDAsIDMgfSxcbitcdFx0XHRcdFtUWF9BTVBfMTBNX0FdID0geyAwLCAwLCAwLCAwIH0sXG4rXHRcdFx0XHRbVFhfQU1QXzEwTV9CXSA9IHsgMCwgMCwgMCwgMCB9LFxuK1x0XHRcdFx0W1I1MF9BXSA9IHsgMTUsIDE1LCAxNSwgMTUgfSxcbitcdFx0XHRcdFtSNTBfQl0gPSB7IDE1LCAxNSwgMTgsIDE1IH0sXG4rXHRcdFx0XHRbUjUwX0NdID0geyA0LCA0LCA0LCA0IH0sXG4rXHRcdFx0XHRbUjUwX0RdID0geyA0LCA0LCA0LCA0IH0sXG4rXHRcdFx0fSxcbitcdFx0fSxcbitcdFx0W0RJU0NSRVRFXSA9IHtcbitcdFx0XHR7IH0sXG4rXHRcdFx0e1xuK1x0XHRcdFx0W1RYX0FNUF9URVNUX0FdID0geyAtMTEsIDExLCAtMTIsIC03IH0sXG4rXHRcdFx0XHRbVFhfQU1QX1RFU1RfQl0gPSB7IC05LCAtMTAsIC05LCAtOCB9LFxuK1x0XHRcdFx0W1RYX0FNUF9URVNUX0NdID0geyAtNiwgLTMsIC03LCAtNCB9LFxuK1x0XHRcdFx0W1RYX0FNUF9URVNUX0RdID0geyAtNywgLTgsIC0xMCwgLTcgfSxcbitcdFx0XHRcdFtUWF9BTVBfMUdfQV0gPSB7IC0xMSwgLTExLCAtMTIsIC03IH0sXG4rXHRcdFx0XHRbVFhfQU1QXzFHX0JdID0geyAtOSwgLTEwLCAtOSwgLTggfSxcbitcdFx0XHRcdFtUWF9BTVBfMUdfQ10gPSB7IC02LCAtMywgLTcsIC00IH0sXG4rXHRcdFx0XHRbVFhfQU1QXzFHX0RdID0geyAtNywgLTgsIC0xMCwgLTcgfSxcbitcdFx0XHRcdFtUWF9BTVBfMTAwTV9BXSA9IHsgMiwgMiwgMSwgMiB9LFxuK1x0XHRcdFx0W1RYX0FNUF8xMDBNX0JdID0geyAzLCAzLCAzLCAzIH0sXG4rXHRcdFx0XHRbVFhfQU1QXzEwTV9BXSA9IHsgMCwgMCwgMCwgMCB9LFxuK1x0XHRcdFx0W1RYX0FNUF8xME1fQl0gPSB7IDAsIDAsIDAsIDAgfSxcbitcdFx0XHRcdFtSNTBfQV0gPSB7IDEyLCAxMiwgMTIsIDEyIH0sXG4rXHRcdFx0XHRbUjUwX0JdID0geyA3LCA3LCA3LCA3IH0sXG4rXHRcdFx0XHRbUjUwX0NdID0geyAyLCAyLCAwLCAwIH0sXG4rXHRcdFx0XHRbUjUwX0RdID0geyAwLCAwLCAyLCAyIH0sXG4rXHRcdFx0fSxcbitcdFx0fSxcbitcdH0sXG4rfTtcbitcbitzdGF0aWMgdTggYW43NTgxX3pjYWxfdG9fcjQ1b2htWzY0XSA9IHtcbitcdDEyNywgMTI3LCAxMjcsIDEyNywgMTI3LCAxMjcsIDEyNywgMTI3LCAxMjcsIDEyNywgMTI3LCAxMjcsIDEyNywgMTI3LCAxMjcsIDEyNyxcbitcdDEyNywgMTI3LCAxMjcsIDEyNywgMTI3LCAxMjcsIDEyNywgMTI3LCAxMjMsIDExOSwgMTE1LCAxMTIsIDEwOCwgMTA0LCAxMDAsICA5NixcbitcdCA5NCwgIDkyLCAgODgsICA4NSwgIDgyLCAgODAsICA3NiwgIDc0LCAgNzIsICA2OCwgIDY2LCAgNjQsICA2MiwgIDYwLCAgNTYsICA1NSxcbitcdCA1MiwgIDUwLCAgNDgsICA0NiwgIDQ0LCAgNDIsICA0MCwgIDM5LCAgMzYsICAzNSwgIDMyLCAgMzIsICAzMCwgIDI4LCAgMjcsICAyNVxuK307XG4rXG4rLypcbisgKiAyIGNoaXAgcmV2aXNpb25cbisgKiBUWE1SIG9yIGRpc2NyZXRlXG4rICogMiBNREkgdHlwZVxuKyAqIFRYIEFNUCB0ZXN0L1RYIEFNUCAxRy9UWCBBTVAgMTAwTS9UWCBBTVAgMTBNL1I1MFxuKyAqIDQgUEhZXG4rICovXG4rc3RhdGljIGludCBhbjc1ODNfdHhfYW1wX2NvbXBlbnNhdGlvbl90YmxbVFJBTlNGT1JNRVJfVFlQRV9NQVhdW01ESV9UWVBFX01BWF1bQ0FMSUJfQ09OU1RfVFlQRV9NQVhdWzRdID0ge1xuK1x0W1RYTVJdID0ge1xuK1x0XHRbTURJXzBSXSA9IHtcbitcdFx0XHRbVFhfQU1QX1RFU1RfQV0gPSB7IC0zLCAtMywgLTMsIC0zIH0sXG4rXHRcdFx0W1RYX0FNUF9URVNUX0JdID0geyAtMywgLTMsIC0zLCAtMyB9LFxuK1x0XHRcdFtUWF9BTVBfVEVTVF9DXSA9IHsgLTMsIC0zLCAtMywgLTMgfSxcbitcdFx0XHRbVFhfQU1QX1RFU1RfRF0gPSB7IC0zLCAtMywgLTMsIC0zIH0sXG4rXHRcdFx0W1RYX0FNUF8xR19BXSA9IHsgMCwgMCwgMCwgMCB9LFxuK1x0XHRcdFtUWF9BTVBfMUdfQl0gPSB7IDAsIDAsIDAsIDAgfSxcbitcdFx0XHRbVFhfQU1QXzFHX0NdID0geyAwLCAwLCAwLCAwIH0sXG4rXHRcdFx0W1RYX0FNUF8xR19EXSA9IHsgMCwgMCwgMCwgMCB9LFxuK1x0XHRcdFtUWF9BTVBfMTAwTV9BXSA9IHsgNCwgNCwgNCwgNCB9LFxuK1x0XHRcdFtUWF9BTVBfMTAwTV9CXSA9IHsgNCwgNCwgNCwgNCB9LFxuK1x0XHRcdFtUWF9BTVBfMTBNX0FdID0geyAwLCAwLCAwLCAwIH0sXG4rXHRcdFx0W1RYX0FNUF8xME1fQl0gPSB7IDAsIDAsIDAsIDAgfSxcbitcdFx0XHRbUjUwX0FdID0geyA0LCA0LCAwLCAwIH0sXG4rXHRcdFx0W1I1MF9CXSA9IHsgNCwgNCwgMCwgMCB9LFxuK1x0XHRcdFtSNTBfQ10gPSB7IDUsIDUsIDMsIDQgfSxcbitcdFx0XHRbUjUwX0RdID0geyA0LCA0LCA0LCAwIH0sXG4rXHRcdH0sXG4rXHRcdFtNRElfNVJdID0ge1xuK1x0XHRcdFtUWF9BTVBfVEVTVF9BXSA9IHsgLTMsIC0zLCAtMywgLTMgfSxcbitcdFx0XHRbVFhfQU1QX1RFU1RfQl0gPSB7IC0zLCAtMywgLTMsIC0zIH0sXG4rXHRcdFx0W1RYX0FNUF9URVNUX0NdID0geyAtMywgLTMsIC0zLCAtMyB9LFxuK1x0XHRcdFtUWF9BTVBfVEVTVF9EXSA9IHsgLTMsIC0zLCAtMywgLTMgfSxcbitcdFx0XHRbVFhfQU1QXzFHX0FdID0geyAwLCAwLCAwLCAwIH0sXG4rXHRcdFx0W1RYX0FNUF8xR19CXSA9IHsgMCwgMCwgMCwgMCB9LFxuK1x0XHRcdFtUWF9BTVBfMUdfQ10gPSB7IDAsIDAsIDAsIDAgfSxcbitcdFx0XHRbVFhfQU1QXzFHX0RdID0geyAwLCAwLCAwLCAwIH0sXG4rXHRcdFx0W1RYX0FNUF8xMDBNX0FdID0geyA0LCA0LCA0LCA0IH0sXG4rXHRcdFx0W1RYX0FNUF8xMDBNX0JdID0geyA0LCA0LCA0LCA0IH0sXG4rXHRcdFx0W1RYX0FNUF8xME1fQV0gPSB7IDAsIDAsIDAsIDAgfSxcbitcdFx0XHRbVFhfQU1QXzEwTV9CXSA9IHsgMCwgMCwgMCwgMCB9LFxuK1x0XHRcdFtSNTBfQV0gPSB7IC00LCAtNCwgLTQsIC00IH0sXG4rXHRcdFx0W1I1MF9CXSA9IHsgLTQsIC00LCAtNCwgLTQgfSxcbitcdFx0XHRbUjUwX0NdID0geyAtMiwgLTIsIC0yLCAtMiB9LFxuK1x0XHRcdFtSNTBfRF0gPSB7IC0zLCAtMywgLTIsIC0yIH0sXG4rXHRcdH0sXG4rXHR9LFxuK1x0W0RJU0NSRVRFXSA9IHtcbitcdFx0W01ESV8wUl0gPSB7XG4rXHRcdFx0W1RYX0FNUF9URVNUX0FdID0geyAtMywgLTMsIC0zLCAtMyB9LFxuK1x0XHRcdFtUWF9BTVBfVEVTVF9CXSA9IHsgLTMsIC0zLCAtMywgLTMgfSxcbitcdFx0XHRbVFhfQU1QX1RFU1RfQ10gPSB7IC0zLCAtMywgLTMsIC0zIH0sXG4rXHRcdFx0W1RYX0FNUF9URVNUX0RdID0geyAtMywgLTMsIC0zLCAtMyB9LFxuK1x0XHRcdFtUWF9BTVBfMUdfQV0gPSB7IDAsIDAsIDAsIDAgfSxcbitcdFx0XHRbVFhfQU1QXzFHX0JdID0geyAwLCAwLCAwLCAwIH0sXG4rXHRcdFx0W1RYX0FNUF8xR19DXSA9IHsgMCwgMCwgMCwgMCB9LFxuK1x0XHRcdFtUWF9BTVBfMUdfRF0gPSB7IDAsIDAsIDAsIDAgfSxcbitcdFx0XHRbVFhfQU1QXzEwME1fQV0gPSB7IDQsIDQsIDQsIDQgfSxcbitcdFx0XHRbVFhfQU1QXzEwME1fQl0gPSB7IDQsIDQsIDQsIDQgfSxcbitcdFx0XHRbVFhfQU1QXzEwTV9BXSA9IHsgMCwgMCwgMCwgMCB9LFxuK1x0XHRcdFtUWF9BTVBfMTBNX0JdID0geyAwLCAwLCAwLCAwIH0sXG4rXHRcdFx0W1I1MF9BXSA9IHsgNCwgNCwgNCwgNCB9LFxuK1x0XHRcdFtSNTBfQl0gPSB7IDQsIDQsIDQsIDQgfSxcbitcdFx0XHRbUjUwX0NdID0geyA2LCA2LCA2LCA2IH0sXG4rXHRcdFx0W1I1MF9EXSA9IHsgNCwgNCwgNCwgNCB9LFxuK1x0XHR9LFxuK1x0XHRbTURJXzVSXSA9IHtcbitcdFx0XHRbVFhfQU1QX1RFU1RfQV0gPSB7IC0zLCAtMywgLTMsIC0zIH0sXG4rXHRcdFx0W1RYX0FNUF9URVNUX0JdID0geyAtMywgLTMsIC0zLCAtMyB9LFxuK1x0XHRcdFtUWF9BTVBfVEVTVF9DXSA9IHsgLTMsIC0zLCAtMywgLTMgfSxcbitcdFx0XHRbVFhfQU1QX1RFU1RfRF0gPSB7IC0zLCAtMywgLTMsIC0zIH0sXG4rXHRcdFx0W1RYX0FNUF8xR19BXSA9IHsgMCwgMCwgMCwgMCB9LFxuK1x0XHRcdFtUWF9BTVBfMUdfQl0gPSB7IDAsIDAsIDAsIDAgfSxcbitcdFx0XHRbVFhfQU1QXzFHX0NdID0geyAwLCAwLCAwLCAwIH0sXG4rXHRcdFx0W1RYX0FNUF8xR19EXSA9IHsgMCwgMCwgMCwgMCB9LFxuK1x0XHRcdFtUWF9BTVBfMTAwTV9BXSA9IHsgNCwgNCwgNCwgNCB9LFxuK1x0XHRcdFtUWF9BTVBfMTAwTV9CXSA9IHsgNCwgNCwgNCwgNCB9LFxuK1x0XHRcdFtUWF9BTVBfMTBNX0FdID0geyAwLCAwLCAwLCAwIH0sXG4rXHRcdFx0W1RYX0FNUF8xME1fQl0gPSB7IDAsIDAsIDAsIDAgfSxcbitcdFx0XHRbUjUwX0FdID0geyAwLCAwLCAwLCAwIH0sXG4rXHRcdFx0W1I1MF9CXSA9IHsgMCwgMCwgMCwgMCB9LFxuK1x0XHRcdFtSNTBfQ10gPSB7IDAsIDAsIDAsIDAgfSxcbitcdFx0XHRbUjUwX0RdID0geyAwLCAwLCAwLCAwIH0sXG4rXHRcdH0sXG4rXHR9LFxuK307XG4rXG4rc3RhdGljIHU4IGFuNzU4M196Y2FsX3RvX3I1MG9obV8wUls2NF0gPSB7XG4rXHQxMjcsIDEyNywgMTI3LCAxMjcsIDEyNywgMTI3LCAxMjcsIDEyNywgMTI3LCAxMjcsIDEyNywgMTI3LCAxMjcsIDEyNywgMTI3LCAxMjcsXG4rXHQxMjcsIDEyNywgMTI3LCAxMjIsIDExOCwgMTE0LCAxMTAsIDEwNiwgMTAyLCAgOTgsICA5NiwgIDkyLCAgODgsICA4NSwgIDgyLCAgODAsXG4rXHQgNzYsICA3MiwgIDcwLCAgNjgsICA2NCwgIDYyLCAgNjAsICA1NywgIDU1LCAgNTIsICA1MCwgIDQ4LCAgNDYsICA0NCwgIDQxLCAgNDAsXG4rXHQgMzgsICAzNiwgIDMzLCAgMzIsICAzMCwgIDI4LCAgMjYsICAyNCwgIDI0LCAgMjIsICAyMCwgIDE4LCAgMTYsICAxNiwgIDE0LCAgMTIsXG4rfTtcbitcbitzdGF0aWMgdTggYW43NTgzX3pjYWxfdG9fcjUwb2htXzVSWzY0XSA9IHtcbitcdDEyNywgMTI3LCAxMjcsIDEyNywgMTI3LCAxMjcsIDEyNywgMTI3LCAxMjcsIDEyNywgMTI3LCAxMjcsIDEyNywgMTI3LCAxMjcsIDEyNyxcbitcdDEyNywgMTI3LCAxMjcsIDEyNywgMTI3LCAxMjcsIDEyNywgMTI3LCAxMjcsIDEyNCwgMTIwLCAxMTYsIDExMiwgMTEwLCAxMDYsIDEwMixcbitcdCA5OSwgIDk2LCAgOTMsICA5MCwgIDg4LCAgODQsICA4MSwgIDc5LCAgNzYsICA3MywgIDcxLCAgNjgsICA2NiwgIDY0LCAgNjEsICA1OSxcbitcdCA1NiwgIDU0LCAgNTIsICA1MCwgIDQ4LCAgNDYsICA0NCwgIDQyLCAgNDAsICAzOSwgIDM3LCAgMzYsICAzMywgIDMyLCAgMzEsICAyOSxcbit9O1xuK1xuK3N0YXRpYyBpbnQgYWlyb2hhX2NhbF9jeWNsZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCBpbnQgZGV2YWQsXG4rXHRcdFx0ICAgIHUzMiByZWdudW0sIHUxNiBtYXNrLCB1MTYgY2FsX3ZhbClcbit7XG4rXHRzdHJ1Y3QgYWlyb2hhX3NvY3BoeV9zaGFyZWQgKnNoYXJlZCA9IHBoeV9wYWNrYWdlX2dldF9wcml2KHBoeWRldik7XG4rXHRzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2X3AwO1xuK1x0aW50IHJldDtcbitcbitcdHBoeWRldl9wMCA9IHNoYXJlZC1cdTAwM2VwaHlkZXZfcDA7XG4rXG4rXHRwaHlfbW9kaWZ5X21tZChwaHlkZXYsIGRldmFkLCByZWdudW0sIG1hc2ssIGNhbF92YWwpO1xuK1xuK1x0cmV0ID0gbXRrX2NhbF9jeWNsZV93YWl0KHBoeWRldl9wMCk7XG4rXHRwaHlkZXZfZGJnKHBoeWRldiwgXCJjYWxfdmFsOiAweCV4LCByZXQ6ICVkXFxuXCIsIGNhbF92YWwsIHJldCk7XG4rXG4rXHRyZXR1cm4gcmV0O1xuK31cbitcbitzdGF0aWMgaW50IGFpcm9oYV9yZXh0X2NhbF9zdyhzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuK3tcbitcdGludCBjYWxpYnJhdGlvbl9wb2xhcml0eTtcbitcdHU4IHpjYWxfY3RybCA9IDMyO1xuK1x0aW50IGZpcnN0X2NhbGliO1xuK1x0aW50IHJldDtcbitcbitcdC8qIEJHIHZvbHRhZ2Ugb3V0cHV0ICovXG4rXHRwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDIsIDB4MTAwLCAweGMwMDApO1xuK1x0LyogdHN0X21vZGUyICovXG4rXHRwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDIsIDB4ZmYsIDB4Mik7XG4rXG4rXHRwaHlfY2xlYXJfYml0c19tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMiwgMHhmZixcbitcdFx0XHQgICBHRU5NQVNLKDE1LCA0KSB8IEdFTk1BU0soMSwgMCkpO1xuK1xuK1x0cGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCBNVEtfUEhZX1JHX0FOQV9DQUxfUkcwLFxuK1x0XHQgICAgICBNVEtfUEhZX1JHX0NBTF9DS0lOViB8IE1US19QSFlfUkdfQU5BX0NBTEVOIHxcbitcdFx0ICAgICAgTVRLX1BIWV9SR19SRVhUX0NBTEVOKTtcbitcdHBoeV93cml0ZV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSwgTVRLX1BIWV9SR19BTkFfQ0FMX1JHMSwgMCk7XG4rXHRwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIE1US19QSFlfUkdfQU5BX0NBTF9SRzYsIDApO1xuK1xuK1x0cGh5ZGV2X2RiZyhwaHlkZXYsIFwiU3RhcnQgUkVYVCBTVyBjYWwuXFxuXCIpO1xuK1x0Zmlyc3RfY2FsaWIgPSBhaXJvaGFfY2FsX2N5Y2xlKHBoeWRldiwgTURJT19NTURfVkVORDEsIE1US19QSFlfUkdfQU5BX0NBTF9SRzUsXG4rXHRcdFx0XHQgICAgICAgTVRLX1BIWV9SR19SRVhUX1pDQUxfQ1RSTF9NQVNLLCB6Y2FsX2N0cmwpO1xuK1xuK1x0aWYgKGZpcnN0X2NhbGliIFx1MDAzYyAwKSB7XG4rXHRcdHBoeWRldl9lcnIocGh5ZGV2LCBcIlJFWFQgU1cgY2FsaWJyYXRpb24gZmFpbGVkLlxcblwiKTtcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHR9XG4rXG4rXHQvKiBJZiBSRVhUIGNhbGlicmF0aW9uIGZhaWxlZDpcbitcdCAqIC0gaW5jcmVhc2UgZEIgdW50aWwgY2FsaWJyYXRpb24gc3VjY2VlZC5cbitcdCAqIElmIFJFWFQgY2FsaWJyYXRpb24gc3VjY2VlZGVkOlxuK1x0ICogLSBkZWNyZWFzZSBkQiB1bnRpbCBjYWxpYnJhdGlvbiBmYWlsIHRvIGZpbmUgdHVuZSBpdC5cbitcdCAqL1xuK1x0aWYgKGZpcnN0X2NhbGliID09IDEpXG4rXHRcdGNhbGlicmF0aW9uX3BvbGFyaXR5ID0gLTE7XG4rXHRlbHNlXG4rXHRcdGNhbGlicmF0aW9uX3BvbGFyaXR5ID0gMTtcbitcbitcdHdoaWxlICh6Y2FsX2N0cmwgXHUwMDNlIDAgXHUwMDI2XHUwMDI2XG4rXHQgICAgICAgemNhbF9jdHJsIFx1MDAzYyBGSUVMRF9NQVgoTVRLX1BIWV9SR19SRVhUX1pDQUxfQ1RSTF9NQVNLKSkge1xuK1x0XHR6Y2FsX2N0cmwgKz0gY2FsaWJyYXRpb25fcG9sYXJpdHk7XG4rXG4rXHRcdHJldCA9IGFpcm9oYV9jYWxfY3ljbGUocGh5ZGV2LCBNRElPX01NRF9WRU5EMSwgTVRLX1BIWV9SR19BTkFfQ0FMX1JHNSxcbitcdFx0XHRcdCAgICAgICBNVEtfUEhZX1JHX1JFWFRfWkNBTF9DVFJMX01BU0ssIHpjYWxfY3RybCk7XG4rXHRcdC8qIEV4aXQgaWYgd2UgZWl0aGVyIGZhaWxlZCBvciBzdWNjZWVkZWQgY29tcGFyZWQgdG8gdGhlXG4rXHRcdCAqIGZpcnN0IGNhbGlicmF0aW9uIHJlc3VsdC4gKGFrYSB3ZSBmaW5pc2hlZCBmaW5lIHR1bmluZyBvclxuK1x0XHQgKiB3ZSBzdWNjZWVkZWQgd2l0aCBjYWxpYnJhdGlvbilcbitcdFx0ICovXG4rXHRcdGlmIChyZXQgIT0gZmlyc3RfY2FsaWIpXG4rXHRcdFx0YnJlYWs7XG4rXHR9XG4rXG4rXHRpZiAocmV0IFx1MDAzYyAwKSB7XG4rXHRcdHBoeWRldl9lcnIocGh5ZGV2LCBcIlJFWFQgU1cgY2FsaWJyYXRpb24gZmFpbGVkLlxcblwiKTtcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHR9XG4rXG4rXHRpZiAoemNhbF9jdHJsID09IDAgfHxcbitcdCAgICB6Y2FsX2N0cmwgPT0gRklFTERfTUFYKE1US19QSFlfUkdfUkVYVF9aQ0FMX0NUUkxfTUFTSykpIHtcbitcdFx0emNhbF9jdHJsID0gMzI7XG4rXHRcdHBoeWRldl9lcnIocGh5ZGV2LCBcIlJFWFQgU1cgY2FsaWJyYXRpb24gc2F0dXJhdGlvbi4gRGVmYXVsdGluZyB0byAleC5cXG5cIixcbitcdFx0XHQgICB6Y2FsX2N0cmwpO1xuK1x0fVxuK1xuK1x0cGh5X21vZGlmeV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSwgTVRLX1BIWV9SR19BTkFfQ0FMX1JHNSxcbitcdFx0ICAgICAgIE1US19QSFlfUkdfUkVYVF9UUklNX01BU0ssXG4rXHRcdCAgICAgICBGSUVMRF9QUkVQKE1US19QSFlfUkdfUkVYVF9UUklNX01BU0ssIHpjYWxfY3RybCkpO1xuK1x0cGh5X21vZGlmeV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMiwgTVRLX1BIWV9SR19CR19SQVNFTCxcbitcdFx0ICAgICAgIE1US19QSFlfUkdfQkdfUkFTRUxfTUFTSyxcbitcdFx0ICAgICAgIEZJRUxEX1BSRVAoTVRLX1BIWV9SR19CR19SQVNFTF9NQVNLLCB6Y2FsX2N0cmwgXHUwMDNlXHUwMDNlIDMpKTtcbitcbitcdHBoeV93cml0ZV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSwgTVRLX1BIWV9SR19BTkFfQ0FMX1JHMCwgMCk7XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rc3RhdGljIGludCBhaXJvaGFfdHhfb2Zmc2V0X2NhbF9zdyhzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCB1OCB0eGdfY2FsZW5feClcbit7XG4rXHRzdHJ1Y3QgYWlyb2hhX3NvY3BoeV9zaGFyZWQgKnNoYXJlZCA9IHBoeV9wYWNrYWdlX2dldF9wcml2KHBoeWRldik7XG4rXHRzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2X3AwO1xuK1x0dTE2IGRldjFlXzE0NV90bXAsIGJtY3JfdG1wO1xuK1x0aW50IGNhbGlicmF0aW9uX3BvbGFyaXR5O1xuK1x0dTE2IHJlZ19kYWMxLCByZWdfZGFjMjtcbitcdGludCB6Y2FsX2N0cmwgPSAwO1xuK1x0aW50IGZpcnN0X2NhbGliO1xuK1x0dTE2IHJlZywgbWFzaztcbitcdGludCByZXQ7XG4rXG4rXHRwaHlkZXZfcDAgPSBzaGFyZWQtXHUwMDNlcGh5ZGV2X3AwO1xuK1xuK1x0LyogQkcgdm9sdGFnZSBvdXRwdXQgKi9cbitcdHBoeV93cml0ZV9tbWQocGh5ZGV2X3AwLCBNRElPX01NRF9WRU5EMiwgMHgxMDAsIDB4YzAwMCk7XG4rXG4rXHRwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIE1US19QSFlfUkdfQU5BX0NBTF9SRzAsXG4rXHRcdCAgICAgIE1US19QSFlfUkdfQU5BX0NBTEVOKTtcbitcdHBoeV93cml0ZV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSwgTVRLX1BIWV9SR19BTkFfQ0FMX1JHMSxcbitcdFx0ICAgICAgTVRLX1BIWV9SR19UWFZPU19DQUxFTik7XG4rXHRwaHlfd3JpdGVfbW1kKHBoeWRldl9wMCwgTURJT19NTURfVkVORDEsIE1US19QSFlfUkdfQU5BX0NBTF9SRzAsXG4rXHRcdCAgICAgIE1US19QSFlfUkdfQU5BX0NBTEVOKTtcbitcdHBoeV93cml0ZV9tbWQocGh5ZGV2X3AwLCBNRElPX01NRF9WRU5EMSwgTVRLX1BIWV9SR19BTkFfQ0FMX1JHMSxcbitcdFx0ICAgICAgTVRLX1BIWV9SR19UWFZPU19DQUxFTik7XG4rXG4rXHQvKiBGb3JjZSAxRyBmdWxsIGR1cGxleCBmb3IgY2FsaWJyYXRpb24gKi9cbitcdGJtY3JfdG1wID0gcGh5X3JlYWQocGh5ZGV2LCBNSUlfQk1DUik7XG4rXHRwaHlfd3JpdGUocGh5ZGV2LCBNSUlfQk1DUiwgQk1DUl9GVUxMRFBMWCB8IEJNQ1JfU1BFRUQxMDAwKTtcbitcbitcdC8qIEZvcmNlIE1ESSAqL1xuK1x0ZGV2MWVfMTQ1X3RtcCA9IHBoeV9yZWFkX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCAweDAxNDUpO1xuK1x0cGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCAweDAxNDUsIDB4MTAxMCk7XG4rXG4rXHQvKiAxZV85NlsxNV06YnlwYXNzX3R4X29mZnNldF9jYWwsIEh3IGJ5cGFzcywgRncgY2FsICovXG4rXHRwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIDB4OTYsXG4rXHRcdCAgICAgIDB4ODAwMCk7XG4rXHRwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIDB4M2UsXG4rXHRcdCAgICAgIDB4ZjgwOCk7XG4rXG4rXHRzd2l0Y2ggKHR4Z19jYWxlbl94KSB7XG4rXHRjYXNlIFBBSVJfQTpcbitcdFx0cGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCAweGRkLCBCSVQoMTIpKTtcbitcdFx0cmVnX2RhYzEgPSBNVEtfUEhZX1JHX0RBU05fREFDX0lOMF9BO1xuK1x0XHRyZWdfZGFjMiA9IE1US19QSFlfUkdfREFTTl9EQUNfSU4xX0E7XG4rXHRcdHJlZyA9IE1US19QSFlfUkdfQ1JfVFhfQU1QX09GRlNFVF9BX0I7XG4rXHRcdG1hc2sgPSBNVEtfUEhZX0NSX1RYX0FNUF9PRkZTRVRfQV9NQVNLO1xuK1x0XHRicmVhaztcbitcdGNhc2UgUEFJUl9COlxuK1x0XHRwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIDB4ZGQsIEJJVCg4KSk7XG4rXHRcdHJlZ19kYWMxID0gTVRLX1BIWV9SR19EQVNOX0RBQ19JTjBfQjtcbitcdFx0cmVnX2RhYzIgPSBNVEtfUEhZX1JHX0RBU05fREFDX0lOMV9CO1xuK1x0XHRyZWcgPSBNVEtfUEhZX1JHX0NSX1RYX0FNUF9PRkZTRVRfQV9CO1xuK1x0XHRtYXNrID0gTVRLX1BIWV9DUl9UWF9BTVBfT0ZGU0VUX0JfTUFTSztcbitcdFx0YnJlYWs7XG4rXHRjYXNlIFBBSVJfQzpcbitcdFx0cGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCAweGRkLCBCSVQoNCkpO1xuK1x0XHRyZWdfZGFjMSA9IE1US19QSFlfUkdfREFTTl9EQUNfSU4wX0M7XG4rXHRcdHJlZ19kYWMyID0gTVRLX1BIWV9SR19EQVNOX0RBQ19JTjFfQztcbitcdFx0cmVnID0gTVRLX1BIWV9SR19DUl9UWF9BTVBfT0ZGU0VUX0NfRDtcbitcdFx0bWFzayA9IE1US19QSFlfQ1JfVFhfQU1QX09GRlNFVF9DX01BU0s7XG4rXHRcdGJyZWFrO1xuK1x0Y2FzZSBQQUlSX0Q6XG4rXHRcdHBoeV93cml0ZV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSwgMHhkZCwgQklUKDApKTtcbitcdFx0cmVnX2RhYzEgPSBNVEtfUEhZX1JHX0RBU05fREFDX0lOMF9EO1xuK1x0XHRyZWdfZGFjMiA9IE1US19QSFlfUkdfREFTTl9EQUNfSU4xX0Q7XG4rXHRcdHJlZyA9IE1US19QSFlfUkdfQ1JfVFhfQU1QX09GRlNFVF9DX0Q7XG4rXHRcdG1hc2sgPSBNVEtfUEhZX0NSX1RYX0FNUF9PRkZTRVRfRF9NQVNLO1xuK1x0XHRicmVhaztcbitcdGRlZmF1bHQ6XG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1x0fVxuK1xuK1x0cGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCByZWdfZGFjMSxcbitcdFx0ICAgICAgMHg4MDAwKTtcbitcdHBoeV93cml0ZV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSwgcmVnX2RhYzIsXG4rXHRcdCAgICAgIDB4ODAwMCk7XG4rXG4rXHRwaHlkZXZfZGJnKHBoeWRldiwgXCJTdGFydCBUWCBPZmZzZXQgU1cgY2FsLlxcblwiKTtcbitcbitcdGZpcnN0X2NhbGliID0gYWlyb2hhX2NhbF9jeWNsZShwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCByZWcsIG1hc2ssXG4rXHRcdFx0XHQgICAgICAgemNhbF9jdHJsIFx1MDAzY1x1MDAzYyBfX2ZmcyhtYXNrKSk7XG4rXG4rXHQvKiBJZiBUWCBPZmZzZXQgY2FsaWJyYXRpb24gZmFpbGVkOlxuK1x0ICogLSBpbmNyZWFzZSBkQiB1bnRpbCBjYWxpYnJhdGlvbiBzdWNjZWVkLlxuK1x0ICogSWYgVFggT2Zmc2V0IGNhbGlicmF0aW9uIHN1Y2NlZWRlZDpcbitcdCAqIC0gZGVjcmVhc2UgZEIgdW50aWwgY2FsaWJyYXRpb24gZmFpbCB0byBmaW5lIHR1bmUgaXQuXG4rXHQgKi9cbitcdGlmIChmaXJzdF9jYWxpYiA9PSAxKVxuK1x0XHRjYWxpYnJhdGlvbl9wb2xhcml0eSA9IC0xO1xuK1x0ZWxzZVxuK1x0XHRjYWxpYnJhdGlvbl9wb2xhcml0eSA9IDE7XG4rXG4rXHR3aGlsZSAoemNhbF9jdHJsIFx1MDAzZSAtMzIgXHUwMDI2XHUwMDI2IHpjYWxfY3RybCBcdTAwM2MgMzIpIHtcbitcdFx0dTMyIHZhbDtcbitcbitcdFx0emNhbF9jdHJsICs9IGNhbGlicmF0aW9uX3BvbGFyaXR5O1xuK1x0XHRpZiAoemNhbF9jdHJsIFx1MDAzZT0gMClcbitcdFx0XHR2YWwgPSB6Y2FsX2N0cmw7XG4rXHRcdGVsc2VcbitcdFx0XHQvKiBCSVQoNSkgc2lnbmFsIG5lZ2F0aXZlIG51bWJlciBmb3IgVFggT2Zmc2V0ICovXG4rXHRcdFx0dmFsID0gQklUKDUpIHwgYWJzKHpjYWxfY3RybCk7XG4rXG4rXHRcdHJldCA9IGFpcm9oYV9jYWxfY3ljbGUocGh5ZGV2LCBNRElPX01NRF9WRU5EMSwgcmVnLCBtYXNrLFxuK1x0XHRcdFx0ICAgICAgIHZhbCBcdTAwM2NcdTAwM2MgX19mZnMobWFzaykpO1xuK1x0XHQvKiBFeGl0IGlmIHdlIGVpdGhlciBmYWlsZWQgb3Igc3VjY2VlZGVkIGNvbXBhcmVkIHRvIHRoZVxuK1x0XHQgKiBmaXJzdCBjYWxpYnJhdGlvbiByZXN1bHQuIChha2Egd2UgZmluaXNoZWQgZmluZSB0dW5pbmcgb3JcbitcdFx0ICogd2Ugc3VjY2VlZGVkIHdpdGggY2FsaWJyYXRpb24pXG4rXHRcdCAqL1xuK1x0XHRpZiAocmV0ICE9IGZpcnN0X2NhbGliKVxuK1x0XHRcdGJyZWFrO1xuK1x0fVxuK1xuK1x0aWYgKHJldCBcdTAwM2MgMCkge1xuK1x0XHRwaHlkZXZfZXJyKHBoeWRldiwgXCJUWCBPZmZzZXQgY2FsaWJyYXRpb24gZmFpbGVkLlxcblwiKTtcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHR9XG4rXG4rXHRpZiAoemNhbF9jdHJsID09IC0zMiB8fFxuK1x0ICAgIHpjYWxfY3RybCA9PSAzMikge1xuK1x0XHR6Y2FsX2N0cmwgPSAwO1xuK1x0XHRwaHlkZXZfZXJyKHBoeWRldiwgXCJUWCBPZmZzZXQgU1cgY2FsaWJyYXRpb24gc2F0dXJhdGlvbi4gRGVmYXVsdGluZyB0byAleC5cXG5cIixcbitcdFx0XHQgICB6Y2FsX2N0cmwpO1xuK1xuK1x0XHRwaHlfbW9kaWZ5X21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCByZWcsIG1hc2ssXG4rXHRcdFx0ICAgICAgIHpjYWxfY3RybCBcdTAwM2NcdTAwM2MgX19mZnMobWFzaykpO1xuK1x0fVxuK1xuK1x0cGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQyLCAweDEwMCwgMHgwKTtcbitcbitcdHBoeV93cml0ZV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSwgTVRLX1BIWV9SR19EQVNOX0RBQ19JTjBfQSwgMCk7XG4rXHRwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIE1US19QSFlfUkdfREFTTl9EQUNfSU4wX0IsIDApO1xuK1x0cGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCBNVEtfUEhZX1JHX0RBU05fREFDX0lOMF9DLCAwKTtcbitcdHBoeV93cml0ZV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSwgTVRLX1BIWV9SR19EQVNOX0RBQ19JTjBfRCwgMCk7XG4rXHRwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIE1US19QSFlfUkdfREFTTl9EQUNfSU4xX0EsIDApO1xuK1x0cGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCBNVEtfUEhZX1JHX0RBU05fREFDX0lOMV9CLCAwKTtcbitcdHBoeV93cml0ZV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSwgTVRLX1BIWV9SR19EQVNOX0RBQ19JTjFfQywgMCk7XG4rXHRwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIE1US19QSFlfUkdfREFTTl9EQUNfSU4xX0QsIDApO1xuK1xuK1x0cGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCBNVEtfUEhZX1JHX0FOQV9DQUxfUkcwLCAwKTtcbitcdHBoeV93cml0ZV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSwgTVRLX1BIWV9SR19BTkFfQ0FMX1JHMSwgMCk7XG4rXHRwaHlfd3JpdGVfbW1kKHBoeWRldl9wMCwgTURJT19NTURfVkVORDEsIE1US19QSFlfUkdfQU5BX0NBTF9SRzAsIDApO1xuK1x0cGh5X3dyaXRlX21tZChwaHlkZXZfcDAsIE1ESU9fTU1EX1ZFTkQxLCBNVEtfUEhZX1JHX0FOQV9DQUxfUkcxLCAwKTtcbitcdHBoeV93cml0ZV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSwgMHg5NiwgMHgwKTtcbitcdHBoeV93cml0ZV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSwgMHgzZSwgMHhjMDAwKTtcbitcdHBoeV93cml0ZV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSwgMHhkZCwgMCk7XG4rXG4rXHQvKiBSZXN0b3JlIEJNQ1IgKi9cbitcdHBoeV93cml0ZShwaHlkZXYsIE1JSV9CTUNSLCBibWNyX3RtcCk7XG4rXG4rXHQvKiBSZXN0b3JlIE1ESSAqL1xuK1x0cGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCAweDAxNDUsIGRldjFlXzE0NV90bXApO1xuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK3N0YXRpYyBpbnQgYWlyb2hhX3R4X2FtcF9jYWxfc3coc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgdTggdHhnX2NhbGVuX3gpXG4re1xuK1x0c3RydWN0IGFpcm9oYV9zb2NwaHlfc2hhcmVkICpzaGFyZWQgPSBwaHlfcGFja2FnZV9nZXRfcHJpdihwaHlkZXYpO1xuK1x0dTE2IG1hc2tfZ2JlLCBtYXNrX3RidCwgbWFza190c3QsIG1hc2tfaGJ0O1xuK1x0dTE2IHJlZywgcmVnXzEwMCwgcmVnX2RhYzEsIHJlZ19kYWMyO1xuK1x0c3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldl9wMDtcbitcdGludCBjYWxpYnJhdGlvbl9wb2xhcml0eTtcbitcdHU4IHpjYWxfY3RybCA9IDMyO1xuK1x0aW50IGZpcnN0X2NhbGliO1xuK1x0aW50IHJldDtcbitcbitcdHBoeWRldl9wMCA9IHNoYXJlZC1cdTAwM2VwaHlkZXZfcDA7XG4rXG4rXHQvKiBCRyB2b2x0YWdlIG91dHB1dCAqL1xuK1x0cGh5X3dyaXRlX21tZChwaHlkZXZfcDAsIE1ESU9fTU1EX1ZFTkQyLCAweDEwMCwgMHhjMDAwKTtcbitcbitcdHBoeV93cml0ZV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSwgMHgxNDUsIDB4MTAxMCk7XG4rXG4rXHRwaHlfd3JpdGVfbW1kKHBoeWRldl9wMCwgTURJT19NTURfVkVORDEsIE1US19QSFlfUkdfQU5BX0NBTF9SRzAsXG4rXHRcdCAgICAgIE1US19QSFlfUkdfQ0FMX0NLSU5WIHwgTVRLX1BIWV9SR19BTkFfQ0FMRU4pO1xuK1x0cGh5X3dyaXRlX21tZChwaHlkZXZfcDAsIE1ESU9fTU1EX1ZFTkQxLCBNVEtfUEhZX1JHX0FOQV9DQUxfUkcxLFxuK1x0XHQgICAgICBNVEtfUEhZX1JHX1RYVk9TX0NBTEVOKTtcbitcbitcdC8qIHNlbGVjdCAxViAqL1xuK1x0cGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCBNVEtfUEhZX1JHX0FOQV9DQUxfUkc2LCAweDEwKTtcbitcbitcdC8qIGVuYWJsZSBUeCBWTEQqL1xuK1x0cGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCAweDNlLCAweGY4MDgpO1xuK1xuK1x0LyogRm9yY2UgMUcgZnVsbCBkdXBsZXggZm9yIGNhbGlicmF0aW9uICovXG4rXHRwaHlfd3JpdGUocGh5ZGV2LCBNSUlfQk1DUiwgQk1DUl9GVUxMRFBMWCB8IEJNQ1JfU1BFRUQxMDAwKTtcbitcbitcdHN3aXRjaCAodHhnX2NhbGVuX3gpIHtcbitcdGNhc2UgUEFJUl9BOlxuK1x0XHRwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIDB4ZGQsIEJJVCgxMikpO1xuK1x0XHRyZWdfZGFjMSA9IE1US19QSFlfUkdfREFTTl9EQUNfSU4wX0E7XG4rXHRcdHJlZ19kYWMyID0gTVRLX1BIWV9SR19EQVNOX0RBQ19JTjFfQTtcbitcdFx0cmVnID0gTVRLX1BIWV9UWFZMRF9EQV9SRztcbitcdFx0bWFza19nYmUgPSBNVEtfUEhZX0RBX1RYX0kyTVBCX0FfR0JFX01BU0s7XG4rXHRcdG1hc2tfdGJ0ID0gTVRLX1BIWV9EQV9UWF9JMk1QQl9BX1RCVF9NQVNLO1xuK1x0XHRyZWdfMTAwID0gTVRLX1BIWV9UWF9JMk1QQl9URVNUX01PREVfQTI7XG4rXHRcdG1hc2tfaGJ0ID0gTVRLX1BIWV9EQV9UWF9JMk1QQl9BX0hCVF9NQVNLO1xuK1x0XHRtYXNrX3RzdCA9IE1US19QSFlfREFfVFhfSTJNUEJfQV9UU1RfTUFTSztcbitcdFx0YnJlYWs7XG4rXHRjYXNlIFBBSVJfQjpcbitcdFx0cGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCAweGRkLCBCSVQoOCkpO1xuK1x0XHRyZWdfZGFjMSA9IE1US19QSFlfUkdfREFTTl9EQUNfSU4wX0I7XG4rXHRcdHJlZ19kYWMyID0gTVRLX1BIWV9SR19EQVNOX0RBQ19JTjFfQjtcbitcdFx0cmVnID0gTVRLX1BIWV9UWF9JMk1QQl9URVNUX01PREVfQjE7XG4rXHRcdG1hc2tfZ2JlID0gTVRLX1BIWV9EQV9UWF9JMk1QQl9CX0dCRV9NQVNLO1xuK1x0XHRtYXNrX3RidCA9IE1US19QSFlfREFfVFhfSTJNUEJfQl9UQlRfTUFTSztcbitcdFx0cmVnXzEwMCA9IE1US19QSFlfVFhfSTJNUEJfVEVTVF9NT0RFX0IyO1xuK1x0XHRtYXNrX2hidCA9IE1US19QSFlfREFfVFhfSTJNUEJfQl9IQlRfTUFTSztcbitcdFx0bWFza190c3QgPSBNVEtfUEhZX0RBX1RYX0kyTVBCX0JfVFNUX01BU0s7XG4rXHRcdGJyZWFrO1xuK1x0Y2FzZSBQQUlSX0M6XG4rXHRcdHBoeV93cml0ZV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSwgMHhkZCwgQklUKDQpKTtcbitcdFx0cmVnX2RhYzEgPSBNVEtfUEhZX1JHX0RBU05fREFDX0lOMF9DO1xuK1x0XHRyZWdfZGFjMiA9IE1US19QSFlfUkdfREFTTl9EQUNfSU4xX0M7XG4rXHRcdHJlZyA9IE1US19QSFlfVFhfSTJNUEJfVEVTVF9NT0RFX0MxO1xuK1x0XHRtYXNrX2diZSA9IE1US19QSFlfREFfVFhfSTJNUEJfQ19HQkVfTUFTSztcbitcdFx0bWFza190YnQgPSBNVEtfUEhZX0RBX1RYX0kyTVBCX0NfVEJUX01BU0s7XG4rXHRcdHJlZ18xMDAgPSBNVEtfUEhZX1RYX0kyTVBCX1RFU1RfTU9ERV9DMjtcbitcdFx0bWFza19oYnQgPSBNVEtfUEhZX0RBX1RYX0kyTVBCX0NfSEJUX01BU0s7XG4rXHRcdG1hc2tfdHN0ID0gTVRLX1BIWV9EQV9UWF9JMk1QQl9DX1RTVF9NQVNLO1xuK1x0XHRicmVhaztcbitcdGNhc2UgUEFJUl9EOlxuK1x0XHRwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIDB4ZGQsIEJJVCgwKSk7XG4rXHRcdHJlZ19kYWMxID0gTVRLX1BIWV9SR19EQVNOX0RBQ19JTjBfRDtcbitcdFx0cmVnX2RhYzIgPSBNVEtfUEhZX1JHX0RBU05fREFDX0lOMV9EO1xuK1x0XHRyZWcgPSBNVEtfUEhZX1RYX0kyTVBCX1RFU1RfTU9ERV9EMTtcbitcdFx0bWFza19nYmUgPSBNVEtfUEhZX0RBX1RYX0kyTVBCX0RfR0JFX01BU0s7XG4rXHRcdG1hc2tfdGJ0ID0gTVRLX1BIWV9EQV9UWF9JMk1QQl9EX1RCVF9NQVNLO1xuK1x0XHRyZWdfMTAwID0gTVRLX1BIWV9UWF9JMk1QQl9URVNUX01PREVfRDI7XG4rXHRcdG1hc2tfaGJ0ID0gTVRLX1BIWV9EQV9UWF9JMk1QQl9EX0hCVF9NQVNLO1xuK1x0XHRtYXNrX3RzdCA9IE1US19QSFlfREFfVFhfSTJNUEJfRF9UU1RfTUFTSztcbitcdFx0YnJlYWs7XG4rXHRkZWZhdWx0OlxuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcdH1cbitcbitcdHBoeV93cml0ZV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSwgcmVnX2RhYzEsXG4rXHRcdCAgICAgIDB4ODAwMCB8IDB4ZjApO1xuK1x0cGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCByZWdfZGFjMixcbitcdFx0ICAgICAgMHg4MDAwIHwgMHhmMCk7XG4rXG4rXHRwaHlkZXZfZGJnKHBoeWRldiwgXCJTdGFydCBUWCBBbXAgU1cgY2FsLlxcblwiKTtcbitcdGZpcnN0X2NhbGliID0gYWlyb2hhX2NhbF9jeWNsZShwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCByZWcsXG4rXHRcdFx0XHQgICAgICAgbWFza19nYmUsIHpjYWxfY3RybCBcdTAwM2NcdTAwM2MgX19mZnMobWFza19nYmUpKTtcbitcbitcdC8qIElmIFRYIEFtcCBjYWxpYnJhdGlvbiBmYWlsZWQ6XG4rXHQgKiAtIGluY3JlYXNlIGRCIHVudGlsIGNhbGlicmF0aW9uIHN1Y2NlZWQuXG4rXHQgKiBJZiBUWCBBbXAgY2FsaWJyYXRpb24gc3VjY2VlZGVkOlxuK1x0ICogLSBkZWNyZWFzZSBkQiB1bnRpbCBjYWxpYnJhdGlvbiBmYWlsIHRvIGZpbmUgdHVuZSBpdC5cbitcdCAqL1xuK1x0aWYgKGZpcnN0X2NhbGliID09IDEpXG4rXHRcdGNhbGlicmF0aW9uX3BvbGFyaXR5ID0gLTE7XG4rXHRlbHNlXG4rXHRcdGNhbGlicmF0aW9uX3BvbGFyaXR5ID0gMTtcbitcbitcdHdoaWxlICh6Y2FsX2N0cmwgXHUwMDNlIDAgXHUwMDI2XHUwMDI2XG4rXHQgICAgICAgemNhbF9jdHJsIFx1MDAzYyBGSUVMRF9NQVgoTVRLX1BIWV9SR19SRVhUX1pDQUxfQ1RSTF9NQVNLKSkge1xuK1x0XHR6Y2FsX2N0cmwgKz0gY2FsaWJyYXRpb25fcG9sYXJpdHk7XG4rXG4rXHRcdHJldCA9IGFpcm9oYV9jYWxfY3ljbGUocGh5ZGV2LCBNRElPX01NRF9WRU5EMSwgcmVnLFxuK1x0XHRcdFx0ICAgICAgIG1hc2tfZ2JlLCB6Y2FsX2N0cmwgXHUwMDNjXHUwMDNjIF9fZmZzKG1hc2tfZ2JlKSk7XG4rXHRcdC8qIEV4aXQgaWYgd2UgZWl0aGVyIGZhaWxlZCBvciBzdWNjZWVkZWQgY29tcGFyZWQgdG8gdGhlXG4rXHRcdCAqIGZpcnN0IGNhbGlicmF0aW9uIHJlc3VsdC4gKGFrYSB3ZSBmaW5pc2hlZCBmaW5lIHR1bmluZyBvclxuK1x0XHQgKiB3ZSBzdWNjZWVkZWQgd2l0aCBjYWxpYnJhdGlvbilcbitcdFx0ICovXG4rXHRcdGlmIChyZXQgIT0gZmlyc3RfY2FsaWIpXG4rXHRcdFx0YnJlYWs7XG4rXHR9XG4rXG4rXHRpZiAocmV0IFx1MDAzYyAwKSB7XG4rXHRcdHBoeWRldl9lcnIocGh5ZGV2LCBcIlRYIEFNUCBjYWxpYnJhdGlvbiBmYWlsZWQuXFxuXCIpO1xuK1x0XHRwaHlfbW9kaWZ5X21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCByZWcsXG4rXHRcdFx0ICAgICAgIG1hc2tfZ2JlIHwgbWFza190YnQsXG4rXHRcdFx0ICAgICAgICh6Y2FsX2N0cmwgXHUwMDNjXHUwMDNjIF9fZmZzKG1hc2tfZ2JlKSkgfFxuK1x0XHRcdCAgICAgICAoemNhbF9jdHJsIFx1MDAzY1x1MDAzYyBfX2ZmcyhtYXNrX3RidCkpKTtcbitcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHR9XG4rXG4rXHRpZiAoemNhbF9jdHJsID09IDAgfHxcbitcdCAgICB6Y2FsX2N0cmwgPT0gRklFTERfTUFYKE1US19QSFlfUkdfUkVYVF9aQ0FMX0NUUkxfTUFTSykpXG4rXHRcdHBoeWRldl93YXJuKHBoeWRldiwgXCJUWCBBTVAgU1cgY2FsaWJyYXRpb24gc2F0dXJhdGlvbi5cXG5cIik7XG4rXG4rXHRwaHlfbW9kaWZ5X21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCByZWcsXG4rXHRcdCAgICAgICBtYXNrX2diZSB8IG1hc2tfdGJ0LFxuK1x0XHQgICAgICAgKHpjYWxfY3RybCBcdTAwM2NcdTAwM2MgX19mZnMobWFza19nYmUpKSB8XG4rXHRcdCAgICAgICAoemNhbF9jdHJsIFx1MDAzY1x1MDAzYyBfX2ZmcyhtYXNrX3RidCkpKTtcbitcbitcdHBoeV9tb2RpZnlfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIHJlZ18xMDAsXG4rXHRcdCAgICAgICBtYXNrX2hidCB8IG1hc2tfdHN0LFxuK1x0XHQgICAgICAgKHpjYWxfY3RybCBcdTAwM2NcdTAwM2MgX19mZnMobWFza19oYnQpKSB8XG4rXHRcdCAgICAgICAoemNhbF9jdHJsIFx1MDAzY1x1MDAzYyBfX2ZmcyhtYXNrX3RzdCkpKTtcbitcbitcdHBoeV93cml0ZV9tbWQocGh5ZGV2X3AwLCBNRElPX01NRF9WRU5EMiwgMHgxMDAsIDB4MCk7XG4rXG4rXHRwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIE1US19QSFlfUkdfREFTTl9EQUNfSU4wX0EsIDApO1xuK1x0cGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCBNVEtfUEhZX1JHX0RBU05fREFDX0lOMF9CLCAwKTtcbitcdHBoeV93cml0ZV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSwgTVRLX1BIWV9SR19EQVNOX0RBQ19JTjBfQywgMCk7XG4rXHRwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIE1US19QSFlfUkdfREFTTl9EQUNfSU4wX0QsIDApO1xuK1x0cGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCBNVEtfUEhZX1JHX0RBU05fREFDX0lOMV9BLCAwKTtcbitcdHBoeV93cml0ZV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSwgTVRLX1BIWV9SR19EQVNOX0RBQ19JTjFfQiwgMCk7XG4rXHRwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIE1US19QSFlfUkdfREFTTl9EQUNfSU4xX0MsIDApO1xuK1x0cGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCBNVEtfUEhZX1JHX0RBU05fREFDX0lOMV9ELCAwKTtcbitcdHBoeV93cml0ZV9tbWQocGh5ZGV2X3AwLCBNRElPX01NRF9WRU5EMSwgMHgxNDUsIDB4MTAwMCk7XG4rXG4rXHRwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIE1US19QSFlfUkdfQU5BX0NBTF9SRzAsIDApO1xuK1x0cGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCBNVEtfUEhZX1JHX0FOQV9DQUxfUkcxLCAwKTtcbitcdHBoeV93cml0ZV9tbWQocGh5ZGV2X3AwLCBNRElPX01NRF9WRU5EMSwgTVRLX1BIWV9SR19BTkFfQ0FMX1JHMCwgMCk7XG4rXHRwaHlfd3JpdGVfbW1kKHBoeWRldl9wMCwgTURJT19NTURfVkVORDEsIE1US19QSFlfUkdfQU5BX0NBTF9SRzEsIDApO1xuK1x0cGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCAweDNlLCAweGMwMDApO1xuK1x0cGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCAweGRkLCAwKTtcbitcbitcdC8qIFJlc3RvcmUgQU4gZW5hYmxlICovXG4rXHRwaHlfd3JpdGUocGh5ZGV2LCBNSUlfQk1DUiwgQk1DUl9BTkVOQUJMRSk7XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rc3RhdGljIGludCBhaXJvaGFfdHhfcjUwX2NhbF9zdyhzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCB1OCB0eGdfY2FsZW5feClcbit7XG4rXHRzdHJ1Y3QgYWlyb2hhX3NvY3BoeV9zaGFyZWQgKnNoYXJlZCA9IHBoeV9wYWNrYWdlX2dldF9wcml2KHBoeWRldik7XG4rXHRzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2X3AwO1xuK1x0dTE2IGRldjFlXzE0NV90bXAsIGJtY3JfdG1wO1xuK1x0aW50IGNhbGlicmF0aW9uX3BvbGFyaXR5O1xuK1x0dTggemNhbF9jdHJsID0gMzI7XG4rXHRpbnQgZmlyc3RfY2FsaWI7XG4rXHR1MTYgcmVnO1xuK1x0aW50IHJldDtcbitcbitcdHBoeWRldl9wMCA9IHNoYXJlZC1cdTAwM2VwaHlkZXZfcDA7XG4rXG4rXHQvKiBCRyB2b2x0YWdlIG91dHB1dCAqL1xuK1x0cGh5X3dyaXRlX21tZChwaHlkZXZfcDAsIE1ESU9fTU1EX1ZFTkQyLCAweDEwMCwgMHhjMDAwKTtcbitcbitcdHBoeV93cml0ZV9tbWQocGh5ZGV2X3AwLCBNRElPX01NRF9WRU5EMSwgTVRLX1BIWV9SR19BTkFfQ0FMX1JHMCxcbitcdFx0ICAgICAgTVRLX1BIWV9SR19DQUxfQ0tJTlYgfCBNVEtfUEhZX1JHX0FOQV9DQUxFTik7XG4rXHRwaHlfd3JpdGVfbW1kKHBoeWRldl9wMCwgTURJT19NTURfVkVORDEsIE1US19QSFlfUkdfQU5BX0NBTF9SRzEsIDApO1xuK1x0Lyogc2VsZWN0IDFWICovXG4rXHRwaHlfd3JpdGVfbW1kKHBoeWRldl9wMCwgTURJT19NTURfVkVORDEsIE1US19QSFlfUkdfQU5BX0NBTF9SRzYsIDB4MTApO1xuK1xuK1x0cGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCBNVEtfUEhZX1JHX0FOQV9DQUxfUkcwLFxuK1x0XHQgICAgICBNVEtfUEhZX1JHX0NBTF9DS0lOViB8IE1US19QSFlfUkdfQU5BX0NBTEVOKTtcbitcdHBoeV93cml0ZV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSwgTVRLX1BIWV9SR19BTkFfQ0FMX1JHMSwgMCk7XG4rXHQvKiBzZWxlY3QgMVYgKi9cbitcdHBoeV93cml0ZV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSwgTVRLX1BIWV9SR19BTkFfQ0FMX1JHNiwgMHgxMCk7XG4rXG4rXHQvKiBGb3JjZSAxRyBmdWxsIGR1cGxleCBmb3IgY2FsaWJyYXRpb24gKi9cbitcdGJtY3JfdG1wID0gcGh5X3JlYWQocGh5ZGV2LCBNSUlfQk1DUik7XG4rXHRwaHlfd3JpdGUocGh5ZGV2LCBNSUlfQk1DUiwgQk1DUl9GVUxMRFBMWCB8IEJNQ1JfU1BFRUQxMDAwKTtcbitcbitcdC8qIEZvcmNlIE1ESSAqL1xuK1x0ZGV2MWVfMTQ1X3RtcCA9IHBoeV9yZWFkX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCAweDAxNDUpO1xuK1x0cGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCAweDAxNDUsIDB4MTAxMCk7XG4rXG4rXHQvKiBkaXNhYmxlIHR4IHNsZXcgY29udHJvbCAqL1xuK1x0cGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCAweDAxODUsIDB4MDAwMCk7XG4rXHRwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIDB4MDBmYiwgMHgwMTAwKTtcbitcbitcdHN3aXRjaCAodHhnX2NhbGVuX3gpIHtcbitcdGNhc2UgUEFJUl9BOlxuK1x0XHRwaHlfc2V0X2JpdHNfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsXG4rXHRcdFx0XHQgTVRLX1BIWV9SR19BTkFfQ0FMX1JHMCxcbitcdFx0XHRcdCBNVEtfUEhZX1JHX1pDQUxFTl9BKTtcbitcdFx0YnJlYWs7XG4rXHRjYXNlIFBBSVJfQjpcbitcdFx0cGh5X3NldF9iaXRzX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLFxuK1x0XHRcdFx0IE1US19QSFlfUkdfQU5BX0NBTF9SRzEsXG4rXHRcdFx0XHQgTVRLX1BIWV9SR19aQ0FMRU5fQik7XG4rXHRcdGJyZWFrO1xuK1x0Y2FzZSBQQUlSX0M6XG4rXHRcdHBoeV9zZXRfYml0c19tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSxcbitcdFx0XHRcdCBNVEtfUEhZX1JHX0FOQV9DQUxfUkcxLFxuK1x0XHRcdFx0IE1US19QSFlfUkdfWkNBTEVOX0MpO1xuK1x0XHRicmVhaztcbitcdGNhc2UgUEFJUl9EOlxuK1x0XHRwaHlfc2V0X2JpdHNfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsXG4rXHRcdFx0XHQgTVRLX1BIWV9SR19BTkFfQ0FMX1JHMSxcbitcdFx0XHRcdCBNVEtfUEhZX1JHX1pDQUxFTl9EKTtcbitcdFx0YnJlYWs7XG4rXHRkZWZhdWx0OlxuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcdH1cbitcbitcdHBoeWRldl9kYmcocGh5ZGV2LCBcIlN0YXJ0IFRYIHI1MCBTVyBjYWwuXFxuXCIpO1xuK1x0Zmlyc3RfY2FsaWIgPSBhaXJvaGFfY2FsX2N5Y2xlKHBoeWRldl9wMCwgTURJT19NTURfVkVORDEsIE1US19QSFlfUkdfQU5BX0NBTF9SRzUsXG4rXHRcdFx0XHQgICAgICAgTVRLX1BIWV9SR19SRVhUX1pDQUxfQ1RSTF9NQVNLLCB6Y2FsX2N0cmwpO1xuK1xuK1x0aWYgKGZpcnN0X2NhbGliIFx1MDAzYyAwKSB7XG4rXHRcdHBoeWRldl9lcnIocGh5ZGV2LCBcIlRYIHI1MCBTVyBjYWxpYnJhdGlvbiBmYWlsZWQuXFxuXCIpO1xuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcdH1cbitcbitcdC8qIElmIFRYIHI1MCBjYWxpYnJhdGlvbiBmYWlsZWQ6XG4rXHQgKiAtIGluY3JlYXNlIGRCIHVudGlsIGNhbGlicmF0aW9uIHN1Y2NlZWQuXG4rXHQgKiBJZiBUWCByNTAgY2FsaWJyYXRpb24gc3VjY2VlZGVkOlxuK1x0ICogLSBkZWNyZWFzZSBkQiB1bnRpbCBjYWxpYnJhdGlvbiBmYWlsIHRvIGZpbmUgdHVuZSBpdC5cbitcdCAqL1xuK1x0aWYgKGZpcnN0X2NhbGliID09IDEpXG4rXHRcdGNhbGlicmF0aW9uX3BvbGFyaXR5ID0gLTE7XG4rXHRlbHNlXG4rXHRcdGNhbGlicmF0aW9uX3BvbGFyaXR5ID0gMTtcbitcbitcdHdoaWxlICh6Y2FsX2N0cmwgXHUwMDNlIDAgXHUwMDI2XHUwMDI2XG4rXHQgICAgICAgemNhbF9jdHJsIFx1MDAzYyBGSUVMRF9NQVgoTVRLX1BIWV9SR19SRVhUX1pDQUxfQ1RSTF9NQVNLKSkge1xuK1x0XHR6Y2FsX2N0cmwgKz0gY2FsaWJyYXRpb25fcG9sYXJpdHk7XG4rXG4rXHRcdHJldCA9IGFpcm9oYV9jYWxfY3ljbGUocGh5ZGV2X3AwLCBNRElPX01NRF9WRU5EMSwgTVRLX1BIWV9SR19BTkFfQ0FMX1JHNSxcbitcdFx0XHRcdCAgICAgICBNVEtfUEhZX1JHX1JFWFRfWkNBTF9DVFJMX01BU0ssIHpjYWxfY3RybCk7XG4rXHRcdC8qIEV4aXQgaWYgd2UgZWl0aGVyIGZhaWxlZCBvciBzdWNjZWVkZWQgY29tcGFyZWQgdG8gdGhlXG4rXHRcdCAqIGZpcnN0IGNhbGlicmF0aW9uIHJlc3VsdC4gKGFrYSB3ZSBmaW5pc2hlZCBmaW5lIHR1bmluZyBvclxuK1x0XHQgKiB3ZSBzdWNjZWVkZWQgd2l0aCBjYWxpYnJhdGlvbilcbitcdFx0ICovXG4rXHRcdGlmIChyZXQgIT0gZmlyc3RfY2FsaWIpXG4rXHRcdFx0YnJlYWs7XG4rXHR9XG4rXG4rXHRpZiAocmV0IFx1MDAzYyAwKSB7XG4rXHRcdHBoeWRldl9lcnIocGh5ZGV2LCBcIlRYIHI1MCBTVyBjYWxpYnJhdGlvbiBmYWlsZWQuXFxuXCIpO1xuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcdH1cbitcbitcdGlmICh6Y2FsX2N0cmwgPT0gMCB8fFxuK1x0ICAgIHpjYWxfY3RybCA9PSBGSUVMRF9NQVgoTVRLX1BIWV9SR19SRVhUX1pDQUxfQ1RSTF9NQVNLKSlcbitcdFx0cGh5ZGV2X3dhcm4ocGh5ZGV2LCBcIlRYIHI1MCBTVyBjYWxpYnJhdGlvbiBzYXR1cmF0aW9uLlxcblwiKTtcbitcbitcdHpjYWxfY3RybCA9IHNoYXJlZC1cdTAwM2VyNTBfY2FsX3RibFt6Y2FsX2N0cmxdO1xuK1xuK1x0c3dpdGNoICh0eGdfY2FsZW5feCkge1xuK1x0Y2FzZSBQQUlSX0E6XG4rXHRcdHJlZyA9IEJJVCg3KSB8IEZJRUxEX1BSRVAoTVRLX1BIWV9DUl9UWF9SNTBfT0ZGU0VUX0FfTUFTSywgemNhbF9jdHJsKTtcbitcdFx0cGh5X21vZGlmeV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSxcbitcdFx0XHQgICAgICAgTVRLX1BIWV9SR19DUl9UWF9SNTBfT0ZGU0VUX0FfQixcbitcdFx0XHQgICAgICAgQklUKDcpIHwgTVRLX1BIWV9DUl9UWF9SNTBfT0ZGU0VUX0FfTUFTSywgcmVnKTtcbitcdFx0YnJlYWs7XG4rXHRjYXNlIFBBSVJfQjpcbitcdFx0cmVnID0gQklUKDcpIHwgRklFTERfUFJFUChNVEtfUEhZX0NSX1RYX1I1MF9PRkZTRVRfQl9NQVNLLCB6Y2FsX2N0cmwpO1xuK1x0XHRwaHlfbW9kaWZ5X21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLFxuK1x0XHRcdCAgICAgICBNVEtfUEhZX1JHX0NSX1RYX1I1MF9PRkZTRVRfQV9CLFxuK1x0XHRcdCAgICAgICBCSVQoNykgfCBNVEtfUEhZX0NSX1RYX1I1MF9PRkZTRVRfQl9NQVNLLCByZWcpO1xuK1x0XHRicmVhaztcbitcdGNhc2UgUEFJUl9DOlxuK1x0XHRyZWcgPSBCSVQoNykgfCBGSUVMRF9QUkVQKE1US19QSFlfQ1JfVFhfUjUwX09GRlNFVF9DX01BU0ssIHpjYWxfY3RybCk7XG4rXHRcdHBoeV9tb2RpZnlfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsXG4rXHRcdFx0ICAgICAgIE1US19QSFlfUkdfQ1JfVFhfUjUwX09GRlNFVF9DX0QsXG4rXHRcdFx0ICAgICAgIEJJVCg3KSB8IE1US19QSFlfQ1JfVFhfUjUwX09GRlNFVF9DX01BU0ssIHJlZyk7XG4rXHRcdGJyZWFrO1xuK1x0Y2FzZSBQQUlSX0Q6XG4rXHRcdHJlZyA9IEJJVCg3KSB8IEZJRUxEX1BSRVAoTVRLX1BIWV9DUl9UWF9SNTBfT0ZGU0VUX0RfTUFTSywgemNhbF9jdHJsKTtcbitcdFx0cGh5X21vZGlmeV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSxcbitcdFx0XHQgICAgICAgTVRLX1BIWV9SR19DUl9UWF9SNTBfT0ZGU0VUX0NfRCxcbitcdFx0XHQgICAgICAgQklUKDcpIHwgTVRLX1BIWV9DUl9UWF9SNTBfT0ZGU0VUX0RfTUFTSywgcmVnKTtcbitcdFx0YnJlYWs7XG4rXHRkZWZhdWx0OlxuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcdH1cbitcbitcdHBoeV93cml0ZV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSwgTVRLX1BIWV9SR19BTkFfQ0FMX1JHMCwgMCk7XG4rXHRwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIE1US19QSFlfUkdfQU5BX0NBTF9SRzEsIDApO1xuK1x0cGh5X3dyaXRlX21tZChwaHlkZXZfcDAsIE1ESU9fTU1EX1ZFTkQxLCBNVEtfUEhZX1JHX0FOQV9DQUxfUkcwLCAwKTtcbitcdHBoeV93cml0ZV9tbWQocGh5ZGV2X3AwLCBNRElPX01NRF9WRU5EMSwgTVRLX1BIWV9SR19BTkFfQ0FMX1JHMSwgMCk7XG4rXG4rXHQvKiBFbmFibGUgdHggc2xldyBjb250cm9sICovXG4rXHRwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIDB4MDE4NSwgMHgwMDAxKTtcbitcdHBoeV93cml0ZV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSwgMHgwMGZiLCAweDAwMDApO1xuK1xuK1x0cGh5X3dyaXRlX21tZChwaHlkZXZfcDAsIE1ESU9fTU1EX1ZFTkQyLCAweDEwMCwgMHgwKTtcbitcbitcdHBoeV93cml0ZV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSwgTVRLX1BIWV9SR19BTkFfQ0FMX1JHNiwgMHgwKTtcbitcdHBoeV93cml0ZV9tbWQocGh5ZGV2X3AwLCBNRElPX01NRF9WRU5EMSwgTVRLX1BIWV9SR19BTkFfQ0FMX1JHNiwgMHgwKTtcbitcbitcdC8qIFJlc3RvcmUgQk1DUiAqL1xuK1x0cGh5X3dyaXRlKHBoeWRldiwgTUlJX0JNQ1IsIGJtY3JfdG1wKTtcbitcbitcdC8qIFJlc3RvcmUgTURJICovXG4rXHRwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIDB4MDE0NSwgZGV2MWVfMTQ1X3RtcCk7XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rc3RhdGljIGludCBhaXJvaGFfcnhfb2Zmc2V0X2NhbF9zdyhzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuK3tcbitcdC8qIEh3IGJ5cGFzcywgRncgY2FsICovXG4rXHRwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIDB4OTYsIDB4ODAwMCk7XG4rXHQvKiB0eC9yeF9jYWxfY3JpdGVyaWFfdmFsdWUgKi9cbitcdHBoeV93cml0ZV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSwgMHgzNywgMHgwMDMzKTtcbitcbitcdC8qIHJ4IG9mZnNldCBjYWwgYnkgSHcgc2V0dXAgKi9cbitcdHBoeV9jbGVhcl9iaXRzX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCAweDM5LFxuK1x0XHRcdCAgIEJJVCgxNCkgfCBCSVQoMTEpKTtcbitcbitcdC8qIGRpc2FibGUgcnR1bmUgY2FsaWJyYXRpb24gKi9cbitcdHBoeV9jbGVhcl9iaXRzX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQyLCAweDEwNyxcbitcdFx0XHQgICBCSVQoMTIpKTtcbitcbitcdC8qIGJ5cGFzcyB0eC9yeCBkYyBvZmZzZXQgY2FuY2VsbGF0aW9uIHByb2Nlc3MgKi9cbitcdHBoeV9zZXRfYml0c19tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSwgMHgxNzEsXG4rXHRcdFx0IEJJVCg4KSB8IEJJVCg3KSk7XG4rXG4rXHQvKiByeCBvZmZzZXQgY2FsaWJyYXRpb24gc3RhcnQgKi9cbitcdHBoeV9zZXRfYml0c19tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSwgMHgzOSxcbitcdFx0XHQgQklUKDEzKSk7XG4rXG4rXHQvKiByeCBvZmZzZXQgY2FsaWJyYXRpb24gc3RvcCAqL1xuK1x0cGh5X2NsZWFyX2JpdHNfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIDB4MzksXG4rXHRcdFx0ICAgQklUKDEzKSk7XG4rXG4rXHRtZGVsYXkoMTApO1xuK1xuK1x0cGh5X2NsZWFyX2JpdHNfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIDB4MTcxLFxuK1x0XHRcdCAgIEJJVCg4KSB8IEJJVCg3KSk7XG4rXG4rXHRpZiAocGh5ZGV2LVx1MDAzZWRydi1cdTAwM2VwaHlfaWQgPT0gQUlST0hBX0dQSFlfSURfQU43NTgxKVxuK1x0XHRwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsXG4rXHRcdFx0ICAgICAgTVRLX1BIWV9SR19BTkFfQ0FMX1JHNiwgMHgxKTtcbitcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgaW50IGFpcm9oYV9jYWxfc3coc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgZW51bSBDQUxfSVRFTSBjYWxfaXRlbSxcbitcdFx0XHQgdTggc3RhcnRfcGFpciwgdTggZW5kX3BhaXIpXG4re1xuK1x0dTggcGFpcl9uO1xuK1x0aW50IHJldDtcbitcbitcdGZvciAocGFpcl9uID0gc3RhcnRfcGFpcjsgcGFpcl9uIFx1MDAzYz0gZW5kX3BhaXI7IHBhaXJfbisrKSB7XG4rXHRcdHN3aXRjaCAoY2FsX2l0ZW0pIHtcbitcdFx0Y2FzZSBSRVhUOlxuK1x0XHRcdHJldCA9IGFpcm9oYV9yZXh0X2NhbF9zdyhwaHlkZXYpO1xuK1x0XHRcdGJyZWFrO1xuK1x0XHRjYXNlIFRYX09GRlNFVDpcbitcdFx0XHRyZXQgPSBhaXJvaGFfdHhfb2Zmc2V0X2NhbF9zdyhwaHlkZXYsIHBhaXJfbik7XG4rXHRcdFx0YnJlYWs7XG4rXHRcdGNhc2UgVFhfQU1QOlxuK1x0XHRcdHJldCA9IGFpcm9oYV90eF9hbXBfY2FsX3N3KHBoeWRldiwgcGFpcl9uKTtcbitcdFx0XHRicmVhaztcbitcdFx0Y2FzZSBUWF9SNTA6XG4rXHRcdFx0cmV0ID0gYWlyb2hhX3R4X3I1MF9jYWxfc3cocGh5ZGV2LCBwYWlyX24pO1xuK1x0XHRcdGJyZWFrO1xuK1x0XHRjYXNlIFJYX09GRlNFVDpcbitcdFx0XHRyZXQgPSBhaXJvaGFfcnhfb2Zmc2V0X2NhbF9zdyhwaHlkZXYpO1xuK1x0XHRcdGJyZWFrO1xuK1x0XHRkZWZhdWx0OlxuK1x0XHRcdHJldHVybiAtRUlOVkFMO1xuK1x0XHR9XG4rXHRcdGlmIChyZXQpXG4rXHRcdFx0cmV0dXJuIHJldDtcbitcdH1cbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgaW50IGFpcm9oYV9zdGFydF9jYWwoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgZW51bSBDQUxfSVRFTSBjYWxfaXRlbSxcbitcdFx0XHQgICAgZW51bSBDQUxfTU9ERSBjYWxfbW9kZSwgdTggc3RhcnRfcGFpcixcbitcdFx0XHQgICAgdTggZW5kX3BhaXIsIHUzMiAqYnVmKVxuK3tcbitcdGludCByZXQ7XG4rXG4rXHRzd2l0Y2ggKGNhbF9tb2RlKSB7XG4rXHRjYXNlIFNXX006XG4rXHRcdHJldCA9IGFpcm9oYV9jYWxfc3cocGh5ZGV2LCBjYWxfaXRlbSwgc3RhcnRfcGFpciwgZW5kX3BhaXIpO1xuK1x0XHRicmVhaztcbitcdGRlZmF1bHQ6XG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1x0fVxuK1xuK1x0aWYgKHJldCkge1xuK1x0XHRwaHlkZXZfZXJyKHBoeWRldiwgXCJjYWwgJWQgZmFpbGVkXFxuXCIsIGNhbF9pdGVtKTtcbitcdFx0cmV0dXJuIC1FSU87XG4rXHR9XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rc3RhdGljIGludCBhaXJvaGFfcGh5X2NhbGliKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4re1xuK1x0c3RydWN0IGFpcm9oYV9zb2NwaHlfc2hhcmVkICpzaGFyZWQgPSBwaHlfcGFja2FnZV9nZXRfcHJpdihwaHlkZXYpO1xuK1x0c3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldl9wMDtcbitcdGludCByZXQ7XG4rXG4rXHRwaHlkZXZfcDAgPSBzaGFyZWQtXHUwMDNlcGh5ZGV2X3AwO1xuK1xuK1x0LyogUHJlQ2FsaWJyYXRlIFNldCAqL1xuK1x0cGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCAweDVjLCAweDY2NjYpO1xuK1xuK1x0aWYgKCFzaGFyZWQtXHUwMDNlcmV4dF9zd19jYWxpYl9kb25lKSB7XG4rXHRcdHJldCA9IGFpcm9oYV9zdGFydF9jYWwocGh5ZGV2LCBSRVhULCBTV19NLCBOT19QQUlSLCBOT19QQUlSLCBOVUxMKTtcbitcdFx0aWYgKHJldClcbitcdFx0XHRyZXR1cm4gcmV0O1xuK1xuK1x0XHRzaGFyZWQtXHUwMDNlcmV4dF9zd19jYWxpYl9kb25lID0gdHJ1ZTtcbitcdH1cbitcbitcdHJldCA9IGFpcm9oYV9zdGFydF9jYWwocGh5ZGV2LCBUWF9SNTAsIFNXX00sIFBBSVJfQSwgUEFJUl9ELCBOVUxMKTtcbitcdGlmIChyZXQpXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHRyZXQgPSBhaXJvaGFfc3RhcnRfY2FsKHBoeWRldiwgVFhfT0ZGU0VULCBTV19NLCBQQUlSX0EsIFBBSVJfRCwgTlVMTCk7XG4rXHRpZiAocmV0KVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0cmV0ID0gYWlyb2hhX3N0YXJ0X2NhbChwaHlkZXYsIFRYX0FNUCwgU1dfTSwgUEFJUl9BLCBQQUlSX0QsIE5VTEwpO1xuK1x0aWYgKHJldClcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdHJldCA9IGFpcm9oYV9zdGFydF9jYWwocGh5ZGV2LCBSWF9PRkZTRVQsIFNXX00sIE5PX1BBSVIsIE5PX1BBSVIsIE5VTEwpO1xuK1x0aWYgKHJldClcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdC8qIEdhdGluZywgc2hvcnQgd2l0aCBvdGhlciBwYWlyICovXG4rXHRwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIDB4MTUsIDB4MCk7XG4rXG4rXHRwaHlfd3JpdGVfbW1kKHBoeWRldl9wMCwgTURJT19NTURfVkVORDIsIDB4MTAwLCAweDApO1xuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK3N0YXRpYyBpbnQgYWlyb2hhX3BoeV9hdXRvX3NlbGVjdF90cmFuc2Zvcm1lcihzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuK3tcbitcdHN0cnVjdCBhaXJvaGFfc29jcGh5X3NoYXJlZCAqc2hhcmVkID0gcGh5X3BhY2thZ2VfZ2V0X3ByaXYocGh5ZGV2KTtcbitcdHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXZfcDA7XG4rXHR1OCBwaHlfb2Zmc2V0O1xuK1x0dTE2IGJtY3JfdG1wO1xuK1x0dTE2IHZhbDtcbitcdGludCBpO1xuK1xuK1x0cGh5ZGV2X3AwID0gc2hhcmVkLVx1MDAzZXBoeWRldl9wMDtcbitcdHBoeV9vZmZzZXQgPSBwaHlkZXYtXHUwMDNlbWRpby5hZGRyIC0gcGh5ZGV2X3AwLVx1MDAzZW1kaW8uYWRkcjtcbitcbitcdC8qIEZvcmNlIDFHIGZ1bGwgZHVwbGV4IGZvciBjYWxpYnJhdGlvbiAqL1xuK1x0Ym1jcl90bXAgPSBwaHlfcmVhZChwaHlkZXYsIE1JSV9CTUNSKTtcbitcdHBoeV93cml0ZShwaHlkZXYsIE1JSV9CTUNSLCBCTUNSX0ZVTExEUExYIHwgQk1DUl9TUEVFRDEwMDApO1xuK1xuK1x0cGh5X21vZGlmeV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMiwgMHgyNzEsIEdFTk1BU0soNCwgMCksXG4rXHRcdCAgICAgICBGSUVMRF9QUkVQKEdFTk1BU0soNCwgMCksIDB4MykpO1xuK1xuK1x0cGh5X21vZGlmeV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMiwgMHgyNjksIEdFTk1BU0soMTUsIDEyKSxcbitcdFx0ICAgICAgIEZJRUxEX1BSRVAoR0VOTUFTSygxNSwgMTIpLCAweDIpKTtcbitcbitcdHBoeV9tb2RpZnlfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDIsIDB4MjZmLCBHRU5NQVNLKDE0LCAxMiksXG4rXHRcdCAgICAgICBGSUVMRF9QUkVQKEdFTk1BU0soMTQsIDEyKSwgMHgwKSk7XG4rXG4rXHRwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIDB4ZGQsIEJJVCgxMikpO1xuK1xuK1x0cGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCBNVEtfUEhZX1JHX0RBU05fREFDX0lOMF9BLFxuK1x0XHQgICAgICAweDgwMDAgfCAweGYwKTtcbitcdHBoeV93cml0ZV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSwgTVRLX1BIWV9SR19EQVNOX0RBQ19JTjFfQSxcbitcdFx0ICAgICAgMHg4MDAwIHwgMHhmMCk7XG4rXHRwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIE1US19QSFlfUkdfREFTTl9EQUNfSU4wX0IsXG4rXHRcdCAgICAgIDB4ODAwMCB8IDB4ZjApO1xuK1x0cGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCBNVEtfUEhZX1JHX0RBU05fREFDX0lOMV9CLFxuK1x0XHQgICAgICAweDgwMDAgfCAweGYwKTtcbitcdHBoeV93cml0ZV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSwgTVRLX1BIWV9SR19EQVNOX0RBQ19JTjBfQyxcbitcdFx0ICAgICAgMHg4MDAwIHwgMHhmMCk7XG4rXHRwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIE1US19QSFlfUkdfREFTTl9EQUNfSU4xX0MsXG4rXHRcdCAgICAgIDB4ODAwMCB8IDB4ZjApO1xuK1x0cGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCBNVEtfUEhZX1JHX0RBU05fREFDX0lOMF9ELFxuK1x0XHQgICAgICAweDgwMDAgfCAweGYwKTtcbitcdHBoeV93cml0ZV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSwgTVRLX1BIWV9SR19EQVNOX0RBQ19JTjFfRCxcbitcdFx0ICAgICAgMHg4MDAwIHwgMHhmMCk7XG4rXG4rXHQvKiBGb3JjZSBwR0EgZ2FpbiAqL1xuK1x0cGh5X3NlbGVjdF9wYWdlKHBoeWRldiwgTVRLX1BIWV9QQUdFX0VYVEVOREVEXzUyQjUpO1xuK1x0X19tdGtfdHJfbW9kaWZ5KHBoeWRldiwgMHgxLCAweGYsIDB4MTAsXG4rXHRcdFx0R0VOTUFTSygyMCwgMTUpLFxuK1x0XHRcdEZJRUxEX1BSRVAoR0VOTUFTSygyMCwgMTUpLCAweDFmKSk7XG4rXG4rXHRfX210a190cl9tb2RpZnkocGh5ZGV2LCAweDEsIDB4ZiwgMHgxMSxcbitcdFx0XHRHRU5NQVNLKDIzLCAxOCkgfCBHRU5NQVNLKDE1LCAxMCkgfCBHRU5NQVNLKDcsIDIpLFxuK1x0XHRcdEZJRUxEX1BSRVAoR0VOTUFTSygyMywgMTgpLCAweDFmKSB8XG4rXHRcdFx0RklFTERfUFJFUChHRU5NQVNLKDE1LCAxMCksIDB4MWYpIHxcbitcdFx0XHRGSUVMRF9QUkVQKEdFTk1BU0soNywgMiksIDB4MWYpKTtcbitcdHBoeV9yZXN0b3JlX3BhZ2UocGh5ZGV2LCBNVEtfUEhZX1BBR0VfU1RBTkRBUkQsIDApO1xuK1xuK1x0cGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCAweGM5LCAweGZmZmYpO1xuK1x0cGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCAweDE1MSwgMHgxMik7XG4rXG4rXHRzd2l0Y2ggKHBoeV9vZmZzZXQpIHtcbitcdGNhc2UgMDpcbitcdFx0dmFsID0gMHgxO1xuK1x0XHRicmVhaztcbitcdGNhc2UgMTpcbitcdFx0dmFsID0gMHgzO1xuK1x0XHRicmVhaztcbitcdGNhc2UgMjpcbitcdFx0dmFsID0gMHg1O1xuK1x0XHRicmVhaztcbitcdGNhc2UgMzpcbitcdFx0dmFsID0gMHg3O1xuK1x0XHRicmVhaztcbitcdGRlZmF1bHQ6XG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1x0fVxuK1x0cGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQyLCAweDE1LFxuK1x0XHQgICAgICBGSUVMRF9QUkVQKEdFTk1BU0soMTQsIDEyKSwgdmFsKSB8IDB4MTYxKTtcbitcdG1kZWxheSg1MDApO1xuK1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgMzsgaSsrKVxuK1x0XHR2YWwgPSBwaHlfcmVhZF9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMiwgMHgxYSk7XG4rXG4rXHQvKiBDaGVjayB0aGUgdmFsdWUgYW5kIHJlcG9ydCB0cmFuc2Zvcm1lciB0eXBlIGZvciBsYXRlciAqL1xuK1x0c2hhcmVkLVx1MDAzZXRyYW5zZm9ybWVyX3R5cGVbcGh5X29mZnNldF0gPSB2YWwgXHUwMDNjIDB4ZTA7XG4rXG4rXHQvKiBTd2l0Y2ggdG8gRGVmYXVsdCAqL1xuK1x0cGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQyLCAweDE1LCAweDEwMDApO1xuK1xuK1x0cGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCAweGRkLCAweDApO1xuK1xuK1x0cGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCBNVEtfUEhZX1JHX0RBU05fREFDX0lOMF9BLFxuK1x0XHQgICAgICAweDApO1xuK1x0cGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCBNVEtfUEhZX1JHX0RBU05fREFDX0lOMV9BLFxuK1x0XHQgICAgICAweDApO1xuK1x0cGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCBNVEtfUEhZX1JHX0RBU05fREFDX0lOMF9CLFxuK1x0XHQgICAgICAweDApO1xuK1x0cGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCBNVEtfUEhZX1JHX0RBU05fREFDX0lOMV9CLFxuK1x0XHQgICAgICAweDApO1xuK1x0cGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCBNVEtfUEhZX1JHX0RBU05fREFDX0lOMF9DLFxuK1x0XHQgICAgICAweDApO1xuK1x0cGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCBNVEtfUEhZX1JHX0RBU05fREFDX0lOMV9DLFxuK1x0XHQgICAgICAweDApO1xuK1x0cGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCBNVEtfUEhZX1JHX0RBU05fREFDX0lOMF9ELFxuK1x0XHQgICAgICAweDApO1xuK1x0cGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCBNVEtfUEhZX1JHX0RBU05fREFDX0lOMV9ELFxuK1x0XHQgICAgICAweDApO1xuK1xuK1x0cGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCAweGM5LCAweGZmZik7XG4rXHRwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIDB4MTUxLCAweDApO1xuK1xuK1x0cGh5X3NlbGVjdF9wYWdlKHBoeWRldiwgTVRLX1BIWV9QQUdFX0VYVEVOREVEXzUyQjUpO1xuK1x0X19tdGtfdHJfbW9kaWZ5KHBoeWRldiwgMHgxLCAweGYsIDB4MTAsXG4rXHRcdFx0R0VOTUFTSygyMCwgMTUpLFxuK1x0XHRcdEZJRUxEX1BSRVAoR0VOTUFTSygyMCwgMTUpLCAweDQpKTtcbitcbitcdF9fbXRrX3RyX21vZGlmeShwaHlkZXYsIDB4MSwgMHhmLCAweDExLFxuK1x0XHRcdEdFTk1BU0soMjMsIDE4KSB8IEdFTk1BU0soMTUsIDEwKSB8IEdFTk1BU0soNywgMiksXG4rXHRcdFx0RklFTERfUFJFUChHRU5NQVNLKDIzLCAxOCksIDB4MCkgfFxuK1x0XHRcdEZJRUxEX1BSRVAoR0VOTUFTSygxNSwgMTApLCAweDApIHxcbitcdFx0XHRGSUVMRF9QUkVQKEdFTk1BU0soNywgMiksIDB4MCkpO1xuK1x0cGh5X3Jlc3RvcmVfcGFnZShwaHlkZXYsIE1US19QSFlfUEFHRV9TVEFOREFSRCwgMCk7XG4rXG4rXHQvKiBSZXN0b3JlIEJNQ1IgKi9cbitcdHBoeV93cml0ZShwaHlkZXYsIE1JSV9CTUNSLCBibWNyX3RtcCk7XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rc3RhdGljIGludCBhaXJvaGFfcGh5X3R4X2FtcF9jb21wZW5zYXRpb24oc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbit7XG4rXHRzdHJ1Y3QgYWlyb2hhX3NvY3BoeV9zaGFyZWQgKnNoYXJlZCA9IHBoeV9wYWNrYWdlX2dldF9wcml2KHBoeWRldik7XG4rXG4rXHR1MTYgcmVnXzFlXzEyX3JlYWQ7XG4rXHR1MTYgcmVnXzFlXzE2X3JlYWQ7XG4rXHR1MTYgcmVnXzFlXzE3X3JlYWQ7XG4rXHR1MTYgcmVnXzFlXzE4X3JlYWQ7XG4rXHR1MTYgcmVnXzFlXzE5X3JlYWQ7XG4rXHR1MTYgcmVnXzFlXzIwX3JlYWQ7XG4rXHR1MTYgcmVnXzFlXzIxX3JlYWQ7XG4rXHR1MTYgcmVnXzFlXzIyX3JlYWQ7XG4rXHR1MTYgcmVnXzFlXzE3NF9yZWFkO1xuK1x0dTE2IHJlZ18xZV8xNzVfcmVhZDtcbitcbitcdGludCByZWdfMWVfMTJfaGVhZGVyO1xuK1x0aW50IHJlZ18xZV8xNl9oZWFkZXI7XG4rXHRpbnQgcmVnXzFlXzE3X2hlYWRlcjtcbitcdGludCByZWdfMWVfMThfaGVhZGVyO1xuK1x0aW50IHJlZ18xZV8xOV9oZWFkZXI7XG4rXHRpbnQgcmVnXzFlXzIxX2hlYWRlcjtcbitcdGludCByZWdfMWVfMTc0X2hlYWRlcjtcbitcdGludCByZWdfMWVfMTc1X2hlYWRlcjtcbitcbitcdGludCByZWdfMWVfMTJfZW5kO1xuK1x0aW50IHJlZ18xZV8xNl9lbmQ7XG4rXHRpbnQgcmVnXzFlXzE3X2VuZDtcbitcdGludCByZWdfMWVfMThfZW5kO1xuK1x0aW50IHJlZ18xZV8yMF9lbmQ7XG4rXHRpbnQgcmVnXzFlXzIyX2VuZDtcbitcdGludCByZWdfMWVfMTc0X2VuZDtcbitcdGludCByZWdfMWVfMTc1X2VuZDtcbitcbitcdHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXZfcDA7XG4rXHR1OCBwaHlfb2Zmc2V0O1xuK1xuK1x0aW50IHR4YW1wX2xvd19saW1pdCA9IC0zO1xuK1x0aW50IHR4YW1wX2hpZ2hfbGltaXQgPSAweDQyO1xuK1xuK1x0aW50IHI1MF9sb3dfbGltaXQgPSAtODtcbitcdGludCByNTBfaGlnaF9saW1pdCA9IDB4ODg7XG4rXG4rXHRib29sIG92ZXJmbG93O1xuK1x0aW50ICgqdHhfYW1wX3RhYmxlKVtDQUxJQl9DT05TVF9UWVBFX01BWF1bNF07XG4rXHRpbnQgdHJhbnNmb3JtZXJfdHlwZSwgbWRpX3Jlc2lzdGVyX3R5cGU7XG4rXG4rXHRwaHlkZXZfcDAgPSBzaGFyZWQtXHUwMDNlcGh5ZGV2X3AwO1xuK1x0cGh5X29mZnNldCA9IHBoeWRldi1cdTAwM2VtZGlvLmFkZHIgLSBwaHlkZXZfcDAtXHUwMDNlbWRpby5hZGRyO1xuK1xuK1x0dHJhbnNmb3JtZXJfdHlwZSA9IHNoYXJlZC1cdTAwM2V0cmFuc2Zvcm1lcl90eXBlW3BoeV9vZmZzZXRdO1xuK1x0bWRpX3Jlc2lzdGVyX3R5cGUgPSBzaGFyZWQtXHUwMDNlbWRpX3Jlc2lzdGVyX3R5cGU7XG4rXHR0eF9hbXBfdGFibGUgPSBzaGFyZWQtXHUwMDNldHhfYW1wX2NvbXBlbnNhdGlvbl90YmxbdHJhbnNmb3JtZXJfdHlwZV1bbWRpX3Jlc2lzdGVyX3R5cGVdO1xuK1xuK1x0cmVnXzFlXzEyX3JlYWQgPSBwaHlfcmVhZF9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSwgMHgxMik7XG4rXHRyZWdfMWVfMTZfcmVhZCA9IHBoeV9yZWFkX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCAweDE2KTtcbitcdHJlZ18xZV8xN19yZWFkID0gcGh5X3JlYWRfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIDB4MTcpO1xuK1x0cmVnXzFlXzE4X3JlYWQgPSBwaHlfcmVhZF9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSwgMHgxOCk7XG4rXHRyZWdfMWVfMTlfcmVhZCA9IHBoeV9yZWFkX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCAweDE5KTtcbitcdHJlZ18xZV8yMF9yZWFkID0gcGh5X3JlYWRfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIDB4MjApO1xuK1x0cmVnXzFlXzIxX3JlYWQgPSBwaHlfcmVhZF9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSwgMHgyMSk7XG4rXHRyZWdfMWVfMjJfcmVhZCA9IHBoeV9yZWFkX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCAweDIyKTtcbitcdHJlZ18xZV8xNzRfcmVhZCA9IHBoeV9yZWFkX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCAweDE3NCk7XG4rXHRyZWdfMWVfMTc1X3JlYWQgPSBwaHlfcmVhZF9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSwgMHgxNzUpO1xuK1xuK1x0cmVnXzFlXzEyX2hlYWRlciA9ICgocmVnXzFlXzEyX3JlYWQgXHUwMDI2IDB4ZmMwMCkgLyAxMDI0KSArICp0eF9hbXBfdGFibGVbVFhfQU1QXzFHX0FdW3BoeV9vZmZzZXRdO1xuK1x0cmVnXzFlXzE3X2hlYWRlciA9ICgocmVnXzFlXzE3X3JlYWQgXHUwMDI2IDB4M2YwMCkgLyAyNTYpICsgKnR4X2FtcF90YWJsZVtUWF9BTVBfMUdfQl1bcGh5X29mZnNldF07XG4rXHRyZWdfMWVfMTlfaGVhZGVyID0gKChyZWdfMWVfMTlfcmVhZCBcdTAwMjYgMHgzZjAwKSAvIDI1NikgKyAqdHhfYW1wX3RhYmxlW1RYX0FNUF8xR19DXVtwaHlfb2Zmc2V0XTtcbitcdHJlZ18xZV8yMV9oZWFkZXIgPSAoKHJlZ18xZV8yMV9yZWFkIFx1MDAyNiAweDNmMDApIC8gMjU2KSArICp0eF9hbXBfdGFibGVbVFhfQU1QXzFHX0RdW3BoeV9vZmZzZXRdO1xuK1xuK1x0b3ZlcmZsb3cgPSBmYWxzZTtcbitcdGlmIChyZWdfMWVfMTJfaGVhZGVyIFx1MDAzYyB0eGFtcF9sb3dfbGltaXQgfHxcbitcdCAgICByZWdfMWVfMTJfaGVhZGVyIFx1MDAzZSB0eGFtcF9oaWdoX2xpbWl0KVxuK1x0XHRvdmVyZmxvdyA9IHRydWU7XG4rXHRpZiAocmVnXzFlXzE3X2hlYWRlciBcdTAwM2MgdHhhbXBfbG93X2xpbWl0IHx8XG4rXHQgICAgcmVnXzFlXzE3X2hlYWRlciBcdTAwM2UgdHhhbXBfaGlnaF9saW1pdClcbitcdFx0b3ZlcmZsb3cgPSB0cnVlO1xuK1x0aWYgKHJlZ18xZV8xOV9oZWFkZXIgXHUwMDNjIHR4YW1wX2xvd19saW1pdCB8fFxuK1x0ICAgIHJlZ18xZV8xOV9oZWFkZXIgXHUwMDNlIHR4YW1wX2hpZ2hfbGltaXQpXG4rXHRcdG92ZXJmbG93ID0gdHJ1ZTtcbitcdGlmIChyZWdfMWVfMjFfaGVhZGVyIFx1MDAzYyB0eGFtcF9sb3dfbGltaXQgfHxcbitcdCAgICByZWdfMWVfMjFfaGVhZGVyIFx1MDAzZSB0eGFtcF9oaWdoX2xpbWl0KVxuK1x0XHRvdmVyZmxvdyA9IHRydWU7XG4rXG4rXHRpZiAob3ZlcmZsb3cpIHtcbitcdFx0cmVnXzFlXzEyX2hlYWRlciA9IDB4MjA7XG4rXHRcdHJlZ18xZV8xN19oZWFkZXIgPSAweDIwO1xuK1x0XHRyZWdfMWVfMTlfaGVhZGVyID0gMHgyMDtcbitcdFx0cmVnXzFlXzIxX2hlYWRlciA9IDB4MjA7XG4rXHR9IGVsc2Uge1xuK1x0XHRpZiAocmVnXzFlXzEyX2hlYWRlciBcdTAwM2MgMClcbitcdFx0XHRyZWdfMWVfMTJfaGVhZGVyID0gMDtcbitcdFx0ZWxzZSBpZiAocmVnXzFlXzEyX2hlYWRlciBcdTAwM2UgMHgzZilcbitcdFx0XHRyZWdfMWVfMTJfaGVhZGVyID0gMHgzZjtcbitcdFx0aWYgKHJlZ18xZV8xN19oZWFkZXIgXHUwMDNjIDApXG4rXHRcdFx0cmVnXzFlXzE3X2hlYWRlciA9IDA7XG4rXHRcdGVsc2UgaWYgKHJlZ18xZV8xN19oZWFkZXIgXHUwMDNlIDB4M2YpXG4rXHRcdFx0cmVnXzFlXzE3X2hlYWRlciA9IDB4M2Y7XG4rXHRcdGlmIChyZWdfMWVfMTlfaGVhZGVyIFx1MDAzYyAwKVxuK1x0XHRcdHJlZ18xZV8xOV9oZWFkZXIgPSAwO1xuK1x0XHRlbHNlIGlmIChyZWdfMWVfMTlfaGVhZGVyIFx1MDAzZSAweDNmKVxuK1x0XHRcdHJlZ18xZV8xOV9oZWFkZXIgPSAweDNmO1xuK1x0XHRpZiAocmVnXzFlXzIxX2hlYWRlciBcdTAwM2MgMClcbitcdFx0XHRyZWdfMWVfMjFfaGVhZGVyID0gMDtcbitcdFx0ZWxzZSBpZiAocmVnXzFlXzIxX2hlYWRlciBcdTAwM2UgMHgzZilcbitcdFx0XHRyZWdfMWVfMjFfaGVhZGVyID0gMHgzZjtcbitcdH1cbitcbitcdHJlZ18xZV8xNl9lbmQgPSAocmVnXzFlXzE2X3JlYWQgXHUwMDI2IDB4MDAzZikgKyAqdHhfYW1wX3RhYmxlW1RYX0FNUF9URVNUX0FdW3BoeV9vZmZzZXRdO1xuK1x0cmVnXzFlXzE4X2VuZCA9IChyZWdfMWVfMThfcmVhZCBcdTAwMjYgMHgwMDNmKSArICp0eF9hbXBfdGFibGVbVFhfQU1QX1RFU1RfQl1bcGh5X29mZnNldF07XG4rXHRyZWdfMWVfMjBfZW5kID0gKHJlZ18xZV8yMF9yZWFkIFx1MDAyNiAweDAwM2YpICsgKnR4X2FtcF90YWJsZVtUWF9BTVBfVEVTVF9DXVtwaHlfb2Zmc2V0XTtcbitcdHJlZ18xZV8yMl9lbmQgPSAocmVnXzFlXzIyX3JlYWQgXHUwMDI2IDB4MDAzZikgKyAqdHhfYW1wX3RhYmxlW1RYX0FNUF9URVNUX0RdW3BoeV9vZmZzZXRdO1xuK1xuK1x0b3ZlcmZsb3cgPSBmYWxzZTtcbitcdGlmIChyZWdfMWVfMTZfZW5kIFx1MDAzYyB0eGFtcF9sb3dfbGltaXQgfHxcbitcdCAgICByZWdfMWVfMTZfZW5kIFx1MDAzZSB0eGFtcF9oaWdoX2xpbWl0KVxuK1x0XHRvdmVyZmxvdyA9IHRydWU7XG4rXHRpZiAocmVnXzFlXzE4X2VuZCBcdTAwM2MgdHhhbXBfbG93X2xpbWl0IHx8XG4rXHQgICAgcmVnXzFlXzE4X2VuZCBcdTAwM2UgdHhhbXBfaGlnaF9saW1pdClcbitcdFx0b3ZlcmZsb3cgPSB0cnVlO1xuK1x0aWYgKHJlZ18xZV8yMF9lbmQgXHUwMDNjIHR4YW1wX2xvd19saW1pdCB8fFxuK1x0ICAgIHJlZ18xZV8yMF9lbmQgXHUwMDNlIHR4YW1wX2hpZ2hfbGltaXQpXG4rXHRcdG92ZXJmbG93ID0gdHJ1ZTtcbitcdGlmIChyZWdfMWVfMjJfZW5kIFx1MDAzYyB0eGFtcF9sb3dfbGltaXQgfHxcbitcdCAgICByZWdfMWVfMjJfZW5kIFx1MDAzZSB0eGFtcF9oaWdoX2xpbWl0KVxuK1x0XHRvdmVyZmxvdyA9IHRydWU7XG4rXG4rXHRpZiAob3ZlcmZsb3cpIHtcbitcdFx0cmVnXzFlXzE2X2VuZCA9IDB4MjA7XG4rXHRcdHJlZ18xZV8xOF9lbmQgPSAweDIwO1xuK1x0XHRyZWdfMWVfMjBfZW5kID0gMHgyMDtcbitcdFx0cmVnXzFlXzIyX2VuZCA9IDB4MjA7XG4rXHR9IGVsc2Uge1xuK1x0XHRpZiAocmVnXzFlXzE2X2VuZCBcdTAwM2MgMClcbitcdFx0XHRyZWdfMWVfMTZfZW5kID0gMDtcbitcdFx0ZWxzZSBpZiAocmVnXzFlXzE2X2VuZCBcdTAwM2UgMHgzZilcbitcdFx0XHRyZWdfMWVfMTZfZW5kID0gMHgzZjtcbitcdFx0aWYgKHJlZ18xZV8xOF9lbmQgXHUwMDNjIDApXG4rXHRcdFx0cmVnXzFlXzE4X2VuZCA9IDA7XG4rXHRcdGVsc2UgaWYgKHJlZ18xZV8xOF9lbmQgXHUwMDNlIDB4M2YpXG4rXHRcdFx0cmVnXzFlXzE4X2VuZCA9IDB4M2Y7XG4rXHRcdGlmIChyZWdfMWVfMjBfZW5kIFx1MDAzYyAwKVxuK1x0XHRcdHJlZ18xZV8yMF9lbmQgPSAwO1xuK1x0XHRlbHNlIGlmIChyZWdfMWVfMjBfZW5kIFx1MDAzZSAweDNmKVxuK1x0XHRcdHJlZ18xZV8yMF9lbmQgPSAweDNmO1xuK1x0XHRpZiAocmVnXzFlXzIyX2VuZCBcdTAwM2MgMClcbitcdFx0XHRyZWdfMWVfMjJfZW5kID0gMDtcbitcdFx0ZWxzZSBpZiAocmVnXzFlXzIyX2VuZCBcdTAwM2UgMHgzZilcbitcdFx0XHRyZWdfMWVfMjJfZW5kID0gMHgzZjtcbitcdH1cbitcbitcdHJlZ18xZV8xNl9oZWFkZXIgPSAoKHJlZ18xZV8xNl9yZWFkIFx1MDAyNiAweGZjMDApIC8gMTAyNCkgKyAqdHhfYW1wX3RhYmxlW1RYX0FNUF8xMDBNX0FdW3BoeV9vZmZzZXRdO1xuK1x0cmVnXzFlXzE4X2hlYWRlciA9ICgocmVnXzFlXzE4X3JlYWQgXHUwMDI2IDB4M2YwMCkgLyAyNTYpICsgKnR4X2FtcF90YWJsZVtUWF9BTVBfMTAwTV9CXVtwaHlfb2Zmc2V0XTtcbitcbitcdG92ZXJmbG93ID0gZmFsc2U7XG4rXHRpZiAocmVnXzFlXzE2X2hlYWRlciBcdTAwM2MgdHhhbXBfbG93X2xpbWl0IHx8XG4rXHQgICAgcmVnXzFlXzE2X2hlYWRlciBcdTAwM2UgdHhhbXBfaGlnaF9saW1pdClcbitcdFx0b3ZlcmZsb3cgPSB0cnVlO1xuK1x0aWYgKHJlZ18xZV8xOF9oZWFkZXIgXHUwMDNjIHR4YW1wX2xvd19saW1pdCB8fFxuK1x0ICAgIHJlZ18xZV8xOF9oZWFkZXIgXHUwMDNlIHR4YW1wX2hpZ2hfbGltaXQpXG4rXHRcdG92ZXJmbG93ID0gdHJ1ZTtcbitcbitcdGlmIChvdmVyZmxvdykge1xuK1x0XHRyZWdfMWVfMTZfaGVhZGVyID0gMHgyMDtcbitcdFx0cmVnXzFlXzE4X2hlYWRlciA9IDB4MjA7XG4rXHR9IGVsc2Uge1xuK1x0XHRpZiAocmVnXzFlXzE2X2hlYWRlciBcdTAwM2MgMClcbitcdFx0XHRyZWdfMWVfMTZfaGVhZGVyID0gMDtcbitcdFx0ZWxzZSBpZiAocmVnXzFlXzE2X2hlYWRlciBcdTAwM2UgMHgzZilcbitcdFx0XHRyZWdfMWVfMTZfaGVhZGVyID0gMHgzZjtcbitcdFx0aWYgKHJlZ18xZV8xOF9oZWFkZXIgXHUwMDNjIDApXG4rXHRcdFx0cmVnXzFlXzE4X2hlYWRlciA9IDA7XG4rXHRcdGVsc2UgaWYgKHJlZ18xZV8xOF9oZWFkZXIgXHUwMDNlIDB4M2YpXG4rXHRcdFx0cmVnXzFlXzE4X2hlYWRlciA9IDB4M2Y7XG4rXHR9XG4rXG4rXHRyZWdfMWVfMTJfZW5kID0gKHJlZ18xZV8xMl9yZWFkIFx1MDAyNiAweDAwM2YpICsgKnR4X2FtcF90YWJsZVtUWF9BTVBfMTBNX0FdW3BoeV9vZmZzZXRdO1xuK1x0cmVnXzFlXzE3X2VuZCA9IChyZWdfMWVfMTdfcmVhZCBcdTAwMjYgMHgwMDNmKSArICp0eF9hbXBfdGFibGVbVFhfQU1QXzEwTV9CXVtwaHlfb2Zmc2V0XTtcbitcbitcdG92ZXJmbG93ID0gZmFsc2U7XG4rXHRpZiAocmVnXzFlXzEyX2VuZCBcdTAwM2MgdHhhbXBfbG93X2xpbWl0IHx8XG4rXHQgICAgcmVnXzFlXzEyX2VuZCBcdTAwM2UgdHhhbXBfaGlnaF9saW1pdClcbitcdFx0b3ZlcmZsb3cgPSB0cnVlO1xuK1x0aWYgKHJlZ18xZV8xN19lbmQgXHUwMDNjIHR4YW1wX2xvd19saW1pdCB8fFxuK1x0ICAgIHJlZ18xZV8xN19lbmQgXHUwMDNlIHR4YW1wX2hpZ2hfbGltaXQpXG4rXHRcdG92ZXJmbG93ID0gdHJ1ZTtcbitcbitcdGlmIChvdmVyZmxvdykge1xuK1x0XHRyZWdfMWVfMTJfZW5kID0gMHgyMDtcbitcdFx0cmVnXzFlXzE3X2VuZCA9IDB4MjA7XG4rXHR9IGVsc2Uge1xuK1x0XHRpZiAocmVnXzFlXzEyX2VuZCBcdTAwM2MgMClcbitcdFx0XHRyZWdfMWVfMTJfZW5kID0gMDtcbitcdFx0ZWxzZSBpZiAocmVnXzFlXzEyX2VuZCBcdTAwM2UgMHgzZilcbitcdFx0XHRyZWdfMWVfMTJfZW5kID0gMHgzZjtcbitcdFx0aWYgKHJlZ18xZV8xN19lbmQgXHUwMDNjIDApXG4rXHRcdFx0cmVnXzFlXzE3X2VuZCA9IDA7XG4rXHRcdGVsc2UgaWYgKHJlZ18xZV8xN19lbmQgXHUwMDNlIDB4M2YpXG4rXHRcdFx0cmVnXzFlXzE3X2VuZCA9IDB4M2Y7XG4rXHR9XG4rXG4rXHRyZWdfMWVfMTc0X2hlYWRlciA9ICgocmVnXzFlXzE3NF9yZWFkIFx1MDAyNiAweDdmMDApIC8gMjU2KSArICp0eF9hbXBfdGFibGVbUjUwX0FdW3BoeV9vZmZzZXRdO1xuK1x0cmVnXzFlXzE3NF9lbmQgPSAocmVnXzFlXzE3NF9yZWFkIFx1MDAyNiAweDAwN2YpICsgKnR4X2FtcF90YWJsZVtSNTBfQl1bcGh5X29mZnNldF07XG4rXHRyZWdfMWVfMTc1X2hlYWRlciA9ICgocmVnXzFlXzE3NV9yZWFkIFx1MDAyNiAweDdmMDApIC8gMjU2KSArICp0eF9hbXBfdGFibGVbUjUwX0NdW3BoeV9vZmZzZXRdO1xuK1x0cmVnXzFlXzE3NV9lbmQgPSAocmVnXzFlXzE3NV9yZWFkIFx1MDAyNiAweDAwN2YpICsgKnR4X2FtcF90YWJsZVtSNTBfRF1bcGh5X29mZnNldF07XG4rXG4rXHRvdmVyZmxvdyA9IGZhbHNlO1xuK1x0aWYgKHJlZ18xZV8xNzRfaGVhZGVyIFx1MDAzYyByNTBfbG93X2xpbWl0IHx8XG4rXHQgICAgcmVnXzFlXzE3NF9oZWFkZXIgXHUwMDNlIHI1MF9oaWdoX2xpbWl0KVxuK1x0XHRvdmVyZmxvdyA9IHRydWU7XG4rXHRpZiAocmVnXzFlXzE3NF9lbmQgXHUwMDNjIHI1MF9sb3dfbGltaXQgfHxcbitcdCAgICByZWdfMWVfMTc0X2VuZCBcdTAwM2UgcjUwX2hpZ2hfbGltaXQpXG4rXHRcdG92ZXJmbG93ID0gdHJ1ZTtcbitcdGlmIChyZWdfMWVfMTc1X2hlYWRlciBcdTAwM2MgcjUwX2xvd19saW1pdCB8fFxuK1x0ICAgIHJlZ18xZV8xNzVfaGVhZGVyIFx1MDAzZSByNTBfaGlnaF9saW1pdClcbitcdFx0b3ZlcmZsb3cgPSB0cnVlO1xuK1x0aWYgKHJlZ18xZV8xNzVfZW5kIFx1MDAzYyByNTBfbG93X2xpbWl0IHx8XG4rXHQgICAgcmVnXzFlXzE3NV9lbmQgXHUwMDNlIHI1MF9oaWdoX2xpbWl0KVxuK1x0XHRvdmVyZmxvdyA9IHRydWU7XG4rXG4rXHRpZiAob3ZlcmZsb3cpIHtcbitcdFx0cmVnXzFlXzE3NF9oZWFkZXIgPSAweDM0O1xuK1x0XHRyZWdfMWVfMTc0X2VuZCA9IDB4MzQ7XG4rXHRcdHJlZ18xZV8xNzVfaGVhZGVyID0gMHgzNDtcbitcdFx0cmVnXzFlXzE3NV9lbmQgPSAweDM0O1xuK1x0fSBlbHNlIHtcbitcdFx0aWYgKHJlZ18xZV8xNzRfaGVhZGVyIFx1MDAzYyAwKVxuK1x0XHRcdHJlZ18xZV8xNzRfaGVhZGVyID0gMDtcbitcdFx0ZWxzZSBpZiAocmVnXzFlXzE3NF9oZWFkZXIgXHUwMDNlIDB4N2YpXG4rXHRcdFx0cmVnXzFlXzE3NF9oZWFkZXIgPSAweDdmO1xuK1x0XHRpZiAocmVnXzFlXzE3NF9lbmQgXHUwMDNjIDApXG4rXHRcdFx0cmVnXzFlXzE3NF9lbmQgPSAwO1xuK1x0XHRlbHNlIGlmIChyZWdfMWVfMTc0X2VuZCBcdTAwM2UgMHg3ZilcbitcdFx0XHRyZWdfMWVfMTc0X2VuZCA9IDB4N2Y7XG4rXHRcdGlmIChyZWdfMWVfMTc1X2hlYWRlciBcdTAwM2MgMClcbitcdFx0XHRyZWdfMWVfMTc1X2hlYWRlciA9IDA7XG4rXHRcdGVsc2UgaWYgKHJlZ18xZV8xNzVfaGVhZGVyIFx1MDAzZSAweDdmKVxuK1x0XHRcdHJlZ18xZV8xNzVfaGVhZGVyID0gMHg3ZjtcbitcdFx0aWYgKHJlZ18xZV8xNzVfZW5kIFx1MDAzYyAwKVxuK1x0XHRcdHJlZ18xZV8xNzVfZW5kID0gMDtcbitcdFx0ZWxzZSBpZiAocmVnXzFlXzE3NV9lbmQgXHUwMDNlIDB4N2YpXG4rXHRcdFx0cmVnXzFlXzE3NV9lbmQgPSAweDdmO1xuK1x0fVxuK1xuK1x0cGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCAweDEyLFxuK1x0XHQgICAgICAocmVnXzFlXzEyX2hlYWRlciAqIDEwMjQpICsgcmVnXzFlXzEyX2VuZCk7XG4rXHRwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIDB4MTYsXG4rXHRcdCAgICAgIChyZWdfMWVfMTZfaGVhZGVyICogMTAyNCkgKyByZWdfMWVfMTZfZW5kKTtcbitcdHBoeV93cml0ZV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSwgMHgxNyxcbitcdFx0ICAgICAgKHJlZ18xZV8xN19oZWFkZXIgKiAyNTYpICsgcmVnXzFlXzE3X2VuZCk7XG4rXHRwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIDB4MTgsXG4rXHRcdCAgICAgIChyZWdfMWVfMThfaGVhZGVyICogMjU2KSArIHJlZ18xZV8xOF9lbmQpO1xuK1x0cGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCAweDE5LFxuK1x0XHQgICAgICAocmVnXzFlXzE5X3JlYWQgXHUwMDI2IDB4MDBmZikgKyAocmVnXzFlXzE5X2hlYWRlciAqIDI1NikpO1xuK1x0cGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCAweDIwLFxuK1x0XHQgICAgICAocmVnXzFlXzIwX3JlYWQgXHUwMDI2IDB4ZmYwMCkgKyByZWdfMWVfMjBfZW5kKTtcbitcdHBoeV93cml0ZV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSwgMHgyMSxcbitcdFx0ICAgICAgKHJlZ18xZV8yMV9yZWFkIFx1MDAyNiAweDAwZmYpICsgKHJlZ18xZV8yMV9oZWFkZXIgKiAyNTYpKTtcbitcdHBoeV93cml0ZV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSwgMHgyMixcbitcdFx0ICAgICAgKHJlZ18xZV8yMl9yZWFkIFx1MDAyNiAweGZmMDApICsgcmVnXzFlXzIyX2VuZCk7XG4rXHRwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIDB4MTc0LFxuK1x0XHQgICAgICAweDgwODAgKyAocmVnXzFlXzE3NF9oZWFkZXIgKiAyNTYpICsgcmVnXzFlXzE3NF9lbmQpO1xuK1x0cGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCAweDE3NSxcbitcdFx0ICAgICAgMHg4MDgwICsgKHJlZ18xZV8xNzVfaGVhZGVyICogMjU2KSArIHJlZ18xZV8xNzVfZW5kKTtcbitcbitcdHBoeV93cml0ZV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSwgMHgxNzYsIDB4NDQwMCk7XG4rXHRwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIDB4MTc3LCAweDAwNDQpO1xuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK3N0YXRpYyBpbnQgYW43NTgxX3BoeV9jb25maWdfaW5pdChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuK3tcbitcdHN0cnVjdCBhaXJvaGFfc29jcGh5X3NoYXJlZCAqc2hhcmVkID0gcGh5X3BhY2thZ2VfZ2V0X3ByaXYocGh5ZGV2KTtcbitcdHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXZfcDA7XG4rXHR1MzIgc29jX3BkaWRyO1xuK1x0dTggcGh5X29mZnNldDtcbitcdGludCByZXQ7XG4rXG4rXHRwaHlkZXZfcDAgPSBzaGFyZWQtXHUwMDNlcGh5ZGV2X3AwO1xuK1x0cGh5X29mZnNldCA9IHBoeWRldi1cdTAwM2VtZGlvLmFkZHIgLSBwaHlkZXZfcDAtXHUwMDNlbWRpby5hZGRyO1xuK1xuK1x0LyogRklYTUU6IFJlYWQgU29DIFBESURSIGlmIGF2YWlsYWJsZSBvciBkZWZhdWx0IHRvIDEgKi9cbitcdHNvY19wZGlkciA9IDE7XG4rXG4rXHRzaGFyZWQtXHUwMDNlbWRpX3Jlc2lzdGVyX3R5cGUgPSBNRElfNVI7XG4rXHRpZiAoc29jX3BkaWRyID09IDEpXG4rXHRcdHNoYXJlZC1cdTAwM2V0eF9hbXBfY29tcGVuc2F0aW9uX3RibCA9IFx1MDAyNmFuNzU4MV90eF9hbXBfY29tcGVuc2F0aW9uX3RibFswXTtcbitcdGVsc2VcbitcdFx0c2hhcmVkLVx1MDAzZXR4X2FtcF9jb21wZW5zYXRpb25fdGJsID0gXHUwMDI2YW43NTgxX3R4X2FtcF9jb21wZW5zYXRpb25fdGJsWzFdO1xuK1x0c2hhcmVkLVx1MDAzZXI1MF9jYWxfdGJsID0gYW43NTgxX3pjYWxfdG9fcjQ1b2htO1xuK1xuK1x0cmV0ID0gYWlyb2hhX3BoeV9jYWxpYihwaHlkZXYpO1xuK1x0aWYgKHJldClcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdHJldCA9IGFpcm9oYV9waHlfYXV0b19zZWxlY3RfdHJhbnNmb3JtZXIocGh5ZGV2KTtcbitcdGlmIChyZXQpXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHRyZXQgPSBhaXJvaGFfcGh5X3R4X2FtcF9jb21wZW5zYXRpb24ocGh5ZGV2KTtcbitcdGlmIChyZXQpXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHQvKiBSWCBzZXR0aW5nIGZvciA1Ul9UWE1SIGJlZm9yZSBBTiBzZXR0aW5nICovXG4rXHRwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIDB4ZTYsIDB4MTExMSk7XG4rXHRwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIDB4ZTcsIDB4NTU1NSk7XG4rXHRwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIDB4ZTksIDB4MDAwMSk7XG4rXHRwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIDB4ZmUsIDB4MDAwMCk7XG4rXG4rXHQvKiBMb25nIExvb3AgUmVhY2ggc2V0dGluZyAqL1xuK1x0cGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCAweDExLCAweGZmMDApO1xuK1x0cGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQyLCAweDIwMiwgMHgyMzEwKTtcbitcdHBoeV93cml0ZV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMiwgMHgyMDMsIDB4MDAyNSk7XG4rXHRwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDIsIDB4MjA0LCAweDIzMTApO1xuK1x0cGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQyLCAweDIwNSwgMHgwMDI1KTtcbitcdHBoeV93cml0ZV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMiwgMHgyMDYsIDB4MjMxMCk7XG4rXHRwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDIsIDB4MjA3LCAweDAwMjUpO1xuK1x0cGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQyLCAweDIwOCwgMHgyMzEwKTtcbitcdHBoeV93cml0ZV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMiwgMHgyMDksIDB4MDAyNSk7XG4rXHRwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDIsIDB4MjBhLCAweDIzMTApO1xuK1x0cGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQyLCAweDIwYiwgMHgwMDI1KTtcbitcdHBoeV93cml0ZV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMiwgMHgyMGUsIDB4MjMxMCk7XG4rXHRwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDIsIDB4MjBmLCAweDAwMjUpO1xuK1x0cGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQyLCAweDIxMCwgMHgyMzEwKTtcbitcdHBoeV93cml0ZV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMiwgMHgyMTEsIDB4MDAyNSk7XG4rXHRwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDIsIDB4MjEyLCAweDIzMTApO1xuK1x0cGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQyLCAweDIxMywgMHgwMDI1KTtcbitcdHBoeV93cml0ZV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMiwgMHgyMTQsIDB4MjMxMCk7XG4rXHRwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDIsIDB4MjE1LCAweDAwMjUpO1xuK1x0cGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQyLCAweDIxNiwgMHgyMzEwKTtcbitcdHBoeV93cml0ZV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMiwgMHgyMTcsIDB4MDAyNSk7XG4rXHRwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDIsIDB4MjFhLCAweDIzMTApO1xuK1x0cGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQyLCAweDIxYiwgMHgwMDI1KTtcbitcdHBoeV93cml0ZV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMiwgMHgyMWMsIDB4MjMxMCk7XG4rXHRwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDIsIDB4MjFkLCAweDAwMjUpO1xuK1x0cGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQyLCAweDIxZSwgMHgyMzEwKTtcbitcdHBoeV93cml0ZV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMiwgMHgyMWYsIDB4MDAyNSk7XG4rXHRwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDIsIDB4MjIwLCAweDIzMTApO1xuK1x0cGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQyLCAweDIyMSwgMHgwMDI1KTtcbitcdHBoeV93cml0ZV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMiwgMHgyMjIsIDB4MjMxMCk7XG4rXHRwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDIsIDB4MjIzLCAweDAwMjUpO1xuK1x0cGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQyLCAweDIyNiwgMHgyMzEwKTtcbitcdHBoeV93cml0ZV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMiwgMHgyMjcsIDB4MDAyNSk7XG4rXHRwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDIsIDB4MjI4LCAweDIzMTApO1xuK1x0cGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQyLCAweDIyOSwgMHgwMDI1KTtcbitcdHBoeV93cml0ZV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMiwgMHgyMmEsIDB4MjMxMCk7XG4rXHRwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDIsIDB4MjJiLCAweDAwMjUpO1xuK1x0cGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQyLCAweDIyYywgMHgyMzEwKTtcbitcdHBoeV93cml0ZV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMiwgMHgyMmQsIDB4MDAyNSk7XG4rXHRwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDIsIDB4MjJlLCAweDIzMTApO1xuK1x0cGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQyLCAweDIyZiwgMHgwMDI1KTtcbitcbitcdC8qIFJYIFNldHRpbmcgKi9cbitcdHBoeV93cml0ZV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSwgMHgzYywgMHhjMDAwKTtcbitcdHBoeV93cml0ZV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSwgMHgzZCwgMHgwMDAwKTtcbitcdHBoeV93cml0ZV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSwgMHgzZSwgMHhjMDAwKTtcbitcbitcdC8qIEVFRSBzZXR0aW5nICovXG4rXHRwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfQU4sIDB4M2MsIDB4MDAwMCk7XG4rXG4rXHQvKiBSWCAqL1xuK1x0cGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQyLCAweDQxLCAweDMzMzMpO1xuK1x0cGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQyLCAweDQ0LCAweDAwYzApO1xuK1xuK1x0LyogMTBNIHNldHRpbmdzICovXG4rXHRwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIDB4MWEzLCAweDAwZDIpO1xuK1x0cGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCAweDFhNCwgMHgwMTBlKTtcbitcdHBoeV93cml0ZV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMiwgMHgyN2IsIDB4MTE3Nyk7XG4rXHRwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDIsIDB4MjdjLCAweDA4MDgpO1xuK1xuK1x0cGh5X3NlbGVjdF9wYWdlKHBoeWRldiwgTVRLX1BIWV9QQUdFX0VYVEVOREVEXzEpO1xuK1x0X19waHlfd3JpdGUocGh5ZGV2LCAweDE0LCAweDNhMTgpO1xuK1x0cGh5X3Jlc3RvcmVfcGFnZShwaHlkZXYsIE1US19QSFlfUEFHRV9TVEFOREFSRCwgMCk7XG4rXG4rXHRwaHlfd3JpdGUocGh5ZGV2LCAweDksIDB4MWUwMCk7XG4rXG4rXHRwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDIsIDB4MjY5LCAweDIxMTQpO1xuK1x0cGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQyLCAweDI2YSwgMHgxMTEzKTtcbitcdHBoeV93cml0ZV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMiwgMHgyNmYsIDB4MDAwMCk7XG4rXHRwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDIsIDB4MjcxLCAweDJjNjMpO1xuK1x0cGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQyLCAweDI3MiwgMHgwYzJiKTtcbitcbitcdC8qIEVFRSBzZXQgYmVjYXVzZSBwb3dlciBkb3duIGNhbid0IHNldCB0b2tlbnJpbmcgKi9cbitcdHBoeV9zZWxlY3RfcGFnZShwaHlkZXYsIE1US19QSFlfUEFHRV9FWFRFTkRFRF81MkI1KTtcbitcdF9fbXRrX3RyX3dyaXRlKHBoeWRldiwgMHgwLCAweDcsIDB4MTUsIDB4MDA1NWEwKTtcbitcdF9fbXRrX3RyX3dyaXRlKHBoeWRldiwgMHgwLCAweDcsIDB4MTcsIDB4MDdmZjNmKTtcbitcdF9fbXRrX3RyX3dyaXRlKHBoeWRldiwgMHgxLCAweGYsIDB4MCwgMHgwMDAwMWUpO1xuK1x0X19tdGtfdHJfd3JpdGUocGh5ZGV2LCAweDEsIDB4ZiwgMHgxLCAweDZmYjkwYSk7XG4rXHRfX210a190cl93cml0ZShwaHlkZXYsIDB4MSwgMHhmLCAweDE4LCAweDBlMmYwMCk7XG4rXHRfX210a190cl93cml0ZShwaHlkZXYsIDB4MSwgMHhkLCAweDI2LCAweDQ0NDQ0NCk7XG4rXHRfX210a190cl93cml0ZShwaHlkZXYsIDB4MiwgMHhkLCAweDMsIDB4MDAwMDA0KTtcbitcdF9fbXRrX3RyX3dyaXRlKHBoeWRldiwgMHgyLCAweGQsIDB4NiwgMHgyZWJhZWYpO1xuK1x0X19tdGtfdHJfd3JpdGUocGh5ZGV2LCAweDIsIDB4ZCwgMHg4LCAweDAwMDAwYik7XG4rXHRfX210a190cl93cml0ZShwaHlkZXYsIDB4MiwgMHhkLCAweGMsIDB4MDA1MDRkKTtcbitcdF9fbXRrX3RyX3dyaXRlKHBoeWRldiwgMHgyLCAweGQsIDB4ZCwgMHgwMjMxNGYpO1xuK1x0X19tdGtfdHJfd3JpdGUocGh5ZGV2LCAweDIsIDB4ZCwgMHhmLCAweDAwMzAyOCk7XG4rXHRfX210a190cl93cml0ZShwaHlkZXYsIDB4MiwgMHhkLCAweDEwLCAweDAwMDAwYSk7XG4rXHRfX210a190cl93cml0ZShwaHlkZXYsIDB4MiwgMHhkLCAweDExLCAweDA0MDAwMSk7XG4rXHRfX210a190cl93cml0ZShwaHlkZXYsIDB4MiwgMHhkLCAweDE0LCAweDAwMDI0YSk7XG4rXHRfX210a190cl93cml0ZShwaHlkZXYsIDB4MiwgMHhkLCAweDFjLCAweDAwMzIxMCk7XG4rXHRwaHlfcmVzdG9yZV9wYWdlKHBoeWRldiwgTVRLX1BIWV9QQUdFX1NUQU5EQVJELCAwKTtcbitcbitcdHBoeV93cml0ZV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSwgMHgxMjAsIDB4ODAxNCk7XG4rXHRwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIDB4MTIyLCAweGZmZmYpO1xuK1x0cGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCAweDE0NCwgMHgwMjAwKTtcbitcdHBoeV93cml0ZV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSwgMHgxNGEsIDB4ZWUyMCk7XG4rXHRwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIDB4MTliLCAweDAxMTEpO1xuK1x0cGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCAweDIzNCwgMHgxMTgxKTtcbitcdHBoeV93cml0ZV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSwgMHgyMzgsIDB4MDEyMCk7XG4rXHRwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIDB4MjM5LCAweDAxMTcpO1xuK1x0cGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCAweDJkMSwgMHgwNzMzKTtcbitcdHBoeV93cml0ZV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSwgMHgzMjMsIDB4MDAxMSk7XG4rXHRwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIDB4MzI0LCAweDAxM2YpO1xuK1x0cGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCAweDMyNiwgMHgwMDM3KTtcbitcdHBoeV93cml0ZV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMiwgMHgyNjgsIDB4MDdmNCk7XG4rXG4rXHRpZiAoc2hhcmVkLVx1MDAzZXRyYW5zZm9ybWVyX3R5cGVbcGh5X29mZnNldF0gPT0gVFhNUikge1xuK1x0XHRwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIDB4MDAsIDB4MDE4Nyk7XG4rXHRcdHBoeV93cml0ZV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSwgMHgwMSwgMHgwMWNjKTtcbitcdFx0cGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCAweDAyLCAweDAxYzIpO1xuK1x0XHRwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIDB4MDMsIDB4MDEwOSk7XG4rXHRcdHBoeV93cml0ZV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSwgMHgwNCwgMHgwMjBiKTtcbitcdFx0cGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCAweDA1LCAweDAyMDIpO1xuK1x0XHRwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIDB4MDYsIDB4MDM4Nyk7XG4rXHRcdHBoeV93cml0ZV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSwgMHgwNywgMHgwM2M1KTtcbitcdFx0cGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCAweDA4LCAweDAzYzIpO1xuK1x0XHRwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIDB4MDksIDB4MDMwOSk7XG4rXHRcdHBoeV93cml0ZV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSwgMHgwYSwgMHgwMDBlKTtcbitcdFx0cGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCAweDBiLCAweDAwMDIpO1xuK1xuK1x0XHRwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIDB4MjMsIDB4MDg4MCk7XG4rXHRcdHBoeV93cml0ZV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSwgMHgyNCwgMHgwODgwKTtcbitcdFx0cGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCAweDI1LCAweDA4ODApO1xuK1x0XHRwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIDB4MjYsIDB4MDg4MCk7XG4rXHR9IGVsc2Uge1xuK1x0XHRpZiAoc29jX3BkaWRyID09IDIpIHtcbitcdFx0XHRwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDIsIDB4MjY5LCAweDExMTQpO1xuK1x0XHRcdHBoeV93cml0ZV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMiwgMHgyNmEsIDB4MTExMyk7XG4rXHRcdFx0cGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQyLCAweDI2ZiwgMHgyMDAwKTtcbitcdFx0XHRwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDIsIDB4MjcxLCAweDRjODgpO1xuK1x0XHRcdHBoeV93cml0ZV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMiwgMHgyNzIsIDB4MGMyYik7XG4rXG4rXHRcdFx0LyogMTAwTSBzaGFycCAqL1xuK1x0XHRcdHBoeV93cml0ZV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSwgMHgwMCwgMHgwMTkwKTtcbitcdFx0XHRwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIDB4MDEsIDB4MDFjOCk7XG4rXHRcdFx0cGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCAweDAyLCAweDAxYzApO1xuK1x0XHRcdHBoeV93cml0ZV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSwgMHgwMywgMHgwMDMwKTtcbitcdFx0XHRwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIDB4MDQsIDB4MDIwOCk7XG4rXHRcdFx0cGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCAweDA1LCAweDAwMDApO1xuK1x0XHRcdHBoeV93cml0ZV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSwgMHgwNiwgMHgwMzE4KTtcbitcdFx0XHRwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIDB4MDcsIDB4MDNjOCk7XG4rXHRcdFx0cGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCAweDA4LCAweDAzYzApO1xuK1x0XHRcdHBoeV93cml0ZV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSwgMHgwOSwgMHgwMjMwKTtcbitcdFx0XHRwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIDB4MGEsIDB4MDAwOCk7XG4rXHRcdFx0cGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCAweDBiLCAweDAyMDApO1xuK1xuK1x0XHRcdHBoeV93cml0ZV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSwgMHgyMywgMHgwODg1KTtcbitcdFx0XHRwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIDB4MjQsIDB4MDg4NSk7XG4rXHRcdFx0cGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCAweDI1LCAweDA4ODUpO1xuK1x0XHRcdHBoeV93cml0ZV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSwgMHgyNiwgMHgwODg1KTtcbitcdFx0fSBlbHNlIHtcbitcdFx0XHRwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIDB4MDAsIDB4MDE5MCk7XG4rXHRcdFx0cGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCAweDAxLCAweDAxY2YpO1xuK1x0XHRcdHBoeV93cml0ZV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSwgMHgwMiwgMHgwMWMwKTtcbitcdFx0XHRwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIDB4MDMsIDB4MDAzMCk7XG4rXHRcdFx0cGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCAweDA0LCAweDAyMGYpO1xuK1x0XHRcdHBoeV93cml0ZV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSwgMHgwNSwgMHgwMDAwKTtcbitcdFx0XHRwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIDB4MDYsIDB4MDMxOCk7XG4rXHRcdFx0cGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCAweDA3LCAweDAzY2YpO1xuK1x0XHRcdHBoeV93cml0ZV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSwgMHgwOCwgMHgwM2MwKTtcbitcdFx0XHRwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIDB4MDksIDB4MDIzMCk7XG4rXHRcdFx0cGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCAweDBhLCAweDAwMGYpO1xuK1x0XHRcdHBoeV93cml0ZV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSwgMHgwYiwgMHgwMjAwKTtcbitcbitcdFx0XHRwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIDB4MjMsIDB4MDAwMyk7XG4rXHRcdFx0cGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCAweDI0LCAweDAwMDMpO1xuK1x0XHRcdHBoeV93cml0ZV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSwgMHgyNSwgMHgwMDAzKTtcbitcdFx0XHRwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIDB4MjYsIDB4MDAwMyk7XG4rXHRcdH1cbitcdH1cbitcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgaW50IGFuNzU4MV9waHlfcHJvYmUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbit7XG4rXHRzdHJ1Y3QgYWlyb2hhX3NvY3BoeV9zaGFyZWQgKnNoYXJlZDtcbitcdHN0cnVjdCBtdGtfc29jcGh5X3ByaXYgKnByaXY7XG4rXHRzdHJ1Y3QgcGluY3RybCAqcGluY3RybDtcbitcdGludCByZXQ7XG4rXG4rXHQvKiBUb2dnbGUgcGluY3RybCB0byBlbmFibGUgUEhZIExFRCAqL1xuK1x0cGluY3RybCA9IGRldm1fcGluY3RybF9nZXRfc2VsZWN0KFx1MDAyNnBoeWRldi1cdTAwM2VtZGlvLmRldiwgXCJnYmUtbGVkXCIpO1xuK1x0aWYgKElTX0VSUihwaW5jdHJsKSlcbitcdFx0ZGV2X2VycihcdTAwMjZwaHlkZXYtXHUwMDNlbWRpby5idXMtXHUwMDNlZGV2LFxuK1x0XHRcdFwiRmFpbGVkIHRvIHNldHVwIFBIWSBMRUQgcGluY3RybFxcblwiKTtcbitcbitcdHJldCA9IGRldm1fcGh5X3BhY2thZ2Vfam9pbihcdTAwMjZwaHlkZXYtXHUwMDNlbWRpby5kZXYsIHBoeWRldiwgMCxcbitcdFx0XHRcdCAgICBzaXplb2Yoc3RydWN0IGFpcm9oYV9zb2NwaHlfc2hhcmVkKSk7XG4rXHRpZiAocmV0KVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0cHJpdiA9IGRldm1fa3phbGxvYyhcdTAwMjZwaHlkZXYtXHUwMDNlbWRpby5kZXYsIHNpemVvZigqcHJpdiksIEdGUF9LRVJORUwpO1xuK1x0aWYgKCFwcml2KVxuK1x0XHRyZXR1cm4gLUVOT01FTTtcbitcbitcdGlmIChwaHlkZXYtXHUwMDNlbWRpby5hZGRyID09IEFJUk9IQV9ERUZBVUxUX1BPUlQwX0FERFIpXG4rXHRcdHNoYXJlZC1cdTAwM2VwaHlkZXZfcDAgPSBwaHlkZXY7XG4rXG4rXHRwaHlkZXYtXHUwMDNlcHJpdiA9IHByaXY7XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rc3RhdGljIGludCBhbjc1ODFfcGh5X2xlZF9wb2xhcml0eV9zZXQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgaW50IGluZGV4LFxuK1x0XHRcdFx0ICAgICAgIHVuc2lnbmVkIGxvbmcgbW9kZXMpXG4re1xuK1x0dTE2IHZhbCA9IDA7XG4rXHR1MzIgbW9kZTtcbitcbitcdGlmIChpbmRleCBcdTAwM2U9IEFJUk9IQV9QSFlfTUFYX0xFRFMpXG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1xuK1x0Zm9yX2VhY2hfc2V0X2JpdChtb2RlLCBcdTAwMjZtb2RlcywgX19QSFlfTEVEX01PREVTX05VTSkge1xuK1x0XHRzd2l0Y2ggKG1vZGUpIHtcbitcdFx0Y2FzZSBQSFlfTEVEX0FDVElWRV9MT1c6XG4rXHRcdFx0dmFsID0gTVRLX1BIWV9MRURfT05fUE9MQVJJVFk7XG4rXHRcdFx0YnJlYWs7XG4rXHRcdGNhc2UgUEhZX0xFRF9BQ1RJVkVfSElHSDpcbitcdFx0XHRicmVhaztcbitcdFx0ZGVmYXVsdDpcbitcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbitcdFx0fVxuK1x0fVxuK1xuK1x0cmV0dXJuIHBoeV9tb2RpZnlfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDIsIGluZGV4ID9cbitcdFx0XHQgICAgICBNVEtfUEhZX0xFRDFfT05fQ1RSTCA6IE1US19QSFlfTEVEMF9PTl9DVFJMLFxuK1x0XHRcdCAgICAgIE1US19QSFlfTEVEX09OX1BPTEFSSVRZLCB2YWwpO1xuK31cbitcbitzdGF0aWMgaW50IGFuNzU4M19waHlfY29uZmlnX2luaXQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbit7XG4rXHRzdHJ1Y3QgYWlyb2hhX3NvY3BoeV9zaGFyZWQgKnNoYXJlZCA9IHBoeV9wYWNrYWdlX2dldF9wcml2KHBoeWRldik7XG4rXHRzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2X3AwO1xuK1x0dTggcGh5X29mZnNldDtcbitcdGludCByZXQ7XG4rXG4rXHQvKiBCTUNSX1BET1dOIGlzIGVuYWJsZWQgYnkgZGVmYXVsdCAqL1xuK1x0cGh5X2NsZWFyX2JpdHMocGh5ZGV2LCBNSUlfQk1DUiwgQk1DUl9QRE9XTik7XG4rXG4rXHRwaHlkZXZfcDAgPSBzaGFyZWQtXHUwMDNlcGh5ZGV2X3AwO1xuK1x0cGh5X29mZnNldCA9IHBoeWRldi1cdTAwM2VtZGlvLmFkZHIgLSBwaHlkZXZfcDAtXHUwMDNlbWRpby5hZGRyO1xuK1xuK1x0LyogRklYTUU6IFJlYWQgU29DIE1ESSBSZXNpc3RlciBUeXBlIGlmIGF2YWlsYWJsZSBvciBkZWZhdWx0IHRvIDVSICovXG4rXHRzaGFyZWQtXHUwMDNlbWRpX3Jlc2lzdGVyX3R5cGUgPSBNRElfNVI7XG4rXG4rXHRzaGFyZWQtXHUwMDNlbWRpX3Jlc2lzdGVyX3R5cGUgPSBNRElfNVI7XG4rXHRpZiAoc2hhcmVkLVx1MDAzZW1kaV9yZXNpc3Rlcl90eXBlID09IE1ESV8wUilcbitcdFx0c2hhcmVkLVx1MDAzZXI1MF9jYWxfdGJsID0gYW43NTgzX3pjYWxfdG9fcjUwb2htXzBSO1xuK1x0aWYgKHNoYXJlZC1cdTAwM2VtZGlfcmVzaXN0ZXJfdHlwZSA9PSBNRElfNVIpXG4rXHRcdHNoYXJlZC1cdTAwM2VyNTBfY2FsX3RibCA9IGFuNzU4M196Y2FsX3RvX3I1MG9obV81UjtcbitcdHNoYXJlZC1cdTAwM2V0eF9hbXBfY29tcGVuc2F0aW9uX3RibCA9IFx1MDAyNmFuNzU4M190eF9hbXBfY29tcGVuc2F0aW9uX3RibDtcbitcbitcdHJldCA9IGFpcm9oYV9waHlfY2FsaWIocGh5ZGV2KTtcbitcdGlmIChyZXQpXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHRyZXQgPSBhaXJvaGFfcGh5X2F1dG9fc2VsZWN0X3RyYW5zZm9ybWVyKHBoeWRldik7XG4rXHRpZiAocmV0KVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0cmV0ID0gYWlyb2hhX3BoeV90eF9hbXBfY29tcGVuc2F0aW9uKHBoeWRldik7XG4rXHRpZiAocmV0KVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0LyogRW5hYmxlIElkbGUgTW9kZSBQb3dlciBTZXR0aW5nICovXG4rXHRpZiAocGh5X29mZnNldCA9PSAwKSB7XG4rXHRcdHBoeV93cml0ZV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMiwgMHgyNjgsIDB4MDdGMSk7XG4rXHRcdHBoeV93cml0ZV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMiwgMHg3MDMsIDB4MzExMSk7XG4rXHRcdHBoeV93cml0ZV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMiwgMHgyNzEsIDB4M0MyNCk7XG4rXHRcdHBoeV93cml0ZV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMiwgMHg3MDEsIDB4MTAyMyk7XG4rXHR9XG4rXG4rXHRpZiAoc2hhcmVkLVx1MDAzZXRyYW5zZm9ybWVyX3R5cGVbcGh5X29mZnNldF0gPT0gVFhNUikge1xuK1x0XHRwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIDB4MjMsIDB4MDg4MSk7XG4rXHRcdHBoeV93cml0ZV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSwgMHgyNCwgMHgwODgxKTtcbitcdFx0cGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCAweDI1LCAweDA4ODEpO1xuK1x0XHRwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIDB4MjYsIDB4MDg4MSk7XG4rXG4rXHRcdGlmIChzaGFyZWQtXHUwMDNlbWRpX3Jlc2lzdGVyX3R5cGUgPT0gTURJXzBSKVxuK1x0XHRcdHBoeV93cml0ZV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSwgMHgwNSwgMHgwMjA1KTtcbitcdFx0ZWxzZVxuK1x0XHRcdHBoeV93cml0ZV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSwgMHgwNSwgMHgwMjAwKTtcbitcdH0gZWxzZSB7XG4rXHRcdGlmIChzaGFyZWQtXHUwMDNlbWRpX3Jlc2lzdGVyX3R5cGUgPT0gTURJXzBSKSB7XG4rXHRcdFx0LyogUlggc2V0dGluZyBmb3IgNVJfVFhNUiBiZWZvcmUgQU4gc2V0dGluZyAqL1xuK1x0XHRcdHBoeV93cml0ZV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSwgMHhlNywgMHg2NjY2KTtcbitcdFx0XHRwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIDB4ZTksIDB4MDAwMyk7XG4rXHRcdFx0cGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCAweGZlLCAweDAwMDYpO1xuK1x0XHRcdHBoeV93cml0ZV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSwgMHhlNiwgMHgxMTExKTtcbitcdFx0XHQvKiAxMDBNIHNoYXJwICovXG4rXHRcdFx0cGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCAweDIzLCAweDBjODYpO1xuK1x0XHRcdHBoeV93cml0ZV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSwgMHgyNCwgMHgwYzg2KTtcbitcdFx0XHRwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIDB4MjUsIDB4MGM4Nik7XG4rXHRcdFx0cGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCAweDI2LCAweDBjODYpO1xuK1x0XHRcdHBoeV93cml0ZV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSwgMHgwMSwgMHgwMWNiKTtcbitcdFx0XHRwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIDB4MDIsIDB4MDFjMik7XG4rXHRcdFx0cGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCAweDAzLCAweDAxMDgpO1xuK1x0XHRcdHBoeV93cml0ZV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSwgMHgwNCwgMHgwMjExKTtcbitcdFx0XHRwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIDB4MDUsIDB4MDIwNSk7XG4rXHRcdFx0cGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCAweDA2LCAweDAzODcpO1xuK1x0XHRcdHBoeV93cml0ZV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSwgMHgwNywgMHgwM2NlKTtcbitcdFx0XHRwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIDB4MDgsIDB4MDNjOCk7XG4rXHRcdFx0cGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCAweDBiLCAweDAwMDUpO1xuK1x0XHR9IGVsc2Uge1xuK1x0XHRcdC8qIDEwME0gc2hhcnAgKi9cbitcdFx0XHRwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIDB4MjMsIDB4MDg4Nik7XG4rXHRcdFx0cGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCAweDI0LCAweDA4ODYpO1xuK1x0XHRcdHBoeV93cml0ZV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSwgMHgyNSwgMHgwODg2KTtcbitcdFx0XHRwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIDB4MjYsIDB4MDg4Nik7XG4rXHRcdFx0cGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCAweDAwLCAweDAxOTUpO1xuK1x0XHRcdHBoeV93cml0ZV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSwgMHgwMSwgMHgwMWNiKTtcbitcdFx0XHRwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIDB4MDIsIDB4MDFjMik7XG4rXHRcdFx0cGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCAweDAzLCAweDAxMDgpO1xuK1x0XHRcdHBoeV93cml0ZV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSwgMHgwNCwgMHgwMjExKTtcbitcdFx0XHRwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIDB4MDUsIDB4MDIwNSk7XG4rXHRcdFx0cGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCAweDA2LCAweDAzODcpO1xuK1x0XHRcdHBoeV93cml0ZV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSwgMHgwNywgMHgwM2NlKTtcbitcdFx0XHRwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIDB4MDgsIDB4MDNjMyk7XG4rXHRcdFx0cGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCAweDBhLCAweDAwMTApO1xuK1x0XHRcdHBoeV93cml0ZV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSwgMHgwYiwgMHgwMDA1KTtcbitcdFx0fVxuK1x0fVxuK1xuK1x0LyogUlggU2V0dGluZyAqL1xuK1x0cGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCAweDNjLCAweGMwMDApO1xuK1x0cGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCAweDNkLCAweDAwMDApO1xuK1x0cGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCAweDNlLCAweGMwMDApO1xuK1xuK1x0LyogRUVFIHNldHRpbmcgKi9cbitcdHBoeV93cml0ZV9tbWQocGh5ZGV2LCBNRElPX01NRF9BTiwgMHgzYywgMHgwMDAwKTtcbitcbitcdC8qIDEwTSBzZXR0aW5ncyAqL1xuK1x0cGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCAweDFhMywgMHgwMGQyKTtcbitcdHBoeV93cml0ZV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSwgMHgxYTQsIDB4MDEwZSk7XG4rXHRwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDIsIDB4MjdiLCAweDExNzcpO1xuK1x0cGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQyLCAweDI3YywgMHgwODA4KTtcbitcbitcdHBoeV9zZWxlY3RfcGFnZShwaHlkZXYsIE1US19QSFlfUEFHRV9FWFRFTkRFRF8zKTtcbitcdF9fcGh5X3dyaXRlKHBoeWRldiwgMHgxNCwgMHgxOTApO1xuK1x0cGh5X3Jlc3RvcmVfcGFnZShwaHlkZXYsIE1US19QSFlfUEFHRV9TVEFOREFSRCwgMCk7XG4rXG4rXHRwaHlfc2VsZWN0X3BhZ2UocGh5ZGV2LCBNVEtfUEhZX1BBR0VfRVhURU5ERURfMSk7XG4rXHRfX3BoeV93cml0ZShwaHlkZXYsIDB4MTQsIDB4M2ExOCk7XG4rXHRwaHlfcmVzdG9yZV9wYWdlKHBoeWRldiwgTVRLX1BIWV9QQUdFX1NUQU5EQVJELCAwKTtcbitcbitcdHBoeV93cml0ZShwaHlkZXYsIDB4OSwgMHgwNjAwKTtcbitcbitcdC8qIEVFRSBrZWVwIG9ubHkgUGFpciBBIE9OICovXG4rXHRwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIDB4NjMwLCAweDAwNkUpO1xuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK3N0YXRpYyBzdHJ1Y3QgcGh5X2RyaXZlciBtdGtfc29jcGh5X2RyaXZlcltdID0ge1xuK1x0e1xuK1x0XHRQSFlfSURfTUFUQ0hfRVhBQ1QoQUlST0hBX0dQSFlfSURfQU43NTgxKSxcbitcdFx0Lm5hbWVcdFx0PSBcIkFpcm9oYSBBTjc1ODEgUEhZXCIsXG4rXHRcdC5jb25maWdfaW5pdFx0PSBhbjc1ODFfcGh5X2NvbmZpZ19pbml0LFxuK1x0XHQuY29uZmlnX2ludHJcdD0gZ2VucGh5X25vX2NvbmZpZ19pbnRyLFxuK1x0XHQuaGFuZGxlX2ludGVycnVwdCA9IGdlbnBoeV9oYW5kbGVfaW50ZXJydXB0X25vX2FjayxcbitcdFx0LnByb2JlXHRcdD0gYW43NTgxX3BoeV9wcm9iZSxcbitcdFx0LmxlZF9ibGlua19zZXRcdD0gbXQ3OTh4X3BoeV9sZWRfYmxpbmtfc2V0LFxuK1x0XHQubGVkX2JyaWdodG5lc3Nfc2V0ID0gbXQ3OTh4X3BoeV9sZWRfYnJpZ2h0bmVzc19zZXQsXG4rXHRcdC5sZWRfaHdfaXNfc3VwcG9ydGVkID0gbXQ3OTh4X3BoeV9sZWRfaHdfaXNfc3VwcG9ydGVkLFxuK1x0XHQubGVkX2h3X2NvbnRyb2xfc2V0ID0gbXQ3OTh4X3BoeV9sZWRfaHdfY29udHJvbF9zZXQsXG4rXHRcdC5sZWRfaHdfY29udHJvbF9nZXQgPSBtdDc5OHhfcGh5X2xlZF9od19jb250cm9sX2dldCxcbitcdFx0LmxlZF9wb2xhcml0eV9zZXQgPSBhbjc1ODFfcGh5X2xlZF9wb2xhcml0eV9zZXQsXG4rXHRcdC5yZWFkX3BhZ2VcdD0gbXRrX3BoeV9yZWFkX3BhZ2UsXG4rXHRcdC53cml0ZV9wYWdlXHQ9IG10a19waHlfd3JpdGVfcGFnZSxcbitcdH0sXG4rXHR7XG4rXHRcdFBIWV9JRF9NQVRDSF9FWEFDVChBSVJPSEFfR1BIWV9JRF9BTjc1ODMpLFxuK1x0XHQubmFtZVx0XHQ9IFwiQWlyb2hhIEFONzU4MyBQSFlcIixcbitcdFx0LmNvbmZpZ19pbml0XHQ9IGFuNzU4M19waHlfY29uZmlnX2luaXQsXG4rXHRcdC5wcm9iZVx0XHQ9IGFuNzU4MV9waHlfcHJvYmUsXG4rXHRcdC5sZWRfYmxpbmtfc2V0XHQ9IG10Nzk4eF9waHlfbGVkX2JsaW5rX3NldCxcbitcdFx0LmxlZF9icmlnaHRuZXNzX3NldCA9IG10Nzk4eF9waHlfbGVkX2JyaWdodG5lc3Nfc2V0LFxuK1x0XHQubGVkX2h3X2lzX3N1cHBvcnRlZCA9IG10Nzk4eF9waHlfbGVkX2h3X2lzX3N1cHBvcnRlZCxcbitcdFx0LmxlZF9od19jb250cm9sX3NldCA9IG10Nzk4eF9waHlfbGVkX2h3X2NvbnRyb2xfc2V0LFxuK1x0XHQubGVkX2h3X2NvbnRyb2xfZ2V0ID0gbXQ3OTh4X3BoeV9sZWRfaHdfY29udHJvbF9nZXQsXG4rXHRcdC5sZWRfcG9sYXJpdHlfc2V0ID0gYW43NTgxX3BoeV9sZWRfcG9sYXJpdHlfc2V0LFxuK1x0XHQucmVhZF9wYWdlXHQ9IG10a19waHlfcmVhZF9wYWdlLFxuK1x0XHQud3JpdGVfcGFnZVx0PSBtdGtfcGh5X3dyaXRlX3BhZ2UsXG4rXHR9LFxuK307XG4rXG4rbW9kdWxlX3BoeV9kcml2ZXIobXRrX3NvY3BoeV9kcml2ZXIpO1xuK1xuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbWRpb19kZXZpY2VfaWQgX19tYXliZV91bnVzZWQgYWlyb2hhX3NvY3BoeV90YmxbXSA9IHtcbitcdHsgUEhZX0lEX01BVENIX0VYQUNUKEFJUk9IQV9HUEhZX0lEX0FONzU4MSkgfSxcbitcdHsgUEhZX0lEX01BVENIX0VYQUNUKEFJUk9IQV9HUEhZX0lEX0FONzU4MykgfSxcbitcdHsgfVxuK307XG4rXG4rTU9EVUxFX0RFU0NSSVBUSU9OKFwiQWlyb2hhIFNvQyBHaWdhYml0IEV0aGVybmV0IFBIWSBkcml2ZXJcIik7XG4rTU9EVUxFX0FVVEhPUihcIkNocmlzdGlhbiBNYXJhbmdpIFx1MDAzY2Fuc3VlbHNtdGhAZ21haWwuY29tXHUwMDNlXCIpO1xuK01PRFVMRV9MSUNFTlNFKFwiR1BMXCIpO1xuK01PRFVMRV9WRVJTSU9OKFwiMDEuMDEuMjAyNjAzMDZcIik7XG4rXG4rTU9EVUxFX0RFVklDRV9UQUJMRShtZGlvLCBhaXJvaGFfc29jcGh5X3RibCk7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGh5L21lZGlhdGVrL210ay1nZS1zb2MuYyBiL2RyaXZlcnMvbmV0L3BoeS9tZWRpYXRlay9tdGstZ2Utc29jLmNcbmluZGV4IDlhNTQ5NDk2NDRkNWE1Li44NjhhZTA4OTAxM2QzZCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3BoeS9tZWRpYXRlay9tdGstZ2Utc29jLmNcbisrKyBiL2RyaXZlcnMvbmV0L3BoeS9tZWRpYXRlay9tdGstZ2Utc29jLmNcbkBAIC0xMSwzMjIgKzExLDEwIEBAXG4gXG4gI2luY2x1ZGUgXCIuLi9waHlsaWIuaFwiXG4gI2luY2x1ZGUgXCJtdGsuaFwiXG4rI2luY2x1ZGUgXCJtdGstZ2Utc29jLmhcIlxuIFxuICNkZWZpbmUgTVRLX1BIWV9NQVhfTEVEU1x0XHRcdDJcbiBcbi0jZGVmaW5lIE1US19HUEhZX0lEX01UNzk4MVx0XHRcdDB4MDNhMjk0NjFcbi0jZGVmaW5lIE1US19HUEhZX0lEX01UNzk4OFx0XHRcdDB4MDNhMjk0ODFcbi0jZGVmaW5lIE1US19HUEhZX0lEX0FONzU4MVx0XHRcdDB4MDNhMjk0YzFcbi0jZGVmaW5lIE1US19HUEhZX0lEX0FONzU4M1x0XHRcdDB4YzBmZjA0MjBcbi1cbi0jZGVmaW5lIE1US19FWFRfUEFHRV9BQ0NFU1NcdFx0XHQweDFmXG4tI2RlZmluZSBNVEtfUEhZX1BBR0VfU1RBTkRBUkRcdFx0XHQweDAwMDBcbi0jZGVmaW5lIE1US19QSFlfUEFHRV9FWFRFTkRFRF8zXHRcdFx0MHgwMDAzXG4tXG4tI2RlZmluZSBNVEtfUEhZX0xQSV9SRUdfMTRcdFx0XHQweDE0XG4tI2RlZmluZSBNVEtfUEhZX0xQSV9XQUtFX1RJTUVSXzEwMDBfTUFTS1x0R0VOTUFTSyg4LCAwKVxuLVxuLSNkZWZpbmUgTVRLX1BIWV9MUElfUkVHXzFjXHRcdFx0MHgxY1xuLSNkZWZpbmUgTVRLX1BIWV9TTUlfREVUX09OX1RIUkVTSF9NQVNLXHRcdEdFTk1BU0soMTMsIDgpXG4tXG4tI2RlZmluZSBNVEtfUEhZX1BBR0VfRVhURU5ERURfMkEzMFx0XHQweDJhMzBcbi1cbi0vKiBSZWdpc3RlcnMgb24gVG9rZW4gUmluZyBkZWJ1ZyBub2RlcyAqL1xuLS8qIGNoX2FkZHIgPSAweDAsIG5vZGVfYWRkciA9IDB4NywgZGF0YV9hZGRyID0gMHgxNSAqL1xuLS8qIE5vcm1Nc2VMb1RocmVzaCAqL1xuLSNkZWZpbmUgTk9STUFMX01TRV9MT19USFJFU0hfTUFTS1x0XHRHRU5NQVNLKDE1LCA4KVxuLVxuLS8qIGNoX2FkZHIgPSAweDAsIG5vZGVfYWRkciA9IDB4ZiwgZGF0YV9hZGRyID0gMHgzYyAqL1xuLS8qIFJlbUFja0NudExpbWl0Q3RybCAqL1xuLSNkZWZpbmUgUkVNT1RFX0FDS19DT1VOVF9MSU1JVF9DVFJMX01BU0tcdEdFTk1BU0soMiwgMSlcbi1cbi0vKiBjaF9hZGRyID0gMHgxLCBub2RlX2FkZHIgPSAweGQsIGRhdGFfYWRkciA9IDB4MjAgKi9cbi0vKiBWY29TbGljZXJUaHJlc2hCaXRzSGlnaCAqL1xuLSNkZWZpbmUgVkNPX1NMSUNFUl9USFJFU0hfSElHSF9NQVNLXHRcdEdFTk1BU0soMjMsIDApXG4tXG4tLyogY2hfYWRkciA9IDB4MSwgbm9kZV9hZGRyID0gMHhmLCBkYXRhX2FkZHIgPSAweDAgKi9cbi0vKiBEZmVUYWlsRW5hYmxlVmdhVGhyZXNoMTAwMCAqL1xuLSNkZWZpbmUgREZFX1RBSUxfRUFOQkxFX1ZHQV9UUkhFU0hfMTAwMFx0XHRHRU5NQVNLKDUsIDEpXG4tXG4tLyogY2hfYWRkciA9IDB4MSwgbm9kZV9hZGRyID0gMHhmLCBkYXRhX2FkZHIgPSAweDEgKi9cbi0vKiBNcnZsVHJGaXgxMDBLcCAqL1xuLSNkZWZpbmUgTVJWTF9UUl9GSVhfMTAwS1BfTUFTS1x0XHRcdEdFTk1BU0soMjIsIDIwKVxuLS8qIE1ydmxUckZpeDEwMEtmICovXG4tI2RlZmluZSBNUlZMX1RSX0ZJWF8xMDBLRl9NQVNLXHRcdFx0R0VOTUFTSygxOSwgMTcpXG4tLyogTXJ2bFRyRml4MTAwMEtwICovXG4tI2RlZmluZSBNUlZMX1RSX0ZJWF8xMDAwS1BfTUFTS1x0XHRcdEdFTk1BU0soMTYsIDE0KVxuLS8qIE1ydmxUckZpeDEwMDBLZiAqL1xuLSNkZWZpbmUgTVJWTF9UUl9GSVhfMTAwMEtGX01BU0tcdFx0XHRHRU5NQVNLKDEzLCAxMSlcbi1cbi0vKiBjaF9hZGRyID0gMHgxLCBub2RlX2FkZHIgPSAweGYsIGRhdGFfYWRkciA9IDB4MTIgKi9cbi0vKiBWZ2FEZWNSYXRlICovXG4tI2RlZmluZSBWR0FfREVDSU1BVElPTl9SQVRFX01BU0tcdFx0R0VOTUFTSyg4LCA1KVxuLVxuLS8qIGNoX2FkZHIgPSAweDEsIG5vZGVfYWRkciA9IDB4ZiwgZGF0YV9hZGRyID0gMHgxNyAqL1xuLS8qIFNsdkRTUHJlYWR5VGltZSAqL1xuLSNkZWZpbmUgU0xBVkVfRFNQX1JFQURZX1RJTUVfTUFTS1x0XHRHRU5NQVNLKDIyLCAxNSlcbi0vKiBNYXNEU1ByZWFkeVRpbWUgKi9cbi0jZGVmaW5lIE1BU1RFUl9EU1BfUkVBRFlfVElNRV9NQVNLXHRcdEdFTk1BU0soMTQsIDcpXG4tXG4tLyogY2hfYWRkciA9IDB4MSwgbm9kZV9hZGRyID0gMHhmLCBkYXRhX2FkZHIgPSAweDE4ICovXG4tLyogRW5hYlJhbmRVcGRUcmlnICovXG4tI2RlZmluZSBFTkFCTEVfUkFORE9NX1VQRE9XTl9DT1VOVEVSX1RSSUdHRVJcdEJJVCg4KVxuLVxuLS8qIGNoX2FkZHIgPSAweDEsIG5vZGVfYWRkciA9IDB4ZiwgZGF0YV9hZGRyID0gMHgyMCAqL1xuLS8qIFJlc2V0U3luY09mZnNldCAqL1xuLSNkZWZpbmUgUkVTRVRfU1lOQ19PRkZTRVRfTUFTS1x0XHRcdEdFTk1BU0soMTEsIDgpXG4tXG4tLyogY2hfYWRkciA9IDB4Miwgbm9kZV9hZGRyID0gMHhkLCBkYXRhX2FkZHIgPSAweDAgKi9cbi0vKiBGZmVVcGRHYWluRm9yY2VWYWwgKi9cbi0jZGVmaW5lIEZGRV9VUERBVEVfR0FJTl9GT1JDRV9WQUxfTUFTS1x0XHRHRU5NQVNLKDksIDcpXG4tLyogRmZlVXBkR2FpbkZvcmNlICovXG4tI2RlZmluZSBGRkVfVVBEQVRFX0dBSU5fRk9SQ0VcdFx0XHRCSVQoNilcbi1cbi0vKiBjaF9hZGRyID0gMHgyLCBub2RlX2FkZHIgPSAweGQsIGRhdGFfYWRkciA9IDB4MyAqL1xuLS8qIFRyRnJlZXplICovXG4tI2RlZmluZSBUUl9GUkVFWkVfTUFTS1x0XHRcdFx0R0VOTUFTSygxMSwgMClcbi1cbi0vKiBjaF9hZGRyID0gMHgyLCBub2RlX2FkZHIgPSAweGQsIGRhdGFfYWRkciA9IDB4NiAqL1xuLS8qIFNTOiBTdGVhZHktc3RhdGUsIEtQOiBQcm9wb3J0aW9uYWwgR2FpbiAqL1xuLS8qIFNTVHJLcDEwMCAqL1xuLSNkZWZpbmUgU1NfVFJfS1AxMDBfTUFTS1x0XHRcdEdFTk1BU0soMjEsIDE5KVxuLS8qIFNTVHJLZjEwMCAqL1xuLSNkZWZpbmUgU1NfVFJfS0YxMDBfTUFTS1x0XHRcdEdFTk1BU0soMTgsIDE2KVxuLS8qIFNTVHJLcDEwMDBNYXMgKi9cbi0jZGVmaW5lIFNTX1RSX0tQMTAwMF9NQVNURVJfTUFTS1x0XHRHRU5NQVNLKDE1LCAxMylcbi0vKiBTU1RyS2YxMDAwTWFzICovXG4tI2RlZmluZSBTU19UUl9LRjEwMDBfTUFTVEVSX01BU0tcdFx0R0VOTUFTSygxMiwgMTApXG4tLyogU1NUcktwMTAwMFNsdiAqL1xuLSNkZWZpbmUgU1NfVFJfS1AxMDAwX1NMQVZFX01BU0tcdFx0XHRHRU5NQVNLKDksIDcpXG4tLyogU1NUcktmMTAwMFNsdiAqL1xuLSNkZWZpbmUgU1NfVFJfS0YxMDAwX1NMQVZFX01BU0tcdFx0XHRHRU5NQVNLKDYsIDQpXG4tXG4tLyogY2hfYWRkciA9IDB4Miwgbm9kZV9hZGRyID0gMHhkLCBkYXRhX2FkZHIgPSAweDggKi9cbi0vKiBjbGVhciB0aGlzIGJpdCBpZiB3YW5uYSBzZWxlY3QgZnJvbSBBRkUgKi9cbi0vKiBSZWdzaWdkZXRfc2VsXzEwMDAgKi9cbi0jZGVmaW5lIEVFRTEwMDBfU0VMRUNUX1NJR05BTF9ERVRFQ1RJT05fRlJPTV9ERkVcdEJJVCg0KVxuLVxuLS8qIGNoX2FkZHIgPSAweDIsIG5vZGVfYWRkciA9IDB4ZCwgZGF0YV9hZGRyID0gMHhkICovXG4tLyogUmVnRUVFX3N0MlRyS2YxMDAwICovXG4tI2RlZmluZSBFRUUxMDAwX1NUQUdFMl9UUl9LRl9NQVNLXHRcdEdFTk1BU0soMTMsIDExKVxuLVxuLS8qIGNoX2FkZHIgPSAweDIsIG5vZGVfYWRkciA9IDB4ZCwgZGF0YV9hZGRyID0gMHhmICovXG4tLyogUmVnRUVFX3Nsdl93YWtldHJfdGltZXJfdGFyICovXG4tI2RlZmluZSBTTEFWRV9XQUtFVFJfVElNRVJfTUFTS1x0XHRcdEdFTk1BU0soMjAsIDExKVxuLS8qIFJlZ0VFRV9zbHZfcmVtdHhfdGltZXJfdGFyICovXG4tI2RlZmluZSBTTEFWRV9SRU1UWF9USU1FUl9NQVNLXHRcdFx0R0VOTUFTSygxMCwgMSlcbi1cbi0vKiBjaF9hZGRyID0gMHgyLCBub2RlX2FkZHIgPSAweGQsIGRhdGFfYWRkciA9IDB4MTAgKi9cbi0vKiBSZWdFRUVfc2x2X3dha2VfaW50X3RpbWVyX3RhciAqL1xuLSNkZWZpbmUgU0xBVkVfV0FLRUlOVF9USU1FUl9NQVNLXHRcdEdFTk1BU0soMTAsIDEpXG4tXG4tLyogY2hfYWRkciA9IDB4Miwgbm9kZV9hZGRyID0gMHhkLCBkYXRhX2FkZHIgPSAweDE0ICovXG4tLyogUmVnRUVFX3RyZnJlZXplX3RpbWVyMiAqL1xuLSNkZWZpbmUgVFJfRlJFRVpFX1RJTUVSMl9NQVNLXHRcdFx0R0VOTUFTSyg5LCAwKVxuLVxuLS8qIGNoX2FkZHIgPSAweDIsIG5vZGVfYWRkciA9IDB4ZCwgZGF0YV9hZGRyID0gMHgxYyAqL1xuLS8qIFJlZ0VFRTEwMFN0ZzFfdGFyICovXG4tI2RlZmluZSBFRUUxMDBfTFBTWU5DX1NUQUdFMV9VUERBVEVfVElNRVJfTUFTS1x0R0VOTUFTSyg4LCAwKVxuLVxuLS8qIGNoX2FkZHIgPSAweDIsIG5vZGVfYWRkciA9IDB4ZCwgZGF0YV9hZGRyID0gMHgyNSAqL1xuLS8qIFJFR0VFRV93YWtlX3Nsdl90cl93YWl0X2RmZXNpZ2RldF9lbiAqL1xuLSNkZWZpbmUgV0FLRV9TTEFWRV9UUl9XQUlUX0RGRV9ERVRFQ1RJT05fRU5cdEJJVCgxMSlcbi1cbi0jZGVmaW5lIEFOQUxPR19JTlRFUk5BTF9PUEVSQVRJT05fTUFYX1VTXHQyMFxuLSNkZWZpbmUgVFhSRVNFUlZFX01JTlx0XHRcdFx0MFxuLSNkZWZpbmUgVFhSRVNFUlZFX01BWFx0XHRcdFx0N1xuLVxuLSNkZWZpbmUgTVRLX1BIWV9BTkFSR19SR1x0XHRcdDB4MTBcbi0jZGVmaW5lICAgTVRLX1BIWV9UQ0xLT0ZGU0VUX01BU0tcdFx0R0VOTUFTSygxMiwgOClcbi1cbi0vKiBSZWdpc3RlcnMgb24gTURJT19NTURfVkVORDEgKi9cbi0jZGVmaW5lIE1US19QSFlfVFhWTERfREFfUkdcdFx0XHQweDEyXG4tI2RlZmluZSAgIE1US19QSFlfREFfVFhfSTJNUEJfQV9HQkVfTUFTS1x0R0VOTUFTSygxNSwgMTApXG4tI2RlZmluZSAgIE1US19QSFlfREFfVFhfSTJNUEJfQV9UQlRfTUFTS1x0R0VOTUFTSyg1LCAwKVxuLVxuLSNkZWZpbmUgTVRLX1BIWV9UWF9JMk1QQl9URVNUX01PREVfQTJcdFx0MHgxNlxuLSNkZWZpbmUgICBNVEtfUEhZX0RBX1RYX0kyTVBCX0FfSEJUX01BU0tcdEdFTk1BU0soMTUsIDEwKVxuLSNkZWZpbmUgICBNVEtfUEhZX0RBX1RYX0kyTVBCX0FfVFNUX01BU0tcdEdFTk1BU0soNSwgMClcbi1cbi0jZGVmaW5lIE1US19QSFlfVFhfSTJNUEJfVEVTVF9NT0RFX0IxXHRcdDB4MTdcbi0jZGVmaW5lICAgTVRLX1BIWV9EQV9UWF9JMk1QQl9CX0dCRV9NQVNLXHRHRU5NQVNLKDEzLCA4KVxuLSNkZWZpbmUgICBNVEtfUEhZX0RBX1RYX0kyTVBCX0JfVEJUX01BU0tcdEdFTk1BU0soNSwgMClcbi1cbi0jZGVmaW5lIE1US19QSFlfVFhfSTJNUEJfVEVTVF9NT0RFX0IyXHRcdDB4MThcbi0jZGVmaW5lICAgTVRLX1BIWV9EQV9UWF9JMk1QQl9CX0hCVF9NQVNLXHRHRU5NQVNLKDEzLCA4KVxuLSNkZWZpbmUgICBNVEtfUEhZX0RBX1RYX0kyTVBCX0JfVFNUX01BU0tcdEdFTk1BU0soNSwgMClcbi1cbi0jZGVmaW5lIE1US19QSFlfVFhfSTJNUEJfVEVTVF9NT0RFX0MxXHRcdDB4MTlcbi0jZGVmaW5lICAgTVRLX1BIWV9EQV9UWF9JMk1QQl9DX0dCRV9NQVNLXHRHRU5NQVNLKDEzLCA4KVxuLSNkZWZpbmUgICBNVEtfUEhZX0RBX1RYX0kyTVBCX0NfVEJUX01BU0tcdEdFTk1BU0soNSwgMClcbi1cbi0jZGVmaW5lIE1US19QSFlfVFhfSTJNUEJfVEVTVF9NT0RFX0MyXHRcdDB4MjBcbi0jZGVmaW5lICAgTVRLX1BIWV9EQV9UWF9JMk1QQl9DX0hCVF9NQVNLXHRHRU5NQVNLKDEzLCA4KVxuLSNkZWZpbmUgICBNVEtfUEhZX0RBX1RYX0kyTVBCX0NfVFNUX01BU0tcdEdFTk1BU0soNSwgMClcbi1cbi0jZGVmaW5lIE1US19QSFlfVFhfSTJNUEJfVEVTVF9NT0RFX0QxXHRcdDB4MjFcbi0jZGVmaW5lICAgTVRLX1BIWV9EQV9UWF9JMk1QQl9EX0dCRV9NQVNLXHRHRU5NQVNLKDEzLCA4KVxuLSNkZWZpbmUgICBNVEtfUEhZX0RBX1RYX0kyTVBCX0RfVEJUX01BU0tcdEdFTk1BU0soNSwgMClcbi1cbi0jZGVmaW5lIE1US19QSFlfVFhfSTJNUEJfVEVTVF9NT0RFX0QyXHRcdDB4MjJcbi0jZGVmaW5lICAgTVRLX1BIWV9EQV9UWF9JMk1QQl9EX0hCVF9NQVNLXHRHRU5NQVNLKDEzLCA4KVxuLSNkZWZpbmUgICBNVEtfUEhZX0RBX1RYX0kyTVBCX0RfVFNUX01BU0tcdEdFTk1BU0soNSwgMClcbi1cbi0jZGVmaW5lIE1US19QSFlfUlhBRENfQ1RSTF9SRzdcdFx0XHQweGM2XG4tI2RlZmluZSAgIE1US19QSFlfREFfQURfQlVGX0JJQVNfTFBfTUFTS1x0R0VOTUFTSyg5LCA4KVxuLVxuLSNkZWZpbmUgTVRLX1BIWV9SWEFEQ19DVFJMX1JHOVx0XHRcdDB4Yzhcbi0jZGVmaW5lICAgTVRLX1BIWV9EQV9SWF9QU0JOX1RCVF9NQVNLXHRcdEdFTk1BU0soMTQsIDEyKVxuLSNkZWZpbmUgICBNVEtfUEhZX0RBX1JYX1BTQk5fSEJUX01BU0tcdFx0R0VOTUFTSygxMCwgOClcbi0jZGVmaW5lICAgTVRLX1BIWV9EQV9SWF9QU0JOX0dCRV9NQVNLXHRcdEdFTk1BU0soNiwgNClcbi0jZGVmaW5lICAgTVRLX1BIWV9EQV9SWF9QU0JOX0xQX01BU0tcdFx0R0VOTUFTSygyLCAwKVxuLVxuLSNkZWZpbmUgTVRLX1BIWV9MRE9fT1VUUFVUX1ZcdFx0XHQweGQ3XG4tXG4tI2RlZmluZSBNVEtfUEhZX1JHX0FOQV9DQUxfUkcwXHRcdFx0MHhkYlxuLSNkZWZpbmUgICBNVEtfUEhZX1JHX0NBTF9DS0lOVlx0XHRcdEJJVCgxMilcbi0jZGVmaW5lICAgTVRLX1BIWV9SR19BTkFfQ0FMRU5cdFx0XHRCSVQoOClcbi0jZGVmaW5lICAgTVRLX1BIWV9SR19aQ0FMRU5fQVx0XHRcdEJJVCgwKVxuLVxuLSNkZWZpbmUgTVRLX1BIWV9SR19BTkFfQ0FMX1JHMVx0XHRcdDB4ZGNcbi0jZGVmaW5lICAgTVRLX1BIWV9SR19aQ0FMRU5fQlx0XHRcdEJJVCgxMilcbi0jZGVmaW5lICAgTVRLX1BIWV9SR19aQ0FMRU5fQ1x0XHRcdEJJVCg4KVxuLSNkZWZpbmUgICBNVEtfUEhZX1JHX1pDQUxFTl9EXHRcdFx0QklUKDQpXG4tI2RlZmluZSAgIE1US19QSFlfUkdfVFhWT1NfQ0FMRU5cdFx0QklUKDApXG4tXG4tI2RlZmluZSBNVEtfUEhZX1JHX0FOQV9DQUxfUkc1XHRcdFx0MHhlMFxuLSNkZWZpbmUgICBNVEtfUEhZX1JHX1JFWFRfVFJJTV9NQVNLXHRcdEdFTk1BU0soMTMsIDgpXG4tXG4tI2RlZmluZSBNVEtfUEhZX1JHX1RYX0ZJTFRFUlx0XHRcdDB4ZmVcbi1cbi0jZGVmaW5lIE1US19QSFlfUkdfTFBJX1BDU19EU1BfQ1RSTF9SRUcxMjBcdDB4MTIwXG4tI2RlZmluZSAgIE1US19QSFlfTFBJX1NJR19FTl9MT19USFJFU0gxMDAwX01BU0tcdEdFTk1BU0soMTIsIDgpXG4tI2RlZmluZSAgIE1US19QSFlfTFBJX1NJR19FTl9ISV9USFJFU0gxMDAwX01BU0tcdEdFTk1BU0soNCwgMClcbi1cbi0jZGVmaW5lIE1US19QSFlfUkdfTFBJX1BDU19EU1BfQ1RSTF9SRUcxMjJcdDB4MTIyXG4tI2RlZmluZSAgIE1US19QSFlfTFBJX05PUk1fTVNFX0hJX1RIUkVTSDEwMDBfTUFTS1x0R0VOTUFTSyg3LCAwKVxuLVxuLSNkZWZpbmUgTVRLX1BIWV9SR19URVNUTVVYX0FEQ19DVFJMXHRcdDB4MTQ0XG4tI2RlZmluZSAgIE1US19QSFlfUkdfVFhFTl9ESUdfTUFTS1x0XHRHRU5NQVNLKDUsIDUpXG4tXG4tI2RlZmluZSBNVEtfUEhZX1JHX0NSX1RYX0FNUF9PRkZTRVRfQV9CXHRcdDB4MTcyXG4tI2RlZmluZSAgIE1US19QSFlfQ1JfVFhfQU1QX09GRlNFVF9BX01BU0tcdEdFTk1BU0soMTMsIDgpXG4tI2RlZmluZSAgIE1US19QSFlfQ1JfVFhfQU1QX09GRlNFVF9CX01BU0tcdEdFTk1BU0soNiwgMClcbi1cbi0jZGVmaW5lIE1US19QSFlfUkdfQ1JfVFhfQU1QX09GRlNFVF9DX0RcdFx0MHgxNzNcbi0jZGVmaW5lICAgTVRLX1BIWV9DUl9UWF9BTVBfT0ZGU0VUX0NfTUFTS1x0R0VOTUFTSygxMywgOClcbi0jZGVmaW5lICAgTVRLX1BIWV9DUl9UWF9BTVBfT0ZGU0VUX0RfTUFTS1x0R0VOTUFTSyg2LCAwKVxuLVxuLSNkZWZpbmUgTVRLX1BIWV9SR19BRF9DQUxfQ09NUFx0XHRcdDB4MTdhXG4tI2RlZmluZSAgIE1US19QSFlfQURfQ0FMX0NPTVBfT1VUX01BU0tcdFx0R0VOTUFTSyg4LCA4KVxuLVxuLSNkZWZpbmUgTVRLX1BIWV9SR19BRF9DQUxfQ0xLXHRcdFx0MHgxN2Jcbi0jZGVmaW5lICAgTVRLX1BIWV9EQV9DQUxfQ0xLXHRcdFx0QklUKDApXG4tXG4tI2RlZmluZSBNVEtfUEhZX1JHX0FEX0NBTElOXHRcdFx0MHgxN2Ncbi0jZGVmaW5lICAgTVRLX1BIWV9EQV9DQUxJTl9GTEFHXHRcdFx0QklUKDApXG4tXG4tI2RlZmluZSBNVEtfUEhZX1JHX0RBU05fREFDX0lOMF9BXHRcdDB4MTdkXG4tI2RlZmluZSAgIE1US19QSFlfREFTTl9EQUNfSU4wX0FfTUFTS1x0XHRHRU5NQVNLKDksIDApXG4tXG4tI2RlZmluZSBNVEtfUEhZX1JHX0RBU05fREFDX0lOMF9CXHRcdDB4MTdlXG4tI2RlZmluZSAgIE1US19QSFlfREFTTl9EQUNfSU4wX0JfTUFTS1x0XHRHRU5NQVNLKDksIDApXG4tXG4tI2RlZmluZSBNVEtfUEhZX1JHX0RBU05fREFDX0lOMF9DXHRcdDB4MTdmXG4tI2RlZmluZSAgIE1US19QSFlfREFTTl9EQUNfSU4wX0NfTUFTS1x0XHRHRU5NQVNLKDksIDApXG4tXG4tI2RlZmluZSBNVEtfUEhZX1JHX0RBU05fREFDX0lOMF9EXHRcdDB4MTgwXG4tI2RlZmluZSAgIE1US19QSFlfREFTTl9EQUNfSU4wX0RfTUFTS1x0XHRHRU5NQVNLKDksIDApXG4tXG4tI2RlZmluZSBNVEtfUEhZX1JHX0RBU05fREFDX0lOMV9BXHRcdDB4MTgxXG4tI2RlZmluZSAgIE1US19QSFlfREFTTl9EQUNfSU4xX0FfTUFTS1x0XHRHRU5NQVNLKDksIDApXG4tXG4tI2RlZmluZSBNVEtfUEhZX1JHX0RBU05fREFDX0lOMV9CXHRcdDB4MTgyXG4tI2RlZmluZSAgIE1US19QSFlfREFTTl9EQUNfSU4xX0JfTUFTS1x0XHRHRU5NQVNLKDksIDApXG4tXG4tI2RlZmluZSBNVEtfUEhZX1JHX0RBU05fREFDX0lOMV9DXHRcdDB4MTgzXG4tI2RlZmluZSAgIE1US19QSFlfREFTTl9EQUNfSU4xX0NfTUFTS1x0XHRHRU5NQVNLKDksIDApXG4tXG4tI2RlZmluZSBNVEtfUEhZX1JHX0RBU05fREFDX0lOMV9EXHRcdDB4MTg0XG4tI2RlZmluZSAgIE1US19QSFlfREFTTl9EQUNfSU4xX0RfTUFTS1x0XHRHRU5NQVNLKDksIDApXG4tXG4tI2RlZmluZSBNVEtfUEhZX1JHX0RFVjFFX1JFRzE5Ylx0XHRcdDB4MTliXG4tI2RlZmluZSAgIE1US19QSFlfQllQQVNTX0RTUF9MUElfUkVBRFlcdFx0QklUKDgpXG4tXG4tI2RlZmluZSBNVEtfUEhZX1JHX0xQX0lJUjJfSzFfTFx0XHRcdDB4MjJhXG4tI2RlZmluZSBNVEtfUEhZX1JHX0xQX0lJUjJfSzFfVVx0XHRcdDB4MjJiXG4tI2RlZmluZSBNVEtfUEhZX1JHX0xQX0lJUjJfSzJfTFx0XHRcdDB4MjJjXG4tI2RlZmluZSBNVEtfUEhZX1JHX0xQX0lJUjJfSzJfVVx0XHRcdDB4MjJkXG4tI2RlZmluZSBNVEtfUEhZX1JHX0xQX0lJUjJfSzNfTFx0XHRcdDB4MjJlXG4tI2RlZmluZSBNVEtfUEhZX1JHX0xQX0lJUjJfSzNfVVx0XHRcdDB4MjJmXG4tI2RlZmluZSBNVEtfUEhZX1JHX0xQX0lJUjJfSzRfTFx0XHRcdDB4MjMwXG4tI2RlZmluZSBNVEtfUEhZX1JHX0xQX0lJUjJfSzRfVVx0XHRcdDB4MjMxXG4tI2RlZmluZSBNVEtfUEhZX1JHX0xQX0lJUjJfSzVfTFx0XHRcdDB4MjMyXG4tI2RlZmluZSBNVEtfUEhZX1JHX0xQX0lJUjJfSzVfVVx0XHRcdDB4MjMzXG4tXG4tI2RlZmluZSBNVEtfUEhZX1JHX0RFVjFFX1JFRzIzNFx0XHRcdDB4MjM0XG4tI2RlZmluZSAgIE1US19QSFlfVFJfT1BFTl9MT09QX0VOX01BU0tcdFx0R0VOTUFTSygwLCAwKVxuLSNkZWZpbmUgICBNVEtfUEhZX0xQRl9YX0FWRVJBR0VfTUFTS1x0XHRHRU5NQVNLKDcsIDQpXG4tI2RlZmluZSAgIE1US19QSFlfVFJfTFBfSUlSX0VFRV9FTlx0XHRCSVQoMTIpXG4tXG4tI2RlZmluZSBNVEtfUEhZX1JHX0xQRl9DTlRfVkFMXHRcdFx0MHgyMzVcbi1cbi0jZGVmaW5lIE1US19QSFlfUkdfREVWMUVfUkVHMjM4XHRcdFx0MHgyMzhcbi0jZGVmaW5lICAgTVRLX1BIWV9MUElfU0xWX1NFTkRfVFhfVElNRVJfTUFTS1x0R0VOTUFTSyg4LCAwKVxuLSNkZWZpbmUgICBNVEtfUEhZX0xQSV9TTFZfU0VORF9UWF9FTlx0XHRCSVQoMTIpXG4tXG4tI2RlZmluZSBNVEtfUEhZX1JHX0RFVjFFX1JFRzIzOVx0XHRcdDB4MjM5XG4tI2RlZmluZSAgIE1US19QSFlfTFBJX1NFTkRfTE9DX1RJTUVSX01BU0tcdEdFTk1BU0soOCwgMClcbi0jZGVmaW5lICAgTVRLX1BIWV9MUElfVFhQQ1NfTE9DX1JDVlx0XHRCSVQoMTIpXG4tXG4tI2RlZmluZSBNVEtfUEhZX1JHX0RFVjFFX1JFRzI3Q1x0XHRcdDB4MjdjXG4tI2RlZmluZSAgIE1US19QSFlfVkdBU1RBVEVfRkZFX1RIUl9TVDFfTUFTS1x0R0VOTUFTSygxMiwgOClcbi0jZGVmaW5lIE1US19QSFlfUkdfREVWMUVfUkVHMjdEXHRcdFx0MHgyN2Rcbi0jZGVmaW5lICAgTVRLX1BIWV9WR0FTVEFURV9GRkVfVEhSX1NUMl9NQVNLXHRHRU5NQVNLKDQsIDApXG4tXG4tI2RlZmluZSBNVEtfUEhZX1JHX0RFVjFFX1JFRzJDN1x0XHRcdDB4MmM3XG4tI2RlZmluZSAgIE1US19QSFlfTUFYX0dBSU5fTUFTS1x0XHRcdEdFTk1BU0soNCwgMClcbi0jZGVmaW5lICAgTVRLX1BIWV9NSU5fR0FJTl9NQVNLXHRcdFx0R0VOTUFTSygxMiwgOClcbi1cbi0jZGVmaW5lIE1US19QSFlfUkdfREVWMUVfUkVHMkQxXHRcdFx0MHgyZDFcbi0jZGVmaW5lICAgTVRLX1BIWV9WQ09fU0xJQ0VSX1RIUkVTSF9CSVRTX0hJR0hfRUVFX01BU0tcdEdFTk1BU0soNywgMClcbi0jZGVmaW5lICAgTVRLX1BIWV9MUElfU0tJUF9TRF9TTFZfVFJcdFx0QklUKDgpXG4tI2RlZmluZSAgIE1US19QSFlfTFBJX1RSX1JFQURZXHRcdFx0QklUKDkpXG4tI2RlZmluZSAgIE1US19QSFlfTFBJX1ZDT19FRUVfU1RHMF9FTlx0XHRCSVQoMTApXG4tXG4tI2RlZmluZSBNVEtfUEhZX1JHX0RFVjFFX1JFRzMyM1x0XHRcdDB4MzIzXG4tI2RlZmluZSAgIE1US19QSFlfRUVFX1dBS0VfTUFTX0lOVF9EQ1x0XHRCSVQoMClcbi0jZGVmaW5lICAgTVRLX1BIWV9FRUVfV0FLRV9TTFZfSU5UX0RDXHRcdEJJVCg0KVxuLVxuLSNkZWZpbmUgTVRLX1BIWV9SR19ERVYxRV9SRUczMjRcdFx0XHQweDMyNFxuLSNkZWZpbmUgICBNVEtfUEhZX1NNSV9ERVRDTlRfTUFYX01BU0tcdFx0R0VOTUFTSyg1LCAwKVxuLSNkZWZpbmUgICBNVEtfUEhZX1NNSV9ERVRfTUFYX0VOXHRcdEJJVCg4KVxuLVxuLSNkZWZpbmUgTVRLX1BIWV9SR19ERVYxRV9SRUczMjZcdFx0XHQweDMyNlxuLSNkZWZpbmUgICBNVEtfUEhZX0xQSV9NT0RFX1NEX09OXHRcdEJJVCgwKVxuLSNkZWZpbmUgICBNVEtfUEhZX1JFU0VUX1JBTkRVUERfQ05UXHRcdEJJVCgxKVxuLSNkZWZpbmUgICBNVEtfUEhZX1RSRUNfVVBEQVRFX0VOQUJfQ0xSXHRcdEJJVCgyKVxuLSNkZWZpbmUgICBNVEtfUEhZX0xQSV9RVUlUX1dBSVRfREZFX1NJR19ERVRfT0ZGXHRCSVQoNClcbi0jZGVmaW5lICAgTVRLX1BIWV9UUl9SRUFEWV9TS0lQX0FGRV9XQUtFVVBcdEJJVCg1KVxuLVxuLSNkZWZpbmUgTVRLX1BIWV9MRE9fUFVNUF9FTl9QQUlSQUJcdFx0MHg1MDJcbi0jZGVmaW5lIE1US19QSFlfTERPX1BVTVBfRU5fUEFJUkNEXHRcdDB4NTAzXG4tXG4tI2RlZmluZSBNVEtfUEhZX0RBX1RYX1I1MF9QQUlSX0FcdFx0MHg1M2Rcbi0jZGVmaW5lIE1US19QSFlfREFfVFhfUjUwX1BBSVJfQlx0XHQweDUzZVxuLSNkZWZpbmUgTVRLX1BIWV9EQV9UWF9SNTBfUEFJUl9DXHRcdDB4NTNmXG4tI2RlZmluZSBNVEtfUEhZX0RBX1RYX1I1MF9QQUlSX0RcdFx0MHg1NDBcbi1cbi0vKiBSZWdpc3RlcnMgb24gTURJT19NTURfVkVORDIgKi9cbi0jZGVmaW5lIE1US19QSFlfTEVEMV9ERUZBVUxUX1BPTEFSSVRJRVNcdFx0QklUKDEpXG4tXG4tI2RlZmluZSBNVEtfUEhZX1JHX0JHX1JBU0VMXHRcdFx0MHgxMTVcbi0jZGVmaW5lICAgTVRLX1BIWV9SR19CR19SQVNFTF9NQVNLXHRcdEdFTk1BU0soMiwgMClcbi1cbi0vKiAnYm9vdHRyYXAnIHJlZ2lzdGVyIHJlZmxlY3RpbmcgdGhlIGNvbmZpZ3VyYXRpb24gb2YgdGhlIDQgUEhZIExFRHMgKi9cbi0jZGVmaW5lIFJHX0dQSU9fTUlTQ19UUEJBTkswXHRcdFx0MHg2ZjBcbi0jZGVmaW5lICAgUkdfR1BJT19NSVNDX1RQQkFOSzBfQk9PVE1PREVcdFx0R0VOTUFTSygxMSwgOClcbi1cbiAvKiBUaGVzZSBtYWNybyBwcml2aWRlcyBlZnVzZSBwYXJzaW5nIGZvciBpbnRlcm5hbCBwaHkuICovXG4gI2RlZmluZSBFRlNfREFfVFhfSTJNUEJfQSh4KVx0XHRcdCgoKHgpIFx1MDAzZVx1MDAzZSAwKSBcdTAwMjYgR0VOTUFTSyg1LCAwKSlcbiAjZGVmaW5lIEVGU19EQV9UWF9JMk1QQl9CKHgpXHRcdFx0KCgoeCkgXHUwMDNlXHUwMDNlIDYpIFx1MDAyNiBHRU5NQVNLKDUsIDApKVxuQEAgLTM0Niw1MSArMzQsMTYgQEBcbiAjZGVmaW5lIEVGU19SR19CR19SQVNFTCh4KVx0XHRcdCgoKHgpIFx1MDAzZVx1MDAzZSA0KSBcdTAwMjYgR0VOTUFTSygyLCAwKSlcbiAjZGVmaW5lIEVGU19SR19SRVhUX1RSSU0oeClcdFx0XHQoKCh4KSBcdTAwM2VcdTAwM2UgNykgXHUwMDI2IEdFTk1BU0soNSwgMCkpXG4gXG4tZW51bSB7XG4tXHROT19QQUlSLFxuLVx0UEFJUl9BLFxuLVx0UEFJUl9CLFxuLVx0UEFJUl9DLFxuLVx0UEFJUl9ELFxuLX07XG4tXG4tZW51bSBjYWxpYnJhdGlvbl9tb2RlIHtcbi1cdEVGVVNFX0ssXG4tXHRTV19LXG4tfTtcbi1cbi1lbnVtIENBTF9JVEVNIHtcbi1cdFJFWFQsXG4tXHRUWF9PRkZTRVQsXG4tXHRUWF9BTVAsXG4tXHRUWF9SNTAsXG4tXHRUWF9WQ01cbi19O1xuLVxuLWVudW0gQ0FMX01PREUge1xuLVx0RUZVU0VfTSxcbi1cdFNXX01cbi19O1xuLVxuIHN0cnVjdCBtdGtfc29jcGh5X3NoYXJlZCB7XG4gXHR1MzJcdFx0XHRib290dHJhcDtcbiBcdHN0cnVjdCBtdGtfc29jcGh5X3ByaXZcdHByaXZbNF07XG4gfTtcbiBcbi0vKiBPbmUgY2FsaWJyYXRpb24gY3ljbGUgY29uc2lzdHMgb2Y6XG4tICogMS5TZXQgREFfQ0FMSU5fRkxBRyBoaWdoIHRvIHN0YXJ0IGNhbGlicmF0aW9uLiBLZWVwIGl0IGhpZ2hcbi0gKiAgIHVudGlsIEFEX0NBTF9DT01QIGlzIHJlYWR5IHRvIG91dHB1dCBjYWxpYnJhdGlvbiByZXN1bHQuXG4tICogMi5XYWl0IHVudGlsIERBX0NBTF9DTEsgaXMgYXZhaWxhYmxlLlxuLSAqIDMuRmV0Y2ggQURfQ0FMX0NPTVBfT1VULlxuLSAqL1xuLXN0YXRpYyBpbnQgY2FsX2N5Y2xlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIGludCBkZXZhZCxcbi1cdFx0ICAgICB1MzIgcmVnbnVtLCB1MTYgbWFzaywgdTE2IGNhbF92YWwpXG4raW50IG10a19jYWxfY3ljbGVfd2FpdChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuIHtcbiBcdGludCByZWdfdmFsO1xuIFx0aW50IHJldDtcbiBcbi1cdHBoeV9tb2RpZnlfbW1kKHBoeWRldiwgZGV2YWQsIHJlZ251bSxcbi1cdFx0ICAgICAgIG1hc2ssIGNhbF92YWwpO1xuIFx0cGh5X3NldF9iaXRzX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCBNVEtfUEhZX1JHX0FEX0NBTElOLFxuIFx0XHRcdCBNVEtfUEhZX0RBX0NBTElOX0ZMQUcpO1xuIFxuQEAgLTQwOSw3ICs2MiwyNSBAQCBzdGF0aWMgaW50IGNhbF9jeWNsZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCBpbnQgZGV2YWQsXG4gXHRyZXQgPSBwaHlfcmVhZF9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSwgTVRLX1BIWV9SR19BRF9DQUxfQ09NUCk7XG4gXHRpZiAocmV0IFx1MDAzYyAwKVxuIFx0XHRyZXR1cm4gcmV0O1xuLVx0cmV0ID0gRklFTERfR0VUKE1US19QSFlfQURfQ0FMX0NPTVBfT1VUX01BU0ssIHJldCk7XG4rXG4rXHRyZXR1cm4gRklFTERfR0VUKE1US19QSFlfQURfQ0FMX0NPTVBfT1VUX01BU0ssIHJldCk7XG4rfVxuK1xuKy8qIE9uZSBjYWxpYnJhdGlvbiBjeWNsZSBjb25zaXN0cyBvZjpcbisgKiAxLlNldCBEQV9DQUxJTl9GTEFHIGhpZ2ggdG8gc3RhcnQgY2FsaWJyYXRpb24uIEtlZXAgaXQgaGlnaFxuKyAqICAgdW50aWwgQURfQ0FMX0NPTVAgaXMgcmVhZHkgdG8gb3V0cHV0IGNhbGlicmF0aW9uIHJlc3VsdC5cbisgKiAyLldhaXQgdW50aWwgREFfQ0FMX0NMSyBpcyBhdmFpbGFibGUuXG4rICogMy5GZXRjaCBBRF9DQUxfQ09NUF9PVVQuXG4rICovXG4rc3RhdGljIGludCBjYWxfY3ljbGUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgaW50IGRldmFkLFxuK1x0XHQgICAgIHUzMiByZWdudW0sIHUxNiBtYXNrLCB1MTYgY2FsX3ZhbClcbit7XG4rXHRpbnQgcmV0O1xuK1xuK1x0cGh5X21vZGlmeV9tbWQocGh5ZGV2LCBkZXZhZCwgcmVnbnVtLFxuK1x0XHQgICAgICAgbWFzaywgY2FsX3ZhbCk7XG4rXG4rXHRyZXQgPSBtdGtfY2FsX2N5Y2xlX3dhaXQocGh5ZGV2KTtcbiBcdHBoeWRldl9kYmcocGh5ZGV2LCBcImNhbF92YWw6IDB4JXgsIHJldDogJWRcXG5cIiwgY2FsX3ZhbCwgcmV0KTtcbiBcbiBcdHJldHVybiByZXQ7XG5AQCAtMTIxNSw3MyArODg2LDYgQEAgc3RhdGljIGludCBtdDc5OHhfcGh5X2NvbmZpZ19pbml0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4gXHRyZXR1cm4gbXQ3OTh4X3BoeV9jYWxpYnJhdGlvbihwaHlkZXYpO1xuIH1cbiBcbi1zdGF0aWMgaW50IG10Nzk4eF9waHlfbGVkX2JsaW5rX3NldChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCB1OCBpbmRleCxcbi1cdFx0XHRcdCAgICB1bnNpZ25lZCBsb25nICpkZWxheV9vbixcbi1cdFx0XHRcdCAgICB1bnNpZ25lZCBsb25nICpkZWxheV9vZmYpXG4te1xuLVx0Ym9vbCBibGlua2luZyA9IGZhbHNlO1xuLVx0aW50IGVycjtcbi1cbi1cdGVyciA9IG10a19waHlfbGVkX251bV9kbHlfY2ZnKGluZGV4LCBkZWxheV9vbiwgZGVsYXlfb2ZmLCBcdTAwMjZibGlua2luZyk7XG4tXHRpZiAoZXJyIFx1MDAzYyAwKVxuLVx0XHRyZXR1cm4gZXJyO1xuLVxuLVx0ZXJyID0gbXRrX3BoeV9od19sZWRfYmxpbmtfc2V0KHBoeWRldiwgaW5kZXgsIGJsaW5raW5nKTtcbi1cdGlmIChlcnIpXG4tXHRcdHJldHVybiBlcnI7XG4tXG4tXHRyZXR1cm4gbXRrX3BoeV9od19sZWRfb25fc2V0KHBoeWRldiwgaW5kZXgsIE1US19HUEhZX0xFRF9PTl9NQVNLLFxuLVx0XHRcdFx0ICAgICBmYWxzZSk7XG4tfVxuLVxuLXN0YXRpYyBpbnQgbXQ3OTh4X3BoeV9sZWRfYnJpZ2h0bmVzc19zZXQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldixcbi1cdFx0XHRcdFx0IHU4IGluZGV4LCBlbnVtIGxlZF9icmlnaHRuZXNzIHZhbHVlKVxuLXtcbi1cdGludCBlcnI7XG4tXG4tXHRlcnIgPSBtdGtfcGh5X2h3X2xlZF9ibGlua19zZXQocGh5ZGV2LCBpbmRleCwgZmFsc2UpO1xuLVx0aWYgKGVycilcbi1cdFx0cmV0dXJuIGVycjtcbi1cbi1cdHJldHVybiBtdGtfcGh5X2h3X2xlZF9vbl9zZXQocGh5ZGV2LCBpbmRleCwgTVRLX0dQSFlfTEVEX09OX01BU0ssXG4tXHRcdFx0XHQgICAgICh2YWx1ZSAhPSBMRURfT0ZGKSk7XG4tfVxuLVxuLXN0YXRpYyBjb25zdCB1bnNpZ25lZCBsb25nIHN1cHBvcnRlZF90cmlnZ2VycyA9XG4tXHRCSVQoVFJJR0dFUl9ORVRERVZfRlVMTF9EVVBMRVgpIHxcbi1cdEJJVChUUklHR0VSX05FVERFVl9IQUxGX0RVUExFWCkgfFxuLVx0QklUKFRSSUdHRVJfTkVUREVWX0xJTkspICAgICAgICB8XG4tXHRCSVQoVFJJR0dFUl9ORVRERVZfTElOS18xMCkgICAgIHxcbi1cdEJJVChUUklHR0VSX05FVERFVl9MSU5LXzEwMCkgICAgfFxuLVx0QklUKFRSSUdHRVJfTkVUREVWX0xJTktfMTAwMCkgICB8XG4tXHRCSVQoVFJJR0dFUl9ORVRERVZfUlgpICAgICAgICAgIHxcbi1cdEJJVChUUklHR0VSX05FVERFVl9UWCk7XG4tXG4tc3RhdGljIGludCBtdDc5OHhfcGh5X2xlZF9od19pc19zdXBwb3J0ZWQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgdTggaW5kZXgsXG4tXHRcdFx0XHRcdCAgdW5zaWduZWQgbG9uZyBydWxlcylcbi17XG4tXHRyZXR1cm4gbXRrX3BoeV9sZWRfaHdfaXNfc3VwcG9ydGVkKHBoeWRldiwgaW5kZXgsIHJ1bGVzLFxuLVx0XHRcdFx0XHQgICBzdXBwb3J0ZWRfdHJpZ2dlcnMpO1xuLX1cbi1cbi1zdGF0aWMgaW50IG10Nzk4eF9waHlfbGVkX2h3X2NvbnRyb2xfZ2V0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIHU4IGluZGV4LFxuLVx0XHRcdFx0XHQgdW5zaWduZWQgbG9uZyAqcnVsZXMpXG4te1xuLVx0cmV0dXJuIG10a19waHlfbGVkX2h3X2N0cmxfZ2V0KHBoeWRldiwgaW5kZXgsIHJ1bGVzLFxuLVx0XHRcdFx0ICAgICAgIE1US19HUEhZX0xFRF9PTl9TRVQsXG4tXHRcdFx0XHQgICAgICAgTVRLX0dQSFlfTEVEX1JYX0JMSU5LX1NFVCxcbi1cdFx0XHRcdCAgICAgICBNVEtfR1BIWV9MRURfVFhfQkxJTktfU0VUKTtcbi19O1xuLVxuLXN0YXRpYyBpbnQgbXQ3OTh4X3BoeV9sZWRfaHdfY29udHJvbF9zZXQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgdTggaW5kZXgsXG4tXHRcdFx0XHRcdCB1bnNpZ25lZCBsb25nIHJ1bGVzKVxuLXtcbi1cdHJldHVybiBtdGtfcGh5X2xlZF9od19jdHJsX3NldChwaHlkZXYsIGluZGV4LCBydWxlcyxcbi1cdFx0XHRcdCAgICAgICBNVEtfR1BIWV9MRURfT05fU0VULFxuLVx0XHRcdFx0ICAgICAgIE1US19HUEhZX0xFRF9SWF9CTElOS19TRVQsXG4tXHRcdFx0XHQgICAgICAgTVRLX0dQSFlfTEVEX1RYX0JMSU5LX1NFVCk7XG4tfTtcbi1cbiBzdGF0aWMgYm9vbCBtdDc5ODhfcGh5X2xlZF9nZXRfcG9sYXJpdHkoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgaW50IGxlZF9udW0pXG4ge1xuIFx0c3RydWN0IG10a19zb2NwaHlfc2hhcmVkICpwcml2ID0gcGh5X3BhY2thZ2VfZ2V0X3ByaXYocGh5ZGV2KTtcbkBAIC0xNDE4LDU4ICsxMDIyLDYgQEAgc3RhdGljIGludCBtdDc5ODFfcGh5X3Byb2JlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4gXHRyZXR1cm4gbXQ3OTh4X3BoeV9jYWxpYnJhdGlvbihwaHlkZXYpO1xuIH1cbiBcbi1zdGF0aWMgaW50IGFuNzU4MV9waHlfcHJvYmUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbi17XG4tXHRzdHJ1Y3QgbXRrX3NvY3BoeV9wcml2ICpwcml2O1xuLVx0c3RydWN0IHBpbmN0cmwgKnBpbmN0cmw7XG4tXG4tXHQvKiBUb2dnbGUgcGluY3RybCB0byBlbmFibGUgUEhZIExFRCAqL1xuLVx0cGluY3RybCA9IGRldm1fcGluY3RybF9nZXRfc2VsZWN0KFx1MDAyNnBoeWRldi1cdTAwM2VtZGlvLmRldiwgXCJnYmUtbGVkXCIpO1xuLVx0aWYgKElTX0VSUihwaW5jdHJsKSlcbi1cdFx0ZGV2X2VycihcdTAwMjZwaHlkZXYtXHUwMDNlbWRpby5idXMtXHUwMDNlZGV2LFxuLVx0XHRcdFwiRmFpbGVkIHRvIHNldHVwIFBIWSBMRUQgcGluY3RybFxcblwiKTtcbi1cbi1cdHByaXYgPSBkZXZtX2t6YWxsb2MoXHUwMDI2cGh5ZGV2LVx1MDAzZW1kaW8uZGV2LCBzaXplb2YoKnByaXYpLCBHRlBfS0VSTkVMKTtcbi1cdGlmICghcHJpdilcbi1cdFx0cmV0dXJuIC1FTk9NRU07XG4tXG4tXHRwaHlkZXYtXHUwMDNlcHJpdiA9IHByaXY7XG4tXG4tXHRyZXR1cm4gMDtcbi19XG4tXG4tc3RhdGljIGludCBhbjc1ODFfcGh5X2xlZF9wb2xhcml0eV9zZXQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgaW50IGluZGV4LFxuLVx0XHRcdFx0ICAgICAgIHVuc2lnbmVkIGxvbmcgbW9kZXMpXG4te1xuLVx0dTE2IHZhbCA9IDA7XG4tXHR1MzIgbW9kZTtcbi1cbi1cdGlmIChpbmRleCBcdTAwM2U9IE1US19QSFlfTUFYX0xFRFMpXG4tXHRcdHJldHVybiAtRUlOVkFMO1xuLVxuLVx0Zm9yX2VhY2hfc2V0X2JpdChtb2RlLCBcdTAwMjZtb2RlcywgX19QSFlfTEVEX01PREVTX05VTSkge1xuLVx0XHRzd2l0Y2ggKG1vZGUpIHtcbi1cdFx0Y2FzZSBQSFlfTEVEX0FDVElWRV9MT1c6XG4tXHRcdFx0dmFsID0gTVRLX1BIWV9MRURfT05fUE9MQVJJVFk7XG4tXHRcdFx0YnJlYWs7XG4tXHRcdGNhc2UgUEhZX0xFRF9BQ1RJVkVfSElHSDpcbi1cdFx0XHRicmVhaztcbi1cdFx0ZGVmYXVsdDpcbi1cdFx0XHRyZXR1cm4gLUVJTlZBTDtcbi1cdFx0fVxuLVx0fVxuLVxuLVx0cmV0dXJuIHBoeV9tb2RpZnlfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDIsIGluZGV4ID9cbi1cdFx0XHQgICAgICBNVEtfUEhZX0xFRDFfT05fQ1RSTCA6IE1US19QSFlfTEVEMF9PTl9DVFJMLFxuLVx0XHRcdCAgICAgIE1US19QSFlfTEVEX09OX1BPTEFSSVRZLCB2YWwpO1xuLX1cbi1cbi1zdGF0aWMgaW50IGFuNzU4M19waHlfY29uZmlnX2luaXQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbi17XG4tXHQvKiBCTUNSX1BET1dOIGlzIGVuYWJsZWQgYnkgZGVmYXVsdCAqL1xuLVx0cmV0dXJuIHBoeV9jbGVhcl9iaXRzKHBoeWRldiwgTUlJX0JNQ1IsIEJNQ1JfUERPV04pO1xuLX1cbi1cbiBzdGF0aWMgc3RydWN0IHBoeV9kcml2ZXIgbXRrX3NvY3BoeV9kcml2ZXJbXSA9IHtcbiBcdHtcbiBcdFx0UEhZX0lEX01BVENIX0VYQUNUKE1US19HUEhZX0lEX01UNzk4MSksXG5AQCAtMTUwNSwzMSArMTA1Nyw2IEBAIHN0YXRpYyBzdHJ1Y3QgcGh5X2RyaXZlciBtdGtfc29jcGh5X2RyaXZlcltdID0ge1xuIFx0XHQubGVkX2h3X2NvbnRyb2xfc2V0ID0gbXQ3OTh4X3BoeV9sZWRfaHdfY29udHJvbF9zZXQsXG4gXHRcdC5sZWRfaHdfY29udHJvbF9nZXQgPSBtdDc5OHhfcGh5X2xlZF9od19jb250cm9sX2dldCxcbiBcdH0sXG4tXHR7XG4tXHRcdFBIWV9JRF9NQVRDSF9FWEFDVChNVEtfR1BIWV9JRF9BTjc1ODEpLFxuLVx0XHQubmFtZVx0XHQ9IFwiQWlyb2hhIEFONzU4MSBQSFlcIixcbi1cdFx0LmNvbmZpZ19pbnRyXHQ9IGdlbnBoeV9ub19jb25maWdfaW50cixcbi1cdFx0LmhhbmRsZV9pbnRlcnJ1cHQgPSBnZW5waHlfaGFuZGxlX2ludGVycnVwdF9ub19hY2ssXG4tXHRcdC5wcm9iZVx0XHQ9IGFuNzU4MV9waHlfcHJvYmUsXG4tXHRcdC5sZWRfYmxpbmtfc2V0XHQ9IG10Nzk4eF9waHlfbGVkX2JsaW5rX3NldCxcbi1cdFx0LmxlZF9icmlnaHRuZXNzX3NldCA9IG10Nzk4eF9waHlfbGVkX2JyaWdodG5lc3Nfc2V0LFxuLVx0XHQubGVkX2h3X2lzX3N1cHBvcnRlZCA9IG10Nzk4eF9waHlfbGVkX2h3X2lzX3N1cHBvcnRlZCxcbi1cdFx0LmxlZF9od19jb250cm9sX3NldCA9IG10Nzk4eF9waHlfbGVkX2h3X2NvbnRyb2xfc2V0LFxuLVx0XHQubGVkX2h3X2NvbnRyb2xfZ2V0ID0gbXQ3OTh4X3BoeV9sZWRfaHdfY29udHJvbF9nZXQsXG4tXHRcdC5sZWRfcG9sYXJpdHlfc2V0ID0gYW43NTgxX3BoeV9sZWRfcG9sYXJpdHlfc2V0LFxuLVx0fSxcbi1cdHtcbi1cdFx0UEhZX0lEX01BVENIX0VYQUNUKE1US19HUEhZX0lEX0FONzU4MyksXG4tXHRcdC5uYW1lXHRcdD0gXCJBaXJvaGEgQU43NTgzIFBIWVwiLFxuLVx0XHQuY29uZmlnX2luaXRcdD0gYW43NTgzX3BoeV9jb25maWdfaW5pdCxcbi1cdFx0LnByb2JlXHRcdD0gYW43NTgxX3BoeV9wcm9iZSxcbi1cdFx0LmxlZF9ibGlua19zZXRcdD0gbXQ3OTh4X3BoeV9sZWRfYmxpbmtfc2V0LFxuLVx0XHQubGVkX2JyaWdodG5lc3Nfc2V0ID0gbXQ3OTh4X3BoeV9sZWRfYnJpZ2h0bmVzc19zZXQsXG4tXHRcdC5sZWRfaHdfaXNfc3VwcG9ydGVkID0gbXQ3OTh4X3BoeV9sZWRfaHdfaXNfc3VwcG9ydGVkLFxuLVx0XHQubGVkX2h3X2NvbnRyb2xfc2V0ID0gbXQ3OTh4X3BoeV9sZWRfaHdfY29udHJvbF9zZXQsXG4tXHRcdC5sZWRfaHdfY29udHJvbF9nZXQgPSBtdDc5OHhfcGh5X2xlZF9od19jb250cm9sX2dldCxcbi1cdFx0LmxlZF9wb2xhcml0eV9zZXQgPSBhbjc1ODFfcGh5X2xlZF9wb2xhcml0eV9zZXQsXG4tXHR9LFxuIH07XG4gXG4gbW9kdWxlX3BoeV9kcml2ZXIobXRrX3NvY3BoeV9kcml2ZXIpO1xuQEAgLTE1MzcsOCArMTA2NCw2IEBAIG1vZHVsZV9waHlfZHJpdmVyKG10a19zb2NwaHlfZHJpdmVyKTtcbiBzdGF0aWMgY29uc3Qgc3RydWN0IG1kaW9fZGV2aWNlX2lkIF9fbWF5YmVfdW51c2VkIG10a19zb2NwaHlfdGJsW10gPSB7XG4gXHR7IFBIWV9JRF9NQVRDSF9FWEFDVChNVEtfR1BIWV9JRF9NVDc5ODEpIH0sXG4gXHR7IFBIWV9JRF9NQVRDSF9FWEFDVChNVEtfR1BIWV9JRF9NVDc5ODgpIH0sXG4tXHR7IFBIWV9JRF9NQVRDSF9FWEFDVChNVEtfR1BIWV9JRF9BTjc1ODEpIH0sXG4tXHR7IFBIWV9JRF9NQVRDSF9FWEFDVChNVEtfR1BIWV9JRF9BTjc1ODMpIH0sXG4gXHR7IH1cbiB9O1xuIFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BoeS9tZWRpYXRlay9tdGstZ2Utc29jLmggYi9kcml2ZXJzL25ldC9waHkvbWVkaWF0ZWsvbXRrLWdlLXNvYy5oXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLjVlOWQyNGE5ODMzYzc3XG4tLS0gL2Rldi9udWxsXG4rKysgYi9kcml2ZXJzL25ldC9waHkvbWVkaWF0ZWsvbXRrLWdlLXNvYy5oXG5AQCAtMCwwICsxLDM2NCBAQFxuKy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wICovXG4rXG4rI2lmbmRlZiBfTVRLX0dFX1NPQ19IX1xuKyNkZWZpbmUgX01US19HRV9TT0NfSF9cbitcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9iaXRmaWVsZC5oXHUwMDNlXG4rXG4rI2RlZmluZSBNVEtfR1BIWV9JRF9NVDc5ODFcdFx0XHQweDAzYTI5NDYxXG4rI2RlZmluZSBNVEtfR1BIWV9JRF9NVDc5ODhcdFx0XHQweDAzYTI5NDgxXG4rI2RlZmluZSBBSVJPSEFfR1BIWV9JRF9BTjc1ODFcdFx0XHQweDAzYTI5NGMxXG4rI2RlZmluZSBBSVJPSEFfR1BIWV9JRF9BTjc1ODNcdFx0XHQweGMwZmYwNDIwXG4rXG4rI2RlZmluZSBNVEtfRVhUX1BBR0VfQUNDRVNTXHRcdFx0MHgxZlxuKyNkZWZpbmUgTVRLX1BIWV9QQUdFX1NUQU5EQVJEXHRcdFx0MHgwMDAwXG4rI2RlZmluZSBNVEtfUEhZX1BBR0VfRVhURU5ERURfMVx0XHRcdDB4MDAwMVxuKyNkZWZpbmUgTVRLX1BIWV9QQUdFX0VYVEVOREVEXzNcdFx0XHQweDAwMDNcbitcbisjZGVmaW5lIE1US19QSFlfTFBJX1JFR18xNFx0XHRcdDB4MTRcbisjZGVmaW5lIE1US19QSFlfTFBJX1dBS0VfVElNRVJfMTAwMF9NQVNLXHRHRU5NQVNLKDgsIDApXG4rXG4rI2RlZmluZSBNVEtfUEhZX0xQSV9SRUdfMWNcdFx0XHQweDFjXG4rI2RlZmluZSBNVEtfUEhZX1NNSV9ERVRfT05fVEhSRVNIX01BU0tcdFx0R0VOTUFTSygxMywgOClcbitcbisjZGVmaW5lIE1US19QSFlfUEFHRV9FWFRFTkRFRF8yQTMwXHRcdDB4MmEzMFxuK1xuKy8qIFJlZ2lzdGVycyBvbiBUb2tlbiBSaW5nIGRlYnVnIG5vZGVzICovXG4rLyogY2hfYWRkciA9IDB4MCwgbm9kZV9hZGRyID0gMHg3LCBkYXRhX2FkZHIgPSAweDE1ICovXG4rLyogTm9ybU1zZUxvVGhyZXNoICovXG4rI2RlZmluZSBOT1JNQUxfTVNFX0xPX1RIUkVTSF9NQVNLXHRcdEdFTk1BU0soMTUsIDgpXG4rXG4rLyogY2hfYWRkciA9IDB4MCwgbm9kZV9hZGRyID0gMHhmLCBkYXRhX2FkZHIgPSAweDNjICovXG4rLyogUmVtQWNrQ250TGltaXRDdHJsICovXG4rI2RlZmluZSBSRU1PVEVfQUNLX0NPVU5UX0xJTUlUX0NUUkxfTUFTS1x0R0VOTUFTSygyLCAxKVxuK1xuKy8qIGNoX2FkZHIgPSAweDEsIG5vZGVfYWRkciA9IDB4ZCwgZGF0YV9hZGRyID0gMHgyMCAqL1xuKy8qIFZjb1NsaWNlclRocmVzaEJpdHNIaWdoICovXG4rI2RlZmluZSBWQ09fU0xJQ0VSX1RIUkVTSF9ISUdIX01BU0tcdFx0R0VOTUFTSygyMywgMClcbitcbisvKiBjaF9hZGRyID0gMHgxLCBub2RlX2FkZHIgPSAweGYsIGRhdGFfYWRkciA9IDB4MCAqL1xuKy8qIERmZVRhaWxFbmFibGVWZ2FUaHJlc2gxMDAwICovXG4rI2RlZmluZSBERkVfVEFJTF9FQU5CTEVfVkdBX1RSSEVTSF8xMDAwXHRcdEdFTk1BU0soNSwgMSlcbitcbisvKiBjaF9hZGRyID0gMHgxLCBub2RlX2FkZHIgPSAweGYsIGRhdGFfYWRkciA9IDB4MSAqL1xuKy8qIE1ydmxUckZpeDEwMEtwICovXG4rI2RlZmluZSBNUlZMX1RSX0ZJWF8xMDBLUF9NQVNLXHRcdFx0R0VOTUFTSygyMiwgMjApXG4rLyogTXJ2bFRyRml4MTAwS2YgKi9cbisjZGVmaW5lIE1SVkxfVFJfRklYXzEwMEtGX01BU0tcdFx0XHRHRU5NQVNLKDE5LCAxNylcbisvKiBNcnZsVHJGaXgxMDAwS3AgKi9cbisjZGVmaW5lIE1SVkxfVFJfRklYXzEwMDBLUF9NQVNLXHRcdFx0R0VOTUFTSygxNiwgMTQpXG4rLyogTXJ2bFRyRml4MTAwMEtmICovXG4rI2RlZmluZSBNUlZMX1RSX0ZJWF8xMDAwS0ZfTUFTS1x0XHRcdEdFTk1BU0soMTMsIDExKVxuK1xuKy8qIGNoX2FkZHIgPSAweDEsIG5vZGVfYWRkciA9IDB4ZiwgZGF0YV9hZGRyID0gMHgxMiAqL1xuKy8qIFZnYURlY1JhdGUgKi9cbisjZGVmaW5lIFZHQV9ERUNJTUFUSU9OX1JBVEVfTUFTS1x0XHRHRU5NQVNLKDgsIDUpXG4rXG4rLyogY2hfYWRkciA9IDB4MSwgbm9kZV9hZGRyID0gMHhmLCBkYXRhX2FkZHIgPSAweDE3ICovXG4rLyogU2x2RFNQcmVhZHlUaW1lICovXG4rI2RlZmluZSBTTEFWRV9EU1BfUkVBRFlfVElNRV9NQVNLXHRcdEdFTk1BU0soMjIsIDE1KVxuKy8qIE1hc0RTUHJlYWR5VGltZSAqL1xuKyNkZWZpbmUgTUFTVEVSX0RTUF9SRUFEWV9USU1FX01BU0tcdFx0R0VOTUFTSygxNCwgNylcbitcbisvKiBjaF9hZGRyID0gMHgxLCBub2RlX2FkZHIgPSAweGYsIGRhdGFfYWRkciA9IDB4MTggKi9cbisvKiBFbmFiUmFuZFVwZFRyaWcgKi9cbisjZGVmaW5lIEVOQUJMRV9SQU5ET01fVVBET1dOX0NPVU5URVJfVFJJR0dFUlx0QklUKDgpXG4rXG4rLyogY2hfYWRkciA9IDB4MSwgbm9kZV9hZGRyID0gMHhmLCBkYXRhX2FkZHIgPSAweDIwICovXG4rLyogUmVzZXRTeW5jT2Zmc2V0ICovXG4rI2RlZmluZSBSRVNFVF9TWU5DX09GRlNFVF9NQVNLXHRcdFx0R0VOTUFTSygxMSwgOClcbitcbisvKiBjaF9hZGRyID0gMHgyLCBub2RlX2FkZHIgPSAweGQsIGRhdGFfYWRkciA9IDB4MCAqL1xuKy8qIEZmZVVwZEdhaW5Gb3JjZVZhbCAqL1xuKyNkZWZpbmUgRkZFX1VQREFURV9HQUlOX0ZPUkNFX1ZBTF9NQVNLXHRcdEdFTk1BU0soOSwgNylcbisvKiBGZmVVcGRHYWluRm9yY2UgKi9cbisjZGVmaW5lIEZGRV9VUERBVEVfR0FJTl9GT1JDRVx0XHRcdEJJVCg2KVxuK1xuKy8qIGNoX2FkZHIgPSAweDIsIG5vZGVfYWRkciA9IDB4ZCwgZGF0YV9hZGRyID0gMHgzICovXG4rLyogVHJGcmVlemUgKi9cbisjZGVmaW5lIFRSX0ZSRUVaRV9NQVNLXHRcdFx0XHRHRU5NQVNLKDExLCAwKVxuK1xuKy8qIGNoX2FkZHIgPSAweDIsIG5vZGVfYWRkciA9IDB4ZCwgZGF0YV9hZGRyID0gMHg2ICovXG4rLyogU1M6IFN0ZWFkeS1zdGF0ZSwgS1A6IFByb3BvcnRpb25hbCBHYWluICovXG4rLyogU1NUcktwMTAwICovXG4rI2RlZmluZSBTU19UUl9LUDEwMF9NQVNLXHRcdFx0R0VOTUFTSygyMSwgMTkpXG4rLyogU1NUcktmMTAwICovXG4rI2RlZmluZSBTU19UUl9LRjEwMF9NQVNLXHRcdFx0R0VOTUFTSygxOCwgMTYpXG4rLyogU1NUcktwMTAwME1hcyAqL1xuKyNkZWZpbmUgU1NfVFJfS1AxMDAwX01BU1RFUl9NQVNLXHRcdEdFTk1BU0soMTUsIDEzKVxuKy8qIFNTVHJLZjEwMDBNYXMgKi9cbisjZGVmaW5lIFNTX1RSX0tGMTAwMF9NQVNURVJfTUFTS1x0XHRHRU5NQVNLKDEyLCAxMClcbisvKiBTU1RyS3AxMDAwU2x2ICovXG4rI2RlZmluZSBTU19UUl9LUDEwMDBfU0xBVkVfTUFTS1x0XHRcdEdFTk1BU0soOSwgNylcbisvKiBTU1RyS2YxMDAwU2x2ICovXG4rI2RlZmluZSBTU19UUl9LRjEwMDBfU0xBVkVfTUFTS1x0XHRcdEdFTk1BU0soNiwgNClcbitcbisvKiBjaF9hZGRyID0gMHgyLCBub2RlX2FkZHIgPSAweGQsIGRhdGFfYWRkciA9IDB4OCAqL1xuKy8qIGNsZWFyIHRoaXMgYml0IGlmIHdhbm5hIHNlbGVjdCBmcm9tIEFGRSAqL1xuKy8qIFJlZ3NpZ2RldF9zZWxfMTAwMCAqL1xuKyNkZWZpbmUgRUVFMTAwMF9TRUxFQ1RfU0lHTkFMX0RFVEVDVElPTl9GUk9NX0RGRVx0QklUKDQpXG4rXG4rLyogY2hfYWRkciA9IDB4Miwgbm9kZV9hZGRyID0gMHhkLCBkYXRhX2FkZHIgPSAweGQgKi9cbisvKiBSZWdFRUVfc3QyVHJLZjEwMDAgKi9cbisjZGVmaW5lIEVFRTEwMDBfU1RBR0UyX1RSX0tGX01BU0tcdFx0R0VOTUFTSygxMywgMTEpXG4rXG4rLyogY2hfYWRkciA9IDB4Miwgbm9kZV9hZGRyID0gMHhkLCBkYXRhX2FkZHIgPSAweGYgKi9cbisvKiBSZWdFRUVfc2x2X3dha2V0cl90aW1lcl90YXIgKi9cbisjZGVmaW5lIFNMQVZFX1dBS0VUUl9USU1FUl9NQVNLXHRcdFx0R0VOTUFTSygyMCwgMTEpXG4rLyogUmVnRUVFX3Nsdl9yZW10eF90aW1lcl90YXIgKi9cbisjZGVmaW5lIFNMQVZFX1JFTVRYX1RJTUVSX01BU0tcdFx0XHRHRU5NQVNLKDEwLCAxKVxuK1xuKy8qIGNoX2FkZHIgPSAweDIsIG5vZGVfYWRkciA9IDB4ZCwgZGF0YV9hZGRyID0gMHgxMCAqL1xuKy8qIFJlZ0VFRV9zbHZfd2FrZV9pbnRfdGltZXJfdGFyICovXG4rI2RlZmluZSBTTEFWRV9XQUtFSU5UX1RJTUVSX01BU0tcdFx0R0VOTUFTSygxMCwgMSlcbitcbisvKiBjaF9hZGRyID0gMHgyLCBub2RlX2FkZHIgPSAweGQsIGRhdGFfYWRkciA9IDB4MTQgKi9cbisvKiBSZWdFRUVfdHJmcmVlemVfdGltZXIyICovXG4rI2RlZmluZSBUUl9GUkVFWkVfVElNRVIyX01BU0tcdFx0XHRHRU5NQVNLKDksIDApXG4rXG4rLyogY2hfYWRkciA9IDB4Miwgbm9kZV9hZGRyID0gMHhkLCBkYXRhX2FkZHIgPSAweDFjICovXG4rLyogUmVnRUVFMTAwU3RnMV90YXIgKi9cbisjZGVmaW5lIEVFRTEwMF9MUFNZTkNfU1RBR0UxX1VQREFURV9USU1FUl9NQVNLXHRHRU5NQVNLKDgsIDApXG4rXG4rLyogY2hfYWRkciA9IDB4Miwgbm9kZV9hZGRyID0gMHhkLCBkYXRhX2FkZHIgPSAweDI1ICovXG4rLyogUkVHRUVFX3dha2Vfc2x2X3RyX3dhaXRfZGZlc2lnZGV0X2VuICovXG4rI2RlZmluZSBXQUtFX1NMQVZFX1RSX1dBSVRfREZFX0RFVEVDVElPTl9FTlx0QklUKDExKVxuK1xuKyNkZWZpbmUgQU5BTE9HX0lOVEVSTkFMX09QRVJBVElPTl9NQVhfVVNcdDIwXG4rI2RlZmluZSBUWFJFU0VSVkVfTUlOXHRcdFx0XHQwXG4rI2RlZmluZSBUWFJFU0VSVkVfTUFYXHRcdFx0XHQ3XG4rXG4rI2RlZmluZSBNVEtfUEhZX0FOQVJHX1JHXHRcdFx0MHgxMFxuKyNkZWZpbmUgICBNVEtfUEhZX1RDTEtPRkZTRVRfTUFTS1x0XHRHRU5NQVNLKDEyLCA4KVxuK1xuKy8qIFJlZ2lzdGVycyBvbiBNRElPX01NRF9WRU5EMSAqL1xuKyNkZWZpbmUgTVRLX1BIWV9UWFZMRF9EQV9SR1x0XHRcdDB4MTJcbisjZGVmaW5lICAgTVRLX1BIWV9EQV9UWF9JMk1QQl9BX0dCRV9NQVNLXHRHRU5NQVNLKDE1LCAxMClcbisjZGVmaW5lICAgTVRLX1BIWV9EQV9UWF9JMk1QQl9BX1RCVF9NQVNLXHRHRU5NQVNLKDUsIDApXG4rXG4rI2RlZmluZSBNVEtfUEhZX1RYX0kyTVBCX1RFU1RfTU9ERV9BMlx0XHQweDE2XG4rI2RlZmluZSAgIE1US19QSFlfREFfVFhfSTJNUEJfQV9IQlRfTUFTS1x0R0VOTUFTSygxNSwgMTApXG4rI2RlZmluZSAgIE1US19QSFlfREFfVFhfSTJNUEJfQV9UU1RfTUFTS1x0R0VOTUFTSyg1LCAwKVxuK1xuKyNkZWZpbmUgTVRLX1BIWV9UWF9JMk1QQl9URVNUX01PREVfQjFcdFx0MHgxN1xuKyNkZWZpbmUgICBNVEtfUEhZX0RBX1RYX0kyTVBCX0JfR0JFX01BU0tcdEdFTk1BU0soMTMsIDgpXG4rI2RlZmluZSAgIE1US19QSFlfREFfVFhfSTJNUEJfQl9UQlRfTUFTS1x0R0VOTUFTSyg1LCAwKVxuK1xuKyNkZWZpbmUgTVRLX1BIWV9UWF9JMk1QQl9URVNUX01PREVfQjJcdFx0MHgxOFxuKyNkZWZpbmUgICBNVEtfUEhZX0RBX1RYX0kyTVBCX0JfSEJUX01BU0tcdEdFTk1BU0soMTMsIDgpXG4rI2RlZmluZSAgIE1US19QSFlfREFfVFhfSTJNUEJfQl9UU1RfTUFTS1x0R0VOTUFTSyg1LCAwKVxuK1xuKyNkZWZpbmUgTVRLX1BIWV9UWF9JMk1QQl9URVNUX01PREVfQzFcdFx0MHgxOVxuKyNkZWZpbmUgICBNVEtfUEhZX0RBX1RYX0kyTVBCX0NfR0JFX01BU0tcdEdFTk1BU0soMTMsIDgpXG4rI2RlZmluZSAgIE1US19QSFlfREFfVFhfSTJNUEJfQ19UQlRfTUFTS1x0R0VOTUFTSyg1LCAwKVxuK1xuKyNkZWZpbmUgTVRLX1BIWV9UWF9JMk1QQl9URVNUX01PREVfQzJcdFx0MHgyMFxuKyNkZWZpbmUgICBNVEtfUEhZX0RBX1RYX0kyTVBCX0NfSEJUX01BU0tcdEdFTk1BU0soMTMsIDgpXG4rI2RlZmluZSAgIE1US19QSFlfREFfVFhfSTJNUEJfQ19UU1RfTUFTS1x0R0VOTUFTSyg1LCAwKVxuK1xuKyNkZWZpbmUgTVRLX1BIWV9UWF9JMk1QQl9URVNUX01PREVfRDFcdFx0MHgyMVxuKyNkZWZpbmUgICBNVEtfUEhZX0RBX1RYX0kyTVBCX0RfR0JFX01BU0tcdEdFTk1BU0soMTMsIDgpXG4rI2RlZmluZSAgIE1US19QSFlfREFfVFhfSTJNUEJfRF9UQlRfTUFTS1x0R0VOTUFTSyg1LCAwKVxuK1xuKyNkZWZpbmUgTVRLX1BIWV9UWF9JMk1QQl9URVNUX01PREVfRDJcdFx0MHgyMlxuKyNkZWZpbmUgICBNVEtfUEhZX0RBX1RYX0kyTVBCX0RfSEJUX01BU0tcdEdFTk1BU0soMTMsIDgpXG4rI2RlZmluZSAgIE1US19QSFlfREFfVFhfSTJNUEJfRF9UU1RfTUFTS1x0R0VOTUFTSyg1LCAwKVxuK1xuKyNkZWZpbmUgTVRLX1BIWV9SWEFEQ19DVFJMX1JHN1x0XHRcdDB4YzZcbisjZGVmaW5lICAgTVRLX1BIWV9EQV9BRF9CVUZfQklBU19MUF9NQVNLXHRHRU5NQVNLKDksIDgpXG4rXG4rI2RlZmluZSBNVEtfUEhZX1JYQURDX0NUUkxfUkc5XHRcdFx0MHhjOFxuKyNkZWZpbmUgICBNVEtfUEhZX0RBX1JYX1BTQk5fVEJUX01BU0tcdFx0R0VOTUFTSygxNCwgMTIpXG4rI2RlZmluZSAgIE1US19QSFlfREFfUlhfUFNCTl9IQlRfTUFTS1x0XHRHRU5NQVNLKDEwLCA4KVxuKyNkZWZpbmUgICBNVEtfUEhZX0RBX1JYX1BTQk5fR0JFX01BU0tcdFx0R0VOTUFTSyg2LCA0KVxuKyNkZWZpbmUgICBNVEtfUEhZX0RBX1JYX1BTQk5fTFBfTUFTS1x0XHRHRU5NQVNLKDIsIDApXG4rXG4rI2RlZmluZSBNVEtfUEhZX0xET19PVVRQVVRfVlx0XHRcdDB4ZDdcbitcbisjZGVmaW5lIE1US19QSFlfUkdfQU5BX0NBTF9SRzBcdFx0XHQweGRiXG4rI2RlZmluZSAgIE1US19QSFlfUkdfQ0FMX0NLSU5WXHRcdFx0QklUKDEyKVxuKyNkZWZpbmUgICBNVEtfUEhZX1JHX0FOQV9DQUxFTlx0XHRcdEJJVCg4KVxuKyNkZWZpbmUgICBNVEtfUEhZX1JHX1JFWFRfQ0FMRU5cdFx0XHRCSVQoNClcbisjZGVmaW5lICAgTVRLX1BIWV9SR19aQ0FMRU5fQVx0XHRcdEJJVCgwKVxuK1xuKyNkZWZpbmUgTVRLX1BIWV9SR19BTkFfQ0FMX1JHMVx0XHRcdDB4ZGNcbisjZGVmaW5lICAgTVRLX1BIWV9SR19aQ0FMRU5fQlx0XHRcdEJJVCgxMilcbisjZGVmaW5lICAgTVRLX1BIWV9SR19aQ0FMRU5fQ1x0XHRcdEJJVCg4KVxuKyNkZWZpbmUgICBNVEtfUEhZX1JHX1pDQUxFTl9EXHRcdFx0QklUKDQpXG4rI2RlZmluZSAgIE1US19QSFlfUkdfVFhWT1NfQ0FMRU5cdFx0QklUKDApXG4rXG4rI2RlZmluZSBNVEtfUEhZX1JHX0FOQV9DQUxfUkc1XHRcdFx0MHhlMFxuKyNkZWZpbmUgICBNVEtfUEhZX1JHX1JFWFRfVFJJTV9NQVNLXHRcdEdFTk1BU0soMTMsIDgpXG4rI2RlZmluZSAgIE1US19QSFlfUkdfUkVYVF9aQ0FMX0NUUkxfTUFTS1x0R0VOTUFTSyg1LCAwKVxuK1xuKyNkZWZpbmUgTVRLX1BIWV9SR19BTkFfQ0FMX1JHNlx0XHRcdDB4ZTFcbitcbisjZGVmaW5lIE1US19QSFlfUkdfVFhfRklMVEVSXHRcdFx0MHhmZVxuK1xuKyNkZWZpbmUgTVRLX1BIWV9SR19MUElfUENTX0RTUF9DVFJMX1JFRzEyMFx0MHgxMjBcbisjZGVmaW5lICAgTVRLX1BIWV9MUElfU0lHX0VOX0xPX1RIUkVTSDEwMDBfTUFTS1x0R0VOTUFTSygxMiwgOClcbisjZGVmaW5lICAgTVRLX1BIWV9MUElfU0lHX0VOX0hJX1RIUkVTSDEwMDBfTUFTS1x0R0VOTUFTSyg0LCAwKVxuK1xuKyNkZWZpbmUgTVRLX1BIWV9SR19MUElfUENTX0RTUF9DVFJMX1JFRzEyMlx0MHgxMjJcbisjZGVmaW5lICAgTVRLX1BIWV9MUElfTk9STV9NU0VfSElfVEhSRVNIMTAwMF9NQVNLXHRHRU5NQVNLKDcsIDApXG4rXG4rI2RlZmluZSBNVEtfUEhZX1JHX1RFU1RNVVhfQURDX0NUUkxcdFx0MHgxNDRcbisjZGVmaW5lICAgTVRLX1BIWV9SR19UWEVOX0RJR19NQVNLXHRcdEdFTk1BU0soNSwgNSlcbitcbisjZGVmaW5lIE1US19QSFlfUkdfQ1JfVFhfQU1QX09GRlNFVF9BX0JcdFx0MHgxNzJcbisjZGVmaW5lICAgTVRLX1BIWV9DUl9UWF9BTVBfT0ZGU0VUX0FfTUFTS1x0R0VOTUFTSygxMywgOClcbisjZGVmaW5lICAgTVRLX1BIWV9DUl9UWF9BTVBfT0ZGU0VUX0JfTUFTS1x0R0VOTUFTSyg2LCAwKVxuK1xuKyNkZWZpbmUgTVRLX1BIWV9SR19DUl9UWF9BTVBfT0ZGU0VUX0NfRFx0XHQweDE3M1xuKyNkZWZpbmUgICBNVEtfUEhZX0NSX1RYX0FNUF9PRkZTRVRfQ19NQVNLXHRHRU5NQVNLKDEzLCA4KVxuKyNkZWZpbmUgICBNVEtfUEhZX0NSX1RYX0FNUF9PRkZTRVRfRF9NQVNLXHRHRU5NQVNLKDYsIDApXG4rXG4rI2RlZmluZSBNVEtfUEhZX1JHX0NSX1RYX1I1MF9PRkZTRVRfQV9CXHRcdDB4MTc0XG4rI2RlZmluZSAgIE1US19QSFlfQ1JfVFhfUjUwX09GRlNFVF9BX01BU0tcdEdFTk1BU0soMTMsIDgpXG4rI2RlZmluZSAgIE1US19QSFlfQ1JfVFhfUjUwX09GRlNFVF9CX01BU0tcdEdFTk1BU0soNiwgMClcbitcbisjZGVmaW5lIE1US19QSFlfUkdfQ1JfVFhfUjUwX09GRlNFVF9DX0RcdFx0MHgxNzVcbisjZGVmaW5lICAgTVRLX1BIWV9DUl9UWF9SNTBfT0ZGU0VUX0NfTUFTS1x0R0VOTUFTSygxMywgOClcbisjZGVmaW5lICAgTVRLX1BIWV9DUl9UWF9SNTBfT0ZGU0VUX0RfTUFTS1x0R0VOTUFTSyg2LCAwKVxuK1xuKyNkZWZpbmUgTVRLX1BIWV9SR19BRF9DQUxfQ09NUFx0XHRcdDB4MTdhXG4rI2RlZmluZSAgIE1US19QSFlfQURfQ0FMX0NPTVBfT1VUX01BU0tcdFx0R0VOTUFTSyg4LCA4KVxuK1xuKyNkZWZpbmUgTVRLX1BIWV9SR19BRF9DQUxfQ0xLXHRcdFx0MHgxN2JcbisjZGVmaW5lICAgTVRLX1BIWV9EQV9DQUxfQ0xLXHRcdFx0QklUKDApXG4rXG4rI2RlZmluZSBNVEtfUEhZX1JHX0FEX0NBTElOXHRcdFx0MHgxN2NcbisjZGVmaW5lICAgTVRLX1BIWV9EQV9DQUxJTl9GTEFHXHRcdFx0QklUKDApXG4rXG4rI2RlZmluZSBNVEtfUEhZX1JHX0RBU05fREFDX0lOMF9BXHRcdDB4MTdkXG4rI2RlZmluZSAgIE1US19QSFlfREFTTl9EQUNfSU4wX0FfTUFTS1x0XHRHRU5NQVNLKDksIDApXG4rXG4rI2RlZmluZSBNVEtfUEhZX1JHX0RBU05fREFDX0lOMF9CXHRcdDB4MTdlXG4rI2RlZmluZSAgIE1US19QSFlfREFTTl9EQUNfSU4wX0JfTUFTS1x0XHRHRU5NQVNLKDksIDApXG4rXG4rI2RlZmluZSBNVEtfUEhZX1JHX0RBU05fREFDX0lOMF9DXHRcdDB4MTdmXG4rI2RlZmluZSAgIE1US19QSFlfREFTTl9EQUNfSU4wX0NfTUFTS1x0XHRHRU5NQVNLKDksIDApXG4rXG4rI2RlZmluZSBNVEtfUEhZX1JHX0RBU05fREFDX0lOMF9EXHRcdDB4MTgwXG4rI2RlZmluZSAgIE1US19QSFlfREFTTl9EQUNfSU4wX0RfTUFTS1x0XHRHRU5NQVNLKDksIDApXG4rXG4rI2RlZmluZSBNVEtfUEhZX1JHX0RBU05fREFDX0lOMV9BXHRcdDB4MTgxXG4rI2RlZmluZSAgIE1US19QSFlfREFTTl9EQUNfSU4xX0FfTUFTS1x0XHRHRU5NQVNLKDksIDApXG4rXG4rI2RlZmluZSBNVEtfUEhZX1JHX0RBU05fREFDX0lOMV9CXHRcdDB4MTgyXG4rI2RlZmluZSAgIE1US19QSFlfREFTTl9EQUNfSU4xX0JfTUFTS1x0XHRHRU5NQVNLKDksIDApXG4rXG4rI2RlZmluZSBNVEtfUEhZX1JHX0RBU05fREFDX0lOMV9DXHRcdDB4MTgzXG4rI2RlZmluZSAgIE1US19QSFlfREFTTl9EQUNfSU4xX0NfTUFTS1x0XHRHRU5NQVNLKDksIDApXG4rXG4rI2RlZmluZSBNVEtfUEhZX1JHX0RBU05fREFDX0lOMV9EXHRcdDB4MTg0XG4rI2RlZmluZSAgIE1US19QSFlfREFTTl9EQUNfSU4xX0RfTUFTS1x0XHRHRU5NQVNLKDksIDApXG4rXG4rI2RlZmluZSBNVEtfUEhZX1JHX0RFVjFFX1JFRzE5Ylx0XHRcdDB4MTliXG4rI2RlZmluZSAgIE1US19QSFlfQllQQVNTX0RTUF9MUElfUkVBRFlcdFx0QklUKDgpXG4rXG4rI2RlZmluZSBNVEtfUEhZX1JHX0xQX0lJUjJfSzFfTFx0XHRcdDB4MjJhXG4rI2RlZmluZSBNVEtfUEhZX1JHX0xQX0lJUjJfSzFfVVx0XHRcdDB4MjJiXG4rI2RlZmluZSBNVEtfUEhZX1JHX0xQX0lJUjJfSzJfTFx0XHRcdDB4MjJjXG4rI2RlZmluZSBNVEtfUEhZX1JHX0xQX0lJUjJfSzJfVVx0XHRcdDB4MjJkXG4rI2RlZmluZSBNVEtfUEhZX1JHX0xQX0lJUjJfSzNfTFx0XHRcdDB4MjJlXG4rI2RlZmluZSBNVEtfUEhZX1JHX0xQX0lJUjJfSzNfVVx0XHRcdDB4MjJmXG4rI2RlZmluZSBNVEtfUEhZX1JHX0xQX0lJUjJfSzRfTFx0XHRcdDB4MjMwXG4rI2RlZmluZSBNVEtfUEhZX1JHX0xQX0lJUjJfSzRfVVx0XHRcdDB4MjMxXG4rI2RlZmluZSBNVEtfUEhZX1JHX0xQX0lJUjJfSzVfTFx0XHRcdDB4MjMyXG4rI2RlZmluZSBNVEtfUEhZX1JHX0xQX0lJUjJfSzVfVVx0XHRcdDB4MjMzXG4rXG4rI2RlZmluZSBNVEtfUEhZX1JHX0RFVjFFX1JFRzIzNFx0XHRcdDB4MjM0XG4rI2RlZmluZSAgIE1US19QSFlfVFJfT1BFTl9MT09QX0VOX01BU0tcdFx0R0VOTUFTSygwLCAwKVxuKyNkZWZpbmUgICBNVEtfUEhZX0xQRl9YX0FWRVJBR0VfTUFTS1x0XHRHRU5NQVNLKDcsIDQpXG4rI2RlZmluZSAgIE1US19QSFlfVFJfTFBfSUlSX0VFRV9FTlx0XHRCSVQoMTIpXG4rXG4rI2RlZmluZSBNVEtfUEhZX1JHX0xQRl9DTlRfVkFMXHRcdFx0MHgyMzVcbitcbisjZGVmaW5lIE1US19QSFlfUkdfREVWMUVfUkVHMjM4XHRcdFx0MHgyMzhcbisjZGVmaW5lICAgTVRLX1BIWV9MUElfU0xWX1NFTkRfVFhfVElNRVJfTUFTS1x0R0VOTUFTSyg4LCAwKVxuKyNkZWZpbmUgICBNVEtfUEhZX0xQSV9TTFZfU0VORF9UWF9FTlx0XHRCSVQoMTIpXG4rXG4rI2RlZmluZSBNVEtfUEhZX1JHX0RFVjFFX1JFRzIzOVx0XHRcdDB4MjM5XG4rI2RlZmluZSAgIE1US19QSFlfTFBJX1NFTkRfTE9DX1RJTUVSX01BU0tcdEdFTk1BU0soOCwgMClcbisjZGVmaW5lICAgTVRLX1BIWV9MUElfVFhQQ1NfTE9DX1JDVlx0XHRCSVQoMTIpXG4rXG4rI2RlZmluZSBNVEtfUEhZX1JHX0RFVjFFX1JFRzI3Q1x0XHRcdDB4MjdjXG4rI2RlZmluZSAgIE1US19QSFlfVkdBU1RBVEVfRkZFX1RIUl9TVDFfTUFTS1x0R0VOTUFTSygxMiwgOClcbisjZGVmaW5lIE1US19QSFlfUkdfREVWMUVfUkVHMjdEXHRcdFx0MHgyN2RcbisjZGVmaW5lICAgTVRLX1BIWV9WR0FTVEFURV9GRkVfVEhSX1NUMl9NQVNLXHRHRU5NQVNLKDQsIDApXG4rXG4rI2RlZmluZSBNVEtfUEhZX1JHX0RFVjFFX1JFRzJDN1x0XHRcdDB4MmM3XG4rI2RlZmluZSAgIE1US19QSFlfTUFYX0dBSU5fTUFTS1x0XHRcdEdFTk1BU0soNCwgMClcbisjZGVmaW5lICAgTVRLX1BIWV9NSU5fR0FJTl9NQVNLXHRcdFx0R0VOTUFTSygxMiwgOClcbitcbisjZGVmaW5lIE1US19QSFlfUkdfREVWMUVfUkVHMkQxXHRcdFx0MHgyZDFcbisjZGVmaW5lICAgTVRLX1BIWV9WQ09fU0xJQ0VSX1RIUkVTSF9CSVRTX0hJR0hfRUVFX01BU0tcdEdFTk1BU0soNywgMClcbisjZGVmaW5lICAgTVRLX1BIWV9MUElfU0tJUF9TRF9TTFZfVFJcdFx0QklUKDgpXG4rI2RlZmluZSAgIE1US19QSFlfTFBJX1RSX1JFQURZXHRcdFx0QklUKDkpXG4rI2RlZmluZSAgIE1US19QSFlfTFBJX1ZDT19FRUVfU1RHMF9FTlx0XHRCSVQoMTApXG4rXG4rI2RlZmluZSBNVEtfUEhZX1JHX0RFVjFFX1JFRzMyM1x0XHRcdDB4MzIzXG4rI2RlZmluZSAgIE1US19QSFlfRUVFX1dBS0VfTUFTX0lOVF9EQ1x0XHRCSVQoMClcbisjZGVmaW5lICAgTVRLX1BIWV9FRUVfV0FLRV9TTFZfSU5UX0RDXHRcdEJJVCg0KVxuK1xuKyNkZWZpbmUgTVRLX1BIWV9SR19ERVYxRV9SRUczMjRcdFx0XHQweDMyNFxuKyNkZWZpbmUgICBNVEtfUEhZX1NNSV9ERVRDTlRfTUFYX01BU0tcdFx0R0VOTUFTSyg1LCAwKVxuKyNkZWZpbmUgICBNVEtfUEhZX1NNSV9ERVRfTUFYX0VOXHRcdEJJVCg4KVxuK1xuKyNkZWZpbmUgTVRLX1BIWV9SR19ERVYxRV9SRUczMjZcdFx0XHQweDMyNlxuKyNkZWZpbmUgICBNVEtfUEhZX0xQSV9NT0RFX1NEX09OXHRcdEJJVCgwKVxuKyNkZWZpbmUgICBNVEtfUEhZX1JFU0VUX1JBTkRVUERfQ05UXHRcdEJJVCgxKVxuKyNkZWZpbmUgICBNVEtfUEhZX1RSRUNfVVBEQVRFX0VOQUJfQ0xSXHRcdEJJVCgyKVxuKyNkZWZpbmUgICBNVEtfUEhZX0xQSV9RVUlUX1dBSVRfREZFX1NJR19ERVRfT0ZGXHRCSVQoNClcbisjZGVmaW5lICAgTVRLX1BIWV9UUl9SRUFEWV9TS0lQX0FGRV9XQUtFVVBcdEJJVCg1KVxuK1xuKyNkZWZpbmUgTVRLX1BIWV9MRE9fUFVNUF9FTl9QQUlSQUJcdFx0MHg1MDJcbisjZGVmaW5lIE1US19QSFlfTERPX1BVTVBfRU5fUEFJUkNEXHRcdDB4NTAzXG4rXG4rI2RlZmluZSBNVEtfUEhZX0RBX1RYX1I1MF9QQUlSX0FcdFx0MHg1M2RcbisjZGVmaW5lIE1US19QSFlfREFfVFhfUjUwX1BBSVJfQlx0XHQweDUzZVxuKyNkZWZpbmUgTVRLX1BIWV9EQV9UWF9SNTBfUEFJUl9DXHRcdDB4NTNmXG4rI2RlZmluZSBNVEtfUEhZX0RBX1RYX1I1MF9QQUlSX0RcdFx0MHg1NDBcbitcbisvKiBSZWdpc3RlcnMgb24gTURJT19NTURfVkVORDIgKi9cbisjZGVmaW5lIE1US19QSFlfTEVEMV9ERUZBVUxUX1BPTEFSSVRJRVNcdFx0QklUKDEpXG4rXG4rI2RlZmluZSBNVEtfUEhZX1JHX0JHX1JBU0VMXHRcdFx0MHgxMTVcbisjZGVmaW5lICAgTVRLX1BIWV9SR19CR19SQVNFTF9NQVNLXHRcdEdFTk1BU0soMiwgMClcbitcbisvKiAnYm9vdHRyYXAnIHJlZ2lzdGVyIHJlZmxlY3RpbmcgdGhlIGNvbmZpZ3VyYXRpb24gb2YgdGhlIDQgUEhZIExFRHMgKi9cbisjZGVmaW5lIFJHX0dQSU9fTUlTQ19UUEJBTkswXHRcdFx0MHg2ZjBcbisjZGVmaW5lICAgUkdfR1BJT19NSVNDX1RQQkFOSzBfQk9PVE1PREVcdFx0R0VOTUFTSygxMSwgOClcbitcbitlbnVtIENBTF9JVEVNIHtcbitcdFJFWFQsXG4rXHRUWF9PRkZTRVQsXG4rXHRUWF9BTVAsXG4rXHRUWF9SNTAsXG4rXHRUWF9WQ00sXG4rXHRSWF9PRkZTRVQsXG4rfTtcbitcbitlbnVtIHtcbitcdE5PX1BBSVIsXG4rXHRQQUlSX0EsXG4rXHRQQUlSX0IsXG4rXHRQQUlSX0MsXG4rXHRQQUlSX0QsXG4rfTtcbitcbitlbnVtIGNhbGlicmF0aW9uX21vZGUge1xuK1x0RUZVU0VfSyxcbitcdFNXX0tcbit9O1xuK1xuK2VudW0gQ0FMX01PREUge1xuK1x0RUZVU0VfTSxcbitcdFNXX01cbit9O1xuK1xuKy8qIE1USyBHRSBTb0MgY29tbW9uIGZ1bmN0aW9ucyAqL1xuK2ludCBtdGtfY2FsX2N5Y2xlX3dhaXQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldik7XG4rXG4rI2VuZGlmIC8qIF9NVEtfR0VfU09DX0hfICovXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGh5L21lZGlhdGVrL210ay1waHktbGliLmMgYi9kcml2ZXJzL25ldC9waHkvbWVkaWF0ZWsvbXRrLXBoeS1saWIuY1xuaW5kZXggZGZkMGY0ZTQzOWEyMTQuLjhjMmIyNmY5Yjg0MDNiIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvcGh5L21lZGlhdGVrL210ay1waHktbGliLmNcbisrKyBiL2RyaXZlcnMvbmV0L3BoeS9tZWRpYXRlay9tdGstcGh5LWxpYi5jXG5AQCAtMzYsOCArMzYsOCBAQCBzdGF0aWMgdm9pZCBfX210a190cl9yZWFkKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIHU4IGNoX2FkZHIsIHU4IG5vZGVfYWRkcixcbiBcdFx0KnRyX2hpZ2gsICp0cl9sb3cpO1xuIH1cbiBcbi1zdGF0aWMgdm9pZCBfX210a190cl93cml0ZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCB1OCBjaF9hZGRyLCB1OCBub2RlX2FkZHIsXG4tXHRcdFx0ICAgdTggZGF0YV9hZGRyLCB1MzIgdHJfZGF0YSlcbit2b2lkIF9fbXRrX3RyX3dyaXRlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIHU4IGNoX2FkZHIsIHU4IG5vZGVfYWRkcixcbitcdFx0ICAgIHU4IGRhdGFfYWRkciwgdTMyIHRyX2RhdGEpXG4ge1xuIFx0X19waHlfd3JpdGUocGh5ZGV2LCAweDExLCB0cl9kYXRhIFx1MDAyNiAweGZmZmYpO1xuIFx0X19waHlfd3JpdGUocGh5ZGV2LCAweDEyLCB0cl9kYXRhIFx1MDAzZVx1MDAzZSAxNik7XG5AQCAtNDUsNiArNDUsNyBAQCBzdGF0aWMgdm9pZCBfX210a190cl93cml0ZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCB1OCBjaF9hZGRyLCB1OCBub2RlX2FkZHIsXG4gXHRcdHRyX2RhdGEgXHUwMDNlXHUwMDNlIDE2LCB0cl9kYXRhIFx1MDAyNiAweGZmZmYpO1xuIFx0X19tdGtfdHJfYWNjZXNzKHBoeWRldiwgZmFsc2UsIGNoX2FkZHIsIG5vZGVfYWRkciwgZGF0YV9hZGRyKTtcbiB9XG4rRVhQT1JUX1NZTUJPTF9HUEwoX19tdGtfdHJfd3JpdGUpO1xuIFxuIHZvaWQgX19tdGtfdHJfbW9kaWZ5KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIHU4IGNoX2FkZHIsIHU4IG5vZGVfYWRkcixcbiBcdFx0ICAgICB1OCBkYXRhX2FkZHIsIHUzMiBtYXNrLCB1MzIgc2V0KVxuQEAgLTM0MSw2ICszNDIsNzggQEAgdm9pZCBtdGtfcGh5X2xlZHNfc3RhdGVfaW5pdChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuIH1cbiBFWFBPUlRfU1lNQk9MX0dQTChtdGtfcGh5X2xlZHNfc3RhdGVfaW5pdCk7XG4gXG4raW50IG10Nzk4eF9waHlfbGVkX2JsaW5rX3NldChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCB1OCBpbmRleCxcbitcdFx0XHQgICAgIHVuc2lnbmVkIGxvbmcgKmRlbGF5X29uLFxuK1x0XHRcdCAgICAgdW5zaWduZWQgbG9uZyAqZGVsYXlfb2ZmKVxuK3tcbitcdGJvb2wgYmxpbmtpbmcgPSBmYWxzZTtcbitcdGludCBlcnI7XG4rXG4rXHRlcnIgPSBtdGtfcGh5X2xlZF9udW1fZGx5X2NmZyhpbmRleCwgZGVsYXlfb24sIGRlbGF5X29mZiwgXHUwMDI2YmxpbmtpbmcpO1xuK1x0aWYgKGVyciBcdTAwM2MgMClcbitcdFx0cmV0dXJuIGVycjtcbitcbitcdGVyciA9IG10a19waHlfaHdfbGVkX2JsaW5rX3NldChwaHlkZXYsIGluZGV4LCBibGlua2luZyk7XG4rXHRpZiAoZXJyKVxuK1x0XHRyZXR1cm4gZXJyO1xuK1xuK1x0cmV0dXJuIG10a19waHlfaHdfbGVkX29uX3NldChwaHlkZXYsIGluZGV4LCBNVEtfR1BIWV9MRURfT05fTUFTSyxcbitcdFx0XHRcdCAgICAgZmFsc2UpO1xuK31cbitFWFBPUlRfU1lNQk9MX0dQTChtdDc5OHhfcGh5X2xlZF9ibGlua19zZXQpO1xuK1xuK2ludCBtdDc5OHhfcGh5X2xlZF9icmlnaHRuZXNzX3NldChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LFxuK1x0XHRcdFx0ICB1OCBpbmRleCwgZW51bSBsZWRfYnJpZ2h0bmVzcyB2YWx1ZSlcbit7XG4rXHRpbnQgZXJyO1xuK1xuK1x0ZXJyID0gbXRrX3BoeV9od19sZWRfYmxpbmtfc2V0KHBoeWRldiwgaW5kZXgsIGZhbHNlKTtcbitcdGlmIChlcnIpXG4rXHRcdHJldHVybiBlcnI7XG4rXG4rXHRyZXR1cm4gbXRrX3BoeV9od19sZWRfb25fc2V0KHBoeWRldiwgaW5kZXgsIE1US19HUEhZX0xFRF9PTl9NQVNLLFxuK1x0XHRcdFx0ICAgICAodmFsdWUgIT0gTEVEX09GRikpO1xuK31cbitFWFBPUlRfU1lNQk9MX0dQTChtdDc5OHhfcGh5X2xlZF9icmlnaHRuZXNzX3NldCk7XG4rXG4rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGxvbmcgc3VwcG9ydGVkX3RyaWdnZXJzID1cbitcdEJJVChUUklHR0VSX05FVERFVl9GVUxMX0RVUExFWCkgfFxuK1x0QklUKFRSSUdHRVJfTkVUREVWX0hBTEZfRFVQTEVYKSB8XG4rXHRCSVQoVFJJR0dFUl9ORVRERVZfTElOSykgICAgICAgIHxcbitcdEJJVChUUklHR0VSX05FVERFVl9MSU5LXzEwKSAgICAgfFxuK1x0QklUKFRSSUdHRVJfTkVUREVWX0xJTktfMTAwKSAgICB8XG4rXHRCSVQoVFJJR0dFUl9ORVRERVZfTElOS18xMDAwKSAgIHxcbitcdEJJVChUUklHR0VSX05FVERFVl9SWCkgICAgICAgICAgfFxuK1x0QklUKFRSSUdHRVJfTkVUREVWX1RYKTtcbitcbitpbnQgbXQ3OTh4X3BoeV9sZWRfaHdfaXNfc3VwcG9ydGVkKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIHU4IGluZGV4LFxuK1x0XHRcdFx0ICAgdW5zaWduZWQgbG9uZyBydWxlcylcbit7XG4rXHRyZXR1cm4gbXRrX3BoeV9sZWRfaHdfaXNfc3VwcG9ydGVkKHBoeWRldiwgaW5kZXgsIHJ1bGVzLFxuK1x0XHRcdFx0XHQgICBzdXBwb3J0ZWRfdHJpZ2dlcnMpO1xuK31cbitFWFBPUlRfU1lNQk9MX0dQTChtdDc5OHhfcGh5X2xlZF9od19pc19zdXBwb3J0ZWQpO1xuK1xuK2ludCBtdDc5OHhfcGh5X2xlZF9od19jb250cm9sX2dldChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCB1OCBpbmRleCxcbitcdFx0XHRcdCAgdW5zaWduZWQgbG9uZyAqcnVsZXMpXG4re1xuK1x0cmV0dXJuIG10a19waHlfbGVkX2h3X2N0cmxfZ2V0KHBoeWRldiwgaW5kZXgsIHJ1bGVzLFxuK1x0XHRcdFx0ICAgICAgIE1US19HUEhZX0xFRF9PTl9TRVQsXG4rXHRcdFx0XHQgICAgICAgTVRLX0dQSFlfTEVEX1JYX0JMSU5LX1NFVCxcbitcdFx0XHRcdCAgICAgICBNVEtfR1BIWV9MRURfVFhfQkxJTktfU0VUKTtcbit9O1xuK0VYUE9SVF9TWU1CT0xfR1BMKG10Nzk4eF9waHlfbGVkX2h3X2NvbnRyb2xfZ2V0KTtcbitcbitpbnQgbXQ3OTh4X3BoeV9sZWRfaHdfY29udHJvbF9zZXQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgdTggaW5kZXgsXG4rXHRcdFx0XHQgIHVuc2lnbmVkIGxvbmcgcnVsZXMpXG4re1xuK1x0cmV0dXJuIG10a19waHlfbGVkX2h3X2N0cmxfc2V0KHBoeWRldiwgaW5kZXgsIHJ1bGVzLFxuK1x0XHRcdFx0ICAgICAgIE1US19HUEhZX0xFRF9PTl9TRVQsXG4rXHRcdFx0XHQgICAgICAgTVRLX0dQSFlfTEVEX1JYX0JMSU5LX1NFVCxcbitcdFx0XHRcdCAgICAgICBNVEtfR1BIWV9MRURfVFhfQkxJTktfU0VUKTtcbit9O1xuK0VYUE9SVF9TWU1CT0xfR1BMKG10Nzk4eF9waHlfbGVkX2h3X2NvbnRyb2xfc2V0KTtcbitcbiBNT0RVTEVfREVTQ1JJUFRJT04oXCJNZWRpYVRlayBFdGhlcm5ldCBQSFkgZHJpdmVyIGNvbW1vblwiKTtcbiBNT0RVTEVfQVVUSE9SKFwiU2t5IEh1YW5nIFx1MDAzY1NreUxha2UuSHVhbmdAbWVkaWF0ZWsuY29tXHUwMDNlXCIpO1xuIE1PRFVMRV9BVVRIT1IoXCJEYW5pZWwgR29sbGUgXHUwMDNjZGFuaWVsQG1ha3JvdG9waWEub3JnXHUwMDNlXCIpO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BoeS9tZWRpYXRlay9tdGsuaCBiL2RyaXZlcnMvbmV0L3BoeS9tZWRpYXRlay9tdGsuaFxuaW5kZXggMzIwZjc2ZmZhODFmYTIuLmNkOWQ0YzU1NTBjM2I3IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvcGh5L21lZGlhdGVrL210ay5oXG4rKysgYi9kcml2ZXJzL25ldC9waHkvbWVkaWF0ZWsvbXRrLmhcbkBAIC0xMyw2ICsxMyw3IEBAXG4gXG4gI2RlZmluZSBNVEtfRVhUX1BBR0VfQUNDRVNTXHRcdFx0MHgxZlxuICNkZWZpbmUgTVRLX1BIWV9QQUdFX0VYVEVOREVEXzFcdFx0XHQweDAwMDFcbisjZGVmaW5lIE1US19QSFlfUEFHRV9FWFRFTkRFRF8zXHRcdFx0MHgwMDAzXG4gI2RlZmluZSBNVEtfUEhZX1BBR0VfU1RBTkRBUkRcdFx0XHQweDAwMDBcbiAjZGVmaW5lIE1US19QSFlfUEFHRV9FWFRFTkRFRF81MkI1XHRcdDB4NTJiNVxuIFxuQEAgLTcyLDYgKzczLDggQEAgc3RydWN0IG10a19zb2NwaHlfcHJpdiB7XG4gXHR1bnNpZ25lZCBsb25nXHRcdGxlZF9zdGF0ZTtcbiB9O1xuIFxuK3ZvaWQgX19tdGtfdHJfd3JpdGUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgdTggY2hfYWRkciwgdTggbm9kZV9hZGRyLFxuK1x0XHQgICAgdTggZGF0YV9hZGRyLCB1MzIgdHJfZGF0YSk7XG4gdm9pZCBfX210a190cl9tb2RpZnkoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgdTggY2hfYWRkciwgdTggbm9kZV9hZGRyLFxuIFx0XHQgICAgIHU4IGRhdGFfYWRkciwgdTMyIG1hc2ssIHUzMiBzZXQpO1xuIHZvaWQgbXRrX3RyX21vZGlmeShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCB1OCBjaF9hZGRyLCB1OCBub2RlX2FkZHIsXG5AQCAtMTAxLDQgKzEwNCwxNiBAQCBpbnQgbXRrX3BoeV9od19sZWRfYmxpbmtfc2V0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIHU4IGluZGV4LFxuIFx0XHRcdCAgICAgYm9vbCBibGlua2luZyk7XG4gdm9pZCBtdGtfcGh5X2xlZHNfc3RhdGVfaW5pdChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KTtcbiBcbitpbnQgbXQ3OTh4X3BoeV9sZWRfYmxpbmtfc2V0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIHU4IGluZGV4LFxuK1x0XHRcdCAgICAgdW5zaWduZWQgbG9uZyAqZGVsYXlfb24sXG4rXHRcdFx0ICAgICB1bnNpZ25lZCBsb25nICpkZWxheV9vZmYpO1xuK2ludCBtdDc5OHhfcGh5X2xlZF9icmlnaHRuZXNzX3NldChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LFxuK1x0XHRcdFx0ICB1OCBpbmRleCwgZW51bSBsZWRfYnJpZ2h0bmVzcyB2YWx1ZSk7XG4raW50IG10Nzk4eF9waHlfbGVkX2h3X2lzX3N1cHBvcnRlZChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCB1OCBpbmRleCxcbitcdFx0XHRcdCAgIHVuc2lnbmVkIGxvbmcgcnVsZXMpO1xuK2ludCBtdDc5OHhfcGh5X2xlZF9od19jb250cm9sX2dldChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCB1OCBpbmRleCxcbitcdFx0XHRcdCAgdW5zaWduZWQgbG9uZyAqcnVsZXMpO1xuK2ludCBtdDc5OHhfcGh5X2xlZF9od19jb250cm9sX3NldChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCB1OCBpbmRleCxcbitcdFx0XHRcdCAgdW5zaWduZWQgbG9uZyBydWxlcyk7XG4rXG4gI2VuZGlmIC8qIF9NVEtfRVBIWV9IXyAqL1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDlUMDE6MTE6NTYuMjM3MjIzMDk1WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTQwMzIxNDQxOTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQSBOZXcgUEhZIERyaXZlcjogUmVhY2hhYmlsaXR5IGFuZCBGdXp6aW5nIENvbnNpZGVyYXRpb25zKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBzZXJpZXMgdGhhdCBpbnRyb2R1Y2VzIGEgbmV3IEV0aGVybmV0IFBIWSBkcml2ZXIsIGBhaXJvaGEtZ2Utc29jLmNgLCBzcGVjaWZpY2FsbHkgZm9yIEFpcm9oYSBTb0NzLiBJdCBjbGVhbmx5IHNlcGFyYXRlcyB0aGUgQWlyb2hhIFBIWSBmdW5jdGlvbmFsaXR5IGZyb20gdGhlIGV4aXN0aW5nIE1lZGlhVGVrIFNvQyBQSFkgZHJpdmVyIChgbXRrLWdlLXNvYy5jYCkuIFdlIGhhdmUgYSBuZXcgS2NvbmZpZyBvcHRpb24sIGBBSVJPSEFfR0VfU09DX1BIWWAsIHRoZSBuZXcgZHJpdmVyIGZpbGUsIGFuZCBtb2RpZmljYXRpb25zIHRvIHRoZSBNZWRpYVRlayBmaWxlcyB0byByZWZsZWN0IHRoaXMgc3BsaXQuXG5cbk15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIGFib3V0IHJlYWNoYWJpbGl0eS4gVGhpcyBpcyBhIFBIWSBkcml2ZXIsIHdoaWNoIG1lYW5zIGl0IGdldHMgaW5zdGFudGlhdGVkIHdoZW4gdGhlIFBIWSBpdHNlbGYgaXMgcHJlc2VudCBhbmQgZGV0ZWN0YWJsZS4gSW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLCB0aGluZ3MgZ2V0IGEgYml0IG1vcmUgY29tcGxleC4gU3l6a2FsbGVyIHVzdWFsbHkgcmVsaWVzIG9uIGVtdWxhdGVkIE1ESU8gYnVzZXMgb3IgZHVtbXkgUEhZcyB0byByZWFjaCBQSFkgZHJpdmVycy4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgaXQncyBldmVuICpwb3NzaWJsZSogZm9yIFN5emthbGxlciB0byB0cmlnZ2VyIHRoaXMgZHJpdmVyLiBUaGUgZHJpdmVyIHVzZXMgYFBIWV9JRF9NQVRDSF9FWEFDVGAgd2l0aCBzcGVjaWZpYyBJRHM6IGBBSVJPSEFfR1BIWV9JRF9BTjc1ODFgIGFuZCBgQUlST0hBX0dQSFlfSURfQU43NTgzYC4gU28sIGlmIGBDT05GSUdfQUlST0hBX0dFX1NPQ19QSFlgIGlzIGVuYWJsZWQsIHRoZSBkcml2ZXIgd2lsbCBiZSBidWlsdC5cblxuSXMgaXQgd29ydGggZnV6emluZz8gWWVzLCBhYnNvbHV0ZWx5LiBJdCdzIGEgbmV3IGRyaXZlciB3aXRoIGZ1bmN0aW9uYWwgY2hhbmdlcywgYSBwcmltZSB0YXJnZXQgZm9yIGZpbmRpbmcgYnVncy4gVGhlIG1vcmUgY29kZSB0aGF04oCZcyBhZGRlZCBvciBjaGFuZ2VkIHRoZSBtb3JlIHRoZSBwb3NzaWJpbGl0eSBvZiBuZXcgYnVncyBiZWluZyBwcmVzZW50LlxuXG5CdXQgYmFjayB0byByZWFjaGFiaWxpdHkuIFN5emthbGxlciAqY2FuKiBmdXp6IFBIWSBkcml2ZXJzLCBpZiBpdCdzIHByb2JlZC4gVGhhdOKAmXMgdGhlIGtleSBoZXJlLiBTbywgaG93IGNhbiB0aGlzIGRyaXZlciBiZSBwcm9iZWQ/IEl0IG1hdGNoZXMgYmFzZWQgb24gUEhZIElEcywgd2hpY2ggc3VnZ2VzdHMgaXQncyBmb3VuZCBkdXJpbmcgYW4gTURJTyBidXMgc2Nhbi4gSWYgdGhlcmXigJlzIGFuIGVtdWxhdGVkIE1ESU8gYnVzLCBTeXprYWxsZXIgY291bGQgcG90ZW50aWFsbHkgaW5qZWN0IGFuIE1ESU8gZGV2aWNlIHRoYXQgc2ltdWxhdGVzIHRoZSBBaXJvaGEgUEhZLCBidXQgSSdtIG5vdCBzdXJlIGlmIGl0IGhhcyB0aGF0IGNhcGFiaWxpdHkuXG5cbk5vdywgSSdtIHJlY2FsbGluZyB0aGUgaW5zdHJ1Y3Rpb25zIHdoaWNoIHN0YXRlIHNvbWV0aGluZyBsaWtlLCBcIkNvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZVwiLiBTbywgZXZlbiBpZiB0aGVyZSB3ZXJlIGFuIGVtdWxhdGVkIG5ldHdvcmsgY2FyZCBpbiBRRU1VLCBpdCB3b3VsZCBuZWVkIHRvIHVzZSB0aGlzIHNwZWNpZmljIFBIWSwgd2hpY2ggc2VlbXMgdW5saWtlbHkuIFN5emthbGxlciBkb2Vzbid0IGRpcmVjdGx5IGluc3RhbnRpYXRlIGFyYml0cmFyeSBQSFlzOyB0aGV54oCZcmUgY3JlYXRlZCBieSBkZXZpY2UgdHJlZSBvciBNRElPIGJ1cyBzY2FubmluZy4gQ2FuIFN5c2ZzIG9yIE5ldGxpbmsgaW5zdGFudGlhdGUgYSBQSFk/IE5vLCB0eXBpY2FsbHkgbm90LiBJdOKAmXMgdGhlIE1ESU8gY29udHJvbGxlciB0aGF0IGRvZXMgdGhlIHByb2JpbmcuXG5cblRoZSBib3R0b20gbGluZSBpcyB0aGF0IHVubGVzcyBRRU1VIGVtdWxhdGVzIHRoZSBBaXJvaGEgb3IgTWVkaWFUZWsgU29DIHdpdGggdGhpcyBzcGVjaWZpYyBNRElPIGJ1cyBhbmQgUEhZLCB0aGUgZHJpdmVyIHdvbid0IGJlIHByb2JlZCwgd2hpY2ggcmVuZGVycyBpdCB1bnJlYWNoYWJsZS5cblxuSG93ZXZlciwgdGhlIGluc3RydWN0aW9ucyBhbHNvIHNheTogXCJJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoIHRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlwiIFNvLCBldmVuIGlmIHRoZSBoYXJkd2FyZSBpc24ndCBkaXJlY3RseSByZWFjaGFibGUsIGJlY2F1c2UgaXQgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSwgaXQgaXMgd29ydGggZnV6emluZy4gVGhlIHF1ZXN0aW9uLCB0aGVuLCBpcyB3aGV0aGVyIHRoZXJlIGlzIGEgdmlydHVhbCBNRElPIGRyaXZlciwgd2hpY2ggd291bGQgYWxsb3cgU3l6a2FsbGVyIHRvIGluamVjdCBNRElPIGRldmljZXMsIHRvIHRlc3QgdGhpcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NTU2NjUsIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5NjEsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wOVQwMToxMjoxMC4yNjkzNjkxODNaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzQ1NjMxMzUyNSwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWRpby4qbW9ja3VwXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wOVQwMToxMjoxMy43MjU2ODk2NThaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyODMxMzI2OTI1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgc3VtbWFyeSwgcHJlc2VudGVkIGFzIGEgc3RyZWFtIG9mIHRob3VnaHQ6XG5cbioqQ2hlY2tpbmcgdGhlIFBIWSBEcml2ZXIgTGFuZHNjYXBlKipcblxuUmlnaHQsIGxldCdzIGdldCBkb3duIHRvIGl0LiBHaXZlbiB0aGUgY29udGV4dCwgbXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHplcm8gaW4gb24gdGhlIHBoeXNpY2FsIGxheWVyIGludGVyZmFjZSBkcml2ZXJzLCBzcGVjaWZpY2FsbHkgaW4gdGhlIGBkcml2ZXJzL25ldC9waHkvYCBkaXJlY3RvcnkuIFRoYXQncyB0aGUgbG9naWNhbCBzdGFydGluZyBwb2ludCB3aGVuIEknbSBkZWFsaW5nIHdpdGggbmV0d29ya2luZyBoYXJkd2FyZSBhdCBhIGxvd2VyIGxldmVsLiBNeSBpbnR1aXRpb24gdGVsbHMgbWUgdGhhdCB0aGUgY2x1ZSB0byB0aGUgcHJvYmxlbSB3aWxsIHByb2JhYmx5IGJlIGZvdW5kIHdpdGhpbiB0aGUgUEhZIGRyaXZlciBjb2RlLiBJJ20gZXNwZWNpYWxseSBrZWVuIHRvIGxvb2sgZm9yIGFueSBpbnN0YW5jZXMgb2YgYSBcInZpcnR1YWxcIiBvciBcImR1bW15XCIgTURJTyBpbXBsZW1lbnRhdGlvbi4gVGhhdCB3b3VsZCBzdWdnZXN0IGEgc3BlY2lmaWMgaGFyZHdhcmUgY29uZmlndXJhdGlvbiwgcGVyaGFwcyBmb3IgdGVzdGluZyBvciBlbXVsYXRpb24gcHVycG9zZXMsIHdoaWNoIGlzIGxpa2VseSB0byBiZSBhdCB0aGUgaGVhcnQgb2YgdGhlIGlzc3VlIEknbSBkZWFsaW5nIHdpdGguIExldCdzIHNlZSB3aGF0J3MgdGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU3MzQ2LCJPdXRwdXRUb2tlbnMiOjE4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDlUMDE6MTI6MTYuNTU3MDE5ODczWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI0ODEwOTI5NjEsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1kaW8uKmR1bW15XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wOVQwMToxMjoxOS4wMzgxMjAwNzRaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyOTM2MDAzOTAzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byB0aGUgRml4ZWQgUEhZIENvZGUqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSBuZWVkIHRvIGludmVzdGlnYXRlIHNvbWV0aGluZyByZWxhdGVkIHRvIG5ldHdvcmsgaW50ZXJmYWNlcywgYW5kIEkgaGF2ZSBhIGh1bmNoIHRoZSBpc3N1ZSBtaWdodCBiZSBkb3duIGluIHRoZSBsb3ctbGV2ZWwgUEhZIGxheWVyLiBNeSBndXQgZmVlbGluZyBpcyBsZWFkaW5nIG1lIHN0cmFpZ2h0IHRvIGBkcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmNgLiBUaGF0J3MgdGhlIGxpa2VseSBzcG90IGZvciBmaXhlZCBQSFkgY29uZmlndXJhdGlvbiBhbmQgY29udHJvbC4gSSdtIGV4cGVjdGluZyB0byBmaW5kIHRoZSBzdGFuZGFyZCBQSFkgaW50ZXJmYWNlIGZ1bmN0aW9ucyBpbXBsZW1lbnRlZCB0aGVyZSwgdGhpbmdzIGxpa2UgcmVhZC93cml0ZSByZWdpc3RlcnMsIGxpbmsgc3RhdGUgZGV0ZWN0aW9uLCBhbmQgcG90ZW50aWFsbHkgZXZlbiBpbml0aWFsaXphdGlvbiByb3V0aW5lcyBpZiBpdCdzIG5vdCBoYW5kbGVkIGVsc2V3aGVyZS4gVGhpcyB3aWxsIGJlIHRoZSBzdGFydGluZyBwb2ludCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgZml4ZWQgUEhZIGlzIGhhbmRsZWQgYnkgdGhlIGRyaXZlci4gSeKAmWxsIGJlIGxvb2tpbmcgZm9yIHBvdGVudGlhbCBhcmVhcyBvZiBjb25maWd1cmF0aW9uLCBpbml0aWFsaXphdGlvbiBhbmQgbGluayBzdGF0dXMgZGV0ZWN0aW9uIHRvIHNlZSBpZiB0aGUgcHJvYmxlbSBsaWVzIHdpdGggdGhlIGRyaXZlciBjb2RlLCBvciB3aXRoIG15IGV4cGVjdGF0aW9ucyBvZiBob3cgaXQgc2hvdWxkIG9wZXJhdGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU3NTY3LCJPdXRwdXRUb2tlbnMiOjE5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDlUMDE6MTI6MjEuOTc0MTM4NjU4WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2NjUyMjUyNzMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZml4ZWRfcGh5X3JlZ2lzdGVyXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jPTQ4Mj1zdGF0aWMgaW50IF9faW5pdCBkc2FfbG9vcF9pbml0KHZvaWQpXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy00OTEtXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIE5VTV9GSVhFRF9QSFlTOyBpKyspXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6NDkyOlxcdFxcdHBoeWRldnNbaV0gPSBmaXhlZF9waHlfcmVnaXN0ZXJfMTAwZmQoKTtcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy00OTMtXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9iNDQuYz0yMjM0PXN0YXRpYyBpbnQgYjQ0X3JlZ2lzdGVyX3BoeV9vbmUoc3RydWN0IGI0NCAqYnApXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9iNDQuYy0yMjcyLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2I0NC5jOjIyNzM6XFx0XFx0cGh5ZGV2ID0gZml4ZWRfcGh5X3JlZ2lzdGVyXzEwMGZkKCk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYjQ0LmMtMjI3NC1cXHRcXHRpZiAoIUlTX0VSUihwaHlkZXYpKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYmdtYWMuYz0xNDM5PWludCBiZ21hY19waHlfY29ubmVjdF9kaXJlY3Qoc3RydWN0IGJnbWFjICpiZ21hYylcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JnbWFjLmMtMTQ0OC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9iZ21hYy5jOjE0NDk6XFx0cGh5X2RldiA9IGZpeGVkX3BoeV9yZWdpc3RlcihcXHUwMDI2ZnBoeV9zdGF0dXMsIE5VTEwpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JnbWFjLmMtMTQ1MC1cXHRpZiAoSVNfRVJSKHBoeV9kZXYpKSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mYXJhZGF5L2Z0Z21hYzEwMC5jPTE4NDg9c3RhdGljIGludCBmdGdtYWMxMDBfcHJvYmVfbmNzaShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZmFyYWRheS9mdGdtYWMxMDAuYy0xODY2LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZhcmFkYXkvZnRnbWFjMTAwLmM6MTg2NzpcXHRwaHlkZXYgPSBmaXhlZF9waHlfcmVnaXN0ZXIoXFx1MDAyNm5jc2lfcGh5X3N0YXR1cywgbnApO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZhcmFkYXkvZnRnbWFjMTAwLmMtMTg2OC1cXHRpZiAoSVNfRVJSKHBoeWRldikpIHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mZWNfbWFpbi5jPTI5ODE9c3RhdGljIGludCBmZWNfZW5ldF9taWlfcHJvYmUoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZmVjX21haW4uYy0zMDAyLVxcdFxcdFxcdG5ldGRldl9pbmZvKG5kZXYsIFxcXCJubyBQSFksIGFzc3VtaW5nIGRpcmVjdCBjb25uZWN0aW9uIHRvIHN3aXRjaFxcXFxuXFxcIik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZlY19tYWluLmM6MzAwMzpcXHRcXHRcXHRwaHlfZGV2ID0gZml4ZWRfcGh5X3JlZ2lzdGVyXzEwMGZkKCk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZlY19tYWluLmMtMzAwNC1cXHRcXHRcXHRpZiAoSVNfRVJSKHBoeV9kZXYpKSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaGlibWNnZS9oYmdfbWRpby5jPTIzOD1zdGF0aWMgaW50IGhiZ19maXhlZF9waHlfaW5pdChzdHJ1Y3QgaGJnX3ByaXYgKnByaXYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaGlibWNnZS9oYmdfbWRpby5jLTI1MC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaGlibWNnZS9oYmdfbWRpby5jOjI1MTpcXHRwaHlkZXYgPSBmaXhlZF9waHlfcmVnaXN0ZXIoXFx1MDAyNmhiZ19maXhlZF9waHlfc3RhdHVzLCBOVUxMKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaGlibWNnZS9oYmdfbWRpby5jLTI1Mi1cXHRpZiAoSVNfRVJSKHBoeWRldikpIHtcXG4tLVxcbmRyaXZlcnMvbmV0L21kaW8vb2ZfbWRpby5jPTQxMj1pbnQgb2ZfcGh5X3JlZ2lzdGVyX2ZpeGVkX2xpbmsoc3RydWN0IGRldmljZV9ub2RlICpucClcXG4tLVxcbmRyaXZlcnMvbmV0L21kaW8vb2ZfbWRpby5jLTQ1OS1yZWdpc3Rlcl9waHk6XFxuZHJpdmVycy9uZXQvbWRpby9vZl9tZGlvLmM6NDYwOlxcdHJldHVybiBQVFJfRVJSX09SX1pFUk8oZml4ZWRfcGh5X3JlZ2lzdGVyKFxcdTAwMjZzdGF0dXMsIG5wKSk7XFxuZHJpdmVycy9uZXQvbWRpby9vZl9tZGlvLmMtNDYxLX1cXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYz0xMTg9c3RhdGljIGludCBmaXhlZF9waHlfZ2V0X2ZyZWVfYWRkcih2b2lkKVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jLTEzMC1cXG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmM6MTMxOnN0cnVjdCBwaHlfZGV2aWNlICpmaXhlZF9waHlfcmVnaXN0ZXIoY29uc3Qgc3RydWN0IGZpeGVkX3BoeV9zdGF0dXMgKnN0YXR1cyxcXG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmMtMTMyLVxcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnApXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmMtMTcyLX1cXG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmM6MTczOkVYUE9SVF9TWU1CT0xfR1BMKGZpeGVkX3BoeV9yZWdpc3Rlcik7XFxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jLTE3NC1cXG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmM6MTc1OnN0cnVjdCBwaHlfZGV2aWNlICpmaXhlZF9waHlfcmVnaXN0ZXJfMTAwZmQodm9pZClcXG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmMtMTc2LXtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYy0xODEtXFxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jOjE4MjpcXHRyZXR1cm4gZml4ZWRfcGh5X3JlZ2lzdGVyKFxcdTAwMjZzdGF0dXMsIE5VTEwpO1xcbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYy0xODMtfVxcbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYzoxODQ6RVhQT1JUX1NZTUJPTF9HUEwoZml4ZWRfcGh5X3JlZ2lzdGVyXzEwMGZkKTtcXG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmMtMTg1LVxcbi0tXFxuaW5jbHVkZS9saW51eC9waHlfZml4ZWQuaD0xOT1leHRlcm4gaW50IGZpeGVkX3BoeV9jaGFuZ2VfY2FycmllcihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBib29sIG5ld19jYXJyaWVyKTtcXG5pbmNsdWRlL2xpbnV4L3BoeV9maXhlZC5oOjIwOnN0cnVjdCBwaHlfZGV2aWNlICpmaXhlZF9waHlfcmVnaXN0ZXIoY29uc3Qgc3RydWN0IGZpeGVkX3BoeV9zdGF0dXMgKnN0YXR1cyxcXG5pbmNsdWRlL2xpbnV4L3BoeV9maXhlZC5oLTIxLVxcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnApO1xcbmluY2x1ZGUvbGludXgvcGh5X2ZpeGVkLmg6MjI6c3RydWN0IHBoeV9kZXZpY2UgKmZpeGVkX3BoeV9yZWdpc3Rlcl8xMDBmZCh2b2lkKTtcXG5pbmNsdWRlL2xpbnV4L3BoeV9maXhlZC5oLTIzLVxcbi0tXFxuaW5jbHVkZS9saW51eC9waHlfZml4ZWQuaD0yOT1zdGF0aWMgaW5saW5lIHN0cnVjdCBwaHlfZGV2aWNlICpcXG5pbmNsdWRlL2xpbnV4L3BoeV9maXhlZC5oOjMwOmZpeGVkX3BoeV9yZWdpc3Rlcihjb25zdCBzdHJ1Y3QgZml4ZWRfcGh5X3N0YXR1cyAqc3RhdHVzLFxcbmluY2x1ZGUvbGludXgvcGh5X2ZpeGVkLmgtMzEtXFx0XFx0ICAgc3RydWN0IGRldmljZV9ub2RlICpucClcXG4tLVxcbmluY2x1ZGUvbGludXgvcGh5X2ZpeGVkLmgtMzUtXFxuaW5jbHVkZS9saW51eC9waHlfZml4ZWQuaDozNjpzdGF0aWMgaW5saW5lIHN0cnVjdCBwaHlfZGV2aWNlICpmaXhlZF9waHlfcmVnaXN0ZXJfMTAwZmQodm9pZClcXG5pbmNsdWRlL2xpbnV4L3BoeV9maXhlZC5oLTM3LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDlUMDE6MTI6MjMuNjM5MzcxNzkxWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzc3MTAxNzA0MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEZpeGVkIFBIWSBEcml2ZXIqKlxuXG5Pa2F5LCBzbyB0aGUgYGZpeGVkX3BoeWAgZHJpdmVyIHNlZW1zIHByZXR0eSBzdHJhaWdodGZvcndhcmQg4oCTIGl0J3MgZGVzaWduZWQgdG8gcmVnaXN0ZXIgYSBQSFkgd2l0aCBhIHNwZWNpZmljLCBoYXJkY29kZWQgSUQ6IGBmaXhlZF9waHlfaWRgLiBIbW0sIHRoYXQncyBub3QgdmVyeSBmbGV4aWJsZS4gSXQncyBlc3NlbnRpYWxseSBsb2NraW5nIHVzIGludG8gYSBwYXJ0aWN1bGFyIGNvbmZpZ3VyYXRpb24uIEJ1dCB3YWl0LCBhIHRob3VnaHQgc3RyaWtlcyBtZTogY2FuIFN5emthbGxlciwgd2l0aCBpdHMgYWJpbGl0eSB0byBtYW5pcHVsYXRlIGFuZCBjcmVhdGUgdmlydHVhbCBoYXJkd2FyZSwgcG90ZW50aWFsbHkgY3JlYXRlIGEgZHVtbXkgTURJTyBidXMgYW5kIHJlZ2lzdGVyIFBIWXMgd2l0aCAqYXJiaXRyYXJ5KiBJRHMsIGVzc2VudGlhbGx5IGJ5cGFzc2luZyB0aGlzIGhhcmRjb2RlZCByZXN0cmljdGlvbj8gVGhpcyBjb3VsZCBoYXZlIGludGVyZXN0aW5nIGltcGxpY2F0aW9ucy4gSWYgd2UgY291bGQgZ2V0IHRoYXQgd29ya2luZywgaXQgY291bGQgcHJvdmlkZSBzb21lIHVzZWZ1bCBmdXp6aW5nIGNvdmVyYWdlLiBUaGUga2V5IHF1ZXN0aW9uIGlzIHdoZXRoZXIgU3l6a2FsbGVyJ3MgTURJTyBjYXBhYmlsaXRpZXMgaW5jbHVkZSBzdWNoIGZ1bmN0aW9uYWxpdHksIGFuZCBJIHN1c3BlY3QgdGhhdCBpcyBhIHRoaW5nIHRvIGJlIGV4YW1pbmVkLiBMZXQgbWUgZG8gYSBxdWljayBzY2FuIG9mIHRoZSBTeXprYWxsZXIgZG9jdW1lbnRhdGlvbiBhbmQgY29kZSB0byBzZWUgd2hhdCBraW5kIG9mIE1ESU8gc3VwcG9ydCBpcyBpbiBwbGFjZS4gSSBzaG91bGQgYmUgYWJsZSB0byBnZXQgYSBiZXR0ZXIgYW5zd2VyIGlmIEkgc2VhcmNoIHNwZWNpZmljYWxseSBmb3Iga2V5d29yZHMgcmVsYXRpbmcgdG8gU3l6a2FsbGVyIGFuZCBNRElPLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1OTQ0NCwiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA5VDAxOjEyOjI3LjQxMDM5MjU3MloiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjU3NjMxMTc1MCwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic3l6Xy4qbWRpb1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDlUMDE6MTI6MjkuOTg2NzE0MzgxWiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0ODI5MDI1NDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHByZXNlbnRlZCBhcyBpZiBpdCB3ZXJlIG15IG93biBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqQ29uc2lkZXJpbmcgYSBTcGVjaWZpYyBOYW1pbmcgQ29udmVudGlvbioqXG5cbkFscmlnaHQsIGxldCdzIHNlZS4uLiBJJ20gdGhpbmtpbmcgYWJvdXQgcGF0dGVybnMgaGVyZS4gSSd2ZSBiZWVuIHdvcmtpbmcgd2l0aCB0aGlzIGRhdGFzZXQsIHRoaXMgYWxnb3JpdGhtLCB0aGlzIHN5c3RlbSwgd2hhdGV2ZXIgaXQgaXMuLi4gYW5kIEkga2VlcCBzZWVpbmcgdGhlc2UgZW50cmllcy4gTm93LCBJJ20gdHJ5aW5nIHRvIHdyYXAgbXkgaGVhZCBhcm91bmQgYSBwYXJ0aWN1bGFyIGNvbnZlbnRpb24gaW4gdGhpcyBpbnN0YW5jZSAtIHNwZWNpZmljYWxseSwgYW55dGhpbmcgdGhhdCBzdGFydHMgd2l0aCBgc3l6X2AgZm9sbG93ZWQgYnksIHdlbGwsICphbnl0aGluZyosIHJlYWxseSwgYW5kIHRoZW4gZW5kcyB3aXRoIGBwaHlgLiBUaGF0J3MgdGhlIGtleS4gV2hhdCBpcyB0aGF0IHJlcHJlc2VudGluZz8gQXJlIHRoZXNlIHBoeXNpY2FsIHBoZW5vbWVuYT8gU2ltdWxhdGlvbnM/IEV4cGVyaW1lbnRhbCByZXN1bHRzPyBJcyBpdCBzb21ldGhpbmcgc3BlY2lmaWMgdG8gdGhlICpzeXoqIHBhcnQ/IFdoYXQgZG9lcyBpdCByZWxhdGUgdG8/XG5cbkknbSBwcm9iYWJseSBkZWFsaW5nIHdpdGggc29tZSB1bmRlcmx5aW5nIHBoeXNpY3MgbW9kZWwgdGhlbi4gVGhhdCBgcGh5YCBzdWZmaXggaXMgc2NyZWFtaW5nIFwicGh5c2ljYWxcIiwgXCJwaHlzaWNzXCIsIHNvbWV0aGluZyBwaHlzaWNhbC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhhdC4gSSBuZWVkIHRvIGtub3cgKndoYXQqIGl0IGluZGljYXRlcy4gSXQgY291bGQgYmUgc29tZSBzcGVjaWZpYyBmaWxlIGZvcm1hdCwgYSBkYXRhIGNhdGVnb3J5LCBhIHBhcnRpY3VsYXIgcGFyYW1ldGVyLCBhIHJlbGF0ZWQgdmFsdWUsIGFuZCBJIG5lZWQgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiB0aGUgZGF0YSBjb250ZXh0IHRvIGVuc3VyZSBJIHVzZSB0aGF0IGRhdGEgYXBwcm9wcmlhdGVseSBhbmQgY29uc2lkZXIgaXRzIGxpbWl0YXRpb25zIGluIHdoYXRldmVyIG15IG5leHQgc3RlcHMgYXJlLiBUaGlzIGlzIGEgdmVyeSB0YXJnZXRlZCBxdWVyeS5cblxuXG4iLCJJbnB1dFRva2VucyI6NTk3NjEsIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wOVQwMToxMjozMy40Njk2MTg5MDVaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzNDUyNTgwMjMsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInN5el8uKnBoeVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDlUMDE6MTI6MzUuODE0ODgzODE5WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUxNjAxNTQzNzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQ3VycmVudCBUaGlua2luZyBvbiBQSFkgRHJpdmVyIEluc3RhbnRpYXRpb24gYW5kIFJlYWNoYWJpbGl0eSoqXG5cbk9rYXksIHNvIEknbSB0cnlpbmcgdG8gZmlndXJlIG91dCBob3cgdG8gZ2V0IGF0IHRoaXMgUEhZIGRyaXZlciB3aXRoaW4gdGhlIFFFTVUgZW52aXJvbm1lbnQuIFRoZSBmaXJzdCByb2FkYmxvY2sgaXMgdGhlIG9idmlvdXMgb25lOiBpZiBJIGNhbid0IGluc3RhbnRpYXRlIHRoZSBkYW1uIHRoaW5nIHdpdGhpbiBRRU1VLCBpdCdzIGJhc2ljYWxseSB1bnJlYWNoYWJsZSBmb3IgbXkgdGVzdGluZyBwdXJwb3Nlcy4gU28sIGhvdyAqZG8qIEkgaW5zdGFudGlhdGUgaXQ/IEknbSBpbW1lZGlhdGVseSB0aGlua2luZywgY2FuIEkgbWF5YmUgZ2V0IGl0IGdvaW5nIGZyb20gdXNlcnNwYWNlIHNvbWVob3c/IE5vLCB0aGF0J3Mgbm90IHJpZ2h0LiBQSFkgZGV2aWNlcyBhcmUgY3JlYXRlZCBhbmQgbWFuYWdlZCBieSB0aGUgTURJTyBidXMgZHJpdmVyLCB3aGljaCBpcyB0aGUgZW50aXR5IGluIGNvbnRyb2wgaGVyZS5cblxuQWxyaWdodCwgc28gdGhlIGZvY3VzIHNoaWZ0cyB0byB0aGUgTURJTyBidXMgZHJpdmVyLiBJcyB0aGVyZSBhIHdheSB0byBicmluZyB0aGF0IHVwIGZyb20gdXNlcnNwYWNlPyBQb3RlbnRpYWxseSB0aHJvdWdoIGBpMmNgIG9yIGBzcGlgLCBtYXliZT8gU29tZSBNRElPIGJ1c2VzICphcmUqIG9uIEkyQyBvciBTUEkgaW50ZXJmYWNlcywgYnV0IHR5cGljYWxseSwgdGhleSdyZSBtZW1vcnktbWFwcGVkLCB3aGljaCB3b3VsZCBydWxlIHRob3NlIG91dCBhcyBlYXN5IG9wdGlvbnMuIFdoYXQgYWJvdXQgYG1kaW8tZ3Bpb2A/IE5vdyB3ZSdyZSBnZXR0aW5nIHNvbWV3aGVyZS4gRGV2aWNlIHRyZWUgc2VlbXMgbGlrZSB0aGUgbGlrZWx5IHJvdXRlIGZvciBgbWRpby1ncGlvYCBhbmQgSSB0aGluayB0aGF0J3MgdGhlIGtleS5cblxuQnV0IGNhbiBzeXprYWxsZXIgbG9hZCBjdXN0b20gZGV2aWNlIHRyZWVzPyBJIGNhbid0IHJlY2FsbCBoYXZpbmcgc2VlbiB0aGF0IGNhcGFiaWxpdHkgaW4gcGxhY2UgYW5kIGl0IHR1cm5zIG91dCwgaXQgY2FuJ3QuIE5vdCBhcmJpdHJhcnkgb25lcyBhbnl3YXksIHNvIHRoYXQgaWRlYSBnZXRzIHNob3QgZG93bi4gTm93IEknbSBncmFzcGluZyBhdCBzdHJhd3MuIFdhaXTigKYgaXMgdGhlcmUgYSAqdmlydHVhbCogTURJTyBidXMsIHNvbWV0aGluZyB0aGF0IHdvdWxkIGJlIGluc3RhbnRpYXRlZCB3aXRoaW4gdGhlIHNpbXVsYXRpb24/IExldCBtZSBjaGVja+KApiBJJ2xsIGhlYWQgb3ZlciB0byBgZHJpdmVycy9uZXQvbWRpby9tZGlvLW1vY2t1cC5jYCBvciBzb21ldGhpbmcgc2ltaWxhciwgc29tZXRoaW5nIHRoYXQgbWlnaHQgc2ltdWxhdGUgdGhpcyBlbnZpcm9ubWVudC5cblxuXG4iLCJJbnB1dFRva2VucyI6NjAwNzAsIk91dHB1dFRva2VucyI6MTYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNzAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDlUMDE6MTI6NDAuOTc1MDM5NjY3WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTY1MDg5NTI5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1vY2t1cFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJcXG5GdWxsIG91dHB1dCBpcyB0b28gbG9uZywgc2hvd2luZyA1MDAgb3V0IG9mIDExMDcgbGluZXMuXFxuVXNlIG1vcmUgcHJlY2lzZSBleHByZXNzaW9uIGlmIHBvc3NpYmxlLlxcblxcbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvZ3Bpby9ncGlvLW1vY2t1cC5yc3Q9Mz1HUElPIFRlc3RpbmcgRHJpdmVyXFxuLS1cXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2dwaW8vZ3Bpby1tb2NrdXAucnN0LTEzLVxcbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvZ3Bpby9ncGlvLW1vY2t1cC5yc3Q6MTQ6VGhlIEdQSU8gVGVzdGluZyBEcml2ZXIgKGdwaW8tbW9ja3VwKSBwcm92aWRlcyBhIHdheSB0byBjcmVhdGUgc2ltdWxhdGVkIEdQSU9cXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2dwaW8vZ3Bpby1tb2NrdXAucnN0LTE1LWNoaXBzIGZvciB0ZXN0aW5nIHB1cnBvc2VzLiBUaGUgbGluZXMgZXhwb3NlZCBieSB0aGVzZSBjaGlwcyBjYW4gYmUgYWNjZXNzZWRcXG4tLVxcbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvZ3Bpby9ncGlvLW1vY2t1cC5yc3Q9MTk9Q3JlYXRpbmcgc2ltdWxhdGVkIGNoaXBzIHVzaW5nIG1vZHVsZSBwYXJhbXNcXG4tLVxcbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvZ3Bpby9ncGlvLW1vY2t1cC5yc3QtMjEtXFxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9ncGlvL2dwaW8tbW9ja3VwLnJzdDoyMjpXaGVuIGxvYWRpbmcgdGhlIGdwaW8tbW9ja3VwIGRyaXZlciBhIG51bWJlciBvZiBwYXJhbWV0ZXJzIGNhbiBiZSBwYXNzZWQgdG8gdGhlXFxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9ncGlvL2dwaW8tbW9ja3VwLnJzdC0yMy1tb2R1bGUuXFxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9ncGlvL2dwaW8tbW9ja3VwLnJzdC0yNC1cXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2dwaW8vZ3Bpby1tb2NrdXAucnN0OjI1OiAgICBncGlvX21vY2t1cF9yYW5nZXNcXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2dwaW8vZ3Bpby1tb2NrdXAucnN0LTI2LVxcbi0tXFxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9ncGlvL2dwaW8tbW9ja3VwLnJzdC0zMi1cXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2dwaW8vZ3Bpby1tb2NrdXAucnN0OjMzOiAgICAgICAgRXhhbXBsZTogZ3Bpb19tb2NrdXBfcmFuZ2VzPS0xLDgsLTEsMTYsNDA1LDQwOVxcbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvZ3Bpby9ncGlvLW1vY2t1cC5yc3QtMzQtXFxuLS1cXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2dwaW8vZ3Bpby1tb2NrdXAucnN0LTM4LVxcbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvZ3Bpby9ncGlvLW1vY2t1cC5yc3Q6Mzk6ICAgIGdwaW9fbW9ja3VwX25hbWVkX2xpbmVzXFxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9ncGlvL2dwaW8tbW9ja3VwLnJzdC00MC1cXG4tLVxcbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvZ3Bpby9ncGlvLW1vY2t1cC5yc3QtNDMtXFxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9ncGlvL2dwaW8tbW9ja3VwLnJzdDo0NDogICAgICAgIFRoZSBuYW1lIGZvcm1hdCBpczogZ3Bpby1tb2NrdXAtWC1ZIHdoZXJlIFggaXMgbW9ja3VwIGNoaXAncyBJRFxcbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvZ3Bpby9ncGlvLW1vY2t1cC5yc3QtNDUtICAgICAgICBhbmQgWSBpcyB0aGUgbGluZSBvZmZzZXQuXFxuLS1cXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2dwaW8vZ3Bpby1tb2NrdXAucnN0PTQ3PU1hbmlwdWxhdGluZyBzaW11bGF0ZWQgbGluZXNcXG4tLVxcbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvZ3Bpby9ncGlvLW1vY2t1cC5yc3QtNDktXFxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9ncGlvL2dwaW8tbW9ja3VwLnJzdDo1MDpFYWNoIG1vY2t1cCBjaGlwIGNyZWF0ZXMgaXRzIG93biBzdWJkaXJlY3RvcnkgaW4gL3N5cy9rZXJuZWwvZGVidWcvZ3Bpby1tb2NrdXAvLlxcbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvZ3Bpby9ncGlvLW1vY2t1cC5yc3QtNTEtVGhlIGRpcmVjdG9yeSBpcyBuYW1lZCBhZnRlciB0aGUgY2hpcCdzIGxhYmVsLiBBIHN5bWxpbmsgaXMgYWxzbyBjcmVhdGVkLCBuYW1lZFxcbi0tXFxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9ncGlvL29ic29sZXRlLnJzdD00PU9ic29sZXRlIEdQSU8gQVBJc1xcbi0tXFxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9ncGlvL29ic29sZXRlLnJzdC0xMS0gICAgU3lzZnMgSW50ZXJmYWNlIFxcdTAwM2MuLi8uLi91c2Vyc3BhY2UtYXBpL2dwaW8vc3lzZnNcXHUwMDNlXFxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9ncGlvL29ic29sZXRlLnJzdDoxMjogICAgTW9ja3VwIFRlc3RpbmcgTW9kdWxlIFxcdTAwM2NncGlvLW1vY2t1cFxcdTAwM2VcXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2dwaW8vb2Jzb2xldGUucnN0LTEzLVxcbi0tXFxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9rZXJuZWwtcGFyYW1ldGVycy50eHQ9OTU9S2VybmVsIHBhcmFtZXRlcnNcXG4tLVxcbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUva2VybmVsLXBhcmFtZXRlcnMudHh0LTE4NzctXFxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9rZXJuZWwtcGFyYW1ldGVycy50eHQ6MTg3ODpcXHRncGlvLW1vY2t1cC5ncGlvX21vY2t1cF9yYW5nZXNcXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dC0xODc5LVxcdFxcdFxcdFtIV10gU2V0cyB0aGUgcmFuZ2VzIG9mIGdwaW9jaGlwIG9mIGZvciB0aGlzIGRldmljZS5cXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dC0xODgwLVxcdFxcdFxcdEZvcm1hdDogXFx1MDAzY3N0YXJ0MVxcdTAwM2UsXFx1MDAzY2VuZDFcXHUwMDNlLFxcdTAwM2NzdGFydDJcXHUwMDNlLFxcdTAwM2NlbmQyXFx1MDAzZS4uLlxcbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUva2VybmVsLXBhcmFtZXRlcnMudHh0OjE4ODE6XFx0Z3Bpby1tb2NrdXAuZ3Bpb19tb2NrdXBfbmFtZWRfbGluZXNcXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dC0xODgyLVxcdFxcdFxcdFtIV10gTGV0IHRoZSBkcml2ZXIga25vdyBHUElPIGxpbmVzIHNob3VsZCBiZSBuYW1lZC5cXG4tLVxcbkRvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9pbmNvbXBsZXRlLWRldmljZXMueWFtbD0yNj1wcm9wZXJ0aWVzOlxcbi0tXFxuRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL2luY29tcGxldGUtZGV2aWNlcy55YW1sLTI0Mi0gICAgICAgICAgLSBjb21wYXQzXFxuRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL2luY29tcGxldGUtZGV2aWNlcy55YW1sOjI0MzogICAgICAgICAgLSBncGlvLW1vY2t1cFxcbkRvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9pbmNvbXBsZXRlLWRldmljZXMueWFtbC0yNDQtICAgICAgICAgIC0gZ3Bpby1zaW11bGF0b3JcXG4tLVxcbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9kc2EvZHNhLnJzdD0xNjE9SXQgaXMgZGVzaXJhYmxlIHRoYXQgYWxsIHRhZ2dpbmcgcHJvdG9jb2xzIGFyZSB0ZXN0YWJsZSB3aXRoIHRoZSBgYGRzYV9sb29wYGBcXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZHNhL2RzYS5yc3Q6MTYyOm1vY2t1cCBkcml2ZXIsIHdoaWNoIGNhbiBiZSBhdHRhY2hlZCB0byBhbnkgbmV0d29yayBpbnRlcmZhY2UuIFRoZSBnb2FsIGlzIHRoYXRcXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZHNhL2RzYS5yc3QtMTYzLWFueSBuZXR3b3JrIGludGVyZmFjZSBzaG91bGQgYmUgY2FwYWJsZSBvZiB0cmFuc21pdHRpbmcgdGhlIHNhbWUgcGFja2V0IGluIHRoZVxcbi0tXFxuTUFJTlRBSU5FUlM9MTExNTI9UzpcXHRNYWludGFpbmVkXFxuTUFJTlRBSU5FUlM6MTExNTM6RjpcXHRkcml2ZXJzL2dwaW8vZ3Bpby1tb2NrdXAuY1xcbk1BSU5UQUlORVJTLTExMTU0LUY6XFx0dG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZ3Bpby9cXG4tLVxcbmRyaXZlcnMvZ3Bpby9LY29uZmlnPTIwNjQ9Y29uZmlnIEdQSU9fTU9DS1VQXFxuLS1cXG5kcml2ZXJzL2dwaW8vS2NvbmZpZy0yMDcyLVxcdCAgVXNlciBjb3VsZCB1c2UgaXQgdGhyb3VnaCB0aGUgc2NyaXB0IGluXFxuZHJpdmVycy9ncGlvL0tjb25maWc6MjA3MzpcXHQgIHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2dwaW8vZ3Bpby1tb2NrdXAuc2guIFJlZmVyZW5jZSB0aGUgdXNhZ2UgaW5cXG5kcml2ZXJzL2dwaW8vS2NvbmZpZy0yMDc0LVxcdCAgaXQuXFxuLS1cXG5kcml2ZXJzL2dwaW8vTWFrZWZpbGU9MTI0PW9iai0kKENPTkZJR19HUElPX01NX0xBTlRJUSlcXHRcXHQrPSBncGlvLW1tLWxhbnRpcS5vXFxuZHJpdmVycy9ncGlvL01ha2VmaWxlOjEyNTpvYmotJChDT05GSUdfR1BJT19NT0NLVVApXFx0XFx0Kz0gZ3Bpby1tb2NrdXAub1xcbmRyaXZlcnMvZ3Bpby9NYWtlZmlsZS0xMjYtb2JqLSQoQ09ORklHX0dQSU9fTU9YVEVUKVxcdFxcdCs9IGdwaW8tbW94dGV0Lm9cXG4tLVxcbmRyaXZlcnMvZ3Bpby9ncGlvLW1vY2t1cC5jLTQ2LSAqL1xcbmRyaXZlcnMvZ3Bpby9ncGlvLW1vY2t1cC5jOjQ3OnN0cnVjdCBncGlvX21vY2t1cF9saW5lX3N0YXR1cyB7XFxuZHJpdmVycy9ncGlvL2dwaW8tbW9ja3VwLmMtNDgtXFx0aW50IGRpcjtcXG4tLVxcbmRyaXZlcnMvZ3Bpby9ncGlvLW1vY2t1cC5jLTUzLVxcbmRyaXZlcnMvZ3Bpby9ncGlvLW1vY2t1cC5jOjU0OnN0cnVjdCBncGlvX21vY2t1cF9jaGlwIHtcXG5kcml2ZXJzL2dwaW8vZ3Bpby1tb2NrdXAuYy01NS1cXHRzdHJ1Y3QgZ3Bpb19jaGlwIGdjO1xcbmRyaXZlcnMvZ3Bpby9ncGlvLW1vY2t1cC5jOjU2OlxcdHN0cnVjdCBncGlvX21vY2t1cF9saW5lX3N0YXR1cyAqbGluZXM7XFxuZHJpdmVycy9ncGlvL2dwaW8tbW9ja3VwLmMtNTctXFx0c3RydWN0IGlycV9kb21haW4gKmlycV9zaW1fZG9tYWluO1xcbi0tXFxuZHJpdmVycy9ncGlvL2dwaW8tbW9ja3VwLmMtNjEtXFxuZHJpdmVycy9ncGlvL2dwaW8tbW9ja3VwLmM6NjI6c3RydWN0IGdwaW9fbW9ja3VwX2RiZ2ZzX3ByaXZhdGUge1xcbmRyaXZlcnMvZ3Bpby9ncGlvLW1vY2t1cC5jOjYzOlxcdHN0cnVjdCBncGlvX21vY2t1cF9jaGlwICpjaGlwO1xcbmRyaXZlcnMvZ3Bpby9ncGlvLW1vY2t1cC5jLTY0LVxcdHVuc2lnbmVkIGludCBvZmZzZXQ7XFxuLS1cXG5kcml2ZXJzL2dwaW8vZ3Bpby1tb2NrdXAuYy02Ni1cXG5kcml2ZXJzL2dwaW8vZ3Bpby1tb2NrdXAuYzo2NzpzdGF0aWMgaW50IGdwaW9fbW9ja3VwX3Jhbmdlc1tHUElPX01PQ0tVUF9NQVhfUkFOR0VTXTtcXG5kcml2ZXJzL2dwaW8vZ3Bpby1tb2NrdXAuYzo2ODpzdGF0aWMgaW50IGdwaW9fbW9ja3VwX251bV9yYW5nZXM7XFxuZHJpdmVycy9ncGlvL2dwaW8tbW9ja3VwLmM6Njk6bW9kdWxlX3BhcmFtX2FycmF5KGdwaW9fbW9ja3VwX3JhbmdlcywgaW50LCBcXHUwMDI2Z3Bpb19tb2NrdXBfbnVtX3JhbmdlcywgMDQwMCk7XFxuZHJpdmVycy9ncGlvL2dwaW8tbW9ja3VwLmMtNzAtXFxuZHJpdmVycy9ncGlvL2dwaW8tbW9ja3VwLmM6NzE6c3RhdGljIGJvb2wgZ3Bpb19tb2NrdXBfbmFtZWRfbGluZXM7XFxuZHJpdmVycy9ncGlvL2dwaW8tbW9ja3VwLmM6NzI6bW9kdWxlX3BhcmFtX25hbWVkKGdwaW9fbW9ja3VwX25hbWVkX2xpbmVzLFxcbmRyaXZlcnMvZ3Bpby9ncGlvLW1vY2t1cC5jOjczOlxcdFxcdCAgIGdwaW9fbW9ja3VwX25hbWVkX2xpbmVzLCBib29sLCAwNDAwKTtcXG5kcml2ZXJzL2dwaW8vZ3Bpby1tb2NrdXAuYy03NC1cXG5kcml2ZXJzL2dwaW8vZ3Bpby1tb2NrdXAuYzo3NTpzdGF0aWMgc3RydWN0IGRlbnRyeSAqZ3Bpb19tb2NrdXBfZGJnX2RpcjtcXG5kcml2ZXJzL2dwaW8vZ3Bpby1tb2NrdXAuYy03Ni1cXG5kcml2ZXJzL2dwaW8vZ3Bpby1tb2NrdXAuYzo3NzpzdGF0aWMgaW50IGdwaW9fbW9ja3VwX3JhbmdlX2Jhc2UodW5zaWduZWQgaW50IGluZGV4KVxcbmRyaXZlcnMvZ3Bpby9ncGlvLW1vY2t1cC5jLTc4LXtcXG5kcml2ZXJzL2dwaW8vZ3Bpby1tb2NrdXAuYzo3OTpcXHRyZXR1cm4gZ3Bpb19tb2NrdXBfcmFuZ2VzW2luZGV4ICogMl07XFxuZHJpdmVycy9ncGlvL2dwaW8tbW9ja3VwLmMtODAtfVxcbmRyaXZlcnMvZ3Bpby9ncGlvLW1vY2t1cC5jLTgxLVxcbmRyaXZlcnMvZ3Bpby9ncGlvLW1vY2t1cC5jOjgyOnN0YXRpYyBpbnQgZ3Bpb19tb2NrdXBfcmFuZ2VfbmdwaW8odW5zaWduZWQgaW50IGluZGV4KVxcbmRyaXZlcnMvZ3Bpby9ncGlvLW1vY2t1cC5jLTgzLXtcXG5kcml2ZXJzL2dwaW8vZ3Bpby1tb2NrdXAuYzo4NDpcXHRyZXR1cm4gZ3Bpb19tb2NrdXBfcmFuZ2VzW2luZGV4ICogMiArIDFdO1xcbmRyaXZlcnMvZ3Bpby9ncGlvLW1vY2t1cC5jLTg1LX1cXG5kcml2ZXJzL2dwaW8vZ3Bpby1tb2NrdXAuYy04Ni1cXG5kcml2ZXJzL2dwaW8vZ3Bpby1tb2NrdXAuYzo4NzpzdGF0aWMgaW50IF9fZ3Bpb19tb2NrdXBfZ2V0KHN0cnVjdCBncGlvX21vY2t1cF9jaGlwICpjaGlwLFxcbmRyaXZlcnMvZ3Bpby9ncGlvLW1vY2t1cC5jLTg4LVxcdFxcdFxcdCAgICAgdW5zaWduZWQgaW50IG9mZnNldClcXG4tLVxcbmRyaXZlcnMvZ3Bpby9ncGlvLW1vY2t1cC5jLTkyLVxcbmRyaXZlcnMvZ3Bpby9ncGlvLW1vY2t1cC5jOjkzOnN0YXRpYyBpbnQgZ3Bpb19tb2NrdXBfZ2V0KHN0cnVjdCBncGlvX2NoaXAgKmdjLCB1bnNpZ25lZCBpbnQgb2Zmc2V0KVxcbmRyaXZlcnMvZ3Bpby9ncGlvLW1vY2t1cC5jLTk0LXtcXG5kcml2ZXJzL2dwaW8vZ3Bpby1tb2NrdXAuYzo5NTpcXHRzdHJ1Y3QgZ3Bpb19tb2NrdXBfY2hpcCAqY2hpcCA9IGdwaW9jaGlwX2dldF9kYXRhKGdjKTtcXG5kcml2ZXJzL2dwaW8vZ3Bpby1tb2NrdXAuYy05Ni1cXHRpbnQgdmFsO1xcbi0tXFxuZHJpdmVycy9ncGlvL2dwaW8tbW9ja3VwLmMtOTgtXFx0c2NvcGVkX2d1YXJkKG11dGV4LCBcXHUwMDI2Y2hpcC1cXHUwMDNlbG9jaylcXG5kcml2ZXJzL2dwaW8vZ3Bpby1tb2NrdXAuYzo5OTpcXHRcXHR2YWwgPSBfX2dwaW9fbW9ja3VwX2dldChjaGlwLCBvZmZzZXQpO1xcbmRyaXZlcnMvZ3Bpby9ncGlvLW1vY2t1cC5jLTEwMC1cXG4tLVxcbmRyaXZlcnMvZ3Bpby9ncGlvLW1vY2t1cC5jLTEwMy1cXG5kcml2ZXJzL2dwaW8vZ3Bpby1tb2NrdXAuYzoxMDQ6c3RhdGljIGludCBncGlvX21vY2t1cF9nZXRfbXVsdGlwbGUoc3RydWN0IGdwaW9fY2hpcCAqZ2MsXFxuZHJpdmVycy9ncGlvL2dwaW8tbW9ja3VwLmMtMTA1LVxcdFxcdFxcdFxcdCAgICB1bnNpZ25lZCBsb25nICptYXNrLCB1bnNpZ25lZCBsb25nICpiaXRzKVxcbmRyaXZlcnMvZ3Bpby9ncGlvLW1vY2t1cC5jLTEwNi17XFxuZHJpdmVycy9ncGlvL2dwaW8tbW9ja3VwLmM6MTA3OlxcdHN0cnVjdCBncGlvX21vY2t1cF9jaGlwICpjaGlwID0gZ3Bpb2NoaXBfZ2V0X2RhdGEoZ2MpO1xcbmRyaXZlcnMvZ3Bpby9ncGlvLW1vY2t1cC5jLTEwOC1cXHR1bnNpZ25lZCBpbnQgYml0LCB2YWw7XFxuLS1cXG5kcml2ZXJzL2dwaW8vZ3Bpby1tb2NrdXAuYy0xMTEtXFx0XFx0Zm9yX2VhY2hfc2V0X2JpdChiaXQsIG1hc2ssIGdjLVxcdTAwM2VuZ3Bpbykge1xcbmRyaXZlcnMvZ3Bpby9ncGlvLW1vY2t1cC5jOjExMjpcXHRcXHRcXHR2YWwgPSBfX2dwaW9fbW9ja3VwX2dldChjaGlwLCBiaXQpO1xcbmRyaXZlcnMvZ3Bpby9ncGlvLW1vY2t1cC5jLTExMy1cXHRcXHRcXHRfX2Fzc2lnbl9iaXQoYml0LCBiaXRzLCB2YWwpO1xcbi0tXFxuZHJpdmVycy9ncGlvL2dwaW8tbW9ja3VwLmMtMTE5LVxcbmRyaXZlcnMvZ3Bpby9ncGlvLW1vY2t1cC5jOjEyMDpzdGF0aWMgdm9pZCBfX2dwaW9fbW9ja3VwX3NldChzdHJ1Y3QgZ3Bpb19tb2NrdXBfY2hpcCAqY2hpcCxcXG5kcml2ZXJzL2dwaW8vZ3Bpby1tb2NrdXAuYy0xMjEtXFx0XFx0XFx0ICAgICAgdW5zaWduZWQgaW50IG9mZnNldCwgaW50IHZhbHVlKVxcbi0tXFxuZHJpdmVycy9ncGlvL2dwaW8tbW9ja3VwLmMtMTI1LVxcbmRyaXZlcnMvZ3Bpby9ncGlvLW1vY2t1cC5jOjEyNjpzdGF0aWMgaW50IGdwaW9fbW9ja3VwX3NldChzdHJ1Y3QgZ3Bpb19jaGlwICpnYyxcXG5kcml2ZXJzL2dwaW8vZ3Bpby1tb2NrdXAuYy0xMjctXFx0XFx0XFx0ICAgdW5zaWduZWQgaW50IG9mZnNldCwgaW50IHZhbHVlKVxcbmRyaXZlcnMvZ3Bpby9ncGlvLW1vY2t1cC5jLTEyOC17XFxuZHJpdmVycy9ncGlvL2dwaW8tbW9ja3VwLmM6MTI5OlxcdHN0cnVjdCBncGlvX21vY2t1cF9jaGlwICpjaGlwID0gZ3Bpb2NoaXBfZ2V0X2RhdGEoZ2MpO1xcbmRyaXZlcnMvZ3Bpby9ncGlvLW1vY2t1cC5jLTEzMC1cXG4tLVxcbmRyaXZlcnMvZ3Bpby9ncGlvLW1vY2t1cC5jLTEzMi1cXG5kcml2ZXJzL2dwaW8vZ3Bpby1tb2NrdXAuYzoxMzM6XFx0X19ncGlvX21vY2t1cF9zZXQoY2hpcCwgb2Zmc2V0LCB2YWx1ZSk7XFxuZHJpdmVycy9ncGlvL2dwaW8tbW9ja3VwLmMtMTM0LVxcbi0tXFxuZHJpdmVycy9ncGlvL2dwaW8tbW9ja3VwLmMtMTM3LVxcbmRyaXZlcnMvZ3Bpby9ncGlvLW1vY2t1cC5jOjEzODpzdGF0aWMgaW50IGdwaW9fbW9ja3VwX3NldF9tdWx0aXBsZShzdHJ1Y3QgZ3Bpb19jaGlwICpnYyxcXG5kcml2ZXJzL2dwaW8vZ3Bpby1tb2NrdXAuYy0xMzktXFx0XFx0XFx0XFx0ICAgIHVuc2lnbmVkIGxvbmcgKm1hc2ssIHVuc2lnbmVkIGxvbmcgKmJpdHMpXFxuZHJpdmVycy9ncGlvL2dwaW8tbW9ja3VwLmMtMTQwLXtcXG5kcml2ZXJzL2dwaW8vZ3Bpby1tb2NrdXAuYzoxNDE6XFx0c3RydWN0IGdwaW9fbW9ja3VwX2NoaXAgKmNoaXAgPSBncGlvY2hpcF9nZXRfZGF0YShnYyk7XFxuZHJpdmVycy9ncGlvL2dwaW8tbW9ja3VwLmMtMTQyLVxcdHVuc2lnbmVkIGludCBiaXQ7XFxuLS1cXG5kcml2ZXJzL2dwaW8vZ3Bpby1tb2NrdXAuYy0xNDYtXFx0Zm9yX2VhY2hfc2V0X2JpdChiaXQsIG1hc2ssIGdjLVxcdTAwM2VuZ3BpbylcXG5kcml2ZXJzL2dwaW8vZ3Bpby1tb2NrdXAuYzoxNDc6XFx0XFx0X19ncGlvX21vY2t1cF9zZXQoY2hpcCwgYml0LCB0ZXN0X2JpdChiaXQsIGJpdHMpKTtcXG5kcml2ZXJzL2dwaW8vZ3Bpby1tb2NrdXAuYy0xNDgtXFxuLS1cXG5kcml2ZXJzL2dwaW8vZ3Bpby1tb2NrdXAuYy0xNTEtXFxuZHJpdmVycy9ncGlvL2dwaW8tbW9ja3VwLmM6MTUyOnN0YXRpYyBpbnQgZ3Bpb19tb2NrdXBfYXBwbHlfcHVsbChzdHJ1Y3QgZ3Bpb19tb2NrdXBfY2hpcCAqY2hpcCxcXG5kcml2ZXJzL2dwaW8vZ3Bpby1tb2NrdXAuYy0xNTMtXFx0XFx0XFx0XFx0ICB1bnNpZ25lZCBpbnQgb2Zmc2V0LCBpbnQgdmFsdWUpXFxuZHJpdmVycy9ncGlvL2dwaW8tbW9ja3VwLmMtMTU0LXtcXG5kcml2ZXJzL2dwaW8vZ3Bpby1tb2NrdXAuYzoxNTU6XFx0c3RydWN0IGdwaW9fbW9ja3VwX2xpbmVfc3RhdHVzICpsaW5lID0gXFx1MDAyNmNoaXAtXFx1MDAzZWxpbmVzW29mZnNldF07XFxuZHJpdmVycy9ncGlvL2dwaW8tbW9ja3VwLmMtMTU2LVxcdGludCBjdXJyLCBpcnEsIGlycV90eXBlLCByZXQgPSAwO1xcbi0tXFxuZHJpdmVycy9ncGlvL2dwaW8tbW9ja3VwLmMtMTYwLVxcdGlmIChsaW5lLVxcdTAwM2VyZXF1ZXN0ZWQgXFx1MDAyNlxcdTAwMjYgbGluZS1cXHUwMDNlZGlyID09IEdQSU9fTElORV9ESVJFQ1RJT05fSU4pIHtcXG5kcml2ZXJzL2dwaW8vZ3Bpby1tb2NrdXAuYzoxNjE6XFx0XFx0Y3VyciA9IF9fZ3Bpb19tb2NrdXBfZ2V0KGNoaXAsIG9mZnNldCk7XFxuZHJpdmVycy9ncGlvL2dwaW8tbW9ja3VwLmMtMTYyLVxcdFxcdGlmIChjdXJyID09IHZhbHVlKVxcbi0tXFxuZHJpdmVycy9ncGlvL2dwaW8tbW9ja3VwLmMtMTg4LVxcdGlmICghbGluZS1cXHUwMDNlcmVxdWVzdGVkIHx8IGxpbmUtXFx1MDAzZWRpciA9PSBHUElPX0xJTkVfRElSRUNUSU9OX0lOKVxcbmRyaXZlcnMvZ3Bpby9ncGlvLW1vY2t1cC5jOjE4OTpcXHRcXHRfX2dwaW9fbW9ja3VwX3NldChjaGlwLCBvZmZzZXQsIHZhbHVlKTtcXG5kcml2ZXJzL2dwaW8vZ3Bpby1tb2NrdXAuYy0xOTAtXFxuLS1cXG5kcml2ZXJzL2dwaW8vZ3Bpby1tb2NrdXAuYy0xOTUtXFxuZHJpdmVycy9ncGlvL2dwaW8tbW9ja3VwLmM6MTk2OnN0YXRpYyBpbnQgZ3Bpb19tb2NrdXBfc2V0X2NvbmZpZyhzdHJ1Y3QgZ3Bpb19jaGlwICpnYyxcXG5kcml2ZXJzL2dwaW8vZ3Bpby1tb2NrdXAuYy0xOTctXFx0XFx0XFx0XFx0ICB1bnNpZ25lZCBpbnQgb2Zmc2V0LCB1bnNpZ25lZCBsb25nIGNvbmZpZylcXG5kcml2ZXJzL2dwaW8vZ3Bpby1tb2NrdXAuYy0xOTgte1xcbmRyaXZlcnMvZ3Bpby9ncGlvLW1vY2t1cC5jOjE5OTpcXHRzdHJ1Y3QgZ3Bpb19tb2NrdXBfY2hpcCAqY2hpcCA9IGdwaW9jaGlwX2dldF9kYXRhKGdjKTtcXG5kcml2ZXJzL2dwaW8vZ3Bpby1tb2NrdXAuYy0yMDAtXFxuLS1cXG5kcml2ZXJzL2dwaW8vZ3Bpby1tb2NrdXAuYy0yMDItXFx0Y2FzZSBQSU5fQ09ORklHX0JJQVNfUFVMTF9VUDpcXG5kcml2ZXJzL2dwaW8vZ3Bpby1tb2NrdXAuYzoyMDM6XFx0XFx0cmV0dXJuIGdwaW9fbW9ja3VwX2FwcGx5X3B1bGwoY2hpcCwgb2Zmc2V0LCAxKTtcXG5kcml2ZXJzL2dwaW8vZ3Bpby1tb2NrdXAuYy0yMDQtXFx0Y2FzZSBQSU5fQ09ORklHX0JJQVNfUFVMTF9ET1dOOlxcbmRyaXZlcnMvZ3Bpby9ncGlvLW1vY2t1cC5jOjIwNTpcXHRcXHRyZXR1cm4gZ3Bpb19tb2NrdXBfYXBwbHlfcHVsbChjaGlwLCBvZmZzZXQsIDApO1xcbmRyaXZlcnMvZ3Bpby9ncGlvLW1vY2t1cC5jLTIwNi1cXHRkZWZhdWx0Olxcbi0tXFxuZHJpdmVycy9ncGlvL2dwaW8tbW9ja3VwLmMtMjExLVxcbmRyaXZlcnMvZ3Bpby9ncGlvLW1vY2t1cC5jOjIxMjpzdGF0aWMgaW50IGdwaW9fbW9ja3VwX2Rpcm91dChzdHJ1Y3QgZ3Bpb19jaGlwICpnYyxcXG5kcml2ZXJzL2dwaW8vZ3Bpby1tb2NrdXAuYy0yMTMtXFx0XFx0XFx0ICAgICAgdW5zaWduZWQgaW50IG9mZnNldCwgaW50IHZhbHVlKVxcbmRyaXZlcnMvZ3Bpby9ncGlvLW1vY2t1cC5jLTIxNC17XFxuZHJpdmVycy9ncGlvL2dwaW8tbW9ja3VwLmM6MjE1OlxcdHN0cnVjdCBncGlvX21vY2t1cF9jaGlwICpjaGlwID0gZ3Bpb2NoaXBfZ2V0X2RhdGEoZ2MpO1xcbmRyaXZlcnMvZ3Bpby9ncGlvLW1vY2t1cC5jLTIxNi1cXG4tLVxcbmRyaXZlcnMvZ3Bpby9ncGlvLW1vY2t1cC5jLTIxOC1cXHRcXHRjaGlwLVxcdTAwM2VsaW5lc1tvZmZzZXRdLmRpciA9IEdQSU9fTElORV9ESVJFQ1RJT05fT1VUO1xcbmRyaXZlcnMvZ3Bpby9ncGlvLW1vY2t1cC5jOjIxOTpcXHRcXHRfX2dwaW9fbW9ja3VwX3NldChjaGlwLCBvZmZzZXQsIHZhbHVlKTtcXG5kcml2ZXJzL2dwaW8vZ3Bpby1tb2NrdXAuYy0yMjAtXFx0fVxcbi0tXFxuZHJpdmVycy9ncGlvL2dwaW8tbW9ja3VwLmMtMjI0LVxcbmRyaXZlcnMvZ3Bpby9ncGlvLW1vY2t1cC5jOjIyNTpzdGF0aWMgaW50IGdwaW9fbW9ja3VwX2RpcmluKHN0cnVjdCBncGlvX2NoaXAgKmdjLCB1bnNpZ25lZCBpbnQgb2Zmc2V0KVxcbmRyaXZlcnMvZ3Bpby9ncGlvLW1vY2t1cC5jLTIyNi17XFxuZHJpdmVycy9ncGlvL2dwaW8tbW9ja3VwLmM6MjI3OlxcdHN0cnVjdCBncGlvX21vY2t1cF9jaGlwICpjaGlwID0gZ3Bpb2NoaXBfZ2V0X2RhdGEoZ2MpO1xcbmRyaXZlcnMvZ3Bpby9ncGlvLW1vY2t1cC5jLTIyOC1cXG4tLVxcbmRyaXZlcnMvZ3Bpby9ncGlvLW1vY2t1cC5jLTIzNC1cXG5kcml2ZXJzL2dwaW8vZ3Bpby1tb2NrdXAuYzoyMzU6c3RhdGljIGludCBncGlvX21vY2t1cF9nZXRfZGlyZWN0aW9uKHN0cnVjdCBncGlvX2NoaXAgKmdjLCB1bnNpZ25lZCBpbnQgb2Zmc2V0KVxcbmRyaXZlcnMvZ3Bpby9ncGlvLW1vY2t1cC5jLTIzNi17XFxuZHJpdmVycy9ncGlvL2dwaW8tbW9ja3VwLmM6MjM3OlxcdHN0cnVjdCBncGlvX21vY2t1cF9jaGlwICpjaGlwID0gZ3Bpb2NoaXBfZ2V0X2RhdGEoZ2MpO1xcbmRyaXZlcnMvZ3Bpby9ncGlvLW1vY2t1cC5jLTIzOC1cXHRpbnQgZGlyZWN0aW9uO1xcbi0tXFxuZHJpdmVycy9ncGlvL2dwaW8tbW9ja3VwLmMtMjQ1LVxcbmRyaXZlcnMvZ3Bpby9ncGlvLW1vY2t1cC5jOjI0NjpzdGF0aWMgaW50IGdwaW9fbW9ja3VwX3RvX2lycShzdHJ1Y3QgZ3Bpb19jaGlwICpnYywgdW5zaWduZWQgaW50IG9mZnNldClcXG5kcml2ZXJzL2dwaW8vZ3Bpby1tb2NrdXAuYy0yNDcte1xcbmRyaXZlcnMvZ3Bpby9ncGlvLW1vY2t1cC5jOjI0ODpcXHRzdHJ1Y3QgZ3Bpb19tb2NrdXBfY2hpcCAqY2hpcCA9IGdwaW9jaGlwX2dldF9kYXRhKGdjKTtcXG5kcml2ZXJzL2dwaW8vZ3Bpby1tb2NrdXAuYy0yNDktXFxuLS1cXG5kcml2ZXJzL2dwaW8vZ3Bpby1tb2NrdXAuYy0yNTItXFxuZHJpdmVycy9ncGlvL2dwaW8tbW9ja3VwLmM6MjUzOnN0YXRpYyBpbnQgZ3Bpb19tb2NrdXBfcmVxdWVzdChzdHJ1Y3QgZ3Bpb19jaGlwICpnYywgdW5zaWduZWQgaW50IG9mZnNldClcXG5kcml2ZXJzL2dwaW8vZ3Bpby1tb2NrdXAuYy0yNTQte1xcbmRyaXZlcnMvZ3Bpby9ncGlvLW1vY2t1cC5jOjI1NTpcXHRzdHJ1Y3QgZ3Bpb19tb2NrdXBfY2hpcCAqY2hpcCA9IGdwaW9jaGlwX2dldF9kYXRhKGdjKTtcXG5kcml2ZXJzL2dwaW8vZ3Bpby1tb2NrdXAuYy0yNTYtXFxuLS1cXG5kcml2ZXJzL2dwaW8vZ3Bpby1tb2NrdXAuYy0yNjItXFxuZHJpdmVycy9ncGlvL2dwaW8tbW9ja3VwLmM6MjYzOnN0YXRpYyB2b2lkIGdwaW9fbW9ja3VwX2ZyZWUoc3RydWN0IGdwaW9fY2hpcCAqZ2MsIHVuc2lnbmVkIGludCBvZmZzZXQpXFxuZHJpdmVycy9ncGlvL2dwaW8tbW9ja3VwLmMtMjY0LXtcXG5kcml2ZXJzL2dwaW8vZ3Bpby1tb2NrdXAuYzoyNjU6XFx0c3RydWN0IGdwaW9fbW9ja3VwX2NoaXAgKmNoaXAgPSBncGlvY2hpcF9nZXRfZGF0YShnYyk7XFxuZHJpdmVycy9ncGlvL2dwaW8tbW9ja3VwLmMtMjY2LVxcbi0tXFxuZHJpdmVycy9ncGlvL2dwaW8tbW9ja3VwLmMtMjY5LVxcdGNoaXAtXFx1MDAzZWxpbmVzW29mZnNldF0ucmVxdWVzdGVkID0gZmFsc2U7XFxuZHJpdmVycy9ncGlvL2dwaW8tbW9ja3VwLmM6MjcwOlxcdF9fZ3Bpb19tb2NrdXBfc2V0KGNoaXAsIG9mZnNldCwgY2hpcC1cXHUwMDNlbGluZXNbb2Zmc2V0XS5wdWxsKTtcXG5kcml2ZXJzL2dwaW8vZ3Bpby1tb2NrdXAuYy0yNzEtfVxcbmRyaXZlcnMvZ3Bpby9ncGlvLW1vY2t1cC5jLTI3Mi1cXG5kcml2ZXJzL2dwaW8vZ3Bpby1tb2NrdXAuYzoyNzM6c3RhdGljIHNzaXplX3QgZ3Bpb19tb2NrdXBfZGVidWdmc19yZWFkKHN0cnVjdCBmaWxlICpmaWxlLFxcbmRyaXZlcnMvZ3Bpby9ncGlvLW1vY2t1cC5jLTI3NC1cXHRcXHRcXHRcXHRcXHRjaGFyIF9fdXNlciAqdXNyX2J1ZixcXG4tLVxcbmRyaXZlcnMvZ3Bpby9ncGlvLW1vY2t1cC5jLTI3Ni17XFxuZHJpdmVycy9ncGlvL2dwaW8tbW9ja3VwLmM6Mjc3OlxcdHN0cnVjdCBncGlvX21vY2t1cF9kYmdmc19wcml2YXRlICpwcml2O1xcbmRyaXZlcnMvZ3Bpby9ncGlvLW1vY2t1cC5jOjI3ODpcXHRzdHJ1Y3QgZ3Bpb19tb2NrdXBfY2hpcCAqY2hpcDtcXG5kcml2ZXJzL2dwaW8vZ3Bpby1tb2NrdXAuYy0yNzktXFx0c3RydWN0IHNlcV9maWxlICpzZmlsZTtcXG4tLVxcbmRyaXZlcnMvZ3Bpby9ncGlvLW1vY2t1cC5jLTI5MS1cXG5kcml2ZXJzL2dwaW8vZ3Bpby1tb2NrdXAuYzoyOTI6XFx0dmFsID0gZ3Bpb19tb2NrdXBfZ2V0KGdjLCBwcml2LVxcdTAwM2VvZmZzZXQpO1xcbmRyaXZlcnMvZ3Bpby9ncGlvLW1vY2t1cC5jLTI5My1cXHRjbnQgPSBzbnByaW50ZihidWYsIHNpemVvZihidWYpLCBcXFwiJWRcXFxcblxcXCIsIHZhbCk7XFxuLS1cXG5kcml2ZXJzL2dwaW8vZ3Bpby1tb2NrdXAuYy0yOTctXFxuZHJpdmVycy9ncGlvL2dwaW8tbW9ja3VwLmM6Mjk4OnN0YXRpYyBzc2l6ZV90IGdwaW9fbW9ja3VwX2RlYnVnZnNfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsXFxuZHJpdmVycy9ncGlvL2dwaW8tbW9ja3VwLmMtMjk5LVxcdFxcdFxcdFxcdFxcdCBjb25zdCBjaGFyIF9fdXNlciAqdXNyX2J1ZixcXG4tLVxcbmRyaXZlcnMvZ3Bpby9ncGlvLW1vY2t1cC5jLTMwMS17XFxuZHJpdmVycy9ncGlvL2dwaW8tbW9ja3VwLmM6MzAyOlxcdHN0cnVjdCBncGlvX21vY2t1cF9kYmdmc19wcml2YXRlICpwcml2O1xcbmRyaXZlcnMvZ3Bpby9ncGlvLW1vY2t1cC5jLTMwMy1cXHRpbnQgcnYsIHZhbDtcXG4tLVxcbmRyaXZlcnMvZ3Bpby9ncGlvLW1vY2t1cC5jLTMxNi1cXHRwcml2ID0gc2ZpbGUtXFx1MDAzZXByaXZhdGU7XFxuZHJpdmVycy9ncGlvL2dwaW8tbW9ja3VwLmM6MzE3OlxcdHJ2ID0gZ3Bpb19tb2NrdXBfYXBwbHlfcHVsbChwcml2LVxcdTAwM2VjaGlwLCBwcml2LVxcdTAwM2VvZmZzZXQsIHZhbCk7XFxuZHJpdmVycy9ncGlvL2dwaW8tbW9ja3VwLmMtMzE4LVxcdGlmIChydilcXG4tLVxcbmRyaXZlcnMvZ3Bpby9ncGlvLW1vY2t1cC5jLTMyMy1cXG5kcml2ZXJzL2dwaW8vZ3Bpby1tb2NrdXAuYzozMjQ6c3RhdGljIGludCBncGlvX21vY2t1cF9kZWJ1Z2ZzX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpXFxuZHJpdmVycy9ncGlvL2dwaW8tbW9ja3VwLmMtMzI1LXtcXG4tLVxcbmRyaXZlcnMvZ3Bpby9ncGlvLW1vY2t1cC5jLTMyOS0vKlxcbmRyaXZlcnMvZ3Bpby9ncGlvLW1vY2t1cC5jOjMzMDogKiBFYWNoIG1vY2t1cCBjaGlwIGlzIHJlcHJlc2VudGVkIGJ5IGEgZGlyZWN0b3J5IG5hbWVkIGFmdGVyIHRoZSBjaGlwJ3MgZGV2aWNlXFxuZHJpdmVycy9ncGlvL2dwaW8tbW9ja3VwLmM6MzMxOiAqIG5hbWUgdW5kZXIgL3N5cy9rZXJuZWwvZGVidWcvZ3Bpby1tb2NrdXAvLiBFYWNoIGxpbmUgaXMgcmVwcmVzZW50ZWQgYnlcXG5kcml2ZXJzL2dwaW8vZ3Bpby1tb2NrdXAuYy0zMzItICogYSBmaWxlIHVzaW5nIHRoZSBsaW5lJ3Mgb2Zmc2V0IGFzIHRoZSBuYW1lIHVuZGVyIHRoZSBjaGlwJ3MgZGlyZWN0b3J5Llxcbi0tXFxuZHJpdmVycy9ncGlvL2dwaW8tbW9ja3VwLmMtMzM0LSAqIFJlYWRpbmcgZnJvbSB0aGUgbGluZSdzIGZpbGUgeWllbGRzIHRoZSBjdXJyZW50ICp2YWx1ZSosIHdyaXRpbmcgdG8gdGhlXFxuZHJpdmVycy9ncGlvL2dwaW8tbW9ja3VwLmM6MzM1OiAqIGxpbmUncyBmaWxlIGNoYW5nZXMgdGhlIGN1cnJlbnQgKnB1bGwqLiBEZWZhdWx0IHB1bGwgZm9yIG1vY2t1cCBsaW5lcyBpc1xcbmRyaXZlcnMvZ3Bpby9ncGlvLW1vY2t1cC5jLTMzNi0gKiBkb3duLlxcbi0tXFxuZHJpdmVycy9ncGlvL2dwaW8tbW9ja3VwLmMtMzQ5LSAqL1xcbmRyaXZlcnMvZ3Bpby9ncGlvLW1vY2t1cC5jOjM1MDpzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBncGlvX21vY2t1cF9kZWJ1Z2ZzX29wcyA9IHtcXG5kcml2ZXJzL2dwaW8vZ3Bpby1tb2NrdXAuYy0zNTEtXFx0Lm93bmVyID0gVEhJU19NT0RVTEUsXFxuZHJpdmVycy9ncGlvL2dwaW8tbW9ja3VwLmM6MzUyOlxcdC5vcGVuID0gZ3Bpb19tb2NrdXBfZGVidWdmc19vcGVuLFxcbmRyaXZlcnMvZ3Bpby9ncGlvLW1vY2t1cC5jOjM1MzpcXHQucmVhZCA9IGdwaW9fbW9ja3VwX2RlYnVnZnNfcmVhZCxcXG5kcml2ZXJzL2dwaW8vZ3Bpby1tb2NrdXAuYzozNTQ6XFx0LndyaXRlID0gZ3Bpb19tb2NrdXBfZGVidWdmc193cml0ZSxcXG5kcml2ZXJzL2dwaW8vZ3Bpby1tb2NrdXAuYy0zNTUtXFx0LnJlbGVhc2UgPSBzaW5nbGVfcmVsZWFzZSxcXG4tLVxcbmRyaXZlcnMvZ3Bpby9ncGlvLW1vY2t1cC5jLTM1Ny1cXG5kcml2ZXJzL2dwaW8vZ3Bpby1tb2NrdXAuYzozNTg6c3RhdGljIHZvaWQgZ3Bpb19tb2NrdXBfZGVidWdmc19zZXR1cChzdHJ1Y3QgZGV2aWNlICpkZXYsXFxuZHJpdmVycy9ncGlvL2dwaW8tbW9ja3VwLmM6MzU5OlxcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCBncGlvX21vY2t1cF9jaGlwICpjaGlwKVxcbmRyaXZlcnMvZ3Bpby9ncGlvLW1vY2t1cC5jLTM2MC17XFxuZHJpdmVycy9ncGlvL2dwaW8tbW9ja3VwLmM6MzYxOlxcdHN0cnVjdCBncGlvX21vY2t1cF9kYmdmc19wcml2YXRlICpwcml2O1xcbmRyaXZlcnMvZ3Bpby9ncGlvLW1vY2t1cC5jLTM2Mi1cXHRzdHJ1Y3QgZ3Bpb19jaGlwICpnYztcXG4tLVxcbmRyaXZlcnMvZ3Bpby9ncGlvLW1vY2t1cC5jLTM3MC1cXHQgKiBUaGVyZSBjYW4gb25seSBiZSBhIHNpbmdsZSBHUElPIGRldmljZSBwZXIgcGxhdGZvcm0gZGV2aWNlIGluXFxuZHJpdmVycy9ncGlvL2dwaW8tbW9ja3VwLmM6MzcxOlxcdCAqIGdwaW8tbW9ja3VwIHNvIHVzaW5nIGRldmljZV9maW5kX2FueV9jaGlsZCgpIGlzIE9LLlxcbmRyaXZlcnMvZ3Bpby9ncGlvLW1vY2t1cC5jLTM3Mi1cXHQgKi9cXG4tLVxcbmRyaXZlcnMvZ3Bpby9ncGlvLW1vY2t1cC5jLTM3Ny1cXHRkZXZuYW1lID0gZGV2X25hbWUoY2hpbGQpO1xcbmRyaXZlcnMvZ3Bpby9ncGlvLW1vY2t1cC5jOjM3ODpcXHRjaGlwLVxcdTAwM2VkYmdfZGlyID0gZGVidWdmc19jcmVhdGVfZGlyKGRldm5hbWUsIGdwaW9fbW9ja3VwX2RiZ19kaXIpO1xcbmRyaXZlcnMvZ3Bpby9ncGlvLW1vY2t1cC5jLTM3OS1cXG4tLVxcbmRyaXZlcnMvZ3Bpby9ncGlvLW1vY2t1cC5jLTM5Mi1cXHRcXHRkZWJ1Z2ZzX2NyZWF0ZV9maWxlKG5hbWUsIDA2MDAsIGNoaXAtXFx1MDAzZWRiZ19kaXIsIHByaXYsXFxuZHJpdmVycy9ncGlvL2dwaW8tbW9ja3VwLmM6MzkzOlxcdFxcdFxcdFxcdCAgICBcXHUwMDI2Z3Bpb19tb2NrdXBfZGVidWdmc19vcHMpO1xcbmRyaXZlcnMvZ3Bpby9ncGlvLW1vY2t1cC5jLTM5NC1cXHR9XFxuLS1cXG5kcml2ZXJzL2dwaW8vZ3Bpby1tb2NrdXAuYy0zOTYtXFxuZHJpdmVycy9ncGlvL2dwaW8tbW9ja3VwLmM6Mzk3OnN0YXRpYyB2b2lkIGdwaW9fbW9ja3VwX2RlYnVnZnNfY2xlYW51cCh2b2lkICpkYXRhKVxcbmRyaXZlcnMvZ3Bpby9ncGlvLW1vY2t1cC5jLTM5OC17XFxuZHJpdmVycy9ncGlvL2dwaW8tbW9ja3VwLmM6Mzk5OlxcdHN0cnVjdCBncGlvX21vY2t1cF9jaGlwICpjaGlwID0gZGF0YTtcXG5kcml2ZXJzL2dwaW8vZ3Bpby1tb2NrdXAuYy00MDAtXFxuLS1cXG5kcml2ZXJzL2dwaW8vZ3Bpby1tb2NrdXAuYy00MDMtXFxuZHJpdmVycy9ncGlvL2dwaW8tbW9ja3VwLmM6NDA0OnN0YXRpYyB2b2lkIGdwaW9fbW9ja3VwX2Rpc3Bvc2VfbWFwcGluZ3Modm9pZCAqZGF0YSlcXG5kcml2ZXJzL2dwaW8vZ3Bpby1tb2NrdXAuYy00MDUte1xcbmRyaXZlcnMvZ3Bpby9ncGlvLW1vY2t1cC5jOjQwNjpcXHRzdHJ1Y3QgZ3Bpb19tb2NrdXBfY2hpcCAqY2hpcCA9IGRhdGE7XFxuZHJpdmVycy9ncGlvL2dwaW8tbW9ja3VwLmMtNDA3LVxcdHN0cnVjdCBncGlvX2NoaXAgKmdjID0gXFx1MDAyNmNoaXAtXFx1MDAzZWdjO1xcbi0tXFxuZHJpdmVycy9ncGlvL2dwaW8tbW9ja3VwLmMtNDE2LVxcbmRyaXZlcnMvZ3Bpby9ncGlvLW1vY2t1cC5jOjQxNzpzdGF0aWMgaW50IGdwaW9fbW9ja3VwX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXFxuZHJpdmVycy9ncGlvL2dwaW8tbW9ja3VwLmMtNDE4LXtcXG5kcml2ZXJzL2dwaW8vZ3Bpby1tb2NrdXAuYzo0MTk6XFx0c3RydWN0IGdwaW9fbW9ja3VwX2NoaXAgKmNoaXA7XFxuZHJpdmVycy9ncGlvL2dwaW8tbW9ja3VwLmMtNDIwLVxcdHN0cnVjdCBncGlvX2NoaXAgKmdjO1xcbi0tXFxuZHJpdmVycy9ncGlvL2dwaW8tbW9ja3VwLmMtNDUxLVxcdGdjLVxcdTAwM2VwYXJlbnQgPSBkZXY7XFxuZHJpdmVycy9ncGlvL2dwaW8tbW9ja3VwLmM6NDUyOlxcdGdjLVxcdTAwM2VnZXQgPSBncGlvX21vY2t1cF9nZXQ7XFxuZHJpdmVycy9ncGlvL2dwaW8tbW9ja3VwLmM6NDUzOlxcdGdjLVxcdTAwM2VzZXQgPSBncGlvX21vY2t1cF9zZXQ7XFxuZHJpdmVycy9ncGlvL2dwaW8tbW9ja3VwLmM6NDU0OlxcdGdjLVxcdTAwM2VnZXRfbXVsdGlwbGUgPSBncGlvX21vY2t1cF9nZXRfbXVsdGlwbGU7XFxuZHJpdmVycy9ncGlvL2dwaW8tbW9ja3VwLmM6NDU1OlxcdGdjLVxcdTAwM2VzZXRfbXVsdGlwbGUgPSBncGlvX21vY2t1cF9zZXRfbXVsdGlwbGU7XFxuZHJpdmVycy9ncGlvL2dwaW8tbW9ja3VwLmM6NDU2OlxcdGdjLVxcdTAwM2VkaXJlY3Rpb25fb3V0cHV0ID0gZ3Bpb19tb2NrdXBfZGlyb3V0O1xcbmRyaXZlcnMvZ3Bpby9ncGlvLW1vY2t1cC5jOjQ1NzpcXHRnYy1cXHUwMDNlZGlyZWN0aW9uX2lucHV0ID0gZ3Bpb19tb2NrdXBfZGlyaW47XFxuZHJpdmVycy9ncGlvL2dwaW8tbW9ja3VwLmM6NDU4OlxcdGdjLVxcdTAwM2VnZXRfZGlyZWN0aW9uID0gZ3Bpb19tb2NrdXBfZ2V0X2RpcmVjdGlvbjtcXG5kcml2ZXJzL2dwaW8vZ3Bpby1tb2NrdXAuYzo0NTk6XFx0Z2MtXFx1MDAzZXNldF9jb25maWcgPSBncGlvX21vY2t1cF9zZXRfY29uZmlnO1xcbmRyaXZlcnMvZ3Bpby9ncGlvLW1vY2t1cC5jOjQ2MDpcXHRnYy1cXHUwMDNldG9faXJxID0gZ3Bpb19tb2NrdXBfdG9faXJxO1xcbmRyaXZlcnMvZ3Bpby9ncGlvLW1vY2t1cC5jOjQ2MTpcXHRnYy1cXHUwMDNlcmVxdWVzdCA9IGdwaW9fbW9ja3VwX3JlcXVlc3Q7XFxuZHJpdmVycy9ncGlvL2dwaW8tbW9ja3VwLmM6NDYyOlxcdGdjLVxcdTAwM2VmcmVlID0gZ3Bpb19tb2NrdXBfZnJlZTtcXG5kcml2ZXJzL2dwaW8vZ3Bpby1tb2NrdXAuYy00NjMtXFxuLS1cXG5kcml2ZXJzL2dwaW8vZ3Bpby1tb2NrdXAuYy00NzYtXFxuZHJpdmVycy9ncGlvL2dwaW8tbW9ja3VwLmM6NDc3OlxcdHJ2ID0gZGV2bV9hZGRfYWN0aW9uX29yX3Jlc2V0KGRldiwgZ3Bpb19tb2NrdXBfZGlzcG9zZV9tYXBwaW5ncywgY2hpcCk7XFxuZHJpdmVycy9ncGlvL2dwaW8tbW9ja3VwLmMtNDc4LVxcdGlmIChydilcXG4tLVxcbmRyaXZlcnMvZ3Bpby9ncGlvLW1vY2t1cC5jLTQ4NC1cXG5kcml2ZXJzL2dwaW8vZ3Bpby1tb2NrdXAuYzo0ODU6XFx0Z3Bpb19tb2NrdXBfZGVidWdmc19zZXR1cChkZXYsIGNoaXApO1xcbmRyaXZlcnMvZ3Bpby9ncGlvLW1vY2t1cC5jLTQ4Ni1cXG5kcml2ZXJzL2dwaW8vZ3Bpby1tb2NrdXAuYzo0ODc6XFx0cmV0dXJuIGRldm1fYWRkX2FjdGlvbl9vcl9yZXNldChkZXYsIGdwaW9fbW9ja3VwX2RlYnVnZnNfY2xlYW51cCwgY2hpcCk7XFxuZHJpdmVycy9ncGlvL2dwaW8tbW9ja3VwLmMtNDg4LX1cXG5kcml2ZXJzL2dwaW8vZ3Bpby1tb2NrdXAuYy00ODktXFxuZHJpdmVycy9ncGlvL2dwaW8tbW9ja3VwLmM6NDkwOnN0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIGdwaW9fbW9ja3VwX29mX21hdGNoW10gPSB7XFxuZHJpdmVycy9ncGlvL2dwaW8tbW9ja3VwLmM6NDkxOlxcdHsgLmNvbXBhdGlibGUgPSBcXFwiZ3Bpby1tb2NrdXBcXFwiLCB9LFxcbmRyaXZlcnMvZ3Bpby9ncGlvLW1vY2t1cC5jLTQ5Mi1cXHR7fSxcXG5kcml2ZXJzL2dwaW8vZ3Bpby1tb2NrdXAuYy00OTMtfTtcXG5kcml2ZXJzL2dwaW8vZ3Bpby1tb2NrdXAuYzo0OTQ6TU9EVUxFX0RFVklDRV9UQUJMRShvZiwgZ3Bpb19tb2NrdXBfb2ZfbWF0Y2gpO1xcbmRyaXZlcnMvZ3Bpby9ncGlvLW1vY2t1cC5jLTQ5NS1cXG5kcml2ZXJzL2dwaW8vZ3Bpby1tb2NrdXAuYzo0OTY6c3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgZ3Bpb19tb2NrdXBfZHJpdmVyID0ge1xcbmRyaXZlcnMvZ3Bpby9ncGlvLW1vY2t1cC5jLTQ5Ny1cXHQuZHJpdmVyID0ge1xcbmRyaXZlcnMvZ3Bpby9ncGlvLW1vY2t1cC5jOjQ5ODpcXHRcXHQubmFtZSA9IFxcXCJncGlvLW1vY2t1cFxcXCIsXFxuZHJpdmVycy9ncGlvL2dwaW8tbW9ja3VwLmM6NDk5OlxcdFxcdC5vZl9tYXRjaF90YWJsZSA9IGdwaW9fbW9ja3VwX29mX21hdGNoLFxcbmRyaXZlcnMvZ3Bpby9ncGlvLW1vY2t1cC5jLTUwMC1cXHR9LFxcbmRyaXZlcnMvZ3Bpby9ncGlvLW1vY2t1cC5jOjUwMTpcXHQucHJvYmUgPSBncGlvX21vY2t1cF9wcm9iZSxcXG5kcml2ZXJzL2dwaW8vZ3Bpby1tb2NrdXAuYy01MDItfTtcXG5kcml2ZXJzL2dwaW8vZ3Bpby1tb2NrdXAuYy01MDMtXFxuZHJpdmVycy9ncGlvL2dwaW8tbW9ja3VwLmM6NTA0OnN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpncGlvX21vY2t1cF9wZGV2c1tHUElPX01PQ0tVUF9NQVhfR0NdO1xcbmRyaXZlcnMvZ3Bpby9ncGlvLW1vY2t1cC5jLTUwNS1cXG5kcml2ZXJzL2dwaW8vZ3Bpby1tb2NrdXAuYzo1MDY6c3RhdGljIHZvaWQgZ3Bpb19tb2NrdXBfdW5yZWdpc3Rlcl9wZGV2cyh2b2lkKVxcbmRyaXZlcnMvZ3Bpby9ncGlvLW1vY2t1cC5jLTUwNy17XFxuLS1cXG5kcml2ZXJzL2dwaW8vZ3Bpby1tb2NrdXAuYy01MTItXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIEdQSU9fTU9DS1VQX01BWF9HQzsgaSsrKSB7XFxuZHJpdmVycy9ncGlvL2dwaW8tbW9ja3VwLmM6NTEzOlxcdFxcdHBkZXYgPSBncGlvX21vY2t1cF9wZGV2c1tpXTtcXG5kcml2ZXJzL2dwaW8vZ3Bpby1tb2NrdXAuYy01MTQtXFx0XFx0aWYgKCFwZGV2KVxcbi0tXFxuZHJpdmVycy9ncGlvL2dwaW8tbW9ja3VwLmMtNTIyLVxcbmRyaXZlcnMvZ3Bpby9ncGlvLW1vY2t1cC5jOjUyMzpzdGF0aWMgaW50IF9faW5pdCBncGlvX21vY2t1cF9yZWdpc3Rlcl9jaGlwKGludCBpZHgpXFxuZHJpdmVycy9ncGlvL2dwaW8tbW9ja3VwLmMtNTI0LXtcXG4tLVxcbmRyaXZlcnMvZ3Bpby9ncGlvLW1vY2t1cC5jLTUzNi1cXG5kcml2ZXJzL2dwaW8vZ3Bpby1tb2NrdXAuYzo1Mzc6XFx0c25wcmludGYoY2hpcF9sYWJlbCwgc2l6ZW9mKGNoaXBfbGFiZWwpLCBcXFwiZ3Bpby1tb2NrdXAtJWNcXFwiLCBpZHggKyAnQScpO1xcbmRyaXZlcnMvZ3Bpby9ncGlvLW1vY2t1cC5jLTUzOC1cXHRwcm9wZXJ0aWVzW3Byb3ArK10gPSBQUk9QRVJUWV9FTlRSWV9TVFJJTkcoXFxcImNoaXAtbGFiZWxcXFwiLCBjaGlwX2xhYmVsKTtcXG5kcml2ZXJzL2dwaW8vZ3Bpby1tb2NrdXAuYy01MzktXFxuZHJpdmVycy9ncGlvL2dwaW8tbW9ja3VwLmM6NTQwOlxcdGJhc2UgPSBncGlvX21vY2t1cF9yYW5nZV9iYXNlKGlkeCk7XFxuZHJpdmVycy9ncGlvL2dwaW8tbW9ja3VwLmMtNTQxLVxcdGlmIChiYXNlIFxcdTAwM2U9IDApXFxuLS1cXG5kcml2ZXJzL2dwaW8vZ3Bpby1tb2NrdXAuYy01NDMtXFxuZHJpdmVycy9ncGlvL2dwaW8tbW9ja3VwLmM6NTQ0OlxcdG5ncGlvID0gYmFzZSBcXHUwMDNjIDAgPyBncGlvX21vY2t1cF9yYW5nZV9uZ3BpbyhpZHgpXFxuZHJpdmVycy9ncGlvL2dwaW8tbW9ja3VwLmM6NTQ1OlxcdFxcdFxcdCA6IGdwaW9fbW9ja3VwX3JhbmdlX25ncGlvKGlkeCkgLSBiYXNlO1xcbmRyaXZlcnMvZ3Bpby9ncGlvLW1vY2t1cC5jLTU0Ni1cXHRwcm9wZXJ0aWVzW3Byb3ArK10gPSBQUk9QRVJUWV9FTlRSWV9VMTYoXFxcIm5yLWdwaW9zXFxcIiwgbmdwaW8pO1xcbmRyaXZlcnMvZ3Bpby9ncGlvLW1vY2t1cC5jLTU0Ny1cXG5kcml2ZXJzL2dwaW8vZ3Bpby1tb2NrdXAuYzo1NDg6XFx0aWYgKGdwaW9fbW9ja3VwX25hbWVkX2xpbmVzKSB7XFxuZHJpdmVycy9ncGlvL2dwaW8tbW9ja3VwLmMtNTQ5LVxcdFxcdGxpbmVfbmFtZXMgPSBrYXNwcmludGZfc3RyYXJyYXkoR0ZQX0tFUk5FTCwgY2hpcF9sYWJlbCwgbmdwaW8pO1xcbi0tXFxuZHJpdmVycy9ncGlvL2dwaW8tbW9ja3VwLmMtNTYyLVxcbmRyaXZlcnMvZ3Bpby9ncGlvLW1vY2t1cC5jOjU2MzpcXHRwZGV2aW5mby5uYW1lID0gXFxcImdwaW8tbW9ja3VwXFxcIjtcXG5kcml2ZXJzL2dwaW8vZ3Bpby1tb2NrdXAuYy01NjQtXFx0cGRldmluZm8uaWQgPSBpZHg7XFxuLS1cXG5kcml2ZXJzL2dwaW8vZ3Bpby1tb2NrdXAuYy01NzQtXFxuZHJpdmVycy9ncGlvL2dwaW8tbW9ja3VwLmM6NTc1OlxcdGdwaW9fbW9ja3VwX3BkZXZzW2lkeF0gPSBwZGV2O1xcbmRyaXZlcnMvZ3Bpby9ncGlvLW1vY2t1cC5jLTU3Ni1cXG4tLVxcbmRyaXZlcnMvZ3Bpby9ncGlvLW1vY2t1cC5jLTU3OS1cXG5kcml2ZXJzL2dwaW8vZ3Bpby1tb2NrdXAuYzo1ODA6c3RhdGljIGludCBfX2luaXQgZ3Bpb19tb2NrdXBfaW5pdCh2b2lkKVxcbmRyaXZlcnMvZ3Bpby9ncGlvLW1vY2t1cC5jLTU4MS17XFxuLS1cXG5kcml2ZXJzL2dwaW8vZ3Bpby1tb2NrdXAuYy01ODMtXFxuZHJpdmVycy9ncGlvL2dwaW8tbW9ja3VwLmM6NTg0OlxcdGlmICgoZ3Bpb19tb2NrdXBfbnVtX3JhbmdlcyAlIDIpIHx8XFxuZHJpdmVycy9ncGlvL2dwaW8tbW9ja3VwLmM6NTg1OlxcdCAgICAoZ3Bpb19tb2NrdXBfbnVtX3JhbmdlcyBcXHUwMDNlIEdQSU9fTU9DS1VQX01BWF9SQU5HRVMpKVxcbmRyaXZlcnMvZ3Bpby9ncGlvLW1vY2t1cC5jLTU4Ni1cXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4tLVxcbmRyaXZlcnMvZ3Bpby9ncGlvLW1vY2t1cC5jLTU4OC1cXHQvKiBFYWNoIGNoaXAgaXMgZGVzY3JpYmVkIGJ5IHR3byB2YWx1ZXMuICovXFxuZHJpdmVycy9ncGlvL2dwaW8tbW9ja3VwLmM6NTg5OlxcdG51bV9jaGlwcyA9IGdwaW9fbW9ja3VwX251bV9yYW5nZXMgLyAyO1xcbmRyaXZlcnMvZ3Bpby9ncGlvLW1vY2t1cC5jLTU5MC1cXG4tLVxcbmRyaXZlcnMvZ3Bpby9ncGlvLW1vY2t1cC5jLTU5NS1cXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgbnVtX2NoaXBzOyBpKyspIHtcXG5kcml2ZXJzL2dwaW8vZ3Bpby1tb2NrdXAuYzo1OTY6XFx0XFx0YmFzZSA9IGdwaW9fbW9ja3VwX3JhbmdlX2Jhc2UoaSk7XFxuZHJpdmVycy9ncGlvL2dwaW8tbW9ja3VwLmM6NTk3OlxcdFxcdG5ncGlvID0gZ3Bpb19tb2NrdXBfcmFuZ2VfbmdwaW8oaSk7XFxuZHJpdmVycy9ncGlvL2dwaW8tbW9ja3VwLmMtNTk4LVxcbi0tXFxuZHJpdmVycy9ncGlvL2dwaW8tbW9ja3VwLmMtNjEwLVxcbmRyaXZlcnMvZ3Bpby9ncGlvLW1vY2t1cC5jOjYxMTpcXHRncGlvX21vY2t1cF9kYmdfZGlyID0gZGVidWdmc19jcmVhdGVfZGlyKFxcXCJncGlvLW1vY2t1cFxcXCIsIE5VTEwpO1xcbmRyaXZlcnMvZ3Bpby9ncGlvLW1vY2t1cC5jLTYxMi1cXG5kcml2ZXJzL2dwaW8vZ3Bpby1tb2NrdXAuYzo2MTM6XFx0ZXJyID0gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKFxcdTAwMjZncGlvX21vY2t1cF9kcml2ZXIpO1xcbmRyaXZlcnMvZ3Bpby9ncGlvLW1vY2t1cC5jLTYxNC1cXHRpZiAoZXJyKSB7XFxuZHJpdmVycy9ncGlvL2dwaW8tbW9ja3VwLmMtNjE1LVxcdFxcdHByX2VycihcXFwiZXJyb3IgcmVnaXN0ZXJpbmcgcGxhdGZvcm0gZHJpdmVyXFxcXG5cXFwiKTtcXG5kcml2ZXJzL2dwaW8vZ3Bpby1tb2NrdXAuYzo2MTY6XFx0XFx0ZGVidWdmc19yZW1vdmVfcmVjdXJzaXZlKGdwaW9fbW9ja3VwX2RiZ19kaXIpO1xcbmRyaXZlcnMvZ3Bpby9ncGlvLW1vY2t1cC5jLTYxNy1cXHRcXHRyZXR1cm4gZXJyO1xcbi0tXFxuZHJpdmVycy9ncGlvL2dwaW8tbW9ja3VwLmMtNjIwLVxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBudW1fY2hpcHM7IGkrKykge1xcbmRyaXZlcnMvZ3Bpby9ncGlvLW1vY2t1cC5jOjYyMTpcXHRcXHRlcnIgPSBncGlvX21vY2t1cF9yZWdpc3Rlcl9jaGlwKGkpO1xcbmRyaXZlcnMvZ3Bpby9ncGlvLW1vY2t1cC5jLTYyMi1cXHRcXHRpZiAoZXJyKSB7XFxuZHJpdmVycy9ncGlvL2dwaW8tbW9ja3VwLmM6NjIzOlxcdFxcdFxcdHBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKFxcdTAwMjZncGlvX21vY2t1cF9kcml2ZXIpO1xcbmRyaXZlcnMvZ3Bpby9ncGlvLW1vY2t1cC5jOjYyNDpcXHRcXHRcXHRncGlvX21vY2t1cF91bnJlZ2lzdGVyX3BkZXZzKCk7XFxuZHJpdmVycy9ncGlvL2dwaW8tbW9ja3VwLmM6NjI1OlxcdFxcdFxcdGRlYnVnZnNfcmVtb3ZlX3JlY3Vyc2l2ZShncGlvX21vY2t1cF9kYmdfZGlyKTtcXG5kcml2ZXJzL2dwaW8vZ3Bpby1tb2NrdXAuYy02MjYtXFx0XFx0XFx0cmV0dXJuIGVycjtcXG4tLVxcbmRyaXZlcnMvZ3Bpby9ncGlvLW1vY2t1cC5jLTYzMi1cXG5kcml2ZXJzL2dwaW8vZ3Bpby1tb2NrdXAuYzo2MzM6c3RhdGljIHZvaWQgX19leGl0IGdwaW9fbW9ja3VwX2V4aXQodm9pZClcXG5kcml2ZXJzL2dwaW8vZ3Bpby1tb2NrdXAuYy02MzQte1xcbmRyaXZlcnMvZ3Bpby9ncGlvLW1vY2t1cC5jOjYzNTpcXHRncGlvX21vY2t1cF91bnJlZ2lzdGVyX3BkZXZzKCk7XFxuZHJpdmVycy9ncGlvL2dwaW8tbW9ja3VwLmM6NjM2OlxcdGRlYnVnZnNfcmVtb3ZlX3JlY3Vyc2l2ZShncGlvX21vY2t1cF9kYmdfZGlyKTtcXG5kcml2ZXJzL2dwaW8vZ3Bpby1tb2NrdXAuYzo2Mzc6XFx0cGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoXFx1MDAyNmdwaW9fbW9ja3VwX2RyaXZlcik7XFxuZHJpdmVycy9ncGlvL2dwaW8tbW9ja3VwLmMtNjM4LX1cXG5kcml2ZXJzL2dwaW8vZ3Bpby1tb2NrdXAuYy02MzktXFxuZHJpdmVycy9ncGlvL2dwaW8tbW9ja3VwLmM6NjQwOm1vZHVsZV9pbml0KGdwaW9fbW9ja3VwX2luaXQpO1xcbmRyaXZlcnMvZ3Bpby9ncGlvLW1vY2t1cC5jOjY0MTptb2R1bGVfZXhpdChncGlvX21vY2t1cF9leGl0KTtcXG5kcml2ZXJzL2dwaW8vZ3Bpby1tb2NrdXAuYy02NDItXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYz00NDY9c3RhdGljIGludCBfX2luaXQgZHNhX2xvb3BfY3JlYXRlX3N3aXRjaF9tZGlvZGV2KHZvaWQpXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy00NTUtXFx0XFx0fSxcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzo0NTY6XFx0XFx0Lm5hbWUgPSBcXFwiRFNBIG1vY2t1cCBkcml2ZXJcXFwiLFxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTQ1Ny1cXHRcXHQuZW5hYmxlZF9wb3J0cyA9IDB4MWYsXFxuLS1cXG5kcml2ZXJzL3NvdW5kd2lyZS9idXMuYz00MTU9c3RhdGljIGludCBzZHdfbnRyYW5zZmVyX25vX3BtKHN0cnVjdCBzZHdfc2xhdmUgKnNsYXZlLCB1MzIgYWRkciwgdTggZmxhZ3MsXFxuLS1cXG5kcml2ZXJzL3NvdW5kd2lyZS9idXMuYy00MzAtXFx0XFx0cmV0ID0gc2R3X3RyYW5zZmVyKHNsYXZlLVxcdTAwM2VidXMsIFxcdTAwMjZtc2cpO1xcbmRyaXZlcnMvc291bmR3aXJlL2J1cy5jOjQzMTpcXHRcXHRpZiAocmV0IFxcdTAwM2MgMCBcXHUwMDI2XFx1MDAyNiAhc2xhdmUtXFx1MDAzZWlzX21vY2t1cF9kZXZpY2UpXFxuZHJpdmVycy9zb3VuZHdpcmUvYnVzLmMtNDMyLVxcdFxcdFxcdHJldHVybiByZXQ7XFxuLS1cXG5kcml2ZXJzL3NvdW5kd2lyZS9zdHJlYW0uYz0xMzI9c3RhdGljIGludCBzZHdfcHJvZ3JhbV9zbGF2ZV9wb3J0X3BhcmFtcyhzdHJ1Y3Qgc2R3X2J1cyAqYnVzLFxcbi0tXFxuZHJpdmVycy9zb3VuZHdpcmUvc3RyZWFtLmMtMTQ0LVxcbmRyaXZlcnMvc291bmR3aXJlL3N0cmVhbS5jOjE0NTpcXHRpZiAoc19ydC1cXHUwMDNlc2xhdmUtXFx1MDAzZWlzX21vY2t1cF9kZXZpY2UpXFxuZHJpdmVycy9zb3VuZHdpcmUvc3RyZWFtLmMtMTQ2LVxcdFxcdHJldHVybiAwO1xcbi0tXFxuaW5jbHVkZS9saW51eC9zb3VuZHdpcmUvc2R3Lmg9NjE3PXN0cnVjdCBzZHdfc2xhdmVfb3BzIHtcXG4tLVxcbmluY2x1ZGUvbGludXgvc291bmR3aXJlL3Nkdy5oLTY2MC0gKiBmb3IgYSBTbGF2ZSBoYXBwZW5zIGZvciB0aGUgZmlyc3QgdGltZSBhZnRlciBlbnVtZXJhdGlvblxcbmluY2x1ZGUvbGludXgvc291bmR3aXJlL3Nkdy5oOjY2MTogKiBAaXNfbW9ja3VwX2RldmljZTogc3RhdHVzIGZsYWcgdXNlZCB0byBzcXVlbGNoIGVycm9ycyBpbiB0aGUgY29tbWFuZC9jb250cm9sXFxuaW5jbHVkZS9saW51eC9zb3VuZHdpcmUvc2R3Lmg6NjYyOiAqIHByb3RvY29sIGZvciBTb3VuZFdpcmUgbW9ja3VwIGRldmljZXNcXG5pbmNsdWRlL2xpbnV4L3NvdW5kd2lyZS9zZHcuaC02NjMtICogQHNkd19kZXZfbG9jazogbXV0ZXggdXNlZCB0byBwcm90ZWN0IGNhbGxiYWNrcy9yZW1vdmUgcmFjZXNcXG4tLVxcbmluY2x1ZGUvbGludXgvc291bmR3aXJlL3Nkdy5oPTY2Nj1zdHJ1Y3Qgc2R3X3NsYXZlIHtcXG4tLVxcbmluY2x1ZGUvbGludXgvc291bmR3aXJlL3Nkdy5oLTY4Ni1cXHRib29sIGZpcnN0X2ludGVycnVwdF9kb25lO1xcbmluY2x1ZGUvbGludXgvc291bmR3aXJlL3Nkdy5oOjY4NzpcXHRib29sIGlzX21vY2t1cF9kZXZpY2U7XFxuaW5jbHVkZS9saW51eC9zb3VuZHdpcmUvc2R3LmgtNjg4LVxcdHN0cnVjdCBtdXRleCBzZHdfZGV2X2xvY2s7IC8qIHByb3RlY3QgY2FsbGJhY2tzL3JlbW92ZSByYWNlcyAqL1xcbi0tXFxuc291bmQvc29jL2NvZGVjcy9LY29uZmlnPTIwMjU9Y29uZmlnIFNORF9TT0NfU0RXX01PQ0tVUFxcbnNvdW5kL3NvYy9jb2RlY3MvS2NvbmZpZzoyMDI2OlxcdHRyaXN0YXRlIFxcXCJTb3VuZFdpcmUgbW9ja3VwIGNvZGVjXFxcIlxcbnNvdW5kL3NvYy9jb2RlY3MvS2NvbmZpZy0yMDI3LVxcdGRlcGVuZHMgb24gRVhQRVJUXFxuLS1cXG5zb3VuZC9zb2MvY29kZWNzL0tjb25maWctMjAyOS1cXHRoZWxwXFxuc291bmQvc29jL2NvZGVjcy9LY29uZmlnOjIwMzA6XFx0ICBUaGlzIG9wdGlvbiBlbmFibGVzIGEgU291bmRXaXJlIG1vY2t1cCBjb2RlYyB0aGF0IGRvZXMgbm90IGRyaXZlIHRoZVxcbnNvdW5kL3NvYy9jb2RlY3MvS2NvbmZpZy0yMDMxLVxcdCAgYnVzLCB0YWtlIHBhcnQgaW4gdGhlIGNvbW1hbmQvY29tbWFuZCBwcm90b2NvbCBvciBnZW5lcmF0ZSBkYXRhIG9uIGFcXG4tLVxcbnNvdW5kL3NvYy9jb2RlY3MvS2NvbmZpZy0yMDM1LVxcdCAgdG9wb2xvZ2llcyB0aGF0IGRpZmZlciBmcm9tIHRoZSBhY3R1YWwgaGFyZHdhcmUgbGF5b3V0LlxcbnNvdW5kL3NvYy9jb2RlY3MvS2NvbmZpZzoyMDM2OlxcdCAgVGhpcyBtb2NrdXAgZGV2aWNlIGNvdWxkIGJlIHRvdGFsbHkgdmlydHVhbCBidXQgY291bGQgYWxzbyBiZSBhXFxuc291bmQvc29jL2NvZGVjcy9LY29uZmlnLTIwMzctXFx0ICByZWFsIHBoeXNpY2FsIG9uZSB3aXRoIG9uZSBrZXkgcmVzdHJpY3Rpb246IGl0IGlzIG5vdCBhbGxvd2VkIGJ5IHRoZVxcbi0tXFxuc291bmQvc29jL2NvZGVjcy9NYWtlZmlsZT0yOTE9c25kLXNvYy1ydHE5MTI4LXkgOj0gcnRxOTEyOC5vXFxuc291bmQvc29jL2NvZGVjcy9NYWtlZmlsZToyOTI6c25kLXNvYy1zZHctbW9ja3VwLXkgOj0gc2R3LW1vY2t1cC5vXFxuc291bmQvc29jL2NvZGVjcy9NYWtlZmlsZS0yOTMtc25kLXNvYy1zZ3RsNTAwMC15IDo9IHNndGw1MDAwLm9cXG4tLVxcbnNvdW5kL3NvYy9jb2RlY3MvTWFrZWZpbGU9NzMxPW9iai0kKENPTkZJR19TTkRfU09DX1JUUTkxMjgpXFx0Kz0gc25kLXNvYy1ydHE5MTI4Lm9cXG5zb3VuZC9zb2MvY29kZWNzL01ha2VmaWxlOjczMjpvYmotJChDT05GSUdfU05EX1NPQ19TRFdfTU9DS1VQKSAgICAgKz0gc25kLXNvYy1zZHctbW9ja3VwLm9cXG5zb3VuZC9zb2MvY29kZWNzL01ha2VmaWxlLTczMy1vYmotJChDT05GSUdfU05EX1NPQ19TR1RMNTAwMCkgICs9IHNuZC1zb2Mtc2d0bDUwMDAub1xcbi0tXFxuc291bmQvc29jL2NvZGVjcy9zZHctbW9ja3VwLmMtMi0vL1xcbnNvdW5kL3NvYy9jb2RlY3Mvc2R3LW1vY2t1cC5jOjM6Ly8gc2R3LW1vY2t1cC5jIC0tIGEgbW9ja3VwIFNvdW5kV2lyZSBjb2RlYyBmb3IgdGVzdHMgd2hlcmUgb25seSB0aGUgaG9zdFxcbnNvdW5kL3NvYy9jb2RlY3Mvc2R3LW1vY2t1cC5jLTQtLy8gZHJpdmVzIHRoZSBidXMuXFxuLS1cXG5zb3VuZC9zb2MvY29kZWNzL3Nkdy1tb2NrdXAuYy0yMS1cXG5zb3VuZC9zb2MvY29kZWNzL3Nkdy1tb2NrdXAuYzoyMjpzdHJ1Y3QgIHNkd19tb2NrdXBfcHJpdiB7XFxuc291bmQvc29jL2NvZGVjcy9zZHctbW9ja3VwLmMtMjMtXFx0c3RydWN0IHNkd19zbGF2ZSAqc2xhdmU7XFxuLS1cXG5zb3VuZC9zb2MvY29kZWNzL3Nkdy1tb2NrdXAuYy0yNS1cXG5zb3VuZC9zb2MvY29kZWNzL3Nkdy1tb2NrdXAuYzoyNjpzdGF0aWMgaW50IHNkd19tb2NrdXBfY29tcG9uZW50X3Byb2JlKHN0cnVjdCBzbmRfc29jX2NvbXBvbmVudCAqY29tcG9uZW50KVxcbnNvdW5kL3NvYy9jb2RlY3Mvc2R3LW1vY2t1cC5jLTI3LXtcXG4tLVxcbnNvdW5kL3NvYy9jb2RlY3Mvc2R3LW1vY2t1cC5jLTMwLVxcbnNvdW5kL3NvYy9jb2RlY3Mvc2R3LW1vY2t1cC5jOjMxOnN0YXRpYyB2b2lkIHNkd19tb2NrdXBfY29tcG9uZW50X3JlbW92ZShzdHJ1Y3Qgc25kX3NvY19jb21wb25lbnQgKmNvbXBvbmVudClcXG5zb3VuZC9zb2MvY29kZWNzL3Nkdy1tb2NrdXAuYy0zMi17XFxuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA5VDAxOjEyOjQyLjk0MDEzNDMxNloiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMzc3NzQwNzA1MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipVbnJlYWNoYWJsZSBQSFkgRHJpdmVyIEFuYWx5c2lzKipcblxuT2theSwgc28gdGhlcmUncyBubyBgbWRpby1tb2NrdXBgIEkgY2FuIGltbWVkaWF0ZWx5IGxldmVyYWdlLiBMZXQncyBzZWUgaG93IHN5emthbGxlciBoYW5kbGVzIG5ldHdvcmtpbmcgZHJpdmVycyBnZW5lcmFsbHkuIEkgcmVjYWxsIGl0IHV0aWxpemVzIHZhcmlvdXMgbmV0ZGV2cyBsaWtlIGB0dW5gL2B0YXBgLCBgdmV0aGAsIGBtYWM4MDIxMV9od3NpbWAsIGFuZCBvdGhlcnMuIEhvd2V2ZXIsIGZvciBoYXJkd2FyZS1zcGVjaWZpYyBkcml2ZXJzLCBJJ20gdXN1YWxseSBzdHVjayB1bmxlc3MgdGhlIGhhcmR3YXJlIGNhbiBiZSBlbXVsYXRlZC5cblxuU3l6a2FsbGVyIGRvZXMgaGF2ZSBjbGV2ZXIgd29ya2Fyb3VuZHM6IGBzeXpfdXNiX2Nvbm5lY3RgIGZvciBVU0IsIGBzeXpfcGNpX2Nvbm5lY3RgIChtYXliZSwgSSdtIG5vdCBlbnRpcmVseSBzdXJlIGFib3V0IGl0cyBjdXJyZW50IHN0YXR1cyksIGBzeXpfdmhjaWAgZm9yIEJsdWV0b290aCwgYW5kIHJlbGF0ZWQgY2FsbHMgZm9yIDgwMi4xMS4gQnV0IGZvciBNRElPIFBIWXMsIHRoZXJlJ3Mgbm8gZXF1aXZhbGVudCB2aXJ0dWFsIE1ESU8gYnVzIEkgY2FuIHVzZSB0byBpbmplY3QgYXJiaXRyYXJ5IFBIWXMuXG5cbk5vdywgdGhlIGluc3RydWN0aW9ucyBJIHNhdyBtZW50aW9uIHNvbWV0aGluZyBpbXBvcnRhbnQ6IFwiUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWlucy4uLiBjb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLi4uIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmVcIi4gVGhhdCdzIHdoYXQgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaGVyZS4gSXMgdGhpcyBQSFkgZHJpdmVyIHJlYWNoYWJsZT9cblxuVGhpcyBpcyBlaXRoZXIgYSBwbGF0Zm9ybSBkcml2ZXIgb3IgYW4gTURJTyBkcml2ZXIuIElmIHNvLCBpdCB3aWxsIG5lZWQgYSBkZXZpY2UgdHJlZSBub2RlIG9yIGEgcGxhdGZvcm0gZGV2aWNlIHRvIGJlIGluc3RhbnRpYXRlZC4gQ2FuIHN5emthbGxlciBkbyB0aGF0LCBtYXliZSB3aXRoIGBzeXpfZGV2X2NyZWF0ZWA/IE5vcGUsIG5vdCBkaXJlY3RseS4gSSAqY291bGQqIGluc3RhbnRpYXRlIE1ESU8gZGV2aWNlcyBpZiB0aGVyZSB3YXMgYSB2aXJ0dWFsIE1ESU8gYnVzLlxuXG5BY3R1YWxseSwgdGhlIGBkc2FfbG9vcGAgZHJpdmVyIHVzZXMgYGZpeGVkX3BoeV9yZWdpc3Rlcl8xMDBmZCgpYCwgd2hpY2ggbWVhbnMgdGhlcmUgbWlnaHQgYmUgb3RoZXIgd2F5cyB0byBkbyBpdC4gTGV0IG1lIGNoZWNrIGlmIHRoZXJlIGlzIGFueSBgbWRpb2AgYnVzIHRoYXQgY2FuIGJlIGNyZWF0ZWQgZnJvbSB1c2Vyc3BhY2UuLi4gbm9wZSwgbm90aGluZy4gU28sIGlzIHRoaXMgUEhZIGRyaXZlciByZWFjaGFibGU/IElmIGl0J3MgYW4gTURJTyBQSFkgZHJpdmVyLCBpdCByZWdpc3RlcnMgaXRzZWxmIHdpdGggYHBoeV9kcml2ZXJfcmVnaXN0ZXIoKWAuIFdoZW4gYW4gTURJTyBidXMgc2NhbnMsIGl0IHJlYWRzIHRoZSBQSFkgSUQgcmVnaXN0ZXJzLCBhbmQgaWYgdGhleSBtYXRjaCwgdGhlIGRyaXZlciBpcyBib3VuZC4gU2luY2UgdGhlcmUgaXMgbm8gdmlydHVhbCBNRElPIGJ1cyBJIGNhbiBjb250cm9sIHRvIHJldHVybiBhcmJpdHJhcnkgUEhZIElEcywgdGhpcyBpcyBub3QgZ29pbmcgdG8gYmluZC5cblxuV2FpdCwgd2hhdCBpZiBRRU1VIGVtdWxhdGVzIGEgbmV0d29yayBjYXJkIHdpdGggYW4gTURJTyBidXM/IFFFTVUgZW11bGF0ZXMgYGUxMDAwYCwgYHJ0bDgxMzlgLCBgcGNuZXRgLCBgbmUya19wY2lgLCBgdmlydGlvLW5ldGAsIGB2bXhuZXQzYC4gQnV0IG5vbmUgb2YgdGhlc2UgdXNlIEFpcm9oYSBvciBNZWRpYVRlayBQSFkgZHJpdmVycy4gSSBzaG91bGQgZG91YmxlLWNoZWNrIFFFTVUgZm9yIGFueSBNRElPIGVtdWxhdGlvbiBzeXprYWxsZXIgYWN0dWFsbHkgdXNlcywgdGhvdWdoLiBRRU1VIGhhcyBgaW14LmZlY2AsIHdoaWNoIGhhcyBhbiBNRElPIGJ1cywgYnV0IGl0J3MgZm9yIEFSTSBtYWNoaW5lcy4gU3l6a2FsbGVyIHVzdWFsbHkgcnVucyBvbiB4ODZfNjQgb3IgYXJtNjQgYHZpcnRgLCB3aGljaCB1c2VzIGB2aXJ0aW8tbmV0YC5cblxuWWVhaCwgdGhhdCBQSFkgZHJpdmVyIGlzIHVucmVhY2hhYmxlLiBMZXQncyBsb29rIGZvciBvdGhlciBhdmVudWVzLiBDYW4gSSBpbnN0YW50aWF0ZSBhIFBIWSBkcml2ZXIgdmlhIHN5c2ZzPyBNYXliZSBzb21ldGhpbmcgbGlrZSBgZWNobyBcIjB4MDNhMjk0YzFcIiBcdTAwM2UgL3N5cy9idXMvbWRpb19idXMvZHJpdmVycy9BaXJvaGFcXCBBTjc1ODFcXCBQSFkvYmluZGA/IFlvdSBjYW4gYmluZCBhIGRyaXZlciB0byBhbiAqZXhpc3RpbmcqIGRldmljZS4gQnV0IHlvdSBuZWVkIGFuIGV4aXN0aW5nIE1ESU8gZGV2aWNlLiBJcyB0aGVyZSBvbmUgYnkgZGVmYXVsdD8gSWYgdGhlcmUncyBubyBNRElPIGJ1cywgdGhlcmUncyBubyBNRElPIGRldmljZXMuIElzIHRoZXJlIGFuIE1ESU8gYnVzIGNyZWF0ZWQgYnkgZGVmYXVsdD8gTGV0IG1lIGNoZWNrIGlmIGEgYGZpeGVkLTBgIE1ESU8gYnVzIGlzIGNyZWF0ZWQuIFllcywgYGZpeGVkX21kaW9fYnVzYCBpcyBjcmVhdGVkIGJ5IGBmaXhlZF9tZGlvX2J1c19pbml0KClgLiBDYW4gSSBiaW5kIHRoaXMgZHJpdmVyIHRvIGEgZml4ZWQgUEhZPyBGaXhlZCBQSFlzIGhhdmUgUEhZIElEIGAweDAwMDAwMDAwYCBvciBzaW1pbGFyLiBUaGUgZHJpdmVyIG1hdGNoZXMgb24gYFBIWV9JRF9NQVRDSF9FWEFDVChBSVJPSEFfR1BIWV9JRF9BTjc1ODEpYC4gSWYgSSB3cml0ZSB0byBgL3N5cy9idXMvbWRpb19idXMvZGV2aWNlcy9maXhlZC0wOjAwL2RyaXZlcl9vdmVycmlkZWAgYW5kIHRoZW4gYmluZD8gRmlyc3QsIGxldCdzIHNlZSBpZiBgZHJpdmVyX292ZXJyaWRlYCBleGlzdHMgZm9yIE1ESU8gYnVzLi4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjcxMzI5LCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTAyOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wOVQwMToxMjo1Ni43MTc1NDM1NzdaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjcxMTM0NjM5LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkcml2ZXJfb3ZlcnJpZGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvcGh5L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDlUMDE6MTI6NTYuNzg4Njg4NTA3WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQwMjIyNjc4MDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgc3VtbWFyaXplZCBmcm9tIGFuIGV4cGVydCdzIHBlcnNwZWN0aXZlOlxuXG4qKk1ESU8gRHJpdmVyIElucXVpcnkqKlxuXG5BbHJpZ2h0LCBsZXQncyBzZWUuIEknbSBsb29raW5nIGludG8gdGhlIE1ESU8gYnVzIGRyaXZlciBzaXR1YXRpb24sIGFuZCBJIG5lZWQgdG8gZmlndXJlIG91dCBob3cgZGV2aWNlIG92ZXJyaWRlcyBhcmUgaGFuZGxlZC4uLiBvciwgcmF0aGVyLCB3aHkgdGhleSBtaWdodCAqbm90KiBiZS4gVGhlIGZpcnN0IHRoaW5nIHRoYXQganVtcHMgb3V0IGF0IG1lIGlzIHRoYXQgdGhlIE1ESU8gYnVzIGl0c2VsZiBkb2Vzbid0IGV4cGxpY2l0bHkgaW1wbGVtZW50IGBkcml2ZXJfb3ZlcnJpZGVgLiBJIG5lZWQgdG8gZmlndXJlIG91dCBpZiB0aGF0J3MgYnkgZGVzaWduLiBUaGUgd2F5IHRvIGZpbmQgb3V0IHdoZXJlIHRoZSBkcml2ZXIgb3ZlcnJpZGUgZnVuY3Rpb25hbGl0eSBmb3IgdGhlIE1ESU8gYnVzIGxpZXMgaXMgdG8gbG9vayB3aGVyZSB0aGUgTURJTyBidXMgaXMgZGVmaW5lZC4gQWggaGEhIEkgbmVlZCB0byBjaGVjayB0aGUgYG1kaW9fYnVzX3R5cGVgIHN0cnVjdHVyZS4gVGhhdCB3b3VsZCBiZSBpbiBgZHJpdmVycy9uZXQvcGh5L21kaW9fYnVzLmNgLiBUaGF0IHNob3VsZCBwb2ludCBtZSB0byB0aGUgcmlnaHQgcGxhY2UgdG8gZmlndXJlIG91dCBob3cgZGV2aWNlcyBhcmUgaGFuZGxlZC4gVGhhdCdzIHdoZXJlIHRoZSBoZWFydCBvZiB0aGUgYnVzIGxpZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjczMjg0LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDlUMDE6MTM6MDAuODEwOTU4ODMzWiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NjE5MTc5OSwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZHJpdmVyX292ZXJyaWRlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3BoeS9tZGlvX2J1cy5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wOVQwMToxMzowMC44NzcxNjE1ODJaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTI2MzIzODcwNjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqVW5yZWFjaGFibGUgUEhZIERyaXZlcjogV29ydGhGdXp6aW5nPWZhbHNlKipcblxuT2theSwgc28gSSd2ZSBiZWVuIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQsIGFmdGVyIHNvbWUgdGhpbmtpbmcsIEkndmUgY29tZSB0byB0aGUgY29uY2x1c2lvbiB0aGF0IGl0J3Mgbm90IHdvcnRoIGZ1enppbmcuIFRoZSBjb3JlIGlzc3VlIGlzIHRoYXQgdGhpcyBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IFBIWSBkcml2ZXIsIHNwZWNpZmljYWxseSBmb3IgQWlyb2hhIFNvQ3MsIGFuZCBpdCByZWZhY3RvcnMgdGhlIGV4aXN0aW5nIE1lZGlhVGVrIFBIWSBkcml2ZXIgdG8gc2hhcmUgY29kZS4gTXkgcHJpbWFyeSBjb25jZXJuIGlzIHRoYXQgdGhlc2UgYXJlIGhhcmR3YXJlLXNwZWNpZmljIFBIWSBkcml2ZXJzLCBhbmQgdGhlcmVmb3JlLCB0aGVpciBjb2RlIHBhdGhzIGFyZSAqaW1wb3NzaWJsZSogdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLCBsaWtlIHRoZSBvbmVzIHVzZWQgZm9yIGZ1enppbmcuXG5cbkkgc3RhcnRlZCBieSBjb25zaWRlcmluZyB0aGUgdHlwaWNhbCBpbnN0YW50aWF0aW9uIG9mIFBIWSBkcml2ZXJzLiBZb3UgY2FuJ3QganVzdCBmb3JjZS1iaW5kIGEgUEhZIGRyaXZlci4gSSBsb29rZWQgYXQgYGkyY2AgYW5kIGBzcGlgLCBidXQgdGhleSB1c2UgdGhlIGBuZXdfZGV2aWNlYCBzeXNmcyBhdHRyaWJ1dGUsIHdoaWNoIE1ESU8gZG9lc24ndCBoYXZlLiBUaGlzIGltbWVkaWF0ZWx5IGZsYWdzIHRoZSBwcm9ibGVtOiB3ZSBjYW4ndCBjcmVhdGUgTURJTyBkZXZpY2VzIGZyb20gdXNlcnNwYWNlLCB0aGVyZWZvcmUgd2UgY2FuJ3QgcmVsaWFibHkgcmVhY2ggdGhpcyBkcml2ZXIgaW4gUUVNVSBvciBHQ0UuXG5cbkkgYnJpZWZseSBjb25zaWRlcmVkIGlmIHRoZXJlJ3Mgc29tZSBvdGhlciB3YXksIGxpa2UgYGRzYV9sb29wYCBvciBvdGhlciBleGlzdGluZyBkcml2ZXJzIHRoYXQgbWlnaHQgY3JlYXRlIGZpeGVkIFBIWXMuIEhvd2V2ZXIsIEkgZGlkbid0IHNlZSBhbnl0aGluZyBvYnZpb3VzLiBHaXZlbiB0aGUgbGFjayBvZiBhIHZpcnR1YWwgTURJTyBidXMgb3Igc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgaW4gdGhlc2UgZW52aXJvbm1lbnRzLCB0aGVyZSBpcyBubyB3YXkgdG8gaW5zdGFudGlhdGUgdGhpcyBwYXJ0aWN1bGFyIFBIWSBkcml2ZXIuXG5cbk9rYXksIGxldCBtZSBicmVhayBkb3duIHRoZSBwYXRjaCBpdHNlbGYuIEkgc2VlIGl0IGFkZHMgYGRyaXZlcnMvbmV0L3BoeS9tZWRpYXRlay9haXJvaGEtZ2Utc29jLmNgLCBtb2RpZmllcyBgZHJpdmVycy9uZXQvcGh5L21lZGlhdGVrL210ay1nZS1zb2MuY2AgdG8gcmVtb3ZlIEFpcm9oYSBQSFlzLCBhbmQgdXBkYXRlcyBzb21lIGhlYWRlciBmaWxlcy4gSXQgYWxzbyBtb2RpZmllcyBgZHJpdmVycy9uZXQvcGh5L21lZGlhdGVrL210ay1waHktbGliLmNgLCBtYWtpbmcgc29tZSBmdW5jdGlvbnMgZXhwb3J0ZWQgdG8gYmUgdXNlZC4gVGhlIGV4cG9ydCBpcyBlc3NlbnRpYWxseSBqdXN0IGFkZGluZyBgRVhQT1JUX1NZTUJPTF9HUExgLiBUaGVyZSBhcmUgbm8gZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHJlYWNoYWJsZSBjb3JlIGxvZ2ljLiBTbyB0aGUgd2hvbGUgcGF0Y2ggaXMgYWRkaW5nIHRoZSBuZXcgaGFyZHdhcmUtc3BlY2lmaWMgQWlyb2hhIFBIWSBkcml2ZXIgYW5kIHJlZmFjdG9yaW5nIHRoZSBleGlzdGluZyBNZWRpYVRlayBQSFkgZHJpdmVyIHRvIHNoYXJlIGNvZGUgd2l0aCBpdC5cblxuSSdtIHZlcmlmeWluZyB0aGF0IHRoZXJlJ3Mgbm8gd2F5IHRvIHJlYWNoIHRoaXMgY29kZS4gSXMgdGhlcmUgYSBjaGFuY2UgdGhhdCB0aGlzIGRyaXZlciBjb3VsZCBiZSBwcm9iZWQgdmlhIHNvbWUgb3RoZXIgZHJpdmVyLCBsaWtlIGBtZGlvLWJjbS11bmltYWMuY2A/IE5vLCB5b3UnZCBuZWVkIHRoZSBhY3R1YWwgaGFyZHdhcmUgb3IgYW4gZW11bGF0b3Igb2YgdGhlIGhhcmR3YXJlLiBTeXprYWxsZXIgZG9lc24ndCBlbXVsYXRlIEFpcm9oYSBvciBNZWRpYVRlayBTb0NzLiBUaGVyZWZvcmUsIGl0J3MgdW5yZWFjaGFibGUuXG5cblNvIG15IHJlYXNvbmluZyBpczogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBoYXJkd2FyZS1zcGVjaWZpYyBFdGhlcm5ldCBQSFkgZHJpdmVyIGZvciBBaXJvaGEgU29DcyBhbmQgcmVmYWN0b3JzIHRoZSBleGlzdGluZyBNZWRpYVRlayBQSFkgZHJpdmVyIHRvIHNoYXJlIGNvZGUuIFNpbmNlIFBIWSBkZXZpY2VzIGFyZSBpbnN0YW50aWF0ZWQgYnkgdGhlIE1ESU8gYnVzIGJhc2VkIG9uIGhhcmR3YXJlIHByb2JpbmcgKHJlYWRpbmcgUEhZIElEIHJlZ2lzdGVycykgb3IgZGV2aWNlIHRyZWUsIGFuZCB0aGVyZSBpcyBubyB2aXJ0dWFsIE1ESU8gYnVzIG9yIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyAobGlrZSBRRU1VL0dDRSkgdGhhdCBjYW4gaW5zdGFudGlhdGUgdGhpcyBzcGVjaWZpYyBQSFksIHRoZSBjb2RlIGlzIGltcG9zc2libGUgdG8gcmVhY2ggYW5kIHRlc3QgdmlhIGZ1enppbmcuXCJcblxuTGV0J3MgcXVpY2tseSBjaGVjayB0aGUgZ3VpZGVsaW5lcy4gVGhlIGluc3RydWN0aW9ucyBzYXksIFwiUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWlucyBjb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLlwiIFRoaXMgKnBlcmZlY3RseSogYWxpZ25zIHdpdGggdGhlIHNpdHVhdGlvbiBoZXJlLiBJJ20gZ29pbmcgdG8gc2V0IGBXb3J0aEZ1enppbmc9ZmFsc2VgLlxuXG5JIHdhbnQgdG8gYmUgdGhvcm91Z2gsIHNvIEknbGwgY2hlY2sgYW55IG90aGVyIG1vZGlmaWVkIGZpbGVzLiBPa2F5LCBJIHNlZSBgTUFJTlRBSU5FUlNgIChkb2NzKSwgYEtjb25maWdgLCBgTWFrZWZpbGVgLCBhbmQgdGhlIHNvdXJjZSBhbmQgaGVhZGVyIGZpbGVzIGZvciB0aGUgbmV3IGRyaXZlciBhbmQgdGhlIHJlZmFjdG9yZWQgY29kZS4gQWxsIHRoZSBjaGFuZ2VzIGFyZSByZWxhdGVkIHRvIHRoZSBBaXJvaGEgUEhZIGRyaXZlciBhbmQgcmVsYXRlZCBjb2RlLiBUaGVzZSBhcmUgYWxsIGhhcmR3YXJlLXNwZWNpZmljIFBIWSBkcml2ZXJzLCBzbyBpdCdzIGEgY2xvc2VkIGNhc2UuIGBXb3J0aEZ1enppbmc9ZmFsc2VgLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3MzU2OSwiT3V0cHV0VG9rZW5zIjoxMzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5NTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDlUMDE6MTM6MTMuNTA5NTUwOTYyWiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mjg5MjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBoYXJkd2FyZS1zcGVjaWZpYyBFdGhlcm5ldCBQSFkgZHJpdmVyIGZvciBBaXJvaGEgU29DcyBhbmQgcmVmYWN0b3JzIHRoZSBleGlzdGluZyBNZWRpYVRlayBQSFkgZHJpdmVyIHRvIHNoYXJlIGNvZGUuIFNpbmNlIFBIWSBkZXZpY2VzIGFyZSBpbnN0YW50aWF0ZWQgYnkgdGhlIE1ESU8gYnVzIGJhc2VkIG9uIGhhcmR3YXJlIHByb2JpbmcgKHJlYWRpbmcgUEhZIElEIHJlZ2lzdGVycykgb3IgZGV2aWNlIHRyZWUsIGFuZCB0aGVyZSBpcyBubyB2aXJ0dWFsIE1ESU8gYnVzIG9yIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyAobGlrZSBRRU1VL0dDRSkgdGhhdCBjYW4gaW5zdGFudGlhdGUgdGhpcyBzcGVjaWZpYyBQSFksIHRoZSBjb2RlIGlzIGltcG9zc2libGUgdG8gcmVhY2ggYW5kIHRlc3QgdmlhIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IGhhcmR3YXJlLXNwZWNpZmljIEV0aGVybmV0IFBIWSBkcml2ZXIgZm9yIEFpcm9oYSBTb0NzIGFuZCByZWZhY3RvcnMgdGhlIGV4aXN0aW5nIE1lZGlhVGVrIFBIWSBkcml2ZXIgdG8gc2hhcmUgY29kZS4gU2luY2UgUEhZIGRldmljZXMgYXJlIGluc3RhbnRpYXRlZCBieSB0aGUgTURJTyBidXMgYmFzZWQgb24gaGFyZHdhcmUgcHJvYmluZyAocmVhZGluZyBQSFkgSUQgcmVnaXN0ZXJzKSBvciBkZXZpY2UgdHJlZSwgYW5kIHRoZXJlIGlzIG5vIHZpcnR1YWwgTURJTyBidXMgb3Igc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIChsaWtlIFFFTVUvR0NFKSB0aGF0IGNhbiBpbnN0YW50aWF0ZSB0aGlzIHNwZWNpZmljIFBIWSwgdGhlIGNvZGUgaXMgaW1wb3NzaWJsZSB0byByZWFjaCBhbmQgdGVzdCB2aWEgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:nil,}