Name: series-workflowkwl59 Phase: Failed StartedAt: 2026-08-02 17:20:56 +0000 UTC FinishedAt: 2026-08-02 17:42:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkwl59[0] Phase: Succeeded StartedAt: 2026-08-02 17:20:56 +0000 UTC FinishedAt: 2026-08-02 17:41:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkwl59[0].run-triage Phase: Succeeded StartedAt: 2026-08-02 17:20:56 +0000 UTC FinishedAt: 2026-08-02 17:41:53 +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+CgkJCTx0ZD4yMDI2LzA4LzAyIDE3OjQxPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgdmVuZG9yLXNwZWNpZmljIFBDSWUgRXRoZXJuZXQgZHJpdmVyIChaVEUgRGluZ0hhaSkuIFRoaXMgZHJpdmVyIHJlcXVpcmVzIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgdGhhdCBpcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVSwgbWFraW5nIGl0IHVucmVhY2hhYmxlIGFuZCB1bnRlc3RhYmxlIGluIHZpcnR1YWxpemVkIGZ1enppbmcgZW52aXJvbm1lbnRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAxNzo0MTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDU5Y2MxNDI3NDc1MzZkMWZhMmFjMWM1M2ZhNGJjMzE0NDU3OTFlYjJcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU3VuIEF1ZyAyIDE3OjQxOjMxIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL01BSU5UQUlORVJTIGIvTUFJTlRBSU5FUlNcbmluZGV4IDJmYjFjNzVhZmQxNjMuLjczNjkyYjA5YmY3YmEgMTAwNjQ0XG4tLS0gYS9NQUlOVEFJTkVSU1xuJiM0MzsmIzQzOyYjNDM7IGIvTUFJTlRBSU5FUlNcbkBAIC0yOTQ0MCw2ICYjNDM7Mjk0NDAsMTIgQEAgUzpcdE1haW50YWluZWRcbiBUOlx0Z2l0IGdpdDovL2dpdC5rZXJuZWwub3JnL3B1Yi9zY20vbGludXgva2VybmVsL2dpdC90aXdhaS9zb3VuZC5naXRcbiBGOlx0c291bmQvaGRhL2NvZGVjcy9zZW5hcnl0ZWNoLmNcbiBcbiYjNDM7WlRFIERJTkdIQUkgRVRIRVJORVQgRFJJVkVSXG4mIzQzO006XHRKdW55YW5nIEhhbiBcdTAwM2NoYW4uanVueWFuZ0B6dGUuY29tLmNuXHUwMDNlXG4mIzQzO0w6XHRuZXRkZXZAdmdlci5rZXJuZWwub3JnXG4mIzQzO1M6XHRNYWludGFpbmVkXG4mIzQzO0Y6XHRkcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvXG4mIzQzO1xuIFRIRSBSRVNUXG4gTTpcdExpbnVzIFRvcnZhbGRzIFx1MDAzY3RvcnZhbGRzQGxpbnV4LWZvdW5kYXRpb24ub3JnXHUwMDNlXG4gTDpcdGxpbnV4LWtlcm5lbEB2Z2VyLmtlcm5lbC5vcmdcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9LY29uZmlnIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvS2NvbmZpZ1xuaW5kZXggYjhmNzBlMmExNzYzYS4uYzJiNjk5NmIwY2ZlMSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L0tjb25maWdcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L0tjb25maWdcbkBAIC0xODgsNSAmIzQzOzE4OCw2IEBAIHNvdXJjZSBcJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL0tjb25maWdcJiMzNDtcbiBzb3VyY2UgXCYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvd2l6bmV0L0tjb25maWdcJiMzNDtcbiBzb3VyY2UgXCYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQveGlsaW54L0tjb25maWdcJiMzNDtcbiBzb3VyY2UgXCYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQveGlyY29tL0tjb25maWdcJiMzNDtcbiYjNDM7c291cmNlIFwmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9LY29uZmlnXCYjMzQ7XG4gXG4gZW5kaWYgIyBFVEhFUk5FVFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L01ha2VmaWxlIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvTWFrZWZpbGVcbmluZGV4IDU3MzQ0ZmVjNmNlMDQuLmEzNGJjYmQ0ZGY0ZTkgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9NYWtlZmlsZVxuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvTWFrZWZpbGVcbkBAIC0xMDQsMyAmIzQzOzEwNCw0IEBAIG9iai0kKENPTkZJR19ORVRfVkVORE9SX1hJUkNPTSkgJiM0Mzs9IHhpcmNvbS9cbiBvYmotJChDT05GSUdfTkVUX1ZFTkRPUl9TWU5PUFNZUykgJiM0Mzs9IHN5bm9wc3lzL1xuIG9iai0kKENPTkZJR19ORVRfVkVORE9SX1BFTlNBTkRPKSAmIzQzOz0gcGVuc2FuZG8vXG4gb2JqLSQoQ09ORklHX09BX1RDNikgJiM0Mzs9IG9hX3RjNi5vXG4mIzQzO29iai0kKENPTkZJR19ORVRfVkVORE9SX1pURSkgJiM0Mzs9IHp0ZS9cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvS2NvbmZpZyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9LY29uZmlnXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uYjk1YzJmYzdkYjc3YVxuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL0tjb25maWdcbkBAIC0wLDAgJiM0MzsxLDIwIEBAXG4mIzQzOyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuJiM0MzsjXG4mIzQzOyMgWlRFIGRyaXZlciBjb25maWd1cmF0aW9uXG4mIzQzOyNcbiYjNDM7XG4mIzQzO2NvbmZpZyBORVRfVkVORE9SX1pURVxuJiM0MzsgICAgYm9vbCBcJiMzNDtaVEUgZGV2aWNlc1wmIzM0O1xuJiM0MzsgICAgZGVmYXVsdCB5XG4mIzQzOyAgICBoZWxwXG4mIzQzOyAgICAgIElmIHlvdSBoYXZlIGEgbmV0d29yayAoRXRoZXJuZXQpIGNhcmQgYmVsb25naW5nIHRvIHRoaXMgY2xhc3MsIHNheSBZLlxuJiM0MzsgICAgICBOb3RlIHRoYXQgdGhlIGFuc3dlciB0byB0aGlzIHF1ZXN0aW9uIGRvZXNuJiMzOTt0IGRpcmVjdGx5IGFmZmVjdCB0aGVcbiYjNDM7ICAgICAga2VybmVsOiBzYXlpbmcgTiB3aWxsIGp1c3QgY2F1c2UgdGhlIGNvbmZpZ3VyYXRvciB0byBza2lwIGFsbFxuJiM0MzsgICAgICB0aGUgcXVlc3Rpb25zIGFib3V0IFp0ZSBjYXJkcy4gSWYgeW91IHNheSBZLCB5b3Ugd2lsbCBiZSBhc2tlZFxuJiM0MzsgICAgICBmb3IgeW91ciBzcGVjaWZpYyBjYXJkIGluIHRoZSBmb2xsb3dpbmcgcXVlc3Rpb25zLlxuJiM0MztcbiYjNDM7aWYgTkVUX1ZFTkRPUl9aVEVcbiYjNDM7XG4mIzQzO3NvdXJjZSBcJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9LY29uZmlnXCYjMzQ7XG4mIzQzO1xuJiM0MztlbmRpZiAjIE5FVF9WRU5ET1JfWlRFXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL01ha2VmaWxlIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL01ha2VmaWxlXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uY2Q5OTI5YjYxNTU5Y1xuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL01ha2VmaWxlXG5AQCAtMCwwICYjNDM7MSw2IEBAXG4mIzQzOyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuJiM0MzsjXG4mIzQzOyMgTWFrZWZpbGUgZm9yIHRoZSBaVEUgZGV2aWNlIGRyaXZlcnNcbiYjNDM7I1xuJiM0MztcbiYjNDM7b2JqLSQoQ09ORklHX0RJTkdIQUkpICYjNDM7PSBkaW5naGFpL1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL0tjb25maWcgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9LY29uZmlnXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uMTIxYmUzYmY3NzA3ZlxuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvS2NvbmZpZ1xuQEAgLTAsMCAmIzQzOzEsMzQgQEBcbiYjNDM7IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4mIzQzOyNcbiYjNDM7IyBaVEUgRGluZ0hhaSBFdGhlcm5ldCBkcml2ZXIgY29uZmlndXJhdGlvblxuJiM0MzsjXG4mIzQzO1xuJiM0Mztjb25maWcgRElOR0hBSVxuJiM0MzsgICAgYm9vbCBcJiMzNDtaVEUgRGluZ0hhaSBFdGhlcm5ldCBkcml2ZXJcJiMzNDtcbiYjNDM7ICAgIGRlcGVuZHMgb24gUENJXG4mIzQzOyAgICBzZWxlY3QgTkVUX0RFVkxJTktcbiYjNDM7ICAgIGhlbHBcbiYjNDM7ICAgICAgVGhpcyBkcml2ZXIgc3VwcG9ydHMgWlRFIERpbmdIYWkgRXRoZXJuZXQgZGV2aWNlcy5cbiYjNDM7XG4mIzQzOyAgICAgIERpbmdIYWkgaXMgYSBoaWdoLXBlcmZvcm1hbmNlIEV0aGVybmV0IGNvbnRyb2xsZXIgdGhhdCBzdXBwb3J0c1xuJiM0MzsgICAgICBtdWx0aXBsZSBmZWF0dXJlcyBpbmNsdWRpbmcgaGFyZHdhcmUgb2ZmbG9hZGluZywgU1ItSU9WLCBhbmRcbiYjNDM7ICAgICAgYWR2YW5jZWQgdmlydHVhbGl6YXRpb24gY2FwYWJpbGl0aWVzLlxuJiM0MztcbiYjNDM7ICAgICAgSWYgeW91IHNheSBZIGhlcmUsIHlvdSBjYW4gc2VsZWN0IHNwZWNpZmljIGRyaXZlciB2YXJpYW50cyBiZWxvdy5cbiYjNDM7XG4mIzQzOyAgICAgIElmIHVuc3VyZSwgc2F5IE4uXG4mIzQzO1xuJiM0MztpZiBESU5HSEFJXG4mIzQzO1xuJiM0Mztjb25maWcgRElOR0hBSV9QRlxuJiM0MzsgICAgdHJpc3RhdGUgXCYjMzQ7WlRFIERpbmdIYWkgUEYgKFBoeXNpY2FsIEZ1bmN0aW9uKSBkcml2ZXJcJiMzNDtcbiYjNDM7ICAgIGhlbHBcbiYjNDM7ICAgICAgVGhpcyBkcml2ZXIgc3VwcG9ydHMgWlRFIERpbmdIYWkgUENJIEV4cHJlc3MgRXRoZXJuZXRcbiYjNDM7ICAgICAgYWRhcHRlcnMgKFBGKS5cbiYjNDM7XG4mIzQzOyAgICAgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmUuIFRoZSBtb2R1bGVcbiYjNDM7ICAgICAgd2lsbCBiZSBuYW1lZCBkaW5naGFpMTBlLlxuJiM0MztcbiYjNDM7ICAgICAgSWYgdW5zdXJlLCBzYXkgTi5cbiYjNDM7XG4mIzQzO2VuZGlmICMgRElOR0hBSVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL01ha2VmaWxlIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvTWFrZWZpbGVcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwLi5lMmY0ZGEzM2RmNTkzXG4tLS0gL2Rldi9udWxsXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9NYWtlZmlsZVxuQEAgLTAsMCAmIzQzOzEsNyBAQFxuJiM0MzsjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiYjNDM7I1xuJiM0MzsjIE1ha2VmaWxlIGZvciBaVEUgRGluZ0hhaSBFdGhlcm5ldCBkcml2ZXJcbiYjNDM7I1xuJiM0MztcbiYjNDM7b2JqLSQoQ09ORklHX0RJTkdIQUlfUEYpICYjNDM7PSBkaW5naGFpMTBlLm9cbiYjNDM7ZGluZ2hhaTEwZS15IDo9IGVuX3BmLm9cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9kaF9xdWV1ZS5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZGhfcXVldWUuaFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLjViNjM4OTVjMWVhMWVcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2RoX3F1ZXVlLmhcbkBAIC0wLDAgJiM0MzsxLDU2IEBAXG4mIzQzOy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHkgKi9cbiYjNDM7LypcbiYjNDM7ICogWlRFIERpbmdIYWkgRXRoZXJuZXQgZHJpdmVyIC0gUENJIGNhcGFiaWxpdHkgZGVmaW5pdGlvbnNcbiYjNDM7ICogQ29weXJpZ2h0IChjKSAyMDIyLTIwMjYsIFpURSBDb3Jwb3JhdGlvbi5cbiYjNDM7ICovXG4mIzQzO1xuJiM0MzsjaWZuZGVmIF9fREhfUVVFVUVfSF9fXG4mIzQzOyNkZWZpbmUgX19ESF9RVUVVRV9IX19cbiYjNDM7XG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3R5cGVzLmhcdTAwM2VcbiYjNDM7XG4mIzQzOy8qIFRoaXMgaXMgdGhlIFBDSSBjYXBhYmlsaXR5IGhlYWRlcjogKi9cbiYjNDM7c3RydWN0IHp4ZGhfcGZfcGNpX2NhcCB7XG4mIzQzO1x0X191OCBjYXBfdm5kcjtcdFx0LyogR2VuZXJpYyBQQ0kgZmllbGQ6IFBDSV9DQVBfSURfVk5EUiAqL1xuJiM0MztcdF9fdTggY2FwX25leHQ7XHRcdC8qIEdlbmVyaWMgUENJIGZpZWxkOiBuZXh0IHB0ci4gKi9cbiYjNDM7XHRfX3U4IGNhcF9sZW47XHRcdC8qIEdlbmVyaWMgUENJIGZpZWxkOiBjYXBhYmlsaXR5IGxlbmd0aCAqL1xuJiM0MztcdF9fdTggY2ZnX3R5cGU7XHRcdC8qIElkZW50aWZpZXMgdGhlIHN0cnVjdHVyZS4gKi9cbiYjNDM7XHRfX3U4IGJhcjtcdFx0LyogV2hlcmUgdG8gZmluZCBpdC4gKi9cbiYjNDM7XHRfX3U4IGlkO1x0XHQvKiBNdWx0aXBsZSBjYXBhYmlsaXRpZXMgb2YgdGhlIHNhbWUgdHlwZSAqL1xuJiM0MztcdF9fdTggcGFkZGluZ1syXTtcdFx0LyogUGFkIHRvIGZ1bGwgZHdvcmQuICovXG4mIzQzO1x0X19sZTMyIG9mZnNldDtcdFx0LyogT2Zmc2V0IHdpdGhpbiBiYXIuICovXG4mIzQzO1x0X19sZTMyIGxlbmd0aDtcdFx0LyogTGVuZ3RoIG9mIHRoZSBzdHJ1Y3R1cmUsIGluIGJ5dGVzLiAqL1xuJiM0Mzt9O1xuJiM0MztcbiYjNDM7LyogRmllbGRzIGluIFpYREhfUEZfUENJX0NBUF9DT01NT05fQ0ZHOiAqL1xuJiM0MztzdHJ1Y3QgenhkaF9wZl9wY2lfY29tbW9uX2NmZyB7XG4mIzQzO1x0LyogQWJvdXQgdGhlIHdob2xlIGRldmljZS4gKi9cbiYjNDM7XHRfX2xlMzIgZGV2aWNlX2ZlYXR1cmVfc2VsZWN0OyAvKiByZWFkLXdyaXRlICovXG4mIzQzO1x0X19sZTMyIGRldmljZV9mZWF0dXJlO1x0LyogcmVhZC1vbmx5ICovXG4mIzQzO1x0X19sZTMyIGd1ZXN0X2ZlYXR1cmVfc2VsZWN0OyAvKiByZWFkLXdyaXRlICovXG4mIzQzO1x0X19sZTMyIGd1ZXN0X2ZlYXR1cmU7XHRcdC8qIHJlYWQtd3JpdGUgKi9cbiYjNDM7XHRfX2xlMTYgbXNpeF9jb25maWc7XHRcdC8qIHJlYWQtd3JpdGUgKi9cbiYjNDM7XHRfX2xlMTYgbnVtX3F1ZXVlcztcdFx0LyogcmVhZC1vbmx5ICovXG4mIzQzO1x0X191OCBkZXZpY2Vfc3RhdHVzO1x0XHQvKiByZWFkLXdyaXRlICovXG4mIzQzO1x0X191OCBjb25maWdfZ2VuZXJhdGlvbjtcdC8qIHJlYWQtb25seSAqL1xuJiM0MztcbiYjNDM7XHQvKiBBYm91dCBhIHNwZWNpZmljIHZpcnRxdWV1ZS4gKi9cbiYjNDM7XHRfX2xlMTYgcXVldWVfc2VsZWN0O1x0XHQvKiByZWFkLXdyaXRlICovXG4mIzQzO1x0X19sZTE2IHF1ZXVlX3NpemU7XHRcdC8qIHJlYWQtd3JpdGUsIHBvd2VyIG9mIDIuICovXG4mIzQzO1x0X19sZTE2IHF1ZXVlX21zaXhfdmVjdG9yO1x0LyogcmVhZC13cml0ZSAqL1xuJiM0MztcdF9fbGUxNiBxdWV1ZV9lbmFibGU7XHRcdC8qIHJlYWQtd3JpdGUgKi9cbiYjNDM7XHRfX2xlMTYgcXVldWVfbm90aWZ5X29mZjtcdC8qIHJlYWQtb25seSAqL1xuJiM0MztcdF9fbGUzMiBxdWV1ZV9kZXNjX2xvO1x0XHQvKiByZWFkLXdyaXRlICovXG4mIzQzO1x0X19sZTMyIHF1ZXVlX2Rlc2NfaGk7XHRcdC8qIHJlYWQtd3JpdGUgKi9cbiYjNDM7XHRfX2xlMzIgcXVldWVfYXZhaWxfbG87XHRcdC8qIHJlYWQtd3JpdGUgKi9cbiYjNDM7XHRfX2xlMzIgcXVldWVfYXZhaWxfaGk7XHRcdC8qIHJlYWQtd3JpdGUgKi9cbiYjNDM7XHRfX2xlMzIgcXVldWVfdXNlZF9sbztcdFx0LyogcmVhZC13cml0ZSAqL1xuJiM0MztcdF9fbGUzMiBxdWV1ZV91c2VkX2hpO1x0XHQvKiByZWFkLXdyaXRlICovXG4mIzQzO307XG4mIzQzO1xuJiM0MztzdHJ1Y3QgenhkaF9wZl9wY2lfbm90aWZ5X2NhcCB7XG4mIzQzO1x0c3RydWN0IHp4ZGhfcGZfcGNpX2NhcCBjYXA7XG4mIzQzO1x0X19sZTMyIG5vdGlmeV9vZmZfbXVsdGlwbGllcjsgLyogTXVsdGlwbGllciBmb3IgcXVldWVfbm90aWZ5X29mZi4gKi9cbiYjNDM7fTtcbiYjNDM7XG4mIzQzOyNlbmRpZiAvKiBfX0RIX1FVRVVFX0hfXyAqL1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uODZkNDM3NDA4ODIwM1xuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuY1xuQEAgLTAsMCAmIzQzOzEsNDQ5IEBAXG4mIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiYjNDM7LypcbiYjNDM7ICogWlRFIERpbmdIYWkgRXRoZXJuZXQgZHJpdmVyXG4mIzQzOyAqIENvcHlyaWdodCAoYykgMjAyMi0yMDI2LCBaVEUgQ29ycG9yYXRpb24uXG4mIzQzOyAqL1xuJiM0MztcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvbW9kdWxlLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvcGNpLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbmV0L2RldmxpbmsuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9kbWEtbWFwcGluZy5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFwmIzM0O2VuX3BmLmhcJiMzNDtcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7ZGhfcXVldWUuaFwmIzM0O1xuJiM0MztcbiYjNDM7TU9EVUxFX0FVVEhPUihcJiMzNDtKdW55YW5nIEhhbiBcdTAwM2NoYW4uanVueWFuZ0B6dGUuY29tLmNuXHUwMDNlXCYjMzQ7KTtcbiYjNDM7TU9EVUxFX0RFU0NSSVBUSU9OKFwmIzM0O1pURSBEaW5nSGFpIHNlcmllcyBFdGhlcm5ldCBkcml2ZXJcJiMzNDspO1xuJiM0MztNT0RVTEVfTElDRU5TRShcJiMzNDtHUExcJiMzNDspO1xuJiM0MztcbiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBkZXZsaW5rX29wcyB6eGRoX3BmX2Rldmxpbmtfb3BzID0ge307XG4mIzQzO1xuJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgenhkaF9wZl9wY2lfdGFibGVbXSA9IHtcbiYjNDM7XHR7IFBDSV9ERVZJQ0UoWlhESF9QRl9WRU5ET1JfSUQsIFpYREhfUEZfREVWSUNFX0lEKSB9LFxuJiM0MztcdHsgUENJX0RFVklDRShaWERIX1BGX1ZFTkRPUl9JRCwgWlhESF9WRl9ERVZJQ0VfSUQpIH0sXG4mIzQzO1x0eyB9XG4mIzQzO307XG4mIzQzO1xuJiM0MztNT0RVTEVfREVWSUNFX1RBQkxFKHBjaSwgenhkaF9wZl9wY2lfdGFibGUpO1xuJiM0MztcbiYjNDM7dm9pZCAqenhkaF9jb3JlX2FsbG9jX3ByaXYoc3RydWN0IHp4ZGhfY29yZV9kZXYgKnp4ZGhfZGV2LCBzaXplX3Qgc2l6ZSlcbiYjNDM7e1xuJiM0MztcdHZvaWQgKnByaXYgPSBremFsbG9jKHNpemUsIEdGUF9LRVJORUwpO1xuJiM0MztcbiYjNDM7XHRpZiAocHJpdilcbiYjNDM7XHRcdHp4ZGhfZGV2LVx1MDAzZXByaXYgPSBwcml2O1xuJiM0MztcdHJldHVybiBwcml2O1xuJiM0Mzt9XG4mIzQzO1xuJiM0Mzt2b2lkIHp4ZGhfY29yZV9mcmVlX3ByaXYoc3RydWN0IHp4ZGhfY29yZV9kZXYgKnp4ZGhfZGV2KVxuJiM0Mzt7XG4mIzQzO1x0a2ZyZWUoenhkaF9kZXYtXHUwMDNlcHJpdik7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgenhkaF9wZl9wY2lfaW5pdChzdHJ1Y3QgenhkaF9jb3JlX2RldiAqenhkaF9kZXYpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgenhkaF9wZl9kZXYgKnBmX2RldiA9IHp4ZGhfZGV2LVx1MDAzZXByaXY7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0cGNpX3NldF9kcnZkYXRhKHp4ZGhfZGV2LVx1MDAzZXBkZXYsIHp4ZGhfZGV2KTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gcGNpX2VuYWJsZV9kZXZpY2UoenhkaF9kZXYtXHUwMDNlcGRldik7XG4mIzQzO1x0aWYgKHJldCkge1xuJiM0MztcdFx0ZGV2X2Vycih6eGRoX2Rldi1cdTAwM2VkZXZpY2UsIFwmIzM0O3BjaV9lbmFibGVfZGV2aWNlIGZhaWxlZDogJWRcXG5cJiMzNDssIHJldCk7XG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0ZG1hX3NldF9tYXNrX2FuZF9jb2hlcmVudCh6eGRoX2Rldi1cdTAwM2VkZXZpY2UsIERNQV9CSVRfTUFTSyg2NCkpO1xuJiM0MztcbiYjNDM7XHRyZXQgPSBwY2lfcmVxdWVzdF9zZWxlY3RlZF9yZWdpb25zKHp4ZGhfZGV2LVx1MDAzZXBkZXYsXG4mIzQzO1x0XHRcdFx0XHQgICBwY2lfc2VsZWN0X2JhcnMoenhkaF9kZXYtXHUwMDNlcGRldiwgSU9SRVNPVVJDRV9NRU0pLFxuJiM0MztcdFx0XHRcdFx0ICAgXCYjMzQ7ZGgtcGZcJiMzNDspO1xuJiM0MztcdGlmIChyZXQpIHtcbiYjNDM7XHRcdGRldl9lcnIoenhkaF9kZXYtXHUwMDNlZGV2aWNlLCBcJiMzNDtwY2lfcmVxdWVzdF9zZWxlY3RlZF9yZWdpb25zIGZhaWxlZDogJWRcXG5cJiMzNDssIHJldCk7XG4mIzQzO1x0XHRnb3RvIGVycl9wY2k7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRwY2lfc2V0X21hc3Rlcih6eGRoX2Rldi1cdTAwM2VwZGV2KTtcbiYjNDM7XHRyZXQgPSBwY2lfc2F2ZV9zdGF0ZSh6eGRoX2Rldi1cdTAwM2VwZGV2KTtcbiYjNDM7XHRpZiAocmV0KSB7XG4mIzQzO1x0XHRkZXZfZXJyKHp4ZGhfZGV2LVx1MDAzZWRldmljZSwgXCYjMzQ7cGNpX3NhdmVfc3RhdGUgZmFpbGVkOiAlZFxcblwmIzM0OywgcmV0KTtcbiYjNDM7XHRcdGdvdG8gZXJyX3BjaV9zYXZlX3N0YXRlO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKCEocGNpX3Jlc291cmNlX2ZsYWdzKHp4ZGhfZGV2LVx1MDAzZXBkZXYsIDApIFx1MDAyNiBJT1JFU09VUkNFX01FTSkpIHtcbiYjNDM7XHRcdHJldCA9IC1FTk9ERVY7XG4mIzQzO1x0XHRkZXZfZXJyKHp4ZGhfZGV2LVx1MDAzZWRldmljZSwgXCYjMzQ7QkFSIDAgaXMgbm90IGFuIE1NSU8gcmVzb3VyY2VcXG5cJiMzNDspO1xuJiM0MztcdFx0Z290byBlcnJfcGNpX3NhdmVfc3RhdGU7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRwZl9kZXYtXHUwMDNlcGNpX2lvcmVtYXBfYWRkclswXSA9XG4mIzQzO1x0XHRpb3JlbWFwKHBjaV9yZXNvdXJjZV9zdGFydCh6eGRoX2Rldi1cdTAwM2VwZGV2LCAwKSxcbiYjNDM7XHRcdFx0cGNpX3Jlc291cmNlX2xlbih6eGRoX2Rldi1cdTAwM2VwZGV2LCAwKSk7XG4mIzQzO1x0aWYgKCFwZl9kZXYtXHUwMDNlcGNpX2lvcmVtYXBfYWRkclswXSkge1xuJiM0MztcdFx0cmV0ID0gLUVOT01FTTtcbiYjNDM7XHRcdGRldl9lcnIoenhkaF9kZXYtXHUwMDNlZGV2aWNlLCBcJiMzNDtkaCBwZiBwY2kgaW9yZW1hcCBmYWlsZWRcXG5cJiMzNDspO1xuJiM0MztcdFx0Z290byBlcnJfcGNpX3NhdmVfc3RhdGU7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO2Vycl9wY2lfc2F2ZV9zdGF0ZTpcbiYjNDM7XHRwY2lfcmVsZWFzZV9zZWxlY3RlZF9yZWdpb25zKHp4ZGhfZGV2LVx1MDAzZXBkZXYsXG4mIzQzO1x0XHRcdFx0ICAgICBwY2lfc2VsZWN0X2JhcnMoenhkaF9kZXYtXHUwMDNlcGRldiwgSU9SRVNPVVJDRV9NRU0pKTtcbiYjNDM7ZXJyX3BjaTpcbiYjNDM7XHRwY2lfZGlzYWJsZV9kZXZpY2UoenhkaF9kZXYtXHUwMDNlcGRldik7XG4mIzQzO1x0cmV0dXJuIHJldDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7dm9pZCB6eGRoX3BmX3BjaV9jbG9zZShzdHJ1Y3QgenhkaF9jb3JlX2RldiAqenhkaF9kZXYpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgenhkaF9wZl9kZXYgKnBmX2RldiA9IHp4ZGhfZGV2LVx1MDAzZXByaXY7XG4mIzQzO1xuJiM0MztcdGlvdW5tYXAocGZfZGV2LVx1MDAzZXBjaV9pb3JlbWFwX2FkZHJbMF0pO1xuJiM0MztcdHBjaV9yZWxlYXNlX3NlbGVjdGVkX3JlZ2lvbnMoenhkaF9kZXYtXHUwMDNlcGRldixcbiYjNDM7XHRcdFx0XHQgICAgIHBjaV9zZWxlY3RfYmFycyh6eGRoX2Rldi1cdTAwM2VwZGV2LCBJT1JFU09VUkNFX01FTSkpO1xuJiM0MztcdHBjaV9kaXNhYmxlX2RldmljZSh6eGRoX2Rldi1cdTAwM2VwZGV2KTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7aW50IHp4ZGhfcGZfcGNpX2ZpbmRfY2FwYWJpbGl0eShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgdTggY2ZnX3R5cGUsXG4mIzQzO1x0XHRcdFx0dTMyIGlvcmVzb3VyY2VfdHlwZXMsIGludCAqYmFycylcbiYjNDM7e1xuJiM0MztcdGludCBwb3M7XG4mIzQzO1x0dTggdHlwZTtcbiYjNDM7XHR1OCBiYXI7XG4mIzQzO1xuJiM0MztcdGZvciAocG9zID0gcGNpX2ZpbmRfY2FwYWJpbGl0eShwZGV2LCBQQ0lfQ0FQX0lEX1ZORFIpOyBwb3MgXHUwMDNlIDA7XG4mIzQzO1x0ICAgICBwb3MgPSBwY2lfZmluZF9uZXh0X2NhcGFiaWxpdHkocGRldiwgcG9zLCBQQ0lfQ0FQX0lEX1ZORFIpKSB7XG4mIzQzO1x0XHRwY2lfcmVhZF9jb25maWdfYnl0ZShwZGV2LFxuJiM0MztcdFx0XHRcdCAgICAgcG9zICYjNDM7IG9mZnNldG9mKHN0cnVjdCB6eGRoX3BmX3BjaV9jYXAsXG4mIzQzO1x0XHRcdFx0XHRcdFx0Y2ZnX3R5cGUpLCBcdTAwMjZ0eXBlKTtcbiYjNDM7XHRcdHBjaV9yZWFkX2NvbmZpZ19ieXRlKHBkZXYsXG4mIzQzO1x0XHRcdFx0ICAgICBwb3MgJiM0Mzsgb2Zmc2V0b2Yoc3RydWN0IHp4ZGhfcGZfcGNpX2NhcCwgYmFyKSwgXHUwMDI2YmFyKTtcbiYjNDM7XG4mIzQzO1x0XHQvKiBpZ25vcmUgc3RydWN0dXJlcyB3aXRoIHJlc2VydmVkIEJBUiB2YWx1ZXMgKi9cbiYjNDM7XHRcdGlmIChiYXIgXHUwMDNlIFpYREhfUEZfTUFYX0JBUl9WQUwpXG4mIzQzO1x0XHRcdGNvbnRpbnVlO1xuJiM0MztcbiYjNDM7XHRcdGlmICh0eXBlID09IGNmZ190eXBlKSB7XG4mIzQzO1x0XHRcdGlmIChwY2lfcmVzb3VyY2VfbGVuKHBkZXYsIGJhcikgXHUwMDI2XHUwMDI2XG4mIzQzO1x0XHRcdCAgICBwY2lfcmVzb3VyY2VfZmxhZ3MocGRldiwgYmFyKSBcdTAwMjYgaW9yZXNvdXJjZV90eXBlcykge1xuJiM0MztcdFx0XHRcdCpiYXJzIHw9ICgxIFx1MDAzY1x1MDAzYyBiYXIpO1xuJiM0MztcdFx0XHRcdHJldHVybiBwb3M7XG4mIzQzO1x0XHRcdH1cbiYjNDM7XHRcdH1cbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0Mzt2b2lkIF9faW9tZW0gKnp4ZGhfcGZfbWFwX2NhcGFiaWxpdHkoc3RydWN0IHp4ZGhfY29yZV9kZXYgKnp4ZGhfZGV2LCBpbnQgb2ZmLFxuJiM0MztcdFx0XHRcdCAgICAgc2l6ZV90IG1pbmxlbiwgdTMyIGFsaWduLFxuJiM0MztcdFx0XHRcdCAgICAgdTMyIHN0YXJ0LCB1MzIgc2l6ZSxcbiYjNDM7XHRcdFx0XHQgICAgIHNpemVfdCAqbGVuLCByZXNvdXJjZV9zaXplX3QgKnBhLFxuJiM0MztcdFx0XHRcdCAgICAgdTMyICpiYXJfb2ZmKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHBjaV9kZXYgKnBkZXYgPSB6eGRoX2Rldi1cdTAwM2VwZGV2O1xuJiM0MztcdHZvaWQgX19pb21lbSAqcDtcbiYjNDM7XHR1MzIgb2Zmc2V0O1xuJiM0MztcdHUzMiBsZW5ndGg7XG4mIzQzO1x0dTggYmFyO1xuJiM0MztcbiYjNDM7XHRwY2lfcmVhZF9jb25maWdfYnl0ZShwZGV2LFxuJiM0MztcdFx0XHQgICAgIG9mZiAmIzQzOyBvZmZzZXRvZihzdHJ1Y3QgenhkaF9wZl9wY2lfY2FwLCBiYXIpLCBcdTAwMjZiYXIpO1xuJiM0MztcbiYjNDM7XHRpZiAoYmFyIFx1MDAzZSBaWERIX1BGX01BWF9CQVJfVkFMKSB7XG4mIzQzO1x0XHRkZXZfZXJyKHp4ZGhfZGV2LVx1MDAzZWRldmljZSwgXCYjMzQ7aW52YWxpZCBiYXIgJXVcXG5cJiMzNDssIGJhcik7XG4mIzQzO1x0XHRyZXR1cm4gTlVMTDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHBjaV9yZWFkX2NvbmZpZ19kd29yZChwZGV2LFxuJiM0MztcdFx0XHQgICAgICBvZmYgJiM0Mzsgb2Zmc2V0b2Yoc3RydWN0IHp4ZGhfcGZfcGNpX2NhcCxcbiYjNDM7XHRcdFx0XHRcdFx0b2Zmc2V0KSwgXHUwMDI2b2Zmc2V0KTtcbiYjNDM7XHRwY2lfcmVhZF9jb25maWdfZHdvcmQocGRldixcbiYjNDM7XHRcdFx0ICAgICAgb2ZmICYjNDM7IG9mZnNldG9mKHN0cnVjdCB6eGRoX3BmX3BjaV9jYXAsXG4mIzQzO1x0XHRcdFx0XHRcdGxlbmd0aCksIFx1MDAyNmxlbmd0aCk7XG4mIzQzO1xuJiM0MztcdGlmIChiYXJfb2ZmKVxuJiM0MztcdFx0KmJhcl9vZmYgPSBvZmZzZXQ7XG4mIzQzO1xuJiM0MztcdGlmIChsZW5ndGggXHUwMDNjPSBzdGFydCkge1xuJiM0MztcdFx0ZGV2X2Vycih6eGRoX2Rldi1cdTAwM2VkZXZpY2UsIFwmIzM0O2JhZCBjYXBhYmlsaXR5IGxlbiAldSAoXHUwMDNlJXUgZXhwZWN0ZWQpXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRsZW5ndGgsIHN0YXJ0KTtcbiYjNDM7XHRcdHJldHVybiBOVUxMO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKGxlbmd0aCAtIHN0YXJ0IFx1MDAzYyBtaW5sZW4pIHtcbiYjNDM7XHRcdGRldl9lcnIoenhkaF9kZXYtXHUwMDNlZGV2aWNlLCBcJiMzNDtiYWQgY2FwYWJpbGl0eSBsZW4gJXUgKFx1MDAzZT0lenUgZXhwZWN0ZWQpXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRsZW5ndGgsIG1pbmxlbik7XG4mIzQzO1x0XHRyZXR1cm4gTlVMTDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGxlbmd0aCAtPSBzdGFydDtcbiYjNDM7XHRpZiAoc3RhcnQgJiM0Mzsgb2Zmc2V0IFx1MDAzYyBvZmZzZXQpIHtcbiYjNDM7XHRcdGRldl9lcnIoenhkaF9kZXYtXHUwMDNlZGV2aWNlLCBcJiMzNDttYXAgd3JhcC1hcm91bmQgJXUmIzQzOyV1XFxuXCYjMzQ7LCBzdGFydCwgb2Zmc2V0KTtcbiYjNDM7XHRcdHJldHVybiBOVUxMO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0b2Zmc2V0ICYjNDM7PSBzdGFydDtcbiYjNDM7XHRpZiAob2Zmc2V0IFx1MDAyNiAoYWxpZ24gLSAxKSkge1xuJiM0MztcdFx0ZGV2X2Vycih6eGRoX2Rldi1cdTAwM2VkZXZpY2UsIFwmIzM0O29mZnNldCAldSBub3QgYWxpZ25lZCB0byAldVxcblwmIzM0Oywgb2Zmc2V0LCBhbGlnbik7XG4mIzQzO1x0XHRyZXR1cm4gTlVMTDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmIChsZW5ndGggXHUwMDNlIHNpemUpXG4mIzQzO1x0XHRsZW5ndGggPSBzaXplO1xuJiM0MztcbiYjNDM7XHRpZiAobGVuKVxuJiM0MztcdFx0KmxlbiA9IGxlbmd0aDtcbiYjNDM7XG4mIzQzO1x0aWYgKGxlbmd0aCAmIzQzOyBvZmZzZXQgXHUwMDNjIG9mZnNldCB8fFxuJiM0MztcdCAgICBsZW5ndGggJiM0Mzsgb2Zmc2V0IFx1MDAzZSBwY2lfcmVzb3VyY2VfbGVuKHBkZXYsIGJhcikpIHtcbiYjNDM7XHRcdGRldl9lcnIoenhkaF9kZXYtXHUwMDNlZGV2aWNlLFxuJiM0MztcdFx0XHRcJiMzNDttYXAgJXVAJXUgb3V0IG9mIHJhbmdlIG9uIGJhciAldSBsZW5ndGggJWx1XFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRsZW5ndGgsIG9mZnNldCwgYmFyLFxuJiM0MztcdFx0XHQodW5zaWduZWQgbG9uZylwY2lfcmVzb3VyY2VfbGVuKHBkZXYsIGJhcikpO1xuJiM0MztcdFx0cmV0dXJuIE5VTEw7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRwID0gcGNpX2lvbWFwX3JhbmdlKHBkZXYsIGJhciwgb2Zmc2V0LCBsZW5ndGgpO1xuJiM0MztcdGlmICghcCkge1xuJiM0MztcdFx0ZGV2X2Vycih6eGRoX2Rldi1cdTAwM2VkZXZpY2UsIFwmIzM0O3VuYWJsZSB0byBtYXAgY3VzdG9tIHF1ZXVlICV1QCV1IG9uIGJhciAldVxcblwmIzM0OyxcbiYjNDM7XHRcdFx0bGVuZ3RoLCBvZmZzZXQsIGJhcik7XG4mIzQzO1x0fSBlbHNlIGlmIChwYSkge1xuJiM0MztcdFx0KnBhID0gcGNpX3Jlc291cmNlX3N0YXJ0KHBkZXYsIGJhcikgJiM0Mzsgb2Zmc2V0O1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO2ludCB6eGRoX3BmX2NvbW1vbl9jZmdfaW5pdChzdHJ1Y3QgenhkaF9jb3JlX2RldiAqenhkaF9kZXYpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgenhkaF9wZl9kZXYgKnBmX2RldiA9IHp4ZGhfZGV2LVx1MDAzZXByaXY7XG4mIzQzO1x0c3RydWN0IHBjaV9kZXYgKnBkZXYgPSB6eGRoX2Rldi1cdTAwM2VwZGV2O1xuJiM0MztcdGludCBjb21tb247XG4mIzQzO1xuJiM0MztcdC8qIGNoZWNrIGZvciBhIGNvbW1vbiBjb25maWc6IGlmIG5vdCwgdXNlIGxlZ2FjeSBtb2RlIChiYXIgMCkuICovXG4mIzQzO1x0Y29tbW9uID0genhkaF9wZl9wY2lfZmluZF9jYXBhYmlsaXR5KHBkZXYsIFpYREhfUENJX0NBUF9DT01NT05fQ0ZHLFxuJiM0MztcdFx0XHRcdFx0ICAgICBJT1JFU09VUkNFX01FTSxcbiYjNDM7XHRcdFx0XHRcdCAgICAgXHUwMDI2cGZfZGV2LVx1MDAzZW1vZGVybl9iYXJzKTtcbiYjNDM7XHRpZiAoIWNvbW1vbikge1xuJiM0MztcdFx0ZGV2X2Vycih6eGRoX2Rldi1cdTAwM2VkZXZpY2UsXG4mIzQzO1x0XHRcdFwmIzM0O21pc3NpbmcgY2FwYWJpbGl0aWVzLCBsZWF2aW5nIGZvciBsZWdhY3kgZHJpdmVyXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdHJldHVybiAtRU5PREVWO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cGZfZGV2LVx1MDAzZWNvbW1vbiA9IHp4ZGhfcGZfbWFwX2NhcGFiaWxpdHkoenhkaF9kZXYsIGNvbW1vbixcbiYjNDM7XHRcdFx0XHRcdFx0c2l6ZW9mKHN0cnVjdCB6eGRoX3BmX3BjaV9jb21tb25fY2ZnKSxcbiYjNDM7XHRcdFx0XHRcdFx0WlhESF9QRl9BTElHTjQsIDAsXG4mIzQzO1x0XHRcdFx0XHRcdHNpemVvZihzdHJ1Y3QgenhkaF9wZl9wY2lfY29tbW9uX2NmZyksXG4mIzQzO1x0XHRcdFx0XHRcdE5VTEwsIE5VTEwsIE5VTEwpO1xuJiM0MztcdGlmICghcGZfZGV2LVx1MDAzZWNvbW1vbikge1xuJiM0MztcdFx0ZGV2X2Vycih6eGRoX2Rldi1cdTAwM2VkZXZpY2UsIFwmIzM0O3BmX2Rldi1cdTAwM2Vjb21tb24gaXMgbnVsbFxcblwmIzM0Oyk7XG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztpbnQgenhkaF9wZl9ub3RpZnlfY2ZnX2luaXQoc3RydWN0IHp4ZGhfY29yZV9kZXYgKnp4ZGhfZGV2KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHp4ZGhfcGZfZGV2ICpwZl9kZXYgPSB6eGRoX2Rldi1cdTAwM2Vwcml2O1xuJiM0MztcdHN0cnVjdCBwY2lfZGV2ICpwZGV2ID0genhkaF9kZXYtXHUwMDNlcGRldjtcbiYjNDM7XHR1MzIgbm90aWZ5X2xlbmd0aDtcbiYjNDM7XHR1MzIgbm90aWZ5X29mZnNldDtcbiYjNDM7XHRpbnQgbm90aWZ5O1xuJiM0MztcbiYjNDM7XHQvKiBJZiBjb21tb24gaXMgdGhlcmUsIHRoZXNlIHNob3VsZCBiZSB0b28uLi4gKi9cbiYjNDM7XHRub3RpZnkgPSB6eGRoX3BmX3BjaV9maW5kX2NhcGFiaWxpdHkocGRldiwgWlhESF9QQ0lfQ0FQX05PVElGWV9DRkcsXG4mIzQzO1x0XHRcdFx0XHQgICAgIElPUkVTT1VSQ0VfTUVNLFxuJiM0MztcdFx0XHRcdFx0ICAgICBcdTAwMjZwZl9kZXYtXHUwMDNlbW9kZXJuX2JhcnMpO1xuJiM0MztcdGlmICghbm90aWZ5KSB7XG4mIzQzO1x0XHRkZXZfZXJyKHp4ZGhfZGV2LVx1MDAzZWRldmljZSwgXCYjMzQ7bWlzc2luZyBub3RpZnkgY2ZnIGNhcGFiaWxpdHlcXG5cJiMzNDspO1xuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRwY2lfcmVhZF9jb25maWdfZHdvcmQocGRldixcbiYjNDM7XHRcdFx0ICAgICAgbm90aWZ5ICYjNDM7IG9mZnNldG9mKHN0cnVjdCB6eGRoX3BmX3BjaV9ub3RpZnlfY2FwLFxuJiM0MztcdFx0XHRcdG5vdGlmeV9vZmZfbXVsdGlwbGllciksXG4mIzQzO1x0XHRcdTAwMjZwZl9kZXYtXHUwMDNlbm90aWZ5X29mZnNldF9tdWx0aXBsaWVyKTtcbiYjNDM7XHRwY2lfcmVhZF9jb25maWdfZHdvcmQocGRldixcbiYjNDM7XHRcdFx0ICAgICAgbm90aWZ5ICYjNDM7IG9mZnNldG9mKHN0cnVjdCB6eGRoX3BmX3BjaV9ub3RpZnlfY2FwLFxuJiM0MztcdFx0XHRcdGNhcC5sZW5ndGgpLCBcdTAwMjZub3RpZnlfbGVuZ3RoKTtcbiYjNDM7XHRwY2lfcmVhZF9jb25maWdfZHdvcmQocGRldixcbiYjNDM7XHRcdFx0ICAgICAgbm90aWZ5ICYjNDM7IG9mZnNldG9mKHN0cnVjdCB6eGRoX3BmX3BjaV9ub3RpZnlfY2FwLFxuJiM0MztcdFx0XHRcdGNhcC5vZmZzZXQpLCBcdTAwMjZub3RpZnlfb2Zmc2V0KTtcbiYjNDM7XG4mIzQzO1x0LyogV2UgZG9uJiMzOTt0IGtub3cgaG93IG1hbnkgVlFzIHdlJiMzOTtsbCBtYXAsIGFoZWFkIG9mIHRoZSB0aW1lLlxuJiM0MztcdCAqIElmIG5vdGlmeSBsZW5ndGggaXMgc21hbGwsIG1hcCBpdCBhbGwgbm93LiBPdGhlcndpc2UsXG4mIzQzO1x0ICogbWFwIGVhY2ggVlEgaW5kaXZpZHVhbGx5IGxhdGVyLlxuJiM0MztcdCAqL1xuJiM0MztcdGlmIChub3RpZnlfbGVuZ3RoIFx1MDAzYz0gUEFHRV9TSVpFIC0gKG5vdGlmeV9vZmZzZXQgJSBQQUdFX1NJWkUpKSB7XG4mIzQzO1x0XHRwZl9kZXYtXHUwMDNlbm90aWZ5X2Jhc2UgPSB6eGRoX3BmX21hcF9jYXBhYmlsaXR5KHp4ZGhfZGV2LCBub3RpZnksXG4mIzQzO1x0XHRcdFx0XHRcdFx0ICAgICBaWERIX1BGX01BUF9NSU5MRU4yLFxuJiM0MztcdFx0XHRcdFx0XHRcdCAgICBaWERIX1BGX0FMSUdOMiwgMCxcbiYjNDM7XHRcdFx0XHRcdFx0XHQgICAgbm90aWZ5X2xlbmd0aCxcbiYjNDM7XHRcdFx0XHRcdFx0XHQgICAgXHUwMDI2cGZfZGV2LVx1MDAzZW5vdGlmeV9sZW4sXG4mIzQzO1x0XHRcdFx0XHRcdFx0ICAgIFx1MDAyNnBmX2Rldi1cdTAwM2Vub3RpZnlfcGEsIE5VTEwpO1xuJiM0MztcdFx0aWYgKCFwZl9kZXYtXHUwMDNlbm90aWZ5X2Jhc2UpIHtcbiYjNDM7XHRcdFx0ZGV2X2Vycih6eGRoX2Rldi1cdTAwM2VkZXZpY2UsIFwmIzM0O3BmX2Rldi1cdTAwM2Vub3RpZnlfYmFzZSBpcyBudWxsXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1x0XHR9XG4mIzQzO1x0fSBlbHNlIHtcbiYjNDM7XHRcdHBmX2Rldi1cdTAwM2Vub3RpZnlfbWFwX2NhcCA9IG5vdGlmeTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztpbnQgenhkaF9wZl9kZXZpY2VfY2ZnX2luaXQoc3RydWN0IHp4ZGhfY29yZV9kZXYgKnp4ZGhfZGV2KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHp4ZGhfcGZfZGV2ICpwZl9kZXYgPSB6eGRoX2Rldi1cdTAwM2Vwcml2O1xuJiM0MztcdHN0cnVjdCBwY2lfZGV2ICpwZGV2ID0genhkaF9kZXYtXHUwMDNlcGRldjtcbiYjNDM7XHRpbnQgZGV2aWNlO1xuJiM0MztcbiYjNDM7XHQvKiBEZXZpY2UgY2FwYWJpbGl0eSBpcyBvbmx5IG1hbmRhdG9yeSBmb3JcbiYjNDM7XHQgKiBkZXZpY2VzIHRoYXQgaGF2ZSBkZXZpY2Utc3BlY2lmaWMgY29uZmlndXJhdGlvbi5cbiYjNDM7XHQgKi9cbiYjNDM7XHRkZXZpY2UgPSB6eGRoX3BmX3BjaV9maW5kX2NhcGFiaWxpdHkocGRldiwgWlhESF9QQ0lfQ0FQX0RFVklDRV9DRkcsXG4mIzQzO1x0XHRcdFx0XHQgICAgIElPUkVTT1VSQ0VfTUVNLFxuJiM0MztcdFx0XHRcdFx0ICAgICBcdTAwMjZwZl9kZXYtXHUwMDNlbW9kZXJuX2JhcnMpO1xuJiM0MztcbiYjNDM7XHQvKiB3ZSBkb24mIzM5O3Qga25vdyBob3cgbXVjaCB3ZSBzaG91bGQgbWFwLFxuJiM0MztcdCAqIGJ1dCBQQUdFX1NJWkUgaXMgbW9yZSB0aGFuIGVub3VnaCBmb3IgYWxsIGV4aXN0aW5nIGRldmljZXMuXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKGRldmljZSkge1xuJiM0MztcdFx0cGZfZGV2LVx1MDAzZWRldmljZSA9IHp4ZGhfcGZfbWFwX2NhcGFiaWxpdHkoenhkaF9kZXYsIGRldmljZSwgMCxcbiYjNDM7XHRcdFx0XHRcdFx0XHRaWERIX1BGX0FMSUdONCwgMCwgUEFHRV9TSVpFLFxuJiM0MztcdFx0XHRcdFx0XHQgICAgICAgXHUwMDI2cGZfZGV2LVx1MDAzZWRldmljZV9sZW4sIE5VTEwsXG4mIzQzO1x0XHRcdFx0XHRcdCAgICAgICBcdTAwMjZwZl9kZXYtXHUwMDNlZGV2X2NmZ19iYXJfb2ZmKTtcbiYjNDM7XHRcdGlmICghcGZfZGV2LVx1MDAzZWRldmljZSkge1xuJiM0MztcdFx0XHRkZXZfZXJyKHp4ZGhfZGV2LVx1MDAzZWRldmljZSwgXCYjMzQ7cGZfZGV2LVx1MDAzZWRldmljZSBpcyBudWxsXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1x0XHR9XG4mIzQzO1x0fVxuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0Mzt2b2lkIHp4ZGhfcGZfbW9kZXJuX2NmZ191bmluaXQoc3RydWN0IHp4ZGhfY29yZV9kZXYgKnp4ZGhfZGV2KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHp4ZGhfcGZfZGV2ICpwZl9kZXYgPSB6eGRoX2Rldi1cdTAwM2Vwcml2O1xuJiM0MztcdHN0cnVjdCBwY2lfZGV2ICpwZGV2ID0genhkaF9kZXYtXHUwMDNlcGRldjtcbiYjNDM7XG4mIzQzO1x0aWYgKHBmX2Rldi1cdTAwM2VkZXZpY2UpXG4mIzQzO1x0XHRwY2lfaW91bm1hcChwZGV2LCBwZl9kZXYtXHUwMDNlZGV2aWNlKTtcbiYjNDM7XHRpZiAocGZfZGV2LVx1MDAzZW5vdGlmeV9iYXNlKVxuJiM0MztcdFx0cGNpX2lvdW5tYXAocGRldiwgcGZfZGV2LVx1MDAzZW5vdGlmeV9iYXNlKTtcbiYjNDM7XHRwY2lfaW91bm1hcChwZGV2LCBwZl9kZXYtXHUwMDNlY29tbW9uKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7aW50IHp4ZGhfcGZfbW9kZXJuX2NmZ19pbml0KHN0cnVjdCB6eGRoX2NvcmVfZGV2ICp6eGRoX2RldilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB6eGRoX3BmX2RldiAqcGZfZGV2ID0genhkaF9kZXYtXHUwMDNlcHJpdjtcbiYjNDM7XHRzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IHp4ZGhfZGV2LVx1MDAzZXBkZXY7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0cmV0ID0genhkaF9wZl9jb21tb25fY2ZnX2luaXQoenhkaF9kZXYpO1xuJiM0MztcdGlmIChyZXQpIHtcbiYjNDM7XHRcdGRldl9lcnIoenhkaF9kZXYtXHUwMDNlZGV2aWNlLCBcJiMzNDt6eGRoX3BmX2NvbW1vbl9jZmdfaW5pdCBmYWlsZWQ6ICVkXFxuXCYjMzQ7LCByZXQpO1xuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldCA9IHp4ZGhfcGZfbm90aWZ5X2NmZ19pbml0KHp4ZGhfZGV2KTtcbiYjNDM7XHRpZiAocmV0KSB7XG4mIzQzO1x0XHRkZXZfZXJyKHp4ZGhfZGV2LVx1MDAzZWRldmljZSwgXCYjMzQ7enhkaF9wZl9ub3RpZnlfY2ZnX2luaXQgZmFpbGVkOiAlZFxcblwmIzM0OywgcmV0KTtcbiYjNDM7XHRcdGdvdG8gZXJyX21hcF9ub3RpZnk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXQgPSB6eGRoX3BmX2RldmljZV9jZmdfaW5pdCh6eGRoX2Rldik7XG4mIzQzO1x0aWYgKHJldCkge1xuJiM0MztcdFx0ZGV2X2Vycih6eGRoX2Rldi1cdTAwM2VkZXZpY2UsIFwmIzM0O3p4ZGhfcGZfZGV2aWNlX2NmZ19pbml0IGZhaWxlZDogJWRcXG5cJiMzNDssIHJldCk7XG4mIzQzO1x0XHRnb3RvIGVycl9tYXBfZGV2aWNlO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztlcnJfbWFwX2RldmljZTpcbiYjNDM7XHRpZiAocGZfZGV2LVx1MDAzZW5vdGlmeV9iYXNlKVxuJiM0MztcdFx0cGNpX2lvdW5tYXAocGRldiwgcGZfZGV2LVx1MDAzZW5vdGlmeV9iYXNlKTtcbiYjNDM7ZXJyX21hcF9ub3RpZnk6XG4mIzQzO1x0cGNpX2lvdW5tYXAocGRldiwgcGZfZGV2LVx1MDAzZWNvbW1vbik7XG4mIzQzO1x0cmV0dXJuIHJldDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCB6eGRoX3BmX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqaWQpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgenhkaF9jb3JlX2RldiAqenhkaF9kZXY7XG4mIzQzO1x0c3RydWN0IHp4ZGhfcGZfZGV2ICpwZl9kZXY7XG4mIzQzO1x0c3RydWN0IGRldmxpbmsgKmRldmxpbms7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0ZGV2bGluayA9IGRldmxpbmtfYWxsb2MoXHUwMDI2enhkaF9wZl9kZXZsaW5rX29wcywgc2l6ZW9mKHN0cnVjdCB6eGRoX2NvcmVfZGV2KSxcbiYjNDM7XHRcdFx0XHRcdTAwMjZwZGV2LVx1MDAzZWRldik7XG4mIzQzO1x0aWYgKCFkZXZsaW5rKVxuJiM0MztcdFx0cmV0dXJuIC1FTk9NRU07XG4mIzQzO1xuJiM0MztcdHp4ZGhfZGV2ID0gZGV2bGlua19wcml2KGRldmxpbmspO1xuJiM0MztcdHp4ZGhfZGV2LVx1MDAzZWRldmljZSA9IFx1MDAyNnBkZXYtXHUwMDNlZGV2O1xuJiM0MztcdHp4ZGhfZGV2LVx1MDAzZXBkZXYgPSBwZGV2O1xuJiM0MztcdHp4ZGhfZGV2LVx1MDAzZWRldmxpbmsgPSBkZXZsaW5rO1xuJiM0MztcbiYjNDM7XHRwZl9kZXYgPSB6eGRoX2NvcmVfYWxsb2NfcHJpdih6eGRoX2Rldiwgc2l6ZW9mKCpwZl9kZXYpKTtcbiYjNDM7XHRpZiAoIXBmX2Rldikge1xuJiM0MztcdFx0ZGV2X2VycihcdTAwMjZwZGV2LVx1MDAzZWRldiwgXCYjMzQ7enhkaF9wZl9kZXYgYWxsb2MgZmFpbGVkXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdHJldCA9IC1FTk9NRU07XG4mIzQzO1x0XHRnb3RvIGVycl9wZl9kZXY7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXQgPSB6eGRoX3BmX3BjaV9pbml0KHp4ZGhfZGV2KTtcbiYjNDM7XHRpZiAocmV0KSB7XG4mIzQzO1x0XHRkZXZfZXJyKFx1MDAyNnBkZXYtXHUwMDNlZGV2LCBcJiMzNDt6eGRoX3BmX3BjaV9pbml0IGZhaWxlZDogJWRcXG5cJiMzNDssIHJldCk7XG4mIzQzO1x0XHRnb3RvIGVycl9wY2lfaW5pdDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldCA9IHp4ZGhfcGZfbW9kZXJuX2NmZ19pbml0KHp4ZGhfZGV2KTtcbiYjNDM7XHRpZiAocmV0KSB7XG4mIzQzO1x0XHRkZXZfZXJyKFx1MDAyNnBkZXYtXHUwMDNlZGV2LCBcJiMzNDt6eGRoX3BmX21vZGVybl9jZmdfaW5pdCBmYWlsZWQ6ICVkXFxuXCYjMzQ7LCByZXQpO1xuJiM0MztcdFx0Z290byBlcnJfY2ZnX2luaXQ7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRkZXZsaW5rX3JlZ2lzdGVyKGRldmxpbmspO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO2Vycl9jZmdfaW5pdDpcbiYjNDM7XHR6eGRoX3BmX3BjaV9jbG9zZSh6eGRoX2Rldik7XG4mIzQzO2Vycl9wY2lfaW5pdDpcbiYjNDM7XHR6eGRoX2NvcmVfZnJlZV9wcml2KHp4ZGhfZGV2KTtcbiYjNDM7ZXJyX3BmX2RldjpcbiYjNDM7XHRkZXZsaW5rX2ZyZWUoZGV2bGluayk7XG4mIzQzO1x0cmV0dXJuIHJldDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgenhkaF9wZl9yZW1vdmUoc3RydWN0IHBjaV9kZXYgKnBkZXYpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgenhkaF9jb3JlX2RldiAqenhkaF9kZXYgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7XG4mIzQzO1x0c3RydWN0IGRldmxpbmsgKmRldmxpbmsgPSBwcml2X3RvX2RldmxpbmsoenhkaF9kZXYpO1xuJiM0MztcbiYjNDM7XHRkZXZsaW5rX3VucmVnaXN0ZXIoZGV2bGluayk7XG4mIzQzO1x0enhkaF9wZl9tb2Rlcm5fY2ZnX3VuaW5pdCh6eGRoX2Rldik7XG4mIzQzO1x0enhkaF9wZl9wY2lfY2xvc2UoenhkaF9kZXYpO1xuJiM0MztcdHp4ZGhfY29yZV9mcmVlX3ByaXYoenhkaF9kZXYpO1xuJiM0MztcdGRldmxpbmtfZnJlZShkZXZsaW5rKTtcbiYjNDM7XHRwY2lfc2V0X2RydmRhdGEocGRldiwgTlVMTCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIHp4ZGhfcGZfc2h1dGRvd24oc3RydWN0IHBjaV9kZXYgKnBkZXYpXG4mIzQzO3tcbiYjNDM7XHRpZiAoc3lzdGVtX3N0YXRlID09IFNZU1RFTV9QT1dFUl9PRkYpXG4mIzQzO1x0XHRwY2lfc2V0X3Bvd2VyX3N0YXRlKHBkZXYsIFBDSV9EM2hvdCk7XG4mIzQzO1x0cGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgenhkaF9wZl9kcml2ZXIgPSB7XG4mIzQzO1x0Lm5hbWUgPSBcJiMzNDtkaW5naGFpMTBlXCYjMzQ7LFxuJiM0MztcdC5pZF90YWJsZSA9IHp4ZGhfcGZfcGNpX3RhYmxlLFxuJiM0MztcdC5wcm9iZSA9IHp4ZGhfcGZfcHJvYmUsXG4mIzQzO1x0LnJlbW92ZSA9IHp4ZGhfcGZfcmVtb3ZlLFxuJiM0MztcdC5zaHV0ZG93biA9IHp4ZGhfcGZfc2h1dGRvd24sXG4mIzQzO307XG4mIzQzO1xuJiM0Mzttb2R1bGVfcGNpX2RyaXZlcih6eGRoX3BmX2RyaXZlcik7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmhcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwLi43MzczZGVlOGQxYTlmXG4tLS0gL2Rldi9udWxsXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5oXG5AQCAtMCwwICYjNDM7MSw3NSBAQFxuJiM0MzsvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5ICovXG4mIzQzOy8qXG4mIzQzOyAqIFpURSBEaW5nSGFpIEV0aGVybmV0IGRyaXZlciAtIFBGIGhlYWRlclxuJiM0MzsgKiBDb3B5cmlnaHQgKGMpIDIwMjItMjAyNiwgWlRFIENvcnBvcmF0aW9uLlxuJiM0MzsgKi9cbiYjNDM7XG4mIzQzOyNpZm5kZWYgX19aWERIX0VOX1BGX0hfX1xuJiM0MzsjZGVmaW5lIF9fWlhESF9FTl9QRl9IX19cbiYjNDM7XG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3R5cGVzLmhcdTAwM2VcbiYjNDM7XG4mIzQzOyNkZWZpbmUgWlhESF9QRl9WRU5ET1JfSURcdDB4MWNmMlxuJiM0MzsjZGVmaW5lIFpYREhfUEZfREVWSUNFX0lEXHQweDgwNDBcbiYjNDM7I2RlZmluZSBaWERIX1ZGX0RFVklDRV9JRFx0MHg4MDQxXG4mIzQzO1xuJiM0MzsvKiBDb21tb24gY29uZmlndXJhdGlvbiAqL1xuJiM0MzsjZGVmaW5lIFpYREhfUENJX0NBUF9DT01NT05fQ0ZHXHQxXG4mIzQzOy8qIE5vdGlmaWNhdGlvbnMgKi9cbiYjNDM7I2RlZmluZSBaWERIX1BDSV9DQVBfTk9USUZZX0NGR1x0MlxuJiM0MzsvKiBJU1IgYWNjZXNzICovXG4mIzQzOyNkZWZpbmUgWlhESF9QQ0lfQ0FQX0lTUl9DRkdcdFx0M1xuJiM0MzsvKiBEZXZpY2Ugc3BlY2lmaWMgY29uZmlndXJhdGlvbiAqL1xuJiM0MzsjZGVmaW5lIFpYREhfUENJX0NBUF9ERVZJQ0VfQ0ZHXHQ0XG4mIzQzOy8qIFBDSSBjb25maWd1cmF0aW9uIGFjY2VzcyAqL1xuJiM0MzsjZGVmaW5lIFpYREhfUENJX0NBUF9QQ0lfQ0ZHXHRcdDVcbiYjNDM7XG4mIzQzOyNkZWZpbmUgWlhESF9QRl9NQVhfQkFSX1ZBTFx0XHQweDVcbiYjNDM7I2RlZmluZSBaWERIX1BGX0FMSUdONFx0XHRcdDRcbiYjNDM7I2RlZmluZSBaWERIX1BGX0FMSUdOMlx0XHRcdDJcbiYjNDM7I2RlZmluZSBaWERIX1BGX01BUF9NSU5MRU4yXHRcdDJcbiYjNDM7XG4mIzQzO3N0cnVjdCB6eGRoX2NvcmVfZGV2IHtcbiYjNDM7XHRzdHJ1Y3QgZGV2aWNlICpkZXZpY2U7XG4mIzQzO1x0c3RydWN0IHBjaV9kZXYgKnBkZXY7XG4mIzQzO1x0c3RydWN0IGRldmxpbmsgKmRldmxpbms7XG4mIzQzO1x0dm9pZCAqcHJpdjtcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO3N0cnVjdCB6eGRoX3BmX2RldiB7XG4mIzQzO1x0c3RydWN0IHp4ZGhfcGZfcGNpX2NvbW1vbl9jZmcgX19pb21lbSAqY29tbW9uO1xuJiM0MztcdC8qIERldmljZS1zcGVjaWZpYyBkYXRhIChub24tbGVnYWN5IG1vZGUpICAqL1xuJiM0MztcdC8qIEJhc2Ugb2YgdnEgbm90aWZpY2F0aW9ucyAobm9uLWxlZ2FjeSBtb2RlKS4gKi9cbiYjNDM7XHR2b2lkIF9faW9tZW0gKmRldmljZTtcbiYjNDM7XHR2b2lkIF9faW9tZW0gKm5vdGlmeV9iYXNlO1xuJiM0MztcdC8qIFBoeXNpY2FsIGJhc2Ugb2YgdnEgbm90aWZpY2F0aW9ucyAqL1xuJiM0MztcdHJlc291cmNlX3NpemVfdCBub3RpZnlfcGE7XG4mIzQzO1x0LyogU28gd2UgY2FuIHNhbml0eS1jaGVjayBhY2Nlc3Nlcy4gKi9cbiYjNDM7XHRzaXplX3Qgbm90aWZ5X2xlbjtcbiYjNDM7XHRzaXplX3QgZGV2aWNlX2xlbjtcbiYjNDM7XHQvKiBDYXBhYmlsaXR5IGZvciB3aGVuIHdlIG5lZWQgdG8gbWFwIG5vdGlmaWNhdGlvbnMgcGVyLXZxLiAqL1xuJiM0MztcdHMzMiBub3RpZnlfbWFwX2NhcDtcbiYjNDM7XHR1MzIgbm90aWZ5X29mZnNldF9tdWx0aXBsaWVyO1xuJiM0MztcdC8qIE11bHRpcGx5IHF1ZXVlX25vdGlmeV9vZmYgYnkgdGhpcyB2YWx1ZS4gKG5vbi1sZWdhY3kgbW9kZSkuICovXG4mIzQzO1x0czMyIG1vZGVybl9iYXJzO1xuJiM0MztcdHZvaWQgX19pb21lbSAqcGNpX2lvcmVtYXBfYWRkcls2XTtcbiYjNDM7XHR1MzIgZGV2X2NmZ19iYXJfb2ZmO1xuJiM0Mzt9O1xuJiM0MztcbiYjNDM7dm9pZCAqenhkaF9jb3JlX2FsbG9jX3ByaXYoc3RydWN0IHp4ZGhfY29yZV9kZXYgKnp4ZGhfZGV2LCBzaXplX3Qgc2l6ZSk7XG4mIzQzO3ZvaWQgenhkaF9jb3JlX2ZyZWVfcHJpdihzdHJ1Y3QgenhkaF9jb3JlX2RldiAqenhkaF9kZXYpO1xuJiM0Mzt2b2lkIHp4ZGhfcGZfcGNpX2Nsb3NlKHN0cnVjdCB6eGRoX2NvcmVfZGV2ICp6eGRoX2Rldik7XG4mIzQzO2ludCB6eGRoX3BmX3BjaV9maW5kX2NhcGFiaWxpdHkoc3RydWN0IHBjaV9kZXYgKnBkZXYsIHU4IGNmZ190eXBlLFxuJiM0MztcdFx0XHRcdHUzMiBpb3Jlc291cmNlX3R5cGVzLCBpbnQgKmJhcnMpO1xuJiM0Mzt2b2lkIF9faW9tZW0gKnp4ZGhfcGZfbWFwX2NhcGFiaWxpdHkoc3RydWN0IHp4ZGhfY29yZV9kZXYgKnp4ZGhfZGV2LCBpbnQgb2ZmLFxuJiM0MztcdFx0XHRcdCAgICAgc2l6ZV90IG1pbmxlbiwgdTMyIGFsaWduLFxuJiM0MztcdFx0XHRcdCAgICAgdTMyIHN0YXJ0LCB1MzIgc2l6ZSxcbiYjNDM7XHRcdFx0XHQgICAgIHNpemVfdCAqbGVuLCByZXNvdXJjZV9zaXplX3QgKnBhLFxuJiM0MztcdFx0XHRcdCAgICAgdTMyICpiYXJfb2ZmKTtcbiYjNDM7aW50IHp4ZGhfcGZfY29tbW9uX2NmZ19pbml0KHN0cnVjdCB6eGRoX2NvcmVfZGV2ICp6eGRoX2Rldik7XG4mIzQzO2ludCB6eGRoX3BmX25vdGlmeV9jZmdfaW5pdChzdHJ1Y3QgenhkaF9jb3JlX2RldiAqenhkaF9kZXYpO1xuJiM0MztpbnQgenhkaF9wZl9kZXZpY2VfY2ZnX2luaXQoc3RydWN0IHp4ZGhfY29yZV9kZXYgKnp4ZGhfZGV2KTtcbiYjNDM7dm9pZCB6eGRoX3BmX21vZGVybl9jZmdfdW5pbml0KHN0cnVjdCB6eGRoX2NvcmVfZGV2ICp6eGRoX2Rldik7XG4mIzQzO2ludCB6eGRoX3BmX21vZGVybl9jZmdfaW5pdChzdHJ1Y3QgenhkaF9jb3JlX2RldiAqenhkaF9kZXYpO1xuJiM0MztcbiYjNDM7I2VuZGlmIC8qIF9fWlhESF9FTl9QRl9IX18gKi9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAxNzo0MTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyB2ZW5kb3Itc3BlY2lmaWMgUENJZSBFdGhlcm5ldCBkcml2ZXIgKFpURSBEaW5nSGFpKS4gVGhpcyBkcml2ZXIgcmVxdWlyZXMgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSB0aGF0IGlzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLCBtYWtpbmcgaXQgdW5yZWFjaGFibGUgYW5kIHVudGVzdGFibGUgaW4gdmlydHVhbGl6ZWQgZnV6emluZyBlbnZpcm9ubWVudHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNTljYzE0Mjc0NzUzNmQxZmEyYWMxYzUzZmE0YmMzMTQ0NTc5MWViMgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTdW4gQXVnIDIgMTc6NDE6MzEgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9NQUlOVEFJTkVSUyBiL01BSU5UQUlORVJTCmluZGV4IDJmYjFjNzVhZmQxNjMuLjczNjkyYjA5YmY3YmEgMTAwNjQ0Ci0tLSBhL01BSU5UQUlORVJTCiYjNDM7JiM0MzsmIzQzOyBiL01BSU5UQUlORVJTCkBAIC0yOTQ0MCw2ICYjNDM7Mjk0NDAsMTIgQEAgUzoJTWFpbnRhaW5lZAogVDoJZ2l0IGdpdDovL2dpdC5rZXJuZWwub3JnL3B1Yi9zY20vbGludXgva2VybmVsL2dpdC90aXdhaS9zb3VuZC5naXQKIEY6CXNvdW5kL2hkYS9jb2RlY3Mvc2VuYXJ5dGVjaC5jCiAKJiM0MztaVEUgRElOR0hBSSBFVEhFUk5FVCBEUklWRVIKJiM0MztNOglKdW55YW5nIEhhbiAmbHQ7aGFuLmp1bnlhbmdAenRlLmNvbS5jbiZndDsKJiM0MztMOgluZXRkZXZAdmdlci5rZXJuZWwub3JnCiYjNDM7UzoJTWFpbnRhaW5lZAomIzQzO0Y6CWRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS8KJiM0MzsKIFRIRSBSRVNUCiBNOglMaW51cyBUb3J2YWxkcyAmbHQ7dG9ydmFsZHNAbGludXgtZm91bmRhdGlvbi5vcmcmZ3Q7CiBMOglsaW51eC1rZXJuZWxAdmdlci5rZXJuZWwub3JnCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9LY29uZmlnIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvS2NvbmZpZwppbmRleCBiOGY3MGUyYTE3NjNhLi5jMmI2OTk2YjBjZmUxIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9LY29uZmlnCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L0tjb25maWcKQEAgLTE4OCw1ICYjNDM7MTg4LDYgQEAgc291cmNlICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9LY29uZmlnJiMzNDsKIHNvdXJjZSAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L3dpem5ldC9LY29uZmlnJiMzNDsKIHNvdXJjZSAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L3hpbGlueC9LY29uZmlnJiMzNDsKIHNvdXJjZSAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L3hpcmNvbS9LY29uZmlnJiMzNDsKJiM0Mztzb3VyY2UgJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvS2NvbmZpZyYjMzQ7CiAKIGVuZGlmICMgRVRIRVJORVQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L01ha2VmaWxlIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvTWFrZWZpbGUKaW5kZXggNTczNDRmZWM2Y2UwNC4uYTM0YmNiZDRkZjRlOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvTWFrZWZpbGUKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvTWFrZWZpbGUKQEAgLTEwNCwzICYjNDM7MTA0LDQgQEAgb2JqLSQoQ09ORklHX05FVF9WRU5ET1JfWElSQ09NKSAmIzQzOz0geGlyY29tLwogb2JqLSQoQ09ORklHX05FVF9WRU5ET1JfU1lOT1BTWVMpICYjNDM7PSBzeW5vcHN5cy8KIG9iai0kKENPTkZJR19ORVRfVkVORE9SX1BFTlNBTkRPKSAmIzQzOz0gcGVuc2FuZG8vCiBvYmotJChDT05GSUdfT0FfVEM2KSAmIzQzOz0gb2FfdGM2Lm8KJiM0MztvYmotJChDT05GSUdfTkVUX1ZFTkRPUl9aVEUpICYjNDM7PSB6dGUvCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvS2NvbmZpZyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9LY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAuLmI5NWMyZmM3ZGI3N2EKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvS2NvbmZpZwpAQCAtMCwwICYjNDM7MSwyMCBAQAomIzQzOyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seQomIzQzOyMKJiM0MzsjIFpURSBkcml2ZXIgY29uZmlndXJhdGlvbgomIzQzOyMKJiM0MzsKJiM0Mztjb25maWcgTkVUX1ZFTkRPUl9aVEUKJiM0MzsgICAgYm9vbCAmIzM0O1pURSBkZXZpY2VzJiMzNDsKJiM0MzsgICAgZGVmYXVsdCB5CiYjNDM7ICAgIGhlbHAKJiM0MzsgICAgICBJZiB5b3UgaGF2ZSBhIG5ldHdvcmsgKEV0aGVybmV0KSBjYXJkIGJlbG9uZ2luZyB0byB0aGlzIGNsYXNzLCBzYXkgWS4KJiM0MzsgICAgICBOb3RlIHRoYXQgdGhlIGFuc3dlciB0byB0aGlzIHF1ZXN0aW9uIGRvZXNuJiMzOTt0IGRpcmVjdGx5IGFmZmVjdCB0aGUKJiM0MzsgICAgICBrZXJuZWw6IHNheWluZyBOIHdpbGwganVzdCBjYXVzZSB0aGUgY29uZmlndXJhdG9yIHRvIHNraXAgYWxsCiYjNDM7ICAgICAgdGhlIHF1ZXN0aW9ucyBhYm91dCBadGUgY2FyZHMuIElmIHlvdSBzYXkgWSwgeW91IHdpbGwgYmUgYXNrZWQKJiM0MzsgICAgICBmb3IgeW91ciBzcGVjaWZpYyBjYXJkIGluIHRoZSBmb2xsb3dpbmcgcXVlc3Rpb25zLgomIzQzOwomIzQzO2lmIE5FVF9WRU5ET1JfWlRFCiYjNDM7CiYjNDM7c291cmNlICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvS2NvbmZpZyYjMzQ7CiYjNDM7CiYjNDM7ZW5kaWYgIyBORVRfVkVORE9SX1pURQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL01ha2VmaWxlIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAuLmNkOTkyOWI2MTU1OWMKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvTWFrZWZpbGUKQEAgLTAsMCAmIzQzOzEsNiBAQAomIzQzOyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seQomIzQzOyMKJiM0MzsjIE1ha2VmaWxlIGZvciB0aGUgWlRFIGRldmljZSBkcml2ZXJzCiYjNDM7IwomIzQzOwomIzQzO29iai0kKENPTkZJR19ESU5HSEFJKSAmIzQzOz0gZGluZ2hhaS8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL0tjb25maWcgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9LY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAuLjEyMWJlM2JmNzcwN2YKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9LY29uZmlnCkBAIC0wLDAgJiM0MzsxLDM0IEBACiYjNDM7IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5CiYjNDM7IwomIzQzOyMgWlRFIERpbmdIYWkgRXRoZXJuZXQgZHJpdmVyIGNvbmZpZ3VyYXRpb24KJiM0MzsjCiYjNDM7CiYjNDM7Y29uZmlnIERJTkdIQUkKJiM0MzsgICAgYm9vbCAmIzM0O1pURSBEaW5nSGFpIEV0aGVybmV0IGRyaXZlciYjMzQ7CiYjNDM7ICAgIGRlcGVuZHMgb24gUENJCiYjNDM7ICAgIHNlbGVjdCBORVRfREVWTElOSwomIzQzOyAgICBoZWxwCiYjNDM7ICAgICAgVGhpcyBkcml2ZXIgc3VwcG9ydHMgWlRFIERpbmdIYWkgRXRoZXJuZXQgZGV2aWNlcy4KJiM0MzsKJiM0MzsgICAgICBEaW5nSGFpIGlzIGEgaGlnaC1wZXJmb3JtYW5jZSBFdGhlcm5ldCBjb250cm9sbGVyIHRoYXQgc3VwcG9ydHMKJiM0MzsgICAgICBtdWx0aXBsZSBmZWF0dXJlcyBpbmNsdWRpbmcgaGFyZHdhcmUgb2ZmbG9hZGluZywgU1ItSU9WLCBhbmQKJiM0MzsgICAgICBhZHZhbmNlZCB2aXJ0dWFsaXphdGlvbiBjYXBhYmlsaXRpZXMuCiYjNDM7CiYjNDM7ICAgICAgSWYgeW91IHNheSBZIGhlcmUsIHlvdSBjYW4gc2VsZWN0IHNwZWNpZmljIGRyaXZlciB2YXJpYW50cyBiZWxvdy4KJiM0MzsKJiM0MzsgICAgICBJZiB1bnN1cmUsIHNheSBOLgomIzQzOwomIzQzO2lmIERJTkdIQUkKJiM0MzsKJiM0Mztjb25maWcgRElOR0hBSV9QRgomIzQzOyAgICB0cmlzdGF0ZSAmIzM0O1pURSBEaW5nSGFpIFBGIChQaHlzaWNhbCBGdW5jdGlvbikgZHJpdmVyJiMzNDsKJiM0MzsgICAgaGVscAomIzQzOyAgICAgIFRoaXMgZHJpdmVyIHN1cHBvcnRzIFpURSBEaW5nSGFpIFBDSSBFeHByZXNzIEV0aGVybmV0CiYjNDM7ICAgICAgYWRhcHRlcnMgKFBGKS4KJiM0MzsKJiM0MzsgICAgICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlLiBUaGUgbW9kdWxlCiYjNDM7ICAgICAgd2lsbCBiZSBuYW1lZCBkaW5naGFpMTBlLgomIzQzOwomIzQzOyAgICAgIElmIHVuc3VyZSwgc2F5IE4uCiYjNDM7CiYjNDM7ZW5kaWYgIyBESU5HSEFJCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9NYWtlZmlsZSBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAuLmUyZjRkYTMzZGY1OTMKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9NYWtlZmlsZQpAQCAtMCwwICYjNDM7MSw3IEBACiYjNDM7IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5CiYjNDM7IwomIzQzOyMgTWFrZWZpbGUgZm9yIFpURSBEaW5nSGFpIEV0aGVybmV0IGRyaXZlcgomIzQzOyMKJiM0MzsKJiM0MztvYmotJChDT05GSUdfRElOR0hBSV9QRikgJiM0Mzs9IGRpbmdoYWkxMGUubwomIzQzO2RpbmdoYWkxMGUteSA6PSBlbl9wZi5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9kaF9xdWV1ZS5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZGhfcXVldWUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwLi41YjYzODk1YzFlYTFlCi0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZGhfcXVldWUuaApAQCAtMCwwICYjNDM7MSw1NiBAQAomIzQzOy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHkgKi8KJiM0MzsvKgomIzQzOyAqIFpURSBEaW5nSGFpIEV0aGVybmV0IGRyaXZlciAtIFBDSSBjYXBhYmlsaXR5IGRlZmluaXRpb25zCiYjNDM7ICogQ29weXJpZ2h0IChjKSAyMDIyLTIwMjYsIFpURSBDb3Jwb3JhdGlvbi4KJiM0MzsgKi8KJiM0MzsKJiM0MzsjaWZuZGVmIF9fREhfUVVFVUVfSF9fCiYjNDM7I2RlZmluZSBfX0RIX1FVRVVFX0hfXwomIzQzOwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC90eXBlcy5oJmd0OwomIzQzOwomIzQzOy8qIFRoaXMgaXMgdGhlIFBDSSBjYXBhYmlsaXR5IGhlYWRlcjogKi8KJiM0MztzdHJ1Y3QgenhkaF9wZl9wY2lfY2FwIHsKJiM0MzsJX191OCBjYXBfdm5kcjsJCS8qIEdlbmVyaWMgUENJIGZpZWxkOiBQQ0lfQ0FQX0lEX1ZORFIgKi8KJiM0MzsJX191OCBjYXBfbmV4dDsJCS8qIEdlbmVyaWMgUENJIGZpZWxkOiBuZXh0IHB0ci4gKi8KJiM0MzsJX191OCBjYXBfbGVuOwkJLyogR2VuZXJpYyBQQ0kgZmllbGQ6IGNhcGFiaWxpdHkgbGVuZ3RoICovCiYjNDM7CV9fdTggY2ZnX3R5cGU7CQkvKiBJZGVudGlmaWVzIHRoZSBzdHJ1Y3R1cmUuICovCiYjNDM7CV9fdTggYmFyOwkJLyogV2hlcmUgdG8gZmluZCBpdC4gKi8KJiM0MzsJX191OCBpZDsJCS8qIE11bHRpcGxlIGNhcGFiaWxpdGllcyBvZiB0aGUgc2FtZSB0eXBlICovCiYjNDM7CV9fdTggcGFkZGluZ1syXTsJCS8qIFBhZCB0byBmdWxsIGR3b3JkLiAqLwomIzQzOwlfX2xlMzIgb2Zmc2V0OwkJLyogT2Zmc2V0IHdpdGhpbiBiYXIuICovCiYjNDM7CV9fbGUzMiBsZW5ndGg7CQkvKiBMZW5ndGggb2YgdGhlIHN0cnVjdHVyZSwgaW4gYnl0ZXMuICovCiYjNDM7fTsKJiM0MzsKJiM0MzsvKiBGaWVsZHMgaW4gWlhESF9QRl9QQ0lfQ0FQX0NPTU1PTl9DRkc6ICovCiYjNDM7c3RydWN0IHp4ZGhfcGZfcGNpX2NvbW1vbl9jZmcgewomIzQzOwkvKiBBYm91dCB0aGUgd2hvbGUgZGV2aWNlLiAqLwomIzQzOwlfX2xlMzIgZGV2aWNlX2ZlYXR1cmVfc2VsZWN0OyAvKiByZWFkLXdyaXRlICovCiYjNDM7CV9fbGUzMiBkZXZpY2VfZmVhdHVyZTsJLyogcmVhZC1vbmx5ICovCiYjNDM7CV9fbGUzMiBndWVzdF9mZWF0dXJlX3NlbGVjdDsgLyogcmVhZC13cml0ZSAqLwomIzQzOwlfX2xlMzIgZ3Vlc3RfZmVhdHVyZTsJCS8qIHJlYWQtd3JpdGUgKi8KJiM0MzsJX19sZTE2IG1zaXhfY29uZmlnOwkJLyogcmVhZC13cml0ZSAqLwomIzQzOwlfX2xlMTYgbnVtX3F1ZXVlczsJCS8qIHJlYWQtb25seSAqLwomIzQzOwlfX3U4IGRldmljZV9zdGF0dXM7CQkvKiByZWFkLXdyaXRlICovCiYjNDM7CV9fdTggY29uZmlnX2dlbmVyYXRpb247CS8qIHJlYWQtb25seSAqLwomIzQzOwomIzQzOwkvKiBBYm91dCBhIHNwZWNpZmljIHZpcnRxdWV1ZS4gKi8KJiM0MzsJX19sZTE2IHF1ZXVlX3NlbGVjdDsJCS8qIHJlYWQtd3JpdGUgKi8KJiM0MzsJX19sZTE2IHF1ZXVlX3NpemU7CQkvKiByZWFkLXdyaXRlLCBwb3dlciBvZiAyLiAqLwomIzQzOwlfX2xlMTYgcXVldWVfbXNpeF92ZWN0b3I7CS8qIHJlYWQtd3JpdGUgKi8KJiM0MzsJX19sZTE2IHF1ZXVlX2VuYWJsZTsJCS8qIHJlYWQtd3JpdGUgKi8KJiM0MzsJX19sZTE2IHF1ZXVlX25vdGlmeV9vZmY7CS8qIHJlYWQtb25seSAqLwomIzQzOwlfX2xlMzIgcXVldWVfZGVzY19sbzsJCS8qIHJlYWQtd3JpdGUgKi8KJiM0MzsJX19sZTMyIHF1ZXVlX2Rlc2NfaGk7CQkvKiByZWFkLXdyaXRlICovCiYjNDM7CV9fbGUzMiBxdWV1ZV9hdmFpbF9sbzsJCS8qIHJlYWQtd3JpdGUgKi8KJiM0MzsJX19sZTMyIHF1ZXVlX2F2YWlsX2hpOwkJLyogcmVhZC13cml0ZSAqLwomIzQzOwlfX2xlMzIgcXVldWVfdXNlZF9sbzsJCS8qIHJlYWQtd3JpdGUgKi8KJiM0MzsJX19sZTMyIHF1ZXVlX3VzZWRfaGk7CQkvKiByZWFkLXdyaXRlICovCiYjNDM7fTsKJiM0MzsKJiM0MztzdHJ1Y3QgenhkaF9wZl9wY2lfbm90aWZ5X2NhcCB7CiYjNDM7CXN0cnVjdCB6eGRoX3BmX3BjaV9jYXAgY2FwOwomIzQzOwlfX2xlMzIgbm90aWZ5X29mZl9tdWx0aXBsaWVyOyAvKiBNdWx0aXBsaWVyIGZvciBxdWV1ZV9ub3RpZnlfb2ZmLiAqLwomIzQzO307CiYjNDM7CiYjNDM7I2VuZGlmIC8qIF9fREhfUVVFVUVfSF9fICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwLi44NmQ0Mzc0MDg4MjAzCi0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYwpAQCAtMCwwICYjNDM7MSw0NDkgQEAKJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5CiYjNDM7LyoKJiM0MzsgKiBaVEUgRGluZ0hhaSBFdGhlcm5ldCBkcml2ZXIKJiM0MzsgKiBDb3B5cmlnaHQgKGMpIDIwMjItMjAyNiwgWlRFIENvcnBvcmF0aW9uLgomIzQzOyAqLwomIzQzOwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9tb2R1bGUuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvcGNpLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O25ldC9kZXZsaW5rLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2RtYS1tYXBwaW5nLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJiMzNDtlbl9wZi5oJiMzNDsKJiM0MzsjaW5jbHVkZSAmIzM0O2RoX3F1ZXVlLmgmIzM0OwomIzQzOwomIzQzO01PRFVMRV9BVVRIT1IoJiMzNDtKdW55YW5nIEhhbiAmbHQ7aGFuLmp1bnlhbmdAenRlLmNvbS5jbiZndDsmIzM0Oyk7CiYjNDM7TU9EVUxFX0RFU0NSSVBUSU9OKCYjMzQ7WlRFIERpbmdIYWkgc2VyaWVzIEV0aGVybmV0IGRyaXZlciYjMzQ7KTsKJiM0MztNT0RVTEVfTElDRU5TRSgmIzM0O0dQTCYjMzQ7KTsKJiM0MzsKJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IGRldmxpbmtfb3BzIHp4ZGhfcGZfZGV2bGlua19vcHMgPSB7fTsKJiM0MzsKJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgenhkaF9wZl9wY2lfdGFibGVbXSA9IHsKJiM0MzsJeyBQQ0lfREVWSUNFKFpYREhfUEZfVkVORE9SX0lELCBaWERIX1BGX0RFVklDRV9JRCkgfSwKJiM0MzsJeyBQQ0lfREVWSUNFKFpYREhfUEZfVkVORE9SX0lELCBaWERIX1ZGX0RFVklDRV9JRCkgfSwKJiM0MzsJeyB9CiYjNDM7fTsKJiM0MzsKJiM0MztNT0RVTEVfREVWSUNFX1RBQkxFKHBjaSwgenhkaF9wZl9wY2lfdGFibGUpOwomIzQzOwomIzQzO3ZvaWQgKnp4ZGhfY29yZV9hbGxvY19wcml2KHN0cnVjdCB6eGRoX2NvcmVfZGV2ICp6eGRoX2Rldiwgc2l6ZV90IHNpemUpCiYjNDM7ewomIzQzOwl2b2lkICpwcml2ID0ga3phbGxvYyhzaXplLCBHRlBfS0VSTkVMKTsKJiM0MzsKJiM0MzsJaWYgKHByaXYpCiYjNDM7CQl6eGRoX2Rldi0mZ3Q7cHJpdiA9IHByaXY7CiYjNDM7CXJldHVybiBwcml2OwomIzQzO30KJiM0MzsKJiM0Mzt2b2lkIHp4ZGhfY29yZV9mcmVlX3ByaXYoc3RydWN0IHp4ZGhfY29yZV9kZXYgKnp4ZGhfZGV2KQomIzQzO3sKJiM0MzsJa2ZyZWUoenhkaF9kZXYtJmd0O3ByaXYpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IHp4ZGhfcGZfcGNpX2luaXQoc3RydWN0IHp4ZGhfY29yZV9kZXYgKnp4ZGhfZGV2KQomIzQzO3sKJiM0MzsJc3RydWN0IHp4ZGhfcGZfZGV2ICpwZl9kZXYgPSB6eGRoX2Rldi0mZ3Q7cHJpdjsKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJcGNpX3NldF9kcnZkYXRhKHp4ZGhfZGV2LSZndDtwZGV2LCB6eGRoX2Rldik7CiYjNDM7CiYjNDM7CXJldCA9IHBjaV9lbmFibGVfZGV2aWNlKHp4ZGhfZGV2LSZndDtwZGV2KTsKJiM0MzsJaWYgKHJldCkgewomIzQzOwkJZGV2X2Vycih6eGRoX2Rldi0mZ3Q7ZGV2aWNlLCAmIzM0O3BjaV9lbmFibGVfZGV2aWNlIGZhaWxlZDogJWRcbiYjMzQ7LCByZXQpOwomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsJfQomIzQzOwomIzQzOwlkbWFfc2V0X21hc2tfYW5kX2NvaGVyZW50KHp4ZGhfZGV2LSZndDtkZXZpY2UsIERNQV9CSVRfTUFTSyg2NCkpOwomIzQzOwomIzQzOwlyZXQgPSBwY2lfcmVxdWVzdF9zZWxlY3RlZF9yZWdpb25zKHp4ZGhfZGV2LSZndDtwZGV2LAomIzQzOwkJCQkJICAgcGNpX3NlbGVjdF9iYXJzKHp4ZGhfZGV2LSZndDtwZGV2LCBJT1JFU09VUkNFX01FTSksCiYjNDM7CQkJCQkgICAmIzM0O2RoLXBmJiMzNDspOwomIzQzOwlpZiAocmV0KSB7CiYjNDM7CQlkZXZfZXJyKHp4ZGhfZGV2LSZndDtkZXZpY2UsICYjMzQ7cGNpX3JlcXVlc3Rfc2VsZWN0ZWRfcmVnaW9ucyBmYWlsZWQ6ICVkXG4mIzM0OywgcmV0KTsKJiM0MzsJCWdvdG8gZXJyX3BjaTsKJiM0MzsJfQomIzQzOwomIzQzOwlwY2lfc2V0X21hc3Rlcih6eGRoX2Rldi0mZ3Q7cGRldik7CiYjNDM7CXJldCA9IHBjaV9zYXZlX3N0YXRlKHp4ZGhfZGV2LSZndDtwZGV2KTsKJiM0MzsJaWYgKHJldCkgewomIzQzOwkJZGV2X2Vycih6eGRoX2Rldi0mZ3Q7ZGV2aWNlLCAmIzM0O3BjaV9zYXZlX3N0YXRlIGZhaWxlZDogJWRcbiYjMzQ7LCByZXQpOwomIzQzOwkJZ290byBlcnJfcGNpX3NhdmVfc3RhdGU7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKCEocGNpX3Jlc291cmNlX2ZsYWdzKHp4ZGhfZGV2LSZndDtwZGV2LCAwKSAmYW1wOyBJT1JFU09VUkNFX01FTSkpIHsKJiM0MzsJCXJldCA9IC1FTk9ERVY7CiYjNDM7CQlkZXZfZXJyKHp4ZGhfZGV2LSZndDtkZXZpY2UsICYjMzQ7QkFSIDAgaXMgbm90IGFuIE1NSU8gcmVzb3VyY2VcbiYjMzQ7KTsKJiM0MzsJCWdvdG8gZXJyX3BjaV9zYXZlX3N0YXRlOwomIzQzOwl9CiYjNDM7CiYjNDM7CXBmX2Rldi0mZ3Q7cGNpX2lvcmVtYXBfYWRkclswXSA9CiYjNDM7CQlpb3JlbWFwKHBjaV9yZXNvdXJjZV9zdGFydCh6eGRoX2Rldi0mZ3Q7cGRldiwgMCksCiYjNDM7CQkJcGNpX3Jlc291cmNlX2xlbih6eGRoX2Rldi0mZ3Q7cGRldiwgMCkpOwomIzQzOwlpZiAoIXBmX2Rldi0mZ3Q7cGNpX2lvcmVtYXBfYWRkclswXSkgewomIzQzOwkJcmV0ID0gLUVOT01FTTsKJiM0MzsJCWRldl9lcnIoenhkaF9kZXYtJmd0O2RldmljZSwgJiMzNDtkaCBwZiBwY2kgaW9yZW1hcCBmYWlsZWRcbiYjMzQ7KTsKJiM0MzsJCWdvdG8gZXJyX3BjaV9zYXZlX3N0YXRlOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzOwomIzQzO2Vycl9wY2lfc2F2ZV9zdGF0ZToKJiM0MzsJcGNpX3JlbGVhc2Vfc2VsZWN0ZWRfcmVnaW9ucyh6eGRoX2Rldi0mZ3Q7cGRldiwKJiM0MzsJCQkJICAgICBwY2lfc2VsZWN0X2JhcnMoenhkaF9kZXYtJmd0O3BkZXYsIElPUkVTT1VSQ0VfTUVNKSk7CiYjNDM7ZXJyX3BjaToKJiM0MzsJcGNpX2Rpc2FibGVfZGV2aWNlKHp4ZGhfZGV2LSZndDtwZGV2KTsKJiM0MzsJcmV0dXJuIHJldDsKJiM0Mzt9CiYjNDM7CiYjNDM7dm9pZCB6eGRoX3BmX3BjaV9jbG9zZShzdHJ1Y3QgenhkaF9jb3JlX2RldiAqenhkaF9kZXYpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgenhkaF9wZl9kZXYgKnBmX2RldiA9IHp4ZGhfZGV2LSZndDtwcml2OwomIzQzOwomIzQzOwlpb3VubWFwKHBmX2Rldi0mZ3Q7cGNpX2lvcmVtYXBfYWRkclswXSk7CiYjNDM7CXBjaV9yZWxlYXNlX3NlbGVjdGVkX3JlZ2lvbnMoenhkaF9kZXYtJmd0O3BkZXYsCiYjNDM7CQkJCSAgICAgcGNpX3NlbGVjdF9iYXJzKHp4ZGhfZGV2LSZndDtwZGV2LCBJT1JFU09VUkNFX01FTSkpOwomIzQzOwlwY2lfZGlzYWJsZV9kZXZpY2UoenhkaF9kZXYtJmd0O3BkZXYpOwomIzQzO30KJiM0MzsKJiM0MztpbnQgenhkaF9wZl9wY2lfZmluZF9jYXBhYmlsaXR5KHN0cnVjdCBwY2lfZGV2ICpwZGV2LCB1OCBjZmdfdHlwZSwKJiM0MzsJCQkJdTMyIGlvcmVzb3VyY2VfdHlwZXMsIGludCAqYmFycykKJiM0Mzt7CiYjNDM7CWludCBwb3M7CiYjNDM7CXU4IHR5cGU7CiYjNDM7CXU4IGJhcjsKJiM0MzsKJiM0MzsJZm9yIChwb3MgPSBwY2lfZmluZF9jYXBhYmlsaXR5KHBkZXYsIFBDSV9DQVBfSURfVk5EUik7IHBvcyAmZ3Q7IDA7CiYjNDM7CSAgICAgcG9zID0gcGNpX2ZpbmRfbmV4dF9jYXBhYmlsaXR5KHBkZXYsIHBvcywgUENJX0NBUF9JRF9WTkRSKSkgewomIzQzOwkJcGNpX3JlYWRfY29uZmlnX2J5dGUocGRldiwKJiM0MzsJCQkJICAgICBwb3MgJiM0Mzsgb2Zmc2V0b2Yoc3RydWN0IHp4ZGhfcGZfcGNpX2NhcCwKJiM0MzsJCQkJCQkJY2ZnX3R5cGUpLCAmYW1wO3R5cGUpOwomIzQzOwkJcGNpX3JlYWRfY29uZmlnX2J5dGUocGRldiwKJiM0MzsJCQkJICAgICBwb3MgJiM0Mzsgb2Zmc2V0b2Yoc3RydWN0IHp4ZGhfcGZfcGNpX2NhcCwgYmFyKSwgJmFtcDtiYXIpOwomIzQzOwomIzQzOwkJLyogaWdub3JlIHN0cnVjdHVyZXMgd2l0aCByZXNlcnZlZCBCQVIgdmFsdWVzICovCiYjNDM7CQlpZiAoYmFyICZndDsgWlhESF9QRl9NQVhfQkFSX1ZBTCkKJiM0MzsJCQljb250aW51ZTsKJiM0MzsKJiM0MzsJCWlmICh0eXBlID09IGNmZ190eXBlKSB7CiYjNDM7CQkJaWYgKHBjaV9yZXNvdXJjZV9sZW4ocGRldiwgYmFyKSAmYW1wOyZhbXA7CiYjNDM7CQkJICAgIHBjaV9yZXNvdXJjZV9mbGFncyhwZGV2LCBiYXIpICZhbXA7IGlvcmVzb3VyY2VfdHlwZXMpIHsKJiM0MzsJCQkJKmJhcnMgfD0gKDEgJmx0OyZsdDsgYmFyKTsKJiM0MzsJCQkJcmV0dXJuIHBvczsKJiM0MzsJCQl9CiYjNDM7CQl9CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3ZvaWQgX19pb21lbSAqenhkaF9wZl9tYXBfY2FwYWJpbGl0eShzdHJ1Y3QgenhkaF9jb3JlX2RldiAqenhkaF9kZXYsIGludCBvZmYsCiYjNDM7CQkJCSAgICAgc2l6ZV90IG1pbmxlbiwgdTMyIGFsaWduLAomIzQzOwkJCQkgICAgIHUzMiBzdGFydCwgdTMyIHNpemUsCiYjNDM7CQkJCSAgICAgc2l6ZV90ICpsZW4sIHJlc291cmNlX3NpemVfdCAqcGEsCiYjNDM7CQkJCSAgICAgdTMyICpiYXJfb2ZmKQomIzQzO3sKJiM0MzsJc3RydWN0IHBjaV9kZXYgKnBkZXYgPSB6eGRoX2Rldi0mZ3Q7cGRldjsKJiM0MzsJdm9pZCBfX2lvbWVtICpwOwomIzQzOwl1MzIgb2Zmc2V0OwomIzQzOwl1MzIgbGVuZ3RoOwomIzQzOwl1OCBiYXI7CiYjNDM7CiYjNDM7CXBjaV9yZWFkX2NvbmZpZ19ieXRlKHBkZXYsCiYjNDM7CQkJICAgICBvZmYgJiM0Mzsgb2Zmc2V0b2Yoc3RydWN0IHp4ZGhfcGZfcGNpX2NhcCwgYmFyKSwgJmFtcDtiYXIpOwomIzQzOwomIzQzOwlpZiAoYmFyICZndDsgWlhESF9QRl9NQVhfQkFSX1ZBTCkgewomIzQzOwkJZGV2X2Vycih6eGRoX2Rldi0mZ3Q7ZGV2aWNlLCAmIzM0O2ludmFsaWQgYmFyICV1XG4mIzM0OywgYmFyKTsKJiM0MzsJCXJldHVybiBOVUxMOwomIzQzOwl9CiYjNDM7CiYjNDM7CXBjaV9yZWFkX2NvbmZpZ19kd29yZChwZGV2LAomIzQzOwkJCSAgICAgIG9mZiAmIzQzOyBvZmZzZXRvZihzdHJ1Y3QgenhkaF9wZl9wY2lfY2FwLAomIzQzOwkJCQkJCW9mZnNldCksICZhbXA7b2Zmc2V0KTsKJiM0MzsJcGNpX3JlYWRfY29uZmlnX2R3b3JkKHBkZXYsCiYjNDM7CQkJICAgICAgb2ZmICYjNDM7IG9mZnNldG9mKHN0cnVjdCB6eGRoX3BmX3BjaV9jYXAsCiYjNDM7CQkJCQkJbGVuZ3RoKSwgJmFtcDtsZW5ndGgpOwomIzQzOwomIzQzOwlpZiAoYmFyX29mZikKJiM0MzsJCSpiYXJfb2ZmID0gb2Zmc2V0OwomIzQzOwomIzQzOwlpZiAobGVuZ3RoICZsdDs9IHN0YXJ0KSB7CiYjNDM7CQlkZXZfZXJyKHp4ZGhfZGV2LSZndDtkZXZpY2UsICYjMzQ7YmFkIGNhcGFiaWxpdHkgbGVuICV1ICgmZ3Q7JXUgZXhwZWN0ZWQpXG4mIzM0OywKJiM0MzsJCQlsZW5ndGgsIHN0YXJ0KTsKJiM0MzsJCXJldHVybiBOVUxMOwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmIChsZW5ndGggLSBzdGFydCAmbHQ7IG1pbmxlbikgewomIzQzOwkJZGV2X2Vycih6eGRoX2Rldi0mZ3Q7ZGV2aWNlLCAmIzM0O2JhZCBjYXBhYmlsaXR5IGxlbiAldSAoJmd0Oz0lenUgZXhwZWN0ZWQpXG4mIzM0OywKJiM0MzsJCQlsZW5ndGgsIG1pbmxlbik7CiYjNDM7CQlyZXR1cm4gTlVMTDsKJiM0MzsJfQomIzQzOwomIzQzOwlsZW5ndGggLT0gc3RhcnQ7CiYjNDM7CWlmIChzdGFydCAmIzQzOyBvZmZzZXQgJmx0OyBvZmZzZXQpIHsKJiM0MzsJCWRldl9lcnIoenhkaF9kZXYtJmd0O2RldmljZSwgJiMzNDttYXAgd3JhcC1hcm91bmQgJXUmIzQzOyV1XG4mIzM0Oywgc3RhcnQsIG9mZnNldCk7CiYjNDM7CQlyZXR1cm4gTlVMTDsKJiM0MzsJfQomIzQzOwomIzQzOwlvZmZzZXQgJiM0Mzs9IHN0YXJ0OwomIzQzOwlpZiAob2Zmc2V0ICZhbXA7IChhbGlnbiAtIDEpKSB7CiYjNDM7CQlkZXZfZXJyKHp4ZGhfZGV2LSZndDtkZXZpY2UsICYjMzQ7b2Zmc2V0ICV1IG5vdCBhbGlnbmVkIHRvICV1XG4mIzM0Oywgb2Zmc2V0LCBhbGlnbik7CiYjNDM7CQlyZXR1cm4gTlVMTDsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAobGVuZ3RoICZndDsgc2l6ZSkKJiM0MzsJCWxlbmd0aCA9IHNpemU7CiYjNDM7CiYjNDM7CWlmIChsZW4pCiYjNDM7CQkqbGVuID0gbGVuZ3RoOwomIzQzOwomIzQzOwlpZiAobGVuZ3RoICYjNDM7IG9mZnNldCAmbHQ7IG9mZnNldCB8fAomIzQzOwkgICAgbGVuZ3RoICYjNDM7IG9mZnNldCAmZ3Q7IHBjaV9yZXNvdXJjZV9sZW4ocGRldiwgYmFyKSkgewomIzQzOwkJZGV2X2Vycih6eGRoX2Rldi0mZ3Q7ZGV2aWNlLAomIzQzOwkJCSYjMzQ7bWFwICV1QCV1IG91dCBvZiByYW5nZSBvbiBiYXIgJXUgbGVuZ3RoICVsdVxuJiMzNDssCiYjNDM7CQkJbGVuZ3RoLCBvZmZzZXQsIGJhciwKJiM0MzsJCQkodW5zaWduZWQgbG9uZylwY2lfcmVzb3VyY2VfbGVuKHBkZXYsIGJhcikpOwomIzQzOwkJcmV0dXJuIE5VTEw7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcCA9IHBjaV9pb21hcF9yYW5nZShwZGV2LCBiYXIsIG9mZnNldCwgbGVuZ3RoKTsKJiM0MzsJaWYgKCFwKSB7CiYjNDM7CQlkZXZfZXJyKHp4ZGhfZGV2LSZndDtkZXZpY2UsICYjMzQ7dW5hYmxlIHRvIG1hcCBjdXN0b20gcXVldWUgJXVAJXUgb24gYmFyICV1XG4mIzM0OywKJiM0MzsJCQlsZW5ndGgsIG9mZnNldCwgYmFyKTsKJiM0MzsJfSBlbHNlIGlmIChwYSkgewomIzQzOwkJKnBhID0gcGNpX3Jlc291cmNlX3N0YXJ0KHBkZXYsIGJhcikgJiM0Mzsgb2Zmc2V0OwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiBwOwomIzQzO30KJiM0MzsKJiM0MztpbnQgenhkaF9wZl9jb21tb25fY2ZnX2luaXQoc3RydWN0IHp4ZGhfY29yZV9kZXYgKnp4ZGhfZGV2KQomIzQzO3sKJiM0MzsJc3RydWN0IHp4ZGhfcGZfZGV2ICpwZl9kZXYgPSB6eGRoX2Rldi0mZ3Q7cHJpdjsKJiM0MzsJc3RydWN0IHBjaV9kZXYgKnBkZXYgPSB6eGRoX2Rldi0mZ3Q7cGRldjsKJiM0MzsJaW50IGNvbW1vbjsKJiM0MzsKJiM0MzsJLyogY2hlY2sgZm9yIGEgY29tbW9uIGNvbmZpZzogaWYgbm90LCB1c2UgbGVnYWN5IG1vZGUgKGJhciAwKS4gKi8KJiM0MzsJY29tbW9uID0genhkaF9wZl9wY2lfZmluZF9jYXBhYmlsaXR5KHBkZXYsIFpYREhfUENJX0NBUF9DT01NT05fQ0ZHLAomIzQzOwkJCQkJICAgICBJT1JFU09VUkNFX01FTSwKJiM0MzsJCQkJCSAgICAgJmFtcDtwZl9kZXYtJmd0O21vZGVybl9iYXJzKTsKJiM0MzsJaWYgKCFjb21tb24pIHsKJiM0MzsJCWRldl9lcnIoenhkaF9kZXYtJmd0O2RldmljZSwKJiM0MzsJCQkmIzM0O21pc3NpbmcgY2FwYWJpbGl0aWVzLCBsZWF2aW5nIGZvciBsZWdhY3kgZHJpdmVyXG4mIzM0Oyk7CiYjNDM7CQlyZXR1cm4gLUVOT0RFVjsKJiM0MzsJfQomIzQzOwomIzQzOwlwZl9kZXYtJmd0O2NvbW1vbiA9IHp4ZGhfcGZfbWFwX2NhcGFiaWxpdHkoenhkaF9kZXYsIGNvbW1vbiwKJiM0MzsJCQkJCQlzaXplb2Yoc3RydWN0IHp4ZGhfcGZfcGNpX2NvbW1vbl9jZmcpLAomIzQzOwkJCQkJCVpYREhfUEZfQUxJR040LCAwLAomIzQzOwkJCQkJCXNpemVvZihzdHJ1Y3QgenhkaF9wZl9wY2lfY29tbW9uX2NmZyksCiYjNDM7CQkJCQkJTlVMTCwgTlVMTCwgTlVMTCk7CiYjNDM7CWlmICghcGZfZGV2LSZndDtjb21tb24pIHsKJiM0MzsJCWRldl9lcnIoenhkaF9kZXYtJmd0O2RldmljZSwgJiMzNDtwZl9kZXYtJmd0O2NvbW1vbiBpcyBudWxsXG4mIzM0Oyk7CiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7aW50IHp4ZGhfcGZfbm90aWZ5X2NmZ19pbml0KHN0cnVjdCB6eGRoX2NvcmVfZGV2ICp6eGRoX2RldikKJiM0Mzt7CiYjNDM7CXN0cnVjdCB6eGRoX3BmX2RldiAqcGZfZGV2ID0genhkaF9kZXYtJmd0O3ByaXY7CiYjNDM7CXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0genhkaF9kZXYtJmd0O3BkZXY7CiYjNDM7CXUzMiBub3RpZnlfbGVuZ3RoOwomIzQzOwl1MzIgbm90aWZ5X29mZnNldDsKJiM0MzsJaW50IG5vdGlmeTsKJiM0MzsKJiM0MzsJLyogSWYgY29tbW9uIGlzIHRoZXJlLCB0aGVzZSBzaG91bGQgYmUgdG9vLi4uICovCiYjNDM7CW5vdGlmeSA9IHp4ZGhfcGZfcGNpX2ZpbmRfY2FwYWJpbGl0eShwZGV2LCBaWERIX1BDSV9DQVBfTk9USUZZX0NGRywKJiM0MzsJCQkJCSAgICAgSU9SRVNPVVJDRV9NRU0sCiYjNDM7CQkJCQkgICAgICZhbXA7cGZfZGV2LSZndDttb2Rlcm5fYmFycyk7CiYjNDM7CWlmICghbm90aWZ5KSB7CiYjNDM7CQlkZXZfZXJyKHp4ZGhfZGV2LSZndDtkZXZpY2UsICYjMzQ7bWlzc2luZyBub3RpZnkgY2ZnIGNhcGFiaWxpdHlcbiYjMzQ7KTsKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwl9CiYjNDM7CiYjNDM7CXBjaV9yZWFkX2NvbmZpZ19kd29yZChwZGV2LAomIzQzOwkJCSAgICAgIG5vdGlmeSAmIzQzOyBvZmZzZXRvZihzdHJ1Y3QgenhkaF9wZl9wY2lfbm90aWZ5X2NhcCwKJiM0MzsJCQkJbm90aWZ5X29mZl9tdWx0aXBsaWVyKSwKJiM0MzsJCSZhbXA7cGZfZGV2LSZndDtub3RpZnlfb2Zmc2V0X211bHRpcGxpZXIpOwomIzQzOwlwY2lfcmVhZF9jb25maWdfZHdvcmQocGRldiwKJiM0MzsJCQkgICAgICBub3RpZnkgJiM0Mzsgb2Zmc2V0b2Yoc3RydWN0IHp4ZGhfcGZfcGNpX25vdGlmeV9jYXAsCiYjNDM7CQkJCWNhcC5sZW5ndGgpLCAmYW1wO25vdGlmeV9sZW5ndGgpOwomIzQzOwlwY2lfcmVhZF9jb25maWdfZHdvcmQocGRldiwKJiM0MzsJCQkgICAgICBub3RpZnkgJiM0Mzsgb2Zmc2V0b2Yoc3RydWN0IHp4ZGhfcGZfcGNpX25vdGlmeV9jYXAsCiYjNDM7CQkJCWNhcC5vZmZzZXQpLCAmYW1wO25vdGlmeV9vZmZzZXQpOwomIzQzOwomIzQzOwkvKiBXZSBkb24mIzM5O3Qga25vdyBob3cgbWFueSBWUXMgd2UmIzM5O2xsIG1hcCwgYWhlYWQgb2YgdGhlIHRpbWUuCiYjNDM7CSAqIElmIG5vdGlmeSBsZW5ndGggaXMgc21hbGwsIG1hcCBpdCBhbGwgbm93LiBPdGhlcndpc2UsCiYjNDM7CSAqIG1hcCBlYWNoIFZRIGluZGl2aWR1YWxseSBsYXRlci4KJiM0MzsJICovCiYjNDM7CWlmIChub3RpZnlfbGVuZ3RoICZsdDs9IFBBR0VfU0laRSAtIChub3RpZnlfb2Zmc2V0ICUgUEFHRV9TSVpFKSkgewomIzQzOwkJcGZfZGV2LSZndDtub3RpZnlfYmFzZSA9IHp4ZGhfcGZfbWFwX2NhcGFiaWxpdHkoenhkaF9kZXYsIG5vdGlmeSwKJiM0MzsJCQkJCQkJICAgICBaWERIX1BGX01BUF9NSU5MRU4yLAomIzQzOwkJCQkJCQkgICAgWlhESF9QRl9BTElHTjIsIDAsCiYjNDM7CQkJCQkJCSAgICBub3RpZnlfbGVuZ3RoLAomIzQzOwkJCQkJCQkgICAgJmFtcDtwZl9kZXYtJmd0O25vdGlmeV9sZW4sCiYjNDM7CQkJCQkJCSAgICAmYW1wO3BmX2Rldi0mZ3Q7bm90aWZ5X3BhLCBOVUxMKTsKJiM0MzsJCWlmICghcGZfZGV2LSZndDtub3RpZnlfYmFzZSkgewomIzQzOwkJCWRldl9lcnIoenhkaF9kZXYtJmd0O2RldmljZSwgJiMzNDtwZl9kZXYtJmd0O25vdGlmeV9iYXNlIGlzIG51bGxcbiYjMzQ7KTsKJiM0MzsJCQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJCX0KJiM0MzsJfSBlbHNlIHsKJiM0MzsJCXBmX2Rldi0mZ3Q7bm90aWZ5X21hcF9jYXAgPSBub3RpZnk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO2ludCB6eGRoX3BmX2RldmljZV9jZmdfaW5pdChzdHJ1Y3QgenhkaF9jb3JlX2RldiAqenhkaF9kZXYpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgenhkaF9wZl9kZXYgKnBmX2RldiA9IHp4ZGhfZGV2LSZndDtwcml2OwomIzQzOwlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IHp4ZGhfZGV2LSZndDtwZGV2OwomIzQzOwlpbnQgZGV2aWNlOwomIzQzOwomIzQzOwkvKiBEZXZpY2UgY2FwYWJpbGl0eSBpcyBvbmx5IG1hbmRhdG9yeSBmb3IKJiM0MzsJICogZGV2aWNlcyB0aGF0IGhhdmUgZGV2aWNlLXNwZWNpZmljIGNvbmZpZ3VyYXRpb24uCiYjNDM7CSAqLwomIzQzOwlkZXZpY2UgPSB6eGRoX3BmX3BjaV9maW5kX2NhcGFiaWxpdHkocGRldiwgWlhESF9QQ0lfQ0FQX0RFVklDRV9DRkcsCiYjNDM7CQkJCQkgICAgIElPUkVTT1VSQ0VfTUVNLAomIzQzOwkJCQkJICAgICAmYW1wO3BmX2Rldi0mZ3Q7bW9kZXJuX2JhcnMpOwomIzQzOwomIzQzOwkvKiB3ZSBkb24mIzM5O3Qga25vdyBob3cgbXVjaCB3ZSBzaG91bGQgbWFwLAomIzQzOwkgKiBidXQgUEFHRV9TSVpFIGlzIG1vcmUgdGhhbiBlbm91Z2ggZm9yIGFsbCBleGlzdGluZyBkZXZpY2VzLgomIzQzOwkgKi8KJiM0MzsJaWYgKGRldmljZSkgewomIzQzOwkJcGZfZGV2LSZndDtkZXZpY2UgPSB6eGRoX3BmX21hcF9jYXBhYmlsaXR5KHp4ZGhfZGV2LCBkZXZpY2UsIDAsCiYjNDM7CQkJCQkJCVpYREhfUEZfQUxJR040LCAwLCBQQUdFX1NJWkUsCiYjNDM7CQkJCQkJICAgICAgICZhbXA7cGZfZGV2LSZndDtkZXZpY2VfbGVuLCBOVUxMLAomIzQzOwkJCQkJCSAgICAgICAmYW1wO3BmX2Rldi0mZ3Q7ZGV2X2NmZ19iYXJfb2ZmKTsKJiM0MzsJCWlmICghcGZfZGV2LSZndDtkZXZpY2UpIHsKJiM0MzsJCQlkZXZfZXJyKHp4ZGhfZGV2LSZndDtkZXZpY2UsICYjMzQ7cGZfZGV2LSZndDtkZXZpY2UgaXMgbnVsbFxuJiMzNDspOwomIzQzOwkJCXJldHVybiAtRUlOVkFMOwomIzQzOwkJfQomIzQzOwl9CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0Mzt2b2lkIHp4ZGhfcGZfbW9kZXJuX2NmZ191bmluaXQoc3RydWN0IHp4ZGhfY29yZV9kZXYgKnp4ZGhfZGV2KQomIzQzO3sKJiM0MzsJc3RydWN0IHp4ZGhfcGZfZGV2ICpwZl9kZXYgPSB6eGRoX2Rldi0mZ3Q7cHJpdjsKJiM0MzsJc3RydWN0IHBjaV9kZXYgKnBkZXYgPSB6eGRoX2Rldi0mZ3Q7cGRldjsKJiM0MzsKJiM0MzsJaWYgKHBmX2Rldi0mZ3Q7ZGV2aWNlKQomIzQzOwkJcGNpX2lvdW5tYXAocGRldiwgcGZfZGV2LSZndDtkZXZpY2UpOwomIzQzOwlpZiAocGZfZGV2LSZndDtub3RpZnlfYmFzZSkKJiM0MzsJCXBjaV9pb3VubWFwKHBkZXYsIHBmX2Rldi0mZ3Q7bm90aWZ5X2Jhc2UpOwomIzQzOwlwY2lfaW91bm1hcChwZGV2LCBwZl9kZXYtJmd0O2NvbW1vbik7CiYjNDM7fQomIzQzOwomIzQzO2ludCB6eGRoX3BmX21vZGVybl9jZmdfaW5pdChzdHJ1Y3QgenhkaF9jb3JlX2RldiAqenhkaF9kZXYpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgenhkaF9wZl9kZXYgKnBmX2RldiA9IHp4ZGhfZGV2LSZndDtwcml2OwomIzQzOwlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IHp4ZGhfZGV2LSZndDtwZGV2OwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwlyZXQgPSB6eGRoX3BmX2NvbW1vbl9jZmdfaW5pdCh6eGRoX2Rldik7CiYjNDM7CWlmIChyZXQpIHsKJiM0MzsJCWRldl9lcnIoenhkaF9kZXYtJmd0O2RldmljZSwgJiMzNDt6eGRoX3BmX2NvbW1vbl9jZmdfaW5pdCBmYWlsZWQ6ICVkXG4mIzM0OywgcmV0KTsKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0ID0genhkaF9wZl9ub3RpZnlfY2ZnX2luaXQoenhkaF9kZXYpOwomIzQzOwlpZiAocmV0KSB7CiYjNDM7CQlkZXZfZXJyKHp4ZGhfZGV2LSZndDtkZXZpY2UsICYjMzQ7enhkaF9wZl9ub3RpZnlfY2ZnX2luaXQgZmFpbGVkOiAlZFxuJiMzNDssIHJldCk7CiYjNDM7CQlnb3RvIGVycl9tYXBfbm90aWZ5OwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldCA9IHp4ZGhfcGZfZGV2aWNlX2NmZ19pbml0KHp4ZGhfZGV2KTsKJiM0MzsJaWYgKHJldCkgewomIzQzOwkJZGV2X2Vycih6eGRoX2Rldi0mZ3Q7ZGV2aWNlLCAmIzM0O3p4ZGhfcGZfZGV2aWNlX2NmZ19pbml0IGZhaWxlZDogJWRcbiYjMzQ7LCByZXQpOwomIzQzOwkJZ290byBlcnJfbWFwX2RldmljZTsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0MzsKJiM0MztlcnJfbWFwX2RldmljZToKJiM0MzsJaWYgKHBmX2Rldi0mZ3Q7bm90aWZ5X2Jhc2UpCiYjNDM7CQlwY2lfaW91bm1hcChwZGV2LCBwZl9kZXYtJmd0O25vdGlmeV9iYXNlKTsKJiM0MztlcnJfbWFwX25vdGlmeToKJiM0MzsJcGNpX2lvdW5tYXAocGRldiwgcGZfZGV2LSZndDtjb21tb24pOwomIzQzOwlyZXR1cm4gcmV0OwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IHp4ZGhfcGZfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICppZCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCB6eGRoX2NvcmVfZGV2ICp6eGRoX2RldjsKJiM0MzsJc3RydWN0IHp4ZGhfcGZfZGV2ICpwZl9kZXY7CiYjNDM7CXN0cnVjdCBkZXZsaW5rICpkZXZsaW5rOwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwlkZXZsaW5rID0gZGV2bGlua19hbGxvYygmYW1wO3p4ZGhfcGZfZGV2bGlua19vcHMsIHNpemVvZihzdHJ1Y3QgenhkaF9jb3JlX2RldiksCiYjNDM7CQkJCSZhbXA7cGRldi0mZ3Q7ZGV2KTsKJiM0MzsJaWYgKCFkZXZsaW5rKQomIzQzOwkJcmV0dXJuIC1FTk9NRU07CiYjNDM7CiYjNDM7CXp4ZGhfZGV2ID0gZGV2bGlua19wcml2KGRldmxpbmspOwomIzQzOwl6eGRoX2Rldi0mZ3Q7ZGV2aWNlID0gJmFtcDtwZGV2LSZndDtkZXY7CiYjNDM7CXp4ZGhfZGV2LSZndDtwZGV2ID0gcGRldjsKJiM0MzsJenhkaF9kZXYtJmd0O2RldmxpbmsgPSBkZXZsaW5rOwomIzQzOwomIzQzOwlwZl9kZXYgPSB6eGRoX2NvcmVfYWxsb2NfcHJpdih6eGRoX2Rldiwgc2l6ZW9mKCpwZl9kZXYpKTsKJiM0MzsJaWYgKCFwZl9kZXYpIHsKJiM0MzsJCWRldl9lcnIoJmFtcDtwZGV2LSZndDtkZXYsICYjMzQ7enhkaF9wZl9kZXYgYWxsb2MgZmFpbGVkXG4mIzM0Oyk7CiYjNDM7CQlyZXQgPSAtRU5PTUVNOwomIzQzOwkJZ290byBlcnJfcGZfZGV2OwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldCA9IHp4ZGhfcGZfcGNpX2luaXQoenhkaF9kZXYpOwomIzQzOwlpZiAocmV0KSB7CiYjNDM7CQlkZXZfZXJyKCZhbXA7cGRldi0mZ3Q7ZGV2LCAmIzM0O3p4ZGhfcGZfcGNpX2luaXQgZmFpbGVkOiAlZFxuJiMzNDssIHJldCk7CiYjNDM7CQlnb3RvIGVycl9wY2lfaW5pdDsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXQgPSB6eGRoX3BmX21vZGVybl9jZmdfaW5pdCh6eGRoX2Rldik7CiYjNDM7CWlmIChyZXQpIHsKJiM0MzsJCWRldl9lcnIoJmFtcDtwZGV2LSZndDtkZXYsICYjMzQ7enhkaF9wZl9tb2Rlcm5fY2ZnX2luaXQgZmFpbGVkOiAlZFxuJiMzNDssIHJldCk7CiYjNDM7CQlnb3RvIGVycl9jZmdfaW5pdDsKJiM0MzsJfQomIzQzOwomIzQzOwlkZXZsaW5rX3JlZ2lzdGVyKGRldmxpbmspOwomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0MzsKJiM0MztlcnJfY2ZnX2luaXQ6CiYjNDM7CXp4ZGhfcGZfcGNpX2Nsb3NlKHp4ZGhfZGV2KTsKJiM0MztlcnJfcGNpX2luaXQ6CiYjNDM7CXp4ZGhfY29yZV9mcmVlX3ByaXYoenhkaF9kZXYpOwomIzQzO2Vycl9wZl9kZXY6CiYjNDM7CWRldmxpbmtfZnJlZShkZXZsaW5rKTsKJiM0MzsJcmV0dXJuIHJldDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgenhkaF9wZl9yZW1vdmUoc3RydWN0IHBjaV9kZXYgKnBkZXYpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgenhkaF9jb3JlX2RldiAqenhkaF9kZXYgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7CiYjNDM7CXN0cnVjdCBkZXZsaW5rICpkZXZsaW5rID0gcHJpdl90b19kZXZsaW5rKHp4ZGhfZGV2KTsKJiM0MzsKJiM0MzsJZGV2bGlua191bnJlZ2lzdGVyKGRldmxpbmspOwomIzQzOwl6eGRoX3BmX21vZGVybl9jZmdfdW5pbml0KHp4ZGhfZGV2KTsKJiM0MzsJenhkaF9wZl9wY2lfY2xvc2UoenhkaF9kZXYpOwomIzQzOwl6eGRoX2NvcmVfZnJlZV9wcml2KHp4ZGhfZGV2KTsKJiM0MzsJZGV2bGlua19mcmVlKGRldmxpbmspOwomIzQzOwlwY2lfc2V0X2RydmRhdGEocGRldiwgTlVMTCk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIHp4ZGhfcGZfc2h1dGRvd24oc3RydWN0IHBjaV9kZXYgKnBkZXYpCiYjNDM7ewomIzQzOwlpZiAoc3lzdGVtX3N0YXRlID09IFNZU1RFTV9QT1dFUl9PRkYpCiYjNDM7CQlwY2lfc2V0X3Bvd2VyX3N0YXRlKHBkZXYsIFBDSV9EM2hvdCk7CiYjNDM7CXBjaV9kaXNhYmxlX2RldmljZShwZGV2KTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIHp4ZGhfcGZfZHJpdmVyID0gewomIzQzOwkubmFtZSA9ICYjMzQ7ZGluZ2hhaTEwZSYjMzQ7LAomIzQzOwkuaWRfdGFibGUgPSB6eGRoX3BmX3BjaV90YWJsZSwKJiM0MzsJLnByb2JlID0genhkaF9wZl9wcm9iZSwKJiM0MzsJLnJlbW92ZSA9IHp4ZGhfcGZfcmVtb3ZlLAomIzQzOwkuc2h1dGRvd24gPSB6eGRoX3BmX3NodXRkb3duLAomIzQzO307CiYjNDM7CiYjNDM7bW9kdWxlX3BjaV9kcml2ZXIoenhkaF9wZl9kcml2ZXIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMC4uNzM3M2RlZThkMWE5ZgotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmgKQEAgLTAsMCAmIzQzOzEsNzUgQEAKJiM0MzsvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5ICovCiYjNDM7LyoKJiM0MzsgKiBaVEUgRGluZ0hhaSBFdGhlcm5ldCBkcml2ZXIgLSBQRiBoZWFkZXIKJiM0MzsgKiBDb3B5cmlnaHQgKGMpIDIwMjItMjAyNiwgWlRFIENvcnBvcmF0aW9uLgomIzQzOyAqLwomIzQzOwomIzQzOyNpZm5kZWYgX19aWERIX0VOX1BGX0hfXwomIzQzOyNkZWZpbmUgX19aWERIX0VOX1BGX0hfXwomIzQzOwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC90eXBlcy5oJmd0OwomIzQzOwomIzQzOyNkZWZpbmUgWlhESF9QRl9WRU5ET1JfSUQJMHgxY2YyCiYjNDM7I2RlZmluZSBaWERIX1BGX0RFVklDRV9JRAkweDgwNDAKJiM0MzsjZGVmaW5lIFpYREhfVkZfREVWSUNFX0lECTB4ODA0MQomIzQzOwomIzQzOy8qIENvbW1vbiBjb25maWd1cmF0aW9uICovCiYjNDM7I2RlZmluZSBaWERIX1BDSV9DQVBfQ09NTU9OX0NGRwkxCiYjNDM7LyogTm90aWZpY2F0aW9ucyAqLwomIzQzOyNkZWZpbmUgWlhESF9QQ0lfQ0FQX05PVElGWV9DRkcJMgomIzQzOy8qIElTUiBhY2Nlc3MgKi8KJiM0MzsjZGVmaW5lIFpYREhfUENJX0NBUF9JU1JfQ0ZHCQkzCiYjNDM7LyogRGV2aWNlIHNwZWNpZmljIGNvbmZpZ3VyYXRpb24gKi8KJiM0MzsjZGVmaW5lIFpYREhfUENJX0NBUF9ERVZJQ0VfQ0ZHCTQKJiM0MzsvKiBQQ0kgY29uZmlndXJhdGlvbiBhY2Nlc3MgKi8KJiM0MzsjZGVmaW5lIFpYREhfUENJX0NBUF9QQ0lfQ0ZHCQk1CiYjNDM7CiYjNDM7I2RlZmluZSBaWERIX1BGX01BWF9CQVJfVkFMCQkweDUKJiM0MzsjZGVmaW5lIFpYREhfUEZfQUxJR040CQkJNAomIzQzOyNkZWZpbmUgWlhESF9QRl9BTElHTjIJCQkyCiYjNDM7I2RlZmluZSBaWERIX1BGX01BUF9NSU5MRU4yCQkyCiYjNDM7CiYjNDM7c3RydWN0IHp4ZGhfY29yZV9kZXYgewomIzQzOwlzdHJ1Y3QgZGV2aWNlICpkZXZpY2U7CiYjNDM7CXN0cnVjdCBwY2lfZGV2ICpwZGV2OwomIzQzOwlzdHJ1Y3QgZGV2bGluayAqZGV2bGluazsKJiM0MzsJdm9pZCAqcHJpdjsKJiM0Mzt9OwomIzQzOwomIzQzO3N0cnVjdCB6eGRoX3BmX2RldiB7CiYjNDM7CXN0cnVjdCB6eGRoX3BmX3BjaV9jb21tb25fY2ZnIF9faW9tZW0gKmNvbW1vbjsKJiM0MzsJLyogRGV2aWNlLXNwZWNpZmljIGRhdGEgKG5vbi1sZWdhY3kgbW9kZSkgICovCiYjNDM7CS8qIEJhc2Ugb2YgdnEgbm90aWZpY2F0aW9ucyAobm9uLWxlZ2FjeSBtb2RlKS4gKi8KJiM0MzsJdm9pZCBfX2lvbWVtICpkZXZpY2U7CiYjNDM7CXZvaWQgX19pb21lbSAqbm90aWZ5X2Jhc2U7CiYjNDM7CS8qIFBoeXNpY2FsIGJhc2Ugb2YgdnEgbm90aWZpY2F0aW9ucyAqLwomIzQzOwlyZXNvdXJjZV9zaXplX3Qgbm90aWZ5X3BhOwomIzQzOwkvKiBTbyB3ZSBjYW4gc2FuaXR5LWNoZWNrIGFjY2Vzc2VzLiAqLwomIzQzOwlzaXplX3Qgbm90aWZ5X2xlbjsKJiM0MzsJc2l6ZV90IGRldmljZV9sZW47CiYjNDM7CS8qIENhcGFiaWxpdHkgZm9yIHdoZW4gd2UgbmVlZCB0byBtYXAgbm90aWZpY2F0aW9ucyBwZXItdnEuICovCiYjNDM7CXMzMiBub3RpZnlfbWFwX2NhcDsKJiM0MzsJdTMyIG5vdGlmeV9vZmZzZXRfbXVsdGlwbGllcjsKJiM0MzsJLyogTXVsdGlwbHkgcXVldWVfbm90aWZ5X29mZiBieSB0aGlzIHZhbHVlLiAobm9uLWxlZ2FjeSBtb2RlKS4gKi8KJiM0MzsJczMyIG1vZGVybl9iYXJzOwomIzQzOwl2b2lkIF9faW9tZW0gKnBjaV9pb3JlbWFwX2FkZHJbNl07CiYjNDM7CXUzMiBkZXZfY2ZnX2Jhcl9vZmY7CiYjNDM7fTsKJiM0MzsKJiM0Mzt2b2lkICp6eGRoX2NvcmVfYWxsb2NfcHJpdihzdHJ1Y3QgenhkaF9jb3JlX2RldiAqenhkaF9kZXYsIHNpemVfdCBzaXplKTsKJiM0Mzt2b2lkIHp4ZGhfY29yZV9mcmVlX3ByaXYoc3RydWN0IHp4ZGhfY29yZV9kZXYgKnp4ZGhfZGV2KTsKJiM0Mzt2b2lkIHp4ZGhfcGZfcGNpX2Nsb3NlKHN0cnVjdCB6eGRoX2NvcmVfZGV2ICp6eGRoX2Rldik7CiYjNDM7aW50IHp4ZGhfcGZfcGNpX2ZpbmRfY2FwYWJpbGl0eShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgdTggY2ZnX3R5cGUsCiYjNDM7CQkJCXUzMiBpb3Jlc291cmNlX3R5cGVzLCBpbnQgKmJhcnMpOwomIzQzO3ZvaWQgX19pb21lbSAqenhkaF9wZl9tYXBfY2FwYWJpbGl0eShzdHJ1Y3QgenhkaF9jb3JlX2RldiAqenhkaF9kZXYsIGludCBvZmYsCiYjNDM7CQkJCSAgICAgc2l6ZV90IG1pbmxlbiwgdTMyIGFsaWduLAomIzQzOwkJCQkgICAgIHUzMiBzdGFydCwgdTMyIHNpemUsCiYjNDM7CQkJCSAgICAgc2l6ZV90ICpsZW4sIHJlc291cmNlX3NpemVfdCAqcGEsCiYjNDM7CQkJCSAgICAgdTMyICpiYXJfb2ZmKTsKJiM0MztpbnQgenhkaF9wZl9jb21tb25fY2ZnX2luaXQoc3RydWN0IHp4ZGhfY29yZV9kZXYgKnp4ZGhfZGV2KTsKJiM0MztpbnQgenhkaF9wZl9ub3RpZnlfY2ZnX2luaXQoc3RydWN0IHp4ZGhfY29yZV9kZXYgKnp4ZGhfZGV2KTsKJiM0MztpbnQgenhkaF9wZl9kZXZpY2VfY2ZnX2luaXQoc3RydWN0IHp4ZGhfY29yZV9kZXYgKnp4ZGhfZGV2KTsKJiM0Mzt2b2lkIHp4ZGhfcGZfbW9kZXJuX2NmZ191bmluaXQoc3RydWN0IHp4ZGhfY29yZV9kZXYgKnp4ZGhfZGV2KTsKJiM0MztpbnQgenhkaF9wZl9tb2Rlcm5fY2ZnX2luaXQoc3RydWN0IHp4ZGhfY29yZV9kZXYgKnp4ZGhfZGV2KTsKJiM0MzsKJiM0MzsjZW5kaWYgLyogX19aWERIX0VOX1BGX0hfXyAqLwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAxNzo0MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTA0OQoJCQkJCQkJb3V0cHV0OiA3OAoJCQkJCQkJdGhvdWdodHM6IDUzMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipXb3J0aEZ1enppbmcgRGVjaXNpb24gZm9yIHRoZSBaVEUgRGluZ0hhaSBFdGhlcm5ldCBEcml2ZXIqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gV2UmIzM5O3ZlIGdvdCBhIG5ldyBwYXRjaCBpbnRyb2R1Y2luZyBhIGRyaXZlciBmb3IgWlRFIERpbmdIYWkgRXRoZXJuZXQgZGV2aWNlcy4gSXQmIzM5O3Mgc2l0dGluZyBpbiBgZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvYCBhbmQgaXMgYSBQQ0kgZHJpdmVyIHNwZWNpZmljYWxseSwgbmFtZWQgYGRpbmdoYWkxMGVgLiBNeSBpbml0aWFsIHNjYW4gc2hvd3MgdGhlIGRyaXZlciBzZXRzIHVwIHNvbWUgUENJIGNhcGFiaWxpdGllcywgZGV2bGluayBhbmQgc2VlbXMgdG8gYmUgYSBiYXNpYyBQQ0kgZHJpdmVyIHByb2JlLiBObyBuZXRkZXYgcmVnaXN0cmF0aW9uIGF0IHRoaXMgcG9pbnQuCgpOb3csIGFjY29yZGluZyB0byB0aGUgZGlyZWN0aW9ucywgSSBuZWVkIHRvIGNoZWNrIGlmIHRoaXMgaXMgd29ydGggZnV6emluZy4gVGhlIGluc3RydWN0aW9ucyB0ZWxsIG1lIHRvIGZsYWcgaXQgYXMgYFdvcnRoRnV6emluZz1mYWxzZWAgaWYgdGhlIHBhdGNoICpvbmx5KiBjb250YWlucyBjb2RlIGluIHNwZWNpZmljIGRyaXZlciB0eXBlcy4gU3BlY2lmaWNhbGx5LCBpdCBoaWdobGlnaHRzICYjMzQ7dmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLCBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVSYjMzQ7LgoKQWhhISBUaGlzIGlzIGEgWlRFIERpbmdIYWkgRXRoZXJuZXQgZHJpdmVyLiBJdCYjMzk7cyBhIHZlbmRvci1zcGVjaWZpYyBQQ0llIE5JQyBkcml2ZXIuIFRoZSBxdWVzdGlvbiBpcywgaXMgdGhpcyBlbXVsYXRlZCBpbiBRRU1VPyBJIGRvdWJ0IGl0LiBUaGVyZSYjMzk7cyBubyBpbmRpY2F0aW9uIHRoYXQgdGhpcyBoYXJkd2FyZSBpcyBzdXBwb3J0ZWQgb3IgZW11bGF0ZWQgd2l0aGluIHRoZSBzdGFuZGFyZCBRRU1VIGVudmlyb25tZW50LiBUaGUgaW5zdHJ1Y3Rpb25zIGFyZSBwcmV0dHkgZXhwbGljaXQgb24gdGhpcyBwb2ludC4KCkxldCBtZSBjb25maXJtIHRoZSBkcml2ZXImIzM5O3MgbmF0dXJlLiBZZXMsIGl0JiMzOTtzIGEgWlRFIERpbmdIYWkgRXRoZXJuZXQgZHJpdmVyLiBJdCYjMzk7cyByZWZlcmVuY2luZyBgQ09ORklHX0RJTkdIQUlfUEZgIGFuZCB1c2VzIGBQQ0lfREVWSUNFYCBtYWNybyB3aXRoIHZlbmRvciBJRCAweDFjZjIgYW5kIGRldmljZSBJRCAweDgwNDAuIFNvIHdlIGFyZSB0YWxraW5nIGFib3V0IGEgdmVuZG9yLXNwZWNpZmljIFBDSSBkZXZpY2UsIHdpdGggYSBzcGVjaWZpYyBoYXJkd2FyZSBjb25maWd1cmF0aW9uLiBUaGlzIGNvbmZpcm1zIHRoZSByZXF1aXJlbWVudCBmb3IgYSBwaHlzaWNhbCBQQ0llIGNhcmQuIEl0JiMzOTtzIG5vdCBzb21ldGhpbmcgSSBjYW4ganVzdCBzcGluIHVwIGluIFFFTVUuCgpUaGVyZWZvcmUsIHNpbmNlIHRoaXMgZHJpdmVyIHJlcXVpcmVzIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgbm90IGVtdWxhdGVkLCB0aGUgYFdvcnRoRnV6emluZ2Agc2hvdWxkIGJlIGZhbHNlLiBUaGlzIGFsaWducyBwZXJmZWN0bHkgd2l0aCB0aGUgaW5zdHJ1Y3Rpb25zIEkgcmVjZWl2ZWQuIEkmIzM5O20gY29uZmlkZW50IGluIHNheWluZyB0aGF0IHRoZSBjdXJyZW50IHBhdGNoIGZhbGxzIGludG8gdGhlICYjMzQ7dmVuZG9yLXNwZWNpZmljIFBDSWUmIzM0OyBjYXRlZ29yeSBhcyBkZXNjcmliZWQuCgpTbywgSSYjMzk7bGwgZ28gYWhlYWQgYW5kIHNldCBgV29ydGhGdXp6aW5nPWZhbHNlYCBhbmQgcHJvdmlkZSB0aGUgcmVhc29uaW5nIHRoYXQgaXQgaXMgYSB2ZW5kb3Itc3BlY2lmaWMgUENJZSBkcml2ZXIgZm9yIGhhcmR3YXJlIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDE3OjQxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogW10sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyB2ZW5kb3Itc3BlY2lmaWMgUENJZSBFdGhlcm5ldCBkcml2ZXIgKFpURSBEaW5nSGFpKS4gVGhpcyBkcml2ZXIgcmVxdWlyZXMgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSB0aGF0IGlzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLCBtYWtpbmcgaXQgdW5yZWFjaGFibGUgYW5kIHVudGVzdGFibGUgaW4gdmlydHVhbGl6ZWQgZnV6emluZyBlbnZpcm9ubWVudHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IHZlbmRvci1zcGVjaWZpYyBQQ0llIEV0aGVybmV0IGRyaXZlciAoWlRFIERpbmdIYWkpLiBUaGlzIGRyaXZlciByZXF1aXJlcyBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIHRoYXQgaXMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUsIG1ha2luZyBpdCB1bnJlYWNoYWJsZSBhbmQgdW50ZXN0YWJsZSBpbiB2aXJ0dWFsaXplZCBmdXp6aW5nIGVudmlyb25tZW50cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0wMlQxNzo0MTozMi44MDg5MjIyOThaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5MzM5NjY2NjgzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IHZlbmRvci1zcGVjaWZpYyBQQ0llIEV0aGVybmV0IGRyaXZlciAoWlRFIERpbmdIYWkpLiBUaGlzIGRyaXZlciByZXF1aXJlcyBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIHRoYXQgaXMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUsIG1ha2luZyBpdCB1bnJlYWNoYWJsZSBhbmQgdW50ZXN0YWJsZSBpbiB2aXJ0dWFsaXplZCBmdXp6aW5nIGVudmlyb25tZW50cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDE3OjQxOjMyLjgwODkyODI4N1oiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDgxMzc3OTIyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgNTljYzE0Mjc0NzUzNmQxZmEyYWMxYzUzZmE0YmMzMTQ0NTc5MWViMlxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgU3VuIEF1ZyAyIDE3OjQxOjMxIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL01BSU5UQUlORVJTIGIvTUFJTlRBSU5FUlNcXG5pbmRleCAyZmIxYzc1YWZkMTYzLi43MzY5MmIwOWJmN2JhIDEwMDY0NFxcbi0tLSBhL01BSU5UQUlORVJTXFxuKysrIGIvTUFJTlRBSU5FUlNcXG5AQCAtMjk0NDAsNiArMjk0NDAsMTIgQEAgUzpcXHRNYWludGFpbmVkXFxuIFQ6XFx0Z2l0IGdpdDovL2dpdC5rZXJuZWwub3JnL3B1Yi9zY20vbGludXgva2VybmVsL2dpdC90aXdhaS9zb3VuZC5naXRcXG4gRjpcXHRzb3VuZC9oZGEvY29kZWNzL3NlbmFyeXRlY2guY1xcbiBcXG4rWlRFIERJTkdIQUkgRVRIRVJORVQgRFJJVkVSXFxuK006XFx0SnVueWFuZyBIYW4gXFx1MDAzY2hhbi5qdW55YW5nQHp0ZS5jb20uY25cXHUwMDNlXFxuK0w6XFx0bmV0ZGV2QHZnZXIua2VybmVsLm9yZ1xcbitTOlxcdE1haW50YWluZWRcXG4rRjpcXHRkcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvXFxuK1xcbiBUSEUgUkVTVFxcbiBNOlxcdExpbnVzIFRvcnZhbGRzIFxcdTAwM2N0b3J2YWxkc0BsaW51eC1mb3VuZGF0aW9uLm9yZ1xcdTAwM2VcXG4gTDpcXHRsaW51eC1rZXJuZWxAdmdlci5rZXJuZWwub3JnXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L0tjb25maWcgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9LY29uZmlnXFxuaW5kZXggYjhmNzBlMmExNzYzYS4uYzJiNjk5NmIwY2ZlMSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9LY29uZmlnXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvS2NvbmZpZ1xcbkBAIC0xODgsNSArMTg4LDYgQEAgc291cmNlIFxcXCJkcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL0tjb25maWdcXFwiXFxuIHNvdXJjZSBcXFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvd2l6bmV0L0tjb25maWdcXFwiXFxuIHNvdXJjZSBcXFwiZHJpdmVycy9uZXQvZXRoZXJuZXQveGlsaW54L0tjb25maWdcXFwiXFxuIHNvdXJjZSBcXFwiZHJpdmVycy9uZXQvZXRoZXJuZXQveGlyY29tL0tjb25maWdcXFwiXFxuK3NvdXJjZSBcXFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL0tjb25maWdcXFwiXFxuIFxcbiBlbmRpZiAjIEVUSEVSTkVUXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L01ha2VmaWxlIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvTWFrZWZpbGVcXG5pbmRleCA1NzM0NGZlYzZjZTA0Li5hMzRiY2JkNGRmNGU5IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L01ha2VmaWxlXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvTWFrZWZpbGVcXG5AQCAtMTA0LDMgKzEwNCw0IEBAIG9iai0kKENPTkZJR19ORVRfVkVORE9SX1hJUkNPTSkgKz0geGlyY29tL1xcbiBvYmotJChDT05GSUdfTkVUX1ZFTkRPUl9TWU5PUFNZUykgKz0gc3lub3BzeXMvXFxuIG9iai0kKENPTkZJR19ORVRfVkVORE9SX1BFTlNBTkRPKSArPSBwZW5zYW5kby9cXG4gb2JqLSQoQ09ORklHX09BX1RDNikgKz0gb2FfdGM2Lm9cXG4rb2JqLSQoQ09ORklHX05FVF9WRU5ET1JfWlRFKSArPSB6dGUvXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9LY29uZmlnIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL0tjb25maWdcXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxcbmluZGV4IDAwMDAwMDAwMDAwMDAuLmI5NWMyZmM3ZGI3N2FcXG4tLS0gL2Rldi9udWxsXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL0tjb25maWdcXG5AQCAtMCwwICsxLDIwIEBAXFxuKyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbisjXFxuKyMgWlRFIGRyaXZlciBjb25maWd1cmF0aW9uXFxuKyNcXG4rXFxuK2NvbmZpZyBORVRfVkVORE9SX1pURVxcbisgICAgYm9vbCBcXFwiWlRFIGRldmljZXNcXFwiXFxuKyAgICBkZWZhdWx0IHlcXG4rICAgIGhlbHBcXG4rICAgICAgSWYgeW91IGhhdmUgYSBuZXR3b3JrIChFdGhlcm5ldCkgY2FyZCBiZWxvbmdpbmcgdG8gdGhpcyBjbGFzcywgc2F5IFkuXFxuKyAgICAgIE5vdGUgdGhhdCB0aGUgYW5zd2VyIHRvIHRoaXMgcXVlc3Rpb24gZG9lc24ndCBkaXJlY3RseSBhZmZlY3QgdGhlXFxuKyAgICAgIGtlcm5lbDogc2F5aW5nIE4gd2lsbCBqdXN0IGNhdXNlIHRoZSBjb25maWd1cmF0b3IgdG8gc2tpcCBhbGxcXG4rICAgICAgdGhlIHF1ZXN0aW9ucyBhYm91dCBadGUgY2FyZHMuIElmIHlvdSBzYXkgWSwgeW91IHdpbGwgYmUgYXNrZWRcXG4rICAgICAgZm9yIHlvdXIgc3BlY2lmaWMgY2FyZCBpbiB0aGUgZm9sbG93aW5nIHF1ZXN0aW9ucy5cXG4rXFxuK2lmIE5FVF9WRU5ET1JfWlRFXFxuK1xcbitzb3VyY2UgXFxcImRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL0tjb25maWdcXFwiXFxuK1xcbitlbmRpZiAjIE5FVF9WRU5ET1JfWlRFXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9NYWtlZmlsZSBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9NYWtlZmlsZVxcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uY2Q5OTI5YjYxNTU5Y1xcbi0tLSAvZGV2L251bGxcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvTWFrZWZpbGVcXG5AQCAtMCwwICsxLDYgQEBcXG4rIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuKyNcXG4rIyBNYWtlZmlsZSBmb3IgdGhlIFpURSBkZXZpY2UgZHJpdmVyc1xcbisjXFxuK1xcbitvYmotJChDT05GSUdfRElOR0hBSSkgKz0gZGluZ2hhaS9cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvS2NvbmZpZyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL0tjb25maWdcXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxcbmluZGV4IDAwMDAwMDAwMDAwMDAuLjEyMWJlM2JmNzcwN2ZcXG4tLS0gL2Rldi9udWxsXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvS2NvbmZpZ1xcbkBAIC0wLDAgKzEsMzQgQEBcXG4rIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuKyNcXG4rIyBaVEUgRGluZ0hhaSBFdGhlcm5ldCBkcml2ZXIgY29uZmlndXJhdGlvblxcbisjXFxuK1xcbitjb25maWcgRElOR0hBSVxcbisgICAgYm9vbCBcXFwiWlRFIERpbmdIYWkgRXRoZXJuZXQgZHJpdmVyXFxcIlxcbisgICAgZGVwZW5kcyBvbiBQQ0lcXG4rICAgIHNlbGVjdCBORVRfREVWTElOS1xcbisgICAgaGVscFxcbisgICAgICBUaGlzIGRyaXZlciBzdXBwb3J0cyBaVEUgRGluZ0hhaSBFdGhlcm5ldCBkZXZpY2VzLlxcbitcXG4rICAgICAgRGluZ0hhaSBpcyBhIGhpZ2gtcGVyZm9ybWFuY2UgRXRoZXJuZXQgY29udHJvbGxlciB0aGF0IHN1cHBvcnRzXFxuKyAgICAgIG11bHRpcGxlIGZlYXR1cmVzIGluY2x1ZGluZyBoYXJkd2FyZSBvZmZsb2FkaW5nLCBTUi1JT1YsIGFuZFxcbisgICAgICBhZHZhbmNlZCB2aXJ0dWFsaXphdGlvbiBjYXBhYmlsaXRpZXMuXFxuK1xcbisgICAgICBJZiB5b3Ugc2F5IFkgaGVyZSwgeW91IGNhbiBzZWxlY3Qgc3BlY2lmaWMgZHJpdmVyIHZhcmlhbnRzIGJlbG93LlxcbitcXG4rICAgICAgSWYgdW5zdXJlLCBzYXkgTi5cXG4rXFxuK2lmIERJTkdIQUlcXG4rXFxuK2NvbmZpZyBESU5HSEFJX1BGXFxuKyAgICB0cmlzdGF0ZSBcXFwiWlRFIERpbmdIYWkgUEYgKFBoeXNpY2FsIEZ1bmN0aW9uKSBkcml2ZXJcXFwiXFxuKyAgICBoZWxwXFxuKyAgICAgIFRoaXMgZHJpdmVyIHN1cHBvcnRzIFpURSBEaW5nSGFpIFBDSSBFeHByZXNzIEV0aGVybmV0XFxuKyAgICAgIGFkYXB0ZXJzIChQRikuXFxuK1xcbisgICAgICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlLiBUaGUgbW9kdWxlXFxuKyAgICAgIHdpbGwgYmUgbmFtZWQgZGluZ2hhaTEwZS5cXG4rXFxuKyAgICAgIElmIHVuc3VyZSwgc2F5IE4uXFxuK1xcbitlbmRpZiAjIERJTkdIQUlcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvTWFrZWZpbGUgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9NYWtlZmlsZVxcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uZTJmNGRhMzNkZjU5M1xcbi0tLSAvZGV2L251bGxcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9NYWtlZmlsZVxcbkBAIC0wLDAgKzEsNyBAQFxcbisjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4rI1xcbisjIE1ha2VmaWxlIGZvciBaVEUgRGluZ0hhaSBFdGhlcm5ldCBkcml2ZXJcXG4rI1xcbitcXG4rb2JqLSQoQ09ORklHX0RJTkdIQUlfUEYpICs9IGRpbmdoYWkxMGUub1xcbitkaW5naGFpMTBlLXkgOj0gZW5fcGYub1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9kaF9xdWV1ZS5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZGhfcXVldWUuaFxcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uNWI2Mzg5NWMxZWExZVxcbi0tLSAvZGV2L251bGxcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9kaF9xdWV1ZS5oXFxuQEAgLTAsMCArMSw1NiBAQFxcbisvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5ICovXFxuKy8qXFxuKyAqIFpURSBEaW5nSGFpIEV0aGVybmV0IGRyaXZlciAtIFBDSSBjYXBhYmlsaXR5IGRlZmluaXRpb25zXFxuKyAqIENvcHlyaWdodCAoYykgMjAyMi0yMDI2LCBaVEUgQ29ycG9yYXRpb24uXFxuKyAqL1xcbitcXG4rI2lmbmRlZiBfX0RIX1FVRVVFX0hfX1xcbisjZGVmaW5lIF9fREhfUVVFVUVfSF9fXFxuK1xcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvdHlwZXMuaFxcdTAwM2VcXG4rXFxuKy8qIFRoaXMgaXMgdGhlIFBDSSBjYXBhYmlsaXR5IGhlYWRlcjogKi9cXG4rc3RydWN0IHp4ZGhfcGZfcGNpX2NhcCB7XFxuK1xcdF9fdTggY2FwX3ZuZHI7XFx0XFx0LyogR2VuZXJpYyBQQ0kgZmllbGQ6IFBDSV9DQVBfSURfVk5EUiAqL1xcbitcXHRfX3U4IGNhcF9uZXh0O1xcdFxcdC8qIEdlbmVyaWMgUENJIGZpZWxkOiBuZXh0IHB0ci4gKi9cXG4rXFx0X191OCBjYXBfbGVuO1xcdFxcdC8qIEdlbmVyaWMgUENJIGZpZWxkOiBjYXBhYmlsaXR5IGxlbmd0aCAqL1xcbitcXHRfX3U4IGNmZ190eXBlO1xcdFxcdC8qIElkZW50aWZpZXMgdGhlIHN0cnVjdHVyZS4gKi9cXG4rXFx0X191OCBiYXI7XFx0XFx0LyogV2hlcmUgdG8gZmluZCBpdC4gKi9cXG4rXFx0X191OCBpZDtcXHRcXHQvKiBNdWx0aXBsZSBjYXBhYmlsaXRpZXMgb2YgdGhlIHNhbWUgdHlwZSAqL1xcbitcXHRfX3U4IHBhZGRpbmdbMl07XFx0XFx0LyogUGFkIHRvIGZ1bGwgZHdvcmQuICovXFxuK1xcdF9fbGUzMiBvZmZzZXQ7XFx0XFx0LyogT2Zmc2V0IHdpdGhpbiBiYXIuICovXFxuK1xcdF9fbGUzMiBsZW5ndGg7XFx0XFx0LyogTGVuZ3RoIG9mIHRoZSBzdHJ1Y3R1cmUsIGluIGJ5dGVzLiAqL1xcbit9O1xcbitcXG4rLyogRmllbGRzIGluIFpYREhfUEZfUENJX0NBUF9DT01NT05fQ0ZHOiAqL1xcbitzdHJ1Y3QgenhkaF9wZl9wY2lfY29tbW9uX2NmZyB7XFxuK1xcdC8qIEFib3V0IHRoZSB3aG9sZSBkZXZpY2UuICovXFxuK1xcdF9fbGUzMiBkZXZpY2VfZmVhdHVyZV9zZWxlY3Q7IC8qIHJlYWQtd3JpdGUgKi9cXG4rXFx0X19sZTMyIGRldmljZV9mZWF0dXJlO1xcdC8qIHJlYWQtb25seSAqL1xcbitcXHRfX2xlMzIgZ3Vlc3RfZmVhdHVyZV9zZWxlY3Q7IC8qIHJlYWQtd3JpdGUgKi9cXG4rXFx0X19sZTMyIGd1ZXN0X2ZlYXR1cmU7XFx0XFx0LyogcmVhZC13cml0ZSAqL1xcbitcXHRfX2xlMTYgbXNpeF9jb25maWc7XFx0XFx0LyogcmVhZC13cml0ZSAqL1xcbitcXHRfX2xlMTYgbnVtX3F1ZXVlcztcXHRcXHQvKiByZWFkLW9ubHkgKi9cXG4rXFx0X191OCBkZXZpY2Vfc3RhdHVzO1xcdFxcdC8qIHJlYWQtd3JpdGUgKi9cXG4rXFx0X191OCBjb25maWdfZ2VuZXJhdGlvbjtcXHQvKiByZWFkLW9ubHkgKi9cXG4rXFxuK1xcdC8qIEFib3V0IGEgc3BlY2lmaWMgdmlydHF1ZXVlLiAqL1xcbitcXHRfX2xlMTYgcXVldWVfc2VsZWN0O1xcdFxcdC8qIHJlYWQtd3JpdGUgKi9cXG4rXFx0X19sZTE2IHF1ZXVlX3NpemU7XFx0XFx0LyogcmVhZC13cml0ZSwgcG93ZXIgb2YgMi4gKi9cXG4rXFx0X19sZTE2IHF1ZXVlX21zaXhfdmVjdG9yO1xcdC8qIHJlYWQtd3JpdGUgKi9cXG4rXFx0X19sZTE2IHF1ZXVlX2VuYWJsZTtcXHRcXHQvKiByZWFkLXdyaXRlICovXFxuK1xcdF9fbGUxNiBxdWV1ZV9ub3RpZnlfb2ZmO1xcdC8qIHJlYWQtb25seSAqL1xcbitcXHRfX2xlMzIgcXVldWVfZGVzY19sbztcXHRcXHQvKiByZWFkLXdyaXRlICovXFxuK1xcdF9fbGUzMiBxdWV1ZV9kZXNjX2hpO1xcdFxcdC8qIHJlYWQtd3JpdGUgKi9cXG4rXFx0X19sZTMyIHF1ZXVlX2F2YWlsX2xvO1xcdFxcdC8qIHJlYWQtd3JpdGUgKi9cXG4rXFx0X19sZTMyIHF1ZXVlX2F2YWlsX2hpO1xcdFxcdC8qIHJlYWQtd3JpdGUgKi9cXG4rXFx0X19sZTMyIHF1ZXVlX3VzZWRfbG87XFx0XFx0LyogcmVhZC13cml0ZSAqL1xcbitcXHRfX2xlMzIgcXVldWVfdXNlZF9oaTtcXHRcXHQvKiByZWFkLXdyaXRlICovXFxuK307XFxuK1xcbitzdHJ1Y3QgenhkaF9wZl9wY2lfbm90aWZ5X2NhcCB7XFxuK1xcdHN0cnVjdCB6eGRoX3BmX3BjaV9jYXAgY2FwO1xcbitcXHRfX2xlMzIgbm90aWZ5X29mZl9tdWx0aXBsaWVyOyAvKiBNdWx0aXBsaWVyIGZvciBxdWV1ZV9ub3RpZnlfb2ZmLiAqL1xcbit9O1xcbitcXG4rI2VuZGlmIC8qIF9fREhfUVVFVUVfSF9fICovXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jXFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcXG5pbmRleCAwMDAwMDAwMDAwMDAwLi44NmQ0Mzc0MDg4MjAzXFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmNcXG5AQCAtMCwwICsxLDQ0OSBAQFxcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuKy8qXFxuKyAqIFpURSBEaW5nSGFpIEV0aGVybmV0IGRyaXZlclxcbisgKiBDb3B5cmlnaHQgKGMpIDIwMjItMjAyNiwgWlRFIENvcnBvcmF0aW9uLlxcbisgKi9cXG4rXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9tb2R1bGUuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3BjaS5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbmV0L2RldmxpbmsuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2RtYS1tYXBwaW5nLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcXCJlbl9wZi5oXFxcIlxcbisjaW5jbHVkZSBcXFwiZGhfcXVldWUuaFxcXCJcXG4rXFxuK01PRFVMRV9BVVRIT1IoXFxcIkp1bnlhbmcgSGFuIFxcdTAwM2NoYW4uanVueWFuZ0B6dGUuY29tLmNuXFx1MDAzZVxcXCIpO1xcbitNT0RVTEVfREVTQ1JJUFRJT04oXFxcIlpURSBEaW5nSGFpIHNlcmllcyBFdGhlcm5ldCBkcml2ZXJcXFwiKTtcXG4rTU9EVUxFX0xJQ0VOU0UoXFxcIkdQTFxcXCIpO1xcbitcXG4rc3RhdGljIGNvbnN0IHN0cnVjdCBkZXZsaW5rX29wcyB6eGRoX3BmX2Rldmxpbmtfb3BzID0ge307XFxuK1xcbitzdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgenhkaF9wZl9wY2lfdGFibGVbXSA9IHtcXG4rXFx0eyBQQ0lfREVWSUNFKFpYREhfUEZfVkVORE9SX0lELCBaWERIX1BGX0RFVklDRV9JRCkgfSxcXG4rXFx0eyBQQ0lfREVWSUNFKFpYREhfUEZfVkVORE9SX0lELCBaWERIX1ZGX0RFVklDRV9JRCkgfSxcXG4rXFx0eyB9XFxuK307XFxuK1xcbitNT0RVTEVfREVWSUNFX1RBQkxFKHBjaSwgenhkaF9wZl9wY2lfdGFibGUpO1xcbitcXG4rdm9pZCAqenhkaF9jb3JlX2FsbG9jX3ByaXYoc3RydWN0IHp4ZGhfY29yZV9kZXYgKnp4ZGhfZGV2LCBzaXplX3Qgc2l6ZSlcXG4re1xcbitcXHR2b2lkICpwcml2ID0ga3phbGxvYyhzaXplLCBHRlBfS0VSTkVMKTtcXG4rXFxuK1xcdGlmIChwcml2KVxcbitcXHRcXHR6eGRoX2Rldi1cXHUwMDNlcHJpdiA9IHByaXY7XFxuK1xcdHJldHVybiBwcml2O1xcbit9XFxuK1xcbit2b2lkIHp4ZGhfY29yZV9mcmVlX3ByaXYoc3RydWN0IHp4ZGhfY29yZV9kZXYgKnp4ZGhfZGV2KVxcbit7XFxuK1xcdGtmcmVlKHp4ZGhfZGV2LVxcdTAwM2Vwcml2KTtcXG4rfVxcbitcXG4rc3RhdGljIGludCB6eGRoX3BmX3BjaV9pbml0KHN0cnVjdCB6eGRoX2NvcmVfZGV2ICp6eGRoX2RldilcXG4re1xcbitcXHRzdHJ1Y3QgenhkaF9wZl9kZXYgKnBmX2RldiA9IHp4ZGhfZGV2LVxcdTAwM2Vwcml2O1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0cGNpX3NldF9kcnZkYXRhKHp4ZGhfZGV2LVxcdTAwM2VwZGV2LCB6eGRoX2Rldik7XFxuK1xcbitcXHRyZXQgPSBwY2lfZW5hYmxlX2RldmljZSh6eGRoX2Rldi1cXHUwMDNlcGRldik7XFxuK1xcdGlmIChyZXQpIHtcXG4rXFx0XFx0ZGV2X2Vycih6eGRoX2Rldi1cXHUwMDNlZGV2aWNlLCBcXFwicGNpX2VuYWJsZV9kZXZpY2UgZmFpbGVkOiAlZFxcXFxuXFxcIiwgcmV0KTtcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0fVxcbitcXG4rXFx0ZG1hX3NldF9tYXNrX2FuZF9jb2hlcmVudCh6eGRoX2Rldi1cXHUwMDNlZGV2aWNlLCBETUFfQklUX01BU0soNjQpKTtcXG4rXFxuK1xcdHJldCA9IHBjaV9yZXF1ZXN0X3NlbGVjdGVkX3JlZ2lvbnMoenhkaF9kZXYtXFx1MDAzZXBkZXYsXFxuK1xcdFxcdFxcdFxcdFxcdCAgIHBjaV9zZWxlY3RfYmFycyh6eGRoX2Rldi1cXHUwMDNlcGRldiwgSU9SRVNPVVJDRV9NRU0pLFxcbitcXHRcXHRcXHRcXHRcXHQgICBcXFwiZGgtcGZcXFwiKTtcXG4rXFx0aWYgKHJldCkge1xcbitcXHRcXHRkZXZfZXJyKHp4ZGhfZGV2LVxcdTAwM2VkZXZpY2UsIFxcXCJwY2lfcmVxdWVzdF9zZWxlY3RlZF9yZWdpb25zIGZhaWxlZDogJWRcXFxcblxcXCIsIHJldCk7XFxuK1xcdFxcdGdvdG8gZXJyX3BjaTtcXG4rXFx0fVxcbitcXG4rXFx0cGNpX3NldF9tYXN0ZXIoenhkaF9kZXYtXFx1MDAzZXBkZXYpO1xcbitcXHRyZXQgPSBwY2lfc2F2ZV9zdGF0ZSh6eGRoX2Rldi1cXHUwMDNlcGRldik7XFxuK1xcdGlmIChyZXQpIHtcXG4rXFx0XFx0ZGV2X2Vycih6eGRoX2Rldi1cXHUwMDNlZGV2aWNlLCBcXFwicGNpX3NhdmVfc3RhdGUgZmFpbGVkOiAlZFxcXFxuXFxcIiwgcmV0KTtcXG4rXFx0XFx0Z290byBlcnJfcGNpX3NhdmVfc3RhdGU7XFxuK1xcdH1cXG4rXFxuK1xcdGlmICghKHBjaV9yZXNvdXJjZV9mbGFncyh6eGRoX2Rldi1cXHUwMDNlcGRldiwgMCkgXFx1MDAyNiBJT1JFU09VUkNFX01FTSkpIHtcXG4rXFx0XFx0cmV0ID0gLUVOT0RFVjtcXG4rXFx0XFx0ZGV2X2Vycih6eGRoX2Rldi1cXHUwMDNlZGV2aWNlLCBcXFwiQkFSIDAgaXMgbm90IGFuIE1NSU8gcmVzb3VyY2VcXFxcblxcXCIpO1xcbitcXHRcXHRnb3RvIGVycl9wY2lfc2F2ZV9zdGF0ZTtcXG4rXFx0fVxcbitcXG4rXFx0cGZfZGV2LVxcdTAwM2VwY2lfaW9yZW1hcF9hZGRyWzBdID1cXG4rXFx0XFx0aW9yZW1hcChwY2lfcmVzb3VyY2Vfc3RhcnQoenhkaF9kZXYtXFx1MDAzZXBkZXYsIDApLFxcbitcXHRcXHRcXHRwY2lfcmVzb3VyY2VfbGVuKHp4ZGhfZGV2LVxcdTAwM2VwZGV2LCAwKSk7XFxuK1xcdGlmICghcGZfZGV2LVxcdTAwM2VwY2lfaW9yZW1hcF9hZGRyWzBdKSB7XFxuK1xcdFxcdHJldCA9IC1FTk9NRU07XFxuK1xcdFxcdGRldl9lcnIoenhkaF9kZXYtXFx1MDAzZWRldmljZSwgXFxcImRoIHBmIHBjaSBpb3JlbWFwIGZhaWxlZFxcXFxuXFxcIik7XFxuK1xcdFxcdGdvdG8gZXJyX3BjaV9zYXZlX3N0YXRlO1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rXFxuK2Vycl9wY2lfc2F2ZV9zdGF0ZTpcXG4rXFx0cGNpX3JlbGVhc2Vfc2VsZWN0ZWRfcmVnaW9ucyh6eGRoX2Rldi1cXHUwMDNlcGRldixcXG4rXFx0XFx0XFx0XFx0ICAgICBwY2lfc2VsZWN0X2JhcnMoenhkaF9kZXYtXFx1MDAzZXBkZXYsIElPUkVTT1VSQ0VfTUVNKSk7XFxuK2Vycl9wY2k6XFxuK1xcdHBjaV9kaXNhYmxlX2RldmljZSh6eGRoX2Rldi1cXHUwMDNlcGRldik7XFxuK1xcdHJldHVybiByZXQ7XFxuK31cXG4rXFxuK3ZvaWQgenhkaF9wZl9wY2lfY2xvc2Uoc3RydWN0IHp4ZGhfY29yZV9kZXYgKnp4ZGhfZGV2KVxcbit7XFxuK1xcdHN0cnVjdCB6eGRoX3BmX2RldiAqcGZfZGV2ID0genhkaF9kZXYtXFx1MDAzZXByaXY7XFxuK1xcbitcXHRpb3VubWFwKHBmX2Rldi1cXHUwMDNlcGNpX2lvcmVtYXBfYWRkclswXSk7XFxuK1xcdHBjaV9yZWxlYXNlX3NlbGVjdGVkX3JlZ2lvbnMoenhkaF9kZXYtXFx1MDAzZXBkZXYsXFxuK1xcdFxcdFxcdFxcdCAgICAgcGNpX3NlbGVjdF9iYXJzKHp4ZGhfZGV2LVxcdTAwM2VwZGV2LCBJT1JFU09VUkNFX01FTSkpO1xcbitcXHRwY2lfZGlzYWJsZV9kZXZpY2UoenhkaF9kZXYtXFx1MDAzZXBkZXYpO1xcbit9XFxuK1xcbitpbnQgenhkaF9wZl9wY2lfZmluZF9jYXBhYmlsaXR5KHN0cnVjdCBwY2lfZGV2ICpwZGV2LCB1OCBjZmdfdHlwZSxcXG4rXFx0XFx0XFx0XFx0dTMyIGlvcmVzb3VyY2VfdHlwZXMsIGludCAqYmFycylcXG4re1xcbitcXHRpbnQgcG9zO1xcbitcXHR1OCB0eXBlO1xcbitcXHR1OCBiYXI7XFxuK1xcbitcXHRmb3IgKHBvcyA9IHBjaV9maW5kX2NhcGFiaWxpdHkocGRldiwgUENJX0NBUF9JRF9WTkRSKTsgcG9zIFxcdTAwM2UgMDtcXG4rXFx0ICAgICBwb3MgPSBwY2lfZmluZF9uZXh0X2NhcGFiaWxpdHkocGRldiwgcG9zLCBQQ0lfQ0FQX0lEX1ZORFIpKSB7XFxuK1xcdFxcdHBjaV9yZWFkX2NvbmZpZ19ieXRlKHBkZXYsXFxuK1xcdFxcdFxcdFxcdCAgICAgcG9zICsgb2Zmc2V0b2Yoc3RydWN0IHp4ZGhfcGZfcGNpX2NhcCxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0XFx0Y2ZnX3R5cGUpLCBcXHUwMDI2dHlwZSk7XFxuK1xcdFxcdHBjaV9yZWFkX2NvbmZpZ19ieXRlKHBkZXYsXFxuK1xcdFxcdFxcdFxcdCAgICAgcG9zICsgb2Zmc2V0b2Yoc3RydWN0IHp4ZGhfcGZfcGNpX2NhcCwgYmFyKSwgXFx1MDAyNmJhcik7XFxuK1xcbitcXHRcXHQvKiBpZ25vcmUgc3RydWN0dXJlcyB3aXRoIHJlc2VydmVkIEJBUiB2YWx1ZXMgKi9cXG4rXFx0XFx0aWYgKGJhciBcXHUwMDNlIFpYREhfUEZfTUFYX0JBUl9WQUwpXFxuK1xcdFxcdFxcdGNvbnRpbnVlO1xcbitcXG4rXFx0XFx0aWYgKHR5cGUgPT0gY2ZnX3R5cGUpIHtcXG4rXFx0XFx0XFx0aWYgKHBjaV9yZXNvdXJjZV9sZW4ocGRldiwgYmFyKSBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHRcXHQgICAgcGNpX3Jlc291cmNlX2ZsYWdzKHBkZXYsIGJhcikgXFx1MDAyNiBpb3Jlc291cmNlX3R5cGVzKSB7XFxuK1xcdFxcdFxcdFxcdCpiYXJzIHw9ICgxIFxcdTAwM2NcXHUwMDNjIGJhcik7XFxuK1xcdFxcdFxcdFxcdHJldHVybiBwb3M7XFxuK1xcdFxcdFxcdH1cXG4rXFx0XFx0fVxcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rdm9pZCBfX2lvbWVtICp6eGRoX3BmX21hcF9jYXBhYmlsaXR5KHN0cnVjdCB6eGRoX2NvcmVfZGV2ICp6eGRoX2RldiwgaW50IG9mZixcXG4rXFx0XFx0XFx0XFx0ICAgICBzaXplX3QgbWlubGVuLCB1MzIgYWxpZ24sXFxuK1xcdFxcdFxcdFxcdCAgICAgdTMyIHN0YXJ0LCB1MzIgc2l6ZSxcXG4rXFx0XFx0XFx0XFx0ICAgICBzaXplX3QgKmxlbiwgcmVzb3VyY2Vfc2l6ZV90ICpwYSxcXG4rXFx0XFx0XFx0XFx0ICAgICB1MzIgKmJhcl9vZmYpXFxuK3tcXG4rXFx0c3RydWN0IHBjaV9kZXYgKnBkZXYgPSB6eGRoX2Rldi1cXHUwMDNlcGRldjtcXG4rXFx0dm9pZCBfX2lvbWVtICpwO1xcbitcXHR1MzIgb2Zmc2V0O1xcbitcXHR1MzIgbGVuZ3RoO1xcbitcXHR1OCBiYXI7XFxuK1xcbitcXHRwY2lfcmVhZF9jb25maWdfYnl0ZShwZGV2LFxcbitcXHRcXHRcXHQgICAgIG9mZiArIG9mZnNldG9mKHN0cnVjdCB6eGRoX3BmX3BjaV9jYXAsIGJhciksIFxcdTAwMjZiYXIpO1xcbitcXG4rXFx0aWYgKGJhciBcXHUwMDNlIFpYREhfUEZfTUFYX0JBUl9WQUwpIHtcXG4rXFx0XFx0ZGV2X2Vycih6eGRoX2Rldi1cXHUwMDNlZGV2aWNlLCBcXFwiaW52YWxpZCBiYXIgJXVcXFxcblxcXCIsIGJhcik7XFxuK1xcdFxcdHJldHVybiBOVUxMO1xcbitcXHR9XFxuK1xcbitcXHRwY2lfcmVhZF9jb25maWdfZHdvcmQocGRldixcXG4rXFx0XFx0XFx0ICAgICAgb2ZmICsgb2Zmc2V0b2Yoc3RydWN0IHp4ZGhfcGZfcGNpX2NhcCxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0b2Zmc2V0KSwgXFx1MDAyNm9mZnNldCk7XFxuK1xcdHBjaV9yZWFkX2NvbmZpZ19kd29yZChwZGV2LFxcbitcXHRcXHRcXHQgICAgICBvZmYgKyBvZmZzZXRvZihzdHJ1Y3QgenhkaF9wZl9wY2lfY2FwLFxcbitcXHRcXHRcXHRcXHRcXHRcXHRsZW5ndGgpLCBcXHUwMDI2bGVuZ3RoKTtcXG4rXFxuK1xcdGlmIChiYXJfb2ZmKVxcbitcXHRcXHQqYmFyX29mZiA9IG9mZnNldDtcXG4rXFxuK1xcdGlmIChsZW5ndGggXFx1MDAzYz0gc3RhcnQpIHtcXG4rXFx0XFx0ZGV2X2Vycih6eGRoX2Rldi1cXHUwMDNlZGV2aWNlLCBcXFwiYmFkIGNhcGFiaWxpdHkgbGVuICV1IChcXHUwMDNlJXUgZXhwZWN0ZWQpXFxcXG5cXFwiLFxcbitcXHRcXHRcXHRsZW5ndGgsIHN0YXJ0KTtcXG4rXFx0XFx0cmV0dXJuIE5VTEw7XFxuK1xcdH1cXG4rXFxuK1xcdGlmIChsZW5ndGggLSBzdGFydCBcXHUwMDNjIG1pbmxlbikge1xcbitcXHRcXHRkZXZfZXJyKHp4ZGhfZGV2LVxcdTAwM2VkZXZpY2UsIFxcXCJiYWQgY2FwYWJpbGl0eSBsZW4gJXUgKFxcdTAwM2U9JXp1IGV4cGVjdGVkKVxcXFxuXFxcIixcXG4rXFx0XFx0XFx0bGVuZ3RoLCBtaW5sZW4pO1xcbitcXHRcXHRyZXR1cm4gTlVMTDtcXG4rXFx0fVxcbitcXG4rXFx0bGVuZ3RoIC09IHN0YXJ0O1xcbitcXHRpZiAoc3RhcnQgKyBvZmZzZXQgXFx1MDAzYyBvZmZzZXQpIHtcXG4rXFx0XFx0ZGV2X2Vycih6eGRoX2Rldi1cXHUwMDNlZGV2aWNlLCBcXFwibWFwIHdyYXAtYXJvdW5kICV1KyV1XFxcXG5cXFwiLCBzdGFydCwgb2Zmc2V0KTtcXG4rXFx0XFx0cmV0dXJuIE5VTEw7XFxuK1xcdH1cXG4rXFxuK1xcdG9mZnNldCArPSBzdGFydDtcXG4rXFx0aWYgKG9mZnNldCBcXHUwMDI2IChhbGlnbiAtIDEpKSB7XFxuK1xcdFxcdGRldl9lcnIoenhkaF9kZXYtXFx1MDAzZWRldmljZSwgXFxcIm9mZnNldCAldSBub3QgYWxpZ25lZCB0byAldVxcXFxuXFxcIiwgb2Zmc2V0LCBhbGlnbik7XFxuK1xcdFxcdHJldHVybiBOVUxMO1xcbitcXHR9XFxuK1xcbitcXHRpZiAobGVuZ3RoIFxcdTAwM2Ugc2l6ZSlcXG4rXFx0XFx0bGVuZ3RoID0gc2l6ZTtcXG4rXFxuK1xcdGlmIChsZW4pXFxuK1xcdFxcdCpsZW4gPSBsZW5ndGg7XFxuK1xcbitcXHRpZiAobGVuZ3RoICsgb2Zmc2V0IFxcdTAwM2Mgb2Zmc2V0IHx8XFxuK1xcdCAgICBsZW5ndGggKyBvZmZzZXQgXFx1MDAzZSBwY2lfcmVzb3VyY2VfbGVuKHBkZXYsIGJhcikpIHtcXG4rXFx0XFx0ZGV2X2Vycih6eGRoX2Rldi1cXHUwMDNlZGV2aWNlLFxcbitcXHRcXHRcXHRcXFwibWFwICV1QCV1IG91dCBvZiByYW5nZSBvbiBiYXIgJXUgbGVuZ3RoICVsdVxcXFxuXFxcIixcXG4rXFx0XFx0XFx0bGVuZ3RoLCBvZmZzZXQsIGJhcixcXG4rXFx0XFx0XFx0KHVuc2lnbmVkIGxvbmcpcGNpX3Jlc291cmNlX2xlbihwZGV2LCBiYXIpKTtcXG4rXFx0XFx0cmV0dXJuIE5VTEw7XFxuK1xcdH1cXG4rXFxuK1xcdHAgPSBwY2lfaW9tYXBfcmFuZ2UocGRldiwgYmFyLCBvZmZzZXQsIGxlbmd0aCk7XFxuK1xcdGlmICghcCkge1xcbitcXHRcXHRkZXZfZXJyKHp4ZGhfZGV2LVxcdTAwM2VkZXZpY2UsIFxcXCJ1bmFibGUgdG8gbWFwIGN1c3RvbSBxdWV1ZSAldUAldSBvbiBiYXIgJXVcXFxcblxcXCIsXFxuK1xcdFxcdFxcdGxlbmd0aCwgb2Zmc2V0LCBiYXIpO1xcbitcXHR9IGVsc2UgaWYgKHBhKSB7XFxuK1xcdFxcdCpwYSA9IHBjaV9yZXNvdXJjZV9zdGFydChwZGV2LCBiYXIpICsgb2Zmc2V0O1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gcDtcXG4rfVxcbitcXG4raW50IHp4ZGhfcGZfY29tbW9uX2NmZ19pbml0KHN0cnVjdCB6eGRoX2NvcmVfZGV2ICp6eGRoX2RldilcXG4re1xcbitcXHRzdHJ1Y3QgenhkaF9wZl9kZXYgKnBmX2RldiA9IHp4ZGhfZGV2LVxcdTAwM2Vwcml2O1xcbitcXHRzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IHp4ZGhfZGV2LVxcdTAwM2VwZGV2O1xcbitcXHRpbnQgY29tbW9uO1xcbitcXG4rXFx0LyogY2hlY2sgZm9yIGEgY29tbW9uIGNvbmZpZzogaWYgbm90LCB1c2UgbGVnYWN5IG1vZGUgKGJhciAwKS4gKi9cXG4rXFx0Y29tbW9uID0genhkaF9wZl9wY2lfZmluZF9jYXBhYmlsaXR5KHBkZXYsIFpYREhfUENJX0NBUF9DT01NT05fQ0ZHLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgIElPUkVTT1VSQ0VfTUVNLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgIFxcdTAwMjZwZl9kZXYtXFx1MDAzZW1vZGVybl9iYXJzKTtcXG4rXFx0aWYgKCFjb21tb24pIHtcXG4rXFx0XFx0ZGV2X2Vycih6eGRoX2Rldi1cXHUwMDNlZGV2aWNlLFxcbitcXHRcXHRcXHRcXFwibWlzc2luZyBjYXBhYmlsaXRpZXMsIGxlYXZpbmcgZm9yIGxlZ2FjeSBkcml2ZXJcXFxcblxcXCIpO1xcbitcXHRcXHRyZXR1cm4gLUVOT0RFVjtcXG4rXFx0fVxcbitcXG4rXFx0cGZfZGV2LVxcdTAwM2Vjb21tb24gPSB6eGRoX3BmX21hcF9jYXBhYmlsaXR5KHp4ZGhfZGV2LCBjb21tb24sXFxuK1xcdFxcdFxcdFxcdFxcdFxcdHNpemVvZihzdHJ1Y3QgenhkaF9wZl9wY2lfY29tbW9uX2NmZyksXFxuK1xcdFxcdFxcdFxcdFxcdFxcdFpYREhfUEZfQUxJR040LCAwLFxcbitcXHRcXHRcXHRcXHRcXHRcXHRzaXplb2Yoc3RydWN0IHp4ZGhfcGZfcGNpX2NvbW1vbl9jZmcpLFxcbitcXHRcXHRcXHRcXHRcXHRcXHROVUxMLCBOVUxMLCBOVUxMKTtcXG4rXFx0aWYgKCFwZl9kZXYtXFx1MDAzZWNvbW1vbikge1xcbitcXHRcXHRkZXZfZXJyKHp4ZGhfZGV2LVxcdTAwM2VkZXZpY2UsIFxcXCJwZl9kZXYtXFx1MDAzZWNvbW1vbiBpcyBudWxsXFxcXG5cXFwiKTtcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitpbnQgenhkaF9wZl9ub3RpZnlfY2ZnX2luaXQoc3RydWN0IHp4ZGhfY29yZV9kZXYgKnp4ZGhfZGV2KVxcbit7XFxuK1xcdHN0cnVjdCB6eGRoX3BmX2RldiAqcGZfZGV2ID0genhkaF9kZXYtXFx1MDAzZXByaXY7XFxuK1xcdHN0cnVjdCBwY2lfZGV2ICpwZGV2ID0genhkaF9kZXYtXFx1MDAzZXBkZXY7XFxuK1xcdHUzMiBub3RpZnlfbGVuZ3RoO1xcbitcXHR1MzIgbm90aWZ5X29mZnNldDtcXG4rXFx0aW50IG5vdGlmeTtcXG4rXFxuK1xcdC8qIElmIGNvbW1vbiBpcyB0aGVyZSwgdGhlc2Ugc2hvdWxkIGJlIHRvby4uLiAqL1xcbitcXHRub3RpZnkgPSB6eGRoX3BmX3BjaV9maW5kX2NhcGFiaWxpdHkocGRldiwgWlhESF9QQ0lfQ0FQX05PVElGWV9DRkcsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgSU9SRVNPVVJDRV9NRU0sXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgXFx1MDAyNnBmX2Rldi1cXHUwMDNlbW9kZXJuX2JhcnMpO1xcbitcXHRpZiAoIW5vdGlmeSkge1xcbitcXHRcXHRkZXZfZXJyKHp4ZGhfZGV2LVxcdTAwM2VkZXZpY2UsIFxcXCJtaXNzaW5nIG5vdGlmeSBjZmcgY2FwYWJpbGl0eVxcXFxuXFxcIik7XFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXHR9XFxuK1xcbitcXHRwY2lfcmVhZF9jb25maWdfZHdvcmQocGRldixcXG4rXFx0XFx0XFx0ICAgICAgbm90aWZ5ICsgb2Zmc2V0b2Yoc3RydWN0IHp4ZGhfcGZfcGNpX25vdGlmeV9jYXAsXFxuK1xcdFxcdFxcdFxcdG5vdGlmeV9vZmZfbXVsdGlwbGllciksXFxuK1xcdFxcdFxcdTAwMjZwZl9kZXYtXFx1MDAzZW5vdGlmeV9vZmZzZXRfbXVsdGlwbGllcik7XFxuK1xcdHBjaV9yZWFkX2NvbmZpZ19kd29yZChwZGV2LFxcbitcXHRcXHRcXHQgICAgICBub3RpZnkgKyBvZmZzZXRvZihzdHJ1Y3QgenhkaF9wZl9wY2lfbm90aWZ5X2NhcCxcXG4rXFx0XFx0XFx0XFx0Y2FwLmxlbmd0aCksIFxcdTAwMjZub3RpZnlfbGVuZ3RoKTtcXG4rXFx0cGNpX3JlYWRfY29uZmlnX2R3b3JkKHBkZXYsXFxuK1xcdFxcdFxcdCAgICAgIG5vdGlmeSArIG9mZnNldG9mKHN0cnVjdCB6eGRoX3BmX3BjaV9ub3RpZnlfY2FwLFxcbitcXHRcXHRcXHRcXHRjYXAub2Zmc2V0KSwgXFx1MDAyNm5vdGlmeV9vZmZzZXQpO1xcbitcXG4rXFx0LyogV2UgZG9uJ3Qga25vdyBob3cgbWFueSBWUXMgd2UnbGwgbWFwLCBhaGVhZCBvZiB0aGUgdGltZS5cXG4rXFx0ICogSWYgbm90aWZ5IGxlbmd0aCBpcyBzbWFsbCwgbWFwIGl0IGFsbCBub3cuIE90aGVyd2lzZSxcXG4rXFx0ICogbWFwIGVhY2ggVlEgaW5kaXZpZHVhbGx5IGxhdGVyLlxcbitcXHQgKi9cXG4rXFx0aWYgKG5vdGlmeV9sZW5ndGggXFx1MDAzYz0gUEFHRV9TSVpFIC0gKG5vdGlmeV9vZmZzZXQgJSBQQUdFX1NJWkUpKSB7XFxuK1xcdFxcdHBmX2Rldi1cXHUwMDNlbm90aWZ5X2Jhc2UgPSB6eGRoX3BmX21hcF9jYXBhYmlsaXR5KHp4ZGhfZGV2LCBub3RpZnksXFxuK1xcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICAgWlhESF9QRl9NQVBfTUlOTEVOMixcXG4rXFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgIFpYREhfUEZfQUxJR04yLCAwLFxcbitcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgbm90aWZ5X2xlbmd0aCxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgIFxcdTAwMjZwZl9kZXYtXFx1MDAzZW5vdGlmeV9sZW4sXFxuK1xcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICBcXHUwMDI2cGZfZGV2LVxcdTAwM2Vub3RpZnlfcGEsIE5VTEwpO1xcbitcXHRcXHRpZiAoIXBmX2Rldi1cXHUwMDNlbm90aWZ5X2Jhc2UpIHtcXG4rXFx0XFx0XFx0ZGV2X2Vycih6eGRoX2Rldi1cXHUwMDNlZGV2aWNlLCBcXFwicGZfZGV2LVxcdTAwM2Vub3RpZnlfYmFzZSBpcyBudWxsXFxcXG5cXFwiKTtcXG4rXFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcdFxcdH1cXG4rXFx0fSBlbHNlIHtcXG4rXFx0XFx0cGZfZGV2LVxcdTAwM2Vub3RpZnlfbWFwX2NhcCA9IG5vdGlmeTtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK2ludCB6eGRoX3BmX2RldmljZV9jZmdfaW5pdChzdHJ1Y3QgenhkaF9jb3JlX2RldiAqenhkaF9kZXYpXFxuK3tcXG4rXFx0c3RydWN0IHp4ZGhfcGZfZGV2ICpwZl9kZXYgPSB6eGRoX2Rldi1cXHUwMDNlcHJpdjtcXG4rXFx0c3RydWN0IHBjaV9kZXYgKnBkZXYgPSB6eGRoX2Rldi1cXHUwMDNlcGRldjtcXG4rXFx0aW50IGRldmljZTtcXG4rXFxuK1xcdC8qIERldmljZSBjYXBhYmlsaXR5IGlzIG9ubHkgbWFuZGF0b3J5IGZvclxcbitcXHQgKiBkZXZpY2VzIHRoYXQgaGF2ZSBkZXZpY2Utc3BlY2lmaWMgY29uZmlndXJhdGlvbi5cXG4rXFx0ICovXFxuK1xcdGRldmljZSA9IHp4ZGhfcGZfcGNpX2ZpbmRfY2FwYWJpbGl0eShwZGV2LCBaWERIX1BDSV9DQVBfREVWSUNFX0NGRyxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICBJT1JFU09VUkNFX01FTSxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICBcXHUwMDI2cGZfZGV2LVxcdTAwM2Vtb2Rlcm5fYmFycyk7XFxuK1xcbitcXHQvKiB3ZSBkb24ndCBrbm93IGhvdyBtdWNoIHdlIHNob3VsZCBtYXAsXFxuK1xcdCAqIGJ1dCBQQUdFX1NJWkUgaXMgbW9yZSB0aGFuIGVub3VnaCBmb3IgYWxsIGV4aXN0aW5nIGRldmljZXMuXFxuK1xcdCAqL1xcbitcXHRpZiAoZGV2aWNlKSB7XFxuK1xcdFxcdHBmX2Rldi1cXHUwMDNlZGV2aWNlID0genhkaF9wZl9tYXBfY2FwYWJpbGl0eSh6eGRoX2RldiwgZGV2aWNlLCAwLFxcbitcXHRcXHRcXHRcXHRcXHRcXHRcXHRaWERIX1BGX0FMSUdONCwgMCwgUEFHRV9TSVpFLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgICAgICAgXFx1MDAyNnBmX2Rldi1cXHUwMDNlZGV2aWNlX2xlbiwgTlVMTCxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgIFxcdTAwMjZwZl9kZXYtXFx1MDAzZWRldl9jZmdfYmFyX29mZik7XFxuK1xcdFxcdGlmICghcGZfZGV2LVxcdTAwM2VkZXZpY2UpIHtcXG4rXFx0XFx0XFx0ZGV2X2Vycih6eGRoX2Rldi1cXHUwMDNlZGV2aWNlLCBcXFwicGZfZGV2LVxcdTAwM2VkZXZpY2UgaXMgbnVsbFxcXFxuXFxcIik7XFxuK1xcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXHRcXHR9XFxuK1xcdH1cXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3ZvaWQgenhkaF9wZl9tb2Rlcm5fY2ZnX3VuaW5pdChzdHJ1Y3QgenhkaF9jb3JlX2RldiAqenhkaF9kZXYpXFxuK3tcXG4rXFx0c3RydWN0IHp4ZGhfcGZfZGV2ICpwZl9kZXYgPSB6eGRoX2Rldi1cXHUwMDNlcHJpdjtcXG4rXFx0c3RydWN0IHBjaV9kZXYgKnBkZXYgPSB6eGRoX2Rldi1cXHUwMDNlcGRldjtcXG4rXFxuK1xcdGlmIChwZl9kZXYtXFx1MDAzZWRldmljZSlcXG4rXFx0XFx0cGNpX2lvdW5tYXAocGRldiwgcGZfZGV2LVxcdTAwM2VkZXZpY2UpO1xcbitcXHRpZiAocGZfZGV2LVxcdTAwM2Vub3RpZnlfYmFzZSlcXG4rXFx0XFx0cGNpX2lvdW5tYXAocGRldiwgcGZfZGV2LVxcdTAwM2Vub3RpZnlfYmFzZSk7XFxuK1xcdHBjaV9pb3VubWFwKHBkZXYsIHBmX2Rldi1cXHUwMDNlY29tbW9uKTtcXG4rfVxcbitcXG4raW50IHp4ZGhfcGZfbW9kZXJuX2NmZ19pbml0KHN0cnVjdCB6eGRoX2NvcmVfZGV2ICp6eGRoX2RldilcXG4re1xcbitcXHRzdHJ1Y3QgenhkaF9wZl9kZXYgKnBmX2RldiA9IHp4ZGhfZGV2LVxcdTAwM2Vwcml2O1xcbitcXHRzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IHp4ZGhfZGV2LVxcdTAwM2VwZGV2O1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0cmV0ID0genhkaF9wZl9jb21tb25fY2ZnX2luaXQoenhkaF9kZXYpO1xcbitcXHRpZiAocmV0KSB7XFxuK1xcdFxcdGRldl9lcnIoenhkaF9kZXYtXFx1MDAzZWRldmljZSwgXFxcInp4ZGhfcGZfY29tbW9uX2NmZ19pbml0IGZhaWxlZDogJWRcXFxcblxcXCIsIHJldCk7XFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcdH1cXG4rXFxuK1xcdHJldCA9IHp4ZGhfcGZfbm90aWZ5X2NmZ19pbml0KHp4ZGhfZGV2KTtcXG4rXFx0aWYgKHJldCkge1xcbitcXHRcXHRkZXZfZXJyKHp4ZGhfZGV2LVxcdTAwM2VkZXZpY2UsIFxcXCJ6eGRoX3BmX25vdGlmeV9jZmdfaW5pdCBmYWlsZWQ6ICVkXFxcXG5cXFwiLCByZXQpO1xcbitcXHRcXHRnb3RvIGVycl9tYXBfbm90aWZ5O1xcbitcXHR9XFxuK1xcbitcXHRyZXQgPSB6eGRoX3BmX2RldmljZV9jZmdfaW5pdCh6eGRoX2Rldik7XFxuK1xcdGlmIChyZXQpIHtcXG4rXFx0XFx0ZGV2X2Vycih6eGRoX2Rldi1cXHUwMDNlZGV2aWNlLCBcXFwienhkaF9wZl9kZXZpY2VfY2ZnX2luaXQgZmFpbGVkOiAlZFxcXFxuXFxcIiwgcmV0KTtcXG4rXFx0XFx0Z290byBlcnJfbWFwX2RldmljZTtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIDA7XFxuK1xcbitlcnJfbWFwX2RldmljZTpcXG4rXFx0aWYgKHBmX2Rldi1cXHUwMDNlbm90aWZ5X2Jhc2UpXFxuK1xcdFxcdHBjaV9pb3VubWFwKHBkZXYsIHBmX2Rldi1cXHUwMDNlbm90aWZ5X2Jhc2UpO1xcbitlcnJfbWFwX25vdGlmeTpcXG4rXFx0cGNpX2lvdW5tYXAocGRldiwgcGZfZGV2LVxcdTAwM2Vjb21tb24pO1xcbitcXHRyZXR1cm4gcmV0O1xcbit9XFxuK1xcbitzdGF0aWMgaW50IHp4ZGhfcGZfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICppZClcXG4re1xcbitcXHRzdHJ1Y3QgenhkaF9jb3JlX2RldiAqenhkaF9kZXY7XFxuK1xcdHN0cnVjdCB6eGRoX3BmX2RldiAqcGZfZGV2O1xcbitcXHRzdHJ1Y3QgZGV2bGluayAqZGV2bGluaztcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdGRldmxpbmsgPSBkZXZsaW5rX2FsbG9jKFxcdTAwMjZ6eGRoX3BmX2Rldmxpbmtfb3BzLCBzaXplb2Yoc3RydWN0IHp4ZGhfY29yZV9kZXYpLFxcbitcXHRcXHRcXHRcXHRcXHUwMDI2cGRldi1cXHUwMDNlZGV2KTtcXG4rXFx0aWYgKCFkZXZsaW5rKVxcbitcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4rXFxuK1xcdHp4ZGhfZGV2ID0gZGV2bGlua19wcml2KGRldmxpbmspO1xcbitcXHR6eGRoX2Rldi1cXHUwMDNlZGV2aWNlID0gXFx1MDAyNnBkZXYtXFx1MDAzZWRldjtcXG4rXFx0enhkaF9kZXYtXFx1MDAzZXBkZXYgPSBwZGV2O1xcbitcXHR6eGRoX2Rldi1cXHUwMDNlZGV2bGluayA9IGRldmxpbms7XFxuK1xcbitcXHRwZl9kZXYgPSB6eGRoX2NvcmVfYWxsb2NfcHJpdih6eGRoX2Rldiwgc2l6ZW9mKCpwZl9kZXYpKTtcXG4rXFx0aWYgKCFwZl9kZXYpIHtcXG4rXFx0XFx0ZGV2X2VycihcXHUwMDI2cGRldi1cXHUwMDNlZGV2LCBcXFwienhkaF9wZl9kZXYgYWxsb2MgZmFpbGVkXFxcXG5cXFwiKTtcXG4rXFx0XFx0cmV0ID0gLUVOT01FTTtcXG4rXFx0XFx0Z290byBlcnJfcGZfZGV2O1xcbitcXHR9XFxuK1xcbitcXHRyZXQgPSB6eGRoX3BmX3BjaV9pbml0KHp4ZGhfZGV2KTtcXG4rXFx0aWYgKHJldCkge1xcbitcXHRcXHRkZXZfZXJyKFxcdTAwMjZwZGV2LVxcdTAwM2VkZXYsIFxcXCJ6eGRoX3BmX3BjaV9pbml0IGZhaWxlZDogJWRcXFxcblxcXCIsIHJldCk7XFxuK1xcdFxcdGdvdG8gZXJyX3BjaV9pbml0O1xcbitcXHR9XFxuK1xcbitcXHRyZXQgPSB6eGRoX3BmX21vZGVybl9jZmdfaW5pdCh6eGRoX2Rldik7XFxuK1xcdGlmIChyZXQpIHtcXG4rXFx0XFx0ZGV2X2VycihcXHUwMDI2cGRldi1cXHUwMDNlZGV2LCBcXFwienhkaF9wZl9tb2Rlcm5fY2ZnX2luaXQgZmFpbGVkOiAlZFxcXFxuXFxcIiwgcmV0KTtcXG4rXFx0XFx0Z290byBlcnJfY2ZnX2luaXQ7XFxuK1xcdH1cXG4rXFxuK1xcdGRldmxpbmtfcmVnaXN0ZXIoZGV2bGluayk7XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rXFxuK2Vycl9jZmdfaW5pdDpcXG4rXFx0enhkaF9wZl9wY2lfY2xvc2UoenhkaF9kZXYpO1xcbitlcnJfcGNpX2luaXQ6XFxuK1xcdHp4ZGhfY29yZV9mcmVlX3ByaXYoenhkaF9kZXYpO1xcbitlcnJfcGZfZGV2OlxcbitcXHRkZXZsaW5rX2ZyZWUoZGV2bGluayk7XFxuK1xcdHJldHVybiByZXQ7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIHp4ZGhfcGZfcmVtb3ZlKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxcbit7XFxuK1xcdHN0cnVjdCB6eGRoX2NvcmVfZGV2ICp6eGRoX2RldiA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTtcXG4rXFx0c3RydWN0IGRldmxpbmsgKmRldmxpbmsgPSBwcml2X3RvX2RldmxpbmsoenhkaF9kZXYpO1xcbitcXG4rXFx0ZGV2bGlua191bnJlZ2lzdGVyKGRldmxpbmspO1xcbitcXHR6eGRoX3BmX21vZGVybl9jZmdfdW5pbml0KHp4ZGhfZGV2KTtcXG4rXFx0enhkaF9wZl9wY2lfY2xvc2UoenhkaF9kZXYpO1xcbitcXHR6eGRoX2NvcmVfZnJlZV9wcml2KHp4ZGhfZGV2KTtcXG4rXFx0ZGV2bGlua19mcmVlKGRldmxpbmspO1xcbitcXHRwY2lfc2V0X2RydmRhdGEocGRldiwgTlVMTCk7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIHp4ZGhfcGZfc2h1dGRvd24oc3RydWN0IHBjaV9kZXYgKnBkZXYpXFxuK3tcXG4rXFx0aWYgKHN5c3RlbV9zdGF0ZSA9PSBTWVNURU1fUE9XRVJfT0ZGKVxcbitcXHRcXHRwY2lfc2V0X3Bvd2VyX3N0YXRlKHBkZXYsIFBDSV9EM2hvdCk7XFxuK1xcdHBjaV9kaXNhYmxlX2RldmljZShwZGV2KTtcXG4rfVxcbitcXG4rc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIHp4ZGhfcGZfZHJpdmVyID0ge1xcbitcXHQubmFtZSA9IFxcXCJkaW5naGFpMTBlXFxcIixcXG4rXFx0LmlkX3RhYmxlID0genhkaF9wZl9wY2lfdGFibGUsXFxuK1xcdC5wcm9iZSA9IHp4ZGhfcGZfcHJvYmUsXFxuK1xcdC5yZW1vdmUgPSB6eGRoX3BmX3JlbW92ZSxcXG4rXFx0LnNodXRkb3duID0genhkaF9wZl9zaHV0ZG93bixcXG4rfTtcXG4rXFxuK21vZHVsZV9wY2lfZHJpdmVyKHp4ZGhfcGZfZHJpdmVyKTtcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmhcXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxcbmluZGV4IDAwMDAwMDAwMDAwMDAuLjczNzNkZWU4ZDFhOWZcXG4tLS0gL2Rldi9udWxsXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuaFxcbkBAIC0wLDAgKzEsNzUgQEBcXG4rLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seSAqL1xcbisvKlxcbisgKiBaVEUgRGluZ0hhaSBFdGhlcm5ldCBkcml2ZXIgLSBQRiBoZWFkZXJcXG4rICogQ29weXJpZ2h0IChjKSAyMDIyLTIwMjYsIFpURSBDb3Jwb3JhdGlvbi5cXG4rICovXFxuK1xcbisjaWZuZGVmIF9fWlhESF9FTl9QRl9IX19cXG4rI2RlZmluZSBfX1pYREhfRU5fUEZfSF9fXFxuK1xcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvdHlwZXMuaFxcdTAwM2VcXG4rXFxuKyNkZWZpbmUgWlhESF9QRl9WRU5ET1JfSURcXHQweDFjZjJcXG4rI2RlZmluZSBaWERIX1BGX0RFVklDRV9JRFxcdDB4ODA0MFxcbisjZGVmaW5lIFpYREhfVkZfREVWSUNFX0lEXFx0MHg4MDQxXFxuK1xcbisvKiBDb21tb24gY29uZmlndXJhdGlvbiAqL1xcbisjZGVmaW5lIFpYREhfUENJX0NBUF9DT01NT05fQ0ZHXFx0MVxcbisvKiBOb3RpZmljYXRpb25zICovXFxuKyNkZWZpbmUgWlhESF9QQ0lfQ0FQX05PVElGWV9DRkdcXHQyXFxuKy8qIElTUiBhY2Nlc3MgKi9cXG4rI2RlZmluZSBaWERIX1BDSV9DQVBfSVNSX0NGR1xcdFxcdDNcXG4rLyogRGV2aWNlIHNwZWNpZmljIGNvbmZpZ3VyYXRpb24gKi9cXG4rI2RlZmluZSBaWERIX1BDSV9DQVBfREVWSUNFX0NGR1xcdDRcXG4rLyogUENJIGNvbmZpZ3VyYXRpb24gYWNjZXNzICovXFxuKyNkZWZpbmUgWlhESF9QQ0lfQ0FQX1BDSV9DRkdcXHRcXHQ1XFxuK1xcbisjZGVmaW5lIFpYREhfUEZfTUFYX0JBUl9WQUxcXHRcXHQweDVcXG4rI2RlZmluZSBaWERIX1BGX0FMSUdONFxcdFxcdFxcdDRcXG4rI2RlZmluZSBaWERIX1BGX0FMSUdOMlxcdFxcdFxcdDJcXG4rI2RlZmluZSBaWERIX1BGX01BUF9NSU5MRU4yXFx0XFx0MlxcbitcXG4rc3RydWN0IHp4ZGhfY29yZV9kZXYge1xcbitcXHRzdHJ1Y3QgZGV2aWNlICpkZXZpY2U7XFxuK1xcdHN0cnVjdCBwY2lfZGV2ICpwZGV2O1xcbitcXHRzdHJ1Y3QgZGV2bGluayAqZGV2bGluaztcXG4rXFx0dm9pZCAqcHJpdjtcXG4rfTtcXG4rXFxuK3N0cnVjdCB6eGRoX3BmX2RldiB7XFxuK1xcdHN0cnVjdCB6eGRoX3BmX3BjaV9jb21tb25fY2ZnIF9faW9tZW0gKmNvbW1vbjtcXG4rXFx0LyogRGV2aWNlLXNwZWNpZmljIGRhdGEgKG5vbi1sZWdhY3kgbW9kZSkgICovXFxuK1xcdC8qIEJhc2Ugb2YgdnEgbm90aWZpY2F0aW9ucyAobm9uLWxlZ2FjeSBtb2RlKS4gKi9cXG4rXFx0dm9pZCBfX2lvbWVtICpkZXZpY2U7XFxuK1xcdHZvaWQgX19pb21lbSAqbm90aWZ5X2Jhc2U7XFxuK1xcdC8qIFBoeXNpY2FsIGJhc2Ugb2YgdnEgbm90aWZpY2F0aW9ucyAqL1xcbitcXHRyZXNvdXJjZV9zaXplX3Qgbm90aWZ5X3BhO1xcbitcXHQvKiBTbyB3ZSBjYW4gc2FuaXR5LWNoZWNrIGFjY2Vzc2VzLiAqL1xcbitcXHRzaXplX3Qgbm90aWZ5X2xlbjtcXG4rXFx0c2l6ZV90IGRldmljZV9sZW47XFxuK1xcdC8qIENhcGFiaWxpdHkgZm9yIHdoZW4gd2UgbmVlZCB0byBtYXAgbm90aWZpY2F0aW9ucyBwZXItdnEuICovXFxuK1xcdHMzMiBub3RpZnlfbWFwX2NhcDtcXG4rXFx0dTMyIG5vdGlmeV9vZmZzZXRfbXVsdGlwbGllcjtcXG4rXFx0LyogTXVsdGlwbHkgcXVldWVfbm90aWZ5X29mZiBieSB0aGlzIHZhbHVlLiAobm9uLWxlZ2FjeSBtb2RlKS4gKi9cXG4rXFx0czMyIG1vZGVybl9iYXJzO1xcbitcXHR2b2lkIF9faW9tZW0gKnBjaV9pb3JlbWFwX2FkZHJbNl07XFxuK1xcdHUzMiBkZXZfY2ZnX2Jhcl9vZmY7XFxuK307XFxuK1xcbit2b2lkICp6eGRoX2NvcmVfYWxsb2NfcHJpdihzdHJ1Y3QgenhkaF9jb3JlX2RldiAqenhkaF9kZXYsIHNpemVfdCBzaXplKTtcXG4rdm9pZCB6eGRoX2NvcmVfZnJlZV9wcml2KHN0cnVjdCB6eGRoX2NvcmVfZGV2ICp6eGRoX2Rldik7XFxuK3ZvaWQgenhkaF9wZl9wY2lfY2xvc2Uoc3RydWN0IHp4ZGhfY29yZV9kZXYgKnp4ZGhfZGV2KTtcXG4raW50IHp4ZGhfcGZfcGNpX2ZpbmRfY2FwYWJpbGl0eShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgdTggY2ZnX3R5cGUsXFxuK1xcdFxcdFxcdFxcdHUzMiBpb3Jlc291cmNlX3R5cGVzLCBpbnQgKmJhcnMpO1xcbit2b2lkIF9faW9tZW0gKnp4ZGhfcGZfbWFwX2NhcGFiaWxpdHkoc3RydWN0IHp4ZGhfY29yZV9kZXYgKnp4ZGhfZGV2LCBpbnQgb2ZmLFxcbitcXHRcXHRcXHRcXHQgICAgIHNpemVfdCBtaW5sZW4sIHUzMiBhbGlnbixcXG4rXFx0XFx0XFx0XFx0ICAgICB1MzIgc3RhcnQsIHUzMiBzaXplLFxcbitcXHRcXHRcXHRcXHQgICAgIHNpemVfdCAqbGVuLCByZXNvdXJjZV9zaXplX3QgKnBhLFxcbitcXHRcXHRcXHRcXHQgICAgIHUzMiAqYmFyX29mZik7XFxuK2ludCB6eGRoX3BmX2NvbW1vbl9jZmdfaW5pdChzdHJ1Y3QgenhkaF9jb3JlX2RldiAqenhkaF9kZXYpO1xcbitpbnQgenhkaF9wZl9ub3RpZnlfY2ZnX2luaXQoc3RydWN0IHp4ZGhfY29yZV9kZXYgKnp4ZGhfZGV2KTtcXG4raW50IHp4ZGhfcGZfZGV2aWNlX2NmZ19pbml0KHN0cnVjdCB6eGRoX2NvcmVfZGV2ICp6eGRoX2Rldik7XFxuK3ZvaWQgenhkaF9wZl9tb2Rlcm5fY2ZnX3VuaW5pdChzdHJ1Y3QgenhkaF9jb3JlX2RldiAqenhkaF9kZXYpO1xcbitpbnQgenhkaF9wZl9tb2Rlcm5fY2ZnX2luaXQoc3RydWN0IHp4ZGhfY29yZV9kZXYgKnp4ZGhfZGV2KTtcXG4rXFxuKyNlbmRpZiAvKiBfX1pYREhfRU5fUEZfSF9fICovXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDE3OjQxOjMzLjI5MDkzOTc5WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6ODg1NzY0MDg3MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyB2ZW5kb3Itc3BlY2lmaWMgUENJZSBFdGhlcm5ldCBkcml2ZXIgKFpURSBEaW5nSGFpKS4gVGhpcyBkcml2ZXIgcmVxdWlyZXMgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSB0aGF0IGlzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLCBtYWtpbmcgaXQgdW5yZWFjaGFibGUgYW5kIHVudGVzdGFibGUgaW4gdmlydHVhbGl6ZWQgZnV6emluZyBlbnZpcm9ubWVudHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA1OWNjMTQyNzQ3NTM2ZDFmYTJhYzFjNTNmYTRiYzMxNDQ1NzkxZWIyXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFN1biBBdWcgMiAxNzo0MTozMSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL01BSU5UQUlORVJTIGIvTUFJTlRBSU5FUlNcbmluZGV4IDJmYjFjNzVhZmQxNjMuLjczNjkyYjA5YmY3YmEgMTAwNjQ0XG4tLS0gYS9NQUlOVEFJTkVSU1xuKysrIGIvTUFJTlRBSU5FUlNcbkBAIC0yOTQ0MCw2ICsyOTQ0MCwxMiBAQCBTOlx0TWFpbnRhaW5lZFxuIFQ6XHRnaXQgZ2l0Oi8vZ2l0Lmtlcm5lbC5vcmcvcHViL3NjbS9saW51eC9rZXJuZWwvZ2l0L3Rpd2FpL3NvdW5kLmdpdFxuIEY6XHRzb3VuZC9oZGEvY29kZWNzL3NlbmFyeXRlY2guY1xuIFxuK1pURSBESU5HSEFJIEVUSEVSTkVUIERSSVZFUlxuK006XHRKdW55YW5nIEhhbiBcdTAwM2NoYW4uanVueWFuZ0B6dGUuY29tLmNuXHUwMDNlXG4rTDpcdG5ldGRldkB2Z2VyLmtlcm5lbC5vcmdcbitTOlx0TWFpbnRhaW5lZFxuK0Y6XHRkcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvXG4rXG4gVEhFIFJFU1RcbiBNOlx0TGludXMgVG9ydmFsZHMgXHUwMDNjdG9ydmFsZHNAbGludXgtZm91bmRhdGlvbi5vcmdcdTAwM2VcbiBMOlx0bGludXgta2VybmVsQHZnZXIua2VybmVsLm9yZ1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L0tjb25maWcgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9LY29uZmlnXG5pbmRleCBiOGY3MGUyYTE3NjNhLi5jMmI2OTk2YjBjZmUxIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvS2NvbmZpZ1xuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvS2NvbmZpZ1xuQEAgLTE4OCw1ICsxODgsNiBAQCBzb3VyY2UgXCJkcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL0tjb25maWdcIlxuIHNvdXJjZSBcImRyaXZlcnMvbmV0L2V0aGVybmV0L3dpem5ldC9LY29uZmlnXCJcbiBzb3VyY2UgXCJkcml2ZXJzL25ldC9ldGhlcm5ldC94aWxpbngvS2NvbmZpZ1wiXG4gc291cmNlIFwiZHJpdmVycy9uZXQvZXRoZXJuZXQveGlyY29tL0tjb25maWdcIlxuK3NvdXJjZSBcImRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9LY29uZmlnXCJcbiBcbiBlbmRpZiAjIEVUSEVSTkVUXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvTWFrZWZpbGUgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9NYWtlZmlsZVxuaW5kZXggNTczNDRmZWM2Y2UwNC4uYTM0YmNiZDRkZjRlOSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L01ha2VmaWxlXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9NYWtlZmlsZVxuQEAgLTEwNCwzICsxMDQsNCBAQCBvYmotJChDT05GSUdfTkVUX1ZFTkRPUl9YSVJDT00pICs9IHhpcmNvbS9cbiBvYmotJChDT05GSUdfTkVUX1ZFTkRPUl9TWU5PUFNZUykgKz0gc3lub3BzeXMvXG4gb2JqLSQoQ09ORklHX05FVF9WRU5ET1JfUEVOU0FORE8pICs9IHBlbnNhbmRvL1xuIG9iai0kKENPTkZJR19PQV9UQzYpICs9IG9hX3RjNi5vXG4rb2JqLSQoQ09ORklHX05FVF9WRU5ET1JfWlRFKSArPSB6dGUvXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL0tjb25maWcgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvS2NvbmZpZ1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLmI5NWMyZmM3ZGI3N2Fcbi0tLSAvZGV2L251bGxcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9LY29uZmlnXG5AQCAtMCwwICsxLDIwIEBAXG4rIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4rI1xuKyMgWlRFIGRyaXZlciBjb25maWd1cmF0aW9uXG4rI1xuK1xuK2NvbmZpZyBORVRfVkVORE9SX1pURVxuKyAgICBib29sIFwiWlRFIGRldmljZXNcIlxuKyAgICBkZWZhdWx0IHlcbisgICAgaGVscFxuKyAgICAgIElmIHlvdSBoYXZlIGEgbmV0d29yayAoRXRoZXJuZXQpIGNhcmQgYmVsb25naW5nIHRvIHRoaXMgY2xhc3MsIHNheSBZLlxuKyAgICAgIE5vdGUgdGhhdCB0aGUgYW5zd2VyIHRvIHRoaXMgcXVlc3Rpb24gZG9lc24ndCBkaXJlY3RseSBhZmZlY3QgdGhlXG4rICAgICAga2VybmVsOiBzYXlpbmcgTiB3aWxsIGp1c3QgY2F1c2UgdGhlIGNvbmZpZ3VyYXRvciB0byBza2lwIGFsbFxuKyAgICAgIHRoZSBxdWVzdGlvbnMgYWJvdXQgWnRlIGNhcmRzLiBJZiB5b3Ugc2F5IFksIHlvdSB3aWxsIGJlIGFza2VkXG4rICAgICAgZm9yIHlvdXIgc3BlY2lmaWMgY2FyZCBpbiB0aGUgZm9sbG93aW5nIHF1ZXN0aW9ucy5cbitcbitpZiBORVRfVkVORE9SX1pURVxuK1xuK3NvdXJjZSBcImRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL0tjb25maWdcIlxuK1xuK2VuZGlmICMgTkVUX1ZFTkRPUl9aVEVcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvTWFrZWZpbGUgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvTWFrZWZpbGVcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwLi5jZDk5MjliNjE1NTljXG4tLS0gL2Rldi9udWxsXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvTWFrZWZpbGVcbkBAIC0wLDAgKzEsNiBAQFxuKyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuKyNcbisjIE1ha2VmaWxlIGZvciB0aGUgWlRFIGRldmljZSBkcml2ZXJzXG4rI1xuK1xuK29iai0kKENPTkZJR19ESU5HSEFJKSArPSBkaW5naGFpL1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL0tjb25maWcgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9LY29uZmlnXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uMTIxYmUzYmY3NzA3ZlxuLS0tIC9kZXYvbnVsbFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvS2NvbmZpZ1xuQEAgLTAsMCArMSwzNCBAQFxuKyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuKyNcbisjIFpURSBEaW5nSGFpIEV0aGVybmV0IGRyaXZlciBjb25maWd1cmF0aW9uXG4rI1xuK1xuK2NvbmZpZyBESU5HSEFJXG4rICAgIGJvb2wgXCJaVEUgRGluZ0hhaSBFdGhlcm5ldCBkcml2ZXJcIlxuKyAgICBkZXBlbmRzIG9uIFBDSVxuKyAgICBzZWxlY3QgTkVUX0RFVkxJTktcbisgICAgaGVscFxuKyAgICAgIFRoaXMgZHJpdmVyIHN1cHBvcnRzIFpURSBEaW5nSGFpIEV0aGVybmV0IGRldmljZXMuXG4rXG4rICAgICAgRGluZ0hhaSBpcyBhIGhpZ2gtcGVyZm9ybWFuY2UgRXRoZXJuZXQgY29udHJvbGxlciB0aGF0IHN1cHBvcnRzXG4rICAgICAgbXVsdGlwbGUgZmVhdHVyZXMgaW5jbHVkaW5nIGhhcmR3YXJlIG9mZmxvYWRpbmcsIFNSLUlPViwgYW5kXG4rICAgICAgYWR2YW5jZWQgdmlydHVhbGl6YXRpb24gY2FwYWJpbGl0aWVzLlxuK1xuKyAgICAgIElmIHlvdSBzYXkgWSBoZXJlLCB5b3UgY2FuIHNlbGVjdCBzcGVjaWZpYyBkcml2ZXIgdmFyaWFudHMgYmVsb3cuXG4rXG4rICAgICAgSWYgdW5zdXJlLCBzYXkgTi5cbitcbitpZiBESU5HSEFJXG4rXG4rY29uZmlnIERJTkdIQUlfUEZcbisgICAgdHJpc3RhdGUgXCJaVEUgRGluZ0hhaSBQRiAoUGh5c2ljYWwgRnVuY3Rpb24pIGRyaXZlclwiXG4rICAgIGhlbHBcbisgICAgICBUaGlzIGRyaXZlciBzdXBwb3J0cyBaVEUgRGluZ0hhaSBQQ0kgRXhwcmVzcyBFdGhlcm5ldFxuKyAgICAgIGFkYXB0ZXJzIChQRikuXG4rXG4rICAgICAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZS4gVGhlIG1vZHVsZVxuKyAgICAgIHdpbGwgYmUgbmFtZWQgZGluZ2hhaTEwZS5cbitcbisgICAgICBJZiB1bnN1cmUsIHNheSBOLlxuK1xuK2VuZGlmICMgRElOR0hBSVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL01ha2VmaWxlIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvTWFrZWZpbGVcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwLi5lMmY0ZGEzM2RmNTkzXG4tLS0gL2Rldi9udWxsXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9NYWtlZmlsZVxuQEAgLTAsMCArMSw3IEBAXG4rIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4rI1xuKyMgTWFrZWZpbGUgZm9yIFpURSBEaW5nSGFpIEV0aGVybmV0IGRyaXZlclxuKyNcbitcbitvYmotJChDT05GSUdfRElOR0hBSV9QRikgKz0gZGluZ2hhaTEwZS5vXG4rZGluZ2hhaTEwZS15IDo9IGVuX3BmLm9cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9kaF9xdWV1ZS5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZGhfcXVldWUuaFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLjViNjM4OTVjMWVhMWVcbi0tLSAvZGV2L251bGxcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2RoX3F1ZXVlLmhcbkBAIC0wLDAgKzEsNTYgQEBcbisvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5ICovXG4rLypcbisgKiBaVEUgRGluZ0hhaSBFdGhlcm5ldCBkcml2ZXIgLSBQQ0kgY2FwYWJpbGl0eSBkZWZpbml0aW9uc1xuKyAqIENvcHlyaWdodCAoYykgMjAyMi0yMDI2LCBaVEUgQ29ycG9yYXRpb24uXG4rICovXG4rXG4rI2lmbmRlZiBfX0RIX1FVRVVFX0hfX1xuKyNkZWZpbmUgX19ESF9RVUVVRV9IX19cbitcbisjaW5jbHVkZSBcdTAwM2NsaW51eC90eXBlcy5oXHUwMDNlXG4rXG4rLyogVGhpcyBpcyB0aGUgUENJIGNhcGFiaWxpdHkgaGVhZGVyOiAqL1xuK3N0cnVjdCB6eGRoX3BmX3BjaV9jYXAge1xuK1x0X191OCBjYXBfdm5kcjtcdFx0LyogR2VuZXJpYyBQQ0kgZmllbGQ6IFBDSV9DQVBfSURfVk5EUiAqL1xuK1x0X191OCBjYXBfbmV4dDtcdFx0LyogR2VuZXJpYyBQQ0kgZmllbGQ6IG5leHQgcHRyLiAqL1xuK1x0X191OCBjYXBfbGVuO1x0XHQvKiBHZW5lcmljIFBDSSBmaWVsZDogY2FwYWJpbGl0eSBsZW5ndGggKi9cbitcdF9fdTggY2ZnX3R5cGU7XHRcdC8qIElkZW50aWZpZXMgdGhlIHN0cnVjdHVyZS4gKi9cbitcdF9fdTggYmFyO1x0XHQvKiBXaGVyZSB0byBmaW5kIGl0LiAqL1xuK1x0X191OCBpZDtcdFx0LyogTXVsdGlwbGUgY2FwYWJpbGl0aWVzIG9mIHRoZSBzYW1lIHR5cGUgKi9cbitcdF9fdTggcGFkZGluZ1syXTtcdFx0LyogUGFkIHRvIGZ1bGwgZHdvcmQuICovXG4rXHRfX2xlMzIgb2Zmc2V0O1x0XHQvKiBPZmZzZXQgd2l0aGluIGJhci4gKi9cbitcdF9fbGUzMiBsZW5ndGg7XHRcdC8qIExlbmd0aCBvZiB0aGUgc3RydWN0dXJlLCBpbiBieXRlcy4gKi9cbit9O1xuK1xuKy8qIEZpZWxkcyBpbiBaWERIX1BGX1BDSV9DQVBfQ09NTU9OX0NGRzogKi9cbitzdHJ1Y3QgenhkaF9wZl9wY2lfY29tbW9uX2NmZyB7XG4rXHQvKiBBYm91dCB0aGUgd2hvbGUgZGV2aWNlLiAqL1xuK1x0X19sZTMyIGRldmljZV9mZWF0dXJlX3NlbGVjdDsgLyogcmVhZC13cml0ZSAqL1xuK1x0X19sZTMyIGRldmljZV9mZWF0dXJlO1x0LyogcmVhZC1vbmx5ICovXG4rXHRfX2xlMzIgZ3Vlc3RfZmVhdHVyZV9zZWxlY3Q7IC8qIHJlYWQtd3JpdGUgKi9cbitcdF9fbGUzMiBndWVzdF9mZWF0dXJlO1x0XHQvKiByZWFkLXdyaXRlICovXG4rXHRfX2xlMTYgbXNpeF9jb25maWc7XHRcdC8qIHJlYWQtd3JpdGUgKi9cbitcdF9fbGUxNiBudW1fcXVldWVzO1x0XHQvKiByZWFkLW9ubHkgKi9cbitcdF9fdTggZGV2aWNlX3N0YXR1cztcdFx0LyogcmVhZC13cml0ZSAqL1xuK1x0X191OCBjb25maWdfZ2VuZXJhdGlvbjtcdC8qIHJlYWQtb25seSAqL1xuK1xuK1x0LyogQWJvdXQgYSBzcGVjaWZpYyB2aXJ0cXVldWUuICovXG4rXHRfX2xlMTYgcXVldWVfc2VsZWN0O1x0XHQvKiByZWFkLXdyaXRlICovXG4rXHRfX2xlMTYgcXVldWVfc2l6ZTtcdFx0LyogcmVhZC13cml0ZSwgcG93ZXIgb2YgMi4gKi9cbitcdF9fbGUxNiBxdWV1ZV9tc2l4X3ZlY3RvcjtcdC8qIHJlYWQtd3JpdGUgKi9cbitcdF9fbGUxNiBxdWV1ZV9lbmFibGU7XHRcdC8qIHJlYWQtd3JpdGUgKi9cbitcdF9fbGUxNiBxdWV1ZV9ub3RpZnlfb2ZmO1x0LyogcmVhZC1vbmx5ICovXG4rXHRfX2xlMzIgcXVldWVfZGVzY19sbztcdFx0LyogcmVhZC13cml0ZSAqL1xuK1x0X19sZTMyIHF1ZXVlX2Rlc2NfaGk7XHRcdC8qIHJlYWQtd3JpdGUgKi9cbitcdF9fbGUzMiBxdWV1ZV9hdmFpbF9sbztcdFx0LyogcmVhZC13cml0ZSAqL1xuK1x0X19sZTMyIHF1ZXVlX2F2YWlsX2hpO1x0XHQvKiByZWFkLXdyaXRlICovXG4rXHRfX2xlMzIgcXVldWVfdXNlZF9sbztcdFx0LyogcmVhZC13cml0ZSAqL1xuK1x0X19sZTMyIHF1ZXVlX3VzZWRfaGk7XHRcdC8qIHJlYWQtd3JpdGUgKi9cbit9O1xuK1xuK3N0cnVjdCB6eGRoX3BmX3BjaV9ub3RpZnlfY2FwIHtcbitcdHN0cnVjdCB6eGRoX3BmX3BjaV9jYXAgY2FwO1xuK1x0X19sZTMyIG5vdGlmeV9vZmZfbXVsdGlwbGllcjsgLyogTXVsdGlwbGllciBmb3IgcXVldWVfbm90aWZ5X29mZi4gKi9cbit9O1xuK1xuKyNlbmRpZiAvKiBfX0RIX1FVRVVFX0hfXyAqL1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uODZkNDM3NDA4ODIwM1xuLS0tIC9kZXYvbnVsbFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuY1xuQEAgLTAsMCArMSw0NDkgQEBcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4rLypcbisgKiBaVEUgRGluZ0hhaSBFdGhlcm5ldCBkcml2ZXJcbisgKiBDb3B5cmlnaHQgKGMpIDIwMjItMjAyNiwgWlRFIENvcnBvcmF0aW9uLlxuKyAqL1xuK1xuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L21vZHVsZS5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvcGNpLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NuZXQvZGV2bGluay5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvZG1hLW1hcHBpbmcuaFx1MDAzZVxuKyNpbmNsdWRlIFwiZW5fcGYuaFwiXG4rI2luY2x1ZGUgXCJkaF9xdWV1ZS5oXCJcbitcbitNT0RVTEVfQVVUSE9SKFwiSnVueWFuZyBIYW4gXHUwMDNjaGFuLmp1bnlhbmdAenRlLmNvbS5jblx1MDAzZVwiKTtcbitNT0RVTEVfREVTQ1JJUFRJT04oXCJaVEUgRGluZ0hhaSBzZXJpZXMgRXRoZXJuZXQgZHJpdmVyXCIpO1xuK01PRFVMRV9MSUNFTlNFKFwiR1BMXCIpO1xuK1xuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZGV2bGlua19vcHMgenhkaF9wZl9kZXZsaW5rX29wcyA9IHt9O1xuK1xuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCB6eGRoX3BmX3BjaV90YWJsZVtdID0ge1xuK1x0eyBQQ0lfREVWSUNFKFpYREhfUEZfVkVORE9SX0lELCBaWERIX1BGX0RFVklDRV9JRCkgfSxcbitcdHsgUENJX0RFVklDRShaWERIX1BGX1ZFTkRPUl9JRCwgWlhESF9WRl9ERVZJQ0VfSUQpIH0sXG4rXHR7IH1cbit9O1xuK1xuK01PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLCB6eGRoX3BmX3BjaV90YWJsZSk7XG4rXG4rdm9pZCAqenhkaF9jb3JlX2FsbG9jX3ByaXYoc3RydWN0IHp4ZGhfY29yZV9kZXYgKnp4ZGhfZGV2LCBzaXplX3Qgc2l6ZSlcbit7XG4rXHR2b2lkICpwcml2ID0ga3phbGxvYyhzaXplLCBHRlBfS0VSTkVMKTtcbitcbitcdGlmIChwcml2KVxuK1x0XHR6eGRoX2Rldi1cdTAwM2Vwcml2ID0gcHJpdjtcbitcdHJldHVybiBwcml2O1xuK31cbitcbit2b2lkIHp4ZGhfY29yZV9mcmVlX3ByaXYoc3RydWN0IHp4ZGhfY29yZV9kZXYgKnp4ZGhfZGV2KVxuK3tcbitcdGtmcmVlKHp4ZGhfZGV2LVx1MDAzZXByaXYpO1xuK31cbitcbitzdGF0aWMgaW50IHp4ZGhfcGZfcGNpX2luaXQoc3RydWN0IHp4ZGhfY29yZV9kZXYgKnp4ZGhfZGV2KVxuK3tcbitcdHN0cnVjdCB6eGRoX3BmX2RldiAqcGZfZGV2ID0genhkaF9kZXYtXHUwMDNlcHJpdjtcbitcdGludCByZXQ7XG4rXG4rXHRwY2lfc2V0X2RydmRhdGEoenhkaF9kZXYtXHUwMDNlcGRldiwgenhkaF9kZXYpO1xuK1xuK1x0cmV0ID0gcGNpX2VuYWJsZV9kZXZpY2UoenhkaF9kZXYtXHUwMDNlcGRldik7XG4rXHRpZiAocmV0KSB7XG4rXHRcdGRldl9lcnIoenhkaF9kZXYtXHUwMDNlZGV2aWNlLCBcInBjaV9lbmFibGVfZGV2aWNlIGZhaWxlZDogJWRcXG5cIiwgcmV0KTtcbitcdFx0cmV0dXJuIHJldDtcbitcdH1cbitcbitcdGRtYV9zZXRfbWFza19hbmRfY29oZXJlbnQoenhkaF9kZXYtXHUwMDNlZGV2aWNlLCBETUFfQklUX01BU0soNjQpKTtcbitcbitcdHJldCA9IHBjaV9yZXF1ZXN0X3NlbGVjdGVkX3JlZ2lvbnMoenhkaF9kZXYtXHUwMDNlcGRldixcbitcdFx0XHRcdFx0ICAgcGNpX3NlbGVjdF9iYXJzKHp4ZGhfZGV2LVx1MDAzZXBkZXYsIElPUkVTT1VSQ0VfTUVNKSxcbitcdFx0XHRcdFx0ICAgXCJkaC1wZlwiKTtcbitcdGlmIChyZXQpIHtcbitcdFx0ZGV2X2Vycih6eGRoX2Rldi1cdTAwM2VkZXZpY2UsIFwicGNpX3JlcXVlc3Rfc2VsZWN0ZWRfcmVnaW9ucyBmYWlsZWQ6ICVkXFxuXCIsIHJldCk7XG4rXHRcdGdvdG8gZXJyX3BjaTtcbitcdH1cbitcbitcdHBjaV9zZXRfbWFzdGVyKHp4ZGhfZGV2LVx1MDAzZXBkZXYpO1xuK1x0cmV0ID0gcGNpX3NhdmVfc3RhdGUoenhkaF9kZXYtXHUwMDNlcGRldik7XG4rXHRpZiAocmV0KSB7XG4rXHRcdGRldl9lcnIoenhkaF9kZXYtXHUwMDNlZGV2aWNlLCBcInBjaV9zYXZlX3N0YXRlIGZhaWxlZDogJWRcXG5cIiwgcmV0KTtcbitcdFx0Z290byBlcnJfcGNpX3NhdmVfc3RhdGU7XG4rXHR9XG4rXG4rXHRpZiAoIShwY2lfcmVzb3VyY2VfZmxhZ3MoenhkaF9kZXYtXHUwMDNlcGRldiwgMCkgXHUwMDI2IElPUkVTT1VSQ0VfTUVNKSkge1xuK1x0XHRyZXQgPSAtRU5PREVWO1xuK1x0XHRkZXZfZXJyKHp4ZGhfZGV2LVx1MDAzZWRldmljZSwgXCJCQVIgMCBpcyBub3QgYW4gTU1JTyByZXNvdXJjZVxcblwiKTtcbitcdFx0Z290byBlcnJfcGNpX3NhdmVfc3RhdGU7XG4rXHR9XG4rXG4rXHRwZl9kZXYtXHUwMDNlcGNpX2lvcmVtYXBfYWRkclswXSA9XG4rXHRcdGlvcmVtYXAocGNpX3Jlc291cmNlX3N0YXJ0KHp4ZGhfZGV2LVx1MDAzZXBkZXYsIDApLFxuK1x0XHRcdHBjaV9yZXNvdXJjZV9sZW4oenhkaF9kZXYtXHUwMDNlcGRldiwgMCkpO1xuK1x0aWYgKCFwZl9kZXYtXHUwMDNlcGNpX2lvcmVtYXBfYWRkclswXSkge1xuK1x0XHRyZXQgPSAtRU5PTUVNO1xuK1x0XHRkZXZfZXJyKHp4ZGhfZGV2LVx1MDAzZWRldmljZSwgXCJkaCBwZiBwY2kgaW9yZW1hcCBmYWlsZWRcXG5cIik7XG4rXHRcdGdvdG8gZXJyX3BjaV9zYXZlX3N0YXRlO1xuK1x0fVxuK1xuK1x0cmV0dXJuIDA7XG4rXG4rZXJyX3BjaV9zYXZlX3N0YXRlOlxuK1x0cGNpX3JlbGVhc2Vfc2VsZWN0ZWRfcmVnaW9ucyh6eGRoX2Rldi1cdTAwM2VwZGV2LFxuK1x0XHRcdFx0ICAgICBwY2lfc2VsZWN0X2JhcnMoenhkaF9kZXYtXHUwMDNlcGRldiwgSU9SRVNPVVJDRV9NRU0pKTtcbitlcnJfcGNpOlxuK1x0cGNpX2Rpc2FibGVfZGV2aWNlKHp4ZGhfZGV2LVx1MDAzZXBkZXYpO1xuK1x0cmV0dXJuIHJldDtcbit9XG4rXG4rdm9pZCB6eGRoX3BmX3BjaV9jbG9zZShzdHJ1Y3QgenhkaF9jb3JlX2RldiAqenhkaF9kZXYpXG4re1xuK1x0c3RydWN0IHp4ZGhfcGZfZGV2ICpwZl9kZXYgPSB6eGRoX2Rldi1cdTAwM2Vwcml2O1xuK1xuK1x0aW91bm1hcChwZl9kZXYtXHUwMDNlcGNpX2lvcmVtYXBfYWRkclswXSk7XG4rXHRwY2lfcmVsZWFzZV9zZWxlY3RlZF9yZWdpb25zKHp4ZGhfZGV2LVx1MDAzZXBkZXYsXG4rXHRcdFx0XHQgICAgIHBjaV9zZWxlY3RfYmFycyh6eGRoX2Rldi1cdTAwM2VwZGV2LCBJT1JFU09VUkNFX01FTSkpO1xuK1x0cGNpX2Rpc2FibGVfZGV2aWNlKHp4ZGhfZGV2LVx1MDAzZXBkZXYpO1xuK31cbitcbitpbnQgenhkaF9wZl9wY2lfZmluZF9jYXBhYmlsaXR5KHN0cnVjdCBwY2lfZGV2ICpwZGV2LCB1OCBjZmdfdHlwZSxcbitcdFx0XHRcdHUzMiBpb3Jlc291cmNlX3R5cGVzLCBpbnQgKmJhcnMpXG4re1xuK1x0aW50IHBvcztcbitcdHU4IHR5cGU7XG4rXHR1OCBiYXI7XG4rXG4rXHRmb3IgKHBvcyA9IHBjaV9maW5kX2NhcGFiaWxpdHkocGRldiwgUENJX0NBUF9JRF9WTkRSKTsgcG9zIFx1MDAzZSAwO1xuK1x0ICAgICBwb3MgPSBwY2lfZmluZF9uZXh0X2NhcGFiaWxpdHkocGRldiwgcG9zLCBQQ0lfQ0FQX0lEX1ZORFIpKSB7XG4rXHRcdHBjaV9yZWFkX2NvbmZpZ19ieXRlKHBkZXYsXG4rXHRcdFx0XHQgICAgIHBvcyArIG9mZnNldG9mKHN0cnVjdCB6eGRoX3BmX3BjaV9jYXAsXG4rXHRcdFx0XHRcdFx0XHRjZmdfdHlwZSksIFx1MDAyNnR5cGUpO1xuK1x0XHRwY2lfcmVhZF9jb25maWdfYnl0ZShwZGV2LFxuK1x0XHRcdFx0ICAgICBwb3MgKyBvZmZzZXRvZihzdHJ1Y3QgenhkaF9wZl9wY2lfY2FwLCBiYXIpLCBcdTAwMjZiYXIpO1xuK1xuK1x0XHQvKiBpZ25vcmUgc3RydWN0dXJlcyB3aXRoIHJlc2VydmVkIEJBUiB2YWx1ZXMgKi9cbitcdFx0aWYgKGJhciBcdTAwM2UgWlhESF9QRl9NQVhfQkFSX1ZBTClcbitcdFx0XHRjb250aW51ZTtcbitcbitcdFx0aWYgKHR5cGUgPT0gY2ZnX3R5cGUpIHtcbitcdFx0XHRpZiAocGNpX3Jlc291cmNlX2xlbihwZGV2LCBiYXIpIFx1MDAyNlx1MDAyNlxuK1x0XHRcdCAgICBwY2lfcmVzb3VyY2VfZmxhZ3MocGRldiwgYmFyKSBcdTAwMjYgaW9yZXNvdXJjZV90eXBlcykge1xuK1x0XHRcdFx0KmJhcnMgfD0gKDEgXHUwMDNjXHUwMDNjIGJhcik7XG4rXHRcdFx0XHRyZXR1cm4gcG9zO1xuK1x0XHRcdH1cbitcdFx0fVxuK1x0fVxuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK3ZvaWQgX19pb21lbSAqenhkaF9wZl9tYXBfY2FwYWJpbGl0eShzdHJ1Y3QgenhkaF9jb3JlX2RldiAqenhkaF9kZXYsIGludCBvZmYsXG4rXHRcdFx0XHQgICAgIHNpemVfdCBtaW5sZW4sIHUzMiBhbGlnbixcbitcdFx0XHRcdCAgICAgdTMyIHN0YXJ0LCB1MzIgc2l6ZSxcbitcdFx0XHRcdCAgICAgc2l6ZV90ICpsZW4sIHJlc291cmNlX3NpemVfdCAqcGEsXG4rXHRcdFx0XHQgICAgIHUzMiAqYmFyX29mZilcbit7XG4rXHRzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IHp4ZGhfZGV2LVx1MDAzZXBkZXY7XG4rXHR2b2lkIF9faW9tZW0gKnA7XG4rXHR1MzIgb2Zmc2V0O1xuK1x0dTMyIGxlbmd0aDtcbitcdHU4IGJhcjtcbitcbitcdHBjaV9yZWFkX2NvbmZpZ19ieXRlKHBkZXYsXG4rXHRcdFx0ICAgICBvZmYgKyBvZmZzZXRvZihzdHJ1Y3QgenhkaF9wZl9wY2lfY2FwLCBiYXIpLCBcdTAwMjZiYXIpO1xuK1xuK1x0aWYgKGJhciBcdTAwM2UgWlhESF9QRl9NQVhfQkFSX1ZBTCkge1xuK1x0XHRkZXZfZXJyKHp4ZGhfZGV2LVx1MDAzZWRldmljZSwgXCJpbnZhbGlkIGJhciAldVxcblwiLCBiYXIpO1xuK1x0XHRyZXR1cm4gTlVMTDtcbitcdH1cbitcbitcdHBjaV9yZWFkX2NvbmZpZ19kd29yZChwZGV2LFxuK1x0XHRcdCAgICAgIG9mZiArIG9mZnNldG9mKHN0cnVjdCB6eGRoX3BmX3BjaV9jYXAsXG4rXHRcdFx0XHRcdFx0b2Zmc2V0KSwgXHUwMDI2b2Zmc2V0KTtcbitcdHBjaV9yZWFkX2NvbmZpZ19kd29yZChwZGV2LFxuK1x0XHRcdCAgICAgIG9mZiArIG9mZnNldG9mKHN0cnVjdCB6eGRoX3BmX3BjaV9jYXAsXG4rXHRcdFx0XHRcdFx0bGVuZ3RoKSwgXHUwMDI2bGVuZ3RoKTtcbitcbitcdGlmIChiYXJfb2ZmKVxuK1x0XHQqYmFyX29mZiA9IG9mZnNldDtcbitcbitcdGlmIChsZW5ndGggXHUwMDNjPSBzdGFydCkge1xuK1x0XHRkZXZfZXJyKHp4ZGhfZGV2LVx1MDAzZWRldmljZSwgXCJiYWQgY2FwYWJpbGl0eSBsZW4gJXUgKFx1MDAzZSV1IGV4cGVjdGVkKVxcblwiLFxuK1x0XHRcdGxlbmd0aCwgc3RhcnQpO1xuK1x0XHRyZXR1cm4gTlVMTDtcbitcdH1cbitcbitcdGlmIChsZW5ndGggLSBzdGFydCBcdTAwM2MgbWlubGVuKSB7XG4rXHRcdGRldl9lcnIoenhkaF9kZXYtXHUwMDNlZGV2aWNlLCBcImJhZCBjYXBhYmlsaXR5IGxlbiAldSAoXHUwMDNlPSV6dSBleHBlY3RlZClcXG5cIixcbitcdFx0XHRsZW5ndGgsIG1pbmxlbik7XG4rXHRcdHJldHVybiBOVUxMO1xuK1x0fVxuK1xuK1x0bGVuZ3RoIC09IHN0YXJ0O1xuK1x0aWYgKHN0YXJ0ICsgb2Zmc2V0IFx1MDAzYyBvZmZzZXQpIHtcbitcdFx0ZGV2X2Vycih6eGRoX2Rldi1cdTAwM2VkZXZpY2UsIFwibWFwIHdyYXAtYXJvdW5kICV1KyV1XFxuXCIsIHN0YXJ0LCBvZmZzZXQpO1xuK1x0XHRyZXR1cm4gTlVMTDtcbitcdH1cbitcbitcdG9mZnNldCArPSBzdGFydDtcbitcdGlmIChvZmZzZXQgXHUwMDI2IChhbGlnbiAtIDEpKSB7XG4rXHRcdGRldl9lcnIoenhkaF9kZXYtXHUwMDNlZGV2aWNlLCBcIm9mZnNldCAldSBub3QgYWxpZ25lZCB0byAldVxcblwiLCBvZmZzZXQsIGFsaWduKTtcbitcdFx0cmV0dXJuIE5VTEw7XG4rXHR9XG4rXG4rXHRpZiAobGVuZ3RoIFx1MDAzZSBzaXplKVxuK1x0XHRsZW5ndGggPSBzaXplO1xuK1xuK1x0aWYgKGxlbilcbitcdFx0KmxlbiA9IGxlbmd0aDtcbitcbitcdGlmIChsZW5ndGggKyBvZmZzZXQgXHUwMDNjIG9mZnNldCB8fFxuK1x0ICAgIGxlbmd0aCArIG9mZnNldCBcdTAwM2UgcGNpX3Jlc291cmNlX2xlbihwZGV2LCBiYXIpKSB7XG4rXHRcdGRldl9lcnIoenhkaF9kZXYtXHUwMDNlZGV2aWNlLFxuK1x0XHRcdFwibWFwICV1QCV1IG91dCBvZiByYW5nZSBvbiBiYXIgJXUgbGVuZ3RoICVsdVxcblwiLFxuK1x0XHRcdGxlbmd0aCwgb2Zmc2V0LCBiYXIsXG4rXHRcdFx0KHVuc2lnbmVkIGxvbmcpcGNpX3Jlc291cmNlX2xlbihwZGV2LCBiYXIpKTtcbitcdFx0cmV0dXJuIE5VTEw7XG4rXHR9XG4rXG4rXHRwID0gcGNpX2lvbWFwX3JhbmdlKHBkZXYsIGJhciwgb2Zmc2V0LCBsZW5ndGgpO1xuK1x0aWYgKCFwKSB7XG4rXHRcdGRldl9lcnIoenhkaF9kZXYtXHUwMDNlZGV2aWNlLCBcInVuYWJsZSB0byBtYXAgY3VzdG9tIHF1ZXVlICV1QCV1IG9uIGJhciAldVxcblwiLFxuK1x0XHRcdGxlbmd0aCwgb2Zmc2V0LCBiYXIpO1xuK1x0fSBlbHNlIGlmIChwYSkge1xuK1x0XHQqcGEgPSBwY2lfcmVzb3VyY2Vfc3RhcnQocGRldiwgYmFyKSArIG9mZnNldDtcbitcdH1cbitcbitcdHJldHVybiBwO1xuK31cbitcbitpbnQgenhkaF9wZl9jb21tb25fY2ZnX2luaXQoc3RydWN0IHp4ZGhfY29yZV9kZXYgKnp4ZGhfZGV2KVxuK3tcbitcdHN0cnVjdCB6eGRoX3BmX2RldiAqcGZfZGV2ID0genhkaF9kZXYtXHUwMDNlcHJpdjtcbitcdHN0cnVjdCBwY2lfZGV2ICpwZGV2ID0genhkaF9kZXYtXHUwMDNlcGRldjtcbitcdGludCBjb21tb247XG4rXG4rXHQvKiBjaGVjayBmb3IgYSBjb21tb24gY29uZmlnOiBpZiBub3QsIHVzZSBsZWdhY3kgbW9kZSAoYmFyIDApLiAqL1xuK1x0Y29tbW9uID0genhkaF9wZl9wY2lfZmluZF9jYXBhYmlsaXR5KHBkZXYsIFpYREhfUENJX0NBUF9DT01NT05fQ0ZHLFxuK1x0XHRcdFx0XHQgICAgIElPUkVTT1VSQ0VfTUVNLFxuK1x0XHRcdFx0XHQgICAgIFx1MDAyNnBmX2Rldi1cdTAwM2Vtb2Rlcm5fYmFycyk7XG4rXHRpZiAoIWNvbW1vbikge1xuK1x0XHRkZXZfZXJyKHp4ZGhfZGV2LVx1MDAzZWRldmljZSxcbitcdFx0XHRcIm1pc3NpbmcgY2FwYWJpbGl0aWVzLCBsZWF2aW5nIGZvciBsZWdhY3kgZHJpdmVyXFxuXCIpO1xuK1x0XHRyZXR1cm4gLUVOT0RFVjtcbitcdH1cbitcbitcdHBmX2Rldi1cdTAwM2Vjb21tb24gPSB6eGRoX3BmX21hcF9jYXBhYmlsaXR5KHp4ZGhfZGV2LCBjb21tb24sXG4rXHRcdFx0XHRcdFx0c2l6ZW9mKHN0cnVjdCB6eGRoX3BmX3BjaV9jb21tb25fY2ZnKSxcbitcdFx0XHRcdFx0XHRaWERIX1BGX0FMSUdONCwgMCxcbitcdFx0XHRcdFx0XHRzaXplb2Yoc3RydWN0IHp4ZGhfcGZfcGNpX2NvbW1vbl9jZmcpLFxuK1x0XHRcdFx0XHRcdE5VTEwsIE5VTEwsIE5VTEwpO1xuK1x0aWYgKCFwZl9kZXYtXHUwMDNlY29tbW9uKSB7XG4rXHRcdGRldl9lcnIoenhkaF9kZXYtXHUwMDNlZGV2aWNlLCBcInBmX2Rldi1cdTAwM2Vjb21tb24gaXMgbnVsbFxcblwiKTtcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHR9XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4raW50IHp4ZGhfcGZfbm90aWZ5X2NmZ19pbml0KHN0cnVjdCB6eGRoX2NvcmVfZGV2ICp6eGRoX2Rldilcbit7XG4rXHRzdHJ1Y3QgenhkaF9wZl9kZXYgKnBmX2RldiA9IHp4ZGhfZGV2LVx1MDAzZXByaXY7XG4rXHRzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IHp4ZGhfZGV2LVx1MDAzZXBkZXY7XG4rXHR1MzIgbm90aWZ5X2xlbmd0aDtcbitcdHUzMiBub3RpZnlfb2Zmc2V0O1xuK1x0aW50IG5vdGlmeTtcbitcbitcdC8qIElmIGNvbW1vbiBpcyB0aGVyZSwgdGhlc2Ugc2hvdWxkIGJlIHRvby4uLiAqL1xuK1x0bm90aWZ5ID0genhkaF9wZl9wY2lfZmluZF9jYXBhYmlsaXR5KHBkZXYsIFpYREhfUENJX0NBUF9OT1RJRllfQ0ZHLFxuK1x0XHRcdFx0XHQgICAgIElPUkVTT1VSQ0VfTUVNLFxuK1x0XHRcdFx0XHQgICAgIFx1MDAyNnBmX2Rldi1cdTAwM2Vtb2Rlcm5fYmFycyk7XG4rXHRpZiAoIW5vdGlmeSkge1xuK1x0XHRkZXZfZXJyKHp4ZGhfZGV2LVx1MDAzZWRldmljZSwgXCJtaXNzaW5nIG5vdGlmeSBjZmcgY2FwYWJpbGl0eVxcblwiKTtcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHR9XG4rXG4rXHRwY2lfcmVhZF9jb25maWdfZHdvcmQocGRldixcbitcdFx0XHQgICAgICBub3RpZnkgKyBvZmZzZXRvZihzdHJ1Y3QgenhkaF9wZl9wY2lfbm90aWZ5X2NhcCxcbitcdFx0XHRcdG5vdGlmeV9vZmZfbXVsdGlwbGllciksXG4rXHRcdFx1MDAyNnBmX2Rldi1cdTAwM2Vub3RpZnlfb2Zmc2V0X211bHRpcGxpZXIpO1xuK1x0cGNpX3JlYWRfY29uZmlnX2R3b3JkKHBkZXYsXG4rXHRcdFx0ICAgICAgbm90aWZ5ICsgb2Zmc2V0b2Yoc3RydWN0IHp4ZGhfcGZfcGNpX25vdGlmeV9jYXAsXG4rXHRcdFx0XHRjYXAubGVuZ3RoKSwgXHUwMDI2bm90aWZ5X2xlbmd0aCk7XG4rXHRwY2lfcmVhZF9jb25maWdfZHdvcmQocGRldixcbitcdFx0XHQgICAgICBub3RpZnkgKyBvZmZzZXRvZihzdHJ1Y3QgenhkaF9wZl9wY2lfbm90aWZ5X2NhcCxcbitcdFx0XHRcdGNhcC5vZmZzZXQpLCBcdTAwMjZub3RpZnlfb2Zmc2V0KTtcbitcbitcdC8qIFdlIGRvbid0IGtub3cgaG93IG1hbnkgVlFzIHdlJ2xsIG1hcCwgYWhlYWQgb2YgdGhlIHRpbWUuXG4rXHQgKiBJZiBub3RpZnkgbGVuZ3RoIGlzIHNtYWxsLCBtYXAgaXQgYWxsIG5vdy4gT3RoZXJ3aXNlLFxuK1x0ICogbWFwIGVhY2ggVlEgaW5kaXZpZHVhbGx5IGxhdGVyLlxuK1x0ICovXG4rXHRpZiAobm90aWZ5X2xlbmd0aCBcdTAwM2M9IFBBR0VfU0laRSAtIChub3RpZnlfb2Zmc2V0ICUgUEFHRV9TSVpFKSkge1xuK1x0XHRwZl9kZXYtXHUwMDNlbm90aWZ5X2Jhc2UgPSB6eGRoX3BmX21hcF9jYXBhYmlsaXR5KHp4ZGhfZGV2LCBub3RpZnksXG4rXHRcdFx0XHRcdFx0XHQgICAgIFpYREhfUEZfTUFQX01JTkxFTjIsXG4rXHRcdFx0XHRcdFx0XHQgICAgWlhESF9QRl9BTElHTjIsIDAsXG4rXHRcdFx0XHRcdFx0XHQgICAgbm90aWZ5X2xlbmd0aCxcbitcdFx0XHRcdFx0XHRcdCAgICBcdTAwMjZwZl9kZXYtXHUwMDNlbm90aWZ5X2xlbixcbitcdFx0XHRcdFx0XHRcdCAgICBcdTAwMjZwZl9kZXYtXHUwMDNlbm90aWZ5X3BhLCBOVUxMKTtcbitcdFx0aWYgKCFwZl9kZXYtXHUwMDNlbm90aWZ5X2Jhc2UpIHtcbitcdFx0XHRkZXZfZXJyKHp4ZGhfZGV2LVx1MDAzZWRldmljZSwgXCJwZl9kZXYtXHUwMDNlbm90aWZ5X2Jhc2UgaXMgbnVsbFxcblwiKTtcbitcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbitcdFx0fVxuK1x0fSBlbHNlIHtcbitcdFx0cGZfZGV2LVx1MDAzZW5vdGlmeV9tYXBfY2FwID0gbm90aWZ5O1xuK1x0fVxuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK2ludCB6eGRoX3BmX2RldmljZV9jZmdfaW5pdChzdHJ1Y3QgenhkaF9jb3JlX2RldiAqenhkaF9kZXYpXG4re1xuK1x0c3RydWN0IHp4ZGhfcGZfZGV2ICpwZl9kZXYgPSB6eGRoX2Rldi1cdTAwM2Vwcml2O1xuK1x0c3RydWN0IHBjaV9kZXYgKnBkZXYgPSB6eGRoX2Rldi1cdTAwM2VwZGV2O1xuK1x0aW50IGRldmljZTtcbitcbitcdC8qIERldmljZSBjYXBhYmlsaXR5IGlzIG9ubHkgbWFuZGF0b3J5IGZvclxuK1x0ICogZGV2aWNlcyB0aGF0IGhhdmUgZGV2aWNlLXNwZWNpZmljIGNvbmZpZ3VyYXRpb24uXG4rXHQgKi9cbitcdGRldmljZSA9IHp4ZGhfcGZfcGNpX2ZpbmRfY2FwYWJpbGl0eShwZGV2LCBaWERIX1BDSV9DQVBfREVWSUNFX0NGRyxcbitcdFx0XHRcdFx0ICAgICBJT1JFU09VUkNFX01FTSxcbitcdFx0XHRcdFx0ICAgICBcdTAwMjZwZl9kZXYtXHUwMDNlbW9kZXJuX2JhcnMpO1xuK1xuK1x0Lyogd2UgZG9uJ3Qga25vdyBob3cgbXVjaCB3ZSBzaG91bGQgbWFwLFxuK1x0ICogYnV0IFBBR0VfU0laRSBpcyBtb3JlIHRoYW4gZW5vdWdoIGZvciBhbGwgZXhpc3RpbmcgZGV2aWNlcy5cbitcdCAqL1xuK1x0aWYgKGRldmljZSkge1xuK1x0XHRwZl9kZXYtXHUwMDNlZGV2aWNlID0genhkaF9wZl9tYXBfY2FwYWJpbGl0eSh6eGRoX2RldiwgZGV2aWNlLCAwLFxuK1x0XHRcdFx0XHRcdFx0WlhESF9QRl9BTElHTjQsIDAsIFBBR0VfU0laRSxcbitcdFx0XHRcdFx0XHQgICAgICAgXHUwMDI2cGZfZGV2LVx1MDAzZWRldmljZV9sZW4sIE5VTEwsXG4rXHRcdFx0XHRcdFx0ICAgICAgIFx1MDAyNnBmX2Rldi1cdTAwM2VkZXZfY2ZnX2Jhcl9vZmYpO1xuK1x0XHRpZiAoIXBmX2Rldi1cdTAwM2VkZXZpY2UpIHtcbitcdFx0XHRkZXZfZXJyKHp4ZGhfZGV2LVx1MDAzZWRldmljZSwgXCJwZl9kZXYtXHUwMDNlZGV2aWNlIGlzIG51bGxcXG5cIik7XG4rXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHRcdH1cbitcdH1cbitcdHJldHVybiAwO1xuK31cbitcbit2b2lkIHp4ZGhfcGZfbW9kZXJuX2NmZ191bmluaXQoc3RydWN0IHp4ZGhfY29yZV9kZXYgKnp4ZGhfZGV2KVxuK3tcbitcdHN0cnVjdCB6eGRoX3BmX2RldiAqcGZfZGV2ID0genhkaF9kZXYtXHUwMDNlcHJpdjtcbitcdHN0cnVjdCBwY2lfZGV2ICpwZGV2ID0genhkaF9kZXYtXHUwMDNlcGRldjtcbitcbitcdGlmIChwZl9kZXYtXHUwMDNlZGV2aWNlKVxuK1x0XHRwY2lfaW91bm1hcChwZGV2LCBwZl9kZXYtXHUwMDNlZGV2aWNlKTtcbitcdGlmIChwZl9kZXYtXHUwMDNlbm90aWZ5X2Jhc2UpXG4rXHRcdHBjaV9pb3VubWFwKHBkZXYsIHBmX2Rldi1cdTAwM2Vub3RpZnlfYmFzZSk7XG4rXHRwY2lfaW91bm1hcChwZGV2LCBwZl9kZXYtXHUwMDNlY29tbW9uKTtcbit9XG4rXG4raW50IHp4ZGhfcGZfbW9kZXJuX2NmZ19pbml0KHN0cnVjdCB6eGRoX2NvcmVfZGV2ICp6eGRoX2Rldilcbit7XG4rXHRzdHJ1Y3QgenhkaF9wZl9kZXYgKnBmX2RldiA9IHp4ZGhfZGV2LVx1MDAzZXByaXY7XG4rXHRzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IHp4ZGhfZGV2LVx1MDAzZXBkZXY7XG4rXHRpbnQgcmV0O1xuK1xuK1x0cmV0ID0genhkaF9wZl9jb21tb25fY2ZnX2luaXQoenhkaF9kZXYpO1xuK1x0aWYgKHJldCkge1xuK1x0XHRkZXZfZXJyKHp4ZGhfZGV2LVx1MDAzZWRldmljZSwgXCJ6eGRoX3BmX2NvbW1vbl9jZmdfaW5pdCBmYWlsZWQ6ICVkXFxuXCIsIHJldCk7XG4rXHRcdHJldHVybiByZXQ7XG4rXHR9XG4rXG4rXHRyZXQgPSB6eGRoX3BmX25vdGlmeV9jZmdfaW5pdCh6eGRoX2Rldik7XG4rXHRpZiAocmV0KSB7XG4rXHRcdGRldl9lcnIoenhkaF9kZXYtXHUwMDNlZGV2aWNlLCBcInp4ZGhfcGZfbm90aWZ5X2NmZ19pbml0IGZhaWxlZDogJWRcXG5cIiwgcmV0KTtcbitcdFx0Z290byBlcnJfbWFwX25vdGlmeTtcbitcdH1cbitcbitcdHJldCA9IHp4ZGhfcGZfZGV2aWNlX2NmZ19pbml0KHp4ZGhfZGV2KTtcbitcdGlmIChyZXQpIHtcbitcdFx0ZGV2X2Vycih6eGRoX2Rldi1cdTAwM2VkZXZpY2UsIFwienhkaF9wZl9kZXZpY2VfY2ZnX2luaXQgZmFpbGVkOiAlZFxcblwiLCByZXQpO1xuK1x0XHRnb3RvIGVycl9tYXBfZGV2aWNlO1xuK1x0fVxuK1xuK1x0cmV0dXJuIDA7XG4rXG4rZXJyX21hcF9kZXZpY2U6XG4rXHRpZiAocGZfZGV2LVx1MDAzZW5vdGlmeV9iYXNlKVxuK1x0XHRwY2lfaW91bm1hcChwZGV2LCBwZl9kZXYtXHUwMDNlbm90aWZ5X2Jhc2UpO1xuK2Vycl9tYXBfbm90aWZ5OlxuK1x0cGNpX2lvdW5tYXAocGRldiwgcGZfZGV2LVx1MDAzZWNvbW1vbik7XG4rXHRyZXR1cm4gcmV0O1xuK31cbitcbitzdGF0aWMgaW50IHp4ZGhfcGZfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICppZClcbit7XG4rXHRzdHJ1Y3QgenhkaF9jb3JlX2RldiAqenhkaF9kZXY7XG4rXHRzdHJ1Y3QgenhkaF9wZl9kZXYgKnBmX2RldjtcbitcdHN0cnVjdCBkZXZsaW5rICpkZXZsaW5rO1xuK1x0aW50IHJldDtcbitcbitcdGRldmxpbmsgPSBkZXZsaW5rX2FsbG9jKFx1MDAyNnp4ZGhfcGZfZGV2bGlua19vcHMsIHNpemVvZihzdHJ1Y3QgenhkaF9jb3JlX2RldiksXG4rXHRcdFx0XHRcdTAwMjZwZGV2LVx1MDAzZWRldik7XG4rXHRpZiAoIWRldmxpbmspXG4rXHRcdHJldHVybiAtRU5PTUVNO1xuK1xuK1x0enhkaF9kZXYgPSBkZXZsaW5rX3ByaXYoZGV2bGluayk7XG4rXHR6eGRoX2Rldi1cdTAwM2VkZXZpY2UgPSBcdTAwMjZwZGV2LVx1MDAzZWRldjtcbitcdHp4ZGhfZGV2LVx1MDAzZXBkZXYgPSBwZGV2O1xuK1x0enhkaF9kZXYtXHUwMDNlZGV2bGluayA9IGRldmxpbms7XG4rXG4rXHRwZl9kZXYgPSB6eGRoX2NvcmVfYWxsb2NfcHJpdih6eGRoX2Rldiwgc2l6ZW9mKCpwZl9kZXYpKTtcbitcdGlmICghcGZfZGV2KSB7XG4rXHRcdGRldl9lcnIoXHUwMDI2cGRldi1cdTAwM2VkZXYsIFwienhkaF9wZl9kZXYgYWxsb2MgZmFpbGVkXFxuXCIpO1xuK1x0XHRyZXQgPSAtRU5PTUVNO1xuK1x0XHRnb3RvIGVycl9wZl9kZXY7XG4rXHR9XG4rXG4rXHRyZXQgPSB6eGRoX3BmX3BjaV9pbml0KHp4ZGhfZGV2KTtcbitcdGlmIChyZXQpIHtcbitcdFx0ZGV2X2VycihcdTAwMjZwZGV2LVx1MDAzZWRldiwgXCJ6eGRoX3BmX3BjaV9pbml0IGZhaWxlZDogJWRcXG5cIiwgcmV0KTtcbitcdFx0Z290byBlcnJfcGNpX2luaXQ7XG4rXHR9XG4rXG4rXHRyZXQgPSB6eGRoX3BmX21vZGVybl9jZmdfaW5pdCh6eGRoX2Rldik7XG4rXHRpZiAocmV0KSB7XG4rXHRcdGRldl9lcnIoXHUwMDI2cGRldi1cdTAwM2VkZXYsIFwienhkaF9wZl9tb2Rlcm5fY2ZnX2luaXQgZmFpbGVkOiAlZFxcblwiLCByZXQpO1xuK1x0XHRnb3RvIGVycl9jZmdfaW5pdDtcbitcdH1cbitcbitcdGRldmxpbmtfcmVnaXN0ZXIoZGV2bGluayk7XG4rXG4rXHRyZXR1cm4gMDtcbitcbitlcnJfY2ZnX2luaXQ6XG4rXHR6eGRoX3BmX3BjaV9jbG9zZSh6eGRoX2Rldik7XG4rZXJyX3BjaV9pbml0OlxuK1x0enhkaF9jb3JlX2ZyZWVfcHJpdih6eGRoX2Rldik7XG4rZXJyX3BmX2RldjpcbitcdGRldmxpbmtfZnJlZShkZXZsaW5rKTtcbitcdHJldHVybiByZXQ7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIHp4ZGhfcGZfcmVtb3ZlKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxuK3tcbitcdHN0cnVjdCB6eGRoX2NvcmVfZGV2ICp6eGRoX2RldiA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTtcbitcdHN0cnVjdCBkZXZsaW5rICpkZXZsaW5rID0gcHJpdl90b19kZXZsaW5rKHp4ZGhfZGV2KTtcbitcbitcdGRldmxpbmtfdW5yZWdpc3RlcihkZXZsaW5rKTtcbitcdHp4ZGhfcGZfbW9kZXJuX2NmZ191bmluaXQoenhkaF9kZXYpO1xuK1x0enhkaF9wZl9wY2lfY2xvc2UoenhkaF9kZXYpO1xuK1x0enhkaF9jb3JlX2ZyZWVfcHJpdih6eGRoX2Rldik7XG4rXHRkZXZsaW5rX2ZyZWUoZGV2bGluayk7XG4rXHRwY2lfc2V0X2RydmRhdGEocGRldiwgTlVMTCk7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIHp4ZGhfcGZfc2h1dGRvd24oc3RydWN0IHBjaV9kZXYgKnBkZXYpXG4re1xuK1x0aWYgKHN5c3RlbV9zdGF0ZSA9PSBTWVNURU1fUE9XRVJfT0ZGKVxuK1x0XHRwY2lfc2V0X3Bvd2VyX3N0YXRlKHBkZXYsIFBDSV9EM2hvdCk7XG4rXHRwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7XG4rfVxuK1xuK3N0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciB6eGRoX3BmX2RyaXZlciA9IHtcbitcdC5uYW1lID0gXCJkaW5naGFpMTBlXCIsXG4rXHQuaWRfdGFibGUgPSB6eGRoX3BmX3BjaV90YWJsZSxcbitcdC5wcm9iZSA9IHp4ZGhfcGZfcHJvYmUsXG4rXHQucmVtb3ZlID0genhkaF9wZl9yZW1vdmUsXG4rXHQuc2h1dGRvd24gPSB6eGRoX3BmX3NodXRkb3duLFxuK307XG4rXG4rbW9kdWxlX3BjaV9kcml2ZXIoenhkaF9wZl9kcml2ZXIpO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5oXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uNzM3M2RlZThkMWE5ZlxuLS0tIC9kZXYvbnVsbFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuaFxuQEAgLTAsMCArMSw3NSBAQFxuKy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHkgKi9cbisvKlxuKyAqIFpURSBEaW5nSGFpIEV0aGVybmV0IGRyaXZlciAtIFBGIGhlYWRlclxuKyAqIENvcHlyaWdodCAoYykgMjAyMi0yMDI2LCBaVEUgQ29ycG9yYXRpb24uXG4rICovXG4rXG4rI2lmbmRlZiBfX1pYREhfRU5fUEZfSF9fXG4rI2RlZmluZSBfX1pYREhfRU5fUEZfSF9fXG4rXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvdHlwZXMuaFx1MDAzZVxuK1xuKyNkZWZpbmUgWlhESF9QRl9WRU5ET1JfSURcdDB4MWNmMlxuKyNkZWZpbmUgWlhESF9QRl9ERVZJQ0VfSURcdDB4ODA0MFxuKyNkZWZpbmUgWlhESF9WRl9ERVZJQ0VfSURcdDB4ODA0MVxuK1xuKy8qIENvbW1vbiBjb25maWd1cmF0aW9uICovXG4rI2RlZmluZSBaWERIX1BDSV9DQVBfQ09NTU9OX0NGR1x0MVxuKy8qIE5vdGlmaWNhdGlvbnMgKi9cbisjZGVmaW5lIFpYREhfUENJX0NBUF9OT1RJRllfQ0ZHXHQyXG4rLyogSVNSIGFjY2VzcyAqL1xuKyNkZWZpbmUgWlhESF9QQ0lfQ0FQX0lTUl9DRkdcdFx0M1xuKy8qIERldmljZSBzcGVjaWZpYyBjb25maWd1cmF0aW9uICovXG4rI2RlZmluZSBaWERIX1BDSV9DQVBfREVWSUNFX0NGR1x0NFxuKy8qIFBDSSBjb25maWd1cmF0aW9uIGFjY2VzcyAqL1xuKyNkZWZpbmUgWlhESF9QQ0lfQ0FQX1BDSV9DRkdcdFx0NVxuK1xuKyNkZWZpbmUgWlhESF9QRl9NQVhfQkFSX1ZBTFx0XHQweDVcbisjZGVmaW5lIFpYREhfUEZfQUxJR040XHRcdFx0NFxuKyNkZWZpbmUgWlhESF9QRl9BTElHTjJcdFx0XHQyXG4rI2RlZmluZSBaWERIX1BGX01BUF9NSU5MRU4yXHRcdDJcbitcbitzdHJ1Y3QgenhkaF9jb3JlX2RldiB7XG4rXHRzdHJ1Y3QgZGV2aWNlICpkZXZpY2U7XG4rXHRzdHJ1Y3QgcGNpX2RldiAqcGRldjtcbitcdHN0cnVjdCBkZXZsaW5rICpkZXZsaW5rO1xuK1x0dm9pZCAqcHJpdjtcbit9O1xuK1xuK3N0cnVjdCB6eGRoX3BmX2RldiB7XG4rXHRzdHJ1Y3QgenhkaF9wZl9wY2lfY29tbW9uX2NmZyBfX2lvbWVtICpjb21tb247XG4rXHQvKiBEZXZpY2Utc3BlY2lmaWMgZGF0YSAobm9uLWxlZ2FjeSBtb2RlKSAgKi9cbitcdC8qIEJhc2Ugb2YgdnEgbm90aWZpY2F0aW9ucyAobm9uLWxlZ2FjeSBtb2RlKS4gKi9cbitcdHZvaWQgX19pb21lbSAqZGV2aWNlO1xuK1x0dm9pZCBfX2lvbWVtICpub3RpZnlfYmFzZTtcbitcdC8qIFBoeXNpY2FsIGJhc2Ugb2YgdnEgbm90aWZpY2F0aW9ucyAqL1xuK1x0cmVzb3VyY2Vfc2l6ZV90IG5vdGlmeV9wYTtcbitcdC8qIFNvIHdlIGNhbiBzYW5pdHktY2hlY2sgYWNjZXNzZXMuICovXG4rXHRzaXplX3Qgbm90aWZ5X2xlbjtcbitcdHNpemVfdCBkZXZpY2VfbGVuO1xuK1x0LyogQ2FwYWJpbGl0eSBmb3Igd2hlbiB3ZSBuZWVkIHRvIG1hcCBub3RpZmljYXRpb25zIHBlci12cS4gKi9cbitcdHMzMiBub3RpZnlfbWFwX2NhcDtcbitcdHUzMiBub3RpZnlfb2Zmc2V0X211bHRpcGxpZXI7XG4rXHQvKiBNdWx0aXBseSBxdWV1ZV9ub3RpZnlfb2ZmIGJ5IHRoaXMgdmFsdWUuIChub24tbGVnYWN5IG1vZGUpLiAqL1xuK1x0czMyIG1vZGVybl9iYXJzO1xuK1x0dm9pZCBfX2lvbWVtICpwY2lfaW9yZW1hcF9hZGRyWzZdO1xuK1x0dTMyIGRldl9jZmdfYmFyX29mZjtcbit9O1xuK1xuK3ZvaWQgKnp4ZGhfY29yZV9hbGxvY19wcml2KHN0cnVjdCB6eGRoX2NvcmVfZGV2ICp6eGRoX2Rldiwgc2l6ZV90IHNpemUpO1xuK3ZvaWQgenhkaF9jb3JlX2ZyZWVfcHJpdihzdHJ1Y3QgenhkaF9jb3JlX2RldiAqenhkaF9kZXYpO1xuK3ZvaWQgenhkaF9wZl9wY2lfY2xvc2Uoc3RydWN0IHp4ZGhfY29yZV9kZXYgKnp4ZGhfZGV2KTtcbitpbnQgenhkaF9wZl9wY2lfZmluZF9jYXBhYmlsaXR5KHN0cnVjdCBwY2lfZGV2ICpwZGV2LCB1OCBjZmdfdHlwZSxcbitcdFx0XHRcdHUzMiBpb3Jlc291cmNlX3R5cGVzLCBpbnQgKmJhcnMpO1xuK3ZvaWQgX19pb21lbSAqenhkaF9wZl9tYXBfY2FwYWJpbGl0eShzdHJ1Y3QgenhkaF9jb3JlX2RldiAqenhkaF9kZXYsIGludCBvZmYsXG4rXHRcdFx0XHQgICAgIHNpemVfdCBtaW5sZW4sIHUzMiBhbGlnbixcbitcdFx0XHRcdCAgICAgdTMyIHN0YXJ0LCB1MzIgc2l6ZSxcbitcdFx0XHRcdCAgICAgc2l6ZV90ICpsZW4sIHJlc291cmNlX3NpemVfdCAqcGEsXG4rXHRcdFx0XHQgICAgIHUzMiAqYmFyX29mZik7XG4raW50IHp4ZGhfcGZfY29tbW9uX2NmZ19pbml0KHN0cnVjdCB6eGRoX2NvcmVfZGV2ICp6eGRoX2Rldik7XG4raW50IHp4ZGhfcGZfbm90aWZ5X2NmZ19pbml0KHN0cnVjdCB6eGRoX2NvcmVfZGV2ICp6eGRoX2Rldik7XG4raW50IHp4ZGhfcGZfZGV2aWNlX2NmZ19pbml0KHN0cnVjdCB6eGRoX2NvcmVfZGV2ICp6eGRoX2Rldik7XG4rdm9pZCB6eGRoX3BmX21vZGVybl9jZmdfdW5pbml0KHN0cnVjdCB6eGRoX2NvcmVfZGV2ICp6eGRoX2Rldik7XG4raW50IHp4ZGhfcGZfbW9kZXJuX2NmZ19pbml0KHN0cnVjdCB6eGRoX2NvcmVfZGV2ICp6eGRoX2Rldik7XG4rXG4rI2VuZGlmIC8qIF9fWlhESF9FTl9QRl9IX18gKi9cbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDE3OjQxOjMzLjI5MDk0MTI1WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODg1NzYwNTg0MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipXb3J0aEZ1enppbmcgRGVjaXNpb24gZm9yIHRoZSBaVEUgRGluZ0hhaSBFdGhlcm5ldCBEcml2ZXIqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIFdlJ3ZlIGdvdCBhIG5ldyBwYXRjaCBpbnRyb2R1Y2luZyBhIGRyaXZlciBmb3IgWlRFIERpbmdIYWkgRXRoZXJuZXQgZGV2aWNlcy4gSXQncyBzaXR0aW5nIGluIGBkcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9gIGFuZCBpcyBhIFBDSSBkcml2ZXIgc3BlY2lmaWNhbGx5LCBuYW1lZCBgZGluZ2hhaTEwZWAuIE15IGluaXRpYWwgc2NhbiBzaG93cyB0aGUgZHJpdmVyIHNldHMgdXAgc29tZSBQQ0kgY2FwYWJpbGl0aWVzLCBkZXZsaW5rIGFuZCBzZWVtcyB0byBiZSBhIGJhc2ljIFBDSSBkcml2ZXIgcHJvYmUuIE5vIG5ldGRldiByZWdpc3RyYXRpb24gYXQgdGhpcyBwb2ludC5cblxuTm93LCBhY2NvcmRpbmcgdG8gdGhlIGRpcmVjdGlvbnMsIEkgbmVlZCB0byBjaGVjayBpZiB0aGlzIGlzIHdvcnRoIGZ1enppbmcuIFRoZSBpbnN0cnVjdGlvbnMgdGVsbCBtZSB0byBmbGFnIGl0IGFzIGBXb3J0aEZ1enppbmc9ZmFsc2VgIGlmIHRoZSBwYXRjaCAqb25seSogY29udGFpbnMgY29kZSBpbiBzcGVjaWZpYyBkcml2ZXIgdHlwZXMuIFNwZWNpZmljYWxseSwgaXQgaGlnaGxpZ2h0cyBcInZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVVcIi5cblxuQWhhISBUaGlzIGlzIGEgWlRFIERpbmdIYWkgRXRoZXJuZXQgZHJpdmVyLiBJdCdzIGEgdmVuZG9yLXNwZWNpZmljIFBDSWUgTklDIGRyaXZlci4gVGhlIHF1ZXN0aW9uIGlzLCBpcyB0aGlzIGVtdWxhdGVkIGluIFFFTVU/IEkgZG91YnQgaXQuIFRoZXJlJ3Mgbm8gaW5kaWNhdGlvbiB0aGF0IHRoaXMgaGFyZHdhcmUgaXMgc3VwcG9ydGVkIG9yIGVtdWxhdGVkIHdpdGhpbiB0aGUgc3RhbmRhcmQgUUVNVSBlbnZpcm9ubWVudC4gVGhlIGluc3RydWN0aW9ucyBhcmUgcHJldHR5IGV4cGxpY2l0IG9uIHRoaXMgcG9pbnQuXG5cbkxldCBtZSBjb25maXJtIHRoZSBkcml2ZXIncyBuYXR1cmUuIFllcywgaXQncyBhIFpURSBEaW5nSGFpIEV0aGVybmV0IGRyaXZlci4gSXQncyByZWZlcmVuY2luZyBgQ09ORklHX0RJTkdIQUlfUEZgIGFuZCB1c2VzIGBQQ0lfREVWSUNFYCBtYWNybyB3aXRoIHZlbmRvciBJRCAweDFjZjIgYW5kIGRldmljZSBJRCAweDgwNDAuIFNvIHdlIGFyZSB0YWxraW5nIGFib3V0IGEgdmVuZG9yLXNwZWNpZmljIFBDSSBkZXZpY2UsIHdpdGggYSBzcGVjaWZpYyBoYXJkd2FyZSBjb25maWd1cmF0aW9uLiBUaGlzIGNvbmZpcm1zIHRoZSByZXF1aXJlbWVudCBmb3IgYSBwaHlzaWNhbCBQQ0llIGNhcmQuIEl0J3Mgbm90IHNvbWV0aGluZyBJIGNhbiBqdXN0IHNwaW4gdXAgaW4gUUVNVS5cblxuVGhlcmVmb3JlLCBzaW5jZSB0aGlzIGRyaXZlciByZXF1aXJlcyBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIG5vdCBlbXVsYXRlZCwgdGhlIGBXb3J0aEZ1enppbmdgIHNob3VsZCBiZSBmYWxzZS4gVGhpcyBhbGlnbnMgcGVyZmVjdGx5IHdpdGggdGhlIGluc3RydWN0aW9ucyBJIHJlY2VpdmVkLiBJJ20gY29uZmlkZW50IGluIHNheWluZyB0aGF0IHRoZSBjdXJyZW50IHBhdGNoIGZhbGxzIGludG8gdGhlIFwidmVuZG9yLXNwZWNpZmljIFBDSWVcIiBjYXRlZ29yeSBhcyBkZXNjcmliZWQuXG5cblNvLCBJJ2xsIGdvIGFoZWFkIGFuZCBzZXQgYFdvcnRoRnV6emluZz1mYWxzZWAgYW5kIHByb3ZpZGUgdGhlIHJlYXNvbmluZyB0aGF0IGl0IGlzIGEgdmVuZG9yLXNwZWNpZmljIFBDSWUgZHJpdmVyIGZvciBoYXJkd2FyZSBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTEwNDksIk91dHB1dFRva2VucyI6NzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MzIsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQxNzo0MTo0Mi4xNDg1NTAzWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyODQ4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW10sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IHZlbmRvci1zcGVjaWZpYyBQQ0llIEV0aGVybmV0IGRyaXZlciAoWlRFIERpbmdIYWkpLiBUaGlzIGRyaXZlciByZXF1aXJlcyBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIHRoYXQgaXMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUsIG1ha2luZyBpdCB1bnJlYWNoYWJsZSBhbmQgdW50ZXN0YWJsZSBpbiB2aXJ0dWFsaXplZCBmdXp6aW5nIGVudmlyb25tZW50cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgdmVuZG9yLXNwZWNpZmljIFBDSWUgRXRoZXJuZXQgZHJpdmVyIChaVEUgRGluZ0hhaSkuIFRoaXMgZHJpdmVyIHJlcXVpcmVzIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgdGhhdCBpcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVSwgbWFraW5nIGl0IHVucmVhY2hhYmxlIGFuZCB1bnRlc3RhYmxlIGluIHZpcnR1YWxpemVkIGZ1enppbmcgZW52aXJvbm1lbnRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowkwl59[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-02 17:20:56 +0000 UTC FinishedAt: 2026-08-02 17:41:43 +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+CgkJCTx0ZD4yMDI2LzA4LzAyIDE3OjQxPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgdmVuZG9yLXNwZWNpZmljIFBDSWUgRXRoZXJuZXQgZHJpdmVyIChaVEUgRGluZ0hhaSkuIFRoaXMgZHJpdmVyIHJlcXVpcmVzIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgdGhhdCBpcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVSwgbWFraW5nIGl0IHVucmVhY2hhYmxlIGFuZCB1bnRlc3RhYmxlIGluIHZpcnR1YWxpemVkIGZ1enppbmcgZW52aXJvbm1lbnRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAxNzo0MTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDU5Y2MxNDI3NDc1MzZkMWZhMmFjMWM1M2ZhNGJjMzE0NDU3OTFlYjJcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU3VuIEF1ZyAyIDE3OjQxOjMxIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL01BSU5UQUlORVJTIGIvTUFJTlRBSU5FUlNcbmluZGV4IDJmYjFjNzVhZmQxNjMuLjczNjkyYjA5YmY3YmEgMTAwNjQ0XG4tLS0gYS9NQUlOVEFJTkVSU1xuJiM0MzsmIzQzOyYjNDM7IGIvTUFJTlRBSU5FUlNcbkBAIC0yOTQ0MCw2ICYjNDM7Mjk0NDAsMTIgQEAgUzpcdE1haW50YWluZWRcbiBUOlx0Z2l0IGdpdDovL2dpdC5rZXJuZWwub3JnL3B1Yi9zY20vbGludXgva2VybmVsL2dpdC90aXdhaS9zb3VuZC5naXRcbiBGOlx0c291bmQvaGRhL2NvZGVjcy9zZW5hcnl0ZWNoLmNcbiBcbiYjNDM7WlRFIERJTkdIQUkgRVRIRVJORVQgRFJJVkVSXG4mIzQzO006XHRKdW55YW5nIEhhbiBcdTAwM2NoYW4uanVueWFuZ0B6dGUuY29tLmNuXHUwMDNlXG4mIzQzO0w6XHRuZXRkZXZAdmdlci5rZXJuZWwub3JnXG4mIzQzO1M6XHRNYWludGFpbmVkXG4mIzQzO0Y6XHRkcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvXG4mIzQzO1xuIFRIRSBSRVNUXG4gTTpcdExpbnVzIFRvcnZhbGRzIFx1MDAzY3RvcnZhbGRzQGxpbnV4LWZvdW5kYXRpb24ub3JnXHUwMDNlXG4gTDpcdGxpbnV4LWtlcm5lbEB2Z2VyLmtlcm5lbC5vcmdcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9LY29uZmlnIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvS2NvbmZpZ1xuaW5kZXggYjhmNzBlMmExNzYzYS4uYzJiNjk5NmIwY2ZlMSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L0tjb25maWdcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L0tjb25maWdcbkBAIC0xODgsNSAmIzQzOzE4OCw2IEBAIHNvdXJjZSBcJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL0tjb25maWdcJiMzNDtcbiBzb3VyY2UgXCYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvd2l6bmV0L0tjb25maWdcJiMzNDtcbiBzb3VyY2UgXCYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQveGlsaW54L0tjb25maWdcJiMzNDtcbiBzb3VyY2UgXCYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQveGlyY29tL0tjb25maWdcJiMzNDtcbiYjNDM7c291cmNlIFwmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9LY29uZmlnXCYjMzQ7XG4gXG4gZW5kaWYgIyBFVEhFUk5FVFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L01ha2VmaWxlIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvTWFrZWZpbGVcbmluZGV4IDU3MzQ0ZmVjNmNlMDQuLmEzNGJjYmQ0ZGY0ZTkgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9NYWtlZmlsZVxuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvTWFrZWZpbGVcbkBAIC0xMDQsMyAmIzQzOzEwNCw0IEBAIG9iai0kKENPTkZJR19ORVRfVkVORE9SX1hJUkNPTSkgJiM0Mzs9IHhpcmNvbS9cbiBvYmotJChDT05GSUdfTkVUX1ZFTkRPUl9TWU5PUFNZUykgJiM0Mzs9IHN5bm9wc3lzL1xuIG9iai0kKENPTkZJR19ORVRfVkVORE9SX1BFTlNBTkRPKSAmIzQzOz0gcGVuc2FuZG8vXG4gb2JqLSQoQ09ORklHX09BX1RDNikgJiM0Mzs9IG9hX3RjNi5vXG4mIzQzO29iai0kKENPTkZJR19ORVRfVkVORE9SX1pURSkgJiM0Mzs9IHp0ZS9cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvS2NvbmZpZyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9LY29uZmlnXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uYjk1YzJmYzdkYjc3YVxuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL0tjb25maWdcbkBAIC0wLDAgJiM0MzsxLDIwIEBAXG4mIzQzOyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuJiM0MzsjXG4mIzQzOyMgWlRFIGRyaXZlciBjb25maWd1cmF0aW9uXG4mIzQzOyNcbiYjNDM7XG4mIzQzO2NvbmZpZyBORVRfVkVORE9SX1pURVxuJiM0MzsgICAgYm9vbCBcJiMzNDtaVEUgZGV2aWNlc1wmIzM0O1xuJiM0MzsgICAgZGVmYXVsdCB5XG4mIzQzOyAgICBoZWxwXG4mIzQzOyAgICAgIElmIHlvdSBoYXZlIGEgbmV0d29yayAoRXRoZXJuZXQpIGNhcmQgYmVsb25naW5nIHRvIHRoaXMgY2xhc3MsIHNheSBZLlxuJiM0MzsgICAgICBOb3RlIHRoYXQgdGhlIGFuc3dlciB0byB0aGlzIHF1ZXN0aW9uIGRvZXNuJiMzOTt0IGRpcmVjdGx5IGFmZmVjdCB0aGVcbiYjNDM7ICAgICAga2VybmVsOiBzYXlpbmcgTiB3aWxsIGp1c3QgY2F1c2UgdGhlIGNvbmZpZ3VyYXRvciB0byBza2lwIGFsbFxuJiM0MzsgICAgICB0aGUgcXVlc3Rpb25zIGFib3V0IFp0ZSBjYXJkcy4gSWYgeW91IHNheSBZLCB5b3Ugd2lsbCBiZSBhc2tlZFxuJiM0MzsgICAgICBmb3IgeW91ciBzcGVjaWZpYyBjYXJkIGluIHRoZSBmb2xsb3dpbmcgcXVlc3Rpb25zLlxuJiM0MztcbiYjNDM7aWYgTkVUX1ZFTkRPUl9aVEVcbiYjNDM7XG4mIzQzO3NvdXJjZSBcJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9LY29uZmlnXCYjMzQ7XG4mIzQzO1xuJiM0MztlbmRpZiAjIE5FVF9WRU5ET1JfWlRFXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL01ha2VmaWxlIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL01ha2VmaWxlXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uY2Q5OTI5YjYxNTU5Y1xuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL01ha2VmaWxlXG5AQCAtMCwwICYjNDM7MSw2IEBAXG4mIzQzOyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuJiM0MzsjXG4mIzQzOyMgTWFrZWZpbGUgZm9yIHRoZSBaVEUgZGV2aWNlIGRyaXZlcnNcbiYjNDM7I1xuJiM0MztcbiYjNDM7b2JqLSQoQ09ORklHX0RJTkdIQUkpICYjNDM7PSBkaW5naGFpL1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL0tjb25maWcgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9LY29uZmlnXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uMTIxYmUzYmY3NzA3ZlxuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvS2NvbmZpZ1xuQEAgLTAsMCAmIzQzOzEsMzQgQEBcbiYjNDM7IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4mIzQzOyNcbiYjNDM7IyBaVEUgRGluZ0hhaSBFdGhlcm5ldCBkcml2ZXIgY29uZmlndXJhdGlvblxuJiM0MzsjXG4mIzQzO1xuJiM0Mztjb25maWcgRElOR0hBSVxuJiM0MzsgICAgYm9vbCBcJiMzNDtaVEUgRGluZ0hhaSBFdGhlcm5ldCBkcml2ZXJcJiMzNDtcbiYjNDM7ICAgIGRlcGVuZHMgb24gUENJXG4mIzQzOyAgICBzZWxlY3QgTkVUX0RFVkxJTktcbiYjNDM7ICAgIGhlbHBcbiYjNDM7ICAgICAgVGhpcyBkcml2ZXIgc3VwcG9ydHMgWlRFIERpbmdIYWkgRXRoZXJuZXQgZGV2aWNlcy5cbiYjNDM7XG4mIzQzOyAgICAgIERpbmdIYWkgaXMgYSBoaWdoLXBlcmZvcm1hbmNlIEV0aGVybmV0IGNvbnRyb2xsZXIgdGhhdCBzdXBwb3J0c1xuJiM0MzsgICAgICBtdWx0aXBsZSBmZWF0dXJlcyBpbmNsdWRpbmcgaGFyZHdhcmUgb2ZmbG9hZGluZywgU1ItSU9WLCBhbmRcbiYjNDM7ICAgICAgYWR2YW5jZWQgdmlydHVhbGl6YXRpb24gY2FwYWJpbGl0aWVzLlxuJiM0MztcbiYjNDM7ICAgICAgSWYgeW91IHNheSBZIGhlcmUsIHlvdSBjYW4gc2VsZWN0IHNwZWNpZmljIGRyaXZlciB2YXJpYW50cyBiZWxvdy5cbiYjNDM7XG4mIzQzOyAgICAgIElmIHVuc3VyZSwgc2F5IE4uXG4mIzQzO1xuJiM0MztpZiBESU5HSEFJXG4mIzQzO1xuJiM0Mztjb25maWcgRElOR0hBSV9QRlxuJiM0MzsgICAgdHJpc3RhdGUgXCYjMzQ7WlRFIERpbmdIYWkgUEYgKFBoeXNpY2FsIEZ1bmN0aW9uKSBkcml2ZXJcJiMzNDtcbiYjNDM7ICAgIGhlbHBcbiYjNDM7ICAgICAgVGhpcyBkcml2ZXIgc3VwcG9ydHMgWlRFIERpbmdIYWkgUENJIEV4cHJlc3MgRXRoZXJuZXRcbiYjNDM7ICAgICAgYWRhcHRlcnMgKFBGKS5cbiYjNDM7XG4mIzQzOyAgICAgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmUuIFRoZSBtb2R1bGVcbiYjNDM7ICAgICAgd2lsbCBiZSBuYW1lZCBkaW5naGFpMTBlLlxuJiM0MztcbiYjNDM7ICAgICAgSWYgdW5zdXJlLCBzYXkgTi5cbiYjNDM7XG4mIzQzO2VuZGlmICMgRElOR0hBSVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL01ha2VmaWxlIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvTWFrZWZpbGVcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwLi5lMmY0ZGEzM2RmNTkzXG4tLS0gL2Rldi9udWxsXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9NYWtlZmlsZVxuQEAgLTAsMCAmIzQzOzEsNyBAQFxuJiM0MzsjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiYjNDM7I1xuJiM0MzsjIE1ha2VmaWxlIGZvciBaVEUgRGluZ0hhaSBFdGhlcm5ldCBkcml2ZXJcbiYjNDM7I1xuJiM0MztcbiYjNDM7b2JqLSQoQ09ORklHX0RJTkdIQUlfUEYpICYjNDM7PSBkaW5naGFpMTBlLm9cbiYjNDM7ZGluZ2hhaTEwZS15IDo9IGVuX3BmLm9cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9kaF9xdWV1ZS5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZGhfcXVldWUuaFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLjViNjM4OTVjMWVhMWVcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2RoX3F1ZXVlLmhcbkBAIC0wLDAgJiM0MzsxLDU2IEBAXG4mIzQzOy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHkgKi9cbiYjNDM7LypcbiYjNDM7ICogWlRFIERpbmdIYWkgRXRoZXJuZXQgZHJpdmVyIC0gUENJIGNhcGFiaWxpdHkgZGVmaW5pdGlvbnNcbiYjNDM7ICogQ29weXJpZ2h0IChjKSAyMDIyLTIwMjYsIFpURSBDb3Jwb3JhdGlvbi5cbiYjNDM7ICovXG4mIzQzO1xuJiM0MzsjaWZuZGVmIF9fREhfUVVFVUVfSF9fXG4mIzQzOyNkZWZpbmUgX19ESF9RVUVVRV9IX19cbiYjNDM7XG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3R5cGVzLmhcdTAwM2VcbiYjNDM7XG4mIzQzOy8qIFRoaXMgaXMgdGhlIFBDSSBjYXBhYmlsaXR5IGhlYWRlcjogKi9cbiYjNDM7c3RydWN0IHp4ZGhfcGZfcGNpX2NhcCB7XG4mIzQzO1x0X191OCBjYXBfdm5kcjtcdFx0LyogR2VuZXJpYyBQQ0kgZmllbGQ6IFBDSV9DQVBfSURfVk5EUiAqL1xuJiM0MztcdF9fdTggY2FwX25leHQ7XHRcdC8qIEdlbmVyaWMgUENJIGZpZWxkOiBuZXh0IHB0ci4gKi9cbiYjNDM7XHRfX3U4IGNhcF9sZW47XHRcdC8qIEdlbmVyaWMgUENJIGZpZWxkOiBjYXBhYmlsaXR5IGxlbmd0aCAqL1xuJiM0MztcdF9fdTggY2ZnX3R5cGU7XHRcdC8qIElkZW50aWZpZXMgdGhlIHN0cnVjdHVyZS4gKi9cbiYjNDM7XHRfX3U4IGJhcjtcdFx0LyogV2hlcmUgdG8gZmluZCBpdC4gKi9cbiYjNDM7XHRfX3U4IGlkO1x0XHQvKiBNdWx0aXBsZSBjYXBhYmlsaXRpZXMgb2YgdGhlIHNhbWUgdHlwZSAqL1xuJiM0MztcdF9fdTggcGFkZGluZ1syXTtcdFx0LyogUGFkIHRvIGZ1bGwgZHdvcmQuICovXG4mIzQzO1x0X19sZTMyIG9mZnNldDtcdFx0LyogT2Zmc2V0IHdpdGhpbiBiYXIuICovXG4mIzQzO1x0X19sZTMyIGxlbmd0aDtcdFx0LyogTGVuZ3RoIG9mIHRoZSBzdHJ1Y3R1cmUsIGluIGJ5dGVzLiAqL1xuJiM0Mzt9O1xuJiM0MztcbiYjNDM7LyogRmllbGRzIGluIFpYREhfUEZfUENJX0NBUF9DT01NT05fQ0ZHOiAqL1xuJiM0MztzdHJ1Y3QgenhkaF9wZl9wY2lfY29tbW9uX2NmZyB7XG4mIzQzO1x0LyogQWJvdXQgdGhlIHdob2xlIGRldmljZS4gKi9cbiYjNDM7XHRfX2xlMzIgZGV2aWNlX2ZlYXR1cmVfc2VsZWN0OyAvKiByZWFkLXdyaXRlICovXG4mIzQzO1x0X19sZTMyIGRldmljZV9mZWF0dXJlO1x0LyogcmVhZC1vbmx5ICovXG4mIzQzO1x0X19sZTMyIGd1ZXN0X2ZlYXR1cmVfc2VsZWN0OyAvKiByZWFkLXdyaXRlICovXG4mIzQzO1x0X19sZTMyIGd1ZXN0X2ZlYXR1cmU7XHRcdC8qIHJlYWQtd3JpdGUgKi9cbiYjNDM7XHRfX2xlMTYgbXNpeF9jb25maWc7XHRcdC8qIHJlYWQtd3JpdGUgKi9cbiYjNDM7XHRfX2xlMTYgbnVtX3F1ZXVlcztcdFx0LyogcmVhZC1vbmx5ICovXG4mIzQzO1x0X191OCBkZXZpY2Vfc3RhdHVzO1x0XHQvKiByZWFkLXdyaXRlICovXG4mIzQzO1x0X191OCBjb25maWdfZ2VuZXJhdGlvbjtcdC8qIHJlYWQtb25seSAqL1xuJiM0MztcbiYjNDM7XHQvKiBBYm91dCBhIHNwZWNpZmljIHZpcnRxdWV1ZS4gKi9cbiYjNDM7XHRfX2xlMTYgcXVldWVfc2VsZWN0O1x0XHQvKiByZWFkLXdyaXRlICovXG4mIzQzO1x0X19sZTE2IHF1ZXVlX3NpemU7XHRcdC8qIHJlYWQtd3JpdGUsIHBvd2VyIG9mIDIuICovXG4mIzQzO1x0X19sZTE2IHF1ZXVlX21zaXhfdmVjdG9yO1x0LyogcmVhZC13cml0ZSAqL1xuJiM0MztcdF9fbGUxNiBxdWV1ZV9lbmFibGU7XHRcdC8qIHJlYWQtd3JpdGUgKi9cbiYjNDM7XHRfX2xlMTYgcXVldWVfbm90aWZ5X29mZjtcdC8qIHJlYWQtb25seSAqL1xuJiM0MztcdF9fbGUzMiBxdWV1ZV9kZXNjX2xvO1x0XHQvKiByZWFkLXdyaXRlICovXG4mIzQzO1x0X19sZTMyIHF1ZXVlX2Rlc2NfaGk7XHRcdC8qIHJlYWQtd3JpdGUgKi9cbiYjNDM7XHRfX2xlMzIgcXVldWVfYXZhaWxfbG87XHRcdC8qIHJlYWQtd3JpdGUgKi9cbiYjNDM7XHRfX2xlMzIgcXVldWVfYXZhaWxfaGk7XHRcdC8qIHJlYWQtd3JpdGUgKi9cbiYjNDM7XHRfX2xlMzIgcXVldWVfdXNlZF9sbztcdFx0LyogcmVhZC13cml0ZSAqL1xuJiM0MztcdF9fbGUzMiBxdWV1ZV91c2VkX2hpO1x0XHQvKiByZWFkLXdyaXRlICovXG4mIzQzO307XG4mIzQzO1xuJiM0MztzdHJ1Y3QgenhkaF9wZl9wY2lfbm90aWZ5X2NhcCB7XG4mIzQzO1x0c3RydWN0IHp4ZGhfcGZfcGNpX2NhcCBjYXA7XG4mIzQzO1x0X19sZTMyIG5vdGlmeV9vZmZfbXVsdGlwbGllcjsgLyogTXVsdGlwbGllciBmb3IgcXVldWVfbm90aWZ5X29mZi4gKi9cbiYjNDM7fTtcbiYjNDM7XG4mIzQzOyNlbmRpZiAvKiBfX0RIX1FVRVVFX0hfXyAqL1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uODZkNDM3NDA4ODIwM1xuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuY1xuQEAgLTAsMCAmIzQzOzEsNDQ5IEBAXG4mIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiYjNDM7LypcbiYjNDM7ICogWlRFIERpbmdIYWkgRXRoZXJuZXQgZHJpdmVyXG4mIzQzOyAqIENvcHlyaWdodCAoYykgMjAyMi0yMDI2LCBaVEUgQ29ycG9yYXRpb24uXG4mIzQzOyAqL1xuJiM0MztcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvbW9kdWxlLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvcGNpLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbmV0L2RldmxpbmsuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9kbWEtbWFwcGluZy5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFwmIzM0O2VuX3BmLmhcJiMzNDtcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7ZGhfcXVldWUuaFwmIzM0O1xuJiM0MztcbiYjNDM7TU9EVUxFX0FVVEhPUihcJiMzNDtKdW55YW5nIEhhbiBcdTAwM2NoYW4uanVueWFuZ0B6dGUuY29tLmNuXHUwMDNlXCYjMzQ7KTtcbiYjNDM7TU9EVUxFX0RFU0NSSVBUSU9OKFwmIzM0O1pURSBEaW5nSGFpIHNlcmllcyBFdGhlcm5ldCBkcml2ZXJcJiMzNDspO1xuJiM0MztNT0RVTEVfTElDRU5TRShcJiMzNDtHUExcJiMzNDspO1xuJiM0MztcbiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBkZXZsaW5rX29wcyB6eGRoX3BmX2Rldmxpbmtfb3BzID0ge307XG4mIzQzO1xuJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgenhkaF9wZl9wY2lfdGFibGVbXSA9IHtcbiYjNDM7XHR7IFBDSV9ERVZJQ0UoWlhESF9QRl9WRU5ET1JfSUQsIFpYREhfUEZfREVWSUNFX0lEKSB9LFxuJiM0MztcdHsgUENJX0RFVklDRShaWERIX1BGX1ZFTkRPUl9JRCwgWlhESF9WRl9ERVZJQ0VfSUQpIH0sXG4mIzQzO1x0eyB9XG4mIzQzO307XG4mIzQzO1xuJiM0MztNT0RVTEVfREVWSUNFX1RBQkxFKHBjaSwgenhkaF9wZl9wY2lfdGFibGUpO1xuJiM0MztcbiYjNDM7dm9pZCAqenhkaF9jb3JlX2FsbG9jX3ByaXYoc3RydWN0IHp4ZGhfY29yZV9kZXYgKnp4ZGhfZGV2LCBzaXplX3Qgc2l6ZSlcbiYjNDM7e1xuJiM0MztcdHZvaWQgKnByaXYgPSBremFsbG9jKHNpemUsIEdGUF9LRVJORUwpO1xuJiM0MztcbiYjNDM7XHRpZiAocHJpdilcbiYjNDM7XHRcdHp4ZGhfZGV2LVx1MDAzZXByaXYgPSBwcml2O1xuJiM0MztcdHJldHVybiBwcml2O1xuJiM0Mzt9XG4mIzQzO1xuJiM0Mzt2b2lkIHp4ZGhfY29yZV9mcmVlX3ByaXYoc3RydWN0IHp4ZGhfY29yZV9kZXYgKnp4ZGhfZGV2KVxuJiM0Mzt7XG4mIzQzO1x0a2ZyZWUoenhkaF9kZXYtXHUwMDNlcHJpdik7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgenhkaF9wZl9wY2lfaW5pdChzdHJ1Y3QgenhkaF9jb3JlX2RldiAqenhkaF9kZXYpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgenhkaF9wZl9kZXYgKnBmX2RldiA9IHp4ZGhfZGV2LVx1MDAzZXByaXY7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0cGNpX3NldF9kcnZkYXRhKHp4ZGhfZGV2LVx1MDAzZXBkZXYsIHp4ZGhfZGV2KTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gcGNpX2VuYWJsZV9kZXZpY2UoenhkaF9kZXYtXHUwMDNlcGRldik7XG4mIzQzO1x0aWYgKHJldCkge1xuJiM0MztcdFx0ZGV2X2Vycih6eGRoX2Rldi1cdTAwM2VkZXZpY2UsIFwmIzM0O3BjaV9lbmFibGVfZGV2aWNlIGZhaWxlZDogJWRcXG5cJiMzNDssIHJldCk7XG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0ZG1hX3NldF9tYXNrX2FuZF9jb2hlcmVudCh6eGRoX2Rldi1cdTAwM2VkZXZpY2UsIERNQV9CSVRfTUFTSyg2NCkpO1xuJiM0MztcbiYjNDM7XHRyZXQgPSBwY2lfcmVxdWVzdF9zZWxlY3RlZF9yZWdpb25zKHp4ZGhfZGV2LVx1MDAzZXBkZXYsXG4mIzQzO1x0XHRcdFx0XHQgICBwY2lfc2VsZWN0X2JhcnMoenhkaF9kZXYtXHUwMDNlcGRldiwgSU9SRVNPVVJDRV9NRU0pLFxuJiM0MztcdFx0XHRcdFx0ICAgXCYjMzQ7ZGgtcGZcJiMzNDspO1xuJiM0MztcdGlmIChyZXQpIHtcbiYjNDM7XHRcdGRldl9lcnIoenhkaF9kZXYtXHUwMDNlZGV2aWNlLCBcJiMzNDtwY2lfcmVxdWVzdF9zZWxlY3RlZF9yZWdpb25zIGZhaWxlZDogJWRcXG5cJiMzNDssIHJldCk7XG4mIzQzO1x0XHRnb3RvIGVycl9wY2k7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRwY2lfc2V0X21hc3Rlcih6eGRoX2Rldi1cdTAwM2VwZGV2KTtcbiYjNDM7XHRyZXQgPSBwY2lfc2F2ZV9zdGF0ZSh6eGRoX2Rldi1cdTAwM2VwZGV2KTtcbiYjNDM7XHRpZiAocmV0KSB7XG4mIzQzO1x0XHRkZXZfZXJyKHp4ZGhfZGV2LVx1MDAzZWRldmljZSwgXCYjMzQ7cGNpX3NhdmVfc3RhdGUgZmFpbGVkOiAlZFxcblwmIzM0OywgcmV0KTtcbiYjNDM7XHRcdGdvdG8gZXJyX3BjaV9zYXZlX3N0YXRlO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKCEocGNpX3Jlc291cmNlX2ZsYWdzKHp4ZGhfZGV2LVx1MDAzZXBkZXYsIDApIFx1MDAyNiBJT1JFU09VUkNFX01FTSkpIHtcbiYjNDM7XHRcdHJldCA9IC1FTk9ERVY7XG4mIzQzO1x0XHRkZXZfZXJyKHp4ZGhfZGV2LVx1MDAzZWRldmljZSwgXCYjMzQ7QkFSIDAgaXMgbm90IGFuIE1NSU8gcmVzb3VyY2VcXG5cJiMzNDspO1xuJiM0MztcdFx0Z290byBlcnJfcGNpX3NhdmVfc3RhdGU7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRwZl9kZXYtXHUwMDNlcGNpX2lvcmVtYXBfYWRkclswXSA9XG4mIzQzO1x0XHRpb3JlbWFwKHBjaV9yZXNvdXJjZV9zdGFydCh6eGRoX2Rldi1cdTAwM2VwZGV2LCAwKSxcbiYjNDM7XHRcdFx0cGNpX3Jlc291cmNlX2xlbih6eGRoX2Rldi1cdTAwM2VwZGV2LCAwKSk7XG4mIzQzO1x0aWYgKCFwZl9kZXYtXHUwMDNlcGNpX2lvcmVtYXBfYWRkclswXSkge1xuJiM0MztcdFx0cmV0ID0gLUVOT01FTTtcbiYjNDM7XHRcdGRldl9lcnIoenhkaF9kZXYtXHUwMDNlZGV2aWNlLCBcJiMzNDtkaCBwZiBwY2kgaW9yZW1hcCBmYWlsZWRcXG5cJiMzNDspO1xuJiM0MztcdFx0Z290byBlcnJfcGNpX3NhdmVfc3RhdGU7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO2Vycl9wY2lfc2F2ZV9zdGF0ZTpcbiYjNDM7XHRwY2lfcmVsZWFzZV9zZWxlY3RlZF9yZWdpb25zKHp4ZGhfZGV2LVx1MDAzZXBkZXYsXG4mIzQzO1x0XHRcdFx0ICAgICBwY2lfc2VsZWN0X2JhcnMoenhkaF9kZXYtXHUwMDNlcGRldiwgSU9SRVNPVVJDRV9NRU0pKTtcbiYjNDM7ZXJyX3BjaTpcbiYjNDM7XHRwY2lfZGlzYWJsZV9kZXZpY2UoenhkaF9kZXYtXHUwMDNlcGRldik7XG4mIzQzO1x0cmV0dXJuIHJldDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7dm9pZCB6eGRoX3BmX3BjaV9jbG9zZShzdHJ1Y3QgenhkaF9jb3JlX2RldiAqenhkaF9kZXYpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgenhkaF9wZl9kZXYgKnBmX2RldiA9IHp4ZGhfZGV2LVx1MDAzZXByaXY7XG4mIzQzO1xuJiM0MztcdGlvdW5tYXAocGZfZGV2LVx1MDAzZXBjaV9pb3JlbWFwX2FkZHJbMF0pO1xuJiM0MztcdHBjaV9yZWxlYXNlX3NlbGVjdGVkX3JlZ2lvbnMoenhkaF9kZXYtXHUwMDNlcGRldixcbiYjNDM7XHRcdFx0XHQgICAgIHBjaV9zZWxlY3RfYmFycyh6eGRoX2Rldi1cdTAwM2VwZGV2LCBJT1JFU09VUkNFX01FTSkpO1xuJiM0MztcdHBjaV9kaXNhYmxlX2RldmljZSh6eGRoX2Rldi1cdTAwM2VwZGV2KTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7aW50IHp4ZGhfcGZfcGNpX2ZpbmRfY2FwYWJpbGl0eShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgdTggY2ZnX3R5cGUsXG4mIzQzO1x0XHRcdFx0dTMyIGlvcmVzb3VyY2VfdHlwZXMsIGludCAqYmFycylcbiYjNDM7e1xuJiM0MztcdGludCBwb3M7XG4mIzQzO1x0dTggdHlwZTtcbiYjNDM7XHR1OCBiYXI7XG4mIzQzO1xuJiM0MztcdGZvciAocG9zID0gcGNpX2ZpbmRfY2FwYWJpbGl0eShwZGV2LCBQQ0lfQ0FQX0lEX1ZORFIpOyBwb3MgXHUwMDNlIDA7XG4mIzQzO1x0ICAgICBwb3MgPSBwY2lfZmluZF9uZXh0X2NhcGFiaWxpdHkocGRldiwgcG9zLCBQQ0lfQ0FQX0lEX1ZORFIpKSB7XG4mIzQzO1x0XHRwY2lfcmVhZF9jb25maWdfYnl0ZShwZGV2LFxuJiM0MztcdFx0XHRcdCAgICAgcG9zICYjNDM7IG9mZnNldG9mKHN0cnVjdCB6eGRoX3BmX3BjaV9jYXAsXG4mIzQzO1x0XHRcdFx0XHRcdFx0Y2ZnX3R5cGUpLCBcdTAwMjZ0eXBlKTtcbiYjNDM7XHRcdHBjaV9yZWFkX2NvbmZpZ19ieXRlKHBkZXYsXG4mIzQzO1x0XHRcdFx0ICAgICBwb3MgJiM0Mzsgb2Zmc2V0b2Yoc3RydWN0IHp4ZGhfcGZfcGNpX2NhcCwgYmFyKSwgXHUwMDI2YmFyKTtcbiYjNDM7XG4mIzQzO1x0XHQvKiBpZ25vcmUgc3RydWN0dXJlcyB3aXRoIHJlc2VydmVkIEJBUiB2YWx1ZXMgKi9cbiYjNDM7XHRcdGlmIChiYXIgXHUwMDNlIFpYREhfUEZfTUFYX0JBUl9WQUwpXG4mIzQzO1x0XHRcdGNvbnRpbnVlO1xuJiM0MztcbiYjNDM7XHRcdGlmICh0eXBlID09IGNmZ190eXBlKSB7XG4mIzQzO1x0XHRcdGlmIChwY2lfcmVzb3VyY2VfbGVuKHBkZXYsIGJhcikgXHUwMDI2XHUwMDI2XG4mIzQzO1x0XHRcdCAgICBwY2lfcmVzb3VyY2VfZmxhZ3MocGRldiwgYmFyKSBcdTAwMjYgaW9yZXNvdXJjZV90eXBlcykge1xuJiM0MztcdFx0XHRcdCpiYXJzIHw9ICgxIFx1MDAzY1x1MDAzYyBiYXIpO1xuJiM0MztcdFx0XHRcdHJldHVybiBwb3M7XG4mIzQzO1x0XHRcdH1cbiYjNDM7XHRcdH1cbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0Mzt2b2lkIF9faW9tZW0gKnp4ZGhfcGZfbWFwX2NhcGFiaWxpdHkoc3RydWN0IHp4ZGhfY29yZV9kZXYgKnp4ZGhfZGV2LCBpbnQgb2ZmLFxuJiM0MztcdFx0XHRcdCAgICAgc2l6ZV90IG1pbmxlbiwgdTMyIGFsaWduLFxuJiM0MztcdFx0XHRcdCAgICAgdTMyIHN0YXJ0LCB1MzIgc2l6ZSxcbiYjNDM7XHRcdFx0XHQgICAgIHNpemVfdCAqbGVuLCByZXNvdXJjZV9zaXplX3QgKnBhLFxuJiM0MztcdFx0XHRcdCAgICAgdTMyICpiYXJfb2ZmKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHBjaV9kZXYgKnBkZXYgPSB6eGRoX2Rldi1cdTAwM2VwZGV2O1xuJiM0MztcdHZvaWQgX19pb21lbSAqcDtcbiYjNDM7XHR1MzIgb2Zmc2V0O1xuJiM0MztcdHUzMiBsZW5ndGg7XG4mIzQzO1x0dTggYmFyO1xuJiM0MztcbiYjNDM7XHRwY2lfcmVhZF9jb25maWdfYnl0ZShwZGV2LFxuJiM0MztcdFx0XHQgICAgIG9mZiAmIzQzOyBvZmZzZXRvZihzdHJ1Y3QgenhkaF9wZl9wY2lfY2FwLCBiYXIpLCBcdTAwMjZiYXIpO1xuJiM0MztcbiYjNDM7XHRpZiAoYmFyIFx1MDAzZSBaWERIX1BGX01BWF9CQVJfVkFMKSB7XG4mIzQzO1x0XHRkZXZfZXJyKHp4ZGhfZGV2LVx1MDAzZWRldmljZSwgXCYjMzQ7aW52YWxpZCBiYXIgJXVcXG5cJiMzNDssIGJhcik7XG4mIzQzO1x0XHRyZXR1cm4gTlVMTDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHBjaV9yZWFkX2NvbmZpZ19kd29yZChwZGV2LFxuJiM0MztcdFx0XHQgICAgICBvZmYgJiM0Mzsgb2Zmc2V0b2Yoc3RydWN0IHp4ZGhfcGZfcGNpX2NhcCxcbiYjNDM7XHRcdFx0XHRcdFx0b2Zmc2V0KSwgXHUwMDI2b2Zmc2V0KTtcbiYjNDM7XHRwY2lfcmVhZF9jb25maWdfZHdvcmQocGRldixcbiYjNDM7XHRcdFx0ICAgICAgb2ZmICYjNDM7IG9mZnNldG9mKHN0cnVjdCB6eGRoX3BmX3BjaV9jYXAsXG4mIzQzO1x0XHRcdFx0XHRcdGxlbmd0aCksIFx1MDAyNmxlbmd0aCk7XG4mIzQzO1xuJiM0MztcdGlmIChiYXJfb2ZmKVxuJiM0MztcdFx0KmJhcl9vZmYgPSBvZmZzZXQ7XG4mIzQzO1xuJiM0MztcdGlmIChsZW5ndGggXHUwMDNjPSBzdGFydCkge1xuJiM0MztcdFx0ZGV2X2Vycih6eGRoX2Rldi1cdTAwM2VkZXZpY2UsIFwmIzM0O2JhZCBjYXBhYmlsaXR5IGxlbiAldSAoXHUwMDNlJXUgZXhwZWN0ZWQpXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRsZW5ndGgsIHN0YXJ0KTtcbiYjNDM7XHRcdHJldHVybiBOVUxMO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKGxlbmd0aCAtIHN0YXJ0IFx1MDAzYyBtaW5sZW4pIHtcbiYjNDM7XHRcdGRldl9lcnIoenhkaF9kZXYtXHUwMDNlZGV2aWNlLCBcJiMzNDtiYWQgY2FwYWJpbGl0eSBsZW4gJXUgKFx1MDAzZT0lenUgZXhwZWN0ZWQpXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRsZW5ndGgsIG1pbmxlbik7XG4mIzQzO1x0XHRyZXR1cm4gTlVMTDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGxlbmd0aCAtPSBzdGFydDtcbiYjNDM7XHRpZiAoc3RhcnQgJiM0Mzsgb2Zmc2V0IFx1MDAzYyBvZmZzZXQpIHtcbiYjNDM7XHRcdGRldl9lcnIoenhkaF9kZXYtXHUwMDNlZGV2aWNlLCBcJiMzNDttYXAgd3JhcC1hcm91bmQgJXUmIzQzOyV1XFxuXCYjMzQ7LCBzdGFydCwgb2Zmc2V0KTtcbiYjNDM7XHRcdHJldHVybiBOVUxMO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0b2Zmc2V0ICYjNDM7PSBzdGFydDtcbiYjNDM7XHRpZiAob2Zmc2V0IFx1MDAyNiAoYWxpZ24gLSAxKSkge1xuJiM0MztcdFx0ZGV2X2Vycih6eGRoX2Rldi1cdTAwM2VkZXZpY2UsIFwmIzM0O29mZnNldCAldSBub3QgYWxpZ25lZCB0byAldVxcblwmIzM0Oywgb2Zmc2V0LCBhbGlnbik7XG4mIzQzO1x0XHRyZXR1cm4gTlVMTDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmIChsZW5ndGggXHUwMDNlIHNpemUpXG4mIzQzO1x0XHRsZW5ndGggPSBzaXplO1xuJiM0MztcbiYjNDM7XHRpZiAobGVuKVxuJiM0MztcdFx0KmxlbiA9IGxlbmd0aDtcbiYjNDM7XG4mIzQzO1x0aWYgKGxlbmd0aCAmIzQzOyBvZmZzZXQgXHUwMDNjIG9mZnNldCB8fFxuJiM0MztcdCAgICBsZW5ndGggJiM0Mzsgb2Zmc2V0IFx1MDAzZSBwY2lfcmVzb3VyY2VfbGVuKHBkZXYsIGJhcikpIHtcbiYjNDM7XHRcdGRldl9lcnIoenhkaF9kZXYtXHUwMDNlZGV2aWNlLFxuJiM0MztcdFx0XHRcJiMzNDttYXAgJXVAJXUgb3V0IG9mIHJhbmdlIG9uIGJhciAldSBsZW5ndGggJWx1XFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRsZW5ndGgsIG9mZnNldCwgYmFyLFxuJiM0MztcdFx0XHQodW5zaWduZWQgbG9uZylwY2lfcmVzb3VyY2VfbGVuKHBkZXYsIGJhcikpO1xuJiM0MztcdFx0cmV0dXJuIE5VTEw7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRwID0gcGNpX2lvbWFwX3JhbmdlKHBkZXYsIGJhciwgb2Zmc2V0LCBsZW5ndGgpO1xuJiM0MztcdGlmICghcCkge1xuJiM0MztcdFx0ZGV2X2Vycih6eGRoX2Rldi1cdTAwM2VkZXZpY2UsIFwmIzM0O3VuYWJsZSB0byBtYXAgY3VzdG9tIHF1ZXVlICV1QCV1IG9uIGJhciAldVxcblwmIzM0OyxcbiYjNDM7XHRcdFx0bGVuZ3RoLCBvZmZzZXQsIGJhcik7XG4mIzQzO1x0fSBlbHNlIGlmIChwYSkge1xuJiM0MztcdFx0KnBhID0gcGNpX3Jlc291cmNlX3N0YXJ0KHBkZXYsIGJhcikgJiM0Mzsgb2Zmc2V0O1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO2ludCB6eGRoX3BmX2NvbW1vbl9jZmdfaW5pdChzdHJ1Y3QgenhkaF9jb3JlX2RldiAqenhkaF9kZXYpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgenhkaF9wZl9kZXYgKnBmX2RldiA9IHp4ZGhfZGV2LVx1MDAzZXByaXY7XG4mIzQzO1x0c3RydWN0IHBjaV9kZXYgKnBkZXYgPSB6eGRoX2Rldi1cdTAwM2VwZGV2O1xuJiM0MztcdGludCBjb21tb247XG4mIzQzO1xuJiM0MztcdC8qIGNoZWNrIGZvciBhIGNvbW1vbiBjb25maWc6IGlmIG5vdCwgdXNlIGxlZ2FjeSBtb2RlIChiYXIgMCkuICovXG4mIzQzO1x0Y29tbW9uID0genhkaF9wZl9wY2lfZmluZF9jYXBhYmlsaXR5KHBkZXYsIFpYREhfUENJX0NBUF9DT01NT05fQ0ZHLFxuJiM0MztcdFx0XHRcdFx0ICAgICBJT1JFU09VUkNFX01FTSxcbiYjNDM7XHRcdFx0XHRcdCAgICAgXHUwMDI2cGZfZGV2LVx1MDAzZW1vZGVybl9iYXJzKTtcbiYjNDM7XHRpZiAoIWNvbW1vbikge1xuJiM0MztcdFx0ZGV2X2Vycih6eGRoX2Rldi1cdTAwM2VkZXZpY2UsXG4mIzQzO1x0XHRcdFwmIzM0O21pc3NpbmcgY2FwYWJpbGl0aWVzLCBsZWF2aW5nIGZvciBsZWdhY3kgZHJpdmVyXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdHJldHVybiAtRU5PREVWO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cGZfZGV2LVx1MDAzZWNvbW1vbiA9IHp4ZGhfcGZfbWFwX2NhcGFiaWxpdHkoenhkaF9kZXYsIGNvbW1vbixcbiYjNDM7XHRcdFx0XHRcdFx0c2l6ZW9mKHN0cnVjdCB6eGRoX3BmX3BjaV9jb21tb25fY2ZnKSxcbiYjNDM7XHRcdFx0XHRcdFx0WlhESF9QRl9BTElHTjQsIDAsXG4mIzQzO1x0XHRcdFx0XHRcdHNpemVvZihzdHJ1Y3QgenhkaF9wZl9wY2lfY29tbW9uX2NmZyksXG4mIzQzO1x0XHRcdFx0XHRcdE5VTEwsIE5VTEwsIE5VTEwpO1xuJiM0MztcdGlmICghcGZfZGV2LVx1MDAzZWNvbW1vbikge1xuJiM0MztcdFx0ZGV2X2Vycih6eGRoX2Rldi1cdTAwM2VkZXZpY2UsIFwmIzM0O3BmX2Rldi1cdTAwM2Vjb21tb24gaXMgbnVsbFxcblwmIzM0Oyk7XG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztpbnQgenhkaF9wZl9ub3RpZnlfY2ZnX2luaXQoc3RydWN0IHp4ZGhfY29yZV9kZXYgKnp4ZGhfZGV2KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHp4ZGhfcGZfZGV2ICpwZl9kZXYgPSB6eGRoX2Rldi1cdTAwM2Vwcml2O1xuJiM0MztcdHN0cnVjdCBwY2lfZGV2ICpwZGV2ID0genhkaF9kZXYtXHUwMDNlcGRldjtcbiYjNDM7XHR1MzIgbm90aWZ5X2xlbmd0aDtcbiYjNDM7XHR1MzIgbm90aWZ5X29mZnNldDtcbiYjNDM7XHRpbnQgbm90aWZ5O1xuJiM0MztcbiYjNDM7XHQvKiBJZiBjb21tb24gaXMgdGhlcmUsIHRoZXNlIHNob3VsZCBiZSB0b28uLi4gKi9cbiYjNDM7XHRub3RpZnkgPSB6eGRoX3BmX3BjaV9maW5kX2NhcGFiaWxpdHkocGRldiwgWlhESF9QQ0lfQ0FQX05PVElGWV9DRkcsXG4mIzQzO1x0XHRcdFx0XHQgICAgIElPUkVTT1VSQ0VfTUVNLFxuJiM0MztcdFx0XHRcdFx0ICAgICBcdTAwMjZwZl9kZXYtXHUwMDNlbW9kZXJuX2JhcnMpO1xuJiM0MztcdGlmICghbm90aWZ5KSB7XG4mIzQzO1x0XHRkZXZfZXJyKHp4ZGhfZGV2LVx1MDAzZWRldmljZSwgXCYjMzQ7bWlzc2luZyBub3RpZnkgY2ZnIGNhcGFiaWxpdHlcXG5cJiMzNDspO1xuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRwY2lfcmVhZF9jb25maWdfZHdvcmQocGRldixcbiYjNDM7XHRcdFx0ICAgICAgbm90aWZ5ICYjNDM7IG9mZnNldG9mKHN0cnVjdCB6eGRoX3BmX3BjaV9ub3RpZnlfY2FwLFxuJiM0MztcdFx0XHRcdG5vdGlmeV9vZmZfbXVsdGlwbGllciksXG4mIzQzO1x0XHRcdTAwMjZwZl9kZXYtXHUwMDNlbm90aWZ5X29mZnNldF9tdWx0aXBsaWVyKTtcbiYjNDM7XHRwY2lfcmVhZF9jb25maWdfZHdvcmQocGRldixcbiYjNDM7XHRcdFx0ICAgICAgbm90aWZ5ICYjNDM7IG9mZnNldG9mKHN0cnVjdCB6eGRoX3BmX3BjaV9ub3RpZnlfY2FwLFxuJiM0MztcdFx0XHRcdGNhcC5sZW5ndGgpLCBcdTAwMjZub3RpZnlfbGVuZ3RoKTtcbiYjNDM7XHRwY2lfcmVhZF9jb25maWdfZHdvcmQocGRldixcbiYjNDM7XHRcdFx0ICAgICAgbm90aWZ5ICYjNDM7IG9mZnNldG9mKHN0cnVjdCB6eGRoX3BmX3BjaV9ub3RpZnlfY2FwLFxuJiM0MztcdFx0XHRcdGNhcC5vZmZzZXQpLCBcdTAwMjZub3RpZnlfb2Zmc2V0KTtcbiYjNDM7XG4mIzQzO1x0LyogV2UgZG9uJiMzOTt0IGtub3cgaG93IG1hbnkgVlFzIHdlJiMzOTtsbCBtYXAsIGFoZWFkIG9mIHRoZSB0aW1lLlxuJiM0MztcdCAqIElmIG5vdGlmeSBsZW5ndGggaXMgc21hbGwsIG1hcCBpdCBhbGwgbm93LiBPdGhlcndpc2UsXG4mIzQzO1x0ICogbWFwIGVhY2ggVlEgaW5kaXZpZHVhbGx5IGxhdGVyLlxuJiM0MztcdCAqL1xuJiM0MztcdGlmIChub3RpZnlfbGVuZ3RoIFx1MDAzYz0gUEFHRV9TSVpFIC0gKG5vdGlmeV9vZmZzZXQgJSBQQUdFX1NJWkUpKSB7XG4mIzQzO1x0XHRwZl9kZXYtXHUwMDNlbm90aWZ5X2Jhc2UgPSB6eGRoX3BmX21hcF9jYXBhYmlsaXR5KHp4ZGhfZGV2LCBub3RpZnksXG4mIzQzO1x0XHRcdFx0XHRcdFx0ICAgICBaWERIX1BGX01BUF9NSU5MRU4yLFxuJiM0MztcdFx0XHRcdFx0XHRcdCAgICBaWERIX1BGX0FMSUdOMiwgMCxcbiYjNDM7XHRcdFx0XHRcdFx0XHQgICAgbm90aWZ5X2xlbmd0aCxcbiYjNDM7XHRcdFx0XHRcdFx0XHQgICAgXHUwMDI2cGZfZGV2LVx1MDAzZW5vdGlmeV9sZW4sXG4mIzQzO1x0XHRcdFx0XHRcdFx0ICAgIFx1MDAyNnBmX2Rldi1cdTAwM2Vub3RpZnlfcGEsIE5VTEwpO1xuJiM0MztcdFx0aWYgKCFwZl9kZXYtXHUwMDNlbm90aWZ5X2Jhc2UpIHtcbiYjNDM7XHRcdFx0ZGV2X2Vycih6eGRoX2Rldi1cdTAwM2VkZXZpY2UsIFwmIzM0O3BmX2Rldi1cdTAwM2Vub3RpZnlfYmFzZSBpcyBudWxsXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1x0XHR9XG4mIzQzO1x0fSBlbHNlIHtcbiYjNDM7XHRcdHBmX2Rldi1cdTAwM2Vub3RpZnlfbWFwX2NhcCA9IG5vdGlmeTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztpbnQgenhkaF9wZl9kZXZpY2VfY2ZnX2luaXQoc3RydWN0IHp4ZGhfY29yZV9kZXYgKnp4ZGhfZGV2KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHp4ZGhfcGZfZGV2ICpwZl9kZXYgPSB6eGRoX2Rldi1cdTAwM2Vwcml2O1xuJiM0MztcdHN0cnVjdCBwY2lfZGV2ICpwZGV2ID0genhkaF9kZXYtXHUwMDNlcGRldjtcbiYjNDM7XHRpbnQgZGV2aWNlO1xuJiM0MztcbiYjNDM7XHQvKiBEZXZpY2UgY2FwYWJpbGl0eSBpcyBvbmx5IG1hbmRhdG9yeSBmb3JcbiYjNDM7XHQgKiBkZXZpY2VzIHRoYXQgaGF2ZSBkZXZpY2Utc3BlY2lmaWMgY29uZmlndXJhdGlvbi5cbiYjNDM7XHQgKi9cbiYjNDM7XHRkZXZpY2UgPSB6eGRoX3BmX3BjaV9maW5kX2NhcGFiaWxpdHkocGRldiwgWlhESF9QQ0lfQ0FQX0RFVklDRV9DRkcsXG4mIzQzO1x0XHRcdFx0XHQgICAgIElPUkVTT1VSQ0VfTUVNLFxuJiM0MztcdFx0XHRcdFx0ICAgICBcdTAwMjZwZl9kZXYtXHUwMDNlbW9kZXJuX2JhcnMpO1xuJiM0MztcbiYjNDM7XHQvKiB3ZSBkb24mIzM5O3Qga25vdyBob3cgbXVjaCB3ZSBzaG91bGQgbWFwLFxuJiM0MztcdCAqIGJ1dCBQQUdFX1NJWkUgaXMgbW9yZSB0aGFuIGVub3VnaCBmb3IgYWxsIGV4aXN0aW5nIGRldmljZXMuXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKGRldmljZSkge1xuJiM0MztcdFx0cGZfZGV2LVx1MDAzZWRldmljZSA9IHp4ZGhfcGZfbWFwX2NhcGFiaWxpdHkoenhkaF9kZXYsIGRldmljZSwgMCxcbiYjNDM7XHRcdFx0XHRcdFx0XHRaWERIX1BGX0FMSUdONCwgMCwgUEFHRV9TSVpFLFxuJiM0MztcdFx0XHRcdFx0XHQgICAgICAgXHUwMDI2cGZfZGV2LVx1MDAzZWRldmljZV9sZW4sIE5VTEwsXG4mIzQzO1x0XHRcdFx0XHRcdCAgICAgICBcdTAwMjZwZl9kZXYtXHUwMDNlZGV2X2NmZ19iYXJfb2ZmKTtcbiYjNDM7XHRcdGlmICghcGZfZGV2LVx1MDAzZWRldmljZSkge1xuJiM0MztcdFx0XHRkZXZfZXJyKHp4ZGhfZGV2LVx1MDAzZWRldmljZSwgXCYjMzQ7cGZfZGV2LVx1MDAzZWRldmljZSBpcyBudWxsXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1x0XHR9XG4mIzQzO1x0fVxuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0Mzt2b2lkIHp4ZGhfcGZfbW9kZXJuX2NmZ191bmluaXQoc3RydWN0IHp4ZGhfY29yZV9kZXYgKnp4ZGhfZGV2KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHp4ZGhfcGZfZGV2ICpwZl9kZXYgPSB6eGRoX2Rldi1cdTAwM2Vwcml2O1xuJiM0MztcdHN0cnVjdCBwY2lfZGV2ICpwZGV2ID0genhkaF9kZXYtXHUwMDNlcGRldjtcbiYjNDM7XG4mIzQzO1x0aWYgKHBmX2Rldi1cdTAwM2VkZXZpY2UpXG4mIzQzO1x0XHRwY2lfaW91bm1hcChwZGV2LCBwZl9kZXYtXHUwMDNlZGV2aWNlKTtcbiYjNDM7XHRpZiAocGZfZGV2LVx1MDAzZW5vdGlmeV9iYXNlKVxuJiM0MztcdFx0cGNpX2lvdW5tYXAocGRldiwgcGZfZGV2LVx1MDAzZW5vdGlmeV9iYXNlKTtcbiYjNDM7XHRwY2lfaW91bm1hcChwZGV2LCBwZl9kZXYtXHUwMDNlY29tbW9uKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7aW50IHp4ZGhfcGZfbW9kZXJuX2NmZ19pbml0KHN0cnVjdCB6eGRoX2NvcmVfZGV2ICp6eGRoX2RldilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB6eGRoX3BmX2RldiAqcGZfZGV2ID0genhkaF9kZXYtXHUwMDNlcHJpdjtcbiYjNDM7XHRzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IHp4ZGhfZGV2LVx1MDAzZXBkZXY7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0cmV0ID0genhkaF9wZl9jb21tb25fY2ZnX2luaXQoenhkaF9kZXYpO1xuJiM0MztcdGlmIChyZXQpIHtcbiYjNDM7XHRcdGRldl9lcnIoenhkaF9kZXYtXHUwMDNlZGV2aWNlLCBcJiMzNDt6eGRoX3BmX2NvbW1vbl9jZmdfaW5pdCBmYWlsZWQ6ICVkXFxuXCYjMzQ7LCByZXQpO1xuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldCA9IHp4ZGhfcGZfbm90aWZ5X2NmZ19pbml0KHp4ZGhfZGV2KTtcbiYjNDM7XHRpZiAocmV0KSB7XG4mIzQzO1x0XHRkZXZfZXJyKHp4ZGhfZGV2LVx1MDAzZWRldmljZSwgXCYjMzQ7enhkaF9wZl9ub3RpZnlfY2ZnX2luaXQgZmFpbGVkOiAlZFxcblwmIzM0OywgcmV0KTtcbiYjNDM7XHRcdGdvdG8gZXJyX21hcF9ub3RpZnk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXQgPSB6eGRoX3BmX2RldmljZV9jZmdfaW5pdCh6eGRoX2Rldik7XG4mIzQzO1x0aWYgKHJldCkge1xuJiM0MztcdFx0ZGV2X2Vycih6eGRoX2Rldi1cdTAwM2VkZXZpY2UsIFwmIzM0O3p4ZGhfcGZfZGV2aWNlX2NmZ19pbml0IGZhaWxlZDogJWRcXG5cJiMzNDssIHJldCk7XG4mIzQzO1x0XHRnb3RvIGVycl9tYXBfZGV2aWNlO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztlcnJfbWFwX2RldmljZTpcbiYjNDM7XHRpZiAocGZfZGV2LVx1MDAzZW5vdGlmeV9iYXNlKVxuJiM0MztcdFx0cGNpX2lvdW5tYXAocGRldiwgcGZfZGV2LVx1MDAzZW5vdGlmeV9iYXNlKTtcbiYjNDM7ZXJyX21hcF9ub3RpZnk6XG4mIzQzO1x0cGNpX2lvdW5tYXAocGRldiwgcGZfZGV2LVx1MDAzZWNvbW1vbik7XG4mIzQzO1x0cmV0dXJuIHJldDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCB6eGRoX3BmX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqaWQpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgenhkaF9jb3JlX2RldiAqenhkaF9kZXY7XG4mIzQzO1x0c3RydWN0IHp4ZGhfcGZfZGV2ICpwZl9kZXY7XG4mIzQzO1x0c3RydWN0IGRldmxpbmsgKmRldmxpbms7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0ZGV2bGluayA9IGRldmxpbmtfYWxsb2MoXHUwMDI2enhkaF9wZl9kZXZsaW5rX29wcywgc2l6ZW9mKHN0cnVjdCB6eGRoX2NvcmVfZGV2KSxcbiYjNDM7XHRcdFx0XHRcdTAwMjZwZGV2LVx1MDAzZWRldik7XG4mIzQzO1x0aWYgKCFkZXZsaW5rKVxuJiM0MztcdFx0cmV0dXJuIC1FTk9NRU07XG4mIzQzO1xuJiM0MztcdHp4ZGhfZGV2ID0gZGV2bGlua19wcml2KGRldmxpbmspO1xuJiM0MztcdHp4ZGhfZGV2LVx1MDAzZWRldmljZSA9IFx1MDAyNnBkZXYtXHUwMDNlZGV2O1xuJiM0MztcdHp4ZGhfZGV2LVx1MDAzZXBkZXYgPSBwZGV2O1xuJiM0MztcdHp4ZGhfZGV2LVx1MDAzZWRldmxpbmsgPSBkZXZsaW5rO1xuJiM0MztcbiYjNDM7XHRwZl9kZXYgPSB6eGRoX2NvcmVfYWxsb2NfcHJpdih6eGRoX2Rldiwgc2l6ZW9mKCpwZl9kZXYpKTtcbiYjNDM7XHRpZiAoIXBmX2Rldikge1xuJiM0MztcdFx0ZGV2X2VycihcdTAwMjZwZGV2LVx1MDAzZWRldiwgXCYjMzQ7enhkaF9wZl9kZXYgYWxsb2MgZmFpbGVkXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdHJldCA9IC1FTk9NRU07XG4mIzQzO1x0XHRnb3RvIGVycl9wZl9kZXY7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXQgPSB6eGRoX3BmX3BjaV9pbml0KHp4ZGhfZGV2KTtcbiYjNDM7XHRpZiAocmV0KSB7XG4mIzQzO1x0XHRkZXZfZXJyKFx1MDAyNnBkZXYtXHUwMDNlZGV2LCBcJiMzNDt6eGRoX3BmX3BjaV9pbml0IGZhaWxlZDogJWRcXG5cJiMzNDssIHJldCk7XG4mIzQzO1x0XHRnb3RvIGVycl9wY2lfaW5pdDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldCA9IHp4ZGhfcGZfbW9kZXJuX2NmZ19pbml0KHp4ZGhfZGV2KTtcbiYjNDM7XHRpZiAocmV0KSB7XG4mIzQzO1x0XHRkZXZfZXJyKFx1MDAyNnBkZXYtXHUwMDNlZGV2LCBcJiMzNDt6eGRoX3BmX21vZGVybl9jZmdfaW5pdCBmYWlsZWQ6ICVkXFxuXCYjMzQ7LCByZXQpO1xuJiM0MztcdFx0Z290byBlcnJfY2ZnX2luaXQ7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRkZXZsaW5rX3JlZ2lzdGVyKGRldmxpbmspO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO2Vycl9jZmdfaW5pdDpcbiYjNDM7XHR6eGRoX3BmX3BjaV9jbG9zZSh6eGRoX2Rldik7XG4mIzQzO2Vycl9wY2lfaW5pdDpcbiYjNDM7XHR6eGRoX2NvcmVfZnJlZV9wcml2KHp4ZGhfZGV2KTtcbiYjNDM7ZXJyX3BmX2RldjpcbiYjNDM7XHRkZXZsaW5rX2ZyZWUoZGV2bGluayk7XG4mIzQzO1x0cmV0dXJuIHJldDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgenhkaF9wZl9yZW1vdmUoc3RydWN0IHBjaV9kZXYgKnBkZXYpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgenhkaF9jb3JlX2RldiAqenhkaF9kZXYgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7XG4mIzQzO1x0c3RydWN0IGRldmxpbmsgKmRldmxpbmsgPSBwcml2X3RvX2RldmxpbmsoenhkaF9kZXYpO1xuJiM0MztcbiYjNDM7XHRkZXZsaW5rX3VucmVnaXN0ZXIoZGV2bGluayk7XG4mIzQzO1x0enhkaF9wZl9tb2Rlcm5fY2ZnX3VuaW5pdCh6eGRoX2Rldik7XG4mIzQzO1x0enhkaF9wZl9wY2lfY2xvc2UoenhkaF9kZXYpO1xuJiM0MztcdHp4ZGhfY29yZV9mcmVlX3ByaXYoenhkaF9kZXYpO1xuJiM0MztcdGRldmxpbmtfZnJlZShkZXZsaW5rKTtcbiYjNDM7XHRwY2lfc2V0X2RydmRhdGEocGRldiwgTlVMTCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIHp4ZGhfcGZfc2h1dGRvd24oc3RydWN0IHBjaV9kZXYgKnBkZXYpXG4mIzQzO3tcbiYjNDM7XHRpZiAoc3lzdGVtX3N0YXRlID09IFNZU1RFTV9QT1dFUl9PRkYpXG4mIzQzO1x0XHRwY2lfc2V0X3Bvd2VyX3N0YXRlKHBkZXYsIFBDSV9EM2hvdCk7XG4mIzQzO1x0cGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgenhkaF9wZl9kcml2ZXIgPSB7XG4mIzQzO1x0Lm5hbWUgPSBcJiMzNDtkaW5naGFpMTBlXCYjMzQ7LFxuJiM0MztcdC5pZF90YWJsZSA9IHp4ZGhfcGZfcGNpX3RhYmxlLFxuJiM0MztcdC5wcm9iZSA9IHp4ZGhfcGZfcHJvYmUsXG4mIzQzO1x0LnJlbW92ZSA9IHp4ZGhfcGZfcmVtb3ZlLFxuJiM0MztcdC5zaHV0ZG93biA9IHp4ZGhfcGZfc2h1dGRvd24sXG4mIzQzO307XG4mIzQzO1xuJiM0Mzttb2R1bGVfcGNpX2RyaXZlcih6eGRoX3BmX2RyaXZlcik7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmhcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwLi43MzczZGVlOGQxYTlmXG4tLS0gL2Rldi9udWxsXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5oXG5AQCAtMCwwICYjNDM7MSw3NSBAQFxuJiM0MzsvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5ICovXG4mIzQzOy8qXG4mIzQzOyAqIFpURSBEaW5nSGFpIEV0aGVybmV0IGRyaXZlciAtIFBGIGhlYWRlclxuJiM0MzsgKiBDb3B5cmlnaHQgKGMpIDIwMjItMjAyNiwgWlRFIENvcnBvcmF0aW9uLlxuJiM0MzsgKi9cbiYjNDM7XG4mIzQzOyNpZm5kZWYgX19aWERIX0VOX1BGX0hfX1xuJiM0MzsjZGVmaW5lIF9fWlhESF9FTl9QRl9IX19cbiYjNDM7XG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3R5cGVzLmhcdTAwM2VcbiYjNDM7XG4mIzQzOyNkZWZpbmUgWlhESF9QRl9WRU5ET1JfSURcdDB4MWNmMlxuJiM0MzsjZGVmaW5lIFpYREhfUEZfREVWSUNFX0lEXHQweDgwNDBcbiYjNDM7I2RlZmluZSBaWERIX1ZGX0RFVklDRV9JRFx0MHg4MDQxXG4mIzQzO1xuJiM0MzsvKiBDb21tb24gY29uZmlndXJhdGlvbiAqL1xuJiM0MzsjZGVmaW5lIFpYREhfUENJX0NBUF9DT01NT05fQ0ZHXHQxXG4mIzQzOy8qIE5vdGlmaWNhdGlvbnMgKi9cbiYjNDM7I2RlZmluZSBaWERIX1BDSV9DQVBfTk9USUZZX0NGR1x0MlxuJiM0MzsvKiBJU1IgYWNjZXNzICovXG4mIzQzOyNkZWZpbmUgWlhESF9QQ0lfQ0FQX0lTUl9DRkdcdFx0M1xuJiM0MzsvKiBEZXZpY2Ugc3BlY2lmaWMgY29uZmlndXJhdGlvbiAqL1xuJiM0MzsjZGVmaW5lIFpYREhfUENJX0NBUF9ERVZJQ0VfQ0ZHXHQ0XG4mIzQzOy8qIFBDSSBjb25maWd1cmF0aW9uIGFjY2VzcyAqL1xuJiM0MzsjZGVmaW5lIFpYREhfUENJX0NBUF9QQ0lfQ0ZHXHRcdDVcbiYjNDM7XG4mIzQzOyNkZWZpbmUgWlhESF9QRl9NQVhfQkFSX1ZBTFx0XHQweDVcbiYjNDM7I2RlZmluZSBaWERIX1BGX0FMSUdONFx0XHRcdDRcbiYjNDM7I2RlZmluZSBaWERIX1BGX0FMSUdOMlx0XHRcdDJcbiYjNDM7I2RlZmluZSBaWERIX1BGX01BUF9NSU5MRU4yXHRcdDJcbiYjNDM7XG4mIzQzO3N0cnVjdCB6eGRoX2NvcmVfZGV2IHtcbiYjNDM7XHRzdHJ1Y3QgZGV2aWNlICpkZXZpY2U7XG4mIzQzO1x0c3RydWN0IHBjaV9kZXYgKnBkZXY7XG4mIzQzO1x0c3RydWN0IGRldmxpbmsgKmRldmxpbms7XG4mIzQzO1x0dm9pZCAqcHJpdjtcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO3N0cnVjdCB6eGRoX3BmX2RldiB7XG4mIzQzO1x0c3RydWN0IHp4ZGhfcGZfcGNpX2NvbW1vbl9jZmcgX19pb21lbSAqY29tbW9uO1xuJiM0MztcdC8qIERldmljZS1zcGVjaWZpYyBkYXRhIChub24tbGVnYWN5IG1vZGUpICAqL1xuJiM0MztcdC8qIEJhc2Ugb2YgdnEgbm90aWZpY2F0aW9ucyAobm9uLWxlZ2FjeSBtb2RlKS4gKi9cbiYjNDM7XHR2b2lkIF9faW9tZW0gKmRldmljZTtcbiYjNDM7XHR2b2lkIF9faW9tZW0gKm5vdGlmeV9iYXNlO1xuJiM0MztcdC8qIFBoeXNpY2FsIGJhc2Ugb2YgdnEgbm90aWZpY2F0aW9ucyAqL1xuJiM0MztcdHJlc291cmNlX3NpemVfdCBub3RpZnlfcGE7XG4mIzQzO1x0LyogU28gd2UgY2FuIHNhbml0eS1jaGVjayBhY2Nlc3Nlcy4gKi9cbiYjNDM7XHRzaXplX3Qgbm90aWZ5X2xlbjtcbiYjNDM7XHRzaXplX3QgZGV2aWNlX2xlbjtcbiYjNDM7XHQvKiBDYXBhYmlsaXR5IGZvciB3aGVuIHdlIG5lZWQgdG8gbWFwIG5vdGlmaWNhdGlvbnMgcGVyLXZxLiAqL1xuJiM0MztcdHMzMiBub3RpZnlfbWFwX2NhcDtcbiYjNDM7XHR1MzIgbm90aWZ5X29mZnNldF9tdWx0aXBsaWVyO1xuJiM0MztcdC8qIE11bHRpcGx5IHF1ZXVlX25vdGlmeV9vZmYgYnkgdGhpcyB2YWx1ZS4gKG5vbi1sZWdhY3kgbW9kZSkuICovXG4mIzQzO1x0czMyIG1vZGVybl9iYXJzO1xuJiM0MztcdHZvaWQgX19pb21lbSAqcGNpX2lvcmVtYXBfYWRkcls2XTtcbiYjNDM7XHR1MzIgZGV2X2NmZ19iYXJfb2ZmO1xuJiM0Mzt9O1xuJiM0MztcbiYjNDM7dm9pZCAqenhkaF9jb3JlX2FsbG9jX3ByaXYoc3RydWN0IHp4ZGhfY29yZV9kZXYgKnp4ZGhfZGV2LCBzaXplX3Qgc2l6ZSk7XG4mIzQzO3ZvaWQgenhkaF9jb3JlX2ZyZWVfcHJpdihzdHJ1Y3QgenhkaF9jb3JlX2RldiAqenhkaF9kZXYpO1xuJiM0Mzt2b2lkIHp4ZGhfcGZfcGNpX2Nsb3NlKHN0cnVjdCB6eGRoX2NvcmVfZGV2ICp6eGRoX2Rldik7XG4mIzQzO2ludCB6eGRoX3BmX3BjaV9maW5kX2NhcGFiaWxpdHkoc3RydWN0IHBjaV9kZXYgKnBkZXYsIHU4IGNmZ190eXBlLFxuJiM0MztcdFx0XHRcdHUzMiBpb3Jlc291cmNlX3R5cGVzLCBpbnQgKmJhcnMpO1xuJiM0Mzt2b2lkIF9faW9tZW0gKnp4ZGhfcGZfbWFwX2NhcGFiaWxpdHkoc3RydWN0IHp4ZGhfY29yZV9kZXYgKnp4ZGhfZGV2LCBpbnQgb2ZmLFxuJiM0MztcdFx0XHRcdCAgICAgc2l6ZV90IG1pbmxlbiwgdTMyIGFsaWduLFxuJiM0MztcdFx0XHRcdCAgICAgdTMyIHN0YXJ0LCB1MzIgc2l6ZSxcbiYjNDM7XHRcdFx0XHQgICAgIHNpemVfdCAqbGVuLCByZXNvdXJjZV9zaXplX3QgKnBhLFxuJiM0MztcdFx0XHRcdCAgICAgdTMyICpiYXJfb2ZmKTtcbiYjNDM7aW50IHp4ZGhfcGZfY29tbW9uX2NmZ19pbml0KHN0cnVjdCB6eGRoX2NvcmVfZGV2ICp6eGRoX2Rldik7XG4mIzQzO2ludCB6eGRoX3BmX25vdGlmeV9jZmdfaW5pdChzdHJ1Y3QgenhkaF9jb3JlX2RldiAqenhkaF9kZXYpO1xuJiM0MztpbnQgenhkaF9wZl9kZXZpY2VfY2ZnX2luaXQoc3RydWN0IHp4ZGhfY29yZV9kZXYgKnp4ZGhfZGV2KTtcbiYjNDM7dm9pZCB6eGRoX3BmX21vZGVybl9jZmdfdW5pbml0KHN0cnVjdCB6eGRoX2NvcmVfZGV2ICp6eGRoX2Rldik7XG4mIzQzO2ludCB6eGRoX3BmX21vZGVybl9jZmdfaW5pdChzdHJ1Y3QgenhkaF9jb3JlX2RldiAqenhkaF9kZXYpO1xuJiM0MztcbiYjNDM7I2VuZGlmIC8qIF9fWlhESF9FTl9QRl9IX18gKi9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAxNzo0MTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyB2ZW5kb3Itc3BlY2lmaWMgUENJZSBFdGhlcm5ldCBkcml2ZXIgKFpURSBEaW5nSGFpKS4gVGhpcyBkcml2ZXIgcmVxdWlyZXMgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSB0aGF0IGlzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLCBtYWtpbmcgaXQgdW5yZWFjaGFibGUgYW5kIHVudGVzdGFibGUgaW4gdmlydHVhbGl6ZWQgZnV6emluZyBlbnZpcm9ubWVudHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNTljYzE0Mjc0NzUzNmQxZmEyYWMxYzUzZmE0YmMzMTQ0NTc5MWViMgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTdW4gQXVnIDIgMTc6NDE6MzEgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9NQUlOVEFJTkVSUyBiL01BSU5UQUlORVJTCmluZGV4IDJmYjFjNzVhZmQxNjMuLjczNjkyYjA5YmY3YmEgMTAwNjQ0Ci0tLSBhL01BSU5UQUlORVJTCiYjNDM7JiM0MzsmIzQzOyBiL01BSU5UQUlORVJTCkBAIC0yOTQ0MCw2ICYjNDM7Mjk0NDAsMTIgQEAgUzoJTWFpbnRhaW5lZAogVDoJZ2l0IGdpdDovL2dpdC5rZXJuZWwub3JnL3B1Yi9zY20vbGludXgva2VybmVsL2dpdC90aXdhaS9zb3VuZC5naXQKIEY6CXNvdW5kL2hkYS9jb2RlY3Mvc2VuYXJ5dGVjaC5jCiAKJiM0MztaVEUgRElOR0hBSSBFVEhFUk5FVCBEUklWRVIKJiM0MztNOglKdW55YW5nIEhhbiAmbHQ7aGFuLmp1bnlhbmdAenRlLmNvbS5jbiZndDsKJiM0MztMOgluZXRkZXZAdmdlci5rZXJuZWwub3JnCiYjNDM7UzoJTWFpbnRhaW5lZAomIzQzO0Y6CWRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS8KJiM0MzsKIFRIRSBSRVNUCiBNOglMaW51cyBUb3J2YWxkcyAmbHQ7dG9ydmFsZHNAbGludXgtZm91bmRhdGlvbi5vcmcmZ3Q7CiBMOglsaW51eC1rZXJuZWxAdmdlci5rZXJuZWwub3JnCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9LY29uZmlnIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvS2NvbmZpZwppbmRleCBiOGY3MGUyYTE3NjNhLi5jMmI2OTk2YjBjZmUxIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9LY29uZmlnCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L0tjb25maWcKQEAgLTE4OCw1ICYjNDM7MTg4LDYgQEAgc291cmNlICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9LY29uZmlnJiMzNDsKIHNvdXJjZSAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L3dpem5ldC9LY29uZmlnJiMzNDsKIHNvdXJjZSAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L3hpbGlueC9LY29uZmlnJiMzNDsKIHNvdXJjZSAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L3hpcmNvbS9LY29uZmlnJiMzNDsKJiM0Mztzb3VyY2UgJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvS2NvbmZpZyYjMzQ7CiAKIGVuZGlmICMgRVRIRVJORVQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L01ha2VmaWxlIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvTWFrZWZpbGUKaW5kZXggNTczNDRmZWM2Y2UwNC4uYTM0YmNiZDRkZjRlOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvTWFrZWZpbGUKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvTWFrZWZpbGUKQEAgLTEwNCwzICYjNDM7MTA0LDQgQEAgb2JqLSQoQ09ORklHX05FVF9WRU5ET1JfWElSQ09NKSAmIzQzOz0geGlyY29tLwogb2JqLSQoQ09ORklHX05FVF9WRU5ET1JfU1lOT1BTWVMpICYjNDM7PSBzeW5vcHN5cy8KIG9iai0kKENPTkZJR19ORVRfVkVORE9SX1BFTlNBTkRPKSAmIzQzOz0gcGVuc2FuZG8vCiBvYmotJChDT05GSUdfT0FfVEM2KSAmIzQzOz0gb2FfdGM2Lm8KJiM0MztvYmotJChDT05GSUdfTkVUX1ZFTkRPUl9aVEUpICYjNDM7PSB6dGUvCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvS2NvbmZpZyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9LY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAuLmI5NWMyZmM3ZGI3N2EKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvS2NvbmZpZwpAQCAtMCwwICYjNDM7MSwyMCBAQAomIzQzOyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seQomIzQzOyMKJiM0MzsjIFpURSBkcml2ZXIgY29uZmlndXJhdGlvbgomIzQzOyMKJiM0MzsKJiM0Mztjb25maWcgTkVUX1ZFTkRPUl9aVEUKJiM0MzsgICAgYm9vbCAmIzM0O1pURSBkZXZpY2VzJiMzNDsKJiM0MzsgICAgZGVmYXVsdCB5CiYjNDM7ICAgIGhlbHAKJiM0MzsgICAgICBJZiB5b3UgaGF2ZSBhIG5ldHdvcmsgKEV0aGVybmV0KSBjYXJkIGJlbG9uZ2luZyB0byB0aGlzIGNsYXNzLCBzYXkgWS4KJiM0MzsgICAgICBOb3RlIHRoYXQgdGhlIGFuc3dlciB0byB0aGlzIHF1ZXN0aW9uIGRvZXNuJiMzOTt0IGRpcmVjdGx5IGFmZmVjdCB0aGUKJiM0MzsgICAgICBrZXJuZWw6IHNheWluZyBOIHdpbGwganVzdCBjYXVzZSB0aGUgY29uZmlndXJhdG9yIHRvIHNraXAgYWxsCiYjNDM7ICAgICAgdGhlIHF1ZXN0aW9ucyBhYm91dCBadGUgY2FyZHMuIElmIHlvdSBzYXkgWSwgeW91IHdpbGwgYmUgYXNrZWQKJiM0MzsgICAgICBmb3IgeW91ciBzcGVjaWZpYyBjYXJkIGluIHRoZSBmb2xsb3dpbmcgcXVlc3Rpb25zLgomIzQzOwomIzQzO2lmIE5FVF9WRU5ET1JfWlRFCiYjNDM7CiYjNDM7c291cmNlICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvS2NvbmZpZyYjMzQ7CiYjNDM7CiYjNDM7ZW5kaWYgIyBORVRfVkVORE9SX1pURQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL01ha2VmaWxlIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAuLmNkOTkyOWI2MTU1OWMKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvTWFrZWZpbGUKQEAgLTAsMCAmIzQzOzEsNiBAQAomIzQzOyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seQomIzQzOyMKJiM0MzsjIE1ha2VmaWxlIGZvciB0aGUgWlRFIGRldmljZSBkcml2ZXJzCiYjNDM7IwomIzQzOwomIzQzO29iai0kKENPTkZJR19ESU5HSEFJKSAmIzQzOz0gZGluZ2hhaS8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL0tjb25maWcgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9LY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAuLjEyMWJlM2JmNzcwN2YKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9LY29uZmlnCkBAIC0wLDAgJiM0MzsxLDM0IEBACiYjNDM7IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5CiYjNDM7IwomIzQzOyMgWlRFIERpbmdIYWkgRXRoZXJuZXQgZHJpdmVyIGNvbmZpZ3VyYXRpb24KJiM0MzsjCiYjNDM7CiYjNDM7Y29uZmlnIERJTkdIQUkKJiM0MzsgICAgYm9vbCAmIzM0O1pURSBEaW5nSGFpIEV0aGVybmV0IGRyaXZlciYjMzQ7CiYjNDM7ICAgIGRlcGVuZHMgb24gUENJCiYjNDM7ICAgIHNlbGVjdCBORVRfREVWTElOSwomIzQzOyAgICBoZWxwCiYjNDM7ICAgICAgVGhpcyBkcml2ZXIgc3VwcG9ydHMgWlRFIERpbmdIYWkgRXRoZXJuZXQgZGV2aWNlcy4KJiM0MzsKJiM0MzsgICAgICBEaW5nSGFpIGlzIGEgaGlnaC1wZXJmb3JtYW5jZSBFdGhlcm5ldCBjb250cm9sbGVyIHRoYXQgc3VwcG9ydHMKJiM0MzsgICAgICBtdWx0aXBsZSBmZWF0dXJlcyBpbmNsdWRpbmcgaGFyZHdhcmUgb2ZmbG9hZGluZywgU1ItSU9WLCBhbmQKJiM0MzsgICAgICBhZHZhbmNlZCB2aXJ0dWFsaXphdGlvbiBjYXBhYmlsaXRpZXMuCiYjNDM7CiYjNDM7ICAgICAgSWYgeW91IHNheSBZIGhlcmUsIHlvdSBjYW4gc2VsZWN0IHNwZWNpZmljIGRyaXZlciB2YXJpYW50cyBiZWxvdy4KJiM0MzsKJiM0MzsgICAgICBJZiB1bnN1cmUsIHNheSBOLgomIzQzOwomIzQzO2lmIERJTkdIQUkKJiM0MzsKJiM0Mztjb25maWcgRElOR0hBSV9QRgomIzQzOyAgICB0cmlzdGF0ZSAmIzM0O1pURSBEaW5nSGFpIFBGIChQaHlzaWNhbCBGdW5jdGlvbikgZHJpdmVyJiMzNDsKJiM0MzsgICAgaGVscAomIzQzOyAgICAgIFRoaXMgZHJpdmVyIHN1cHBvcnRzIFpURSBEaW5nSGFpIFBDSSBFeHByZXNzIEV0aGVybmV0CiYjNDM7ICAgICAgYWRhcHRlcnMgKFBGKS4KJiM0MzsKJiM0MzsgICAgICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlLiBUaGUgbW9kdWxlCiYjNDM7ICAgICAgd2lsbCBiZSBuYW1lZCBkaW5naGFpMTBlLgomIzQzOwomIzQzOyAgICAgIElmIHVuc3VyZSwgc2F5IE4uCiYjNDM7CiYjNDM7ZW5kaWYgIyBESU5HSEFJCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9NYWtlZmlsZSBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAuLmUyZjRkYTMzZGY1OTMKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9NYWtlZmlsZQpAQCAtMCwwICYjNDM7MSw3IEBACiYjNDM7IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5CiYjNDM7IwomIzQzOyMgTWFrZWZpbGUgZm9yIFpURSBEaW5nSGFpIEV0aGVybmV0IGRyaXZlcgomIzQzOyMKJiM0MzsKJiM0MztvYmotJChDT05GSUdfRElOR0hBSV9QRikgJiM0Mzs9IGRpbmdoYWkxMGUubwomIzQzO2RpbmdoYWkxMGUteSA6PSBlbl9wZi5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9kaF9xdWV1ZS5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZGhfcXVldWUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwLi41YjYzODk1YzFlYTFlCi0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZGhfcXVldWUuaApAQCAtMCwwICYjNDM7MSw1NiBAQAomIzQzOy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHkgKi8KJiM0MzsvKgomIzQzOyAqIFpURSBEaW5nSGFpIEV0aGVybmV0IGRyaXZlciAtIFBDSSBjYXBhYmlsaXR5IGRlZmluaXRpb25zCiYjNDM7ICogQ29weXJpZ2h0IChjKSAyMDIyLTIwMjYsIFpURSBDb3Jwb3JhdGlvbi4KJiM0MzsgKi8KJiM0MzsKJiM0MzsjaWZuZGVmIF9fREhfUVVFVUVfSF9fCiYjNDM7I2RlZmluZSBfX0RIX1FVRVVFX0hfXwomIzQzOwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC90eXBlcy5oJmd0OwomIzQzOwomIzQzOy8qIFRoaXMgaXMgdGhlIFBDSSBjYXBhYmlsaXR5IGhlYWRlcjogKi8KJiM0MztzdHJ1Y3QgenhkaF9wZl9wY2lfY2FwIHsKJiM0MzsJX191OCBjYXBfdm5kcjsJCS8qIEdlbmVyaWMgUENJIGZpZWxkOiBQQ0lfQ0FQX0lEX1ZORFIgKi8KJiM0MzsJX191OCBjYXBfbmV4dDsJCS8qIEdlbmVyaWMgUENJIGZpZWxkOiBuZXh0IHB0ci4gKi8KJiM0MzsJX191OCBjYXBfbGVuOwkJLyogR2VuZXJpYyBQQ0kgZmllbGQ6IGNhcGFiaWxpdHkgbGVuZ3RoICovCiYjNDM7CV9fdTggY2ZnX3R5cGU7CQkvKiBJZGVudGlmaWVzIHRoZSBzdHJ1Y3R1cmUuICovCiYjNDM7CV9fdTggYmFyOwkJLyogV2hlcmUgdG8gZmluZCBpdC4gKi8KJiM0MzsJX191OCBpZDsJCS8qIE11bHRpcGxlIGNhcGFiaWxpdGllcyBvZiB0aGUgc2FtZSB0eXBlICovCiYjNDM7CV9fdTggcGFkZGluZ1syXTsJCS8qIFBhZCB0byBmdWxsIGR3b3JkLiAqLwomIzQzOwlfX2xlMzIgb2Zmc2V0OwkJLyogT2Zmc2V0IHdpdGhpbiBiYXIuICovCiYjNDM7CV9fbGUzMiBsZW5ndGg7CQkvKiBMZW5ndGggb2YgdGhlIHN0cnVjdHVyZSwgaW4gYnl0ZXMuICovCiYjNDM7fTsKJiM0MzsKJiM0MzsvKiBGaWVsZHMgaW4gWlhESF9QRl9QQ0lfQ0FQX0NPTU1PTl9DRkc6ICovCiYjNDM7c3RydWN0IHp4ZGhfcGZfcGNpX2NvbW1vbl9jZmcgewomIzQzOwkvKiBBYm91dCB0aGUgd2hvbGUgZGV2aWNlLiAqLwomIzQzOwlfX2xlMzIgZGV2aWNlX2ZlYXR1cmVfc2VsZWN0OyAvKiByZWFkLXdyaXRlICovCiYjNDM7CV9fbGUzMiBkZXZpY2VfZmVhdHVyZTsJLyogcmVhZC1vbmx5ICovCiYjNDM7CV9fbGUzMiBndWVzdF9mZWF0dXJlX3NlbGVjdDsgLyogcmVhZC13cml0ZSAqLwomIzQzOwlfX2xlMzIgZ3Vlc3RfZmVhdHVyZTsJCS8qIHJlYWQtd3JpdGUgKi8KJiM0MzsJX19sZTE2IG1zaXhfY29uZmlnOwkJLyogcmVhZC13cml0ZSAqLwomIzQzOwlfX2xlMTYgbnVtX3F1ZXVlczsJCS8qIHJlYWQtb25seSAqLwomIzQzOwlfX3U4IGRldmljZV9zdGF0dXM7CQkvKiByZWFkLXdyaXRlICovCiYjNDM7CV9fdTggY29uZmlnX2dlbmVyYXRpb247CS8qIHJlYWQtb25seSAqLwomIzQzOwomIzQzOwkvKiBBYm91dCBhIHNwZWNpZmljIHZpcnRxdWV1ZS4gKi8KJiM0MzsJX19sZTE2IHF1ZXVlX3NlbGVjdDsJCS8qIHJlYWQtd3JpdGUgKi8KJiM0MzsJX19sZTE2IHF1ZXVlX3NpemU7CQkvKiByZWFkLXdyaXRlLCBwb3dlciBvZiAyLiAqLwomIzQzOwlfX2xlMTYgcXVldWVfbXNpeF92ZWN0b3I7CS8qIHJlYWQtd3JpdGUgKi8KJiM0MzsJX19sZTE2IHF1ZXVlX2VuYWJsZTsJCS8qIHJlYWQtd3JpdGUgKi8KJiM0MzsJX19sZTE2IHF1ZXVlX25vdGlmeV9vZmY7CS8qIHJlYWQtb25seSAqLwomIzQzOwlfX2xlMzIgcXVldWVfZGVzY19sbzsJCS8qIHJlYWQtd3JpdGUgKi8KJiM0MzsJX19sZTMyIHF1ZXVlX2Rlc2NfaGk7CQkvKiByZWFkLXdyaXRlICovCiYjNDM7CV9fbGUzMiBxdWV1ZV9hdmFpbF9sbzsJCS8qIHJlYWQtd3JpdGUgKi8KJiM0MzsJX19sZTMyIHF1ZXVlX2F2YWlsX2hpOwkJLyogcmVhZC13cml0ZSAqLwomIzQzOwlfX2xlMzIgcXVldWVfdXNlZF9sbzsJCS8qIHJlYWQtd3JpdGUgKi8KJiM0MzsJX19sZTMyIHF1ZXVlX3VzZWRfaGk7CQkvKiByZWFkLXdyaXRlICovCiYjNDM7fTsKJiM0MzsKJiM0MztzdHJ1Y3QgenhkaF9wZl9wY2lfbm90aWZ5X2NhcCB7CiYjNDM7CXN0cnVjdCB6eGRoX3BmX3BjaV9jYXAgY2FwOwomIzQzOwlfX2xlMzIgbm90aWZ5X29mZl9tdWx0aXBsaWVyOyAvKiBNdWx0aXBsaWVyIGZvciBxdWV1ZV9ub3RpZnlfb2ZmLiAqLwomIzQzO307CiYjNDM7CiYjNDM7I2VuZGlmIC8qIF9fREhfUVVFVUVfSF9fICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwLi44NmQ0Mzc0MDg4MjAzCi0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYwpAQCAtMCwwICYjNDM7MSw0NDkgQEAKJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5CiYjNDM7LyoKJiM0MzsgKiBaVEUgRGluZ0hhaSBFdGhlcm5ldCBkcml2ZXIKJiM0MzsgKiBDb3B5cmlnaHQgKGMpIDIwMjItMjAyNiwgWlRFIENvcnBvcmF0aW9uLgomIzQzOyAqLwomIzQzOwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9tb2R1bGUuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvcGNpLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O25ldC9kZXZsaW5rLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2RtYS1tYXBwaW5nLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJiMzNDtlbl9wZi5oJiMzNDsKJiM0MzsjaW5jbHVkZSAmIzM0O2RoX3F1ZXVlLmgmIzM0OwomIzQzOwomIzQzO01PRFVMRV9BVVRIT1IoJiMzNDtKdW55YW5nIEhhbiAmbHQ7aGFuLmp1bnlhbmdAenRlLmNvbS5jbiZndDsmIzM0Oyk7CiYjNDM7TU9EVUxFX0RFU0NSSVBUSU9OKCYjMzQ7WlRFIERpbmdIYWkgc2VyaWVzIEV0aGVybmV0IGRyaXZlciYjMzQ7KTsKJiM0MztNT0RVTEVfTElDRU5TRSgmIzM0O0dQTCYjMzQ7KTsKJiM0MzsKJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IGRldmxpbmtfb3BzIHp4ZGhfcGZfZGV2bGlua19vcHMgPSB7fTsKJiM0MzsKJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgenhkaF9wZl9wY2lfdGFibGVbXSA9IHsKJiM0MzsJeyBQQ0lfREVWSUNFKFpYREhfUEZfVkVORE9SX0lELCBaWERIX1BGX0RFVklDRV9JRCkgfSwKJiM0MzsJeyBQQ0lfREVWSUNFKFpYREhfUEZfVkVORE9SX0lELCBaWERIX1ZGX0RFVklDRV9JRCkgfSwKJiM0MzsJeyB9CiYjNDM7fTsKJiM0MzsKJiM0MztNT0RVTEVfREVWSUNFX1RBQkxFKHBjaSwgenhkaF9wZl9wY2lfdGFibGUpOwomIzQzOwomIzQzO3ZvaWQgKnp4ZGhfY29yZV9hbGxvY19wcml2KHN0cnVjdCB6eGRoX2NvcmVfZGV2ICp6eGRoX2Rldiwgc2l6ZV90IHNpemUpCiYjNDM7ewomIzQzOwl2b2lkICpwcml2ID0ga3phbGxvYyhzaXplLCBHRlBfS0VSTkVMKTsKJiM0MzsKJiM0MzsJaWYgKHByaXYpCiYjNDM7CQl6eGRoX2Rldi0mZ3Q7cHJpdiA9IHByaXY7CiYjNDM7CXJldHVybiBwcml2OwomIzQzO30KJiM0MzsKJiM0Mzt2b2lkIHp4ZGhfY29yZV9mcmVlX3ByaXYoc3RydWN0IHp4ZGhfY29yZV9kZXYgKnp4ZGhfZGV2KQomIzQzO3sKJiM0MzsJa2ZyZWUoenhkaF9kZXYtJmd0O3ByaXYpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IHp4ZGhfcGZfcGNpX2luaXQoc3RydWN0IHp4ZGhfY29yZV9kZXYgKnp4ZGhfZGV2KQomIzQzO3sKJiM0MzsJc3RydWN0IHp4ZGhfcGZfZGV2ICpwZl9kZXYgPSB6eGRoX2Rldi0mZ3Q7cHJpdjsKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJcGNpX3NldF9kcnZkYXRhKHp4ZGhfZGV2LSZndDtwZGV2LCB6eGRoX2Rldik7CiYjNDM7CiYjNDM7CXJldCA9IHBjaV9lbmFibGVfZGV2aWNlKHp4ZGhfZGV2LSZndDtwZGV2KTsKJiM0MzsJaWYgKHJldCkgewomIzQzOwkJZGV2X2Vycih6eGRoX2Rldi0mZ3Q7ZGV2aWNlLCAmIzM0O3BjaV9lbmFibGVfZGV2aWNlIGZhaWxlZDogJWRcbiYjMzQ7LCByZXQpOwomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsJfQomIzQzOwomIzQzOwlkbWFfc2V0X21hc2tfYW5kX2NvaGVyZW50KHp4ZGhfZGV2LSZndDtkZXZpY2UsIERNQV9CSVRfTUFTSyg2NCkpOwomIzQzOwomIzQzOwlyZXQgPSBwY2lfcmVxdWVzdF9zZWxlY3RlZF9yZWdpb25zKHp4ZGhfZGV2LSZndDtwZGV2LAomIzQzOwkJCQkJICAgcGNpX3NlbGVjdF9iYXJzKHp4ZGhfZGV2LSZndDtwZGV2LCBJT1JFU09VUkNFX01FTSksCiYjNDM7CQkJCQkgICAmIzM0O2RoLXBmJiMzNDspOwomIzQzOwlpZiAocmV0KSB7CiYjNDM7CQlkZXZfZXJyKHp4ZGhfZGV2LSZndDtkZXZpY2UsICYjMzQ7cGNpX3JlcXVlc3Rfc2VsZWN0ZWRfcmVnaW9ucyBmYWlsZWQ6ICVkXG4mIzM0OywgcmV0KTsKJiM0MzsJCWdvdG8gZXJyX3BjaTsKJiM0MzsJfQomIzQzOwomIzQzOwlwY2lfc2V0X21hc3Rlcih6eGRoX2Rldi0mZ3Q7cGRldik7CiYjNDM7CXJldCA9IHBjaV9zYXZlX3N0YXRlKHp4ZGhfZGV2LSZndDtwZGV2KTsKJiM0MzsJaWYgKHJldCkgewomIzQzOwkJZGV2X2Vycih6eGRoX2Rldi0mZ3Q7ZGV2aWNlLCAmIzM0O3BjaV9zYXZlX3N0YXRlIGZhaWxlZDogJWRcbiYjMzQ7LCByZXQpOwomIzQzOwkJZ290byBlcnJfcGNpX3NhdmVfc3RhdGU7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKCEocGNpX3Jlc291cmNlX2ZsYWdzKHp4ZGhfZGV2LSZndDtwZGV2LCAwKSAmYW1wOyBJT1JFU09VUkNFX01FTSkpIHsKJiM0MzsJCXJldCA9IC1FTk9ERVY7CiYjNDM7CQlkZXZfZXJyKHp4ZGhfZGV2LSZndDtkZXZpY2UsICYjMzQ7QkFSIDAgaXMgbm90IGFuIE1NSU8gcmVzb3VyY2VcbiYjMzQ7KTsKJiM0MzsJCWdvdG8gZXJyX3BjaV9zYXZlX3N0YXRlOwomIzQzOwl9CiYjNDM7CiYjNDM7CXBmX2Rldi0mZ3Q7cGNpX2lvcmVtYXBfYWRkclswXSA9CiYjNDM7CQlpb3JlbWFwKHBjaV9yZXNvdXJjZV9zdGFydCh6eGRoX2Rldi0mZ3Q7cGRldiwgMCksCiYjNDM7CQkJcGNpX3Jlc291cmNlX2xlbih6eGRoX2Rldi0mZ3Q7cGRldiwgMCkpOwomIzQzOwlpZiAoIXBmX2Rldi0mZ3Q7cGNpX2lvcmVtYXBfYWRkclswXSkgewomIzQzOwkJcmV0ID0gLUVOT01FTTsKJiM0MzsJCWRldl9lcnIoenhkaF9kZXYtJmd0O2RldmljZSwgJiMzNDtkaCBwZiBwY2kgaW9yZW1hcCBmYWlsZWRcbiYjMzQ7KTsKJiM0MzsJCWdvdG8gZXJyX3BjaV9zYXZlX3N0YXRlOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzOwomIzQzO2Vycl9wY2lfc2F2ZV9zdGF0ZToKJiM0MzsJcGNpX3JlbGVhc2Vfc2VsZWN0ZWRfcmVnaW9ucyh6eGRoX2Rldi0mZ3Q7cGRldiwKJiM0MzsJCQkJICAgICBwY2lfc2VsZWN0X2JhcnMoenhkaF9kZXYtJmd0O3BkZXYsIElPUkVTT1VSQ0VfTUVNKSk7CiYjNDM7ZXJyX3BjaToKJiM0MzsJcGNpX2Rpc2FibGVfZGV2aWNlKHp4ZGhfZGV2LSZndDtwZGV2KTsKJiM0MzsJcmV0dXJuIHJldDsKJiM0Mzt9CiYjNDM7CiYjNDM7dm9pZCB6eGRoX3BmX3BjaV9jbG9zZShzdHJ1Y3QgenhkaF9jb3JlX2RldiAqenhkaF9kZXYpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgenhkaF9wZl9kZXYgKnBmX2RldiA9IHp4ZGhfZGV2LSZndDtwcml2OwomIzQzOwomIzQzOwlpb3VubWFwKHBmX2Rldi0mZ3Q7cGNpX2lvcmVtYXBfYWRkclswXSk7CiYjNDM7CXBjaV9yZWxlYXNlX3NlbGVjdGVkX3JlZ2lvbnMoenhkaF9kZXYtJmd0O3BkZXYsCiYjNDM7CQkJCSAgICAgcGNpX3NlbGVjdF9iYXJzKHp4ZGhfZGV2LSZndDtwZGV2LCBJT1JFU09VUkNFX01FTSkpOwomIzQzOwlwY2lfZGlzYWJsZV9kZXZpY2UoenhkaF9kZXYtJmd0O3BkZXYpOwomIzQzO30KJiM0MzsKJiM0MztpbnQgenhkaF9wZl9wY2lfZmluZF9jYXBhYmlsaXR5KHN0cnVjdCBwY2lfZGV2ICpwZGV2LCB1OCBjZmdfdHlwZSwKJiM0MzsJCQkJdTMyIGlvcmVzb3VyY2VfdHlwZXMsIGludCAqYmFycykKJiM0Mzt7CiYjNDM7CWludCBwb3M7CiYjNDM7CXU4IHR5cGU7CiYjNDM7CXU4IGJhcjsKJiM0MzsKJiM0MzsJZm9yIChwb3MgPSBwY2lfZmluZF9jYXBhYmlsaXR5KHBkZXYsIFBDSV9DQVBfSURfVk5EUik7IHBvcyAmZ3Q7IDA7CiYjNDM7CSAgICAgcG9zID0gcGNpX2ZpbmRfbmV4dF9jYXBhYmlsaXR5KHBkZXYsIHBvcywgUENJX0NBUF9JRF9WTkRSKSkgewomIzQzOwkJcGNpX3JlYWRfY29uZmlnX2J5dGUocGRldiwKJiM0MzsJCQkJICAgICBwb3MgJiM0Mzsgb2Zmc2V0b2Yoc3RydWN0IHp4ZGhfcGZfcGNpX2NhcCwKJiM0MzsJCQkJCQkJY2ZnX3R5cGUpLCAmYW1wO3R5cGUpOwomIzQzOwkJcGNpX3JlYWRfY29uZmlnX2J5dGUocGRldiwKJiM0MzsJCQkJICAgICBwb3MgJiM0Mzsgb2Zmc2V0b2Yoc3RydWN0IHp4ZGhfcGZfcGNpX2NhcCwgYmFyKSwgJmFtcDtiYXIpOwomIzQzOwomIzQzOwkJLyogaWdub3JlIHN0cnVjdHVyZXMgd2l0aCByZXNlcnZlZCBCQVIgdmFsdWVzICovCiYjNDM7CQlpZiAoYmFyICZndDsgWlhESF9QRl9NQVhfQkFSX1ZBTCkKJiM0MzsJCQljb250aW51ZTsKJiM0MzsKJiM0MzsJCWlmICh0eXBlID09IGNmZ190eXBlKSB7CiYjNDM7CQkJaWYgKHBjaV9yZXNvdXJjZV9sZW4ocGRldiwgYmFyKSAmYW1wOyZhbXA7CiYjNDM7CQkJICAgIHBjaV9yZXNvdXJjZV9mbGFncyhwZGV2LCBiYXIpICZhbXA7IGlvcmVzb3VyY2VfdHlwZXMpIHsKJiM0MzsJCQkJKmJhcnMgfD0gKDEgJmx0OyZsdDsgYmFyKTsKJiM0MzsJCQkJcmV0dXJuIHBvczsKJiM0MzsJCQl9CiYjNDM7CQl9CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3ZvaWQgX19pb21lbSAqenhkaF9wZl9tYXBfY2FwYWJpbGl0eShzdHJ1Y3QgenhkaF9jb3JlX2RldiAqenhkaF9kZXYsIGludCBvZmYsCiYjNDM7CQkJCSAgICAgc2l6ZV90IG1pbmxlbiwgdTMyIGFsaWduLAomIzQzOwkJCQkgICAgIHUzMiBzdGFydCwgdTMyIHNpemUsCiYjNDM7CQkJCSAgICAgc2l6ZV90ICpsZW4sIHJlc291cmNlX3NpemVfdCAqcGEsCiYjNDM7CQkJCSAgICAgdTMyICpiYXJfb2ZmKQomIzQzO3sKJiM0MzsJc3RydWN0IHBjaV9kZXYgKnBkZXYgPSB6eGRoX2Rldi0mZ3Q7cGRldjsKJiM0MzsJdm9pZCBfX2lvbWVtICpwOwomIzQzOwl1MzIgb2Zmc2V0OwomIzQzOwl1MzIgbGVuZ3RoOwomIzQzOwl1OCBiYXI7CiYjNDM7CiYjNDM7CXBjaV9yZWFkX2NvbmZpZ19ieXRlKHBkZXYsCiYjNDM7CQkJICAgICBvZmYgJiM0Mzsgb2Zmc2V0b2Yoc3RydWN0IHp4ZGhfcGZfcGNpX2NhcCwgYmFyKSwgJmFtcDtiYXIpOwomIzQzOwomIzQzOwlpZiAoYmFyICZndDsgWlhESF9QRl9NQVhfQkFSX1ZBTCkgewomIzQzOwkJZGV2X2Vycih6eGRoX2Rldi0mZ3Q7ZGV2aWNlLCAmIzM0O2ludmFsaWQgYmFyICV1XG4mIzM0OywgYmFyKTsKJiM0MzsJCXJldHVybiBOVUxMOwomIzQzOwl9CiYjNDM7CiYjNDM7CXBjaV9yZWFkX2NvbmZpZ19kd29yZChwZGV2LAomIzQzOwkJCSAgICAgIG9mZiAmIzQzOyBvZmZzZXRvZihzdHJ1Y3QgenhkaF9wZl9wY2lfY2FwLAomIzQzOwkJCQkJCW9mZnNldCksICZhbXA7b2Zmc2V0KTsKJiM0MzsJcGNpX3JlYWRfY29uZmlnX2R3b3JkKHBkZXYsCiYjNDM7CQkJICAgICAgb2ZmICYjNDM7IG9mZnNldG9mKHN0cnVjdCB6eGRoX3BmX3BjaV9jYXAsCiYjNDM7CQkJCQkJbGVuZ3RoKSwgJmFtcDtsZW5ndGgpOwomIzQzOwomIzQzOwlpZiAoYmFyX29mZikKJiM0MzsJCSpiYXJfb2ZmID0gb2Zmc2V0OwomIzQzOwomIzQzOwlpZiAobGVuZ3RoICZsdDs9IHN0YXJ0KSB7CiYjNDM7CQlkZXZfZXJyKHp4ZGhfZGV2LSZndDtkZXZpY2UsICYjMzQ7YmFkIGNhcGFiaWxpdHkgbGVuICV1ICgmZ3Q7JXUgZXhwZWN0ZWQpXG4mIzM0OywKJiM0MzsJCQlsZW5ndGgsIHN0YXJ0KTsKJiM0MzsJCXJldHVybiBOVUxMOwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmIChsZW5ndGggLSBzdGFydCAmbHQ7IG1pbmxlbikgewomIzQzOwkJZGV2X2Vycih6eGRoX2Rldi0mZ3Q7ZGV2aWNlLCAmIzM0O2JhZCBjYXBhYmlsaXR5IGxlbiAldSAoJmd0Oz0lenUgZXhwZWN0ZWQpXG4mIzM0OywKJiM0MzsJCQlsZW5ndGgsIG1pbmxlbik7CiYjNDM7CQlyZXR1cm4gTlVMTDsKJiM0MzsJfQomIzQzOwomIzQzOwlsZW5ndGggLT0gc3RhcnQ7CiYjNDM7CWlmIChzdGFydCAmIzQzOyBvZmZzZXQgJmx0OyBvZmZzZXQpIHsKJiM0MzsJCWRldl9lcnIoenhkaF9kZXYtJmd0O2RldmljZSwgJiMzNDttYXAgd3JhcC1hcm91bmQgJXUmIzQzOyV1XG4mIzM0Oywgc3RhcnQsIG9mZnNldCk7CiYjNDM7CQlyZXR1cm4gTlVMTDsKJiM0MzsJfQomIzQzOwomIzQzOwlvZmZzZXQgJiM0Mzs9IHN0YXJ0OwomIzQzOwlpZiAob2Zmc2V0ICZhbXA7IChhbGlnbiAtIDEpKSB7CiYjNDM7CQlkZXZfZXJyKHp4ZGhfZGV2LSZndDtkZXZpY2UsICYjMzQ7b2Zmc2V0ICV1IG5vdCBhbGlnbmVkIHRvICV1XG4mIzM0Oywgb2Zmc2V0LCBhbGlnbik7CiYjNDM7CQlyZXR1cm4gTlVMTDsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAobGVuZ3RoICZndDsgc2l6ZSkKJiM0MzsJCWxlbmd0aCA9IHNpemU7CiYjNDM7CiYjNDM7CWlmIChsZW4pCiYjNDM7CQkqbGVuID0gbGVuZ3RoOwomIzQzOwomIzQzOwlpZiAobGVuZ3RoICYjNDM7IG9mZnNldCAmbHQ7IG9mZnNldCB8fAomIzQzOwkgICAgbGVuZ3RoICYjNDM7IG9mZnNldCAmZ3Q7IHBjaV9yZXNvdXJjZV9sZW4ocGRldiwgYmFyKSkgewomIzQzOwkJZGV2X2Vycih6eGRoX2Rldi0mZ3Q7ZGV2aWNlLAomIzQzOwkJCSYjMzQ7bWFwICV1QCV1IG91dCBvZiByYW5nZSBvbiBiYXIgJXUgbGVuZ3RoICVsdVxuJiMzNDssCiYjNDM7CQkJbGVuZ3RoLCBvZmZzZXQsIGJhciwKJiM0MzsJCQkodW5zaWduZWQgbG9uZylwY2lfcmVzb3VyY2VfbGVuKHBkZXYsIGJhcikpOwomIzQzOwkJcmV0dXJuIE5VTEw7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcCA9IHBjaV9pb21hcF9yYW5nZShwZGV2LCBiYXIsIG9mZnNldCwgbGVuZ3RoKTsKJiM0MzsJaWYgKCFwKSB7CiYjNDM7CQlkZXZfZXJyKHp4ZGhfZGV2LSZndDtkZXZpY2UsICYjMzQ7dW5hYmxlIHRvIG1hcCBjdXN0b20gcXVldWUgJXVAJXUgb24gYmFyICV1XG4mIzM0OywKJiM0MzsJCQlsZW5ndGgsIG9mZnNldCwgYmFyKTsKJiM0MzsJfSBlbHNlIGlmIChwYSkgewomIzQzOwkJKnBhID0gcGNpX3Jlc291cmNlX3N0YXJ0KHBkZXYsIGJhcikgJiM0Mzsgb2Zmc2V0OwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiBwOwomIzQzO30KJiM0MzsKJiM0MztpbnQgenhkaF9wZl9jb21tb25fY2ZnX2luaXQoc3RydWN0IHp4ZGhfY29yZV9kZXYgKnp4ZGhfZGV2KQomIzQzO3sKJiM0MzsJc3RydWN0IHp4ZGhfcGZfZGV2ICpwZl9kZXYgPSB6eGRoX2Rldi0mZ3Q7cHJpdjsKJiM0MzsJc3RydWN0IHBjaV9kZXYgKnBkZXYgPSB6eGRoX2Rldi0mZ3Q7cGRldjsKJiM0MzsJaW50IGNvbW1vbjsKJiM0MzsKJiM0MzsJLyogY2hlY2sgZm9yIGEgY29tbW9uIGNvbmZpZzogaWYgbm90LCB1c2UgbGVnYWN5IG1vZGUgKGJhciAwKS4gKi8KJiM0MzsJY29tbW9uID0genhkaF9wZl9wY2lfZmluZF9jYXBhYmlsaXR5KHBkZXYsIFpYREhfUENJX0NBUF9DT01NT05fQ0ZHLAomIzQzOwkJCQkJICAgICBJT1JFU09VUkNFX01FTSwKJiM0MzsJCQkJCSAgICAgJmFtcDtwZl9kZXYtJmd0O21vZGVybl9iYXJzKTsKJiM0MzsJaWYgKCFjb21tb24pIHsKJiM0MzsJCWRldl9lcnIoenhkaF9kZXYtJmd0O2RldmljZSwKJiM0MzsJCQkmIzM0O21pc3NpbmcgY2FwYWJpbGl0aWVzLCBsZWF2aW5nIGZvciBsZWdhY3kgZHJpdmVyXG4mIzM0Oyk7CiYjNDM7CQlyZXR1cm4gLUVOT0RFVjsKJiM0MzsJfQomIzQzOwomIzQzOwlwZl9kZXYtJmd0O2NvbW1vbiA9IHp4ZGhfcGZfbWFwX2NhcGFiaWxpdHkoenhkaF9kZXYsIGNvbW1vbiwKJiM0MzsJCQkJCQlzaXplb2Yoc3RydWN0IHp4ZGhfcGZfcGNpX2NvbW1vbl9jZmcpLAomIzQzOwkJCQkJCVpYREhfUEZfQUxJR040LCAwLAomIzQzOwkJCQkJCXNpemVvZihzdHJ1Y3QgenhkaF9wZl9wY2lfY29tbW9uX2NmZyksCiYjNDM7CQkJCQkJTlVMTCwgTlVMTCwgTlVMTCk7CiYjNDM7CWlmICghcGZfZGV2LSZndDtjb21tb24pIHsKJiM0MzsJCWRldl9lcnIoenhkaF9kZXYtJmd0O2RldmljZSwgJiMzNDtwZl9kZXYtJmd0O2NvbW1vbiBpcyBudWxsXG4mIzM0Oyk7CiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7aW50IHp4ZGhfcGZfbm90aWZ5X2NmZ19pbml0KHN0cnVjdCB6eGRoX2NvcmVfZGV2ICp6eGRoX2RldikKJiM0Mzt7CiYjNDM7CXN0cnVjdCB6eGRoX3BmX2RldiAqcGZfZGV2ID0genhkaF9kZXYtJmd0O3ByaXY7CiYjNDM7CXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0genhkaF9kZXYtJmd0O3BkZXY7CiYjNDM7CXUzMiBub3RpZnlfbGVuZ3RoOwomIzQzOwl1MzIgbm90aWZ5X29mZnNldDsKJiM0MzsJaW50IG5vdGlmeTsKJiM0MzsKJiM0MzsJLyogSWYgY29tbW9uIGlzIHRoZXJlLCB0aGVzZSBzaG91bGQgYmUgdG9vLi4uICovCiYjNDM7CW5vdGlmeSA9IHp4ZGhfcGZfcGNpX2ZpbmRfY2FwYWJpbGl0eShwZGV2LCBaWERIX1BDSV9DQVBfTk9USUZZX0NGRywKJiM0MzsJCQkJCSAgICAgSU9SRVNPVVJDRV9NRU0sCiYjNDM7CQkJCQkgICAgICZhbXA7cGZfZGV2LSZndDttb2Rlcm5fYmFycyk7CiYjNDM7CWlmICghbm90aWZ5KSB7CiYjNDM7CQlkZXZfZXJyKHp4ZGhfZGV2LSZndDtkZXZpY2UsICYjMzQ7bWlzc2luZyBub3RpZnkgY2ZnIGNhcGFiaWxpdHlcbiYjMzQ7KTsKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwl9CiYjNDM7CiYjNDM7CXBjaV9yZWFkX2NvbmZpZ19kd29yZChwZGV2LAomIzQzOwkJCSAgICAgIG5vdGlmeSAmIzQzOyBvZmZzZXRvZihzdHJ1Y3QgenhkaF9wZl9wY2lfbm90aWZ5X2NhcCwKJiM0MzsJCQkJbm90aWZ5X29mZl9tdWx0aXBsaWVyKSwKJiM0MzsJCSZhbXA7cGZfZGV2LSZndDtub3RpZnlfb2Zmc2V0X211bHRpcGxpZXIpOwomIzQzOwlwY2lfcmVhZF9jb25maWdfZHdvcmQocGRldiwKJiM0MzsJCQkgICAgICBub3RpZnkgJiM0Mzsgb2Zmc2V0b2Yoc3RydWN0IHp4ZGhfcGZfcGNpX25vdGlmeV9jYXAsCiYjNDM7CQkJCWNhcC5sZW5ndGgpLCAmYW1wO25vdGlmeV9sZW5ndGgpOwomIzQzOwlwY2lfcmVhZF9jb25maWdfZHdvcmQocGRldiwKJiM0MzsJCQkgICAgICBub3RpZnkgJiM0Mzsgb2Zmc2V0b2Yoc3RydWN0IHp4ZGhfcGZfcGNpX25vdGlmeV9jYXAsCiYjNDM7CQkJCWNhcC5vZmZzZXQpLCAmYW1wO25vdGlmeV9vZmZzZXQpOwomIzQzOwomIzQzOwkvKiBXZSBkb24mIzM5O3Qga25vdyBob3cgbWFueSBWUXMgd2UmIzM5O2xsIG1hcCwgYWhlYWQgb2YgdGhlIHRpbWUuCiYjNDM7CSAqIElmIG5vdGlmeSBsZW5ndGggaXMgc21hbGwsIG1hcCBpdCBhbGwgbm93LiBPdGhlcndpc2UsCiYjNDM7CSAqIG1hcCBlYWNoIFZRIGluZGl2aWR1YWxseSBsYXRlci4KJiM0MzsJICovCiYjNDM7CWlmIChub3RpZnlfbGVuZ3RoICZsdDs9IFBBR0VfU0laRSAtIChub3RpZnlfb2Zmc2V0ICUgUEFHRV9TSVpFKSkgewomIzQzOwkJcGZfZGV2LSZndDtub3RpZnlfYmFzZSA9IHp4ZGhfcGZfbWFwX2NhcGFiaWxpdHkoenhkaF9kZXYsIG5vdGlmeSwKJiM0MzsJCQkJCQkJICAgICBaWERIX1BGX01BUF9NSU5MRU4yLAomIzQzOwkJCQkJCQkgICAgWlhESF9QRl9BTElHTjIsIDAsCiYjNDM7CQkJCQkJCSAgICBub3RpZnlfbGVuZ3RoLAomIzQzOwkJCQkJCQkgICAgJmFtcDtwZl9kZXYtJmd0O25vdGlmeV9sZW4sCiYjNDM7CQkJCQkJCSAgICAmYW1wO3BmX2Rldi0mZ3Q7bm90aWZ5X3BhLCBOVUxMKTsKJiM0MzsJCWlmICghcGZfZGV2LSZndDtub3RpZnlfYmFzZSkgewomIzQzOwkJCWRldl9lcnIoenhkaF9kZXYtJmd0O2RldmljZSwgJiMzNDtwZl9kZXYtJmd0O25vdGlmeV9iYXNlIGlzIG51bGxcbiYjMzQ7KTsKJiM0MzsJCQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJCX0KJiM0MzsJfSBlbHNlIHsKJiM0MzsJCXBmX2Rldi0mZ3Q7bm90aWZ5X21hcF9jYXAgPSBub3RpZnk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO2ludCB6eGRoX3BmX2RldmljZV9jZmdfaW5pdChzdHJ1Y3QgenhkaF9jb3JlX2RldiAqenhkaF9kZXYpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgenhkaF9wZl9kZXYgKnBmX2RldiA9IHp4ZGhfZGV2LSZndDtwcml2OwomIzQzOwlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IHp4ZGhfZGV2LSZndDtwZGV2OwomIzQzOwlpbnQgZGV2aWNlOwomIzQzOwomIzQzOwkvKiBEZXZpY2UgY2FwYWJpbGl0eSBpcyBvbmx5IG1hbmRhdG9yeSBmb3IKJiM0MzsJICogZGV2aWNlcyB0aGF0IGhhdmUgZGV2aWNlLXNwZWNpZmljIGNvbmZpZ3VyYXRpb24uCiYjNDM7CSAqLwomIzQzOwlkZXZpY2UgPSB6eGRoX3BmX3BjaV9maW5kX2NhcGFiaWxpdHkocGRldiwgWlhESF9QQ0lfQ0FQX0RFVklDRV9DRkcsCiYjNDM7CQkJCQkgICAgIElPUkVTT1VSQ0VfTUVNLAomIzQzOwkJCQkJICAgICAmYW1wO3BmX2Rldi0mZ3Q7bW9kZXJuX2JhcnMpOwomIzQzOwomIzQzOwkvKiB3ZSBkb24mIzM5O3Qga25vdyBob3cgbXVjaCB3ZSBzaG91bGQgbWFwLAomIzQzOwkgKiBidXQgUEFHRV9TSVpFIGlzIG1vcmUgdGhhbiBlbm91Z2ggZm9yIGFsbCBleGlzdGluZyBkZXZpY2VzLgomIzQzOwkgKi8KJiM0MzsJaWYgKGRldmljZSkgewomIzQzOwkJcGZfZGV2LSZndDtkZXZpY2UgPSB6eGRoX3BmX21hcF9jYXBhYmlsaXR5KHp4ZGhfZGV2LCBkZXZpY2UsIDAsCiYjNDM7CQkJCQkJCVpYREhfUEZfQUxJR040LCAwLCBQQUdFX1NJWkUsCiYjNDM7CQkJCQkJICAgICAgICZhbXA7cGZfZGV2LSZndDtkZXZpY2VfbGVuLCBOVUxMLAomIzQzOwkJCQkJCSAgICAgICAmYW1wO3BmX2Rldi0mZ3Q7ZGV2X2NmZ19iYXJfb2ZmKTsKJiM0MzsJCWlmICghcGZfZGV2LSZndDtkZXZpY2UpIHsKJiM0MzsJCQlkZXZfZXJyKHp4ZGhfZGV2LSZndDtkZXZpY2UsICYjMzQ7cGZfZGV2LSZndDtkZXZpY2UgaXMgbnVsbFxuJiMzNDspOwomIzQzOwkJCXJldHVybiAtRUlOVkFMOwomIzQzOwkJfQomIzQzOwl9CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0Mzt2b2lkIHp4ZGhfcGZfbW9kZXJuX2NmZ191bmluaXQoc3RydWN0IHp4ZGhfY29yZV9kZXYgKnp4ZGhfZGV2KQomIzQzO3sKJiM0MzsJc3RydWN0IHp4ZGhfcGZfZGV2ICpwZl9kZXYgPSB6eGRoX2Rldi0mZ3Q7cHJpdjsKJiM0MzsJc3RydWN0IHBjaV9kZXYgKnBkZXYgPSB6eGRoX2Rldi0mZ3Q7cGRldjsKJiM0MzsKJiM0MzsJaWYgKHBmX2Rldi0mZ3Q7ZGV2aWNlKQomIzQzOwkJcGNpX2lvdW5tYXAocGRldiwgcGZfZGV2LSZndDtkZXZpY2UpOwomIzQzOwlpZiAocGZfZGV2LSZndDtub3RpZnlfYmFzZSkKJiM0MzsJCXBjaV9pb3VubWFwKHBkZXYsIHBmX2Rldi0mZ3Q7bm90aWZ5X2Jhc2UpOwomIzQzOwlwY2lfaW91bm1hcChwZGV2LCBwZl9kZXYtJmd0O2NvbW1vbik7CiYjNDM7fQomIzQzOwomIzQzO2ludCB6eGRoX3BmX21vZGVybl9jZmdfaW5pdChzdHJ1Y3QgenhkaF9jb3JlX2RldiAqenhkaF9kZXYpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgenhkaF9wZl9kZXYgKnBmX2RldiA9IHp4ZGhfZGV2LSZndDtwcml2OwomIzQzOwlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IHp4ZGhfZGV2LSZndDtwZGV2OwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwlyZXQgPSB6eGRoX3BmX2NvbW1vbl9jZmdfaW5pdCh6eGRoX2Rldik7CiYjNDM7CWlmIChyZXQpIHsKJiM0MzsJCWRldl9lcnIoenhkaF9kZXYtJmd0O2RldmljZSwgJiMzNDt6eGRoX3BmX2NvbW1vbl9jZmdfaW5pdCBmYWlsZWQ6ICVkXG4mIzM0OywgcmV0KTsKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0ID0genhkaF9wZl9ub3RpZnlfY2ZnX2luaXQoenhkaF9kZXYpOwomIzQzOwlpZiAocmV0KSB7CiYjNDM7CQlkZXZfZXJyKHp4ZGhfZGV2LSZndDtkZXZpY2UsICYjMzQ7enhkaF9wZl9ub3RpZnlfY2ZnX2luaXQgZmFpbGVkOiAlZFxuJiMzNDssIHJldCk7CiYjNDM7CQlnb3RvIGVycl9tYXBfbm90aWZ5OwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldCA9IHp4ZGhfcGZfZGV2aWNlX2NmZ19pbml0KHp4ZGhfZGV2KTsKJiM0MzsJaWYgKHJldCkgewomIzQzOwkJZGV2X2Vycih6eGRoX2Rldi0mZ3Q7ZGV2aWNlLCAmIzM0O3p4ZGhfcGZfZGV2aWNlX2NmZ19pbml0IGZhaWxlZDogJWRcbiYjMzQ7LCByZXQpOwomIzQzOwkJZ290byBlcnJfbWFwX2RldmljZTsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0MzsKJiM0MztlcnJfbWFwX2RldmljZToKJiM0MzsJaWYgKHBmX2Rldi0mZ3Q7bm90aWZ5X2Jhc2UpCiYjNDM7CQlwY2lfaW91bm1hcChwZGV2LCBwZl9kZXYtJmd0O25vdGlmeV9iYXNlKTsKJiM0MztlcnJfbWFwX25vdGlmeToKJiM0MzsJcGNpX2lvdW5tYXAocGRldiwgcGZfZGV2LSZndDtjb21tb24pOwomIzQzOwlyZXR1cm4gcmV0OwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IHp4ZGhfcGZfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICppZCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCB6eGRoX2NvcmVfZGV2ICp6eGRoX2RldjsKJiM0MzsJc3RydWN0IHp4ZGhfcGZfZGV2ICpwZl9kZXY7CiYjNDM7CXN0cnVjdCBkZXZsaW5rICpkZXZsaW5rOwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwlkZXZsaW5rID0gZGV2bGlua19hbGxvYygmYW1wO3p4ZGhfcGZfZGV2bGlua19vcHMsIHNpemVvZihzdHJ1Y3QgenhkaF9jb3JlX2RldiksCiYjNDM7CQkJCSZhbXA7cGRldi0mZ3Q7ZGV2KTsKJiM0MzsJaWYgKCFkZXZsaW5rKQomIzQzOwkJcmV0dXJuIC1FTk9NRU07CiYjNDM7CiYjNDM7CXp4ZGhfZGV2ID0gZGV2bGlua19wcml2KGRldmxpbmspOwomIzQzOwl6eGRoX2Rldi0mZ3Q7ZGV2aWNlID0gJmFtcDtwZGV2LSZndDtkZXY7CiYjNDM7CXp4ZGhfZGV2LSZndDtwZGV2ID0gcGRldjsKJiM0MzsJenhkaF9kZXYtJmd0O2RldmxpbmsgPSBkZXZsaW5rOwomIzQzOwomIzQzOwlwZl9kZXYgPSB6eGRoX2NvcmVfYWxsb2NfcHJpdih6eGRoX2Rldiwgc2l6ZW9mKCpwZl9kZXYpKTsKJiM0MzsJaWYgKCFwZl9kZXYpIHsKJiM0MzsJCWRldl9lcnIoJmFtcDtwZGV2LSZndDtkZXYsICYjMzQ7enhkaF9wZl9kZXYgYWxsb2MgZmFpbGVkXG4mIzM0Oyk7CiYjNDM7CQlyZXQgPSAtRU5PTUVNOwomIzQzOwkJZ290byBlcnJfcGZfZGV2OwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldCA9IHp4ZGhfcGZfcGNpX2luaXQoenhkaF9kZXYpOwomIzQzOwlpZiAocmV0KSB7CiYjNDM7CQlkZXZfZXJyKCZhbXA7cGRldi0mZ3Q7ZGV2LCAmIzM0O3p4ZGhfcGZfcGNpX2luaXQgZmFpbGVkOiAlZFxuJiMzNDssIHJldCk7CiYjNDM7CQlnb3RvIGVycl9wY2lfaW5pdDsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXQgPSB6eGRoX3BmX21vZGVybl9jZmdfaW5pdCh6eGRoX2Rldik7CiYjNDM7CWlmIChyZXQpIHsKJiM0MzsJCWRldl9lcnIoJmFtcDtwZGV2LSZndDtkZXYsICYjMzQ7enhkaF9wZl9tb2Rlcm5fY2ZnX2luaXQgZmFpbGVkOiAlZFxuJiMzNDssIHJldCk7CiYjNDM7CQlnb3RvIGVycl9jZmdfaW5pdDsKJiM0MzsJfQomIzQzOwomIzQzOwlkZXZsaW5rX3JlZ2lzdGVyKGRldmxpbmspOwomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0MzsKJiM0MztlcnJfY2ZnX2luaXQ6CiYjNDM7CXp4ZGhfcGZfcGNpX2Nsb3NlKHp4ZGhfZGV2KTsKJiM0MztlcnJfcGNpX2luaXQ6CiYjNDM7CXp4ZGhfY29yZV9mcmVlX3ByaXYoenhkaF9kZXYpOwomIzQzO2Vycl9wZl9kZXY6CiYjNDM7CWRldmxpbmtfZnJlZShkZXZsaW5rKTsKJiM0MzsJcmV0dXJuIHJldDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgenhkaF9wZl9yZW1vdmUoc3RydWN0IHBjaV9kZXYgKnBkZXYpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgenhkaF9jb3JlX2RldiAqenhkaF9kZXYgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7CiYjNDM7CXN0cnVjdCBkZXZsaW5rICpkZXZsaW5rID0gcHJpdl90b19kZXZsaW5rKHp4ZGhfZGV2KTsKJiM0MzsKJiM0MzsJZGV2bGlua191bnJlZ2lzdGVyKGRldmxpbmspOwomIzQzOwl6eGRoX3BmX21vZGVybl9jZmdfdW5pbml0KHp4ZGhfZGV2KTsKJiM0MzsJenhkaF9wZl9wY2lfY2xvc2UoenhkaF9kZXYpOwomIzQzOwl6eGRoX2NvcmVfZnJlZV9wcml2KHp4ZGhfZGV2KTsKJiM0MzsJZGV2bGlua19mcmVlKGRldmxpbmspOwomIzQzOwlwY2lfc2V0X2RydmRhdGEocGRldiwgTlVMTCk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIHp4ZGhfcGZfc2h1dGRvd24oc3RydWN0IHBjaV9kZXYgKnBkZXYpCiYjNDM7ewomIzQzOwlpZiAoc3lzdGVtX3N0YXRlID09IFNZU1RFTV9QT1dFUl9PRkYpCiYjNDM7CQlwY2lfc2V0X3Bvd2VyX3N0YXRlKHBkZXYsIFBDSV9EM2hvdCk7CiYjNDM7CXBjaV9kaXNhYmxlX2RldmljZShwZGV2KTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIHp4ZGhfcGZfZHJpdmVyID0gewomIzQzOwkubmFtZSA9ICYjMzQ7ZGluZ2hhaTEwZSYjMzQ7LAomIzQzOwkuaWRfdGFibGUgPSB6eGRoX3BmX3BjaV90YWJsZSwKJiM0MzsJLnByb2JlID0genhkaF9wZl9wcm9iZSwKJiM0MzsJLnJlbW92ZSA9IHp4ZGhfcGZfcmVtb3ZlLAomIzQzOwkuc2h1dGRvd24gPSB6eGRoX3BmX3NodXRkb3duLAomIzQzO307CiYjNDM7CiYjNDM7bW9kdWxlX3BjaV9kcml2ZXIoenhkaF9wZl9kcml2ZXIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMC4uNzM3M2RlZThkMWE5ZgotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmgKQEAgLTAsMCAmIzQzOzEsNzUgQEAKJiM0MzsvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5ICovCiYjNDM7LyoKJiM0MzsgKiBaVEUgRGluZ0hhaSBFdGhlcm5ldCBkcml2ZXIgLSBQRiBoZWFkZXIKJiM0MzsgKiBDb3B5cmlnaHQgKGMpIDIwMjItMjAyNiwgWlRFIENvcnBvcmF0aW9uLgomIzQzOyAqLwomIzQzOwomIzQzOyNpZm5kZWYgX19aWERIX0VOX1BGX0hfXwomIzQzOyNkZWZpbmUgX19aWERIX0VOX1BGX0hfXwomIzQzOwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC90eXBlcy5oJmd0OwomIzQzOwomIzQzOyNkZWZpbmUgWlhESF9QRl9WRU5ET1JfSUQJMHgxY2YyCiYjNDM7I2RlZmluZSBaWERIX1BGX0RFVklDRV9JRAkweDgwNDAKJiM0MzsjZGVmaW5lIFpYREhfVkZfREVWSUNFX0lECTB4ODA0MQomIzQzOwomIzQzOy8qIENvbW1vbiBjb25maWd1cmF0aW9uICovCiYjNDM7I2RlZmluZSBaWERIX1BDSV9DQVBfQ09NTU9OX0NGRwkxCiYjNDM7LyogTm90aWZpY2F0aW9ucyAqLwomIzQzOyNkZWZpbmUgWlhESF9QQ0lfQ0FQX05PVElGWV9DRkcJMgomIzQzOy8qIElTUiBhY2Nlc3MgKi8KJiM0MzsjZGVmaW5lIFpYREhfUENJX0NBUF9JU1JfQ0ZHCQkzCiYjNDM7LyogRGV2aWNlIHNwZWNpZmljIGNvbmZpZ3VyYXRpb24gKi8KJiM0MzsjZGVmaW5lIFpYREhfUENJX0NBUF9ERVZJQ0VfQ0ZHCTQKJiM0MzsvKiBQQ0kgY29uZmlndXJhdGlvbiBhY2Nlc3MgKi8KJiM0MzsjZGVmaW5lIFpYREhfUENJX0NBUF9QQ0lfQ0ZHCQk1CiYjNDM7CiYjNDM7I2RlZmluZSBaWERIX1BGX01BWF9CQVJfVkFMCQkweDUKJiM0MzsjZGVmaW5lIFpYREhfUEZfQUxJR040CQkJNAomIzQzOyNkZWZpbmUgWlhESF9QRl9BTElHTjIJCQkyCiYjNDM7I2RlZmluZSBaWERIX1BGX01BUF9NSU5MRU4yCQkyCiYjNDM7CiYjNDM7c3RydWN0IHp4ZGhfY29yZV9kZXYgewomIzQzOwlzdHJ1Y3QgZGV2aWNlICpkZXZpY2U7CiYjNDM7CXN0cnVjdCBwY2lfZGV2ICpwZGV2OwomIzQzOwlzdHJ1Y3QgZGV2bGluayAqZGV2bGluazsKJiM0MzsJdm9pZCAqcHJpdjsKJiM0Mzt9OwomIzQzOwomIzQzO3N0cnVjdCB6eGRoX3BmX2RldiB7CiYjNDM7CXN0cnVjdCB6eGRoX3BmX3BjaV9jb21tb25fY2ZnIF9faW9tZW0gKmNvbW1vbjsKJiM0MzsJLyogRGV2aWNlLXNwZWNpZmljIGRhdGEgKG5vbi1sZWdhY3kgbW9kZSkgICovCiYjNDM7CS8qIEJhc2Ugb2YgdnEgbm90aWZpY2F0aW9ucyAobm9uLWxlZ2FjeSBtb2RlKS4gKi8KJiM0MzsJdm9pZCBfX2lvbWVtICpkZXZpY2U7CiYjNDM7CXZvaWQgX19pb21lbSAqbm90aWZ5X2Jhc2U7CiYjNDM7CS8qIFBoeXNpY2FsIGJhc2Ugb2YgdnEgbm90aWZpY2F0aW9ucyAqLwomIzQzOwlyZXNvdXJjZV9zaXplX3Qgbm90aWZ5X3BhOwomIzQzOwkvKiBTbyB3ZSBjYW4gc2FuaXR5LWNoZWNrIGFjY2Vzc2VzLiAqLwomIzQzOwlzaXplX3Qgbm90aWZ5X2xlbjsKJiM0MzsJc2l6ZV90IGRldmljZV9sZW47CiYjNDM7CS8qIENhcGFiaWxpdHkgZm9yIHdoZW4gd2UgbmVlZCB0byBtYXAgbm90aWZpY2F0aW9ucyBwZXItdnEuICovCiYjNDM7CXMzMiBub3RpZnlfbWFwX2NhcDsKJiM0MzsJdTMyIG5vdGlmeV9vZmZzZXRfbXVsdGlwbGllcjsKJiM0MzsJLyogTXVsdGlwbHkgcXVldWVfbm90aWZ5X29mZiBieSB0aGlzIHZhbHVlLiAobm9uLWxlZ2FjeSBtb2RlKS4gKi8KJiM0MzsJczMyIG1vZGVybl9iYXJzOwomIzQzOwl2b2lkIF9faW9tZW0gKnBjaV9pb3JlbWFwX2FkZHJbNl07CiYjNDM7CXUzMiBkZXZfY2ZnX2Jhcl9vZmY7CiYjNDM7fTsKJiM0MzsKJiM0Mzt2b2lkICp6eGRoX2NvcmVfYWxsb2NfcHJpdihzdHJ1Y3QgenhkaF9jb3JlX2RldiAqenhkaF9kZXYsIHNpemVfdCBzaXplKTsKJiM0Mzt2b2lkIHp4ZGhfY29yZV9mcmVlX3ByaXYoc3RydWN0IHp4ZGhfY29yZV9kZXYgKnp4ZGhfZGV2KTsKJiM0Mzt2b2lkIHp4ZGhfcGZfcGNpX2Nsb3NlKHN0cnVjdCB6eGRoX2NvcmVfZGV2ICp6eGRoX2Rldik7CiYjNDM7aW50IHp4ZGhfcGZfcGNpX2ZpbmRfY2FwYWJpbGl0eShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgdTggY2ZnX3R5cGUsCiYjNDM7CQkJCXUzMiBpb3Jlc291cmNlX3R5cGVzLCBpbnQgKmJhcnMpOwomIzQzO3ZvaWQgX19pb21lbSAqenhkaF9wZl9tYXBfY2FwYWJpbGl0eShzdHJ1Y3QgenhkaF9jb3JlX2RldiAqenhkaF9kZXYsIGludCBvZmYsCiYjNDM7CQkJCSAgICAgc2l6ZV90IG1pbmxlbiwgdTMyIGFsaWduLAomIzQzOwkJCQkgICAgIHUzMiBzdGFydCwgdTMyIHNpemUsCiYjNDM7CQkJCSAgICAgc2l6ZV90ICpsZW4sIHJlc291cmNlX3NpemVfdCAqcGEsCiYjNDM7CQkJCSAgICAgdTMyICpiYXJfb2ZmKTsKJiM0MztpbnQgenhkaF9wZl9jb21tb25fY2ZnX2luaXQoc3RydWN0IHp4ZGhfY29yZV9kZXYgKnp4ZGhfZGV2KTsKJiM0MztpbnQgenhkaF9wZl9ub3RpZnlfY2ZnX2luaXQoc3RydWN0IHp4ZGhfY29yZV9kZXYgKnp4ZGhfZGV2KTsKJiM0MztpbnQgenhkaF9wZl9kZXZpY2VfY2ZnX2luaXQoc3RydWN0IHp4ZGhfY29yZV9kZXYgKnp4ZGhfZGV2KTsKJiM0Mzt2b2lkIHp4ZGhfcGZfbW9kZXJuX2NmZ191bmluaXQoc3RydWN0IHp4ZGhfY29yZV9kZXYgKnp4ZGhfZGV2KTsKJiM0MztpbnQgenhkaF9wZl9tb2Rlcm5fY2ZnX2luaXQoc3RydWN0IHp4ZGhfY29yZV9kZXYgKnp4ZGhfZGV2KTsKJiM0MzsKJiM0MzsjZW5kaWYgLyogX19aWERIX0VOX1BGX0hfXyAqLwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAxNzo0MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTA0OQoJCQkJCQkJb3V0cHV0OiA3OAoJCQkJCQkJdGhvdWdodHM6IDUzMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipXb3J0aEZ1enppbmcgRGVjaXNpb24gZm9yIHRoZSBaVEUgRGluZ0hhaSBFdGhlcm5ldCBEcml2ZXIqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gV2UmIzM5O3ZlIGdvdCBhIG5ldyBwYXRjaCBpbnRyb2R1Y2luZyBhIGRyaXZlciBmb3IgWlRFIERpbmdIYWkgRXRoZXJuZXQgZGV2aWNlcy4gSXQmIzM5O3Mgc2l0dGluZyBpbiBgZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvYCBhbmQgaXMgYSBQQ0kgZHJpdmVyIHNwZWNpZmljYWxseSwgbmFtZWQgYGRpbmdoYWkxMGVgLiBNeSBpbml0aWFsIHNjYW4gc2hvd3MgdGhlIGRyaXZlciBzZXRzIHVwIHNvbWUgUENJIGNhcGFiaWxpdGllcywgZGV2bGluayBhbmQgc2VlbXMgdG8gYmUgYSBiYXNpYyBQQ0kgZHJpdmVyIHByb2JlLiBObyBuZXRkZXYgcmVnaXN0cmF0aW9uIGF0IHRoaXMgcG9pbnQuCgpOb3csIGFjY29yZGluZyB0byB0aGUgZGlyZWN0aW9ucywgSSBuZWVkIHRvIGNoZWNrIGlmIHRoaXMgaXMgd29ydGggZnV6emluZy4gVGhlIGluc3RydWN0aW9ucyB0ZWxsIG1lIHRvIGZsYWcgaXQgYXMgYFdvcnRoRnV6emluZz1mYWxzZWAgaWYgdGhlIHBhdGNoICpvbmx5KiBjb250YWlucyBjb2RlIGluIHNwZWNpZmljIGRyaXZlciB0eXBlcy4gU3BlY2lmaWNhbGx5LCBpdCBoaWdobGlnaHRzICYjMzQ7dmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLCBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVSYjMzQ7LgoKQWhhISBUaGlzIGlzIGEgWlRFIERpbmdIYWkgRXRoZXJuZXQgZHJpdmVyLiBJdCYjMzk7cyBhIHZlbmRvci1zcGVjaWZpYyBQQ0llIE5JQyBkcml2ZXIuIFRoZSBxdWVzdGlvbiBpcywgaXMgdGhpcyBlbXVsYXRlZCBpbiBRRU1VPyBJIGRvdWJ0IGl0LiBUaGVyZSYjMzk7cyBubyBpbmRpY2F0aW9uIHRoYXQgdGhpcyBoYXJkd2FyZSBpcyBzdXBwb3J0ZWQgb3IgZW11bGF0ZWQgd2l0aGluIHRoZSBzdGFuZGFyZCBRRU1VIGVudmlyb25tZW50LiBUaGUgaW5zdHJ1Y3Rpb25zIGFyZSBwcmV0dHkgZXhwbGljaXQgb24gdGhpcyBwb2ludC4KCkxldCBtZSBjb25maXJtIHRoZSBkcml2ZXImIzM5O3MgbmF0dXJlLiBZZXMsIGl0JiMzOTtzIGEgWlRFIERpbmdIYWkgRXRoZXJuZXQgZHJpdmVyLiBJdCYjMzk7cyByZWZlcmVuY2luZyBgQ09ORklHX0RJTkdIQUlfUEZgIGFuZCB1c2VzIGBQQ0lfREVWSUNFYCBtYWNybyB3aXRoIHZlbmRvciBJRCAweDFjZjIgYW5kIGRldmljZSBJRCAweDgwNDAuIFNvIHdlIGFyZSB0YWxraW5nIGFib3V0IGEgdmVuZG9yLXNwZWNpZmljIFBDSSBkZXZpY2UsIHdpdGggYSBzcGVjaWZpYyBoYXJkd2FyZSBjb25maWd1cmF0aW9uLiBUaGlzIGNvbmZpcm1zIHRoZSByZXF1aXJlbWVudCBmb3IgYSBwaHlzaWNhbCBQQ0llIGNhcmQuIEl0JiMzOTtzIG5vdCBzb21ldGhpbmcgSSBjYW4ganVzdCBzcGluIHVwIGluIFFFTVUuCgpUaGVyZWZvcmUsIHNpbmNlIHRoaXMgZHJpdmVyIHJlcXVpcmVzIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgbm90IGVtdWxhdGVkLCB0aGUgYFdvcnRoRnV6emluZ2Agc2hvdWxkIGJlIGZhbHNlLiBUaGlzIGFsaWducyBwZXJmZWN0bHkgd2l0aCB0aGUgaW5zdHJ1Y3Rpb25zIEkgcmVjZWl2ZWQuIEkmIzM5O20gY29uZmlkZW50IGluIHNheWluZyB0aGF0IHRoZSBjdXJyZW50IHBhdGNoIGZhbGxzIGludG8gdGhlICYjMzQ7dmVuZG9yLXNwZWNpZmljIFBDSWUmIzM0OyBjYXRlZ29yeSBhcyBkZXNjcmliZWQuCgpTbywgSSYjMzk7bGwgZ28gYWhlYWQgYW5kIHNldCBgV29ydGhGdXp6aW5nPWZhbHNlYCBhbmQgcHJvdmlkZSB0aGUgcmVhc29uaW5nIHRoYXQgaXQgaXMgYSB2ZW5kb3Itc3BlY2lmaWMgUENJZSBkcml2ZXIgZm9yIGhhcmR3YXJlIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDE3OjQxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogW10sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyB2ZW5kb3Itc3BlY2lmaWMgUENJZSBFdGhlcm5ldCBkcml2ZXIgKFpURSBEaW5nSGFpKS4gVGhpcyBkcml2ZXIgcmVxdWlyZXMgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSB0aGF0IGlzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLCBtYWtpbmcgaXQgdW5yZWFjaGFibGUgYW5kIHVudGVzdGFibGUgaW4gdmlydHVhbGl6ZWQgZnV6emluZyBlbnZpcm9ubWVudHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IHZlbmRvci1zcGVjaWZpYyBQQ0llIEV0aGVybmV0IGRyaXZlciAoWlRFIERpbmdIYWkpLiBUaGlzIGRyaXZlciByZXF1aXJlcyBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIHRoYXQgaXMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUsIG1ha2luZyBpdCB1bnJlYWNoYWJsZSBhbmQgdW50ZXN0YWJsZSBpbiB2aXJ0dWFsaXplZCBmdXp6aW5nIGVudmlyb25tZW50cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0wMlQxNzo0MTozMi44MDg5MjIyOThaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5MzM5NjY2NjgzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IHZlbmRvci1zcGVjaWZpYyBQQ0llIEV0aGVybmV0IGRyaXZlciAoWlRFIERpbmdIYWkpLiBUaGlzIGRyaXZlciByZXF1aXJlcyBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIHRoYXQgaXMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUsIG1ha2luZyBpdCB1bnJlYWNoYWJsZSBhbmQgdW50ZXN0YWJsZSBpbiB2aXJ0dWFsaXplZCBmdXp6aW5nIGVudmlyb25tZW50cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDE3OjQxOjMyLjgwODkyODI4N1oiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDgxMzc3OTIyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgNTljYzE0Mjc0NzUzNmQxZmEyYWMxYzUzZmE0YmMzMTQ0NTc5MWViMlxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgU3VuIEF1ZyAyIDE3OjQxOjMxIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL01BSU5UQUlORVJTIGIvTUFJTlRBSU5FUlNcXG5pbmRleCAyZmIxYzc1YWZkMTYzLi43MzY5MmIwOWJmN2JhIDEwMDY0NFxcbi0tLSBhL01BSU5UQUlORVJTXFxuKysrIGIvTUFJTlRBSU5FUlNcXG5AQCAtMjk0NDAsNiArMjk0NDAsMTIgQEAgUzpcXHRNYWludGFpbmVkXFxuIFQ6XFx0Z2l0IGdpdDovL2dpdC5rZXJuZWwub3JnL3B1Yi9zY20vbGludXgva2VybmVsL2dpdC90aXdhaS9zb3VuZC5naXRcXG4gRjpcXHRzb3VuZC9oZGEvY29kZWNzL3NlbmFyeXRlY2guY1xcbiBcXG4rWlRFIERJTkdIQUkgRVRIRVJORVQgRFJJVkVSXFxuK006XFx0SnVueWFuZyBIYW4gXFx1MDAzY2hhbi5qdW55YW5nQHp0ZS5jb20uY25cXHUwMDNlXFxuK0w6XFx0bmV0ZGV2QHZnZXIua2VybmVsLm9yZ1xcbitTOlxcdE1haW50YWluZWRcXG4rRjpcXHRkcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvXFxuK1xcbiBUSEUgUkVTVFxcbiBNOlxcdExpbnVzIFRvcnZhbGRzIFxcdTAwM2N0b3J2YWxkc0BsaW51eC1mb3VuZGF0aW9uLm9yZ1xcdTAwM2VcXG4gTDpcXHRsaW51eC1rZXJuZWxAdmdlci5rZXJuZWwub3JnXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L0tjb25maWcgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9LY29uZmlnXFxuaW5kZXggYjhmNzBlMmExNzYzYS4uYzJiNjk5NmIwY2ZlMSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9LY29uZmlnXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvS2NvbmZpZ1xcbkBAIC0xODgsNSArMTg4LDYgQEAgc291cmNlIFxcXCJkcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL0tjb25maWdcXFwiXFxuIHNvdXJjZSBcXFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvd2l6bmV0L0tjb25maWdcXFwiXFxuIHNvdXJjZSBcXFwiZHJpdmVycy9uZXQvZXRoZXJuZXQveGlsaW54L0tjb25maWdcXFwiXFxuIHNvdXJjZSBcXFwiZHJpdmVycy9uZXQvZXRoZXJuZXQveGlyY29tL0tjb25maWdcXFwiXFxuK3NvdXJjZSBcXFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL0tjb25maWdcXFwiXFxuIFxcbiBlbmRpZiAjIEVUSEVSTkVUXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L01ha2VmaWxlIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvTWFrZWZpbGVcXG5pbmRleCA1NzM0NGZlYzZjZTA0Li5hMzRiY2JkNGRmNGU5IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L01ha2VmaWxlXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvTWFrZWZpbGVcXG5AQCAtMTA0LDMgKzEwNCw0IEBAIG9iai0kKENPTkZJR19ORVRfVkVORE9SX1hJUkNPTSkgKz0geGlyY29tL1xcbiBvYmotJChDT05GSUdfTkVUX1ZFTkRPUl9TWU5PUFNZUykgKz0gc3lub3BzeXMvXFxuIG9iai0kKENPTkZJR19ORVRfVkVORE9SX1BFTlNBTkRPKSArPSBwZW5zYW5kby9cXG4gb2JqLSQoQ09ORklHX09BX1RDNikgKz0gb2FfdGM2Lm9cXG4rb2JqLSQoQ09ORklHX05FVF9WRU5ET1JfWlRFKSArPSB6dGUvXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9LY29uZmlnIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL0tjb25maWdcXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxcbmluZGV4IDAwMDAwMDAwMDAwMDAuLmI5NWMyZmM3ZGI3N2FcXG4tLS0gL2Rldi9udWxsXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL0tjb25maWdcXG5AQCAtMCwwICsxLDIwIEBAXFxuKyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbisjXFxuKyMgWlRFIGRyaXZlciBjb25maWd1cmF0aW9uXFxuKyNcXG4rXFxuK2NvbmZpZyBORVRfVkVORE9SX1pURVxcbisgICAgYm9vbCBcXFwiWlRFIGRldmljZXNcXFwiXFxuKyAgICBkZWZhdWx0IHlcXG4rICAgIGhlbHBcXG4rICAgICAgSWYgeW91IGhhdmUgYSBuZXR3b3JrIChFdGhlcm5ldCkgY2FyZCBiZWxvbmdpbmcgdG8gdGhpcyBjbGFzcywgc2F5IFkuXFxuKyAgICAgIE5vdGUgdGhhdCB0aGUgYW5zd2VyIHRvIHRoaXMgcXVlc3Rpb24gZG9lc24ndCBkaXJlY3RseSBhZmZlY3QgdGhlXFxuKyAgICAgIGtlcm5lbDogc2F5aW5nIE4gd2lsbCBqdXN0IGNhdXNlIHRoZSBjb25maWd1cmF0b3IgdG8gc2tpcCBhbGxcXG4rICAgICAgdGhlIHF1ZXN0aW9ucyBhYm91dCBadGUgY2FyZHMuIElmIHlvdSBzYXkgWSwgeW91IHdpbGwgYmUgYXNrZWRcXG4rICAgICAgZm9yIHlvdXIgc3BlY2lmaWMgY2FyZCBpbiB0aGUgZm9sbG93aW5nIHF1ZXN0aW9ucy5cXG4rXFxuK2lmIE5FVF9WRU5ET1JfWlRFXFxuK1xcbitzb3VyY2UgXFxcImRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL0tjb25maWdcXFwiXFxuK1xcbitlbmRpZiAjIE5FVF9WRU5ET1JfWlRFXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9NYWtlZmlsZSBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9NYWtlZmlsZVxcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uY2Q5OTI5YjYxNTU5Y1xcbi0tLSAvZGV2L251bGxcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvTWFrZWZpbGVcXG5AQCAtMCwwICsxLDYgQEBcXG4rIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuKyNcXG4rIyBNYWtlZmlsZSBmb3IgdGhlIFpURSBkZXZpY2UgZHJpdmVyc1xcbisjXFxuK1xcbitvYmotJChDT05GSUdfRElOR0hBSSkgKz0gZGluZ2hhaS9cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvS2NvbmZpZyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL0tjb25maWdcXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxcbmluZGV4IDAwMDAwMDAwMDAwMDAuLjEyMWJlM2JmNzcwN2ZcXG4tLS0gL2Rldi9udWxsXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvS2NvbmZpZ1xcbkBAIC0wLDAgKzEsMzQgQEBcXG4rIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuKyNcXG4rIyBaVEUgRGluZ0hhaSBFdGhlcm5ldCBkcml2ZXIgY29uZmlndXJhdGlvblxcbisjXFxuK1xcbitjb25maWcgRElOR0hBSVxcbisgICAgYm9vbCBcXFwiWlRFIERpbmdIYWkgRXRoZXJuZXQgZHJpdmVyXFxcIlxcbisgICAgZGVwZW5kcyBvbiBQQ0lcXG4rICAgIHNlbGVjdCBORVRfREVWTElOS1xcbisgICAgaGVscFxcbisgICAgICBUaGlzIGRyaXZlciBzdXBwb3J0cyBaVEUgRGluZ0hhaSBFdGhlcm5ldCBkZXZpY2VzLlxcbitcXG4rICAgICAgRGluZ0hhaSBpcyBhIGhpZ2gtcGVyZm9ybWFuY2UgRXRoZXJuZXQgY29udHJvbGxlciB0aGF0IHN1cHBvcnRzXFxuKyAgICAgIG11bHRpcGxlIGZlYXR1cmVzIGluY2x1ZGluZyBoYXJkd2FyZSBvZmZsb2FkaW5nLCBTUi1JT1YsIGFuZFxcbisgICAgICBhZHZhbmNlZCB2aXJ0dWFsaXphdGlvbiBjYXBhYmlsaXRpZXMuXFxuK1xcbisgICAgICBJZiB5b3Ugc2F5IFkgaGVyZSwgeW91IGNhbiBzZWxlY3Qgc3BlY2lmaWMgZHJpdmVyIHZhcmlhbnRzIGJlbG93LlxcbitcXG4rICAgICAgSWYgdW5zdXJlLCBzYXkgTi5cXG4rXFxuK2lmIERJTkdIQUlcXG4rXFxuK2NvbmZpZyBESU5HSEFJX1BGXFxuKyAgICB0cmlzdGF0ZSBcXFwiWlRFIERpbmdIYWkgUEYgKFBoeXNpY2FsIEZ1bmN0aW9uKSBkcml2ZXJcXFwiXFxuKyAgICBoZWxwXFxuKyAgICAgIFRoaXMgZHJpdmVyIHN1cHBvcnRzIFpURSBEaW5nSGFpIFBDSSBFeHByZXNzIEV0aGVybmV0XFxuKyAgICAgIGFkYXB0ZXJzIChQRikuXFxuK1xcbisgICAgICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlLiBUaGUgbW9kdWxlXFxuKyAgICAgIHdpbGwgYmUgbmFtZWQgZGluZ2hhaTEwZS5cXG4rXFxuKyAgICAgIElmIHVuc3VyZSwgc2F5IE4uXFxuK1xcbitlbmRpZiAjIERJTkdIQUlcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvTWFrZWZpbGUgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9NYWtlZmlsZVxcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uZTJmNGRhMzNkZjU5M1xcbi0tLSAvZGV2L251bGxcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9NYWtlZmlsZVxcbkBAIC0wLDAgKzEsNyBAQFxcbisjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4rI1xcbisjIE1ha2VmaWxlIGZvciBaVEUgRGluZ0hhaSBFdGhlcm5ldCBkcml2ZXJcXG4rI1xcbitcXG4rb2JqLSQoQ09ORklHX0RJTkdIQUlfUEYpICs9IGRpbmdoYWkxMGUub1xcbitkaW5naGFpMTBlLXkgOj0gZW5fcGYub1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9kaF9xdWV1ZS5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZGhfcXVldWUuaFxcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uNWI2Mzg5NWMxZWExZVxcbi0tLSAvZGV2L251bGxcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9kaF9xdWV1ZS5oXFxuQEAgLTAsMCArMSw1NiBAQFxcbisvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5ICovXFxuKy8qXFxuKyAqIFpURSBEaW5nSGFpIEV0aGVybmV0IGRyaXZlciAtIFBDSSBjYXBhYmlsaXR5IGRlZmluaXRpb25zXFxuKyAqIENvcHlyaWdodCAoYykgMjAyMi0yMDI2LCBaVEUgQ29ycG9yYXRpb24uXFxuKyAqL1xcbitcXG4rI2lmbmRlZiBfX0RIX1FVRVVFX0hfX1xcbisjZGVmaW5lIF9fREhfUVVFVUVfSF9fXFxuK1xcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvdHlwZXMuaFxcdTAwM2VcXG4rXFxuKy8qIFRoaXMgaXMgdGhlIFBDSSBjYXBhYmlsaXR5IGhlYWRlcjogKi9cXG4rc3RydWN0IHp4ZGhfcGZfcGNpX2NhcCB7XFxuK1xcdF9fdTggY2FwX3ZuZHI7XFx0XFx0LyogR2VuZXJpYyBQQ0kgZmllbGQ6IFBDSV9DQVBfSURfVk5EUiAqL1xcbitcXHRfX3U4IGNhcF9uZXh0O1xcdFxcdC8qIEdlbmVyaWMgUENJIGZpZWxkOiBuZXh0IHB0ci4gKi9cXG4rXFx0X191OCBjYXBfbGVuO1xcdFxcdC8qIEdlbmVyaWMgUENJIGZpZWxkOiBjYXBhYmlsaXR5IGxlbmd0aCAqL1xcbitcXHRfX3U4IGNmZ190eXBlO1xcdFxcdC8qIElkZW50aWZpZXMgdGhlIHN0cnVjdHVyZS4gKi9cXG4rXFx0X191OCBiYXI7XFx0XFx0LyogV2hlcmUgdG8gZmluZCBpdC4gKi9cXG4rXFx0X191OCBpZDtcXHRcXHQvKiBNdWx0aXBsZSBjYXBhYmlsaXRpZXMgb2YgdGhlIHNhbWUgdHlwZSAqL1xcbitcXHRfX3U4IHBhZGRpbmdbMl07XFx0XFx0LyogUGFkIHRvIGZ1bGwgZHdvcmQuICovXFxuK1xcdF9fbGUzMiBvZmZzZXQ7XFx0XFx0LyogT2Zmc2V0IHdpdGhpbiBiYXIuICovXFxuK1xcdF9fbGUzMiBsZW5ndGg7XFx0XFx0LyogTGVuZ3RoIG9mIHRoZSBzdHJ1Y3R1cmUsIGluIGJ5dGVzLiAqL1xcbit9O1xcbitcXG4rLyogRmllbGRzIGluIFpYREhfUEZfUENJX0NBUF9DT01NT05fQ0ZHOiAqL1xcbitzdHJ1Y3QgenhkaF9wZl9wY2lfY29tbW9uX2NmZyB7XFxuK1xcdC8qIEFib3V0IHRoZSB3aG9sZSBkZXZpY2UuICovXFxuK1xcdF9fbGUzMiBkZXZpY2VfZmVhdHVyZV9zZWxlY3Q7IC8qIHJlYWQtd3JpdGUgKi9cXG4rXFx0X19sZTMyIGRldmljZV9mZWF0dXJlO1xcdC8qIHJlYWQtb25seSAqL1xcbitcXHRfX2xlMzIgZ3Vlc3RfZmVhdHVyZV9zZWxlY3Q7IC8qIHJlYWQtd3JpdGUgKi9cXG4rXFx0X19sZTMyIGd1ZXN0X2ZlYXR1cmU7XFx0XFx0LyogcmVhZC13cml0ZSAqL1xcbitcXHRfX2xlMTYgbXNpeF9jb25maWc7XFx0XFx0LyogcmVhZC13cml0ZSAqL1xcbitcXHRfX2xlMTYgbnVtX3F1ZXVlcztcXHRcXHQvKiByZWFkLW9ubHkgKi9cXG4rXFx0X191OCBkZXZpY2Vfc3RhdHVzO1xcdFxcdC8qIHJlYWQtd3JpdGUgKi9cXG4rXFx0X191OCBjb25maWdfZ2VuZXJhdGlvbjtcXHQvKiByZWFkLW9ubHkgKi9cXG4rXFxuK1xcdC8qIEFib3V0IGEgc3BlY2lmaWMgdmlydHF1ZXVlLiAqL1xcbitcXHRfX2xlMTYgcXVldWVfc2VsZWN0O1xcdFxcdC8qIHJlYWQtd3JpdGUgKi9cXG4rXFx0X19sZTE2IHF1ZXVlX3NpemU7XFx0XFx0LyogcmVhZC13cml0ZSwgcG93ZXIgb2YgMi4gKi9cXG4rXFx0X19sZTE2IHF1ZXVlX21zaXhfdmVjdG9yO1xcdC8qIHJlYWQtd3JpdGUgKi9cXG4rXFx0X19sZTE2IHF1ZXVlX2VuYWJsZTtcXHRcXHQvKiByZWFkLXdyaXRlICovXFxuK1xcdF9fbGUxNiBxdWV1ZV9ub3RpZnlfb2ZmO1xcdC8qIHJlYWQtb25seSAqL1xcbitcXHRfX2xlMzIgcXVldWVfZGVzY19sbztcXHRcXHQvKiByZWFkLXdyaXRlICovXFxuK1xcdF9fbGUzMiBxdWV1ZV9kZXNjX2hpO1xcdFxcdC8qIHJlYWQtd3JpdGUgKi9cXG4rXFx0X19sZTMyIHF1ZXVlX2F2YWlsX2xvO1xcdFxcdC8qIHJlYWQtd3JpdGUgKi9cXG4rXFx0X19sZTMyIHF1ZXVlX2F2YWlsX2hpO1xcdFxcdC8qIHJlYWQtd3JpdGUgKi9cXG4rXFx0X19sZTMyIHF1ZXVlX3VzZWRfbG87XFx0XFx0LyogcmVhZC13cml0ZSAqL1xcbitcXHRfX2xlMzIgcXVldWVfdXNlZF9oaTtcXHRcXHQvKiByZWFkLXdyaXRlICovXFxuK307XFxuK1xcbitzdHJ1Y3QgenhkaF9wZl9wY2lfbm90aWZ5X2NhcCB7XFxuK1xcdHN0cnVjdCB6eGRoX3BmX3BjaV9jYXAgY2FwO1xcbitcXHRfX2xlMzIgbm90aWZ5X29mZl9tdWx0aXBsaWVyOyAvKiBNdWx0aXBsaWVyIGZvciBxdWV1ZV9ub3RpZnlfb2ZmLiAqL1xcbit9O1xcbitcXG4rI2VuZGlmIC8qIF9fREhfUVVFVUVfSF9fICovXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jXFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcXG5pbmRleCAwMDAwMDAwMDAwMDAwLi44NmQ0Mzc0MDg4MjAzXFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmNcXG5AQCAtMCwwICsxLDQ0OSBAQFxcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuKy8qXFxuKyAqIFpURSBEaW5nSGFpIEV0aGVybmV0IGRyaXZlclxcbisgKiBDb3B5cmlnaHQgKGMpIDIwMjItMjAyNiwgWlRFIENvcnBvcmF0aW9uLlxcbisgKi9cXG4rXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9tb2R1bGUuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3BjaS5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbmV0L2RldmxpbmsuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2RtYS1tYXBwaW5nLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcXCJlbl9wZi5oXFxcIlxcbisjaW5jbHVkZSBcXFwiZGhfcXVldWUuaFxcXCJcXG4rXFxuK01PRFVMRV9BVVRIT1IoXFxcIkp1bnlhbmcgSGFuIFxcdTAwM2NoYW4uanVueWFuZ0B6dGUuY29tLmNuXFx1MDAzZVxcXCIpO1xcbitNT0RVTEVfREVTQ1JJUFRJT04oXFxcIlpURSBEaW5nSGFpIHNlcmllcyBFdGhlcm5ldCBkcml2ZXJcXFwiKTtcXG4rTU9EVUxFX0xJQ0VOU0UoXFxcIkdQTFxcXCIpO1xcbitcXG4rc3RhdGljIGNvbnN0IHN0cnVjdCBkZXZsaW5rX29wcyB6eGRoX3BmX2Rldmxpbmtfb3BzID0ge307XFxuK1xcbitzdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgenhkaF9wZl9wY2lfdGFibGVbXSA9IHtcXG4rXFx0eyBQQ0lfREVWSUNFKFpYREhfUEZfVkVORE9SX0lELCBaWERIX1BGX0RFVklDRV9JRCkgfSxcXG4rXFx0eyBQQ0lfREVWSUNFKFpYREhfUEZfVkVORE9SX0lELCBaWERIX1ZGX0RFVklDRV9JRCkgfSxcXG4rXFx0eyB9XFxuK307XFxuK1xcbitNT0RVTEVfREVWSUNFX1RBQkxFKHBjaSwgenhkaF9wZl9wY2lfdGFibGUpO1xcbitcXG4rdm9pZCAqenhkaF9jb3JlX2FsbG9jX3ByaXYoc3RydWN0IHp4ZGhfY29yZV9kZXYgKnp4ZGhfZGV2LCBzaXplX3Qgc2l6ZSlcXG4re1xcbitcXHR2b2lkICpwcml2ID0ga3phbGxvYyhzaXplLCBHRlBfS0VSTkVMKTtcXG4rXFxuK1xcdGlmIChwcml2KVxcbitcXHRcXHR6eGRoX2Rldi1cXHUwMDNlcHJpdiA9IHByaXY7XFxuK1xcdHJldHVybiBwcml2O1xcbit9XFxuK1xcbit2b2lkIHp4ZGhfY29yZV9mcmVlX3ByaXYoc3RydWN0IHp4ZGhfY29yZV9kZXYgKnp4ZGhfZGV2KVxcbit7XFxuK1xcdGtmcmVlKHp4ZGhfZGV2LVxcdTAwM2Vwcml2KTtcXG4rfVxcbitcXG4rc3RhdGljIGludCB6eGRoX3BmX3BjaV9pbml0KHN0cnVjdCB6eGRoX2NvcmVfZGV2ICp6eGRoX2RldilcXG4re1xcbitcXHRzdHJ1Y3QgenhkaF9wZl9kZXYgKnBmX2RldiA9IHp4ZGhfZGV2LVxcdTAwM2Vwcml2O1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0cGNpX3NldF9kcnZkYXRhKHp4ZGhfZGV2LVxcdTAwM2VwZGV2LCB6eGRoX2Rldik7XFxuK1xcbitcXHRyZXQgPSBwY2lfZW5hYmxlX2RldmljZSh6eGRoX2Rldi1cXHUwMDNlcGRldik7XFxuK1xcdGlmIChyZXQpIHtcXG4rXFx0XFx0ZGV2X2Vycih6eGRoX2Rldi1cXHUwMDNlZGV2aWNlLCBcXFwicGNpX2VuYWJsZV9kZXZpY2UgZmFpbGVkOiAlZFxcXFxuXFxcIiwgcmV0KTtcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0fVxcbitcXG4rXFx0ZG1hX3NldF9tYXNrX2FuZF9jb2hlcmVudCh6eGRoX2Rldi1cXHUwMDNlZGV2aWNlLCBETUFfQklUX01BU0soNjQpKTtcXG4rXFxuK1xcdHJldCA9IHBjaV9yZXF1ZXN0X3NlbGVjdGVkX3JlZ2lvbnMoenhkaF9kZXYtXFx1MDAzZXBkZXYsXFxuK1xcdFxcdFxcdFxcdFxcdCAgIHBjaV9zZWxlY3RfYmFycyh6eGRoX2Rldi1cXHUwMDNlcGRldiwgSU9SRVNPVVJDRV9NRU0pLFxcbitcXHRcXHRcXHRcXHRcXHQgICBcXFwiZGgtcGZcXFwiKTtcXG4rXFx0aWYgKHJldCkge1xcbitcXHRcXHRkZXZfZXJyKHp4ZGhfZGV2LVxcdTAwM2VkZXZpY2UsIFxcXCJwY2lfcmVxdWVzdF9zZWxlY3RlZF9yZWdpb25zIGZhaWxlZDogJWRcXFxcblxcXCIsIHJldCk7XFxuK1xcdFxcdGdvdG8gZXJyX3BjaTtcXG4rXFx0fVxcbitcXG4rXFx0cGNpX3NldF9tYXN0ZXIoenhkaF9kZXYtXFx1MDAzZXBkZXYpO1xcbitcXHRyZXQgPSBwY2lfc2F2ZV9zdGF0ZSh6eGRoX2Rldi1cXHUwMDNlcGRldik7XFxuK1xcdGlmIChyZXQpIHtcXG4rXFx0XFx0ZGV2X2Vycih6eGRoX2Rldi1cXHUwMDNlZGV2aWNlLCBcXFwicGNpX3NhdmVfc3RhdGUgZmFpbGVkOiAlZFxcXFxuXFxcIiwgcmV0KTtcXG4rXFx0XFx0Z290byBlcnJfcGNpX3NhdmVfc3RhdGU7XFxuK1xcdH1cXG4rXFxuK1xcdGlmICghKHBjaV9yZXNvdXJjZV9mbGFncyh6eGRoX2Rldi1cXHUwMDNlcGRldiwgMCkgXFx1MDAyNiBJT1JFU09VUkNFX01FTSkpIHtcXG4rXFx0XFx0cmV0ID0gLUVOT0RFVjtcXG4rXFx0XFx0ZGV2X2Vycih6eGRoX2Rldi1cXHUwMDNlZGV2aWNlLCBcXFwiQkFSIDAgaXMgbm90IGFuIE1NSU8gcmVzb3VyY2VcXFxcblxcXCIpO1xcbitcXHRcXHRnb3RvIGVycl9wY2lfc2F2ZV9zdGF0ZTtcXG4rXFx0fVxcbitcXG4rXFx0cGZfZGV2LVxcdTAwM2VwY2lfaW9yZW1hcF9hZGRyWzBdID1cXG4rXFx0XFx0aW9yZW1hcChwY2lfcmVzb3VyY2Vfc3RhcnQoenhkaF9kZXYtXFx1MDAzZXBkZXYsIDApLFxcbitcXHRcXHRcXHRwY2lfcmVzb3VyY2VfbGVuKHp4ZGhfZGV2LVxcdTAwM2VwZGV2LCAwKSk7XFxuK1xcdGlmICghcGZfZGV2LVxcdTAwM2VwY2lfaW9yZW1hcF9hZGRyWzBdKSB7XFxuK1xcdFxcdHJldCA9IC1FTk9NRU07XFxuK1xcdFxcdGRldl9lcnIoenhkaF9kZXYtXFx1MDAzZWRldmljZSwgXFxcImRoIHBmIHBjaSBpb3JlbWFwIGZhaWxlZFxcXFxuXFxcIik7XFxuK1xcdFxcdGdvdG8gZXJyX3BjaV9zYXZlX3N0YXRlO1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rXFxuK2Vycl9wY2lfc2F2ZV9zdGF0ZTpcXG4rXFx0cGNpX3JlbGVhc2Vfc2VsZWN0ZWRfcmVnaW9ucyh6eGRoX2Rldi1cXHUwMDNlcGRldixcXG4rXFx0XFx0XFx0XFx0ICAgICBwY2lfc2VsZWN0X2JhcnMoenhkaF9kZXYtXFx1MDAzZXBkZXYsIElPUkVTT1VSQ0VfTUVNKSk7XFxuK2Vycl9wY2k6XFxuK1xcdHBjaV9kaXNhYmxlX2RldmljZSh6eGRoX2Rldi1cXHUwMDNlcGRldik7XFxuK1xcdHJldHVybiByZXQ7XFxuK31cXG4rXFxuK3ZvaWQgenhkaF9wZl9wY2lfY2xvc2Uoc3RydWN0IHp4ZGhfY29yZV9kZXYgKnp4ZGhfZGV2KVxcbit7XFxuK1xcdHN0cnVjdCB6eGRoX3BmX2RldiAqcGZfZGV2ID0genhkaF9kZXYtXFx1MDAzZXByaXY7XFxuK1xcbitcXHRpb3VubWFwKHBmX2Rldi1cXHUwMDNlcGNpX2lvcmVtYXBfYWRkclswXSk7XFxuK1xcdHBjaV9yZWxlYXNlX3NlbGVjdGVkX3JlZ2lvbnMoenhkaF9kZXYtXFx1MDAzZXBkZXYsXFxuK1xcdFxcdFxcdFxcdCAgICAgcGNpX3NlbGVjdF9iYXJzKHp4ZGhfZGV2LVxcdTAwM2VwZGV2LCBJT1JFU09VUkNFX01FTSkpO1xcbitcXHRwY2lfZGlzYWJsZV9kZXZpY2UoenhkaF9kZXYtXFx1MDAzZXBkZXYpO1xcbit9XFxuK1xcbitpbnQgenhkaF9wZl9wY2lfZmluZF9jYXBhYmlsaXR5KHN0cnVjdCBwY2lfZGV2ICpwZGV2LCB1OCBjZmdfdHlwZSxcXG4rXFx0XFx0XFx0XFx0dTMyIGlvcmVzb3VyY2VfdHlwZXMsIGludCAqYmFycylcXG4re1xcbitcXHRpbnQgcG9zO1xcbitcXHR1OCB0eXBlO1xcbitcXHR1OCBiYXI7XFxuK1xcbitcXHRmb3IgKHBvcyA9IHBjaV9maW5kX2NhcGFiaWxpdHkocGRldiwgUENJX0NBUF9JRF9WTkRSKTsgcG9zIFxcdTAwM2UgMDtcXG4rXFx0ICAgICBwb3MgPSBwY2lfZmluZF9uZXh0X2NhcGFiaWxpdHkocGRldiwgcG9zLCBQQ0lfQ0FQX0lEX1ZORFIpKSB7XFxuK1xcdFxcdHBjaV9yZWFkX2NvbmZpZ19ieXRlKHBkZXYsXFxuK1xcdFxcdFxcdFxcdCAgICAgcG9zICsgb2Zmc2V0b2Yoc3RydWN0IHp4ZGhfcGZfcGNpX2NhcCxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0XFx0Y2ZnX3R5cGUpLCBcXHUwMDI2dHlwZSk7XFxuK1xcdFxcdHBjaV9yZWFkX2NvbmZpZ19ieXRlKHBkZXYsXFxuK1xcdFxcdFxcdFxcdCAgICAgcG9zICsgb2Zmc2V0b2Yoc3RydWN0IHp4ZGhfcGZfcGNpX2NhcCwgYmFyKSwgXFx1MDAyNmJhcik7XFxuK1xcbitcXHRcXHQvKiBpZ25vcmUgc3RydWN0dXJlcyB3aXRoIHJlc2VydmVkIEJBUiB2YWx1ZXMgKi9cXG4rXFx0XFx0aWYgKGJhciBcXHUwMDNlIFpYREhfUEZfTUFYX0JBUl9WQUwpXFxuK1xcdFxcdFxcdGNvbnRpbnVlO1xcbitcXG4rXFx0XFx0aWYgKHR5cGUgPT0gY2ZnX3R5cGUpIHtcXG4rXFx0XFx0XFx0aWYgKHBjaV9yZXNvdXJjZV9sZW4ocGRldiwgYmFyKSBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHRcXHQgICAgcGNpX3Jlc291cmNlX2ZsYWdzKHBkZXYsIGJhcikgXFx1MDAyNiBpb3Jlc291cmNlX3R5cGVzKSB7XFxuK1xcdFxcdFxcdFxcdCpiYXJzIHw9ICgxIFxcdTAwM2NcXHUwMDNjIGJhcik7XFxuK1xcdFxcdFxcdFxcdHJldHVybiBwb3M7XFxuK1xcdFxcdFxcdH1cXG4rXFx0XFx0fVxcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rdm9pZCBfX2lvbWVtICp6eGRoX3BmX21hcF9jYXBhYmlsaXR5KHN0cnVjdCB6eGRoX2NvcmVfZGV2ICp6eGRoX2RldiwgaW50IG9mZixcXG4rXFx0XFx0XFx0XFx0ICAgICBzaXplX3QgbWlubGVuLCB1MzIgYWxpZ24sXFxuK1xcdFxcdFxcdFxcdCAgICAgdTMyIHN0YXJ0LCB1MzIgc2l6ZSxcXG4rXFx0XFx0XFx0XFx0ICAgICBzaXplX3QgKmxlbiwgcmVzb3VyY2Vfc2l6ZV90ICpwYSxcXG4rXFx0XFx0XFx0XFx0ICAgICB1MzIgKmJhcl9vZmYpXFxuK3tcXG4rXFx0c3RydWN0IHBjaV9kZXYgKnBkZXYgPSB6eGRoX2Rldi1cXHUwMDNlcGRldjtcXG4rXFx0dm9pZCBfX2lvbWVtICpwO1xcbitcXHR1MzIgb2Zmc2V0O1xcbitcXHR1MzIgbGVuZ3RoO1xcbitcXHR1OCBiYXI7XFxuK1xcbitcXHRwY2lfcmVhZF9jb25maWdfYnl0ZShwZGV2LFxcbitcXHRcXHRcXHQgICAgIG9mZiArIG9mZnNldG9mKHN0cnVjdCB6eGRoX3BmX3BjaV9jYXAsIGJhciksIFxcdTAwMjZiYXIpO1xcbitcXG4rXFx0aWYgKGJhciBcXHUwMDNlIFpYREhfUEZfTUFYX0JBUl9WQUwpIHtcXG4rXFx0XFx0ZGV2X2Vycih6eGRoX2Rldi1cXHUwMDNlZGV2aWNlLCBcXFwiaW52YWxpZCBiYXIgJXVcXFxcblxcXCIsIGJhcik7XFxuK1xcdFxcdHJldHVybiBOVUxMO1xcbitcXHR9XFxuK1xcbitcXHRwY2lfcmVhZF9jb25maWdfZHdvcmQocGRldixcXG4rXFx0XFx0XFx0ICAgICAgb2ZmICsgb2Zmc2V0b2Yoc3RydWN0IHp4ZGhfcGZfcGNpX2NhcCxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0b2Zmc2V0KSwgXFx1MDAyNm9mZnNldCk7XFxuK1xcdHBjaV9yZWFkX2NvbmZpZ19kd29yZChwZGV2LFxcbitcXHRcXHRcXHQgICAgICBvZmYgKyBvZmZzZXRvZihzdHJ1Y3QgenhkaF9wZl9wY2lfY2FwLFxcbitcXHRcXHRcXHRcXHRcXHRcXHRsZW5ndGgpLCBcXHUwMDI2bGVuZ3RoKTtcXG4rXFxuK1xcdGlmIChiYXJfb2ZmKVxcbitcXHRcXHQqYmFyX29mZiA9IG9mZnNldDtcXG4rXFxuK1xcdGlmIChsZW5ndGggXFx1MDAzYz0gc3RhcnQpIHtcXG4rXFx0XFx0ZGV2X2Vycih6eGRoX2Rldi1cXHUwMDNlZGV2aWNlLCBcXFwiYmFkIGNhcGFiaWxpdHkgbGVuICV1IChcXHUwMDNlJXUgZXhwZWN0ZWQpXFxcXG5cXFwiLFxcbitcXHRcXHRcXHRsZW5ndGgsIHN0YXJ0KTtcXG4rXFx0XFx0cmV0dXJuIE5VTEw7XFxuK1xcdH1cXG4rXFxuK1xcdGlmIChsZW5ndGggLSBzdGFydCBcXHUwMDNjIG1pbmxlbikge1xcbitcXHRcXHRkZXZfZXJyKHp4ZGhfZGV2LVxcdTAwM2VkZXZpY2UsIFxcXCJiYWQgY2FwYWJpbGl0eSBsZW4gJXUgKFxcdTAwM2U9JXp1IGV4cGVjdGVkKVxcXFxuXFxcIixcXG4rXFx0XFx0XFx0bGVuZ3RoLCBtaW5sZW4pO1xcbitcXHRcXHRyZXR1cm4gTlVMTDtcXG4rXFx0fVxcbitcXG4rXFx0bGVuZ3RoIC09IHN0YXJ0O1xcbitcXHRpZiAoc3RhcnQgKyBvZmZzZXQgXFx1MDAzYyBvZmZzZXQpIHtcXG4rXFx0XFx0ZGV2X2Vycih6eGRoX2Rldi1cXHUwMDNlZGV2aWNlLCBcXFwibWFwIHdyYXAtYXJvdW5kICV1KyV1XFxcXG5cXFwiLCBzdGFydCwgb2Zmc2V0KTtcXG4rXFx0XFx0cmV0dXJuIE5VTEw7XFxuK1xcdH1cXG4rXFxuK1xcdG9mZnNldCArPSBzdGFydDtcXG4rXFx0aWYgKG9mZnNldCBcXHUwMDI2IChhbGlnbiAtIDEpKSB7XFxuK1xcdFxcdGRldl9lcnIoenhkaF9kZXYtXFx1MDAzZWRldmljZSwgXFxcIm9mZnNldCAldSBub3QgYWxpZ25lZCB0byAldVxcXFxuXFxcIiwgb2Zmc2V0LCBhbGlnbik7XFxuK1xcdFxcdHJldHVybiBOVUxMO1xcbitcXHR9XFxuK1xcbitcXHRpZiAobGVuZ3RoIFxcdTAwM2Ugc2l6ZSlcXG4rXFx0XFx0bGVuZ3RoID0gc2l6ZTtcXG4rXFxuK1xcdGlmIChsZW4pXFxuK1xcdFxcdCpsZW4gPSBsZW5ndGg7XFxuK1xcbitcXHRpZiAobGVuZ3RoICsgb2Zmc2V0IFxcdTAwM2Mgb2Zmc2V0IHx8XFxuK1xcdCAgICBsZW5ndGggKyBvZmZzZXQgXFx1MDAzZSBwY2lfcmVzb3VyY2VfbGVuKHBkZXYsIGJhcikpIHtcXG4rXFx0XFx0ZGV2X2Vycih6eGRoX2Rldi1cXHUwMDNlZGV2aWNlLFxcbitcXHRcXHRcXHRcXFwibWFwICV1QCV1IG91dCBvZiByYW5nZSBvbiBiYXIgJXUgbGVuZ3RoICVsdVxcXFxuXFxcIixcXG4rXFx0XFx0XFx0bGVuZ3RoLCBvZmZzZXQsIGJhcixcXG4rXFx0XFx0XFx0KHVuc2lnbmVkIGxvbmcpcGNpX3Jlc291cmNlX2xlbihwZGV2LCBiYXIpKTtcXG4rXFx0XFx0cmV0dXJuIE5VTEw7XFxuK1xcdH1cXG4rXFxuK1xcdHAgPSBwY2lfaW9tYXBfcmFuZ2UocGRldiwgYmFyLCBvZmZzZXQsIGxlbmd0aCk7XFxuK1xcdGlmICghcCkge1xcbitcXHRcXHRkZXZfZXJyKHp4ZGhfZGV2LVxcdTAwM2VkZXZpY2UsIFxcXCJ1bmFibGUgdG8gbWFwIGN1c3RvbSBxdWV1ZSAldUAldSBvbiBiYXIgJXVcXFxcblxcXCIsXFxuK1xcdFxcdFxcdGxlbmd0aCwgb2Zmc2V0LCBiYXIpO1xcbitcXHR9IGVsc2UgaWYgKHBhKSB7XFxuK1xcdFxcdCpwYSA9IHBjaV9yZXNvdXJjZV9zdGFydChwZGV2LCBiYXIpICsgb2Zmc2V0O1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gcDtcXG4rfVxcbitcXG4raW50IHp4ZGhfcGZfY29tbW9uX2NmZ19pbml0KHN0cnVjdCB6eGRoX2NvcmVfZGV2ICp6eGRoX2RldilcXG4re1xcbitcXHRzdHJ1Y3QgenhkaF9wZl9kZXYgKnBmX2RldiA9IHp4ZGhfZGV2LVxcdTAwM2Vwcml2O1xcbitcXHRzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IHp4ZGhfZGV2LVxcdTAwM2VwZGV2O1xcbitcXHRpbnQgY29tbW9uO1xcbitcXG4rXFx0LyogY2hlY2sgZm9yIGEgY29tbW9uIGNvbmZpZzogaWYgbm90LCB1c2UgbGVnYWN5IG1vZGUgKGJhciAwKS4gKi9cXG4rXFx0Y29tbW9uID0genhkaF9wZl9wY2lfZmluZF9jYXBhYmlsaXR5KHBkZXYsIFpYREhfUENJX0NBUF9DT01NT05fQ0ZHLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgIElPUkVTT1VSQ0VfTUVNLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgIFxcdTAwMjZwZl9kZXYtXFx1MDAzZW1vZGVybl9iYXJzKTtcXG4rXFx0aWYgKCFjb21tb24pIHtcXG4rXFx0XFx0ZGV2X2Vycih6eGRoX2Rldi1cXHUwMDNlZGV2aWNlLFxcbitcXHRcXHRcXHRcXFwibWlzc2luZyBjYXBhYmlsaXRpZXMsIGxlYXZpbmcgZm9yIGxlZ2FjeSBkcml2ZXJcXFxcblxcXCIpO1xcbitcXHRcXHRyZXR1cm4gLUVOT0RFVjtcXG4rXFx0fVxcbitcXG4rXFx0cGZfZGV2LVxcdTAwM2Vjb21tb24gPSB6eGRoX3BmX21hcF9jYXBhYmlsaXR5KHp4ZGhfZGV2LCBjb21tb24sXFxuK1xcdFxcdFxcdFxcdFxcdFxcdHNpemVvZihzdHJ1Y3QgenhkaF9wZl9wY2lfY29tbW9uX2NmZyksXFxuK1xcdFxcdFxcdFxcdFxcdFxcdFpYREhfUEZfQUxJR040LCAwLFxcbitcXHRcXHRcXHRcXHRcXHRcXHRzaXplb2Yoc3RydWN0IHp4ZGhfcGZfcGNpX2NvbW1vbl9jZmcpLFxcbitcXHRcXHRcXHRcXHRcXHRcXHROVUxMLCBOVUxMLCBOVUxMKTtcXG4rXFx0aWYgKCFwZl9kZXYtXFx1MDAzZWNvbW1vbikge1xcbitcXHRcXHRkZXZfZXJyKHp4ZGhfZGV2LVxcdTAwM2VkZXZpY2UsIFxcXCJwZl9kZXYtXFx1MDAzZWNvbW1vbiBpcyBudWxsXFxcXG5cXFwiKTtcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitpbnQgenhkaF9wZl9ub3RpZnlfY2ZnX2luaXQoc3RydWN0IHp4ZGhfY29yZV9kZXYgKnp4ZGhfZGV2KVxcbit7XFxuK1xcdHN0cnVjdCB6eGRoX3BmX2RldiAqcGZfZGV2ID0genhkaF9kZXYtXFx1MDAzZXByaXY7XFxuK1xcdHN0cnVjdCBwY2lfZGV2ICpwZGV2ID0genhkaF9kZXYtXFx1MDAzZXBkZXY7XFxuK1xcdHUzMiBub3RpZnlfbGVuZ3RoO1xcbitcXHR1MzIgbm90aWZ5X29mZnNldDtcXG4rXFx0aW50IG5vdGlmeTtcXG4rXFxuK1xcdC8qIElmIGNvbW1vbiBpcyB0aGVyZSwgdGhlc2Ugc2hvdWxkIGJlIHRvby4uLiAqL1xcbitcXHRub3RpZnkgPSB6eGRoX3BmX3BjaV9maW5kX2NhcGFiaWxpdHkocGRldiwgWlhESF9QQ0lfQ0FQX05PVElGWV9DRkcsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgSU9SRVNPVVJDRV9NRU0sXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgXFx1MDAyNnBmX2Rldi1cXHUwMDNlbW9kZXJuX2JhcnMpO1xcbitcXHRpZiAoIW5vdGlmeSkge1xcbitcXHRcXHRkZXZfZXJyKHp4ZGhfZGV2LVxcdTAwM2VkZXZpY2UsIFxcXCJtaXNzaW5nIG5vdGlmeSBjZmcgY2FwYWJpbGl0eVxcXFxuXFxcIik7XFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXHR9XFxuK1xcbitcXHRwY2lfcmVhZF9jb25maWdfZHdvcmQocGRldixcXG4rXFx0XFx0XFx0ICAgICAgbm90aWZ5ICsgb2Zmc2V0b2Yoc3RydWN0IHp4ZGhfcGZfcGNpX25vdGlmeV9jYXAsXFxuK1xcdFxcdFxcdFxcdG5vdGlmeV9vZmZfbXVsdGlwbGllciksXFxuK1xcdFxcdFxcdTAwMjZwZl9kZXYtXFx1MDAzZW5vdGlmeV9vZmZzZXRfbXVsdGlwbGllcik7XFxuK1xcdHBjaV9yZWFkX2NvbmZpZ19kd29yZChwZGV2LFxcbitcXHRcXHRcXHQgICAgICBub3RpZnkgKyBvZmZzZXRvZihzdHJ1Y3QgenhkaF9wZl9wY2lfbm90aWZ5X2NhcCxcXG4rXFx0XFx0XFx0XFx0Y2FwLmxlbmd0aCksIFxcdTAwMjZub3RpZnlfbGVuZ3RoKTtcXG4rXFx0cGNpX3JlYWRfY29uZmlnX2R3b3JkKHBkZXYsXFxuK1xcdFxcdFxcdCAgICAgIG5vdGlmeSArIG9mZnNldG9mKHN0cnVjdCB6eGRoX3BmX3BjaV9ub3RpZnlfY2FwLFxcbitcXHRcXHRcXHRcXHRjYXAub2Zmc2V0KSwgXFx1MDAyNm5vdGlmeV9vZmZzZXQpO1xcbitcXG4rXFx0LyogV2UgZG9uJ3Qga25vdyBob3cgbWFueSBWUXMgd2UnbGwgbWFwLCBhaGVhZCBvZiB0aGUgdGltZS5cXG4rXFx0ICogSWYgbm90aWZ5IGxlbmd0aCBpcyBzbWFsbCwgbWFwIGl0IGFsbCBub3cuIE90aGVyd2lzZSxcXG4rXFx0ICogbWFwIGVhY2ggVlEgaW5kaXZpZHVhbGx5IGxhdGVyLlxcbitcXHQgKi9cXG4rXFx0aWYgKG5vdGlmeV9sZW5ndGggXFx1MDAzYz0gUEFHRV9TSVpFIC0gKG5vdGlmeV9vZmZzZXQgJSBQQUdFX1NJWkUpKSB7XFxuK1xcdFxcdHBmX2Rldi1cXHUwMDNlbm90aWZ5X2Jhc2UgPSB6eGRoX3BmX21hcF9jYXBhYmlsaXR5KHp4ZGhfZGV2LCBub3RpZnksXFxuK1xcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICAgWlhESF9QRl9NQVBfTUlOTEVOMixcXG4rXFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgIFpYREhfUEZfQUxJR04yLCAwLFxcbitcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgbm90aWZ5X2xlbmd0aCxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgIFxcdTAwMjZwZl9kZXYtXFx1MDAzZW5vdGlmeV9sZW4sXFxuK1xcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICBcXHUwMDI2cGZfZGV2LVxcdTAwM2Vub3RpZnlfcGEsIE5VTEwpO1xcbitcXHRcXHRpZiAoIXBmX2Rldi1cXHUwMDNlbm90aWZ5X2Jhc2UpIHtcXG4rXFx0XFx0XFx0ZGV2X2Vycih6eGRoX2Rldi1cXHUwMDNlZGV2aWNlLCBcXFwicGZfZGV2LVxcdTAwM2Vub3RpZnlfYmFzZSBpcyBudWxsXFxcXG5cXFwiKTtcXG4rXFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcdFxcdH1cXG4rXFx0fSBlbHNlIHtcXG4rXFx0XFx0cGZfZGV2LVxcdTAwM2Vub3RpZnlfbWFwX2NhcCA9IG5vdGlmeTtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK2ludCB6eGRoX3BmX2RldmljZV9jZmdfaW5pdChzdHJ1Y3QgenhkaF9jb3JlX2RldiAqenhkaF9kZXYpXFxuK3tcXG4rXFx0c3RydWN0IHp4ZGhfcGZfZGV2ICpwZl9kZXYgPSB6eGRoX2Rldi1cXHUwMDNlcHJpdjtcXG4rXFx0c3RydWN0IHBjaV9kZXYgKnBkZXYgPSB6eGRoX2Rldi1cXHUwMDNlcGRldjtcXG4rXFx0aW50IGRldmljZTtcXG4rXFxuK1xcdC8qIERldmljZSBjYXBhYmlsaXR5IGlzIG9ubHkgbWFuZGF0b3J5IGZvclxcbitcXHQgKiBkZXZpY2VzIHRoYXQgaGF2ZSBkZXZpY2Utc3BlY2lmaWMgY29uZmlndXJhdGlvbi5cXG4rXFx0ICovXFxuK1xcdGRldmljZSA9IHp4ZGhfcGZfcGNpX2ZpbmRfY2FwYWJpbGl0eShwZGV2LCBaWERIX1BDSV9DQVBfREVWSUNFX0NGRyxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICBJT1JFU09VUkNFX01FTSxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICBcXHUwMDI2cGZfZGV2LVxcdTAwM2Vtb2Rlcm5fYmFycyk7XFxuK1xcbitcXHQvKiB3ZSBkb24ndCBrbm93IGhvdyBtdWNoIHdlIHNob3VsZCBtYXAsXFxuK1xcdCAqIGJ1dCBQQUdFX1NJWkUgaXMgbW9yZSB0aGFuIGVub3VnaCBmb3IgYWxsIGV4aXN0aW5nIGRldmljZXMuXFxuK1xcdCAqL1xcbitcXHRpZiAoZGV2aWNlKSB7XFxuK1xcdFxcdHBmX2Rldi1cXHUwMDNlZGV2aWNlID0genhkaF9wZl9tYXBfY2FwYWJpbGl0eSh6eGRoX2RldiwgZGV2aWNlLCAwLFxcbitcXHRcXHRcXHRcXHRcXHRcXHRcXHRaWERIX1BGX0FMSUdONCwgMCwgUEFHRV9TSVpFLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgICAgICAgXFx1MDAyNnBmX2Rldi1cXHUwMDNlZGV2aWNlX2xlbiwgTlVMTCxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgIFxcdTAwMjZwZl9kZXYtXFx1MDAzZWRldl9jZmdfYmFyX29mZik7XFxuK1xcdFxcdGlmICghcGZfZGV2LVxcdTAwM2VkZXZpY2UpIHtcXG4rXFx0XFx0XFx0ZGV2X2Vycih6eGRoX2Rldi1cXHUwMDNlZGV2aWNlLCBcXFwicGZfZGV2LVxcdTAwM2VkZXZpY2UgaXMgbnVsbFxcXFxuXFxcIik7XFxuK1xcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXHRcXHR9XFxuK1xcdH1cXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3ZvaWQgenhkaF9wZl9tb2Rlcm5fY2ZnX3VuaW5pdChzdHJ1Y3QgenhkaF9jb3JlX2RldiAqenhkaF9kZXYpXFxuK3tcXG4rXFx0c3RydWN0IHp4ZGhfcGZfZGV2ICpwZl9kZXYgPSB6eGRoX2Rldi1cXHUwMDNlcHJpdjtcXG4rXFx0c3RydWN0IHBjaV9kZXYgKnBkZXYgPSB6eGRoX2Rldi1cXHUwMDNlcGRldjtcXG4rXFxuK1xcdGlmIChwZl9kZXYtXFx1MDAzZWRldmljZSlcXG4rXFx0XFx0cGNpX2lvdW5tYXAocGRldiwgcGZfZGV2LVxcdTAwM2VkZXZpY2UpO1xcbitcXHRpZiAocGZfZGV2LVxcdTAwM2Vub3RpZnlfYmFzZSlcXG4rXFx0XFx0cGNpX2lvdW5tYXAocGRldiwgcGZfZGV2LVxcdTAwM2Vub3RpZnlfYmFzZSk7XFxuK1xcdHBjaV9pb3VubWFwKHBkZXYsIHBmX2Rldi1cXHUwMDNlY29tbW9uKTtcXG4rfVxcbitcXG4raW50IHp4ZGhfcGZfbW9kZXJuX2NmZ19pbml0KHN0cnVjdCB6eGRoX2NvcmVfZGV2ICp6eGRoX2RldilcXG4re1xcbitcXHRzdHJ1Y3QgenhkaF9wZl9kZXYgKnBmX2RldiA9IHp4ZGhfZGV2LVxcdTAwM2Vwcml2O1xcbitcXHRzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IHp4ZGhfZGV2LVxcdTAwM2VwZGV2O1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0cmV0ID0genhkaF9wZl9jb21tb25fY2ZnX2luaXQoenhkaF9kZXYpO1xcbitcXHRpZiAocmV0KSB7XFxuK1xcdFxcdGRldl9lcnIoenhkaF9kZXYtXFx1MDAzZWRldmljZSwgXFxcInp4ZGhfcGZfY29tbW9uX2NmZ19pbml0IGZhaWxlZDogJWRcXFxcblxcXCIsIHJldCk7XFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcdH1cXG4rXFxuK1xcdHJldCA9IHp4ZGhfcGZfbm90aWZ5X2NmZ19pbml0KHp4ZGhfZGV2KTtcXG4rXFx0aWYgKHJldCkge1xcbitcXHRcXHRkZXZfZXJyKHp4ZGhfZGV2LVxcdTAwM2VkZXZpY2UsIFxcXCJ6eGRoX3BmX25vdGlmeV9jZmdfaW5pdCBmYWlsZWQ6ICVkXFxcXG5cXFwiLCByZXQpO1xcbitcXHRcXHRnb3RvIGVycl9tYXBfbm90aWZ5O1xcbitcXHR9XFxuK1xcbitcXHRyZXQgPSB6eGRoX3BmX2RldmljZV9jZmdfaW5pdCh6eGRoX2Rldik7XFxuK1xcdGlmIChyZXQpIHtcXG4rXFx0XFx0ZGV2X2Vycih6eGRoX2Rldi1cXHUwMDNlZGV2aWNlLCBcXFwienhkaF9wZl9kZXZpY2VfY2ZnX2luaXQgZmFpbGVkOiAlZFxcXFxuXFxcIiwgcmV0KTtcXG4rXFx0XFx0Z290byBlcnJfbWFwX2RldmljZTtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIDA7XFxuK1xcbitlcnJfbWFwX2RldmljZTpcXG4rXFx0aWYgKHBmX2Rldi1cXHUwMDNlbm90aWZ5X2Jhc2UpXFxuK1xcdFxcdHBjaV9pb3VubWFwKHBkZXYsIHBmX2Rldi1cXHUwMDNlbm90aWZ5X2Jhc2UpO1xcbitlcnJfbWFwX25vdGlmeTpcXG4rXFx0cGNpX2lvdW5tYXAocGRldiwgcGZfZGV2LVxcdTAwM2Vjb21tb24pO1xcbitcXHRyZXR1cm4gcmV0O1xcbit9XFxuK1xcbitzdGF0aWMgaW50IHp4ZGhfcGZfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICppZClcXG4re1xcbitcXHRzdHJ1Y3QgenhkaF9jb3JlX2RldiAqenhkaF9kZXY7XFxuK1xcdHN0cnVjdCB6eGRoX3BmX2RldiAqcGZfZGV2O1xcbitcXHRzdHJ1Y3QgZGV2bGluayAqZGV2bGluaztcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdGRldmxpbmsgPSBkZXZsaW5rX2FsbG9jKFxcdTAwMjZ6eGRoX3BmX2Rldmxpbmtfb3BzLCBzaXplb2Yoc3RydWN0IHp4ZGhfY29yZV9kZXYpLFxcbitcXHRcXHRcXHRcXHRcXHUwMDI2cGRldi1cXHUwMDNlZGV2KTtcXG4rXFx0aWYgKCFkZXZsaW5rKVxcbitcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4rXFxuK1xcdHp4ZGhfZGV2ID0gZGV2bGlua19wcml2KGRldmxpbmspO1xcbitcXHR6eGRoX2Rldi1cXHUwMDNlZGV2aWNlID0gXFx1MDAyNnBkZXYtXFx1MDAzZWRldjtcXG4rXFx0enhkaF9kZXYtXFx1MDAzZXBkZXYgPSBwZGV2O1xcbitcXHR6eGRoX2Rldi1cXHUwMDNlZGV2bGluayA9IGRldmxpbms7XFxuK1xcbitcXHRwZl9kZXYgPSB6eGRoX2NvcmVfYWxsb2NfcHJpdih6eGRoX2Rldiwgc2l6ZW9mKCpwZl9kZXYpKTtcXG4rXFx0aWYgKCFwZl9kZXYpIHtcXG4rXFx0XFx0ZGV2X2VycihcXHUwMDI2cGRldi1cXHUwMDNlZGV2LCBcXFwienhkaF9wZl9kZXYgYWxsb2MgZmFpbGVkXFxcXG5cXFwiKTtcXG4rXFx0XFx0cmV0ID0gLUVOT01FTTtcXG4rXFx0XFx0Z290byBlcnJfcGZfZGV2O1xcbitcXHR9XFxuK1xcbitcXHRyZXQgPSB6eGRoX3BmX3BjaV9pbml0KHp4ZGhfZGV2KTtcXG4rXFx0aWYgKHJldCkge1xcbitcXHRcXHRkZXZfZXJyKFxcdTAwMjZwZGV2LVxcdTAwM2VkZXYsIFxcXCJ6eGRoX3BmX3BjaV9pbml0IGZhaWxlZDogJWRcXFxcblxcXCIsIHJldCk7XFxuK1xcdFxcdGdvdG8gZXJyX3BjaV9pbml0O1xcbitcXHR9XFxuK1xcbitcXHRyZXQgPSB6eGRoX3BmX21vZGVybl9jZmdfaW5pdCh6eGRoX2Rldik7XFxuK1xcdGlmIChyZXQpIHtcXG4rXFx0XFx0ZGV2X2VycihcXHUwMDI2cGRldi1cXHUwMDNlZGV2LCBcXFwienhkaF9wZl9tb2Rlcm5fY2ZnX2luaXQgZmFpbGVkOiAlZFxcXFxuXFxcIiwgcmV0KTtcXG4rXFx0XFx0Z290byBlcnJfY2ZnX2luaXQ7XFxuK1xcdH1cXG4rXFxuK1xcdGRldmxpbmtfcmVnaXN0ZXIoZGV2bGluayk7XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rXFxuK2Vycl9jZmdfaW5pdDpcXG4rXFx0enhkaF9wZl9wY2lfY2xvc2UoenhkaF9kZXYpO1xcbitlcnJfcGNpX2luaXQ6XFxuK1xcdHp4ZGhfY29yZV9mcmVlX3ByaXYoenhkaF9kZXYpO1xcbitlcnJfcGZfZGV2OlxcbitcXHRkZXZsaW5rX2ZyZWUoZGV2bGluayk7XFxuK1xcdHJldHVybiByZXQ7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIHp4ZGhfcGZfcmVtb3ZlKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxcbit7XFxuK1xcdHN0cnVjdCB6eGRoX2NvcmVfZGV2ICp6eGRoX2RldiA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTtcXG4rXFx0c3RydWN0IGRldmxpbmsgKmRldmxpbmsgPSBwcml2X3RvX2RldmxpbmsoenhkaF9kZXYpO1xcbitcXG4rXFx0ZGV2bGlua191bnJlZ2lzdGVyKGRldmxpbmspO1xcbitcXHR6eGRoX3BmX21vZGVybl9jZmdfdW5pbml0KHp4ZGhfZGV2KTtcXG4rXFx0enhkaF9wZl9wY2lfY2xvc2UoenhkaF9kZXYpO1xcbitcXHR6eGRoX2NvcmVfZnJlZV9wcml2KHp4ZGhfZGV2KTtcXG4rXFx0ZGV2bGlua19mcmVlKGRldmxpbmspO1xcbitcXHRwY2lfc2V0X2RydmRhdGEocGRldiwgTlVMTCk7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIHp4ZGhfcGZfc2h1dGRvd24oc3RydWN0IHBjaV9kZXYgKnBkZXYpXFxuK3tcXG4rXFx0aWYgKHN5c3RlbV9zdGF0ZSA9PSBTWVNURU1fUE9XRVJfT0ZGKVxcbitcXHRcXHRwY2lfc2V0X3Bvd2VyX3N0YXRlKHBkZXYsIFBDSV9EM2hvdCk7XFxuK1xcdHBjaV9kaXNhYmxlX2RldmljZShwZGV2KTtcXG4rfVxcbitcXG4rc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIHp4ZGhfcGZfZHJpdmVyID0ge1xcbitcXHQubmFtZSA9IFxcXCJkaW5naGFpMTBlXFxcIixcXG4rXFx0LmlkX3RhYmxlID0genhkaF9wZl9wY2lfdGFibGUsXFxuK1xcdC5wcm9iZSA9IHp4ZGhfcGZfcHJvYmUsXFxuK1xcdC5yZW1vdmUgPSB6eGRoX3BmX3JlbW92ZSxcXG4rXFx0LnNodXRkb3duID0genhkaF9wZl9zaHV0ZG93bixcXG4rfTtcXG4rXFxuK21vZHVsZV9wY2lfZHJpdmVyKHp4ZGhfcGZfZHJpdmVyKTtcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmhcXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxcbmluZGV4IDAwMDAwMDAwMDAwMDAuLjczNzNkZWU4ZDFhOWZcXG4tLS0gL2Rldi9udWxsXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuaFxcbkBAIC0wLDAgKzEsNzUgQEBcXG4rLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seSAqL1xcbisvKlxcbisgKiBaVEUgRGluZ0hhaSBFdGhlcm5ldCBkcml2ZXIgLSBQRiBoZWFkZXJcXG4rICogQ29weXJpZ2h0IChjKSAyMDIyLTIwMjYsIFpURSBDb3Jwb3JhdGlvbi5cXG4rICovXFxuK1xcbisjaWZuZGVmIF9fWlhESF9FTl9QRl9IX19cXG4rI2RlZmluZSBfX1pYREhfRU5fUEZfSF9fXFxuK1xcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvdHlwZXMuaFxcdTAwM2VcXG4rXFxuKyNkZWZpbmUgWlhESF9QRl9WRU5ET1JfSURcXHQweDFjZjJcXG4rI2RlZmluZSBaWERIX1BGX0RFVklDRV9JRFxcdDB4ODA0MFxcbisjZGVmaW5lIFpYREhfVkZfREVWSUNFX0lEXFx0MHg4MDQxXFxuK1xcbisvKiBDb21tb24gY29uZmlndXJhdGlvbiAqL1xcbisjZGVmaW5lIFpYREhfUENJX0NBUF9DT01NT05fQ0ZHXFx0MVxcbisvKiBOb3RpZmljYXRpb25zICovXFxuKyNkZWZpbmUgWlhESF9QQ0lfQ0FQX05PVElGWV9DRkdcXHQyXFxuKy8qIElTUiBhY2Nlc3MgKi9cXG4rI2RlZmluZSBaWERIX1BDSV9DQVBfSVNSX0NGR1xcdFxcdDNcXG4rLyogRGV2aWNlIHNwZWNpZmljIGNvbmZpZ3VyYXRpb24gKi9cXG4rI2RlZmluZSBaWERIX1BDSV9DQVBfREVWSUNFX0NGR1xcdDRcXG4rLyogUENJIGNvbmZpZ3VyYXRpb24gYWNjZXNzICovXFxuKyNkZWZpbmUgWlhESF9QQ0lfQ0FQX1BDSV9DRkdcXHRcXHQ1XFxuK1xcbisjZGVmaW5lIFpYREhfUEZfTUFYX0JBUl9WQUxcXHRcXHQweDVcXG4rI2RlZmluZSBaWERIX1BGX0FMSUdONFxcdFxcdFxcdDRcXG4rI2RlZmluZSBaWERIX1BGX0FMSUdOMlxcdFxcdFxcdDJcXG4rI2RlZmluZSBaWERIX1BGX01BUF9NSU5MRU4yXFx0XFx0MlxcbitcXG4rc3RydWN0IHp4ZGhfY29yZV9kZXYge1xcbitcXHRzdHJ1Y3QgZGV2aWNlICpkZXZpY2U7XFxuK1xcdHN0cnVjdCBwY2lfZGV2ICpwZGV2O1xcbitcXHRzdHJ1Y3QgZGV2bGluayAqZGV2bGluaztcXG4rXFx0dm9pZCAqcHJpdjtcXG4rfTtcXG4rXFxuK3N0cnVjdCB6eGRoX3BmX2RldiB7XFxuK1xcdHN0cnVjdCB6eGRoX3BmX3BjaV9jb21tb25fY2ZnIF9faW9tZW0gKmNvbW1vbjtcXG4rXFx0LyogRGV2aWNlLXNwZWNpZmljIGRhdGEgKG5vbi1sZWdhY3kgbW9kZSkgICovXFxuK1xcdC8qIEJhc2Ugb2YgdnEgbm90aWZpY2F0aW9ucyAobm9uLWxlZ2FjeSBtb2RlKS4gKi9cXG4rXFx0dm9pZCBfX2lvbWVtICpkZXZpY2U7XFxuK1xcdHZvaWQgX19pb21lbSAqbm90aWZ5X2Jhc2U7XFxuK1xcdC8qIFBoeXNpY2FsIGJhc2Ugb2YgdnEgbm90aWZpY2F0aW9ucyAqL1xcbitcXHRyZXNvdXJjZV9zaXplX3Qgbm90aWZ5X3BhO1xcbitcXHQvKiBTbyB3ZSBjYW4gc2FuaXR5LWNoZWNrIGFjY2Vzc2VzLiAqL1xcbitcXHRzaXplX3Qgbm90aWZ5X2xlbjtcXG4rXFx0c2l6ZV90IGRldmljZV9sZW47XFxuK1xcdC8qIENhcGFiaWxpdHkgZm9yIHdoZW4gd2UgbmVlZCB0byBtYXAgbm90aWZpY2F0aW9ucyBwZXItdnEuICovXFxuK1xcdHMzMiBub3RpZnlfbWFwX2NhcDtcXG4rXFx0dTMyIG5vdGlmeV9vZmZzZXRfbXVsdGlwbGllcjtcXG4rXFx0LyogTXVsdGlwbHkgcXVldWVfbm90aWZ5X29mZiBieSB0aGlzIHZhbHVlLiAobm9uLWxlZ2FjeSBtb2RlKS4gKi9cXG4rXFx0czMyIG1vZGVybl9iYXJzO1xcbitcXHR2b2lkIF9faW9tZW0gKnBjaV9pb3JlbWFwX2FkZHJbNl07XFxuK1xcdHUzMiBkZXZfY2ZnX2Jhcl9vZmY7XFxuK307XFxuK1xcbit2b2lkICp6eGRoX2NvcmVfYWxsb2NfcHJpdihzdHJ1Y3QgenhkaF9jb3JlX2RldiAqenhkaF9kZXYsIHNpemVfdCBzaXplKTtcXG4rdm9pZCB6eGRoX2NvcmVfZnJlZV9wcml2KHN0cnVjdCB6eGRoX2NvcmVfZGV2ICp6eGRoX2Rldik7XFxuK3ZvaWQgenhkaF9wZl9wY2lfY2xvc2Uoc3RydWN0IHp4ZGhfY29yZV9kZXYgKnp4ZGhfZGV2KTtcXG4raW50IHp4ZGhfcGZfcGNpX2ZpbmRfY2FwYWJpbGl0eShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgdTggY2ZnX3R5cGUsXFxuK1xcdFxcdFxcdFxcdHUzMiBpb3Jlc291cmNlX3R5cGVzLCBpbnQgKmJhcnMpO1xcbit2b2lkIF9faW9tZW0gKnp4ZGhfcGZfbWFwX2NhcGFiaWxpdHkoc3RydWN0IHp4ZGhfY29yZV9kZXYgKnp4ZGhfZGV2LCBpbnQgb2ZmLFxcbitcXHRcXHRcXHRcXHQgICAgIHNpemVfdCBtaW5sZW4sIHUzMiBhbGlnbixcXG4rXFx0XFx0XFx0XFx0ICAgICB1MzIgc3RhcnQsIHUzMiBzaXplLFxcbitcXHRcXHRcXHRcXHQgICAgIHNpemVfdCAqbGVuLCByZXNvdXJjZV9zaXplX3QgKnBhLFxcbitcXHRcXHRcXHRcXHQgICAgIHUzMiAqYmFyX29mZik7XFxuK2ludCB6eGRoX3BmX2NvbW1vbl9jZmdfaW5pdChzdHJ1Y3QgenhkaF9jb3JlX2RldiAqenhkaF9kZXYpO1xcbitpbnQgenhkaF9wZl9ub3RpZnlfY2ZnX2luaXQoc3RydWN0IHp4ZGhfY29yZV9kZXYgKnp4ZGhfZGV2KTtcXG4raW50IHp4ZGhfcGZfZGV2aWNlX2NmZ19pbml0KHN0cnVjdCB6eGRoX2NvcmVfZGV2ICp6eGRoX2Rldik7XFxuK3ZvaWQgenhkaF9wZl9tb2Rlcm5fY2ZnX3VuaW5pdChzdHJ1Y3QgenhkaF9jb3JlX2RldiAqenhkaF9kZXYpO1xcbitpbnQgenhkaF9wZl9tb2Rlcm5fY2ZnX2luaXQoc3RydWN0IHp4ZGhfY29yZV9kZXYgKnp4ZGhfZGV2KTtcXG4rXFxuKyNlbmRpZiAvKiBfX1pYREhfRU5fUEZfSF9fICovXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDE3OjQxOjMzLjI5MDkzOTc5WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6ODg1NzY0MDg3MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyB2ZW5kb3Itc3BlY2lmaWMgUENJZSBFdGhlcm5ldCBkcml2ZXIgKFpURSBEaW5nSGFpKS4gVGhpcyBkcml2ZXIgcmVxdWlyZXMgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSB0aGF0IGlzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLCBtYWtpbmcgaXQgdW5yZWFjaGFibGUgYW5kIHVudGVzdGFibGUgaW4gdmlydHVhbGl6ZWQgZnV6emluZyBlbnZpcm9ubWVudHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA1OWNjMTQyNzQ3NTM2ZDFmYTJhYzFjNTNmYTRiYzMxNDQ1NzkxZWIyXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFN1biBBdWcgMiAxNzo0MTozMSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL01BSU5UQUlORVJTIGIvTUFJTlRBSU5FUlNcbmluZGV4IDJmYjFjNzVhZmQxNjMuLjczNjkyYjA5YmY3YmEgMTAwNjQ0XG4tLS0gYS9NQUlOVEFJTkVSU1xuKysrIGIvTUFJTlRBSU5FUlNcbkBAIC0yOTQ0MCw2ICsyOTQ0MCwxMiBAQCBTOlx0TWFpbnRhaW5lZFxuIFQ6XHRnaXQgZ2l0Oi8vZ2l0Lmtlcm5lbC5vcmcvcHViL3NjbS9saW51eC9rZXJuZWwvZ2l0L3Rpd2FpL3NvdW5kLmdpdFxuIEY6XHRzb3VuZC9oZGEvY29kZWNzL3NlbmFyeXRlY2guY1xuIFxuK1pURSBESU5HSEFJIEVUSEVSTkVUIERSSVZFUlxuK006XHRKdW55YW5nIEhhbiBcdTAwM2NoYW4uanVueWFuZ0B6dGUuY29tLmNuXHUwMDNlXG4rTDpcdG5ldGRldkB2Z2VyLmtlcm5lbC5vcmdcbitTOlx0TWFpbnRhaW5lZFxuK0Y6XHRkcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvXG4rXG4gVEhFIFJFU1RcbiBNOlx0TGludXMgVG9ydmFsZHMgXHUwMDNjdG9ydmFsZHNAbGludXgtZm91bmRhdGlvbi5vcmdcdTAwM2VcbiBMOlx0bGludXgta2VybmVsQHZnZXIua2VybmVsLm9yZ1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L0tjb25maWcgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9LY29uZmlnXG5pbmRleCBiOGY3MGUyYTE3NjNhLi5jMmI2OTk2YjBjZmUxIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvS2NvbmZpZ1xuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvS2NvbmZpZ1xuQEAgLTE4OCw1ICsxODgsNiBAQCBzb3VyY2UgXCJkcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL0tjb25maWdcIlxuIHNvdXJjZSBcImRyaXZlcnMvbmV0L2V0aGVybmV0L3dpem5ldC9LY29uZmlnXCJcbiBzb3VyY2UgXCJkcml2ZXJzL25ldC9ldGhlcm5ldC94aWxpbngvS2NvbmZpZ1wiXG4gc291cmNlIFwiZHJpdmVycy9uZXQvZXRoZXJuZXQveGlyY29tL0tjb25maWdcIlxuK3NvdXJjZSBcImRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9LY29uZmlnXCJcbiBcbiBlbmRpZiAjIEVUSEVSTkVUXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvTWFrZWZpbGUgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9NYWtlZmlsZVxuaW5kZXggNTczNDRmZWM2Y2UwNC4uYTM0YmNiZDRkZjRlOSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L01ha2VmaWxlXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9NYWtlZmlsZVxuQEAgLTEwNCwzICsxMDQsNCBAQCBvYmotJChDT05GSUdfTkVUX1ZFTkRPUl9YSVJDT00pICs9IHhpcmNvbS9cbiBvYmotJChDT05GSUdfTkVUX1ZFTkRPUl9TWU5PUFNZUykgKz0gc3lub3BzeXMvXG4gb2JqLSQoQ09ORklHX05FVF9WRU5ET1JfUEVOU0FORE8pICs9IHBlbnNhbmRvL1xuIG9iai0kKENPTkZJR19PQV9UQzYpICs9IG9hX3RjNi5vXG4rb2JqLSQoQ09ORklHX05FVF9WRU5ET1JfWlRFKSArPSB6dGUvXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL0tjb25maWcgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvS2NvbmZpZ1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLmI5NWMyZmM3ZGI3N2Fcbi0tLSAvZGV2L251bGxcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9LY29uZmlnXG5AQCAtMCwwICsxLDIwIEBAXG4rIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4rI1xuKyMgWlRFIGRyaXZlciBjb25maWd1cmF0aW9uXG4rI1xuK1xuK2NvbmZpZyBORVRfVkVORE9SX1pURVxuKyAgICBib29sIFwiWlRFIGRldmljZXNcIlxuKyAgICBkZWZhdWx0IHlcbisgICAgaGVscFxuKyAgICAgIElmIHlvdSBoYXZlIGEgbmV0d29yayAoRXRoZXJuZXQpIGNhcmQgYmVsb25naW5nIHRvIHRoaXMgY2xhc3MsIHNheSBZLlxuKyAgICAgIE5vdGUgdGhhdCB0aGUgYW5zd2VyIHRvIHRoaXMgcXVlc3Rpb24gZG9lc24ndCBkaXJlY3RseSBhZmZlY3QgdGhlXG4rICAgICAga2VybmVsOiBzYXlpbmcgTiB3aWxsIGp1c3QgY2F1c2UgdGhlIGNvbmZpZ3VyYXRvciB0byBza2lwIGFsbFxuKyAgICAgIHRoZSBxdWVzdGlvbnMgYWJvdXQgWnRlIGNhcmRzLiBJZiB5b3Ugc2F5IFksIHlvdSB3aWxsIGJlIGFza2VkXG4rICAgICAgZm9yIHlvdXIgc3BlY2lmaWMgY2FyZCBpbiB0aGUgZm9sbG93aW5nIHF1ZXN0aW9ucy5cbitcbitpZiBORVRfVkVORE9SX1pURVxuK1xuK3NvdXJjZSBcImRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL0tjb25maWdcIlxuK1xuK2VuZGlmICMgTkVUX1ZFTkRPUl9aVEVcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvTWFrZWZpbGUgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvTWFrZWZpbGVcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwLi5jZDk5MjliNjE1NTljXG4tLS0gL2Rldi9udWxsXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvTWFrZWZpbGVcbkBAIC0wLDAgKzEsNiBAQFxuKyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuKyNcbisjIE1ha2VmaWxlIGZvciB0aGUgWlRFIGRldmljZSBkcml2ZXJzXG4rI1xuK1xuK29iai0kKENPTkZJR19ESU5HSEFJKSArPSBkaW5naGFpL1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL0tjb25maWcgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9LY29uZmlnXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uMTIxYmUzYmY3NzA3ZlxuLS0tIC9kZXYvbnVsbFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvS2NvbmZpZ1xuQEAgLTAsMCArMSwzNCBAQFxuKyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuKyNcbisjIFpURSBEaW5nSGFpIEV0aGVybmV0IGRyaXZlciBjb25maWd1cmF0aW9uXG4rI1xuK1xuK2NvbmZpZyBESU5HSEFJXG4rICAgIGJvb2wgXCJaVEUgRGluZ0hhaSBFdGhlcm5ldCBkcml2ZXJcIlxuKyAgICBkZXBlbmRzIG9uIFBDSVxuKyAgICBzZWxlY3QgTkVUX0RFVkxJTktcbisgICAgaGVscFxuKyAgICAgIFRoaXMgZHJpdmVyIHN1cHBvcnRzIFpURSBEaW5nSGFpIEV0aGVybmV0IGRldmljZXMuXG4rXG4rICAgICAgRGluZ0hhaSBpcyBhIGhpZ2gtcGVyZm9ybWFuY2UgRXRoZXJuZXQgY29udHJvbGxlciB0aGF0IHN1cHBvcnRzXG4rICAgICAgbXVsdGlwbGUgZmVhdHVyZXMgaW5jbHVkaW5nIGhhcmR3YXJlIG9mZmxvYWRpbmcsIFNSLUlPViwgYW5kXG4rICAgICAgYWR2YW5jZWQgdmlydHVhbGl6YXRpb24gY2FwYWJpbGl0aWVzLlxuK1xuKyAgICAgIElmIHlvdSBzYXkgWSBoZXJlLCB5b3UgY2FuIHNlbGVjdCBzcGVjaWZpYyBkcml2ZXIgdmFyaWFudHMgYmVsb3cuXG4rXG4rICAgICAgSWYgdW5zdXJlLCBzYXkgTi5cbitcbitpZiBESU5HSEFJXG4rXG4rY29uZmlnIERJTkdIQUlfUEZcbisgICAgdHJpc3RhdGUgXCJaVEUgRGluZ0hhaSBQRiAoUGh5c2ljYWwgRnVuY3Rpb24pIGRyaXZlclwiXG4rICAgIGhlbHBcbisgICAgICBUaGlzIGRyaXZlciBzdXBwb3J0cyBaVEUgRGluZ0hhaSBQQ0kgRXhwcmVzcyBFdGhlcm5ldFxuKyAgICAgIGFkYXB0ZXJzIChQRikuXG4rXG4rICAgICAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZS4gVGhlIG1vZHVsZVxuKyAgICAgIHdpbGwgYmUgbmFtZWQgZGluZ2hhaTEwZS5cbitcbisgICAgICBJZiB1bnN1cmUsIHNheSBOLlxuK1xuK2VuZGlmICMgRElOR0hBSVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL01ha2VmaWxlIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvTWFrZWZpbGVcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwLi5lMmY0ZGEzM2RmNTkzXG4tLS0gL2Rldi9udWxsXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9NYWtlZmlsZVxuQEAgLTAsMCArMSw3IEBAXG4rIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4rI1xuKyMgTWFrZWZpbGUgZm9yIFpURSBEaW5nSGFpIEV0aGVybmV0IGRyaXZlclxuKyNcbitcbitvYmotJChDT05GSUdfRElOR0hBSV9QRikgKz0gZGluZ2hhaTEwZS5vXG4rZGluZ2hhaTEwZS15IDo9IGVuX3BmLm9cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9kaF9xdWV1ZS5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZGhfcXVldWUuaFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLjViNjM4OTVjMWVhMWVcbi0tLSAvZGV2L251bGxcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2RoX3F1ZXVlLmhcbkBAIC0wLDAgKzEsNTYgQEBcbisvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5ICovXG4rLypcbisgKiBaVEUgRGluZ0hhaSBFdGhlcm5ldCBkcml2ZXIgLSBQQ0kgY2FwYWJpbGl0eSBkZWZpbml0aW9uc1xuKyAqIENvcHlyaWdodCAoYykgMjAyMi0yMDI2LCBaVEUgQ29ycG9yYXRpb24uXG4rICovXG4rXG4rI2lmbmRlZiBfX0RIX1FVRVVFX0hfX1xuKyNkZWZpbmUgX19ESF9RVUVVRV9IX19cbitcbisjaW5jbHVkZSBcdTAwM2NsaW51eC90eXBlcy5oXHUwMDNlXG4rXG4rLyogVGhpcyBpcyB0aGUgUENJIGNhcGFiaWxpdHkgaGVhZGVyOiAqL1xuK3N0cnVjdCB6eGRoX3BmX3BjaV9jYXAge1xuK1x0X191OCBjYXBfdm5kcjtcdFx0LyogR2VuZXJpYyBQQ0kgZmllbGQ6IFBDSV9DQVBfSURfVk5EUiAqL1xuK1x0X191OCBjYXBfbmV4dDtcdFx0LyogR2VuZXJpYyBQQ0kgZmllbGQ6IG5leHQgcHRyLiAqL1xuK1x0X191OCBjYXBfbGVuO1x0XHQvKiBHZW5lcmljIFBDSSBmaWVsZDogY2FwYWJpbGl0eSBsZW5ndGggKi9cbitcdF9fdTggY2ZnX3R5cGU7XHRcdC8qIElkZW50aWZpZXMgdGhlIHN0cnVjdHVyZS4gKi9cbitcdF9fdTggYmFyO1x0XHQvKiBXaGVyZSB0byBmaW5kIGl0LiAqL1xuK1x0X191OCBpZDtcdFx0LyogTXVsdGlwbGUgY2FwYWJpbGl0aWVzIG9mIHRoZSBzYW1lIHR5cGUgKi9cbitcdF9fdTggcGFkZGluZ1syXTtcdFx0LyogUGFkIHRvIGZ1bGwgZHdvcmQuICovXG4rXHRfX2xlMzIgb2Zmc2V0O1x0XHQvKiBPZmZzZXQgd2l0aGluIGJhci4gKi9cbitcdF9fbGUzMiBsZW5ndGg7XHRcdC8qIExlbmd0aCBvZiB0aGUgc3RydWN0dXJlLCBpbiBieXRlcy4gKi9cbit9O1xuK1xuKy8qIEZpZWxkcyBpbiBaWERIX1BGX1BDSV9DQVBfQ09NTU9OX0NGRzogKi9cbitzdHJ1Y3QgenhkaF9wZl9wY2lfY29tbW9uX2NmZyB7XG4rXHQvKiBBYm91dCB0aGUgd2hvbGUgZGV2aWNlLiAqL1xuK1x0X19sZTMyIGRldmljZV9mZWF0dXJlX3NlbGVjdDsgLyogcmVhZC13cml0ZSAqL1xuK1x0X19sZTMyIGRldmljZV9mZWF0dXJlO1x0LyogcmVhZC1vbmx5ICovXG4rXHRfX2xlMzIgZ3Vlc3RfZmVhdHVyZV9zZWxlY3Q7IC8qIHJlYWQtd3JpdGUgKi9cbitcdF9fbGUzMiBndWVzdF9mZWF0dXJlO1x0XHQvKiByZWFkLXdyaXRlICovXG4rXHRfX2xlMTYgbXNpeF9jb25maWc7XHRcdC8qIHJlYWQtd3JpdGUgKi9cbitcdF9fbGUxNiBudW1fcXVldWVzO1x0XHQvKiByZWFkLW9ubHkgKi9cbitcdF9fdTggZGV2aWNlX3N0YXR1cztcdFx0LyogcmVhZC13cml0ZSAqL1xuK1x0X191OCBjb25maWdfZ2VuZXJhdGlvbjtcdC8qIHJlYWQtb25seSAqL1xuK1xuK1x0LyogQWJvdXQgYSBzcGVjaWZpYyB2aXJ0cXVldWUuICovXG4rXHRfX2xlMTYgcXVldWVfc2VsZWN0O1x0XHQvKiByZWFkLXdyaXRlICovXG4rXHRfX2xlMTYgcXVldWVfc2l6ZTtcdFx0LyogcmVhZC13cml0ZSwgcG93ZXIgb2YgMi4gKi9cbitcdF9fbGUxNiBxdWV1ZV9tc2l4X3ZlY3RvcjtcdC8qIHJlYWQtd3JpdGUgKi9cbitcdF9fbGUxNiBxdWV1ZV9lbmFibGU7XHRcdC8qIHJlYWQtd3JpdGUgKi9cbitcdF9fbGUxNiBxdWV1ZV9ub3RpZnlfb2ZmO1x0LyogcmVhZC1vbmx5ICovXG4rXHRfX2xlMzIgcXVldWVfZGVzY19sbztcdFx0LyogcmVhZC13cml0ZSAqL1xuK1x0X19sZTMyIHF1ZXVlX2Rlc2NfaGk7XHRcdC8qIHJlYWQtd3JpdGUgKi9cbitcdF9fbGUzMiBxdWV1ZV9hdmFpbF9sbztcdFx0LyogcmVhZC13cml0ZSAqL1xuK1x0X19sZTMyIHF1ZXVlX2F2YWlsX2hpO1x0XHQvKiByZWFkLXdyaXRlICovXG4rXHRfX2xlMzIgcXVldWVfdXNlZF9sbztcdFx0LyogcmVhZC13cml0ZSAqL1xuK1x0X19sZTMyIHF1ZXVlX3VzZWRfaGk7XHRcdC8qIHJlYWQtd3JpdGUgKi9cbit9O1xuK1xuK3N0cnVjdCB6eGRoX3BmX3BjaV9ub3RpZnlfY2FwIHtcbitcdHN0cnVjdCB6eGRoX3BmX3BjaV9jYXAgY2FwO1xuK1x0X19sZTMyIG5vdGlmeV9vZmZfbXVsdGlwbGllcjsgLyogTXVsdGlwbGllciBmb3IgcXVldWVfbm90aWZ5X29mZi4gKi9cbit9O1xuK1xuKyNlbmRpZiAvKiBfX0RIX1FVRVVFX0hfXyAqL1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uODZkNDM3NDA4ODIwM1xuLS0tIC9kZXYvbnVsbFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuY1xuQEAgLTAsMCArMSw0NDkgQEBcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4rLypcbisgKiBaVEUgRGluZ0hhaSBFdGhlcm5ldCBkcml2ZXJcbisgKiBDb3B5cmlnaHQgKGMpIDIwMjItMjAyNiwgWlRFIENvcnBvcmF0aW9uLlxuKyAqL1xuK1xuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L21vZHVsZS5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvcGNpLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NuZXQvZGV2bGluay5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvZG1hLW1hcHBpbmcuaFx1MDAzZVxuKyNpbmNsdWRlIFwiZW5fcGYuaFwiXG4rI2luY2x1ZGUgXCJkaF9xdWV1ZS5oXCJcbitcbitNT0RVTEVfQVVUSE9SKFwiSnVueWFuZyBIYW4gXHUwMDNjaGFuLmp1bnlhbmdAenRlLmNvbS5jblx1MDAzZVwiKTtcbitNT0RVTEVfREVTQ1JJUFRJT04oXCJaVEUgRGluZ0hhaSBzZXJpZXMgRXRoZXJuZXQgZHJpdmVyXCIpO1xuK01PRFVMRV9MSUNFTlNFKFwiR1BMXCIpO1xuK1xuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZGV2bGlua19vcHMgenhkaF9wZl9kZXZsaW5rX29wcyA9IHt9O1xuK1xuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCB6eGRoX3BmX3BjaV90YWJsZVtdID0ge1xuK1x0eyBQQ0lfREVWSUNFKFpYREhfUEZfVkVORE9SX0lELCBaWERIX1BGX0RFVklDRV9JRCkgfSxcbitcdHsgUENJX0RFVklDRShaWERIX1BGX1ZFTkRPUl9JRCwgWlhESF9WRl9ERVZJQ0VfSUQpIH0sXG4rXHR7IH1cbit9O1xuK1xuK01PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLCB6eGRoX3BmX3BjaV90YWJsZSk7XG4rXG4rdm9pZCAqenhkaF9jb3JlX2FsbG9jX3ByaXYoc3RydWN0IHp4ZGhfY29yZV9kZXYgKnp4ZGhfZGV2LCBzaXplX3Qgc2l6ZSlcbit7XG4rXHR2b2lkICpwcml2ID0ga3phbGxvYyhzaXplLCBHRlBfS0VSTkVMKTtcbitcbitcdGlmIChwcml2KVxuK1x0XHR6eGRoX2Rldi1cdTAwM2Vwcml2ID0gcHJpdjtcbitcdHJldHVybiBwcml2O1xuK31cbitcbit2b2lkIHp4ZGhfY29yZV9mcmVlX3ByaXYoc3RydWN0IHp4ZGhfY29yZV9kZXYgKnp4ZGhfZGV2KVxuK3tcbitcdGtmcmVlKHp4ZGhfZGV2LVx1MDAzZXByaXYpO1xuK31cbitcbitzdGF0aWMgaW50IHp4ZGhfcGZfcGNpX2luaXQoc3RydWN0IHp4ZGhfY29yZV9kZXYgKnp4ZGhfZGV2KVxuK3tcbitcdHN0cnVjdCB6eGRoX3BmX2RldiAqcGZfZGV2ID0genhkaF9kZXYtXHUwMDNlcHJpdjtcbitcdGludCByZXQ7XG4rXG4rXHRwY2lfc2V0X2RydmRhdGEoenhkaF9kZXYtXHUwMDNlcGRldiwgenhkaF9kZXYpO1xuK1xuK1x0cmV0ID0gcGNpX2VuYWJsZV9kZXZpY2UoenhkaF9kZXYtXHUwMDNlcGRldik7XG4rXHRpZiAocmV0KSB7XG4rXHRcdGRldl9lcnIoenhkaF9kZXYtXHUwMDNlZGV2aWNlLCBcInBjaV9lbmFibGVfZGV2aWNlIGZhaWxlZDogJWRcXG5cIiwgcmV0KTtcbitcdFx0cmV0dXJuIHJldDtcbitcdH1cbitcbitcdGRtYV9zZXRfbWFza19hbmRfY29oZXJlbnQoenhkaF9kZXYtXHUwMDNlZGV2aWNlLCBETUFfQklUX01BU0soNjQpKTtcbitcbitcdHJldCA9IHBjaV9yZXF1ZXN0X3NlbGVjdGVkX3JlZ2lvbnMoenhkaF9kZXYtXHUwMDNlcGRldixcbitcdFx0XHRcdFx0ICAgcGNpX3NlbGVjdF9iYXJzKHp4ZGhfZGV2LVx1MDAzZXBkZXYsIElPUkVTT1VSQ0VfTUVNKSxcbitcdFx0XHRcdFx0ICAgXCJkaC1wZlwiKTtcbitcdGlmIChyZXQpIHtcbitcdFx0ZGV2X2Vycih6eGRoX2Rldi1cdTAwM2VkZXZpY2UsIFwicGNpX3JlcXVlc3Rfc2VsZWN0ZWRfcmVnaW9ucyBmYWlsZWQ6ICVkXFxuXCIsIHJldCk7XG4rXHRcdGdvdG8gZXJyX3BjaTtcbitcdH1cbitcbitcdHBjaV9zZXRfbWFzdGVyKHp4ZGhfZGV2LVx1MDAzZXBkZXYpO1xuK1x0cmV0ID0gcGNpX3NhdmVfc3RhdGUoenhkaF9kZXYtXHUwMDNlcGRldik7XG4rXHRpZiAocmV0KSB7XG4rXHRcdGRldl9lcnIoenhkaF9kZXYtXHUwMDNlZGV2aWNlLCBcInBjaV9zYXZlX3N0YXRlIGZhaWxlZDogJWRcXG5cIiwgcmV0KTtcbitcdFx0Z290byBlcnJfcGNpX3NhdmVfc3RhdGU7XG4rXHR9XG4rXG4rXHRpZiAoIShwY2lfcmVzb3VyY2VfZmxhZ3MoenhkaF9kZXYtXHUwMDNlcGRldiwgMCkgXHUwMDI2IElPUkVTT1VSQ0VfTUVNKSkge1xuK1x0XHRyZXQgPSAtRU5PREVWO1xuK1x0XHRkZXZfZXJyKHp4ZGhfZGV2LVx1MDAzZWRldmljZSwgXCJCQVIgMCBpcyBub3QgYW4gTU1JTyByZXNvdXJjZVxcblwiKTtcbitcdFx0Z290byBlcnJfcGNpX3NhdmVfc3RhdGU7XG4rXHR9XG4rXG4rXHRwZl9kZXYtXHUwMDNlcGNpX2lvcmVtYXBfYWRkclswXSA9XG4rXHRcdGlvcmVtYXAocGNpX3Jlc291cmNlX3N0YXJ0KHp4ZGhfZGV2LVx1MDAzZXBkZXYsIDApLFxuK1x0XHRcdHBjaV9yZXNvdXJjZV9sZW4oenhkaF9kZXYtXHUwMDNlcGRldiwgMCkpO1xuK1x0aWYgKCFwZl9kZXYtXHUwMDNlcGNpX2lvcmVtYXBfYWRkclswXSkge1xuK1x0XHRyZXQgPSAtRU5PTUVNO1xuK1x0XHRkZXZfZXJyKHp4ZGhfZGV2LVx1MDAzZWRldmljZSwgXCJkaCBwZiBwY2kgaW9yZW1hcCBmYWlsZWRcXG5cIik7XG4rXHRcdGdvdG8gZXJyX3BjaV9zYXZlX3N0YXRlO1xuK1x0fVxuK1xuK1x0cmV0dXJuIDA7XG4rXG4rZXJyX3BjaV9zYXZlX3N0YXRlOlxuK1x0cGNpX3JlbGVhc2Vfc2VsZWN0ZWRfcmVnaW9ucyh6eGRoX2Rldi1cdTAwM2VwZGV2LFxuK1x0XHRcdFx0ICAgICBwY2lfc2VsZWN0X2JhcnMoenhkaF9kZXYtXHUwMDNlcGRldiwgSU9SRVNPVVJDRV9NRU0pKTtcbitlcnJfcGNpOlxuK1x0cGNpX2Rpc2FibGVfZGV2aWNlKHp4ZGhfZGV2LVx1MDAzZXBkZXYpO1xuK1x0cmV0dXJuIHJldDtcbit9XG4rXG4rdm9pZCB6eGRoX3BmX3BjaV9jbG9zZShzdHJ1Y3QgenhkaF9jb3JlX2RldiAqenhkaF9kZXYpXG4re1xuK1x0c3RydWN0IHp4ZGhfcGZfZGV2ICpwZl9kZXYgPSB6eGRoX2Rldi1cdTAwM2Vwcml2O1xuK1xuK1x0aW91bm1hcChwZl9kZXYtXHUwMDNlcGNpX2lvcmVtYXBfYWRkclswXSk7XG4rXHRwY2lfcmVsZWFzZV9zZWxlY3RlZF9yZWdpb25zKHp4ZGhfZGV2LVx1MDAzZXBkZXYsXG4rXHRcdFx0XHQgICAgIHBjaV9zZWxlY3RfYmFycyh6eGRoX2Rldi1cdTAwM2VwZGV2LCBJT1JFU09VUkNFX01FTSkpO1xuK1x0cGNpX2Rpc2FibGVfZGV2aWNlKHp4ZGhfZGV2LVx1MDAzZXBkZXYpO1xuK31cbitcbitpbnQgenhkaF9wZl9wY2lfZmluZF9jYXBhYmlsaXR5KHN0cnVjdCBwY2lfZGV2ICpwZGV2LCB1OCBjZmdfdHlwZSxcbitcdFx0XHRcdHUzMiBpb3Jlc291cmNlX3R5cGVzLCBpbnQgKmJhcnMpXG4re1xuK1x0aW50IHBvcztcbitcdHU4IHR5cGU7XG4rXHR1OCBiYXI7XG4rXG4rXHRmb3IgKHBvcyA9IHBjaV9maW5kX2NhcGFiaWxpdHkocGRldiwgUENJX0NBUF9JRF9WTkRSKTsgcG9zIFx1MDAzZSAwO1xuK1x0ICAgICBwb3MgPSBwY2lfZmluZF9uZXh0X2NhcGFiaWxpdHkocGRldiwgcG9zLCBQQ0lfQ0FQX0lEX1ZORFIpKSB7XG4rXHRcdHBjaV9yZWFkX2NvbmZpZ19ieXRlKHBkZXYsXG4rXHRcdFx0XHQgICAgIHBvcyArIG9mZnNldG9mKHN0cnVjdCB6eGRoX3BmX3BjaV9jYXAsXG4rXHRcdFx0XHRcdFx0XHRjZmdfdHlwZSksIFx1MDAyNnR5cGUpO1xuK1x0XHRwY2lfcmVhZF9jb25maWdfYnl0ZShwZGV2LFxuK1x0XHRcdFx0ICAgICBwb3MgKyBvZmZzZXRvZihzdHJ1Y3QgenhkaF9wZl9wY2lfY2FwLCBiYXIpLCBcdTAwMjZiYXIpO1xuK1xuK1x0XHQvKiBpZ25vcmUgc3RydWN0dXJlcyB3aXRoIHJlc2VydmVkIEJBUiB2YWx1ZXMgKi9cbitcdFx0aWYgKGJhciBcdTAwM2UgWlhESF9QRl9NQVhfQkFSX1ZBTClcbitcdFx0XHRjb250aW51ZTtcbitcbitcdFx0aWYgKHR5cGUgPT0gY2ZnX3R5cGUpIHtcbitcdFx0XHRpZiAocGNpX3Jlc291cmNlX2xlbihwZGV2LCBiYXIpIFx1MDAyNlx1MDAyNlxuK1x0XHRcdCAgICBwY2lfcmVzb3VyY2VfZmxhZ3MocGRldiwgYmFyKSBcdTAwMjYgaW9yZXNvdXJjZV90eXBlcykge1xuK1x0XHRcdFx0KmJhcnMgfD0gKDEgXHUwMDNjXHUwMDNjIGJhcik7XG4rXHRcdFx0XHRyZXR1cm4gcG9zO1xuK1x0XHRcdH1cbitcdFx0fVxuK1x0fVxuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK3ZvaWQgX19pb21lbSAqenhkaF9wZl9tYXBfY2FwYWJpbGl0eShzdHJ1Y3QgenhkaF9jb3JlX2RldiAqenhkaF9kZXYsIGludCBvZmYsXG4rXHRcdFx0XHQgICAgIHNpemVfdCBtaW5sZW4sIHUzMiBhbGlnbixcbitcdFx0XHRcdCAgICAgdTMyIHN0YXJ0LCB1MzIgc2l6ZSxcbitcdFx0XHRcdCAgICAgc2l6ZV90ICpsZW4sIHJlc291cmNlX3NpemVfdCAqcGEsXG4rXHRcdFx0XHQgICAgIHUzMiAqYmFyX29mZilcbit7XG4rXHRzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IHp4ZGhfZGV2LVx1MDAzZXBkZXY7XG4rXHR2b2lkIF9faW9tZW0gKnA7XG4rXHR1MzIgb2Zmc2V0O1xuK1x0dTMyIGxlbmd0aDtcbitcdHU4IGJhcjtcbitcbitcdHBjaV9yZWFkX2NvbmZpZ19ieXRlKHBkZXYsXG4rXHRcdFx0ICAgICBvZmYgKyBvZmZzZXRvZihzdHJ1Y3QgenhkaF9wZl9wY2lfY2FwLCBiYXIpLCBcdTAwMjZiYXIpO1xuK1xuK1x0aWYgKGJhciBcdTAwM2UgWlhESF9QRl9NQVhfQkFSX1ZBTCkge1xuK1x0XHRkZXZfZXJyKHp4ZGhfZGV2LVx1MDAzZWRldmljZSwgXCJpbnZhbGlkIGJhciAldVxcblwiLCBiYXIpO1xuK1x0XHRyZXR1cm4gTlVMTDtcbitcdH1cbitcbitcdHBjaV9yZWFkX2NvbmZpZ19kd29yZChwZGV2LFxuK1x0XHRcdCAgICAgIG9mZiArIG9mZnNldG9mKHN0cnVjdCB6eGRoX3BmX3BjaV9jYXAsXG4rXHRcdFx0XHRcdFx0b2Zmc2V0KSwgXHUwMDI2b2Zmc2V0KTtcbitcdHBjaV9yZWFkX2NvbmZpZ19kd29yZChwZGV2LFxuK1x0XHRcdCAgICAgIG9mZiArIG9mZnNldG9mKHN0cnVjdCB6eGRoX3BmX3BjaV9jYXAsXG4rXHRcdFx0XHRcdFx0bGVuZ3RoKSwgXHUwMDI2bGVuZ3RoKTtcbitcbitcdGlmIChiYXJfb2ZmKVxuK1x0XHQqYmFyX29mZiA9IG9mZnNldDtcbitcbitcdGlmIChsZW5ndGggXHUwMDNjPSBzdGFydCkge1xuK1x0XHRkZXZfZXJyKHp4ZGhfZGV2LVx1MDAzZWRldmljZSwgXCJiYWQgY2FwYWJpbGl0eSBsZW4gJXUgKFx1MDAzZSV1IGV4cGVjdGVkKVxcblwiLFxuK1x0XHRcdGxlbmd0aCwgc3RhcnQpO1xuK1x0XHRyZXR1cm4gTlVMTDtcbitcdH1cbitcbitcdGlmIChsZW5ndGggLSBzdGFydCBcdTAwM2MgbWlubGVuKSB7XG4rXHRcdGRldl9lcnIoenhkaF9kZXYtXHUwMDNlZGV2aWNlLCBcImJhZCBjYXBhYmlsaXR5IGxlbiAldSAoXHUwMDNlPSV6dSBleHBlY3RlZClcXG5cIixcbitcdFx0XHRsZW5ndGgsIG1pbmxlbik7XG4rXHRcdHJldHVybiBOVUxMO1xuK1x0fVxuK1xuK1x0bGVuZ3RoIC09IHN0YXJ0O1xuK1x0aWYgKHN0YXJ0ICsgb2Zmc2V0IFx1MDAzYyBvZmZzZXQpIHtcbitcdFx0ZGV2X2Vycih6eGRoX2Rldi1cdTAwM2VkZXZpY2UsIFwibWFwIHdyYXAtYXJvdW5kICV1KyV1XFxuXCIsIHN0YXJ0LCBvZmZzZXQpO1xuK1x0XHRyZXR1cm4gTlVMTDtcbitcdH1cbitcbitcdG9mZnNldCArPSBzdGFydDtcbitcdGlmIChvZmZzZXQgXHUwMDI2IChhbGlnbiAtIDEpKSB7XG4rXHRcdGRldl9lcnIoenhkaF9kZXYtXHUwMDNlZGV2aWNlLCBcIm9mZnNldCAldSBub3QgYWxpZ25lZCB0byAldVxcblwiLCBvZmZzZXQsIGFsaWduKTtcbitcdFx0cmV0dXJuIE5VTEw7XG4rXHR9XG4rXG4rXHRpZiAobGVuZ3RoIFx1MDAzZSBzaXplKVxuK1x0XHRsZW5ndGggPSBzaXplO1xuK1xuK1x0aWYgKGxlbilcbitcdFx0KmxlbiA9IGxlbmd0aDtcbitcbitcdGlmIChsZW5ndGggKyBvZmZzZXQgXHUwMDNjIG9mZnNldCB8fFxuK1x0ICAgIGxlbmd0aCArIG9mZnNldCBcdTAwM2UgcGNpX3Jlc291cmNlX2xlbihwZGV2LCBiYXIpKSB7XG4rXHRcdGRldl9lcnIoenhkaF9kZXYtXHUwMDNlZGV2aWNlLFxuK1x0XHRcdFwibWFwICV1QCV1IG91dCBvZiByYW5nZSBvbiBiYXIgJXUgbGVuZ3RoICVsdVxcblwiLFxuK1x0XHRcdGxlbmd0aCwgb2Zmc2V0LCBiYXIsXG4rXHRcdFx0KHVuc2lnbmVkIGxvbmcpcGNpX3Jlc291cmNlX2xlbihwZGV2LCBiYXIpKTtcbitcdFx0cmV0dXJuIE5VTEw7XG4rXHR9XG4rXG4rXHRwID0gcGNpX2lvbWFwX3JhbmdlKHBkZXYsIGJhciwgb2Zmc2V0LCBsZW5ndGgpO1xuK1x0aWYgKCFwKSB7XG4rXHRcdGRldl9lcnIoenhkaF9kZXYtXHUwMDNlZGV2aWNlLCBcInVuYWJsZSB0byBtYXAgY3VzdG9tIHF1ZXVlICV1QCV1IG9uIGJhciAldVxcblwiLFxuK1x0XHRcdGxlbmd0aCwgb2Zmc2V0LCBiYXIpO1xuK1x0fSBlbHNlIGlmIChwYSkge1xuK1x0XHQqcGEgPSBwY2lfcmVzb3VyY2Vfc3RhcnQocGRldiwgYmFyKSArIG9mZnNldDtcbitcdH1cbitcbitcdHJldHVybiBwO1xuK31cbitcbitpbnQgenhkaF9wZl9jb21tb25fY2ZnX2luaXQoc3RydWN0IHp4ZGhfY29yZV9kZXYgKnp4ZGhfZGV2KVxuK3tcbitcdHN0cnVjdCB6eGRoX3BmX2RldiAqcGZfZGV2ID0genhkaF9kZXYtXHUwMDNlcHJpdjtcbitcdHN0cnVjdCBwY2lfZGV2ICpwZGV2ID0genhkaF9kZXYtXHUwMDNlcGRldjtcbitcdGludCBjb21tb247XG4rXG4rXHQvKiBjaGVjayBmb3IgYSBjb21tb24gY29uZmlnOiBpZiBub3QsIHVzZSBsZWdhY3kgbW9kZSAoYmFyIDApLiAqL1xuK1x0Y29tbW9uID0genhkaF9wZl9wY2lfZmluZF9jYXBhYmlsaXR5KHBkZXYsIFpYREhfUENJX0NBUF9DT01NT05fQ0ZHLFxuK1x0XHRcdFx0XHQgICAgIElPUkVTT1VSQ0VfTUVNLFxuK1x0XHRcdFx0XHQgICAgIFx1MDAyNnBmX2Rldi1cdTAwM2Vtb2Rlcm5fYmFycyk7XG4rXHRpZiAoIWNvbW1vbikge1xuK1x0XHRkZXZfZXJyKHp4ZGhfZGV2LVx1MDAzZWRldmljZSxcbitcdFx0XHRcIm1pc3NpbmcgY2FwYWJpbGl0aWVzLCBsZWF2aW5nIGZvciBsZWdhY3kgZHJpdmVyXFxuXCIpO1xuK1x0XHRyZXR1cm4gLUVOT0RFVjtcbitcdH1cbitcbitcdHBmX2Rldi1cdTAwM2Vjb21tb24gPSB6eGRoX3BmX21hcF9jYXBhYmlsaXR5KHp4ZGhfZGV2LCBjb21tb24sXG4rXHRcdFx0XHRcdFx0c2l6ZW9mKHN0cnVjdCB6eGRoX3BmX3BjaV9jb21tb25fY2ZnKSxcbitcdFx0XHRcdFx0XHRaWERIX1BGX0FMSUdONCwgMCxcbitcdFx0XHRcdFx0XHRzaXplb2Yoc3RydWN0IHp4ZGhfcGZfcGNpX2NvbW1vbl9jZmcpLFxuK1x0XHRcdFx0XHRcdE5VTEwsIE5VTEwsIE5VTEwpO1xuK1x0aWYgKCFwZl9kZXYtXHUwMDNlY29tbW9uKSB7XG4rXHRcdGRldl9lcnIoenhkaF9kZXYtXHUwMDNlZGV2aWNlLCBcInBmX2Rldi1cdTAwM2Vjb21tb24gaXMgbnVsbFxcblwiKTtcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHR9XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4raW50IHp4ZGhfcGZfbm90aWZ5X2NmZ19pbml0KHN0cnVjdCB6eGRoX2NvcmVfZGV2ICp6eGRoX2Rldilcbit7XG4rXHRzdHJ1Y3QgenhkaF9wZl9kZXYgKnBmX2RldiA9IHp4ZGhfZGV2LVx1MDAzZXByaXY7XG4rXHRzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IHp4ZGhfZGV2LVx1MDAzZXBkZXY7XG4rXHR1MzIgbm90aWZ5X2xlbmd0aDtcbitcdHUzMiBub3RpZnlfb2Zmc2V0O1xuK1x0aW50IG5vdGlmeTtcbitcbitcdC8qIElmIGNvbW1vbiBpcyB0aGVyZSwgdGhlc2Ugc2hvdWxkIGJlIHRvby4uLiAqL1xuK1x0bm90aWZ5ID0genhkaF9wZl9wY2lfZmluZF9jYXBhYmlsaXR5KHBkZXYsIFpYREhfUENJX0NBUF9OT1RJRllfQ0ZHLFxuK1x0XHRcdFx0XHQgICAgIElPUkVTT1VSQ0VfTUVNLFxuK1x0XHRcdFx0XHQgICAgIFx1MDAyNnBmX2Rldi1cdTAwM2Vtb2Rlcm5fYmFycyk7XG4rXHRpZiAoIW5vdGlmeSkge1xuK1x0XHRkZXZfZXJyKHp4ZGhfZGV2LVx1MDAzZWRldmljZSwgXCJtaXNzaW5nIG5vdGlmeSBjZmcgY2FwYWJpbGl0eVxcblwiKTtcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHR9XG4rXG4rXHRwY2lfcmVhZF9jb25maWdfZHdvcmQocGRldixcbitcdFx0XHQgICAgICBub3RpZnkgKyBvZmZzZXRvZihzdHJ1Y3QgenhkaF9wZl9wY2lfbm90aWZ5X2NhcCxcbitcdFx0XHRcdG5vdGlmeV9vZmZfbXVsdGlwbGllciksXG4rXHRcdFx1MDAyNnBmX2Rldi1cdTAwM2Vub3RpZnlfb2Zmc2V0X211bHRpcGxpZXIpO1xuK1x0cGNpX3JlYWRfY29uZmlnX2R3b3JkKHBkZXYsXG4rXHRcdFx0ICAgICAgbm90aWZ5ICsgb2Zmc2V0b2Yoc3RydWN0IHp4ZGhfcGZfcGNpX25vdGlmeV9jYXAsXG4rXHRcdFx0XHRjYXAubGVuZ3RoKSwgXHUwMDI2bm90aWZ5X2xlbmd0aCk7XG4rXHRwY2lfcmVhZF9jb25maWdfZHdvcmQocGRldixcbitcdFx0XHQgICAgICBub3RpZnkgKyBvZmZzZXRvZihzdHJ1Y3QgenhkaF9wZl9wY2lfbm90aWZ5X2NhcCxcbitcdFx0XHRcdGNhcC5vZmZzZXQpLCBcdTAwMjZub3RpZnlfb2Zmc2V0KTtcbitcbitcdC8qIFdlIGRvbid0IGtub3cgaG93IG1hbnkgVlFzIHdlJ2xsIG1hcCwgYWhlYWQgb2YgdGhlIHRpbWUuXG4rXHQgKiBJZiBub3RpZnkgbGVuZ3RoIGlzIHNtYWxsLCBtYXAgaXQgYWxsIG5vdy4gT3RoZXJ3aXNlLFxuK1x0ICogbWFwIGVhY2ggVlEgaW5kaXZpZHVhbGx5IGxhdGVyLlxuK1x0ICovXG4rXHRpZiAobm90aWZ5X2xlbmd0aCBcdTAwM2M9IFBBR0VfU0laRSAtIChub3RpZnlfb2Zmc2V0ICUgUEFHRV9TSVpFKSkge1xuK1x0XHRwZl9kZXYtXHUwMDNlbm90aWZ5X2Jhc2UgPSB6eGRoX3BmX21hcF9jYXBhYmlsaXR5KHp4ZGhfZGV2LCBub3RpZnksXG4rXHRcdFx0XHRcdFx0XHQgICAgIFpYREhfUEZfTUFQX01JTkxFTjIsXG4rXHRcdFx0XHRcdFx0XHQgICAgWlhESF9QRl9BTElHTjIsIDAsXG4rXHRcdFx0XHRcdFx0XHQgICAgbm90aWZ5X2xlbmd0aCxcbitcdFx0XHRcdFx0XHRcdCAgICBcdTAwMjZwZl9kZXYtXHUwMDNlbm90aWZ5X2xlbixcbitcdFx0XHRcdFx0XHRcdCAgICBcdTAwMjZwZl9kZXYtXHUwMDNlbm90aWZ5X3BhLCBOVUxMKTtcbitcdFx0aWYgKCFwZl9kZXYtXHUwMDNlbm90aWZ5X2Jhc2UpIHtcbitcdFx0XHRkZXZfZXJyKHp4ZGhfZGV2LVx1MDAzZWRldmljZSwgXCJwZl9kZXYtXHUwMDNlbm90aWZ5X2Jhc2UgaXMgbnVsbFxcblwiKTtcbitcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbitcdFx0fVxuK1x0fSBlbHNlIHtcbitcdFx0cGZfZGV2LVx1MDAzZW5vdGlmeV9tYXBfY2FwID0gbm90aWZ5O1xuK1x0fVxuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK2ludCB6eGRoX3BmX2RldmljZV9jZmdfaW5pdChzdHJ1Y3QgenhkaF9jb3JlX2RldiAqenhkaF9kZXYpXG4re1xuK1x0c3RydWN0IHp4ZGhfcGZfZGV2ICpwZl9kZXYgPSB6eGRoX2Rldi1cdTAwM2Vwcml2O1xuK1x0c3RydWN0IHBjaV9kZXYgKnBkZXYgPSB6eGRoX2Rldi1cdTAwM2VwZGV2O1xuK1x0aW50IGRldmljZTtcbitcbitcdC8qIERldmljZSBjYXBhYmlsaXR5IGlzIG9ubHkgbWFuZGF0b3J5IGZvclxuK1x0ICogZGV2aWNlcyB0aGF0IGhhdmUgZGV2aWNlLXNwZWNpZmljIGNvbmZpZ3VyYXRpb24uXG4rXHQgKi9cbitcdGRldmljZSA9IHp4ZGhfcGZfcGNpX2ZpbmRfY2FwYWJpbGl0eShwZGV2LCBaWERIX1BDSV9DQVBfREVWSUNFX0NGRyxcbitcdFx0XHRcdFx0ICAgICBJT1JFU09VUkNFX01FTSxcbitcdFx0XHRcdFx0ICAgICBcdTAwMjZwZl9kZXYtXHUwMDNlbW9kZXJuX2JhcnMpO1xuK1xuK1x0Lyogd2UgZG9uJ3Qga25vdyBob3cgbXVjaCB3ZSBzaG91bGQgbWFwLFxuK1x0ICogYnV0IFBBR0VfU0laRSBpcyBtb3JlIHRoYW4gZW5vdWdoIGZvciBhbGwgZXhpc3RpbmcgZGV2aWNlcy5cbitcdCAqL1xuK1x0aWYgKGRldmljZSkge1xuK1x0XHRwZl9kZXYtXHUwMDNlZGV2aWNlID0genhkaF9wZl9tYXBfY2FwYWJpbGl0eSh6eGRoX2RldiwgZGV2aWNlLCAwLFxuK1x0XHRcdFx0XHRcdFx0WlhESF9QRl9BTElHTjQsIDAsIFBBR0VfU0laRSxcbitcdFx0XHRcdFx0XHQgICAgICAgXHUwMDI2cGZfZGV2LVx1MDAzZWRldmljZV9sZW4sIE5VTEwsXG4rXHRcdFx0XHRcdFx0ICAgICAgIFx1MDAyNnBmX2Rldi1cdTAwM2VkZXZfY2ZnX2Jhcl9vZmYpO1xuK1x0XHRpZiAoIXBmX2Rldi1cdTAwM2VkZXZpY2UpIHtcbitcdFx0XHRkZXZfZXJyKHp4ZGhfZGV2LVx1MDAzZWRldmljZSwgXCJwZl9kZXYtXHUwMDNlZGV2aWNlIGlzIG51bGxcXG5cIik7XG4rXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHRcdH1cbitcdH1cbitcdHJldHVybiAwO1xuK31cbitcbit2b2lkIHp4ZGhfcGZfbW9kZXJuX2NmZ191bmluaXQoc3RydWN0IHp4ZGhfY29yZV9kZXYgKnp4ZGhfZGV2KVxuK3tcbitcdHN0cnVjdCB6eGRoX3BmX2RldiAqcGZfZGV2ID0genhkaF9kZXYtXHUwMDNlcHJpdjtcbitcdHN0cnVjdCBwY2lfZGV2ICpwZGV2ID0genhkaF9kZXYtXHUwMDNlcGRldjtcbitcbitcdGlmIChwZl9kZXYtXHUwMDNlZGV2aWNlKVxuK1x0XHRwY2lfaW91bm1hcChwZGV2LCBwZl9kZXYtXHUwMDNlZGV2aWNlKTtcbitcdGlmIChwZl9kZXYtXHUwMDNlbm90aWZ5X2Jhc2UpXG4rXHRcdHBjaV9pb3VubWFwKHBkZXYsIHBmX2Rldi1cdTAwM2Vub3RpZnlfYmFzZSk7XG4rXHRwY2lfaW91bm1hcChwZGV2LCBwZl9kZXYtXHUwMDNlY29tbW9uKTtcbit9XG4rXG4raW50IHp4ZGhfcGZfbW9kZXJuX2NmZ19pbml0KHN0cnVjdCB6eGRoX2NvcmVfZGV2ICp6eGRoX2Rldilcbit7XG4rXHRzdHJ1Y3QgenhkaF9wZl9kZXYgKnBmX2RldiA9IHp4ZGhfZGV2LVx1MDAzZXByaXY7XG4rXHRzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IHp4ZGhfZGV2LVx1MDAzZXBkZXY7XG4rXHRpbnQgcmV0O1xuK1xuK1x0cmV0ID0genhkaF9wZl9jb21tb25fY2ZnX2luaXQoenhkaF9kZXYpO1xuK1x0aWYgKHJldCkge1xuK1x0XHRkZXZfZXJyKHp4ZGhfZGV2LVx1MDAzZWRldmljZSwgXCJ6eGRoX3BmX2NvbW1vbl9jZmdfaW5pdCBmYWlsZWQ6ICVkXFxuXCIsIHJldCk7XG4rXHRcdHJldHVybiByZXQ7XG4rXHR9XG4rXG4rXHRyZXQgPSB6eGRoX3BmX25vdGlmeV9jZmdfaW5pdCh6eGRoX2Rldik7XG4rXHRpZiAocmV0KSB7XG4rXHRcdGRldl9lcnIoenhkaF9kZXYtXHUwMDNlZGV2aWNlLCBcInp4ZGhfcGZfbm90aWZ5X2NmZ19pbml0IGZhaWxlZDogJWRcXG5cIiwgcmV0KTtcbitcdFx0Z290byBlcnJfbWFwX25vdGlmeTtcbitcdH1cbitcbitcdHJldCA9IHp4ZGhfcGZfZGV2aWNlX2NmZ19pbml0KHp4ZGhfZGV2KTtcbitcdGlmIChyZXQpIHtcbitcdFx0ZGV2X2Vycih6eGRoX2Rldi1cdTAwM2VkZXZpY2UsIFwienhkaF9wZl9kZXZpY2VfY2ZnX2luaXQgZmFpbGVkOiAlZFxcblwiLCByZXQpO1xuK1x0XHRnb3RvIGVycl9tYXBfZGV2aWNlO1xuK1x0fVxuK1xuK1x0cmV0dXJuIDA7XG4rXG4rZXJyX21hcF9kZXZpY2U6XG4rXHRpZiAocGZfZGV2LVx1MDAzZW5vdGlmeV9iYXNlKVxuK1x0XHRwY2lfaW91bm1hcChwZGV2LCBwZl9kZXYtXHUwMDNlbm90aWZ5X2Jhc2UpO1xuK2Vycl9tYXBfbm90aWZ5OlxuK1x0cGNpX2lvdW5tYXAocGRldiwgcGZfZGV2LVx1MDAzZWNvbW1vbik7XG4rXHRyZXR1cm4gcmV0O1xuK31cbitcbitzdGF0aWMgaW50IHp4ZGhfcGZfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICppZClcbit7XG4rXHRzdHJ1Y3QgenhkaF9jb3JlX2RldiAqenhkaF9kZXY7XG4rXHRzdHJ1Y3QgenhkaF9wZl9kZXYgKnBmX2RldjtcbitcdHN0cnVjdCBkZXZsaW5rICpkZXZsaW5rO1xuK1x0aW50IHJldDtcbitcbitcdGRldmxpbmsgPSBkZXZsaW5rX2FsbG9jKFx1MDAyNnp4ZGhfcGZfZGV2bGlua19vcHMsIHNpemVvZihzdHJ1Y3QgenhkaF9jb3JlX2RldiksXG4rXHRcdFx0XHRcdTAwMjZwZGV2LVx1MDAzZWRldik7XG4rXHRpZiAoIWRldmxpbmspXG4rXHRcdHJldHVybiAtRU5PTUVNO1xuK1xuK1x0enhkaF9kZXYgPSBkZXZsaW5rX3ByaXYoZGV2bGluayk7XG4rXHR6eGRoX2Rldi1cdTAwM2VkZXZpY2UgPSBcdTAwMjZwZGV2LVx1MDAzZWRldjtcbitcdHp4ZGhfZGV2LVx1MDAzZXBkZXYgPSBwZGV2O1xuK1x0enhkaF9kZXYtXHUwMDNlZGV2bGluayA9IGRldmxpbms7XG4rXG4rXHRwZl9kZXYgPSB6eGRoX2NvcmVfYWxsb2NfcHJpdih6eGRoX2Rldiwgc2l6ZW9mKCpwZl9kZXYpKTtcbitcdGlmICghcGZfZGV2KSB7XG4rXHRcdGRldl9lcnIoXHUwMDI2cGRldi1cdTAwM2VkZXYsIFwienhkaF9wZl9kZXYgYWxsb2MgZmFpbGVkXFxuXCIpO1xuK1x0XHRyZXQgPSAtRU5PTUVNO1xuK1x0XHRnb3RvIGVycl9wZl9kZXY7XG4rXHR9XG4rXG4rXHRyZXQgPSB6eGRoX3BmX3BjaV9pbml0KHp4ZGhfZGV2KTtcbitcdGlmIChyZXQpIHtcbitcdFx0ZGV2X2VycihcdTAwMjZwZGV2LVx1MDAzZWRldiwgXCJ6eGRoX3BmX3BjaV9pbml0IGZhaWxlZDogJWRcXG5cIiwgcmV0KTtcbitcdFx0Z290byBlcnJfcGNpX2luaXQ7XG4rXHR9XG4rXG4rXHRyZXQgPSB6eGRoX3BmX21vZGVybl9jZmdfaW5pdCh6eGRoX2Rldik7XG4rXHRpZiAocmV0KSB7XG4rXHRcdGRldl9lcnIoXHUwMDI2cGRldi1cdTAwM2VkZXYsIFwienhkaF9wZl9tb2Rlcm5fY2ZnX2luaXQgZmFpbGVkOiAlZFxcblwiLCByZXQpO1xuK1x0XHRnb3RvIGVycl9jZmdfaW5pdDtcbitcdH1cbitcbitcdGRldmxpbmtfcmVnaXN0ZXIoZGV2bGluayk7XG4rXG4rXHRyZXR1cm4gMDtcbitcbitlcnJfY2ZnX2luaXQ6XG4rXHR6eGRoX3BmX3BjaV9jbG9zZSh6eGRoX2Rldik7XG4rZXJyX3BjaV9pbml0OlxuK1x0enhkaF9jb3JlX2ZyZWVfcHJpdih6eGRoX2Rldik7XG4rZXJyX3BmX2RldjpcbitcdGRldmxpbmtfZnJlZShkZXZsaW5rKTtcbitcdHJldHVybiByZXQ7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIHp4ZGhfcGZfcmVtb3ZlKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxuK3tcbitcdHN0cnVjdCB6eGRoX2NvcmVfZGV2ICp6eGRoX2RldiA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTtcbitcdHN0cnVjdCBkZXZsaW5rICpkZXZsaW5rID0gcHJpdl90b19kZXZsaW5rKHp4ZGhfZGV2KTtcbitcbitcdGRldmxpbmtfdW5yZWdpc3RlcihkZXZsaW5rKTtcbitcdHp4ZGhfcGZfbW9kZXJuX2NmZ191bmluaXQoenhkaF9kZXYpO1xuK1x0enhkaF9wZl9wY2lfY2xvc2UoenhkaF9kZXYpO1xuK1x0enhkaF9jb3JlX2ZyZWVfcHJpdih6eGRoX2Rldik7XG4rXHRkZXZsaW5rX2ZyZWUoZGV2bGluayk7XG4rXHRwY2lfc2V0X2RydmRhdGEocGRldiwgTlVMTCk7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIHp4ZGhfcGZfc2h1dGRvd24oc3RydWN0IHBjaV9kZXYgKnBkZXYpXG4re1xuK1x0aWYgKHN5c3RlbV9zdGF0ZSA9PSBTWVNURU1fUE9XRVJfT0ZGKVxuK1x0XHRwY2lfc2V0X3Bvd2VyX3N0YXRlKHBkZXYsIFBDSV9EM2hvdCk7XG4rXHRwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7XG4rfVxuK1xuK3N0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciB6eGRoX3BmX2RyaXZlciA9IHtcbitcdC5uYW1lID0gXCJkaW5naGFpMTBlXCIsXG4rXHQuaWRfdGFibGUgPSB6eGRoX3BmX3BjaV90YWJsZSxcbitcdC5wcm9iZSA9IHp4ZGhfcGZfcHJvYmUsXG4rXHQucmVtb3ZlID0genhkaF9wZl9yZW1vdmUsXG4rXHQuc2h1dGRvd24gPSB6eGRoX3BmX3NodXRkb3duLFxuK307XG4rXG4rbW9kdWxlX3BjaV9kcml2ZXIoenhkaF9wZl9kcml2ZXIpO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5oXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uNzM3M2RlZThkMWE5ZlxuLS0tIC9kZXYvbnVsbFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuaFxuQEAgLTAsMCArMSw3NSBAQFxuKy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHkgKi9cbisvKlxuKyAqIFpURSBEaW5nSGFpIEV0aGVybmV0IGRyaXZlciAtIFBGIGhlYWRlclxuKyAqIENvcHlyaWdodCAoYykgMjAyMi0yMDI2LCBaVEUgQ29ycG9yYXRpb24uXG4rICovXG4rXG4rI2lmbmRlZiBfX1pYREhfRU5fUEZfSF9fXG4rI2RlZmluZSBfX1pYREhfRU5fUEZfSF9fXG4rXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvdHlwZXMuaFx1MDAzZVxuK1xuKyNkZWZpbmUgWlhESF9QRl9WRU5ET1JfSURcdDB4MWNmMlxuKyNkZWZpbmUgWlhESF9QRl9ERVZJQ0VfSURcdDB4ODA0MFxuKyNkZWZpbmUgWlhESF9WRl9ERVZJQ0VfSURcdDB4ODA0MVxuK1xuKy8qIENvbW1vbiBjb25maWd1cmF0aW9uICovXG4rI2RlZmluZSBaWERIX1BDSV9DQVBfQ09NTU9OX0NGR1x0MVxuKy8qIE5vdGlmaWNhdGlvbnMgKi9cbisjZGVmaW5lIFpYREhfUENJX0NBUF9OT1RJRllfQ0ZHXHQyXG4rLyogSVNSIGFjY2VzcyAqL1xuKyNkZWZpbmUgWlhESF9QQ0lfQ0FQX0lTUl9DRkdcdFx0M1xuKy8qIERldmljZSBzcGVjaWZpYyBjb25maWd1cmF0aW9uICovXG4rI2RlZmluZSBaWERIX1BDSV9DQVBfREVWSUNFX0NGR1x0NFxuKy8qIFBDSSBjb25maWd1cmF0aW9uIGFjY2VzcyAqL1xuKyNkZWZpbmUgWlhESF9QQ0lfQ0FQX1BDSV9DRkdcdFx0NVxuK1xuKyNkZWZpbmUgWlhESF9QRl9NQVhfQkFSX1ZBTFx0XHQweDVcbisjZGVmaW5lIFpYREhfUEZfQUxJR040XHRcdFx0NFxuKyNkZWZpbmUgWlhESF9QRl9BTElHTjJcdFx0XHQyXG4rI2RlZmluZSBaWERIX1BGX01BUF9NSU5MRU4yXHRcdDJcbitcbitzdHJ1Y3QgenhkaF9jb3JlX2RldiB7XG4rXHRzdHJ1Y3QgZGV2aWNlICpkZXZpY2U7XG4rXHRzdHJ1Y3QgcGNpX2RldiAqcGRldjtcbitcdHN0cnVjdCBkZXZsaW5rICpkZXZsaW5rO1xuK1x0dm9pZCAqcHJpdjtcbit9O1xuK1xuK3N0cnVjdCB6eGRoX3BmX2RldiB7XG4rXHRzdHJ1Y3QgenhkaF9wZl9wY2lfY29tbW9uX2NmZyBfX2lvbWVtICpjb21tb247XG4rXHQvKiBEZXZpY2Utc3BlY2lmaWMgZGF0YSAobm9uLWxlZ2FjeSBtb2RlKSAgKi9cbitcdC8qIEJhc2Ugb2YgdnEgbm90aWZpY2F0aW9ucyAobm9uLWxlZ2FjeSBtb2RlKS4gKi9cbitcdHZvaWQgX19pb21lbSAqZGV2aWNlO1xuK1x0dm9pZCBfX2lvbWVtICpub3RpZnlfYmFzZTtcbitcdC8qIFBoeXNpY2FsIGJhc2Ugb2YgdnEgbm90aWZpY2F0aW9ucyAqL1xuK1x0cmVzb3VyY2Vfc2l6ZV90IG5vdGlmeV9wYTtcbitcdC8qIFNvIHdlIGNhbiBzYW5pdHktY2hlY2sgYWNjZXNzZXMuICovXG4rXHRzaXplX3Qgbm90aWZ5X2xlbjtcbitcdHNpemVfdCBkZXZpY2VfbGVuO1xuK1x0LyogQ2FwYWJpbGl0eSBmb3Igd2hlbiB3ZSBuZWVkIHRvIG1hcCBub3RpZmljYXRpb25zIHBlci12cS4gKi9cbitcdHMzMiBub3RpZnlfbWFwX2NhcDtcbitcdHUzMiBub3RpZnlfb2Zmc2V0X211bHRpcGxpZXI7XG4rXHQvKiBNdWx0aXBseSBxdWV1ZV9ub3RpZnlfb2ZmIGJ5IHRoaXMgdmFsdWUuIChub24tbGVnYWN5IG1vZGUpLiAqL1xuK1x0czMyIG1vZGVybl9iYXJzO1xuK1x0dm9pZCBfX2lvbWVtICpwY2lfaW9yZW1hcF9hZGRyWzZdO1xuK1x0dTMyIGRldl9jZmdfYmFyX29mZjtcbit9O1xuK1xuK3ZvaWQgKnp4ZGhfY29yZV9hbGxvY19wcml2KHN0cnVjdCB6eGRoX2NvcmVfZGV2ICp6eGRoX2Rldiwgc2l6ZV90IHNpemUpO1xuK3ZvaWQgenhkaF9jb3JlX2ZyZWVfcHJpdihzdHJ1Y3QgenhkaF9jb3JlX2RldiAqenhkaF9kZXYpO1xuK3ZvaWQgenhkaF9wZl9wY2lfY2xvc2Uoc3RydWN0IHp4ZGhfY29yZV9kZXYgKnp4ZGhfZGV2KTtcbitpbnQgenhkaF9wZl9wY2lfZmluZF9jYXBhYmlsaXR5KHN0cnVjdCBwY2lfZGV2ICpwZGV2LCB1OCBjZmdfdHlwZSxcbitcdFx0XHRcdHUzMiBpb3Jlc291cmNlX3R5cGVzLCBpbnQgKmJhcnMpO1xuK3ZvaWQgX19pb21lbSAqenhkaF9wZl9tYXBfY2FwYWJpbGl0eShzdHJ1Y3QgenhkaF9jb3JlX2RldiAqenhkaF9kZXYsIGludCBvZmYsXG4rXHRcdFx0XHQgICAgIHNpemVfdCBtaW5sZW4sIHUzMiBhbGlnbixcbitcdFx0XHRcdCAgICAgdTMyIHN0YXJ0LCB1MzIgc2l6ZSxcbitcdFx0XHRcdCAgICAgc2l6ZV90ICpsZW4sIHJlc291cmNlX3NpemVfdCAqcGEsXG4rXHRcdFx0XHQgICAgIHUzMiAqYmFyX29mZik7XG4raW50IHp4ZGhfcGZfY29tbW9uX2NmZ19pbml0KHN0cnVjdCB6eGRoX2NvcmVfZGV2ICp6eGRoX2Rldik7XG4raW50IHp4ZGhfcGZfbm90aWZ5X2NmZ19pbml0KHN0cnVjdCB6eGRoX2NvcmVfZGV2ICp6eGRoX2Rldik7XG4raW50IHp4ZGhfcGZfZGV2aWNlX2NmZ19pbml0KHN0cnVjdCB6eGRoX2NvcmVfZGV2ICp6eGRoX2Rldik7XG4rdm9pZCB6eGRoX3BmX21vZGVybl9jZmdfdW5pbml0KHN0cnVjdCB6eGRoX2NvcmVfZGV2ICp6eGRoX2Rldik7XG4raW50IHp4ZGhfcGZfbW9kZXJuX2NmZ19pbml0KHN0cnVjdCB6eGRoX2NvcmVfZGV2ICp6eGRoX2Rldik7XG4rXG4rI2VuZGlmIC8qIF9fWlhESF9FTl9QRl9IX18gKi9cbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDE3OjQxOjMzLjI5MDk0MTI1WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODg1NzYwNTg0MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipXb3J0aEZ1enppbmcgRGVjaXNpb24gZm9yIHRoZSBaVEUgRGluZ0hhaSBFdGhlcm5ldCBEcml2ZXIqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIFdlJ3ZlIGdvdCBhIG5ldyBwYXRjaCBpbnRyb2R1Y2luZyBhIGRyaXZlciBmb3IgWlRFIERpbmdIYWkgRXRoZXJuZXQgZGV2aWNlcy4gSXQncyBzaXR0aW5nIGluIGBkcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9gIGFuZCBpcyBhIFBDSSBkcml2ZXIgc3BlY2lmaWNhbGx5LCBuYW1lZCBgZGluZ2hhaTEwZWAuIE15IGluaXRpYWwgc2NhbiBzaG93cyB0aGUgZHJpdmVyIHNldHMgdXAgc29tZSBQQ0kgY2FwYWJpbGl0aWVzLCBkZXZsaW5rIGFuZCBzZWVtcyB0byBiZSBhIGJhc2ljIFBDSSBkcml2ZXIgcHJvYmUuIE5vIG5ldGRldiByZWdpc3RyYXRpb24gYXQgdGhpcyBwb2ludC5cblxuTm93LCBhY2NvcmRpbmcgdG8gdGhlIGRpcmVjdGlvbnMsIEkgbmVlZCB0byBjaGVjayBpZiB0aGlzIGlzIHdvcnRoIGZ1enppbmcuIFRoZSBpbnN0cnVjdGlvbnMgdGVsbCBtZSB0byBmbGFnIGl0IGFzIGBXb3J0aEZ1enppbmc9ZmFsc2VgIGlmIHRoZSBwYXRjaCAqb25seSogY29udGFpbnMgY29kZSBpbiBzcGVjaWZpYyBkcml2ZXIgdHlwZXMuIFNwZWNpZmljYWxseSwgaXQgaGlnaGxpZ2h0cyBcInZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVVcIi5cblxuQWhhISBUaGlzIGlzIGEgWlRFIERpbmdIYWkgRXRoZXJuZXQgZHJpdmVyLiBJdCdzIGEgdmVuZG9yLXNwZWNpZmljIFBDSWUgTklDIGRyaXZlci4gVGhlIHF1ZXN0aW9uIGlzLCBpcyB0aGlzIGVtdWxhdGVkIGluIFFFTVU/IEkgZG91YnQgaXQuIFRoZXJlJ3Mgbm8gaW5kaWNhdGlvbiB0aGF0IHRoaXMgaGFyZHdhcmUgaXMgc3VwcG9ydGVkIG9yIGVtdWxhdGVkIHdpdGhpbiB0aGUgc3RhbmRhcmQgUUVNVSBlbnZpcm9ubWVudC4gVGhlIGluc3RydWN0aW9ucyBhcmUgcHJldHR5IGV4cGxpY2l0IG9uIHRoaXMgcG9pbnQuXG5cbkxldCBtZSBjb25maXJtIHRoZSBkcml2ZXIncyBuYXR1cmUuIFllcywgaXQncyBhIFpURSBEaW5nSGFpIEV0aGVybmV0IGRyaXZlci4gSXQncyByZWZlcmVuY2luZyBgQ09ORklHX0RJTkdIQUlfUEZgIGFuZCB1c2VzIGBQQ0lfREVWSUNFYCBtYWNybyB3aXRoIHZlbmRvciBJRCAweDFjZjIgYW5kIGRldmljZSBJRCAweDgwNDAuIFNvIHdlIGFyZSB0YWxraW5nIGFib3V0IGEgdmVuZG9yLXNwZWNpZmljIFBDSSBkZXZpY2UsIHdpdGggYSBzcGVjaWZpYyBoYXJkd2FyZSBjb25maWd1cmF0aW9uLiBUaGlzIGNvbmZpcm1zIHRoZSByZXF1aXJlbWVudCBmb3IgYSBwaHlzaWNhbCBQQ0llIGNhcmQuIEl0J3Mgbm90IHNvbWV0aGluZyBJIGNhbiBqdXN0IHNwaW4gdXAgaW4gUUVNVS5cblxuVGhlcmVmb3JlLCBzaW5jZSB0aGlzIGRyaXZlciByZXF1aXJlcyBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIG5vdCBlbXVsYXRlZCwgdGhlIGBXb3J0aEZ1enppbmdgIHNob3VsZCBiZSBmYWxzZS4gVGhpcyBhbGlnbnMgcGVyZmVjdGx5IHdpdGggdGhlIGluc3RydWN0aW9ucyBJIHJlY2VpdmVkLiBJJ20gY29uZmlkZW50IGluIHNheWluZyB0aGF0IHRoZSBjdXJyZW50IHBhdGNoIGZhbGxzIGludG8gdGhlIFwidmVuZG9yLXNwZWNpZmljIFBDSWVcIiBjYXRlZ29yeSBhcyBkZXNjcmliZWQuXG5cblNvLCBJJ2xsIGdvIGFoZWFkIGFuZCBzZXQgYFdvcnRoRnV6emluZz1mYWxzZWAgYW5kIHByb3ZpZGUgdGhlIHJlYXNvbmluZyB0aGF0IGl0IGlzIGEgdmVuZG9yLXNwZWNpZmljIFBDSWUgZHJpdmVyIGZvciBoYXJkd2FyZSBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTEwNDksIk91dHB1dFRva2VucyI6NzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MzIsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQxNzo0MTo0Mi4xNDg1NTAzWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyODQ4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW10sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IHZlbmRvci1zcGVjaWZpYyBQQ0llIEV0aGVybmV0IGRyaXZlciAoWlRFIERpbmdIYWkpLiBUaGlzIGRyaXZlciByZXF1aXJlcyBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIHRoYXQgaXMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUsIG1ha2luZyBpdCB1bnJlYWNoYWJsZSBhbmQgdW50ZXN0YWJsZSBpbiB2aXJ0dWFsaXplZCBmdXp6aW5nIGVudmlyb25tZW50cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgdmVuZG9yLXNwZWNpZmljIFBDSWUgRXRoZXJuZXQgZHJpdmVyIChaVEUgRGluZ0hhaSkuIFRoaXMgZHJpdmVyIHJlcXVpcmVzIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgdGhhdCBpcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVSwgbWFraW5nIGl0IHVucmVhY2hhYmxlIGFuZCB1bnRlc3RhYmxlIGluIHZpcnR1YWxpemVkIGZ1enppbmcgZW52aXJvbm1lbnRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowkwl59[1] Phase: Running StartedAt: 2026-08-02 17:41:53 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkwl59[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-08-02 17:41:53 +0000 UTC FinishedAt: 2026-08-02 17:41:59 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:code,Default:nil,Value:*1,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{},Result:nil,ExitCode:*1,}