Name: series-workflowqpkwx Phase: Failed StartedAt: 2026-08-28 22:31:50 +0000 UTC FinishedAt: 2026-08-28 22:48:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqpkwx[0] Phase: Succeeded StartedAt: 2026-08-28 22:31:50 +0000 UTC FinishedAt: 2026-08-28 22:47:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqpkwx[0].run-triage Phase: Succeeded StartedAt: 2026-08-28 22:31:50 +0000 UTC FinishedAt: 2026-08-28 22:47:50 +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+CgkJCTx0ZD4yMDI2LzA4LzI4IDIyOjQ2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgY2hhbmdlcyBhcmUgaXNvbGF0ZWQgdG8gZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2dpYW5mYXIuYywgd2hpY2ggaXMgYSBwbGF0Zm9ybSBkcml2ZXIgZm9yIEZyZWVzY2FsZS9OWFAgU29DcyAoUG93ZXJQQyBNUEM4M3h4Lzg1eHgvODZ4eCBhbmQgQVJNIExTMTAyMUEpLiBJdCByZXF1aXJlcyBzcGVjaWZpYyBEZXZpY2UgVHJlZSBub2RlcyBhbmQgcGh5c2ljYWwgU29DIGhhcmR3YXJlLCBtYWtpbmcgaXQgaW1wb3NzaWJsZSB0byBwcm9iZSBhbmQgcmVhY2ggaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZnV6emluZyBlbnZpcm9ubWVudHMgc3VjaCBhcyBRRU1VIG9yIEdDRS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjggMjI6NDY8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCAzZDhlMDRmOTE2MGIxZTZiZjAzYWExMWQzNTI0YjlmYmIwNjdmNWQzXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBBdWcgMjggMjI6NDY6NTcgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2dpYW5mYXIuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9naWFuZmFyLmNcbmluZGV4IGNmNjM2ZmM1YWFmYWMuLmQwYWM4YTk1ODY5NmQgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZ2lhbmZhci5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZ2lhbmZhci5jXG5AQCAtMTE0MCwxMSAmIzQzOzExNDAsMjQgQEAgc3RhdGljIHZvaWQgZnJlZV9za2JfcmVzb3VyY2VzKHN0cnVjdCBnZmFyX3ByaXZhdGUgKnByaXYpXG4gXHRcdFx0ZnJlZV9za2JfcnhfcXVldWUocnhfcXVldWUpO1xuIFx0fVxuIFxuLVx0ZG1hX2ZyZWVfY29oZXJlbnQocHJpdi1cdTAwM2VkZXYsXG4tXHRcdFx0ICBzaXplb2Yoc3RydWN0IHR4YmQ4KSAqIHByaXYtXHUwMDNldG90YWxfdHhfcmluZ19zaXplICYjNDM7XG4tXHRcdFx0ICBzaXplb2Yoc3RydWN0IHJ4YmQ4KSAqIHByaXYtXHUwMDNldG90YWxfcnhfcmluZ19zaXplLFxuLVx0XHRcdCAgcHJpdi1cdTAwM2V0eF9xdWV1ZVswXS1cdTAwM2V0eF9iZF9iYXNlLFxuLVx0XHRcdCAgcHJpdi1cdTAwM2V0eF9xdWV1ZVswXS1cdTAwM2V0eF9iZF9kbWFfYmFzZSk7XG4mIzQzO1x0aWYgKHByaXYtXHUwMDNldHhfcXVldWVbMF0tXHUwMDNldHhfYmRfYmFzZSkge1xuJiM0MztcdFx0ZG1hX2ZyZWVfY29oZXJlbnQocHJpdi1cdTAwM2VkZXYsXG4mIzQzO1x0XHRcdFx0ICBzaXplb2Yoc3RydWN0IHR4YmQ4KSAqXG4mIzQzO1x0XHRcdFx0ICBwcml2LVx1MDAzZXRvdGFsX3R4X3Jpbmdfc2l6ZSAmIzQzO1xuJiM0MztcdFx0XHRcdCAgc2l6ZW9mKHN0cnVjdCByeGJkOCkgKlxuJiM0MztcdFx0XHRcdCAgcHJpdi1cdTAwM2V0b3RhbF9yeF9yaW5nX3NpemUsXG4mIzQzO1x0XHRcdFx0ICBwcml2LVx1MDAzZXR4X3F1ZXVlWzBdLVx1MDAzZXR4X2JkX2Jhc2UsXG4mIzQzO1x0XHRcdFx0ICBwcml2LVx1MDAzZXR4X3F1ZXVlWzBdLVx1MDAzZXR4X2JkX2RtYV9iYXNlKTtcbiYjNDM7XG4mIzQzO1x0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBwcml2LVx1MDAzZW51bV90eF9xdWV1ZXM7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRcdHByaXYtXHUwMDNldHhfcXVldWVbaV0tXHUwMDNldHhfYmRfYmFzZSA9IE5VTEw7XG4mIzQzO1x0XHRcdHByaXYtXHUwMDNldHhfcXVldWVbaV0tXHUwMDNldHhfYmRfZG1hX2Jhc2UgPSAwO1xuJiM0MztcdFx0fVxuJiM0MztcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgcHJpdi1cdTAwM2VudW1fcnhfcXVldWVzOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0XHRwcml2LVx1MDAzZXJ4X3F1ZXVlW2ldLVx1MDAzZXJ4X2JkX2Jhc2UgPSBOVUxMO1xuJiM0MztcdFx0XHRwcml2LVx1MDAzZXJ4X3F1ZXVlW2ldLVx1MDAzZXJ4X2JkX2RtYV9iYXNlID0gMDtcbiYjNDM7XHRcdH1cbiYjNDM7XHR9XG4gfVxuIFxuIHZvaWQgc3RvcF9nZmFyKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG5AQCAtMjAwMyw2ICYjNDM7MjAxNiw3IEBAIHN0YXRpYyBpbnQgZ2Zhcl9zZXRfbWFjX2FkZHJlc3Moc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbiBzdGF0aWMgaW50IGdmYXJfY2hhbmdlX210dShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgbmV3X210dSlcbiB7XG4gXHRzdHJ1Y3QgZ2Zhcl9wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTtcbiYjNDM7XHRpbnQgZXJyID0gMDtcbiBcbiBcdHdoaWxlICh0ZXN0X2FuZF9zZXRfYml0X2xvY2soR0ZBUl9SRVNFVFRJTkcsIFx1MDAyNnByaXYtXHUwMDNlc3RhdGUpKVxuIFx0XHRjcHVfcmVsYXgoKTtcbkBAIC0yMDEzLDI0ICYjNDM7MjAyNywyNyBAQCBzdGF0aWMgaW50IGdmYXJfY2hhbmdlX210dShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgbmV3X210dSlcbiBcdFdSSVRFX09OQ0UoZGV2LVx1MDAzZW10dSwgbmV3X210dSk7XG4gXG4gXHRpZiAoZGV2LVx1MDAzZWZsYWdzIFx1MDAyNiBJRkZfVVApXG4tXHRcdHN0YXJ0dXBfZ2ZhcihkZXYpO1xuJiM0MztcdFx0ZXJyID0gc3RhcnR1cF9nZmFyKGRldik7XG4gXG4gXHRjbGVhcl9iaXRfdW5sb2NrKEdGQVJfUkVTRVRUSU5HLCBcdTAwMjZwcml2LVx1MDAzZXN0YXRlKTtcbiBcbi1cdHJldHVybiAwO1xuJiM0MztcdHJldHVybiBlcnI7XG4gfVxuIFxuLXN0YXRpYyB2b2lkIHJlc2V0X2dmYXIoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpXG4mIzQzO3N0YXRpYyBpbnQgcmVzZXRfZ2ZhcihzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcbiB7XG4gXHRzdHJ1Y3QgZ2Zhcl9wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYobmRldik7XG4mIzQzO1x0aW50IHJldDtcbiBcbiBcdHdoaWxlICh0ZXN0X2FuZF9zZXRfYml0X2xvY2soR0ZBUl9SRVNFVFRJTkcsIFx1MDAyNnByaXYtXHUwMDNlc3RhdGUpKVxuIFx0XHRjcHVfcmVsYXgoKTtcbiBcbiBcdHN0b3BfZ2ZhcihuZGV2KTtcbi1cdHN0YXJ0dXBfZ2ZhcihuZGV2KTtcbiYjNDM7XHRyZXQgPSBzdGFydHVwX2dmYXIobmRldik7XG4gXG4gXHRjbGVhcl9iaXRfdW5sb2NrKEdGQVJfUkVTRVRUSU5HLCBcdTAwMjZwcml2LVx1MDAzZXN0YXRlKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHJldDtcbiB9XG4gXG4gLyogZ2Zhcl9yZXNldF90YXNrIGdldHMgc2NoZWR1bGVkIHdoZW4gYSBwYWNrZXQgaGFzIG5vdCBiZWVuXG5AQCAtMjA1OCw2ICYjNDM7MjA3NSw3IEBAIHN0YXRpYyBpbnQgZ2Zhcl9od3RzdGFtcF9zZXQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcbiBcdFx0XHQgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbiB7XG4gXHRzdHJ1Y3QgZ2Zhcl9wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcbiYjNDM7XHRpbnQgcmV0ID0gMDtcbiBcbiBcdHN3aXRjaCAoY29uZmlnLVx1MDAzZXR4X3R5cGUpIHtcbiBcdGNhc2UgSFdUU1RBTVBfVFhfT0ZGOlxuQEAgLTIwNzYsNyAmIzQzOzIwOTQsNyBAQCBzdGF0aWMgaW50IGdmYXJfaHd0c3RhbXBfc2V0KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXG4gXHRjYXNlIEhXVFNUQU1QX0ZJTFRFUl9OT05FOlxuIFx0XHRpZiAocHJpdi1cdTAwM2Vod3RzX3J4X2VuKSB7XG4gXHRcdFx0cHJpdi1cdTAwM2Vod3RzX3J4X2VuID0gMDtcbi1cdFx0XHRyZXNldF9nZmFyKG5ldGRldik7XG4mIzQzO1x0XHRcdHJldCA9IHJlc2V0X2dmYXIobmV0ZGV2KTtcbiBcdFx0fVxuIFx0XHRicmVhaztcbiBcdGRlZmF1bHQ6XG5AQCAtMjA4NCwxMyAmIzQzOzIxMDIsMTMgQEAgc3RhdGljIGludCBnZmFyX2h3dHN0YW1wX3NldChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxuIFx0XHRcdHJldHVybiAtRVJBTkdFO1xuIFx0XHRpZiAoIXByaXYtXHUwMDNlaHd0c19yeF9lbikge1xuIFx0XHRcdHByaXYtXHUwMDNlaHd0c19yeF9lbiA9IDE7XG4tXHRcdFx0cmVzZXRfZ2ZhcihuZXRkZXYpO1xuJiM0MztcdFx0XHRyZXQgPSByZXNldF9nZmFyKG5ldGRldik7XG4gXHRcdH1cbiBcdFx0Y29uZmlnLVx1MDAzZXJ4X2ZpbHRlciA9IEhXVFNUQU1QX0ZJTFRFUl9BTEw7XG4gXHRcdGJyZWFrO1xuIFx0fVxuIFxuLVx0cmV0dXJuIDA7XG4mIzQzO1x0cmV0dXJuIHJldDtcbiB9XG4gXG4gc3RhdGljIGludCBnZmFyX2h3dHN0YW1wX2dldChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI4IDIyOjQ2PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIGNoYW5nZXMgYXJlIGlzb2xhdGVkIHRvIGRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9naWFuZmFyLmMsIHdoaWNoIGlzIGEgcGxhdGZvcm0gZHJpdmVyIGZvciBGcmVlc2NhbGUvTlhQIFNvQ3MgKFBvd2VyUEMgTVBDODN4eC84NXh4Lzg2eHggYW5kIEFSTSBMUzEwMjFBKS4gSXQgcmVxdWlyZXMgc3BlY2lmaWMgRGV2aWNlIFRyZWUgbm9kZXMgYW5kIHBoeXNpY2FsIFNvQyBoYXJkd2FyZSwgbWFraW5nIGl0IGltcG9zc2libGUgdG8gcHJvYmUgYW5kIHJlYWNoIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGZ1enppbmcgZW52aXJvbm1lbnRzIHN1Y2ggYXMgUUVNVSBvciBHQ0UuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgM2Q4ZTA0ZjkxNjBiMWU2YmYwM2FhMTFkMzUyNGI5ZmJiMDY3ZjVkMwpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBGcmkgQXVnIDI4IDIyOjQ2OjU3IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2dpYW5mYXIuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9naWFuZmFyLmMKaW5kZXggY2Y2MzZmYzVhYWZhYy4uZDBhYzhhOTU4Njk2ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2dpYW5mYXIuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZ2lhbmZhci5jCkBAIC0xMTQwLDExICYjNDM7MTE0MCwyNCBAQCBzdGF0aWMgdm9pZCBmcmVlX3NrYl9yZXNvdXJjZXMoc3RydWN0IGdmYXJfcHJpdmF0ZSAqcHJpdikKIAkJCWZyZWVfc2tiX3J4X3F1ZXVlKHJ4X3F1ZXVlKTsKIAl9CiAKLQlkbWFfZnJlZV9jb2hlcmVudChwcml2LSZndDtkZXYsCi0JCQkgIHNpemVvZihzdHJ1Y3QgdHhiZDgpICogcHJpdi0mZ3Q7dG90YWxfdHhfcmluZ19zaXplICYjNDM7Ci0JCQkgIHNpemVvZihzdHJ1Y3QgcnhiZDgpICogcHJpdi0mZ3Q7dG90YWxfcnhfcmluZ19zaXplLAotCQkJICBwcml2LSZndDt0eF9xdWV1ZVswXS0mZ3Q7dHhfYmRfYmFzZSwKLQkJCSAgcHJpdi0mZ3Q7dHhfcXVldWVbMF0tJmd0O3R4X2JkX2RtYV9iYXNlKTsKJiM0MzsJaWYgKHByaXYtJmd0O3R4X3F1ZXVlWzBdLSZndDt0eF9iZF9iYXNlKSB7CiYjNDM7CQlkbWFfZnJlZV9jb2hlcmVudChwcml2LSZndDtkZXYsCiYjNDM7CQkJCSAgc2l6ZW9mKHN0cnVjdCB0eGJkOCkgKgomIzQzOwkJCQkgIHByaXYtJmd0O3RvdGFsX3R4X3Jpbmdfc2l6ZSAmIzQzOwomIzQzOwkJCQkgIHNpemVvZihzdHJ1Y3QgcnhiZDgpICoKJiM0MzsJCQkJICBwcml2LSZndDt0b3RhbF9yeF9yaW5nX3NpemUsCiYjNDM7CQkJCSAgcHJpdi0mZ3Q7dHhfcXVldWVbMF0tJmd0O3R4X2JkX2Jhc2UsCiYjNDM7CQkJCSAgcHJpdi0mZ3Q7dHhfcXVldWVbMF0tJmd0O3R4X2JkX2RtYV9iYXNlKTsKJiM0MzsKJiM0MzsJCWZvciAoaSA9IDA7IGkgJmx0OyBwcml2LSZndDtudW1fdHhfcXVldWVzOyBpJiM0MzsmIzQzOykgewomIzQzOwkJCXByaXYtJmd0O3R4X3F1ZXVlW2ldLSZndDt0eF9iZF9iYXNlID0gTlVMTDsKJiM0MzsJCQlwcml2LSZndDt0eF9xdWV1ZVtpXS0mZ3Q7dHhfYmRfZG1hX2Jhc2UgPSAwOwomIzQzOwkJfQomIzQzOwkJZm9yIChpID0gMDsgaSAmbHQ7IHByaXYtJmd0O251bV9yeF9xdWV1ZXM7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQkJcHJpdi0mZ3Q7cnhfcXVldWVbaV0tJmd0O3J4X2JkX2Jhc2UgPSBOVUxMOwomIzQzOwkJCXByaXYtJmd0O3J4X3F1ZXVlW2ldLSZndDtyeF9iZF9kbWFfYmFzZSA9IDA7CiYjNDM7CQl9CiYjNDM7CX0KIH0KIAogdm9pZCBzdG9wX2dmYXIoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKQEAgLTIwMDMsNiAmIzQzOzIwMTYsNyBAQCBzdGF0aWMgaW50IGdmYXJfc2V0X21hY19hZGRyZXNzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiBzdGF0aWMgaW50IGdmYXJfY2hhbmdlX210dShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgbmV3X210dSkKIHsKIAlzdHJ1Y3QgZ2Zhcl9wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKJiM0MzsJaW50IGVyciA9IDA7CiAKIAl3aGlsZSAodGVzdF9hbmRfc2V0X2JpdF9sb2NrKEdGQVJfUkVTRVRUSU5HLCAmYW1wO3ByaXYtJmd0O3N0YXRlKSkKIAkJY3B1X3JlbGF4KCk7CkBAIC0yMDEzLDI0ICYjNDM7MjAyNywyNyBAQCBzdGF0aWMgaW50IGdmYXJfY2hhbmdlX210dShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgbmV3X210dSkKIAlXUklURV9PTkNFKGRldi0mZ3Q7bXR1LCBuZXdfbXR1KTsKIAogCWlmIChkZXYtJmd0O2ZsYWdzICZhbXA7IElGRl9VUCkKLQkJc3RhcnR1cF9nZmFyKGRldik7CiYjNDM7CQllcnIgPSBzdGFydHVwX2dmYXIoZGV2KTsKIAogCWNsZWFyX2JpdF91bmxvY2soR0ZBUl9SRVNFVFRJTkcsICZhbXA7cHJpdi0mZ3Q7c3RhdGUpOwogCi0JcmV0dXJuIDA7CiYjNDM7CXJldHVybiBlcnI7CiB9CiAKLXN0YXRpYyB2b2lkIHJlc2V0X2dmYXIoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpCiYjNDM7c3RhdGljIGludCByZXNldF9nZmFyKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KQogewogCXN0cnVjdCBnZmFyX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihuZGV2KTsKJiM0MzsJaW50IHJldDsKIAogCXdoaWxlICh0ZXN0X2FuZF9zZXRfYml0X2xvY2soR0ZBUl9SRVNFVFRJTkcsICZhbXA7cHJpdi0mZ3Q7c3RhdGUpKQogCQljcHVfcmVsYXgoKTsKIAogCXN0b3BfZ2ZhcihuZGV2KTsKLQlzdGFydHVwX2dmYXIobmRldik7CiYjNDM7CXJldCA9IHN0YXJ0dXBfZ2ZhcihuZGV2KTsKIAogCWNsZWFyX2JpdF91bmxvY2soR0ZBUl9SRVNFVFRJTkcsICZhbXA7cHJpdi0mZ3Q7c3RhdGUpOwomIzQzOwomIzQzOwlyZXR1cm4gcmV0OwogfQogCiAvKiBnZmFyX3Jlc2V0X3Rhc2sgZ2V0cyBzY2hlZHVsZWQgd2hlbiBhIHBhY2tldCBoYXMgbm90IGJlZW4KQEAgLTIwNTgsNiAmIzQzOzIwNzUsNyBAQCBzdGF0aWMgaW50IGdmYXJfaHd0c3RhbXBfc2V0KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsCiAJCQkgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaykKIHsKIAlzdHJ1Y3QgZ2Zhcl9wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKJiM0MzsJaW50IHJldCA9IDA7CiAKIAlzd2l0Y2ggKGNvbmZpZy0mZ3Q7dHhfdHlwZSkgewogCWNhc2UgSFdUU1RBTVBfVFhfT0ZGOgpAQCAtMjA3Niw3ICYjNDM7MjA5NCw3IEBAIHN0YXRpYyBpbnQgZ2Zhcl9od3RzdGFtcF9zZXQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwKIAljYXNlIEhXVFNUQU1QX0ZJTFRFUl9OT05FOgogCQlpZiAocHJpdi0mZ3Q7aHd0c19yeF9lbikgewogCQkJcHJpdi0mZ3Q7aHd0c19yeF9lbiA9IDA7Ci0JCQlyZXNldF9nZmFyKG5ldGRldik7CiYjNDM7CQkJcmV0ID0gcmVzZXRfZ2ZhcihuZXRkZXYpOwogCQl9CiAJCWJyZWFrOwogCWRlZmF1bHQ6CkBAIC0yMDg0LDEzICYjNDM7MjEwMiwxMyBAQCBzdGF0aWMgaW50IGdmYXJfaHd0c3RhbXBfc2V0KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsCiAJCQlyZXR1cm4gLUVSQU5HRTsKIAkJaWYgKCFwcml2LSZndDtod3RzX3J4X2VuKSB7CiAJCQlwcml2LSZndDtod3RzX3J4X2VuID0gMTsKLQkJCXJlc2V0X2dmYXIobmV0ZGV2KTsKJiM0MzsJCQlyZXQgPSByZXNldF9nZmFyKG5ldGRldik7CiAJCX0KIAkJY29uZmlnLSZndDtyeF9maWx0ZXIgPSBIV1RTVEFNUF9GSUxURVJfQUxMOwogCQlicmVhazsKIAl9CiAKLQlyZXR1cm4gMDsKJiM0MzsJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIGludCBnZmFyX2h3dHN0YW1wX2dldChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOCAyMjo0NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMjU3CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogODEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqUmV2aWV3aW5nIHRoZSBnaWFuZmFyLmMgUGF0Y2gqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIGBkcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZ2lhbmZhci5jYCBwYXRjaC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsICYjMzQ7V2hhdCBleGFjdGx5ICppcyogZ2lhbmZhcj8mIzM0OyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgc2NvcGUgb2YgdGhpcyBkcml2ZXIgYmVmb3JlIEkgY2FuIHByb3Blcmx5IGV2YWx1YXRlIHRoZSBjaGFuZ2VzLiBJcyB0aGlzIHNvbWV0aGluZyB0aGF0JiMzOTtzIHJlbGV2YW50IHRvIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBJIG1pZ2h0IGJlIHdvcmtpbmcgaW4sIG9yIGlzIGl0IHNwZWNpZmljIHRvIHBoeXNpY2FsIEZyZWVzY2FsZS9Qb3dlclBDIFNvQyBFdGhlcm5ldCBjb250cm9sbGVycz8gSSBoYXZlIHRvIGtub3cgaXRzIGFyY2hpdGVjdHVyYWwgY29udGV4dC4KClNvLCBmaXJzdCB0aGluZ3MgZmlyc3QsIEkmIzM5O20gZ29pbmcgdG8gaGVhZCBzdHJhaWdodCBmb3IgdGhlIGBLY29uZmlnYCBmb3IgYGdpYW5mYXIuY2AuIFRoYXQmIzM5O3Mgd2hlcmUgdGhlIHJlYWwgc3RvcnkgYmVnaW5zLiBUaGUgS2NvbmZpZyB3aWxsIHRlbGwgbWUgdGhlIGRlcGVuZGVuY2llcywgdGhlIHRhcmdldCBwbGF0Zm9ybXMsIGFuZCBtb3N0IGltcG9ydGFudGx5LCBhbnkgY29uZmlndXJhdGlvbiBvcHRpb25zIHRoYXQgbWlnaHQgaW5mbHVlbmNlIHRoaXMgcGF0Y2gmIzM5O3MgYmVoYXZpb3VyLiBJdCYjMzk7cyB0aGUga2V5IHRvIHVubG9ja2luZyB0aGUgdHJ1ZSBpbXBsaWNhdGlvbnMgb2YgdGhlc2UgY2hhbmdlcywgYW5kIEkgbmVlZCB0byBmdWxseSB1bmRlcnN0YW5kIGl0cyBjb250ZXh0IGJlZm9yZSBnb2luZyBkZWVwZXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjggMjI6NDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7R0lBTkZBUiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvS2NvbmZpZz04OT1jb25maWcgVUdFVEhfVFhfT05fREVNQU5EXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL0tjb25maWctOTItXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvS2NvbmZpZzo5Mzpjb25maWcgR0lBTkZBUlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL0tjb25maWctOTQtXHR0cmlzdGF0ZSBcJiMzNDtHaWFuZmFyIEV0aGVybmV0XCYjMzQ7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL01ha2VmaWxlPTE1PW9iai0kKENPTkZJR19GU0xfWEdNQUNfTURJTykgJiM0Mzs9IHhnbWFjX21kaW8ub1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL01ha2VmaWxlOjE2Om9iai0kKENPTkZJR19HSUFORkFSKSAmIzQzOz0gZ2lhbmZhcl9kcml2ZXIub1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL01ha2VmaWxlLTE3LWdpYW5mYXJfZHJpdmVyLW9ianMgOj0gZ2lhbmZhci5vIFxcXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZzbF9wcV9tZGlvLmM9MTY0PXN0YXRpYyBpbnQgZnNsX3BxX21kaW9fcmVzZXQoc3RydWN0IG1paV9idXMgKmJ1cylcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZnNsX3BxX21kaW8uYy0xOTQtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZnNsX3BxX21kaW8uYzoxOTU6I2lmIElTX0VOQUJMRUQoQ09ORklHX0dJQU5GQVIpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZnNsX3BxX21kaW8uYy0xOTYtLypcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZnNsX3BxX21kaW8uYz0zMDU9c3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgZnNsX3BxX21kaW9fbWF0Y2hbXSA9IHtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mc2xfcHFfbWRpby5jOjMwNjojaWYgSVNfRU5BQkxFRChDT05GSUdfR0lBTkZBUilcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mc2xfcHFfbWRpby5jLTMwNy1cdHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZ2lhbmZhci5jPTI3OD1zdGF0aWMgdm9pZCBnZmFyX2dldF9zdGF0czY0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBydG5sX2xpbmtfc3RhdHM2NCAqc3RhdHMpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2dpYW5mYXIuYy0yOTMtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZ2lhbmZhci5jOjI5NDpcdGlmIChwcml2LVx1MDAzZWRldmljZV9mbGFncyBcdTAwMjYgRlNMX0dJQU5GQVJfREVWX0hBU19STU9OKSB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZ2lhbmZhci5jLTI5NS1cdFx0c3RydWN0IHJtb25fbWliIF9faW9tZW0gKnJtb24gPSBcdTAwMjZwcml2LVx1MDAzZWdmYXJncnBbMF0ucmVncy1cdTAwM2VybW9uO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9naWFuZmFyLmM9NTc4PXN0YXRpYyBwaHlfaW50ZXJmYWNlX3QgZ2Zhcl9nZXRfaW50ZXJmYWNlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2dpYW5mYXIuYy02MTItXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZ2lhbmZhci5jOjYxMzpcdGlmIChwcml2LVx1MDAzZWRldmljZV9mbGFncyBcdTAwMjYgRlNMX0dJQU5GQVJfREVWX0hBU19HSUdBQklUKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2dpYW5mYXIuYy02MTQtXHRcdHJldHVybiBQSFlfSU5URVJGQUNFX01PREVfR01JSTtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZ2lhbmZhci5jPTYxOT1zdGF0aWMgaW50IGdmYXJfb2ZfaW5pdChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpvZmRldiwgc3RydWN0IG5ldF9kZXZpY2UgKipwZGV2KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9naWFuZmFyLmMtNzMyLVx0aWYgKG9mX3Byb3BlcnR5X3JlYWRfYm9vbChucCwgXCYjMzQ7YmQtc3Rhc2hcJiMzNDspKSB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZ2lhbmZhci5jOjczMzpcdFx0cHJpdi1cdTAwM2VkZXZpY2VfZmxhZ3MgfD0gRlNMX0dJQU5GQVJfREVWX0hBU19CRF9TVEFTSElORztcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9naWFuZmFyLmMtNzM0LVx0XHRwcml2LVx1MDAzZWJkX3N0YXNoX2VuID0gMTtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZ2lhbmZhci5jLTc0Ny1cdGlmIChzdGFzaF9sZW4gfHwgc3Rhc2hfaWR4KVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2dpYW5mYXIuYzo3NDg6XHRcdHByaXYtXHUwMDNlZGV2aWNlX2ZsYWdzIHw9IEZTTF9HSUFORkFSX0RFVl9IQVNfQlVGX1NUQVNISU5HO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2dpYW5mYXIuYy03NDktXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2dpYW5mYXIuYy03NTgtXHRpZiAobW9kZWwgXHUwMDI2XHUwMDI2ICFzdHJjYXNlY21wKG1vZGVsLCBcJiMzNDtUU0VDXCYjMzQ7KSlcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9naWFuZmFyLmM6NzU5Olx0XHRwcml2LVx1MDAzZWRldmljZV9mbGFncyB8PSBGU0xfR0lBTkZBUl9ERVZfSEFTX0dJR0FCSVQgfFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2dpYW5mYXIuYzo3NjA6XHRcdFx0XHQgICAgIEZTTF9HSUFORkFSX0RFVl9IQVNfQ09BTEVTQ0UgfFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2dpYW5mYXIuYzo3NjE6XHRcdFx0XHQgICAgIEZTTF9HSUFORkFSX0RFVl9IQVNfUk1PTiB8XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZ2lhbmZhci5jOjc2MjpcdFx0XHRcdCAgICAgRlNMX0dJQU5GQVJfREVWX0hBU19NVUxUSV9JTlRSO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2dpYW5mYXIuYy03NjMtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZ2lhbmZhci5jLTc2NC1cdGlmIChtb2RlbCBcdTAwMjZcdTAwMjYgIXN0cmNhc2VjbXAobW9kZWwsIFwmIzM0O2VUU0VDXCYjMzQ7KSlcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9naWFuZmFyLmM6NzY1Olx0XHRwcml2LVx1MDAzZWRldmljZV9mbGFncyB8PSBGU0xfR0lBTkZBUl9ERVZfSEFTX0dJR0FCSVQgfFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2dpYW5mYXIuYzo3NjY6XHRcdFx0XHQgICAgIEZTTF9HSUFORkFSX0RFVl9IQVNfQ09BTEVTQ0UgfFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2dpYW5mYXIuYzo3Njc6XHRcdFx0XHQgICAgIEZTTF9HSUFORkFSX0RFVl9IQVNfUk1PTiB8XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZ2lhbmZhci5jOjc2ODpcdFx0XHRcdCAgICAgRlNMX0dJQU5GQVJfREVWX0hBU19NVUxUSV9JTlRSIHxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9naWFuZmFyLmM6NzY5Olx0XHRcdFx0ICAgICBGU0xfR0lBTkZBUl9ERVZfSEFTX0NTVU0gfFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2dpYW5mYXIuYzo3NzA6XHRcdFx0XHQgICAgIEZTTF9HSUFORkFSX0RFVl9IQVNfVkxBTiB8XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZ2lhbmZhci5jOjc3MTpcdFx0XHRcdCAgICAgRlNMX0dJQU5GQVJfREVWX0hBU19NQUdJQ19QQUNLRVQgfFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2dpYW5mYXIuYzo3NzI6XHRcdFx0XHQgICAgIEZTTF9HSUFORkFSX0RFVl9IQVNfRVhURU5ERURfSEFTSCB8XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZ2lhbmZhci5jOjc3MzpcdFx0XHRcdCAgICAgRlNMX0dJQU5GQVJfREVWX0hBU19USU1FUiB8XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZ2lhbmZhci5jOjc3NDpcdFx0XHRcdCAgICAgRlNMX0dJQU5GQVJfREVWX0hBU19SWF9GSUxFUjtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9naWFuZmFyLmMtNzc1LVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9naWFuZmFyLmMtNzg2LVx0aWYgKG9mX3Byb3BlcnR5X3JlYWRfYm9vbChucCwgXCYjMzQ7ZnNsLG1hZ2ljLXBhY2tldFwmIzM0OykpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZ2lhbmZhci5jOjc4NzpcdFx0cHJpdi1cdTAwM2VkZXZpY2VfZmxhZ3MgfD0gRlNMX0dJQU5GQVJfREVWX0hBU19NQUdJQ19QQUNLRVQ7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZ2lhbmZhci5jLTc4OC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9naWFuZmFyLmMtNzg5LVx0aWYgKG9mX3Byb3BlcnR5X3JlYWRfYm9vbChucCwgXCYjMzQ7ZnNsLHdha2Utb24tZmlsZXJcJiMzNDspKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2dpYW5mYXIuYzo3OTA6XHRcdHByaXYtXHUwMDNlZGV2aWNlX2ZsYWdzIHw9IEZTTF9HSUFORkFSX0RFVl9IQVNfV0FLRV9PTl9GSUxFUjtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9naWFuZmFyLmMtNzkxLVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9naWFuZmFyLmM9OTQzPXN0YXRpYyB2b2lkIGdmYXJfaW5pdF9hZGRyX2hhc2hfdGFibGUoc3RydWN0IGdmYXJfcHJpdmF0ZSAqcHJpdilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZ2lhbmZhci5jLTk0Ni1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9naWFuZmFyLmM6OTQ3Olx0aWYgKHByaXYtXHUwMDNlZGV2aWNlX2ZsYWdzIFx1MDAyNiBGU0xfR0lBTkZBUl9ERVZfSEFTX0VYVEVOREVEX0hBU0gpIHtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9naWFuZmFyLmMtOTQ4LVx0XHRwcml2LVx1MDAzZWV4dGVuZGVkX2hhc2ggPSAxO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9naWFuZmFyLmM9MTY1Mz1zdGF0aWMgaW50IGluaXRfcGh5KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2dpYW5mYXIuYy0xNjczLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2dpYW5mYXIuYzoxNjc0Olx0aWYgKCEocHJpdi1cdTAwM2VkZXZpY2VfZmxhZ3MgXHUwMDI2IEZTTF9HSUFORkFSX0RFVl9IQVNfR0lHQUJJVCkpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZ2lhbmZhci5jLTE2NzUtXHRcdHBoeV9zZXRfbWF4X3NwZWVkKHBoeWRldiwgU1BFRURfMTAwKTtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZ2lhbmZhci5jPTIwNzM9c3RhdGljIGludCBnZmFyX2h3dHN0YW1wX3NldChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9naWFuZmFyLmMtMjA4NC1cdGNhc2UgSFdUU1RBTVBfVFhfT046XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZ2lhbmZhci5jOjIwODU6XHRcdGlmICghKHByaXYtXHUwMDNlZGV2aWNlX2ZsYWdzIFx1MDAyNiBGU0xfR0lBTkZBUl9ERVZfSEFTX1RJTUVSKSlcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9naWFuZmFyLmMtMjA4Ni1cdFx0XHRyZXR1cm4gLUVSQU5HRTtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZ2lhbmZhci5jLTIxMDAtXHRkZWZhdWx0OlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2dpYW5mYXIuYzoyMTAxOlx0XHRpZiAoIShwcml2LVx1MDAzZWRldmljZV9mbGFncyBcdTAwMjYgRlNMX0dJQU5GQVJfREVWX0hBU19USU1FUikpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZ2lhbmZhci5jLTIxMDItXHRcdFx0cmV0dXJuIC1FUkFOR0U7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2dpYW5mYXIuYz0yNjQ0PXN0YXRpYyBpcnFyZXR1cm5fdCBnZmFyX2Vycm9yKGludCBpcnEsIHZvaWQgKmdycF9pZClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZ2lhbmZhci5jLTI2NTctXHQvKiBNYWdpYyBQYWNrZXQgaXMgbm90IGFuIGVycm9yLiAqL1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2dpYW5mYXIuYzoyNjU4Olx0aWYgKChwcml2LVx1MDAzZWRldmljZV9mbGFncyBcdTAwMjYgRlNMX0dJQU5GQVJfREVWX0hBU19NQUdJQ19QQUNLRVQpIFx1MDAyNlx1MDAyNlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2dpYW5mYXIuYy0yNjU5LVx0ICAgIChldmVudHMgXHUwMDI2IElFVkVOVF9NQUcpKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9naWFuZmFyLmM9Mjc1Mz1zdGF0aWMgdm9pZCBnZmFyX25ldHBvbGwoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZ2lhbmZhci5jLTI3NTgtXHQvKiBJZiB0aGUgZGV2aWNlIGhhcyBtdWx0aXBsZSBpbnRlcnJ1cHRzLCBydW4gdHgvcnggKi9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9naWFuZmFyLmM6Mjc1OTpcdGlmIChwcml2LVx1MDAzZWRldmljZV9mbGFncyBcdTAwMjYgRlNMX0dJQU5GQVJfREVWX0hBU19NVUxUSV9JTlRSKSB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZ2lhbmZhci5jLTI3NjAtXHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHByaXYtXHUwMDNlbnVtX2dycHM7IGkmIzQzOyYjNDM7KSB7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2dpYW5mYXIuYz0yNzkwPXN0YXRpYyBpbnQgcmVnaXN0ZXJfZ3JwX2lycXMoc3RydWN0IGdmYXJfcHJpdl9ncnAgKmdycClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZ2lhbmZhci5jLTI3OTgtXHQgKi9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9naWFuZmFyLmM6Mjc5OTpcdGlmIChwcml2LVx1MDAzZWRldmljZV9mbGFncyBcdTAwMjYgRlNMX0dJQU5GQVJfREVWX0hBU19NVUxUSV9JTlRSKSB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZ2lhbmZhci5jLTI4MDAtXHRcdC8qIEluc3RhbGwgb3VyIGludGVycnVwdCBoYW5kbGVycyBmb3IgRXJyb3IsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2dpYW5mYXIuYz0yODUxPXN0YXRpYyB2b2lkIGdmYXJfZnJlZV9pcnEoc3RydWN0IGdmYXJfcHJpdmF0ZSAqcHJpdilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZ2lhbmZhci5jLTI4NTUtXHQvKiBGcmVlIHRoZSBJUlFzICovXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZ2lhbmZhci5jOjI4NTY6XHRpZiAocHJpdi1cdTAwM2VkZXZpY2VfZmxhZ3MgXHUwMDI2IEZTTF9HSUFORkFSX0RFVl9IQVNfTVVMVElfSU5UUikge1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2dpYW5mYXIuYy0yODU3LVx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBwcml2LVx1MDAzZW51bV9ncnBzOyBpJiM0MzsmIzQzOylcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZ2lhbmZhci5jPTMwOTY9c3RhdGljIHZvaWQgZ2Zhcl9od19pbml0KHN0cnVjdCBnZmFyX3ByaXZhdGUgKnByaXYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2dpYW5mYXIuYy0zMTA4LVx0LyogWmVybyBvdXQgdGhlIHJtb24gbWliIHJlZ2lzdGVycyBpZiBpdCBoYXMgdGhlbSAqL1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2dpYW5mYXIuYzozMTA5Olx0aWYgKHByaXYtXHUwMDNlZGV2aWNlX2ZsYWdzIFx1MDAyNiBGU0xfR0lBTkZBUl9ERVZfSEFTX1JNT04pIHtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9naWFuZmFyLmMtMzExMC1cdFx0bWVtc2V0X2lvKFx1MDAyNnJlZ3MtXHUwMDNlcm1vbiwgMCwgb2Zmc2V0b2Yoc3RydWN0IHJtb25fbWliLCBjYXIxKSk7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2dpYW5mYXIuYz0zMTc1PXN0YXRpYyBpbnQgZ2Zhcl9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpvZmRldilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZ2lhbmZhci5jLTMyMTgtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZ2lhbmZhci5jOjMyMTk6XHRpZiAocHJpdi1cdTAwM2VkZXZpY2VfZmxhZ3MgXHUwMDI2IEZTTF9HSUFORkFSX0RFVl9IQVNfQ1NVTSkge1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2dpYW5mYXIuYy0zMjIwLVx0XHRkZXYtXHUwMDNlaHdfZmVhdHVyZXMgPSBORVRJRl9GX0lQX0NTVU0gfCBORVRJRl9GX1NHIHxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZ2lhbmZhci5jLTMyMjUtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZ2lhbmZhci5jOjMyMjY6XHRpZiAocHJpdi1cdTAwM2VkZXZpY2VfZmxhZ3MgXHUwMDI2IEZTTF9HSUFORkFSX0RFVl9IQVNfVkxBTikge1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2dpYW5mYXIuYy0zMjI3LVx0XHRkZXYtXHUwMDNlaHdfZmVhdHVyZXMgfD0gTkVUSUZfRl9IV19WTEFOX0NUQUdfVFggfFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9naWFuZmFyLmMtMzIzOC1cdCAqL1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2dpYW5mYXIuYzozMjM5Olx0aWYgKHByaXYtXHUwMDNlZGV2aWNlX2ZsYWdzIFx1MDAyNiBGU0xfR0lBTkZBUl9ERVZfSEFTX1RJTUVSKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2dpYW5mYXIuYy0zMjQwLVx0XHRwcml2LVx1MDAzZXBhZGRpbmcgPSA4ICYjNDM7IERFRkFVTFRfUEFERElORztcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZ2lhbmZhci5jLTMyNDItXHRpZiAoZGV2LVx1MDAzZWZlYXR1cmVzIFx1MDAyNiBORVRJRl9GX0lQX0NTVU0gfHxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9naWFuZmFyLmM6MzI0MzpcdCAgICBwcml2LVx1MDAzZWRldmljZV9mbGFncyBcdTAwMjYgRlNMX0dJQU5GQVJfREVWX0hBU19USU1FUilcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9naWFuZmFyLmMtMzI0NC1cdFx0ZGV2LVx1MDAzZW5lZWRlZF9oZWFkcm9vbSA9IEdNQUNfRkNCX0xFTiAmIzQzOyBHTUFDX1RYUEFMX0xFTjtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZ2lhbmZhci5jLTMyNjEtXHRwcml2LVx1MDAzZXJ4X2ZpbGVyX2VuYWJsZSA9XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZ2lhbmZhci5jOjMyNjI6XHQgICAgKHByaXYtXHUwMDNlZGV2aWNlX2ZsYWdzIFx1MDAyNiBGU0xfR0lBTkZBUl9ERVZfSEFTX1JYX0ZJTEVSKSA/IDEgOiAwO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2dpYW5mYXIuYy0zMjYzLVx0LyogRW5hYmxlIG1vc3QgbWVzc2FnZXMgYnkgZGVmYXVsdCAqL1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9naWFuZmFyLmMtMzI3Mi1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9naWFuZmFyLmM6MzI3MzpcdGlmIChwcml2LVx1MDAzZWRldmljZV9mbGFncyBcdTAwMjYgRlNMX0dJQU5GQVJfREVWX0hBU19STU9OKSB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZ2lhbmZhci5jLTMyNzQtXHRcdHN0cnVjdCBybW9uX21pYiBfX2lvbWVtICpybW9uID0gXHUwMDI2cHJpdi1cdTAwM2VnZmFyZ3JwWzBdLnJlZ3MtXHUwMDNlcm1vbjtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZ2lhbmZhci5jLTMyOTAtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZ2lhbmZhci5jOjMyOTE6XHRpZiAocHJpdi1cdTAwM2VkZXZpY2VfZmxhZ3MgXHUwMDI2IEZTTF9HSUFORkFSX0RFVl9IQVNfTUFHSUNfUEFDS0VUKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2dpYW5mYXIuYy0zMjkyLVx0XHRwcml2LVx1MDAzZXdvbF9zdXBwb3J0ZWQgfD0gR0ZBUl9XT0xfTUFHSUM7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZ2lhbmZhci5jLTMyOTMtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZ2lhbmZhci5jOjMyOTQ6XHRpZiAoKHByaXYtXHUwMDNlZGV2aWNlX2ZsYWdzIFx1MDAyNiBGU0xfR0lBTkZBUl9ERVZfSEFTX1dBS0VfT05fRklMRVIpIFx1MDAyNlx1MDAyNlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2dpYW5mYXIuYy0zMjk1LVx0ICAgIHByaXYtXHUwMDNlcnhfZmlsZXJfZW5hYmxlKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9naWFuZmFyLmMtMzMwMi1cdFx0c3RydWN0IGdmYXJfcHJpdl9ncnAgKmdycCA9IFx1MDAyNnByaXYtXHUwMDNlZ2ZhcmdycFtpXTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9naWFuZmFyLmM6MzMwMzpcdFx0aWYgKHByaXYtXHUwMDNlZGV2aWNlX2ZsYWdzIFx1MDAyNiBGU0xfR0lBTkZBUl9ERVZfSEFTX01VTFRJX0lOVFIpIHtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9naWFuZmFyLmMtMzMwNC1cdFx0XHRzcHJpbnRmKGdmYXJfaXJxKGdycCwgVFgpLVx1MDAzZW5hbWUsIFwmIzM0OyVzJXMlYyVzXCYjMzQ7LFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9naWFuZmFyLmgtMTgtICovXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZ2lhbmZhci5oOjE5OiNpZm5kZWYgX19HSUFORkFSX0hcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9naWFuZmFyLmg6MjA6I2RlZmluZSBfX0dJQU5GQVJfSFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2dpYW5mYXIuaC0yMS1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZ2lhbmZhci5oPTY5NT1zdHJ1Y3QgZ2ZhciB7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2dpYW5mYXIuaC05MzgtLyogRmxhZ3MgcmVsYXRlZCB0byBnaWFuZmFyIGRldmljZSBmZWF0dXJlcyAqL1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2dpYW5mYXIuaDo5Mzk6I2RlZmluZSBGU0xfR0lBTkZBUl9ERVZfSEFTX0dJR0FCSVRcdFx0MHgwMDAwMDAwMVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2dpYW5mYXIuaDo5NDA6I2RlZmluZSBGU0xfR0lBTkZBUl9ERVZfSEFTX0NPQUxFU0NFXHRcdDB4MDAwMDAwMDJcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9naWFuZmFyLmg6OTQxOiNkZWZpbmUgRlNMX0dJQU5GQVJfREVWX0hBU19STU9OXHRcdDB4MDAwMDAwMDRcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9naWFuZmFyLmg6OTQyOiNkZWZpbmUgRlNMX0dJQU5GQVJfREVWX0hBU19NVUxUSV9JTlRSXHRcdDB4MDAwMDAwMDhcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9naWFuZmFyLmg6OTQzOiNkZWZpbmUgRlNMX0dJQU5GQVJfREVWX0hBU19DU1VNXHRcdDB4MDAwMDAwMTBcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9naWFuZmFyLmg6OTQ0OiNkZWZpbmUgRlNMX0dJQU5GQVJfREVWX0hBU19WTEFOXHRcdDB4MDAwMDAwMjBcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9naWFuZmFyLmg6OTQ1OiNkZWZpbmUgRlNMX0dJQU5GQVJfREVWX0hBU19FWFRFTkRFRF9IQVNIXHQweDAwMDAwMDQwXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZ2lhbmZhci5oOjk0NjojZGVmaW5lIEZTTF9HSUFORkFSX0RFVl9IQVNfTUFHSUNfUEFDS0VUXHQweDAwMDAwMTAwXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZ2lhbmZhci5oOjk0NzojZGVmaW5lIEZTTF9HSUFORkFSX0RFVl9IQVNfQkRfU1RBU0hJTkdcdFx0MHgwMDAwMDIwMFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2dpYW5mYXIuaDo5NDg6I2RlZmluZSBGU0xfR0lBTkZBUl9ERVZfSEFTX0JVRl9TVEFTSElOR1x0MHgwMDAwMDQwMFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2dpYW5mYXIuaDo5NDk6I2RlZmluZSBGU0xfR0lBTkZBUl9ERVZfSEFTX1RJTUVSXHRcdDB4MDAwMDA4MDBcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9naWFuZmFyLmg6OTUwOiNkZWZpbmUgRlNMX0dJQU5GQVJfREVWX0hBU19XQUtFX09OX0ZJTEVSXHQweDAwMDAxMDAwXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZ2lhbmZhci5oOjk1MTojZGVmaW5lIEZTTF9HSUFORkFSX0RFVl9IQVNfUlhfRklMRVJcdFx0MHgwMDAwMjAwMFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2dpYW5mYXIuaC05NTItXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2dpYW5mYXIuaD0xMzY0PXN0cnVjdCBmaWxlcl90YWJsZSB7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2dpYW5mYXIuaC0xMzY4LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2dpYW5mYXIuaDoxMzY5OiNlbmRpZiAvKiBfX0dJQU5GQVJfSCAqL1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9naWFuZmFyX2V0aHRvb2wuYz0xMTU9c3RhdGljIHZvaWQgZ2Zhcl9nc3RyaW5ncyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MzIgc3RyaW5nc2V0LCB1OCAqIGJ1Zilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZ2lhbmZhcl9ldGh0b29sLmMtMTE5LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2dpYW5mYXJfZXRodG9vbC5jOjEyMDpcdGlmIChwcml2LVx1MDAzZWRldmljZV9mbGFncyBcdTAwMjYgRlNMX0dJQU5GQVJfREVWX0hBU19STU9OKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2dpYW5mYXJfZXRodG9vbC5jLTEyMS1cdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgR0ZBUl9TVEFUU19MRU47IGkmIzQzOyYjNDM7KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9naWFuZmFyX2V0aHRvb2wuYz0xMzI9c3RhdGljIHZvaWQgZ2Zhcl9maWxsX3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBldGh0b29sX3N0YXRzICpkdW1teSxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZ2lhbmZhcl9ldGh0b29sLmMtMTQyLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2dpYW5mYXJfZXRodG9vbC5jOjE0MzpcdGlmIChwcml2LVx1MDAzZWRldmljZV9mbGFncyBcdTAwMjYgRlNMX0dJQU5GQVJfREVWX0hBU19STU9OKSB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZ2lhbmZhcl9ldGh0b29sLmMtMTQ0LVx0XHR1MzIgX19pb21lbSAqcm1vbiA9ICh1MzIgX19pb21lbSAqKSBcdTAwMjZyZWdzLVx1MDAzZXJtb247XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2dpYW5mYXJfZXRodG9vbC5jPTE1MT1zdGF0aWMgaW50IGdmYXJfc3NldF9jb3VudChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgc3NldClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZ2lhbmZhcl9ldGh0b29sLmMtMTU2LVx0Y2FzZSBFVEhfU1NfU1RBVFM6XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZ2lhbmZhcl9ldGh0b29sLmM6MTU3Olx0XHRpZiAocHJpdi1cdTAwM2VkZXZpY2VfZmxhZ3MgXHUwMDI2IEZTTF9HSUFORkFSX0RFVl9IQVNfUk1PTilcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9naWFuZmFyX2V0aHRvb2wuYy0xNTgtXHRcdFx0cmV0dXJuIEdGQVJfU1RBVFNfTEVOO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9naWFuZmFyX2V0aHRvb2wuYz0yNDk9c3RhdGljIGludCBnZmFyX2djb2FsZXNjZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9naWFuZmFyX2V0aHRvb2wuYy0yNjEtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZ2lhbmZhcl9ldGh0b29sLmM6MjYyOlx0aWYgKCEocHJpdi1cdTAwM2VkZXZpY2VfZmxhZ3MgXHUwMDI2IEZTTF9HSUFORkFSX0RFVl9IQVNfQ09BTEVTQ0UpKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2dpYW5mYXJfZXRodG9vbC5jLTI2My1cdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9naWFuZmFyX2V0aHRvb2wuYz0yODg9c3RhdGljIGludCBnZmFyX3Njb2FsZXNjZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9naWFuZmFyX2V0aHRvb2wuYy0yOTUtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZ2lhbmZhcl9ldGh0b29sLmM6Mjk2Olx0aWYgKCEocHJpdi1cdTAwM2VkZXZpY2VfZmxhZ3MgXHUwMDI2IEZTTF9HSUFORkFSX0RFVl9IQVNfQ09BTEVTQ0UpKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2dpYW5mYXJfZXRodG9vbC5jLTI5Ny1cdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9naWFuZmFyX2V0aHRvb2wuYz0xNDY1PXN0YXRpYyBpbnQgZ2Zhcl9nZXRfdHNfaW5mbyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9naWFuZmFyX2V0aHRvb2wuYy0xNDcyLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2dpYW5mYXJfZXRodG9vbC5jOjE0NzM6XHRpZiAoIShwcml2LVx1MDAzZWRldmljZV9mbGFncyBcdTAwMjYgRlNMX0dJQU5GQVJfREVWX0hBU19USU1FUikpIHtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9naWFuZmFyX2V0aHRvb2wuYy0xNDc0LVx0XHRpbmZvLVx1MDAzZXNvX3RpbWVzdGFtcGluZyA9IFNPRl9USU1FU1RBTVBJTkdfVFhfU09GVFdBUkU7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjggMjI6NDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTY1MgoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDI0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aGlua2luZywgcHJlc2VudGVkIGFzIGlmIGl0IHdlcmUgbXkgdGhvdWdodCBwcm9jZXNzOgoKKipEaXZpbmcgaW50byB0aGUgRnJlZXNjYWxlIEV0aGVybmV0IEtjb25maWcqKgoKT2theSwgdGltZSB0byBnZXQgdG8gdGhlIGhlYXJ0IG9mIHRoaXMuIEkgbmVlZCB0byB6ZXJvIGluIG9uIHRoZSBGcmVlc2NhbGUgRXRoZXJuZXQgZHJpdmVyIGNvbmZpZ3VyYXRpb24uIFNwZWNpZmljYWxseSwgSSYjMzk7bSBnb2luZyB0byBqdW1wIGludG8gdGhlIGBkcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvS2NvbmZpZ2AgZmlsZS4gSSYjMzk7bSB0aGlua2luZyB0aGF0IGxpbmUgOTMgb3IgdGhlcmVhYm91dHMgaXMgYSBnb29kIHN0YXJ0aW5nIHBvaW50IGZvciB3aGF0ZXZlciBJJiMzOTttIHRyb3VibGVzaG9vdGluZyBvciBjb25maWd1cmluZy4gVGhhdCBwYXJ0aWN1bGFyIGxpbmUgaXMgbGlrZWx5IHJlbGF0ZWQgdG8gc29tZSBjcnVjaWFsLCBwcm9iYWJseSBhIGtleSBzZXR0aW5nIG9yIGNvbmRpdGlvbmFsLCByZWxhdGVkIHRvIHRoZSBkcml2ZXIuIExldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyB0aGVyZS4uLiBhbmQgdGhlbiBJIGNhbiBhZGp1c3QgbXkgZm9jdXMgYmFzZWQgb24gd2hhdCBJIGZpbmQuIFRoaXMgaXMgd2hlcmUgdGhlIHJlYWwgd29yayBiZWdpbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjggMjI6NDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDgwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgODA6XHRjb25maWcgVUNDX0dFVEhcbiAgODE6XHRcdHRyaXN0YXRlIFwmIzM0O0ZyZWVzY2FsZSBRRSBHaWdhYml0IEV0aGVybmV0XCYjMzQ7XG4gIDgyOlx0XHRkZXBlbmRzIG9uIFFVSUNDX0VOR0lORSBcdTAwMjZcdTAwMjYgUFBDMzJcbiAgODM6XHRcdHNlbGVjdCBGU0xfUFFfTURJT1xuICA4NDpcdFx0c2VsZWN0IFBIWUxJTktcbiAgODU6XHRcdGhlbHBcbiAgODY6XHRcdCAgVGhpcyBkcml2ZXIgc3VwcG9ydHMgdGhlIEdpZ2FiaXQgRXRoZXJuZXQgbW9kZSBvZiB0aGUgUVVJQ0MgRW5naW5lLFxuICA4NzpcdFx0ICB3aGljaCBpcyBhdmFpbGFibGUgb24gc29tZSBGcmVlc2NhbGUgU09Dcy5cbiAgODg6XHRcbiAgODk6XHRjb25maWcgVUdFVEhfVFhfT05fREVNQU5EXG4gIDkwOlx0XHRib29sIFwmIzM0O1RyYW5zbWl0IG9uIERlbWFuZCBzdXBwb3J0XCYjMzQ7XG4gIDkxOlx0XHRkZXBlbmRzIG9uIFVDQ19HRVRIXG4gIDkyOlx0XG4gIDkzOlx0Y29uZmlnIEdJQU5GQVJcbiAgOTQ6XHRcdHRyaXN0YXRlIFwmIzM0O0dpYW5mYXIgRXRoZXJuZXRcJiMzNDtcbiAgOTU6XHRcdGRlcGVuZHMgb24gSEFTX0RNQVxuICA5NjpcdFx0c2VsZWN0IEZTTF9QUV9NRElPXG4gIDk3Olx0XHRzZWxlY3QgUEhZTElCXG4gIDk4Olx0XHRzZWxlY3QgRklYRURfUEhZXG4gIDk5Olx0XHRzZWxlY3QgQ1JDMzJcbiAxMDA6XHRcdGhlbHBcbiAxMDE6XHRcdCAgVGhpcyBkcml2ZXIgc3VwcG9ydHMgdGhlIEdpZ2FiaXQgVFNFQyBvbiB0aGUgTVBDODN4eCwgTVBDODV4eCxcbiAxMDI6XHRcdCAgYW5kIE1QQzg2eHggZmFtaWx5IG9mIGNoaXBzLCB0aGUgZVRTRUMgb24gTFMxMDIxQSBhbmQgdGhlIEZFQ1xuIDEwMzpcdFx0ICBvbiB0aGUgODU0MC5cbiAxMDQ6XHRcbiAxMDU6XHRzb3VyY2UgXCYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2RwYWEvS2NvbmZpZ1wmIzM0O1xuIDEwNjpcdHNvdXJjZSBcJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZHBhYTIvS2NvbmZpZ1wmIzM0O1xuIDEwNzpcdHNvdXJjZSBcJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvS2NvbmZpZ1wmIzM0O1xuIDEwODpcdFxuIDEwOTpcdGVuZGlmICMgTkVUX1ZFTkRPUl9GUkVFU0NBTEVcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOCAyMjo0NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDMyMgoJCQkJCQkJb3V0cHV0OiA0MwoJCQkJCQkJdGhvdWdodHM6IDQ5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgYGdpYW5mYXJgIERyaXZlcioqCgpPa2F5LCBsZXQmIzM5O3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBgZ2lhbmZhcmAgaW50ZXJhY3RzIHdpdGggdGhlIGhhcmR3YXJlLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZmlndXJlIG91dCB0aGUgYmluZGluZyBtZWNoYW5pc20uIElzIGl0IGEgcGxhdGZvcm0gZHJpdmVyLCByZWx5aW5nIG9uIERldmljZSBUcmVlIGluZm9ybWF0aW9uLCBvciBwZXJoYXBzIHV0aWxpemluZyBQQ0kgY29uZmlndXJhdGlvbj8gSSBuZWVkIHRvIHF1aWNrbHkgaWRlbnRpZnkgdGhlIGFwcHJvYWNoLgoKTXkgbmV4dCBzdGVwIGlzIGNsZWFyOiBJJiMzOTtsbCBkaXZlIGludG8gdGhlIGBnaWFuZmFyLmNgIHNvdXJjZSBjb2RlLiBJJiMzOTtsbCB6ZXJvIGluIG9uIHRoZSB1c3VhbCBzdXNwZWN0cyDigJMgc3BlY2lmaWNhbGx5LCB0aGUgYXJlYSBhcm91bmQgYG1vZHVsZV9wbGF0Zm9ybV9kcml2ZXJgIGlmIGl0JiMzOTtzIGEgcGxhdGZvcm0gZHJpdmVyLCBvciB0aGUgcHJvYmUgZnVuY3Rpb24gaXRzZWxmLCByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgdXNlcyBEZXZpY2UgVHJlZSBiaW5kaW5ncywgUENJLCBvciBzb21lIG90aGVyIG1lY2hhbmlzbS4gVGhhdCYjMzk7cyB0aGUga2V5IHRvIHVuZGVyc3RhbmRpbmcgaG93IHRoaXMgZHJpdmVyIHJlZ2lzdGVycyBpdHNlbGYgYW5kIGluaXRpYWxpemVzIHRoZSBoYXJkd2FyZS4gSSBrbm93IG9uY2UgSSBsb2NhdGUgdGhlIHJpZ2h0IGVudHJ5IHBvaW50cywgdGhlIHJlc3Qgd2lsbCBmb2xsb3cuIEkmIzM5O2xsIGZpbmQgbXkgd2F5IGluIHF1aWNrbHkhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjggMjI6NDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bW9kdWxlX3BsYXRmb3JtX2RyaXZlcnxwbGF0Zm9ybV9kcml2ZXImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZ2lhbmZhci5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9naWFuZmFyLmM9MzYxMT1NT0RVTEVfREVWSUNFX1RBQkxFKG9mLCBnZmFyX21hdGNoKTtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZ2lhbmZhci5jLTM2MTMtLyogU3RydWN0dXJlIGZvciBhIGRldmljZSBkcml2ZXIgKi9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9naWFuZmFyLmM6MzYxNDpzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBnZmFyX2RyaXZlciA9IHtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9naWFuZmFyLmMtMzYxNS1cdC5kcml2ZXIgPSB7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2dpYW5mYXIuYy0zNjIzLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2dpYW5mYXIuYzozNjI0Om1vZHVsZV9wbGF0Zm9ybV9kcml2ZXIoZ2Zhcl9kcml2ZXIpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI4IDIyOjQ3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwNzkyCgkJCQkJCQlvdXRwdXQ6IDQzCgkJCQkJCQl0aG91Z2h0czogMTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBhcyBpZiB0aGV5JiMzOTtyZSBteSBvd246CgoqKkFuYWx5emluZyB0aGUgYGdmYXJfbWF0Y2hgIEZ1bmN0aW9uJiMzOTtzIEJlaGF2aW9yKioKCkFscmlnaHQsIHRpbWUgdG8gZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIE15IGluaXRpYWwgdGhvdWdodCBwcm9jZXNzIGlzIHN0cmFpZ2h0Zm9yd2FyZDogSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCB0aGUgYGdmYXJfbWF0Y2hgIGZ1bmN0aW9uIGlzICphY3R1YWxseSogZG9pbmcuIEkmIzM5O20gbm90IGdvaW5nIHRvIGFwcHJvYWNoIHRoaXMgd2l0aCBibGluZCBmYWl0aCwgYXNzdW1pbmcgaXQmIzM5O3MgcGVyZmVjdGx5IGltcGxlbWVudGVkIG9yIGRvZXMgZXhhY3RseSB3aGF0IGl0cyBuYW1lIHN1Z2dlc3RzLiBNeSBmaXJzdCBzdGVwIGlzIHRvIHRyZWF0IGl0IGFzIGEgYmxhY2sgYm94IGFuZCBwZWVrIGluc2lkZS4gSSB3YW50IGEgY2xlYXIgcGljdHVyZSBvZiBpdHMgaW5wdXRzLCBvdXRwdXRzLCBhbmQsIG1vc3QgaW1wb3J0YW50bHksIHRoZSBjcml0ZXJpYSBhZ2FpbnN0IHdoaWNoIGl0JiMzOTtzIG1ha2luZyBpdHMgbWF0Y2hlcy4gSSYjMzk7bSBnb2luZyB0byBsb29rIGF0IHRoZSBkYXRhIGJlaW5nIGZlZCBpbnRvIGl0IHRvIGZpZ3VyZSBvdXQgd2hhdCBpdCYjMzk7cyBjb21wYXJpbmcgYWdhaW5zdC4gSSYjMzk7bSBhbHJlYWR5IGFudGljaXBhdGluZyB0aGF0IHRoZSByZXN1bHRzIHdpbGwgaW5mb3JtIG1lIGFib3V0IGhvdyByb2J1c3QgdGhlIG92ZXJhbGwgc3lzdGVtIGlzLiBVbmRlcnN0YW5kaW5nIHRoZXNlIGZvdW5kYXRpb25hbCBtZWNoYW5pY3MgaXMgY3JpdGljYWwgZm9yIG1lIHRvIG1ha2UgYW55IHNlbnNpYmxlIGFzc2Vzc21lbnQgYWJvdXQgdGhpcyBwcm9ncmFtLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOCAyMjo0NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9naWFuZmFyLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzNTkwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDM1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzM1OTA6XHR9O1xuMzU5MTpcdFxuMzU5MjpcdCNkZWZpbmUgR0ZBUl9QTV9PUFMgKFx1MDAyNmdmYXJfcG1fb3BzKVxuMzU5MzpcdFxuMzU5NDpcdCNlbHNlXG4zNTk1Olx0XG4zNTk2Olx0I2RlZmluZSBHRkFSX1BNX09QUyBOVUxMXG4zNTk3Olx0XG4zNTk4Olx0I2VuZGlmXG4zNTk5Olx0XG4zNjAwOlx0c3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgZ2Zhcl9tYXRjaFtdID1cbjM2MDE6XHR7XG4zNjAyOlx0XHR7XG4zNjAzOlx0XHRcdC50eXBlID0gXCYjMzQ7bmV0d29ya1wmIzM0OyxcbjM2MDQ6XHRcdFx0LmNvbXBhdGlibGUgPSBcJiMzNDtnaWFuZmFyXCYjMzQ7LFxuMzYwNTpcdFx0fSxcbjM2MDY6XHRcdHtcbjM2MDc6XHRcdFx0LmNvbXBhdGlibGUgPSBcJiMzNDtmc2wsZXRzZWMyXCYjMzQ7LFxuMzYwODpcdFx0fSxcbjM2MDk6XHRcdHt9LFxuMzYxMDpcdH07XG4zNjExOlx0TU9EVUxFX0RFVklDRV9UQUJMRShvZiwgZ2Zhcl9tYXRjaCk7XG4zNjEyOlx0XG4zNjEzOlx0LyogU3RydWN0dXJlIGZvciBhIGRldmljZSBkcml2ZXIgKi9cbjM2MTQ6XHRzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBnZmFyX2RyaXZlciA9IHtcbjM2MTU6XHRcdC5kcml2ZXIgPSB7XG4zNjE2Olx0XHRcdC5uYW1lID0gXCYjMzQ7ZnNsLWdpYW5mYXJcJiMzNDssXG4zNjE3Olx0XHRcdC5wbSA9IEdGQVJfUE1fT1BTLFxuMzYxODpcdFx0XHQub2ZfbWF0Y2hfdGFibGUgPSBnZmFyX21hdGNoLFxuMzYxOTpcdFx0fSxcbjM2MjA6XHRcdC5wcm9iZSA9IGdmYXJfcHJvYmUsXG4zNjIxOlx0XHQucmVtb3ZlID0gZ2Zhcl9yZW1vdmUsXG4zNjIyOlx0fTtcbjM2MjM6XHRcbjM2MjQ6XHRtb2R1bGVfcGxhdGZvcm1fZHJpdmVyKGdmYXJfZHJpdmVyKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjggMjI6NDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE0ODUKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiA3MjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiBgZ2lhbmZhcmAmIzM5O3MgRnV6emluZyBQb3RlbnRpYWwqKgoKT2theSwgc28gYGdpYW5mYXJgIGlzIGEgcGxhdGZvcm0gZHJpdmVyIGZvciB0aG9zZSBGcmVlc2NhbGUgZXRoZXJuZXQgY29udHJvbGxlcnMsIFRTRUMvZVRTRUMsIG9uIFBvd2VyUEMgYW5kIHNvbWUgQVJNIFNvQ3MuIFRoZSBpbW1lZGlhdGUgcXVlc3Rpb24gaXMsIGNhbiBJIGV2ZW4gZ2V0IGF0IHRoaXMgdGhpbmcgaW4gYSB0eXBpY2FsIGZ1enppbmcgZW52aXJvbm1lbnQ/IENhbiBJIHJlYWNoIHRoaXMgaGFyZHdhcmUsIG9yIGlzIGl0IHNwZWNpZmljIFNvQyAvIGJvYXJkIGhhcmR3YXJlIHRoYXQgY2FuJiMzOTt0IGJlIHJlYWNoZWQgaW4gc3RhbmRhcmQgUUVNVSBvciBHQ0UsIG9yIGEgc3RhbmRhcmQgZnV6emluZyBzZXR1cD8gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgaXQmIzM5O3Mgc29tZXRoaW5nIEkgY2FuIGFjdHVhbGx5IHByb2JlLgoKTGV0IG1lIHJlLWV4YW1pbmUgdGhlIGNyaXRlcmlhLiBUaGUgaW5zdHJ1Y3Rpb25zIHNheSB0byBiYWlsIG91dCBpZiB0aGUgY2hhbmdlcyBhcmUgbGltaXRlZCB0byBzdHVmZiB0aGF0JiMzOTtzICppbXBvc3NpYmxlKiB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuIFRoYXQgaW5jbHVkZXMgdGhpbmdzIGxpa2UgdmVuZG9yLXNwZWNpZmljIFBDSWUgc3R1ZmYgdGhhdCByZXF1aXJlcyBwaHlzaWNhbCBoYXJkd2FyZSwgZHJpdmVyIHRlYXJkb3duIGNvZGUgdGhhdCBvbmx5IHJ1bnMgb24gaG90LXVucGx1Zywgb3Igb3RoZXIgdW5yZWFjaGFibGUgY29kZSBwYXRocy4KClRoZSBrZXkgcXVlc3Rpb24gaXM6IGRvZXMgUUVNVSBlbXVsYXRlIHRoZSBgZ2lhbmZhcmAgaGFyZHdhcmUsIG9yIGV2ZW4gc29tZXRoaW5nIHNpbWlsYXIgbGlrZSBlVFNFQz8gSSBuZWVkIHRvIGNoZWNrLiBBaGEhIEl0IGxvb2tzIGxpa2UgdGhlcmUmIzM5O3MgYGh3L25ldC9mc2xfZXRzZWMvYCBpbiBRRU1VLiBTcGVjaWZpY2FsbHksIGBldHNlYy5jYCBpcyB0aGVyZSBmb3IgYG1wYzg1NDRkc2AgYW5kIGBwcGNlNTAwYCBtYWNoaW5lcyEgQnV0IGlzIHRoaXMgYWN0dWFsbHkgKnJlYWNoYWJsZSogaW4gYSBzdGFuZGFyZCBzeXprYWxsZXIgb3IgTGludXggZnV6emluZyBzZXR1cCwgZm9yIHg4Nl82NCBvciBhcm02ND8gT3IgY2FuIEkgY3JlYXRlIHRoZXNlIHBsYXRmb3JtIGRldmljZXMgdGhyb3VnaCBPRiBvdmVybGF5cywgY29uZmlnZnMsIGV0Yy4/IENhbiBJIGdldCBhdCB0aGVtIHRocm91Z2ggT0YgbWF0Y2ggdGFibGVzIGluIHg4Ni9hcm02NCBldmVuIHdpdGhvdXQgdGhlIGRldmljZSB0cmVlIG5vZGUgYmVpbmcgYXZhaWxhYmxlPwoKU3l6a2FsbGVyIHR5cGljYWxseSB1c2VzIHg4Nl82NCwgYXJtNjQsIG9yIGd2aXNvci9HQ0UvUUVNVSBWTXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBwbGF0Zm9ybSBkZXZpY2VzIG9yIE9GIGRldmljZXMgYXJlIGhhbmRsZWQgaW4gdGhvc2UgZnV6emluZyBlbnZpcm9ubWVudHMuIEFyZSBwbGF0Zm9ybSBkcml2ZXJzIGZvciBzcGVjaWZpYyBlbWJlZGRlZCBTb0NzIGdlbmVyYWxseSBjb25zaWRlcmVkIHVucmVhY2hhYmxlPyBPciBhcmUgdGhleSBzb21ldGltZXMgcmVhY2hhYmxlPyBJIG5lZWQgdG8gY2hlY2sgdGhlIHBhc3QgZXZhbHVhdGlvbiBjcml0ZXJpYSB0byB1bmRlcnN0YW5kIGhvdyB0aGVzZSBkcml2ZXJzIGFyZSB0cmVhdGVkLgoKQ2FuIEkgZXZlbiBpbnN0YW50aWF0ZSBgZ2lhbmZhcmAgaW4geDg2XzY0PyBObywgYmVjYXVzZSBpdCBsb29rcyBsaWtlIGBnaWFuZmFyYCByZWxpZXMgb24gT0YgKGRldmljZSB0cmVlIHdpdGggYG9mX21hdGNoX3RhYmxlID0gZ2Zhcl9tYXRjaGApLiBUaGUgYGdmYXJfcHJvYmVgIGZ1bmN0aW9uIGdldHMgY2FsbGVkIGZvciB0aGVzZSBkZXZpY2VzLCBhbmQgaXQgY2FsbHMgYGdmYXJfb2ZfaW5pdGAuIEluc2lkZSBgZ2Zhcl9vZl9pbml0YCBpdCBwdWxscyB0aGUgZGV2aWNlIG5vZGUgZnJvbSB0aGUgYHBsYXRmb3JtX2RldmljZWA6IGBzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wID0gb2ZkZXYtJmd0O2Rldi5vZl9ub2RlO2AuICBJZiB0aGF0JiMzOTtzIG5vdCB0aGVyZSBpdCByZXR1cm5zIGFuIGVycm9yLiBJIG5lZWQgdG8gbG9vayBjbG9zZXIgYXQgYGdmYXJfcHJvYmVgIGFuZCBgZ2Zhcl9vZl9pbml0YCB0byBmaWd1cmUgb3V0IGlmIEkgY2FuIGdldCBwYXN0IHRoYXQgZGV2aWNlIHRyZWUgZGVwZW5kZW5jeS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjggMjI6NDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Z2Zhcl9vZl9pbml0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2dpYW5mYXIuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZ2lhbmZhci5jPTU3OD1zdGF0aWMgcGh5X2ludGVyZmFjZV90IGdmYXJfZ2V0X2ludGVyZmFjZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9naWFuZmFyLmMtNjE4LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2dpYW5mYXIuYzo2MTk6c3RhdGljIGludCBnZmFyX29mX2luaXQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqb2ZkZXYsIHN0cnVjdCBuZXRfZGV2aWNlICoqcGRldilcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9naWFuZmFyLmMtNjIwLXtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZ2lhbmZhci5jPTMxNzU9c3RhdGljIGludCBnZmFyX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKm9mZGV2KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9naWFuZmFyLmMtMzE4MS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9naWFuZmFyLmM6MzE4MjpcdGVyciA9IGdmYXJfb2ZfaW5pdChvZmRldiwgXHUwMDI2ZGV2KTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9naWFuZmFyLmMtMzE4My1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjggMjI6NDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTMwOTUKCQkJCQkJCW91dHB1dDogNDIKCQkJCQkJCXRob3VnaHRzOiAyOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgaW5zdHJ1Y3Rpb25zLCBhcyB0aG91Z2ggdGhleSBhcmUgbXkgaW50ZXJuYWwgdGhvdWdodCBwcm9jZXNzOgoKKipEaXZpbmcgaW50byB0aGUgR2lhbmZhciBJbml0aWFsaXphdGlvbioqCgpBbHJpZ2h0LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSYjMzk7dmUgZ290IGEgcHJvamVjdCBvbiBteSBwbGF0ZSB0aGF0IGludm9sdmVzIHRoZSBHaWFuZmFyIEV0aGVybmV0IGRyaXZlciwgYW5kIHRvIHRydWx5IHVuZGVyc3RhbmQgd2hhdCYjMzk7cyBnb2luZyBvbiwgSSBuZWVkIHRvIHN0YXJ0IGF0IHRoZSBiZWdpbm5pbmcuIFRoYXQgbWVhbnMgY3JhY2tpbmcgb3BlbiB0aGUgYGdpYW5mYXIuY2AgZmlsZSBpbiB0aGUgYGRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZWAgZGlyZWN0b3J5LiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbml0aWFsIHNldHVwIG9mIHRoZSBkcml2ZXIsIHNvIEkmIzM5O20gaGVhZGluZyBkaXJlY3RseSB0byB0aGUgYGdmYXJfb2ZfaW5pdGAgZnVuY3Rpb24uIEkga25vdyB0aGlzIGlzIGEgY3JpdGljYWwgcGFydCwgbGlrZWx5IHdoZXJlIHRoZSBkZXZpY2UgdHJlZSBpbmZvcm1hdGlvbiBpcyBwYXJzZWQgYW5kIHRoZSBoYXJkd2FyZSBpcyBicm91Z2h0IG9ubGluZS4gVGltZSB0byBzZWUgd2hhdCBtYWdpYyBGcmVlc2NhbGUgaGFzIGJha2VkIGludG8gdGhpcyBjb2RlLiBUaGlzIHdpbGwgYmUgdGhlIGZvdW5kYXRpb25hbCBzdGFydGluZyBwb2ludC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjggMjI6NDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZ2lhbmZhci5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNjE4LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA2MTg6XHRcbiA2MTk6XHRzdGF0aWMgaW50IGdmYXJfb2ZfaW5pdChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpvZmRldiwgc3RydWN0IG5ldF9kZXZpY2UgKipwZGV2KVxuIDYyMDpcdHtcbiA2MjE6XHRcdGNvbnN0IGNoYXIgKm1vZGVsO1xuIDYyMjpcdFx0aW50IGVyciA9IDAsIGksIGo7XG4gNjIzOlx0XHRwaHlfaW50ZXJmYWNlX3QgaW50ZXJmYWNlO1xuIDYyNDpcdFx0c3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IE5VTEw7XG4gNjI1Olx0XHRzdHJ1Y3QgZ2Zhcl9wcml2YXRlICpwcml2ID0gTlVMTDtcbiA2MjY6XHRcdHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAgPSBvZmRldi1cdTAwM2VkZXYub2Zfbm9kZTtcbiA2Mjc6XHRcdHN0cnVjdCBkZXZpY2Vfbm9kZSAqY2hpbGQgPSBOVUxMO1xuIDYyODpcdFx0dTMyIHN0YXNoX2xlbiA9IDA7XG4gNjI5Olx0XHR1MzIgc3Rhc2hfaWR4ID0gMDtcbiA2MzA6XHRcdHVuc2lnbmVkIGludCBudW1fdHhfcXMsIG51bV9yeF9xcztcbiA2MzE6XHRcdHVuc2lnbmVkIHNob3J0IG1vZGU7XG4gNjMyOlx0XG4gNjMzOlx0XHRpZiAoIW5wKVxuIDYzNDpcdFx0XHRyZXR1cm4gLUVOT0RFVjtcbiA2MzU6XHRcbiA2MzY6XHRcdGlmIChvZl9kZXZpY2VfaXNfY29tcGF0aWJsZShucCwgXCYjMzQ7ZnNsLGV0c2VjMlwmIzM0OykpXG4gNjM3Olx0XHRcdG1vZGUgPSBNUV9NR19NT0RFO1xuIDYzODpcdFx0ZWxzZVxuIDYzOTpcdFx0XHRtb2RlID0gU1FfU0dfTU9ERTtcbiA2NDA6XHRcbiA2NDE6XHRcdGlmIChtb2RlID09IFNRX1NHX01PREUpIHtcbiA2NDI6XHRcdFx0bnVtX3R4X3FzID0gMTtcbiA2NDM6XHRcdFx0bnVtX3J4X3FzID0gMTtcbiA2NDQ6XHRcdH0gZWxzZSB7IC8qIE1RX01HX01PREUgKi9cbiA2NDU6XHRcdFx0LyogZ2V0IHRoZSBhY3R1YWwgbnVtYmVyIG9mIHN1cHBvcnRlZCBncm91cHMgKi9cbiA2NDY6XHRcdFx0dW5zaWduZWQgaW50IG51bV9ncnBzO1xuIDY0NzpcdFxuIDY0ODpcdFx0XHRudW1fZ3JwcyA9IGRldmljZV9nZXRfbmFtZWRfY2hpbGRfbm9kZV9jb3VudChcdTAwMjZvZmRldi1cdTAwM2VkZXYsXG4gNjQ5Olx0XHRcdFx0XHRcdFx0XHQgICAgIFwmIzM0O3F1ZXVlLWdyb3VwXCYjMzQ7KTtcbiA2NTA6XHRcdFx0aWYgKG51bV9ncnBzID09IDAgfHwgbnVtX2dycHMgXHUwMDNlIE1BWEdST1VQUykge1xuIDY1MTpcdFx0XHRcdGRldl9lcnIoXHUwMDI2b2ZkZXYtXHUwMDNlZGV2LCBcJiMzNDtJbnZhbGlkICMgb2YgaW50IGdyb3VwcyglZClcXG5cJiMzNDssXG4gNjUyOlx0XHRcdFx0XHRudW1fZ3Jwcyk7XG4gNjUzOlx0XHRcdFx0cHJfZXJyKFwmIzM0O0Nhbm5vdCBkbyBhbGxvY19ldGhlcmRldiwgYWJvcnRpbmdcXG5cJiMzNDspO1xuIDY1NDpcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuIDY1NTpcdFx0XHR9XG4gNjU2Olx0XG4gNjU3Olx0XHRcdG51bV90eF9xcyA9IG51bV9ncnBzOyAvKiBvbmUgdHhxIHBlciBpbnQgZ3JvdXAgKi9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjggMjI6NDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM5OTAKCQkJCQkJCW91dHB1dDogMTIyCgkJCQkJCQl0aG91Z2h0czogMTM0MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXNpcyBvZiB0aGUgR2lhbmZhciBEcml2ZXIgUGF0Y2ggZm9yIEZ1enppbmcgU3VpdGFiaWxpdHkqKgoKT2theSwgc28gSSYjMzk7bSBkaXZpbmcgaW50byB0aGlzIHBhdGNoLiBUaGUga2V5IGlzIHVuZGVyc3RhbmRpbmcgaWYgdGhlc2UgY2hhbmdlcyBhcmUgZXZlbiAqcmVhY2hhYmxlKiBpbiBhIHN0YW5kYXJkIGZ1enppbmcgc2V0dXAuIExldCYjMzk7cyBzdGFydCB3aXRoIHRoZSBkcml2ZXIgaXRzZWxmLiBJdCYjMzk7cyB0aGUgYGdpYW5mYXJgIGRyaXZlci4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaXRzIGRlcGVuZGVuY2llcy4gSXQgbmVlZHMgZGV2aWNlIHRyZWUgbm9kZXMsIGludGVycnVwdHMsIGEgUEhZLCBNRElPLCByZWdpc3RlciBtYXBwaW5ncywgYW5kIHRoZSB1c3VhbCBzdXNwZWN0cy4gTG9va3MgbGlrZSBpdCYjMzk7cyBidWlsdCBmb3IgRnJlZXNjYWxlIFBvd2VyUEMgKE1QQzgzeHgsIE1QQzg1eHgsIE1QQzg2eHgpIG9yIEFSTSBMUzEwMjFBIFNvQ3MuCgpOb3cgdGhlIHF1ZXN0aW9uIGlzIHdoZXRoZXIgU3l6a2FsbGVyIGFuZCBvdGhlciBmdXp6aW5nIHRvb2xzIGNvbW1vbmx5IHJ1biBvbiBGcmVlc2NhbGUgaGFyZHdhcmUsIG9yIGRvZXMgaXQgcmVxdWlyZSBzb21lIGN1c3RvbSBkZXZpY2UgdHJlZSBvciBzcGVjaWZpYyBoYXJkd2FyZT8gVGhlbiBJIG5lZWQgdG8gZG91YmxlLWNoZWNrIHRoZSBmdXp6aW5nIGd1aWRlbGluZXMuIFRob3NlIGd1aWRlbGluZXMgZXhwbGljaXRseSB0ZWxsIG1lIHdoZW4gYSBwYXRjaCBpc24mIzM5O3Qgd29ydGggZnV6emluZy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGlzIGRvZXNuJiMzOTt0IGZhbGwgaW50byB0aGUgY2F0ZWdvcnkgb2YgJiMzNDt1bnJlYWNoYWJsZSBjb2RlIHBhdGhzLiYjMzQ7IEkgc2hvdWxkIGFsc28gcmUtY2hlY2sgYWxsIHRoZSBydWxlcy4gSXQgc2F5cyAmIzM0O0NvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSYjMzQ7LiBUaGF0JiMzOTtzIHdoYXQgSSYjMzk7bSBsb29raW5nIGZvci4gV2hhdCBhYm91dCBlbWJlZGRlZCBTb0NzIGFuZCBwbGF0Zm9ybSBkcml2ZXJzPyBDYW4gdGhlIEdpYW5mYXIgZHJpdmVyIGJlIHByb2JlZCwgb3IgaXMgaXQgcHJlc2VudCBvbiB4ODZfNjQgb3IgQVJNNjQgdmlydHVhbCBtYWNoaW5lcz8KCkluIHN0YW5kYXJkIFFFTVUvR0NFIGVudmlyb25tZW50cywgJiMzNDtnaWFuZmFyJiMzNDsgaXMgc3BlY2lmaWMgdG8gRnJlZXNjYWxlLiBUaGVzZSBhcmVuJiMzOTt0IHJlYWNoYWJsZS4gR2lhbmZhciBpcyBhYnNlbnQgaW4geDg2XzY0IG9yIGFybTY0IHZpcnQgbWFjaGluZXMgYmVjYXVzZSBpdCYjMzk7cyBhIHBsYXRmb3JtIGRyaXZlciwgdXNpbmcgZGV2aWNlIHRyZWUgbWF0Y2hpbmcuIEl0IHJlcXVpcmVzIE1NSU8gcmVnaXN0ZXJzLCBpbnRlcnJ1cHRzLCBQSFlzLiBJIG5lZWQgdG8gY29uc2lkZXIsIGRvZXMgZnV6emluZyBldmVuIHVzZSBQb3dlclBDIG9yIExTMTAyMUE/IFN5emthbGxlciBmdXp6ZXMgeDg2XzY0IGFuZCBhcm02NCBpbiBRRU1VL0dDRSBpbnN0YW5jZXMsIHNvIHRoZXNlIGFyZSBwcm9iYWJseSB1bnJlYWNoYWJsZS4gRXZlbiBpZiBzb21lb25lIGNvbXBpbGVkIHRoZSBgQ09ORklHX0dJQU5GQVJgIG9wdGlvbiBvbiB4ODZfNjQgKGl0IG9ubHkgZGVwZW5kcyBvbiBIQVNfRE1BKSBjYW4gaXQgZXZlciBiZSBwcm9iZWQ/IEluIHg4Nl82NCwgQUNQSSwgYW5kIHN0YW5kYXJkIFFFTVUsIHRoZXJlIGlzIG5vIE9GIGRldmljZSB0cmVlIG5vZGUgbWF0Y2hpbmcgJiMzNDtnaWFuZmFyJiMzNDsgb3IgJiMzNDtmc2wsZXRzZWMyJiMzNDsuIEV2ZW4gd2l0aCBhbiBPRiBvdmVybGF5LCBgZ2Zhcl9wcm9iZWAgc3RpbGwgZGVtYW5kcyByZWdpc3RlcnMsIElSUXMsIFBIWSBidXMsIGV0Yy4gV2l0aG91dCB0aGUgaGFyZHdhcmUsIHRoZSBwcm9iZSB3aWxsIGZhaWwsIG9yIG5ldmVyIGV2ZW4gYmUgY2FsbGVkLiBDb25zZXF1ZW50bHksIGBmcmVlX3NrYl9yZXNvdXJjZXNgLCBgZ2Zhcl9jaGFuZ2VfbXR1YCwgYHJlc2V0X2dmYXJgLCBhbmQgYGdmYXJfaHd0c3RhbXBfc2V0YCBjYW4gTkVWRVIgYmUgY2FsbGVkLgoKT2theSwgbGV0JiMzOTtzIGxvb2sgYXQgdGhlIHBhdGNoIGNoYW5nZXMgaW4gbW9yZSBkZXRhaWwgaW4gYGdpYW5mYXIuY2AuIEl0IGhhcyB0aGVzZSBzcGVjaWZpYyBjaGFuZ2VzLiAxLiBgZnJlZV9za2JfcmVzb3VyY2VzYCBhZGRzIGEgY2hlY2ssIGFuZCB6ZXJvZXMgb3V0IHNvbWUgcG9pbnRlcnMuIDIuIGBnZmFyX2NoYW5nZV9tdHVgIGNhcHR1cmVzIGFuIGVycm9yIGFuZCByZXR1cm5zIGl0LiAzLiBgcmVzZXRfZ2ZhcmAgY2hhbmdlcyB0aGUgcmV0dXJuIHR5cGUgdG8gYGludGAsIGFuZCByZXR1cm5zIGFuIGVycm9yIGNvZGUgZnJvbSBgc3RhcnR1cF9nZmFyYC4gNC4gYGdmYXJfaHd0c3RhbXBfc2V0YCByZXR1cm5zIHRoZSByZXN1bHQgZnJvbSBgcmVzZXRfZ2ZhcmAgaW5zdGVhZCBvZiB6ZXJvLgoKQWxsIG9mIHRoZXNlIGNoYW5nZXMgYXJlIGxvY2F0ZWQgaW4gdGhlIGBkcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZ2lhbmZhci5jYCBmaWxlLiBUaGlzIGRyaXZlciBpcyBhIHBsYXRmb3JtIGRyaXZlciBzcGVjaWZpY2FsbHkgZm9yIEZyZWVzY2FsZSBNUEM4M3h4LCBNUEM4NXh4LCBNUEM4Nnh4LCBhbmQgTFMxMDIxQSBuZXR3b3JrIGNvbnRyb2xsZXJzLiBUaGlzIHJlcXVpcmVzIGRlZGljYXRlZCBoYXJkd2FyZSwgZGV2aWNlIHRyZWUgYmluZGluZ3MsIGFuZCBpdCYjMzk7cyBub3QgcG9zc2libGUgdG8gcnVuIG9yIHJlYWNoIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGZ1enppbmcgZW52aXJvbm1lbnRzIChRRU1VL0dDRSkuCgpUaGVyZWZvcmUsIHRoaXMgcGF0Y2ggZml0cyBkaXJlY3RseSBpbnRvIHRoZSBndWlkZWxpbmU6ICYjMzQ7Q29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLCBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlJiMzNDsuCgpTbywgbGV0JiMzOTtzIHN1bW1hcml6ZToKLSAgIFdvcnRoRnV6emluZzogZmFsc2UKLSAgIEZvY3VzU3ltYm9sczogW10KLSAgIEVuYWJsZUNvbmZpZ3M6IFtdCi0gICBSZWFzb25pbmc6IEFsbCB0aGUgY2hhbmdlcyBhcmUgaW4gdGhlIGBnaWFuZmFyYCBldGhlcm5ldCBkcml2ZXIgZm9yIEZyZWVzY2FsZSBTb0NzIChQb3dlclBDIE1QQzgzeHgvODV4eC84Nnh4LCBBUk0gTFMxMDIxQSkuIFRoaXMgaXMgYW4gT0YgcGxhdGZvcm0gZHJpdmVyLCByZXF1aXJpbmcgZGVkaWNhdGVkIFNvQyBoYXJkd2FyZS4gU28sIGl0JiMzOTtzIG5vdCBhdmFpbGFibGUgb3IgcHJvYmVhYmxlIGluIHN0YW5kYXJkIFFFTVUvR0NFIHZpcnR1YWxpemVkIGZ1enppbmcgZW52aXJvbm1lbnRzLgoKSSYjMzk7bSByZWFkeSB0byBjYWxsIHRoZSBgc2V0LXJlc3VsdHNgIHRvb2wgbm93LiBFdmVyeXRoaW5nIGNoZWNrcyBvdXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI4IDIyOjQ3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogW10sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgY2hhbmdlcyBhcmUgaXNvbGF0ZWQgdG8gZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2dpYW5mYXIuYywgd2hpY2ggaXMgYSBwbGF0Zm9ybSBkcml2ZXIgZm9yIEZyZWVzY2FsZS9OWFAgU29DcyAoUG93ZXJQQyBNUEM4M3h4Lzg1eHgvODZ4eCBhbmQgQVJNIExTMTAyMUEpLiBJdCByZXF1aXJlcyBzcGVjaWZpYyBEZXZpY2UgVHJlZSBub2RlcyBhbmQgcGh5c2ljYWwgU29DIGhhcmR3YXJlLCBtYWtpbmcgaXQgaW1wb3NzaWJsZSB0byBwcm9iZSBhbmQgcmVhY2ggaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZnV6emluZyBlbnZpcm9ubWVudHMgc3VjaCBhcyBRRU1VIG9yIEdDRS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIGNoYW5nZXMgYXJlIGlzb2xhdGVkIHRvIGRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9naWFuZmFyLmMsIHdoaWNoIGlzIGEgcGxhdGZvcm0gZHJpdmVyIGZvciBGcmVlc2NhbGUvTlhQIFNvQ3MgKFBvd2VyUEMgTVBDODN4eC84NXh4Lzg2eHggYW5kIEFSTSBMUzEwMjFBKS4gSXQgcmVxdWlyZXMgc3BlY2lmaWMgRGV2aWNlIFRyZWUgbm9kZXMgYW5kIHBoeXNpY2FsIFNvQyBoYXJkd2FyZSwgbWFraW5nIGl0IGltcG9zc2libGUgdG8gcHJvYmUgYW5kIHJlYWNoIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGZ1enppbmcgZW52aXJvbm1lbnRzIHN1Y2ggYXMgUUVNVSBvciBHQ0UuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOCAyMjo0NzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMjhUMjI6NDY6NTguMjg3OTU0ODExWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDE4MTU3Njc1NTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJcIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBjaGFuZ2VzIGFyZSBpc29sYXRlZCB0byBkcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZ2lhbmZhci5jLCB3aGljaCBpcyBhIHBsYXRmb3JtIGRyaXZlciBmb3IgRnJlZXNjYWxlL05YUCBTb0NzIChQb3dlclBDIE1QQzgzeHgvODV4eC84Nnh4IGFuZCBBUk0gTFMxMDIxQSkuIEl0IHJlcXVpcmVzIHNwZWNpZmljIERldmljZSBUcmVlIG5vZGVzIGFuZCBwaHlzaWNhbCBTb0MgaGFyZHdhcmUsIG1ha2luZyBpdCBpbXBvc3NpYmxlIHRvIHByb2JlIGFuZCByZWFjaCBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBmdXp6aW5nIGVudmlyb25tZW50cyBzdWNoIGFzIFFFTVUgb3IgR0NFLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjhUMjI6NDY6NTguMjg3OTYyMDIxWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMzExODMyOTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCAzZDhlMDRmOTE2MGIxZTZiZjAzYWExMWQzNTI0YjlmYmIwNjdmNWQzXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBGcmkgQXVnIDI4IDIyOjQ2OjU3IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9naWFuZmFyLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZ2lhbmZhci5jXFxuaW5kZXggY2Y2MzZmYzVhYWZhYy4uZDBhYzhhOTU4Njk2ZCAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZ2lhbmZhci5jXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2dpYW5mYXIuY1xcbkBAIC0xMTQwLDExICsxMTQwLDI0IEBAIHN0YXRpYyB2b2lkIGZyZWVfc2tiX3Jlc291cmNlcyhzdHJ1Y3QgZ2Zhcl9wcml2YXRlICpwcml2KVxcbiBcXHRcXHRcXHRmcmVlX3NrYl9yeF9xdWV1ZShyeF9xdWV1ZSk7XFxuIFxcdH1cXG4gXFxuLVxcdGRtYV9mcmVlX2NvaGVyZW50KHByaXYtXFx1MDAzZWRldixcXG4tXFx0XFx0XFx0ICBzaXplb2Yoc3RydWN0IHR4YmQ4KSAqIHByaXYtXFx1MDAzZXRvdGFsX3R4X3Jpbmdfc2l6ZSArXFxuLVxcdFxcdFxcdCAgc2l6ZW9mKHN0cnVjdCByeGJkOCkgKiBwcml2LVxcdTAwM2V0b3RhbF9yeF9yaW5nX3NpemUsXFxuLVxcdFxcdFxcdCAgcHJpdi1cXHUwMDNldHhfcXVldWVbMF0tXFx1MDAzZXR4X2JkX2Jhc2UsXFxuLVxcdFxcdFxcdCAgcHJpdi1cXHUwMDNldHhfcXVldWVbMF0tXFx1MDAzZXR4X2JkX2RtYV9iYXNlKTtcXG4rXFx0aWYgKHByaXYtXFx1MDAzZXR4X3F1ZXVlWzBdLVxcdTAwM2V0eF9iZF9iYXNlKSB7XFxuK1xcdFxcdGRtYV9mcmVlX2NvaGVyZW50KHByaXYtXFx1MDAzZWRldixcXG4rXFx0XFx0XFx0XFx0ICBzaXplb2Yoc3RydWN0IHR4YmQ4KSAqXFxuK1xcdFxcdFxcdFxcdCAgcHJpdi1cXHUwMDNldG90YWxfdHhfcmluZ19zaXplICtcXG4rXFx0XFx0XFx0XFx0ICBzaXplb2Yoc3RydWN0IHJ4YmQ4KSAqXFxuK1xcdFxcdFxcdFxcdCAgcHJpdi1cXHUwMDNldG90YWxfcnhfcmluZ19zaXplLFxcbitcXHRcXHRcXHRcXHQgIHByaXYtXFx1MDAzZXR4X3F1ZXVlWzBdLVxcdTAwM2V0eF9iZF9iYXNlLFxcbitcXHRcXHRcXHRcXHQgIHByaXYtXFx1MDAzZXR4X3F1ZXVlWzBdLVxcdTAwM2V0eF9iZF9kbWFfYmFzZSk7XFxuK1xcbitcXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgcHJpdi1cXHUwMDNlbnVtX3R4X3F1ZXVlczsgaSsrKSB7XFxuK1xcdFxcdFxcdHByaXYtXFx1MDAzZXR4X3F1ZXVlW2ldLVxcdTAwM2V0eF9iZF9iYXNlID0gTlVMTDtcXG4rXFx0XFx0XFx0cHJpdi1cXHUwMDNldHhfcXVldWVbaV0tXFx1MDAzZXR4X2JkX2RtYV9iYXNlID0gMDtcXG4rXFx0XFx0fVxcbitcXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgcHJpdi1cXHUwMDNlbnVtX3J4X3F1ZXVlczsgaSsrKSB7XFxuK1xcdFxcdFxcdHByaXYtXFx1MDAzZXJ4X3F1ZXVlW2ldLVxcdTAwM2VyeF9iZF9iYXNlID0gTlVMTDtcXG4rXFx0XFx0XFx0cHJpdi1cXHUwMDNlcnhfcXVldWVbaV0tXFx1MDAzZXJ4X2JkX2RtYV9iYXNlID0gMDtcXG4rXFx0XFx0fVxcbitcXHR9XFxuIH1cXG4gXFxuIHZvaWQgc3RvcF9nZmFyKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuQEAgLTIwMDMsNiArMjAxNiw3IEBAIHN0YXRpYyBpbnQgZ2Zhcl9zZXRfbWFjX2FkZHJlc3Moc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4gc3RhdGljIGludCBnZmFyX2NoYW5nZV9tdHUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IG5ld19tdHUpXFxuIHtcXG4gXFx0c3RydWN0IGdmYXJfcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7XFxuK1xcdGludCBlcnIgPSAwO1xcbiBcXG4gXFx0d2hpbGUgKHRlc3RfYW5kX3NldF9iaXRfbG9jayhHRkFSX1JFU0VUVElORywgXFx1MDAyNnByaXYtXFx1MDAzZXN0YXRlKSlcXG4gXFx0XFx0Y3B1X3JlbGF4KCk7XFxuQEAgLTIwMTMsMjQgKzIwMjcsMjcgQEAgc3RhdGljIGludCBnZmFyX2NoYW5nZV9tdHUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IG5ld19tdHUpXFxuIFxcdFdSSVRFX09OQ0UoZGV2LVxcdTAwM2VtdHUsIG5ld19tdHUpO1xcbiBcXG4gXFx0aWYgKGRldi1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBJRkZfVVApXFxuLVxcdFxcdHN0YXJ0dXBfZ2ZhcihkZXYpO1xcbitcXHRcXHRlcnIgPSBzdGFydHVwX2dmYXIoZGV2KTtcXG4gXFxuIFxcdGNsZWFyX2JpdF91bmxvY2soR0ZBUl9SRVNFVFRJTkcsIFxcdTAwMjZwcml2LVxcdTAwM2VzdGF0ZSk7XFxuIFxcbi1cXHRyZXR1cm4gMDtcXG4rXFx0cmV0dXJuIGVycjtcXG4gfVxcbiBcXG4tc3RhdGljIHZvaWQgcmVzZXRfZ2ZhcihzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcXG4rc3RhdGljIGludCByZXNldF9nZmFyKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KVxcbiB7XFxuIFxcdHN0cnVjdCBnZmFyX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihuZGV2KTtcXG4rXFx0aW50IHJldDtcXG4gXFxuIFxcdHdoaWxlICh0ZXN0X2FuZF9zZXRfYml0X2xvY2soR0ZBUl9SRVNFVFRJTkcsIFxcdTAwMjZwcml2LVxcdTAwM2VzdGF0ZSkpXFxuIFxcdFxcdGNwdV9yZWxheCgpO1xcbiBcXG4gXFx0c3RvcF9nZmFyKG5kZXYpO1xcbi1cXHRzdGFydHVwX2dmYXIobmRldik7XFxuK1xcdHJldCA9IHN0YXJ0dXBfZ2ZhcihuZGV2KTtcXG4gXFxuIFxcdGNsZWFyX2JpdF91bmxvY2soR0ZBUl9SRVNFVFRJTkcsIFxcdTAwMjZwcml2LVxcdTAwM2VzdGF0ZSk7XFxuK1xcbitcXHRyZXR1cm4gcmV0O1xcbiB9XFxuIFxcbiAvKiBnZmFyX3Jlc2V0X3Rhc2sgZ2V0cyBzY2hlZHVsZWQgd2hlbiBhIHBhY2tldCBoYXMgbm90IGJlZW5cXG5AQCAtMjA1OCw2ICsyMDc1LDcgQEAgc3RhdGljIGludCBnZmFyX2h3dHN0YW1wX3NldChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxcbiBcXHRcXHRcXHQgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcXG4ge1xcbiBcXHRzdHJ1Y3QgZ2Zhcl9wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcXG4rXFx0aW50IHJldCA9IDA7XFxuIFxcbiBcXHRzd2l0Y2ggKGNvbmZpZy1cXHUwMDNldHhfdHlwZSkge1xcbiBcXHRjYXNlIEhXVFNUQU1QX1RYX09GRjpcXG5AQCAtMjA3Niw3ICsyMDk0LDcgQEAgc3RhdGljIGludCBnZmFyX2h3dHN0YW1wX3NldChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxcbiBcXHRjYXNlIEhXVFNUQU1QX0ZJTFRFUl9OT05FOlxcbiBcXHRcXHRpZiAocHJpdi1cXHUwMDNlaHd0c19yeF9lbikge1xcbiBcXHRcXHRcXHRwcml2LVxcdTAwM2Vod3RzX3J4X2VuID0gMDtcXG4tXFx0XFx0XFx0cmVzZXRfZ2ZhcihuZXRkZXYpO1xcbitcXHRcXHRcXHRyZXQgPSByZXNldF9nZmFyKG5ldGRldik7XFxuIFxcdFxcdH1cXG4gXFx0XFx0YnJlYWs7XFxuIFxcdGRlZmF1bHQ6XFxuQEAgLTIwODQsMTMgKzIxMDIsMTMgQEAgc3RhdGljIGludCBnZmFyX2h3dHN0YW1wX3NldChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxcbiBcXHRcXHRcXHRyZXR1cm4gLUVSQU5HRTtcXG4gXFx0XFx0aWYgKCFwcml2LVxcdTAwM2Vod3RzX3J4X2VuKSB7XFxuIFxcdFxcdFxcdHByaXYtXFx1MDAzZWh3dHNfcnhfZW4gPSAxO1xcbi1cXHRcXHRcXHRyZXNldF9nZmFyKG5ldGRldik7XFxuK1xcdFxcdFxcdHJldCA9IHJlc2V0X2dmYXIobmV0ZGV2KTtcXG4gXFx0XFx0fVxcbiBcXHRcXHRjb25maWctXFx1MDAzZXJ4X2ZpbHRlciA9IEhXVFNUQU1QX0ZJTFRFUl9BTEw7XFxuIFxcdFxcdGJyZWFrO1xcbiBcXHR9XFxuIFxcbi1cXHRyZXR1cm4gMDtcXG4rXFx0cmV0dXJuIHJldDtcXG4gfVxcbiBcXG4gc3RhdGljIGludCBnZmFyX2h3dHN0YW1wX2dldChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOFQyMjo0Njo1OC42MTk4NjMxODdaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjQxNDgzODQ3MTAwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBjaGFuZ2VzIGFyZSBpc29sYXRlZCB0byBkcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZ2lhbmZhci5jLCB3aGljaCBpcyBhIHBsYXRmb3JtIGRyaXZlciBmb3IgRnJlZXNjYWxlL05YUCBTb0NzIChQb3dlclBDIE1QQzgzeHgvODV4eC84Nnh4IGFuZCBBUk0gTFMxMDIxQSkuIEl0IHJlcXVpcmVzIHNwZWNpZmljIERldmljZSBUcmVlIG5vZGVzIGFuZCBwaHlzaWNhbCBTb0MgaGFyZHdhcmUsIG1ha2luZyBpdCBpbXBvc3NpYmxlIHRvIHByb2JlIGFuZCByZWFjaCBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBmdXp6aW5nIGVudmlyb25tZW50cyBzdWNoIGFzIFFFTVUgb3IgR0NFLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgM2Q4ZTA0ZjkxNjBiMWU2YmYwM2FhMTFkMzUyNGI5ZmJiMDY3ZjVkM1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgQXVnIDI4IDIyOjQ2OjU3IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2dpYW5mYXIuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9naWFuZmFyLmNcbmluZGV4IGNmNjM2ZmM1YWFmYWMuLmQwYWM4YTk1ODY5NmQgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZ2lhbmZhci5jXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZ2lhbmZhci5jXG5AQCAtMTE0MCwxMSArMTE0MCwyNCBAQCBzdGF0aWMgdm9pZCBmcmVlX3NrYl9yZXNvdXJjZXMoc3RydWN0IGdmYXJfcHJpdmF0ZSAqcHJpdilcbiBcdFx0XHRmcmVlX3NrYl9yeF9xdWV1ZShyeF9xdWV1ZSk7XG4gXHR9XG4gXG4tXHRkbWFfZnJlZV9jb2hlcmVudChwcml2LVx1MDAzZWRldixcbi1cdFx0XHQgIHNpemVvZihzdHJ1Y3QgdHhiZDgpICogcHJpdi1cdTAwM2V0b3RhbF90eF9yaW5nX3NpemUgK1xuLVx0XHRcdCAgc2l6ZW9mKHN0cnVjdCByeGJkOCkgKiBwcml2LVx1MDAzZXRvdGFsX3J4X3Jpbmdfc2l6ZSxcbi1cdFx0XHQgIHByaXYtXHUwMDNldHhfcXVldWVbMF0tXHUwMDNldHhfYmRfYmFzZSxcbi1cdFx0XHQgIHByaXYtXHUwMDNldHhfcXVldWVbMF0tXHUwMDNldHhfYmRfZG1hX2Jhc2UpO1xuK1x0aWYgKHByaXYtXHUwMDNldHhfcXVldWVbMF0tXHUwMDNldHhfYmRfYmFzZSkge1xuK1x0XHRkbWFfZnJlZV9jb2hlcmVudChwcml2LVx1MDAzZWRldixcbitcdFx0XHRcdCAgc2l6ZW9mKHN0cnVjdCB0eGJkOCkgKlxuK1x0XHRcdFx0ICBwcml2LVx1MDAzZXRvdGFsX3R4X3Jpbmdfc2l6ZSArXG4rXHRcdFx0XHQgIHNpemVvZihzdHJ1Y3QgcnhiZDgpICpcbitcdFx0XHRcdCAgcHJpdi1cdTAwM2V0b3RhbF9yeF9yaW5nX3NpemUsXG4rXHRcdFx0XHQgIHByaXYtXHUwMDNldHhfcXVldWVbMF0tXHUwMDNldHhfYmRfYmFzZSxcbitcdFx0XHRcdCAgcHJpdi1cdTAwM2V0eF9xdWV1ZVswXS1cdTAwM2V0eF9iZF9kbWFfYmFzZSk7XG4rXG4rXHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHByaXYtXHUwMDNlbnVtX3R4X3F1ZXVlczsgaSsrKSB7XG4rXHRcdFx0cHJpdi1cdTAwM2V0eF9xdWV1ZVtpXS1cdTAwM2V0eF9iZF9iYXNlID0gTlVMTDtcbitcdFx0XHRwcml2LVx1MDAzZXR4X3F1ZXVlW2ldLVx1MDAzZXR4X2JkX2RtYV9iYXNlID0gMDtcbitcdFx0fVxuK1x0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBwcml2LVx1MDAzZW51bV9yeF9xdWV1ZXM7IGkrKykge1xuK1x0XHRcdHByaXYtXHUwMDNlcnhfcXVldWVbaV0tXHUwMDNlcnhfYmRfYmFzZSA9IE5VTEw7XG4rXHRcdFx0cHJpdi1cdTAwM2VyeF9xdWV1ZVtpXS1cdTAwM2VyeF9iZF9kbWFfYmFzZSA9IDA7XG4rXHRcdH1cbitcdH1cbiB9XG4gXG4gdm9pZCBzdG9wX2dmYXIoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbkBAIC0yMDAzLDYgKzIwMTYsNyBAQCBzdGF0aWMgaW50IGdmYXJfc2V0X21hY19hZGRyZXNzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4gc3RhdGljIGludCBnZmFyX2NoYW5nZV9tdHUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IG5ld19tdHUpXG4ge1xuIFx0c3RydWN0IGdmYXJfcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7XG4rXHRpbnQgZXJyID0gMDtcbiBcbiBcdHdoaWxlICh0ZXN0X2FuZF9zZXRfYml0X2xvY2soR0ZBUl9SRVNFVFRJTkcsIFx1MDAyNnByaXYtXHUwMDNlc3RhdGUpKVxuIFx0XHRjcHVfcmVsYXgoKTtcbkBAIC0yMDEzLDI0ICsyMDI3LDI3IEBAIHN0YXRpYyBpbnQgZ2Zhcl9jaGFuZ2VfbXR1KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBuZXdfbXR1KVxuIFx0V1JJVEVfT05DRShkZXYtXHUwMDNlbXR1LCBuZXdfbXR1KTtcbiBcbiBcdGlmIChkZXYtXHUwMDNlZmxhZ3MgXHUwMDI2IElGRl9VUClcbi1cdFx0c3RhcnR1cF9nZmFyKGRldik7XG4rXHRcdGVyciA9IHN0YXJ0dXBfZ2ZhcihkZXYpO1xuIFxuIFx0Y2xlYXJfYml0X3VubG9jayhHRkFSX1JFU0VUVElORywgXHUwMDI2cHJpdi1cdTAwM2VzdGF0ZSk7XG4gXG4tXHRyZXR1cm4gMDtcbitcdHJldHVybiBlcnI7XG4gfVxuIFxuLXN0YXRpYyB2b2lkIHJlc2V0X2dmYXIoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpXG4rc3RhdGljIGludCByZXNldF9nZmFyKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KVxuIHtcbiBcdHN0cnVjdCBnZmFyX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihuZGV2KTtcbitcdGludCByZXQ7XG4gXG4gXHR3aGlsZSAodGVzdF9hbmRfc2V0X2JpdF9sb2NrKEdGQVJfUkVTRVRUSU5HLCBcdTAwMjZwcml2LVx1MDAzZXN0YXRlKSlcbiBcdFx0Y3B1X3JlbGF4KCk7XG4gXG4gXHRzdG9wX2dmYXIobmRldik7XG4tXHRzdGFydHVwX2dmYXIobmRldik7XG4rXHRyZXQgPSBzdGFydHVwX2dmYXIobmRldik7XG4gXG4gXHRjbGVhcl9iaXRfdW5sb2NrKEdGQVJfUkVTRVRUSU5HLCBcdTAwMjZwcml2LVx1MDAzZXN0YXRlKTtcbitcbitcdHJldHVybiByZXQ7XG4gfVxuIFxuIC8qIGdmYXJfcmVzZXRfdGFzayBnZXRzIHNjaGVkdWxlZCB3aGVuIGEgcGFja2V0IGhhcyBub3QgYmVlblxuQEAgLTIwNTgsNiArMjA3NSw3IEBAIHN0YXRpYyBpbnQgZ2Zhcl9od3RzdGFtcF9zZXQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcbiBcdFx0XHQgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbiB7XG4gXHRzdHJ1Y3QgZ2Zhcl9wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcbitcdGludCByZXQgPSAwO1xuIFxuIFx0c3dpdGNoIChjb25maWctXHUwMDNldHhfdHlwZSkge1xuIFx0Y2FzZSBIV1RTVEFNUF9UWF9PRkY6XG5AQCAtMjA3Niw3ICsyMDk0LDcgQEAgc3RhdGljIGludCBnZmFyX2h3dHN0YW1wX3NldChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxuIFx0Y2FzZSBIV1RTVEFNUF9GSUxURVJfTk9ORTpcbiBcdFx0aWYgKHByaXYtXHUwMDNlaHd0c19yeF9lbikge1xuIFx0XHRcdHByaXYtXHUwMDNlaHd0c19yeF9lbiA9IDA7XG4tXHRcdFx0cmVzZXRfZ2ZhcihuZXRkZXYpO1xuK1x0XHRcdHJldCA9IHJlc2V0X2dmYXIobmV0ZGV2KTtcbiBcdFx0fVxuIFx0XHRicmVhaztcbiBcdGRlZmF1bHQ6XG5AQCAtMjA4NCwxMyArMjEwMiwxMyBAQCBzdGF0aWMgaW50IGdmYXJfaHd0c3RhbXBfc2V0KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXG4gXHRcdFx0cmV0dXJuIC1FUkFOR0U7XG4gXHRcdGlmICghcHJpdi1cdTAwM2Vod3RzX3J4X2VuKSB7XG4gXHRcdFx0cHJpdi1cdTAwM2Vod3RzX3J4X2VuID0gMTtcbi1cdFx0XHRyZXNldF9nZmFyKG5ldGRldik7XG4rXHRcdFx0cmV0ID0gcmVzZXRfZ2ZhcihuZXRkZXYpO1xuIFx0XHR9XG4gXHRcdGNvbmZpZy1cdTAwM2VyeF9maWx0ZXIgPSBIV1RTVEFNUF9GSUxURVJfQUxMO1xuIFx0XHRicmVhaztcbiBcdH1cbiBcbi1cdHJldHVybiAwO1xuK1x0cmV0dXJuIHJldDtcbiB9XG4gXG4gc3RhdGljIGludCBnZmFyX2h3dHN0YW1wX2dldChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjhUMjI6NDY6NTguNjE5ODY0NTU3WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTEzODUwMTQ3MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipSZXZpZXdpbmcgdGhlIGdpYW5mYXIuYyBQYXRjaCoqXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgaW50byB0aGlzIGBkcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZ2lhbmZhci5jYCBwYXRjaC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIFwiV2hhdCBleGFjdGx5ICppcyogZ2lhbmZhcj9cIiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgc2NvcGUgb2YgdGhpcyBkcml2ZXIgYmVmb3JlIEkgY2FuIHByb3Blcmx5IGV2YWx1YXRlIHRoZSBjaGFuZ2VzLiBJcyB0aGlzIHNvbWV0aGluZyB0aGF0J3MgcmVsZXZhbnQgdG8gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIEkgbWlnaHQgYmUgd29ya2luZyBpbiwgb3IgaXMgaXQgc3BlY2lmaWMgdG8gcGh5c2ljYWwgRnJlZXNjYWxlL1Bvd2VyUEMgU29DIEV0aGVybmV0IGNvbnRyb2xsZXJzPyBJIGhhdmUgdG8ga25vdyBpdHMgYXJjaGl0ZWN0dXJhbCBjb250ZXh0LlxuXG5TbywgZmlyc3QgdGhpbmdzIGZpcnN0LCBJJ20gZ29pbmcgdG8gaGVhZCBzdHJhaWdodCBmb3IgdGhlIGBLY29uZmlnYCBmb3IgYGdpYW5mYXIuY2AuIFRoYXQncyB3aGVyZSB0aGUgcmVhbCBzdG9yeSBiZWdpbnMuIFRoZSBLY29uZmlnIHdpbGwgdGVsbCBtZSB0aGUgZGVwZW5kZW5jaWVzLCB0aGUgdGFyZ2V0IHBsYXRmb3JtcywgYW5kIG1vc3QgaW1wb3J0YW50bHksIGFueSBjb25maWd1cmF0aW9uIG9wdGlvbnMgdGhhdCBtaWdodCBpbmZsdWVuY2UgdGhpcyBwYXRjaCdzIGJlaGF2aW91ci4gSXQncyB0aGUga2V5IHRvIHVubG9ja2luZyB0aGUgdHJ1ZSBpbXBsaWNhdGlvbnMgb2YgdGhlc2UgY2hhbmdlcywgYW5kIEkgbmVlZCB0byBmdWxseSB1bmRlcnN0YW5kIGl0cyBjb250ZXh0IGJlZm9yZSBnb2luZyBkZWVwZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMyNTcsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4MSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI4VDIyOjQ3OjAzLjc1ODM2OTAwOFoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjAwNzU5OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJHSUFORkFSXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvS2NvbmZpZz04OT1jb25maWcgVUdFVEhfVFhfT05fREVNQU5EXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvS2NvbmZpZy05Mi1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvS2NvbmZpZzo5Mzpjb25maWcgR0lBTkZBUlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9LY29uZmlnLTk0LVxcdHRyaXN0YXRlIFxcXCJHaWFuZmFyIEV0aGVybmV0XFxcIlxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL01ha2VmaWxlPTE1PW9iai0kKENPTkZJR19GU0xfWEdNQUNfTURJTykgKz0geGdtYWNfbWRpby5vXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL01ha2VmaWxlOjE2Om9iai0kKENPTkZJR19HSUFORkFSKSArPSBnaWFuZmFyX2RyaXZlci5vXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL01ha2VmaWxlLTE3LWdpYW5mYXJfZHJpdmVyLW9ianMgOj0gZ2lhbmZhci5vIFxcXFxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mc2xfcHFfbWRpby5jPTE2ND1zdGF0aWMgaW50IGZzbF9wcV9tZGlvX3Jlc2V0KHN0cnVjdCBtaWlfYnVzICpidXMpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZnNsX3BxX21kaW8uYy0xOTQtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZzbF9wcV9tZGlvLmM6MTk1OiNpZiBJU19FTkFCTEVEKENPTkZJR19HSUFORkFSKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mc2xfcHFfbWRpby5jLTE5Ni0vKlxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZzbF9wcV9tZGlvLmM9MzA1PXN0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIGZzbF9wcV9tZGlvX21hdGNoW10gPSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZzbF9wcV9tZGlvLmM6MzA2OiNpZiBJU19FTkFCTEVEKENPTkZJR19HSUFORkFSKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mc2xfcHFfbWRpby5jLTMwNy1cXHR7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZ2lhbmZhci5jPTI3OD1zdGF0aWMgdm9pZCBnZmFyX2dldF9zdGF0czY0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBydG5sX2xpbmtfc3RhdHM2NCAqc3RhdHMpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZ2lhbmZhci5jLTI5My1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZ2lhbmZhci5jOjI5NDpcXHRpZiAocHJpdi1cXHUwMDNlZGV2aWNlX2ZsYWdzIFxcdTAwMjYgRlNMX0dJQU5GQVJfREVWX0hBU19STU9OKSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2dpYW5mYXIuYy0yOTUtXFx0XFx0c3RydWN0IHJtb25fbWliIF9faW9tZW0gKnJtb24gPSBcXHUwMDI2cHJpdi1cXHUwMDNlZ2ZhcmdycFswXS5yZWdzLVxcdTAwM2VybW9uO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2dpYW5mYXIuYz01Nzg9c3RhdGljIHBoeV9pbnRlcmZhY2VfdCBnZmFyX2dldF9pbnRlcmZhY2Uoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9naWFuZmFyLmMtNjEyLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9naWFuZmFyLmM6NjEzOlxcdGlmIChwcml2LVxcdTAwM2VkZXZpY2VfZmxhZ3MgXFx1MDAyNiBGU0xfR0lBTkZBUl9ERVZfSEFTX0dJR0FCSVQpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2dpYW5mYXIuYy02MTQtXFx0XFx0cmV0dXJuIFBIWV9JTlRFUkZBQ0VfTU9ERV9HTUlJO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2dpYW5mYXIuYz02MTk9c3RhdGljIGludCBnZmFyX29mX2luaXQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqb2ZkZXYsIHN0cnVjdCBuZXRfZGV2aWNlICoqcGRldilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9naWFuZmFyLmMtNzMyLVxcdGlmIChvZl9wcm9wZXJ0eV9yZWFkX2Jvb2wobnAsIFxcXCJiZC1zdGFzaFxcXCIpKSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2dpYW5mYXIuYzo3MzM6XFx0XFx0cHJpdi1cXHUwMDNlZGV2aWNlX2ZsYWdzIHw9IEZTTF9HSUFORkFSX0RFVl9IQVNfQkRfU1RBU0hJTkc7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2dpYW5mYXIuYy03MzQtXFx0XFx0cHJpdi1cXHUwMDNlYmRfc3Rhc2hfZW4gPSAxO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2dpYW5mYXIuYy03NDctXFx0aWYgKHN0YXNoX2xlbiB8fCBzdGFzaF9pZHgpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2dpYW5mYXIuYzo3NDg6XFx0XFx0cHJpdi1cXHUwMDNlZGV2aWNlX2ZsYWdzIHw9IEZTTF9HSUFORkFSX0RFVl9IQVNfQlVGX1NUQVNISU5HO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9naWFuZmFyLmMtNzQ5LVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2dpYW5mYXIuYy03NTgtXFx0aWYgKG1vZGVsIFxcdTAwMjZcXHUwMDI2ICFzdHJjYXNlY21wKG1vZGVsLCBcXFwiVFNFQ1xcXCIpKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9naWFuZmFyLmM6NzU5OlxcdFxcdHByaXYtXFx1MDAzZWRldmljZV9mbGFncyB8PSBGU0xfR0lBTkZBUl9ERVZfSEFTX0dJR0FCSVQgfFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9naWFuZmFyLmM6NzYwOlxcdFxcdFxcdFxcdCAgICAgRlNMX0dJQU5GQVJfREVWX0hBU19DT0FMRVNDRSB8XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2dpYW5mYXIuYzo3NjE6XFx0XFx0XFx0XFx0ICAgICBGU0xfR0lBTkZBUl9ERVZfSEFTX1JNT04gfFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9naWFuZmFyLmM6NzYyOlxcdFxcdFxcdFxcdCAgICAgRlNMX0dJQU5GQVJfREVWX0hBU19NVUxUSV9JTlRSO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9naWFuZmFyLmMtNzYzLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9naWFuZmFyLmMtNzY0LVxcdGlmIChtb2RlbCBcXHUwMDI2XFx1MDAyNiAhc3RyY2FzZWNtcChtb2RlbCwgXFxcImVUU0VDXFxcIikpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2dpYW5mYXIuYzo3NjU6XFx0XFx0cHJpdi1cXHUwMDNlZGV2aWNlX2ZsYWdzIHw9IEZTTF9HSUFORkFSX0RFVl9IQVNfR0lHQUJJVCB8XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2dpYW5mYXIuYzo3NjY6XFx0XFx0XFx0XFx0ICAgICBGU0xfR0lBTkZBUl9ERVZfSEFTX0NPQUxFU0NFIHxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZ2lhbmZhci5jOjc2NzpcXHRcXHRcXHRcXHQgICAgIEZTTF9HSUFORkFSX0RFVl9IQVNfUk1PTiB8XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2dpYW5mYXIuYzo3Njg6XFx0XFx0XFx0XFx0ICAgICBGU0xfR0lBTkZBUl9ERVZfSEFTX01VTFRJX0lOVFIgfFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9naWFuZmFyLmM6NzY5OlxcdFxcdFxcdFxcdCAgICAgRlNMX0dJQU5GQVJfREVWX0hBU19DU1VNIHxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZ2lhbmZhci5jOjc3MDpcXHRcXHRcXHRcXHQgICAgIEZTTF9HSUFORkFSX0RFVl9IQVNfVkxBTiB8XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2dpYW5mYXIuYzo3NzE6XFx0XFx0XFx0XFx0ICAgICBGU0xfR0lBTkZBUl9ERVZfSEFTX01BR0lDX1BBQ0tFVCB8XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2dpYW5mYXIuYzo3NzI6XFx0XFx0XFx0XFx0ICAgICBGU0xfR0lBTkZBUl9ERVZfSEFTX0VYVEVOREVEX0hBU0ggfFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9naWFuZmFyLmM6NzczOlxcdFxcdFxcdFxcdCAgICAgRlNMX0dJQU5GQVJfREVWX0hBU19USU1FUiB8XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2dpYW5mYXIuYzo3NzQ6XFx0XFx0XFx0XFx0ICAgICBGU0xfR0lBTkZBUl9ERVZfSEFTX1JYX0ZJTEVSO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9naWFuZmFyLmMtNzc1LVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2dpYW5mYXIuYy03ODYtXFx0aWYgKG9mX3Byb3BlcnR5X3JlYWRfYm9vbChucCwgXFxcImZzbCxtYWdpYy1wYWNrZXRcXFwiKSlcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZ2lhbmZhci5jOjc4NzpcXHRcXHRwcml2LVxcdTAwM2VkZXZpY2VfZmxhZ3MgfD0gRlNMX0dJQU5GQVJfREVWX0hBU19NQUdJQ19QQUNLRVQ7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2dpYW5mYXIuYy03ODgtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2dpYW5mYXIuYy03ODktXFx0aWYgKG9mX3Byb3BlcnR5X3JlYWRfYm9vbChucCwgXFxcImZzbCx3YWtlLW9uLWZpbGVyXFxcIikpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2dpYW5mYXIuYzo3OTA6XFx0XFx0cHJpdi1cXHUwMDNlZGV2aWNlX2ZsYWdzIHw9IEZTTF9HSUFORkFSX0RFVl9IQVNfV0FLRV9PTl9GSUxFUjtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZ2lhbmZhci5jLTc5MS1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9naWFuZmFyLmM9OTQzPXN0YXRpYyB2b2lkIGdmYXJfaW5pdF9hZGRyX2hhc2hfdGFibGUoc3RydWN0IGdmYXJfcHJpdmF0ZSAqcHJpdilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9naWFuZmFyLmMtOTQ2LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9naWFuZmFyLmM6OTQ3OlxcdGlmIChwcml2LVxcdTAwM2VkZXZpY2VfZmxhZ3MgXFx1MDAyNiBGU0xfR0lBTkZBUl9ERVZfSEFTX0VYVEVOREVEX0hBU0gpIHtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZ2lhbmZhci5jLTk0OC1cXHRcXHRwcml2LVxcdTAwM2VleHRlbmRlZF9oYXNoID0gMTtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9naWFuZmFyLmM9MTY1Mz1zdGF0aWMgaW50IGluaXRfcGh5KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZ2lhbmZhci5jLTE2NzMtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2dpYW5mYXIuYzoxNjc0OlxcdGlmICghKHByaXYtXFx1MDAzZWRldmljZV9mbGFncyBcXHUwMDI2IEZTTF9HSUFORkFSX0RFVl9IQVNfR0lHQUJJVCkpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2dpYW5mYXIuYy0xNjc1LVxcdFxcdHBoeV9zZXRfbWF4X3NwZWVkKHBoeWRldiwgU1BFRURfMTAwKTtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9naWFuZmFyLmM9MjA3Mz1zdGF0aWMgaW50IGdmYXJfaHd0c3RhbXBfc2V0KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZ2lhbmZhci5jLTIwODQtXFx0Y2FzZSBIV1RTVEFNUF9UWF9PTjpcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZ2lhbmZhci5jOjIwODU6XFx0XFx0aWYgKCEocHJpdi1cXHUwMDNlZGV2aWNlX2ZsYWdzIFxcdTAwMjYgRlNMX0dJQU5GQVJfREVWX0hBU19USU1FUikpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2dpYW5mYXIuYy0yMDg2LVxcdFxcdFxcdHJldHVybiAtRVJBTkdFO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2dpYW5mYXIuYy0yMTAwLVxcdGRlZmF1bHQ6XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2dpYW5mYXIuYzoyMTAxOlxcdFxcdGlmICghKHByaXYtXFx1MDAzZWRldmljZV9mbGFncyBcXHUwMDI2IEZTTF9HSUFORkFSX0RFVl9IQVNfVElNRVIpKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9naWFuZmFyLmMtMjEwMi1cXHRcXHRcXHRyZXR1cm4gLUVSQU5HRTtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9naWFuZmFyLmM9MjY0ND1zdGF0aWMgaXJxcmV0dXJuX3QgZ2Zhcl9lcnJvcihpbnQgaXJxLCB2b2lkICpncnBfaWQpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZ2lhbmZhci5jLTI2NTctXFx0LyogTWFnaWMgUGFja2V0IGlzIG5vdCBhbiBlcnJvci4gKi9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZ2lhbmZhci5jOjI2NTg6XFx0aWYgKChwcml2LVxcdTAwM2VkZXZpY2VfZmxhZ3MgXFx1MDAyNiBGU0xfR0lBTkZBUl9ERVZfSEFTX01BR0lDX1BBQ0tFVCkgXFx1MDAyNlxcdTAwMjZcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZ2lhbmZhci5jLTI2NTktXFx0ICAgIChldmVudHMgXFx1MDAyNiBJRVZFTlRfTUFHKSlcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9naWFuZmFyLmM9Mjc1Mz1zdGF0aWMgdm9pZCBnZmFyX25ldHBvbGwoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9naWFuZmFyLmMtMjc1OC1cXHQvKiBJZiB0aGUgZGV2aWNlIGhhcyBtdWx0aXBsZSBpbnRlcnJ1cHRzLCBydW4gdHgvcnggKi9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZ2lhbmZhci5jOjI3NTk6XFx0aWYgKHByaXYtXFx1MDAzZWRldmljZV9mbGFncyBcXHUwMDI2IEZTTF9HSUFORkFSX0RFVl9IQVNfTVVMVElfSU5UUikge1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9naWFuZmFyLmMtMjc2MC1cXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgcHJpdi1cXHUwMDNlbnVtX2dycHM7IGkrKykge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2dpYW5mYXIuYz0yNzkwPXN0YXRpYyBpbnQgcmVnaXN0ZXJfZ3JwX2lycXMoc3RydWN0IGdmYXJfcHJpdl9ncnAgKmdycClcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9naWFuZmFyLmMtMjc5OC1cXHQgKi9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZ2lhbmZhci5jOjI3OTk6XFx0aWYgKHByaXYtXFx1MDAzZWRldmljZV9mbGFncyBcXHUwMDI2IEZTTF9HSUFORkFSX0RFVl9IQVNfTVVMVElfSU5UUikge1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9naWFuZmFyLmMtMjgwMC1cXHRcXHQvKiBJbnN0YWxsIG91ciBpbnRlcnJ1cHQgaGFuZGxlcnMgZm9yIEVycm9yLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2dpYW5mYXIuYz0yODUxPXN0YXRpYyB2b2lkIGdmYXJfZnJlZV9pcnEoc3RydWN0IGdmYXJfcHJpdmF0ZSAqcHJpdilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9naWFuZmFyLmMtMjg1NS1cXHQvKiBGcmVlIHRoZSBJUlFzICovXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2dpYW5mYXIuYzoyODU2OlxcdGlmIChwcml2LVxcdTAwM2VkZXZpY2VfZmxhZ3MgXFx1MDAyNiBGU0xfR0lBTkZBUl9ERVZfSEFTX01VTFRJX0lOVFIpIHtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZ2lhbmZhci5jLTI4NTctXFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIHByaXYtXFx1MDAzZW51bV9ncnBzOyBpKyspXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZ2lhbmZhci5jPTMwOTY9c3RhdGljIHZvaWQgZ2Zhcl9od19pbml0KHN0cnVjdCBnZmFyX3ByaXZhdGUgKnByaXYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZ2lhbmZhci5jLTMxMDgtXFx0LyogWmVybyBvdXQgdGhlIHJtb24gbWliIHJlZ2lzdGVycyBpZiBpdCBoYXMgdGhlbSAqL1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9naWFuZmFyLmM6MzEwOTpcXHRpZiAocHJpdi1cXHUwMDNlZGV2aWNlX2ZsYWdzIFxcdTAwMjYgRlNMX0dJQU5GQVJfREVWX0hBU19STU9OKSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2dpYW5mYXIuYy0zMTEwLVxcdFxcdG1lbXNldF9pbyhcXHUwMDI2cmVncy1cXHUwMDNlcm1vbiwgMCwgb2Zmc2V0b2Yoc3RydWN0IHJtb25fbWliLCBjYXIxKSk7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZ2lhbmZhci5jPTMxNzU9c3RhdGljIGludCBnZmFyX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKm9mZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2dpYW5mYXIuYy0zMjE4LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9naWFuZmFyLmM6MzIxOTpcXHRpZiAocHJpdi1cXHUwMDNlZGV2aWNlX2ZsYWdzIFxcdTAwMjYgRlNMX0dJQU5GQVJfREVWX0hBU19DU1VNKSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2dpYW5mYXIuYy0zMjIwLVxcdFxcdGRldi1cXHUwMDNlaHdfZmVhdHVyZXMgPSBORVRJRl9GX0lQX0NTVU0gfCBORVRJRl9GX1NHIHxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9naWFuZmFyLmMtMzIyNS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZ2lhbmZhci5jOjMyMjY6XFx0aWYgKHByaXYtXFx1MDAzZWRldmljZV9mbGFncyBcXHUwMDI2IEZTTF9HSUFORkFSX0RFVl9IQVNfVkxBTikge1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9naWFuZmFyLmMtMzIyNy1cXHRcXHRkZXYtXFx1MDAzZWh3X2ZlYXR1cmVzIHw9IE5FVElGX0ZfSFdfVkxBTl9DVEFHX1RYIHxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9naWFuZmFyLmMtMzIzOC1cXHQgKi9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZ2lhbmZhci5jOjMyMzk6XFx0aWYgKHByaXYtXFx1MDAzZWRldmljZV9mbGFncyBcXHUwMDI2IEZTTF9HSUFORkFSX0RFVl9IQVNfVElNRVIpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2dpYW5mYXIuYy0zMjQwLVxcdFxcdHByaXYtXFx1MDAzZXBhZGRpbmcgPSA4ICsgREVGQVVMVF9QQURESU5HO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2dpYW5mYXIuYy0zMjQyLVxcdGlmIChkZXYtXFx1MDAzZWZlYXR1cmVzIFxcdTAwMjYgTkVUSUZfRl9JUF9DU1VNIHx8XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2dpYW5mYXIuYzozMjQzOlxcdCAgICBwcml2LVxcdTAwM2VkZXZpY2VfZmxhZ3MgXFx1MDAyNiBGU0xfR0lBTkZBUl9ERVZfSEFTX1RJTUVSKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9naWFuZmFyLmMtMzI0NC1cXHRcXHRkZXYtXFx1MDAzZW5lZWRlZF9oZWFkcm9vbSA9IEdNQUNfRkNCX0xFTiArIEdNQUNfVFhQQUxfTEVOO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2dpYW5mYXIuYy0zMjYxLVxcdHByaXYtXFx1MDAzZXJ4X2ZpbGVyX2VuYWJsZSA9XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2dpYW5mYXIuYzozMjYyOlxcdCAgICAocHJpdi1cXHUwMDNlZGV2aWNlX2ZsYWdzIFxcdTAwMjYgRlNMX0dJQU5GQVJfREVWX0hBU19SWF9GSUxFUikgPyAxIDogMDtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZ2lhbmZhci5jLTMyNjMtXFx0LyogRW5hYmxlIG1vc3QgbWVzc2FnZXMgYnkgZGVmYXVsdCAqL1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2dpYW5mYXIuYy0zMjcyLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9naWFuZmFyLmM6MzI3MzpcXHRpZiAocHJpdi1cXHUwMDNlZGV2aWNlX2ZsYWdzIFxcdTAwMjYgRlNMX0dJQU5GQVJfREVWX0hBU19STU9OKSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2dpYW5mYXIuYy0zMjc0LVxcdFxcdHN0cnVjdCBybW9uX21pYiBfX2lvbWVtICpybW9uID0gXFx1MDAyNnByaXYtXFx1MDAzZWdmYXJncnBbMF0ucmVncy1cXHUwMDNlcm1vbjtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9naWFuZmFyLmMtMzI5MC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZ2lhbmZhci5jOjMyOTE6XFx0aWYgKHByaXYtXFx1MDAzZWRldmljZV9mbGFncyBcXHUwMDI2IEZTTF9HSUFORkFSX0RFVl9IQVNfTUFHSUNfUEFDS0VUKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9naWFuZmFyLmMtMzI5Mi1cXHRcXHRwcml2LVxcdTAwM2V3b2xfc3VwcG9ydGVkIHw9IEdGQVJfV09MX01BR0lDO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9naWFuZmFyLmMtMzI5My1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZ2lhbmZhci5jOjMyOTQ6XFx0aWYgKChwcml2LVxcdTAwM2VkZXZpY2VfZmxhZ3MgXFx1MDAyNiBGU0xfR0lBTkZBUl9ERVZfSEFTX1dBS0VfT05fRklMRVIpIFxcdTAwMjZcXHUwMDI2XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2dpYW5mYXIuYy0zMjk1LVxcdCAgICBwcml2LVxcdTAwM2VyeF9maWxlcl9lbmFibGUpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZ2lhbmZhci5jLTMzMDItXFx0XFx0c3RydWN0IGdmYXJfcHJpdl9ncnAgKmdycCA9IFxcdTAwMjZwcml2LVxcdTAwM2VnZmFyZ3JwW2ldO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9naWFuZmFyLmM6MzMwMzpcXHRcXHRpZiAocHJpdi1cXHUwMDNlZGV2aWNlX2ZsYWdzIFxcdTAwMjYgRlNMX0dJQU5GQVJfREVWX0hBU19NVUxUSV9JTlRSKSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2dpYW5mYXIuYy0zMzA0LVxcdFxcdFxcdHNwcmludGYoZ2Zhcl9pcnEoZ3JwLCBUWCktXFx1MDAzZW5hbWUsIFxcXCIlcyVzJWMlc1xcXCIsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZ2lhbmZhci5oLTE4LSAqL1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9naWFuZmFyLmg6MTk6I2lmbmRlZiBfX0dJQU5GQVJfSFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9naWFuZmFyLmg6MjA6I2RlZmluZSBfX0dJQU5GQVJfSFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9naWFuZmFyLmgtMjEtXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZ2lhbmZhci5oPTY5NT1zdHJ1Y3QgZ2ZhciB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZ2lhbmZhci5oLTkzOC0vKiBGbGFncyByZWxhdGVkIHRvIGdpYW5mYXIgZGV2aWNlIGZlYXR1cmVzICovXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2dpYW5mYXIuaDo5Mzk6I2RlZmluZSBGU0xfR0lBTkZBUl9ERVZfSEFTX0dJR0FCSVRcXHRcXHQweDAwMDAwMDAxXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2dpYW5mYXIuaDo5NDA6I2RlZmluZSBGU0xfR0lBTkZBUl9ERVZfSEFTX0NPQUxFU0NFXFx0XFx0MHgwMDAwMDAwMlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9naWFuZmFyLmg6OTQxOiNkZWZpbmUgRlNMX0dJQU5GQVJfREVWX0hBU19STU9OXFx0XFx0MHgwMDAwMDAwNFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9naWFuZmFyLmg6OTQyOiNkZWZpbmUgRlNMX0dJQU5GQVJfREVWX0hBU19NVUxUSV9JTlRSXFx0XFx0MHgwMDAwMDAwOFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9naWFuZmFyLmg6OTQzOiNkZWZpbmUgRlNMX0dJQU5GQVJfREVWX0hBU19DU1VNXFx0XFx0MHgwMDAwMDAxMFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9naWFuZmFyLmg6OTQ0OiNkZWZpbmUgRlNMX0dJQU5GQVJfREVWX0hBU19WTEFOXFx0XFx0MHgwMDAwMDAyMFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9naWFuZmFyLmg6OTQ1OiNkZWZpbmUgRlNMX0dJQU5GQVJfREVWX0hBU19FWFRFTkRFRF9IQVNIXFx0MHgwMDAwMDA0MFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9naWFuZmFyLmg6OTQ2OiNkZWZpbmUgRlNMX0dJQU5GQVJfREVWX0hBU19NQUdJQ19QQUNLRVRcXHQweDAwMDAwMTAwXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2dpYW5mYXIuaDo5NDc6I2RlZmluZSBGU0xfR0lBTkZBUl9ERVZfSEFTX0JEX1NUQVNISU5HXFx0XFx0MHgwMDAwMDIwMFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9naWFuZmFyLmg6OTQ4OiNkZWZpbmUgRlNMX0dJQU5GQVJfREVWX0hBU19CVUZfU1RBU0hJTkdcXHQweDAwMDAwNDAwXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2dpYW5mYXIuaDo5NDk6I2RlZmluZSBGU0xfR0lBTkZBUl9ERVZfSEFTX1RJTUVSXFx0XFx0MHgwMDAwMDgwMFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9naWFuZmFyLmg6OTUwOiNkZWZpbmUgRlNMX0dJQU5GQVJfREVWX0hBU19XQUtFX09OX0ZJTEVSXFx0MHgwMDAwMTAwMFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9naWFuZmFyLmg6OTUxOiNkZWZpbmUgRlNMX0dJQU5GQVJfREVWX0hBU19SWF9GSUxFUlxcdFxcdDB4MDAwMDIwMDBcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZ2lhbmZhci5oLTk1Mi1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9naWFuZmFyLmg9MTM2ND1zdHJ1Y3QgZmlsZXJfdGFibGUge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2dpYW5mYXIuaC0xMzY4LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9naWFuZmFyLmg6MTM2OTojZW5kaWYgLyogX19HSUFORkFSX0ggKi9cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9naWFuZmFyX2V0aHRvb2wuYz0xMTU9c3RhdGljIHZvaWQgZ2Zhcl9nc3RyaW5ncyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MzIgc3RyaW5nc2V0LCB1OCAqIGJ1ZilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9naWFuZmFyX2V0aHRvb2wuYy0xMTktXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2dpYW5mYXJfZXRodG9vbC5jOjEyMDpcXHRpZiAocHJpdi1cXHUwMDNlZGV2aWNlX2ZsYWdzIFxcdTAwMjYgRlNMX0dJQU5GQVJfREVWX0hBU19STU9OKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9naWFuZmFyX2V0aHRvb2wuYy0xMjEtXFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIEdGQVJfU1RBVFNfTEVOOyBpKyspXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZ2lhbmZhcl9ldGh0b29sLmM9MTMyPXN0YXRpYyB2b2lkIGdmYXJfZmlsbF9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgZXRodG9vbF9zdGF0cyAqZHVtbXksXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZ2lhbmZhcl9ldGh0b29sLmMtMTQyLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9naWFuZmFyX2V0aHRvb2wuYzoxNDM6XFx0aWYgKHByaXYtXFx1MDAzZWRldmljZV9mbGFncyBcXHUwMDI2IEZTTF9HSUFORkFSX0RFVl9IQVNfUk1PTikge1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9naWFuZmFyX2V0aHRvb2wuYy0xNDQtXFx0XFx0dTMyIF9faW9tZW0gKnJtb24gPSAodTMyIF9faW9tZW0gKikgXFx1MDAyNnJlZ3MtXFx1MDAzZXJtb247XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZ2lhbmZhcl9ldGh0b29sLmM9MTUxPXN0YXRpYyBpbnQgZ2Zhcl9zc2V0X2NvdW50KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBzc2V0KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2dpYW5mYXJfZXRodG9vbC5jLTE1Ni1cXHRjYXNlIEVUSF9TU19TVEFUUzpcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZ2lhbmZhcl9ldGh0b29sLmM6MTU3OlxcdFxcdGlmIChwcml2LVxcdTAwM2VkZXZpY2VfZmxhZ3MgXFx1MDAyNiBGU0xfR0lBTkZBUl9ERVZfSEFTX1JNT04pXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2dpYW5mYXJfZXRodG9vbC5jLTE1OC1cXHRcXHRcXHRyZXR1cm4gR0ZBUl9TVEFUU19MRU47XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZ2lhbmZhcl9ldGh0b29sLmM9MjQ5PXN0YXRpYyBpbnQgZ2Zhcl9nY29hbGVzY2Uoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9naWFuZmFyX2V0aHRvb2wuYy0yNjEtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2dpYW5mYXJfZXRodG9vbC5jOjI2MjpcXHRpZiAoIShwcml2LVxcdTAwM2VkZXZpY2VfZmxhZ3MgXFx1MDAyNiBGU0xfR0lBTkZBUl9ERVZfSEFTX0NPQUxFU0NFKSlcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZ2lhbmZhcl9ldGh0b29sLmMtMjYzLVxcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9naWFuZmFyX2V0aHRvb2wuYz0yODg9c3RhdGljIGludCBnZmFyX3Njb2FsZXNjZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2dpYW5mYXJfZXRodG9vbC5jLTI5NS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZ2lhbmZhcl9ldGh0b29sLmM6Mjk2OlxcdGlmICghKHByaXYtXFx1MDAzZWRldmljZV9mbGFncyBcXHUwMDI2IEZTTF9HSUFORkFSX0RFVl9IQVNfQ09BTEVTQ0UpKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9naWFuZmFyX2V0aHRvb2wuYy0yOTctXFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2dpYW5mYXJfZXRodG9vbC5jPTE0NjU9c3RhdGljIGludCBnZmFyX2dldF90c19pbmZvKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZ2lhbmZhcl9ldGh0b29sLmMtMTQ3Mi1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZ2lhbmZhcl9ldGh0b29sLmM6MTQ3MzpcXHRpZiAoIShwcml2LVxcdTAwM2VkZXZpY2VfZmxhZ3MgXFx1MDAyNiBGU0xfR0lBTkZBUl9ERVZfSEFTX1RJTUVSKSkge1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9naWFuZmFyX2V0aHRvb2wuYy0xNDc0LVxcdFxcdGluZm8tXFx1MDAzZXNvX3RpbWVzdGFtcGluZyA9IFNPRl9USU1FU1RBTVBJTkdfVFhfU09GVFdBUkU7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI4VDIyOjQ3OjAzLjgwNDM4NDA4NloiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjM2MDQ4MTQ5MzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhpbmtpbmcsIHByZXNlbnRlZCBhcyBpZiBpdCB3ZXJlIG15IHRob3VnaHQgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byB0aGUgRnJlZXNjYWxlIEV0aGVybmV0IEtjb25maWcqKlxuXG5Pa2F5LCB0aW1lIHRvIGdldCB0byB0aGUgaGVhcnQgb2YgdGhpcy4gSSBuZWVkIHRvIHplcm8gaW4gb24gdGhlIEZyZWVzY2FsZSBFdGhlcm5ldCBkcml2ZXIgY29uZmlndXJhdGlvbi4gU3BlY2lmaWNhbGx5LCBJJ20gZ29pbmcgdG8ganVtcCBpbnRvIHRoZSBgZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL0tjb25maWdgIGZpbGUuIEknbSB0aGlua2luZyB0aGF0IGxpbmUgOTMgb3IgdGhlcmVhYm91dHMgaXMgYSBnb29kIHN0YXJ0aW5nIHBvaW50IGZvciB3aGF0ZXZlciBJJ20gdHJvdWJsZXNob290aW5nIG9yIGNvbmZpZ3VyaW5nLiBUaGF0IHBhcnRpY3VsYXIgbGluZSBpcyBsaWtlbHkgcmVsYXRlZCB0byBzb21lIGNydWNpYWwsIHByb2JhYmx5IGEga2V5IHNldHRpbmcgb3IgY29uZGl0aW9uYWwsIHJlbGF0ZWQgdG8gdGhlIGRyaXZlci4gTGV0J3Mgc2VlIHdoYXQncyB0aGVyZS4uLiBhbmQgdGhlbiBJIGNhbiBhZGp1c3QgbXkgZm9jdXMgYmFzZWQgb24gd2hhdCBJIGZpbmQuIFRoaXMgaXMgd2hlcmUgdGhlIHJlYWwgd29yayBiZWdpbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk2NTIsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yOFQyMjo0NzowNy40MDkyMDA4ODJaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MDIyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiA4MCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICA4MDpcXHRjb25maWcgVUNDX0dFVEhcXG4gIDgxOlxcdFxcdHRyaXN0YXRlIFxcXCJGcmVlc2NhbGUgUUUgR2lnYWJpdCBFdGhlcm5ldFxcXCJcXG4gIDgyOlxcdFxcdGRlcGVuZHMgb24gUVVJQ0NfRU5HSU5FIFxcdTAwMjZcXHUwMDI2IFBQQzMyXFxuICA4MzpcXHRcXHRzZWxlY3QgRlNMX1BRX01ESU9cXG4gIDg0OlxcdFxcdHNlbGVjdCBQSFlMSU5LXFxuICA4NTpcXHRcXHRoZWxwXFxuICA4NjpcXHRcXHQgIFRoaXMgZHJpdmVyIHN1cHBvcnRzIHRoZSBHaWdhYml0IEV0aGVybmV0IG1vZGUgb2YgdGhlIFFVSUNDIEVuZ2luZSxcXG4gIDg3OlxcdFxcdCAgd2hpY2ggaXMgYXZhaWxhYmxlIG9uIHNvbWUgRnJlZXNjYWxlIFNPQ3MuXFxuICA4ODpcXHRcXG4gIDg5OlxcdGNvbmZpZyBVR0VUSF9UWF9PTl9ERU1BTkRcXG4gIDkwOlxcdFxcdGJvb2wgXFxcIlRyYW5zbWl0IG9uIERlbWFuZCBzdXBwb3J0XFxcIlxcbiAgOTE6XFx0XFx0ZGVwZW5kcyBvbiBVQ0NfR0VUSFxcbiAgOTI6XFx0XFxuICA5MzpcXHRjb25maWcgR0lBTkZBUlxcbiAgOTQ6XFx0XFx0dHJpc3RhdGUgXFxcIkdpYW5mYXIgRXRoZXJuZXRcXFwiXFxuICA5NTpcXHRcXHRkZXBlbmRzIG9uIEhBU19ETUFcXG4gIDk2OlxcdFxcdHNlbGVjdCBGU0xfUFFfTURJT1xcbiAgOTc6XFx0XFx0c2VsZWN0IFBIWUxJQlxcbiAgOTg6XFx0XFx0c2VsZWN0IEZJWEVEX1BIWVxcbiAgOTk6XFx0XFx0c2VsZWN0IENSQzMyXFxuIDEwMDpcXHRcXHRoZWxwXFxuIDEwMTpcXHRcXHQgIFRoaXMgZHJpdmVyIHN1cHBvcnRzIHRoZSBHaWdhYml0IFRTRUMgb24gdGhlIE1QQzgzeHgsIE1QQzg1eHgsXFxuIDEwMjpcXHRcXHQgIGFuZCBNUEM4Nnh4IGZhbWlseSBvZiBjaGlwcywgdGhlIGVUU0VDIG9uIExTMTAyMUEgYW5kIHRoZSBGRUNcXG4gMTAzOlxcdFxcdCAgb24gdGhlIDg1NDAuXFxuIDEwNDpcXHRcXG4gMTA1OlxcdHNvdXJjZSBcXFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2RwYWEvS2NvbmZpZ1xcXCJcXG4gMTA2OlxcdHNvdXJjZSBcXFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2RwYWEyL0tjb25maWdcXFwiXFxuIDEwNzpcXHRzb3VyY2UgXFxcImRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9LY29uZmlnXFxcIlxcbiAxMDg6XFx0XFxuIDEwOTpcXHRlbmRpZiAjIE5FVF9WRU5ET1JfRlJFRVNDQUxFXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI4VDIyOjQ3OjA3LjQwOTI2Mjg1MloiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjY0MzkwMTA4OTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBgZ2lhbmZhcmAgRHJpdmVyKipcblxuT2theSwgbGV0J3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBgZ2lhbmZhcmAgaW50ZXJhY3RzIHdpdGggdGhlIGhhcmR3YXJlLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZmlndXJlIG91dCB0aGUgYmluZGluZyBtZWNoYW5pc20uIElzIGl0IGEgcGxhdGZvcm0gZHJpdmVyLCByZWx5aW5nIG9uIERldmljZSBUcmVlIGluZm9ybWF0aW9uLCBvciBwZXJoYXBzIHV0aWxpemluZyBQQ0kgY29uZmlndXJhdGlvbj8gSSBuZWVkIHRvIHF1aWNrbHkgaWRlbnRpZnkgdGhlIGFwcHJvYWNoLlxuXG5NeSBuZXh0IHN0ZXAgaXMgY2xlYXI6IEknbGwgZGl2ZSBpbnRvIHRoZSBgZ2lhbmZhci5jYCBzb3VyY2UgY29kZS4gSSdsbCB6ZXJvIGluIG9uIHRoZSB1c3VhbCBzdXNwZWN0cyDigJMgc3BlY2lmaWNhbGx5LCB0aGUgYXJlYSBhcm91bmQgYG1vZHVsZV9wbGF0Zm9ybV9kcml2ZXJgIGlmIGl0J3MgYSBwbGF0Zm9ybSBkcml2ZXIsIG9yIHRoZSBwcm9iZSBmdW5jdGlvbiBpdHNlbGYsIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCB1c2VzIERldmljZSBUcmVlIGJpbmRpbmdzLCBQQ0ksIG9yIHNvbWUgb3RoZXIgbWVjaGFuaXNtLiBUaGF0J3MgdGhlIGtleSB0byB1bmRlcnN0YW5kaW5nIGhvdyB0aGlzIGRyaXZlciByZWdpc3RlcnMgaXRzZWxmIGFuZCBpbml0aWFsaXplcyB0aGUgaGFyZHdhcmUuIEkga25vdyBvbmNlIEkgbG9jYXRlIHRoZSByaWdodCBlbnRyeSBwb2ludHMsIHRoZSByZXN0IHdpbGwgZm9sbG93LiBJJ2xsIGZpbmQgbXkgd2F5IGluIHF1aWNrbHkhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwMzIyLCJPdXRwdXRUb2tlbnMiOjQzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDksIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yOFQyMjo0NzoxMy44NDgyNzU5NjdaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDU1NTQ1OTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibW9kdWxlX3BsYXRmb3JtX2RyaXZlcnxwbGF0Zm9ybV9kcml2ZXJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2dpYW5mYXIuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZ2lhbmZhci5jPTM2MTE9TU9EVUxFX0RFVklDRV9UQUJMRShvZiwgZ2Zhcl9tYXRjaCk7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZ2lhbmZhci5jLTM2MTMtLyogU3RydWN0dXJlIGZvciBhIGRldmljZSBkcml2ZXIgKi9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZ2lhbmZhci5jOjM2MTQ6c3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgZ2Zhcl9kcml2ZXIgPSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2dpYW5mYXIuYy0zNjE1LVxcdC5kcml2ZXIgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZ2lhbmZhci5jLTM2MjMtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2dpYW5mYXIuYzozNjI0Om1vZHVsZV9wbGF0Zm9ybV9kcml2ZXIoZ2Zhcl9kcml2ZXIpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOFQyMjo0NzoxMy44OTM4MzUzMjVaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozNzc1NTI4MjU5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGFzIGlmIHRoZXkncmUgbXkgb3duOlxuXG4qKkFuYWx5emluZyB0aGUgYGdmYXJfbWF0Y2hgIEZ1bmN0aW9uJ3MgQmVoYXZpb3IqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBNeSBpbml0aWFsIHRob3VnaHQgcHJvY2VzcyBpcyBzdHJhaWdodGZvcndhcmQ6IEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhlIGBnZmFyX21hdGNoYCBmdW5jdGlvbiBpcyAqYWN0dWFsbHkqIGRvaW5nLiBJJ20gbm90IGdvaW5nIHRvIGFwcHJvYWNoIHRoaXMgd2l0aCBibGluZCBmYWl0aCwgYXNzdW1pbmcgaXQncyBwZXJmZWN0bHkgaW1wbGVtZW50ZWQgb3IgZG9lcyBleGFjdGx5IHdoYXQgaXRzIG5hbWUgc3VnZ2VzdHMuIE15IGZpcnN0IHN0ZXAgaXMgdG8gdHJlYXQgaXQgYXMgYSBibGFjayBib3ggYW5kIHBlZWsgaW5zaWRlLiBJIHdhbnQgYSBjbGVhciBwaWN0dXJlIG9mIGl0cyBpbnB1dHMsIG91dHB1dHMsIGFuZCwgbW9zdCBpbXBvcnRhbnRseSwgdGhlIGNyaXRlcmlhIGFnYWluc3Qgd2hpY2ggaXQncyBtYWtpbmcgaXRzIG1hdGNoZXMuIEknbSBnb2luZyB0byBsb29rIGF0IHRoZSBkYXRhIGJlaW5nIGZlZCBpbnRvIGl0IHRvIGZpZ3VyZSBvdXQgd2hhdCBpdCdzIGNvbXBhcmluZyBhZ2FpbnN0LiBJJ20gYWxyZWFkeSBhbnRpY2lwYXRpbmcgdGhhdCB0aGUgcmVzdWx0cyB3aWxsIGluZm9ybSBtZSBhYm91dCBob3cgcm9idXN0IHRoZSBvdmVyYWxsIHN5c3RlbSBpcy4gVW5kZXJzdGFuZGluZyB0aGVzZSBmb3VuZGF0aW9uYWwgbWVjaGFuaWNzIGlzIGNyaXRpY2FsIGZvciBtZSB0byBtYWtlIGFueSBzZW5zaWJsZSBhc3Nlc3NtZW50IGFib3V0IHRoaXMgcHJvZ3JhbS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA3OTIsIk91dHB1dFRva2VucyI6NDMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yOFQyMjo0NzoxNy42NjkzNjY1NDRaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQyMTgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9naWFuZmFyLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMzU5MCxcbiAgXCJMaW5lQ291bnRcIjogMzVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMzU5MDpcXHR9O1xcbjM1OTE6XFx0XFxuMzU5MjpcXHQjZGVmaW5lIEdGQVJfUE1fT1BTIChcXHUwMDI2Z2Zhcl9wbV9vcHMpXFxuMzU5MzpcXHRcXG4zNTk0OlxcdCNlbHNlXFxuMzU5NTpcXHRcXG4zNTk2OlxcdCNkZWZpbmUgR0ZBUl9QTV9PUFMgTlVMTFxcbjM1OTc6XFx0XFxuMzU5ODpcXHQjZW5kaWZcXG4zNTk5OlxcdFxcbjM2MDA6XFx0c3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgZ2Zhcl9tYXRjaFtdID1cXG4zNjAxOlxcdHtcXG4zNjAyOlxcdFxcdHtcXG4zNjAzOlxcdFxcdFxcdC50eXBlID0gXFxcIm5ldHdvcmtcXFwiLFxcbjM2MDQ6XFx0XFx0XFx0LmNvbXBhdGlibGUgPSBcXFwiZ2lhbmZhclxcXCIsXFxuMzYwNTpcXHRcXHR9LFxcbjM2MDY6XFx0XFx0e1xcbjM2MDc6XFx0XFx0XFx0LmNvbXBhdGlibGUgPSBcXFwiZnNsLGV0c2VjMlxcXCIsXFxuMzYwODpcXHRcXHR9LFxcbjM2MDk6XFx0XFx0e30sXFxuMzYxMDpcXHR9O1xcbjM2MTE6XFx0TU9EVUxFX0RFVklDRV9UQUJMRShvZiwgZ2Zhcl9tYXRjaCk7XFxuMzYxMjpcXHRcXG4zNjEzOlxcdC8qIFN0cnVjdHVyZSBmb3IgYSBkZXZpY2UgZHJpdmVyICovXFxuMzYxNDpcXHRzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBnZmFyX2RyaXZlciA9IHtcXG4zNjE1OlxcdFxcdC5kcml2ZXIgPSB7XFxuMzYxNjpcXHRcXHRcXHQubmFtZSA9IFxcXCJmc2wtZ2lhbmZhclxcXCIsXFxuMzYxNzpcXHRcXHRcXHQucG0gPSBHRkFSX1BNX09QUyxcXG4zNjE4OlxcdFxcdFxcdC5vZl9tYXRjaF90YWJsZSA9IGdmYXJfbWF0Y2gsXFxuMzYxOTpcXHRcXHR9LFxcbjM2MjA6XFx0XFx0LnByb2JlID0gZ2Zhcl9wcm9iZSxcXG4zNjIxOlxcdFxcdC5yZW1vdmUgPSBnZmFyX3JlbW92ZSxcXG4zNjIyOlxcdH07XFxuMzYyMzpcXHRcXG4zNjI0OlxcdG1vZHVsZV9wbGF0Zm9ybV9kcml2ZXIoZ2Zhcl9kcml2ZXIpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOFQyMjo0NzoxNy42Njk1MTE4OTRaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTE4NTg5NDE1NDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiBgZ2lhbmZhcmAncyBGdXp6aW5nIFBvdGVudGlhbCoqXG5cbk9rYXksIHNvIGBnaWFuZmFyYCBpcyBhIHBsYXRmb3JtIGRyaXZlciBmb3IgdGhvc2UgRnJlZXNjYWxlIGV0aGVybmV0IGNvbnRyb2xsZXJzLCBUU0VDL2VUU0VDLCBvbiBQb3dlclBDIGFuZCBzb21lIEFSTSBTb0NzLiBUaGUgaW1tZWRpYXRlIHF1ZXN0aW9uIGlzLCBjYW4gSSBldmVuIGdldCBhdCB0aGlzIHRoaW5nIGluIGEgdHlwaWNhbCBmdXp6aW5nIGVudmlyb25tZW50PyBDYW4gSSByZWFjaCB0aGlzIGhhcmR3YXJlLCBvciBpcyBpdCBzcGVjaWZpYyBTb0MgLyBib2FyZCBoYXJkd2FyZSB0aGF0IGNhbid0IGJlIHJlYWNoZWQgaW4gc3RhbmRhcmQgUUVNVSBvciBHQ0UsIG9yIGEgc3RhbmRhcmQgZnV6emluZyBzZXR1cD8gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgaXQncyBzb21ldGhpbmcgSSBjYW4gYWN0dWFsbHkgcHJvYmUuXG5cbkxldCBtZSByZS1leGFtaW5lIHRoZSBjcml0ZXJpYS4gVGhlIGluc3RydWN0aW9ucyBzYXkgdG8gYmFpbCBvdXQgaWYgdGhlIGNoYW5nZXMgYXJlIGxpbWl0ZWQgdG8gc3R1ZmYgdGhhdCdzICppbXBvc3NpYmxlKiB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuIFRoYXQgaW5jbHVkZXMgdGhpbmdzIGxpa2UgdmVuZG9yLXNwZWNpZmljIFBDSWUgc3R1ZmYgdGhhdCByZXF1aXJlcyBwaHlzaWNhbCBoYXJkd2FyZSwgZHJpdmVyIHRlYXJkb3duIGNvZGUgdGhhdCBvbmx5IHJ1bnMgb24gaG90LXVucGx1Zywgb3Igb3RoZXIgdW5yZWFjaGFibGUgY29kZSBwYXRocy5cblxuVGhlIGtleSBxdWVzdGlvbiBpczogZG9lcyBRRU1VIGVtdWxhdGUgdGhlIGBnaWFuZmFyYCBoYXJkd2FyZSwgb3IgZXZlbiBzb21ldGhpbmcgc2ltaWxhciBsaWtlIGVUU0VDPyBJIG5lZWQgdG8gY2hlY2suIEFoYSEgSXQgbG9va3MgbGlrZSB0aGVyZSdzIGBody9uZXQvZnNsX2V0c2VjL2AgaW4gUUVNVS4gU3BlY2lmaWNhbGx5LCBgZXRzZWMuY2AgaXMgdGhlcmUgZm9yIGBtcGM4NTQ0ZHNgIGFuZCBgcHBjZTUwMGAgbWFjaGluZXMhIEJ1dCBpcyB0aGlzIGFjdHVhbGx5ICpyZWFjaGFibGUqIGluIGEgc3RhbmRhcmQgc3l6a2FsbGVyIG9yIExpbnV4IGZ1enppbmcgc2V0dXAsIGZvciB4ODZfNjQgb3IgYXJtNjQ/IE9yIGNhbiBJIGNyZWF0ZSB0aGVzZSBwbGF0Zm9ybSBkZXZpY2VzIHRocm91Z2ggT0Ygb3ZlcmxheXMsIGNvbmZpZ2ZzLCBldGMuPyBDYW4gSSBnZXQgYXQgdGhlbSB0aHJvdWdoIE9GIG1hdGNoIHRhYmxlcyBpbiB4ODYvYXJtNjQgZXZlbiB3aXRob3V0IHRoZSBkZXZpY2UgdHJlZSBub2RlIGJlaW5nIGF2YWlsYWJsZT9cblxuU3l6a2FsbGVyIHR5cGljYWxseSB1c2VzIHg4Nl82NCwgYXJtNjQsIG9yIGd2aXNvci9HQ0UvUUVNVSBWTXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBwbGF0Zm9ybSBkZXZpY2VzIG9yIE9GIGRldmljZXMgYXJlIGhhbmRsZWQgaW4gdGhvc2UgZnV6emluZyBlbnZpcm9ubWVudHMuIEFyZSBwbGF0Zm9ybSBkcml2ZXJzIGZvciBzcGVjaWZpYyBlbWJlZGRlZCBTb0NzIGdlbmVyYWxseSBjb25zaWRlcmVkIHVucmVhY2hhYmxlPyBPciBhcmUgdGhleSBzb21ldGltZXMgcmVhY2hhYmxlPyBJIG5lZWQgdG8gY2hlY2sgdGhlIHBhc3QgZXZhbHVhdGlvbiBjcml0ZXJpYSB0byB1bmRlcnN0YW5kIGhvdyB0aGVzZSBkcml2ZXJzIGFyZSB0cmVhdGVkLlxuXG5DYW4gSSBldmVuIGluc3RhbnRpYXRlIGBnaWFuZmFyYCBpbiB4ODZfNjQ/IE5vLCBiZWNhdXNlIGl0IGxvb2tzIGxpa2UgYGdpYW5mYXJgIHJlbGllcyBvbiBPRiAoZGV2aWNlIHRyZWUgd2l0aCBgb2ZfbWF0Y2hfdGFibGUgPSBnZmFyX21hdGNoYCkuIFRoZSBgZ2Zhcl9wcm9iZWAgZnVuY3Rpb24gZ2V0cyBjYWxsZWQgZm9yIHRoZXNlIGRldmljZXMsIGFuZCBpdCBjYWxscyBgZ2Zhcl9vZl9pbml0YC4gSW5zaWRlIGBnZmFyX29mX2luaXRgIGl0IHB1bGxzIHRoZSBkZXZpY2Ugbm9kZSBmcm9tIHRoZSBgcGxhdGZvcm1fZGV2aWNlYDogYHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAgPSBvZmRldi1cdTAwM2VkZXYub2Zfbm9kZTtgLiAgSWYgdGhhdCdzIG5vdCB0aGVyZSBpdCByZXR1cm5zIGFuIGVycm9yLiBJIG5lZWQgdG8gbG9vayBjbG9zZXIgYXQgYGdmYXJfcHJvYmVgIGFuZCBgZ2Zhcl9vZl9pbml0YCB0byBmaWd1cmUgb3V0IGlmIEkgY2FuIGdldCBwYXN0IHRoYXQgZGV2aWNlIHRyZWUgZGVwZW5kZW5jeS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE0ODUsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3MjYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yOFQyMjo0NzoyOS41Mjg0NTYxMzhaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0ODk1NTQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImdmYXJfb2ZfaW5pdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZ2lhbmZhci5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9naWFuZmFyLmM9NTc4PXN0YXRpYyBwaHlfaW50ZXJmYWNlX3QgZ2Zhcl9nZXRfaW50ZXJmYWNlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZ2lhbmZhci5jLTYxOC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZ2lhbmZhci5jOjYxOTpzdGF0aWMgaW50IGdmYXJfb2ZfaW5pdChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpvZmRldiwgc3RydWN0IG5ldF9kZXZpY2UgKipwZGV2KVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9naWFuZmFyLmMtNjIwLXtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9naWFuZmFyLmM9MzE3NT1zdGF0aWMgaW50IGdmYXJfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqb2ZkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZ2lhbmZhci5jLTMxODEtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2dpYW5mYXIuYzozMTgyOlxcdGVyciA9IGdmYXJfb2ZfaW5pdChvZmRldiwgXFx1MDAyNmRldik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2dpYW5mYXIuYy0zMTgzLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOFQyMjo0NzoyOS41NzMzNTgwNDZaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTg5OTk4NTM5OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUncyBteSB0YWtlIG9uIHRob3NlIGluc3RydWN0aW9ucywgYXMgdGhvdWdoIHRoZXkgYXJlIG15IGludGVybmFsIHRob3VnaHQgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byB0aGUgR2lhbmZhciBJbml0aWFsaXphdGlvbioqXG5cbkFscmlnaHQsIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJJ3ZlIGdvdCBhIHByb2plY3Qgb24gbXkgcGxhdGUgdGhhdCBpbnZvbHZlcyB0aGUgR2lhbmZhciBFdGhlcm5ldCBkcml2ZXIsIGFuZCB0byB0cnVseSB1bmRlcnN0YW5kIHdoYXQncyBnb2luZyBvbiwgSSBuZWVkIHRvIHN0YXJ0IGF0IHRoZSBiZWdpbm5pbmcuIFRoYXQgbWVhbnMgY3JhY2tpbmcgb3BlbiB0aGUgYGdpYW5mYXIuY2AgZmlsZSBpbiB0aGUgYGRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZWAgZGlyZWN0b3J5LiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbml0aWFsIHNldHVwIG9mIHRoZSBkcml2ZXIsIHNvIEknbSBoZWFkaW5nIGRpcmVjdGx5IHRvIHRoZSBgZ2Zhcl9vZl9pbml0YCBmdW5jdGlvbi4gSSBrbm93IHRoaXMgaXMgYSBjcml0aWNhbCBwYXJ0LCBsaWtlbHkgd2hlcmUgdGhlIGRldmljZSB0cmVlIGluZm9ybWF0aW9uIGlzIHBhcnNlZCBhbmQgdGhlIGhhcmR3YXJlIGlzIGJyb3VnaHQgb25saW5lLiBUaW1lIHRvIHNlZSB3aGF0IG1hZ2ljIEZyZWVzY2FsZSBoYXMgYmFrZWQgaW50byB0aGlzIGNvZGUuIFRoaXMgd2lsbCBiZSB0aGUgZm91bmRhdGlvbmFsIHN0YXJ0aW5nIHBvaW50LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzA5NSwiT3V0cHV0VG9rZW5zIjo0MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI4VDIyOjQ3OjMxLjQ3MzM0NjM2NVoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDQ5ODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2dpYW5mYXIuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA2MTgsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA2MTg6XFx0XFxuIDYxOTpcXHRzdGF0aWMgaW50IGdmYXJfb2ZfaW5pdChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpvZmRldiwgc3RydWN0IG5ldF9kZXZpY2UgKipwZGV2KVxcbiA2MjA6XFx0e1xcbiA2MjE6XFx0XFx0Y29uc3QgY2hhciAqbW9kZWw7XFxuIDYyMjpcXHRcXHRpbnQgZXJyID0gMCwgaSwgajtcXG4gNjIzOlxcdFxcdHBoeV9pbnRlcmZhY2VfdCBpbnRlcmZhY2U7XFxuIDYyNDpcXHRcXHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gTlVMTDtcXG4gNjI1OlxcdFxcdHN0cnVjdCBnZmFyX3ByaXZhdGUgKnByaXYgPSBOVUxMO1xcbiA2MjY6XFx0XFx0c3RydWN0IGRldmljZV9ub2RlICpucCA9IG9mZGV2LVxcdTAwM2VkZXYub2Zfbm9kZTtcXG4gNjI3OlxcdFxcdHN0cnVjdCBkZXZpY2Vfbm9kZSAqY2hpbGQgPSBOVUxMO1xcbiA2Mjg6XFx0XFx0dTMyIHN0YXNoX2xlbiA9IDA7XFxuIDYyOTpcXHRcXHR1MzIgc3Rhc2hfaWR4ID0gMDtcXG4gNjMwOlxcdFxcdHVuc2lnbmVkIGludCBudW1fdHhfcXMsIG51bV9yeF9xcztcXG4gNjMxOlxcdFxcdHVuc2lnbmVkIHNob3J0IG1vZGU7XFxuIDYzMjpcXHRcXG4gNjMzOlxcdFxcdGlmICghbnApXFxuIDYzNDpcXHRcXHRcXHRyZXR1cm4gLUVOT0RFVjtcXG4gNjM1OlxcdFxcbiA2MzY6XFx0XFx0aWYgKG9mX2RldmljZV9pc19jb21wYXRpYmxlKG5wLCBcXFwiZnNsLGV0c2VjMlxcXCIpKVxcbiA2Mzc6XFx0XFx0XFx0bW9kZSA9IE1RX01HX01PREU7XFxuIDYzODpcXHRcXHRlbHNlXFxuIDYzOTpcXHRcXHRcXHRtb2RlID0gU1FfU0dfTU9ERTtcXG4gNjQwOlxcdFxcbiA2NDE6XFx0XFx0aWYgKG1vZGUgPT0gU1FfU0dfTU9ERSkge1xcbiA2NDI6XFx0XFx0XFx0bnVtX3R4X3FzID0gMTtcXG4gNjQzOlxcdFxcdFxcdG51bV9yeF9xcyA9IDE7XFxuIDY0NDpcXHRcXHR9IGVsc2UgeyAvKiBNUV9NR19NT0RFICovXFxuIDY0NTpcXHRcXHRcXHQvKiBnZXQgdGhlIGFjdHVhbCBudW1iZXIgb2Ygc3VwcG9ydGVkIGdyb3VwcyAqL1xcbiA2NDY6XFx0XFx0XFx0dW5zaWduZWQgaW50IG51bV9ncnBzO1xcbiA2NDc6XFx0XFxuIDY0ODpcXHRcXHRcXHRudW1fZ3JwcyA9IGRldmljZV9nZXRfbmFtZWRfY2hpbGRfbm9kZV9jb3VudChcXHUwMDI2b2ZkZXYtXFx1MDAzZWRldixcXG4gNjQ5OlxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICAgXFxcInF1ZXVlLWdyb3VwXFxcIik7XFxuIDY1MDpcXHRcXHRcXHRpZiAobnVtX2dycHMgPT0gMCB8fCBudW1fZ3JwcyBcXHUwMDNlIE1BWEdST1VQUykge1xcbiA2NTE6XFx0XFx0XFx0XFx0ZGV2X2VycihcXHUwMDI2b2ZkZXYtXFx1MDAzZWRldiwgXFxcIkludmFsaWQgIyBvZiBpbnQgZ3JvdXBzKCVkKVxcXFxuXFxcIixcXG4gNjUyOlxcdFxcdFxcdFxcdFxcdG51bV9ncnBzKTtcXG4gNjUzOlxcdFxcdFxcdFxcdHByX2VycihcXFwiQ2Fubm90IGRvIGFsbG9jX2V0aGVyZGV2LCBhYm9ydGluZ1xcXFxuXFxcIik7XFxuIDY1NDpcXHRcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gNjU1OlxcdFxcdFxcdH1cXG4gNjU2OlxcdFxcbiA2NTc6XFx0XFx0XFx0bnVtX3R4X3FzID0gbnVtX2dycHM7IC8qIG9uZSB0eHEgcGVyIGludCBncm91cCAqL1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOFQyMjo0NzozMS40NzM0OTI5ODVaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6ODYzMDE4OTExMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXNpcyBvZiB0aGUgR2lhbmZhciBEcml2ZXIgUGF0Y2ggZm9yIEZ1enppbmcgU3VpdGFiaWxpdHkqKlxuXG5Pa2F5LCBzbyBJJ20gZGl2aW5nIGludG8gdGhpcyBwYXRjaC4gVGhlIGtleSBpcyB1bmRlcnN0YW5kaW5nIGlmIHRoZXNlIGNoYW5nZXMgYXJlIGV2ZW4gKnJlYWNoYWJsZSogaW4gYSBzdGFuZGFyZCBmdXp6aW5nIHNldHVwLiBMZXQncyBzdGFydCB3aXRoIHRoZSBkcml2ZXIgaXRzZWxmLiBJdCdzIHRoZSBgZ2lhbmZhcmAgZHJpdmVyLiBJIG5lZWQgdG8gZmlndXJlIG91dCBpdHMgZGVwZW5kZW5jaWVzLiBJdCBuZWVkcyBkZXZpY2UgdHJlZSBub2RlcywgaW50ZXJydXB0cywgYSBQSFksIE1ESU8sIHJlZ2lzdGVyIG1hcHBpbmdzLCBhbmQgdGhlIHVzdWFsIHN1c3BlY3RzLiBMb29rcyBsaWtlIGl0J3MgYnVpbHQgZm9yIEZyZWVzY2FsZSBQb3dlclBDIChNUEM4M3h4LCBNUEM4NXh4LCBNUEM4Nnh4KSBvciBBUk0gTFMxMDIxQSBTb0NzLlxuXG5Ob3cgdGhlIHF1ZXN0aW9uIGlzIHdoZXRoZXIgU3l6a2FsbGVyIGFuZCBvdGhlciBmdXp6aW5nIHRvb2xzIGNvbW1vbmx5IHJ1biBvbiBGcmVlc2NhbGUgaGFyZHdhcmUsIG9yIGRvZXMgaXQgcmVxdWlyZSBzb21lIGN1c3RvbSBkZXZpY2UgdHJlZSBvciBzcGVjaWZpYyBoYXJkd2FyZT8gVGhlbiBJIG5lZWQgdG8gZG91YmxlLWNoZWNrIHRoZSBmdXp6aW5nIGd1aWRlbGluZXMuIFRob3NlIGd1aWRlbGluZXMgZXhwbGljaXRseSB0ZWxsIG1lIHdoZW4gYSBwYXRjaCBpc24ndCB3b3J0aCBmdXp6aW5nLiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoaXMgZG9lc24ndCBmYWxsIGludG8gdGhlIGNhdGVnb3J5IG9mIFwidW5yZWFjaGFibGUgY29kZSBwYXRocy5cIiBJIHNob3VsZCBhbHNvIHJlLWNoZWNrIGFsbCB0aGUgcnVsZXMuIEl0IHNheXMgXCJDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmVcIi4gVGhhdCdzIHdoYXQgSSdtIGxvb2tpbmcgZm9yLiBXaGF0IGFib3V0IGVtYmVkZGVkIFNvQ3MgYW5kIHBsYXRmb3JtIGRyaXZlcnM/IENhbiB0aGUgR2lhbmZhciBkcml2ZXIgYmUgcHJvYmVkLCBvciBpcyBpdCBwcmVzZW50IG9uIHg4Nl82NCBvciBBUk02NCB2aXJ0dWFsIG1hY2hpbmVzP1xuXG5JbiBzdGFuZGFyZCBRRU1VL0dDRSBlbnZpcm9ubWVudHMsIFwiZ2lhbmZhclwiIGlzIHNwZWNpZmljIHRvIEZyZWVzY2FsZS4gVGhlc2UgYXJlbid0IHJlYWNoYWJsZS4gR2lhbmZhciBpcyBhYnNlbnQgaW4geDg2XzY0IG9yIGFybTY0IHZpcnQgbWFjaGluZXMgYmVjYXVzZSBpdCdzIGEgcGxhdGZvcm0gZHJpdmVyLCB1c2luZyBkZXZpY2UgdHJlZSBtYXRjaGluZy4gSXQgcmVxdWlyZXMgTU1JTyByZWdpc3RlcnMsIGludGVycnVwdHMsIFBIWXMuIEkgbmVlZCB0byBjb25zaWRlciwgZG9lcyBmdXp6aW5nIGV2ZW4gdXNlIFBvd2VyUEMgb3IgTFMxMDIxQT8gU3l6a2FsbGVyIGZ1enplcyB4ODZfNjQgYW5kIGFybTY0IGluIFFFTVUvR0NFIGluc3RhbmNlcywgc28gdGhlc2UgYXJlIHByb2JhYmx5IHVucmVhY2hhYmxlLiBFdmVuIGlmIHNvbWVvbmUgY29tcGlsZWQgdGhlIGBDT05GSUdfR0lBTkZBUmAgb3B0aW9uIG9uIHg4Nl82NCAoaXQgb25seSBkZXBlbmRzIG9uIEhBU19ETUEpIGNhbiBpdCBldmVyIGJlIHByb2JlZD8gSW4geDg2XzY0LCBBQ1BJLCBhbmQgc3RhbmRhcmQgUUVNVSwgdGhlcmUgaXMgbm8gT0YgZGV2aWNlIHRyZWUgbm9kZSBtYXRjaGluZyBcImdpYW5mYXJcIiBvciBcImZzbCxldHNlYzJcIi4gRXZlbiB3aXRoIGFuIE9GIG92ZXJsYXksIGBnZmFyX3Byb2JlYCBzdGlsbCBkZW1hbmRzIHJlZ2lzdGVycywgSVJRcywgUEhZIGJ1cywgZXRjLiBXaXRob3V0IHRoZSBoYXJkd2FyZSwgdGhlIHByb2JlIHdpbGwgZmFpbCwgb3IgbmV2ZXIgZXZlbiBiZSBjYWxsZWQuIENvbnNlcXVlbnRseSwgYGZyZWVfc2tiX3Jlc291cmNlc2AsIGBnZmFyX2NoYW5nZV9tdHVgLCBgcmVzZXRfZ2ZhcmAsIGFuZCBgZ2Zhcl9od3RzdGFtcF9zZXRgIGNhbiBORVZFUiBiZSBjYWxsZWQuXG5cbk9rYXksIGxldCdzIGxvb2sgYXQgdGhlIHBhdGNoIGNoYW5nZXMgaW4gbW9yZSBkZXRhaWwgaW4gYGdpYW5mYXIuY2AuIEl0IGhhcyB0aGVzZSBzcGVjaWZpYyBjaGFuZ2VzLiAxLiBgZnJlZV9za2JfcmVzb3VyY2VzYCBhZGRzIGEgY2hlY2ssIGFuZCB6ZXJvZXMgb3V0IHNvbWUgcG9pbnRlcnMuIDIuIGBnZmFyX2NoYW5nZV9tdHVgIGNhcHR1cmVzIGFuIGVycm9yIGFuZCByZXR1cm5zIGl0LiAzLiBgcmVzZXRfZ2ZhcmAgY2hhbmdlcyB0aGUgcmV0dXJuIHR5cGUgdG8gYGludGAsIGFuZCByZXR1cm5zIGFuIGVycm9yIGNvZGUgZnJvbSBgc3RhcnR1cF9nZmFyYC4gNC4gYGdmYXJfaHd0c3RhbXBfc2V0YCByZXR1cm5zIHRoZSByZXN1bHQgZnJvbSBgcmVzZXRfZ2ZhcmAgaW5zdGVhZCBvZiB6ZXJvLlxuXG5BbGwgb2YgdGhlc2UgY2hhbmdlcyBhcmUgbG9jYXRlZCBpbiB0aGUgYGRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9naWFuZmFyLmNgIGZpbGUuIFRoaXMgZHJpdmVyIGlzIGEgcGxhdGZvcm0gZHJpdmVyIHNwZWNpZmljYWxseSBmb3IgRnJlZXNjYWxlIE1QQzgzeHgsIE1QQzg1eHgsIE1QQzg2eHgsIGFuZCBMUzEwMjFBIG5ldHdvcmsgY29udHJvbGxlcnMuIFRoaXMgcmVxdWlyZXMgZGVkaWNhdGVkIGhhcmR3YXJlLCBkZXZpY2UgdHJlZSBiaW5kaW5ncywgYW5kIGl0J3Mgbm90IHBvc3NpYmxlIHRvIHJ1biBvciByZWFjaCBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBmdXp6aW5nIGVudmlyb25tZW50cyAoUUVNVS9HQ0UpLlxuXG5UaGVyZWZvcmUsIHRoaXMgcGF0Y2ggZml0cyBkaXJlY3RseSBpbnRvIHRoZSBndWlkZWxpbmU6IFwiQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLCBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlXCIuXG5cblNvLCBsZXQncyBzdW1tYXJpemU6XG4tICAgV29ydGhGdXp6aW5nOiBmYWxzZVxuLSAgIEZvY3VzU3ltYm9sczogW11cbi0gICBFbmFibGVDb25maWdzOiBbXVxuLSAgIFJlYXNvbmluZzogQWxsIHRoZSBjaGFuZ2VzIGFyZSBpbiB0aGUgYGdpYW5mYXJgIGV0aGVybmV0IGRyaXZlciBmb3IgRnJlZXNjYWxlIFNvQ3MgKFBvd2VyUEMgTVBDODN4eC84NXh4Lzg2eHgsIEFSTSBMUzEwMjFBKS4gVGhpcyBpcyBhbiBPRiBwbGF0Zm9ybSBkcml2ZXIsIHJlcXVpcmluZyBkZWRpY2F0ZWQgU29DIGhhcmR3YXJlLiBTbywgaXQncyBub3QgYXZhaWxhYmxlIG9yIHByb2JlYWJsZSBpbiBzdGFuZGFyZCBRRU1VL0dDRSB2aXJ0dWFsaXplZCBmdXp6aW5nIGVudmlyb25tZW50cy5cblxuSSdtIHJlYWR5IHRvIGNhbGwgdGhlIGBzZXQtcmVzdWx0c2AgdG9vbCBub3cuIEV2ZXJ5dGhpbmcgY2hlY2tzIG91dC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM5OTAsIk91dHB1dFRva2VucyI6MTIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTM0MCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI4VDIyOjQ3OjQwLjEwMzY4Mzg5N1oiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI1MjQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIGNoYW5nZXMgYXJlIGlzb2xhdGVkIHRvIGRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9naWFuZmFyLmMsIHdoaWNoIGlzIGEgcGxhdGZvcm0gZHJpdmVyIGZvciBGcmVlc2NhbGUvTlhQIFNvQ3MgKFBvd2VyUEMgTVBDODN4eC84NXh4Lzg2eHggYW5kIEFSTSBMUzEwMjFBKS4gSXQgcmVxdWlyZXMgc3BlY2lmaWMgRGV2aWNlIFRyZWUgbm9kZXMgYW5kIHBoeXNpY2FsIFNvQyBoYXJkd2FyZSwgbWFraW5nIGl0IGltcG9zc2libGUgdG8gcHJvYmUgYW5kIHJlYWNoIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGZ1enppbmcgZW52aXJvbm1lbnRzIHN1Y2ggYXMgUUVNVSBvciBHQ0UuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBjaGFuZ2VzIGFyZSBpc29sYXRlZCB0byBkcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZ2lhbmZhci5jLCB3aGljaCBpcyBhIHBsYXRmb3JtIGRyaXZlciBmb3IgRnJlZXNjYWxlL05YUCBTb0NzIChQb3dlclBDIE1QQzgzeHgvODV4eC84Nnh4IGFuZCBBUk0gTFMxMDIxQSkuIEl0IHJlcXVpcmVzIHNwZWNpZmljIERldmljZSBUcmVlIG5vZGVzIGFuZCBwaHlzaWNhbCBTb0MgaGFyZHdhcmUsIG1ha2luZyBpdCBpbXBvc3NpYmxlIHRvIHByb2JlIGFuZCByZWFjaCBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBmdXp6aW5nIGVudmlyb25tZW50cyBzdWNoIGFzIFFFTVUgb3IgR0NFLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjhUMjI6NDc6NDAuMTAzNzEyMTQ3WiIsIlNlcSI6MTcsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyODMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowqpkwx[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-28 22:31:50 +0000 UTC FinishedAt: 2026-08-28 22:47:40 +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+CgkJCTx0ZD4yMDI2LzA4LzI4IDIyOjQ2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgY2hhbmdlcyBhcmUgaXNvbGF0ZWQgdG8gZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2dpYW5mYXIuYywgd2hpY2ggaXMgYSBwbGF0Zm9ybSBkcml2ZXIgZm9yIEZyZWVzY2FsZS9OWFAgU29DcyAoUG93ZXJQQyBNUEM4M3h4Lzg1eHgvODZ4eCBhbmQgQVJNIExTMTAyMUEpLiBJdCByZXF1aXJlcyBzcGVjaWZpYyBEZXZpY2UgVHJlZSBub2RlcyBhbmQgcGh5c2ljYWwgU29DIGhhcmR3YXJlLCBtYWtpbmcgaXQgaW1wb3NzaWJsZSB0byBwcm9iZSBhbmQgcmVhY2ggaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZnV6emluZyBlbnZpcm9ubWVudHMgc3VjaCBhcyBRRU1VIG9yIEdDRS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjggMjI6NDY8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCAzZDhlMDRmOTE2MGIxZTZiZjAzYWExMWQzNTI0YjlmYmIwNjdmNWQzXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBBdWcgMjggMjI6NDY6NTcgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2dpYW5mYXIuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9naWFuZmFyLmNcbmluZGV4IGNmNjM2ZmM1YWFmYWMuLmQwYWM4YTk1ODY5NmQgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZ2lhbmZhci5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZ2lhbmZhci5jXG5AQCAtMTE0MCwxMSAmIzQzOzExNDAsMjQgQEAgc3RhdGljIHZvaWQgZnJlZV9za2JfcmVzb3VyY2VzKHN0cnVjdCBnZmFyX3ByaXZhdGUgKnByaXYpXG4gXHRcdFx0ZnJlZV9za2JfcnhfcXVldWUocnhfcXVldWUpO1xuIFx0fVxuIFxuLVx0ZG1hX2ZyZWVfY29oZXJlbnQocHJpdi1cdTAwM2VkZXYsXG4tXHRcdFx0ICBzaXplb2Yoc3RydWN0IHR4YmQ4KSAqIHByaXYtXHUwMDNldG90YWxfdHhfcmluZ19zaXplICYjNDM7XG4tXHRcdFx0ICBzaXplb2Yoc3RydWN0IHJ4YmQ4KSAqIHByaXYtXHUwMDNldG90YWxfcnhfcmluZ19zaXplLFxuLVx0XHRcdCAgcHJpdi1cdTAwM2V0eF9xdWV1ZVswXS1cdTAwM2V0eF9iZF9iYXNlLFxuLVx0XHRcdCAgcHJpdi1cdTAwM2V0eF9xdWV1ZVswXS1cdTAwM2V0eF9iZF9kbWFfYmFzZSk7XG4mIzQzO1x0aWYgKHByaXYtXHUwMDNldHhfcXVldWVbMF0tXHUwMDNldHhfYmRfYmFzZSkge1xuJiM0MztcdFx0ZG1hX2ZyZWVfY29oZXJlbnQocHJpdi1cdTAwM2VkZXYsXG4mIzQzO1x0XHRcdFx0ICBzaXplb2Yoc3RydWN0IHR4YmQ4KSAqXG4mIzQzO1x0XHRcdFx0ICBwcml2LVx1MDAzZXRvdGFsX3R4X3Jpbmdfc2l6ZSAmIzQzO1xuJiM0MztcdFx0XHRcdCAgc2l6ZW9mKHN0cnVjdCByeGJkOCkgKlxuJiM0MztcdFx0XHRcdCAgcHJpdi1cdTAwM2V0b3RhbF9yeF9yaW5nX3NpemUsXG4mIzQzO1x0XHRcdFx0ICBwcml2LVx1MDAzZXR4X3F1ZXVlWzBdLVx1MDAzZXR4X2JkX2Jhc2UsXG4mIzQzO1x0XHRcdFx0ICBwcml2LVx1MDAzZXR4X3F1ZXVlWzBdLVx1MDAzZXR4X2JkX2RtYV9iYXNlKTtcbiYjNDM7XG4mIzQzO1x0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBwcml2LVx1MDAzZW51bV90eF9xdWV1ZXM7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRcdHByaXYtXHUwMDNldHhfcXVldWVbaV0tXHUwMDNldHhfYmRfYmFzZSA9IE5VTEw7XG4mIzQzO1x0XHRcdHByaXYtXHUwMDNldHhfcXVldWVbaV0tXHUwMDNldHhfYmRfZG1hX2Jhc2UgPSAwO1xuJiM0MztcdFx0fVxuJiM0MztcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgcHJpdi1cdTAwM2VudW1fcnhfcXVldWVzOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0XHRwcml2LVx1MDAzZXJ4X3F1ZXVlW2ldLVx1MDAzZXJ4X2JkX2Jhc2UgPSBOVUxMO1xuJiM0MztcdFx0XHRwcml2LVx1MDAzZXJ4X3F1ZXVlW2ldLVx1MDAzZXJ4X2JkX2RtYV9iYXNlID0gMDtcbiYjNDM7XHRcdH1cbiYjNDM7XHR9XG4gfVxuIFxuIHZvaWQgc3RvcF9nZmFyKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG5AQCAtMjAwMyw2ICYjNDM7MjAxNiw3IEBAIHN0YXRpYyBpbnQgZ2Zhcl9zZXRfbWFjX2FkZHJlc3Moc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbiBzdGF0aWMgaW50IGdmYXJfY2hhbmdlX210dShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgbmV3X210dSlcbiB7XG4gXHRzdHJ1Y3QgZ2Zhcl9wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTtcbiYjNDM7XHRpbnQgZXJyID0gMDtcbiBcbiBcdHdoaWxlICh0ZXN0X2FuZF9zZXRfYml0X2xvY2soR0ZBUl9SRVNFVFRJTkcsIFx1MDAyNnByaXYtXHUwMDNlc3RhdGUpKVxuIFx0XHRjcHVfcmVsYXgoKTtcbkBAIC0yMDEzLDI0ICYjNDM7MjAyNywyNyBAQCBzdGF0aWMgaW50IGdmYXJfY2hhbmdlX210dShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgbmV3X210dSlcbiBcdFdSSVRFX09OQ0UoZGV2LVx1MDAzZW10dSwgbmV3X210dSk7XG4gXG4gXHRpZiAoZGV2LVx1MDAzZWZsYWdzIFx1MDAyNiBJRkZfVVApXG4tXHRcdHN0YXJ0dXBfZ2ZhcihkZXYpO1xuJiM0MztcdFx0ZXJyID0gc3RhcnR1cF9nZmFyKGRldik7XG4gXG4gXHRjbGVhcl9iaXRfdW5sb2NrKEdGQVJfUkVTRVRUSU5HLCBcdTAwMjZwcml2LVx1MDAzZXN0YXRlKTtcbiBcbi1cdHJldHVybiAwO1xuJiM0MztcdHJldHVybiBlcnI7XG4gfVxuIFxuLXN0YXRpYyB2b2lkIHJlc2V0X2dmYXIoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpXG4mIzQzO3N0YXRpYyBpbnQgcmVzZXRfZ2ZhcihzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcbiB7XG4gXHRzdHJ1Y3QgZ2Zhcl9wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYobmRldik7XG4mIzQzO1x0aW50IHJldDtcbiBcbiBcdHdoaWxlICh0ZXN0X2FuZF9zZXRfYml0X2xvY2soR0ZBUl9SRVNFVFRJTkcsIFx1MDAyNnByaXYtXHUwMDNlc3RhdGUpKVxuIFx0XHRjcHVfcmVsYXgoKTtcbiBcbiBcdHN0b3BfZ2ZhcihuZGV2KTtcbi1cdHN0YXJ0dXBfZ2ZhcihuZGV2KTtcbiYjNDM7XHRyZXQgPSBzdGFydHVwX2dmYXIobmRldik7XG4gXG4gXHRjbGVhcl9iaXRfdW5sb2NrKEdGQVJfUkVTRVRUSU5HLCBcdTAwMjZwcml2LVx1MDAzZXN0YXRlKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHJldDtcbiB9XG4gXG4gLyogZ2Zhcl9yZXNldF90YXNrIGdldHMgc2NoZWR1bGVkIHdoZW4gYSBwYWNrZXQgaGFzIG5vdCBiZWVuXG5AQCAtMjA1OCw2ICYjNDM7MjA3NSw3IEBAIHN0YXRpYyBpbnQgZ2Zhcl9od3RzdGFtcF9zZXQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcbiBcdFx0XHQgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbiB7XG4gXHRzdHJ1Y3QgZ2Zhcl9wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcbiYjNDM7XHRpbnQgcmV0ID0gMDtcbiBcbiBcdHN3aXRjaCAoY29uZmlnLVx1MDAzZXR4X3R5cGUpIHtcbiBcdGNhc2UgSFdUU1RBTVBfVFhfT0ZGOlxuQEAgLTIwNzYsNyAmIzQzOzIwOTQsNyBAQCBzdGF0aWMgaW50IGdmYXJfaHd0c3RhbXBfc2V0KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXG4gXHRjYXNlIEhXVFNUQU1QX0ZJTFRFUl9OT05FOlxuIFx0XHRpZiAocHJpdi1cdTAwM2Vod3RzX3J4X2VuKSB7XG4gXHRcdFx0cHJpdi1cdTAwM2Vod3RzX3J4X2VuID0gMDtcbi1cdFx0XHRyZXNldF9nZmFyKG5ldGRldik7XG4mIzQzO1x0XHRcdHJldCA9IHJlc2V0X2dmYXIobmV0ZGV2KTtcbiBcdFx0fVxuIFx0XHRicmVhaztcbiBcdGRlZmF1bHQ6XG5AQCAtMjA4NCwxMyAmIzQzOzIxMDIsMTMgQEAgc3RhdGljIGludCBnZmFyX2h3dHN0YW1wX3NldChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxuIFx0XHRcdHJldHVybiAtRVJBTkdFO1xuIFx0XHRpZiAoIXByaXYtXHUwMDNlaHd0c19yeF9lbikge1xuIFx0XHRcdHByaXYtXHUwMDNlaHd0c19yeF9lbiA9IDE7XG4tXHRcdFx0cmVzZXRfZ2ZhcihuZXRkZXYpO1xuJiM0MztcdFx0XHRyZXQgPSByZXNldF9nZmFyKG5ldGRldik7XG4gXHRcdH1cbiBcdFx0Y29uZmlnLVx1MDAzZXJ4X2ZpbHRlciA9IEhXVFNUQU1QX0ZJTFRFUl9BTEw7XG4gXHRcdGJyZWFrO1xuIFx0fVxuIFxuLVx0cmV0dXJuIDA7XG4mIzQzO1x0cmV0dXJuIHJldDtcbiB9XG4gXG4gc3RhdGljIGludCBnZmFyX2h3dHN0YW1wX2dldChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI4IDIyOjQ2PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIGNoYW5nZXMgYXJlIGlzb2xhdGVkIHRvIGRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9naWFuZmFyLmMsIHdoaWNoIGlzIGEgcGxhdGZvcm0gZHJpdmVyIGZvciBGcmVlc2NhbGUvTlhQIFNvQ3MgKFBvd2VyUEMgTVBDODN4eC84NXh4Lzg2eHggYW5kIEFSTSBMUzEwMjFBKS4gSXQgcmVxdWlyZXMgc3BlY2lmaWMgRGV2aWNlIFRyZWUgbm9kZXMgYW5kIHBoeXNpY2FsIFNvQyBoYXJkd2FyZSwgbWFraW5nIGl0IGltcG9zc2libGUgdG8gcHJvYmUgYW5kIHJlYWNoIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGZ1enppbmcgZW52aXJvbm1lbnRzIHN1Y2ggYXMgUUVNVSBvciBHQ0UuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgM2Q4ZTA0ZjkxNjBiMWU2YmYwM2FhMTFkMzUyNGI5ZmJiMDY3ZjVkMwpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBGcmkgQXVnIDI4IDIyOjQ2OjU3IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2dpYW5mYXIuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9naWFuZmFyLmMKaW5kZXggY2Y2MzZmYzVhYWZhYy4uZDBhYzhhOTU4Njk2ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2dpYW5mYXIuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZ2lhbmZhci5jCkBAIC0xMTQwLDExICYjNDM7MTE0MCwyNCBAQCBzdGF0aWMgdm9pZCBmcmVlX3NrYl9yZXNvdXJjZXMoc3RydWN0IGdmYXJfcHJpdmF0ZSAqcHJpdikKIAkJCWZyZWVfc2tiX3J4X3F1ZXVlKHJ4X3F1ZXVlKTsKIAl9CiAKLQlkbWFfZnJlZV9jb2hlcmVudChwcml2LSZndDtkZXYsCi0JCQkgIHNpemVvZihzdHJ1Y3QgdHhiZDgpICogcHJpdi0mZ3Q7dG90YWxfdHhfcmluZ19zaXplICYjNDM7Ci0JCQkgIHNpemVvZihzdHJ1Y3QgcnhiZDgpICogcHJpdi0mZ3Q7dG90YWxfcnhfcmluZ19zaXplLAotCQkJICBwcml2LSZndDt0eF9xdWV1ZVswXS0mZ3Q7dHhfYmRfYmFzZSwKLQkJCSAgcHJpdi0mZ3Q7dHhfcXVldWVbMF0tJmd0O3R4X2JkX2RtYV9iYXNlKTsKJiM0MzsJaWYgKHByaXYtJmd0O3R4X3F1ZXVlWzBdLSZndDt0eF9iZF9iYXNlKSB7CiYjNDM7CQlkbWFfZnJlZV9jb2hlcmVudChwcml2LSZndDtkZXYsCiYjNDM7CQkJCSAgc2l6ZW9mKHN0cnVjdCB0eGJkOCkgKgomIzQzOwkJCQkgIHByaXYtJmd0O3RvdGFsX3R4X3Jpbmdfc2l6ZSAmIzQzOwomIzQzOwkJCQkgIHNpemVvZihzdHJ1Y3QgcnhiZDgpICoKJiM0MzsJCQkJICBwcml2LSZndDt0b3RhbF9yeF9yaW5nX3NpemUsCiYjNDM7CQkJCSAgcHJpdi0mZ3Q7dHhfcXVldWVbMF0tJmd0O3R4X2JkX2Jhc2UsCiYjNDM7CQkJCSAgcHJpdi0mZ3Q7dHhfcXVldWVbMF0tJmd0O3R4X2JkX2RtYV9iYXNlKTsKJiM0MzsKJiM0MzsJCWZvciAoaSA9IDA7IGkgJmx0OyBwcml2LSZndDtudW1fdHhfcXVldWVzOyBpJiM0MzsmIzQzOykgewomIzQzOwkJCXByaXYtJmd0O3R4X3F1ZXVlW2ldLSZndDt0eF9iZF9iYXNlID0gTlVMTDsKJiM0MzsJCQlwcml2LSZndDt0eF9xdWV1ZVtpXS0mZ3Q7dHhfYmRfZG1hX2Jhc2UgPSAwOwomIzQzOwkJfQomIzQzOwkJZm9yIChpID0gMDsgaSAmbHQ7IHByaXYtJmd0O251bV9yeF9xdWV1ZXM7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQkJcHJpdi0mZ3Q7cnhfcXVldWVbaV0tJmd0O3J4X2JkX2Jhc2UgPSBOVUxMOwomIzQzOwkJCXByaXYtJmd0O3J4X3F1ZXVlW2ldLSZndDtyeF9iZF9kbWFfYmFzZSA9IDA7CiYjNDM7CQl9CiYjNDM7CX0KIH0KIAogdm9pZCBzdG9wX2dmYXIoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKQEAgLTIwMDMsNiAmIzQzOzIwMTYsNyBAQCBzdGF0aWMgaW50IGdmYXJfc2V0X21hY19hZGRyZXNzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiBzdGF0aWMgaW50IGdmYXJfY2hhbmdlX210dShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgbmV3X210dSkKIHsKIAlzdHJ1Y3QgZ2Zhcl9wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKJiM0MzsJaW50IGVyciA9IDA7CiAKIAl3aGlsZSAodGVzdF9hbmRfc2V0X2JpdF9sb2NrKEdGQVJfUkVTRVRUSU5HLCAmYW1wO3ByaXYtJmd0O3N0YXRlKSkKIAkJY3B1X3JlbGF4KCk7CkBAIC0yMDEzLDI0ICYjNDM7MjAyNywyNyBAQCBzdGF0aWMgaW50IGdmYXJfY2hhbmdlX210dShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgbmV3X210dSkKIAlXUklURV9PTkNFKGRldi0mZ3Q7bXR1LCBuZXdfbXR1KTsKIAogCWlmIChkZXYtJmd0O2ZsYWdzICZhbXA7IElGRl9VUCkKLQkJc3RhcnR1cF9nZmFyKGRldik7CiYjNDM7CQllcnIgPSBzdGFydHVwX2dmYXIoZGV2KTsKIAogCWNsZWFyX2JpdF91bmxvY2soR0ZBUl9SRVNFVFRJTkcsICZhbXA7cHJpdi0mZ3Q7c3RhdGUpOwogCi0JcmV0dXJuIDA7CiYjNDM7CXJldHVybiBlcnI7CiB9CiAKLXN0YXRpYyB2b2lkIHJlc2V0X2dmYXIoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpCiYjNDM7c3RhdGljIGludCByZXNldF9nZmFyKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KQogewogCXN0cnVjdCBnZmFyX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihuZGV2KTsKJiM0MzsJaW50IHJldDsKIAogCXdoaWxlICh0ZXN0X2FuZF9zZXRfYml0X2xvY2soR0ZBUl9SRVNFVFRJTkcsICZhbXA7cHJpdi0mZ3Q7c3RhdGUpKQogCQljcHVfcmVsYXgoKTsKIAogCXN0b3BfZ2ZhcihuZGV2KTsKLQlzdGFydHVwX2dmYXIobmRldik7CiYjNDM7CXJldCA9IHN0YXJ0dXBfZ2ZhcihuZGV2KTsKIAogCWNsZWFyX2JpdF91bmxvY2soR0ZBUl9SRVNFVFRJTkcsICZhbXA7cHJpdi0mZ3Q7c3RhdGUpOwomIzQzOwomIzQzOwlyZXR1cm4gcmV0OwogfQogCiAvKiBnZmFyX3Jlc2V0X3Rhc2sgZ2V0cyBzY2hlZHVsZWQgd2hlbiBhIHBhY2tldCBoYXMgbm90IGJlZW4KQEAgLTIwNTgsNiAmIzQzOzIwNzUsNyBAQCBzdGF0aWMgaW50IGdmYXJfaHd0c3RhbXBfc2V0KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsCiAJCQkgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaykKIHsKIAlzdHJ1Y3QgZ2Zhcl9wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKJiM0MzsJaW50IHJldCA9IDA7CiAKIAlzd2l0Y2ggKGNvbmZpZy0mZ3Q7dHhfdHlwZSkgewogCWNhc2UgSFdUU1RBTVBfVFhfT0ZGOgpAQCAtMjA3Niw3ICYjNDM7MjA5NCw3IEBAIHN0YXRpYyBpbnQgZ2Zhcl9od3RzdGFtcF9zZXQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwKIAljYXNlIEhXVFNUQU1QX0ZJTFRFUl9OT05FOgogCQlpZiAocHJpdi0mZ3Q7aHd0c19yeF9lbikgewogCQkJcHJpdi0mZ3Q7aHd0c19yeF9lbiA9IDA7Ci0JCQlyZXNldF9nZmFyKG5ldGRldik7CiYjNDM7CQkJcmV0ID0gcmVzZXRfZ2ZhcihuZXRkZXYpOwogCQl9CiAJCWJyZWFrOwogCWRlZmF1bHQ6CkBAIC0yMDg0LDEzICYjNDM7MjEwMiwxMyBAQCBzdGF0aWMgaW50IGdmYXJfaHd0c3RhbXBfc2V0KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsCiAJCQlyZXR1cm4gLUVSQU5HRTsKIAkJaWYgKCFwcml2LSZndDtod3RzX3J4X2VuKSB7CiAJCQlwcml2LSZndDtod3RzX3J4X2VuID0gMTsKLQkJCXJlc2V0X2dmYXIobmV0ZGV2KTsKJiM0MzsJCQlyZXQgPSByZXNldF9nZmFyKG5ldGRldik7CiAJCX0KIAkJY29uZmlnLSZndDtyeF9maWx0ZXIgPSBIV1RTVEFNUF9GSUxURVJfQUxMOwogCQlicmVhazsKIAl9CiAKLQlyZXR1cm4gMDsKJiM0MzsJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIGludCBnZmFyX2h3dHN0YW1wX2dldChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOCAyMjo0NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMjU3CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogODEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqUmV2aWV3aW5nIHRoZSBnaWFuZmFyLmMgUGF0Y2gqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIGBkcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZ2lhbmZhci5jYCBwYXRjaC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsICYjMzQ7V2hhdCBleGFjdGx5ICppcyogZ2lhbmZhcj8mIzM0OyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgc2NvcGUgb2YgdGhpcyBkcml2ZXIgYmVmb3JlIEkgY2FuIHByb3Blcmx5IGV2YWx1YXRlIHRoZSBjaGFuZ2VzLiBJcyB0aGlzIHNvbWV0aGluZyB0aGF0JiMzOTtzIHJlbGV2YW50IHRvIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBJIG1pZ2h0IGJlIHdvcmtpbmcgaW4sIG9yIGlzIGl0IHNwZWNpZmljIHRvIHBoeXNpY2FsIEZyZWVzY2FsZS9Qb3dlclBDIFNvQyBFdGhlcm5ldCBjb250cm9sbGVycz8gSSBoYXZlIHRvIGtub3cgaXRzIGFyY2hpdGVjdHVyYWwgY29udGV4dC4KClNvLCBmaXJzdCB0aGluZ3MgZmlyc3QsIEkmIzM5O20gZ29pbmcgdG8gaGVhZCBzdHJhaWdodCBmb3IgdGhlIGBLY29uZmlnYCBmb3IgYGdpYW5mYXIuY2AuIFRoYXQmIzM5O3Mgd2hlcmUgdGhlIHJlYWwgc3RvcnkgYmVnaW5zLiBUaGUgS2NvbmZpZyB3aWxsIHRlbGwgbWUgdGhlIGRlcGVuZGVuY2llcywgdGhlIHRhcmdldCBwbGF0Zm9ybXMsIGFuZCBtb3N0IGltcG9ydGFudGx5LCBhbnkgY29uZmlndXJhdGlvbiBvcHRpb25zIHRoYXQgbWlnaHQgaW5mbHVlbmNlIHRoaXMgcGF0Y2gmIzM5O3MgYmVoYXZpb3VyLiBJdCYjMzk7cyB0aGUga2V5IHRvIHVubG9ja2luZyB0aGUgdHJ1ZSBpbXBsaWNhdGlvbnMgb2YgdGhlc2UgY2hhbmdlcywgYW5kIEkgbmVlZCB0byBmdWxseSB1bmRlcnN0YW5kIGl0cyBjb250ZXh0IGJlZm9yZSBnb2luZyBkZWVwZXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjggMjI6NDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7R0lBTkZBUiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvS2NvbmZpZz04OT1jb25maWcgVUdFVEhfVFhfT05fREVNQU5EXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL0tjb25maWctOTItXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvS2NvbmZpZzo5Mzpjb25maWcgR0lBTkZBUlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL0tjb25maWctOTQtXHR0cmlzdGF0ZSBcJiMzNDtHaWFuZmFyIEV0aGVybmV0XCYjMzQ7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL01ha2VmaWxlPTE1PW9iai0kKENPTkZJR19GU0xfWEdNQUNfTURJTykgJiM0Mzs9IHhnbWFjX21kaW8ub1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL01ha2VmaWxlOjE2Om9iai0kKENPTkZJR19HSUFORkFSKSAmIzQzOz0gZ2lhbmZhcl9kcml2ZXIub1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL01ha2VmaWxlLTE3LWdpYW5mYXJfZHJpdmVyLW9ianMgOj0gZ2lhbmZhci5vIFxcXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZzbF9wcV9tZGlvLmM9MTY0PXN0YXRpYyBpbnQgZnNsX3BxX21kaW9fcmVzZXQoc3RydWN0IG1paV9idXMgKmJ1cylcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZnNsX3BxX21kaW8uYy0xOTQtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZnNsX3BxX21kaW8uYzoxOTU6I2lmIElTX0VOQUJMRUQoQ09ORklHX0dJQU5GQVIpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZnNsX3BxX21kaW8uYy0xOTYtLypcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZnNsX3BxX21kaW8uYz0zMDU9c3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgZnNsX3BxX21kaW9fbWF0Y2hbXSA9IHtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mc2xfcHFfbWRpby5jOjMwNjojaWYgSVNfRU5BQkxFRChDT05GSUdfR0lBTkZBUilcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mc2xfcHFfbWRpby5jLTMwNy1cdHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZ2lhbmZhci5jPTI3OD1zdGF0aWMgdm9pZCBnZmFyX2dldF9zdGF0czY0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBydG5sX2xpbmtfc3RhdHM2NCAqc3RhdHMpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2dpYW5mYXIuYy0yOTMtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZ2lhbmZhci5jOjI5NDpcdGlmIChwcml2LVx1MDAzZWRldmljZV9mbGFncyBcdTAwMjYgRlNMX0dJQU5GQVJfREVWX0hBU19STU9OKSB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZ2lhbmZhci5jLTI5NS1cdFx0c3RydWN0IHJtb25fbWliIF9faW9tZW0gKnJtb24gPSBcdTAwMjZwcml2LVx1MDAzZWdmYXJncnBbMF0ucmVncy1cdTAwM2VybW9uO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9naWFuZmFyLmM9NTc4PXN0YXRpYyBwaHlfaW50ZXJmYWNlX3QgZ2Zhcl9nZXRfaW50ZXJmYWNlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2dpYW5mYXIuYy02MTItXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZ2lhbmZhci5jOjYxMzpcdGlmIChwcml2LVx1MDAzZWRldmljZV9mbGFncyBcdTAwMjYgRlNMX0dJQU5GQVJfREVWX0hBU19HSUdBQklUKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2dpYW5mYXIuYy02MTQtXHRcdHJldHVybiBQSFlfSU5URVJGQUNFX01PREVfR01JSTtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZ2lhbmZhci5jPTYxOT1zdGF0aWMgaW50IGdmYXJfb2ZfaW5pdChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpvZmRldiwgc3RydWN0IG5ldF9kZXZpY2UgKipwZGV2KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9naWFuZmFyLmMtNzMyLVx0aWYgKG9mX3Byb3BlcnR5X3JlYWRfYm9vbChucCwgXCYjMzQ7YmQtc3Rhc2hcJiMzNDspKSB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZ2lhbmZhci5jOjczMzpcdFx0cHJpdi1cdTAwM2VkZXZpY2VfZmxhZ3MgfD0gRlNMX0dJQU5GQVJfREVWX0hBU19CRF9TVEFTSElORztcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9naWFuZmFyLmMtNzM0LVx0XHRwcml2LVx1MDAzZWJkX3N0YXNoX2VuID0gMTtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZ2lhbmZhci5jLTc0Ny1cdGlmIChzdGFzaF9sZW4gfHwgc3Rhc2hfaWR4KVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2dpYW5mYXIuYzo3NDg6XHRcdHByaXYtXHUwMDNlZGV2aWNlX2ZsYWdzIHw9IEZTTF9HSUFORkFSX0RFVl9IQVNfQlVGX1NUQVNISU5HO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2dpYW5mYXIuYy03NDktXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2dpYW5mYXIuYy03NTgtXHRpZiAobW9kZWwgXHUwMDI2XHUwMDI2ICFzdHJjYXNlY21wKG1vZGVsLCBcJiMzNDtUU0VDXCYjMzQ7KSlcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9naWFuZmFyLmM6NzU5Olx0XHRwcml2LVx1MDAzZWRldmljZV9mbGFncyB8PSBGU0xfR0lBTkZBUl9ERVZfSEFTX0dJR0FCSVQgfFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2dpYW5mYXIuYzo3NjA6XHRcdFx0XHQgICAgIEZTTF9HSUFORkFSX0RFVl9IQVNfQ09BTEVTQ0UgfFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2dpYW5mYXIuYzo3NjE6XHRcdFx0XHQgICAgIEZTTF9HSUFORkFSX0RFVl9IQVNfUk1PTiB8XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZ2lhbmZhci5jOjc2MjpcdFx0XHRcdCAgICAgRlNMX0dJQU5GQVJfREVWX0hBU19NVUxUSV9JTlRSO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2dpYW5mYXIuYy03NjMtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZ2lhbmZhci5jLTc2NC1cdGlmIChtb2RlbCBcdTAwMjZcdTAwMjYgIXN0cmNhc2VjbXAobW9kZWwsIFwmIzM0O2VUU0VDXCYjMzQ7KSlcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9naWFuZmFyLmM6NzY1Olx0XHRwcml2LVx1MDAzZWRldmljZV9mbGFncyB8PSBGU0xfR0lBTkZBUl9ERVZfSEFTX0dJR0FCSVQgfFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2dpYW5mYXIuYzo3NjY6XHRcdFx0XHQgICAgIEZTTF9HSUFORkFSX0RFVl9IQVNfQ09BTEVTQ0UgfFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2dpYW5mYXIuYzo3Njc6XHRcdFx0XHQgICAgIEZTTF9HSUFORkFSX0RFVl9IQVNfUk1PTiB8XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZ2lhbmZhci5jOjc2ODpcdFx0XHRcdCAgICAgRlNMX0dJQU5GQVJfREVWX0hBU19NVUxUSV9JTlRSIHxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9naWFuZmFyLmM6NzY5Olx0XHRcdFx0ICAgICBGU0xfR0lBTkZBUl9ERVZfSEFTX0NTVU0gfFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2dpYW5mYXIuYzo3NzA6XHRcdFx0XHQgICAgIEZTTF9HSUFORkFSX0RFVl9IQVNfVkxBTiB8XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZ2lhbmZhci5jOjc3MTpcdFx0XHRcdCAgICAgRlNMX0dJQU5GQVJfREVWX0hBU19NQUdJQ19QQUNLRVQgfFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2dpYW5mYXIuYzo3NzI6XHRcdFx0XHQgICAgIEZTTF9HSUFORkFSX0RFVl9IQVNfRVhURU5ERURfSEFTSCB8XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZ2lhbmZhci5jOjc3MzpcdFx0XHRcdCAgICAgRlNMX0dJQU5GQVJfREVWX0hBU19USU1FUiB8XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZ2lhbmZhci5jOjc3NDpcdFx0XHRcdCAgICAgRlNMX0dJQU5GQVJfREVWX0hBU19SWF9GSUxFUjtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9naWFuZmFyLmMtNzc1LVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9naWFuZmFyLmMtNzg2LVx0aWYgKG9mX3Byb3BlcnR5X3JlYWRfYm9vbChucCwgXCYjMzQ7ZnNsLG1hZ2ljLXBhY2tldFwmIzM0OykpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZ2lhbmZhci5jOjc4NzpcdFx0cHJpdi1cdTAwM2VkZXZpY2VfZmxhZ3MgfD0gRlNMX0dJQU5GQVJfREVWX0hBU19NQUdJQ19QQUNLRVQ7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZ2lhbmZhci5jLTc4OC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9naWFuZmFyLmMtNzg5LVx0aWYgKG9mX3Byb3BlcnR5X3JlYWRfYm9vbChucCwgXCYjMzQ7ZnNsLHdha2Utb24tZmlsZXJcJiMzNDspKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2dpYW5mYXIuYzo3OTA6XHRcdHByaXYtXHUwMDNlZGV2aWNlX2ZsYWdzIHw9IEZTTF9HSUFORkFSX0RFVl9IQVNfV0FLRV9PTl9GSUxFUjtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9naWFuZmFyLmMtNzkxLVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9naWFuZmFyLmM9OTQzPXN0YXRpYyB2b2lkIGdmYXJfaW5pdF9hZGRyX2hhc2hfdGFibGUoc3RydWN0IGdmYXJfcHJpdmF0ZSAqcHJpdilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZ2lhbmZhci5jLTk0Ni1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9naWFuZmFyLmM6OTQ3Olx0aWYgKHByaXYtXHUwMDNlZGV2aWNlX2ZsYWdzIFx1MDAyNiBGU0xfR0lBTkZBUl9ERVZfSEFTX0VYVEVOREVEX0hBU0gpIHtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9naWFuZmFyLmMtOTQ4LVx0XHRwcml2LVx1MDAzZWV4dGVuZGVkX2hhc2ggPSAxO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9naWFuZmFyLmM9MTY1Mz1zdGF0aWMgaW50IGluaXRfcGh5KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2dpYW5mYXIuYy0xNjczLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2dpYW5mYXIuYzoxNjc0Olx0aWYgKCEocHJpdi1cdTAwM2VkZXZpY2VfZmxhZ3MgXHUwMDI2IEZTTF9HSUFORkFSX0RFVl9IQVNfR0lHQUJJVCkpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZ2lhbmZhci5jLTE2NzUtXHRcdHBoeV9zZXRfbWF4X3NwZWVkKHBoeWRldiwgU1BFRURfMTAwKTtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZ2lhbmZhci5jPTIwNzM9c3RhdGljIGludCBnZmFyX2h3dHN0YW1wX3NldChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9naWFuZmFyLmMtMjA4NC1cdGNhc2UgSFdUU1RBTVBfVFhfT046XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZ2lhbmZhci5jOjIwODU6XHRcdGlmICghKHByaXYtXHUwMDNlZGV2aWNlX2ZsYWdzIFx1MDAyNiBGU0xfR0lBTkZBUl9ERVZfSEFTX1RJTUVSKSlcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9naWFuZmFyLmMtMjA4Ni1cdFx0XHRyZXR1cm4gLUVSQU5HRTtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZ2lhbmZhci5jLTIxMDAtXHRkZWZhdWx0OlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2dpYW5mYXIuYzoyMTAxOlx0XHRpZiAoIShwcml2LVx1MDAzZWRldmljZV9mbGFncyBcdTAwMjYgRlNMX0dJQU5GQVJfREVWX0hBU19USU1FUikpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZ2lhbmZhci5jLTIxMDItXHRcdFx0cmV0dXJuIC1FUkFOR0U7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2dpYW5mYXIuYz0yNjQ0PXN0YXRpYyBpcnFyZXR1cm5fdCBnZmFyX2Vycm9yKGludCBpcnEsIHZvaWQgKmdycF9pZClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZ2lhbmZhci5jLTI2NTctXHQvKiBNYWdpYyBQYWNrZXQgaXMgbm90IGFuIGVycm9yLiAqL1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2dpYW5mYXIuYzoyNjU4Olx0aWYgKChwcml2LVx1MDAzZWRldmljZV9mbGFncyBcdTAwMjYgRlNMX0dJQU5GQVJfREVWX0hBU19NQUdJQ19QQUNLRVQpIFx1MDAyNlx1MDAyNlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2dpYW5mYXIuYy0yNjU5LVx0ICAgIChldmVudHMgXHUwMDI2IElFVkVOVF9NQUcpKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9naWFuZmFyLmM9Mjc1Mz1zdGF0aWMgdm9pZCBnZmFyX25ldHBvbGwoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZ2lhbmZhci5jLTI3NTgtXHQvKiBJZiB0aGUgZGV2aWNlIGhhcyBtdWx0aXBsZSBpbnRlcnJ1cHRzLCBydW4gdHgvcnggKi9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9naWFuZmFyLmM6Mjc1OTpcdGlmIChwcml2LVx1MDAzZWRldmljZV9mbGFncyBcdTAwMjYgRlNMX0dJQU5GQVJfREVWX0hBU19NVUxUSV9JTlRSKSB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZ2lhbmZhci5jLTI3NjAtXHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHByaXYtXHUwMDNlbnVtX2dycHM7IGkmIzQzOyYjNDM7KSB7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2dpYW5mYXIuYz0yNzkwPXN0YXRpYyBpbnQgcmVnaXN0ZXJfZ3JwX2lycXMoc3RydWN0IGdmYXJfcHJpdl9ncnAgKmdycClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZ2lhbmZhci5jLTI3OTgtXHQgKi9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9naWFuZmFyLmM6Mjc5OTpcdGlmIChwcml2LVx1MDAzZWRldmljZV9mbGFncyBcdTAwMjYgRlNMX0dJQU5GQVJfREVWX0hBU19NVUxUSV9JTlRSKSB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZ2lhbmZhci5jLTI4MDAtXHRcdC8qIEluc3RhbGwgb3VyIGludGVycnVwdCBoYW5kbGVycyBmb3IgRXJyb3IsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2dpYW5mYXIuYz0yODUxPXN0YXRpYyB2b2lkIGdmYXJfZnJlZV9pcnEoc3RydWN0IGdmYXJfcHJpdmF0ZSAqcHJpdilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZ2lhbmZhci5jLTI4NTUtXHQvKiBGcmVlIHRoZSBJUlFzICovXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZ2lhbmZhci5jOjI4NTY6XHRpZiAocHJpdi1cdTAwM2VkZXZpY2VfZmxhZ3MgXHUwMDI2IEZTTF9HSUFORkFSX0RFVl9IQVNfTVVMVElfSU5UUikge1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2dpYW5mYXIuYy0yODU3LVx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBwcml2LVx1MDAzZW51bV9ncnBzOyBpJiM0MzsmIzQzOylcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZ2lhbmZhci5jPTMwOTY9c3RhdGljIHZvaWQgZ2Zhcl9od19pbml0KHN0cnVjdCBnZmFyX3ByaXZhdGUgKnByaXYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2dpYW5mYXIuYy0zMTA4LVx0LyogWmVybyBvdXQgdGhlIHJtb24gbWliIHJlZ2lzdGVycyBpZiBpdCBoYXMgdGhlbSAqL1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2dpYW5mYXIuYzozMTA5Olx0aWYgKHByaXYtXHUwMDNlZGV2aWNlX2ZsYWdzIFx1MDAyNiBGU0xfR0lBTkZBUl9ERVZfSEFTX1JNT04pIHtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9naWFuZmFyLmMtMzExMC1cdFx0bWVtc2V0X2lvKFx1MDAyNnJlZ3MtXHUwMDNlcm1vbiwgMCwgb2Zmc2V0b2Yoc3RydWN0IHJtb25fbWliLCBjYXIxKSk7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2dpYW5mYXIuYz0zMTc1PXN0YXRpYyBpbnQgZ2Zhcl9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpvZmRldilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZ2lhbmZhci5jLTMyMTgtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZ2lhbmZhci5jOjMyMTk6XHRpZiAocHJpdi1cdTAwM2VkZXZpY2VfZmxhZ3MgXHUwMDI2IEZTTF9HSUFORkFSX0RFVl9IQVNfQ1NVTSkge1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2dpYW5mYXIuYy0zMjIwLVx0XHRkZXYtXHUwMDNlaHdfZmVhdHVyZXMgPSBORVRJRl9GX0lQX0NTVU0gfCBORVRJRl9GX1NHIHxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZ2lhbmZhci5jLTMyMjUtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZ2lhbmZhci5jOjMyMjY6XHRpZiAocHJpdi1cdTAwM2VkZXZpY2VfZmxhZ3MgXHUwMDI2IEZTTF9HSUFORkFSX0RFVl9IQVNfVkxBTikge1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2dpYW5mYXIuYy0zMjI3LVx0XHRkZXYtXHUwMDNlaHdfZmVhdHVyZXMgfD0gTkVUSUZfRl9IV19WTEFOX0NUQUdfVFggfFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9naWFuZmFyLmMtMzIzOC1cdCAqL1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2dpYW5mYXIuYzozMjM5Olx0aWYgKHByaXYtXHUwMDNlZGV2aWNlX2ZsYWdzIFx1MDAyNiBGU0xfR0lBTkZBUl9ERVZfSEFTX1RJTUVSKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2dpYW5mYXIuYy0zMjQwLVx0XHRwcml2LVx1MDAzZXBhZGRpbmcgPSA4ICYjNDM7IERFRkFVTFRfUEFERElORztcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZ2lhbmZhci5jLTMyNDItXHRpZiAoZGV2LVx1MDAzZWZlYXR1cmVzIFx1MDAyNiBORVRJRl9GX0lQX0NTVU0gfHxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9naWFuZmFyLmM6MzI0MzpcdCAgICBwcml2LVx1MDAzZWRldmljZV9mbGFncyBcdTAwMjYgRlNMX0dJQU5GQVJfREVWX0hBU19USU1FUilcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9naWFuZmFyLmMtMzI0NC1cdFx0ZGV2LVx1MDAzZW5lZWRlZF9oZWFkcm9vbSA9IEdNQUNfRkNCX0xFTiAmIzQzOyBHTUFDX1RYUEFMX0xFTjtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZ2lhbmZhci5jLTMyNjEtXHRwcml2LVx1MDAzZXJ4X2ZpbGVyX2VuYWJsZSA9XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZ2lhbmZhci5jOjMyNjI6XHQgICAgKHByaXYtXHUwMDNlZGV2aWNlX2ZsYWdzIFx1MDAyNiBGU0xfR0lBTkZBUl9ERVZfSEFTX1JYX0ZJTEVSKSA/IDEgOiAwO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2dpYW5mYXIuYy0zMjYzLVx0LyogRW5hYmxlIG1vc3QgbWVzc2FnZXMgYnkgZGVmYXVsdCAqL1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9naWFuZmFyLmMtMzI3Mi1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9naWFuZmFyLmM6MzI3MzpcdGlmIChwcml2LVx1MDAzZWRldmljZV9mbGFncyBcdTAwMjYgRlNMX0dJQU5GQVJfREVWX0hBU19STU9OKSB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZ2lhbmZhci5jLTMyNzQtXHRcdHN0cnVjdCBybW9uX21pYiBfX2lvbWVtICpybW9uID0gXHUwMDI2cHJpdi1cdTAwM2VnZmFyZ3JwWzBdLnJlZ3MtXHUwMDNlcm1vbjtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZ2lhbmZhci5jLTMyOTAtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZ2lhbmZhci5jOjMyOTE6XHRpZiAocHJpdi1cdTAwM2VkZXZpY2VfZmxhZ3MgXHUwMDI2IEZTTF9HSUFORkFSX0RFVl9IQVNfTUFHSUNfUEFDS0VUKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2dpYW5mYXIuYy0zMjkyLVx0XHRwcml2LVx1MDAzZXdvbF9zdXBwb3J0ZWQgfD0gR0ZBUl9XT0xfTUFHSUM7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZ2lhbmZhci5jLTMyOTMtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZ2lhbmZhci5jOjMyOTQ6XHRpZiAoKHByaXYtXHUwMDNlZGV2aWNlX2ZsYWdzIFx1MDAyNiBGU0xfR0lBTkZBUl9ERVZfSEFTX1dBS0VfT05fRklMRVIpIFx1MDAyNlx1MDAyNlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2dpYW5mYXIuYy0zMjk1LVx0ICAgIHByaXYtXHUwMDNlcnhfZmlsZXJfZW5hYmxlKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9naWFuZmFyLmMtMzMwMi1cdFx0c3RydWN0IGdmYXJfcHJpdl9ncnAgKmdycCA9IFx1MDAyNnByaXYtXHUwMDNlZ2ZhcmdycFtpXTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9naWFuZmFyLmM6MzMwMzpcdFx0aWYgKHByaXYtXHUwMDNlZGV2aWNlX2ZsYWdzIFx1MDAyNiBGU0xfR0lBTkZBUl9ERVZfSEFTX01VTFRJX0lOVFIpIHtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9naWFuZmFyLmMtMzMwNC1cdFx0XHRzcHJpbnRmKGdmYXJfaXJxKGdycCwgVFgpLVx1MDAzZW5hbWUsIFwmIzM0OyVzJXMlYyVzXCYjMzQ7LFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9naWFuZmFyLmgtMTgtICovXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZ2lhbmZhci5oOjE5OiNpZm5kZWYgX19HSUFORkFSX0hcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9naWFuZmFyLmg6MjA6I2RlZmluZSBfX0dJQU5GQVJfSFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2dpYW5mYXIuaC0yMS1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZ2lhbmZhci5oPTY5NT1zdHJ1Y3QgZ2ZhciB7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2dpYW5mYXIuaC05MzgtLyogRmxhZ3MgcmVsYXRlZCB0byBnaWFuZmFyIGRldmljZSBmZWF0dXJlcyAqL1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2dpYW5mYXIuaDo5Mzk6I2RlZmluZSBGU0xfR0lBTkZBUl9ERVZfSEFTX0dJR0FCSVRcdFx0MHgwMDAwMDAwMVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2dpYW5mYXIuaDo5NDA6I2RlZmluZSBGU0xfR0lBTkZBUl9ERVZfSEFTX0NPQUxFU0NFXHRcdDB4MDAwMDAwMDJcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9naWFuZmFyLmg6OTQxOiNkZWZpbmUgRlNMX0dJQU5GQVJfREVWX0hBU19STU9OXHRcdDB4MDAwMDAwMDRcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9naWFuZmFyLmg6OTQyOiNkZWZpbmUgRlNMX0dJQU5GQVJfREVWX0hBU19NVUxUSV9JTlRSXHRcdDB4MDAwMDAwMDhcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9naWFuZmFyLmg6OTQzOiNkZWZpbmUgRlNMX0dJQU5GQVJfREVWX0hBU19DU1VNXHRcdDB4MDAwMDAwMTBcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9naWFuZmFyLmg6OTQ0OiNkZWZpbmUgRlNMX0dJQU5GQVJfREVWX0hBU19WTEFOXHRcdDB4MDAwMDAwMjBcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9naWFuZmFyLmg6OTQ1OiNkZWZpbmUgRlNMX0dJQU5GQVJfREVWX0hBU19FWFRFTkRFRF9IQVNIXHQweDAwMDAwMDQwXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZ2lhbmZhci5oOjk0NjojZGVmaW5lIEZTTF9HSUFORkFSX0RFVl9IQVNfTUFHSUNfUEFDS0VUXHQweDAwMDAwMTAwXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZ2lhbmZhci5oOjk0NzojZGVmaW5lIEZTTF9HSUFORkFSX0RFVl9IQVNfQkRfU1RBU0hJTkdcdFx0MHgwMDAwMDIwMFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2dpYW5mYXIuaDo5NDg6I2RlZmluZSBGU0xfR0lBTkZBUl9ERVZfSEFTX0JVRl9TVEFTSElOR1x0MHgwMDAwMDQwMFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2dpYW5mYXIuaDo5NDk6I2RlZmluZSBGU0xfR0lBTkZBUl9ERVZfSEFTX1RJTUVSXHRcdDB4MDAwMDA4MDBcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9naWFuZmFyLmg6OTUwOiNkZWZpbmUgRlNMX0dJQU5GQVJfREVWX0hBU19XQUtFX09OX0ZJTEVSXHQweDAwMDAxMDAwXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZ2lhbmZhci5oOjk1MTojZGVmaW5lIEZTTF9HSUFORkFSX0RFVl9IQVNfUlhfRklMRVJcdFx0MHgwMDAwMjAwMFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2dpYW5mYXIuaC05NTItXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2dpYW5mYXIuaD0xMzY0PXN0cnVjdCBmaWxlcl90YWJsZSB7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2dpYW5mYXIuaC0xMzY4LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2dpYW5mYXIuaDoxMzY5OiNlbmRpZiAvKiBfX0dJQU5GQVJfSCAqL1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9naWFuZmFyX2V0aHRvb2wuYz0xMTU9c3RhdGljIHZvaWQgZ2Zhcl9nc3RyaW5ncyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MzIgc3RyaW5nc2V0LCB1OCAqIGJ1Zilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZ2lhbmZhcl9ldGh0b29sLmMtMTE5LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2dpYW5mYXJfZXRodG9vbC5jOjEyMDpcdGlmIChwcml2LVx1MDAzZWRldmljZV9mbGFncyBcdTAwMjYgRlNMX0dJQU5GQVJfREVWX0hBU19STU9OKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2dpYW5mYXJfZXRodG9vbC5jLTEyMS1cdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgR0ZBUl9TVEFUU19MRU47IGkmIzQzOyYjNDM7KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9naWFuZmFyX2V0aHRvb2wuYz0xMzI9c3RhdGljIHZvaWQgZ2Zhcl9maWxsX3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBldGh0b29sX3N0YXRzICpkdW1teSxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZ2lhbmZhcl9ldGh0b29sLmMtMTQyLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2dpYW5mYXJfZXRodG9vbC5jOjE0MzpcdGlmIChwcml2LVx1MDAzZWRldmljZV9mbGFncyBcdTAwMjYgRlNMX0dJQU5GQVJfREVWX0hBU19STU9OKSB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZ2lhbmZhcl9ldGh0b29sLmMtMTQ0LVx0XHR1MzIgX19pb21lbSAqcm1vbiA9ICh1MzIgX19pb21lbSAqKSBcdTAwMjZyZWdzLVx1MDAzZXJtb247XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2dpYW5mYXJfZXRodG9vbC5jPTE1MT1zdGF0aWMgaW50IGdmYXJfc3NldF9jb3VudChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgc3NldClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZ2lhbmZhcl9ldGh0b29sLmMtMTU2LVx0Y2FzZSBFVEhfU1NfU1RBVFM6XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZ2lhbmZhcl9ldGh0b29sLmM6MTU3Olx0XHRpZiAocHJpdi1cdTAwM2VkZXZpY2VfZmxhZ3MgXHUwMDI2IEZTTF9HSUFORkFSX0RFVl9IQVNfUk1PTilcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9naWFuZmFyX2V0aHRvb2wuYy0xNTgtXHRcdFx0cmV0dXJuIEdGQVJfU1RBVFNfTEVOO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9naWFuZmFyX2V0aHRvb2wuYz0yNDk9c3RhdGljIGludCBnZmFyX2djb2FsZXNjZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9naWFuZmFyX2V0aHRvb2wuYy0yNjEtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZ2lhbmZhcl9ldGh0b29sLmM6MjYyOlx0aWYgKCEocHJpdi1cdTAwM2VkZXZpY2VfZmxhZ3MgXHUwMDI2IEZTTF9HSUFORkFSX0RFVl9IQVNfQ09BTEVTQ0UpKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2dpYW5mYXJfZXRodG9vbC5jLTI2My1cdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9naWFuZmFyX2V0aHRvb2wuYz0yODg9c3RhdGljIGludCBnZmFyX3Njb2FsZXNjZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9naWFuZmFyX2V0aHRvb2wuYy0yOTUtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZ2lhbmZhcl9ldGh0b29sLmM6Mjk2Olx0aWYgKCEocHJpdi1cdTAwM2VkZXZpY2VfZmxhZ3MgXHUwMDI2IEZTTF9HSUFORkFSX0RFVl9IQVNfQ09BTEVTQ0UpKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2dpYW5mYXJfZXRodG9vbC5jLTI5Ny1cdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9naWFuZmFyX2V0aHRvb2wuYz0xNDY1PXN0YXRpYyBpbnQgZ2Zhcl9nZXRfdHNfaW5mbyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9naWFuZmFyX2V0aHRvb2wuYy0xNDcyLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2dpYW5mYXJfZXRodG9vbC5jOjE0NzM6XHRpZiAoIShwcml2LVx1MDAzZWRldmljZV9mbGFncyBcdTAwMjYgRlNMX0dJQU5GQVJfREVWX0hBU19USU1FUikpIHtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9naWFuZmFyX2V0aHRvb2wuYy0xNDc0LVx0XHRpbmZvLVx1MDAzZXNvX3RpbWVzdGFtcGluZyA9IFNPRl9USU1FU1RBTVBJTkdfVFhfU09GVFdBUkU7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjggMjI6NDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTY1MgoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDI0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aGlua2luZywgcHJlc2VudGVkIGFzIGlmIGl0IHdlcmUgbXkgdGhvdWdodCBwcm9jZXNzOgoKKipEaXZpbmcgaW50byB0aGUgRnJlZXNjYWxlIEV0aGVybmV0IEtjb25maWcqKgoKT2theSwgdGltZSB0byBnZXQgdG8gdGhlIGhlYXJ0IG9mIHRoaXMuIEkgbmVlZCB0byB6ZXJvIGluIG9uIHRoZSBGcmVlc2NhbGUgRXRoZXJuZXQgZHJpdmVyIGNvbmZpZ3VyYXRpb24uIFNwZWNpZmljYWxseSwgSSYjMzk7bSBnb2luZyB0byBqdW1wIGludG8gdGhlIGBkcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvS2NvbmZpZ2AgZmlsZS4gSSYjMzk7bSB0aGlua2luZyB0aGF0IGxpbmUgOTMgb3IgdGhlcmVhYm91dHMgaXMgYSBnb29kIHN0YXJ0aW5nIHBvaW50IGZvciB3aGF0ZXZlciBJJiMzOTttIHRyb3VibGVzaG9vdGluZyBvciBjb25maWd1cmluZy4gVGhhdCBwYXJ0aWN1bGFyIGxpbmUgaXMgbGlrZWx5IHJlbGF0ZWQgdG8gc29tZSBjcnVjaWFsLCBwcm9iYWJseSBhIGtleSBzZXR0aW5nIG9yIGNvbmRpdGlvbmFsLCByZWxhdGVkIHRvIHRoZSBkcml2ZXIuIExldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyB0aGVyZS4uLiBhbmQgdGhlbiBJIGNhbiBhZGp1c3QgbXkgZm9jdXMgYmFzZWQgb24gd2hhdCBJIGZpbmQuIFRoaXMgaXMgd2hlcmUgdGhlIHJlYWwgd29yayBiZWdpbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjggMjI6NDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDgwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgODA6XHRjb25maWcgVUNDX0dFVEhcbiAgODE6XHRcdHRyaXN0YXRlIFwmIzM0O0ZyZWVzY2FsZSBRRSBHaWdhYml0IEV0aGVybmV0XCYjMzQ7XG4gIDgyOlx0XHRkZXBlbmRzIG9uIFFVSUNDX0VOR0lORSBcdTAwMjZcdTAwMjYgUFBDMzJcbiAgODM6XHRcdHNlbGVjdCBGU0xfUFFfTURJT1xuICA4NDpcdFx0c2VsZWN0IFBIWUxJTktcbiAgODU6XHRcdGhlbHBcbiAgODY6XHRcdCAgVGhpcyBkcml2ZXIgc3VwcG9ydHMgdGhlIEdpZ2FiaXQgRXRoZXJuZXQgbW9kZSBvZiB0aGUgUVVJQ0MgRW5naW5lLFxuICA4NzpcdFx0ICB3aGljaCBpcyBhdmFpbGFibGUgb24gc29tZSBGcmVlc2NhbGUgU09Dcy5cbiAgODg6XHRcbiAgODk6XHRjb25maWcgVUdFVEhfVFhfT05fREVNQU5EXG4gIDkwOlx0XHRib29sIFwmIzM0O1RyYW5zbWl0IG9uIERlbWFuZCBzdXBwb3J0XCYjMzQ7XG4gIDkxOlx0XHRkZXBlbmRzIG9uIFVDQ19HRVRIXG4gIDkyOlx0XG4gIDkzOlx0Y29uZmlnIEdJQU5GQVJcbiAgOTQ6XHRcdHRyaXN0YXRlIFwmIzM0O0dpYW5mYXIgRXRoZXJuZXRcJiMzNDtcbiAgOTU6XHRcdGRlcGVuZHMgb24gSEFTX0RNQVxuICA5NjpcdFx0c2VsZWN0IEZTTF9QUV9NRElPXG4gIDk3Olx0XHRzZWxlY3QgUEhZTElCXG4gIDk4Olx0XHRzZWxlY3QgRklYRURfUEhZXG4gIDk5Olx0XHRzZWxlY3QgQ1JDMzJcbiAxMDA6XHRcdGhlbHBcbiAxMDE6XHRcdCAgVGhpcyBkcml2ZXIgc3VwcG9ydHMgdGhlIEdpZ2FiaXQgVFNFQyBvbiB0aGUgTVBDODN4eCwgTVBDODV4eCxcbiAxMDI6XHRcdCAgYW5kIE1QQzg2eHggZmFtaWx5IG9mIGNoaXBzLCB0aGUgZVRTRUMgb24gTFMxMDIxQSBhbmQgdGhlIEZFQ1xuIDEwMzpcdFx0ICBvbiB0aGUgODU0MC5cbiAxMDQ6XHRcbiAxMDU6XHRzb3VyY2UgXCYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2RwYWEvS2NvbmZpZ1wmIzM0O1xuIDEwNjpcdHNvdXJjZSBcJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZHBhYTIvS2NvbmZpZ1wmIzM0O1xuIDEwNzpcdHNvdXJjZSBcJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvS2NvbmZpZ1wmIzM0O1xuIDEwODpcdFxuIDEwOTpcdGVuZGlmICMgTkVUX1ZFTkRPUl9GUkVFU0NBTEVcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOCAyMjo0NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDMyMgoJCQkJCQkJb3V0cHV0OiA0MwoJCQkJCQkJdGhvdWdodHM6IDQ5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgYGdpYW5mYXJgIERyaXZlcioqCgpPa2F5LCBsZXQmIzM5O3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBgZ2lhbmZhcmAgaW50ZXJhY3RzIHdpdGggdGhlIGhhcmR3YXJlLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZmlndXJlIG91dCB0aGUgYmluZGluZyBtZWNoYW5pc20uIElzIGl0IGEgcGxhdGZvcm0gZHJpdmVyLCByZWx5aW5nIG9uIERldmljZSBUcmVlIGluZm9ybWF0aW9uLCBvciBwZXJoYXBzIHV0aWxpemluZyBQQ0kgY29uZmlndXJhdGlvbj8gSSBuZWVkIHRvIHF1aWNrbHkgaWRlbnRpZnkgdGhlIGFwcHJvYWNoLgoKTXkgbmV4dCBzdGVwIGlzIGNsZWFyOiBJJiMzOTtsbCBkaXZlIGludG8gdGhlIGBnaWFuZmFyLmNgIHNvdXJjZSBjb2RlLiBJJiMzOTtsbCB6ZXJvIGluIG9uIHRoZSB1c3VhbCBzdXNwZWN0cyDigJMgc3BlY2lmaWNhbGx5LCB0aGUgYXJlYSBhcm91bmQgYG1vZHVsZV9wbGF0Zm9ybV9kcml2ZXJgIGlmIGl0JiMzOTtzIGEgcGxhdGZvcm0gZHJpdmVyLCBvciB0aGUgcHJvYmUgZnVuY3Rpb24gaXRzZWxmLCByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgdXNlcyBEZXZpY2UgVHJlZSBiaW5kaW5ncywgUENJLCBvciBzb21lIG90aGVyIG1lY2hhbmlzbS4gVGhhdCYjMzk7cyB0aGUga2V5IHRvIHVuZGVyc3RhbmRpbmcgaG93IHRoaXMgZHJpdmVyIHJlZ2lzdGVycyBpdHNlbGYgYW5kIGluaXRpYWxpemVzIHRoZSBoYXJkd2FyZS4gSSBrbm93IG9uY2UgSSBsb2NhdGUgdGhlIHJpZ2h0IGVudHJ5IHBvaW50cywgdGhlIHJlc3Qgd2lsbCBmb2xsb3cuIEkmIzM5O2xsIGZpbmQgbXkgd2F5IGluIHF1aWNrbHkhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjggMjI6NDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bW9kdWxlX3BsYXRmb3JtX2RyaXZlcnxwbGF0Zm9ybV9kcml2ZXImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZ2lhbmZhci5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9naWFuZmFyLmM9MzYxMT1NT0RVTEVfREVWSUNFX1RBQkxFKG9mLCBnZmFyX21hdGNoKTtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZ2lhbmZhci5jLTM2MTMtLyogU3RydWN0dXJlIGZvciBhIGRldmljZSBkcml2ZXIgKi9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9naWFuZmFyLmM6MzYxNDpzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBnZmFyX2RyaXZlciA9IHtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9naWFuZmFyLmMtMzYxNS1cdC5kcml2ZXIgPSB7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2dpYW5mYXIuYy0zNjIzLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2dpYW5mYXIuYzozNjI0Om1vZHVsZV9wbGF0Zm9ybV9kcml2ZXIoZ2Zhcl9kcml2ZXIpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI4IDIyOjQ3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwNzkyCgkJCQkJCQlvdXRwdXQ6IDQzCgkJCQkJCQl0aG91Z2h0czogMTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBhcyBpZiB0aGV5JiMzOTtyZSBteSBvd246CgoqKkFuYWx5emluZyB0aGUgYGdmYXJfbWF0Y2hgIEZ1bmN0aW9uJiMzOTtzIEJlaGF2aW9yKioKCkFscmlnaHQsIHRpbWUgdG8gZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIE15IGluaXRpYWwgdGhvdWdodCBwcm9jZXNzIGlzIHN0cmFpZ2h0Zm9yd2FyZDogSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCB0aGUgYGdmYXJfbWF0Y2hgIGZ1bmN0aW9uIGlzICphY3R1YWxseSogZG9pbmcuIEkmIzM5O20gbm90IGdvaW5nIHRvIGFwcHJvYWNoIHRoaXMgd2l0aCBibGluZCBmYWl0aCwgYXNzdW1pbmcgaXQmIzM5O3MgcGVyZmVjdGx5IGltcGxlbWVudGVkIG9yIGRvZXMgZXhhY3RseSB3aGF0IGl0cyBuYW1lIHN1Z2dlc3RzLiBNeSBmaXJzdCBzdGVwIGlzIHRvIHRyZWF0IGl0IGFzIGEgYmxhY2sgYm94IGFuZCBwZWVrIGluc2lkZS4gSSB3YW50IGEgY2xlYXIgcGljdHVyZSBvZiBpdHMgaW5wdXRzLCBvdXRwdXRzLCBhbmQsIG1vc3QgaW1wb3J0YW50bHksIHRoZSBjcml0ZXJpYSBhZ2FpbnN0IHdoaWNoIGl0JiMzOTtzIG1ha2luZyBpdHMgbWF0Y2hlcy4gSSYjMzk7bSBnb2luZyB0byBsb29rIGF0IHRoZSBkYXRhIGJlaW5nIGZlZCBpbnRvIGl0IHRvIGZpZ3VyZSBvdXQgd2hhdCBpdCYjMzk7cyBjb21wYXJpbmcgYWdhaW5zdC4gSSYjMzk7bSBhbHJlYWR5IGFudGljaXBhdGluZyB0aGF0IHRoZSByZXN1bHRzIHdpbGwgaW5mb3JtIG1lIGFib3V0IGhvdyByb2J1c3QgdGhlIG92ZXJhbGwgc3lzdGVtIGlzLiBVbmRlcnN0YW5kaW5nIHRoZXNlIGZvdW5kYXRpb25hbCBtZWNoYW5pY3MgaXMgY3JpdGljYWwgZm9yIG1lIHRvIG1ha2UgYW55IHNlbnNpYmxlIGFzc2Vzc21lbnQgYWJvdXQgdGhpcyBwcm9ncmFtLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOCAyMjo0NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9naWFuZmFyLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzNTkwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDM1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzM1OTA6XHR9O1xuMzU5MTpcdFxuMzU5MjpcdCNkZWZpbmUgR0ZBUl9QTV9PUFMgKFx1MDAyNmdmYXJfcG1fb3BzKVxuMzU5MzpcdFxuMzU5NDpcdCNlbHNlXG4zNTk1Olx0XG4zNTk2Olx0I2RlZmluZSBHRkFSX1BNX09QUyBOVUxMXG4zNTk3Olx0XG4zNTk4Olx0I2VuZGlmXG4zNTk5Olx0XG4zNjAwOlx0c3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgZ2Zhcl9tYXRjaFtdID1cbjM2MDE6XHR7XG4zNjAyOlx0XHR7XG4zNjAzOlx0XHRcdC50eXBlID0gXCYjMzQ7bmV0d29ya1wmIzM0OyxcbjM2MDQ6XHRcdFx0LmNvbXBhdGlibGUgPSBcJiMzNDtnaWFuZmFyXCYjMzQ7LFxuMzYwNTpcdFx0fSxcbjM2MDY6XHRcdHtcbjM2MDc6XHRcdFx0LmNvbXBhdGlibGUgPSBcJiMzNDtmc2wsZXRzZWMyXCYjMzQ7LFxuMzYwODpcdFx0fSxcbjM2MDk6XHRcdHt9LFxuMzYxMDpcdH07XG4zNjExOlx0TU9EVUxFX0RFVklDRV9UQUJMRShvZiwgZ2Zhcl9tYXRjaCk7XG4zNjEyOlx0XG4zNjEzOlx0LyogU3RydWN0dXJlIGZvciBhIGRldmljZSBkcml2ZXIgKi9cbjM2MTQ6XHRzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBnZmFyX2RyaXZlciA9IHtcbjM2MTU6XHRcdC5kcml2ZXIgPSB7XG4zNjE2Olx0XHRcdC5uYW1lID0gXCYjMzQ7ZnNsLWdpYW5mYXJcJiMzNDssXG4zNjE3Olx0XHRcdC5wbSA9IEdGQVJfUE1fT1BTLFxuMzYxODpcdFx0XHQub2ZfbWF0Y2hfdGFibGUgPSBnZmFyX21hdGNoLFxuMzYxOTpcdFx0fSxcbjM2MjA6XHRcdC5wcm9iZSA9IGdmYXJfcHJvYmUsXG4zNjIxOlx0XHQucmVtb3ZlID0gZ2Zhcl9yZW1vdmUsXG4zNjIyOlx0fTtcbjM2MjM6XHRcbjM2MjQ6XHRtb2R1bGVfcGxhdGZvcm1fZHJpdmVyKGdmYXJfZHJpdmVyKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjggMjI6NDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE0ODUKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiA3MjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiBgZ2lhbmZhcmAmIzM5O3MgRnV6emluZyBQb3RlbnRpYWwqKgoKT2theSwgc28gYGdpYW5mYXJgIGlzIGEgcGxhdGZvcm0gZHJpdmVyIGZvciB0aG9zZSBGcmVlc2NhbGUgZXRoZXJuZXQgY29udHJvbGxlcnMsIFRTRUMvZVRTRUMsIG9uIFBvd2VyUEMgYW5kIHNvbWUgQVJNIFNvQ3MuIFRoZSBpbW1lZGlhdGUgcXVlc3Rpb24gaXMsIGNhbiBJIGV2ZW4gZ2V0IGF0IHRoaXMgdGhpbmcgaW4gYSB0eXBpY2FsIGZ1enppbmcgZW52aXJvbm1lbnQ/IENhbiBJIHJlYWNoIHRoaXMgaGFyZHdhcmUsIG9yIGlzIGl0IHNwZWNpZmljIFNvQyAvIGJvYXJkIGhhcmR3YXJlIHRoYXQgY2FuJiMzOTt0IGJlIHJlYWNoZWQgaW4gc3RhbmRhcmQgUUVNVSBvciBHQ0UsIG9yIGEgc3RhbmRhcmQgZnV6emluZyBzZXR1cD8gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgaXQmIzM5O3Mgc29tZXRoaW5nIEkgY2FuIGFjdHVhbGx5IHByb2JlLgoKTGV0IG1lIHJlLWV4YW1pbmUgdGhlIGNyaXRlcmlhLiBUaGUgaW5zdHJ1Y3Rpb25zIHNheSB0byBiYWlsIG91dCBpZiB0aGUgY2hhbmdlcyBhcmUgbGltaXRlZCB0byBzdHVmZiB0aGF0JiMzOTtzICppbXBvc3NpYmxlKiB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuIFRoYXQgaW5jbHVkZXMgdGhpbmdzIGxpa2UgdmVuZG9yLXNwZWNpZmljIFBDSWUgc3R1ZmYgdGhhdCByZXF1aXJlcyBwaHlzaWNhbCBoYXJkd2FyZSwgZHJpdmVyIHRlYXJkb3duIGNvZGUgdGhhdCBvbmx5IHJ1bnMgb24gaG90LXVucGx1Zywgb3Igb3RoZXIgdW5yZWFjaGFibGUgY29kZSBwYXRocy4KClRoZSBrZXkgcXVlc3Rpb24gaXM6IGRvZXMgUUVNVSBlbXVsYXRlIHRoZSBgZ2lhbmZhcmAgaGFyZHdhcmUsIG9yIGV2ZW4gc29tZXRoaW5nIHNpbWlsYXIgbGlrZSBlVFNFQz8gSSBuZWVkIHRvIGNoZWNrLiBBaGEhIEl0IGxvb2tzIGxpa2UgdGhlcmUmIzM5O3MgYGh3L25ldC9mc2xfZXRzZWMvYCBpbiBRRU1VLiBTcGVjaWZpY2FsbHksIGBldHNlYy5jYCBpcyB0aGVyZSBmb3IgYG1wYzg1NDRkc2AgYW5kIGBwcGNlNTAwYCBtYWNoaW5lcyEgQnV0IGlzIHRoaXMgYWN0dWFsbHkgKnJlYWNoYWJsZSogaW4gYSBzdGFuZGFyZCBzeXprYWxsZXIgb3IgTGludXggZnV6emluZyBzZXR1cCwgZm9yIHg4Nl82NCBvciBhcm02ND8gT3IgY2FuIEkgY3JlYXRlIHRoZXNlIHBsYXRmb3JtIGRldmljZXMgdGhyb3VnaCBPRiBvdmVybGF5cywgY29uZmlnZnMsIGV0Yy4/IENhbiBJIGdldCBhdCB0aGVtIHRocm91Z2ggT0YgbWF0Y2ggdGFibGVzIGluIHg4Ni9hcm02NCBldmVuIHdpdGhvdXQgdGhlIGRldmljZSB0cmVlIG5vZGUgYmVpbmcgYXZhaWxhYmxlPwoKU3l6a2FsbGVyIHR5cGljYWxseSB1c2VzIHg4Nl82NCwgYXJtNjQsIG9yIGd2aXNvci9HQ0UvUUVNVSBWTXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBwbGF0Zm9ybSBkZXZpY2VzIG9yIE9GIGRldmljZXMgYXJlIGhhbmRsZWQgaW4gdGhvc2UgZnV6emluZyBlbnZpcm9ubWVudHMuIEFyZSBwbGF0Zm9ybSBkcml2ZXJzIGZvciBzcGVjaWZpYyBlbWJlZGRlZCBTb0NzIGdlbmVyYWxseSBjb25zaWRlcmVkIHVucmVhY2hhYmxlPyBPciBhcmUgdGhleSBzb21ldGltZXMgcmVhY2hhYmxlPyBJIG5lZWQgdG8gY2hlY2sgdGhlIHBhc3QgZXZhbHVhdGlvbiBjcml0ZXJpYSB0byB1bmRlcnN0YW5kIGhvdyB0aGVzZSBkcml2ZXJzIGFyZSB0cmVhdGVkLgoKQ2FuIEkgZXZlbiBpbnN0YW50aWF0ZSBgZ2lhbmZhcmAgaW4geDg2XzY0PyBObywgYmVjYXVzZSBpdCBsb29rcyBsaWtlIGBnaWFuZmFyYCByZWxpZXMgb24gT0YgKGRldmljZSB0cmVlIHdpdGggYG9mX21hdGNoX3RhYmxlID0gZ2Zhcl9tYXRjaGApLiBUaGUgYGdmYXJfcHJvYmVgIGZ1bmN0aW9uIGdldHMgY2FsbGVkIGZvciB0aGVzZSBkZXZpY2VzLCBhbmQgaXQgY2FsbHMgYGdmYXJfb2ZfaW5pdGAuIEluc2lkZSBgZ2Zhcl9vZl9pbml0YCBpdCBwdWxscyB0aGUgZGV2aWNlIG5vZGUgZnJvbSB0aGUgYHBsYXRmb3JtX2RldmljZWA6IGBzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wID0gb2ZkZXYtJmd0O2Rldi5vZl9ub2RlO2AuICBJZiB0aGF0JiMzOTtzIG5vdCB0aGVyZSBpdCByZXR1cm5zIGFuIGVycm9yLiBJIG5lZWQgdG8gbG9vayBjbG9zZXIgYXQgYGdmYXJfcHJvYmVgIGFuZCBgZ2Zhcl9vZl9pbml0YCB0byBmaWd1cmUgb3V0IGlmIEkgY2FuIGdldCBwYXN0IHRoYXQgZGV2aWNlIHRyZWUgZGVwZW5kZW5jeS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjggMjI6NDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Z2Zhcl9vZl9pbml0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2dpYW5mYXIuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZ2lhbmZhci5jPTU3OD1zdGF0aWMgcGh5X2ludGVyZmFjZV90IGdmYXJfZ2V0X2ludGVyZmFjZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9naWFuZmFyLmMtNjE4LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2dpYW5mYXIuYzo2MTk6c3RhdGljIGludCBnZmFyX29mX2luaXQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqb2ZkZXYsIHN0cnVjdCBuZXRfZGV2aWNlICoqcGRldilcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9naWFuZmFyLmMtNjIwLXtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZ2lhbmZhci5jPTMxNzU9c3RhdGljIGludCBnZmFyX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKm9mZGV2KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9naWFuZmFyLmMtMzE4MS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9naWFuZmFyLmM6MzE4MjpcdGVyciA9IGdmYXJfb2ZfaW5pdChvZmRldiwgXHUwMDI2ZGV2KTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9naWFuZmFyLmMtMzE4My1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjggMjI6NDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTMwOTUKCQkJCQkJCW91dHB1dDogNDIKCQkJCQkJCXRob3VnaHRzOiAyOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgaW5zdHJ1Y3Rpb25zLCBhcyB0aG91Z2ggdGhleSBhcmUgbXkgaW50ZXJuYWwgdGhvdWdodCBwcm9jZXNzOgoKKipEaXZpbmcgaW50byB0aGUgR2lhbmZhciBJbml0aWFsaXphdGlvbioqCgpBbHJpZ2h0LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSYjMzk7dmUgZ290IGEgcHJvamVjdCBvbiBteSBwbGF0ZSB0aGF0IGludm9sdmVzIHRoZSBHaWFuZmFyIEV0aGVybmV0IGRyaXZlciwgYW5kIHRvIHRydWx5IHVuZGVyc3RhbmQgd2hhdCYjMzk7cyBnb2luZyBvbiwgSSBuZWVkIHRvIHN0YXJ0IGF0IHRoZSBiZWdpbm5pbmcuIFRoYXQgbWVhbnMgY3JhY2tpbmcgb3BlbiB0aGUgYGdpYW5mYXIuY2AgZmlsZSBpbiB0aGUgYGRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZWAgZGlyZWN0b3J5LiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbml0aWFsIHNldHVwIG9mIHRoZSBkcml2ZXIsIHNvIEkmIzM5O20gaGVhZGluZyBkaXJlY3RseSB0byB0aGUgYGdmYXJfb2ZfaW5pdGAgZnVuY3Rpb24uIEkga25vdyB0aGlzIGlzIGEgY3JpdGljYWwgcGFydCwgbGlrZWx5IHdoZXJlIHRoZSBkZXZpY2UgdHJlZSBpbmZvcm1hdGlvbiBpcyBwYXJzZWQgYW5kIHRoZSBoYXJkd2FyZSBpcyBicm91Z2h0IG9ubGluZS4gVGltZSB0byBzZWUgd2hhdCBtYWdpYyBGcmVlc2NhbGUgaGFzIGJha2VkIGludG8gdGhpcyBjb2RlLiBUaGlzIHdpbGwgYmUgdGhlIGZvdW5kYXRpb25hbCBzdGFydGluZyBwb2ludC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjggMjI6NDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZ2lhbmZhci5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNjE4LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA2MTg6XHRcbiA2MTk6XHRzdGF0aWMgaW50IGdmYXJfb2ZfaW5pdChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpvZmRldiwgc3RydWN0IG5ldF9kZXZpY2UgKipwZGV2KVxuIDYyMDpcdHtcbiA2MjE6XHRcdGNvbnN0IGNoYXIgKm1vZGVsO1xuIDYyMjpcdFx0aW50IGVyciA9IDAsIGksIGo7XG4gNjIzOlx0XHRwaHlfaW50ZXJmYWNlX3QgaW50ZXJmYWNlO1xuIDYyNDpcdFx0c3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IE5VTEw7XG4gNjI1Olx0XHRzdHJ1Y3QgZ2Zhcl9wcml2YXRlICpwcml2ID0gTlVMTDtcbiA2MjY6XHRcdHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAgPSBvZmRldi1cdTAwM2VkZXYub2Zfbm9kZTtcbiA2Mjc6XHRcdHN0cnVjdCBkZXZpY2Vfbm9kZSAqY2hpbGQgPSBOVUxMO1xuIDYyODpcdFx0dTMyIHN0YXNoX2xlbiA9IDA7XG4gNjI5Olx0XHR1MzIgc3Rhc2hfaWR4ID0gMDtcbiA2MzA6XHRcdHVuc2lnbmVkIGludCBudW1fdHhfcXMsIG51bV9yeF9xcztcbiA2MzE6XHRcdHVuc2lnbmVkIHNob3J0IG1vZGU7XG4gNjMyOlx0XG4gNjMzOlx0XHRpZiAoIW5wKVxuIDYzNDpcdFx0XHRyZXR1cm4gLUVOT0RFVjtcbiA2MzU6XHRcbiA2MzY6XHRcdGlmIChvZl9kZXZpY2VfaXNfY29tcGF0aWJsZShucCwgXCYjMzQ7ZnNsLGV0c2VjMlwmIzM0OykpXG4gNjM3Olx0XHRcdG1vZGUgPSBNUV9NR19NT0RFO1xuIDYzODpcdFx0ZWxzZVxuIDYzOTpcdFx0XHRtb2RlID0gU1FfU0dfTU9ERTtcbiA2NDA6XHRcbiA2NDE6XHRcdGlmIChtb2RlID09IFNRX1NHX01PREUpIHtcbiA2NDI6XHRcdFx0bnVtX3R4X3FzID0gMTtcbiA2NDM6XHRcdFx0bnVtX3J4X3FzID0gMTtcbiA2NDQ6XHRcdH0gZWxzZSB7IC8qIE1RX01HX01PREUgKi9cbiA2NDU6XHRcdFx0LyogZ2V0IHRoZSBhY3R1YWwgbnVtYmVyIG9mIHN1cHBvcnRlZCBncm91cHMgKi9cbiA2NDY6XHRcdFx0dW5zaWduZWQgaW50IG51bV9ncnBzO1xuIDY0NzpcdFxuIDY0ODpcdFx0XHRudW1fZ3JwcyA9IGRldmljZV9nZXRfbmFtZWRfY2hpbGRfbm9kZV9jb3VudChcdTAwMjZvZmRldi1cdTAwM2VkZXYsXG4gNjQ5Olx0XHRcdFx0XHRcdFx0XHQgICAgIFwmIzM0O3F1ZXVlLWdyb3VwXCYjMzQ7KTtcbiA2NTA6XHRcdFx0aWYgKG51bV9ncnBzID09IDAgfHwgbnVtX2dycHMgXHUwMDNlIE1BWEdST1VQUykge1xuIDY1MTpcdFx0XHRcdGRldl9lcnIoXHUwMDI2b2ZkZXYtXHUwMDNlZGV2LCBcJiMzNDtJbnZhbGlkICMgb2YgaW50IGdyb3VwcyglZClcXG5cJiMzNDssXG4gNjUyOlx0XHRcdFx0XHRudW1fZ3Jwcyk7XG4gNjUzOlx0XHRcdFx0cHJfZXJyKFwmIzM0O0Nhbm5vdCBkbyBhbGxvY19ldGhlcmRldiwgYWJvcnRpbmdcXG5cJiMzNDspO1xuIDY1NDpcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuIDY1NTpcdFx0XHR9XG4gNjU2Olx0XG4gNjU3Olx0XHRcdG51bV90eF9xcyA9IG51bV9ncnBzOyAvKiBvbmUgdHhxIHBlciBpbnQgZ3JvdXAgKi9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjggMjI6NDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM5OTAKCQkJCQkJCW91dHB1dDogMTIyCgkJCQkJCQl0aG91Z2h0czogMTM0MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXNpcyBvZiB0aGUgR2lhbmZhciBEcml2ZXIgUGF0Y2ggZm9yIEZ1enppbmcgU3VpdGFiaWxpdHkqKgoKT2theSwgc28gSSYjMzk7bSBkaXZpbmcgaW50byB0aGlzIHBhdGNoLiBUaGUga2V5IGlzIHVuZGVyc3RhbmRpbmcgaWYgdGhlc2UgY2hhbmdlcyBhcmUgZXZlbiAqcmVhY2hhYmxlKiBpbiBhIHN0YW5kYXJkIGZ1enppbmcgc2V0dXAuIExldCYjMzk7cyBzdGFydCB3aXRoIHRoZSBkcml2ZXIgaXRzZWxmLiBJdCYjMzk7cyB0aGUgYGdpYW5mYXJgIGRyaXZlci4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaXRzIGRlcGVuZGVuY2llcy4gSXQgbmVlZHMgZGV2aWNlIHRyZWUgbm9kZXMsIGludGVycnVwdHMsIGEgUEhZLCBNRElPLCByZWdpc3RlciBtYXBwaW5ncywgYW5kIHRoZSB1c3VhbCBzdXNwZWN0cy4gTG9va3MgbGlrZSBpdCYjMzk7cyBidWlsdCBmb3IgRnJlZXNjYWxlIFBvd2VyUEMgKE1QQzgzeHgsIE1QQzg1eHgsIE1QQzg2eHgpIG9yIEFSTSBMUzEwMjFBIFNvQ3MuCgpOb3cgdGhlIHF1ZXN0aW9uIGlzIHdoZXRoZXIgU3l6a2FsbGVyIGFuZCBvdGhlciBmdXp6aW5nIHRvb2xzIGNvbW1vbmx5IHJ1biBvbiBGcmVlc2NhbGUgaGFyZHdhcmUsIG9yIGRvZXMgaXQgcmVxdWlyZSBzb21lIGN1c3RvbSBkZXZpY2UgdHJlZSBvciBzcGVjaWZpYyBoYXJkd2FyZT8gVGhlbiBJIG5lZWQgdG8gZG91YmxlLWNoZWNrIHRoZSBmdXp6aW5nIGd1aWRlbGluZXMuIFRob3NlIGd1aWRlbGluZXMgZXhwbGljaXRseSB0ZWxsIG1lIHdoZW4gYSBwYXRjaCBpc24mIzM5O3Qgd29ydGggZnV6emluZy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGlzIGRvZXNuJiMzOTt0IGZhbGwgaW50byB0aGUgY2F0ZWdvcnkgb2YgJiMzNDt1bnJlYWNoYWJsZSBjb2RlIHBhdGhzLiYjMzQ7IEkgc2hvdWxkIGFsc28gcmUtY2hlY2sgYWxsIHRoZSBydWxlcy4gSXQgc2F5cyAmIzM0O0NvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSYjMzQ7LiBUaGF0JiMzOTtzIHdoYXQgSSYjMzk7bSBsb29raW5nIGZvci4gV2hhdCBhYm91dCBlbWJlZGRlZCBTb0NzIGFuZCBwbGF0Zm9ybSBkcml2ZXJzPyBDYW4gdGhlIEdpYW5mYXIgZHJpdmVyIGJlIHByb2JlZCwgb3IgaXMgaXQgcHJlc2VudCBvbiB4ODZfNjQgb3IgQVJNNjQgdmlydHVhbCBtYWNoaW5lcz8KCkluIHN0YW5kYXJkIFFFTVUvR0NFIGVudmlyb25tZW50cywgJiMzNDtnaWFuZmFyJiMzNDsgaXMgc3BlY2lmaWMgdG8gRnJlZXNjYWxlLiBUaGVzZSBhcmVuJiMzOTt0IHJlYWNoYWJsZS4gR2lhbmZhciBpcyBhYnNlbnQgaW4geDg2XzY0IG9yIGFybTY0IHZpcnQgbWFjaGluZXMgYmVjYXVzZSBpdCYjMzk7cyBhIHBsYXRmb3JtIGRyaXZlciwgdXNpbmcgZGV2aWNlIHRyZWUgbWF0Y2hpbmcuIEl0IHJlcXVpcmVzIE1NSU8gcmVnaXN0ZXJzLCBpbnRlcnJ1cHRzLCBQSFlzLiBJIG5lZWQgdG8gY29uc2lkZXIsIGRvZXMgZnV6emluZyBldmVuIHVzZSBQb3dlclBDIG9yIExTMTAyMUE/IFN5emthbGxlciBmdXp6ZXMgeDg2XzY0IGFuZCBhcm02NCBpbiBRRU1VL0dDRSBpbnN0YW5jZXMsIHNvIHRoZXNlIGFyZSBwcm9iYWJseSB1bnJlYWNoYWJsZS4gRXZlbiBpZiBzb21lb25lIGNvbXBpbGVkIHRoZSBgQ09ORklHX0dJQU5GQVJgIG9wdGlvbiBvbiB4ODZfNjQgKGl0IG9ubHkgZGVwZW5kcyBvbiBIQVNfRE1BKSBjYW4gaXQgZXZlciBiZSBwcm9iZWQ/IEluIHg4Nl82NCwgQUNQSSwgYW5kIHN0YW5kYXJkIFFFTVUsIHRoZXJlIGlzIG5vIE9GIGRldmljZSB0cmVlIG5vZGUgbWF0Y2hpbmcgJiMzNDtnaWFuZmFyJiMzNDsgb3IgJiMzNDtmc2wsZXRzZWMyJiMzNDsuIEV2ZW4gd2l0aCBhbiBPRiBvdmVybGF5LCBgZ2Zhcl9wcm9iZWAgc3RpbGwgZGVtYW5kcyByZWdpc3RlcnMsIElSUXMsIFBIWSBidXMsIGV0Yy4gV2l0aG91dCB0aGUgaGFyZHdhcmUsIHRoZSBwcm9iZSB3aWxsIGZhaWwsIG9yIG5ldmVyIGV2ZW4gYmUgY2FsbGVkLiBDb25zZXF1ZW50bHksIGBmcmVlX3NrYl9yZXNvdXJjZXNgLCBgZ2Zhcl9jaGFuZ2VfbXR1YCwgYHJlc2V0X2dmYXJgLCBhbmQgYGdmYXJfaHd0c3RhbXBfc2V0YCBjYW4gTkVWRVIgYmUgY2FsbGVkLgoKT2theSwgbGV0JiMzOTtzIGxvb2sgYXQgdGhlIHBhdGNoIGNoYW5nZXMgaW4gbW9yZSBkZXRhaWwgaW4gYGdpYW5mYXIuY2AuIEl0IGhhcyB0aGVzZSBzcGVjaWZpYyBjaGFuZ2VzLiAxLiBgZnJlZV9za2JfcmVzb3VyY2VzYCBhZGRzIGEgY2hlY2ssIGFuZCB6ZXJvZXMgb3V0IHNvbWUgcG9pbnRlcnMuIDIuIGBnZmFyX2NoYW5nZV9tdHVgIGNhcHR1cmVzIGFuIGVycm9yIGFuZCByZXR1cm5zIGl0LiAzLiBgcmVzZXRfZ2ZhcmAgY2hhbmdlcyB0aGUgcmV0dXJuIHR5cGUgdG8gYGludGAsIGFuZCByZXR1cm5zIGFuIGVycm9yIGNvZGUgZnJvbSBgc3RhcnR1cF9nZmFyYC4gNC4gYGdmYXJfaHd0c3RhbXBfc2V0YCByZXR1cm5zIHRoZSByZXN1bHQgZnJvbSBgcmVzZXRfZ2ZhcmAgaW5zdGVhZCBvZiB6ZXJvLgoKQWxsIG9mIHRoZXNlIGNoYW5nZXMgYXJlIGxvY2F0ZWQgaW4gdGhlIGBkcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZ2lhbmZhci5jYCBmaWxlLiBUaGlzIGRyaXZlciBpcyBhIHBsYXRmb3JtIGRyaXZlciBzcGVjaWZpY2FsbHkgZm9yIEZyZWVzY2FsZSBNUEM4M3h4LCBNUEM4NXh4LCBNUEM4Nnh4LCBhbmQgTFMxMDIxQSBuZXR3b3JrIGNvbnRyb2xsZXJzLiBUaGlzIHJlcXVpcmVzIGRlZGljYXRlZCBoYXJkd2FyZSwgZGV2aWNlIHRyZWUgYmluZGluZ3MsIGFuZCBpdCYjMzk7cyBub3QgcG9zc2libGUgdG8gcnVuIG9yIHJlYWNoIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGZ1enppbmcgZW52aXJvbm1lbnRzIChRRU1VL0dDRSkuCgpUaGVyZWZvcmUsIHRoaXMgcGF0Y2ggZml0cyBkaXJlY3RseSBpbnRvIHRoZSBndWlkZWxpbmU6ICYjMzQ7Q29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLCBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlJiMzNDsuCgpTbywgbGV0JiMzOTtzIHN1bW1hcml6ZToKLSAgIFdvcnRoRnV6emluZzogZmFsc2UKLSAgIEZvY3VzU3ltYm9sczogW10KLSAgIEVuYWJsZUNvbmZpZ3M6IFtdCi0gICBSZWFzb25pbmc6IEFsbCB0aGUgY2hhbmdlcyBhcmUgaW4gdGhlIGBnaWFuZmFyYCBldGhlcm5ldCBkcml2ZXIgZm9yIEZyZWVzY2FsZSBTb0NzIChQb3dlclBDIE1QQzgzeHgvODV4eC84Nnh4LCBBUk0gTFMxMDIxQSkuIFRoaXMgaXMgYW4gT0YgcGxhdGZvcm0gZHJpdmVyLCByZXF1aXJpbmcgZGVkaWNhdGVkIFNvQyBoYXJkd2FyZS4gU28sIGl0JiMzOTtzIG5vdCBhdmFpbGFibGUgb3IgcHJvYmVhYmxlIGluIHN0YW5kYXJkIFFFTVUvR0NFIHZpcnR1YWxpemVkIGZ1enppbmcgZW52aXJvbm1lbnRzLgoKSSYjMzk7bSByZWFkeSB0byBjYWxsIHRoZSBgc2V0LXJlc3VsdHNgIHRvb2wgbm93LiBFdmVyeXRoaW5nIGNoZWNrcyBvdXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI4IDIyOjQ3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogW10sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgY2hhbmdlcyBhcmUgaXNvbGF0ZWQgdG8gZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2dpYW5mYXIuYywgd2hpY2ggaXMgYSBwbGF0Zm9ybSBkcml2ZXIgZm9yIEZyZWVzY2FsZS9OWFAgU29DcyAoUG93ZXJQQyBNUEM4M3h4Lzg1eHgvODZ4eCBhbmQgQVJNIExTMTAyMUEpLiBJdCByZXF1aXJlcyBzcGVjaWZpYyBEZXZpY2UgVHJlZSBub2RlcyBhbmQgcGh5c2ljYWwgU29DIGhhcmR3YXJlLCBtYWtpbmcgaXQgaW1wb3NzaWJsZSB0byBwcm9iZSBhbmQgcmVhY2ggaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZnV6emluZyBlbnZpcm9ubWVudHMgc3VjaCBhcyBRRU1VIG9yIEdDRS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIGNoYW5nZXMgYXJlIGlzb2xhdGVkIHRvIGRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9naWFuZmFyLmMsIHdoaWNoIGlzIGEgcGxhdGZvcm0gZHJpdmVyIGZvciBGcmVlc2NhbGUvTlhQIFNvQ3MgKFBvd2VyUEMgTVBDODN4eC84NXh4Lzg2eHggYW5kIEFSTSBMUzEwMjFBKS4gSXQgcmVxdWlyZXMgc3BlY2lmaWMgRGV2aWNlIFRyZWUgbm9kZXMgYW5kIHBoeXNpY2FsIFNvQyBoYXJkd2FyZSwgbWFraW5nIGl0IGltcG9zc2libGUgdG8gcHJvYmUgYW5kIHJlYWNoIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGZ1enppbmcgZW52aXJvbm1lbnRzIHN1Y2ggYXMgUUVNVSBvciBHQ0UuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOCAyMjo0NzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMjhUMjI6NDY6NTguMjg3OTU0ODExWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDE4MTU3Njc1NTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJcIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBjaGFuZ2VzIGFyZSBpc29sYXRlZCB0byBkcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZ2lhbmZhci5jLCB3aGljaCBpcyBhIHBsYXRmb3JtIGRyaXZlciBmb3IgRnJlZXNjYWxlL05YUCBTb0NzIChQb3dlclBDIE1QQzgzeHgvODV4eC84Nnh4IGFuZCBBUk0gTFMxMDIxQSkuIEl0IHJlcXVpcmVzIHNwZWNpZmljIERldmljZSBUcmVlIG5vZGVzIGFuZCBwaHlzaWNhbCBTb0MgaGFyZHdhcmUsIG1ha2luZyBpdCBpbXBvc3NpYmxlIHRvIHByb2JlIGFuZCByZWFjaCBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBmdXp6aW5nIGVudmlyb25tZW50cyBzdWNoIGFzIFFFTVUgb3IgR0NFLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjhUMjI6NDY6NTguMjg3OTYyMDIxWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMzExODMyOTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCAzZDhlMDRmOTE2MGIxZTZiZjAzYWExMWQzNTI0YjlmYmIwNjdmNWQzXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBGcmkgQXVnIDI4IDIyOjQ2OjU3IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9naWFuZmFyLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZ2lhbmZhci5jXFxuaW5kZXggY2Y2MzZmYzVhYWZhYy4uZDBhYzhhOTU4Njk2ZCAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZ2lhbmZhci5jXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2dpYW5mYXIuY1xcbkBAIC0xMTQwLDExICsxMTQwLDI0IEBAIHN0YXRpYyB2b2lkIGZyZWVfc2tiX3Jlc291cmNlcyhzdHJ1Y3QgZ2Zhcl9wcml2YXRlICpwcml2KVxcbiBcXHRcXHRcXHRmcmVlX3NrYl9yeF9xdWV1ZShyeF9xdWV1ZSk7XFxuIFxcdH1cXG4gXFxuLVxcdGRtYV9mcmVlX2NvaGVyZW50KHByaXYtXFx1MDAzZWRldixcXG4tXFx0XFx0XFx0ICBzaXplb2Yoc3RydWN0IHR4YmQ4KSAqIHByaXYtXFx1MDAzZXRvdGFsX3R4X3Jpbmdfc2l6ZSArXFxuLVxcdFxcdFxcdCAgc2l6ZW9mKHN0cnVjdCByeGJkOCkgKiBwcml2LVxcdTAwM2V0b3RhbF9yeF9yaW5nX3NpemUsXFxuLVxcdFxcdFxcdCAgcHJpdi1cXHUwMDNldHhfcXVldWVbMF0tXFx1MDAzZXR4X2JkX2Jhc2UsXFxuLVxcdFxcdFxcdCAgcHJpdi1cXHUwMDNldHhfcXVldWVbMF0tXFx1MDAzZXR4X2JkX2RtYV9iYXNlKTtcXG4rXFx0aWYgKHByaXYtXFx1MDAzZXR4X3F1ZXVlWzBdLVxcdTAwM2V0eF9iZF9iYXNlKSB7XFxuK1xcdFxcdGRtYV9mcmVlX2NvaGVyZW50KHByaXYtXFx1MDAzZWRldixcXG4rXFx0XFx0XFx0XFx0ICBzaXplb2Yoc3RydWN0IHR4YmQ4KSAqXFxuK1xcdFxcdFxcdFxcdCAgcHJpdi1cXHUwMDNldG90YWxfdHhfcmluZ19zaXplICtcXG4rXFx0XFx0XFx0XFx0ICBzaXplb2Yoc3RydWN0IHJ4YmQ4KSAqXFxuK1xcdFxcdFxcdFxcdCAgcHJpdi1cXHUwMDNldG90YWxfcnhfcmluZ19zaXplLFxcbitcXHRcXHRcXHRcXHQgIHByaXYtXFx1MDAzZXR4X3F1ZXVlWzBdLVxcdTAwM2V0eF9iZF9iYXNlLFxcbitcXHRcXHRcXHRcXHQgIHByaXYtXFx1MDAzZXR4X3F1ZXVlWzBdLVxcdTAwM2V0eF9iZF9kbWFfYmFzZSk7XFxuK1xcbitcXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgcHJpdi1cXHUwMDNlbnVtX3R4X3F1ZXVlczsgaSsrKSB7XFxuK1xcdFxcdFxcdHByaXYtXFx1MDAzZXR4X3F1ZXVlW2ldLVxcdTAwM2V0eF9iZF9iYXNlID0gTlVMTDtcXG4rXFx0XFx0XFx0cHJpdi1cXHUwMDNldHhfcXVldWVbaV0tXFx1MDAzZXR4X2JkX2RtYV9iYXNlID0gMDtcXG4rXFx0XFx0fVxcbitcXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgcHJpdi1cXHUwMDNlbnVtX3J4X3F1ZXVlczsgaSsrKSB7XFxuK1xcdFxcdFxcdHByaXYtXFx1MDAzZXJ4X3F1ZXVlW2ldLVxcdTAwM2VyeF9iZF9iYXNlID0gTlVMTDtcXG4rXFx0XFx0XFx0cHJpdi1cXHUwMDNlcnhfcXVldWVbaV0tXFx1MDAzZXJ4X2JkX2RtYV9iYXNlID0gMDtcXG4rXFx0XFx0fVxcbitcXHR9XFxuIH1cXG4gXFxuIHZvaWQgc3RvcF9nZmFyKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuQEAgLTIwMDMsNiArMjAxNiw3IEBAIHN0YXRpYyBpbnQgZ2Zhcl9zZXRfbWFjX2FkZHJlc3Moc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4gc3RhdGljIGludCBnZmFyX2NoYW5nZV9tdHUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IG5ld19tdHUpXFxuIHtcXG4gXFx0c3RydWN0IGdmYXJfcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7XFxuK1xcdGludCBlcnIgPSAwO1xcbiBcXG4gXFx0d2hpbGUgKHRlc3RfYW5kX3NldF9iaXRfbG9jayhHRkFSX1JFU0VUVElORywgXFx1MDAyNnByaXYtXFx1MDAzZXN0YXRlKSlcXG4gXFx0XFx0Y3B1X3JlbGF4KCk7XFxuQEAgLTIwMTMsMjQgKzIwMjcsMjcgQEAgc3RhdGljIGludCBnZmFyX2NoYW5nZV9tdHUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IG5ld19tdHUpXFxuIFxcdFdSSVRFX09OQ0UoZGV2LVxcdTAwM2VtdHUsIG5ld19tdHUpO1xcbiBcXG4gXFx0aWYgKGRldi1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBJRkZfVVApXFxuLVxcdFxcdHN0YXJ0dXBfZ2ZhcihkZXYpO1xcbitcXHRcXHRlcnIgPSBzdGFydHVwX2dmYXIoZGV2KTtcXG4gXFxuIFxcdGNsZWFyX2JpdF91bmxvY2soR0ZBUl9SRVNFVFRJTkcsIFxcdTAwMjZwcml2LVxcdTAwM2VzdGF0ZSk7XFxuIFxcbi1cXHRyZXR1cm4gMDtcXG4rXFx0cmV0dXJuIGVycjtcXG4gfVxcbiBcXG4tc3RhdGljIHZvaWQgcmVzZXRfZ2ZhcihzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcXG4rc3RhdGljIGludCByZXNldF9nZmFyKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KVxcbiB7XFxuIFxcdHN0cnVjdCBnZmFyX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihuZGV2KTtcXG4rXFx0aW50IHJldDtcXG4gXFxuIFxcdHdoaWxlICh0ZXN0X2FuZF9zZXRfYml0X2xvY2soR0ZBUl9SRVNFVFRJTkcsIFxcdTAwMjZwcml2LVxcdTAwM2VzdGF0ZSkpXFxuIFxcdFxcdGNwdV9yZWxheCgpO1xcbiBcXG4gXFx0c3RvcF9nZmFyKG5kZXYpO1xcbi1cXHRzdGFydHVwX2dmYXIobmRldik7XFxuK1xcdHJldCA9IHN0YXJ0dXBfZ2ZhcihuZGV2KTtcXG4gXFxuIFxcdGNsZWFyX2JpdF91bmxvY2soR0ZBUl9SRVNFVFRJTkcsIFxcdTAwMjZwcml2LVxcdTAwM2VzdGF0ZSk7XFxuK1xcbitcXHRyZXR1cm4gcmV0O1xcbiB9XFxuIFxcbiAvKiBnZmFyX3Jlc2V0X3Rhc2sgZ2V0cyBzY2hlZHVsZWQgd2hlbiBhIHBhY2tldCBoYXMgbm90IGJlZW5cXG5AQCAtMjA1OCw2ICsyMDc1LDcgQEAgc3RhdGljIGludCBnZmFyX2h3dHN0YW1wX3NldChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxcbiBcXHRcXHRcXHQgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcXG4ge1xcbiBcXHRzdHJ1Y3QgZ2Zhcl9wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcXG4rXFx0aW50IHJldCA9IDA7XFxuIFxcbiBcXHRzd2l0Y2ggKGNvbmZpZy1cXHUwMDNldHhfdHlwZSkge1xcbiBcXHRjYXNlIEhXVFNUQU1QX1RYX09GRjpcXG5AQCAtMjA3Niw3ICsyMDk0LDcgQEAgc3RhdGljIGludCBnZmFyX2h3dHN0YW1wX3NldChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxcbiBcXHRjYXNlIEhXVFNUQU1QX0ZJTFRFUl9OT05FOlxcbiBcXHRcXHRpZiAocHJpdi1cXHUwMDNlaHd0c19yeF9lbikge1xcbiBcXHRcXHRcXHRwcml2LVxcdTAwM2Vod3RzX3J4X2VuID0gMDtcXG4tXFx0XFx0XFx0cmVzZXRfZ2ZhcihuZXRkZXYpO1xcbitcXHRcXHRcXHRyZXQgPSByZXNldF9nZmFyKG5ldGRldik7XFxuIFxcdFxcdH1cXG4gXFx0XFx0YnJlYWs7XFxuIFxcdGRlZmF1bHQ6XFxuQEAgLTIwODQsMTMgKzIxMDIsMTMgQEAgc3RhdGljIGludCBnZmFyX2h3dHN0YW1wX3NldChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxcbiBcXHRcXHRcXHRyZXR1cm4gLUVSQU5HRTtcXG4gXFx0XFx0aWYgKCFwcml2LVxcdTAwM2Vod3RzX3J4X2VuKSB7XFxuIFxcdFxcdFxcdHByaXYtXFx1MDAzZWh3dHNfcnhfZW4gPSAxO1xcbi1cXHRcXHRcXHRyZXNldF9nZmFyKG5ldGRldik7XFxuK1xcdFxcdFxcdHJldCA9IHJlc2V0X2dmYXIobmV0ZGV2KTtcXG4gXFx0XFx0fVxcbiBcXHRcXHRjb25maWctXFx1MDAzZXJ4X2ZpbHRlciA9IEhXVFNUQU1QX0ZJTFRFUl9BTEw7XFxuIFxcdFxcdGJyZWFrO1xcbiBcXHR9XFxuIFxcbi1cXHRyZXR1cm4gMDtcXG4rXFx0cmV0dXJuIHJldDtcXG4gfVxcbiBcXG4gc3RhdGljIGludCBnZmFyX2h3dHN0YW1wX2dldChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOFQyMjo0Njo1OC42MTk4NjMxODdaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjQxNDgzODQ3MTAwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBjaGFuZ2VzIGFyZSBpc29sYXRlZCB0byBkcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZ2lhbmZhci5jLCB3aGljaCBpcyBhIHBsYXRmb3JtIGRyaXZlciBmb3IgRnJlZXNjYWxlL05YUCBTb0NzIChQb3dlclBDIE1QQzgzeHgvODV4eC84Nnh4IGFuZCBBUk0gTFMxMDIxQSkuIEl0IHJlcXVpcmVzIHNwZWNpZmljIERldmljZSBUcmVlIG5vZGVzIGFuZCBwaHlzaWNhbCBTb0MgaGFyZHdhcmUsIG1ha2luZyBpdCBpbXBvc3NpYmxlIHRvIHByb2JlIGFuZCByZWFjaCBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBmdXp6aW5nIGVudmlyb25tZW50cyBzdWNoIGFzIFFFTVUgb3IgR0NFLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgM2Q4ZTA0ZjkxNjBiMWU2YmYwM2FhMTFkMzUyNGI5ZmJiMDY3ZjVkM1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgQXVnIDI4IDIyOjQ2OjU3IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2dpYW5mYXIuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9naWFuZmFyLmNcbmluZGV4IGNmNjM2ZmM1YWFmYWMuLmQwYWM4YTk1ODY5NmQgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZ2lhbmZhci5jXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZ2lhbmZhci5jXG5AQCAtMTE0MCwxMSArMTE0MCwyNCBAQCBzdGF0aWMgdm9pZCBmcmVlX3NrYl9yZXNvdXJjZXMoc3RydWN0IGdmYXJfcHJpdmF0ZSAqcHJpdilcbiBcdFx0XHRmcmVlX3NrYl9yeF9xdWV1ZShyeF9xdWV1ZSk7XG4gXHR9XG4gXG4tXHRkbWFfZnJlZV9jb2hlcmVudChwcml2LVx1MDAzZWRldixcbi1cdFx0XHQgIHNpemVvZihzdHJ1Y3QgdHhiZDgpICogcHJpdi1cdTAwM2V0b3RhbF90eF9yaW5nX3NpemUgK1xuLVx0XHRcdCAgc2l6ZW9mKHN0cnVjdCByeGJkOCkgKiBwcml2LVx1MDAzZXRvdGFsX3J4X3Jpbmdfc2l6ZSxcbi1cdFx0XHQgIHByaXYtXHUwMDNldHhfcXVldWVbMF0tXHUwMDNldHhfYmRfYmFzZSxcbi1cdFx0XHQgIHByaXYtXHUwMDNldHhfcXVldWVbMF0tXHUwMDNldHhfYmRfZG1hX2Jhc2UpO1xuK1x0aWYgKHByaXYtXHUwMDNldHhfcXVldWVbMF0tXHUwMDNldHhfYmRfYmFzZSkge1xuK1x0XHRkbWFfZnJlZV9jb2hlcmVudChwcml2LVx1MDAzZWRldixcbitcdFx0XHRcdCAgc2l6ZW9mKHN0cnVjdCB0eGJkOCkgKlxuK1x0XHRcdFx0ICBwcml2LVx1MDAzZXRvdGFsX3R4X3Jpbmdfc2l6ZSArXG4rXHRcdFx0XHQgIHNpemVvZihzdHJ1Y3QgcnhiZDgpICpcbitcdFx0XHRcdCAgcHJpdi1cdTAwM2V0b3RhbF9yeF9yaW5nX3NpemUsXG4rXHRcdFx0XHQgIHByaXYtXHUwMDNldHhfcXVldWVbMF0tXHUwMDNldHhfYmRfYmFzZSxcbitcdFx0XHRcdCAgcHJpdi1cdTAwM2V0eF9xdWV1ZVswXS1cdTAwM2V0eF9iZF9kbWFfYmFzZSk7XG4rXG4rXHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHByaXYtXHUwMDNlbnVtX3R4X3F1ZXVlczsgaSsrKSB7XG4rXHRcdFx0cHJpdi1cdTAwM2V0eF9xdWV1ZVtpXS1cdTAwM2V0eF9iZF9iYXNlID0gTlVMTDtcbitcdFx0XHRwcml2LVx1MDAzZXR4X3F1ZXVlW2ldLVx1MDAzZXR4X2JkX2RtYV9iYXNlID0gMDtcbitcdFx0fVxuK1x0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBwcml2LVx1MDAzZW51bV9yeF9xdWV1ZXM7IGkrKykge1xuK1x0XHRcdHByaXYtXHUwMDNlcnhfcXVldWVbaV0tXHUwMDNlcnhfYmRfYmFzZSA9IE5VTEw7XG4rXHRcdFx0cHJpdi1cdTAwM2VyeF9xdWV1ZVtpXS1cdTAwM2VyeF9iZF9kbWFfYmFzZSA9IDA7XG4rXHRcdH1cbitcdH1cbiB9XG4gXG4gdm9pZCBzdG9wX2dmYXIoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbkBAIC0yMDAzLDYgKzIwMTYsNyBAQCBzdGF0aWMgaW50IGdmYXJfc2V0X21hY19hZGRyZXNzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4gc3RhdGljIGludCBnZmFyX2NoYW5nZV9tdHUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IG5ld19tdHUpXG4ge1xuIFx0c3RydWN0IGdmYXJfcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7XG4rXHRpbnQgZXJyID0gMDtcbiBcbiBcdHdoaWxlICh0ZXN0X2FuZF9zZXRfYml0X2xvY2soR0ZBUl9SRVNFVFRJTkcsIFx1MDAyNnByaXYtXHUwMDNlc3RhdGUpKVxuIFx0XHRjcHVfcmVsYXgoKTtcbkBAIC0yMDEzLDI0ICsyMDI3LDI3IEBAIHN0YXRpYyBpbnQgZ2Zhcl9jaGFuZ2VfbXR1KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBuZXdfbXR1KVxuIFx0V1JJVEVfT05DRShkZXYtXHUwMDNlbXR1LCBuZXdfbXR1KTtcbiBcbiBcdGlmIChkZXYtXHUwMDNlZmxhZ3MgXHUwMDI2IElGRl9VUClcbi1cdFx0c3RhcnR1cF9nZmFyKGRldik7XG4rXHRcdGVyciA9IHN0YXJ0dXBfZ2ZhcihkZXYpO1xuIFxuIFx0Y2xlYXJfYml0X3VubG9jayhHRkFSX1JFU0VUVElORywgXHUwMDI2cHJpdi1cdTAwM2VzdGF0ZSk7XG4gXG4tXHRyZXR1cm4gMDtcbitcdHJldHVybiBlcnI7XG4gfVxuIFxuLXN0YXRpYyB2b2lkIHJlc2V0X2dmYXIoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpXG4rc3RhdGljIGludCByZXNldF9nZmFyKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KVxuIHtcbiBcdHN0cnVjdCBnZmFyX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihuZGV2KTtcbitcdGludCByZXQ7XG4gXG4gXHR3aGlsZSAodGVzdF9hbmRfc2V0X2JpdF9sb2NrKEdGQVJfUkVTRVRUSU5HLCBcdTAwMjZwcml2LVx1MDAzZXN0YXRlKSlcbiBcdFx0Y3B1X3JlbGF4KCk7XG4gXG4gXHRzdG9wX2dmYXIobmRldik7XG4tXHRzdGFydHVwX2dmYXIobmRldik7XG4rXHRyZXQgPSBzdGFydHVwX2dmYXIobmRldik7XG4gXG4gXHRjbGVhcl9iaXRfdW5sb2NrKEdGQVJfUkVTRVRUSU5HLCBcdTAwMjZwcml2LVx1MDAzZXN0YXRlKTtcbitcbitcdHJldHVybiByZXQ7XG4gfVxuIFxuIC8qIGdmYXJfcmVzZXRfdGFzayBnZXRzIHNjaGVkdWxlZCB3aGVuIGEgcGFja2V0IGhhcyBub3QgYmVlblxuQEAgLTIwNTgsNiArMjA3NSw3IEBAIHN0YXRpYyBpbnQgZ2Zhcl9od3RzdGFtcF9zZXQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcbiBcdFx0XHQgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbiB7XG4gXHRzdHJ1Y3QgZ2Zhcl9wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcbitcdGludCByZXQgPSAwO1xuIFxuIFx0c3dpdGNoIChjb25maWctXHUwMDNldHhfdHlwZSkge1xuIFx0Y2FzZSBIV1RTVEFNUF9UWF9PRkY6XG5AQCAtMjA3Niw3ICsyMDk0LDcgQEAgc3RhdGljIGludCBnZmFyX2h3dHN0YW1wX3NldChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxuIFx0Y2FzZSBIV1RTVEFNUF9GSUxURVJfTk9ORTpcbiBcdFx0aWYgKHByaXYtXHUwMDNlaHd0c19yeF9lbikge1xuIFx0XHRcdHByaXYtXHUwMDNlaHd0c19yeF9lbiA9IDA7XG4tXHRcdFx0cmVzZXRfZ2ZhcihuZXRkZXYpO1xuK1x0XHRcdHJldCA9IHJlc2V0X2dmYXIobmV0ZGV2KTtcbiBcdFx0fVxuIFx0XHRicmVhaztcbiBcdGRlZmF1bHQ6XG5AQCAtMjA4NCwxMyArMjEwMiwxMyBAQCBzdGF0aWMgaW50IGdmYXJfaHd0c3RhbXBfc2V0KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXG4gXHRcdFx0cmV0dXJuIC1FUkFOR0U7XG4gXHRcdGlmICghcHJpdi1cdTAwM2Vod3RzX3J4X2VuKSB7XG4gXHRcdFx0cHJpdi1cdTAwM2Vod3RzX3J4X2VuID0gMTtcbi1cdFx0XHRyZXNldF9nZmFyKG5ldGRldik7XG4rXHRcdFx0cmV0ID0gcmVzZXRfZ2ZhcihuZXRkZXYpO1xuIFx0XHR9XG4gXHRcdGNvbmZpZy1cdTAwM2VyeF9maWx0ZXIgPSBIV1RTVEFNUF9GSUxURVJfQUxMO1xuIFx0XHRicmVhaztcbiBcdH1cbiBcbi1cdHJldHVybiAwO1xuK1x0cmV0dXJuIHJldDtcbiB9XG4gXG4gc3RhdGljIGludCBnZmFyX2h3dHN0YW1wX2dldChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjhUMjI6NDY6NTguNjE5ODY0NTU3WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTEzODUwMTQ3MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipSZXZpZXdpbmcgdGhlIGdpYW5mYXIuYyBQYXRjaCoqXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgaW50byB0aGlzIGBkcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZ2lhbmZhci5jYCBwYXRjaC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIFwiV2hhdCBleGFjdGx5ICppcyogZ2lhbmZhcj9cIiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgc2NvcGUgb2YgdGhpcyBkcml2ZXIgYmVmb3JlIEkgY2FuIHByb3Blcmx5IGV2YWx1YXRlIHRoZSBjaGFuZ2VzLiBJcyB0aGlzIHNvbWV0aGluZyB0aGF0J3MgcmVsZXZhbnQgdG8gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIEkgbWlnaHQgYmUgd29ya2luZyBpbiwgb3IgaXMgaXQgc3BlY2lmaWMgdG8gcGh5c2ljYWwgRnJlZXNjYWxlL1Bvd2VyUEMgU29DIEV0aGVybmV0IGNvbnRyb2xsZXJzPyBJIGhhdmUgdG8ga25vdyBpdHMgYXJjaGl0ZWN0dXJhbCBjb250ZXh0LlxuXG5TbywgZmlyc3QgdGhpbmdzIGZpcnN0LCBJJ20gZ29pbmcgdG8gaGVhZCBzdHJhaWdodCBmb3IgdGhlIGBLY29uZmlnYCBmb3IgYGdpYW5mYXIuY2AuIFRoYXQncyB3aGVyZSB0aGUgcmVhbCBzdG9yeSBiZWdpbnMuIFRoZSBLY29uZmlnIHdpbGwgdGVsbCBtZSB0aGUgZGVwZW5kZW5jaWVzLCB0aGUgdGFyZ2V0IHBsYXRmb3JtcywgYW5kIG1vc3QgaW1wb3J0YW50bHksIGFueSBjb25maWd1cmF0aW9uIG9wdGlvbnMgdGhhdCBtaWdodCBpbmZsdWVuY2UgdGhpcyBwYXRjaCdzIGJlaGF2aW91ci4gSXQncyB0aGUga2V5IHRvIHVubG9ja2luZyB0aGUgdHJ1ZSBpbXBsaWNhdGlvbnMgb2YgdGhlc2UgY2hhbmdlcywgYW5kIEkgbmVlZCB0byBmdWxseSB1bmRlcnN0YW5kIGl0cyBjb250ZXh0IGJlZm9yZSBnb2luZyBkZWVwZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMyNTcsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4MSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI4VDIyOjQ3OjAzLjc1ODM2OTAwOFoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjAwNzU5OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJHSUFORkFSXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvS2NvbmZpZz04OT1jb25maWcgVUdFVEhfVFhfT05fREVNQU5EXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvS2NvbmZpZy05Mi1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvS2NvbmZpZzo5Mzpjb25maWcgR0lBTkZBUlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9LY29uZmlnLTk0LVxcdHRyaXN0YXRlIFxcXCJHaWFuZmFyIEV0aGVybmV0XFxcIlxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL01ha2VmaWxlPTE1PW9iai0kKENPTkZJR19GU0xfWEdNQUNfTURJTykgKz0geGdtYWNfbWRpby5vXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL01ha2VmaWxlOjE2Om9iai0kKENPTkZJR19HSUFORkFSKSArPSBnaWFuZmFyX2RyaXZlci5vXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL01ha2VmaWxlLTE3LWdpYW5mYXJfZHJpdmVyLW9ianMgOj0gZ2lhbmZhci5vIFxcXFxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mc2xfcHFfbWRpby5jPTE2ND1zdGF0aWMgaW50IGZzbF9wcV9tZGlvX3Jlc2V0KHN0cnVjdCBtaWlfYnVzICpidXMpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZnNsX3BxX21kaW8uYy0xOTQtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZzbF9wcV9tZGlvLmM6MTk1OiNpZiBJU19FTkFCTEVEKENPTkZJR19HSUFORkFSKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mc2xfcHFfbWRpby5jLTE5Ni0vKlxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZzbF9wcV9tZGlvLmM9MzA1PXN0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIGZzbF9wcV9tZGlvX21hdGNoW10gPSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZzbF9wcV9tZGlvLmM6MzA2OiNpZiBJU19FTkFCTEVEKENPTkZJR19HSUFORkFSKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mc2xfcHFfbWRpby5jLTMwNy1cXHR7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZ2lhbmZhci5jPTI3OD1zdGF0aWMgdm9pZCBnZmFyX2dldF9zdGF0czY0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBydG5sX2xpbmtfc3RhdHM2NCAqc3RhdHMpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZ2lhbmZhci5jLTI5My1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZ2lhbmZhci5jOjI5NDpcXHRpZiAocHJpdi1cXHUwMDNlZGV2aWNlX2ZsYWdzIFxcdTAwMjYgRlNMX0dJQU5GQVJfREVWX0hBU19STU9OKSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2dpYW5mYXIuYy0yOTUtXFx0XFx0c3RydWN0IHJtb25fbWliIF9faW9tZW0gKnJtb24gPSBcXHUwMDI2cHJpdi1cXHUwMDNlZ2ZhcmdycFswXS5yZWdzLVxcdTAwM2VybW9uO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2dpYW5mYXIuYz01Nzg9c3RhdGljIHBoeV9pbnRlcmZhY2VfdCBnZmFyX2dldF9pbnRlcmZhY2Uoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9naWFuZmFyLmMtNjEyLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9naWFuZmFyLmM6NjEzOlxcdGlmIChwcml2LVxcdTAwM2VkZXZpY2VfZmxhZ3MgXFx1MDAyNiBGU0xfR0lBTkZBUl9ERVZfSEFTX0dJR0FCSVQpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2dpYW5mYXIuYy02MTQtXFx0XFx0cmV0dXJuIFBIWV9JTlRFUkZBQ0VfTU9ERV9HTUlJO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2dpYW5mYXIuYz02MTk9c3RhdGljIGludCBnZmFyX29mX2luaXQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqb2ZkZXYsIHN0cnVjdCBuZXRfZGV2aWNlICoqcGRldilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9naWFuZmFyLmMtNzMyLVxcdGlmIChvZl9wcm9wZXJ0eV9yZWFkX2Jvb2wobnAsIFxcXCJiZC1zdGFzaFxcXCIpKSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2dpYW5mYXIuYzo3MzM6XFx0XFx0cHJpdi1cXHUwMDNlZGV2aWNlX2ZsYWdzIHw9IEZTTF9HSUFORkFSX0RFVl9IQVNfQkRfU1RBU0hJTkc7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2dpYW5mYXIuYy03MzQtXFx0XFx0cHJpdi1cXHUwMDNlYmRfc3Rhc2hfZW4gPSAxO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2dpYW5mYXIuYy03NDctXFx0aWYgKHN0YXNoX2xlbiB8fCBzdGFzaF9pZHgpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2dpYW5mYXIuYzo3NDg6XFx0XFx0cHJpdi1cXHUwMDNlZGV2aWNlX2ZsYWdzIHw9IEZTTF9HSUFORkFSX0RFVl9IQVNfQlVGX1NUQVNISU5HO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9naWFuZmFyLmMtNzQ5LVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2dpYW5mYXIuYy03NTgtXFx0aWYgKG1vZGVsIFxcdTAwMjZcXHUwMDI2ICFzdHJjYXNlY21wKG1vZGVsLCBcXFwiVFNFQ1xcXCIpKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9naWFuZmFyLmM6NzU5OlxcdFxcdHByaXYtXFx1MDAzZWRldmljZV9mbGFncyB8PSBGU0xfR0lBTkZBUl9ERVZfSEFTX0dJR0FCSVQgfFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9naWFuZmFyLmM6NzYwOlxcdFxcdFxcdFxcdCAgICAgRlNMX0dJQU5GQVJfREVWX0hBU19DT0FMRVNDRSB8XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2dpYW5mYXIuYzo3NjE6XFx0XFx0XFx0XFx0ICAgICBGU0xfR0lBTkZBUl9ERVZfSEFTX1JNT04gfFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9naWFuZmFyLmM6NzYyOlxcdFxcdFxcdFxcdCAgICAgRlNMX0dJQU5GQVJfREVWX0hBU19NVUxUSV9JTlRSO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9naWFuZmFyLmMtNzYzLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9naWFuZmFyLmMtNzY0LVxcdGlmIChtb2RlbCBcXHUwMDI2XFx1MDAyNiAhc3RyY2FzZWNtcChtb2RlbCwgXFxcImVUU0VDXFxcIikpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2dpYW5mYXIuYzo3NjU6XFx0XFx0cHJpdi1cXHUwMDNlZGV2aWNlX2ZsYWdzIHw9IEZTTF9HSUFORkFSX0RFVl9IQVNfR0lHQUJJVCB8XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2dpYW5mYXIuYzo3NjY6XFx0XFx0XFx0XFx0ICAgICBGU0xfR0lBTkZBUl9ERVZfSEFTX0NPQUxFU0NFIHxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZ2lhbmZhci5jOjc2NzpcXHRcXHRcXHRcXHQgICAgIEZTTF9HSUFORkFSX0RFVl9IQVNfUk1PTiB8XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2dpYW5mYXIuYzo3Njg6XFx0XFx0XFx0XFx0ICAgICBGU0xfR0lBTkZBUl9ERVZfSEFTX01VTFRJX0lOVFIgfFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9naWFuZmFyLmM6NzY5OlxcdFxcdFxcdFxcdCAgICAgRlNMX0dJQU5GQVJfREVWX0hBU19DU1VNIHxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZ2lhbmZhci5jOjc3MDpcXHRcXHRcXHRcXHQgICAgIEZTTF9HSUFORkFSX0RFVl9IQVNfVkxBTiB8XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2dpYW5mYXIuYzo3NzE6XFx0XFx0XFx0XFx0ICAgICBGU0xfR0lBTkZBUl9ERVZfSEFTX01BR0lDX1BBQ0tFVCB8XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2dpYW5mYXIuYzo3NzI6XFx0XFx0XFx0XFx0ICAgICBGU0xfR0lBTkZBUl9ERVZfSEFTX0VYVEVOREVEX0hBU0ggfFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9naWFuZmFyLmM6NzczOlxcdFxcdFxcdFxcdCAgICAgRlNMX0dJQU5GQVJfREVWX0hBU19USU1FUiB8XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2dpYW5mYXIuYzo3NzQ6XFx0XFx0XFx0XFx0ICAgICBGU0xfR0lBTkZBUl9ERVZfSEFTX1JYX0ZJTEVSO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9naWFuZmFyLmMtNzc1LVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2dpYW5mYXIuYy03ODYtXFx0aWYgKG9mX3Byb3BlcnR5X3JlYWRfYm9vbChucCwgXFxcImZzbCxtYWdpYy1wYWNrZXRcXFwiKSlcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZ2lhbmZhci5jOjc4NzpcXHRcXHRwcml2LVxcdTAwM2VkZXZpY2VfZmxhZ3MgfD0gRlNMX0dJQU5GQVJfREVWX0hBU19NQUdJQ19QQUNLRVQ7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2dpYW5mYXIuYy03ODgtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2dpYW5mYXIuYy03ODktXFx0aWYgKG9mX3Byb3BlcnR5X3JlYWRfYm9vbChucCwgXFxcImZzbCx3YWtlLW9uLWZpbGVyXFxcIikpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2dpYW5mYXIuYzo3OTA6XFx0XFx0cHJpdi1cXHUwMDNlZGV2aWNlX2ZsYWdzIHw9IEZTTF9HSUFORkFSX0RFVl9IQVNfV0FLRV9PTl9GSUxFUjtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZ2lhbmZhci5jLTc5MS1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9naWFuZmFyLmM9OTQzPXN0YXRpYyB2b2lkIGdmYXJfaW5pdF9hZGRyX2hhc2hfdGFibGUoc3RydWN0IGdmYXJfcHJpdmF0ZSAqcHJpdilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9naWFuZmFyLmMtOTQ2LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9naWFuZmFyLmM6OTQ3OlxcdGlmIChwcml2LVxcdTAwM2VkZXZpY2VfZmxhZ3MgXFx1MDAyNiBGU0xfR0lBTkZBUl9ERVZfSEFTX0VYVEVOREVEX0hBU0gpIHtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZ2lhbmZhci5jLTk0OC1cXHRcXHRwcml2LVxcdTAwM2VleHRlbmRlZF9oYXNoID0gMTtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9naWFuZmFyLmM9MTY1Mz1zdGF0aWMgaW50IGluaXRfcGh5KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZ2lhbmZhci5jLTE2NzMtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2dpYW5mYXIuYzoxNjc0OlxcdGlmICghKHByaXYtXFx1MDAzZWRldmljZV9mbGFncyBcXHUwMDI2IEZTTF9HSUFORkFSX0RFVl9IQVNfR0lHQUJJVCkpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2dpYW5mYXIuYy0xNjc1LVxcdFxcdHBoeV9zZXRfbWF4X3NwZWVkKHBoeWRldiwgU1BFRURfMTAwKTtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9naWFuZmFyLmM9MjA3Mz1zdGF0aWMgaW50IGdmYXJfaHd0c3RhbXBfc2V0KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZ2lhbmZhci5jLTIwODQtXFx0Y2FzZSBIV1RTVEFNUF9UWF9PTjpcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZ2lhbmZhci5jOjIwODU6XFx0XFx0aWYgKCEocHJpdi1cXHUwMDNlZGV2aWNlX2ZsYWdzIFxcdTAwMjYgRlNMX0dJQU5GQVJfREVWX0hBU19USU1FUikpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2dpYW5mYXIuYy0yMDg2LVxcdFxcdFxcdHJldHVybiAtRVJBTkdFO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2dpYW5mYXIuYy0yMTAwLVxcdGRlZmF1bHQ6XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2dpYW5mYXIuYzoyMTAxOlxcdFxcdGlmICghKHByaXYtXFx1MDAzZWRldmljZV9mbGFncyBcXHUwMDI2IEZTTF9HSUFORkFSX0RFVl9IQVNfVElNRVIpKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9naWFuZmFyLmMtMjEwMi1cXHRcXHRcXHRyZXR1cm4gLUVSQU5HRTtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9naWFuZmFyLmM9MjY0ND1zdGF0aWMgaXJxcmV0dXJuX3QgZ2Zhcl9lcnJvcihpbnQgaXJxLCB2b2lkICpncnBfaWQpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZ2lhbmZhci5jLTI2NTctXFx0LyogTWFnaWMgUGFja2V0IGlzIG5vdCBhbiBlcnJvci4gKi9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZ2lhbmZhci5jOjI2NTg6XFx0aWYgKChwcml2LVxcdTAwM2VkZXZpY2VfZmxhZ3MgXFx1MDAyNiBGU0xfR0lBTkZBUl9ERVZfSEFTX01BR0lDX1BBQ0tFVCkgXFx1MDAyNlxcdTAwMjZcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZ2lhbmZhci5jLTI2NTktXFx0ICAgIChldmVudHMgXFx1MDAyNiBJRVZFTlRfTUFHKSlcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9naWFuZmFyLmM9Mjc1Mz1zdGF0aWMgdm9pZCBnZmFyX25ldHBvbGwoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9naWFuZmFyLmMtMjc1OC1cXHQvKiBJZiB0aGUgZGV2aWNlIGhhcyBtdWx0aXBsZSBpbnRlcnJ1cHRzLCBydW4gdHgvcnggKi9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZ2lhbmZhci5jOjI3NTk6XFx0aWYgKHByaXYtXFx1MDAzZWRldmljZV9mbGFncyBcXHUwMDI2IEZTTF9HSUFORkFSX0RFVl9IQVNfTVVMVElfSU5UUikge1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9naWFuZmFyLmMtMjc2MC1cXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgcHJpdi1cXHUwMDNlbnVtX2dycHM7IGkrKykge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2dpYW5mYXIuYz0yNzkwPXN0YXRpYyBpbnQgcmVnaXN0ZXJfZ3JwX2lycXMoc3RydWN0IGdmYXJfcHJpdl9ncnAgKmdycClcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9naWFuZmFyLmMtMjc5OC1cXHQgKi9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZ2lhbmZhci5jOjI3OTk6XFx0aWYgKHByaXYtXFx1MDAzZWRldmljZV9mbGFncyBcXHUwMDI2IEZTTF9HSUFORkFSX0RFVl9IQVNfTVVMVElfSU5UUikge1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9naWFuZmFyLmMtMjgwMC1cXHRcXHQvKiBJbnN0YWxsIG91ciBpbnRlcnJ1cHQgaGFuZGxlcnMgZm9yIEVycm9yLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2dpYW5mYXIuYz0yODUxPXN0YXRpYyB2b2lkIGdmYXJfZnJlZV9pcnEoc3RydWN0IGdmYXJfcHJpdmF0ZSAqcHJpdilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9naWFuZmFyLmMtMjg1NS1cXHQvKiBGcmVlIHRoZSBJUlFzICovXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2dpYW5mYXIuYzoyODU2OlxcdGlmIChwcml2LVxcdTAwM2VkZXZpY2VfZmxhZ3MgXFx1MDAyNiBGU0xfR0lBTkZBUl9ERVZfSEFTX01VTFRJX0lOVFIpIHtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZ2lhbmZhci5jLTI4NTctXFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIHByaXYtXFx1MDAzZW51bV9ncnBzOyBpKyspXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZ2lhbmZhci5jPTMwOTY9c3RhdGljIHZvaWQgZ2Zhcl9od19pbml0KHN0cnVjdCBnZmFyX3ByaXZhdGUgKnByaXYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZ2lhbmZhci5jLTMxMDgtXFx0LyogWmVybyBvdXQgdGhlIHJtb24gbWliIHJlZ2lzdGVycyBpZiBpdCBoYXMgdGhlbSAqL1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9naWFuZmFyLmM6MzEwOTpcXHRpZiAocHJpdi1cXHUwMDNlZGV2aWNlX2ZsYWdzIFxcdTAwMjYgRlNMX0dJQU5GQVJfREVWX0hBU19STU9OKSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2dpYW5mYXIuYy0zMTEwLVxcdFxcdG1lbXNldF9pbyhcXHUwMDI2cmVncy1cXHUwMDNlcm1vbiwgMCwgb2Zmc2V0b2Yoc3RydWN0IHJtb25fbWliLCBjYXIxKSk7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZ2lhbmZhci5jPTMxNzU9c3RhdGljIGludCBnZmFyX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKm9mZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2dpYW5mYXIuYy0zMjE4LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9naWFuZmFyLmM6MzIxOTpcXHRpZiAocHJpdi1cXHUwMDNlZGV2aWNlX2ZsYWdzIFxcdTAwMjYgRlNMX0dJQU5GQVJfREVWX0hBU19DU1VNKSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2dpYW5mYXIuYy0zMjIwLVxcdFxcdGRldi1cXHUwMDNlaHdfZmVhdHVyZXMgPSBORVRJRl9GX0lQX0NTVU0gfCBORVRJRl9GX1NHIHxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9naWFuZmFyLmMtMzIyNS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZ2lhbmZhci5jOjMyMjY6XFx0aWYgKHByaXYtXFx1MDAzZWRldmljZV9mbGFncyBcXHUwMDI2IEZTTF9HSUFORkFSX0RFVl9IQVNfVkxBTikge1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9naWFuZmFyLmMtMzIyNy1cXHRcXHRkZXYtXFx1MDAzZWh3X2ZlYXR1cmVzIHw9IE5FVElGX0ZfSFdfVkxBTl9DVEFHX1RYIHxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9naWFuZmFyLmMtMzIzOC1cXHQgKi9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZ2lhbmZhci5jOjMyMzk6XFx0aWYgKHByaXYtXFx1MDAzZWRldmljZV9mbGFncyBcXHUwMDI2IEZTTF9HSUFORkFSX0RFVl9IQVNfVElNRVIpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2dpYW5mYXIuYy0zMjQwLVxcdFxcdHByaXYtXFx1MDAzZXBhZGRpbmcgPSA4ICsgREVGQVVMVF9QQURESU5HO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2dpYW5mYXIuYy0zMjQyLVxcdGlmIChkZXYtXFx1MDAzZWZlYXR1cmVzIFxcdTAwMjYgTkVUSUZfRl9JUF9DU1VNIHx8XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2dpYW5mYXIuYzozMjQzOlxcdCAgICBwcml2LVxcdTAwM2VkZXZpY2VfZmxhZ3MgXFx1MDAyNiBGU0xfR0lBTkZBUl9ERVZfSEFTX1RJTUVSKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9naWFuZmFyLmMtMzI0NC1cXHRcXHRkZXYtXFx1MDAzZW5lZWRlZF9oZWFkcm9vbSA9IEdNQUNfRkNCX0xFTiArIEdNQUNfVFhQQUxfTEVOO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2dpYW5mYXIuYy0zMjYxLVxcdHByaXYtXFx1MDAzZXJ4X2ZpbGVyX2VuYWJsZSA9XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2dpYW5mYXIuYzozMjYyOlxcdCAgICAocHJpdi1cXHUwMDNlZGV2aWNlX2ZsYWdzIFxcdTAwMjYgRlNMX0dJQU5GQVJfREVWX0hBU19SWF9GSUxFUikgPyAxIDogMDtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZ2lhbmZhci5jLTMyNjMtXFx0LyogRW5hYmxlIG1vc3QgbWVzc2FnZXMgYnkgZGVmYXVsdCAqL1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2dpYW5mYXIuYy0zMjcyLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9naWFuZmFyLmM6MzI3MzpcXHRpZiAocHJpdi1cXHUwMDNlZGV2aWNlX2ZsYWdzIFxcdTAwMjYgRlNMX0dJQU5GQVJfREVWX0hBU19STU9OKSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2dpYW5mYXIuYy0zMjc0LVxcdFxcdHN0cnVjdCBybW9uX21pYiBfX2lvbWVtICpybW9uID0gXFx1MDAyNnByaXYtXFx1MDAzZWdmYXJncnBbMF0ucmVncy1cXHUwMDNlcm1vbjtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9naWFuZmFyLmMtMzI5MC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZ2lhbmZhci5jOjMyOTE6XFx0aWYgKHByaXYtXFx1MDAzZWRldmljZV9mbGFncyBcXHUwMDI2IEZTTF9HSUFORkFSX0RFVl9IQVNfTUFHSUNfUEFDS0VUKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9naWFuZmFyLmMtMzI5Mi1cXHRcXHRwcml2LVxcdTAwM2V3b2xfc3VwcG9ydGVkIHw9IEdGQVJfV09MX01BR0lDO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9naWFuZmFyLmMtMzI5My1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZ2lhbmZhci5jOjMyOTQ6XFx0aWYgKChwcml2LVxcdTAwM2VkZXZpY2VfZmxhZ3MgXFx1MDAyNiBGU0xfR0lBTkZBUl9ERVZfSEFTX1dBS0VfT05fRklMRVIpIFxcdTAwMjZcXHUwMDI2XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2dpYW5mYXIuYy0zMjk1LVxcdCAgICBwcml2LVxcdTAwM2VyeF9maWxlcl9lbmFibGUpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZ2lhbmZhci5jLTMzMDItXFx0XFx0c3RydWN0IGdmYXJfcHJpdl9ncnAgKmdycCA9IFxcdTAwMjZwcml2LVxcdTAwM2VnZmFyZ3JwW2ldO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9naWFuZmFyLmM6MzMwMzpcXHRcXHRpZiAocHJpdi1cXHUwMDNlZGV2aWNlX2ZsYWdzIFxcdTAwMjYgRlNMX0dJQU5GQVJfREVWX0hBU19NVUxUSV9JTlRSKSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2dpYW5mYXIuYy0zMzA0LVxcdFxcdFxcdHNwcmludGYoZ2Zhcl9pcnEoZ3JwLCBUWCktXFx1MDAzZW5hbWUsIFxcXCIlcyVzJWMlc1xcXCIsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZ2lhbmZhci5oLTE4LSAqL1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9naWFuZmFyLmg6MTk6I2lmbmRlZiBfX0dJQU5GQVJfSFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9naWFuZmFyLmg6MjA6I2RlZmluZSBfX0dJQU5GQVJfSFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9naWFuZmFyLmgtMjEtXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZ2lhbmZhci5oPTY5NT1zdHJ1Y3QgZ2ZhciB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZ2lhbmZhci5oLTkzOC0vKiBGbGFncyByZWxhdGVkIHRvIGdpYW5mYXIgZGV2aWNlIGZlYXR1cmVzICovXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2dpYW5mYXIuaDo5Mzk6I2RlZmluZSBGU0xfR0lBTkZBUl9ERVZfSEFTX0dJR0FCSVRcXHRcXHQweDAwMDAwMDAxXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2dpYW5mYXIuaDo5NDA6I2RlZmluZSBGU0xfR0lBTkZBUl9ERVZfSEFTX0NPQUxFU0NFXFx0XFx0MHgwMDAwMDAwMlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9naWFuZmFyLmg6OTQxOiNkZWZpbmUgRlNMX0dJQU5GQVJfREVWX0hBU19STU9OXFx0XFx0MHgwMDAwMDAwNFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9naWFuZmFyLmg6OTQyOiNkZWZpbmUgRlNMX0dJQU5GQVJfREVWX0hBU19NVUxUSV9JTlRSXFx0XFx0MHgwMDAwMDAwOFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9naWFuZmFyLmg6OTQzOiNkZWZpbmUgRlNMX0dJQU5GQVJfREVWX0hBU19DU1VNXFx0XFx0MHgwMDAwMDAxMFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9naWFuZmFyLmg6OTQ0OiNkZWZpbmUgRlNMX0dJQU5GQVJfREVWX0hBU19WTEFOXFx0XFx0MHgwMDAwMDAyMFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9naWFuZmFyLmg6OTQ1OiNkZWZpbmUgRlNMX0dJQU5GQVJfREVWX0hBU19FWFRFTkRFRF9IQVNIXFx0MHgwMDAwMDA0MFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9naWFuZmFyLmg6OTQ2OiNkZWZpbmUgRlNMX0dJQU5GQVJfREVWX0hBU19NQUdJQ19QQUNLRVRcXHQweDAwMDAwMTAwXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2dpYW5mYXIuaDo5NDc6I2RlZmluZSBGU0xfR0lBTkZBUl9ERVZfSEFTX0JEX1NUQVNISU5HXFx0XFx0MHgwMDAwMDIwMFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9naWFuZmFyLmg6OTQ4OiNkZWZpbmUgRlNMX0dJQU5GQVJfREVWX0hBU19CVUZfU1RBU0hJTkdcXHQweDAwMDAwNDAwXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2dpYW5mYXIuaDo5NDk6I2RlZmluZSBGU0xfR0lBTkZBUl9ERVZfSEFTX1RJTUVSXFx0XFx0MHgwMDAwMDgwMFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9naWFuZmFyLmg6OTUwOiNkZWZpbmUgRlNMX0dJQU5GQVJfREVWX0hBU19XQUtFX09OX0ZJTEVSXFx0MHgwMDAwMTAwMFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9naWFuZmFyLmg6OTUxOiNkZWZpbmUgRlNMX0dJQU5GQVJfREVWX0hBU19SWF9GSUxFUlxcdFxcdDB4MDAwMDIwMDBcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZ2lhbmZhci5oLTk1Mi1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9naWFuZmFyLmg9MTM2ND1zdHJ1Y3QgZmlsZXJfdGFibGUge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2dpYW5mYXIuaC0xMzY4LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9naWFuZmFyLmg6MTM2OTojZW5kaWYgLyogX19HSUFORkFSX0ggKi9cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9naWFuZmFyX2V0aHRvb2wuYz0xMTU9c3RhdGljIHZvaWQgZ2Zhcl9nc3RyaW5ncyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MzIgc3RyaW5nc2V0LCB1OCAqIGJ1ZilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9naWFuZmFyX2V0aHRvb2wuYy0xMTktXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2dpYW5mYXJfZXRodG9vbC5jOjEyMDpcXHRpZiAocHJpdi1cXHUwMDNlZGV2aWNlX2ZsYWdzIFxcdTAwMjYgRlNMX0dJQU5GQVJfREVWX0hBU19STU9OKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9naWFuZmFyX2V0aHRvb2wuYy0xMjEtXFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIEdGQVJfU1RBVFNfTEVOOyBpKyspXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZ2lhbmZhcl9ldGh0b29sLmM9MTMyPXN0YXRpYyB2b2lkIGdmYXJfZmlsbF9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgZXRodG9vbF9zdGF0cyAqZHVtbXksXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZ2lhbmZhcl9ldGh0b29sLmMtMTQyLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9naWFuZmFyX2V0aHRvb2wuYzoxNDM6XFx0aWYgKHByaXYtXFx1MDAzZWRldmljZV9mbGFncyBcXHUwMDI2IEZTTF9HSUFORkFSX0RFVl9IQVNfUk1PTikge1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9naWFuZmFyX2V0aHRvb2wuYy0xNDQtXFx0XFx0dTMyIF9faW9tZW0gKnJtb24gPSAodTMyIF9faW9tZW0gKikgXFx1MDAyNnJlZ3MtXFx1MDAzZXJtb247XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZ2lhbmZhcl9ldGh0b29sLmM9MTUxPXN0YXRpYyBpbnQgZ2Zhcl9zc2V0X2NvdW50KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBzc2V0KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2dpYW5mYXJfZXRodG9vbC5jLTE1Ni1cXHRjYXNlIEVUSF9TU19TVEFUUzpcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZ2lhbmZhcl9ldGh0b29sLmM6MTU3OlxcdFxcdGlmIChwcml2LVxcdTAwM2VkZXZpY2VfZmxhZ3MgXFx1MDAyNiBGU0xfR0lBTkZBUl9ERVZfSEFTX1JNT04pXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2dpYW5mYXJfZXRodG9vbC5jLTE1OC1cXHRcXHRcXHRyZXR1cm4gR0ZBUl9TVEFUU19MRU47XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZ2lhbmZhcl9ldGh0b29sLmM9MjQ5PXN0YXRpYyBpbnQgZ2Zhcl9nY29hbGVzY2Uoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9naWFuZmFyX2V0aHRvb2wuYy0yNjEtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2dpYW5mYXJfZXRodG9vbC5jOjI2MjpcXHRpZiAoIShwcml2LVxcdTAwM2VkZXZpY2VfZmxhZ3MgXFx1MDAyNiBGU0xfR0lBTkZBUl9ERVZfSEFTX0NPQUxFU0NFKSlcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZ2lhbmZhcl9ldGh0b29sLmMtMjYzLVxcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9naWFuZmFyX2V0aHRvb2wuYz0yODg9c3RhdGljIGludCBnZmFyX3Njb2FsZXNjZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2dpYW5mYXJfZXRodG9vbC5jLTI5NS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZ2lhbmZhcl9ldGh0b29sLmM6Mjk2OlxcdGlmICghKHByaXYtXFx1MDAzZWRldmljZV9mbGFncyBcXHUwMDI2IEZTTF9HSUFORkFSX0RFVl9IQVNfQ09BTEVTQ0UpKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9naWFuZmFyX2V0aHRvb2wuYy0yOTctXFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2dpYW5mYXJfZXRodG9vbC5jPTE0NjU9c3RhdGljIGludCBnZmFyX2dldF90c19pbmZvKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZ2lhbmZhcl9ldGh0b29sLmMtMTQ3Mi1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZ2lhbmZhcl9ldGh0b29sLmM6MTQ3MzpcXHRpZiAoIShwcml2LVxcdTAwM2VkZXZpY2VfZmxhZ3MgXFx1MDAyNiBGU0xfR0lBTkZBUl9ERVZfSEFTX1RJTUVSKSkge1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9naWFuZmFyX2V0aHRvb2wuYy0xNDc0LVxcdFxcdGluZm8tXFx1MDAzZXNvX3RpbWVzdGFtcGluZyA9IFNPRl9USU1FU1RBTVBJTkdfVFhfU09GVFdBUkU7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI4VDIyOjQ3OjAzLjgwNDM4NDA4NloiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjM2MDQ4MTQ5MzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhpbmtpbmcsIHByZXNlbnRlZCBhcyBpZiBpdCB3ZXJlIG15IHRob3VnaHQgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byB0aGUgRnJlZXNjYWxlIEV0aGVybmV0IEtjb25maWcqKlxuXG5Pa2F5LCB0aW1lIHRvIGdldCB0byB0aGUgaGVhcnQgb2YgdGhpcy4gSSBuZWVkIHRvIHplcm8gaW4gb24gdGhlIEZyZWVzY2FsZSBFdGhlcm5ldCBkcml2ZXIgY29uZmlndXJhdGlvbi4gU3BlY2lmaWNhbGx5LCBJJ20gZ29pbmcgdG8ganVtcCBpbnRvIHRoZSBgZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL0tjb25maWdgIGZpbGUuIEknbSB0aGlua2luZyB0aGF0IGxpbmUgOTMgb3IgdGhlcmVhYm91dHMgaXMgYSBnb29kIHN0YXJ0aW5nIHBvaW50IGZvciB3aGF0ZXZlciBJJ20gdHJvdWJsZXNob290aW5nIG9yIGNvbmZpZ3VyaW5nLiBUaGF0IHBhcnRpY3VsYXIgbGluZSBpcyBsaWtlbHkgcmVsYXRlZCB0byBzb21lIGNydWNpYWwsIHByb2JhYmx5IGEga2V5IHNldHRpbmcgb3IgY29uZGl0aW9uYWwsIHJlbGF0ZWQgdG8gdGhlIGRyaXZlci4gTGV0J3Mgc2VlIHdoYXQncyB0aGVyZS4uLiBhbmQgdGhlbiBJIGNhbiBhZGp1c3QgbXkgZm9jdXMgYmFzZWQgb24gd2hhdCBJIGZpbmQuIFRoaXMgaXMgd2hlcmUgdGhlIHJlYWwgd29yayBiZWdpbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk2NTIsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yOFQyMjo0NzowNy40MDkyMDA4ODJaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MDIyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiA4MCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICA4MDpcXHRjb25maWcgVUNDX0dFVEhcXG4gIDgxOlxcdFxcdHRyaXN0YXRlIFxcXCJGcmVlc2NhbGUgUUUgR2lnYWJpdCBFdGhlcm5ldFxcXCJcXG4gIDgyOlxcdFxcdGRlcGVuZHMgb24gUVVJQ0NfRU5HSU5FIFxcdTAwMjZcXHUwMDI2IFBQQzMyXFxuICA4MzpcXHRcXHRzZWxlY3QgRlNMX1BRX01ESU9cXG4gIDg0OlxcdFxcdHNlbGVjdCBQSFlMSU5LXFxuICA4NTpcXHRcXHRoZWxwXFxuICA4NjpcXHRcXHQgIFRoaXMgZHJpdmVyIHN1cHBvcnRzIHRoZSBHaWdhYml0IEV0aGVybmV0IG1vZGUgb2YgdGhlIFFVSUNDIEVuZ2luZSxcXG4gIDg3OlxcdFxcdCAgd2hpY2ggaXMgYXZhaWxhYmxlIG9uIHNvbWUgRnJlZXNjYWxlIFNPQ3MuXFxuICA4ODpcXHRcXG4gIDg5OlxcdGNvbmZpZyBVR0VUSF9UWF9PTl9ERU1BTkRcXG4gIDkwOlxcdFxcdGJvb2wgXFxcIlRyYW5zbWl0IG9uIERlbWFuZCBzdXBwb3J0XFxcIlxcbiAgOTE6XFx0XFx0ZGVwZW5kcyBvbiBVQ0NfR0VUSFxcbiAgOTI6XFx0XFxuICA5MzpcXHRjb25maWcgR0lBTkZBUlxcbiAgOTQ6XFx0XFx0dHJpc3RhdGUgXFxcIkdpYW5mYXIgRXRoZXJuZXRcXFwiXFxuICA5NTpcXHRcXHRkZXBlbmRzIG9uIEhBU19ETUFcXG4gIDk2OlxcdFxcdHNlbGVjdCBGU0xfUFFfTURJT1xcbiAgOTc6XFx0XFx0c2VsZWN0IFBIWUxJQlxcbiAgOTg6XFx0XFx0c2VsZWN0IEZJWEVEX1BIWVxcbiAgOTk6XFx0XFx0c2VsZWN0IENSQzMyXFxuIDEwMDpcXHRcXHRoZWxwXFxuIDEwMTpcXHRcXHQgIFRoaXMgZHJpdmVyIHN1cHBvcnRzIHRoZSBHaWdhYml0IFRTRUMgb24gdGhlIE1QQzgzeHgsIE1QQzg1eHgsXFxuIDEwMjpcXHRcXHQgIGFuZCBNUEM4Nnh4IGZhbWlseSBvZiBjaGlwcywgdGhlIGVUU0VDIG9uIExTMTAyMUEgYW5kIHRoZSBGRUNcXG4gMTAzOlxcdFxcdCAgb24gdGhlIDg1NDAuXFxuIDEwNDpcXHRcXG4gMTA1OlxcdHNvdXJjZSBcXFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2RwYWEvS2NvbmZpZ1xcXCJcXG4gMTA2OlxcdHNvdXJjZSBcXFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2RwYWEyL0tjb25maWdcXFwiXFxuIDEwNzpcXHRzb3VyY2UgXFxcImRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9LY29uZmlnXFxcIlxcbiAxMDg6XFx0XFxuIDEwOTpcXHRlbmRpZiAjIE5FVF9WRU5ET1JfRlJFRVNDQUxFXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI4VDIyOjQ3OjA3LjQwOTI2Mjg1MloiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjY0MzkwMTA4OTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBgZ2lhbmZhcmAgRHJpdmVyKipcblxuT2theSwgbGV0J3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBgZ2lhbmZhcmAgaW50ZXJhY3RzIHdpdGggdGhlIGhhcmR3YXJlLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZmlndXJlIG91dCB0aGUgYmluZGluZyBtZWNoYW5pc20uIElzIGl0IGEgcGxhdGZvcm0gZHJpdmVyLCByZWx5aW5nIG9uIERldmljZSBUcmVlIGluZm9ybWF0aW9uLCBvciBwZXJoYXBzIHV0aWxpemluZyBQQ0kgY29uZmlndXJhdGlvbj8gSSBuZWVkIHRvIHF1aWNrbHkgaWRlbnRpZnkgdGhlIGFwcHJvYWNoLlxuXG5NeSBuZXh0IHN0ZXAgaXMgY2xlYXI6IEknbGwgZGl2ZSBpbnRvIHRoZSBgZ2lhbmZhci5jYCBzb3VyY2UgY29kZS4gSSdsbCB6ZXJvIGluIG9uIHRoZSB1c3VhbCBzdXNwZWN0cyDigJMgc3BlY2lmaWNhbGx5LCB0aGUgYXJlYSBhcm91bmQgYG1vZHVsZV9wbGF0Zm9ybV9kcml2ZXJgIGlmIGl0J3MgYSBwbGF0Zm9ybSBkcml2ZXIsIG9yIHRoZSBwcm9iZSBmdW5jdGlvbiBpdHNlbGYsIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCB1c2VzIERldmljZSBUcmVlIGJpbmRpbmdzLCBQQ0ksIG9yIHNvbWUgb3RoZXIgbWVjaGFuaXNtLiBUaGF0J3MgdGhlIGtleSB0byB1bmRlcnN0YW5kaW5nIGhvdyB0aGlzIGRyaXZlciByZWdpc3RlcnMgaXRzZWxmIGFuZCBpbml0aWFsaXplcyB0aGUgaGFyZHdhcmUuIEkga25vdyBvbmNlIEkgbG9jYXRlIHRoZSByaWdodCBlbnRyeSBwb2ludHMsIHRoZSByZXN0IHdpbGwgZm9sbG93LiBJJ2xsIGZpbmQgbXkgd2F5IGluIHF1aWNrbHkhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwMzIyLCJPdXRwdXRUb2tlbnMiOjQzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDksIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yOFQyMjo0NzoxMy44NDgyNzU5NjdaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDU1NTQ1OTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibW9kdWxlX3BsYXRmb3JtX2RyaXZlcnxwbGF0Zm9ybV9kcml2ZXJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2dpYW5mYXIuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZ2lhbmZhci5jPTM2MTE9TU9EVUxFX0RFVklDRV9UQUJMRShvZiwgZ2Zhcl9tYXRjaCk7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZ2lhbmZhci5jLTM2MTMtLyogU3RydWN0dXJlIGZvciBhIGRldmljZSBkcml2ZXIgKi9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZ2lhbmZhci5jOjM2MTQ6c3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgZ2Zhcl9kcml2ZXIgPSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2dpYW5mYXIuYy0zNjE1LVxcdC5kcml2ZXIgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZ2lhbmZhci5jLTM2MjMtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2dpYW5mYXIuYzozNjI0Om1vZHVsZV9wbGF0Zm9ybV9kcml2ZXIoZ2Zhcl9kcml2ZXIpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOFQyMjo0NzoxMy44OTM4MzUzMjVaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozNzc1NTI4MjU5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGFzIGlmIHRoZXkncmUgbXkgb3duOlxuXG4qKkFuYWx5emluZyB0aGUgYGdmYXJfbWF0Y2hgIEZ1bmN0aW9uJ3MgQmVoYXZpb3IqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBNeSBpbml0aWFsIHRob3VnaHQgcHJvY2VzcyBpcyBzdHJhaWdodGZvcndhcmQ6IEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhlIGBnZmFyX21hdGNoYCBmdW5jdGlvbiBpcyAqYWN0dWFsbHkqIGRvaW5nLiBJJ20gbm90IGdvaW5nIHRvIGFwcHJvYWNoIHRoaXMgd2l0aCBibGluZCBmYWl0aCwgYXNzdW1pbmcgaXQncyBwZXJmZWN0bHkgaW1wbGVtZW50ZWQgb3IgZG9lcyBleGFjdGx5IHdoYXQgaXRzIG5hbWUgc3VnZ2VzdHMuIE15IGZpcnN0IHN0ZXAgaXMgdG8gdHJlYXQgaXQgYXMgYSBibGFjayBib3ggYW5kIHBlZWsgaW5zaWRlLiBJIHdhbnQgYSBjbGVhciBwaWN0dXJlIG9mIGl0cyBpbnB1dHMsIG91dHB1dHMsIGFuZCwgbW9zdCBpbXBvcnRhbnRseSwgdGhlIGNyaXRlcmlhIGFnYWluc3Qgd2hpY2ggaXQncyBtYWtpbmcgaXRzIG1hdGNoZXMuIEknbSBnb2luZyB0byBsb29rIGF0IHRoZSBkYXRhIGJlaW5nIGZlZCBpbnRvIGl0IHRvIGZpZ3VyZSBvdXQgd2hhdCBpdCdzIGNvbXBhcmluZyBhZ2FpbnN0LiBJJ20gYWxyZWFkeSBhbnRpY2lwYXRpbmcgdGhhdCB0aGUgcmVzdWx0cyB3aWxsIGluZm9ybSBtZSBhYm91dCBob3cgcm9idXN0IHRoZSBvdmVyYWxsIHN5c3RlbSBpcy4gVW5kZXJzdGFuZGluZyB0aGVzZSBmb3VuZGF0aW9uYWwgbWVjaGFuaWNzIGlzIGNyaXRpY2FsIGZvciBtZSB0byBtYWtlIGFueSBzZW5zaWJsZSBhc3Nlc3NtZW50IGFib3V0IHRoaXMgcHJvZ3JhbS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA3OTIsIk91dHB1dFRva2VucyI6NDMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yOFQyMjo0NzoxNy42NjkzNjY1NDRaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQyMTgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9naWFuZmFyLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMzU5MCxcbiAgXCJMaW5lQ291bnRcIjogMzVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMzU5MDpcXHR9O1xcbjM1OTE6XFx0XFxuMzU5MjpcXHQjZGVmaW5lIEdGQVJfUE1fT1BTIChcXHUwMDI2Z2Zhcl9wbV9vcHMpXFxuMzU5MzpcXHRcXG4zNTk0OlxcdCNlbHNlXFxuMzU5NTpcXHRcXG4zNTk2OlxcdCNkZWZpbmUgR0ZBUl9QTV9PUFMgTlVMTFxcbjM1OTc6XFx0XFxuMzU5ODpcXHQjZW5kaWZcXG4zNTk5OlxcdFxcbjM2MDA6XFx0c3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgZ2Zhcl9tYXRjaFtdID1cXG4zNjAxOlxcdHtcXG4zNjAyOlxcdFxcdHtcXG4zNjAzOlxcdFxcdFxcdC50eXBlID0gXFxcIm5ldHdvcmtcXFwiLFxcbjM2MDQ6XFx0XFx0XFx0LmNvbXBhdGlibGUgPSBcXFwiZ2lhbmZhclxcXCIsXFxuMzYwNTpcXHRcXHR9LFxcbjM2MDY6XFx0XFx0e1xcbjM2MDc6XFx0XFx0XFx0LmNvbXBhdGlibGUgPSBcXFwiZnNsLGV0c2VjMlxcXCIsXFxuMzYwODpcXHRcXHR9LFxcbjM2MDk6XFx0XFx0e30sXFxuMzYxMDpcXHR9O1xcbjM2MTE6XFx0TU9EVUxFX0RFVklDRV9UQUJMRShvZiwgZ2Zhcl9tYXRjaCk7XFxuMzYxMjpcXHRcXG4zNjEzOlxcdC8qIFN0cnVjdHVyZSBmb3IgYSBkZXZpY2UgZHJpdmVyICovXFxuMzYxNDpcXHRzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBnZmFyX2RyaXZlciA9IHtcXG4zNjE1OlxcdFxcdC5kcml2ZXIgPSB7XFxuMzYxNjpcXHRcXHRcXHQubmFtZSA9IFxcXCJmc2wtZ2lhbmZhclxcXCIsXFxuMzYxNzpcXHRcXHRcXHQucG0gPSBHRkFSX1BNX09QUyxcXG4zNjE4OlxcdFxcdFxcdC5vZl9tYXRjaF90YWJsZSA9IGdmYXJfbWF0Y2gsXFxuMzYxOTpcXHRcXHR9LFxcbjM2MjA6XFx0XFx0LnByb2JlID0gZ2Zhcl9wcm9iZSxcXG4zNjIxOlxcdFxcdC5yZW1vdmUgPSBnZmFyX3JlbW92ZSxcXG4zNjIyOlxcdH07XFxuMzYyMzpcXHRcXG4zNjI0OlxcdG1vZHVsZV9wbGF0Zm9ybV9kcml2ZXIoZ2Zhcl9kcml2ZXIpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOFQyMjo0NzoxNy42Njk1MTE4OTRaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTE4NTg5NDE1NDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiBgZ2lhbmZhcmAncyBGdXp6aW5nIFBvdGVudGlhbCoqXG5cbk9rYXksIHNvIGBnaWFuZmFyYCBpcyBhIHBsYXRmb3JtIGRyaXZlciBmb3IgdGhvc2UgRnJlZXNjYWxlIGV0aGVybmV0IGNvbnRyb2xsZXJzLCBUU0VDL2VUU0VDLCBvbiBQb3dlclBDIGFuZCBzb21lIEFSTSBTb0NzLiBUaGUgaW1tZWRpYXRlIHF1ZXN0aW9uIGlzLCBjYW4gSSBldmVuIGdldCBhdCB0aGlzIHRoaW5nIGluIGEgdHlwaWNhbCBmdXp6aW5nIGVudmlyb25tZW50PyBDYW4gSSByZWFjaCB0aGlzIGhhcmR3YXJlLCBvciBpcyBpdCBzcGVjaWZpYyBTb0MgLyBib2FyZCBoYXJkd2FyZSB0aGF0IGNhbid0IGJlIHJlYWNoZWQgaW4gc3RhbmRhcmQgUUVNVSBvciBHQ0UsIG9yIGEgc3RhbmRhcmQgZnV6emluZyBzZXR1cD8gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgaXQncyBzb21ldGhpbmcgSSBjYW4gYWN0dWFsbHkgcHJvYmUuXG5cbkxldCBtZSByZS1leGFtaW5lIHRoZSBjcml0ZXJpYS4gVGhlIGluc3RydWN0aW9ucyBzYXkgdG8gYmFpbCBvdXQgaWYgdGhlIGNoYW5nZXMgYXJlIGxpbWl0ZWQgdG8gc3R1ZmYgdGhhdCdzICppbXBvc3NpYmxlKiB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuIFRoYXQgaW5jbHVkZXMgdGhpbmdzIGxpa2UgdmVuZG9yLXNwZWNpZmljIFBDSWUgc3R1ZmYgdGhhdCByZXF1aXJlcyBwaHlzaWNhbCBoYXJkd2FyZSwgZHJpdmVyIHRlYXJkb3duIGNvZGUgdGhhdCBvbmx5IHJ1bnMgb24gaG90LXVucGx1Zywgb3Igb3RoZXIgdW5yZWFjaGFibGUgY29kZSBwYXRocy5cblxuVGhlIGtleSBxdWVzdGlvbiBpczogZG9lcyBRRU1VIGVtdWxhdGUgdGhlIGBnaWFuZmFyYCBoYXJkd2FyZSwgb3IgZXZlbiBzb21ldGhpbmcgc2ltaWxhciBsaWtlIGVUU0VDPyBJIG5lZWQgdG8gY2hlY2suIEFoYSEgSXQgbG9va3MgbGlrZSB0aGVyZSdzIGBody9uZXQvZnNsX2V0c2VjL2AgaW4gUUVNVS4gU3BlY2lmaWNhbGx5LCBgZXRzZWMuY2AgaXMgdGhlcmUgZm9yIGBtcGM4NTQ0ZHNgIGFuZCBgcHBjZTUwMGAgbWFjaGluZXMhIEJ1dCBpcyB0aGlzIGFjdHVhbGx5ICpyZWFjaGFibGUqIGluIGEgc3RhbmRhcmQgc3l6a2FsbGVyIG9yIExpbnV4IGZ1enppbmcgc2V0dXAsIGZvciB4ODZfNjQgb3IgYXJtNjQ/IE9yIGNhbiBJIGNyZWF0ZSB0aGVzZSBwbGF0Zm9ybSBkZXZpY2VzIHRocm91Z2ggT0Ygb3ZlcmxheXMsIGNvbmZpZ2ZzLCBldGMuPyBDYW4gSSBnZXQgYXQgdGhlbSB0aHJvdWdoIE9GIG1hdGNoIHRhYmxlcyBpbiB4ODYvYXJtNjQgZXZlbiB3aXRob3V0IHRoZSBkZXZpY2UgdHJlZSBub2RlIGJlaW5nIGF2YWlsYWJsZT9cblxuU3l6a2FsbGVyIHR5cGljYWxseSB1c2VzIHg4Nl82NCwgYXJtNjQsIG9yIGd2aXNvci9HQ0UvUUVNVSBWTXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBwbGF0Zm9ybSBkZXZpY2VzIG9yIE9GIGRldmljZXMgYXJlIGhhbmRsZWQgaW4gdGhvc2UgZnV6emluZyBlbnZpcm9ubWVudHMuIEFyZSBwbGF0Zm9ybSBkcml2ZXJzIGZvciBzcGVjaWZpYyBlbWJlZGRlZCBTb0NzIGdlbmVyYWxseSBjb25zaWRlcmVkIHVucmVhY2hhYmxlPyBPciBhcmUgdGhleSBzb21ldGltZXMgcmVhY2hhYmxlPyBJIG5lZWQgdG8gY2hlY2sgdGhlIHBhc3QgZXZhbHVhdGlvbiBjcml0ZXJpYSB0byB1bmRlcnN0YW5kIGhvdyB0aGVzZSBkcml2ZXJzIGFyZSB0cmVhdGVkLlxuXG5DYW4gSSBldmVuIGluc3RhbnRpYXRlIGBnaWFuZmFyYCBpbiB4ODZfNjQ/IE5vLCBiZWNhdXNlIGl0IGxvb2tzIGxpa2UgYGdpYW5mYXJgIHJlbGllcyBvbiBPRiAoZGV2aWNlIHRyZWUgd2l0aCBgb2ZfbWF0Y2hfdGFibGUgPSBnZmFyX21hdGNoYCkuIFRoZSBgZ2Zhcl9wcm9iZWAgZnVuY3Rpb24gZ2V0cyBjYWxsZWQgZm9yIHRoZXNlIGRldmljZXMsIGFuZCBpdCBjYWxscyBgZ2Zhcl9vZl9pbml0YC4gSW5zaWRlIGBnZmFyX29mX2luaXRgIGl0IHB1bGxzIHRoZSBkZXZpY2Ugbm9kZSBmcm9tIHRoZSBgcGxhdGZvcm1fZGV2aWNlYDogYHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAgPSBvZmRldi1cdTAwM2VkZXYub2Zfbm9kZTtgLiAgSWYgdGhhdCdzIG5vdCB0aGVyZSBpdCByZXR1cm5zIGFuIGVycm9yLiBJIG5lZWQgdG8gbG9vayBjbG9zZXIgYXQgYGdmYXJfcHJvYmVgIGFuZCBgZ2Zhcl9vZl9pbml0YCB0byBmaWd1cmUgb3V0IGlmIEkgY2FuIGdldCBwYXN0IHRoYXQgZGV2aWNlIHRyZWUgZGVwZW5kZW5jeS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE0ODUsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3MjYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yOFQyMjo0NzoyOS41Mjg0NTYxMzhaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0ODk1NTQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImdmYXJfb2ZfaW5pdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZ2lhbmZhci5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9naWFuZmFyLmM9NTc4PXN0YXRpYyBwaHlfaW50ZXJmYWNlX3QgZ2Zhcl9nZXRfaW50ZXJmYWNlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZ2lhbmZhci5jLTYxOC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZ2lhbmZhci5jOjYxOTpzdGF0aWMgaW50IGdmYXJfb2ZfaW5pdChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpvZmRldiwgc3RydWN0IG5ldF9kZXZpY2UgKipwZGV2KVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9naWFuZmFyLmMtNjIwLXtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9naWFuZmFyLmM9MzE3NT1zdGF0aWMgaW50IGdmYXJfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqb2ZkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZ2lhbmZhci5jLTMxODEtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2dpYW5mYXIuYzozMTgyOlxcdGVyciA9IGdmYXJfb2ZfaW5pdChvZmRldiwgXFx1MDAyNmRldik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2dpYW5mYXIuYy0zMTgzLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOFQyMjo0NzoyOS41NzMzNTgwNDZaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTg5OTk4NTM5OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUncyBteSB0YWtlIG9uIHRob3NlIGluc3RydWN0aW9ucywgYXMgdGhvdWdoIHRoZXkgYXJlIG15IGludGVybmFsIHRob3VnaHQgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byB0aGUgR2lhbmZhciBJbml0aWFsaXphdGlvbioqXG5cbkFscmlnaHQsIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJJ3ZlIGdvdCBhIHByb2plY3Qgb24gbXkgcGxhdGUgdGhhdCBpbnZvbHZlcyB0aGUgR2lhbmZhciBFdGhlcm5ldCBkcml2ZXIsIGFuZCB0byB0cnVseSB1bmRlcnN0YW5kIHdoYXQncyBnb2luZyBvbiwgSSBuZWVkIHRvIHN0YXJ0IGF0IHRoZSBiZWdpbm5pbmcuIFRoYXQgbWVhbnMgY3JhY2tpbmcgb3BlbiB0aGUgYGdpYW5mYXIuY2AgZmlsZSBpbiB0aGUgYGRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZWAgZGlyZWN0b3J5LiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbml0aWFsIHNldHVwIG9mIHRoZSBkcml2ZXIsIHNvIEknbSBoZWFkaW5nIGRpcmVjdGx5IHRvIHRoZSBgZ2Zhcl9vZl9pbml0YCBmdW5jdGlvbi4gSSBrbm93IHRoaXMgaXMgYSBjcml0aWNhbCBwYXJ0LCBsaWtlbHkgd2hlcmUgdGhlIGRldmljZSB0cmVlIGluZm9ybWF0aW9uIGlzIHBhcnNlZCBhbmQgdGhlIGhhcmR3YXJlIGlzIGJyb3VnaHQgb25saW5lLiBUaW1lIHRvIHNlZSB3aGF0IG1hZ2ljIEZyZWVzY2FsZSBoYXMgYmFrZWQgaW50byB0aGlzIGNvZGUuIFRoaXMgd2lsbCBiZSB0aGUgZm91bmRhdGlvbmFsIHN0YXJ0aW5nIHBvaW50LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzA5NSwiT3V0cHV0VG9rZW5zIjo0MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI4VDIyOjQ3OjMxLjQ3MzM0NjM2NVoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDQ5ODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2dpYW5mYXIuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA2MTgsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA2MTg6XFx0XFxuIDYxOTpcXHRzdGF0aWMgaW50IGdmYXJfb2ZfaW5pdChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpvZmRldiwgc3RydWN0IG5ldF9kZXZpY2UgKipwZGV2KVxcbiA2MjA6XFx0e1xcbiA2MjE6XFx0XFx0Y29uc3QgY2hhciAqbW9kZWw7XFxuIDYyMjpcXHRcXHRpbnQgZXJyID0gMCwgaSwgajtcXG4gNjIzOlxcdFxcdHBoeV9pbnRlcmZhY2VfdCBpbnRlcmZhY2U7XFxuIDYyNDpcXHRcXHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gTlVMTDtcXG4gNjI1OlxcdFxcdHN0cnVjdCBnZmFyX3ByaXZhdGUgKnByaXYgPSBOVUxMO1xcbiA2MjY6XFx0XFx0c3RydWN0IGRldmljZV9ub2RlICpucCA9IG9mZGV2LVxcdTAwM2VkZXYub2Zfbm9kZTtcXG4gNjI3OlxcdFxcdHN0cnVjdCBkZXZpY2Vfbm9kZSAqY2hpbGQgPSBOVUxMO1xcbiA2Mjg6XFx0XFx0dTMyIHN0YXNoX2xlbiA9IDA7XFxuIDYyOTpcXHRcXHR1MzIgc3Rhc2hfaWR4ID0gMDtcXG4gNjMwOlxcdFxcdHVuc2lnbmVkIGludCBudW1fdHhfcXMsIG51bV9yeF9xcztcXG4gNjMxOlxcdFxcdHVuc2lnbmVkIHNob3J0IG1vZGU7XFxuIDYzMjpcXHRcXG4gNjMzOlxcdFxcdGlmICghbnApXFxuIDYzNDpcXHRcXHRcXHRyZXR1cm4gLUVOT0RFVjtcXG4gNjM1OlxcdFxcbiA2MzY6XFx0XFx0aWYgKG9mX2RldmljZV9pc19jb21wYXRpYmxlKG5wLCBcXFwiZnNsLGV0c2VjMlxcXCIpKVxcbiA2Mzc6XFx0XFx0XFx0bW9kZSA9IE1RX01HX01PREU7XFxuIDYzODpcXHRcXHRlbHNlXFxuIDYzOTpcXHRcXHRcXHRtb2RlID0gU1FfU0dfTU9ERTtcXG4gNjQwOlxcdFxcbiA2NDE6XFx0XFx0aWYgKG1vZGUgPT0gU1FfU0dfTU9ERSkge1xcbiA2NDI6XFx0XFx0XFx0bnVtX3R4X3FzID0gMTtcXG4gNjQzOlxcdFxcdFxcdG51bV9yeF9xcyA9IDE7XFxuIDY0NDpcXHRcXHR9IGVsc2UgeyAvKiBNUV9NR19NT0RFICovXFxuIDY0NTpcXHRcXHRcXHQvKiBnZXQgdGhlIGFjdHVhbCBudW1iZXIgb2Ygc3VwcG9ydGVkIGdyb3VwcyAqL1xcbiA2NDY6XFx0XFx0XFx0dW5zaWduZWQgaW50IG51bV9ncnBzO1xcbiA2NDc6XFx0XFxuIDY0ODpcXHRcXHRcXHRudW1fZ3JwcyA9IGRldmljZV9nZXRfbmFtZWRfY2hpbGRfbm9kZV9jb3VudChcXHUwMDI2b2ZkZXYtXFx1MDAzZWRldixcXG4gNjQ5OlxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICAgXFxcInF1ZXVlLWdyb3VwXFxcIik7XFxuIDY1MDpcXHRcXHRcXHRpZiAobnVtX2dycHMgPT0gMCB8fCBudW1fZ3JwcyBcXHUwMDNlIE1BWEdST1VQUykge1xcbiA2NTE6XFx0XFx0XFx0XFx0ZGV2X2VycihcXHUwMDI2b2ZkZXYtXFx1MDAzZWRldiwgXFxcIkludmFsaWQgIyBvZiBpbnQgZ3JvdXBzKCVkKVxcXFxuXFxcIixcXG4gNjUyOlxcdFxcdFxcdFxcdFxcdG51bV9ncnBzKTtcXG4gNjUzOlxcdFxcdFxcdFxcdHByX2VycihcXFwiQ2Fubm90IGRvIGFsbG9jX2V0aGVyZGV2LCBhYm9ydGluZ1xcXFxuXFxcIik7XFxuIDY1NDpcXHRcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gNjU1OlxcdFxcdFxcdH1cXG4gNjU2OlxcdFxcbiA2NTc6XFx0XFx0XFx0bnVtX3R4X3FzID0gbnVtX2dycHM7IC8qIG9uZSB0eHEgcGVyIGludCBncm91cCAqL1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOFQyMjo0NzozMS40NzM0OTI5ODVaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6ODYzMDE4OTExMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXNpcyBvZiB0aGUgR2lhbmZhciBEcml2ZXIgUGF0Y2ggZm9yIEZ1enppbmcgU3VpdGFiaWxpdHkqKlxuXG5Pa2F5LCBzbyBJJ20gZGl2aW5nIGludG8gdGhpcyBwYXRjaC4gVGhlIGtleSBpcyB1bmRlcnN0YW5kaW5nIGlmIHRoZXNlIGNoYW5nZXMgYXJlIGV2ZW4gKnJlYWNoYWJsZSogaW4gYSBzdGFuZGFyZCBmdXp6aW5nIHNldHVwLiBMZXQncyBzdGFydCB3aXRoIHRoZSBkcml2ZXIgaXRzZWxmLiBJdCdzIHRoZSBgZ2lhbmZhcmAgZHJpdmVyLiBJIG5lZWQgdG8gZmlndXJlIG91dCBpdHMgZGVwZW5kZW5jaWVzLiBJdCBuZWVkcyBkZXZpY2UgdHJlZSBub2RlcywgaW50ZXJydXB0cywgYSBQSFksIE1ESU8sIHJlZ2lzdGVyIG1hcHBpbmdzLCBhbmQgdGhlIHVzdWFsIHN1c3BlY3RzLiBMb29rcyBsaWtlIGl0J3MgYnVpbHQgZm9yIEZyZWVzY2FsZSBQb3dlclBDIChNUEM4M3h4LCBNUEM4NXh4LCBNUEM4Nnh4KSBvciBBUk0gTFMxMDIxQSBTb0NzLlxuXG5Ob3cgdGhlIHF1ZXN0aW9uIGlzIHdoZXRoZXIgU3l6a2FsbGVyIGFuZCBvdGhlciBmdXp6aW5nIHRvb2xzIGNvbW1vbmx5IHJ1biBvbiBGcmVlc2NhbGUgaGFyZHdhcmUsIG9yIGRvZXMgaXQgcmVxdWlyZSBzb21lIGN1c3RvbSBkZXZpY2UgdHJlZSBvciBzcGVjaWZpYyBoYXJkd2FyZT8gVGhlbiBJIG5lZWQgdG8gZG91YmxlLWNoZWNrIHRoZSBmdXp6aW5nIGd1aWRlbGluZXMuIFRob3NlIGd1aWRlbGluZXMgZXhwbGljaXRseSB0ZWxsIG1lIHdoZW4gYSBwYXRjaCBpc24ndCB3b3J0aCBmdXp6aW5nLiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoaXMgZG9lc24ndCBmYWxsIGludG8gdGhlIGNhdGVnb3J5IG9mIFwidW5yZWFjaGFibGUgY29kZSBwYXRocy5cIiBJIHNob3VsZCBhbHNvIHJlLWNoZWNrIGFsbCB0aGUgcnVsZXMuIEl0IHNheXMgXCJDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmVcIi4gVGhhdCdzIHdoYXQgSSdtIGxvb2tpbmcgZm9yLiBXaGF0IGFib3V0IGVtYmVkZGVkIFNvQ3MgYW5kIHBsYXRmb3JtIGRyaXZlcnM/IENhbiB0aGUgR2lhbmZhciBkcml2ZXIgYmUgcHJvYmVkLCBvciBpcyBpdCBwcmVzZW50IG9uIHg4Nl82NCBvciBBUk02NCB2aXJ0dWFsIG1hY2hpbmVzP1xuXG5JbiBzdGFuZGFyZCBRRU1VL0dDRSBlbnZpcm9ubWVudHMsIFwiZ2lhbmZhclwiIGlzIHNwZWNpZmljIHRvIEZyZWVzY2FsZS4gVGhlc2UgYXJlbid0IHJlYWNoYWJsZS4gR2lhbmZhciBpcyBhYnNlbnQgaW4geDg2XzY0IG9yIGFybTY0IHZpcnQgbWFjaGluZXMgYmVjYXVzZSBpdCdzIGEgcGxhdGZvcm0gZHJpdmVyLCB1c2luZyBkZXZpY2UgdHJlZSBtYXRjaGluZy4gSXQgcmVxdWlyZXMgTU1JTyByZWdpc3RlcnMsIGludGVycnVwdHMsIFBIWXMuIEkgbmVlZCB0byBjb25zaWRlciwgZG9lcyBmdXp6aW5nIGV2ZW4gdXNlIFBvd2VyUEMgb3IgTFMxMDIxQT8gU3l6a2FsbGVyIGZ1enplcyB4ODZfNjQgYW5kIGFybTY0IGluIFFFTVUvR0NFIGluc3RhbmNlcywgc28gdGhlc2UgYXJlIHByb2JhYmx5IHVucmVhY2hhYmxlLiBFdmVuIGlmIHNvbWVvbmUgY29tcGlsZWQgdGhlIGBDT05GSUdfR0lBTkZBUmAgb3B0aW9uIG9uIHg4Nl82NCAoaXQgb25seSBkZXBlbmRzIG9uIEhBU19ETUEpIGNhbiBpdCBldmVyIGJlIHByb2JlZD8gSW4geDg2XzY0LCBBQ1BJLCBhbmQgc3RhbmRhcmQgUUVNVSwgdGhlcmUgaXMgbm8gT0YgZGV2aWNlIHRyZWUgbm9kZSBtYXRjaGluZyBcImdpYW5mYXJcIiBvciBcImZzbCxldHNlYzJcIi4gRXZlbiB3aXRoIGFuIE9GIG92ZXJsYXksIGBnZmFyX3Byb2JlYCBzdGlsbCBkZW1hbmRzIHJlZ2lzdGVycywgSVJRcywgUEhZIGJ1cywgZXRjLiBXaXRob3V0IHRoZSBoYXJkd2FyZSwgdGhlIHByb2JlIHdpbGwgZmFpbCwgb3IgbmV2ZXIgZXZlbiBiZSBjYWxsZWQuIENvbnNlcXVlbnRseSwgYGZyZWVfc2tiX3Jlc291cmNlc2AsIGBnZmFyX2NoYW5nZV9tdHVgLCBgcmVzZXRfZ2ZhcmAsIGFuZCBgZ2Zhcl9od3RzdGFtcF9zZXRgIGNhbiBORVZFUiBiZSBjYWxsZWQuXG5cbk9rYXksIGxldCdzIGxvb2sgYXQgdGhlIHBhdGNoIGNoYW5nZXMgaW4gbW9yZSBkZXRhaWwgaW4gYGdpYW5mYXIuY2AuIEl0IGhhcyB0aGVzZSBzcGVjaWZpYyBjaGFuZ2VzLiAxLiBgZnJlZV9za2JfcmVzb3VyY2VzYCBhZGRzIGEgY2hlY2ssIGFuZCB6ZXJvZXMgb3V0IHNvbWUgcG9pbnRlcnMuIDIuIGBnZmFyX2NoYW5nZV9tdHVgIGNhcHR1cmVzIGFuIGVycm9yIGFuZCByZXR1cm5zIGl0LiAzLiBgcmVzZXRfZ2ZhcmAgY2hhbmdlcyB0aGUgcmV0dXJuIHR5cGUgdG8gYGludGAsIGFuZCByZXR1cm5zIGFuIGVycm9yIGNvZGUgZnJvbSBgc3RhcnR1cF9nZmFyYC4gNC4gYGdmYXJfaHd0c3RhbXBfc2V0YCByZXR1cm5zIHRoZSByZXN1bHQgZnJvbSBgcmVzZXRfZ2ZhcmAgaW5zdGVhZCBvZiB6ZXJvLlxuXG5BbGwgb2YgdGhlc2UgY2hhbmdlcyBhcmUgbG9jYXRlZCBpbiB0aGUgYGRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9naWFuZmFyLmNgIGZpbGUuIFRoaXMgZHJpdmVyIGlzIGEgcGxhdGZvcm0gZHJpdmVyIHNwZWNpZmljYWxseSBmb3IgRnJlZXNjYWxlIE1QQzgzeHgsIE1QQzg1eHgsIE1QQzg2eHgsIGFuZCBMUzEwMjFBIG5ldHdvcmsgY29udHJvbGxlcnMuIFRoaXMgcmVxdWlyZXMgZGVkaWNhdGVkIGhhcmR3YXJlLCBkZXZpY2UgdHJlZSBiaW5kaW5ncywgYW5kIGl0J3Mgbm90IHBvc3NpYmxlIHRvIHJ1biBvciByZWFjaCBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBmdXp6aW5nIGVudmlyb25tZW50cyAoUUVNVS9HQ0UpLlxuXG5UaGVyZWZvcmUsIHRoaXMgcGF0Y2ggZml0cyBkaXJlY3RseSBpbnRvIHRoZSBndWlkZWxpbmU6IFwiQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLCBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlXCIuXG5cblNvLCBsZXQncyBzdW1tYXJpemU6XG4tICAgV29ydGhGdXp6aW5nOiBmYWxzZVxuLSAgIEZvY3VzU3ltYm9sczogW11cbi0gICBFbmFibGVDb25maWdzOiBbXVxuLSAgIFJlYXNvbmluZzogQWxsIHRoZSBjaGFuZ2VzIGFyZSBpbiB0aGUgYGdpYW5mYXJgIGV0aGVybmV0IGRyaXZlciBmb3IgRnJlZXNjYWxlIFNvQ3MgKFBvd2VyUEMgTVBDODN4eC84NXh4Lzg2eHgsIEFSTSBMUzEwMjFBKS4gVGhpcyBpcyBhbiBPRiBwbGF0Zm9ybSBkcml2ZXIsIHJlcXVpcmluZyBkZWRpY2F0ZWQgU29DIGhhcmR3YXJlLiBTbywgaXQncyBub3QgYXZhaWxhYmxlIG9yIHByb2JlYWJsZSBpbiBzdGFuZGFyZCBRRU1VL0dDRSB2aXJ0dWFsaXplZCBmdXp6aW5nIGVudmlyb25tZW50cy5cblxuSSdtIHJlYWR5IHRvIGNhbGwgdGhlIGBzZXQtcmVzdWx0c2AgdG9vbCBub3cuIEV2ZXJ5dGhpbmcgY2hlY2tzIG91dC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM5OTAsIk91dHB1dFRva2VucyI6MTIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTM0MCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI4VDIyOjQ3OjQwLjEwMzY4Mzg5N1oiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI1MjQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIGNoYW5nZXMgYXJlIGlzb2xhdGVkIHRvIGRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9naWFuZmFyLmMsIHdoaWNoIGlzIGEgcGxhdGZvcm0gZHJpdmVyIGZvciBGcmVlc2NhbGUvTlhQIFNvQ3MgKFBvd2VyUEMgTVBDODN4eC84NXh4Lzg2eHggYW5kIEFSTSBMUzEwMjFBKS4gSXQgcmVxdWlyZXMgc3BlY2lmaWMgRGV2aWNlIFRyZWUgbm9kZXMgYW5kIHBoeXNpY2FsIFNvQyBoYXJkd2FyZSwgbWFraW5nIGl0IGltcG9zc2libGUgdG8gcHJvYmUgYW5kIHJlYWNoIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGZ1enppbmcgZW52aXJvbm1lbnRzIHN1Y2ggYXMgUUVNVSBvciBHQ0UuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBjaGFuZ2VzIGFyZSBpc29sYXRlZCB0byBkcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZ2lhbmZhci5jLCB3aGljaCBpcyBhIHBsYXRmb3JtIGRyaXZlciBmb3IgRnJlZXNjYWxlL05YUCBTb0NzIChQb3dlclBDIE1QQzgzeHgvODV4eC84Nnh4IGFuZCBBUk0gTFMxMDIxQSkuIEl0IHJlcXVpcmVzIHNwZWNpZmljIERldmljZSBUcmVlIG5vZGVzIGFuZCBwaHlzaWNhbCBTb0MgaGFyZHdhcmUsIG1ha2luZyBpdCBpbXBvc3NpYmxlIHRvIHByb2JlIGFuZCByZWFjaCBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBmdXp6aW5nIGVudmlyb25tZW50cyBzdWNoIGFzIFFFTVUgb3IgR0NFLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjhUMjI6NDc6NDAuMTAzNzEyMTQ3WiIsIlNlcSI6MTcsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyODMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowqpkwx[1] Phase: Running StartedAt: 2026-08-28 22:47:50 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqpkwx[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-08-28 22:47:50 +0000 UTC FinishedAt: 2026-08-28 22:47:56 +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,}