Name: series-workflowg82g7 Phase: Failed StartedAt: 2026-07-08 12:23:02 +0000 UTC FinishedAt: 2026-07-08 12:37:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowg82g7[0] Phase: Succeeded StartedAt: 2026-07-08 12:23:02 +0000 UTC FinishedAt: 2026-07-08 12:37:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowg82g7[0].run-triage Phase: Succeeded StartedAt: 2026-07-08 12:23:02 +0000 UTC FinishedAt: 2026-07-08 12:37:16 +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+CgkJCTx0ZD4yMDI2LzA3LzA4IDEyOjM2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGlzIGEgcHVyZSByZWZhY3RvcmluZyB0aGF0IGNoYW5nZXMgYG1lbWRlc2NfZmxhZ3NfdGAgdG8gYmUgcGFzc2VkIGJ5IHBvaW50ZXIgaW5zdGVhZCBvZiBieSB2YWx1ZSwgYW5kIGFkZHMvZml4ZXMgS0NTQU4gYXNzZXJ0aW9ucyAoYEFTU0VSVF9FWENMVVNJVkVfQklUU2ApLiBJdCBkb2VzIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgdGhlIGV4ZWN1dGlvbiBmbG93IG9mIHRoZSBrZXJuZWwuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA4IDEyOjM2PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgNWFkMWY5NTNkZTJjYjk3ZTc0ZWZkZDI3ZDVlZmViYzY4NWVjMzQwMlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgSnVsIDggMTI6MzY6MDUgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tZ2VuZXJpYy9tZW1vcnlfbW9kZWwuaCBiL2luY2x1ZGUvYXNtLWdlbmVyaWMvbWVtb3J5X21vZGVsLmhcbmluZGV4IGVmYTY2MTBhY2JjNzk3Li5mODQwNGJjNzc3M2MyYiAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvYXNtLWdlbmVyaWMvbWVtb3J5X21vZGVsLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvYXNtLWdlbmVyaWMvbWVtb3J5X21vZGVsLmhcbkBAIC01Myw3ICYjNDM7NTMsNyBAQCBzdGF0aWMgaW5saW5lIGludCBwZm5fdmFsaWQodW5zaWduZWQgbG9uZyBwZm4pXG4gICovXG4gI2RlZmluZSBfX3BhZ2VfdG9fcGZuKHBnKVx0XHRcdFx0XHRcXFxuICh7XHRjb25zdCBzdHJ1Y3QgcGFnZSAqX19wZyA9IChwZyk7XHRcdFx0XHRcXFxuLVx0aW50IF9fc2VjID0gbWVtZGVzY19zZWN0aW9uKF9fcGctXHUwMDNlZmxhZ3MpO1x0XHRcXFxuJiM0MztcdGludCBfX3NlYyA9IG1lbWRlc2Nfc2VjdGlvbihcdTAwMjZfX3BnLVx1MDAzZWZsYWdzKTtcdFx0XFxcbiBcdCh1bnNpZ25lZCBsb25nKShfX3BnIC0gX19zZWN0aW9uX21lbV9tYXBfYWRkcihfX25yX3RvX3NlY3Rpb24oX19zZWMpKSk7XHRcXFxuIH0pXG4gXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tbS5oIGIvaW5jbHVkZS9saW51eC9tbS5oXG5pbmRleCA0ODVkZjljMmRiZGRiMy4uMWVmOWIwYmQ3ZmQzMzYgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L21tLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvbW0uaFxuQEAgLTM3LDYgJiM0MzszNyw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvYml0bWFwLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9iaXRvcHMuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2lvbW11LWRlYnVnLXBhZ2VhbGxvYy5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2tjc2FuLWNoZWNrcy5oXHUwMDNlXG4gXG4gc3RydWN0IG1lbXBvbGljeTtcbiBzdHJ1Y3QgYW5vbl92bWE7XG5AQCAtMjI4NiwyMiAmIzQzOzIyODcsMzIgQEAgc3RhdGljIGlubGluZSBpbnQgcGFnZV96b25lX2lkKHN0cnVjdCBwYWdlICpwYWdlKVxuIH1cbiBcbiAjaWZkZWYgTk9ERV9OT1RfSU5fUEFHRV9GTEFHU1xuLWludCBtZW1kZXNjX25pZChtZW1kZXNjX2ZsYWdzX3QgbWRmKTtcbiYjNDM7aW50IG1lbWRlc2NfbmlkKGNvbnN0IG1lbWRlc2NfZmxhZ3NfdCAqbWRmKTtcbiAjZWxzZVxuLXN0YXRpYyBpbmxpbmUgaW50IG1lbWRlc2NfbmlkKG1lbWRlc2NfZmxhZ3NfdCBtZGYpXG4mIzQzOyNpZmRlZiBDT05GSUdfTlVNQVxuJiM0MztzdGF0aWMgaW5saW5lIGludCBtZW1kZXNjX25pZChjb25zdCBtZW1kZXNjX2ZsYWdzX3QgKm1kZilcbiB7XG4tXHRyZXR1cm4gKG1kZi5mIFx1MDAzZVx1MDAzZSBOT0RFU19QR1NISUZUKSBcdTAwMjYgTk9ERVNfTUFTSztcbiYjNDM7XHRBU1NFUlRfRVhDTFVTSVZFX0JJVFMobWRmLVx1MDAzZWYsIE5PREVTX01BU0sgXHUwMDNjXHUwMDNjIE5PREVTX1BHU0hJRlQpO1xuJiM0MztcdHJldHVybiAobWRmLVx1MDAzZWYgXHUwMDNlXHUwMDNlIE5PREVTX1BHU0hJRlQpIFx1MDAyNiBOT0RFU19NQVNLO1xuIH1cbiYjNDM7I2Vsc2VcbiYjNDM7c3RhdGljIGlubGluZSBpbnQgbWVtZGVzY19uaWQoY29uc3QgbWVtZGVzY19mbGFnc190ICptZGYpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MzsjZW5kaWZcbiAjZW5kaWZcbiBcbiBzdGF0aWMgaW5saW5lIGludCBwYWdlX3RvX25pZChjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSlcbiB7XG4tXHRyZXR1cm4gbWVtZGVzY19uaWQoUEZfUE9JU09ORURfQ0hFQ0socGFnZSktXHUwMDNlZmxhZ3MpO1xuJiM0MztcdGNvbnN0IHN0cnVjdCBwYWdlICpwID0gUEZfUE9JU09ORURfQ0hFQ0socGFnZSk7XG4mIzQzO1xuJiM0MztcdHJldHVybiBtZW1kZXNjX25pZChcdTAwMjZwLVx1MDAzZWZsYWdzKTtcbiB9XG4gXG4gc3RhdGljIGlubGluZSBpbnQgZm9saW9fbmlkKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8pXG4ge1xuLVx0cmV0dXJuIG1lbWRlc2NfbmlkKGZvbGlvLVx1MDAzZWZsYWdzKTtcbiYjNDM7XHRyZXR1cm4gbWVtZGVzY19uaWQoXHUwMDI2Zm9saW8tXHUwMDNlZmxhZ3MpO1xuIH1cbiBcbiAjaWZkZWYgQ09ORklHX05VTUFfQkFMQU5DSU5HXG5AQCAtMjU0MSwxMiAmIzQzOzI1NTIsMTMgQEAgc3RhdGljIGlubGluZSB2b2lkIHNldF9wYWdlX3NlY3Rpb24oc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGxvbmcgc2VjdGlvbilcbiBcdHBhZ2UtXHUwMDNlZmxhZ3MuZiB8PSAoc2VjdGlvbiBcdTAwMjYgU0VDVElPTlNfTUFTSykgXHUwMDNjXHUwMDNjIFNFQ1RJT05TX1BHU0hJRlQ7XG4gfVxuIFxuLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBtZW1kZXNjX3NlY3Rpb24obWVtZGVzY19mbGFnc190IG1kZilcbiYjNDM7c3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIG1lbWRlc2Nfc2VjdGlvbihjb25zdCBtZW1kZXNjX2ZsYWdzX3QgKm1kZilcbiB7XG4tXHRyZXR1cm4gKG1kZi5mIFx1MDAzZVx1MDAzZSBTRUNUSU9OU19QR1NISUZUKSBcdTAwMjYgU0VDVElPTlNfTUFTSztcbiYjNDM7XHRBU1NFUlRfRVhDTFVTSVZFX0JJVFMobWRmLVx1MDAzZWYsIFNFQ1RJT05TX01BU0sgXHUwMDNjXHUwMDNjIFNFQ1RJT05TX1BHU0hJRlQpO1xuJiM0MztcdHJldHVybiAobWRmLVx1MDAzZWYgXHUwMDNlXHUwMDNlIFNFQ1RJT05TX1BHU0hJRlQpIFx1MDAyNiBTRUNUSU9OU19NQVNLO1xuIH1cbiAjZWxzZSAvKiAhU0VDVElPTl9JTl9QQUdFX0ZMQUdTICovXG4tc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIG1lbWRlc2Nfc2VjdGlvbihtZW1kZXNjX2ZsYWdzX3QgbWRmKVxuJiM0MztzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgbWVtZGVzY19zZWN0aW9uKGNvbnN0IG1lbWRlc2NfZmxhZ3NfdCAqbWRmKVxuIHtcbiBcdHJldHVybiAwO1xuIH1cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21tX2lubGluZS5oIGIvaW5jbHVkZS9saW51eC9tbV9pbmxpbmUuaFxuaW5kZXggYTg0MzBhN2FlMDU0NDcuLmVmY2RkYjk5MjVhZGQ3IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9tbV9pbmxpbmUuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9tbV9pbmxpbmUuaFxuQEAgLTY1MCw3ICYjNDM7NjUwLDcgQEAgc3RhdGljIGlubGluZSBib29sIHZtYV9oYXNfcmVjZW5jeShjb25zdCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcbiBzdGF0aWMgaW5saW5lIHNpemVfdCBudW1fcGFnZXNfY29udGlndW91cyhzdHJ1Y3QgcGFnZSAqKnBhZ2VzLCBzaXplX3QgbnJfcGFnZXMpXG4ge1xuIFx0c3RydWN0IHBhZ2UgKmN1cl9wYWdlID0gcGFnZXNbMF07XG4tXHR1bnNpZ25lZCBsb25nIHNlY3Rpb24gPSBtZW1kZXNjX3NlY3Rpb24oY3VyX3BhZ2UtXHUwMDNlZmxhZ3MpO1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgc2VjdGlvbiA9IG1lbWRlc2Nfc2VjdGlvbihcdTAwMjZjdXJfcGFnZS1cdTAwM2VmbGFncyk7XG4gXHRzaXplX3QgaTtcbiBcbiBcdGZvciAoaSA9IDE7IGkgXHUwMDNjIG5yX3BhZ2VzOyBpJiM0MzsmIzQzOykge1xuQEAgLTY2MCw3ICYjNDM7NjYwLDcgQEAgc3RhdGljIGlubGluZSBzaXplX3QgbnVtX3BhZ2VzX2NvbnRpZ3VvdXMoc3RydWN0IHBhZ2UgKipwYWdlcywgc2l6ZV90IG5yX3BhZ2VzKVxuIFx0XHQgKiBJbiB1bnByb2JsZW1hdGljIGtlcm5lbCBjb25maWdzLCBwYWdlX3RvX3NlY3Rpb24oKSA9PSAwIGFuZFxuIFx0XHQgKiB0aGUgd2hvbGUgY2hlY2sgd2lsbCBnZXQgb3B0aW1pemVkIG91dC5cbiBcdFx0ICovXG4tXHRcdGlmIChtZW1kZXNjX3NlY3Rpb24oY3VyX3BhZ2UtXHUwMDNlZmxhZ3MpICE9IHNlY3Rpb24pXG4mIzQzO1x0XHRpZiAobWVtZGVzY19zZWN0aW9uKFx1MDAyNmN1cl9wYWdlLVx1MDAzZWZsYWdzKSAhPSBzZWN0aW9uKVxuIFx0XHRcdGJyZWFrO1xuIFx0fVxuIFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbW16b25lLmggYi9pbmNsdWRlL2xpbnV4L21tem9uZS5oXG5pbmRleCBjYTI3MTIxODcxNDc1Yy4uZTYwZGFkNTQ2Y2E2OGQgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L21tem9uZS5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L21tem9uZS5oXG5AQCAtMTI3MiwzMSAmIzQzOzEyNzIsMzMgQEAgc3RhdGljIGlubGluZSBib29sIHpvbmVfaXNfZW1wdHkoY29uc3Qgc3RydWN0IHpvbmUgKnpvbmUpXG4gI2RlZmluZSBLQVNBTl9UQUdfTUFTS1x0XHQoKDFVTCBcdTAwM2NcdTAwM2MgS0FTQU5fVEFHX1dJRFRIKSAtIDEpXG4gI2RlZmluZSBaT05FSURfTUFTS1x0XHQoKDFVTCBcdTAwM2NcdTAwM2MgWk9ORUlEX1NISUZUKSAtIDEpXG4gXG4tc3RhdGljIGlubGluZSBlbnVtIHpvbmVfdHlwZSBtZW1kZXNjX3pvbmVudW0obWVtZGVzY19mbGFnc190IGZsYWdzKVxuJiM0MztzdGF0aWMgaW5saW5lIGVudW0gem9uZV90eXBlIG1lbWRlc2Nfem9uZW51bShjb25zdCBtZW1kZXNjX2ZsYWdzX3QgKmZsYWdzKVxuIHtcbi1cdEFTU0VSVF9FWENMVVNJVkVfQklUUyhmbGFncy5mLCBaT05FU19NQVNLIFx1MDAzY1x1MDAzYyBaT05FU19QR1NISUZUKTtcbi1cdHJldHVybiAoZmxhZ3MuZiBcdTAwM2VcdTAwM2UgWk9ORVNfUEdTSElGVCkgXHUwMDI2IFpPTkVTX01BU0s7XG4mIzQzOyNpZiBaT05FU19XSURUSCAhPSAwXG4mIzQzO1x0QVNTRVJUX0VYQ0xVU0lWRV9CSVRTKGZsYWdzLVx1MDAzZWYsIFpPTkVTX01BU0sgXHUwMDNjXHUwMDNjIFpPTkVTX1BHU0hJRlQpO1xuJiM0MzsjZW5kaWZcbiYjNDM7XHRyZXR1cm4gKGZsYWdzLVx1MDAzZWYgXHUwMDNlXHUwMDNlIFpPTkVTX1BHU0hJRlQpIFx1MDAyNiBaT05FU19NQVNLO1xuIH1cbiBcbiBzdGF0aWMgaW5saW5lIGVudW0gem9uZV90eXBlIHBhZ2Vfem9uZW51bShjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSlcbiB7XG4tXHRyZXR1cm4gbWVtZGVzY196b25lbnVtKHBhZ2UtXHUwMDNlZmxhZ3MpO1xuJiM0MztcdHJldHVybiBtZW1kZXNjX3pvbmVudW0oXHUwMDI2cGFnZS1cdTAwM2VmbGFncyk7XG4gfVxuIFxuIHN0YXRpYyBpbmxpbmUgZW51bSB6b25lX3R5cGUgZm9saW9fem9uZW51bShjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIHtcbi1cdHJldHVybiBtZW1kZXNjX3pvbmVudW0oZm9saW8tXHUwMDNlZmxhZ3MpO1xuJiM0MztcdHJldHVybiBtZW1kZXNjX3pvbmVudW0oXHUwMDI2Zm9saW8tXHUwMDNlZmxhZ3MpO1xuIH1cbiBcbiAjaWZkZWYgQ09ORklHX1pPTkVfREVWSUNFXG4tc3RhdGljIGlubGluZSBib29sIG1lbWRlc2NfaXNfem9uZV9kZXZpY2UobWVtZGVzY19mbGFnc190IG1kZilcbiYjNDM7c3RhdGljIGlubGluZSBib29sIG1lbWRlc2NfaXNfem9uZV9kZXZpY2UoY29uc3QgbWVtZGVzY19mbGFnc190ICptZGYpXG4ge1xuIFx0cmV0dXJuIG1lbWRlc2Nfem9uZW51bShtZGYpID09IFpPTkVfREVWSUNFO1xuIH1cbiBcbiBzdGF0aWMgaW5saW5lIHN0cnVjdCBkZXZfcGFnZW1hcCAqcGFnZV9wZ21hcChjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSlcbiB7XG4tXHRWTV9XQVJOX09OX09OQ0VfUEFHRSghbWVtZGVzY19pc196b25lX2RldmljZShwYWdlLVx1MDAzZWZsYWdzKSwgcGFnZSk7XG4mIzQzO1x0Vk1fV0FSTl9PTl9PTkNFX1BBR0UoIW1lbWRlc2NfaXNfem9uZV9kZXZpY2UoXHUwMDI2cGFnZS1cdTAwM2VmbGFncyksIHBhZ2UpO1xuIFx0cmV0dXJuIHBhZ2VfZm9saW8ocGFnZSktXHUwMDNlcGdtYXA7XG4gfVxuIFxuQEAgLTEzMTEsOSAmIzQzOzEzMTMsOSBAQCBzdGF0aWMgaW5saW5lIHN0cnVjdCBkZXZfcGFnZW1hcCAqcGFnZV9wZ21hcChjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSlcbiBzdGF0aWMgaW5saW5lIGJvb2wgem9uZV9kZXZpY2VfcGFnZXNfaGF2ZV9zYW1lX3BnbWFwKGNvbnN0IHN0cnVjdCBwYWdlICphLFxuIFx0XHRcdFx0XHRcdCAgICAgY29uc3Qgc3RydWN0IHBhZ2UgKmIpXG4ge1xuLVx0aWYgKG1lbWRlc2NfaXNfem9uZV9kZXZpY2UoYS1cdTAwM2VmbGFncykgIT0gbWVtZGVzY19pc196b25lX2RldmljZShiLVx1MDAzZWZsYWdzKSlcbiYjNDM7XHRpZiAobWVtZGVzY19pc196b25lX2RldmljZShcdTAwMjZhLVx1MDAzZWZsYWdzKSAhPSBtZW1kZXNjX2lzX3pvbmVfZGV2aWNlKFx1MDAyNmItXHUwMDNlZmxhZ3MpKVxuIFx0XHRyZXR1cm4gZmFsc2U7XG4tXHRpZiAoIW1lbWRlc2NfaXNfem9uZV9kZXZpY2UoYS1cdTAwM2VmbGFncykpXG4mIzQzO1x0aWYgKCFtZW1kZXNjX2lzX3pvbmVfZGV2aWNlKFx1MDAyNmEtXHUwMDNlZmxhZ3MpKVxuIFx0XHRyZXR1cm4gdHJ1ZTtcbiBcdHJldHVybiBwYWdlX3BnbWFwKGEpID09IHBhZ2VfcGdtYXAoYik7XG4gfVxuQEAgLTEzMjEsNyAmIzQzOzEzMjMsNyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgem9uZV9kZXZpY2VfcGFnZXNfaGF2ZV9zYW1lX3BnbWFwKGNvbnN0IHN0cnVjdCBwYWdlICphLFxuIGV4dGVybiB2b2lkIG1lbW1hcF9pbml0X3pvbmVfZGV2aWNlKHN0cnVjdCB6b25lICosIHVuc2lnbmVkIGxvbmcsXG4gXHRcdFx0XHQgICAgdW5zaWduZWQgbG9uZywgc3RydWN0IGRldl9wYWdlbWFwICopO1xuICNlbHNlXG4tc3RhdGljIGlubGluZSBib29sIG1lbWRlc2NfaXNfem9uZV9kZXZpY2UobWVtZGVzY19mbGFnc190IG1kZilcbiYjNDM7c3RhdGljIGlubGluZSBib29sIG1lbWRlc2NfaXNfem9uZV9kZXZpY2UoY29uc3QgbWVtZGVzY19mbGFnc190ICptZGYpXG4ge1xuIFx0cmV0dXJuIGZhbHNlO1xuIH1cbkBAIC0xMzM4LDEyICYjNDM7MTM0MCwxMiBAQCBzdGF0aWMgaW5saW5lIHN0cnVjdCBkZXZfcGFnZW1hcCAqcGFnZV9wZ21hcChjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSlcbiBcbiBzdGF0aWMgaW5saW5lIGJvb2wgaXNfem9uZV9kZXZpY2VfcGFnZShjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSlcbiB7XG4tXHRyZXR1cm4gbWVtZGVzY19pc196b25lX2RldmljZShwYWdlLVx1MDAzZWZsYWdzKTtcbiYjNDM7XHRyZXR1cm4gbWVtZGVzY19pc196b25lX2RldmljZShcdTAwMjZwYWdlLVx1MDAzZWZsYWdzKTtcbiB9XG4gXG4gc3RhdGljIGlubGluZSBib29sIGZvbGlvX2lzX3pvbmVfZGV2aWNlKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8pXG4ge1xuLVx0cmV0dXJuIG1lbWRlc2NfaXNfem9uZV9kZXZpY2UoZm9saW8tXHUwMDNlZmxhZ3MpO1xuJiM0MztcdHJldHVybiBtZW1kZXNjX2lzX3pvbmVfZGV2aWNlKFx1MDAyNmZvbGlvLVx1MDAzZWZsYWdzKTtcbiB9XG4gXG4gc3RhdGljIGlubGluZSBib29sIGlzX3pvbmVfbW92YWJsZV9wYWdlKGNvbnN0IHN0cnVjdCBwYWdlICpwYWdlKVxuZGlmZiAtLWdpdCBhL21tL3BhZ2VfYWxsb2MuYyBiL21tL3BhZ2VfYWxsb2MuY1xuaW5kZXggZWU5MDJhNDY4YzJmNWIuLjAyMGE5N2NhMDE4ZTk5IDEwMDY0NFxuLS0tIGEvbW0vcGFnZV9hbGxvYy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9wYWdlX2FsbG9jLmNcbkBAIC02OTA0LDE1ICYjNDM7NjkwNCwxNSBAQCBzdGF0aWMgdm9pZCBfX2ZyZWVfY29udGlnX3JhbmdlX2NvbW1vbih1bnNpZ25lZCBsb25nIHBmbiwgdW5zaWduZWQgbG9uZyBucl9wYWdlc1xuIFx0XHRcdGNvbnRpbnVlO1xuIFx0XHR9XG4gXG4tXHRcdGlmIChzdGFydCBcdTAwMjZcdTAwMjYgbWVtZGVzY19zZWN0aW9uKHBhZ2UtXHUwMDNlZmxhZ3MpICE9IHN0YXJ0X3NlYykge1xuJiM0MztcdFx0aWYgKHN0YXJ0IFx1MDAyNlx1MDAyNiBtZW1kZXNjX3NlY3Rpb24oXHUwMDI2cGFnZS1cdTAwM2VmbGFncykgIT0gc3RhcnRfc2VjKSB7XG4gXHRcdFx0ZnJlZV9wcmVwYXJlZF9jb250aWdfcmFuZ2Uoc3RhcnQsIGkgLSBucl9zdGFydCk7XG4gXHRcdFx0c3RhcnQgPSBwYWdlO1xuIFx0XHRcdG5yX3N0YXJ0ID0gaTtcbi1cdFx0XHRzdGFydF9zZWMgPSBtZW1kZXNjX3NlY3Rpb24ocGFnZS1cdTAwM2VmbGFncyk7XG4mIzQzO1x0XHRcdHN0YXJ0X3NlYyA9IG1lbWRlc2Nfc2VjdGlvbihcdTAwMjZwYWdlLVx1MDAzZWZsYWdzKTtcbiBcdFx0fSBlbHNlIGlmICghc3RhcnQpIHtcbiBcdFx0XHRzdGFydCA9IHBhZ2U7XG4gXHRcdFx0bnJfc3RhcnQgPSBpO1xuLVx0XHRcdHN0YXJ0X3NlYyA9IG1lbWRlc2Nfc2VjdGlvbihwYWdlLVx1MDAzZWZsYWdzKTtcbiYjNDM7XHRcdFx0c3RhcnRfc2VjID0gbWVtZGVzY19zZWN0aW9uKFx1MDAyNnBhZ2UtXHUwMDNlZmxhZ3MpO1xuIFx0XHR9XG4gXHR9XG4gXG5kaWZmIC0tZ2l0IGEvbW0vc2xhYi5oIGIvbW0vc2xhYi5oXG5pbmRleCAyODFhNjUyMzM3OTVkNi4uOWRlZDMxOTQ5NWEwNzAgMTAwNjQ0XG4tLS0gYS9tbS9zbGFiLmhcbiYjNDM7JiM0MzsmIzQzOyBiL21tL3NsYWIuaFxuQEAgLTE3OSw3ICYjNDM7MTc5LDcgQEAgc3RhdGljIGlubGluZSB2b2lkICpzbGFiX2FkZHJlc3MoY29uc3Qgc3RydWN0IHNsYWIgKnNsYWIpXG4gXG4gc3RhdGljIGlubGluZSBpbnQgc2xhYl9uaWQoY29uc3Qgc3RydWN0IHNsYWIgKnNsYWIpXG4ge1xuLVx0cmV0dXJuIG1lbWRlc2NfbmlkKHNsYWItXHUwMDNlZmxhZ3MpO1xuJiM0MztcdHJldHVybiBtZW1kZXNjX25pZChcdTAwMjZzbGFiLVx1MDAzZWZsYWdzKTtcbiB9XG4gXG4gc3RhdGljIGlubGluZSBwZ19kYXRhX3QgKnNsYWJfcGdkYXQoY29uc3Qgc3RydWN0IHNsYWIgKnNsYWIpXG5kaWZmIC0tZ2l0IGEvbW0vc3BhcnNlLmMgYi9tbS9zcGFyc2UuY1xuaW5kZXggMTZhYzZkZjNjODlmYTIuLjhlMzg0Nzc2NDUxMzE5IDEwMDY0NFxuLS0tIGEvbW0vc3BhcnNlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL3NwYXJzZS5jXG5AQCAtNDMsNyAmIzQzOzQzLDcgQEAgc3RhdGljIHU4IHNlY3Rpb25fdG9fbm9kZV90YWJsZVtOUl9NRU1fU0VDVElPTlNdIF9fY2FjaGVsaW5lX2FsaWduZWQ7XG4gc3RhdGljIHUxNiBzZWN0aW9uX3RvX25vZGVfdGFibGVbTlJfTUVNX1NFQ1RJT05TXSBfX2NhY2hlbGluZV9hbGlnbmVkO1xuICNlbmRpZlxuIFxuLWludCBtZW1kZXNjX25pZChtZW1kZXNjX2ZsYWdzX3QgbWRmKVxuJiM0MztpbnQgbWVtZGVzY19uaWQoY29uc3QgbWVtZGVzY19mbGFnc190ICptZGYpXG4ge1xuIFx0cmV0dXJuIHNlY3Rpb25fdG9fbm9kZV90YWJsZVttZW1kZXNjX3NlY3Rpb24obWRmKV07XG4gfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA4IDEyOjM2PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGlzIGEgcHVyZSByZWZhY3RvcmluZyB0aGF0IGNoYW5nZXMgYG1lbWRlc2NfZmxhZ3NfdGAgdG8gYmUgcGFzc2VkIGJ5IHBvaW50ZXIgaW5zdGVhZCBvZiBieSB2YWx1ZSwgYW5kIGFkZHMvZml4ZXMgS0NTQU4gYXNzZXJ0aW9ucyAoYEFTU0VSVF9FWENMVVNJVkVfQklUU2ApLiBJdCBkb2VzIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgdGhlIGV4ZWN1dGlvbiBmbG93IG9mIHRoZSBrZXJuZWwuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdAogICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksCiAgIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA1YWQxZjk1M2RlMmNiOTdlNzRlZmRkMjdkNWVmZWJjNjg1ZWMzNDAyCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFdlZCBKdWwgOCAxMjozNjowNSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWdlbmVyaWMvbWVtb3J5X21vZGVsLmggYi9pbmNsdWRlL2FzbS1nZW5lcmljL21lbW9yeV9tb2RlbC5oCmluZGV4IGVmYTY2MTBhY2JjNzk3Li5mODQwNGJjNzc3M2MyYiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tZ2VuZXJpYy9tZW1vcnlfbW9kZWwuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2FzbS1nZW5lcmljL21lbW9yeV9tb2RlbC5oCkBAIC01Myw3ICYjNDM7NTMsNyBAQCBzdGF0aWMgaW5saW5lIGludCBwZm5fdmFsaWQodW5zaWduZWQgbG9uZyBwZm4pCiAgKi8KICNkZWZpbmUgX19wYWdlX3RvX3BmbihwZykJCQkJCVwKICh7CWNvbnN0IHN0cnVjdCBwYWdlICpfX3BnID0gKHBnKTsJCQkJXAotCWludCBfX3NlYyA9IG1lbWRlc2Nfc2VjdGlvbihfX3BnLSZndDtmbGFncyk7CQlcCiYjNDM7CWludCBfX3NlYyA9IG1lbWRlc2Nfc2VjdGlvbigmYW1wO19fcGctJmd0O2ZsYWdzKTsJCVwKIAkodW5zaWduZWQgbG9uZykoX19wZyAtIF9fc2VjdGlvbl9tZW1fbWFwX2FkZHIoX19ucl90b19zZWN0aW9uKF9fc2VjKSkpOwlcCiB9KQogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21tLmggYi9pbmNsdWRlL2xpbnV4L21tLmgKaW5kZXggNDg1ZGY5YzJkYmRkYjMuLjFlZjliMGJkN2ZkMzM2IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L21tLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9tbS5oCkBAIC0zNyw2ICYjNDM7MzcsNyBAQAogI2luY2x1ZGUgJmx0O2xpbnV4L2JpdG1hcC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2JpdG9wcy5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2lvbW11LWRlYnVnLXBhZ2VhbGxvYy5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9rY3Nhbi1jaGVja3MuaCZndDsKIAogc3RydWN0IG1lbXBvbGljeTsKIHN0cnVjdCBhbm9uX3ZtYTsKQEAgLTIyODYsMjIgJiM0MzsyMjg3LDMyIEBAIHN0YXRpYyBpbmxpbmUgaW50IHBhZ2Vfem9uZV9pZChzdHJ1Y3QgcGFnZSAqcGFnZSkKIH0KIAogI2lmZGVmIE5PREVfTk9UX0lOX1BBR0VfRkxBR1MKLWludCBtZW1kZXNjX25pZChtZW1kZXNjX2ZsYWdzX3QgbWRmKTsKJiM0MztpbnQgbWVtZGVzY19uaWQoY29uc3QgbWVtZGVzY19mbGFnc190ICptZGYpOwogI2Vsc2UKLXN0YXRpYyBpbmxpbmUgaW50IG1lbWRlc2NfbmlkKG1lbWRlc2NfZmxhZ3NfdCBtZGYpCiYjNDM7I2lmZGVmIENPTkZJR19OVU1BCiYjNDM7c3RhdGljIGlubGluZSBpbnQgbWVtZGVzY19uaWQoY29uc3QgbWVtZGVzY19mbGFnc190ICptZGYpCiB7Ci0JcmV0dXJuIChtZGYuZiAmZ3Q7Jmd0OyBOT0RFU19QR1NISUZUKSAmYW1wOyBOT0RFU19NQVNLOwomIzQzOwlBU1NFUlRfRVhDTFVTSVZFX0JJVFMobWRmLSZndDtmLCBOT0RFU19NQVNLICZsdDsmbHQ7IE5PREVTX1BHU0hJRlQpOwomIzQzOwlyZXR1cm4gKG1kZi0mZ3Q7ZiAmZ3Q7Jmd0OyBOT0RFU19QR1NISUZUKSAmYW1wOyBOT0RFU19NQVNLOwogfQomIzQzOyNlbHNlCiYjNDM7c3RhdGljIGlubGluZSBpbnQgbWVtZGVzY19uaWQoY29uc3QgbWVtZGVzY19mbGFnc190ICptZGYpCiYjNDM7ewomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7I2VuZGlmCiAjZW5kaWYKIAogc3RhdGljIGlubGluZSBpbnQgcGFnZV90b19uaWQoY29uc3Qgc3RydWN0IHBhZ2UgKnBhZ2UpCiB7Ci0JcmV0dXJuIG1lbWRlc2NfbmlkKFBGX1BPSVNPTkVEX0NIRUNLKHBhZ2UpLSZndDtmbGFncyk7CiYjNDM7CWNvbnN0IHN0cnVjdCBwYWdlICpwID0gUEZfUE9JU09ORURfQ0hFQ0socGFnZSk7CiYjNDM7CiYjNDM7CXJldHVybiBtZW1kZXNjX25pZCgmYW1wO3AtJmd0O2ZsYWdzKTsKIH0KIAogc3RhdGljIGlubGluZSBpbnQgZm9saW9fbmlkKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8pCiB7Ci0JcmV0dXJuIG1lbWRlc2NfbmlkKGZvbGlvLSZndDtmbGFncyk7CiYjNDM7CXJldHVybiBtZW1kZXNjX25pZCgmYW1wO2ZvbGlvLSZndDtmbGFncyk7CiB9CiAKICNpZmRlZiBDT05GSUdfTlVNQV9CQUxBTkNJTkcKQEAgLTI1NDEsMTIgJiM0MzsyNTUyLDEzIEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBzZXRfcGFnZV9zZWN0aW9uKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBsb25nIHNlY3Rpb24pCiAJcGFnZS0mZ3Q7ZmxhZ3MuZiB8PSAoc2VjdGlvbiAmYW1wOyBTRUNUSU9OU19NQVNLKSAmbHQ7Jmx0OyBTRUNUSU9OU19QR1NISUZUOwogfQogCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgbWVtZGVzY19zZWN0aW9uKG1lbWRlc2NfZmxhZ3NfdCBtZGYpCiYjNDM7c3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIG1lbWRlc2Nfc2VjdGlvbihjb25zdCBtZW1kZXNjX2ZsYWdzX3QgKm1kZikKIHsKLQlyZXR1cm4gKG1kZi5mICZndDsmZ3Q7IFNFQ1RJT05TX1BHU0hJRlQpICZhbXA7IFNFQ1RJT05TX01BU0s7CiYjNDM7CUFTU0VSVF9FWENMVVNJVkVfQklUUyhtZGYtJmd0O2YsIFNFQ1RJT05TX01BU0sgJmx0OyZsdDsgU0VDVElPTlNfUEdTSElGVCk7CiYjNDM7CXJldHVybiAobWRmLSZndDtmICZndDsmZ3Q7IFNFQ1RJT05TX1BHU0hJRlQpICZhbXA7IFNFQ1RJT05TX01BU0s7CiB9CiAjZWxzZSAvKiAhU0VDVElPTl9JTl9QQUdFX0ZMQUdTICovCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgbWVtZGVzY19zZWN0aW9uKG1lbWRlc2NfZmxhZ3NfdCBtZGYpCiYjNDM7c3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIG1lbWRlc2Nfc2VjdGlvbihjb25zdCBtZW1kZXNjX2ZsYWdzX3QgKm1kZikKIHsKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbW1faW5saW5lLmggYi9pbmNsdWRlL2xpbnV4L21tX2lubGluZS5oCmluZGV4IGE4NDMwYTdhZTA1NDQ3Li5lZmNkZGI5OTI1YWRkNyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tbV9pbmxpbmUuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L21tX2lubGluZS5oCkBAIC02NTAsNyAmIzQzOzY1MCw3IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCB2bWFfaGFzX3JlY2VuY3koY29uc3Qgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpCiBzdGF0aWMgaW5saW5lIHNpemVfdCBudW1fcGFnZXNfY29udGlndW91cyhzdHJ1Y3QgcGFnZSAqKnBhZ2VzLCBzaXplX3QgbnJfcGFnZXMpCiB7CiAJc3RydWN0IHBhZ2UgKmN1cl9wYWdlID0gcGFnZXNbMF07Ci0JdW5zaWduZWQgbG9uZyBzZWN0aW9uID0gbWVtZGVzY19zZWN0aW9uKGN1cl9wYWdlLSZndDtmbGFncyk7CiYjNDM7CXVuc2lnbmVkIGxvbmcgc2VjdGlvbiA9IG1lbWRlc2Nfc2VjdGlvbigmYW1wO2N1cl9wYWdlLSZndDtmbGFncyk7CiAJc2l6ZV90IGk7CiAKIAlmb3IgKGkgPSAxOyBpICZsdDsgbnJfcGFnZXM7IGkmIzQzOyYjNDM7KSB7CkBAIC02NjAsNyAmIzQzOzY2MCw3IEBAIHN0YXRpYyBpbmxpbmUgc2l6ZV90IG51bV9wYWdlc19jb250aWd1b3VzKHN0cnVjdCBwYWdlICoqcGFnZXMsIHNpemVfdCBucl9wYWdlcykKIAkJICogSW4gdW5wcm9ibGVtYXRpYyBrZXJuZWwgY29uZmlncywgcGFnZV90b19zZWN0aW9uKCkgPT0gMCBhbmQKIAkJICogdGhlIHdob2xlIGNoZWNrIHdpbGwgZ2V0IG9wdGltaXplZCBvdXQuCiAJCSAqLwotCQlpZiAobWVtZGVzY19zZWN0aW9uKGN1cl9wYWdlLSZndDtmbGFncykgIT0gc2VjdGlvbikKJiM0MzsJCWlmIChtZW1kZXNjX3NlY3Rpb24oJmFtcDtjdXJfcGFnZS0mZ3Q7ZmxhZ3MpICE9IHNlY3Rpb24pCiAJCQlicmVhazsKIAl9CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbW16b25lLmggYi9pbmNsdWRlL2xpbnV4L21tem9uZS5oCmluZGV4IGNhMjcxMjE4NzE0NzVjLi5lNjBkYWQ1NDZjYTY4ZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tbXpvbmUuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L21tem9uZS5oCkBAIC0xMjcyLDMxICYjNDM7MTI3MiwzMyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgem9uZV9pc19lbXB0eShjb25zdCBzdHJ1Y3Qgem9uZSAqem9uZSkKICNkZWZpbmUgS0FTQU5fVEFHX01BU0sJCSgoMVVMICZsdDsmbHQ7IEtBU0FOX1RBR19XSURUSCkgLSAxKQogI2RlZmluZSBaT05FSURfTUFTSwkJKCgxVUwgJmx0OyZsdDsgWk9ORUlEX1NISUZUKSAtIDEpCiAKLXN0YXRpYyBpbmxpbmUgZW51bSB6b25lX3R5cGUgbWVtZGVzY196b25lbnVtKG1lbWRlc2NfZmxhZ3NfdCBmbGFncykKJiM0MztzdGF0aWMgaW5saW5lIGVudW0gem9uZV90eXBlIG1lbWRlc2Nfem9uZW51bShjb25zdCBtZW1kZXNjX2ZsYWdzX3QgKmZsYWdzKQogewotCUFTU0VSVF9FWENMVVNJVkVfQklUUyhmbGFncy5mLCBaT05FU19NQVNLICZsdDsmbHQ7IFpPTkVTX1BHU0hJRlQpOwotCXJldHVybiAoZmxhZ3MuZiAmZ3Q7Jmd0OyBaT05FU19QR1NISUZUKSAmYW1wOyBaT05FU19NQVNLOwomIzQzOyNpZiBaT05FU19XSURUSCAhPSAwCiYjNDM7CUFTU0VSVF9FWENMVVNJVkVfQklUUyhmbGFncy0mZ3Q7ZiwgWk9ORVNfTUFTSyAmbHQ7Jmx0OyBaT05FU19QR1NISUZUKTsKJiM0MzsjZW5kaWYKJiM0MzsJcmV0dXJuIChmbGFncy0mZ3Q7ZiAmZ3Q7Jmd0OyBaT05FU19QR1NISUZUKSAmYW1wOyBaT05FU19NQVNLOwogfQogCiBzdGF0aWMgaW5saW5lIGVudW0gem9uZV90eXBlIHBhZ2Vfem9uZW51bShjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSkKIHsKLQlyZXR1cm4gbWVtZGVzY196b25lbnVtKHBhZ2UtJmd0O2ZsYWdzKTsKJiM0MzsJcmV0dXJuIG1lbWRlc2Nfem9uZW51bSgmYW1wO3BhZ2UtJmd0O2ZsYWdzKTsKIH0KIAogc3RhdGljIGlubGluZSBlbnVtIHpvbmVfdHlwZSBmb2xpb196b25lbnVtKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8pCiB7Ci0JcmV0dXJuIG1lbWRlc2Nfem9uZW51bShmb2xpby0mZ3Q7ZmxhZ3MpOwomIzQzOwlyZXR1cm4gbWVtZGVzY196b25lbnVtKCZhbXA7Zm9saW8tJmd0O2ZsYWdzKTsKIH0KIAogI2lmZGVmIENPTkZJR19aT05FX0RFVklDRQotc3RhdGljIGlubGluZSBib29sIG1lbWRlc2NfaXNfem9uZV9kZXZpY2UobWVtZGVzY19mbGFnc190IG1kZikKJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgbWVtZGVzY19pc196b25lX2RldmljZShjb25zdCBtZW1kZXNjX2ZsYWdzX3QgKm1kZikKIHsKIAlyZXR1cm4gbWVtZGVzY196b25lbnVtKG1kZikgPT0gWk9ORV9ERVZJQ0U7CiB9CiAKIHN0YXRpYyBpbmxpbmUgc3RydWN0IGRldl9wYWdlbWFwICpwYWdlX3BnbWFwKGNvbnN0IHN0cnVjdCBwYWdlICpwYWdlKQogewotCVZNX1dBUk5fT05fT05DRV9QQUdFKCFtZW1kZXNjX2lzX3pvbmVfZGV2aWNlKHBhZ2UtJmd0O2ZsYWdzKSwgcGFnZSk7CiYjNDM7CVZNX1dBUk5fT05fT05DRV9QQUdFKCFtZW1kZXNjX2lzX3pvbmVfZGV2aWNlKCZhbXA7cGFnZS0mZ3Q7ZmxhZ3MpLCBwYWdlKTsKIAlyZXR1cm4gcGFnZV9mb2xpbyhwYWdlKS0mZ3Q7cGdtYXA7CiB9CiAKQEAgLTEzMTEsOSAmIzQzOzEzMTMsOSBAQCBzdGF0aWMgaW5saW5lIHN0cnVjdCBkZXZfcGFnZW1hcCAqcGFnZV9wZ21hcChjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSkKIHN0YXRpYyBpbmxpbmUgYm9vbCB6b25lX2RldmljZV9wYWdlc19oYXZlX3NhbWVfcGdtYXAoY29uc3Qgc3RydWN0IHBhZ2UgKmEsCiAJCQkJCQkgICAgIGNvbnN0IHN0cnVjdCBwYWdlICpiKQogewotCWlmIChtZW1kZXNjX2lzX3pvbmVfZGV2aWNlKGEtJmd0O2ZsYWdzKSAhPSBtZW1kZXNjX2lzX3pvbmVfZGV2aWNlKGItJmd0O2ZsYWdzKSkKJiM0MzsJaWYgKG1lbWRlc2NfaXNfem9uZV9kZXZpY2UoJmFtcDthLSZndDtmbGFncykgIT0gbWVtZGVzY19pc196b25lX2RldmljZSgmYW1wO2ItJmd0O2ZsYWdzKSkKIAkJcmV0dXJuIGZhbHNlOwotCWlmICghbWVtZGVzY19pc196b25lX2RldmljZShhLSZndDtmbGFncykpCiYjNDM7CWlmICghbWVtZGVzY19pc196b25lX2RldmljZSgmYW1wO2EtJmd0O2ZsYWdzKSkKIAkJcmV0dXJuIHRydWU7CiAJcmV0dXJuIHBhZ2VfcGdtYXAoYSkgPT0gcGFnZV9wZ21hcChiKTsKIH0KQEAgLTEzMjEsNyAmIzQzOzEzMjMsNyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgem9uZV9kZXZpY2VfcGFnZXNfaGF2ZV9zYW1lX3BnbWFwKGNvbnN0IHN0cnVjdCBwYWdlICphLAogZXh0ZXJuIHZvaWQgbWVtbWFwX2luaXRfem9uZV9kZXZpY2Uoc3RydWN0IHpvbmUgKiwgdW5zaWduZWQgbG9uZywKIAkJCQkgICAgdW5zaWduZWQgbG9uZywgc3RydWN0IGRldl9wYWdlbWFwICopOwogI2Vsc2UKLXN0YXRpYyBpbmxpbmUgYm9vbCBtZW1kZXNjX2lzX3pvbmVfZGV2aWNlKG1lbWRlc2NfZmxhZ3NfdCBtZGYpCiYjNDM7c3RhdGljIGlubGluZSBib29sIG1lbWRlc2NfaXNfem9uZV9kZXZpY2UoY29uc3QgbWVtZGVzY19mbGFnc190ICptZGYpCiB7CiAJcmV0dXJuIGZhbHNlOwogfQpAQCAtMTMzOCwxMiAmIzQzOzEzNDAsMTIgQEAgc3RhdGljIGlubGluZSBzdHJ1Y3QgZGV2X3BhZ2VtYXAgKnBhZ2VfcGdtYXAoY29uc3Qgc3RydWN0IHBhZ2UgKnBhZ2UpCiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBpc196b25lX2RldmljZV9wYWdlKGNvbnN0IHN0cnVjdCBwYWdlICpwYWdlKQogewotCXJldHVybiBtZW1kZXNjX2lzX3pvbmVfZGV2aWNlKHBhZ2UtJmd0O2ZsYWdzKTsKJiM0MzsJcmV0dXJuIG1lbWRlc2NfaXNfem9uZV9kZXZpY2UoJmFtcDtwYWdlLSZndDtmbGFncyk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBmb2xpb19pc196b25lX2RldmljZShjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKQogewotCXJldHVybiBtZW1kZXNjX2lzX3pvbmVfZGV2aWNlKGZvbGlvLSZndDtmbGFncyk7CiYjNDM7CXJldHVybiBtZW1kZXNjX2lzX3pvbmVfZGV2aWNlKCZhbXA7Zm9saW8tJmd0O2ZsYWdzKTsKIH0KIAogc3RhdGljIGlubGluZSBib29sIGlzX3pvbmVfbW92YWJsZV9wYWdlKGNvbnN0IHN0cnVjdCBwYWdlICpwYWdlKQpkaWZmIC0tZ2l0IGEvbW0vcGFnZV9hbGxvYy5jIGIvbW0vcGFnZV9hbGxvYy5jCmluZGV4IGVlOTAyYTQ2OGMyZjViLi4wMjBhOTdjYTAxOGU5OSAxMDA2NDQKLS0tIGEvbW0vcGFnZV9hbGxvYy5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL3BhZ2VfYWxsb2MuYwpAQCAtNjkwNCwxNSAmIzQzOzY5MDQsMTUgQEAgc3RhdGljIHZvaWQgX19mcmVlX2NvbnRpZ19yYW5nZV9jb21tb24odW5zaWduZWQgbG9uZyBwZm4sIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMKIAkJCWNvbnRpbnVlOwogCQl9CiAKLQkJaWYgKHN0YXJ0ICZhbXA7JmFtcDsgbWVtZGVzY19zZWN0aW9uKHBhZ2UtJmd0O2ZsYWdzKSAhPSBzdGFydF9zZWMpIHsKJiM0MzsJCWlmIChzdGFydCAmYW1wOyZhbXA7IG1lbWRlc2Nfc2VjdGlvbigmYW1wO3BhZ2UtJmd0O2ZsYWdzKSAhPSBzdGFydF9zZWMpIHsKIAkJCWZyZWVfcHJlcGFyZWRfY29udGlnX3JhbmdlKHN0YXJ0LCBpIC0gbnJfc3RhcnQpOwogCQkJc3RhcnQgPSBwYWdlOwogCQkJbnJfc3RhcnQgPSBpOwotCQkJc3RhcnRfc2VjID0gbWVtZGVzY19zZWN0aW9uKHBhZ2UtJmd0O2ZsYWdzKTsKJiM0MzsJCQlzdGFydF9zZWMgPSBtZW1kZXNjX3NlY3Rpb24oJmFtcDtwYWdlLSZndDtmbGFncyk7CiAJCX0gZWxzZSBpZiAoIXN0YXJ0KSB7CiAJCQlzdGFydCA9IHBhZ2U7CiAJCQlucl9zdGFydCA9IGk7Ci0JCQlzdGFydF9zZWMgPSBtZW1kZXNjX3NlY3Rpb24ocGFnZS0mZ3Q7ZmxhZ3MpOwomIzQzOwkJCXN0YXJ0X3NlYyA9IG1lbWRlc2Nfc2VjdGlvbigmYW1wO3BhZ2UtJmd0O2ZsYWdzKTsKIAkJfQogCX0KIApkaWZmIC0tZ2l0IGEvbW0vc2xhYi5oIGIvbW0vc2xhYi5oCmluZGV4IDI4MWE2NTIzMzc5NWQ2Li45ZGVkMzE5NDk1YTA3MCAxMDA2NDQKLS0tIGEvbW0vc2xhYi5oCiYjNDM7JiM0MzsmIzQzOyBiL21tL3NsYWIuaApAQCAtMTc5LDcgJiM0MzsxNzksNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgKnNsYWJfYWRkcmVzcyhjb25zdCBzdHJ1Y3Qgc2xhYiAqc2xhYikKIAogc3RhdGljIGlubGluZSBpbnQgc2xhYl9uaWQoY29uc3Qgc3RydWN0IHNsYWIgKnNsYWIpCiB7Ci0JcmV0dXJuIG1lbWRlc2NfbmlkKHNsYWItJmd0O2ZsYWdzKTsKJiM0MzsJcmV0dXJuIG1lbWRlc2NfbmlkKCZhbXA7c2xhYi0mZ3Q7ZmxhZ3MpOwogfQogCiBzdGF0aWMgaW5saW5lIHBnX2RhdGFfdCAqc2xhYl9wZ2RhdChjb25zdCBzdHJ1Y3Qgc2xhYiAqc2xhYikKZGlmZiAtLWdpdCBhL21tL3NwYXJzZS5jIGIvbW0vc3BhcnNlLmMKaW5kZXggMTZhYzZkZjNjODlmYTIuLjhlMzg0Nzc2NDUxMzE5IDEwMDY0NAotLS0gYS9tbS9zcGFyc2UuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9zcGFyc2UuYwpAQCAtNDMsNyAmIzQzOzQzLDcgQEAgc3RhdGljIHU4IHNlY3Rpb25fdG9fbm9kZV90YWJsZVtOUl9NRU1fU0VDVElPTlNdIF9fY2FjaGVsaW5lX2FsaWduZWQ7CiBzdGF0aWMgdTE2IHNlY3Rpb25fdG9fbm9kZV90YWJsZVtOUl9NRU1fU0VDVElPTlNdIF9fY2FjaGVsaW5lX2FsaWduZWQ7CiAjZW5kaWYKIAotaW50IG1lbWRlc2NfbmlkKG1lbWRlc2NfZmxhZ3NfdCBtZGYpCiYjNDM7aW50IG1lbWRlc2NfbmlkKGNvbnN0IG1lbWRlc2NfZmxhZ3NfdCAqbWRmKQogewogCXJldHVybiBzZWN0aW9uX3RvX25vZGVfdGFibGVbbWVtZGVzY19zZWN0aW9uKG1kZildOwogfQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOCAxMjozNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0Nzc4CgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogNjQ5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIE1lbW9yeSBNb2RlbCBNYWNybyBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaC4gSXQgc2VlbXMgdG8gYmUgdG91Y2hpbmcgc2V2ZXJhbCBtZW1vcnkgbW9kZWwgbWFjcm9zOiBgbWVtZGVzY19zZWN0aW9uYCwgYG1lbWRlc2NfbmlkYCwgYG1lbWRlc2Nfem9uZW51bWAsIGFuZCBgbWVtZGVzY19pc196b25lX2RldmljZWAuIFRoZSBjb3JlIGNoYW5nZSBpcyB0aGUgYXJndW1lbnQgdHlwZSwgc2hpZnRpbmcgZnJvbSBhIHBhc3MtYnktdmFsdWUgKGBtZW1kZXNjX2ZsYWdzX3QgbWRmYCkgdG8gcGFzcy1ieS1wb2ludGVyIChgY29uc3QgbWVtZGVzY19mbGFnc190ICptZGZgKS4gSG1tLCBhbmQgdGhlcmUgYXJlIHRoZXNlIGBBU1NFUlRfRVhDTFVTSVZFX0JJVFNgIGNhbGxzIHNwcmlua2xlZCBpbi4gVGhhdCB0cmlnZ2VycyBzb21ldGhpbmcuLi4gdGhhdCYjMzk7cyBhIEtDU0FOIGNoZWNrLCByaWdodD8gTGV0JiMzOTtzIHpvb20gaW4gb24gYG1lbWRlc2NfbmlkYCBhbmQgc2VlIHdoYXQmIzM5O3MgY2hhbmdlZDoKCmBgYGMKICNpZmRlZiBOT0RFX05PVF9JTl9QQUdFX0ZMQUdTCi1pbnQgbWVtZGVzY19uaWQobWVtZGVzY19mbGFnc190IG1kZik7CiYjNDM7aW50IG1lbWRlc2NfbmlkKGNvbnN0IG1lbWRlc2NfZmxhZ3NfdCAqbWRmKTsKICNlbHNlCi1zdGF0aWMgaW5saW5lIGludCBtZW1kZXNjX25pZChtZW1kZXNjX2ZsYWdzX3QgbWRmKQomIzQzOyNpZmRlZiBDT05GSUdfTlVNQQomIzQzO3N0YXRpYyBpbmxpbmUgaW50IG1lbWRlc2NfbmlkKGNvbnN0IG1lbWRlc2NfZmxhZ3NfdCAqbWRmKQogewotCXJldHVybiAobWRmLmYgJmd0OyZndDsgTk9ERVNfUEdTSElGVCkgJmFtcDsgTk9ERVNfTUFTSzsKJiM0MzsJQVNTRVJUX0VYQ0xVU0lWRV9CSVRTKG1kZi0mZ3Q7ZiwgTk9ERVNfTUFTSyAmbHQ7Jmx0OyBOT0RFU19QR1NISUZUKTsKJiM0MzsJcmV0dXJuIChtZGYtJmd0O2YgJmd0OyZndDsgTk9ERVNfUEdTSElGVCkgJmFtcDsgTk9ERVNfTUFTSzsKIH0KJiM0MzsjZWxzZQomIzQzO3N0YXRpYyBpbmxpbmUgaW50IG1lbWRlc2NfbmlkKGNvbnN0IG1lbWRlc2NfZmxhZ3NfdCAqbWRmKQomIzQzO3sKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOyNlbmRpZgogI2VuZGlmCmBgYAoKUmlnaHQsIGl0JiMzOTtzIGEgcGFzcy1ieS1wb2ludGVyIHJlZmFjdG9yaW5nLiBJdCBhbHNvIGFkZGVkIGBBU1NFUlRfRVhDTFVTSVZFX0JJVFNgIHRvIHRob3NlIGZ1bmN0aW9ucy4gT2theSwgdGhhdCYjMzk7cyBkZWZpbml0ZWx5IGEgS0NTQU4gdGhpbmcsIGEgZGVidWdnaW5nIGFpZCBwdWxsZWQgaW4gZnJvbSBgJmx0O2xpbnV4L2tjc2FuLWNoZWNrcy5oJmd0O2AsIHdoaWNoIHRoZSBwYXRjaCBhbHNvIGluY2x1ZGVzIGluIGBpbmNsdWRlL2xpbnV4L21tLmhgLgoKVGhlIG1pbGxpb24tZG9sbGFyIHF1ZXN0aW9uOiBpcyB0aGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2U/IFBhc3NpbmcgYnkgcG9pbnRlciBpcyBtb3JlIG9mIGFuIG9wdGltaXphdGlvbiwgb3IgcmVmYWN0b3JpbmcuIFRoZSBLQ1NBTiBhc3NlcnRpb25zIGFyZSBjbGVhcmx5IGZvciBkZWJ1Z2dpbmcvc2FuaXRpemF0aW9uIHB1cnBvc2VzOyB0aGV5IHdvbiYjMzk7dCBhbHRlciB0aGUgcHJvZ3JhbSYjMzk7cyBpbnRlbmRlZCBleGVjdXRpb24gZmxvdywgdW5sZXNzIGEgS0NTQU4gaXNzdWUgaXMgZm91bmQuCgpBbHJpZ2h0LCBsZXQmIzM5O3MganVzdCBtYWtlIHN1cmUgdGhlcmUgYXJlIG5vIGZ1bmN0aW9uYWwgY2hhbmdlcyBsdXJraW5nLi4uIExldCYjMzk7cyBjaGVjayBgbWVtZGVzY19uaWRgIGFnYWluLiBJZiBgIUNPTkZJR19OVU1BYCwgdGhlIG9sZCB2ZXJzaW9uIHdvdWxkIHJldHVybiBgKG1kZi5mICZndDsmZ3Q7IE5PREVTX1BHU0hJRlQpICZhbXA7IE5PREVTX01BU0tgLiBOb3cgaXQganVzdCByZXR1cm5zIDAuIElmIGAhQ09ORklHX05VTUFgLCBgTk9ERVNfUEdTSElGVGAgaXMgcHJvYmFibHkgemVyby4gQW5kIGlmIGAhQ09ORklHX05VTUFgLCB0aGVuIGBOT0RFU19NQVNLYCBpcyBhbHNvIGxpa2VseSB6ZXJvLCB3aGljaCBtZWFucyB0aGF0IHRoZSBvcmlnaW5hbCBpbXBsZW1lbnRhdGlvbiB3b3VsZCBoYXZlIHJldHVybmVkIDAgYW55d2F5LiBCdXQgSSYjMzk7bSBnb2luZyB0byBkb3VibGUgY2hlY2suIEJldHRlciB0byBiZSBzYWZlLCBzbyBJJiMzOTtsbCBncmVwIGZvciB0aGUgZGVmaW5pdGlvbiBvZiBgTk9ERVNfTUFTS2AganVzdCB0byBiZSBjZXJ0YWluLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA4IDEyOjM2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0OyNkZWZpbmUgTk9ERVNfTUFTSyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L21tem9uZS5oPTEyMjQ9c3RhdGljIGlubGluZSBib29sIHpvbmVfaXNfZW1wdHkoY29uc3Qgc3RydWN0IHpvbmUgKnpvbmUpXG4tLVxuaW5jbHVkZS9saW51eC9tbXpvbmUuaC0xMjY4LSNkZWZpbmUgWk9ORVNfTUFTS1x0XHQoKDFVTCBcdTAwM2NcdTAwM2MgWk9ORVNfV0lEVEgpIC0gMSlcbmluY2x1ZGUvbGludXgvbW16b25lLmg6MTI2OTojZGVmaW5lIE5PREVTX01BU0tcdFx0KCgxVUwgXHUwMDNjXHUwMDNjIE5PREVTX1dJRFRIKSAtIDEpXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oLTEyNzAtI2RlZmluZSBTRUNUSU9OU19NQVNLXHRcdCgoMVVMIFx1MDAzY1x1MDAzYyBTRUNUSU9OU19XSURUSCkgLSAxKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA4IDEyOjM2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYyNTUKCQkJCQkJCW91dHB1dDogMjMKCQkJCQkJCXRob3VnaHRzOiA2NjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBDaGFuZ2VzOiBBIFJlZmFjdG9yaW5nIGFuZCBEZWJ1Z2dpbmcgRGVlcCBEaXZlKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpbW1lZGlhdGVseSwgdGhlIGZpcnN0IHRoaW5nIHRoYXQganVtcHMgb3V0IGlzIHRoZSBzaGlmdCBmcm9tIHBhc3NpbmcgYG1lbWRlc2NfZmxhZ3NfdGAgYnkgdmFsdWUgdG8gcGFzc2luZyBpdCBieSBwb2ludGVyLiBJIHJlY29nbml6ZSB0aGlzIGFzIGEgdHlwaWNhbCByZWZhY3RvcmluZyBleGVyY2lzZSwgYWltZWQgYXQgc3RyZWFtbGluaW5nIHRoZSBBQkkgb3IgcG9zc2libHkgYXZvaWRpbmcgdW5uZWNlc3NhcnkgZGF0YSBjb3BpZXMuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IHRoaXMga2luZCBvZiBjaGFuZ2UgKnNob3VsZG4mIzM5O3QqIGltcGFjdCB0aGUgY29yZSBmdW5jdGlvbmFsaXR5LCBlc3BlY2lhbGx5IGluIGEgd2F5IHRoYXQgbmVjZXNzaXRhdGVzIGV4dGVuc2l2ZSBmdXp6aW5nLiBJdCYjMzk7cyBtb3JlIGFib3V0IGNvZGUgaHlnaWVuZSBhbmQgcG90ZW50aWFsbHkgbWljcm8tb3B0aW1pemF0aW9ucy4KCkxldCYjMzk7cyBicmVhayBpdCBkb3duIGZ1bmN0aW9uIGJ5IGZ1bmN0aW9uIHRvIGNvbmZpcm0gdGhpcyBzdXNwaWNpb24uIFdpdGggdGhlIGBtZW1kZXNjX25vZGVpZGAgZnVuY3Rpb24sIHdoZW4gYCFDT05GSUdfTlVNQWAsIHRoZSBgTk9ERVNfV0lEVEhgIGlzIHplcm8gd2hpY2ggbWVhbnMgdGhlIGBOT0RFU19NQVNLYCBpcyBhbHNvIDAuIFRodXMgdGhlIG1hc2tpbmcgb3BlcmF0aW9uIGlzIGVmZmVjdGl2ZWx5IGEgbm8tb3AsIHJldHVybmluZyAwIGFueXdheS4gVGhlIGNoYW5nZSB0byByZXR1cm4gMCBkaXJlY3RseSBpbiB0aGlzIHNjZW5hcmlvIGlzIGEgY2xlYXIgb3B0aW1pemF0aW9uIGFuZCBzaW1wbGlmaWNhdGlvbi4KCk5vdywgY2hlY2tpbmcgdGhlIGBtZW1kZXNjX3NlY3Rpb25gIGZ1bmN0aW9uLCB0aGUgb25seSBjaGFuZ2UgaXMgdGhlIGFkZGl0aW9uIG9mIHRoZSBLQ1NBTiBhc3NlcnRpb24gYW5kIGEgc3dpdGNoIHRvIHBhc3MtYnktcG9pbnRlci4gVGhpcyBsb29rcyBsaWtlIGEgZGVidWdnaW5nIGVuaGFuY2VtZW50LCBlbnN1cmluZyB0aGUgY29ycmVjdCBiaXRzIGFyZSBiZWluZyB1c2VkLiBObyBmdW5jdGlvbmFsIGFsdGVyYXRpb24gaGVyZSwgc28gdGhpcyBmdXJ0aGVyIGNvbmZpcm1zIG15IGluaXRpYWwgYXNzZXNzbWVudC4KCk5leHQsIEkgc2VlIHRoZSBgbWVtZGVzY196b25lbnVtYCBmdW5jdGlvbiBjaGFuZ2UuIEFoLCBoZXJlIHdlIGhhdmUgYW4gYCNpZiBaT05FU19XSURUSCAhPSAwYCBndWFyZCBhcm91bmQgdGhlIGBBU1NFUlRfRVhDTFVTSVZFX0JJVFNgIGNhbGwuIFRoaXMgaW5kaWNhdGVzIGEgZml4IGZvciBhIHBvdGVudGlhbCBidWlsZCBpc3N1ZSB3aGVuIGBaT05FU19XSURUSGAgaXMgemVyby4gSSBpbWFnaW5lIHRoYXQgdGhlIGJpdCBzaGlmdCBtaWdodCBiZSBwcm9ibGVtYXRpYyB3aGVuIGBaT05FU19XSURUSGAgaXMgemVybywgbWF5YmUgY2F1c2luZyBhIHNoaWZ0LW91dC1vZi1ib3VuZHMgc2l0dWF0aW9uLCBvciB0aGUgYXNzZXJ0aW9uIGxvZ2ljIGRvZXNuJiMzOTt0IGhhbmRsZSB0aGUgemVybyBtYXNrIGNvcnJlY3RseS4gVGhpcyBpcyBhbm90aGVyIHB1cmVseSBkZWZlbnNpdmUgYW5kIG5vbi1mdW5jdGlvbmFsIGNoYW5nZSwgcHJldmVudGluZyBwb3RlbnRpYWwgYnVpbGQgd2FybmluZ3Mgb3IgZXJyb3JzIGluIHNwZWNpZmljIGNvbmZpZ3VyYXRpb25zLgoKQW5kIHRoZW4gd2UgY29tZSB0byBgbWVtZGVzY19pc196b25lX2RldmljZWAuIEp1c3QgYSBwYXNzLWJ5LXBvaW50ZXIgY2hhbmdlLiBBbm90aGVyIGluc3RhbmNlIG9mIG91ciByZWZhY3RvcmluZyB0aGVtZS4KCkVzc2VudGlhbGx5LCB0aGUgZW50aXJlIHBhdGNoIGJvaWxzIGRvd24gdG8gdGhpczogKml0JiMzOTtzIGEgcmVmYWN0b3JpbmcgZWZmb3J0IHdpdGggc29tZSBhZGRlZCBLQ1NBTiBhc3NlcnRpb25zLiogVGhlIGZ1bmRhbWVudGFsIGV4ZWN1dGlvbiBmbG93IHJlbWFpbnMgdW50b3VjaGVkLiBUaGUgY29yZSBkYXRhIHN0cnVjdHVyZSwgYG1lbWRlc2NfZmxhZ3NfdGAsIGNvbnRhaW5zIGFuIGB1bnNpZ25lZCBsb25nIGZgLiBTbywgcGFzc2luZyBpdCBieSBwb2ludGVyIHZlcnN1cyB2YWx1ZSBpcyByZWFsbHkganVzdCBhbiBBQkkgZGV0YWlsLiBJdCYjMzk7cyBhYm91dCBvcHRpbWl6aW5nIHRoZSBmdW5jdGlvbiBjYWxscyBieSBwYXNzaW5nIGEgcmVmZXJlbmNlIHJhdGhlciB0aGFuIGEgZnVsbCBjb3B5IG9mIHRoZSBkYXRhLiBUaGlzIGNoYW5nZSB3YXJyYW50cyBhIGNsb3NlIHJldmlldyBidXQsIEkmIzM5O20gY29uZmlkZW50LCBkb2VzbiYjMzk7dCByZXF1aXJlIGFueSBleHRlbnNpdmUgZnV6emluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOCAxMjozNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3R5cGVkZWYgc3RydWN0LiptZW1kZXNjX2ZsYWdzX3QmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA4IDEyOjM2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc1MDkKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiAxNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqTmF2aWdhdGluZyB0aGUgTWVtb3J5IE1hbmFnZW1lbnQgTGFuZHNjYXBlKioKCkFscmlnaHQsIHNvIEkmIzM5O20gZGl2aW5nIGludG8gdGhpcyBtZW1vcnkgbWFuYWdlbWVudCBpc3N1ZSwgYW5kIG15IGZpcnN0IGluc3RpbmN0IGlzIHRvIGdldCBncmFudWxhci4gSW5zdGVhZCBvZiBicm9hZCBzZWFyY2hlcywgbGV0JiMzOTtzIHplcm8gaW4uIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGVzZSBtZW1vcnkgZGVzY3JpcHRvcnMgd29yaywgc28gbGV0JiMzOTtzIGN1dCB0aHJvdWdoIHRoZSBub2lzZSBhbmQganVzdCBnbyBzdHJhaWdodCBmb3IgdGhlIHNwZWNpZmljIHR5cGUgZGVmaW5pdGlvbjogYG1lbWRlc2NfZmxhZ3NfdGAuIEkmIzM5O20gYXNzdW1pbmcgdGhhdCBpdCBpcyB0aGF0IHBhcnRpY3VsYXIgc3RydWN0dXJlIHdoaWNoIGhvbGRzIHRoZSBrZXksIGJlY2F1c2UgaXQgaXMgdGhlIG9idmlvdXMgZGVzY3JpcHRvciBvZiBmbGFncyBhbmQgc2V0dGluZ3MuIE5vIHNlbnNlIGluIGJlYXRpbmcgYXJvdW5kIHRoZSBidXNoLiBJJiMzOTtsbCBzdGFydCB3aXRoIHRoaXMgc3BlY2lmaWMgaWRlbnRpZmllciBhbmQgc2VlIHdoYXQgaW5zaWdodHMgSSBjYW4gZ2xlYW4uIEl0JiMzOTtzIGEgdGFyZ2V0ZWQgYXBwcm9hY2g7IGhvcGVmdWxseSwgdGhpcyBpcyB0aGUgcXVpY2tlc3QgcGF0aCB0byB1bmRlcnN0YW5kaW5nIHRoZSBmaW5lciBkZXRhaWxzLCB3aXRob3V0IHRoZSBkaXN0cmFjdGlvbiBvZiBwZXJpcGhlcmFsIGluZm9ybWF0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA4IDEyOjM2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21lbWRlc2NfZmxhZ3NfdCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L21tLmg9MjI4ND1zdGF0aWMgaW5saW5lIGludCBwYWdlX3pvbmVfaWQoc3RydWN0IHBhZ2UgKnBhZ2UpXG4tLVxuaW5jbHVkZS9saW51eC9tbS5oLTIyODktI2lmZGVmIE5PREVfTk9UX0lOX1BBR0VfRkxBR1NcbmluY2x1ZGUvbGludXgvbW0uaDoyMjkwOmludCBtZW1kZXNjX25pZChjb25zdCBtZW1kZXNjX2ZsYWdzX3QgKm1kZik7XG5pbmNsdWRlL2xpbnV4L21tLmgtMjI5MS0jZWxzZVxuaW5jbHVkZS9saW51eC9tbS5oLTIyOTItI2lmZGVmIENPTkZJR19OVU1BXG5pbmNsdWRlL2xpbnV4L21tLmg6MjI5MzpzdGF0aWMgaW5saW5lIGludCBtZW1kZXNjX25pZChjb25zdCBtZW1kZXNjX2ZsYWdzX3QgKm1kZilcbmluY2x1ZGUvbGludXgvbW0uaC0yMjk0LXtcbi0tXG5pbmNsdWRlL2xpbnV4L21tLmgtMjI5OC0jZWxzZVxuaW5jbHVkZS9saW51eC9tbS5oOjIyOTk6c3RhdGljIGlubGluZSBpbnQgbWVtZGVzY19uaWQoY29uc3QgbWVtZGVzY19mbGFnc190ICptZGYpXG5pbmNsdWRlL2xpbnV4L21tLmgtMjMwMC17XG4tLVxuaW5jbHVkZS9saW51eC9tbS5oPTI1NDk9c3RhdGljIGlubGluZSB2b2lkIHNldF9wYWdlX3NlY3Rpb24oc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGxvbmcgc2VjdGlvbilcbi0tXG5pbmNsdWRlL2xpbnV4L21tLmgtMjU1NC1cbmluY2x1ZGUvbGludXgvbW0uaDoyNTU1OnN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBtZW1kZXNjX3NlY3Rpb24oY29uc3QgbWVtZGVzY19mbGFnc190ICptZGYpXG5pbmNsdWRlL2xpbnV4L21tLmgtMjU1Ni17XG4tLVxuaW5jbHVkZS9saW51eC9tbS5oLTI1NjAtI2Vsc2UgLyogIVNFQ1RJT05fSU5fUEFHRV9GTEFHUyAqL1xuaW5jbHVkZS9saW51eC9tbS5oOjI1NjE6c3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIG1lbWRlc2Nfc2VjdGlvbihjb25zdCBtZW1kZXNjX2ZsYWdzX3QgKm1kZilcbmluY2x1ZGUvbGludXgvbW0uaC0yNTYyLXtcbi0tXG5pbmNsdWRlL2xpbnV4L21tX3R5cGVzLmg9Mzk9dHlwZWRlZiBzdHJ1Y3Qge1xuaW5jbHVkZS9saW51eC9tbV90eXBlcy5oLTQwLVx0dW5zaWduZWQgbG9uZyBmO1xuaW5jbHVkZS9saW51eC9tbV90eXBlcy5oOjQxOn0gbWVtZGVzY19mbGFnc190O1xuaW5jbHVkZS9saW51eC9tbV90eXBlcy5oLTQyLVxuLS1cbmluY2x1ZGUvbGludXgvbW1fdHlwZXMuaD04MD1zdHJ1Y3QgcGFnZSB7XG5pbmNsdWRlL2xpbnV4L21tX3R5cGVzLmg6ODE6XHRtZW1kZXNjX2ZsYWdzX3QgZmxhZ3M7XHRcdC8qIEF0b21pYyBmbGFncywgc29tZSBwb3NzaWJseVxuaW5jbHVkZS9saW51eC9tbV90eXBlcy5oLTgyLVx0XHRcdFx0XHQgKiB1cGRhdGVkIGFzeW5jaHJvbm91c2x5ICovXG4tLVxuaW5jbHVkZS9saW51eC9tbV90eXBlcy5oPTQwMj1zdHJ1Y3QgZm9saW8ge1xuLS1cbmluY2x1ZGUvbGludXgvbW1fdHlwZXMuaC00MDYtXHQvKiBwdWJsaWM6ICovXG5pbmNsdWRlL2xpbnV4L21tX3R5cGVzLmg6NDA3Olx0XHRcdG1lbWRlc2NfZmxhZ3NfdCBmbGFncztcbmluY2x1ZGUvbGludXgvbW1fdHlwZXMuaC00MDgtXHRcdFx0dW5pb24ge1xuLS1cbmluY2x1ZGUvbGludXgvbW1fdHlwZXMuaD01NzM9c3RydWN0IHB0ZGVzYyB7XG5pbmNsdWRlL2xpbnV4L21tX3R5cGVzLmg6NTc0Olx0bWVtZGVzY19mbGFnc190IHB0X2ZsYWdzO1xuaW5jbHVkZS9saW51eC9tbV90eXBlcy5oLTU3NS1cbi0tXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oPTEyMjQ9c3RhdGljIGlubGluZSBib29sIHpvbmVfaXNfZW1wdHkoY29uc3Qgc3RydWN0IHpvbmUgKnpvbmUpXG4tLVxuaW5jbHVkZS9saW51eC9tbXpvbmUuaC0xMjc0LVxuaW5jbHVkZS9saW51eC9tbXpvbmUuaDoxMjc1OnN0YXRpYyBpbmxpbmUgZW51bSB6b25lX3R5cGUgbWVtZGVzY196b25lbnVtKGNvbnN0IG1lbWRlc2NfZmxhZ3NfdCAqZmxhZ3MpXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oLTEyNzYte1xuLS1cbmluY2x1ZGUvbGludXgvbW16b25lLmg9MTI4OD1zdGF0aWMgaW5saW5lIGVudW0gem9uZV90eXBlIGZvbGlvX3pvbmVudW0oY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbylcbi0tXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oLTEyOTMtI2lmZGVmIENPTkZJR19aT05FX0RFVklDRVxuaW5jbHVkZS9saW51eC9tbXpvbmUuaDoxMjk0OnN0YXRpYyBpbmxpbmUgYm9vbCBtZW1kZXNjX2lzX3pvbmVfZGV2aWNlKGNvbnN0IG1lbWRlc2NfZmxhZ3NfdCAqbWRmKVxuaW5jbHVkZS9saW51eC9tbXpvbmUuaC0xMjk1LXtcbi0tXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oPTEzMjM9ZXh0ZXJuIHZvaWQgbWVtbWFwX2luaXRfem9uZV9kZXZpY2Uoc3RydWN0IHpvbmUgKiwgdW5zaWduZWQgbG9uZyxcbi0tXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oLTEzMjUtI2Vsc2VcbmluY2x1ZGUvbGludXgvbW16b25lLmg6MTMyNjpzdGF0aWMgaW5saW5lIGJvb2wgbWVtZGVzY19pc196b25lX2RldmljZShjb25zdCBtZW1kZXNjX2ZsYWdzX3QgKm1kZilcbmluY2x1ZGUvbGludXgvbW16b25lLmgtMTMyNy17XG4tLVxubW0vc2xhYi5oPTk4PXN0cnVjdCBzbGFiIHtcbm1tL3NsYWIuaDo5OTpcdG1lbWRlc2NfZmxhZ3NfdCBmbGFncztcbm1tL3NsYWIuaC0xMDAtXG4tLVxubW0vc3BhcnNlLmM9NDM9c3RhdGljIHUxNiBzZWN0aW9uX3RvX25vZGVfdGFibGVbTlJfTUVNX1NFQ1RJT05TXSBfX2NhY2hlbGluZV9hbGlnbmVkO1xuLS1cbm1tL3NwYXJzZS5jLTQ1LVxubW0vc3BhcnNlLmM6NDY6aW50IG1lbWRlc2NfbmlkKGNvbnN0IG1lbWRlc2NfZmxhZ3NfdCAqbWRmKVxubW0vc3BhcnNlLmMtNDcte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA4IDEyOjM2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg4NzQKCQkJCQkJCW91dHB1dDogODUKCQkJCQkJCXRob3VnaHRzOiAyNTIzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlBhdGNoIEFuYWx5c2lzOiBgbWVtZGVzY19mbGFnc190YCBSZWZhY3RvcmluZyBhbmQgS0NTQU4gQXNzZXJ0aW9ucyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgd2FzIGNvcnJlY3Q7IGBtZW1kZXNjX2ZsYWdzX3RgIGlzIGp1c3QgYSBzdHJ1Y3QgY29udGFpbmluZyBhbiBgdW5zaWduZWQgbG9uZyBmYC4gVGhpcyBwYXRjaCBpcyBwdXJlbHkgYSByZWZhY3RvcmluZyBlZmZvcnQuIFRoZSBjaGFuZ2VzIGludm9sdmUgcGFzc2luZyB0aGUgYG1lbWRlc2NfZmxhZ3NfdGAgc3RydWN0IGJ5IHBvaW50ZXIgaW5zdGVhZCBvZiBieSB2YWx1ZSBhY3Jvc3MgdmFyaW91cyBmdW5jdGlvbnMuIENydWNpYWxseSwgdGhlIGZ1bmN0aW9uYWwgYmVoYXZpb3Igb2YgdGhlIGNvZGUgKnNob3VsZCogcmVtYWluIGlkZW50aWNhbC4gSSBzZWUgc29tZSBLQ1NBTiBhc3NlcnRpb25zIGJlaW5nIGFkZGVkL2ZpeGVkLCB3aGljaCBpcyBncmVhdCBmb3IgaW1wcm92aW5nIGNvZGUgY29ycmVjdG5lc3MgYW5kIGRldGVjdGluZyBwb3RlbnRpYWwgcmFjZXMsIGJ1dCB0aGVzZSBhc3NlcnRpb25zIHdvbiYjMzk7dCBpbnRyb2R1Y2UgYW55IG5ldyBleGVjdXRpb24gcGF0aHMgZm9yIGZ1enppbmcgdG8gZXhwbG9yZS4KCkkmIzM5O20gZ29pbmcgdGhyb3VnaCB0aGUgZGlmZiBhZ2FpbiB0byBiZSBhYnNvbHV0ZWx5IHN1cmUuCgpUaGUgZmlyc3QgY2hhbmdlIGluIGBpbmNsdWRlL2FzbS1nZW5lcmljL21lbW9yeV9tb2RlbC5oYCBpcyBzdHJhaWdodGZvcndhcmQ7IHRoZSBjYWxsIHRvIGBtZW1kZXNjX3NlY3Rpb25gIG5vdyBwYXNzZXMgYF9fcGctJmd0O2ZsYWdzYCBhcyBhIHBvaW50ZXIuIE5vIGNoYW5nZSBpbiBjb3JlIGxvZ2ljIHRoZXJlLgoKTW92aW5nIG9uIHRvIGBpbmNsdWRlL2xpbnV4L21tLmhgLCB0aGUgZGVmaW5pdGlvbiBvZiBgbWVtZGVzY19uaWRgIGlzIHVwZGF0ZWQgdG8gdGFrZSBhIHBvaW50ZXIsIGFuZCBhbiBgQVNTRVJUX0VYQ0xVU0lWRV9CSVRTYCBpcyBhZGRlZCB3aXRoaW4gYSBgI2lmZGVmIENPTkZJR19OVU1BYCBibG9jay4gVGhpcyBsb29rcyBmaW5lOyBldmVuIGlmIGBDT05GSUdfTlVNQWAgaXMgbm90IHNldCwgdGhlIGlubGluZSBmdW5jdGlvbiB3aWxsIHJldHVybiAwIHdoaWNoIGlzIGxvZ2ljYWxseSBzb3VuZCBnaXZlbiB0aGUgZXhpc3RpbmcgbG9naWMuIEFsbCBjYWxsIHNpdGVzIG9mIGBtZW1kZXNjX25pZGAgYXJlIGFkanVzdGVkIHRvIG1hdGNoIHRoZSBuZXcgc2lnbmF0dXJlLiBUaGUgc2FtZSBwYXR0ZXJuIGlzIHJlcGVhdGVkIGZvciBgbWVtZGVzY19zZWN0aW9uYCBhbmQgYG1lbWRlc2Nfem9uZW51bWAuIFRoZSBhZGRpdGlvbiBvZiBgQVNTRVJUX0VYQ0xVU0lWRV9CSVRTYCBpcyBnb29kLCBhZGRpbmcgS0NTQU4gY2hlY2tzLCBidXQgd29uJiMzOTt0IGltcGFjdCBob3cgdGhlIGNvZGUgcnVucy4KCkluIGBpbmNsdWRlL2xpbnV4L21tX2lubGluZS5oYCwgdGhlIGNhbGwgc2l0ZXMgb2YgYG1lbWRlc2Nfc2VjdGlvbmAgYXJlIHVwZGF0ZWQgdG8gcGFzcyBhIHBvaW50ZXIsIGFzIGV4cGVjdGVkLgoKYGluY2x1ZGUvbGludXgvbW16b25lLmhgIHNlZXMgc2ltaWxhciBtb2RpZmljYXRpb25zIGZvciBgbWVtZGVzY196b25lbnVtYC4gVGhlIHNpZ25hdHVyZSBjaGFuZ2UgaXMgYWdhaW4gdGhlIHBhc3MtYnktcG9pbnRlciByZWZhY3RvcmluZyBhbmQgS0NTQU4gYXNzZXJ0aW9ucy4gVGhlIGNhbGxzIHRvIHRoZSBpbmxpbmUgZnVuY3Rpb24gYXJlIGFsc28gdXBkYXRlZC4gVGhlIGBtZW1kZXNjX2lzX3pvbmVfZGV2aWNlYCBmdW5jdGlvbiBzZWVzIHRoZSBzYW1lIHBhdHRlcm4gYXMgd2VsbC4KCkluIGBtbS9wYWdlX2FsbG9jLmNgIGFuZCBgbW0vc2xhYi5oYCB0aGUgdXBkYXRlcyBhcmUgdGhlIHNhbWUgLSBhbGwgYWJvdXQgc3dpdGNoaW5nIHRvIHBhc3MtYnktcG9pbnRlci4gIEFsbCBmdW5jdGlvbiBzaWduYXR1cmVzIGFyZSB1cGRhdGVkLgoKRmluYWxseSwgaW4gYG1tL3NwYXJzZS5jYCwgdGhlIGRlZmluaXRpb24gb2YgYG1lbWRlc2NfbmlkYCBpcyBhZGp1c3RlZCB0byBtYXRjaCB0aGUgdXBkYXRlZCBzaWduYXR1cmUsIGtlZXBpbmcgdGhpbmdzIGNvbnNpc3RlbnQuCgpHaXZlbiBhbGwgdGhpcywgbXkgY29uY2x1c2lvbiByZW1haW5zIGZpcm0uIFRoaXMgcGF0Y2ggaXMgcHVyZWx5IGEgcmVmYWN0b3JpbmcgYW5kIEtDU0FOIGFzc2VydGlvbiBhZGRpdGlvbnMuIE5vIGV4ZWN1dGlvbiBmbG93IGlzIGNoYW5nZWQsIHNvIHRoZXJlJiMzOTtzIG5vdGhpbmcgbmV3IGhlcmUgdGhhdCBmdXp6aW5nIHdvdWxkIGZpbmQuIEl0JiMzOTtzIHNhZmUgdG8gc2F5IHRoYXQgYFdvcnRoRnV6emluZ2Agc2hvdWxkIGJlIGBmYWxzZWAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA4IDEyOjM3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogW10sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaXMgYSBwdXJlIHJlZmFjdG9yaW5nIHRoYXQgY2hhbmdlcyBgbWVtZGVzY19mbGFnc190YCB0byBiZSBwYXNzZWQgYnkgcG9pbnRlciBpbnN0ZWFkIG9mIGJ5IHZhbHVlLCBhbmQgYWRkcy9maXhlcyBLQ1NBTiBhc3NlcnRpb25zIChgQVNTRVJUX0VYQ0xVU0lWRV9CSVRTYCkuIEl0IGRvZXMgbm90IGZ1bmN0aW9uYWxseSBhbHRlciB0aGUgZXhlY3V0aW9uIGZsb3cgb2YgdGhlIGtlcm5lbC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGlzIGEgcHVyZSByZWZhY3RvcmluZyB0aGF0IGNoYW5nZXMgYG1lbWRlc2NfZmxhZ3NfdGAgdG8gYmUgcGFzc2VkIGJ5IHBvaW50ZXIgaW5zdGVhZCBvZiBieSB2YWx1ZSwgYW5kIGFkZHMvZml4ZXMgS0NTQU4gYXNzZXJ0aW9ucyAoYEFTU0VSVF9FWENMVVNJVkVfQklUU2ApLiBJdCBkb2VzIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgdGhlIGV4ZWN1dGlvbiBmbG93IG9mIHRoZSBrZXJuZWwuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDctMDhUMTI6MzY6MDcuMDQxNzc4ODg2WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTgyMDI1MTUyMzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGlzIGEgcHVyZSByZWZhY3RvcmluZyB0aGF0IGNoYW5nZXMgYG1lbWRlc2NfZmxhZ3NfdGAgdG8gYmUgcGFzc2VkIGJ5IHBvaW50ZXIgaW5zdGVhZCBvZiBieSB2YWx1ZSwgYW5kIGFkZHMvZml4ZXMgS0NTQU4gYXNzZXJ0aW9ucyAoYEFTU0VSVF9FWENMVVNJVkVfQklUU2ApLiBJdCBkb2VzIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgdGhlIGV4ZWN1dGlvbiBmbG93IG9mIHRoZSBrZXJuZWwuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wOFQxMjozNjowNy4wNDE3OTk4MTZaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg2MjEwNjEwOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDVhZDFmOTUzZGUyY2I5N2U3NGVmZGQyN2Q1ZWZlYmM2ODVlYzM0MDJcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFdlZCBKdWwgOCAxMjozNjowNSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1nZW5lcmljL21lbW9yeV9tb2RlbC5oIGIvaW5jbHVkZS9hc20tZ2VuZXJpYy9tZW1vcnlfbW9kZWwuaFxcbmluZGV4IGVmYTY2MTBhY2JjNzk3Li5mODQwNGJjNzc3M2MyYiAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2FzbS1nZW5lcmljL21lbW9yeV9tb2RlbC5oXFxuKysrIGIvaW5jbHVkZS9hc20tZ2VuZXJpYy9tZW1vcnlfbW9kZWwuaFxcbkBAIC01Myw3ICs1Myw3IEBAIHN0YXRpYyBpbmxpbmUgaW50IHBmbl92YWxpZCh1bnNpZ25lZCBsb25nIHBmbilcXG4gICovXFxuICNkZWZpbmUgX19wYWdlX3RvX3BmbihwZylcXHRcXHRcXHRcXHRcXHRcXFxcXFxuICh7XFx0Y29uc3Qgc3RydWN0IHBhZ2UgKl9fcGcgPSAocGcpO1xcdFxcdFxcdFxcdFxcXFxcXG4tXFx0aW50IF9fc2VjID0gbWVtZGVzY19zZWN0aW9uKF9fcGctXFx1MDAzZWZsYWdzKTtcXHRcXHRcXFxcXFxuK1xcdGludCBfX3NlYyA9IG1lbWRlc2Nfc2VjdGlvbihcXHUwMDI2X19wZy1cXHUwMDNlZmxhZ3MpO1xcdFxcdFxcXFxcXG4gXFx0KHVuc2lnbmVkIGxvbmcpKF9fcGcgLSBfX3NlY3Rpb25fbWVtX21hcF9hZGRyKF9fbnJfdG9fc2VjdGlvbihfX3NlYykpKTtcXHRcXFxcXFxuIH0pXFxuIFxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21tLmggYi9pbmNsdWRlL2xpbnV4L21tLmhcXG5pbmRleCA0ODVkZjljMmRiZGRiMy4uMWVmOWIwYmQ3ZmQzMzYgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9tbS5oXFxuKysrIGIvaW5jbHVkZS9saW51eC9tbS5oXFxuQEAgLTM3LDYgKzM3LDcgQEBcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2JpdG1hcC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvYml0b3BzLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9pb21tdS1kZWJ1Zy1wYWdlYWxsb2MuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2tjc2FuLWNoZWNrcy5oXFx1MDAzZVxcbiBcXG4gc3RydWN0IG1lbXBvbGljeTtcXG4gc3RydWN0IGFub25fdm1hO1xcbkBAIC0yMjg2LDIyICsyMjg3LDMyIEBAIHN0YXRpYyBpbmxpbmUgaW50IHBhZ2Vfem9uZV9pZChzdHJ1Y3QgcGFnZSAqcGFnZSlcXG4gfVxcbiBcXG4gI2lmZGVmIE5PREVfTk9UX0lOX1BBR0VfRkxBR1NcXG4taW50IG1lbWRlc2NfbmlkKG1lbWRlc2NfZmxhZ3NfdCBtZGYpO1xcbitpbnQgbWVtZGVzY19uaWQoY29uc3QgbWVtZGVzY19mbGFnc190ICptZGYpO1xcbiAjZWxzZVxcbi1zdGF0aWMgaW5saW5lIGludCBtZW1kZXNjX25pZChtZW1kZXNjX2ZsYWdzX3QgbWRmKVxcbisjaWZkZWYgQ09ORklHX05VTUFcXG4rc3RhdGljIGlubGluZSBpbnQgbWVtZGVzY19uaWQoY29uc3QgbWVtZGVzY19mbGFnc190ICptZGYpXFxuIHtcXG4tXFx0cmV0dXJuIChtZGYuZiBcXHUwMDNlXFx1MDAzZSBOT0RFU19QR1NISUZUKSBcXHUwMDI2IE5PREVTX01BU0s7XFxuK1xcdEFTU0VSVF9FWENMVVNJVkVfQklUUyhtZGYtXFx1MDAzZWYsIE5PREVTX01BU0sgXFx1MDAzY1xcdTAwM2MgTk9ERVNfUEdTSElGVCk7XFxuK1xcdHJldHVybiAobWRmLVxcdTAwM2VmIFxcdTAwM2VcXHUwMDNlIE5PREVTX1BHU0hJRlQpIFxcdTAwMjYgTk9ERVNfTUFTSztcXG4gfVxcbisjZWxzZVxcbitzdGF0aWMgaW5saW5lIGludCBtZW1kZXNjX25pZChjb25zdCBtZW1kZXNjX2ZsYWdzX3QgKm1kZilcXG4re1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbisjZW5kaWZcXG4gI2VuZGlmXFxuIFxcbiBzdGF0aWMgaW5saW5lIGludCBwYWdlX3RvX25pZChjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSlcXG4ge1xcbi1cXHRyZXR1cm4gbWVtZGVzY19uaWQoUEZfUE9JU09ORURfQ0hFQ0socGFnZSktXFx1MDAzZWZsYWdzKTtcXG4rXFx0Y29uc3Qgc3RydWN0IHBhZ2UgKnAgPSBQRl9QT0lTT05FRF9DSEVDSyhwYWdlKTtcXG4rXFxuK1xcdHJldHVybiBtZW1kZXNjX25pZChcXHUwMDI2cC1cXHUwMDNlZmxhZ3MpO1xcbiB9XFxuIFxcbiBzdGF0aWMgaW5saW5lIGludCBmb2xpb19uaWQoY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbylcXG4ge1xcbi1cXHRyZXR1cm4gbWVtZGVzY19uaWQoZm9saW8tXFx1MDAzZWZsYWdzKTtcXG4rXFx0cmV0dXJuIG1lbWRlc2NfbmlkKFxcdTAwMjZmb2xpby1cXHUwMDNlZmxhZ3MpO1xcbiB9XFxuIFxcbiAjaWZkZWYgQ09ORklHX05VTUFfQkFMQU5DSU5HXFxuQEAgLTI1NDEsMTIgKzI1NTIsMTMgQEAgc3RhdGljIGlubGluZSB2b2lkIHNldF9wYWdlX3NlY3Rpb24oc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGxvbmcgc2VjdGlvbilcXG4gXFx0cGFnZS1cXHUwMDNlZmxhZ3MuZiB8PSAoc2VjdGlvbiBcXHUwMDI2IFNFQ1RJT05TX01BU0spIFxcdTAwM2NcXHUwMDNjIFNFQ1RJT05TX1BHU0hJRlQ7XFxuIH1cXG4gXFxuLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBtZW1kZXNjX3NlY3Rpb24obWVtZGVzY19mbGFnc190IG1kZilcXG4rc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIG1lbWRlc2Nfc2VjdGlvbihjb25zdCBtZW1kZXNjX2ZsYWdzX3QgKm1kZilcXG4ge1xcbi1cXHRyZXR1cm4gKG1kZi5mIFxcdTAwM2VcXHUwMDNlIFNFQ1RJT05TX1BHU0hJRlQpIFxcdTAwMjYgU0VDVElPTlNfTUFTSztcXG4rXFx0QVNTRVJUX0VYQ0xVU0lWRV9CSVRTKG1kZi1cXHUwMDNlZiwgU0VDVElPTlNfTUFTSyBcXHUwMDNjXFx1MDAzYyBTRUNUSU9OU19QR1NISUZUKTtcXG4rXFx0cmV0dXJuIChtZGYtXFx1MDAzZWYgXFx1MDAzZVxcdTAwM2UgU0VDVElPTlNfUEdTSElGVCkgXFx1MDAyNiBTRUNUSU9OU19NQVNLO1xcbiB9XFxuICNlbHNlIC8qICFTRUNUSU9OX0lOX1BBR0VfRkxBR1MgKi9cXG4tc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIG1lbWRlc2Nfc2VjdGlvbihtZW1kZXNjX2ZsYWdzX3QgbWRmKVxcbitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgbWVtZGVzY19zZWN0aW9uKGNvbnN0IG1lbWRlc2NfZmxhZ3NfdCAqbWRmKVxcbiB7XFxuIFxcdHJldHVybiAwO1xcbiB9XFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbW1faW5saW5lLmggYi9pbmNsdWRlL2xpbnV4L21tX2lubGluZS5oXFxuaW5kZXggYTg0MzBhN2FlMDU0NDcuLmVmY2RkYjk5MjVhZGQ3IDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgvbW1faW5saW5lLmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L21tX2lubGluZS5oXFxuQEAgLTY1MCw3ICs2NTAsNyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgdm1hX2hhc19yZWNlbmN5KGNvbnN0IHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxcbiBzdGF0aWMgaW5saW5lIHNpemVfdCBudW1fcGFnZXNfY29udGlndW91cyhzdHJ1Y3QgcGFnZSAqKnBhZ2VzLCBzaXplX3QgbnJfcGFnZXMpXFxuIHtcXG4gXFx0c3RydWN0IHBhZ2UgKmN1cl9wYWdlID0gcGFnZXNbMF07XFxuLVxcdHVuc2lnbmVkIGxvbmcgc2VjdGlvbiA9IG1lbWRlc2Nfc2VjdGlvbihjdXJfcGFnZS1cXHUwMDNlZmxhZ3MpO1xcbitcXHR1bnNpZ25lZCBsb25nIHNlY3Rpb24gPSBtZW1kZXNjX3NlY3Rpb24oXFx1MDAyNmN1cl9wYWdlLVxcdTAwM2VmbGFncyk7XFxuIFxcdHNpemVfdCBpO1xcbiBcXG4gXFx0Zm9yIChpID0gMTsgaSBcXHUwMDNjIG5yX3BhZ2VzOyBpKyspIHtcXG5AQCAtNjYwLDcgKzY2MCw3IEBAIHN0YXRpYyBpbmxpbmUgc2l6ZV90IG51bV9wYWdlc19jb250aWd1b3VzKHN0cnVjdCBwYWdlICoqcGFnZXMsIHNpemVfdCBucl9wYWdlcylcXG4gXFx0XFx0ICogSW4gdW5wcm9ibGVtYXRpYyBrZXJuZWwgY29uZmlncywgcGFnZV90b19zZWN0aW9uKCkgPT0gMCBhbmRcXG4gXFx0XFx0ICogdGhlIHdob2xlIGNoZWNrIHdpbGwgZ2V0IG9wdGltaXplZCBvdXQuXFxuIFxcdFxcdCAqL1xcbi1cXHRcXHRpZiAobWVtZGVzY19zZWN0aW9uKGN1cl9wYWdlLVxcdTAwM2VmbGFncykgIT0gc2VjdGlvbilcXG4rXFx0XFx0aWYgKG1lbWRlc2Nfc2VjdGlvbihcXHUwMDI2Y3VyX3BhZ2UtXFx1MDAzZWZsYWdzKSAhPSBzZWN0aW9uKVxcbiBcXHRcXHRcXHRicmVhaztcXG4gXFx0fVxcbiBcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tbXpvbmUuaCBiL2luY2x1ZGUvbGludXgvbW16b25lLmhcXG5pbmRleCBjYTI3MTIxODcxNDc1Yy4uZTYwZGFkNTQ2Y2E2OGQgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9tbXpvbmUuaFxcbisrKyBiL2luY2x1ZGUvbGludXgvbW16b25lLmhcXG5AQCAtMTI3MiwzMSArMTI3MiwzMyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgem9uZV9pc19lbXB0eShjb25zdCBzdHJ1Y3Qgem9uZSAqem9uZSlcXG4gI2RlZmluZSBLQVNBTl9UQUdfTUFTS1xcdFxcdCgoMVVMIFxcdTAwM2NcXHUwMDNjIEtBU0FOX1RBR19XSURUSCkgLSAxKVxcbiAjZGVmaW5lIFpPTkVJRF9NQVNLXFx0XFx0KCgxVUwgXFx1MDAzY1xcdTAwM2MgWk9ORUlEX1NISUZUKSAtIDEpXFxuIFxcbi1zdGF0aWMgaW5saW5lIGVudW0gem9uZV90eXBlIG1lbWRlc2Nfem9uZW51bShtZW1kZXNjX2ZsYWdzX3QgZmxhZ3MpXFxuK3N0YXRpYyBpbmxpbmUgZW51bSB6b25lX3R5cGUgbWVtZGVzY196b25lbnVtKGNvbnN0IG1lbWRlc2NfZmxhZ3NfdCAqZmxhZ3MpXFxuIHtcXG4tXFx0QVNTRVJUX0VYQ0xVU0lWRV9CSVRTKGZsYWdzLmYsIFpPTkVTX01BU0sgXFx1MDAzY1xcdTAwM2MgWk9ORVNfUEdTSElGVCk7XFxuLVxcdHJldHVybiAoZmxhZ3MuZiBcXHUwMDNlXFx1MDAzZSBaT05FU19QR1NISUZUKSBcXHUwMDI2IFpPTkVTX01BU0s7XFxuKyNpZiBaT05FU19XSURUSCAhPSAwXFxuK1xcdEFTU0VSVF9FWENMVVNJVkVfQklUUyhmbGFncy1cXHUwMDNlZiwgWk9ORVNfTUFTSyBcXHUwMDNjXFx1MDAzYyBaT05FU19QR1NISUZUKTtcXG4rI2VuZGlmXFxuK1xcdHJldHVybiAoZmxhZ3MtXFx1MDAzZWYgXFx1MDAzZVxcdTAwM2UgWk9ORVNfUEdTSElGVCkgXFx1MDAyNiBaT05FU19NQVNLO1xcbiB9XFxuIFxcbiBzdGF0aWMgaW5saW5lIGVudW0gem9uZV90eXBlIHBhZ2Vfem9uZW51bShjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSlcXG4ge1xcbi1cXHRyZXR1cm4gbWVtZGVzY196b25lbnVtKHBhZ2UtXFx1MDAzZWZsYWdzKTtcXG4rXFx0cmV0dXJuIG1lbWRlc2Nfem9uZW51bShcXHUwMDI2cGFnZS1cXHUwMDNlZmxhZ3MpO1xcbiB9XFxuIFxcbiBzdGF0aWMgaW5saW5lIGVudW0gem9uZV90eXBlIGZvbGlvX3pvbmVudW0oY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbylcXG4ge1xcbi1cXHRyZXR1cm4gbWVtZGVzY196b25lbnVtKGZvbGlvLVxcdTAwM2VmbGFncyk7XFxuK1xcdHJldHVybiBtZW1kZXNjX3pvbmVudW0oXFx1MDAyNmZvbGlvLVxcdTAwM2VmbGFncyk7XFxuIH1cXG4gXFxuICNpZmRlZiBDT05GSUdfWk9ORV9ERVZJQ0VcXG4tc3RhdGljIGlubGluZSBib29sIG1lbWRlc2NfaXNfem9uZV9kZXZpY2UobWVtZGVzY19mbGFnc190IG1kZilcXG4rc3RhdGljIGlubGluZSBib29sIG1lbWRlc2NfaXNfem9uZV9kZXZpY2UoY29uc3QgbWVtZGVzY19mbGFnc190ICptZGYpXFxuIHtcXG4gXFx0cmV0dXJuIG1lbWRlc2Nfem9uZW51bShtZGYpID09IFpPTkVfREVWSUNFO1xcbiB9XFxuIFxcbiBzdGF0aWMgaW5saW5lIHN0cnVjdCBkZXZfcGFnZW1hcCAqcGFnZV9wZ21hcChjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSlcXG4ge1xcbi1cXHRWTV9XQVJOX09OX09OQ0VfUEFHRSghbWVtZGVzY19pc196b25lX2RldmljZShwYWdlLVxcdTAwM2VmbGFncyksIHBhZ2UpO1xcbitcXHRWTV9XQVJOX09OX09OQ0VfUEFHRSghbWVtZGVzY19pc196b25lX2RldmljZShcXHUwMDI2cGFnZS1cXHUwMDNlZmxhZ3MpLCBwYWdlKTtcXG4gXFx0cmV0dXJuIHBhZ2VfZm9saW8ocGFnZSktXFx1MDAzZXBnbWFwO1xcbiB9XFxuIFxcbkBAIC0xMzExLDkgKzEzMTMsOSBAQCBzdGF0aWMgaW5saW5lIHN0cnVjdCBkZXZfcGFnZW1hcCAqcGFnZV9wZ21hcChjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSlcXG4gc3RhdGljIGlubGluZSBib29sIHpvbmVfZGV2aWNlX3BhZ2VzX2hhdmVfc2FtZV9wZ21hcChjb25zdCBzdHJ1Y3QgcGFnZSAqYSxcXG4gXFx0XFx0XFx0XFx0XFx0XFx0ICAgICBjb25zdCBzdHJ1Y3QgcGFnZSAqYilcXG4ge1xcbi1cXHRpZiAobWVtZGVzY19pc196b25lX2RldmljZShhLVxcdTAwM2VmbGFncykgIT0gbWVtZGVzY19pc196b25lX2RldmljZShiLVxcdTAwM2VmbGFncykpXFxuK1xcdGlmIChtZW1kZXNjX2lzX3pvbmVfZGV2aWNlKFxcdTAwMjZhLVxcdTAwM2VmbGFncykgIT0gbWVtZGVzY19pc196b25lX2RldmljZShcXHUwMDI2Yi1cXHUwMDNlZmxhZ3MpKVxcbiBcXHRcXHRyZXR1cm4gZmFsc2U7XFxuLVxcdGlmICghbWVtZGVzY19pc196b25lX2RldmljZShhLVxcdTAwM2VmbGFncykpXFxuK1xcdGlmICghbWVtZGVzY19pc196b25lX2RldmljZShcXHUwMDI2YS1cXHUwMDNlZmxhZ3MpKVxcbiBcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4gXFx0cmV0dXJuIHBhZ2VfcGdtYXAoYSkgPT0gcGFnZV9wZ21hcChiKTtcXG4gfVxcbkBAIC0xMzIxLDcgKzEzMjMsNyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgem9uZV9kZXZpY2VfcGFnZXNfaGF2ZV9zYW1lX3BnbWFwKGNvbnN0IHN0cnVjdCBwYWdlICphLFxcbiBleHRlcm4gdm9pZCBtZW1tYXBfaW5pdF96b25lX2RldmljZShzdHJ1Y3Qgem9uZSAqLCB1bnNpZ25lZCBsb25nLFxcbiBcXHRcXHRcXHRcXHQgICAgdW5zaWduZWQgbG9uZywgc3RydWN0IGRldl9wYWdlbWFwICopO1xcbiAjZWxzZVxcbi1zdGF0aWMgaW5saW5lIGJvb2wgbWVtZGVzY19pc196b25lX2RldmljZShtZW1kZXNjX2ZsYWdzX3QgbWRmKVxcbitzdGF0aWMgaW5saW5lIGJvb2wgbWVtZGVzY19pc196b25lX2RldmljZShjb25zdCBtZW1kZXNjX2ZsYWdzX3QgKm1kZilcXG4ge1xcbiBcXHRyZXR1cm4gZmFsc2U7XFxuIH1cXG5AQCAtMTMzOCwxMiArMTM0MCwxMiBAQCBzdGF0aWMgaW5saW5lIHN0cnVjdCBkZXZfcGFnZW1hcCAqcGFnZV9wZ21hcChjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSlcXG4gXFxuIHN0YXRpYyBpbmxpbmUgYm9vbCBpc196b25lX2RldmljZV9wYWdlKGNvbnN0IHN0cnVjdCBwYWdlICpwYWdlKVxcbiB7XFxuLVxcdHJldHVybiBtZW1kZXNjX2lzX3pvbmVfZGV2aWNlKHBhZ2UtXFx1MDAzZWZsYWdzKTtcXG4rXFx0cmV0dXJuIG1lbWRlc2NfaXNfem9uZV9kZXZpY2UoXFx1MDAyNnBhZ2UtXFx1MDAzZWZsYWdzKTtcXG4gfVxcbiBcXG4gc3RhdGljIGlubGluZSBib29sIGZvbGlvX2lzX3pvbmVfZGV2aWNlKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuIHtcXG4tXFx0cmV0dXJuIG1lbWRlc2NfaXNfem9uZV9kZXZpY2UoZm9saW8tXFx1MDAzZWZsYWdzKTtcXG4rXFx0cmV0dXJuIG1lbWRlc2NfaXNfem9uZV9kZXZpY2UoXFx1MDAyNmZvbGlvLVxcdTAwM2VmbGFncyk7XFxuIH1cXG4gXFxuIHN0YXRpYyBpbmxpbmUgYm9vbCBpc196b25lX21vdmFibGVfcGFnZShjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSlcXG5kaWZmIC0tZ2l0IGEvbW0vcGFnZV9hbGxvYy5jIGIvbW0vcGFnZV9hbGxvYy5jXFxuaW5kZXggZWU5MDJhNDY4YzJmNWIuLjAyMGE5N2NhMDE4ZTk5IDEwMDY0NFxcbi0tLSBhL21tL3BhZ2VfYWxsb2MuY1xcbisrKyBiL21tL3BhZ2VfYWxsb2MuY1xcbkBAIC02OTA0LDE1ICs2OTA0LDE1IEBAIHN0YXRpYyB2b2lkIF9fZnJlZV9jb250aWdfcmFuZ2VfY29tbW9uKHVuc2lnbmVkIGxvbmcgcGZuLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzXFxuIFxcdFxcdFxcdGNvbnRpbnVlO1xcbiBcXHRcXHR9XFxuIFxcbi1cXHRcXHRpZiAoc3RhcnQgXFx1MDAyNlxcdTAwMjYgbWVtZGVzY19zZWN0aW9uKHBhZ2UtXFx1MDAzZWZsYWdzKSAhPSBzdGFydF9zZWMpIHtcXG4rXFx0XFx0aWYgKHN0YXJ0IFxcdTAwMjZcXHUwMDI2IG1lbWRlc2Nfc2VjdGlvbihcXHUwMDI2cGFnZS1cXHUwMDNlZmxhZ3MpICE9IHN0YXJ0X3NlYykge1xcbiBcXHRcXHRcXHRmcmVlX3ByZXBhcmVkX2NvbnRpZ19yYW5nZShzdGFydCwgaSAtIG5yX3N0YXJ0KTtcXG4gXFx0XFx0XFx0c3RhcnQgPSBwYWdlO1xcbiBcXHRcXHRcXHRucl9zdGFydCA9IGk7XFxuLVxcdFxcdFxcdHN0YXJ0X3NlYyA9IG1lbWRlc2Nfc2VjdGlvbihwYWdlLVxcdTAwM2VmbGFncyk7XFxuK1xcdFxcdFxcdHN0YXJ0X3NlYyA9IG1lbWRlc2Nfc2VjdGlvbihcXHUwMDI2cGFnZS1cXHUwMDNlZmxhZ3MpO1xcbiBcXHRcXHR9IGVsc2UgaWYgKCFzdGFydCkge1xcbiBcXHRcXHRcXHRzdGFydCA9IHBhZ2U7XFxuIFxcdFxcdFxcdG5yX3N0YXJ0ID0gaTtcXG4tXFx0XFx0XFx0c3RhcnRfc2VjID0gbWVtZGVzY19zZWN0aW9uKHBhZ2UtXFx1MDAzZWZsYWdzKTtcXG4rXFx0XFx0XFx0c3RhcnRfc2VjID0gbWVtZGVzY19zZWN0aW9uKFxcdTAwMjZwYWdlLVxcdTAwM2VmbGFncyk7XFxuIFxcdFxcdH1cXG4gXFx0fVxcbiBcXG5kaWZmIC0tZ2l0IGEvbW0vc2xhYi5oIGIvbW0vc2xhYi5oXFxuaW5kZXggMjgxYTY1MjMzNzk1ZDYuLjlkZWQzMTk0OTVhMDcwIDEwMDY0NFxcbi0tLSBhL21tL3NsYWIuaFxcbisrKyBiL21tL3NsYWIuaFxcbkBAIC0xNzksNyArMTc5LDcgQEAgc3RhdGljIGlubGluZSB2b2lkICpzbGFiX2FkZHJlc3MoY29uc3Qgc3RydWN0IHNsYWIgKnNsYWIpXFxuIFxcbiBzdGF0aWMgaW5saW5lIGludCBzbGFiX25pZChjb25zdCBzdHJ1Y3Qgc2xhYiAqc2xhYilcXG4ge1xcbi1cXHRyZXR1cm4gbWVtZGVzY19uaWQoc2xhYi1cXHUwMDNlZmxhZ3MpO1xcbitcXHRyZXR1cm4gbWVtZGVzY19uaWQoXFx1MDAyNnNsYWItXFx1MDAzZWZsYWdzKTtcXG4gfVxcbiBcXG4gc3RhdGljIGlubGluZSBwZ19kYXRhX3QgKnNsYWJfcGdkYXQoY29uc3Qgc3RydWN0IHNsYWIgKnNsYWIpXFxuZGlmZiAtLWdpdCBhL21tL3NwYXJzZS5jIGIvbW0vc3BhcnNlLmNcXG5pbmRleCAxNmFjNmRmM2M4OWZhMi4uOGUzODQ3NzY0NTEzMTkgMTAwNjQ0XFxuLS0tIGEvbW0vc3BhcnNlLmNcXG4rKysgYi9tbS9zcGFyc2UuY1xcbkBAIC00Myw3ICs0Myw3IEBAIHN0YXRpYyB1OCBzZWN0aW9uX3RvX25vZGVfdGFibGVbTlJfTUVNX1NFQ1RJT05TXSBfX2NhY2hlbGluZV9hbGlnbmVkO1xcbiBzdGF0aWMgdTE2IHNlY3Rpb25fdG9fbm9kZV90YWJsZVtOUl9NRU1fU0VDVElPTlNdIF9fY2FjaGVsaW5lX2FsaWduZWQ7XFxuICNlbmRpZlxcbiBcXG4taW50IG1lbWRlc2NfbmlkKG1lbWRlc2NfZmxhZ3NfdCBtZGYpXFxuK2ludCBtZW1kZXNjX25pZChjb25zdCBtZW1kZXNjX2ZsYWdzX3QgKm1kZilcXG4ge1xcbiBcXHRyZXR1cm4gc2VjdGlvbl90b19ub2RlX3RhYmxlW21lbWRlc2Nfc2VjdGlvbihtZGYpXTtcXG4gfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wOFQxMjozNjowNy45MDUxODAxNzNaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU3MzM5MTA0NDU5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpcyBhIHB1cmUgcmVmYWN0b3JpbmcgdGhhdCBjaGFuZ2VzIGBtZW1kZXNjX2ZsYWdzX3RgIHRvIGJlIHBhc3NlZCBieSBwb2ludGVyIGluc3RlYWQgb2YgYnkgdmFsdWUsIGFuZCBhZGRzL2ZpeGVzIEtDU0FOIGFzc2VydGlvbnMgKGBBU1NFUlRfRVhDTFVTSVZFX0JJVFNgKS4gSXQgZG9lcyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIHRoZSBleGVjdXRpb24gZmxvdyBvZiB0aGUga2VybmVsLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdFxuICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LFxuICAgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA1YWQxZjk1M2RlMmNiOTdlNzRlZmRkMjdkNWVmZWJjNjg1ZWMzNDAyXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBKdWwgOCAxMjozNjowNSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWdlbmVyaWMvbWVtb3J5X21vZGVsLmggYi9pbmNsdWRlL2FzbS1nZW5lcmljL21lbW9yeV9tb2RlbC5oXG5pbmRleCBlZmE2NjEwYWNiYzc5Ny4uZjg0MDRiYzc3NzNjMmIgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2FzbS1nZW5lcmljL21lbW9yeV9tb2RlbC5oXG4rKysgYi9pbmNsdWRlL2FzbS1nZW5lcmljL21lbW9yeV9tb2RlbC5oXG5AQCAtNTMsNyArNTMsNyBAQCBzdGF0aWMgaW5saW5lIGludCBwZm5fdmFsaWQodW5zaWduZWQgbG9uZyBwZm4pXG4gICovXG4gI2RlZmluZSBfX3BhZ2VfdG9fcGZuKHBnKVx0XHRcdFx0XHRcXFxuICh7XHRjb25zdCBzdHJ1Y3QgcGFnZSAqX19wZyA9IChwZyk7XHRcdFx0XHRcXFxuLVx0aW50IF9fc2VjID0gbWVtZGVzY19zZWN0aW9uKF9fcGctXHUwMDNlZmxhZ3MpO1x0XHRcXFxuK1x0aW50IF9fc2VjID0gbWVtZGVzY19zZWN0aW9uKFx1MDAyNl9fcGctXHUwMDNlZmxhZ3MpO1x0XHRcXFxuIFx0KHVuc2lnbmVkIGxvbmcpKF9fcGcgLSBfX3NlY3Rpb25fbWVtX21hcF9hZGRyKF9fbnJfdG9fc2VjdGlvbihfX3NlYykpKTtcdFxcXG4gfSlcbiBcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21tLmggYi9pbmNsdWRlL2xpbnV4L21tLmhcbmluZGV4IDQ4NWRmOWMyZGJkZGIzLi4xZWY5YjBiZDdmZDMzNiAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvbW0uaFxuKysrIGIvaW5jbHVkZS9saW51eC9tbS5oXG5AQCAtMzcsNiArMzcsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2JpdG1hcC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvYml0b3BzLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9pb21tdS1kZWJ1Zy1wYWdlYWxsb2MuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2tjc2FuLWNoZWNrcy5oXHUwMDNlXG4gXG4gc3RydWN0IG1lbXBvbGljeTtcbiBzdHJ1Y3QgYW5vbl92bWE7XG5AQCAtMjI4NiwyMiArMjI4NywzMiBAQCBzdGF0aWMgaW5saW5lIGludCBwYWdlX3pvbmVfaWQoc3RydWN0IHBhZ2UgKnBhZ2UpXG4gfVxuIFxuICNpZmRlZiBOT0RFX05PVF9JTl9QQUdFX0ZMQUdTXG4taW50IG1lbWRlc2NfbmlkKG1lbWRlc2NfZmxhZ3NfdCBtZGYpO1xuK2ludCBtZW1kZXNjX25pZChjb25zdCBtZW1kZXNjX2ZsYWdzX3QgKm1kZik7XG4gI2Vsc2Vcbi1zdGF0aWMgaW5saW5lIGludCBtZW1kZXNjX25pZChtZW1kZXNjX2ZsYWdzX3QgbWRmKVxuKyNpZmRlZiBDT05GSUdfTlVNQVxuK3N0YXRpYyBpbmxpbmUgaW50IG1lbWRlc2NfbmlkKGNvbnN0IG1lbWRlc2NfZmxhZ3NfdCAqbWRmKVxuIHtcbi1cdHJldHVybiAobWRmLmYgXHUwMDNlXHUwMDNlIE5PREVTX1BHU0hJRlQpIFx1MDAyNiBOT0RFU19NQVNLO1xuK1x0QVNTRVJUX0VYQ0xVU0lWRV9CSVRTKG1kZi1cdTAwM2VmLCBOT0RFU19NQVNLIFx1MDAzY1x1MDAzYyBOT0RFU19QR1NISUZUKTtcbitcdHJldHVybiAobWRmLVx1MDAzZWYgXHUwMDNlXHUwMDNlIE5PREVTX1BHU0hJRlQpIFx1MDAyNiBOT0RFU19NQVNLO1xuIH1cbisjZWxzZVxuK3N0YXRpYyBpbmxpbmUgaW50IG1lbWRlc2NfbmlkKGNvbnN0IG1lbWRlc2NfZmxhZ3NfdCAqbWRmKVxuK3tcbitcdHJldHVybiAwO1xuK31cbisjZW5kaWZcbiAjZW5kaWZcbiBcbiBzdGF0aWMgaW5saW5lIGludCBwYWdlX3RvX25pZChjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSlcbiB7XG4tXHRyZXR1cm4gbWVtZGVzY19uaWQoUEZfUE9JU09ORURfQ0hFQ0socGFnZSktXHUwMDNlZmxhZ3MpO1xuK1x0Y29uc3Qgc3RydWN0IHBhZ2UgKnAgPSBQRl9QT0lTT05FRF9DSEVDSyhwYWdlKTtcbitcbitcdHJldHVybiBtZW1kZXNjX25pZChcdTAwMjZwLVx1MDAzZWZsYWdzKTtcbiB9XG4gXG4gc3RhdGljIGlubGluZSBpbnQgZm9saW9fbmlkKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8pXG4ge1xuLVx0cmV0dXJuIG1lbWRlc2NfbmlkKGZvbGlvLVx1MDAzZWZsYWdzKTtcbitcdHJldHVybiBtZW1kZXNjX25pZChcdTAwMjZmb2xpby1cdTAwM2VmbGFncyk7XG4gfVxuIFxuICNpZmRlZiBDT05GSUdfTlVNQV9CQUxBTkNJTkdcbkBAIC0yNTQxLDEyICsyNTUyLDEzIEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBzZXRfcGFnZV9zZWN0aW9uKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBsb25nIHNlY3Rpb24pXG4gXHRwYWdlLVx1MDAzZWZsYWdzLmYgfD0gKHNlY3Rpb24gXHUwMDI2IFNFQ1RJT05TX01BU0spIFx1MDAzY1x1MDAzYyBTRUNUSU9OU19QR1NISUZUO1xuIH1cbiBcbi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgbWVtZGVzY19zZWN0aW9uKG1lbWRlc2NfZmxhZ3NfdCBtZGYpXG4rc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIG1lbWRlc2Nfc2VjdGlvbihjb25zdCBtZW1kZXNjX2ZsYWdzX3QgKm1kZilcbiB7XG4tXHRyZXR1cm4gKG1kZi5mIFx1MDAzZVx1MDAzZSBTRUNUSU9OU19QR1NISUZUKSBcdTAwMjYgU0VDVElPTlNfTUFTSztcbitcdEFTU0VSVF9FWENMVVNJVkVfQklUUyhtZGYtXHUwMDNlZiwgU0VDVElPTlNfTUFTSyBcdTAwM2NcdTAwM2MgU0VDVElPTlNfUEdTSElGVCk7XG4rXHRyZXR1cm4gKG1kZi1cdTAwM2VmIFx1MDAzZVx1MDAzZSBTRUNUSU9OU19QR1NISUZUKSBcdTAwMjYgU0VDVElPTlNfTUFTSztcbiB9XG4gI2Vsc2UgLyogIVNFQ1RJT05fSU5fUEFHRV9GTEFHUyAqL1xuLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBtZW1kZXNjX3NlY3Rpb24obWVtZGVzY19mbGFnc190IG1kZilcbitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgbWVtZGVzY19zZWN0aW9uKGNvbnN0IG1lbWRlc2NfZmxhZ3NfdCAqbWRmKVxuIHtcbiBcdHJldHVybiAwO1xuIH1cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21tX2lubGluZS5oIGIvaW5jbHVkZS9saW51eC9tbV9pbmxpbmUuaFxuaW5kZXggYTg0MzBhN2FlMDU0NDcuLmVmY2RkYjk5MjVhZGQ3IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9tbV9pbmxpbmUuaFxuKysrIGIvaW5jbHVkZS9saW51eC9tbV9pbmxpbmUuaFxuQEAgLTY1MCw3ICs2NTAsNyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgdm1hX2hhc19yZWNlbmN5KGNvbnN0IHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxuIHN0YXRpYyBpbmxpbmUgc2l6ZV90IG51bV9wYWdlc19jb250aWd1b3VzKHN0cnVjdCBwYWdlICoqcGFnZXMsIHNpemVfdCBucl9wYWdlcylcbiB7XG4gXHRzdHJ1Y3QgcGFnZSAqY3VyX3BhZ2UgPSBwYWdlc1swXTtcbi1cdHVuc2lnbmVkIGxvbmcgc2VjdGlvbiA9IG1lbWRlc2Nfc2VjdGlvbihjdXJfcGFnZS1cdTAwM2VmbGFncyk7XG4rXHR1bnNpZ25lZCBsb25nIHNlY3Rpb24gPSBtZW1kZXNjX3NlY3Rpb24oXHUwMDI2Y3VyX3BhZ2UtXHUwMDNlZmxhZ3MpO1xuIFx0c2l6ZV90IGk7XG4gXG4gXHRmb3IgKGkgPSAxOyBpIFx1MDAzYyBucl9wYWdlczsgaSsrKSB7XG5AQCAtNjYwLDcgKzY2MCw3IEBAIHN0YXRpYyBpbmxpbmUgc2l6ZV90IG51bV9wYWdlc19jb250aWd1b3VzKHN0cnVjdCBwYWdlICoqcGFnZXMsIHNpemVfdCBucl9wYWdlcylcbiBcdFx0ICogSW4gdW5wcm9ibGVtYXRpYyBrZXJuZWwgY29uZmlncywgcGFnZV90b19zZWN0aW9uKCkgPT0gMCBhbmRcbiBcdFx0ICogdGhlIHdob2xlIGNoZWNrIHdpbGwgZ2V0IG9wdGltaXplZCBvdXQuXG4gXHRcdCAqL1xuLVx0XHRpZiAobWVtZGVzY19zZWN0aW9uKGN1cl9wYWdlLVx1MDAzZWZsYWdzKSAhPSBzZWN0aW9uKVxuK1x0XHRpZiAobWVtZGVzY19zZWN0aW9uKFx1MDAyNmN1cl9wYWdlLVx1MDAzZWZsYWdzKSAhPSBzZWN0aW9uKVxuIFx0XHRcdGJyZWFrO1xuIFx0fVxuIFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbW16b25lLmggYi9pbmNsdWRlL2xpbnV4L21tem9uZS5oXG5pbmRleCBjYTI3MTIxODcxNDc1Yy4uZTYwZGFkNTQ2Y2E2OGQgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L21tem9uZS5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L21tem9uZS5oXG5AQCAtMTI3MiwzMSArMTI3MiwzMyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgem9uZV9pc19lbXB0eShjb25zdCBzdHJ1Y3Qgem9uZSAqem9uZSlcbiAjZGVmaW5lIEtBU0FOX1RBR19NQVNLXHRcdCgoMVVMIFx1MDAzY1x1MDAzYyBLQVNBTl9UQUdfV0lEVEgpIC0gMSlcbiAjZGVmaW5lIFpPTkVJRF9NQVNLXHRcdCgoMVVMIFx1MDAzY1x1MDAzYyBaT05FSURfU0hJRlQpIC0gMSlcbiBcbi1zdGF0aWMgaW5saW5lIGVudW0gem9uZV90eXBlIG1lbWRlc2Nfem9uZW51bShtZW1kZXNjX2ZsYWdzX3QgZmxhZ3MpXG4rc3RhdGljIGlubGluZSBlbnVtIHpvbmVfdHlwZSBtZW1kZXNjX3pvbmVudW0oY29uc3QgbWVtZGVzY19mbGFnc190ICpmbGFncylcbiB7XG4tXHRBU1NFUlRfRVhDTFVTSVZFX0JJVFMoZmxhZ3MuZiwgWk9ORVNfTUFTSyBcdTAwM2NcdTAwM2MgWk9ORVNfUEdTSElGVCk7XG4tXHRyZXR1cm4gKGZsYWdzLmYgXHUwMDNlXHUwMDNlIFpPTkVTX1BHU0hJRlQpIFx1MDAyNiBaT05FU19NQVNLO1xuKyNpZiBaT05FU19XSURUSCAhPSAwXG4rXHRBU1NFUlRfRVhDTFVTSVZFX0JJVFMoZmxhZ3MtXHUwMDNlZiwgWk9ORVNfTUFTSyBcdTAwM2NcdTAwM2MgWk9ORVNfUEdTSElGVCk7XG4rI2VuZGlmXG4rXHRyZXR1cm4gKGZsYWdzLVx1MDAzZWYgXHUwMDNlXHUwMDNlIFpPTkVTX1BHU0hJRlQpIFx1MDAyNiBaT05FU19NQVNLO1xuIH1cbiBcbiBzdGF0aWMgaW5saW5lIGVudW0gem9uZV90eXBlIHBhZ2Vfem9uZW51bShjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSlcbiB7XG4tXHRyZXR1cm4gbWVtZGVzY196b25lbnVtKHBhZ2UtXHUwMDNlZmxhZ3MpO1xuK1x0cmV0dXJuIG1lbWRlc2Nfem9uZW51bShcdTAwMjZwYWdlLVx1MDAzZWZsYWdzKTtcbiB9XG4gXG4gc3RhdGljIGlubGluZSBlbnVtIHpvbmVfdHlwZSBmb2xpb196b25lbnVtKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8pXG4ge1xuLVx0cmV0dXJuIG1lbWRlc2Nfem9uZW51bShmb2xpby1cdTAwM2VmbGFncyk7XG4rXHRyZXR1cm4gbWVtZGVzY196b25lbnVtKFx1MDAyNmZvbGlvLVx1MDAzZWZsYWdzKTtcbiB9XG4gXG4gI2lmZGVmIENPTkZJR19aT05FX0RFVklDRVxuLXN0YXRpYyBpbmxpbmUgYm9vbCBtZW1kZXNjX2lzX3pvbmVfZGV2aWNlKG1lbWRlc2NfZmxhZ3NfdCBtZGYpXG4rc3RhdGljIGlubGluZSBib29sIG1lbWRlc2NfaXNfem9uZV9kZXZpY2UoY29uc3QgbWVtZGVzY19mbGFnc190ICptZGYpXG4ge1xuIFx0cmV0dXJuIG1lbWRlc2Nfem9uZW51bShtZGYpID09IFpPTkVfREVWSUNFO1xuIH1cbiBcbiBzdGF0aWMgaW5saW5lIHN0cnVjdCBkZXZfcGFnZW1hcCAqcGFnZV9wZ21hcChjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSlcbiB7XG4tXHRWTV9XQVJOX09OX09OQ0VfUEFHRSghbWVtZGVzY19pc196b25lX2RldmljZShwYWdlLVx1MDAzZWZsYWdzKSwgcGFnZSk7XG4rXHRWTV9XQVJOX09OX09OQ0VfUEFHRSghbWVtZGVzY19pc196b25lX2RldmljZShcdTAwMjZwYWdlLVx1MDAzZWZsYWdzKSwgcGFnZSk7XG4gXHRyZXR1cm4gcGFnZV9mb2xpbyhwYWdlKS1cdTAwM2VwZ21hcDtcbiB9XG4gXG5AQCAtMTMxMSw5ICsxMzEzLDkgQEAgc3RhdGljIGlubGluZSBzdHJ1Y3QgZGV2X3BhZ2VtYXAgKnBhZ2VfcGdtYXAoY29uc3Qgc3RydWN0IHBhZ2UgKnBhZ2UpXG4gc3RhdGljIGlubGluZSBib29sIHpvbmVfZGV2aWNlX3BhZ2VzX2hhdmVfc2FtZV9wZ21hcChjb25zdCBzdHJ1Y3QgcGFnZSAqYSxcbiBcdFx0XHRcdFx0XHQgICAgIGNvbnN0IHN0cnVjdCBwYWdlICpiKVxuIHtcbi1cdGlmIChtZW1kZXNjX2lzX3pvbmVfZGV2aWNlKGEtXHUwMDNlZmxhZ3MpICE9IG1lbWRlc2NfaXNfem9uZV9kZXZpY2UoYi1cdTAwM2VmbGFncykpXG4rXHRpZiAobWVtZGVzY19pc196b25lX2RldmljZShcdTAwMjZhLVx1MDAzZWZsYWdzKSAhPSBtZW1kZXNjX2lzX3pvbmVfZGV2aWNlKFx1MDAyNmItXHUwMDNlZmxhZ3MpKVxuIFx0XHRyZXR1cm4gZmFsc2U7XG4tXHRpZiAoIW1lbWRlc2NfaXNfem9uZV9kZXZpY2UoYS1cdTAwM2VmbGFncykpXG4rXHRpZiAoIW1lbWRlc2NfaXNfem9uZV9kZXZpY2UoXHUwMDI2YS1cdTAwM2VmbGFncykpXG4gXHRcdHJldHVybiB0cnVlO1xuIFx0cmV0dXJuIHBhZ2VfcGdtYXAoYSkgPT0gcGFnZV9wZ21hcChiKTtcbiB9XG5AQCAtMTMyMSw3ICsxMzIzLDcgQEAgc3RhdGljIGlubGluZSBib29sIHpvbmVfZGV2aWNlX3BhZ2VzX2hhdmVfc2FtZV9wZ21hcChjb25zdCBzdHJ1Y3QgcGFnZSAqYSxcbiBleHRlcm4gdm9pZCBtZW1tYXBfaW5pdF96b25lX2RldmljZShzdHJ1Y3Qgem9uZSAqLCB1bnNpZ25lZCBsb25nLFxuIFx0XHRcdFx0ICAgIHVuc2lnbmVkIGxvbmcsIHN0cnVjdCBkZXZfcGFnZW1hcCAqKTtcbiAjZWxzZVxuLXN0YXRpYyBpbmxpbmUgYm9vbCBtZW1kZXNjX2lzX3pvbmVfZGV2aWNlKG1lbWRlc2NfZmxhZ3NfdCBtZGYpXG4rc3RhdGljIGlubGluZSBib29sIG1lbWRlc2NfaXNfem9uZV9kZXZpY2UoY29uc3QgbWVtZGVzY19mbGFnc190ICptZGYpXG4ge1xuIFx0cmV0dXJuIGZhbHNlO1xuIH1cbkBAIC0xMzM4LDEyICsxMzQwLDEyIEBAIHN0YXRpYyBpbmxpbmUgc3RydWN0IGRldl9wYWdlbWFwICpwYWdlX3BnbWFwKGNvbnN0IHN0cnVjdCBwYWdlICpwYWdlKVxuIFxuIHN0YXRpYyBpbmxpbmUgYm9vbCBpc196b25lX2RldmljZV9wYWdlKGNvbnN0IHN0cnVjdCBwYWdlICpwYWdlKVxuIHtcbi1cdHJldHVybiBtZW1kZXNjX2lzX3pvbmVfZGV2aWNlKHBhZ2UtXHUwMDNlZmxhZ3MpO1xuK1x0cmV0dXJuIG1lbWRlc2NfaXNfem9uZV9kZXZpY2UoXHUwMDI2cGFnZS1cdTAwM2VmbGFncyk7XG4gfVxuIFxuIHN0YXRpYyBpbmxpbmUgYm9vbCBmb2xpb19pc196b25lX2RldmljZShjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIHtcbi1cdHJldHVybiBtZW1kZXNjX2lzX3pvbmVfZGV2aWNlKGZvbGlvLVx1MDAzZWZsYWdzKTtcbitcdHJldHVybiBtZW1kZXNjX2lzX3pvbmVfZGV2aWNlKFx1MDAyNmZvbGlvLVx1MDAzZWZsYWdzKTtcbiB9XG4gXG4gc3RhdGljIGlubGluZSBib29sIGlzX3pvbmVfbW92YWJsZV9wYWdlKGNvbnN0IHN0cnVjdCBwYWdlICpwYWdlKVxuZGlmZiAtLWdpdCBhL21tL3BhZ2VfYWxsb2MuYyBiL21tL3BhZ2VfYWxsb2MuY1xuaW5kZXggZWU5MDJhNDY4YzJmNWIuLjAyMGE5N2NhMDE4ZTk5IDEwMDY0NFxuLS0tIGEvbW0vcGFnZV9hbGxvYy5jXG4rKysgYi9tbS9wYWdlX2FsbG9jLmNcbkBAIC02OTA0LDE1ICs2OTA0LDE1IEBAIHN0YXRpYyB2b2lkIF9fZnJlZV9jb250aWdfcmFuZ2VfY29tbW9uKHVuc2lnbmVkIGxvbmcgcGZuLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzXG4gXHRcdFx0Y29udGludWU7XG4gXHRcdH1cbiBcbi1cdFx0aWYgKHN0YXJ0IFx1MDAyNlx1MDAyNiBtZW1kZXNjX3NlY3Rpb24ocGFnZS1cdTAwM2VmbGFncykgIT0gc3RhcnRfc2VjKSB7XG4rXHRcdGlmIChzdGFydCBcdTAwMjZcdTAwMjYgbWVtZGVzY19zZWN0aW9uKFx1MDAyNnBhZ2UtXHUwMDNlZmxhZ3MpICE9IHN0YXJ0X3NlYykge1xuIFx0XHRcdGZyZWVfcHJlcGFyZWRfY29udGlnX3JhbmdlKHN0YXJ0LCBpIC0gbnJfc3RhcnQpO1xuIFx0XHRcdHN0YXJ0ID0gcGFnZTtcbiBcdFx0XHRucl9zdGFydCA9IGk7XG4tXHRcdFx0c3RhcnRfc2VjID0gbWVtZGVzY19zZWN0aW9uKHBhZ2UtXHUwMDNlZmxhZ3MpO1xuK1x0XHRcdHN0YXJ0X3NlYyA9IG1lbWRlc2Nfc2VjdGlvbihcdTAwMjZwYWdlLVx1MDAzZWZsYWdzKTtcbiBcdFx0fSBlbHNlIGlmICghc3RhcnQpIHtcbiBcdFx0XHRzdGFydCA9IHBhZ2U7XG4gXHRcdFx0bnJfc3RhcnQgPSBpO1xuLVx0XHRcdHN0YXJ0X3NlYyA9IG1lbWRlc2Nfc2VjdGlvbihwYWdlLVx1MDAzZWZsYWdzKTtcbitcdFx0XHRzdGFydF9zZWMgPSBtZW1kZXNjX3NlY3Rpb24oXHUwMDI2cGFnZS1cdTAwM2VmbGFncyk7XG4gXHRcdH1cbiBcdH1cbiBcbmRpZmYgLS1naXQgYS9tbS9zbGFiLmggYi9tbS9zbGFiLmhcbmluZGV4IDI4MWE2NTIzMzc5NWQ2Li45ZGVkMzE5NDk1YTA3MCAxMDA2NDRcbi0tLSBhL21tL3NsYWIuaFxuKysrIGIvbW0vc2xhYi5oXG5AQCAtMTc5LDcgKzE3OSw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCAqc2xhYl9hZGRyZXNzKGNvbnN0IHN0cnVjdCBzbGFiICpzbGFiKVxuIFxuIHN0YXRpYyBpbmxpbmUgaW50IHNsYWJfbmlkKGNvbnN0IHN0cnVjdCBzbGFiICpzbGFiKVxuIHtcbi1cdHJldHVybiBtZW1kZXNjX25pZChzbGFiLVx1MDAzZWZsYWdzKTtcbitcdHJldHVybiBtZW1kZXNjX25pZChcdTAwMjZzbGFiLVx1MDAzZWZsYWdzKTtcbiB9XG4gXG4gc3RhdGljIGlubGluZSBwZ19kYXRhX3QgKnNsYWJfcGdkYXQoY29uc3Qgc3RydWN0IHNsYWIgKnNsYWIpXG5kaWZmIC0tZ2l0IGEvbW0vc3BhcnNlLmMgYi9tbS9zcGFyc2UuY1xuaW5kZXggMTZhYzZkZjNjODlmYTIuLjhlMzg0Nzc2NDUxMzE5IDEwMDY0NFxuLS0tIGEvbW0vc3BhcnNlLmNcbisrKyBiL21tL3NwYXJzZS5jXG5AQCAtNDMsNyArNDMsNyBAQCBzdGF0aWMgdTggc2VjdGlvbl90b19ub2RlX3RhYmxlW05SX01FTV9TRUNUSU9OU10gX19jYWNoZWxpbmVfYWxpZ25lZDtcbiBzdGF0aWMgdTE2IHNlY3Rpb25fdG9fbm9kZV90YWJsZVtOUl9NRU1fU0VDVElPTlNdIF9fY2FjaGVsaW5lX2FsaWduZWQ7XG4gI2VuZGlmXG4gXG4taW50IG1lbWRlc2NfbmlkKG1lbWRlc2NfZmxhZ3NfdCBtZGYpXG4raW50IG1lbWRlc2NfbmlkKGNvbnN0IG1lbWRlc2NfZmxhZ3NfdCAqbWRmKVxuIHtcbiBcdHJldHVybiBzZWN0aW9uX3RvX25vZGVfdGFibGVbbWVtZGVzY19zZWN0aW9uKG1kZildO1xuIH1cbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA4VDEyOjM2OjA3LjkwNTIwMTE2M1oiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjk0MDg1MjI5NDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgTWVtb3J5IE1vZGVsIE1hY3JvIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaC4gSXQgc2VlbXMgdG8gYmUgdG91Y2hpbmcgc2V2ZXJhbCBtZW1vcnkgbW9kZWwgbWFjcm9zOiBgbWVtZGVzY19zZWN0aW9uYCwgYG1lbWRlc2NfbmlkYCwgYG1lbWRlc2Nfem9uZW51bWAsIGFuZCBgbWVtZGVzY19pc196b25lX2RldmljZWAuIFRoZSBjb3JlIGNoYW5nZSBpcyB0aGUgYXJndW1lbnQgdHlwZSwgc2hpZnRpbmcgZnJvbSBhIHBhc3MtYnktdmFsdWUgKGBtZW1kZXNjX2ZsYWdzX3QgbWRmYCkgdG8gcGFzcy1ieS1wb2ludGVyIChgY29uc3QgbWVtZGVzY19mbGFnc190ICptZGZgKS4gSG1tLCBhbmQgdGhlcmUgYXJlIHRoZXNlIGBBU1NFUlRfRVhDTFVTSVZFX0JJVFNgIGNhbGxzIHNwcmlua2xlZCBpbi4gVGhhdCB0cmlnZ2VycyBzb21ldGhpbmcuLi4gdGhhdCdzIGEgS0NTQU4gY2hlY2ssIHJpZ2h0PyBMZXQncyB6b29tIGluIG9uIGBtZW1kZXNjX25pZGAgYW5kIHNlZSB3aGF0J3MgY2hhbmdlZDpcblxuYGBgY1xuICNpZmRlZiBOT0RFX05PVF9JTl9QQUdFX0ZMQUdTXG4taW50IG1lbWRlc2NfbmlkKG1lbWRlc2NfZmxhZ3NfdCBtZGYpO1xuK2ludCBtZW1kZXNjX25pZChjb25zdCBtZW1kZXNjX2ZsYWdzX3QgKm1kZik7XG4gI2Vsc2Vcbi1zdGF0aWMgaW5saW5lIGludCBtZW1kZXNjX25pZChtZW1kZXNjX2ZsYWdzX3QgbWRmKVxuKyNpZmRlZiBDT05GSUdfTlVNQVxuK3N0YXRpYyBpbmxpbmUgaW50IG1lbWRlc2NfbmlkKGNvbnN0IG1lbWRlc2NfZmxhZ3NfdCAqbWRmKVxuIHtcbi1cdHJldHVybiAobWRmLmYgXHUwMDNlXHUwMDNlIE5PREVTX1BHU0hJRlQpIFx1MDAyNiBOT0RFU19NQVNLO1xuK1x0QVNTRVJUX0VYQ0xVU0lWRV9CSVRTKG1kZi1cdTAwM2VmLCBOT0RFU19NQVNLIFx1MDAzY1x1MDAzYyBOT0RFU19QR1NISUZUKTtcbitcdHJldHVybiAobWRmLVx1MDAzZWYgXHUwMDNlXHUwMDNlIE5PREVTX1BHU0hJRlQpIFx1MDAyNiBOT0RFU19NQVNLO1xuIH1cbisjZWxzZVxuK3N0YXRpYyBpbmxpbmUgaW50IG1lbWRlc2NfbmlkKGNvbnN0IG1lbWRlc2NfZmxhZ3NfdCAqbWRmKVxuK3tcbitcdHJldHVybiAwO1xuK31cbisjZW5kaWZcbiAjZW5kaWZcbmBgYFxuXG5SaWdodCwgaXQncyBhIHBhc3MtYnktcG9pbnRlciByZWZhY3RvcmluZy4gSXQgYWxzbyBhZGRlZCBgQVNTRVJUX0VYQ0xVU0lWRV9CSVRTYCB0byB0aG9zZSBmdW5jdGlvbnMuIE9rYXksIHRoYXQncyBkZWZpbml0ZWx5IGEgS0NTQU4gdGhpbmcsIGEgZGVidWdnaW5nIGFpZCBwdWxsZWQgaW4gZnJvbSBgXHUwMDNjbGludXgva2NzYW4tY2hlY2tzLmhcdTAwM2VgLCB3aGljaCB0aGUgcGF0Y2ggYWxzbyBpbmNsdWRlcyBpbiBgaW5jbHVkZS9saW51eC9tbS5oYC5cblxuVGhlIG1pbGxpb24tZG9sbGFyIHF1ZXN0aW9uOiBpcyB0aGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2U/IFBhc3NpbmcgYnkgcG9pbnRlciBpcyBtb3JlIG9mIGFuIG9wdGltaXphdGlvbiwgb3IgcmVmYWN0b3JpbmcuIFRoZSBLQ1NBTiBhc3NlcnRpb25zIGFyZSBjbGVhcmx5IGZvciBkZWJ1Z2dpbmcvc2FuaXRpemF0aW9uIHB1cnBvc2VzOyB0aGV5IHdvbid0IGFsdGVyIHRoZSBwcm9ncmFtJ3MgaW50ZW5kZWQgZXhlY3V0aW9uIGZsb3csIHVubGVzcyBhIEtDU0FOIGlzc3VlIGlzIGZvdW5kLlxuXG5BbHJpZ2h0LCBsZXQncyBqdXN0IG1ha2Ugc3VyZSB0aGVyZSBhcmUgbm8gZnVuY3Rpb25hbCBjaGFuZ2VzIGx1cmtpbmcuLi4gTGV0J3MgY2hlY2sgYG1lbWRlc2NfbmlkYCBhZ2Fpbi4gSWYgYCFDT05GSUdfTlVNQWAsIHRoZSBvbGQgdmVyc2lvbiB3b3VsZCByZXR1cm4gYChtZGYuZiBcdTAwM2VcdTAwM2UgTk9ERVNfUEdTSElGVCkgXHUwMDI2IE5PREVTX01BU0tgLiBOb3cgaXQganVzdCByZXR1cm5zIDAuIElmIGAhQ09ORklHX05VTUFgLCBgTk9ERVNfUEdTSElGVGAgaXMgcHJvYmFibHkgemVyby4gQW5kIGlmIGAhQ09ORklHX05VTUFgLCB0aGVuIGBOT0RFU19NQVNLYCBpcyBhbHNvIGxpa2VseSB6ZXJvLCB3aGljaCBtZWFucyB0aGF0IHRoZSBvcmlnaW5hbCBpbXBsZW1lbnRhdGlvbiB3b3VsZCBoYXZlIHJldHVybmVkIDAgYW55d2F5LiBCdXQgSSdtIGdvaW5nIHRvIGRvdWJsZSBjaGVjay4gQmV0dGVyIHRvIGJlIHNhZmUsIHNvIEknbGwgZ3JlcCBmb3IgdGhlIGRlZmluaXRpb24gb2YgYE5PREVTX01BU0tgIGp1c3QgdG8gYmUgY2VydGFpbi5cblxuXG4iLCJJbnB1dFRva2VucyI6NDc3OCwiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY0OSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA4VDEyOjM2OjE3LjMxMzcyNzUyOFoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODQ5Mzc3OTY2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIiNkZWZpbmUgTk9ERVNfTUFTS1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L21tem9uZS5oPTEyMjQ9c3RhdGljIGlubGluZSBib29sIHpvbmVfaXNfZW1wdHkoY29uc3Qgc3RydWN0IHpvbmUgKnpvbmUpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oLTEyNjgtI2RlZmluZSBaT05FU19NQVNLXFx0XFx0KCgxVUwgXFx1MDAzY1xcdTAwM2MgWk9ORVNfV0lEVEgpIC0gMSlcXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oOjEyNjk6I2RlZmluZSBOT0RFU19NQVNLXFx0XFx0KCgxVUwgXFx1MDAzY1xcdTAwM2MgTk9ERVNfV0lEVEgpIC0gMSlcXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oLTEyNzAtI2RlZmluZSBTRUNUSU9OU19NQVNLXFx0XFx0KCgxVUwgXFx1MDAzY1xcdTAwM2MgU0VDVElPTlNfV0lEVEgpIC0gMSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDhUMTI6MzY6MjIuMTYzMTI4MzA0WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODk5MzYwODMxMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIENoYW5nZXM6IEEgUmVmYWN0b3JpbmcgYW5kIERlYnVnZ2luZyBEZWVwIERpdmUqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpbW1lZGlhdGVseSwgdGhlIGZpcnN0IHRoaW5nIHRoYXQganVtcHMgb3V0IGlzIHRoZSBzaGlmdCBmcm9tIHBhc3NpbmcgYG1lbWRlc2NfZmxhZ3NfdGAgYnkgdmFsdWUgdG8gcGFzc2luZyBpdCBieSBwb2ludGVyLiBJIHJlY29nbml6ZSB0aGlzIGFzIGEgdHlwaWNhbCByZWZhY3RvcmluZyBleGVyY2lzZSwgYWltZWQgYXQgc3RyZWFtbGluaW5nIHRoZSBBQkkgb3IgcG9zc2libHkgYXZvaWRpbmcgdW5uZWNlc3NhcnkgZGF0YSBjb3BpZXMuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IHRoaXMga2luZCBvZiBjaGFuZ2UgKnNob3VsZG4ndCogaW1wYWN0IHRoZSBjb3JlIGZ1bmN0aW9uYWxpdHksIGVzcGVjaWFsbHkgaW4gYSB3YXkgdGhhdCBuZWNlc3NpdGF0ZXMgZXh0ZW5zaXZlIGZ1enppbmcuIEl0J3MgbW9yZSBhYm91dCBjb2RlIGh5Z2llbmUgYW5kIHBvdGVudGlhbGx5IG1pY3JvLW9wdGltaXphdGlvbnMuXG5cbkxldCdzIGJyZWFrIGl0IGRvd24gZnVuY3Rpb24gYnkgZnVuY3Rpb24gdG8gY29uZmlybSB0aGlzIHN1c3BpY2lvbi4gV2l0aCB0aGUgYG1lbWRlc2Nfbm9kZWlkYCBmdW5jdGlvbiwgd2hlbiBgIUNPTkZJR19OVU1BYCwgdGhlIGBOT0RFU19XSURUSGAgaXMgemVybyB3aGljaCBtZWFucyB0aGUgYE5PREVTX01BU0tgIGlzIGFsc28gMC4gVGh1cyB0aGUgbWFza2luZyBvcGVyYXRpb24gaXMgZWZmZWN0aXZlbHkgYSBuby1vcCwgcmV0dXJuaW5nIDAgYW55d2F5LiBUaGUgY2hhbmdlIHRvIHJldHVybiAwIGRpcmVjdGx5IGluIHRoaXMgc2NlbmFyaW8gaXMgYSBjbGVhciBvcHRpbWl6YXRpb24gYW5kIHNpbXBsaWZpY2F0aW9uLlxuXG5Ob3csIGNoZWNraW5nIHRoZSBgbWVtZGVzY19zZWN0aW9uYCBmdW5jdGlvbiwgdGhlIG9ubHkgY2hhbmdlIGlzIHRoZSBhZGRpdGlvbiBvZiB0aGUgS0NTQU4gYXNzZXJ0aW9uIGFuZCBhIHN3aXRjaCB0byBwYXNzLWJ5LXBvaW50ZXIuIFRoaXMgbG9va3MgbGlrZSBhIGRlYnVnZ2luZyBlbmhhbmNlbWVudCwgZW5zdXJpbmcgdGhlIGNvcnJlY3QgYml0cyBhcmUgYmVpbmcgdXNlZC4gTm8gZnVuY3Rpb25hbCBhbHRlcmF0aW9uIGhlcmUsIHNvIHRoaXMgZnVydGhlciBjb25maXJtcyBteSBpbml0aWFsIGFzc2Vzc21lbnQuXG5cbk5leHQsIEkgc2VlIHRoZSBgbWVtZGVzY196b25lbnVtYCBmdW5jdGlvbiBjaGFuZ2UuIEFoLCBoZXJlIHdlIGhhdmUgYW4gYCNpZiBaT05FU19XSURUSCAhPSAwYCBndWFyZCBhcm91bmQgdGhlIGBBU1NFUlRfRVhDTFVTSVZFX0JJVFNgIGNhbGwuIFRoaXMgaW5kaWNhdGVzIGEgZml4IGZvciBhIHBvdGVudGlhbCBidWlsZCBpc3N1ZSB3aGVuIGBaT05FU19XSURUSGAgaXMgemVyby4gSSBpbWFnaW5lIHRoYXQgdGhlIGJpdCBzaGlmdCBtaWdodCBiZSBwcm9ibGVtYXRpYyB3aGVuIGBaT05FU19XSURUSGAgaXMgemVybywgbWF5YmUgY2F1c2luZyBhIHNoaWZ0LW91dC1vZi1ib3VuZHMgc2l0dWF0aW9uLCBvciB0aGUgYXNzZXJ0aW9uIGxvZ2ljIGRvZXNuJ3QgaGFuZGxlIHRoZSB6ZXJvIG1hc2sgY29ycmVjdGx5LiBUaGlzIGlzIGFub3RoZXIgcHVyZWx5IGRlZmVuc2l2ZSBhbmQgbm9uLWZ1bmN0aW9uYWwgY2hhbmdlLCBwcmV2ZW50aW5nIHBvdGVudGlhbCBidWlsZCB3YXJuaW5ncyBvciBlcnJvcnMgaW4gc3BlY2lmaWMgY29uZmlndXJhdGlvbnMuXG5cbkFuZCB0aGVuIHdlIGNvbWUgdG8gYG1lbWRlc2NfaXNfem9uZV9kZXZpY2VgLiBKdXN0IGEgcGFzcy1ieS1wb2ludGVyIGNoYW5nZS4gQW5vdGhlciBpbnN0YW5jZSBvZiBvdXIgcmVmYWN0b3JpbmcgdGhlbWUuXG5cbkVzc2VudGlhbGx5LCB0aGUgZW50aXJlIHBhdGNoIGJvaWxzIGRvd24gdG8gdGhpczogKml0J3MgYSByZWZhY3RvcmluZyBlZmZvcnQgd2l0aCBzb21lIGFkZGVkIEtDU0FOIGFzc2VydGlvbnMuKiBUaGUgZnVuZGFtZW50YWwgZXhlY3V0aW9uIGZsb3cgcmVtYWlucyB1bnRvdWNoZWQuIFRoZSBjb3JlIGRhdGEgc3RydWN0dXJlLCBgbWVtZGVzY19mbGFnc190YCwgY29udGFpbnMgYW4gYHVuc2lnbmVkIGxvbmcgZmAuIFNvLCBwYXNzaW5nIGl0IGJ5IHBvaW50ZXIgdmVyc3VzIHZhbHVlIGlzIHJlYWxseSBqdXN0IGFuIEFCSSBkZXRhaWwuIEl0J3MgYWJvdXQgb3B0aW1pemluZyB0aGUgZnVuY3Rpb24gY2FsbHMgYnkgcGFzc2luZyBhIHJlZmVyZW5jZSByYXRoZXIgdGhhbiBhIGZ1bGwgY29weSBvZiB0aGUgZGF0YS4gVGhpcyBjaGFuZ2Ugd2FycmFudHMgYSBjbG9zZSByZXZpZXcgYnV0LCBJJ20gY29uZmlkZW50LCBkb2Vzbid0IHJlcXVpcmUgYW55IGV4dGVuc2l2ZSBmdXp6aW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2MjU1LCJPdXRwdXRUb2tlbnMiOjIzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjY5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA4VDEyOjM2OjMxLjE1NjczOTA4N1oiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MTExMDQ5NjI2LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ0eXBlZGVmIHN0cnVjdC4qbWVtZGVzY19mbGFnc190XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wOFQxMjozNjozNi4yNjc4MDIwOTNaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNzM3NzI4NjE1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgcHJlc2VudGVkIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqTmF2aWdhdGluZyB0aGUgTWVtb3J5IE1hbmFnZW1lbnQgTGFuZHNjYXBlKipcblxuQWxyaWdodCwgc28gSSdtIGRpdmluZyBpbnRvIHRoaXMgbWVtb3J5IG1hbmFnZW1lbnQgaXNzdWUsIGFuZCBteSBmaXJzdCBpbnN0aW5jdCBpcyB0byBnZXQgZ3JhbnVsYXIuIEluc3RlYWQgb2YgYnJvYWQgc2VhcmNoZXMsIGxldCdzIHplcm8gaW4uIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGVzZSBtZW1vcnkgZGVzY3JpcHRvcnMgd29yaywgc28gbGV0J3MgY3V0IHRocm91Z2ggdGhlIG5vaXNlIGFuZCBqdXN0IGdvIHN0cmFpZ2h0IGZvciB0aGUgc3BlY2lmaWMgdHlwZSBkZWZpbml0aW9uOiBgbWVtZGVzY19mbGFnc190YC4gSSdtIGFzc3VtaW5nIHRoYXQgaXQgaXMgdGhhdCBwYXJ0aWN1bGFyIHN0cnVjdHVyZSB3aGljaCBob2xkcyB0aGUga2V5LCBiZWNhdXNlIGl0IGlzIHRoZSBvYnZpb3VzIGRlc2NyaXB0b3Igb2YgZmxhZ3MgYW5kIHNldHRpbmdzLiBObyBzZW5zZSBpbiBiZWF0aW5nIGFyb3VuZCB0aGUgYnVzaC4gSSdsbCBzdGFydCB3aXRoIHRoaXMgc3BlY2lmaWMgaWRlbnRpZmllciBhbmQgc2VlIHdoYXQgaW5zaWdodHMgSSBjYW4gZ2xlYW4uIEl0J3MgYSB0YXJnZXRlZCBhcHByb2FjaDsgaG9wZWZ1bGx5LCB0aGlzIGlzIHRoZSBxdWlja2VzdCBwYXRoIHRvIHVuZGVyc3RhbmRpbmcgdGhlIGZpbmVyIGRldGFpbHMsIHdpdGhvdXQgdGhlIGRpc3RyYWN0aW9uIG9mIHBlcmlwaGVyYWwgaW5mb3JtYXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc1MDksIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wOFQxMjozNjo0MC4wMDU1MzM4NzhaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDQ3MjYwMDIyNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtZW1kZXNjX2ZsYWdzX3RcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9tbS5oPTIyODQ9c3RhdGljIGlubGluZSBpbnQgcGFnZV96b25lX2lkKHN0cnVjdCBwYWdlICpwYWdlKVxcbi0tXFxuaW5jbHVkZS9saW51eC9tbS5oLTIyODktI2lmZGVmIE5PREVfTk9UX0lOX1BBR0VfRkxBR1NcXG5pbmNsdWRlL2xpbnV4L21tLmg6MjI5MDppbnQgbWVtZGVzY19uaWQoY29uc3QgbWVtZGVzY19mbGFnc190ICptZGYpO1xcbmluY2x1ZGUvbGludXgvbW0uaC0yMjkxLSNlbHNlXFxuaW5jbHVkZS9saW51eC9tbS5oLTIyOTItI2lmZGVmIENPTkZJR19OVU1BXFxuaW5jbHVkZS9saW51eC9tbS5oOjIyOTM6c3RhdGljIGlubGluZSBpbnQgbWVtZGVzY19uaWQoY29uc3QgbWVtZGVzY19mbGFnc190ICptZGYpXFxuaW5jbHVkZS9saW51eC9tbS5oLTIyOTQte1xcbi0tXFxuaW5jbHVkZS9saW51eC9tbS5oLTIyOTgtI2Vsc2VcXG5pbmNsdWRlL2xpbnV4L21tLmg6MjI5OTpzdGF0aWMgaW5saW5lIGludCBtZW1kZXNjX25pZChjb25zdCBtZW1kZXNjX2ZsYWdzX3QgKm1kZilcXG5pbmNsdWRlL2xpbnV4L21tLmgtMjMwMC17XFxuLS1cXG5pbmNsdWRlL2xpbnV4L21tLmg9MjU0OT1zdGF0aWMgaW5saW5lIHZvaWQgc2V0X3BhZ2Vfc2VjdGlvbihzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgbG9uZyBzZWN0aW9uKVxcbi0tXFxuaW5jbHVkZS9saW51eC9tbS5oLTI1NTQtXFxuaW5jbHVkZS9saW51eC9tbS5oOjI1NTU6c3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIG1lbWRlc2Nfc2VjdGlvbihjb25zdCBtZW1kZXNjX2ZsYWdzX3QgKm1kZilcXG5pbmNsdWRlL2xpbnV4L21tLmgtMjU1Ni17XFxuLS1cXG5pbmNsdWRlL2xpbnV4L21tLmgtMjU2MC0jZWxzZSAvKiAhU0VDVElPTl9JTl9QQUdFX0ZMQUdTICovXFxuaW5jbHVkZS9saW51eC9tbS5oOjI1NjE6c3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIG1lbWRlc2Nfc2VjdGlvbihjb25zdCBtZW1kZXNjX2ZsYWdzX3QgKm1kZilcXG5pbmNsdWRlL2xpbnV4L21tLmgtMjU2Mi17XFxuLS1cXG5pbmNsdWRlL2xpbnV4L21tX3R5cGVzLmg9Mzk9dHlwZWRlZiBzdHJ1Y3Qge1xcbmluY2x1ZGUvbGludXgvbW1fdHlwZXMuaC00MC1cXHR1bnNpZ25lZCBsb25nIGY7XFxuaW5jbHVkZS9saW51eC9tbV90eXBlcy5oOjQxOn0gbWVtZGVzY19mbGFnc190O1xcbmluY2x1ZGUvbGludXgvbW1fdHlwZXMuaC00Mi1cXG4tLVxcbmluY2x1ZGUvbGludXgvbW1fdHlwZXMuaD04MD1zdHJ1Y3QgcGFnZSB7XFxuaW5jbHVkZS9saW51eC9tbV90eXBlcy5oOjgxOlxcdG1lbWRlc2NfZmxhZ3NfdCBmbGFncztcXHRcXHQvKiBBdG9taWMgZmxhZ3MsIHNvbWUgcG9zc2libHlcXG5pbmNsdWRlL2xpbnV4L21tX3R5cGVzLmgtODItXFx0XFx0XFx0XFx0XFx0ICogdXBkYXRlZCBhc3luY2hyb25vdXNseSAqL1xcbi0tXFxuaW5jbHVkZS9saW51eC9tbV90eXBlcy5oPTQwMj1zdHJ1Y3QgZm9saW8ge1xcbi0tXFxuaW5jbHVkZS9saW51eC9tbV90eXBlcy5oLTQwNi1cXHQvKiBwdWJsaWM6ICovXFxuaW5jbHVkZS9saW51eC9tbV90eXBlcy5oOjQwNzpcXHRcXHRcXHRtZW1kZXNjX2ZsYWdzX3QgZmxhZ3M7XFxuaW5jbHVkZS9saW51eC9tbV90eXBlcy5oLTQwOC1cXHRcXHRcXHR1bmlvbiB7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L21tX3R5cGVzLmg9NTczPXN0cnVjdCBwdGRlc2Mge1xcbmluY2x1ZGUvbGludXgvbW1fdHlwZXMuaDo1NzQ6XFx0bWVtZGVzY19mbGFnc190IHB0X2ZsYWdzO1xcbmluY2x1ZGUvbGludXgvbW1fdHlwZXMuaC01NzUtXFxuLS1cXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oPTEyMjQ9c3RhdGljIGlubGluZSBib29sIHpvbmVfaXNfZW1wdHkoY29uc3Qgc3RydWN0IHpvbmUgKnpvbmUpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oLTEyNzQtXFxuaW5jbHVkZS9saW51eC9tbXpvbmUuaDoxMjc1OnN0YXRpYyBpbmxpbmUgZW51bSB6b25lX3R5cGUgbWVtZGVzY196b25lbnVtKGNvbnN0IG1lbWRlc2NfZmxhZ3NfdCAqZmxhZ3MpXFxuaW5jbHVkZS9saW51eC9tbXpvbmUuaC0xMjc2LXtcXG4tLVxcbmluY2x1ZGUvbGludXgvbW16b25lLmg9MTI4OD1zdGF0aWMgaW5saW5lIGVudW0gem9uZV90eXBlIGZvbGlvX3pvbmVudW0oY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbylcXG4tLVxcbmluY2x1ZGUvbGludXgvbW16b25lLmgtMTI5My0jaWZkZWYgQ09ORklHX1pPTkVfREVWSUNFXFxuaW5jbHVkZS9saW51eC9tbXpvbmUuaDoxMjk0OnN0YXRpYyBpbmxpbmUgYm9vbCBtZW1kZXNjX2lzX3pvbmVfZGV2aWNlKGNvbnN0IG1lbWRlc2NfZmxhZ3NfdCAqbWRmKVxcbmluY2x1ZGUvbGludXgvbW16b25lLmgtMTI5NS17XFxuLS1cXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oPTEzMjM9ZXh0ZXJuIHZvaWQgbWVtbWFwX2luaXRfem9uZV9kZXZpY2Uoc3RydWN0IHpvbmUgKiwgdW5zaWduZWQgbG9uZyxcXG4tLVxcbmluY2x1ZGUvbGludXgvbW16b25lLmgtMTMyNS0jZWxzZVxcbmluY2x1ZGUvbGludXgvbW16b25lLmg6MTMyNjpzdGF0aWMgaW5saW5lIGJvb2wgbWVtZGVzY19pc196b25lX2RldmljZShjb25zdCBtZW1kZXNjX2ZsYWdzX3QgKm1kZilcXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oLTEzMjcte1xcbi0tXFxubW0vc2xhYi5oPTk4PXN0cnVjdCBzbGFiIHtcXG5tbS9zbGFiLmg6OTk6XFx0bWVtZGVzY19mbGFnc190IGZsYWdzO1xcbm1tL3NsYWIuaC0xMDAtXFxuLS1cXG5tbS9zcGFyc2UuYz00Mz1zdGF0aWMgdTE2IHNlY3Rpb25fdG9fbm9kZV90YWJsZVtOUl9NRU1fU0VDVElPTlNdIF9fY2FjaGVsaW5lX2FsaWduZWQ7XFxuLS1cXG5tbS9zcGFyc2UuYy00NS1cXG5tbS9zcGFyc2UuYzo0NjppbnQgbWVtZGVzY19uaWQoY29uc3QgbWVtZGVzY19mbGFnc190ICptZGYpXFxubW0vc3BhcnNlLmMtNDcte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wOFQxMjozNjo0NC40NzgxODc2MDJaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyMDc2NjA0Mjk5MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipQYXRjaCBBbmFseXNpczogYG1lbWRlc2NfZmxhZ3NfdGAgUmVmYWN0b3JpbmcgYW5kIEtDU0FOIEFzc2VydGlvbnMqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgYXNzZXNzbWVudCB3YXMgY29ycmVjdDsgYG1lbWRlc2NfZmxhZ3NfdGAgaXMganVzdCBhIHN0cnVjdCBjb250YWluaW5nIGFuIGB1bnNpZ25lZCBsb25nIGZgLiBUaGlzIHBhdGNoIGlzIHB1cmVseSBhIHJlZmFjdG9yaW5nIGVmZm9ydC4gVGhlIGNoYW5nZXMgaW52b2x2ZSBwYXNzaW5nIHRoZSBgbWVtZGVzY19mbGFnc190YCBzdHJ1Y3QgYnkgcG9pbnRlciBpbnN0ZWFkIG9mIGJ5IHZhbHVlIGFjcm9zcyB2YXJpb3VzIGZ1bmN0aW9ucy4gQ3J1Y2lhbGx5LCB0aGUgZnVuY3Rpb25hbCBiZWhhdmlvciBvZiB0aGUgY29kZSAqc2hvdWxkKiByZW1haW4gaWRlbnRpY2FsLiBJIHNlZSBzb21lIEtDU0FOIGFzc2VydGlvbnMgYmVpbmcgYWRkZWQvZml4ZWQsIHdoaWNoIGlzIGdyZWF0IGZvciBpbXByb3ZpbmcgY29kZSBjb3JyZWN0bmVzcyBhbmQgZGV0ZWN0aW5nIHBvdGVudGlhbCByYWNlcywgYnV0IHRoZXNlIGFzc2VydGlvbnMgd29uJ3QgaW50cm9kdWNlIGFueSBuZXcgZXhlY3V0aW9uIHBhdGhzIGZvciBmdXp6aW5nIHRvIGV4cGxvcmUuXG5cbkknbSBnb2luZyB0aHJvdWdoIHRoZSBkaWZmIGFnYWluIHRvIGJlIGFic29sdXRlbHkgc3VyZS5cblxuVGhlIGZpcnN0IGNoYW5nZSBpbiBgaW5jbHVkZS9hc20tZ2VuZXJpYy9tZW1vcnlfbW9kZWwuaGAgaXMgc3RyYWlnaHRmb3J3YXJkOyB0aGUgY2FsbCB0byBgbWVtZGVzY19zZWN0aW9uYCBub3cgcGFzc2VzIGBfX3BnLVx1MDAzZWZsYWdzYCBhcyBhIHBvaW50ZXIuIE5vIGNoYW5nZSBpbiBjb3JlIGxvZ2ljIHRoZXJlLlxuXG5Nb3Zpbmcgb24gdG8gYGluY2x1ZGUvbGludXgvbW0uaGAsIHRoZSBkZWZpbml0aW9uIG9mIGBtZW1kZXNjX25pZGAgaXMgdXBkYXRlZCB0byB0YWtlIGEgcG9pbnRlciwgYW5kIGFuIGBBU1NFUlRfRVhDTFVTSVZFX0JJVFNgIGlzIGFkZGVkIHdpdGhpbiBhIGAjaWZkZWYgQ09ORklHX05VTUFgIGJsb2NrLiBUaGlzIGxvb2tzIGZpbmU7IGV2ZW4gaWYgYENPTkZJR19OVU1BYCBpcyBub3Qgc2V0LCB0aGUgaW5saW5lIGZ1bmN0aW9uIHdpbGwgcmV0dXJuIDAgd2hpY2ggaXMgbG9naWNhbGx5IHNvdW5kIGdpdmVuIHRoZSBleGlzdGluZyBsb2dpYy4gQWxsIGNhbGwgc2l0ZXMgb2YgYG1lbWRlc2NfbmlkYCBhcmUgYWRqdXN0ZWQgdG8gbWF0Y2ggdGhlIG5ldyBzaWduYXR1cmUuIFRoZSBzYW1lIHBhdHRlcm4gaXMgcmVwZWF0ZWQgZm9yIGBtZW1kZXNjX3NlY3Rpb25gIGFuZCBgbWVtZGVzY196b25lbnVtYC4gVGhlIGFkZGl0aW9uIG9mIGBBU1NFUlRfRVhDTFVTSVZFX0JJVFNgIGlzIGdvb2QsIGFkZGluZyBLQ1NBTiBjaGVja3MsIGJ1dCB3b24ndCBpbXBhY3QgaG93IHRoZSBjb2RlIHJ1bnMuXG5cbkluIGBpbmNsdWRlL2xpbnV4L21tX2lubGluZS5oYCwgdGhlIGNhbGwgc2l0ZXMgb2YgYG1lbWRlc2Nfc2VjdGlvbmAgYXJlIHVwZGF0ZWQgdG8gcGFzcyBhIHBvaW50ZXIsIGFzIGV4cGVjdGVkLlxuXG5gaW5jbHVkZS9saW51eC9tbXpvbmUuaGAgc2VlcyBzaW1pbGFyIG1vZGlmaWNhdGlvbnMgZm9yIGBtZW1kZXNjX3pvbmVudW1gLiBUaGUgc2lnbmF0dXJlIGNoYW5nZSBpcyBhZ2FpbiB0aGUgcGFzcy1ieS1wb2ludGVyIHJlZmFjdG9yaW5nIGFuZCBLQ1NBTiBhc3NlcnRpb25zLiBUaGUgY2FsbHMgdG8gdGhlIGlubGluZSBmdW5jdGlvbiBhcmUgYWxzbyB1cGRhdGVkLiBUaGUgYG1lbWRlc2NfaXNfem9uZV9kZXZpY2VgIGZ1bmN0aW9uIHNlZXMgdGhlIHNhbWUgcGF0dGVybiBhcyB3ZWxsLlxuXG5JbiBgbW0vcGFnZV9hbGxvYy5jYCBhbmQgYG1tL3NsYWIuaGAgdGhlIHVwZGF0ZXMgYXJlIHRoZSBzYW1lIC0gYWxsIGFib3V0IHN3aXRjaGluZyB0byBwYXNzLWJ5LXBvaW50ZXIuICBBbGwgZnVuY3Rpb24gc2lnbmF0dXJlcyBhcmUgdXBkYXRlZC5cblxuRmluYWxseSwgaW4gYG1tL3NwYXJzZS5jYCwgdGhlIGRlZmluaXRpb24gb2YgYG1lbWRlc2NfbmlkYCBpcyBhZGp1c3RlZCB0byBtYXRjaCB0aGUgdXBkYXRlZCBzaWduYXR1cmUsIGtlZXBpbmcgdGhpbmdzIGNvbnNpc3RlbnQuXG5cbkdpdmVuIGFsbCB0aGlzLCBteSBjb25jbHVzaW9uIHJlbWFpbnMgZmlybS4gVGhpcyBwYXRjaCBpcyBwdXJlbHkgYSByZWZhY3RvcmluZyBhbmQgS0NTQU4gYXNzZXJ0aW9uIGFkZGl0aW9ucy4gTm8gZXhlY3V0aW9uIGZsb3cgaXMgY2hhbmdlZCwgc28gdGhlcmUncyBub3RoaW5nIG5ldyBoZXJlIHRoYXQgZnV6emluZyB3b3VsZCBmaW5kLiBJdCdzIHNhZmUgdG8gc2F5IHRoYXQgYFdvcnRoRnV6emluZ2Agc2hvdWxkIGJlIGBmYWxzZWAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg4NzQsIk91dHB1dFRva2VucyI6ODUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNTIzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA4VDEyOjM3OjA1LjI0NDIzMzc2MloiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3OTg5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGlzIGEgcHVyZSByZWZhY3RvcmluZyB0aGF0IGNoYW5nZXMgYG1lbWRlc2NfZmxhZ3NfdGAgdG8gYmUgcGFzc2VkIGJ5IHBvaW50ZXIgaW5zdGVhZCBvZiBieSB2YWx1ZSwgYW5kIGFkZHMvZml4ZXMgS0NTQU4gYXNzZXJ0aW9ucyAoYEFTU0VSVF9FWENMVVNJVkVfQklUU2ApLiBJdCBkb2VzIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgdGhlIGV4ZWN1dGlvbiBmbG93IG9mIHRoZSBrZXJuZWwuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpcyBhIHB1cmUgcmVmYWN0b3JpbmcgdGhhdCBjaGFuZ2VzIGBtZW1kZXNjX2ZsYWdzX3RgIHRvIGJlIHBhc3NlZCBieSBwb2ludGVyIGluc3RlYWQgb2YgYnkgdmFsdWUsIGFuZCBhZGRzL2ZpeGVzIEtDU0FOIGFzc2VydGlvbnMgKGBBU1NFUlRfRVhDTFVTSVZFX0JJVFNgKS4gSXQgZG9lcyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIHRoZSBleGVjdXRpb24gZmxvdyBvZiB0aGUga2VybmVsLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowg82g7[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-08 12:23:02 +0000 UTC FinishedAt: 2026-07-08 12:37:06 +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+CgkJCTx0ZD4yMDI2LzA3LzA4IDEyOjM2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGlzIGEgcHVyZSByZWZhY3RvcmluZyB0aGF0IGNoYW5nZXMgYG1lbWRlc2NfZmxhZ3NfdGAgdG8gYmUgcGFzc2VkIGJ5IHBvaW50ZXIgaW5zdGVhZCBvZiBieSB2YWx1ZSwgYW5kIGFkZHMvZml4ZXMgS0NTQU4gYXNzZXJ0aW9ucyAoYEFTU0VSVF9FWENMVVNJVkVfQklUU2ApLiBJdCBkb2VzIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgdGhlIGV4ZWN1dGlvbiBmbG93IG9mIHRoZSBrZXJuZWwuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA4IDEyOjM2PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgNWFkMWY5NTNkZTJjYjk3ZTc0ZWZkZDI3ZDVlZmViYzY4NWVjMzQwMlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgSnVsIDggMTI6MzY6MDUgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tZ2VuZXJpYy9tZW1vcnlfbW9kZWwuaCBiL2luY2x1ZGUvYXNtLWdlbmVyaWMvbWVtb3J5X21vZGVsLmhcbmluZGV4IGVmYTY2MTBhY2JjNzk3Li5mODQwNGJjNzc3M2MyYiAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvYXNtLWdlbmVyaWMvbWVtb3J5X21vZGVsLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvYXNtLWdlbmVyaWMvbWVtb3J5X21vZGVsLmhcbkBAIC01Myw3ICYjNDM7NTMsNyBAQCBzdGF0aWMgaW5saW5lIGludCBwZm5fdmFsaWQodW5zaWduZWQgbG9uZyBwZm4pXG4gICovXG4gI2RlZmluZSBfX3BhZ2VfdG9fcGZuKHBnKVx0XHRcdFx0XHRcXFxuICh7XHRjb25zdCBzdHJ1Y3QgcGFnZSAqX19wZyA9IChwZyk7XHRcdFx0XHRcXFxuLVx0aW50IF9fc2VjID0gbWVtZGVzY19zZWN0aW9uKF9fcGctXHUwMDNlZmxhZ3MpO1x0XHRcXFxuJiM0MztcdGludCBfX3NlYyA9IG1lbWRlc2Nfc2VjdGlvbihcdTAwMjZfX3BnLVx1MDAzZWZsYWdzKTtcdFx0XFxcbiBcdCh1bnNpZ25lZCBsb25nKShfX3BnIC0gX19zZWN0aW9uX21lbV9tYXBfYWRkcihfX25yX3RvX3NlY3Rpb24oX19zZWMpKSk7XHRcXFxuIH0pXG4gXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tbS5oIGIvaW5jbHVkZS9saW51eC9tbS5oXG5pbmRleCA0ODVkZjljMmRiZGRiMy4uMWVmOWIwYmQ3ZmQzMzYgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L21tLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvbW0uaFxuQEAgLTM3LDYgJiM0MzszNyw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvYml0bWFwLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9iaXRvcHMuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2lvbW11LWRlYnVnLXBhZ2VhbGxvYy5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2tjc2FuLWNoZWNrcy5oXHUwMDNlXG4gXG4gc3RydWN0IG1lbXBvbGljeTtcbiBzdHJ1Y3QgYW5vbl92bWE7XG5AQCAtMjI4NiwyMiAmIzQzOzIyODcsMzIgQEAgc3RhdGljIGlubGluZSBpbnQgcGFnZV96b25lX2lkKHN0cnVjdCBwYWdlICpwYWdlKVxuIH1cbiBcbiAjaWZkZWYgTk9ERV9OT1RfSU5fUEFHRV9GTEFHU1xuLWludCBtZW1kZXNjX25pZChtZW1kZXNjX2ZsYWdzX3QgbWRmKTtcbiYjNDM7aW50IG1lbWRlc2NfbmlkKGNvbnN0IG1lbWRlc2NfZmxhZ3NfdCAqbWRmKTtcbiAjZWxzZVxuLXN0YXRpYyBpbmxpbmUgaW50IG1lbWRlc2NfbmlkKG1lbWRlc2NfZmxhZ3NfdCBtZGYpXG4mIzQzOyNpZmRlZiBDT05GSUdfTlVNQVxuJiM0MztzdGF0aWMgaW5saW5lIGludCBtZW1kZXNjX25pZChjb25zdCBtZW1kZXNjX2ZsYWdzX3QgKm1kZilcbiB7XG4tXHRyZXR1cm4gKG1kZi5mIFx1MDAzZVx1MDAzZSBOT0RFU19QR1NISUZUKSBcdTAwMjYgTk9ERVNfTUFTSztcbiYjNDM7XHRBU1NFUlRfRVhDTFVTSVZFX0JJVFMobWRmLVx1MDAzZWYsIE5PREVTX01BU0sgXHUwMDNjXHUwMDNjIE5PREVTX1BHU0hJRlQpO1xuJiM0MztcdHJldHVybiAobWRmLVx1MDAzZWYgXHUwMDNlXHUwMDNlIE5PREVTX1BHU0hJRlQpIFx1MDAyNiBOT0RFU19NQVNLO1xuIH1cbiYjNDM7I2Vsc2VcbiYjNDM7c3RhdGljIGlubGluZSBpbnQgbWVtZGVzY19uaWQoY29uc3QgbWVtZGVzY19mbGFnc190ICptZGYpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MzsjZW5kaWZcbiAjZW5kaWZcbiBcbiBzdGF0aWMgaW5saW5lIGludCBwYWdlX3RvX25pZChjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSlcbiB7XG4tXHRyZXR1cm4gbWVtZGVzY19uaWQoUEZfUE9JU09ORURfQ0hFQ0socGFnZSktXHUwMDNlZmxhZ3MpO1xuJiM0MztcdGNvbnN0IHN0cnVjdCBwYWdlICpwID0gUEZfUE9JU09ORURfQ0hFQ0socGFnZSk7XG4mIzQzO1xuJiM0MztcdHJldHVybiBtZW1kZXNjX25pZChcdTAwMjZwLVx1MDAzZWZsYWdzKTtcbiB9XG4gXG4gc3RhdGljIGlubGluZSBpbnQgZm9saW9fbmlkKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8pXG4ge1xuLVx0cmV0dXJuIG1lbWRlc2NfbmlkKGZvbGlvLVx1MDAzZWZsYWdzKTtcbiYjNDM7XHRyZXR1cm4gbWVtZGVzY19uaWQoXHUwMDI2Zm9saW8tXHUwMDNlZmxhZ3MpO1xuIH1cbiBcbiAjaWZkZWYgQ09ORklHX05VTUFfQkFMQU5DSU5HXG5AQCAtMjU0MSwxMiAmIzQzOzI1NTIsMTMgQEAgc3RhdGljIGlubGluZSB2b2lkIHNldF9wYWdlX3NlY3Rpb24oc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGxvbmcgc2VjdGlvbilcbiBcdHBhZ2UtXHUwMDNlZmxhZ3MuZiB8PSAoc2VjdGlvbiBcdTAwMjYgU0VDVElPTlNfTUFTSykgXHUwMDNjXHUwMDNjIFNFQ1RJT05TX1BHU0hJRlQ7XG4gfVxuIFxuLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBtZW1kZXNjX3NlY3Rpb24obWVtZGVzY19mbGFnc190IG1kZilcbiYjNDM7c3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIG1lbWRlc2Nfc2VjdGlvbihjb25zdCBtZW1kZXNjX2ZsYWdzX3QgKm1kZilcbiB7XG4tXHRyZXR1cm4gKG1kZi5mIFx1MDAzZVx1MDAzZSBTRUNUSU9OU19QR1NISUZUKSBcdTAwMjYgU0VDVElPTlNfTUFTSztcbiYjNDM7XHRBU1NFUlRfRVhDTFVTSVZFX0JJVFMobWRmLVx1MDAzZWYsIFNFQ1RJT05TX01BU0sgXHUwMDNjXHUwMDNjIFNFQ1RJT05TX1BHU0hJRlQpO1xuJiM0MztcdHJldHVybiAobWRmLVx1MDAzZWYgXHUwMDNlXHUwMDNlIFNFQ1RJT05TX1BHU0hJRlQpIFx1MDAyNiBTRUNUSU9OU19NQVNLO1xuIH1cbiAjZWxzZSAvKiAhU0VDVElPTl9JTl9QQUdFX0ZMQUdTICovXG4tc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIG1lbWRlc2Nfc2VjdGlvbihtZW1kZXNjX2ZsYWdzX3QgbWRmKVxuJiM0MztzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgbWVtZGVzY19zZWN0aW9uKGNvbnN0IG1lbWRlc2NfZmxhZ3NfdCAqbWRmKVxuIHtcbiBcdHJldHVybiAwO1xuIH1cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21tX2lubGluZS5oIGIvaW5jbHVkZS9saW51eC9tbV9pbmxpbmUuaFxuaW5kZXggYTg0MzBhN2FlMDU0NDcuLmVmY2RkYjk5MjVhZGQ3IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9tbV9pbmxpbmUuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9tbV9pbmxpbmUuaFxuQEAgLTY1MCw3ICYjNDM7NjUwLDcgQEAgc3RhdGljIGlubGluZSBib29sIHZtYV9oYXNfcmVjZW5jeShjb25zdCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcbiBzdGF0aWMgaW5saW5lIHNpemVfdCBudW1fcGFnZXNfY29udGlndW91cyhzdHJ1Y3QgcGFnZSAqKnBhZ2VzLCBzaXplX3QgbnJfcGFnZXMpXG4ge1xuIFx0c3RydWN0IHBhZ2UgKmN1cl9wYWdlID0gcGFnZXNbMF07XG4tXHR1bnNpZ25lZCBsb25nIHNlY3Rpb24gPSBtZW1kZXNjX3NlY3Rpb24oY3VyX3BhZ2UtXHUwMDNlZmxhZ3MpO1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgc2VjdGlvbiA9IG1lbWRlc2Nfc2VjdGlvbihcdTAwMjZjdXJfcGFnZS1cdTAwM2VmbGFncyk7XG4gXHRzaXplX3QgaTtcbiBcbiBcdGZvciAoaSA9IDE7IGkgXHUwMDNjIG5yX3BhZ2VzOyBpJiM0MzsmIzQzOykge1xuQEAgLTY2MCw3ICYjNDM7NjYwLDcgQEAgc3RhdGljIGlubGluZSBzaXplX3QgbnVtX3BhZ2VzX2NvbnRpZ3VvdXMoc3RydWN0IHBhZ2UgKipwYWdlcywgc2l6ZV90IG5yX3BhZ2VzKVxuIFx0XHQgKiBJbiB1bnByb2JsZW1hdGljIGtlcm5lbCBjb25maWdzLCBwYWdlX3RvX3NlY3Rpb24oKSA9PSAwIGFuZFxuIFx0XHQgKiB0aGUgd2hvbGUgY2hlY2sgd2lsbCBnZXQgb3B0aW1pemVkIG91dC5cbiBcdFx0ICovXG4tXHRcdGlmIChtZW1kZXNjX3NlY3Rpb24oY3VyX3BhZ2UtXHUwMDNlZmxhZ3MpICE9IHNlY3Rpb24pXG4mIzQzO1x0XHRpZiAobWVtZGVzY19zZWN0aW9uKFx1MDAyNmN1cl9wYWdlLVx1MDAzZWZsYWdzKSAhPSBzZWN0aW9uKVxuIFx0XHRcdGJyZWFrO1xuIFx0fVxuIFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbW16b25lLmggYi9pbmNsdWRlL2xpbnV4L21tem9uZS5oXG5pbmRleCBjYTI3MTIxODcxNDc1Yy4uZTYwZGFkNTQ2Y2E2OGQgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L21tem9uZS5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L21tem9uZS5oXG5AQCAtMTI3MiwzMSAmIzQzOzEyNzIsMzMgQEAgc3RhdGljIGlubGluZSBib29sIHpvbmVfaXNfZW1wdHkoY29uc3Qgc3RydWN0IHpvbmUgKnpvbmUpXG4gI2RlZmluZSBLQVNBTl9UQUdfTUFTS1x0XHQoKDFVTCBcdTAwM2NcdTAwM2MgS0FTQU5fVEFHX1dJRFRIKSAtIDEpXG4gI2RlZmluZSBaT05FSURfTUFTS1x0XHQoKDFVTCBcdTAwM2NcdTAwM2MgWk9ORUlEX1NISUZUKSAtIDEpXG4gXG4tc3RhdGljIGlubGluZSBlbnVtIHpvbmVfdHlwZSBtZW1kZXNjX3pvbmVudW0obWVtZGVzY19mbGFnc190IGZsYWdzKVxuJiM0MztzdGF0aWMgaW5saW5lIGVudW0gem9uZV90eXBlIG1lbWRlc2Nfem9uZW51bShjb25zdCBtZW1kZXNjX2ZsYWdzX3QgKmZsYWdzKVxuIHtcbi1cdEFTU0VSVF9FWENMVVNJVkVfQklUUyhmbGFncy5mLCBaT05FU19NQVNLIFx1MDAzY1x1MDAzYyBaT05FU19QR1NISUZUKTtcbi1cdHJldHVybiAoZmxhZ3MuZiBcdTAwM2VcdTAwM2UgWk9ORVNfUEdTSElGVCkgXHUwMDI2IFpPTkVTX01BU0s7XG4mIzQzOyNpZiBaT05FU19XSURUSCAhPSAwXG4mIzQzO1x0QVNTRVJUX0VYQ0xVU0lWRV9CSVRTKGZsYWdzLVx1MDAzZWYsIFpPTkVTX01BU0sgXHUwMDNjXHUwMDNjIFpPTkVTX1BHU0hJRlQpO1xuJiM0MzsjZW5kaWZcbiYjNDM7XHRyZXR1cm4gKGZsYWdzLVx1MDAzZWYgXHUwMDNlXHUwMDNlIFpPTkVTX1BHU0hJRlQpIFx1MDAyNiBaT05FU19NQVNLO1xuIH1cbiBcbiBzdGF0aWMgaW5saW5lIGVudW0gem9uZV90eXBlIHBhZ2Vfem9uZW51bShjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSlcbiB7XG4tXHRyZXR1cm4gbWVtZGVzY196b25lbnVtKHBhZ2UtXHUwMDNlZmxhZ3MpO1xuJiM0MztcdHJldHVybiBtZW1kZXNjX3pvbmVudW0oXHUwMDI2cGFnZS1cdTAwM2VmbGFncyk7XG4gfVxuIFxuIHN0YXRpYyBpbmxpbmUgZW51bSB6b25lX3R5cGUgZm9saW9fem9uZW51bShjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIHtcbi1cdHJldHVybiBtZW1kZXNjX3pvbmVudW0oZm9saW8tXHUwMDNlZmxhZ3MpO1xuJiM0MztcdHJldHVybiBtZW1kZXNjX3pvbmVudW0oXHUwMDI2Zm9saW8tXHUwMDNlZmxhZ3MpO1xuIH1cbiBcbiAjaWZkZWYgQ09ORklHX1pPTkVfREVWSUNFXG4tc3RhdGljIGlubGluZSBib29sIG1lbWRlc2NfaXNfem9uZV9kZXZpY2UobWVtZGVzY19mbGFnc190IG1kZilcbiYjNDM7c3RhdGljIGlubGluZSBib29sIG1lbWRlc2NfaXNfem9uZV9kZXZpY2UoY29uc3QgbWVtZGVzY19mbGFnc190ICptZGYpXG4ge1xuIFx0cmV0dXJuIG1lbWRlc2Nfem9uZW51bShtZGYpID09IFpPTkVfREVWSUNFO1xuIH1cbiBcbiBzdGF0aWMgaW5saW5lIHN0cnVjdCBkZXZfcGFnZW1hcCAqcGFnZV9wZ21hcChjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSlcbiB7XG4tXHRWTV9XQVJOX09OX09OQ0VfUEFHRSghbWVtZGVzY19pc196b25lX2RldmljZShwYWdlLVx1MDAzZWZsYWdzKSwgcGFnZSk7XG4mIzQzO1x0Vk1fV0FSTl9PTl9PTkNFX1BBR0UoIW1lbWRlc2NfaXNfem9uZV9kZXZpY2UoXHUwMDI2cGFnZS1cdTAwM2VmbGFncyksIHBhZ2UpO1xuIFx0cmV0dXJuIHBhZ2VfZm9saW8ocGFnZSktXHUwMDNlcGdtYXA7XG4gfVxuIFxuQEAgLTEzMTEsOSAmIzQzOzEzMTMsOSBAQCBzdGF0aWMgaW5saW5lIHN0cnVjdCBkZXZfcGFnZW1hcCAqcGFnZV9wZ21hcChjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSlcbiBzdGF0aWMgaW5saW5lIGJvb2wgem9uZV9kZXZpY2VfcGFnZXNfaGF2ZV9zYW1lX3BnbWFwKGNvbnN0IHN0cnVjdCBwYWdlICphLFxuIFx0XHRcdFx0XHRcdCAgICAgY29uc3Qgc3RydWN0IHBhZ2UgKmIpXG4ge1xuLVx0aWYgKG1lbWRlc2NfaXNfem9uZV9kZXZpY2UoYS1cdTAwM2VmbGFncykgIT0gbWVtZGVzY19pc196b25lX2RldmljZShiLVx1MDAzZWZsYWdzKSlcbiYjNDM7XHRpZiAobWVtZGVzY19pc196b25lX2RldmljZShcdTAwMjZhLVx1MDAzZWZsYWdzKSAhPSBtZW1kZXNjX2lzX3pvbmVfZGV2aWNlKFx1MDAyNmItXHUwMDNlZmxhZ3MpKVxuIFx0XHRyZXR1cm4gZmFsc2U7XG4tXHRpZiAoIW1lbWRlc2NfaXNfem9uZV9kZXZpY2UoYS1cdTAwM2VmbGFncykpXG4mIzQzO1x0aWYgKCFtZW1kZXNjX2lzX3pvbmVfZGV2aWNlKFx1MDAyNmEtXHUwMDNlZmxhZ3MpKVxuIFx0XHRyZXR1cm4gdHJ1ZTtcbiBcdHJldHVybiBwYWdlX3BnbWFwKGEpID09IHBhZ2VfcGdtYXAoYik7XG4gfVxuQEAgLTEzMjEsNyAmIzQzOzEzMjMsNyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgem9uZV9kZXZpY2VfcGFnZXNfaGF2ZV9zYW1lX3BnbWFwKGNvbnN0IHN0cnVjdCBwYWdlICphLFxuIGV4dGVybiB2b2lkIG1lbW1hcF9pbml0X3pvbmVfZGV2aWNlKHN0cnVjdCB6b25lICosIHVuc2lnbmVkIGxvbmcsXG4gXHRcdFx0XHQgICAgdW5zaWduZWQgbG9uZywgc3RydWN0IGRldl9wYWdlbWFwICopO1xuICNlbHNlXG4tc3RhdGljIGlubGluZSBib29sIG1lbWRlc2NfaXNfem9uZV9kZXZpY2UobWVtZGVzY19mbGFnc190IG1kZilcbiYjNDM7c3RhdGljIGlubGluZSBib29sIG1lbWRlc2NfaXNfem9uZV9kZXZpY2UoY29uc3QgbWVtZGVzY19mbGFnc190ICptZGYpXG4ge1xuIFx0cmV0dXJuIGZhbHNlO1xuIH1cbkBAIC0xMzM4LDEyICYjNDM7MTM0MCwxMiBAQCBzdGF0aWMgaW5saW5lIHN0cnVjdCBkZXZfcGFnZW1hcCAqcGFnZV9wZ21hcChjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSlcbiBcbiBzdGF0aWMgaW5saW5lIGJvb2wgaXNfem9uZV9kZXZpY2VfcGFnZShjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSlcbiB7XG4tXHRyZXR1cm4gbWVtZGVzY19pc196b25lX2RldmljZShwYWdlLVx1MDAzZWZsYWdzKTtcbiYjNDM7XHRyZXR1cm4gbWVtZGVzY19pc196b25lX2RldmljZShcdTAwMjZwYWdlLVx1MDAzZWZsYWdzKTtcbiB9XG4gXG4gc3RhdGljIGlubGluZSBib29sIGZvbGlvX2lzX3pvbmVfZGV2aWNlKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8pXG4ge1xuLVx0cmV0dXJuIG1lbWRlc2NfaXNfem9uZV9kZXZpY2UoZm9saW8tXHUwMDNlZmxhZ3MpO1xuJiM0MztcdHJldHVybiBtZW1kZXNjX2lzX3pvbmVfZGV2aWNlKFx1MDAyNmZvbGlvLVx1MDAzZWZsYWdzKTtcbiB9XG4gXG4gc3RhdGljIGlubGluZSBib29sIGlzX3pvbmVfbW92YWJsZV9wYWdlKGNvbnN0IHN0cnVjdCBwYWdlICpwYWdlKVxuZGlmZiAtLWdpdCBhL21tL3BhZ2VfYWxsb2MuYyBiL21tL3BhZ2VfYWxsb2MuY1xuaW5kZXggZWU5MDJhNDY4YzJmNWIuLjAyMGE5N2NhMDE4ZTk5IDEwMDY0NFxuLS0tIGEvbW0vcGFnZV9hbGxvYy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9wYWdlX2FsbG9jLmNcbkBAIC02OTA0LDE1ICYjNDM7NjkwNCwxNSBAQCBzdGF0aWMgdm9pZCBfX2ZyZWVfY29udGlnX3JhbmdlX2NvbW1vbih1bnNpZ25lZCBsb25nIHBmbiwgdW5zaWduZWQgbG9uZyBucl9wYWdlc1xuIFx0XHRcdGNvbnRpbnVlO1xuIFx0XHR9XG4gXG4tXHRcdGlmIChzdGFydCBcdTAwMjZcdTAwMjYgbWVtZGVzY19zZWN0aW9uKHBhZ2UtXHUwMDNlZmxhZ3MpICE9IHN0YXJ0X3NlYykge1xuJiM0MztcdFx0aWYgKHN0YXJ0IFx1MDAyNlx1MDAyNiBtZW1kZXNjX3NlY3Rpb24oXHUwMDI2cGFnZS1cdTAwM2VmbGFncykgIT0gc3RhcnRfc2VjKSB7XG4gXHRcdFx0ZnJlZV9wcmVwYXJlZF9jb250aWdfcmFuZ2Uoc3RhcnQsIGkgLSBucl9zdGFydCk7XG4gXHRcdFx0c3RhcnQgPSBwYWdlO1xuIFx0XHRcdG5yX3N0YXJ0ID0gaTtcbi1cdFx0XHRzdGFydF9zZWMgPSBtZW1kZXNjX3NlY3Rpb24ocGFnZS1cdTAwM2VmbGFncyk7XG4mIzQzO1x0XHRcdHN0YXJ0X3NlYyA9IG1lbWRlc2Nfc2VjdGlvbihcdTAwMjZwYWdlLVx1MDAzZWZsYWdzKTtcbiBcdFx0fSBlbHNlIGlmICghc3RhcnQpIHtcbiBcdFx0XHRzdGFydCA9IHBhZ2U7XG4gXHRcdFx0bnJfc3RhcnQgPSBpO1xuLVx0XHRcdHN0YXJ0X3NlYyA9IG1lbWRlc2Nfc2VjdGlvbihwYWdlLVx1MDAzZWZsYWdzKTtcbiYjNDM7XHRcdFx0c3RhcnRfc2VjID0gbWVtZGVzY19zZWN0aW9uKFx1MDAyNnBhZ2UtXHUwMDNlZmxhZ3MpO1xuIFx0XHR9XG4gXHR9XG4gXG5kaWZmIC0tZ2l0IGEvbW0vc2xhYi5oIGIvbW0vc2xhYi5oXG5pbmRleCAyODFhNjUyMzM3OTVkNi4uOWRlZDMxOTQ5NWEwNzAgMTAwNjQ0XG4tLS0gYS9tbS9zbGFiLmhcbiYjNDM7JiM0MzsmIzQzOyBiL21tL3NsYWIuaFxuQEAgLTE3OSw3ICYjNDM7MTc5LDcgQEAgc3RhdGljIGlubGluZSB2b2lkICpzbGFiX2FkZHJlc3MoY29uc3Qgc3RydWN0IHNsYWIgKnNsYWIpXG4gXG4gc3RhdGljIGlubGluZSBpbnQgc2xhYl9uaWQoY29uc3Qgc3RydWN0IHNsYWIgKnNsYWIpXG4ge1xuLVx0cmV0dXJuIG1lbWRlc2NfbmlkKHNsYWItXHUwMDNlZmxhZ3MpO1xuJiM0MztcdHJldHVybiBtZW1kZXNjX25pZChcdTAwMjZzbGFiLVx1MDAzZWZsYWdzKTtcbiB9XG4gXG4gc3RhdGljIGlubGluZSBwZ19kYXRhX3QgKnNsYWJfcGdkYXQoY29uc3Qgc3RydWN0IHNsYWIgKnNsYWIpXG5kaWZmIC0tZ2l0IGEvbW0vc3BhcnNlLmMgYi9tbS9zcGFyc2UuY1xuaW5kZXggMTZhYzZkZjNjODlmYTIuLjhlMzg0Nzc2NDUxMzE5IDEwMDY0NFxuLS0tIGEvbW0vc3BhcnNlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL3NwYXJzZS5jXG5AQCAtNDMsNyAmIzQzOzQzLDcgQEAgc3RhdGljIHU4IHNlY3Rpb25fdG9fbm9kZV90YWJsZVtOUl9NRU1fU0VDVElPTlNdIF9fY2FjaGVsaW5lX2FsaWduZWQ7XG4gc3RhdGljIHUxNiBzZWN0aW9uX3RvX25vZGVfdGFibGVbTlJfTUVNX1NFQ1RJT05TXSBfX2NhY2hlbGluZV9hbGlnbmVkO1xuICNlbmRpZlxuIFxuLWludCBtZW1kZXNjX25pZChtZW1kZXNjX2ZsYWdzX3QgbWRmKVxuJiM0MztpbnQgbWVtZGVzY19uaWQoY29uc3QgbWVtZGVzY19mbGFnc190ICptZGYpXG4ge1xuIFx0cmV0dXJuIHNlY3Rpb25fdG9fbm9kZV90YWJsZVttZW1kZXNjX3NlY3Rpb24obWRmKV07XG4gfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA4IDEyOjM2PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGlzIGEgcHVyZSByZWZhY3RvcmluZyB0aGF0IGNoYW5nZXMgYG1lbWRlc2NfZmxhZ3NfdGAgdG8gYmUgcGFzc2VkIGJ5IHBvaW50ZXIgaW5zdGVhZCBvZiBieSB2YWx1ZSwgYW5kIGFkZHMvZml4ZXMgS0NTQU4gYXNzZXJ0aW9ucyAoYEFTU0VSVF9FWENMVVNJVkVfQklUU2ApLiBJdCBkb2VzIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgdGhlIGV4ZWN1dGlvbiBmbG93IG9mIHRoZSBrZXJuZWwuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdAogICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksCiAgIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA1YWQxZjk1M2RlMmNiOTdlNzRlZmRkMjdkNWVmZWJjNjg1ZWMzNDAyCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFdlZCBKdWwgOCAxMjozNjowNSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWdlbmVyaWMvbWVtb3J5X21vZGVsLmggYi9pbmNsdWRlL2FzbS1nZW5lcmljL21lbW9yeV9tb2RlbC5oCmluZGV4IGVmYTY2MTBhY2JjNzk3Li5mODQwNGJjNzc3M2MyYiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tZ2VuZXJpYy9tZW1vcnlfbW9kZWwuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2FzbS1nZW5lcmljL21lbW9yeV9tb2RlbC5oCkBAIC01Myw3ICYjNDM7NTMsNyBAQCBzdGF0aWMgaW5saW5lIGludCBwZm5fdmFsaWQodW5zaWduZWQgbG9uZyBwZm4pCiAgKi8KICNkZWZpbmUgX19wYWdlX3RvX3BmbihwZykJCQkJCVwKICh7CWNvbnN0IHN0cnVjdCBwYWdlICpfX3BnID0gKHBnKTsJCQkJXAotCWludCBfX3NlYyA9IG1lbWRlc2Nfc2VjdGlvbihfX3BnLSZndDtmbGFncyk7CQlcCiYjNDM7CWludCBfX3NlYyA9IG1lbWRlc2Nfc2VjdGlvbigmYW1wO19fcGctJmd0O2ZsYWdzKTsJCVwKIAkodW5zaWduZWQgbG9uZykoX19wZyAtIF9fc2VjdGlvbl9tZW1fbWFwX2FkZHIoX19ucl90b19zZWN0aW9uKF9fc2VjKSkpOwlcCiB9KQogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21tLmggYi9pbmNsdWRlL2xpbnV4L21tLmgKaW5kZXggNDg1ZGY5YzJkYmRkYjMuLjFlZjliMGJkN2ZkMzM2IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L21tLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9tbS5oCkBAIC0zNyw2ICYjNDM7MzcsNyBAQAogI2luY2x1ZGUgJmx0O2xpbnV4L2JpdG1hcC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2JpdG9wcy5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2lvbW11LWRlYnVnLXBhZ2VhbGxvYy5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9rY3Nhbi1jaGVja3MuaCZndDsKIAogc3RydWN0IG1lbXBvbGljeTsKIHN0cnVjdCBhbm9uX3ZtYTsKQEAgLTIyODYsMjIgJiM0MzsyMjg3LDMyIEBAIHN0YXRpYyBpbmxpbmUgaW50IHBhZ2Vfem9uZV9pZChzdHJ1Y3QgcGFnZSAqcGFnZSkKIH0KIAogI2lmZGVmIE5PREVfTk9UX0lOX1BBR0VfRkxBR1MKLWludCBtZW1kZXNjX25pZChtZW1kZXNjX2ZsYWdzX3QgbWRmKTsKJiM0MztpbnQgbWVtZGVzY19uaWQoY29uc3QgbWVtZGVzY19mbGFnc190ICptZGYpOwogI2Vsc2UKLXN0YXRpYyBpbmxpbmUgaW50IG1lbWRlc2NfbmlkKG1lbWRlc2NfZmxhZ3NfdCBtZGYpCiYjNDM7I2lmZGVmIENPTkZJR19OVU1BCiYjNDM7c3RhdGljIGlubGluZSBpbnQgbWVtZGVzY19uaWQoY29uc3QgbWVtZGVzY19mbGFnc190ICptZGYpCiB7Ci0JcmV0dXJuIChtZGYuZiAmZ3Q7Jmd0OyBOT0RFU19QR1NISUZUKSAmYW1wOyBOT0RFU19NQVNLOwomIzQzOwlBU1NFUlRfRVhDTFVTSVZFX0JJVFMobWRmLSZndDtmLCBOT0RFU19NQVNLICZsdDsmbHQ7IE5PREVTX1BHU0hJRlQpOwomIzQzOwlyZXR1cm4gKG1kZi0mZ3Q7ZiAmZ3Q7Jmd0OyBOT0RFU19QR1NISUZUKSAmYW1wOyBOT0RFU19NQVNLOwogfQomIzQzOyNlbHNlCiYjNDM7c3RhdGljIGlubGluZSBpbnQgbWVtZGVzY19uaWQoY29uc3QgbWVtZGVzY19mbGFnc190ICptZGYpCiYjNDM7ewomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7I2VuZGlmCiAjZW5kaWYKIAogc3RhdGljIGlubGluZSBpbnQgcGFnZV90b19uaWQoY29uc3Qgc3RydWN0IHBhZ2UgKnBhZ2UpCiB7Ci0JcmV0dXJuIG1lbWRlc2NfbmlkKFBGX1BPSVNPTkVEX0NIRUNLKHBhZ2UpLSZndDtmbGFncyk7CiYjNDM7CWNvbnN0IHN0cnVjdCBwYWdlICpwID0gUEZfUE9JU09ORURfQ0hFQ0socGFnZSk7CiYjNDM7CiYjNDM7CXJldHVybiBtZW1kZXNjX25pZCgmYW1wO3AtJmd0O2ZsYWdzKTsKIH0KIAogc3RhdGljIGlubGluZSBpbnQgZm9saW9fbmlkKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8pCiB7Ci0JcmV0dXJuIG1lbWRlc2NfbmlkKGZvbGlvLSZndDtmbGFncyk7CiYjNDM7CXJldHVybiBtZW1kZXNjX25pZCgmYW1wO2ZvbGlvLSZndDtmbGFncyk7CiB9CiAKICNpZmRlZiBDT05GSUdfTlVNQV9CQUxBTkNJTkcKQEAgLTI1NDEsMTIgJiM0MzsyNTUyLDEzIEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBzZXRfcGFnZV9zZWN0aW9uKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBsb25nIHNlY3Rpb24pCiAJcGFnZS0mZ3Q7ZmxhZ3MuZiB8PSAoc2VjdGlvbiAmYW1wOyBTRUNUSU9OU19NQVNLKSAmbHQ7Jmx0OyBTRUNUSU9OU19QR1NISUZUOwogfQogCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgbWVtZGVzY19zZWN0aW9uKG1lbWRlc2NfZmxhZ3NfdCBtZGYpCiYjNDM7c3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIG1lbWRlc2Nfc2VjdGlvbihjb25zdCBtZW1kZXNjX2ZsYWdzX3QgKm1kZikKIHsKLQlyZXR1cm4gKG1kZi5mICZndDsmZ3Q7IFNFQ1RJT05TX1BHU0hJRlQpICZhbXA7IFNFQ1RJT05TX01BU0s7CiYjNDM7CUFTU0VSVF9FWENMVVNJVkVfQklUUyhtZGYtJmd0O2YsIFNFQ1RJT05TX01BU0sgJmx0OyZsdDsgU0VDVElPTlNfUEdTSElGVCk7CiYjNDM7CXJldHVybiAobWRmLSZndDtmICZndDsmZ3Q7IFNFQ1RJT05TX1BHU0hJRlQpICZhbXA7IFNFQ1RJT05TX01BU0s7CiB9CiAjZWxzZSAvKiAhU0VDVElPTl9JTl9QQUdFX0ZMQUdTICovCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgbWVtZGVzY19zZWN0aW9uKG1lbWRlc2NfZmxhZ3NfdCBtZGYpCiYjNDM7c3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIG1lbWRlc2Nfc2VjdGlvbihjb25zdCBtZW1kZXNjX2ZsYWdzX3QgKm1kZikKIHsKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbW1faW5saW5lLmggYi9pbmNsdWRlL2xpbnV4L21tX2lubGluZS5oCmluZGV4IGE4NDMwYTdhZTA1NDQ3Li5lZmNkZGI5OTI1YWRkNyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tbV9pbmxpbmUuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L21tX2lubGluZS5oCkBAIC02NTAsNyAmIzQzOzY1MCw3IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCB2bWFfaGFzX3JlY2VuY3koY29uc3Qgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpCiBzdGF0aWMgaW5saW5lIHNpemVfdCBudW1fcGFnZXNfY29udGlndW91cyhzdHJ1Y3QgcGFnZSAqKnBhZ2VzLCBzaXplX3QgbnJfcGFnZXMpCiB7CiAJc3RydWN0IHBhZ2UgKmN1cl9wYWdlID0gcGFnZXNbMF07Ci0JdW5zaWduZWQgbG9uZyBzZWN0aW9uID0gbWVtZGVzY19zZWN0aW9uKGN1cl9wYWdlLSZndDtmbGFncyk7CiYjNDM7CXVuc2lnbmVkIGxvbmcgc2VjdGlvbiA9IG1lbWRlc2Nfc2VjdGlvbigmYW1wO2N1cl9wYWdlLSZndDtmbGFncyk7CiAJc2l6ZV90IGk7CiAKIAlmb3IgKGkgPSAxOyBpICZsdDsgbnJfcGFnZXM7IGkmIzQzOyYjNDM7KSB7CkBAIC02NjAsNyAmIzQzOzY2MCw3IEBAIHN0YXRpYyBpbmxpbmUgc2l6ZV90IG51bV9wYWdlc19jb250aWd1b3VzKHN0cnVjdCBwYWdlICoqcGFnZXMsIHNpemVfdCBucl9wYWdlcykKIAkJICogSW4gdW5wcm9ibGVtYXRpYyBrZXJuZWwgY29uZmlncywgcGFnZV90b19zZWN0aW9uKCkgPT0gMCBhbmQKIAkJICogdGhlIHdob2xlIGNoZWNrIHdpbGwgZ2V0IG9wdGltaXplZCBvdXQuCiAJCSAqLwotCQlpZiAobWVtZGVzY19zZWN0aW9uKGN1cl9wYWdlLSZndDtmbGFncykgIT0gc2VjdGlvbikKJiM0MzsJCWlmIChtZW1kZXNjX3NlY3Rpb24oJmFtcDtjdXJfcGFnZS0mZ3Q7ZmxhZ3MpICE9IHNlY3Rpb24pCiAJCQlicmVhazsKIAl9CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbW16b25lLmggYi9pbmNsdWRlL2xpbnV4L21tem9uZS5oCmluZGV4IGNhMjcxMjE4NzE0NzVjLi5lNjBkYWQ1NDZjYTY4ZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tbXpvbmUuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L21tem9uZS5oCkBAIC0xMjcyLDMxICYjNDM7MTI3MiwzMyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgem9uZV9pc19lbXB0eShjb25zdCBzdHJ1Y3Qgem9uZSAqem9uZSkKICNkZWZpbmUgS0FTQU5fVEFHX01BU0sJCSgoMVVMICZsdDsmbHQ7IEtBU0FOX1RBR19XSURUSCkgLSAxKQogI2RlZmluZSBaT05FSURfTUFTSwkJKCgxVUwgJmx0OyZsdDsgWk9ORUlEX1NISUZUKSAtIDEpCiAKLXN0YXRpYyBpbmxpbmUgZW51bSB6b25lX3R5cGUgbWVtZGVzY196b25lbnVtKG1lbWRlc2NfZmxhZ3NfdCBmbGFncykKJiM0MztzdGF0aWMgaW5saW5lIGVudW0gem9uZV90eXBlIG1lbWRlc2Nfem9uZW51bShjb25zdCBtZW1kZXNjX2ZsYWdzX3QgKmZsYWdzKQogewotCUFTU0VSVF9FWENMVVNJVkVfQklUUyhmbGFncy5mLCBaT05FU19NQVNLICZsdDsmbHQ7IFpPTkVTX1BHU0hJRlQpOwotCXJldHVybiAoZmxhZ3MuZiAmZ3Q7Jmd0OyBaT05FU19QR1NISUZUKSAmYW1wOyBaT05FU19NQVNLOwomIzQzOyNpZiBaT05FU19XSURUSCAhPSAwCiYjNDM7CUFTU0VSVF9FWENMVVNJVkVfQklUUyhmbGFncy0mZ3Q7ZiwgWk9ORVNfTUFTSyAmbHQ7Jmx0OyBaT05FU19QR1NISUZUKTsKJiM0MzsjZW5kaWYKJiM0MzsJcmV0dXJuIChmbGFncy0mZ3Q7ZiAmZ3Q7Jmd0OyBaT05FU19QR1NISUZUKSAmYW1wOyBaT05FU19NQVNLOwogfQogCiBzdGF0aWMgaW5saW5lIGVudW0gem9uZV90eXBlIHBhZ2Vfem9uZW51bShjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSkKIHsKLQlyZXR1cm4gbWVtZGVzY196b25lbnVtKHBhZ2UtJmd0O2ZsYWdzKTsKJiM0MzsJcmV0dXJuIG1lbWRlc2Nfem9uZW51bSgmYW1wO3BhZ2UtJmd0O2ZsYWdzKTsKIH0KIAogc3RhdGljIGlubGluZSBlbnVtIHpvbmVfdHlwZSBmb2xpb196b25lbnVtKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8pCiB7Ci0JcmV0dXJuIG1lbWRlc2Nfem9uZW51bShmb2xpby0mZ3Q7ZmxhZ3MpOwomIzQzOwlyZXR1cm4gbWVtZGVzY196b25lbnVtKCZhbXA7Zm9saW8tJmd0O2ZsYWdzKTsKIH0KIAogI2lmZGVmIENPTkZJR19aT05FX0RFVklDRQotc3RhdGljIGlubGluZSBib29sIG1lbWRlc2NfaXNfem9uZV9kZXZpY2UobWVtZGVzY19mbGFnc190IG1kZikKJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgbWVtZGVzY19pc196b25lX2RldmljZShjb25zdCBtZW1kZXNjX2ZsYWdzX3QgKm1kZikKIHsKIAlyZXR1cm4gbWVtZGVzY196b25lbnVtKG1kZikgPT0gWk9ORV9ERVZJQ0U7CiB9CiAKIHN0YXRpYyBpbmxpbmUgc3RydWN0IGRldl9wYWdlbWFwICpwYWdlX3BnbWFwKGNvbnN0IHN0cnVjdCBwYWdlICpwYWdlKQogewotCVZNX1dBUk5fT05fT05DRV9QQUdFKCFtZW1kZXNjX2lzX3pvbmVfZGV2aWNlKHBhZ2UtJmd0O2ZsYWdzKSwgcGFnZSk7CiYjNDM7CVZNX1dBUk5fT05fT05DRV9QQUdFKCFtZW1kZXNjX2lzX3pvbmVfZGV2aWNlKCZhbXA7cGFnZS0mZ3Q7ZmxhZ3MpLCBwYWdlKTsKIAlyZXR1cm4gcGFnZV9mb2xpbyhwYWdlKS0mZ3Q7cGdtYXA7CiB9CiAKQEAgLTEzMTEsOSAmIzQzOzEzMTMsOSBAQCBzdGF0aWMgaW5saW5lIHN0cnVjdCBkZXZfcGFnZW1hcCAqcGFnZV9wZ21hcChjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSkKIHN0YXRpYyBpbmxpbmUgYm9vbCB6b25lX2RldmljZV9wYWdlc19oYXZlX3NhbWVfcGdtYXAoY29uc3Qgc3RydWN0IHBhZ2UgKmEsCiAJCQkJCQkgICAgIGNvbnN0IHN0cnVjdCBwYWdlICpiKQogewotCWlmIChtZW1kZXNjX2lzX3pvbmVfZGV2aWNlKGEtJmd0O2ZsYWdzKSAhPSBtZW1kZXNjX2lzX3pvbmVfZGV2aWNlKGItJmd0O2ZsYWdzKSkKJiM0MzsJaWYgKG1lbWRlc2NfaXNfem9uZV9kZXZpY2UoJmFtcDthLSZndDtmbGFncykgIT0gbWVtZGVzY19pc196b25lX2RldmljZSgmYW1wO2ItJmd0O2ZsYWdzKSkKIAkJcmV0dXJuIGZhbHNlOwotCWlmICghbWVtZGVzY19pc196b25lX2RldmljZShhLSZndDtmbGFncykpCiYjNDM7CWlmICghbWVtZGVzY19pc196b25lX2RldmljZSgmYW1wO2EtJmd0O2ZsYWdzKSkKIAkJcmV0dXJuIHRydWU7CiAJcmV0dXJuIHBhZ2VfcGdtYXAoYSkgPT0gcGFnZV9wZ21hcChiKTsKIH0KQEAgLTEzMjEsNyAmIzQzOzEzMjMsNyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgem9uZV9kZXZpY2VfcGFnZXNfaGF2ZV9zYW1lX3BnbWFwKGNvbnN0IHN0cnVjdCBwYWdlICphLAogZXh0ZXJuIHZvaWQgbWVtbWFwX2luaXRfem9uZV9kZXZpY2Uoc3RydWN0IHpvbmUgKiwgdW5zaWduZWQgbG9uZywKIAkJCQkgICAgdW5zaWduZWQgbG9uZywgc3RydWN0IGRldl9wYWdlbWFwICopOwogI2Vsc2UKLXN0YXRpYyBpbmxpbmUgYm9vbCBtZW1kZXNjX2lzX3pvbmVfZGV2aWNlKG1lbWRlc2NfZmxhZ3NfdCBtZGYpCiYjNDM7c3RhdGljIGlubGluZSBib29sIG1lbWRlc2NfaXNfem9uZV9kZXZpY2UoY29uc3QgbWVtZGVzY19mbGFnc190ICptZGYpCiB7CiAJcmV0dXJuIGZhbHNlOwogfQpAQCAtMTMzOCwxMiAmIzQzOzEzNDAsMTIgQEAgc3RhdGljIGlubGluZSBzdHJ1Y3QgZGV2X3BhZ2VtYXAgKnBhZ2VfcGdtYXAoY29uc3Qgc3RydWN0IHBhZ2UgKnBhZ2UpCiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBpc196b25lX2RldmljZV9wYWdlKGNvbnN0IHN0cnVjdCBwYWdlICpwYWdlKQogewotCXJldHVybiBtZW1kZXNjX2lzX3pvbmVfZGV2aWNlKHBhZ2UtJmd0O2ZsYWdzKTsKJiM0MzsJcmV0dXJuIG1lbWRlc2NfaXNfem9uZV9kZXZpY2UoJmFtcDtwYWdlLSZndDtmbGFncyk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBmb2xpb19pc196b25lX2RldmljZShjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKQogewotCXJldHVybiBtZW1kZXNjX2lzX3pvbmVfZGV2aWNlKGZvbGlvLSZndDtmbGFncyk7CiYjNDM7CXJldHVybiBtZW1kZXNjX2lzX3pvbmVfZGV2aWNlKCZhbXA7Zm9saW8tJmd0O2ZsYWdzKTsKIH0KIAogc3RhdGljIGlubGluZSBib29sIGlzX3pvbmVfbW92YWJsZV9wYWdlKGNvbnN0IHN0cnVjdCBwYWdlICpwYWdlKQpkaWZmIC0tZ2l0IGEvbW0vcGFnZV9hbGxvYy5jIGIvbW0vcGFnZV9hbGxvYy5jCmluZGV4IGVlOTAyYTQ2OGMyZjViLi4wMjBhOTdjYTAxOGU5OSAxMDA2NDQKLS0tIGEvbW0vcGFnZV9hbGxvYy5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL3BhZ2VfYWxsb2MuYwpAQCAtNjkwNCwxNSAmIzQzOzY5MDQsMTUgQEAgc3RhdGljIHZvaWQgX19mcmVlX2NvbnRpZ19yYW5nZV9jb21tb24odW5zaWduZWQgbG9uZyBwZm4sIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMKIAkJCWNvbnRpbnVlOwogCQl9CiAKLQkJaWYgKHN0YXJ0ICZhbXA7JmFtcDsgbWVtZGVzY19zZWN0aW9uKHBhZ2UtJmd0O2ZsYWdzKSAhPSBzdGFydF9zZWMpIHsKJiM0MzsJCWlmIChzdGFydCAmYW1wOyZhbXA7IG1lbWRlc2Nfc2VjdGlvbigmYW1wO3BhZ2UtJmd0O2ZsYWdzKSAhPSBzdGFydF9zZWMpIHsKIAkJCWZyZWVfcHJlcGFyZWRfY29udGlnX3JhbmdlKHN0YXJ0LCBpIC0gbnJfc3RhcnQpOwogCQkJc3RhcnQgPSBwYWdlOwogCQkJbnJfc3RhcnQgPSBpOwotCQkJc3RhcnRfc2VjID0gbWVtZGVzY19zZWN0aW9uKHBhZ2UtJmd0O2ZsYWdzKTsKJiM0MzsJCQlzdGFydF9zZWMgPSBtZW1kZXNjX3NlY3Rpb24oJmFtcDtwYWdlLSZndDtmbGFncyk7CiAJCX0gZWxzZSBpZiAoIXN0YXJ0KSB7CiAJCQlzdGFydCA9IHBhZ2U7CiAJCQlucl9zdGFydCA9IGk7Ci0JCQlzdGFydF9zZWMgPSBtZW1kZXNjX3NlY3Rpb24ocGFnZS0mZ3Q7ZmxhZ3MpOwomIzQzOwkJCXN0YXJ0X3NlYyA9IG1lbWRlc2Nfc2VjdGlvbigmYW1wO3BhZ2UtJmd0O2ZsYWdzKTsKIAkJfQogCX0KIApkaWZmIC0tZ2l0IGEvbW0vc2xhYi5oIGIvbW0vc2xhYi5oCmluZGV4IDI4MWE2NTIzMzc5NWQ2Li45ZGVkMzE5NDk1YTA3MCAxMDA2NDQKLS0tIGEvbW0vc2xhYi5oCiYjNDM7JiM0MzsmIzQzOyBiL21tL3NsYWIuaApAQCAtMTc5LDcgJiM0MzsxNzksNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgKnNsYWJfYWRkcmVzcyhjb25zdCBzdHJ1Y3Qgc2xhYiAqc2xhYikKIAogc3RhdGljIGlubGluZSBpbnQgc2xhYl9uaWQoY29uc3Qgc3RydWN0IHNsYWIgKnNsYWIpCiB7Ci0JcmV0dXJuIG1lbWRlc2NfbmlkKHNsYWItJmd0O2ZsYWdzKTsKJiM0MzsJcmV0dXJuIG1lbWRlc2NfbmlkKCZhbXA7c2xhYi0mZ3Q7ZmxhZ3MpOwogfQogCiBzdGF0aWMgaW5saW5lIHBnX2RhdGFfdCAqc2xhYl9wZ2RhdChjb25zdCBzdHJ1Y3Qgc2xhYiAqc2xhYikKZGlmZiAtLWdpdCBhL21tL3NwYXJzZS5jIGIvbW0vc3BhcnNlLmMKaW5kZXggMTZhYzZkZjNjODlmYTIuLjhlMzg0Nzc2NDUxMzE5IDEwMDY0NAotLS0gYS9tbS9zcGFyc2UuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9zcGFyc2UuYwpAQCAtNDMsNyAmIzQzOzQzLDcgQEAgc3RhdGljIHU4IHNlY3Rpb25fdG9fbm9kZV90YWJsZVtOUl9NRU1fU0VDVElPTlNdIF9fY2FjaGVsaW5lX2FsaWduZWQ7CiBzdGF0aWMgdTE2IHNlY3Rpb25fdG9fbm9kZV90YWJsZVtOUl9NRU1fU0VDVElPTlNdIF9fY2FjaGVsaW5lX2FsaWduZWQ7CiAjZW5kaWYKIAotaW50IG1lbWRlc2NfbmlkKG1lbWRlc2NfZmxhZ3NfdCBtZGYpCiYjNDM7aW50IG1lbWRlc2NfbmlkKGNvbnN0IG1lbWRlc2NfZmxhZ3NfdCAqbWRmKQogewogCXJldHVybiBzZWN0aW9uX3RvX25vZGVfdGFibGVbbWVtZGVzY19zZWN0aW9uKG1kZildOwogfQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOCAxMjozNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0Nzc4CgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogNjQ5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIE1lbW9yeSBNb2RlbCBNYWNybyBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaC4gSXQgc2VlbXMgdG8gYmUgdG91Y2hpbmcgc2V2ZXJhbCBtZW1vcnkgbW9kZWwgbWFjcm9zOiBgbWVtZGVzY19zZWN0aW9uYCwgYG1lbWRlc2NfbmlkYCwgYG1lbWRlc2Nfem9uZW51bWAsIGFuZCBgbWVtZGVzY19pc196b25lX2RldmljZWAuIFRoZSBjb3JlIGNoYW5nZSBpcyB0aGUgYXJndW1lbnQgdHlwZSwgc2hpZnRpbmcgZnJvbSBhIHBhc3MtYnktdmFsdWUgKGBtZW1kZXNjX2ZsYWdzX3QgbWRmYCkgdG8gcGFzcy1ieS1wb2ludGVyIChgY29uc3QgbWVtZGVzY19mbGFnc190ICptZGZgKS4gSG1tLCBhbmQgdGhlcmUgYXJlIHRoZXNlIGBBU1NFUlRfRVhDTFVTSVZFX0JJVFNgIGNhbGxzIHNwcmlua2xlZCBpbi4gVGhhdCB0cmlnZ2VycyBzb21ldGhpbmcuLi4gdGhhdCYjMzk7cyBhIEtDU0FOIGNoZWNrLCByaWdodD8gTGV0JiMzOTtzIHpvb20gaW4gb24gYG1lbWRlc2NfbmlkYCBhbmQgc2VlIHdoYXQmIzM5O3MgY2hhbmdlZDoKCmBgYGMKICNpZmRlZiBOT0RFX05PVF9JTl9QQUdFX0ZMQUdTCi1pbnQgbWVtZGVzY19uaWQobWVtZGVzY19mbGFnc190IG1kZik7CiYjNDM7aW50IG1lbWRlc2NfbmlkKGNvbnN0IG1lbWRlc2NfZmxhZ3NfdCAqbWRmKTsKICNlbHNlCi1zdGF0aWMgaW5saW5lIGludCBtZW1kZXNjX25pZChtZW1kZXNjX2ZsYWdzX3QgbWRmKQomIzQzOyNpZmRlZiBDT05GSUdfTlVNQQomIzQzO3N0YXRpYyBpbmxpbmUgaW50IG1lbWRlc2NfbmlkKGNvbnN0IG1lbWRlc2NfZmxhZ3NfdCAqbWRmKQogewotCXJldHVybiAobWRmLmYgJmd0OyZndDsgTk9ERVNfUEdTSElGVCkgJmFtcDsgTk9ERVNfTUFTSzsKJiM0MzsJQVNTRVJUX0VYQ0xVU0lWRV9CSVRTKG1kZi0mZ3Q7ZiwgTk9ERVNfTUFTSyAmbHQ7Jmx0OyBOT0RFU19QR1NISUZUKTsKJiM0MzsJcmV0dXJuIChtZGYtJmd0O2YgJmd0OyZndDsgTk9ERVNfUEdTSElGVCkgJmFtcDsgTk9ERVNfTUFTSzsKIH0KJiM0MzsjZWxzZQomIzQzO3N0YXRpYyBpbmxpbmUgaW50IG1lbWRlc2NfbmlkKGNvbnN0IG1lbWRlc2NfZmxhZ3NfdCAqbWRmKQomIzQzO3sKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOyNlbmRpZgogI2VuZGlmCmBgYAoKUmlnaHQsIGl0JiMzOTtzIGEgcGFzcy1ieS1wb2ludGVyIHJlZmFjdG9yaW5nLiBJdCBhbHNvIGFkZGVkIGBBU1NFUlRfRVhDTFVTSVZFX0JJVFNgIHRvIHRob3NlIGZ1bmN0aW9ucy4gT2theSwgdGhhdCYjMzk7cyBkZWZpbml0ZWx5IGEgS0NTQU4gdGhpbmcsIGEgZGVidWdnaW5nIGFpZCBwdWxsZWQgaW4gZnJvbSBgJmx0O2xpbnV4L2tjc2FuLWNoZWNrcy5oJmd0O2AsIHdoaWNoIHRoZSBwYXRjaCBhbHNvIGluY2x1ZGVzIGluIGBpbmNsdWRlL2xpbnV4L21tLmhgLgoKVGhlIG1pbGxpb24tZG9sbGFyIHF1ZXN0aW9uOiBpcyB0aGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2U/IFBhc3NpbmcgYnkgcG9pbnRlciBpcyBtb3JlIG9mIGFuIG9wdGltaXphdGlvbiwgb3IgcmVmYWN0b3JpbmcuIFRoZSBLQ1NBTiBhc3NlcnRpb25zIGFyZSBjbGVhcmx5IGZvciBkZWJ1Z2dpbmcvc2FuaXRpemF0aW9uIHB1cnBvc2VzOyB0aGV5IHdvbiYjMzk7dCBhbHRlciB0aGUgcHJvZ3JhbSYjMzk7cyBpbnRlbmRlZCBleGVjdXRpb24gZmxvdywgdW5sZXNzIGEgS0NTQU4gaXNzdWUgaXMgZm91bmQuCgpBbHJpZ2h0LCBsZXQmIzM5O3MganVzdCBtYWtlIHN1cmUgdGhlcmUgYXJlIG5vIGZ1bmN0aW9uYWwgY2hhbmdlcyBsdXJraW5nLi4uIExldCYjMzk7cyBjaGVjayBgbWVtZGVzY19uaWRgIGFnYWluLiBJZiBgIUNPTkZJR19OVU1BYCwgdGhlIG9sZCB2ZXJzaW9uIHdvdWxkIHJldHVybiBgKG1kZi5mICZndDsmZ3Q7IE5PREVTX1BHU0hJRlQpICZhbXA7IE5PREVTX01BU0tgLiBOb3cgaXQganVzdCByZXR1cm5zIDAuIElmIGAhQ09ORklHX05VTUFgLCBgTk9ERVNfUEdTSElGVGAgaXMgcHJvYmFibHkgemVyby4gQW5kIGlmIGAhQ09ORklHX05VTUFgLCB0aGVuIGBOT0RFU19NQVNLYCBpcyBhbHNvIGxpa2VseSB6ZXJvLCB3aGljaCBtZWFucyB0aGF0IHRoZSBvcmlnaW5hbCBpbXBsZW1lbnRhdGlvbiB3b3VsZCBoYXZlIHJldHVybmVkIDAgYW55d2F5LiBCdXQgSSYjMzk7bSBnb2luZyB0byBkb3VibGUgY2hlY2suIEJldHRlciB0byBiZSBzYWZlLCBzbyBJJiMzOTtsbCBncmVwIGZvciB0aGUgZGVmaW5pdGlvbiBvZiBgTk9ERVNfTUFTS2AganVzdCB0byBiZSBjZXJ0YWluLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA4IDEyOjM2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0OyNkZWZpbmUgTk9ERVNfTUFTSyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L21tem9uZS5oPTEyMjQ9c3RhdGljIGlubGluZSBib29sIHpvbmVfaXNfZW1wdHkoY29uc3Qgc3RydWN0IHpvbmUgKnpvbmUpXG4tLVxuaW5jbHVkZS9saW51eC9tbXpvbmUuaC0xMjY4LSNkZWZpbmUgWk9ORVNfTUFTS1x0XHQoKDFVTCBcdTAwM2NcdTAwM2MgWk9ORVNfV0lEVEgpIC0gMSlcbmluY2x1ZGUvbGludXgvbW16b25lLmg6MTI2OTojZGVmaW5lIE5PREVTX01BU0tcdFx0KCgxVUwgXHUwMDNjXHUwMDNjIE5PREVTX1dJRFRIKSAtIDEpXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oLTEyNzAtI2RlZmluZSBTRUNUSU9OU19NQVNLXHRcdCgoMVVMIFx1MDAzY1x1MDAzYyBTRUNUSU9OU19XSURUSCkgLSAxKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA4IDEyOjM2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYyNTUKCQkJCQkJCW91dHB1dDogMjMKCQkJCQkJCXRob3VnaHRzOiA2NjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBDaGFuZ2VzOiBBIFJlZmFjdG9yaW5nIGFuZCBEZWJ1Z2dpbmcgRGVlcCBEaXZlKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpbW1lZGlhdGVseSwgdGhlIGZpcnN0IHRoaW5nIHRoYXQganVtcHMgb3V0IGlzIHRoZSBzaGlmdCBmcm9tIHBhc3NpbmcgYG1lbWRlc2NfZmxhZ3NfdGAgYnkgdmFsdWUgdG8gcGFzc2luZyBpdCBieSBwb2ludGVyLiBJIHJlY29nbml6ZSB0aGlzIGFzIGEgdHlwaWNhbCByZWZhY3RvcmluZyBleGVyY2lzZSwgYWltZWQgYXQgc3RyZWFtbGluaW5nIHRoZSBBQkkgb3IgcG9zc2libHkgYXZvaWRpbmcgdW5uZWNlc3NhcnkgZGF0YSBjb3BpZXMuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IHRoaXMga2luZCBvZiBjaGFuZ2UgKnNob3VsZG4mIzM5O3QqIGltcGFjdCB0aGUgY29yZSBmdW5jdGlvbmFsaXR5LCBlc3BlY2lhbGx5IGluIGEgd2F5IHRoYXQgbmVjZXNzaXRhdGVzIGV4dGVuc2l2ZSBmdXp6aW5nLiBJdCYjMzk7cyBtb3JlIGFib3V0IGNvZGUgaHlnaWVuZSBhbmQgcG90ZW50aWFsbHkgbWljcm8tb3B0aW1pemF0aW9ucy4KCkxldCYjMzk7cyBicmVhayBpdCBkb3duIGZ1bmN0aW9uIGJ5IGZ1bmN0aW9uIHRvIGNvbmZpcm0gdGhpcyBzdXNwaWNpb24uIFdpdGggdGhlIGBtZW1kZXNjX25vZGVpZGAgZnVuY3Rpb24sIHdoZW4gYCFDT05GSUdfTlVNQWAsIHRoZSBgTk9ERVNfV0lEVEhgIGlzIHplcm8gd2hpY2ggbWVhbnMgdGhlIGBOT0RFU19NQVNLYCBpcyBhbHNvIDAuIFRodXMgdGhlIG1hc2tpbmcgb3BlcmF0aW9uIGlzIGVmZmVjdGl2ZWx5IGEgbm8tb3AsIHJldHVybmluZyAwIGFueXdheS4gVGhlIGNoYW5nZSB0byByZXR1cm4gMCBkaXJlY3RseSBpbiB0aGlzIHNjZW5hcmlvIGlzIGEgY2xlYXIgb3B0aW1pemF0aW9uIGFuZCBzaW1wbGlmaWNhdGlvbi4KCk5vdywgY2hlY2tpbmcgdGhlIGBtZW1kZXNjX3NlY3Rpb25gIGZ1bmN0aW9uLCB0aGUgb25seSBjaGFuZ2UgaXMgdGhlIGFkZGl0aW9uIG9mIHRoZSBLQ1NBTiBhc3NlcnRpb24gYW5kIGEgc3dpdGNoIHRvIHBhc3MtYnktcG9pbnRlci4gVGhpcyBsb29rcyBsaWtlIGEgZGVidWdnaW5nIGVuaGFuY2VtZW50LCBlbnN1cmluZyB0aGUgY29ycmVjdCBiaXRzIGFyZSBiZWluZyB1c2VkLiBObyBmdW5jdGlvbmFsIGFsdGVyYXRpb24gaGVyZSwgc28gdGhpcyBmdXJ0aGVyIGNvbmZpcm1zIG15IGluaXRpYWwgYXNzZXNzbWVudC4KCk5leHQsIEkgc2VlIHRoZSBgbWVtZGVzY196b25lbnVtYCBmdW5jdGlvbiBjaGFuZ2UuIEFoLCBoZXJlIHdlIGhhdmUgYW4gYCNpZiBaT05FU19XSURUSCAhPSAwYCBndWFyZCBhcm91bmQgdGhlIGBBU1NFUlRfRVhDTFVTSVZFX0JJVFNgIGNhbGwuIFRoaXMgaW5kaWNhdGVzIGEgZml4IGZvciBhIHBvdGVudGlhbCBidWlsZCBpc3N1ZSB3aGVuIGBaT05FU19XSURUSGAgaXMgemVyby4gSSBpbWFnaW5lIHRoYXQgdGhlIGJpdCBzaGlmdCBtaWdodCBiZSBwcm9ibGVtYXRpYyB3aGVuIGBaT05FU19XSURUSGAgaXMgemVybywgbWF5YmUgY2F1c2luZyBhIHNoaWZ0LW91dC1vZi1ib3VuZHMgc2l0dWF0aW9uLCBvciB0aGUgYXNzZXJ0aW9uIGxvZ2ljIGRvZXNuJiMzOTt0IGhhbmRsZSB0aGUgemVybyBtYXNrIGNvcnJlY3RseS4gVGhpcyBpcyBhbm90aGVyIHB1cmVseSBkZWZlbnNpdmUgYW5kIG5vbi1mdW5jdGlvbmFsIGNoYW5nZSwgcHJldmVudGluZyBwb3RlbnRpYWwgYnVpbGQgd2FybmluZ3Mgb3IgZXJyb3JzIGluIHNwZWNpZmljIGNvbmZpZ3VyYXRpb25zLgoKQW5kIHRoZW4gd2UgY29tZSB0byBgbWVtZGVzY19pc196b25lX2RldmljZWAuIEp1c3QgYSBwYXNzLWJ5LXBvaW50ZXIgY2hhbmdlLiBBbm90aGVyIGluc3RhbmNlIG9mIG91ciByZWZhY3RvcmluZyB0aGVtZS4KCkVzc2VudGlhbGx5LCB0aGUgZW50aXJlIHBhdGNoIGJvaWxzIGRvd24gdG8gdGhpczogKml0JiMzOTtzIGEgcmVmYWN0b3JpbmcgZWZmb3J0IHdpdGggc29tZSBhZGRlZCBLQ1NBTiBhc3NlcnRpb25zLiogVGhlIGZ1bmRhbWVudGFsIGV4ZWN1dGlvbiBmbG93IHJlbWFpbnMgdW50b3VjaGVkLiBUaGUgY29yZSBkYXRhIHN0cnVjdHVyZSwgYG1lbWRlc2NfZmxhZ3NfdGAsIGNvbnRhaW5zIGFuIGB1bnNpZ25lZCBsb25nIGZgLiBTbywgcGFzc2luZyBpdCBieSBwb2ludGVyIHZlcnN1cyB2YWx1ZSBpcyByZWFsbHkganVzdCBhbiBBQkkgZGV0YWlsLiBJdCYjMzk7cyBhYm91dCBvcHRpbWl6aW5nIHRoZSBmdW5jdGlvbiBjYWxscyBieSBwYXNzaW5nIGEgcmVmZXJlbmNlIHJhdGhlciB0aGFuIGEgZnVsbCBjb3B5IG9mIHRoZSBkYXRhLiBUaGlzIGNoYW5nZSB3YXJyYW50cyBhIGNsb3NlIHJldmlldyBidXQsIEkmIzM5O20gY29uZmlkZW50LCBkb2VzbiYjMzk7dCByZXF1aXJlIGFueSBleHRlbnNpdmUgZnV6emluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOCAxMjozNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3R5cGVkZWYgc3RydWN0LiptZW1kZXNjX2ZsYWdzX3QmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA4IDEyOjM2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc1MDkKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiAxNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqTmF2aWdhdGluZyB0aGUgTWVtb3J5IE1hbmFnZW1lbnQgTGFuZHNjYXBlKioKCkFscmlnaHQsIHNvIEkmIzM5O20gZGl2aW5nIGludG8gdGhpcyBtZW1vcnkgbWFuYWdlbWVudCBpc3N1ZSwgYW5kIG15IGZpcnN0IGluc3RpbmN0IGlzIHRvIGdldCBncmFudWxhci4gSW5zdGVhZCBvZiBicm9hZCBzZWFyY2hlcywgbGV0JiMzOTtzIHplcm8gaW4uIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGVzZSBtZW1vcnkgZGVzY3JpcHRvcnMgd29yaywgc28gbGV0JiMzOTtzIGN1dCB0aHJvdWdoIHRoZSBub2lzZSBhbmQganVzdCBnbyBzdHJhaWdodCBmb3IgdGhlIHNwZWNpZmljIHR5cGUgZGVmaW5pdGlvbjogYG1lbWRlc2NfZmxhZ3NfdGAuIEkmIzM5O20gYXNzdW1pbmcgdGhhdCBpdCBpcyB0aGF0IHBhcnRpY3VsYXIgc3RydWN0dXJlIHdoaWNoIGhvbGRzIHRoZSBrZXksIGJlY2F1c2UgaXQgaXMgdGhlIG9idmlvdXMgZGVzY3JpcHRvciBvZiBmbGFncyBhbmQgc2V0dGluZ3MuIE5vIHNlbnNlIGluIGJlYXRpbmcgYXJvdW5kIHRoZSBidXNoLiBJJiMzOTtsbCBzdGFydCB3aXRoIHRoaXMgc3BlY2lmaWMgaWRlbnRpZmllciBhbmQgc2VlIHdoYXQgaW5zaWdodHMgSSBjYW4gZ2xlYW4uIEl0JiMzOTtzIGEgdGFyZ2V0ZWQgYXBwcm9hY2g7IGhvcGVmdWxseSwgdGhpcyBpcyB0aGUgcXVpY2tlc3QgcGF0aCB0byB1bmRlcnN0YW5kaW5nIHRoZSBmaW5lciBkZXRhaWxzLCB3aXRob3V0IHRoZSBkaXN0cmFjdGlvbiBvZiBwZXJpcGhlcmFsIGluZm9ybWF0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA4IDEyOjM2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21lbWRlc2NfZmxhZ3NfdCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L21tLmg9MjI4ND1zdGF0aWMgaW5saW5lIGludCBwYWdlX3pvbmVfaWQoc3RydWN0IHBhZ2UgKnBhZ2UpXG4tLVxuaW5jbHVkZS9saW51eC9tbS5oLTIyODktI2lmZGVmIE5PREVfTk9UX0lOX1BBR0VfRkxBR1NcbmluY2x1ZGUvbGludXgvbW0uaDoyMjkwOmludCBtZW1kZXNjX25pZChjb25zdCBtZW1kZXNjX2ZsYWdzX3QgKm1kZik7XG5pbmNsdWRlL2xpbnV4L21tLmgtMjI5MS0jZWxzZVxuaW5jbHVkZS9saW51eC9tbS5oLTIyOTItI2lmZGVmIENPTkZJR19OVU1BXG5pbmNsdWRlL2xpbnV4L21tLmg6MjI5MzpzdGF0aWMgaW5saW5lIGludCBtZW1kZXNjX25pZChjb25zdCBtZW1kZXNjX2ZsYWdzX3QgKm1kZilcbmluY2x1ZGUvbGludXgvbW0uaC0yMjk0LXtcbi0tXG5pbmNsdWRlL2xpbnV4L21tLmgtMjI5OC0jZWxzZVxuaW5jbHVkZS9saW51eC9tbS5oOjIyOTk6c3RhdGljIGlubGluZSBpbnQgbWVtZGVzY19uaWQoY29uc3QgbWVtZGVzY19mbGFnc190ICptZGYpXG5pbmNsdWRlL2xpbnV4L21tLmgtMjMwMC17XG4tLVxuaW5jbHVkZS9saW51eC9tbS5oPTI1NDk9c3RhdGljIGlubGluZSB2b2lkIHNldF9wYWdlX3NlY3Rpb24oc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGxvbmcgc2VjdGlvbilcbi0tXG5pbmNsdWRlL2xpbnV4L21tLmgtMjU1NC1cbmluY2x1ZGUvbGludXgvbW0uaDoyNTU1OnN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBtZW1kZXNjX3NlY3Rpb24oY29uc3QgbWVtZGVzY19mbGFnc190ICptZGYpXG5pbmNsdWRlL2xpbnV4L21tLmgtMjU1Ni17XG4tLVxuaW5jbHVkZS9saW51eC9tbS5oLTI1NjAtI2Vsc2UgLyogIVNFQ1RJT05fSU5fUEFHRV9GTEFHUyAqL1xuaW5jbHVkZS9saW51eC9tbS5oOjI1NjE6c3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIG1lbWRlc2Nfc2VjdGlvbihjb25zdCBtZW1kZXNjX2ZsYWdzX3QgKm1kZilcbmluY2x1ZGUvbGludXgvbW0uaC0yNTYyLXtcbi0tXG5pbmNsdWRlL2xpbnV4L21tX3R5cGVzLmg9Mzk9dHlwZWRlZiBzdHJ1Y3Qge1xuaW5jbHVkZS9saW51eC9tbV90eXBlcy5oLTQwLVx0dW5zaWduZWQgbG9uZyBmO1xuaW5jbHVkZS9saW51eC9tbV90eXBlcy5oOjQxOn0gbWVtZGVzY19mbGFnc190O1xuaW5jbHVkZS9saW51eC9tbV90eXBlcy5oLTQyLVxuLS1cbmluY2x1ZGUvbGludXgvbW1fdHlwZXMuaD04MD1zdHJ1Y3QgcGFnZSB7XG5pbmNsdWRlL2xpbnV4L21tX3R5cGVzLmg6ODE6XHRtZW1kZXNjX2ZsYWdzX3QgZmxhZ3M7XHRcdC8qIEF0b21pYyBmbGFncywgc29tZSBwb3NzaWJseVxuaW5jbHVkZS9saW51eC9tbV90eXBlcy5oLTgyLVx0XHRcdFx0XHQgKiB1cGRhdGVkIGFzeW5jaHJvbm91c2x5ICovXG4tLVxuaW5jbHVkZS9saW51eC9tbV90eXBlcy5oPTQwMj1zdHJ1Y3QgZm9saW8ge1xuLS1cbmluY2x1ZGUvbGludXgvbW1fdHlwZXMuaC00MDYtXHQvKiBwdWJsaWM6ICovXG5pbmNsdWRlL2xpbnV4L21tX3R5cGVzLmg6NDA3Olx0XHRcdG1lbWRlc2NfZmxhZ3NfdCBmbGFncztcbmluY2x1ZGUvbGludXgvbW1fdHlwZXMuaC00MDgtXHRcdFx0dW5pb24ge1xuLS1cbmluY2x1ZGUvbGludXgvbW1fdHlwZXMuaD01NzM9c3RydWN0IHB0ZGVzYyB7XG5pbmNsdWRlL2xpbnV4L21tX3R5cGVzLmg6NTc0Olx0bWVtZGVzY19mbGFnc190IHB0X2ZsYWdzO1xuaW5jbHVkZS9saW51eC9tbV90eXBlcy5oLTU3NS1cbi0tXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oPTEyMjQ9c3RhdGljIGlubGluZSBib29sIHpvbmVfaXNfZW1wdHkoY29uc3Qgc3RydWN0IHpvbmUgKnpvbmUpXG4tLVxuaW5jbHVkZS9saW51eC9tbXpvbmUuaC0xMjc0LVxuaW5jbHVkZS9saW51eC9tbXpvbmUuaDoxMjc1OnN0YXRpYyBpbmxpbmUgZW51bSB6b25lX3R5cGUgbWVtZGVzY196b25lbnVtKGNvbnN0IG1lbWRlc2NfZmxhZ3NfdCAqZmxhZ3MpXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oLTEyNzYte1xuLS1cbmluY2x1ZGUvbGludXgvbW16b25lLmg9MTI4OD1zdGF0aWMgaW5saW5lIGVudW0gem9uZV90eXBlIGZvbGlvX3pvbmVudW0oY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbylcbi0tXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oLTEyOTMtI2lmZGVmIENPTkZJR19aT05FX0RFVklDRVxuaW5jbHVkZS9saW51eC9tbXpvbmUuaDoxMjk0OnN0YXRpYyBpbmxpbmUgYm9vbCBtZW1kZXNjX2lzX3pvbmVfZGV2aWNlKGNvbnN0IG1lbWRlc2NfZmxhZ3NfdCAqbWRmKVxuaW5jbHVkZS9saW51eC9tbXpvbmUuaC0xMjk1LXtcbi0tXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oPTEzMjM9ZXh0ZXJuIHZvaWQgbWVtbWFwX2luaXRfem9uZV9kZXZpY2Uoc3RydWN0IHpvbmUgKiwgdW5zaWduZWQgbG9uZyxcbi0tXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oLTEzMjUtI2Vsc2VcbmluY2x1ZGUvbGludXgvbW16b25lLmg6MTMyNjpzdGF0aWMgaW5saW5lIGJvb2wgbWVtZGVzY19pc196b25lX2RldmljZShjb25zdCBtZW1kZXNjX2ZsYWdzX3QgKm1kZilcbmluY2x1ZGUvbGludXgvbW16b25lLmgtMTMyNy17XG4tLVxubW0vc2xhYi5oPTk4PXN0cnVjdCBzbGFiIHtcbm1tL3NsYWIuaDo5OTpcdG1lbWRlc2NfZmxhZ3NfdCBmbGFncztcbm1tL3NsYWIuaC0xMDAtXG4tLVxubW0vc3BhcnNlLmM9NDM9c3RhdGljIHUxNiBzZWN0aW9uX3RvX25vZGVfdGFibGVbTlJfTUVNX1NFQ1RJT05TXSBfX2NhY2hlbGluZV9hbGlnbmVkO1xuLS1cbm1tL3NwYXJzZS5jLTQ1LVxubW0vc3BhcnNlLmM6NDY6aW50IG1lbWRlc2NfbmlkKGNvbnN0IG1lbWRlc2NfZmxhZ3NfdCAqbWRmKVxubW0vc3BhcnNlLmMtNDcte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA4IDEyOjM2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg4NzQKCQkJCQkJCW91dHB1dDogODUKCQkJCQkJCXRob3VnaHRzOiAyNTIzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlBhdGNoIEFuYWx5c2lzOiBgbWVtZGVzY19mbGFnc190YCBSZWZhY3RvcmluZyBhbmQgS0NTQU4gQXNzZXJ0aW9ucyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgd2FzIGNvcnJlY3Q7IGBtZW1kZXNjX2ZsYWdzX3RgIGlzIGp1c3QgYSBzdHJ1Y3QgY29udGFpbmluZyBhbiBgdW5zaWduZWQgbG9uZyBmYC4gVGhpcyBwYXRjaCBpcyBwdXJlbHkgYSByZWZhY3RvcmluZyBlZmZvcnQuIFRoZSBjaGFuZ2VzIGludm9sdmUgcGFzc2luZyB0aGUgYG1lbWRlc2NfZmxhZ3NfdGAgc3RydWN0IGJ5IHBvaW50ZXIgaW5zdGVhZCBvZiBieSB2YWx1ZSBhY3Jvc3MgdmFyaW91cyBmdW5jdGlvbnMuIENydWNpYWxseSwgdGhlIGZ1bmN0aW9uYWwgYmVoYXZpb3Igb2YgdGhlIGNvZGUgKnNob3VsZCogcmVtYWluIGlkZW50aWNhbC4gSSBzZWUgc29tZSBLQ1NBTiBhc3NlcnRpb25zIGJlaW5nIGFkZGVkL2ZpeGVkLCB3aGljaCBpcyBncmVhdCBmb3IgaW1wcm92aW5nIGNvZGUgY29ycmVjdG5lc3MgYW5kIGRldGVjdGluZyBwb3RlbnRpYWwgcmFjZXMsIGJ1dCB0aGVzZSBhc3NlcnRpb25zIHdvbiYjMzk7dCBpbnRyb2R1Y2UgYW55IG5ldyBleGVjdXRpb24gcGF0aHMgZm9yIGZ1enppbmcgdG8gZXhwbG9yZS4KCkkmIzM5O20gZ29pbmcgdGhyb3VnaCB0aGUgZGlmZiBhZ2FpbiB0byBiZSBhYnNvbHV0ZWx5IHN1cmUuCgpUaGUgZmlyc3QgY2hhbmdlIGluIGBpbmNsdWRlL2FzbS1nZW5lcmljL21lbW9yeV9tb2RlbC5oYCBpcyBzdHJhaWdodGZvcndhcmQ7IHRoZSBjYWxsIHRvIGBtZW1kZXNjX3NlY3Rpb25gIG5vdyBwYXNzZXMgYF9fcGctJmd0O2ZsYWdzYCBhcyBhIHBvaW50ZXIuIE5vIGNoYW5nZSBpbiBjb3JlIGxvZ2ljIHRoZXJlLgoKTW92aW5nIG9uIHRvIGBpbmNsdWRlL2xpbnV4L21tLmhgLCB0aGUgZGVmaW5pdGlvbiBvZiBgbWVtZGVzY19uaWRgIGlzIHVwZGF0ZWQgdG8gdGFrZSBhIHBvaW50ZXIsIGFuZCBhbiBgQVNTRVJUX0VYQ0xVU0lWRV9CSVRTYCBpcyBhZGRlZCB3aXRoaW4gYSBgI2lmZGVmIENPTkZJR19OVU1BYCBibG9jay4gVGhpcyBsb29rcyBmaW5lOyBldmVuIGlmIGBDT05GSUdfTlVNQWAgaXMgbm90IHNldCwgdGhlIGlubGluZSBmdW5jdGlvbiB3aWxsIHJldHVybiAwIHdoaWNoIGlzIGxvZ2ljYWxseSBzb3VuZCBnaXZlbiB0aGUgZXhpc3RpbmcgbG9naWMuIEFsbCBjYWxsIHNpdGVzIG9mIGBtZW1kZXNjX25pZGAgYXJlIGFkanVzdGVkIHRvIG1hdGNoIHRoZSBuZXcgc2lnbmF0dXJlLiBUaGUgc2FtZSBwYXR0ZXJuIGlzIHJlcGVhdGVkIGZvciBgbWVtZGVzY19zZWN0aW9uYCBhbmQgYG1lbWRlc2Nfem9uZW51bWAuIFRoZSBhZGRpdGlvbiBvZiBgQVNTRVJUX0VYQ0xVU0lWRV9CSVRTYCBpcyBnb29kLCBhZGRpbmcgS0NTQU4gY2hlY2tzLCBidXQgd29uJiMzOTt0IGltcGFjdCBob3cgdGhlIGNvZGUgcnVucy4KCkluIGBpbmNsdWRlL2xpbnV4L21tX2lubGluZS5oYCwgdGhlIGNhbGwgc2l0ZXMgb2YgYG1lbWRlc2Nfc2VjdGlvbmAgYXJlIHVwZGF0ZWQgdG8gcGFzcyBhIHBvaW50ZXIsIGFzIGV4cGVjdGVkLgoKYGluY2x1ZGUvbGludXgvbW16b25lLmhgIHNlZXMgc2ltaWxhciBtb2RpZmljYXRpb25zIGZvciBgbWVtZGVzY196b25lbnVtYC4gVGhlIHNpZ25hdHVyZSBjaGFuZ2UgaXMgYWdhaW4gdGhlIHBhc3MtYnktcG9pbnRlciByZWZhY3RvcmluZyBhbmQgS0NTQU4gYXNzZXJ0aW9ucy4gVGhlIGNhbGxzIHRvIHRoZSBpbmxpbmUgZnVuY3Rpb24gYXJlIGFsc28gdXBkYXRlZC4gVGhlIGBtZW1kZXNjX2lzX3pvbmVfZGV2aWNlYCBmdW5jdGlvbiBzZWVzIHRoZSBzYW1lIHBhdHRlcm4gYXMgd2VsbC4KCkluIGBtbS9wYWdlX2FsbG9jLmNgIGFuZCBgbW0vc2xhYi5oYCB0aGUgdXBkYXRlcyBhcmUgdGhlIHNhbWUgLSBhbGwgYWJvdXQgc3dpdGNoaW5nIHRvIHBhc3MtYnktcG9pbnRlci4gIEFsbCBmdW5jdGlvbiBzaWduYXR1cmVzIGFyZSB1cGRhdGVkLgoKRmluYWxseSwgaW4gYG1tL3NwYXJzZS5jYCwgdGhlIGRlZmluaXRpb24gb2YgYG1lbWRlc2NfbmlkYCBpcyBhZGp1c3RlZCB0byBtYXRjaCB0aGUgdXBkYXRlZCBzaWduYXR1cmUsIGtlZXBpbmcgdGhpbmdzIGNvbnNpc3RlbnQuCgpHaXZlbiBhbGwgdGhpcywgbXkgY29uY2x1c2lvbiByZW1haW5zIGZpcm0uIFRoaXMgcGF0Y2ggaXMgcHVyZWx5IGEgcmVmYWN0b3JpbmcgYW5kIEtDU0FOIGFzc2VydGlvbiBhZGRpdGlvbnMuIE5vIGV4ZWN1dGlvbiBmbG93IGlzIGNoYW5nZWQsIHNvIHRoZXJlJiMzOTtzIG5vdGhpbmcgbmV3IGhlcmUgdGhhdCBmdXp6aW5nIHdvdWxkIGZpbmQuIEl0JiMzOTtzIHNhZmUgdG8gc2F5IHRoYXQgYFdvcnRoRnV6emluZ2Agc2hvdWxkIGJlIGBmYWxzZWAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA4IDEyOjM3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogW10sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaXMgYSBwdXJlIHJlZmFjdG9yaW5nIHRoYXQgY2hhbmdlcyBgbWVtZGVzY19mbGFnc190YCB0byBiZSBwYXNzZWQgYnkgcG9pbnRlciBpbnN0ZWFkIG9mIGJ5IHZhbHVlLCBhbmQgYWRkcy9maXhlcyBLQ1NBTiBhc3NlcnRpb25zIChgQVNTRVJUX0VYQ0xVU0lWRV9CSVRTYCkuIEl0IGRvZXMgbm90IGZ1bmN0aW9uYWxseSBhbHRlciB0aGUgZXhlY3V0aW9uIGZsb3cgb2YgdGhlIGtlcm5lbC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGlzIGEgcHVyZSByZWZhY3RvcmluZyB0aGF0IGNoYW5nZXMgYG1lbWRlc2NfZmxhZ3NfdGAgdG8gYmUgcGFzc2VkIGJ5IHBvaW50ZXIgaW5zdGVhZCBvZiBieSB2YWx1ZSwgYW5kIGFkZHMvZml4ZXMgS0NTQU4gYXNzZXJ0aW9ucyAoYEFTU0VSVF9FWENMVVNJVkVfQklUU2ApLiBJdCBkb2VzIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgdGhlIGV4ZWN1dGlvbiBmbG93IG9mIHRoZSBrZXJuZWwuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDctMDhUMTI6MzY6MDcuMDQxNzc4ODg2WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTgyMDI1MTUyMzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGlzIGEgcHVyZSByZWZhY3RvcmluZyB0aGF0IGNoYW5nZXMgYG1lbWRlc2NfZmxhZ3NfdGAgdG8gYmUgcGFzc2VkIGJ5IHBvaW50ZXIgaW5zdGVhZCBvZiBieSB2YWx1ZSwgYW5kIGFkZHMvZml4ZXMgS0NTQU4gYXNzZXJ0aW9ucyAoYEFTU0VSVF9FWENMVVNJVkVfQklUU2ApLiBJdCBkb2VzIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgdGhlIGV4ZWN1dGlvbiBmbG93IG9mIHRoZSBrZXJuZWwuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wOFQxMjozNjowNy4wNDE3OTk4MTZaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg2MjEwNjEwOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDVhZDFmOTUzZGUyY2I5N2U3NGVmZGQyN2Q1ZWZlYmM2ODVlYzM0MDJcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFdlZCBKdWwgOCAxMjozNjowNSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1nZW5lcmljL21lbW9yeV9tb2RlbC5oIGIvaW5jbHVkZS9hc20tZ2VuZXJpYy9tZW1vcnlfbW9kZWwuaFxcbmluZGV4IGVmYTY2MTBhY2JjNzk3Li5mODQwNGJjNzc3M2MyYiAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2FzbS1nZW5lcmljL21lbW9yeV9tb2RlbC5oXFxuKysrIGIvaW5jbHVkZS9hc20tZ2VuZXJpYy9tZW1vcnlfbW9kZWwuaFxcbkBAIC01Myw3ICs1Myw3IEBAIHN0YXRpYyBpbmxpbmUgaW50IHBmbl92YWxpZCh1bnNpZ25lZCBsb25nIHBmbilcXG4gICovXFxuICNkZWZpbmUgX19wYWdlX3RvX3BmbihwZylcXHRcXHRcXHRcXHRcXHRcXFxcXFxuICh7XFx0Y29uc3Qgc3RydWN0IHBhZ2UgKl9fcGcgPSAocGcpO1xcdFxcdFxcdFxcdFxcXFxcXG4tXFx0aW50IF9fc2VjID0gbWVtZGVzY19zZWN0aW9uKF9fcGctXFx1MDAzZWZsYWdzKTtcXHRcXHRcXFxcXFxuK1xcdGludCBfX3NlYyA9IG1lbWRlc2Nfc2VjdGlvbihcXHUwMDI2X19wZy1cXHUwMDNlZmxhZ3MpO1xcdFxcdFxcXFxcXG4gXFx0KHVuc2lnbmVkIGxvbmcpKF9fcGcgLSBfX3NlY3Rpb25fbWVtX21hcF9hZGRyKF9fbnJfdG9fc2VjdGlvbihfX3NlYykpKTtcXHRcXFxcXFxuIH0pXFxuIFxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21tLmggYi9pbmNsdWRlL2xpbnV4L21tLmhcXG5pbmRleCA0ODVkZjljMmRiZGRiMy4uMWVmOWIwYmQ3ZmQzMzYgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9tbS5oXFxuKysrIGIvaW5jbHVkZS9saW51eC9tbS5oXFxuQEAgLTM3LDYgKzM3LDcgQEBcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2JpdG1hcC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvYml0b3BzLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9pb21tdS1kZWJ1Zy1wYWdlYWxsb2MuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2tjc2FuLWNoZWNrcy5oXFx1MDAzZVxcbiBcXG4gc3RydWN0IG1lbXBvbGljeTtcXG4gc3RydWN0IGFub25fdm1hO1xcbkBAIC0yMjg2LDIyICsyMjg3LDMyIEBAIHN0YXRpYyBpbmxpbmUgaW50IHBhZ2Vfem9uZV9pZChzdHJ1Y3QgcGFnZSAqcGFnZSlcXG4gfVxcbiBcXG4gI2lmZGVmIE5PREVfTk9UX0lOX1BBR0VfRkxBR1NcXG4taW50IG1lbWRlc2NfbmlkKG1lbWRlc2NfZmxhZ3NfdCBtZGYpO1xcbitpbnQgbWVtZGVzY19uaWQoY29uc3QgbWVtZGVzY19mbGFnc190ICptZGYpO1xcbiAjZWxzZVxcbi1zdGF0aWMgaW5saW5lIGludCBtZW1kZXNjX25pZChtZW1kZXNjX2ZsYWdzX3QgbWRmKVxcbisjaWZkZWYgQ09ORklHX05VTUFcXG4rc3RhdGljIGlubGluZSBpbnQgbWVtZGVzY19uaWQoY29uc3QgbWVtZGVzY19mbGFnc190ICptZGYpXFxuIHtcXG4tXFx0cmV0dXJuIChtZGYuZiBcXHUwMDNlXFx1MDAzZSBOT0RFU19QR1NISUZUKSBcXHUwMDI2IE5PREVTX01BU0s7XFxuK1xcdEFTU0VSVF9FWENMVVNJVkVfQklUUyhtZGYtXFx1MDAzZWYsIE5PREVTX01BU0sgXFx1MDAzY1xcdTAwM2MgTk9ERVNfUEdTSElGVCk7XFxuK1xcdHJldHVybiAobWRmLVxcdTAwM2VmIFxcdTAwM2VcXHUwMDNlIE5PREVTX1BHU0hJRlQpIFxcdTAwMjYgTk9ERVNfTUFTSztcXG4gfVxcbisjZWxzZVxcbitzdGF0aWMgaW5saW5lIGludCBtZW1kZXNjX25pZChjb25zdCBtZW1kZXNjX2ZsYWdzX3QgKm1kZilcXG4re1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbisjZW5kaWZcXG4gI2VuZGlmXFxuIFxcbiBzdGF0aWMgaW5saW5lIGludCBwYWdlX3RvX25pZChjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSlcXG4ge1xcbi1cXHRyZXR1cm4gbWVtZGVzY19uaWQoUEZfUE9JU09ORURfQ0hFQ0socGFnZSktXFx1MDAzZWZsYWdzKTtcXG4rXFx0Y29uc3Qgc3RydWN0IHBhZ2UgKnAgPSBQRl9QT0lTT05FRF9DSEVDSyhwYWdlKTtcXG4rXFxuK1xcdHJldHVybiBtZW1kZXNjX25pZChcXHUwMDI2cC1cXHUwMDNlZmxhZ3MpO1xcbiB9XFxuIFxcbiBzdGF0aWMgaW5saW5lIGludCBmb2xpb19uaWQoY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbylcXG4ge1xcbi1cXHRyZXR1cm4gbWVtZGVzY19uaWQoZm9saW8tXFx1MDAzZWZsYWdzKTtcXG4rXFx0cmV0dXJuIG1lbWRlc2NfbmlkKFxcdTAwMjZmb2xpby1cXHUwMDNlZmxhZ3MpO1xcbiB9XFxuIFxcbiAjaWZkZWYgQ09ORklHX05VTUFfQkFMQU5DSU5HXFxuQEAgLTI1NDEsMTIgKzI1NTIsMTMgQEAgc3RhdGljIGlubGluZSB2b2lkIHNldF9wYWdlX3NlY3Rpb24oc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGxvbmcgc2VjdGlvbilcXG4gXFx0cGFnZS1cXHUwMDNlZmxhZ3MuZiB8PSAoc2VjdGlvbiBcXHUwMDI2IFNFQ1RJT05TX01BU0spIFxcdTAwM2NcXHUwMDNjIFNFQ1RJT05TX1BHU0hJRlQ7XFxuIH1cXG4gXFxuLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBtZW1kZXNjX3NlY3Rpb24obWVtZGVzY19mbGFnc190IG1kZilcXG4rc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIG1lbWRlc2Nfc2VjdGlvbihjb25zdCBtZW1kZXNjX2ZsYWdzX3QgKm1kZilcXG4ge1xcbi1cXHRyZXR1cm4gKG1kZi5mIFxcdTAwM2VcXHUwMDNlIFNFQ1RJT05TX1BHU0hJRlQpIFxcdTAwMjYgU0VDVElPTlNfTUFTSztcXG4rXFx0QVNTRVJUX0VYQ0xVU0lWRV9CSVRTKG1kZi1cXHUwMDNlZiwgU0VDVElPTlNfTUFTSyBcXHUwMDNjXFx1MDAzYyBTRUNUSU9OU19QR1NISUZUKTtcXG4rXFx0cmV0dXJuIChtZGYtXFx1MDAzZWYgXFx1MDAzZVxcdTAwM2UgU0VDVElPTlNfUEdTSElGVCkgXFx1MDAyNiBTRUNUSU9OU19NQVNLO1xcbiB9XFxuICNlbHNlIC8qICFTRUNUSU9OX0lOX1BBR0VfRkxBR1MgKi9cXG4tc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIG1lbWRlc2Nfc2VjdGlvbihtZW1kZXNjX2ZsYWdzX3QgbWRmKVxcbitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgbWVtZGVzY19zZWN0aW9uKGNvbnN0IG1lbWRlc2NfZmxhZ3NfdCAqbWRmKVxcbiB7XFxuIFxcdHJldHVybiAwO1xcbiB9XFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbW1faW5saW5lLmggYi9pbmNsdWRlL2xpbnV4L21tX2lubGluZS5oXFxuaW5kZXggYTg0MzBhN2FlMDU0NDcuLmVmY2RkYjk5MjVhZGQ3IDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgvbW1faW5saW5lLmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L21tX2lubGluZS5oXFxuQEAgLTY1MCw3ICs2NTAsNyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgdm1hX2hhc19yZWNlbmN5KGNvbnN0IHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxcbiBzdGF0aWMgaW5saW5lIHNpemVfdCBudW1fcGFnZXNfY29udGlndW91cyhzdHJ1Y3QgcGFnZSAqKnBhZ2VzLCBzaXplX3QgbnJfcGFnZXMpXFxuIHtcXG4gXFx0c3RydWN0IHBhZ2UgKmN1cl9wYWdlID0gcGFnZXNbMF07XFxuLVxcdHVuc2lnbmVkIGxvbmcgc2VjdGlvbiA9IG1lbWRlc2Nfc2VjdGlvbihjdXJfcGFnZS1cXHUwMDNlZmxhZ3MpO1xcbitcXHR1bnNpZ25lZCBsb25nIHNlY3Rpb24gPSBtZW1kZXNjX3NlY3Rpb24oXFx1MDAyNmN1cl9wYWdlLVxcdTAwM2VmbGFncyk7XFxuIFxcdHNpemVfdCBpO1xcbiBcXG4gXFx0Zm9yIChpID0gMTsgaSBcXHUwMDNjIG5yX3BhZ2VzOyBpKyspIHtcXG5AQCAtNjYwLDcgKzY2MCw3IEBAIHN0YXRpYyBpbmxpbmUgc2l6ZV90IG51bV9wYWdlc19jb250aWd1b3VzKHN0cnVjdCBwYWdlICoqcGFnZXMsIHNpemVfdCBucl9wYWdlcylcXG4gXFx0XFx0ICogSW4gdW5wcm9ibGVtYXRpYyBrZXJuZWwgY29uZmlncywgcGFnZV90b19zZWN0aW9uKCkgPT0gMCBhbmRcXG4gXFx0XFx0ICogdGhlIHdob2xlIGNoZWNrIHdpbGwgZ2V0IG9wdGltaXplZCBvdXQuXFxuIFxcdFxcdCAqL1xcbi1cXHRcXHRpZiAobWVtZGVzY19zZWN0aW9uKGN1cl9wYWdlLVxcdTAwM2VmbGFncykgIT0gc2VjdGlvbilcXG4rXFx0XFx0aWYgKG1lbWRlc2Nfc2VjdGlvbihcXHUwMDI2Y3VyX3BhZ2UtXFx1MDAzZWZsYWdzKSAhPSBzZWN0aW9uKVxcbiBcXHRcXHRcXHRicmVhaztcXG4gXFx0fVxcbiBcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tbXpvbmUuaCBiL2luY2x1ZGUvbGludXgvbW16b25lLmhcXG5pbmRleCBjYTI3MTIxODcxNDc1Yy4uZTYwZGFkNTQ2Y2E2OGQgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9tbXpvbmUuaFxcbisrKyBiL2luY2x1ZGUvbGludXgvbW16b25lLmhcXG5AQCAtMTI3MiwzMSArMTI3MiwzMyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgem9uZV9pc19lbXB0eShjb25zdCBzdHJ1Y3Qgem9uZSAqem9uZSlcXG4gI2RlZmluZSBLQVNBTl9UQUdfTUFTS1xcdFxcdCgoMVVMIFxcdTAwM2NcXHUwMDNjIEtBU0FOX1RBR19XSURUSCkgLSAxKVxcbiAjZGVmaW5lIFpPTkVJRF9NQVNLXFx0XFx0KCgxVUwgXFx1MDAzY1xcdTAwM2MgWk9ORUlEX1NISUZUKSAtIDEpXFxuIFxcbi1zdGF0aWMgaW5saW5lIGVudW0gem9uZV90eXBlIG1lbWRlc2Nfem9uZW51bShtZW1kZXNjX2ZsYWdzX3QgZmxhZ3MpXFxuK3N0YXRpYyBpbmxpbmUgZW51bSB6b25lX3R5cGUgbWVtZGVzY196b25lbnVtKGNvbnN0IG1lbWRlc2NfZmxhZ3NfdCAqZmxhZ3MpXFxuIHtcXG4tXFx0QVNTRVJUX0VYQ0xVU0lWRV9CSVRTKGZsYWdzLmYsIFpPTkVTX01BU0sgXFx1MDAzY1xcdTAwM2MgWk9ORVNfUEdTSElGVCk7XFxuLVxcdHJldHVybiAoZmxhZ3MuZiBcXHUwMDNlXFx1MDAzZSBaT05FU19QR1NISUZUKSBcXHUwMDI2IFpPTkVTX01BU0s7XFxuKyNpZiBaT05FU19XSURUSCAhPSAwXFxuK1xcdEFTU0VSVF9FWENMVVNJVkVfQklUUyhmbGFncy1cXHUwMDNlZiwgWk9ORVNfTUFTSyBcXHUwMDNjXFx1MDAzYyBaT05FU19QR1NISUZUKTtcXG4rI2VuZGlmXFxuK1xcdHJldHVybiAoZmxhZ3MtXFx1MDAzZWYgXFx1MDAzZVxcdTAwM2UgWk9ORVNfUEdTSElGVCkgXFx1MDAyNiBaT05FU19NQVNLO1xcbiB9XFxuIFxcbiBzdGF0aWMgaW5saW5lIGVudW0gem9uZV90eXBlIHBhZ2Vfem9uZW51bShjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSlcXG4ge1xcbi1cXHRyZXR1cm4gbWVtZGVzY196b25lbnVtKHBhZ2UtXFx1MDAzZWZsYWdzKTtcXG4rXFx0cmV0dXJuIG1lbWRlc2Nfem9uZW51bShcXHUwMDI2cGFnZS1cXHUwMDNlZmxhZ3MpO1xcbiB9XFxuIFxcbiBzdGF0aWMgaW5saW5lIGVudW0gem9uZV90eXBlIGZvbGlvX3pvbmVudW0oY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbylcXG4ge1xcbi1cXHRyZXR1cm4gbWVtZGVzY196b25lbnVtKGZvbGlvLVxcdTAwM2VmbGFncyk7XFxuK1xcdHJldHVybiBtZW1kZXNjX3pvbmVudW0oXFx1MDAyNmZvbGlvLVxcdTAwM2VmbGFncyk7XFxuIH1cXG4gXFxuICNpZmRlZiBDT05GSUdfWk9ORV9ERVZJQ0VcXG4tc3RhdGljIGlubGluZSBib29sIG1lbWRlc2NfaXNfem9uZV9kZXZpY2UobWVtZGVzY19mbGFnc190IG1kZilcXG4rc3RhdGljIGlubGluZSBib29sIG1lbWRlc2NfaXNfem9uZV9kZXZpY2UoY29uc3QgbWVtZGVzY19mbGFnc190ICptZGYpXFxuIHtcXG4gXFx0cmV0dXJuIG1lbWRlc2Nfem9uZW51bShtZGYpID09IFpPTkVfREVWSUNFO1xcbiB9XFxuIFxcbiBzdGF0aWMgaW5saW5lIHN0cnVjdCBkZXZfcGFnZW1hcCAqcGFnZV9wZ21hcChjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSlcXG4ge1xcbi1cXHRWTV9XQVJOX09OX09OQ0VfUEFHRSghbWVtZGVzY19pc196b25lX2RldmljZShwYWdlLVxcdTAwM2VmbGFncyksIHBhZ2UpO1xcbitcXHRWTV9XQVJOX09OX09OQ0VfUEFHRSghbWVtZGVzY19pc196b25lX2RldmljZShcXHUwMDI2cGFnZS1cXHUwMDNlZmxhZ3MpLCBwYWdlKTtcXG4gXFx0cmV0dXJuIHBhZ2VfZm9saW8ocGFnZSktXFx1MDAzZXBnbWFwO1xcbiB9XFxuIFxcbkBAIC0xMzExLDkgKzEzMTMsOSBAQCBzdGF0aWMgaW5saW5lIHN0cnVjdCBkZXZfcGFnZW1hcCAqcGFnZV9wZ21hcChjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSlcXG4gc3RhdGljIGlubGluZSBib29sIHpvbmVfZGV2aWNlX3BhZ2VzX2hhdmVfc2FtZV9wZ21hcChjb25zdCBzdHJ1Y3QgcGFnZSAqYSxcXG4gXFx0XFx0XFx0XFx0XFx0XFx0ICAgICBjb25zdCBzdHJ1Y3QgcGFnZSAqYilcXG4ge1xcbi1cXHRpZiAobWVtZGVzY19pc196b25lX2RldmljZShhLVxcdTAwM2VmbGFncykgIT0gbWVtZGVzY19pc196b25lX2RldmljZShiLVxcdTAwM2VmbGFncykpXFxuK1xcdGlmIChtZW1kZXNjX2lzX3pvbmVfZGV2aWNlKFxcdTAwMjZhLVxcdTAwM2VmbGFncykgIT0gbWVtZGVzY19pc196b25lX2RldmljZShcXHUwMDI2Yi1cXHUwMDNlZmxhZ3MpKVxcbiBcXHRcXHRyZXR1cm4gZmFsc2U7XFxuLVxcdGlmICghbWVtZGVzY19pc196b25lX2RldmljZShhLVxcdTAwM2VmbGFncykpXFxuK1xcdGlmICghbWVtZGVzY19pc196b25lX2RldmljZShcXHUwMDI2YS1cXHUwMDNlZmxhZ3MpKVxcbiBcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4gXFx0cmV0dXJuIHBhZ2VfcGdtYXAoYSkgPT0gcGFnZV9wZ21hcChiKTtcXG4gfVxcbkBAIC0xMzIxLDcgKzEzMjMsNyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgem9uZV9kZXZpY2VfcGFnZXNfaGF2ZV9zYW1lX3BnbWFwKGNvbnN0IHN0cnVjdCBwYWdlICphLFxcbiBleHRlcm4gdm9pZCBtZW1tYXBfaW5pdF96b25lX2RldmljZShzdHJ1Y3Qgem9uZSAqLCB1bnNpZ25lZCBsb25nLFxcbiBcXHRcXHRcXHRcXHQgICAgdW5zaWduZWQgbG9uZywgc3RydWN0IGRldl9wYWdlbWFwICopO1xcbiAjZWxzZVxcbi1zdGF0aWMgaW5saW5lIGJvb2wgbWVtZGVzY19pc196b25lX2RldmljZShtZW1kZXNjX2ZsYWdzX3QgbWRmKVxcbitzdGF0aWMgaW5saW5lIGJvb2wgbWVtZGVzY19pc196b25lX2RldmljZShjb25zdCBtZW1kZXNjX2ZsYWdzX3QgKm1kZilcXG4ge1xcbiBcXHRyZXR1cm4gZmFsc2U7XFxuIH1cXG5AQCAtMTMzOCwxMiArMTM0MCwxMiBAQCBzdGF0aWMgaW5saW5lIHN0cnVjdCBkZXZfcGFnZW1hcCAqcGFnZV9wZ21hcChjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSlcXG4gXFxuIHN0YXRpYyBpbmxpbmUgYm9vbCBpc196b25lX2RldmljZV9wYWdlKGNvbnN0IHN0cnVjdCBwYWdlICpwYWdlKVxcbiB7XFxuLVxcdHJldHVybiBtZW1kZXNjX2lzX3pvbmVfZGV2aWNlKHBhZ2UtXFx1MDAzZWZsYWdzKTtcXG4rXFx0cmV0dXJuIG1lbWRlc2NfaXNfem9uZV9kZXZpY2UoXFx1MDAyNnBhZ2UtXFx1MDAzZWZsYWdzKTtcXG4gfVxcbiBcXG4gc3RhdGljIGlubGluZSBib29sIGZvbGlvX2lzX3pvbmVfZGV2aWNlKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuIHtcXG4tXFx0cmV0dXJuIG1lbWRlc2NfaXNfem9uZV9kZXZpY2UoZm9saW8tXFx1MDAzZWZsYWdzKTtcXG4rXFx0cmV0dXJuIG1lbWRlc2NfaXNfem9uZV9kZXZpY2UoXFx1MDAyNmZvbGlvLVxcdTAwM2VmbGFncyk7XFxuIH1cXG4gXFxuIHN0YXRpYyBpbmxpbmUgYm9vbCBpc196b25lX21vdmFibGVfcGFnZShjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSlcXG5kaWZmIC0tZ2l0IGEvbW0vcGFnZV9hbGxvYy5jIGIvbW0vcGFnZV9hbGxvYy5jXFxuaW5kZXggZWU5MDJhNDY4YzJmNWIuLjAyMGE5N2NhMDE4ZTk5IDEwMDY0NFxcbi0tLSBhL21tL3BhZ2VfYWxsb2MuY1xcbisrKyBiL21tL3BhZ2VfYWxsb2MuY1xcbkBAIC02OTA0LDE1ICs2OTA0LDE1IEBAIHN0YXRpYyB2b2lkIF9fZnJlZV9jb250aWdfcmFuZ2VfY29tbW9uKHVuc2lnbmVkIGxvbmcgcGZuLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzXFxuIFxcdFxcdFxcdGNvbnRpbnVlO1xcbiBcXHRcXHR9XFxuIFxcbi1cXHRcXHRpZiAoc3RhcnQgXFx1MDAyNlxcdTAwMjYgbWVtZGVzY19zZWN0aW9uKHBhZ2UtXFx1MDAzZWZsYWdzKSAhPSBzdGFydF9zZWMpIHtcXG4rXFx0XFx0aWYgKHN0YXJ0IFxcdTAwMjZcXHUwMDI2IG1lbWRlc2Nfc2VjdGlvbihcXHUwMDI2cGFnZS1cXHUwMDNlZmxhZ3MpICE9IHN0YXJ0X3NlYykge1xcbiBcXHRcXHRcXHRmcmVlX3ByZXBhcmVkX2NvbnRpZ19yYW5nZShzdGFydCwgaSAtIG5yX3N0YXJ0KTtcXG4gXFx0XFx0XFx0c3RhcnQgPSBwYWdlO1xcbiBcXHRcXHRcXHRucl9zdGFydCA9IGk7XFxuLVxcdFxcdFxcdHN0YXJ0X3NlYyA9IG1lbWRlc2Nfc2VjdGlvbihwYWdlLVxcdTAwM2VmbGFncyk7XFxuK1xcdFxcdFxcdHN0YXJ0X3NlYyA9IG1lbWRlc2Nfc2VjdGlvbihcXHUwMDI2cGFnZS1cXHUwMDNlZmxhZ3MpO1xcbiBcXHRcXHR9IGVsc2UgaWYgKCFzdGFydCkge1xcbiBcXHRcXHRcXHRzdGFydCA9IHBhZ2U7XFxuIFxcdFxcdFxcdG5yX3N0YXJ0ID0gaTtcXG4tXFx0XFx0XFx0c3RhcnRfc2VjID0gbWVtZGVzY19zZWN0aW9uKHBhZ2UtXFx1MDAzZWZsYWdzKTtcXG4rXFx0XFx0XFx0c3RhcnRfc2VjID0gbWVtZGVzY19zZWN0aW9uKFxcdTAwMjZwYWdlLVxcdTAwM2VmbGFncyk7XFxuIFxcdFxcdH1cXG4gXFx0fVxcbiBcXG5kaWZmIC0tZ2l0IGEvbW0vc2xhYi5oIGIvbW0vc2xhYi5oXFxuaW5kZXggMjgxYTY1MjMzNzk1ZDYuLjlkZWQzMTk0OTVhMDcwIDEwMDY0NFxcbi0tLSBhL21tL3NsYWIuaFxcbisrKyBiL21tL3NsYWIuaFxcbkBAIC0xNzksNyArMTc5LDcgQEAgc3RhdGljIGlubGluZSB2b2lkICpzbGFiX2FkZHJlc3MoY29uc3Qgc3RydWN0IHNsYWIgKnNsYWIpXFxuIFxcbiBzdGF0aWMgaW5saW5lIGludCBzbGFiX25pZChjb25zdCBzdHJ1Y3Qgc2xhYiAqc2xhYilcXG4ge1xcbi1cXHRyZXR1cm4gbWVtZGVzY19uaWQoc2xhYi1cXHUwMDNlZmxhZ3MpO1xcbitcXHRyZXR1cm4gbWVtZGVzY19uaWQoXFx1MDAyNnNsYWItXFx1MDAzZWZsYWdzKTtcXG4gfVxcbiBcXG4gc3RhdGljIGlubGluZSBwZ19kYXRhX3QgKnNsYWJfcGdkYXQoY29uc3Qgc3RydWN0IHNsYWIgKnNsYWIpXFxuZGlmZiAtLWdpdCBhL21tL3NwYXJzZS5jIGIvbW0vc3BhcnNlLmNcXG5pbmRleCAxNmFjNmRmM2M4OWZhMi4uOGUzODQ3NzY0NTEzMTkgMTAwNjQ0XFxuLS0tIGEvbW0vc3BhcnNlLmNcXG4rKysgYi9tbS9zcGFyc2UuY1xcbkBAIC00Myw3ICs0Myw3IEBAIHN0YXRpYyB1OCBzZWN0aW9uX3RvX25vZGVfdGFibGVbTlJfTUVNX1NFQ1RJT05TXSBfX2NhY2hlbGluZV9hbGlnbmVkO1xcbiBzdGF0aWMgdTE2IHNlY3Rpb25fdG9fbm9kZV90YWJsZVtOUl9NRU1fU0VDVElPTlNdIF9fY2FjaGVsaW5lX2FsaWduZWQ7XFxuICNlbmRpZlxcbiBcXG4taW50IG1lbWRlc2NfbmlkKG1lbWRlc2NfZmxhZ3NfdCBtZGYpXFxuK2ludCBtZW1kZXNjX25pZChjb25zdCBtZW1kZXNjX2ZsYWdzX3QgKm1kZilcXG4ge1xcbiBcXHRyZXR1cm4gc2VjdGlvbl90b19ub2RlX3RhYmxlW21lbWRlc2Nfc2VjdGlvbihtZGYpXTtcXG4gfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wOFQxMjozNjowNy45MDUxODAxNzNaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU3MzM5MTA0NDU5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpcyBhIHB1cmUgcmVmYWN0b3JpbmcgdGhhdCBjaGFuZ2VzIGBtZW1kZXNjX2ZsYWdzX3RgIHRvIGJlIHBhc3NlZCBieSBwb2ludGVyIGluc3RlYWQgb2YgYnkgdmFsdWUsIGFuZCBhZGRzL2ZpeGVzIEtDU0FOIGFzc2VydGlvbnMgKGBBU1NFUlRfRVhDTFVTSVZFX0JJVFNgKS4gSXQgZG9lcyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIHRoZSBleGVjdXRpb24gZmxvdyBvZiB0aGUga2VybmVsLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdFxuICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LFxuICAgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA1YWQxZjk1M2RlMmNiOTdlNzRlZmRkMjdkNWVmZWJjNjg1ZWMzNDAyXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBKdWwgOCAxMjozNjowNSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWdlbmVyaWMvbWVtb3J5X21vZGVsLmggYi9pbmNsdWRlL2FzbS1nZW5lcmljL21lbW9yeV9tb2RlbC5oXG5pbmRleCBlZmE2NjEwYWNiYzc5Ny4uZjg0MDRiYzc3NzNjMmIgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2FzbS1nZW5lcmljL21lbW9yeV9tb2RlbC5oXG4rKysgYi9pbmNsdWRlL2FzbS1nZW5lcmljL21lbW9yeV9tb2RlbC5oXG5AQCAtNTMsNyArNTMsNyBAQCBzdGF0aWMgaW5saW5lIGludCBwZm5fdmFsaWQodW5zaWduZWQgbG9uZyBwZm4pXG4gICovXG4gI2RlZmluZSBfX3BhZ2VfdG9fcGZuKHBnKVx0XHRcdFx0XHRcXFxuICh7XHRjb25zdCBzdHJ1Y3QgcGFnZSAqX19wZyA9IChwZyk7XHRcdFx0XHRcXFxuLVx0aW50IF9fc2VjID0gbWVtZGVzY19zZWN0aW9uKF9fcGctXHUwMDNlZmxhZ3MpO1x0XHRcXFxuK1x0aW50IF9fc2VjID0gbWVtZGVzY19zZWN0aW9uKFx1MDAyNl9fcGctXHUwMDNlZmxhZ3MpO1x0XHRcXFxuIFx0KHVuc2lnbmVkIGxvbmcpKF9fcGcgLSBfX3NlY3Rpb25fbWVtX21hcF9hZGRyKF9fbnJfdG9fc2VjdGlvbihfX3NlYykpKTtcdFxcXG4gfSlcbiBcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21tLmggYi9pbmNsdWRlL2xpbnV4L21tLmhcbmluZGV4IDQ4NWRmOWMyZGJkZGIzLi4xZWY5YjBiZDdmZDMzNiAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvbW0uaFxuKysrIGIvaW5jbHVkZS9saW51eC9tbS5oXG5AQCAtMzcsNiArMzcsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2JpdG1hcC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvYml0b3BzLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9pb21tdS1kZWJ1Zy1wYWdlYWxsb2MuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2tjc2FuLWNoZWNrcy5oXHUwMDNlXG4gXG4gc3RydWN0IG1lbXBvbGljeTtcbiBzdHJ1Y3QgYW5vbl92bWE7XG5AQCAtMjI4NiwyMiArMjI4NywzMiBAQCBzdGF0aWMgaW5saW5lIGludCBwYWdlX3pvbmVfaWQoc3RydWN0IHBhZ2UgKnBhZ2UpXG4gfVxuIFxuICNpZmRlZiBOT0RFX05PVF9JTl9QQUdFX0ZMQUdTXG4taW50IG1lbWRlc2NfbmlkKG1lbWRlc2NfZmxhZ3NfdCBtZGYpO1xuK2ludCBtZW1kZXNjX25pZChjb25zdCBtZW1kZXNjX2ZsYWdzX3QgKm1kZik7XG4gI2Vsc2Vcbi1zdGF0aWMgaW5saW5lIGludCBtZW1kZXNjX25pZChtZW1kZXNjX2ZsYWdzX3QgbWRmKVxuKyNpZmRlZiBDT05GSUdfTlVNQVxuK3N0YXRpYyBpbmxpbmUgaW50IG1lbWRlc2NfbmlkKGNvbnN0IG1lbWRlc2NfZmxhZ3NfdCAqbWRmKVxuIHtcbi1cdHJldHVybiAobWRmLmYgXHUwMDNlXHUwMDNlIE5PREVTX1BHU0hJRlQpIFx1MDAyNiBOT0RFU19NQVNLO1xuK1x0QVNTRVJUX0VYQ0xVU0lWRV9CSVRTKG1kZi1cdTAwM2VmLCBOT0RFU19NQVNLIFx1MDAzY1x1MDAzYyBOT0RFU19QR1NISUZUKTtcbitcdHJldHVybiAobWRmLVx1MDAzZWYgXHUwMDNlXHUwMDNlIE5PREVTX1BHU0hJRlQpIFx1MDAyNiBOT0RFU19NQVNLO1xuIH1cbisjZWxzZVxuK3N0YXRpYyBpbmxpbmUgaW50IG1lbWRlc2NfbmlkKGNvbnN0IG1lbWRlc2NfZmxhZ3NfdCAqbWRmKVxuK3tcbitcdHJldHVybiAwO1xuK31cbisjZW5kaWZcbiAjZW5kaWZcbiBcbiBzdGF0aWMgaW5saW5lIGludCBwYWdlX3RvX25pZChjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSlcbiB7XG4tXHRyZXR1cm4gbWVtZGVzY19uaWQoUEZfUE9JU09ORURfQ0hFQ0socGFnZSktXHUwMDNlZmxhZ3MpO1xuK1x0Y29uc3Qgc3RydWN0IHBhZ2UgKnAgPSBQRl9QT0lTT05FRF9DSEVDSyhwYWdlKTtcbitcbitcdHJldHVybiBtZW1kZXNjX25pZChcdTAwMjZwLVx1MDAzZWZsYWdzKTtcbiB9XG4gXG4gc3RhdGljIGlubGluZSBpbnQgZm9saW9fbmlkKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8pXG4ge1xuLVx0cmV0dXJuIG1lbWRlc2NfbmlkKGZvbGlvLVx1MDAzZWZsYWdzKTtcbitcdHJldHVybiBtZW1kZXNjX25pZChcdTAwMjZmb2xpby1cdTAwM2VmbGFncyk7XG4gfVxuIFxuICNpZmRlZiBDT05GSUdfTlVNQV9CQUxBTkNJTkdcbkBAIC0yNTQxLDEyICsyNTUyLDEzIEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBzZXRfcGFnZV9zZWN0aW9uKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBsb25nIHNlY3Rpb24pXG4gXHRwYWdlLVx1MDAzZWZsYWdzLmYgfD0gKHNlY3Rpb24gXHUwMDI2IFNFQ1RJT05TX01BU0spIFx1MDAzY1x1MDAzYyBTRUNUSU9OU19QR1NISUZUO1xuIH1cbiBcbi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgbWVtZGVzY19zZWN0aW9uKG1lbWRlc2NfZmxhZ3NfdCBtZGYpXG4rc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIG1lbWRlc2Nfc2VjdGlvbihjb25zdCBtZW1kZXNjX2ZsYWdzX3QgKm1kZilcbiB7XG4tXHRyZXR1cm4gKG1kZi5mIFx1MDAzZVx1MDAzZSBTRUNUSU9OU19QR1NISUZUKSBcdTAwMjYgU0VDVElPTlNfTUFTSztcbitcdEFTU0VSVF9FWENMVVNJVkVfQklUUyhtZGYtXHUwMDNlZiwgU0VDVElPTlNfTUFTSyBcdTAwM2NcdTAwM2MgU0VDVElPTlNfUEdTSElGVCk7XG4rXHRyZXR1cm4gKG1kZi1cdTAwM2VmIFx1MDAzZVx1MDAzZSBTRUNUSU9OU19QR1NISUZUKSBcdTAwMjYgU0VDVElPTlNfTUFTSztcbiB9XG4gI2Vsc2UgLyogIVNFQ1RJT05fSU5fUEFHRV9GTEFHUyAqL1xuLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBtZW1kZXNjX3NlY3Rpb24obWVtZGVzY19mbGFnc190IG1kZilcbitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgbWVtZGVzY19zZWN0aW9uKGNvbnN0IG1lbWRlc2NfZmxhZ3NfdCAqbWRmKVxuIHtcbiBcdHJldHVybiAwO1xuIH1cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21tX2lubGluZS5oIGIvaW5jbHVkZS9saW51eC9tbV9pbmxpbmUuaFxuaW5kZXggYTg0MzBhN2FlMDU0NDcuLmVmY2RkYjk5MjVhZGQ3IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9tbV9pbmxpbmUuaFxuKysrIGIvaW5jbHVkZS9saW51eC9tbV9pbmxpbmUuaFxuQEAgLTY1MCw3ICs2NTAsNyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgdm1hX2hhc19yZWNlbmN5KGNvbnN0IHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxuIHN0YXRpYyBpbmxpbmUgc2l6ZV90IG51bV9wYWdlc19jb250aWd1b3VzKHN0cnVjdCBwYWdlICoqcGFnZXMsIHNpemVfdCBucl9wYWdlcylcbiB7XG4gXHRzdHJ1Y3QgcGFnZSAqY3VyX3BhZ2UgPSBwYWdlc1swXTtcbi1cdHVuc2lnbmVkIGxvbmcgc2VjdGlvbiA9IG1lbWRlc2Nfc2VjdGlvbihjdXJfcGFnZS1cdTAwM2VmbGFncyk7XG4rXHR1bnNpZ25lZCBsb25nIHNlY3Rpb24gPSBtZW1kZXNjX3NlY3Rpb24oXHUwMDI2Y3VyX3BhZ2UtXHUwMDNlZmxhZ3MpO1xuIFx0c2l6ZV90IGk7XG4gXG4gXHRmb3IgKGkgPSAxOyBpIFx1MDAzYyBucl9wYWdlczsgaSsrKSB7XG5AQCAtNjYwLDcgKzY2MCw3IEBAIHN0YXRpYyBpbmxpbmUgc2l6ZV90IG51bV9wYWdlc19jb250aWd1b3VzKHN0cnVjdCBwYWdlICoqcGFnZXMsIHNpemVfdCBucl9wYWdlcylcbiBcdFx0ICogSW4gdW5wcm9ibGVtYXRpYyBrZXJuZWwgY29uZmlncywgcGFnZV90b19zZWN0aW9uKCkgPT0gMCBhbmRcbiBcdFx0ICogdGhlIHdob2xlIGNoZWNrIHdpbGwgZ2V0IG9wdGltaXplZCBvdXQuXG4gXHRcdCAqL1xuLVx0XHRpZiAobWVtZGVzY19zZWN0aW9uKGN1cl9wYWdlLVx1MDAzZWZsYWdzKSAhPSBzZWN0aW9uKVxuK1x0XHRpZiAobWVtZGVzY19zZWN0aW9uKFx1MDAyNmN1cl9wYWdlLVx1MDAzZWZsYWdzKSAhPSBzZWN0aW9uKVxuIFx0XHRcdGJyZWFrO1xuIFx0fVxuIFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbW16b25lLmggYi9pbmNsdWRlL2xpbnV4L21tem9uZS5oXG5pbmRleCBjYTI3MTIxODcxNDc1Yy4uZTYwZGFkNTQ2Y2E2OGQgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L21tem9uZS5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L21tem9uZS5oXG5AQCAtMTI3MiwzMSArMTI3MiwzMyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgem9uZV9pc19lbXB0eShjb25zdCBzdHJ1Y3Qgem9uZSAqem9uZSlcbiAjZGVmaW5lIEtBU0FOX1RBR19NQVNLXHRcdCgoMVVMIFx1MDAzY1x1MDAzYyBLQVNBTl9UQUdfV0lEVEgpIC0gMSlcbiAjZGVmaW5lIFpPTkVJRF9NQVNLXHRcdCgoMVVMIFx1MDAzY1x1MDAzYyBaT05FSURfU0hJRlQpIC0gMSlcbiBcbi1zdGF0aWMgaW5saW5lIGVudW0gem9uZV90eXBlIG1lbWRlc2Nfem9uZW51bShtZW1kZXNjX2ZsYWdzX3QgZmxhZ3MpXG4rc3RhdGljIGlubGluZSBlbnVtIHpvbmVfdHlwZSBtZW1kZXNjX3pvbmVudW0oY29uc3QgbWVtZGVzY19mbGFnc190ICpmbGFncylcbiB7XG4tXHRBU1NFUlRfRVhDTFVTSVZFX0JJVFMoZmxhZ3MuZiwgWk9ORVNfTUFTSyBcdTAwM2NcdTAwM2MgWk9ORVNfUEdTSElGVCk7XG4tXHRyZXR1cm4gKGZsYWdzLmYgXHUwMDNlXHUwMDNlIFpPTkVTX1BHU0hJRlQpIFx1MDAyNiBaT05FU19NQVNLO1xuKyNpZiBaT05FU19XSURUSCAhPSAwXG4rXHRBU1NFUlRfRVhDTFVTSVZFX0JJVFMoZmxhZ3MtXHUwMDNlZiwgWk9ORVNfTUFTSyBcdTAwM2NcdTAwM2MgWk9ORVNfUEdTSElGVCk7XG4rI2VuZGlmXG4rXHRyZXR1cm4gKGZsYWdzLVx1MDAzZWYgXHUwMDNlXHUwMDNlIFpPTkVTX1BHU0hJRlQpIFx1MDAyNiBaT05FU19NQVNLO1xuIH1cbiBcbiBzdGF0aWMgaW5saW5lIGVudW0gem9uZV90eXBlIHBhZ2Vfem9uZW51bShjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSlcbiB7XG4tXHRyZXR1cm4gbWVtZGVzY196b25lbnVtKHBhZ2UtXHUwMDNlZmxhZ3MpO1xuK1x0cmV0dXJuIG1lbWRlc2Nfem9uZW51bShcdTAwMjZwYWdlLVx1MDAzZWZsYWdzKTtcbiB9XG4gXG4gc3RhdGljIGlubGluZSBlbnVtIHpvbmVfdHlwZSBmb2xpb196b25lbnVtKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8pXG4ge1xuLVx0cmV0dXJuIG1lbWRlc2Nfem9uZW51bShmb2xpby1cdTAwM2VmbGFncyk7XG4rXHRyZXR1cm4gbWVtZGVzY196b25lbnVtKFx1MDAyNmZvbGlvLVx1MDAzZWZsYWdzKTtcbiB9XG4gXG4gI2lmZGVmIENPTkZJR19aT05FX0RFVklDRVxuLXN0YXRpYyBpbmxpbmUgYm9vbCBtZW1kZXNjX2lzX3pvbmVfZGV2aWNlKG1lbWRlc2NfZmxhZ3NfdCBtZGYpXG4rc3RhdGljIGlubGluZSBib29sIG1lbWRlc2NfaXNfem9uZV9kZXZpY2UoY29uc3QgbWVtZGVzY19mbGFnc190ICptZGYpXG4ge1xuIFx0cmV0dXJuIG1lbWRlc2Nfem9uZW51bShtZGYpID09IFpPTkVfREVWSUNFO1xuIH1cbiBcbiBzdGF0aWMgaW5saW5lIHN0cnVjdCBkZXZfcGFnZW1hcCAqcGFnZV9wZ21hcChjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSlcbiB7XG4tXHRWTV9XQVJOX09OX09OQ0VfUEFHRSghbWVtZGVzY19pc196b25lX2RldmljZShwYWdlLVx1MDAzZWZsYWdzKSwgcGFnZSk7XG4rXHRWTV9XQVJOX09OX09OQ0VfUEFHRSghbWVtZGVzY19pc196b25lX2RldmljZShcdTAwMjZwYWdlLVx1MDAzZWZsYWdzKSwgcGFnZSk7XG4gXHRyZXR1cm4gcGFnZV9mb2xpbyhwYWdlKS1cdTAwM2VwZ21hcDtcbiB9XG4gXG5AQCAtMTMxMSw5ICsxMzEzLDkgQEAgc3RhdGljIGlubGluZSBzdHJ1Y3QgZGV2X3BhZ2VtYXAgKnBhZ2VfcGdtYXAoY29uc3Qgc3RydWN0IHBhZ2UgKnBhZ2UpXG4gc3RhdGljIGlubGluZSBib29sIHpvbmVfZGV2aWNlX3BhZ2VzX2hhdmVfc2FtZV9wZ21hcChjb25zdCBzdHJ1Y3QgcGFnZSAqYSxcbiBcdFx0XHRcdFx0XHQgICAgIGNvbnN0IHN0cnVjdCBwYWdlICpiKVxuIHtcbi1cdGlmIChtZW1kZXNjX2lzX3pvbmVfZGV2aWNlKGEtXHUwMDNlZmxhZ3MpICE9IG1lbWRlc2NfaXNfem9uZV9kZXZpY2UoYi1cdTAwM2VmbGFncykpXG4rXHRpZiAobWVtZGVzY19pc196b25lX2RldmljZShcdTAwMjZhLVx1MDAzZWZsYWdzKSAhPSBtZW1kZXNjX2lzX3pvbmVfZGV2aWNlKFx1MDAyNmItXHUwMDNlZmxhZ3MpKVxuIFx0XHRyZXR1cm4gZmFsc2U7XG4tXHRpZiAoIW1lbWRlc2NfaXNfem9uZV9kZXZpY2UoYS1cdTAwM2VmbGFncykpXG4rXHRpZiAoIW1lbWRlc2NfaXNfem9uZV9kZXZpY2UoXHUwMDI2YS1cdTAwM2VmbGFncykpXG4gXHRcdHJldHVybiB0cnVlO1xuIFx0cmV0dXJuIHBhZ2VfcGdtYXAoYSkgPT0gcGFnZV9wZ21hcChiKTtcbiB9XG5AQCAtMTMyMSw3ICsxMzIzLDcgQEAgc3RhdGljIGlubGluZSBib29sIHpvbmVfZGV2aWNlX3BhZ2VzX2hhdmVfc2FtZV9wZ21hcChjb25zdCBzdHJ1Y3QgcGFnZSAqYSxcbiBleHRlcm4gdm9pZCBtZW1tYXBfaW5pdF96b25lX2RldmljZShzdHJ1Y3Qgem9uZSAqLCB1bnNpZ25lZCBsb25nLFxuIFx0XHRcdFx0ICAgIHVuc2lnbmVkIGxvbmcsIHN0cnVjdCBkZXZfcGFnZW1hcCAqKTtcbiAjZWxzZVxuLXN0YXRpYyBpbmxpbmUgYm9vbCBtZW1kZXNjX2lzX3pvbmVfZGV2aWNlKG1lbWRlc2NfZmxhZ3NfdCBtZGYpXG4rc3RhdGljIGlubGluZSBib29sIG1lbWRlc2NfaXNfem9uZV9kZXZpY2UoY29uc3QgbWVtZGVzY19mbGFnc190ICptZGYpXG4ge1xuIFx0cmV0dXJuIGZhbHNlO1xuIH1cbkBAIC0xMzM4LDEyICsxMzQwLDEyIEBAIHN0YXRpYyBpbmxpbmUgc3RydWN0IGRldl9wYWdlbWFwICpwYWdlX3BnbWFwKGNvbnN0IHN0cnVjdCBwYWdlICpwYWdlKVxuIFxuIHN0YXRpYyBpbmxpbmUgYm9vbCBpc196b25lX2RldmljZV9wYWdlKGNvbnN0IHN0cnVjdCBwYWdlICpwYWdlKVxuIHtcbi1cdHJldHVybiBtZW1kZXNjX2lzX3pvbmVfZGV2aWNlKHBhZ2UtXHUwMDNlZmxhZ3MpO1xuK1x0cmV0dXJuIG1lbWRlc2NfaXNfem9uZV9kZXZpY2UoXHUwMDI2cGFnZS1cdTAwM2VmbGFncyk7XG4gfVxuIFxuIHN0YXRpYyBpbmxpbmUgYm9vbCBmb2xpb19pc196b25lX2RldmljZShjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIHtcbi1cdHJldHVybiBtZW1kZXNjX2lzX3pvbmVfZGV2aWNlKGZvbGlvLVx1MDAzZWZsYWdzKTtcbitcdHJldHVybiBtZW1kZXNjX2lzX3pvbmVfZGV2aWNlKFx1MDAyNmZvbGlvLVx1MDAzZWZsYWdzKTtcbiB9XG4gXG4gc3RhdGljIGlubGluZSBib29sIGlzX3pvbmVfbW92YWJsZV9wYWdlKGNvbnN0IHN0cnVjdCBwYWdlICpwYWdlKVxuZGlmZiAtLWdpdCBhL21tL3BhZ2VfYWxsb2MuYyBiL21tL3BhZ2VfYWxsb2MuY1xuaW5kZXggZWU5MDJhNDY4YzJmNWIuLjAyMGE5N2NhMDE4ZTk5IDEwMDY0NFxuLS0tIGEvbW0vcGFnZV9hbGxvYy5jXG4rKysgYi9tbS9wYWdlX2FsbG9jLmNcbkBAIC02OTA0LDE1ICs2OTA0LDE1IEBAIHN0YXRpYyB2b2lkIF9fZnJlZV9jb250aWdfcmFuZ2VfY29tbW9uKHVuc2lnbmVkIGxvbmcgcGZuLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzXG4gXHRcdFx0Y29udGludWU7XG4gXHRcdH1cbiBcbi1cdFx0aWYgKHN0YXJ0IFx1MDAyNlx1MDAyNiBtZW1kZXNjX3NlY3Rpb24ocGFnZS1cdTAwM2VmbGFncykgIT0gc3RhcnRfc2VjKSB7XG4rXHRcdGlmIChzdGFydCBcdTAwMjZcdTAwMjYgbWVtZGVzY19zZWN0aW9uKFx1MDAyNnBhZ2UtXHUwMDNlZmxhZ3MpICE9IHN0YXJ0X3NlYykge1xuIFx0XHRcdGZyZWVfcHJlcGFyZWRfY29udGlnX3JhbmdlKHN0YXJ0LCBpIC0gbnJfc3RhcnQpO1xuIFx0XHRcdHN0YXJ0ID0gcGFnZTtcbiBcdFx0XHRucl9zdGFydCA9IGk7XG4tXHRcdFx0c3RhcnRfc2VjID0gbWVtZGVzY19zZWN0aW9uKHBhZ2UtXHUwMDNlZmxhZ3MpO1xuK1x0XHRcdHN0YXJ0X3NlYyA9IG1lbWRlc2Nfc2VjdGlvbihcdTAwMjZwYWdlLVx1MDAzZWZsYWdzKTtcbiBcdFx0fSBlbHNlIGlmICghc3RhcnQpIHtcbiBcdFx0XHRzdGFydCA9IHBhZ2U7XG4gXHRcdFx0bnJfc3RhcnQgPSBpO1xuLVx0XHRcdHN0YXJ0X3NlYyA9IG1lbWRlc2Nfc2VjdGlvbihwYWdlLVx1MDAzZWZsYWdzKTtcbitcdFx0XHRzdGFydF9zZWMgPSBtZW1kZXNjX3NlY3Rpb24oXHUwMDI2cGFnZS1cdTAwM2VmbGFncyk7XG4gXHRcdH1cbiBcdH1cbiBcbmRpZmYgLS1naXQgYS9tbS9zbGFiLmggYi9tbS9zbGFiLmhcbmluZGV4IDI4MWE2NTIzMzc5NWQ2Li45ZGVkMzE5NDk1YTA3MCAxMDA2NDRcbi0tLSBhL21tL3NsYWIuaFxuKysrIGIvbW0vc2xhYi5oXG5AQCAtMTc5LDcgKzE3OSw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCAqc2xhYl9hZGRyZXNzKGNvbnN0IHN0cnVjdCBzbGFiICpzbGFiKVxuIFxuIHN0YXRpYyBpbmxpbmUgaW50IHNsYWJfbmlkKGNvbnN0IHN0cnVjdCBzbGFiICpzbGFiKVxuIHtcbi1cdHJldHVybiBtZW1kZXNjX25pZChzbGFiLVx1MDAzZWZsYWdzKTtcbitcdHJldHVybiBtZW1kZXNjX25pZChcdTAwMjZzbGFiLVx1MDAzZWZsYWdzKTtcbiB9XG4gXG4gc3RhdGljIGlubGluZSBwZ19kYXRhX3QgKnNsYWJfcGdkYXQoY29uc3Qgc3RydWN0IHNsYWIgKnNsYWIpXG5kaWZmIC0tZ2l0IGEvbW0vc3BhcnNlLmMgYi9tbS9zcGFyc2UuY1xuaW5kZXggMTZhYzZkZjNjODlmYTIuLjhlMzg0Nzc2NDUxMzE5IDEwMDY0NFxuLS0tIGEvbW0vc3BhcnNlLmNcbisrKyBiL21tL3NwYXJzZS5jXG5AQCAtNDMsNyArNDMsNyBAQCBzdGF0aWMgdTggc2VjdGlvbl90b19ub2RlX3RhYmxlW05SX01FTV9TRUNUSU9OU10gX19jYWNoZWxpbmVfYWxpZ25lZDtcbiBzdGF0aWMgdTE2IHNlY3Rpb25fdG9fbm9kZV90YWJsZVtOUl9NRU1fU0VDVElPTlNdIF9fY2FjaGVsaW5lX2FsaWduZWQ7XG4gI2VuZGlmXG4gXG4taW50IG1lbWRlc2NfbmlkKG1lbWRlc2NfZmxhZ3NfdCBtZGYpXG4raW50IG1lbWRlc2NfbmlkKGNvbnN0IG1lbWRlc2NfZmxhZ3NfdCAqbWRmKVxuIHtcbiBcdHJldHVybiBzZWN0aW9uX3RvX25vZGVfdGFibGVbbWVtZGVzY19zZWN0aW9uKG1kZildO1xuIH1cbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA4VDEyOjM2OjA3LjkwNTIwMTE2M1oiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjk0MDg1MjI5NDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgTWVtb3J5IE1vZGVsIE1hY3JvIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaC4gSXQgc2VlbXMgdG8gYmUgdG91Y2hpbmcgc2V2ZXJhbCBtZW1vcnkgbW9kZWwgbWFjcm9zOiBgbWVtZGVzY19zZWN0aW9uYCwgYG1lbWRlc2NfbmlkYCwgYG1lbWRlc2Nfem9uZW51bWAsIGFuZCBgbWVtZGVzY19pc196b25lX2RldmljZWAuIFRoZSBjb3JlIGNoYW5nZSBpcyB0aGUgYXJndW1lbnQgdHlwZSwgc2hpZnRpbmcgZnJvbSBhIHBhc3MtYnktdmFsdWUgKGBtZW1kZXNjX2ZsYWdzX3QgbWRmYCkgdG8gcGFzcy1ieS1wb2ludGVyIChgY29uc3QgbWVtZGVzY19mbGFnc190ICptZGZgKS4gSG1tLCBhbmQgdGhlcmUgYXJlIHRoZXNlIGBBU1NFUlRfRVhDTFVTSVZFX0JJVFNgIGNhbGxzIHNwcmlua2xlZCBpbi4gVGhhdCB0cmlnZ2VycyBzb21ldGhpbmcuLi4gdGhhdCdzIGEgS0NTQU4gY2hlY2ssIHJpZ2h0PyBMZXQncyB6b29tIGluIG9uIGBtZW1kZXNjX25pZGAgYW5kIHNlZSB3aGF0J3MgY2hhbmdlZDpcblxuYGBgY1xuICNpZmRlZiBOT0RFX05PVF9JTl9QQUdFX0ZMQUdTXG4taW50IG1lbWRlc2NfbmlkKG1lbWRlc2NfZmxhZ3NfdCBtZGYpO1xuK2ludCBtZW1kZXNjX25pZChjb25zdCBtZW1kZXNjX2ZsYWdzX3QgKm1kZik7XG4gI2Vsc2Vcbi1zdGF0aWMgaW5saW5lIGludCBtZW1kZXNjX25pZChtZW1kZXNjX2ZsYWdzX3QgbWRmKVxuKyNpZmRlZiBDT05GSUdfTlVNQVxuK3N0YXRpYyBpbmxpbmUgaW50IG1lbWRlc2NfbmlkKGNvbnN0IG1lbWRlc2NfZmxhZ3NfdCAqbWRmKVxuIHtcbi1cdHJldHVybiAobWRmLmYgXHUwMDNlXHUwMDNlIE5PREVTX1BHU0hJRlQpIFx1MDAyNiBOT0RFU19NQVNLO1xuK1x0QVNTRVJUX0VYQ0xVU0lWRV9CSVRTKG1kZi1cdTAwM2VmLCBOT0RFU19NQVNLIFx1MDAzY1x1MDAzYyBOT0RFU19QR1NISUZUKTtcbitcdHJldHVybiAobWRmLVx1MDAzZWYgXHUwMDNlXHUwMDNlIE5PREVTX1BHU0hJRlQpIFx1MDAyNiBOT0RFU19NQVNLO1xuIH1cbisjZWxzZVxuK3N0YXRpYyBpbmxpbmUgaW50IG1lbWRlc2NfbmlkKGNvbnN0IG1lbWRlc2NfZmxhZ3NfdCAqbWRmKVxuK3tcbitcdHJldHVybiAwO1xuK31cbisjZW5kaWZcbiAjZW5kaWZcbmBgYFxuXG5SaWdodCwgaXQncyBhIHBhc3MtYnktcG9pbnRlciByZWZhY3RvcmluZy4gSXQgYWxzbyBhZGRlZCBgQVNTRVJUX0VYQ0xVU0lWRV9CSVRTYCB0byB0aG9zZSBmdW5jdGlvbnMuIE9rYXksIHRoYXQncyBkZWZpbml0ZWx5IGEgS0NTQU4gdGhpbmcsIGEgZGVidWdnaW5nIGFpZCBwdWxsZWQgaW4gZnJvbSBgXHUwMDNjbGludXgva2NzYW4tY2hlY2tzLmhcdTAwM2VgLCB3aGljaCB0aGUgcGF0Y2ggYWxzbyBpbmNsdWRlcyBpbiBgaW5jbHVkZS9saW51eC9tbS5oYC5cblxuVGhlIG1pbGxpb24tZG9sbGFyIHF1ZXN0aW9uOiBpcyB0aGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2U/IFBhc3NpbmcgYnkgcG9pbnRlciBpcyBtb3JlIG9mIGFuIG9wdGltaXphdGlvbiwgb3IgcmVmYWN0b3JpbmcuIFRoZSBLQ1NBTiBhc3NlcnRpb25zIGFyZSBjbGVhcmx5IGZvciBkZWJ1Z2dpbmcvc2FuaXRpemF0aW9uIHB1cnBvc2VzOyB0aGV5IHdvbid0IGFsdGVyIHRoZSBwcm9ncmFtJ3MgaW50ZW5kZWQgZXhlY3V0aW9uIGZsb3csIHVubGVzcyBhIEtDU0FOIGlzc3VlIGlzIGZvdW5kLlxuXG5BbHJpZ2h0LCBsZXQncyBqdXN0IG1ha2Ugc3VyZSB0aGVyZSBhcmUgbm8gZnVuY3Rpb25hbCBjaGFuZ2VzIGx1cmtpbmcuLi4gTGV0J3MgY2hlY2sgYG1lbWRlc2NfbmlkYCBhZ2Fpbi4gSWYgYCFDT05GSUdfTlVNQWAsIHRoZSBvbGQgdmVyc2lvbiB3b3VsZCByZXR1cm4gYChtZGYuZiBcdTAwM2VcdTAwM2UgTk9ERVNfUEdTSElGVCkgXHUwMDI2IE5PREVTX01BU0tgLiBOb3cgaXQganVzdCByZXR1cm5zIDAuIElmIGAhQ09ORklHX05VTUFgLCBgTk9ERVNfUEdTSElGVGAgaXMgcHJvYmFibHkgemVyby4gQW5kIGlmIGAhQ09ORklHX05VTUFgLCB0aGVuIGBOT0RFU19NQVNLYCBpcyBhbHNvIGxpa2VseSB6ZXJvLCB3aGljaCBtZWFucyB0aGF0IHRoZSBvcmlnaW5hbCBpbXBsZW1lbnRhdGlvbiB3b3VsZCBoYXZlIHJldHVybmVkIDAgYW55d2F5LiBCdXQgSSdtIGdvaW5nIHRvIGRvdWJsZSBjaGVjay4gQmV0dGVyIHRvIGJlIHNhZmUsIHNvIEknbGwgZ3JlcCBmb3IgdGhlIGRlZmluaXRpb24gb2YgYE5PREVTX01BU0tgIGp1c3QgdG8gYmUgY2VydGFpbi5cblxuXG4iLCJJbnB1dFRva2VucyI6NDc3OCwiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY0OSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA4VDEyOjM2OjE3LjMxMzcyNzUyOFoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODQ5Mzc3OTY2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIiNkZWZpbmUgTk9ERVNfTUFTS1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L21tem9uZS5oPTEyMjQ9c3RhdGljIGlubGluZSBib29sIHpvbmVfaXNfZW1wdHkoY29uc3Qgc3RydWN0IHpvbmUgKnpvbmUpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oLTEyNjgtI2RlZmluZSBaT05FU19NQVNLXFx0XFx0KCgxVUwgXFx1MDAzY1xcdTAwM2MgWk9ORVNfV0lEVEgpIC0gMSlcXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oOjEyNjk6I2RlZmluZSBOT0RFU19NQVNLXFx0XFx0KCgxVUwgXFx1MDAzY1xcdTAwM2MgTk9ERVNfV0lEVEgpIC0gMSlcXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oLTEyNzAtI2RlZmluZSBTRUNUSU9OU19NQVNLXFx0XFx0KCgxVUwgXFx1MDAzY1xcdTAwM2MgU0VDVElPTlNfV0lEVEgpIC0gMSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDhUMTI6MzY6MjIuMTYzMTI4MzA0WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODk5MzYwODMxMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIENoYW5nZXM6IEEgUmVmYWN0b3JpbmcgYW5kIERlYnVnZ2luZyBEZWVwIERpdmUqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpbW1lZGlhdGVseSwgdGhlIGZpcnN0IHRoaW5nIHRoYXQganVtcHMgb3V0IGlzIHRoZSBzaGlmdCBmcm9tIHBhc3NpbmcgYG1lbWRlc2NfZmxhZ3NfdGAgYnkgdmFsdWUgdG8gcGFzc2luZyBpdCBieSBwb2ludGVyLiBJIHJlY29nbml6ZSB0aGlzIGFzIGEgdHlwaWNhbCByZWZhY3RvcmluZyBleGVyY2lzZSwgYWltZWQgYXQgc3RyZWFtbGluaW5nIHRoZSBBQkkgb3IgcG9zc2libHkgYXZvaWRpbmcgdW5uZWNlc3NhcnkgZGF0YSBjb3BpZXMuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IHRoaXMga2luZCBvZiBjaGFuZ2UgKnNob3VsZG4ndCogaW1wYWN0IHRoZSBjb3JlIGZ1bmN0aW9uYWxpdHksIGVzcGVjaWFsbHkgaW4gYSB3YXkgdGhhdCBuZWNlc3NpdGF0ZXMgZXh0ZW5zaXZlIGZ1enppbmcuIEl0J3MgbW9yZSBhYm91dCBjb2RlIGh5Z2llbmUgYW5kIHBvdGVudGlhbGx5IG1pY3JvLW9wdGltaXphdGlvbnMuXG5cbkxldCdzIGJyZWFrIGl0IGRvd24gZnVuY3Rpb24gYnkgZnVuY3Rpb24gdG8gY29uZmlybSB0aGlzIHN1c3BpY2lvbi4gV2l0aCB0aGUgYG1lbWRlc2Nfbm9kZWlkYCBmdW5jdGlvbiwgd2hlbiBgIUNPTkZJR19OVU1BYCwgdGhlIGBOT0RFU19XSURUSGAgaXMgemVybyB3aGljaCBtZWFucyB0aGUgYE5PREVTX01BU0tgIGlzIGFsc28gMC4gVGh1cyB0aGUgbWFza2luZyBvcGVyYXRpb24gaXMgZWZmZWN0aXZlbHkgYSBuby1vcCwgcmV0dXJuaW5nIDAgYW55d2F5LiBUaGUgY2hhbmdlIHRvIHJldHVybiAwIGRpcmVjdGx5IGluIHRoaXMgc2NlbmFyaW8gaXMgYSBjbGVhciBvcHRpbWl6YXRpb24gYW5kIHNpbXBsaWZpY2F0aW9uLlxuXG5Ob3csIGNoZWNraW5nIHRoZSBgbWVtZGVzY19zZWN0aW9uYCBmdW5jdGlvbiwgdGhlIG9ubHkgY2hhbmdlIGlzIHRoZSBhZGRpdGlvbiBvZiB0aGUgS0NTQU4gYXNzZXJ0aW9uIGFuZCBhIHN3aXRjaCB0byBwYXNzLWJ5LXBvaW50ZXIuIFRoaXMgbG9va3MgbGlrZSBhIGRlYnVnZ2luZyBlbmhhbmNlbWVudCwgZW5zdXJpbmcgdGhlIGNvcnJlY3QgYml0cyBhcmUgYmVpbmcgdXNlZC4gTm8gZnVuY3Rpb25hbCBhbHRlcmF0aW9uIGhlcmUsIHNvIHRoaXMgZnVydGhlciBjb25maXJtcyBteSBpbml0aWFsIGFzc2Vzc21lbnQuXG5cbk5leHQsIEkgc2VlIHRoZSBgbWVtZGVzY196b25lbnVtYCBmdW5jdGlvbiBjaGFuZ2UuIEFoLCBoZXJlIHdlIGhhdmUgYW4gYCNpZiBaT05FU19XSURUSCAhPSAwYCBndWFyZCBhcm91bmQgdGhlIGBBU1NFUlRfRVhDTFVTSVZFX0JJVFNgIGNhbGwuIFRoaXMgaW5kaWNhdGVzIGEgZml4IGZvciBhIHBvdGVudGlhbCBidWlsZCBpc3N1ZSB3aGVuIGBaT05FU19XSURUSGAgaXMgemVyby4gSSBpbWFnaW5lIHRoYXQgdGhlIGJpdCBzaGlmdCBtaWdodCBiZSBwcm9ibGVtYXRpYyB3aGVuIGBaT05FU19XSURUSGAgaXMgemVybywgbWF5YmUgY2F1c2luZyBhIHNoaWZ0LW91dC1vZi1ib3VuZHMgc2l0dWF0aW9uLCBvciB0aGUgYXNzZXJ0aW9uIGxvZ2ljIGRvZXNuJ3QgaGFuZGxlIHRoZSB6ZXJvIG1hc2sgY29ycmVjdGx5LiBUaGlzIGlzIGFub3RoZXIgcHVyZWx5IGRlZmVuc2l2ZSBhbmQgbm9uLWZ1bmN0aW9uYWwgY2hhbmdlLCBwcmV2ZW50aW5nIHBvdGVudGlhbCBidWlsZCB3YXJuaW5ncyBvciBlcnJvcnMgaW4gc3BlY2lmaWMgY29uZmlndXJhdGlvbnMuXG5cbkFuZCB0aGVuIHdlIGNvbWUgdG8gYG1lbWRlc2NfaXNfem9uZV9kZXZpY2VgLiBKdXN0IGEgcGFzcy1ieS1wb2ludGVyIGNoYW5nZS4gQW5vdGhlciBpbnN0YW5jZSBvZiBvdXIgcmVmYWN0b3JpbmcgdGhlbWUuXG5cbkVzc2VudGlhbGx5LCB0aGUgZW50aXJlIHBhdGNoIGJvaWxzIGRvd24gdG8gdGhpczogKml0J3MgYSByZWZhY3RvcmluZyBlZmZvcnQgd2l0aCBzb21lIGFkZGVkIEtDU0FOIGFzc2VydGlvbnMuKiBUaGUgZnVuZGFtZW50YWwgZXhlY3V0aW9uIGZsb3cgcmVtYWlucyB1bnRvdWNoZWQuIFRoZSBjb3JlIGRhdGEgc3RydWN0dXJlLCBgbWVtZGVzY19mbGFnc190YCwgY29udGFpbnMgYW4gYHVuc2lnbmVkIGxvbmcgZmAuIFNvLCBwYXNzaW5nIGl0IGJ5IHBvaW50ZXIgdmVyc3VzIHZhbHVlIGlzIHJlYWxseSBqdXN0IGFuIEFCSSBkZXRhaWwuIEl0J3MgYWJvdXQgb3B0aW1pemluZyB0aGUgZnVuY3Rpb24gY2FsbHMgYnkgcGFzc2luZyBhIHJlZmVyZW5jZSByYXRoZXIgdGhhbiBhIGZ1bGwgY29weSBvZiB0aGUgZGF0YS4gVGhpcyBjaGFuZ2Ugd2FycmFudHMgYSBjbG9zZSByZXZpZXcgYnV0LCBJJ20gY29uZmlkZW50LCBkb2Vzbid0IHJlcXVpcmUgYW55IGV4dGVuc2l2ZSBmdXp6aW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2MjU1LCJPdXRwdXRUb2tlbnMiOjIzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjY5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA4VDEyOjM2OjMxLjE1NjczOTA4N1oiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MTExMDQ5NjI2LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ0eXBlZGVmIHN0cnVjdC4qbWVtZGVzY19mbGFnc190XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wOFQxMjozNjozNi4yNjc4MDIwOTNaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNzM3NzI4NjE1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgcHJlc2VudGVkIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqTmF2aWdhdGluZyB0aGUgTWVtb3J5IE1hbmFnZW1lbnQgTGFuZHNjYXBlKipcblxuQWxyaWdodCwgc28gSSdtIGRpdmluZyBpbnRvIHRoaXMgbWVtb3J5IG1hbmFnZW1lbnQgaXNzdWUsIGFuZCBteSBmaXJzdCBpbnN0aW5jdCBpcyB0byBnZXQgZ3JhbnVsYXIuIEluc3RlYWQgb2YgYnJvYWQgc2VhcmNoZXMsIGxldCdzIHplcm8gaW4uIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGVzZSBtZW1vcnkgZGVzY3JpcHRvcnMgd29yaywgc28gbGV0J3MgY3V0IHRocm91Z2ggdGhlIG5vaXNlIGFuZCBqdXN0IGdvIHN0cmFpZ2h0IGZvciB0aGUgc3BlY2lmaWMgdHlwZSBkZWZpbml0aW9uOiBgbWVtZGVzY19mbGFnc190YC4gSSdtIGFzc3VtaW5nIHRoYXQgaXQgaXMgdGhhdCBwYXJ0aWN1bGFyIHN0cnVjdHVyZSB3aGljaCBob2xkcyB0aGUga2V5LCBiZWNhdXNlIGl0IGlzIHRoZSBvYnZpb3VzIGRlc2NyaXB0b3Igb2YgZmxhZ3MgYW5kIHNldHRpbmdzLiBObyBzZW5zZSBpbiBiZWF0aW5nIGFyb3VuZCB0aGUgYnVzaC4gSSdsbCBzdGFydCB3aXRoIHRoaXMgc3BlY2lmaWMgaWRlbnRpZmllciBhbmQgc2VlIHdoYXQgaW5zaWdodHMgSSBjYW4gZ2xlYW4uIEl0J3MgYSB0YXJnZXRlZCBhcHByb2FjaDsgaG9wZWZ1bGx5LCB0aGlzIGlzIHRoZSBxdWlja2VzdCBwYXRoIHRvIHVuZGVyc3RhbmRpbmcgdGhlIGZpbmVyIGRldGFpbHMsIHdpdGhvdXQgdGhlIGRpc3RyYWN0aW9uIG9mIHBlcmlwaGVyYWwgaW5mb3JtYXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc1MDksIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wOFQxMjozNjo0MC4wMDU1MzM4NzhaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDQ3MjYwMDIyNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtZW1kZXNjX2ZsYWdzX3RcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9tbS5oPTIyODQ9c3RhdGljIGlubGluZSBpbnQgcGFnZV96b25lX2lkKHN0cnVjdCBwYWdlICpwYWdlKVxcbi0tXFxuaW5jbHVkZS9saW51eC9tbS5oLTIyODktI2lmZGVmIE5PREVfTk9UX0lOX1BBR0VfRkxBR1NcXG5pbmNsdWRlL2xpbnV4L21tLmg6MjI5MDppbnQgbWVtZGVzY19uaWQoY29uc3QgbWVtZGVzY19mbGFnc190ICptZGYpO1xcbmluY2x1ZGUvbGludXgvbW0uaC0yMjkxLSNlbHNlXFxuaW5jbHVkZS9saW51eC9tbS5oLTIyOTItI2lmZGVmIENPTkZJR19OVU1BXFxuaW5jbHVkZS9saW51eC9tbS5oOjIyOTM6c3RhdGljIGlubGluZSBpbnQgbWVtZGVzY19uaWQoY29uc3QgbWVtZGVzY19mbGFnc190ICptZGYpXFxuaW5jbHVkZS9saW51eC9tbS5oLTIyOTQte1xcbi0tXFxuaW5jbHVkZS9saW51eC9tbS5oLTIyOTgtI2Vsc2VcXG5pbmNsdWRlL2xpbnV4L21tLmg6MjI5OTpzdGF0aWMgaW5saW5lIGludCBtZW1kZXNjX25pZChjb25zdCBtZW1kZXNjX2ZsYWdzX3QgKm1kZilcXG5pbmNsdWRlL2xpbnV4L21tLmgtMjMwMC17XFxuLS1cXG5pbmNsdWRlL2xpbnV4L21tLmg9MjU0OT1zdGF0aWMgaW5saW5lIHZvaWQgc2V0X3BhZ2Vfc2VjdGlvbihzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgbG9uZyBzZWN0aW9uKVxcbi0tXFxuaW5jbHVkZS9saW51eC9tbS5oLTI1NTQtXFxuaW5jbHVkZS9saW51eC9tbS5oOjI1NTU6c3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIG1lbWRlc2Nfc2VjdGlvbihjb25zdCBtZW1kZXNjX2ZsYWdzX3QgKm1kZilcXG5pbmNsdWRlL2xpbnV4L21tLmgtMjU1Ni17XFxuLS1cXG5pbmNsdWRlL2xpbnV4L21tLmgtMjU2MC0jZWxzZSAvKiAhU0VDVElPTl9JTl9QQUdFX0ZMQUdTICovXFxuaW5jbHVkZS9saW51eC9tbS5oOjI1NjE6c3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIG1lbWRlc2Nfc2VjdGlvbihjb25zdCBtZW1kZXNjX2ZsYWdzX3QgKm1kZilcXG5pbmNsdWRlL2xpbnV4L21tLmgtMjU2Mi17XFxuLS1cXG5pbmNsdWRlL2xpbnV4L21tX3R5cGVzLmg9Mzk9dHlwZWRlZiBzdHJ1Y3Qge1xcbmluY2x1ZGUvbGludXgvbW1fdHlwZXMuaC00MC1cXHR1bnNpZ25lZCBsb25nIGY7XFxuaW5jbHVkZS9saW51eC9tbV90eXBlcy5oOjQxOn0gbWVtZGVzY19mbGFnc190O1xcbmluY2x1ZGUvbGludXgvbW1fdHlwZXMuaC00Mi1cXG4tLVxcbmluY2x1ZGUvbGludXgvbW1fdHlwZXMuaD04MD1zdHJ1Y3QgcGFnZSB7XFxuaW5jbHVkZS9saW51eC9tbV90eXBlcy5oOjgxOlxcdG1lbWRlc2NfZmxhZ3NfdCBmbGFncztcXHRcXHQvKiBBdG9taWMgZmxhZ3MsIHNvbWUgcG9zc2libHlcXG5pbmNsdWRlL2xpbnV4L21tX3R5cGVzLmgtODItXFx0XFx0XFx0XFx0XFx0ICogdXBkYXRlZCBhc3luY2hyb25vdXNseSAqL1xcbi0tXFxuaW5jbHVkZS9saW51eC9tbV90eXBlcy5oPTQwMj1zdHJ1Y3QgZm9saW8ge1xcbi0tXFxuaW5jbHVkZS9saW51eC9tbV90eXBlcy5oLTQwNi1cXHQvKiBwdWJsaWM6ICovXFxuaW5jbHVkZS9saW51eC9tbV90eXBlcy5oOjQwNzpcXHRcXHRcXHRtZW1kZXNjX2ZsYWdzX3QgZmxhZ3M7XFxuaW5jbHVkZS9saW51eC9tbV90eXBlcy5oLTQwOC1cXHRcXHRcXHR1bmlvbiB7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L21tX3R5cGVzLmg9NTczPXN0cnVjdCBwdGRlc2Mge1xcbmluY2x1ZGUvbGludXgvbW1fdHlwZXMuaDo1NzQ6XFx0bWVtZGVzY19mbGFnc190IHB0X2ZsYWdzO1xcbmluY2x1ZGUvbGludXgvbW1fdHlwZXMuaC01NzUtXFxuLS1cXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oPTEyMjQ9c3RhdGljIGlubGluZSBib29sIHpvbmVfaXNfZW1wdHkoY29uc3Qgc3RydWN0IHpvbmUgKnpvbmUpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oLTEyNzQtXFxuaW5jbHVkZS9saW51eC9tbXpvbmUuaDoxMjc1OnN0YXRpYyBpbmxpbmUgZW51bSB6b25lX3R5cGUgbWVtZGVzY196b25lbnVtKGNvbnN0IG1lbWRlc2NfZmxhZ3NfdCAqZmxhZ3MpXFxuaW5jbHVkZS9saW51eC9tbXpvbmUuaC0xMjc2LXtcXG4tLVxcbmluY2x1ZGUvbGludXgvbW16b25lLmg9MTI4OD1zdGF0aWMgaW5saW5lIGVudW0gem9uZV90eXBlIGZvbGlvX3pvbmVudW0oY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbylcXG4tLVxcbmluY2x1ZGUvbGludXgvbW16b25lLmgtMTI5My0jaWZkZWYgQ09ORklHX1pPTkVfREVWSUNFXFxuaW5jbHVkZS9saW51eC9tbXpvbmUuaDoxMjk0OnN0YXRpYyBpbmxpbmUgYm9vbCBtZW1kZXNjX2lzX3pvbmVfZGV2aWNlKGNvbnN0IG1lbWRlc2NfZmxhZ3NfdCAqbWRmKVxcbmluY2x1ZGUvbGludXgvbW16b25lLmgtMTI5NS17XFxuLS1cXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oPTEzMjM9ZXh0ZXJuIHZvaWQgbWVtbWFwX2luaXRfem9uZV9kZXZpY2Uoc3RydWN0IHpvbmUgKiwgdW5zaWduZWQgbG9uZyxcXG4tLVxcbmluY2x1ZGUvbGludXgvbW16b25lLmgtMTMyNS0jZWxzZVxcbmluY2x1ZGUvbGludXgvbW16b25lLmg6MTMyNjpzdGF0aWMgaW5saW5lIGJvb2wgbWVtZGVzY19pc196b25lX2RldmljZShjb25zdCBtZW1kZXNjX2ZsYWdzX3QgKm1kZilcXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oLTEzMjcte1xcbi0tXFxubW0vc2xhYi5oPTk4PXN0cnVjdCBzbGFiIHtcXG5tbS9zbGFiLmg6OTk6XFx0bWVtZGVzY19mbGFnc190IGZsYWdzO1xcbm1tL3NsYWIuaC0xMDAtXFxuLS1cXG5tbS9zcGFyc2UuYz00Mz1zdGF0aWMgdTE2IHNlY3Rpb25fdG9fbm9kZV90YWJsZVtOUl9NRU1fU0VDVElPTlNdIF9fY2FjaGVsaW5lX2FsaWduZWQ7XFxuLS1cXG5tbS9zcGFyc2UuYy00NS1cXG5tbS9zcGFyc2UuYzo0NjppbnQgbWVtZGVzY19uaWQoY29uc3QgbWVtZGVzY19mbGFnc190ICptZGYpXFxubW0vc3BhcnNlLmMtNDcte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wOFQxMjozNjo0NC40NzgxODc2MDJaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyMDc2NjA0Mjk5MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipQYXRjaCBBbmFseXNpczogYG1lbWRlc2NfZmxhZ3NfdGAgUmVmYWN0b3JpbmcgYW5kIEtDU0FOIEFzc2VydGlvbnMqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgYXNzZXNzbWVudCB3YXMgY29ycmVjdDsgYG1lbWRlc2NfZmxhZ3NfdGAgaXMganVzdCBhIHN0cnVjdCBjb250YWluaW5nIGFuIGB1bnNpZ25lZCBsb25nIGZgLiBUaGlzIHBhdGNoIGlzIHB1cmVseSBhIHJlZmFjdG9yaW5nIGVmZm9ydC4gVGhlIGNoYW5nZXMgaW52b2x2ZSBwYXNzaW5nIHRoZSBgbWVtZGVzY19mbGFnc190YCBzdHJ1Y3QgYnkgcG9pbnRlciBpbnN0ZWFkIG9mIGJ5IHZhbHVlIGFjcm9zcyB2YXJpb3VzIGZ1bmN0aW9ucy4gQ3J1Y2lhbGx5LCB0aGUgZnVuY3Rpb25hbCBiZWhhdmlvciBvZiB0aGUgY29kZSAqc2hvdWxkKiByZW1haW4gaWRlbnRpY2FsLiBJIHNlZSBzb21lIEtDU0FOIGFzc2VydGlvbnMgYmVpbmcgYWRkZWQvZml4ZWQsIHdoaWNoIGlzIGdyZWF0IGZvciBpbXByb3ZpbmcgY29kZSBjb3JyZWN0bmVzcyBhbmQgZGV0ZWN0aW5nIHBvdGVudGlhbCByYWNlcywgYnV0IHRoZXNlIGFzc2VydGlvbnMgd29uJ3QgaW50cm9kdWNlIGFueSBuZXcgZXhlY3V0aW9uIHBhdGhzIGZvciBmdXp6aW5nIHRvIGV4cGxvcmUuXG5cbkknbSBnb2luZyB0aHJvdWdoIHRoZSBkaWZmIGFnYWluIHRvIGJlIGFic29sdXRlbHkgc3VyZS5cblxuVGhlIGZpcnN0IGNoYW5nZSBpbiBgaW5jbHVkZS9hc20tZ2VuZXJpYy9tZW1vcnlfbW9kZWwuaGAgaXMgc3RyYWlnaHRmb3J3YXJkOyB0aGUgY2FsbCB0byBgbWVtZGVzY19zZWN0aW9uYCBub3cgcGFzc2VzIGBfX3BnLVx1MDAzZWZsYWdzYCBhcyBhIHBvaW50ZXIuIE5vIGNoYW5nZSBpbiBjb3JlIGxvZ2ljIHRoZXJlLlxuXG5Nb3Zpbmcgb24gdG8gYGluY2x1ZGUvbGludXgvbW0uaGAsIHRoZSBkZWZpbml0aW9uIG9mIGBtZW1kZXNjX25pZGAgaXMgdXBkYXRlZCB0byB0YWtlIGEgcG9pbnRlciwgYW5kIGFuIGBBU1NFUlRfRVhDTFVTSVZFX0JJVFNgIGlzIGFkZGVkIHdpdGhpbiBhIGAjaWZkZWYgQ09ORklHX05VTUFgIGJsb2NrLiBUaGlzIGxvb2tzIGZpbmU7IGV2ZW4gaWYgYENPTkZJR19OVU1BYCBpcyBub3Qgc2V0LCB0aGUgaW5saW5lIGZ1bmN0aW9uIHdpbGwgcmV0dXJuIDAgd2hpY2ggaXMgbG9naWNhbGx5IHNvdW5kIGdpdmVuIHRoZSBleGlzdGluZyBsb2dpYy4gQWxsIGNhbGwgc2l0ZXMgb2YgYG1lbWRlc2NfbmlkYCBhcmUgYWRqdXN0ZWQgdG8gbWF0Y2ggdGhlIG5ldyBzaWduYXR1cmUuIFRoZSBzYW1lIHBhdHRlcm4gaXMgcmVwZWF0ZWQgZm9yIGBtZW1kZXNjX3NlY3Rpb25gIGFuZCBgbWVtZGVzY196b25lbnVtYC4gVGhlIGFkZGl0aW9uIG9mIGBBU1NFUlRfRVhDTFVTSVZFX0JJVFNgIGlzIGdvb2QsIGFkZGluZyBLQ1NBTiBjaGVja3MsIGJ1dCB3b24ndCBpbXBhY3QgaG93IHRoZSBjb2RlIHJ1bnMuXG5cbkluIGBpbmNsdWRlL2xpbnV4L21tX2lubGluZS5oYCwgdGhlIGNhbGwgc2l0ZXMgb2YgYG1lbWRlc2Nfc2VjdGlvbmAgYXJlIHVwZGF0ZWQgdG8gcGFzcyBhIHBvaW50ZXIsIGFzIGV4cGVjdGVkLlxuXG5gaW5jbHVkZS9saW51eC9tbXpvbmUuaGAgc2VlcyBzaW1pbGFyIG1vZGlmaWNhdGlvbnMgZm9yIGBtZW1kZXNjX3pvbmVudW1gLiBUaGUgc2lnbmF0dXJlIGNoYW5nZSBpcyBhZ2FpbiB0aGUgcGFzcy1ieS1wb2ludGVyIHJlZmFjdG9yaW5nIGFuZCBLQ1NBTiBhc3NlcnRpb25zLiBUaGUgY2FsbHMgdG8gdGhlIGlubGluZSBmdW5jdGlvbiBhcmUgYWxzbyB1cGRhdGVkLiBUaGUgYG1lbWRlc2NfaXNfem9uZV9kZXZpY2VgIGZ1bmN0aW9uIHNlZXMgdGhlIHNhbWUgcGF0dGVybiBhcyB3ZWxsLlxuXG5JbiBgbW0vcGFnZV9hbGxvYy5jYCBhbmQgYG1tL3NsYWIuaGAgdGhlIHVwZGF0ZXMgYXJlIHRoZSBzYW1lIC0gYWxsIGFib3V0IHN3aXRjaGluZyB0byBwYXNzLWJ5LXBvaW50ZXIuICBBbGwgZnVuY3Rpb24gc2lnbmF0dXJlcyBhcmUgdXBkYXRlZC5cblxuRmluYWxseSwgaW4gYG1tL3NwYXJzZS5jYCwgdGhlIGRlZmluaXRpb24gb2YgYG1lbWRlc2NfbmlkYCBpcyBhZGp1c3RlZCB0byBtYXRjaCB0aGUgdXBkYXRlZCBzaWduYXR1cmUsIGtlZXBpbmcgdGhpbmdzIGNvbnNpc3RlbnQuXG5cbkdpdmVuIGFsbCB0aGlzLCBteSBjb25jbHVzaW9uIHJlbWFpbnMgZmlybS4gVGhpcyBwYXRjaCBpcyBwdXJlbHkgYSByZWZhY3RvcmluZyBhbmQgS0NTQU4gYXNzZXJ0aW9uIGFkZGl0aW9ucy4gTm8gZXhlY3V0aW9uIGZsb3cgaXMgY2hhbmdlZCwgc28gdGhlcmUncyBub3RoaW5nIG5ldyBoZXJlIHRoYXQgZnV6emluZyB3b3VsZCBmaW5kLiBJdCdzIHNhZmUgdG8gc2F5IHRoYXQgYFdvcnRoRnV6emluZ2Agc2hvdWxkIGJlIGBmYWxzZWAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg4NzQsIk91dHB1dFRva2VucyI6ODUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNTIzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA4VDEyOjM3OjA1LjI0NDIzMzc2MloiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3OTg5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGlzIGEgcHVyZSByZWZhY3RvcmluZyB0aGF0IGNoYW5nZXMgYG1lbWRlc2NfZmxhZ3NfdGAgdG8gYmUgcGFzc2VkIGJ5IHBvaW50ZXIgaW5zdGVhZCBvZiBieSB2YWx1ZSwgYW5kIGFkZHMvZml4ZXMgS0NTQU4gYXNzZXJ0aW9ucyAoYEFTU0VSVF9FWENMVVNJVkVfQklUU2ApLiBJdCBkb2VzIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgdGhlIGV4ZWN1dGlvbiBmbG93IG9mIHRoZSBrZXJuZWwuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpcyBhIHB1cmUgcmVmYWN0b3JpbmcgdGhhdCBjaGFuZ2VzIGBtZW1kZXNjX2ZsYWdzX3RgIHRvIGJlIHBhc3NlZCBieSBwb2ludGVyIGluc3RlYWQgb2YgYnkgdmFsdWUsIGFuZCBhZGRzL2ZpeGVzIEtDU0FOIGFzc2VydGlvbnMgKGBBU1NFUlRfRVhDTFVTSVZFX0JJVFNgKS4gSXQgZG9lcyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIHRoZSBleGVjdXRpb24gZmxvdyBvZiB0aGUga2VybmVsLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowg82g7[1] Phase: Running StartedAt: 2026-07-08 12:37:16 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowg82g7[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-07-08 12:37:16 +0000 UTC FinishedAt: 2026-07-08 12:37:20 +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,}