Name: series-workflow7t8z9 Phase: Failed StartedAt: 2026-07-11 18:46:37 +0000 UTC FinishedAt: 2026-07-11 19:14:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7t8z9[0] Phase: Succeeded StartedAt: 2026-07-11 18:46:37 +0000 UTC FinishedAt: 2026-07-11 19:14:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7t8z9[0].run-triage Phase: Succeeded StartedAt: 2026-07-11 18:46:37 +0000 UTC FinishedAt: 2026-07-11 19:14:03 +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+CgkJCTx0ZD4yMDI2LzA3LzExIDE5OjEzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgY29kZSBpbiB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvLywgd2hpY2ggY29udGFpbnMgdXNlci1zcGFjZSBzZWxmdGVzdHMgYW5kIGRvZXMgbm90IGFmZmVjdCB0aGUgY29yZSBrZXJuZWwsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZSBjb2RlLiBUaGVyZWZvcmUsIGl0IGRvZXMgbm90IGludHJvZHVjZSBhbnkgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBjYW4gYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMSAxOToxMzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDMxMzdjMDMxOTlmNjQ3ZWZiNDNiYmJhZjgwNTM4NDRkMGNiNjAwZWRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU2F0IEp1bCAxMSAxOToxMzo0MCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9kcml2ZXJzL2lnYi9lMTAwMF84MjU3NS5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvZHJpdmVycy9pZ2IvZTEwMDBfODI1NzUuaFxubmV3IGZpbGUgbW9kZSAxMjAwMDBcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi5iODRhZmZkZWM1NTk4ZVxuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvZHJpdmVycy9pZ2IvZTEwMDBfODI1NzUuaFxuQEAgLTAsMCAmIzQzOzEgQEBcbiYjNDM7Li4vLi4vLi4vLi4vLi4vLi4vLi4vZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWdiL2UxMDAwXzgyNTc1LmhcblxcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGVcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9kcml2ZXJzL2lnYi9lMTAwMF9kZWZpbmVzLmggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9kcml2ZXJzL2lnYi9lMTAwMF9kZWZpbmVzLmhcbm5ldyBmaWxlIG1vZGUgMTIwMDAwXG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uOWY5N2Y0MzMwMDg2NmRcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2RyaXZlcnMvaWdiL2UxMDAwX2RlZmluZXMuaFxuQEAgLTAsMCAmIzQzOzEgQEBcbiYjNDM7Li4vLi4vLi4vLi4vLi4vLi4vLi4vZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWdiL2UxMDAwX2RlZmluZXMuaFxuXFwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2RyaXZlcnMvaWdiL2UxMDAwX3JlZ3MuaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2RyaXZlcnMvaWdiL2UxMDAwX3JlZ3MuaFxubmV3IGZpbGUgbW9kZSAxMjAwMDBcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi5jNzMzNjM0MTcxYmIxM1xuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvZHJpdmVycy9pZ2IvZTEwMDBfcmVncy5oXG5AQCAtMCwwICYjNDM7MSBAQFxuJiM0MzsuLi8uLi8uLi8uLi8uLi8uLi8uLi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZ2IvZTEwMDBfcmVncy5oXG5cXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvZHJpdmVycy9pZ2IvaWdiLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9kcml2ZXJzL2lnYi9pZ2IuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi4yMDZhMWU2NDg5YzIxY1xuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvZHJpdmVycy9pZ2IvaWdiLmNcbkBAIC0wLDAgJiM0MzsxLDU1NCBAQFxuJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4mIzQzOyNpbmNsdWRlIFx1MDAzY3VuaXN0ZC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2Vycm5vLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjc3RkaW50LmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvaW8uaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9wY2lfcmVncy5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3BjaV9pZHMuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9rZXJuZWwuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9jb21waWxlci5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2FzbS9iYXJyaWVyLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvbWlpLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGlidmZpby92ZmlvX3BjaV9kZXZpY2UuaFx1MDAzZVxuJiM0MztcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7ZTEwMDBfcmVncy5oXCYjMzQ7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O2UxMDAwX2RlZmluZXMuaFwmIzM0O1xuJiM0MzsjaW5jbHVkZSBcJiMzNDtlMTAwMF84MjU3NS5oXCYjMzQ7XG4mIzQzO1xuJiM0MzsjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfODI1NzYgMHgxMEM5XG4mIzQzOyNkZWZpbmUgSUdCX01BWF9DSFVOS19TSVpFIDEwMjRcbiYjNDM7I2RlZmluZSBNU0lYX1ZFQ1RPUiAwXG4mIzQzOyNkZWZpbmUgUklOR19TSVpFIDQwOTYgLyogTnVtYmVyIG9mIGRlc2NyaXB0b3JzIGluIHJpbmcgKi9cbiYjNDM7XG4mIzQzO3N0cnVjdCBpZ2JfdHhfZGVzYyB7XG4mIzQzO1x0dW5pb24ge1xuJiM0MztcdFx0c3RydWN0IHtcbiYjNDM7XHRcdFx0dTY0IGJ1ZmZlcl9hZGRyOyAvKiBBZGRyZXNzIG9mIGRlc2NyaXB0b3ImIzM5O3MgZGF0YSBidWZmZXIgKi9cbiYjNDM7XHRcdFx0dTMyIGNtZF90eXBlX2xlbjsgLyogQ29tbWFuZC9UeXBlL0xlbmd0aCAqL1xuJiM0MztcdFx0XHR1MzIgb2xpbmZvX3N0YXR1czsgLyogQ29udGV4dC9CdWZmZXIgaW5mbyAqL1xuJiM0MztcdFx0fSByZWFkO1xuJiM0MztcbiYjNDM7XHRcdHN0cnVjdCB7XG4mIzQzO1x0XHRcdHU2NCByc3ZkOyAgICAgICAgLyogUmVzZXJ2ZWQgKi9cbiYjNDM7XHRcdFx0dTMyIG54dHNlcV9zZWVkOyAvKiBOZXh0IHNlcXVlbmNlIHNlZWQgKi9cbiYjNDM7XHRcdFx0dTMyIHN0YXR1czsgICAgICAvKiBEZXNjcmlwdG9yIHN0YXR1cyAqL1xuJiM0MztcdFx0fSB3YjtcbiYjNDM7XHR9O1xuJiM0Mzt9O1xuJiM0MztcbiYjNDM7c3RydWN0IGlnYl9yeF9kZXNjIHtcbiYjNDM7XHR1bmlvbiB7XG4mIzQzO1x0XHRzdHJ1Y3Qge1xuJiM0MztcdFx0XHR1NjQgcGt0X2FkZHI7IC8qIFBhY2tldCBidWZmZXIgYWRkcmVzcyAqL1xuJiM0MztcdFx0XHR1NjQgaGRyX2FkZHI7IC8qIEhlYWRlciBidWZmZXIgYWRkcmVzcyAqL1xuJiM0MztcdFx0fSByZWFkO1xuJiM0MztcdFx0c3RydWN0IHtcbiYjNDM7XHRcdFx0dTE2IHBrdF9pbmZvOyAgICAgLyogUlNTIHR5cGUsIFBhY2tldCB0eXBlICovXG4mIzQzO1x0XHRcdHUxNiBoZHJfaW5mbzsgICAgIC8qIFNwbGl0IEhlYWQsIGJ1ZiBsZW4gKi9cbiYjNDM7XHRcdFx0dTMyIHJzczsgICAgICAgICAgLyogUlNTIEhhc2ggKi9cbiYjNDM7XHRcdFx0dTMyIHN0YXR1c19lcnJvcjsgLyogZXh0IHN0YXR1cy9lcnJvciAqL1xuJiM0MztcdFx0XHR1MTYgbGVuZ3RoOyAgICAgICAvKiBQYWNrZXQgbGVuZ3RoICovXG4mIzQzO1x0XHRcdHUxNiB2bGFuOyAgICAgICAgIC8qIFZMQU4gdGFnICovXG4mIzQzO1x0XHR9IHdiOyAvKiB3cml0ZWJhY2sgKi9cbiYjNDM7XHR9O1xuJiM0Mzt9O1xuJiM0MztcbiYjNDM7c3RydWN0IGlnYiB7XG4mIzQzO1x0dm9pZCAqYmFyMDtcbiYjNDM7XHR1MzIgdHhfdGFpbDtcbiYjNDM7XHR1MzIgcnhfdGFpbDtcbiYjNDM7XHRzdHJ1Y3QgaWdiX3R4X2Rlc2MgdHhfcmluZ1tSSU5HX1NJWkVdIF9fYXR0cmlidXRlX18oKGFsaWduZWQoMTI4KSkpO1xuJiM0MztcdHN0cnVjdCBpZ2JfcnhfZGVzYyByeF9yaW5nW1JJTkdfU0laRV0gX19hdHRyaWJ1dGVfXygoYWxpZ25lZCgxMjgpKSk7XG4mIzQzO307XG4mIzQzO1xuJiM0MztzdGF0aWMgaW5saW5lIHN0cnVjdCBpZ2IgKnRvX2lnYl9zdGF0ZShzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gKHN0cnVjdCBpZ2IgKilkZXZpY2UtXHUwMDNlZHJpdmVyLnJlZ2lvbi52YWRkcjtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGlubGluZSB2b2lkIGlnYl93cml0ZTMyKHN0cnVjdCBpZ2IgKmlnYiwgdTMyIHJlZywgdTMyIHZhbClcbiYjNDM7e1xuJiM0MztcdHdyaXRlbCh2YWwsIGlnYi1cdTAwM2ViYXIwICYjNDM7IHJlZyk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbmxpbmUgdTMyIGlnYl9yZWFkMzIoc3RydWN0IGlnYiAqaWdiLCB1MzIgcmVnKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIHJlYWRsKGlnYi1cdTAwM2ViYXIwICYjNDM7IHJlZyk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgaWdiX3dyaXRlX3BoeShzdHJ1Y3QgaWdiICppZ2IsIHUzMiBvZmZzZXQsIHUxNiBkYXRhKVxuJiM0Mzt7XG4mIzQzO1x0dTMyIG1kaWM7XG4mIzQzO1x0aW50IGk7XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogV3JpdGUgYSBQSFkgcmVnaXN0ZXIgb3ZlciBNRElPLlxuJiM0MztcdCAqXG4mIzQzO1x0ICogQSBwcm9kdWN0aW9uIGRyaXZlciB3b3VsZCBob2xkIHRoZSBTVy9GVyBzZW1hcGhvcmUgKFNXU00uU1dFU01CSSAmIzQzOyB0aGVcbiYjNDM7XHQgKiBTV19GV19TWU5DIFBIWSBiaXQpIGFjcm9zcyB0aGUgTURJTyB0cmFuc2FjdGlvbiB0byBzZXJpYWxpemUgYWdhaW5zdCB0aGVcbiYjNDM7XHQgKiBkZXZpY2UmIzM5O3MgbWFuYWdlbWVudCBmaXJtd2FyZS4gIFRoZSBzZWxmdGVzdCBvd25zIHRoZSBhc3NpZ25lZCBmdW5jdGlvblxuJiM0MztcdCAqIGV4Y2x1c2l2ZWx5IG9uIGEgZGVkaWNhdGVkIHRlc3QgZGV2aWNlIHdpdGggbm8gYWN0aXZlIG1hbmFnZWFiaWxpdHlcbiYjNDM7XHQgKiBjb250ZW5kaW5nIGZvciB0aGUgUEhZLCBzbyB0aGUgc3luYyBpcyBvbWl0dGVkOyBpdCBzaG91bGQgYmUgYWRkZWQgaGVyZVxuJiM0MztcdCAqIGlmIHRoaXMgZXZlciBuZWVkcyB0byBydW4gb24gYSBtYW5hZ2VhYmlsaXR5LWVuYWJsZWQgTklDLlxuJiM0MztcdCAqL1xuJiM0MztcdG1kaWMgPSAoKCh1MzIpZGF0YSkgfFxuJiM0MztcdFx0KG9mZnNldCBcdTAwM2NcdTAwM2MgRTEwMDBfTURJQ19SRUdfU0hJRlQpIHxcbiYjNDM7XHRcdCgxIFx1MDAzY1x1MDAzYyBFMTAwMF9NRElDX1BIWV9TSElGVCkgfFxuJiM0MztcdFx0RTEwMDBfTURJQ19PUF9XUklURSk7XG4mIzQzO1xuJiM0MztcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfTURJQywgbWRpYyk7XG4mIzQzO1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIDEwMDA7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHR1c2xlZXAoNTApO1xuJiM0MztcdFx0bWRpYyA9IGlnYl9yZWFkMzIoaWdiLCBFMTAwMF9NRElDKTtcbiYjNDM7XHRcdGlmIChtZGljIFx1MDAyNiBFMTAwMF9NRElDX1JFQURZKVxuJiM0MztcdFx0XHRicmVhaztcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmICghKG1kaWMgXHUwMDI2IEUxMDAwX01ESUNfUkVBRFkpKVxuJiM0MztcdFx0cmV0dXJuIC0xO1xuJiM0MztcbiYjNDM7XHRpZiAobWRpYyBcdTAwMjYgRTEwMDBfTURJQ19FUlJPUilcbiYjNDM7XHRcdHJldHVybiAtMTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qXG4mIzQzOyAqIENvbmZpZ3VyZSB0aGUgZGV2aWNlIGZvciBQSFkgaW50ZXJuYWwgbG9vcGJhY2sgcGVyIDgyNTc2IGRhdGFzaGVldFxuJiM0MzsgKiBzZWN0aW9uIDMuNS42LjMuMS4gIEZvcmNlIHRoZSBQSFkgdG8gMUdiL3MgZnVsbCBkdXBsZXggd2l0aCBsb29wYmFja1xuJiM0MzsgKiBlbmFibGVkLCB0aGVuIGZvcmNlIHRoZSBNQUMgbGluayBzdGF0ZSB0byBtYXRjaC4gIEludGVybmFsIGxvb3BiYWNrXG4mIzQzOyAqIHdyYXBzIGRhdGEgYXQgdGhlIGVuZCBvZiB0aGUgUEhZIGRhdGFwYXRoIChzZWN0aW9uIDMuNS42LjMpLCBzbyB0aGVcbiYjNDM7ICogcGh5c2ljYWwgbGluayBzdGF0ZSBpcyBpcnJlbGV2YW50LlxuJiM0MzsgKlxuJiM0MzsgKiBTZWN0aW9uIDMuNS42LjEgZGlyZWN0cyB0byBcJiMzNDtVc2UgUEhZIExvb3BiYWNrIGluc3RlYWQgb2YgTUFDIExvb3BiYWNrXG4mIzQzOyAqIG9uIHRoZSA4MjU3NlwmIzM0OywgYW5kIHNlY3Rpb24gMy41LjYuMiBzdGF0ZXMgXCYjMzQ7TUFDIExvb3BiYWNrIGlzIG5vdCB1c2VkXG4mIzQzOyAqIG9uIHRoaXMgZGV2aWNlLlwmIzM0OyAgUkNUTC5MQk1fTUFDIGlzIHN0aWxsIHNldCBlbHNld2hlcmUgYXMgYSBRRU1VLW9ubHlcbiYjNDM7ICogYWNjb21tb2RhdGlvbjsgc2VlIHRoZSBSQ1RMIHByb2dyYW1taW5nIGluIHRoZSBjYWxsZXIgZm9yIHRoZVxuJiM0MzsgKiByYXRpb25hbGUuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgdm9pZCBpZ2Jfc2V0dXBfbG9vcGJhY2soc3RydWN0IGlnYiAqaWdiKVxuJiM0Mzt7XG4mIzQzO1x0dTMyIGN0cmw7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBLaWNrIHRoZSBhdXRvbmVnIG1hY2hpbmVyeSBzb2xlbHkgdG8gYnJpbmcgU1RBVFVTLkxVIHVwIHVuZGVyXG4mIzQzO1x0ICogUUVNVSYjMzk7cyBpZ2IgZW11bGF0aW9uOiBRRU1VIG9ubHkgdXBkYXRlcyBTVEFUVVMuTFUgdmlhIGl0c1xuJiM0MztcdCAqIGF1dG9uZWctZG9uZSB0aW1lciwgYW5kIHdpdGhvdXQgTFUgc2V0IGl0cyByZWNlaXZlIHBhdGhcbiYjNDM7XHQgKiAoZTEwMDB4X2h3X3J4X2VuYWJsZWQpIGRyb3BzIGV2ZXJ5IGxvb3BiYWNrIGZyYW1lLiAgT24gcmVhbFxuJiM0MztcdCAqIGhhcmR3YXJlIGF1dG9uZWcgY2Fubm90IGNvbXBsZXRlIGJlZm9yZSB0aGUgbmV4dCBQSFkgd3JpdGVcbiYjNDM7XHQgKiBiZWxvdyBjbGVhcnMgdGhlIGF1dG9uZWctZW5hYmxlIGJpdCwgc28gdGhpcyBpcyBlZmZlY3RpdmVseSBhXG4mIzQzO1x0ICogbm8tb3AgdGhlcmUuXG4mIzQzO1x0ICovXG4mIzQzO1x0KHZvaWQpaWdiX3dyaXRlX3BoeShpZ2IsIE1JSV9CTUNSLFxuJiM0MztcdFx0XHQgICAgQk1DUl9BTkVOQUJMRSB8IEJNQ1JfQU5SRVNUQVJUKTtcbiYjNDM7XG4mIzQzO1x0LyogUEhZIGNvbnRyb2w6IGxvb3BiYWNrICYjNDM7IDFHYi9zIGZ1bGwgZHVwbGV4LCBhdXRvbmVnIGRpc2FibGVkLiAqL1xuJiM0MztcdHJldCA9IGlnYl93cml0ZV9waHkoaWdiLCBNSUlfQk1DUixcbiYjNDM7XHRcdFx0ICAgIEJNQ1JfTE9PUEJBQ0sgfFxuJiM0MztcdFx0XHQgICAgQk1DUl9TUEVFRDEwMDAgfFxuJiM0MztcdFx0XHQgICAgQk1DUl9GVUxMRFBMWCk7XG4mIzQzO1x0VkZJT19BU1NFUlRfRVEocmV0LCAwLCBcJiMzNDtGYWlsZWQgdG8gd3JpdGUgUEhZIGNvbnRyb2wgcmVnaXN0ZXJcJiMzNDspO1xuJiM0MztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIEJyaWVmIGRlbGF5IGJlZm9yZSBmb3JjaW5nIHRoZSBNQUMsIG1pcnJvcmluZyB0aGUga2VybmVsIGV0aHRvb2xcbiYjNDM7XHQgKiBzZWxmdGVzdCBpbiBpZ2JfaW50ZWdyYXRlZF9waHlfbG9vcGJhY2soKS4gIE5vdCBzcGVjaWZpZWQgYnkgdGhlXG4mIzQzO1x0ICogZGF0YXNoZWV0LCBidXQgZW1waXJpY2FsbHkgcmVxdWlyZWQgYnkgdGhlIGtlcm5lbCBkcml2ZXIuXG4mIzQzO1x0ICovXG4mIzQzO1x0dXNsZWVwKDUwMDAwKTtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBGb3JjZSB0aGUgTUFDIHRvIDFHYi9zIGZ1bGwgZHVwbGV4IHdpdGggbGluayB1cC4gIFdpdGhvdXQgZm9yY2luZ1xuJiM0MztcdCAqIHRoZSBsaW5rIHN0YXRlIHRoZSBkZXNjcmlwdG9yIGVuZ2luZSBkb2VzIG5vdCBydW4sIHNpbmNlIHRoZSBjaGlwXG4mIzQzO1x0ICogbm9ybWFsbHkgd2FpdHMgZm9yIGEgcmVhbCBuZWdvdGlhdGVkIGxpbmsuXG4mIzQzO1x0ICovXG4mIzQzO1x0Y3RybCA9IGlnYl9yZWFkMzIoaWdiLCBFMTAwMF9DVFJMKTtcbiYjNDM7XHRjdHJsIFx1MDAyNj0gfkUxMDAwX0NUUkxfU1BEX1NFTDtcbiYjNDM7XHRjdHJsIHw9IEUxMDAwX0NUUkxfRlJDU1BEIHxcbiYjNDM7XHRcdEUxMDAwX0NUUkxfRlJDRFBYIHxcbiYjNDM7XHRcdEUxMDAwX0NUUkxfU1BEXzEwMDAgfFxuJiM0MztcdFx0RTEwMDBfQ1RSTF9GRCB8XG4mIzQzO1x0XHRFMTAwMF9DVFJMX1NMVTtcbiYjNDM7XHRpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX0NUUkwsIGN0cmwpO1xuJiM0MztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIFNldHRsaW5nIGRlbGF5IG1hdGNoaW5nIHRoZSBrZXJuZWwgZXRodG9vbCBzZWxmdGVzdCYjMzk7cyBtc2xlZXAoNTAwKVxuJiM0MztcdCAqIGF0IHRoZSB0YWlsIG9mIGlnYl9pbnRlZ3JhdGVkX3BoeV9sb29wYmFjaygpLiAgTm90IHNwZWNpZmllZCBieVxuJiM0MztcdCAqIHRoZSBkYXRhc2hlZXQ7IGVtcGlyaWNhbCwgYW5kIGluaGVyaXRlZCBmcm9tIHRoZSBrZXJuZWwgZHJpdmVyLlxuJiM0MztcdCAqL1xuJiM0MztcdHVzbGVlcCg1MDAwMDApO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IGlnYl9wcm9iZShzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UpXG4mIzQzO3tcbiYjNDM7XHRpZiAoIXZmaW9fcGNpX2RldmljZV9tYXRjaChkZXZpY2UsIFBDSV9WRU5ET1JfSURfSU5URUwsIFBDSV9ERVZJQ0VfSURfSU5URUxfODI1NzYpKVxuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKlxuJiM0MzsgKiBQcm9ncmFtIHRoZSBkZXZpY2UgaW50byBhIHVzYWJsZSBzdGF0ZS4gIFNwbGl0IG91dCBvZiBpZ2JfaW5pdCgpIHNvIGl0XG4mIzQzOyAqIGNhbiBiZSByZXVzZWQgYWZ0ZXIgYSBkZXZpY2UgcmVzZXQgdG8gcmUtcHJvZ3JhbSB0aGUgcmVnaXN0ZXJzIHRoYXRcbiYjNDM7ICogQ1RSTC5SU1QgY2xlYXJzLiAgRXhwZWN0cyBiYXIwIHRvIGJlIG1hcHBlZCBhbmQgTVNJLVggYWxyZWFkeSBlbmFibGVkXG4mIzQzOyAqIHZpYSBWRklPLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIHZvaWQgaWdiX2h3X2luaXQoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGlnYiAqaWdiID0gdG9faWdiX3N0YXRlKGRldmljZSk7XG4mIzQzO1x0dTY0IGlvdmFfdHgsIGlvdmFfcng7XG4mIzQzO1x0dTMyIGN0cmwsIHJjdGw7XG4mIzQzO1x0dTE2IGNtZF9yZWc7XG4mIzQzO1x0aW50IHJldHJpZXM7XG4mIzQzO1xuJiM0MztcdGlvdmFfdHggPSB0b19pb3ZhKGRldmljZSwgaWdiLVx1MDAzZXR4X3JpbmcpO1xuJiM0MztcdGlvdmFfcnggPSB0b19pb3ZhKGRldmljZSwgaWdiLVx1MDAzZXJ4X3JpbmcpO1xuJiM0MztcbiYjNDM7XHQvKiBTaWduYWwgdGhhdCB0aGUgZHJpdmVyIGlzIGxvYWRlZCAqL1xuJiM0MztcdGN0cmwgPSBpZ2JfcmVhZDMyKGlnYiwgRTEwMDBfQ1RSTF9FWFQpO1xuJiM0MztcdGN0cmwgfD0gRTEwMDBfQ1RSTF9FWFRfRFJWX0xPQUQ7XG4mIzQzO1x0Y3RybCBcdTAwMjY9IH5FMTAwMF9DVFJMX0VYVF9MSU5LX01PREVfTUFTSztcbiYjNDM7XHRpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX0NUUkxfRVhULCBjdHJsKTtcbiYjNDM7XG4mIzQzO1x0LyogRW5hYmxlIFBDSSBCdXMgTWFzdGVyLiAqL1xuJiM0MztcdGNtZF9yZWcgPSB2ZmlvX3BjaV9jb25maWdfcmVhZHcoZGV2aWNlLCBQQ0lfQ09NTUFORCk7XG4mIzQzO1x0aWYgKChjbWRfcmVnIFx1MDAyNiAoUENJX0NPTU1BTkRfTUFTVEVSIHwgUENJX0NPTU1BTkRfTUVNT1JZKSkgIT1cbiYjNDM7XHQgICAgKFBDSV9DT01NQU5EX01BU1RFUiB8IFBDSV9DT01NQU5EX01FTU9SWSkpIHtcbiYjNDM7XHRcdGNtZF9yZWcgfD0gKFBDSV9DT01NQU5EX01BU1RFUiB8IFBDSV9DT01NQU5EX01FTU9SWSk7XG4mIzQzO1x0XHR2ZmlvX3BjaV9jb25maWdfd3JpdGV3KGRldmljZSwgUENJX0NPTU1BTkQsIGNtZF9yZWcpO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBEaXNhYmxlIERNQSByZS1zZW5kIG9uIFBDSWUgY29tcGxldGlvbiB0aW1lb3V0ICg4MjU3NiBkYXRhc2hlZXRcbiYjNDM7XHQgKiBzZWN0aW9uIDguNi4xLCBHQ1IuQ29tcGxldGlvbl9UaW1lb3V0X1Jlc2VuZCwgYml0IDE2KS4gIFRoZVxuJiM0MztcdCAqIG1peF9hbmRfbWF0Y2ggdGVzdCBpbnRlbnRpb25hbGx5IHN1Ym1pdHMgZGVzY3JpcHRvcnMgdGFyZ2V0aW5nXG4mIzQzO1x0ICogdW5tYXBwZWQgSU9WQXM7IHdpdGggdGhlIGRlZmF1bHQgKHNldCkgdmFsdWUsIHRoZSBkZXZpY2Uga2VlcHNcbiYjNDM7XHQgKiByZXRyeWluZyB0aGUgZmFpbGVkIHJlYWQgaW5kZWZpbml0ZWx5LCB3aGljaCBrZWVwcyBQQ0llIEFFUiBhbmRcbiYjNDM7XHQgKiBJT01NVSBlcnJvciBoYW5kbGluZyBidXN5IGFuZCBpbnRlcmZlcmVzIHdpdGggcmVzZXQgcmVjb3ZlcnkuXG4mIzQzO1x0ICovXG4mIzQzO1x0Y3RybCA9IGlnYl9yZWFkMzIoaWdiLCBFMTAwMF9HQ1IpO1xuJiM0MztcdGN0cmwgXHUwMDI2PSB+RTEwMDBfR0NSX0NNUExfVE1PVVRfUkVTRU5EO1xuJiM0MztcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfR0NSLCBjdHJsKTtcbiYjNDM7XG4mIzQzO1x0LyogQ29uZmlndXJlIFBIWSBpbnRlcm5hbCBsb29wYmFjayBmb3IgdGVzdGluZy4gKi9cbiYjNDM7XHRpZ2Jfc2V0dXBfbG9vcGJhY2soaWdiKTtcbiYjNDM7XG4mIzQzO1x0LyogQ29uZmlndXJlIFRYIGFuZCBSWCBkZXNjcmlwdG9yIHJpbmdzICovXG4mIzQzO1x0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9UREJBTCgwKSwgKHUzMilpb3ZhX3R4KTtcbiYjNDM7XHRpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX1REQkFIKDApLCAodTMyKShpb3ZhX3R4IFx1MDAzZVx1MDAzZSAzMikpO1xuJiM0MztcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfVERMRU4oMCksIFJJTkdfU0laRSAqIHNpemVvZihzdHJ1Y3QgaWdiX3R4X2Rlc2MpKTtcbiYjNDM7XHRpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX1RESCgwKSwgMCk7XG4mIzQzO1x0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9URFQoMCksIDApO1xuJiM0MztcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfVFhEQ1RMKDApLCBFMTAwMF9UWERDVExfUVVFVUVfRU5BQkxFKTtcbiYjNDM7XG4mIzQzO1x0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9SREJBTCgwKSwgKHUzMilpb3ZhX3J4KTtcbiYjNDM7XHRpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX1JEQkFIKDApLCAodTMyKShpb3ZhX3J4IFx1MDAzZVx1MDAzZSAzMikpO1xuJiM0MztcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfUkRMRU4oMCksIFJJTkdfU0laRSAqIHNpemVvZihzdHJ1Y3QgaWdiX3J4X2Rlc2MpKTtcbiYjNDM7XHRpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX1JESCgwKSwgMCk7XG4mIzQzO1x0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9SRFQoMCksIDApO1xuJiM0MztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIFNlbGVjdCB0aGUgYWR2YW5jZWQgb25lLWJ1ZmZlciBkZXNjcmlwdG9yIGZvcm1hdC4gIFBlciA4MjU3NlxuJiM0MztcdCAqIGRhdGFzaGVldCBzZWN0aW9uIDcuMS41LjI6IFwmIzM0O1NSUkNUTFtuXS5ERVNDVFlQRSBtdXN0IGJlIHNldCB0byBhXG4mIzQzO1x0ICogdmFsdWUgb3RoZXIgdGhhbiAwMDBiIGZvciB0aGUgODI1NzYgdG8gd3JpdGUgYmFjayB0aGUgc3BlY2lhbFxuJiM0MztcdCAqIGRlc2NyaXB0b3JzLlwmIzM0OyAgc3RydWN0IGlnYl9yeF9kZXNjIG1hdGNoZXMgdGhlIGFkdmFuY2VkIG9uZS1idWZmZXJcbiYjNDM7XHQgKiB3cml0ZWJhY2sgbGF5b3V0IChzZWN0aW9uIDcuMS41LjIpLCBzbyBwb2xsaW5nIHJ4LndiLnN0YXR1c19lcnJvclxuJiM0MztcdCAqIHJlcXVpcmVzIHRoaXMgZm9ybWF0LiAgU2VjdGlvbiA4LjEwLjIgc3BlY2lmaWVzIERFU0NUWVBFWzI3OjI1XS5cbiYjNDM7XHQgKlxuJiM0MztcdCAqIFRoZSBkaXJlY3Qgd3JpdGUgYWxzbyB6ZXJvZXMgU1JSQ1RMLkJTSVpFUEFDS0VULCB3aGljaCBpc1xuJiM0MztcdCAqIGludGVudGlvbmFsOiBwZXIgc2VjdGlvbiA3LjEuMy4xIGEgemVybyBCU0laRVBBQ0tFVCBmYWxscyBiYWNrIHRvXG4mIzQzO1x0ICogdGhlIFJDVEwuQlNJWkUgYnVmZmVyIHNpemUsIHdob3NlIHJlc2V0IGRlZmF1bHQgKDAwYikgaXMgMjA0OFxuJiM0MztcdCAqIGJ5dGVzIC0tIGFtcGxlIGZvciB0aGUgbG9vcGJhY2sgZnJhbWVzIGhlcmUuXG4mIzQzO1x0ICovXG4mIzQzO1x0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9TUlJDVEwoMCksIEUxMDAwX1NSUkNUTF9ERVNDVFlQRV9BRFZfT05FQlVGKTtcbiYjNDM7XG4mIzQzO1x0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9SWERDVEwoMCksIEUxMDAwX1JYRENUTF9RVUVVRV9FTkFCTEUpO1xuJiM0MztcbiYjNDM7XHQvKiBXYWl0IGZvciBUWCBhbmQgUlggcXVldWVzIHRvIGJlIGVuYWJsZWQgKi9cbiYjNDM7XHRyZXRyaWVzID0gMjAwMDtcbiYjNDM7XHR3aGlsZSAocmV0cmllcy0tIFx1MDAzZSAwKSB7XG4mIzQzO1x0XHRpZiAoKGlnYl9yZWFkMzIoaWdiLCBFMTAwMF9UWERDVEwoMCkpIFx1MDAyNiBFMTAwMF9UWERDVExfUVVFVUVfRU5BQkxFKSBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdCAgICAoaWdiX3JlYWQzMihpZ2IsIEUxMDAwX1JYRENUTCgwKSkgXHUwMDI2IEUxMDAwX1JYRENUTF9RVUVVRV9FTkFCTEUpKVxuJiM0MztcdFx0XHRicmVhaztcbiYjNDM7XHRcdHVzbGVlcCgxMCk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIEVuYWJsZSBSZWNlaXZlciBhbmQgVHJhbnNtaXR0ZXIuICBSQ1RMLkxCTV9NQUMgaXMgc2V0IGluIGFkZGl0aW9uXG4mIzQzO1x0ICogdG8gUEhZIGxvb3BiYWNrIGFzIGEgUUVNVS1vbmx5IGFjY29tbW9kYXRpb246IFFFTVUmIzM5O3MgZW11bGF0ZWQgaWdiXG4mIzQzO1x0ICogZG9lcyBub3QgaG9ub3IgUEhZIHJlZ2lzdGVyIDAgYml0IDE0IChQSFkgaW50ZXJuYWwgbG9vcGJhY2spIGFuZFxuJiM0MztcdCAqIHJlbGllcyBvbiBSQ1RMLkxCTV9NQUMgdG8gd3JhcCBUWCBkZXNjcmlwdG9ycyBiYWNrIHRvIHRoZSBSWFxuJiM0MztcdCAqIHF1ZXVlLiAgRGF0YXNoZWV0IDguMTAuMSAoUkNUTCByZWdpc3RlcikgYWR2aXNlcyBcJiMzNDtXaGVuIHVzaW5nIHRoZVxuJiM0MztcdCAqIGludGVybmFsIFBIWSwgTEJNIHNob3VsZCByZW1haW4gc2V0IHRvIDAwYlwmIzM0Oywgc28gc2V0dGluZyBMQk1fTUFDXG4mIzQzO1x0ICogaGVyZSBkZXZpYXRlcyBmcm9tIGRhdGFzaGVldCBndWlkYW5jZTsgZW1waXJpY2FsbHkgdGhlIGJpdCBoYXNcbiYjNDM7XHQgKiBubyBvYnNlcnZhYmxlIGVmZmVjdCBvbiByZWFsIDgyNTc2IGhhcmR3YXJlIGJlY2F1c2UgTUFDIGxvb3BiYWNrXG4mIzQzO1x0ICogaXMgbm90IGltcGxlbWVudGVkIChkYXRhc2hlZXQgMy41LjYuMikuICBTZXR0aW5nIGJvdGggbGV0cyB0aGVcbiYjNDM7XHQgKiBzZWxmdGVzdCB3b3JrIG9uIGJvdGggcmVhbCBoYXJkd2FyZSBhbmQgUUVNVSB3aXRob3V0IGNvbmRpdGlvbmFsXG4mIzQzO1x0ICogY29kZSBwYXRocy5cbiYjNDM7XHQgKi9cbiYjNDM7XHRyY3RsID0gRTEwMDBfUkNUTF9FTiB8ICAgICAgIC8qIFJlY2VpdmVyIEVuYWJsZSAqL1xuJiM0MztcdCAgICAgICBFMTAwMF9SQ1RMX1VQRSB8ICAgICAgLyogVW5pY2FzdCBQcm9taXNjdW91cyAoZm9yIGR1bW15IE1BQykgKi9cbiYjNDM7XHQgICAgICAgRTEwMDBfUkNUTF9MQk1fTUFDIHwgIC8qIE1BQyBMb29wYmFjayAtIGZvciBRRU1VIGVtdWxhdGlvbiBvbmx5ICovXG4mIzQzO1x0ICAgICAgIEUxMDAwX1JDVExfU0VDUkM7ICAgICAvKiBTdHJpcCBDUkMgKG5lZWRlZCBmb3IgbWVtY21wKSAqL1xuJiM0MztcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfUkNUTCwgcmN0bCk7XG4mIzQzO1x0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9UQ1RMLCBFMTAwMF9UQ1RMX0VOKTtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBQcm9ncmFtIE1TSS1YIGludGVycnVwdCByb3V0aW5nIHBlciA4MjU3NiBkYXRhc2hlZXQ6XG4mIzQzO1x0ICpcbiYjNDM7XHQgKiBHUElFIChzZWN0aW9uIDcuMy4yLjExLCBUYWJsZSA3LTQ3KTogc2V0IE11bHRpcGxlX01TSVggKGJpdCA0KSB0b1xuJiM0MztcdCAqIHJvdXRlIGludGVycnVwdCBjYXVzZXMgdGhyb3VnaCBJVkFSIG1hcHBpbmcsIGFuZCBFSUFNRSAoYml0IDMwKVxuJiM0MztcdCAqIHRvIGFwcGx5IEVJQU0gb24gTVNJLVggYXNzZXJ0aW9uICh3aXRob3V0IEVJQU1FLCBFSUFNIG9ubHlcbiYjNDM7XHQgKiBhcHBsaWVzIG9uIEVJQ1IgcmVhZC93cml0ZSkuXG4mIzQzO1x0ICpcbiYjNDM7XHQgKiBFSUFDIChzZWN0aW9uIDguOC41KTogZW5hYmxlIGF1dG8tY2xlYXIgb2YgRUlDUiBmb3IgdmVjdG9yIDAuXG4mIzQzO1x0ICogV2l0aG91dCBhdXRvLWNsZWFyIHRoZSBjYXVzZSBzdGF5cyBzZXQgYWZ0ZXIgZGVsaXZlcnkgYW5kIHRoZVxuJiM0MztcdCAqIHRlc3QgY2FuIHNlZSBzcHVyaW91cyBpbnRlcnJ1cHRzIG9uIHRoZSBuZXh0IG1lbWNweSBiYXRjaC5cbiYjNDM7XHQgKlxuJiM0MztcdCAqIEVJQU0gKHNlY3Rpb24gOC44LjYpOiBlbmFibGUgYXV0by1tYXNrIG9mIEVJTVMgZm9yIHZlY3RvciAwIG9uXG4mIzQzO1x0ICogTVNJLVggYXNzZXJ0aW9uIChlZmZlY3RpdmUgYmVjYXVzZSBFSUFNRSBpcyBzZXQpLCBzbyBhIHNpbmdsZVxuJiM0MztcdCAqIGludGVycnVwdCBpcyBkZWxpdmVyZWQgcGVyIG1lbWNweSBiYXRjaCBldmVuIGlmIHRoZSBjYXVzZVxuJiM0MztcdCAqIHJlLWFzc2VydHMgYmVmb3JlIHNvZnR3YXJlIHJlLWVuYWJsZXMgdGhlIG1hc2suXG4mIzQzO1x0ICpcbiYjNDM7XHQgKiBJVkFSIChzZWN0aW9uIDcuMy4xLjIsIHJlZ2lzdGVyIGRlZmluaXRpb24gaW4gOC44LjEzKTogbWFwIFJYXG4mIzQzO1x0ICogY2F1c2UgMCB0byBNU0ktWCB2ZWN0b3IgMCBhbmQgbWFyayB0aGUgZW50cnkgdmFsaWQuXG4mIzQzO1x0ICovXG4mIzQzO1x0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9HUElFLCBFMTAwMF9HUElFX01TSVhfTU9ERSB8IEUxMDAwX0dQSUVfRUlBTUUpO1xuJiM0MztcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfRUlBQywgRTEwMDBfRUlDUl9SWF9RVUVVRTApO1xuJiM0MztcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfRUlBTSwgRTEwMDBfRUlDUl9SWF9RVUVVRTApO1xuJiM0MztcbiYjNDM7XHQvKiBNYXAgdmVjdG9yIDAgdG8gaW50ZXJydXB0IGNhdXNlIDAgYW5kIG1hcmsgaXQgdmFsaWQgKi9cbiYjNDM7XHRpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX0lWQVIwLCBFMTAwMF9JVkFSX1ZBTElEKTtcbiYjNDM7XG4mIzQzO1x0LyogRW5hYmxlIGludGVycnVwdHMgb24gdmVjdG9yIDAgKi9cbiYjNDM7XHRpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX0VJTVMsIEUxMDAwX0VJQ1JfUlhfUVVFVUUwKTtcbiYjNDM7XG4mIzQzO1x0LyogSW5pdGlhbGl6ZSBkcml2ZXIgc3RhdGUgYW5kIGNhcGFiaWxpdHkgbGltaXRzICovXG4mIzQzO1x0aWdiLVx1MDAzZXR4X3RhaWwgPSAwO1xuJiM0MztcdGlnYi1cdTAwM2VyeF90YWlsID0gMDtcbiYjNDM7XG4mIzQzO1x0ZGV2aWNlLVx1MDAzZWRyaXZlci5tYXhfbWVtY3B5X3NpemUgPSBJR0JfTUFYX0NIVU5LX1NJWkU7XG4mIzQzO1x0ZGV2aWNlLVx1MDAzZWRyaXZlci5tYXhfbWVtY3B5X2NvdW50ID0gUklOR19TSVpFIC0gMTtcbiYjNDM7XHRkZXZpY2UtXHUwMDNlZHJpdmVyLm1zaSA9IE1TSVhfVkVDVE9SO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBpZ2JfaW5pdChzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgaWdiICppZ2IgPSB0b19pZ2Jfc3RhdGUoZGV2aWNlKTtcbiYjNDM7XG4mIzQzO1x0VkZJT19BU1NFUlRfR0UoZGV2aWNlLVx1MDAzZWRyaXZlci5yZWdpb24uc2l6ZSwgc2l6ZW9mKHN0cnVjdCBpZ2IpKTtcbiYjNDM7XG4mIzQzO1x0aWdiLVx1MDAzZWJhcjAgPSBkZXZpY2UtXHUwMDNlYmFyc1swXS52YWRkcjtcbiYjNDM7XG4mIzQzO1x0LyogUmVzZXQgZGV2aWNlIGFuZCBkaXNhYmxlIGFsbCBpbnRlcnJ1cHRzLiAqL1xuJiM0MztcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfQ1RSTCwgaWdiX3JlYWQzMihpZ2IsIEUxMDAwX0NUUkwpIHwgRTEwMDBfQ1RSTF9SU1QpO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogTXVzdCB3YWl0IGF0IGxlYXN0IDEgbWlsbGlzZWNvbmQgYWZ0ZXIgc2V0dGluZyB0aGUgcmVzZXQgYml0IGJlZm9yZVxuJiM0MztcdCAqIGNoZWNraW5nIGlmIHRoaXMgZGV2aWNlIGlzIHJlYWR5IHRvIGJlIHVzZWQgKDgyNTc2IGRhdGFzaGVldCBzZWN0aW9uXG4mIzQzO1x0ICogNC4yLjEuNi4xKS5cbiYjNDM7XHQgKi9cbiYjNDM7XHR1c2xlZXAoMTAwMCk7XG4mIzQzO1x0d2hpbGUgKGlnYl9yZWFkMzIoaWdiLCBFMTAwMF9DVFJMKSBcdTAwMjYgRTEwMDBfQ1RSTF9SU1QpXG4mIzQzO1x0XHR1c2xlZXAoMTApO1xuJiM0MztcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfSU1DLCAweEZGRkZGRkZGKTtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBFbmFibGUgTVNJLVggdmlhIFZGSU8gYmVmb3JlIGRldmljZS1zaWRlIHJlZ2lzdGVyIHByb2dyYW1taW5nLlxuJiM0MztcdCAqIHZmaW9fcGNpX21zaXhfZW5hYmxlKCkgb25seSB0b3VjaGVzIHRoZSBWRklPIElSUSBtYWNoaW5lcnkgYW5kIHRoZVxuJiM0MztcdCAqIFBDSSBNU0ktWCBjYXBhYmlsaXR5IHZpYSBjb25maWcgc3BhY2U7IGl0IGhhcyBubyBvcmRlcmluZ1xuJiM0MztcdCAqIGRlcGVuZGVuY3kgb24gdGhlIGRldmljZS1zaWRlIHdyaXRlcyBwZXJmb3JtZWQgYnkgaWdiX2h3X2luaXQoKS5cbiYjNDM7XHQgKiBQbGFjaW5nIGl0IGhlcmUga2VlcHMgaWdiX2h3X2luaXQoKSByZXVzYWJsZSBmcm9tIHRoZSByZXNldFxuJiM0MztcdCAqIHJlY292ZXJ5IHBhdGggKHdoaWNoIGNhbGxzIHZmaW9fcGNpX2lycV9yZWVuYWJsZSgpIGluc3RlYWQpLlxuJiM0MztcdCAqL1xuJiM0MztcdHZmaW9fcGNpX21zaXhfZW5hYmxlKGRldmljZSwgTVNJWF9WRUNUT1IsIDEpO1xuJiM0MztcbiYjNDM7XHRpZ2JfaHdfaW5pdChkZXZpY2UpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBpZ2JfcmVtb3ZlKHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBpZ2IgKmlnYiA9IHRvX2lnYl9zdGF0ZShkZXZpY2UpO1xuJiM0MztcbiYjNDM7XHR2ZmlvX3BjaV9tc2l4X2Rpc2FibGUoZGV2aWNlKTtcbiYjNDM7XHRpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX1JDVEwsIDApO1xuJiM0MztcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfVENUTCwgMCk7XG4mIzQzO1x0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9DVFJMLCBpZ2JfcmVhZDMyKGlnYiwgRTEwMDBfQ1RSTCkgfCBFMTAwMF9DVFJMX1JTVCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIGlnYl9pcnFfZGlzYWJsZShzdHJ1Y3QgaWdiICppZ2IpXG4mIzQzO3tcbiYjNDM7XHRpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX0VJTUMsIEUxMDAwX0VJQ1JfUlhfUVVFVUUwKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgaWdiX2lycV9lbmFibGUoc3RydWN0IGlnYiAqaWdiKVxuJiM0Mzt7XG4mIzQzO1x0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9FSU1TLCBFMTAwMF9FSUNSX1JYX1FVRVVFMCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIGlnYl9pcnFfY2xlYXIoc3RydWN0IGlnYiAqaWdiKVxuJiM0Mzt7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBVc2Ugd3JpdGUtdG8tY2xlYXIgKGRhdGFzaGVldCA3LjMuNC4yKS4gIEluIE1TSS1YIG1vZGUgd2l0aCBFSUFDXG4mIzQzO1x0ICogcHJvZ3JhbW1lZCwgc2VjdGlvbiA4LjguNSBleHBsaWNpdGx5IHN0YXRlcyBcJiMzNDtJZiBhbnkgYml0cyBhcmUgc2V0XG4mIzQzO1x0ICogaW4gRUlBQywgdGhlIEVJQ1IgcmVnaXN0ZXIgc2hvdWxkIG5vdCBiZSByZWFkXCYjMzQ7LCB3aGljaCBydWxlcyBvdXRcbiYjNDM7XHQgKiB0aGUgcmVhZC10by1jbGVhciBwYXRoIGluIDcuMy40LjMuICBCaXRzIG5vdCBpbiBFSUFDIGFyZSBzdGlsbFxuJiM0MztcdCAqIGNsZWFyZWQgYnkgd3JpdGluZyAxLlxuJiM0MztcdCAqL1xuJiM0MztcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfRUlDUiwgMHhGRkZGRkZGRik7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIGlnYl9tZW1jcHlfc3RhcnQoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlLCBpb3ZhX3Qgc3JjLFxuJiM0MztcdFx0XHQgICAgIGlvdmFfdCBkc3QsIHU2NCBzaXplLCB1NjQgY291bnQpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgaWdiICppZ2IgPSB0b19pZ2Jfc3RhdGUoZGV2aWNlKTtcbiYjNDM7XHRzdHJ1Y3QgaWdiX3J4X2Rlc2MgKnJ4O1xuJiM0MztcdHN0cnVjdCBpZ2JfdHhfZGVzYyAqdHg7XG4mIzQzO1x0dTMyIGk7XG4mIzQzO1xuJiM0MztcdGlnYl9pcnFfZGlzYWJsZShpZ2IpO1xuJiM0MztcbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBjb3VudDsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdHR4ID0gXHUwMDI2aWdiLVx1MDAzZXR4X3JpbmdbaWdiLVx1MDAzZXR4X3RhaWxdO1xuJiM0MztcdFx0cnggPSBcdTAwMjZpZ2ItXHUwMDNlcnhfcmluZ1tpZ2ItXHUwMDNlcnhfdGFpbF07XG4mIzQzO1xuJiM0MztcdFx0bWVtc2V0KHR4LCAwLCBzaXplb2Yoc3RydWN0IGlnYl90eF9kZXNjKSk7XG4mIzQzO1x0XHRtZW1zZXQocngsIDAsIHNpemVvZihzdHJ1Y3QgaWdiX3J4X2Rlc2MpKTtcbiYjNDM7XG4mIzQzO1x0XHRyeC1cdTAwM2VyZWFkLnBrdF9hZGRyID0gY3B1X3RvX2xlNjQoZHN0KTtcbiYjNDM7XHRcdHJ4LVx1MDAzZXJlYWQuaGRyX2FkZHIgPSBjcHVfdG9fbGU2NCgwKTtcbiYjNDM7XG4mIzQzO1x0XHR0eC1cdTAwM2VyZWFkLmJ1ZmZlcl9hZGRyID0gY3B1X3RvX2xlNjQoc3JjKTtcbiYjNDM7XHRcdC8qXG4mIzQzO1x0XHQgKiBCdWlsZCBhbiBhZHZhbmNlZCBkYXRhIGRlc2NyaXB0b3IgcGVyIDgyNTc2IGRhdGFzaGVldFxuJiM0MztcdFx0ICogc2VjdGlvbiA3LjIuMi4zLiAgREVYVCBtYXJrcyB0aGUgZGVzY3JpcHRvciBhcyBhZHZhbmNlZFxuJiM0MztcdFx0ICogKHJlcXVpcmVkIGJ5IGhhcmR3YXJlKTsgRFRZUD1kYXRhIHNlbGVjdHMgdGhlIGRhdGFcbiYjNDM7XHRcdCAqIGRlc2NyaXB0b3I7IElGQ1MgYXNrcyB0aGUgTUFDIHRvIGFwcGVuZCB0aGUgRXRoZXJuZXRcbiYjNDM7XHRcdCAqIEZDUyAod2l0aG91dCBpdCB0aGUgZnJhbWUgaXMgZHJvcHBlZCBhcyBtYWxmb3JtZWQpO1xuJiM0MztcdFx0ICogRU9QIG1hcmtzIGVuZCBvZiBwYWNrZXQuICBEVEFMRU4gaXMgdGhlIGJ1ZmZlciBsZW5ndGhcbiYjNDM7XHRcdCAqIGluIGJpdHMgMTU6MCBvZiBjbWRfdHlwZV9sZW4uXG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdHR4LVx1MDAzZXJlYWQuY21kX3R5cGVfbGVuID0gY3B1X3RvX2xlMzIoKHVpbnQzMl90KXNpemUgfFxuJiM0MztcdFx0XHRFMTAwMF9BRFZUWERfRFRZUF9EQVRBIHxcbiYjNDM7XHRcdFx0RTEwMDBfQURWVFhEX0RDTURfREVYVCB8XG4mIzQzO1x0XHRcdEUxMDAwX0FEVlRYRF9EQ01EX0lGQ1MgfFxuJiM0MztcdFx0XHRFMTAwMF9BRFZUWERfRENNRF9FT1ApO1xuJiM0MztcdFx0LypcbiYjNDM7XHRcdCAqIFBBWUxFTiAoc2VjdGlvbiA3LjIuMi4zLjExKSBpcyB0aGUgdG90YWwgcGF5bG9hZCBzaXplXG4mIzQzO1x0XHQgKiBpbiBvbGluZm9fc3RhdHVzWzMxOjE0XS5cbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0dHgtXHUwMDNlcmVhZC5vbGluZm9fc3RhdHVzID1cbiYjNDM7XHRcdFx0Y3B1X3RvX2xlMzIoKHVpbnQzMl90KXNpemUgXHUwMDNjXHUwMDNjIEUxMDAwX0FEVlRYRF9QQVlMRU5fU0hJRlQpO1xuJiM0MztcbiYjNDM7XHRcdGlnYi1cdTAwM2V0eF90YWlsID0gKGlnYi1cdTAwM2V0eF90YWlsICYjNDM7IDEpICUgUklOR19TSVpFO1xuJiM0MztcdFx0aWdiLVx1MDAzZXJ4X3RhaWwgPSAoaWdiLVx1MDAzZXJ4X3RhaWwgJiM0MzsgMSkgJSBSSU5HX1NJWkU7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX1JEVCgwKSwgaWdiLVx1MDAzZXJ4X3RhaWwpO1xuJiM0MztcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfVERUKDApLCBpZ2ItXHUwMDNldHhfdGFpbCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qXG4mIzQzOyAqIFJlc2V0IHRoZSBkZXZpY2UgdmlhIFZGSU9fREVWSUNFX1JFU0VUIChQQ0llIEZMUiBvbiB0aGUgODI1NzYpIGFuZFxuJiM0MzsgKiByZS1wcm9ncmFtIGl0LiAgVkZJT19ERVZJQ0VfUkVTRVQgdGVhcnMgZG93biB0aGUga2VybmVsLXNpZGUgTVNJLVhcbiYjNDM7ICogdHJpZ2dlciBidXQgbGVhdmVzIHVzZXItc2lkZSBldmVudGZkcyBpbnRhY3QsIHNvIHJlLWFybSB0aGUgdHJpZ2dlclxuJiM0MzsgKiB2aWEgdmZpb19wY2lfaXJxX3JlZW5hYmxlKCkgYmVmb3JlIHJlcHJvZ3JhbW1pbmcgc28gYW55IGNhbGxlci1jYWNoZWRcbiYjNDM7ICogZXZlbnRmZCByZW1haW5zIHZhbGlkLlxuJiM0MzsgKlxuJiM0MzsgKiBGTFIgY2xlYXJzIGRldmljZS1zaWRlIHN0YXRlIHRvIHBvd2VyLW9uIHJlc2V0IHZhbHVlcyAoZGF0YXNoZWV0XG4mIzQzOyAqIDQuMi4xLjUuMTogYSBQRiBGTFIgaXMgXCYjMzQ7ZXF1aXZhbGVudCB0byBhIEQwLVx1MDAzZUQzLVx1MDAzZUQwIHRyYW5zaXRpb25cJiMzNDspLCBzb1xuJiM0MzsgKiBFSU1TIGFuZCBFSUNSIGNvbWUgYmFjayBhcyAwIGZyb20gdGhlaXIgcmVnaXN0ZXItZGVmaW5lZCBpbml0aWFsXG4mIzQzOyAqIHZhbHVlcywgYW5kIGlnYl9od19pbml0KCkgcmVzZXRzIHR4X3RhaWwvcnhfdGFpbCB0byAwLiAgVGhlIG5leHRcbiYjNDM7ICogaWdiX21lbWNweV9zdGFydCgpIHdpbGwgbWVtc2V0IGVhY2ggZGVzY3JpcHRvciBpdCB0b3VjaGVzIGJlZm9yZVxuJiM0MzsgKiBzdWJtaXNzaW9uLCBzbyBubyBleHBsaWNpdCBJTUMvRUlDUiB3cml0ZXMgb3IgcmluZyBtZW1zZXRzIGFyZVxuJiM0MzsgKiBuZWVkZWQgaGVyZS5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyB2b2lkIGlnYl9lcnJvcl9yZXNldF9hbmRfcmVpbml0KHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSlcbiYjNDM7e1xuJiM0MztcdHZmaW9fcGNpX2RldmljZV9yZXNldChkZXZpY2UpO1xuJiM0MztcdHZmaW9fcGNpX21zaXhfcmVlbmFibGUoZGV2aWNlLCBNU0lYX1ZFQ1RPUiwgMSk7XG4mIzQzO1x0aWdiX2h3X2luaXQoZGV2aWNlKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBpZ2JfbWVtY3B5X3dhaXQoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGlnYiAqaWdiID0gdG9faWdiX3N0YXRlKGRldmljZSk7XG4mIzQzO1x0c3RydWN0IGlnYl9yeF9kZXNjICpyeDtcbiYjNDM7XHR1MzIgc3RhdHVzID0gMDtcbiYjNDM7XHR1MzIgcHJldl90YWlsO1xuJiM0MztcdGludCByZXRyaWVzO1xuJiM0MztcbiYjNDM7XHRwcmV2X3RhaWwgPSAoaWdiLVx1MDAzZXJ4X3RhaWwgJiM0MzsgUklOR19TSVpFIC0gMSkgJSBSSU5HX1NJWkU7XG4mIzQzO1x0cnggPSBcdTAwMjZpZ2ItXHUwMDNlcnhfcmluZ1twcmV2X3RhaWxdO1xuJiM0MztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIFJlYWwgODI1NzYgaGFyZHdhcmUgcHJvY2Vzc2VzIHRoZSBkZXNjcmlwdG9yIHJpbmcgYXQgbGluZSByYXRlLlxuJiM0MztcdCAqIG1heF9tZW1jcHlfc2l6ZSA9IChSSU5HX1NJWkUgLSAxKSAqIElHQl9NQVhfQ0hVTktfU0laRSB+PSA0IE1CLFxuJiM0MztcdCAqIHNwbGl0IGludG8gNDA5NSAxIEtCIGZyYW1lcy4gIEF0IDEgR2IvcyAofjEyNSBNQi9zKSB0aGUgd29yc3RcbiYjNDM7XHQgKiB2YWxpZCBtZW1jcHkgdGFrZXMgfjMyIG1zIG9uIHRoZSB3aXJlLCBwbHVzIHBlci1mcmFtZSBwcmVhbWJsZSxcbiYjNDM7XHQgKiBTRkQsIElGRyBhbmQgRkNTIG92ZXJoZWFkICh+MyUpIGFuZCBkZXNjcmlwdG9yIGZldGNoL3dyaXRlYmFja1xuJiM0MztcdCAqIGxhdGVuY3kuICBXYWl0IHVwIHRvIH4yMDAgbXMgYmVmb3JlIGRlY2xhcmluZyB0aGUgZGV2aWNlIGh1bmc7XG4mIzQzO1x0ICogfjZ4IHRoZSBsaW5lLXJhdGUgZmxvb3IgbGVhdmVzIGNvbWZvcnRhYmxlIGhlYWRyb29tIGZvciBob3N0XG4mIzQzO1x0ICogc2NoZWR1bGluZyBqaXR0ZXIgd2hpbGUga2VlcGluZyB0aGUgaW50ZW50aW9uYWwgaW52YWxpZC1ETUFcbiYjNDM7XHQgKiB0ZXN0cyBib3VuZGVkLlxuJiM0MztcdCAqL1xuJiM0MztcdHJldHJpZXMgPSAyMDA7XG4mIzQzO1x0d2hpbGUgKHJldHJpZXMtLSBcdTAwM2UgMCkge1xuJiM0MztcdFx0c3RhdHVzID0gbGUzMl90b19jcHUoUkVBRF9PTkNFKHJ4LVx1MDAzZXdiLnN0YXR1c19lcnJvcikpO1xuJiM0MztcdFx0aWYgKHN0YXR1cyBcdTAwMjYgMSlcbiYjNDM7XHRcdFx0YnJlYWs7XG4mIzQzO1x0XHR1c2xlZXAoMTAwMCk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAoc3RhdHVzIFx1MDAyNiAxKVxuJiM0MztcdFx0LypcbiYjNDM7XHRcdCAqIEVuc3VyZSB0aGUgdGVzdCBjb2RlIGRvZXNuJiMzOTt0IHNwZWN1bGF0aXZlbHkgcmVhZCB0aGUgRE1BXG4mIzQzO1x0XHQgKiBkZXN0aW5hdGlvbiBidWZmZXIgYmVmb3JlIHdlIGhhdmUgdmVyaWZpZWQgdGhhdCB0aGVcbiYjNDM7XHRcdCAqIGRlc2NyaXB0b3Igd3JpdGViYWNrIGlzIGNvbXBsZXRlLlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRybWIoKTtcbiYjNDM7XG4mIzQzO1x0aWdiX2lycV9jbGVhcihpZ2IpO1xuJiM0MztcbiYjNDM7XHRpZ2JfaXJxX2VuYWJsZShpZ2IpO1xuJiM0MztcbiYjNDM7XHRpZiAoc3RhdHVzIFx1MDAyNiAxKVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogVGhlIGRlc2NyaXB0b3IgbmV2ZXIgY29tcGxldGVkLiAgT24gcmVhbCA4MjU3NiBoYXJkd2FyZSB0aGlzXG4mIzQzO1x0ICogdHlwaWNhbGx5IGZvbGxvd3MgYSBETUEtcmVhZCBmYXVsdCBmcm9tIG9uZSBvZiB0aGUgaW50ZW50aW9uYWxcbiYjNDM7XHQgKiB1bm1hcHBlZC1JT1ZBIHRlc3RzOyB0aGUgZmF1bHQgbGVhdmVzIHRoZSBkZXNjcmlwdG9yIGVuZ2luZVxuJiM0MztcdCAqIHVuYWJsZSB0byBzZXJ2aWNlIHN1YnNlcXVlbnQgdmFsaWQgZGVzY3JpcHRvcnMuICBDVFJMLlJTVCBhbG9uZVxuJiM0MztcdCAqIHJlaW5pdGlhbGl6ZXMgdGhlIHF1ZXVlIHJlZ2lzdGVycyBidXQgbGVhdmVzIHRoZSBlbmdpbmUgd2VkZ2VkXG4mIzQzO1x0ICogZm9yIHRoZSBjdXJyZW50IHByb2Nlc3MsIHNvIGEgYnJvYWRlciBWRklPX0RFVklDRV9SRVNFVCAoRkxSKVxuJiM0MztcdCAqIGlzIHJlcXVpcmVkLlxuJiM0MztcdCAqXG4mIzQzO1x0ICogRGVsYXkgYmVmb3JlIHJlcXVlc3RpbmcgcmVzZXQgc28gUENJZS9JT01NVS9BRVIgZXJyb3IgaGFuZGxpbmdcbiYjNDM7XHQgKiB0cmlnZ2VyZWQgYnkgdGhlIGp1c3Qtb2JzZXJ2ZWQgRE1BIGZhdWx0IGNhbiByZWxlYXNlIHRoZSBkZXZpY2VcbiYjNDM7XHQgKiBsb2NrIFZGSU9fREVWSUNFX1JFU0VUIGNvbnRlbmRzIGZvci4gIFRoZSAxMCBtcyB2YWx1ZSBpc1xuJiM0MztcdCAqIGhldXJpc3RpYy4gIFRoZSBjdXJyZW50IG1lbWNweSBzdGlsbCBmYWlscyB3aXRoIC1FVElNRURPVVQ7XG4mIzQzO1x0ICogcmVjb3Zlcnkgb25seSBlbnN1cmVzIHRoZSBuZXh0IG1lbWNweSBzdGFydHMgZnJvbSBhIHVzYWJsZSBzdGF0ZS5cbiYjNDM7XHQgKi9cbiYjNDM7XHR1c2xlZXAoMTAwMDApO1xuJiM0MztcdGlnYl9lcnJvcl9yZXNldF9hbmRfcmVpbml0KGRldmljZSk7XG4mIzQzO1xuJiM0MztcdHJldHVybiAtRVRJTUVET1VUO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBpZ2Jfc2VuZF9tc2koc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGlnYiAqaWdiID0gdG9faWdiX3N0YXRlKGRldmljZSk7XG4mIzQzO1xuJiM0MztcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfRUlDUywgMSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO2NvbnN0IHN0cnVjdCB2ZmlvX3BjaV9kcml2ZXJfb3BzIGlnYl9vcHMgPSB7XG4mIzQzO1x0Lm5hbWUgPSBcJiMzNDtpZ2JcJiMzNDssXG4mIzQzO1x0LnByb2JlID0gaWdiX3Byb2JlLFxuJiM0MztcdC5pbml0ID0gaWdiX2luaXQsXG4mIzQzO1x0LnJlbW92ZSA9IGlnYl9yZW1vdmUsXG4mIzQzO1x0Lm1lbWNweV9zdGFydCA9IGlnYl9tZW1jcHlfc3RhcnQsXG4mIzQzO1x0Lm1lbWNweV93YWl0ID0gaWdiX21lbWNweV93YWl0LFxuJiM0MztcdC5zZW5kX21zaSA9IGlnYl9zZW5kX21zaSxcbiYjNDM7fTtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9pbmNsdWRlL2xpYnZmaW8vdmZpb19wY2lfZGV2aWNlLmggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9pbmNsdWRlL2xpYnZmaW8vdmZpb19wY2lfZGV2aWNlLmhcbmluZGV4IDI4NTg4ODVhODliYmJmLi4yZTY3YWZjMGQ1ODA5OCAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2luY2x1ZGUvbGlidmZpby92ZmlvX3BjaV9kZXZpY2UuaFxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvaW5jbHVkZS9saWJ2ZmlvL3ZmaW9fcGNpX2RldmljZS5oXG5AQCAtNjgsNiAmIzQzOzY4LDggQEAgdm9pZCB2ZmlvX3BjaV9jb25maWdfYWNjZXNzKHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSwgYm9vbCB3cml0ZSxcbiB2b2lkIHZmaW9fcGNpX2lycV9lbmFibGUoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlLCB1MzIgaW5kZXgsXG4gXHRcdFx0IHUzMiB2ZWN0b3IsIGludCBjb3VudCk7XG4gdm9pZCB2ZmlvX3BjaV9pcnFfZGlzYWJsZShzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UsIHUzMiBpbmRleCk7XG4mIzQzO3ZvaWQgdmZpb19wY2lfaXJxX3JlZW5hYmxlKHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSwgdTMyIGluZGV4LFxuJiM0MztcdFx0XHQgICB1MzIgdmVjdG9yLCBpbnQgY291bnQpO1xuIHZvaWQgdmZpb19wY2lfaXJxX3RyaWdnZXIoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlLCB1MzIgaW5kZXgsIHUzMiB2ZWN0b3IpO1xuIFxuIHN0YXRpYyBpbmxpbmUgdm9pZCBmY250bF9zZXRfbm9uYmxvY2soaW50IGZkKVxuQEAgLTkyLDYgJiM0Mzs5NCwxMiBAQCBzdGF0aWMgaW5saW5lIHZvaWQgdmZpb19wY2lfbXNpX2Rpc2FibGUoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlKVxuIFx0dmZpb19wY2lfaXJxX2Rpc2FibGUoZGV2aWNlLCBWRklPX1BDSV9NU0lfSVJRX0lOREVYKTtcbiB9XG4gXG4mIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCB2ZmlvX3BjaV9tc2lfcmVlbmFibGUoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlLFxuJiM0MztcdFx0XHRcdFx0IHUzMiB2ZWN0b3IsIGludCBjb3VudClcbiYjNDM7e1xuJiM0MztcdHZmaW9fcGNpX2lycV9yZWVuYWJsZShkZXZpY2UsIFZGSU9fUENJX01TSV9JUlFfSU5ERVgsIHZlY3RvciwgY291bnQpO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyBpbmxpbmUgdm9pZCB2ZmlvX3BjaV9tc2l4X2VuYWJsZShzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UsXG4gXHRcdFx0XHRcdHUzMiB2ZWN0b3IsIGludCBjb3VudClcbiB7XG5AQCAtMTAzLDYgJiM0MzsxMTEsMTIgQEAgc3RhdGljIGlubGluZSB2b2lkIHZmaW9fcGNpX21zaXhfZGlzYWJsZShzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UpXG4gXHR2ZmlvX3BjaV9pcnFfZGlzYWJsZShkZXZpY2UsIFZGSU9fUENJX01TSVhfSVJRX0lOREVYKTtcbiB9XG4gXG4mIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCB2ZmlvX3BjaV9tc2l4X3JlZW5hYmxlKHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSxcbiYjNDM7XHRcdFx0XHRcdCAgdTMyIHZlY3RvciwgaW50IGNvdW50KVxuJiM0Mzt7XG4mIzQzO1x0dmZpb19wY2lfaXJxX3JlZW5hYmxlKGRldmljZSwgVkZJT19QQ0lfTVNJWF9JUlFfSU5ERVgsIHZlY3RvciwgY291bnQpO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyBpbmxpbmUgaW50IF9fdG9faW92YShzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UsIHZvaWQgKnZhZGRyLCBpb3ZhX3QgKmlvdmEpXG4ge1xuIFx0cmV0dXJuIF9faW9tbXVfaHZhMmlvdmEoZGV2aWNlLVx1MDAzZWlvbW11LCB2YWRkciwgaW92YSk7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvbGlidmZpby5tayBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2xpYnZmaW8ubWtcbmluZGV4IDlmNDdiY2VlZDE2ZjRjLi4xZjEzY2NhMDQzNDhiNCAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2xpYnZmaW8ubWtcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2xpYnZmaW8ubWtcbkBAIC0xMiw2ICYjNDM7MTIsNyBAQCBMSUJWRklPX0MgJiM0Mzs9IHZmaW9fcGNpX2RyaXZlci5jXG4gaWZlcSAoJChBUkNIOng4Nl82ND14ODYpLHg4NilcbiBMSUJWRklPX0MgJiM0Mzs9IGRyaXZlcnMvaW9hdC9pb2F0LmNcbiBMSUJWRklPX0MgJiM0Mzs9IGRyaXZlcnMvZHNhL2RzYS5jXG4mIzQzO0xJQlZGSU9fQyAmIzQzOz0gZHJpdmVycy9pZ2IvaWdiLmNcbiBlbmRpZlxuIFxuIExJQlZGSU9fT1VUUFVUIDo9ICQoT1VUUFVUKS9saWJ2ZmlvXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvdmZpb19wY2lfZGV2aWNlLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi92ZmlvX3BjaV9kZXZpY2UuY1xuaW5kZXggZmM3NWUwNGVmMDEwY2YuLjdiODM5NGQwYWM1MDc2IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvdmZpb19wY2lfZGV2aWNlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL3ZmaW9fcGNpX2RldmljZS5jXG5AQCAtMTA2LDYgJiM0MzsxMDYsMjggQEAgdm9pZCB2ZmlvX3BjaV9pcnFfZGlzYWJsZShzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UsIHUzMiBpbmRleClcbiBcdHZmaW9fcGNpX2lycV9zZXQoZGV2aWNlLCBpbmRleCwgMCwgMCwgTlVMTCk7XG4gfVxuIFxuJiM0MzsvKlxuJiM0MzsgKiBSZS1pc3N1ZSBWRklPX0RFVklDRV9TRVRfSVJRUyBmb3IgYW4gYWxyZWFkeS1lbmFibGVkIHZlY3RvciByYW5nZSB1c2luZ1xuJiM0MzsgKiB0aGUgZXhpc3RpbmcgZXZlbnRmZHMuICBJbnRlbmRlZCBmb3IgZHJpdmVycyB0aGF0IG5lZWQgdG8gcmUtYXJtIGRldmljZVxuJiM0MzsgKiBpbnRlcnJ1cHRzIGFmdGVyIGEgVkZJT19ERVZJQ0VfUkVTRVQsIHdoaWNoIHRlYXJzIGRvd24gdGhlIGtlcm5lbC1zaWRlXG4mIzQzOyAqIElSUSB0cmlnZ2VyIGJ1dCBsZWF2ZXMgdXNlci1zaWRlIGV2ZW50ZmRzIGludGFjdC4gIFJlY3JlYXRpbmcgdGhlXG4mIzQzOyAqIGV2ZW50ZmRzIHdvdWxkIGludmFsaWRhdGUgYW55IHRlc3QtZml4dHVyZSBjYWNoZSBvZiB0aGUgZmQsIHNvIHRoaXNcbiYjNDM7ICogaGVscGVyIGRlbGliZXJhdGVseSBwcmVzZXJ2ZXMgdGhlbS5cbiYjNDM7ICovXG4mIzQzO3ZvaWQgdmZpb19wY2lfaXJxX3JlZW5hYmxlKHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSwgdTMyIGluZGV4LFxuJiM0MztcdFx0XHQgICB1MzIgdmVjdG9yLCBpbnQgY291bnQpXG4mIzQzO3tcbiYjNDM7XHRpbnQgaTtcbiYjNDM7XG4mIzQzO1x0Y2hlY2tfc3VwcG9ydGVkX2lycV9pbmRleChpbmRleCk7XG4mIzQzO1xuJiM0MztcdGZvciAoaSA9IHZlY3RvcjsgaSBcdTAwM2MgdmVjdG9yICYjNDM7IGNvdW50OyBpJiM0MzsmIzQzOylcbiYjNDM7XHRcdFZGSU9fQVNTRVJUX0dFKGRldmljZS1cdTAwM2Vtc2lfZXZlbnRmZHNbaV0sIDAsXG4mIzQzO1x0XHRcdCAgICAgICBcJiMzNDt2ZWN0b3IgJWQgZXZlbnRmZCBub3QgYWxsb2NhdGVkXFxuXCYjMzQ7LCBpKTtcbiYjNDM7XG4mIzQzO1x0dmZpb19wY2lfaXJxX3NldChkZXZpY2UsIGluZGV4LCB2ZWN0b3IsIGNvdW50LCBkZXZpY2UtXHUwMDNlbXNpX2V2ZW50ZmRzICYjNDM7IHZlY3Rvcik7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIHZvaWQgdmZpb19wY2lfaXJxX2dldChzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UsIHUzMiBpbmRleCxcbiBcdFx0XHQgICAgIHN0cnVjdCB2ZmlvX2lycV9pbmZvICppcnFfaW5mbylcbiB7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvdmZpb19wY2lfZHJpdmVyLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi92ZmlvX3BjaV9kcml2ZXIuY1xuaW5kZXggNjgyN2Y0YTZmZWJlOTkuLmE1ZDA1NDcxMzJjNDA1IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvdmZpb19wY2lfZHJpdmVyLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL3ZmaW9fcGNpX2RyaXZlci5jXG5AQCAtNSwxMiAmIzQzOzUsMTQgQEBcbiAjaWZkZWYgX194ODZfNjRfX1xuIGV4dGVybiBzdHJ1Y3QgdmZpb19wY2lfZHJpdmVyX29wcyBkc2Ffb3BzO1xuIGV4dGVybiBzdHJ1Y3QgdmZpb19wY2lfZHJpdmVyX29wcyBpb2F0X29wcztcbiYjNDM7ZXh0ZXJuIHN0cnVjdCB2ZmlvX3BjaV9kcml2ZXJfb3BzIGlnYl9vcHM7XG4gI2VuZGlmXG4gXG4gc3RhdGljIHN0cnVjdCB2ZmlvX3BjaV9kcml2ZXJfb3BzICpkcml2ZXJfb3BzW10gPSB7XG4gI2lmZGVmIF9feDg2XzY0X19cbiBcdFx1MDAyNmRzYV9vcHMsXG4gXHRcdTAwMjZpb2F0X29wcyxcbiYjNDM7XHRcdTAwMjZpZ2Jfb3BzLFxuICNlbmRpZlxuIH07XG4gXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTEgMTk6MTM8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb25seSBtb2RpZmllcyBjb2RlIGluIHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vLCB3aGljaCBjb250YWlucyB1c2VyLXNwYWNlIHNlbGZ0ZXN0cyBhbmQgZG9lcyBub3QgYWZmZWN0IHRoZSBjb3JlIGtlcm5lbCwgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlIGNvZGUuIFRoZXJlZm9yZSwgaXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IGNhbiBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdAogICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksCiAgIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAzMTM3YzAzMTk5ZjY0N2VmYjQzYmJiYWY4MDUzODQ0ZDBjYjYwMGVkCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFNhdCBKdWwgMTEgMTk6MTM6NDAgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9kcml2ZXJzL2lnYi9lMTAwMF84MjU3NS5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvZHJpdmVycy9pZ2IvZTEwMDBfODI1NzUuaApuZXcgZmlsZSBtb2RlIDEyMDAwMAppbmRleCAwMDAwMDAwMDAwMDAwMC4uYjg0YWZmZGVjNTU5OGUKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9kcml2ZXJzL2lnYi9lMTAwMF84MjU3NS5oCkBAIC0wLDAgJiM0MzsxIEBACiYjNDM7Li4vLi4vLi4vLi4vLi4vLi4vLi4vZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWdiL2UxMDAwXzgyNTc1LmgKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9kcml2ZXJzL2lnYi9lMTAwMF9kZWZpbmVzLmggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9kcml2ZXJzL2lnYi9lMTAwMF9kZWZpbmVzLmgKbmV3IGZpbGUgbW9kZSAxMjAwMDAKaW5kZXggMDAwMDAwMDAwMDAwMDAuLjlmOTdmNDMzMDA4NjZkCi0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvZHJpdmVycy9pZ2IvZTEwMDBfZGVmaW5lcy5oCkBAIC0wLDAgJiM0MzsxIEBACiYjNDM7Li4vLi4vLi4vLi4vLi4vLi4vLi4vZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWdiL2UxMDAwX2RlZmluZXMuaApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2RyaXZlcnMvaWdiL2UxMDAwX3JlZ3MuaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2RyaXZlcnMvaWdiL2UxMDAwX3JlZ3MuaApuZXcgZmlsZSBtb2RlIDEyMDAwMAppbmRleCAwMDAwMDAwMDAwMDAwMC4uYzczMzYzNDE3MWJiMTMKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9kcml2ZXJzL2lnYi9lMTAwMF9yZWdzLmgKQEAgLTAsMCAmIzQzOzEgQEAKJiM0MzsuLi8uLi8uLi8uLi8uLi8uLi8uLi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZ2IvZTEwMDBfcmVncy5oClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvZHJpdmVycy9pZ2IvaWdiLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9kcml2ZXJzL2lnYi9pZ2IuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMC4uMjA2YTFlNjQ4OWMyMWMKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9kcml2ZXJzL2lnYi9pZ2IuYwpAQCAtMCwwICYjNDM7MSw1NTQgQEAKJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5CiYjNDM7I2luY2x1ZGUgJmx0O3VuaXN0ZC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtlcnJuby5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtzdGRpbnQuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvaW8uaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvcGNpX3JlZ3MuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvcGNpX2lkcy5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9rZXJuZWwuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvY29tcGlsZXIuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7YXNtL2JhcnJpZXIuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvbWlpLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpYnZmaW8vdmZpb19wY2lfZGV2aWNlLmgmZ3Q7CiYjNDM7CiYjNDM7I2luY2x1ZGUgJiMzNDtlMTAwMF9yZWdzLmgmIzM0OwomIzQzOyNpbmNsdWRlICYjMzQ7ZTEwMDBfZGVmaW5lcy5oJiMzNDsKJiM0MzsjaW5jbHVkZSAmIzM0O2UxMDAwXzgyNTc1LmgmIzM0OwomIzQzOwomIzQzOyNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF84MjU3NiAweDEwQzkKJiM0MzsjZGVmaW5lIElHQl9NQVhfQ0hVTktfU0laRSAxMDI0CiYjNDM7I2RlZmluZSBNU0lYX1ZFQ1RPUiAwCiYjNDM7I2RlZmluZSBSSU5HX1NJWkUgNDA5NiAvKiBOdW1iZXIgb2YgZGVzY3JpcHRvcnMgaW4gcmluZyAqLwomIzQzOwomIzQzO3N0cnVjdCBpZ2JfdHhfZGVzYyB7CiYjNDM7CXVuaW9uIHsKJiM0MzsJCXN0cnVjdCB7CiYjNDM7CQkJdTY0IGJ1ZmZlcl9hZGRyOyAvKiBBZGRyZXNzIG9mIGRlc2NyaXB0b3ImIzM5O3MgZGF0YSBidWZmZXIgKi8KJiM0MzsJCQl1MzIgY21kX3R5cGVfbGVuOyAvKiBDb21tYW5kL1R5cGUvTGVuZ3RoICovCiYjNDM7CQkJdTMyIG9saW5mb19zdGF0dXM7IC8qIENvbnRleHQvQnVmZmVyIGluZm8gKi8KJiM0MzsJCX0gcmVhZDsKJiM0MzsKJiM0MzsJCXN0cnVjdCB7CiYjNDM7CQkJdTY0IHJzdmQ7ICAgICAgICAvKiBSZXNlcnZlZCAqLwomIzQzOwkJCXUzMiBueHRzZXFfc2VlZDsgLyogTmV4dCBzZXF1ZW5jZSBzZWVkICovCiYjNDM7CQkJdTMyIHN0YXR1czsgICAgICAvKiBEZXNjcmlwdG9yIHN0YXR1cyAqLwomIzQzOwkJfSB3YjsKJiM0MzsJfTsKJiM0Mzt9OwomIzQzOwomIzQzO3N0cnVjdCBpZ2JfcnhfZGVzYyB7CiYjNDM7CXVuaW9uIHsKJiM0MzsJCXN0cnVjdCB7CiYjNDM7CQkJdTY0IHBrdF9hZGRyOyAvKiBQYWNrZXQgYnVmZmVyIGFkZHJlc3MgKi8KJiM0MzsJCQl1NjQgaGRyX2FkZHI7IC8qIEhlYWRlciBidWZmZXIgYWRkcmVzcyAqLwomIzQzOwkJfSByZWFkOwomIzQzOwkJc3RydWN0IHsKJiM0MzsJCQl1MTYgcGt0X2luZm87ICAgICAvKiBSU1MgdHlwZSwgUGFja2V0IHR5cGUgKi8KJiM0MzsJCQl1MTYgaGRyX2luZm87ICAgICAvKiBTcGxpdCBIZWFkLCBidWYgbGVuICovCiYjNDM7CQkJdTMyIHJzczsgICAgICAgICAgLyogUlNTIEhhc2ggKi8KJiM0MzsJCQl1MzIgc3RhdHVzX2Vycm9yOyAvKiBleHQgc3RhdHVzL2Vycm9yICovCiYjNDM7CQkJdTE2IGxlbmd0aDsgICAgICAgLyogUGFja2V0IGxlbmd0aCAqLwomIzQzOwkJCXUxNiB2bGFuOyAgICAgICAgIC8qIFZMQU4gdGFnICovCiYjNDM7CQl9IHdiOyAvKiB3cml0ZWJhY2sgKi8KJiM0MzsJfTsKJiM0Mzt9OwomIzQzOwomIzQzO3N0cnVjdCBpZ2IgewomIzQzOwl2b2lkICpiYXIwOwomIzQzOwl1MzIgdHhfdGFpbDsKJiM0MzsJdTMyIHJ4X3RhaWw7CiYjNDM7CXN0cnVjdCBpZ2JfdHhfZGVzYyB0eF9yaW5nW1JJTkdfU0laRV0gX19hdHRyaWJ1dGVfXygoYWxpZ25lZCgxMjgpKSk7CiYjNDM7CXN0cnVjdCBpZ2JfcnhfZGVzYyByeF9yaW5nW1JJTkdfU0laRV0gX19hdHRyaWJ1dGVfXygoYWxpZ25lZCgxMjgpKSk7CiYjNDM7fTsKJiM0MzsKJiM0MztzdGF0aWMgaW5saW5lIHN0cnVjdCBpZ2IgKnRvX2lnYl9zdGF0ZShzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UpCiYjNDM7ewomIzQzOwlyZXR1cm4gKHN0cnVjdCBpZ2IgKilkZXZpY2UtJmd0O2RyaXZlci5yZWdpb24udmFkZHI7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBpZ2Jfd3JpdGUzMihzdHJ1Y3QgaWdiICppZ2IsIHUzMiByZWcsIHUzMiB2YWwpCiYjNDM7ewomIzQzOwl3cml0ZWwodmFsLCBpZ2ItJmd0O2JhcjAgJiM0MzsgcmVnKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGlubGluZSB1MzIgaWdiX3JlYWQzMihzdHJ1Y3QgaWdiICppZ2IsIHUzMiByZWcpCiYjNDM7ewomIzQzOwlyZXR1cm4gcmVhZGwoaWdiLSZndDtiYXIwICYjNDM7IHJlZyk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgaWdiX3dyaXRlX3BoeShzdHJ1Y3QgaWdiICppZ2IsIHUzMiBvZmZzZXQsIHUxNiBkYXRhKQomIzQzO3sKJiM0MzsJdTMyIG1kaWM7CiYjNDM7CWludCBpOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBXcml0ZSBhIFBIWSByZWdpc3RlciBvdmVyIE1ESU8uCiYjNDM7CSAqCiYjNDM7CSAqIEEgcHJvZHVjdGlvbiBkcml2ZXIgd291bGQgaG9sZCB0aGUgU1cvRlcgc2VtYXBob3JlIChTV1NNLlNXRVNNQkkgJiM0MzsgdGhlCiYjNDM7CSAqIFNXX0ZXX1NZTkMgUEhZIGJpdCkgYWNyb3NzIHRoZSBNRElPIHRyYW5zYWN0aW9uIHRvIHNlcmlhbGl6ZSBhZ2FpbnN0IHRoZQomIzQzOwkgKiBkZXZpY2UmIzM5O3MgbWFuYWdlbWVudCBmaXJtd2FyZS4gIFRoZSBzZWxmdGVzdCBvd25zIHRoZSBhc3NpZ25lZCBmdW5jdGlvbgomIzQzOwkgKiBleGNsdXNpdmVseSBvbiBhIGRlZGljYXRlZCB0ZXN0IGRldmljZSB3aXRoIG5vIGFjdGl2ZSBtYW5hZ2VhYmlsaXR5CiYjNDM7CSAqIGNvbnRlbmRpbmcgZm9yIHRoZSBQSFksIHNvIHRoZSBzeW5jIGlzIG9taXR0ZWQ7IGl0IHNob3VsZCBiZSBhZGRlZCBoZXJlCiYjNDM7CSAqIGlmIHRoaXMgZXZlciBuZWVkcyB0byBydW4gb24gYSBtYW5hZ2VhYmlsaXR5LWVuYWJsZWQgTklDLgomIzQzOwkgKi8KJiM0MzsJbWRpYyA9ICgoKHUzMilkYXRhKSB8CiYjNDM7CQkob2Zmc2V0ICZsdDsmbHQ7IEUxMDAwX01ESUNfUkVHX1NISUZUKSB8CiYjNDM7CQkoMSAmbHQ7Jmx0OyBFMTAwMF9NRElDX1BIWV9TSElGVCkgfAomIzQzOwkJRTEwMDBfTURJQ19PUF9XUklURSk7CiYjNDM7CiYjNDM7CWlnYl93cml0ZTMyKGlnYiwgRTEwMDBfTURJQywgbWRpYyk7CiYjNDM7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyAxMDAwOyBpJiM0MzsmIzQzOykgewomIzQzOwkJdXNsZWVwKDUwKTsKJiM0MzsJCW1kaWMgPSBpZ2JfcmVhZDMyKGlnYiwgRTEwMDBfTURJQyk7CiYjNDM7CQlpZiAobWRpYyAmYW1wOyBFMTAwMF9NRElDX1JFQURZKQomIzQzOwkJCWJyZWFrOwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmICghKG1kaWMgJmFtcDsgRTEwMDBfTURJQ19SRUFEWSkpCiYjNDM7CQlyZXR1cm4gLTE7CiYjNDM7CiYjNDM7CWlmIChtZGljICZhbXA7IEUxMDAwX01ESUNfRVJST1IpCiYjNDM7CQlyZXR1cm4gLTE7CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MzsvKgomIzQzOyAqIENvbmZpZ3VyZSB0aGUgZGV2aWNlIGZvciBQSFkgaW50ZXJuYWwgbG9vcGJhY2sgcGVyIDgyNTc2IGRhdGFzaGVldAomIzQzOyAqIHNlY3Rpb24gMy41LjYuMy4xLiAgRm9yY2UgdGhlIFBIWSB0byAxR2IvcyBmdWxsIGR1cGxleCB3aXRoIGxvb3BiYWNrCiYjNDM7ICogZW5hYmxlZCwgdGhlbiBmb3JjZSB0aGUgTUFDIGxpbmsgc3RhdGUgdG8gbWF0Y2guICBJbnRlcm5hbCBsb29wYmFjawomIzQzOyAqIHdyYXBzIGRhdGEgYXQgdGhlIGVuZCBvZiB0aGUgUEhZIGRhdGFwYXRoIChzZWN0aW9uIDMuNS42LjMpLCBzbyB0aGUKJiM0MzsgKiBwaHlzaWNhbCBsaW5rIHN0YXRlIGlzIGlycmVsZXZhbnQuCiYjNDM7ICoKJiM0MzsgKiBTZWN0aW9uIDMuNS42LjEgZGlyZWN0cyB0byAmIzM0O1VzZSBQSFkgTG9vcGJhY2sgaW5zdGVhZCBvZiBNQUMgTG9vcGJhY2sKJiM0MzsgKiBvbiB0aGUgODI1NzYmIzM0OywgYW5kIHNlY3Rpb24gMy41LjYuMiBzdGF0ZXMgJiMzNDtNQUMgTG9vcGJhY2sgaXMgbm90IHVzZWQKJiM0MzsgKiBvbiB0aGlzIGRldmljZS4mIzM0OyAgUkNUTC5MQk1fTUFDIGlzIHN0aWxsIHNldCBlbHNld2hlcmUgYXMgYSBRRU1VLW9ubHkKJiM0MzsgKiBhY2NvbW1vZGF0aW9uOyBzZWUgdGhlIFJDVEwgcHJvZ3JhbW1pbmcgaW4gdGhlIGNhbGxlciBmb3IgdGhlCiYjNDM7ICogcmF0aW9uYWxlLgomIzQzOyAqLwomIzQzO3N0YXRpYyB2b2lkIGlnYl9zZXR1cF9sb29wYmFjayhzdHJ1Y3QgaWdiICppZ2IpCiYjNDM7ewomIzQzOwl1MzIgY3RybDsKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogS2ljayB0aGUgYXV0b25lZyBtYWNoaW5lcnkgc29sZWx5IHRvIGJyaW5nIFNUQVRVUy5MVSB1cCB1bmRlcgomIzQzOwkgKiBRRU1VJiMzOTtzIGlnYiBlbXVsYXRpb246IFFFTVUgb25seSB1cGRhdGVzIFNUQVRVUy5MVSB2aWEgaXRzCiYjNDM7CSAqIGF1dG9uZWctZG9uZSB0aW1lciwgYW5kIHdpdGhvdXQgTFUgc2V0IGl0cyByZWNlaXZlIHBhdGgKJiM0MzsJICogKGUxMDAweF9od19yeF9lbmFibGVkKSBkcm9wcyBldmVyeSBsb29wYmFjayBmcmFtZS4gIE9uIHJlYWwKJiM0MzsJICogaGFyZHdhcmUgYXV0b25lZyBjYW5ub3QgY29tcGxldGUgYmVmb3JlIHRoZSBuZXh0IFBIWSB3cml0ZQomIzQzOwkgKiBiZWxvdyBjbGVhcnMgdGhlIGF1dG9uZWctZW5hYmxlIGJpdCwgc28gdGhpcyBpcyBlZmZlY3RpdmVseSBhCiYjNDM7CSAqIG5vLW9wIHRoZXJlLgomIzQzOwkgKi8KJiM0MzsJKHZvaWQpaWdiX3dyaXRlX3BoeShpZ2IsIE1JSV9CTUNSLAomIzQzOwkJCSAgICBCTUNSX0FORU5BQkxFIHwgQk1DUl9BTlJFU1RBUlQpOwomIzQzOwomIzQzOwkvKiBQSFkgY29udHJvbDogbG9vcGJhY2sgJiM0MzsgMUdiL3MgZnVsbCBkdXBsZXgsIGF1dG9uZWcgZGlzYWJsZWQuICovCiYjNDM7CXJldCA9IGlnYl93cml0ZV9waHkoaWdiLCBNSUlfQk1DUiwKJiM0MzsJCQkgICAgQk1DUl9MT09QQkFDSyB8CiYjNDM7CQkJICAgIEJNQ1JfU1BFRUQxMDAwIHwKJiM0MzsJCQkgICAgQk1DUl9GVUxMRFBMWCk7CiYjNDM7CVZGSU9fQVNTRVJUX0VRKHJldCwgMCwgJiMzNDtGYWlsZWQgdG8gd3JpdGUgUEhZIGNvbnRyb2wgcmVnaXN0ZXImIzM0Oyk7CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIEJyaWVmIGRlbGF5IGJlZm9yZSBmb3JjaW5nIHRoZSBNQUMsIG1pcnJvcmluZyB0aGUga2VybmVsIGV0aHRvb2wKJiM0MzsJICogc2VsZnRlc3QgaW4gaWdiX2ludGVncmF0ZWRfcGh5X2xvb3BiYWNrKCkuICBOb3Qgc3BlY2lmaWVkIGJ5IHRoZQomIzQzOwkgKiBkYXRhc2hlZXQsIGJ1dCBlbXBpcmljYWxseSByZXF1aXJlZCBieSB0aGUga2VybmVsIGRyaXZlci4KJiM0MzsJICovCiYjNDM7CXVzbGVlcCg1MDAwMCk7CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIEZvcmNlIHRoZSBNQUMgdG8gMUdiL3MgZnVsbCBkdXBsZXggd2l0aCBsaW5rIHVwLiAgV2l0aG91dCBmb3JjaW5nCiYjNDM7CSAqIHRoZSBsaW5rIHN0YXRlIHRoZSBkZXNjcmlwdG9yIGVuZ2luZSBkb2VzIG5vdCBydW4sIHNpbmNlIHRoZSBjaGlwCiYjNDM7CSAqIG5vcm1hbGx5IHdhaXRzIGZvciBhIHJlYWwgbmVnb3RpYXRlZCBsaW5rLgomIzQzOwkgKi8KJiM0MzsJY3RybCA9IGlnYl9yZWFkMzIoaWdiLCBFMTAwMF9DVFJMKTsKJiM0MzsJY3RybCAmYW1wOz0gfkUxMDAwX0NUUkxfU1BEX1NFTDsKJiM0MzsJY3RybCB8PSBFMTAwMF9DVFJMX0ZSQ1NQRCB8CiYjNDM7CQlFMTAwMF9DVFJMX0ZSQ0RQWCB8CiYjNDM7CQlFMTAwMF9DVFJMX1NQRF8xMDAwIHwKJiM0MzsJCUUxMDAwX0NUUkxfRkQgfAomIzQzOwkJRTEwMDBfQ1RSTF9TTFU7CiYjNDM7CWlnYl93cml0ZTMyKGlnYiwgRTEwMDBfQ1RSTCwgY3RybCk7CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIFNldHRsaW5nIGRlbGF5IG1hdGNoaW5nIHRoZSBrZXJuZWwgZXRodG9vbCBzZWxmdGVzdCYjMzk7cyBtc2xlZXAoNTAwKQomIzQzOwkgKiBhdCB0aGUgdGFpbCBvZiBpZ2JfaW50ZWdyYXRlZF9waHlfbG9vcGJhY2soKS4gIE5vdCBzcGVjaWZpZWQgYnkKJiM0MzsJICogdGhlIGRhdGFzaGVldDsgZW1waXJpY2FsLCBhbmQgaW5oZXJpdGVkIGZyb20gdGhlIGtlcm5lbCBkcml2ZXIuCiYjNDM7CSAqLwomIzQzOwl1c2xlZXAoNTAwMDAwKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBpZ2JfcHJvYmUoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlKQomIzQzO3sKJiM0MzsJaWYgKCF2ZmlvX3BjaV9kZXZpY2VfbWF0Y2goZGV2aWNlLCBQQ0lfVkVORE9SX0lEX0lOVEVMLCBQQ0lfREVWSUNFX0lEX0lOVEVMXzgyNTc2KSkKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBQcm9ncmFtIHRoZSBkZXZpY2UgaW50byBhIHVzYWJsZSBzdGF0ZS4gIFNwbGl0IG91dCBvZiBpZ2JfaW5pdCgpIHNvIGl0CiYjNDM7ICogY2FuIGJlIHJldXNlZCBhZnRlciBhIGRldmljZSByZXNldCB0byByZS1wcm9ncmFtIHRoZSByZWdpc3RlcnMgdGhhdAomIzQzOyAqIENUUkwuUlNUIGNsZWFycy4gIEV4cGVjdHMgYmFyMCB0byBiZSBtYXBwZWQgYW5kIE1TSS1YIGFscmVhZHkgZW5hYmxlZAomIzQzOyAqIHZpYSBWRklPLgomIzQzOyAqLwomIzQzO3N0YXRpYyB2b2lkIGlnYl9od19pbml0KHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBpZ2IgKmlnYiA9IHRvX2lnYl9zdGF0ZShkZXZpY2UpOwomIzQzOwl1NjQgaW92YV90eCwgaW92YV9yeDsKJiM0MzsJdTMyIGN0cmwsIHJjdGw7CiYjNDM7CXUxNiBjbWRfcmVnOwomIzQzOwlpbnQgcmV0cmllczsKJiM0MzsKJiM0MzsJaW92YV90eCA9IHRvX2lvdmEoZGV2aWNlLCBpZ2ItJmd0O3R4X3JpbmcpOwomIzQzOwlpb3ZhX3J4ID0gdG9faW92YShkZXZpY2UsIGlnYi0mZ3Q7cnhfcmluZyk7CiYjNDM7CiYjNDM7CS8qIFNpZ25hbCB0aGF0IHRoZSBkcml2ZXIgaXMgbG9hZGVkICovCiYjNDM7CWN0cmwgPSBpZ2JfcmVhZDMyKGlnYiwgRTEwMDBfQ1RSTF9FWFQpOwomIzQzOwljdHJsIHw9IEUxMDAwX0NUUkxfRVhUX0RSVl9MT0FEOwomIzQzOwljdHJsICZhbXA7PSB+RTEwMDBfQ1RSTF9FWFRfTElOS19NT0RFX01BU0s7CiYjNDM7CWlnYl93cml0ZTMyKGlnYiwgRTEwMDBfQ1RSTF9FWFQsIGN0cmwpOwomIzQzOwomIzQzOwkvKiBFbmFibGUgUENJIEJ1cyBNYXN0ZXIuICovCiYjNDM7CWNtZF9yZWcgPSB2ZmlvX3BjaV9jb25maWdfcmVhZHcoZGV2aWNlLCBQQ0lfQ09NTUFORCk7CiYjNDM7CWlmICgoY21kX3JlZyAmYW1wOyAoUENJX0NPTU1BTkRfTUFTVEVSIHwgUENJX0NPTU1BTkRfTUVNT1JZKSkgIT0KJiM0MzsJICAgIChQQ0lfQ09NTUFORF9NQVNURVIgfCBQQ0lfQ09NTUFORF9NRU1PUlkpKSB7CiYjNDM7CQljbWRfcmVnIHw9IChQQ0lfQ09NTUFORF9NQVNURVIgfCBQQ0lfQ09NTUFORF9NRU1PUlkpOwomIzQzOwkJdmZpb19wY2lfY29uZmlnX3dyaXRldyhkZXZpY2UsIFBDSV9DT01NQU5ELCBjbWRfcmVnKTsKJiM0MzsJfQomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBEaXNhYmxlIERNQSByZS1zZW5kIG9uIFBDSWUgY29tcGxldGlvbiB0aW1lb3V0ICg4MjU3NiBkYXRhc2hlZXQKJiM0MzsJICogc2VjdGlvbiA4LjYuMSwgR0NSLkNvbXBsZXRpb25fVGltZW91dF9SZXNlbmQsIGJpdCAxNikuICBUaGUKJiM0MzsJICogbWl4X2FuZF9tYXRjaCB0ZXN0IGludGVudGlvbmFsbHkgc3VibWl0cyBkZXNjcmlwdG9ycyB0YXJnZXRpbmcKJiM0MzsJICogdW5tYXBwZWQgSU9WQXM7IHdpdGggdGhlIGRlZmF1bHQgKHNldCkgdmFsdWUsIHRoZSBkZXZpY2Uga2VlcHMKJiM0MzsJICogcmV0cnlpbmcgdGhlIGZhaWxlZCByZWFkIGluZGVmaW5pdGVseSwgd2hpY2gga2VlcHMgUENJZSBBRVIgYW5kCiYjNDM7CSAqIElPTU1VIGVycm9yIGhhbmRsaW5nIGJ1c3kgYW5kIGludGVyZmVyZXMgd2l0aCByZXNldCByZWNvdmVyeS4KJiM0MzsJICovCiYjNDM7CWN0cmwgPSBpZ2JfcmVhZDMyKGlnYiwgRTEwMDBfR0NSKTsKJiM0MzsJY3RybCAmYW1wOz0gfkUxMDAwX0dDUl9DTVBMX1RNT1VUX1JFU0VORDsKJiM0MzsJaWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9HQ1IsIGN0cmwpOwomIzQzOwomIzQzOwkvKiBDb25maWd1cmUgUEhZIGludGVybmFsIGxvb3BiYWNrIGZvciB0ZXN0aW5nLiAqLwomIzQzOwlpZ2Jfc2V0dXBfbG9vcGJhY2soaWdiKTsKJiM0MzsKJiM0MzsJLyogQ29uZmlndXJlIFRYIGFuZCBSWCBkZXNjcmlwdG9yIHJpbmdzICovCiYjNDM7CWlnYl93cml0ZTMyKGlnYiwgRTEwMDBfVERCQUwoMCksICh1MzIpaW92YV90eCk7CiYjNDM7CWlnYl93cml0ZTMyKGlnYiwgRTEwMDBfVERCQUgoMCksICh1MzIpKGlvdmFfdHggJmd0OyZndDsgMzIpKTsKJiM0MzsJaWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9URExFTigwKSwgUklOR19TSVpFICogc2l6ZW9mKHN0cnVjdCBpZ2JfdHhfZGVzYykpOwomIzQzOwlpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX1RESCgwKSwgMCk7CiYjNDM7CWlnYl93cml0ZTMyKGlnYiwgRTEwMDBfVERUKDApLCAwKTsKJiM0MzsJaWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9UWERDVEwoMCksIEUxMDAwX1RYRENUTF9RVUVVRV9FTkFCTEUpOwomIzQzOwomIzQzOwlpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX1JEQkFMKDApLCAodTMyKWlvdmFfcngpOwomIzQzOwlpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX1JEQkFIKDApLCAodTMyKShpb3ZhX3J4ICZndDsmZ3Q7IDMyKSk7CiYjNDM7CWlnYl93cml0ZTMyKGlnYiwgRTEwMDBfUkRMRU4oMCksIFJJTkdfU0laRSAqIHNpemVvZihzdHJ1Y3QgaWdiX3J4X2Rlc2MpKTsKJiM0MzsJaWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9SREgoMCksIDApOwomIzQzOwlpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX1JEVCgwKSwgMCk7CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIFNlbGVjdCB0aGUgYWR2YW5jZWQgb25lLWJ1ZmZlciBkZXNjcmlwdG9yIGZvcm1hdC4gIFBlciA4MjU3NgomIzQzOwkgKiBkYXRhc2hlZXQgc2VjdGlvbiA3LjEuNS4yOiAmIzM0O1NSUkNUTFtuXS5ERVNDVFlQRSBtdXN0IGJlIHNldCB0byBhCiYjNDM7CSAqIHZhbHVlIG90aGVyIHRoYW4gMDAwYiBmb3IgdGhlIDgyNTc2IHRvIHdyaXRlIGJhY2sgdGhlIHNwZWNpYWwKJiM0MzsJICogZGVzY3JpcHRvcnMuJiMzNDsgIHN0cnVjdCBpZ2JfcnhfZGVzYyBtYXRjaGVzIHRoZSBhZHZhbmNlZCBvbmUtYnVmZmVyCiYjNDM7CSAqIHdyaXRlYmFjayBsYXlvdXQgKHNlY3Rpb24gNy4xLjUuMiksIHNvIHBvbGxpbmcgcngud2Iuc3RhdHVzX2Vycm9yCiYjNDM7CSAqIHJlcXVpcmVzIHRoaXMgZm9ybWF0LiAgU2VjdGlvbiA4LjEwLjIgc3BlY2lmaWVzIERFU0NUWVBFWzI3OjI1XS4KJiM0MzsJICoKJiM0MzsJICogVGhlIGRpcmVjdCB3cml0ZSBhbHNvIHplcm9lcyBTUlJDVEwuQlNJWkVQQUNLRVQsIHdoaWNoIGlzCiYjNDM7CSAqIGludGVudGlvbmFsOiBwZXIgc2VjdGlvbiA3LjEuMy4xIGEgemVybyBCU0laRVBBQ0tFVCBmYWxscyBiYWNrIHRvCiYjNDM7CSAqIHRoZSBSQ1RMLkJTSVpFIGJ1ZmZlciBzaXplLCB3aG9zZSByZXNldCBkZWZhdWx0ICgwMGIpIGlzIDIwNDgKJiM0MzsJICogYnl0ZXMgLS0gYW1wbGUgZm9yIHRoZSBsb29wYmFjayBmcmFtZXMgaGVyZS4KJiM0MzsJICovCiYjNDM7CWlnYl93cml0ZTMyKGlnYiwgRTEwMDBfU1JSQ1RMKDApLCBFMTAwMF9TUlJDVExfREVTQ1RZUEVfQURWX09ORUJVRik7CiYjNDM7CiYjNDM7CWlnYl93cml0ZTMyKGlnYiwgRTEwMDBfUlhEQ1RMKDApLCBFMTAwMF9SWERDVExfUVVFVUVfRU5BQkxFKTsKJiM0MzsKJiM0MzsJLyogV2FpdCBmb3IgVFggYW5kIFJYIHF1ZXVlcyB0byBiZSBlbmFibGVkICovCiYjNDM7CXJldHJpZXMgPSAyMDAwOwomIzQzOwl3aGlsZSAocmV0cmllcy0tICZndDsgMCkgewomIzQzOwkJaWYgKChpZ2JfcmVhZDMyKGlnYiwgRTEwMDBfVFhEQ1RMKDApKSAmYW1wOyBFMTAwMF9UWERDVExfUVVFVUVfRU5BQkxFKSAmYW1wOyZhbXA7CiYjNDM7CQkgICAgKGlnYl9yZWFkMzIoaWdiLCBFMTAwMF9SWERDVEwoMCkpICZhbXA7IEUxMDAwX1JYRENUTF9RVUVVRV9FTkFCTEUpKQomIzQzOwkJCWJyZWFrOwomIzQzOwkJdXNsZWVwKDEwKTsKJiM0MzsJfQomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBFbmFibGUgUmVjZWl2ZXIgYW5kIFRyYW5zbWl0dGVyLiAgUkNUTC5MQk1fTUFDIGlzIHNldCBpbiBhZGRpdGlvbgomIzQzOwkgKiB0byBQSFkgbG9vcGJhY2sgYXMgYSBRRU1VLW9ubHkgYWNjb21tb2RhdGlvbjogUUVNVSYjMzk7cyBlbXVsYXRlZCBpZ2IKJiM0MzsJICogZG9lcyBub3QgaG9ub3IgUEhZIHJlZ2lzdGVyIDAgYml0IDE0IChQSFkgaW50ZXJuYWwgbG9vcGJhY2spIGFuZAomIzQzOwkgKiByZWxpZXMgb24gUkNUTC5MQk1fTUFDIHRvIHdyYXAgVFggZGVzY3JpcHRvcnMgYmFjayB0byB0aGUgUlgKJiM0MzsJICogcXVldWUuICBEYXRhc2hlZXQgOC4xMC4xIChSQ1RMIHJlZ2lzdGVyKSBhZHZpc2VzICYjMzQ7V2hlbiB1c2luZyB0aGUKJiM0MzsJICogaW50ZXJuYWwgUEhZLCBMQk0gc2hvdWxkIHJlbWFpbiBzZXQgdG8gMDBiJiMzNDssIHNvIHNldHRpbmcgTEJNX01BQwomIzQzOwkgKiBoZXJlIGRldmlhdGVzIGZyb20gZGF0YXNoZWV0IGd1aWRhbmNlOyBlbXBpcmljYWxseSB0aGUgYml0IGhhcwomIzQzOwkgKiBubyBvYnNlcnZhYmxlIGVmZmVjdCBvbiByZWFsIDgyNTc2IGhhcmR3YXJlIGJlY2F1c2UgTUFDIGxvb3BiYWNrCiYjNDM7CSAqIGlzIG5vdCBpbXBsZW1lbnRlZCAoZGF0YXNoZWV0IDMuNS42LjIpLiAgU2V0dGluZyBib3RoIGxldHMgdGhlCiYjNDM7CSAqIHNlbGZ0ZXN0IHdvcmsgb24gYm90aCByZWFsIGhhcmR3YXJlIGFuZCBRRU1VIHdpdGhvdXQgY29uZGl0aW9uYWwKJiM0MzsJICogY29kZSBwYXRocy4KJiM0MzsJICovCiYjNDM7CXJjdGwgPSBFMTAwMF9SQ1RMX0VOIHwgICAgICAgLyogUmVjZWl2ZXIgRW5hYmxlICovCiYjNDM7CSAgICAgICBFMTAwMF9SQ1RMX1VQRSB8ICAgICAgLyogVW5pY2FzdCBQcm9taXNjdW91cyAoZm9yIGR1bW15IE1BQykgKi8KJiM0MzsJICAgICAgIEUxMDAwX1JDVExfTEJNX01BQyB8ICAvKiBNQUMgTG9vcGJhY2sgLSBmb3IgUUVNVSBlbXVsYXRpb24gb25seSAqLwomIzQzOwkgICAgICAgRTEwMDBfUkNUTF9TRUNSQzsgICAgIC8qIFN0cmlwIENSQyAobmVlZGVkIGZvciBtZW1jbXApICovCiYjNDM7CWlnYl93cml0ZTMyKGlnYiwgRTEwMDBfUkNUTCwgcmN0bCk7CiYjNDM7CWlnYl93cml0ZTMyKGlnYiwgRTEwMDBfVENUTCwgRTEwMDBfVENUTF9FTik7CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIFByb2dyYW0gTVNJLVggaW50ZXJydXB0IHJvdXRpbmcgcGVyIDgyNTc2IGRhdGFzaGVldDoKJiM0MzsJICoKJiM0MzsJICogR1BJRSAoc2VjdGlvbiA3LjMuMi4xMSwgVGFibGUgNy00Nyk6IHNldCBNdWx0aXBsZV9NU0lYIChiaXQgNCkgdG8KJiM0MzsJICogcm91dGUgaW50ZXJydXB0IGNhdXNlcyB0aHJvdWdoIElWQVIgbWFwcGluZywgYW5kIEVJQU1FIChiaXQgMzApCiYjNDM7CSAqIHRvIGFwcGx5IEVJQU0gb24gTVNJLVggYXNzZXJ0aW9uICh3aXRob3V0IEVJQU1FLCBFSUFNIG9ubHkKJiM0MzsJICogYXBwbGllcyBvbiBFSUNSIHJlYWQvd3JpdGUpLgomIzQzOwkgKgomIzQzOwkgKiBFSUFDIChzZWN0aW9uIDguOC41KTogZW5hYmxlIGF1dG8tY2xlYXIgb2YgRUlDUiBmb3IgdmVjdG9yIDAuCiYjNDM7CSAqIFdpdGhvdXQgYXV0by1jbGVhciB0aGUgY2F1c2Ugc3RheXMgc2V0IGFmdGVyIGRlbGl2ZXJ5IGFuZCB0aGUKJiM0MzsJICogdGVzdCBjYW4gc2VlIHNwdXJpb3VzIGludGVycnVwdHMgb24gdGhlIG5leHQgbWVtY3B5IGJhdGNoLgomIzQzOwkgKgomIzQzOwkgKiBFSUFNIChzZWN0aW9uIDguOC42KTogZW5hYmxlIGF1dG8tbWFzayBvZiBFSU1TIGZvciB2ZWN0b3IgMCBvbgomIzQzOwkgKiBNU0ktWCBhc3NlcnRpb24gKGVmZmVjdGl2ZSBiZWNhdXNlIEVJQU1FIGlzIHNldCksIHNvIGEgc2luZ2xlCiYjNDM7CSAqIGludGVycnVwdCBpcyBkZWxpdmVyZWQgcGVyIG1lbWNweSBiYXRjaCBldmVuIGlmIHRoZSBjYXVzZQomIzQzOwkgKiByZS1hc3NlcnRzIGJlZm9yZSBzb2Z0d2FyZSByZS1lbmFibGVzIHRoZSBtYXNrLgomIzQzOwkgKgomIzQzOwkgKiBJVkFSIChzZWN0aW9uIDcuMy4xLjIsIHJlZ2lzdGVyIGRlZmluaXRpb24gaW4gOC44LjEzKTogbWFwIFJYCiYjNDM7CSAqIGNhdXNlIDAgdG8gTVNJLVggdmVjdG9yIDAgYW5kIG1hcmsgdGhlIGVudHJ5IHZhbGlkLgomIzQzOwkgKi8KJiM0MzsJaWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9HUElFLCBFMTAwMF9HUElFX01TSVhfTU9ERSB8IEUxMDAwX0dQSUVfRUlBTUUpOwomIzQzOwlpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX0VJQUMsIEUxMDAwX0VJQ1JfUlhfUVVFVUUwKTsKJiM0MzsJaWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9FSUFNLCBFMTAwMF9FSUNSX1JYX1FVRVVFMCk7CiYjNDM7CiYjNDM7CS8qIE1hcCB2ZWN0b3IgMCB0byBpbnRlcnJ1cHQgY2F1c2UgMCBhbmQgbWFyayBpdCB2YWxpZCAqLwomIzQzOwlpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX0lWQVIwLCBFMTAwMF9JVkFSX1ZBTElEKTsKJiM0MzsKJiM0MzsJLyogRW5hYmxlIGludGVycnVwdHMgb24gdmVjdG9yIDAgKi8KJiM0MzsJaWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9FSU1TLCBFMTAwMF9FSUNSX1JYX1FVRVVFMCk7CiYjNDM7CiYjNDM7CS8qIEluaXRpYWxpemUgZHJpdmVyIHN0YXRlIGFuZCBjYXBhYmlsaXR5IGxpbWl0cyAqLwomIzQzOwlpZ2ItJmd0O3R4X3RhaWwgPSAwOwomIzQzOwlpZ2ItJmd0O3J4X3RhaWwgPSAwOwomIzQzOwomIzQzOwlkZXZpY2UtJmd0O2RyaXZlci5tYXhfbWVtY3B5X3NpemUgPSBJR0JfTUFYX0NIVU5LX1NJWkU7CiYjNDM7CWRldmljZS0mZ3Q7ZHJpdmVyLm1heF9tZW1jcHlfY291bnQgPSBSSU5HX1NJWkUgLSAxOwomIzQzOwlkZXZpY2UtJmd0O2RyaXZlci5tc2kgPSBNU0lYX1ZFQ1RPUjsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgaWdiX2luaXQoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlKQomIzQzO3sKJiM0MzsJc3RydWN0IGlnYiAqaWdiID0gdG9faWdiX3N0YXRlKGRldmljZSk7CiYjNDM7CiYjNDM7CVZGSU9fQVNTRVJUX0dFKGRldmljZS0mZ3Q7ZHJpdmVyLnJlZ2lvbi5zaXplLCBzaXplb2Yoc3RydWN0IGlnYikpOwomIzQzOwomIzQzOwlpZ2ItJmd0O2JhcjAgPSBkZXZpY2UtJmd0O2JhcnNbMF0udmFkZHI7CiYjNDM7CiYjNDM7CS8qIFJlc2V0IGRldmljZSBhbmQgZGlzYWJsZSBhbGwgaW50ZXJydXB0cy4gKi8KJiM0MzsJaWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9DVFJMLCBpZ2JfcmVhZDMyKGlnYiwgRTEwMDBfQ1RSTCkgfCBFMTAwMF9DVFJMX1JTVCk7CiYjNDM7CS8qCiYjNDM7CSAqIE11c3Qgd2FpdCBhdCBsZWFzdCAxIG1pbGxpc2Vjb25kIGFmdGVyIHNldHRpbmcgdGhlIHJlc2V0IGJpdCBiZWZvcmUKJiM0MzsJICogY2hlY2tpbmcgaWYgdGhpcyBkZXZpY2UgaXMgcmVhZHkgdG8gYmUgdXNlZCAoODI1NzYgZGF0YXNoZWV0IHNlY3Rpb24KJiM0MzsJICogNC4yLjEuNi4xKS4KJiM0MzsJICovCiYjNDM7CXVzbGVlcCgxMDAwKTsKJiM0MzsJd2hpbGUgKGlnYl9yZWFkMzIoaWdiLCBFMTAwMF9DVFJMKSAmYW1wOyBFMTAwMF9DVFJMX1JTVCkKJiM0MzsJCXVzbGVlcCgxMCk7CiYjNDM7CWlnYl93cml0ZTMyKGlnYiwgRTEwMDBfSU1DLCAweEZGRkZGRkZGKTsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogRW5hYmxlIE1TSS1YIHZpYSBWRklPIGJlZm9yZSBkZXZpY2Utc2lkZSByZWdpc3RlciBwcm9ncmFtbWluZy4KJiM0MzsJICogdmZpb19wY2lfbXNpeF9lbmFibGUoKSBvbmx5IHRvdWNoZXMgdGhlIFZGSU8gSVJRIG1hY2hpbmVyeSBhbmQgdGhlCiYjNDM7CSAqIFBDSSBNU0ktWCBjYXBhYmlsaXR5IHZpYSBjb25maWcgc3BhY2U7IGl0IGhhcyBubyBvcmRlcmluZwomIzQzOwkgKiBkZXBlbmRlbmN5IG9uIHRoZSBkZXZpY2Utc2lkZSB3cml0ZXMgcGVyZm9ybWVkIGJ5IGlnYl9od19pbml0KCkuCiYjNDM7CSAqIFBsYWNpbmcgaXQgaGVyZSBrZWVwcyBpZ2JfaHdfaW5pdCgpIHJldXNhYmxlIGZyb20gdGhlIHJlc2V0CiYjNDM7CSAqIHJlY292ZXJ5IHBhdGggKHdoaWNoIGNhbGxzIHZmaW9fcGNpX2lycV9yZWVuYWJsZSgpIGluc3RlYWQpLgomIzQzOwkgKi8KJiM0MzsJdmZpb19wY2lfbXNpeF9lbmFibGUoZGV2aWNlLCBNU0lYX1ZFQ1RPUiwgMSk7CiYjNDM7CiYjNDM7CWlnYl9od19pbml0KGRldmljZSk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIGlnYl9yZW1vdmUoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlKQomIzQzO3sKJiM0MzsJc3RydWN0IGlnYiAqaWdiID0gdG9faWdiX3N0YXRlKGRldmljZSk7CiYjNDM7CiYjNDM7CXZmaW9fcGNpX21zaXhfZGlzYWJsZShkZXZpY2UpOwomIzQzOwlpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX1JDVEwsIDApOwomIzQzOwlpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX1RDVEwsIDApOwomIzQzOwlpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX0NUUkwsIGlnYl9yZWFkMzIoaWdiLCBFMTAwMF9DVFJMKSB8IEUxMDAwX0NUUkxfUlNUKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgaWdiX2lycV9kaXNhYmxlKHN0cnVjdCBpZ2IgKmlnYikKJiM0Mzt7CiYjNDM7CWlnYl93cml0ZTMyKGlnYiwgRTEwMDBfRUlNQywgRTEwMDBfRUlDUl9SWF9RVUVVRTApOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBpZ2JfaXJxX2VuYWJsZShzdHJ1Y3QgaWdiICppZ2IpCiYjNDM7ewomIzQzOwlpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX0VJTVMsIEUxMDAwX0VJQ1JfUlhfUVVFVUUwKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgaWdiX2lycV9jbGVhcihzdHJ1Y3QgaWdiICppZ2IpCiYjNDM7ewomIzQzOwkvKgomIzQzOwkgKiBVc2Ugd3JpdGUtdG8tY2xlYXIgKGRhdGFzaGVldCA3LjMuNC4yKS4gIEluIE1TSS1YIG1vZGUgd2l0aCBFSUFDCiYjNDM7CSAqIHByb2dyYW1tZWQsIHNlY3Rpb24gOC44LjUgZXhwbGljaXRseSBzdGF0ZXMgJiMzNDtJZiBhbnkgYml0cyBhcmUgc2V0CiYjNDM7CSAqIGluIEVJQUMsIHRoZSBFSUNSIHJlZ2lzdGVyIHNob3VsZCBub3QgYmUgcmVhZCYjMzQ7LCB3aGljaCBydWxlcyBvdXQKJiM0MzsJICogdGhlIHJlYWQtdG8tY2xlYXIgcGF0aCBpbiA3LjMuNC4zLiAgQml0cyBub3QgaW4gRUlBQyBhcmUgc3RpbGwKJiM0MzsJICogY2xlYXJlZCBieSB3cml0aW5nIDEuCiYjNDM7CSAqLwomIzQzOwlpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX0VJQ1IsIDB4RkZGRkZGRkYpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBpZ2JfbWVtY3B5X3N0YXJ0KHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSwgaW92YV90IHNyYywKJiM0MzsJCQkgICAgIGlvdmFfdCBkc3QsIHU2NCBzaXplLCB1NjQgY291bnQpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgaWdiICppZ2IgPSB0b19pZ2Jfc3RhdGUoZGV2aWNlKTsKJiM0MzsJc3RydWN0IGlnYl9yeF9kZXNjICpyeDsKJiM0MzsJc3RydWN0IGlnYl90eF9kZXNjICp0eDsKJiM0MzsJdTMyIGk7CiYjNDM7CiYjNDM7CWlnYl9pcnFfZGlzYWJsZShpZ2IpOwomIzQzOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgY291bnQ7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQl0eCA9ICZhbXA7aWdiLSZndDt0eF9yaW5nW2lnYi0mZ3Q7dHhfdGFpbF07CiYjNDM7CQlyeCA9ICZhbXA7aWdiLSZndDtyeF9yaW5nW2lnYi0mZ3Q7cnhfdGFpbF07CiYjNDM7CiYjNDM7CQltZW1zZXQodHgsIDAsIHNpemVvZihzdHJ1Y3QgaWdiX3R4X2Rlc2MpKTsKJiM0MzsJCW1lbXNldChyeCwgMCwgc2l6ZW9mKHN0cnVjdCBpZ2JfcnhfZGVzYykpOwomIzQzOwomIzQzOwkJcngtJmd0O3JlYWQucGt0X2FkZHIgPSBjcHVfdG9fbGU2NChkc3QpOwomIzQzOwkJcngtJmd0O3JlYWQuaGRyX2FkZHIgPSBjcHVfdG9fbGU2NCgwKTsKJiM0MzsKJiM0MzsJCXR4LSZndDtyZWFkLmJ1ZmZlcl9hZGRyID0gY3B1X3RvX2xlNjQoc3JjKTsKJiM0MzsJCS8qCiYjNDM7CQkgKiBCdWlsZCBhbiBhZHZhbmNlZCBkYXRhIGRlc2NyaXB0b3IgcGVyIDgyNTc2IGRhdGFzaGVldAomIzQzOwkJICogc2VjdGlvbiA3LjIuMi4zLiAgREVYVCBtYXJrcyB0aGUgZGVzY3JpcHRvciBhcyBhZHZhbmNlZAomIzQzOwkJICogKHJlcXVpcmVkIGJ5IGhhcmR3YXJlKTsgRFRZUD1kYXRhIHNlbGVjdHMgdGhlIGRhdGEKJiM0MzsJCSAqIGRlc2NyaXB0b3I7IElGQ1MgYXNrcyB0aGUgTUFDIHRvIGFwcGVuZCB0aGUgRXRoZXJuZXQKJiM0MzsJCSAqIEZDUyAod2l0aG91dCBpdCB0aGUgZnJhbWUgaXMgZHJvcHBlZCBhcyBtYWxmb3JtZWQpOwomIzQzOwkJICogRU9QIG1hcmtzIGVuZCBvZiBwYWNrZXQuICBEVEFMRU4gaXMgdGhlIGJ1ZmZlciBsZW5ndGgKJiM0MzsJCSAqIGluIGJpdHMgMTU6MCBvZiBjbWRfdHlwZV9sZW4uCiYjNDM7CQkgKi8KJiM0MzsJCXR4LSZndDtyZWFkLmNtZF90eXBlX2xlbiA9IGNwdV90b19sZTMyKCh1aW50MzJfdClzaXplIHwKJiM0MzsJCQlFMTAwMF9BRFZUWERfRFRZUF9EQVRBIHwKJiM0MzsJCQlFMTAwMF9BRFZUWERfRENNRF9ERVhUIHwKJiM0MzsJCQlFMTAwMF9BRFZUWERfRENNRF9JRkNTIHwKJiM0MzsJCQlFMTAwMF9BRFZUWERfRENNRF9FT1ApOwomIzQzOwkJLyoKJiM0MzsJCSAqIFBBWUxFTiAoc2VjdGlvbiA3LjIuMi4zLjExKSBpcyB0aGUgdG90YWwgcGF5bG9hZCBzaXplCiYjNDM7CQkgKiBpbiBvbGluZm9fc3RhdHVzWzMxOjE0XS4KJiM0MzsJCSAqLwomIzQzOwkJdHgtJmd0O3JlYWQub2xpbmZvX3N0YXR1cyA9CiYjNDM7CQkJY3B1X3RvX2xlMzIoKHVpbnQzMl90KXNpemUgJmx0OyZsdDsgRTEwMDBfQURWVFhEX1BBWUxFTl9TSElGVCk7CiYjNDM7CiYjNDM7CQlpZ2ItJmd0O3R4X3RhaWwgPSAoaWdiLSZndDt0eF90YWlsICYjNDM7IDEpICUgUklOR19TSVpFOwomIzQzOwkJaWdiLSZndDtyeF90YWlsID0gKGlnYi0mZ3Q7cnhfdGFpbCAmIzQzOyAxKSAlIFJJTkdfU0laRTsKJiM0MzsJfQomIzQzOwomIzQzOwlpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX1JEVCgwKSwgaWdiLSZndDtyeF90YWlsKTsKJiM0MzsJaWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9URFQoMCksIGlnYi0mZ3Q7dHhfdGFpbCk7CiYjNDM7fQomIzQzOwomIzQzOy8qCiYjNDM7ICogUmVzZXQgdGhlIGRldmljZSB2aWEgVkZJT19ERVZJQ0VfUkVTRVQgKFBDSWUgRkxSIG9uIHRoZSA4MjU3NikgYW5kCiYjNDM7ICogcmUtcHJvZ3JhbSBpdC4gIFZGSU9fREVWSUNFX1JFU0VUIHRlYXJzIGRvd24gdGhlIGtlcm5lbC1zaWRlIE1TSS1YCiYjNDM7ICogdHJpZ2dlciBidXQgbGVhdmVzIHVzZXItc2lkZSBldmVudGZkcyBpbnRhY3QsIHNvIHJlLWFybSB0aGUgdHJpZ2dlcgomIzQzOyAqIHZpYSB2ZmlvX3BjaV9pcnFfcmVlbmFibGUoKSBiZWZvcmUgcmVwcm9ncmFtbWluZyBzbyBhbnkgY2FsbGVyLWNhY2hlZAomIzQzOyAqIGV2ZW50ZmQgcmVtYWlucyB2YWxpZC4KJiM0MzsgKgomIzQzOyAqIEZMUiBjbGVhcnMgZGV2aWNlLXNpZGUgc3RhdGUgdG8gcG93ZXItb24gcmVzZXQgdmFsdWVzIChkYXRhc2hlZXQKJiM0MzsgKiA0LjIuMS41LjE6IGEgUEYgRkxSIGlzICYjMzQ7ZXF1aXZhbGVudCB0byBhIEQwLSZndDtEMy0mZ3Q7RDAgdHJhbnNpdGlvbiYjMzQ7KSwgc28KJiM0MzsgKiBFSU1TIGFuZCBFSUNSIGNvbWUgYmFjayBhcyAwIGZyb20gdGhlaXIgcmVnaXN0ZXItZGVmaW5lZCBpbml0aWFsCiYjNDM7ICogdmFsdWVzLCBhbmQgaWdiX2h3X2luaXQoKSByZXNldHMgdHhfdGFpbC9yeF90YWlsIHRvIDAuICBUaGUgbmV4dAomIzQzOyAqIGlnYl9tZW1jcHlfc3RhcnQoKSB3aWxsIG1lbXNldCBlYWNoIGRlc2NyaXB0b3IgaXQgdG91Y2hlcyBiZWZvcmUKJiM0MzsgKiBzdWJtaXNzaW9uLCBzbyBubyBleHBsaWNpdCBJTUMvRUlDUiB3cml0ZXMgb3IgcmluZyBtZW1zZXRzIGFyZQomIzQzOyAqIG5lZWRlZCBoZXJlLgomIzQzOyAqLwomIzQzO3N0YXRpYyB2b2lkIGlnYl9lcnJvcl9yZXNldF9hbmRfcmVpbml0KHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSkKJiM0Mzt7CiYjNDM7CXZmaW9fcGNpX2RldmljZV9yZXNldChkZXZpY2UpOwomIzQzOwl2ZmlvX3BjaV9tc2l4X3JlZW5hYmxlKGRldmljZSwgTVNJWF9WRUNUT1IsIDEpOwomIzQzOwlpZ2JfaHdfaW5pdChkZXZpY2UpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IGlnYl9tZW1jcHlfd2FpdChzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgaWdiICppZ2IgPSB0b19pZ2Jfc3RhdGUoZGV2aWNlKTsKJiM0MzsJc3RydWN0IGlnYl9yeF9kZXNjICpyeDsKJiM0MzsJdTMyIHN0YXR1cyA9IDA7CiYjNDM7CXUzMiBwcmV2X3RhaWw7CiYjNDM7CWludCByZXRyaWVzOwomIzQzOwomIzQzOwlwcmV2X3RhaWwgPSAoaWdiLSZndDtyeF90YWlsICYjNDM7IFJJTkdfU0laRSAtIDEpICUgUklOR19TSVpFOwomIzQzOwlyeCA9ICZhbXA7aWdiLSZndDtyeF9yaW5nW3ByZXZfdGFpbF07CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIFJlYWwgODI1NzYgaGFyZHdhcmUgcHJvY2Vzc2VzIHRoZSBkZXNjcmlwdG9yIHJpbmcgYXQgbGluZSByYXRlLgomIzQzOwkgKiBtYXhfbWVtY3B5X3NpemUgPSAoUklOR19TSVpFIC0gMSkgKiBJR0JfTUFYX0NIVU5LX1NJWkUgfj0gNCBNQiwKJiM0MzsJICogc3BsaXQgaW50byA0MDk1IDEgS0IgZnJhbWVzLiAgQXQgMSBHYi9zICh+MTI1IE1CL3MpIHRoZSB3b3JzdAomIzQzOwkgKiB2YWxpZCBtZW1jcHkgdGFrZXMgfjMyIG1zIG9uIHRoZSB3aXJlLCBwbHVzIHBlci1mcmFtZSBwcmVhbWJsZSwKJiM0MzsJICogU0ZELCBJRkcgYW5kIEZDUyBvdmVyaGVhZCAofjMlKSBhbmQgZGVzY3JpcHRvciBmZXRjaC93cml0ZWJhY2sKJiM0MzsJICogbGF0ZW5jeS4gIFdhaXQgdXAgdG8gfjIwMCBtcyBiZWZvcmUgZGVjbGFyaW5nIHRoZSBkZXZpY2UgaHVuZzsKJiM0MzsJICogfjZ4IHRoZSBsaW5lLXJhdGUgZmxvb3IgbGVhdmVzIGNvbWZvcnRhYmxlIGhlYWRyb29tIGZvciBob3N0CiYjNDM7CSAqIHNjaGVkdWxpbmcgaml0dGVyIHdoaWxlIGtlZXBpbmcgdGhlIGludGVudGlvbmFsIGludmFsaWQtRE1BCiYjNDM7CSAqIHRlc3RzIGJvdW5kZWQuCiYjNDM7CSAqLwomIzQzOwlyZXRyaWVzID0gMjAwOwomIzQzOwl3aGlsZSAocmV0cmllcy0tICZndDsgMCkgewomIzQzOwkJc3RhdHVzID0gbGUzMl90b19jcHUoUkVBRF9PTkNFKHJ4LSZndDt3Yi5zdGF0dXNfZXJyb3IpKTsKJiM0MzsJCWlmIChzdGF0dXMgJmFtcDsgMSkKJiM0MzsJCQlicmVhazsKJiM0MzsJCXVzbGVlcCgxMDAwKTsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAoc3RhdHVzICZhbXA7IDEpCiYjNDM7CQkvKgomIzQzOwkJICogRW5zdXJlIHRoZSB0ZXN0IGNvZGUgZG9lc24mIzM5O3Qgc3BlY3VsYXRpdmVseSByZWFkIHRoZSBETUEKJiM0MzsJCSAqIGRlc3RpbmF0aW9uIGJ1ZmZlciBiZWZvcmUgd2UgaGF2ZSB2ZXJpZmllZCB0aGF0IHRoZQomIzQzOwkJICogZGVzY3JpcHRvciB3cml0ZWJhY2sgaXMgY29tcGxldGUuCiYjNDM7CQkgKi8KJiM0MzsJCXJtYigpOwomIzQzOwomIzQzOwlpZ2JfaXJxX2NsZWFyKGlnYik7CiYjNDM7CiYjNDM7CWlnYl9pcnFfZW5hYmxlKGlnYik7CiYjNDM7CiYjNDM7CWlmIChzdGF0dXMgJmFtcDsgMSkKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBUaGUgZGVzY3JpcHRvciBuZXZlciBjb21wbGV0ZWQuICBPbiByZWFsIDgyNTc2IGhhcmR3YXJlIHRoaXMKJiM0MzsJICogdHlwaWNhbGx5IGZvbGxvd3MgYSBETUEtcmVhZCBmYXVsdCBmcm9tIG9uZSBvZiB0aGUgaW50ZW50aW9uYWwKJiM0MzsJICogdW5tYXBwZWQtSU9WQSB0ZXN0czsgdGhlIGZhdWx0IGxlYXZlcyB0aGUgZGVzY3JpcHRvciBlbmdpbmUKJiM0MzsJICogdW5hYmxlIHRvIHNlcnZpY2Ugc3Vic2VxdWVudCB2YWxpZCBkZXNjcmlwdG9ycy4gIENUUkwuUlNUIGFsb25lCiYjNDM7CSAqIHJlaW5pdGlhbGl6ZXMgdGhlIHF1ZXVlIHJlZ2lzdGVycyBidXQgbGVhdmVzIHRoZSBlbmdpbmUgd2VkZ2VkCiYjNDM7CSAqIGZvciB0aGUgY3VycmVudCBwcm9jZXNzLCBzbyBhIGJyb2FkZXIgVkZJT19ERVZJQ0VfUkVTRVQgKEZMUikKJiM0MzsJICogaXMgcmVxdWlyZWQuCiYjNDM7CSAqCiYjNDM7CSAqIERlbGF5IGJlZm9yZSByZXF1ZXN0aW5nIHJlc2V0IHNvIFBDSWUvSU9NTVUvQUVSIGVycm9yIGhhbmRsaW5nCiYjNDM7CSAqIHRyaWdnZXJlZCBieSB0aGUganVzdC1vYnNlcnZlZCBETUEgZmF1bHQgY2FuIHJlbGVhc2UgdGhlIGRldmljZQomIzQzOwkgKiBsb2NrIFZGSU9fREVWSUNFX1JFU0VUIGNvbnRlbmRzIGZvci4gIFRoZSAxMCBtcyB2YWx1ZSBpcwomIzQzOwkgKiBoZXVyaXN0aWMuICBUaGUgY3VycmVudCBtZW1jcHkgc3RpbGwgZmFpbHMgd2l0aCAtRVRJTUVET1VUOwomIzQzOwkgKiByZWNvdmVyeSBvbmx5IGVuc3VyZXMgdGhlIG5leHQgbWVtY3B5IHN0YXJ0cyBmcm9tIGEgdXNhYmxlIHN0YXRlLgomIzQzOwkgKi8KJiM0MzsJdXNsZWVwKDEwMDAwKTsKJiM0MzsJaWdiX2Vycm9yX3Jlc2V0X2FuZF9yZWluaXQoZGV2aWNlKTsKJiM0MzsKJiM0MzsJcmV0dXJuIC1FVElNRURPVVQ7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIGlnYl9zZW5kX21zaShzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgaWdiICppZ2IgPSB0b19pZ2Jfc3RhdGUoZGV2aWNlKTsKJiM0MzsKJiM0MzsJaWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9FSUNTLCAxKTsKJiM0Mzt9CiYjNDM7CiYjNDM7Y29uc3Qgc3RydWN0IHZmaW9fcGNpX2RyaXZlcl9vcHMgaWdiX29wcyA9IHsKJiM0MzsJLm5hbWUgPSAmIzM0O2lnYiYjMzQ7LAomIzQzOwkucHJvYmUgPSBpZ2JfcHJvYmUsCiYjNDM7CS5pbml0ID0gaWdiX2luaXQsCiYjNDM7CS5yZW1vdmUgPSBpZ2JfcmVtb3ZlLAomIzQzOwkubWVtY3B5X3N0YXJ0ID0gaWdiX21lbWNweV9zdGFydCwKJiM0MzsJLm1lbWNweV93YWl0ID0gaWdiX21lbWNweV93YWl0LAomIzQzOwkuc2VuZF9tc2kgPSBpZ2Jfc2VuZF9tc2ksCiYjNDM7fTsKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2luY2x1ZGUvbGlidmZpby92ZmlvX3BjaV9kZXZpY2UuaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2luY2x1ZGUvbGlidmZpby92ZmlvX3BjaV9kZXZpY2UuaAppbmRleCAyODU4ODg1YTg5YmJiZi4uMmU2N2FmYzBkNTgwOTggMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2luY2x1ZGUvbGlidmZpby92ZmlvX3BjaV9kZXZpY2UuaAomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9pbmNsdWRlL2xpYnZmaW8vdmZpb19wY2lfZGV2aWNlLmgKQEAgLTY4LDYgJiM0Mzs2OCw4IEBAIHZvaWQgdmZpb19wY2lfY29uZmlnX2FjY2VzcyhzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UsIGJvb2wgd3JpdGUsCiB2b2lkIHZmaW9fcGNpX2lycV9lbmFibGUoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlLCB1MzIgaW5kZXgsCiAJCQkgdTMyIHZlY3RvciwgaW50IGNvdW50KTsKIHZvaWQgdmZpb19wY2lfaXJxX2Rpc2FibGUoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlLCB1MzIgaW5kZXgpOwomIzQzO3ZvaWQgdmZpb19wY2lfaXJxX3JlZW5hYmxlKHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSwgdTMyIGluZGV4LAomIzQzOwkJCSAgIHUzMiB2ZWN0b3IsIGludCBjb3VudCk7CiB2b2lkIHZmaW9fcGNpX2lycV90cmlnZ2VyKHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSwgdTMyIGluZGV4LCB1MzIgdmVjdG9yKTsKIAogc3RhdGljIGlubGluZSB2b2lkIGZjbnRsX3NldF9ub25ibG9jayhpbnQgZmQpCkBAIC05Miw2ICYjNDM7OTQsMTIgQEAgc3RhdGljIGlubGluZSB2b2lkIHZmaW9fcGNpX21zaV9kaXNhYmxlKHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSkKIAl2ZmlvX3BjaV9pcnFfZGlzYWJsZShkZXZpY2UsIFZGSU9fUENJX01TSV9JUlFfSU5ERVgpOwogfQogCiYjNDM7c3RhdGljIGlubGluZSB2b2lkIHZmaW9fcGNpX21zaV9yZWVuYWJsZShzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UsCiYjNDM7CQkJCQkgdTMyIHZlY3RvciwgaW50IGNvdW50KQomIzQzO3sKJiM0MzsJdmZpb19wY2lfaXJxX3JlZW5hYmxlKGRldmljZSwgVkZJT19QQ0lfTVNJX0lSUV9JTkRFWCwgdmVjdG9yLCBjb3VudCk7CiYjNDM7fQomIzQzOwogc3RhdGljIGlubGluZSB2b2lkIHZmaW9fcGNpX21zaXhfZW5hYmxlKHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSwKIAkJCQkJdTMyIHZlY3RvciwgaW50IGNvdW50KQogewpAQCAtMTAzLDYgJiM0MzsxMTEsMTIgQEAgc3RhdGljIGlubGluZSB2b2lkIHZmaW9fcGNpX21zaXhfZGlzYWJsZShzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UpCiAJdmZpb19wY2lfaXJxX2Rpc2FibGUoZGV2aWNlLCBWRklPX1BDSV9NU0lYX0lSUV9JTkRFWCk7CiB9CiAKJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgdmZpb19wY2lfbXNpeF9yZWVuYWJsZShzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UsCiYjNDM7CQkJCQkgIHUzMiB2ZWN0b3IsIGludCBjb3VudCkKJiM0Mzt7CiYjNDM7CXZmaW9fcGNpX2lycV9yZWVuYWJsZShkZXZpY2UsIFZGSU9fUENJX01TSVhfSVJRX0lOREVYLCB2ZWN0b3IsIGNvdW50KTsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgaW5saW5lIGludCBfX3RvX2lvdmEoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlLCB2b2lkICp2YWRkciwgaW92YV90ICppb3ZhKQogewogCXJldHVybiBfX2lvbW11X2h2YTJpb3ZhKGRldmljZS0mZ3Q7aW9tbXUsIHZhZGRyLCBpb3ZhKTsKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2xpYnZmaW8ubWsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9saWJ2ZmlvLm1rCmluZGV4IDlmNDdiY2VlZDE2ZjRjLi4xZjEzY2NhMDQzNDhiNCAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvbGlidmZpby5tawomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9saWJ2ZmlvLm1rCkBAIC0xMiw2ICYjNDM7MTIsNyBAQCBMSUJWRklPX0MgJiM0Mzs9IHZmaW9fcGNpX2RyaXZlci5jCiBpZmVxICgkKEFSQ0g6eDg2XzY0PXg4NikseDg2KQogTElCVkZJT19DICYjNDM7PSBkcml2ZXJzL2lvYXQvaW9hdC5jCiBMSUJWRklPX0MgJiM0Mzs9IGRyaXZlcnMvZHNhL2RzYS5jCiYjNDM7TElCVkZJT19DICYjNDM7PSBkcml2ZXJzL2lnYi9pZ2IuYwogZW5kaWYKIAogTElCVkZJT19PVVRQVVQgOj0gJChPVVRQVVQpL2xpYnZmaW8KZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL3ZmaW9fcGNpX2RldmljZS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvdmZpb19wY2lfZGV2aWNlLmMKaW5kZXggZmM3NWUwNGVmMDEwY2YuLjdiODM5NGQwYWM1MDc2IDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi92ZmlvX3BjaV9kZXZpY2UuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi92ZmlvX3BjaV9kZXZpY2UuYwpAQCAtMTA2LDYgJiM0MzsxMDYsMjggQEAgdm9pZCB2ZmlvX3BjaV9pcnFfZGlzYWJsZShzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UsIHUzMiBpbmRleCkKIAl2ZmlvX3BjaV9pcnFfc2V0KGRldmljZSwgaW5kZXgsIDAsIDAsIE5VTEwpOwogfQogCiYjNDM7LyoKJiM0MzsgKiBSZS1pc3N1ZSBWRklPX0RFVklDRV9TRVRfSVJRUyBmb3IgYW4gYWxyZWFkeS1lbmFibGVkIHZlY3RvciByYW5nZSB1c2luZwomIzQzOyAqIHRoZSBleGlzdGluZyBldmVudGZkcy4gIEludGVuZGVkIGZvciBkcml2ZXJzIHRoYXQgbmVlZCB0byByZS1hcm0gZGV2aWNlCiYjNDM7ICogaW50ZXJydXB0cyBhZnRlciBhIFZGSU9fREVWSUNFX1JFU0VULCB3aGljaCB0ZWFycyBkb3duIHRoZSBrZXJuZWwtc2lkZQomIzQzOyAqIElSUSB0cmlnZ2VyIGJ1dCBsZWF2ZXMgdXNlci1zaWRlIGV2ZW50ZmRzIGludGFjdC4gIFJlY3JlYXRpbmcgdGhlCiYjNDM7ICogZXZlbnRmZHMgd291bGQgaW52YWxpZGF0ZSBhbnkgdGVzdC1maXh0dXJlIGNhY2hlIG9mIHRoZSBmZCwgc28gdGhpcwomIzQzOyAqIGhlbHBlciBkZWxpYmVyYXRlbHkgcHJlc2VydmVzIHRoZW0uCiYjNDM7ICovCiYjNDM7dm9pZCB2ZmlvX3BjaV9pcnFfcmVlbmFibGUoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlLCB1MzIgaW5kZXgsCiYjNDM7CQkJICAgdTMyIHZlY3RvciwgaW50IGNvdW50KQomIzQzO3sKJiM0MzsJaW50IGk7CiYjNDM7CiYjNDM7CWNoZWNrX3N1cHBvcnRlZF9pcnFfaW5kZXgoaW5kZXgpOwomIzQzOwomIzQzOwlmb3IgKGkgPSB2ZWN0b3I7IGkgJmx0OyB2ZWN0b3IgJiM0MzsgY291bnQ7IGkmIzQzOyYjNDM7KQomIzQzOwkJVkZJT19BU1NFUlRfR0UoZGV2aWNlLSZndDttc2lfZXZlbnRmZHNbaV0sIDAsCiYjNDM7CQkJICAgICAgICYjMzQ7dmVjdG9yICVkIGV2ZW50ZmQgbm90IGFsbG9jYXRlZFxuJiMzNDssIGkpOwomIzQzOwomIzQzOwl2ZmlvX3BjaV9pcnFfc2V0KGRldmljZSwgaW5kZXgsIHZlY3RvciwgY291bnQsIGRldmljZS0mZ3Q7bXNpX2V2ZW50ZmRzICYjNDM7IHZlY3Rvcik7CiYjNDM7fQomIzQzOwogc3RhdGljIHZvaWQgdmZpb19wY2lfaXJxX2dldChzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UsIHUzMiBpbmRleCwKIAkJCSAgICAgc3RydWN0IHZmaW9faXJxX2luZm8gKmlycV9pbmZvKQogewpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvdmZpb19wY2lfZHJpdmVyLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi92ZmlvX3BjaV9kcml2ZXIuYwppbmRleCA2ODI3ZjRhNmZlYmU5OS4uYTVkMDU0NzEzMmM0MDUgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL3ZmaW9fcGNpX2RyaXZlci5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL3ZmaW9fcGNpX2RyaXZlci5jCkBAIC01LDEyICYjNDM7NSwxNCBAQAogI2lmZGVmIF9feDg2XzY0X18KIGV4dGVybiBzdHJ1Y3QgdmZpb19wY2lfZHJpdmVyX29wcyBkc2Ffb3BzOwogZXh0ZXJuIHN0cnVjdCB2ZmlvX3BjaV9kcml2ZXJfb3BzIGlvYXRfb3BzOwomIzQzO2V4dGVybiBzdHJ1Y3QgdmZpb19wY2lfZHJpdmVyX29wcyBpZ2Jfb3BzOwogI2VuZGlmCiAKIHN0YXRpYyBzdHJ1Y3QgdmZpb19wY2lfZHJpdmVyX29wcyAqZHJpdmVyX29wc1tdID0gewogI2lmZGVmIF9feDg2XzY0X18KIAkmYW1wO2RzYV9vcHMsCiAJJmFtcDtpb2F0X29wcywKJiM0MzsJJmFtcDtpZ2Jfb3BzLAogI2VuZGlmCiB9OwogCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzExIDE5OjEzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExOTU5CgkJCQkJCQlvdXRwdXQ6IDg5CgkJCQkJCQl0aG91Z2h0czogNzQyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKldvcnRoRnV6emluZyBEZWNpc2lvbiBmb3IgdmZpbyBzZWxmdGVzdHMqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gVGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgZHJpdmVyLCBgaWdiLmNgLCBhbmQgbW9kaWZpZXMgYSBmZXcgcmVsYXRlZCBmaWxlcyB3aXRoaW4gdGhlIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9kcml2ZXJzL2lnYi9gIGFuZCBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvYCBkaXJlY3Rvcmllcy4gIENydWNpYWxseSwgaXQmIzM5O3MgYWxsIGNvbnRhaW5lZCB3aXRoaW4gdGhlIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2AgZGlyZWN0b3J5LiBUaGF0IGltbWVkaWF0ZWx5IGZsYWdzIHRoaXMgYXMgc29tZXRoaW5nIHRoYXQmIzM5O3MgbGlrZWx5IG5vdCBwYXJ0IG9mIHRoZSBjb3JlIGtlcm5lbCBvciBkcml2ZXJzIEkgbmVlZCB0byB3b3JyeSBhYm91dCBpbiB0ZXJtcyBvZiBmdXp6aW5nLgoKTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHNlbGZ0ZXN0cyBhcmUgbm90IGZ1enplZCBieSBzeXprYWxsZXIuICBMZXQgbWUgY29uZmlybSBubyBvdGhlciBrZXJuZWwgY2hhbmdlcyBhcmUgaW50cm9kdWNlZC4gTm9wZSwgaXQmIzM5O3Mgc3RyaWN0bHkgY29uZmluZWQgdG8gYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vYC4KCk5vdywgbGV0IG1lIHJlY2FsbCB0aGUgcmVsZXZhbnQgcnVsZXMuICBUaGUgY3JpdGVyaWEgZm9yIHJldHVybmluZyBgV29ydGhGdXp6aW5nPWZhbHNlYCBjb3ZlciBkb2N1bWVudGF0aW9uLCBjb25maWd1cmF0aW9uIGZpbGVzLCBjb21tZW50cywgbG9nZ2luZywgYW5kIGNvbnN0YW50cy4gU2VsZnRlc3RzIGFyZW4mIzM5O3QgKmV4cGxpY2l0bHkqIGxpc3RlZCwgYnV0IHRoZSBzcGlyaXQgb2YgdGhlIHJ1bGUgaXMgY2xlYXI6IGlmIGl0JiMzOTtzIG5vdCByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHRoZW4gaXQgc2hvdWxkIGJlIGBmYWxzZWAuICBUaGUgcnVsZSBleHBsaWNpdGx5IHN0YXRlcyB0aGF0IGlmIHRoZSBjb2RlIG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdGhlbiBpdCYjMzk7cyBgV29ydGhGdXp6aW5nPXRydWVgLgoKU2luY2UgdGhlc2UgbW9kaWZpY2F0aW9ucyBhcmUgKnNvbGVseSogd2l0aGluIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2AsIHRoZXkgZG9uJiMzOTt0IGltcGFjdCBhbnkgY29yZSBrZXJuZWwgY29kZSB0aGF0JiMzOTtzIGRpcmVjdGx5IHJlYWNoYWJsZSBkdXJpbmcgbm9ybWFsIG9wZXJhdGlvbi4gIFRoZXkgYXJlLCBpbiBlc3NlbmNlLCBpc29sYXRlZC4gIEkmIzM5O3ZlIGRvdWJsZS1jaGVja2VkIHRoZSBwYXRoIG9mIHRoZSBtb2RpZmllZCBmaWxlcywgaW5jbHVkaW5nIHRoZSBoZWFkZXJzIGFuZCBidWlsZCBmaWxlcywgc28gSSYjMzk7bSBjb21wbGV0ZWx5IGNvbmZpZGVudCBpbiB0aGlzIGFzc2Vzc21lbnQuICBObyByZWFjaGFibGUga2VybmVsIGxvZ2ljIGlzIGJlaW5nIGFsdGVyZWQuCgpMZXQgbWUgbWFrZSBhYnNvbHV0ZWx5IHN1cmUsIGhvd2V2ZXIuIEkganVzdCB2ZXJpZmllZCB0aGF0IG90aGVyIGZpbGVzIGFsc28gaW5jbHVkZSB0aGUgZm9sbG93aW5nIG1vZGlmaWNhdGlvbnM6CgotIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9kcml2ZXJzL2lnYi9lMTAwMF84MjU3NS5oYAotIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9kcml2ZXJzL2lnYi9lMTAwMF9kZWZpbmVzLmhgCi0gYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2RyaXZlcnMvaWdiL2UxMDAwX3JlZ3MuaGAKCkFsbCBmaWxlcyBhcmUgd2l0aGluIHRoZSBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9gIGRpcmVjdG9yeS4KClRoZXJlZm9yZSwgbXkgY29uY2x1c2lvbiBpcyBjbGVhcjogYmFzZWQgb24gdGhlIHJ1bGVzIGFuZCB0aGUgY29uZmluZWQgc2NvcGUgb2YgdGhlIGNoYW5nZXMsIEkmIzM5O2xsIHJldHVybiBgV29ydGhGdXp6aW5nPWZhbHNlYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMSAxOToxMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFtdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgY29kZSBpbiB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvLywgd2hpY2ggY29udGFpbnMgdXNlci1zcGFjZSBzZWxmdGVzdHMgYW5kIGRvZXMgbm90IGFmZmVjdCB0aGUgY29yZSBrZXJuZWwsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZSBjb2RlLiBUaGVyZWZvcmUsIGl0IGRvZXMgbm90IGludHJvZHVjZSBhbnkgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBjYW4gYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb25seSBtb2RpZmllcyBjb2RlIGluIHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vLCB3aGljaCBjb250YWlucyB1c2VyLXNwYWNlIHNlbGZ0ZXN0cyBhbmQgZG9lcyBub3QgYWZmZWN0IHRoZSBjb3JlIGtlcm5lbCwgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlIGNvZGUuIFRoZXJlZm9yZSwgaXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IGNhbiBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDctMTFUMTk6MTM6NDEuODM5MDQ2NTQ5WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTQ1NzM0MDc5MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggb25seSBtb2RpZmllcyBjb2RlIGluIHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vLCB3aGljaCBjb250YWlucyB1c2VyLXNwYWNlIHNlbGZ0ZXN0cyBhbmQgZG9lcyBub3QgYWZmZWN0IHRoZSBjb3JlIGtlcm5lbCwgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlIGNvZGUuIFRoZXJlZm9yZSwgaXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IGNhbiBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMVQxOToxMzo0MS44MzkwNTMyMDlaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM1MzMxNzcxOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDMxMzdjMDMxOTlmNjQ3ZWZiNDNiYmJhZjgwNTM4NDRkMGNiNjAwZWRcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFNhdCBKdWwgMTEgMTk6MTM6NDAgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvZHJpdmVycy9pZ2IvZTEwMDBfODI1NzUuaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2RyaXZlcnMvaWdiL2UxMDAwXzgyNTc1LmhcXG5uZXcgZmlsZSBtb2RlIDEyMDAwMFxcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi5iODRhZmZkZWM1NTk4ZVxcbi0tLSAvZGV2L251bGxcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9kcml2ZXJzL2lnYi9lMTAwMF84MjU3NS5oXFxuQEAgLTAsMCArMSBAQFxcbisuLi8uLi8uLi8uLi8uLi8uLi8uLi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZ2IvZTEwMDBfODI1NzUuaFxcblxcXFwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZVxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9kcml2ZXJzL2lnYi9lMTAwMF9kZWZpbmVzLmggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9kcml2ZXJzL2lnYi9lMTAwMF9kZWZpbmVzLmhcXG5uZXcgZmlsZSBtb2RlIDEyMDAwMFxcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi45Zjk3ZjQzMzAwODY2ZFxcbi0tLSAvZGV2L251bGxcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9kcml2ZXJzL2lnYi9lMTAwMF9kZWZpbmVzLmhcXG5AQCAtMCwwICsxIEBAXFxuKy4uLy4uLy4uLy4uLy4uLy4uLy4uL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lnYi9lMTAwMF9kZWZpbmVzLmhcXG5cXFxcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGVcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvZHJpdmVycy9pZ2IvZTEwMDBfcmVncy5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvZHJpdmVycy9pZ2IvZTEwMDBfcmVncy5oXFxubmV3IGZpbGUgbW9kZSAxMjAwMDBcXG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uYzczMzYzNDE3MWJiMTNcXG4tLS0gL2Rldi9udWxsXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvZHJpdmVycy9pZ2IvZTEwMDBfcmVncy5oXFxuQEAgLTAsMCArMSBAQFxcbisuLi8uLi8uLi8uLi8uLi8uLi8uLi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZ2IvZTEwMDBfcmVncy5oXFxuXFxcXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2RyaXZlcnMvaWdiL2lnYi5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvZHJpdmVycy9pZ2IvaWdiLmNcXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi4yMDZhMWU2NDg5YzIxY1xcbi0tLSAvZGV2L251bGxcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9kcml2ZXJzL2lnYi9pZ2IuY1xcbkBAIC0wLDAgKzEsNTU0IEBAXFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4rI2luY2x1ZGUgXFx1MDAzY3VuaXN0ZC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjZXJybm8uaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY3N0ZGludC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvaW8uaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3BjaV9yZWdzLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9wY2lfaWRzLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9rZXJuZWwuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2NvbXBpbGVyLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2Nhc20vYmFycmllci5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvbWlpLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaWJ2ZmlvL3ZmaW9fcGNpX2RldmljZS5oXFx1MDAzZVxcbitcXG4rI2luY2x1ZGUgXFxcImUxMDAwX3JlZ3MuaFxcXCJcXG4rI2luY2x1ZGUgXFxcImUxMDAwX2RlZmluZXMuaFxcXCJcXG4rI2luY2x1ZGUgXFxcImUxMDAwXzgyNTc1LmhcXFwiXFxuK1xcbisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfODI1NzYgMHgxMEM5XFxuKyNkZWZpbmUgSUdCX01BWF9DSFVOS19TSVpFIDEwMjRcXG4rI2RlZmluZSBNU0lYX1ZFQ1RPUiAwXFxuKyNkZWZpbmUgUklOR19TSVpFIDQwOTYgLyogTnVtYmVyIG9mIGRlc2NyaXB0b3JzIGluIHJpbmcgKi9cXG4rXFxuK3N0cnVjdCBpZ2JfdHhfZGVzYyB7XFxuK1xcdHVuaW9uIHtcXG4rXFx0XFx0c3RydWN0IHtcXG4rXFx0XFx0XFx0dTY0IGJ1ZmZlcl9hZGRyOyAvKiBBZGRyZXNzIG9mIGRlc2NyaXB0b3IncyBkYXRhIGJ1ZmZlciAqL1xcbitcXHRcXHRcXHR1MzIgY21kX3R5cGVfbGVuOyAvKiBDb21tYW5kL1R5cGUvTGVuZ3RoICovXFxuK1xcdFxcdFxcdHUzMiBvbGluZm9fc3RhdHVzOyAvKiBDb250ZXh0L0J1ZmZlciBpbmZvICovXFxuK1xcdFxcdH0gcmVhZDtcXG4rXFxuK1xcdFxcdHN0cnVjdCB7XFxuK1xcdFxcdFxcdHU2NCByc3ZkOyAgICAgICAgLyogUmVzZXJ2ZWQgKi9cXG4rXFx0XFx0XFx0dTMyIG54dHNlcV9zZWVkOyAvKiBOZXh0IHNlcXVlbmNlIHNlZWQgKi9cXG4rXFx0XFx0XFx0dTMyIHN0YXR1czsgICAgICAvKiBEZXNjcmlwdG9yIHN0YXR1cyAqL1xcbitcXHRcXHR9IHdiO1xcbitcXHR9O1xcbit9O1xcbitcXG4rc3RydWN0IGlnYl9yeF9kZXNjIHtcXG4rXFx0dW5pb24ge1xcbitcXHRcXHRzdHJ1Y3Qge1xcbitcXHRcXHRcXHR1NjQgcGt0X2FkZHI7IC8qIFBhY2tldCBidWZmZXIgYWRkcmVzcyAqL1xcbitcXHRcXHRcXHR1NjQgaGRyX2FkZHI7IC8qIEhlYWRlciBidWZmZXIgYWRkcmVzcyAqL1xcbitcXHRcXHR9IHJlYWQ7XFxuK1xcdFxcdHN0cnVjdCB7XFxuK1xcdFxcdFxcdHUxNiBwa3RfaW5mbzsgICAgIC8qIFJTUyB0eXBlLCBQYWNrZXQgdHlwZSAqL1xcbitcXHRcXHRcXHR1MTYgaGRyX2luZm87ICAgICAvKiBTcGxpdCBIZWFkLCBidWYgbGVuICovXFxuK1xcdFxcdFxcdHUzMiByc3M7ICAgICAgICAgIC8qIFJTUyBIYXNoICovXFxuK1xcdFxcdFxcdHUzMiBzdGF0dXNfZXJyb3I7IC8qIGV4dCBzdGF0dXMvZXJyb3IgKi9cXG4rXFx0XFx0XFx0dTE2IGxlbmd0aDsgICAgICAgLyogUGFja2V0IGxlbmd0aCAqL1xcbitcXHRcXHRcXHR1MTYgdmxhbjsgICAgICAgICAvKiBWTEFOIHRhZyAqL1xcbitcXHRcXHR9IHdiOyAvKiB3cml0ZWJhY2sgKi9cXG4rXFx0fTtcXG4rfTtcXG4rXFxuK3N0cnVjdCBpZ2Ige1xcbitcXHR2b2lkICpiYXIwO1xcbitcXHR1MzIgdHhfdGFpbDtcXG4rXFx0dTMyIHJ4X3RhaWw7XFxuK1xcdHN0cnVjdCBpZ2JfdHhfZGVzYyB0eF9yaW5nW1JJTkdfU0laRV0gX19hdHRyaWJ1dGVfXygoYWxpZ25lZCgxMjgpKSk7XFxuK1xcdHN0cnVjdCBpZ2JfcnhfZGVzYyByeF9yaW5nW1JJTkdfU0laRV0gX19hdHRyaWJ1dGVfXygoYWxpZ25lZCgxMjgpKSk7XFxuK307XFxuK1xcbitzdGF0aWMgaW5saW5lIHN0cnVjdCBpZ2IgKnRvX2lnYl9zdGF0ZShzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UpXFxuK3tcXG4rXFx0cmV0dXJuIChzdHJ1Y3QgaWdiICopZGV2aWNlLVxcdTAwM2Vkcml2ZXIucmVnaW9uLnZhZGRyO1xcbit9XFxuK1xcbitzdGF0aWMgaW5saW5lIHZvaWQgaWdiX3dyaXRlMzIoc3RydWN0IGlnYiAqaWdiLCB1MzIgcmVnLCB1MzIgdmFsKVxcbit7XFxuK1xcdHdyaXRlbCh2YWwsIGlnYi1cXHUwMDNlYmFyMCArIHJlZyk7XFxuK31cXG4rXFxuK3N0YXRpYyBpbmxpbmUgdTMyIGlnYl9yZWFkMzIoc3RydWN0IGlnYiAqaWdiLCB1MzIgcmVnKVxcbit7XFxuK1xcdHJldHVybiByZWFkbChpZ2ItXFx1MDAzZWJhcjAgKyByZWcpO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IGlnYl93cml0ZV9waHkoc3RydWN0IGlnYiAqaWdiLCB1MzIgb2Zmc2V0LCB1MTYgZGF0YSlcXG4re1xcbitcXHR1MzIgbWRpYztcXG4rXFx0aW50IGk7XFxuK1xcbitcXHQvKlxcbitcXHQgKiBXcml0ZSBhIFBIWSByZWdpc3RlciBvdmVyIE1ESU8uXFxuK1xcdCAqXFxuK1xcdCAqIEEgcHJvZHVjdGlvbiBkcml2ZXIgd291bGQgaG9sZCB0aGUgU1cvRlcgc2VtYXBob3JlIChTV1NNLlNXRVNNQkkgKyB0aGVcXG4rXFx0ICogU1dfRldfU1lOQyBQSFkgYml0KSBhY3Jvc3MgdGhlIE1ESU8gdHJhbnNhY3Rpb24gdG8gc2VyaWFsaXplIGFnYWluc3QgdGhlXFxuK1xcdCAqIGRldmljZSdzIG1hbmFnZW1lbnQgZmlybXdhcmUuICBUaGUgc2VsZnRlc3Qgb3ducyB0aGUgYXNzaWduZWQgZnVuY3Rpb25cXG4rXFx0ICogZXhjbHVzaXZlbHkgb24gYSBkZWRpY2F0ZWQgdGVzdCBkZXZpY2Ugd2l0aCBubyBhY3RpdmUgbWFuYWdlYWJpbGl0eVxcbitcXHQgKiBjb250ZW5kaW5nIGZvciB0aGUgUEhZLCBzbyB0aGUgc3luYyBpcyBvbWl0dGVkOyBpdCBzaG91bGQgYmUgYWRkZWQgaGVyZVxcbitcXHQgKiBpZiB0aGlzIGV2ZXIgbmVlZHMgdG8gcnVuIG9uIGEgbWFuYWdlYWJpbGl0eS1lbmFibGVkIE5JQy5cXG4rXFx0ICovXFxuK1xcdG1kaWMgPSAoKCh1MzIpZGF0YSkgfFxcbitcXHRcXHQob2Zmc2V0IFxcdTAwM2NcXHUwMDNjIEUxMDAwX01ESUNfUkVHX1NISUZUKSB8XFxuK1xcdFxcdCgxIFxcdTAwM2NcXHUwMDNjIEUxMDAwX01ESUNfUEhZX1NISUZUKSB8XFxuK1xcdFxcdEUxMDAwX01ESUNfT1BfV1JJVEUpO1xcbitcXG4rXFx0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9NRElDLCBtZGljKTtcXG4rXFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyAxMDAwOyBpKyspIHtcXG4rXFx0XFx0dXNsZWVwKDUwKTtcXG4rXFx0XFx0bWRpYyA9IGlnYl9yZWFkMzIoaWdiLCBFMTAwMF9NRElDKTtcXG4rXFx0XFx0aWYgKG1kaWMgXFx1MDAyNiBFMTAwMF9NRElDX1JFQURZKVxcbitcXHRcXHRcXHRicmVhaztcXG4rXFx0fVxcbitcXG4rXFx0aWYgKCEobWRpYyBcXHUwMDI2IEUxMDAwX01ESUNfUkVBRFkpKVxcbitcXHRcXHRyZXR1cm4gLTE7XFxuK1xcbitcXHRpZiAobWRpYyBcXHUwMDI2IEUxMDAwX01ESUNfRVJST1IpXFxuK1xcdFxcdHJldHVybiAtMTtcXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbisvKlxcbisgKiBDb25maWd1cmUgdGhlIGRldmljZSBmb3IgUEhZIGludGVybmFsIGxvb3BiYWNrIHBlciA4MjU3NiBkYXRhc2hlZXRcXG4rICogc2VjdGlvbiAzLjUuNi4zLjEuICBGb3JjZSB0aGUgUEhZIHRvIDFHYi9zIGZ1bGwgZHVwbGV4IHdpdGggbG9vcGJhY2tcXG4rICogZW5hYmxlZCwgdGhlbiBmb3JjZSB0aGUgTUFDIGxpbmsgc3RhdGUgdG8gbWF0Y2guICBJbnRlcm5hbCBsb29wYmFja1xcbisgKiB3cmFwcyBkYXRhIGF0IHRoZSBlbmQgb2YgdGhlIFBIWSBkYXRhcGF0aCAoc2VjdGlvbiAzLjUuNi4zKSwgc28gdGhlXFxuKyAqIHBoeXNpY2FsIGxpbmsgc3RhdGUgaXMgaXJyZWxldmFudC5cXG4rICpcXG4rICogU2VjdGlvbiAzLjUuNi4xIGRpcmVjdHMgdG8gXFxcIlVzZSBQSFkgTG9vcGJhY2sgaW5zdGVhZCBvZiBNQUMgTG9vcGJhY2tcXG4rICogb24gdGhlIDgyNTc2XFxcIiwgYW5kIHNlY3Rpb24gMy41LjYuMiBzdGF0ZXMgXFxcIk1BQyBMb29wYmFjayBpcyBub3QgdXNlZFxcbisgKiBvbiB0aGlzIGRldmljZS5cXFwiICBSQ1RMLkxCTV9NQUMgaXMgc3RpbGwgc2V0IGVsc2V3aGVyZSBhcyBhIFFFTVUtb25seVxcbisgKiBhY2NvbW1vZGF0aW9uOyBzZWUgdGhlIFJDVEwgcHJvZ3JhbW1pbmcgaW4gdGhlIGNhbGxlciBmb3IgdGhlXFxuKyAqIHJhdGlvbmFsZS5cXG4rICovXFxuK3N0YXRpYyB2b2lkIGlnYl9zZXR1cF9sb29wYmFjayhzdHJ1Y3QgaWdiICppZ2IpXFxuK3tcXG4rXFx0dTMyIGN0cmw7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHQvKlxcbitcXHQgKiBLaWNrIHRoZSBhdXRvbmVnIG1hY2hpbmVyeSBzb2xlbHkgdG8gYnJpbmcgU1RBVFVTLkxVIHVwIHVuZGVyXFxuK1xcdCAqIFFFTVUncyBpZ2IgZW11bGF0aW9uOiBRRU1VIG9ubHkgdXBkYXRlcyBTVEFUVVMuTFUgdmlhIGl0c1xcbitcXHQgKiBhdXRvbmVnLWRvbmUgdGltZXIsIGFuZCB3aXRob3V0IExVIHNldCBpdHMgcmVjZWl2ZSBwYXRoXFxuK1xcdCAqIChlMTAwMHhfaHdfcnhfZW5hYmxlZCkgZHJvcHMgZXZlcnkgbG9vcGJhY2sgZnJhbWUuICBPbiByZWFsXFxuK1xcdCAqIGhhcmR3YXJlIGF1dG9uZWcgY2Fubm90IGNvbXBsZXRlIGJlZm9yZSB0aGUgbmV4dCBQSFkgd3JpdGVcXG4rXFx0ICogYmVsb3cgY2xlYXJzIHRoZSBhdXRvbmVnLWVuYWJsZSBiaXQsIHNvIHRoaXMgaXMgZWZmZWN0aXZlbHkgYVxcbitcXHQgKiBuby1vcCB0aGVyZS5cXG4rXFx0ICovXFxuK1xcdCh2b2lkKWlnYl93cml0ZV9waHkoaWdiLCBNSUlfQk1DUixcXG4rXFx0XFx0XFx0ICAgIEJNQ1JfQU5FTkFCTEUgfCBCTUNSX0FOUkVTVEFSVCk7XFxuK1xcbitcXHQvKiBQSFkgY29udHJvbDogbG9vcGJhY2sgKyAxR2IvcyBmdWxsIGR1cGxleCwgYXV0b25lZyBkaXNhYmxlZC4gKi9cXG4rXFx0cmV0ID0gaWdiX3dyaXRlX3BoeShpZ2IsIE1JSV9CTUNSLFxcbitcXHRcXHRcXHQgICAgQk1DUl9MT09QQkFDSyB8XFxuK1xcdFxcdFxcdCAgICBCTUNSX1NQRUVEMTAwMCB8XFxuK1xcdFxcdFxcdCAgICBCTUNSX0ZVTExEUExYKTtcXG4rXFx0VkZJT19BU1NFUlRfRVEocmV0LCAwLCBcXFwiRmFpbGVkIHRvIHdyaXRlIFBIWSBjb250cm9sIHJlZ2lzdGVyXFxcIik7XFxuK1xcbitcXHQvKlxcbitcXHQgKiBCcmllZiBkZWxheSBiZWZvcmUgZm9yY2luZyB0aGUgTUFDLCBtaXJyb3JpbmcgdGhlIGtlcm5lbCBldGh0b29sXFxuK1xcdCAqIHNlbGZ0ZXN0IGluIGlnYl9pbnRlZ3JhdGVkX3BoeV9sb29wYmFjaygpLiAgTm90IHNwZWNpZmllZCBieSB0aGVcXG4rXFx0ICogZGF0YXNoZWV0LCBidXQgZW1waXJpY2FsbHkgcmVxdWlyZWQgYnkgdGhlIGtlcm5lbCBkcml2ZXIuXFxuK1xcdCAqL1xcbitcXHR1c2xlZXAoNTAwMDApO1xcbitcXG4rXFx0LypcXG4rXFx0ICogRm9yY2UgdGhlIE1BQyB0byAxR2IvcyBmdWxsIGR1cGxleCB3aXRoIGxpbmsgdXAuICBXaXRob3V0IGZvcmNpbmdcXG4rXFx0ICogdGhlIGxpbmsgc3RhdGUgdGhlIGRlc2NyaXB0b3IgZW5naW5lIGRvZXMgbm90IHJ1biwgc2luY2UgdGhlIGNoaXBcXG4rXFx0ICogbm9ybWFsbHkgd2FpdHMgZm9yIGEgcmVhbCBuZWdvdGlhdGVkIGxpbmsuXFxuK1xcdCAqL1xcbitcXHRjdHJsID0gaWdiX3JlYWQzMihpZ2IsIEUxMDAwX0NUUkwpO1xcbitcXHRjdHJsIFxcdTAwMjY9IH5FMTAwMF9DVFJMX1NQRF9TRUw7XFxuK1xcdGN0cmwgfD0gRTEwMDBfQ1RSTF9GUkNTUEQgfFxcbitcXHRcXHRFMTAwMF9DVFJMX0ZSQ0RQWCB8XFxuK1xcdFxcdEUxMDAwX0NUUkxfU1BEXzEwMDAgfFxcbitcXHRcXHRFMTAwMF9DVFJMX0ZEIHxcXG4rXFx0XFx0RTEwMDBfQ1RSTF9TTFU7XFxuK1xcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfQ1RSTCwgY3RybCk7XFxuK1xcbitcXHQvKlxcbitcXHQgKiBTZXR0bGluZyBkZWxheSBtYXRjaGluZyB0aGUga2VybmVsIGV0aHRvb2wgc2VsZnRlc3QncyBtc2xlZXAoNTAwKVxcbitcXHQgKiBhdCB0aGUgdGFpbCBvZiBpZ2JfaW50ZWdyYXRlZF9waHlfbG9vcGJhY2soKS4gIE5vdCBzcGVjaWZpZWQgYnlcXG4rXFx0ICogdGhlIGRhdGFzaGVldDsgZW1waXJpY2FsLCBhbmQgaW5oZXJpdGVkIGZyb20gdGhlIGtlcm5lbCBkcml2ZXIuXFxuK1xcdCAqL1xcbitcXHR1c2xlZXAoNTAwMDAwKTtcXG4rfVxcbitcXG4rc3RhdGljIGludCBpZ2JfcHJvYmUoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlKVxcbit7XFxuK1xcdGlmICghdmZpb19wY2lfZGV2aWNlX21hdGNoKGRldmljZSwgUENJX1ZFTkRPUl9JRF9JTlRFTCwgUENJX0RFVklDRV9JRF9JTlRFTF84MjU3NikpXFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuKy8qXFxuKyAqIFByb2dyYW0gdGhlIGRldmljZSBpbnRvIGEgdXNhYmxlIHN0YXRlLiAgU3BsaXQgb3V0IG9mIGlnYl9pbml0KCkgc28gaXRcXG4rICogY2FuIGJlIHJldXNlZCBhZnRlciBhIGRldmljZSByZXNldCB0byByZS1wcm9ncmFtIHRoZSByZWdpc3RlcnMgdGhhdFxcbisgKiBDVFJMLlJTVCBjbGVhcnMuICBFeHBlY3RzIGJhcjAgdG8gYmUgbWFwcGVkIGFuZCBNU0ktWCBhbHJlYWR5IGVuYWJsZWRcXG4rICogdmlhIFZGSU8uXFxuKyAqL1xcbitzdGF0aWMgdm9pZCBpZ2JfaHdfaW5pdChzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UpXFxuK3tcXG4rXFx0c3RydWN0IGlnYiAqaWdiID0gdG9faWdiX3N0YXRlKGRldmljZSk7XFxuK1xcdHU2NCBpb3ZhX3R4LCBpb3ZhX3J4O1xcbitcXHR1MzIgY3RybCwgcmN0bDtcXG4rXFx0dTE2IGNtZF9yZWc7XFxuK1xcdGludCByZXRyaWVzO1xcbitcXG4rXFx0aW92YV90eCA9IHRvX2lvdmEoZGV2aWNlLCBpZ2ItXFx1MDAzZXR4X3JpbmcpO1xcbitcXHRpb3ZhX3J4ID0gdG9faW92YShkZXZpY2UsIGlnYi1cXHUwMDNlcnhfcmluZyk7XFxuK1xcbitcXHQvKiBTaWduYWwgdGhhdCB0aGUgZHJpdmVyIGlzIGxvYWRlZCAqL1xcbitcXHRjdHJsID0gaWdiX3JlYWQzMihpZ2IsIEUxMDAwX0NUUkxfRVhUKTtcXG4rXFx0Y3RybCB8PSBFMTAwMF9DVFJMX0VYVF9EUlZfTE9BRDtcXG4rXFx0Y3RybCBcXHUwMDI2PSB+RTEwMDBfQ1RSTF9FWFRfTElOS19NT0RFX01BU0s7XFxuK1xcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfQ1RSTF9FWFQsIGN0cmwpO1xcbitcXG4rXFx0LyogRW5hYmxlIFBDSSBCdXMgTWFzdGVyLiAqL1xcbitcXHRjbWRfcmVnID0gdmZpb19wY2lfY29uZmlnX3JlYWR3KGRldmljZSwgUENJX0NPTU1BTkQpO1xcbitcXHRpZiAoKGNtZF9yZWcgXFx1MDAyNiAoUENJX0NPTU1BTkRfTUFTVEVSIHwgUENJX0NPTU1BTkRfTUVNT1JZKSkgIT1cXG4rXFx0ICAgIChQQ0lfQ09NTUFORF9NQVNURVIgfCBQQ0lfQ09NTUFORF9NRU1PUlkpKSB7XFxuK1xcdFxcdGNtZF9yZWcgfD0gKFBDSV9DT01NQU5EX01BU1RFUiB8IFBDSV9DT01NQU5EX01FTU9SWSk7XFxuK1xcdFxcdHZmaW9fcGNpX2NvbmZpZ193cml0ZXcoZGV2aWNlLCBQQ0lfQ09NTUFORCwgY21kX3JlZyk7XFxuK1xcdH1cXG4rXFxuK1xcdC8qXFxuK1xcdCAqIERpc2FibGUgRE1BIHJlLXNlbmQgb24gUENJZSBjb21wbGV0aW9uIHRpbWVvdXQgKDgyNTc2IGRhdGFzaGVldFxcbitcXHQgKiBzZWN0aW9uIDguNi4xLCBHQ1IuQ29tcGxldGlvbl9UaW1lb3V0X1Jlc2VuZCwgYml0IDE2KS4gIFRoZVxcbitcXHQgKiBtaXhfYW5kX21hdGNoIHRlc3QgaW50ZW50aW9uYWxseSBzdWJtaXRzIGRlc2NyaXB0b3JzIHRhcmdldGluZ1xcbitcXHQgKiB1bm1hcHBlZCBJT1ZBczsgd2l0aCB0aGUgZGVmYXVsdCAoc2V0KSB2YWx1ZSwgdGhlIGRldmljZSBrZWVwc1xcbitcXHQgKiByZXRyeWluZyB0aGUgZmFpbGVkIHJlYWQgaW5kZWZpbml0ZWx5LCB3aGljaCBrZWVwcyBQQ0llIEFFUiBhbmRcXG4rXFx0ICogSU9NTVUgZXJyb3IgaGFuZGxpbmcgYnVzeSBhbmQgaW50ZXJmZXJlcyB3aXRoIHJlc2V0IHJlY292ZXJ5LlxcbitcXHQgKi9cXG4rXFx0Y3RybCA9IGlnYl9yZWFkMzIoaWdiLCBFMTAwMF9HQ1IpO1xcbitcXHRjdHJsIFxcdTAwMjY9IH5FMTAwMF9HQ1JfQ01QTF9UTU9VVF9SRVNFTkQ7XFxuK1xcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfR0NSLCBjdHJsKTtcXG4rXFxuK1xcdC8qIENvbmZpZ3VyZSBQSFkgaW50ZXJuYWwgbG9vcGJhY2sgZm9yIHRlc3RpbmcuICovXFxuK1xcdGlnYl9zZXR1cF9sb29wYmFjayhpZ2IpO1xcbitcXG4rXFx0LyogQ29uZmlndXJlIFRYIGFuZCBSWCBkZXNjcmlwdG9yIHJpbmdzICovXFxuK1xcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfVERCQUwoMCksICh1MzIpaW92YV90eCk7XFxuK1xcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfVERCQUgoMCksICh1MzIpKGlvdmFfdHggXFx1MDAzZVxcdTAwM2UgMzIpKTtcXG4rXFx0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9URExFTigwKSwgUklOR19TSVpFICogc2l6ZW9mKHN0cnVjdCBpZ2JfdHhfZGVzYykpO1xcbitcXHRpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX1RESCgwKSwgMCk7XFxuK1xcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfVERUKDApLCAwKTtcXG4rXFx0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9UWERDVEwoMCksIEUxMDAwX1RYRENUTF9RVUVVRV9FTkFCTEUpO1xcbitcXG4rXFx0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9SREJBTCgwKSwgKHUzMilpb3ZhX3J4KTtcXG4rXFx0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9SREJBSCgwKSwgKHUzMikoaW92YV9yeCBcXHUwMDNlXFx1MDAzZSAzMikpO1xcbitcXHRpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX1JETEVOKDApLCBSSU5HX1NJWkUgKiBzaXplb2Yoc3RydWN0IGlnYl9yeF9kZXNjKSk7XFxuK1xcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfUkRIKDApLCAwKTtcXG4rXFx0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9SRFQoMCksIDApO1xcbitcXG4rXFx0LypcXG4rXFx0ICogU2VsZWN0IHRoZSBhZHZhbmNlZCBvbmUtYnVmZmVyIGRlc2NyaXB0b3IgZm9ybWF0LiAgUGVyIDgyNTc2XFxuK1xcdCAqIGRhdGFzaGVldCBzZWN0aW9uIDcuMS41LjI6IFxcXCJTUlJDVExbbl0uREVTQ1RZUEUgbXVzdCBiZSBzZXQgdG8gYVxcbitcXHQgKiB2YWx1ZSBvdGhlciB0aGFuIDAwMGIgZm9yIHRoZSA4MjU3NiB0byB3cml0ZSBiYWNrIHRoZSBzcGVjaWFsXFxuK1xcdCAqIGRlc2NyaXB0b3JzLlxcXCIgIHN0cnVjdCBpZ2JfcnhfZGVzYyBtYXRjaGVzIHRoZSBhZHZhbmNlZCBvbmUtYnVmZmVyXFxuK1xcdCAqIHdyaXRlYmFjayBsYXlvdXQgKHNlY3Rpb24gNy4xLjUuMiksIHNvIHBvbGxpbmcgcngud2Iuc3RhdHVzX2Vycm9yXFxuK1xcdCAqIHJlcXVpcmVzIHRoaXMgZm9ybWF0LiAgU2VjdGlvbiA4LjEwLjIgc3BlY2lmaWVzIERFU0NUWVBFWzI3OjI1XS5cXG4rXFx0ICpcXG4rXFx0ICogVGhlIGRpcmVjdCB3cml0ZSBhbHNvIHplcm9lcyBTUlJDVEwuQlNJWkVQQUNLRVQsIHdoaWNoIGlzXFxuK1xcdCAqIGludGVudGlvbmFsOiBwZXIgc2VjdGlvbiA3LjEuMy4xIGEgemVybyBCU0laRVBBQ0tFVCBmYWxscyBiYWNrIHRvXFxuK1xcdCAqIHRoZSBSQ1RMLkJTSVpFIGJ1ZmZlciBzaXplLCB3aG9zZSByZXNldCBkZWZhdWx0ICgwMGIpIGlzIDIwNDhcXG4rXFx0ICogYnl0ZXMgLS0gYW1wbGUgZm9yIHRoZSBsb29wYmFjayBmcmFtZXMgaGVyZS5cXG4rXFx0ICovXFxuK1xcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfU1JSQ1RMKDApLCBFMTAwMF9TUlJDVExfREVTQ1RZUEVfQURWX09ORUJVRik7XFxuK1xcbitcXHRpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX1JYRENUTCgwKSwgRTEwMDBfUlhEQ1RMX1FVRVVFX0VOQUJMRSk7XFxuK1xcbitcXHQvKiBXYWl0IGZvciBUWCBhbmQgUlggcXVldWVzIHRvIGJlIGVuYWJsZWQgKi9cXG4rXFx0cmV0cmllcyA9IDIwMDA7XFxuK1xcdHdoaWxlIChyZXRyaWVzLS0gXFx1MDAzZSAwKSB7XFxuK1xcdFxcdGlmICgoaWdiX3JlYWQzMihpZ2IsIEUxMDAwX1RYRENUTCgwKSkgXFx1MDAyNiBFMTAwMF9UWERDVExfUVVFVUVfRU5BQkxFKSBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHQgICAgKGlnYl9yZWFkMzIoaWdiLCBFMTAwMF9SWERDVEwoMCkpIFxcdTAwMjYgRTEwMDBfUlhEQ1RMX1FVRVVFX0VOQUJMRSkpXFxuK1xcdFxcdFxcdGJyZWFrO1xcbitcXHRcXHR1c2xlZXAoMTApO1xcbitcXHR9XFxuK1xcbitcXHQvKlxcbitcXHQgKiBFbmFibGUgUmVjZWl2ZXIgYW5kIFRyYW5zbWl0dGVyLiAgUkNUTC5MQk1fTUFDIGlzIHNldCBpbiBhZGRpdGlvblxcbitcXHQgKiB0byBQSFkgbG9vcGJhY2sgYXMgYSBRRU1VLW9ubHkgYWNjb21tb2RhdGlvbjogUUVNVSdzIGVtdWxhdGVkIGlnYlxcbitcXHQgKiBkb2VzIG5vdCBob25vciBQSFkgcmVnaXN0ZXIgMCBiaXQgMTQgKFBIWSBpbnRlcm5hbCBsb29wYmFjaykgYW5kXFxuK1xcdCAqIHJlbGllcyBvbiBSQ1RMLkxCTV9NQUMgdG8gd3JhcCBUWCBkZXNjcmlwdG9ycyBiYWNrIHRvIHRoZSBSWFxcbitcXHQgKiBxdWV1ZS4gIERhdGFzaGVldCA4LjEwLjEgKFJDVEwgcmVnaXN0ZXIpIGFkdmlzZXMgXFxcIldoZW4gdXNpbmcgdGhlXFxuK1xcdCAqIGludGVybmFsIFBIWSwgTEJNIHNob3VsZCByZW1haW4gc2V0IHRvIDAwYlxcXCIsIHNvIHNldHRpbmcgTEJNX01BQ1xcbitcXHQgKiBoZXJlIGRldmlhdGVzIGZyb20gZGF0YXNoZWV0IGd1aWRhbmNlOyBlbXBpcmljYWxseSB0aGUgYml0IGhhc1xcbitcXHQgKiBubyBvYnNlcnZhYmxlIGVmZmVjdCBvbiByZWFsIDgyNTc2IGhhcmR3YXJlIGJlY2F1c2UgTUFDIGxvb3BiYWNrXFxuK1xcdCAqIGlzIG5vdCBpbXBsZW1lbnRlZCAoZGF0YXNoZWV0IDMuNS42LjIpLiAgU2V0dGluZyBib3RoIGxldHMgdGhlXFxuK1xcdCAqIHNlbGZ0ZXN0IHdvcmsgb24gYm90aCByZWFsIGhhcmR3YXJlIGFuZCBRRU1VIHdpdGhvdXQgY29uZGl0aW9uYWxcXG4rXFx0ICogY29kZSBwYXRocy5cXG4rXFx0ICovXFxuK1xcdHJjdGwgPSBFMTAwMF9SQ1RMX0VOIHwgICAgICAgLyogUmVjZWl2ZXIgRW5hYmxlICovXFxuK1xcdCAgICAgICBFMTAwMF9SQ1RMX1VQRSB8ICAgICAgLyogVW5pY2FzdCBQcm9taXNjdW91cyAoZm9yIGR1bW15IE1BQykgKi9cXG4rXFx0ICAgICAgIEUxMDAwX1JDVExfTEJNX01BQyB8ICAvKiBNQUMgTG9vcGJhY2sgLSBmb3IgUUVNVSBlbXVsYXRpb24gb25seSAqL1xcbitcXHQgICAgICAgRTEwMDBfUkNUTF9TRUNSQzsgICAgIC8qIFN0cmlwIENSQyAobmVlZGVkIGZvciBtZW1jbXApICovXFxuK1xcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfUkNUTCwgcmN0bCk7XFxuK1xcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfVENUTCwgRTEwMDBfVENUTF9FTik7XFxuK1xcbitcXHQvKlxcbitcXHQgKiBQcm9ncmFtIE1TSS1YIGludGVycnVwdCByb3V0aW5nIHBlciA4MjU3NiBkYXRhc2hlZXQ6XFxuK1xcdCAqXFxuK1xcdCAqIEdQSUUgKHNlY3Rpb24gNy4zLjIuMTEsIFRhYmxlIDctNDcpOiBzZXQgTXVsdGlwbGVfTVNJWCAoYml0IDQpIHRvXFxuK1xcdCAqIHJvdXRlIGludGVycnVwdCBjYXVzZXMgdGhyb3VnaCBJVkFSIG1hcHBpbmcsIGFuZCBFSUFNRSAoYml0IDMwKVxcbitcXHQgKiB0byBhcHBseSBFSUFNIG9uIE1TSS1YIGFzc2VydGlvbiAod2l0aG91dCBFSUFNRSwgRUlBTSBvbmx5XFxuK1xcdCAqIGFwcGxpZXMgb24gRUlDUiByZWFkL3dyaXRlKS5cXG4rXFx0ICpcXG4rXFx0ICogRUlBQyAoc2VjdGlvbiA4LjguNSk6IGVuYWJsZSBhdXRvLWNsZWFyIG9mIEVJQ1IgZm9yIHZlY3RvciAwLlxcbitcXHQgKiBXaXRob3V0IGF1dG8tY2xlYXIgdGhlIGNhdXNlIHN0YXlzIHNldCBhZnRlciBkZWxpdmVyeSBhbmQgdGhlXFxuK1xcdCAqIHRlc3QgY2FuIHNlZSBzcHVyaW91cyBpbnRlcnJ1cHRzIG9uIHRoZSBuZXh0IG1lbWNweSBiYXRjaC5cXG4rXFx0ICpcXG4rXFx0ICogRUlBTSAoc2VjdGlvbiA4LjguNik6IGVuYWJsZSBhdXRvLW1hc2sgb2YgRUlNUyBmb3IgdmVjdG9yIDAgb25cXG4rXFx0ICogTVNJLVggYXNzZXJ0aW9uIChlZmZlY3RpdmUgYmVjYXVzZSBFSUFNRSBpcyBzZXQpLCBzbyBhIHNpbmdsZVxcbitcXHQgKiBpbnRlcnJ1cHQgaXMgZGVsaXZlcmVkIHBlciBtZW1jcHkgYmF0Y2ggZXZlbiBpZiB0aGUgY2F1c2VcXG4rXFx0ICogcmUtYXNzZXJ0cyBiZWZvcmUgc29mdHdhcmUgcmUtZW5hYmxlcyB0aGUgbWFzay5cXG4rXFx0ICpcXG4rXFx0ICogSVZBUiAoc2VjdGlvbiA3LjMuMS4yLCByZWdpc3RlciBkZWZpbml0aW9uIGluIDguOC4xMyk6IG1hcCBSWFxcbitcXHQgKiBjYXVzZSAwIHRvIE1TSS1YIHZlY3RvciAwIGFuZCBtYXJrIHRoZSBlbnRyeSB2YWxpZC5cXG4rXFx0ICovXFxuK1xcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfR1BJRSwgRTEwMDBfR1BJRV9NU0lYX01PREUgfCBFMTAwMF9HUElFX0VJQU1FKTtcXG4rXFx0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9FSUFDLCBFMTAwMF9FSUNSX1JYX1FVRVVFMCk7XFxuK1xcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfRUlBTSwgRTEwMDBfRUlDUl9SWF9RVUVVRTApO1xcbitcXG4rXFx0LyogTWFwIHZlY3RvciAwIHRvIGludGVycnVwdCBjYXVzZSAwIGFuZCBtYXJrIGl0IHZhbGlkICovXFxuK1xcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfSVZBUjAsIEUxMDAwX0lWQVJfVkFMSUQpO1xcbitcXG4rXFx0LyogRW5hYmxlIGludGVycnVwdHMgb24gdmVjdG9yIDAgKi9cXG4rXFx0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9FSU1TLCBFMTAwMF9FSUNSX1JYX1FVRVVFMCk7XFxuK1xcbitcXHQvKiBJbml0aWFsaXplIGRyaXZlciBzdGF0ZSBhbmQgY2FwYWJpbGl0eSBsaW1pdHMgKi9cXG4rXFx0aWdiLVxcdTAwM2V0eF90YWlsID0gMDtcXG4rXFx0aWdiLVxcdTAwM2VyeF90YWlsID0gMDtcXG4rXFxuK1xcdGRldmljZS1cXHUwMDNlZHJpdmVyLm1heF9tZW1jcHlfc2l6ZSA9IElHQl9NQVhfQ0hVTktfU0laRTtcXG4rXFx0ZGV2aWNlLVxcdTAwM2Vkcml2ZXIubWF4X21lbWNweV9jb3VudCA9IFJJTkdfU0laRSAtIDE7XFxuK1xcdGRldmljZS1cXHUwMDNlZHJpdmVyLm1zaSA9IE1TSVhfVkVDVE9SO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBpZ2JfaW5pdChzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UpXFxuK3tcXG4rXFx0c3RydWN0IGlnYiAqaWdiID0gdG9faWdiX3N0YXRlKGRldmljZSk7XFxuK1xcbitcXHRWRklPX0FTU0VSVF9HRShkZXZpY2UtXFx1MDAzZWRyaXZlci5yZWdpb24uc2l6ZSwgc2l6ZW9mKHN0cnVjdCBpZ2IpKTtcXG4rXFxuK1xcdGlnYi1cXHUwMDNlYmFyMCA9IGRldmljZS1cXHUwMDNlYmFyc1swXS52YWRkcjtcXG4rXFxuK1xcdC8qIFJlc2V0IGRldmljZSBhbmQgZGlzYWJsZSBhbGwgaW50ZXJydXB0cy4gKi9cXG4rXFx0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9DVFJMLCBpZ2JfcmVhZDMyKGlnYiwgRTEwMDBfQ1RSTCkgfCBFMTAwMF9DVFJMX1JTVCk7XFxuK1xcdC8qXFxuK1xcdCAqIE11c3Qgd2FpdCBhdCBsZWFzdCAxIG1pbGxpc2Vjb25kIGFmdGVyIHNldHRpbmcgdGhlIHJlc2V0IGJpdCBiZWZvcmVcXG4rXFx0ICogY2hlY2tpbmcgaWYgdGhpcyBkZXZpY2UgaXMgcmVhZHkgdG8gYmUgdXNlZCAoODI1NzYgZGF0YXNoZWV0IHNlY3Rpb25cXG4rXFx0ICogNC4yLjEuNi4xKS5cXG4rXFx0ICovXFxuK1xcdHVzbGVlcCgxMDAwKTtcXG4rXFx0d2hpbGUgKGlnYl9yZWFkMzIoaWdiLCBFMTAwMF9DVFJMKSBcXHUwMDI2IEUxMDAwX0NUUkxfUlNUKVxcbitcXHRcXHR1c2xlZXAoMTApO1xcbitcXHRpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX0lNQywgMHhGRkZGRkZGRik7XFxuK1xcbitcXHQvKlxcbitcXHQgKiBFbmFibGUgTVNJLVggdmlhIFZGSU8gYmVmb3JlIGRldmljZS1zaWRlIHJlZ2lzdGVyIHByb2dyYW1taW5nLlxcbitcXHQgKiB2ZmlvX3BjaV9tc2l4X2VuYWJsZSgpIG9ubHkgdG91Y2hlcyB0aGUgVkZJTyBJUlEgbWFjaGluZXJ5IGFuZCB0aGVcXG4rXFx0ICogUENJIE1TSS1YIGNhcGFiaWxpdHkgdmlhIGNvbmZpZyBzcGFjZTsgaXQgaGFzIG5vIG9yZGVyaW5nXFxuK1xcdCAqIGRlcGVuZGVuY3kgb24gdGhlIGRldmljZS1zaWRlIHdyaXRlcyBwZXJmb3JtZWQgYnkgaWdiX2h3X2luaXQoKS5cXG4rXFx0ICogUGxhY2luZyBpdCBoZXJlIGtlZXBzIGlnYl9od19pbml0KCkgcmV1c2FibGUgZnJvbSB0aGUgcmVzZXRcXG4rXFx0ICogcmVjb3ZlcnkgcGF0aCAod2hpY2ggY2FsbHMgdmZpb19wY2lfaXJxX3JlZW5hYmxlKCkgaW5zdGVhZCkuXFxuK1xcdCAqL1xcbitcXHR2ZmlvX3BjaV9tc2l4X2VuYWJsZShkZXZpY2UsIE1TSVhfVkVDVE9SLCAxKTtcXG4rXFxuK1xcdGlnYl9od19pbml0KGRldmljZSk7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIGlnYl9yZW1vdmUoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlKVxcbit7XFxuK1xcdHN0cnVjdCBpZ2IgKmlnYiA9IHRvX2lnYl9zdGF0ZShkZXZpY2UpO1xcbitcXG4rXFx0dmZpb19wY2lfbXNpeF9kaXNhYmxlKGRldmljZSk7XFxuK1xcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfUkNUTCwgMCk7XFxuK1xcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfVENUTCwgMCk7XFxuK1xcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfQ1RSTCwgaWdiX3JlYWQzMihpZ2IsIEUxMDAwX0NUUkwpIHwgRTEwMDBfQ1RSTF9SU1QpO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBpZ2JfaXJxX2Rpc2FibGUoc3RydWN0IGlnYiAqaWdiKVxcbit7XFxuK1xcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfRUlNQywgRTEwMDBfRUlDUl9SWF9RVUVVRTApO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBpZ2JfaXJxX2VuYWJsZShzdHJ1Y3QgaWdiICppZ2IpXFxuK3tcXG4rXFx0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9FSU1TLCBFMTAwMF9FSUNSX1JYX1FVRVVFMCk7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIGlnYl9pcnFfY2xlYXIoc3RydWN0IGlnYiAqaWdiKVxcbit7XFxuK1xcdC8qXFxuK1xcdCAqIFVzZSB3cml0ZS10by1jbGVhciAoZGF0YXNoZWV0IDcuMy40LjIpLiAgSW4gTVNJLVggbW9kZSB3aXRoIEVJQUNcXG4rXFx0ICogcHJvZ3JhbW1lZCwgc2VjdGlvbiA4LjguNSBleHBsaWNpdGx5IHN0YXRlcyBcXFwiSWYgYW55IGJpdHMgYXJlIHNldFxcbitcXHQgKiBpbiBFSUFDLCB0aGUgRUlDUiByZWdpc3RlciBzaG91bGQgbm90IGJlIHJlYWRcXFwiLCB3aGljaCBydWxlcyBvdXRcXG4rXFx0ICogdGhlIHJlYWQtdG8tY2xlYXIgcGF0aCBpbiA3LjMuNC4zLiAgQml0cyBub3QgaW4gRUlBQyBhcmUgc3RpbGxcXG4rXFx0ICogY2xlYXJlZCBieSB3cml0aW5nIDEuXFxuK1xcdCAqL1xcbitcXHRpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX0VJQ1IsIDB4RkZGRkZGRkYpO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBpZ2JfbWVtY3B5X3N0YXJ0KHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSwgaW92YV90IHNyYyxcXG4rXFx0XFx0XFx0ICAgICBpb3ZhX3QgZHN0LCB1NjQgc2l6ZSwgdTY0IGNvdW50KVxcbit7XFxuK1xcdHN0cnVjdCBpZ2IgKmlnYiA9IHRvX2lnYl9zdGF0ZShkZXZpY2UpO1xcbitcXHRzdHJ1Y3QgaWdiX3J4X2Rlc2MgKnJ4O1xcbitcXHRzdHJ1Y3QgaWdiX3R4X2Rlc2MgKnR4O1xcbitcXHR1MzIgaTtcXG4rXFxuK1xcdGlnYl9pcnFfZGlzYWJsZShpZ2IpO1xcbitcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIGNvdW50OyBpKyspIHtcXG4rXFx0XFx0dHggPSBcXHUwMDI2aWdiLVxcdTAwM2V0eF9yaW5nW2lnYi1cXHUwMDNldHhfdGFpbF07XFxuK1xcdFxcdHJ4ID0gXFx1MDAyNmlnYi1cXHUwMDNlcnhfcmluZ1tpZ2ItXFx1MDAzZXJ4X3RhaWxdO1xcbitcXG4rXFx0XFx0bWVtc2V0KHR4LCAwLCBzaXplb2Yoc3RydWN0IGlnYl90eF9kZXNjKSk7XFxuK1xcdFxcdG1lbXNldChyeCwgMCwgc2l6ZW9mKHN0cnVjdCBpZ2JfcnhfZGVzYykpO1xcbitcXG4rXFx0XFx0cngtXFx1MDAzZXJlYWQucGt0X2FkZHIgPSBjcHVfdG9fbGU2NChkc3QpO1xcbitcXHRcXHRyeC1cXHUwMDNlcmVhZC5oZHJfYWRkciA9IGNwdV90b19sZTY0KDApO1xcbitcXG4rXFx0XFx0dHgtXFx1MDAzZXJlYWQuYnVmZmVyX2FkZHIgPSBjcHVfdG9fbGU2NChzcmMpO1xcbitcXHRcXHQvKlxcbitcXHRcXHQgKiBCdWlsZCBhbiBhZHZhbmNlZCBkYXRhIGRlc2NyaXB0b3IgcGVyIDgyNTc2IGRhdGFzaGVldFxcbitcXHRcXHQgKiBzZWN0aW9uIDcuMi4yLjMuICBERVhUIG1hcmtzIHRoZSBkZXNjcmlwdG9yIGFzIGFkdmFuY2VkXFxuK1xcdFxcdCAqIChyZXF1aXJlZCBieSBoYXJkd2FyZSk7IERUWVA9ZGF0YSBzZWxlY3RzIHRoZSBkYXRhXFxuK1xcdFxcdCAqIGRlc2NyaXB0b3I7IElGQ1MgYXNrcyB0aGUgTUFDIHRvIGFwcGVuZCB0aGUgRXRoZXJuZXRcXG4rXFx0XFx0ICogRkNTICh3aXRob3V0IGl0IHRoZSBmcmFtZSBpcyBkcm9wcGVkIGFzIG1hbGZvcm1lZCk7XFxuK1xcdFxcdCAqIEVPUCBtYXJrcyBlbmQgb2YgcGFja2V0LiAgRFRBTEVOIGlzIHRoZSBidWZmZXIgbGVuZ3RoXFxuK1xcdFxcdCAqIGluIGJpdHMgMTU6MCBvZiBjbWRfdHlwZV9sZW4uXFxuK1xcdFxcdCAqL1xcbitcXHRcXHR0eC1cXHUwMDNlcmVhZC5jbWRfdHlwZV9sZW4gPSBjcHVfdG9fbGUzMigodWludDMyX3Qpc2l6ZSB8XFxuK1xcdFxcdFxcdEUxMDAwX0FEVlRYRF9EVFlQX0RBVEEgfFxcbitcXHRcXHRcXHRFMTAwMF9BRFZUWERfRENNRF9ERVhUIHxcXG4rXFx0XFx0XFx0RTEwMDBfQURWVFhEX0RDTURfSUZDUyB8XFxuK1xcdFxcdFxcdEUxMDAwX0FEVlRYRF9EQ01EX0VPUCk7XFxuK1xcdFxcdC8qXFxuK1xcdFxcdCAqIFBBWUxFTiAoc2VjdGlvbiA3LjIuMi4zLjExKSBpcyB0aGUgdG90YWwgcGF5bG9hZCBzaXplXFxuK1xcdFxcdCAqIGluIG9saW5mb19zdGF0dXNbMzE6MTRdLlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0dHgtXFx1MDAzZXJlYWQub2xpbmZvX3N0YXR1cyA9XFxuK1xcdFxcdFxcdGNwdV90b19sZTMyKCh1aW50MzJfdClzaXplIFxcdTAwM2NcXHUwMDNjIEUxMDAwX0FEVlRYRF9QQVlMRU5fU0hJRlQpO1xcbitcXG4rXFx0XFx0aWdiLVxcdTAwM2V0eF90YWlsID0gKGlnYi1cXHUwMDNldHhfdGFpbCArIDEpICUgUklOR19TSVpFO1xcbitcXHRcXHRpZ2ItXFx1MDAzZXJ4X3RhaWwgPSAoaWdiLVxcdTAwM2VyeF90YWlsICsgMSkgJSBSSU5HX1NJWkU7XFxuK1xcdH1cXG4rXFxuK1xcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfUkRUKDApLCBpZ2ItXFx1MDAzZXJ4X3RhaWwpO1xcbitcXHRpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX1REVCgwKSwgaWdiLVxcdTAwM2V0eF90YWlsKTtcXG4rfVxcbitcXG4rLypcXG4rICogUmVzZXQgdGhlIGRldmljZSB2aWEgVkZJT19ERVZJQ0VfUkVTRVQgKFBDSWUgRkxSIG9uIHRoZSA4MjU3NikgYW5kXFxuKyAqIHJlLXByb2dyYW0gaXQuICBWRklPX0RFVklDRV9SRVNFVCB0ZWFycyBkb3duIHRoZSBrZXJuZWwtc2lkZSBNU0ktWFxcbisgKiB0cmlnZ2VyIGJ1dCBsZWF2ZXMgdXNlci1zaWRlIGV2ZW50ZmRzIGludGFjdCwgc28gcmUtYXJtIHRoZSB0cmlnZ2VyXFxuKyAqIHZpYSB2ZmlvX3BjaV9pcnFfcmVlbmFibGUoKSBiZWZvcmUgcmVwcm9ncmFtbWluZyBzbyBhbnkgY2FsbGVyLWNhY2hlZFxcbisgKiBldmVudGZkIHJlbWFpbnMgdmFsaWQuXFxuKyAqXFxuKyAqIEZMUiBjbGVhcnMgZGV2aWNlLXNpZGUgc3RhdGUgdG8gcG93ZXItb24gcmVzZXQgdmFsdWVzIChkYXRhc2hlZXRcXG4rICogNC4yLjEuNS4xOiBhIFBGIEZMUiBpcyBcXFwiZXF1aXZhbGVudCB0byBhIEQwLVxcdTAwM2VEMy1cXHUwMDNlRDAgdHJhbnNpdGlvblxcXCIpLCBzb1xcbisgKiBFSU1TIGFuZCBFSUNSIGNvbWUgYmFjayBhcyAwIGZyb20gdGhlaXIgcmVnaXN0ZXItZGVmaW5lZCBpbml0aWFsXFxuKyAqIHZhbHVlcywgYW5kIGlnYl9od19pbml0KCkgcmVzZXRzIHR4X3RhaWwvcnhfdGFpbCB0byAwLiAgVGhlIG5leHRcXG4rICogaWdiX21lbWNweV9zdGFydCgpIHdpbGwgbWVtc2V0IGVhY2ggZGVzY3JpcHRvciBpdCB0b3VjaGVzIGJlZm9yZVxcbisgKiBzdWJtaXNzaW9uLCBzbyBubyBleHBsaWNpdCBJTUMvRUlDUiB3cml0ZXMgb3IgcmluZyBtZW1zZXRzIGFyZVxcbisgKiBuZWVkZWQgaGVyZS5cXG4rICovXFxuK3N0YXRpYyB2b2lkIGlnYl9lcnJvcl9yZXNldF9hbmRfcmVpbml0KHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSlcXG4re1xcbitcXHR2ZmlvX3BjaV9kZXZpY2VfcmVzZXQoZGV2aWNlKTtcXG4rXFx0dmZpb19wY2lfbXNpeF9yZWVuYWJsZShkZXZpY2UsIE1TSVhfVkVDVE9SLCAxKTtcXG4rXFx0aWdiX2h3X2luaXQoZGV2aWNlKTtcXG4rfVxcbitcXG4rc3RhdGljIGludCBpZ2JfbWVtY3B5X3dhaXQoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlKVxcbit7XFxuK1xcdHN0cnVjdCBpZ2IgKmlnYiA9IHRvX2lnYl9zdGF0ZShkZXZpY2UpO1xcbitcXHRzdHJ1Y3QgaWdiX3J4X2Rlc2MgKnJ4O1xcbitcXHR1MzIgc3RhdHVzID0gMDtcXG4rXFx0dTMyIHByZXZfdGFpbDtcXG4rXFx0aW50IHJldHJpZXM7XFxuK1xcbitcXHRwcmV2X3RhaWwgPSAoaWdiLVxcdTAwM2VyeF90YWlsICsgUklOR19TSVpFIC0gMSkgJSBSSU5HX1NJWkU7XFxuK1xcdHJ4ID0gXFx1MDAyNmlnYi1cXHUwMDNlcnhfcmluZ1twcmV2X3RhaWxdO1xcbitcXG4rXFx0LypcXG4rXFx0ICogUmVhbCA4MjU3NiBoYXJkd2FyZSBwcm9jZXNzZXMgdGhlIGRlc2NyaXB0b3IgcmluZyBhdCBsaW5lIHJhdGUuXFxuK1xcdCAqIG1heF9tZW1jcHlfc2l6ZSA9IChSSU5HX1NJWkUgLSAxKSAqIElHQl9NQVhfQ0hVTktfU0laRSB+PSA0IE1CLFxcbitcXHQgKiBzcGxpdCBpbnRvIDQwOTUgMSBLQiBmcmFtZXMuICBBdCAxIEdiL3MgKH4xMjUgTUIvcykgdGhlIHdvcnN0XFxuK1xcdCAqIHZhbGlkIG1lbWNweSB0YWtlcyB+MzIgbXMgb24gdGhlIHdpcmUsIHBsdXMgcGVyLWZyYW1lIHByZWFtYmxlLFxcbitcXHQgKiBTRkQsIElGRyBhbmQgRkNTIG92ZXJoZWFkICh+MyUpIGFuZCBkZXNjcmlwdG9yIGZldGNoL3dyaXRlYmFja1xcbitcXHQgKiBsYXRlbmN5LiAgV2FpdCB1cCB0byB+MjAwIG1zIGJlZm9yZSBkZWNsYXJpbmcgdGhlIGRldmljZSBodW5nO1xcbitcXHQgKiB+NnggdGhlIGxpbmUtcmF0ZSBmbG9vciBsZWF2ZXMgY29tZm9ydGFibGUgaGVhZHJvb20gZm9yIGhvc3RcXG4rXFx0ICogc2NoZWR1bGluZyBqaXR0ZXIgd2hpbGUga2VlcGluZyB0aGUgaW50ZW50aW9uYWwgaW52YWxpZC1ETUFcXG4rXFx0ICogdGVzdHMgYm91bmRlZC5cXG4rXFx0ICovXFxuK1xcdHJldHJpZXMgPSAyMDA7XFxuK1xcdHdoaWxlIChyZXRyaWVzLS0gXFx1MDAzZSAwKSB7XFxuK1xcdFxcdHN0YXR1cyA9IGxlMzJfdG9fY3B1KFJFQURfT05DRShyeC1cXHUwMDNld2Iuc3RhdHVzX2Vycm9yKSk7XFxuK1xcdFxcdGlmIChzdGF0dXMgXFx1MDAyNiAxKVxcbitcXHRcXHRcXHRicmVhaztcXG4rXFx0XFx0dXNsZWVwKDEwMDApO1xcbitcXHR9XFxuK1xcbitcXHRpZiAoc3RhdHVzIFxcdTAwMjYgMSlcXG4rXFx0XFx0LypcXG4rXFx0XFx0ICogRW5zdXJlIHRoZSB0ZXN0IGNvZGUgZG9lc24ndCBzcGVjdWxhdGl2ZWx5IHJlYWQgdGhlIERNQVxcbitcXHRcXHQgKiBkZXN0aW5hdGlvbiBidWZmZXIgYmVmb3JlIHdlIGhhdmUgdmVyaWZpZWQgdGhhdCB0aGVcXG4rXFx0XFx0ICogZGVzY3JpcHRvciB3cml0ZWJhY2sgaXMgY29tcGxldGUuXFxuK1xcdFxcdCAqL1xcbitcXHRcXHRybWIoKTtcXG4rXFxuK1xcdGlnYl9pcnFfY2xlYXIoaWdiKTtcXG4rXFxuK1xcdGlnYl9pcnFfZW5hYmxlKGlnYik7XFxuK1xcbitcXHRpZiAoc3RhdHVzIFxcdTAwMjYgMSlcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcbitcXHQvKlxcbitcXHQgKiBUaGUgZGVzY3JpcHRvciBuZXZlciBjb21wbGV0ZWQuICBPbiByZWFsIDgyNTc2IGhhcmR3YXJlIHRoaXNcXG4rXFx0ICogdHlwaWNhbGx5IGZvbGxvd3MgYSBETUEtcmVhZCBmYXVsdCBmcm9tIG9uZSBvZiB0aGUgaW50ZW50aW9uYWxcXG4rXFx0ICogdW5tYXBwZWQtSU9WQSB0ZXN0czsgdGhlIGZhdWx0IGxlYXZlcyB0aGUgZGVzY3JpcHRvciBlbmdpbmVcXG4rXFx0ICogdW5hYmxlIHRvIHNlcnZpY2Ugc3Vic2VxdWVudCB2YWxpZCBkZXNjcmlwdG9ycy4gIENUUkwuUlNUIGFsb25lXFxuK1xcdCAqIHJlaW5pdGlhbGl6ZXMgdGhlIHF1ZXVlIHJlZ2lzdGVycyBidXQgbGVhdmVzIHRoZSBlbmdpbmUgd2VkZ2VkXFxuK1xcdCAqIGZvciB0aGUgY3VycmVudCBwcm9jZXNzLCBzbyBhIGJyb2FkZXIgVkZJT19ERVZJQ0VfUkVTRVQgKEZMUilcXG4rXFx0ICogaXMgcmVxdWlyZWQuXFxuK1xcdCAqXFxuK1xcdCAqIERlbGF5IGJlZm9yZSByZXF1ZXN0aW5nIHJlc2V0IHNvIFBDSWUvSU9NTVUvQUVSIGVycm9yIGhhbmRsaW5nXFxuK1xcdCAqIHRyaWdnZXJlZCBieSB0aGUganVzdC1vYnNlcnZlZCBETUEgZmF1bHQgY2FuIHJlbGVhc2UgdGhlIGRldmljZVxcbitcXHQgKiBsb2NrIFZGSU9fREVWSUNFX1JFU0VUIGNvbnRlbmRzIGZvci4gIFRoZSAxMCBtcyB2YWx1ZSBpc1xcbitcXHQgKiBoZXVyaXN0aWMuICBUaGUgY3VycmVudCBtZW1jcHkgc3RpbGwgZmFpbHMgd2l0aCAtRVRJTUVET1VUO1xcbitcXHQgKiByZWNvdmVyeSBvbmx5IGVuc3VyZXMgdGhlIG5leHQgbWVtY3B5IHN0YXJ0cyBmcm9tIGEgdXNhYmxlIHN0YXRlLlxcbitcXHQgKi9cXG4rXFx0dXNsZWVwKDEwMDAwKTtcXG4rXFx0aWdiX2Vycm9yX3Jlc2V0X2FuZF9yZWluaXQoZGV2aWNlKTtcXG4rXFxuK1xcdHJldHVybiAtRVRJTUVET1VUO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBpZ2Jfc2VuZF9tc2koc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlKVxcbit7XFxuK1xcdHN0cnVjdCBpZ2IgKmlnYiA9IHRvX2lnYl9zdGF0ZShkZXZpY2UpO1xcbitcXG4rXFx0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9FSUNTLCAxKTtcXG4rfVxcbitcXG4rY29uc3Qgc3RydWN0IHZmaW9fcGNpX2RyaXZlcl9vcHMgaWdiX29wcyA9IHtcXG4rXFx0Lm5hbWUgPSBcXFwiaWdiXFxcIixcXG4rXFx0LnByb2JlID0gaWdiX3Byb2JlLFxcbitcXHQuaW5pdCA9IGlnYl9pbml0LFxcbitcXHQucmVtb3ZlID0gaWdiX3JlbW92ZSxcXG4rXFx0Lm1lbWNweV9zdGFydCA9IGlnYl9tZW1jcHlfc3RhcnQsXFxuK1xcdC5tZW1jcHlfd2FpdCA9IGlnYl9tZW1jcHlfd2FpdCxcXG4rXFx0LnNlbmRfbXNpID0gaWdiX3NlbmRfbXNpLFxcbit9O1xcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9pbmNsdWRlL2xpYnZmaW8vdmZpb19wY2lfZGV2aWNlLmggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9pbmNsdWRlL2xpYnZmaW8vdmZpb19wY2lfZGV2aWNlLmhcXG5pbmRleCAyODU4ODg1YTg5YmJiZi4uMmU2N2FmYzBkNTgwOTggMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvaW5jbHVkZS9saWJ2ZmlvL3ZmaW9fcGNpX2RldmljZS5oXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvaW5jbHVkZS9saWJ2ZmlvL3ZmaW9fcGNpX2RldmljZS5oXFxuQEAgLTY4LDYgKzY4LDggQEAgdm9pZCB2ZmlvX3BjaV9jb25maWdfYWNjZXNzKHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSwgYm9vbCB3cml0ZSxcXG4gdm9pZCB2ZmlvX3BjaV9pcnFfZW5hYmxlKHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSwgdTMyIGluZGV4LFxcbiBcXHRcXHRcXHQgdTMyIHZlY3RvciwgaW50IGNvdW50KTtcXG4gdm9pZCB2ZmlvX3BjaV9pcnFfZGlzYWJsZShzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UsIHUzMiBpbmRleCk7XFxuK3ZvaWQgdmZpb19wY2lfaXJxX3JlZW5hYmxlKHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSwgdTMyIGluZGV4LFxcbitcXHRcXHRcXHQgICB1MzIgdmVjdG9yLCBpbnQgY291bnQpO1xcbiB2b2lkIHZmaW9fcGNpX2lycV90cmlnZ2VyKHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSwgdTMyIGluZGV4LCB1MzIgdmVjdG9yKTtcXG4gXFxuIHN0YXRpYyBpbmxpbmUgdm9pZCBmY250bF9zZXRfbm9uYmxvY2soaW50IGZkKVxcbkBAIC05Miw2ICs5NCwxMiBAQCBzdGF0aWMgaW5saW5lIHZvaWQgdmZpb19wY2lfbXNpX2Rpc2FibGUoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlKVxcbiBcXHR2ZmlvX3BjaV9pcnFfZGlzYWJsZShkZXZpY2UsIFZGSU9fUENJX01TSV9JUlFfSU5ERVgpO1xcbiB9XFxuIFxcbitzdGF0aWMgaW5saW5lIHZvaWQgdmZpb19wY2lfbXNpX3JlZW5hYmxlKHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSxcXG4rXFx0XFx0XFx0XFx0XFx0IHUzMiB2ZWN0b3IsIGludCBjb3VudClcXG4re1xcbitcXHR2ZmlvX3BjaV9pcnFfcmVlbmFibGUoZGV2aWNlLCBWRklPX1BDSV9NU0lfSVJRX0lOREVYLCB2ZWN0b3IsIGNvdW50KTtcXG4rfVxcbitcXG4gc3RhdGljIGlubGluZSB2b2lkIHZmaW9fcGNpX21zaXhfZW5hYmxlKHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSxcXG4gXFx0XFx0XFx0XFx0XFx0dTMyIHZlY3RvciwgaW50IGNvdW50KVxcbiB7XFxuQEAgLTEwMyw2ICsxMTEsMTIgQEAgc3RhdGljIGlubGluZSB2b2lkIHZmaW9fcGNpX21zaXhfZGlzYWJsZShzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UpXFxuIFxcdHZmaW9fcGNpX2lycV9kaXNhYmxlKGRldmljZSwgVkZJT19QQ0lfTVNJWF9JUlFfSU5ERVgpO1xcbiB9XFxuIFxcbitzdGF0aWMgaW5saW5lIHZvaWQgdmZpb19wY2lfbXNpeF9yZWVuYWJsZShzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UsXFxuK1xcdFxcdFxcdFxcdFxcdCAgdTMyIHZlY3RvciwgaW50IGNvdW50KVxcbit7XFxuK1xcdHZmaW9fcGNpX2lycV9yZWVuYWJsZShkZXZpY2UsIFZGSU9fUENJX01TSVhfSVJRX0lOREVYLCB2ZWN0b3IsIGNvdW50KTtcXG4rfVxcbitcXG4gc3RhdGljIGlubGluZSBpbnQgX190b19pb3ZhKHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSwgdm9pZCAqdmFkZHIsIGlvdmFfdCAqaW92YSlcXG4ge1xcbiBcXHRyZXR1cm4gX19pb21tdV9odmEyaW92YShkZXZpY2UtXFx1MDAzZWlvbW11LCB2YWRkciwgaW92YSk7XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2xpYnZmaW8ubWsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9saWJ2ZmlvLm1rXFxuaW5kZXggOWY0N2JjZWVkMTZmNGMuLjFmMTNjY2EwNDM0OGI0IDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2xpYnZmaW8ubWtcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9saWJ2ZmlvLm1rXFxuQEAgLTEyLDYgKzEyLDcgQEAgTElCVkZJT19DICs9IHZmaW9fcGNpX2RyaXZlci5jXFxuIGlmZXEgKCQoQVJDSDp4ODZfNjQ9eDg2KSx4ODYpXFxuIExJQlZGSU9fQyArPSBkcml2ZXJzL2lvYXQvaW9hdC5jXFxuIExJQlZGSU9fQyArPSBkcml2ZXJzL2RzYS9kc2EuY1xcbitMSUJWRklPX0MgKz0gZHJpdmVycy9pZ2IvaWdiLmNcXG4gZW5kaWZcXG4gXFxuIExJQlZGSU9fT1VUUFVUIDo9ICQoT1VUUFVUKS9saWJ2ZmlvXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL3ZmaW9fcGNpX2RldmljZS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvdmZpb19wY2lfZGV2aWNlLmNcXG5pbmRleCBmYzc1ZTA0ZWYwMTBjZi4uN2I4Mzk0ZDBhYzUwNzYgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvdmZpb19wY2lfZGV2aWNlLmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi92ZmlvX3BjaV9kZXZpY2UuY1xcbkBAIC0xMDYsNiArMTA2LDI4IEBAIHZvaWQgdmZpb19wY2lfaXJxX2Rpc2FibGUoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlLCB1MzIgaW5kZXgpXFxuIFxcdHZmaW9fcGNpX2lycV9zZXQoZGV2aWNlLCBpbmRleCwgMCwgMCwgTlVMTCk7XFxuIH1cXG4gXFxuKy8qXFxuKyAqIFJlLWlzc3VlIFZGSU9fREVWSUNFX1NFVF9JUlFTIGZvciBhbiBhbHJlYWR5LWVuYWJsZWQgdmVjdG9yIHJhbmdlIHVzaW5nXFxuKyAqIHRoZSBleGlzdGluZyBldmVudGZkcy4gIEludGVuZGVkIGZvciBkcml2ZXJzIHRoYXQgbmVlZCB0byByZS1hcm0gZGV2aWNlXFxuKyAqIGludGVycnVwdHMgYWZ0ZXIgYSBWRklPX0RFVklDRV9SRVNFVCwgd2hpY2ggdGVhcnMgZG93biB0aGUga2VybmVsLXNpZGVcXG4rICogSVJRIHRyaWdnZXIgYnV0IGxlYXZlcyB1c2VyLXNpZGUgZXZlbnRmZHMgaW50YWN0LiAgUmVjcmVhdGluZyB0aGVcXG4rICogZXZlbnRmZHMgd291bGQgaW52YWxpZGF0ZSBhbnkgdGVzdC1maXh0dXJlIGNhY2hlIG9mIHRoZSBmZCwgc28gdGhpc1xcbisgKiBoZWxwZXIgZGVsaWJlcmF0ZWx5IHByZXNlcnZlcyB0aGVtLlxcbisgKi9cXG4rdm9pZCB2ZmlvX3BjaV9pcnFfcmVlbmFibGUoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlLCB1MzIgaW5kZXgsXFxuK1xcdFxcdFxcdCAgIHUzMiB2ZWN0b3IsIGludCBjb3VudClcXG4re1xcbitcXHRpbnQgaTtcXG4rXFxuK1xcdGNoZWNrX3N1cHBvcnRlZF9pcnFfaW5kZXgoaW5kZXgpO1xcbitcXG4rXFx0Zm9yIChpID0gdmVjdG9yOyBpIFxcdTAwM2MgdmVjdG9yICsgY291bnQ7IGkrKylcXG4rXFx0XFx0VkZJT19BU1NFUlRfR0UoZGV2aWNlLVxcdTAwM2Vtc2lfZXZlbnRmZHNbaV0sIDAsXFxuK1xcdFxcdFxcdCAgICAgICBcXFwidmVjdG9yICVkIGV2ZW50ZmQgbm90IGFsbG9jYXRlZFxcXFxuXFxcIiwgaSk7XFxuK1xcbitcXHR2ZmlvX3BjaV9pcnFfc2V0KGRldmljZSwgaW5kZXgsIHZlY3RvciwgY291bnQsIGRldmljZS1cXHUwMDNlbXNpX2V2ZW50ZmRzICsgdmVjdG9yKTtcXG4rfVxcbitcXG4gc3RhdGljIHZvaWQgdmZpb19wY2lfaXJxX2dldChzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UsIHUzMiBpbmRleCxcXG4gXFx0XFx0XFx0ICAgICBzdHJ1Y3QgdmZpb19pcnFfaW5mbyAqaXJxX2luZm8pXFxuIHtcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvdmZpb19wY2lfZHJpdmVyLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi92ZmlvX3BjaV9kcml2ZXIuY1xcbmluZGV4IDY4MjdmNGE2ZmViZTk5Li5hNWQwNTQ3MTMyYzQwNSAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi92ZmlvX3BjaV9kcml2ZXIuY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL3ZmaW9fcGNpX2RyaXZlci5jXFxuQEAgLTUsMTIgKzUsMTQgQEBcXG4gI2lmZGVmIF9feDg2XzY0X19cXG4gZXh0ZXJuIHN0cnVjdCB2ZmlvX3BjaV9kcml2ZXJfb3BzIGRzYV9vcHM7XFxuIGV4dGVybiBzdHJ1Y3QgdmZpb19wY2lfZHJpdmVyX29wcyBpb2F0X29wcztcXG4rZXh0ZXJuIHN0cnVjdCB2ZmlvX3BjaV9kcml2ZXJfb3BzIGlnYl9vcHM7XFxuICNlbmRpZlxcbiBcXG4gc3RhdGljIHN0cnVjdCB2ZmlvX3BjaV9kcml2ZXJfb3BzICpkcml2ZXJfb3BzW10gPSB7XFxuICNpZmRlZiBfX3g4Nl82NF9fXFxuIFxcdFxcdTAwMjZkc2Ffb3BzLFxcbiBcXHRcXHUwMDI2aW9hdF9vcHMsXFxuK1xcdFxcdTAwMjZpZ2Jfb3BzLFxcbiAjZW5kaWZcXG4gfTtcXG4gXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTExVDE5OjEzOjQyLjE5MzEyMTcwN1oiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTEwMzI2MDc1NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggb25seSBtb2RpZmllcyBjb2RlIGluIHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vLCB3aGljaCBjb250YWlucyB1c2VyLXNwYWNlIHNlbGZ0ZXN0cyBhbmQgZG9lcyBub3QgYWZmZWN0IHRoZSBjb3JlIGtlcm5lbCwgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlIGNvZGUuIFRoZXJlZm9yZSwgaXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IGNhbiBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG5ldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0XG4gICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksXG4gICBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDMxMzdjMDMxOTlmNjQ3ZWZiNDNiYmJhZjgwNTM4NDRkMGNiNjAwZWRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU2F0IEp1bCAxMSAxOToxMzo0MCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2RyaXZlcnMvaWdiL2UxMDAwXzgyNTc1LmggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9kcml2ZXJzL2lnYi9lMTAwMF84MjU3NS5oXG5uZXcgZmlsZSBtb2RlIDEyMDAwMFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLmI4NGFmZmRlYzU1OThlXG4tLS0gL2Rldi9udWxsXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9kcml2ZXJzL2lnYi9lMTAwMF84MjU3NS5oXG5AQCAtMCwwICsxIEBAXG4rLi4vLi4vLi4vLi4vLi4vLi4vLi4vZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWdiL2UxMDAwXzgyNTc1LmhcblxcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGVcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9kcml2ZXJzL2lnYi9lMTAwMF9kZWZpbmVzLmggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9kcml2ZXJzL2lnYi9lMTAwMF9kZWZpbmVzLmhcbm5ldyBmaWxlIG1vZGUgMTIwMDAwXG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uOWY5N2Y0MzMwMDg2NmRcbi0tLSAvZGV2L251bGxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2RyaXZlcnMvaWdiL2UxMDAwX2RlZmluZXMuaFxuQEAgLTAsMCArMSBAQFxuKy4uLy4uLy4uLy4uLy4uLy4uLy4uL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lnYi9lMTAwMF9kZWZpbmVzLmhcblxcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGVcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9kcml2ZXJzL2lnYi9lMTAwMF9yZWdzLmggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9kcml2ZXJzL2lnYi9lMTAwMF9yZWdzLmhcbm5ldyBmaWxlIG1vZGUgMTIwMDAwXG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uYzczMzYzNDE3MWJiMTNcbi0tLSAvZGV2L251bGxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2RyaXZlcnMvaWdiL2UxMDAwX3JlZ3MuaFxuQEAgLTAsMCArMSBAQFxuKy4uLy4uLy4uLy4uLy4uLy4uLy4uL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lnYi9lMTAwMF9yZWdzLmhcblxcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGVcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9kcml2ZXJzL2lnYi9pZ2IuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2RyaXZlcnMvaWdiL2lnYi5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLjIwNmExZTY0ODljMjFjXG4tLS0gL2Rldi9udWxsXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9kcml2ZXJzL2lnYi9pZ2IuY1xuQEAgLTAsMCArMSw1NTQgQEBcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4rI2luY2x1ZGUgXHUwMDNjdW5pc3RkLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NlcnJuby5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjc3RkaW50LmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9pby5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvcGNpX3JlZ3MuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3BjaV9pZHMuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2tlcm5lbC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvY29tcGlsZXIuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2FzbS9iYXJyaWVyLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9taWkuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpYnZmaW8vdmZpb19wY2lfZGV2aWNlLmhcdTAwM2VcbitcbisjaW5jbHVkZSBcImUxMDAwX3JlZ3MuaFwiXG4rI2luY2x1ZGUgXCJlMTAwMF9kZWZpbmVzLmhcIlxuKyNpbmNsdWRlIFwiZTEwMDBfODI1NzUuaFwiXG4rXG4rI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMXzgyNTc2IDB4MTBDOVxuKyNkZWZpbmUgSUdCX01BWF9DSFVOS19TSVpFIDEwMjRcbisjZGVmaW5lIE1TSVhfVkVDVE9SIDBcbisjZGVmaW5lIFJJTkdfU0laRSA0MDk2IC8qIE51bWJlciBvZiBkZXNjcmlwdG9ycyBpbiByaW5nICovXG4rXG4rc3RydWN0IGlnYl90eF9kZXNjIHtcbitcdHVuaW9uIHtcbitcdFx0c3RydWN0IHtcbitcdFx0XHR1NjQgYnVmZmVyX2FkZHI7IC8qIEFkZHJlc3Mgb2YgZGVzY3JpcHRvcidzIGRhdGEgYnVmZmVyICovXG4rXHRcdFx0dTMyIGNtZF90eXBlX2xlbjsgLyogQ29tbWFuZC9UeXBlL0xlbmd0aCAqL1xuK1x0XHRcdHUzMiBvbGluZm9fc3RhdHVzOyAvKiBDb250ZXh0L0J1ZmZlciBpbmZvICovXG4rXHRcdH0gcmVhZDtcbitcbitcdFx0c3RydWN0IHtcbitcdFx0XHR1NjQgcnN2ZDsgICAgICAgIC8qIFJlc2VydmVkICovXG4rXHRcdFx0dTMyIG54dHNlcV9zZWVkOyAvKiBOZXh0IHNlcXVlbmNlIHNlZWQgKi9cbitcdFx0XHR1MzIgc3RhdHVzOyAgICAgIC8qIERlc2NyaXB0b3Igc3RhdHVzICovXG4rXHRcdH0gd2I7XG4rXHR9O1xuK307XG4rXG4rc3RydWN0IGlnYl9yeF9kZXNjIHtcbitcdHVuaW9uIHtcbitcdFx0c3RydWN0IHtcbitcdFx0XHR1NjQgcGt0X2FkZHI7IC8qIFBhY2tldCBidWZmZXIgYWRkcmVzcyAqL1xuK1x0XHRcdHU2NCBoZHJfYWRkcjsgLyogSGVhZGVyIGJ1ZmZlciBhZGRyZXNzICovXG4rXHRcdH0gcmVhZDtcbitcdFx0c3RydWN0IHtcbitcdFx0XHR1MTYgcGt0X2luZm87ICAgICAvKiBSU1MgdHlwZSwgUGFja2V0IHR5cGUgKi9cbitcdFx0XHR1MTYgaGRyX2luZm87ICAgICAvKiBTcGxpdCBIZWFkLCBidWYgbGVuICovXG4rXHRcdFx0dTMyIHJzczsgICAgICAgICAgLyogUlNTIEhhc2ggKi9cbitcdFx0XHR1MzIgc3RhdHVzX2Vycm9yOyAvKiBleHQgc3RhdHVzL2Vycm9yICovXG4rXHRcdFx0dTE2IGxlbmd0aDsgICAgICAgLyogUGFja2V0IGxlbmd0aCAqL1xuK1x0XHRcdHUxNiB2bGFuOyAgICAgICAgIC8qIFZMQU4gdGFnICovXG4rXHRcdH0gd2I7IC8qIHdyaXRlYmFjayAqL1xuK1x0fTtcbit9O1xuK1xuK3N0cnVjdCBpZ2Ige1xuK1x0dm9pZCAqYmFyMDtcbitcdHUzMiB0eF90YWlsO1xuK1x0dTMyIHJ4X3RhaWw7XG4rXHRzdHJ1Y3QgaWdiX3R4X2Rlc2MgdHhfcmluZ1tSSU5HX1NJWkVdIF9fYXR0cmlidXRlX18oKGFsaWduZWQoMTI4KSkpO1xuK1x0c3RydWN0IGlnYl9yeF9kZXNjIHJ4X3JpbmdbUklOR19TSVpFXSBfX2F0dHJpYnV0ZV9fKChhbGlnbmVkKDEyOCkpKTtcbit9O1xuK1xuK3N0YXRpYyBpbmxpbmUgc3RydWN0IGlnYiAqdG9faWdiX3N0YXRlKHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSlcbit7XG4rXHRyZXR1cm4gKHN0cnVjdCBpZ2IgKilkZXZpY2UtXHUwMDNlZHJpdmVyLnJlZ2lvbi52YWRkcjtcbit9XG4rXG4rc3RhdGljIGlubGluZSB2b2lkIGlnYl93cml0ZTMyKHN0cnVjdCBpZ2IgKmlnYiwgdTMyIHJlZywgdTMyIHZhbClcbit7XG4rXHR3cml0ZWwodmFsLCBpZ2ItXHUwMDNlYmFyMCArIHJlZyk7XG4rfVxuK1xuK3N0YXRpYyBpbmxpbmUgdTMyIGlnYl9yZWFkMzIoc3RydWN0IGlnYiAqaWdiLCB1MzIgcmVnKVxuK3tcbitcdHJldHVybiByZWFkbChpZ2ItXHUwMDNlYmFyMCArIHJlZyk7XG4rfVxuK1xuK3N0YXRpYyBpbnQgaWdiX3dyaXRlX3BoeShzdHJ1Y3QgaWdiICppZ2IsIHUzMiBvZmZzZXQsIHUxNiBkYXRhKVxuK3tcbitcdHUzMiBtZGljO1xuK1x0aW50IGk7XG4rXG4rXHQvKlxuK1x0ICogV3JpdGUgYSBQSFkgcmVnaXN0ZXIgb3ZlciBNRElPLlxuK1x0ICpcbitcdCAqIEEgcHJvZHVjdGlvbiBkcml2ZXIgd291bGQgaG9sZCB0aGUgU1cvRlcgc2VtYXBob3JlIChTV1NNLlNXRVNNQkkgKyB0aGVcbitcdCAqIFNXX0ZXX1NZTkMgUEhZIGJpdCkgYWNyb3NzIHRoZSBNRElPIHRyYW5zYWN0aW9uIHRvIHNlcmlhbGl6ZSBhZ2FpbnN0IHRoZVxuK1x0ICogZGV2aWNlJ3MgbWFuYWdlbWVudCBmaXJtd2FyZS4gIFRoZSBzZWxmdGVzdCBvd25zIHRoZSBhc3NpZ25lZCBmdW5jdGlvblxuK1x0ICogZXhjbHVzaXZlbHkgb24gYSBkZWRpY2F0ZWQgdGVzdCBkZXZpY2Ugd2l0aCBubyBhY3RpdmUgbWFuYWdlYWJpbGl0eVxuK1x0ICogY29udGVuZGluZyBmb3IgdGhlIFBIWSwgc28gdGhlIHN5bmMgaXMgb21pdHRlZDsgaXQgc2hvdWxkIGJlIGFkZGVkIGhlcmVcbitcdCAqIGlmIHRoaXMgZXZlciBuZWVkcyB0byBydW4gb24gYSBtYW5hZ2VhYmlsaXR5LWVuYWJsZWQgTklDLlxuK1x0ICovXG4rXHRtZGljID0gKCgodTMyKWRhdGEpIHxcbitcdFx0KG9mZnNldCBcdTAwM2NcdTAwM2MgRTEwMDBfTURJQ19SRUdfU0hJRlQpIHxcbitcdFx0KDEgXHUwMDNjXHUwMDNjIEUxMDAwX01ESUNfUEhZX1NISUZUKSB8XG4rXHRcdEUxMDAwX01ESUNfT1BfV1JJVEUpO1xuK1xuK1x0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9NRElDLCBtZGljKTtcbitcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIDEwMDA7IGkrKykge1xuK1x0XHR1c2xlZXAoNTApO1xuK1x0XHRtZGljID0gaWdiX3JlYWQzMihpZ2IsIEUxMDAwX01ESUMpO1xuK1x0XHRpZiAobWRpYyBcdTAwMjYgRTEwMDBfTURJQ19SRUFEWSlcbitcdFx0XHRicmVhaztcbitcdH1cbitcbitcdGlmICghKG1kaWMgXHUwMDI2IEUxMDAwX01ESUNfUkVBRFkpKVxuK1x0XHRyZXR1cm4gLTE7XG4rXG4rXHRpZiAobWRpYyBcdTAwMjYgRTEwMDBfTURJQ19FUlJPUilcbitcdFx0cmV0dXJuIC0xO1xuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuKy8qXG4rICogQ29uZmlndXJlIHRoZSBkZXZpY2UgZm9yIFBIWSBpbnRlcm5hbCBsb29wYmFjayBwZXIgODI1NzYgZGF0YXNoZWV0XG4rICogc2VjdGlvbiAzLjUuNi4zLjEuICBGb3JjZSB0aGUgUEhZIHRvIDFHYi9zIGZ1bGwgZHVwbGV4IHdpdGggbG9vcGJhY2tcbisgKiBlbmFibGVkLCB0aGVuIGZvcmNlIHRoZSBNQUMgbGluayBzdGF0ZSB0byBtYXRjaC4gIEludGVybmFsIGxvb3BiYWNrXG4rICogd3JhcHMgZGF0YSBhdCB0aGUgZW5kIG9mIHRoZSBQSFkgZGF0YXBhdGggKHNlY3Rpb24gMy41LjYuMyksIHNvIHRoZVxuKyAqIHBoeXNpY2FsIGxpbmsgc3RhdGUgaXMgaXJyZWxldmFudC5cbisgKlxuKyAqIFNlY3Rpb24gMy41LjYuMSBkaXJlY3RzIHRvIFwiVXNlIFBIWSBMb29wYmFjayBpbnN0ZWFkIG9mIE1BQyBMb29wYmFja1xuKyAqIG9uIHRoZSA4MjU3NlwiLCBhbmQgc2VjdGlvbiAzLjUuNi4yIHN0YXRlcyBcIk1BQyBMb29wYmFjayBpcyBub3QgdXNlZFxuKyAqIG9uIHRoaXMgZGV2aWNlLlwiICBSQ1RMLkxCTV9NQUMgaXMgc3RpbGwgc2V0IGVsc2V3aGVyZSBhcyBhIFFFTVUtb25seVxuKyAqIGFjY29tbW9kYXRpb247IHNlZSB0aGUgUkNUTCBwcm9ncmFtbWluZyBpbiB0aGUgY2FsbGVyIGZvciB0aGVcbisgKiByYXRpb25hbGUuXG4rICovXG4rc3RhdGljIHZvaWQgaWdiX3NldHVwX2xvb3BiYWNrKHN0cnVjdCBpZ2IgKmlnYilcbit7XG4rXHR1MzIgY3RybDtcbitcdGludCByZXQ7XG4rXG4rXHQvKlxuK1x0ICogS2ljayB0aGUgYXV0b25lZyBtYWNoaW5lcnkgc29sZWx5IHRvIGJyaW5nIFNUQVRVUy5MVSB1cCB1bmRlclxuK1x0ICogUUVNVSdzIGlnYiBlbXVsYXRpb246IFFFTVUgb25seSB1cGRhdGVzIFNUQVRVUy5MVSB2aWEgaXRzXG4rXHQgKiBhdXRvbmVnLWRvbmUgdGltZXIsIGFuZCB3aXRob3V0IExVIHNldCBpdHMgcmVjZWl2ZSBwYXRoXG4rXHQgKiAoZTEwMDB4X2h3X3J4X2VuYWJsZWQpIGRyb3BzIGV2ZXJ5IGxvb3BiYWNrIGZyYW1lLiAgT24gcmVhbFxuK1x0ICogaGFyZHdhcmUgYXV0b25lZyBjYW5ub3QgY29tcGxldGUgYmVmb3JlIHRoZSBuZXh0IFBIWSB3cml0ZVxuK1x0ICogYmVsb3cgY2xlYXJzIHRoZSBhdXRvbmVnLWVuYWJsZSBiaXQsIHNvIHRoaXMgaXMgZWZmZWN0aXZlbHkgYVxuK1x0ICogbm8tb3AgdGhlcmUuXG4rXHQgKi9cbitcdCh2b2lkKWlnYl93cml0ZV9waHkoaWdiLCBNSUlfQk1DUixcbitcdFx0XHQgICAgQk1DUl9BTkVOQUJMRSB8IEJNQ1JfQU5SRVNUQVJUKTtcbitcbitcdC8qIFBIWSBjb250cm9sOiBsb29wYmFjayArIDFHYi9zIGZ1bGwgZHVwbGV4LCBhdXRvbmVnIGRpc2FibGVkLiAqL1xuK1x0cmV0ID0gaWdiX3dyaXRlX3BoeShpZ2IsIE1JSV9CTUNSLFxuK1x0XHRcdCAgICBCTUNSX0xPT1BCQUNLIHxcbitcdFx0XHQgICAgQk1DUl9TUEVFRDEwMDAgfFxuK1x0XHRcdCAgICBCTUNSX0ZVTExEUExYKTtcbitcdFZGSU9fQVNTRVJUX0VRKHJldCwgMCwgXCJGYWlsZWQgdG8gd3JpdGUgUEhZIGNvbnRyb2wgcmVnaXN0ZXJcIik7XG4rXG4rXHQvKlxuK1x0ICogQnJpZWYgZGVsYXkgYmVmb3JlIGZvcmNpbmcgdGhlIE1BQywgbWlycm9yaW5nIHRoZSBrZXJuZWwgZXRodG9vbFxuK1x0ICogc2VsZnRlc3QgaW4gaWdiX2ludGVncmF0ZWRfcGh5X2xvb3BiYWNrKCkuICBOb3Qgc3BlY2lmaWVkIGJ5IHRoZVxuK1x0ICogZGF0YXNoZWV0LCBidXQgZW1waXJpY2FsbHkgcmVxdWlyZWQgYnkgdGhlIGtlcm5lbCBkcml2ZXIuXG4rXHQgKi9cbitcdHVzbGVlcCg1MDAwMCk7XG4rXG4rXHQvKlxuK1x0ICogRm9yY2UgdGhlIE1BQyB0byAxR2IvcyBmdWxsIGR1cGxleCB3aXRoIGxpbmsgdXAuICBXaXRob3V0IGZvcmNpbmdcbitcdCAqIHRoZSBsaW5rIHN0YXRlIHRoZSBkZXNjcmlwdG9yIGVuZ2luZSBkb2VzIG5vdCBydW4sIHNpbmNlIHRoZSBjaGlwXG4rXHQgKiBub3JtYWxseSB3YWl0cyBmb3IgYSByZWFsIG5lZ290aWF0ZWQgbGluay5cbitcdCAqL1xuK1x0Y3RybCA9IGlnYl9yZWFkMzIoaWdiLCBFMTAwMF9DVFJMKTtcbitcdGN0cmwgXHUwMDI2PSB+RTEwMDBfQ1RSTF9TUERfU0VMO1xuK1x0Y3RybCB8PSBFMTAwMF9DVFJMX0ZSQ1NQRCB8XG4rXHRcdEUxMDAwX0NUUkxfRlJDRFBYIHxcbitcdFx0RTEwMDBfQ1RSTF9TUERfMTAwMCB8XG4rXHRcdEUxMDAwX0NUUkxfRkQgfFxuK1x0XHRFMTAwMF9DVFJMX1NMVTtcbitcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfQ1RSTCwgY3RybCk7XG4rXG4rXHQvKlxuK1x0ICogU2V0dGxpbmcgZGVsYXkgbWF0Y2hpbmcgdGhlIGtlcm5lbCBldGh0b29sIHNlbGZ0ZXN0J3MgbXNsZWVwKDUwMClcbitcdCAqIGF0IHRoZSB0YWlsIG9mIGlnYl9pbnRlZ3JhdGVkX3BoeV9sb29wYmFjaygpLiAgTm90IHNwZWNpZmllZCBieVxuK1x0ICogdGhlIGRhdGFzaGVldDsgZW1waXJpY2FsLCBhbmQgaW5oZXJpdGVkIGZyb20gdGhlIGtlcm5lbCBkcml2ZXIuXG4rXHQgKi9cbitcdHVzbGVlcCg1MDAwMDApO1xuK31cbitcbitzdGF0aWMgaW50IGlnYl9wcm9iZShzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UpXG4re1xuK1x0aWYgKCF2ZmlvX3BjaV9kZXZpY2VfbWF0Y2goZGV2aWNlLCBQQ0lfVkVORE9SX0lEX0lOVEVMLCBQQ0lfREVWSUNFX0lEX0lOVEVMXzgyNTc2KSlcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rLypcbisgKiBQcm9ncmFtIHRoZSBkZXZpY2UgaW50byBhIHVzYWJsZSBzdGF0ZS4gIFNwbGl0IG91dCBvZiBpZ2JfaW5pdCgpIHNvIGl0XG4rICogY2FuIGJlIHJldXNlZCBhZnRlciBhIGRldmljZSByZXNldCB0byByZS1wcm9ncmFtIHRoZSByZWdpc3RlcnMgdGhhdFxuKyAqIENUUkwuUlNUIGNsZWFycy4gIEV4cGVjdHMgYmFyMCB0byBiZSBtYXBwZWQgYW5kIE1TSS1YIGFscmVhZHkgZW5hYmxlZFxuKyAqIHZpYSBWRklPLlxuKyAqL1xuK3N0YXRpYyB2b2lkIGlnYl9od19pbml0KHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSlcbit7XG4rXHRzdHJ1Y3QgaWdiICppZ2IgPSB0b19pZ2Jfc3RhdGUoZGV2aWNlKTtcbitcdHU2NCBpb3ZhX3R4LCBpb3ZhX3J4O1xuK1x0dTMyIGN0cmwsIHJjdGw7XG4rXHR1MTYgY21kX3JlZztcbitcdGludCByZXRyaWVzO1xuK1xuK1x0aW92YV90eCA9IHRvX2lvdmEoZGV2aWNlLCBpZ2ItXHUwMDNldHhfcmluZyk7XG4rXHRpb3ZhX3J4ID0gdG9faW92YShkZXZpY2UsIGlnYi1cdTAwM2VyeF9yaW5nKTtcbitcbitcdC8qIFNpZ25hbCB0aGF0IHRoZSBkcml2ZXIgaXMgbG9hZGVkICovXG4rXHRjdHJsID0gaWdiX3JlYWQzMihpZ2IsIEUxMDAwX0NUUkxfRVhUKTtcbitcdGN0cmwgfD0gRTEwMDBfQ1RSTF9FWFRfRFJWX0xPQUQ7XG4rXHRjdHJsIFx1MDAyNj0gfkUxMDAwX0NUUkxfRVhUX0xJTktfTU9ERV9NQVNLO1xuK1x0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9DVFJMX0VYVCwgY3RybCk7XG4rXG4rXHQvKiBFbmFibGUgUENJIEJ1cyBNYXN0ZXIuICovXG4rXHRjbWRfcmVnID0gdmZpb19wY2lfY29uZmlnX3JlYWR3KGRldmljZSwgUENJX0NPTU1BTkQpO1xuK1x0aWYgKChjbWRfcmVnIFx1MDAyNiAoUENJX0NPTU1BTkRfTUFTVEVSIHwgUENJX0NPTU1BTkRfTUVNT1JZKSkgIT1cbitcdCAgICAoUENJX0NPTU1BTkRfTUFTVEVSIHwgUENJX0NPTU1BTkRfTUVNT1JZKSkge1xuK1x0XHRjbWRfcmVnIHw9IChQQ0lfQ09NTUFORF9NQVNURVIgfCBQQ0lfQ09NTUFORF9NRU1PUlkpO1xuK1x0XHR2ZmlvX3BjaV9jb25maWdfd3JpdGV3KGRldmljZSwgUENJX0NPTU1BTkQsIGNtZF9yZWcpO1xuK1x0fVxuK1xuK1x0LypcbitcdCAqIERpc2FibGUgRE1BIHJlLXNlbmQgb24gUENJZSBjb21wbGV0aW9uIHRpbWVvdXQgKDgyNTc2IGRhdGFzaGVldFxuK1x0ICogc2VjdGlvbiA4LjYuMSwgR0NSLkNvbXBsZXRpb25fVGltZW91dF9SZXNlbmQsIGJpdCAxNikuICBUaGVcbitcdCAqIG1peF9hbmRfbWF0Y2ggdGVzdCBpbnRlbnRpb25hbGx5IHN1Ym1pdHMgZGVzY3JpcHRvcnMgdGFyZ2V0aW5nXG4rXHQgKiB1bm1hcHBlZCBJT1ZBczsgd2l0aCB0aGUgZGVmYXVsdCAoc2V0KSB2YWx1ZSwgdGhlIGRldmljZSBrZWVwc1xuK1x0ICogcmV0cnlpbmcgdGhlIGZhaWxlZCByZWFkIGluZGVmaW5pdGVseSwgd2hpY2gga2VlcHMgUENJZSBBRVIgYW5kXG4rXHQgKiBJT01NVSBlcnJvciBoYW5kbGluZyBidXN5IGFuZCBpbnRlcmZlcmVzIHdpdGggcmVzZXQgcmVjb3ZlcnkuXG4rXHQgKi9cbitcdGN0cmwgPSBpZ2JfcmVhZDMyKGlnYiwgRTEwMDBfR0NSKTtcbitcdGN0cmwgXHUwMDI2PSB+RTEwMDBfR0NSX0NNUExfVE1PVVRfUkVTRU5EO1xuK1x0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9HQ1IsIGN0cmwpO1xuK1xuK1x0LyogQ29uZmlndXJlIFBIWSBpbnRlcm5hbCBsb29wYmFjayBmb3IgdGVzdGluZy4gKi9cbitcdGlnYl9zZXR1cF9sb29wYmFjayhpZ2IpO1xuK1xuK1x0LyogQ29uZmlndXJlIFRYIGFuZCBSWCBkZXNjcmlwdG9yIHJpbmdzICovXG4rXHRpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX1REQkFMKDApLCAodTMyKWlvdmFfdHgpO1xuK1x0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9UREJBSCgwKSwgKHUzMikoaW92YV90eCBcdTAwM2VcdTAwM2UgMzIpKTtcbitcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfVERMRU4oMCksIFJJTkdfU0laRSAqIHNpemVvZihzdHJ1Y3QgaWdiX3R4X2Rlc2MpKTtcbitcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfVERIKDApLCAwKTtcbitcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfVERUKDApLCAwKTtcbitcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfVFhEQ1RMKDApLCBFMTAwMF9UWERDVExfUVVFVUVfRU5BQkxFKTtcbitcbitcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfUkRCQUwoMCksICh1MzIpaW92YV9yeCk7XG4rXHRpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX1JEQkFIKDApLCAodTMyKShpb3ZhX3J4IFx1MDAzZVx1MDAzZSAzMikpO1xuK1x0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9SRExFTigwKSwgUklOR19TSVpFICogc2l6ZW9mKHN0cnVjdCBpZ2JfcnhfZGVzYykpO1xuK1x0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9SREgoMCksIDApO1xuK1x0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9SRFQoMCksIDApO1xuK1xuK1x0LypcbitcdCAqIFNlbGVjdCB0aGUgYWR2YW5jZWQgb25lLWJ1ZmZlciBkZXNjcmlwdG9yIGZvcm1hdC4gIFBlciA4MjU3NlxuK1x0ICogZGF0YXNoZWV0IHNlY3Rpb24gNy4xLjUuMjogXCJTUlJDVExbbl0uREVTQ1RZUEUgbXVzdCBiZSBzZXQgdG8gYVxuK1x0ICogdmFsdWUgb3RoZXIgdGhhbiAwMDBiIGZvciB0aGUgODI1NzYgdG8gd3JpdGUgYmFjayB0aGUgc3BlY2lhbFxuK1x0ICogZGVzY3JpcHRvcnMuXCIgIHN0cnVjdCBpZ2JfcnhfZGVzYyBtYXRjaGVzIHRoZSBhZHZhbmNlZCBvbmUtYnVmZmVyXG4rXHQgKiB3cml0ZWJhY2sgbGF5b3V0IChzZWN0aW9uIDcuMS41LjIpLCBzbyBwb2xsaW5nIHJ4LndiLnN0YXR1c19lcnJvclxuK1x0ICogcmVxdWlyZXMgdGhpcyBmb3JtYXQuICBTZWN0aW9uIDguMTAuMiBzcGVjaWZpZXMgREVTQ1RZUEVbMjc6MjVdLlxuK1x0ICpcbitcdCAqIFRoZSBkaXJlY3Qgd3JpdGUgYWxzbyB6ZXJvZXMgU1JSQ1RMLkJTSVpFUEFDS0VULCB3aGljaCBpc1xuK1x0ICogaW50ZW50aW9uYWw6IHBlciBzZWN0aW9uIDcuMS4zLjEgYSB6ZXJvIEJTSVpFUEFDS0VUIGZhbGxzIGJhY2sgdG9cbitcdCAqIHRoZSBSQ1RMLkJTSVpFIGJ1ZmZlciBzaXplLCB3aG9zZSByZXNldCBkZWZhdWx0ICgwMGIpIGlzIDIwNDhcbitcdCAqIGJ5dGVzIC0tIGFtcGxlIGZvciB0aGUgbG9vcGJhY2sgZnJhbWVzIGhlcmUuXG4rXHQgKi9cbitcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfU1JSQ1RMKDApLCBFMTAwMF9TUlJDVExfREVTQ1RZUEVfQURWX09ORUJVRik7XG4rXG4rXHRpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX1JYRENUTCgwKSwgRTEwMDBfUlhEQ1RMX1FVRVVFX0VOQUJMRSk7XG4rXG4rXHQvKiBXYWl0IGZvciBUWCBhbmQgUlggcXVldWVzIHRvIGJlIGVuYWJsZWQgKi9cbitcdHJldHJpZXMgPSAyMDAwO1xuK1x0d2hpbGUgKHJldHJpZXMtLSBcdTAwM2UgMCkge1xuK1x0XHRpZiAoKGlnYl9yZWFkMzIoaWdiLCBFMTAwMF9UWERDVEwoMCkpIFx1MDAyNiBFMTAwMF9UWERDVExfUVVFVUVfRU5BQkxFKSBcdTAwMjZcdTAwMjZcbitcdFx0ICAgIChpZ2JfcmVhZDMyKGlnYiwgRTEwMDBfUlhEQ1RMKDApKSBcdTAwMjYgRTEwMDBfUlhEQ1RMX1FVRVVFX0VOQUJMRSkpXG4rXHRcdFx0YnJlYWs7XG4rXHRcdHVzbGVlcCgxMCk7XG4rXHR9XG4rXG4rXHQvKlxuK1x0ICogRW5hYmxlIFJlY2VpdmVyIGFuZCBUcmFuc21pdHRlci4gIFJDVEwuTEJNX01BQyBpcyBzZXQgaW4gYWRkaXRpb25cbitcdCAqIHRvIFBIWSBsb29wYmFjayBhcyBhIFFFTVUtb25seSBhY2NvbW1vZGF0aW9uOiBRRU1VJ3MgZW11bGF0ZWQgaWdiXG4rXHQgKiBkb2VzIG5vdCBob25vciBQSFkgcmVnaXN0ZXIgMCBiaXQgMTQgKFBIWSBpbnRlcm5hbCBsb29wYmFjaykgYW5kXG4rXHQgKiByZWxpZXMgb24gUkNUTC5MQk1fTUFDIHRvIHdyYXAgVFggZGVzY3JpcHRvcnMgYmFjayB0byB0aGUgUlhcbitcdCAqIHF1ZXVlLiAgRGF0YXNoZWV0IDguMTAuMSAoUkNUTCByZWdpc3RlcikgYWR2aXNlcyBcIldoZW4gdXNpbmcgdGhlXG4rXHQgKiBpbnRlcm5hbCBQSFksIExCTSBzaG91bGQgcmVtYWluIHNldCB0byAwMGJcIiwgc28gc2V0dGluZyBMQk1fTUFDXG4rXHQgKiBoZXJlIGRldmlhdGVzIGZyb20gZGF0YXNoZWV0IGd1aWRhbmNlOyBlbXBpcmljYWxseSB0aGUgYml0IGhhc1xuK1x0ICogbm8gb2JzZXJ2YWJsZSBlZmZlY3Qgb24gcmVhbCA4MjU3NiBoYXJkd2FyZSBiZWNhdXNlIE1BQyBsb29wYmFja1xuK1x0ICogaXMgbm90IGltcGxlbWVudGVkIChkYXRhc2hlZXQgMy41LjYuMikuICBTZXR0aW5nIGJvdGggbGV0cyB0aGVcbitcdCAqIHNlbGZ0ZXN0IHdvcmsgb24gYm90aCByZWFsIGhhcmR3YXJlIGFuZCBRRU1VIHdpdGhvdXQgY29uZGl0aW9uYWxcbitcdCAqIGNvZGUgcGF0aHMuXG4rXHQgKi9cbitcdHJjdGwgPSBFMTAwMF9SQ1RMX0VOIHwgICAgICAgLyogUmVjZWl2ZXIgRW5hYmxlICovXG4rXHQgICAgICAgRTEwMDBfUkNUTF9VUEUgfCAgICAgIC8qIFVuaWNhc3QgUHJvbWlzY3VvdXMgKGZvciBkdW1teSBNQUMpICovXG4rXHQgICAgICAgRTEwMDBfUkNUTF9MQk1fTUFDIHwgIC8qIE1BQyBMb29wYmFjayAtIGZvciBRRU1VIGVtdWxhdGlvbiBvbmx5ICovXG4rXHQgICAgICAgRTEwMDBfUkNUTF9TRUNSQzsgICAgIC8qIFN0cmlwIENSQyAobmVlZGVkIGZvciBtZW1jbXApICovXG4rXHRpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX1JDVEwsIHJjdGwpO1xuK1x0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9UQ1RMLCBFMTAwMF9UQ1RMX0VOKTtcbitcbitcdC8qXG4rXHQgKiBQcm9ncmFtIE1TSS1YIGludGVycnVwdCByb3V0aW5nIHBlciA4MjU3NiBkYXRhc2hlZXQ6XG4rXHQgKlxuK1x0ICogR1BJRSAoc2VjdGlvbiA3LjMuMi4xMSwgVGFibGUgNy00Nyk6IHNldCBNdWx0aXBsZV9NU0lYIChiaXQgNCkgdG9cbitcdCAqIHJvdXRlIGludGVycnVwdCBjYXVzZXMgdGhyb3VnaCBJVkFSIG1hcHBpbmcsIGFuZCBFSUFNRSAoYml0IDMwKVxuK1x0ICogdG8gYXBwbHkgRUlBTSBvbiBNU0ktWCBhc3NlcnRpb24gKHdpdGhvdXQgRUlBTUUsIEVJQU0gb25seVxuK1x0ICogYXBwbGllcyBvbiBFSUNSIHJlYWQvd3JpdGUpLlxuK1x0ICpcbitcdCAqIEVJQUMgKHNlY3Rpb24gOC44LjUpOiBlbmFibGUgYXV0by1jbGVhciBvZiBFSUNSIGZvciB2ZWN0b3IgMC5cbitcdCAqIFdpdGhvdXQgYXV0by1jbGVhciB0aGUgY2F1c2Ugc3RheXMgc2V0IGFmdGVyIGRlbGl2ZXJ5IGFuZCB0aGVcbitcdCAqIHRlc3QgY2FuIHNlZSBzcHVyaW91cyBpbnRlcnJ1cHRzIG9uIHRoZSBuZXh0IG1lbWNweSBiYXRjaC5cbitcdCAqXG4rXHQgKiBFSUFNIChzZWN0aW9uIDguOC42KTogZW5hYmxlIGF1dG8tbWFzayBvZiBFSU1TIGZvciB2ZWN0b3IgMCBvblxuK1x0ICogTVNJLVggYXNzZXJ0aW9uIChlZmZlY3RpdmUgYmVjYXVzZSBFSUFNRSBpcyBzZXQpLCBzbyBhIHNpbmdsZVxuK1x0ICogaW50ZXJydXB0IGlzIGRlbGl2ZXJlZCBwZXIgbWVtY3B5IGJhdGNoIGV2ZW4gaWYgdGhlIGNhdXNlXG4rXHQgKiByZS1hc3NlcnRzIGJlZm9yZSBzb2Z0d2FyZSByZS1lbmFibGVzIHRoZSBtYXNrLlxuK1x0ICpcbitcdCAqIElWQVIgKHNlY3Rpb24gNy4zLjEuMiwgcmVnaXN0ZXIgZGVmaW5pdGlvbiBpbiA4LjguMTMpOiBtYXAgUlhcbitcdCAqIGNhdXNlIDAgdG8gTVNJLVggdmVjdG9yIDAgYW5kIG1hcmsgdGhlIGVudHJ5IHZhbGlkLlxuK1x0ICovXG4rXHRpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX0dQSUUsIEUxMDAwX0dQSUVfTVNJWF9NT0RFIHwgRTEwMDBfR1BJRV9FSUFNRSk7XG4rXHRpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX0VJQUMsIEUxMDAwX0VJQ1JfUlhfUVVFVUUwKTtcbitcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfRUlBTSwgRTEwMDBfRUlDUl9SWF9RVUVVRTApO1xuK1xuK1x0LyogTWFwIHZlY3RvciAwIHRvIGludGVycnVwdCBjYXVzZSAwIGFuZCBtYXJrIGl0IHZhbGlkICovXG4rXHRpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX0lWQVIwLCBFMTAwMF9JVkFSX1ZBTElEKTtcbitcbitcdC8qIEVuYWJsZSBpbnRlcnJ1cHRzIG9uIHZlY3RvciAwICovXG4rXHRpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX0VJTVMsIEUxMDAwX0VJQ1JfUlhfUVVFVUUwKTtcbitcbitcdC8qIEluaXRpYWxpemUgZHJpdmVyIHN0YXRlIGFuZCBjYXBhYmlsaXR5IGxpbWl0cyAqL1xuK1x0aWdiLVx1MDAzZXR4X3RhaWwgPSAwO1xuK1x0aWdiLVx1MDAzZXJ4X3RhaWwgPSAwO1xuK1xuK1x0ZGV2aWNlLVx1MDAzZWRyaXZlci5tYXhfbWVtY3B5X3NpemUgPSBJR0JfTUFYX0NIVU5LX1NJWkU7XG4rXHRkZXZpY2UtXHUwMDNlZHJpdmVyLm1heF9tZW1jcHlfY291bnQgPSBSSU5HX1NJWkUgLSAxO1xuK1x0ZGV2aWNlLVx1MDAzZWRyaXZlci5tc2kgPSBNU0lYX1ZFQ1RPUjtcbit9XG4rXG4rc3RhdGljIHZvaWQgaWdiX2luaXQoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlKVxuK3tcbitcdHN0cnVjdCBpZ2IgKmlnYiA9IHRvX2lnYl9zdGF0ZShkZXZpY2UpO1xuK1xuK1x0VkZJT19BU1NFUlRfR0UoZGV2aWNlLVx1MDAzZWRyaXZlci5yZWdpb24uc2l6ZSwgc2l6ZW9mKHN0cnVjdCBpZ2IpKTtcbitcbitcdGlnYi1cdTAwM2ViYXIwID0gZGV2aWNlLVx1MDAzZWJhcnNbMF0udmFkZHI7XG4rXG4rXHQvKiBSZXNldCBkZXZpY2UgYW5kIGRpc2FibGUgYWxsIGludGVycnVwdHMuICovXG4rXHRpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX0NUUkwsIGlnYl9yZWFkMzIoaWdiLCBFMTAwMF9DVFJMKSB8IEUxMDAwX0NUUkxfUlNUKTtcbitcdC8qXG4rXHQgKiBNdXN0IHdhaXQgYXQgbGVhc3QgMSBtaWxsaXNlY29uZCBhZnRlciBzZXR0aW5nIHRoZSByZXNldCBiaXQgYmVmb3JlXG4rXHQgKiBjaGVja2luZyBpZiB0aGlzIGRldmljZSBpcyByZWFkeSB0byBiZSB1c2VkICg4MjU3NiBkYXRhc2hlZXQgc2VjdGlvblxuK1x0ICogNC4yLjEuNi4xKS5cbitcdCAqL1xuK1x0dXNsZWVwKDEwMDApO1xuK1x0d2hpbGUgKGlnYl9yZWFkMzIoaWdiLCBFMTAwMF9DVFJMKSBcdTAwMjYgRTEwMDBfQ1RSTF9SU1QpXG4rXHRcdHVzbGVlcCgxMCk7XG4rXHRpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX0lNQywgMHhGRkZGRkZGRik7XG4rXG4rXHQvKlxuK1x0ICogRW5hYmxlIE1TSS1YIHZpYSBWRklPIGJlZm9yZSBkZXZpY2Utc2lkZSByZWdpc3RlciBwcm9ncmFtbWluZy5cbitcdCAqIHZmaW9fcGNpX21zaXhfZW5hYmxlKCkgb25seSB0b3VjaGVzIHRoZSBWRklPIElSUSBtYWNoaW5lcnkgYW5kIHRoZVxuK1x0ICogUENJIE1TSS1YIGNhcGFiaWxpdHkgdmlhIGNvbmZpZyBzcGFjZTsgaXQgaGFzIG5vIG9yZGVyaW5nXG4rXHQgKiBkZXBlbmRlbmN5IG9uIHRoZSBkZXZpY2Utc2lkZSB3cml0ZXMgcGVyZm9ybWVkIGJ5IGlnYl9od19pbml0KCkuXG4rXHQgKiBQbGFjaW5nIGl0IGhlcmUga2VlcHMgaWdiX2h3X2luaXQoKSByZXVzYWJsZSBmcm9tIHRoZSByZXNldFxuK1x0ICogcmVjb3ZlcnkgcGF0aCAod2hpY2ggY2FsbHMgdmZpb19wY2lfaXJxX3JlZW5hYmxlKCkgaW5zdGVhZCkuXG4rXHQgKi9cbitcdHZmaW9fcGNpX21zaXhfZW5hYmxlKGRldmljZSwgTVNJWF9WRUNUT1IsIDEpO1xuK1xuK1x0aWdiX2h3X2luaXQoZGV2aWNlKTtcbit9XG4rXG4rc3RhdGljIHZvaWQgaWdiX3JlbW92ZShzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UpXG4re1xuK1x0c3RydWN0IGlnYiAqaWdiID0gdG9faWdiX3N0YXRlKGRldmljZSk7XG4rXG4rXHR2ZmlvX3BjaV9tc2l4X2Rpc2FibGUoZGV2aWNlKTtcbitcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfUkNUTCwgMCk7XG4rXHRpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX1RDVEwsIDApO1xuK1x0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9DVFJMLCBpZ2JfcmVhZDMyKGlnYiwgRTEwMDBfQ1RSTCkgfCBFMTAwMF9DVFJMX1JTVCk7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIGlnYl9pcnFfZGlzYWJsZShzdHJ1Y3QgaWdiICppZ2IpXG4re1xuK1x0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9FSU1DLCBFMTAwMF9FSUNSX1JYX1FVRVVFMCk7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIGlnYl9pcnFfZW5hYmxlKHN0cnVjdCBpZ2IgKmlnYilcbit7XG4rXHRpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX0VJTVMsIEUxMDAwX0VJQ1JfUlhfUVVFVUUwKTtcbit9XG4rXG4rc3RhdGljIHZvaWQgaWdiX2lycV9jbGVhcihzdHJ1Y3QgaWdiICppZ2IpXG4re1xuK1x0LypcbitcdCAqIFVzZSB3cml0ZS10by1jbGVhciAoZGF0YXNoZWV0IDcuMy40LjIpLiAgSW4gTVNJLVggbW9kZSB3aXRoIEVJQUNcbitcdCAqIHByb2dyYW1tZWQsIHNlY3Rpb24gOC44LjUgZXhwbGljaXRseSBzdGF0ZXMgXCJJZiBhbnkgYml0cyBhcmUgc2V0XG4rXHQgKiBpbiBFSUFDLCB0aGUgRUlDUiByZWdpc3RlciBzaG91bGQgbm90IGJlIHJlYWRcIiwgd2hpY2ggcnVsZXMgb3V0XG4rXHQgKiB0aGUgcmVhZC10by1jbGVhciBwYXRoIGluIDcuMy40LjMuICBCaXRzIG5vdCBpbiBFSUFDIGFyZSBzdGlsbFxuK1x0ICogY2xlYXJlZCBieSB3cml0aW5nIDEuXG4rXHQgKi9cbitcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfRUlDUiwgMHhGRkZGRkZGRik7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIGlnYl9tZW1jcHlfc3RhcnQoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlLCBpb3ZhX3Qgc3JjLFxuK1x0XHRcdCAgICAgaW92YV90IGRzdCwgdTY0IHNpemUsIHU2NCBjb3VudClcbit7XG4rXHRzdHJ1Y3QgaWdiICppZ2IgPSB0b19pZ2Jfc3RhdGUoZGV2aWNlKTtcbitcdHN0cnVjdCBpZ2JfcnhfZGVzYyAqcng7XG4rXHRzdHJ1Y3QgaWdiX3R4X2Rlc2MgKnR4O1xuK1x0dTMyIGk7XG4rXG4rXHRpZ2JfaXJxX2Rpc2FibGUoaWdiKTtcbitcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGNvdW50OyBpKyspIHtcbitcdFx0dHggPSBcdTAwMjZpZ2ItXHUwMDNldHhfcmluZ1tpZ2ItXHUwMDNldHhfdGFpbF07XG4rXHRcdHJ4ID0gXHUwMDI2aWdiLVx1MDAzZXJ4X3JpbmdbaWdiLVx1MDAzZXJ4X3RhaWxdO1xuK1xuK1x0XHRtZW1zZXQodHgsIDAsIHNpemVvZihzdHJ1Y3QgaWdiX3R4X2Rlc2MpKTtcbitcdFx0bWVtc2V0KHJ4LCAwLCBzaXplb2Yoc3RydWN0IGlnYl9yeF9kZXNjKSk7XG4rXG4rXHRcdHJ4LVx1MDAzZXJlYWQucGt0X2FkZHIgPSBjcHVfdG9fbGU2NChkc3QpO1xuK1x0XHRyeC1cdTAwM2VyZWFkLmhkcl9hZGRyID0gY3B1X3RvX2xlNjQoMCk7XG4rXG4rXHRcdHR4LVx1MDAzZXJlYWQuYnVmZmVyX2FkZHIgPSBjcHVfdG9fbGU2NChzcmMpO1xuK1x0XHQvKlxuK1x0XHQgKiBCdWlsZCBhbiBhZHZhbmNlZCBkYXRhIGRlc2NyaXB0b3IgcGVyIDgyNTc2IGRhdGFzaGVldFxuK1x0XHQgKiBzZWN0aW9uIDcuMi4yLjMuICBERVhUIG1hcmtzIHRoZSBkZXNjcmlwdG9yIGFzIGFkdmFuY2VkXG4rXHRcdCAqIChyZXF1aXJlZCBieSBoYXJkd2FyZSk7IERUWVA9ZGF0YSBzZWxlY3RzIHRoZSBkYXRhXG4rXHRcdCAqIGRlc2NyaXB0b3I7IElGQ1MgYXNrcyB0aGUgTUFDIHRvIGFwcGVuZCB0aGUgRXRoZXJuZXRcbitcdFx0ICogRkNTICh3aXRob3V0IGl0IHRoZSBmcmFtZSBpcyBkcm9wcGVkIGFzIG1hbGZvcm1lZCk7XG4rXHRcdCAqIEVPUCBtYXJrcyBlbmQgb2YgcGFja2V0LiAgRFRBTEVOIGlzIHRoZSBidWZmZXIgbGVuZ3RoXG4rXHRcdCAqIGluIGJpdHMgMTU6MCBvZiBjbWRfdHlwZV9sZW4uXG4rXHRcdCAqL1xuK1x0XHR0eC1cdTAwM2VyZWFkLmNtZF90eXBlX2xlbiA9IGNwdV90b19sZTMyKCh1aW50MzJfdClzaXplIHxcbitcdFx0XHRFMTAwMF9BRFZUWERfRFRZUF9EQVRBIHxcbitcdFx0XHRFMTAwMF9BRFZUWERfRENNRF9ERVhUIHxcbitcdFx0XHRFMTAwMF9BRFZUWERfRENNRF9JRkNTIHxcbitcdFx0XHRFMTAwMF9BRFZUWERfRENNRF9FT1ApO1xuK1x0XHQvKlxuK1x0XHQgKiBQQVlMRU4gKHNlY3Rpb24gNy4yLjIuMy4xMSkgaXMgdGhlIHRvdGFsIHBheWxvYWQgc2l6ZVxuK1x0XHQgKiBpbiBvbGluZm9fc3RhdHVzWzMxOjE0XS5cbitcdFx0ICovXG4rXHRcdHR4LVx1MDAzZXJlYWQub2xpbmZvX3N0YXR1cyA9XG4rXHRcdFx0Y3B1X3RvX2xlMzIoKHVpbnQzMl90KXNpemUgXHUwMDNjXHUwMDNjIEUxMDAwX0FEVlRYRF9QQVlMRU5fU0hJRlQpO1xuK1xuK1x0XHRpZ2ItXHUwMDNldHhfdGFpbCA9IChpZ2ItXHUwMDNldHhfdGFpbCArIDEpICUgUklOR19TSVpFO1xuK1x0XHRpZ2ItXHUwMDNlcnhfdGFpbCA9IChpZ2ItXHUwMDNlcnhfdGFpbCArIDEpICUgUklOR19TSVpFO1xuK1x0fVxuK1xuK1x0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9SRFQoMCksIGlnYi1cdTAwM2VyeF90YWlsKTtcbitcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfVERUKDApLCBpZ2ItXHUwMDNldHhfdGFpbCk7XG4rfVxuK1xuKy8qXG4rICogUmVzZXQgdGhlIGRldmljZSB2aWEgVkZJT19ERVZJQ0VfUkVTRVQgKFBDSWUgRkxSIG9uIHRoZSA4MjU3NikgYW5kXG4rICogcmUtcHJvZ3JhbSBpdC4gIFZGSU9fREVWSUNFX1JFU0VUIHRlYXJzIGRvd24gdGhlIGtlcm5lbC1zaWRlIE1TSS1YXG4rICogdHJpZ2dlciBidXQgbGVhdmVzIHVzZXItc2lkZSBldmVudGZkcyBpbnRhY3QsIHNvIHJlLWFybSB0aGUgdHJpZ2dlclxuKyAqIHZpYSB2ZmlvX3BjaV9pcnFfcmVlbmFibGUoKSBiZWZvcmUgcmVwcm9ncmFtbWluZyBzbyBhbnkgY2FsbGVyLWNhY2hlZFxuKyAqIGV2ZW50ZmQgcmVtYWlucyB2YWxpZC5cbisgKlxuKyAqIEZMUiBjbGVhcnMgZGV2aWNlLXNpZGUgc3RhdGUgdG8gcG93ZXItb24gcmVzZXQgdmFsdWVzIChkYXRhc2hlZXRcbisgKiA0LjIuMS41LjE6IGEgUEYgRkxSIGlzIFwiZXF1aXZhbGVudCB0byBhIEQwLVx1MDAzZUQzLVx1MDAzZUQwIHRyYW5zaXRpb25cIiksIHNvXG4rICogRUlNUyBhbmQgRUlDUiBjb21lIGJhY2sgYXMgMCBmcm9tIHRoZWlyIHJlZ2lzdGVyLWRlZmluZWQgaW5pdGlhbFxuKyAqIHZhbHVlcywgYW5kIGlnYl9od19pbml0KCkgcmVzZXRzIHR4X3RhaWwvcnhfdGFpbCB0byAwLiAgVGhlIG5leHRcbisgKiBpZ2JfbWVtY3B5X3N0YXJ0KCkgd2lsbCBtZW1zZXQgZWFjaCBkZXNjcmlwdG9yIGl0IHRvdWNoZXMgYmVmb3JlXG4rICogc3VibWlzc2lvbiwgc28gbm8gZXhwbGljaXQgSU1DL0VJQ1Igd3JpdGVzIG9yIHJpbmcgbWVtc2V0cyBhcmVcbisgKiBuZWVkZWQgaGVyZS5cbisgKi9cbitzdGF0aWMgdm9pZCBpZ2JfZXJyb3JfcmVzZXRfYW5kX3JlaW5pdChzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UpXG4re1xuK1x0dmZpb19wY2lfZGV2aWNlX3Jlc2V0KGRldmljZSk7XG4rXHR2ZmlvX3BjaV9tc2l4X3JlZW5hYmxlKGRldmljZSwgTVNJWF9WRUNUT1IsIDEpO1xuK1x0aWdiX2h3X2luaXQoZGV2aWNlKTtcbit9XG4rXG4rc3RhdGljIGludCBpZ2JfbWVtY3B5X3dhaXQoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlKVxuK3tcbitcdHN0cnVjdCBpZ2IgKmlnYiA9IHRvX2lnYl9zdGF0ZShkZXZpY2UpO1xuK1x0c3RydWN0IGlnYl9yeF9kZXNjICpyeDtcbitcdHUzMiBzdGF0dXMgPSAwO1xuK1x0dTMyIHByZXZfdGFpbDtcbitcdGludCByZXRyaWVzO1xuK1xuK1x0cHJldl90YWlsID0gKGlnYi1cdTAwM2VyeF90YWlsICsgUklOR19TSVpFIC0gMSkgJSBSSU5HX1NJWkU7XG4rXHRyeCA9IFx1MDAyNmlnYi1cdTAwM2VyeF9yaW5nW3ByZXZfdGFpbF07XG4rXG4rXHQvKlxuK1x0ICogUmVhbCA4MjU3NiBoYXJkd2FyZSBwcm9jZXNzZXMgdGhlIGRlc2NyaXB0b3IgcmluZyBhdCBsaW5lIHJhdGUuXG4rXHQgKiBtYXhfbWVtY3B5X3NpemUgPSAoUklOR19TSVpFIC0gMSkgKiBJR0JfTUFYX0NIVU5LX1NJWkUgfj0gNCBNQixcbitcdCAqIHNwbGl0IGludG8gNDA5NSAxIEtCIGZyYW1lcy4gIEF0IDEgR2IvcyAofjEyNSBNQi9zKSB0aGUgd29yc3RcbitcdCAqIHZhbGlkIG1lbWNweSB0YWtlcyB+MzIgbXMgb24gdGhlIHdpcmUsIHBsdXMgcGVyLWZyYW1lIHByZWFtYmxlLFxuK1x0ICogU0ZELCBJRkcgYW5kIEZDUyBvdmVyaGVhZCAofjMlKSBhbmQgZGVzY3JpcHRvciBmZXRjaC93cml0ZWJhY2tcbitcdCAqIGxhdGVuY3kuICBXYWl0IHVwIHRvIH4yMDAgbXMgYmVmb3JlIGRlY2xhcmluZyB0aGUgZGV2aWNlIGh1bmc7XG4rXHQgKiB+NnggdGhlIGxpbmUtcmF0ZSBmbG9vciBsZWF2ZXMgY29tZm9ydGFibGUgaGVhZHJvb20gZm9yIGhvc3RcbitcdCAqIHNjaGVkdWxpbmcgaml0dGVyIHdoaWxlIGtlZXBpbmcgdGhlIGludGVudGlvbmFsIGludmFsaWQtRE1BXG4rXHQgKiB0ZXN0cyBib3VuZGVkLlxuK1x0ICovXG4rXHRyZXRyaWVzID0gMjAwO1xuK1x0d2hpbGUgKHJldHJpZXMtLSBcdTAwM2UgMCkge1xuK1x0XHRzdGF0dXMgPSBsZTMyX3RvX2NwdShSRUFEX09OQ0UocngtXHUwMDNld2Iuc3RhdHVzX2Vycm9yKSk7XG4rXHRcdGlmIChzdGF0dXMgXHUwMDI2IDEpXG4rXHRcdFx0YnJlYWs7XG4rXHRcdHVzbGVlcCgxMDAwKTtcbitcdH1cbitcbitcdGlmIChzdGF0dXMgXHUwMDI2IDEpXG4rXHRcdC8qXG4rXHRcdCAqIEVuc3VyZSB0aGUgdGVzdCBjb2RlIGRvZXNuJ3Qgc3BlY3VsYXRpdmVseSByZWFkIHRoZSBETUFcbitcdFx0ICogZGVzdGluYXRpb24gYnVmZmVyIGJlZm9yZSB3ZSBoYXZlIHZlcmlmaWVkIHRoYXQgdGhlXG4rXHRcdCAqIGRlc2NyaXB0b3Igd3JpdGViYWNrIGlzIGNvbXBsZXRlLlxuK1x0XHQgKi9cbitcdFx0cm1iKCk7XG4rXG4rXHRpZ2JfaXJxX2NsZWFyKGlnYik7XG4rXG4rXHRpZ2JfaXJxX2VuYWJsZShpZ2IpO1xuK1xuK1x0aWYgKHN0YXR1cyBcdTAwMjYgMSlcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHQvKlxuK1x0ICogVGhlIGRlc2NyaXB0b3IgbmV2ZXIgY29tcGxldGVkLiAgT24gcmVhbCA4MjU3NiBoYXJkd2FyZSB0aGlzXG4rXHQgKiB0eXBpY2FsbHkgZm9sbG93cyBhIERNQS1yZWFkIGZhdWx0IGZyb20gb25lIG9mIHRoZSBpbnRlbnRpb25hbFxuK1x0ICogdW5tYXBwZWQtSU9WQSB0ZXN0czsgdGhlIGZhdWx0IGxlYXZlcyB0aGUgZGVzY3JpcHRvciBlbmdpbmVcbitcdCAqIHVuYWJsZSB0byBzZXJ2aWNlIHN1YnNlcXVlbnQgdmFsaWQgZGVzY3JpcHRvcnMuICBDVFJMLlJTVCBhbG9uZVxuK1x0ICogcmVpbml0aWFsaXplcyB0aGUgcXVldWUgcmVnaXN0ZXJzIGJ1dCBsZWF2ZXMgdGhlIGVuZ2luZSB3ZWRnZWRcbitcdCAqIGZvciB0aGUgY3VycmVudCBwcm9jZXNzLCBzbyBhIGJyb2FkZXIgVkZJT19ERVZJQ0VfUkVTRVQgKEZMUilcbitcdCAqIGlzIHJlcXVpcmVkLlxuK1x0ICpcbitcdCAqIERlbGF5IGJlZm9yZSByZXF1ZXN0aW5nIHJlc2V0IHNvIFBDSWUvSU9NTVUvQUVSIGVycm9yIGhhbmRsaW5nXG4rXHQgKiB0cmlnZ2VyZWQgYnkgdGhlIGp1c3Qtb2JzZXJ2ZWQgRE1BIGZhdWx0IGNhbiByZWxlYXNlIHRoZSBkZXZpY2VcbitcdCAqIGxvY2sgVkZJT19ERVZJQ0VfUkVTRVQgY29udGVuZHMgZm9yLiAgVGhlIDEwIG1zIHZhbHVlIGlzXG4rXHQgKiBoZXVyaXN0aWMuICBUaGUgY3VycmVudCBtZW1jcHkgc3RpbGwgZmFpbHMgd2l0aCAtRVRJTUVET1VUO1xuK1x0ICogcmVjb3Zlcnkgb25seSBlbnN1cmVzIHRoZSBuZXh0IG1lbWNweSBzdGFydHMgZnJvbSBhIHVzYWJsZSBzdGF0ZS5cbitcdCAqL1xuK1x0dXNsZWVwKDEwMDAwKTtcbitcdGlnYl9lcnJvcl9yZXNldF9hbmRfcmVpbml0KGRldmljZSk7XG4rXG4rXHRyZXR1cm4gLUVUSU1FRE9VVDtcbit9XG4rXG4rc3RhdGljIHZvaWQgaWdiX3NlbmRfbXNpKHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSlcbit7XG4rXHRzdHJ1Y3QgaWdiICppZ2IgPSB0b19pZ2Jfc3RhdGUoZGV2aWNlKTtcbitcbitcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfRUlDUywgMSk7XG4rfVxuK1xuK2NvbnN0IHN0cnVjdCB2ZmlvX3BjaV9kcml2ZXJfb3BzIGlnYl9vcHMgPSB7XG4rXHQubmFtZSA9IFwiaWdiXCIsXG4rXHQucHJvYmUgPSBpZ2JfcHJvYmUsXG4rXHQuaW5pdCA9IGlnYl9pbml0LFxuK1x0LnJlbW92ZSA9IGlnYl9yZW1vdmUsXG4rXHQubWVtY3B5X3N0YXJ0ID0gaWdiX21lbWNweV9zdGFydCxcbitcdC5tZW1jcHlfd2FpdCA9IGlnYl9tZW1jcHlfd2FpdCxcbitcdC5zZW5kX21zaSA9IGlnYl9zZW5kX21zaSxcbit9O1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2luY2x1ZGUvbGlidmZpby92ZmlvX3BjaV9kZXZpY2UuaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2luY2x1ZGUvbGlidmZpby92ZmlvX3BjaV9kZXZpY2UuaFxuaW5kZXggMjg1ODg4NWE4OWJiYmYuLjJlNjdhZmMwZDU4MDk4IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvaW5jbHVkZS9saWJ2ZmlvL3ZmaW9fcGNpX2RldmljZS5oXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9pbmNsdWRlL2xpYnZmaW8vdmZpb19wY2lfZGV2aWNlLmhcbkBAIC02OCw2ICs2OCw4IEBAIHZvaWQgdmZpb19wY2lfY29uZmlnX2FjY2VzcyhzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UsIGJvb2wgd3JpdGUsXG4gdm9pZCB2ZmlvX3BjaV9pcnFfZW5hYmxlKHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSwgdTMyIGluZGV4LFxuIFx0XHRcdCB1MzIgdmVjdG9yLCBpbnQgY291bnQpO1xuIHZvaWQgdmZpb19wY2lfaXJxX2Rpc2FibGUoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlLCB1MzIgaW5kZXgpO1xuK3ZvaWQgdmZpb19wY2lfaXJxX3JlZW5hYmxlKHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSwgdTMyIGluZGV4LFxuK1x0XHRcdCAgIHUzMiB2ZWN0b3IsIGludCBjb3VudCk7XG4gdm9pZCB2ZmlvX3BjaV9pcnFfdHJpZ2dlcihzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UsIHUzMiBpbmRleCwgdTMyIHZlY3Rvcik7XG4gXG4gc3RhdGljIGlubGluZSB2b2lkIGZjbnRsX3NldF9ub25ibG9jayhpbnQgZmQpXG5AQCAtOTIsNiArOTQsMTIgQEAgc3RhdGljIGlubGluZSB2b2lkIHZmaW9fcGNpX21zaV9kaXNhYmxlKHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSlcbiBcdHZmaW9fcGNpX2lycV9kaXNhYmxlKGRldmljZSwgVkZJT19QQ0lfTVNJX0lSUV9JTkRFWCk7XG4gfVxuIFxuK3N0YXRpYyBpbmxpbmUgdm9pZCB2ZmlvX3BjaV9tc2lfcmVlbmFibGUoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlLFxuK1x0XHRcdFx0XHQgdTMyIHZlY3RvciwgaW50IGNvdW50KVxuK3tcbitcdHZmaW9fcGNpX2lycV9yZWVuYWJsZShkZXZpY2UsIFZGSU9fUENJX01TSV9JUlFfSU5ERVgsIHZlY3RvciwgY291bnQpO1xuK31cbitcbiBzdGF0aWMgaW5saW5lIHZvaWQgdmZpb19wY2lfbXNpeF9lbmFibGUoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlLFxuIFx0XHRcdFx0XHR1MzIgdmVjdG9yLCBpbnQgY291bnQpXG4ge1xuQEAgLTEwMyw2ICsxMTEsMTIgQEAgc3RhdGljIGlubGluZSB2b2lkIHZmaW9fcGNpX21zaXhfZGlzYWJsZShzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UpXG4gXHR2ZmlvX3BjaV9pcnFfZGlzYWJsZShkZXZpY2UsIFZGSU9fUENJX01TSVhfSVJRX0lOREVYKTtcbiB9XG4gXG4rc3RhdGljIGlubGluZSB2b2lkIHZmaW9fcGNpX21zaXhfcmVlbmFibGUoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlLFxuK1x0XHRcdFx0XHQgIHUzMiB2ZWN0b3IsIGludCBjb3VudClcbit7XG4rXHR2ZmlvX3BjaV9pcnFfcmVlbmFibGUoZGV2aWNlLCBWRklPX1BDSV9NU0lYX0lSUV9JTkRFWCwgdmVjdG9yLCBjb3VudCk7XG4rfVxuK1xuIHN0YXRpYyBpbmxpbmUgaW50IF9fdG9faW92YShzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UsIHZvaWQgKnZhZGRyLCBpb3ZhX3QgKmlvdmEpXG4ge1xuIFx0cmV0dXJuIF9faW9tbXVfaHZhMmlvdmEoZGV2aWNlLVx1MDAzZWlvbW11LCB2YWRkciwgaW92YSk7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvbGlidmZpby5tayBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2xpYnZmaW8ubWtcbmluZGV4IDlmNDdiY2VlZDE2ZjRjLi4xZjEzY2NhMDQzNDhiNCAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2xpYnZmaW8ubWtcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2xpYnZmaW8ubWtcbkBAIC0xMiw2ICsxMiw3IEBAIExJQlZGSU9fQyArPSB2ZmlvX3BjaV9kcml2ZXIuY1xuIGlmZXEgKCQoQVJDSDp4ODZfNjQ9eDg2KSx4ODYpXG4gTElCVkZJT19DICs9IGRyaXZlcnMvaW9hdC9pb2F0LmNcbiBMSUJWRklPX0MgKz0gZHJpdmVycy9kc2EvZHNhLmNcbitMSUJWRklPX0MgKz0gZHJpdmVycy9pZ2IvaWdiLmNcbiBlbmRpZlxuIFxuIExJQlZGSU9fT1VUUFVUIDo9ICQoT1VUUFVUKS9saWJ2ZmlvXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvdmZpb19wY2lfZGV2aWNlLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi92ZmlvX3BjaV9kZXZpY2UuY1xuaW5kZXggZmM3NWUwNGVmMDEwY2YuLjdiODM5NGQwYWM1MDc2IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvdmZpb19wY2lfZGV2aWNlLmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL3ZmaW9fcGNpX2RldmljZS5jXG5AQCAtMTA2LDYgKzEwNiwyOCBAQCB2b2lkIHZmaW9fcGNpX2lycV9kaXNhYmxlKHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSwgdTMyIGluZGV4KVxuIFx0dmZpb19wY2lfaXJxX3NldChkZXZpY2UsIGluZGV4LCAwLCAwLCBOVUxMKTtcbiB9XG4gXG4rLypcbisgKiBSZS1pc3N1ZSBWRklPX0RFVklDRV9TRVRfSVJRUyBmb3IgYW4gYWxyZWFkeS1lbmFibGVkIHZlY3RvciByYW5nZSB1c2luZ1xuKyAqIHRoZSBleGlzdGluZyBldmVudGZkcy4gIEludGVuZGVkIGZvciBkcml2ZXJzIHRoYXQgbmVlZCB0byByZS1hcm0gZGV2aWNlXG4rICogaW50ZXJydXB0cyBhZnRlciBhIFZGSU9fREVWSUNFX1JFU0VULCB3aGljaCB0ZWFycyBkb3duIHRoZSBrZXJuZWwtc2lkZVxuKyAqIElSUSB0cmlnZ2VyIGJ1dCBsZWF2ZXMgdXNlci1zaWRlIGV2ZW50ZmRzIGludGFjdC4gIFJlY3JlYXRpbmcgdGhlXG4rICogZXZlbnRmZHMgd291bGQgaW52YWxpZGF0ZSBhbnkgdGVzdC1maXh0dXJlIGNhY2hlIG9mIHRoZSBmZCwgc28gdGhpc1xuKyAqIGhlbHBlciBkZWxpYmVyYXRlbHkgcHJlc2VydmVzIHRoZW0uXG4rICovXG4rdm9pZCB2ZmlvX3BjaV9pcnFfcmVlbmFibGUoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlLCB1MzIgaW5kZXgsXG4rXHRcdFx0ICAgdTMyIHZlY3RvciwgaW50IGNvdW50KVxuK3tcbitcdGludCBpO1xuK1xuK1x0Y2hlY2tfc3VwcG9ydGVkX2lycV9pbmRleChpbmRleCk7XG4rXG4rXHRmb3IgKGkgPSB2ZWN0b3I7IGkgXHUwMDNjIHZlY3RvciArIGNvdW50OyBpKyspXG4rXHRcdFZGSU9fQVNTRVJUX0dFKGRldmljZS1cdTAwM2Vtc2lfZXZlbnRmZHNbaV0sIDAsXG4rXHRcdFx0ICAgICAgIFwidmVjdG9yICVkIGV2ZW50ZmQgbm90IGFsbG9jYXRlZFxcblwiLCBpKTtcbitcbitcdHZmaW9fcGNpX2lycV9zZXQoZGV2aWNlLCBpbmRleCwgdmVjdG9yLCBjb3VudCwgZGV2aWNlLVx1MDAzZW1zaV9ldmVudGZkcyArIHZlY3Rvcik7XG4rfVxuK1xuIHN0YXRpYyB2b2lkIHZmaW9fcGNpX2lycV9nZXQoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlLCB1MzIgaW5kZXgsXG4gXHRcdFx0ICAgICBzdHJ1Y3QgdmZpb19pcnFfaW5mbyAqaXJxX2luZm8pXG4ge1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL3ZmaW9fcGNpX2RyaXZlci5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvdmZpb19wY2lfZHJpdmVyLmNcbmluZGV4IDY4MjdmNGE2ZmViZTk5Li5hNWQwNTQ3MTMyYzQwNSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL3ZmaW9fcGNpX2RyaXZlci5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi92ZmlvX3BjaV9kcml2ZXIuY1xuQEAgLTUsMTIgKzUsMTQgQEBcbiAjaWZkZWYgX194ODZfNjRfX1xuIGV4dGVybiBzdHJ1Y3QgdmZpb19wY2lfZHJpdmVyX29wcyBkc2Ffb3BzO1xuIGV4dGVybiBzdHJ1Y3QgdmZpb19wY2lfZHJpdmVyX29wcyBpb2F0X29wcztcbitleHRlcm4gc3RydWN0IHZmaW9fcGNpX2RyaXZlcl9vcHMgaWdiX29wcztcbiAjZW5kaWZcbiBcbiBzdGF0aWMgc3RydWN0IHZmaW9fcGNpX2RyaXZlcl9vcHMgKmRyaXZlcl9vcHNbXSA9IHtcbiAjaWZkZWYgX194ODZfNjRfX1xuIFx0XHUwMDI2ZHNhX29wcyxcbiBcdFx1MDAyNmlvYXRfb3BzLFxuK1x0XHUwMDI2aWdiX29wcyxcbiAjZW5kaWZcbiB9O1xuIFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTFUMTk6MTM6NDIuMTkzMTIzMTI3WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTEwMzIzNTc5NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipXb3J0aEZ1enppbmcgRGVjaXNpb24gZm9yIHZmaW8gc2VsZnRlc3RzKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBkcml2ZXIsIGBpZ2IuY2AsIGFuZCBtb2RpZmllcyBhIGZldyByZWxhdGVkIGZpbGVzIHdpdGhpbiB0aGUgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2RyaXZlcnMvaWdiL2AgYW5kIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9gIGRpcmVjdG9yaWVzLiAgQ3J1Y2lhbGx5LCBpdCdzIGFsbCBjb250YWluZWQgd2l0aGluIHRoZSBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9gIGRpcmVjdG9yeS4gVGhhdCBpbW1lZGlhdGVseSBmbGFncyB0aGlzIGFzIHNvbWV0aGluZyB0aGF0J3MgbGlrZWx5IG5vdCBwYXJ0IG9mIHRoZSBjb3JlIGtlcm5lbCBvciBkcml2ZXJzIEkgbmVlZCB0byB3b3JyeSBhYm91dCBpbiB0ZXJtcyBvZiBmdXp6aW5nLlxuXG5NeSBpbml0aWFsIHRob3VnaHQgaXMgc2VsZnRlc3RzIGFyZSBub3QgZnV6emVkIGJ5IHN5emthbGxlci4gIExldCBtZSBjb25maXJtIG5vIG90aGVyIGtlcm5lbCBjaGFuZ2VzIGFyZSBpbnRyb2R1Y2VkLiBOb3BlLCBpdCdzIHN0cmljdGx5IGNvbmZpbmVkIHRvIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2AuXG5cbk5vdywgbGV0IG1lIHJlY2FsbCB0aGUgcmVsZXZhbnQgcnVsZXMuICBUaGUgY3JpdGVyaWEgZm9yIHJldHVybmluZyBgV29ydGhGdXp6aW5nPWZhbHNlYCBjb3ZlciBkb2N1bWVudGF0aW9uLCBjb25maWd1cmF0aW9uIGZpbGVzLCBjb21tZW50cywgbG9nZ2luZywgYW5kIGNvbnN0YW50cy4gU2VsZnRlc3RzIGFyZW4ndCAqZXhwbGljaXRseSogbGlzdGVkLCBidXQgdGhlIHNwaXJpdCBvZiB0aGUgcnVsZSBpcyBjbGVhcjogaWYgaXQncyBub3QgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB0aGVuIGl0IHNob3VsZCBiZSBgZmFsc2VgLiAgVGhlIHJ1bGUgZXhwbGljaXRseSBzdGF0ZXMgdGhhdCBpZiB0aGUgY29kZSBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHRoZW4gaXQncyBgV29ydGhGdXp6aW5nPXRydWVgLlxuXG5TaW5jZSB0aGVzZSBtb2RpZmljYXRpb25zIGFyZSAqc29sZWx5KiB3aXRoaW4gYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vYCwgdGhleSBkb24ndCBpbXBhY3QgYW55IGNvcmUga2VybmVsIGNvZGUgdGhhdCdzIGRpcmVjdGx5IHJlYWNoYWJsZSBkdXJpbmcgbm9ybWFsIG9wZXJhdGlvbi4gIFRoZXkgYXJlLCBpbiBlc3NlbmNlLCBpc29sYXRlZC4gIEkndmUgZG91YmxlLWNoZWNrZWQgdGhlIHBhdGggb2YgdGhlIG1vZGlmaWVkIGZpbGVzLCBpbmNsdWRpbmcgdGhlIGhlYWRlcnMgYW5kIGJ1aWxkIGZpbGVzLCBzbyBJJ20gY29tcGxldGVseSBjb25maWRlbnQgaW4gdGhpcyBhc3Nlc3NtZW50LiAgTm8gcmVhY2hhYmxlIGtlcm5lbCBsb2dpYyBpcyBiZWluZyBhbHRlcmVkLlxuXG5MZXQgbWUgbWFrZSBhYnNvbHV0ZWx5IHN1cmUsIGhvd2V2ZXIuIEkganVzdCB2ZXJpZmllZCB0aGF0IG90aGVyIGZpbGVzIGFsc28gaW5jbHVkZSB0aGUgZm9sbG93aW5nIG1vZGlmaWNhdGlvbnM6XG5cbi0gYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2RyaXZlcnMvaWdiL2UxMDAwXzgyNTc1LmhgXG4tIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9kcml2ZXJzL2lnYi9lMTAwMF9kZWZpbmVzLmhgXG4tIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9kcml2ZXJzL2lnYi9lMTAwMF9yZWdzLmhgXG5cbkFsbCBmaWxlcyBhcmUgd2l0aGluIHRoZSBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9gIGRpcmVjdG9yeS5cblxuVGhlcmVmb3JlLCBteSBjb25jbHVzaW9uIGlzIGNsZWFyOiBiYXNlZCBvbiB0aGUgcnVsZXMgYW5kIHRoZSBjb25maW5lZCBzY29wZSBvZiB0aGUgY2hhbmdlcywgSSdsbCByZXR1cm4gYFdvcnRoRnV6emluZz1mYWxzZWAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExOTU5LCJPdXRwdXRUb2tlbnMiOjg5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzQyLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTFUMTk6MTM6NTEuMjk2MzYwNTIxWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMDQ5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW10sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIGNvZGUgaW4gdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby8sIHdoaWNoIGNvbnRhaW5zIHVzZXItc3BhY2Ugc2VsZnRlc3RzIGFuZCBkb2VzIG5vdCBhZmZlY3QgdGhlIGNvcmUga2VybmVsLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmUgY29kZS4gVGhlcmVmb3JlLCBpdCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgY2FuIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgY29kZSBpbiB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvLywgd2hpY2ggY29udGFpbnMgdXNlci1zcGFjZSBzZWxmdGVzdHMgYW5kIGRvZXMgbm90IGFmZmVjdCB0aGUgY29yZSBrZXJuZWwsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZSBjb2RlLiBUaGVyZWZvcmUsIGl0IGRvZXMgbm90IGludHJvZHVjZSBhbnkgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBjYW4gYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflow7t8z9[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-11 18:46:37 +0000 UTC FinishedAt: 2026-07-11 19:13:52 +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+CgkJCTx0ZD4yMDI2LzA3LzExIDE5OjEzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgY29kZSBpbiB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvLywgd2hpY2ggY29udGFpbnMgdXNlci1zcGFjZSBzZWxmdGVzdHMgYW5kIGRvZXMgbm90IGFmZmVjdCB0aGUgY29yZSBrZXJuZWwsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZSBjb2RlLiBUaGVyZWZvcmUsIGl0IGRvZXMgbm90IGludHJvZHVjZSBhbnkgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBjYW4gYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMSAxOToxMzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDMxMzdjMDMxOTlmNjQ3ZWZiNDNiYmJhZjgwNTM4NDRkMGNiNjAwZWRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU2F0IEp1bCAxMSAxOToxMzo0MCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9kcml2ZXJzL2lnYi9lMTAwMF84MjU3NS5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvZHJpdmVycy9pZ2IvZTEwMDBfODI1NzUuaFxubmV3IGZpbGUgbW9kZSAxMjAwMDBcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi5iODRhZmZkZWM1NTk4ZVxuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvZHJpdmVycy9pZ2IvZTEwMDBfODI1NzUuaFxuQEAgLTAsMCAmIzQzOzEgQEBcbiYjNDM7Li4vLi4vLi4vLi4vLi4vLi4vLi4vZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWdiL2UxMDAwXzgyNTc1LmhcblxcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGVcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9kcml2ZXJzL2lnYi9lMTAwMF9kZWZpbmVzLmggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9kcml2ZXJzL2lnYi9lMTAwMF9kZWZpbmVzLmhcbm5ldyBmaWxlIG1vZGUgMTIwMDAwXG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uOWY5N2Y0MzMwMDg2NmRcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2RyaXZlcnMvaWdiL2UxMDAwX2RlZmluZXMuaFxuQEAgLTAsMCAmIzQzOzEgQEBcbiYjNDM7Li4vLi4vLi4vLi4vLi4vLi4vLi4vZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWdiL2UxMDAwX2RlZmluZXMuaFxuXFwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2RyaXZlcnMvaWdiL2UxMDAwX3JlZ3MuaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2RyaXZlcnMvaWdiL2UxMDAwX3JlZ3MuaFxubmV3IGZpbGUgbW9kZSAxMjAwMDBcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi5jNzMzNjM0MTcxYmIxM1xuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvZHJpdmVycy9pZ2IvZTEwMDBfcmVncy5oXG5AQCAtMCwwICYjNDM7MSBAQFxuJiM0MzsuLi8uLi8uLi8uLi8uLi8uLi8uLi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZ2IvZTEwMDBfcmVncy5oXG5cXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvZHJpdmVycy9pZ2IvaWdiLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9kcml2ZXJzL2lnYi9pZ2IuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi4yMDZhMWU2NDg5YzIxY1xuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvZHJpdmVycy9pZ2IvaWdiLmNcbkBAIC0wLDAgJiM0MzsxLDU1NCBAQFxuJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4mIzQzOyNpbmNsdWRlIFx1MDAzY3VuaXN0ZC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2Vycm5vLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjc3RkaW50LmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvaW8uaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9wY2lfcmVncy5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3BjaV9pZHMuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9rZXJuZWwuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9jb21waWxlci5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2FzbS9iYXJyaWVyLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvbWlpLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGlidmZpby92ZmlvX3BjaV9kZXZpY2UuaFx1MDAzZVxuJiM0MztcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7ZTEwMDBfcmVncy5oXCYjMzQ7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O2UxMDAwX2RlZmluZXMuaFwmIzM0O1xuJiM0MzsjaW5jbHVkZSBcJiMzNDtlMTAwMF84MjU3NS5oXCYjMzQ7XG4mIzQzO1xuJiM0MzsjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfODI1NzYgMHgxMEM5XG4mIzQzOyNkZWZpbmUgSUdCX01BWF9DSFVOS19TSVpFIDEwMjRcbiYjNDM7I2RlZmluZSBNU0lYX1ZFQ1RPUiAwXG4mIzQzOyNkZWZpbmUgUklOR19TSVpFIDQwOTYgLyogTnVtYmVyIG9mIGRlc2NyaXB0b3JzIGluIHJpbmcgKi9cbiYjNDM7XG4mIzQzO3N0cnVjdCBpZ2JfdHhfZGVzYyB7XG4mIzQzO1x0dW5pb24ge1xuJiM0MztcdFx0c3RydWN0IHtcbiYjNDM7XHRcdFx0dTY0IGJ1ZmZlcl9hZGRyOyAvKiBBZGRyZXNzIG9mIGRlc2NyaXB0b3ImIzM5O3MgZGF0YSBidWZmZXIgKi9cbiYjNDM7XHRcdFx0dTMyIGNtZF90eXBlX2xlbjsgLyogQ29tbWFuZC9UeXBlL0xlbmd0aCAqL1xuJiM0MztcdFx0XHR1MzIgb2xpbmZvX3N0YXR1czsgLyogQ29udGV4dC9CdWZmZXIgaW5mbyAqL1xuJiM0MztcdFx0fSByZWFkO1xuJiM0MztcbiYjNDM7XHRcdHN0cnVjdCB7XG4mIzQzO1x0XHRcdHU2NCByc3ZkOyAgICAgICAgLyogUmVzZXJ2ZWQgKi9cbiYjNDM7XHRcdFx0dTMyIG54dHNlcV9zZWVkOyAvKiBOZXh0IHNlcXVlbmNlIHNlZWQgKi9cbiYjNDM7XHRcdFx0dTMyIHN0YXR1czsgICAgICAvKiBEZXNjcmlwdG9yIHN0YXR1cyAqL1xuJiM0MztcdFx0fSB3YjtcbiYjNDM7XHR9O1xuJiM0Mzt9O1xuJiM0MztcbiYjNDM7c3RydWN0IGlnYl9yeF9kZXNjIHtcbiYjNDM7XHR1bmlvbiB7XG4mIzQzO1x0XHRzdHJ1Y3Qge1xuJiM0MztcdFx0XHR1NjQgcGt0X2FkZHI7IC8qIFBhY2tldCBidWZmZXIgYWRkcmVzcyAqL1xuJiM0MztcdFx0XHR1NjQgaGRyX2FkZHI7IC8qIEhlYWRlciBidWZmZXIgYWRkcmVzcyAqL1xuJiM0MztcdFx0fSByZWFkO1xuJiM0MztcdFx0c3RydWN0IHtcbiYjNDM7XHRcdFx0dTE2IHBrdF9pbmZvOyAgICAgLyogUlNTIHR5cGUsIFBhY2tldCB0eXBlICovXG4mIzQzO1x0XHRcdHUxNiBoZHJfaW5mbzsgICAgIC8qIFNwbGl0IEhlYWQsIGJ1ZiBsZW4gKi9cbiYjNDM7XHRcdFx0dTMyIHJzczsgICAgICAgICAgLyogUlNTIEhhc2ggKi9cbiYjNDM7XHRcdFx0dTMyIHN0YXR1c19lcnJvcjsgLyogZXh0IHN0YXR1cy9lcnJvciAqL1xuJiM0MztcdFx0XHR1MTYgbGVuZ3RoOyAgICAgICAvKiBQYWNrZXQgbGVuZ3RoICovXG4mIzQzO1x0XHRcdHUxNiB2bGFuOyAgICAgICAgIC8qIFZMQU4gdGFnICovXG4mIzQzO1x0XHR9IHdiOyAvKiB3cml0ZWJhY2sgKi9cbiYjNDM7XHR9O1xuJiM0Mzt9O1xuJiM0MztcbiYjNDM7c3RydWN0IGlnYiB7XG4mIzQzO1x0dm9pZCAqYmFyMDtcbiYjNDM7XHR1MzIgdHhfdGFpbDtcbiYjNDM7XHR1MzIgcnhfdGFpbDtcbiYjNDM7XHRzdHJ1Y3QgaWdiX3R4X2Rlc2MgdHhfcmluZ1tSSU5HX1NJWkVdIF9fYXR0cmlidXRlX18oKGFsaWduZWQoMTI4KSkpO1xuJiM0MztcdHN0cnVjdCBpZ2JfcnhfZGVzYyByeF9yaW5nW1JJTkdfU0laRV0gX19hdHRyaWJ1dGVfXygoYWxpZ25lZCgxMjgpKSk7XG4mIzQzO307XG4mIzQzO1xuJiM0MztzdGF0aWMgaW5saW5lIHN0cnVjdCBpZ2IgKnRvX2lnYl9zdGF0ZShzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gKHN0cnVjdCBpZ2IgKilkZXZpY2UtXHUwMDNlZHJpdmVyLnJlZ2lvbi52YWRkcjtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGlubGluZSB2b2lkIGlnYl93cml0ZTMyKHN0cnVjdCBpZ2IgKmlnYiwgdTMyIHJlZywgdTMyIHZhbClcbiYjNDM7e1xuJiM0MztcdHdyaXRlbCh2YWwsIGlnYi1cdTAwM2ViYXIwICYjNDM7IHJlZyk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbmxpbmUgdTMyIGlnYl9yZWFkMzIoc3RydWN0IGlnYiAqaWdiLCB1MzIgcmVnKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIHJlYWRsKGlnYi1cdTAwM2ViYXIwICYjNDM7IHJlZyk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgaWdiX3dyaXRlX3BoeShzdHJ1Y3QgaWdiICppZ2IsIHUzMiBvZmZzZXQsIHUxNiBkYXRhKVxuJiM0Mzt7XG4mIzQzO1x0dTMyIG1kaWM7XG4mIzQzO1x0aW50IGk7XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogV3JpdGUgYSBQSFkgcmVnaXN0ZXIgb3ZlciBNRElPLlxuJiM0MztcdCAqXG4mIzQzO1x0ICogQSBwcm9kdWN0aW9uIGRyaXZlciB3b3VsZCBob2xkIHRoZSBTVy9GVyBzZW1hcGhvcmUgKFNXU00uU1dFU01CSSAmIzQzOyB0aGVcbiYjNDM7XHQgKiBTV19GV19TWU5DIFBIWSBiaXQpIGFjcm9zcyB0aGUgTURJTyB0cmFuc2FjdGlvbiB0byBzZXJpYWxpemUgYWdhaW5zdCB0aGVcbiYjNDM7XHQgKiBkZXZpY2UmIzM5O3MgbWFuYWdlbWVudCBmaXJtd2FyZS4gIFRoZSBzZWxmdGVzdCBvd25zIHRoZSBhc3NpZ25lZCBmdW5jdGlvblxuJiM0MztcdCAqIGV4Y2x1c2l2ZWx5IG9uIGEgZGVkaWNhdGVkIHRlc3QgZGV2aWNlIHdpdGggbm8gYWN0aXZlIG1hbmFnZWFiaWxpdHlcbiYjNDM7XHQgKiBjb250ZW5kaW5nIGZvciB0aGUgUEhZLCBzbyB0aGUgc3luYyBpcyBvbWl0dGVkOyBpdCBzaG91bGQgYmUgYWRkZWQgaGVyZVxuJiM0MztcdCAqIGlmIHRoaXMgZXZlciBuZWVkcyB0byBydW4gb24gYSBtYW5hZ2VhYmlsaXR5LWVuYWJsZWQgTklDLlxuJiM0MztcdCAqL1xuJiM0MztcdG1kaWMgPSAoKCh1MzIpZGF0YSkgfFxuJiM0MztcdFx0KG9mZnNldCBcdTAwM2NcdTAwM2MgRTEwMDBfTURJQ19SRUdfU0hJRlQpIHxcbiYjNDM7XHRcdCgxIFx1MDAzY1x1MDAzYyBFMTAwMF9NRElDX1BIWV9TSElGVCkgfFxuJiM0MztcdFx0RTEwMDBfTURJQ19PUF9XUklURSk7XG4mIzQzO1xuJiM0MztcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfTURJQywgbWRpYyk7XG4mIzQzO1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIDEwMDA7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHR1c2xlZXAoNTApO1xuJiM0MztcdFx0bWRpYyA9IGlnYl9yZWFkMzIoaWdiLCBFMTAwMF9NRElDKTtcbiYjNDM7XHRcdGlmIChtZGljIFx1MDAyNiBFMTAwMF9NRElDX1JFQURZKVxuJiM0MztcdFx0XHRicmVhaztcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmICghKG1kaWMgXHUwMDI2IEUxMDAwX01ESUNfUkVBRFkpKVxuJiM0MztcdFx0cmV0dXJuIC0xO1xuJiM0MztcbiYjNDM7XHRpZiAobWRpYyBcdTAwMjYgRTEwMDBfTURJQ19FUlJPUilcbiYjNDM7XHRcdHJldHVybiAtMTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qXG4mIzQzOyAqIENvbmZpZ3VyZSB0aGUgZGV2aWNlIGZvciBQSFkgaW50ZXJuYWwgbG9vcGJhY2sgcGVyIDgyNTc2IGRhdGFzaGVldFxuJiM0MzsgKiBzZWN0aW9uIDMuNS42LjMuMS4gIEZvcmNlIHRoZSBQSFkgdG8gMUdiL3MgZnVsbCBkdXBsZXggd2l0aCBsb29wYmFja1xuJiM0MzsgKiBlbmFibGVkLCB0aGVuIGZvcmNlIHRoZSBNQUMgbGluayBzdGF0ZSB0byBtYXRjaC4gIEludGVybmFsIGxvb3BiYWNrXG4mIzQzOyAqIHdyYXBzIGRhdGEgYXQgdGhlIGVuZCBvZiB0aGUgUEhZIGRhdGFwYXRoIChzZWN0aW9uIDMuNS42LjMpLCBzbyB0aGVcbiYjNDM7ICogcGh5c2ljYWwgbGluayBzdGF0ZSBpcyBpcnJlbGV2YW50LlxuJiM0MzsgKlxuJiM0MzsgKiBTZWN0aW9uIDMuNS42LjEgZGlyZWN0cyB0byBcJiMzNDtVc2UgUEhZIExvb3BiYWNrIGluc3RlYWQgb2YgTUFDIExvb3BiYWNrXG4mIzQzOyAqIG9uIHRoZSA4MjU3NlwmIzM0OywgYW5kIHNlY3Rpb24gMy41LjYuMiBzdGF0ZXMgXCYjMzQ7TUFDIExvb3BiYWNrIGlzIG5vdCB1c2VkXG4mIzQzOyAqIG9uIHRoaXMgZGV2aWNlLlwmIzM0OyAgUkNUTC5MQk1fTUFDIGlzIHN0aWxsIHNldCBlbHNld2hlcmUgYXMgYSBRRU1VLW9ubHlcbiYjNDM7ICogYWNjb21tb2RhdGlvbjsgc2VlIHRoZSBSQ1RMIHByb2dyYW1taW5nIGluIHRoZSBjYWxsZXIgZm9yIHRoZVxuJiM0MzsgKiByYXRpb25hbGUuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgdm9pZCBpZ2Jfc2V0dXBfbG9vcGJhY2soc3RydWN0IGlnYiAqaWdiKVxuJiM0Mzt7XG4mIzQzO1x0dTMyIGN0cmw7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBLaWNrIHRoZSBhdXRvbmVnIG1hY2hpbmVyeSBzb2xlbHkgdG8gYnJpbmcgU1RBVFVTLkxVIHVwIHVuZGVyXG4mIzQzO1x0ICogUUVNVSYjMzk7cyBpZ2IgZW11bGF0aW9uOiBRRU1VIG9ubHkgdXBkYXRlcyBTVEFUVVMuTFUgdmlhIGl0c1xuJiM0MztcdCAqIGF1dG9uZWctZG9uZSB0aW1lciwgYW5kIHdpdGhvdXQgTFUgc2V0IGl0cyByZWNlaXZlIHBhdGhcbiYjNDM7XHQgKiAoZTEwMDB4X2h3X3J4X2VuYWJsZWQpIGRyb3BzIGV2ZXJ5IGxvb3BiYWNrIGZyYW1lLiAgT24gcmVhbFxuJiM0MztcdCAqIGhhcmR3YXJlIGF1dG9uZWcgY2Fubm90IGNvbXBsZXRlIGJlZm9yZSB0aGUgbmV4dCBQSFkgd3JpdGVcbiYjNDM7XHQgKiBiZWxvdyBjbGVhcnMgdGhlIGF1dG9uZWctZW5hYmxlIGJpdCwgc28gdGhpcyBpcyBlZmZlY3RpdmVseSBhXG4mIzQzO1x0ICogbm8tb3AgdGhlcmUuXG4mIzQzO1x0ICovXG4mIzQzO1x0KHZvaWQpaWdiX3dyaXRlX3BoeShpZ2IsIE1JSV9CTUNSLFxuJiM0MztcdFx0XHQgICAgQk1DUl9BTkVOQUJMRSB8IEJNQ1JfQU5SRVNUQVJUKTtcbiYjNDM7XG4mIzQzO1x0LyogUEhZIGNvbnRyb2w6IGxvb3BiYWNrICYjNDM7IDFHYi9zIGZ1bGwgZHVwbGV4LCBhdXRvbmVnIGRpc2FibGVkLiAqL1xuJiM0MztcdHJldCA9IGlnYl93cml0ZV9waHkoaWdiLCBNSUlfQk1DUixcbiYjNDM7XHRcdFx0ICAgIEJNQ1JfTE9PUEJBQ0sgfFxuJiM0MztcdFx0XHQgICAgQk1DUl9TUEVFRDEwMDAgfFxuJiM0MztcdFx0XHQgICAgQk1DUl9GVUxMRFBMWCk7XG4mIzQzO1x0VkZJT19BU1NFUlRfRVEocmV0LCAwLCBcJiMzNDtGYWlsZWQgdG8gd3JpdGUgUEhZIGNvbnRyb2wgcmVnaXN0ZXJcJiMzNDspO1xuJiM0MztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIEJyaWVmIGRlbGF5IGJlZm9yZSBmb3JjaW5nIHRoZSBNQUMsIG1pcnJvcmluZyB0aGUga2VybmVsIGV0aHRvb2xcbiYjNDM7XHQgKiBzZWxmdGVzdCBpbiBpZ2JfaW50ZWdyYXRlZF9waHlfbG9vcGJhY2soKS4gIE5vdCBzcGVjaWZpZWQgYnkgdGhlXG4mIzQzO1x0ICogZGF0YXNoZWV0LCBidXQgZW1waXJpY2FsbHkgcmVxdWlyZWQgYnkgdGhlIGtlcm5lbCBkcml2ZXIuXG4mIzQzO1x0ICovXG4mIzQzO1x0dXNsZWVwKDUwMDAwKTtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBGb3JjZSB0aGUgTUFDIHRvIDFHYi9zIGZ1bGwgZHVwbGV4IHdpdGggbGluayB1cC4gIFdpdGhvdXQgZm9yY2luZ1xuJiM0MztcdCAqIHRoZSBsaW5rIHN0YXRlIHRoZSBkZXNjcmlwdG9yIGVuZ2luZSBkb2VzIG5vdCBydW4sIHNpbmNlIHRoZSBjaGlwXG4mIzQzO1x0ICogbm9ybWFsbHkgd2FpdHMgZm9yIGEgcmVhbCBuZWdvdGlhdGVkIGxpbmsuXG4mIzQzO1x0ICovXG4mIzQzO1x0Y3RybCA9IGlnYl9yZWFkMzIoaWdiLCBFMTAwMF9DVFJMKTtcbiYjNDM7XHRjdHJsIFx1MDAyNj0gfkUxMDAwX0NUUkxfU1BEX1NFTDtcbiYjNDM7XHRjdHJsIHw9IEUxMDAwX0NUUkxfRlJDU1BEIHxcbiYjNDM7XHRcdEUxMDAwX0NUUkxfRlJDRFBYIHxcbiYjNDM7XHRcdEUxMDAwX0NUUkxfU1BEXzEwMDAgfFxuJiM0MztcdFx0RTEwMDBfQ1RSTF9GRCB8XG4mIzQzO1x0XHRFMTAwMF9DVFJMX1NMVTtcbiYjNDM7XHRpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX0NUUkwsIGN0cmwpO1xuJiM0MztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIFNldHRsaW5nIGRlbGF5IG1hdGNoaW5nIHRoZSBrZXJuZWwgZXRodG9vbCBzZWxmdGVzdCYjMzk7cyBtc2xlZXAoNTAwKVxuJiM0MztcdCAqIGF0IHRoZSB0YWlsIG9mIGlnYl9pbnRlZ3JhdGVkX3BoeV9sb29wYmFjaygpLiAgTm90IHNwZWNpZmllZCBieVxuJiM0MztcdCAqIHRoZSBkYXRhc2hlZXQ7IGVtcGlyaWNhbCwgYW5kIGluaGVyaXRlZCBmcm9tIHRoZSBrZXJuZWwgZHJpdmVyLlxuJiM0MztcdCAqL1xuJiM0MztcdHVzbGVlcCg1MDAwMDApO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IGlnYl9wcm9iZShzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UpXG4mIzQzO3tcbiYjNDM7XHRpZiAoIXZmaW9fcGNpX2RldmljZV9tYXRjaChkZXZpY2UsIFBDSV9WRU5ET1JfSURfSU5URUwsIFBDSV9ERVZJQ0VfSURfSU5URUxfODI1NzYpKVxuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKlxuJiM0MzsgKiBQcm9ncmFtIHRoZSBkZXZpY2UgaW50byBhIHVzYWJsZSBzdGF0ZS4gIFNwbGl0IG91dCBvZiBpZ2JfaW5pdCgpIHNvIGl0XG4mIzQzOyAqIGNhbiBiZSByZXVzZWQgYWZ0ZXIgYSBkZXZpY2UgcmVzZXQgdG8gcmUtcHJvZ3JhbSB0aGUgcmVnaXN0ZXJzIHRoYXRcbiYjNDM7ICogQ1RSTC5SU1QgY2xlYXJzLiAgRXhwZWN0cyBiYXIwIHRvIGJlIG1hcHBlZCBhbmQgTVNJLVggYWxyZWFkeSBlbmFibGVkXG4mIzQzOyAqIHZpYSBWRklPLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIHZvaWQgaWdiX2h3X2luaXQoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGlnYiAqaWdiID0gdG9faWdiX3N0YXRlKGRldmljZSk7XG4mIzQzO1x0dTY0IGlvdmFfdHgsIGlvdmFfcng7XG4mIzQzO1x0dTMyIGN0cmwsIHJjdGw7XG4mIzQzO1x0dTE2IGNtZF9yZWc7XG4mIzQzO1x0aW50IHJldHJpZXM7XG4mIzQzO1xuJiM0MztcdGlvdmFfdHggPSB0b19pb3ZhKGRldmljZSwgaWdiLVx1MDAzZXR4X3JpbmcpO1xuJiM0MztcdGlvdmFfcnggPSB0b19pb3ZhKGRldmljZSwgaWdiLVx1MDAzZXJ4X3JpbmcpO1xuJiM0MztcbiYjNDM7XHQvKiBTaWduYWwgdGhhdCB0aGUgZHJpdmVyIGlzIGxvYWRlZCAqL1xuJiM0MztcdGN0cmwgPSBpZ2JfcmVhZDMyKGlnYiwgRTEwMDBfQ1RSTF9FWFQpO1xuJiM0MztcdGN0cmwgfD0gRTEwMDBfQ1RSTF9FWFRfRFJWX0xPQUQ7XG4mIzQzO1x0Y3RybCBcdTAwMjY9IH5FMTAwMF9DVFJMX0VYVF9MSU5LX01PREVfTUFTSztcbiYjNDM7XHRpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX0NUUkxfRVhULCBjdHJsKTtcbiYjNDM7XG4mIzQzO1x0LyogRW5hYmxlIFBDSSBCdXMgTWFzdGVyLiAqL1xuJiM0MztcdGNtZF9yZWcgPSB2ZmlvX3BjaV9jb25maWdfcmVhZHcoZGV2aWNlLCBQQ0lfQ09NTUFORCk7XG4mIzQzO1x0aWYgKChjbWRfcmVnIFx1MDAyNiAoUENJX0NPTU1BTkRfTUFTVEVSIHwgUENJX0NPTU1BTkRfTUVNT1JZKSkgIT1cbiYjNDM7XHQgICAgKFBDSV9DT01NQU5EX01BU1RFUiB8IFBDSV9DT01NQU5EX01FTU9SWSkpIHtcbiYjNDM7XHRcdGNtZF9yZWcgfD0gKFBDSV9DT01NQU5EX01BU1RFUiB8IFBDSV9DT01NQU5EX01FTU9SWSk7XG4mIzQzO1x0XHR2ZmlvX3BjaV9jb25maWdfd3JpdGV3KGRldmljZSwgUENJX0NPTU1BTkQsIGNtZF9yZWcpO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBEaXNhYmxlIERNQSByZS1zZW5kIG9uIFBDSWUgY29tcGxldGlvbiB0aW1lb3V0ICg4MjU3NiBkYXRhc2hlZXRcbiYjNDM7XHQgKiBzZWN0aW9uIDguNi4xLCBHQ1IuQ29tcGxldGlvbl9UaW1lb3V0X1Jlc2VuZCwgYml0IDE2KS4gIFRoZVxuJiM0MztcdCAqIG1peF9hbmRfbWF0Y2ggdGVzdCBpbnRlbnRpb25hbGx5IHN1Ym1pdHMgZGVzY3JpcHRvcnMgdGFyZ2V0aW5nXG4mIzQzO1x0ICogdW5tYXBwZWQgSU9WQXM7IHdpdGggdGhlIGRlZmF1bHQgKHNldCkgdmFsdWUsIHRoZSBkZXZpY2Uga2VlcHNcbiYjNDM7XHQgKiByZXRyeWluZyB0aGUgZmFpbGVkIHJlYWQgaW5kZWZpbml0ZWx5LCB3aGljaCBrZWVwcyBQQ0llIEFFUiBhbmRcbiYjNDM7XHQgKiBJT01NVSBlcnJvciBoYW5kbGluZyBidXN5IGFuZCBpbnRlcmZlcmVzIHdpdGggcmVzZXQgcmVjb3ZlcnkuXG4mIzQzO1x0ICovXG4mIzQzO1x0Y3RybCA9IGlnYl9yZWFkMzIoaWdiLCBFMTAwMF9HQ1IpO1xuJiM0MztcdGN0cmwgXHUwMDI2PSB+RTEwMDBfR0NSX0NNUExfVE1PVVRfUkVTRU5EO1xuJiM0MztcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfR0NSLCBjdHJsKTtcbiYjNDM7XG4mIzQzO1x0LyogQ29uZmlndXJlIFBIWSBpbnRlcm5hbCBsb29wYmFjayBmb3IgdGVzdGluZy4gKi9cbiYjNDM7XHRpZ2Jfc2V0dXBfbG9vcGJhY2soaWdiKTtcbiYjNDM7XG4mIzQzO1x0LyogQ29uZmlndXJlIFRYIGFuZCBSWCBkZXNjcmlwdG9yIHJpbmdzICovXG4mIzQzO1x0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9UREJBTCgwKSwgKHUzMilpb3ZhX3R4KTtcbiYjNDM7XHRpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX1REQkFIKDApLCAodTMyKShpb3ZhX3R4IFx1MDAzZVx1MDAzZSAzMikpO1xuJiM0MztcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfVERMRU4oMCksIFJJTkdfU0laRSAqIHNpemVvZihzdHJ1Y3QgaWdiX3R4X2Rlc2MpKTtcbiYjNDM7XHRpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX1RESCgwKSwgMCk7XG4mIzQzO1x0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9URFQoMCksIDApO1xuJiM0MztcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfVFhEQ1RMKDApLCBFMTAwMF9UWERDVExfUVVFVUVfRU5BQkxFKTtcbiYjNDM7XG4mIzQzO1x0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9SREJBTCgwKSwgKHUzMilpb3ZhX3J4KTtcbiYjNDM7XHRpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX1JEQkFIKDApLCAodTMyKShpb3ZhX3J4IFx1MDAzZVx1MDAzZSAzMikpO1xuJiM0MztcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfUkRMRU4oMCksIFJJTkdfU0laRSAqIHNpemVvZihzdHJ1Y3QgaWdiX3J4X2Rlc2MpKTtcbiYjNDM7XHRpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX1JESCgwKSwgMCk7XG4mIzQzO1x0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9SRFQoMCksIDApO1xuJiM0MztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIFNlbGVjdCB0aGUgYWR2YW5jZWQgb25lLWJ1ZmZlciBkZXNjcmlwdG9yIGZvcm1hdC4gIFBlciA4MjU3NlxuJiM0MztcdCAqIGRhdGFzaGVldCBzZWN0aW9uIDcuMS41LjI6IFwmIzM0O1NSUkNUTFtuXS5ERVNDVFlQRSBtdXN0IGJlIHNldCB0byBhXG4mIzQzO1x0ICogdmFsdWUgb3RoZXIgdGhhbiAwMDBiIGZvciB0aGUgODI1NzYgdG8gd3JpdGUgYmFjayB0aGUgc3BlY2lhbFxuJiM0MztcdCAqIGRlc2NyaXB0b3JzLlwmIzM0OyAgc3RydWN0IGlnYl9yeF9kZXNjIG1hdGNoZXMgdGhlIGFkdmFuY2VkIG9uZS1idWZmZXJcbiYjNDM7XHQgKiB3cml0ZWJhY2sgbGF5b3V0IChzZWN0aW9uIDcuMS41LjIpLCBzbyBwb2xsaW5nIHJ4LndiLnN0YXR1c19lcnJvclxuJiM0MztcdCAqIHJlcXVpcmVzIHRoaXMgZm9ybWF0LiAgU2VjdGlvbiA4LjEwLjIgc3BlY2lmaWVzIERFU0NUWVBFWzI3OjI1XS5cbiYjNDM7XHQgKlxuJiM0MztcdCAqIFRoZSBkaXJlY3Qgd3JpdGUgYWxzbyB6ZXJvZXMgU1JSQ1RMLkJTSVpFUEFDS0VULCB3aGljaCBpc1xuJiM0MztcdCAqIGludGVudGlvbmFsOiBwZXIgc2VjdGlvbiA3LjEuMy4xIGEgemVybyBCU0laRVBBQ0tFVCBmYWxscyBiYWNrIHRvXG4mIzQzO1x0ICogdGhlIFJDVEwuQlNJWkUgYnVmZmVyIHNpemUsIHdob3NlIHJlc2V0IGRlZmF1bHQgKDAwYikgaXMgMjA0OFxuJiM0MztcdCAqIGJ5dGVzIC0tIGFtcGxlIGZvciB0aGUgbG9vcGJhY2sgZnJhbWVzIGhlcmUuXG4mIzQzO1x0ICovXG4mIzQzO1x0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9TUlJDVEwoMCksIEUxMDAwX1NSUkNUTF9ERVNDVFlQRV9BRFZfT05FQlVGKTtcbiYjNDM7XG4mIzQzO1x0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9SWERDVEwoMCksIEUxMDAwX1JYRENUTF9RVUVVRV9FTkFCTEUpO1xuJiM0MztcbiYjNDM7XHQvKiBXYWl0IGZvciBUWCBhbmQgUlggcXVldWVzIHRvIGJlIGVuYWJsZWQgKi9cbiYjNDM7XHRyZXRyaWVzID0gMjAwMDtcbiYjNDM7XHR3aGlsZSAocmV0cmllcy0tIFx1MDAzZSAwKSB7XG4mIzQzO1x0XHRpZiAoKGlnYl9yZWFkMzIoaWdiLCBFMTAwMF9UWERDVEwoMCkpIFx1MDAyNiBFMTAwMF9UWERDVExfUVVFVUVfRU5BQkxFKSBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdCAgICAoaWdiX3JlYWQzMihpZ2IsIEUxMDAwX1JYRENUTCgwKSkgXHUwMDI2IEUxMDAwX1JYRENUTF9RVUVVRV9FTkFCTEUpKVxuJiM0MztcdFx0XHRicmVhaztcbiYjNDM7XHRcdHVzbGVlcCgxMCk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIEVuYWJsZSBSZWNlaXZlciBhbmQgVHJhbnNtaXR0ZXIuICBSQ1RMLkxCTV9NQUMgaXMgc2V0IGluIGFkZGl0aW9uXG4mIzQzO1x0ICogdG8gUEhZIGxvb3BiYWNrIGFzIGEgUUVNVS1vbmx5IGFjY29tbW9kYXRpb246IFFFTVUmIzM5O3MgZW11bGF0ZWQgaWdiXG4mIzQzO1x0ICogZG9lcyBub3QgaG9ub3IgUEhZIHJlZ2lzdGVyIDAgYml0IDE0IChQSFkgaW50ZXJuYWwgbG9vcGJhY2spIGFuZFxuJiM0MztcdCAqIHJlbGllcyBvbiBSQ1RMLkxCTV9NQUMgdG8gd3JhcCBUWCBkZXNjcmlwdG9ycyBiYWNrIHRvIHRoZSBSWFxuJiM0MztcdCAqIHF1ZXVlLiAgRGF0YXNoZWV0IDguMTAuMSAoUkNUTCByZWdpc3RlcikgYWR2aXNlcyBcJiMzNDtXaGVuIHVzaW5nIHRoZVxuJiM0MztcdCAqIGludGVybmFsIFBIWSwgTEJNIHNob3VsZCByZW1haW4gc2V0IHRvIDAwYlwmIzM0Oywgc28gc2V0dGluZyBMQk1fTUFDXG4mIzQzO1x0ICogaGVyZSBkZXZpYXRlcyBmcm9tIGRhdGFzaGVldCBndWlkYW5jZTsgZW1waXJpY2FsbHkgdGhlIGJpdCBoYXNcbiYjNDM7XHQgKiBubyBvYnNlcnZhYmxlIGVmZmVjdCBvbiByZWFsIDgyNTc2IGhhcmR3YXJlIGJlY2F1c2UgTUFDIGxvb3BiYWNrXG4mIzQzO1x0ICogaXMgbm90IGltcGxlbWVudGVkIChkYXRhc2hlZXQgMy41LjYuMikuICBTZXR0aW5nIGJvdGggbGV0cyB0aGVcbiYjNDM7XHQgKiBzZWxmdGVzdCB3b3JrIG9uIGJvdGggcmVhbCBoYXJkd2FyZSBhbmQgUUVNVSB3aXRob3V0IGNvbmRpdGlvbmFsXG4mIzQzO1x0ICogY29kZSBwYXRocy5cbiYjNDM7XHQgKi9cbiYjNDM7XHRyY3RsID0gRTEwMDBfUkNUTF9FTiB8ICAgICAgIC8qIFJlY2VpdmVyIEVuYWJsZSAqL1xuJiM0MztcdCAgICAgICBFMTAwMF9SQ1RMX1VQRSB8ICAgICAgLyogVW5pY2FzdCBQcm9taXNjdW91cyAoZm9yIGR1bW15IE1BQykgKi9cbiYjNDM7XHQgICAgICAgRTEwMDBfUkNUTF9MQk1fTUFDIHwgIC8qIE1BQyBMb29wYmFjayAtIGZvciBRRU1VIGVtdWxhdGlvbiBvbmx5ICovXG4mIzQzO1x0ICAgICAgIEUxMDAwX1JDVExfU0VDUkM7ICAgICAvKiBTdHJpcCBDUkMgKG5lZWRlZCBmb3IgbWVtY21wKSAqL1xuJiM0MztcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfUkNUTCwgcmN0bCk7XG4mIzQzO1x0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9UQ1RMLCBFMTAwMF9UQ1RMX0VOKTtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBQcm9ncmFtIE1TSS1YIGludGVycnVwdCByb3V0aW5nIHBlciA4MjU3NiBkYXRhc2hlZXQ6XG4mIzQzO1x0ICpcbiYjNDM7XHQgKiBHUElFIChzZWN0aW9uIDcuMy4yLjExLCBUYWJsZSA3LTQ3KTogc2V0IE11bHRpcGxlX01TSVggKGJpdCA0KSB0b1xuJiM0MztcdCAqIHJvdXRlIGludGVycnVwdCBjYXVzZXMgdGhyb3VnaCBJVkFSIG1hcHBpbmcsIGFuZCBFSUFNRSAoYml0IDMwKVxuJiM0MztcdCAqIHRvIGFwcGx5IEVJQU0gb24gTVNJLVggYXNzZXJ0aW9uICh3aXRob3V0IEVJQU1FLCBFSUFNIG9ubHlcbiYjNDM7XHQgKiBhcHBsaWVzIG9uIEVJQ1IgcmVhZC93cml0ZSkuXG4mIzQzO1x0ICpcbiYjNDM7XHQgKiBFSUFDIChzZWN0aW9uIDguOC41KTogZW5hYmxlIGF1dG8tY2xlYXIgb2YgRUlDUiBmb3IgdmVjdG9yIDAuXG4mIzQzO1x0ICogV2l0aG91dCBhdXRvLWNsZWFyIHRoZSBjYXVzZSBzdGF5cyBzZXQgYWZ0ZXIgZGVsaXZlcnkgYW5kIHRoZVxuJiM0MztcdCAqIHRlc3QgY2FuIHNlZSBzcHVyaW91cyBpbnRlcnJ1cHRzIG9uIHRoZSBuZXh0IG1lbWNweSBiYXRjaC5cbiYjNDM7XHQgKlxuJiM0MztcdCAqIEVJQU0gKHNlY3Rpb24gOC44LjYpOiBlbmFibGUgYXV0by1tYXNrIG9mIEVJTVMgZm9yIHZlY3RvciAwIG9uXG4mIzQzO1x0ICogTVNJLVggYXNzZXJ0aW9uIChlZmZlY3RpdmUgYmVjYXVzZSBFSUFNRSBpcyBzZXQpLCBzbyBhIHNpbmdsZVxuJiM0MztcdCAqIGludGVycnVwdCBpcyBkZWxpdmVyZWQgcGVyIG1lbWNweSBiYXRjaCBldmVuIGlmIHRoZSBjYXVzZVxuJiM0MztcdCAqIHJlLWFzc2VydHMgYmVmb3JlIHNvZnR3YXJlIHJlLWVuYWJsZXMgdGhlIG1hc2suXG4mIzQzO1x0ICpcbiYjNDM7XHQgKiBJVkFSIChzZWN0aW9uIDcuMy4xLjIsIHJlZ2lzdGVyIGRlZmluaXRpb24gaW4gOC44LjEzKTogbWFwIFJYXG4mIzQzO1x0ICogY2F1c2UgMCB0byBNU0ktWCB2ZWN0b3IgMCBhbmQgbWFyayB0aGUgZW50cnkgdmFsaWQuXG4mIzQzO1x0ICovXG4mIzQzO1x0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9HUElFLCBFMTAwMF9HUElFX01TSVhfTU9ERSB8IEUxMDAwX0dQSUVfRUlBTUUpO1xuJiM0MztcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfRUlBQywgRTEwMDBfRUlDUl9SWF9RVUVVRTApO1xuJiM0MztcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfRUlBTSwgRTEwMDBfRUlDUl9SWF9RVUVVRTApO1xuJiM0MztcbiYjNDM7XHQvKiBNYXAgdmVjdG9yIDAgdG8gaW50ZXJydXB0IGNhdXNlIDAgYW5kIG1hcmsgaXQgdmFsaWQgKi9cbiYjNDM7XHRpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX0lWQVIwLCBFMTAwMF9JVkFSX1ZBTElEKTtcbiYjNDM7XG4mIzQzO1x0LyogRW5hYmxlIGludGVycnVwdHMgb24gdmVjdG9yIDAgKi9cbiYjNDM7XHRpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX0VJTVMsIEUxMDAwX0VJQ1JfUlhfUVVFVUUwKTtcbiYjNDM7XG4mIzQzO1x0LyogSW5pdGlhbGl6ZSBkcml2ZXIgc3RhdGUgYW5kIGNhcGFiaWxpdHkgbGltaXRzICovXG4mIzQzO1x0aWdiLVx1MDAzZXR4X3RhaWwgPSAwO1xuJiM0MztcdGlnYi1cdTAwM2VyeF90YWlsID0gMDtcbiYjNDM7XG4mIzQzO1x0ZGV2aWNlLVx1MDAzZWRyaXZlci5tYXhfbWVtY3B5X3NpemUgPSBJR0JfTUFYX0NIVU5LX1NJWkU7XG4mIzQzO1x0ZGV2aWNlLVx1MDAzZWRyaXZlci5tYXhfbWVtY3B5X2NvdW50ID0gUklOR19TSVpFIC0gMTtcbiYjNDM7XHRkZXZpY2UtXHUwMDNlZHJpdmVyLm1zaSA9IE1TSVhfVkVDVE9SO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBpZ2JfaW5pdChzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgaWdiICppZ2IgPSB0b19pZ2Jfc3RhdGUoZGV2aWNlKTtcbiYjNDM7XG4mIzQzO1x0VkZJT19BU1NFUlRfR0UoZGV2aWNlLVx1MDAzZWRyaXZlci5yZWdpb24uc2l6ZSwgc2l6ZW9mKHN0cnVjdCBpZ2IpKTtcbiYjNDM7XG4mIzQzO1x0aWdiLVx1MDAzZWJhcjAgPSBkZXZpY2UtXHUwMDNlYmFyc1swXS52YWRkcjtcbiYjNDM7XG4mIzQzO1x0LyogUmVzZXQgZGV2aWNlIGFuZCBkaXNhYmxlIGFsbCBpbnRlcnJ1cHRzLiAqL1xuJiM0MztcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfQ1RSTCwgaWdiX3JlYWQzMihpZ2IsIEUxMDAwX0NUUkwpIHwgRTEwMDBfQ1RSTF9SU1QpO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogTXVzdCB3YWl0IGF0IGxlYXN0IDEgbWlsbGlzZWNvbmQgYWZ0ZXIgc2V0dGluZyB0aGUgcmVzZXQgYml0IGJlZm9yZVxuJiM0MztcdCAqIGNoZWNraW5nIGlmIHRoaXMgZGV2aWNlIGlzIHJlYWR5IHRvIGJlIHVzZWQgKDgyNTc2IGRhdGFzaGVldCBzZWN0aW9uXG4mIzQzO1x0ICogNC4yLjEuNi4xKS5cbiYjNDM7XHQgKi9cbiYjNDM7XHR1c2xlZXAoMTAwMCk7XG4mIzQzO1x0d2hpbGUgKGlnYl9yZWFkMzIoaWdiLCBFMTAwMF9DVFJMKSBcdTAwMjYgRTEwMDBfQ1RSTF9SU1QpXG4mIzQzO1x0XHR1c2xlZXAoMTApO1xuJiM0MztcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfSU1DLCAweEZGRkZGRkZGKTtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBFbmFibGUgTVNJLVggdmlhIFZGSU8gYmVmb3JlIGRldmljZS1zaWRlIHJlZ2lzdGVyIHByb2dyYW1taW5nLlxuJiM0MztcdCAqIHZmaW9fcGNpX21zaXhfZW5hYmxlKCkgb25seSB0b3VjaGVzIHRoZSBWRklPIElSUSBtYWNoaW5lcnkgYW5kIHRoZVxuJiM0MztcdCAqIFBDSSBNU0ktWCBjYXBhYmlsaXR5IHZpYSBjb25maWcgc3BhY2U7IGl0IGhhcyBubyBvcmRlcmluZ1xuJiM0MztcdCAqIGRlcGVuZGVuY3kgb24gdGhlIGRldmljZS1zaWRlIHdyaXRlcyBwZXJmb3JtZWQgYnkgaWdiX2h3X2luaXQoKS5cbiYjNDM7XHQgKiBQbGFjaW5nIGl0IGhlcmUga2VlcHMgaWdiX2h3X2luaXQoKSByZXVzYWJsZSBmcm9tIHRoZSByZXNldFxuJiM0MztcdCAqIHJlY292ZXJ5IHBhdGggKHdoaWNoIGNhbGxzIHZmaW9fcGNpX2lycV9yZWVuYWJsZSgpIGluc3RlYWQpLlxuJiM0MztcdCAqL1xuJiM0MztcdHZmaW9fcGNpX21zaXhfZW5hYmxlKGRldmljZSwgTVNJWF9WRUNUT1IsIDEpO1xuJiM0MztcbiYjNDM7XHRpZ2JfaHdfaW5pdChkZXZpY2UpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBpZ2JfcmVtb3ZlKHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBpZ2IgKmlnYiA9IHRvX2lnYl9zdGF0ZShkZXZpY2UpO1xuJiM0MztcbiYjNDM7XHR2ZmlvX3BjaV9tc2l4X2Rpc2FibGUoZGV2aWNlKTtcbiYjNDM7XHRpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX1JDVEwsIDApO1xuJiM0MztcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfVENUTCwgMCk7XG4mIzQzO1x0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9DVFJMLCBpZ2JfcmVhZDMyKGlnYiwgRTEwMDBfQ1RSTCkgfCBFMTAwMF9DVFJMX1JTVCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIGlnYl9pcnFfZGlzYWJsZShzdHJ1Y3QgaWdiICppZ2IpXG4mIzQzO3tcbiYjNDM7XHRpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX0VJTUMsIEUxMDAwX0VJQ1JfUlhfUVVFVUUwKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgaWdiX2lycV9lbmFibGUoc3RydWN0IGlnYiAqaWdiKVxuJiM0Mzt7XG4mIzQzO1x0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9FSU1TLCBFMTAwMF9FSUNSX1JYX1FVRVVFMCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIGlnYl9pcnFfY2xlYXIoc3RydWN0IGlnYiAqaWdiKVxuJiM0Mzt7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBVc2Ugd3JpdGUtdG8tY2xlYXIgKGRhdGFzaGVldCA3LjMuNC4yKS4gIEluIE1TSS1YIG1vZGUgd2l0aCBFSUFDXG4mIzQzO1x0ICogcHJvZ3JhbW1lZCwgc2VjdGlvbiA4LjguNSBleHBsaWNpdGx5IHN0YXRlcyBcJiMzNDtJZiBhbnkgYml0cyBhcmUgc2V0XG4mIzQzO1x0ICogaW4gRUlBQywgdGhlIEVJQ1IgcmVnaXN0ZXIgc2hvdWxkIG5vdCBiZSByZWFkXCYjMzQ7LCB3aGljaCBydWxlcyBvdXRcbiYjNDM7XHQgKiB0aGUgcmVhZC10by1jbGVhciBwYXRoIGluIDcuMy40LjMuICBCaXRzIG5vdCBpbiBFSUFDIGFyZSBzdGlsbFxuJiM0MztcdCAqIGNsZWFyZWQgYnkgd3JpdGluZyAxLlxuJiM0MztcdCAqL1xuJiM0MztcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfRUlDUiwgMHhGRkZGRkZGRik7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIGlnYl9tZW1jcHlfc3RhcnQoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlLCBpb3ZhX3Qgc3JjLFxuJiM0MztcdFx0XHQgICAgIGlvdmFfdCBkc3QsIHU2NCBzaXplLCB1NjQgY291bnQpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgaWdiICppZ2IgPSB0b19pZ2Jfc3RhdGUoZGV2aWNlKTtcbiYjNDM7XHRzdHJ1Y3QgaWdiX3J4X2Rlc2MgKnJ4O1xuJiM0MztcdHN0cnVjdCBpZ2JfdHhfZGVzYyAqdHg7XG4mIzQzO1x0dTMyIGk7XG4mIzQzO1xuJiM0MztcdGlnYl9pcnFfZGlzYWJsZShpZ2IpO1xuJiM0MztcbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBjb3VudDsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdHR4ID0gXHUwMDI2aWdiLVx1MDAzZXR4X3JpbmdbaWdiLVx1MDAzZXR4X3RhaWxdO1xuJiM0MztcdFx0cnggPSBcdTAwMjZpZ2ItXHUwMDNlcnhfcmluZ1tpZ2ItXHUwMDNlcnhfdGFpbF07XG4mIzQzO1xuJiM0MztcdFx0bWVtc2V0KHR4LCAwLCBzaXplb2Yoc3RydWN0IGlnYl90eF9kZXNjKSk7XG4mIzQzO1x0XHRtZW1zZXQocngsIDAsIHNpemVvZihzdHJ1Y3QgaWdiX3J4X2Rlc2MpKTtcbiYjNDM7XG4mIzQzO1x0XHRyeC1cdTAwM2VyZWFkLnBrdF9hZGRyID0gY3B1X3RvX2xlNjQoZHN0KTtcbiYjNDM7XHRcdHJ4LVx1MDAzZXJlYWQuaGRyX2FkZHIgPSBjcHVfdG9fbGU2NCgwKTtcbiYjNDM7XG4mIzQzO1x0XHR0eC1cdTAwM2VyZWFkLmJ1ZmZlcl9hZGRyID0gY3B1X3RvX2xlNjQoc3JjKTtcbiYjNDM7XHRcdC8qXG4mIzQzO1x0XHQgKiBCdWlsZCBhbiBhZHZhbmNlZCBkYXRhIGRlc2NyaXB0b3IgcGVyIDgyNTc2IGRhdGFzaGVldFxuJiM0MztcdFx0ICogc2VjdGlvbiA3LjIuMi4zLiAgREVYVCBtYXJrcyB0aGUgZGVzY3JpcHRvciBhcyBhZHZhbmNlZFxuJiM0MztcdFx0ICogKHJlcXVpcmVkIGJ5IGhhcmR3YXJlKTsgRFRZUD1kYXRhIHNlbGVjdHMgdGhlIGRhdGFcbiYjNDM7XHRcdCAqIGRlc2NyaXB0b3I7IElGQ1MgYXNrcyB0aGUgTUFDIHRvIGFwcGVuZCB0aGUgRXRoZXJuZXRcbiYjNDM7XHRcdCAqIEZDUyAod2l0aG91dCBpdCB0aGUgZnJhbWUgaXMgZHJvcHBlZCBhcyBtYWxmb3JtZWQpO1xuJiM0MztcdFx0ICogRU9QIG1hcmtzIGVuZCBvZiBwYWNrZXQuICBEVEFMRU4gaXMgdGhlIGJ1ZmZlciBsZW5ndGhcbiYjNDM7XHRcdCAqIGluIGJpdHMgMTU6MCBvZiBjbWRfdHlwZV9sZW4uXG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdHR4LVx1MDAzZXJlYWQuY21kX3R5cGVfbGVuID0gY3B1X3RvX2xlMzIoKHVpbnQzMl90KXNpemUgfFxuJiM0MztcdFx0XHRFMTAwMF9BRFZUWERfRFRZUF9EQVRBIHxcbiYjNDM7XHRcdFx0RTEwMDBfQURWVFhEX0RDTURfREVYVCB8XG4mIzQzO1x0XHRcdEUxMDAwX0FEVlRYRF9EQ01EX0lGQ1MgfFxuJiM0MztcdFx0XHRFMTAwMF9BRFZUWERfRENNRF9FT1ApO1xuJiM0MztcdFx0LypcbiYjNDM7XHRcdCAqIFBBWUxFTiAoc2VjdGlvbiA3LjIuMi4zLjExKSBpcyB0aGUgdG90YWwgcGF5bG9hZCBzaXplXG4mIzQzO1x0XHQgKiBpbiBvbGluZm9fc3RhdHVzWzMxOjE0XS5cbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0dHgtXHUwMDNlcmVhZC5vbGluZm9fc3RhdHVzID1cbiYjNDM7XHRcdFx0Y3B1X3RvX2xlMzIoKHVpbnQzMl90KXNpemUgXHUwMDNjXHUwMDNjIEUxMDAwX0FEVlRYRF9QQVlMRU5fU0hJRlQpO1xuJiM0MztcbiYjNDM7XHRcdGlnYi1cdTAwM2V0eF90YWlsID0gKGlnYi1cdTAwM2V0eF90YWlsICYjNDM7IDEpICUgUklOR19TSVpFO1xuJiM0MztcdFx0aWdiLVx1MDAzZXJ4X3RhaWwgPSAoaWdiLVx1MDAzZXJ4X3RhaWwgJiM0MzsgMSkgJSBSSU5HX1NJWkU7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX1JEVCgwKSwgaWdiLVx1MDAzZXJ4X3RhaWwpO1xuJiM0MztcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfVERUKDApLCBpZ2ItXHUwMDNldHhfdGFpbCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qXG4mIzQzOyAqIFJlc2V0IHRoZSBkZXZpY2UgdmlhIFZGSU9fREVWSUNFX1JFU0VUIChQQ0llIEZMUiBvbiB0aGUgODI1NzYpIGFuZFxuJiM0MzsgKiByZS1wcm9ncmFtIGl0LiAgVkZJT19ERVZJQ0VfUkVTRVQgdGVhcnMgZG93biB0aGUga2VybmVsLXNpZGUgTVNJLVhcbiYjNDM7ICogdHJpZ2dlciBidXQgbGVhdmVzIHVzZXItc2lkZSBldmVudGZkcyBpbnRhY3QsIHNvIHJlLWFybSB0aGUgdHJpZ2dlclxuJiM0MzsgKiB2aWEgdmZpb19wY2lfaXJxX3JlZW5hYmxlKCkgYmVmb3JlIHJlcHJvZ3JhbW1pbmcgc28gYW55IGNhbGxlci1jYWNoZWRcbiYjNDM7ICogZXZlbnRmZCByZW1haW5zIHZhbGlkLlxuJiM0MzsgKlxuJiM0MzsgKiBGTFIgY2xlYXJzIGRldmljZS1zaWRlIHN0YXRlIHRvIHBvd2VyLW9uIHJlc2V0IHZhbHVlcyAoZGF0YXNoZWV0XG4mIzQzOyAqIDQuMi4xLjUuMTogYSBQRiBGTFIgaXMgXCYjMzQ7ZXF1aXZhbGVudCB0byBhIEQwLVx1MDAzZUQzLVx1MDAzZUQwIHRyYW5zaXRpb25cJiMzNDspLCBzb1xuJiM0MzsgKiBFSU1TIGFuZCBFSUNSIGNvbWUgYmFjayBhcyAwIGZyb20gdGhlaXIgcmVnaXN0ZXItZGVmaW5lZCBpbml0aWFsXG4mIzQzOyAqIHZhbHVlcywgYW5kIGlnYl9od19pbml0KCkgcmVzZXRzIHR4X3RhaWwvcnhfdGFpbCB0byAwLiAgVGhlIG5leHRcbiYjNDM7ICogaWdiX21lbWNweV9zdGFydCgpIHdpbGwgbWVtc2V0IGVhY2ggZGVzY3JpcHRvciBpdCB0b3VjaGVzIGJlZm9yZVxuJiM0MzsgKiBzdWJtaXNzaW9uLCBzbyBubyBleHBsaWNpdCBJTUMvRUlDUiB3cml0ZXMgb3IgcmluZyBtZW1zZXRzIGFyZVxuJiM0MzsgKiBuZWVkZWQgaGVyZS5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyB2b2lkIGlnYl9lcnJvcl9yZXNldF9hbmRfcmVpbml0KHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSlcbiYjNDM7e1xuJiM0MztcdHZmaW9fcGNpX2RldmljZV9yZXNldChkZXZpY2UpO1xuJiM0MztcdHZmaW9fcGNpX21zaXhfcmVlbmFibGUoZGV2aWNlLCBNU0lYX1ZFQ1RPUiwgMSk7XG4mIzQzO1x0aWdiX2h3X2luaXQoZGV2aWNlKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBpZ2JfbWVtY3B5X3dhaXQoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGlnYiAqaWdiID0gdG9faWdiX3N0YXRlKGRldmljZSk7XG4mIzQzO1x0c3RydWN0IGlnYl9yeF9kZXNjICpyeDtcbiYjNDM7XHR1MzIgc3RhdHVzID0gMDtcbiYjNDM7XHR1MzIgcHJldl90YWlsO1xuJiM0MztcdGludCByZXRyaWVzO1xuJiM0MztcbiYjNDM7XHRwcmV2X3RhaWwgPSAoaWdiLVx1MDAzZXJ4X3RhaWwgJiM0MzsgUklOR19TSVpFIC0gMSkgJSBSSU5HX1NJWkU7XG4mIzQzO1x0cnggPSBcdTAwMjZpZ2ItXHUwMDNlcnhfcmluZ1twcmV2X3RhaWxdO1xuJiM0MztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIFJlYWwgODI1NzYgaGFyZHdhcmUgcHJvY2Vzc2VzIHRoZSBkZXNjcmlwdG9yIHJpbmcgYXQgbGluZSByYXRlLlxuJiM0MztcdCAqIG1heF9tZW1jcHlfc2l6ZSA9IChSSU5HX1NJWkUgLSAxKSAqIElHQl9NQVhfQ0hVTktfU0laRSB+PSA0IE1CLFxuJiM0MztcdCAqIHNwbGl0IGludG8gNDA5NSAxIEtCIGZyYW1lcy4gIEF0IDEgR2IvcyAofjEyNSBNQi9zKSB0aGUgd29yc3RcbiYjNDM7XHQgKiB2YWxpZCBtZW1jcHkgdGFrZXMgfjMyIG1zIG9uIHRoZSB3aXJlLCBwbHVzIHBlci1mcmFtZSBwcmVhbWJsZSxcbiYjNDM7XHQgKiBTRkQsIElGRyBhbmQgRkNTIG92ZXJoZWFkICh+MyUpIGFuZCBkZXNjcmlwdG9yIGZldGNoL3dyaXRlYmFja1xuJiM0MztcdCAqIGxhdGVuY3kuICBXYWl0IHVwIHRvIH4yMDAgbXMgYmVmb3JlIGRlY2xhcmluZyB0aGUgZGV2aWNlIGh1bmc7XG4mIzQzO1x0ICogfjZ4IHRoZSBsaW5lLXJhdGUgZmxvb3IgbGVhdmVzIGNvbWZvcnRhYmxlIGhlYWRyb29tIGZvciBob3N0XG4mIzQzO1x0ICogc2NoZWR1bGluZyBqaXR0ZXIgd2hpbGUga2VlcGluZyB0aGUgaW50ZW50aW9uYWwgaW52YWxpZC1ETUFcbiYjNDM7XHQgKiB0ZXN0cyBib3VuZGVkLlxuJiM0MztcdCAqL1xuJiM0MztcdHJldHJpZXMgPSAyMDA7XG4mIzQzO1x0d2hpbGUgKHJldHJpZXMtLSBcdTAwM2UgMCkge1xuJiM0MztcdFx0c3RhdHVzID0gbGUzMl90b19jcHUoUkVBRF9PTkNFKHJ4LVx1MDAzZXdiLnN0YXR1c19lcnJvcikpO1xuJiM0MztcdFx0aWYgKHN0YXR1cyBcdTAwMjYgMSlcbiYjNDM7XHRcdFx0YnJlYWs7XG4mIzQzO1x0XHR1c2xlZXAoMTAwMCk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAoc3RhdHVzIFx1MDAyNiAxKVxuJiM0MztcdFx0LypcbiYjNDM7XHRcdCAqIEVuc3VyZSB0aGUgdGVzdCBjb2RlIGRvZXNuJiMzOTt0IHNwZWN1bGF0aXZlbHkgcmVhZCB0aGUgRE1BXG4mIzQzO1x0XHQgKiBkZXN0aW5hdGlvbiBidWZmZXIgYmVmb3JlIHdlIGhhdmUgdmVyaWZpZWQgdGhhdCB0aGVcbiYjNDM7XHRcdCAqIGRlc2NyaXB0b3Igd3JpdGViYWNrIGlzIGNvbXBsZXRlLlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRybWIoKTtcbiYjNDM7XG4mIzQzO1x0aWdiX2lycV9jbGVhcihpZ2IpO1xuJiM0MztcbiYjNDM7XHRpZ2JfaXJxX2VuYWJsZShpZ2IpO1xuJiM0MztcbiYjNDM7XHRpZiAoc3RhdHVzIFx1MDAyNiAxKVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogVGhlIGRlc2NyaXB0b3IgbmV2ZXIgY29tcGxldGVkLiAgT24gcmVhbCA4MjU3NiBoYXJkd2FyZSB0aGlzXG4mIzQzO1x0ICogdHlwaWNhbGx5IGZvbGxvd3MgYSBETUEtcmVhZCBmYXVsdCBmcm9tIG9uZSBvZiB0aGUgaW50ZW50aW9uYWxcbiYjNDM7XHQgKiB1bm1hcHBlZC1JT1ZBIHRlc3RzOyB0aGUgZmF1bHQgbGVhdmVzIHRoZSBkZXNjcmlwdG9yIGVuZ2luZVxuJiM0MztcdCAqIHVuYWJsZSB0byBzZXJ2aWNlIHN1YnNlcXVlbnQgdmFsaWQgZGVzY3JpcHRvcnMuICBDVFJMLlJTVCBhbG9uZVxuJiM0MztcdCAqIHJlaW5pdGlhbGl6ZXMgdGhlIHF1ZXVlIHJlZ2lzdGVycyBidXQgbGVhdmVzIHRoZSBlbmdpbmUgd2VkZ2VkXG4mIzQzO1x0ICogZm9yIHRoZSBjdXJyZW50IHByb2Nlc3MsIHNvIGEgYnJvYWRlciBWRklPX0RFVklDRV9SRVNFVCAoRkxSKVxuJiM0MztcdCAqIGlzIHJlcXVpcmVkLlxuJiM0MztcdCAqXG4mIzQzO1x0ICogRGVsYXkgYmVmb3JlIHJlcXVlc3RpbmcgcmVzZXQgc28gUENJZS9JT01NVS9BRVIgZXJyb3IgaGFuZGxpbmdcbiYjNDM7XHQgKiB0cmlnZ2VyZWQgYnkgdGhlIGp1c3Qtb2JzZXJ2ZWQgRE1BIGZhdWx0IGNhbiByZWxlYXNlIHRoZSBkZXZpY2VcbiYjNDM7XHQgKiBsb2NrIFZGSU9fREVWSUNFX1JFU0VUIGNvbnRlbmRzIGZvci4gIFRoZSAxMCBtcyB2YWx1ZSBpc1xuJiM0MztcdCAqIGhldXJpc3RpYy4gIFRoZSBjdXJyZW50IG1lbWNweSBzdGlsbCBmYWlscyB3aXRoIC1FVElNRURPVVQ7XG4mIzQzO1x0ICogcmVjb3Zlcnkgb25seSBlbnN1cmVzIHRoZSBuZXh0IG1lbWNweSBzdGFydHMgZnJvbSBhIHVzYWJsZSBzdGF0ZS5cbiYjNDM7XHQgKi9cbiYjNDM7XHR1c2xlZXAoMTAwMDApO1xuJiM0MztcdGlnYl9lcnJvcl9yZXNldF9hbmRfcmVpbml0KGRldmljZSk7XG4mIzQzO1xuJiM0MztcdHJldHVybiAtRVRJTUVET1VUO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBpZ2Jfc2VuZF9tc2koc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGlnYiAqaWdiID0gdG9faWdiX3N0YXRlKGRldmljZSk7XG4mIzQzO1xuJiM0MztcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfRUlDUywgMSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO2NvbnN0IHN0cnVjdCB2ZmlvX3BjaV9kcml2ZXJfb3BzIGlnYl9vcHMgPSB7XG4mIzQzO1x0Lm5hbWUgPSBcJiMzNDtpZ2JcJiMzNDssXG4mIzQzO1x0LnByb2JlID0gaWdiX3Byb2JlLFxuJiM0MztcdC5pbml0ID0gaWdiX2luaXQsXG4mIzQzO1x0LnJlbW92ZSA9IGlnYl9yZW1vdmUsXG4mIzQzO1x0Lm1lbWNweV9zdGFydCA9IGlnYl9tZW1jcHlfc3RhcnQsXG4mIzQzO1x0Lm1lbWNweV93YWl0ID0gaWdiX21lbWNweV93YWl0LFxuJiM0MztcdC5zZW5kX21zaSA9IGlnYl9zZW5kX21zaSxcbiYjNDM7fTtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9pbmNsdWRlL2xpYnZmaW8vdmZpb19wY2lfZGV2aWNlLmggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9pbmNsdWRlL2xpYnZmaW8vdmZpb19wY2lfZGV2aWNlLmhcbmluZGV4IDI4NTg4ODVhODliYmJmLi4yZTY3YWZjMGQ1ODA5OCAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2luY2x1ZGUvbGlidmZpby92ZmlvX3BjaV9kZXZpY2UuaFxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvaW5jbHVkZS9saWJ2ZmlvL3ZmaW9fcGNpX2RldmljZS5oXG5AQCAtNjgsNiAmIzQzOzY4LDggQEAgdm9pZCB2ZmlvX3BjaV9jb25maWdfYWNjZXNzKHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSwgYm9vbCB3cml0ZSxcbiB2b2lkIHZmaW9fcGNpX2lycV9lbmFibGUoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlLCB1MzIgaW5kZXgsXG4gXHRcdFx0IHUzMiB2ZWN0b3IsIGludCBjb3VudCk7XG4gdm9pZCB2ZmlvX3BjaV9pcnFfZGlzYWJsZShzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UsIHUzMiBpbmRleCk7XG4mIzQzO3ZvaWQgdmZpb19wY2lfaXJxX3JlZW5hYmxlKHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSwgdTMyIGluZGV4LFxuJiM0MztcdFx0XHQgICB1MzIgdmVjdG9yLCBpbnQgY291bnQpO1xuIHZvaWQgdmZpb19wY2lfaXJxX3RyaWdnZXIoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlLCB1MzIgaW5kZXgsIHUzMiB2ZWN0b3IpO1xuIFxuIHN0YXRpYyBpbmxpbmUgdm9pZCBmY250bF9zZXRfbm9uYmxvY2soaW50IGZkKVxuQEAgLTkyLDYgJiM0Mzs5NCwxMiBAQCBzdGF0aWMgaW5saW5lIHZvaWQgdmZpb19wY2lfbXNpX2Rpc2FibGUoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlKVxuIFx0dmZpb19wY2lfaXJxX2Rpc2FibGUoZGV2aWNlLCBWRklPX1BDSV9NU0lfSVJRX0lOREVYKTtcbiB9XG4gXG4mIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCB2ZmlvX3BjaV9tc2lfcmVlbmFibGUoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlLFxuJiM0MztcdFx0XHRcdFx0IHUzMiB2ZWN0b3IsIGludCBjb3VudClcbiYjNDM7e1xuJiM0MztcdHZmaW9fcGNpX2lycV9yZWVuYWJsZShkZXZpY2UsIFZGSU9fUENJX01TSV9JUlFfSU5ERVgsIHZlY3RvciwgY291bnQpO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyBpbmxpbmUgdm9pZCB2ZmlvX3BjaV9tc2l4X2VuYWJsZShzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UsXG4gXHRcdFx0XHRcdHUzMiB2ZWN0b3IsIGludCBjb3VudClcbiB7XG5AQCAtMTAzLDYgJiM0MzsxMTEsMTIgQEAgc3RhdGljIGlubGluZSB2b2lkIHZmaW9fcGNpX21zaXhfZGlzYWJsZShzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UpXG4gXHR2ZmlvX3BjaV9pcnFfZGlzYWJsZShkZXZpY2UsIFZGSU9fUENJX01TSVhfSVJRX0lOREVYKTtcbiB9XG4gXG4mIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCB2ZmlvX3BjaV9tc2l4X3JlZW5hYmxlKHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSxcbiYjNDM7XHRcdFx0XHRcdCAgdTMyIHZlY3RvciwgaW50IGNvdW50KVxuJiM0Mzt7XG4mIzQzO1x0dmZpb19wY2lfaXJxX3JlZW5hYmxlKGRldmljZSwgVkZJT19QQ0lfTVNJWF9JUlFfSU5ERVgsIHZlY3RvciwgY291bnQpO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyBpbmxpbmUgaW50IF9fdG9faW92YShzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UsIHZvaWQgKnZhZGRyLCBpb3ZhX3QgKmlvdmEpXG4ge1xuIFx0cmV0dXJuIF9faW9tbXVfaHZhMmlvdmEoZGV2aWNlLVx1MDAzZWlvbW11LCB2YWRkciwgaW92YSk7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvbGlidmZpby5tayBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2xpYnZmaW8ubWtcbmluZGV4IDlmNDdiY2VlZDE2ZjRjLi4xZjEzY2NhMDQzNDhiNCAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2xpYnZmaW8ubWtcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2xpYnZmaW8ubWtcbkBAIC0xMiw2ICYjNDM7MTIsNyBAQCBMSUJWRklPX0MgJiM0Mzs9IHZmaW9fcGNpX2RyaXZlci5jXG4gaWZlcSAoJChBUkNIOng4Nl82ND14ODYpLHg4NilcbiBMSUJWRklPX0MgJiM0Mzs9IGRyaXZlcnMvaW9hdC9pb2F0LmNcbiBMSUJWRklPX0MgJiM0Mzs9IGRyaXZlcnMvZHNhL2RzYS5jXG4mIzQzO0xJQlZGSU9fQyAmIzQzOz0gZHJpdmVycy9pZ2IvaWdiLmNcbiBlbmRpZlxuIFxuIExJQlZGSU9fT1VUUFVUIDo9ICQoT1VUUFVUKS9saWJ2ZmlvXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvdmZpb19wY2lfZGV2aWNlLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi92ZmlvX3BjaV9kZXZpY2UuY1xuaW5kZXggZmM3NWUwNGVmMDEwY2YuLjdiODM5NGQwYWM1MDc2IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvdmZpb19wY2lfZGV2aWNlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL3ZmaW9fcGNpX2RldmljZS5jXG5AQCAtMTA2LDYgJiM0MzsxMDYsMjggQEAgdm9pZCB2ZmlvX3BjaV9pcnFfZGlzYWJsZShzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UsIHUzMiBpbmRleClcbiBcdHZmaW9fcGNpX2lycV9zZXQoZGV2aWNlLCBpbmRleCwgMCwgMCwgTlVMTCk7XG4gfVxuIFxuJiM0MzsvKlxuJiM0MzsgKiBSZS1pc3N1ZSBWRklPX0RFVklDRV9TRVRfSVJRUyBmb3IgYW4gYWxyZWFkeS1lbmFibGVkIHZlY3RvciByYW5nZSB1c2luZ1xuJiM0MzsgKiB0aGUgZXhpc3RpbmcgZXZlbnRmZHMuICBJbnRlbmRlZCBmb3IgZHJpdmVycyB0aGF0IG5lZWQgdG8gcmUtYXJtIGRldmljZVxuJiM0MzsgKiBpbnRlcnJ1cHRzIGFmdGVyIGEgVkZJT19ERVZJQ0VfUkVTRVQsIHdoaWNoIHRlYXJzIGRvd24gdGhlIGtlcm5lbC1zaWRlXG4mIzQzOyAqIElSUSB0cmlnZ2VyIGJ1dCBsZWF2ZXMgdXNlci1zaWRlIGV2ZW50ZmRzIGludGFjdC4gIFJlY3JlYXRpbmcgdGhlXG4mIzQzOyAqIGV2ZW50ZmRzIHdvdWxkIGludmFsaWRhdGUgYW55IHRlc3QtZml4dHVyZSBjYWNoZSBvZiB0aGUgZmQsIHNvIHRoaXNcbiYjNDM7ICogaGVscGVyIGRlbGliZXJhdGVseSBwcmVzZXJ2ZXMgdGhlbS5cbiYjNDM7ICovXG4mIzQzO3ZvaWQgdmZpb19wY2lfaXJxX3JlZW5hYmxlKHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSwgdTMyIGluZGV4LFxuJiM0MztcdFx0XHQgICB1MzIgdmVjdG9yLCBpbnQgY291bnQpXG4mIzQzO3tcbiYjNDM7XHRpbnQgaTtcbiYjNDM7XG4mIzQzO1x0Y2hlY2tfc3VwcG9ydGVkX2lycV9pbmRleChpbmRleCk7XG4mIzQzO1xuJiM0MztcdGZvciAoaSA9IHZlY3RvcjsgaSBcdTAwM2MgdmVjdG9yICYjNDM7IGNvdW50OyBpJiM0MzsmIzQzOylcbiYjNDM7XHRcdFZGSU9fQVNTRVJUX0dFKGRldmljZS1cdTAwM2Vtc2lfZXZlbnRmZHNbaV0sIDAsXG4mIzQzO1x0XHRcdCAgICAgICBcJiMzNDt2ZWN0b3IgJWQgZXZlbnRmZCBub3QgYWxsb2NhdGVkXFxuXCYjMzQ7LCBpKTtcbiYjNDM7XG4mIzQzO1x0dmZpb19wY2lfaXJxX3NldChkZXZpY2UsIGluZGV4LCB2ZWN0b3IsIGNvdW50LCBkZXZpY2UtXHUwMDNlbXNpX2V2ZW50ZmRzICYjNDM7IHZlY3Rvcik7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIHZvaWQgdmZpb19wY2lfaXJxX2dldChzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UsIHUzMiBpbmRleCxcbiBcdFx0XHQgICAgIHN0cnVjdCB2ZmlvX2lycV9pbmZvICppcnFfaW5mbylcbiB7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvdmZpb19wY2lfZHJpdmVyLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi92ZmlvX3BjaV9kcml2ZXIuY1xuaW5kZXggNjgyN2Y0YTZmZWJlOTkuLmE1ZDA1NDcxMzJjNDA1IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvdmZpb19wY2lfZHJpdmVyLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL3ZmaW9fcGNpX2RyaXZlci5jXG5AQCAtNSwxMiAmIzQzOzUsMTQgQEBcbiAjaWZkZWYgX194ODZfNjRfX1xuIGV4dGVybiBzdHJ1Y3QgdmZpb19wY2lfZHJpdmVyX29wcyBkc2Ffb3BzO1xuIGV4dGVybiBzdHJ1Y3QgdmZpb19wY2lfZHJpdmVyX29wcyBpb2F0X29wcztcbiYjNDM7ZXh0ZXJuIHN0cnVjdCB2ZmlvX3BjaV9kcml2ZXJfb3BzIGlnYl9vcHM7XG4gI2VuZGlmXG4gXG4gc3RhdGljIHN0cnVjdCB2ZmlvX3BjaV9kcml2ZXJfb3BzICpkcml2ZXJfb3BzW10gPSB7XG4gI2lmZGVmIF9feDg2XzY0X19cbiBcdFx1MDAyNmRzYV9vcHMsXG4gXHRcdTAwMjZpb2F0X29wcyxcbiYjNDM7XHRcdTAwMjZpZ2Jfb3BzLFxuICNlbmRpZlxuIH07XG4gXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTEgMTk6MTM8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb25seSBtb2RpZmllcyBjb2RlIGluIHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vLCB3aGljaCBjb250YWlucyB1c2VyLXNwYWNlIHNlbGZ0ZXN0cyBhbmQgZG9lcyBub3QgYWZmZWN0IHRoZSBjb3JlIGtlcm5lbCwgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlIGNvZGUuIFRoZXJlZm9yZSwgaXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IGNhbiBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdAogICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksCiAgIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAzMTM3YzAzMTk5ZjY0N2VmYjQzYmJiYWY4MDUzODQ0ZDBjYjYwMGVkCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFNhdCBKdWwgMTEgMTk6MTM6NDAgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9kcml2ZXJzL2lnYi9lMTAwMF84MjU3NS5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvZHJpdmVycy9pZ2IvZTEwMDBfODI1NzUuaApuZXcgZmlsZSBtb2RlIDEyMDAwMAppbmRleCAwMDAwMDAwMDAwMDAwMC4uYjg0YWZmZGVjNTU5OGUKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9kcml2ZXJzL2lnYi9lMTAwMF84MjU3NS5oCkBAIC0wLDAgJiM0MzsxIEBACiYjNDM7Li4vLi4vLi4vLi4vLi4vLi4vLi4vZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWdiL2UxMDAwXzgyNTc1LmgKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9kcml2ZXJzL2lnYi9lMTAwMF9kZWZpbmVzLmggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9kcml2ZXJzL2lnYi9lMTAwMF9kZWZpbmVzLmgKbmV3IGZpbGUgbW9kZSAxMjAwMDAKaW5kZXggMDAwMDAwMDAwMDAwMDAuLjlmOTdmNDMzMDA4NjZkCi0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvZHJpdmVycy9pZ2IvZTEwMDBfZGVmaW5lcy5oCkBAIC0wLDAgJiM0MzsxIEBACiYjNDM7Li4vLi4vLi4vLi4vLi4vLi4vLi4vZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWdiL2UxMDAwX2RlZmluZXMuaApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2RyaXZlcnMvaWdiL2UxMDAwX3JlZ3MuaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2RyaXZlcnMvaWdiL2UxMDAwX3JlZ3MuaApuZXcgZmlsZSBtb2RlIDEyMDAwMAppbmRleCAwMDAwMDAwMDAwMDAwMC4uYzczMzYzNDE3MWJiMTMKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9kcml2ZXJzL2lnYi9lMTAwMF9yZWdzLmgKQEAgLTAsMCAmIzQzOzEgQEAKJiM0MzsuLi8uLi8uLi8uLi8uLi8uLi8uLi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZ2IvZTEwMDBfcmVncy5oClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvZHJpdmVycy9pZ2IvaWdiLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9kcml2ZXJzL2lnYi9pZ2IuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMC4uMjA2YTFlNjQ4OWMyMWMKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9kcml2ZXJzL2lnYi9pZ2IuYwpAQCAtMCwwICYjNDM7MSw1NTQgQEAKJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5CiYjNDM7I2luY2x1ZGUgJmx0O3VuaXN0ZC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtlcnJuby5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtzdGRpbnQuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvaW8uaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvcGNpX3JlZ3MuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvcGNpX2lkcy5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9rZXJuZWwuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvY29tcGlsZXIuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7YXNtL2JhcnJpZXIuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvbWlpLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpYnZmaW8vdmZpb19wY2lfZGV2aWNlLmgmZ3Q7CiYjNDM7CiYjNDM7I2luY2x1ZGUgJiMzNDtlMTAwMF9yZWdzLmgmIzM0OwomIzQzOyNpbmNsdWRlICYjMzQ7ZTEwMDBfZGVmaW5lcy5oJiMzNDsKJiM0MzsjaW5jbHVkZSAmIzM0O2UxMDAwXzgyNTc1LmgmIzM0OwomIzQzOwomIzQzOyNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF84MjU3NiAweDEwQzkKJiM0MzsjZGVmaW5lIElHQl9NQVhfQ0hVTktfU0laRSAxMDI0CiYjNDM7I2RlZmluZSBNU0lYX1ZFQ1RPUiAwCiYjNDM7I2RlZmluZSBSSU5HX1NJWkUgNDA5NiAvKiBOdW1iZXIgb2YgZGVzY3JpcHRvcnMgaW4gcmluZyAqLwomIzQzOwomIzQzO3N0cnVjdCBpZ2JfdHhfZGVzYyB7CiYjNDM7CXVuaW9uIHsKJiM0MzsJCXN0cnVjdCB7CiYjNDM7CQkJdTY0IGJ1ZmZlcl9hZGRyOyAvKiBBZGRyZXNzIG9mIGRlc2NyaXB0b3ImIzM5O3MgZGF0YSBidWZmZXIgKi8KJiM0MzsJCQl1MzIgY21kX3R5cGVfbGVuOyAvKiBDb21tYW5kL1R5cGUvTGVuZ3RoICovCiYjNDM7CQkJdTMyIG9saW5mb19zdGF0dXM7IC8qIENvbnRleHQvQnVmZmVyIGluZm8gKi8KJiM0MzsJCX0gcmVhZDsKJiM0MzsKJiM0MzsJCXN0cnVjdCB7CiYjNDM7CQkJdTY0IHJzdmQ7ICAgICAgICAvKiBSZXNlcnZlZCAqLwomIzQzOwkJCXUzMiBueHRzZXFfc2VlZDsgLyogTmV4dCBzZXF1ZW5jZSBzZWVkICovCiYjNDM7CQkJdTMyIHN0YXR1czsgICAgICAvKiBEZXNjcmlwdG9yIHN0YXR1cyAqLwomIzQzOwkJfSB3YjsKJiM0MzsJfTsKJiM0Mzt9OwomIzQzOwomIzQzO3N0cnVjdCBpZ2JfcnhfZGVzYyB7CiYjNDM7CXVuaW9uIHsKJiM0MzsJCXN0cnVjdCB7CiYjNDM7CQkJdTY0IHBrdF9hZGRyOyAvKiBQYWNrZXQgYnVmZmVyIGFkZHJlc3MgKi8KJiM0MzsJCQl1NjQgaGRyX2FkZHI7IC8qIEhlYWRlciBidWZmZXIgYWRkcmVzcyAqLwomIzQzOwkJfSByZWFkOwomIzQzOwkJc3RydWN0IHsKJiM0MzsJCQl1MTYgcGt0X2luZm87ICAgICAvKiBSU1MgdHlwZSwgUGFja2V0IHR5cGUgKi8KJiM0MzsJCQl1MTYgaGRyX2luZm87ICAgICAvKiBTcGxpdCBIZWFkLCBidWYgbGVuICovCiYjNDM7CQkJdTMyIHJzczsgICAgICAgICAgLyogUlNTIEhhc2ggKi8KJiM0MzsJCQl1MzIgc3RhdHVzX2Vycm9yOyAvKiBleHQgc3RhdHVzL2Vycm9yICovCiYjNDM7CQkJdTE2IGxlbmd0aDsgICAgICAgLyogUGFja2V0IGxlbmd0aCAqLwomIzQzOwkJCXUxNiB2bGFuOyAgICAgICAgIC8qIFZMQU4gdGFnICovCiYjNDM7CQl9IHdiOyAvKiB3cml0ZWJhY2sgKi8KJiM0MzsJfTsKJiM0Mzt9OwomIzQzOwomIzQzO3N0cnVjdCBpZ2IgewomIzQzOwl2b2lkICpiYXIwOwomIzQzOwl1MzIgdHhfdGFpbDsKJiM0MzsJdTMyIHJ4X3RhaWw7CiYjNDM7CXN0cnVjdCBpZ2JfdHhfZGVzYyB0eF9yaW5nW1JJTkdfU0laRV0gX19hdHRyaWJ1dGVfXygoYWxpZ25lZCgxMjgpKSk7CiYjNDM7CXN0cnVjdCBpZ2JfcnhfZGVzYyByeF9yaW5nW1JJTkdfU0laRV0gX19hdHRyaWJ1dGVfXygoYWxpZ25lZCgxMjgpKSk7CiYjNDM7fTsKJiM0MzsKJiM0MztzdGF0aWMgaW5saW5lIHN0cnVjdCBpZ2IgKnRvX2lnYl9zdGF0ZShzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UpCiYjNDM7ewomIzQzOwlyZXR1cm4gKHN0cnVjdCBpZ2IgKilkZXZpY2UtJmd0O2RyaXZlci5yZWdpb24udmFkZHI7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBpZ2Jfd3JpdGUzMihzdHJ1Y3QgaWdiICppZ2IsIHUzMiByZWcsIHUzMiB2YWwpCiYjNDM7ewomIzQzOwl3cml0ZWwodmFsLCBpZ2ItJmd0O2JhcjAgJiM0MzsgcmVnKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGlubGluZSB1MzIgaWdiX3JlYWQzMihzdHJ1Y3QgaWdiICppZ2IsIHUzMiByZWcpCiYjNDM7ewomIzQzOwlyZXR1cm4gcmVhZGwoaWdiLSZndDtiYXIwICYjNDM7IHJlZyk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgaWdiX3dyaXRlX3BoeShzdHJ1Y3QgaWdiICppZ2IsIHUzMiBvZmZzZXQsIHUxNiBkYXRhKQomIzQzO3sKJiM0MzsJdTMyIG1kaWM7CiYjNDM7CWludCBpOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBXcml0ZSBhIFBIWSByZWdpc3RlciBvdmVyIE1ESU8uCiYjNDM7CSAqCiYjNDM7CSAqIEEgcHJvZHVjdGlvbiBkcml2ZXIgd291bGQgaG9sZCB0aGUgU1cvRlcgc2VtYXBob3JlIChTV1NNLlNXRVNNQkkgJiM0MzsgdGhlCiYjNDM7CSAqIFNXX0ZXX1NZTkMgUEhZIGJpdCkgYWNyb3NzIHRoZSBNRElPIHRyYW5zYWN0aW9uIHRvIHNlcmlhbGl6ZSBhZ2FpbnN0IHRoZQomIzQzOwkgKiBkZXZpY2UmIzM5O3MgbWFuYWdlbWVudCBmaXJtd2FyZS4gIFRoZSBzZWxmdGVzdCBvd25zIHRoZSBhc3NpZ25lZCBmdW5jdGlvbgomIzQzOwkgKiBleGNsdXNpdmVseSBvbiBhIGRlZGljYXRlZCB0ZXN0IGRldmljZSB3aXRoIG5vIGFjdGl2ZSBtYW5hZ2VhYmlsaXR5CiYjNDM7CSAqIGNvbnRlbmRpbmcgZm9yIHRoZSBQSFksIHNvIHRoZSBzeW5jIGlzIG9taXR0ZWQ7IGl0IHNob3VsZCBiZSBhZGRlZCBoZXJlCiYjNDM7CSAqIGlmIHRoaXMgZXZlciBuZWVkcyB0byBydW4gb24gYSBtYW5hZ2VhYmlsaXR5LWVuYWJsZWQgTklDLgomIzQzOwkgKi8KJiM0MzsJbWRpYyA9ICgoKHUzMilkYXRhKSB8CiYjNDM7CQkob2Zmc2V0ICZsdDsmbHQ7IEUxMDAwX01ESUNfUkVHX1NISUZUKSB8CiYjNDM7CQkoMSAmbHQ7Jmx0OyBFMTAwMF9NRElDX1BIWV9TSElGVCkgfAomIzQzOwkJRTEwMDBfTURJQ19PUF9XUklURSk7CiYjNDM7CiYjNDM7CWlnYl93cml0ZTMyKGlnYiwgRTEwMDBfTURJQywgbWRpYyk7CiYjNDM7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyAxMDAwOyBpJiM0MzsmIzQzOykgewomIzQzOwkJdXNsZWVwKDUwKTsKJiM0MzsJCW1kaWMgPSBpZ2JfcmVhZDMyKGlnYiwgRTEwMDBfTURJQyk7CiYjNDM7CQlpZiAobWRpYyAmYW1wOyBFMTAwMF9NRElDX1JFQURZKQomIzQzOwkJCWJyZWFrOwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmICghKG1kaWMgJmFtcDsgRTEwMDBfTURJQ19SRUFEWSkpCiYjNDM7CQlyZXR1cm4gLTE7CiYjNDM7CiYjNDM7CWlmIChtZGljICZhbXA7IEUxMDAwX01ESUNfRVJST1IpCiYjNDM7CQlyZXR1cm4gLTE7CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MzsvKgomIzQzOyAqIENvbmZpZ3VyZSB0aGUgZGV2aWNlIGZvciBQSFkgaW50ZXJuYWwgbG9vcGJhY2sgcGVyIDgyNTc2IGRhdGFzaGVldAomIzQzOyAqIHNlY3Rpb24gMy41LjYuMy4xLiAgRm9yY2UgdGhlIFBIWSB0byAxR2IvcyBmdWxsIGR1cGxleCB3aXRoIGxvb3BiYWNrCiYjNDM7ICogZW5hYmxlZCwgdGhlbiBmb3JjZSB0aGUgTUFDIGxpbmsgc3RhdGUgdG8gbWF0Y2guICBJbnRlcm5hbCBsb29wYmFjawomIzQzOyAqIHdyYXBzIGRhdGEgYXQgdGhlIGVuZCBvZiB0aGUgUEhZIGRhdGFwYXRoIChzZWN0aW9uIDMuNS42LjMpLCBzbyB0aGUKJiM0MzsgKiBwaHlzaWNhbCBsaW5rIHN0YXRlIGlzIGlycmVsZXZhbnQuCiYjNDM7ICoKJiM0MzsgKiBTZWN0aW9uIDMuNS42LjEgZGlyZWN0cyB0byAmIzM0O1VzZSBQSFkgTG9vcGJhY2sgaW5zdGVhZCBvZiBNQUMgTG9vcGJhY2sKJiM0MzsgKiBvbiB0aGUgODI1NzYmIzM0OywgYW5kIHNlY3Rpb24gMy41LjYuMiBzdGF0ZXMgJiMzNDtNQUMgTG9vcGJhY2sgaXMgbm90IHVzZWQKJiM0MzsgKiBvbiB0aGlzIGRldmljZS4mIzM0OyAgUkNUTC5MQk1fTUFDIGlzIHN0aWxsIHNldCBlbHNld2hlcmUgYXMgYSBRRU1VLW9ubHkKJiM0MzsgKiBhY2NvbW1vZGF0aW9uOyBzZWUgdGhlIFJDVEwgcHJvZ3JhbW1pbmcgaW4gdGhlIGNhbGxlciBmb3IgdGhlCiYjNDM7ICogcmF0aW9uYWxlLgomIzQzOyAqLwomIzQzO3N0YXRpYyB2b2lkIGlnYl9zZXR1cF9sb29wYmFjayhzdHJ1Y3QgaWdiICppZ2IpCiYjNDM7ewomIzQzOwl1MzIgY3RybDsKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogS2ljayB0aGUgYXV0b25lZyBtYWNoaW5lcnkgc29sZWx5IHRvIGJyaW5nIFNUQVRVUy5MVSB1cCB1bmRlcgomIzQzOwkgKiBRRU1VJiMzOTtzIGlnYiBlbXVsYXRpb246IFFFTVUgb25seSB1cGRhdGVzIFNUQVRVUy5MVSB2aWEgaXRzCiYjNDM7CSAqIGF1dG9uZWctZG9uZSB0aW1lciwgYW5kIHdpdGhvdXQgTFUgc2V0IGl0cyByZWNlaXZlIHBhdGgKJiM0MzsJICogKGUxMDAweF9od19yeF9lbmFibGVkKSBkcm9wcyBldmVyeSBsb29wYmFjayBmcmFtZS4gIE9uIHJlYWwKJiM0MzsJICogaGFyZHdhcmUgYXV0b25lZyBjYW5ub3QgY29tcGxldGUgYmVmb3JlIHRoZSBuZXh0IFBIWSB3cml0ZQomIzQzOwkgKiBiZWxvdyBjbGVhcnMgdGhlIGF1dG9uZWctZW5hYmxlIGJpdCwgc28gdGhpcyBpcyBlZmZlY3RpdmVseSBhCiYjNDM7CSAqIG5vLW9wIHRoZXJlLgomIzQzOwkgKi8KJiM0MzsJKHZvaWQpaWdiX3dyaXRlX3BoeShpZ2IsIE1JSV9CTUNSLAomIzQzOwkJCSAgICBCTUNSX0FORU5BQkxFIHwgQk1DUl9BTlJFU1RBUlQpOwomIzQzOwomIzQzOwkvKiBQSFkgY29udHJvbDogbG9vcGJhY2sgJiM0MzsgMUdiL3MgZnVsbCBkdXBsZXgsIGF1dG9uZWcgZGlzYWJsZWQuICovCiYjNDM7CXJldCA9IGlnYl93cml0ZV9waHkoaWdiLCBNSUlfQk1DUiwKJiM0MzsJCQkgICAgQk1DUl9MT09QQkFDSyB8CiYjNDM7CQkJICAgIEJNQ1JfU1BFRUQxMDAwIHwKJiM0MzsJCQkgICAgQk1DUl9GVUxMRFBMWCk7CiYjNDM7CVZGSU9fQVNTRVJUX0VRKHJldCwgMCwgJiMzNDtGYWlsZWQgdG8gd3JpdGUgUEhZIGNvbnRyb2wgcmVnaXN0ZXImIzM0Oyk7CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIEJyaWVmIGRlbGF5IGJlZm9yZSBmb3JjaW5nIHRoZSBNQUMsIG1pcnJvcmluZyB0aGUga2VybmVsIGV0aHRvb2wKJiM0MzsJICogc2VsZnRlc3QgaW4gaWdiX2ludGVncmF0ZWRfcGh5X2xvb3BiYWNrKCkuICBOb3Qgc3BlY2lmaWVkIGJ5IHRoZQomIzQzOwkgKiBkYXRhc2hlZXQsIGJ1dCBlbXBpcmljYWxseSByZXF1aXJlZCBieSB0aGUga2VybmVsIGRyaXZlci4KJiM0MzsJICovCiYjNDM7CXVzbGVlcCg1MDAwMCk7CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIEZvcmNlIHRoZSBNQUMgdG8gMUdiL3MgZnVsbCBkdXBsZXggd2l0aCBsaW5rIHVwLiAgV2l0aG91dCBmb3JjaW5nCiYjNDM7CSAqIHRoZSBsaW5rIHN0YXRlIHRoZSBkZXNjcmlwdG9yIGVuZ2luZSBkb2VzIG5vdCBydW4sIHNpbmNlIHRoZSBjaGlwCiYjNDM7CSAqIG5vcm1hbGx5IHdhaXRzIGZvciBhIHJlYWwgbmVnb3RpYXRlZCBsaW5rLgomIzQzOwkgKi8KJiM0MzsJY3RybCA9IGlnYl9yZWFkMzIoaWdiLCBFMTAwMF9DVFJMKTsKJiM0MzsJY3RybCAmYW1wOz0gfkUxMDAwX0NUUkxfU1BEX1NFTDsKJiM0MzsJY3RybCB8PSBFMTAwMF9DVFJMX0ZSQ1NQRCB8CiYjNDM7CQlFMTAwMF9DVFJMX0ZSQ0RQWCB8CiYjNDM7CQlFMTAwMF9DVFJMX1NQRF8xMDAwIHwKJiM0MzsJCUUxMDAwX0NUUkxfRkQgfAomIzQzOwkJRTEwMDBfQ1RSTF9TTFU7CiYjNDM7CWlnYl93cml0ZTMyKGlnYiwgRTEwMDBfQ1RSTCwgY3RybCk7CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIFNldHRsaW5nIGRlbGF5IG1hdGNoaW5nIHRoZSBrZXJuZWwgZXRodG9vbCBzZWxmdGVzdCYjMzk7cyBtc2xlZXAoNTAwKQomIzQzOwkgKiBhdCB0aGUgdGFpbCBvZiBpZ2JfaW50ZWdyYXRlZF9waHlfbG9vcGJhY2soKS4gIE5vdCBzcGVjaWZpZWQgYnkKJiM0MzsJICogdGhlIGRhdGFzaGVldDsgZW1waXJpY2FsLCBhbmQgaW5oZXJpdGVkIGZyb20gdGhlIGtlcm5lbCBkcml2ZXIuCiYjNDM7CSAqLwomIzQzOwl1c2xlZXAoNTAwMDAwKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBpZ2JfcHJvYmUoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlKQomIzQzO3sKJiM0MzsJaWYgKCF2ZmlvX3BjaV9kZXZpY2VfbWF0Y2goZGV2aWNlLCBQQ0lfVkVORE9SX0lEX0lOVEVMLCBQQ0lfREVWSUNFX0lEX0lOVEVMXzgyNTc2KSkKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBQcm9ncmFtIHRoZSBkZXZpY2UgaW50byBhIHVzYWJsZSBzdGF0ZS4gIFNwbGl0IG91dCBvZiBpZ2JfaW5pdCgpIHNvIGl0CiYjNDM7ICogY2FuIGJlIHJldXNlZCBhZnRlciBhIGRldmljZSByZXNldCB0byByZS1wcm9ncmFtIHRoZSByZWdpc3RlcnMgdGhhdAomIzQzOyAqIENUUkwuUlNUIGNsZWFycy4gIEV4cGVjdHMgYmFyMCB0byBiZSBtYXBwZWQgYW5kIE1TSS1YIGFscmVhZHkgZW5hYmxlZAomIzQzOyAqIHZpYSBWRklPLgomIzQzOyAqLwomIzQzO3N0YXRpYyB2b2lkIGlnYl9od19pbml0KHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBpZ2IgKmlnYiA9IHRvX2lnYl9zdGF0ZShkZXZpY2UpOwomIzQzOwl1NjQgaW92YV90eCwgaW92YV9yeDsKJiM0MzsJdTMyIGN0cmwsIHJjdGw7CiYjNDM7CXUxNiBjbWRfcmVnOwomIzQzOwlpbnQgcmV0cmllczsKJiM0MzsKJiM0MzsJaW92YV90eCA9IHRvX2lvdmEoZGV2aWNlLCBpZ2ItJmd0O3R4X3JpbmcpOwomIzQzOwlpb3ZhX3J4ID0gdG9faW92YShkZXZpY2UsIGlnYi0mZ3Q7cnhfcmluZyk7CiYjNDM7CiYjNDM7CS8qIFNpZ25hbCB0aGF0IHRoZSBkcml2ZXIgaXMgbG9hZGVkICovCiYjNDM7CWN0cmwgPSBpZ2JfcmVhZDMyKGlnYiwgRTEwMDBfQ1RSTF9FWFQpOwomIzQzOwljdHJsIHw9IEUxMDAwX0NUUkxfRVhUX0RSVl9MT0FEOwomIzQzOwljdHJsICZhbXA7PSB+RTEwMDBfQ1RSTF9FWFRfTElOS19NT0RFX01BU0s7CiYjNDM7CWlnYl93cml0ZTMyKGlnYiwgRTEwMDBfQ1RSTF9FWFQsIGN0cmwpOwomIzQzOwomIzQzOwkvKiBFbmFibGUgUENJIEJ1cyBNYXN0ZXIuICovCiYjNDM7CWNtZF9yZWcgPSB2ZmlvX3BjaV9jb25maWdfcmVhZHcoZGV2aWNlLCBQQ0lfQ09NTUFORCk7CiYjNDM7CWlmICgoY21kX3JlZyAmYW1wOyAoUENJX0NPTU1BTkRfTUFTVEVSIHwgUENJX0NPTU1BTkRfTUVNT1JZKSkgIT0KJiM0MzsJICAgIChQQ0lfQ09NTUFORF9NQVNURVIgfCBQQ0lfQ09NTUFORF9NRU1PUlkpKSB7CiYjNDM7CQljbWRfcmVnIHw9IChQQ0lfQ09NTUFORF9NQVNURVIgfCBQQ0lfQ09NTUFORF9NRU1PUlkpOwomIzQzOwkJdmZpb19wY2lfY29uZmlnX3dyaXRldyhkZXZpY2UsIFBDSV9DT01NQU5ELCBjbWRfcmVnKTsKJiM0MzsJfQomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBEaXNhYmxlIERNQSByZS1zZW5kIG9uIFBDSWUgY29tcGxldGlvbiB0aW1lb3V0ICg4MjU3NiBkYXRhc2hlZXQKJiM0MzsJICogc2VjdGlvbiA4LjYuMSwgR0NSLkNvbXBsZXRpb25fVGltZW91dF9SZXNlbmQsIGJpdCAxNikuICBUaGUKJiM0MzsJICogbWl4X2FuZF9tYXRjaCB0ZXN0IGludGVudGlvbmFsbHkgc3VibWl0cyBkZXNjcmlwdG9ycyB0YXJnZXRpbmcKJiM0MzsJICogdW5tYXBwZWQgSU9WQXM7IHdpdGggdGhlIGRlZmF1bHQgKHNldCkgdmFsdWUsIHRoZSBkZXZpY2Uga2VlcHMKJiM0MzsJICogcmV0cnlpbmcgdGhlIGZhaWxlZCByZWFkIGluZGVmaW5pdGVseSwgd2hpY2gga2VlcHMgUENJZSBBRVIgYW5kCiYjNDM7CSAqIElPTU1VIGVycm9yIGhhbmRsaW5nIGJ1c3kgYW5kIGludGVyZmVyZXMgd2l0aCByZXNldCByZWNvdmVyeS4KJiM0MzsJICovCiYjNDM7CWN0cmwgPSBpZ2JfcmVhZDMyKGlnYiwgRTEwMDBfR0NSKTsKJiM0MzsJY3RybCAmYW1wOz0gfkUxMDAwX0dDUl9DTVBMX1RNT1VUX1JFU0VORDsKJiM0MzsJaWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9HQ1IsIGN0cmwpOwomIzQzOwomIzQzOwkvKiBDb25maWd1cmUgUEhZIGludGVybmFsIGxvb3BiYWNrIGZvciB0ZXN0aW5nLiAqLwomIzQzOwlpZ2Jfc2V0dXBfbG9vcGJhY2soaWdiKTsKJiM0MzsKJiM0MzsJLyogQ29uZmlndXJlIFRYIGFuZCBSWCBkZXNjcmlwdG9yIHJpbmdzICovCiYjNDM7CWlnYl93cml0ZTMyKGlnYiwgRTEwMDBfVERCQUwoMCksICh1MzIpaW92YV90eCk7CiYjNDM7CWlnYl93cml0ZTMyKGlnYiwgRTEwMDBfVERCQUgoMCksICh1MzIpKGlvdmFfdHggJmd0OyZndDsgMzIpKTsKJiM0MzsJaWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9URExFTigwKSwgUklOR19TSVpFICogc2l6ZW9mKHN0cnVjdCBpZ2JfdHhfZGVzYykpOwomIzQzOwlpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX1RESCgwKSwgMCk7CiYjNDM7CWlnYl93cml0ZTMyKGlnYiwgRTEwMDBfVERUKDApLCAwKTsKJiM0MzsJaWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9UWERDVEwoMCksIEUxMDAwX1RYRENUTF9RVUVVRV9FTkFCTEUpOwomIzQzOwomIzQzOwlpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX1JEQkFMKDApLCAodTMyKWlvdmFfcngpOwomIzQzOwlpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX1JEQkFIKDApLCAodTMyKShpb3ZhX3J4ICZndDsmZ3Q7IDMyKSk7CiYjNDM7CWlnYl93cml0ZTMyKGlnYiwgRTEwMDBfUkRMRU4oMCksIFJJTkdfU0laRSAqIHNpemVvZihzdHJ1Y3QgaWdiX3J4X2Rlc2MpKTsKJiM0MzsJaWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9SREgoMCksIDApOwomIzQzOwlpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX1JEVCgwKSwgMCk7CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIFNlbGVjdCB0aGUgYWR2YW5jZWQgb25lLWJ1ZmZlciBkZXNjcmlwdG9yIGZvcm1hdC4gIFBlciA4MjU3NgomIzQzOwkgKiBkYXRhc2hlZXQgc2VjdGlvbiA3LjEuNS4yOiAmIzM0O1NSUkNUTFtuXS5ERVNDVFlQRSBtdXN0IGJlIHNldCB0byBhCiYjNDM7CSAqIHZhbHVlIG90aGVyIHRoYW4gMDAwYiBmb3IgdGhlIDgyNTc2IHRvIHdyaXRlIGJhY2sgdGhlIHNwZWNpYWwKJiM0MzsJICogZGVzY3JpcHRvcnMuJiMzNDsgIHN0cnVjdCBpZ2JfcnhfZGVzYyBtYXRjaGVzIHRoZSBhZHZhbmNlZCBvbmUtYnVmZmVyCiYjNDM7CSAqIHdyaXRlYmFjayBsYXlvdXQgKHNlY3Rpb24gNy4xLjUuMiksIHNvIHBvbGxpbmcgcngud2Iuc3RhdHVzX2Vycm9yCiYjNDM7CSAqIHJlcXVpcmVzIHRoaXMgZm9ybWF0LiAgU2VjdGlvbiA4LjEwLjIgc3BlY2lmaWVzIERFU0NUWVBFWzI3OjI1XS4KJiM0MzsJICoKJiM0MzsJICogVGhlIGRpcmVjdCB3cml0ZSBhbHNvIHplcm9lcyBTUlJDVEwuQlNJWkVQQUNLRVQsIHdoaWNoIGlzCiYjNDM7CSAqIGludGVudGlvbmFsOiBwZXIgc2VjdGlvbiA3LjEuMy4xIGEgemVybyBCU0laRVBBQ0tFVCBmYWxscyBiYWNrIHRvCiYjNDM7CSAqIHRoZSBSQ1RMLkJTSVpFIGJ1ZmZlciBzaXplLCB3aG9zZSByZXNldCBkZWZhdWx0ICgwMGIpIGlzIDIwNDgKJiM0MzsJICogYnl0ZXMgLS0gYW1wbGUgZm9yIHRoZSBsb29wYmFjayBmcmFtZXMgaGVyZS4KJiM0MzsJICovCiYjNDM7CWlnYl93cml0ZTMyKGlnYiwgRTEwMDBfU1JSQ1RMKDApLCBFMTAwMF9TUlJDVExfREVTQ1RZUEVfQURWX09ORUJVRik7CiYjNDM7CiYjNDM7CWlnYl93cml0ZTMyKGlnYiwgRTEwMDBfUlhEQ1RMKDApLCBFMTAwMF9SWERDVExfUVVFVUVfRU5BQkxFKTsKJiM0MzsKJiM0MzsJLyogV2FpdCBmb3IgVFggYW5kIFJYIHF1ZXVlcyB0byBiZSBlbmFibGVkICovCiYjNDM7CXJldHJpZXMgPSAyMDAwOwomIzQzOwl3aGlsZSAocmV0cmllcy0tICZndDsgMCkgewomIzQzOwkJaWYgKChpZ2JfcmVhZDMyKGlnYiwgRTEwMDBfVFhEQ1RMKDApKSAmYW1wOyBFMTAwMF9UWERDVExfUVVFVUVfRU5BQkxFKSAmYW1wOyZhbXA7CiYjNDM7CQkgICAgKGlnYl9yZWFkMzIoaWdiLCBFMTAwMF9SWERDVEwoMCkpICZhbXA7IEUxMDAwX1JYRENUTF9RVUVVRV9FTkFCTEUpKQomIzQzOwkJCWJyZWFrOwomIzQzOwkJdXNsZWVwKDEwKTsKJiM0MzsJfQomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBFbmFibGUgUmVjZWl2ZXIgYW5kIFRyYW5zbWl0dGVyLiAgUkNUTC5MQk1fTUFDIGlzIHNldCBpbiBhZGRpdGlvbgomIzQzOwkgKiB0byBQSFkgbG9vcGJhY2sgYXMgYSBRRU1VLW9ubHkgYWNjb21tb2RhdGlvbjogUUVNVSYjMzk7cyBlbXVsYXRlZCBpZ2IKJiM0MzsJICogZG9lcyBub3QgaG9ub3IgUEhZIHJlZ2lzdGVyIDAgYml0IDE0IChQSFkgaW50ZXJuYWwgbG9vcGJhY2spIGFuZAomIzQzOwkgKiByZWxpZXMgb24gUkNUTC5MQk1fTUFDIHRvIHdyYXAgVFggZGVzY3JpcHRvcnMgYmFjayB0byB0aGUgUlgKJiM0MzsJICogcXVldWUuICBEYXRhc2hlZXQgOC4xMC4xIChSQ1RMIHJlZ2lzdGVyKSBhZHZpc2VzICYjMzQ7V2hlbiB1c2luZyB0aGUKJiM0MzsJICogaW50ZXJuYWwgUEhZLCBMQk0gc2hvdWxkIHJlbWFpbiBzZXQgdG8gMDBiJiMzNDssIHNvIHNldHRpbmcgTEJNX01BQwomIzQzOwkgKiBoZXJlIGRldmlhdGVzIGZyb20gZGF0YXNoZWV0IGd1aWRhbmNlOyBlbXBpcmljYWxseSB0aGUgYml0IGhhcwomIzQzOwkgKiBubyBvYnNlcnZhYmxlIGVmZmVjdCBvbiByZWFsIDgyNTc2IGhhcmR3YXJlIGJlY2F1c2UgTUFDIGxvb3BiYWNrCiYjNDM7CSAqIGlzIG5vdCBpbXBsZW1lbnRlZCAoZGF0YXNoZWV0IDMuNS42LjIpLiAgU2V0dGluZyBib3RoIGxldHMgdGhlCiYjNDM7CSAqIHNlbGZ0ZXN0IHdvcmsgb24gYm90aCByZWFsIGhhcmR3YXJlIGFuZCBRRU1VIHdpdGhvdXQgY29uZGl0aW9uYWwKJiM0MzsJICogY29kZSBwYXRocy4KJiM0MzsJICovCiYjNDM7CXJjdGwgPSBFMTAwMF9SQ1RMX0VOIHwgICAgICAgLyogUmVjZWl2ZXIgRW5hYmxlICovCiYjNDM7CSAgICAgICBFMTAwMF9SQ1RMX1VQRSB8ICAgICAgLyogVW5pY2FzdCBQcm9taXNjdW91cyAoZm9yIGR1bW15IE1BQykgKi8KJiM0MzsJICAgICAgIEUxMDAwX1JDVExfTEJNX01BQyB8ICAvKiBNQUMgTG9vcGJhY2sgLSBmb3IgUUVNVSBlbXVsYXRpb24gb25seSAqLwomIzQzOwkgICAgICAgRTEwMDBfUkNUTF9TRUNSQzsgICAgIC8qIFN0cmlwIENSQyAobmVlZGVkIGZvciBtZW1jbXApICovCiYjNDM7CWlnYl93cml0ZTMyKGlnYiwgRTEwMDBfUkNUTCwgcmN0bCk7CiYjNDM7CWlnYl93cml0ZTMyKGlnYiwgRTEwMDBfVENUTCwgRTEwMDBfVENUTF9FTik7CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIFByb2dyYW0gTVNJLVggaW50ZXJydXB0IHJvdXRpbmcgcGVyIDgyNTc2IGRhdGFzaGVldDoKJiM0MzsJICoKJiM0MzsJICogR1BJRSAoc2VjdGlvbiA3LjMuMi4xMSwgVGFibGUgNy00Nyk6IHNldCBNdWx0aXBsZV9NU0lYIChiaXQgNCkgdG8KJiM0MzsJICogcm91dGUgaW50ZXJydXB0IGNhdXNlcyB0aHJvdWdoIElWQVIgbWFwcGluZywgYW5kIEVJQU1FIChiaXQgMzApCiYjNDM7CSAqIHRvIGFwcGx5IEVJQU0gb24gTVNJLVggYXNzZXJ0aW9uICh3aXRob3V0IEVJQU1FLCBFSUFNIG9ubHkKJiM0MzsJICogYXBwbGllcyBvbiBFSUNSIHJlYWQvd3JpdGUpLgomIzQzOwkgKgomIzQzOwkgKiBFSUFDIChzZWN0aW9uIDguOC41KTogZW5hYmxlIGF1dG8tY2xlYXIgb2YgRUlDUiBmb3IgdmVjdG9yIDAuCiYjNDM7CSAqIFdpdGhvdXQgYXV0by1jbGVhciB0aGUgY2F1c2Ugc3RheXMgc2V0IGFmdGVyIGRlbGl2ZXJ5IGFuZCB0aGUKJiM0MzsJICogdGVzdCBjYW4gc2VlIHNwdXJpb3VzIGludGVycnVwdHMgb24gdGhlIG5leHQgbWVtY3B5IGJhdGNoLgomIzQzOwkgKgomIzQzOwkgKiBFSUFNIChzZWN0aW9uIDguOC42KTogZW5hYmxlIGF1dG8tbWFzayBvZiBFSU1TIGZvciB2ZWN0b3IgMCBvbgomIzQzOwkgKiBNU0ktWCBhc3NlcnRpb24gKGVmZmVjdGl2ZSBiZWNhdXNlIEVJQU1FIGlzIHNldCksIHNvIGEgc2luZ2xlCiYjNDM7CSAqIGludGVycnVwdCBpcyBkZWxpdmVyZWQgcGVyIG1lbWNweSBiYXRjaCBldmVuIGlmIHRoZSBjYXVzZQomIzQzOwkgKiByZS1hc3NlcnRzIGJlZm9yZSBzb2Z0d2FyZSByZS1lbmFibGVzIHRoZSBtYXNrLgomIzQzOwkgKgomIzQzOwkgKiBJVkFSIChzZWN0aW9uIDcuMy4xLjIsIHJlZ2lzdGVyIGRlZmluaXRpb24gaW4gOC44LjEzKTogbWFwIFJYCiYjNDM7CSAqIGNhdXNlIDAgdG8gTVNJLVggdmVjdG9yIDAgYW5kIG1hcmsgdGhlIGVudHJ5IHZhbGlkLgomIzQzOwkgKi8KJiM0MzsJaWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9HUElFLCBFMTAwMF9HUElFX01TSVhfTU9ERSB8IEUxMDAwX0dQSUVfRUlBTUUpOwomIzQzOwlpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX0VJQUMsIEUxMDAwX0VJQ1JfUlhfUVVFVUUwKTsKJiM0MzsJaWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9FSUFNLCBFMTAwMF9FSUNSX1JYX1FVRVVFMCk7CiYjNDM7CiYjNDM7CS8qIE1hcCB2ZWN0b3IgMCB0byBpbnRlcnJ1cHQgY2F1c2UgMCBhbmQgbWFyayBpdCB2YWxpZCAqLwomIzQzOwlpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX0lWQVIwLCBFMTAwMF9JVkFSX1ZBTElEKTsKJiM0MzsKJiM0MzsJLyogRW5hYmxlIGludGVycnVwdHMgb24gdmVjdG9yIDAgKi8KJiM0MzsJaWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9FSU1TLCBFMTAwMF9FSUNSX1JYX1FVRVVFMCk7CiYjNDM7CiYjNDM7CS8qIEluaXRpYWxpemUgZHJpdmVyIHN0YXRlIGFuZCBjYXBhYmlsaXR5IGxpbWl0cyAqLwomIzQzOwlpZ2ItJmd0O3R4X3RhaWwgPSAwOwomIzQzOwlpZ2ItJmd0O3J4X3RhaWwgPSAwOwomIzQzOwomIzQzOwlkZXZpY2UtJmd0O2RyaXZlci5tYXhfbWVtY3B5X3NpemUgPSBJR0JfTUFYX0NIVU5LX1NJWkU7CiYjNDM7CWRldmljZS0mZ3Q7ZHJpdmVyLm1heF9tZW1jcHlfY291bnQgPSBSSU5HX1NJWkUgLSAxOwomIzQzOwlkZXZpY2UtJmd0O2RyaXZlci5tc2kgPSBNU0lYX1ZFQ1RPUjsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgaWdiX2luaXQoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlKQomIzQzO3sKJiM0MzsJc3RydWN0IGlnYiAqaWdiID0gdG9faWdiX3N0YXRlKGRldmljZSk7CiYjNDM7CiYjNDM7CVZGSU9fQVNTRVJUX0dFKGRldmljZS0mZ3Q7ZHJpdmVyLnJlZ2lvbi5zaXplLCBzaXplb2Yoc3RydWN0IGlnYikpOwomIzQzOwomIzQzOwlpZ2ItJmd0O2JhcjAgPSBkZXZpY2UtJmd0O2JhcnNbMF0udmFkZHI7CiYjNDM7CiYjNDM7CS8qIFJlc2V0IGRldmljZSBhbmQgZGlzYWJsZSBhbGwgaW50ZXJydXB0cy4gKi8KJiM0MzsJaWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9DVFJMLCBpZ2JfcmVhZDMyKGlnYiwgRTEwMDBfQ1RSTCkgfCBFMTAwMF9DVFJMX1JTVCk7CiYjNDM7CS8qCiYjNDM7CSAqIE11c3Qgd2FpdCBhdCBsZWFzdCAxIG1pbGxpc2Vjb25kIGFmdGVyIHNldHRpbmcgdGhlIHJlc2V0IGJpdCBiZWZvcmUKJiM0MzsJICogY2hlY2tpbmcgaWYgdGhpcyBkZXZpY2UgaXMgcmVhZHkgdG8gYmUgdXNlZCAoODI1NzYgZGF0YXNoZWV0IHNlY3Rpb24KJiM0MzsJICogNC4yLjEuNi4xKS4KJiM0MzsJICovCiYjNDM7CXVzbGVlcCgxMDAwKTsKJiM0MzsJd2hpbGUgKGlnYl9yZWFkMzIoaWdiLCBFMTAwMF9DVFJMKSAmYW1wOyBFMTAwMF9DVFJMX1JTVCkKJiM0MzsJCXVzbGVlcCgxMCk7CiYjNDM7CWlnYl93cml0ZTMyKGlnYiwgRTEwMDBfSU1DLCAweEZGRkZGRkZGKTsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogRW5hYmxlIE1TSS1YIHZpYSBWRklPIGJlZm9yZSBkZXZpY2Utc2lkZSByZWdpc3RlciBwcm9ncmFtbWluZy4KJiM0MzsJICogdmZpb19wY2lfbXNpeF9lbmFibGUoKSBvbmx5IHRvdWNoZXMgdGhlIFZGSU8gSVJRIG1hY2hpbmVyeSBhbmQgdGhlCiYjNDM7CSAqIFBDSSBNU0ktWCBjYXBhYmlsaXR5IHZpYSBjb25maWcgc3BhY2U7IGl0IGhhcyBubyBvcmRlcmluZwomIzQzOwkgKiBkZXBlbmRlbmN5IG9uIHRoZSBkZXZpY2Utc2lkZSB3cml0ZXMgcGVyZm9ybWVkIGJ5IGlnYl9od19pbml0KCkuCiYjNDM7CSAqIFBsYWNpbmcgaXQgaGVyZSBrZWVwcyBpZ2JfaHdfaW5pdCgpIHJldXNhYmxlIGZyb20gdGhlIHJlc2V0CiYjNDM7CSAqIHJlY292ZXJ5IHBhdGggKHdoaWNoIGNhbGxzIHZmaW9fcGNpX2lycV9yZWVuYWJsZSgpIGluc3RlYWQpLgomIzQzOwkgKi8KJiM0MzsJdmZpb19wY2lfbXNpeF9lbmFibGUoZGV2aWNlLCBNU0lYX1ZFQ1RPUiwgMSk7CiYjNDM7CiYjNDM7CWlnYl9od19pbml0KGRldmljZSk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIGlnYl9yZW1vdmUoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlKQomIzQzO3sKJiM0MzsJc3RydWN0IGlnYiAqaWdiID0gdG9faWdiX3N0YXRlKGRldmljZSk7CiYjNDM7CiYjNDM7CXZmaW9fcGNpX21zaXhfZGlzYWJsZShkZXZpY2UpOwomIzQzOwlpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX1JDVEwsIDApOwomIzQzOwlpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX1RDVEwsIDApOwomIzQzOwlpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX0NUUkwsIGlnYl9yZWFkMzIoaWdiLCBFMTAwMF9DVFJMKSB8IEUxMDAwX0NUUkxfUlNUKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgaWdiX2lycV9kaXNhYmxlKHN0cnVjdCBpZ2IgKmlnYikKJiM0Mzt7CiYjNDM7CWlnYl93cml0ZTMyKGlnYiwgRTEwMDBfRUlNQywgRTEwMDBfRUlDUl9SWF9RVUVVRTApOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBpZ2JfaXJxX2VuYWJsZShzdHJ1Y3QgaWdiICppZ2IpCiYjNDM7ewomIzQzOwlpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX0VJTVMsIEUxMDAwX0VJQ1JfUlhfUVVFVUUwKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgaWdiX2lycV9jbGVhcihzdHJ1Y3QgaWdiICppZ2IpCiYjNDM7ewomIzQzOwkvKgomIzQzOwkgKiBVc2Ugd3JpdGUtdG8tY2xlYXIgKGRhdGFzaGVldCA3LjMuNC4yKS4gIEluIE1TSS1YIG1vZGUgd2l0aCBFSUFDCiYjNDM7CSAqIHByb2dyYW1tZWQsIHNlY3Rpb24gOC44LjUgZXhwbGljaXRseSBzdGF0ZXMgJiMzNDtJZiBhbnkgYml0cyBhcmUgc2V0CiYjNDM7CSAqIGluIEVJQUMsIHRoZSBFSUNSIHJlZ2lzdGVyIHNob3VsZCBub3QgYmUgcmVhZCYjMzQ7LCB3aGljaCBydWxlcyBvdXQKJiM0MzsJICogdGhlIHJlYWQtdG8tY2xlYXIgcGF0aCBpbiA3LjMuNC4zLiAgQml0cyBub3QgaW4gRUlBQyBhcmUgc3RpbGwKJiM0MzsJICogY2xlYXJlZCBieSB3cml0aW5nIDEuCiYjNDM7CSAqLwomIzQzOwlpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX0VJQ1IsIDB4RkZGRkZGRkYpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBpZ2JfbWVtY3B5X3N0YXJ0KHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSwgaW92YV90IHNyYywKJiM0MzsJCQkgICAgIGlvdmFfdCBkc3QsIHU2NCBzaXplLCB1NjQgY291bnQpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgaWdiICppZ2IgPSB0b19pZ2Jfc3RhdGUoZGV2aWNlKTsKJiM0MzsJc3RydWN0IGlnYl9yeF9kZXNjICpyeDsKJiM0MzsJc3RydWN0IGlnYl90eF9kZXNjICp0eDsKJiM0MzsJdTMyIGk7CiYjNDM7CiYjNDM7CWlnYl9pcnFfZGlzYWJsZShpZ2IpOwomIzQzOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgY291bnQ7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQl0eCA9ICZhbXA7aWdiLSZndDt0eF9yaW5nW2lnYi0mZ3Q7dHhfdGFpbF07CiYjNDM7CQlyeCA9ICZhbXA7aWdiLSZndDtyeF9yaW5nW2lnYi0mZ3Q7cnhfdGFpbF07CiYjNDM7CiYjNDM7CQltZW1zZXQodHgsIDAsIHNpemVvZihzdHJ1Y3QgaWdiX3R4X2Rlc2MpKTsKJiM0MzsJCW1lbXNldChyeCwgMCwgc2l6ZW9mKHN0cnVjdCBpZ2JfcnhfZGVzYykpOwomIzQzOwomIzQzOwkJcngtJmd0O3JlYWQucGt0X2FkZHIgPSBjcHVfdG9fbGU2NChkc3QpOwomIzQzOwkJcngtJmd0O3JlYWQuaGRyX2FkZHIgPSBjcHVfdG9fbGU2NCgwKTsKJiM0MzsKJiM0MzsJCXR4LSZndDtyZWFkLmJ1ZmZlcl9hZGRyID0gY3B1X3RvX2xlNjQoc3JjKTsKJiM0MzsJCS8qCiYjNDM7CQkgKiBCdWlsZCBhbiBhZHZhbmNlZCBkYXRhIGRlc2NyaXB0b3IgcGVyIDgyNTc2IGRhdGFzaGVldAomIzQzOwkJICogc2VjdGlvbiA3LjIuMi4zLiAgREVYVCBtYXJrcyB0aGUgZGVzY3JpcHRvciBhcyBhZHZhbmNlZAomIzQzOwkJICogKHJlcXVpcmVkIGJ5IGhhcmR3YXJlKTsgRFRZUD1kYXRhIHNlbGVjdHMgdGhlIGRhdGEKJiM0MzsJCSAqIGRlc2NyaXB0b3I7IElGQ1MgYXNrcyB0aGUgTUFDIHRvIGFwcGVuZCB0aGUgRXRoZXJuZXQKJiM0MzsJCSAqIEZDUyAod2l0aG91dCBpdCB0aGUgZnJhbWUgaXMgZHJvcHBlZCBhcyBtYWxmb3JtZWQpOwomIzQzOwkJICogRU9QIG1hcmtzIGVuZCBvZiBwYWNrZXQuICBEVEFMRU4gaXMgdGhlIGJ1ZmZlciBsZW5ndGgKJiM0MzsJCSAqIGluIGJpdHMgMTU6MCBvZiBjbWRfdHlwZV9sZW4uCiYjNDM7CQkgKi8KJiM0MzsJCXR4LSZndDtyZWFkLmNtZF90eXBlX2xlbiA9IGNwdV90b19sZTMyKCh1aW50MzJfdClzaXplIHwKJiM0MzsJCQlFMTAwMF9BRFZUWERfRFRZUF9EQVRBIHwKJiM0MzsJCQlFMTAwMF9BRFZUWERfRENNRF9ERVhUIHwKJiM0MzsJCQlFMTAwMF9BRFZUWERfRENNRF9JRkNTIHwKJiM0MzsJCQlFMTAwMF9BRFZUWERfRENNRF9FT1ApOwomIzQzOwkJLyoKJiM0MzsJCSAqIFBBWUxFTiAoc2VjdGlvbiA3LjIuMi4zLjExKSBpcyB0aGUgdG90YWwgcGF5bG9hZCBzaXplCiYjNDM7CQkgKiBpbiBvbGluZm9fc3RhdHVzWzMxOjE0XS4KJiM0MzsJCSAqLwomIzQzOwkJdHgtJmd0O3JlYWQub2xpbmZvX3N0YXR1cyA9CiYjNDM7CQkJY3B1X3RvX2xlMzIoKHVpbnQzMl90KXNpemUgJmx0OyZsdDsgRTEwMDBfQURWVFhEX1BBWUxFTl9TSElGVCk7CiYjNDM7CiYjNDM7CQlpZ2ItJmd0O3R4X3RhaWwgPSAoaWdiLSZndDt0eF90YWlsICYjNDM7IDEpICUgUklOR19TSVpFOwomIzQzOwkJaWdiLSZndDtyeF90YWlsID0gKGlnYi0mZ3Q7cnhfdGFpbCAmIzQzOyAxKSAlIFJJTkdfU0laRTsKJiM0MzsJfQomIzQzOwomIzQzOwlpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX1JEVCgwKSwgaWdiLSZndDtyeF90YWlsKTsKJiM0MzsJaWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9URFQoMCksIGlnYi0mZ3Q7dHhfdGFpbCk7CiYjNDM7fQomIzQzOwomIzQzOy8qCiYjNDM7ICogUmVzZXQgdGhlIGRldmljZSB2aWEgVkZJT19ERVZJQ0VfUkVTRVQgKFBDSWUgRkxSIG9uIHRoZSA4MjU3NikgYW5kCiYjNDM7ICogcmUtcHJvZ3JhbSBpdC4gIFZGSU9fREVWSUNFX1JFU0VUIHRlYXJzIGRvd24gdGhlIGtlcm5lbC1zaWRlIE1TSS1YCiYjNDM7ICogdHJpZ2dlciBidXQgbGVhdmVzIHVzZXItc2lkZSBldmVudGZkcyBpbnRhY3QsIHNvIHJlLWFybSB0aGUgdHJpZ2dlcgomIzQzOyAqIHZpYSB2ZmlvX3BjaV9pcnFfcmVlbmFibGUoKSBiZWZvcmUgcmVwcm9ncmFtbWluZyBzbyBhbnkgY2FsbGVyLWNhY2hlZAomIzQzOyAqIGV2ZW50ZmQgcmVtYWlucyB2YWxpZC4KJiM0MzsgKgomIzQzOyAqIEZMUiBjbGVhcnMgZGV2aWNlLXNpZGUgc3RhdGUgdG8gcG93ZXItb24gcmVzZXQgdmFsdWVzIChkYXRhc2hlZXQKJiM0MzsgKiA0LjIuMS41LjE6IGEgUEYgRkxSIGlzICYjMzQ7ZXF1aXZhbGVudCB0byBhIEQwLSZndDtEMy0mZ3Q7RDAgdHJhbnNpdGlvbiYjMzQ7KSwgc28KJiM0MzsgKiBFSU1TIGFuZCBFSUNSIGNvbWUgYmFjayBhcyAwIGZyb20gdGhlaXIgcmVnaXN0ZXItZGVmaW5lZCBpbml0aWFsCiYjNDM7ICogdmFsdWVzLCBhbmQgaWdiX2h3X2luaXQoKSByZXNldHMgdHhfdGFpbC9yeF90YWlsIHRvIDAuICBUaGUgbmV4dAomIzQzOyAqIGlnYl9tZW1jcHlfc3RhcnQoKSB3aWxsIG1lbXNldCBlYWNoIGRlc2NyaXB0b3IgaXQgdG91Y2hlcyBiZWZvcmUKJiM0MzsgKiBzdWJtaXNzaW9uLCBzbyBubyBleHBsaWNpdCBJTUMvRUlDUiB3cml0ZXMgb3IgcmluZyBtZW1zZXRzIGFyZQomIzQzOyAqIG5lZWRlZCBoZXJlLgomIzQzOyAqLwomIzQzO3N0YXRpYyB2b2lkIGlnYl9lcnJvcl9yZXNldF9hbmRfcmVpbml0KHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSkKJiM0Mzt7CiYjNDM7CXZmaW9fcGNpX2RldmljZV9yZXNldChkZXZpY2UpOwomIzQzOwl2ZmlvX3BjaV9tc2l4X3JlZW5hYmxlKGRldmljZSwgTVNJWF9WRUNUT1IsIDEpOwomIzQzOwlpZ2JfaHdfaW5pdChkZXZpY2UpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IGlnYl9tZW1jcHlfd2FpdChzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgaWdiICppZ2IgPSB0b19pZ2Jfc3RhdGUoZGV2aWNlKTsKJiM0MzsJc3RydWN0IGlnYl9yeF9kZXNjICpyeDsKJiM0MzsJdTMyIHN0YXR1cyA9IDA7CiYjNDM7CXUzMiBwcmV2X3RhaWw7CiYjNDM7CWludCByZXRyaWVzOwomIzQzOwomIzQzOwlwcmV2X3RhaWwgPSAoaWdiLSZndDtyeF90YWlsICYjNDM7IFJJTkdfU0laRSAtIDEpICUgUklOR19TSVpFOwomIzQzOwlyeCA9ICZhbXA7aWdiLSZndDtyeF9yaW5nW3ByZXZfdGFpbF07CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIFJlYWwgODI1NzYgaGFyZHdhcmUgcHJvY2Vzc2VzIHRoZSBkZXNjcmlwdG9yIHJpbmcgYXQgbGluZSByYXRlLgomIzQzOwkgKiBtYXhfbWVtY3B5X3NpemUgPSAoUklOR19TSVpFIC0gMSkgKiBJR0JfTUFYX0NIVU5LX1NJWkUgfj0gNCBNQiwKJiM0MzsJICogc3BsaXQgaW50byA0MDk1IDEgS0IgZnJhbWVzLiAgQXQgMSBHYi9zICh+MTI1IE1CL3MpIHRoZSB3b3JzdAomIzQzOwkgKiB2YWxpZCBtZW1jcHkgdGFrZXMgfjMyIG1zIG9uIHRoZSB3aXJlLCBwbHVzIHBlci1mcmFtZSBwcmVhbWJsZSwKJiM0MzsJICogU0ZELCBJRkcgYW5kIEZDUyBvdmVyaGVhZCAofjMlKSBhbmQgZGVzY3JpcHRvciBmZXRjaC93cml0ZWJhY2sKJiM0MzsJICogbGF0ZW5jeS4gIFdhaXQgdXAgdG8gfjIwMCBtcyBiZWZvcmUgZGVjbGFyaW5nIHRoZSBkZXZpY2UgaHVuZzsKJiM0MzsJICogfjZ4IHRoZSBsaW5lLXJhdGUgZmxvb3IgbGVhdmVzIGNvbWZvcnRhYmxlIGhlYWRyb29tIGZvciBob3N0CiYjNDM7CSAqIHNjaGVkdWxpbmcgaml0dGVyIHdoaWxlIGtlZXBpbmcgdGhlIGludGVudGlvbmFsIGludmFsaWQtRE1BCiYjNDM7CSAqIHRlc3RzIGJvdW5kZWQuCiYjNDM7CSAqLwomIzQzOwlyZXRyaWVzID0gMjAwOwomIzQzOwl3aGlsZSAocmV0cmllcy0tICZndDsgMCkgewomIzQzOwkJc3RhdHVzID0gbGUzMl90b19jcHUoUkVBRF9PTkNFKHJ4LSZndDt3Yi5zdGF0dXNfZXJyb3IpKTsKJiM0MzsJCWlmIChzdGF0dXMgJmFtcDsgMSkKJiM0MzsJCQlicmVhazsKJiM0MzsJCXVzbGVlcCgxMDAwKTsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAoc3RhdHVzICZhbXA7IDEpCiYjNDM7CQkvKgomIzQzOwkJICogRW5zdXJlIHRoZSB0ZXN0IGNvZGUgZG9lc24mIzM5O3Qgc3BlY3VsYXRpdmVseSByZWFkIHRoZSBETUEKJiM0MzsJCSAqIGRlc3RpbmF0aW9uIGJ1ZmZlciBiZWZvcmUgd2UgaGF2ZSB2ZXJpZmllZCB0aGF0IHRoZQomIzQzOwkJICogZGVzY3JpcHRvciB3cml0ZWJhY2sgaXMgY29tcGxldGUuCiYjNDM7CQkgKi8KJiM0MzsJCXJtYigpOwomIzQzOwomIzQzOwlpZ2JfaXJxX2NsZWFyKGlnYik7CiYjNDM7CiYjNDM7CWlnYl9pcnFfZW5hYmxlKGlnYik7CiYjNDM7CiYjNDM7CWlmIChzdGF0dXMgJmFtcDsgMSkKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBUaGUgZGVzY3JpcHRvciBuZXZlciBjb21wbGV0ZWQuICBPbiByZWFsIDgyNTc2IGhhcmR3YXJlIHRoaXMKJiM0MzsJICogdHlwaWNhbGx5IGZvbGxvd3MgYSBETUEtcmVhZCBmYXVsdCBmcm9tIG9uZSBvZiB0aGUgaW50ZW50aW9uYWwKJiM0MzsJICogdW5tYXBwZWQtSU9WQSB0ZXN0czsgdGhlIGZhdWx0IGxlYXZlcyB0aGUgZGVzY3JpcHRvciBlbmdpbmUKJiM0MzsJICogdW5hYmxlIHRvIHNlcnZpY2Ugc3Vic2VxdWVudCB2YWxpZCBkZXNjcmlwdG9ycy4gIENUUkwuUlNUIGFsb25lCiYjNDM7CSAqIHJlaW5pdGlhbGl6ZXMgdGhlIHF1ZXVlIHJlZ2lzdGVycyBidXQgbGVhdmVzIHRoZSBlbmdpbmUgd2VkZ2VkCiYjNDM7CSAqIGZvciB0aGUgY3VycmVudCBwcm9jZXNzLCBzbyBhIGJyb2FkZXIgVkZJT19ERVZJQ0VfUkVTRVQgKEZMUikKJiM0MzsJICogaXMgcmVxdWlyZWQuCiYjNDM7CSAqCiYjNDM7CSAqIERlbGF5IGJlZm9yZSByZXF1ZXN0aW5nIHJlc2V0IHNvIFBDSWUvSU9NTVUvQUVSIGVycm9yIGhhbmRsaW5nCiYjNDM7CSAqIHRyaWdnZXJlZCBieSB0aGUganVzdC1vYnNlcnZlZCBETUEgZmF1bHQgY2FuIHJlbGVhc2UgdGhlIGRldmljZQomIzQzOwkgKiBsb2NrIFZGSU9fREVWSUNFX1JFU0VUIGNvbnRlbmRzIGZvci4gIFRoZSAxMCBtcyB2YWx1ZSBpcwomIzQzOwkgKiBoZXVyaXN0aWMuICBUaGUgY3VycmVudCBtZW1jcHkgc3RpbGwgZmFpbHMgd2l0aCAtRVRJTUVET1VUOwomIzQzOwkgKiByZWNvdmVyeSBvbmx5IGVuc3VyZXMgdGhlIG5leHQgbWVtY3B5IHN0YXJ0cyBmcm9tIGEgdXNhYmxlIHN0YXRlLgomIzQzOwkgKi8KJiM0MzsJdXNsZWVwKDEwMDAwKTsKJiM0MzsJaWdiX2Vycm9yX3Jlc2V0X2FuZF9yZWluaXQoZGV2aWNlKTsKJiM0MzsKJiM0MzsJcmV0dXJuIC1FVElNRURPVVQ7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIGlnYl9zZW5kX21zaShzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgaWdiICppZ2IgPSB0b19pZ2Jfc3RhdGUoZGV2aWNlKTsKJiM0MzsKJiM0MzsJaWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9FSUNTLCAxKTsKJiM0Mzt9CiYjNDM7CiYjNDM7Y29uc3Qgc3RydWN0IHZmaW9fcGNpX2RyaXZlcl9vcHMgaWdiX29wcyA9IHsKJiM0MzsJLm5hbWUgPSAmIzM0O2lnYiYjMzQ7LAomIzQzOwkucHJvYmUgPSBpZ2JfcHJvYmUsCiYjNDM7CS5pbml0ID0gaWdiX2luaXQsCiYjNDM7CS5yZW1vdmUgPSBpZ2JfcmVtb3ZlLAomIzQzOwkubWVtY3B5X3N0YXJ0ID0gaWdiX21lbWNweV9zdGFydCwKJiM0MzsJLm1lbWNweV93YWl0ID0gaWdiX21lbWNweV93YWl0LAomIzQzOwkuc2VuZF9tc2kgPSBpZ2Jfc2VuZF9tc2ksCiYjNDM7fTsKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2luY2x1ZGUvbGlidmZpby92ZmlvX3BjaV9kZXZpY2UuaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2luY2x1ZGUvbGlidmZpby92ZmlvX3BjaV9kZXZpY2UuaAppbmRleCAyODU4ODg1YTg5YmJiZi4uMmU2N2FmYzBkNTgwOTggMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2luY2x1ZGUvbGlidmZpby92ZmlvX3BjaV9kZXZpY2UuaAomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9pbmNsdWRlL2xpYnZmaW8vdmZpb19wY2lfZGV2aWNlLmgKQEAgLTY4LDYgJiM0Mzs2OCw4IEBAIHZvaWQgdmZpb19wY2lfY29uZmlnX2FjY2VzcyhzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UsIGJvb2wgd3JpdGUsCiB2b2lkIHZmaW9fcGNpX2lycV9lbmFibGUoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlLCB1MzIgaW5kZXgsCiAJCQkgdTMyIHZlY3RvciwgaW50IGNvdW50KTsKIHZvaWQgdmZpb19wY2lfaXJxX2Rpc2FibGUoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlLCB1MzIgaW5kZXgpOwomIzQzO3ZvaWQgdmZpb19wY2lfaXJxX3JlZW5hYmxlKHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSwgdTMyIGluZGV4LAomIzQzOwkJCSAgIHUzMiB2ZWN0b3IsIGludCBjb3VudCk7CiB2b2lkIHZmaW9fcGNpX2lycV90cmlnZ2VyKHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSwgdTMyIGluZGV4LCB1MzIgdmVjdG9yKTsKIAogc3RhdGljIGlubGluZSB2b2lkIGZjbnRsX3NldF9ub25ibG9jayhpbnQgZmQpCkBAIC05Miw2ICYjNDM7OTQsMTIgQEAgc3RhdGljIGlubGluZSB2b2lkIHZmaW9fcGNpX21zaV9kaXNhYmxlKHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSkKIAl2ZmlvX3BjaV9pcnFfZGlzYWJsZShkZXZpY2UsIFZGSU9fUENJX01TSV9JUlFfSU5ERVgpOwogfQogCiYjNDM7c3RhdGljIGlubGluZSB2b2lkIHZmaW9fcGNpX21zaV9yZWVuYWJsZShzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UsCiYjNDM7CQkJCQkgdTMyIHZlY3RvciwgaW50IGNvdW50KQomIzQzO3sKJiM0MzsJdmZpb19wY2lfaXJxX3JlZW5hYmxlKGRldmljZSwgVkZJT19QQ0lfTVNJX0lSUV9JTkRFWCwgdmVjdG9yLCBjb3VudCk7CiYjNDM7fQomIzQzOwogc3RhdGljIGlubGluZSB2b2lkIHZmaW9fcGNpX21zaXhfZW5hYmxlKHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSwKIAkJCQkJdTMyIHZlY3RvciwgaW50IGNvdW50KQogewpAQCAtMTAzLDYgJiM0MzsxMTEsMTIgQEAgc3RhdGljIGlubGluZSB2b2lkIHZmaW9fcGNpX21zaXhfZGlzYWJsZShzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UpCiAJdmZpb19wY2lfaXJxX2Rpc2FibGUoZGV2aWNlLCBWRklPX1BDSV9NU0lYX0lSUV9JTkRFWCk7CiB9CiAKJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgdmZpb19wY2lfbXNpeF9yZWVuYWJsZShzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UsCiYjNDM7CQkJCQkgIHUzMiB2ZWN0b3IsIGludCBjb3VudCkKJiM0Mzt7CiYjNDM7CXZmaW9fcGNpX2lycV9yZWVuYWJsZShkZXZpY2UsIFZGSU9fUENJX01TSVhfSVJRX0lOREVYLCB2ZWN0b3IsIGNvdW50KTsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgaW5saW5lIGludCBfX3RvX2lvdmEoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlLCB2b2lkICp2YWRkciwgaW92YV90ICppb3ZhKQogewogCXJldHVybiBfX2lvbW11X2h2YTJpb3ZhKGRldmljZS0mZ3Q7aW9tbXUsIHZhZGRyLCBpb3ZhKTsKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2xpYnZmaW8ubWsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9saWJ2ZmlvLm1rCmluZGV4IDlmNDdiY2VlZDE2ZjRjLi4xZjEzY2NhMDQzNDhiNCAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvbGlidmZpby5tawomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9saWJ2ZmlvLm1rCkBAIC0xMiw2ICYjNDM7MTIsNyBAQCBMSUJWRklPX0MgJiM0Mzs9IHZmaW9fcGNpX2RyaXZlci5jCiBpZmVxICgkKEFSQ0g6eDg2XzY0PXg4NikseDg2KQogTElCVkZJT19DICYjNDM7PSBkcml2ZXJzL2lvYXQvaW9hdC5jCiBMSUJWRklPX0MgJiM0Mzs9IGRyaXZlcnMvZHNhL2RzYS5jCiYjNDM7TElCVkZJT19DICYjNDM7PSBkcml2ZXJzL2lnYi9pZ2IuYwogZW5kaWYKIAogTElCVkZJT19PVVRQVVQgOj0gJChPVVRQVVQpL2xpYnZmaW8KZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL3ZmaW9fcGNpX2RldmljZS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvdmZpb19wY2lfZGV2aWNlLmMKaW5kZXggZmM3NWUwNGVmMDEwY2YuLjdiODM5NGQwYWM1MDc2IDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi92ZmlvX3BjaV9kZXZpY2UuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi92ZmlvX3BjaV9kZXZpY2UuYwpAQCAtMTA2LDYgJiM0MzsxMDYsMjggQEAgdm9pZCB2ZmlvX3BjaV9pcnFfZGlzYWJsZShzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UsIHUzMiBpbmRleCkKIAl2ZmlvX3BjaV9pcnFfc2V0KGRldmljZSwgaW5kZXgsIDAsIDAsIE5VTEwpOwogfQogCiYjNDM7LyoKJiM0MzsgKiBSZS1pc3N1ZSBWRklPX0RFVklDRV9TRVRfSVJRUyBmb3IgYW4gYWxyZWFkeS1lbmFibGVkIHZlY3RvciByYW5nZSB1c2luZwomIzQzOyAqIHRoZSBleGlzdGluZyBldmVudGZkcy4gIEludGVuZGVkIGZvciBkcml2ZXJzIHRoYXQgbmVlZCB0byByZS1hcm0gZGV2aWNlCiYjNDM7ICogaW50ZXJydXB0cyBhZnRlciBhIFZGSU9fREVWSUNFX1JFU0VULCB3aGljaCB0ZWFycyBkb3duIHRoZSBrZXJuZWwtc2lkZQomIzQzOyAqIElSUSB0cmlnZ2VyIGJ1dCBsZWF2ZXMgdXNlci1zaWRlIGV2ZW50ZmRzIGludGFjdC4gIFJlY3JlYXRpbmcgdGhlCiYjNDM7ICogZXZlbnRmZHMgd291bGQgaW52YWxpZGF0ZSBhbnkgdGVzdC1maXh0dXJlIGNhY2hlIG9mIHRoZSBmZCwgc28gdGhpcwomIzQzOyAqIGhlbHBlciBkZWxpYmVyYXRlbHkgcHJlc2VydmVzIHRoZW0uCiYjNDM7ICovCiYjNDM7dm9pZCB2ZmlvX3BjaV9pcnFfcmVlbmFibGUoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlLCB1MzIgaW5kZXgsCiYjNDM7CQkJICAgdTMyIHZlY3RvciwgaW50IGNvdW50KQomIzQzO3sKJiM0MzsJaW50IGk7CiYjNDM7CiYjNDM7CWNoZWNrX3N1cHBvcnRlZF9pcnFfaW5kZXgoaW5kZXgpOwomIzQzOwomIzQzOwlmb3IgKGkgPSB2ZWN0b3I7IGkgJmx0OyB2ZWN0b3IgJiM0MzsgY291bnQ7IGkmIzQzOyYjNDM7KQomIzQzOwkJVkZJT19BU1NFUlRfR0UoZGV2aWNlLSZndDttc2lfZXZlbnRmZHNbaV0sIDAsCiYjNDM7CQkJICAgICAgICYjMzQ7dmVjdG9yICVkIGV2ZW50ZmQgbm90IGFsbG9jYXRlZFxuJiMzNDssIGkpOwomIzQzOwomIzQzOwl2ZmlvX3BjaV9pcnFfc2V0KGRldmljZSwgaW5kZXgsIHZlY3RvciwgY291bnQsIGRldmljZS0mZ3Q7bXNpX2V2ZW50ZmRzICYjNDM7IHZlY3Rvcik7CiYjNDM7fQomIzQzOwogc3RhdGljIHZvaWQgdmZpb19wY2lfaXJxX2dldChzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UsIHUzMiBpbmRleCwKIAkJCSAgICAgc3RydWN0IHZmaW9faXJxX2luZm8gKmlycV9pbmZvKQogewpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvdmZpb19wY2lfZHJpdmVyLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi92ZmlvX3BjaV9kcml2ZXIuYwppbmRleCA2ODI3ZjRhNmZlYmU5OS4uYTVkMDU0NzEzMmM0MDUgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL3ZmaW9fcGNpX2RyaXZlci5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL3ZmaW9fcGNpX2RyaXZlci5jCkBAIC01LDEyICYjNDM7NSwxNCBAQAogI2lmZGVmIF9feDg2XzY0X18KIGV4dGVybiBzdHJ1Y3QgdmZpb19wY2lfZHJpdmVyX29wcyBkc2Ffb3BzOwogZXh0ZXJuIHN0cnVjdCB2ZmlvX3BjaV9kcml2ZXJfb3BzIGlvYXRfb3BzOwomIzQzO2V4dGVybiBzdHJ1Y3QgdmZpb19wY2lfZHJpdmVyX29wcyBpZ2Jfb3BzOwogI2VuZGlmCiAKIHN0YXRpYyBzdHJ1Y3QgdmZpb19wY2lfZHJpdmVyX29wcyAqZHJpdmVyX29wc1tdID0gewogI2lmZGVmIF9feDg2XzY0X18KIAkmYW1wO2RzYV9vcHMsCiAJJmFtcDtpb2F0X29wcywKJiM0MzsJJmFtcDtpZ2Jfb3BzLAogI2VuZGlmCiB9OwogCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzExIDE5OjEzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExOTU5CgkJCQkJCQlvdXRwdXQ6IDg5CgkJCQkJCQl0aG91Z2h0czogNzQyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKldvcnRoRnV6emluZyBEZWNpc2lvbiBmb3IgdmZpbyBzZWxmdGVzdHMqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gVGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgZHJpdmVyLCBgaWdiLmNgLCBhbmQgbW9kaWZpZXMgYSBmZXcgcmVsYXRlZCBmaWxlcyB3aXRoaW4gdGhlIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9kcml2ZXJzL2lnYi9gIGFuZCBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvYCBkaXJlY3Rvcmllcy4gIENydWNpYWxseSwgaXQmIzM5O3MgYWxsIGNvbnRhaW5lZCB3aXRoaW4gdGhlIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2AgZGlyZWN0b3J5LiBUaGF0IGltbWVkaWF0ZWx5IGZsYWdzIHRoaXMgYXMgc29tZXRoaW5nIHRoYXQmIzM5O3MgbGlrZWx5IG5vdCBwYXJ0IG9mIHRoZSBjb3JlIGtlcm5lbCBvciBkcml2ZXJzIEkgbmVlZCB0byB3b3JyeSBhYm91dCBpbiB0ZXJtcyBvZiBmdXp6aW5nLgoKTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHNlbGZ0ZXN0cyBhcmUgbm90IGZ1enplZCBieSBzeXprYWxsZXIuICBMZXQgbWUgY29uZmlybSBubyBvdGhlciBrZXJuZWwgY2hhbmdlcyBhcmUgaW50cm9kdWNlZC4gTm9wZSwgaXQmIzM5O3Mgc3RyaWN0bHkgY29uZmluZWQgdG8gYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vYC4KCk5vdywgbGV0IG1lIHJlY2FsbCB0aGUgcmVsZXZhbnQgcnVsZXMuICBUaGUgY3JpdGVyaWEgZm9yIHJldHVybmluZyBgV29ydGhGdXp6aW5nPWZhbHNlYCBjb3ZlciBkb2N1bWVudGF0aW9uLCBjb25maWd1cmF0aW9uIGZpbGVzLCBjb21tZW50cywgbG9nZ2luZywgYW5kIGNvbnN0YW50cy4gU2VsZnRlc3RzIGFyZW4mIzM5O3QgKmV4cGxpY2l0bHkqIGxpc3RlZCwgYnV0IHRoZSBzcGlyaXQgb2YgdGhlIHJ1bGUgaXMgY2xlYXI6IGlmIGl0JiMzOTtzIG5vdCByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHRoZW4gaXQgc2hvdWxkIGJlIGBmYWxzZWAuICBUaGUgcnVsZSBleHBsaWNpdGx5IHN0YXRlcyB0aGF0IGlmIHRoZSBjb2RlIG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdGhlbiBpdCYjMzk7cyBgV29ydGhGdXp6aW5nPXRydWVgLgoKU2luY2UgdGhlc2UgbW9kaWZpY2F0aW9ucyBhcmUgKnNvbGVseSogd2l0aGluIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2AsIHRoZXkgZG9uJiMzOTt0IGltcGFjdCBhbnkgY29yZSBrZXJuZWwgY29kZSB0aGF0JiMzOTtzIGRpcmVjdGx5IHJlYWNoYWJsZSBkdXJpbmcgbm9ybWFsIG9wZXJhdGlvbi4gIFRoZXkgYXJlLCBpbiBlc3NlbmNlLCBpc29sYXRlZC4gIEkmIzM5O3ZlIGRvdWJsZS1jaGVja2VkIHRoZSBwYXRoIG9mIHRoZSBtb2RpZmllZCBmaWxlcywgaW5jbHVkaW5nIHRoZSBoZWFkZXJzIGFuZCBidWlsZCBmaWxlcywgc28gSSYjMzk7bSBjb21wbGV0ZWx5IGNvbmZpZGVudCBpbiB0aGlzIGFzc2Vzc21lbnQuICBObyByZWFjaGFibGUga2VybmVsIGxvZ2ljIGlzIGJlaW5nIGFsdGVyZWQuCgpMZXQgbWUgbWFrZSBhYnNvbHV0ZWx5IHN1cmUsIGhvd2V2ZXIuIEkganVzdCB2ZXJpZmllZCB0aGF0IG90aGVyIGZpbGVzIGFsc28gaW5jbHVkZSB0aGUgZm9sbG93aW5nIG1vZGlmaWNhdGlvbnM6CgotIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9kcml2ZXJzL2lnYi9lMTAwMF84MjU3NS5oYAotIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9kcml2ZXJzL2lnYi9lMTAwMF9kZWZpbmVzLmhgCi0gYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2RyaXZlcnMvaWdiL2UxMDAwX3JlZ3MuaGAKCkFsbCBmaWxlcyBhcmUgd2l0aGluIHRoZSBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9gIGRpcmVjdG9yeS4KClRoZXJlZm9yZSwgbXkgY29uY2x1c2lvbiBpcyBjbGVhcjogYmFzZWQgb24gdGhlIHJ1bGVzIGFuZCB0aGUgY29uZmluZWQgc2NvcGUgb2YgdGhlIGNoYW5nZXMsIEkmIzM5O2xsIHJldHVybiBgV29ydGhGdXp6aW5nPWZhbHNlYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMSAxOToxMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFtdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgY29kZSBpbiB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvLywgd2hpY2ggY29udGFpbnMgdXNlci1zcGFjZSBzZWxmdGVzdHMgYW5kIGRvZXMgbm90IGFmZmVjdCB0aGUgY29yZSBrZXJuZWwsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZSBjb2RlLiBUaGVyZWZvcmUsIGl0IGRvZXMgbm90IGludHJvZHVjZSBhbnkgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBjYW4gYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb25seSBtb2RpZmllcyBjb2RlIGluIHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vLCB3aGljaCBjb250YWlucyB1c2VyLXNwYWNlIHNlbGZ0ZXN0cyBhbmQgZG9lcyBub3QgYWZmZWN0IHRoZSBjb3JlIGtlcm5lbCwgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlIGNvZGUuIFRoZXJlZm9yZSwgaXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IGNhbiBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDctMTFUMTk6MTM6NDEuODM5MDQ2NTQ5WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTQ1NzM0MDc5MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggb25seSBtb2RpZmllcyBjb2RlIGluIHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vLCB3aGljaCBjb250YWlucyB1c2VyLXNwYWNlIHNlbGZ0ZXN0cyBhbmQgZG9lcyBub3QgYWZmZWN0IHRoZSBjb3JlIGtlcm5lbCwgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlIGNvZGUuIFRoZXJlZm9yZSwgaXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IGNhbiBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMVQxOToxMzo0MS44MzkwNTMyMDlaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM1MzMxNzcxOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDMxMzdjMDMxOTlmNjQ3ZWZiNDNiYmJhZjgwNTM4NDRkMGNiNjAwZWRcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFNhdCBKdWwgMTEgMTk6MTM6NDAgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvZHJpdmVycy9pZ2IvZTEwMDBfODI1NzUuaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2RyaXZlcnMvaWdiL2UxMDAwXzgyNTc1LmhcXG5uZXcgZmlsZSBtb2RlIDEyMDAwMFxcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi5iODRhZmZkZWM1NTk4ZVxcbi0tLSAvZGV2L251bGxcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9kcml2ZXJzL2lnYi9lMTAwMF84MjU3NS5oXFxuQEAgLTAsMCArMSBAQFxcbisuLi8uLi8uLi8uLi8uLi8uLi8uLi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZ2IvZTEwMDBfODI1NzUuaFxcblxcXFwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZVxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9kcml2ZXJzL2lnYi9lMTAwMF9kZWZpbmVzLmggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9kcml2ZXJzL2lnYi9lMTAwMF9kZWZpbmVzLmhcXG5uZXcgZmlsZSBtb2RlIDEyMDAwMFxcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi45Zjk3ZjQzMzAwODY2ZFxcbi0tLSAvZGV2L251bGxcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9kcml2ZXJzL2lnYi9lMTAwMF9kZWZpbmVzLmhcXG5AQCAtMCwwICsxIEBAXFxuKy4uLy4uLy4uLy4uLy4uLy4uLy4uL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lnYi9lMTAwMF9kZWZpbmVzLmhcXG5cXFxcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGVcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvZHJpdmVycy9pZ2IvZTEwMDBfcmVncy5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvZHJpdmVycy9pZ2IvZTEwMDBfcmVncy5oXFxubmV3IGZpbGUgbW9kZSAxMjAwMDBcXG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uYzczMzYzNDE3MWJiMTNcXG4tLS0gL2Rldi9udWxsXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvZHJpdmVycy9pZ2IvZTEwMDBfcmVncy5oXFxuQEAgLTAsMCArMSBAQFxcbisuLi8uLi8uLi8uLi8uLi8uLi8uLi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZ2IvZTEwMDBfcmVncy5oXFxuXFxcXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2RyaXZlcnMvaWdiL2lnYi5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvZHJpdmVycy9pZ2IvaWdiLmNcXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi4yMDZhMWU2NDg5YzIxY1xcbi0tLSAvZGV2L251bGxcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9kcml2ZXJzL2lnYi9pZ2IuY1xcbkBAIC0wLDAgKzEsNTU0IEBAXFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4rI2luY2x1ZGUgXFx1MDAzY3VuaXN0ZC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjZXJybm8uaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY3N0ZGludC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvaW8uaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3BjaV9yZWdzLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9wY2lfaWRzLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9rZXJuZWwuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2NvbXBpbGVyLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2Nhc20vYmFycmllci5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvbWlpLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaWJ2ZmlvL3ZmaW9fcGNpX2RldmljZS5oXFx1MDAzZVxcbitcXG4rI2luY2x1ZGUgXFxcImUxMDAwX3JlZ3MuaFxcXCJcXG4rI2luY2x1ZGUgXFxcImUxMDAwX2RlZmluZXMuaFxcXCJcXG4rI2luY2x1ZGUgXFxcImUxMDAwXzgyNTc1LmhcXFwiXFxuK1xcbisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfODI1NzYgMHgxMEM5XFxuKyNkZWZpbmUgSUdCX01BWF9DSFVOS19TSVpFIDEwMjRcXG4rI2RlZmluZSBNU0lYX1ZFQ1RPUiAwXFxuKyNkZWZpbmUgUklOR19TSVpFIDQwOTYgLyogTnVtYmVyIG9mIGRlc2NyaXB0b3JzIGluIHJpbmcgKi9cXG4rXFxuK3N0cnVjdCBpZ2JfdHhfZGVzYyB7XFxuK1xcdHVuaW9uIHtcXG4rXFx0XFx0c3RydWN0IHtcXG4rXFx0XFx0XFx0dTY0IGJ1ZmZlcl9hZGRyOyAvKiBBZGRyZXNzIG9mIGRlc2NyaXB0b3IncyBkYXRhIGJ1ZmZlciAqL1xcbitcXHRcXHRcXHR1MzIgY21kX3R5cGVfbGVuOyAvKiBDb21tYW5kL1R5cGUvTGVuZ3RoICovXFxuK1xcdFxcdFxcdHUzMiBvbGluZm9fc3RhdHVzOyAvKiBDb250ZXh0L0J1ZmZlciBpbmZvICovXFxuK1xcdFxcdH0gcmVhZDtcXG4rXFxuK1xcdFxcdHN0cnVjdCB7XFxuK1xcdFxcdFxcdHU2NCByc3ZkOyAgICAgICAgLyogUmVzZXJ2ZWQgKi9cXG4rXFx0XFx0XFx0dTMyIG54dHNlcV9zZWVkOyAvKiBOZXh0IHNlcXVlbmNlIHNlZWQgKi9cXG4rXFx0XFx0XFx0dTMyIHN0YXR1czsgICAgICAvKiBEZXNjcmlwdG9yIHN0YXR1cyAqL1xcbitcXHRcXHR9IHdiO1xcbitcXHR9O1xcbit9O1xcbitcXG4rc3RydWN0IGlnYl9yeF9kZXNjIHtcXG4rXFx0dW5pb24ge1xcbitcXHRcXHRzdHJ1Y3Qge1xcbitcXHRcXHRcXHR1NjQgcGt0X2FkZHI7IC8qIFBhY2tldCBidWZmZXIgYWRkcmVzcyAqL1xcbitcXHRcXHRcXHR1NjQgaGRyX2FkZHI7IC8qIEhlYWRlciBidWZmZXIgYWRkcmVzcyAqL1xcbitcXHRcXHR9IHJlYWQ7XFxuK1xcdFxcdHN0cnVjdCB7XFxuK1xcdFxcdFxcdHUxNiBwa3RfaW5mbzsgICAgIC8qIFJTUyB0eXBlLCBQYWNrZXQgdHlwZSAqL1xcbitcXHRcXHRcXHR1MTYgaGRyX2luZm87ICAgICAvKiBTcGxpdCBIZWFkLCBidWYgbGVuICovXFxuK1xcdFxcdFxcdHUzMiByc3M7ICAgICAgICAgIC8qIFJTUyBIYXNoICovXFxuK1xcdFxcdFxcdHUzMiBzdGF0dXNfZXJyb3I7IC8qIGV4dCBzdGF0dXMvZXJyb3IgKi9cXG4rXFx0XFx0XFx0dTE2IGxlbmd0aDsgICAgICAgLyogUGFja2V0IGxlbmd0aCAqL1xcbitcXHRcXHRcXHR1MTYgdmxhbjsgICAgICAgICAvKiBWTEFOIHRhZyAqL1xcbitcXHRcXHR9IHdiOyAvKiB3cml0ZWJhY2sgKi9cXG4rXFx0fTtcXG4rfTtcXG4rXFxuK3N0cnVjdCBpZ2Ige1xcbitcXHR2b2lkICpiYXIwO1xcbitcXHR1MzIgdHhfdGFpbDtcXG4rXFx0dTMyIHJ4X3RhaWw7XFxuK1xcdHN0cnVjdCBpZ2JfdHhfZGVzYyB0eF9yaW5nW1JJTkdfU0laRV0gX19hdHRyaWJ1dGVfXygoYWxpZ25lZCgxMjgpKSk7XFxuK1xcdHN0cnVjdCBpZ2JfcnhfZGVzYyByeF9yaW5nW1JJTkdfU0laRV0gX19hdHRyaWJ1dGVfXygoYWxpZ25lZCgxMjgpKSk7XFxuK307XFxuK1xcbitzdGF0aWMgaW5saW5lIHN0cnVjdCBpZ2IgKnRvX2lnYl9zdGF0ZShzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UpXFxuK3tcXG4rXFx0cmV0dXJuIChzdHJ1Y3QgaWdiICopZGV2aWNlLVxcdTAwM2Vkcml2ZXIucmVnaW9uLnZhZGRyO1xcbit9XFxuK1xcbitzdGF0aWMgaW5saW5lIHZvaWQgaWdiX3dyaXRlMzIoc3RydWN0IGlnYiAqaWdiLCB1MzIgcmVnLCB1MzIgdmFsKVxcbit7XFxuK1xcdHdyaXRlbCh2YWwsIGlnYi1cXHUwMDNlYmFyMCArIHJlZyk7XFxuK31cXG4rXFxuK3N0YXRpYyBpbmxpbmUgdTMyIGlnYl9yZWFkMzIoc3RydWN0IGlnYiAqaWdiLCB1MzIgcmVnKVxcbit7XFxuK1xcdHJldHVybiByZWFkbChpZ2ItXFx1MDAzZWJhcjAgKyByZWcpO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IGlnYl93cml0ZV9waHkoc3RydWN0IGlnYiAqaWdiLCB1MzIgb2Zmc2V0LCB1MTYgZGF0YSlcXG4re1xcbitcXHR1MzIgbWRpYztcXG4rXFx0aW50IGk7XFxuK1xcbitcXHQvKlxcbitcXHQgKiBXcml0ZSBhIFBIWSByZWdpc3RlciBvdmVyIE1ESU8uXFxuK1xcdCAqXFxuK1xcdCAqIEEgcHJvZHVjdGlvbiBkcml2ZXIgd291bGQgaG9sZCB0aGUgU1cvRlcgc2VtYXBob3JlIChTV1NNLlNXRVNNQkkgKyB0aGVcXG4rXFx0ICogU1dfRldfU1lOQyBQSFkgYml0KSBhY3Jvc3MgdGhlIE1ESU8gdHJhbnNhY3Rpb24gdG8gc2VyaWFsaXplIGFnYWluc3QgdGhlXFxuK1xcdCAqIGRldmljZSdzIG1hbmFnZW1lbnQgZmlybXdhcmUuICBUaGUgc2VsZnRlc3Qgb3ducyB0aGUgYXNzaWduZWQgZnVuY3Rpb25cXG4rXFx0ICogZXhjbHVzaXZlbHkgb24gYSBkZWRpY2F0ZWQgdGVzdCBkZXZpY2Ugd2l0aCBubyBhY3RpdmUgbWFuYWdlYWJpbGl0eVxcbitcXHQgKiBjb250ZW5kaW5nIGZvciB0aGUgUEhZLCBzbyB0aGUgc3luYyBpcyBvbWl0dGVkOyBpdCBzaG91bGQgYmUgYWRkZWQgaGVyZVxcbitcXHQgKiBpZiB0aGlzIGV2ZXIgbmVlZHMgdG8gcnVuIG9uIGEgbWFuYWdlYWJpbGl0eS1lbmFibGVkIE5JQy5cXG4rXFx0ICovXFxuK1xcdG1kaWMgPSAoKCh1MzIpZGF0YSkgfFxcbitcXHRcXHQob2Zmc2V0IFxcdTAwM2NcXHUwMDNjIEUxMDAwX01ESUNfUkVHX1NISUZUKSB8XFxuK1xcdFxcdCgxIFxcdTAwM2NcXHUwMDNjIEUxMDAwX01ESUNfUEhZX1NISUZUKSB8XFxuK1xcdFxcdEUxMDAwX01ESUNfT1BfV1JJVEUpO1xcbitcXG4rXFx0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9NRElDLCBtZGljKTtcXG4rXFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyAxMDAwOyBpKyspIHtcXG4rXFx0XFx0dXNsZWVwKDUwKTtcXG4rXFx0XFx0bWRpYyA9IGlnYl9yZWFkMzIoaWdiLCBFMTAwMF9NRElDKTtcXG4rXFx0XFx0aWYgKG1kaWMgXFx1MDAyNiBFMTAwMF9NRElDX1JFQURZKVxcbitcXHRcXHRcXHRicmVhaztcXG4rXFx0fVxcbitcXG4rXFx0aWYgKCEobWRpYyBcXHUwMDI2IEUxMDAwX01ESUNfUkVBRFkpKVxcbitcXHRcXHRyZXR1cm4gLTE7XFxuK1xcbitcXHRpZiAobWRpYyBcXHUwMDI2IEUxMDAwX01ESUNfRVJST1IpXFxuK1xcdFxcdHJldHVybiAtMTtcXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbisvKlxcbisgKiBDb25maWd1cmUgdGhlIGRldmljZSBmb3IgUEhZIGludGVybmFsIGxvb3BiYWNrIHBlciA4MjU3NiBkYXRhc2hlZXRcXG4rICogc2VjdGlvbiAzLjUuNi4zLjEuICBGb3JjZSB0aGUgUEhZIHRvIDFHYi9zIGZ1bGwgZHVwbGV4IHdpdGggbG9vcGJhY2tcXG4rICogZW5hYmxlZCwgdGhlbiBmb3JjZSB0aGUgTUFDIGxpbmsgc3RhdGUgdG8gbWF0Y2guICBJbnRlcm5hbCBsb29wYmFja1xcbisgKiB3cmFwcyBkYXRhIGF0IHRoZSBlbmQgb2YgdGhlIFBIWSBkYXRhcGF0aCAoc2VjdGlvbiAzLjUuNi4zKSwgc28gdGhlXFxuKyAqIHBoeXNpY2FsIGxpbmsgc3RhdGUgaXMgaXJyZWxldmFudC5cXG4rICpcXG4rICogU2VjdGlvbiAzLjUuNi4xIGRpcmVjdHMgdG8gXFxcIlVzZSBQSFkgTG9vcGJhY2sgaW5zdGVhZCBvZiBNQUMgTG9vcGJhY2tcXG4rICogb24gdGhlIDgyNTc2XFxcIiwgYW5kIHNlY3Rpb24gMy41LjYuMiBzdGF0ZXMgXFxcIk1BQyBMb29wYmFjayBpcyBub3QgdXNlZFxcbisgKiBvbiB0aGlzIGRldmljZS5cXFwiICBSQ1RMLkxCTV9NQUMgaXMgc3RpbGwgc2V0IGVsc2V3aGVyZSBhcyBhIFFFTVUtb25seVxcbisgKiBhY2NvbW1vZGF0aW9uOyBzZWUgdGhlIFJDVEwgcHJvZ3JhbW1pbmcgaW4gdGhlIGNhbGxlciBmb3IgdGhlXFxuKyAqIHJhdGlvbmFsZS5cXG4rICovXFxuK3N0YXRpYyB2b2lkIGlnYl9zZXR1cF9sb29wYmFjayhzdHJ1Y3QgaWdiICppZ2IpXFxuK3tcXG4rXFx0dTMyIGN0cmw7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHQvKlxcbitcXHQgKiBLaWNrIHRoZSBhdXRvbmVnIG1hY2hpbmVyeSBzb2xlbHkgdG8gYnJpbmcgU1RBVFVTLkxVIHVwIHVuZGVyXFxuK1xcdCAqIFFFTVUncyBpZ2IgZW11bGF0aW9uOiBRRU1VIG9ubHkgdXBkYXRlcyBTVEFUVVMuTFUgdmlhIGl0c1xcbitcXHQgKiBhdXRvbmVnLWRvbmUgdGltZXIsIGFuZCB3aXRob3V0IExVIHNldCBpdHMgcmVjZWl2ZSBwYXRoXFxuK1xcdCAqIChlMTAwMHhfaHdfcnhfZW5hYmxlZCkgZHJvcHMgZXZlcnkgbG9vcGJhY2sgZnJhbWUuICBPbiByZWFsXFxuK1xcdCAqIGhhcmR3YXJlIGF1dG9uZWcgY2Fubm90IGNvbXBsZXRlIGJlZm9yZSB0aGUgbmV4dCBQSFkgd3JpdGVcXG4rXFx0ICogYmVsb3cgY2xlYXJzIHRoZSBhdXRvbmVnLWVuYWJsZSBiaXQsIHNvIHRoaXMgaXMgZWZmZWN0aXZlbHkgYVxcbitcXHQgKiBuby1vcCB0aGVyZS5cXG4rXFx0ICovXFxuK1xcdCh2b2lkKWlnYl93cml0ZV9waHkoaWdiLCBNSUlfQk1DUixcXG4rXFx0XFx0XFx0ICAgIEJNQ1JfQU5FTkFCTEUgfCBCTUNSX0FOUkVTVEFSVCk7XFxuK1xcbitcXHQvKiBQSFkgY29udHJvbDogbG9vcGJhY2sgKyAxR2IvcyBmdWxsIGR1cGxleCwgYXV0b25lZyBkaXNhYmxlZC4gKi9cXG4rXFx0cmV0ID0gaWdiX3dyaXRlX3BoeShpZ2IsIE1JSV9CTUNSLFxcbitcXHRcXHRcXHQgICAgQk1DUl9MT09QQkFDSyB8XFxuK1xcdFxcdFxcdCAgICBCTUNSX1NQRUVEMTAwMCB8XFxuK1xcdFxcdFxcdCAgICBCTUNSX0ZVTExEUExYKTtcXG4rXFx0VkZJT19BU1NFUlRfRVEocmV0LCAwLCBcXFwiRmFpbGVkIHRvIHdyaXRlIFBIWSBjb250cm9sIHJlZ2lzdGVyXFxcIik7XFxuK1xcbitcXHQvKlxcbitcXHQgKiBCcmllZiBkZWxheSBiZWZvcmUgZm9yY2luZyB0aGUgTUFDLCBtaXJyb3JpbmcgdGhlIGtlcm5lbCBldGh0b29sXFxuK1xcdCAqIHNlbGZ0ZXN0IGluIGlnYl9pbnRlZ3JhdGVkX3BoeV9sb29wYmFjaygpLiAgTm90IHNwZWNpZmllZCBieSB0aGVcXG4rXFx0ICogZGF0YXNoZWV0LCBidXQgZW1waXJpY2FsbHkgcmVxdWlyZWQgYnkgdGhlIGtlcm5lbCBkcml2ZXIuXFxuK1xcdCAqL1xcbitcXHR1c2xlZXAoNTAwMDApO1xcbitcXG4rXFx0LypcXG4rXFx0ICogRm9yY2UgdGhlIE1BQyB0byAxR2IvcyBmdWxsIGR1cGxleCB3aXRoIGxpbmsgdXAuICBXaXRob3V0IGZvcmNpbmdcXG4rXFx0ICogdGhlIGxpbmsgc3RhdGUgdGhlIGRlc2NyaXB0b3IgZW5naW5lIGRvZXMgbm90IHJ1biwgc2luY2UgdGhlIGNoaXBcXG4rXFx0ICogbm9ybWFsbHkgd2FpdHMgZm9yIGEgcmVhbCBuZWdvdGlhdGVkIGxpbmsuXFxuK1xcdCAqL1xcbitcXHRjdHJsID0gaWdiX3JlYWQzMihpZ2IsIEUxMDAwX0NUUkwpO1xcbitcXHRjdHJsIFxcdTAwMjY9IH5FMTAwMF9DVFJMX1NQRF9TRUw7XFxuK1xcdGN0cmwgfD0gRTEwMDBfQ1RSTF9GUkNTUEQgfFxcbitcXHRcXHRFMTAwMF9DVFJMX0ZSQ0RQWCB8XFxuK1xcdFxcdEUxMDAwX0NUUkxfU1BEXzEwMDAgfFxcbitcXHRcXHRFMTAwMF9DVFJMX0ZEIHxcXG4rXFx0XFx0RTEwMDBfQ1RSTF9TTFU7XFxuK1xcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfQ1RSTCwgY3RybCk7XFxuK1xcbitcXHQvKlxcbitcXHQgKiBTZXR0bGluZyBkZWxheSBtYXRjaGluZyB0aGUga2VybmVsIGV0aHRvb2wgc2VsZnRlc3QncyBtc2xlZXAoNTAwKVxcbitcXHQgKiBhdCB0aGUgdGFpbCBvZiBpZ2JfaW50ZWdyYXRlZF9waHlfbG9vcGJhY2soKS4gIE5vdCBzcGVjaWZpZWQgYnlcXG4rXFx0ICogdGhlIGRhdGFzaGVldDsgZW1waXJpY2FsLCBhbmQgaW5oZXJpdGVkIGZyb20gdGhlIGtlcm5lbCBkcml2ZXIuXFxuK1xcdCAqL1xcbitcXHR1c2xlZXAoNTAwMDAwKTtcXG4rfVxcbitcXG4rc3RhdGljIGludCBpZ2JfcHJvYmUoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlKVxcbit7XFxuK1xcdGlmICghdmZpb19wY2lfZGV2aWNlX21hdGNoKGRldmljZSwgUENJX1ZFTkRPUl9JRF9JTlRFTCwgUENJX0RFVklDRV9JRF9JTlRFTF84MjU3NikpXFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuKy8qXFxuKyAqIFByb2dyYW0gdGhlIGRldmljZSBpbnRvIGEgdXNhYmxlIHN0YXRlLiAgU3BsaXQgb3V0IG9mIGlnYl9pbml0KCkgc28gaXRcXG4rICogY2FuIGJlIHJldXNlZCBhZnRlciBhIGRldmljZSByZXNldCB0byByZS1wcm9ncmFtIHRoZSByZWdpc3RlcnMgdGhhdFxcbisgKiBDVFJMLlJTVCBjbGVhcnMuICBFeHBlY3RzIGJhcjAgdG8gYmUgbWFwcGVkIGFuZCBNU0ktWCBhbHJlYWR5IGVuYWJsZWRcXG4rICogdmlhIFZGSU8uXFxuKyAqL1xcbitzdGF0aWMgdm9pZCBpZ2JfaHdfaW5pdChzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UpXFxuK3tcXG4rXFx0c3RydWN0IGlnYiAqaWdiID0gdG9faWdiX3N0YXRlKGRldmljZSk7XFxuK1xcdHU2NCBpb3ZhX3R4LCBpb3ZhX3J4O1xcbitcXHR1MzIgY3RybCwgcmN0bDtcXG4rXFx0dTE2IGNtZF9yZWc7XFxuK1xcdGludCByZXRyaWVzO1xcbitcXG4rXFx0aW92YV90eCA9IHRvX2lvdmEoZGV2aWNlLCBpZ2ItXFx1MDAzZXR4X3JpbmcpO1xcbitcXHRpb3ZhX3J4ID0gdG9faW92YShkZXZpY2UsIGlnYi1cXHUwMDNlcnhfcmluZyk7XFxuK1xcbitcXHQvKiBTaWduYWwgdGhhdCB0aGUgZHJpdmVyIGlzIGxvYWRlZCAqL1xcbitcXHRjdHJsID0gaWdiX3JlYWQzMihpZ2IsIEUxMDAwX0NUUkxfRVhUKTtcXG4rXFx0Y3RybCB8PSBFMTAwMF9DVFJMX0VYVF9EUlZfTE9BRDtcXG4rXFx0Y3RybCBcXHUwMDI2PSB+RTEwMDBfQ1RSTF9FWFRfTElOS19NT0RFX01BU0s7XFxuK1xcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfQ1RSTF9FWFQsIGN0cmwpO1xcbitcXG4rXFx0LyogRW5hYmxlIFBDSSBCdXMgTWFzdGVyLiAqL1xcbitcXHRjbWRfcmVnID0gdmZpb19wY2lfY29uZmlnX3JlYWR3KGRldmljZSwgUENJX0NPTU1BTkQpO1xcbitcXHRpZiAoKGNtZF9yZWcgXFx1MDAyNiAoUENJX0NPTU1BTkRfTUFTVEVSIHwgUENJX0NPTU1BTkRfTUVNT1JZKSkgIT1cXG4rXFx0ICAgIChQQ0lfQ09NTUFORF9NQVNURVIgfCBQQ0lfQ09NTUFORF9NRU1PUlkpKSB7XFxuK1xcdFxcdGNtZF9yZWcgfD0gKFBDSV9DT01NQU5EX01BU1RFUiB8IFBDSV9DT01NQU5EX01FTU9SWSk7XFxuK1xcdFxcdHZmaW9fcGNpX2NvbmZpZ193cml0ZXcoZGV2aWNlLCBQQ0lfQ09NTUFORCwgY21kX3JlZyk7XFxuK1xcdH1cXG4rXFxuK1xcdC8qXFxuK1xcdCAqIERpc2FibGUgRE1BIHJlLXNlbmQgb24gUENJZSBjb21wbGV0aW9uIHRpbWVvdXQgKDgyNTc2IGRhdGFzaGVldFxcbitcXHQgKiBzZWN0aW9uIDguNi4xLCBHQ1IuQ29tcGxldGlvbl9UaW1lb3V0X1Jlc2VuZCwgYml0IDE2KS4gIFRoZVxcbitcXHQgKiBtaXhfYW5kX21hdGNoIHRlc3QgaW50ZW50aW9uYWxseSBzdWJtaXRzIGRlc2NyaXB0b3JzIHRhcmdldGluZ1xcbitcXHQgKiB1bm1hcHBlZCBJT1ZBczsgd2l0aCB0aGUgZGVmYXVsdCAoc2V0KSB2YWx1ZSwgdGhlIGRldmljZSBrZWVwc1xcbitcXHQgKiByZXRyeWluZyB0aGUgZmFpbGVkIHJlYWQgaW5kZWZpbml0ZWx5LCB3aGljaCBrZWVwcyBQQ0llIEFFUiBhbmRcXG4rXFx0ICogSU9NTVUgZXJyb3IgaGFuZGxpbmcgYnVzeSBhbmQgaW50ZXJmZXJlcyB3aXRoIHJlc2V0IHJlY292ZXJ5LlxcbitcXHQgKi9cXG4rXFx0Y3RybCA9IGlnYl9yZWFkMzIoaWdiLCBFMTAwMF9HQ1IpO1xcbitcXHRjdHJsIFxcdTAwMjY9IH5FMTAwMF9HQ1JfQ01QTF9UTU9VVF9SRVNFTkQ7XFxuK1xcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfR0NSLCBjdHJsKTtcXG4rXFxuK1xcdC8qIENvbmZpZ3VyZSBQSFkgaW50ZXJuYWwgbG9vcGJhY2sgZm9yIHRlc3RpbmcuICovXFxuK1xcdGlnYl9zZXR1cF9sb29wYmFjayhpZ2IpO1xcbitcXG4rXFx0LyogQ29uZmlndXJlIFRYIGFuZCBSWCBkZXNjcmlwdG9yIHJpbmdzICovXFxuK1xcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfVERCQUwoMCksICh1MzIpaW92YV90eCk7XFxuK1xcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfVERCQUgoMCksICh1MzIpKGlvdmFfdHggXFx1MDAzZVxcdTAwM2UgMzIpKTtcXG4rXFx0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9URExFTigwKSwgUklOR19TSVpFICogc2l6ZW9mKHN0cnVjdCBpZ2JfdHhfZGVzYykpO1xcbitcXHRpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX1RESCgwKSwgMCk7XFxuK1xcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfVERUKDApLCAwKTtcXG4rXFx0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9UWERDVEwoMCksIEUxMDAwX1RYRENUTF9RVUVVRV9FTkFCTEUpO1xcbitcXG4rXFx0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9SREJBTCgwKSwgKHUzMilpb3ZhX3J4KTtcXG4rXFx0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9SREJBSCgwKSwgKHUzMikoaW92YV9yeCBcXHUwMDNlXFx1MDAzZSAzMikpO1xcbitcXHRpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX1JETEVOKDApLCBSSU5HX1NJWkUgKiBzaXplb2Yoc3RydWN0IGlnYl9yeF9kZXNjKSk7XFxuK1xcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfUkRIKDApLCAwKTtcXG4rXFx0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9SRFQoMCksIDApO1xcbitcXG4rXFx0LypcXG4rXFx0ICogU2VsZWN0IHRoZSBhZHZhbmNlZCBvbmUtYnVmZmVyIGRlc2NyaXB0b3IgZm9ybWF0LiAgUGVyIDgyNTc2XFxuK1xcdCAqIGRhdGFzaGVldCBzZWN0aW9uIDcuMS41LjI6IFxcXCJTUlJDVExbbl0uREVTQ1RZUEUgbXVzdCBiZSBzZXQgdG8gYVxcbitcXHQgKiB2YWx1ZSBvdGhlciB0aGFuIDAwMGIgZm9yIHRoZSA4MjU3NiB0byB3cml0ZSBiYWNrIHRoZSBzcGVjaWFsXFxuK1xcdCAqIGRlc2NyaXB0b3JzLlxcXCIgIHN0cnVjdCBpZ2JfcnhfZGVzYyBtYXRjaGVzIHRoZSBhZHZhbmNlZCBvbmUtYnVmZmVyXFxuK1xcdCAqIHdyaXRlYmFjayBsYXlvdXQgKHNlY3Rpb24gNy4xLjUuMiksIHNvIHBvbGxpbmcgcngud2Iuc3RhdHVzX2Vycm9yXFxuK1xcdCAqIHJlcXVpcmVzIHRoaXMgZm9ybWF0LiAgU2VjdGlvbiA4LjEwLjIgc3BlY2lmaWVzIERFU0NUWVBFWzI3OjI1XS5cXG4rXFx0ICpcXG4rXFx0ICogVGhlIGRpcmVjdCB3cml0ZSBhbHNvIHplcm9lcyBTUlJDVEwuQlNJWkVQQUNLRVQsIHdoaWNoIGlzXFxuK1xcdCAqIGludGVudGlvbmFsOiBwZXIgc2VjdGlvbiA3LjEuMy4xIGEgemVybyBCU0laRVBBQ0tFVCBmYWxscyBiYWNrIHRvXFxuK1xcdCAqIHRoZSBSQ1RMLkJTSVpFIGJ1ZmZlciBzaXplLCB3aG9zZSByZXNldCBkZWZhdWx0ICgwMGIpIGlzIDIwNDhcXG4rXFx0ICogYnl0ZXMgLS0gYW1wbGUgZm9yIHRoZSBsb29wYmFjayBmcmFtZXMgaGVyZS5cXG4rXFx0ICovXFxuK1xcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfU1JSQ1RMKDApLCBFMTAwMF9TUlJDVExfREVTQ1RZUEVfQURWX09ORUJVRik7XFxuK1xcbitcXHRpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX1JYRENUTCgwKSwgRTEwMDBfUlhEQ1RMX1FVRVVFX0VOQUJMRSk7XFxuK1xcbitcXHQvKiBXYWl0IGZvciBUWCBhbmQgUlggcXVldWVzIHRvIGJlIGVuYWJsZWQgKi9cXG4rXFx0cmV0cmllcyA9IDIwMDA7XFxuK1xcdHdoaWxlIChyZXRyaWVzLS0gXFx1MDAzZSAwKSB7XFxuK1xcdFxcdGlmICgoaWdiX3JlYWQzMihpZ2IsIEUxMDAwX1RYRENUTCgwKSkgXFx1MDAyNiBFMTAwMF9UWERDVExfUVVFVUVfRU5BQkxFKSBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHQgICAgKGlnYl9yZWFkMzIoaWdiLCBFMTAwMF9SWERDVEwoMCkpIFxcdTAwMjYgRTEwMDBfUlhEQ1RMX1FVRVVFX0VOQUJMRSkpXFxuK1xcdFxcdFxcdGJyZWFrO1xcbitcXHRcXHR1c2xlZXAoMTApO1xcbitcXHR9XFxuK1xcbitcXHQvKlxcbitcXHQgKiBFbmFibGUgUmVjZWl2ZXIgYW5kIFRyYW5zbWl0dGVyLiAgUkNUTC5MQk1fTUFDIGlzIHNldCBpbiBhZGRpdGlvblxcbitcXHQgKiB0byBQSFkgbG9vcGJhY2sgYXMgYSBRRU1VLW9ubHkgYWNjb21tb2RhdGlvbjogUUVNVSdzIGVtdWxhdGVkIGlnYlxcbitcXHQgKiBkb2VzIG5vdCBob25vciBQSFkgcmVnaXN0ZXIgMCBiaXQgMTQgKFBIWSBpbnRlcm5hbCBsb29wYmFjaykgYW5kXFxuK1xcdCAqIHJlbGllcyBvbiBSQ1RMLkxCTV9NQUMgdG8gd3JhcCBUWCBkZXNjcmlwdG9ycyBiYWNrIHRvIHRoZSBSWFxcbitcXHQgKiBxdWV1ZS4gIERhdGFzaGVldCA4LjEwLjEgKFJDVEwgcmVnaXN0ZXIpIGFkdmlzZXMgXFxcIldoZW4gdXNpbmcgdGhlXFxuK1xcdCAqIGludGVybmFsIFBIWSwgTEJNIHNob3VsZCByZW1haW4gc2V0IHRvIDAwYlxcXCIsIHNvIHNldHRpbmcgTEJNX01BQ1xcbitcXHQgKiBoZXJlIGRldmlhdGVzIGZyb20gZGF0YXNoZWV0IGd1aWRhbmNlOyBlbXBpcmljYWxseSB0aGUgYml0IGhhc1xcbitcXHQgKiBubyBvYnNlcnZhYmxlIGVmZmVjdCBvbiByZWFsIDgyNTc2IGhhcmR3YXJlIGJlY2F1c2UgTUFDIGxvb3BiYWNrXFxuK1xcdCAqIGlzIG5vdCBpbXBsZW1lbnRlZCAoZGF0YXNoZWV0IDMuNS42LjIpLiAgU2V0dGluZyBib3RoIGxldHMgdGhlXFxuK1xcdCAqIHNlbGZ0ZXN0IHdvcmsgb24gYm90aCByZWFsIGhhcmR3YXJlIGFuZCBRRU1VIHdpdGhvdXQgY29uZGl0aW9uYWxcXG4rXFx0ICogY29kZSBwYXRocy5cXG4rXFx0ICovXFxuK1xcdHJjdGwgPSBFMTAwMF9SQ1RMX0VOIHwgICAgICAgLyogUmVjZWl2ZXIgRW5hYmxlICovXFxuK1xcdCAgICAgICBFMTAwMF9SQ1RMX1VQRSB8ICAgICAgLyogVW5pY2FzdCBQcm9taXNjdW91cyAoZm9yIGR1bW15IE1BQykgKi9cXG4rXFx0ICAgICAgIEUxMDAwX1JDVExfTEJNX01BQyB8ICAvKiBNQUMgTG9vcGJhY2sgLSBmb3IgUUVNVSBlbXVsYXRpb24gb25seSAqL1xcbitcXHQgICAgICAgRTEwMDBfUkNUTF9TRUNSQzsgICAgIC8qIFN0cmlwIENSQyAobmVlZGVkIGZvciBtZW1jbXApICovXFxuK1xcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfUkNUTCwgcmN0bCk7XFxuK1xcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfVENUTCwgRTEwMDBfVENUTF9FTik7XFxuK1xcbitcXHQvKlxcbitcXHQgKiBQcm9ncmFtIE1TSS1YIGludGVycnVwdCByb3V0aW5nIHBlciA4MjU3NiBkYXRhc2hlZXQ6XFxuK1xcdCAqXFxuK1xcdCAqIEdQSUUgKHNlY3Rpb24gNy4zLjIuMTEsIFRhYmxlIDctNDcpOiBzZXQgTXVsdGlwbGVfTVNJWCAoYml0IDQpIHRvXFxuK1xcdCAqIHJvdXRlIGludGVycnVwdCBjYXVzZXMgdGhyb3VnaCBJVkFSIG1hcHBpbmcsIGFuZCBFSUFNRSAoYml0IDMwKVxcbitcXHQgKiB0byBhcHBseSBFSUFNIG9uIE1TSS1YIGFzc2VydGlvbiAod2l0aG91dCBFSUFNRSwgRUlBTSBvbmx5XFxuK1xcdCAqIGFwcGxpZXMgb24gRUlDUiByZWFkL3dyaXRlKS5cXG4rXFx0ICpcXG4rXFx0ICogRUlBQyAoc2VjdGlvbiA4LjguNSk6IGVuYWJsZSBhdXRvLWNsZWFyIG9mIEVJQ1IgZm9yIHZlY3RvciAwLlxcbitcXHQgKiBXaXRob3V0IGF1dG8tY2xlYXIgdGhlIGNhdXNlIHN0YXlzIHNldCBhZnRlciBkZWxpdmVyeSBhbmQgdGhlXFxuK1xcdCAqIHRlc3QgY2FuIHNlZSBzcHVyaW91cyBpbnRlcnJ1cHRzIG9uIHRoZSBuZXh0IG1lbWNweSBiYXRjaC5cXG4rXFx0ICpcXG4rXFx0ICogRUlBTSAoc2VjdGlvbiA4LjguNik6IGVuYWJsZSBhdXRvLW1hc2sgb2YgRUlNUyBmb3IgdmVjdG9yIDAgb25cXG4rXFx0ICogTVNJLVggYXNzZXJ0aW9uIChlZmZlY3RpdmUgYmVjYXVzZSBFSUFNRSBpcyBzZXQpLCBzbyBhIHNpbmdsZVxcbitcXHQgKiBpbnRlcnJ1cHQgaXMgZGVsaXZlcmVkIHBlciBtZW1jcHkgYmF0Y2ggZXZlbiBpZiB0aGUgY2F1c2VcXG4rXFx0ICogcmUtYXNzZXJ0cyBiZWZvcmUgc29mdHdhcmUgcmUtZW5hYmxlcyB0aGUgbWFzay5cXG4rXFx0ICpcXG4rXFx0ICogSVZBUiAoc2VjdGlvbiA3LjMuMS4yLCByZWdpc3RlciBkZWZpbml0aW9uIGluIDguOC4xMyk6IG1hcCBSWFxcbitcXHQgKiBjYXVzZSAwIHRvIE1TSS1YIHZlY3RvciAwIGFuZCBtYXJrIHRoZSBlbnRyeSB2YWxpZC5cXG4rXFx0ICovXFxuK1xcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfR1BJRSwgRTEwMDBfR1BJRV9NU0lYX01PREUgfCBFMTAwMF9HUElFX0VJQU1FKTtcXG4rXFx0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9FSUFDLCBFMTAwMF9FSUNSX1JYX1FVRVVFMCk7XFxuK1xcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfRUlBTSwgRTEwMDBfRUlDUl9SWF9RVUVVRTApO1xcbitcXG4rXFx0LyogTWFwIHZlY3RvciAwIHRvIGludGVycnVwdCBjYXVzZSAwIGFuZCBtYXJrIGl0IHZhbGlkICovXFxuK1xcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfSVZBUjAsIEUxMDAwX0lWQVJfVkFMSUQpO1xcbitcXG4rXFx0LyogRW5hYmxlIGludGVycnVwdHMgb24gdmVjdG9yIDAgKi9cXG4rXFx0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9FSU1TLCBFMTAwMF9FSUNSX1JYX1FVRVVFMCk7XFxuK1xcbitcXHQvKiBJbml0aWFsaXplIGRyaXZlciBzdGF0ZSBhbmQgY2FwYWJpbGl0eSBsaW1pdHMgKi9cXG4rXFx0aWdiLVxcdTAwM2V0eF90YWlsID0gMDtcXG4rXFx0aWdiLVxcdTAwM2VyeF90YWlsID0gMDtcXG4rXFxuK1xcdGRldmljZS1cXHUwMDNlZHJpdmVyLm1heF9tZW1jcHlfc2l6ZSA9IElHQl9NQVhfQ0hVTktfU0laRTtcXG4rXFx0ZGV2aWNlLVxcdTAwM2Vkcml2ZXIubWF4X21lbWNweV9jb3VudCA9IFJJTkdfU0laRSAtIDE7XFxuK1xcdGRldmljZS1cXHUwMDNlZHJpdmVyLm1zaSA9IE1TSVhfVkVDVE9SO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBpZ2JfaW5pdChzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UpXFxuK3tcXG4rXFx0c3RydWN0IGlnYiAqaWdiID0gdG9faWdiX3N0YXRlKGRldmljZSk7XFxuK1xcbitcXHRWRklPX0FTU0VSVF9HRShkZXZpY2UtXFx1MDAzZWRyaXZlci5yZWdpb24uc2l6ZSwgc2l6ZW9mKHN0cnVjdCBpZ2IpKTtcXG4rXFxuK1xcdGlnYi1cXHUwMDNlYmFyMCA9IGRldmljZS1cXHUwMDNlYmFyc1swXS52YWRkcjtcXG4rXFxuK1xcdC8qIFJlc2V0IGRldmljZSBhbmQgZGlzYWJsZSBhbGwgaW50ZXJydXB0cy4gKi9cXG4rXFx0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9DVFJMLCBpZ2JfcmVhZDMyKGlnYiwgRTEwMDBfQ1RSTCkgfCBFMTAwMF9DVFJMX1JTVCk7XFxuK1xcdC8qXFxuK1xcdCAqIE11c3Qgd2FpdCBhdCBsZWFzdCAxIG1pbGxpc2Vjb25kIGFmdGVyIHNldHRpbmcgdGhlIHJlc2V0IGJpdCBiZWZvcmVcXG4rXFx0ICogY2hlY2tpbmcgaWYgdGhpcyBkZXZpY2UgaXMgcmVhZHkgdG8gYmUgdXNlZCAoODI1NzYgZGF0YXNoZWV0IHNlY3Rpb25cXG4rXFx0ICogNC4yLjEuNi4xKS5cXG4rXFx0ICovXFxuK1xcdHVzbGVlcCgxMDAwKTtcXG4rXFx0d2hpbGUgKGlnYl9yZWFkMzIoaWdiLCBFMTAwMF9DVFJMKSBcXHUwMDI2IEUxMDAwX0NUUkxfUlNUKVxcbitcXHRcXHR1c2xlZXAoMTApO1xcbitcXHRpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX0lNQywgMHhGRkZGRkZGRik7XFxuK1xcbitcXHQvKlxcbitcXHQgKiBFbmFibGUgTVNJLVggdmlhIFZGSU8gYmVmb3JlIGRldmljZS1zaWRlIHJlZ2lzdGVyIHByb2dyYW1taW5nLlxcbitcXHQgKiB2ZmlvX3BjaV9tc2l4X2VuYWJsZSgpIG9ubHkgdG91Y2hlcyB0aGUgVkZJTyBJUlEgbWFjaGluZXJ5IGFuZCB0aGVcXG4rXFx0ICogUENJIE1TSS1YIGNhcGFiaWxpdHkgdmlhIGNvbmZpZyBzcGFjZTsgaXQgaGFzIG5vIG9yZGVyaW5nXFxuK1xcdCAqIGRlcGVuZGVuY3kgb24gdGhlIGRldmljZS1zaWRlIHdyaXRlcyBwZXJmb3JtZWQgYnkgaWdiX2h3X2luaXQoKS5cXG4rXFx0ICogUGxhY2luZyBpdCBoZXJlIGtlZXBzIGlnYl9od19pbml0KCkgcmV1c2FibGUgZnJvbSB0aGUgcmVzZXRcXG4rXFx0ICogcmVjb3ZlcnkgcGF0aCAod2hpY2ggY2FsbHMgdmZpb19wY2lfaXJxX3JlZW5hYmxlKCkgaW5zdGVhZCkuXFxuK1xcdCAqL1xcbitcXHR2ZmlvX3BjaV9tc2l4X2VuYWJsZShkZXZpY2UsIE1TSVhfVkVDVE9SLCAxKTtcXG4rXFxuK1xcdGlnYl9od19pbml0KGRldmljZSk7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIGlnYl9yZW1vdmUoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlKVxcbit7XFxuK1xcdHN0cnVjdCBpZ2IgKmlnYiA9IHRvX2lnYl9zdGF0ZShkZXZpY2UpO1xcbitcXG4rXFx0dmZpb19wY2lfbXNpeF9kaXNhYmxlKGRldmljZSk7XFxuK1xcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfUkNUTCwgMCk7XFxuK1xcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfVENUTCwgMCk7XFxuK1xcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfQ1RSTCwgaWdiX3JlYWQzMihpZ2IsIEUxMDAwX0NUUkwpIHwgRTEwMDBfQ1RSTF9SU1QpO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBpZ2JfaXJxX2Rpc2FibGUoc3RydWN0IGlnYiAqaWdiKVxcbit7XFxuK1xcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfRUlNQywgRTEwMDBfRUlDUl9SWF9RVUVVRTApO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBpZ2JfaXJxX2VuYWJsZShzdHJ1Y3QgaWdiICppZ2IpXFxuK3tcXG4rXFx0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9FSU1TLCBFMTAwMF9FSUNSX1JYX1FVRVVFMCk7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIGlnYl9pcnFfY2xlYXIoc3RydWN0IGlnYiAqaWdiKVxcbit7XFxuK1xcdC8qXFxuK1xcdCAqIFVzZSB3cml0ZS10by1jbGVhciAoZGF0YXNoZWV0IDcuMy40LjIpLiAgSW4gTVNJLVggbW9kZSB3aXRoIEVJQUNcXG4rXFx0ICogcHJvZ3JhbW1lZCwgc2VjdGlvbiA4LjguNSBleHBsaWNpdGx5IHN0YXRlcyBcXFwiSWYgYW55IGJpdHMgYXJlIHNldFxcbitcXHQgKiBpbiBFSUFDLCB0aGUgRUlDUiByZWdpc3RlciBzaG91bGQgbm90IGJlIHJlYWRcXFwiLCB3aGljaCBydWxlcyBvdXRcXG4rXFx0ICogdGhlIHJlYWQtdG8tY2xlYXIgcGF0aCBpbiA3LjMuNC4zLiAgQml0cyBub3QgaW4gRUlBQyBhcmUgc3RpbGxcXG4rXFx0ICogY2xlYXJlZCBieSB3cml0aW5nIDEuXFxuK1xcdCAqL1xcbitcXHRpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX0VJQ1IsIDB4RkZGRkZGRkYpO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBpZ2JfbWVtY3B5X3N0YXJ0KHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSwgaW92YV90IHNyYyxcXG4rXFx0XFx0XFx0ICAgICBpb3ZhX3QgZHN0LCB1NjQgc2l6ZSwgdTY0IGNvdW50KVxcbit7XFxuK1xcdHN0cnVjdCBpZ2IgKmlnYiA9IHRvX2lnYl9zdGF0ZShkZXZpY2UpO1xcbitcXHRzdHJ1Y3QgaWdiX3J4X2Rlc2MgKnJ4O1xcbitcXHRzdHJ1Y3QgaWdiX3R4X2Rlc2MgKnR4O1xcbitcXHR1MzIgaTtcXG4rXFxuK1xcdGlnYl9pcnFfZGlzYWJsZShpZ2IpO1xcbitcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIGNvdW50OyBpKyspIHtcXG4rXFx0XFx0dHggPSBcXHUwMDI2aWdiLVxcdTAwM2V0eF9yaW5nW2lnYi1cXHUwMDNldHhfdGFpbF07XFxuK1xcdFxcdHJ4ID0gXFx1MDAyNmlnYi1cXHUwMDNlcnhfcmluZ1tpZ2ItXFx1MDAzZXJ4X3RhaWxdO1xcbitcXG4rXFx0XFx0bWVtc2V0KHR4LCAwLCBzaXplb2Yoc3RydWN0IGlnYl90eF9kZXNjKSk7XFxuK1xcdFxcdG1lbXNldChyeCwgMCwgc2l6ZW9mKHN0cnVjdCBpZ2JfcnhfZGVzYykpO1xcbitcXG4rXFx0XFx0cngtXFx1MDAzZXJlYWQucGt0X2FkZHIgPSBjcHVfdG9fbGU2NChkc3QpO1xcbitcXHRcXHRyeC1cXHUwMDNlcmVhZC5oZHJfYWRkciA9IGNwdV90b19sZTY0KDApO1xcbitcXG4rXFx0XFx0dHgtXFx1MDAzZXJlYWQuYnVmZmVyX2FkZHIgPSBjcHVfdG9fbGU2NChzcmMpO1xcbitcXHRcXHQvKlxcbitcXHRcXHQgKiBCdWlsZCBhbiBhZHZhbmNlZCBkYXRhIGRlc2NyaXB0b3IgcGVyIDgyNTc2IGRhdGFzaGVldFxcbitcXHRcXHQgKiBzZWN0aW9uIDcuMi4yLjMuICBERVhUIG1hcmtzIHRoZSBkZXNjcmlwdG9yIGFzIGFkdmFuY2VkXFxuK1xcdFxcdCAqIChyZXF1aXJlZCBieSBoYXJkd2FyZSk7IERUWVA9ZGF0YSBzZWxlY3RzIHRoZSBkYXRhXFxuK1xcdFxcdCAqIGRlc2NyaXB0b3I7IElGQ1MgYXNrcyB0aGUgTUFDIHRvIGFwcGVuZCB0aGUgRXRoZXJuZXRcXG4rXFx0XFx0ICogRkNTICh3aXRob3V0IGl0IHRoZSBmcmFtZSBpcyBkcm9wcGVkIGFzIG1hbGZvcm1lZCk7XFxuK1xcdFxcdCAqIEVPUCBtYXJrcyBlbmQgb2YgcGFja2V0LiAgRFRBTEVOIGlzIHRoZSBidWZmZXIgbGVuZ3RoXFxuK1xcdFxcdCAqIGluIGJpdHMgMTU6MCBvZiBjbWRfdHlwZV9sZW4uXFxuK1xcdFxcdCAqL1xcbitcXHRcXHR0eC1cXHUwMDNlcmVhZC5jbWRfdHlwZV9sZW4gPSBjcHVfdG9fbGUzMigodWludDMyX3Qpc2l6ZSB8XFxuK1xcdFxcdFxcdEUxMDAwX0FEVlRYRF9EVFlQX0RBVEEgfFxcbitcXHRcXHRcXHRFMTAwMF9BRFZUWERfRENNRF9ERVhUIHxcXG4rXFx0XFx0XFx0RTEwMDBfQURWVFhEX0RDTURfSUZDUyB8XFxuK1xcdFxcdFxcdEUxMDAwX0FEVlRYRF9EQ01EX0VPUCk7XFxuK1xcdFxcdC8qXFxuK1xcdFxcdCAqIFBBWUxFTiAoc2VjdGlvbiA3LjIuMi4zLjExKSBpcyB0aGUgdG90YWwgcGF5bG9hZCBzaXplXFxuK1xcdFxcdCAqIGluIG9saW5mb19zdGF0dXNbMzE6MTRdLlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0dHgtXFx1MDAzZXJlYWQub2xpbmZvX3N0YXR1cyA9XFxuK1xcdFxcdFxcdGNwdV90b19sZTMyKCh1aW50MzJfdClzaXplIFxcdTAwM2NcXHUwMDNjIEUxMDAwX0FEVlRYRF9QQVlMRU5fU0hJRlQpO1xcbitcXG4rXFx0XFx0aWdiLVxcdTAwM2V0eF90YWlsID0gKGlnYi1cXHUwMDNldHhfdGFpbCArIDEpICUgUklOR19TSVpFO1xcbitcXHRcXHRpZ2ItXFx1MDAzZXJ4X3RhaWwgPSAoaWdiLVxcdTAwM2VyeF90YWlsICsgMSkgJSBSSU5HX1NJWkU7XFxuK1xcdH1cXG4rXFxuK1xcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfUkRUKDApLCBpZ2ItXFx1MDAzZXJ4X3RhaWwpO1xcbitcXHRpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX1REVCgwKSwgaWdiLVxcdTAwM2V0eF90YWlsKTtcXG4rfVxcbitcXG4rLypcXG4rICogUmVzZXQgdGhlIGRldmljZSB2aWEgVkZJT19ERVZJQ0VfUkVTRVQgKFBDSWUgRkxSIG9uIHRoZSA4MjU3NikgYW5kXFxuKyAqIHJlLXByb2dyYW0gaXQuICBWRklPX0RFVklDRV9SRVNFVCB0ZWFycyBkb3duIHRoZSBrZXJuZWwtc2lkZSBNU0ktWFxcbisgKiB0cmlnZ2VyIGJ1dCBsZWF2ZXMgdXNlci1zaWRlIGV2ZW50ZmRzIGludGFjdCwgc28gcmUtYXJtIHRoZSB0cmlnZ2VyXFxuKyAqIHZpYSB2ZmlvX3BjaV9pcnFfcmVlbmFibGUoKSBiZWZvcmUgcmVwcm9ncmFtbWluZyBzbyBhbnkgY2FsbGVyLWNhY2hlZFxcbisgKiBldmVudGZkIHJlbWFpbnMgdmFsaWQuXFxuKyAqXFxuKyAqIEZMUiBjbGVhcnMgZGV2aWNlLXNpZGUgc3RhdGUgdG8gcG93ZXItb24gcmVzZXQgdmFsdWVzIChkYXRhc2hlZXRcXG4rICogNC4yLjEuNS4xOiBhIFBGIEZMUiBpcyBcXFwiZXF1aXZhbGVudCB0byBhIEQwLVxcdTAwM2VEMy1cXHUwMDNlRDAgdHJhbnNpdGlvblxcXCIpLCBzb1xcbisgKiBFSU1TIGFuZCBFSUNSIGNvbWUgYmFjayBhcyAwIGZyb20gdGhlaXIgcmVnaXN0ZXItZGVmaW5lZCBpbml0aWFsXFxuKyAqIHZhbHVlcywgYW5kIGlnYl9od19pbml0KCkgcmVzZXRzIHR4X3RhaWwvcnhfdGFpbCB0byAwLiAgVGhlIG5leHRcXG4rICogaWdiX21lbWNweV9zdGFydCgpIHdpbGwgbWVtc2V0IGVhY2ggZGVzY3JpcHRvciBpdCB0b3VjaGVzIGJlZm9yZVxcbisgKiBzdWJtaXNzaW9uLCBzbyBubyBleHBsaWNpdCBJTUMvRUlDUiB3cml0ZXMgb3IgcmluZyBtZW1zZXRzIGFyZVxcbisgKiBuZWVkZWQgaGVyZS5cXG4rICovXFxuK3N0YXRpYyB2b2lkIGlnYl9lcnJvcl9yZXNldF9hbmRfcmVpbml0KHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSlcXG4re1xcbitcXHR2ZmlvX3BjaV9kZXZpY2VfcmVzZXQoZGV2aWNlKTtcXG4rXFx0dmZpb19wY2lfbXNpeF9yZWVuYWJsZShkZXZpY2UsIE1TSVhfVkVDVE9SLCAxKTtcXG4rXFx0aWdiX2h3X2luaXQoZGV2aWNlKTtcXG4rfVxcbitcXG4rc3RhdGljIGludCBpZ2JfbWVtY3B5X3dhaXQoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlKVxcbit7XFxuK1xcdHN0cnVjdCBpZ2IgKmlnYiA9IHRvX2lnYl9zdGF0ZShkZXZpY2UpO1xcbitcXHRzdHJ1Y3QgaWdiX3J4X2Rlc2MgKnJ4O1xcbitcXHR1MzIgc3RhdHVzID0gMDtcXG4rXFx0dTMyIHByZXZfdGFpbDtcXG4rXFx0aW50IHJldHJpZXM7XFxuK1xcbitcXHRwcmV2X3RhaWwgPSAoaWdiLVxcdTAwM2VyeF90YWlsICsgUklOR19TSVpFIC0gMSkgJSBSSU5HX1NJWkU7XFxuK1xcdHJ4ID0gXFx1MDAyNmlnYi1cXHUwMDNlcnhfcmluZ1twcmV2X3RhaWxdO1xcbitcXG4rXFx0LypcXG4rXFx0ICogUmVhbCA4MjU3NiBoYXJkd2FyZSBwcm9jZXNzZXMgdGhlIGRlc2NyaXB0b3IgcmluZyBhdCBsaW5lIHJhdGUuXFxuK1xcdCAqIG1heF9tZW1jcHlfc2l6ZSA9IChSSU5HX1NJWkUgLSAxKSAqIElHQl9NQVhfQ0hVTktfU0laRSB+PSA0IE1CLFxcbitcXHQgKiBzcGxpdCBpbnRvIDQwOTUgMSBLQiBmcmFtZXMuICBBdCAxIEdiL3MgKH4xMjUgTUIvcykgdGhlIHdvcnN0XFxuK1xcdCAqIHZhbGlkIG1lbWNweSB0YWtlcyB+MzIgbXMgb24gdGhlIHdpcmUsIHBsdXMgcGVyLWZyYW1lIHByZWFtYmxlLFxcbitcXHQgKiBTRkQsIElGRyBhbmQgRkNTIG92ZXJoZWFkICh+MyUpIGFuZCBkZXNjcmlwdG9yIGZldGNoL3dyaXRlYmFja1xcbitcXHQgKiBsYXRlbmN5LiAgV2FpdCB1cCB0byB+MjAwIG1zIGJlZm9yZSBkZWNsYXJpbmcgdGhlIGRldmljZSBodW5nO1xcbitcXHQgKiB+NnggdGhlIGxpbmUtcmF0ZSBmbG9vciBsZWF2ZXMgY29tZm9ydGFibGUgaGVhZHJvb20gZm9yIGhvc3RcXG4rXFx0ICogc2NoZWR1bGluZyBqaXR0ZXIgd2hpbGUga2VlcGluZyB0aGUgaW50ZW50aW9uYWwgaW52YWxpZC1ETUFcXG4rXFx0ICogdGVzdHMgYm91bmRlZC5cXG4rXFx0ICovXFxuK1xcdHJldHJpZXMgPSAyMDA7XFxuK1xcdHdoaWxlIChyZXRyaWVzLS0gXFx1MDAzZSAwKSB7XFxuK1xcdFxcdHN0YXR1cyA9IGxlMzJfdG9fY3B1KFJFQURfT05DRShyeC1cXHUwMDNld2Iuc3RhdHVzX2Vycm9yKSk7XFxuK1xcdFxcdGlmIChzdGF0dXMgXFx1MDAyNiAxKVxcbitcXHRcXHRcXHRicmVhaztcXG4rXFx0XFx0dXNsZWVwKDEwMDApO1xcbitcXHR9XFxuK1xcbitcXHRpZiAoc3RhdHVzIFxcdTAwMjYgMSlcXG4rXFx0XFx0LypcXG4rXFx0XFx0ICogRW5zdXJlIHRoZSB0ZXN0IGNvZGUgZG9lc24ndCBzcGVjdWxhdGl2ZWx5IHJlYWQgdGhlIERNQVxcbitcXHRcXHQgKiBkZXN0aW5hdGlvbiBidWZmZXIgYmVmb3JlIHdlIGhhdmUgdmVyaWZpZWQgdGhhdCB0aGVcXG4rXFx0XFx0ICogZGVzY3JpcHRvciB3cml0ZWJhY2sgaXMgY29tcGxldGUuXFxuK1xcdFxcdCAqL1xcbitcXHRcXHRybWIoKTtcXG4rXFxuK1xcdGlnYl9pcnFfY2xlYXIoaWdiKTtcXG4rXFxuK1xcdGlnYl9pcnFfZW5hYmxlKGlnYik7XFxuK1xcbitcXHRpZiAoc3RhdHVzIFxcdTAwMjYgMSlcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcbitcXHQvKlxcbitcXHQgKiBUaGUgZGVzY3JpcHRvciBuZXZlciBjb21wbGV0ZWQuICBPbiByZWFsIDgyNTc2IGhhcmR3YXJlIHRoaXNcXG4rXFx0ICogdHlwaWNhbGx5IGZvbGxvd3MgYSBETUEtcmVhZCBmYXVsdCBmcm9tIG9uZSBvZiB0aGUgaW50ZW50aW9uYWxcXG4rXFx0ICogdW5tYXBwZWQtSU9WQSB0ZXN0czsgdGhlIGZhdWx0IGxlYXZlcyB0aGUgZGVzY3JpcHRvciBlbmdpbmVcXG4rXFx0ICogdW5hYmxlIHRvIHNlcnZpY2Ugc3Vic2VxdWVudCB2YWxpZCBkZXNjcmlwdG9ycy4gIENUUkwuUlNUIGFsb25lXFxuK1xcdCAqIHJlaW5pdGlhbGl6ZXMgdGhlIHF1ZXVlIHJlZ2lzdGVycyBidXQgbGVhdmVzIHRoZSBlbmdpbmUgd2VkZ2VkXFxuK1xcdCAqIGZvciB0aGUgY3VycmVudCBwcm9jZXNzLCBzbyBhIGJyb2FkZXIgVkZJT19ERVZJQ0VfUkVTRVQgKEZMUilcXG4rXFx0ICogaXMgcmVxdWlyZWQuXFxuK1xcdCAqXFxuK1xcdCAqIERlbGF5IGJlZm9yZSByZXF1ZXN0aW5nIHJlc2V0IHNvIFBDSWUvSU9NTVUvQUVSIGVycm9yIGhhbmRsaW5nXFxuK1xcdCAqIHRyaWdnZXJlZCBieSB0aGUganVzdC1vYnNlcnZlZCBETUEgZmF1bHQgY2FuIHJlbGVhc2UgdGhlIGRldmljZVxcbitcXHQgKiBsb2NrIFZGSU9fREVWSUNFX1JFU0VUIGNvbnRlbmRzIGZvci4gIFRoZSAxMCBtcyB2YWx1ZSBpc1xcbitcXHQgKiBoZXVyaXN0aWMuICBUaGUgY3VycmVudCBtZW1jcHkgc3RpbGwgZmFpbHMgd2l0aCAtRVRJTUVET1VUO1xcbitcXHQgKiByZWNvdmVyeSBvbmx5IGVuc3VyZXMgdGhlIG5leHQgbWVtY3B5IHN0YXJ0cyBmcm9tIGEgdXNhYmxlIHN0YXRlLlxcbitcXHQgKi9cXG4rXFx0dXNsZWVwKDEwMDAwKTtcXG4rXFx0aWdiX2Vycm9yX3Jlc2V0X2FuZF9yZWluaXQoZGV2aWNlKTtcXG4rXFxuK1xcdHJldHVybiAtRVRJTUVET1VUO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBpZ2Jfc2VuZF9tc2koc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlKVxcbit7XFxuK1xcdHN0cnVjdCBpZ2IgKmlnYiA9IHRvX2lnYl9zdGF0ZShkZXZpY2UpO1xcbitcXG4rXFx0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9FSUNTLCAxKTtcXG4rfVxcbitcXG4rY29uc3Qgc3RydWN0IHZmaW9fcGNpX2RyaXZlcl9vcHMgaWdiX29wcyA9IHtcXG4rXFx0Lm5hbWUgPSBcXFwiaWdiXFxcIixcXG4rXFx0LnByb2JlID0gaWdiX3Byb2JlLFxcbitcXHQuaW5pdCA9IGlnYl9pbml0LFxcbitcXHQucmVtb3ZlID0gaWdiX3JlbW92ZSxcXG4rXFx0Lm1lbWNweV9zdGFydCA9IGlnYl9tZW1jcHlfc3RhcnQsXFxuK1xcdC5tZW1jcHlfd2FpdCA9IGlnYl9tZW1jcHlfd2FpdCxcXG4rXFx0LnNlbmRfbXNpID0gaWdiX3NlbmRfbXNpLFxcbit9O1xcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9pbmNsdWRlL2xpYnZmaW8vdmZpb19wY2lfZGV2aWNlLmggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9pbmNsdWRlL2xpYnZmaW8vdmZpb19wY2lfZGV2aWNlLmhcXG5pbmRleCAyODU4ODg1YTg5YmJiZi4uMmU2N2FmYzBkNTgwOTggMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvaW5jbHVkZS9saWJ2ZmlvL3ZmaW9fcGNpX2RldmljZS5oXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvaW5jbHVkZS9saWJ2ZmlvL3ZmaW9fcGNpX2RldmljZS5oXFxuQEAgLTY4LDYgKzY4LDggQEAgdm9pZCB2ZmlvX3BjaV9jb25maWdfYWNjZXNzKHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSwgYm9vbCB3cml0ZSxcXG4gdm9pZCB2ZmlvX3BjaV9pcnFfZW5hYmxlKHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSwgdTMyIGluZGV4LFxcbiBcXHRcXHRcXHQgdTMyIHZlY3RvciwgaW50IGNvdW50KTtcXG4gdm9pZCB2ZmlvX3BjaV9pcnFfZGlzYWJsZShzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UsIHUzMiBpbmRleCk7XFxuK3ZvaWQgdmZpb19wY2lfaXJxX3JlZW5hYmxlKHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSwgdTMyIGluZGV4LFxcbitcXHRcXHRcXHQgICB1MzIgdmVjdG9yLCBpbnQgY291bnQpO1xcbiB2b2lkIHZmaW9fcGNpX2lycV90cmlnZ2VyKHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSwgdTMyIGluZGV4LCB1MzIgdmVjdG9yKTtcXG4gXFxuIHN0YXRpYyBpbmxpbmUgdm9pZCBmY250bF9zZXRfbm9uYmxvY2soaW50IGZkKVxcbkBAIC05Miw2ICs5NCwxMiBAQCBzdGF0aWMgaW5saW5lIHZvaWQgdmZpb19wY2lfbXNpX2Rpc2FibGUoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlKVxcbiBcXHR2ZmlvX3BjaV9pcnFfZGlzYWJsZShkZXZpY2UsIFZGSU9fUENJX01TSV9JUlFfSU5ERVgpO1xcbiB9XFxuIFxcbitzdGF0aWMgaW5saW5lIHZvaWQgdmZpb19wY2lfbXNpX3JlZW5hYmxlKHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSxcXG4rXFx0XFx0XFx0XFx0XFx0IHUzMiB2ZWN0b3IsIGludCBjb3VudClcXG4re1xcbitcXHR2ZmlvX3BjaV9pcnFfcmVlbmFibGUoZGV2aWNlLCBWRklPX1BDSV9NU0lfSVJRX0lOREVYLCB2ZWN0b3IsIGNvdW50KTtcXG4rfVxcbitcXG4gc3RhdGljIGlubGluZSB2b2lkIHZmaW9fcGNpX21zaXhfZW5hYmxlKHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSxcXG4gXFx0XFx0XFx0XFx0XFx0dTMyIHZlY3RvciwgaW50IGNvdW50KVxcbiB7XFxuQEAgLTEwMyw2ICsxMTEsMTIgQEAgc3RhdGljIGlubGluZSB2b2lkIHZmaW9fcGNpX21zaXhfZGlzYWJsZShzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UpXFxuIFxcdHZmaW9fcGNpX2lycV9kaXNhYmxlKGRldmljZSwgVkZJT19QQ0lfTVNJWF9JUlFfSU5ERVgpO1xcbiB9XFxuIFxcbitzdGF0aWMgaW5saW5lIHZvaWQgdmZpb19wY2lfbXNpeF9yZWVuYWJsZShzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UsXFxuK1xcdFxcdFxcdFxcdFxcdCAgdTMyIHZlY3RvciwgaW50IGNvdW50KVxcbit7XFxuK1xcdHZmaW9fcGNpX2lycV9yZWVuYWJsZShkZXZpY2UsIFZGSU9fUENJX01TSVhfSVJRX0lOREVYLCB2ZWN0b3IsIGNvdW50KTtcXG4rfVxcbitcXG4gc3RhdGljIGlubGluZSBpbnQgX190b19pb3ZhKHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSwgdm9pZCAqdmFkZHIsIGlvdmFfdCAqaW92YSlcXG4ge1xcbiBcXHRyZXR1cm4gX19pb21tdV9odmEyaW92YShkZXZpY2UtXFx1MDAzZWlvbW11LCB2YWRkciwgaW92YSk7XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2xpYnZmaW8ubWsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9saWJ2ZmlvLm1rXFxuaW5kZXggOWY0N2JjZWVkMTZmNGMuLjFmMTNjY2EwNDM0OGI0IDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2xpYnZmaW8ubWtcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9saWJ2ZmlvLm1rXFxuQEAgLTEyLDYgKzEyLDcgQEAgTElCVkZJT19DICs9IHZmaW9fcGNpX2RyaXZlci5jXFxuIGlmZXEgKCQoQVJDSDp4ODZfNjQ9eDg2KSx4ODYpXFxuIExJQlZGSU9fQyArPSBkcml2ZXJzL2lvYXQvaW9hdC5jXFxuIExJQlZGSU9fQyArPSBkcml2ZXJzL2RzYS9kc2EuY1xcbitMSUJWRklPX0MgKz0gZHJpdmVycy9pZ2IvaWdiLmNcXG4gZW5kaWZcXG4gXFxuIExJQlZGSU9fT1VUUFVUIDo9ICQoT1VUUFVUKS9saWJ2ZmlvXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL3ZmaW9fcGNpX2RldmljZS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvdmZpb19wY2lfZGV2aWNlLmNcXG5pbmRleCBmYzc1ZTA0ZWYwMTBjZi4uN2I4Mzk0ZDBhYzUwNzYgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvdmZpb19wY2lfZGV2aWNlLmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi92ZmlvX3BjaV9kZXZpY2UuY1xcbkBAIC0xMDYsNiArMTA2LDI4IEBAIHZvaWQgdmZpb19wY2lfaXJxX2Rpc2FibGUoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlLCB1MzIgaW5kZXgpXFxuIFxcdHZmaW9fcGNpX2lycV9zZXQoZGV2aWNlLCBpbmRleCwgMCwgMCwgTlVMTCk7XFxuIH1cXG4gXFxuKy8qXFxuKyAqIFJlLWlzc3VlIFZGSU9fREVWSUNFX1NFVF9JUlFTIGZvciBhbiBhbHJlYWR5LWVuYWJsZWQgdmVjdG9yIHJhbmdlIHVzaW5nXFxuKyAqIHRoZSBleGlzdGluZyBldmVudGZkcy4gIEludGVuZGVkIGZvciBkcml2ZXJzIHRoYXQgbmVlZCB0byByZS1hcm0gZGV2aWNlXFxuKyAqIGludGVycnVwdHMgYWZ0ZXIgYSBWRklPX0RFVklDRV9SRVNFVCwgd2hpY2ggdGVhcnMgZG93biB0aGUga2VybmVsLXNpZGVcXG4rICogSVJRIHRyaWdnZXIgYnV0IGxlYXZlcyB1c2VyLXNpZGUgZXZlbnRmZHMgaW50YWN0LiAgUmVjcmVhdGluZyB0aGVcXG4rICogZXZlbnRmZHMgd291bGQgaW52YWxpZGF0ZSBhbnkgdGVzdC1maXh0dXJlIGNhY2hlIG9mIHRoZSBmZCwgc28gdGhpc1xcbisgKiBoZWxwZXIgZGVsaWJlcmF0ZWx5IHByZXNlcnZlcyB0aGVtLlxcbisgKi9cXG4rdm9pZCB2ZmlvX3BjaV9pcnFfcmVlbmFibGUoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlLCB1MzIgaW5kZXgsXFxuK1xcdFxcdFxcdCAgIHUzMiB2ZWN0b3IsIGludCBjb3VudClcXG4re1xcbitcXHRpbnQgaTtcXG4rXFxuK1xcdGNoZWNrX3N1cHBvcnRlZF9pcnFfaW5kZXgoaW5kZXgpO1xcbitcXG4rXFx0Zm9yIChpID0gdmVjdG9yOyBpIFxcdTAwM2MgdmVjdG9yICsgY291bnQ7IGkrKylcXG4rXFx0XFx0VkZJT19BU1NFUlRfR0UoZGV2aWNlLVxcdTAwM2Vtc2lfZXZlbnRmZHNbaV0sIDAsXFxuK1xcdFxcdFxcdCAgICAgICBcXFwidmVjdG9yICVkIGV2ZW50ZmQgbm90IGFsbG9jYXRlZFxcXFxuXFxcIiwgaSk7XFxuK1xcbitcXHR2ZmlvX3BjaV9pcnFfc2V0KGRldmljZSwgaW5kZXgsIHZlY3RvciwgY291bnQsIGRldmljZS1cXHUwMDNlbXNpX2V2ZW50ZmRzICsgdmVjdG9yKTtcXG4rfVxcbitcXG4gc3RhdGljIHZvaWQgdmZpb19wY2lfaXJxX2dldChzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UsIHUzMiBpbmRleCxcXG4gXFx0XFx0XFx0ICAgICBzdHJ1Y3QgdmZpb19pcnFfaW5mbyAqaXJxX2luZm8pXFxuIHtcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvdmZpb19wY2lfZHJpdmVyLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi92ZmlvX3BjaV9kcml2ZXIuY1xcbmluZGV4IDY4MjdmNGE2ZmViZTk5Li5hNWQwNTQ3MTMyYzQwNSAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi92ZmlvX3BjaV9kcml2ZXIuY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL3ZmaW9fcGNpX2RyaXZlci5jXFxuQEAgLTUsMTIgKzUsMTQgQEBcXG4gI2lmZGVmIF9feDg2XzY0X19cXG4gZXh0ZXJuIHN0cnVjdCB2ZmlvX3BjaV9kcml2ZXJfb3BzIGRzYV9vcHM7XFxuIGV4dGVybiBzdHJ1Y3QgdmZpb19wY2lfZHJpdmVyX29wcyBpb2F0X29wcztcXG4rZXh0ZXJuIHN0cnVjdCB2ZmlvX3BjaV9kcml2ZXJfb3BzIGlnYl9vcHM7XFxuICNlbmRpZlxcbiBcXG4gc3RhdGljIHN0cnVjdCB2ZmlvX3BjaV9kcml2ZXJfb3BzICpkcml2ZXJfb3BzW10gPSB7XFxuICNpZmRlZiBfX3g4Nl82NF9fXFxuIFxcdFxcdTAwMjZkc2Ffb3BzLFxcbiBcXHRcXHUwMDI2aW9hdF9vcHMsXFxuK1xcdFxcdTAwMjZpZ2Jfb3BzLFxcbiAjZW5kaWZcXG4gfTtcXG4gXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTExVDE5OjEzOjQyLjE5MzEyMTcwN1oiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTEwMzI2MDc1NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggb25seSBtb2RpZmllcyBjb2RlIGluIHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vLCB3aGljaCBjb250YWlucyB1c2VyLXNwYWNlIHNlbGZ0ZXN0cyBhbmQgZG9lcyBub3QgYWZmZWN0IHRoZSBjb3JlIGtlcm5lbCwgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlIGNvZGUuIFRoZXJlZm9yZSwgaXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IGNhbiBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG5ldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0XG4gICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksXG4gICBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDMxMzdjMDMxOTlmNjQ3ZWZiNDNiYmJhZjgwNTM4NDRkMGNiNjAwZWRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU2F0IEp1bCAxMSAxOToxMzo0MCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2RyaXZlcnMvaWdiL2UxMDAwXzgyNTc1LmggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9kcml2ZXJzL2lnYi9lMTAwMF84MjU3NS5oXG5uZXcgZmlsZSBtb2RlIDEyMDAwMFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLmI4NGFmZmRlYzU1OThlXG4tLS0gL2Rldi9udWxsXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9kcml2ZXJzL2lnYi9lMTAwMF84MjU3NS5oXG5AQCAtMCwwICsxIEBAXG4rLi4vLi4vLi4vLi4vLi4vLi4vLi4vZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWdiL2UxMDAwXzgyNTc1LmhcblxcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGVcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9kcml2ZXJzL2lnYi9lMTAwMF9kZWZpbmVzLmggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9kcml2ZXJzL2lnYi9lMTAwMF9kZWZpbmVzLmhcbm5ldyBmaWxlIG1vZGUgMTIwMDAwXG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uOWY5N2Y0MzMwMDg2NmRcbi0tLSAvZGV2L251bGxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2RyaXZlcnMvaWdiL2UxMDAwX2RlZmluZXMuaFxuQEAgLTAsMCArMSBAQFxuKy4uLy4uLy4uLy4uLy4uLy4uLy4uL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lnYi9lMTAwMF9kZWZpbmVzLmhcblxcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGVcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9kcml2ZXJzL2lnYi9lMTAwMF9yZWdzLmggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9kcml2ZXJzL2lnYi9lMTAwMF9yZWdzLmhcbm5ldyBmaWxlIG1vZGUgMTIwMDAwXG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uYzczMzYzNDE3MWJiMTNcbi0tLSAvZGV2L251bGxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2RyaXZlcnMvaWdiL2UxMDAwX3JlZ3MuaFxuQEAgLTAsMCArMSBAQFxuKy4uLy4uLy4uLy4uLy4uLy4uLy4uL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lnYi9lMTAwMF9yZWdzLmhcblxcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGVcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9kcml2ZXJzL2lnYi9pZ2IuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2RyaXZlcnMvaWdiL2lnYi5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLjIwNmExZTY0ODljMjFjXG4tLS0gL2Rldi9udWxsXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9kcml2ZXJzL2lnYi9pZ2IuY1xuQEAgLTAsMCArMSw1NTQgQEBcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4rI2luY2x1ZGUgXHUwMDNjdW5pc3RkLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NlcnJuby5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjc3RkaW50LmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9pby5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvcGNpX3JlZ3MuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3BjaV9pZHMuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2tlcm5lbC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvY29tcGlsZXIuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2FzbS9iYXJyaWVyLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9taWkuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpYnZmaW8vdmZpb19wY2lfZGV2aWNlLmhcdTAwM2VcbitcbisjaW5jbHVkZSBcImUxMDAwX3JlZ3MuaFwiXG4rI2luY2x1ZGUgXCJlMTAwMF9kZWZpbmVzLmhcIlxuKyNpbmNsdWRlIFwiZTEwMDBfODI1NzUuaFwiXG4rXG4rI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMXzgyNTc2IDB4MTBDOVxuKyNkZWZpbmUgSUdCX01BWF9DSFVOS19TSVpFIDEwMjRcbisjZGVmaW5lIE1TSVhfVkVDVE9SIDBcbisjZGVmaW5lIFJJTkdfU0laRSA0MDk2IC8qIE51bWJlciBvZiBkZXNjcmlwdG9ycyBpbiByaW5nICovXG4rXG4rc3RydWN0IGlnYl90eF9kZXNjIHtcbitcdHVuaW9uIHtcbitcdFx0c3RydWN0IHtcbitcdFx0XHR1NjQgYnVmZmVyX2FkZHI7IC8qIEFkZHJlc3Mgb2YgZGVzY3JpcHRvcidzIGRhdGEgYnVmZmVyICovXG4rXHRcdFx0dTMyIGNtZF90eXBlX2xlbjsgLyogQ29tbWFuZC9UeXBlL0xlbmd0aCAqL1xuK1x0XHRcdHUzMiBvbGluZm9fc3RhdHVzOyAvKiBDb250ZXh0L0J1ZmZlciBpbmZvICovXG4rXHRcdH0gcmVhZDtcbitcbitcdFx0c3RydWN0IHtcbitcdFx0XHR1NjQgcnN2ZDsgICAgICAgIC8qIFJlc2VydmVkICovXG4rXHRcdFx0dTMyIG54dHNlcV9zZWVkOyAvKiBOZXh0IHNlcXVlbmNlIHNlZWQgKi9cbitcdFx0XHR1MzIgc3RhdHVzOyAgICAgIC8qIERlc2NyaXB0b3Igc3RhdHVzICovXG4rXHRcdH0gd2I7XG4rXHR9O1xuK307XG4rXG4rc3RydWN0IGlnYl9yeF9kZXNjIHtcbitcdHVuaW9uIHtcbitcdFx0c3RydWN0IHtcbitcdFx0XHR1NjQgcGt0X2FkZHI7IC8qIFBhY2tldCBidWZmZXIgYWRkcmVzcyAqL1xuK1x0XHRcdHU2NCBoZHJfYWRkcjsgLyogSGVhZGVyIGJ1ZmZlciBhZGRyZXNzICovXG4rXHRcdH0gcmVhZDtcbitcdFx0c3RydWN0IHtcbitcdFx0XHR1MTYgcGt0X2luZm87ICAgICAvKiBSU1MgdHlwZSwgUGFja2V0IHR5cGUgKi9cbitcdFx0XHR1MTYgaGRyX2luZm87ICAgICAvKiBTcGxpdCBIZWFkLCBidWYgbGVuICovXG4rXHRcdFx0dTMyIHJzczsgICAgICAgICAgLyogUlNTIEhhc2ggKi9cbitcdFx0XHR1MzIgc3RhdHVzX2Vycm9yOyAvKiBleHQgc3RhdHVzL2Vycm9yICovXG4rXHRcdFx0dTE2IGxlbmd0aDsgICAgICAgLyogUGFja2V0IGxlbmd0aCAqL1xuK1x0XHRcdHUxNiB2bGFuOyAgICAgICAgIC8qIFZMQU4gdGFnICovXG4rXHRcdH0gd2I7IC8qIHdyaXRlYmFjayAqL1xuK1x0fTtcbit9O1xuK1xuK3N0cnVjdCBpZ2Ige1xuK1x0dm9pZCAqYmFyMDtcbitcdHUzMiB0eF90YWlsO1xuK1x0dTMyIHJ4X3RhaWw7XG4rXHRzdHJ1Y3QgaWdiX3R4X2Rlc2MgdHhfcmluZ1tSSU5HX1NJWkVdIF9fYXR0cmlidXRlX18oKGFsaWduZWQoMTI4KSkpO1xuK1x0c3RydWN0IGlnYl9yeF9kZXNjIHJ4X3JpbmdbUklOR19TSVpFXSBfX2F0dHJpYnV0ZV9fKChhbGlnbmVkKDEyOCkpKTtcbit9O1xuK1xuK3N0YXRpYyBpbmxpbmUgc3RydWN0IGlnYiAqdG9faWdiX3N0YXRlKHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSlcbit7XG4rXHRyZXR1cm4gKHN0cnVjdCBpZ2IgKilkZXZpY2UtXHUwMDNlZHJpdmVyLnJlZ2lvbi52YWRkcjtcbit9XG4rXG4rc3RhdGljIGlubGluZSB2b2lkIGlnYl93cml0ZTMyKHN0cnVjdCBpZ2IgKmlnYiwgdTMyIHJlZywgdTMyIHZhbClcbit7XG4rXHR3cml0ZWwodmFsLCBpZ2ItXHUwMDNlYmFyMCArIHJlZyk7XG4rfVxuK1xuK3N0YXRpYyBpbmxpbmUgdTMyIGlnYl9yZWFkMzIoc3RydWN0IGlnYiAqaWdiLCB1MzIgcmVnKVxuK3tcbitcdHJldHVybiByZWFkbChpZ2ItXHUwMDNlYmFyMCArIHJlZyk7XG4rfVxuK1xuK3N0YXRpYyBpbnQgaWdiX3dyaXRlX3BoeShzdHJ1Y3QgaWdiICppZ2IsIHUzMiBvZmZzZXQsIHUxNiBkYXRhKVxuK3tcbitcdHUzMiBtZGljO1xuK1x0aW50IGk7XG4rXG4rXHQvKlxuK1x0ICogV3JpdGUgYSBQSFkgcmVnaXN0ZXIgb3ZlciBNRElPLlxuK1x0ICpcbitcdCAqIEEgcHJvZHVjdGlvbiBkcml2ZXIgd291bGQgaG9sZCB0aGUgU1cvRlcgc2VtYXBob3JlIChTV1NNLlNXRVNNQkkgKyB0aGVcbitcdCAqIFNXX0ZXX1NZTkMgUEhZIGJpdCkgYWNyb3NzIHRoZSBNRElPIHRyYW5zYWN0aW9uIHRvIHNlcmlhbGl6ZSBhZ2FpbnN0IHRoZVxuK1x0ICogZGV2aWNlJ3MgbWFuYWdlbWVudCBmaXJtd2FyZS4gIFRoZSBzZWxmdGVzdCBvd25zIHRoZSBhc3NpZ25lZCBmdW5jdGlvblxuK1x0ICogZXhjbHVzaXZlbHkgb24gYSBkZWRpY2F0ZWQgdGVzdCBkZXZpY2Ugd2l0aCBubyBhY3RpdmUgbWFuYWdlYWJpbGl0eVxuK1x0ICogY29udGVuZGluZyBmb3IgdGhlIFBIWSwgc28gdGhlIHN5bmMgaXMgb21pdHRlZDsgaXQgc2hvdWxkIGJlIGFkZGVkIGhlcmVcbitcdCAqIGlmIHRoaXMgZXZlciBuZWVkcyB0byBydW4gb24gYSBtYW5hZ2VhYmlsaXR5LWVuYWJsZWQgTklDLlxuK1x0ICovXG4rXHRtZGljID0gKCgodTMyKWRhdGEpIHxcbitcdFx0KG9mZnNldCBcdTAwM2NcdTAwM2MgRTEwMDBfTURJQ19SRUdfU0hJRlQpIHxcbitcdFx0KDEgXHUwMDNjXHUwMDNjIEUxMDAwX01ESUNfUEhZX1NISUZUKSB8XG4rXHRcdEUxMDAwX01ESUNfT1BfV1JJVEUpO1xuK1xuK1x0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9NRElDLCBtZGljKTtcbitcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIDEwMDA7IGkrKykge1xuK1x0XHR1c2xlZXAoNTApO1xuK1x0XHRtZGljID0gaWdiX3JlYWQzMihpZ2IsIEUxMDAwX01ESUMpO1xuK1x0XHRpZiAobWRpYyBcdTAwMjYgRTEwMDBfTURJQ19SRUFEWSlcbitcdFx0XHRicmVhaztcbitcdH1cbitcbitcdGlmICghKG1kaWMgXHUwMDI2IEUxMDAwX01ESUNfUkVBRFkpKVxuK1x0XHRyZXR1cm4gLTE7XG4rXG4rXHRpZiAobWRpYyBcdTAwMjYgRTEwMDBfTURJQ19FUlJPUilcbitcdFx0cmV0dXJuIC0xO1xuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuKy8qXG4rICogQ29uZmlndXJlIHRoZSBkZXZpY2UgZm9yIFBIWSBpbnRlcm5hbCBsb29wYmFjayBwZXIgODI1NzYgZGF0YXNoZWV0XG4rICogc2VjdGlvbiAzLjUuNi4zLjEuICBGb3JjZSB0aGUgUEhZIHRvIDFHYi9zIGZ1bGwgZHVwbGV4IHdpdGggbG9vcGJhY2tcbisgKiBlbmFibGVkLCB0aGVuIGZvcmNlIHRoZSBNQUMgbGluayBzdGF0ZSB0byBtYXRjaC4gIEludGVybmFsIGxvb3BiYWNrXG4rICogd3JhcHMgZGF0YSBhdCB0aGUgZW5kIG9mIHRoZSBQSFkgZGF0YXBhdGggKHNlY3Rpb24gMy41LjYuMyksIHNvIHRoZVxuKyAqIHBoeXNpY2FsIGxpbmsgc3RhdGUgaXMgaXJyZWxldmFudC5cbisgKlxuKyAqIFNlY3Rpb24gMy41LjYuMSBkaXJlY3RzIHRvIFwiVXNlIFBIWSBMb29wYmFjayBpbnN0ZWFkIG9mIE1BQyBMb29wYmFja1xuKyAqIG9uIHRoZSA4MjU3NlwiLCBhbmQgc2VjdGlvbiAzLjUuNi4yIHN0YXRlcyBcIk1BQyBMb29wYmFjayBpcyBub3QgdXNlZFxuKyAqIG9uIHRoaXMgZGV2aWNlLlwiICBSQ1RMLkxCTV9NQUMgaXMgc3RpbGwgc2V0IGVsc2V3aGVyZSBhcyBhIFFFTVUtb25seVxuKyAqIGFjY29tbW9kYXRpb247IHNlZSB0aGUgUkNUTCBwcm9ncmFtbWluZyBpbiB0aGUgY2FsbGVyIGZvciB0aGVcbisgKiByYXRpb25hbGUuXG4rICovXG4rc3RhdGljIHZvaWQgaWdiX3NldHVwX2xvb3BiYWNrKHN0cnVjdCBpZ2IgKmlnYilcbit7XG4rXHR1MzIgY3RybDtcbitcdGludCByZXQ7XG4rXG4rXHQvKlxuK1x0ICogS2ljayB0aGUgYXV0b25lZyBtYWNoaW5lcnkgc29sZWx5IHRvIGJyaW5nIFNUQVRVUy5MVSB1cCB1bmRlclxuK1x0ICogUUVNVSdzIGlnYiBlbXVsYXRpb246IFFFTVUgb25seSB1cGRhdGVzIFNUQVRVUy5MVSB2aWEgaXRzXG4rXHQgKiBhdXRvbmVnLWRvbmUgdGltZXIsIGFuZCB3aXRob3V0IExVIHNldCBpdHMgcmVjZWl2ZSBwYXRoXG4rXHQgKiAoZTEwMDB4X2h3X3J4X2VuYWJsZWQpIGRyb3BzIGV2ZXJ5IGxvb3BiYWNrIGZyYW1lLiAgT24gcmVhbFxuK1x0ICogaGFyZHdhcmUgYXV0b25lZyBjYW5ub3QgY29tcGxldGUgYmVmb3JlIHRoZSBuZXh0IFBIWSB3cml0ZVxuK1x0ICogYmVsb3cgY2xlYXJzIHRoZSBhdXRvbmVnLWVuYWJsZSBiaXQsIHNvIHRoaXMgaXMgZWZmZWN0aXZlbHkgYVxuK1x0ICogbm8tb3AgdGhlcmUuXG4rXHQgKi9cbitcdCh2b2lkKWlnYl93cml0ZV9waHkoaWdiLCBNSUlfQk1DUixcbitcdFx0XHQgICAgQk1DUl9BTkVOQUJMRSB8IEJNQ1JfQU5SRVNUQVJUKTtcbitcbitcdC8qIFBIWSBjb250cm9sOiBsb29wYmFjayArIDFHYi9zIGZ1bGwgZHVwbGV4LCBhdXRvbmVnIGRpc2FibGVkLiAqL1xuK1x0cmV0ID0gaWdiX3dyaXRlX3BoeShpZ2IsIE1JSV9CTUNSLFxuK1x0XHRcdCAgICBCTUNSX0xPT1BCQUNLIHxcbitcdFx0XHQgICAgQk1DUl9TUEVFRDEwMDAgfFxuK1x0XHRcdCAgICBCTUNSX0ZVTExEUExYKTtcbitcdFZGSU9fQVNTRVJUX0VRKHJldCwgMCwgXCJGYWlsZWQgdG8gd3JpdGUgUEhZIGNvbnRyb2wgcmVnaXN0ZXJcIik7XG4rXG4rXHQvKlxuK1x0ICogQnJpZWYgZGVsYXkgYmVmb3JlIGZvcmNpbmcgdGhlIE1BQywgbWlycm9yaW5nIHRoZSBrZXJuZWwgZXRodG9vbFxuK1x0ICogc2VsZnRlc3QgaW4gaWdiX2ludGVncmF0ZWRfcGh5X2xvb3BiYWNrKCkuICBOb3Qgc3BlY2lmaWVkIGJ5IHRoZVxuK1x0ICogZGF0YXNoZWV0LCBidXQgZW1waXJpY2FsbHkgcmVxdWlyZWQgYnkgdGhlIGtlcm5lbCBkcml2ZXIuXG4rXHQgKi9cbitcdHVzbGVlcCg1MDAwMCk7XG4rXG4rXHQvKlxuK1x0ICogRm9yY2UgdGhlIE1BQyB0byAxR2IvcyBmdWxsIGR1cGxleCB3aXRoIGxpbmsgdXAuICBXaXRob3V0IGZvcmNpbmdcbitcdCAqIHRoZSBsaW5rIHN0YXRlIHRoZSBkZXNjcmlwdG9yIGVuZ2luZSBkb2VzIG5vdCBydW4sIHNpbmNlIHRoZSBjaGlwXG4rXHQgKiBub3JtYWxseSB3YWl0cyBmb3IgYSByZWFsIG5lZ290aWF0ZWQgbGluay5cbitcdCAqL1xuK1x0Y3RybCA9IGlnYl9yZWFkMzIoaWdiLCBFMTAwMF9DVFJMKTtcbitcdGN0cmwgXHUwMDI2PSB+RTEwMDBfQ1RSTF9TUERfU0VMO1xuK1x0Y3RybCB8PSBFMTAwMF9DVFJMX0ZSQ1NQRCB8XG4rXHRcdEUxMDAwX0NUUkxfRlJDRFBYIHxcbitcdFx0RTEwMDBfQ1RSTF9TUERfMTAwMCB8XG4rXHRcdEUxMDAwX0NUUkxfRkQgfFxuK1x0XHRFMTAwMF9DVFJMX1NMVTtcbitcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfQ1RSTCwgY3RybCk7XG4rXG4rXHQvKlxuK1x0ICogU2V0dGxpbmcgZGVsYXkgbWF0Y2hpbmcgdGhlIGtlcm5lbCBldGh0b29sIHNlbGZ0ZXN0J3MgbXNsZWVwKDUwMClcbitcdCAqIGF0IHRoZSB0YWlsIG9mIGlnYl9pbnRlZ3JhdGVkX3BoeV9sb29wYmFjaygpLiAgTm90IHNwZWNpZmllZCBieVxuK1x0ICogdGhlIGRhdGFzaGVldDsgZW1waXJpY2FsLCBhbmQgaW5oZXJpdGVkIGZyb20gdGhlIGtlcm5lbCBkcml2ZXIuXG4rXHQgKi9cbitcdHVzbGVlcCg1MDAwMDApO1xuK31cbitcbitzdGF0aWMgaW50IGlnYl9wcm9iZShzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UpXG4re1xuK1x0aWYgKCF2ZmlvX3BjaV9kZXZpY2VfbWF0Y2goZGV2aWNlLCBQQ0lfVkVORE9SX0lEX0lOVEVMLCBQQ0lfREVWSUNFX0lEX0lOVEVMXzgyNTc2KSlcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rLypcbisgKiBQcm9ncmFtIHRoZSBkZXZpY2UgaW50byBhIHVzYWJsZSBzdGF0ZS4gIFNwbGl0IG91dCBvZiBpZ2JfaW5pdCgpIHNvIGl0XG4rICogY2FuIGJlIHJldXNlZCBhZnRlciBhIGRldmljZSByZXNldCB0byByZS1wcm9ncmFtIHRoZSByZWdpc3RlcnMgdGhhdFxuKyAqIENUUkwuUlNUIGNsZWFycy4gIEV4cGVjdHMgYmFyMCB0byBiZSBtYXBwZWQgYW5kIE1TSS1YIGFscmVhZHkgZW5hYmxlZFxuKyAqIHZpYSBWRklPLlxuKyAqL1xuK3N0YXRpYyB2b2lkIGlnYl9od19pbml0KHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSlcbit7XG4rXHRzdHJ1Y3QgaWdiICppZ2IgPSB0b19pZ2Jfc3RhdGUoZGV2aWNlKTtcbitcdHU2NCBpb3ZhX3R4LCBpb3ZhX3J4O1xuK1x0dTMyIGN0cmwsIHJjdGw7XG4rXHR1MTYgY21kX3JlZztcbitcdGludCByZXRyaWVzO1xuK1xuK1x0aW92YV90eCA9IHRvX2lvdmEoZGV2aWNlLCBpZ2ItXHUwMDNldHhfcmluZyk7XG4rXHRpb3ZhX3J4ID0gdG9faW92YShkZXZpY2UsIGlnYi1cdTAwM2VyeF9yaW5nKTtcbitcbitcdC8qIFNpZ25hbCB0aGF0IHRoZSBkcml2ZXIgaXMgbG9hZGVkICovXG4rXHRjdHJsID0gaWdiX3JlYWQzMihpZ2IsIEUxMDAwX0NUUkxfRVhUKTtcbitcdGN0cmwgfD0gRTEwMDBfQ1RSTF9FWFRfRFJWX0xPQUQ7XG4rXHRjdHJsIFx1MDAyNj0gfkUxMDAwX0NUUkxfRVhUX0xJTktfTU9ERV9NQVNLO1xuK1x0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9DVFJMX0VYVCwgY3RybCk7XG4rXG4rXHQvKiBFbmFibGUgUENJIEJ1cyBNYXN0ZXIuICovXG4rXHRjbWRfcmVnID0gdmZpb19wY2lfY29uZmlnX3JlYWR3KGRldmljZSwgUENJX0NPTU1BTkQpO1xuK1x0aWYgKChjbWRfcmVnIFx1MDAyNiAoUENJX0NPTU1BTkRfTUFTVEVSIHwgUENJX0NPTU1BTkRfTUVNT1JZKSkgIT1cbitcdCAgICAoUENJX0NPTU1BTkRfTUFTVEVSIHwgUENJX0NPTU1BTkRfTUVNT1JZKSkge1xuK1x0XHRjbWRfcmVnIHw9IChQQ0lfQ09NTUFORF9NQVNURVIgfCBQQ0lfQ09NTUFORF9NRU1PUlkpO1xuK1x0XHR2ZmlvX3BjaV9jb25maWdfd3JpdGV3KGRldmljZSwgUENJX0NPTU1BTkQsIGNtZF9yZWcpO1xuK1x0fVxuK1xuK1x0LypcbitcdCAqIERpc2FibGUgRE1BIHJlLXNlbmQgb24gUENJZSBjb21wbGV0aW9uIHRpbWVvdXQgKDgyNTc2IGRhdGFzaGVldFxuK1x0ICogc2VjdGlvbiA4LjYuMSwgR0NSLkNvbXBsZXRpb25fVGltZW91dF9SZXNlbmQsIGJpdCAxNikuICBUaGVcbitcdCAqIG1peF9hbmRfbWF0Y2ggdGVzdCBpbnRlbnRpb25hbGx5IHN1Ym1pdHMgZGVzY3JpcHRvcnMgdGFyZ2V0aW5nXG4rXHQgKiB1bm1hcHBlZCBJT1ZBczsgd2l0aCB0aGUgZGVmYXVsdCAoc2V0KSB2YWx1ZSwgdGhlIGRldmljZSBrZWVwc1xuK1x0ICogcmV0cnlpbmcgdGhlIGZhaWxlZCByZWFkIGluZGVmaW5pdGVseSwgd2hpY2gga2VlcHMgUENJZSBBRVIgYW5kXG4rXHQgKiBJT01NVSBlcnJvciBoYW5kbGluZyBidXN5IGFuZCBpbnRlcmZlcmVzIHdpdGggcmVzZXQgcmVjb3ZlcnkuXG4rXHQgKi9cbitcdGN0cmwgPSBpZ2JfcmVhZDMyKGlnYiwgRTEwMDBfR0NSKTtcbitcdGN0cmwgXHUwMDI2PSB+RTEwMDBfR0NSX0NNUExfVE1PVVRfUkVTRU5EO1xuK1x0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9HQ1IsIGN0cmwpO1xuK1xuK1x0LyogQ29uZmlndXJlIFBIWSBpbnRlcm5hbCBsb29wYmFjayBmb3IgdGVzdGluZy4gKi9cbitcdGlnYl9zZXR1cF9sb29wYmFjayhpZ2IpO1xuK1xuK1x0LyogQ29uZmlndXJlIFRYIGFuZCBSWCBkZXNjcmlwdG9yIHJpbmdzICovXG4rXHRpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX1REQkFMKDApLCAodTMyKWlvdmFfdHgpO1xuK1x0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9UREJBSCgwKSwgKHUzMikoaW92YV90eCBcdTAwM2VcdTAwM2UgMzIpKTtcbitcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfVERMRU4oMCksIFJJTkdfU0laRSAqIHNpemVvZihzdHJ1Y3QgaWdiX3R4X2Rlc2MpKTtcbitcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfVERIKDApLCAwKTtcbitcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfVERUKDApLCAwKTtcbitcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfVFhEQ1RMKDApLCBFMTAwMF9UWERDVExfUVVFVUVfRU5BQkxFKTtcbitcbitcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfUkRCQUwoMCksICh1MzIpaW92YV9yeCk7XG4rXHRpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX1JEQkFIKDApLCAodTMyKShpb3ZhX3J4IFx1MDAzZVx1MDAzZSAzMikpO1xuK1x0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9SRExFTigwKSwgUklOR19TSVpFICogc2l6ZW9mKHN0cnVjdCBpZ2JfcnhfZGVzYykpO1xuK1x0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9SREgoMCksIDApO1xuK1x0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9SRFQoMCksIDApO1xuK1xuK1x0LypcbitcdCAqIFNlbGVjdCB0aGUgYWR2YW5jZWQgb25lLWJ1ZmZlciBkZXNjcmlwdG9yIGZvcm1hdC4gIFBlciA4MjU3NlxuK1x0ICogZGF0YXNoZWV0IHNlY3Rpb24gNy4xLjUuMjogXCJTUlJDVExbbl0uREVTQ1RZUEUgbXVzdCBiZSBzZXQgdG8gYVxuK1x0ICogdmFsdWUgb3RoZXIgdGhhbiAwMDBiIGZvciB0aGUgODI1NzYgdG8gd3JpdGUgYmFjayB0aGUgc3BlY2lhbFxuK1x0ICogZGVzY3JpcHRvcnMuXCIgIHN0cnVjdCBpZ2JfcnhfZGVzYyBtYXRjaGVzIHRoZSBhZHZhbmNlZCBvbmUtYnVmZmVyXG4rXHQgKiB3cml0ZWJhY2sgbGF5b3V0IChzZWN0aW9uIDcuMS41LjIpLCBzbyBwb2xsaW5nIHJ4LndiLnN0YXR1c19lcnJvclxuK1x0ICogcmVxdWlyZXMgdGhpcyBmb3JtYXQuICBTZWN0aW9uIDguMTAuMiBzcGVjaWZpZXMgREVTQ1RZUEVbMjc6MjVdLlxuK1x0ICpcbitcdCAqIFRoZSBkaXJlY3Qgd3JpdGUgYWxzbyB6ZXJvZXMgU1JSQ1RMLkJTSVpFUEFDS0VULCB3aGljaCBpc1xuK1x0ICogaW50ZW50aW9uYWw6IHBlciBzZWN0aW9uIDcuMS4zLjEgYSB6ZXJvIEJTSVpFUEFDS0VUIGZhbGxzIGJhY2sgdG9cbitcdCAqIHRoZSBSQ1RMLkJTSVpFIGJ1ZmZlciBzaXplLCB3aG9zZSByZXNldCBkZWZhdWx0ICgwMGIpIGlzIDIwNDhcbitcdCAqIGJ5dGVzIC0tIGFtcGxlIGZvciB0aGUgbG9vcGJhY2sgZnJhbWVzIGhlcmUuXG4rXHQgKi9cbitcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfU1JSQ1RMKDApLCBFMTAwMF9TUlJDVExfREVTQ1RZUEVfQURWX09ORUJVRik7XG4rXG4rXHRpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX1JYRENUTCgwKSwgRTEwMDBfUlhEQ1RMX1FVRVVFX0VOQUJMRSk7XG4rXG4rXHQvKiBXYWl0IGZvciBUWCBhbmQgUlggcXVldWVzIHRvIGJlIGVuYWJsZWQgKi9cbitcdHJldHJpZXMgPSAyMDAwO1xuK1x0d2hpbGUgKHJldHJpZXMtLSBcdTAwM2UgMCkge1xuK1x0XHRpZiAoKGlnYl9yZWFkMzIoaWdiLCBFMTAwMF9UWERDVEwoMCkpIFx1MDAyNiBFMTAwMF9UWERDVExfUVVFVUVfRU5BQkxFKSBcdTAwMjZcdTAwMjZcbitcdFx0ICAgIChpZ2JfcmVhZDMyKGlnYiwgRTEwMDBfUlhEQ1RMKDApKSBcdTAwMjYgRTEwMDBfUlhEQ1RMX1FVRVVFX0VOQUJMRSkpXG4rXHRcdFx0YnJlYWs7XG4rXHRcdHVzbGVlcCgxMCk7XG4rXHR9XG4rXG4rXHQvKlxuK1x0ICogRW5hYmxlIFJlY2VpdmVyIGFuZCBUcmFuc21pdHRlci4gIFJDVEwuTEJNX01BQyBpcyBzZXQgaW4gYWRkaXRpb25cbitcdCAqIHRvIFBIWSBsb29wYmFjayBhcyBhIFFFTVUtb25seSBhY2NvbW1vZGF0aW9uOiBRRU1VJ3MgZW11bGF0ZWQgaWdiXG4rXHQgKiBkb2VzIG5vdCBob25vciBQSFkgcmVnaXN0ZXIgMCBiaXQgMTQgKFBIWSBpbnRlcm5hbCBsb29wYmFjaykgYW5kXG4rXHQgKiByZWxpZXMgb24gUkNUTC5MQk1fTUFDIHRvIHdyYXAgVFggZGVzY3JpcHRvcnMgYmFjayB0byB0aGUgUlhcbitcdCAqIHF1ZXVlLiAgRGF0YXNoZWV0IDguMTAuMSAoUkNUTCByZWdpc3RlcikgYWR2aXNlcyBcIldoZW4gdXNpbmcgdGhlXG4rXHQgKiBpbnRlcm5hbCBQSFksIExCTSBzaG91bGQgcmVtYWluIHNldCB0byAwMGJcIiwgc28gc2V0dGluZyBMQk1fTUFDXG4rXHQgKiBoZXJlIGRldmlhdGVzIGZyb20gZGF0YXNoZWV0IGd1aWRhbmNlOyBlbXBpcmljYWxseSB0aGUgYml0IGhhc1xuK1x0ICogbm8gb2JzZXJ2YWJsZSBlZmZlY3Qgb24gcmVhbCA4MjU3NiBoYXJkd2FyZSBiZWNhdXNlIE1BQyBsb29wYmFja1xuK1x0ICogaXMgbm90IGltcGxlbWVudGVkIChkYXRhc2hlZXQgMy41LjYuMikuICBTZXR0aW5nIGJvdGggbGV0cyB0aGVcbitcdCAqIHNlbGZ0ZXN0IHdvcmsgb24gYm90aCByZWFsIGhhcmR3YXJlIGFuZCBRRU1VIHdpdGhvdXQgY29uZGl0aW9uYWxcbitcdCAqIGNvZGUgcGF0aHMuXG4rXHQgKi9cbitcdHJjdGwgPSBFMTAwMF9SQ1RMX0VOIHwgICAgICAgLyogUmVjZWl2ZXIgRW5hYmxlICovXG4rXHQgICAgICAgRTEwMDBfUkNUTF9VUEUgfCAgICAgIC8qIFVuaWNhc3QgUHJvbWlzY3VvdXMgKGZvciBkdW1teSBNQUMpICovXG4rXHQgICAgICAgRTEwMDBfUkNUTF9MQk1fTUFDIHwgIC8qIE1BQyBMb29wYmFjayAtIGZvciBRRU1VIGVtdWxhdGlvbiBvbmx5ICovXG4rXHQgICAgICAgRTEwMDBfUkNUTF9TRUNSQzsgICAgIC8qIFN0cmlwIENSQyAobmVlZGVkIGZvciBtZW1jbXApICovXG4rXHRpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX1JDVEwsIHJjdGwpO1xuK1x0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9UQ1RMLCBFMTAwMF9UQ1RMX0VOKTtcbitcbitcdC8qXG4rXHQgKiBQcm9ncmFtIE1TSS1YIGludGVycnVwdCByb3V0aW5nIHBlciA4MjU3NiBkYXRhc2hlZXQ6XG4rXHQgKlxuK1x0ICogR1BJRSAoc2VjdGlvbiA3LjMuMi4xMSwgVGFibGUgNy00Nyk6IHNldCBNdWx0aXBsZV9NU0lYIChiaXQgNCkgdG9cbitcdCAqIHJvdXRlIGludGVycnVwdCBjYXVzZXMgdGhyb3VnaCBJVkFSIG1hcHBpbmcsIGFuZCBFSUFNRSAoYml0IDMwKVxuK1x0ICogdG8gYXBwbHkgRUlBTSBvbiBNU0ktWCBhc3NlcnRpb24gKHdpdGhvdXQgRUlBTUUsIEVJQU0gb25seVxuK1x0ICogYXBwbGllcyBvbiBFSUNSIHJlYWQvd3JpdGUpLlxuK1x0ICpcbitcdCAqIEVJQUMgKHNlY3Rpb24gOC44LjUpOiBlbmFibGUgYXV0by1jbGVhciBvZiBFSUNSIGZvciB2ZWN0b3IgMC5cbitcdCAqIFdpdGhvdXQgYXV0by1jbGVhciB0aGUgY2F1c2Ugc3RheXMgc2V0IGFmdGVyIGRlbGl2ZXJ5IGFuZCB0aGVcbitcdCAqIHRlc3QgY2FuIHNlZSBzcHVyaW91cyBpbnRlcnJ1cHRzIG9uIHRoZSBuZXh0IG1lbWNweSBiYXRjaC5cbitcdCAqXG4rXHQgKiBFSUFNIChzZWN0aW9uIDguOC42KTogZW5hYmxlIGF1dG8tbWFzayBvZiBFSU1TIGZvciB2ZWN0b3IgMCBvblxuK1x0ICogTVNJLVggYXNzZXJ0aW9uIChlZmZlY3RpdmUgYmVjYXVzZSBFSUFNRSBpcyBzZXQpLCBzbyBhIHNpbmdsZVxuK1x0ICogaW50ZXJydXB0IGlzIGRlbGl2ZXJlZCBwZXIgbWVtY3B5IGJhdGNoIGV2ZW4gaWYgdGhlIGNhdXNlXG4rXHQgKiByZS1hc3NlcnRzIGJlZm9yZSBzb2Z0d2FyZSByZS1lbmFibGVzIHRoZSBtYXNrLlxuK1x0ICpcbitcdCAqIElWQVIgKHNlY3Rpb24gNy4zLjEuMiwgcmVnaXN0ZXIgZGVmaW5pdGlvbiBpbiA4LjguMTMpOiBtYXAgUlhcbitcdCAqIGNhdXNlIDAgdG8gTVNJLVggdmVjdG9yIDAgYW5kIG1hcmsgdGhlIGVudHJ5IHZhbGlkLlxuK1x0ICovXG4rXHRpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX0dQSUUsIEUxMDAwX0dQSUVfTVNJWF9NT0RFIHwgRTEwMDBfR1BJRV9FSUFNRSk7XG4rXHRpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX0VJQUMsIEUxMDAwX0VJQ1JfUlhfUVVFVUUwKTtcbitcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfRUlBTSwgRTEwMDBfRUlDUl9SWF9RVUVVRTApO1xuK1xuK1x0LyogTWFwIHZlY3RvciAwIHRvIGludGVycnVwdCBjYXVzZSAwIGFuZCBtYXJrIGl0IHZhbGlkICovXG4rXHRpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX0lWQVIwLCBFMTAwMF9JVkFSX1ZBTElEKTtcbitcbitcdC8qIEVuYWJsZSBpbnRlcnJ1cHRzIG9uIHZlY3RvciAwICovXG4rXHRpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX0VJTVMsIEUxMDAwX0VJQ1JfUlhfUVVFVUUwKTtcbitcbitcdC8qIEluaXRpYWxpemUgZHJpdmVyIHN0YXRlIGFuZCBjYXBhYmlsaXR5IGxpbWl0cyAqL1xuK1x0aWdiLVx1MDAzZXR4X3RhaWwgPSAwO1xuK1x0aWdiLVx1MDAzZXJ4X3RhaWwgPSAwO1xuK1xuK1x0ZGV2aWNlLVx1MDAzZWRyaXZlci5tYXhfbWVtY3B5X3NpemUgPSBJR0JfTUFYX0NIVU5LX1NJWkU7XG4rXHRkZXZpY2UtXHUwMDNlZHJpdmVyLm1heF9tZW1jcHlfY291bnQgPSBSSU5HX1NJWkUgLSAxO1xuK1x0ZGV2aWNlLVx1MDAzZWRyaXZlci5tc2kgPSBNU0lYX1ZFQ1RPUjtcbit9XG4rXG4rc3RhdGljIHZvaWQgaWdiX2luaXQoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlKVxuK3tcbitcdHN0cnVjdCBpZ2IgKmlnYiA9IHRvX2lnYl9zdGF0ZShkZXZpY2UpO1xuK1xuK1x0VkZJT19BU1NFUlRfR0UoZGV2aWNlLVx1MDAzZWRyaXZlci5yZWdpb24uc2l6ZSwgc2l6ZW9mKHN0cnVjdCBpZ2IpKTtcbitcbitcdGlnYi1cdTAwM2ViYXIwID0gZGV2aWNlLVx1MDAzZWJhcnNbMF0udmFkZHI7XG4rXG4rXHQvKiBSZXNldCBkZXZpY2UgYW5kIGRpc2FibGUgYWxsIGludGVycnVwdHMuICovXG4rXHRpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX0NUUkwsIGlnYl9yZWFkMzIoaWdiLCBFMTAwMF9DVFJMKSB8IEUxMDAwX0NUUkxfUlNUKTtcbitcdC8qXG4rXHQgKiBNdXN0IHdhaXQgYXQgbGVhc3QgMSBtaWxsaXNlY29uZCBhZnRlciBzZXR0aW5nIHRoZSByZXNldCBiaXQgYmVmb3JlXG4rXHQgKiBjaGVja2luZyBpZiB0aGlzIGRldmljZSBpcyByZWFkeSB0byBiZSB1c2VkICg4MjU3NiBkYXRhc2hlZXQgc2VjdGlvblxuK1x0ICogNC4yLjEuNi4xKS5cbitcdCAqL1xuK1x0dXNsZWVwKDEwMDApO1xuK1x0d2hpbGUgKGlnYl9yZWFkMzIoaWdiLCBFMTAwMF9DVFJMKSBcdTAwMjYgRTEwMDBfQ1RSTF9SU1QpXG4rXHRcdHVzbGVlcCgxMCk7XG4rXHRpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX0lNQywgMHhGRkZGRkZGRik7XG4rXG4rXHQvKlxuK1x0ICogRW5hYmxlIE1TSS1YIHZpYSBWRklPIGJlZm9yZSBkZXZpY2Utc2lkZSByZWdpc3RlciBwcm9ncmFtbWluZy5cbitcdCAqIHZmaW9fcGNpX21zaXhfZW5hYmxlKCkgb25seSB0b3VjaGVzIHRoZSBWRklPIElSUSBtYWNoaW5lcnkgYW5kIHRoZVxuK1x0ICogUENJIE1TSS1YIGNhcGFiaWxpdHkgdmlhIGNvbmZpZyBzcGFjZTsgaXQgaGFzIG5vIG9yZGVyaW5nXG4rXHQgKiBkZXBlbmRlbmN5IG9uIHRoZSBkZXZpY2Utc2lkZSB3cml0ZXMgcGVyZm9ybWVkIGJ5IGlnYl9od19pbml0KCkuXG4rXHQgKiBQbGFjaW5nIGl0IGhlcmUga2VlcHMgaWdiX2h3X2luaXQoKSByZXVzYWJsZSBmcm9tIHRoZSByZXNldFxuK1x0ICogcmVjb3ZlcnkgcGF0aCAod2hpY2ggY2FsbHMgdmZpb19wY2lfaXJxX3JlZW5hYmxlKCkgaW5zdGVhZCkuXG4rXHQgKi9cbitcdHZmaW9fcGNpX21zaXhfZW5hYmxlKGRldmljZSwgTVNJWF9WRUNUT1IsIDEpO1xuK1xuK1x0aWdiX2h3X2luaXQoZGV2aWNlKTtcbit9XG4rXG4rc3RhdGljIHZvaWQgaWdiX3JlbW92ZShzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UpXG4re1xuK1x0c3RydWN0IGlnYiAqaWdiID0gdG9faWdiX3N0YXRlKGRldmljZSk7XG4rXG4rXHR2ZmlvX3BjaV9tc2l4X2Rpc2FibGUoZGV2aWNlKTtcbitcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfUkNUTCwgMCk7XG4rXHRpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX1RDVEwsIDApO1xuK1x0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9DVFJMLCBpZ2JfcmVhZDMyKGlnYiwgRTEwMDBfQ1RSTCkgfCBFMTAwMF9DVFJMX1JTVCk7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIGlnYl9pcnFfZGlzYWJsZShzdHJ1Y3QgaWdiICppZ2IpXG4re1xuK1x0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9FSU1DLCBFMTAwMF9FSUNSX1JYX1FVRVVFMCk7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIGlnYl9pcnFfZW5hYmxlKHN0cnVjdCBpZ2IgKmlnYilcbit7XG4rXHRpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX0VJTVMsIEUxMDAwX0VJQ1JfUlhfUVVFVUUwKTtcbit9XG4rXG4rc3RhdGljIHZvaWQgaWdiX2lycV9jbGVhcihzdHJ1Y3QgaWdiICppZ2IpXG4re1xuK1x0LypcbitcdCAqIFVzZSB3cml0ZS10by1jbGVhciAoZGF0YXNoZWV0IDcuMy40LjIpLiAgSW4gTVNJLVggbW9kZSB3aXRoIEVJQUNcbitcdCAqIHByb2dyYW1tZWQsIHNlY3Rpb24gOC44LjUgZXhwbGljaXRseSBzdGF0ZXMgXCJJZiBhbnkgYml0cyBhcmUgc2V0XG4rXHQgKiBpbiBFSUFDLCB0aGUgRUlDUiByZWdpc3RlciBzaG91bGQgbm90IGJlIHJlYWRcIiwgd2hpY2ggcnVsZXMgb3V0XG4rXHQgKiB0aGUgcmVhZC10by1jbGVhciBwYXRoIGluIDcuMy40LjMuICBCaXRzIG5vdCBpbiBFSUFDIGFyZSBzdGlsbFxuK1x0ICogY2xlYXJlZCBieSB3cml0aW5nIDEuXG4rXHQgKi9cbitcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfRUlDUiwgMHhGRkZGRkZGRik7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIGlnYl9tZW1jcHlfc3RhcnQoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlLCBpb3ZhX3Qgc3JjLFxuK1x0XHRcdCAgICAgaW92YV90IGRzdCwgdTY0IHNpemUsIHU2NCBjb3VudClcbit7XG4rXHRzdHJ1Y3QgaWdiICppZ2IgPSB0b19pZ2Jfc3RhdGUoZGV2aWNlKTtcbitcdHN0cnVjdCBpZ2JfcnhfZGVzYyAqcng7XG4rXHRzdHJ1Y3QgaWdiX3R4X2Rlc2MgKnR4O1xuK1x0dTMyIGk7XG4rXG4rXHRpZ2JfaXJxX2Rpc2FibGUoaWdiKTtcbitcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGNvdW50OyBpKyspIHtcbitcdFx0dHggPSBcdTAwMjZpZ2ItXHUwMDNldHhfcmluZ1tpZ2ItXHUwMDNldHhfdGFpbF07XG4rXHRcdHJ4ID0gXHUwMDI2aWdiLVx1MDAzZXJ4X3JpbmdbaWdiLVx1MDAzZXJ4X3RhaWxdO1xuK1xuK1x0XHRtZW1zZXQodHgsIDAsIHNpemVvZihzdHJ1Y3QgaWdiX3R4X2Rlc2MpKTtcbitcdFx0bWVtc2V0KHJ4LCAwLCBzaXplb2Yoc3RydWN0IGlnYl9yeF9kZXNjKSk7XG4rXG4rXHRcdHJ4LVx1MDAzZXJlYWQucGt0X2FkZHIgPSBjcHVfdG9fbGU2NChkc3QpO1xuK1x0XHRyeC1cdTAwM2VyZWFkLmhkcl9hZGRyID0gY3B1X3RvX2xlNjQoMCk7XG4rXG4rXHRcdHR4LVx1MDAzZXJlYWQuYnVmZmVyX2FkZHIgPSBjcHVfdG9fbGU2NChzcmMpO1xuK1x0XHQvKlxuK1x0XHQgKiBCdWlsZCBhbiBhZHZhbmNlZCBkYXRhIGRlc2NyaXB0b3IgcGVyIDgyNTc2IGRhdGFzaGVldFxuK1x0XHQgKiBzZWN0aW9uIDcuMi4yLjMuICBERVhUIG1hcmtzIHRoZSBkZXNjcmlwdG9yIGFzIGFkdmFuY2VkXG4rXHRcdCAqIChyZXF1aXJlZCBieSBoYXJkd2FyZSk7IERUWVA9ZGF0YSBzZWxlY3RzIHRoZSBkYXRhXG4rXHRcdCAqIGRlc2NyaXB0b3I7IElGQ1MgYXNrcyB0aGUgTUFDIHRvIGFwcGVuZCB0aGUgRXRoZXJuZXRcbitcdFx0ICogRkNTICh3aXRob3V0IGl0IHRoZSBmcmFtZSBpcyBkcm9wcGVkIGFzIG1hbGZvcm1lZCk7XG4rXHRcdCAqIEVPUCBtYXJrcyBlbmQgb2YgcGFja2V0LiAgRFRBTEVOIGlzIHRoZSBidWZmZXIgbGVuZ3RoXG4rXHRcdCAqIGluIGJpdHMgMTU6MCBvZiBjbWRfdHlwZV9sZW4uXG4rXHRcdCAqL1xuK1x0XHR0eC1cdTAwM2VyZWFkLmNtZF90eXBlX2xlbiA9IGNwdV90b19sZTMyKCh1aW50MzJfdClzaXplIHxcbitcdFx0XHRFMTAwMF9BRFZUWERfRFRZUF9EQVRBIHxcbitcdFx0XHRFMTAwMF9BRFZUWERfRENNRF9ERVhUIHxcbitcdFx0XHRFMTAwMF9BRFZUWERfRENNRF9JRkNTIHxcbitcdFx0XHRFMTAwMF9BRFZUWERfRENNRF9FT1ApO1xuK1x0XHQvKlxuK1x0XHQgKiBQQVlMRU4gKHNlY3Rpb24gNy4yLjIuMy4xMSkgaXMgdGhlIHRvdGFsIHBheWxvYWQgc2l6ZVxuK1x0XHQgKiBpbiBvbGluZm9fc3RhdHVzWzMxOjE0XS5cbitcdFx0ICovXG4rXHRcdHR4LVx1MDAzZXJlYWQub2xpbmZvX3N0YXR1cyA9XG4rXHRcdFx0Y3B1X3RvX2xlMzIoKHVpbnQzMl90KXNpemUgXHUwMDNjXHUwMDNjIEUxMDAwX0FEVlRYRF9QQVlMRU5fU0hJRlQpO1xuK1xuK1x0XHRpZ2ItXHUwMDNldHhfdGFpbCA9IChpZ2ItXHUwMDNldHhfdGFpbCArIDEpICUgUklOR19TSVpFO1xuK1x0XHRpZ2ItXHUwMDNlcnhfdGFpbCA9IChpZ2ItXHUwMDNlcnhfdGFpbCArIDEpICUgUklOR19TSVpFO1xuK1x0fVxuK1xuK1x0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9SRFQoMCksIGlnYi1cdTAwM2VyeF90YWlsKTtcbitcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfVERUKDApLCBpZ2ItXHUwMDNldHhfdGFpbCk7XG4rfVxuK1xuKy8qXG4rICogUmVzZXQgdGhlIGRldmljZSB2aWEgVkZJT19ERVZJQ0VfUkVTRVQgKFBDSWUgRkxSIG9uIHRoZSA4MjU3NikgYW5kXG4rICogcmUtcHJvZ3JhbSBpdC4gIFZGSU9fREVWSUNFX1JFU0VUIHRlYXJzIGRvd24gdGhlIGtlcm5lbC1zaWRlIE1TSS1YXG4rICogdHJpZ2dlciBidXQgbGVhdmVzIHVzZXItc2lkZSBldmVudGZkcyBpbnRhY3QsIHNvIHJlLWFybSB0aGUgdHJpZ2dlclxuKyAqIHZpYSB2ZmlvX3BjaV9pcnFfcmVlbmFibGUoKSBiZWZvcmUgcmVwcm9ncmFtbWluZyBzbyBhbnkgY2FsbGVyLWNhY2hlZFxuKyAqIGV2ZW50ZmQgcmVtYWlucyB2YWxpZC5cbisgKlxuKyAqIEZMUiBjbGVhcnMgZGV2aWNlLXNpZGUgc3RhdGUgdG8gcG93ZXItb24gcmVzZXQgdmFsdWVzIChkYXRhc2hlZXRcbisgKiA0LjIuMS41LjE6IGEgUEYgRkxSIGlzIFwiZXF1aXZhbGVudCB0byBhIEQwLVx1MDAzZUQzLVx1MDAzZUQwIHRyYW5zaXRpb25cIiksIHNvXG4rICogRUlNUyBhbmQgRUlDUiBjb21lIGJhY2sgYXMgMCBmcm9tIHRoZWlyIHJlZ2lzdGVyLWRlZmluZWQgaW5pdGlhbFxuKyAqIHZhbHVlcywgYW5kIGlnYl9od19pbml0KCkgcmVzZXRzIHR4X3RhaWwvcnhfdGFpbCB0byAwLiAgVGhlIG5leHRcbisgKiBpZ2JfbWVtY3B5X3N0YXJ0KCkgd2lsbCBtZW1zZXQgZWFjaCBkZXNjcmlwdG9yIGl0IHRvdWNoZXMgYmVmb3JlXG4rICogc3VibWlzc2lvbiwgc28gbm8gZXhwbGljaXQgSU1DL0VJQ1Igd3JpdGVzIG9yIHJpbmcgbWVtc2V0cyBhcmVcbisgKiBuZWVkZWQgaGVyZS5cbisgKi9cbitzdGF0aWMgdm9pZCBpZ2JfZXJyb3JfcmVzZXRfYW5kX3JlaW5pdChzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UpXG4re1xuK1x0dmZpb19wY2lfZGV2aWNlX3Jlc2V0KGRldmljZSk7XG4rXHR2ZmlvX3BjaV9tc2l4X3JlZW5hYmxlKGRldmljZSwgTVNJWF9WRUNUT1IsIDEpO1xuK1x0aWdiX2h3X2luaXQoZGV2aWNlKTtcbit9XG4rXG4rc3RhdGljIGludCBpZ2JfbWVtY3B5X3dhaXQoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlKVxuK3tcbitcdHN0cnVjdCBpZ2IgKmlnYiA9IHRvX2lnYl9zdGF0ZShkZXZpY2UpO1xuK1x0c3RydWN0IGlnYl9yeF9kZXNjICpyeDtcbitcdHUzMiBzdGF0dXMgPSAwO1xuK1x0dTMyIHByZXZfdGFpbDtcbitcdGludCByZXRyaWVzO1xuK1xuK1x0cHJldl90YWlsID0gKGlnYi1cdTAwM2VyeF90YWlsICsgUklOR19TSVpFIC0gMSkgJSBSSU5HX1NJWkU7XG4rXHRyeCA9IFx1MDAyNmlnYi1cdTAwM2VyeF9yaW5nW3ByZXZfdGFpbF07XG4rXG4rXHQvKlxuK1x0ICogUmVhbCA4MjU3NiBoYXJkd2FyZSBwcm9jZXNzZXMgdGhlIGRlc2NyaXB0b3IgcmluZyBhdCBsaW5lIHJhdGUuXG4rXHQgKiBtYXhfbWVtY3B5X3NpemUgPSAoUklOR19TSVpFIC0gMSkgKiBJR0JfTUFYX0NIVU5LX1NJWkUgfj0gNCBNQixcbitcdCAqIHNwbGl0IGludG8gNDA5NSAxIEtCIGZyYW1lcy4gIEF0IDEgR2IvcyAofjEyNSBNQi9zKSB0aGUgd29yc3RcbitcdCAqIHZhbGlkIG1lbWNweSB0YWtlcyB+MzIgbXMgb24gdGhlIHdpcmUsIHBsdXMgcGVyLWZyYW1lIHByZWFtYmxlLFxuK1x0ICogU0ZELCBJRkcgYW5kIEZDUyBvdmVyaGVhZCAofjMlKSBhbmQgZGVzY3JpcHRvciBmZXRjaC93cml0ZWJhY2tcbitcdCAqIGxhdGVuY3kuICBXYWl0IHVwIHRvIH4yMDAgbXMgYmVmb3JlIGRlY2xhcmluZyB0aGUgZGV2aWNlIGh1bmc7XG4rXHQgKiB+NnggdGhlIGxpbmUtcmF0ZSBmbG9vciBsZWF2ZXMgY29tZm9ydGFibGUgaGVhZHJvb20gZm9yIGhvc3RcbitcdCAqIHNjaGVkdWxpbmcgaml0dGVyIHdoaWxlIGtlZXBpbmcgdGhlIGludGVudGlvbmFsIGludmFsaWQtRE1BXG4rXHQgKiB0ZXN0cyBib3VuZGVkLlxuK1x0ICovXG4rXHRyZXRyaWVzID0gMjAwO1xuK1x0d2hpbGUgKHJldHJpZXMtLSBcdTAwM2UgMCkge1xuK1x0XHRzdGF0dXMgPSBsZTMyX3RvX2NwdShSRUFEX09OQ0UocngtXHUwMDNld2Iuc3RhdHVzX2Vycm9yKSk7XG4rXHRcdGlmIChzdGF0dXMgXHUwMDI2IDEpXG4rXHRcdFx0YnJlYWs7XG4rXHRcdHVzbGVlcCgxMDAwKTtcbitcdH1cbitcbitcdGlmIChzdGF0dXMgXHUwMDI2IDEpXG4rXHRcdC8qXG4rXHRcdCAqIEVuc3VyZSB0aGUgdGVzdCBjb2RlIGRvZXNuJ3Qgc3BlY3VsYXRpdmVseSByZWFkIHRoZSBETUFcbitcdFx0ICogZGVzdGluYXRpb24gYnVmZmVyIGJlZm9yZSB3ZSBoYXZlIHZlcmlmaWVkIHRoYXQgdGhlXG4rXHRcdCAqIGRlc2NyaXB0b3Igd3JpdGViYWNrIGlzIGNvbXBsZXRlLlxuK1x0XHQgKi9cbitcdFx0cm1iKCk7XG4rXG4rXHRpZ2JfaXJxX2NsZWFyKGlnYik7XG4rXG4rXHRpZ2JfaXJxX2VuYWJsZShpZ2IpO1xuK1xuK1x0aWYgKHN0YXR1cyBcdTAwMjYgMSlcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHQvKlxuK1x0ICogVGhlIGRlc2NyaXB0b3IgbmV2ZXIgY29tcGxldGVkLiAgT24gcmVhbCA4MjU3NiBoYXJkd2FyZSB0aGlzXG4rXHQgKiB0eXBpY2FsbHkgZm9sbG93cyBhIERNQS1yZWFkIGZhdWx0IGZyb20gb25lIG9mIHRoZSBpbnRlbnRpb25hbFxuK1x0ICogdW5tYXBwZWQtSU9WQSB0ZXN0czsgdGhlIGZhdWx0IGxlYXZlcyB0aGUgZGVzY3JpcHRvciBlbmdpbmVcbitcdCAqIHVuYWJsZSB0byBzZXJ2aWNlIHN1YnNlcXVlbnQgdmFsaWQgZGVzY3JpcHRvcnMuICBDVFJMLlJTVCBhbG9uZVxuK1x0ICogcmVpbml0aWFsaXplcyB0aGUgcXVldWUgcmVnaXN0ZXJzIGJ1dCBsZWF2ZXMgdGhlIGVuZ2luZSB3ZWRnZWRcbitcdCAqIGZvciB0aGUgY3VycmVudCBwcm9jZXNzLCBzbyBhIGJyb2FkZXIgVkZJT19ERVZJQ0VfUkVTRVQgKEZMUilcbitcdCAqIGlzIHJlcXVpcmVkLlxuK1x0ICpcbitcdCAqIERlbGF5IGJlZm9yZSByZXF1ZXN0aW5nIHJlc2V0IHNvIFBDSWUvSU9NTVUvQUVSIGVycm9yIGhhbmRsaW5nXG4rXHQgKiB0cmlnZ2VyZWQgYnkgdGhlIGp1c3Qtb2JzZXJ2ZWQgRE1BIGZhdWx0IGNhbiByZWxlYXNlIHRoZSBkZXZpY2VcbitcdCAqIGxvY2sgVkZJT19ERVZJQ0VfUkVTRVQgY29udGVuZHMgZm9yLiAgVGhlIDEwIG1zIHZhbHVlIGlzXG4rXHQgKiBoZXVyaXN0aWMuICBUaGUgY3VycmVudCBtZW1jcHkgc3RpbGwgZmFpbHMgd2l0aCAtRVRJTUVET1VUO1xuK1x0ICogcmVjb3Zlcnkgb25seSBlbnN1cmVzIHRoZSBuZXh0IG1lbWNweSBzdGFydHMgZnJvbSBhIHVzYWJsZSBzdGF0ZS5cbitcdCAqL1xuK1x0dXNsZWVwKDEwMDAwKTtcbitcdGlnYl9lcnJvcl9yZXNldF9hbmRfcmVpbml0KGRldmljZSk7XG4rXG4rXHRyZXR1cm4gLUVUSU1FRE9VVDtcbit9XG4rXG4rc3RhdGljIHZvaWQgaWdiX3NlbmRfbXNpKHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSlcbit7XG4rXHRzdHJ1Y3QgaWdiICppZ2IgPSB0b19pZ2Jfc3RhdGUoZGV2aWNlKTtcbitcbitcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfRUlDUywgMSk7XG4rfVxuK1xuK2NvbnN0IHN0cnVjdCB2ZmlvX3BjaV9kcml2ZXJfb3BzIGlnYl9vcHMgPSB7XG4rXHQubmFtZSA9IFwiaWdiXCIsXG4rXHQucHJvYmUgPSBpZ2JfcHJvYmUsXG4rXHQuaW5pdCA9IGlnYl9pbml0LFxuK1x0LnJlbW92ZSA9IGlnYl9yZW1vdmUsXG4rXHQubWVtY3B5X3N0YXJ0ID0gaWdiX21lbWNweV9zdGFydCxcbitcdC5tZW1jcHlfd2FpdCA9IGlnYl9tZW1jcHlfd2FpdCxcbitcdC5zZW5kX21zaSA9IGlnYl9zZW5kX21zaSxcbit9O1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2luY2x1ZGUvbGlidmZpby92ZmlvX3BjaV9kZXZpY2UuaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2luY2x1ZGUvbGlidmZpby92ZmlvX3BjaV9kZXZpY2UuaFxuaW5kZXggMjg1ODg4NWE4OWJiYmYuLjJlNjdhZmMwZDU4MDk4IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvaW5jbHVkZS9saWJ2ZmlvL3ZmaW9fcGNpX2RldmljZS5oXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9pbmNsdWRlL2xpYnZmaW8vdmZpb19wY2lfZGV2aWNlLmhcbkBAIC02OCw2ICs2OCw4IEBAIHZvaWQgdmZpb19wY2lfY29uZmlnX2FjY2VzcyhzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UsIGJvb2wgd3JpdGUsXG4gdm9pZCB2ZmlvX3BjaV9pcnFfZW5hYmxlKHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSwgdTMyIGluZGV4LFxuIFx0XHRcdCB1MzIgdmVjdG9yLCBpbnQgY291bnQpO1xuIHZvaWQgdmZpb19wY2lfaXJxX2Rpc2FibGUoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlLCB1MzIgaW5kZXgpO1xuK3ZvaWQgdmZpb19wY2lfaXJxX3JlZW5hYmxlKHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSwgdTMyIGluZGV4LFxuK1x0XHRcdCAgIHUzMiB2ZWN0b3IsIGludCBjb3VudCk7XG4gdm9pZCB2ZmlvX3BjaV9pcnFfdHJpZ2dlcihzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UsIHUzMiBpbmRleCwgdTMyIHZlY3Rvcik7XG4gXG4gc3RhdGljIGlubGluZSB2b2lkIGZjbnRsX3NldF9ub25ibG9jayhpbnQgZmQpXG5AQCAtOTIsNiArOTQsMTIgQEAgc3RhdGljIGlubGluZSB2b2lkIHZmaW9fcGNpX21zaV9kaXNhYmxlKHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSlcbiBcdHZmaW9fcGNpX2lycV9kaXNhYmxlKGRldmljZSwgVkZJT19QQ0lfTVNJX0lSUV9JTkRFWCk7XG4gfVxuIFxuK3N0YXRpYyBpbmxpbmUgdm9pZCB2ZmlvX3BjaV9tc2lfcmVlbmFibGUoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlLFxuK1x0XHRcdFx0XHQgdTMyIHZlY3RvciwgaW50IGNvdW50KVxuK3tcbitcdHZmaW9fcGNpX2lycV9yZWVuYWJsZShkZXZpY2UsIFZGSU9fUENJX01TSV9JUlFfSU5ERVgsIHZlY3RvciwgY291bnQpO1xuK31cbitcbiBzdGF0aWMgaW5saW5lIHZvaWQgdmZpb19wY2lfbXNpeF9lbmFibGUoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlLFxuIFx0XHRcdFx0XHR1MzIgdmVjdG9yLCBpbnQgY291bnQpXG4ge1xuQEAgLTEwMyw2ICsxMTEsMTIgQEAgc3RhdGljIGlubGluZSB2b2lkIHZmaW9fcGNpX21zaXhfZGlzYWJsZShzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UpXG4gXHR2ZmlvX3BjaV9pcnFfZGlzYWJsZShkZXZpY2UsIFZGSU9fUENJX01TSVhfSVJRX0lOREVYKTtcbiB9XG4gXG4rc3RhdGljIGlubGluZSB2b2lkIHZmaW9fcGNpX21zaXhfcmVlbmFibGUoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlLFxuK1x0XHRcdFx0XHQgIHUzMiB2ZWN0b3IsIGludCBjb3VudClcbit7XG4rXHR2ZmlvX3BjaV9pcnFfcmVlbmFibGUoZGV2aWNlLCBWRklPX1BDSV9NU0lYX0lSUV9JTkRFWCwgdmVjdG9yLCBjb3VudCk7XG4rfVxuK1xuIHN0YXRpYyBpbmxpbmUgaW50IF9fdG9faW92YShzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UsIHZvaWQgKnZhZGRyLCBpb3ZhX3QgKmlvdmEpXG4ge1xuIFx0cmV0dXJuIF9faW9tbXVfaHZhMmlvdmEoZGV2aWNlLVx1MDAzZWlvbW11LCB2YWRkciwgaW92YSk7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvbGlidmZpby5tayBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2xpYnZmaW8ubWtcbmluZGV4IDlmNDdiY2VlZDE2ZjRjLi4xZjEzY2NhMDQzNDhiNCAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2xpYnZmaW8ubWtcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2xpYnZmaW8ubWtcbkBAIC0xMiw2ICsxMiw3IEBAIExJQlZGSU9fQyArPSB2ZmlvX3BjaV9kcml2ZXIuY1xuIGlmZXEgKCQoQVJDSDp4ODZfNjQ9eDg2KSx4ODYpXG4gTElCVkZJT19DICs9IGRyaXZlcnMvaW9hdC9pb2F0LmNcbiBMSUJWRklPX0MgKz0gZHJpdmVycy9kc2EvZHNhLmNcbitMSUJWRklPX0MgKz0gZHJpdmVycy9pZ2IvaWdiLmNcbiBlbmRpZlxuIFxuIExJQlZGSU9fT1VUUFVUIDo9ICQoT1VUUFVUKS9saWJ2ZmlvXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvdmZpb19wY2lfZGV2aWNlLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi92ZmlvX3BjaV9kZXZpY2UuY1xuaW5kZXggZmM3NWUwNGVmMDEwY2YuLjdiODM5NGQwYWM1MDc2IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvdmZpb19wY2lfZGV2aWNlLmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL3ZmaW9fcGNpX2RldmljZS5jXG5AQCAtMTA2LDYgKzEwNiwyOCBAQCB2b2lkIHZmaW9fcGNpX2lycV9kaXNhYmxlKHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSwgdTMyIGluZGV4KVxuIFx0dmZpb19wY2lfaXJxX3NldChkZXZpY2UsIGluZGV4LCAwLCAwLCBOVUxMKTtcbiB9XG4gXG4rLypcbisgKiBSZS1pc3N1ZSBWRklPX0RFVklDRV9TRVRfSVJRUyBmb3IgYW4gYWxyZWFkeS1lbmFibGVkIHZlY3RvciByYW5nZSB1c2luZ1xuKyAqIHRoZSBleGlzdGluZyBldmVudGZkcy4gIEludGVuZGVkIGZvciBkcml2ZXJzIHRoYXQgbmVlZCB0byByZS1hcm0gZGV2aWNlXG4rICogaW50ZXJydXB0cyBhZnRlciBhIFZGSU9fREVWSUNFX1JFU0VULCB3aGljaCB0ZWFycyBkb3duIHRoZSBrZXJuZWwtc2lkZVxuKyAqIElSUSB0cmlnZ2VyIGJ1dCBsZWF2ZXMgdXNlci1zaWRlIGV2ZW50ZmRzIGludGFjdC4gIFJlY3JlYXRpbmcgdGhlXG4rICogZXZlbnRmZHMgd291bGQgaW52YWxpZGF0ZSBhbnkgdGVzdC1maXh0dXJlIGNhY2hlIG9mIHRoZSBmZCwgc28gdGhpc1xuKyAqIGhlbHBlciBkZWxpYmVyYXRlbHkgcHJlc2VydmVzIHRoZW0uXG4rICovXG4rdm9pZCB2ZmlvX3BjaV9pcnFfcmVlbmFibGUoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlLCB1MzIgaW5kZXgsXG4rXHRcdFx0ICAgdTMyIHZlY3RvciwgaW50IGNvdW50KVxuK3tcbitcdGludCBpO1xuK1xuK1x0Y2hlY2tfc3VwcG9ydGVkX2lycV9pbmRleChpbmRleCk7XG4rXG4rXHRmb3IgKGkgPSB2ZWN0b3I7IGkgXHUwMDNjIHZlY3RvciArIGNvdW50OyBpKyspXG4rXHRcdFZGSU9fQVNTRVJUX0dFKGRldmljZS1cdTAwM2Vtc2lfZXZlbnRmZHNbaV0sIDAsXG4rXHRcdFx0ICAgICAgIFwidmVjdG9yICVkIGV2ZW50ZmQgbm90IGFsbG9jYXRlZFxcblwiLCBpKTtcbitcbitcdHZmaW9fcGNpX2lycV9zZXQoZGV2aWNlLCBpbmRleCwgdmVjdG9yLCBjb3VudCwgZGV2aWNlLVx1MDAzZW1zaV9ldmVudGZkcyArIHZlY3Rvcik7XG4rfVxuK1xuIHN0YXRpYyB2b2lkIHZmaW9fcGNpX2lycV9nZXQoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlLCB1MzIgaW5kZXgsXG4gXHRcdFx0ICAgICBzdHJ1Y3QgdmZpb19pcnFfaW5mbyAqaXJxX2luZm8pXG4ge1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL3ZmaW9fcGNpX2RyaXZlci5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvdmZpb19wY2lfZHJpdmVyLmNcbmluZGV4IDY4MjdmNGE2ZmViZTk5Li5hNWQwNTQ3MTMyYzQwNSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL3ZmaW9fcGNpX2RyaXZlci5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi92ZmlvX3BjaV9kcml2ZXIuY1xuQEAgLTUsMTIgKzUsMTQgQEBcbiAjaWZkZWYgX194ODZfNjRfX1xuIGV4dGVybiBzdHJ1Y3QgdmZpb19wY2lfZHJpdmVyX29wcyBkc2Ffb3BzO1xuIGV4dGVybiBzdHJ1Y3QgdmZpb19wY2lfZHJpdmVyX29wcyBpb2F0X29wcztcbitleHRlcm4gc3RydWN0IHZmaW9fcGNpX2RyaXZlcl9vcHMgaWdiX29wcztcbiAjZW5kaWZcbiBcbiBzdGF0aWMgc3RydWN0IHZmaW9fcGNpX2RyaXZlcl9vcHMgKmRyaXZlcl9vcHNbXSA9IHtcbiAjaWZkZWYgX194ODZfNjRfX1xuIFx0XHUwMDI2ZHNhX29wcyxcbiBcdFx1MDAyNmlvYXRfb3BzLFxuK1x0XHUwMDI2aWdiX29wcyxcbiAjZW5kaWZcbiB9O1xuIFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTFUMTk6MTM6NDIuMTkzMTIzMTI3WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTEwMzIzNTc5NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipXb3J0aEZ1enppbmcgRGVjaXNpb24gZm9yIHZmaW8gc2VsZnRlc3RzKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBkcml2ZXIsIGBpZ2IuY2AsIGFuZCBtb2RpZmllcyBhIGZldyByZWxhdGVkIGZpbGVzIHdpdGhpbiB0aGUgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2RyaXZlcnMvaWdiL2AgYW5kIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9gIGRpcmVjdG9yaWVzLiAgQ3J1Y2lhbGx5LCBpdCdzIGFsbCBjb250YWluZWQgd2l0aGluIHRoZSBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9gIGRpcmVjdG9yeS4gVGhhdCBpbW1lZGlhdGVseSBmbGFncyB0aGlzIGFzIHNvbWV0aGluZyB0aGF0J3MgbGlrZWx5IG5vdCBwYXJ0IG9mIHRoZSBjb3JlIGtlcm5lbCBvciBkcml2ZXJzIEkgbmVlZCB0byB3b3JyeSBhYm91dCBpbiB0ZXJtcyBvZiBmdXp6aW5nLlxuXG5NeSBpbml0aWFsIHRob3VnaHQgaXMgc2VsZnRlc3RzIGFyZSBub3QgZnV6emVkIGJ5IHN5emthbGxlci4gIExldCBtZSBjb25maXJtIG5vIG90aGVyIGtlcm5lbCBjaGFuZ2VzIGFyZSBpbnRyb2R1Y2VkLiBOb3BlLCBpdCdzIHN0cmljdGx5IGNvbmZpbmVkIHRvIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2AuXG5cbk5vdywgbGV0IG1lIHJlY2FsbCB0aGUgcmVsZXZhbnQgcnVsZXMuICBUaGUgY3JpdGVyaWEgZm9yIHJldHVybmluZyBgV29ydGhGdXp6aW5nPWZhbHNlYCBjb3ZlciBkb2N1bWVudGF0aW9uLCBjb25maWd1cmF0aW9uIGZpbGVzLCBjb21tZW50cywgbG9nZ2luZywgYW5kIGNvbnN0YW50cy4gU2VsZnRlc3RzIGFyZW4ndCAqZXhwbGljaXRseSogbGlzdGVkLCBidXQgdGhlIHNwaXJpdCBvZiB0aGUgcnVsZSBpcyBjbGVhcjogaWYgaXQncyBub3QgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB0aGVuIGl0IHNob3VsZCBiZSBgZmFsc2VgLiAgVGhlIHJ1bGUgZXhwbGljaXRseSBzdGF0ZXMgdGhhdCBpZiB0aGUgY29kZSBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHRoZW4gaXQncyBgV29ydGhGdXp6aW5nPXRydWVgLlxuXG5TaW5jZSB0aGVzZSBtb2RpZmljYXRpb25zIGFyZSAqc29sZWx5KiB3aXRoaW4gYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vYCwgdGhleSBkb24ndCBpbXBhY3QgYW55IGNvcmUga2VybmVsIGNvZGUgdGhhdCdzIGRpcmVjdGx5IHJlYWNoYWJsZSBkdXJpbmcgbm9ybWFsIG9wZXJhdGlvbi4gIFRoZXkgYXJlLCBpbiBlc3NlbmNlLCBpc29sYXRlZC4gIEkndmUgZG91YmxlLWNoZWNrZWQgdGhlIHBhdGggb2YgdGhlIG1vZGlmaWVkIGZpbGVzLCBpbmNsdWRpbmcgdGhlIGhlYWRlcnMgYW5kIGJ1aWxkIGZpbGVzLCBzbyBJJ20gY29tcGxldGVseSBjb25maWRlbnQgaW4gdGhpcyBhc3Nlc3NtZW50LiAgTm8gcmVhY2hhYmxlIGtlcm5lbCBsb2dpYyBpcyBiZWluZyBhbHRlcmVkLlxuXG5MZXQgbWUgbWFrZSBhYnNvbHV0ZWx5IHN1cmUsIGhvd2V2ZXIuIEkganVzdCB2ZXJpZmllZCB0aGF0IG90aGVyIGZpbGVzIGFsc28gaW5jbHVkZSB0aGUgZm9sbG93aW5nIG1vZGlmaWNhdGlvbnM6XG5cbi0gYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2RyaXZlcnMvaWdiL2UxMDAwXzgyNTc1LmhgXG4tIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9kcml2ZXJzL2lnYi9lMTAwMF9kZWZpbmVzLmhgXG4tIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9kcml2ZXJzL2lnYi9lMTAwMF9yZWdzLmhgXG5cbkFsbCBmaWxlcyBhcmUgd2l0aGluIHRoZSBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9gIGRpcmVjdG9yeS5cblxuVGhlcmVmb3JlLCBteSBjb25jbHVzaW9uIGlzIGNsZWFyOiBiYXNlZCBvbiB0aGUgcnVsZXMgYW5kIHRoZSBjb25maW5lZCBzY29wZSBvZiB0aGUgY2hhbmdlcywgSSdsbCByZXR1cm4gYFdvcnRoRnV6emluZz1mYWxzZWAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExOTU5LCJPdXRwdXRUb2tlbnMiOjg5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzQyLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTFUMTk6MTM6NTEuMjk2MzYwNTIxWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMDQ5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW10sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIGNvZGUgaW4gdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby8sIHdoaWNoIGNvbnRhaW5zIHVzZXItc3BhY2Ugc2VsZnRlc3RzIGFuZCBkb2VzIG5vdCBhZmZlY3QgdGhlIGNvcmUga2VybmVsLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmUgY29kZS4gVGhlcmVmb3JlLCBpdCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgY2FuIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgY29kZSBpbiB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvLywgd2hpY2ggY29udGFpbnMgdXNlci1zcGFjZSBzZWxmdGVzdHMgYW5kIGRvZXMgbm90IGFmZmVjdCB0aGUgY29yZSBrZXJuZWwsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZSBjb2RlLiBUaGVyZWZvcmUsIGl0IGRvZXMgbm90IGludHJvZHVjZSBhbnkgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBjYW4gYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflow7t8z9[1] Phase: Running StartedAt: 2026-07-11 19:14:03 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7t8z9[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-07-11 19:14:03 +0000 UTC FinishedAt: 2026-07-11 19:14:22 +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,}