Name: series-workflowcvsft Phase: Failed StartedAt: 2026-09-06 08:27:52 +0000 UTC FinishedAt: 2026-09-06 08:51:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcvsft[0] Phase: Succeeded StartedAt: 2026-09-06 08:27:52 +0000 UTC FinishedAt: 2026-09-06 08:51:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcvsft[0].run-triage Phase: Succeeded StartedAt: 2026-09-06 08:27:52 +0000 UTC FinishedAt: 2026-09-06 08:51:32 +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+CgkJCTx0ZD4yMDI2LzA5LzA2IDA4OjUxPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgb25seSB1c2VyLXNwYWNlIGNncm91cCBzZWxmLXRlc3RzIHVuZGVyIHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2Nncm91cC8gYW5kIGRvZXMgbm90IHRvdWNoIGFueSBrZXJuZWwgY29kZSBvciBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDA4OjUxPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgMTFhOWYwOWY1NjBiMDI2OTU0MDFkZDJjNmNjM2YxOTk3Zjc4YTY0MlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTdW4gU2VwIDYgMDg6NTE6MTUgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvY2dyb3VwL2xpYi9jZ3JvdXBfdXRpbC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvY2dyb3VwL2xpYi9jZ3JvdXBfdXRpbC5jXG5pbmRleCAyNTk2YzEyY2Q4NjQ1Li5lZDNjNDg5MzgzM2E1IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvY2dyb3VwL2xpYi9jZ3JvdXBfdXRpbC5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9jZ3JvdXAvbGliL2Nncm91cF91dGlsLmNcbkBAIC0xNzIsNyAmIzQzOzE3Miw3IEBAIGxvbmcgY2dfcmVhZF9sb25nX2ZkKGludCBmZClcbiBcdHJldHVybiBhdG9sKGJ1Zik7XG4gfVxuIFxuLWxvbmcgY2dfcmVhZF9rZXlfbG9uZyhjb25zdCBjaGFyICpjZ3JvdXAsIGNvbnN0IGNoYXIgKmNvbnRyb2wsIGNvbnN0IGNoYXIgKmtleSlcbiYjNDM7czY0IGNnX3JlYWRfa2V5X3M2NChjb25zdCBjaGFyICpjZ3JvdXAsIGNvbnN0IGNoYXIgKmNvbnRyb2wsIGNvbnN0IGNoYXIgKmtleSlcbiB7XG4gXHRjaGFyIGJ1ZltCVUZfU0laRV07XG4gXHRjaGFyICpwdHI7XG5AQCAtMTg0LDE4ICYjNDM7MTg0LDE4IEBAIGxvbmcgY2dfcmVhZF9rZXlfbG9uZyhjb25zdCBjaGFyICpjZ3JvdXAsIGNvbnN0IGNoYXIgKmNvbnRyb2wsIGNvbnN0IGNoYXIgKmtleSlcbiBcdGlmICghcHRyKVxuIFx0XHRyZXR1cm4gLTE7XG4gXG4tXHRyZXR1cm4gYXRvbChwdHIgJiM0Mzsgc3RybGVuKGtleSkpO1xuJiM0MztcdHJldHVybiBhdG9sbChwdHIgJiM0Mzsgc3RybGVuKGtleSkpO1xuIH1cbiBcbi1sb25nIGNnX3JlYWRfa2V5X2xvbmdfcG9sbChjb25zdCBjaGFyICpjZ3JvdXAsIGNvbnN0IGNoYXIgKmNvbnRyb2wsXG4tXHRcdFx0ICAgY29uc3QgY2hhciAqa2V5LCBsb25nIGV4cGVjdGVkLCBpbnQgcmV0cmllcyxcbi1cdFx0XHQgICB1c2Vjb25kc190IHdhaXRfaW50ZXJ2YWxfdXMpXG4mIzQzO3M2NCBjZ19yZWFkX2tleV9zNjRfcG9sbChjb25zdCBjaGFyICpjZ3JvdXAsIGNvbnN0IGNoYXIgKmNvbnRyb2wsXG4mIzQzO1x0XHRcdCBjb25zdCBjaGFyICprZXksIHM2NCBleHBlY3RlZCwgaW50IHJldHJpZXMsXG4mIzQzO1x0XHRcdCB1c2Vjb25kc190IHdhaXRfaW50ZXJ2YWxfdXMpXG4ge1xuLVx0bG9uZyB2YWwgPSAtMTtcbiYjNDM7XHRzNjQgdmFsID0gLTE7XG4gXHRpbnQgaTtcbiBcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHJldHJpZXM7IGkmIzQzOyYjNDM7KSB7XG4tXHRcdHZhbCA9IGNnX3JlYWRfa2V5X2xvbmcoY2dyb3VwLCBjb250cm9sLCBrZXkpO1xuJiM0MztcdFx0dmFsID0gY2dfcmVhZF9rZXlfczY0KGNncm91cCwgY29udHJvbCwga2V5KTtcbiBcdFx0aWYgKHZhbCBcdTAwM2MgMClcbiBcdFx0XHRyZXR1cm4gdmFsO1xuIFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2Nncm91cC9saWIvaW5jbHVkZS9jZ3JvdXBfdXRpbC5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvY2dyb3VwL2xpYi9pbmNsdWRlL2Nncm91cF91dGlsLmhcbmluZGV4IDVkMzljNzA5YWM3YTQuLmRkYjA1OTMyZDljNzcgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9jZ3JvdXAvbGliL2luY2x1ZGUvY2dyb3VwX3V0aWwuaFxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvY2dyb3VwL2xpYi9pbmNsdWRlL2Nncm91cF91dGlsLmhcbkBAIC0yLDYgJiM0MzsyLDggQEBcbiAjaW5jbHVkZSBcdTAwM2NzdGRib29sLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NzdGRsaWIuaFx1MDAzZVxuIFxuJiM0Mzt0eXBlZGVmIHNpZ25lZCBsb25nIGxvbmcgczY0O1xuJiM0MztcbiAjaWZuZGVmIEJVRl9TSVpFXG4gI2RlZmluZSBCVUZfU0laRSA0MDk2XG4gI2VuZGlmXG5AQCAtMjQsMjUgJiM0MzsyNiwyNSBAQFxuIC8qXG4gICogQ2hlY2tzIGlmIHR3byBnaXZlbiB2YWx1ZXMgZGlmZmVyIGJ5IGxlc3MgdGhhbiBlcnIlIG9mIHRoZWlyIHN1bS5cbiAgKi9cbi1zdGF0aWMgaW5saW5lIGludCB2YWx1ZXNfY2xvc2UobG9uZyBhLCBsb25nIGIsIGludCBlcnIpXG4mIzQzO3N0YXRpYyBpbmxpbmUgaW50IHZhbHVlc19jbG9zZShzNjQgYSwgczY0IGIsIGludCBlcnIpXG4ge1xuLVx0cmV0dXJuIGxhYnMoYSAtIGIpIFx1MDAzYz0gKGEgJiM0MzsgYikgLyAxMDAgKiBlcnI7XG4mIzQzO1x0cmV0dXJuIGxsYWJzKGEgLSBiKSBcdTAwM2M9IChhICYjNDM7IGIpIC8gMTAwICogZXJyO1xuIH1cbiBcbiAvKlxuICAqIENoZWNrcyBpZiB0d28gZ2l2ZW4gdmFsdWVzIGRpZmZlciBieSBsZXNzIHRoYW4gZXJyJSBvZiB0aGVpciBzdW0gYW5kIGFzc2VydFxuICAqIHdpdGggZGV0YWlsZWQgZGVidWcgaW5mbyBpZiBub3QuXG4gICovXG4tc3RhdGljIGlubGluZSBpbnQgdmFsdWVzX2Nsb3NlX3JlcG9ydChsb25nIGEsIGxvbmcgYiwgaW50IGVycilcbiYjNDM7c3RhdGljIGlubGluZSBpbnQgdmFsdWVzX2Nsb3NlX3JlcG9ydChzNjQgYSwgczY0IGIsIGludCBlcnIpXG4ge1xuLVx0bG9uZyBkaWZmICA9IGxhYnMoYSAtIGIpO1xuLVx0bG9uZyBsaW1pdCA9IChhICYjNDM7IGIpIC8gMTAwICogZXJyO1xuJiM0MztcdHM2NCBkaWZmICA9IGxsYWJzKGEgLSBiKTtcbiYjNDM7XHRzNjQgbGltaXQgPSAoYSAmIzQzOyBiKSAvIDEwMCAqIGVycjtcbiBcdGRvdWJsZSBhY3R1YWxfZXJyID0gKGEgJiM0MzsgYikgPyAoMTAwLjAgKiBkaWZmIC8gKGEgJiM0MzsgYikpIDogMC4wO1xuIFx0aW50IGNsb3NlID0gZGlmZiBcdTAwM2M9IGxpbWl0O1xuIFxuIFx0aWYgKCFjbG9zZSlcbiBcdFx0ZnByaW50ZihzdGRlcnIsXG4tXHRcdFx0XCYjMzQ7W0ZBSUxdIGFjdHVhbD0lbGQgZXhwZWN0ZWQ9JWxkIHwgZGlmZj0lbGQgfCBsaW1pdD0lbGQgfCBcJiMzNDtcbiYjNDM7XHRcdFx0XCYjMzQ7W0ZBSUxdIGFjdHVhbD0lbGxkIGV4cGVjdGVkPSVsbGQgfCBkaWZmPSVsbGQgfCBsaW1pdD0lbGxkIHwgXCYjMzQ7XG4gXHRcdFx0XCYjMzQ7dG9sZXJhbmNlPSVkJSUgfCBhY3R1YWxfZXJyb3I9JS4yZiUlXFxuXCYjMzQ7LFxuIFx0XHRcdGEsIGIsIGRpZmYsIGxpbWl0LCBlcnIsIGFjdHVhbF9lcnIpO1xuIFxuQEAgLTY5LDEwICYjNDM7NzEsMTAgQEAgZXh0ZXJuIGludCBjZ19yZWFkX3N0cnN0cihjb25zdCBjaGFyICpjZ3JvdXAsIGNvbnN0IGNoYXIgKmNvbnRyb2wsXG4gXHRcdFx0ICBjb25zdCBjaGFyICpuZWVkbGUpO1xuIGV4dGVybiBsb25nIGNnX3JlYWRfbG9uZyhjb25zdCBjaGFyICpjZ3JvdXAsIGNvbnN0IGNoYXIgKmNvbnRyb2wpO1xuIGV4dGVybiBsb25nIGNnX3JlYWRfbG9uZ19mZChpbnQgZmQpO1xuLWxvbmcgY2dfcmVhZF9rZXlfbG9uZyhjb25zdCBjaGFyICpjZ3JvdXAsIGNvbnN0IGNoYXIgKmNvbnRyb2wsIGNvbnN0IGNoYXIgKmtleSk7XG4tbG9uZyBjZ19yZWFkX2tleV9sb25nX3BvbGwoY29uc3QgY2hhciAqY2dyb3VwLCBjb25zdCBjaGFyICpjb250cm9sLFxuLVx0XHRcdCAgIGNvbnN0IGNoYXIgKmtleSwgbG9uZyBleHBlY3RlZCwgaW50IHJldHJpZXMsXG4tXHRcdFx0ICAgdXNlY29uZHNfdCB3YWl0X2ludGVydmFsX3VzKTtcbiYjNDM7czY0IGNnX3JlYWRfa2V5X3M2NChjb25zdCBjaGFyICpjZ3JvdXAsIGNvbnN0IGNoYXIgKmNvbnRyb2wsIGNvbnN0IGNoYXIgKmtleSk7XG4mIzQzO3M2NCBjZ19yZWFkX2tleV9zNjRfcG9sbChjb25zdCBjaGFyICpjZ3JvdXAsIGNvbnN0IGNoYXIgKmNvbnRyb2wsXG4mIzQzO1x0XHRcdCBjb25zdCBjaGFyICprZXksIHM2NCBleHBlY3RlZCwgaW50IHJldHJpZXMsXG4mIzQzO1x0XHRcdCB1c2Vjb25kc190IHdhaXRfaW50ZXJ2YWxfdXMpO1xuIGV4dGVybiBsb25nIGNnX3JlYWRfbGMoY29uc3QgY2hhciAqY2dyb3VwLCBjb25zdCBjaGFyICpjb250cm9sKTtcbiBleHRlcm4gaW50IGNnX3dyaXRlKGNvbnN0IGNoYXIgKmNncm91cCwgY29uc3QgY2hhciAqY29udHJvbCwgY2hhciAqYnVmKTtcbiBleHRlcm4gaW50IGNnX29wZW4oY29uc3QgY2hhciAqY2dyb3VwLCBjb25zdCBjaGFyICpjb250cm9sLCBpbnQgZmxhZ3MpO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2Nncm91cC90ZXN0X2NwdS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvY2dyb3VwL3Rlc3RfY3B1LmNcbmluZGV4IDczNWE1M2JiMjIyYmEuLjExZGExZGU5Y2RlYjYgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9jZ3JvdXAvdGVzdF9jcHUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvY2dyb3VwL3Rlc3RfY3B1LmNcbkBAIC0yNCw3ICYjNDM7MjQsNyBAQCBlbnVtIGhvZ19jbG9ja190eXBlIHtcbiBzdHJ1Y3QgY3B1X2hvZ2dlciB7XG4gXHRjaGFyICpjZ3JvdXA7XG4gXHRwaWRfdCBwaWQ7XG4tXHRsb25nIHVzYWdlO1xuJiM0MztcdHM2NCB1c2FnZTtcbiB9O1xuIFxuIHN0cnVjdCBjcHVfaG9nX2Z1bmNfcGFyYW0ge1xuQEAgLTE4NSw3ICYjNDM7MTg1LDcgQEAgc3RhdGljIGludCBob2dfY3B1c190aW1lZChjb25zdCBjaGFyICpjZ3JvdXAsIHZvaWQgKmFyZylcbiBzdGF0aWMgaW50IHRlc3RfY3B1Y2dfc3RhdHMoY29uc3QgY2hhciAqcm9vdClcbiB7XG4gXHRpbnQgcmV0ID0gS1NGVF9GQUlMO1xuLVx0bG9uZyB1c2FnZV91c2VjLCB1c2VyX3VzZWMsIHN5c3RlbV91c2VjO1xuJiM0MztcdHM2NCB1c2FnZV91c2VjLCB1c2VyX3VzZWMsIHN5c3RlbV91c2VjO1xuIFx0bG9uZyB1c2FnZV9zZWNvbmRzID0gMjtcbiBcdGxvbmcgZXhwZWN0ZWRfdXNhZ2VfdXNlYyA9IHVzYWdlX3NlY29uZHMgKiBVU0VDX1BFUl9TRUM7XG4gXHRjaGFyICpjcHVjZztcbkBAIC0xOTcsOSAmIzQzOzE5Nyw5IEBAIHN0YXRpYyBpbnQgdGVzdF9jcHVjZ19zdGF0cyhjb25zdCBjaGFyICpyb290KVxuIFx0aWYgKGNnX2NyZWF0ZShjcHVjZykpXG4gXHRcdGdvdG8gY2xlYW51cDtcbiBcbi1cdHVzYWdlX3VzZWMgPSBjZ19yZWFkX2tleV9sb25nKGNwdWNnLCBcJiMzNDtjcHUuc3RhdFwmIzM0OywgXCYjMzQ7dXNhZ2VfdXNlY1wmIzM0Oyk7XG4tXHR1c2VyX3VzZWMgPSBjZ19yZWFkX2tleV9sb25nKGNwdWNnLCBcJiMzNDtjcHUuc3RhdFwmIzM0OywgXCYjMzQ7dXNlcl91c2VjXCYjMzQ7KTtcbi1cdHN5c3RlbV91c2VjID0gY2dfcmVhZF9rZXlfbG9uZyhjcHVjZywgXCYjMzQ7Y3B1LnN0YXRcJiMzNDssIFwmIzM0O3N5c3RlbV91c2VjXCYjMzQ7KTtcbiYjNDM7XHR1c2FnZV91c2VjID0gY2dfcmVhZF9rZXlfczY0KGNwdWNnLCBcJiMzNDtjcHUuc3RhdFwmIzM0OywgXCYjMzQ7dXNhZ2VfdXNlY1wmIzM0Oyk7XG4mIzQzO1x0dXNlcl91c2VjID0gY2dfcmVhZF9rZXlfczY0KGNwdWNnLCBcJiMzNDtjcHUuc3RhdFwmIzM0OywgXCYjMzQ7dXNlcl91c2VjXCYjMzQ7KTtcbiYjNDM7XHRzeXN0ZW1fdXNlYyA9IGNnX3JlYWRfa2V5X3M2NChjcHVjZywgXCYjMzQ7Y3B1LnN0YXRcJiMzNDssIFwmIzM0O3N5c3RlbV91c2VjXCYjMzQ7KTtcbiBcdGlmICh1c2FnZV91c2VjICE9IDAgfHwgdXNlcl91c2VjICE9IDAgfHwgc3lzdGVtX3VzZWMgIT0gMClcbiBcdFx0Z290byBjbGVhbnVwO1xuIFxuQEAgLTIxNCw4ICYjNDM7MjE0LDggQEAgc3RhdGljIGludCB0ZXN0X2NwdWNnX3N0YXRzKGNvbnN0IGNoYXIgKnJvb3QpXG4gXHRpZiAoY2dfcnVuKGNwdWNnLCBob2dfY3B1c190aW1lZCwgKHZvaWQgKilcdTAwMjZwYXJhbSkpXG4gXHRcdGdvdG8gY2xlYW51cDtcbiBcbi1cdHVzYWdlX3VzZWMgPSBjZ19yZWFkX2tleV9sb25nKGNwdWNnLCBcJiMzNDtjcHUuc3RhdFwmIzM0OywgXCYjMzQ7dXNhZ2VfdXNlY1wmIzM0Oyk7XG4tXHR1c2VyX3VzZWMgPSBjZ19yZWFkX2tleV9sb25nKGNwdWNnLCBcJiMzNDtjcHUuc3RhdFwmIzM0OywgXCYjMzQ7dXNlcl91c2VjXCYjMzQ7KTtcbiYjNDM7XHR1c2FnZV91c2VjID0gY2dfcmVhZF9rZXlfczY0KGNwdWNnLCBcJiMzNDtjcHUuc3RhdFwmIzM0OywgXCYjMzQ7dXNhZ2VfdXNlY1wmIzM0Oyk7XG4mIzQzO1x0dXNlcl91c2VjID0gY2dfcmVhZF9rZXlfczY0KGNwdWNnLCBcJiMzNDtjcHUuc3RhdFwmIzM0OywgXCYjMzQ7dXNlcl91c2VjXCYjMzQ7KTtcbiBcdGlmICh1c2VyX3VzZWMgXHUwMDNjPSAwKVxuIFx0XHRnb3RvIGNsZWFudXA7XG4gXG5AQCAtMjM5LDcgJiM0MzsyMzksNyBAQCBzdGF0aWMgaW50IHRlc3RfY3B1Y2dfbmljZShjb25zdCBjaGFyICpyb290KVxuIHtcbiBcdGludCByZXQgPSBLU0ZUX0ZBSUw7XG4gXHRpbnQgc3RhdHVzO1xuLVx0bG9uZyB1c2VyX3VzZWMsIG5pY2VfdXNlYztcbiYjNDM7XHRzNjQgdXNlcl91c2VjLCBuaWNlX3VzZWM7XG4gXHRsb25nIHVzYWdlX3NlY29uZHMgPSAyO1xuIFx0bG9uZyBleHBlY3RlZF9uaWNlX3VzZWMgPSB1c2FnZV9zZWNvbmRzICogVVNFQ19QRVJfU0VDO1xuIFx0Y2hhciAqY3B1Y2c7XG5AQCAtMjUyLDggJiM0MzsyNTIsOCBAQCBzdGF0aWMgaW50IHRlc3RfY3B1Y2dfbmljZShjb25zdCBjaGFyICpyb290KVxuIFx0aWYgKGNnX2NyZWF0ZShjcHVjZykpXG4gXHRcdGdvdG8gY2xlYW51cDtcbiBcbi1cdHVzZXJfdXNlYyA9IGNnX3JlYWRfa2V5X2xvbmcoY3B1Y2csIFwmIzM0O2NwdS5zdGF0XCYjMzQ7LCBcJiMzNDt1c2VyX3VzZWNcJiMzNDspO1xuLVx0bmljZV91c2VjID0gY2dfcmVhZF9rZXlfbG9uZyhjcHVjZywgXCYjMzQ7Y3B1LnN0YXRcJiMzNDssIFwmIzM0O25pY2VfdXNlY1wmIzM0Oyk7XG4mIzQzO1x0dXNlcl91c2VjID0gY2dfcmVhZF9rZXlfczY0KGNwdWNnLCBcJiMzNDtjcHUuc3RhdFwmIzM0OywgXCYjMzQ7dXNlcl91c2VjXCYjMzQ7KTtcbiYjNDM7XHRuaWNlX3VzZWMgPSBjZ19yZWFkX2tleV9zNjQoY3B1Y2csIFwmIzM0O2NwdS5zdGF0XCYjMzQ7LCBcJiMzNDtuaWNlX3VzZWNcJiMzNDspO1xuIFx0aWYgKG5pY2VfdXNlYyA9PSAtMSlcbiBcdFx0cmV0ID0gS1NGVF9TS0lQO1xuIFx0aWYgKHVzZXJfdXNlYyAhPSAwIHx8IG5pY2VfdXNlYyAhPSAwKVxuQEAgLTI4OSw4ICYjNDM7Mjg5LDggQEAgc3RhdGljIGludCB0ZXN0X2NwdWNnX25pY2UoY29uc3QgY2hhciAqcm9vdClcbiBcdFx0aWYgKCFXSUZFWElURUQoc3RhdHVzKSlcbiBcdFx0XHRnb3RvIGNsZWFudXA7XG4gXG4tXHRcdHVzZXJfdXNlYyA9IGNnX3JlYWRfa2V5X2xvbmcoY3B1Y2csIFwmIzM0O2NwdS5zdGF0XCYjMzQ7LCBcJiMzNDt1c2VyX3VzZWNcJiMzNDspO1xuLVx0XHRuaWNlX3VzZWMgPSBjZ19yZWFkX2tleV9sb25nKGNwdWNnLCBcJiMzNDtjcHUuc3RhdFwmIzM0OywgXCYjMzQ7bmljZV91c2VjXCYjMzQ7KTtcbiYjNDM7XHRcdHVzZXJfdXNlYyA9IGNnX3JlYWRfa2V5X3M2NChjcHVjZywgXCYjMzQ7Y3B1LnN0YXRcJiMzNDssIFwmIzM0O3VzZXJfdXNlY1wmIzM0Oyk7XG4mIzQzO1x0XHRuaWNlX3VzZWMgPSBjZ19yZWFkX2tleV9zNjQoY3B1Y2csIFwmIzM0O2NwdS5zdGF0XCYjMzQ7LCBcJiMzNDtuaWNlX3VzZWNcJiMzNDspO1xuIFx0XHRpZiAodXNlcl91c2VjIFx1MDAzYz0gMClcbiBcdFx0XHRnb3RvIGNsZWFudXA7XG4gXHRcdGlmICghdmFsdWVzX2Nsb3NlX3JlcG9ydChuaWNlX3VzZWMsIGV4cGVjdGVkX25pY2VfdXNlYywgMSkpXG5AQCAtMzU3LDggJiM0MzszNTcsOCBAQCBydW5fY3B1Y2dfd2VpZ2h0X3Rlc3QoXG4gXHR9XG4gXG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBBUlJBWV9TSVpFKGNoaWxkcmVuKTsgaSYjNDM7JiM0MzspXG4tXHRcdGNoaWxkcmVuW2ldLnVzYWdlID0gY2dfcmVhZF9rZXlfbG9uZyhjaGlsZHJlbltpXS5jZ3JvdXAsXG4tXHRcdFx0XHRcJiMzNDtjcHUuc3RhdFwmIzM0OywgXCYjMzQ7dXNhZ2VfdXNlY1wmIzM0Oyk7XG4mIzQzO1x0XHRjaGlsZHJlbltpXS51c2FnZSA9IGNnX3JlYWRfa2V5X3M2NChjaGlsZHJlbltpXS5jZ3JvdXAsXG4mIzQzO1x0XHRcdFx0XHRcdCAgICBcJiMzNDtjcHUuc3RhdFwmIzM0OywgXCYjMzQ7dXNhZ2VfdXNlY1wmIzM0Oyk7XG4gXG4gXHRpZiAodmFsaWRhdGUoY2hpbGRyZW4sIEFSUkFZX1NJWkUoY2hpbGRyZW4pKSlcbiBcdFx0Z290byBjbGVhbnVwO1xuQEAgLTQ4Niw3ICYjNDM7NDg2LDcgQEAgcnVuX2NwdWNnX25lc3RlZF93ZWlnaHRfdGVzdChjb25zdCBjaGFyICpyb290LCBib29sIG92ZXJwcm92aXNpb25lZClcbiBcdGludCByZXQgPSBLU0ZUX0ZBSUwsIGk7XG4gXHRjaGFyICpwYXJlbnQgPSBOVUxMLCAqY2hpbGQgPSBOVUxMO1xuIFx0c3RydWN0IGNwdV9ob2dnZXIgbGVhZlszXSA9IHt9O1xuLVx0bG9uZyBuZXN0ZWRfbGVhZl91c2FnZSwgY2hpbGRfdXNhZ2U7XG4mIzQzO1x0czY0IG5lc3RlZF9sZWFmX3VzYWdlLCBjaGlsZF91c2FnZTtcbiBcdGludCBucHJvY3MgPSBnZXRfbnByb2NzKCk7XG4gXG4gXHRpZiAoIW92ZXJwcm92aXNpb25lZCkge1xuQEAgLTU2Nyw4ICYjNDM7NTY3LDggQEAgcnVuX2NwdWNnX25lc3RlZF93ZWlnaHRfdGVzdChjb25zdCBjaGFyICpyb290LCBib29sIG92ZXJwcm92aXNpb25lZClcbiBcdH1cbiBcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIEFSUkFZX1NJWkUobGVhZik7IGkmIzQzOyYjNDM7KSB7XG4tXHRcdGxlYWZbaV0udXNhZ2UgPSBjZ19yZWFkX2tleV9sb25nKGxlYWZbaV0uY2dyb3VwLFxuLVx0XHRcdFx0XCYjMzQ7Y3B1LnN0YXRcJiMzNDssIFwmIzM0O3VzYWdlX3VzZWNcJiMzNDspO1xuJiM0MztcdFx0bGVhZltpXS51c2FnZSA9IGNnX3JlYWRfa2V5X3M2NChsZWFmW2ldLmNncm91cCwgXCYjMzQ7Y3B1LnN0YXRcJiMzNDssXG4mIzQzO1x0XHRcdFx0XHRcdFwmIzM0O3VzYWdlX3VzZWNcJiMzNDspO1xuIFx0XHRpZiAobGVhZltpXS51c2FnZSBcdTAwM2M9IDApXG4gXHRcdFx0Z290byBjbGVhbnVwO1xuIFx0fVxuQEAgLTU4MCw4ICYjNDM7NTgwLDcgQEAgcnVuX2NwdWNnX25lc3RlZF93ZWlnaHRfdGVzdChjb25zdCBjaGFyICpyb290LCBib29sIG92ZXJwcm92aXNpb25lZClcbiBcdH0gZWxzZSBpZiAoIXZhbHVlc19jbG9zZV9yZXBvcnQobGVhZlswXS51c2FnZSAqIDIsIG5lc3RlZF9sZWFmX3VzYWdlLCAxNSkpXG4gXHRcdGdvdG8gY2xlYW51cDtcbiBcbi1cbi1cdGNoaWxkX3VzYWdlID0gY2dfcmVhZF9rZXlfbG9uZyhjaGlsZCwgXCYjMzQ7Y3B1LnN0YXRcJiMzNDssIFwmIzM0O3VzYWdlX3VzZWNcJiMzNDspO1xuJiM0MztcdGNoaWxkX3VzYWdlID0gY2dfcmVhZF9rZXlfczY0KGNoaWxkLCBcJiMzNDtjcHUuc3RhdFwmIzM0OywgXCYjMzQ7dXNhZ2VfdXNlY1wmIzM0Oyk7XG4gXHRpZiAoY2hpbGRfdXNhZ2UgXHUwMDNjPSAwKVxuIFx0XHRnb3RvIGNsZWFudXA7XG4gXHRpZiAoIXZhbHVlc19jbG9zZV9yZXBvcnQoY2hpbGRfdXNhZ2UsIG5lc3RlZF9sZWFmX3VzYWdlLCAxKSlcbkBAIC02NzksNyAmIzQzOzY3OCw4IEBAIHN0YXRpYyBpbnQgdGVzdF9jcHVjZ19tYXgoY29uc3QgY2hhciAqcm9vdClcbiBcdGxvbmcgZHVyYXRpb25fc2Vjb25kcyA9IDE7XG4gXG4gXHRsb25nIGR1cmF0aW9uX3VzZWM7XG4tXHRsb25nIHVzYWdlX3VzZWMsIG5fcGVyaW9kcywgcmVtYWluZGVyX3VzZWMsIGV4cGVjdGVkX3VzYWdlX3VzZWM7XG4mIzQzO1x0bG9uZyBuX3BlcmlvZHMsIHJlbWFpbmRlcl91c2VjLCBleHBlY3RlZF91c2FnZV91c2VjO1xuJiM0MztcdHM2NCB1c2FnZV91c2VjO1xuIFx0Y2hhciAqY3B1Y2c7XG4gXHRjaGFyIHF1b3RhX2J1ZlszMl07XG4gXG5AQCAtNzA4LDcgJiM0Mzs3MDgsNyBAQCBzdGF0aWMgaW50IHRlc3RfY3B1Y2dfbWF4KGNvbnN0IGNoYXIgKnJvb3QpXG4gXHRpZiAoY2dfcnVuKGNwdWNnLCBob2dfY3B1c190aW1lZCwgKHZvaWQgKilcdTAwMjZwYXJhbSkpXG4gXHRcdGdvdG8gY2xlYW51cDtcbiBcbi1cdHVzYWdlX3VzZWMgPSBjZ19yZWFkX2tleV9sb25nKGNwdWNnLCBcJiMzNDtjcHUuc3RhdFwmIzM0OywgXCYjMzQ7dXNhZ2VfdXNlY1wmIzM0Oyk7XG4mIzQzO1x0dXNhZ2VfdXNlYyA9IGNnX3JlYWRfa2V5X3M2NChjcHVjZywgXCYjMzQ7Y3B1LnN0YXRcJiMzNDssIFwmIzM0O3VzYWdlX3VzZWNcJiMzNDspO1xuIFx0aWYgKHVzYWdlX3VzZWMgXHUwMDNjPSAwKVxuIFx0XHRnb3RvIGNsZWFudXA7XG4gXG5AQCAtNzQ2LDcgJiM0Mzs3NDYsOCBAQCBzdGF0aWMgaW50IHRlc3RfY3B1Y2dfbWF4X25lc3RlZChjb25zdCBjaGFyICpyb290KVxuIFx0bG9uZyBkdXJhdGlvbl9zZWNvbmRzID0gMTtcbiBcbiBcdGxvbmcgZHVyYXRpb25fdXNlYztcbi1cdGxvbmcgdXNhZ2VfdXNlYywgbl9wZXJpb2RzLCByZW1haW5kZXJfdXNlYywgZXhwZWN0ZWRfdXNhZ2VfdXNlYztcbiYjNDM7XHRsb25nIG5fcGVyaW9kcywgcmVtYWluZGVyX3VzZWMsIGV4cGVjdGVkX3VzYWdlX3VzZWM7XG4mIzQzO1x0czY0IHVzYWdlX3VzZWM7XG4gXHRjaGFyICpwYXJlbnQsICpjaGlsZDtcbiBcdGNoYXIgcXVvdGFfYnVmWzMyXTtcbiBcbkBAIC03ODIsNyAmIzQzOzc4Myw3IEBAIHN0YXRpYyBpbnQgdGVzdF9jcHVjZ19tYXhfbmVzdGVkKGNvbnN0IGNoYXIgKnJvb3QpXG4gXHRpZiAoY2dfcnVuKGNoaWxkLCBob2dfY3B1c190aW1lZCwgKHZvaWQgKilcdTAwMjZwYXJhbSkpXG4gXHRcdGdvdG8gY2xlYW51cDtcbiBcbi1cdHVzYWdlX3VzZWMgPSBjZ19yZWFkX2tleV9sb25nKGNoaWxkLCBcJiMzNDtjcHUuc3RhdFwmIzM0OywgXCYjMzQ7dXNhZ2VfdXNlY1wmIzM0Oyk7XG4mIzQzO1x0dXNhZ2VfdXNlYyA9IGNnX3JlYWRfa2V5X3M2NChjaGlsZCwgXCYjMzQ7Y3B1LnN0YXRcJiMzNDssIFwmIzM0O3VzYWdlX3VzZWNcJiMzNDspO1xuIFx0aWYgKHVzYWdlX3VzZWMgXHUwMDNjPSAwKVxuIFx0XHRnb3RvIGNsZWFudXA7XG4gXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvY2dyb3VwL3Rlc3RfZnJlZXplci5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvY2dyb3VwL3Rlc3RfZnJlZXplci5jXG5pbmRleCBmMjhiYjAyZTk3ODNiLi5mNGYwODJjMTNkNGI3IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvY2dyb3VwL3Rlc3RfZnJlZXplci5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9jZ3JvdXAvdGVzdF9mcmVlemVyLmNcbkBAIC04MDcsMTAgJiM0Mzs4MDcsOSBAQCBzdGF0aWMgaW50IHRlc3RfY2dmcmVlemVyX3Zmb3JrKGNvbnN0IGNoYXIgKnJvb3QpXG4gLypcbiAgKiBHZXQgdGhlIGN1cnJlbnQgZnJvemVuX3VzZWMgZm9yIHRoZSBjZ3JvdXAuXG4gICovXG4tc3RhdGljIGxvbmcgY2dfY2hlY2tfZnJlZXpldGltZShjb25zdCBjaGFyICpjZ3JvdXApXG4mIzQzO3N0YXRpYyBzNjQgY2dfY2hlY2tfZnJlZXpldGltZShjb25zdCBjaGFyICpjZ3JvdXApXG4ge1xuLVx0cmV0dXJuIGNnX3JlYWRfa2V5X2xvbmcoY2dyb3VwLCBcJiMzNDtjZ3JvdXAuc3RhdC5sb2NhbFwmIzM0Oyxcbi1cdFx0XHRcdFwmIzM0O2Zyb3plbl91c2VjIFwmIzM0Oyk7XG4mIzQzO1x0cmV0dXJuIGNnX3JlYWRfa2V5X3M2NChjZ3JvdXAsIFwmIzM0O2Nncm91cC5zdGF0LmxvY2FsXCYjMzQ7LCBcJiMzNDtmcm96ZW5fdXNlYyBcJiMzNDspO1xuIH1cbiBcbiAvKlxuQEAgLTgyMCw3ICYjNDM7ODE5LDcgQEAgc3RhdGljIGludCB0ZXN0X2NnZnJlZXplcl90aW1lX2VtcHR5KGNvbnN0IGNoYXIgKnJvb3QpXG4ge1xuIFx0aW50IHJldCA9IEtTRlRfRkFJTDtcbiBcdGNoYXIgKmNncm91cCA9IE5VTEw7XG4tXHRsb25nIHByZXYsIGN1cnI7XG4mIzQzO1x0czY0IHByZXYsIGN1cnI7XG4gXG4gXHRjZ3JvdXAgPSBjZ19uYW1lKHJvb3QsIFwmIzM0O2NnX3RpbWVfdGVzdF9lbXB0eVwmIzM0Oyk7XG4gXHRpZiAoIWNncm91cClcbkBAIC04MzksNyAmIzQzOzgzOCw3IEBAIHN0YXRpYyBpbnQgdGVzdF9jZ2ZyZWV6ZXJfdGltZV9lbXB0eShjb25zdCBjaGFyICpyb290KVxuIFx0XHRnb3RvIGNsZWFudXA7XG4gXHR9XG4gXHRpZiAoY3VyciBcdTAwM2UgMCkge1xuLVx0XHRkZWJ1ZyhcJiMzNDtFeHBlY3QgdGltZSAoJWxkKSB0byBiZSAwXFxuXCYjMzQ7LCBjdXJyKTtcbiYjNDM7XHRcdGRlYnVnKFwmIzM0O0V4cGVjdCB0aW1lICglbGxkKSB0byBiZSAwXFxuXCYjMzQ7LCBjdXJyKTtcbiBcdFx0Z290byBjbGVhbnVwO1xuIFx0fVxuIFxuQEAgLTg1Myw4ICYjNDM7ODUyLDcgQEAgc3RhdGljIGludCB0ZXN0X2NnZnJlZXplcl90aW1lX2VtcHR5KGNvbnN0IGNoYXIgKnJvb3QpXG4gXHR1c2xlZXAoMTAwMCk7XG4gXHRjdXJyID0gY2dfY2hlY2tfZnJlZXpldGltZShjZ3JvdXApO1xuIFx0aWYgKGN1cnIgXHUwMDNjIDEwMDApIHtcbi1cdFx0ZGVidWcoXCYjMzQ7RXhwZWN0IHRpbWUgKCVsZCkgdG8gYmUgYXQgbGVhc3QgMTAwMCB1c1xcblwmIzM0Oyxcbi1cdFx0ICAgICAgY3Vycik7XG4mIzQzO1x0XHRkZWJ1ZyhcJiMzNDtFeHBlY3QgdGltZSAoJWxsZCkgdG8gYmUgYXQgbGVhc3QgMTAwMCB1c1xcblwmIzM0OywgY3Vycik7XG4gXHRcdGdvdG8gY2xlYW51cDtcbiBcdH1cbiBcbkBAIC04NjcsNyAmIzQzOzg2NSw3IEBAIHN0YXRpYyBpbnQgdGVzdF9jZ2ZyZWV6ZXJfdGltZV9lbXB0eShjb25zdCBjaGFyICpyb290KVxuIFx0cHJldiA9IGN1cnI7XG4gXHRjdXJyID0gY2dfY2hlY2tfZnJlZXpldGltZShjZ3JvdXApO1xuIFx0aWYgKGN1cnIgXHUwMDNjPSBwcmV2KSB7XG4tXHRcdGRlYnVnKFwmIzM0O0V4cGVjdCB0aW1lICglbGQpIHRvIGJlIG1vcmUgdGhhbiBwcmV2aW91cyBjaGVjayAoJWxkKVxcblwmIzM0OyxcbiYjNDM7XHRcdGRlYnVnKFwmIzM0O0V4cGVjdCB0aW1lICglbGxkKSB0byBiZSBtb3JlIHRoYW4gcHJldmlvdXMgY2hlY2sgKCVsbGQpXFxuXCYjMzQ7LFxuIFx0XHQgICAgICBjdXJyLCBwcmV2KTtcbiBcdFx0Z290byBjbGVhbnVwO1xuIFx0fVxuQEAgLTg3OSw3ICYjNDM7ODc3LDcgQEAgc3RhdGljIGludCB0ZXN0X2NnZnJlZXplcl90aW1lX2VtcHR5KGNvbnN0IGNoYXIgKnJvb3QpXG4gXHRwcmV2ID0gY3VycjtcbiBcdGN1cnIgPSBjZ19jaGVja19mcmVlemV0aW1lKGNncm91cCk7XG4gXHRpZiAoY3VyciAhPSBwcmV2KSB7XG4tXHRcdGRlYnVnKFwmIzM0O0V4cGVjdCB0aW1lICglbGQpIHRvIGJlIHVuY2hhbmdlZCBmcm9tIHByZXZpb3VzIGNoZWNrICglbGQpXFxuXCYjMzQ7LFxuJiM0MztcdFx0ZGVidWcoXCYjMzQ7RXhwZWN0IHRpbWUgKCVsbGQpIHRvIGJlIHVuY2hhbmdlZCBmcm9tIHByZXZpb3VzIGNoZWNrICglbGxkKVxcblwmIzM0OyxcbiBcdFx0ICAgICAgY3VyciwgcHJldik7XG4gXHRcdGdvdG8gY2xlYW51cDtcbiBcdH1cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9jZ3JvdXAvdGVzdF9rbWVtLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9jZ3JvdXAvdGVzdF9rbWVtLmNcbmluZGV4IDQzN2YyZDM1ZjIwNWUuLjI0OTg5OGYzYjgxZTggMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9jZ3JvdXAvdGVzdF9rbWVtLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2Nncm91cC90ZXN0X2ttZW0uY1xuQEAgLTU0LDcgJiM0Mzs1NCw4IEBAIHN0YXRpYyBpbnQgdGVzdF9rbWVtX2Jhc2ljKGNvbnN0IGNoYXIgKnJvb3QpXG4ge1xuIFx0aW50IHJldCA9IEtTRlRfRkFJTDtcbiBcdGNoYXIgKmNnID0gTlVMTDtcbi1cdGxvbmcgc2xhYjAsIHNsYWIxLCBjdXJyZW50O1xuJiM0MztcdHM2NCBzbGFiMCwgc2xhYjE7XG4mIzQzO1x0bG9uZyBjdXJyZW50O1xuIFxuIFx0Y2cgPSBjZ19uYW1lKHJvb3QsIFwmIzM0O2ttZW1fYmFzaWNfdGVzdFwmIzM0Oyk7XG4gXHRpZiAoIWNnKVxuQEAgLTY2LDcgJiM0Mzs2Nyw3IEBAIHN0YXRpYyBpbnQgdGVzdF9rbWVtX2Jhc2ljKGNvbnN0IGNoYXIgKnJvb3QpXG4gXHRpZiAoY2dfcnVuKGNnLCBhbGxvY19kY2FjaGUsICh2b2lkICopMTAwMDAwKSlcbiBcdFx0Z290byBjbGVhbnVwO1xuIFxuLVx0c2xhYjAgPSBjZ19yZWFkX2tleV9sb25nKGNnLCBcJiMzNDttZW1vcnkuc3RhdFwmIzM0OywgXCYjMzQ7c2xhYiBcJiMzNDspO1xuJiM0MztcdHNsYWIwID0gY2dfcmVhZF9rZXlfczY0KGNnLCBcJiMzNDttZW1vcnkuc3RhdFwmIzM0OywgXCYjMzQ7c2xhYiBcJiMzNDspO1xuIFx0aWYgKHNsYWIwIFx1MDAzYyAoMSBcdTAwM2NcdTAwM2MgMjApKVxuIFx0XHRnb3RvIGNsZWFudXA7XG4gXG5AQCAtNzUsNyAmIzQzOzc2LDcgQEAgc3RhdGljIGludCB0ZXN0X2ttZW1fYmFzaWMoY29uc3QgY2hhciAqcm9vdClcbiBcdC8qIHdhaXQgZm9yIFJDVSBmcmVlaW5nICovXG4gXHRzbGVlcCgxKTtcbiBcbi1cdHNsYWIxID0gY2dfcmVhZF9rZXlfbG9uZyhjZywgXCYjMzQ7bWVtb3J5LnN0YXRcJiMzNDssIFwmIzM0O3NsYWIgXCYjMzQ7KTtcbiYjNDM7XHRzbGFiMSA9IGNnX3JlYWRfa2V5X3M2NChjZywgXCYjMzQ7bWVtb3J5LnN0YXRcJiMzNDssIFwmIzM0O3NsYWIgXCYjMzQ7KTtcbiBcdGlmIChzbGFiMSBcdTAwM2MgMClcbiBcdFx0Z290byBjbGVhbnVwO1xuIFxuQEAgLTE2Nyw3ICYjNDM7MTY4LDggQEAgc3RhdGljIGludCBjZ19ydW5faW5fc3ViY2dyb3Vwcyhjb25zdCBjaGFyICpwYXJlbnQsXG4gICovXG4gc3RhdGljIGludCB0ZXN0X2ttZW1fbWVtY2dfZGVsZXRpb24oY29uc3QgY2hhciAqcm9vdClcbiB7XG4tXHRsb25nIGN1cnJlbnQsIGFub24sIGZpbGUsIGtlcm5lbCwgc29jaywgc3VtO1xuJiM0MztcdGxvbmcgY3VycmVudDtcbiYjNDM7XHRzNjQgYW5vbiwgZmlsZSwga2VybmVsLCBzb2NrLCBzdW07XG4gXHRpbnQgcmV0ID0gS1NGVF9GQUlMO1xuIFx0Y2hhciAqcGFyZW50O1xuIFxuQEAgLTE4NSwyMyAmIzQzOzE4NywyMyBAQCBzdGF0aWMgaW50IHRlc3Rfa21lbV9tZW1jZ19kZWxldGlvbihjb25zdCBjaGFyICpyb290KVxuIFx0XHRnb3RvIGNsZWFudXA7XG4gXG4gXHRjdXJyZW50ID0gY2dfcmVhZF9sb25nKHBhcmVudCwgXCYjMzQ7bWVtb3J5LmN1cnJlbnRcJiMzNDspO1xuLVx0YW5vbiA9IGNnX3JlYWRfa2V5X2xvbmcocGFyZW50LCBcJiMzNDttZW1vcnkuc3RhdFwmIzM0OywgXCYjMzQ7YW5vbiBcJiMzNDspO1xuLVx0ZmlsZSA9IGNnX3JlYWRfa2V5X2xvbmcocGFyZW50LCBcJiMzNDttZW1vcnkuc3RhdFwmIzM0OywgXCYjMzQ7ZmlsZSBcJiMzNDspO1xuLVx0a2VybmVsID0gY2dfcmVhZF9rZXlfbG9uZyhwYXJlbnQsIFwmIzM0O21lbW9yeS5zdGF0XCYjMzQ7LCBcJiMzNDtrZXJuZWwgXCYjMzQ7KTtcbi1cdHNvY2sgPSBjZ19yZWFkX2tleV9sb25nKHBhcmVudCwgXCYjMzQ7bWVtb3J5LnN0YXRcJiMzNDssIFwmIzM0O3NvY2sgXCYjMzQ7KTtcbiYjNDM7XHRhbm9uID0gY2dfcmVhZF9rZXlfczY0KHBhcmVudCwgXCYjMzQ7bWVtb3J5LnN0YXRcJiMzNDssIFwmIzM0O2Fub24gXCYjMzQ7KTtcbiYjNDM7XHRmaWxlID0gY2dfcmVhZF9rZXlfczY0KHBhcmVudCwgXCYjMzQ7bWVtb3J5LnN0YXRcJiMzNDssIFwmIzM0O2ZpbGUgXCYjMzQ7KTtcbiYjNDM7XHRrZXJuZWwgPSBjZ19yZWFkX2tleV9zNjQocGFyZW50LCBcJiMzNDttZW1vcnkuc3RhdFwmIzM0OywgXCYjMzQ7a2VybmVsIFwmIzM0Oyk7XG4mIzQzO1x0c29jayA9IGNnX3JlYWRfa2V5X3M2NChwYXJlbnQsIFwmIzM0O21lbW9yeS5zdGF0XCYjMzQ7LCBcJiMzNDtzb2NrIFwmIzM0Oyk7XG4gXHRpZiAoY3VycmVudCBcdTAwM2MgMCB8fCBhbm9uIFx1MDAzYyAwIHx8IGZpbGUgXHUwMDNjIDAgfHwga2VybmVsIFx1MDAzYyAwIHx8IHNvY2sgXHUwMDNjIDApXG4gXHRcdGdvdG8gY2xlYW51cDtcbiBcbiBcdHN1bSA9IGFub24gJiM0MzsgZmlsZSAmIzQzOyBrZXJuZWwgJiM0Mzsgc29jaztcbi1cdGlmIChsYWJzKHN1bSAtIGN1cnJlbnQpIFx1MDAzYyBNQVhfVk1TVEFUX0VSUk9SKSB7XG4mIzQzO1x0aWYgKGxsYWJzKHN1bSAtIGN1cnJlbnQpIFx1MDAzYyBNQVhfVk1TVEFUX0VSUk9SKSB7XG4gXHRcdHJldCA9IEtTRlRfUEFTUztcbiBcdH0gZWxzZSB7XG4gXHRcdHByaW50ZihcJiMzNDttZW1vcnkuY3VycmVudCA9ICVsZFxcblwmIzM0OywgY3VycmVudCk7XG4tXHRcdHByaW50ZihcJiMzNDthbm9uICYjNDM7IGZpbGUgJiM0Mzsga2VybmVsICYjNDM7IHNvY2sgPSAlbGRcXG5cJiMzNDssIHN1bSk7XG4tXHRcdHByaW50ZihcJiMzNDthbm9uID0gJWxkXFxuXCYjMzQ7LCBhbm9uKTtcbi1cdFx0cHJpbnRmKFwmIzM0O2ZpbGUgPSAlbGRcXG5cJiMzNDssIGZpbGUpO1xuLVx0XHRwcmludGYoXCYjMzQ7a2VybmVsID0gJWxkXFxuXCYjMzQ7LCBrZXJuZWwpO1xuLVx0XHRwcmludGYoXCYjMzQ7c29jayA9ICVsZFxcblwmIzM0Oywgc29jayk7XG4mIzQzO1x0XHRwcmludGYoXCYjMzQ7YW5vbiAmIzQzOyBmaWxlICYjNDM7IGtlcm5lbCAmIzQzOyBzb2NrID0gJWxsZFxcblwmIzM0Oywgc3VtKTtcbiYjNDM7XHRcdHByaW50ZihcJiMzNDthbm9uID0gJWxsZFxcblwmIzM0OywgYW5vbik7XG4mIzQzO1x0XHRwcmludGYoXCYjMzQ7ZmlsZSA9ICVsbGRcXG5cJiMzNDssIGZpbGUpO1xuJiM0MztcdFx0cHJpbnRmKFwmIzM0O2tlcm5lbCA9ICVsbGRcXG5cJiMzNDssIGtlcm5lbCk7XG4mIzQzO1x0XHRwcmludGYoXCYjMzQ7c29jayA9ICVsbGRcXG5cJiMzNDssIHNvY2spO1xuIFx0fVxuIFxuIGNsZWFudXA6XG5AQCAtMjQ4LDcgJiM0MzsyNTAsNyBAQCBzdGF0aWMgaW50IHNwYXduXzEwMDBfdGhyZWFkcyhjb25zdCBjaGFyICpjZ3JvdXAsIHZvaWQgKmFyZylcbiBcdGludCBucl90aHJlYWRzID0gMTAwMDtcbiBcdHB0aHJlYWRfdCAqdGluZm87XG4gXHR1bnNpZ25lZCBsb25nIGk7XG4tXHRsb25nIHN0YWNrO1xuJiM0MztcdHM2NCBzdGFjaztcbiBcdGludCByZXQgPSAtMTtcbiBcbiBcdHRpbmZvID0gY2FsbG9jKG5yX3RocmVhZHMsIHNpemVvZihwdGhyZWFkX3QpKTtcbkBAIC0yNjMsNyAmIzQzOzI2NSw3IEBAIHN0YXRpYyBpbnQgc3Bhd25fMTAwMF90aHJlYWRzKGNvbnN0IGNoYXIgKmNncm91cCwgdm9pZCAqYXJnKVxuIFx0XHR9XG4gXHR9XG4gXG4tXHRzdGFjayA9IGNnX3JlYWRfa2V5X2xvbmcoY2dyb3VwLCBcJiMzNDttZW1vcnkuc3RhdFwmIzM0OywgXCYjMzQ7a2VybmVsX3N0YWNrIFwmIzM0Oyk7XG4mIzQzO1x0c3RhY2sgPSBjZ19yZWFkX2tleV9zNjQoY2dyb3VwLCBcJiMzNDttZW1vcnkuc3RhdFwmIzM0OywgXCYjMzQ7a2VybmVsX3N0YWNrIFwmIzM0Oyk7XG4gXHRpZiAoc3RhY2sgXHUwMDNlPSA0MDk2ICogMTAwMClcbiBcdFx0cmV0ID0gMDtcbiBcbkBAIC0zMDcsNyAmIzQzOzMwOSw3IEBAIHN0YXRpYyBpbnQgdGVzdF9rbWVtX2RlYWRfY2dyb3Vwcyhjb25zdCBjaGFyICpyb290KVxuIHtcbiBcdGludCByZXQgPSBLU0ZUX0ZBSUw7XG4gXHRjaGFyICpwYXJlbnQ7XG4tXHRsb25nIGRlYWQgPSAtMTtcbiYjNDM7XHRzNjQgZGVhZCA9IC0xO1xuIFxuIFx0cGFyZW50ID0gY2dfbmFtZShyb290LCBcJiMzNDtrbWVtX2RlYWRfY2dyb3Vwc190ZXN0XCYjMzQ7KTtcbiBcdGlmICghcGFyZW50KVxuQEAgLTMyOCw5ICYjNDM7MzMwLDEwIEBAIHN0YXRpYyBpbnQgdGVzdF9rbWVtX2RlYWRfY2dyb3Vwcyhjb25zdCBjaGFyICpyb290KVxuIFx0ICogZnJvbSBhIHNwZWNpZmljIGtlcm5lbCBjb25zdGFudCwgYW5kIGNhbiBiZSBhZGp1c3RlZCBpZiByZWNsYWltXG4gXHQgKiBiZWhhdmlvciBjaGFuZ2VzIGluIHRoZSBmdXR1cmUuXG4gXHQgKi9cbi1cdGRlYWQgPSBjZ19yZWFkX2tleV9sb25nX3BvbGwocGFyZW50LCBcJiMzNDtjZ3JvdXAuc3RhdFwmIzM0Oyxcbi1cdFx0XHRcdFx0XCYjMzQ7bnJfZHlpbmdfZGVzY2VuZGFudHMgXCYjMzQ7LCAwLCBLTUVNX0RFQURfV0FJVF9SRVRSSUVTLFxuLVx0XHRcdFx0XHRERUZBVUxUX1dBSVRfSU5URVJWQUxfVVMpO1xuJiM0MztcdGRlYWQgPSBjZ19yZWFkX2tleV9zNjRfcG9sbChwYXJlbnQsIFwmIzM0O2Nncm91cC5zdGF0XCYjMzQ7LFxuJiM0MztcdFx0XHRcdCAgICBcJiMzNDtucl9keWluZ19kZXNjZW5kYW50cyBcJiMzNDssIDAsXG4mIzQzO1x0XHRcdFx0ICAgIEtNRU1fREVBRF9XQUlUX1JFVFJJRVMsXG4mIzQzO1x0XHRcdFx0ICAgIERFRkFVTFRfV0FJVF9JTlRFUlZBTF9VUyk7XG4gXHRpZiAoZGVhZClcbiBcdFx0Z290byBjbGVhbnVwO1xuIFxuQEAgLTM1Myw3ICYjNDM7MzU2LDggQEAgc3RhdGljIGludCB0ZXN0X3BlcmNwdV9iYXNpYyhjb25zdCBjaGFyICpyb290KVxuIHtcbiBcdGludCByZXQgPSBLU0ZUX0ZBSUw7XG4gXHRjaGFyICpwYXJlbnQsICpjaGlsZDtcbi1cdGxvbmcgY3VycmVudCwgcGVyY3B1LCBzbGFiO1xuJiM0MztcdGxvbmcgY3VycmVudDtcbiYjNDM7XHRzNjQgcGVyY3B1LCBzbGFiO1xuIFx0aW50IGk7XG4gXG4gXHRwYXJlbnQgPSBjZ19uYW1lKHJvb3QsIFwmIzM0O3BlcmNwdV9iYXNpY190ZXN0XCYjMzQ7KTtcbkBAIC0zODIsMTUgJiM0MzszODYsMTUgQEAgc3RhdGljIGludCB0ZXN0X3BlcmNwdV9iYXNpYyhjb25zdCBjaGFyICpyb290KVxuIFx0fVxuIFxuIFx0Y3VycmVudCA9IGNnX3JlYWRfbG9uZyhwYXJlbnQsIFwmIzM0O21lbW9yeS5jdXJyZW50XCYjMzQ7KTtcbi1cdHBlcmNwdSA9IGNnX3JlYWRfa2V5X2xvbmcocGFyZW50LCBcJiMzNDttZW1vcnkuc3RhdFwmIzM0OywgXCYjMzQ7cGVyY3B1IFwmIzM0Oyk7XG4tXHRzbGFiID0gY2dfcmVhZF9rZXlfbG9uZyhwYXJlbnQsIFwmIzM0O21lbW9yeS5zdGF0XCYjMzQ7LCBcJiMzNDtzbGFiIFwmIzM0Oyk7XG4mIzQzO1x0cGVyY3B1ID0gY2dfcmVhZF9rZXlfczY0KHBhcmVudCwgXCYjMzQ7bWVtb3J5LnN0YXRcJiMzNDssIFwmIzM0O3BlcmNwdSBcJiMzNDspO1xuJiM0MztcdHNsYWIgPSBjZ19yZWFkX2tleV9zNjQocGFyZW50LCBcJiMzNDttZW1vcnkuc3RhdFwmIzM0OywgXCYjMzQ7c2xhYiBcJiMzNDspO1xuIFxuIFx0aWYgKGN1cnJlbnQgXHUwMDNlIDAgXHUwMDI2XHUwMDI2IHBlcmNwdSBcdTAwM2UgMCBcdTAwMjZcdTAwMjYgc2xhYiBcdTAwM2U9IDAgXHUwMDI2XHUwMDI2XG4tXHRcdFx0bGFicyhjdXJyZW50IC0gKHBlcmNwdSAmIzQzOyBzbGFiKSkgXHUwMDNjIE1BWF9WTVNUQVRfRVJST1IpXG4mIzQzO1x0ICAgIGxsYWJzKGN1cnJlbnQgLSAocGVyY3B1ICYjNDM7IHNsYWIpKSBcdTAwM2MgTUFYX1ZNU1RBVF9FUlJPUilcbiBcdFx0cmV0ID0gS1NGVF9QQVNTO1xuIFx0ZWxzZVxuLVx0XHRwcmludGYoXCYjMzQ7bWVtb3J5LmN1cnJlbnQgJWxkXFxucGVyY3B1ICVsZFxcbnNsYWIgJWxkXFxuZGVsdGEgJWxkXFxuXCYjMzQ7LFxuLVx0XHRcdGN1cnJlbnQsIHBlcmNwdSwgc2xhYiwgY3VycmVudCAtIChwZXJjcHUgJiM0Mzsgc2xhYikpO1xuJiM0MztcdFx0cHJpbnRmKFwmIzM0O21lbW9yeS5jdXJyZW50ICVsZFxcbnBlcmNwdSAlbGxkXFxuc2xhYiAlbGxkXFxuZGVsdGEgJWxsZFxcblwmIzM0OyxcbiYjNDM7XHRcdCAgICAgICBjdXJyZW50LCBwZXJjcHUsIHNsYWIsIGN1cnJlbnQgLSAocGVyY3B1ICYjNDM7IHNsYWIpKTtcbiBcbiBjbGVhbnVwX2NoaWxkcmVuOlxuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgMTAwMDsgaSYjNDM7JiM0MzspIHtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9jZ3JvdXAvdGVzdF9tZW1jb250cm9sLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9jZ3JvdXAvdGVzdF9tZW1jb250cm9sLmNcbmluZGV4IDNhODRkMDY4ZmJmMzYuLjUzOTY1MGMxZDU2MjYgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9jZ3JvdXAvdGVzdF9tZW1jb250cm9sLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2Nncm91cC90ZXN0X21lbWNvbnRyb2wuY1xuQEAgLTE5Miw3ICYjNDM7MTkyLDggQEAgc3RhdGljIGludCBhbGxvY19hbm9uXzUwTV9jaGVjayhjb25zdCBjaGFyICpjZ3JvdXAsIHZvaWQgKmFyZylcbiB7XG4gXHRzaXplX3Qgc2l6ZSA9IE1CKDUwKTtcbiBcdGNoYXIgKmJ1Zjtcbi1cdGxvbmcgYW5vbiwgY3VycmVudDtcbiYjNDM7XHRzNjQgYW5vbjtcbiYjNDM7XHRsb25nIGN1cnJlbnQ7XG4gXHRpbnQgcmV0ID0gLTE7XG4gXG4gXHRidWYgPSBhbGxvY19hbmRfcG9wdWxhdGVfYW5vbihzaXplKTtcbkBAIC0yMDYsNyAmIzQzOzIwNyw3IEBAIHN0YXRpYyBpbnQgYWxsb2NfYW5vbl81ME1fY2hlY2soY29uc3QgY2hhciAqY2dyb3VwLCB2b2lkICphcmcpXG4gXHRpZiAoIXZhbHVlc19jbG9zZShzaXplLCBjdXJyZW50LCAzKSlcbiBcdFx0Z290byBjbGVhbnVwO1xuIFxuLVx0YW5vbiA9IGNnX3JlYWRfa2V5X2xvbmcoY2dyb3VwLCBcJiMzNDttZW1vcnkuc3RhdFwmIzM0OywgXCYjMzQ7YW5vbiBcJiMzNDspO1xuJiM0MztcdGFub24gPSBjZ19yZWFkX2tleV9zNjQoY2dyb3VwLCBcJiMzNDttZW1vcnkuc3RhdFwmIzM0OywgXCYjMzQ7YW5vbiBcJiMzNDspO1xuIFx0aWYgKGFub24gXHUwMDNjIDApXG4gXHRcdGdvdG8gY2xlYW51cDtcbiBcbkBAIC0yMjMsNyAmIzQzOzIyNCw4IEBAIHN0YXRpYyBpbnQgYWxsb2NfcGFnZWNhY2hlXzUwTV9jaGVjayhjb25zdCBjaGFyICpjZ3JvdXAsIHZvaWQgKmFyZylcbiB7XG4gXHRzaXplX3Qgc2l6ZSA9IE1CKDUwKTtcbiBcdGludCByZXQgPSAtMTtcbi1cdGxvbmcgY3VycmVudCwgZmlsZTtcbiYjNDM7XHRsb25nIGN1cnJlbnQ7XG4mIzQzO1x0czY0IGZpbGU7XG4gXHRpbnQgZmQ7XG4gXG4gXHRmZCA9IGdldF90ZW1wX2ZkKCk7XG5AQCAtMjM3LDcgJiM0MzsyMzksNyBAQCBzdGF0aWMgaW50IGFsbG9jX3BhZ2VjYWNoZV81ME1fY2hlY2soY29uc3QgY2hhciAqY2dyb3VwLCB2b2lkICphcmcpXG4gXHRpZiAoY3VycmVudCBcdTAwM2Mgc2l6ZSlcbiBcdFx0Z290byBjbGVhbnVwO1xuIFxuLVx0ZmlsZSA9IGNnX3JlYWRfa2V5X2xvbmcoY2dyb3VwLCBcJiMzNDttZW1vcnkuc3RhdFwmIzM0OywgXCYjMzQ7ZmlsZSBcJiMzNDspO1xuJiM0MztcdGZpbGUgPSBjZ19yZWFkX2tleV9zNjQoY2dyb3VwLCBcJiMzNDttZW1vcnkuc3RhdFwmIzM0OywgXCYjMzQ7ZmlsZSBcJiMzNDspO1xuIFx0aWYgKGZpbGUgXHUwMDNjIDApXG4gXHRcdGdvdG8gY2xlYW51cDtcbiBcbkBAIC02MjMsMTAgJiM0Mzs2MjUsMTAgQEAgc3RhdGljIGludCB0ZXN0X21lbWNnX3Byb3RlY3Rpb24oY29uc3QgY2hhciAqcm9vdCwgYm9vbCBtaW4pXG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBBUlJBWV9TSVpFKGNoaWxkcmVuKTsgaSYjNDM7JiM0MzspIHtcbiBcdFx0aW50IGlnbm9yZV9sb3dfZXZlbnRzX2luZGV4ID0gaGFzX3JlY3Vyc2l2ZXByb3QgPyAyIDogLTE7XG4gXHRcdGludCBub19sb3dfZXZlbnRzX2luZGV4ID0gMTtcbi1cdFx0bG9uZyBsb3csIG9vbTtcbiYjNDM7XHRcdHM2NCBsb3csIG9vbTtcbiBcbi1cdFx0b29tID0gY2dfcmVhZF9rZXlfbG9uZyhjaGlsZHJlbltpXSwgXCYjMzQ7bWVtb3J5LmV2ZW50c1wmIzM0OywgXCYjMzQ7b29tIFwmIzM0Oyk7XG4tXHRcdGxvdyA9IGNnX3JlYWRfa2V5X2xvbmcoY2hpbGRyZW5baV0sIFwmIzM0O21lbW9yeS5ldmVudHNcJiMzNDssIFwmIzM0O2xvdyBcJiMzNDspO1xuJiM0MztcdFx0b29tID0gY2dfcmVhZF9rZXlfczY0KGNoaWxkcmVuW2ldLCBcJiMzNDttZW1vcnkuZXZlbnRzXCYjMzQ7LCBcJiMzNDtvb20gXCYjMzQ7KTtcbiYjNDM7XHRcdGxvdyA9IGNnX3JlYWRfa2V5X3M2NChjaGlsZHJlbltpXSwgXCYjMzQ7bWVtb3J5LmV2ZW50c1wmIzM0OywgXCYjMzQ7bG93IFwmIzM0Oyk7XG4gXG4gXHRcdGlmIChvb20pXG4gXHRcdFx0Z290byBjbGVhbnVwO1xuQEAgLTcxMSw3ICYjNDM7NzEzLDcgQEAgc3RhdGljIGludCB0ZXN0X21lbWNnX2hpZ2goY29uc3QgY2hhciAqcm9vdClcbiB7XG4gXHRpbnQgcmV0ID0gS1NGVF9GQUlMO1xuIFx0Y2hhciAqbWVtY2c7XG4tXHRsb25nIGhpZ2g7XG4mIzQzO1x0czY0IGhpZ2g7XG4gXG4gXHRtZW1jZyA9IGNnX25hbWUocm9vdCwgXCYjMzQ7bWVtY2dfdGVzdFwmIzM0Oyk7XG4gXHRpZiAoIW1lbWNnKVxuQEAgLTczOCw3ICYjNDM7NzQwLDcgQEAgc3RhdGljIGludCB0ZXN0X21lbWNnX2hpZ2goY29uc3QgY2hhciAqcm9vdClcbiBcdGlmIChjZ19ydW4obWVtY2csIGFsbG9jX3BhZ2VjYWNoZV9tYXhfMzBNLCBOVUxMKSlcbiBcdFx0Z290byBjbGVhbnVwO1xuIFxuLVx0aGlnaCA9IGNnX3JlYWRfa2V5X2xvbmcobWVtY2csIFwmIzM0O21lbW9yeS5ldmVudHNcJiMzNDssIFwmIzM0O2hpZ2ggXCYjMzQ7KTtcbiYjNDM7XHRoaWdoID0gY2dfcmVhZF9rZXlfczY0KG1lbWNnLCBcJiMzNDttZW1vcnkuZXZlbnRzXCYjMzQ7LCBcJiMzNDtoaWdoIFwmIzM0Oyk7XG4gXHRpZiAoaGlnaCBcdTAwM2M9IDApXG4gXHRcdGdvdG8gY2xlYW51cDtcbiBcbkBAIC03NzQsOCAmIzQzOzc3Niw4IEBAIHN0YXRpYyBpbnQgdGVzdF9tZW1jZ19oaWdoX3N5bmMoY29uc3QgY2hhciAqcm9vdClcbiB7XG4gXHRpbnQgcmV0ID0gS1NGVF9GQUlMLCBwaWQsIGZkID0gLTE7XG4gXHRjaGFyICptZW1jZztcbi1cdGxvbmcgcHJlX2hpZ2gsIHByZV9tYXg7XG4tXHRsb25nIHBvc3RfaGlnaCwgcG9zdF9tYXg7XG4mIzQzO1x0czY0IHByZV9oaWdoLCBwcmVfbWF4O1xuJiM0MztcdHM2NCBwb3N0X2hpZ2gsIHBvc3RfbWF4O1xuIFxuIFx0bWVtY2cgPSBjZ19uYW1lKHJvb3QsIFwmIzM0O21lbWNnX3Rlc3RcJiMzNDspO1xuIFx0aWYgKCFtZW1jZylcbkBAIC03ODQsOCAmIzQzOzc4Niw4IEBAIHN0YXRpYyBpbnQgdGVzdF9tZW1jZ19oaWdoX3N5bmMoY29uc3QgY2hhciAqcm9vdClcbiBcdGlmIChjZ19jcmVhdGUobWVtY2cpKVxuIFx0XHRnb3RvIGNsZWFudXA7XG4gXG4tXHRwcmVfaGlnaCA9IGNnX3JlYWRfa2V5X2xvbmcobWVtY2csIFwmIzM0O21lbW9yeS5ldmVudHNcJiMzNDssIFwmIzM0O2hpZ2ggXCYjMzQ7KTtcbi1cdHByZV9tYXggPSBjZ19yZWFkX2tleV9sb25nKG1lbWNnLCBcJiMzNDttZW1vcnkuZXZlbnRzXCYjMzQ7LCBcJiMzNDttYXggXCYjMzQ7KTtcbiYjNDM7XHRwcmVfaGlnaCA9IGNnX3JlYWRfa2V5X3M2NChtZW1jZywgXCYjMzQ7bWVtb3J5LmV2ZW50c1wmIzM0OywgXCYjMzQ7aGlnaCBcJiMzNDspO1xuJiM0MztcdHByZV9tYXggPSBjZ19yZWFkX2tleV9zNjQobWVtY2csIFwmIzM0O21lbW9yeS5ldmVudHNcJiMzNDssIFwmIzM0O21heCBcJiMzNDspO1xuIFx0aWYgKHByZV9oaWdoIFx1MDAzYyAwIHx8IHByZV9tYXggXHUwMDNjIDApXG4gXHRcdGdvdG8gY2xlYW51cDtcbiBcbkBAIC04MDgsOCAmIzQzOzgxMCw4IEBAIHN0YXRpYyBpbnQgdGVzdF9tZW1jZ19oaWdoX3N5bmMoY29uc3QgY2hhciAqcm9vdClcbiBcbiBcdGNnX3dhaXRfZm9yKGZkKTtcbiBcbi1cdHBvc3RfaGlnaCA9IGNnX3JlYWRfa2V5X2xvbmcobWVtY2csIFwmIzM0O21lbW9yeS5ldmVudHNcJiMzNDssIFwmIzM0O2hpZ2ggXCYjMzQ7KTtcbi1cdHBvc3RfbWF4ID0gY2dfcmVhZF9rZXlfbG9uZyhtZW1jZywgXCYjMzQ7bWVtb3J5LmV2ZW50c1wmIzM0OywgXCYjMzQ7bWF4IFwmIzM0Oyk7XG4mIzQzO1x0cG9zdF9oaWdoID0gY2dfcmVhZF9rZXlfczY0KG1lbWNnLCBcJiMzNDttZW1vcnkuZXZlbnRzXCYjMzQ7LCBcJiMzNDtoaWdoIFwmIzM0Oyk7XG4mIzQzO1x0cG9zdF9tYXggPSBjZ19yZWFkX2tleV9zNjQobWVtY2csIFwmIzM0O21lbW9yeS5ldmVudHNcJiMzNDssIFwmIzM0O21heCBcJiMzNDspO1xuIFx0aWYgKHBvc3RfaGlnaCBcdTAwM2MgMCB8fCBwb3N0X21heCBcdTAwM2MgMClcbiBcdFx0Z290byBjbGVhbnVwO1xuIFxuQEAgLTgzNiw3ICYjNDM7ODM4LDggQEAgc3RhdGljIGludCB0ZXN0X21lbWNnX21heChjb25zdCBjaGFyICpyb290KVxuIHtcbiBcdGludCByZXQgPSBLU0ZUX0ZBSUw7XG4gXHRjaGFyICptZW1jZztcbi1cdGxvbmcgY3VycmVudCwgbWF4O1xuJiM0MztcdGxvbmcgY3VycmVudDtcbiYjNDM7XHRzNjQgbWF4O1xuIFxuIFx0bWVtY2cgPSBjZ19uYW1lKHJvb3QsIFwmIzM0O21lbWNnX3Rlc3RcJiMzNDspO1xuIFx0aWYgKCFtZW1jZylcbkBAIC04NjUsNyAmIzQzOzg2OCw3IEBAIHN0YXRpYyBpbnQgdGVzdF9tZW1jZ19tYXgoY29uc3QgY2hhciAqcm9vdClcbiBcdGlmIChjdXJyZW50IFx1MDAzZSBNQigzMCkgfHwgIWN1cnJlbnQpXG4gXHRcdGdvdG8gY2xlYW51cDtcbiBcbi1cdG1heCA9IGNnX3JlYWRfa2V5X2xvbmcobWVtY2csIFwmIzM0O21lbW9yeS5ldmVudHNcJiMzNDssIFwmIzM0O21heCBcJiMzNDspO1xuJiM0MztcdG1heCA9IGNnX3JlYWRfa2V5X3M2NChtZW1jZywgXCYjMzQ7bWVtb3J5LmV2ZW50c1wmIzM0OywgXCYjMzQ7bWF4IFwmIzM0Oyk7XG4gXHRpZiAobWF4IFx1MDAzYz0gMClcbiBcdFx0Z290byBjbGVhbnVwO1xuIFxuQEAgLTEwMjksNyAmIzQzOzEwMzIsOCBAQCBzdGF0aWMgaW50IHRlc3RfbWVtY2dfc3dhcF9tYXhfcGVhayhjb25zdCBjaGFyICpyb290KVxuIHtcbiBcdGludCByZXQgPSBLU0ZUX0ZBSUw7XG4gXHRjaGFyICptZW1jZztcbi1cdGxvbmcgbWF4LCBwZWFrO1xuJiM0MztcdHM2NCBtYXg7XG4mIzQzO1x0bG9uZyBwZWFrO1xuIFx0c3RydWN0IHN0YXQgc3M7XG4gXHRpbnQgc3dhcF9wZWFrX2ZkID0gLTEsIG1lbV9wZWFrX2ZkID0gLTE7XG4gXG5AQCAtMTEyMiwxMCAmIzQzOzExMjYsMTAgQEAgc3RhdGljIGludCB0ZXN0X21lbWNnX3N3YXBfbWF4X3BlYWsoY29uc3QgY2hhciAqcm9vdClcbiBcdGlmICghY2dfcnVuKG1lbWNnLCBhbGxvY19hbm9uLCAodm9pZCAqKU1CKDEwMCkpKVxuIFx0XHRnb3RvIGNsZWFudXA7XG4gXG4tXHRpZiAoY2dfcmVhZF9rZXlfbG9uZyhtZW1jZywgXCYjMzQ7bWVtb3J5LmV2ZW50c1wmIzM0OywgXCYjMzQ7b29tIFwmIzM0OykgIT0gMSlcbiYjNDM7XHRpZiAoY2dfcmVhZF9rZXlfczY0KG1lbWNnLCBcJiMzNDttZW1vcnkuZXZlbnRzXCYjMzQ7LCBcJiMzNDtvb20gXCYjMzQ7KSAhPSAxKVxuIFx0XHRnb3RvIGNsZWFudXA7XG4gXG4tXHRpZiAoY2dfcmVhZF9rZXlfbG9uZyhtZW1jZywgXCYjMzQ7bWVtb3J5LmV2ZW50c1wmIzM0OywgXCYjMzQ7b29tX2tpbGwgXCYjMzQ7KSAhPSAxKVxuJiM0MztcdGlmIChjZ19yZWFkX2tleV9zNjQobWVtY2csIFwmIzM0O21lbW9yeS5ldmVudHNcJiMzNDssIFwmIzM0O29vbV9raWxsIFwmIzM0OykgIT0gMSlcbiBcdFx0Z290byBjbGVhbnVwO1xuIFxuIFx0cGVhayA9IGNnX3JlYWRfbG9uZyhtZW1jZywgXCYjMzQ7bWVtb3J5LnBlYWtcJiMzNDspO1xuQEAgLTExODYsNyAmIzQzOzExOTAsNyBAQCBzdGF0aWMgaW50IHRlc3RfbWVtY2dfc3dhcF9tYXhfcGVhayhjb25zdCBjaGFyICpyb290KVxuIFx0aWYgKGNnX3J1bihtZW1jZywgYWxsb2NfYW5vbl81ME1fY2hlY2tfc3dhcCwgKHZvaWQgKilNQigzMCkpKVxuIFx0XHRnb3RvIGNsZWFudXA7XG4gXG4tXHRtYXggPSBjZ19yZWFkX2tleV9sb25nKG1lbWNnLCBcJiMzNDttZW1vcnkuZXZlbnRzXCYjMzQ7LCBcJiMzNDttYXggXCYjMzQ7KTtcbiYjNDM7XHRtYXggPSBjZ19yZWFkX2tleV9zNjQobWVtY2csIFwmIzM0O21lbW9yeS5ldmVudHNcJiMzNDssIFwmIzM0O21heCBcJiMzNDspO1xuIFx0aWYgKG1heCBcdTAwM2M9IDApXG4gXHRcdGdvdG8gY2xlYW51cDtcbiBcbkBAIC0xMjQ4LDEwICYjNDM7MTI1MiwxMCBAQCBzdGF0aWMgaW50IHRlc3RfbWVtY2dfb29tX2V2ZW50cyhjb25zdCBjaGFyICpyb290KVxuIFx0aWYgKGNnX3JlYWRfc3RyY21wKG1lbWNnLCBcJiMzNDtjZ3JvdXAucHJvY3NcJiMzNDssIFwmIzM0O1wmIzM0OykpXG4gXHRcdGdvdG8gY2xlYW51cDtcbiBcbi1cdGlmIChjZ19yZWFkX2tleV9sb25nKG1lbWNnLCBcJiMzNDttZW1vcnkuZXZlbnRzXCYjMzQ7LCBcJiMzNDtvb20gXCYjMzQ7KSAhPSAxKVxuJiM0MztcdGlmIChjZ19yZWFkX2tleV9zNjQobWVtY2csIFwmIzM0O21lbW9yeS5ldmVudHNcJiMzNDssIFwmIzM0O29vbSBcJiMzNDspICE9IDEpXG4gXHRcdGdvdG8gY2xlYW51cDtcbiBcbi1cdGlmIChjZ19yZWFkX2tleV9sb25nKG1lbWNnLCBcJiMzNDttZW1vcnkuZXZlbnRzXCYjMzQ7LCBcJiMzNDtvb21fa2lsbCBcJiMzNDspICE9IDEpXG4mIzQzO1x0aWYgKGNnX3JlYWRfa2V5X3M2NChtZW1jZywgXCYjMzQ7bWVtb3J5LmV2ZW50c1wmIzM0OywgXCYjMzQ7b29tX2tpbGwgXCYjMzQ7KSAhPSAxKVxuIFx0XHRnb3RvIGNsZWFudXA7XG4gXG4gXHRyZXQgPSBLU0ZUX1BBU1M7XG5AQCAtMTM1NCwxMyAmIzQzOzEzNTgsMTQgQEAgc3RhdGljIGludCB0Y3BfY2xpZW50KGNvbnN0IGNoYXIgKmNncm91cCwgdW5zaWduZWQgc2hvcnQgcG9ydClcbiBcdHJldCA9IEtTRlRfRkFJTDtcbiBcdHdoaWxlIChyZXRyaWVzLS0pIHtcbiBcdFx0dWludDhfdCBidWZbMHgxMDAwMDBdO1xuLVx0XHRsb25nIGN1cnJlbnQsIHNvY2s7XG4mIzQzO1x0XHRsb25nIGN1cnJlbnQ7XG4mIzQzO1x0XHRzNjQgc29jaztcbiBcbiBcdFx0aWYgKHJlYWQoc2ssIGJ1Ziwgc2l6ZW9mKGJ1ZikpIFx1MDAzYz0gMClcbiBcdFx0XHRnb3RvIGNsb3NlX3NrO1xuIFxuIFx0XHRjdXJyZW50ID0gY2dfcmVhZF9sb25nKGNncm91cCwgXCYjMzQ7bWVtb3J5LmN1cnJlbnRcJiMzNDspO1xuLVx0XHRzb2NrID0gY2dfcmVhZF9rZXlfbG9uZyhjZ3JvdXAsIFwmIzM0O21lbW9yeS5zdGF0XCYjMzQ7LCBcJiMzNDtzb2NrIFwmIzM0Oyk7XG4mIzQzO1x0XHRzb2NrID0gY2dfcmVhZF9rZXlfczY0KGNncm91cCwgXCYjMzQ7bWVtb3J5LnN0YXRcJiMzNDssIFwmIzM0O3NvY2sgXCYjMzQ7KTtcbiBcbiBcdFx0aWYgKGN1cnJlbnQgXHUwMDNjIDAgfHwgc29jayBcdTAwM2MgMClcbiBcdFx0XHRnb3RvIGNsb3NlX3NrO1xuQEAgLTEzOTIsNyAmIzQzOzEzOTcsNyBAQCBzdGF0aWMgaW50IHRlc3RfbWVtY2dfc29jayhjb25zdCBjaGFyICpyb290KVxuIFx0aW50IGJpbmRfcmV0cmllcyA9IDUsIHJldCA9IEtTRlRfRkFJTCwgcGlkLCBlcnI7XG4gXHR1bnNpZ25lZCBzaG9ydCBwb3J0O1xuIFx0Y2hhciAqbWVtY2c7XG4tXHRsb25nIHNvY2tfcG9zdCA9IC0xO1xuJiM0MztcdHM2NCBzb2NrX3Bvc3QgPSAtMTtcbiBcbiBcdG1lbWNnID0gY2dfbmFtZShyb290LCBcJiMzNDttZW1jZ190ZXN0XCYjMzQ7KTtcbiBcdGlmICghbWVtY2cpXG5AQCAtMTQ1OSw3ICYjNDM7MTQ2NCw3IEBAIHN0YXRpYyBpbnQgdGVzdF9tZW1jZ19zb2NrKGNvbnN0IGNoYXIgKnJvb3QpXG4gXHQgKiBzY2hlZHVsaW5nIHNsYWNrKSBhbmQgcmVxdWlyZSB0aGF0IHRoZSBcJiMzNDtzb2NrIFwmIzM0OyBjb3VudGVyXG4gXHQgKiBldmVudHVhbGx5IGRyb3BzIHRvIHplcm8uXG4gXHQgKi9cbi1cdHNvY2tfcG9zdCA9IGNnX3JlYWRfa2V5X2xvbmdfcG9sbChtZW1jZywgXCYjMzQ7bWVtb3J5LnN0YXRcJiMzNDssIFwmIzM0O3NvY2sgXCYjMzQ7LCAwLFxuJiM0MztcdHNvY2tfcG9zdCA9IGNnX3JlYWRfa2V5X3M2NF9wb2xsKG1lbWNnLCBcJiMzNDttZW1vcnkuc3RhdFwmIzM0OywgXCYjMzQ7c29jayBcJiMzNDssIDAsXG4gXHRcdFx0XHRcdCBNRU1DR19TT0NLU1RBVF9XQUlUX1JFVFJJRVMsXG4gXHRcdFx0XHRcdCBERUZBVUxUX1dBSVRfSU5URVJWQUxfVVMpO1xuIFx0aWYgKHNvY2tfcG9zdClcbkBAIC0xNDg0LDcgJiM0MzsxNDg5LDcgQEAgc3RhdGljIGludCB0ZXN0X21lbWNnX29vbV9ncm91cF9sZWFmX2V2ZW50cyhjb25zdCBjaGFyICpyb290KVxuIHtcbiBcdGludCByZXQgPSBLU0ZUX0ZBSUw7XG4gXHRjaGFyICpwYXJlbnQsICpjaGlsZDtcbi1cdGxvbmcgcGFyZW50X29vbV9ldmVudHM7XG4mIzQzO1x0czY0IHBhcmVudF9vb21fZXZlbnRzO1xuIFxuIFx0cGFyZW50ID0gY2dfbmFtZShyb290LCBcJiMzNDttZW1jZ190ZXN0XzBcJiMzNDspO1xuIFx0Y2hpbGQgPSBjZ19uYW1lKHJvb3QsIFwmIzM0O21lbWNnX3Rlc3RfMC9tZW1jZ190ZXN0XzFcJiMzNDspO1xuQEAgLTE1MTksMTEgJiM0MzsxNTI0LDExIEBAIHN0YXRpYyBpbnQgdGVzdF9tZW1jZ19vb21fZ3JvdXBfbGVhZl9ldmVudHMoY29uc3QgY2hhciAqcm9vdClcbiBcdGlmIChjZ190ZXN0X3Byb2Nfa2lsbGVkKGNoaWxkKSlcbiBcdFx0Z290byBjbGVhbnVwO1xuIFxuLVx0aWYgKGNnX3JlYWRfa2V5X2xvbmcoY2hpbGQsIFwmIzM0O21lbW9yeS5ldmVudHNcJiMzNDssIFwmIzM0O29vbV9raWxsIFwmIzM0OykgXHUwMDNjPSAwKVxuJiM0MztcdGlmIChjZ19yZWFkX2tleV9zNjQoY2hpbGQsIFwmIzM0O21lbW9yeS5ldmVudHNcJiMzNDssIFwmIzM0O29vbV9raWxsIFwmIzM0OykgXHUwMDNjPSAwKVxuIFx0XHRnb3RvIGNsZWFudXA7XG4gXG4tXHRwYXJlbnRfb29tX2V2ZW50cyA9IGNnX3JlYWRfa2V5X2xvbmcoXG4tXHRcdFx0cGFyZW50LCBcJiMzNDttZW1vcnkuZXZlbnRzXCYjMzQ7LCBcJiMzNDtvb21fa2lsbCBcJiMzNDspO1xuJiM0MztcdHBhcmVudF9vb21fZXZlbnRzID1cbiYjNDM7XHRcdGNnX3JlYWRfa2V5X3M2NChwYXJlbnQsIFwmIzM0O21lbW9yeS5ldmVudHNcJiMzNDssIFwmIzM0O29vbV9raWxsIFwmIzM0Oyk7XG4gXHQvKlxuIFx0ICogSWYgbWVtb3J5X2xvY2FsZXZlbnRzIGlzIG5vdCBlbmFibGVkICh0aGUgZGVmYXVsdCksIHRoZSBwYXJlbnQgc2hvdWxkXG4gXHQgKiBjb3VudCBPT00gZXZlbnRzIGluIGl0cyBjaGlsZHJlbiBncm91cHMuIE90aGVyd2lzZSwgaXQgc2hvdWxkIG5vdFxuQEAgLTE2MzksNyAmIzQzOzE2NDQsNyBAQCBzdGF0aWMgaW50IHRlc3RfbWVtY2dfb29tX2dyb3VwX3Njb3JlX2V2ZW50cyhjb25zdCBjaGFyICpyb290KVxuIFx0aWYgKCFjZ19ydW4obWVtY2csIGFsbG9jX2Fub24sICh2b2lkICopTUIoMTAwKSkpXG4gXHRcdGdvdG8gY2xlYW51cDtcbiBcbi1cdGlmIChjZ19yZWFkX2tleV9sb25nKG1lbWNnLCBcJiMzNDttZW1vcnkuZXZlbnRzXCYjMzQ7LCBcJiMzNDtvb21fa2lsbCBcJiMzNDspICE9IDMpXG4mIzQzO1x0aWYgKGNnX3JlYWRfa2V5X3M2NChtZW1jZywgXCYjMzQ7bWVtb3J5LmV2ZW50c1wmIzM0OywgXCYjMzQ7b29tX2tpbGwgXCYjMzQ7KSAhPSAzKVxuIFx0XHRnb3RvIGNsZWFudXA7XG4gXG4gXHRpZiAoa2lsbChzYWZlX3BpZCwgU0lHS0lMTCkpXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvY2dyb3VwL3Rlc3RfcGlkcy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvY2dyb3VwL3Rlc3RfcGlkcy5jXG5pbmRleCA3MTAxMDliNTNkZmU5Li5mNGQ1YmM5ZjVmMjRmIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvY2dyb3VwL3Rlc3RfcGlkcy5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9jZ3JvdXAvdGVzdF9waWRzLmNcbkBAIC0xMTEsMTIgJiM0MzsxMTEsMTEgQEAgc3RhdGljIGludCB0ZXN0X3BpZHNfZXZlbnRzKGNvbnN0IGNoYXIgKnJvb3QpXG4gXHRpZiAoa2lsbChwaWQsIFNJR0lOVCkpXG4gXHRcdGdvdG8gY2xlYW51cDtcbiBcbi1cdGlmIChjZ19yZWFkX2tleV9sb25nKGNnX2NoaWxkLCBcJiMzNDtwaWRzLmV2ZW50c1wmIzM0OywgXCYjMzQ7bWF4IFwmIzM0OykgIT0gMClcbiYjNDM7XHRpZiAoY2dfcmVhZF9rZXlfczY0KGNnX2NoaWxkLCBcJiMzNDtwaWRzLmV2ZW50c1wmIzM0OywgXCYjMzQ7bWF4IFwmIzM0OykgIT0gMClcbiBcdFx0Z290byBjbGVhbnVwO1xuLVx0aWYgKGNnX3JlYWRfa2V5X2xvbmcoY2dfcGFyZW50LCBcJiMzNDtwaWRzLmV2ZW50c1wmIzM0OywgXCYjMzQ7bWF4IFwmIzM0OykgIT0gMSlcbiYjNDM7XHRpZiAoY2dfcmVhZF9rZXlfczY0KGNnX3BhcmVudCwgXCYjMzQ7cGlkcy5ldmVudHNcJiMzNDssIFwmIzM0O21heCBcJiMzNDspICE9IDEpXG4gXHRcdGdvdG8gY2xlYW51cDtcbiBcbi1cbiBcdHJldCA9IEtTRlRfUEFTUztcbiBcbiBjbGVhbnVwOlxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2Nncm91cC90ZXN0X3pzd2FwLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9jZ3JvdXAvdGVzdF96c3dhcC5jXG5pbmRleCA2MDljNDhmMzg1MjQxLi42ZTdlZTExYmM5N2E1IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvY2dyb3VwL3Rlc3RfenN3YXAuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvY2dyb3VwL3Rlc3RfenN3YXAuY1xuQEAgLTU5LDE0ICYjNDM7NTksMTQgQEAgc3RhdGljIGludCBnZXRfenN3YXBfc3RvcmVkX3BhZ2VzKHNpemVfdCAqdmFsdWUpXG4gXHRyZXR1cm4gcmVhZF9pbnQoUEFUSF9aU1dBUF9TVE9SRURfUEFHRVMsIHZhbHVlKTtcbiB9XG4gXG4tc3RhdGljIGxvbmcgZ2V0X2NnX3diX2NvdW50KGNvbnN0IGNoYXIgKmNnKVxuJiM0MztzdGF0aWMgczY0IGdldF9jZ193Yl9jb3VudChjb25zdCBjaGFyICpjZylcbiB7XG4tXHRyZXR1cm4gY2dfcmVhZF9rZXlfbG9uZyhjZywgXCYjMzQ7bWVtb3J5LnN0YXRcJiMzNDssIFwmIzM0O3pzd3B3YlwmIzM0Oyk7XG4mIzQzO1x0cmV0dXJuIGNnX3JlYWRfa2V5X3M2NChjZywgXCYjMzQ7bWVtb3J5LnN0YXRcJiMzNDssIFwmIzM0O3pzd3B3YlwmIzM0Oyk7XG4gfVxuIFxuLXN0YXRpYyBsb25nIGdldF96c3dwb3V0KGNvbnN0IGNoYXIgKmNncm91cClcbiYjNDM7c3RhdGljIHM2NCBnZXRfenN3cG91dChjb25zdCBjaGFyICpjZ3JvdXApXG4ge1xuLVx0cmV0dXJuIGNnX3JlYWRfa2V5X2xvbmcoY2dyb3VwLCBcJiMzNDttZW1vcnkuc3RhdFwmIzM0OywgXCYjMzQ7enN3cG91dCBcJiMzNDspO1xuJiM0MztcdHJldHVybiBjZ19yZWFkX2tleV9zNjQoY2dyb3VwLCBcJiMzNDttZW1vcnkuc3RhdFwmIzM0OywgXCYjMzQ7enN3cG91dCBcJiMzNDspO1xuIH1cbiBcbiBzdGF0aWMgaW50IGFsbG9jYXRlX2FuZF9yZWFkX2J5dGVzKGNvbnN0IGNoYXIgKmNncm91cCwgdm9pZCAqYXJnKVxuQEAgLTEyNSw5ICYjNDM7MTI1LDEwIEBAIHN0YXRpYyBjaGFyICpzZXR1cF90ZXN0X2dyb3VwXzFNKGNvbnN0IGNoYXIgKnJvb3QsIGNvbnN0IGNoYXIgKm5hbWUpXG4gICogV3JpdGViYWNrIGlzIGFzeW5jaHJvbm91czsgcG9sbCB1bnRpbCBhdCBsZWFzdCBvbmUgd3JpdGViYWNrIGhhc1xuICAqIGJlZW4gcmVjb3JkZWQgZm9yIEBjZywgb3IgdW50aWwgQHRpbWVvdXRfbXMgaGFzIGVsYXBzZWQuXG4gICovXG4tc3RhdGljIGxvbmcgd2FpdF9mb3Jfd3JpdGViYWNrKGNvbnN0IGNoYXIgKmNnLCBpbnQgdGltZW91dF9tcylcbiYjNDM7c3RhdGljIHM2NCB3YWl0X2Zvcl93cml0ZWJhY2soY29uc3QgY2hhciAqY2csIGludCB0aW1lb3V0X21zKVxuIHtcbi1cdGxvbmcgZWxhcHNlZCwgY291bnQ7XG4mIzQzO1x0bG9uZyBlbGFwc2VkO1xuJiM0MztcdHM2NCBjb3VudDtcbiBcdGZvciAoZWxhcHNlZCA9IDA7IGVsYXBzZWQgXHUwMDNjIHRpbWVvdXRfbXM7IGVsYXBzZWQgJiM0Mzs9IDEwMCkge1xuIFx0XHRjb3VudCA9IGdldF9jZ193Yl9jb3VudChjZyk7XG4gXG5AQCAtMTQ3LDcgJiM0MzsxNDgsNyBAQCBzdGF0aWMgbG9uZyB3YWl0X2Zvcl93cml0ZWJhY2soY29uc3QgY2hhciAqY2csIGludCB0aW1lb3V0X21zKVxuICAqL1xuIHN0YXRpYyBpbnQgdGVzdF96c3dhcF91c2FnZShjb25zdCBjaGFyICpyb290KVxuIHtcbi1cdGxvbmcgenN3cG91dF9iZWZvcmUsIHpzd3BvdXRfYWZ0ZXI7XG4mIzQzO1x0czY0IHpzd3BvdXRfYmVmb3JlLCB6c3dwb3V0X2FmdGVyO1xuIFx0aW50IHJldCA9IEtTRlRfRkFJTDtcbiBcdGNoYXIgKnRlc3RfZ3JvdXA7XG4gXG5AQCAtMTkxLDcgJiM0MzsxOTIsOCBAQCBzdGF0aWMgaW50IHRlc3Rfc3dhcGluX25venN3YXAoY29uc3QgY2hhciAqcm9vdClcbiB7XG4gXHRpbnQgcmV0ID0gS1NGVF9GQUlMO1xuIFx0Y2hhciAqdGVzdF9ncm91cCwgbWVtX21heF9idWZbMzJdO1xuLVx0bG9uZyBzd2FwX3BlYWssIHpzd3BvdXQsIG1pbl9zd2FwO1xuJiM0MztcdGxvbmcgc3dhcF9wZWFrLCBtaW5fc3dhcDtcbiYjNDM7XHRzNjQgenN3cG91dDtcbiBcdHNpemVfdCBhbGxvY2F0aW9uX3NpemUgPSBwYWdlX3NpemUgKiA1MTI7XG4gXG4gXHRtaW5fc3dhcCA9IGFsbG9jYXRpb25fc2l6ZSAvIDQ7XG5AQCAtMjQ4LDcgJiM0MzsyNTAsNyBAQCBzdGF0aWMgaW50IHRlc3RfenN3YXBpbihjb25zdCBjaGFyICpyb290KVxuIHtcbiBcdGludCByZXQgPSBLU0ZUX0ZBSUw7XG4gXHRjaGFyICp0ZXN0X2dyb3VwO1xuLVx0bG9uZyB6c3dwaW47XG4mIzQzO1x0czY0IHpzd3BpbjtcbiBcbiBcdHRlc3RfZ3JvdXAgPSBjZ19uYW1lKHJvb3QsIFwmIzM0O3pzd2FwaW5fdGVzdFwmIzM0Oyk7XG4gXHRpZiAoIXRlc3RfZ3JvdXApXG5AQCAtMjY0LDcgJiM0MzsyNjYsNyBAQCBzdGF0aWMgaW50IHRlc3RfenN3YXBpbihjb25zdCBjaGFyICpyb290KVxuIFx0aWYgKGNnX3J1bih0ZXN0X2dyb3VwLCBhbGxvY2F0ZV9hbmRfcmVhZF9ieXRlcywgKHZvaWQgKilNQigzMikpKVxuIFx0XHRnb3RvIG91dDtcbiBcbi1cdHpzd3BpbiA9IGNnX3JlYWRfa2V5X2xvbmcodGVzdF9ncm91cCwgXCYjMzQ7bWVtb3J5LnN0YXRcJiMzNDssIFwmIzM0O3pzd3BpbiBcJiMzNDspO1xuJiM0MztcdHpzd3BpbiA9IGNnX3JlYWRfa2V5X3M2NCh0ZXN0X2dyb3VwLCBcJiMzNDttZW1vcnkuc3RhdFwmIzM0OywgXCYjMzQ7enN3cGluIFwmIzM0Oyk7XG4gXHRpZiAoenN3cGluIFx1MDAzYyAwKSB7XG4gXHRcdGtzZnRfcHJpbnRfbXNnKFwmIzM0O2ZhaWxlZCB0byBnZXQgenN3cGluXFxuXCYjMzQ7KTtcbiBcdFx0Z290byBvdXQ7XG5AQCAtMzU1LDExICYjNDM7MzU3LDExIEBAIHN0YXRpYyBpbnQgYXR0ZW1wdF93cml0ZWJhY2soY29uc3QgY2hhciAqY2dyb3VwLCB2b2lkICphcmcpXG4gXG4gc3RhdGljIGludCB0ZXN0X3pzd2FwX3dyaXRlYmFja19vbmUoY29uc3QgY2hhciAqY2dyb3VwLCBib29sIHdiKVxuIHtcbi1cdGxvbmcgenN3cHdiX2JlZm9yZSwgenN3cHdiX2FmdGVyO1xuJiM0MztcdHM2NCB6c3dwd2JfYmVmb3JlLCB6c3dwd2JfYWZ0ZXI7XG4gXG4gXHR6c3dwd2JfYmVmb3JlID0gZ2V0X2NnX3diX2NvdW50KGNncm91cCk7XG4gXHRpZiAoenN3cHdiX2JlZm9yZSAhPSAwKSB7XG4tXHRcdGtzZnRfcHJpbnRfbXNnKFwmIzM0O3pzd3B3Yl9iZWZvcmUgPSAlbGQgaW5zdGVhZCBvZiAwXFxuXCYjMzQ7LCB6c3dwd2JfYmVmb3JlKTtcbiYjNDM7XHRcdGtzZnRfcHJpbnRfbXNnKFwmIzM0O3pzd3B3Yl9iZWZvcmUgPSAlbGxkIGluc3RlYWQgb2YgMFxcblwmIzM0OywgenN3cHdiX2JlZm9yZSk7XG4gXHRcdHJldHVybiAtMTtcbiBcdH1cbiBcbkBAIC0zNzUsNyAmIzQzOzM3Nyw3IEBAIHN0YXRpYyBpbnQgdGVzdF96c3dhcF93cml0ZWJhY2tfb25lKGNvbnN0IGNoYXIgKmNncm91cCwgYm9vbCB3YilcbiBcdFx0cmV0dXJuIC0xO1xuIFxuIFx0aWYgKHdiICE9ICEhenN3cHdiX2FmdGVyKSB7XG4tXHRcdGtzZnRfcHJpbnRfbXNnKFwmIzM0O3pzd3B3Yl9hZnRlciBpcyAlbGQgd2hpbGUgd2IgaXMgJXNcXG5cJiMzNDssXG4mIzQzO1x0XHRrc2Z0X3ByaW50X21zZyhcJiMzNDt6c3dwd2JfYWZ0ZXIgaXMgJWxsZCB3aGlsZSB3YiBpcyAlc1xcblwmIzM0OyxcbiBcdFx0XHRcdHpzd3B3Yl9hZnRlciwgd2IgPyBcJiMzNDtlbmFibGVkXCYjMzQ7IDogXCYjMzQ7ZGlzYWJsZWRcJiMzNDspO1xuIFx0XHRyZXR1cm4gLTE7XG4gXHR9XG5AQCAtNDA4LDYgJiM0Mzs0MTAsOCBAQCBzdGF0aWMgaW50IHRlc3RfenN3YXBfd3JpdGViYWNrKGNvbnN0IGNoYXIgKnJvb3QsIGJvb2wgd2IpXG4gXHQgKiBUaHVzLCB0aGUgcGFyZW50JiMzOTtzIHNldHRpbmcgc2hhbGwgYmUgd2hhdCYjMzk7cyBpbiBlZmZlY3QuICovXG4gXHRpZiAoY2dfd3JpdGUodGVzdF9ncm91cCwgXCYjMzQ7bWVtb3J5Lnpzd2FwLm1heFwmIzM0OywgXCYjMzQ7bWF4XCYjMzQ7KSlcbiBcdFx0Z290byBvdXQ7XG4mIzQzO1x0aWYgKGNnX3JlYWRfc3RyY21wX3dhaXQodGVzdF9ncm91cCwgXCYjMzQ7Y2dyb3VwLmV2ZW50c1wmIzM0OywgXCYjMzQ7cG9wdWxhdGVkIDBcXG5cJiMzNDspKVxuJiM0MztcdFx0Z290byBvdXQ7XG4gXHRpZiAoY2dfd3JpdGUodGVzdF9ncm91cCwgXCYjMzQ7Y2dyb3VwLnN1YnRyZWVfY29udHJvbFwmIzM0OywgXCYjMzQ7JiM0MzttZW1vcnlcJiMzNDspKVxuIFx0XHRnb3RvIG91dDtcbiBcbkBAIC00ODUsNyAmIzQzOzQ4OSw3IEBAIHN0YXRpYyBpbnQgdGVzdF9ub19pbnZhc2l2ZV9jZ3JvdXBfc2hyaW5rKGNvbnN0IGNoYXIgKnJvb3QpXG4gXHRcdG1lbXNldChcdTAwMjZ6d19hbGxvY2F0aW9uW29mZl0sIDAsIHBhZ2Vfc2l6ZSk7XG4gXHRcdG1lbXNldChcdTAwMjZ6d19hbGxvY2F0aW9uW29mZl0sICYjMzk7YSYjMzk7LCBwYWdlX3NpemUvNCk7XG4gXHR9XG4tXHRpZiAoY2dfcmVhZF9rZXlfbG9uZyh6d19ncm91cCwgXCYjMzQ7bWVtb3J5LnN0YXRcJiMzNDssIFwmIzM0O3pzd2FwcGVkXCYjMzQ7KSBcdTAwM2MgMSlcbiYjNDM7XHRpZiAoY2dfcmVhZF9rZXlfczY0KHp3X2dyb3VwLCBcJiMzNDttZW1vcnkuc3RhdFwmIzM0OywgXCYjMzQ7enN3YXBwZWRcJiMzNDspIFx1MDAzYyAxKVxuIFx0XHRnb3RvIG91dDtcbiBcbiBcdC8qIFB1c2ggd2JfZ3JvdXAgbWVtb3J5IGludG8genN3YXAgd2l0aCBoYXJkLXRvLWNvbXByZXNzIGRhdGEgdG8gdHJpZ2dlciB3YiAqL1xuQEAgLTYyOCwxMSAmIzQzOzYzMiwxMiBAQCBzdGF0aWMgaW50IHRlc3Rfbm9fa21lbV9ieXBhc3MoY29uc3QgY2hhciAqcm9vdClcbiBcdFx0XHRicmVhaztcbiBcdFx0LyogSWYgbWVtb3J5IHdhcyBwdXNoZWQgdG8genN3YXAsIHZlcmlmeSBpdCBiZWxvbmdzIHRvIG1lbWNnICovXG4gXHRcdGlmIChzdG9yZWRfcGFnZXMgXHUwMDNlIHN0b3JlZF9wYWdlc190aHJlc2hvbGQpIHtcbi1cdFx0XHRpbnQgenN3YXBwZWQgPSBjZ19yZWFkX2tleV9sb25nKHRlc3RfZ3JvdXAsIFwmIzM0O21lbW9yeS5zdGF0XCYjMzQ7LCBcJiMzNDt6c3dhcHBlZCBcJiMzNDspO1xuLVx0XHRcdGludCBkZWx0YSA9IHN0b3JlZF9wYWdlcyAqIHBhZ2Vfc2l6ZSAtIHpzd2FwcGVkO1xuLVx0XHRcdGludCByZXN1bHRfb2sgPSBkZWx0YSBcdTAwM2Mgc3RvcmVkX3BhZ2VzICogcGFnZV9zaXplIC8gNDtcbiYjNDM7XHRcdFx0czY0IHpzd2FwcGVkID0gY2dfcmVhZF9rZXlfczY0KFxuJiM0MztcdFx0XHRcdHRlc3RfZ3JvdXAsIFwmIzM0O21lbW9yeS5zdGF0XCYjMzQ7LCBcJiMzNDt6c3dhcHBlZCBcJiMzNDspO1xuJiM0MztcdFx0XHRzNjQgZGVsdGEgPSAoczY0KXN0b3JlZF9wYWdlcyAqIHBhZ2Vfc2l6ZSAtIHpzd2FwcGVkO1xuJiM0MztcdFx0XHRzNjQgbWF4X2RlbHRhID0gKHM2NClzdG9yZWRfcGFnZXMgKiBwYWdlX3NpemUgLyA0O1xuIFxuLVx0XHRcdHJldCA9IHJlc3VsdF9vayA/IEtTRlRfUEFTUyA6IEtTRlRfRkFJTDtcbiYjNDM7XHRcdFx0cmV0ID0gKGRlbHRhIFx1MDAzYyBtYXhfZGVsdGEpID8gS1NGVF9QQVNTIDogS1NGVF9GQUlMO1xuIFx0XHRcdGJyZWFrO1xuIFx0XHR9XG4gXHR9XG5AQCAtNzAxLDkgJiM0Mzs3MDYsOSBAQCBzdGF0aWMgaW50IGFsbG9jYXRlX3JhbmRvbV9hbmRfd2FpdChjb25zdCBjaGFyICpjZ3JvdXAsIHZvaWQgKmFyZylcbiBcdHJldHVybiAwO1xuIH1cbiBcbi1zdGF0aWMgbG9uZyBnZXRfenN3YXBfaW5jb21wKGNvbnN0IGNoYXIgKmNncm91cClcbiYjNDM7c3RhdGljIHM2NCBnZXRfenN3YXBfaW5jb21wKGNvbnN0IGNoYXIgKmNncm91cClcbiB7XG4tXHRyZXR1cm4gY2dfcmVhZF9rZXlfbG9uZyhjZ3JvdXAsIFwmIzM0O21lbW9yeS5zdGF0XCYjMzQ7LCBcJiMzNDt6c3dhcF9pbmNvbXAgXCYjMzQ7KTtcbiYjNDM7XHRyZXR1cm4gY2dfcmVhZF9rZXlfczY0KGNncm91cCwgXCYjMzQ7bWVtb3J5LnN0YXRcJiMzNDssIFwmIzM0O3pzd2FwX2luY29tcCBcJiMzNDspO1xuIH1cbiBcbiAvKlxuQEAgLTcxOSw3ICYjNDM7NzI0LDcgQEAgc3RhdGljIGludCB0ZXN0X3pzd2FwX2luY29tcHJlc3NpYmxlKGNvbnN0IGNoYXIgKnJvb3QpXG4gXHRpbnQgcmV0ID0gS1NGVF9GQUlMO1xuIFx0c3RydWN0IGluY29tcF9jaGlsZF9hcmdzICp2YWx1ZXM7XG4gXHRjaGFyICp0ZXN0X2dyb3VwO1xuLVx0bG9uZyB6c3dhcF9pbmNvbXA7XG4mIzQzO1x0czY0IHpzd2FwX2luY29tcDtcbiBcdHBpZF90IGNoaWxkX3BpZDtcbiBcdGludCBjaGlsZF9zdGF0dXM7XG4gXHRjaGFyIGJ1ZjtcbkBAIC03NTUsMTMgJiM0Mzs3NjAsMTUgQEAgc3RhdGljIGludCB0ZXN0X3pzd2FwX2luY29tcHJlc3NpYmxlKGNvbnN0IGNoYXIgKnJvb3QpXG4gXG4gXHR6c3dhcF9pbmNvbXAgPSBnZXRfenN3YXBfaW5jb21wKHRlc3RfZ3JvdXApO1xuIFx0aWYgKHpzd2FwX2luY29tcCBcdTAwM2M9IDApIHtcbi1cdFx0bG9uZyB6c3dwb3V0ID0gZ2V0X3pzd3BvdXQodGVzdF9ncm91cCk7XG4tXHRcdGxvbmcgenN3YXBwZWQgPSBjZ19yZWFkX2tleV9sb25nKHRlc3RfZ3JvdXAsIFwmIzM0O21lbW9yeS5zdGF0XCYjMzQ7LCBcJiMzNDt6c3dhcHBlZCBcJiMzNDspO1xuLVx0XHRsb25nIHpzd2FwX2IgPSBjZ19yZWFkX2tleV9sb25nKHRlc3RfZ3JvdXAsIFwmIzM0O21lbW9yeS5zdGF0XCYjMzQ7LCBcJiMzNDt6c3dhcCBcJiMzNDspO1xuLVxuLVx0XHRrc2Z0X3ByaW50X21zZyhcJiMzNDt6c3dhcF9pbmNvbXAgbm90IGluY3JlYXNlZDogJWxkXFxuXCYjMzQ7LCB6c3dhcF9pbmNvbXApO1xuLVx0XHRrc2Z0X3ByaW50X21zZyhcJiMzNDtkZWJ1ZzogenN3cG91dD0lbGQgenN3YXBwZWQ9JWxkIHpzd2FwX2I9JWxkXFxuXCYjMzQ7LFxuLVx0XHRcdCAgICAgICB6c3dwb3V0LCB6c3dhcHBlZCwgenN3YXBfYik7XG4mIzQzO1x0XHRzNjQgenN3cG91dCA9IGdldF96c3dwb3V0KHRlc3RfZ3JvdXApO1xuJiM0MztcdFx0czY0IHpzd2FwcGVkID1cbiYjNDM7XHRcdFx0Y2dfcmVhZF9rZXlfczY0KHRlc3RfZ3JvdXAsIFwmIzM0O21lbW9yeS5zdGF0XCYjMzQ7LCBcJiMzNDt6c3dhcHBlZCBcJiMzNDspO1xuJiM0MztcdFx0czY0IHpzd2FwX2IgPVxuJiM0MztcdFx0XHRjZ19yZWFkX2tleV9zNjQodGVzdF9ncm91cCwgXCYjMzQ7bWVtb3J5LnN0YXRcJiMzNDssIFwmIzM0O3pzd2FwIFwmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdFx0a3NmdF9wcmludF9tc2coXCYjMzQ7enN3YXBfaW5jb21wIG5vdCBpbmNyZWFzZWQ6ICVsbGRcXG5cJiMzNDssIHpzd2FwX2luY29tcCk7XG4mIzQzO1x0XHRrc2Z0X3ByaW50X21zZyhcJiMzNDtkZWJ1ZzogenN3cG91dD0lbGxkIHpzd2FwcGVkPSVsbGQgenN3YXBfYj0lbGxkXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRcdHpzd3BvdXQsIHpzd2FwcGVkLCB6c3dhcF9iKTtcbiBcdFx0a3NmdF9wcmludF9tc2coXCYjMzQ7ZGVidWc6IG1hZHZpc2UgcmV0PSVkIGVycm5vPSVkXFxuXCYjMzQ7LFxuIFx0XHRcdCAgICAgICB2YWx1ZXMtXHUwMDNlbWFkdmlzZV9yZXQsIHZhbHVlcy1cdTAwM2VtYWR2aXNlX2Vycm5vKTtcbiBcdFx0Z290byBvdXRfa2lsbDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwODo1MTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBvbmx5IHVzZXItc3BhY2UgY2dyb3VwIHNlbGYtdGVzdHMgdW5kZXIgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvY2dyb3VwLyBhbmQgZG9lcyBub3QgdG91Y2ggYW55IGtlcm5lbCBjb2RlIG9yIGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzcwp0b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpUaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLAphbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLgoKLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURToKICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkCiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS4KICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsCiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLgoKLSBETyBOT1QgQkxJTkRMWSBUUlVTVCAmIzM0O05PIEZVTkNUSU9OQUwgQ0hBTkdFJiMzNDsgKE5GQ0kpIE9SICYjMzQ7UkVGQUNUT1JJTkcmIzM0OyBDTEFJTVM6CiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyAmIzM0O2NsZWFudXBzJiMzNDssICYjMzQ7cmVmYWN0b3JpbmdzJiMzNDssIG9yIHN0YXRlCiAgJiMzNDtObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZCYjMzQ7LiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS4KICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnQKICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy4KICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLgoKLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDoKICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosCiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuCiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlcgogIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6CgotIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6CiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuCiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLykKICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy4KICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzCiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLgogICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLgotIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZToKICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOgogICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nCiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy4KICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzoKLSBDb3JlIFN1YnN5c3RlbXM6CiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksCiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuCi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOgogICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLgotIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczoKICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy4KLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOgogICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOgoKLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6CiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXMKICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdAogIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLgogIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyAmIzM0O2ZvY3VzZWQmIzM0OywKICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuCgotIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzoKICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHMKICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy4KCi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOgogIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2sKICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy4KICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXIKICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo1LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6Ci0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KLSBDaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLgotIFN0cmlwIGFueSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAxMWE5ZjA5ZjU2MGIwMjY5NTQwMWRkMmM2Y2MzZjE5OTdmNzhhNjQyCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFN1biBTZXAgNiAwODo1MToxNSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2Nncm91cC9saWIvY2dyb3VwX3V0aWwuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2Nncm91cC9saWIvY2dyb3VwX3V0aWwuYwppbmRleCAyNTk2YzEyY2Q4NjQ1Li5lZDNjNDg5MzgzM2E1IDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9jZ3JvdXAvbGliL2Nncm91cF91dGlsLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvY2dyb3VwL2xpYi9jZ3JvdXBfdXRpbC5jCkBAIC0xNzIsNyAmIzQzOzE3Miw3IEBAIGxvbmcgY2dfcmVhZF9sb25nX2ZkKGludCBmZCkKIAlyZXR1cm4gYXRvbChidWYpOwogfQogCi1sb25nIGNnX3JlYWRfa2V5X2xvbmcoY29uc3QgY2hhciAqY2dyb3VwLCBjb25zdCBjaGFyICpjb250cm9sLCBjb25zdCBjaGFyICprZXkpCiYjNDM7czY0IGNnX3JlYWRfa2V5X3M2NChjb25zdCBjaGFyICpjZ3JvdXAsIGNvbnN0IGNoYXIgKmNvbnRyb2wsIGNvbnN0IGNoYXIgKmtleSkKIHsKIAljaGFyIGJ1ZltCVUZfU0laRV07CiAJY2hhciAqcHRyOwpAQCAtMTg0LDE4ICYjNDM7MTg0LDE4IEBAIGxvbmcgY2dfcmVhZF9rZXlfbG9uZyhjb25zdCBjaGFyICpjZ3JvdXAsIGNvbnN0IGNoYXIgKmNvbnRyb2wsIGNvbnN0IGNoYXIgKmtleSkKIAlpZiAoIXB0cikKIAkJcmV0dXJuIC0xOwogCi0JcmV0dXJuIGF0b2wocHRyICYjNDM7IHN0cmxlbihrZXkpKTsKJiM0MzsJcmV0dXJuIGF0b2xsKHB0ciAmIzQzOyBzdHJsZW4oa2V5KSk7CiB9CiAKLWxvbmcgY2dfcmVhZF9rZXlfbG9uZ19wb2xsKGNvbnN0IGNoYXIgKmNncm91cCwgY29uc3QgY2hhciAqY29udHJvbCwKLQkJCSAgIGNvbnN0IGNoYXIgKmtleSwgbG9uZyBleHBlY3RlZCwgaW50IHJldHJpZXMsCi0JCQkgICB1c2Vjb25kc190IHdhaXRfaW50ZXJ2YWxfdXMpCiYjNDM7czY0IGNnX3JlYWRfa2V5X3M2NF9wb2xsKGNvbnN0IGNoYXIgKmNncm91cCwgY29uc3QgY2hhciAqY29udHJvbCwKJiM0MzsJCQkgY29uc3QgY2hhciAqa2V5LCBzNjQgZXhwZWN0ZWQsIGludCByZXRyaWVzLAomIzQzOwkJCSB1c2Vjb25kc190IHdhaXRfaW50ZXJ2YWxfdXMpCiB7Ci0JbG9uZyB2YWwgPSAtMTsKJiM0MzsJczY0IHZhbCA9IC0xOwogCWludCBpOwogCiAJZm9yIChpID0gMDsgaSAmbHQ7IHJldHJpZXM7IGkmIzQzOyYjNDM7KSB7Ci0JCXZhbCA9IGNnX3JlYWRfa2V5X2xvbmcoY2dyb3VwLCBjb250cm9sLCBrZXkpOwomIzQzOwkJdmFsID0gY2dfcmVhZF9rZXlfczY0KGNncm91cCwgY29udHJvbCwga2V5KTsKIAkJaWYgKHZhbCAmbHQ7IDApCiAJCQlyZXR1cm4gdmFsOwogCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9jZ3JvdXAvbGliL2luY2x1ZGUvY2dyb3VwX3V0aWwuaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2Nncm91cC9saWIvaW5jbHVkZS9jZ3JvdXBfdXRpbC5oCmluZGV4IDVkMzljNzA5YWM3YTQuLmRkYjA1OTMyZDljNzcgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2Nncm91cC9saWIvaW5jbHVkZS9jZ3JvdXBfdXRpbC5oCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2Nncm91cC9saWIvaW5jbHVkZS9jZ3JvdXBfdXRpbC5oCkBAIC0yLDYgJiM0MzsyLDggQEAKICNpbmNsdWRlICZsdDtzdGRib29sLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7c3RkbGliLmgmZ3Q7CiAKJiM0Mzt0eXBlZGVmIHNpZ25lZCBsb25nIGxvbmcgczY0OwomIzQzOwogI2lmbmRlZiBCVUZfU0laRQogI2RlZmluZSBCVUZfU0laRSA0MDk2CiAjZW5kaWYKQEAgLTI0LDI1ICYjNDM7MjYsMjUgQEAKIC8qCiAgKiBDaGVja3MgaWYgdHdvIGdpdmVuIHZhbHVlcyBkaWZmZXIgYnkgbGVzcyB0aGFuIGVyciUgb2YgdGhlaXIgc3VtLgogICovCi1zdGF0aWMgaW5saW5lIGludCB2YWx1ZXNfY2xvc2UobG9uZyBhLCBsb25nIGIsIGludCBlcnIpCiYjNDM7c3RhdGljIGlubGluZSBpbnQgdmFsdWVzX2Nsb3NlKHM2NCBhLCBzNjQgYiwgaW50IGVycikKIHsKLQlyZXR1cm4gbGFicyhhIC0gYikgJmx0Oz0gKGEgJiM0MzsgYikgLyAxMDAgKiBlcnI7CiYjNDM7CXJldHVybiBsbGFicyhhIC0gYikgJmx0Oz0gKGEgJiM0MzsgYikgLyAxMDAgKiBlcnI7CiB9CiAKIC8qCiAgKiBDaGVja3MgaWYgdHdvIGdpdmVuIHZhbHVlcyBkaWZmZXIgYnkgbGVzcyB0aGFuIGVyciUgb2YgdGhlaXIgc3VtIGFuZCBhc3NlcnQKICAqIHdpdGggZGV0YWlsZWQgZGVidWcgaW5mbyBpZiBub3QuCiAgKi8KLXN0YXRpYyBpbmxpbmUgaW50IHZhbHVlc19jbG9zZV9yZXBvcnQobG9uZyBhLCBsb25nIGIsIGludCBlcnIpCiYjNDM7c3RhdGljIGlubGluZSBpbnQgdmFsdWVzX2Nsb3NlX3JlcG9ydChzNjQgYSwgczY0IGIsIGludCBlcnIpCiB7Ci0JbG9uZyBkaWZmICA9IGxhYnMoYSAtIGIpOwotCWxvbmcgbGltaXQgPSAoYSAmIzQzOyBiKSAvIDEwMCAqIGVycjsKJiM0MzsJczY0IGRpZmYgID0gbGxhYnMoYSAtIGIpOwomIzQzOwlzNjQgbGltaXQgPSAoYSAmIzQzOyBiKSAvIDEwMCAqIGVycjsKIAlkb3VibGUgYWN0dWFsX2VyciA9IChhICYjNDM7IGIpID8gKDEwMC4wICogZGlmZiAvIChhICYjNDM7IGIpKSA6IDAuMDsKIAlpbnQgY2xvc2UgPSBkaWZmICZsdDs9IGxpbWl0OwogCiAJaWYgKCFjbG9zZSkKIAkJZnByaW50ZihzdGRlcnIsCi0JCQkmIzM0O1tGQUlMXSBhY3R1YWw9JWxkIGV4cGVjdGVkPSVsZCB8IGRpZmY9JWxkIHwgbGltaXQ9JWxkIHwgJiMzNDsKJiM0MzsJCQkmIzM0O1tGQUlMXSBhY3R1YWw9JWxsZCBleHBlY3RlZD0lbGxkIHwgZGlmZj0lbGxkIHwgbGltaXQ9JWxsZCB8ICYjMzQ7CiAJCQkmIzM0O3RvbGVyYW5jZT0lZCUlIHwgYWN0dWFsX2Vycm9yPSUuMmYlJVxuJiMzNDssCiAJCQlhLCBiLCBkaWZmLCBsaW1pdCwgZXJyLCBhY3R1YWxfZXJyKTsKIApAQCAtNjksMTAgJiM0Mzs3MSwxMCBAQCBleHRlcm4gaW50IGNnX3JlYWRfc3Ryc3RyKGNvbnN0IGNoYXIgKmNncm91cCwgY29uc3QgY2hhciAqY29udHJvbCwKIAkJCSAgY29uc3QgY2hhciAqbmVlZGxlKTsKIGV4dGVybiBsb25nIGNnX3JlYWRfbG9uZyhjb25zdCBjaGFyICpjZ3JvdXAsIGNvbnN0IGNoYXIgKmNvbnRyb2wpOwogZXh0ZXJuIGxvbmcgY2dfcmVhZF9sb25nX2ZkKGludCBmZCk7Ci1sb25nIGNnX3JlYWRfa2V5X2xvbmcoY29uc3QgY2hhciAqY2dyb3VwLCBjb25zdCBjaGFyICpjb250cm9sLCBjb25zdCBjaGFyICprZXkpOwotbG9uZyBjZ19yZWFkX2tleV9sb25nX3BvbGwoY29uc3QgY2hhciAqY2dyb3VwLCBjb25zdCBjaGFyICpjb250cm9sLAotCQkJICAgY29uc3QgY2hhciAqa2V5LCBsb25nIGV4cGVjdGVkLCBpbnQgcmV0cmllcywKLQkJCSAgIHVzZWNvbmRzX3Qgd2FpdF9pbnRlcnZhbF91cyk7CiYjNDM7czY0IGNnX3JlYWRfa2V5X3M2NChjb25zdCBjaGFyICpjZ3JvdXAsIGNvbnN0IGNoYXIgKmNvbnRyb2wsIGNvbnN0IGNoYXIgKmtleSk7CiYjNDM7czY0IGNnX3JlYWRfa2V5X3M2NF9wb2xsKGNvbnN0IGNoYXIgKmNncm91cCwgY29uc3QgY2hhciAqY29udHJvbCwKJiM0MzsJCQkgY29uc3QgY2hhciAqa2V5LCBzNjQgZXhwZWN0ZWQsIGludCByZXRyaWVzLAomIzQzOwkJCSB1c2Vjb25kc190IHdhaXRfaW50ZXJ2YWxfdXMpOwogZXh0ZXJuIGxvbmcgY2dfcmVhZF9sYyhjb25zdCBjaGFyICpjZ3JvdXAsIGNvbnN0IGNoYXIgKmNvbnRyb2wpOwogZXh0ZXJuIGludCBjZ193cml0ZShjb25zdCBjaGFyICpjZ3JvdXAsIGNvbnN0IGNoYXIgKmNvbnRyb2wsIGNoYXIgKmJ1Zik7CiBleHRlcm4gaW50IGNnX29wZW4oY29uc3QgY2hhciAqY2dyb3VwLCBjb25zdCBjaGFyICpjb250cm9sLCBpbnQgZmxhZ3MpOwpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvY2dyb3VwL3Rlc3RfY3B1LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9jZ3JvdXAvdGVzdF9jcHUuYwppbmRleCA3MzVhNTNiYjIyMmJhLi4xMWRhMWRlOWNkZWI2IDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9jZ3JvdXAvdGVzdF9jcHUuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9jZ3JvdXAvdGVzdF9jcHUuYwpAQCAtMjQsNyAmIzQzOzI0LDcgQEAgZW51bSBob2dfY2xvY2tfdHlwZSB7CiBzdHJ1Y3QgY3B1X2hvZ2dlciB7CiAJY2hhciAqY2dyb3VwOwogCXBpZF90IHBpZDsKLQlsb25nIHVzYWdlOwomIzQzOwlzNjQgdXNhZ2U7CiB9OwogCiBzdHJ1Y3QgY3B1X2hvZ19mdW5jX3BhcmFtIHsKQEAgLTE4NSw3ICYjNDM7MTg1LDcgQEAgc3RhdGljIGludCBob2dfY3B1c190aW1lZChjb25zdCBjaGFyICpjZ3JvdXAsIHZvaWQgKmFyZykKIHN0YXRpYyBpbnQgdGVzdF9jcHVjZ19zdGF0cyhjb25zdCBjaGFyICpyb290KQogewogCWludCByZXQgPSBLU0ZUX0ZBSUw7Ci0JbG9uZyB1c2FnZV91c2VjLCB1c2VyX3VzZWMsIHN5c3RlbV91c2VjOwomIzQzOwlzNjQgdXNhZ2VfdXNlYywgdXNlcl91c2VjLCBzeXN0ZW1fdXNlYzsKIAlsb25nIHVzYWdlX3NlY29uZHMgPSAyOwogCWxvbmcgZXhwZWN0ZWRfdXNhZ2VfdXNlYyA9IHVzYWdlX3NlY29uZHMgKiBVU0VDX1BFUl9TRUM7CiAJY2hhciAqY3B1Y2c7CkBAIC0xOTcsOSAmIzQzOzE5Nyw5IEBAIHN0YXRpYyBpbnQgdGVzdF9jcHVjZ19zdGF0cyhjb25zdCBjaGFyICpyb290KQogCWlmIChjZ19jcmVhdGUoY3B1Y2cpKQogCQlnb3RvIGNsZWFudXA7CiAKLQl1c2FnZV91c2VjID0gY2dfcmVhZF9rZXlfbG9uZyhjcHVjZywgJiMzNDtjcHUuc3RhdCYjMzQ7LCAmIzM0O3VzYWdlX3VzZWMmIzM0Oyk7Ci0JdXNlcl91c2VjID0gY2dfcmVhZF9rZXlfbG9uZyhjcHVjZywgJiMzNDtjcHUuc3RhdCYjMzQ7LCAmIzM0O3VzZXJfdXNlYyYjMzQ7KTsKLQlzeXN0ZW1fdXNlYyA9IGNnX3JlYWRfa2V5X2xvbmcoY3B1Y2csICYjMzQ7Y3B1LnN0YXQmIzM0OywgJiMzNDtzeXN0ZW1fdXNlYyYjMzQ7KTsKJiM0MzsJdXNhZ2VfdXNlYyA9IGNnX3JlYWRfa2V5X3M2NChjcHVjZywgJiMzNDtjcHUuc3RhdCYjMzQ7LCAmIzM0O3VzYWdlX3VzZWMmIzM0Oyk7CiYjNDM7CXVzZXJfdXNlYyA9IGNnX3JlYWRfa2V5X3M2NChjcHVjZywgJiMzNDtjcHUuc3RhdCYjMzQ7LCAmIzM0O3VzZXJfdXNlYyYjMzQ7KTsKJiM0MzsJc3lzdGVtX3VzZWMgPSBjZ19yZWFkX2tleV9zNjQoY3B1Y2csICYjMzQ7Y3B1LnN0YXQmIzM0OywgJiMzNDtzeXN0ZW1fdXNlYyYjMzQ7KTsKIAlpZiAodXNhZ2VfdXNlYyAhPSAwIHx8IHVzZXJfdXNlYyAhPSAwIHx8IHN5c3RlbV91c2VjICE9IDApCiAJCWdvdG8gY2xlYW51cDsKIApAQCAtMjE0LDggJiM0MzsyMTQsOCBAQCBzdGF0aWMgaW50IHRlc3RfY3B1Y2dfc3RhdHMoY29uc3QgY2hhciAqcm9vdCkKIAlpZiAoY2dfcnVuKGNwdWNnLCBob2dfY3B1c190aW1lZCwgKHZvaWQgKikmYW1wO3BhcmFtKSkKIAkJZ290byBjbGVhbnVwOwogCi0JdXNhZ2VfdXNlYyA9IGNnX3JlYWRfa2V5X2xvbmcoY3B1Y2csICYjMzQ7Y3B1LnN0YXQmIzM0OywgJiMzNDt1c2FnZV91c2VjJiMzNDspOwotCXVzZXJfdXNlYyA9IGNnX3JlYWRfa2V5X2xvbmcoY3B1Y2csICYjMzQ7Y3B1LnN0YXQmIzM0OywgJiMzNDt1c2VyX3VzZWMmIzM0Oyk7CiYjNDM7CXVzYWdlX3VzZWMgPSBjZ19yZWFkX2tleV9zNjQoY3B1Y2csICYjMzQ7Y3B1LnN0YXQmIzM0OywgJiMzNDt1c2FnZV91c2VjJiMzNDspOwomIzQzOwl1c2VyX3VzZWMgPSBjZ19yZWFkX2tleV9zNjQoY3B1Y2csICYjMzQ7Y3B1LnN0YXQmIzM0OywgJiMzNDt1c2VyX3VzZWMmIzM0Oyk7CiAJaWYgKHVzZXJfdXNlYyAmbHQ7PSAwKQogCQlnb3RvIGNsZWFudXA7CiAKQEAgLTIzOSw3ICYjNDM7MjM5LDcgQEAgc3RhdGljIGludCB0ZXN0X2NwdWNnX25pY2UoY29uc3QgY2hhciAqcm9vdCkKIHsKIAlpbnQgcmV0ID0gS1NGVF9GQUlMOwogCWludCBzdGF0dXM7Ci0JbG9uZyB1c2VyX3VzZWMsIG5pY2VfdXNlYzsKJiM0MzsJczY0IHVzZXJfdXNlYywgbmljZV91c2VjOwogCWxvbmcgdXNhZ2Vfc2Vjb25kcyA9IDI7CiAJbG9uZyBleHBlY3RlZF9uaWNlX3VzZWMgPSB1c2FnZV9zZWNvbmRzICogVVNFQ19QRVJfU0VDOwogCWNoYXIgKmNwdWNnOwpAQCAtMjUyLDggJiM0MzsyNTIsOCBAQCBzdGF0aWMgaW50IHRlc3RfY3B1Y2dfbmljZShjb25zdCBjaGFyICpyb290KQogCWlmIChjZ19jcmVhdGUoY3B1Y2cpKQogCQlnb3RvIGNsZWFudXA7CiAKLQl1c2VyX3VzZWMgPSBjZ19yZWFkX2tleV9sb25nKGNwdWNnLCAmIzM0O2NwdS5zdGF0JiMzNDssICYjMzQ7dXNlcl91c2VjJiMzNDspOwotCW5pY2VfdXNlYyA9IGNnX3JlYWRfa2V5X2xvbmcoY3B1Y2csICYjMzQ7Y3B1LnN0YXQmIzM0OywgJiMzNDtuaWNlX3VzZWMmIzM0Oyk7CiYjNDM7CXVzZXJfdXNlYyA9IGNnX3JlYWRfa2V5X3M2NChjcHVjZywgJiMzNDtjcHUuc3RhdCYjMzQ7LCAmIzM0O3VzZXJfdXNlYyYjMzQ7KTsKJiM0MzsJbmljZV91c2VjID0gY2dfcmVhZF9rZXlfczY0KGNwdWNnLCAmIzM0O2NwdS5zdGF0JiMzNDssICYjMzQ7bmljZV91c2VjJiMzNDspOwogCWlmIChuaWNlX3VzZWMgPT0gLTEpCiAJCXJldCA9IEtTRlRfU0tJUDsKIAlpZiAodXNlcl91c2VjICE9IDAgfHwgbmljZV91c2VjICE9IDApCkBAIC0yODksOCAmIzQzOzI4OSw4IEBAIHN0YXRpYyBpbnQgdGVzdF9jcHVjZ19uaWNlKGNvbnN0IGNoYXIgKnJvb3QpCiAJCWlmICghV0lGRVhJVEVEKHN0YXR1cykpCiAJCQlnb3RvIGNsZWFudXA7CiAKLQkJdXNlcl91c2VjID0gY2dfcmVhZF9rZXlfbG9uZyhjcHVjZywgJiMzNDtjcHUuc3RhdCYjMzQ7LCAmIzM0O3VzZXJfdXNlYyYjMzQ7KTsKLQkJbmljZV91c2VjID0gY2dfcmVhZF9rZXlfbG9uZyhjcHVjZywgJiMzNDtjcHUuc3RhdCYjMzQ7LCAmIzM0O25pY2VfdXNlYyYjMzQ7KTsKJiM0MzsJCXVzZXJfdXNlYyA9IGNnX3JlYWRfa2V5X3M2NChjcHVjZywgJiMzNDtjcHUuc3RhdCYjMzQ7LCAmIzM0O3VzZXJfdXNlYyYjMzQ7KTsKJiM0MzsJCW5pY2VfdXNlYyA9IGNnX3JlYWRfa2V5X3M2NChjcHVjZywgJiMzNDtjcHUuc3RhdCYjMzQ7LCAmIzM0O25pY2VfdXNlYyYjMzQ7KTsKIAkJaWYgKHVzZXJfdXNlYyAmbHQ7PSAwKQogCQkJZ290byBjbGVhbnVwOwogCQlpZiAoIXZhbHVlc19jbG9zZV9yZXBvcnQobmljZV91c2VjLCBleHBlY3RlZF9uaWNlX3VzZWMsIDEpKQpAQCAtMzU3LDggJiM0MzszNTcsOCBAQCBydW5fY3B1Y2dfd2VpZ2h0X3Rlc3QoCiAJfQogCiAJZm9yIChpID0gMDsgaSAmbHQ7IEFSUkFZX1NJWkUoY2hpbGRyZW4pOyBpJiM0MzsmIzQzOykKLQkJY2hpbGRyZW5baV0udXNhZ2UgPSBjZ19yZWFkX2tleV9sb25nKGNoaWxkcmVuW2ldLmNncm91cCwKLQkJCQkmIzM0O2NwdS5zdGF0JiMzNDssICYjMzQ7dXNhZ2VfdXNlYyYjMzQ7KTsKJiM0MzsJCWNoaWxkcmVuW2ldLnVzYWdlID0gY2dfcmVhZF9rZXlfczY0KGNoaWxkcmVuW2ldLmNncm91cCwKJiM0MzsJCQkJCQkgICAgJiMzNDtjcHUuc3RhdCYjMzQ7LCAmIzM0O3VzYWdlX3VzZWMmIzM0Oyk7CiAKIAlpZiAodmFsaWRhdGUoY2hpbGRyZW4sIEFSUkFZX1NJWkUoY2hpbGRyZW4pKSkKIAkJZ290byBjbGVhbnVwOwpAQCAtNDg2LDcgJiM0Mzs0ODYsNyBAQCBydW5fY3B1Y2dfbmVzdGVkX3dlaWdodF90ZXN0KGNvbnN0IGNoYXIgKnJvb3QsIGJvb2wgb3ZlcnByb3Zpc2lvbmVkKQogCWludCByZXQgPSBLU0ZUX0ZBSUwsIGk7CiAJY2hhciAqcGFyZW50ID0gTlVMTCwgKmNoaWxkID0gTlVMTDsKIAlzdHJ1Y3QgY3B1X2hvZ2dlciBsZWFmWzNdID0ge307Ci0JbG9uZyBuZXN0ZWRfbGVhZl91c2FnZSwgY2hpbGRfdXNhZ2U7CiYjNDM7CXM2NCBuZXN0ZWRfbGVhZl91c2FnZSwgY2hpbGRfdXNhZ2U7CiAJaW50IG5wcm9jcyA9IGdldF9ucHJvY3MoKTsKIAogCWlmICghb3ZlcnByb3Zpc2lvbmVkKSB7CkBAIC01NjcsOCAmIzQzOzU2Nyw4IEBAIHJ1bl9jcHVjZ19uZXN0ZWRfd2VpZ2h0X3Rlc3QoY29uc3QgY2hhciAqcm9vdCwgYm9vbCBvdmVycHJvdmlzaW9uZWQpCiAJfQogCiAJZm9yIChpID0gMDsgaSAmbHQ7IEFSUkFZX1NJWkUobGVhZik7IGkmIzQzOyYjNDM7KSB7Ci0JCWxlYWZbaV0udXNhZ2UgPSBjZ19yZWFkX2tleV9sb25nKGxlYWZbaV0uY2dyb3VwLAotCQkJCSYjMzQ7Y3B1LnN0YXQmIzM0OywgJiMzNDt1c2FnZV91c2VjJiMzNDspOwomIzQzOwkJbGVhZltpXS51c2FnZSA9IGNnX3JlYWRfa2V5X3M2NChsZWFmW2ldLmNncm91cCwgJiMzNDtjcHUuc3RhdCYjMzQ7LAomIzQzOwkJCQkJCSYjMzQ7dXNhZ2VfdXNlYyYjMzQ7KTsKIAkJaWYgKGxlYWZbaV0udXNhZ2UgJmx0Oz0gMCkKIAkJCWdvdG8gY2xlYW51cDsKIAl9CkBAIC01ODAsOCAmIzQzOzU4MCw3IEBAIHJ1bl9jcHVjZ19uZXN0ZWRfd2VpZ2h0X3Rlc3QoY29uc3QgY2hhciAqcm9vdCwgYm9vbCBvdmVycHJvdmlzaW9uZWQpCiAJfSBlbHNlIGlmICghdmFsdWVzX2Nsb3NlX3JlcG9ydChsZWFmWzBdLnVzYWdlICogMiwgbmVzdGVkX2xlYWZfdXNhZ2UsIDE1KSkKIAkJZ290byBjbGVhbnVwOwogCi0KLQljaGlsZF91c2FnZSA9IGNnX3JlYWRfa2V5X2xvbmcoY2hpbGQsICYjMzQ7Y3B1LnN0YXQmIzM0OywgJiMzNDt1c2FnZV91c2VjJiMzNDspOwomIzQzOwljaGlsZF91c2FnZSA9IGNnX3JlYWRfa2V5X3M2NChjaGlsZCwgJiMzNDtjcHUuc3RhdCYjMzQ7LCAmIzM0O3VzYWdlX3VzZWMmIzM0Oyk7CiAJaWYgKGNoaWxkX3VzYWdlICZsdDs9IDApCiAJCWdvdG8gY2xlYW51cDsKIAlpZiAoIXZhbHVlc19jbG9zZV9yZXBvcnQoY2hpbGRfdXNhZ2UsIG5lc3RlZF9sZWFmX3VzYWdlLCAxKSkKQEAgLTY3OSw3ICYjNDM7Njc4LDggQEAgc3RhdGljIGludCB0ZXN0X2NwdWNnX21heChjb25zdCBjaGFyICpyb290KQogCWxvbmcgZHVyYXRpb25fc2Vjb25kcyA9IDE7CiAKIAlsb25nIGR1cmF0aW9uX3VzZWM7Ci0JbG9uZyB1c2FnZV91c2VjLCBuX3BlcmlvZHMsIHJlbWFpbmRlcl91c2VjLCBleHBlY3RlZF91c2FnZV91c2VjOwomIzQzOwlsb25nIG5fcGVyaW9kcywgcmVtYWluZGVyX3VzZWMsIGV4cGVjdGVkX3VzYWdlX3VzZWM7CiYjNDM7CXM2NCB1c2FnZV91c2VjOwogCWNoYXIgKmNwdWNnOwogCWNoYXIgcXVvdGFfYnVmWzMyXTsKIApAQCAtNzA4LDcgJiM0Mzs3MDgsNyBAQCBzdGF0aWMgaW50IHRlc3RfY3B1Y2dfbWF4KGNvbnN0IGNoYXIgKnJvb3QpCiAJaWYgKGNnX3J1bihjcHVjZywgaG9nX2NwdXNfdGltZWQsICh2b2lkICopJmFtcDtwYXJhbSkpCiAJCWdvdG8gY2xlYW51cDsKIAotCXVzYWdlX3VzZWMgPSBjZ19yZWFkX2tleV9sb25nKGNwdWNnLCAmIzM0O2NwdS5zdGF0JiMzNDssICYjMzQ7dXNhZ2VfdXNlYyYjMzQ7KTsKJiM0MzsJdXNhZ2VfdXNlYyA9IGNnX3JlYWRfa2V5X3M2NChjcHVjZywgJiMzNDtjcHUuc3RhdCYjMzQ7LCAmIzM0O3VzYWdlX3VzZWMmIzM0Oyk7CiAJaWYgKHVzYWdlX3VzZWMgJmx0Oz0gMCkKIAkJZ290byBjbGVhbnVwOwogCkBAIC03NDYsNyAmIzQzOzc0Niw4IEBAIHN0YXRpYyBpbnQgdGVzdF9jcHVjZ19tYXhfbmVzdGVkKGNvbnN0IGNoYXIgKnJvb3QpCiAJbG9uZyBkdXJhdGlvbl9zZWNvbmRzID0gMTsKIAogCWxvbmcgZHVyYXRpb25fdXNlYzsKLQlsb25nIHVzYWdlX3VzZWMsIG5fcGVyaW9kcywgcmVtYWluZGVyX3VzZWMsIGV4cGVjdGVkX3VzYWdlX3VzZWM7CiYjNDM7CWxvbmcgbl9wZXJpb2RzLCByZW1haW5kZXJfdXNlYywgZXhwZWN0ZWRfdXNhZ2VfdXNlYzsKJiM0MzsJczY0IHVzYWdlX3VzZWM7CiAJY2hhciAqcGFyZW50LCAqY2hpbGQ7CiAJY2hhciBxdW90YV9idWZbMzJdOwogCkBAIC03ODIsNyAmIzQzOzc4Myw3IEBAIHN0YXRpYyBpbnQgdGVzdF9jcHVjZ19tYXhfbmVzdGVkKGNvbnN0IGNoYXIgKnJvb3QpCiAJaWYgKGNnX3J1bihjaGlsZCwgaG9nX2NwdXNfdGltZWQsICh2b2lkICopJmFtcDtwYXJhbSkpCiAJCWdvdG8gY2xlYW51cDsKIAotCXVzYWdlX3VzZWMgPSBjZ19yZWFkX2tleV9sb25nKGNoaWxkLCAmIzM0O2NwdS5zdGF0JiMzNDssICYjMzQ7dXNhZ2VfdXNlYyYjMzQ7KTsKJiM0MzsJdXNhZ2VfdXNlYyA9IGNnX3JlYWRfa2V5X3M2NChjaGlsZCwgJiMzNDtjcHUuc3RhdCYjMzQ7LCAmIzM0O3VzYWdlX3VzZWMmIzM0Oyk7CiAJaWYgKHVzYWdlX3VzZWMgJmx0Oz0gMCkKIAkJZ290byBjbGVhbnVwOwogCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9jZ3JvdXAvdGVzdF9mcmVlemVyLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9jZ3JvdXAvdGVzdF9mcmVlemVyLmMKaW5kZXggZjI4YmIwMmU5NzgzYi4uZjRmMDgyYzEzZDRiNyAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvY2dyb3VwL3Rlc3RfZnJlZXplci5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2Nncm91cC90ZXN0X2ZyZWV6ZXIuYwpAQCAtODA3LDEwICYjNDM7ODA3LDkgQEAgc3RhdGljIGludCB0ZXN0X2NnZnJlZXplcl92Zm9yayhjb25zdCBjaGFyICpyb290KQogLyoKICAqIEdldCB0aGUgY3VycmVudCBmcm96ZW5fdXNlYyBmb3IgdGhlIGNncm91cC4KICAqLwotc3RhdGljIGxvbmcgY2dfY2hlY2tfZnJlZXpldGltZShjb25zdCBjaGFyICpjZ3JvdXApCiYjNDM7c3RhdGljIHM2NCBjZ19jaGVja19mcmVlemV0aW1lKGNvbnN0IGNoYXIgKmNncm91cCkKIHsKLQlyZXR1cm4gY2dfcmVhZF9rZXlfbG9uZyhjZ3JvdXAsICYjMzQ7Y2dyb3VwLnN0YXQubG9jYWwmIzM0OywKLQkJCQkmIzM0O2Zyb3plbl91c2VjICYjMzQ7KTsKJiM0MzsJcmV0dXJuIGNnX3JlYWRfa2V5X3M2NChjZ3JvdXAsICYjMzQ7Y2dyb3VwLnN0YXQubG9jYWwmIzM0OywgJiMzNDtmcm96ZW5fdXNlYyAmIzM0Oyk7CiB9CiAKIC8qCkBAIC04MjAsNyAmIzQzOzgxOSw3IEBAIHN0YXRpYyBpbnQgdGVzdF9jZ2ZyZWV6ZXJfdGltZV9lbXB0eShjb25zdCBjaGFyICpyb290KQogewogCWludCByZXQgPSBLU0ZUX0ZBSUw7CiAJY2hhciAqY2dyb3VwID0gTlVMTDsKLQlsb25nIHByZXYsIGN1cnI7CiYjNDM7CXM2NCBwcmV2LCBjdXJyOwogCiAJY2dyb3VwID0gY2dfbmFtZShyb290LCAmIzM0O2NnX3RpbWVfdGVzdF9lbXB0eSYjMzQ7KTsKIAlpZiAoIWNncm91cCkKQEAgLTgzOSw3ICYjNDM7ODM4LDcgQEAgc3RhdGljIGludCB0ZXN0X2NnZnJlZXplcl90aW1lX2VtcHR5KGNvbnN0IGNoYXIgKnJvb3QpCiAJCWdvdG8gY2xlYW51cDsKIAl9CiAJaWYgKGN1cnIgJmd0OyAwKSB7Ci0JCWRlYnVnKCYjMzQ7RXhwZWN0IHRpbWUgKCVsZCkgdG8gYmUgMFxuJiMzNDssIGN1cnIpOwomIzQzOwkJZGVidWcoJiMzNDtFeHBlY3QgdGltZSAoJWxsZCkgdG8gYmUgMFxuJiMzNDssIGN1cnIpOwogCQlnb3RvIGNsZWFudXA7CiAJfQogCkBAIC04NTMsOCAmIzQzOzg1Miw3IEBAIHN0YXRpYyBpbnQgdGVzdF9jZ2ZyZWV6ZXJfdGltZV9lbXB0eShjb25zdCBjaGFyICpyb290KQogCXVzbGVlcCgxMDAwKTsKIAljdXJyID0gY2dfY2hlY2tfZnJlZXpldGltZShjZ3JvdXApOwogCWlmIChjdXJyICZsdDsgMTAwMCkgewotCQlkZWJ1ZygmIzM0O0V4cGVjdCB0aW1lICglbGQpIHRvIGJlIGF0IGxlYXN0IDEwMDAgdXNcbiYjMzQ7LAotCQkgICAgICBjdXJyKTsKJiM0MzsJCWRlYnVnKCYjMzQ7RXhwZWN0IHRpbWUgKCVsbGQpIHRvIGJlIGF0IGxlYXN0IDEwMDAgdXNcbiYjMzQ7LCBjdXJyKTsKIAkJZ290byBjbGVhbnVwOwogCX0KIApAQCAtODY3LDcgJiM0Mzs4NjUsNyBAQCBzdGF0aWMgaW50IHRlc3RfY2dmcmVlemVyX3RpbWVfZW1wdHkoY29uc3QgY2hhciAqcm9vdCkKIAlwcmV2ID0gY3VycjsKIAljdXJyID0gY2dfY2hlY2tfZnJlZXpldGltZShjZ3JvdXApOwogCWlmIChjdXJyICZsdDs9IHByZXYpIHsKLQkJZGVidWcoJiMzNDtFeHBlY3QgdGltZSAoJWxkKSB0byBiZSBtb3JlIHRoYW4gcHJldmlvdXMgY2hlY2sgKCVsZClcbiYjMzQ7LAomIzQzOwkJZGVidWcoJiMzNDtFeHBlY3QgdGltZSAoJWxsZCkgdG8gYmUgbW9yZSB0aGFuIHByZXZpb3VzIGNoZWNrICglbGxkKVxuJiMzNDssCiAJCSAgICAgIGN1cnIsIHByZXYpOwogCQlnb3RvIGNsZWFudXA7CiAJfQpAQCAtODc5LDcgJiM0Mzs4NzcsNyBAQCBzdGF0aWMgaW50IHRlc3RfY2dmcmVlemVyX3RpbWVfZW1wdHkoY29uc3QgY2hhciAqcm9vdCkKIAlwcmV2ID0gY3VycjsKIAljdXJyID0gY2dfY2hlY2tfZnJlZXpldGltZShjZ3JvdXApOwogCWlmIChjdXJyICE9IHByZXYpIHsKLQkJZGVidWcoJiMzNDtFeHBlY3QgdGltZSAoJWxkKSB0byBiZSB1bmNoYW5nZWQgZnJvbSBwcmV2aW91cyBjaGVjayAoJWxkKVxuJiMzNDssCiYjNDM7CQlkZWJ1ZygmIzM0O0V4cGVjdCB0aW1lICglbGxkKSB0byBiZSB1bmNoYW5nZWQgZnJvbSBwcmV2aW91cyBjaGVjayAoJWxsZClcbiYjMzQ7LAogCQkgICAgICBjdXJyLCBwcmV2KTsKIAkJZ290byBjbGVhbnVwOwogCX0KZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2Nncm91cC90ZXN0X2ttZW0uYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2Nncm91cC90ZXN0X2ttZW0uYwppbmRleCA0MzdmMmQzNWYyMDVlLi4yNDk4OThmM2I4MWU4IDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9jZ3JvdXAvdGVzdF9rbWVtLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvY2dyb3VwL3Rlc3Rfa21lbS5jCkBAIC01NCw3ICYjNDM7NTQsOCBAQCBzdGF0aWMgaW50IHRlc3Rfa21lbV9iYXNpYyhjb25zdCBjaGFyICpyb290KQogewogCWludCByZXQgPSBLU0ZUX0ZBSUw7CiAJY2hhciAqY2cgPSBOVUxMOwotCWxvbmcgc2xhYjAsIHNsYWIxLCBjdXJyZW50OwomIzQzOwlzNjQgc2xhYjAsIHNsYWIxOwomIzQzOwlsb25nIGN1cnJlbnQ7CiAKIAljZyA9IGNnX25hbWUocm9vdCwgJiMzNDtrbWVtX2Jhc2ljX3Rlc3QmIzM0Oyk7CiAJaWYgKCFjZykKQEAgLTY2LDcgJiM0Mzs2Nyw3IEBAIHN0YXRpYyBpbnQgdGVzdF9rbWVtX2Jhc2ljKGNvbnN0IGNoYXIgKnJvb3QpCiAJaWYgKGNnX3J1bihjZywgYWxsb2NfZGNhY2hlLCAodm9pZCAqKTEwMDAwMCkpCiAJCWdvdG8gY2xlYW51cDsKIAotCXNsYWIwID0gY2dfcmVhZF9rZXlfbG9uZyhjZywgJiMzNDttZW1vcnkuc3RhdCYjMzQ7LCAmIzM0O3NsYWIgJiMzNDspOwomIzQzOwlzbGFiMCA9IGNnX3JlYWRfa2V5X3M2NChjZywgJiMzNDttZW1vcnkuc3RhdCYjMzQ7LCAmIzM0O3NsYWIgJiMzNDspOwogCWlmIChzbGFiMCAmbHQ7ICgxICZsdDsmbHQ7IDIwKSkKIAkJZ290byBjbGVhbnVwOwogCkBAIC03NSw3ICYjNDM7NzYsNyBAQCBzdGF0aWMgaW50IHRlc3Rfa21lbV9iYXNpYyhjb25zdCBjaGFyICpyb290KQogCS8qIHdhaXQgZm9yIFJDVSBmcmVlaW5nICovCiAJc2xlZXAoMSk7CiAKLQlzbGFiMSA9IGNnX3JlYWRfa2V5X2xvbmcoY2csICYjMzQ7bWVtb3J5LnN0YXQmIzM0OywgJiMzNDtzbGFiICYjMzQ7KTsKJiM0MzsJc2xhYjEgPSBjZ19yZWFkX2tleV9zNjQoY2csICYjMzQ7bWVtb3J5LnN0YXQmIzM0OywgJiMzNDtzbGFiICYjMzQ7KTsKIAlpZiAoc2xhYjEgJmx0OyAwKQogCQlnb3RvIGNsZWFudXA7CiAKQEAgLTE2Nyw3ICYjNDM7MTY4LDggQEAgc3RhdGljIGludCBjZ19ydW5faW5fc3ViY2dyb3Vwcyhjb25zdCBjaGFyICpwYXJlbnQsCiAgKi8KIHN0YXRpYyBpbnQgdGVzdF9rbWVtX21lbWNnX2RlbGV0aW9uKGNvbnN0IGNoYXIgKnJvb3QpCiB7Ci0JbG9uZyBjdXJyZW50LCBhbm9uLCBmaWxlLCBrZXJuZWwsIHNvY2ssIHN1bTsKJiM0MzsJbG9uZyBjdXJyZW50OwomIzQzOwlzNjQgYW5vbiwgZmlsZSwga2VybmVsLCBzb2NrLCBzdW07CiAJaW50IHJldCA9IEtTRlRfRkFJTDsKIAljaGFyICpwYXJlbnQ7CiAKQEAgLTE4NSwyMyAmIzQzOzE4NywyMyBAQCBzdGF0aWMgaW50IHRlc3Rfa21lbV9tZW1jZ19kZWxldGlvbihjb25zdCBjaGFyICpyb290KQogCQlnb3RvIGNsZWFudXA7CiAKIAljdXJyZW50ID0gY2dfcmVhZF9sb25nKHBhcmVudCwgJiMzNDttZW1vcnkuY3VycmVudCYjMzQ7KTsKLQlhbm9uID0gY2dfcmVhZF9rZXlfbG9uZyhwYXJlbnQsICYjMzQ7bWVtb3J5LnN0YXQmIzM0OywgJiMzNDthbm9uICYjMzQ7KTsKLQlmaWxlID0gY2dfcmVhZF9rZXlfbG9uZyhwYXJlbnQsICYjMzQ7bWVtb3J5LnN0YXQmIzM0OywgJiMzNDtmaWxlICYjMzQ7KTsKLQlrZXJuZWwgPSBjZ19yZWFkX2tleV9sb25nKHBhcmVudCwgJiMzNDttZW1vcnkuc3RhdCYjMzQ7LCAmIzM0O2tlcm5lbCAmIzM0Oyk7Ci0Jc29jayA9IGNnX3JlYWRfa2V5X2xvbmcocGFyZW50LCAmIzM0O21lbW9yeS5zdGF0JiMzNDssICYjMzQ7c29jayAmIzM0Oyk7CiYjNDM7CWFub24gPSBjZ19yZWFkX2tleV9zNjQocGFyZW50LCAmIzM0O21lbW9yeS5zdGF0JiMzNDssICYjMzQ7YW5vbiAmIzM0Oyk7CiYjNDM7CWZpbGUgPSBjZ19yZWFkX2tleV9zNjQocGFyZW50LCAmIzM0O21lbW9yeS5zdGF0JiMzNDssICYjMzQ7ZmlsZSAmIzM0Oyk7CiYjNDM7CWtlcm5lbCA9IGNnX3JlYWRfa2V5X3M2NChwYXJlbnQsICYjMzQ7bWVtb3J5LnN0YXQmIzM0OywgJiMzNDtrZXJuZWwgJiMzNDspOwomIzQzOwlzb2NrID0gY2dfcmVhZF9rZXlfczY0KHBhcmVudCwgJiMzNDttZW1vcnkuc3RhdCYjMzQ7LCAmIzM0O3NvY2sgJiMzNDspOwogCWlmIChjdXJyZW50ICZsdDsgMCB8fCBhbm9uICZsdDsgMCB8fCBmaWxlICZsdDsgMCB8fCBrZXJuZWwgJmx0OyAwIHx8IHNvY2sgJmx0OyAwKQogCQlnb3RvIGNsZWFudXA7CiAKIAlzdW0gPSBhbm9uICYjNDM7IGZpbGUgJiM0Mzsga2VybmVsICYjNDM7IHNvY2s7Ci0JaWYgKGxhYnMoc3VtIC0gY3VycmVudCkgJmx0OyBNQVhfVk1TVEFUX0VSUk9SKSB7CiYjNDM7CWlmIChsbGFicyhzdW0gLSBjdXJyZW50KSAmbHQ7IE1BWF9WTVNUQVRfRVJST1IpIHsKIAkJcmV0ID0gS1NGVF9QQVNTOwogCX0gZWxzZSB7CiAJCXByaW50ZigmIzM0O21lbW9yeS5jdXJyZW50ID0gJWxkXG4mIzM0OywgY3VycmVudCk7Ci0JCXByaW50ZigmIzM0O2Fub24gJiM0MzsgZmlsZSAmIzQzOyBrZXJuZWwgJiM0Mzsgc29jayA9ICVsZFxuJiMzNDssIHN1bSk7Ci0JCXByaW50ZigmIzM0O2Fub24gPSAlbGRcbiYjMzQ7LCBhbm9uKTsKLQkJcHJpbnRmKCYjMzQ7ZmlsZSA9ICVsZFxuJiMzNDssIGZpbGUpOwotCQlwcmludGYoJiMzNDtrZXJuZWwgPSAlbGRcbiYjMzQ7LCBrZXJuZWwpOwotCQlwcmludGYoJiMzNDtzb2NrID0gJWxkXG4mIzM0Oywgc29jayk7CiYjNDM7CQlwcmludGYoJiMzNDthbm9uICYjNDM7IGZpbGUgJiM0Mzsga2VybmVsICYjNDM7IHNvY2sgPSAlbGxkXG4mIzM0Oywgc3VtKTsKJiM0MzsJCXByaW50ZigmIzM0O2Fub24gPSAlbGxkXG4mIzM0OywgYW5vbik7CiYjNDM7CQlwcmludGYoJiMzNDtmaWxlID0gJWxsZFxuJiMzNDssIGZpbGUpOwomIzQzOwkJcHJpbnRmKCYjMzQ7a2VybmVsID0gJWxsZFxuJiMzNDssIGtlcm5lbCk7CiYjNDM7CQlwcmludGYoJiMzNDtzb2NrID0gJWxsZFxuJiMzNDssIHNvY2spOwogCX0KIAogY2xlYW51cDoKQEAgLTI0OCw3ICYjNDM7MjUwLDcgQEAgc3RhdGljIGludCBzcGF3bl8xMDAwX3RocmVhZHMoY29uc3QgY2hhciAqY2dyb3VwLCB2b2lkICphcmcpCiAJaW50IG5yX3RocmVhZHMgPSAxMDAwOwogCXB0aHJlYWRfdCAqdGluZm87CiAJdW5zaWduZWQgbG9uZyBpOwotCWxvbmcgc3RhY2s7CiYjNDM7CXM2NCBzdGFjazsKIAlpbnQgcmV0ID0gLTE7CiAKIAl0aW5mbyA9IGNhbGxvYyhucl90aHJlYWRzLCBzaXplb2YocHRocmVhZF90KSk7CkBAIC0yNjMsNyAmIzQzOzI2NSw3IEBAIHN0YXRpYyBpbnQgc3Bhd25fMTAwMF90aHJlYWRzKGNvbnN0IGNoYXIgKmNncm91cCwgdm9pZCAqYXJnKQogCQl9CiAJfQogCi0Jc3RhY2sgPSBjZ19yZWFkX2tleV9sb25nKGNncm91cCwgJiMzNDttZW1vcnkuc3RhdCYjMzQ7LCAmIzM0O2tlcm5lbF9zdGFjayAmIzM0Oyk7CiYjNDM7CXN0YWNrID0gY2dfcmVhZF9rZXlfczY0KGNncm91cCwgJiMzNDttZW1vcnkuc3RhdCYjMzQ7LCAmIzM0O2tlcm5lbF9zdGFjayAmIzM0Oyk7CiAJaWYgKHN0YWNrICZndDs9IDQwOTYgKiAxMDAwKQogCQlyZXQgPSAwOwogCkBAIC0zMDcsNyAmIzQzOzMwOSw3IEBAIHN0YXRpYyBpbnQgdGVzdF9rbWVtX2RlYWRfY2dyb3Vwcyhjb25zdCBjaGFyICpyb290KQogewogCWludCByZXQgPSBLU0ZUX0ZBSUw7CiAJY2hhciAqcGFyZW50OwotCWxvbmcgZGVhZCA9IC0xOwomIzQzOwlzNjQgZGVhZCA9IC0xOwogCiAJcGFyZW50ID0gY2dfbmFtZShyb290LCAmIzM0O2ttZW1fZGVhZF9jZ3JvdXBzX3Rlc3QmIzM0Oyk7CiAJaWYgKCFwYXJlbnQpCkBAIC0zMjgsOSAmIzQzOzMzMCwxMCBAQCBzdGF0aWMgaW50IHRlc3Rfa21lbV9kZWFkX2Nncm91cHMoY29uc3QgY2hhciAqcm9vdCkKIAkgKiBmcm9tIGEgc3BlY2lmaWMga2VybmVsIGNvbnN0YW50LCBhbmQgY2FuIGJlIGFkanVzdGVkIGlmIHJlY2xhaW0KIAkgKiBiZWhhdmlvciBjaGFuZ2VzIGluIHRoZSBmdXR1cmUuCiAJICovCi0JZGVhZCA9IGNnX3JlYWRfa2V5X2xvbmdfcG9sbChwYXJlbnQsICYjMzQ7Y2dyb3VwLnN0YXQmIzM0OywKLQkJCQkJJiMzNDtucl9keWluZ19kZXNjZW5kYW50cyAmIzM0OywgMCwgS01FTV9ERUFEX1dBSVRfUkVUUklFUywKLQkJCQkJREVGQVVMVF9XQUlUX0lOVEVSVkFMX1VTKTsKJiM0MzsJZGVhZCA9IGNnX3JlYWRfa2V5X3M2NF9wb2xsKHBhcmVudCwgJiMzNDtjZ3JvdXAuc3RhdCYjMzQ7LAomIzQzOwkJCQkgICAgJiMzNDtucl9keWluZ19kZXNjZW5kYW50cyAmIzM0OywgMCwKJiM0MzsJCQkJICAgIEtNRU1fREVBRF9XQUlUX1JFVFJJRVMsCiYjNDM7CQkJCSAgICBERUZBVUxUX1dBSVRfSU5URVJWQUxfVVMpOwogCWlmIChkZWFkKQogCQlnb3RvIGNsZWFudXA7CiAKQEAgLTM1Myw3ICYjNDM7MzU2LDggQEAgc3RhdGljIGludCB0ZXN0X3BlcmNwdV9iYXNpYyhjb25zdCBjaGFyICpyb290KQogewogCWludCByZXQgPSBLU0ZUX0ZBSUw7CiAJY2hhciAqcGFyZW50LCAqY2hpbGQ7Ci0JbG9uZyBjdXJyZW50LCBwZXJjcHUsIHNsYWI7CiYjNDM7CWxvbmcgY3VycmVudDsKJiM0MzsJczY0IHBlcmNwdSwgc2xhYjsKIAlpbnQgaTsKIAogCXBhcmVudCA9IGNnX25hbWUocm9vdCwgJiMzNDtwZXJjcHVfYmFzaWNfdGVzdCYjMzQ7KTsKQEAgLTM4MiwxNSAmIzQzOzM4NiwxNSBAQCBzdGF0aWMgaW50IHRlc3RfcGVyY3B1X2Jhc2ljKGNvbnN0IGNoYXIgKnJvb3QpCiAJfQogCiAJY3VycmVudCA9IGNnX3JlYWRfbG9uZyhwYXJlbnQsICYjMzQ7bWVtb3J5LmN1cnJlbnQmIzM0Oyk7Ci0JcGVyY3B1ID0gY2dfcmVhZF9rZXlfbG9uZyhwYXJlbnQsICYjMzQ7bWVtb3J5LnN0YXQmIzM0OywgJiMzNDtwZXJjcHUgJiMzNDspOwotCXNsYWIgPSBjZ19yZWFkX2tleV9sb25nKHBhcmVudCwgJiMzNDttZW1vcnkuc3RhdCYjMzQ7LCAmIzM0O3NsYWIgJiMzNDspOwomIzQzOwlwZXJjcHUgPSBjZ19yZWFkX2tleV9zNjQocGFyZW50LCAmIzM0O21lbW9yeS5zdGF0JiMzNDssICYjMzQ7cGVyY3B1ICYjMzQ7KTsKJiM0MzsJc2xhYiA9IGNnX3JlYWRfa2V5X3M2NChwYXJlbnQsICYjMzQ7bWVtb3J5LnN0YXQmIzM0OywgJiMzNDtzbGFiICYjMzQ7KTsKIAogCWlmIChjdXJyZW50ICZndDsgMCAmYW1wOyZhbXA7IHBlcmNwdSAmZ3Q7IDAgJmFtcDsmYW1wOyBzbGFiICZndDs9IDAgJmFtcDsmYW1wOwotCQkJbGFicyhjdXJyZW50IC0gKHBlcmNwdSAmIzQzOyBzbGFiKSkgJmx0OyBNQVhfVk1TVEFUX0VSUk9SKQomIzQzOwkgICAgbGxhYnMoY3VycmVudCAtIChwZXJjcHUgJiM0Mzsgc2xhYikpICZsdDsgTUFYX1ZNU1RBVF9FUlJPUikKIAkJcmV0ID0gS1NGVF9QQVNTOwogCWVsc2UKLQkJcHJpbnRmKCYjMzQ7bWVtb3J5LmN1cnJlbnQgJWxkXG5wZXJjcHUgJWxkXG5zbGFiICVsZFxuZGVsdGEgJWxkXG4mIzM0OywKLQkJCWN1cnJlbnQsIHBlcmNwdSwgc2xhYiwgY3VycmVudCAtIChwZXJjcHUgJiM0Mzsgc2xhYikpOwomIzQzOwkJcHJpbnRmKCYjMzQ7bWVtb3J5LmN1cnJlbnQgJWxkXG5wZXJjcHUgJWxsZFxuc2xhYiAlbGxkXG5kZWx0YSAlbGxkXG4mIzM0OywKJiM0MzsJCSAgICAgICBjdXJyZW50LCBwZXJjcHUsIHNsYWIsIGN1cnJlbnQgLSAocGVyY3B1ICYjNDM7IHNsYWIpKTsKIAogY2xlYW51cF9jaGlsZHJlbjoKIAlmb3IgKGkgPSAwOyBpICZsdDsgMTAwMDsgaSYjNDM7JiM0MzspIHsKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2Nncm91cC90ZXN0X21lbWNvbnRyb2wuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2Nncm91cC90ZXN0X21lbWNvbnRyb2wuYwppbmRleCAzYTg0ZDA2OGZiZjM2Li41Mzk2NTBjMWQ1NjI2IDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9jZ3JvdXAvdGVzdF9tZW1jb250cm9sLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvY2dyb3VwL3Rlc3RfbWVtY29udHJvbC5jCkBAIC0xOTIsNyAmIzQzOzE5Miw4IEBAIHN0YXRpYyBpbnQgYWxsb2NfYW5vbl81ME1fY2hlY2soY29uc3QgY2hhciAqY2dyb3VwLCB2b2lkICphcmcpCiB7CiAJc2l6ZV90IHNpemUgPSBNQig1MCk7CiAJY2hhciAqYnVmOwotCWxvbmcgYW5vbiwgY3VycmVudDsKJiM0MzsJczY0IGFub247CiYjNDM7CWxvbmcgY3VycmVudDsKIAlpbnQgcmV0ID0gLTE7CiAKIAlidWYgPSBhbGxvY19hbmRfcG9wdWxhdGVfYW5vbihzaXplKTsKQEAgLTIwNiw3ICYjNDM7MjA3LDcgQEAgc3RhdGljIGludCBhbGxvY19hbm9uXzUwTV9jaGVjayhjb25zdCBjaGFyICpjZ3JvdXAsIHZvaWQgKmFyZykKIAlpZiAoIXZhbHVlc19jbG9zZShzaXplLCBjdXJyZW50LCAzKSkKIAkJZ290byBjbGVhbnVwOwogCi0JYW5vbiA9IGNnX3JlYWRfa2V5X2xvbmcoY2dyb3VwLCAmIzM0O21lbW9yeS5zdGF0JiMzNDssICYjMzQ7YW5vbiAmIzM0Oyk7CiYjNDM7CWFub24gPSBjZ19yZWFkX2tleV9zNjQoY2dyb3VwLCAmIzM0O21lbW9yeS5zdGF0JiMzNDssICYjMzQ7YW5vbiAmIzM0Oyk7CiAJaWYgKGFub24gJmx0OyAwKQogCQlnb3RvIGNsZWFudXA7CiAKQEAgLTIyMyw3ICYjNDM7MjI0LDggQEAgc3RhdGljIGludCBhbGxvY19wYWdlY2FjaGVfNTBNX2NoZWNrKGNvbnN0IGNoYXIgKmNncm91cCwgdm9pZCAqYXJnKQogewogCXNpemVfdCBzaXplID0gTUIoNTApOwogCWludCByZXQgPSAtMTsKLQlsb25nIGN1cnJlbnQsIGZpbGU7CiYjNDM7CWxvbmcgY3VycmVudDsKJiM0MzsJczY0IGZpbGU7CiAJaW50IGZkOwogCiAJZmQgPSBnZXRfdGVtcF9mZCgpOwpAQCAtMjM3LDcgJiM0MzsyMzksNyBAQCBzdGF0aWMgaW50IGFsbG9jX3BhZ2VjYWNoZV81ME1fY2hlY2soY29uc3QgY2hhciAqY2dyb3VwLCB2b2lkICphcmcpCiAJaWYgKGN1cnJlbnQgJmx0OyBzaXplKQogCQlnb3RvIGNsZWFudXA7CiAKLQlmaWxlID0gY2dfcmVhZF9rZXlfbG9uZyhjZ3JvdXAsICYjMzQ7bWVtb3J5LnN0YXQmIzM0OywgJiMzNDtmaWxlICYjMzQ7KTsKJiM0MzsJZmlsZSA9IGNnX3JlYWRfa2V5X3M2NChjZ3JvdXAsICYjMzQ7bWVtb3J5LnN0YXQmIzM0OywgJiMzNDtmaWxlICYjMzQ7KTsKIAlpZiAoZmlsZSAmbHQ7IDApCiAJCWdvdG8gY2xlYW51cDsKIApAQCAtNjIzLDEwICYjNDM7NjI1LDEwIEBAIHN0YXRpYyBpbnQgdGVzdF9tZW1jZ19wcm90ZWN0aW9uKGNvbnN0IGNoYXIgKnJvb3QsIGJvb2wgbWluKQogCWZvciAoaSA9IDA7IGkgJmx0OyBBUlJBWV9TSVpFKGNoaWxkcmVuKTsgaSYjNDM7JiM0MzspIHsKIAkJaW50IGlnbm9yZV9sb3dfZXZlbnRzX2luZGV4ID0gaGFzX3JlY3Vyc2l2ZXByb3QgPyAyIDogLTE7CiAJCWludCBub19sb3dfZXZlbnRzX2luZGV4ID0gMTsKLQkJbG9uZyBsb3csIG9vbTsKJiM0MzsJCXM2NCBsb3csIG9vbTsKIAotCQlvb20gPSBjZ19yZWFkX2tleV9sb25nKGNoaWxkcmVuW2ldLCAmIzM0O21lbW9yeS5ldmVudHMmIzM0OywgJiMzNDtvb20gJiMzNDspOwotCQlsb3cgPSBjZ19yZWFkX2tleV9sb25nKGNoaWxkcmVuW2ldLCAmIzM0O21lbW9yeS5ldmVudHMmIzM0OywgJiMzNDtsb3cgJiMzNDspOwomIzQzOwkJb29tID0gY2dfcmVhZF9rZXlfczY0KGNoaWxkcmVuW2ldLCAmIzM0O21lbW9yeS5ldmVudHMmIzM0OywgJiMzNDtvb20gJiMzNDspOwomIzQzOwkJbG93ID0gY2dfcmVhZF9rZXlfczY0KGNoaWxkcmVuW2ldLCAmIzM0O21lbW9yeS5ldmVudHMmIzM0OywgJiMzNDtsb3cgJiMzNDspOwogCiAJCWlmIChvb20pCiAJCQlnb3RvIGNsZWFudXA7CkBAIC03MTEsNyAmIzQzOzcxMyw3IEBAIHN0YXRpYyBpbnQgdGVzdF9tZW1jZ19oaWdoKGNvbnN0IGNoYXIgKnJvb3QpCiB7CiAJaW50IHJldCA9IEtTRlRfRkFJTDsKIAljaGFyICptZW1jZzsKLQlsb25nIGhpZ2g7CiYjNDM7CXM2NCBoaWdoOwogCiAJbWVtY2cgPSBjZ19uYW1lKHJvb3QsICYjMzQ7bWVtY2dfdGVzdCYjMzQ7KTsKIAlpZiAoIW1lbWNnKQpAQCAtNzM4LDcgJiM0Mzs3NDAsNyBAQCBzdGF0aWMgaW50IHRlc3RfbWVtY2dfaGlnaChjb25zdCBjaGFyICpyb290KQogCWlmIChjZ19ydW4obWVtY2csIGFsbG9jX3BhZ2VjYWNoZV9tYXhfMzBNLCBOVUxMKSkKIAkJZ290byBjbGVhbnVwOwogCi0JaGlnaCA9IGNnX3JlYWRfa2V5X2xvbmcobWVtY2csICYjMzQ7bWVtb3J5LmV2ZW50cyYjMzQ7LCAmIzM0O2hpZ2ggJiMzNDspOwomIzQzOwloaWdoID0gY2dfcmVhZF9rZXlfczY0KG1lbWNnLCAmIzM0O21lbW9yeS5ldmVudHMmIzM0OywgJiMzNDtoaWdoICYjMzQ7KTsKIAlpZiAoaGlnaCAmbHQ7PSAwKQogCQlnb3RvIGNsZWFudXA7CiAKQEAgLTc3NCw4ICYjNDM7Nzc2LDggQEAgc3RhdGljIGludCB0ZXN0X21lbWNnX2hpZ2hfc3luYyhjb25zdCBjaGFyICpyb290KQogewogCWludCByZXQgPSBLU0ZUX0ZBSUwsIHBpZCwgZmQgPSAtMTsKIAljaGFyICptZW1jZzsKLQlsb25nIHByZV9oaWdoLCBwcmVfbWF4OwotCWxvbmcgcG9zdF9oaWdoLCBwb3N0X21heDsKJiM0MzsJczY0IHByZV9oaWdoLCBwcmVfbWF4OwomIzQzOwlzNjQgcG9zdF9oaWdoLCBwb3N0X21heDsKIAogCW1lbWNnID0gY2dfbmFtZShyb290LCAmIzM0O21lbWNnX3Rlc3QmIzM0Oyk7CiAJaWYgKCFtZW1jZykKQEAgLTc4NCw4ICYjNDM7Nzg2LDggQEAgc3RhdGljIGludCB0ZXN0X21lbWNnX2hpZ2hfc3luYyhjb25zdCBjaGFyICpyb290KQogCWlmIChjZ19jcmVhdGUobWVtY2cpKQogCQlnb3RvIGNsZWFudXA7CiAKLQlwcmVfaGlnaCA9IGNnX3JlYWRfa2V5X2xvbmcobWVtY2csICYjMzQ7bWVtb3J5LmV2ZW50cyYjMzQ7LCAmIzM0O2hpZ2ggJiMzNDspOwotCXByZV9tYXggPSBjZ19yZWFkX2tleV9sb25nKG1lbWNnLCAmIzM0O21lbW9yeS5ldmVudHMmIzM0OywgJiMzNDttYXggJiMzNDspOwomIzQzOwlwcmVfaGlnaCA9IGNnX3JlYWRfa2V5X3M2NChtZW1jZywgJiMzNDttZW1vcnkuZXZlbnRzJiMzNDssICYjMzQ7aGlnaCAmIzM0Oyk7CiYjNDM7CXByZV9tYXggPSBjZ19yZWFkX2tleV9zNjQobWVtY2csICYjMzQ7bWVtb3J5LmV2ZW50cyYjMzQ7LCAmIzM0O21heCAmIzM0Oyk7CiAJaWYgKHByZV9oaWdoICZsdDsgMCB8fCBwcmVfbWF4ICZsdDsgMCkKIAkJZ290byBjbGVhbnVwOwogCkBAIC04MDgsOCAmIzQzOzgxMCw4IEBAIHN0YXRpYyBpbnQgdGVzdF9tZW1jZ19oaWdoX3N5bmMoY29uc3QgY2hhciAqcm9vdCkKIAogCWNnX3dhaXRfZm9yKGZkKTsKIAotCXBvc3RfaGlnaCA9IGNnX3JlYWRfa2V5X2xvbmcobWVtY2csICYjMzQ7bWVtb3J5LmV2ZW50cyYjMzQ7LCAmIzM0O2hpZ2ggJiMzNDspOwotCXBvc3RfbWF4ID0gY2dfcmVhZF9rZXlfbG9uZyhtZW1jZywgJiMzNDttZW1vcnkuZXZlbnRzJiMzNDssICYjMzQ7bWF4ICYjMzQ7KTsKJiM0MzsJcG9zdF9oaWdoID0gY2dfcmVhZF9rZXlfczY0KG1lbWNnLCAmIzM0O21lbW9yeS5ldmVudHMmIzM0OywgJiMzNDtoaWdoICYjMzQ7KTsKJiM0MzsJcG9zdF9tYXggPSBjZ19yZWFkX2tleV9zNjQobWVtY2csICYjMzQ7bWVtb3J5LmV2ZW50cyYjMzQ7LCAmIzM0O21heCAmIzM0Oyk7CiAJaWYgKHBvc3RfaGlnaCAmbHQ7IDAgfHwgcG9zdF9tYXggJmx0OyAwKQogCQlnb3RvIGNsZWFudXA7CiAKQEAgLTgzNiw3ICYjNDM7ODM4LDggQEAgc3RhdGljIGludCB0ZXN0X21lbWNnX21heChjb25zdCBjaGFyICpyb290KQogewogCWludCByZXQgPSBLU0ZUX0ZBSUw7CiAJY2hhciAqbWVtY2c7Ci0JbG9uZyBjdXJyZW50LCBtYXg7CiYjNDM7CWxvbmcgY3VycmVudDsKJiM0MzsJczY0IG1heDsKIAogCW1lbWNnID0gY2dfbmFtZShyb290LCAmIzM0O21lbWNnX3Rlc3QmIzM0Oyk7CiAJaWYgKCFtZW1jZykKQEAgLTg2NSw3ICYjNDM7ODY4LDcgQEAgc3RhdGljIGludCB0ZXN0X21lbWNnX21heChjb25zdCBjaGFyICpyb290KQogCWlmIChjdXJyZW50ICZndDsgTUIoMzApIHx8ICFjdXJyZW50KQogCQlnb3RvIGNsZWFudXA7CiAKLQltYXggPSBjZ19yZWFkX2tleV9sb25nKG1lbWNnLCAmIzM0O21lbW9yeS5ldmVudHMmIzM0OywgJiMzNDttYXggJiMzNDspOwomIzQzOwltYXggPSBjZ19yZWFkX2tleV9zNjQobWVtY2csICYjMzQ7bWVtb3J5LmV2ZW50cyYjMzQ7LCAmIzM0O21heCAmIzM0Oyk7CiAJaWYgKG1heCAmbHQ7PSAwKQogCQlnb3RvIGNsZWFudXA7CiAKQEAgLTEwMjksNyAmIzQzOzEwMzIsOCBAQCBzdGF0aWMgaW50IHRlc3RfbWVtY2dfc3dhcF9tYXhfcGVhayhjb25zdCBjaGFyICpyb290KQogewogCWludCByZXQgPSBLU0ZUX0ZBSUw7CiAJY2hhciAqbWVtY2c7Ci0JbG9uZyBtYXgsIHBlYWs7CiYjNDM7CXM2NCBtYXg7CiYjNDM7CWxvbmcgcGVhazsKIAlzdHJ1Y3Qgc3RhdCBzczsKIAlpbnQgc3dhcF9wZWFrX2ZkID0gLTEsIG1lbV9wZWFrX2ZkID0gLTE7CiAKQEAgLTExMjIsMTAgJiM0MzsxMTI2LDEwIEBAIHN0YXRpYyBpbnQgdGVzdF9tZW1jZ19zd2FwX21heF9wZWFrKGNvbnN0IGNoYXIgKnJvb3QpCiAJaWYgKCFjZ19ydW4obWVtY2csIGFsbG9jX2Fub24sICh2b2lkICopTUIoMTAwKSkpCiAJCWdvdG8gY2xlYW51cDsKIAotCWlmIChjZ19yZWFkX2tleV9sb25nKG1lbWNnLCAmIzM0O21lbW9yeS5ldmVudHMmIzM0OywgJiMzNDtvb20gJiMzNDspICE9IDEpCiYjNDM7CWlmIChjZ19yZWFkX2tleV9zNjQobWVtY2csICYjMzQ7bWVtb3J5LmV2ZW50cyYjMzQ7LCAmIzM0O29vbSAmIzM0OykgIT0gMSkKIAkJZ290byBjbGVhbnVwOwogCi0JaWYgKGNnX3JlYWRfa2V5X2xvbmcobWVtY2csICYjMzQ7bWVtb3J5LmV2ZW50cyYjMzQ7LCAmIzM0O29vbV9raWxsICYjMzQ7KSAhPSAxKQomIzQzOwlpZiAoY2dfcmVhZF9rZXlfczY0KG1lbWNnLCAmIzM0O21lbW9yeS5ldmVudHMmIzM0OywgJiMzNDtvb21fa2lsbCAmIzM0OykgIT0gMSkKIAkJZ290byBjbGVhbnVwOwogCiAJcGVhayA9IGNnX3JlYWRfbG9uZyhtZW1jZywgJiMzNDttZW1vcnkucGVhayYjMzQ7KTsKQEAgLTExODYsNyAmIzQzOzExOTAsNyBAQCBzdGF0aWMgaW50IHRlc3RfbWVtY2dfc3dhcF9tYXhfcGVhayhjb25zdCBjaGFyICpyb290KQogCWlmIChjZ19ydW4obWVtY2csIGFsbG9jX2Fub25fNTBNX2NoZWNrX3N3YXAsICh2b2lkICopTUIoMzApKSkKIAkJZ290byBjbGVhbnVwOwogCi0JbWF4ID0gY2dfcmVhZF9rZXlfbG9uZyhtZW1jZywgJiMzNDttZW1vcnkuZXZlbnRzJiMzNDssICYjMzQ7bWF4ICYjMzQ7KTsKJiM0MzsJbWF4ID0gY2dfcmVhZF9rZXlfczY0KG1lbWNnLCAmIzM0O21lbW9yeS5ldmVudHMmIzM0OywgJiMzNDttYXggJiMzNDspOwogCWlmIChtYXggJmx0Oz0gMCkKIAkJZ290byBjbGVhbnVwOwogCkBAIC0xMjQ4LDEwICYjNDM7MTI1MiwxMCBAQCBzdGF0aWMgaW50IHRlc3RfbWVtY2dfb29tX2V2ZW50cyhjb25zdCBjaGFyICpyb290KQogCWlmIChjZ19yZWFkX3N0cmNtcChtZW1jZywgJiMzNDtjZ3JvdXAucHJvY3MmIzM0OywgJiMzNDsmIzM0OykpCiAJCWdvdG8gY2xlYW51cDsKIAotCWlmIChjZ19yZWFkX2tleV9sb25nKG1lbWNnLCAmIzM0O21lbW9yeS5ldmVudHMmIzM0OywgJiMzNDtvb20gJiMzNDspICE9IDEpCiYjNDM7CWlmIChjZ19yZWFkX2tleV9zNjQobWVtY2csICYjMzQ7bWVtb3J5LmV2ZW50cyYjMzQ7LCAmIzM0O29vbSAmIzM0OykgIT0gMSkKIAkJZ290byBjbGVhbnVwOwogCi0JaWYgKGNnX3JlYWRfa2V5X2xvbmcobWVtY2csICYjMzQ7bWVtb3J5LmV2ZW50cyYjMzQ7LCAmIzM0O29vbV9raWxsICYjMzQ7KSAhPSAxKQomIzQzOwlpZiAoY2dfcmVhZF9rZXlfczY0KG1lbWNnLCAmIzM0O21lbW9yeS5ldmVudHMmIzM0OywgJiMzNDtvb21fa2lsbCAmIzM0OykgIT0gMSkKIAkJZ290byBjbGVhbnVwOwogCiAJcmV0ID0gS1NGVF9QQVNTOwpAQCAtMTM1NCwxMyAmIzQzOzEzNTgsMTQgQEAgc3RhdGljIGludCB0Y3BfY2xpZW50KGNvbnN0IGNoYXIgKmNncm91cCwgdW5zaWduZWQgc2hvcnQgcG9ydCkKIAlyZXQgPSBLU0ZUX0ZBSUw7CiAJd2hpbGUgKHJldHJpZXMtLSkgewogCQl1aW50OF90IGJ1ZlsweDEwMDAwMF07Ci0JCWxvbmcgY3VycmVudCwgc29jazsKJiM0MzsJCWxvbmcgY3VycmVudDsKJiM0MzsJCXM2NCBzb2NrOwogCiAJCWlmIChyZWFkKHNrLCBidWYsIHNpemVvZihidWYpKSAmbHQ7PSAwKQogCQkJZ290byBjbG9zZV9zazsKIAogCQljdXJyZW50ID0gY2dfcmVhZF9sb25nKGNncm91cCwgJiMzNDttZW1vcnkuY3VycmVudCYjMzQ7KTsKLQkJc29jayA9IGNnX3JlYWRfa2V5X2xvbmcoY2dyb3VwLCAmIzM0O21lbW9yeS5zdGF0JiMzNDssICYjMzQ7c29jayAmIzM0Oyk7CiYjNDM7CQlzb2NrID0gY2dfcmVhZF9rZXlfczY0KGNncm91cCwgJiMzNDttZW1vcnkuc3RhdCYjMzQ7LCAmIzM0O3NvY2sgJiMzNDspOwogCiAJCWlmIChjdXJyZW50ICZsdDsgMCB8fCBzb2NrICZsdDsgMCkKIAkJCWdvdG8gY2xvc2Vfc2s7CkBAIC0xMzkyLDcgJiM0MzsxMzk3LDcgQEAgc3RhdGljIGludCB0ZXN0X21lbWNnX3NvY2soY29uc3QgY2hhciAqcm9vdCkKIAlpbnQgYmluZF9yZXRyaWVzID0gNSwgcmV0ID0gS1NGVF9GQUlMLCBwaWQsIGVycjsKIAl1bnNpZ25lZCBzaG9ydCBwb3J0OwogCWNoYXIgKm1lbWNnOwotCWxvbmcgc29ja19wb3N0ID0gLTE7CiYjNDM7CXM2NCBzb2NrX3Bvc3QgPSAtMTsKIAogCW1lbWNnID0gY2dfbmFtZShyb290LCAmIzM0O21lbWNnX3Rlc3QmIzM0Oyk7CiAJaWYgKCFtZW1jZykKQEAgLTE0NTksNyAmIzQzOzE0NjQsNyBAQCBzdGF0aWMgaW50IHRlc3RfbWVtY2dfc29jayhjb25zdCBjaGFyICpyb290KQogCSAqIHNjaGVkdWxpbmcgc2xhY2spIGFuZCByZXF1aXJlIHRoYXQgdGhlICYjMzQ7c29jayAmIzM0OyBjb3VudGVyCiAJICogZXZlbnR1YWxseSBkcm9wcyB0byB6ZXJvLgogCSAqLwotCXNvY2tfcG9zdCA9IGNnX3JlYWRfa2V5X2xvbmdfcG9sbChtZW1jZywgJiMzNDttZW1vcnkuc3RhdCYjMzQ7LCAmIzM0O3NvY2sgJiMzNDssIDAsCiYjNDM7CXNvY2tfcG9zdCA9IGNnX3JlYWRfa2V5X3M2NF9wb2xsKG1lbWNnLCAmIzM0O21lbW9yeS5zdGF0JiMzNDssICYjMzQ7c29jayAmIzM0OywgMCwKIAkJCQkJIE1FTUNHX1NPQ0tTVEFUX1dBSVRfUkVUUklFUywKIAkJCQkJIERFRkFVTFRfV0FJVF9JTlRFUlZBTF9VUyk7CiAJaWYgKHNvY2tfcG9zdCkKQEAgLTE0ODQsNyAmIzQzOzE0ODksNyBAQCBzdGF0aWMgaW50IHRlc3RfbWVtY2dfb29tX2dyb3VwX2xlYWZfZXZlbnRzKGNvbnN0IGNoYXIgKnJvb3QpCiB7CiAJaW50IHJldCA9IEtTRlRfRkFJTDsKIAljaGFyICpwYXJlbnQsICpjaGlsZDsKLQlsb25nIHBhcmVudF9vb21fZXZlbnRzOwomIzQzOwlzNjQgcGFyZW50X29vbV9ldmVudHM7CiAKIAlwYXJlbnQgPSBjZ19uYW1lKHJvb3QsICYjMzQ7bWVtY2dfdGVzdF8wJiMzNDspOwogCWNoaWxkID0gY2dfbmFtZShyb290LCAmIzM0O21lbWNnX3Rlc3RfMC9tZW1jZ190ZXN0XzEmIzM0Oyk7CkBAIC0xNTE5LDExICYjNDM7MTUyNCwxMSBAQCBzdGF0aWMgaW50IHRlc3RfbWVtY2dfb29tX2dyb3VwX2xlYWZfZXZlbnRzKGNvbnN0IGNoYXIgKnJvb3QpCiAJaWYgKGNnX3Rlc3RfcHJvY19raWxsZWQoY2hpbGQpKQogCQlnb3RvIGNsZWFudXA7CiAKLQlpZiAoY2dfcmVhZF9rZXlfbG9uZyhjaGlsZCwgJiMzNDttZW1vcnkuZXZlbnRzJiMzNDssICYjMzQ7b29tX2tpbGwgJiMzNDspICZsdDs9IDApCiYjNDM7CWlmIChjZ19yZWFkX2tleV9zNjQoY2hpbGQsICYjMzQ7bWVtb3J5LmV2ZW50cyYjMzQ7LCAmIzM0O29vbV9raWxsICYjMzQ7KSAmbHQ7PSAwKQogCQlnb3RvIGNsZWFudXA7CiAKLQlwYXJlbnRfb29tX2V2ZW50cyA9IGNnX3JlYWRfa2V5X2xvbmcoCi0JCQlwYXJlbnQsICYjMzQ7bWVtb3J5LmV2ZW50cyYjMzQ7LCAmIzM0O29vbV9raWxsICYjMzQ7KTsKJiM0MzsJcGFyZW50X29vbV9ldmVudHMgPQomIzQzOwkJY2dfcmVhZF9rZXlfczY0KHBhcmVudCwgJiMzNDttZW1vcnkuZXZlbnRzJiMzNDssICYjMzQ7b29tX2tpbGwgJiMzNDspOwogCS8qCiAJICogSWYgbWVtb3J5X2xvY2FsZXZlbnRzIGlzIG5vdCBlbmFibGVkICh0aGUgZGVmYXVsdCksIHRoZSBwYXJlbnQgc2hvdWxkCiAJICogY291bnQgT09NIGV2ZW50cyBpbiBpdHMgY2hpbGRyZW4gZ3JvdXBzLiBPdGhlcndpc2UsIGl0IHNob3VsZCBub3QKQEAgLTE2MzksNyAmIzQzOzE2NDQsNyBAQCBzdGF0aWMgaW50IHRlc3RfbWVtY2dfb29tX2dyb3VwX3Njb3JlX2V2ZW50cyhjb25zdCBjaGFyICpyb290KQogCWlmICghY2dfcnVuKG1lbWNnLCBhbGxvY19hbm9uLCAodm9pZCAqKU1CKDEwMCkpKQogCQlnb3RvIGNsZWFudXA7CiAKLQlpZiAoY2dfcmVhZF9rZXlfbG9uZyhtZW1jZywgJiMzNDttZW1vcnkuZXZlbnRzJiMzNDssICYjMzQ7b29tX2tpbGwgJiMzNDspICE9IDMpCiYjNDM7CWlmIChjZ19yZWFkX2tleV9zNjQobWVtY2csICYjMzQ7bWVtb3J5LmV2ZW50cyYjMzQ7LCAmIzM0O29vbV9raWxsICYjMzQ7KSAhPSAzKQogCQlnb3RvIGNsZWFudXA7CiAKIAlpZiAoa2lsbChzYWZlX3BpZCwgU0lHS0lMTCkpCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9jZ3JvdXAvdGVzdF9waWRzLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9jZ3JvdXAvdGVzdF9waWRzLmMKaW5kZXggNzEwMTA5YjUzZGZlOS4uZjRkNWJjOWY1ZjI0ZiAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvY2dyb3VwL3Rlc3RfcGlkcy5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2Nncm91cC90ZXN0X3BpZHMuYwpAQCAtMTExLDEyICYjNDM7MTExLDExIEBAIHN0YXRpYyBpbnQgdGVzdF9waWRzX2V2ZW50cyhjb25zdCBjaGFyICpyb290KQogCWlmIChraWxsKHBpZCwgU0lHSU5UKSkKIAkJZ290byBjbGVhbnVwOwogCi0JaWYgKGNnX3JlYWRfa2V5X2xvbmcoY2dfY2hpbGQsICYjMzQ7cGlkcy5ldmVudHMmIzM0OywgJiMzNDttYXggJiMzNDspICE9IDApCiYjNDM7CWlmIChjZ19yZWFkX2tleV9zNjQoY2dfY2hpbGQsICYjMzQ7cGlkcy5ldmVudHMmIzM0OywgJiMzNDttYXggJiMzNDspICE9IDApCiAJCWdvdG8gY2xlYW51cDsKLQlpZiAoY2dfcmVhZF9rZXlfbG9uZyhjZ19wYXJlbnQsICYjMzQ7cGlkcy5ldmVudHMmIzM0OywgJiMzNDttYXggJiMzNDspICE9IDEpCiYjNDM7CWlmIChjZ19yZWFkX2tleV9zNjQoY2dfcGFyZW50LCAmIzM0O3BpZHMuZXZlbnRzJiMzNDssICYjMzQ7bWF4ICYjMzQ7KSAhPSAxKQogCQlnb3RvIGNsZWFudXA7CiAKLQogCXJldCA9IEtTRlRfUEFTUzsKIAogY2xlYW51cDoKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2Nncm91cC90ZXN0X3pzd2FwLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9jZ3JvdXAvdGVzdF96c3dhcC5jCmluZGV4IDYwOWM0OGYzODUyNDEuLjZlN2VlMTFiYzk3YTUgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2Nncm91cC90ZXN0X3pzd2FwLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvY2dyb3VwL3Rlc3RfenN3YXAuYwpAQCAtNTksMTQgJiM0Mzs1OSwxNCBAQCBzdGF0aWMgaW50IGdldF96c3dhcF9zdG9yZWRfcGFnZXMoc2l6ZV90ICp2YWx1ZSkKIAlyZXR1cm4gcmVhZF9pbnQoUEFUSF9aU1dBUF9TVE9SRURfUEFHRVMsIHZhbHVlKTsKIH0KIAotc3RhdGljIGxvbmcgZ2V0X2NnX3diX2NvdW50KGNvbnN0IGNoYXIgKmNnKQomIzQzO3N0YXRpYyBzNjQgZ2V0X2NnX3diX2NvdW50KGNvbnN0IGNoYXIgKmNnKQogewotCXJldHVybiBjZ19yZWFkX2tleV9sb25nKGNnLCAmIzM0O21lbW9yeS5zdGF0JiMzNDssICYjMzQ7enN3cHdiJiMzNDspOwomIzQzOwlyZXR1cm4gY2dfcmVhZF9rZXlfczY0KGNnLCAmIzM0O21lbW9yeS5zdGF0JiMzNDssICYjMzQ7enN3cHdiJiMzNDspOwogfQogCi1zdGF0aWMgbG9uZyBnZXRfenN3cG91dChjb25zdCBjaGFyICpjZ3JvdXApCiYjNDM7c3RhdGljIHM2NCBnZXRfenN3cG91dChjb25zdCBjaGFyICpjZ3JvdXApCiB7Ci0JcmV0dXJuIGNnX3JlYWRfa2V5X2xvbmcoY2dyb3VwLCAmIzM0O21lbW9yeS5zdGF0JiMzNDssICYjMzQ7enN3cG91dCAmIzM0Oyk7CiYjNDM7CXJldHVybiBjZ19yZWFkX2tleV9zNjQoY2dyb3VwLCAmIzM0O21lbW9yeS5zdGF0JiMzNDssICYjMzQ7enN3cG91dCAmIzM0Oyk7CiB9CiAKIHN0YXRpYyBpbnQgYWxsb2NhdGVfYW5kX3JlYWRfYnl0ZXMoY29uc3QgY2hhciAqY2dyb3VwLCB2b2lkICphcmcpCkBAIC0xMjUsOSAmIzQzOzEyNSwxMCBAQCBzdGF0aWMgY2hhciAqc2V0dXBfdGVzdF9ncm91cF8xTShjb25zdCBjaGFyICpyb290LCBjb25zdCBjaGFyICpuYW1lKQogICogV3JpdGViYWNrIGlzIGFzeW5jaHJvbm91czsgcG9sbCB1bnRpbCBhdCBsZWFzdCBvbmUgd3JpdGViYWNrIGhhcwogICogYmVlbiByZWNvcmRlZCBmb3IgQGNnLCBvciB1bnRpbCBAdGltZW91dF9tcyBoYXMgZWxhcHNlZC4KICAqLwotc3RhdGljIGxvbmcgd2FpdF9mb3Jfd3JpdGViYWNrKGNvbnN0IGNoYXIgKmNnLCBpbnQgdGltZW91dF9tcykKJiM0MztzdGF0aWMgczY0IHdhaXRfZm9yX3dyaXRlYmFjayhjb25zdCBjaGFyICpjZywgaW50IHRpbWVvdXRfbXMpCiB7Ci0JbG9uZyBlbGFwc2VkLCBjb3VudDsKJiM0MzsJbG9uZyBlbGFwc2VkOwomIzQzOwlzNjQgY291bnQ7CiAJZm9yIChlbGFwc2VkID0gMDsgZWxhcHNlZCAmbHQ7IHRpbWVvdXRfbXM7IGVsYXBzZWQgJiM0Mzs9IDEwMCkgewogCQljb3VudCA9IGdldF9jZ193Yl9jb3VudChjZyk7CiAKQEAgLTE0Nyw3ICYjNDM7MTQ4LDcgQEAgc3RhdGljIGxvbmcgd2FpdF9mb3Jfd3JpdGViYWNrKGNvbnN0IGNoYXIgKmNnLCBpbnQgdGltZW91dF9tcykKICAqLwogc3RhdGljIGludCB0ZXN0X3pzd2FwX3VzYWdlKGNvbnN0IGNoYXIgKnJvb3QpCiB7Ci0JbG9uZyB6c3dwb3V0X2JlZm9yZSwgenN3cG91dF9hZnRlcjsKJiM0MzsJczY0IHpzd3BvdXRfYmVmb3JlLCB6c3dwb3V0X2FmdGVyOwogCWludCByZXQgPSBLU0ZUX0ZBSUw7CiAJY2hhciAqdGVzdF9ncm91cDsKIApAQCAtMTkxLDcgJiM0MzsxOTIsOCBAQCBzdGF0aWMgaW50IHRlc3Rfc3dhcGluX25venN3YXAoY29uc3QgY2hhciAqcm9vdCkKIHsKIAlpbnQgcmV0ID0gS1NGVF9GQUlMOwogCWNoYXIgKnRlc3RfZ3JvdXAsIG1lbV9tYXhfYnVmWzMyXTsKLQlsb25nIHN3YXBfcGVhaywgenN3cG91dCwgbWluX3N3YXA7CiYjNDM7CWxvbmcgc3dhcF9wZWFrLCBtaW5fc3dhcDsKJiM0MzsJczY0IHpzd3BvdXQ7CiAJc2l6ZV90IGFsbG9jYXRpb25fc2l6ZSA9IHBhZ2Vfc2l6ZSAqIDUxMjsKIAogCW1pbl9zd2FwID0gYWxsb2NhdGlvbl9zaXplIC8gNDsKQEAgLTI0OCw3ICYjNDM7MjUwLDcgQEAgc3RhdGljIGludCB0ZXN0X3pzd2FwaW4oY29uc3QgY2hhciAqcm9vdCkKIHsKIAlpbnQgcmV0ID0gS1NGVF9GQUlMOwogCWNoYXIgKnRlc3RfZ3JvdXA7Ci0JbG9uZyB6c3dwaW47CiYjNDM7CXM2NCB6c3dwaW47CiAKIAl0ZXN0X2dyb3VwID0gY2dfbmFtZShyb290LCAmIzM0O3pzd2FwaW5fdGVzdCYjMzQ7KTsKIAlpZiAoIXRlc3RfZ3JvdXApCkBAIC0yNjQsNyAmIzQzOzI2Niw3IEBAIHN0YXRpYyBpbnQgdGVzdF96c3dhcGluKGNvbnN0IGNoYXIgKnJvb3QpCiAJaWYgKGNnX3J1bih0ZXN0X2dyb3VwLCBhbGxvY2F0ZV9hbmRfcmVhZF9ieXRlcywgKHZvaWQgKilNQigzMikpKQogCQlnb3RvIG91dDsKIAotCXpzd3BpbiA9IGNnX3JlYWRfa2V5X2xvbmcodGVzdF9ncm91cCwgJiMzNDttZW1vcnkuc3RhdCYjMzQ7LCAmIzM0O3pzd3BpbiAmIzM0Oyk7CiYjNDM7CXpzd3BpbiA9IGNnX3JlYWRfa2V5X3M2NCh0ZXN0X2dyb3VwLCAmIzM0O21lbW9yeS5zdGF0JiMzNDssICYjMzQ7enN3cGluICYjMzQ7KTsKIAlpZiAoenN3cGluICZsdDsgMCkgewogCQlrc2Z0X3ByaW50X21zZygmIzM0O2ZhaWxlZCB0byBnZXQgenN3cGluXG4mIzM0Oyk7CiAJCWdvdG8gb3V0OwpAQCAtMzU1LDExICYjNDM7MzU3LDExIEBAIHN0YXRpYyBpbnQgYXR0ZW1wdF93cml0ZWJhY2soY29uc3QgY2hhciAqY2dyb3VwLCB2b2lkICphcmcpCiAKIHN0YXRpYyBpbnQgdGVzdF96c3dhcF93cml0ZWJhY2tfb25lKGNvbnN0IGNoYXIgKmNncm91cCwgYm9vbCB3YikKIHsKLQlsb25nIHpzd3B3Yl9iZWZvcmUsIHpzd3B3Yl9hZnRlcjsKJiM0MzsJczY0IHpzd3B3Yl9iZWZvcmUsIHpzd3B3Yl9hZnRlcjsKIAogCXpzd3B3Yl9iZWZvcmUgPSBnZXRfY2dfd2JfY291bnQoY2dyb3VwKTsKIAlpZiAoenN3cHdiX2JlZm9yZSAhPSAwKSB7Ci0JCWtzZnRfcHJpbnRfbXNnKCYjMzQ7enN3cHdiX2JlZm9yZSA9ICVsZCBpbnN0ZWFkIG9mIDBcbiYjMzQ7LCB6c3dwd2JfYmVmb3JlKTsKJiM0MzsJCWtzZnRfcHJpbnRfbXNnKCYjMzQ7enN3cHdiX2JlZm9yZSA9ICVsbGQgaW5zdGVhZCBvZiAwXG4mIzM0OywgenN3cHdiX2JlZm9yZSk7CiAJCXJldHVybiAtMTsKIAl9CiAKQEAgLTM3NSw3ICYjNDM7Mzc3LDcgQEAgc3RhdGljIGludCB0ZXN0X3pzd2FwX3dyaXRlYmFja19vbmUoY29uc3QgY2hhciAqY2dyb3VwLCBib29sIHdiKQogCQlyZXR1cm4gLTE7CiAKIAlpZiAod2IgIT0gISF6c3dwd2JfYWZ0ZXIpIHsKLQkJa3NmdF9wcmludF9tc2coJiMzNDt6c3dwd2JfYWZ0ZXIgaXMgJWxkIHdoaWxlIHdiIGlzICVzXG4mIzM0OywKJiM0MzsJCWtzZnRfcHJpbnRfbXNnKCYjMzQ7enN3cHdiX2FmdGVyIGlzICVsbGQgd2hpbGUgd2IgaXMgJXNcbiYjMzQ7LAogCQkJCXpzd3B3Yl9hZnRlciwgd2IgPyAmIzM0O2VuYWJsZWQmIzM0OyA6ICYjMzQ7ZGlzYWJsZWQmIzM0Oyk7CiAJCXJldHVybiAtMTsKIAl9CkBAIC00MDgsNiAmIzQzOzQxMCw4IEBAIHN0YXRpYyBpbnQgdGVzdF96c3dhcF93cml0ZWJhY2soY29uc3QgY2hhciAqcm9vdCwgYm9vbCB3YikKIAkgKiBUaHVzLCB0aGUgcGFyZW50JiMzOTtzIHNldHRpbmcgc2hhbGwgYmUgd2hhdCYjMzk7cyBpbiBlZmZlY3QuICovCiAJaWYgKGNnX3dyaXRlKHRlc3RfZ3JvdXAsICYjMzQ7bWVtb3J5Lnpzd2FwLm1heCYjMzQ7LCAmIzM0O21heCYjMzQ7KSkKIAkJZ290byBvdXQ7CiYjNDM7CWlmIChjZ19yZWFkX3N0cmNtcF93YWl0KHRlc3RfZ3JvdXAsICYjMzQ7Y2dyb3VwLmV2ZW50cyYjMzQ7LCAmIzM0O3BvcHVsYXRlZCAwXG4mIzM0OykpCiYjNDM7CQlnb3RvIG91dDsKIAlpZiAoY2dfd3JpdGUodGVzdF9ncm91cCwgJiMzNDtjZ3JvdXAuc3VidHJlZV9jb250cm9sJiMzNDssICYjMzQ7JiM0MzttZW1vcnkmIzM0OykpCiAJCWdvdG8gb3V0OwogCkBAIC00ODUsNyAmIzQzOzQ4OSw3IEBAIHN0YXRpYyBpbnQgdGVzdF9ub19pbnZhc2l2ZV9jZ3JvdXBfc2hyaW5rKGNvbnN0IGNoYXIgKnJvb3QpCiAJCW1lbXNldCgmYW1wO3p3X2FsbG9jYXRpb25bb2ZmXSwgMCwgcGFnZV9zaXplKTsKIAkJbWVtc2V0KCZhbXA7endfYWxsb2NhdGlvbltvZmZdLCAmIzM5O2EmIzM5OywgcGFnZV9zaXplLzQpOwogCX0KLQlpZiAoY2dfcmVhZF9rZXlfbG9uZyh6d19ncm91cCwgJiMzNDttZW1vcnkuc3RhdCYjMzQ7LCAmIzM0O3pzd2FwcGVkJiMzNDspICZsdDsgMSkKJiM0MzsJaWYgKGNnX3JlYWRfa2V5X3M2NCh6d19ncm91cCwgJiMzNDttZW1vcnkuc3RhdCYjMzQ7LCAmIzM0O3pzd2FwcGVkJiMzNDspICZsdDsgMSkKIAkJZ290byBvdXQ7CiAKIAkvKiBQdXNoIHdiX2dyb3VwIG1lbW9yeSBpbnRvIHpzd2FwIHdpdGggaGFyZC10by1jb21wcmVzcyBkYXRhIHRvIHRyaWdnZXIgd2IgKi8KQEAgLTYyOCwxMSAmIzQzOzYzMiwxMiBAQCBzdGF0aWMgaW50IHRlc3Rfbm9fa21lbV9ieXBhc3MoY29uc3QgY2hhciAqcm9vdCkKIAkJCWJyZWFrOwogCQkvKiBJZiBtZW1vcnkgd2FzIHB1c2hlZCB0byB6c3dhcCwgdmVyaWZ5IGl0IGJlbG9uZ3MgdG8gbWVtY2cgKi8KIAkJaWYgKHN0b3JlZF9wYWdlcyAmZ3Q7IHN0b3JlZF9wYWdlc190aHJlc2hvbGQpIHsKLQkJCWludCB6c3dhcHBlZCA9IGNnX3JlYWRfa2V5X2xvbmcodGVzdF9ncm91cCwgJiMzNDttZW1vcnkuc3RhdCYjMzQ7LCAmIzM0O3pzd2FwcGVkICYjMzQ7KTsKLQkJCWludCBkZWx0YSA9IHN0b3JlZF9wYWdlcyAqIHBhZ2Vfc2l6ZSAtIHpzd2FwcGVkOwotCQkJaW50IHJlc3VsdF9vayA9IGRlbHRhICZsdDsgc3RvcmVkX3BhZ2VzICogcGFnZV9zaXplIC8gNDsKJiM0MzsJCQlzNjQgenN3YXBwZWQgPSBjZ19yZWFkX2tleV9zNjQoCiYjNDM7CQkJCXRlc3RfZ3JvdXAsICYjMzQ7bWVtb3J5LnN0YXQmIzM0OywgJiMzNDt6c3dhcHBlZCAmIzM0Oyk7CiYjNDM7CQkJczY0IGRlbHRhID0gKHM2NClzdG9yZWRfcGFnZXMgKiBwYWdlX3NpemUgLSB6c3dhcHBlZDsKJiM0MzsJCQlzNjQgbWF4X2RlbHRhID0gKHM2NClzdG9yZWRfcGFnZXMgKiBwYWdlX3NpemUgLyA0OwogCi0JCQlyZXQgPSByZXN1bHRfb2sgPyBLU0ZUX1BBU1MgOiBLU0ZUX0ZBSUw7CiYjNDM7CQkJcmV0ID0gKGRlbHRhICZsdDsgbWF4X2RlbHRhKSA/IEtTRlRfUEFTUyA6IEtTRlRfRkFJTDsKIAkJCWJyZWFrOwogCQl9CiAJfQpAQCAtNzAxLDkgJiM0Mzs3MDYsOSBAQCBzdGF0aWMgaW50IGFsbG9jYXRlX3JhbmRvbV9hbmRfd2FpdChjb25zdCBjaGFyICpjZ3JvdXAsIHZvaWQgKmFyZykKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGxvbmcgZ2V0X3pzd2FwX2luY29tcChjb25zdCBjaGFyICpjZ3JvdXApCiYjNDM7c3RhdGljIHM2NCBnZXRfenN3YXBfaW5jb21wKGNvbnN0IGNoYXIgKmNncm91cCkKIHsKLQlyZXR1cm4gY2dfcmVhZF9rZXlfbG9uZyhjZ3JvdXAsICYjMzQ7bWVtb3J5LnN0YXQmIzM0OywgJiMzNDt6c3dhcF9pbmNvbXAgJiMzNDspOwomIzQzOwlyZXR1cm4gY2dfcmVhZF9rZXlfczY0KGNncm91cCwgJiMzNDttZW1vcnkuc3RhdCYjMzQ7LCAmIzM0O3pzd2FwX2luY29tcCAmIzM0Oyk7CiB9CiAKIC8qCkBAIC03MTksNyAmIzQzOzcyNCw3IEBAIHN0YXRpYyBpbnQgdGVzdF96c3dhcF9pbmNvbXByZXNzaWJsZShjb25zdCBjaGFyICpyb290KQogCWludCByZXQgPSBLU0ZUX0ZBSUw7CiAJc3RydWN0IGluY29tcF9jaGlsZF9hcmdzICp2YWx1ZXM7CiAJY2hhciAqdGVzdF9ncm91cDsKLQlsb25nIHpzd2FwX2luY29tcDsKJiM0MzsJczY0IHpzd2FwX2luY29tcDsKIAlwaWRfdCBjaGlsZF9waWQ7CiAJaW50IGNoaWxkX3N0YXR1czsKIAljaGFyIGJ1ZjsKQEAgLTc1NSwxMyAmIzQzOzc2MCwxNSBAQCBzdGF0aWMgaW50IHRlc3RfenN3YXBfaW5jb21wcmVzc2libGUoY29uc3QgY2hhciAqcm9vdCkKIAogCXpzd2FwX2luY29tcCA9IGdldF96c3dhcF9pbmNvbXAodGVzdF9ncm91cCk7CiAJaWYgKHpzd2FwX2luY29tcCAmbHQ7PSAwKSB7Ci0JCWxvbmcgenN3cG91dCA9IGdldF96c3dwb3V0KHRlc3RfZ3JvdXApOwotCQlsb25nIHpzd2FwcGVkID0gY2dfcmVhZF9rZXlfbG9uZyh0ZXN0X2dyb3VwLCAmIzM0O21lbW9yeS5zdGF0JiMzNDssICYjMzQ7enN3YXBwZWQgJiMzNDspOwotCQlsb25nIHpzd2FwX2IgPSBjZ19yZWFkX2tleV9sb25nKHRlc3RfZ3JvdXAsICYjMzQ7bWVtb3J5LnN0YXQmIzM0OywgJiMzNDt6c3dhcCAmIzM0Oyk7Ci0KLQkJa3NmdF9wcmludF9tc2coJiMzNDt6c3dhcF9pbmNvbXAgbm90IGluY3JlYXNlZDogJWxkXG4mIzM0OywgenN3YXBfaW5jb21wKTsKLQkJa3NmdF9wcmludF9tc2coJiMzNDtkZWJ1ZzogenN3cG91dD0lbGQgenN3YXBwZWQ9JWxkIHpzd2FwX2I9JWxkXG4mIzM0OywKLQkJCSAgICAgICB6c3dwb3V0LCB6c3dhcHBlZCwgenN3YXBfYik7CiYjNDM7CQlzNjQgenN3cG91dCA9IGdldF96c3dwb3V0KHRlc3RfZ3JvdXApOwomIzQzOwkJczY0IHpzd2FwcGVkID0KJiM0MzsJCQljZ19yZWFkX2tleV9zNjQodGVzdF9ncm91cCwgJiMzNDttZW1vcnkuc3RhdCYjMzQ7LCAmIzM0O3pzd2FwcGVkICYjMzQ7KTsKJiM0MzsJCXM2NCB6c3dhcF9iID0KJiM0MzsJCQljZ19yZWFkX2tleV9zNjQodGVzdF9ncm91cCwgJiMzNDttZW1vcnkuc3RhdCYjMzQ7LCAmIzM0O3pzd2FwICYjMzQ7KTsKJiM0MzsKJiM0MzsJCWtzZnRfcHJpbnRfbXNnKCYjMzQ7enN3YXBfaW5jb21wIG5vdCBpbmNyZWFzZWQ6ICVsbGRcbiYjMzQ7LCB6c3dhcF9pbmNvbXApOwomIzQzOwkJa3NmdF9wcmludF9tc2coJiMzNDtkZWJ1ZzogenN3cG91dD0lbGxkIHpzd2FwcGVkPSVsbGQgenN3YXBfYj0lbGxkXG4mIzM0OywKJiM0MzsJCQkJenN3cG91dCwgenN3YXBwZWQsIHpzd2FwX2IpOwogCQlrc2Z0X3ByaW50X21zZygmIzM0O2RlYnVnOiBtYWR2aXNlIHJldD0lZCBlcnJubz0lZFxuJiMzNDssCiAJCQkgICAgICAgdmFsdWVzLSZndDttYWR2aXNlX3JldCwgdmFsdWVzLSZndDttYWR2aXNlX2Vycm5vKTsKIAkJZ290byBvdXRfa2lsbDsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMDg6NTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTYzMDQKCQkJCQkJCW91dHB1dDogNzMKCQkJCQkJCXRob3VnaHRzOiA0NjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyBFdmFsdWF0aW9uOiBDZ3JvdXAgU2VsZnRlc3RzIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBhc3Nlc3MgdGhpcyBwYXRjaCBzZXJpZXMgZm9yIHN5emthbGxlciBmdXp6aW5nIHBvdGVudGlhbC4gRmlyc3QsIEkgbmVlZCB0byBzZWUgdGhlIHNjb3BlIG9mIHRoZSBtb2RpZmljYXRpb25zLiBMb29raW5nIGF0IHRoZSBkaWZmLCBpdCBhcHBlYXJzIHRoZSBjaGFuZ2VzIGFyZSBsaW1pdGVkIHRvIHRoZXNlIGZpbGVzOgoKKiAgIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9jZ3JvdXAvbGliL2Nncm91cF91dGlsLmNgCiogICBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvY2dyb3VwL2xpYi9pbmNsdWRlL2Nncm91cF91dGlsLmhgCiogICBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvY2dyb3VwL3Rlc3RfY3B1LmNgCiogICBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvY2dyb3VwL3Rlc3RfZnJlZXplci5jYAoqICAgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2Nncm91cC90ZXN0X2ttZW0uY2AKKiAgIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9jZ3JvdXAvdGVzdF9tZW1jb250cm9sLmNgCiogICBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvY2dyb3VwL3Rlc3RfcGlkcy5jYAoqICAgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2Nncm91cC90ZXN0X3pzd2FwLmNgCgpBbGwgb2YgdGhlc2UgYXJlIGNvbnRhaW5lZCB3aXRoaW4gdGhlIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9jZ3JvdXAvYCBkaXJlY3RvcnksIHdoaWNoIGltbWVkaWF0ZWx5IHJhaXNlcyBhIGZsYWcuIE5vdywgbGV0JiMzOTtzIGFwcGx5IHRoZSBndWlkZWxpbmVzLiBTcGVjaWZpY2FsbHksIHRoZSAmIzM0O05FR0FUSVZFIENSSVRFUklBJiMzNDsgc2VjdGlvbiBkaWN0YXRlcyB3aGVuIHdlICpzaG91bGRuJiMzOTt0KiBmdXp6LiBBbmQgdGhlIHJ1bGUgaXMgcHJldHR5IGNsZWFyOiBjaGFuZ2VzIHRvIHVzZXItc3BhY2Ugc2VsZi10ZXN0cyBhcmUgYSBuby1nbywgYXMgbG9uZyBhcyB0aGV5IGRvbiYjMzk7dCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAoYHZtbGludXhgKSBvciBrZXJuZWwgbW9kdWxlcy4KCkdpdmVuIHRoYXQgdGhlc2UgbW9kaWZpY2F0aW9ucyBhcmUgc3RyaWN0bHkgd2l0aGluIHRoZSBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvY2dyb3VwL2AgZGlyZWN0b3J5LCB3aGljaCBJIGtub3cgaXMgZGVkaWNhdGVkIHRvIHVzZXItc3BhY2Ugc2VsZi10ZXN0cyBhbmQgYXJlIG5vdCByZWxhdGVkIHRvIGtlcm5lbCBjb2RlLCBpdCYjMzk7cyBjbGVhciB0aGVzZSBtb2RpZmljYXRpb25zIGRvbiYjMzk7dCBmYWxsIGludG8gdGhlIGNhdGVnb3JpZXMgdGhhdCB3YXJyYW50IGZ1enppbmcgd2l0aCBzeXprYWxsZXIuCgpUaGVyZWZvcmU6CgoqICAgYFdvcnRoRnV6emluZyA9IGZhbHNlYAoqICAgYEZvY3VzU3ltYm9scyA9IFtdYCAobm8gc3BlY2lmaWMgc3ltYm9scyBuZWVkIHRvIGJlIHRyYWNrZWQpCiogICBgRW5hYmxlQ29uZmlncyA9IFtdYCAobm8gc3BlY2lmaWMgY29uZmlndXJhdGlvbnMgYXJlIG5lZWRlZCkKKiAgIGBSZWFzb25pbmcgPSAmIzM0O1RoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIHVzZXItc3BhY2UgY2dyb3VwIHNlbGZ0ZXN0cyB1bmRlciB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9jZ3JvdXAvIGFuZCBkb2VzIG5vdCBhZmZlY3QgdGhlIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuJiMzNDtgCgpJJiMzOTttIGNvbmZpZGVudCBpbiB0aGlzIGV2YWx1YXRpb24uIExldCYjMzk7cyBjYWxsIGBzZXQtcmVzdWx0c2AgdG8gcmVjb3JkIHRoaXMgZGVjaXNpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMDg6NTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBvbmx5IHVzZXItc3BhY2UgY2dyb3VwIHNlbGYtdGVzdHMgdW5kZXIgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvY2dyb3VwLyBhbmQgZG9lcyBub3QgdG91Y2ggYW55IGtlcm5lbCBjb2RlIG9yIGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIG9ubHkgdXNlci1zcGFjZSBjZ3JvdXAgc2VsZi10ZXN0cyB1bmRlciB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9jZ3JvdXAvIGFuZCBkb2VzIG5vdCB0b3VjaCBhbnkga2VybmVsIGNvZGUgb3IgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwODo1MTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMDZUMDg6NTE6MTYuNDIyNDE3NzYxWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTMwMzU5MTQ5MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIG9ubHkgdXNlci1zcGFjZSBjZ3JvdXAgc2VsZi10ZXN0cyB1bmRlciB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9jZ3JvdXAvIGFuZCBkb2VzIG5vdCB0b3VjaCBhbnkga2VybmVsIGNvZGUgb3IgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMDg6NTE6MTYuNDIyNDI2NDIxWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NjcwOTU4MTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCAxMWE5ZjA5ZjU2MGIwMjY5NTQwMWRkMmM2Y2MzZjE5OTdmNzhhNjQyXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBTdW4gU2VwIDYgMDg6NTE6MTUgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvY2dyb3VwL2xpYi9jZ3JvdXBfdXRpbC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvY2dyb3VwL2xpYi9jZ3JvdXBfdXRpbC5jXFxuaW5kZXggMjU5NmMxMmNkODY0NS4uZWQzYzQ4OTM4MzNhNSAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9jZ3JvdXAvbGliL2Nncm91cF91dGlsLmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9jZ3JvdXAvbGliL2Nncm91cF91dGlsLmNcXG5AQCAtMTcyLDcgKzE3Miw3IEBAIGxvbmcgY2dfcmVhZF9sb25nX2ZkKGludCBmZClcXG4gXFx0cmV0dXJuIGF0b2woYnVmKTtcXG4gfVxcbiBcXG4tbG9uZyBjZ19yZWFkX2tleV9sb25nKGNvbnN0IGNoYXIgKmNncm91cCwgY29uc3QgY2hhciAqY29udHJvbCwgY29uc3QgY2hhciAqa2V5KVxcbitzNjQgY2dfcmVhZF9rZXlfczY0KGNvbnN0IGNoYXIgKmNncm91cCwgY29uc3QgY2hhciAqY29udHJvbCwgY29uc3QgY2hhciAqa2V5KVxcbiB7XFxuIFxcdGNoYXIgYnVmW0JVRl9TSVpFXTtcXG4gXFx0Y2hhciAqcHRyO1xcbkBAIC0xODQsMTggKzE4NCwxOCBAQCBsb25nIGNnX3JlYWRfa2V5X2xvbmcoY29uc3QgY2hhciAqY2dyb3VwLCBjb25zdCBjaGFyICpjb250cm9sLCBjb25zdCBjaGFyICprZXkpXFxuIFxcdGlmICghcHRyKVxcbiBcXHRcXHRyZXR1cm4gLTE7XFxuIFxcbi1cXHRyZXR1cm4gYXRvbChwdHIgKyBzdHJsZW4oa2V5KSk7XFxuK1xcdHJldHVybiBhdG9sbChwdHIgKyBzdHJsZW4oa2V5KSk7XFxuIH1cXG4gXFxuLWxvbmcgY2dfcmVhZF9rZXlfbG9uZ19wb2xsKGNvbnN0IGNoYXIgKmNncm91cCwgY29uc3QgY2hhciAqY29udHJvbCxcXG4tXFx0XFx0XFx0ICAgY29uc3QgY2hhciAqa2V5LCBsb25nIGV4cGVjdGVkLCBpbnQgcmV0cmllcyxcXG4tXFx0XFx0XFx0ICAgdXNlY29uZHNfdCB3YWl0X2ludGVydmFsX3VzKVxcbitzNjQgY2dfcmVhZF9rZXlfczY0X3BvbGwoY29uc3QgY2hhciAqY2dyb3VwLCBjb25zdCBjaGFyICpjb250cm9sLFxcbitcXHRcXHRcXHQgY29uc3QgY2hhciAqa2V5LCBzNjQgZXhwZWN0ZWQsIGludCByZXRyaWVzLFxcbitcXHRcXHRcXHQgdXNlY29uZHNfdCB3YWl0X2ludGVydmFsX3VzKVxcbiB7XFxuLVxcdGxvbmcgdmFsID0gLTE7XFxuK1xcdHM2NCB2YWwgPSAtMTtcXG4gXFx0aW50IGk7XFxuIFxcbiBcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgcmV0cmllczsgaSsrKSB7XFxuLVxcdFxcdHZhbCA9IGNnX3JlYWRfa2V5X2xvbmcoY2dyb3VwLCBjb250cm9sLCBrZXkpO1xcbitcXHRcXHR2YWwgPSBjZ19yZWFkX2tleV9zNjQoY2dyb3VwLCBjb250cm9sLCBrZXkpO1xcbiBcXHRcXHRpZiAodmFsIFxcdTAwM2MgMClcXG4gXFx0XFx0XFx0cmV0dXJuIHZhbDtcXG4gXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2Nncm91cC9saWIvaW5jbHVkZS9jZ3JvdXBfdXRpbC5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvY2dyb3VwL2xpYi9pbmNsdWRlL2Nncm91cF91dGlsLmhcXG5pbmRleCA1ZDM5YzcwOWFjN2E0Li5kZGIwNTkzMmQ5Yzc3IDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2Nncm91cC9saWIvaW5jbHVkZS9jZ3JvdXBfdXRpbC5oXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvY2dyb3VwL2xpYi9pbmNsdWRlL2Nncm91cF91dGlsLmhcXG5AQCAtMiw2ICsyLDggQEBcXG4gI2luY2x1ZGUgXFx1MDAzY3N0ZGJvb2wuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY3N0ZGxpYi5oXFx1MDAzZVxcbiBcXG4rdHlwZWRlZiBzaWduZWQgbG9uZyBsb25nIHM2NDtcXG4rXFxuICNpZm5kZWYgQlVGX1NJWkVcXG4gI2RlZmluZSBCVUZfU0laRSA0MDk2XFxuICNlbmRpZlxcbkBAIC0yNCwyNSArMjYsMjUgQEBcXG4gLypcXG4gICogQ2hlY2tzIGlmIHR3byBnaXZlbiB2YWx1ZXMgZGlmZmVyIGJ5IGxlc3MgdGhhbiBlcnIlIG9mIHRoZWlyIHN1bS5cXG4gICovXFxuLXN0YXRpYyBpbmxpbmUgaW50IHZhbHVlc19jbG9zZShsb25nIGEsIGxvbmcgYiwgaW50IGVycilcXG4rc3RhdGljIGlubGluZSBpbnQgdmFsdWVzX2Nsb3NlKHM2NCBhLCBzNjQgYiwgaW50IGVycilcXG4ge1xcbi1cXHRyZXR1cm4gbGFicyhhIC0gYikgXFx1MDAzYz0gKGEgKyBiKSAvIDEwMCAqIGVycjtcXG4rXFx0cmV0dXJuIGxsYWJzKGEgLSBiKSBcXHUwMDNjPSAoYSArIGIpIC8gMTAwICogZXJyO1xcbiB9XFxuIFxcbiAvKlxcbiAgKiBDaGVja3MgaWYgdHdvIGdpdmVuIHZhbHVlcyBkaWZmZXIgYnkgbGVzcyB0aGFuIGVyciUgb2YgdGhlaXIgc3VtIGFuZCBhc3NlcnRcXG4gICogd2l0aCBkZXRhaWxlZCBkZWJ1ZyBpbmZvIGlmIG5vdC5cXG4gICovXFxuLXN0YXRpYyBpbmxpbmUgaW50IHZhbHVlc19jbG9zZV9yZXBvcnQobG9uZyBhLCBsb25nIGIsIGludCBlcnIpXFxuK3N0YXRpYyBpbmxpbmUgaW50IHZhbHVlc19jbG9zZV9yZXBvcnQoczY0IGEsIHM2NCBiLCBpbnQgZXJyKVxcbiB7XFxuLVxcdGxvbmcgZGlmZiAgPSBsYWJzKGEgLSBiKTtcXG4tXFx0bG9uZyBsaW1pdCA9IChhICsgYikgLyAxMDAgKiBlcnI7XFxuK1xcdHM2NCBkaWZmICA9IGxsYWJzKGEgLSBiKTtcXG4rXFx0czY0IGxpbWl0ID0gKGEgKyBiKSAvIDEwMCAqIGVycjtcXG4gXFx0ZG91YmxlIGFjdHVhbF9lcnIgPSAoYSArIGIpID8gKDEwMC4wICogZGlmZiAvIChhICsgYikpIDogMC4wO1xcbiBcXHRpbnQgY2xvc2UgPSBkaWZmIFxcdTAwM2M9IGxpbWl0O1xcbiBcXG4gXFx0aWYgKCFjbG9zZSlcXG4gXFx0XFx0ZnByaW50ZihzdGRlcnIsXFxuLVxcdFxcdFxcdFxcXCJbRkFJTF0gYWN0dWFsPSVsZCBleHBlY3RlZD0lbGQgfCBkaWZmPSVsZCB8IGxpbWl0PSVsZCB8IFxcXCJcXG4rXFx0XFx0XFx0XFxcIltGQUlMXSBhY3R1YWw9JWxsZCBleHBlY3RlZD0lbGxkIHwgZGlmZj0lbGxkIHwgbGltaXQ9JWxsZCB8IFxcXCJcXG4gXFx0XFx0XFx0XFxcInRvbGVyYW5jZT0lZCUlIHwgYWN0dWFsX2Vycm9yPSUuMmYlJVxcXFxuXFxcIixcXG4gXFx0XFx0XFx0YSwgYiwgZGlmZiwgbGltaXQsIGVyciwgYWN0dWFsX2Vycik7XFxuIFxcbkBAIC02OSwxMCArNzEsMTAgQEAgZXh0ZXJuIGludCBjZ19yZWFkX3N0cnN0cihjb25zdCBjaGFyICpjZ3JvdXAsIGNvbnN0IGNoYXIgKmNvbnRyb2wsXFxuIFxcdFxcdFxcdCAgY29uc3QgY2hhciAqbmVlZGxlKTtcXG4gZXh0ZXJuIGxvbmcgY2dfcmVhZF9sb25nKGNvbnN0IGNoYXIgKmNncm91cCwgY29uc3QgY2hhciAqY29udHJvbCk7XFxuIGV4dGVybiBsb25nIGNnX3JlYWRfbG9uZ19mZChpbnQgZmQpO1xcbi1sb25nIGNnX3JlYWRfa2V5X2xvbmcoY29uc3QgY2hhciAqY2dyb3VwLCBjb25zdCBjaGFyICpjb250cm9sLCBjb25zdCBjaGFyICprZXkpO1xcbi1sb25nIGNnX3JlYWRfa2V5X2xvbmdfcG9sbChjb25zdCBjaGFyICpjZ3JvdXAsIGNvbnN0IGNoYXIgKmNvbnRyb2wsXFxuLVxcdFxcdFxcdCAgIGNvbnN0IGNoYXIgKmtleSwgbG9uZyBleHBlY3RlZCwgaW50IHJldHJpZXMsXFxuLVxcdFxcdFxcdCAgIHVzZWNvbmRzX3Qgd2FpdF9pbnRlcnZhbF91cyk7XFxuK3M2NCBjZ19yZWFkX2tleV9zNjQoY29uc3QgY2hhciAqY2dyb3VwLCBjb25zdCBjaGFyICpjb250cm9sLCBjb25zdCBjaGFyICprZXkpO1xcbitzNjQgY2dfcmVhZF9rZXlfczY0X3BvbGwoY29uc3QgY2hhciAqY2dyb3VwLCBjb25zdCBjaGFyICpjb250cm9sLFxcbitcXHRcXHRcXHQgY29uc3QgY2hhciAqa2V5LCBzNjQgZXhwZWN0ZWQsIGludCByZXRyaWVzLFxcbitcXHRcXHRcXHQgdXNlY29uZHNfdCB3YWl0X2ludGVydmFsX3VzKTtcXG4gZXh0ZXJuIGxvbmcgY2dfcmVhZF9sYyhjb25zdCBjaGFyICpjZ3JvdXAsIGNvbnN0IGNoYXIgKmNvbnRyb2wpO1xcbiBleHRlcm4gaW50IGNnX3dyaXRlKGNvbnN0IGNoYXIgKmNncm91cCwgY29uc3QgY2hhciAqY29udHJvbCwgY2hhciAqYnVmKTtcXG4gZXh0ZXJuIGludCBjZ19vcGVuKGNvbnN0IGNoYXIgKmNncm91cCwgY29uc3QgY2hhciAqY29udHJvbCwgaW50IGZsYWdzKTtcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvY2dyb3VwL3Rlc3RfY3B1LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9jZ3JvdXAvdGVzdF9jcHUuY1xcbmluZGV4IDczNWE1M2JiMjIyYmEuLjExZGExZGU5Y2RlYjYgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvY2dyb3VwL3Rlc3RfY3B1LmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9jZ3JvdXAvdGVzdF9jcHUuY1xcbkBAIC0yNCw3ICsyNCw3IEBAIGVudW0gaG9nX2Nsb2NrX3R5cGUge1xcbiBzdHJ1Y3QgY3B1X2hvZ2dlciB7XFxuIFxcdGNoYXIgKmNncm91cDtcXG4gXFx0cGlkX3QgcGlkO1xcbi1cXHRsb25nIHVzYWdlO1xcbitcXHRzNjQgdXNhZ2U7XFxuIH07XFxuIFxcbiBzdHJ1Y3QgY3B1X2hvZ19mdW5jX3BhcmFtIHtcXG5AQCAtMTg1LDcgKzE4NSw3IEBAIHN0YXRpYyBpbnQgaG9nX2NwdXNfdGltZWQoY29uc3QgY2hhciAqY2dyb3VwLCB2b2lkICphcmcpXFxuIHN0YXRpYyBpbnQgdGVzdF9jcHVjZ19zdGF0cyhjb25zdCBjaGFyICpyb290KVxcbiB7XFxuIFxcdGludCByZXQgPSBLU0ZUX0ZBSUw7XFxuLVxcdGxvbmcgdXNhZ2VfdXNlYywgdXNlcl91c2VjLCBzeXN0ZW1fdXNlYztcXG4rXFx0czY0IHVzYWdlX3VzZWMsIHVzZXJfdXNlYywgc3lzdGVtX3VzZWM7XFxuIFxcdGxvbmcgdXNhZ2Vfc2Vjb25kcyA9IDI7XFxuIFxcdGxvbmcgZXhwZWN0ZWRfdXNhZ2VfdXNlYyA9IHVzYWdlX3NlY29uZHMgKiBVU0VDX1BFUl9TRUM7XFxuIFxcdGNoYXIgKmNwdWNnO1xcbkBAIC0xOTcsOSArMTk3LDkgQEAgc3RhdGljIGludCB0ZXN0X2NwdWNnX3N0YXRzKGNvbnN0IGNoYXIgKnJvb3QpXFxuIFxcdGlmIChjZ19jcmVhdGUoY3B1Y2cpKVxcbiBcXHRcXHRnb3RvIGNsZWFudXA7XFxuIFxcbi1cXHR1c2FnZV91c2VjID0gY2dfcmVhZF9rZXlfbG9uZyhjcHVjZywgXFxcImNwdS5zdGF0XFxcIiwgXFxcInVzYWdlX3VzZWNcXFwiKTtcXG4tXFx0dXNlcl91c2VjID0gY2dfcmVhZF9rZXlfbG9uZyhjcHVjZywgXFxcImNwdS5zdGF0XFxcIiwgXFxcInVzZXJfdXNlY1xcXCIpO1xcbi1cXHRzeXN0ZW1fdXNlYyA9IGNnX3JlYWRfa2V5X2xvbmcoY3B1Y2csIFxcXCJjcHUuc3RhdFxcXCIsIFxcXCJzeXN0ZW1fdXNlY1xcXCIpO1xcbitcXHR1c2FnZV91c2VjID0gY2dfcmVhZF9rZXlfczY0KGNwdWNnLCBcXFwiY3B1LnN0YXRcXFwiLCBcXFwidXNhZ2VfdXNlY1xcXCIpO1xcbitcXHR1c2VyX3VzZWMgPSBjZ19yZWFkX2tleV9zNjQoY3B1Y2csIFxcXCJjcHUuc3RhdFxcXCIsIFxcXCJ1c2VyX3VzZWNcXFwiKTtcXG4rXFx0c3lzdGVtX3VzZWMgPSBjZ19yZWFkX2tleV9zNjQoY3B1Y2csIFxcXCJjcHUuc3RhdFxcXCIsIFxcXCJzeXN0ZW1fdXNlY1xcXCIpO1xcbiBcXHRpZiAodXNhZ2VfdXNlYyAhPSAwIHx8IHVzZXJfdXNlYyAhPSAwIHx8IHN5c3RlbV91c2VjICE9IDApXFxuIFxcdFxcdGdvdG8gY2xlYW51cDtcXG4gXFxuQEAgLTIxNCw4ICsyMTQsOCBAQCBzdGF0aWMgaW50IHRlc3RfY3B1Y2dfc3RhdHMoY29uc3QgY2hhciAqcm9vdClcXG4gXFx0aWYgKGNnX3J1bihjcHVjZywgaG9nX2NwdXNfdGltZWQsICh2b2lkICopXFx1MDAyNnBhcmFtKSlcXG4gXFx0XFx0Z290byBjbGVhbnVwO1xcbiBcXG4tXFx0dXNhZ2VfdXNlYyA9IGNnX3JlYWRfa2V5X2xvbmcoY3B1Y2csIFxcXCJjcHUuc3RhdFxcXCIsIFxcXCJ1c2FnZV91c2VjXFxcIik7XFxuLVxcdHVzZXJfdXNlYyA9IGNnX3JlYWRfa2V5X2xvbmcoY3B1Y2csIFxcXCJjcHUuc3RhdFxcXCIsIFxcXCJ1c2VyX3VzZWNcXFwiKTtcXG4rXFx0dXNhZ2VfdXNlYyA9IGNnX3JlYWRfa2V5X3M2NChjcHVjZywgXFxcImNwdS5zdGF0XFxcIiwgXFxcInVzYWdlX3VzZWNcXFwiKTtcXG4rXFx0dXNlcl91c2VjID0gY2dfcmVhZF9rZXlfczY0KGNwdWNnLCBcXFwiY3B1LnN0YXRcXFwiLCBcXFwidXNlcl91c2VjXFxcIik7XFxuIFxcdGlmICh1c2VyX3VzZWMgXFx1MDAzYz0gMClcXG4gXFx0XFx0Z290byBjbGVhbnVwO1xcbiBcXG5AQCAtMjM5LDcgKzIzOSw3IEBAIHN0YXRpYyBpbnQgdGVzdF9jcHVjZ19uaWNlKGNvbnN0IGNoYXIgKnJvb3QpXFxuIHtcXG4gXFx0aW50IHJldCA9IEtTRlRfRkFJTDtcXG4gXFx0aW50IHN0YXR1cztcXG4tXFx0bG9uZyB1c2VyX3VzZWMsIG5pY2VfdXNlYztcXG4rXFx0czY0IHVzZXJfdXNlYywgbmljZV91c2VjO1xcbiBcXHRsb25nIHVzYWdlX3NlY29uZHMgPSAyO1xcbiBcXHRsb25nIGV4cGVjdGVkX25pY2VfdXNlYyA9IHVzYWdlX3NlY29uZHMgKiBVU0VDX1BFUl9TRUM7XFxuIFxcdGNoYXIgKmNwdWNnO1xcbkBAIC0yNTIsOCArMjUyLDggQEAgc3RhdGljIGludCB0ZXN0X2NwdWNnX25pY2UoY29uc3QgY2hhciAqcm9vdClcXG4gXFx0aWYgKGNnX2NyZWF0ZShjcHVjZykpXFxuIFxcdFxcdGdvdG8gY2xlYW51cDtcXG4gXFxuLVxcdHVzZXJfdXNlYyA9IGNnX3JlYWRfa2V5X2xvbmcoY3B1Y2csIFxcXCJjcHUuc3RhdFxcXCIsIFxcXCJ1c2VyX3VzZWNcXFwiKTtcXG4tXFx0bmljZV91c2VjID0gY2dfcmVhZF9rZXlfbG9uZyhjcHVjZywgXFxcImNwdS5zdGF0XFxcIiwgXFxcIm5pY2VfdXNlY1xcXCIpO1xcbitcXHR1c2VyX3VzZWMgPSBjZ19yZWFkX2tleV9zNjQoY3B1Y2csIFxcXCJjcHUuc3RhdFxcXCIsIFxcXCJ1c2VyX3VzZWNcXFwiKTtcXG4rXFx0bmljZV91c2VjID0gY2dfcmVhZF9rZXlfczY0KGNwdWNnLCBcXFwiY3B1LnN0YXRcXFwiLCBcXFwibmljZV91c2VjXFxcIik7XFxuIFxcdGlmIChuaWNlX3VzZWMgPT0gLTEpXFxuIFxcdFxcdHJldCA9IEtTRlRfU0tJUDtcXG4gXFx0aWYgKHVzZXJfdXNlYyAhPSAwIHx8IG5pY2VfdXNlYyAhPSAwKVxcbkBAIC0yODksOCArMjg5LDggQEAgc3RhdGljIGludCB0ZXN0X2NwdWNnX25pY2UoY29uc3QgY2hhciAqcm9vdClcXG4gXFx0XFx0aWYgKCFXSUZFWElURUQoc3RhdHVzKSlcXG4gXFx0XFx0XFx0Z290byBjbGVhbnVwO1xcbiBcXG4tXFx0XFx0dXNlcl91c2VjID0gY2dfcmVhZF9rZXlfbG9uZyhjcHVjZywgXFxcImNwdS5zdGF0XFxcIiwgXFxcInVzZXJfdXNlY1xcXCIpO1xcbi1cXHRcXHRuaWNlX3VzZWMgPSBjZ19yZWFkX2tleV9sb25nKGNwdWNnLCBcXFwiY3B1LnN0YXRcXFwiLCBcXFwibmljZV91c2VjXFxcIik7XFxuK1xcdFxcdHVzZXJfdXNlYyA9IGNnX3JlYWRfa2V5X3M2NChjcHVjZywgXFxcImNwdS5zdGF0XFxcIiwgXFxcInVzZXJfdXNlY1xcXCIpO1xcbitcXHRcXHRuaWNlX3VzZWMgPSBjZ19yZWFkX2tleV9zNjQoY3B1Y2csIFxcXCJjcHUuc3RhdFxcXCIsIFxcXCJuaWNlX3VzZWNcXFwiKTtcXG4gXFx0XFx0aWYgKHVzZXJfdXNlYyBcXHUwMDNjPSAwKVxcbiBcXHRcXHRcXHRnb3RvIGNsZWFudXA7XFxuIFxcdFxcdGlmICghdmFsdWVzX2Nsb3NlX3JlcG9ydChuaWNlX3VzZWMsIGV4cGVjdGVkX25pY2VfdXNlYywgMSkpXFxuQEAgLTM1Nyw4ICszNTcsOCBAQCBydW5fY3B1Y2dfd2VpZ2h0X3Rlc3QoXFxuIFxcdH1cXG4gXFxuIFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBBUlJBWV9TSVpFKGNoaWxkcmVuKTsgaSsrKVxcbi1cXHRcXHRjaGlsZHJlbltpXS51c2FnZSA9IGNnX3JlYWRfa2V5X2xvbmcoY2hpbGRyZW5baV0uY2dyb3VwLFxcbi1cXHRcXHRcXHRcXHRcXFwiY3B1LnN0YXRcXFwiLCBcXFwidXNhZ2VfdXNlY1xcXCIpO1xcbitcXHRcXHRjaGlsZHJlbltpXS51c2FnZSA9IGNnX3JlYWRfa2V5X3M2NChjaGlsZHJlbltpXS5jZ3JvdXAsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgICBcXFwiY3B1LnN0YXRcXFwiLCBcXFwidXNhZ2VfdXNlY1xcXCIpO1xcbiBcXG4gXFx0aWYgKHZhbGlkYXRlKGNoaWxkcmVuLCBBUlJBWV9TSVpFKGNoaWxkcmVuKSkpXFxuIFxcdFxcdGdvdG8gY2xlYW51cDtcXG5AQCAtNDg2LDcgKzQ4Niw3IEBAIHJ1bl9jcHVjZ19uZXN0ZWRfd2VpZ2h0X3Rlc3QoY29uc3QgY2hhciAqcm9vdCwgYm9vbCBvdmVycHJvdmlzaW9uZWQpXFxuIFxcdGludCByZXQgPSBLU0ZUX0ZBSUwsIGk7XFxuIFxcdGNoYXIgKnBhcmVudCA9IE5VTEwsICpjaGlsZCA9IE5VTEw7XFxuIFxcdHN0cnVjdCBjcHVfaG9nZ2VyIGxlYWZbM10gPSB7fTtcXG4tXFx0bG9uZyBuZXN0ZWRfbGVhZl91c2FnZSwgY2hpbGRfdXNhZ2U7XFxuK1xcdHM2NCBuZXN0ZWRfbGVhZl91c2FnZSwgY2hpbGRfdXNhZ2U7XFxuIFxcdGludCBucHJvY3MgPSBnZXRfbnByb2NzKCk7XFxuIFxcbiBcXHRpZiAoIW92ZXJwcm92aXNpb25lZCkge1xcbkBAIC01NjcsOCArNTY3LDggQEAgcnVuX2NwdWNnX25lc3RlZF93ZWlnaHRfdGVzdChjb25zdCBjaGFyICpyb290LCBib29sIG92ZXJwcm92aXNpb25lZClcXG4gXFx0fVxcbiBcXG4gXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIEFSUkFZX1NJWkUobGVhZik7IGkrKykge1xcbi1cXHRcXHRsZWFmW2ldLnVzYWdlID0gY2dfcmVhZF9rZXlfbG9uZyhsZWFmW2ldLmNncm91cCxcXG4tXFx0XFx0XFx0XFx0XFxcImNwdS5zdGF0XFxcIiwgXFxcInVzYWdlX3VzZWNcXFwiKTtcXG4rXFx0XFx0bGVhZltpXS51c2FnZSA9IGNnX3JlYWRfa2V5X3M2NChsZWFmW2ldLmNncm91cCwgXFxcImNwdS5zdGF0XFxcIixcXG4rXFx0XFx0XFx0XFx0XFx0XFx0XFxcInVzYWdlX3VzZWNcXFwiKTtcXG4gXFx0XFx0aWYgKGxlYWZbaV0udXNhZ2UgXFx1MDAzYz0gMClcXG4gXFx0XFx0XFx0Z290byBjbGVhbnVwO1xcbiBcXHR9XFxuQEAgLTU4MCw4ICs1ODAsNyBAQCBydW5fY3B1Y2dfbmVzdGVkX3dlaWdodF90ZXN0KGNvbnN0IGNoYXIgKnJvb3QsIGJvb2wgb3ZlcnByb3Zpc2lvbmVkKVxcbiBcXHR9IGVsc2UgaWYgKCF2YWx1ZXNfY2xvc2VfcmVwb3J0KGxlYWZbMF0udXNhZ2UgKiAyLCBuZXN0ZWRfbGVhZl91c2FnZSwgMTUpKVxcbiBcXHRcXHRnb3RvIGNsZWFudXA7XFxuIFxcbi1cXG4tXFx0Y2hpbGRfdXNhZ2UgPSBjZ19yZWFkX2tleV9sb25nKGNoaWxkLCBcXFwiY3B1LnN0YXRcXFwiLCBcXFwidXNhZ2VfdXNlY1xcXCIpO1xcbitcXHRjaGlsZF91c2FnZSA9IGNnX3JlYWRfa2V5X3M2NChjaGlsZCwgXFxcImNwdS5zdGF0XFxcIiwgXFxcInVzYWdlX3VzZWNcXFwiKTtcXG4gXFx0aWYgKGNoaWxkX3VzYWdlIFxcdTAwM2M9IDApXFxuIFxcdFxcdGdvdG8gY2xlYW51cDtcXG4gXFx0aWYgKCF2YWx1ZXNfY2xvc2VfcmVwb3J0KGNoaWxkX3VzYWdlLCBuZXN0ZWRfbGVhZl91c2FnZSwgMSkpXFxuQEAgLTY3OSw3ICs2NzgsOCBAQCBzdGF0aWMgaW50IHRlc3RfY3B1Y2dfbWF4KGNvbnN0IGNoYXIgKnJvb3QpXFxuIFxcdGxvbmcgZHVyYXRpb25fc2Vjb25kcyA9IDE7XFxuIFxcbiBcXHRsb25nIGR1cmF0aW9uX3VzZWM7XFxuLVxcdGxvbmcgdXNhZ2VfdXNlYywgbl9wZXJpb2RzLCByZW1haW5kZXJfdXNlYywgZXhwZWN0ZWRfdXNhZ2VfdXNlYztcXG4rXFx0bG9uZyBuX3BlcmlvZHMsIHJlbWFpbmRlcl91c2VjLCBleHBlY3RlZF91c2FnZV91c2VjO1xcbitcXHRzNjQgdXNhZ2VfdXNlYztcXG4gXFx0Y2hhciAqY3B1Y2c7XFxuIFxcdGNoYXIgcXVvdGFfYnVmWzMyXTtcXG4gXFxuQEAgLTcwOCw3ICs3MDgsNyBAQCBzdGF0aWMgaW50IHRlc3RfY3B1Y2dfbWF4KGNvbnN0IGNoYXIgKnJvb3QpXFxuIFxcdGlmIChjZ19ydW4oY3B1Y2csIGhvZ19jcHVzX3RpbWVkLCAodm9pZCAqKVxcdTAwMjZwYXJhbSkpXFxuIFxcdFxcdGdvdG8gY2xlYW51cDtcXG4gXFxuLVxcdHVzYWdlX3VzZWMgPSBjZ19yZWFkX2tleV9sb25nKGNwdWNnLCBcXFwiY3B1LnN0YXRcXFwiLCBcXFwidXNhZ2VfdXNlY1xcXCIpO1xcbitcXHR1c2FnZV91c2VjID0gY2dfcmVhZF9rZXlfczY0KGNwdWNnLCBcXFwiY3B1LnN0YXRcXFwiLCBcXFwidXNhZ2VfdXNlY1xcXCIpO1xcbiBcXHRpZiAodXNhZ2VfdXNlYyBcXHUwMDNjPSAwKVxcbiBcXHRcXHRnb3RvIGNsZWFudXA7XFxuIFxcbkBAIC03NDYsNyArNzQ2LDggQEAgc3RhdGljIGludCB0ZXN0X2NwdWNnX21heF9uZXN0ZWQoY29uc3QgY2hhciAqcm9vdClcXG4gXFx0bG9uZyBkdXJhdGlvbl9zZWNvbmRzID0gMTtcXG4gXFxuIFxcdGxvbmcgZHVyYXRpb25fdXNlYztcXG4tXFx0bG9uZyB1c2FnZV91c2VjLCBuX3BlcmlvZHMsIHJlbWFpbmRlcl91c2VjLCBleHBlY3RlZF91c2FnZV91c2VjO1xcbitcXHRsb25nIG5fcGVyaW9kcywgcmVtYWluZGVyX3VzZWMsIGV4cGVjdGVkX3VzYWdlX3VzZWM7XFxuK1xcdHM2NCB1c2FnZV91c2VjO1xcbiBcXHRjaGFyICpwYXJlbnQsICpjaGlsZDtcXG4gXFx0Y2hhciBxdW90YV9idWZbMzJdO1xcbiBcXG5AQCAtNzgyLDcgKzc4Myw3IEBAIHN0YXRpYyBpbnQgdGVzdF9jcHVjZ19tYXhfbmVzdGVkKGNvbnN0IGNoYXIgKnJvb3QpXFxuIFxcdGlmIChjZ19ydW4oY2hpbGQsIGhvZ19jcHVzX3RpbWVkLCAodm9pZCAqKVxcdTAwMjZwYXJhbSkpXFxuIFxcdFxcdGdvdG8gY2xlYW51cDtcXG4gXFxuLVxcdHVzYWdlX3VzZWMgPSBjZ19yZWFkX2tleV9sb25nKGNoaWxkLCBcXFwiY3B1LnN0YXRcXFwiLCBcXFwidXNhZ2VfdXNlY1xcXCIpO1xcbitcXHR1c2FnZV91c2VjID0gY2dfcmVhZF9rZXlfczY0KGNoaWxkLCBcXFwiY3B1LnN0YXRcXFwiLCBcXFwidXNhZ2VfdXNlY1xcXCIpO1xcbiBcXHRpZiAodXNhZ2VfdXNlYyBcXHUwMDNjPSAwKVxcbiBcXHRcXHRnb3RvIGNsZWFudXA7XFxuIFxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9jZ3JvdXAvdGVzdF9mcmVlemVyLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9jZ3JvdXAvdGVzdF9mcmVlemVyLmNcXG5pbmRleCBmMjhiYjAyZTk3ODNiLi5mNGYwODJjMTNkNGI3IDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2Nncm91cC90ZXN0X2ZyZWV6ZXIuY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2Nncm91cC90ZXN0X2ZyZWV6ZXIuY1xcbkBAIC04MDcsMTAgKzgwNyw5IEBAIHN0YXRpYyBpbnQgdGVzdF9jZ2ZyZWV6ZXJfdmZvcmsoY29uc3QgY2hhciAqcm9vdClcXG4gLypcXG4gICogR2V0IHRoZSBjdXJyZW50IGZyb3plbl91c2VjIGZvciB0aGUgY2dyb3VwLlxcbiAgKi9cXG4tc3RhdGljIGxvbmcgY2dfY2hlY2tfZnJlZXpldGltZShjb25zdCBjaGFyICpjZ3JvdXApXFxuK3N0YXRpYyBzNjQgY2dfY2hlY2tfZnJlZXpldGltZShjb25zdCBjaGFyICpjZ3JvdXApXFxuIHtcXG4tXFx0cmV0dXJuIGNnX3JlYWRfa2V5X2xvbmcoY2dyb3VwLCBcXFwiY2dyb3VwLnN0YXQubG9jYWxcXFwiLFxcbi1cXHRcXHRcXHRcXHRcXFwiZnJvemVuX3VzZWMgXFxcIik7XFxuK1xcdHJldHVybiBjZ19yZWFkX2tleV9zNjQoY2dyb3VwLCBcXFwiY2dyb3VwLnN0YXQubG9jYWxcXFwiLCBcXFwiZnJvemVuX3VzZWMgXFxcIik7XFxuIH1cXG4gXFxuIC8qXFxuQEAgLTgyMCw3ICs4MTksNyBAQCBzdGF0aWMgaW50IHRlc3RfY2dmcmVlemVyX3RpbWVfZW1wdHkoY29uc3QgY2hhciAqcm9vdClcXG4ge1xcbiBcXHRpbnQgcmV0ID0gS1NGVF9GQUlMO1xcbiBcXHRjaGFyICpjZ3JvdXAgPSBOVUxMO1xcbi1cXHRsb25nIHByZXYsIGN1cnI7XFxuK1xcdHM2NCBwcmV2LCBjdXJyO1xcbiBcXG4gXFx0Y2dyb3VwID0gY2dfbmFtZShyb290LCBcXFwiY2dfdGltZV90ZXN0X2VtcHR5XFxcIik7XFxuIFxcdGlmICghY2dyb3VwKVxcbkBAIC04MzksNyArODM4LDcgQEAgc3RhdGljIGludCB0ZXN0X2NnZnJlZXplcl90aW1lX2VtcHR5KGNvbnN0IGNoYXIgKnJvb3QpXFxuIFxcdFxcdGdvdG8gY2xlYW51cDtcXG4gXFx0fVxcbiBcXHRpZiAoY3VyciBcXHUwMDNlIDApIHtcXG4tXFx0XFx0ZGVidWcoXFxcIkV4cGVjdCB0aW1lICglbGQpIHRvIGJlIDBcXFxcblxcXCIsIGN1cnIpO1xcbitcXHRcXHRkZWJ1ZyhcXFwiRXhwZWN0IHRpbWUgKCVsbGQpIHRvIGJlIDBcXFxcblxcXCIsIGN1cnIpO1xcbiBcXHRcXHRnb3RvIGNsZWFudXA7XFxuIFxcdH1cXG4gXFxuQEAgLTg1Myw4ICs4NTIsNyBAQCBzdGF0aWMgaW50IHRlc3RfY2dmcmVlemVyX3RpbWVfZW1wdHkoY29uc3QgY2hhciAqcm9vdClcXG4gXFx0dXNsZWVwKDEwMDApO1xcbiBcXHRjdXJyID0gY2dfY2hlY2tfZnJlZXpldGltZShjZ3JvdXApO1xcbiBcXHRpZiAoY3VyciBcXHUwMDNjIDEwMDApIHtcXG4tXFx0XFx0ZGVidWcoXFxcIkV4cGVjdCB0aW1lICglbGQpIHRvIGJlIGF0IGxlYXN0IDEwMDAgdXNcXFxcblxcXCIsXFxuLVxcdFxcdCAgICAgIGN1cnIpO1xcbitcXHRcXHRkZWJ1ZyhcXFwiRXhwZWN0IHRpbWUgKCVsbGQpIHRvIGJlIGF0IGxlYXN0IDEwMDAgdXNcXFxcblxcXCIsIGN1cnIpO1xcbiBcXHRcXHRnb3RvIGNsZWFudXA7XFxuIFxcdH1cXG4gXFxuQEAgLTg2Nyw3ICs4NjUsNyBAQCBzdGF0aWMgaW50IHRlc3RfY2dmcmVlemVyX3RpbWVfZW1wdHkoY29uc3QgY2hhciAqcm9vdClcXG4gXFx0cHJldiA9IGN1cnI7XFxuIFxcdGN1cnIgPSBjZ19jaGVja19mcmVlemV0aW1lKGNncm91cCk7XFxuIFxcdGlmIChjdXJyIFxcdTAwM2M9IHByZXYpIHtcXG4tXFx0XFx0ZGVidWcoXFxcIkV4cGVjdCB0aW1lICglbGQpIHRvIGJlIG1vcmUgdGhhbiBwcmV2aW91cyBjaGVjayAoJWxkKVxcXFxuXFxcIixcXG4rXFx0XFx0ZGVidWcoXFxcIkV4cGVjdCB0aW1lICglbGxkKSB0byBiZSBtb3JlIHRoYW4gcHJldmlvdXMgY2hlY2sgKCVsbGQpXFxcXG5cXFwiLFxcbiBcXHRcXHQgICAgICBjdXJyLCBwcmV2KTtcXG4gXFx0XFx0Z290byBjbGVhbnVwO1xcbiBcXHR9XFxuQEAgLTg3OSw3ICs4NzcsNyBAQCBzdGF0aWMgaW50IHRlc3RfY2dmcmVlemVyX3RpbWVfZW1wdHkoY29uc3QgY2hhciAqcm9vdClcXG4gXFx0cHJldiA9IGN1cnI7XFxuIFxcdGN1cnIgPSBjZ19jaGVja19mcmVlemV0aW1lKGNncm91cCk7XFxuIFxcdGlmIChjdXJyICE9IHByZXYpIHtcXG4tXFx0XFx0ZGVidWcoXFxcIkV4cGVjdCB0aW1lICglbGQpIHRvIGJlIHVuY2hhbmdlZCBmcm9tIHByZXZpb3VzIGNoZWNrICglbGQpXFxcXG5cXFwiLFxcbitcXHRcXHRkZWJ1ZyhcXFwiRXhwZWN0IHRpbWUgKCVsbGQpIHRvIGJlIHVuY2hhbmdlZCBmcm9tIHByZXZpb3VzIGNoZWNrICglbGxkKVxcXFxuXFxcIixcXG4gXFx0XFx0ICAgICAgY3VyciwgcHJldik7XFxuIFxcdFxcdGdvdG8gY2xlYW51cDtcXG4gXFx0fVxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9jZ3JvdXAvdGVzdF9rbWVtLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9jZ3JvdXAvdGVzdF9rbWVtLmNcXG5pbmRleCA0MzdmMmQzNWYyMDVlLi4yNDk4OThmM2I4MWU4IDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2Nncm91cC90ZXN0X2ttZW0uY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2Nncm91cC90ZXN0X2ttZW0uY1xcbkBAIC01NCw3ICs1NCw4IEBAIHN0YXRpYyBpbnQgdGVzdF9rbWVtX2Jhc2ljKGNvbnN0IGNoYXIgKnJvb3QpXFxuIHtcXG4gXFx0aW50IHJldCA9IEtTRlRfRkFJTDtcXG4gXFx0Y2hhciAqY2cgPSBOVUxMO1xcbi1cXHRsb25nIHNsYWIwLCBzbGFiMSwgY3VycmVudDtcXG4rXFx0czY0IHNsYWIwLCBzbGFiMTtcXG4rXFx0bG9uZyBjdXJyZW50O1xcbiBcXG4gXFx0Y2cgPSBjZ19uYW1lKHJvb3QsIFxcXCJrbWVtX2Jhc2ljX3Rlc3RcXFwiKTtcXG4gXFx0aWYgKCFjZylcXG5AQCAtNjYsNyArNjcsNyBAQCBzdGF0aWMgaW50IHRlc3Rfa21lbV9iYXNpYyhjb25zdCBjaGFyICpyb290KVxcbiBcXHRpZiAoY2dfcnVuKGNnLCBhbGxvY19kY2FjaGUsICh2b2lkICopMTAwMDAwKSlcXG4gXFx0XFx0Z290byBjbGVhbnVwO1xcbiBcXG4tXFx0c2xhYjAgPSBjZ19yZWFkX2tleV9sb25nKGNnLCBcXFwibWVtb3J5LnN0YXRcXFwiLCBcXFwic2xhYiBcXFwiKTtcXG4rXFx0c2xhYjAgPSBjZ19yZWFkX2tleV9zNjQoY2csIFxcXCJtZW1vcnkuc3RhdFxcXCIsIFxcXCJzbGFiIFxcXCIpO1xcbiBcXHRpZiAoc2xhYjAgXFx1MDAzYyAoMSBcXHUwMDNjXFx1MDAzYyAyMCkpXFxuIFxcdFxcdGdvdG8gY2xlYW51cDtcXG4gXFxuQEAgLTc1LDcgKzc2LDcgQEAgc3RhdGljIGludCB0ZXN0X2ttZW1fYmFzaWMoY29uc3QgY2hhciAqcm9vdClcXG4gXFx0Lyogd2FpdCBmb3IgUkNVIGZyZWVpbmcgKi9cXG4gXFx0c2xlZXAoMSk7XFxuIFxcbi1cXHRzbGFiMSA9IGNnX3JlYWRfa2V5X2xvbmcoY2csIFxcXCJtZW1vcnkuc3RhdFxcXCIsIFxcXCJzbGFiIFxcXCIpO1xcbitcXHRzbGFiMSA9IGNnX3JlYWRfa2V5X3M2NChjZywgXFxcIm1lbW9yeS5zdGF0XFxcIiwgXFxcInNsYWIgXFxcIik7XFxuIFxcdGlmIChzbGFiMSBcXHUwMDNjIDApXFxuIFxcdFxcdGdvdG8gY2xlYW51cDtcXG4gXFxuQEAgLTE2Nyw3ICsxNjgsOCBAQCBzdGF0aWMgaW50IGNnX3J1bl9pbl9zdWJjZ3JvdXBzKGNvbnN0IGNoYXIgKnBhcmVudCxcXG4gICovXFxuIHN0YXRpYyBpbnQgdGVzdF9rbWVtX21lbWNnX2RlbGV0aW9uKGNvbnN0IGNoYXIgKnJvb3QpXFxuIHtcXG4tXFx0bG9uZyBjdXJyZW50LCBhbm9uLCBmaWxlLCBrZXJuZWwsIHNvY2ssIHN1bTtcXG4rXFx0bG9uZyBjdXJyZW50O1xcbitcXHRzNjQgYW5vbiwgZmlsZSwga2VybmVsLCBzb2NrLCBzdW07XFxuIFxcdGludCByZXQgPSBLU0ZUX0ZBSUw7XFxuIFxcdGNoYXIgKnBhcmVudDtcXG4gXFxuQEAgLTE4NSwyMyArMTg3LDIzIEBAIHN0YXRpYyBpbnQgdGVzdF9rbWVtX21lbWNnX2RlbGV0aW9uKGNvbnN0IGNoYXIgKnJvb3QpXFxuIFxcdFxcdGdvdG8gY2xlYW51cDtcXG4gXFxuIFxcdGN1cnJlbnQgPSBjZ19yZWFkX2xvbmcocGFyZW50LCBcXFwibWVtb3J5LmN1cnJlbnRcXFwiKTtcXG4tXFx0YW5vbiA9IGNnX3JlYWRfa2V5X2xvbmcocGFyZW50LCBcXFwibWVtb3J5LnN0YXRcXFwiLCBcXFwiYW5vbiBcXFwiKTtcXG4tXFx0ZmlsZSA9IGNnX3JlYWRfa2V5X2xvbmcocGFyZW50LCBcXFwibWVtb3J5LnN0YXRcXFwiLCBcXFwiZmlsZSBcXFwiKTtcXG4tXFx0a2VybmVsID0gY2dfcmVhZF9rZXlfbG9uZyhwYXJlbnQsIFxcXCJtZW1vcnkuc3RhdFxcXCIsIFxcXCJrZXJuZWwgXFxcIik7XFxuLVxcdHNvY2sgPSBjZ19yZWFkX2tleV9sb25nKHBhcmVudCwgXFxcIm1lbW9yeS5zdGF0XFxcIiwgXFxcInNvY2sgXFxcIik7XFxuK1xcdGFub24gPSBjZ19yZWFkX2tleV9zNjQocGFyZW50LCBcXFwibWVtb3J5LnN0YXRcXFwiLCBcXFwiYW5vbiBcXFwiKTtcXG4rXFx0ZmlsZSA9IGNnX3JlYWRfa2V5X3M2NChwYXJlbnQsIFxcXCJtZW1vcnkuc3RhdFxcXCIsIFxcXCJmaWxlIFxcXCIpO1xcbitcXHRrZXJuZWwgPSBjZ19yZWFkX2tleV9zNjQocGFyZW50LCBcXFwibWVtb3J5LnN0YXRcXFwiLCBcXFwia2VybmVsIFxcXCIpO1xcbitcXHRzb2NrID0gY2dfcmVhZF9rZXlfczY0KHBhcmVudCwgXFxcIm1lbW9yeS5zdGF0XFxcIiwgXFxcInNvY2sgXFxcIik7XFxuIFxcdGlmIChjdXJyZW50IFxcdTAwM2MgMCB8fCBhbm9uIFxcdTAwM2MgMCB8fCBmaWxlIFxcdTAwM2MgMCB8fCBrZXJuZWwgXFx1MDAzYyAwIHx8IHNvY2sgXFx1MDAzYyAwKVxcbiBcXHRcXHRnb3RvIGNsZWFudXA7XFxuIFxcbiBcXHRzdW0gPSBhbm9uICsgZmlsZSArIGtlcm5lbCArIHNvY2s7XFxuLVxcdGlmIChsYWJzKHN1bSAtIGN1cnJlbnQpIFxcdTAwM2MgTUFYX1ZNU1RBVF9FUlJPUikge1xcbitcXHRpZiAobGxhYnMoc3VtIC0gY3VycmVudCkgXFx1MDAzYyBNQVhfVk1TVEFUX0VSUk9SKSB7XFxuIFxcdFxcdHJldCA9IEtTRlRfUEFTUztcXG4gXFx0fSBlbHNlIHtcXG4gXFx0XFx0cHJpbnRmKFxcXCJtZW1vcnkuY3VycmVudCA9ICVsZFxcXFxuXFxcIiwgY3VycmVudCk7XFxuLVxcdFxcdHByaW50ZihcXFwiYW5vbiArIGZpbGUgKyBrZXJuZWwgKyBzb2NrID0gJWxkXFxcXG5cXFwiLCBzdW0pO1xcbi1cXHRcXHRwcmludGYoXFxcImFub24gPSAlbGRcXFxcblxcXCIsIGFub24pO1xcbi1cXHRcXHRwcmludGYoXFxcImZpbGUgPSAlbGRcXFxcblxcXCIsIGZpbGUpO1xcbi1cXHRcXHRwcmludGYoXFxcImtlcm5lbCA9ICVsZFxcXFxuXFxcIiwga2VybmVsKTtcXG4tXFx0XFx0cHJpbnRmKFxcXCJzb2NrID0gJWxkXFxcXG5cXFwiLCBzb2NrKTtcXG4rXFx0XFx0cHJpbnRmKFxcXCJhbm9uICsgZmlsZSArIGtlcm5lbCArIHNvY2sgPSAlbGxkXFxcXG5cXFwiLCBzdW0pO1xcbitcXHRcXHRwcmludGYoXFxcImFub24gPSAlbGxkXFxcXG5cXFwiLCBhbm9uKTtcXG4rXFx0XFx0cHJpbnRmKFxcXCJmaWxlID0gJWxsZFxcXFxuXFxcIiwgZmlsZSk7XFxuK1xcdFxcdHByaW50ZihcXFwia2VybmVsID0gJWxsZFxcXFxuXFxcIiwga2VybmVsKTtcXG4rXFx0XFx0cHJpbnRmKFxcXCJzb2NrID0gJWxsZFxcXFxuXFxcIiwgc29jayk7XFxuIFxcdH1cXG4gXFxuIGNsZWFudXA6XFxuQEAgLTI0OCw3ICsyNTAsNyBAQCBzdGF0aWMgaW50IHNwYXduXzEwMDBfdGhyZWFkcyhjb25zdCBjaGFyICpjZ3JvdXAsIHZvaWQgKmFyZylcXG4gXFx0aW50IG5yX3RocmVhZHMgPSAxMDAwO1xcbiBcXHRwdGhyZWFkX3QgKnRpbmZvO1xcbiBcXHR1bnNpZ25lZCBsb25nIGk7XFxuLVxcdGxvbmcgc3RhY2s7XFxuK1xcdHM2NCBzdGFjaztcXG4gXFx0aW50IHJldCA9IC0xO1xcbiBcXG4gXFx0dGluZm8gPSBjYWxsb2MobnJfdGhyZWFkcywgc2l6ZW9mKHB0aHJlYWRfdCkpO1xcbkBAIC0yNjMsNyArMjY1LDcgQEAgc3RhdGljIGludCBzcGF3bl8xMDAwX3RocmVhZHMoY29uc3QgY2hhciAqY2dyb3VwLCB2b2lkICphcmcpXFxuIFxcdFxcdH1cXG4gXFx0fVxcbiBcXG4tXFx0c3RhY2sgPSBjZ19yZWFkX2tleV9sb25nKGNncm91cCwgXFxcIm1lbW9yeS5zdGF0XFxcIiwgXFxcImtlcm5lbF9zdGFjayBcXFwiKTtcXG4rXFx0c3RhY2sgPSBjZ19yZWFkX2tleV9zNjQoY2dyb3VwLCBcXFwibWVtb3J5LnN0YXRcXFwiLCBcXFwia2VybmVsX3N0YWNrIFxcXCIpO1xcbiBcXHRpZiAoc3RhY2sgXFx1MDAzZT0gNDA5NiAqIDEwMDApXFxuIFxcdFxcdHJldCA9IDA7XFxuIFxcbkBAIC0zMDcsNyArMzA5LDcgQEAgc3RhdGljIGludCB0ZXN0X2ttZW1fZGVhZF9jZ3JvdXBzKGNvbnN0IGNoYXIgKnJvb3QpXFxuIHtcXG4gXFx0aW50IHJldCA9IEtTRlRfRkFJTDtcXG4gXFx0Y2hhciAqcGFyZW50O1xcbi1cXHRsb25nIGRlYWQgPSAtMTtcXG4rXFx0czY0IGRlYWQgPSAtMTtcXG4gXFxuIFxcdHBhcmVudCA9IGNnX25hbWUocm9vdCwgXFxcImttZW1fZGVhZF9jZ3JvdXBzX3Rlc3RcXFwiKTtcXG4gXFx0aWYgKCFwYXJlbnQpXFxuQEAgLTMyOCw5ICszMzAsMTAgQEAgc3RhdGljIGludCB0ZXN0X2ttZW1fZGVhZF9jZ3JvdXBzKGNvbnN0IGNoYXIgKnJvb3QpXFxuIFxcdCAqIGZyb20gYSBzcGVjaWZpYyBrZXJuZWwgY29uc3RhbnQsIGFuZCBjYW4gYmUgYWRqdXN0ZWQgaWYgcmVjbGFpbVxcbiBcXHQgKiBiZWhhdmlvciBjaGFuZ2VzIGluIHRoZSBmdXR1cmUuXFxuIFxcdCAqL1xcbi1cXHRkZWFkID0gY2dfcmVhZF9rZXlfbG9uZ19wb2xsKHBhcmVudCwgXFxcImNncm91cC5zdGF0XFxcIixcXG4tXFx0XFx0XFx0XFx0XFx0XFxcIm5yX2R5aW5nX2Rlc2NlbmRhbnRzIFxcXCIsIDAsIEtNRU1fREVBRF9XQUlUX1JFVFJJRVMsXFxuLVxcdFxcdFxcdFxcdFxcdERFRkFVTFRfV0FJVF9JTlRFUlZBTF9VUyk7XFxuK1xcdGRlYWQgPSBjZ19yZWFkX2tleV9zNjRfcG9sbChwYXJlbnQsIFxcXCJjZ3JvdXAuc3RhdFxcXCIsXFxuK1xcdFxcdFxcdFxcdCAgICBcXFwibnJfZHlpbmdfZGVzY2VuZGFudHMgXFxcIiwgMCxcXG4rXFx0XFx0XFx0XFx0ICAgIEtNRU1fREVBRF9XQUlUX1JFVFJJRVMsXFxuK1xcdFxcdFxcdFxcdCAgICBERUZBVUxUX1dBSVRfSU5URVJWQUxfVVMpO1xcbiBcXHRpZiAoZGVhZClcXG4gXFx0XFx0Z290byBjbGVhbnVwO1xcbiBcXG5AQCAtMzUzLDcgKzM1Niw4IEBAIHN0YXRpYyBpbnQgdGVzdF9wZXJjcHVfYmFzaWMoY29uc3QgY2hhciAqcm9vdClcXG4ge1xcbiBcXHRpbnQgcmV0ID0gS1NGVF9GQUlMO1xcbiBcXHRjaGFyICpwYXJlbnQsICpjaGlsZDtcXG4tXFx0bG9uZyBjdXJyZW50LCBwZXJjcHUsIHNsYWI7XFxuK1xcdGxvbmcgY3VycmVudDtcXG4rXFx0czY0IHBlcmNwdSwgc2xhYjtcXG4gXFx0aW50IGk7XFxuIFxcbiBcXHRwYXJlbnQgPSBjZ19uYW1lKHJvb3QsIFxcXCJwZXJjcHVfYmFzaWNfdGVzdFxcXCIpO1xcbkBAIC0zODIsMTUgKzM4NiwxNSBAQCBzdGF0aWMgaW50IHRlc3RfcGVyY3B1X2Jhc2ljKGNvbnN0IGNoYXIgKnJvb3QpXFxuIFxcdH1cXG4gXFxuIFxcdGN1cnJlbnQgPSBjZ19yZWFkX2xvbmcocGFyZW50LCBcXFwibWVtb3J5LmN1cnJlbnRcXFwiKTtcXG4tXFx0cGVyY3B1ID0gY2dfcmVhZF9rZXlfbG9uZyhwYXJlbnQsIFxcXCJtZW1vcnkuc3RhdFxcXCIsIFxcXCJwZXJjcHUgXFxcIik7XFxuLVxcdHNsYWIgPSBjZ19yZWFkX2tleV9sb25nKHBhcmVudCwgXFxcIm1lbW9yeS5zdGF0XFxcIiwgXFxcInNsYWIgXFxcIik7XFxuK1xcdHBlcmNwdSA9IGNnX3JlYWRfa2V5X3M2NChwYXJlbnQsIFxcXCJtZW1vcnkuc3RhdFxcXCIsIFxcXCJwZXJjcHUgXFxcIik7XFxuK1xcdHNsYWIgPSBjZ19yZWFkX2tleV9zNjQocGFyZW50LCBcXFwibWVtb3J5LnN0YXRcXFwiLCBcXFwic2xhYiBcXFwiKTtcXG4gXFxuIFxcdGlmIChjdXJyZW50IFxcdTAwM2UgMCBcXHUwMDI2XFx1MDAyNiBwZXJjcHUgXFx1MDAzZSAwIFxcdTAwMjZcXHUwMDI2IHNsYWIgXFx1MDAzZT0gMCBcXHUwMDI2XFx1MDAyNlxcbi1cXHRcXHRcXHRsYWJzKGN1cnJlbnQgLSAocGVyY3B1ICsgc2xhYikpIFxcdTAwM2MgTUFYX1ZNU1RBVF9FUlJPUilcXG4rXFx0ICAgIGxsYWJzKGN1cnJlbnQgLSAocGVyY3B1ICsgc2xhYikpIFxcdTAwM2MgTUFYX1ZNU1RBVF9FUlJPUilcXG4gXFx0XFx0cmV0ID0gS1NGVF9QQVNTO1xcbiBcXHRlbHNlXFxuLVxcdFxcdHByaW50ZihcXFwibWVtb3J5LmN1cnJlbnQgJWxkXFxcXG5wZXJjcHUgJWxkXFxcXG5zbGFiICVsZFxcXFxuZGVsdGEgJWxkXFxcXG5cXFwiLFxcbi1cXHRcXHRcXHRjdXJyZW50LCBwZXJjcHUsIHNsYWIsIGN1cnJlbnQgLSAocGVyY3B1ICsgc2xhYikpO1xcbitcXHRcXHRwcmludGYoXFxcIm1lbW9yeS5jdXJyZW50ICVsZFxcXFxucGVyY3B1ICVsbGRcXFxcbnNsYWIgJWxsZFxcXFxuZGVsdGEgJWxsZFxcXFxuXFxcIixcXG4rXFx0XFx0ICAgICAgIGN1cnJlbnQsIHBlcmNwdSwgc2xhYiwgY3VycmVudCAtIChwZXJjcHUgKyBzbGFiKSk7XFxuIFxcbiBjbGVhbnVwX2NoaWxkcmVuOlxcbiBcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgMTAwMDsgaSsrKSB7XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2Nncm91cC90ZXN0X21lbWNvbnRyb2wuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2Nncm91cC90ZXN0X21lbWNvbnRyb2wuY1xcbmluZGV4IDNhODRkMDY4ZmJmMzYuLjUzOTY1MGMxZDU2MjYgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvY2dyb3VwL3Rlc3RfbWVtY29udHJvbC5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvY2dyb3VwL3Rlc3RfbWVtY29udHJvbC5jXFxuQEAgLTE5Miw3ICsxOTIsOCBAQCBzdGF0aWMgaW50IGFsbG9jX2Fub25fNTBNX2NoZWNrKGNvbnN0IGNoYXIgKmNncm91cCwgdm9pZCAqYXJnKVxcbiB7XFxuIFxcdHNpemVfdCBzaXplID0gTUIoNTApO1xcbiBcXHRjaGFyICpidWY7XFxuLVxcdGxvbmcgYW5vbiwgY3VycmVudDtcXG4rXFx0czY0IGFub247XFxuK1xcdGxvbmcgY3VycmVudDtcXG4gXFx0aW50IHJldCA9IC0xO1xcbiBcXG4gXFx0YnVmID0gYWxsb2NfYW5kX3BvcHVsYXRlX2Fub24oc2l6ZSk7XFxuQEAgLTIwNiw3ICsyMDcsNyBAQCBzdGF0aWMgaW50IGFsbG9jX2Fub25fNTBNX2NoZWNrKGNvbnN0IGNoYXIgKmNncm91cCwgdm9pZCAqYXJnKVxcbiBcXHRpZiAoIXZhbHVlc19jbG9zZShzaXplLCBjdXJyZW50LCAzKSlcXG4gXFx0XFx0Z290byBjbGVhbnVwO1xcbiBcXG4tXFx0YW5vbiA9IGNnX3JlYWRfa2V5X2xvbmcoY2dyb3VwLCBcXFwibWVtb3J5LnN0YXRcXFwiLCBcXFwiYW5vbiBcXFwiKTtcXG4rXFx0YW5vbiA9IGNnX3JlYWRfa2V5X3M2NChjZ3JvdXAsIFxcXCJtZW1vcnkuc3RhdFxcXCIsIFxcXCJhbm9uIFxcXCIpO1xcbiBcXHRpZiAoYW5vbiBcXHUwMDNjIDApXFxuIFxcdFxcdGdvdG8gY2xlYW51cDtcXG4gXFxuQEAgLTIyMyw3ICsyMjQsOCBAQCBzdGF0aWMgaW50IGFsbG9jX3BhZ2VjYWNoZV81ME1fY2hlY2soY29uc3QgY2hhciAqY2dyb3VwLCB2b2lkICphcmcpXFxuIHtcXG4gXFx0c2l6ZV90IHNpemUgPSBNQig1MCk7XFxuIFxcdGludCByZXQgPSAtMTtcXG4tXFx0bG9uZyBjdXJyZW50LCBmaWxlO1xcbitcXHRsb25nIGN1cnJlbnQ7XFxuK1xcdHM2NCBmaWxlO1xcbiBcXHRpbnQgZmQ7XFxuIFxcbiBcXHRmZCA9IGdldF90ZW1wX2ZkKCk7XFxuQEAgLTIzNyw3ICsyMzksNyBAQCBzdGF0aWMgaW50IGFsbG9jX3BhZ2VjYWNoZV81ME1fY2hlY2soY29uc3QgY2hhciAqY2dyb3VwLCB2b2lkICphcmcpXFxuIFxcdGlmIChjdXJyZW50IFxcdTAwM2Mgc2l6ZSlcXG4gXFx0XFx0Z290byBjbGVhbnVwO1xcbiBcXG4tXFx0ZmlsZSA9IGNnX3JlYWRfa2V5X2xvbmcoY2dyb3VwLCBcXFwibWVtb3J5LnN0YXRcXFwiLCBcXFwiZmlsZSBcXFwiKTtcXG4rXFx0ZmlsZSA9IGNnX3JlYWRfa2V5X3M2NChjZ3JvdXAsIFxcXCJtZW1vcnkuc3RhdFxcXCIsIFxcXCJmaWxlIFxcXCIpO1xcbiBcXHRpZiAoZmlsZSBcXHUwMDNjIDApXFxuIFxcdFxcdGdvdG8gY2xlYW51cDtcXG4gXFxuQEAgLTYyMywxMCArNjI1LDEwIEBAIHN0YXRpYyBpbnQgdGVzdF9tZW1jZ19wcm90ZWN0aW9uKGNvbnN0IGNoYXIgKnJvb3QsIGJvb2wgbWluKVxcbiBcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgQVJSQVlfU0laRShjaGlsZHJlbik7IGkrKykge1xcbiBcXHRcXHRpbnQgaWdub3JlX2xvd19ldmVudHNfaW5kZXggPSBoYXNfcmVjdXJzaXZlcHJvdCA/IDIgOiAtMTtcXG4gXFx0XFx0aW50IG5vX2xvd19ldmVudHNfaW5kZXggPSAxO1xcbi1cXHRcXHRsb25nIGxvdywgb29tO1xcbitcXHRcXHRzNjQgbG93LCBvb207XFxuIFxcbi1cXHRcXHRvb20gPSBjZ19yZWFkX2tleV9sb25nKGNoaWxkcmVuW2ldLCBcXFwibWVtb3J5LmV2ZW50c1xcXCIsIFxcXCJvb20gXFxcIik7XFxuLVxcdFxcdGxvdyA9IGNnX3JlYWRfa2V5X2xvbmcoY2hpbGRyZW5baV0sIFxcXCJtZW1vcnkuZXZlbnRzXFxcIiwgXFxcImxvdyBcXFwiKTtcXG4rXFx0XFx0b29tID0gY2dfcmVhZF9rZXlfczY0KGNoaWxkcmVuW2ldLCBcXFwibWVtb3J5LmV2ZW50c1xcXCIsIFxcXCJvb20gXFxcIik7XFxuK1xcdFxcdGxvdyA9IGNnX3JlYWRfa2V5X3M2NChjaGlsZHJlbltpXSwgXFxcIm1lbW9yeS5ldmVudHNcXFwiLCBcXFwibG93IFxcXCIpO1xcbiBcXG4gXFx0XFx0aWYgKG9vbSlcXG4gXFx0XFx0XFx0Z290byBjbGVhbnVwO1xcbkBAIC03MTEsNyArNzEzLDcgQEAgc3RhdGljIGludCB0ZXN0X21lbWNnX2hpZ2goY29uc3QgY2hhciAqcm9vdClcXG4ge1xcbiBcXHRpbnQgcmV0ID0gS1NGVF9GQUlMO1xcbiBcXHRjaGFyICptZW1jZztcXG4tXFx0bG9uZyBoaWdoO1xcbitcXHRzNjQgaGlnaDtcXG4gXFxuIFxcdG1lbWNnID0gY2dfbmFtZShyb290LCBcXFwibWVtY2dfdGVzdFxcXCIpO1xcbiBcXHRpZiAoIW1lbWNnKVxcbkBAIC03MzgsNyArNzQwLDcgQEAgc3RhdGljIGludCB0ZXN0X21lbWNnX2hpZ2goY29uc3QgY2hhciAqcm9vdClcXG4gXFx0aWYgKGNnX3J1bihtZW1jZywgYWxsb2NfcGFnZWNhY2hlX21heF8zME0sIE5VTEwpKVxcbiBcXHRcXHRnb3RvIGNsZWFudXA7XFxuIFxcbi1cXHRoaWdoID0gY2dfcmVhZF9rZXlfbG9uZyhtZW1jZywgXFxcIm1lbW9yeS5ldmVudHNcXFwiLCBcXFwiaGlnaCBcXFwiKTtcXG4rXFx0aGlnaCA9IGNnX3JlYWRfa2V5X3M2NChtZW1jZywgXFxcIm1lbW9yeS5ldmVudHNcXFwiLCBcXFwiaGlnaCBcXFwiKTtcXG4gXFx0aWYgKGhpZ2ggXFx1MDAzYz0gMClcXG4gXFx0XFx0Z290byBjbGVhbnVwO1xcbiBcXG5AQCAtNzc0LDggKzc3Niw4IEBAIHN0YXRpYyBpbnQgdGVzdF9tZW1jZ19oaWdoX3N5bmMoY29uc3QgY2hhciAqcm9vdClcXG4ge1xcbiBcXHRpbnQgcmV0ID0gS1NGVF9GQUlMLCBwaWQsIGZkID0gLTE7XFxuIFxcdGNoYXIgKm1lbWNnO1xcbi1cXHRsb25nIHByZV9oaWdoLCBwcmVfbWF4O1xcbi1cXHRsb25nIHBvc3RfaGlnaCwgcG9zdF9tYXg7XFxuK1xcdHM2NCBwcmVfaGlnaCwgcHJlX21heDtcXG4rXFx0czY0IHBvc3RfaGlnaCwgcG9zdF9tYXg7XFxuIFxcbiBcXHRtZW1jZyA9IGNnX25hbWUocm9vdCwgXFxcIm1lbWNnX3Rlc3RcXFwiKTtcXG4gXFx0aWYgKCFtZW1jZylcXG5AQCAtNzg0LDggKzc4Niw4IEBAIHN0YXRpYyBpbnQgdGVzdF9tZW1jZ19oaWdoX3N5bmMoY29uc3QgY2hhciAqcm9vdClcXG4gXFx0aWYgKGNnX2NyZWF0ZShtZW1jZykpXFxuIFxcdFxcdGdvdG8gY2xlYW51cDtcXG4gXFxuLVxcdHByZV9oaWdoID0gY2dfcmVhZF9rZXlfbG9uZyhtZW1jZywgXFxcIm1lbW9yeS5ldmVudHNcXFwiLCBcXFwiaGlnaCBcXFwiKTtcXG4tXFx0cHJlX21heCA9IGNnX3JlYWRfa2V5X2xvbmcobWVtY2csIFxcXCJtZW1vcnkuZXZlbnRzXFxcIiwgXFxcIm1heCBcXFwiKTtcXG4rXFx0cHJlX2hpZ2ggPSBjZ19yZWFkX2tleV9zNjQobWVtY2csIFxcXCJtZW1vcnkuZXZlbnRzXFxcIiwgXFxcImhpZ2ggXFxcIik7XFxuK1xcdHByZV9tYXggPSBjZ19yZWFkX2tleV9zNjQobWVtY2csIFxcXCJtZW1vcnkuZXZlbnRzXFxcIiwgXFxcIm1heCBcXFwiKTtcXG4gXFx0aWYgKHByZV9oaWdoIFxcdTAwM2MgMCB8fCBwcmVfbWF4IFxcdTAwM2MgMClcXG4gXFx0XFx0Z290byBjbGVhbnVwO1xcbiBcXG5AQCAtODA4LDggKzgxMCw4IEBAIHN0YXRpYyBpbnQgdGVzdF9tZW1jZ19oaWdoX3N5bmMoY29uc3QgY2hhciAqcm9vdClcXG4gXFxuIFxcdGNnX3dhaXRfZm9yKGZkKTtcXG4gXFxuLVxcdHBvc3RfaGlnaCA9IGNnX3JlYWRfa2V5X2xvbmcobWVtY2csIFxcXCJtZW1vcnkuZXZlbnRzXFxcIiwgXFxcImhpZ2ggXFxcIik7XFxuLVxcdHBvc3RfbWF4ID0gY2dfcmVhZF9rZXlfbG9uZyhtZW1jZywgXFxcIm1lbW9yeS5ldmVudHNcXFwiLCBcXFwibWF4IFxcXCIpO1xcbitcXHRwb3N0X2hpZ2ggPSBjZ19yZWFkX2tleV9zNjQobWVtY2csIFxcXCJtZW1vcnkuZXZlbnRzXFxcIiwgXFxcImhpZ2ggXFxcIik7XFxuK1xcdHBvc3RfbWF4ID0gY2dfcmVhZF9rZXlfczY0KG1lbWNnLCBcXFwibWVtb3J5LmV2ZW50c1xcXCIsIFxcXCJtYXggXFxcIik7XFxuIFxcdGlmIChwb3N0X2hpZ2ggXFx1MDAzYyAwIHx8IHBvc3RfbWF4IFxcdTAwM2MgMClcXG4gXFx0XFx0Z290byBjbGVhbnVwO1xcbiBcXG5AQCAtODM2LDcgKzgzOCw4IEBAIHN0YXRpYyBpbnQgdGVzdF9tZW1jZ19tYXgoY29uc3QgY2hhciAqcm9vdClcXG4ge1xcbiBcXHRpbnQgcmV0ID0gS1NGVF9GQUlMO1xcbiBcXHRjaGFyICptZW1jZztcXG4tXFx0bG9uZyBjdXJyZW50LCBtYXg7XFxuK1xcdGxvbmcgY3VycmVudDtcXG4rXFx0czY0IG1heDtcXG4gXFxuIFxcdG1lbWNnID0gY2dfbmFtZShyb290LCBcXFwibWVtY2dfdGVzdFxcXCIpO1xcbiBcXHRpZiAoIW1lbWNnKVxcbkBAIC04NjUsNyArODY4LDcgQEAgc3RhdGljIGludCB0ZXN0X21lbWNnX21heChjb25zdCBjaGFyICpyb290KVxcbiBcXHRpZiAoY3VycmVudCBcXHUwMDNlIE1CKDMwKSB8fCAhY3VycmVudClcXG4gXFx0XFx0Z290byBjbGVhbnVwO1xcbiBcXG4tXFx0bWF4ID0gY2dfcmVhZF9rZXlfbG9uZyhtZW1jZywgXFxcIm1lbW9yeS5ldmVudHNcXFwiLCBcXFwibWF4IFxcXCIpO1xcbitcXHRtYXggPSBjZ19yZWFkX2tleV9zNjQobWVtY2csIFxcXCJtZW1vcnkuZXZlbnRzXFxcIiwgXFxcIm1heCBcXFwiKTtcXG4gXFx0aWYgKG1heCBcXHUwMDNjPSAwKVxcbiBcXHRcXHRnb3RvIGNsZWFudXA7XFxuIFxcbkBAIC0xMDI5LDcgKzEwMzIsOCBAQCBzdGF0aWMgaW50IHRlc3RfbWVtY2dfc3dhcF9tYXhfcGVhayhjb25zdCBjaGFyICpyb290KVxcbiB7XFxuIFxcdGludCByZXQgPSBLU0ZUX0ZBSUw7XFxuIFxcdGNoYXIgKm1lbWNnO1xcbi1cXHRsb25nIG1heCwgcGVhaztcXG4rXFx0czY0IG1heDtcXG4rXFx0bG9uZyBwZWFrO1xcbiBcXHRzdHJ1Y3Qgc3RhdCBzcztcXG4gXFx0aW50IHN3YXBfcGVha19mZCA9IC0xLCBtZW1fcGVha19mZCA9IC0xO1xcbiBcXG5AQCAtMTEyMiwxMCArMTEyNiwxMCBAQCBzdGF0aWMgaW50IHRlc3RfbWVtY2dfc3dhcF9tYXhfcGVhayhjb25zdCBjaGFyICpyb290KVxcbiBcXHRpZiAoIWNnX3J1bihtZW1jZywgYWxsb2NfYW5vbiwgKHZvaWQgKilNQigxMDApKSlcXG4gXFx0XFx0Z290byBjbGVhbnVwO1xcbiBcXG4tXFx0aWYgKGNnX3JlYWRfa2V5X2xvbmcobWVtY2csIFxcXCJtZW1vcnkuZXZlbnRzXFxcIiwgXFxcIm9vbSBcXFwiKSAhPSAxKVxcbitcXHRpZiAoY2dfcmVhZF9rZXlfczY0KG1lbWNnLCBcXFwibWVtb3J5LmV2ZW50c1xcXCIsIFxcXCJvb20gXFxcIikgIT0gMSlcXG4gXFx0XFx0Z290byBjbGVhbnVwO1xcbiBcXG4tXFx0aWYgKGNnX3JlYWRfa2V5X2xvbmcobWVtY2csIFxcXCJtZW1vcnkuZXZlbnRzXFxcIiwgXFxcIm9vbV9raWxsIFxcXCIpICE9IDEpXFxuK1xcdGlmIChjZ19yZWFkX2tleV9zNjQobWVtY2csIFxcXCJtZW1vcnkuZXZlbnRzXFxcIiwgXFxcIm9vbV9raWxsIFxcXCIpICE9IDEpXFxuIFxcdFxcdGdvdG8gY2xlYW51cDtcXG4gXFxuIFxcdHBlYWsgPSBjZ19yZWFkX2xvbmcobWVtY2csIFxcXCJtZW1vcnkucGVha1xcXCIpO1xcbkBAIC0xMTg2LDcgKzExOTAsNyBAQCBzdGF0aWMgaW50IHRlc3RfbWVtY2dfc3dhcF9tYXhfcGVhayhjb25zdCBjaGFyICpyb290KVxcbiBcXHRpZiAoY2dfcnVuKG1lbWNnLCBhbGxvY19hbm9uXzUwTV9jaGVja19zd2FwLCAodm9pZCAqKU1CKDMwKSkpXFxuIFxcdFxcdGdvdG8gY2xlYW51cDtcXG4gXFxuLVxcdG1heCA9IGNnX3JlYWRfa2V5X2xvbmcobWVtY2csIFxcXCJtZW1vcnkuZXZlbnRzXFxcIiwgXFxcIm1heCBcXFwiKTtcXG4rXFx0bWF4ID0gY2dfcmVhZF9rZXlfczY0KG1lbWNnLCBcXFwibWVtb3J5LmV2ZW50c1xcXCIsIFxcXCJtYXggXFxcIik7XFxuIFxcdGlmIChtYXggXFx1MDAzYz0gMClcXG4gXFx0XFx0Z290byBjbGVhbnVwO1xcbiBcXG5AQCAtMTI0OCwxMCArMTI1MiwxMCBAQCBzdGF0aWMgaW50IHRlc3RfbWVtY2dfb29tX2V2ZW50cyhjb25zdCBjaGFyICpyb290KVxcbiBcXHRpZiAoY2dfcmVhZF9zdHJjbXAobWVtY2csIFxcXCJjZ3JvdXAucHJvY3NcXFwiLCBcXFwiXFxcIikpXFxuIFxcdFxcdGdvdG8gY2xlYW51cDtcXG4gXFxuLVxcdGlmIChjZ19yZWFkX2tleV9sb25nKG1lbWNnLCBcXFwibWVtb3J5LmV2ZW50c1xcXCIsIFxcXCJvb20gXFxcIikgIT0gMSlcXG4rXFx0aWYgKGNnX3JlYWRfa2V5X3M2NChtZW1jZywgXFxcIm1lbW9yeS5ldmVudHNcXFwiLCBcXFwib29tIFxcXCIpICE9IDEpXFxuIFxcdFxcdGdvdG8gY2xlYW51cDtcXG4gXFxuLVxcdGlmIChjZ19yZWFkX2tleV9sb25nKG1lbWNnLCBcXFwibWVtb3J5LmV2ZW50c1xcXCIsIFxcXCJvb21fa2lsbCBcXFwiKSAhPSAxKVxcbitcXHRpZiAoY2dfcmVhZF9rZXlfczY0KG1lbWNnLCBcXFwibWVtb3J5LmV2ZW50c1xcXCIsIFxcXCJvb21fa2lsbCBcXFwiKSAhPSAxKVxcbiBcXHRcXHRnb3RvIGNsZWFudXA7XFxuIFxcbiBcXHRyZXQgPSBLU0ZUX1BBU1M7XFxuQEAgLTEzNTQsMTMgKzEzNTgsMTQgQEAgc3RhdGljIGludCB0Y3BfY2xpZW50KGNvbnN0IGNoYXIgKmNncm91cCwgdW5zaWduZWQgc2hvcnQgcG9ydClcXG4gXFx0cmV0ID0gS1NGVF9GQUlMO1xcbiBcXHR3aGlsZSAocmV0cmllcy0tKSB7XFxuIFxcdFxcdHVpbnQ4X3QgYnVmWzB4MTAwMDAwXTtcXG4tXFx0XFx0bG9uZyBjdXJyZW50LCBzb2NrO1xcbitcXHRcXHRsb25nIGN1cnJlbnQ7XFxuK1xcdFxcdHM2NCBzb2NrO1xcbiBcXG4gXFx0XFx0aWYgKHJlYWQoc2ssIGJ1Ziwgc2l6ZW9mKGJ1ZikpIFxcdTAwM2M9IDApXFxuIFxcdFxcdFxcdGdvdG8gY2xvc2Vfc2s7XFxuIFxcbiBcXHRcXHRjdXJyZW50ID0gY2dfcmVhZF9sb25nKGNncm91cCwgXFxcIm1lbW9yeS5jdXJyZW50XFxcIik7XFxuLVxcdFxcdHNvY2sgPSBjZ19yZWFkX2tleV9sb25nKGNncm91cCwgXFxcIm1lbW9yeS5zdGF0XFxcIiwgXFxcInNvY2sgXFxcIik7XFxuK1xcdFxcdHNvY2sgPSBjZ19yZWFkX2tleV9zNjQoY2dyb3VwLCBcXFwibWVtb3J5LnN0YXRcXFwiLCBcXFwic29jayBcXFwiKTtcXG4gXFxuIFxcdFxcdGlmIChjdXJyZW50IFxcdTAwM2MgMCB8fCBzb2NrIFxcdTAwM2MgMClcXG4gXFx0XFx0XFx0Z290byBjbG9zZV9zaztcXG5AQCAtMTM5Miw3ICsxMzk3LDcgQEAgc3RhdGljIGludCB0ZXN0X21lbWNnX3NvY2soY29uc3QgY2hhciAqcm9vdClcXG4gXFx0aW50IGJpbmRfcmV0cmllcyA9IDUsIHJldCA9IEtTRlRfRkFJTCwgcGlkLCBlcnI7XFxuIFxcdHVuc2lnbmVkIHNob3J0IHBvcnQ7XFxuIFxcdGNoYXIgKm1lbWNnO1xcbi1cXHRsb25nIHNvY2tfcG9zdCA9IC0xO1xcbitcXHRzNjQgc29ja19wb3N0ID0gLTE7XFxuIFxcbiBcXHRtZW1jZyA9IGNnX25hbWUocm9vdCwgXFxcIm1lbWNnX3Rlc3RcXFwiKTtcXG4gXFx0aWYgKCFtZW1jZylcXG5AQCAtMTQ1OSw3ICsxNDY0LDcgQEAgc3RhdGljIGludCB0ZXN0X21lbWNnX3NvY2soY29uc3QgY2hhciAqcm9vdClcXG4gXFx0ICogc2NoZWR1bGluZyBzbGFjaykgYW5kIHJlcXVpcmUgdGhhdCB0aGUgXFxcInNvY2sgXFxcIiBjb3VudGVyXFxuIFxcdCAqIGV2ZW50dWFsbHkgZHJvcHMgdG8gemVyby5cXG4gXFx0ICovXFxuLVxcdHNvY2tfcG9zdCA9IGNnX3JlYWRfa2V5X2xvbmdfcG9sbChtZW1jZywgXFxcIm1lbW9yeS5zdGF0XFxcIiwgXFxcInNvY2sgXFxcIiwgMCxcXG4rXFx0c29ja19wb3N0ID0gY2dfcmVhZF9rZXlfczY0X3BvbGwobWVtY2csIFxcXCJtZW1vcnkuc3RhdFxcXCIsIFxcXCJzb2NrIFxcXCIsIDAsXFxuIFxcdFxcdFxcdFxcdFxcdCBNRU1DR19TT0NLU1RBVF9XQUlUX1JFVFJJRVMsXFxuIFxcdFxcdFxcdFxcdFxcdCBERUZBVUxUX1dBSVRfSU5URVJWQUxfVVMpO1xcbiBcXHRpZiAoc29ja19wb3N0KVxcbkBAIC0xNDg0LDcgKzE0ODksNyBAQCBzdGF0aWMgaW50IHRlc3RfbWVtY2dfb29tX2dyb3VwX2xlYWZfZXZlbnRzKGNvbnN0IGNoYXIgKnJvb3QpXFxuIHtcXG4gXFx0aW50IHJldCA9IEtTRlRfRkFJTDtcXG4gXFx0Y2hhciAqcGFyZW50LCAqY2hpbGQ7XFxuLVxcdGxvbmcgcGFyZW50X29vbV9ldmVudHM7XFxuK1xcdHM2NCBwYXJlbnRfb29tX2V2ZW50cztcXG4gXFxuIFxcdHBhcmVudCA9IGNnX25hbWUocm9vdCwgXFxcIm1lbWNnX3Rlc3RfMFxcXCIpO1xcbiBcXHRjaGlsZCA9IGNnX25hbWUocm9vdCwgXFxcIm1lbWNnX3Rlc3RfMC9tZW1jZ190ZXN0XzFcXFwiKTtcXG5AQCAtMTUxOSwxMSArMTUyNCwxMSBAQCBzdGF0aWMgaW50IHRlc3RfbWVtY2dfb29tX2dyb3VwX2xlYWZfZXZlbnRzKGNvbnN0IGNoYXIgKnJvb3QpXFxuIFxcdGlmIChjZ190ZXN0X3Byb2Nfa2lsbGVkKGNoaWxkKSlcXG4gXFx0XFx0Z290byBjbGVhbnVwO1xcbiBcXG4tXFx0aWYgKGNnX3JlYWRfa2V5X2xvbmcoY2hpbGQsIFxcXCJtZW1vcnkuZXZlbnRzXFxcIiwgXFxcIm9vbV9raWxsIFxcXCIpIFxcdTAwM2M9IDApXFxuK1xcdGlmIChjZ19yZWFkX2tleV9zNjQoY2hpbGQsIFxcXCJtZW1vcnkuZXZlbnRzXFxcIiwgXFxcIm9vbV9raWxsIFxcXCIpIFxcdTAwM2M9IDApXFxuIFxcdFxcdGdvdG8gY2xlYW51cDtcXG4gXFxuLVxcdHBhcmVudF9vb21fZXZlbnRzID0gY2dfcmVhZF9rZXlfbG9uZyhcXG4tXFx0XFx0XFx0cGFyZW50LCBcXFwibWVtb3J5LmV2ZW50c1xcXCIsIFxcXCJvb21fa2lsbCBcXFwiKTtcXG4rXFx0cGFyZW50X29vbV9ldmVudHMgPVxcbitcXHRcXHRjZ19yZWFkX2tleV9zNjQocGFyZW50LCBcXFwibWVtb3J5LmV2ZW50c1xcXCIsIFxcXCJvb21fa2lsbCBcXFwiKTtcXG4gXFx0LypcXG4gXFx0ICogSWYgbWVtb3J5X2xvY2FsZXZlbnRzIGlzIG5vdCBlbmFibGVkICh0aGUgZGVmYXVsdCksIHRoZSBwYXJlbnQgc2hvdWxkXFxuIFxcdCAqIGNvdW50IE9PTSBldmVudHMgaW4gaXRzIGNoaWxkcmVuIGdyb3Vwcy4gT3RoZXJ3aXNlLCBpdCBzaG91bGQgbm90XFxuQEAgLTE2MzksNyArMTY0NCw3IEBAIHN0YXRpYyBpbnQgdGVzdF9tZW1jZ19vb21fZ3JvdXBfc2NvcmVfZXZlbnRzKGNvbnN0IGNoYXIgKnJvb3QpXFxuIFxcdGlmICghY2dfcnVuKG1lbWNnLCBhbGxvY19hbm9uLCAodm9pZCAqKU1CKDEwMCkpKVxcbiBcXHRcXHRnb3RvIGNsZWFudXA7XFxuIFxcbi1cXHRpZiAoY2dfcmVhZF9rZXlfbG9uZyhtZW1jZywgXFxcIm1lbW9yeS5ldmVudHNcXFwiLCBcXFwib29tX2tpbGwgXFxcIikgIT0gMylcXG4rXFx0aWYgKGNnX3JlYWRfa2V5X3M2NChtZW1jZywgXFxcIm1lbW9yeS5ldmVudHNcXFwiLCBcXFwib29tX2tpbGwgXFxcIikgIT0gMylcXG4gXFx0XFx0Z290byBjbGVhbnVwO1xcbiBcXG4gXFx0aWYgKGtpbGwoc2FmZV9waWQsIFNJR0tJTEwpKVxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9jZ3JvdXAvdGVzdF9waWRzLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9jZ3JvdXAvdGVzdF9waWRzLmNcXG5pbmRleCA3MTAxMDliNTNkZmU5Li5mNGQ1YmM5ZjVmMjRmIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2Nncm91cC90ZXN0X3BpZHMuY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2Nncm91cC90ZXN0X3BpZHMuY1xcbkBAIC0xMTEsMTIgKzExMSwxMSBAQCBzdGF0aWMgaW50IHRlc3RfcGlkc19ldmVudHMoY29uc3QgY2hhciAqcm9vdClcXG4gXFx0aWYgKGtpbGwocGlkLCBTSUdJTlQpKVxcbiBcXHRcXHRnb3RvIGNsZWFudXA7XFxuIFxcbi1cXHRpZiAoY2dfcmVhZF9rZXlfbG9uZyhjZ19jaGlsZCwgXFxcInBpZHMuZXZlbnRzXFxcIiwgXFxcIm1heCBcXFwiKSAhPSAwKVxcbitcXHRpZiAoY2dfcmVhZF9rZXlfczY0KGNnX2NoaWxkLCBcXFwicGlkcy5ldmVudHNcXFwiLCBcXFwibWF4IFxcXCIpICE9IDApXFxuIFxcdFxcdGdvdG8gY2xlYW51cDtcXG4tXFx0aWYgKGNnX3JlYWRfa2V5X2xvbmcoY2dfcGFyZW50LCBcXFwicGlkcy5ldmVudHNcXFwiLCBcXFwibWF4IFxcXCIpICE9IDEpXFxuK1xcdGlmIChjZ19yZWFkX2tleV9zNjQoY2dfcGFyZW50LCBcXFwicGlkcy5ldmVudHNcXFwiLCBcXFwibWF4IFxcXCIpICE9IDEpXFxuIFxcdFxcdGdvdG8gY2xlYW51cDtcXG4gXFxuLVxcbiBcXHRyZXQgPSBLU0ZUX1BBU1M7XFxuIFxcbiBjbGVhbnVwOlxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9jZ3JvdXAvdGVzdF96c3dhcC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvY2dyb3VwL3Rlc3RfenN3YXAuY1xcbmluZGV4IDYwOWM0OGYzODUyNDEuLjZlN2VlMTFiYzk3YTUgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvY2dyb3VwL3Rlc3RfenN3YXAuY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2Nncm91cC90ZXN0X3pzd2FwLmNcXG5AQCAtNTksMTQgKzU5LDE0IEBAIHN0YXRpYyBpbnQgZ2V0X3pzd2FwX3N0b3JlZF9wYWdlcyhzaXplX3QgKnZhbHVlKVxcbiBcXHRyZXR1cm4gcmVhZF9pbnQoUEFUSF9aU1dBUF9TVE9SRURfUEFHRVMsIHZhbHVlKTtcXG4gfVxcbiBcXG4tc3RhdGljIGxvbmcgZ2V0X2NnX3diX2NvdW50KGNvbnN0IGNoYXIgKmNnKVxcbitzdGF0aWMgczY0IGdldF9jZ193Yl9jb3VudChjb25zdCBjaGFyICpjZylcXG4ge1xcbi1cXHRyZXR1cm4gY2dfcmVhZF9rZXlfbG9uZyhjZywgXFxcIm1lbW9yeS5zdGF0XFxcIiwgXFxcInpzd3B3YlxcXCIpO1xcbitcXHRyZXR1cm4gY2dfcmVhZF9rZXlfczY0KGNnLCBcXFwibWVtb3J5LnN0YXRcXFwiLCBcXFwienN3cHdiXFxcIik7XFxuIH1cXG4gXFxuLXN0YXRpYyBsb25nIGdldF96c3dwb3V0KGNvbnN0IGNoYXIgKmNncm91cClcXG4rc3RhdGljIHM2NCBnZXRfenN3cG91dChjb25zdCBjaGFyICpjZ3JvdXApXFxuIHtcXG4tXFx0cmV0dXJuIGNnX3JlYWRfa2V5X2xvbmcoY2dyb3VwLCBcXFwibWVtb3J5LnN0YXRcXFwiLCBcXFwienN3cG91dCBcXFwiKTtcXG4rXFx0cmV0dXJuIGNnX3JlYWRfa2V5X3M2NChjZ3JvdXAsIFxcXCJtZW1vcnkuc3RhdFxcXCIsIFxcXCJ6c3dwb3V0IFxcXCIpO1xcbiB9XFxuIFxcbiBzdGF0aWMgaW50IGFsbG9jYXRlX2FuZF9yZWFkX2J5dGVzKGNvbnN0IGNoYXIgKmNncm91cCwgdm9pZCAqYXJnKVxcbkBAIC0xMjUsOSArMTI1LDEwIEBAIHN0YXRpYyBjaGFyICpzZXR1cF90ZXN0X2dyb3VwXzFNKGNvbnN0IGNoYXIgKnJvb3QsIGNvbnN0IGNoYXIgKm5hbWUpXFxuICAqIFdyaXRlYmFjayBpcyBhc3luY2hyb25vdXM7IHBvbGwgdW50aWwgYXQgbGVhc3Qgb25lIHdyaXRlYmFjayBoYXNcXG4gICogYmVlbiByZWNvcmRlZCBmb3IgQGNnLCBvciB1bnRpbCBAdGltZW91dF9tcyBoYXMgZWxhcHNlZC5cXG4gICovXFxuLXN0YXRpYyBsb25nIHdhaXRfZm9yX3dyaXRlYmFjayhjb25zdCBjaGFyICpjZywgaW50IHRpbWVvdXRfbXMpXFxuK3N0YXRpYyBzNjQgd2FpdF9mb3Jfd3JpdGViYWNrKGNvbnN0IGNoYXIgKmNnLCBpbnQgdGltZW91dF9tcylcXG4ge1xcbi1cXHRsb25nIGVsYXBzZWQsIGNvdW50O1xcbitcXHRsb25nIGVsYXBzZWQ7XFxuK1xcdHM2NCBjb3VudDtcXG4gXFx0Zm9yIChlbGFwc2VkID0gMDsgZWxhcHNlZCBcXHUwMDNjIHRpbWVvdXRfbXM7IGVsYXBzZWQgKz0gMTAwKSB7XFxuIFxcdFxcdGNvdW50ID0gZ2V0X2NnX3diX2NvdW50KGNnKTtcXG4gXFxuQEAgLTE0Nyw3ICsxNDgsNyBAQCBzdGF0aWMgbG9uZyB3YWl0X2Zvcl93cml0ZWJhY2soY29uc3QgY2hhciAqY2csIGludCB0aW1lb3V0X21zKVxcbiAgKi9cXG4gc3RhdGljIGludCB0ZXN0X3pzd2FwX3VzYWdlKGNvbnN0IGNoYXIgKnJvb3QpXFxuIHtcXG4tXFx0bG9uZyB6c3dwb3V0X2JlZm9yZSwgenN3cG91dF9hZnRlcjtcXG4rXFx0czY0IHpzd3BvdXRfYmVmb3JlLCB6c3dwb3V0X2FmdGVyO1xcbiBcXHRpbnQgcmV0ID0gS1NGVF9GQUlMO1xcbiBcXHRjaGFyICp0ZXN0X2dyb3VwO1xcbiBcXG5AQCAtMTkxLDcgKzE5Miw4IEBAIHN0YXRpYyBpbnQgdGVzdF9zd2FwaW5fbm96c3dhcChjb25zdCBjaGFyICpyb290KVxcbiB7XFxuIFxcdGludCByZXQgPSBLU0ZUX0ZBSUw7XFxuIFxcdGNoYXIgKnRlc3RfZ3JvdXAsIG1lbV9tYXhfYnVmWzMyXTtcXG4tXFx0bG9uZyBzd2FwX3BlYWssIHpzd3BvdXQsIG1pbl9zd2FwO1xcbitcXHRsb25nIHN3YXBfcGVhaywgbWluX3N3YXA7XFxuK1xcdHM2NCB6c3dwb3V0O1xcbiBcXHRzaXplX3QgYWxsb2NhdGlvbl9zaXplID0gcGFnZV9zaXplICogNTEyO1xcbiBcXG4gXFx0bWluX3N3YXAgPSBhbGxvY2F0aW9uX3NpemUgLyA0O1xcbkBAIC0yNDgsNyArMjUwLDcgQEAgc3RhdGljIGludCB0ZXN0X3pzd2FwaW4oY29uc3QgY2hhciAqcm9vdClcXG4ge1xcbiBcXHRpbnQgcmV0ID0gS1NGVF9GQUlMO1xcbiBcXHRjaGFyICp0ZXN0X2dyb3VwO1xcbi1cXHRsb25nIHpzd3BpbjtcXG4rXFx0czY0IHpzd3BpbjtcXG4gXFxuIFxcdHRlc3RfZ3JvdXAgPSBjZ19uYW1lKHJvb3QsIFxcXCJ6c3dhcGluX3Rlc3RcXFwiKTtcXG4gXFx0aWYgKCF0ZXN0X2dyb3VwKVxcbkBAIC0yNjQsNyArMjY2LDcgQEAgc3RhdGljIGludCB0ZXN0X3pzd2FwaW4oY29uc3QgY2hhciAqcm9vdClcXG4gXFx0aWYgKGNnX3J1bih0ZXN0X2dyb3VwLCBhbGxvY2F0ZV9hbmRfcmVhZF9ieXRlcywgKHZvaWQgKilNQigzMikpKVxcbiBcXHRcXHRnb3RvIG91dDtcXG4gXFxuLVxcdHpzd3BpbiA9IGNnX3JlYWRfa2V5X2xvbmcodGVzdF9ncm91cCwgXFxcIm1lbW9yeS5zdGF0XFxcIiwgXFxcInpzd3BpbiBcXFwiKTtcXG4rXFx0enN3cGluID0gY2dfcmVhZF9rZXlfczY0KHRlc3RfZ3JvdXAsIFxcXCJtZW1vcnkuc3RhdFxcXCIsIFxcXCJ6c3dwaW4gXFxcIik7XFxuIFxcdGlmICh6c3dwaW4gXFx1MDAzYyAwKSB7XFxuIFxcdFxcdGtzZnRfcHJpbnRfbXNnKFxcXCJmYWlsZWQgdG8gZ2V0IHpzd3BpblxcXFxuXFxcIik7XFxuIFxcdFxcdGdvdG8gb3V0O1xcbkBAIC0zNTUsMTEgKzM1NywxMSBAQCBzdGF0aWMgaW50IGF0dGVtcHRfd3JpdGViYWNrKGNvbnN0IGNoYXIgKmNncm91cCwgdm9pZCAqYXJnKVxcbiBcXG4gc3RhdGljIGludCB0ZXN0X3pzd2FwX3dyaXRlYmFja19vbmUoY29uc3QgY2hhciAqY2dyb3VwLCBib29sIHdiKVxcbiB7XFxuLVxcdGxvbmcgenN3cHdiX2JlZm9yZSwgenN3cHdiX2FmdGVyO1xcbitcXHRzNjQgenN3cHdiX2JlZm9yZSwgenN3cHdiX2FmdGVyO1xcbiBcXG4gXFx0enN3cHdiX2JlZm9yZSA9IGdldF9jZ193Yl9jb3VudChjZ3JvdXApO1xcbiBcXHRpZiAoenN3cHdiX2JlZm9yZSAhPSAwKSB7XFxuLVxcdFxcdGtzZnRfcHJpbnRfbXNnKFxcXCJ6c3dwd2JfYmVmb3JlID0gJWxkIGluc3RlYWQgb2YgMFxcXFxuXFxcIiwgenN3cHdiX2JlZm9yZSk7XFxuK1xcdFxcdGtzZnRfcHJpbnRfbXNnKFxcXCJ6c3dwd2JfYmVmb3JlID0gJWxsZCBpbnN0ZWFkIG9mIDBcXFxcblxcXCIsIHpzd3B3Yl9iZWZvcmUpO1xcbiBcXHRcXHRyZXR1cm4gLTE7XFxuIFxcdH1cXG4gXFxuQEAgLTM3NSw3ICszNzcsNyBAQCBzdGF0aWMgaW50IHRlc3RfenN3YXBfd3JpdGViYWNrX29uZShjb25zdCBjaGFyICpjZ3JvdXAsIGJvb2wgd2IpXFxuIFxcdFxcdHJldHVybiAtMTtcXG4gXFxuIFxcdGlmICh3YiAhPSAhIXpzd3B3Yl9hZnRlcikge1xcbi1cXHRcXHRrc2Z0X3ByaW50X21zZyhcXFwienN3cHdiX2FmdGVyIGlzICVsZCB3aGlsZSB3YiBpcyAlc1xcXFxuXFxcIixcXG4rXFx0XFx0a3NmdF9wcmludF9tc2coXFxcInpzd3B3Yl9hZnRlciBpcyAlbGxkIHdoaWxlIHdiIGlzICVzXFxcXG5cXFwiLFxcbiBcXHRcXHRcXHRcXHR6c3dwd2JfYWZ0ZXIsIHdiID8gXFxcImVuYWJsZWRcXFwiIDogXFxcImRpc2FibGVkXFxcIik7XFxuIFxcdFxcdHJldHVybiAtMTtcXG4gXFx0fVxcbkBAIC00MDgsNiArNDEwLDggQEAgc3RhdGljIGludCB0ZXN0X3pzd2FwX3dyaXRlYmFjayhjb25zdCBjaGFyICpyb290LCBib29sIHdiKVxcbiBcXHQgKiBUaHVzLCB0aGUgcGFyZW50J3Mgc2V0dGluZyBzaGFsbCBiZSB3aGF0J3MgaW4gZWZmZWN0LiAqL1xcbiBcXHRpZiAoY2dfd3JpdGUodGVzdF9ncm91cCwgXFxcIm1lbW9yeS56c3dhcC5tYXhcXFwiLCBcXFwibWF4XFxcIikpXFxuIFxcdFxcdGdvdG8gb3V0O1xcbitcXHRpZiAoY2dfcmVhZF9zdHJjbXBfd2FpdCh0ZXN0X2dyb3VwLCBcXFwiY2dyb3VwLmV2ZW50c1xcXCIsIFxcXCJwb3B1bGF0ZWQgMFxcXFxuXFxcIikpXFxuK1xcdFxcdGdvdG8gb3V0O1xcbiBcXHRpZiAoY2dfd3JpdGUodGVzdF9ncm91cCwgXFxcImNncm91cC5zdWJ0cmVlX2NvbnRyb2xcXFwiLCBcXFwiK21lbW9yeVxcXCIpKVxcbiBcXHRcXHRnb3RvIG91dDtcXG4gXFxuQEAgLTQ4NSw3ICs0ODksNyBAQCBzdGF0aWMgaW50IHRlc3Rfbm9faW52YXNpdmVfY2dyb3VwX3Nocmluayhjb25zdCBjaGFyICpyb290KVxcbiBcXHRcXHRtZW1zZXQoXFx1MDAyNnp3X2FsbG9jYXRpb25bb2ZmXSwgMCwgcGFnZV9zaXplKTtcXG4gXFx0XFx0bWVtc2V0KFxcdTAwMjZ6d19hbGxvY2F0aW9uW29mZl0sICdhJywgcGFnZV9zaXplLzQpO1xcbiBcXHR9XFxuLVxcdGlmIChjZ19yZWFkX2tleV9sb25nKHp3X2dyb3VwLCBcXFwibWVtb3J5LnN0YXRcXFwiLCBcXFwienN3YXBwZWRcXFwiKSBcXHUwMDNjIDEpXFxuK1xcdGlmIChjZ19yZWFkX2tleV9zNjQoendfZ3JvdXAsIFxcXCJtZW1vcnkuc3RhdFxcXCIsIFxcXCJ6c3dhcHBlZFxcXCIpIFxcdTAwM2MgMSlcXG4gXFx0XFx0Z290byBvdXQ7XFxuIFxcbiBcXHQvKiBQdXNoIHdiX2dyb3VwIG1lbW9yeSBpbnRvIHpzd2FwIHdpdGggaGFyZC10by1jb21wcmVzcyBkYXRhIHRvIHRyaWdnZXIgd2IgKi9cXG5AQCAtNjI4LDExICs2MzIsMTIgQEAgc3RhdGljIGludCB0ZXN0X25vX2ttZW1fYnlwYXNzKGNvbnN0IGNoYXIgKnJvb3QpXFxuIFxcdFxcdFxcdGJyZWFrO1xcbiBcXHRcXHQvKiBJZiBtZW1vcnkgd2FzIHB1c2hlZCB0byB6c3dhcCwgdmVyaWZ5IGl0IGJlbG9uZ3MgdG8gbWVtY2cgKi9cXG4gXFx0XFx0aWYgKHN0b3JlZF9wYWdlcyBcXHUwMDNlIHN0b3JlZF9wYWdlc190aHJlc2hvbGQpIHtcXG4tXFx0XFx0XFx0aW50IHpzd2FwcGVkID0gY2dfcmVhZF9rZXlfbG9uZyh0ZXN0X2dyb3VwLCBcXFwibWVtb3J5LnN0YXRcXFwiLCBcXFwienN3YXBwZWQgXFxcIik7XFxuLVxcdFxcdFxcdGludCBkZWx0YSA9IHN0b3JlZF9wYWdlcyAqIHBhZ2Vfc2l6ZSAtIHpzd2FwcGVkO1xcbi1cXHRcXHRcXHRpbnQgcmVzdWx0X29rID0gZGVsdGEgXFx1MDAzYyBzdG9yZWRfcGFnZXMgKiBwYWdlX3NpemUgLyA0O1xcbitcXHRcXHRcXHRzNjQgenN3YXBwZWQgPSBjZ19yZWFkX2tleV9zNjQoXFxuK1xcdFxcdFxcdFxcdHRlc3RfZ3JvdXAsIFxcXCJtZW1vcnkuc3RhdFxcXCIsIFxcXCJ6c3dhcHBlZCBcXFwiKTtcXG4rXFx0XFx0XFx0czY0IGRlbHRhID0gKHM2NClzdG9yZWRfcGFnZXMgKiBwYWdlX3NpemUgLSB6c3dhcHBlZDtcXG4rXFx0XFx0XFx0czY0IG1heF9kZWx0YSA9IChzNjQpc3RvcmVkX3BhZ2VzICogcGFnZV9zaXplIC8gNDtcXG4gXFxuLVxcdFxcdFxcdHJldCA9IHJlc3VsdF9vayA/IEtTRlRfUEFTUyA6IEtTRlRfRkFJTDtcXG4rXFx0XFx0XFx0cmV0ID0gKGRlbHRhIFxcdTAwM2MgbWF4X2RlbHRhKSA/IEtTRlRfUEFTUyA6IEtTRlRfRkFJTDtcXG4gXFx0XFx0XFx0YnJlYWs7XFxuIFxcdFxcdH1cXG4gXFx0fVxcbkBAIC03MDEsOSArNzA2LDkgQEAgc3RhdGljIGludCBhbGxvY2F0ZV9yYW5kb21fYW5kX3dhaXQoY29uc3QgY2hhciAqY2dyb3VwLCB2b2lkICphcmcpXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbi1zdGF0aWMgbG9uZyBnZXRfenN3YXBfaW5jb21wKGNvbnN0IGNoYXIgKmNncm91cClcXG4rc3RhdGljIHM2NCBnZXRfenN3YXBfaW5jb21wKGNvbnN0IGNoYXIgKmNncm91cClcXG4ge1xcbi1cXHRyZXR1cm4gY2dfcmVhZF9rZXlfbG9uZyhjZ3JvdXAsIFxcXCJtZW1vcnkuc3RhdFxcXCIsIFxcXCJ6c3dhcF9pbmNvbXAgXFxcIik7XFxuK1xcdHJldHVybiBjZ19yZWFkX2tleV9zNjQoY2dyb3VwLCBcXFwibWVtb3J5LnN0YXRcXFwiLCBcXFwienN3YXBfaW5jb21wIFxcXCIpO1xcbiB9XFxuIFxcbiAvKlxcbkBAIC03MTksNyArNzI0LDcgQEAgc3RhdGljIGludCB0ZXN0X3pzd2FwX2luY29tcHJlc3NpYmxlKGNvbnN0IGNoYXIgKnJvb3QpXFxuIFxcdGludCByZXQgPSBLU0ZUX0ZBSUw7XFxuIFxcdHN0cnVjdCBpbmNvbXBfY2hpbGRfYXJncyAqdmFsdWVzO1xcbiBcXHRjaGFyICp0ZXN0X2dyb3VwO1xcbi1cXHRsb25nIHpzd2FwX2luY29tcDtcXG4rXFx0czY0IHpzd2FwX2luY29tcDtcXG4gXFx0cGlkX3QgY2hpbGRfcGlkO1xcbiBcXHRpbnQgY2hpbGRfc3RhdHVzO1xcbiBcXHRjaGFyIGJ1ZjtcXG5AQCAtNzU1LDEzICs3NjAsMTUgQEAgc3RhdGljIGludCB0ZXN0X3pzd2FwX2luY29tcHJlc3NpYmxlKGNvbnN0IGNoYXIgKnJvb3QpXFxuIFxcbiBcXHR6c3dhcF9pbmNvbXAgPSBnZXRfenN3YXBfaW5jb21wKHRlc3RfZ3JvdXApO1xcbiBcXHRpZiAoenN3YXBfaW5jb21wIFxcdTAwM2M9IDApIHtcXG4tXFx0XFx0bG9uZyB6c3dwb3V0ID0gZ2V0X3pzd3BvdXQodGVzdF9ncm91cCk7XFxuLVxcdFxcdGxvbmcgenN3YXBwZWQgPSBjZ19yZWFkX2tleV9sb25nKHRlc3RfZ3JvdXAsIFxcXCJtZW1vcnkuc3RhdFxcXCIsIFxcXCJ6c3dhcHBlZCBcXFwiKTtcXG4tXFx0XFx0bG9uZyB6c3dhcF9iID0gY2dfcmVhZF9rZXlfbG9uZyh0ZXN0X2dyb3VwLCBcXFwibWVtb3J5LnN0YXRcXFwiLCBcXFwienN3YXAgXFxcIik7XFxuLVxcbi1cXHRcXHRrc2Z0X3ByaW50X21zZyhcXFwienN3YXBfaW5jb21wIG5vdCBpbmNyZWFzZWQ6ICVsZFxcXFxuXFxcIiwgenN3YXBfaW5jb21wKTtcXG4tXFx0XFx0a3NmdF9wcmludF9tc2coXFxcImRlYnVnOiB6c3dwb3V0PSVsZCB6c3dhcHBlZD0lbGQgenN3YXBfYj0lbGRcXFxcblxcXCIsXFxuLVxcdFxcdFxcdCAgICAgICB6c3dwb3V0LCB6c3dhcHBlZCwgenN3YXBfYik7XFxuK1xcdFxcdHM2NCB6c3dwb3V0ID0gZ2V0X3pzd3BvdXQodGVzdF9ncm91cCk7XFxuK1xcdFxcdHM2NCB6c3dhcHBlZCA9XFxuK1xcdFxcdFxcdGNnX3JlYWRfa2V5X3M2NCh0ZXN0X2dyb3VwLCBcXFwibWVtb3J5LnN0YXRcXFwiLCBcXFwienN3YXBwZWQgXFxcIik7XFxuK1xcdFxcdHM2NCB6c3dhcF9iID1cXG4rXFx0XFx0XFx0Y2dfcmVhZF9rZXlfczY0KHRlc3RfZ3JvdXAsIFxcXCJtZW1vcnkuc3RhdFxcXCIsIFxcXCJ6c3dhcCBcXFwiKTtcXG4rXFxuK1xcdFxcdGtzZnRfcHJpbnRfbXNnKFxcXCJ6c3dhcF9pbmNvbXAgbm90IGluY3JlYXNlZDogJWxsZFxcXFxuXFxcIiwgenN3YXBfaW5jb21wKTtcXG4rXFx0XFx0a3NmdF9wcmludF9tc2coXFxcImRlYnVnOiB6c3dwb3V0PSVsbGQgenN3YXBwZWQ9JWxsZCB6c3dhcF9iPSVsbGRcXFxcblxcXCIsXFxuK1xcdFxcdFxcdFxcdHpzd3BvdXQsIHpzd2FwcGVkLCB6c3dhcF9iKTtcXG4gXFx0XFx0a3NmdF9wcmludF9tc2coXFxcImRlYnVnOiBtYWR2aXNlIHJldD0lZCBlcnJubz0lZFxcXFxuXFxcIixcXG4gXFx0XFx0XFx0ICAgICAgIHZhbHVlcy1cXHUwMDNlbWFkdmlzZV9yZXQsIHZhbHVlcy1cXHUwMDNlbWFkdmlzZV9lcnJubyk7XFxuIFxcdFxcdGdvdG8gb3V0X2tpbGw7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDA4OjUxOjE3LjE5MTMyMzU2MVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6NDUzNDY2MDY1MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgb25seSB1c2VyLXNwYWNlIGNncm91cCBzZWxmLXRlc3RzIHVuZGVyIHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2Nncm91cC8gYW5kIGRvZXMgbm90IHRvdWNoIGFueSBrZXJuZWwgY29kZSBvciBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzXG50b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsXG5hbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLlxuXG4tIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOlxuICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkXG4gIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuXG4gIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCxcbiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLlxuXG4tIERPIE5PVCBCTElORExZIFRSVVNUIFwiTk8gRlVOQ1RJT05BTCBDSEFOR0VcIiAoTkZDSSkgT1IgXCJSRUZBQ1RPUklOR1wiIENMQUlNUzpcbiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyBcImNsZWFudXBzXCIsIFwicmVmYWN0b3JpbmdzXCIsIG9yIHN0YXRlXG4gIFwiTm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWRcIi4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuXG4gIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudFxuICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy5cbiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC5cblxuLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDpcbiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLFxuICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy5cbiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlclxuICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4yLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6XG5cbi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczpcbiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuXG4gICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pXG4gICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLlxuICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzXG4gICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy5cbiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuXG4tIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZTpcbiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOlxuICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZ1xuICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLlxuICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOlxuLSBDb3JlIFN1YnN5c3RlbXM6XG4gICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLFxuICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy5cbi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOlxuICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy5cbi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOlxuICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy5cbi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczpcbiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG40LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTilcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5XaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjpcblxuLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6XG4gIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzXG4gIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0XG4gIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLlxuICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgXCJmb2N1c2VkXCIsXG4gIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy5cblxuLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6XG4gIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50c1xuICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy5cblxuLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6XG4gIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2tcbiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuXG4gIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlclxuICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG41LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZTpcbi0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbi0gQ2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC5cbi0gU3RyaXAgYW55ICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDExYTlmMDlmNTYwYjAyNjk1NDAxZGQyYzZjYzNmMTk5N2Y3OGE2NDJcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU3VuIFNlcCA2IDA4OjUxOjE1IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvY2dyb3VwL2xpYi9jZ3JvdXBfdXRpbC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvY2dyb3VwL2xpYi9jZ3JvdXBfdXRpbC5jXG5pbmRleCAyNTk2YzEyY2Q4NjQ1Li5lZDNjNDg5MzgzM2E1IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvY2dyb3VwL2xpYi9jZ3JvdXBfdXRpbC5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9jZ3JvdXAvbGliL2Nncm91cF91dGlsLmNcbkBAIC0xNzIsNyArMTcyLDcgQEAgbG9uZyBjZ19yZWFkX2xvbmdfZmQoaW50IGZkKVxuIFx0cmV0dXJuIGF0b2woYnVmKTtcbiB9XG4gXG4tbG9uZyBjZ19yZWFkX2tleV9sb25nKGNvbnN0IGNoYXIgKmNncm91cCwgY29uc3QgY2hhciAqY29udHJvbCwgY29uc3QgY2hhciAqa2V5KVxuK3M2NCBjZ19yZWFkX2tleV9zNjQoY29uc3QgY2hhciAqY2dyb3VwLCBjb25zdCBjaGFyICpjb250cm9sLCBjb25zdCBjaGFyICprZXkpXG4ge1xuIFx0Y2hhciBidWZbQlVGX1NJWkVdO1xuIFx0Y2hhciAqcHRyO1xuQEAgLTE4NCwxOCArMTg0LDE4IEBAIGxvbmcgY2dfcmVhZF9rZXlfbG9uZyhjb25zdCBjaGFyICpjZ3JvdXAsIGNvbnN0IGNoYXIgKmNvbnRyb2wsIGNvbnN0IGNoYXIgKmtleSlcbiBcdGlmICghcHRyKVxuIFx0XHRyZXR1cm4gLTE7XG4gXG4tXHRyZXR1cm4gYXRvbChwdHIgKyBzdHJsZW4oa2V5KSk7XG4rXHRyZXR1cm4gYXRvbGwocHRyICsgc3RybGVuKGtleSkpO1xuIH1cbiBcbi1sb25nIGNnX3JlYWRfa2V5X2xvbmdfcG9sbChjb25zdCBjaGFyICpjZ3JvdXAsIGNvbnN0IGNoYXIgKmNvbnRyb2wsXG4tXHRcdFx0ICAgY29uc3QgY2hhciAqa2V5LCBsb25nIGV4cGVjdGVkLCBpbnQgcmV0cmllcyxcbi1cdFx0XHQgICB1c2Vjb25kc190IHdhaXRfaW50ZXJ2YWxfdXMpXG4rczY0IGNnX3JlYWRfa2V5X3M2NF9wb2xsKGNvbnN0IGNoYXIgKmNncm91cCwgY29uc3QgY2hhciAqY29udHJvbCxcbitcdFx0XHQgY29uc3QgY2hhciAqa2V5LCBzNjQgZXhwZWN0ZWQsIGludCByZXRyaWVzLFxuK1x0XHRcdCB1c2Vjb25kc190IHdhaXRfaW50ZXJ2YWxfdXMpXG4ge1xuLVx0bG9uZyB2YWwgPSAtMTtcbitcdHM2NCB2YWwgPSAtMTtcbiBcdGludCBpO1xuIFxuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgcmV0cmllczsgaSsrKSB7XG4tXHRcdHZhbCA9IGNnX3JlYWRfa2V5X2xvbmcoY2dyb3VwLCBjb250cm9sLCBrZXkpO1xuK1x0XHR2YWwgPSBjZ19yZWFkX2tleV9zNjQoY2dyb3VwLCBjb250cm9sLCBrZXkpO1xuIFx0XHRpZiAodmFsIFx1MDAzYyAwKVxuIFx0XHRcdHJldHVybiB2YWw7XG4gXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvY2dyb3VwL2xpYi9pbmNsdWRlL2Nncm91cF91dGlsLmggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9jZ3JvdXAvbGliL2luY2x1ZGUvY2dyb3VwX3V0aWwuaFxuaW5kZXggNWQzOWM3MDlhYzdhNC4uZGRiMDU5MzJkOWM3NyAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2Nncm91cC9saWIvaW5jbHVkZS9jZ3JvdXBfdXRpbC5oXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9jZ3JvdXAvbGliL2luY2x1ZGUvY2dyb3VwX3V0aWwuaFxuQEAgLTIsNiArMiw4IEBAXG4gI2luY2x1ZGUgXHUwMDNjc3RkYm9vbC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjc3RkbGliLmhcdTAwM2VcbiBcbit0eXBlZGVmIHNpZ25lZCBsb25nIGxvbmcgczY0O1xuK1xuICNpZm5kZWYgQlVGX1NJWkVcbiAjZGVmaW5lIEJVRl9TSVpFIDQwOTZcbiAjZW5kaWZcbkBAIC0yNCwyNSArMjYsMjUgQEBcbiAvKlxuICAqIENoZWNrcyBpZiB0d28gZ2l2ZW4gdmFsdWVzIGRpZmZlciBieSBsZXNzIHRoYW4gZXJyJSBvZiB0aGVpciBzdW0uXG4gICovXG4tc3RhdGljIGlubGluZSBpbnQgdmFsdWVzX2Nsb3NlKGxvbmcgYSwgbG9uZyBiLCBpbnQgZXJyKVxuK3N0YXRpYyBpbmxpbmUgaW50IHZhbHVlc19jbG9zZShzNjQgYSwgczY0IGIsIGludCBlcnIpXG4ge1xuLVx0cmV0dXJuIGxhYnMoYSAtIGIpIFx1MDAzYz0gKGEgKyBiKSAvIDEwMCAqIGVycjtcbitcdHJldHVybiBsbGFicyhhIC0gYikgXHUwMDNjPSAoYSArIGIpIC8gMTAwICogZXJyO1xuIH1cbiBcbiAvKlxuICAqIENoZWNrcyBpZiB0d28gZ2l2ZW4gdmFsdWVzIGRpZmZlciBieSBsZXNzIHRoYW4gZXJyJSBvZiB0aGVpciBzdW0gYW5kIGFzc2VydFxuICAqIHdpdGggZGV0YWlsZWQgZGVidWcgaW5mbyBpZiBub3QuXG4gICovXG4tc3RhdGljIGlubGluZSBpbnQgdmFsdWVzX2Nsb3NlX3JlcG9ydChsb25nIGEsIGxvbmcgYiwgaW50IGVycilcbitzdGF0aWMgaW5saW5lIGludCB2YWx1ZXNfY2xvc2VfcmVwb3J0KHM2NCBhLCBzNjQgYiwgaW50IGVycilcbiB7XG4tXHRsb25nIGRpZmYgID0gbGFicyhhIC0gYik7XG4tXHRsb25nIGxpbWl0ID0gKGEgKyBiKSAvIDEwMCAqIGVycjtcbitcdHM2NCBkaWZmICA9IGxsYWJzKGEgLSBiKTtcbitcdHM2NCBsaW1pdCA9IChhICsgYikgLyAxMDAgKiBlcnI7XG4gXHRkb3VibGUgYWN0dWFsX2VyciA9IChhICsgYikgPyAoMTAwLjAgKiBkaWZmIC8gKGEgKyBiKSkgOiAwLjA7XG4gXHRpbnQgY2xvc2UgPSBkaWZmIFx1MDAzYz0gbGltaXQ7XG4gXG4gXHRpZiAoIWNsb3NlKVxuIFx0XHRmcHJpbnRmKHN0ZGVycixcbi1cdFx0XHRcIltGQUlMXSBhY3R1YWw9JWxkIGV4cGVjdGVkPSVsZCB8IGRpZmY9JWxkIHwgbGltaXQ9JWxkIHwgXCJcbitcdFx0XHRcIltGQUlMXSBhY3R1YWw9JWxsZCBleHBlY3RlZD0lbGxkIHwgZGlmZj0lbGxkIHwgbGltaXQ9JWxsZCB8IFwiXG4gXHRcdFx0XCJ0b2xlcmFuY2U9JWQlJSB8IGFjdHVhbF9lcnJvcj0lLjJmJSVcXG5cIixcbiBcdFx0XHRhLCBiLCBkaWZmLCBsaW1pdCwgZXJyLCBhY3R1YWxfZXJyKTtcbiBcbkBAIC02OSwxMCArNzEsMTAgQEAgZXh0ZXJuIGludCBjZ19yZWFkX3N0cnN0cihjb25zdCBjaGFyICpjZ3JvdXAsIGNvbnN0IGNoYXIgKmNvbnRyb2wsXG4gXHRcdFx0ICBjb25zdCBjaGFyICpuZWVkbGUpO1xuIGV4dGVybiBsb25nIGNnX3JlYWRfbG9uZyhjb25zdCBjaGFyICpjZ3JvdXAsIGNvbnN0IGNoYXIgKmNvbnRyb2wpO1xuIGV4dGVybiBsb25nIGNnX3JlYWRfbG9uZ19mZChpbnQgZmQpO1xuLWxvbmcgY2dfcmVhZF9rZXlfbG9uZyhjb25zdCBjaGFyICpjZ3JvdXAsIGNvbnN0IGNoYXIgKmNvbnRyb2wsIGNvbnN0IGNoYXIgKmtleSk7XG4tbG9uZyBjZ19yZWFkX2tleV9sb25nX3BvbGwoY29uc3QgY2hhciAqY2dyb3VwLCBjb25zdCBjaGFyICpjb250cm9sLFxuLVx0XHRcdCAgIGNvbnN0IGNoYXIgKmtleSwgbG9uZyBleHBlY3RlZCwgaW50IHJldHJpZXMsXG4tXHRcdFx0ICAgdXNlY29uZHNfdCB3YWl0X2ludGVydmFsX3VzKTtcbitzNjQgY2dfcmVhZF9rZXlfczY0KGNvbnN0IGNoYXIgKmNncm91cCwgY29uc3QgY2hhciAqY29udHJvbCwgY29uc3QgY2hhciAqa2V5KTtcbitzNjQgY2dfcmVhZF9rZXlfczY0X3BvbGwoY29uc3QgY2hhciAqY2dyb3VwLCBjb25zdCBjaGFyICpjb250cm9sLFxuK1x0XHRcdCBjb25zdCBjaGFyICprZXksIHM2NCBleHBlY3RlZCwgaW50IHJldHJpZXMsXG4rXHRcdFx0IHVzZWNvbmRzX3Qgd2FpdF9pbnRlcnZhbF91cyk7XG4gZXh0ZXJuIGxvbmcgY2dfcmVhZF9sYyhjb25zdCBjaGFyICpjZ3JvdXAsIGNvbnN0IGNoYXIgKmNvbnRyb2wpO1xuIGV4dGVybiBpbnQgY2dfd3JpdGUoY29uc3QgY2hhciAqY2dyb3VwLCBjb25zdCBjaGFyICpjb250cm9sLCBjaGFyICpidWYpO1xuIGV4dGVybiBpbnQgY2dfb3Blbihjb25zdCBjaGFyICpjZ3JvdXAsIGNvbnN0IGNoYXIgKmNvbnRyb2wsIGludCBmbGFncyk7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvY2dyb3VwL3Rlc3RfY3B1LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9jZ3JvdXAvdGVzdF9jcHUuY1xuaW5kZXggNzM1YTUzYmIyMjJiYS4uMTFkYTFkZTljZGViNiAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2Nncm91cC90ZXN0X2NwdS5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9jZ3JvdXAvdGVzdF9jcHUuY1xuQEAgLTI0LDcgKzI0LDcgQEAgZW51bSBob2dfY2xvY2tfdHlwZSB7XG4gc3RydWN0IGNwdV9ob2dnZXIge1xuIFx0Y2hhciAqY2dyb3VwO1xuIFx0cGlkX3QgcGlkO1xuLVx0bG9uZyB1c2FnZTtcbitcdHM2NCB1c2FnZTtcbiB9O1xuIFxuIHN0cnVjdCBjcHVfaG9nX2Z1bmNfcGFyYW0ge1xuQEAgLTE4NSw3ICsxODUsNyBAQCBzdGF0aWMgaW50IGhvZ19jcHVzX3RpbWVkKGNvbnN0IGNoYXIgKmNncm91cCwgdm9pZCAqYXJnKVxuIHN0YXRpYyBpbnQgdGVzdF9jcHVjZ19zdGF0cyhjb25zdCBjaGFyICpyb290KVxuIHtcbiBcdGludCByZXQgPSBLU0ZUX0ZBSUw7XG4tXHRsb25nIHVzYWdlX3VzZWMsIHVzZXJfdXNlYywgc3lzdGVtX3VzZWM7XG4rXHRzNjQgdXNhZ2VfdXNlYywgdXNlcl91c2VjLCBzeXN0ZW1fdXNlYztcbiBcdGxvbmcgdXNhZ2Vfc2Vjb25kcyA9IDI7XG4gXHRsb25nIGV4cGVjdGVkX3VzYWdlX3VzZWMgPSB1c2FnZV9zZWNvbmRzICogVVNFQ19QRVJfU0VDO1xuIFx0Y2hhciAqY3B1Y2c7XG5AQCAtMTk3LDkgKzE5Nyw5IEBAIHN0YXRpYyBpbnQgdGVzdF9jcHVjZ19zdGF0cyhjb25zdCBjaGFyICpyb290KVxuIFx0aWYgKGNnX2NyZWF0ZShjcHVjZykpXG4gXHRcdGdvdG8gY2xlYW51cDtcbiBcbi1cdHVzYWdlX3VzZWMgPSBjZ19yZWFkX2tleV9sb25nKGNwdWNnLCBcImNwdS5zdGF0XCIsIFwidXNhZ2VfdXNlY1wiKTtcbi1cdHVzZXJfdXNlYyA9IGNnX3JlYWRfa2V5X2xvbmcoY3B1Y2csIFwiY3B1LnN0YXRcIiwgXCJ1c2VyX3VzZWNcIik7XG4tXHRzeXN0ZW1fdXNlYyA9IGNnX3JlYWRfa2V5X2xvbmcoY3B1Y2csIFwiY3B1LnN0YXRcIiwgXCJzeXN0ZW1fdXNlY1wiKTtcbitcdHVzYWdlX3VzZWMgPSBjZ19yZWFkX2tleV9zNjQoY3B1Y2csIFwiY3B1LnN0YXRcIiwgXCJ1c2FnZV91c2VjXCIpO1xuK1x0dXNlcl91c2VjID0gY2dfcmVhZF9rZXlfczY0KGNwdWNnLCBcImNwdS5zdGF0XCIsIFwidXNlcl91c2VjXCIpO1xuK1x0c3lzdGVtX3VzZWMgPSBjZ19yZWFkX2tleV9zNjQoY3B1Y2csIFwiY3B1LnN0YXRcIiwgXCJzeXN0ZW1fdXNlY1wiKTtcbiBcdGlmICh1c2FnZV91c2VjICE9IDAgfHwgdXNlcl91c2VjICE9IDAgfHwgc3lzdGVtX3VzZWMgIT0gMClcbiBcdFx0Z290byBjbGVhbnVwO1xuIFxuQEAgLTIxNCw4ICsyMTQsOCBAQCBzdGF0aWMgaW50IHRlc3RfY3B1Y2dfc3RhdHMoY29uc3QgY2hhciAqcm9vdClcbiBcdGlmIChjZ19ydW4oY3B1Y2csIGhvZ19jcHVzX3RpbWVkLCAodm9pZCAqKVx1MDAyNnBhcmFtKSlcbiBcdFx0Z290byBjbGVhbnVwO1xuIFxuLVx0dXNhZ2VfdXNlYyA9IGNnX3JlYWRfa2V5X2xvbmcoY3B1Y2csIFwiY3B1LnN0YXRcIiwgXCJ1c2FnZV91c2VjXCIpO1xuLVx0dXNlcl91c2VjID0gY2dfcmVhZF9rZXlfbG9uZyhjcHVjZywgXCJjcHUuc3RhdFwiLCBcInVzZXJfdXNlY1wiKTtcbitcdHVzYWdlX3VzZWMgPSBjZ19yZWFkX2tleV9zNjQoY3B1Y2csIFwiY3B1LnN0YXRcIiwgXCJ1c2FnZV91c2VjXCIpO1xuK1x0dXNlcl91c2VjID0gY2dfcmVhZF9rZXlfczY0KGNwdWNnLCBcImNwdS5zdGF0XCIsIFwidXNlcl91c2VjXCIpO1xuIFx0aWYgKHVzZXJfdXNlYyBcdTAwM2M9IDApXG4gXHRcdGdvdG8gY2xlYW51cDtcbiBcbkBAIC0yMzksNyArMjM5LDcgQEAgc3RhdGljIGludCB0ZXN0X2NwdWNnX25pY2UoY29uc3QgY2hhciAqcm9vdClcbiB7XG4gXHRpbnQgcmV0ID0gS1NGVF9GQUlMO1xuIFx0aW50IHN0YXR1cztcbi1cdGxvbmcgdXNlcl91c2VjLCBuaWNlX3VzZWM7XG4rXHRzNjQgdXNlcl91c2VjLCBuaWNlX3VzZWM7XG4gXHRsb25nIHVzYWdlX3NlY29uZHMgPSAyO1xuIFx0bG9uZyBleHBlY3RlZF9uaWNlX3VzZWMgPSB1c2FnZV9zZWNvbmRzICogVVNFQ19QRVJfU0VDO1xuIFx0Y2hhciAqY3B1Y2c7XG5AQCAtMjUyLDggKzI1Miw4IEBAIHN0YXRpYyBpbnQgdGVzdF9jcHVjZ19uaWNlKGNvbnN0IGNoYXIgKnJvb3QpXG4gXHRpZiAoY2dfY3JlYXRlKGNwdWNnKSlcbiBcdFx0Z290byBjbGVhbnVwO1xuIFxuLVx0dXNlcl91c2VjID0gY2dfcmVhZF9rZXlfbG9uZyhjcHVjZywgXCJjcHUuc3RhdFwiLCBcInVzZXJfdXNlY1wiKTtcbi1cdG5pY2VfdXNlYyA9IGNnX3JlYWRfa2V5X2xvbmcoY3B1Y2csIFwiY3B1LnN0YXRcIiwgXCJuaWNlX3VzZWNcIik7XG4rXHR1c2VyX3VzZWMgPSBjZ19yZWFkX2tleV9zNjQoY3B1Y2csIFwiY3B1LnN0YXRcIiwgXCJ1c2VyX3VzZWNcIik7XG4rXHRuaWNlX3VzZWMgPSBjZ19yZWFkX2tleV9zNjQoY3B1Y2csIFwiY3B1LnN0YXRcIiwgXCJuaWNlX3VzZWNcIik7XG4gXHRpZiAobmljZV91c2VjID09IC0xKVxuIFx0XHRyZXQgPSBLU0ZUX1NLSVA7XG4gXHRpZiAodXNlcl91c2VjICE9IDAgfHwgbmljZV91c2VjICE9IDApXG5AQCAtMjg5LDggKzI4OSw4IEBAIHN0YXRpYyBpbnQgdGVzdF9jcHVjZ19uaWNlKGNvbnN0IGNoYXIgKnJvb3QpXG4gXHRcdGlmICghV0lGRVhJVEVEKHN0YXR1cykpXG4gXHRcdFx0Z290byBjbGVhbnVwO1xuIFxuLVx0XHR1c2VyX3VzZWMgPSBjZ19yZWFkX2tleV9sb25nKGNwdWNnLCBcImNwdS5zdGF0XCIsIFwidXNlcl91c2VjXCIpO1xuLVx0XHRuaWNlX3VzZWMgPSBjZ19yZWFkX2tleV9sb25nKGNwdWNnLCBcImNwdS5zdGF0XCIsIFwibmljZV91c2VjXCIpO1xuK1x0XHR1c2VyX3VzZWMgPSBjZ19yZWFkX2tleV9zNjQoY3B1Y2csIFwiY3B1LnN0YXRcIiwgXCJ1c2VyX3VzZWNcIik7XG4rXHRcdG5pY2VfdXNlYyA9IGNnX3JlYWRfa2V5X3M2NChjcHVjZywgXCJjcHUuc3RhdFwiLCBcIm5pY2VfdXNlY1wiKTtcbiBcdFx0aWYgKHVzZXJfdXNlYyBcdTAwM2M9IDApXG4gXHRcdFx0Z290byBjbGVhbnVwO1xuIFx0XHRpZiAoIXZhbHVlc19jbG9zZV9yZXBvcnQobmljZV91c2VjLCBleHBlY3RlZF9uaWNlX3VzZWMsIDEpKVxuQEAgLTM1Nyw4ICszNTcsOCBAQCBydW5fY3B1Y2dfd2VpZ2h0X3Rlc3QoXG4gXHR9XG4gXG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBBUlJBWV9TSVpFKGNoaWxkcmVuKTsgaSsrKVxuLVx0XHRjaGlsZHJlbltpXS51c2FnZSA9IGNnX3JlYWRfa2V5X2xvbmcoY2hpbGRyZW5baV0uY2dyb3VwLFxuLVx0XHRcdFx0XCJjcHUuc3RhdFwiLCBcInVzYWdlX3VzZWNcIik7XG4rXHRcdGNoaWxkcmVuW2ldLnVzYWdlID0gY2dfcmVhZF9rZXlfczY0KGNoaWxkcmVuW2ldLmNncm91cCxcbitcdFx0XHRcdFx0XHQgICAgXCJjcHUuc3RhdFwiLCBcInVzYWdlX3VzZWNcIik7XG4gXG4gXHRpZiAodmFsaWRhdGUoY2hpbGRyZW4sIEFSUkFZX1NJWkUoY2hpbGRyZW4pKSlcbiBcdFx0Z290byBjbGVhbnVwO1xuQEAgLTQ4Niw3ICs0ODYsNyBAQCBydW5fY3B1Y2dfbmVzdGVkX3dlaWdodF90ZXN0KGNvbnN0IGNoYXIgKnJvb3QsIGJvb2wgb3ZlcnByb3Zpc2lvbmVkKVxuIFx0aW50IHJldCA9IEtTRlRfRkFJTCwgaTtcbiBcdGNoYXIgKnBhcmVudCA9IE5VTEwsICpjaGlsZCA9IE5VTEw7XG4gXHRzdHJ1Y3QgY3B1X2hvZ2dlciBsZWFmWzNdID0ge307XG4tXHRsb25nIG5lc3RlZF9sZWFmX3VzYWdlLCBjaGlsZF91c2FnZTtcbitcdHM2NCBuZXN0ZWRfbGVhZl91c2FnZSwgY2hpbGRfdXNhZ2U7XG4gXHRpbnQgbnByb2NzID0gZ2V0X25wcm9jcygpO1xuIFxuIFx0aWYgKCFvdmVycHJvdmlzaW9uZWQpIHtcbkBAIC01NjcsOCArNTY3LDggQEAgcnVuX2NwdWNnX25lc3RlZF93ZWlnaHRfdGVzdChjb25zdCBjaGFyICpyb290LCBib29sIG92ZXJwcm92aXNpb25lZClcbiBcdH1cbiBcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIEFSUkFZX1NJWkUobGVhZik7IGkrKykge1xuLVx0XHRsZWFmW2ldLnVzYWdlID0gY2dfcmVhZF9rZXlfbG9uZyhsZWFmW2ldLmNncm91cCxcbi1cdFx0XHRcdFwiY3B1LnN0YXRcIiwgXCJ1c2FnZV91c2VjXCIpO1xuK1x0XHRsZWFmW2ldLnVzYWdlID0gY2dfcmVhZF9rZXlfczY0KGxlYWZbaV0uY2dyb3VwLCBcImNwdS5zdGF0XCIsXG4rXHRcdFx0XHRcdFx0XCJ1c2FnZV91c2VjXCIpO1xuIFx0XHRpZiAobGVhZltpXS51c2FnZSBcdTAwM2M9IDApXG4gXHRcdFx0Z290byBjbGVhbnVwO1xuIFx0fVxuQEAgLTU4MCw4ICs1ODAsNyBAQCBydW5fY3B1Y2dfbmVzdGVkX3dlaWdodF90ZXN0KGNvbnN0IGNoYXIgKnJvb3QsIGJvb2wgb3ZlcnByb3Zpc2lvbmVkKVxuIFx0fSBlbHNlIGlmICghdmFsdWVzX2Nsb3NlX3JlcG9ydChsZWFmWzBdLnVzYWdlICogMiwgbmVzdGVkX2xlYWZfdXNhZ2UsIDE1KSlcbiBcdFx0Z290byBjbGVhbnVwO1xuIFxuLVxuLVx0Y2hpbGRfdXNhZ2UgPSBjZ19yZWFkX2tleV9sb25nKGNoaWxkLCBcImNwdS5zdGF0XCIsIFwidXNhZ2VfdXNlY1wiKTtcbitcdGNoaWxkX3VzYWdlID0gY2dfcmVhZF9rZXlfczY0KGNoaWxkLCBcImNwdS5zdGF0XCIsIFwidXNhZ2VfdXNlY1wiKTtcbiBcdGlmIChjaGlsZF91c2FnZSBcdTAwM2M9IDApXG4gXHRcdGdvdG8gY2xlYW51cDtcbiBcdGlmICghdmFsdWVzX2Nsb3NlX3JlcG9ydChjaGlsZF91c2FnZSwgbmVzdGVkX2xlYWZfdXNhZ2UsIDEpKVxuQEAgLTY3OSw3ICs2NzgsOCBAQCBzdGF0aWMgaW50IHRlc3RfY3B1Y2dfbWF4KGNvbnN0IGNoYXIgKnJvb3QpXG4gXHRsb25nIGR1cmF0aW9uX3NlY29uZHMgPSAxO1xuIFxuIFx0bG9uZyBkdXJhdGlvbl91c2VjO1xuLVx0bG9uZyB1c2FnZV91c2VjLCBuX3BlcmlvZHMsIHJlbWFpbmRlcl91c2VjLCBleHBlY3RlZF91c2FnZV91c2VjO1xuK1x0bG9uZyBuX3BlcmlvZHMsIHJlbWFpbmRlcl91c2VjLCBleHBlY3RlZF91c2FnZV91c2VjO1xuK1x0czY0IHVzYWdlX3VzZWM7XG4gXHRjaGFyICpjcHVjZztcbiBcdGNoYXIgcXVvdGFfYnVmWzMyXTtcbiBcbkBAIC03MDgsNyArNzA4LDcgQEAgc3RhdGljIGludCB0ZXN0X2NwdWNnX21heChjb25zdCBjaGFyICpyb290KVxuIFx0aWYgKGNnX3J1bihjcHVjZywgaG9nX2NwdXNfdGltZWQsICh2b2lkICopXHUwMDI2cGFyYW0pKVxuIFx0XHRnb3RvIGNsZWFudXA7XG4gXG4tXHR1c2FnZV91c2VjID0gY2dfcmVhZF9rZXlfbG9uZyhjcHVjZywgXCJjcHUuc3RhdFwiLCBcInVzYWdlX3VzZWNcIik7XG4rXHR1c2FnZV91c2VjID0gY2dfcmVhZF9rZXlfczY0KGNwdWNnLCBcImNwdS5zdGF0XCIsIFwidXNhZ2VfdXNlY1wiKTtcbiBcdGlmICh1c2FnZV91c2VjIFx1MDAzYz0gMClcbiBcdFx0Z290byBjbGVhbnVwO1xuIFxuQEAgLTc0Niw3ICs3NDYsOCBAQCBzdGF0aWMgaW50IHRlc3RfY3B1Y2dfbWF4X25lc3RlZChjb25zdCBjaGFyICpyb290KVxuIFx0bG9uZyBkdXJhdGlvbl9zZWNvbmRzID0gMTtcbiBcbiBcdGxvbmcgZHVyYXRpb25fdXNlYztcbi1cdGxvbmcgdXNhZ2VfdXNlYywgbl9wZXJpb2RzLCByZW1haW5kZXJfdXNlYywgZXhwZWN0ZWRfdXNhZ2VfdXNlYztcbitcdGxvbmcgbl9wZXJpb2RzLCByZW1haW5kZXJfdXNlYywgZXhwZWN0ZWRfdXNhZ2VfdXNlYztcbitcdHM2NCB1c2FnZV91c2VjO1xuIFx0Y2hhciAqcGFyZW50LCAqY2hpbGQ7XG4gXHRjaGFyIHF1b3RhX2J1ZlszMl07XG4gXG5AQCAtNzgyLDcgKzc4Myw3IEBAIHN0YXRpYyBpbnQgdGVzdF9jcHVjZ19tYXhfbmVzdGVkKGNvbnN0IGNoYXIgKnJvb3QpXG4gXHRpZiAoY2dfcnVuKGNoaWxkLCBob2dfY3B1c190aW1lZCwgKHZvaWQgKilcdTAwMjZwYXJhbSkpXG4gXHRcdGdvdG8gY2xlYW51cDtcbiBcbi1cdHVzYWdlX3VzZWMgPSBjZ19yZWFkX2tleV9sb25nKGNoaWxkLCBcImNwdS5zdGF0XCIsIFwidXNhZ2VfdXNlY1wiKTtcbitcdHVzYWdlX3VzZWMgPSBjZ19yZWFkX2tleV9zNjQoY2hpbGQsIFwiY3B1LnN0YXRcIiwgXCJ1c2FnZV91c2VjXCIpO1xuIFx0aWYgKHVzYWdlX3VzZWMgXHUwMDNjPSAwKVxuIFx0XHRnb3RvIGNsZWFudXA7XG4gXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvY2dyb3VwL3Rlc3RfZnJlZXplci5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvY2dyb3VwL3Rlc3RfZnJlZXplci5jXG5pbmRleCBmMjhiYjAyZTk3ODNiLi5mNGYwODJjMTNkNGI3IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvY2dyb3VwL3Rlc3RfZnJlZXplci5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9jZ3JvdXAvdGVzdF9mcmVlemVyLmNcbkBAIC04MDcsMTAgKzgwNyw5IEBAIHN0YXRpYyBpbnQgdGVzdF9jZ2ZyZWV6ZXJfdmZvcmsoY29uc3QgY2hhciAqcm9vdClcbiAvKlxuICAqIEdldCB0aGUgY3VycmVudCBmcm96ZW5fdXNlYyBmb3IgdGhlIGNncm91cC5cbiAgKi9cbi1zdGF0aWMgbG9uZyBjZ19jaGVja19mcmVlemV0aW1lKGNvbnN0IGNoYXIgKmNncm91cClcbitzdGF0aWMgczY0IGNnX2NoZWNrX2ZyZWV6ZXRpbWUoY29uc3QgY2hhciAqY2dyb3VwKVxuIHtcbi1cdHJldHVybiBjZ19yZWFkX2tleV9sb25nKGNncm91cCwgXCJjZ3JvdXAuc3RhdC5sb2NhbFwiLFxuLVx0XHRcdFx0XCJmcm96ZW5fdXNlYyBcIik7XG4rXHRyZXR1cm4gY2dfcmVhZF9rZXlfczY0KGNncm91cCwgXCJjZ3JvdXAuc3RhdC5sb2NhbFwiLCBcImZyb3plbl91c2VjIFwiKTtcbiB9XG4gXG4gLypcbkBAIC04MjAsNyArODE5LDcgQEAgc3RhdGljIGludCB0ZXN0X2NnZnJlZXplcl90aW1lX2VtcHR5KGNvbnN0IGNoYXIgKnJvb3QpXG4ge1xuIFx0aW50IHJldCA9IEtTRlRfRkFJTDtcbiBcdGNoYXIgKmNncm91cCA9IE5VTEw7XG4tXHRsb25nIHByZXYsIGN1cnI7XG4rXHRzNjQgcHJldiwgY3VycjtcbiBcbiBcdGNncm91cCA9IGNnX25hbWUocm9vdCwgXCJjZ190aW1lX3Rlc3RfZW1wdHlcIik7XG4gXHRpZiAoIWNncm91cClcbkBAIC04MzksNyArODM4LDcgQEAgc3RhdGljIGludCB0ZXN0X2NnZnJlZXplcl90aW1lX2VtcHR5KGNvbnN0IGNoYXIgKnJvb3QpXG4gXHRcdGdvdG8gY2xlYW51cDtcbiBcdH1cbiBcdGlmIChjdXJyIFx1MDAzZSAwKSB7XG4tXHRcdGRlYnVnKFwiRXhwZWN0IHRpbWUgKCVsZCkgdG8gYmUgMFxcblwiLCBjdXJyKTtcbitcdFx0ZGVidWcoXCJFeHBlY3QgdGltZSAoJWxsZCkgdG8gYmUgMFxcblwiLCBjdXJyKTtcbiBcdFx0Z290byBjbGVhbnVwO1xuIFx0fVxuIFxuQEAgLTg1Myw4ICs4NTIsNyBAQCBzdGF0aWMgaW50IHRlc3RfY2dmcmVlemVyX3RpbWVfZW1wdHkoY29uc3QgY2hhciAqcm9vdClcbiBcdHVzbGVlcCgxMDAwKTtcbiBcdGN1cnIgPSBjZ19jaGVja19mcmVlemV0aW1lKGNncm91cCk7XG4gXHRpZiAoY3VyciBcdTAwM2MgMTAwMCkge1xuLVx0XHRkZWJ1ZyhcIkV4cGVjdCB0aW1lICglbGQpIHRvIGJlIGF0IGxlYXN0IDEwMDAgdXNcXG5cIixcbi1cdFx0ICAgICAgY3Vycik7XG4rXHRcdGRlYnVnKFwiRXhwZWN0IHRpbWUgKCVsbGQpIHRvIGJlIGF0IGxlYXN0IDEwMDAgdXNcXG5cIiwgY3Vycik7XG4gXHRcdGdvdG8gY2xlYW51cDtcbiBcdH1cbiBcbkBAIC04NjcsNyArODY1LDcgQEAgc3RhdGljIGludCB0ZXN0X2NnZnJlZXplcl90aW1lX2VtcHR5KGNvbnN0IGNoYXIgKnJvb3QpXG4gXHRwcmV2ID0gY3VycjtcbiBcdGN1cnIgPSBjZ19jaGVja19mcmVlemV0aW1lKGNncm91cCk7XG4gXHRpZiAoY3VyciBcdTAwM2M9IHByZXYpIHtcbi1cdFx0ZGVidWcoXCJFeHBlY3QgdGltZSAoJWxkKSB0byBiZSBtb3JlIHRoYW4gcHJldmlvdXMgY2hlY2sgKCVsZClcXG5cIixcbitcdFx0ZGVidWcoXCJFeHBlY3QgdGltZSAoJWxsZCkgdG8gYmUgbW9yZSB0aGFuIHByZXZpb3VzIGNoZWNrICglbGxkKVxcblwiLFxuIFx0XHQgICAgICBjdXJyLCBwcmV2KTtcbiBcdFx0Z290byBjbGVhbnVwO1xuIFx0fVxuQEAgLTg3OSw3ICs4NzcsNyBAQCBzdGF0aWMgaW50IHRlc3RfY2dmcmVlemVyX3RpbWVfZW1wdHkoY29uc3QgY2hhciAqcm9vdClcbiBcdHByZXYgPSBjdXJyO1xuIFx0Y3VyciA9IGNnX2NoZWNrX2ZyZWV6ZXRpbWUoY2dyb3VwKTtcbiBcdGlmIChjdXJyICE9IHByZXYpIHtcbi1cdFx0ZGVidWcoXCJFeHBlY3QgdGltZSAoJWxkKSB0byBiZSB1bmNoYW5nZWQgZnJvbSBwcmV2aW91cyBjaGVjayAoJWxkKVxcblwiLFxuK1x0XHRkZWJ1ZyhcIkV4cGVjdCB0aW1lICglbGxkKSB0byBiZSB1bmNoYW5nZWQgZnJvbSBwcmV2aW91cyBjaGVjayAoJWxsZClcXG5cIixcbiBcdFx0ICAgICAgY3VyciwgcHJldik7XG4gXHRcdGdvdG8gY2xlYW51cDtcbiBcdH1cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9jZ3JvdXAvdGVzdF9rbWVtLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9jZ3JvdXAvdGVzdF9rbWVtLmNcbmluZGV4IDQzN2YyZDM1ZjIwNWUuLjI0OTg5OGYzYjgxZTggMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9jZ3JvdXAvdGVzdF9rbWVtLmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2Nncm91cC90ZXN0X2ttZW0uY1xuQEAgLTU0LDcgKzU0LDggQEAgc3RhdGljIGludCB0ZXN0X2ttZW1fYmFzaWMoY29uc3QgY2hhciAqcm9vdClcbiB7XG4gXHRpbnQgcmV0ID0gS1NGVF9GQUlMO1xuIFx0Y2hhciAqY2cgPSBOVUxMO1xuLVx0bG9uZyBzbGFiMCwgc2xhYjEsIGN1cnJlbnQ7XG4rXHRzNjQgc2xhYjAsIHNsYWIxO1xuK1x0bG9uZyBjdXJyZW50O1xuIFxuIFx0Y2cgPSBjZ19uYW1lKHJvb3QsIFwia21lbV9iYXNpY190ZXN0XCIpO1xuIFx0aWYgKCFjZylcbkBAIC02Niw3ICs2Nyw3IEBAIHN0YXRpYyBpbnQgdGVzdF9rbWVtX2Jhc2ljKGNvbnN0IGNoYXIgKnJvb3QpXG4gXHRpZiAoY2dfcnVuKGNnLCBhbGxvY19kY2FjaGUsICh2b2lkICopMTAwMDAwKSlcbiBcdFx0Z290byBjbGVhbnVwO1xuIFxuLVx0c2xhYjAgPSBjZ19yZWFkX2tleV9sb25nKGNnLCBcIm1lbW9yeS5zdGF0XCIsIFwic2xhYiBcIik7XG4rXHRzbGFiMCA9IGNnX3JlYWRfa2V5X3M2NChjZywgXCJtZW1vcnkuc3RhdFwiLCBcInNsYWIgXCIpO1xuIFx0aWYgKHNsYWIwIFx1MDAzYyAoMSBcdTAwM2NcdTAwM2MgMjApKVxuIFx0XHRnb3RvIGNsZWFudXA7XG4gXG5AQCAtNzUsNyArNzYsNyBAQCBzdGF0aWMgaW50IHRlc3Rfa21lbV9iYXNpYyhjb25zdCBjaGFyICpyb290KVxuIFx0Lyogd2FpdCBmb3IgUkNVIGZyZWVpbmcgKi9cbiBcdHNsZWVwKDEpO1xuIFxuLVx0c2xhYjEgPSBjZ19yZWFkX2tleV9sb25nKGNnLCBcIm1lbW9yeS5zdGF0XCIsIFwic2xhYiBcIik7XG4rXHRzbGFiMSA9IGNnX3JlYWRfa2V5X3M2NChjZywgXCJtZW1vcnkuc3RhdFwiLCBcInNsYWIgXCIpO1xuIFx0aWYgKHNsYWIxIFx1MDAzYyAwKVxuIFx0XHRnb3RvIGNsZWFudXA7XG4gXG5AQCAtMTY3LDcgKzE2OCw4IEBAIHN0YXRpYyBpbnQgY2dfcnVuX2luX3N1YmNncm91cHMoY29uc3QgY2hhciAqcGFyZW50LFxuICAqL1xuIHN0YXRpYyBpbnQgdGVzdF9rbWVtX21lbWNnX2RlbGV0aW9uKGNvbnN0IGNoYXIgKnJvb3QpXG4ge1xuLVx0bG9uZyBjdXJyZW50LCBhbm9uLCBmaWxlLCBrZXJuZWwsIHNvY2ssIHN1bTtcbitcdGxvbmcgY3VycmVudDtcbitcdHM2NCBhbm9uLCBmaWxlLCBrZXJuZWwsIHNvY2ssIHN1bTtcbiBcdGludCByZXQgPSBLU0ZUX0ZBSUw7XG4gXHRjaGFyICpwYXJlbnQ7XG4gXG5AQCAtMTg1LDIzICsxODcsMjMgQEAgc3RhdGljIGludCB0ZXN0X2ttZW1fbWVtY2dfZGVsZXRpb24oY29uc3QgY2hhciAqcm9vdClcbiBcdFx0Z290byBjbGVhbnVwO1xuIFxuIFx0Y3VycmVudCA9IGNnX3JlYWRfbG9uZyhwYXJlbnQsIFwibWVtb3J5LmN1cnJlbnRcIik7XG4tXHRhbm9uID0gY2dfcmVhZF9rZXlfbG9uZyhwYXJlbnQsIFwibWVtb3J5LnN0YXRcIiwgXCJhbm9uIFwiKTtcbi1cdGZpbGUgPSBjZ19yZWFkX2tleV9sb25nKHBhcmVudCwgXCJtZW1vcnkuc3RhdFwiLCBcImZpbGUgXCIpO1xuLVx0a2VybmVsID0gY2dfcmVhZF9rZXlfbG9uZyhwYXJlbnQsIFwibWVtb3J5LnN0YXRcIiwgXCJrZXJuZWwgXCIpO1xuLVx0c29jayA9IGNnX3JlYWRfa2V5X2xvbmcocGFyZW50LCBcIm1lbW9yeS5zdGF0XCIsIFwic29jayBcIik7XG4rXHRhbm9uID0gY2dfcmVhZF9rZXlfczY0KHBhcmVudCwgXCJtZW1vcnkuc3RhdFwiLCBcImFub24gXCIpO1xuK1x0ZmlsZSA9IGNnX3JlYWRfa2V5X3M2NChwYXJlbnQsIFwibWVtb3J5LnN0YXRcIiwgXCJmaWxlIFwiKTtcbitcdGtlcm5lbCA9IGNnX3JlYWRfa2V5X3M2NChwYXJlbnQsIFwibWVtb3J5LnN0YXRcIiwgXCJrZXJuZWwgXCIpO1xuK1x0c29jayA9IGNnX3JlYWRfa2V5X3M2NChwYXJlbnQsIFwibWVtb3J5LnN0YXRcIiwgXCJzb2NrIFwiKTtcbiBcdGlmIChjdXJyZW50IFx1MDAzYyAwIHx8IGFub24gXHUwMDNjIDAgfHwgZmlsZSBcdTAwM2MgMCB8fCBrZXJuZWwgXHUwMDNjIDAgfHwgc29jayBcdTAwM2MgMClcbiBcdFx0Z290byBjbGVhbnVwO1xuIFxuIFx0c3VtID0gYW5vbiArIGZpbGUgKyBrZXJuZWwgKyBzb2NrO1xuLVx0aWYgKGxhYnMoc3VtIC0gY3VycmVudCkgXHUwMDNjIE1BWF9WTVNUQVRfRVJST1IpIHtcbitcdGlmIChsbGFicyhzdW0gLSBjdXJyZW50KSBcdTAwM2MgTUFYX1ZNU1RBVF9FUlJPUikge1xuIFx0XHRyZXQgPSBLU0ZUX1BBU1M7XG4gXHR9IGVsc2Uge1xuIFx0XHRwcmludGYoXCJtZW1vcnkuY3VycmVudCA9ICVsZFxcblwiLCBjdXJyZW50KTtcbi1cdFx0cHJpbnRmKFwiYW5vbiArIGZpbGUgKyBrZXJuZWwgKyBzb2NrID0gJWxkXFxuXCIsIHN1bSk7XG4tXHRcdHByaW50ZihcImFub24gPSAlbGRcXG5cIiwgYW5vbik7XG4tXHRcdHByaW50ZihcImZpbGUgPSAlbGRcXG5cIiwgZmlsZSk7XG4tXHRcdHByaW50ZihcImtlcm5lbCA9ICVsZFxcblwiLCBrZXJuZWwpO1xuLVx0XHRwcmludGYoXCJzb2NrID0gJWxkXFxuXCIsIHNvY2spO1xuK1x0XHRwcmludGYoXCJhbm9uICsgZmlsZSArIGtlcm5lbCArIHNvY2sgPSAlbGxkXFxuXCIsIHN1bSk7XG4rXHRcdHByaW50ZihcImFub24gPSAlbGxkXFxuXCIsIGFub24pO1xuK1x0XHRwcmludGYoXCJmaWxlID0gJWxsZFxcblwiLCBmaWxlKTtcbitcdFx0cHJpbnRmKFwia2VybmVsID0gJWxsZFxcblwiLCBrZXJuZWwpO1xuK1x0XHRwcmludGYoXCJzb2NrID0gJWxsZFxcblwiLCBzb2NrKTtcbiBcdH1cbiBcbiBjbGVhbnVwOlxuQEAgLTI0OCw3ICsyNTAsNyBAQCBzdGF0aWMgaW50IHNwYXduXzEwMDBfdGhyZWFkcyhjb25zdCBjaGFyICpjZ3JvdXAsIHZvaWQgKmFyZylcbiBcdGludCBucl90aHJlYWRzID0gMTAwMDtcbiBcdHB0aHJlYWRfdCAqdGluZm87XG4gXHR1bnNpZ25lZCBsb25nIGk7XG4tXHRsb25nIHN0YWNrO1xuK1x0czY0IHN0YWNrO1xuIFx0aW50IHJldCA9IC0xO1xuIFxuIFx0dGluZm8gPSBjYWxsb2MobnJfdGhyZWFkcywgc2l6ZW9mKHB0aHJlYWRfdCkpO1xuQEAgLTI2Myw3ICsyNjUsNyBAQCBzdGF0aWMgaW50IHNwYXduXzEwMDBfdGhyZWFkcyhjb25zdCBjaGFyICpjZ3JvdXAsIHZvaWQgKmFyZylcbiBcdFx0fVxuIFx0fVxuIFxuLVx0c3RhY2sgPSBjZ19yZWFkX2tleV9sb25nKGNncm91cCwgXCJtZW1vcnkuc3RhdFwiLCBcImtlcm5lbF9zdGFjayBcIik7XG4rXHRzdGFjayA9IGNnX3JlYWRfa2V5X3M2NChjZ3JvdXAsIFwibWVtb3J5LnN0YXRcIiwgXCJrZXJuZWxfc3RhY2sgXCIpO1xuIFx0aWYgKHN0YWNrIFx1MDAzZT0gNDA5NiAqIDEwMDApXG4gXHRcdHJldCA9IDA7XG4gXG5AQCAtMzA3LDcgKzMwOSw3IEBAIHN0YXRpYyBpbnQgdGVzdF9rbWVtX2RlYWRfY2dyb3Vwcyhjb25zdCBjaGFyICpyb290KVxuIHtcbiBcdGludCByZXQgPSBLU0ZUX0ZBSUw7XG4gXHRjaGFyICpwYXJlbnQ7XG4tXHRsb25nIGRlYWQgPSAtMTtcbitcdHM2NCBkZWFkID0gLTE7XG4gXG4gXHRwYXJlbnQgPSBjZ19uYW1lKHJvb3QsIFwia21lbV9kZWFkX2Nncm91cHNfdGVzdFwiKTtcbiBcdGlmICghcGFyZW50KVxuQEAgLTMyOCw5ICszMzAsMTAgQEAgc3RhdGljIGludCB0ZXN0X2ttZW1fZGVhZF9jZ3JvdXBzKGNvbnN0IGNoYXIgKnJvb3QpXG4gXHQgKiBmcm9tIGEgc3BlY2lmaWMga2VybmVsIGNvbnN0YW50LCBhbmQgY2FuIGJlIGFkanVzdGVkIGlmIHJlY2xhaW1cbiBcdCAqIGJlaGF2aW9yIGNoYW5nZXMgaW4gdGhlIGZ1dHVyZS5cbiBcdCAqL1xuLVx0ZGVhZCA9IGNnX3JlYWRfa2V5X2xvbmdfcG9sbChwYXJlbnQsIFwiY2dyb3VwLnN0YXRcIixcbi1cdFx0XHRcdFx0XCJucl9keWluZ19kZXNjZW5kYW50cyBcIiwgMCwgS01FTV9ERUFEX1dBSVRfUkVUUklFUyxcbi1cdFx0XHRcdFx0REVGQVVMVF9XQUlUX0lOVEVSVkFMX1VTKTtcbitcdGRlYWQgPSBjZ19yZWFkX2tleV9zNjRfcG9sbChwYXJlbnQsIFwiY2dyb3VwLnN0YXRcIixcbitcdFx0XHRcdCAgICBcIm5yX2R5aW5nX2Rlc2NlbmRhbnRzIFwiLCAwLFxuK1x0XHRcdFx0ICAgIEtNRU1fREVBRF9XQUlUX1JFVFJJRVMsXG4rXHRcdFx0XHQgICAgREVGQVVMVF9XQUlUX0lOVEVSVkFMX1VTKTtcbiBcdGlmIChkZWFkKVxuIFx0XHRnb3RvIGNsZWFudXA7XG4gXG5AQCAtMzUzLDcgKzM1Niw4IEBAIHN0YXRpYyBpbnQgdGVzdF9wZXJjcHVfYmFzaWMoY29uc3QgY2hhciAqcm9vdClcbiB7XG4gXHRpbnQgcmV0ID0gS1NGVF9GQUlMO1xuIFx0Y2hhciAqcGFyZW50LCAqY2hpbGQ7XG4tXHRsb25nIGN1cnJlbnQsIHBlcmNwdSwgc2xhYjtcbitcdGxvbmcgY3VycmVudDtcbitcdHM2NCBwZXJjcHUsIHNsYWI7XG4gXHRpbnQgaTtcbiBcbiBcdHBhcmVudCA9IGNnX25hbWUocm9vdCwgXCJwZXJjcHVfYmFzaWNfdGVzdFwiKTtcbkBAIC0zODIsMTUgKzM4NiwxNSBAQCBzdGF0aWMgaW50IHRlc3RfcGVyY3B1X2Jhc2ljKGNvbnN0IGNoYXIgKnJvb3QpXG4gXHR9XG4gXG4gXHRjdXJyZW50ID0gY2dfcmVhZF9sb25nKHBhcmVudCwgXCJtZW1vcnkuY3VycmVudFwiKTtcbi1cdHBlcmNwdSA9IGNnX3JlYWRfa2V5X2xvbmcocGFyZW50LCBcIm1lbW9yeS5zdGF0XCIsIFwicGVyY3B1IFwiKTtcbi1cdHNsYWIgPSBjZ19yZWFkX2tleV9sb25nKHBhcmVudCwgXCJtZW1vcnkuc3RhdFwiLCBcInNsYWIgXCIpO1xuK1x0cGVyY3B1ID0gY2dfcmVhZF9rZXlfczY0KHBhcmVudCwgXCJtZW1vcnkuc3RhdFwiLCBcInBlcmNwdSBcIik7XG4rXHRzbGFiID0gY2dfcmVhZF9rZXlfczY0KHBhcmVudCwgXCJtZW1vcnkuc3RhdFwiLCBcInNsYWIgXCIpO1xuIFxuIFx0aWYgKGN1cnJlbnQgXHUwMDNlIDAgXHUwMDI2XHUwMDI2IHBlcmNwdSBcdTAwM2UgMCBcdTAwMjZcdTAwMjYgc2xhYiBcdTAwM2U9IDAgXHUwMDI2XHUwMDI2XG4tXHRcdFx0bGFicyhjdXJyZW50IC0gKHBlcmNwdSArIHNsYWIpKSBcdTAwM2MgTUFYX1ZNU1RBVF9FUlJPUilcbitcdCAgICBsbGFicyhjdXJyZW50IC0gKHBlcmNwdSArIHNsYWIpKSBcdTAwM2MgTUFYX1ZNU1RBVF9FUlJPUilcbiBcdFx0cmV0ID0gS1NGVF9QQVNTO1xuIFx0ZWxzZVxuLVx0XHRwcmludGYoXCJtZW1vcnkuY3VycmVudCAlbGRcXG5wZXJjcHUgJWxkXFxuc2xhYiAlbGRcXG5kZWx0YSAlbGRcXG5cIixcbi1cdFx0XHRjdXJyZW50LCBwZXJjcHUsIHNsYWIsIGN1cnJlbnQgLSAocGVyY3B1ICsgc2xhYikpO1xuK1x0XHRwcmludGYoXCJtZW1vcnkuY3VycmVudCAlbGRcXG5wZXJjcHUgJWxsZFxcbnNsYWIgJWxsZFxcbmRlbHRhICVsbGRcXG5cIixcbitcdFx0ICAgICAgIGN1cnJlbnQsIHBlcmNwdSwgc2xhYiwgY3VycmVudCAtIChwZXJjcHUgKyBzbGFiKSk7XG4gXG4gY2xlYW51cF9jaGlsZHJlbjpcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIDEwMDA7IGkrKykge1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2Nncm91cC90ZXN0X21lbWNvbnRyb2wuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2Nncm91cC90ZXN0X21lbWNvbnRyb2wuY1xuaW5kZXggM2E4NGQwNjhmYmYzNi4uNTM5NjUwYzFkNTYyNiAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2Nncm91cC90ZXN0X21lbWNvbnRyb2wuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvY2dyb3VwL3Rlc3RfbWVtY29udHJvbC5jXG5AQCAtMTkyLDcgKzE5Miw4IEBAIHN0YXRpYyBpbnQgYWxsb2NfYW5vbl81ME1fY2hlY2soY29uc3QgY2hhciAqY2dyb3VwLCB2b2lkICphcmcpXG4ge1xuIFx0c2l6ZV90IHNpemUgPSBNQig1MCk7XG4gXHRjaGFyICpidWY7XG4tXHRsb25nIGFub24sIGN1cnJlbnQ7XG4rXHRzNjQgYW5vbjtcbitcdGxvbmcgY3VycmVudDtcbiBcdGludCByZXQgPSAtMTtcbiBcbiBcdGJ1ZiA9IGFsbG9jX2FuZF9wb3B1bGF0ZV9hbm9uKHNpemUpO1xuQEAgLTIwNiw3ICsyMDcsNyBAQCBzdGF0aWMgaW50IGFsbG9jX2Fub25fNTBNX2NoZWNrKGNvbnN0IGNoYXIgKmNncm91cCwgdm9pZCAqYXJnKVxuIFx0aWYgKCF2YWx1ZXNfY2xvc2Uoc2l6ZSwgY3VycmVudCwgMykpXG4gXHRcdGdvdG8gY2xlYW51cDtcbiBcbi1cdGFub24gPSBjZ19yZWFkX2tleV9sb25nKGNncm91cCwgXCJtZW1vcnkuc3RhdFwiLCBcImFub24gXCIpO1xuK1x0YW5vbiA9IGNnX3JlYWRfa2V5X3M2NChjZ3JvdXAsIFwibWVtb3J5LnN0YXRcIiwgXCJhbm9uIFwiKTtcbiBcdGlmIChhbm9uIFx1MDAzYyAwKVxuIFx0XHRnb3RvIGNsZWFudXA7XG4gXG5AQCAtMjIzLDcgKzIyNCw4IEBAIHN0YXRpYyBpbnQgYWxsb2NfcGFnZWNhY2hlXzUwTV9jaGVjayhjb25zdCBjaGFyICpjZ3JvdXAsIHZvaWQgKmFyZylcbiB7XG4gXHRzaXplX3Qgc2l6ZSA9IE1CKDUwKTtcbiBcdGludCByZXQgPSAtMTtcbi1cdGxvbmcgY3VycmVudCwgZmlsZTtcbitcdGxvbmcgY3VycmVudDtcbitcdHM2NCBmaWxlO1xuIFx0aW50IGZkO1xuIFxuIFx0ZmQgPSBnZXRfdGVtcF9mZCgpO1xuQEAgLTIzNyw3ICsyMzksNyBAQCBzdGF0aWMgaW50IGFsbG9jX3BhZ2VjYWNoZV81ME1fY2hlY2soY29uc3QgY2hhciAqY2dyb3VwLCB2b2lkICphcmcpXG4gXHRpZiAoY3VycmVudCBcdTAwM2Mgc2l6ZSlcbiBcdFx0Z290byBjbGVhbnVwO1xuIFxuLVx0ZmlsZSA9IGNnX3JlYWRfa2V5X2xvbmcoY2dyb3VwLCBcIm1lbW9yeS5zdGF0XCIsIFwiZmlsZSBcIik7XG4rXHRmaWxlID0gY2dfcmVhZF9rZXlfczY0KGNncm91cCwgXCJtZW1vcnkuc3RhdFwiLCBcImZpbGUgXCIpO1xuIFx0aWYgKGZpbGUgXHUwMDNjIDApXG4gXHRcdGdvdG8gY2xlYW51cDtcbiBcbkBAIC02MjMsMTAgKzYyNSwxMCBAQCBzdGF0aWMgaW50IHRlc3RfbWVtY2dfcHJvdGVjdGlvbihjb25zdCBjaGFyICpyb290LCBib29sIG1pbilcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIEFSUkFZX1NJWkUoY2hpbGRyZW4pOyBpKyspIHtcbiBcdFx0aW50IGlnbm9yZV9sb3dfZXZlbnRzX2luZGV4ID0gaGFzX3JlY3Vyc2l2ZXByb3QgPyAyIDogLTE7XG4gXHRcdGludCBub19sb3dfZXZlbnRzX2luZGV4ID0gMTtcbi1cdFx0bG9uZyBsb3csIG9vbTtcbitcdFx0czY0IGxvdywgb29tO1xuIFxuLVx0XHRvb20gPSBjZ19yZWFkX2tleV9sb25nKGNoaWxkcmVuW2ldLCBcIm1lbW9yeS5ldmVudHNcIiwgXCJvb20gXCIpO1xuLVx0XHRsb3cgPSBjZ19yZWFkX2tleV9sb25nKGNoaWxkcmVuW2ldLCBcIm1lbW9yeS5ldmVudHNcIiwgXCJsb3cgXCIpO1xuK1x0XHRvb20gPSBjZ19yZWFkX2tleV9zNjQoY2hpbGRyZW5baV0sIFwibWVtb3J5LmV2ZW50c1wiLCBcIm9vbSBcIik7XG4rXHRcdGxvdyA9IGNnX3JlYWRfa2V5X3M2NChjaGlsZHJlbltpXSwgXCJtZW1vcnkuZXZlbnRzXCIsIFwibG93IFwiKTtcbiBcbiBcdFx0aWYgKG9vbSlcbiBcdFx0XHRnb3RvIGNsZWFudXA7XG5AQCAtNzExLDcgKzcxMyw3IEBAIHN0YXRpYyBpbnQgdGVzdF9tZW1jZ19oaWdoKGNvbnN0IGNoYXIgKnJvb3QpXG4ge1xuIFx0aW50IHJldCA9IEtTRlRfRkFJTDtcbiBcdGNoYXIgKm1lbWNnO1xuLVx0bG9uZyBoaWdoO1xuK1x0czY0IGhpZ2g7XG4gXG4gXHRtZW1jZyA9IGNnX25hbWUocm9vdCwgXCJtZW1jZ190ZXN0XCIpO1xuIFx0aWYgKCFtZW1jZylcbkBAIC03MzgsNyArNzQwLDcgQEAgc3RhdGljIGludCB0ZXN0X21lbWNnX2hpZ2goY29uc3QgY2hhciAqcm9vdClcbiBcdGlmIChjZ19ydW4obWVtY2csIGFsbG9jX3BhZ2VjYWNoZV9tYXhfMzBNLCBOVUxMKSlcbiBcdFx0Z290byBjbGVhbnVwO1xuIFxuLVx0aGlnaCA9IGNnX3JlYWRfa2V5X2xvbmcobWVtY2csIFwibWVtb3J5LmV2ZW50c1wiLCBcImhpZ2ggXCIpO1xuK1x0aGlnaCA9IGNnX3JlYWRfa2V5X3M2NChtZW1jZywgXCJtZW1vcnkuZXZlbnRzXCIsIFwiaGlnaCBcIik7XG4gXHRpZiAoaGlnaCBcdTAwM2M9IDApXG4gXHRcdGdvdG8gY2xlYW51cDtcbiBcbkBAIC03NzQsOCArNzc2LDggQEAgc3RhdGljIGludCB0ZXN0X21lbWNnX2hpZ2hfc3luYyhjb25zdCBjaGFyICpyb290KVxuIHtcbiBcdGludCByZXQgPSBLU0ZUX0ZBSUwsIHBpZCwgZmQgPSAtMTtcbiBcdGNoYXIgKm1lbWNnO1xuLVx0bG9uZyBwcmVfaGlnaCwgcHJlX21heDtcbi1cdGxvbmcgcG9zdF9oaWdoLCBwb3N0X21heDtcbitcdHM2NCBwcmVfaGlnaCwgcHJlX21heDtcbitcdHM2NCBwb3N0X2hpZ2gsIHBvc3RfbWF4O1xuIFxuIFx0bWVtY2cgPSBjZ19uYW1lKHJvb3QsIFwibWVtY2dfdGVzdFwiKTtcbiBcdGlmICghbWVtY2cpXG5AQCAtNzg0LDggKzc4Niw4IEBAIHN0YXRpYyBpbnQgdGVzdF9tZW1jZ19oaWdoX3N5bmMoY29uc3QgY2hhciAqcm9vdClcbiBcdGlmIChjZ19jcmVhdGUobWVtY2cpKVxuIFx0XHRnb3RvIGNsZWFudXA7XG4gXG4tXHRwcmVfaGlnaCA9IGNnX3JlYWRfa2V5X2xvbmcobWVtY2csIFwibWVtb3J5LmV2ZW50c1wiLCBcImhpZ2ggXCIpO1xuLVx0cHJlX21heCA9IGNnX3JlYWRfa2V5X2xvbmcobWVtY2csIFwibWVtb3J5LmV2ZW50c1wiLCBcIm1heCBcIik7XG4rXHRwcmVfaGlnaCA9IGNnX3JlYWRfa2V5X3M2NChtZW1jZywgXCJtZW1vcnkuZXZlbnRzXCIsIFwiaGlnaCBcIik7XG4rXHRwcmVfbWF4ID0gY2dfcmVhZF9rZXlfczY0KG1lbWNnLCBcIm1lbW9yeS5ldmVudHNcIiwgXCJtYXggXCIpO1xuIFx0aWYgKHByZV9oaWdoIFx1MDAzYyAwIHx8IHByZV9tYXggXHUwMDNjIDApXG4gXHRcdGdvdG8gY2xlYW51cDtcbiBcbkBAIC04MDgsOCArODEwLDggQEAgc3RhdGljIGludCB0ZXN0X21lbWNnX2hpZ2hfc3luYyhjb25zdCBjaGFyICpyb290KVxuIFxuIFx0Y2dfd2FpdF9mb3IoZmQpO1xuIFxuLVx0cG9zdF9oaWdoID0gY2dfcmVhZF9rZXlfbG9uZyhtZW1jZywgXCJtZW1vcnkuZXZlbnRzXCIsIFwiaGlnaCBcIik7XG4tXHRwb3N0X21heCA9IGNnX3JlYWRfa2V5X2xvbmcobWVtY2csIFwibWVtb3J5LmV2ZW50c1wiLCBcIm1heCBcIik7XG4rXHRwb3N0X2hpZ2ggPSBjZ19yZWFkX2tleV9zNjQobWVtY2csIFwibWVtb3J5LmV2ZW50c1wiLCBcImhpZ2ggXCIpO1xuK1x0cG9zdF9tYXggPSBjZ19yZWFkX2tleV9zNjQobWVtY2csIFwibWVtb3J5LmV2ZW50c1wiLCBcIm1heCBcIik7XG4gXHRpZiAocG9zdF9oaWdoIFx1MDAzYyAwIHx8IHBvc3RfbWF4IFx1MDAzYyAwKVxuIFx0XHRnb3RvIGNsZWFudXA7XG4gXG5AQCAtODM2LDcgKzgzOCw4IEBAIHN0YXRpYyBpbnQgdGVzdF9tZW1jZ19tYXgoY29uc3QgY2hhciAqcm9vdClcbiB7XG4gXHRpbnQgcmV0ID0gS1NGVF9GQUlMO1xuIFx0Y2hhciAqbWVtY2c7XG4tXHRsb25nIGN1cnJlbnQsIG1heDtcbitcdGxvbmcgY3VycmVudDtcbitcdHM2NCBtYXg7XG4gXG4gXHRtZW1jZyA9IGNnX25hbWUocm9vdCwgXCJtZW1jZ190ZXN0XCIpO1xuIFx0aWYgKCFtZW1jZylcbkBAIC04NjUsNyArODY4LDcgQEAgc3RhdGljIGludCB0ZXN0X21lbWNnX21heChjb25zdCBjaGFyICpyb290KVxuIFx0aWYgKGN1cnJlbnQgXHUwMDNlIE1CKDMwKSB8fCAhY3VycmVudClcbiBcdFx0Z290byBjbGVhbnVwO1xuIFxuLVx0bWF4ID0gY2dfcmVhZF9rZXlfbG9uZyhtZW1jZywgXCJtZW1vcnkuZXZlbnRzXCIsIFwibWF4IFwiKTtcbitcdG1heCA9IGNnX3JlYWRfa2V5X3M2NChtZW1jZywgXCJtZW1vcnkuZXZlbnRzXCIsIFwibWF4IFwiKTtcbiBcdGlmIChtYXggXHUwMDNjPSAwKVxuIFx0XHRnb3RvIGNsZWFudXA7XG4gXG5AQCAtMTAyOSw3ICsxMDMyLDggQEAgc3RhdGljIGludCB0ZXN0X21lbWNnX3N3YXBfbWF4X3BlYWsoY29uc3QgY2hhciAqcm9vdClcbiB7XG4gXHRpbnQgcmV0ID0gS1NGVF9GQUlMO1xuIFx0Y2hhciAqbWVtY2c7XG4tXHRsb25nIG1heCwgcGVhaztcbitcdHM2NCBtYXg7XG4rXHRsb25nIHBlYWs7XG4gXHRzdHJ1Y3Qgc3RhdCBzcztcbiBcdGludCBzd2FwX3BlYWtfZmQgPSAtMSwgbWVtX3BlYWtfZmQgPSAtMTtcbiBcbkBAIC0xMTIyLDEwICsxMTI2LDEwIEBAIHN0YXRpYyBpbnQgdGVzdF9tZW1jZ19zd2FwX21heF9wZWFrKGNvbnN0IGNoYXIgKnJvb3QpXG4gXHRpZiAoIWNnX3J1bihtZW1jZywgYWxsb2NfYW5vbiwgKHZvaWQgKilNQigxMDApKSlcbiBcdFx0Z290byBjbGVhbnVwO1xuIFxuLVx0aWYgKGNnX3JlYWRfa2V5X2xvbmcobWVtY2csIFwibWVtb3J5LmV2ZW50c1wiLCBcIm9vbSBcIikgIT0gMSlcbitcdGlmIChjZ19yZWFkX2tleV9zNjQobWVtY2csIFwibWVtb3J5LmV2ZW50c1wiLCBcIm9vbSBcIikgIT0gMSlcbiBcdFx0Z290byBjbGVhbnVwO1xuIFxuLVx0aWYgKGNnX3JlYWRfa2V5X2xvbmcobWVtY2csIFwibWVtb3J5LmV2ZW50c1wiLCBcIm9vbV9raWxsIFwiKSAhPSAxKVxuK1x0aWYgKGNnX3JlYWRfa2V5X3M2NChtZW1jZywgXCJtZW1vcnkuZXZlbnRzXCIsIFwib29tX2tpbGwgXCIpICE9IDEpXG4gXHRcdGdvdG8gY2xlYW51cDtcbiBcbiBcdHBlYWsgPSBjZ19yZWFkX2xvbmcobWVtY2csIFwibWVtb3J5LnBlYWtcIik7XG5AQCAtMTE4Niw3ICsxMTkwLDcgQEAgc3RhdGljIGludCB0ZXN0X21lbWNnX3N3YXBfbWF4X3BlYWsoY29uc3QgY2hhciAqcm9vdClcbiBcdGlmIChjZ19ydW4obWVtY2csIGFsbG9jX2Fub25fNTBNX2NoZWNrX3N3YXAsICh2b2lkICopTUIoMzApKSlcbiBcdFx0Z290byBjbGVhbnVwO1xuIFxuLVx0bWF4ID0gY2dfcmVhZF9rZXlfbG9uZyhtZW1jZywgXCJtZW1vcnkuZXZlbnRzXCIsIFwibWF4IFwiKTtcbitcdG1heCA9IGNnX3JlYWRfa2V5X3M2NChtZW1jZywgXCJtZW1vcnkuZXZlbnRzXCIsIFwibWF4IFwiKTtcbiBcdGlmIChtYXggXHUwMDNjPSAwKVxuIFx0XHRnb3RvIGNsZWFudXA7XG4gXG5AQCAtMTI0OCwxMCArMTI1MiwxMCBAQCBzdGF0aWMgaW50IHRlc3RfbWVtY2dfb29tX2V2ZW50cyhjb25zdCBjaGFyICpyb290KVxuIFx0aWYgKGNnX3JlYWRfc3RyY21wKG1lbWNnLCBcImNncm91cC5wcm9jc1wiLCBcIlwiKSlcbiBcdFx0Z290byBjbGVhbnVwO1xuIFxuLVx0aWYgKGNnX3JlYWRfa2V5X2xvbmcobWVtY2csIFwibWVtb3J5LmV2ZW50c1wiLCBcIm9vbSBcIikgIT0gMSlcbitcdGlmIChjZ19yZWFkX2tleV9zNjQobWVtY2csIFwibWVtb3J5LmV2ZW50c1wiLCBcIm9vbSBcIikgIT0gMSlcbiBcdFx0Z290byBjbGVhbnVwO1xuIFxuLVx0aWYgKGNnX3JlYWRfa2V5X2xvbmcobWVtY2csIFwibWVtb3J5LmV2ZW50c1wiLCBcIm9vbV9raWxsIFwiKSAhPSAxKVxuK1x0aWYgKGNnX3JlYWRfa2V5X3M2NChtZW1jZywgXCJtZW1vcnkuZXZlbnRzXCIsIFwib29tX2tpbGwgXCIpICE9IDEpXG4gXHRcdGdvdG8gY2xlYW51cDtcbiBcbiBcdHJldCA9IEtTRlRfUEFTUztcbkBAIC0xMzU0LDEzICsxMzU4LDE0IEBAIHN0YXRpYyBpbnQgdGNwX2NsaWVudChjb25zdCBjaGFyICpjZ3JvdXAsIHVuc2lnbmVkIHNob3J0IHBvcnQpXG4gXHRyZXQgPSBLU0ZUX0ZBSUw7XG4gXHR3aGlsZSAocmV0cmllcy0tKSB7XG4gXHRcdHVpbnQ4X3QgYnVmWzB4MTAwMDAwXTtcbi1cdFx0bG9uZyBjdXJyZW50LCBzb2NrO1xuK1x0XHRsb25nIGN1cnJlbnQ7XG4rXHRcdHM2NCBzb2NrO1xuIFxuIFx0XHRpZiAocmVhZChzaywgYnVmLCBzaXplb2YoYnVmKSkgXHUwMDNjPSAwKVxuIFx0XHRcdGdvdG8gY2xvc2Vfc2s7XG4gXG4gXHRcdGN1cnJlbnQgPSBjZ19yZWFkX2xvbmcoY2dyb3VwLCBcIm1lbW9yeS5jdXJyZW50XCIpO1xuLVx0XHRzb2NrID0gY2dfcmVhZF9rZXlfbG9uZyhjZ3JvdXAsIFwibWVtb3J5LnN0YXRcIiwgXCJzb2NrIFwiKTtcbitcdFx0c29jayA9IGNnX3JlYWRfa2V5X3M2NChjZ3JvdXAsIFwibWVtb3J5LnN0YXRcIiwgXCJzb2NrIFwiKTtcbiBcbiBcdFx0aWYgKGN1cnJlbnQgXHUwMDNjIDAgfHwgc29jayBcdTAwM2MgMClcbiBcdFx0XHRnb3RvIGNsb3NlX3NrO1xuQEAgLTEzOTIsNyArMTM5Nyw3IEBAIHN0YXRpYyBpbnQgdGVzdF9tZW1jZ19zb2NrKGNvbnN0IGNoYXIgKnJvb3QpXG4gXHRpbnQgYmluZF9yZXRyaWVzID0gNSwgcmV0ID0gS1NGVF9GQUlMLCBwaWQsIGVycjtcbiBcdHVuc2lnbmVkIHNob3J0IHBvcnQ7XG4gXHRjaGFyICptZW1jZztcbi1cdGxvbmcgc29ja19wb3N0ID0gLTE7XG4rXHRzNjQgc29ja19wb3N0ID0gLTE7XG4gXG4gXHRtZW1jZyA9IGNnX25hbWUocm9vdCwgXCJtZW1jZ190ZXN0XCIpO1xuIFx0aWYgKCFtZW1jZylcbkBAIC0xNDU5LDcgKzE0NjQsNyBAQCBzdGF0aWMgaW50IHRlc3RfbWVtY2dfc29jayhjb25zdCBjaGFyICpyb290KVxuIFx0ICogc2NoZWR1bGluZyBzbGFjaykgYW5kIHJlcXVpcmUgdGhhdCB0aGUgXCJzb2NrIFwiIGNvdW50ZXJcbiBcdCAqIGV2ZW50dWFsbHkgZHJvcHMgdG8gemVyby5cbiBcdCAqL1xuLVx0c29ja19wb3N0ID0gY2dfcmVhZF9rZXlfbG9uZ19wb2xsKG1lbWNnLCBcIm1lbW9yeS5zdGF0XCIsIFwic29jayBcIiwgMCxcbitcdHNvY2tfcG9zdCA9IGNnX3JlYWRfa2V5X3M2NF9wb2xsKG1lbWNnLCBcIm1lbW9yeS5zdGF0XCIsIFwic29jayBcIiwgMCxcbiBcdFx0XHRcdFx0IE1FTUNHX1NPQ0tTVEFUX1dBSVRfUkVUUklFUyxcbiBcdFx0XHRcdFx0IERFRkFVTFRfV0FJVF9JTlRFUlZBTF9VUyk7XG4gXHRpZiAoc29ja19wb3N0KVxuQEAgLTE0ODQsNyArMTQ4OSw3IEBAIHN0YXRpYyBpbnQgdGVzdF9tZW1jZ19vb21fZ3JvdXBfbGVhZl9ldmVudHMoY29uc3QgY2hhciAqcm9vdClcbiB7XG4gXHRpbnQgcmV0ID0gS1NGVF9GQUlMO1xuIFx0Y2hhciAqcGFyZW50LCAqY2hpbGQ7XG4tXHRsb25nIHBhcmVudF9vb21fZXZlbnRzO1xuK1x0czY0IHBhcmVudF9vb21fZXZlbnRzO1xuIFxuIFx0cGFyZW50ID0gY2dfbmFtZShyb290LCBcIm1lbWNnX3Rlc3RfMFwiKTtcbiBcdGNoaWxkID0gY2dfbmFtZShyb290LCBcIm1lbWNnX3Rlc3RfMC9tZW1jZ190ZXN0XzFcIik7XG5AQCAtMTUxOSwxMSArMTUyNCwxMSBAQCBzdGF0aWMgaW50IHRlc3RfbWVtY2dfb29tX2dyb3VwX2xlYWZfZXZlbnRzKGNvbnN0IGNoYXIgKnJvb3QpXG4gXHRpZiAoY2dfdGVzdF9wcm9jX2tpbGxlZChjaGlsZCkpXG4gXHRcdGdvdG8gY2xlYW51cDtcbiBcbi1cdGlmIChjZ19yZWFkX2tleV9sb25nKGNoaWxkLCBcIm1lbW9yeS5ldmVudHNcIiwgXCJvb21fa2lsbCBcIikgXHUwMDNjPSAwKVxuK1x0aWYgKGNnX3JlYWRfa2V5X3M2NChjaGlsZCwgXCJtZW1vcnkuZXZlbnRzXCIsIFwib29tX2tpbGwgXCIpIFx1MDAzYz0gMClcbiBcdFx0Z290byBjbGVhbnVwO1xuIFxuLVx0cGFyZW50X29vbV9ldmVudHMgPSBjZ19yZWFkX2tleV9sb25nKFxuLVx0XHRcdHBhcmVudCwgXCJtZW1vcnkuZXZlbnRzXCIsIFwib29tX2tpbGwgXCIpO1xuK1x0cGFyZW50X29vbV9ldmVudHMgPVxuK1x0XHRjZ19yZWFkX2tleV9zNjQocGFyZW50LCBcIm1lbW9yeS5ldmVudHNcIiwgXCJvb21fa2lsbCBcIik7XG4gXHQvKlxuIFx0ICogSWYgbWVtb3J5X2xvY2FsZXZlbnRzIGlzIG5vdCBlbmFibGVkICh0aGUgZGVmYXVsdCksIHRoZSBwYXJlbnQgc2hvdWxkXG4gXHQgKiBjb3VudCBPT00gZXZlbnRzIGluIGl0cyBjaGlsZHJlbiBncm91cHMuIE90aGVyd2lzZSwgaXQgc2hvdWxkIG5vdFxuQEAgLTE2MzksNyArMTY0NCw3IEBAIHN0YXRpYyBpbnQgdGVzdF9tZW1jZ19vb21fZ3JvdXBfc2NvcmVfZXZlbnRzKGNvbnN0IGNoYXIgKnJvb3QpXG4gXHRpZiAoIWNnX3J1bihtZW1jZywgYWxsb2NfYW5vbiwgKHZvaWQgKilNQigxMDApKSlcbiBcdFx0Z290byBjbGVhbnVwO1xuIFxuLVx0aWYgKGNnX3JlYWRfa2V5X2xvbmcobWVtY2csIFwibWVtb3J5LmV2ZW50c1wiLCBcIm9vbV9raWxsIFwiKSAhPSAzKVxuK1x0aWYgKGNnX3JlYWRfa2V5X3M2NChtZW1jZywgXCJtZW1vcnkuZXZlbnRzXCIsIFwib29tX2tpbGwgXCIpICE9IDMpXG4gXHRcdGdvdG8gY2xlYW51cDtcbiBcbiBcdGlmIChraWxsKHNhZmVfcGlkLCBTSUdLSUxMKSlcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9jZ3JvdXAvdGVzdF9waWRzLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9jZ3JvdXAvdGVzdF9waWRzLmNcbmluZGV4IDcxMDEwOWI1M2RmZTkuLmY0ZDViYzlmNWYyNGYgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9jZ3JvdXAvdGVzdF9waWRzLmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2Nncm91cC90ZXN0X3BpZHMuY1xuQEAgLTExMSwxMiArMTExLDExIEBAIHN0YXRpYyBpbnQgdGVzdF9waWRzX2V2ZW50cyhjb25zdCBjaGFyICpyb290KVxuIFx0aWYgKGtpbGwocGlkLCBTSUdJTlQpKVxuIFx0XHRnb3RvIGNsZWFudXA7XG4gXG4tXHRpZiAoY2dfcmVhZF9rZXlfbG9uZyhjZ19jaGlsZCwgXCJwaWRzLmV2ZW50c1wiLCBcIm1heCBcIikgIT0gMClcbitcdGlmIChjZ19yZWFkX2tleV9zNjQoY2dfY2hpbGQsIFwicGlkcy5ldmVudHNcIiwgXCJtYXggXCIpICE9IDApXG4gXHRcdGdvdG8gY2xlYW51cDtcbi1cdGlmIChjZ19yZWFkX2tleV9sb25nKGNnX3BhcmVudCwgXCJwaWRzLmV2ZW50c1wiLCBcIm1heCBcIikgIT0gMSlcbitcdGlmIChjZ19yZWFkX2tleV9zNjQoY2dfcGFyZW50LCBcInBpZHMuZXZlbnRzXCIsIFwibWF4IFwiKSAhPSAxKVxuIFx0XHRnb3RvIGNsZWFudXA7XG4gXG4tXG4gXHRyZXQgPSBLU0ZUX1BBU1M7XG4gXG4gY2xlYW51cDpcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9jZ3JvdXAvdGVzdF96c3dhcC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvY2dyb3VwL3Rlc3RfenN3YXAuY1xuaW5kZXggNjA5YzQ4ZjM4NTI0MS4uNmU3ZWUxMWJjOTdhNSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2Nncm91cC90ZXN0X3pzd2FwLmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2Nncm91cC90ZXN0X3pzd2FwLmNcbkBAIC01OSwxNCArNTksMTQgQEAgc3RhdGljIGludCBnZXRfenN3YXBfc3RvcmVkX3BhZ2VzKHNpemVfdCAqdmFsdWUpXG4gXHRyZXR1cm4gcmVhZF9pbnQoUEFUSF9aU1dBUF9TVE9SRURfUEFHRVMsIHZhbHVlKTtcbiB9XG4gXG4tc3RhdGljIGxvbmcgZ2V0X2NnX3diX2NvdW50KGNvbnN0IGNoYXIgKmNnKVxuK3N0YXRpYyBzNjQgZ2V0X2NnX3diX2NvdW50KGNvbnN0IGNoYXIgKmNnKVxuIHtcbi1cdHJldHVybiBjZ19yZWFkX2tleV9sb25nKGNnLCBcIm1lbW9yeS5zdGF0XCIsIFwienN3cHdiXCIpO1xuK1x0cmV0dXJuIGNnX3JlYWRfa2V5X3M2NChjZywgXCJtZW1vcnkuc3RhdFwiLCBcInpzd3B3YlwiKTtcbiB9XG4gXG4tc3RhdGljIGxvbmcgZ2V0X3pzd3BvdXQoY29uc3QgY2hhciAqY2dyb3VwKVxuK3N0YXRpYyBzNjQgZ2V0X3pzd3BvdXQoY29uc3QgY2hhciAqY2dyb3VwKVxuIHtcbi1cdHJldHVybiBjZ19yZWFkX2tleV9sb25nKGNncm91cCwgXCJtZW1vcnkuc3RhdFwiLCBcInpzd3BvdXQgXCIpO1xuK1x0cmV0dXJuIGNnX3JlYWRfa2V5X3M2NChjZ3JvdXAsIFwibWVtb3J5LnN0YXRcIiwgXCJ6c3dwb3V0IFwiKTtcbiB9XG4gXG4gc3RhdGljIGludCBhbGxvY2F0ZV9hbmRfcmVhZF9ieXRlcyhjb25zdCBjaGFyICpjZ3JvdXAsIHZvaWQgKmFyZylcbkBAIC0xMjUsOSArMTI1LDEwIEBAIHN0YXRpYyBjaGFyICpzZXR1cF90ZXN0X2dyb3VwXzFNKGNvbnN0IGNoYXIgKnJvb3QsIGNvbnN0IGNoYXIgKm5hbWUpXG4gICogV3JpdGViYWNrIGlzIGFzeW5jaHJvbm91czsgcG9sbCB1bnRpbCBhdCBsZWFzdCBvbmUgd3JpdGViYWNrIGhhc1xuICAqIGJlZW4gcmVjb3JkZWQgZm9yIEBjZywgb3IgdW50aWwgQHRpbWVvdXRfbXMgaGFzIGVsYXBzZWQuXG4gICovXG4tc3RhdGljIGxvbmcgd2FpdF9mb3Jfd3JpdGViYWNrKGNvbnN0IGNoYXIgKmNnLCBpbnQgdGltZW91dF9tcylcbitzdGF0aWMgczY0IHdhaXRfZm9yX3dyaXRlYmFjayhjb25zdCBjaGFyICpjZywgaW50IHRpbWVvdXRfbXMpXG4ge1xuLVx0bG9uZyBlbGFwc2VkLCBjb3VudDtcbitcdGxvbmcgZWxhcHNlZDtcbitcdHM2NCBjb3VudDtcbiBcdGZvciAoZWxhcHNlZCA9IDA7IGVsYXBzZWQgXHUwMDNjIHRpbWVvdXRfbXM7IGVsYXBzZWQgKz0gMTAwKSB7XG4gXHRcdGNvdW50ID0gZ2V0X2NnX3diX2NvdW50KGNnKTtcbiBcbkBAIC0xNDcsNyArMTQ4LDcgQEAgc3RhdGljIGxvbmcgd2FpdF9mb3Jfd3JpdGViYWNrKGNvbnN0IGNoYXIgKmNnLCBpbnQgdGltZW91dF9tcylcbiAgKi9cbiBzdGF0aWMgaW50IHRlc3RfenN3YXBfdXNhZ2UoY29uc3QgY2hhciAqcm9vdClcbiB7XG4tXHRsb25nIHpzd3BvdXRfYmVmb3JlLCB6c3dwb3V0X2FmdGVyO1xuK1x0czY0IHpzd3BvdXRfYmVmb3JlLCB6c3dwb3V0X2FmdGVyO1xuIFx0aW50IHJldCA9IEtTRlRfRkFJTDtcbiBcdGNoYXIgKnRlc3RfZ3JvdXA7XG4gXG5AQCAtMTkxLDcgKzE5Miw4IEBAIHN0YXRpYyBpbnQgdGVzdF9zd2FwaW5fbm96c3dhcChjb25zdCBjaGFyICpyb290KVxuIHtcbiBcdGludCByZXQgPSBLU0ZUX0ZBSUw7XG4gXHRjaGFyICp0ZXN0X2dyb3VwLCBtZW1fbWF4X2J1ZlszMl07XG4tXHRsb25nIHN3YXBfcGVhaywgenN3cG91dCwgbWluX3N3YXA7XG4rXHRsb25nIHN3YXBfcGVhaywgbWluX3N3YXA7XG4rXHRzNjQgenN3cG91dDtcbiBcdHNpemVfdCBhbGxvY2F0aW9uX3NpemUgPSBwYWdlX3NpemUgKiA1MTI7XG4gXG4gXHRtaW5fc3dhcCA9IGFsbG9jYXRpb25fc2l6ZSAvIDQ7XG5AQCAtMjQ4LDcgKzI1MCw3IEBAIHN0YXRpYyBpbnQgdGVzdF96c3dhcGluKGNvbnN0IGNoYXIgKnJvb3QpXG4ge1xuIFx0aW50IHJldCA9IEtTRlRfRkFJTDtcbiBcdGNoYXIgKnRlc3RfZ3JvdXA7XG4tXHRsb25nIHpzd3BpbjtcbitcdHM2NCB6c3dwaW47XG4gXG4gXHR0ZXN0X2dyb3VwID0gY2dfbmFtZShyb290LCBcInpzd2FwaW5fdGVzdFwiKTtcbiBcdGlmICghdGVzdF9ncm91cClcbkBAIC0yNjQsNyArMjY2LDcgQEAgc3RhdGljIGludCB0ZXN0X3pzd2FwaW4oY29uc3QgY2hhciAqcm9vdClcbiBcdGlmIChjZ19ydW4odGVzdF9ncm91cCwgYWxsb2NhdGVfYW5kX3JlYWRfYnl0ZXMsICh2b2lkICopTUIoMzIpKSlcbiBcdFx0Z290byBvdXQ7XG4gXG4tXHR6c3dwaW4gPSBjZ19yZWFkX2tleV9sb25nKHRlc3RfZ3JvdXAsIFwibWVtb3J5LnN0YXRcIiwgXCJ6c3dwaW4gXCIpO1xuK1x0enN3cGluID0gY2dfcmVhZF9rZXlfczY0KHRlc3RfZ3JvdXAsIFwibWVtb3J5LnN0YXRcIiwgXCJ6c3dwaW4gXCIpO1xuIFx0aWYgKHpzd3BpbiBcdTAwM2MgMCkge1xuIFx0XHRrc2Z0X3ByaW50X21zZyhcImZhaWxlZCB0byBnZXQgenN3cGluXFxuXCIpO1xuIFx0XHRnb3RvIG91dDtcbkBAIC0zNTUsMTEgKzM1NywxMSBAQCBzdGF0aWMgaW50IGF0dGVtcHRfd3JpdGViYWNrKGNvbnN0IGNoYXIgKmNncm91cCwgdm9pZCAqYXJnKVxuIFxuIHN0YXRpYyBpbnQgdGVzdF96c3dhcF93cml0ZWJhY2tfb25lKGNvbnN0IGNoYXIgKmNncm91cCwgYm9vbCB3YilcbiB7XG4tXHRsb25nIHpzd3B3Yl9iZWZvcmUsIHpzd3B3Yl9hZnRlcjtcbitcdHM2NCB6c3dwd2JfYmVmb3JlLCB6c3dwd2JfYWZ0ZXI7XG4gXG4gXHR6c3dwd2JfYmVmb3JlID0gZ2V0X2NnX3diX2NvdW50KGNncm91cCk7XG4gXHRpZiAoenN3cHdiX2JlZm9yZSAhPSAwKSB7XG4tXHRcdGtzZnRfcHJpbnRfbXNnKFwienN3cHdiX2JlZm9yZSA9ICVsZCBpbnN0ZWFkIG9mIDBcXG5cIiwgenN3cHdiX2JlZm9yZSk7XG4rXHRcdGtzZnRfcHJpbnRfbXNnKFwienN3cHdiX2JlZm9yZSA9ICVsbGQgaW5zdGVhZCBvZiAwXFxuXCIsIHpzd3B3Yl9iZWZvcmUpO1xuIFx0XHRyZXR1cm4gLTE7XG4gXHR9XG4gXG5AQCAtMzc1LDcgKzM3Nyw3IEBAIHN0YXRpYyBpbnQgdGVzdF96c3dhcF93cml0ZWJhY2tfb25lKGNvbnN0IGNoYXIgKmNncm91cCwgYm9vbCB3YilcbiBcdFx0cmV0dXJuIC0xO1xuIFxuIFx0aWYgKHdiICE9ICEhenN3cHdiX2FmdGVyKSB7XG4tXHRcdGtzZnRfcHJpbnRfbXNnKFwienN3cHdiX2FmdGVyIGlzICVsZCB3aGlsZSB3YiBpcyAlc1xcblwiLFxuK1x0XHRrc2Z0X3ByaW50X21zZyhcInpzd3B3Yl9hZnRlciBpcyAlbGxkIHdoaWxlIHdiIGlzICVzXFxuXCIsXG4gXHRcdFx0XHR6c3dwd2JfYWZ0ZXIsIHdiID8gXCJlbmFibGVkXCIgOiBcImRpc2FibGVkXCIpO1xuIFx0XHRyZXR1cm4gLTE7XG4gXHR9XG5AQCAtNDA4LDYgKzQxMCw4IEBAIHN0YXRpYyBpbnQgdGVzdF96c3dhcF93cml0ZWJhY2soY29uc3QgY2hhciAqcm9vdCwgYm9vbCB3YilcbiBcdCAqIFRodXMsIHRoZSBwYXJlbnQncyBzZXR0aW5nIHNoYWxsIGJlIHdoYXQncyBpbiBlZmZlY3QuICovXG4gXHRpZiAoY2dfd3JpdGUodGVzdF9ncm91cCwgXCJtZW1vcnkuenN3YXAubWF4XCIsIFwibWF4XCIpKVxuIFx0XHRnb3RvIG91dDtcbitcdGlmIChjZ19yZWFkX3N0cmNtcF93YWl0KHRlc3RfZ3JvdXAsIFwiY2dyb3VwLmV2ZW50c1wiLCBcInBvcHVsYXRlZCAwXFxuXCIpKVxuK1x0XHRnb3RvIG91dDtcbiBcdGlmIChjZ193cml0ZSh0ZXN0X2dyb3VwLCBcImNncm91cC5zdWJ0cmVlX2NvbnRyb2xcIiwgXCIrbWVtb3J5XCIpKVxuIFx0XHRnb3RvIG91dDtcbiBcbkBAIC00ODUsNyArNDg5LDcgQEAgc3RhdGljIGludCB0ZXN0X25vX2ludmFzaXZlX2Nncm91cF9zaHJpbmsoY29uc3QgY2hhciAqcm9vdClcbiBcdFx0bWVtc2V0KFx1MDAyNnp3X2FsbG9jYXRpb25bb2ZmXSwgMCwgcGFnZV9zaXplKTtcbiBcdFx0bWVtc2V0KFx1MDAyNnp3X2FsbG9jYXRpb25bb2ZmXSwgJ2EnLCBwYWdlX3NpemUvNCk7XG4gXHR9XG4tXHRpZiAoY2dfcmVhZF9rZXlfbG9uZyh6d19ncm91cCwgXCJtZW1vcnkuc3RhdFwiLCBcInpzd2FwcGVkXCIpIFx1MDAzYyAxKVxuK1x0aWYgKGNnX3JlYWRfa2V5X3M2NCh6d19ncm91cCwgXCJtZW1vcnkuc3RhdFwiLCBcInpzd2FwcGVkXCIpIFx1MDAzYyAxKVxuIFx0XHRnb3RvIG91dDtcbiBcbiBcdC8qIFB1c2ggd2JfZ3JvdXAgbWVtb3J5IGludG8genN3YXAgd2l0aCBoYXJkLXRvLWNvbXByZXNzIGRhdGEgdG8gdHJpZ2dlciB3YiAqL1xuQEAgLTYyOCwxMSArNjMyLDEyIEBAIHN0YXRpYyBpbnQgdGVzdF9ub19rbWVtX2J5cGFzcyhjb25zdCBjaGFyICpyb290KVxuIFx0XHRcdGJyZWFrO1xuIFx0XHQvKiBJZiBtZW1vcnkgd2FzIHB1c2hlZCB0byB6c3dhcCwgdmVyaWZ5IGl0IGJlbG9uZ3MgdG8gbWVtY2cgKi9cbiBcdFx0aWYgKHN0b3JlZF9wYWdlcyBcdTAwM2Ugc3RvcmVkX3BhZ2VzX3RocmVzaG9sZCkge1xuLVx0XHRcdGludCB6c3dhcHBlZCA9IGNnX3JlYWRfa2V5X2xvbmcodGVzdF9ncm91cCwgXCJtZW1vcnkuc3RhdFwiLCBcInpzd2FwcGVkIFwiKTtcbi1cdFx0XHRpbnQgZGVsdGEgPSBzdG9yZWRfcGFnZXMgKiBwYWdlX3NpemUgLSB6c3dhcHBlZDtcbi1cdFx0XHRpbnQgcmVzdWx0X29rID0gZGVsdGEgXHUwMDNjIHN0b3JlZF9wYWdlcyAqIHBhZ2Vfc2l6ZSAvIDQ7XG4rXHRcdFx0czY0IHpzd2FwcGVkID0gY2dfcmVhZF9rZXlfczY0KFxuK1x0XHRcdFx0dGVzdF9ncm91cCwgXCJtZW1vcnkuc3RhdFwiLCBcInpzd2FwcGVkIFwiKTtcbitcdFx0XHRzNjQgZGVsdGEgPSAoczY0KXN0b3JlZF9wYWdlcyAqIHBhZ2Vfc2l6ZSAtIHpzd2FwcGVkO1xuK1x0XHRcdHM2NCBtYXhfZGVsdGEgPSAoczY0KXN0b3JlZF9wYWdlcyAqIHBhZ2Vfc2l6ZSAvIDQ7XG4gXG4tXHRcdFx0cmV0ID0gcmVzdWx0X29rID8gS1NGVF9QQVNTIDogS1NGVF9GQUlMO1xuK1x0XHRcdHJldCA9IChkZWx0YSBcdTAwM2MgbWF4X2RlbHRhKSA/IEtTRlRfUEFTUyA6IEtTRlRfRkFJTDtcbiBcdFx0XHRicmVhaztcbiBcdFx0fVxuIFx0fVxuQEAgLTcwMSw5ICs3MDYsOSBAQCBzdGF0aWMgaW50IGFsbG9jYXRlX3JhbmRvbV9hbmRfd2FpdChjb25zdCBjaGFyICpjZ3JvdXAsIHZvaWQgKmFyZylcbiBcdHJldHVybiAwO1xuIH1cbiBcbi1zdGF0aWMgbG9uZyBnZXRfenN3YXBfaW5jb21wKGNvbnN0IGNoYXIgKmNncm91cClcbitzdGF0aWMgczY0IGdldF96c3dhcF9pbmNvbXAoY29uc3QgY2hhciAqY2dyb3VwKVxuIHtcbi1cdHJldHVybiBjZ19yZWFkX2tleV9sb25nKGNncm91cCwgXCJtZW1vcnkuc3RhdFwiLCBcInpzd2FwX2luY29tcCBcIik7XG4rXHRyZXR1cm4gY2dfcmVhZF9rZXlfczY0KGNncm91cCwgXCJtZW1vcnkuc3RhdFwiLCBcInpzd2FwX2luY29tcCBcIik7XG4gfVxuIFxuIC8qXG5AQCAtNzE5LDcgKzcyNCw3IEBAIHN0YXRpYyBpbnQgdGVzdF96c3dhcF9pbmNvbXByZXNzaWJsZShjb25zdCBjaGFyICpyb290KVxuIFx0aW50IHJldCA9IEtTRlRfRkFJTDtcbiBcdHN0cnVjdCBpbmNvbXBfY2hpbGRfYXJncyAqdmFsdWVzO1xuIFx0Y2hhciAqdGVzdF9ncm91cDtcbi1cdGxvbmcgenN3YXBfaW5jb21wO1xuK1x0czY0IHpzd2FwX2luY29tcDtcbiBcdHBpZF90IGNoaWxkX3BpZDtcbiBcdGludCBjaGlsZF9zdGF0dXM7XG4gXHRjaGFyIGJ1ZjtcbkBAIC03NTUsMTMgKzc2MCwxNSBAQCBzdGF0aWMgaW50IHRlc3RfenN3YXBfaW5jb21wcmVzc2libGUoY29uc3QgY2hhciAqcm9vdClcbiBcbiBcdHpzd2FwX2luY29tcCA9IGdldF96c3dhcF9pbmNvbXAodGVzdF9ncm91cCk7XG4gXHRpZiAoenN3YXBfaW5jb21wIFx1MDAzYz0gMCkge1xuLVx0XHRsb25nIHpzd3BvdXQgPSBnZXRfenN3cG91dCh0ZXN0X2dyb3VwKTtcbi1cdFx0bG9uZyB6c3dhcHBlZCA9IGNnX3JlYWRfa2V5X2xvbmcodGVzdF9ncm91cCwgXCJtZW1vcnkuc3RhdFwiLCBcInpzd2FwcGVkIFwiKTtcbi1cdFx0bG9uZyB6c3dhcF9iID0gY2dfcmVhZF9rZXlfbG9uZyh0ZXN0X2dyb3VwLCBcIm1lbW9yeS5zdGF0XCIsIFwienN3YXAgXCIpO1xuLVxuLVx0XHRrc2Z0X3ByaW50X21zZyhcInpzd2FwX2luY29tcCBub3QgaW5jcmVhc2VkOiAlbGRcXG5cIiwgenN3YXBfaW5jb21wKTtcbi1cdFx0a3NmdF9wcmludF9tc2coXCJkZWJ1ZzogenN3cG91dD0lbGQgenN3YXBwZWQ9JWxkIHpzd2FwX2I9JWxkXFxuXCIsXG4tXHRcdFx0ICAgICAgIHpzd3BvdXQsIHpzd2FwcGVkLCB6c3dhcF9iKTtcbitcdFx0czY0IHpzd3BvdXQgPSBnZXRfenN3cG91dCh0ZXN0X2dyb3VwKTtcbitcdFx0czY0IHpzd2FwcGVkID1cbitcdFx0XHRjZ19yZWFkX2tleV9zNjQodGVzdF9ncm91cCwgXCJtZW1vcnkuc3RhdFwiLCBcInpzd2FwcGVkIFwiKTtcbitcdFx0czY0IHpzd2FwX2IgPVxuK1x0XHRcdGNnX3JlYWRfa2V5X3M2NCh0ZXN0X2dyb3VwLCBcIm1lbW9yeS5zdGF0XCIsIFwienN3YXAgXCIpO1xuK1xuK1x0XHRrc2Z0X3ByaW50X21zZyhcInpzd2FwX2luY29tcCBub3QgaW5jcmVhc2VkOiAlbGxkXFxuXCIsIHpzd2FwX2luY29tcCk7XG4rXHRcdGtzZnRfcHJpbnRfbXNnKFwiZGVidWc6IHpzd3BvdXQ9JWxsZCB6c3dhcHBlZD0lbGxkIHpzd2FwX2I9JWxsZFxcblwiLFxuK1x0XHRcdFx0enN3cG91dCwgenN3YXBwZWQsIHpzd2FwX2IpO1xuIFx0XHRrc2Z0X3ByaW50X21zZyhcImRlYnVnOiBtYWR2aXNlIHJldD0lZCBlcnJubz0lZFxcblwiLFxuIFx0XHRcdCAgICAgICB2YWx1ZXMtXHUwMDNlbWFkdmlzZV9yZXQsIHZhbHVlcy1cdTAwM2VtYWR2aXNlX2Vycm5vKTtcbiBcdFx0Z290byBvdXRfa2lsbDtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDA4OjUxOjE3LjE5MTMyNzc4MVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQ1MzQ2MDg2NTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyBFdmFsdWF0aW9uOiBDZ3JvdXAgU2VsZnRlc3RzIFBhdGNoKipcblxuT2theSwgbGV0J3MgYXNzZXNzIHRoaXMgcGF0Y2ggc2VyaWVzIGZvciBzeXprYWxsZXIgZnV6emluZyBwb3RlbnRpYWwuIEZpcnN0LCBJIG5lZWQgdG8gc2VlIHRoZSBzY29wZSBvZiB0aGUgbW9kaWZpY2F0aW9ucy4gTG9va2luZyBhdCB0aGUgZGlmZiwgaXQgYXBwZWFycyB0aGUgY2hhbmdlcyBhcmUgbGltaXRlZCB0byB0aGVzZSBmaWxlczpcblxuKiAgIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9jZ3JvdXAvbGliL2Nncm91cF91dGlsLmNgXG4qICAgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2Nncm91cC9saWIvaW5jbHVkZS9jZ3JvdXBfdXRpbC5oYFxuKiAgIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9jZ3JvdXAvdGVzdF9jcHUuY2BcbiogICBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvY2dyb3VwL3Rlc3RfZnJlZXplci5jYFxuKiAgIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9jZ3JvdXAvdGVzdF9rbWVtLmNgXG4qICAgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2Nncm91cC90ZXN0X21lbWNvbnRyb2wuY2BcbiogICBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvY2dyb3VwL3Rlc3RfcGlkcy5jYFxuKiAgIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9jZ3JvdXAvdGVzdF96c3dhcC5jYFxuXG5BbGwgb2YgdGhlc2UgYXJlIGNvbnRhaW5lZCB3aXRoaW4gdGhlIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9jZ3JvdXAvYCBkaXJlY3RvcnksIHdoaWNoIGltbWVkaWF0ZWx5IHJhaXNlcyBhIGZsYWcuIE5vdywgbGV0J3MgYXBwbHkgdGhlIGd1aWRlbGluZXMuIFNwZWNpZmljYWxseSwgdGhlIFwiTkVHQVRJVkUgQ1JJVEVSSUFcIiBzZWN0aW9uIGRpY3RhdGVzIHdoZW4gd2UgKnNob3VsZG4ndCogZnV6ei4gQW5kIHRoZSBydWxlIGlzIHByZXR0eSBjbGVhcjogY2hhbmdlcyB0byB1c2VyLXNwYWNlIHNlbGYtdGVzdHMgYXJlIGEgbm8tZ28sIGFzIGxvbmcgYXMgdGhleSBkb24ndCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAoYHZtbGludXhgKSBvciBrZXJuZWwgbW9kdWxlcy5cblxuR2l2ZW4gdGhhdCB0aGVzZSBtb2RpZmljYXRpb25zIGFyZSBzdHJpY3RseSB3aXRoaW4gdGhlIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9jZ3JvdXAvYCBkaXJlY3RvcnksIHdoaWNoIEkga25vdyBpcyBkZWRpY2F0ZWQgdG8gdXNlci1zcGFjZSBzZWxmLXRlc3RzIGFuZCBhcmUgbm90IHJlbGF0ZWQgdG8ga2VybmVsIGNvZGUsIGl0J3MgY2xlYXIgdGhlc2UgbW9kaWZpY2F0aW9ucyBkb24ndCBmYWxsIGludG8gdGhlIGNhdGVnb3JpZXMgdGhhdCB3YXJyYW50IGZ1enppbmcgd2l0aCBzeXprYWxsZXIuXG5cblRoZXJlZm9yZTpcblxuKiAgIGBXb3J0aEZ1enppbmcgPSBmYWxzZWBcbiogICBgRm9jdXNTeW1ib2xzID0gW11gIChubyBzcGVjaWZpYyBzeW1ib2xzIG5lZWQgdG8gYmUgdHJhY2tlZClcbiogICBgRW5hYmxlQ29uZmlncyA9IFtdYCAobm8gc3BlY2lmaWMgY29uZmlndXJhdGlvbnMgYXJlIG5lZWRlZClcbiogICBgUmVhc29uaW5nID0gXCJUaGUgcGF0Y2ggb25seSBtb2RpZmllcyB1c2VyLXNwYWNlIGNncm91cCBzZWxmdGVzdHMgdW5kZXIgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvY2dyb3VwLyBhbmQgZG9lcyBub3QgYWZmZWN0IHRoZSBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLlwiYFxuXG5JJ20gY29uZmlkZW50IGluIHRoaXMgZXZhbHVhdGlvbi4gTGV0J3MgY2FsbCBgc2V0LXJlc3VsdHNgIHRvIHJlY29yZCB0aGlzIGRlY2lzaW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjMwNCwiT3V0cHV0VG9rZW5zIjo3MywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ2NiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDA4OjUxOjIxLjcyNTk0MDk3NFoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDAxMzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgb25seSB1c2VyLXNwYWNlIGNncm91cCBzZWxmLXRlc3RzIHVuZGVyIHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2Nncm91cC8gYW5kIGRvZXMgbm90IHRvdWNoIGFueSBrZXJuZWwgY29kZSBvciBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBvbmx5IHVzZXItc3BhY2UgY2dyb3VwIHNlbGYtdGVzdHMgdW5kZXIgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvY2dyb3VwLyBhbmQgZG9lcyBub3QgdG91Y2ggYW55IGtlcm5lbCBjb2RlIG9yIGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDA4OjUxOjIxLjcyNTk4ODE3NFoiLCJTZXEiOjUsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowcvsft[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-06 08:27:52 +0000 UTC FinishedAt: 2026-09-06 08:51:22 +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+CgkJCTx0ZD4yMDI2LzA5LzA2IDA4OjUxPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgb25seSB1c2VyLXNwYWNlIGNncm91cCBzZWxmLXRlc3RzIHVuZGVyIHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2Nncm91cC8gYW5kIGRvZXMgbm90IHRvdWNoIGFueSBrZXJuZWwgY29kZSBvciBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDA4OjUxPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgMTFhOWYwOWY1NjBiMDI2OTU0MDFkZDJjNmNjM2YxOTk3Zjc4YTY0MlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTdW4gU2VwIDYgMDg6NTE6MTUgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvY2dyb3VwL2xpYi9jZ3JvdXBfdXRpbC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvY2dyb3VwL2xpYi9jZ3JvdXBfdXRpbC5jXG5pbmRleCAyNTk2YzEyY2Q4NjQ1Li5lZDNjNDg5MzgzM2E1IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvY2dyb3VwL2xpYi9jZ3JvdXBfdXRpbC5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9jZ3JvdXAvbGliL2Nncm91cF91dGlsLmNcbkBAIC0xNzIsNyAmIzQzOzE3Miw3IEBAIGxvbmcgY2dfcmVhZF9sb25nX2ZkKGludCBmZClcbiBcdHJldHVybiBhdG9sKGJ1Zik7XG4gfVxuIFxuLWxvbmcgY2dfcmVhZF9rZXlfbG9uZyhjb25zdCBjaGFyICpjZ3JvdXAsIGNvbnN0IGNoYXIgKmNvbnRyb2wsIGNvbnN0IGNoYXIgKmtleSlcbiYjNDM7czY0IGNnX3JlYWRfa2V5X3M2NChjb25zdCBjaGFyICpjZ3JvdXAsIGNvbnN0IGNoYXIgKmNvbnRyb2wsIGNvbnN0IGNoYXIgKmtleSlcbiB7XG4gXHRjaGFyIGJ1ZltCVUZfU0laRV07XG4gXHRjaGFyICpwdHI7XG5AQCAtMTg0LDE4ICYjNDM7MTg0LDE4IEBAIGxvbmcgY2dfcmVhZF9rZXlfbG9uZyhjb25zdCBjaGFyICpjZ3JvdXAsIGNvbnN0IGNoYXIgKmNvbnRyb2wsIGNvbnN0IGNoYXIgKmtleSlcbiBcdGlmICghcHRyKVxuIFx0XHRyZXR1cm4gLTE7XG4gXG4tXHRyZXR1cm4gYXRvbChwdHIgJiM0Mzsgc3RybGVuKGtleSkpO1xuJiM0MztcdHJldHVybiBhdG9sbChwdHIgJiM0Mzsgc3RybGVuKGtleSkpO1xuIH1cbiBcbi1sb25nIGNnX3JlYWRfa2V5X2xvbmdfcG9sbChjb25zdCBjaGFyICpjZ3JvdXAsIGNvbnN0IGNoYXIgKmNvbnRyb2wsXG4tXHRcdFx0ICAgY29uc3QgY2hhciAqa2V5LCBsb25nIGV4cGVjdGVkLCBpbnQgcmV0cmllcyxcbi1cdFx0XHQgICB1c2Vjb25kc190IHdhaXRfaW50ZXJ2YWxfdXMpXG4mIzQzO3M2NCBjZ19yZWFkX2tleV9zNjRfcG9sbChjb25zdCBjaGFyICpjZ3JvdXAsIGNvbnN0IGNoYXIgKmNvbnRyb2wsXG4mIzQzO1x0XHRcdCBjb25zdCBjaGFyICprZXksIHM2NCBleHBlY3RlZCwgaW50IHJldHJpZXMsXG4mIzQzO1x0XHRcdCB1c2Vjb25kc190IHdhaXRfaW50ZXJ2YWxfdXMpXG4ge1xuLVx0bG9uZyB2YWwgPSAtMTtcbiYjNDM7XHRzNjQgdmFsID0gLTE7XG4gXHRpbnQgaTtcbiBcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHJldHJpZXM7IGkmIzQzOyYjNDM7KSB7XG4tXHRcdHZhbCA9IGNnX3JlYWRfa2V5X2xvbmcoY2dyb3VwLCBjb250cm9sLCBrZXkpO1xuJiM0MztcdFx0dmFsID0gY2dfcmVhZF9rZXlfczY0KGNncm91cCwgY29udHJvbCwga2V5KTtcbiBcdFx0aWYgKHZhbCBcdTAwM2MgMClcbiBcdFx0XHRyZXR1cm4gdmFsO1xuIFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2Nncm91cC9saWIvaW5jbHVkZS9jZ3JvdXBfdXRpbC5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvY2dyb3VwL2xpYi9pbmNsdWRlL2Nncm91cF91dGlsLmhcbmluZGV4IDVkMzljNzA5YWM3YTQuLmRkYjA1OTMyZDljNzcgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9jZ3JvdXAvbGliL2luY2x1ZGUvY2dyb3VwX3V0aWwuaFxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvY2dyb3VwL2xpYi9pbmNsdWRlL2Nncm91cF91dGlsLmhcbkBAIC0yLDYgJiM0MzsyLDggQEBcbiAjaW5jbHVkZSBcdTAwM2NzdGRib29sLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NzdGRsaWIuaFx1MDAzZVxuIFxuJiM0Mzt0eXBlZGVmIHNpZ25lZCBsb25nIGxvbmcgczY0O1xuJiM0MztcbiAjaWZuZGVmIEJVRl9TSVpFXG4gI2RlZmluZSBCVUZfU0laRSA0MDk2XG4gI2VuZGlmXG5AQCAtMjQsMjUgJiM0MzsyNiwyNSBAQFxuIC8qXG4gICogQ2hlY2tzIGlmIHR3byBnaXZlbiB2YWx1ZXMgZGlmZmVyIGJ5IGxlc3MgdGhhbiBlcnIlIG9mIHRoZWlyIHN1bS5cbiAgKi9cbi1zdGF0aWMgaW5saW5lIGludCB2YWx1ZXNfY2xvc2UobG9uZyBhLCBsb25nIGIsIGludCBlcnIpXG4mIzQzO3N0YXRpYyBpbmxpbmUgaW50IHZhbHVlc19jbG9zZShzNjQgYSwgczY0IGIsIGludCBlcnIpXG4ge1xuLVx0cmV0dXJuIGxhYnMoYSAtIGIpIFx1MDAzYz0gKGEgJiM0MzsgYikgLyAxMDAgKiBlcnI7XG4mIzQzO1x0cmV0dXJuIGxsYWJzKGEgLSBiKSBcdTAwM2M9IChhICYjNDM7IGIpIC8gMTAwICogZXJyO1xuIH1cbiBcbiAvKlxuICAqIENoZWNrcyBpZiB0d28gZ2l2ZW4gdmFsdWVzIGRpZmZlciBieSBsZXNzIHRoYW4gZXJyJSBvZiB0aGVpciBzdW0gYW5kIGFzc2VydFxuICAqIHdpdGggZGV0YWlsZWQgZGVidWcgaW5mbyBpZiBub3QuXG4gICovXG4tc3RhdGljIGlubGluZSBpbnQgdmFsdWVzX2Nsb3NlX3JlcG9ydChsb25nIGEsIGxvbmcgYiwgaW50IGVycilcbiYjNDM7c3RhdGljIGlubGluZSBpbnQgdmFsdWVzX2Nsb3NlX3JlcG9ydChzNjQgYSwgczY0IGIsIGludCBlcnIpXG4ge1xuLVx0bG9uZyBkaWZmICA9IGxhYnMoYSAtIGIpO1xuLVx0bG9uZyBsaW1pdCA9IChhICYjNDM7IGIpIC8gMTAwICogZXJyO1xuJiM0MztcdHM2NCBkaWZmICA9IGxsYWJzKGEgLSBiKTtcbiYjNDM7XHRzNjQgbGltaXQgPSAoYSAmIzQzOyBiKSAvIDEwMCAqIGVycjtcbiBcdGRvdWJsZSBhY3R1YWxfZXJyID0gKGEgJiM0MzsgYikgPyAoMTAwLjAgKiBkaWZmIC8gKGEgJiM0MzsgYikpIDogMC4wO1xuIFx0aW50IGNsb3NlID0gZGlmZiBcdTAwM2M9IGxpbWl0O1xuIFxuIFx0aWYgKCFjbG9zZSlcbiBcdFx0ZnByaW50ZihzdGRlcnIsXG4tXHRcdFx0XCYjMzQ7W0ZBSUxdIGFjdHVhbD0lbGQgZXhwZWN0ZWQ9JWxkIHwgZGlmZj0lbGQgfCBsaW1pdD0lbGQgfCBcJiMzNDtcbiYjNDM7XHRcdFx0XCYjMzQ7W0ZBSUxdIGFjdHVhbD0lbGxkIGV4cGVjdGVkPSVsbGQgfCBkaWZmPSVsbGQgfCBsaW1pdD0lbGxkIHwgXCYjMzQ7XG4gXHRcdFx0XCYjMzQ7dG9sZXJhbmNlPSVkJSUgfCBhY3R1YWxfZXJyb3I9JS4yZiUlXFxuXCYjMzQ7LFxuIFx0XHRcdGEsIGIsIGRpZmYsIGxpbWl0LCBlcnIsIGFjdHVhbF9lcnIpO1xuIFxuQEAgLTY5LDEwICYjNDM7NzEsMTAgQEAgZXh0ZXJuIGludCBjZ19yZWFkX3N0cnN0cihjb25zdCBjaGFyICpjZ3JvdXAsIGNvbnN0IGNoYXIgKmNvbnRyb2wsXG4gXHRcdFx0ICBjb25zdCBjaGFyICpuZWVkbGUpO1xuIGV4dGVybiBsb25nIGNnX3JlYWRfbG9uZyhjb25zdCBjaGFyICpjZ3JvdXAsIGNvbnN0IGNoYXIgKmNvbnRyb2wpO1xuIGV4dGVybiBsb25nIGNnX3JlYWRfbG9uZ19mZChpbnQgZmQpO1xuLWxvbmcgY2dfcmVhZF9rZXlfbG9uZyhjb25zdCBjaGFyICpjZ3JvdXAsIGNvbnN0IGNoYXIgKmNvbnRyb2wsIGNvbnN0IGNoYXIgKmtleSk7XG4tbG9uZyBjZ19yZWFkX2tleV9sb25nX3BvbGwoY29uc3QgY2hhciAqY2dyb3VwLCBjb25zdCBjaGFyICpjb250cm9sLFxuLVx0XHRcdCAgIGNvbnN0IGNoYXIgKmtleSwgbG9uZyBleHBlY3RlZCwgaW50IHJldHJpZXMsXG4tXHRcdFx0ICAgdXNlY29uZHNfdCB3YWl0X2ludGVydmFsX3VzKTtcbiYjNDM7czY0IGNnX3JlYWRfa2V5X3M2NChjb25zdCBjaGFyICpjZ3JvdXAsIGNvbnN0IGNoYXIgKmNvbnRyb2wsIGNvbnN0IGNoYXIgKmtleSk7XG4mIzQzO3M2NCBjZ19yZWFkX2tleV9zNjRfcG9sbChjb25zdCBjaGFyICpjZ3JvdXAsIGNvbnN0IGNoYXIgKmNvbnRyb2wsXG4mIzQzO1x0XHRcdCBjb25zdCBjaGFyICprZXksIHM2NCBleHBlY3RlZCwgaW50IHJldHJpZXMsXG4mIzQzO1x0XHRcdCB1c2Vjb25kc190IHdhaXRfaW50ZXJ2YWxfdXMpO1xuIGV4dGVybiBsb25nIGNnX3JlYWRfbGMoY29uc3QgY2hhciAqY2dyb3VwLCBjb25zdCBjaGFyICpjb250cm9sKTtcbiBleHRlcm4gaW50IGNnX3dyaXRlKGNvbnN0IGNoYXIgKmNncm91cCwgY29uc3QgY2hhciAqY29udHJvbCwgY2hhciAqYnVmKTtcbiBleHRlcm4gaW50IGNnX29wZW4oY29uc3QgY2hhciAqY2dyb3VwLCBjb25zdCBjaGFyICpjb250cm9sLCBpbnQgZmxhZ3MpO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2Nncm91cC90ZXN0X2NwdS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvY2dyb3VwL3Rlc3RfY3B1LmNcbmluZGV4IDczNWE1M2JiMjIyYmEuLjExZGExZGU5Y2RlYjYgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9jZ3JvdXAvdGVzdF9jcHUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvY2dyb3VwL3Rlc3RfY3B1LmNcbkBAIC0yNCw3ICYjNDM7MjQsNyBAQCBlbnVtIGhvZ19jbG9ja190eXBlIHtcbiBzdHJ1Y3QgY3B1X2hvZ2dlciB7XG4gXHRjaGFyICpjZ3JvdXA7XG4gXHRwaWRfdCBwaWQ7XG4tXHRsb25nIHVzYWdlO1xuJiM0MztcdHM2NCB1c2FnZTtcbiB9O1xuIFxuIHN0cnVjdCBjcHVfaG9nX2Z1bmNfcGFyYW0ge1xuQEAgLTE4NSw3ICYjNDM7MTg1LDcgQEAgc3RhdGljIGludCBob2dfY3B1c190aW1lZChjb25zdCBjaGFyICpjZ3JvdXAsIHZvaWQgKmFyZylcbiBzdGF0aWMgaW50IHRlc3RfY3B1Y2dfc3RhdHMoY29uc3QgY2hhciAqcm9vdClcbiB7XG4gXHRpbnQgcmV0ID0gS1NGVF9GQUlMO1xuLVx0bG9uZyB1c2FnZV91c2VjLCB1c2VyX3VzZWMsIHN5c3RlbV91c2VjO1xuJiM0MztcdHM2NCB1c2FnZV91c2VjLCB1c2VyX3VzZWMsIHN5c3RlbV91c2VjO1xuIFx0bG9uZyB1c2FnZV9zZWNvbmRzID0gMjtcbiBcdGxvbmcgZXhwZWN0ZWRfdXNhZ2VfdXNlYyA9IHVzYWdlX3NlY29uZHMgKiBVU0VDX1BFUl9TRUM7XG4gXHRjaGFyICpjcHVjZztcbkBAIC0xOTcsOSAmIzQzOzE5Nyw5IEBAIHN0YXRpYyBpbnQgdGVzdF9jcHVjZ19zdGF0cyhjb25zdCBjaGFyICpyb290KVxuIFx0aWYgKGNnX2NyZWF0ZShjcHVjZykpXG4gXHRcdGdvdG8gY2xlYW51cDtcbiBcbi1cdHVzYWdlX3VzZWMgPSBjZ19yZWFkX2tleV9sb25nKGNwdWNnLCBcJiMzNDtjcHUuc3RhdFwmIzM0OywgXCYjMzQ7dXNhZ2VfdXNlY1wmIzM0Oyk7XG4tXHR1c2VyX3VzZWMgPSBjZ19yZWFkX2tleV9sb25nKGNwdWNnLCBcJiMzNDtjcHUuc3RhdFwmIzM0OywgXCYjMzQ7dXNlcl91c2VjXCYjMzQ7KTtcbi1cdHN5c3RlbV91c2VjID0gY2dfcmVhZF9rZXlfbG9uZyhjcHVjZywgXCYjMzQ7Y3B1LnN0YXRcJiMzNDssIFwmIzM0O3N5c3RlbV91c2VjXCYjMzQ7KTtcbiYjNDM7XHR1c2FnZV91c2VjID0gY2dfcmVhZF9rZXlfczY0KGNwdWNnLCBcJiMzNDtjcHUuc3RhdFwmIzM0OywgXCYjMzQ7dXNhZ2VfdXNlY1wmIzM0Oyk7XG4mIzQzO1x0dXNlcl91c2VjID0gY2dfcmVhZF9rZXlfczY0KGNwdWNnLCBcJiMzNDtjcHUuc3RhdFwmIzM0OywgXCYjMzQ7dXNlcl91c2VjXCYjMzQ7KTtcbiYjNDM7XHRzeXN0ZW1fdXNlYyA9IGNnX3JlYWRfa2V5X3M2NChjcHVjZywgXCYjMzQ7Y3B1LnN0YXRcJiMzNDssIFwmIzM0O3N5c3RlbV91c2VjXCYjMzQ7KTtcbiBcdGlmICh1c2FnZV91c2VjICE9IDAgfHwgdXNlcl91c2VjICE9IDAgfHwgc3lzdGVtX3VzZWMgIT0gMClcbiBcdFx0Z290byBjbGVhbnVwO1xuIFxuQEAgLTIxNCw4ICYjNDM7MjE0LDggQEAgc3RhdGljIGludCB0ZXN0X2NwdWNnX3N0YXRzKGNvbnN0IGNoYXIgKnJvb3QpXG4gXHRpZiAoY2dfcnVuKGNwdWNnLCBob2dfY3B1c190aW1lZCwgKHZvaWQgKilcdTAwMjZwYXJhbSkpXG4gXHRcdGdvdG8gY2xlYW51cDtcbiBcbi1cdHVzYWdlX3VzZWMgPSBjZ19yZWFkX2tleV9sb25nKGNwdWNnLCBcJiMzNDtjcHUuc3RhdFwmIzM0OywgXCYjMzQ7dXNhZ2VfdXNlY1wmIzM0Oyk7XG4tXHR1c2VyX3VzZWMgPSBjZ19yZWFkX2tleV9sb25nKGNwdWNnLCBcJiMzNDtjcHUuc3RhdFwmIzM0OywgXCYjMzQ7dXNlcl91c2VjXCYjMzQ7KTtcbiYjNDM7XHR1c2FnZV91c2VjID0gY2dfcmVhZF9rZXlfczY0KGNwdWNnLCBcJiMzNDtjcHUuc3RhdFwmIzM0OywgXCYjMzQ7dXNhZ2VfdXNlY1wmIzM0Oyk7XG4mIzQzO1x0dXNlcl91c2VjID0gY2dfcmVhZF9rZXlfczY0KGNwdWNnLCBcJiMzNDtjcHUuc3RhdFwmIzM0OywgXCYjMzQ7dXNlcl91c2VjXCYjMzQ7KTtcbiBcdGlmICh1c2VyX3VzZWMgXHUwMDNjPSAwKVxuIFx0XHRnb3RvIGNsZWFudXA7XG4gXG5AQCAtMjM5LDcgJiM0MzsyMzksNyBAQCBzdGF0aWMgaW50IHRlc3RfY3B1Y2dfbmljZShjb25zdCBjaGFyICpyb290KVxuIHtcbiBcdGludCByZXQgPSBLU0ZUX0ZBSUw7XG4gXHRpbnQgc3RhdHVzO1xuLVx0bG9uZyB1c2VyX3VzZWMsIG5pY2VfdXNlYztcbiYjNDM7XHRzNjQgdXNlcl91c2VjLCBuaWNlX3VzZWM7XG4gXHRsb25nIHVzYWdlX3NlY29uZHMgPSAyO1xuIFx0bG9uZyBleHBlY3RlZF9uaWNlX3VzZWMgPSB1c2FnZV9zZWNvbmRzICogVVNFQ19QRVJfU0VDO1xuIFx0Y2hhciAqY3B1Y2c7XG5AQCAtMjUyLDggJiM0MzsyNTIsOCBAQCBzdGF0aWMgaW50IHRlc3RfY3B1Y2dfbmljZShjb25zdCBjaGFyICpyb290KVxuIFx0aWYgKGNnX2NyZWF0ZShjcHVjZykpXG4gXHRcdGdvdG8gY2xlYW51cDtcbiBcbi1cdHVzZXJfdXNlYyA9IGNnX3JlYWRfa2V5X2xvbmcoY3B1Y2csIFwmIzM0O2NwdS5zdGF0XCYjMzQ7LCBcJiMzNDt1c2VyX3VzZWNcJiMzNDspO1xuLVx0bmljZV91c2VjID0gY2dfcmVhZF9rZXlfbG9uZyhjcHVjZywgXCYjMzQ7Y3B1LnN0YXRcJiMzNDssIFwmIzM0O25pY2VfdXNlY1wmIzM0Oyk7XG4mIzQzO1x0dXNlcl91c2VjID0gY2dfcmVhZF9rZXlfczY0KGNwdWNnLCBcJiMzNDtjcHUuc3RhdFwmIzM0OywgXCYjMzQ7dXNlcl91c2VjXCYjMzQ7KTtcbiYjNDM7XHRuaWNlX3VzZWMgPSBjZ19yZWFkX2tleV9zNjQoY3B1Y2csIFwmIzM0O2NwdS5zdGF0XCYjMzQ7LCBcJiMzNDtuaWNlX3VzZWNcJiMzNDspO1xuIFx0aWYgKG5pY2VfdXNlYyA9PSAtMSlcbiBcdFx0cmV0ID0gS1NGVF9TS0lQO1xuIFx0aWYgKHVzZXJfdXNlYyAhPSAwIHx8IG5pY2VfdXNlYyAhPSAwKVxuQEAgLTI4OSw4ICYjNDM7Mjg5LDggQEAgc3RhdGljIGludCB0ZXN0X2NwdWNnX25pY2UoY29uc3QgY2hhciAqcm9vdClcbiBcdFx0aWYgKCFXSUZFWElURUQoc3RhdHVzKSlcbiBcdFx0XHRnb3RvIGNsZWFudXA7XG4gXG4tXHRcdHVzZXJfdXNlYyA9IGNnX3JlYWRfa2V5X2xvbmcoY3B1Y2csIFwmIzM0O2NwdS5zdGF0XCYjMzQ7LCBcJiMzNDt1c2VyX3VzZWNcJiMzNDspO1xuLVx0XHRuaWNlX3VzZWMgPSBjZ19yZWFkX2tleV9sb25nKGNwdWNnLCBcJiMzNDtjcHUuc3RhdFwmIzM0OywgXCYjMzQ7bmljZV91c2VjXCYjMzQ7KTtcbiYjNDM7XHRcdHVzZXJfdXNlYyA9IGNnX3JlYWRfa2V5X3M2NChjcHVjZywgXCYjMzQ7Y3B1LnN0YXRcJiMzNDssIFwmIzM0O3VzZXJfdXNlY1wmIzM0Oyk7XG4mIzQzO1x0XHRuaWNlX3VzZWMgPSBjZ19yZWFkX2tleV9zNjQoY3B1Y2csIFwmIzM0O2NwdS5zdGF0XCYjMzQ7LCBcJiMzNDtuaWNlX3VzZWNcJiMzNDspO1xuIFx0XHRpZiAodXNlcl91c2VjIFx1MDAzYz0gMClcbiBcdFx0XHRnb3RvIGNsZWFudXA7XG4gXHRcdGlmICghdmFsdWVzX2Nsb3NlX3JlcG9ydChuaWNlX3VzZWMsIGV4cGVjdGVkX25pY2VfdXNlYywgMSkpXG5AQCAtMzU3LDggJiM0MzszNTcsOCBAQCBydW5fY3B1Y2dfd2VpZ2h0X3Rlc3QoXG4gXHR9XG4gXG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBBUlJBWV9TSVpFKGNoaWxkcmVuKTsgaSYjNDM7JiM0MzspXG4tXHRcdGNoaWxkcmVuW2ldLnVzYWdlID0gY2dfcmVhZF9rZXlfbG9uZyhjaGlsZHJlbltpXS5jZ3JvdXAsXG4tXHRcdFx0XHRcJiMzNDtjcHUuc3RhdFwmIzM0OywgXCYjMzQ7dXNhZ2VfdXNlY1wmIzM0Oyk7XG4mIzQzO1x0XHRjaGlsZHJlbltpXS51c2FnZSA9IGNnX3JlYWRfa2V5X3M2NChjaGlsZHJlbltpXS5jZ3JvdXAsXG4mIzQzO1x0XHRcdFx0XHRcdCAgICBcJiMzNDtjcHUuc3RhdFwmIzM0OywgXCYjMzQ7dXNhZ2VfdXNlY1wmIzM0Oyk7XG4gXG4gXHRpZiAodmFsaWRhdGUoY2hpbGRyZW4sIEFSUkFZX1NJWkUoY2hpbGRyZW4pKSlcbiBcdFx0Z290byBjbGVhbnVwO1xuQEAgLTQ4Niw3ICYjNDM7NDg2LDcgQEAgcnVuX2NwdWNnX25lc3RlZF93ZWlnaHRfdGVzdChjb25zdCBjaGFyICpyb290LCBib29sIG92ZXJwcm92aXNpb25lZClcbiBcdGludCByZXQgPSBLU0ZUX0ZBSUwsIGk7XG4gXHRjaGFyICpwYXJlbnQgPSBOVUxMLCAqY2hpbGQgPSBOVUxMO1xuIFx0c3RydWN0IGNwdV9ob2dnZXIgbGVhZlszXSA9IHt9O1xuLVx0bG9uZyBuZXN0ZWRfbGVhZl91c2FnZSwgY2hpbGRfdXNhZ2U7XG4mIzQzO1x0czY0IG5lc3RlZF9sZWFmX3VzYWdlLCBjaGlsZF91c2FnZTtcbiBcdGludCBucHJvY3MgPSBnZXRfbnByb2NzKCk7XG4gXG4gXHRpZiAoIW92ZXJwcm92aXNpb25lZCkge1xuQEAgLTU2Nyw4ICYjNDM7NTY3LDggQEAgcnVuX2NwdWNnX25lc3RlZF93ZWlnaHRfdGVzdChjb25zdCBjaGFyICpyb290LCBib29sIG92ZXJwcm92aXNpb25lZClcbiBcdH1cbiBcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIEFSUkFZX1NJWkUobGVhZik7IGkmIzQzOyYjNDM7KSB7XG4tXHRcdGxlYWZbaV0udXNhZ2UgPSBjZ19yZWFkX2tleV9sb25nKGxlYWZbaV0uY2dyb3VwLFxuLVx0XHRcdFx0XCYjMzQ7Y3B1LnN0YXRcJiMzNDssIFwmIzM0O3VzYWdlX3VzZWNcJiMzNDspO1xuJiM0MztcdFx0bGVhZltpXS51c2FnZSA9IGNnX3JlYWRfa2V5X3M2NChsZWFmW2ldLmNncm91cCwgXCYjMzQ7Y3B1LnN0YXRcJiMzNDssXG4mIzQzO1x0XHRcdFx0XHRcdFwmIzM0O3VzYWdlX3VzZWNcJiMzNDspO1xuIFx0XHRpZiAobGVhZltpXS51c2FnZSBcdTAwM2M9IDApXG4gXHRcdFx0Z290byBjbGVhbnVwO1xuIFx0fVxuQEAgLTU4MCw4ICYjNDM7NTgwLDcgQEAgcnVuX2NwdWNnX25lc3RlZF93ZWlnaHRfdGVzdChjb25zdCBjaGFyICpyb290LCBib29sIG92ZXJwcm92aXNpb25lZClcbiBcdH0gZWxzZSBpZiAoIXZhbHVlc19jbG9zZV9yZXBvcnQobGVhZlswXS51c2FnZSAqIDIsIG5lc3RlZF9sZWFmX3VzYWdlLCAxNSkpXG4gXHRcdGdvdG8gY2xlYW51cDtcbiBcbi1cbi1cdGNoaWxkX3VzYWdlID0gY2dfcmVhZF9rZXlfbG9uZyhjaGlsZCwgXCYjMzQ7Y3B1LnN0YXRcJiMzNDssIFwmIzM0O3VzYWdlX3VzZWNcJiMzNDspO1xuJiM0MztcdGNoaWxkX3VzYWdlID0gY2dfcmVhZF9rZXlfczY0KGNoaWxkLCBcJiMzNDtjcHUuc3RhdFwmIzM0OywgXCYjMzQ7dXNhZ2VfdXNlY1wmIzM0Oyk7XG4gXHRpZiAoY2hpbGRfdXNhZ2UgXHUwMDNjPSAwKVxuIFx0XHRnb3RvIGNsZWFudXA7XG4gXHRpZiAoIXZhbHVlc19jbG9zZV9yZXBvcnQoY2hpbGRfdXNhZ2UsIG5lc3RlZF9sZWFmX3VzYWdlLCAxKSlcbkBAIC02NzksNyAmIzQzOzY3OCw4IEBAIHN0YXRpYyBpbnQgdGVzdF9jcHVjZ19tYXgoY29uc3QgY2hhciAqcm9vdClcbiBcdGxvbmcgZHVyYXRpb25fc2Vjb25kcyA9IDE7XG4gXG4gXHRsb25nIGR1cmF0aW9uX3VzZWM7XG4tXHRsb25nIHVzYWdlX3VzZWMsIG5fcGVyaW9kcywgcmVtYWluZGVyX3VzZWMsIGV4cGVjdGVkX3VzYWdlX3VzZWM7XG4mIzQzO1x0bG9uZyBuX3BlcmlvZHMsIHJlbWFpbmRlcl91c2VjLCBleHBlY3RlZF91c2FnZV91c2VjO1xuJiM0MztcdHM2NCB1c2FnZV91c2VjO1xuIFx0Y2hhciAqY3B1Y2c7XG4gXHRjaGFyIHF1b3RhX2J1ZlszMl07XG4gXG5AQCAtNzA4LDcgJiM0Mzs3MDgsNyBAQCBzdGF0aWMgaW50IHRlc3RfY3B1Y2dfbWF4KGNvbnN0IGNoYXIgKnJvb3QpXG4gXHRpZiAoY2dfcnVuKGNwdWNnLCBob2dfY3B1c190aW1lZCwgKHZvaWQgKilcdTAwMjZwYXJhbSkpXG4gXHRcdGdvdG8gY2xlYW51cDtcbiBcbi1cdHVzYWdlX3VzZWMgPSBjZ19yZWFkX2tleV9sb25nKGNwdWNnLCBcJiMzNDtjcHUuc3RhdFwmIzM0OywgXCYjMzQ7dXNhZ2VfdXNlY1wmIzM0Oyk7XG4mIzQzO1x0dXNhZ2VfdXNlYyA9IGNnX3JlYWRfa2V5X3M2NChjcHVjZywgXCYjMzQ7Y3B1LnN0YXRcJiMzNDssIFwmIzM0O3VzYWdlX3VzZWNcJiMzNDspO1xuIFx0aWYgKHVzYWdlX3VzZWMgXHUwMDNjPSAwKVxuIFx0XHRnb3RvIGNsZWFudXA7XG4gXG5AQCAtNzQ2LDcgJiM0Mzs3NDYsOCBAQCBzdGF0aWMgaW50IHRlc3RfY3B1Y2dfbWF4X25lc3RlZChjb25zdCBjaGFyICpyb290KVxuIFx0bG9uZyBkdXJhdGlvbl9zZWNvbmRzID0gMTtcbiBcbiBcdGxvbmcgZHVyYXRpb25fdXNlYztcbi1cdGxvbmcgdXNhZ2VfdXNlYywgbl9wZXJpb2RzLCByZW1haW5kZXJfdXNlYywgZXhwZWN0ZWRfdXNhZ2VfdXNlYztcbiYjNDM7XHRsb25nIG5fcGVyaW9kcywgcmVtYWluZGVyX3VzZWMsIGV4cGVjdGVkX3VzYWdlX3VzZWM7XG4mIzQzO1x0czY0IHVzYWdlX3VzZWM7XG4gXHRjaGFyICpwYXJlbnQsICpjaGlsZDtcbiBcdGNoYXIgcXVvdGFfYnVmWzMyXTtcbiBcbkBAIC03ODIsNyAmIzQzOzc4Myw3IEBAIHN0YXRpYyBpbnQgdGVzdF9jcHVjZ19tYXhfbmVzdGVkKGNvbnN0IGNoYXIgKnJvb3QpXG4gXHRpZiAoY2dfcnVuKGNoaWxkLCBob2dfY3B1c190aW1lZCwgKHZvaWQgKilcdTAwMjZwYXJhbSkpXG4gXHRcdGdvdG8gY2xlYW51cDtcbiBcbi1cdHVzYWdlX3VzZWMgPSBjZ19yZWFkX2tleV9sb25nKGNoaWxkLCBcJiMzNDtjcHUuc3RhdFwmIzM0OywgXCYjMzQ7dXNhZ2VfdXNlY1wmIzM0Oyk7XG4mIzQzO1x0dXNhZ2VfdXNlYyA9IGNnX3JlYWRfa2V5X3M2NChjaGlsZCwgXCYjMzQ7Y3B1LnN0YXRcJiMzNDssIFwmIzM0O3VzYWdlX3VzZWNcJiMzNDspO1xuIFx0aWYgKHVzYWdlX3VzZWMgXHUwMDNjPSAwKVxuIFx0XHRnb3RvIGNsZWFudXA7XG4gXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvY2dyb3VwL3Rlc3RfZnJlZXplci5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvY2dyb3VwL3Rlc3RfZnJlZXplci5jXG5pbmRleCBmMjhiYjAyZTk3ODNiLi5mNGYwODJjMTNkNGI3IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvY2dyb3VwL3Rlc3RfZnJlZXplci5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9jZ3JvdXAvdGVzdF9mcmVlemVyLmNcbkBAIC04MDcsMTAgJiM0Mzs4MDcsOSBAQCBzdGF0aWMgaW50IHRlc3RfY2dmcmVlemVyX3Zmb3JrKGNvbnN0IGNoYXIgKnJvb3QpXG4gLypcbiAgKiBHZXQgdGhlIGN1cnJlbnQgZnJvemVuX3VzZWMgZm9yIHRoZSBjZ3JvdXAuXG4gICovXG4tc3RhdGljIGxvbmcgY2dfY2hlY2tfZnJlZXpldGltZShjb25zdCBjaGFyICpjZ3JvdXApXG4mIzQzO3N0YXRpYyBzNjQgY2dfY2hlY2tfZnJlZXpldGltZShjb25zdCBjaGFyICpjZ3JvdXApXG4ge1xuLVx0cmV0dXJuIGNnX3JlYWRfa2V5X2xvbmcoY2dyb3VwLCBcJiMzNDtjZ3JvdXAuc3RhdC5sb2NhbFwmIzM0Oyxcbi1cdFx0XHRcdFwmIzM0O2Zyb3plbl91c2VjIFwmIzM0Oyk7XG4mIzQzO1x0cmV0dXJuIGNnX3JlYWRfa2V5X3M2NChjZ3JvdXAsIFwmIzM0O2Nncm91cC5zdGF0LmxvY2FsXCYjMzQ7LCBcJiMzNDtmcm96ZW5fdXNlYyBcJiMzNDspO1xuIH1cbiBcbiAvKlxuQEAgLTgyMCw3ICYjNDM7ODE5LDcgQEAgc3RhdGljIGludCB0ZXN0X2NnZnJlZXplcl90aW1lX2VtcHR5KGNvbnN0IGNoYXIgKnJvb3QpXG4ge1xuIFx0aW50IHJldCA9IEtTRlRfRkFJTDtcbiBcdGNoYXIgKmNncm91cCA9IE5VTEw7XG4tXHRsb25nIHByZXYsIGN1cnI7XG4mIzQzO1x0czY0IHByZXYsIGN1cnI7XG4gXG4gXHRjZ3JvdXAgPSBjZ19uYW1lKHJvb3QsIFwmIzM0O2NnX3RpbWVfdGVzdF9lbXB0eVwmIzM0Oyk7XG4gXHRpZiAoIWNncm91cClcbkBAIC04MzksNyAmIzQzOzgzOCw3IEBAIHN0YXRpYyBpbnQgdGVzdF9jZ2ZyZWV6ZXJfdGltZV9lbXB0eShjb25zdCBjaGFyICpyb290KVxuIFx0XHRnb3RvIGNsZWFudXA7XG4gXHR9XG4gXHRpZiAoY3VyciBcdTAwM2UgMCkge1xuLVx0XHRkZWJ1ZyhcJiMzNDtFeHBlY3QgdGltZSAoJWxkKSB0byBiZSAwXFxuXCYjMzQ7LCBjdXJyKTtcbiYjNDM7XHRcdGRlYnVnKFwmIzM0O0V4cGVjdCB0aW1lICglbGxkKSB0byBiZSAwXFxuXCYjMzQ7LCBjdXJyKTtcbiBcdFx0Z290byBjbGVhbnVwO1xuIFx0fVxuIFxuQEAgLTg1Myw4ICYjNDM7ODUyLDcgQEAgc3RhdGljIGludCB0ZXN0X2NnZnJlZXplcl90aW1lX2VtcHR5KGNvbnN0IGNoYXIgKnJvb3QpXG4gXHR1c2xlZXAoMTAwMCk7XG4gXHRjdXJyID0gY2dfY2hlY2tfZnJlZXpldGltZShjZ3JvdXApO1xuIFx0aWYgKGN1cnIgXHUwMDNjIDEwMDApIHtcbi1cdFx0ZGVidWcoXCYjMzQ7RXhwZWN0IHRpbWUgKCVsZCkgdG8gYmUgYXQgbGVhc3QgMTAwMCB1c1xcblwmIzM0Oyxcbi1cdFx0ICAgICAgY3Vycik7XG4mIzQzO1x0XHRkZWJ1ZyhcJiMzNDtFeHBlY3QgdGltZSAoJWxsZCkgdG8gYmUgYXQgbGVhc3QgMTAwMCB1c1xcblwmIzM0OywgY3Vycik7XG4gXHRcdGdvdG8gY2xlYW51cDtcbiBcdH1cbiBcbkBAIC04NjcsNyAmIzQzOzg2NSw3IEBAIHN0YXRpYyBpbnQgdGVzdF9jZ2ZyZWV6ZXJfdGltZV9lbXB0eShjb25zdCBjaGFyICpyb290KVxuIFx0cHJldiA9IGN1cnI7XG4gXHRjdXJyID0gY2dfY2hlY2tfZnJlZXpldGltZShjZ3JvdXApO1xuIFx0aWYgKGN1cnIgXHUwMDNjPSBwcmV2KSB7XG4tXHRcdGRlYnVnKFwmIzM0O0V4cGVjdCB0aW1lICglbGQpIHRvIGJlIG1vcmUgdGhhbiBwcmV2aW91cyBjaGVjayAoJWxkKVxcblwmIzM0OyxcbiYjNDM7XHRcdGRlYnVnKFwmIzM0O0V4cGVjdCB0aW1lICglbGxkKSB0byBiZSBtb3JlIHRoYW4gcHJldmlvdXMgY2hlY2sgKCVsbGQpXFxuXCYjMzQ7LFxuIFx0XHQgICAgICBjdXJyLCBwcmV2KTtcbiBcdFx0Z290byBjbGVhbnVwO1xuIFx0fVxuQEAgLTg3OSw3ICYjNDM7ODc3LDcgQEAgc3RhdGljIGludCB0ZXN0X2NnZnJlZXplcl90aW1lX2VtcHR5KGNvbnN0IGNoYXIgKnJvb3QpXG4gXHRwcmV2ID0gY3VycjtcbiBcdGN1cnIgPSBjZ19jaGVja19mcmVlemV0aW1lKGNncm91cCk7XG4gXHRpZiAoY3VyciAhPSBwcmV2KSB7XG4tXHRcdGRlYnVnKFwmIzM0O0V4cGVjdCB0aW1lICglbGQpIHRvIGJlIHVuY2hhbmdlZCBmcm9tIHByZXZpb3VzIGNoZWNrICglbGQpXFxuXCYjMzQ7LFxuJiM0MztcdFx0ZGVidWcoXCYjMzQ7RXhwZWN0IHRpbWUgKCVsbGQpIHRvIGJlIHVuY2hhbmdlZCBmcm9tIHByZXZpb3VzIGNoZWNrICglbGxkKVxcblwmIzM0OyxcbiBcdFx0ICAgICAgY3VyciwgcHJldik7XG4gXHRcdGdvdG8gY2xlYW51cDtcbiBcdH1cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9jZ3JvdXAvdGVzdF9rbWVtLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9jZ3JvdXAvdGVzdF9rbWVtLmNcbmluZGV4IDQzN2YyZDM1ZjIwNWUuLjI0OTg5OGYzYjgxZTggMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9jZ3JvdXAvdGVzdF9rbWVtLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2Nncm91cC90ZXN0X2ttZW0uY1xuQEAgLTU0LDcgJiM0Mzs1NCw4IEBAIHN0YXRpYyBpbnQgdGVzdF9rbWVtX2Jhc2ljKGNvbnN0IGNoYXIgKnJvb3QpXG4ge1xuIFx0aW50IHJldCA9IEtTRlRfRkFJTDtcbiBcdGNoYXIgKmNnID0gTlVMTDtcbi1cdGxvbmcgc2xhYjAsIHNsYWIxLCBjdXJyZW50O1xuJiM0MztcdHM2NCBzbGFiMCwgc2xhYjE7XG4mIzQzO1x0bG9uZyBjdXJyZW50O1xuIFxuIFx0Y2cgPSBjZ19uYW1lKHJvb3QsIFwmIzM0O2ttZW1fYmFzaWNfdGVzdFwmIzM0Oyk7XG4gXHRpZiAoIWNnKVxuQEAgLTY2LDcgJiM0Mzs2Nyw3IEBAIHN0YXRpYyBpbnQgdGVzdF9rbWVtX2Jhc2ljKGNvbnN0IGNoYXIgKnJvb3QpXG4gXHRpZiAoY2dfcnVuKGNnLCBhbGxvY19kY2FjaGUsICh2b2lkICopMTAwMDAwKSlcbiBcdFx0Z290byBjbGVhbnVwO1xuIFxuLVx0c2xhYjAgPSBjZ19yZWFkX2tleV9sb25nKGNnLCBcJiMzNDttZW1vcnkuc3RhdFwmIzM0OywgXCYjMzQ7c2xhYiBcJiMzNDspO1xuJiM0MztcdHNsYWIwID0gY2dfcmVhZF9rZXlfczY0KGNnLCBcJiMzNDttZW1vcnkuc3RhdFwmIzM0OywgXCYjMzQ7c2xhYiBcJiMzNDspO1xuIFx0aWYgKHNsYWIwIFx1MDAzYyAoMSBcdTAwM2NcdTAwM2MgMjApKVxuIFx0XHRnb3RvIGNsZWFudXA7XG4gXG5AQCAtNzUsNyAmIzQzOzc2LDcgQEAgc3RhdGljIGludCB0ZXN0X2ttZW1fYmFzaWMoY29uc3QgY2hhciAqcm9vdClcbiBcdC8qIHdhaXQgZm9yIFJDVSBmcmVlaW5nICovXG4gXHRzbGVlcCgxKTtcbiBcbi1cdHNsYWIxID0gY2dfcmVhZF9rZXlfbG9uZyhjZywgXCYjMzQ7bWVtb3J5LnN0YXRcJiMzNDssIFwmIzM0O3NsYWIgXCYjMzQ7KTtcbiYjNDM7XHRzbGFiMSA9IGNnX3JlYWRfa2V5X3M2NChjZywgXCYjMzQ7bWVtb3J5LnN0YXRcJiMzNDssIFwmIzM0O3NsYWIgXCYjMzQ7KTtcbiBcdGlmIChzbGFiMSBcdTAwM2MgMClcbiBcdFx0Z290byBjbGVhbnVwO1xuIFxuQEAgLTE2Nyw3ICYjNDM7MTY4LDggQEAgc3RhdGljIGludCBjZ19ydW5faW5fc3ViY2dyb3Vwcyhjb25zdCBjaGFyICpwYXJlbnQsXG4gICovXG4gc3RhdGljIGludCB0ZXN0X2ttZW1fbWVtY2dfZGVsZXRpb24oY29uc3QgY2hhciAqcm9vdClcbiB7XG4tXHRsb25nIGN1cnJlbnQsIGFub24sIGZpbGUsIGtlcm5lbCwgc29jaywgc3VtO1xuJiM0MztcdGxvbmcgY3VycmVudDtcbiYjNDM7XHRzNjQgYW5vbiwgZmlsZSwga2VybmVsLCBzb2NrLCBzdW07XG4gXHRpbnQgcmV0ID0gS1NGVF9GQUlMO1xuIFx0Y2hhciAqcGFyZW50O1xuIFxuQEAgLTE4NSwyMyAmIzQzOzE4NywyMyBAQCBzdGF0aWMgaW50IHRlc3Rfa21lbV9tZW1jZ19kZWxldGlvbihjb25zdCBjaGFyICpyb290KVxuIFx0XHRnb3RvIGNsZWFudXA7XG4gXG4gXHRjdXJyZW50ID0gY2dfcmVhZF9sb25nKHBhcmVudCwgXCYjMzQ7bWVtb3J5LmN1cnJlbnRcJiMzNDspO1xuLVx0YW5vbiA9IGNnX3JlYWRfa2V5X2xvbmcocGFyZW50LCBcJiMzNDttZW1vcnkuc3RhdFwmIzM0OywgXCYjMzQ7YW5vbiBcJiMzNDspO1xuLVx0ZmlsZSA9IGNnX3JlYWRfa2V5X2xvbmcocGFyZW50LCBcJiMzNDttZW1vcnkuc3RhdFwmIzM0OywgXCYjMzQ7ZmlsZSBcJiMzNDspO1xuLVx0a2VybmVsID0gY2dfcmVhZF9rZXlfbG9uZyhwYXJlbnQsIFwmIzM0O21lbW9yeS5zdGF0XCYjMzQ7LCBcJiMzNDtrZXJuZWwgXCYjMzQ7KTtcbi1cdHNvY2sgPSBjZ19yZWFkX2tleV9sb25nKHBhcmVudCwgXCYjMzQ7bWVtb3J5LnN0YXRcJiMzNDssIFwmIzM0O3NvY2sgXCYjMzQ7KTtcbiYjNDM7XHRhbm9uID0gY2dfcmVhZF9rZXlfczY0KHBhcmVudCwgXCYjMzQ7bWVtb3J5LnN0YXRcJiMzNDssIFwmIzM0O2Fub24gXCYjMzQ7KTtcbiYjNDM7XHRmaWxlID0gY2dfcmVhZF9rZXlfczY0KHBhcmVudCwgXCYjMzQ7bWVtb3J5LnN0YXRcJiMzNDssIFwmIzM0O2ZpbGUgXCYjMzQ7KTtcbiYjNDM7XHRrZXJuZWwgPSBjZ19yZWFkX2tleV9zNjQocGFyZW50LCBcJiMzNDttZW1vcnkuc3RhdFwmIzM0OywgXCYjMzQ7a2VybmVsIFwmIzM0Oyk7XG4mIzQzO1x0c29jayA9IGNnX3JlYWRfa2V5X3M2NChwYXJlbnQsIFwmIzM0O21lbW9yeS5zdGF0XCYjMzQ7LCBcJiMzNDtzb2NrIFwmIzM0Oyk7XG4gXHRpZiAoY3VycmVudCBcdTAwM2MgMCB8fCBhbm9uIFx1MDAzYyAwIHx8IGZpbGUgXHUwMDNjIDAgfHwga2VybmVsIFx1MDAzYyAwIHx8IHNvY2sgXHUwMDNjIDApXG4gXHRcdGdvdG8gY2xlYW51cDtcbiBcbiBcdHN1bSA9IGFub24gJiM0MzsgZmlsZSAmIzQzOyBrZXJuZWwgJiM0Mzsgc29jaztcbi1cdGlmIChsYWJzKHN1bSAtIGN1cnJlbnQpIFx1MDAzYyBNQVhfVk1TVEFUX0VSUk9SKSB7XG4mIzQzO1x0aWYgKGxsYWJzKHN1bSAtIGN1cnJlbnQpIFx1MDAzYyBNQVhfVk1TVEFUX0VSUk9SKSB7XG4gXHRcdHJldCA9IEtTRlRfUEFTUztcbiBcdH0gZWxzZSB7XG4gXHRcdHByaW50ZihcJiMzNDttZW1vcnkuY3VycmVudCA9ICVsZFxcblwmIzM0OywgY3VycmVudCk7XG4tXHRcdHByaW50ZihcJiMzNDthbm9uICYjNDM7IGZpbGUgJiM0Mzsga2VybmVsICYjNDM7IHNvY2sgPSAlbGRcXG5cJiMzNDssIHN1bSk7XG4tXHRcdHByaW50ZihcJiMzNDthbm9uID0gJWxkXFxuXCYjMzQ7LCBhbm9uKTtcbi1cdFx0cHJpbnRmKFwmIzM0O2ZpbGUgPSAlbGRcXG5cJiMzNDssIGZpbGUpO1xuLVx0XHRwcmludGYoXCYjMzQ7a2VybmVsID0gJWxkXFxuXCYjMzQ7LCBrZXJuZWwpO1xuLVx0XHRwcmludGYoXCYjMzQ7c29jayA9ICVsZFxcblwmIzM0Oywgc29jayk7XG4mIzQzO1x0XHRwcmludGYoXCYjMzQ7YW5vbiAmIzQzOyBmaWxlICYjNDM7IGtlcm5lbCAmIzQzOyBzb2NrID0gJWxsZFxcblwmIzM0Oywgc3VtKTtcbiYjNDM7XHRcdHByaW50ZihcJiMzNDthbm9uID0gJWxsZFxcblwmIzM0OywgYW5vbik7XG4mIzQzO1x0XHRwcmludGYoXCYjMzQ7ZmlsZSA9ICVsbGRcXG5cJiMzNDssIGZpbGUpO1xuJiM0MztcdFx0cHJpbnRmKFwmIzM0O2tlcm5lbCA9ICVsbGRcXG5cJiMzNDssIGtlcm5lbCk7XG4mIzQzO1x0XHRwcmludGYoXCYjMzQ7c29jayA9ICVsbGRcXG5cJiMzNDssIHNvY2spO1xuIFx0fVxuIFxuIGNsZWFudXA6XG5AQCAtMjQ4LDcgJiM0MzsyNTAsNyBAQCBzdGF0aWMgaW50IHNwYXduXzEwMDBfdGhyZWFkcyhjb25zdCBjaGFyICpjZ3JvdXAsIHZvaWQgKmFyZylcbiBcdGludCBucl90aHJlYWRzID0gMTAwMDtcbiBcdHB0aHJlYWRfdCAqdGluZm87XG4gXHR1bnNpZ25lZCBsb25nIGk7XG4tXHRsb25nIHN0YWNrO1xuJiM0MztcdHM2NCBzdGFjaztcbiBcdGludCByZXQgPSAtMTtcbiBcbiBcdHRpbmZvID0gY2FsbG9jKG5yX3RocmVhZHMsIHNpemVvZihwdGhyZWFkX3QpKTtcbkBAIC0yNjMsNyAmIzQzOzI2NSw3IEBAIHN0YXRpYyBpbnQgc3Bhd25fMTAwMF90aHJlYWRzKGNvbnN0IGNoYXIgKmNncm91cCwgdm9pZCAqYXJnKVxuIFx0XHR9XG4gXHR9XG4gXG4tXHRzdGFjayA9IGNnX3JlYWRfa2V5X2xvbmcoY2dyb3VwLCBcJiMzNDttZW1vcnkuc3RhdFwmIzM0OywgXCYjMzQ7a2VybmVsX3N0YWNrIFwmIzM0Oyk7XG4mIzQzO1x0c3RhY2sgPSBjZ19yZWFkX2tleV9zNjQoY2dyb3VwLCBcJiMzNDttZW1vcnkuc3RhdFwmIzM0OywgXCYjMzQ7a2VybmVsX3N0YWNrIFwmIzM0Oyk7XG4gXHRpZiAoc3RhY2sgXHUwMDNlPSA0MDk2ICogMTAwMClcbiBcdFx0cmV0ID0gMDtcbiBcbkBAIC0zMDcsNyAmIzQzOzMwOSw3IEBAIHN0YXRpYyBpbnQgdGVzdF9rbWVtX2RlYWRfY2dyb3Vwcyhjb25zdCBjaGFyICpyb290KVxuIHtcbiBcdGludCByZXQgPSBLU0ZUX0ZBSUw7XG4gXHRjaGFyICpwYXJlbnQ7XG4tXHRsb25nIGRlYWQgPSAtMTtcbiYjNDM7XHRzNjQgZGVhZCA9IC0xO1xuIFxuIFx0cGFyZW50ID0gY2dfbmFtZShyb290LCBcJiMzNDtrbWVtX2RlYWRfY2dyb3Vwc190ZXN0XCYjMzQ7KTtcbiBcdGlmICghcGFyZW50KVxuQEAgLTMyOCw5ICYjNDM7MzMwLDEwIEBAIHN0YXRpYyBpbnQgdGVzdF9rbWVtX2RlYWRfY2dyb3Vwcyhjb25zdCBjaGFyICpyb290KVxuIFx0ICogZnJvbSBhIHNwZWNpZmljIGtlcm5lbCBjb25zdGFudCwgYW5kIGNhbiBiZSBhZGp1c3RlZCBpZiByZWNsYWltXG4gXHQgKiBiZWhhdmlvciBjaGFuZ2VzIGluIHRoZSBmdXR1cmUuXG4gXHQgKi9cbi1cdGRlYWQgPSBjZ19yZWFkX2tleV9sb25nX3BvbGwocGFyZW50LCBcJiMzNDtjZ3JvdXAuc3RhdFwmIzM0Oyxcbi1cdFx0XHRcdFx0XCYjMzQ7bnJfZHlpbmdfZGVzY2VuZGFudHMgXCYjMzQ7LCAwLCBLTUVNX0RFQURfV0FJVF9SRVRSSUVTLFxuLVx0XHRcdFx0XHRERUZBVUxUX1dBSVRfSU5URVJWQUxfVVMpO1xuJiM0MztcdGRlYWQgPSBjZ19yZWFkX2tleV9zNjRfcG9sbChwYXJlbnQsIFwmIzM0O2Nncm91cC5zdGF0XCYjMzQ7LFxuJiM0MztcdFx0XHRcdCAgICBcJiMzNDtucl9keWluZ19kZXNjZW5kYW50cyBcJiMzNDssIDAsXG4mIzQzO1x0XHRcdFx0ICAgIEtNRU1fREVBRF9XQUlUX1JFVFJJRVMsXG4mIzQzO1x0XHRcdFx0ICAgIERFRkFVTFRfV0FJVF9JTlRFUlZBTF9VUyk7XG4gXHRpZiAoZGVhZClcbiBcdFx0Z290byBjbGVhbnVwO1xuIFxuQEAgLTM1Myw3ICYjNDM7MzU2LDggQEAgc3RhdGljIGludCB0ZXN0X3BlcmNwdV9iYXNpYyhjb25zdCBjaGFyICpyb290KVxuIHtcbiBcdGludCByZXQgPSBLU0ZUX0ZBSUw7XG4gXHRjaGFyICpwYXJlbnQsICpjaGlsZDtcbi1cdGxvbmcgY3VycmVudCwgcGVyY3B1LCBzbGFiO1xuJiM0MztcdGxvbmcgY3VycmVudDtcbiYjNDM7XHRzNjQgcGVyY3B1LCBzbGFiO1xuIFx0aW50IGk7XG4gXG4gXHRwYXJlbnQgPSBjZ19uYW1lKHJvb3QsIFwmIzM0O3BlcmNwdV9iYXNpY190ZXN0XCYjMzQ7KTtcbkBAIC0zODIsMTUgJiM0MzszODYsMTUgQEAgc3RhdGljIGludCB0ZXN0X3BlcmNwdV9iYXNpYyhjb25zdCBjaGFyICpyb290KVxuIFx0fVxuIFxuIFx0Y3VycmVudCA9IGNnX3JlYWRfbG9uZyhwYXJlbnQsIFwmIzM0O21lbW9yeS5jdXJyZW50XCYjMzQ7KTtcbi1cdHBlcmNwdSA9IGNnX3JlYWRfa2V5X2xvbmcocGFyZW50LCBcJiMzNDttZW1vcnkuc3RhdFwmIzM0OywgXCYjMzQ7cGVyY3B1IFwmIzM0Oyk7XG4tXHRzbGFiID0gY2dfcmVhZF9rZXlfbG9uZyhwYXJlbnQsIFwmIzM0O21lbW9yeS5zdGF0XCYjMzQ7LCBcJiMzNDtzbGFiIFwmIzM0Oyk7XG4mIzQzO1x0cGVyY3B1ID0gY2dfcmVhZF9rZXlfczY0KHBhcmVudCwgXCYjMzQ7bWVtb3J5LnN0YXRcJiMzNDssIFwmIzM0O3BlcmNwdSBcJiMzNDspO1xuJiM0MztcdHNsYWIgPSBjZ19yZWFkX2tleV9zNjQocGFyZW50LCBcJiMzNDttZW1vcnkuc3RhdFwmIzM0OywgXCYjMzQ7c2xhYiBcJiMzNDspO1xuIFxuIFx0aWYgKGN1cnJlbnQgXHUwMDNlIDAgXHUwMDI2XHUwMDI2IHBlcmNwdSBcdTAwM2UgMCBcdTAwMjZcdTAwMjYgc2xhYiBcdTAwM2U9IDAgXHUwMDI2XHUwMDI2XG4tXHRcdFx0bGFicyhjdXJyZW50IC0gKHBlcmNwdSAmIzQzOyBzbGFiKSkgXHUwMDNjIE1BWF9WTVNUQVRfRVJST1IpXG4mIzQzO1x0ICAgIGxsYWJzKGN1cnJlbnQgLSAocGVyY3B1ICYjNDM7IHNsYWIpKSBcdTAwM2MgTUFYX1ZNU1RBVF9FUlJPUilcbiBcdFx0cmV0ID0gS1NGVF9QQVNTO1xuIFx0ZWxzZVxuLVx0XHRwcmludGYoXCYjMzQ7bWVtb3J5LmN1cnJlbnQgJWxkXFxucGVyY3B1ICVsZFxcbnNsYWIgJWxkXFxuZGVsdGEgJWxkXFxuXCYjMzQ7LFxuLVx0XHRcdGN1cnJlbnQsIHBlcmNwdSwgc2xhYiwgY3VycmVudCAtIChwZXJjcHUgJiM0Mzsgc2xhYikpO1xuJiM0MztcdFx0cHJpbnRmKFwmIzM0O21lbW9yeS5jdXJyZW50ICVsZFxcbnBlcmNwdSAlbGxkXFxuc2xhYiAlbGxkXFxuZGVsdGEgJWxsZFxcblwmIzM0OyxcbiYjNDM7XHRcdCAgICAgICBjdXJyZW50LCBwZXJjcHUsIHNsYWIsIGN1cnJlbnQgLSAocGVyY3B1ICYjNDM7IHNsYWIpKTtcbiBcbiBjbGVhbnVwX2NoaWxkcmVuOlxuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgMTAwMDsgaSYjNDM7JiM0MzspIHtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9jZ3JvdXAvdGVzdF9tZW1jb250cm9sLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9jZ3JvdXAvdGVzdF9tZW1jb250cm9sLmNcbmluZGV4IDNhODRkMDY4ZmJmMzYuLjUzOTY1MGMxZDU2MjYgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9jZ3JvdXAvdGVzdF9tZW1jb250cm9sLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2Nncm91cC90ZXN0X21lbWNvbnRyb2wuY1xuQEAgLTE5Miw3ICYjNDM7MTkyLDggQEAgc3RhdGljIGludCBhbGxvY19hbm9uXzUwTV9jaGVjayhjb25zdCBjaGFyICpjZ3JvdXAsIHZvaWQgKmFyZylcbiB7XG4gXHRzaXplX3Qgc2l6ZSA9IE1CKDUwKTtcbiBcdGNoYXIgKmJ1Zjtcbi1cdGxvbmcgYW5vbiwgY3VycmVudDtcbiYjNDM7XHRzNjQgYW5vbjtcbiYjNDM7XHRsb25nIGN1cnJlbnQ7XG4gXHRpbnQgcmV0ID0gLTE7XG4gXG4gXHRidWYgPSBhbGxvY19hbmRfcG9wdWxhdGVfYW5vbihzaXplKTtcbkBAIC0yMDYsNyAmIzQzOzIwNyw3IEBAIHN0YXRpYyBpbnQgYWxsb2NfYW5vbl81ME1fY2hlY2soY29uc3QgY2hhciAqY2dyb3VwLCB2b2lkICphcmcpXG4gXHRpZiAoIXZhbHVlc19jbG9zZShzaXplLCBjdXJyZW50LCAzKSlcbiBcdFx0Z290byBjbGVhbnVwO1xuIFxuLVx0YW5vbiA9IGNnX3JlYWRfa2V5X2xvbmcoY2dyb3VwLCBcJiMzNDttZW1vcnkuc3RhdFwmIzM0OywgXCYjMzQ7YW5vbiBcJiMzNDspO1xuJiM0MztcdGFub24gPSBjZ19yZWFkX2tleV9zNjQoY2dyb3VwLCBcJiMzNDttZW1vcnkuc3RhdFwmIzM0OywgXCYjMzQ7YW5vbiBcJiMzNDspO1xuIFx0aWYgKGFub24gXHUwMDNjIDApXG4gXHRcdGdvdG8gY2xlYW51cDtcbiBcbkBAIC0yMjMsNyAmIzQzOzIyNCw4IEBAIHN0YXRpYyBpbnQgYWxsb2NfcGFnZWNhY2hlXzUwTV9jaGVjayhjb25zdCBjaGFyICpjZ3JvdXAsIHZvaWQgKmFyZylcbiB7XG4gXHRzaXplX3Qgc2l6ZSA9IE1CKDUwKTtcbiBcdGludCByZXQgPSAtMTtcbi1cdGxvbmcgY3VycmVudCwgZmlsZTtcbiYjNDM7XHRsb25nIGN1cnJlbnQ7XG4mIzQzO1x0czY0IGZpbGU7XG4gXHRpbnQgZmQ7XG4gXG4gXHRmZCA9IGdldF90ZW1wX2ZkKCk7XG5AQCAtMjM3LDcgJiM0MzsyMzksNyBAQCBzdGF0aWMgaW50IGFsbG9jX3BhZ2VjYWNoZV81ME1fY2hlY2soY29uc3QgY2hhciAqY2dyb3VwLCB2b2lkICphcmcpXG4gXHRpZiAoY3VycmVudCBcdTAwM2Mgc2l6ZSlcbiBcdFx0Z290byBjbGVhbnVwO1xuIFxuLVx0ZmlsZSA9IGNnX3JlYWRfa2V5X2xvbmcoY2dyb3VwLCBcJiMzNDttZW1vcnkuc3RhdFwmIzM0OywgXCYjMzQ7ZmlsZSBcJiMzNDspO1xuJiM0MztcdGZpbGUgPSBjZ19yZWFkX2tleV9zNjQoY2dyb3VwLCBcJiMzNDttZW1vcnkuc3RhdFwmIzM0OywgXCYjMzQ7ZmlsZSBcJiMzNDspO1xuIFx0aWYgKGZpbGUgXHUwMDNjIDApXG4gXHRcdGdvdG8gY2xlYW51cDtcbiBcbkBAIC02MjMsMTAgJiM0Mzs2MjUsMTAgQEAgc3RhdGljIGludCB0ZXN0X21lbWNnX3Byb3RlY3Rpb24oY29uc3QgY2hhciAqcm9vdCwgYm9vbCBtaW4pXG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBBUlJBWV9TSVpFKGNoaWxkcmVuKTsgaSYjNDM7JiM0MzspIHtcbiBcdFx0aW50IGlnbm9yZV9sb3dfZXZlbnRzX2luZGV4ID0gaGFzX3JlY3Vyc2l2ZXByb3QgPyAyIDogLTE7XG4gXHRcdGludCBub19sb3dfZXZlbnRzX2luZGV4ID0gMTtcbi1cdFx0bG9uZyBsb3csIG9vbTtcbiYjNDM7XHRcdHM2NCBsb3csIG9vbTtcbiBcbi1cdFx0b29tID0gY2dfcmVhZF9rZXlfbG9uZyhjaGlsZHJlbltpXSwgXCYjMzQ7bWVtb3J5LmV2ZW50c1wmIzM0OywgXCYjMzQ7b29tIFwmIzM0Oyk7XG4tXHRcdGxvdyA9IGNnX3JlYWRfa2V5X2xvbmcoY2hpbGRyZW5baV0sIFwmIzM0O21lbW9yeS5ldmVudHNcJiMzNDssIFwmIzM0O2xvdyBcJiMzNDspO1xuJiM0MztcdFx0b29tID0gY2dfcmVhZF9rZXlfczY0KGNoaWxkcmVuW2ldLCBcJiMzNDttZW1vcnkuZXZlbnRzXCYjMzQ7LCBcJiMzNDtvb20gXCYjMzQ7KTtcbiYjNDM7XHRcdGxvdyA9IGNnX3JlYWRfa2V5X3M2NChjaGlsZHJlbltpXSwgXCYjMzQ7bWVtb3J5LmV2ZW50c1wmIzM0OywgXCYjMzQ7bG93IFwmIzM0Oyk7XG4gXG4gXHRcdGlmIChvb20pXG4gXHRcdFx0Z290byBjbGVhbnVwO1xuQEAgLTcxMSw3ICYjNDM7NzEzLDcgQEAgc3RhdGljIGludCB0ZXN0X21lbWNnX2hpZ2goY29uc3QgY2hhciAqcm9vdClcbiB7XG4gXHRpbnQgcmV0ID0gS1NGVF9GQUlMO1xuIFx0Y2hhciAqbWVtY2c7XG4tXHRsb25nIGhpZ2g7XG4mIzQzO1x0czY0IGhpZ2g7XG4gXG4gXHRtZW1jZyA9IGNnX25hbWUocm9vdCwgXCYjMzQ7bWVtY2dfdGVzdFwmIzM0Oyk7XG4gXHRpZiAoIW1lbWNnKVxuQEAgLTczOCw3ICYjNDM7NzQwLDcgQEAgc3RhdGljIGludCB0ZXN0X21lbWNnX2hpZ2goY29uc3QgY2hhciAqcm9vdClcbiBcdGlmIChjZ19ydW4obWVtY2csIGFsbG9jX3BhZ2VjYWNoZV9tYXhfMzBNLCBOVUxMKSlcbiBcdFx0Z290byBjbGVhbnVwO1xuIFxuLVx0aGlnaCA9IGNnX3JlYWRfa2V5X2xvbmcobWVtY2csIFwmIzM0O21lbW9yeS5ldmVudHNcJiMzNDssIFwmIzM0O2hpZ2ggXCYjMzQ7KTtcbiYjNDM7XHRoaWdoID0gY2dfcmVhZF9rZXlfczY0KG1lbWNnLCBcJiMzNDttZW1vcnkuZXZlbnRzXCYjMzQ7LCBcJiMzNDtoaWdoIFwmIzM0Oyk7XG4gXHRpZiAoaGlnaCBcdTAwM2M9IDApXG4gXHRcdGdvdG8gY2xlYW51cDtcbiBcbkBAIC03NzQsOCAmIzQzOzc3Niw4IEBAIHN0YXRpYyBpbnQgdGVzdF9tZW1jZ19oaWdoX3N5bmMoY29uc3QgY2hhciAqcm9vdClcbiB7XG4gXHRpbnQgcmV0ID0gS1NGVF9GQUlMLCBwaWQsIGZkID0gLTE7XG4gXHRjaGFyICptZW1jZztcbi1cdGxvbmcgcHJlX2hpZ2gsIHByZV9tYXg7XG4tXHRsb25nIHBvc3RfaGlnaCwgcG9zdF9tYXg7XG4mIzQzO1x0czY0IHByZV9oaWdoLCBwcmVfbWF4O1xuJiM0MztcdHM2NCBwb3N0X2hpZ2gsIHBvc3RfbWF4O1xuIFxuIFx0bWVtY2cgPSBjZ19uYW1lKHJvb3QsIFwmIzM0O21lbWNnX3Rlc3RcJiMzNDspO1xuIFx0aWYgKCFtZW1jZylcbkBAIC03ODQsOCAmIzQzOzc4Niw4IEBAIHN0YXRpYyBpbnQgdGVzdF9tZW1jZ19oaWdoX3N5bmMoY29uc3QgY2hhciAqcm9vdClcbiBcdGlmIChjZ19jcmVhdGUobWVtY2cpKVxuIFx0XHRnb3RvIGNsZWFudXA7XG4gXG4tXHRwcmVfaGlnaCA9IGNnX3JlYWRfa2V5X2xvbmcobWVtY2csIFwmIzM0O21lbW9yeS5ldmVudHNcJiMzNDssIFwmIzM0O2hpZ2ggXCYjMzQ7KTtcbi1cdHByZV9tYXggPSBjZ19yZWFkX2tleV9sb25nKG1lbWNnLCBcJiMzNDttZW1vcnkuZXZlbnRzXCYjMzQ7LCBcJiMzNDttYXggXCYjMzQ7KTtcbiYjNDM7XHRwcmVfaGlnaCA9IGNnX3JlYWRfa2V5X3M2NChtZW1jZywgXCYjMzQ7bWVtb3J5LmV2ZW50c1wmIzM0OywgXCYjMzQ7aGlnaCBcJiMzNDspO1xuJiM0MztcdHByZV9tYXggPSBjZ19yZWFkX2tleV9zNjQobWVtY2csIFwmIzM0O21lbW9yeS5ldmVudHNcJiMzNDssIFwmIzM0O21heCBcJiMzNDspO1xuIFx0aWYgKHByZV9oaWdoIFx1MDAzYyAwIHx8IHByZV9tYXggXHUwMDNjIDApXG4gXHRcdGdvdG8gY2xlYW51cDtcbiBcbkBAIC04MDgsOCAmIzQzOzgxMCw4IEBAIHN0YXRpYyBpbnQgdGVzdF9tZW1jZ19oaWdoX3N5bmMoY29uc3QgY2hhciAqcm9vdClcbiBcbiBcdGNnX3dhaXRfZm9yKGZkKTtcbiBcbi1cdHBvc3RfaGlnaCA9IGNnX3JlYWRfa2V5X2xvbmcobWVtY2csIFwmIzM0O21lbW9yeS5ldmVudHNcJiMzNDssIFwmIzM0O2hpZ2ggXCYjMzQ7KTtcbi1cdHBvc3RfbWF4ID0gY2dfcmVhZF9rZXlfbG9uZyhtZW1jZywgXCYjMzQ7bWVtb3J5LmV2ZW50c1wmIzM0OywgXCYjMzQ7bWF4IFwmIzM0Oyk7XG4mIzQzO1x0cG9zdF9oaWdoID0gY2dfcmVhZF9rZXlfczY0KG1lbWNnLCBcJiMzNDttZW1vcnkuZXZlbnRzXCYjMzQ7LCBcJiMzNDtoaWdoIFwmIzM0Oyk7XG4mIzQzO1x0cG9zdF9tYXggPSBjZ19yZWFkX2tleV9zNjQobWVtY2csIFwmIzM0O21lbW9yeS5ldmVudHNcJiMzNDssIFwmIzM0O21heCBcJiMzNDspO1xuIFx0aWYgKHBvc3RfaGlnaCBcdTAwM2MgMCB8fCBwb3N0X21heCBcdTAwM2MgMClcbiBcdFx0Z290byBjbGVhbnVwO1xuIFxuQEAgLTgzNiw3ICYjNDM7ODM4LDggQEAgc3RhdGljIGludCB0ZXN0X21lbWNnX21heChjb25zdCBjaGFyICpyb290KVxuIHtcbiBcdGludCByZXQgPSBLU0ZUX0ZBSUw7XG4gXHRjaGFyICptZW1jZztcbi1cdGxvbmcgY3VycmVudCwgbWF4O1xuJiM0MztcdGxvbmcgY3VycmVudDtcbiYjNDM7XHRzNjQgbWF4O1xuIFxuIFx0bWVtY2cgPSBjZ19uYW1lKHJvb3QsIFwmIzM0O21lbWNnX3Rlc3RcJiMzNDspO1xuIFx0aWYgKCFtZW1jZylcbkBAIC04NjUsNyAmIzQzOzg2OCw3IEBAIHN0YXRpYyBpbnQgdGVzdF9tZW1jZ19tYXgoY29uc3QgY2hhciAqcm9vdClcbiBcdGlmIChjdXJyZW50IFx1MDAzZSBNQigzMCkgfHwgIWN1cnJlbnQpXG4gXHRcdGdvdG8gY2xlYW51cDtcbiBcbi1cdG1heCA9IGNnX3JlYWRfa2V5X2xvbmcobWVtY2csIFwmIzM0O21lbW9yeS5ldmVudHNcJiMzNDssIFwmIzM0O21heCBcJiMzNDspO1xuJiM0MztcdG1heCA9IGNnX3JlYWRfa2V5X3M2NChtZW1jZywgXCYjMzQ7bWVtb3J5LmV2ZW50c1wmIzM0OywgXCYjMzQ7bWF4IFwmIzM0Oyk7XG4gXHRpZiAobWF4IFx1MDAzYz0gMClcbiBcdFx0Z290byBjbGVhbnVwO1xuIFxuQEAgLTEwMjksNyAmIzQzOzEwMzIsOCBAQCBzdGF0aWMgaW50IHRlc3RfbWVtY2dfc3dhcF9tYXhfcGVhayhjb25zdCBjaGFyICpyb290KVxuIHtcbiBcdGludCByZXQgPSBLU0ZUX0ZBSUw7XG4gXHRjaGFyICptZW1jZztcbi1cdGxvbmcgbWF4LCBwZWFrO1xuJiM0MztcdHM2NCBtYXg7XG4mIzQzO1x0bG9uZyBwZWFrO1xuIFx0c3RydWN0IHN0YXQgc3M7XG4gXHRpbnQgc3dhcF9wZWFrX2ZkID0gLTEsIG1lbV9wZWFrX2ZkID0gLTE7XG4gXG5AQCAtMTEyMiwxMCAmIzQzOzExMjYsMTAgQEAgc3RhdGljIGludCB0ZXN0X21lbWNnX3N3YXBfbWF4X3BlYWsoY29uc3QgY2hhciAqcm9vdClcbiBcdGlmICghY2dfcnVuKG1lbWNnLCBhbGxvY19hbm9uLCAodm9pZCAqKU1CKDEwMCkpKVxuIFx0XHRnb3RvIGNsZWFudXA7XG4gXG4tXHRpZiAoY2dfcmVhZF9rZXlfbG9uZyhtZW1jZywgXCYjMzQ7bWVtb3J5LmV2ZW50c1wmIzM0OywgXCYjMzQ7b29tIFwmIzM0OykgIT0gMSlcbiYjNDM7XHRpZiAoY2dfcmVhZF9rZXlfczY0KG1lbWNnLCBcJiMzNDttZW1vcnkuZXZlbnRzXCYjMzQ7LCBcJiMzNDtvb20gXCYjMzQ7KSAhPSAxKVxuIFx0XHRnb3RvIGNsZWFudXA7XG4gXG4tXHRpZiAoY2dfcmVhZF9rZXlfbG9uZyhtZW1jZywgXCYjMzQ7bWVtb3J5LmV2ZW50c1wmIzM0OywgXCYjMzQ7b29tX2tpbGwgXCYjMzQ7KSAhPSAxKVxuJiM0MztcdGlmIChjZ19yZWFkX2tleV9zNjQobWVtY2csIFwmIzM0O21lbW9yeS5ldmVudHNcJiMzNDssIFwmIzM0O29vbV9raWxsIFwmIzM0OykgIT0gMSlcbiBcdFx0Z290byBjbGVhbnVwO1xuIFxuIFx0cGVhayA9IGNnX3JlYWRfbG9uZyhtZW1jZywgXCYjMzQ7bWVtb3J5LnBlYWtcJiMzNDspO1xuQEAgLTExODYsNyAmIzQzOzExOTAsNyBAQCBzdGF0aWMgaW50IHRlc3RfbWVtY2dfc3dhcF9tYXhfcGVhayhjb25zdCBjaGFyICpyb290KVxuIFx0aWYgKGNnX3J1bihtZW1jZywgYWxsb2NfYW5vbl81ME1fY2hlY2tfc3dhcCwgKHZvaWQgKilNQigzMCkpKVxuIFx0XHRnb3RvIGNsZWFudXA7XG4gXG4tXHRtYXggPSBjZ19yZWFkX2tleV9sb25nKG1lbWNnLCBcJiMzNDttZW1vcnkuZXZlbnRzXCYjMzQ7LCBcJiMzNDttYXggXCYjMzQ7KTtcbiYjNDM7XHRtYXggPSBjZ19yZWFkX2tleV9zNjQobWVtY2csIFwmIzM0O21lbW9yeS5ldmVudHNcJiMzNDssIFwmIzM0O21heCBcJiMzNDspO1xuIFx0aWYgKG1heCBcdTAwM2M9IDApXG4gXHRcdGdvdG8gY2xlYW51cDtcbiBcbkBAIC0xMjQ4LDEwICYjNDM7MTI1MiwxMCBAQCBzdGF0aWMgaW50IHRlc3RfbWVtY2dfb29tX2V2ZW50cyhjb25zdCBjaGFyICpyb290KVxuIFx0aWYgKGNnX3JlYWRfc3RyY21wKG1lbWNnLCBcJiMzNDtjZ3JvdXAucHJvY3NcJiMzNDssIFwmIzM0O1wmIzM0OykpXG4gXHRcdGdvdG8gY2xlYW51cDtcbiBcbi1cdGlmIChjZ19yZWFkX2tleV9sb25nKG1lbWNnLCBcJiMzNDttZW1vcnkuZXZlbnRzXCYjMzQ7LCBcJiMzNDtvb20gXCYjMzQ7KSAhPSAxKVxuJiM0MztcdGlmIChjZ19yZWFkX2tleV9zNjQobWVtY2csIFwmIzM0O21lbW9yeS5ldmVudHNcJiMzNDssIFwmIzM0O29vbSBcJiMzNDspICE9IDEpXG4gXHRcdGdvdG8gY2xlYW51cDtcbiBcbi1cdGlmIChjZ19yZWFkX2tleV9sb25nKG1lbWNnLCBcJiMzNDttZW1vcnkuZXZlbnRzXCYjMzQ7LCBcJiMzNDtvb21fa2lsbCBcJiMzNDspICE9IDEpXG4mIzQzO1x0aWYgKGNnX3JlYWRfa2V5X3M2NChtZW1jZywgXCYjMzQ7bWVtb3J5LmV2ZW50c1wmIzM0OywgXCYjMzQ7b29tX2tpbGwgXCYjMzQ7KSAhPSAxKVxuIFx0XHRnb3RvIGNsZWFudXA7XG4gXG4gXHRyZXQgPSBLU0ZUX1BBU1M7XG5AQCAtMTM1NCwxMyAmIzQzOzEzNTgsMTQgQEAgc3RhdGljIGludCB0Y3BfY2xpZW50KGNvbnN0IGNoYXIgKmNncm91cCwgdW5zaWduZWQgc2hvcnQgcG9ydClcbiBcdHJldCA9IEtTRlRfRkFJTDtcbiBcdHdoaWxlIChyZXRyaWVzLS0pIHtcbiBcdFx0dWludDhfdCBidWZbMHgxMDAwMDBdO1xuLVx0XHRsb25nIGN1cnJlbnQsIHNvY2s7XG4mIzQzO1x0XHRsb25nIGN1cnJlbnQ7XG4mIzQzO1x0XHRzNjQgc29jaztcbiBcbiBcdFx0aWYgKHJlYWQoc2ssIGJ1Ziwgc2l6ZW9mKGJ1ZikpIFx1MDAzYz0gMClcbiBcdFx0XHRnb3RvIGNsb3NlX3NrO1xuIFxuIFx0XHRjdXJyZW50ID0gY2dfcmVhZF9sb25nKGNncm91cCwgXCYjMzQ7bWVtb3J5LmN1cnJlbnRcJiMzNDspO1xuLVx0XHRzb2NrID0gY2dfcmVhZF9rZXlfbG9uZyhjZ3JvdXAsIFwmIzM0O21lbW9yeS5zdGF0XCYjMzQ7LCBcJiMzNDtzb2NrIFwmIzM0Oyk7XG4mIzQzO1x0XHRzb2NrID0gY2dfcmVhZF9rZXlfczY0KGNncm91cCwgXCYjMzQ7bWVtb3J5LnN0YXRcJiMzNDssIFwmIzM0O3NvY2sgXCYjMzQ7KTtcbiBcbiBcdFx0aWYgKGN1cnJlbnQgXHUwMDNjIDAgfHwgc29jayBcdTAwM2MgMClcbiBcdFx0XHRnb3RvIGNsb3NlX3NrO1xuQEAgLTEzOTIsNyAmIzQzOzEzOTcsNyBAQCBzdGF0aWMgaW50IHRlc3RfbWVtY2dfc29jayhjb25zdCBjaGFyICpyb290KVxuIFx0aW50IGJpbmRfcmV0cmllcyA9IDUsIHJldCA9IEtTRlRfRkFJTCwgcGlkLCBlcnI7XG4gXHR1bnNpZ25lZCBzaG9ydCBwb3J0O1xuIFx0Y2hhciAqbWVtY2c7XG4tXHRsb25nIHNvY2tfcG9zdCA9IC0xO1xuJiM0MztcdHM2NCBzb2NrX3Bvc3QgPSAtMTtcbiBcbiBcdG1lbWNnID0gY2dfbmFtZShyb290LCBcJiMzNDttZW1jZ190ZXN0XCYjMzQ7KTtcbiBcdGlmICghbWVtY2cpXG5AQCAtMTQ1OSw3ICYjNDM7MTQ2NCw3IEBAIHN0YXRpYyBpbnQgdGVzdF9tZW1jZ19zb2NrKGNvbnN0IGNoYXIgKnJvb3QpXG4gXHQgKiBzY2hlZHVsaW5nIHNsYWNrKSBhbmQgcmVxdWlyZSB0aGF0IHRoZSBcJiMzNDtzb2NrIFwmIzM0OyBjb3VudGVyXG4gXHQgKiBldmVudHVhbGx5IGRyb3BzIHRvIHplcm8uXG4gXHQgKi9cbi1cdHNvY2tfcG9zdCA9IGNnX3JlYWRfa2V5X2xvbmdfcG9sbChtZW1jZywgXCYjMzQ7bWVtb3J5LnN0YXRcJiMzNDssIFwmIzM0O3NvY2sgXCYjMzQ7LCAwLFxuJiM0MztcdHNvY2tfcG9zdCA9IGNnX3JlYWRfa2V5X3M2NF9wb2xsKG1lbWNnLCBcJiMzNDttZW1vcnkuc3RhdFwmIzM0OywgXCYjMzQ7c29jayBcJiMzNDssIDAsXG4gXHRcdFx0XHRcdCBNRU1DR19TT0NLU1RBVF9XQUlUX1JFVFJJRVMsXG4gXHRcdFx0XHRcdCBERUZBVUxUX1dBSVRfSU5URVJWQUxfVVMpO1xuIFx0aWYgKHNvY2tfcG9zdClcbkBAIC0xNDg0LDcgJiM0MzsxNDg5LDcgQEAgc3RhdGljIGludCB0ZXN0X21lbWNnX29vbV9ncm91cF9sZWFmX2V2ZW50cyhjb25zdCBjaGFyICpyb290KVxuIHtcbiBcdGludCByZXQgPSBLU0ZUX0ZBSUw7XG4gXHRjaGFyICpwYXJlbnQsICpjaGlsZDtcbi1cdGxvbmcgcGFyZW50X29vbV9ldmVudHM7XG4mIzQzO1x0czY0IHBhcmVudF9vb21fZXZlbnRzO1xuIFxuIFx0cGFyZW50ID0gY2dfbmFtZShyb290LCBcJiMzNDttZW1jZ190ZXN0XzBcJiMzNDspO1xuIFx0Y2hpbGQgPSBjZ19uYW1lKHJvb3QsIFwmIzM0O21lbWNnX3Rlc3RfMC9tZW1jZ190ZXN0XzFcJiMzNDspO1xuQEAgLTE1MTksMTEgJiM0MzsxNTI0LDExIEBAIHN0YXRpYyBpbnQgdGVzdF9tZW1jZ19vb21fZ3JvdXBfbGVhZl9ldmVudHMoY29uc3QgY2hhciAqcm9vdClcbiBcdGlmIChjZ190ZXN0X3Byb2Nfa2lsbGVkKGNoaWxkKSlcbiBcdFx0Z290byBjbGVhbnVwO1xuIFxuLVx0aWYgKGNnX3JlYWRfa2V5X2xvbmcoY2hpbGQsIFwmIzM0O21lbW9yeS5ldmVudHNcJiMzNDssIFwmIzM0O29vbV9raWxsIFwmIzM0OykgXHUwMDNjPSAwKVxuJiM0MztcdGlmIChjZ19yZWFkX2tleV9zNjQoY2hpbGQsIFwmIzM0O21lbW9yeS5ldmVudHNcJiMzNDssIFwmIzM0O29vbV9raWxsIFwmIzM0OykgXHUwMDNjPSAwKVxuIFx0XHRnb3RvIGNsZWFudXA7XG4gXG4tXHRwYXJlbnRfb29tX2V2ZW50cyA9IGNnX3JlYWRfa2V5X2xvbmcoXG4tXHRcdFx0cGFyZW50LCBcJiMzNDttZW1vcnkuZXZlbnRzXCYjMzQ7LCBcJiMzNDtvb21fa2lsbCBcJiMzNDspO1xuJiM0MztcdHBhcmVudF9vb21fZXZlbnRzID1cbiYjNDM7XHRcdGNnX3JlYWRfa2V5X3M2NChwYXJlbnQsIFwmIzM0O21lbW9yeS5ldmVudHNcJiMzNDssIFwmIzM0O29vbV9raWxsIFwmIzM0Oyk7XG4gXHQvKlxuIFx0ICogSWYgbWVtb3J5X2xvY2FsZXZlbnRzIGlzIG5vdCBlbmFibGVkICh0aGUgZGVmYXVsdCksIHRoZSBwYXJlbnQgc2hvdWxkXG4gXHQgKiBjb3VudCBPT00gZXZlbnRzIGluIGl0cyBjaGlsZHJlbiBncm91cHMuIE90aGVyd2lzZSwgaXQgc2hvdWxkIG5vdFxuQEAgLTE2MzksNyAmIzQzOzE2NDQsNyBAQCBzdGF0aWMgaW50IHRlc3RfbWVtY2dfb29tX2dyb3VwX3Njb3JlX2V2ZW50cyhjb25zdCBjaGFyICpyb290KVxuIFx0aWYgKCFjZ19ydW4obWVtY2csIGFsbG9jX2Fub24sICh2b2lkICopTUIoMTAwKSkpXG4gXHRcdGdvdG8gY2xlYW51cDtcbiBcbi1cdGlmIChjZ19yZWFkX2tleV9sb25nKG1lbWNnLCBcJiMzNDttZW1vcnkuZXZlbnRzXCYjMzQ7LCBcJiMzNDtvb21fa2lsbCBcJiMzNDspICE9IDMpXG4mIzQzO1x0aWYgKGNnX3JlYWRfa2V5X3M2NChtZW1jZywgXCYjMzQ7bWVtb3J5LmV2ZW50c1wmIzM0OywgXCYjMzQ7b29tX2tpbGwgXCYjMzQ7KSAhPSAzKVxuIFx0XHRnb3RvIGNsZWFudXA7XG4gXG4gXHRpZiAoa2lsbChzYWZlX3BpZCwgU0lHS0lMTCkpXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvY2dyb3VwL3Rlc3RfcGlkcy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvY2dyb3VwL3Rlc3RfcGlkcy5jXG5pbmRleCA3MTAxMDliNTNkZmU5Li5mNGQ1YmM5ZjVmMjRmIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvY2dyb3VwL3Rlc3RfcGlkcy5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9jZ3JvdXAvdGVzdF9waWRzLmNcbkBAIC0xMTEsMTIgJiM0MzsxMTEsMTEgQEAgc3RhdGljIGludCB0ZXN0X3BpZHNfZXZlbnRzKGNvbnN0IGNoYXIgKnJvb3QpXG4gXHRpZiAoa2lsbChwaWQsIFNJR0lOVCkpXG4gXHRcdGdvdG8gY2xlYW51cDtcbiBcbi1cdGlmIChjZ19yZWFkX2tleV9sb25nKGNnX2NoaWxkLCBcJiMzNDtwaWRzLmV2ZW50c1wmIzM0OywgXCYjMzQ7bWF4IFwmIzM0OykgIT0gMClcbiYjNDM7XHRpZiAoY2dfcmVhZF9rZXlfczY0KGNnX2NoaWxkLCBcJiMzNDtwaWRzLmV2ZW50c1wmIzM0OywgXCYjMzQ7bWF4IFwmIzM0OykgIT0gMClcbiBcdFx0Z290byBjbGVhbnVwO1xuLVx0aWYgKGNnX3JlYWRfa2V5X2xvbmcoY2dfcGFyZW50LCBcJiMzNDtwaWRzLmV2ZW50c1wmIzM0OywgXCYjMzQ7bWF4IFwmIzM0OykgIT0gMSlcbiYjNDM7XHRpZiAoY2dfcmVhZF9rZXlfczY0KGNnX3BhcmVudCwgXCYjMzQ7cGlkcy5ldmVudHNcJiMzNDssIFwmIzM0O21heCBcJiMzNDspICE9IDEpXG4gXHRcdGdvdG8gY2xlYW51cDtcbiBcbi1cbiBcdHJldCA9IEtTRlRfUEFTUztcbiBcbiBjbGVhbnVwOlxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2Nncm91cC90ZXN0X3pzd2FwLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9jZ3JvdXAvdGVzdF96c3dhcC5jXG5pbmRleCA2MDljNDhmMzg1MjQxLi42ZTdlZTExYmM5N2E1IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvY2dyb3VwL3Rlc3RfenN3YXAuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvY2dyb3VwL3Rlc3RfenN3YXAuY1xuQEAgLTU5LDE0ICYjNDM7NTksMTQgQEAgc3RhdGljIGludCBnZXRfenN3YXBfc3RvcmVkX3BhZ2VzKHNpemVfdCAqdmFsdWUpXG4gXHRyZXR1cm4gcmVhZF9pbnQoUEFUSF9aU1dBUF9TVE9SRURfUEFHRVMsIHZhbHVlKTtcbiB9XG4gXG4tc3RhdGljIGxvbmcgZ2V0X2NnX3diX2NvdW50KGNvbnN0IGNoYXIgKmNnKVxuJiM0MztzdGF0aWMgczY0IGdldF9jZ193Yl9jb3VudChjb25zdCBjaGFyICpjZylcbiB7XG4tXHRyZXR1cm4gY2dfcmVhZF9rZXlfbG9uZyhjZywgXCYjMzQ7bWVtb3J5LnN0YXRcJiMzNDssIFwmIzM0O3pzd3B3YlwmIzM0Oyk7XG4mIzQzO1x0cmV0dXJuIGNnX3JlYWRfa2V5X3M2NChjZywgXCYjMzQ7bWVtb3J5LnN0YXRcJiMzNDssIFwmIzM0O3pzd3B3YlwmIzM0Oyk7XG4gfVxuIFxuLXN0YXRpYyBsb25nIGdldF96c3dwb3V0KGNvbnN0IGNoYXIgKmNncm91cClcbiYjNDM7c3RhdGljIHM2NCBnZXRfenN3cG91dChjb25zdCBjaGFyICpjZ3JvdXApXG4ge1xuLVx0cmV0dXJuIGNnX3JlYWRfa2V5X2xvbmcoY2dyb3VwLCBcJiMzNDttZW1vcnkuc3RhdFwmIzM0OywgXCYjMzQ7enN3cG91dCBcJiMzNDspO1xuJiM0MztcdHJldHVybiBjZ19yZWFkX2tleV9zNjQoY2dyb3VwLCBcJiMzNDttZW1vcnkuc3RhdFwmIzM0OywgXCYjMzQ7enN3cG91dCBcJiMzNDspO1xuIH1cbiBcbiBzdGF0aWMgaW50IGFsbG9jYXRlX2FuZF9yZWFkX2J5dGVzKGNvbnN0IGNoYXIgKmNncm91cCwgdm9pZCAqYXJnKVxuQEAgLTEyNSw5ICYjNDM7MTI1LDEwIEBAIHN0YXRpYyBjaGFyICpzZXR1cF90ZXN0X2dyb3VwXzFNKGNvbnN0IGNoYXIgKnJvb3QsIGNvbnN0IGNoYXIgKm5hbWUpXG4gICogV3JpdGViYWNrIGlzIGFzeW5jaHJvbm91czsgcG9sbCB1bnRpbCBhdCBsZWFzdCBvbmUgd3JpdGViYWNrIGhhc1xuICAqIGJlZW4gcmVjb3JkZWQgZm9yIEBjZywgb3IgdW50aWwgQHRpbWVvdXRfbXMgaGFzIGVsYXBzZWQuXG4gICovXG4tc3RhdGljIGxvbmcgd2FpdF9mb3Jfd3JpdGViYWNrKGNvbnN0IGNoYXIgKmNnLCBpbnQgdGltZW91dF9tcylcbiYjNDM7c3RhdGljIHM2NCB3YWl0X2Zvcl93cml0ZWJhY2soY29uc3QgY2hhciAqY2csIGludCB0aW1lb3V0X21zKVxuIHtcbi1cdGxvbmcgZWxhcHNlZCwgY291bnQ7XG4mIzQzO1x0bG9uZyBlbGFwc2VkO1xuJiM0MztcdHM2NCBjb3VudDtcbiBcdGZvciAoZWxhcHNlZCA9IDA7IGVsYXBzZWQgXHUwMDNjIHRpbWVvdXRfbXM7IGVsYXBzZWQgJiM0Mzs9IDEwMCkge1xuIFx0XHRjb3VudCA9IGdldF9jZ193Yl9jb3VudChjZyk7XG4gXG5AQCAtMTQ3LDcgJiM0MzsxNDgsNyBAQCBzdGF0aWMgbG9uZyB3YWl0X2Zvcl93cml0ZWJhY2soY29uc3QgY2hhciAqY2csIGludCB0aW1lb3V0X21zKVxuICAqL1xuIHN0YXRpYyBpbnQgdGVzdF96c3dhcF91c2FnZShjb25zdCBjaGFyICpyb290KVxuIHtcbi1cdGxvbmcgenN3cG91dF9iZWZvcmUsIHpzd3BvdXRfYWZ0ZXI7XG4mIzQzO1x0czY0IHpzd3BvdXRfYmVmb3JlLCB6c3dwb3V0X2FmdGVyO1xuIFx0aW50IHJldCA9IEtTRlRfRkFJTDtcbiBcdGNoYXIgKnRlc3RfZ3JvdXA7XG4gXG5AQCAtMTkxLDcgJiM0MzsxOTIsOCBAQCBzdGF0aWMgaW50IHRlc3Rfc3dhcGluX25venN3YXAoY29uc3QgY2hhciAqcm9vdClcbiB7XG4gXHRpbnQgcmV0ID0gS1NGVF9GQUlMO1xuIFx0Y2hhciAqdGVzdF9ncm91cCwgbWVtX21heF9idWZbMzJdO1xuLVx0bG9uZyBzd2FwX3BlYWssIHpzd3BvdXQsIG1pbl9zd2FwO1xuJiM0MztcdGxvbmcgc3dhcF9wZWFrLCBtaW5fc3dhcDtcbiYjNDM7XHRzNjQgenN3cG91dDtcbiBcdHNpemVfdCBhbGxvY2F0aW9uX3NpemUgPSBwYWdlX3NpemUgKiA1MTI7XG4gXG4gXHRtaW5fc3dhcCA9IGFsbG9jYXRpb25fc2l6ZSAvIDQ7XG5AQCAtMjQ4LDcgJiM0MzsyNTAsNyBAQCBzdGF0aWMgaW50IHRlc3RfenN3YXBpbihjb25zdCBjaGFyICpyb290KVxuIHtcbiBcdGludCByZXQgPSBLU0ZUX0ZBSUw7XG4gXHRjaGFyICp0ZXN0X2dyb3VwO1xuLVx0bG9uZyB6c3dwaW47XG4mIzQzO1x0czY0IHpzd3BpbjtcbiBcbiBcdHRlc3RfZ3JvdXAgPSBjZ19uYW1lKHJvb3QsIFwmIzM0O3pzd2FwaW5fdGVzdFwmIzM0Oyk7XG4gXHRpZiAoIXRlc3RfZ3JvdXApXG5AQCAtMjY0LDcgJiM0MzsyNjYsNyBAQCBzdGF0aWMgaW50IHRlc3RfenN3YXBpbihjb25zdCBjaGFyICpyb290KVxuIFx0aWYgKGNnX3J1bih0ZXN0X2dyb3VwLCBhbGxvY2F0ZV9hbmRfcmVhZF9ieXRlcywgKHZvaWQgKilNQigzMikpKVxuIFx0XHRnb3RvIG91dDtcbiBcbi1cdHpzd3BpbiA9IGNnX3JlYWRfa2V5X2xvbmcodGVzdF9ncm91cCwgXCYjMzQ7bWVtb3J5LnN0YXRcJiMzNDssIFwmIzM0O3pzd3BpbiBcJiMzNDspO1xuJiM0MztcdHpzd3BpbiA9IGNnX3JlYWRfa2V5X3M2NCh0ZXN0X2dyb3VwLCBcJiMzNDttZW1vcnkuc3RhdFwmIzM0OywgXCYjMzQ7enN3cGluIFwmIzM0Oyk7XG4gXHRpZiAoenN3cGluIFx1MDAzYyAwKSB7XG4gXHRcdGtzZnRfcHJpbnRfbXNnKFwmIzM0O2ZhaWxlZCB0byBnZXQgenN3cGluXFxuXCYjMzQ7KTtcbiBcdFx0Z290byBvdXQ7XG5AQCAtMzU1LDExICYjNDM7MzU3LDExIEBAIHN0YXRpYyBpbnQgYXR0ZW1wdF93cml0ZWJhY2soY29uc3QgY2hhciAqY2dyb3VwLCB2b2lkICphcmcpXG4gXG4gc3RhdGljIGludCB0ZXN0X3pzd2FwX3dyaXRlYmFja19vbmUoY29uc3QgY2hhciAqY2dyb3VwLCBib29sIHdiKVxuIHtcbi1cdGxvbmcgenN3cHdiX2JlZm9yZSwgenN3cHdiX2FmdGVyO1xuJiM0MztcdHM2NCB6c3dwd2JfYmVmb3JlLCB6c3dwd2JfYWZ0ZXI7XG4gXG4gXHR6c3dwd2JfYmVmb3JlID0gZ2V0X2NnX3diX2NvdW50KGNncm91cCk7XG4gXHRpZiAoenN3cHdiX2JlZm9yZSAhPSAwKSB7XG4tXHRcdGtzZnRfcHJpbnRfbXNnKFwmIzM0O3pzd3B3Yl9iZWZvcmUgPSAlbGQgaW5zdGVhZCBvZiAwXFxuXCYjMzQ7LCB6c3dwd2JfYmVmb3JlKTtcbiYjNDM7XHRcdGtzZnRfcHJpbnRfbXNnKFwmIzM0O3pzd3B3Yl9iZWZvcmUgPSAlbGxkIGluc3RlYWQgb2YgMFxcblwmIzM0OywgenN3cHdiX2JlZm9yZSk7XG4gXHRcdHJldHVybiAtMTtcbiBcdH1cbiBcbkBAIC0zNzUsNyAmIzQzOzM3Nyw3IEBAIHN0YXRpYyBpbnQgdGVzdF96c3dhcF93cml0ZWJhY2tfb25lKGNvbnN0IGNoYXIgKmNncm91cCwgYm9vbCB3YilcbiBcdFx0cmV0dXJuIC0xO1xuIFxuIFx0aWYgKHdiICE9ICEhenN3cHdiX2FmdGVyKSB7XG4tXHRcdGtzZnRfcHJpbnRfbXNnKFwmIzM0O3pzd3B3Yl9hZnRlciBpcyAlbGQgd2hpbGUgd2IgaXMgJXNcXG5cJiMzNDssXG4mIzQzO1x0XHRrc2Z0X3ByaW50X21zZyhcJiMzNDt6c3dwd2JfYWZ0ZXIgaXMgJWxsZCB3aGlsZSB3YiBpcyAlc1xcblwmIzM0OyxcbiBcdFx0XHRcdHpzd3B3Yl9hZnRlciwgd2IgPyBcJiMzNDtlbmFibGVkXCYjMzQ7IDogXCYjMzQ7ZGlzYWJsZWRcJiMzNDspO1xuIFx0XHRyZXR1cm4gLTE7XG4gXHR9XG5AQCAtNDA4LDYgJiM0Mzs0MTAsOCBAQCBzdGF0aWMgaW50IHRlc3RfenN3YXBfd3JpdGViYWNrKGNvbnN0IGNoYXIgKnJvb3QsIGJvb2wgd2IpXG4gXHQgKiBUaHVzLCB0aGUgcGFyZW50JiMzOTtzIHNldHRpbmcgc2hhbGwgYmUgd2hhdCYjMzk7cyBpbiBlZmZlY3QuICovXG4gXHRpZiAoY2dfd3JpdGUodGVzdF9ncm91cCwgXCYjMzQ7bWVtb3J5Lnpzd2FwLm1heFwmIzM0OywgXCYjMzQ7bWF4XCYjMzQ7KSlcbiBcdFx0Z290byBvdXQ7XG4mIzQzO1x0aWYgKGNnX3JlYWRfc3RyY21wX3dhaXQodGVzdF9ncm91cCwgXCYjMzQ7Y2dyb3VwLmV2ZW50c1wmIzM0OywgXCYjMzQ7cG9wdWxhdGVkIDBcXG5cJiMzNDspKVxuJiM0MztcdFx0Z290byBvdXQ7XG4gXHRpZiAoY2dfd3JpdGUodGVzdF9ncm91cCwgXCYjMzQ7Y2dyb3VwLnN1YnRyZWVfY29udHJvbFwmIzM0OywgXCYjMzQ7JiM0MzttZW1vcnlcJiMzNDspKVxuIFx0XHRnb3RvIG91dDtcbiBcbkBAIC00ODUsNyAmIzQzOzQ4OSw3IEBAIHN0YXRpYyBpbnQgdGVzdF9ub19pbnZhc2l2ZV9jZ3JvdXBfc2hyaW5rKGNvbnN0IGNoYXIgKnJvb3QpXG4gXHRcdG1lbXNldChcdTAwMjZ6d19hbGxvY2F0aW9uW29mZl0sIDAsIHBhZ2Vfc2l6ZSk7XG4gXHRcdG1lbXNldChcdTAwMjZ6d19hbGxvY2F0aW9uW29mZl0sICYjMzk7YSYjMzk7LCBwYWdlX3NpemUvNCk7XG4gXHR9XG4tXHRpZiAoY2dfcmVhZF9rZXlfbG9uZyh6d19ncm91cCwgXCYjMzQ7bWVtb3J5LnN0YXRcJiMzNDssIFwmIzM0O3pzd2FwcGVkXCYjMzQ7KSBcdTAwM2MgMSlcbiYjNDM7XHRpZiAoY2dfcmVhZF9rZXlfczY0KHp3X2dyb3VwLCBcJiMzNDttZW1vcnkuc3RhdFwmIzM0OywgXCYjMzQ7enN3YXBwZWRcJiMzNDspIFx1MDAzYyAxKVxuIFx0XHRnb3RvIG91dDtcbiBcbiBcdC8qIFB1c2ggd2JfZ3JvdXAgbWVtb3J5IGludG8genN3YXAgd2l0aCBoYXJkLXRvLWNvbXByZXNzIGRhdGEgdG8gdHJpZ2dlciB3YiAqL1xuQEAgLTYyOCwxMSAmIzQzOzYzMiwxMiBAQCBzdGF0aWMgaW50IHRlc3Rfbm9fa21lbV9ieXBhc3MoY29uc3QgY2hhciAqcm9vdClcbiBcdFx0XHRicmVhaztcbiBcdFx0LyogSWYgbWVtb3J5IHdhcyBwdXNoZWQgdG8genN3YXAsIHZlcmlmeSBpdCBiZWxvbmdzIHRvIG1lbWNnICovXG4gXHRcdGlmIChzdG9yZWRfcGFnZXMgXHUwMDNlIHN0b3JlZF9wYWdlc190aHJlc2hvbGQpIHtcbi1cdFx0XHRpbnQgenN3YXBwZWQgPSBjZ19yZWFkX2tleV9sb25nKHRlc3RfZ3JvdXAsIFwmIzM0O21lbW9yeS5zdGF0XCYjMzQ7LCBcJiMzNDt6c3dhcHBlZCBcJiMzNDspO1xuLVx0XHRcdGludCBkZWx0YSA9IHN0b3JlZF9wYWdlcyAqIHBhZ2Vfc2l6ZSAtIHpzd2FwcGVkO1xuLVx0XHRcdGludCByZXN1bHRfb2sgPSBkZWx0YSBcdTAwM2Mgc3RvcmVkX3BhZ2VzICogcGFnZV9zaXplIC8gNDtcbiYjNDM7XHRcdFx0czY0IHpzd2FwcGVkID0gY2dfcmVhZF9rZXlfczY0KFxuJiM0MztcdFx0XHRcdHRlc3RfZ3JvdXAsIFwmIzM0O21lbW9yeS5zdGF0XCYjMzQ7LCBcJiMzNDt6c3dhcHBlZCBcJiMzNDspO1xuJiM0MztcdFx0XHRzNjQgZGVsdGEgPSAoczY0KXN0b3JlZF9wYWdlcyAqIHBhZ2Vfc2l6ZSAtIHpzd2FwcGVkO1xuJiM0MztcdFx0XHRzNjQgbWF4X2RlbHRhID0gKHM2NClzdG9yZWRfcGFnZXMgKiBwYWdlX3NpemUgLyA0O1xuIFxuLVx0XHRcdHJldCA9IHJlc3VsdF9vayA/IEtTRlRfUEFTUyA6IEtTRlRfRkFJTDtcbiYjNDM7XHRcdFx0cmV0ID0gKGRlbHRhIFx1MDAzYyBtYXhfZGVsdGEpID8gS1NGVF9QQVNTIDogS1NGVF9GQUlMO1xuIFx0XHRcdGJyZWFrO1xuIFx0XHR9XG4gXHR9XG5AQCAtNzAxLDkgJiM0Mzs3MDYsOSBAQCBzdGF0aWMgaW50IGFsbG9jYXRlX3JhbmRvbV9hbmRfd2FpdChjb25zdCBjaGFyICpjZ3JvdXAsIHZvaWQgKmFyZylcbiBcdHJldHVybiAwO1xuIH1cbiBcbi1zdGF0aWMgbG9uZyBnZXRfenN3YXBfaW5jb21wKGNvbnN0IGNoYXIgKmNncm91cClcbiYjNDM7c3RhdGljIHM2NCBnZXRfenN3YXBfaW5jb21wKGNvbnN0IGNoYXIgKmNncm91cClcbiB7XG4tXHRyZXR1cm4gY2dfcmVhZF9rZXlfbG9uZyhjZ3JvdXAsIFwmIzM0O21lbW9yeS5zdGF0XCYjMzQ7LCBcJiMzNDt6c3dhcF9pbmNvbXAgXCYjMzQ7KTtcbiYjNDM7XHRyZXR1cm4gY2dfcmVhZF9rZXlfczY0KGNncm91cCwgXCYjMzQ7bWVtb3J5LnN0YXRcJiMzNDssIFwmIzM0O3pzd2FwX2luY29tcCBcJiMzNDspO1xuIH1cbiBcbiAvKlxuQEAgLTcxOSw3ICYjNDM7NzI0LDcgQEAgc3RhdGljIGludCB0ZXN0X3pzd2FwX2luY29tcHJlc3NpYmxlKGNvbnN0IGNoYXIgKnJvb3QpXG4gXHRpbnQgcmV0ID0gS1NGVF9GQUlMO1xuIFx0c3RydWN0IGluY29tcF9jaGlsZF9hcmdzICp2YWx1ZXM7XG4gXHRjaGFyICp0ZXN0X2dyb3VwO1xuLVx0bG9uZyB6c3dhcF9pbmNvbXA7XG4mIzQzO1x0czY0IHpzd2FwX2luY29tcDtcbiBcdHBpZF90IGNoaWxkX3BpZDtcbiBcdGludCBjaGlsZF9zdGF0dXM7XG4gXHRjaGFyIGJ1ZjtcbkBAIC03NTUsMTMgJiM0Mzs3NjAsMTUgQEAgc3RhdGljIGludCB0ZXN0X3pzd2FwX2luY29tcHJlc3NpYmxlKGNvbnN0IGNoYXIgKnJvb3QpXG4gXG4gXHR6c3dhcF9pbmNvbXAgPSBnZXRfenN3YXBfaW5jb21wKHRlc3RfZ3JvdXApO1xuIFx0aWYgKHpzd2FwX2luY29tcCBcdTAwM2M9IDApIHtcbi1cdFx0bG9uZyB6c3dwb3V0ID0gZ2V0X3pzd3BvdXQodGVzdF9ncm91cCk7XG4tXHRcdGxvbmcgenN3YXBwZWQgPSBjZ19yZWFkX2tleV9sb25nKHRlc3RfZ3JvdXAsIFwmIzM0O21lbW9yeS5zdGF0XCYjMzQ7LCBcJiMzNDt6c3dhcHBlZCBcJiMzNDspO1xuLVx0XHRsb25nIHpzd2FwX2IgPSBjZ19yZWFkX2tleV9sb25nKHRlc3RfZ3JvdXAsIFwmIzM0O21lbW9yeS5zdGF0XCYjMzQ7LCBcJiMzNDt6c3dhcCBcJiMzNDspO1xuLVxuLVx0XHRrc2Z0X3ByaW50X21zZyhcJiMzNDt6c3dhcF9pbmNvbXAgbm90IGluY3JlYXNlZDogJWxkXFxuXCYjMzQ7LCB6c3dhcF9pbmNvbXApO1xuLVx0XHRrc2Z0X3ByaW50X21zZyhcJiMzNDtkZWJ1ZzogenN3cG91dD0lbGQgenN3YXBwZWQ9JWxkIHpzd2FwX2I9JWxkXFxuXCYjMzQ7LFxuLVx0XHRcdCAgICAgICB6c3dwb3V0LCB6c3dhcHBlZCwgenN3YXBfYik7XG4mIzQzO1x0XHRzNjQgenN3cG91dCA9IGdldF96c3dwb3V0KHRlc3RfZ3JvdXApO1xuJiM0MztcdFx0czY0IHpzd2FwcGVkID1cbiYjNDM7XHRcdFx0Y2dfcmVhZF9rZXlfczY0KHRlc3RfZ3JvdXAsIFwmIzM0O21lbW9yeS5zdGF0XCYjMzQ7LCBcJiMzNDt6c3dhcHBlZCBcJiMzNDspO1xuJiM0MztcdFx0czY0IHpzd2FwX2IgPVxuJiM0MztcdFx0XHRjZ19yZWFkX2tleV9zNjQodGVzdF9ncm91cCwgXCYjMzQ7bWVtb3J5LnN0YXRcJiMzNDssIFwmIzM0O3pzd2FwIFwmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdFx0a3NmdF9wcmludF9tc2coXCYjMzQ7enN3YXBfaW5jb21wIG5vdCBpbmNyZWFzZWQ6ICVsbGRcXG5cJiMzNDssIHpzd2FwX2luY29tcCk7XG4mIzQzO1x0XHRrc2Z0X3ByaW50X21zZyhcJiMzNDtkZWJ1ZzogenN3cG91dD0lbGxkIHpzd2FwcGVkPSVsbGQgenN3YXBfYj0lbGxkXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRcdHpzd3BvdXQsIHpzd2FwcGVkLCB6c3dhcF9iKTtcbiBcdFx0a3NmdF9wcmludF9tc2coXCYjMzQ7ZGVidWc6IG1hZHZpc2UgcmV0PSVkIGVycm5vPSVkXFxuXCYjMzQ7LFxuIFx0XHRcdCAgICAgICB2YWx1ZXMtXHUwMDNlbWFkdmlzZV9yZXQsIHZhbHVlcy1cdTAwM2VtYWR2aXNlX2Vycm5vKTtcbiBcdFx0Z290byBvdXRfa2lsbDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwODo1MTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBvbmx5IHVzZXItc3BhY2UgY2dyb3VwIHNlbGYtdGVzdHMgdW5kZXIgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvY2dyb3VwLyBhbmQgZG9lcyBub3QgdG91Y2ggYW55IGtlcm5lbCBjb2RlIG9yIGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzcwp0b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpUaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLAphbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLgoKLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURToKICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkCiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS4KICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsCiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLgoKLSBETyBOT1QgQkxJTkRMWSBUUlVTVCAmIzM0O05PIEZVTkNUSU9OQUwgQ0hBTkdFJiMzNDsgKE5GQ0kpIE9SICYjMzQ7UkVGQUNUT1JJTkcmIzM0OyBDTEFJTVM6CiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyAmIzM0O2NsZWFudXBzJiMzNDssICYjMzQ7cmVmYWN0b3JpbmdzJiMzNDssIG9yIHN0YXRlCiAgJiMzNDtObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZCYjMzQ7LiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS4KICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnQKICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy4KICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLgoKLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDoKICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosCiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuCiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlcgogIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6CgotIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6CiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuCiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLykKICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy4KICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzCiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLgogICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLgotIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZToKICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOgogICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nCiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy4KICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzoKLSBDb3JlIFN1YnN5c3RlbXM6CiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksCiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuCi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOgogICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLgotIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczoKICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy4KLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOgogICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOgoKLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6CiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXMKICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdAogIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLgogIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyAmIzM0O2ZvY3VzZWQmIzM0OywKICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuCgotIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzoKICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHMKICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy4KCi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOgogIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2sKICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy4KICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXIKICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo1LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6Ci0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KLSBDaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLgotIFN0cmlwIGFueSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAxMWE5ZjA5ZjU2MGIwMjY5NTQwMWRkMmM2Y2MzZjE5OTdmNzhhNjQyCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFN1biBTZXAgNiAwODo1MToxNSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2Nncm91cC9saWIvY2dyb3VwX3V0aWwuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2Nncm91cC9saWIvY2dyb3VwX3V0aWwuYwppbmRleCAyNTk2YzEyY2Q4NjQ1Li5lZDNjNDg5MzgzM2E1IDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9jZ3JvdXAvbGliL2Nncm91cF91dGlsLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvY2dyb3VwL2xpYi9jZ3JvdXBfdXRpbC5jCkBAIC0xNzIsNyAmIzQzOzE3Miw3IEBAIGxvbmcgY2dfcmVhZF9sb25nX2ZkKGludCBmZCkKIAlyZXR1cm4gYXRvbChidWYpOwogfQogCi1sb25nIGNnX3JlYWRfa2V5X2xvbmcoY29uc3QgY2hhciAqY2dyb3VwLCBjb25zdCBjaGFyICpjb250cm9sLCBjb25zdCBjaGFyICprZXkpCiYjNDM7czY0IGNnX3JlYWRfa2V5X3M2NChjb25zdCBjaGFyICpjZ3JvdXAsIGNvbnN0IGNoYXIgKmNvbnRyb2wsIGNvbnN0IGNoYXIgKmtleSkKIHsKIAljaGFyIGJ1ZltCVUZfU0laRV07CiAJY2hhciAqcHRyOwpAQCAtMTg0LDE4ICYjNDM7MTg0LDE4IEBAIGxvbmcgY2dfcmVhZF9rZXlfbG9uZyhjb25zdCBjaGFyICpjZ3JvdXAsIGNvbnN0IGNoYXIgKmNvbnRyb2wsIGNvbnN0IGNoYXIgKmtleSkKIAlpZiAoIXB0cikKIAkJcmV0dXJuIC0xOwogCi0JcmV0dXJuIGF0b2wocHRyICYjNDM7IHN0cmxlbihrZXkpKTsKJiM0MzsJcmV0dXJuIGF0b2xsKHB0ciAmIzQzOyBzdHJsZW4oa2V5KSk7CiB9CiAKLWxvbmcgY2dfcmVhZF9rZXlfbG9uZ19wb2xsKGNvbnN0IGNoYXIgKmNncm91cCwgY29uc3QgY2hhciAqY29udHJvbCwKLQkJCSAgIGNvbnN0IGNoYXIgKmtleSwgbG9uZyBleHBlY3RlZCwgaW50IHJldHJpZXMsCi0JCQkgICB1c2Vjb25kc190IHdhaXRfaW50ZXJ2YWxfdXMpCiYjNDM7czY0IGNnX3JlYWRfa2V5X3M2NF9wb2xsKGNvbnN0IGNoYXIgKmNncm91cCwgY29uc3QgY2hhciAqY29udHJvbCwKJiM0MzsJCQkgY29uc3QgY2hhciAqa2V5LCBzNjQgZXhwZWN0ZWQsIGludCByZXRyaWVzLAomIzQzOwkJCSB1c2Vjb25kc190IHdhaXRfaW50ZXJ2YWxfdXMpCiB7Ci0JbG9uZyB2YWwgPSAtMTsKJiM0MzsJczY0IHZhbCA9IC0xOwogCWludCBpOwogCiAJZm9yIChpID0gMDsgaSAmbHQ7IHJldHJpZXM7IGkmIzQzOyYjNDM7KSB7Ci0JCXZhbCA9IGNnX3JlYWRfa2V5X2xvbmcoY2dyb3VwLCBjb250cm9sLCBrZXkpOwomIzQzOwkJdmFsID0gY2dfcmVhZF9rZXlfczY0KGNncm91cCwgY29udHJvbCwga2V5KTsKIAkJaWYgKHZhbCAmbHQ7IDApCiAJCQlyZXR1cm4gdmFsOwogCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9jZ3JvdXAvbGliL2luY2x1ZGUvY2dyb3VwX3V0aWwuaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2Nncm91cC9saWIvaW5jbHVkZS9jZ3JvdXBfdXRpbC5oCmluZGV4IDVkMzljNzA5YWM3YTQuLmRkYjA1OTMyZDljNzcgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2Nncm91cC9saWIvaW5jbHVkZS9jZ3JvdXBfdXRpbC5oCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2Nncm91cC9saWIvaW5jbHVkZS9jZ3JvdXBfdXRpbC5oCkBAIC0yLDYgJiM0MzsyLDggQEAKICNpbmNsdWRlICZsdDtzdGRib29sLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7c3RkbGliLmgmZ3Q7CiAKJiM0Mzt0eXBlZGVmIHNpZ25lZCBsb25nIGxvbmcgczY0OwomIzQzOwogI2lmbmRlZiBCVUZfU0laRQogI2RlZmluZSBCVUZfU0laRSA0MDk2CiAjZW5kaWYKQEAgLTI0LDI1ICYjNDM7MjYsMjUgQEAKIC8qCiAgKiBDaGVja3MgaWYgdHdvIGdpdmVuIHZhbHVlcyBkaWZmZXIgYnkgbGVzcyB0aGFuIGVyciUgb2YgdGhlaXIgc3VtLgogICovCi1zdGF0aWMgaW5saW5lIGludCB2YWx1ZXNfY2xvc2UobG9uZyBhLCBsb25nIGIsIGludCBlcnIpCiYjNDM7c3RhdGljIGlubGluZSBpbnQgdmFsdWVzX2Nsb3NlKHM2NCBhLCBzNjQgYiwgaW50IGVycikKIHsKLQlyZXR1cm4gbGFicyhhIC0gYikgJmx0Oz0gKGEgJiM0MzsgYikgLyAxMDAgKiBlcnI7CiYjNDM7CXJldHVybiBsbGFicyhhIC0gYikgJmx0Oz0gKGEgJiM0MzsgYikgLyAxMDAgKiBlcnI7CiB9CiAKIC8qCiAgKiBDaGVja3MgaWYgdHdvIGdpdmVuIHZhbHVlcyBkaWZmZXIgYnkgbGVzcyB0aGFuIGVyciUgb2YgdGhlaXIgc3VtIGFuZCBhc3NlcnQKICAqIHdpdGggZGV0YWlsZWQgZGVidWcgaW5mbyBpZiBub3QuCiAgKi8KLXN0YXRpYyBpbmxpbmUgaW50IHZhbHVlc19jbG9zZV9yZXBvcnQobG9uZyBhLCBsb25nIGIsIGludCBlcnIpCiYjNDM7c3RhdGljIGlubGluZSBpbnQgdmFsdWVzX2Nsb3NlX3JlcG9ydChzNjQgYSwgczY0IGIsIGludCBlcnIpCiB7Ci0JbG9uZyBkaWZmICA9IGxhYnMoYSAtIGIpOwotCWxvbmcgbGltaXQgPSAoYSAmIzQzOyBiKSAvIDEwMCAqIGVycjsKJiM0MzsJczY0IGRpZmYgID0gbGxhYnMoYSAtIGIpOwomIzQzOwlzNjQgbGltaXQgPSAoYSAmIzQzOyBiKSAvIDEwMCAqIGVycjsKIAlkb3VibGUgYWN0dWFsX2VyciA9IChhICYjNDM7IGIpID8gKDEwMC4wICogZGlmZiAvIChhICYjNDM7IGIpKSA6IDAuMDsKIAlpbnQgY2xvc2UgPSBkaWZmICZsdDs9IGxpbWl0OwogCiAJaWYgKCFjbG9zZSkKIAkJZnByaW50ZihzdGRlcnIsCi0JCQkmIzM0O1tGQUlMXSBhY3R1YWw9JWxkIGV4cGVjdGVkPSVsZCB8IGRpZmY9JWxkIHwgbGltaXQ9JWxkIHwgJiMzNDsKJiM0MzsJCQkmIzM0O1tGQUlMXSBhY3R1YWw9JWxsZCBleHBlY3RlZD0lbGxkIHwgZGlmZj0lbGxkIHwgbGltaXQ9JWxsZCB8ICYjMzQ7CiAJCQkmIzM0O3RvbGVyYW5jZT0lZCUlIHwgYWN0dWFsX2Vycm9yPSUuMmYlJVxuJiMzNDssCiAJCQlhLCBiLCBkaWZmLCBsaW1pdCwgZXJyLCBhY3R1YWxfZXJyKTsKIApAQCAtNjksMTAgJiM0Mzs3MSwxMCBAQCBleHRlcm4gaW50IGNnX3JlYWRfc3Ryc3RyKGNvbnN0IGNoYXIgKmNncm91cCwgY29uc3QgY2hhciAqY29udHJvbCwKIAkJCSAgY29uc3QgY2hhciAqbmVlZGxlKTsKIGV4dGVybiBsb25nIGNnX3JlYWRfbG9uZyhjb25zdCBjaGFyICpjZ3JvdXAsIGNvbnN0IGNoYXIgKmNvbnRyb2wpOwogZXh0ZXJuIGxvbmcgY2dfcmVhZF9sb25nX2ZkKGludCBmZCk7Ci1sb25nIGNnX3JlYWRfa2V5X2xvbmcoY29uc3QgY2hhciAqY2dyb3VwLCBjb25zdCBjaGFyICpjb250cm9sLCBjb25zdCBjaGFyICprZXkpOwotbG9uZyBjZ19yZWFkX2tleV9sb25nX3BvbGwoY29uc3QgY2hhciAqY2dyb3VwLCBjb25zdCBjaGFyICpjb250cm9sLAotCQkJICAgY29uc3QgY2hhciAqa2V5LCBsb25nIGV4cGVjdGVkLCBpbnQgcmV0cmllcywKLQkJCSAgIHVzZWNvbmRzX3Qgd2FpdF9pbnRlcnZhbF91cyk7CiYjNDM7czY0IGNnX3JlYWRfa2V5X3M2NChjb25zdCBjaGFyICpjZ3JvdXAsIGNvbnN0IGNoYXIgKmNvbnRyb2wsIGNvbnN0IGNoYXIgKmtleSk7CiYjNDM7czY0IGNnX3JlYWRfa2V5X3M2NF9wb2xsKGNvbnN0IGNoYXIgKmNncm91cCwgY29uc3QgY2hhciAqY29udHJvbCwKJiM0MzsJCQkgY29uc3QgY2hhciAqa2V5LCBzNjQgZXhwZWN0ZWQsIGludCByZXRyaWVzLAomIzQzOwkJCSB1c2Vjb25kc190IHdhaXRfaW50ZXJ2YWxfdXMpOwogZXh0ZXJuIGxvbmcgY2dfcmVhZF9sYyhjb25zdCBjaGFyICpjZ3JvdXAsIGNvbnN0IGNoYXIgKmNvbnRyb2wpOwogZXh0ZXJuIGludCBjZ193cml0ZShjb25zdCBjaGFyICpjZ3JvdXAsIGNvbnN0IGNoYXIgKmNvbnRyb2wsIGNoYXIgKmJ1Zik7CiBleHRlcm4gaW50IGNnX29wZW4oY29uc3QgY2hhciAqY2dyb3VwLCBjb25zdCBjaGFyICpjb250cm9sLCBpbnQgZmxhZ3MpOwpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvY2dyb3VwL3Rlc3RfY3B1LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9jZ3JvdXAvdGVzdF9jcHUuYwppbmRleCA3MzVhNTNiYjIyMmJhLi4xMWRhMWRlOWNkZWI2IDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9jZ3JvdXAvdGVzdF9jcHUuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9jZ3JvdXAvdGVzdF9jcHUuYwpAQCAtMjQsNyAmIzQzOzI0LDcgQEAgZW51bSBob2dfY2xvY2tfdHlwZSB7CiBzdHJ1Y3QgY3B1X2hvZ2dlciB7CiAJY2hhciAqY2dyb3VwOwogCXBpZF90IHBpZDsKLQlsb25nIHVzYWdlOwomIzQzOwlzNjQgdXNhZ2U7CiB9OwogCiBzdHJ1Y3QgY3B1X2hvZ19mdW5jX3BhcmFtIHsKQEAgLTE4NSw3ICYjNDM7MTg1LDcgQEAgc3RhdGljIGludCBob2dfY3B1c190aW1lZChjb25zdCBjaGFyICpjZ3JvdXAsIHZvaWQgKmFyZykKIHN0YXRpYyBpbnQgdGVzdF9jcHVjZ19zdGF0cyhjb25zdCBjaGFyICpyb290KQogewogCWludCByZXQgPSBLU0ZUX0ZBSUw7Ci0JbG9uZyB1c2FnZV91c2VjLCB1c2VyX3VzZWMsIHN5c3RlbV91c2VjOwomIzQzOwlzNjQgdXNhZ2VfdXNlYywgdXNlcl91c2VjLCBzeXN0ZW1fdXNlYzsKIAlsb25nIHVzYWdlX3NlY29uZHMgPSAyOwogCWxvbmcgZXhwZWN0ZWRfdXNhZ2VfdXNlYyA9IHVzYWdlX3NlY29uZHMgKiBVU0VDX1BFUl9TRUM7CiAJY2hhciAqY3B1Y2c7CkBAIC0xOTcsOSAmIzQzOzE5Nyw5IEBAIHN0YXRpYyBpbnQgdGVzdF9jcHVjZ19zdGF0cyhjb25zdCBjaGFyICpyb290KQogCWlmIChjZ19jcmVhdGUoY3B1Y2cpKQogCQlnb3RvIGNsZWFudXA7CiAKLQl1c2FnZV91c2VjID0gY2dfcmVhZF9rZXlfbG9uZyhjcHVjZywgJiMzNDtjcHUuc3RhdCYjMzQ7LCAmIzM0O3VzYWdlX3VzZWMmIzM0Oyk7Ci0JdXNlcl91c2VjID0gY2dfcmVhZF9rZXlfbG9uZyhjcHVjZywgJiMzNDtjcHUuc3RhdCYjMzQ7LCAmIzM0O3VzZXJfdXNlYyYjMzQ7KTsKLQlzeXN0ZW1fdXNlYyA9IGNnX3JlYWRfa2V5X2xvbmcoY3B1Y2csICYjMzQ7Y3B1LnN0YXQmIzM0OywgJiMzNDtzeXN0ZW1fdXNlYyYjMzQ7KTsKJiM0MzsJdXNhZ2VfdXNlYyA9IGNnX3JlYWRfa2V5X3M2NChjcHVjZywgJiMzNDtjcHUuc3RhdCYjMzQ7LCAmIzM0O3VzYWdlX3VzZWMmIzM0Oyk7CiYjNDM7CXVzZXJfdXNlYyA9IGNnX3JlYWRfa2V5X3M2NChjcHVjZywgJiMzNDtjcHUuc3RhdCYjMzQ7LCAmIzM0O3VzZXJfdXNlYyYjMzQ7KTsKJiM0MzsJc3lzdGVtX3VzZWMgPSBjZ19yZWFkX2tleV9zNjQoY3B1Y2csICYjMzQ7Y3B1LnN0YXQmIzM0OywgJiMzNDtzeXN0ZW1fdXNlYyYjMzQ7KTsKIAlpZiAodXNhZ2VfdXNlYyAhPSAwIHx8IHVzZXJfdXNlYyAhPSAwIHx8IHN5c3RlbV91c2VjICE9IDApCiAJCWdvdG8gY2xlYW51cDsKIApAQCAtMjE0LDggJiM0MzsyMTQsOCBAQCBzdGF0aWMgaW50IHRlc3RfY3B1Y2dfc3RhdHMoY29uc3QgY2hhciAqcm9vdCkKIAlpZiAoY2dfcnVuKGNwdWNnLCBob2dfY3B1c190aW1lZCwgKHZvaWQgKikmYW1wO3BhcmFtKSkKIAkJZ290byBjbGVhbnVwOwogCi0JdXNhZ2VfdXNlYyA9IGNnX3JlYWRfa2V5X2xvbmcoY3B1Y2csICYjMzQ7Y3B1LnN0YXQmIzM0OywgJiMzNDt1c2FnZV91c2VjJiMzNDspOwotCXVzZXJfdXNlYyA9IGNnX3JlYWRfa2V5X2xvbmcoY3B1Y2csICYjMzQ7Y3B1LnN0YXQmIzM0OywgJiMzNDt1c2VyX3VzZWMmIzM0Oyk7CiYjNDM7CXVzYWdlX3VzZWMgPSBjZ19yZWFkX2tleV9zNjQoY3B1Y2csICYjMzQ7Y3B1LnN0YXQmIzM0OywgJiMzNDt1c2FnZV91c2VjJiMzNDspOwomIzQzOwl1c2VyX3VzZWMgPSBjZ19yZWFkX2tleV9zNjQoY3B1Y2csICYjMzQ7Y3B1LnN0YXQmIzM0OywgJiMzNDt1c2VyX3VzZWMmIzM0Oyk7CiAJaWYgKHVzZXJfdXNlYyAmbHQ7PSAwKQogCQlnb3RvIGNsZWFudXA7CiAKQEAgLTIzOSw3ICYjNDM7MjM5LDcgQEAgc3RhdGljIGludCB0ZXN0X2NwdWNnX25pY2UoY29uc3QgY2hhciAqcm9vdCkKIHsKIAlpbnQgcmV0ID0gS1NGVF9GQUlMOwogCWludCBzdGF0dXM7Ci0JbG9uZyB1c2VyX3VzZWMsIG5pY2VfdXNlYzsKJiM0MzsJczY0IHVzZXJfdXNlYywgbmljZV91c2VjOwogCWxvbmcgdXNhZ2Vfc2Vjb25kcyA9IDI7CiAJbG9uZyBleHBlY3RlZF9uaWNlX3VzZWMgPSB1c2FnZV9zZWNvbmRzICogVVNFQ19QRVJfU0VDOwogCWNoYXIgKmNwdWNnOwpAQCAtMjUyLDggJiM0MzsyNTIsOCBAQCBzdGF0aWMgaW50IHRlc3RfY3B1Y2dfbmljZShjb25zdCBjaGFyICpyb290KQogCWlmIChjZ19jcmVhdGUoY3B1Y2cpKQogCQlnb3RvIGNsZWFudXA7CiAKLQl1c2VyX3VzZWMgPSBjZ19yZWFkX2tleV9sb25nKGNwdWNnLCAmIzM0O2NwdS5zdGF0JiMzNDssICYjMzQ7dXNlcl91c2VjJiMzNDspOwotCW5pY2VfdXNlYyA9IGNnX3JlYWRfa2V5X2xvbmcoY3B1Y2csICYjMzQ7Y3B1LnN0YXQmIzM0OywgJiMzNDtuaWNlX3VzZWMmIzM0Oyk7CiYjNDM7CXVzZXJfdXNlYyA9IGNnX3JlYWRfa2V5X3M2NChjcHVjZywgJiMzNDtjcHUuc3RhdCYjMzQ7LCAmIzM0O3VzZXJfdXNlYyYjMzQ7KTsKJiM0MzsJbmljZV91c2VjID0gY2dfcmVhZF9rZXlfczY0KGNwdWNnLCAmIzM0O2NwdS5zdGF0JiMzNDssICYjMzQ7bmljZV91c2VjJiMzNDspOwogCWlmIChuaWNlX3VzZWMgPT0gLTEpCiAJCXJldCA9IEtTRlRfU0tJUDsKIAlpZiAodXNlcl91c2VjICE9IDAgfHwgbmljZV91c2VjICE9IDApCkBAIC0yODksOCAmIzQzOzI4OSw4IEBAIHN0YXRpYyBpbnQgdGVzdF9jcHVjZ19uaWNlKGNvbnN0IGNoYXIgKnJvb3QpCiAJCWlmICghV0lGRVhJVEVEKHN0YXR1cykpCiAJCQlnb3RvIGNsZWFudXA7CiAKLQkJdXNlcl91c2VjID0gY2dfcmVhZF9rZXlfbG9uZyhjcHVjZywgJiMzNDtjcHUuc3RhdCYjMzQ7LCAmIzM0O3VzZXJfdXNlYyYjMzQ7KTsKLQkJbmljZV91c2VjID0gY2dfcmVhZF9rZXlfbG9uZyhjcHVjZywgJiMzNDtjcHUuc3RhdCYjMzQ7LCAmIzM0O25pY2VfdXNlYyYjMzQ7KTsKJiM0MzsJCXVzZXJfdXNlYyA9IGNnX3JlYWRfa2V5X3M2NChjcHVjZywgJiMzNDtjcHUuc3RhdCYjMzQ7LCAmIzM0O3VzZXJfdXNlYyYjMzQ7KTsKJiM0MzsJCW5pY2VfdXNlYyA9IGNnX3JlYWRfa2V5X3M2NChjcHVjZywgJiMzNDtjcHUuc3RhdCYjMzQ7LCAmIzM0O25pY2VfdXNlYyYjMzQ7KTsKIAkJaWYgKHVzZXJfdXNlYyAmbHQ7PSAwKQogCQkJZ290byBjbGVhbnVwOwogCQlpZiAoIXZhbHVlc19jbG9zZV9yZXBvcnQobmljZV91c2VjLCBleHBlY3RlZF9uaWNlX3VzZWMsIDEpKQpAQCAtMzU3LDggJiM0MzszNTcsOCBAQCBydW5fY3B1Y2dfd2VpZ2h0X3Rlc3QoCiAJfQogCiAJZm9yIChpID0gMDsgaSAmbHQ7IEFSUkFZX1NJWkUoY2hpbGRyZW4pOyBpJiM0MzsmIzQzOykKLQkJY2hpbGRyZW5baV0udXNhZ2UgPSBjZ19yZWFkX2tleV9sb25nKGNoaWxkcmVuW2ldLmNncm91cCwKLQkJCQkmIzM0O2NwdS5zdGF0JiMzNDssICYjMzQ7dXNhZ2VfdXNlYyYjMzQ7KTsKJiM0MzsJCWNoaWxkcmVuW2ldLnVzYWdlID0gY2dfcmVhZF9rZXlfczY0KGNoaWxkcmVuW2ldLmNncm91cCwKJiM0MzsJCQkJCQkgICAgJiMzNDtjcHUuc3RhdCYjMzQ7LCAmIzM0O3VzYWdlX3VzZWMmIzM0Oyk7CiAKIAlpZiAodmFsaWRhdGUoY2hpbGRyZW4sIEFSUkFZX1NJWkUoY2hpbGRyZW4pKSkKIAkJZ290byBjbGVhbnVwOwpAQCAtNDg2LDcgJiM0Mzs0ODYsNyBAQCBydW5fY3B1Y2dfbmVzdGVkX3dlaWdodF90ZXN0KGNvbnN0IGNoYXIgKnJvb3QsIGJvb2wgb3ZlcnByb3Zpc2lvbmVkKQogCWludCByZXQgPSBLU0ZUX0ZBSUwsIGk7CiAJY2hhciAqcGFyZW50ID0gTlVMTCwgKmNoaWxkID0gTlVMTDsKIAlzdHJ1Y3QgY3B1X2hvZ2dlciBsZWFmWzNdID0ge307Ci0JbG9uZyBuZXN0ZWRfbGVhZl91c2FnZSwgY2hpbGRfdXNhZ2U7CiYjNDM7CXM2NCBuZXN0ZWRfbGVhZl91c2FnZSwgY2hpbGRfdXNhZ2U7CiAJaW50IG5wcm9jcyA9IGdldF9ucHJvY3MoKTsKIAogCWlmICghb3ZlcnByb3Zpc2lvbmVkKSB7CkBAIC01NjcsOCAmIzQzOzU2Nyw4IEBAIHJ1bl9jcHVjZ19uZXN0ZWRfd2VpZ2h0X3Rlc3QoY29uc3QgY2hhciAqcm9vdCwgYm9vbCBvdmVycHJvdmlzaW9uZWQpCiAJfQogCiAJZm9yIChpID0gMDsgaSAmbHQ7IEFSUkFZX1NJWkUobGVhZik7IGkmIzQzOyYjNDM7KSB7Ci0JCWxlYWZbaV0udXNhZ2UgPSBjZ19yZWFkX2tleV9sb25nKGxlYWZbaV0uY2dyb3VwLAotCQkJCSYjMzQ7Y3B1LnN0YXQmIzM0OywgJiMzNDt1c2FnZV91c2VjJiMzNDspOwomIzQzOwkJbGVhZltpXS51c2FnZSA9IGNnX3JlYWRfa2V5X3M2NChsZWFmW2ldLmNncm91cCwgJiMzNDtjcHUuc3RhdCYjMzQ7LAomIzQzOwkJCQkJCSYjMzQ7dXNhZ2VfdXNlYyYjMzQ7KTsKIAkJaWYgKGxlYWZbaV0udXNhZ2UgJmx0Oz0gMCkKIAkJCWdvdG8gY2xlYW51cDsKIAl9CkBAIC01ODAsOCAmIzQzOzU4MCw3IEBAIHJ1bl9jcHVjZ19uZXN0ZWRfd2VpZ2h0X3Rlc3QoY29uc3QgY2hhciAqcm9vdCwgYm9vbCBvdmVycHJvdmlzaW9uZWQpCiAJfSBlbHNlIGlmICghdmFsdWVzX2Nsb3NlX3JlcG9ydChsZWFmWzBdLnVzYWdlICogMiwgbmVzdGVkX2xlYWZfdXNhZ2UsIDE1KSkKIAkJZ290byBjbGVhbnVwOwogCi0KLQljaGlsZF91c2FnZSA9IGNnX3JlYWRfa2V5X2xvbmcoY2hpbGQsICYjMzQ7Y3B1LnN0YXQmIzM0OywgJiMzNDt1c2FnZV91c2VjJiMzNDspOwomIzQzOwljaGlsZF91c2FnZSA9IGNnX3JlYWRfa2V5X3M2NChjaGlsZCwgJiMzNDtjcHUuc3RhdCYjMzQ7LCAmIzM0O3VzYWdlX3VzZWMmIzM0Oyk7CiAJaWYgKGNoaWxkX3VzYWdlICZsdDs9IDApCiAJCWdvdG8gY2xlYW51cDsKIAlpZiAoIXZhbHVlc19jbG9zZV9yZXBvcnQoY2hpbGRfdXNhZ2UsIG5lc3RlZF9sZWFmX3VzYWdlLCAxKSkKQEAgLTY3OSw3ICYjNDM7Njc4LDggQEAgc3RhdGljIGludCB0ZXN0X2NwdWNnX21heChjb25zdCBjaGFyICpyb290KQogCWxvbmcgZHVyYXRpb25fc2Vjb25kcyA9IDE7CiAKIAlsb25nIGR1cmF0aW9uX3VzZWM7Ci0JbG9uZyB1c2FnZV91c2VjLCBuX3BlcmlvZHMsIHJlbWFpbmRlcl91c2VjLCBleHBlY3RlZF91c2FnZV91c2VjOwomIzQzOwlsb25nIG5fcGVyaW9kcywgcmVtYWluZGVyX3VzZWMsIGV4cGVjdGVkX3VzYWdlX3VzZWM7CiYjNDM7CXM2NCB1c2FnZV91c2VjOwogCWNoYXIgKmNwdWNnOwogCWNoYXIgcXVvdGFfYnVmWzMyXTsKIApAQCAtNzA4LDcgJiM0Mzs3MDgsNyBAQCBzdGF0aWMgaW50IHRlc3RfY3B1Y2dfbWF4KGNvbnN0IGNoYXIgKnJvb3QpCiAJaWYgKGNnX3J1bihjcHVjZywgaG9nX2NwdXNfdGltZWQsICh2b2lkICopJmFtcDtwYXJhbSkpCiAJCWdvdG8gY2xlYW51cDsKIAotCXVzYWdlX3VzZWMgPSBjZ19yZWFkX2tleV9sb25nKGNwdWNnLCAmIzM0O2NwdS5zdGF0JiMzNDssICYjMzQ7dXNhZ2VfdXNlYyYjMzQ7KTsKJiM0MzsJdXNhZ2VfdXNlYyA9IGNnX3JlYWRfa2V5X3M2NChjcHVjZywgJiMzNDtjcHUuc3RhdCYjMzQ7LCAmIzM0O3VzYWdlX3VzZWMmIzM0Oyk7CiAJaWYgKHVzYWdlX3VzZWMgJmx0Oz0gMCkKIAkJZ290byBjbGVhbnVwOwogCkBAIC03NDYsNyAmIzQzOzc0Niw4IEBAIHN0YXRpYyBpbnQgdGVzdF9jcHVjZ19tYXhfbmVzdGVkKGNvbnN0IGNoYXIgKnJvb3QpCiAJbG9uZyBkdXJhdGlvbl9zZWNvbmRzID0gMTsKIAogCWxvbmcgZHVyYXRpb25fdXNlYzsKLQlsb25nIHVzYWdlX3VzZWMsIG5fcGVyaW9kcywgcmVtYWluZGVyX3VzZWMsIGV4cGVjdGVkX3VzYWdlX3VzZWM7CiYjNDM7CWxvbmcgbl9wZXJpb2RzLCByZW1haW5kZXJfdXNlYywgZXhwZWN0ZWRfdXNhZ2VfdXNlYzsKJiM0MzsJczY0IHVzYWdlX3VzZWM7CiAJY2hhciAqcGFyZW50LCAqY2hpbGQ7CiAJY2hhciBxdW90YV9idWZbMzJdOwogCkBAIC03ODIsNyAmIzQzOzc4Myw3IEBAIHN0YXRpYyBpbnQgdGVzdF9jcHVjZ19tYXhfbmVzdGVkKGNvbnN0IGNoYXIgKnJvb3QpCiAJaWYgKGNnX3J1bihjaGlsZCwgaG9nX2NwdXNfdGltZWQsICh2b2lkICopJmFtcDtwYXJhbSkpCiAJCWdvdG8gY2xlYW51cDsKIAotCXVzYWdlX3VzZWMgPSBjZ19yZWFkX2tleV9sb25nKGNoaWxkLCAmIzM0O2NwdS5zdGF0JiMzNDssICYjMzQ7dXNhZ2VfdXNlYyYjMzQ7KTsKJiM0MzsJdXNhZ2VfdXNlYyA9IGNnX3JlYWRfa2V5X3M2NChjaGlsZCwgJiMzNDtjcHUuc3RhdCYjMzQ7LCAmIzM0O3VzYWdlX3VzZWMmIzM0Oyk7CiAJaWYgKHVzYWdlX3VzZWMgJmx0Oz0gMCkKIAkJZ290byBjbGVhbnVwOwogCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9jZ3JvdXAvdGVzdF9mcmVlemVyLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9jZ3JvdXAvdGVzdF9mcmVlemVyLmMKaW5kZXggZjI4YmIwMmU5NzgzYi4uZjRmMDgyYzEzZDRiNyAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvY2dyb3VwL3Rlc3RfZnJlZXplci5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2Nncm91cC90ZXN0X2ZyZWV6ZXIuYwpAQCAtODA3LDEwICYjNDM7ODA3LDkgQEAgc3RhdGljIGludCB0ZXN0X2NnZnJlZXplcl92Zm9yayhjb25zdCBjaGFyICpyb290KQogLyoKICAqIEdldCB0aGUgY3VycmVudCBmcm96ZW5fdXNlYyBmb3IgdGhlIGNncm91cC4KICAqLwotc3RhdGljIGxvbmcgY2dfY2hlY2tfZnJlZXpldGltZShjb25zdCBjaGFyICpjZ3JvdXApCiYjNDM7c3RhdGljIHM2NCBjZ19jaGVja19mcmVlemV0aW1lKGNvbnN0IGNoYXIgKmNncm91cCkKIHsKLQlyZXR1cm4gY2dfcmVhZF9rZXlfbG9uZyhjZ3JvdXAsICYjMzQ7Y2dyb3VwLnN0YXQubG9jYWwmIzM0OywKLQkJCQkmIzM0O2Zyb3plbl91c2VjICYjMzQ7KTsKJiM0MzsJcmV0dXJuIGNnX3JlYWRfa2V5X3M2NChjZ3JvdXAsICYjMzQ7Y2dyb3VwLnN0YXQubG9jYWwmIzM0OywgJiMzNDtmcm96ZW5fdXNlYyAmIzM0Oyk7CiB9CiAKIC8qCkBAIC04MjAsNyAmIzQzOzgxOSw3IEBAIHN0YXRpYyBpbnQgdGVzdF9jZ2ZyZWV6ZXJfdGltZV9lbXB0eShjb25zdCBjaGFyICpyb290KQogewogCWludCByZXQgPSBLU0ZUX0ZBSUw7CiAJY2hhciAqY2dyb3VwID0gTlVMTDsKLQlsb25nIHByZXYsIGN1cnI7CiYjNDM7CXM2NCBwcmV2LCBjdXJyOwogCiAJY2dyb3VwID0gY2dfbmFtZShyb290LCAmIzM0O2NnX3RpbWVfdGVzdF9lbXB0eSYjMzQ7KTsKIAlpZiAoIWNncm91cCkKQEAgLTgzOSw3ICYjNDM7ODM4LDcgQEAgc3RhdGljIGludCB0ZXN0X2NnZnJlZXplcl90aW1lX2VtcHR5KGNvbnN0IGNoYXIgKnJvb3QpCiAJCWdvdG8gY2xlYW51cDsKIAl9CiAJaWYgKGN1cnIgJmd0OyAwKSB7Ci0JCWRlYnVnKCYjMzQ7RXhwZWN0IHRpbWUgKCVsZCkgdG8gYmUgMFxuJiMzNDssIGN1cnIpOwomIzQzOwkJZGVidWcoJiMzNDtFeHBlY3QgdGltZSAoJWxsZCkgdG8gYmUgMFxuJiMzNDssIGN1cnIpOwogCQlnb3RvIGNsZWFudXA7CiAJfQogCkBAIC04NTMsOCAmIzQzOzg1Miw3IEBAIHN0YXRpYyBpbnQgdGVzdF9jZ2ZyZWV6ZXJfdGltZV9lbXB0eShjb25zdCBjaGFyICpyb290KQogCXVzbGVlcCgxMDAwKTsKIAljdXJyID0gY2dfY2hlY2tfZnJlZXpldGltZShjZ3JvdXApOwogCWlmIChjdXJyICZsdDsgMTAwMCkgewotCQlkZWJ1ZygmIzM0O0V4cGVjdCB0aW1lICglbGQpIHRvIGJlIGF0IGxlYXN0IDEwMDAgdXNcbiYjMzQ7LAotCQkgICAgICBjdXJyKTsKJiM0MzsJCWRlYnVnKCYjMzQ7RXhwZWN0IHRpbWUgKCVsbGQpIHRvIGJlIGF0IGxlYXN0IDEwMDAgdXNcbiYjMzQ7LCBjdXJyKTsKIAkJZ290byBjbGVhbnVwOwogCX0KIApAQCAtODY3LDcgJiM0Mzs4NjUsNyBAQCBzdGF0aWMgaW50IHRlc3RfY2dmcmVlemVyX3RpbWVfZW1wdHkoY29uc3QgY2hhciAqcm9vdCkKIAlwcmV2ID0gY3VycjsKIAljdXJyID0gY2dfY2hlY2tfZnJlZXpldGltZShjZ3JvdXApOwogCWlmIChjdXJyICZsdDs9IHByZXYpIHsKLQkJZGVidWcoJiMzNDtFeHBlY3QgdGltZSAoJWxkKSB0byBiZSBtb3JlIHRoYW4gcHJldmlvdXMgY2hlY2sgKCVsZClcbiYjMzQ7LAomIzQzOwkJZGVidWcoJiMzNDtFeHBlY3QgdGltZSAoJWxsZCkgdG8gYmUgbW9yZSB0aGFuIHByZXZpb3VzIGNoZWNrICglbGxkKVxuJiMzNDssCiAJCSAgICAgIGN1cnIsIHByZXYpOwogCQlnb3RvIGNsZWFudXA7CiAJfQpAQCAtODc5LDcgJiM0Mzs4NzcsNyBAQCBzdGF0aWMgaW50IHRlc3RfY2dmcmVlemVyX3RpbWVfZW1wdHkoY29uc3QgY2hhciAqcm9vdCkKIAlwcmV2ID0gY3VycjsKIAljdXJyID0gY2dfY2hlY2tfZnJlZXpldGltZShjZ3JvdXApOwogCWlmIChjdXJyICE9IHByZXYpIHsKLQkJZGVidWcoJiMzNDtFeHBlY3QgdGltZSAoJWxkKSB0byBiZSB1bmNoYW5nZWQgZnJvbSBwcmV2aW91cyBjaGVjayAoJWxkKVxuJiMzNDssCiYjNDM7CQlkZWJ1ZygmIzM0O0V4cGVjdCB0aW1lICglbGxkKSB0byBiZSB1bmNoYW5nZWQgZnJvbSBwcmV2aW91cyBjaGVjayAoJWxsZClcbiYjMzQ7LAogCQkgICAgICBjdXJyLCBwcmV2KTsKIAkJZ290byBjbGVhbnVwOwogCX0KZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2Nncm91cC90ZXN0X2ttZW0uYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2Nncm91cC90ZXN0X2ttZW0uYwppbmRleCA0MzdmMmQzNWYyMDVlLi4yNDk4OThmM2I4MWU4IDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9jZ3JvdXAvdGVzdF9rbWVtLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvY2dyb3VwL3Rlc3Rfa21lbS5jCkBAIC01NCw3ICYjNDM7NTQsOCBAQCBzdGF0aWMgaW50IHRlc3Rfa21lbV9iYXNpYyhjb25zdCBjaGFyICpyb290KQogewogCWludCByZXQgPSBLU0ZUX0ZBSUw7CiAJY2hhciAqY2cgPSBOVUxMOwotCWxvbmcgc2xhYjAsIHNsYWIxLCBjdXJyZW50OwomIzQzOwlzNjQgc2xhYjAsIHNsYWIxOwomIzQzOwlsb25nIGN1cnJlbnQ7CiAKIAljZyA9IGNnX25hbWUocm9vdCwgJiMzNDtrbWVtX2Jhc2ljX3Rlc3QmIzM0Oyk7CiAJaWYgKCFjZykKQEAgLTY2LDcgJiM0Mzs2Nyw3IEBAIHN0YXRpYyBpbnQgdGVzdF9rbWVtX2Jhc2ljKGNvbnN0IGNoYXIgKnJvb3QpCiAJaWYgKGNnX3J1bihjZywgYWxsb2NfZGNhY2hlLCAodm9pZCAqKTEwMDAwMCkpCiAJCWdvdG8gY2xlYW51cDsKIAotCXNsYWIwID0gY2dfcmVhZF9rZXlfbG9uZyhjZywgJiMzNDttZW1vcnkuc3RhdCYjMzQ7LCAmIzM0O3NsYWIgJiMzNDspOwomIzQzOwlzbGFiMCA9IGNnX3JlYWRfa2V5X3M2NChjZywgJiMzNDttZW1vcnkuc3RhdCYjMzQ7LCAmIzM0O3NsYWIgJiMzNDspOwogCWlmIChzbGFiMCAmbHQ7ICgxICZsdDsmbHQ7IDIwKSkKIAkJZ290byBjbGVhbnVwOwogCkBAIC03NSw3ICYjNDM7NzYsNyBAQCBzdGF0aWMgaW50IHRlc3Rfa21lbV9iYXNpYyhjb25zdCBjaGFyICpyb290KQogCS8qIHdhaXQgZm9yIFJDVSBmcmVlaW5nICovCiAJc2xlZXAoMSk7CiAKLQlzbGFiMSA9IGNnX3JlYWRfa2V5X2xvbmcoY2csICYjMzQ7bWVtb3J5LnN0YXQmIzM0OywgJiMzNDtzbGFiICYjMzQ7KTsKJiM0MzsJc2xhYjEgPSBjZ19yZWFkX2tleV9zNjQoY2csICYjMzQ7bWVtb3J5LnN0YXQmIzM0OywgJiMzNDtzbGFiICYjMzQ7KTsKIAlpZiAoc2xhYjEgJmx0OyAwKQogCQlnb3RvIGNsZWFudXA7CiAKQEAgLTE2Nyw3ICYjNDM7MTY4LDggQEAgc3RhdGljIGludCBjZ19ydW5faW5fc3ViY2dyb3Vwcyhjb25zdCBjaGFyICpwYXJlbnQsCiAgKi8KIHN0YXRpYyBpbnQgdGVzdF9rbWVtX21lbWNnX2RlbGV0aW9uKGNvbnN0IGNoYXIgKnJvb3QpCiB7Ci0JbG9uZyBjdXJyZW50LCBhbm9uLCBmaWxlLCBrZXJuZWwsIHNvY2ssIHN1bTsKJiM0MzsJbG9uZyBjdXJyZW50OwomIzQzOwlzNjQgYW5vbiwgZmlsZSwga2VybmVsLCBzb2NrLCBzdW07CiAJaW50IHJldCA9IEtTRlRfRkFJTDsKIAljaGFyICpwYXJlbnQ7CiAKQEAgLTE4NSwyMyAmIzQzOzE4NywyMyBAQCBzdGF0aWMgaW50IHRlc3Rfa21lbV9tZW1jZ19kZWxldGlvbihjb25zdCBjaGFyICpyb290KQogCQlnb3RvIGNsZWFudXA7CiAKIAljdXJyZW50ID0gY2dfcmVhZF9sb25nKHBhcmVudCwgJiMzNDttZW1vcnkuY3VycmVudCYjMzQ7KTsKLQlhbm9uID0gY2dfcmVhZF9rZXlfbG9uZyhwYXJlbnQsICYjMzQ7bWVtb3J5LnN0YXQmIzM0OywgJiMzNDthbm9uICYjMzQ7KTsKLQlmaWxlID0gY2dfcmVhZF9rZXlfbG9uZyhwYXJlbnQsICYjMzQ7bWVtb3J5LnN0YXQmIzM0OywgJiMzNDtmaWxlICYjMzQ7KTsKLQlrZXJuZWwgPSBjZ19yZWFkX2tleV9sb25nKHBhcmVudCwgJiMzNDttZW1vcnkuc3RhdCYjMzQ7LCAmIzM0O2tlcm5lbCAmIzM0Oyk7Ci0Jc29jayA9IGNnX3JlYWRfa2V5X2xvbmcocGFyZW50LCAmIzM0O21lbW9yeS5zdGF0JiMzNDssICYjMzQ7c29jayAmIzM0Oyk7CiYjNDM7CWFub24gPSBjZ19yZWFkX2tleV9zNjQocGFyZW50LCAmIzM0O21lbW9yeS5zdGF0JiMzNDssICYjMzQ7YW5vbiAmIzM0Oyk7CiYjNDM7CWZpbGUgPSBjZ19yZWFkX2tleV9zNjQocGFyZW50LCAmIzM0O21lbW9yeS5zdGF0JiMzNDssICYjMzQ7ZmlsZSAmIzM0Oyk7CiYjNDM7CWtlcm5lbCA9IGNnX3JlYWRfa2V5X3M2NChwYXJlbnQsICYjMzQ7bWVtb3J5LnN0YXQmIzM0OywgJiMzNDtrZXJuZWwgJiMzNDspOwomIzQzOwlzb2NrID0gY2dfcmVhZF9rZXlfczY0KHBhcmVudCwgJiMzNDttZW1vcnkuc3RhdCYjMzQ7LCAmIzM0O3NvY2sgJiMzNDspOwogCWlmIChjdXJyZW50ICZsdDsgMCB8fCBhbm9uICZsdDsgMCB8fCBmaWxlICZsdDsgMCB8fCBrZXJuZWwgJmx0OyAwIHx8IHNvY2sgJmx0OyAwKQogCQlnb3RvIGNsZWFudXA7CiAKIAlzdW0gPSBhbm9uICYjNDM7IGZpbGUgJiM0Mzsga2VybmVsICYjNDM7IHNvY2s7Ci0JaWYgKGxhYnMoc3VtIC0gY3VycmVudCkgJmx0OyBNQVhfVk1TVEFUX0VSUk9SKSB7CiYjNDM7CWlmIChsbGFicyhzdW0gLSBjdXJyZW50KSAmbHQ7IE1BWF9WTVNUQVRfRVJST1IpIHsKIAkJcmV0ID0gS1NGVF9QQVNTOwogCX0gZWxzZSB7CiAJCXByaW50ZigmIzM0O21lbW9yeS5jdXJyZW50ID0gJWxkXG4mIzM0OywgY3VycmVudCk7Ci0JCXByaW50ZigmIzM0O2Fub24gJiM0MzsgZmlsZSAmIzQzOyBrZXJuZWwgJiM0Mzsgc29jayA9ICVsZFxuJiMzNDssIHN1bSk7Ci0JCXByaW50ZigmIzM0O2Fub24gPSAlbGRcbiYjMzQ7LCBhbm9uKTsKLQkJcHJpbnRmKCYjMzQ7ZmlsZSA9ICVsZFxuJiMzNDssIGZpbGUpOwotCQlwcmludGYoJiMzNDtrZXJuZWwgPSAlbGRcbiYjMzQ7LCBrZXJuZWwpOwotCQlwcmludGYoJiMzNDtzb2NrID0gJWxkXG4mIzM0Oywgc29jayk7CiYjNDM7CQlwcmludGYoJiMzNDthbm9uICYjNDM7IGZpbGUgJiM0Mzsga2VybmVsICYjNDM7IHNvY2sgPSAlbGxkXG4mIzM0Oywgc3VtKTsKJiM0MzsJCXByaW50ZigmIzM0O2Fub24gPSAlbGxkXG4mIzM0OywgYW5vbik7CiYjNDM7CQlwcmludGYoJiMzNDtmaWxlID0gJWxsZFxuJiMzNDssIGZpbGUpOwomIzQzOwkJcHJpbnRmKCYjMzQ7a2VybmVsID0gJWxsZFxuJiMzNDssIGtlcm5lbCk7CiYjNDM7CQlwcmludGYoJiMzNDtzb2NrID0gJWxsZFxuJiMzNDssIHNvY2spOwogCX0KIAogY2xlYW51cDoKQEAgLTI0OCw3ICYjNDM7MjUwLDcgQEAgc3RhdGljIGludCBzcGF3bl8xMDAwX3RocmVhZHMoY29uc3QgY2hhciAqY2dyb3VwLCB2b2lkICphcmcpCiAJaW50IG5yX3RocmVhZHMgPSAxMDAwOwogCXB0aHJlYWRfdCAqdGluZm87CiAJdW5zaWduZWQgbG9uZyBpOwotCWxvbmcgc3RhY2s7CiYjNDM7CXM2NCBzdGFjazsKIAlpbnQgcmV0ID0gLTE7CiAKIAl0aW5mbyA9IGNhbGxvYyhucl90aHJlYWRzLCBzaXplb2YocHRocmVhZF90KSk7CkBAIC0yNjMsNyAmIzQzOzI2NSw3IEBAIHN0YXRpYyBpbnQgc3Bhd25fMTAwMF90aHJlYWRzKGNvbnN0IGNoYXIgKmNncm91cCwgdm9pZCAqYXJnKQogCQl9CiAJfQogCi0Jc3RhY2sgPSBjZ19yZWFkX2tleV9sb25nKGNncm91cCwgJiMzNDttZW1vcnkuc3RhdCYjMzQ7LCAmIzM0O2tlcm5lbF9zdGFjayAmIzM0Oyk7CiYjNDM7CXN0YWNrID0gY2dfcmVhZF9rZXlfczY0KGNncm91cCwgJiMzNDttZW1vcnkuc3RhdCYjMzQ7LCAmIzM0O2tlcm5lbF9zdGFjayAmIzM0Oyk7CiAJaWYgKHN0YWNrICZndDs9IDQwOTYgKiAxMDAwKQogCQlyZXQgPSAwOwogCkBAIC0zMDcsNyAmIzQzOzMwOSw3IEBAIHN0YXRpYyBpbnQgdGVzdF9rbWVtX2RlYWRfY2dyb3Vwcyhjb25zdCBjaGFyICpyb290KQogewogCWludCByZXQgPSBLU0ZUX0ZBSUw7CiAJY2hhciAqcGFyZW50OwotCWxvbmcgZGVhZCA9IC0xOwomIzQzOwlzNjQgZGVhZCA9IC0xOwogCiAJcGFyZW50ID0gY2dfbmFtZShyb290LCAmIzM0O2ttZW1fZGVhZF9jZ3JvdXBzX3Rlc3QmIzM0Oyk7CiAJaWYgKCFwYXJlbnQpCkBAIC0zMjgsOSAmIzQzOzMzMCwxMCBAQCBzdGF0aWMgaW50IHRlc3Rfa21lbV9kZWFkX2Nncm91cHMoY29uc3QgY2hhciAqcm9vdCkKIAkgKiBmcm9tIGEgc3BlY2lmaWMga2VybmVsIGNvbnN0YW50LCBhbmQgY2FuIGJlIGFkanVzdGVkIGlmIHJlY2xhaW0KIAkgKiBiZWhhdmlvciBjaGFuZ2VzIGluIHRoZSBmdXR1cmUuCiAJICovCi0JZGVhZCA9IGNnX3JlYWRfa2V5X2xvbmdfcG9sbChwYXJlbnQsICYjMzQ7Y2dyb3VwLnN0YXQmIzM0OywKLQkJCQkJJiMzNDtucl9keWluZ19kZXNjZW5kYW50cyAmIzM0OywgMCwgS01FTV9ERUFEX1dBSVRfUkVUUklFUywKLQkJCQkJREVGQVVMVF9XQUlUX0lOVEVSVkFMX1VTKTsKJiM0MzsJZGVhZCA9IGNnX3JlYWRfa2V5X3M2NF9wb2xsKHBhcmVudCwgJiMzNDtjZ3JvdXAuc3RhdCYjMzQ7LAomIzQzOwkJCQkgICAgJiMzNDtucl9keWluZ19kZXNjZW5kYW50cyAmIzM0OywgMCwKJiM0MzsJCQkJICAgIEtNRU1fREVBRF9XQUlUX1JFVFJJRVMsCiYjNDM7CQkJCSAgICBERUZBVUxUX1dBSVRfSU5URVJWQUxfVVMpOwogCWlmIChkZWFkKQogCQlnb3RvIGNsZWFudXA7CiAKQEAgLTM1Myw3ICYjNDM7MzU2LDggQEAgc3RhdGljIGludCB0ZXN0X3BlcmNwdV9iYXNpYyhjb25zdCBjaGFyICpyb290KQogewogCWludCByZXQgPSBLU0ZUX0ZBSUw7CiAJY2hhciAqcGFyZW50LCAqY2hpbGQ7Ci0JbG9uZyBjdXJyZW50LCBwZXJjcHUsIHNsYWI7CiYjNDM7CWxvbmcgY3VycmVudDsKJiM0MzsJczY0IHBlcmNwdSwgc2xhYjsKIAlpbnQgaTsKIAogCXBhcmVudCA9IGNnX25hbWUocm9vdCwgJiMzNDtwZXJjcHVfYmFzaWNfdGVzdCYjMzQ7KTsKQEAgLTM4MiwxNSAmIzQzOzM4NiwxNSBAQCBzdGF0aWMgaW50IHRlc3RfcGVyY3B1X2Jhc2ljKGNvbnN0IGNoYXIgKnJvb3QpCiAJfQogCiAJY3VycmVudCA9IGNnX3JlYWRfbG9uZyhwYXJlbnQsICYjMzQ7bWVtb3J5LmN1cnJlbnQmIzM0Oyk7Ci0JcGVyY3B1ID0gY2dfcmVhZF9rZXlfbG9uZyhwYXJlbnQsICYjMzQ7bWVtb3J5LnN0YXQmIzM0OywgJiMzNDtwZXJjcHUgJiMzNDspOwotCXNsYWIgPSBjZ19yZWFkX2tleV9sb25nKHBhcmVudCwgJiMzNDttZW1vcnkuc3RhdCYjMzQ7LCAmIzM0O3NsYWIgJiMzNDspOwomIzQzOwlwZXJjcHUgPSBjZ19yZWFkX2tleV9zNjQocGFyZW50LCAmIzM0O21lbW9yeS5zdGF0JiMzNDssICYjMzQ7cGVyY3B1ICYjMzQ7KTsKJiM0MzsJc2xhYiA9IGNnX3JlYWRfa2V5X3M2NChwYXJlbnQsICYjMzQ7bWVtb3J5LnN0YXQmIzM0OywgJiMzNDtzbGFiICYjMzQ7KTsKIAogCWlmIChjdXJyZW50ICZndDsgMCAmYW1wOyZhbXA7IHBlcmNwdSAmZ3Q7IDAgJmFtcDsmYW1wOyBzbGFiICZndDs9IDAgJmFtcDsmYW1wOwotCQkJbGFicyhjdXJyZW50IC0gKHBlcmNwdSAmIzQzOyBzbGFiKSkgJmx0OyBNQVhfVk1TVEFUX0VSUk9SKQomIzQzOwkgICAgbGxhYnMoY3VycmVudCAtIChwZXJjcHUgJiM0Mzsgc2xhYikpICZsdDsgTUFYX1ZNU1RBVF9FUlJPUikKIAkJcmV0ID0gS1NGVF9QQVNTOwogCWVsc2UKLQkJcHJpbnRmKCYjMzQ7bWVtb3J5LmN1cnJlbnQgJWxkXG5wZXJjcHUgJWxkXG5zbGFiICVsZFxuZGVsdGEgJWxkXG4mIzM0OywKLQkJCWN1cnJlbnQsIHBlcmNwdSwgc2xhYiwgY3VycmVudCAtIChwZXJjcHUgJiM0Mzsgc2xhYikpOwomIzQzOwkJcHJpbnRmKCYjMzQ7bWVtb3J5LmN1cnJlbnQgJWxkXG5wZXJjcHUgJWxsZFxuc2xhYiAlbGxkXG5kZWx0YSAlbGxkXG4mIzM0OywKJiM0MzsJCSAgICAgICBjdXJyZW50LCBwZXJjcHUsIHNsYWIsIGN1cnJlbnQgLSAocGVyY3B1ICYjNDM7IHNsYWIpKTsKIAogY2xlYW51cF9jaGlsZHJlbjoKIAlmb3IgKGkgPSAwOyBpICZsdDsgMTAwMDsgaSYjNDM7JiM0MzspIHsKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2Nncm91cC90ZXN0X21lbWNvbnRyb2wuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2Nncm91cC90ZXN0X21lbWNvbnRyb2wuYwppbmRleCAzYTg0ZDA2OGZiZjM2Li41Mzk2NTBjMWQ1NjI2IDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9jZ3JvdXAvdGVzdF9tZW1jb250cm9sLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvY2dyb3VwL3Rlc3RfbWVtY29udHJvbC5jCkBAIC0xOTIsNyAmIzQzOzE5Miw4IEBAIHN0YXRpYyBpbnQgYWxsb2NfYW5vbl81ME1fY2hlY2soY29uc3QgY2hhciAqY2dyb3VwLCB2b2lkICphcmcpCiB7CiAJc2l6ZV90IHNpemUgPSBNQig1MCk7CiAJY2hhciAqYnVmOwotCWxvbmcgYW5vbiwgY3VycmVudDsKJiM0MzsJczY0IGFub247CiYjNDM7CWxvbmcgY3VycmVudDsKIAlpbnQgcmV0ID0gLTE7CiAKIAlidWYgPSBhbGxvY19hbmRfcG9wdWxhdGVfYW5vbihzaXplKTsKQEAgLTIwNiw3ICYjNDM7MjA3LDcgQEAgc3RhdGljIGludCBhbGxvY19hbm9uXzUwTV9jaGVjayhjb25zdCBjaGFyICpjZ3JvdXAsIHZvaWQgKmFyZykKIAlpZiAoIXZhbHVlc19jbG9zZShzaXplLCBjdXJyZW50LCAzKSkKIAkJZ290byBjbGVhbnVwOwogCi0JYW5vbiA9IGNnX3JlYWRfa2V5X2xvbmcoY2dyb3VwLCAmIzM0O21lbW9yeS5zdGF0JiMzNDssICYjMzQ7YW5vbiAmIzM0Oyk7CiYjNDM7CWFub24gPSBjZ19yZWFkX2tleV9zNjQoY2dyb3VwLCAmIzM0O21lbW9yeS5zdGF0JiMzNDssICYjMzQ7YW5vbiAmIzM0Oyk7CiAJaWYgKGFub24gJmx0OyAwKQogCQlnb3RvIGNsZWFudXA7CiAKQEAgLTIyMyw3ICYjNDM7MjI0LDggQEAgc3RhdGljIGludCBhbGxvY19wYWdlY2FjaGVfNTBNX2NoZWNrKGNvbnN0IGNoYXIgKmNncm91cCwgdm9pZCAqYXJnKQogewogCXNpemVfdCBzaXplID0gTUIoNTApOwogCWludCByZXQgPSAtMTsKLQlsb25nIGN1cnJlbnQsIGZpbGU7CiYjNDM7CWxvbmcgY3VycmVudDsKJiM0MzsJczY0IGZpbGU7CiAJaW50IGZkOwogCiAJZmQgPSBnZXRfdGVtcF9mZCgpOwpAQCAtMjM3LDcgJiM0MzsyMzksNyBAQCBzdGF0aWMgaW50IGFsbG9jX3BhZ2VjYWNoZV81ME1fY2hlY2soY29uc3QgY2hhciAqY2dyb3VwLCB2b2lkICphcmcpCiAJaWYgKGN1cnJlbnQgJmx0OyBzaXplKQogCQlnb3RvIGNsZWFudXA7CiAKLQlmaWxlID0gY2dfcmVhZF9rZXlfbG9uZyhjZ3JvdXAsICYjMzQ7bWVtb3J5LnN0YXQmIzM0OywgJiMzNDtmaWxlICYjMzQ7KTsKJiM0MzsJZmlsZSA9IGNnX3JlYWRfa2V5X3M2NChjZ3JvdXAsICYjMzQ7bWVtb3J5LnN0YXQmIzM0OywgJiMzNDtmaWxlICYjMzQ7KTsKIAlpZiAoZmlsZSAmbHQ7IDApCiAJCWdvdG8gY2xlYW51cDsKIApAQCAtNjIzLDEwICYjNDM7NjI1LDEwIEBAIHN0YXRpYyBpbnQgdGVzdF9tZW1jZ19wcm90ZWN0aW9uKGNvbnN0IGNoYXIgKnJvb3QsIGJvb2wgbWluKQogCWZvciAoaSA9IDA7IGkgJmx0OyBBUlJBWV9TSVpFKGNoaWxkcmVuKTsgaSYjNDM7JiM0MzspIHsKIAkJaW50IGlnbm9yZV9sb3dfZXZlbnRzX2luZGV4ID0gaGFzX3JlY3Vyc2l2ZXByb3QgPyAyIDogLTE7CiAJCWludCBub19sb3dfZXZlbnRzX2luZGV4ID0gMTsKLQkJbG9uZyBsb3csIG9vbTsKJiM0MzsJCXM2NCBsb3csIG9vbTsKIAotCQlvb20gPSBjZ19yZWFkX2tleV9sb25nKGNoaWxkcmVuW2ldLCAmIzM0O21lbW9yeS5ldmVudHMmIzM0OywgJiMzNDtvb20gJiMzNDspOwotCQlsb3cgPSBjZ19yZWFkX2tleV9sb25nKGNoaWxkcmVuW2ldLCAmIzM0O21lbW9yeS5ldmVudHMmIzM0OywgJiMzNDtsb3cgJiMzNDspOwomIzQzOwkJb29tID0gY2dfcmVhZF9rZXlfczY0KGNoaWxkcmVuW2ldLCAmIzM0O21lbW9yeS5ldmVudHMmIzM0OywgJiMzNDtvb20gJiMzNDspOwomIzQzOwkJbG93ID0gY2dfcmVhZF9rZXlfczY0KGNoaWxkcmVuW2ldLCAmIzM0O21lbW9yeS5ldmVudHMmIzM0OywgJiMzNDtsb3cgJiMzNDspOwogCiAJCWlmIChvb20pCiAJCQlnb3RvIGNsZWFudXA7CkBAIC03MTEsNyAmIzQzOzcxMyw3IEBAIHN0YXRpYyBpbnQgdGVzdF9tZW1jZ19oaWdoKGNvbnN0IGNoYXIgKnJvb3QpCiB7CiAJaW50IHJldCA9IEtTRlRfRkFJTDsKIAljaGFyICptZW1jZzsKLQlsb25nIGhpZ2g7CiYjNDM7CXM2NCBoaWdoOwogCiAJbWVtY2cgPSBjZ19uYW1lKHJvb3QsICYjMzQ7bWVtY2dfdGVzdCYjMzQ7KTsKIAlpZiAoIW1lbWNnKQpAQCAtNzM4LDcgJiM0Mzs3NDAsNyBAQCBzdGF0aWMgaW50IHRlc3RfbWVtY2dfaGlnaChjb25zdCBjaGFyICpyb290KQogCWlmIChjZ19ydW4obWVtY2csIGFsbG9jX3BhZ2VjYWNoZV9tYXhfMzBNLCBOVUxMKSkKIAkJZ290byBjbGVhbnVwOwogCi0JaGlnaCA9IGNnX3JlYWRfa2V5X2xvbmcobWVtY2csICYjMzQ7bWVtb3J5LmV2ZW50cyYjMzQ7LCAmIzM0O2hpZ2ggJiMzNDspOwomIzQzOwloaWdoID0gY2dfcmVhZF9rZXlfczY0KG1lbWNnLCAmIzM0O21lbW9yeS5ldmVudHMmIzM0OywgJiMzNDtoaWdoICYjMzQ7KTsKIAlpZiAoaGlnaCAmbHQ7PSAwKQogCQlnb3RvIGNsZWFudXA7CiAKQEAgLTc3NCw4ICYjNDM7Nzc2LDggQEAgc3RhdGljIGludCB0ZXN0X21lbWNnX2hpZ2hfc3luYyhjb25zdCBjaGFyICpyb290KQogewogCWludCByZXQgPSBLU0ZUX0ZBSUwsIHBpZCwgZmQgPSAtMTsKIAljaGFyICptZW1jZzsKLQlsb25nIHByZV9oaWdoLCBwcmVfbWF4OwotCWxvbmcgcG9zdF9oaWdoLCBwb3N0X21heDsKJiM0MzsJczY0IHByZV9oaWdoLCBwcmVfbWF4OwomIzQzOwlzNjQgcG9zdF9oaWdoLCBwb3N0X21heDsKIAogCW1lbWNnID0gY2dfbmFtZShyb290LCAmIzM0O21lbWNnX3Rlc3QmIzM0Oyk7CiAJaWYgKCFtZW1jZykKQEAgLTc4NCw4ICYjNDM7Nzg2LDggQEAgc3RhdGljIGludCB0ZXN0X21lbWNnX2hpZ2hfc3luYyhjb25zdCBjaGFyICpyb290KQogCWlmIChjZ19jcmVhdGUobWVtY2cpKQogCQlnb3RvIGNsZWFudXA7CiAKLQlwcmVfaGlnaCA9IGNnX3JlYWRfa2V5X2xvbmcobWVtY2csICYjMzQ7bWVtb3J5LmV2ZW50cyYjMzQ7LCAmIzM0O2hpZ2ggJiMzNDspOwotCXByZV9tYXggPSBjZ19yZWFkX2tleV9sb25nKG1lbWNnLCAmIzM0O21lbW9yeS5ldmVudHMmIzM0OywgJiMzNDttYXggJiMzNDspOwomIzQzOwlwcmVfaGlnaCA9IGNnX3JlYWRfa2V5X3M2NChtZW1jZywgJiMzNDttZW1vcnkuZXZlbnRzJiMzNDssICYjMzQ7aGlnaCAmIzM0Oyk7CiYjNDM7CXByZV9tYXggPSBjZ19yZWFkX2tleV9zNjQobWVtY2csICYjMzQ7bWVtb3J5LmV2ZW50cyYjMzQ7LCAmIzM0O21heCAmIzM0Oyk7CiAJaWYgKHByZV9oaWdoICZsdDsgMCB8fCBwcmVfbWF4ICZsdDsgMCkKIAkJZ290byBjbGVhbnVwOwogCkBAIC04MDgsOCAmIzQzOzgxMCw4IEBAIHN0YXRpYyBpbnQgdGVzdF9tZW1jZ19oaWdoX3N5bmMoY29uc3QgY2hhciAqcm9vdCkKIAogCWNnX3dhaXRfZm9yKGZkKTsKIAotCXBvc3RfaGlnaCA9IGNnX3JlYWRfa2V5X2xvbmcobWVtY2csICYjMzQ7bWVtb3J5LmV2ZW50cyYjMzQ7LCAmIzM0O2hpZ2ggJiMzNDspOwotCXBvc3RfbWF4ID0gY2dfcmVhZF9rZXlfbG9uZyhtZW1jZywgJiMzNDttZW1vcnkuZXZlbnRzJiMzNDssICYjMzQ7bWF4ICYjMzQ7KTsKJiM0MzsJcG9zdF9oaWdoID0gY2dfcmVhZF9rZXlfczY0KG1lbWNnLCAmIzM0O21lbW9yeS5ldmVudHMmIzM0OywgJiMzNDtoaWdoICYjMzQ7KTsKJiM0MzsJcG9zdF9tYXggPSBjZ19yZWFkX2tleV9zNjQobWVtY2csICYjMzQ7bWVtb3J5LmV2ZW50cyYjMzQ7LCAmIzM0O21heCAmIzM0Oyk7CiAJaWYgKHBvc3RfaGlnaCAmbHQ7IDAgfHwgcG9zdF9tYXggJmx0OyAwKQogCQlnb3RvIGNsZWFudXA7CiAKQEAgLTgzNiw3ICYjNDM7ODM4LDggQEAgc3RhdGljIGludCB0ZXN0X21lbWNnX21heChjb25zdCBjaGFyICpyb290KQogewogCWludCByZXQgPSBLU0ZUX0ZBSUw7CiAJY2hhciAqbWVtY2c7Ci0JbG9uZyBjdXJyZW50LCBtYXg7CiYjNDM7CWxvbmcgY3VycmVudDsKJiM0MzsJczY0IG1heDsKIAogCW1lbWNnID0gY2dfbmFtZShyb290LCAmIzM0O21lbWNnX3Rlc3QmIzM0Oyk7CiAJaWYgKCFtZW1jZykKQEAgLTg2NSw3ICYjNDM7ODY4LDcgQEAgc3RhdGljIGludCB0ZXN0X21lbWNnX21heChjb25zdCBjaGFyICpyb290KQogCWlmIChjdXJyZW50ICZndDsgTUIoMzApIHx8ICFjdXJyZW50KQogCQlnb3RvIGNsZWFudXA7CiAKLQltYXggPSBjZ19yZWFkX2tleV9sb25nKG1lbWNnLCAmIzM0O21lbW9yeS5ldmVudHMmIzM0OywgJiMzNDttYXggJiMzNDspOwomIzQzOwltYXggPSBjZ19yZWFkX2tleV9zNjQobWVtY2csICYjMzQ7bWVtb3J5LmV2ZW50cyYjMzQ7LCAmIzM0O21heCAmIzM0Oyk7CiAJaWYgKG1heCAmbHQ7PSAwKQogCQlnb3RvIGNsZWFudXA7CiAKQEAgLTEwMjksNyAmIzQzOzEwMzIsOCBAQCBzdGF0aWMgaW50IHRlc3RfbWVtY2dfc3dhcF9tYXhfcGVhayhjb25zdCBjaGFyICpyb290KQogewogCWludCByZXQgPSBLU0ZUX0ZBSUw7CiAJY2hhciAqbWVtY2c7Ci0JbG9uZyBtYXgsIHBlYWs7CiYjNDM7CXM2NCBtYXg7CiYjNDM7CWxvbmcgcGVhazsKIAlzdHJ1Y3Qgc3RhdCBzczsKIAlpbnQgc3dhcF9wZWFrX2ZkID0gLTEsIG1lbV9wZWFrX2ZkID0gLTE7CiAKQEAgLTExMjIsMTAgJiM0MzsxMTI2LDEwIEBAIHN0YXRpYyBpbnQgdGVzdF9tZW1jZ19zd2FwX21heF9wZWFrKGNvbnN0IGNoYXIgKnJvb3QpCiAJaWYgKCFjZ19ydW4obWVtY2csIGFsbG9jX2Fub24sICh2b2lkICopTUIoMTAwKSkpCiAJCWdvdG8gY2xlYW51cDsKIAotCWlmIChjZ19yZWFkX2tleV9sb25nKG1lbWNnLCAmIzM0O21lbW9yeS5ldmVudHMmIzM0OywgJiMzNDtvb20gJiMzNDspICE9IDEpCiYjNDM7CWlmIChjZ19yZWFkX2tleV9zNjQobWVtY2csICYjMzQ7bWVtb3J5LmV2ZW50cyYjMzQ7LCAmIzM0O29vbSAmIzM0OykgIT0gMSkKIAkJZ290byBjbGVhbnVwOwogCi0JaWYgKGNnX3JlYWRfa2V5X2xvbmcobWVtY2csICYjMzQ7bWVtb3J5LmV2ZW50cyYjMzQ7LCAmIzM0O29vbV9raWxsICYjMzQ7KSAhPSAxKQomIzQzOwlpZiAoY2dfcmVhZF9rZXlfczY0KG1lbWNnLCAmIzM0O21lbW9yeS5ldmVudHMmIzM0OywgJiMzNDtvb21fa2lsbCAmIzM0OykgIT0gMSkKIAkJZ290byBjbGVhbnVwOwogCiAJcGVhayA9IGNnX3JlYWRfbG9uZyhtZW1jZywgJiMzNDttZW1vcnkucGVhayYjMzQ7KTsKQEAgLTExODYsNyAmIzQzOzExOTAsNyBAQCBzdGF0aWMgaW50IHRlc3RfbWVtY2dfc3dhcF9tYXhfcGVhayhjb25zdCBjaGFyICpyb290KQogCWlmIChjZ19ydW4obWVtY2csIGFsbG9jX2Fub25fNTBNX2NoZWNrX3N3YXAsICh2b2lkICopTUIoMzApKSkKIAkJZ290byBjbGVhbnVwOwogCi0JbWF4ID0gY2dfcmVhZF9rZXlfbG9uZyhtZW1jZywgJiMzNDttZW1vcnkuZXZlbnRzJiMzNDssICYjMzQ7bWF4ICYjMzQ7KTsKJiM0MzsJbWF4ID0gY2dfcmVhZF9rZXlfczY0KG1lbWNnLCAmIzM0O21lbW9yeS5ldmVudHMmIzM0OywgJiMzNDttYXggJiMzNDspOwogCWlmIChtYXggJmx0Oz0gMCkKIAkJZ290byBjbGVhbnVwOwogCkBAIC0xMjQ4LDEwICYjNDM7MTI1MiwxMCBAQCBzdGF0aWMgaW50IHRlc3RfbWVtY2dfb29tX2V2ZW50cyhjb25zdCBjaGFyICpyb290KQogCWlmIChjZ19yZWFkX3N0cmNtcChtZW1jZywgJiMzNDtjZ3JvdXAucHJvY3MmIzM0OywgJiMzNDsmIzM0OykpCiAJCWdvdG8gY2xlYW51cDsKIAotCWlmIChjZ19yZWFkX2tleV9sb25nKG1lbWNnLCAmIzM0O21lbW9yeS5ldmVudHMmIzM0OywgJiMzNDtvb20gJiMzNDspICE9IDEpCiYjNDM7CWlmIChjZ19yZWFkX2tleV9zNjQobWVtY2csICYjMzQ7bWVtb3J5LmV2ZW50cyYjMzQ7LCAmIzM0O29vbSAmIzM0OykgIT0gMSkKIAkJZ290byBjbGVhbnVwOwogCi0JaWYgKGNnX3JlYWRfa2V5X2xvbmcobWVtY2csICYjMzQ7bWVtb3J5LmV2ZW50cyYjMzQ7LCAmIzM0O29vbV9raWxsICYjMzQ7KSAhPSAxKQomIzQzOwlpZiAoY2dfcmVhZF9rZXlfczY0KG1lbWNnLCAmIzM0O21lbW9yeS5ldmVudHMmIzM0OywgJiMzNDtvb21fa2lsbCAmIzM0OykgIT0gMSkKIAkJZ290byBjbGVhbnVwOwogCiAJcmV0ID0gS1NGVF9QQVNTOwpAQCAtMTM1NCwxMyAmIzQzOzEzNTgsMTQgQEAgc3RhdGljIGludCB0Y3BfY2xpZW50KGNvbnN0IGNoYXIgKmNncm91cCwgdW5zaWduZWQgc2hvcnQgcG9ydCkKIAlyZXQgPSBLU0ZUX0ZBSUw7CiAJd2hpbGUgKHJldHJpZXMtLSkgewogCQl1aW50OF90IGJ1ZlsweDEwMDAwMF07Ci0JCWxvbmcgY3VycmVudCwgc29jazsKJiM0MzsJCWxvbmcgY3VycmVudDsKJiM0MzsJCXM2NCBzb2NrOwogCiAJCWlmIChyZWFkKHNrLCBidWYsIHNpemVvZihidWYpKSAmbHQ7PSAwKQogCQkJZ290byBjbG9zZV9zazsKIAogCQljdXJyZW50ID0gY2dfcmVhZF9sb25nKGNncm91cCwgJiMzNDttZW1vcnkuY3VycmVudCYjMzQ7KTsKLQkJc29jayA9IGNnX3JlYWRfa2V5X2xvbmcoY2dyb3VwLCAmIzM0O21lbW9yeS5zdGF0JiMzNDssICYjMzQ7c29jayAmIzM0Oyk7CiYjNDM7CQlzb2NrID0gY2dfcmVhZF9rZXlfczY0KGNncm91cCwgJiMzNDttZW1vcnkuc3RhdCYjMzQ7LCAmIzM0O3NvY2sgJiMzNDspOwogCiAJCWlmIChjdXJyZW50ICZsdDsgMCB8fCBzb2NrICZsdDsgMCkKIAkJCWdvdG8gY2xvc2Vfc2s7CkBAIC0xMzkyLDcgJiM0MzsxMzk3LDcgQEAgc3RhdGljIGludCB0ZXN0X21lbWNnX3NvY2soY29uc3QgY2hhciAqcm9vdCkKIAlpbnQgYmluZF9yZXRyaWVzID0gNSwgcmV0ID0gS1NGVF9GQUlMLCBwaWQsIGVycjsKIAl1bnNpZ25lZCBzaG9ydCBwb3J0OwogCWNoYXIgKm1lbWNnOwotCWxvbmcgc29ja19wb3N0ID0gLTE7CiYjNDM7CXM2NCBzb2NrX3Bvc3QgPSAtMTsKIAogCW1lbWNnID0gY2dfbmFtZShyb290LCAmIzM0O21lbWNnX3Rlc3QmIzM0Oyk7CiAJaWYgKCFtZW1jZykKQEAgLTE0NTksNyAmIzQzOzE0NjQsNyBAQCBzdGF0aWMgaW50IHRlc3RfbWVtY2dfc29jayhjb25zdCBjaGFyICpyb290KQogCSAqIHNjaGVkdWxpbmcgc2xhY2spIGFuZCByZXF1aXJlIHRoYXQgdGhlICYjMzQ7c29jayAmIzM0OyBjb3VudGVyCiAJICogZXZlbnR1YWxseSBkcm9wcyB0byB6ZXJvLgogCSAqLwotCXNvY2tfcG9zdCA9IGNnX3JlYWRfa2V5X2xvbmdfcG9sbChtZW1jZywgJiMzNDttZW1vcnkuc3RhdCYjMzQ7LCAmIzM0O3NvY2sgJiMzNDssIDAsCiYjNDM7CXNvY2tfcG9zdCA9IGNnX3JlYWRfa2V5X3M2NF9wb2xsKG1lbWNnLCAmIzM0O21lbW9yeS5zdGF0JiMzNDssICYjMzQ7c29jayAmIzM0OywgMCwKIAkJCQkJIE1FTUNHX1NPQ0tTVEFUX1dBSVRfUkVUUklFUywKIAkJCQkJIERFRkFVTFRfV0FJVF9JTlRFUlZBTF9VUyk7CiAJaWYgKHNvY2tfcG9zdCkKQEAgLTE0ODQsNyAmIzQzOzE0ODksNyBAQCBzdGF0aWMgaW50IHRlc3RfbWVtY2dfb29tX2dyb3VwX2xlYWZfZXZlbnRzKGNvbnN0IGNoYXIgKnJvb3QpCiB7CiAJaW50IHJldCA9IEtTRlRfRkFJTDsKIAljaGFyICpwYXJlbnQsICpjaGlsZDsKLQlsb25nIHBhcmVudF9vb21fZXZlbnRzOwomIzQzOwlzNjQgcGFyZW50X29vbV9ldmVudHM7CiAKIAlwYXJlbnQgPSBjZ19uYW1lKHJvb3QsICYjMzQ7bWVtY2dfdGVzdF8wJiMzNDspOwogCWNoaWxkID0gY2dfbmFtZShyb290LCAmIzM0O21lbWNnX3Rlc3RfMC9tZW1jZ190ZXN0XzEmIzM0Oyk7CkBAIC0xNTE5LDExICYjNDM7MTUyNCwxMSBAQCBzdGF0aWMgaW50IHRlc3RfbWVtY2dfb29tX2dyb3VwX2xlYWZfZXZlbnRzKGNvbnN0IGNoYXIgKnJvb3QpCiAJaWYgKGNnX3Rlc3RfcHJvY19raWxsZWQoY2hpbGQpKQogCQlnb3RvIGNsZWFudXA7CiAKLQlpZiAoY2dfcmVhZF9rZXlfbG9uZyhjaGlsZCwgJiMzNDttZW1vcnkuZXZlbnRzJiMzNDssICYjMzQ7b29tX2tpbGwgJiMzNDspICZsdDs9IDApCiYjNDM7CWlmIChjZ19yZWFkX2tleV9zNjQoY2hpbGQsICYjMzQ7bWVtb3J5LmV2ZW50cyYjMzQ7LCAmIzM0O29vbV9raWxsICYjMzQ7KSAmbHQ7PSAwKQogCQlnb3RvIGNsZWFudXA7CiAKLQlwYXJlbnRfb29tX2V2ZW50cyA9IGNnX3JlYWRfa2V5X2xvbmcoCi0JCQlwYXJlbnQsICYjMzQ7bWVtb3J5LmV2ZW50cyYjMzQ7LCAmIzM0O29vbV9raWxsICYjMzQ7KTsKJiM0MzsJcGFyZW50X29vbV9ldmVudHMgPQomIzQzOwkJY2dfcmVhZF9rZXlfczY0KHBhcmVudCwgJiMzNDttZW1vcnkuZXZlbnRzJiMzNDssICYjMzQ7b29tX2tpbGwgJiMzNDspOwogCS8qCiAJICogSWYgbWVtb3J5X2xvY2FsZXZlbnRzIGlzIG5vdCBlbmFibGVkICh0aGUgZGVmYXVsdCksIHRoZSBwYXJlbnQgc2hvdWxkCiAJICogY291bnQgT09NIGV2ZW50cyBpbiBpdHMgY2hpbGRyZW4gZ3JvdXBzLiBPdGhlcndpc2UsIGl0IHNob3VsZCBub3QKQEAgLTE2MzksNyAmIzQzOzE2NDQsNyBAQCBzdGF0aWMgaW50IHRlc3RfbWVtY2dfb29tX2dyb3VwX3Njb3JlX2V2ZW50cyhjb25zdCBjaGFyICpyb290KQogCWlmICghY2dfcnVuKG1lbWNnLCBhbGxvY19hbm9uLCAodm9pZCAqKU1CKDEwMCkpKQogCQlnb3RvIGNsZWFudXA7CiAKLQlpZiAoY2dfcmVhZF9rZXlfbG9uZyhtZW1jZywgJiMzNDttZW1vcnkuZXZlbnRzJiMzNDssICYjMzQ7b29tX2tpbGwgJiMzNDspICE9IDMpCiYjNDM7CWlmIChjZ19yZWFkX2tleV9zNjQobWVtY2csICYjMzQ7bWVtb3J5LmV2ZW50cyYjMzQ7LCAmIzM0O29vbV9raWxsICYjMzQ7KSAhPSAzKQogCQlnb3RvIGNsZWFudXA7CiAKIAlpZiAoa2lsbChzYWZlX3BpZCwgU0lHS0lMTCkpCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9jZ3JvdXAvdGVzdF9waWRzLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9jZ3JvdXAvdGVzdF9waWRzLmMKaW5kZXggNzEwMTA5YjUzZGZlOS4uZjRkNWJjOWY1ZjI0ZiAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvY2dyb3VwL3Rlc3RfcGlkcy5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2Nncm91cC90ZXN0X3BpZHMuYwpAQCAtMTExLDEyICYjNDM7MTExLDExIEBAIHN0YXRpYyBpbnQgdGVzdF9waWRzX2V2ZW50cyhjb25zdCBjaGFyICpyb290KQogCWlmIChraWxsKHBpZCwgU0lHSU5UKSkKIAkJZ290byBjbGVhbnVwOwogCi0JaWYgKGNnX3JlYWRfa2V5X2xvbmcoY2dfY2hpbGQsICYjMzQ7cGlkcy5ldmVudHMmIzM0OywgJiMzNDttYXggJiMzNDspICE9IDApCiYjNDM7CWlmIChjZ19yZWFkX2tleV9zNjQoY2dfY2hpbGQsICYjMzQ7cGlkcy5ldmVudHMmIzM0OywgJiMzNDttYXggJiMzNDspICE9IDApCiAJCWdvdG8gY2xlYW51cDsKLQlpZiAoY2dfcmVhZF9rZXlfbG9uZyhjZ19wYXJlbnQsICYjMzQ7cGlkcy5ldmVudHMmIzM0OywgJiMzNDttYXggJiMzNDspICE9IDEpCiYjNDM7CWlmIChjZ19yZWFkX2tleV9zNjQoY2dfcGFyZW50LCAmIzM0O3BpZHMuZXZlbnRzJiMzNDssICYjMzQ7bWF4ICYjMzQ7KSAhPSAxKQogCQlnb3RvIGNsZWFudXA7CiAKLQogCXJldCA9IEtTRlRfUEFTUzsKIAogY2xlYW51cDoKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2Nncm91cC90ZXN0X3pzd2FwLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9jZ3JvdXAvdGVzdF96c3dhcC5jCmluZGV4IDYwOWM0OGYzODUyNDEuLjZlN2VlMTFiYzk3YTUgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2Nncm91cC90ZXN0X3pzd2FwLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvY2dyb3VwL3Rlc3RfenN3YXAuYwpAQCAtNTksMTQgJiM0Mzs1OSwxNCBAQCBzdGF0aWMgaW50IGdldF96c3dhcF9zdG9yZWRfcGFnZXMoc2l6ZV90ICp2YWx1ZSkKIAlyZXR1cm4gcmVhZF9pbnQoUEFUSF9aU1dBUF9TVE9SRURfUEFHRVMsIHZhbHVlKTsKIH0KIAotc3RhdGljIGxvbmcgZ2V0X2NnX3diX2NvdW50KGNvbnN0IGNoYXIgKmNnKQomIzQzO3N0YXRpYyBzNjQgZ2V0X2NnX3diX2NvdW50KGNvbnN0IGNoYXIgKmNnKQogewotCXJldHVybiBjZ19yZWFkX2tleV9sb25nKGNnLCAmIzM0O21lbW9yeS5zdGF0JiMzNDssICYjMzQ7enN3cHdiJiMzNDspOwomIzQzOwlyZXR1cm4gY2dfcmVhZF9rZXlfczY0KGNnLCAmIzM0O21lbW9yeS5zdGF0JiMzNDssICYjMzQ7enN3cHdiJiMzNDspOwogfQogCi1zdGF0aWMgbG9uZyBnZXRfenN3cG91dChjb25zdCBjaGFyICpjZ3JvdXApCiYjNDM7c3RhdGljIHM2NCBnZXRfenN3cG91dChjb25zdCBjaGFyICpjZ3JvdXApCiB7Ci0JcmV0dXJuIGNnX3JlYWRfa2V5X2xvbmcoY2dyb3VwLCAmIzM0O21lbW9yeS5zdGF0JiMzNDssICYjMzQ7enN3cG91dCAmIzM0Oyk7CiYjNDM7CXJldHVybiBjZ19yZWFkX2tleV9zNjQoY2dyb3VwLCAmIzM0O21lbW9yeS5zdGF0JiMzNDssICYjMzQ7enN3cG91dCAmIzM0Oyk7CiB9CiAKIHN0YXRpYyBpbnQgYWxsb2NhdGVfYW5kX3JlYWRfYnl0ZXMoY29uc3QgY2hhciAqY2dyb3VwLCB2b2lkICphcmcpCkBAIC0xMjUsOSAmIzQzOzEyNSwxMCBAQCBzdGF0aWMgY2hhciAqc2V0dXBfdGVzdF9ncm91cF8xTShjb25zdCBjaGFyICpyb290LCBjb25zdCBjaGFyICpuYW1lKQogICogV3JpdGViYWNrIGlzIGFzeW5jaHJvbm91czsgcG9sbCB1bnRpbCBhdCBsZWFzdCBvbmUgd3JpdGViYWNrIGhhcwogICogYmVlbiByZWNvcmRlZCBmb3IgQGNnLCBvciB1bnRpbCBAdGltZW91dF9tcyBoYXMgZWxhcHNlZC4KICAqLwotc3RhdGljIGxvbmcgd2FpdF9mb3Jfd3JpdGViYWNrKGNvbnN0IGNoYXIgKmNnLCBpbnQgdGltZW91dF9tcykKJiM0MztzdGF0aWMgczY0IHdhaXRfZm9yX3dyaXRlYmFjayhjb25zdCBjaGFyICpjZywgaW50IHRpbWVvdXRfbXMpCiB7Ci0JbG9uZyBlbGFwc2VkLCBjb3VudDsKJiM0MzsJbG9uZyBlbGFwc2VkOwomIzQzOwlzNjQgY291bnQ7CiAJZm9yIChlbGFwc2VkID0gMDsgZWxhcHNlZCAmbHQ7IHRpbWVvdXRfbXM7IGVsYXBzZWQgJiM0Mzs9IDEwMCkgewogCQljb3VudCA9IGdldF9jZ193Yl9jb3VudChjZyk7CiAKQEAgLTE0Nyw3ICYjNDM7MTQ4LDcgQEAgc3RhdGljIGxvbmcgd2FpdF9mb3Jfd3JpdGViYWNrKGNvbnN0IGNoYXIgKmNnLCBpbnQgdGltZW91dF9tcykKICAqLwogc3RhdGljIGludCB0ZXN0X3pzd2FwX3VzYWdlKGNvbnN0IGNoYXIgKnJvb3QpCiB7Ci0JbG9uZyB6c3dwb3V0X2JlZm9yZSwgenN3cG91dF9hZnRlcjsKJiM0MzsJczY0IHpzd3BvdXRfYmVmb3JlLCB6c3dwb3V0X2FmdGVyOwogCWludCByZXQgPSBLU0ZUX0ZBSUw7CiAJY2hhciAqdGVzdF9ncm91cDsKIApAQCAtMTkxLDcgJiM0MzsxOTIsOCBAQCBzdGF0aWMgaW50IHRlc3Rfc3dhcGluX25venN3YXAoY29uc3QgY2hhciAqcm9vdCkKIHsKIAlpbnQgcmV0ID0gS1NGVF9GQUlMOwogCWNoYXIgKnRlc3RfZ3JvdXAsIG1lbV9tYXhfYnVmWzMyXTsKLQlsb25nIHN3YXBfcGVhaywgenN3cG91dCwgbWluX3N3YXA7CiYjNDM7CWxvbmcgc3dhcF9wZWFrLCBtaW5fc3dhcDsKJiM0MzsJczY0IHpzd3BvdXQ7CiAJc2l6ZV90IGFsbG9jYXRpb25fc2l6ZSA9IHBhZ2Vfc2l6ZSAqIDUxMjsKIAogCW1pbl9zd2FwID0gYWxsb2NhdGlvbl9zaXplIC8gNDsKQEAgLTI0OCw3ICYjNDM7MjUwLDcgQEAgc3RhdGljIGludCB0ZXN0X3pzd2FwaW4oY29uc3QgY2hhciAqcm9vdCkKIHsKIAlpbnQgcmV0ID0gS1NGVF9GQUlMOwogCWNoYXIgKnRlc3RfZ3JvdXA7Ci0JbG9uZyB6c3dwaW47CiYjNDM7CXM2NCB6c3dwaW47CiAKIAl0ZXN0X2dyb3VwID0gY2dfbmFtZShyb290LCAmIzM0O3pzd2FwaW5fdGVzdCYjMzQ7KTsKIAlpZiAoIXRlc3RfZ3JvdXApCkBAIC0yNjQsNyAmIzQzOzI2Niw3IEBAIHN0YXRpYyBpbnQgdGVzdF96c3dhcGluKGNvbnN0IGNoYXIgKnJvb3QpCiAJaWYgKGNnX3J1bih0ZXN0X2dyb3VwLCBhbGxvY2F0ZV9hbmRfcmVhZF9ieXRlcywgKHZvaWQgKilNQigzMikpKQogCQlnb3RvIG91dDsKIAotCXpzd3BpbiA9IGNnX3JlYWRfa2V5X2xvbmcodGVzdF9ncm91cCwgJiMzNDttZW1vcnkuc3RhdCYjMzQ7LCAmIzM0O3pzd3BpbiAmIzM0Oyk7CiYjNDM7CXpzd3BpbiA9IGNnX3JlYWRfa2V5X3M2NCh0ZXN0X2dyb3VwLCAmIzM0O21lbW9yeS5zdGF0JiMzNDssICYjMzQ7enN3cGluICYjMzQ7KTsKIAlpZiAoenN3cGluICZsdDsgMCkgewogCQlrc2Z0X3ByaW50X21zZygmIzM0O2ZhaWxlZCB0byBnZXQgenN3cGluXG4mIzM0Oyk7CiAJCWdvdG8gb3V0OwpAQCAtMzU1LDExICYjNDM7MzU3LDExIEBAIHN0YXRpYyBpbnQgYXR0ZW1wdF93cml0ZWJhY2soY29uc3QgY2hhciAqY2dyb3VwLCB2b2lkICphcmcpCiAKIHN0YXRpYyBpbnQgdGVzdF96c3dhcF93cml0ZWJhY2tfb25lKGNvbnN0IGNoYXIgKmNncm91cCwgYm9vbCB3YikKIHsKLQlsb25nIHpzd3B3Yl9iZWZvcmUsIHpzd3B3Yl9hZnRlcjsKJiM0MzsJczY0IHpzd3B3Yl9iZWZvcmUsIHpzd3B3Yl9hZnRlcjsKIAogCXpzd3B3Yl9iZWZvcmUgPSBnZXRfY2dfd2JfY291bnQoY2dyb3VwKTsKIAlpZiAoenN3cHdiX2JlZm9yZSAhPSAwKSB7Ci0JCWtzZnRfcHJpbnRfbXNnKCYjMzQ7enN3cHdiX2JlZm9yZSA9ICVsZCBpbnN0ZWFkIG9mIDBcbiYjMzQ7LCB6c3dwd2JfYmVmb3JlKTsKJiM0MzsJCWtzZnRfcHJpbnRfbXNnKCYjMzQ7enN3cHdiX2JlZm9yZSA9ICVsbGQgaW5zdGVhZCBvZiAwXG4mIzM0OywgenN3cHdiX2JlZm9yZSk7CiAJCXJldHVybiAtMTsKIAl9CiAKQEAgLTM3NSw3ICYjNDM7Mzc3LDcgQEAgc3RhdGljIGludCB0ZXN0X3pzd2FwX3dyaXRlYmFja19vbmUoY29uc3QgY2hhciAqY2dyb3VwLCBib29sIHdiKQogCQlyZXR1cm4gLTE7CiAKIAlpZiAod2IgIT0gISF6c3dwd2JfYWZ0ZXIpIHsKLQkJa3NmdF9wcmludF9tc2coJiMzNDt6c3dwd2JfYWZ0ZXIgaXMgJWxkIHdoaWxlIHdiIGlzICVzXG4mIzM0OywKJiM0MzsJCWtzZnRfcHJpbnRfbXNnKCYjMzQ7enN3cHdiX2FmdGVyIGlzICVsbGQgd2hpbGUgd2IgaXMgJXNcbiYjMzQ7LAogCQkJCXpzd3B3Yl9hZnRlciwgd2IgPyAmIzM0O2VuYWJsZWQmIzM0OyA6ICYjMzQ7ZGlzYWJsZWQmIzM0Oyk7CiAJCXJldHVybiAtMTsKIAl9CkBAIC00MDgsNiAmIzQzOzQxMCw4IEBAIHN0YXRpYyBpbnQgdGVzdF96c3dhcF93cml0ZWJhY2soY29uc3QgY2hhciAqcm9vdCwgYm9vbCB3YikKIAkgKiBUaHVzLCB0aGUgcGFyZW50JiMzOTtzIHNldHRpbmcgc2hhbGwgYmUgd2hhdCYjMzk7cyBpbiBlZmZlY3QuICovCiAJaWYgKGNnX3dyaXRlKHRlc3RfZ3JvdXAsICYjMzQ7bWVtb3J5Lnpzd2FwLm1heCYjMzQ7LCAmIzM0O21heCYjMzQ7KSkKIAkJZ290byBvdXQ7CiYjNDM7CWlmIChjZ19yZWFkX3N0cmNtcF93YWl0KHRlc3RfZ3JvdXAsICYjMzQ7Y2dyb3VwLmV2ZW50cyYjMzQ7LCAmIzM0O3BvcHVsYXRlZCAwXG4mIzM0OykpCiYjNDM7CQlnb3RvIG91dDsKIAlpZiAoY2dfd3JpdGUodGVzdF9ncm91cCwgJiMzNDtjZ3JvdXAuc3VidHJlZV9jb250cm9sJiMzNDssICYjMzQ7JiM0MzttZW1vcnkmIzM0OykpCiAJCWdvdG8gb3V0OwogCkBAIC00ODUsNyAmIzQzOzQ4OSw3IEBAIHN0YXRpYyBpbnQgdGVzdF9ub19pbnZhc2l2ZV9jZ3JvdXBfc2hyaW5rKGNvbnN0IGNoYXIgKnJvb3QpCiAJCW1lbXNldCgmYW1wO3p3X2FsbG9jYXRpb25bb2ZmXSwgMCwgcGFnZV9zaXplKTsKIAkJbWVtc2V0KCZhbXA7endfYWxsb2NhdGlvbltvZmZdLCAmIzM5O2EmIzM5OywgcGFnZV9zaXplLzQpOwogCX0KLQlpZiAoY2dfcmVhZF9rZXlfbG9uZyh6d19ncm91cCwgJiMzNDttZW1vcnkuc3RhdCYjMzQ7LCAmIzM0O3pzd2FwcGVkJiMzNDspICZsdDsgMSkKJiM0MzsJaWYgKGNnX3JlYWRfa2V5X3M2NCh6d19ncm91cCwgJiMzNDttZW1vcnkuc3RhdCYjMzQ7LCAmIzM0O3pzd2FwcGVkJiMzNDspICZsdDsgMSkKIAkJZ290byBvdXQ7CiAKIAkvKiBQdXNoIHdiX2dyb3VwIG1lbW9yeSBpbnRvIHpzd2FwIHdpdGggaGFyZC10by1jb21wcmVzcyBkYXRhIHRvIHRyaWdnZXIgd2IgKi8KQEAgLTYyOCwxMSAmIzQzOzYzMiwxMiBAQCBzdGF0aWMgaW50IHRlc3Rfbm9fa21lbV9ieXBhc3MoY29uc3QgY2hhciAqcm9vdCkKIAkJCWJyZWFrOwogCQkvKiBJZiBtZW1vcnkgd2FzIHB1c2hlZCB0byB6c3dhcCwgdmVyaWZ5IGl0IGJlbG9uZ3MgdG8gbWVtY2cgKi8KIAkJaWYgKHN0b3JlZF9wYWdlcyAmZ3Q7IHN0b3JlZF9wYWdlc190aHJlc2hvbGQpIHsKLQkJCWludCB6c3dhcHBlZCA9IGNnX3JlYWRfa2V5X2xvbmcodGVzdF9ncm91cCwgJiMzNDttZW1vcnkuc3RhdCYjMzQ7LCAmIzM0O3pzd2FwcGVkICYjMzQ7KTsKLQkJCWludCBkZWx0YSA9IHN0b3JlZF9wYWdlcyAqIHBhZ2Vfc2l6ZSAtIHpzd2FwcGVkOwotCQkJaW50IHJlc3VsdF9vayA9IGRlbHRhICZsdDsgc3RvcmVkX3BhZ2VzICogcGFnZV9zaXplIC8gNDsKJiM0MzsJCQlzNjQgenN3YXBwZWQgPSBjZ19yZWFkX2tleV9zNjQoCiYjNDM7CQkJCXRlc3RfZ3JvdXAsICYjMzQ7bWVtb3J5LnN0YXQmIzM0OywgJiMzNDt6c3dhcHBlZCAmIzM0Oyk7CiYjNDM7CQkJczY0IGRlbHRhID0gKHM2NClzdG9yZWRfcGFnZXMgKiBwYWdlX3NpemUgLSB6c3dhcHBlZDsKJiM0MzsJCQlzNjQgbWF4X2RlbHRhID0gKHM2NClzdG9yZWRfcGFnZXMgKiBwYWdlX3NpemUgLyA0OwogCi0JCQlyZXQgPSByZXN1bHRfb2sgPyBLU0ZUX1BBU1MgOiBLU0ZUX0ZBSUw7CiYjNDM7CQkJcmV0ID0gKGRlbHRhICZsdDsgbWF4X2RlbHRhKSA/IEtTRlRfUEFTUyA6IEtTRlRfRkFJTDsKIAkJCWJyZWFrOwogCQl9CiAJfQpAQCAtNzAxLDkgJiM0Mzs3MDYsOSBAQCBzdGF0aWMgaW50IGFsbG9jYXRlX3JhbmRvbV9hbmRfd2FpdChjb25zdCBjaGFyICpjZ3JvdXAsIHZvaWQgKmFyZykKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGxvbmcgZ2V0X3pzd2FwX2luY29tcChjb25zdCBjaGFyICpjZ3JvdXApCiYjNDM7c3RhdGljIHM2NCBnZXRfenN3YXBfaW5jb21wKGNvbnN0IGNoYXIgKmNncm91cCkKIHsKLQlyZXR1cm4gY2dfcmVhZF9rZXlfbG9uZyhjZ3JvdXAsICYjMzQ7bWVtb3J5LnN0YXQmIzM0OywgJiMzNDt6c3dhcF9pbmNvbXAgJiMzNDspOwomIzQzOwlyZXR1cm4gY2dfcmVhZF9rZXlfczY0KGNncm91cCwgJiMzNDttZW1vcnkuc3RhdCYjMzQ7LCAmIzM0O3pzd2FwX2luY29tcCAmIzM0Oyk7CiB9CiAKIC8qCkBAIC03MTksNyAmIzQzOzcyNCw3IEBAIHN0YXRpYyBpbnQgdGVzdF96c3dhcF9pbmNvbXByZXNzaWJsZShjb25zdCBjaGFyICpyb290KQogCWludCByZXQgPSBLU0ZUX0ZBSUw7CiAJc3RydWN0IGluY29tcF9jaGlsZF9hcmdzICp2YWx1ZXM7CiAJY2hhciAqdGVzdF9ncm91cDsKLQlsb25nIHpzd2FwX2luY29tcDsKJiM0MzsJczY0IHpzd2FwX2luY29tcDsKIAlwaWRfdCBjaGlsZF9waWQ7CiAJaW50IGNoaWxkX3N0YXR1czsKIAljaGFyIGJ1ZjsKQEAgLTc1NSwxMyAmIzQzOzc2MCwxNSBAQCBzdGF0aWMgaW50IHRlc3RfenN3YXBfaW5jb21wcmVzc2libGUoY29uc3QgY2hhciAqcm9vdCkKIAogCXpzd2FwX2luY29tcCA9IGdldF96c3dhcF9pbmNvbXAodGVzdF9ncm91cCk7CiAJaWYgKHpzd2FwX2luY29tcCAmbHQ7PSAwKSB7Ci0JCWxvbmcgenN3cG91dCA9IGdldF96c3dwb3V0KHRlc3RfZ3JvdXApOwotCQlsb25nIHpzd2FwcGVkID0gY2dfcmVhZF9rZXlfbG9uZyh0ZXN0X2dyb3VwLCAmIzM0O21lbW9yeS5zdGF0JiMzNDssICYjMzQ7enN3YXBwZWQgJiMzNDspOwotCQlsb25nIHpzd2FwX2IgPSBjZ19yZWFkX2tleV9sb25nKHRlc3RfZ3JvdXAsICYjMzQ7bWVtb3J5LnN0YXQmIzM0OywgJiMzNDt6c3dhcCAmIzM0Oyk7Ci0KLQkJa3NmdF9wcmludF9tc2coJiMzNDt6c3dhcF9pbmNvbXAgbm90IGluY3JlYXNlZDogJWxkXG4mIzM0OywgenN3YXBfaW5jb21wKTsKLQkJa3NmdF9wcmludF9tc2coJiMzNDtkZWJ1ZzogenN3cG91dD0lbGQgenN3YXBwZWQ9JWxkIHpzd2FwX2I9JWxkXG4mIzM0OywKLQkJCSAgICAgICB6c3dwb3V0LCB6c3dhcHBlZCwgenN3YXBfYik7CiYjNDM7CQlzNjQgenN3cG91dCA9IGdldF96c3dwb3V0KHRlc3RfZ3JvdXApOwomIzQzOwkJczY0IHpzd2FwcGVkID0KJiM0MzsJCQljZ19yZWFkX2tleV9zNjQodGVzdF9ncm91cCwgJiMzNDttZW1vcnkuc3RhdCYjMzQ7LCAmIzM0O3pzd2FwcGVkICYjMzQ7KTsKJiM0MzsJCXM2NCB6c3dhcF9iID0KJiM0MzsJCQljZ19yZWFkX2tleV9zNjQodGVzdF9ncm91cCwgJiMzNDttZW1vcnkuc3RhdCYjMzQ7LCAmIzM0O3pzd2FwICYjMzQ7KTsKJiM0MzsKJiM0MzsJCWtzZnRfcHJpbnRfbXNnKCYjMzQ7enN3YXBfaW5jb21wIG5vdCBpbmNyZWFzZWQ6ICVsbGRcbiYjMzQ7LCB6c3dhcF9pbmNvbXApOwomIzQzOwkJa3NmdF9wcmludF9tc2coJiMzNDtkZWJ1ZzogenN3cG91dD0lbGxkIHpzd2FwcGVkPSVsbGQgenN3YXBfYj0lbGxkXG4mIzM0OywKJiM0MzsJCQkJenN3cG91dCwgenN3YXBwZWQsIHpzd2FwX2IpOwogCQlrc2Z0X3ByaW50X21zZygmIzM0O2RlYnVnOiBtYWR2aXNlIHJldD0lZCBlcnJubz0lZFxuJiMzNDssCiAJCQkgICAgICAgdmFsdWVzLSZndDttYWR2aXNlX3JldCwgdmFsdWVzLSZndDttYWR2aXNlX2Vycm5vKTsKIAkJZ290byBvdXRfa2lsbDsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMDg6NTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTYzMDQKCQkJCQkJCW91dHB1dDogNzMKCQkJCQkJCXRob3VnaHRzOiA0NjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyBFdmFsdWF0aW9uOiBDZ3JvdXAgU2VsZnRlc3RzIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBhc3Nlc3MgdGhpcyBwYXRjaCBzZXJpZXMgZm9yIHN5emthbGxlciBmdXp6aW5nIHBvdGVudGlhbC4gRmlyc3QsIEkgbmVlZCB0byBzZWUgdGhlIHNjb3BlIG9mIHRoZSBtb2RpZmljYXRpb25zLiBMb29raW5nIGF0IHRoZSBkaWZmLCBpdCBhcHBlYXJzIHRoZSBjaGFuZ2VzIGFyZSBsaW1pdGVkIHRvIHRoZXNlIGZpbGVzOgoKKiAgIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9jZ3JvdXAvbGliL2Nncm91cF91dGlsLmNgCiogICBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvY2dyb3VwL2xpYi9pbmNsdWRlL2Nncm91cF91dGlsLmhgCiogICBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvY2dyb3VwL3Rlc3RfY3B1LmNgCiogICBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvY2dyb3VwL3Rlc3RfZnJlZXplci5jYAoqICAgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2Nncm91cC90ZXN0X2ttZW0uY2AKKiAgIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9jZ3JvdXAvdGVzdF9tZW1jb250cm9sLmNgCiogICBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvY2dyb3VwL3Rlc3RfcGlkcy5jYAoqICAgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2Nncm91cC90ZXN0X3pzd2FwLmNgCgpBbGwgb2YgdGhlc2UgYXJlIGNvbnRhaW5lZCB3aXRoaW4gdGhlIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9jZ3JvdXAvYCBkaXJlY3RvcnksIHdoaWNoIGltbWVkaWF0ZWx5IHJhaXNlcyBhIGZsYWcuIE5vdywgbGV0JiMzOTtzIGFwcGx5IHRoZSBndWlkZWxpbmVzLiBTcGVjaWZpY2FsbHksIHRoZSAmIzM0O05FR0FUSVZFIENSSVRFUklBJiMzNDsgc2VjdGlvbiBkaWN0YXRlcyB3aGVuIHdlICpzaG91bGRuJiMzOTt0KiBmdXp6LiBBbmQgdGhlIHJ1bGUgaXMgcHJldHR5IGNsZWFyOiBjaGFuZ2VzIHRvIHVzZXItc3BhY2Ugc2VsZi10ZXN0cyBhcmUgYSBuby1nbywgYXMgbG9uZyBhcyB0aGV5IGRvbiYjMzk7dCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAoYHZtbGludXhgKSBvciBrZXJuZWwgbW9kdWxlcy4KCkdpdmVuIHRoYXQgdGhlc2UgbW9kaWZpY2F0aW9ucyBhcmUgc3RyaWN0bHkgd2l0aGluIHRoZSBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvY2dyb3VwL2AgZGlyZWN0b3J5LCB3aGljaCBJIGtub3cgaXMgZGVkaWNhdGVkIHRvIHVzZXItc3BhY2Ugc2VsZi10ZXN0cyBhbmQgYXJlIG5vdCByZWxhdGVkIHRvIGtlcm5lbCBjb2RlLCBpdCYjMzk7cyBjbGVhciB0aGVzZSBtb2RpZmljYXRpb25zIGRvbiYjMzk7dCBmYWxsIGludG8gdGhlIGNhdGVnb3JpZXMgdGhhdCB3YXJyYW50IGZ1enppbmcgd2l0aCBzeXprYWxsZXIuCgpUaGVyZWZvcmU6CgoqICAgYFdvcnRoRnV6emluZyA9IGZhbHNlYAoqICAgYEZvY3VzU3ltYm9scyA9IFtdYCAobm8gc3BlY2lmaWMgc3ltYm9scyBuZWVkIHRvIGJlIHRyYWNrZWQpCiogICBgRW5hYmxlQ29uZmlncyA9IFtdYCAobm8gc3BlY2lmaWMgY29uZmlndXJhdGlvbnMgYXJlIG5lZWRlZCkKKiAgIGBSZWFzb25pbmcgPSAmIzM0O1RoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIHVzZXItc3BhY2UgY2dyb3VwIHNlbGZ0ZXN0cyB1bmRlciB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9jZ3JvdXAvIGFuZCBkb2VzIG5vdCBhZmZlY3QgdGhlIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuJiMzNDtgCgpJJiMzOTttIGNvbmZpZGVudCBpbiB0aGlzIGV2YWx1YXRpb24uIExldCYjMzk7cyBjYWxsIGBzZXQtcmVzdWx0c2AgdG8gcmVjb3JkIHRoaXMgZGVjaXNpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMDg6NTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBvbmx5IHVzZXItc3BhY2UgY2dyb3VwIHNlbGYtdGVzdHMgdW5kZXIgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvY2dyb3VwLyBhbmQgZG9lcyBub3QgdG91Y2ggYW55IGtlcm5lbCBjb2RlIG9yIGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIG9ubHkgdXNlci1zcGFjZSBjZ3JvdXAgc2VsZi10ZXN0cyB1bmRlciB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9jZ3JvdXAvIGFuZCBkb2VzIG5vdCB0b3VjaCBhbnkga2VybmVsIGNvZGUgb3IgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwODo1MTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMDZUMDg6NTE6MTYuNDIyNDE3NzYxWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTMwMzU5MTQ5MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIG9ubHkgdXNlci1zcGFjZSBjZ3JvdXAgc2VsZi10ZXN0cyB1bmRlciB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9jZ3JvdXAvIGFuZCBkb2VzIG5vdCB0b3VjaCBhbnkga2VybmVsIGNvZGUgb3IgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMDg6NTE6MTYuNDIyNDI2NDIxWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NjcwOTU4MTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCAxMWE5ZjA5ZjU2MGIwMjY5NTQwMWRkMmM2Y2MzZjE5OTdmNzhhNjQyXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBTdW4gU2VwIDYgMDg6NTE6MTUgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvY2dyb3VwL2xpYi9jZ3JvdXBfdXRpbC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvY2dyb3VwL2xpYi9jZ3JvdXBfdXRpbC5jXFxuaW5kZXggMjU5NmMxMmNkODY0NS4uZWQzYzQ4OTM4MzNhNSAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9jZ3JvdXAvbGliL2Nncm91cF91dGlsLmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9jZ3JvdXAvbGliL2Nncm91cF91dGlsLmNcXG5AQCAtMTcyLDcgKzE3Miw3IEBAIGxvbmcgY2dfcmVhZF9sb25nX2ZkKGludCBmZClcXG4gXFx0cmV0dXJuIGF0b2woYnVmKTtcXG4gfVxcbiBcXG4tbG9uZyBjZ19yZWFkX2tleV9sb25nKGNvbnN0IGNoYXIgKmNncm91cCwgY29uc3QgY2hhciAqY29udHJvbCwgY29uc3QgY2hhciAqa2V5KVxcbitzNjQgY2dfcmVhZF9rZXlfczY0KGNvbnN0IGNoYXIgKmNncm91cCwgY29uc3QgY2hhciAqY29udHJvbCwgY29uc3QgY2hhciAqa2V5KVxcbiB7XFxuIFxcdGNoYXIgYnVmW0JVRl9TSVpFXTtcXG4gXFx0Y2hhciAqcHRyO1xcbkBAIC0xODQsMTggKzE4NCwxOCBAQCBsb25nIGNnX3JlYWRfa2V5X2xvbmcoY29uc3QgY2hhciAqY2dyb3VwLCBjb25zdCBjaGFyICpjb250cm9sLCBjb25zdCBjaGFyICprZXkpXFxuIFxcdGlmICghcHRyKVxcbiBcXHRcXHRyZXR1cm4gLTE7XFxuIFxcbi1cXHRyZXR1cm4gYXRvbChwdHIgKyBzdHJsZW4oa2V5KSk7XFxuK1xcdHJldHVybiBhdG9sbChwdHIgKyBzdHJsZW4oa2V5KSk7XFxuIH1cXG4gXFxuLWxvbmcgY2dfcmVhZF9rZXlfbG9uZ19wb2xsKGNvbnN0IGNoYXIgKmNncm91cCwgY29uc3QgY2hhciAqY29udHJvbCxcXG4tXFx0XFx0XFx0ICAgY29uc3QgY2hhciAqa2V5LCBsb25nIGV4cGVjdGVkLCBpbnQgcmV0cmllcyxcXG4tXFx0XFx0XFx0ICAgdXNlY29uZHNfdCB3YWl0X2ludGVydmFsX3VzKVxcbitzNjQgY2dfcmVhZF9rZXlfczY0X3BvbGwoY29uc3QgY2hhciAqY2dyb3VwLCBjb25zdCBjaGFyICpjb250cm9sLFxcbitcXHRcXHRcXHQgY29uc3QgY2hhciAqa2V5LCBzNjQgZXhwZWN0ZWQsIGludCByZXRyaWVzLFxcbitcXHRcXHRcXHQgdXNlY29uZHNfdCB3YWl0X2ludGVydmFsX3VzKVxcbiB7XFxuLVxcdGxvbmcgdmFsID0gLTE7XFxuK1xcdHM2NCB2YWwgPSAtMTtcXG4gXFx0aW50IGk7XFxuIFxcbiBcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgcmV0cmllczsgaSsrKSB7XFxuLVxcdFxcdHZhbCA9IGNnX3JlYWRfa2V5X2xvbmcoY2dyb3VwLCBjb250cm9sLCBrZXkpO1xcbitcXHRcXHR2YWwgPSBjZ19yZWFkX2tleV9zNjQoY2dyb3VwLCBjb250cm9sLCBrZXkpO1xcbiBcXHRcXHRpZiAodmFsIFxcdTAwM2MgMClcXG4gXFx0XFx0XFx0cmV0dXJuIHZhbDtcXG4gXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2Nncm91cC9saWIvaW5jbHVkZS9jZ3JvdXBfdXRpbC5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvY2dyb3VwL2xpYi9pbmNsdWRlL2Nncm91cF91dGlsLmhcXG5pbmRleCA1ZDM5YzcwOWFjN2E0Li5kZGIwNTkzMmQ5Yzc3IDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2Nncm91cC9saWIvaW5jbHVkZS9jZ3JvdXBfdXRpbC5oXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvY2dyb3VwL2xpYi9pbmNsdWRlL2Nncm91cF91dGlsLmhcXG5AQCAtMiw2ICsyLDggQEBcXG4gI2luY2x1ZGUgXFx1MDAzY3N0ZGJvb2wuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY3N0ZGxpYi5oXFx1MDAzZVxcbiBcXG4rdHlwZWRlZiBzaWduZWQgbG9uZyBsb25nIHM2NDtcXG4rXFxuICNpZm5kZWYgQlVGX1NJWkVcXG4gI2RlZmluZSBCVUZfU0laRSA0MDk2XFxuICNlbmRpZlxcbkBAIC0yNCwyNSArMjYsMjUgQEBcXG4gLypcXG4gICogQ2hlY2tzIGlmIHR3byBnaXZlbiB2YWx1ZXMgZGlmZmVyIGJ5IGxlc3MgdGhhbiBlcnIlIG9mIHRoZWlyIHN1bS5cXG4gICovXFxuLXN0YXRpYyBpbmxpbmUgaW50IHZhbHVlc19jbG9zZShsb25nIGEsIGxvbmcgYiwgaW50IGVycilcXG4rc3RhdGljIGlubGluZSBpbnQgdmFsdWVzX2Nsb3NlKHM2NCBhLCBzNjQgYiwgaW50IGVycilcXG4ge1xcbi1cXHRyZXR1cm4gbGFicyhhIC0gYikgXFx1MDAzYz0gKGEgKyBiKSAvIDEwMCAqIGVycjtcXG4rXFx0cmV0dXJuIGxsYWJzKGEgLSBiKSBcXHUwMDNjPSAoYSArIGIpIC8gMTAwICogZXJyO1xcbiB9XFxuIFxcbiAvKlxcbiAgKiBDaGVja3MgaWYgdHdvIGdpdmVuIHZhbHVlcyBkaWZmZXIgYnkgbGVzcyB0aGFuIGVyciUgb2YgdGhlaXIgc3VtIGFuZCBhc3NlcnRcXG4gICogd2l0aCBkZXRhaWxlZCBkZWJ1ZyBpbmZvIGlmIG5vdC5cXG4gICovXFxuLXN0YXRpYyBpbmxpbmUgaW50IHZhbHVlc19jbG9zZV9yZXBvcnQobG9uZyBhLCBsb25nIGIsIGludCBlcnIpXFxuK3N0YXRpYyBpbmxpbmUgaW50IHZhbHVlc19jbG9zZV9yZXBvcnQoczY0IGEsIHM2NCBiLCBpbnQgZXJyKVxcbiB7XFxuLVxcdGxvbmcgZGlmZiAgPSBsYWJzKGEgLSBiKTtcXG4tXFx0bG9uZyBsaW1pdCA9IChhICsgYikgLyAxMDAgKiBlcnI7XFxuK1xcdHM2NCBkaWZmICA9IGxsYWJzKGEgLSBiKTtcXG4rXFx0czY0IGxpbWl0ID0gKGEgKyBiKSAvIDEwMCAqIGVycjtcXG4gXFx0ZG91YmxlIGFjdHVhbF9lcnIgPSAoYSArIGIpID8gKDEwMC4wICogZGlmZiAvIChhICsgYikpIDogMC4wO1xcbiBcXHRpbnQgY2xvc2UgPSBkaWZmIFxcdTAwM2M9IGxpbWl0O1xcbiBcXG4gXFx0aWYgKCFjbG9zZSlcXG4gXFx0XFx0ZnByaW50ZihzdGRlcnIsXFxuLVxcdFxcdFxcdFxcXCJbRkFJTF0gYWN0dWFsPSVsZCBleHBlY3RlZD0lbGQgfCBkaWZmPSVsZCB8IGxpbWl0PSVsZCB8IFxcXCJcXG4rXFx0XFx0XFx0XFxcIltGQUlMXSBhY3R1YWw9JWxsZCBleHBlY3RlZD0lbGxkIHwgZGlmZj0lbGxkIHwgbGltaXQ9JWxsZCB8IFxcXCJcXG4gXFx0XFx0XFx0XFxcInRvbGVyYW5jZT0lZCUlIHwgYWN0dWFsX2Vycm9yPSUuMmYlJVxcXFxuXFxcIixcXG4gXFx0XFx0XFx0YSwgYiwgZGlmZiwgbGltaXQsIGVyciwgYWN0dWFsX2Vycik7XFxuIFxcbkBAIC02OSwxMCArNzEsMTAgQEAgZXh0ZXJuIGludCBjZ19yZWFkX3N0cnN0cihjb25zdCBjaGFyICpjZ3JvdXAsIGNvbnN0IGNoYXIgKmNvbnRyb2wsXFxuIFxcdFxcdFxcdCAgY29uc3QgY2hhciAqbmVlZGxlKTtcXG4gZXh0ZXJuIGxvbmcgY2dfcmVhZF9sb25nKGNvbnN0IGNoYXIgKmNncm91cCwgY29uc3QgY2hhciAqY29udHJvbCk7XFxuIGV4dGVybiBsb25nIGNnX3JlYWRfbG9uZ19mZChpbnQgZmQpO1xcbi1sb25nIGNnX3JlYWRfa2V5X2xvbmcoY29uc3QgY2hhciAqY2dyb3VwLCBjb25zdCBjaGFyICpjb250cm9sLCBjb25zdCBjaGFyICprZXkpO1xcbi1sb25nIGNnX3JlYWRfa2V5X2xvbmdfcG9sbChjb25zdCBjaGFyICpjZ3JvdXAsIGNvbnN0IGNoYXIgKmNvbnRyb2wsXFxuLVxcdFxcdFxcdCAgIGNvbnN0IGNoYXIgKmtleSwgbG9uZyBleHBlY3RlZCwgaW50IHJldHJpZXMsXFxuLVxcdFxcdFxcdCAgIHVzZWNvbmRzX3Qgd2FpdF9pbnRlcnZhbF91cyk7XFxuK3M2NCBjZ19yZWFkX2tleV9zNjQoY29uc3QgY2hhciAqY2dyb3VwLCBjb25zdCBjaGFyICpjb250cm9sLCBjb25zdCBjaGFyICprZXkpO1xcbitzNjQgY2dfcmVhZF9rZXlfczY0X3BvbGwoY29uc3QgY2hhciAqY2dyb3VwLCBjb25zdCBjaGFyICpjb250cm9sLFxcbitcXHRcXHRcXHQgY29uc3QgY2hhciAqa2V5LCBzNjQgZXhwZWN0ZWQsIGludCByZXRyaWVzLFxcbitcXHRcXHRcXHQgdXNlY29uZHNfdCB3YWl0X2ludGVydmFsX3VzKTtcXG4gZXh0ZXJuIGxvbmcgY2dfcmVhZF9sYyhjb25zdCBjaGFyICpjZ3JvdXAsIGNvbnN0IGNoYXIgKmNvbnRyb2wpO1xcbiBleHRlcm4gaW50IGNnX3dyaXRlKGNvbnN0IGNoYXIgKmNncm91cCwgY29uc3QgY2hhciAqY29udHJvbCwgY2hhciAqYnVmKTtcXG4gZXh0ZXJuIGludCBjZ19vcGVuKGNvbnN0IGNoYXIgKmNncm91cCwgY29uc3QgY2hhciAqY29udHJvbCwgaW50IGZsYWdzKTtcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvY2dyb3VwL3Rlc3RfY3B1LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9jZ3JvdXAvdGVzdF9jcHUuY1xcbmluZGV4IDczNWE1M2JiMjIyYmEuLjExZGExZGU5Y2RlYjYgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvY2dyb3VwL3Rlc3RfY3B1LmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9jZ3JvdXAvdGVzdF9jcHUuY1xcbkBAIC0yNCw3ICsyNCw3IEBAIGVudW0gaG9nX2Nsb2NrX3R5cGUge1xcbiBzdHJ1Y3QgY3B1X2hvZ2dlciB7XFxuIFxcdGNoYXIgKmNncm91cDtcXG4gXFx0cGlkX3QgcGlkO1xcbi1cXHRsb25nIHVzYWdlO1xcbitcXHRzNjQgdXNhZ2U7XFxuIH07XFxuIFxcbiBzdHJ1Y3QgY3B1X2hvZ19mdW5jX3BhcmFtIHtcXG5AQCAtMTg1LDcgKzE4NSw3IEBAIHN0YXRpYyBpbnQgaG9nX2NwdXNfdGltZWQoY29uc3QgY2hhciAqY2dyb3VwLCB2b2lkICphcmcpXFxuIHN0YXRpYyBpbnQgdGVzdF9jcHVjZ19zdGF0cyhjb25zdCBjaGFyICpyb290KVxcbiB7XFxuIFxcdGludCByZXQgPSBLU0ZUX0ZBSUw7XFxuLVxcdGxvbmcgdXNhZ2VfdXNlYywgdXNlcl91c2VjLCBzeXN0ZW1fdXNlYztcXG4rXFx0czY0IHVzYWdlX3VzZWMsIHVzZXJfdXNlYywgc3lzdGVtX3VzZWM7XFxuIFxcdGxvbmcgdXNhZ2Vfc2Vjb25kcyA9IDI7XFxuIFxcdGxvbmcgZXhwZWN0ZWRfdXNhZ2VfdXNlYyA9IHVzYWdlX3NlY29uZHMgKiBVU0VDX1BFUl9TRUM7XFxuIFxcdGNoYXIgKmNwdWNnO1xcbkBAIC0xOTcsOSArMTk3LDkgQEAgc3RhdGljIGludCB0ZXN0X2NwdWNnX3N0YXRzKGNvbnN0IGNoYXIgKnJvb3QpXFxuIFxcdGlmIChjZ19jcmVhdGUoY3B1Y2cpKVxcbiBcXHRcXHRnb3RvIGNsZWFudXA7XFxuIFxcbi1cXHR1c2FnZV91c2VjID0gY2dfcmVhZF9rZXlfbG9uZyhjcHVjZywgXFxcImNwdS5zdGF0XFxcIiwgXFxcInVzYWdlX3VzZWNcXFwiKTtcXG4tXFx0dXNlcl91c2VjID0gY2dfcmVhZF9rZXlfbG9uZyhjcHVjZywgXFxcImNwdS5zdGF0XFxcIiwgXFxcInVzZXJfdXNlY1xcXCIpO1xcbi1cXHRzeXN0ZW1fdXNlYyA9IGNnX3JlYWRfa2V5X2xvbmcoY3B1Y2csIFxcXCJjcHUuc3RhdFxcXCIsIFxcXCJzeXN0ZW1fdXNlY1xcXCIpO1xcbitcXHR1c2FnZV91c2VjID0gY2dfcmVhZF9rZXlfczY0KGNwdWNnLCBcXFwiY3B1LnN0YXRcXFwiLCBcXFwidXNhZ2VfdXNlY1xcXCIpO1xcbitcXHR1c2VyX3VzZWMgPSBjZ19yZWFkX2tleV9zNjQoY3B1Y2csIFxcXCJjcHUuc3RhdFxcXCIsIFxcXCJ1c2VyX3VzZWNcXFwiKTtcXG4rXFx0c3lzdGVtX3VzZWMgPSBjZ19yZWFkX2tleV9zNjQoY3B1Y2csIFxcXCJjcHUuc3RhdFxcXCIsIFxcXCJzeXN0ZW1fdXNlY1xcXCIpO1xcbiBcXHRpZiAodXNhZ2VfdXNlYyAhPSAwIHx8IHVzZXJfdXNlYyAhPSAwIHx8IHN5c3RlbV91c2VjICE9IDApXFxuIFxcdFxcdGdvdG8gY2xlYW51cDtcXG4gXFxuQEAgLTIxNCw4ICsyMTQsOCBAQCBzdGF0aWMgaW50IHRlc3RfY3B1Y2dfc3RhdHMoY29uc3QgY2hhciAqcm9vdClcXG4gXFx0aWYgKGNnX3J1bihjcHVjZywgaG9nX2NwdXNfdGltZWQsICh2b2lkICopXFx1MDAyNnBhcmFtKSlcXG4gXFx0XFx0Z290byBjbGVhbnVwO1xcbiBcXG4tXFx0dXNhZ2VfdXNlYyA9IGNnX3JlYWRfa2V5X2xvbmcoY3B1Y2csIFxcXCJjcHUuc3RhdFxcXCIsIFxcXCJ1c2FnZV91c2VjXFxcIik7XFxuLVxcdHVzZXJfdXNlYyA9IGNnX3JlYWRfa2V5X2xvbmcoY3B1Y2csIFxcXCJjcHUuc3RhdFxcXCIsIFxcXCJ1c2VyX3VzZWNcXFwiKTtcXG4rXFx0dXNhZ2VfdXNlYyA9IGNnX3JlYWRfa2V5X3M2NChjcHVjZywgXFxcImNwdS5zdGF0XFxcIiwgXFxcInVzYWdlX3VzZWNcXFwiKTtcXG4rXFx0dXNlcl91c2VjID0gY2dfcmVhZF9rZXlfczY0KGNwdWNnLCBcXFwiY3B1LnN0YXRcXFwiLCBcXFwidXNlcl91c2VjXFxcIik7XFxuIFxcdGlmICh1c2VyX3VzZWMgXFx1MDAzYz0gMClcXG4gXFx0XFx0Z290byBjbGVhbnVwO1xcbiBcXG5AQCAtMjM5LDcgKzIzOSw3IEBAIHN0YXRpYyBpbnQgdGVzdF9jcHVjZ19uaWNlKGNvbnN0IGNoYXIgKnJvb3QpXFxuIHtcXG4gXFx0aW50IHJldCA9IEtTRlRfRkFJTDtcXG4gXFx0aW50IHN0YXR1cztcXG4tXFx0bG9uZyB1c2VyX3VzZWMsIG5pY2VfdXNlYztcXG4rXFx0czY0IHVzZXJfdXNlYywgbmljZV91c2VjO1xcbiBcXHRsb25nIHVzYWdlX3NlY29uZHMgPSAyO1xcbiBcXHRsb25nIGV4cGVjdGVkX25pY2VfdXNlYyA9IHVzYWdlX3NlY29uZHMgKiBVU0VDX1BFUl9TRUM7XFxuIFxcdGNoYXIgKmNwdWNnO1xcbkBAIC0yNTIsOCArMjUyLDggQEAgc3RhdGljIGludCB0ZXN0X2NwdWNnX25pY2UoY29uc3QgY2hhciAqcm9vdClcXG4gXFx0aWYgKGNnX2NyZWF0ZShjcHVjZykpXFxuIFxcdFxcdGdvdG8gY2xlYW51cDtcXG4gXFxuLVxcdHVzZXJfdXNlYyA9IGNnX3JlYWRfa2V5X2xvbmcoY3B1Y2csIFxcXCJjcHUuc3RhdFxcXCIsIFxcXCJ1c2VyX3VzZWNcXFwiKTtcXG4tXFx0bmljZV91c2VjID0gY2dfcmVhZF9rZXlfbG9uZyhjcHVjZywgXFxcImNwdS5zdGF0XFxcIiwgXFxcIm5pY2VfdXNlY1xcXCIpO1xcbitcXHR1c2VyX3VzZWMgPSBjZ19yZWFkX2tleV9zNjQoY3B1Y2csIFxcXCJjcHUuc3RhdFxcXCIsIFxcXCJ1c2VyX3VzZWNcXFwiKTtcXG4rXFx0bmljZV91c2VjID0gY2dfcmVhZF9rZXlfczY0KGNwdWNnLCBcXFwiY3B1LnN0YXRcXFwiLCBcXFwibmljZV91c2VjXFxcIik7XFxuIFxcdGlmIChuaWNlX3VzZWMgPT0gLTEpXFxuIFxcdFxcdHJldCA9IEtTRlRfU0tJUDtcXG4gXFx0aWYgKHVzZXJfdXNlYyAhPSAwIHx8IG5pY2VfdXNlYyAhPSAwKVxcbkBAIC0yODksOCArMjg5LDggQEAgc3RhdGljIGludCB0ZXN0X2NwdWNnX25pY2UoY29uc3QgY2hhciAqcm9vdClcXG4gXFx0XFx0aWYgKCFXSUZFWElURUQoc3RhdHVzKSlcXG4gXFx0XFx0XFx0Z290byBjbGVhbnVwO1xcbiBcXG4tXFx0XFx0dXNlcl91c2VjID0gY2dfcmVhZF9rZXlfbG9uZyhjcHVjZywgXFxcImNwdS5zdGF0XFxcIiwgXFxcInVzZXJfdXNlY1xcXCIpO1xcbi1cXHRcXHRuaWNlX3VzZWMgPSBjZ19yZWFkX2tleV9sb25nKGNwdWNnLCBcXFwiY3B1LnN0YXRcXFwiLCBcXFwibmljZV91c2VjXFxcIik7XFxuK1xcdFxcdHVzZXJfdXNlYyA9IGNnX3JlYWRfa2V5X3M2NChjcHVjZywgXFxcImNwdS5zdGF0XFxcIiwgXFxcInVzZXJfdXNlY1xcXCIpO1xcbitcXHRcXHRuaWNlX3VzZWMgPSBjZ19yZWFkX2tleV9zNjQoY3B1Y2csIFxcXCJjcHUuc3RhdFxcXCIsIFxcXCJuaWNlX3VzZWNcXFwiKTtcXG4gXFx0XFx0aWYgKHVzZXJfdXNlYyBcXHUwMDNjPSAwKVxcbiBcXHRcXHRcXHRnb3RvIGNsZWFudXA7XFxuIFxcdFxcdGlmICghdmFsdWVzX2Nsb3NlX3JlcG9ydChuaWNlX3VzZWMsIGV4cGVjdGVkX25pY2VfdXNlYywgMSkpXFxuQEAgLTM1Nyw4ICszNTcsOCBAQCBydW5fY3B1Y2dfd2VpZ2h0X3Rlc3QoXFxuIFxcdH1cXG4gXFxuIFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBBUlJBWV9TSVpFKGNoaWxkcmVuKTsgaSsrKVxcbi1cXHRcXHRjaGlsZHJlbltpXS51c2FnZSA9IGNnX3JlYWRfa2V5X2xvbmcoY2hpbGRyZW5baV0uY2dyb3VwLFxcbi1cXHRcXHRcXHRcXHRcXFwiY3B1LnN0YXRcXFwiLCBcXFwidXNhZ2VfdXNlY1xcXCIpO1xcbitcXHRcXHRjaGlsZHJlbltpXS51c2FnZSA9IGNnX3JlYWRfa2V5X3M2NChjaGlsZHJlbltpXS5jZ3JvdXAsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgICBcXFwiY3B1LnN0YXRcXFwiLCBcXFwidXNhZ2VfdXNlY1xcXCIpO1xcbiBcXG4gXFx0aWYgKHZhbGlkYXRlKGNoaWxkcmVuLCBBUlJBWV9TSVpFKGNoaWxkcmVuKSkpXFxuIFxcdFxcdGdvdG8gY2xlYW51cDtcXG5AQCAtNDg2LDcgKzQ4Niw3IEBAIHJ1bl9jcHVjZ19uZXN0ZWRfd2VpZ2h0X3Rlc3QoY29uc3QgY2hhciAqcm9vdCwgYm9vbCBvdmVycHJvdmlzaW9uZWQpXFxuIFxcdGludCByZXQgPSBLU0ZUX0ZBSUwsIGk7XFxuIFxcdGNoYXIgKnBhcmVudCA9IE5VTEwsICpjaGlsZCA9IE5VTEw7XFxuIFxcdHN0cnVjdCBjcHVfaG9nZ2VyIGxlYWZbM10gPSB7fTtcXG4tXFx0bG9uZyBuZXN0ZWRfbGVhZl91c2FnZSwgY2hpbGRfdXNhZ2U7XFxuK1xcdHM2NCBuZXN0ZWRfbGVhZl91c2FnZSwgY2hpbGRfdXNhZ2U7XFxuIFxcdGludCBucHJvY3MgPSBnZXRfbnByb2NzKCk7XFxuIFxcbiBcXHRpZiAoIW92ZXJwcm92aXNpb25lZCkge1xcbkBAIC01NjcsOCArNTY3LDggQEAgcnVuX2NwdWNnX25lc3RlZF93ZWlnaHRfdGVzdChjb25zdCBjaGFyICpyb290LCBib29sIG92ZXJwcm92aXNpb25lZClcXG4gXFx0fVxcbiBcXG4gXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIEFSUkFZX1NJWkUobGVhZik7IGkrKykge1xcbi1cXHRcXHRsZWFmW2ldLnVzYWdlID0gY2dfcmVhZF9rZXlfbG9uZyhsZWFmW2ldLmNncm91cCxcXG4tXFx0XFx0XFx0XFx0XFxcImNwdS5zdGF0XFxcIiwgXFxcInVzYWdlX3VzZWNcXFwiKTtcXG4rXFx0XFx0bGVhZltpXS51c2FnZSA9IGNnX3JlYWRfa2V5X3M2NChsZWFmW2ldLmNncm91cCwgXFxcImNwdS5zdGF0XFxcIixcXG4rXFx0XFx0XFx0XFx0XFx0XFx0XFxcInVzYWdlX3VzZWNcXFwiKTtcXG4gXFx0XFx0aWYgKGxlYWZbaV0udXNhZ2UgXFx1MDAzYz0gMClcXG4gXFx0XFx0XFx0Z290byBjbGVhbnVwO1xcbiBcXHR9XFxuQEAgLTU4MCw4ICs1ODAsNyBAQCBydW5fY3B1Y2dfbmVzdGVkX3dlaWdodF90ZXN0KGNvbnN0IGNoYXIgKnJvb3QsIGJvb2wgb3ZlcnByb3Zpc2lvbmVkKVxcbiBcXHR9IGVsc2UgaWYgKCF2YWx1ZXNfY2xvc2VfcmVwb3J0KGxlYWZbMF0udXNhZ2UgKiAyLCBuZXN0ZWRfbGVhZl91c2FnZSwgMTUpKVxcbiBcXHRcXHRnb3RvIGNsZWFudXA7XFxuIFxcbi1cXG4tXFx0Y2hpbGRfdXNhZ2UgPSBjZ19yZWFkX2tleV9sb25nKGNoaWxkLCBcXFwiY3B1LnN0YXRcXFwiLCBcXFwidXNhZ2VfdXNlY1xcXCIpO1xcbitcXHRjaGlsZF91c2FnZSA9IGNnX3JlYWRfa2V5X3M2NChjaGlsZCwgXFxcImNwdS5zdGF0XFxcIiwgXFxcInVzYWdlX3VzZWNcXFwiKTtcXG4gXFx0aWYgKGNoaWxkX3VzYWdlIFxcdTAwM2M9IDApXFxuIFxcdFxcdGdvdG8gY2xlYW51cDtcXG4gXFx0aWYgKCF2YWx1ZXNfY2xvc2VfcmVwb3J0KGNoaWxkX3VzYWdlLCBuZXN0ZWRfbGVhZl91c2FnZSwgMSkpXFxuQEAgLTY3OSw3ICs2NzgsOCBAQCBzdGF0aWMgaW50IHRlc3RfY3B1Y2dfbWF4KGNvbnN0IGNoYXIgKnJvb3QpXFxuIFxcdGxvbmcgZHVyYXRpb25fc2Vjb25kcyA9IDE7XFxuIFxcbiBcXHRsb25nIGR1cmF0aW9uX3VzZWM7XFxuLVxcdGxvbmcgdXNhZ2VfdXNlYywgbl9wZXJpb2RzLCByZW1haW5kZXJfdXNlYywgZXhwZWN0ZWRfdXNhZ2VfdXNlYztcXG4rXFx0bG9uZyBuX3BlcmlvZHMsIHJlbWFpbmRlcl91c2VjLCBleHBlY3RlZF91c2FnZV91c2VjO1xcbitcXHRzNjQgdXNhZ2VfdXNlYztcXG4gXFx0Y2hhciAqY3B1Y2c7XFxuIFxcdGNoYXIgcXVvdGFfYnVmWzMyXTtcXG4gXFxuQEAgLTcwOCw3ICs3MDgsNyBAQCBzdGF0aWMgaW50IHRlc3RfY3B1Y2dfbWF4KGNvbnN0IGNoYXIgKnJvb3QpXFxuIFxcdGlmIChjZ19ydW4oY3B1Y2csIGhvZ19jcHVzX3RpbWVkLCAodm9pZCAqKVxcdTAwMjZwYXJhbSkpXFxuIFxcdFxcdGdvdG8gY2xlYW51cDtcXG4gXFxuLVxcdHVzYWdlX3VzZWMgPSBjZ19yZWFkX2tleV9sb25nKGNwdWNnLCBcXFwiY3B1LnN0YXRcXFwiLCBcXFwidXNhZ2VfdXNlY1xcXCIpO1xcbitcXHR1c2FnZV91c2VjID0gY2dfcmVhZF9rZXlfczY0KGNwdWNnLCBcXFwiY3B1LnN0YXRcXFwiLCBcXFwidXNhZ2VfdXNlY1xcXCIpO1xcbiBcXHRpZiAodXNhZ2VfdXNlYyBcXHUwMDNjPSAwKVxcbiBcXHRcXHRnb3RvIGNsZWFudXA7XFxuIFxcbkBAIC03NDYsNyArNzQ2LDggQEAgc3RhdGljIGludCB0ZXN0X2NwdWNnX21heF9uZXN0ZWQoY29uc3QgY2hhciAqcm9vdClcXG4gXFx0bG9uZyBkdXJhdGlvbl9zZWNvbmRzID0gMTtcXG4gXFxuIFxcdGxvbmcgZHVyYXRpb25fdXNlYztcXG4tXFx0bG9uZyB1c2FnZV91c2VjLCBuX3BlcmlvZHMsIHJlbWFpbmRlcl91c2VjLCBleHBlY3RlZF91c2FnZV91c2VjO1xcbitcXHRsb25nIG5fcGVyaW9kcywgcmVtYWluZGVyX3VzZWMsIGV4cGVjdGVkX3VzYWdlX3VzZWM7XFxuK1xcdHM2NCB1c2FnZV91c2VjO1xcbiBcXHRjaGFyICpwYXJlbnQsICpjaGlsZDtcXG4gXFx0Y2hhciBxdW90YV9idWZbMzJdO1xcbiBcXG5AQCAtNzgyLDcgKzc4Myw3IEBAIHN0YXRpYyBpbnQgdGVzdF9jcHVjZ19tYXhfbmVzdGVkKGNvbnN0IGNoYXIgKnJvb3QpXFxuIFxcdGlmIChjZ19ydW4oY2hpbGQsIGhvZ19jcHVzX3RpbWVkLCAodm9pZCAqKVxcdTAwMjZwYXJhbSkpXFxuIFxcdFxcdGdvdG8gY2xlYW51cDtcXG4gXFxuLVxcdHVzYWdlX3VzZWMgPSBjZ19yZWFkX2tleV9sb25nKGNoaWxkLCBcXFwiY3B1LnN0YXRcXFwiLCBcXFwidXNhZ2VfdXNlY1xcXCIpO1xcbitcXHR1c2FnZV91c2VjID0gY2dfcmVhZF9rZXlfczY0KGNoaWxkLCBcXFwiY3B1LnN0YXRcXFwiLCBcXFwidXNhZ2VfdXNlY1xcXCIpO1xcbiBcXHRpZiAodXNhZ2VfdXNlYyBcXHUwMDNjPSAwKVxcbiBcXHRcXHRnb3RvIGNsZWFudXA7XFxuIFxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9jZ3JvdXAvdGVzdF9mcmVlemVyLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9jZ3JvdXAvdGVzdF9mcmVlemVyLmNcXG5pbmRleCBmMjhiYjAyZTk3ODNiLi5mNGYwODJjMTNkNGI3IDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2Nncm91cC90ZXN0X2ZyZWV6ZXIuY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2Nncm91cC90ZXN0X2ZyZWV6ZXIuY1xcbkBAIC04MDcsMTAgKzgwNyw5IEBAIHN0YXRpYyBpbnQgdGVzdF9jZ2ZyZWV6ZXJfdmZvcmsoY29uc3QgY2hhciAqcm9vdClcXG4gLypcXG4gICogR2V0IHRoZSBjdXJyZW50IGZyb3plbl91c2VjIGZvciB0aGUgY2dyb3VwLlxcbiAgKi9cXG4tc3RhdGljIGxvbmcgY2dfY2hlY2tfZnJlZXpldGltZShjb25zdCBjaGFyICpjZ3JvdXApXFxuK3N0YXRpYyBzNjQgY2dfY2hlY2tfZnJlZXpldGltZShjb25zdCBjaGFyICpjZ3JvdXApXFxuIHtcXG4tXFx0cmV0dXJuIGNnX3JlYWRfa2V5X2xvbmcoY2dyb3VwLCBcXFwiY2dyb3VwLnN0YXQubG9jYWxcXFwiLFxcbi1cXHRcXHRcXHRcXHRcXFwiZnJvemVuX3VzZWMgXFxcIik7XFxuK1xcdHJldHVybiBjZ19yZWFkX2tleV9zNjQoY2dyb3VwLCBcXFwiY2dyb3VwLnN0YXQubG9jYWxcXFwiLCBcXFwiZnJvemVuX3VzZWMgXFxcIik7XFxuIH1cXG4gXFxuIC8qXFxuQEAgLTgyMCw3ICs4MTksNyBAQCBzdGF0aWMgaW50IHRlc3RfY2dmcmVlemVyX3RpbWVfZW1wdHkoY29uc3QgY2hhciAqcm9vdClcXG4ge1xcbiBcXHRpbnQgcmV0ID0gS1NGVF9GQUlMO1xcbiBcXHRjaGFyICpjZ3JvdXAgPSBOVUxMO1xcbi1cXHRsb25nIHByZXYsIGN1cnI7XFxuK1xcdHM2NCBwcmV2LCBjdXJyO1xcbiBcXG4gXFx0Y2dyb3VwID0gY2dfbmFtZShyb290LCBcXFwiY2dfdGltZV90ZXN0X2VtcHR5XFxcIik7XFxuIFxcdGlmICghY2dyb3VwKVxcbkBAIC04MzksNyArODM4LDcgQEAgc3RhdGljIGludCB0ZXN0X2NnZnJlZXplcl90aW1lX2VtcHR5KGNvbnN0IGNoYXIgKnJvb3QpXFxuIFxcdFxcdGdvdG8gY2xlYW51cDtcXG4gXFx0fVxcbiBcXHRpZiAoY3VyciBcXHUwMDNlIDApIHtcXG4tXFx0XFx0ZGVidWcoXFxcIkV4cGVjdCB0aW1lICglbGQpIHRvIGJlIDBcXFxcblxcXCIsIGN1cnIpO1xcbitcXHRcXHRkZWJ1ZyhcXFwiRXhwZWN0IHRpbWUgKCVsbGQpIHRvIGJlIDBcXFxcblxcXCIsIGN1cnIpO1xcbiBcXHRcXHRnb3RvIGNsZWFudXA7XFxuIFxcdH1cXG4gXFxuQEAgLTg1Myw4ICs4NTIsNyBAQCBzdGF0aWMgaW50IHRlc3RfY2dmcmVlemVyX3RpbWVfZW1wdHkoY29uc3QgY2hhciAqcm9vdClcXG4gXFx0dXNsZWVwKDEwMDApO1xcbiBcXHRjdXJyID0gY2dfY2hlY2tfZnJlZXpldGltZShjZ3JvdXApO1xcbiBcXHRpZiAoY3VyciBcXHUwMDNjIDEwMDApIHtcXG4tXFx0XFx0ZGVidWcoXFxcIkV4cGVjdCB0aW1lICglbGQpIHRvIGJlIGF0IGxlYXN0IDEwMDAgdXNcXFxcblxcXCIsXFxuLVxcdFxcdCAgICAgIGN1cnIpO1xcbitcXHRcXHRkZWJ1ZyhcXFwiRXhwZWN0IHRpbWUgKCVsbGQpIHRvIGJlIGF0IGxlYXN0IDEwMDAgdXNcXFxcblxcXCIsIGN1cnIpO1xcbiBcXHRcXHRnb3RvIGNsZWFudXA7XFxuIFxcdH1cXG4gXFxuQEAgLTg2Nyw3ICs4NjUsNyBAQCBzdGF0aWMgaW50IHRlc3RfY2dmcmVlemVyX3RpbWVfZW1wdHkoY29uc3QgY2hhciAqcm9vdClcXG4gXFx0cHJldiA9IGN1cnI7XFxuIFxcdGN1cnIgPSBjZ19jaGVja19mcmVlemV0aW1lKGNncm91cCk7XFxuIFxcdGlmIChjdXJyIFxcdTAwM2M9IHByZXYpIHtcXG4tXFx0XFx0ZGVidWcoXFxcIkV4cGVjdCB0aW1lICglbGQpIHRvIGJlIG1vcmUgdGhhbiBwcmV2aW91cyBjaGVjayAoJWxkKVxcXFxuXFxcIixcXG4rXFx0XFx0ZGVidWcoXFxcIkV4cGVjdCB0aW1lICglbGxkKSB0byBiZSBtb3JlIHRoYW4gcHJldmlvdXMgY2hlY2sgKCVsbGQpXFxcXG5cXFwiLFxcbiBcXHRcXHQgICAgICBjdXJyLCBwcmV2KTtcXG4gXFx0XFx0Z290byBjbGVhbnVwO1xcbiBcXHR9XFxuQEAgLTg3OSw3ICs4NzcsNyBAQCBzdGF0aWMgaW50IHRlc3RfY2dmcmVlemVyX3RpbWVfZW1wdHkoY29uc3QgY2hhciAqcm9vdClcXG4gXFx0cHJldiA9IGN1cnI7XFxuIFxcdGN1cnIgPSBjZ19jaGVja19mcmVlemV0aW1lKGNncm91cCk7XFxuIFxcdGlmIChjdXJyICE9IHByZXYpIHtcXG4tXFx0XFx0ZGVidWcoXFxcIkV4cGVjdCB0aW1lICglbGQpIHRvIGJlIHVuY2hhbmdlZCBmcm9tIHByZXZpb3VzIGNoZWNrICglbGQpXFxcXG5cXFwiLFxcbitcXHRcXHRkZWJ1ZyhcXFwiRXhwZWN0IHRpbWUgKCVsbGQpIHRvIGJlIHVuY2hhbmdlZCBmcm9tIHByZXZpb3VzIGNoZWNrICglbGxkKVxcXFxuXFxcIixcXG4gXFx0XFx0ICAgICAgY3VyciwgcHJldik7XFxuIFxcdFxcdGdvdG8gY2xlYW51cDtcXG4gXFx0fVxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9jZ3JvdXAvdGVzdF9rbWVtLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9jZ3JvdXAvdGVzdF9rbWVtLmNcXG5pbmRleCA0MzdmMmQzNWYyMDVlLi4yNDk4OThmM2I4MWU4IDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2Nncm91cC90ZXN0X2ttZW0uY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2Nncm91cC90ZXN0X2ttZW0uY1xcbkBAIC01NCw3ICs1NCw4IEBAIHN0YXRpYyBpbnQgdGVzdF9rbWVtX2Jhc2ljKGNvbnN0IGNoYXIgKnJvb3QpXFxuIHtcXG4gXFx0aW50IHJldCA9IEtTRlRfRkFJTDtcXG4gXFx0Y2hhciAqY2cgPSBOVUxMO1xcbi1cXHRsb25nIHNsYWIwLCBzbGFiMSwgY3VycmVudDtcXG4rXFx0czY0IHNsYWIwLCBzbGFiMTtcXG4rXFx0bG9uZyBjdXJyZW50O1xcbiBcXG4gXFx0Y2cgPSBjZ19uYW1lKHJvb3QsIFxcXCJrbWVtX2Jhc2ljX3Rlc3RcXFwiKTtcXG4gXFx0aWYgKCFjZylcXG5AQCAtNjYsNyArNjcsNyBAQCBzdGF0aWMgaW50IHRlc3Rfa21lbV9iYXNpYyhjb25zdCBjaGFyICpyb290KVxcbiBcXHRpZiAoY2dfcnVuKGNnLCBhbGxvY19kY2FjaGUsICh2b2lkICopMTAwMDAwKSlcXG4gXFx0XFx0Z290byBjbGVhbnVwO1xcbiBcXG4tXFx0c2xhYjAgPSBjZ19yZWFkX2tleV9sb25nKGNnLCBcXFwibWVtb3J5LnN0YXRcXFwiLCBcXFwic2xhYiBcXFwiKTtcXG4rXFx0c2xhYjAgPSBjZ19yZWFkX2tleV9zNjQoY2csIFxcXCJtZW1vcnkuc3RhdFxcXCIsIFxcXCJzbGFiIFxcXCIpO1xcbiBcXHRpZiAoc2xhYjAgXFx1MDAzYyAoMSBcXHUwMDNjXFx1MDAzYyAyMCkpXFxuIFxcdFxcdGdvdG8gY2xlYW51cDtcXG4gXFxuQEAgLTc1LDcgKzc2LDcgQEAgc3RhdGljIGludCB0ZXN0X2ttZW1fYmFzaWMoY29uc3QgY2hhciAqcm9vdClcXG4gXFx0Lyogd2FpdCBmb3IgUkNVIGZyZWVpbmcgKi9cXG4gXFx0c2xlZXAoMSk7XFxuIFxcbi1cXHRzbGFiMSA9IGNnX3JlYWRfa2V5X2xvbmcoY2csIFxcXCJtZW1vcnkuc3RhdFxcXCIsIFxcXCJzbGFiIFxcXCIpO1xcbitcXHRzbGFiMSA9IGNnX3JlYWRfa2V5X3M2NChjZywgXFxcIm1lbW9yeS5zdGF0XFxcIiwgXFxcInNsYWIgXFxcIik7XFxuIFxcdGlmIChzbGFiMSBcXHUwMDNjIDApXFxuIFxcdFxcdGdvdG8gY2xlYW51cDtcXG4gXFxuQEAgLTE2Nyw3ICsxNjgsOCBAQCBzdGF0aWMgaW50IGNnX3J1bl9pbl9zdWJjZ3JvdXBzKGNvbnN0IGNoYXIgKnBhcmVudCxcXG4gICovXFxuIHN0YXRpYyBpbnQgdGVzdF9rbWVtX21lbWNnX2RlbGV0aW9uKGNvbnN0IGNoYXIgKnJvb3QpXFxuIHtcXG4tXFx0bG9uZyBjdXJyZW50LCBhbm9uLCBmaWxlLCBrZXJuZWwsIHNvY2ssIHN1bTtcXG4rXFx0bG9uZyBjdXJyZW50O1xcbitcXHRzNjQgYW5vbiwgZmlsZSwga2VybmVsLCBzb2NrLCBzdW07XFxuIFxcdGludCByZXQgPSBLU0ZUX0ZBSUw7XFxuIFxcdGNoYXIgKnBhcmVudDtcXG4gXFxuQEAgLTE4NSwyMyArMTg3LDIzIEBAIHN0YXRpYyBpbnQgdGVzdF9rbWVtX21lbWNnX2RlbGV0aW9uKGNvbnN0IGNoYXIgKnJvb3QpXFxuIFxcdFxcdGdvdG8gY2xlYW51cDtcXG4gXFxuIFxcdGN1cnJlbnQgPSBjZ19yZWFkX2xvbmcocGFyZW50LCBcXFwibWVtb3J5LmN1cnJlbnRcXFwiKTtcXG4tXFx0YW5vbiA9IGNnX3JlYWRfa2V5X2xvbmcocGFyZW50LCBcXFwibWVtb3J5LnN0YXRcXFwiLCBcXFwiYW5vbiBcXFwiKTtcXG4tXFx0ZmlsZSA9IGNnX3JlYWRfa2V5X2xvbmcocGFyZW50LCBcXFwibWVtb3J5LnN0YXRcXFwiLCBcXFwiZmlsZSBcXFwiKTtcXG4tXFx0a2VybmVsID0gY2dfcmVhZF9rZXlfbG9uZyhwYXJlbnQsIFxcXCJtZW1vcnkuc3RhdFxcXCIsIFxcXCJrZXJuZWwgXFxcIik7XFxuLVxcdHNvY2sgPSBjZ19yZWFkX2tleV9sb25nKHBhcmVudCwgXFxcIm1lbW9yeS5zdGF0XFxcIiwgXFxcInNvY2sgXFxcIik7XFxuK1xcdGFub24gPSBjZ19yZWFkX2tleV9zNjQocGFyZW50LCBcXFwibWVtb3J5LnN0YXRcXFwiLCBcXFwiYW5vbiBcXFwiKTtcXG4rXFx0ZmlsZSA9IGNnX3JlYWRfa2V5X3M2NChwYXJlbnQsIFxcXCJtZW1vcnkuc3RhdFxcXCIsIFxcXCJmaWxlIFxcXCIpO1xcbitcXHRrZXJuZWwgPSBjZ19yZWFkX2tleV9zNjQocGFyZW50LCBcXFwibWVtb3J5LnN0YXRcXFwiLCBcXFwia2VybmVsIFxcXCIpO1xcbitcXHRzb2NrID0gY2dfcmVhZF9rZXlfczY0KHBhcmVudCwgXFxcIm1lbW9yeS5zdGF0XFxcIiwgXFxcInNvY2sgXFxcIik7XFxuIFxcdGlmIChjdXJyZW50IFxcdTAwM2MgMCB8fCBhbm9uIFxcdTAwM2MgMCB8fCBmaWxlIFxcdTAwM2MgMCB8fCBrZXJuZWwgXFx1MDAzYyAwIHx8IHNvY2sgXFx1MDAzYyAwKVxcbiBcXHRcXHRnb3RvIGNsZWFudXA7XFxuIFxcbiBcXHRzdW0gPSBhbm9uICsgZmlsZSArIGtlcm5lbCArIHNvY2s7XFxuLVxcdGlmIChsYWJzKHN1bSAtIGN1cnJlbnQpIFxcdTAwM2MgTUFYX1ZNU1RBVF9FUlJPUikge1xcbitcXHRpZiAobGxhYnMoc3VtIC0gY3VycmVudCkgXFx1MDAzYyBNQVhfVk1TVEFUX0VSUk9SKSB7XFxuIFxcdFxcdHJldCA9IEtTRlRfUEFTUztcXG4gXFx0fSBlbHNlIHtcXG4gXFx0XFx0cHJpbnRmKFxcXCJtZW1vcnkuY3VycmVudCA9ICVsZFxcXFxuXFxcIiwgY3VycmVudCk7XFxuLVxcdFxcdHByaW50ZihcXFwiYW5vbiArIGZpbGUgKyBrZXJuZWwgKyBzb2NrID0gJWxkXFxcXG5cXFwiLCBzdW0pO1xcbi1cXHRcXHRwcmludGYoXFxcImFub24gPSAlbGRcXFxcblxcXCIsIGFub24pO1xcbi1cXHRcXHRwcmludGYoXFxcImZpbGUgPSAlbGRcXFxcblxcXCIsIGZpbGUpO1xcbi1cXHRcXHRwcmludGYoXFxcImtlcm5lbCA9ICVsZFxcXFxuXFxcIiwga2VybmVsKTtcXG4tXFx0XFx0cHJpbnRmKFxcXCJzb2NrID0gJWxkXFxcXG5cXFwiLCBzb2NrKTtcXG4rXFx0XFx0cHJpbnRmKFxcXCJhbm9uICsgZmlsZSArIGtlcm5lbCArIHNvY2sgPSAlbGxkXFxcXG5cXFwiLCBzdW0pO1xcbitcXHRcXHRwcmludGYoXFxcImFub24gPSAlbGxkXFxcXG5cXFwiLCBhbm9uKTtcXG4rXFx0XFx0cHJpbnRmKFxcXCJmaWxlID0gJWxsZFxcXFxuXFxcIiwgZmlsZSk7XFxuK1xcdFxcdHByaW50ZihcXFwia2VybmVsID0gJWxsZFxcXFxuXFxcIiwga2VybmVsKTtcXG4rXFx0XFx0cHJpbnRmKFxcXCJzb2NrID0gJWxsZFxcXFxuXFxcIiwgc29jayk7XFxuIFxcdH1cXG4gXFxuIGNsZWFudXA6XFxuQEAgLTI0OCw3ICsyNTAsNyBAQCBzdGF0aWMgaW50IHNwYXduXzEwMDBfdGhyZWFkcyhjb25zdCBjaGFyICpjZ3JvdXAsIHZvaWQgKmFyZylcXG4gXFx0aW50IG5yX3RocmVhZHMgPSAxMDAwO1xcbiBcXHRwdGhyZWFkX3QgKnRpbmZvO1xcbiBcXHR1bnNpZ25lZCBsb25nIGk7XFxuLVxcdGxvbmcgc3RhY2s7XFxuK1xcdHM2NCBzdGFjaztcXG4gXFx0aW50IHJldCA9IC0xO1xcbiBcXG4gXFx0dGluZm8gPSBjYWxsb2MobnJfdGhyZWFkcywgc2l6ZW9mKHB0aHJlYWRfdCkpO1xcbkBAIC0yNjMsNyArMjY1LDcgQEAgc3RhdGljIGludCBzcGF3bl8xMDAwX3RocmVhZHMoY29uc3QgY2hhciAqY2dyb3VwLCB2b2lkICphcmcpXFxuIFxcdFxcdH1cXG4gXFx0fVxcbiBcXG4tXFx0c3RhY2sgPSBjZ19yZWFkX2tleV9sb25nKGNncm91cCwgXFxcIm1lbW9yeS5zdGF0XFxcIiwgXFxcImtlcm5lbF9zdGFjayBcXFwiKTtcXG4rXFx0c3RhY2sgPSBjZ19yZWFkX2tleV9zNjQoY2dyb3VwLCBcXFwibWVtb3J5LnN0YXRcXFwiLCBcXFwia2VybmVsX3N0YWNrIFxcXCIpO1xcbiBcXHRpZiAoc3RhY2sgXFx1MDAzZT0gNDA5NiAqIDEwMDApXFxuIFxcdFxcdHJldCA9IDA7XFxuIFxcbkBAIC0zMDcsNyArMzA5LDcgQEAgc3RhdGljIGludCB0ZXN0X2ttZW1fZGVhZF9jZ3JvdXBzKGNvbnN0IGNoYXIgKnJvb3QpXFxuIHtcXG4gXFx0aW50IHJldCA9IEtTRlRfRkFJTDtcXG4gXFx0Y2hhciAqcGFyZW50O1xcbi1cXHRsb25nIGRlYWQgPSAtMTtcXG4rXFx0czY0IGRlYWQgPSAtMTtcXG4gXFxuIFxcdHBhcmVudCA9IGNnX25hbWUocm9vdCwgXFxcImttZW1fZGVhZF9jZ3JvdXBzX3Rlc3RcXFwiKTtcXG4gXFx0aWYgKCFwYXJlbnQpXFxuQEAgLTMyOCw5ICszMzAsMTAgQEAgc3RhdGljIGludCB0ZXN0X2ttZW1fZGVhZF9jZ3JvdXBzKGNvbnN0IGNoYXIgKnJvb3QpXFxuIFxcdCAqIGZyb20gYSBzcGVjaWZpYyBrZXJuZWwgY29uc3RhbnQsIGFuZCBjYW4gYmUgYWRqdXN0ZWQgaWYgcmVjbGFpbVxcbiBcXHQgKiBiZWhhdmlvciBjaGFuZ2VzIGluIHRoZSBmdXR1cmUuXFxuIFxcdCAqL1xcbi1cXHRkZWFkID0gY2dfcmVhZF9rZXlfbG9uZ19wb2xsKHBhcmVudCwgXFxcImNncm91cC5zdGF0XFxcIixcXG4tXFx0XFx0XFx0XFx0XFx0XFxcIm5yX2R5aW5nX2Rlc2NlbmRhbnRzIFxcXCIsIDAsIEtNRU1fREVBRF9XQUlUX1JFVFJJRVMsXFxuLVxcdFxcdFxcdFxcdFxcdERFRkFVTFRfV0FJVF9JTlRFUlZBTF9VUyk7XFxuK1xcdGRlYWQgPSBjZ19yZWFkX2tleV9zNjRfcG9sbChwYXJlbnQsIFxcXCJjZ3JvdXAuc3RhdFxcXCIsXFxuK1xcdFxcdFxcdFxcdCAgICBcXFwibnJfZHlpbmdfZGVzY2VuZGFudHMgXFxcIiwgMCxcXG4rXFx0XFx0XFx0XFx0ICAgIEtNRU1fREVBRF9XQUlUX1JFVFJJRVMsXFxuK1xcdFxcdFxcdFxcdCAgICBERUZBVUxUX1dBSVRfSU5URVJWQUxfVVMpO1xcbiBcXHRpZiAoZGVhZClcXG4gXFx0XFx0Z290byBjbGVhbnVwO1xcbiBcXG5AQCAtMzUzLDcgKzM1Niw4IEBAIHN0YXRpYyBpbnQgdGVzdF9wZXJjcHVfYmFzaWMoY29uc3QgY2hhciAqcm9vdClcXG4ge1xcbiBcXHRpbnQgcmV0ID0gS1NGVF9GQUlMO1xcbiBcXHRjaGFyICpwYXJlbnQsICpjaGlsZDtcXG4tXFx0bG9uZyBjdXJyZW50LCBwZXJjcHUsIHNsYWI7XFxuK1xcdGxvbmcgY3VycmVudDtcXG4rXFx0czY0IHBlcmNwdSwgc2xhYjtcXG4gXFx0aW50IGk7XFxuIFxcbiBcXHRwYXJlbnQgPSBjZ19uYW1lKHJvb3QsIFxcXCJwZXJjcHVfYmFzaWNfdGVzdFxcXCIpO1xcbkBAIC0zODIsMTUgKzM4NiwxNSBAQCBzdGF0aWMgaW50IHRlc3RfcGVyY3B1X2Jhc2ljKGNvbnN0IGNoYXIgKnJvb3QpXFxuIFxcdH1cXG4gXFxuIFxcdGN1cnJlbnQgPSBjZ19yZWFkX2xvbmcocGFyZW50LCBcXFwibWVtb3J5LmN1cnJlbnRcXFwiKTtcXG4tXFx0cGVyY3B1ID0gY2dfcmVhZF9rZXlfbG9uZyhwYXJlbnQsIFxcXCJtZW1vcnkuc3RhdFxcXCIsIFxcXCJwZXJjcHUgXFxcIik7XFxuLVxcdHNsYWIgPSBjZ19yZWFkX2tleV9sb25nKHBhcmVudCwgXFxcIm1lbW9yeS5zdGF0XFxcIiwgXFxcInNsYWIgXFxcIik7XFxuK1xcdHBlcmNwdSA9IGNnX3JlYWRfa2V5X3M2NChwYXJlbnQsIFxcXCJtZW1vcnkuc3RhdFxcXCIsIFxcXCJwZXJjcHUgXFxcIik7XFxuK1xcdHNsYWIgPSBjZ19yZWFkX2tleV9zNjQocGFyZW50LCBcXFwibWVtb3J5LnN0YXRcXFwiLCBcXFwic2xhYiBcXFwiKTtcXG4gXFxuIFxcdGlmIChjdXJyZW50IFxcdTAwM2UgMCBcXHUwMDI2XFx1MDAyNiBwZXJjcHUgXFx1MDAzZSAwIFxcdTAwMjZcXHUwMDI2IHNsYWIgXFx1MDAzZT0gMCBcXHUwMDI2XFx1MDAyNlxcbi1cXHRcXHRcXHRsYWJzKGN1cnJlbnQgLSAocGVyY3B1ICsgc2xhYikpIFxcdTAwM2MgTUFYX1ZNU1RBVF9FUlJPUilcXG4rXFx0ICAgIGxsYWJzKGN1cnJlbnQgLSAocGVyY3B1ICsgc2xhYikpIFxcdTAwM2MgTUFYX1ZNU1RBVF9FUlJPUilcXG4gXFx0XFx0cmV0ID0gS1NGVF9QQVNTO1xcbiBcXHRlbHNlXFxuLVxcdFxcdHByaW50ZihcXFwibWVtb3J5LmN1cnJlbnQgJWxkXFxcXG5wZXJjcHUgJWxkXFxcXG5zbGFiICVsZFxcXFxuZGVsdGEgJWxkXFxcXG5cXFwiLFxcbi1cXHRcXHRcXHRjdXJyZW50LCBwZXJjcHUsIHNsYWIsIGN1cnJlbnQgLSAocGVyY3B1ICsgc2xhYikpO1xcbitcXHRcXHRwcmludGYoXFxcIm1lbW9yeS5jdXJyZW50ICVsZFxcXFxucGVyY3B1ICVsbGRcXFxcbnNsYWIgJWxsZFxcXFxuZGVsdGEgJWxsZFxcXFxuXFxcIixcXG4rXFx0XFx0ICAgICAgIGN1cnJlbnQsIHBlcmNwdSwgc2xhYiwgY3VycmVudCAtIChwZXJjcHUgKyBzbGFiKSk7XFxuIFxcbiBjbGVhbnVwX2NoaWxkcmVuOlxcbiBcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgMTAwMDsgaSsrKSB7XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2Nncm91cC90ZXN0X21lbWNvbnRyb2wuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2Nncm91cC90ZXN0X21lbWNvbnRyb2wuY1xcbmluZGV4IDNhODRkMDY4ZmJmMzYuLjUzOTY1MGMxZDU2MjYgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvY2dyb3VwL3Rlc3RfbWVtY29udHJvbC5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvY2dyb3VwL3Rlc3RfbWVtY29udHJvbC5jXFxuQEAgLTE5Miw3ICsxOTIsOCBAQCBzdGF0aWMgaW50IGFsbG9jX2Fub25fNTBNX2NoZWNrKGNvbnN0IGNoYXIgKmNncm91cCwgdm9pZCAqYXJnKVxcbiB7XFxuIFxcdHNpemVfdCBzaXplID0gTUIoNTApO1xcbiBcXHRjaGFyICpidWY7XFxuLVxcdGxvbmcgYW5vbiwgY3VycmVudDtcXG4rXFx0czY0IGFub247XFxuK1xcdGxvbmcgY3VycmVudDtcXG4gXFx0aW50IHJldCA9IC0xO1xcbiBcXG4gXFx0YnVmID0gYWxsb2NfYW5kX3BvcHVsYXRlX2Fub24oc2l6ZSk7XFxuQEAgLTIwNiw3ICsyMDcsNyBAQCBzdGF0aWMgaW50IGFsbG9jX2Fub25fNTBNX2NoZWNrKGNvbnN0IGNoYXIgKmNncm91cCwgdm9pZCAqYXJnKVxcbiBcXHRpZiAoIXZhbHVlc19jbG9zZShzaXplLCBjdXJyZW50LCAzKSlcXG4gXFx0XFx0Z290byBjbGVhbnVwO1xcbiBcXG4tXFx0YW5vbiA9IGNnX3JlYWRfa2V5X2xvbmcoY2dyb3VwLCBcXFwibWVtb3J5LnN0YXRcXFwiLCBcXFwiYW5vbiBcXFwiKTtcXG4rXFx0YW5vbiA9IGNnX3JlYWRfa2V5X3M2NChjZ3JvdXAsIFxcXCJtZW1vcnkuc3RhdFxcXCIsIFxcXCJhbm9uIFxcXCIpO1xcbiBcXHRpZiAoYW5vbiBcXHUwMDNjIDApXFxuIFxcdFxcdGdvdG8gY2xlYW51cDtcXG4gXFxuQEAgLTIyMyw3ICsyMjQsOCBAQCBzdGF0aWMgaW50IGFsbG9jX3BhZ2VjYWNoZV81ME1fY2hlY2soY29uc3QgY2hhciAqY2dyb3VwLCB2b2lkICphcmcpXFxuIHtcXG4gXFx0c2l6ZV90IHNpemUgPSBNQig1MCk7XFxuIFxcdGludCByZXQgPSAtMTtcXG4tXFx0bG9uZyBjdXJyZW50LCBmaWxlO1xcbitcXHRsb25nIGN1cnJlbnQ7XFxuK1xcdHM2NCBmaWxlO1xcbiBcXHRpbnQgZmQ7XFxuIFxcbiBcXHRmZCA9IGdldF90ZW1wX2ZkKCk7XFxuQEAgLTIzNyw3ICsyMzksNyBAQCBzdGF0aWMgaW50IGFsbG9jX3BhZ2VjYWNoZV81ME1fY2hlY2soY29uc3QgY2hhciAqY2dyb3VwLCB2b2lkICphcmcpXFxuIFxcdGlmIChjdXJyZW50IFxcdTAwM2Mgc2l6ZSlcXG4gXFx0XFx0Z290byBjbGVhbnVwO1xcbiBcXG4tXFx0ZmlsZSA9IGNnX3JlYWRfa2V5X2xvbmcoY2dyb3VwLCBcXFwibWVtb3J5LnN0YXRcXFwiLCBcXFwiZmlsZSBcXFwiKTtcXG4rXFx0ZmlsZSA9IGNnX3JlYWRfa2V5X3M2NChjZ3JvdXAsIFxcXCJtZW1vcnkuc3RhdFxcXCIsIFxcXCJmaWxlIFxcXCIpO1xcbiBcXHRpZiAoZmlsZSBcXHUwMDNjIDApXFxuIFxcdFxcdGdvdG8gY2xlYW51cDtcXG4gXFxuQEAgLTYyMywxMCArNjI1LDEwIEBAIHN0YXRpYyBpbnQgdGVzdF9tZW1jZ19wcm90ZWN0aW9uKGNvbnN0IGNoYXIgKnJvb3QsIGJvb2wgbWluKVxcbiBcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgQVJSQVlfU0laRShjaGlsZHJlbik7IGkrKykge1xcbiBcXHRcXHRpbnQgaWdub3JlX2xvd19ldmVudHNfaW5kZXggPSBoYXNfcmVjdXJzaXZlcHJvdCA/IDIgOiAtMTtcXG4gXFx0XFx0aW50IG5vX2xvd19ldmVudHNfaW5kZXggPSAxO1xcbi1cXHRcXHRsb25nIGxvdywgb29tO1xcbitcXHRcXHRzNjQgbG93LCBvb207XFxuIFxcbi1cXHRcXHRvb20gPSBjZ19yZWFkX2tleV9sb25nKGNoaWxkcmVuW2ldLCBcXFwibWVtb3J5LmV2ZW50c1xcXCIsIFxcXCJvb20gXFxcIik7XFxuLVxcdFxcdGxvdyA9IGNnX3JlYWRfa2V5X2xvbmcoY2hpbGRyZW5baV0sIFxcXCJtZW1vcnkuZXZlbnRzXFxcIiwgXFxcImxvdyBcXFwiKTtcXG4rXFx0XFx0b29tID0gY2dfcmVhZF9rZXlfczY0KGNoaWxkcmVuW2ldLCBcXFwibWVtb3J5LmV2ZW50c1xcXCIsIFxcXCJvb20gXFxcIik7XFxuK1xcdFxcdGxvdyA9IGNnX3JlYWRfa2V5X3M2NChjaGlsZHJlbltpXSwgXFxcIm1lbW9yeS5ldmVudHNcXFwiLCBcXFwibG93IFxcXCIpO1xcbiBcXG4gXFx0XFx0aWYgKG9vbSlcXG4gXFx0XFx0XFx0Z290byBjbGVhbnVwO1xcbkBAIC03MTEsNyArNzEzLDcgQEAgc3RhdGljIGludCB0ZXN0X21lbWNnX2hpZ2goY29uc3QgY2hhciAqcm9vdClcXG4ge1xcbiBcXHRpbnQgcmV0ID0gS1NGVF9GQUlMO1xcbiBcXHRjaGFyICptZW1jZztcXG4tXFx0bG9uZyBoaWdoO1xcbitcXHRzNjQgaGlnaDtcXG4gXFxuIFxcdG1lbWNnID0gY2dfbmFtZShyb290LCBcXFwibWVtY2dfdGVzdFxcXCIpO1xcbiBcXHRpZiAoIW1lbWNnKVxcbkBAIC03MzgsNyArNzQwLDcgQEAgc3RhdGljIGludCB0ZXN0X21lbWNnX2hpZ2goY29uc3QgY2hhciAqcm9vdClcXG4gXFx0aWYgKGNnX3J1bihtZW1jZywgYWxsb2NfcGFnZWNhY2hlX21heF8zME0sIE5VTEwpKVxcbiBcXHRcXHRnb3RvIGNsZWFudXA7XFxuIFxcbi1cXHRoaWdoID0gY2dfcmVhZF9rZXlfbG9uZyhtZW1jZywgXFxcIm1lbW9yeS5ldmVudHNcXFwiLCBcXFwiaGlnaCBcXFwiKTtcXG4rXFx0aGlnaCA9IGNnX3JlYWRfa2V5X3M2NChtZW1jZywgXFxcIm1lbW9yeS5ldmVudHNcXFwiLCBcXFwiaGlnaCBcXFwiKTtcXG4gXFx0aWYgKGhpZ2ggXFx1MDAzYz0gMClcXG4gXFx0XFx0Z290byBjbGVhbnVwO1xcbiBcXG5AQCAtNzc0LDggKzc3Niw4IEBAIHN0YXRpYyBpbnQgdGVzdF9tZW1jZ19oaWdoX3N5bmMoY29uc3QgY2hhciAqcm9vdClcXG4ge1xcbiBcXHRpbnQgcmV0ID0gS1NGVF9GQUlMLCBwaWQsIGZkID0gLTE7XFxuIFxcdGNoYXIgKm1lbWNnO1xcbi1cXHRsb25nIHByZV9oaWdoLCBwcmVfbWF4O1xcbi1cXHRsb25nIHBvc3RfaGlnaCwgcG9zdF9tYXg7XFxuK1xcdHM2NCBwcmVfaGlnaCwgcHJlX21heDtcXG4rXFx0czY0IHBvc3RfaGlnaCwgcG9zdF9tYXg7XFxuIFxcbiBcXHRtZW1jZyA9IGNnX25hbWUocm9vdCwgXFxcIm1lbWNnX3Rlc3RcXFwiKTtcXG4gXFx0aWYgKCFtZW1jZylcXG5AQCAtNzg0LDggKzc4Niw4IEBAIHN0YXRpYyBpbnQgdGVzdF9tZW1jZ19oaWdoX3N5bmMoY29uc3QgY2hhciAqcm9vdClcXG4gXFx0aWYgKGNnX2NyZWF0ZShtZW1jZykpXFxuIFxcdFxcdGdvdG8gY2xlYW51cDtcXG4gXFxuLVxcdHByZV9oaWdoID0gY2dfcmVhZF9rZXlfbG9uZyhtZW1jZywgXFxcIm1lbW9yeS5ldmVudHNcXFwiLCBcXFwiaGlnaCBcXFwiKTtcXG4tXFx0cHJlX21heCA9IGNnX3JlYWRfa2V5X2xvbmcobWVtY2csIFxcXCJtZW1vcnkuZXZlbnRzXFxcIiwgXFxcIm1heCBcXFwiKTtcXG4rXFx0cHJlX2hpZ2ggPSBjZ19yZWFkX2tleV9zNjQobWVtY2csIFxcXCJtZW1vcnkuZXZlbnRzXFxcIiwgXFxcImhpZ2ggXFxcIik7XFxuK1xcdHByZV9tYXggPSBjZ19yZWFkX2tleV9zNjQobWVtY2csIFxcXCJtZW1vcnkuZXZlbnRzXFxcIiwgXFxcIm1heCBcXFwiKTtcXG4gXFx0aWYgKHByZV9oaWdoIFxcdTAwM2MgMCB8fCBwcmVfbWF4IFxcdTAwM2MgMClcXG4gXFx0XFx0Z290byBjbGVhbnVwO1xcbiBcXG5AQCAtODA4LDggKzgxMCw4IEBAIHN0YXRpYyBpbnQgdGVzdF9tZW1jZ19oaWdoX3N5bmMoY29uc3QgY2hhciAqcm9vdClcXG4gXFxuIFxcdGNnX3dhaXRfZm9yKGZkKTtcXG4gXFxuLVxcdHBvc3RfaGlnaCA9IGNnX3JlYWRfa2V5X2xvbmcobWVtY2csIFxcXCJtZW1vcnkuZXZlbnRzXFxcIiwgXFxcImhpZ2ggXFxcIik7XFxuLVxcdHBvc3RfbWF4ID0gY2dfcmVhZF9rZXlfbG9uZyhtZW1jZywgXFxcIm1lbW9yeS5ldmVudHNcXFwiLCBcXFwibWF4IFxcXCIpO1xcbitcXHRwb3N0X2hpZ2ggPSBjZ19yZWFkX2tleV9zNjQobWVtY2csIFxcXCJtZW1vcnkuZXZlbnRzXFxcIiwgXFxcImhpZ2ggXFxcIik7XFxuK1xcdHBvc3RfbWF4ID0gY2dfcmVhZF9rZXlfczY0KG1lbWNnLCBcXFwibWVtb3J5LmV2ZW50c1xcXCIsIFxcXCJtYXggXFxcIik7XFxuIFxcdGlmIChwb3N0X2hpZ2ggXFx1MDAzYyAwIHx8IHBvc3RfbWF4IFxcdTAwM2MgMClcXG4gXFx0XFx0Z290byBjbGVhbnVwO1xcbiBcXG5AQCAtODM2LDcgKzgzOCw4IEBAIHN0YXRpYyBpbnQgdGVzdF9tZW1jZ19tYXgoY29uc3QgY2hhciAqcm9vdClcXG4ge1xcbiBcXHRpbnQgcmV0ID0gS1NGVF9GQUlMO1xcbiBcXHRjaGFyICptZW1jZztcXG4tXFx0bG9uZyBjdXJyZW50LCBtYXg7XFxuK1xcdGxvbmcgY3VycmVudDtcXG4rXFx0czY0IG1heDtcXG4gXFxuIFxcdG1lbWNnID0gY2dfbmFtZShyb290LCBcXFwibWVtY2dfdGVzdFxcXCIpO1xcbiBcXHRpZiAoIW1lbWNnKVxcbkBAIC04NjUsNyArODY4LDcgQEAgc3RhdGljIGludCB0ZXN0X21lbWNnX21heChjb25zdCBjaGFyICpyb290KVxcbiBcXHRpZiAoY3VycmVudCBcXHUwMDNlIE1CKDMwKSB8fCAhY3VycmVudClcXG4gXFx0XFx0Z290byBjbGVhbnVwO1xcbiBcXG4tXFx0bWF4ID0gY2dfcmVhZF9rZXlfbG9uZyhtZW1jZywgXFxcIm1lbW9yeS5ldmVudHNcXFwiLCBcXFwibWF4IFxcXCIpO1xcbitcXHRtYXggPSBjZ19yZWFkX2tleV9zNjQobWVtY2csIFxcXCJtZW1vcnkuZXZlbnRzXFxcIiwgXFxcIm1heCBcXFwiKTtcXG4gXFx0aWYgKG1heCBcXHUwMDNjPSAwKVxcbiBcXHRcXHRnb3RvIGNsZWFudXA7XFxuIFxcbkBAIC0xMDI5LDcgKzEwMzIsOCBAQCBzdGF0aWMgaW50IHRlc3RfbWVtY2dfc3dhcF9tYXhfcGVhayhjb25zdCBjaGFyICpyb290KVxcbiB7XFxuIFxcdGludCByZXQgPSBLU0ZUX0ZBSUw7XFxuIFxcdGNoYXIgKm1lbWNnO1xcbi1cXHRsb25nIG1heCwgcGVhaztcXG4rXFx0czY0IG1heDtcXG4rXFx0bG9uZyBwZWFrO1xcbiBcXHRzdHJ1Y3Qgc3RhdCBzcztcXG4gXFx0aW50IHN3YXBfcGVha19mZCA9IC0xLCBtZW1fcGVha19mZCA9IC0xO1xcbiBcXG5AQCAtMTEyMiwxMCArMTEyNiwxMCBAQCBzdGF0aWMgaW50IHRlc3RfbWVtY2dfc3dhcF9tYXhfcGVhayhjb25zdCBjaGFyICpyb290KVxcbiBcXHRpZiAoIWNnX3J1bihtZW1jZywgYWxsb2NfYW5vbiwgKHZvaWQgKilNQigxMDApKSlcXG4gXFx0XFx0Z290byBjbGVhbnVwO1xcbiBcXG4tXFx0aWYgKGNnX3JlYWRfa2V5X2xvbmcobWVtY2csIFxcXCJtZW1vcnkuZXZlbnRzXFxcIiwgXFxcIm9vbSBcXFwiKSAhPSAxKVxcbitcXHRpZiAoY2dfcmVhZF9rZXlfczY0KG1lbWNnLCBcXFwibWVtb3J5LmV2ZW50c1xcXCIsIFxcXCJvb20gXFxcIikgIT0gMSlcXG4gXFx0XFx0Z290byBjbGVhbnVwO1xcbiBcXG4tXFx0aWYgKGNnX3JlYWRfa2V5X2xvbmcobWVtY2csIFxcXCJtZW1vcnkuZXZlbnRzXFxcIiwgXFxcIm9vbV9raWxsIFxcXCIpICE9IDEpXFxuK1xcdGlmIChjZ19yZWFkX2tleV9zNjQobWVtY2csIFxcXCJtZW1vcnkuZXZlbnRzXFxcIiwgXFxcIm9vbV9raWxsIFxcXCIpICE9IDEpXFxuIFxcdFxcdGdvdG8gY2xlYW51cDtcXG4gXFxuIFxcdHBlYWsgPSBjZ19yZWFkX2xvbmcobWVtY2csIFxcXCJtZW1vcnkucGVha1xcXCIpO1xcbkBAIC0xMTg2LDcgKzExOTAsNyBAQCBzdGF0aWMgaW50IHRlc3RfbWVtY2dfc3dhcF9tYXhfcGVhayhjb25zdCBjaGFyICpyb290KVxcbiBcXHRpZiAoY2dfcnVuKG1lbWNnLCBhbGxvY19hbm9uXzUwTV9jaGVja19zd2FwLCAodm9pZCAqKU1CKDMwKSkpXFxuIFxcdFxcdGdvdG8gY2xlYW51cDtcXG4gXFxuLVxcdG1heCA9IGNnX3JlYWRfa2V5X2xvbmcobWVtY2csIFxcXCJtZW1vcnkuZXZlbnRzXFxcIiwgXFxcIm1heCBcXFwiKTtcXG4rXFx0bWF4ID0gY2dfcmVhZF9rZXlfczY0KG1lbWNnLCBcXFwibWVtb3J5LmV2ZW50c1xcXCIsIFxcXCJtYXggXFxcIik7XFxuIFxcdGlmIChtYXggXFx1MDAzYz0gMClcXG4gXFx0XFx0Z290byBjbGVhbnVwO1xcbiBcXG5AQCAtMTI0OCwxMCArMTI1MiwxMCBAQCBzdGF0aWMgaW50IHRlc3RfbWVtY2dfb29tX2V2ZW50cyhjb25zdCBjaGFyICpyb290KVxcbiBcXHRpZiAoY2dfcmVhZF9zdHJjbXAobWVtY2csIFxcXCJjZ3JvdXAucHJvY3NcXFwiLCBcXFwiXFxcIikpXFxuIFxcdFxcdGdvdG8gY2xlYW51cDtcXG4gXFxuLVxcdGlmIChjZ19yZWFkX2tleV9sb25nKG1lbWNnLCBcXFwibWVtb3J5LmV2ZW50c1xcXCIsIFxcXCJvb20gXFxcIikgIT0gMSlcXG4rXFx0aWYgKGNnX3JlYWRfa2V5X3M2NChtZW1jZywgXFxcIm1lbW9yeS5ldmVudHNcXFwiLCBcXFwib29tIFxcXCIpICE9IDEpXFxuIFxcdFxcdGdvdG8gY2xlYW51cDtcXG4gXFxuLVxcdGlmIChjZ19yZWFkX2tleV9sb25nKG1lbWNnLCBcXFwibWVtb3J5LmV2ZW50c1xcXCIsIFxcXCJvb21fa2lsbCBcXFwiKSAhPSAxKVxcbitcXHRpZiAoY2dfcmVhZF9rZXlfczY0KG1lbWNnLCBcXFwibWVtb3J5LmV2ZW50c1xcXCIsIFxcXCJvb21fa2lsbCBcXFwiKSAhPSAxKVxcbiBcXHRcXHRnb3RvIGNsZWFudXA7XFxuIFxcbiBcXHRyZXQgPSBLU0ZUX1BBU1M7XFxuQEAgLTEzNTQsMTMgKzEzNTgsMTQgQEAgc3RhdGljIGludCB0Y3BfY2xpZW50KGNvbnN0IGNoYXIgKmNncm91cCwgdW5zaWduZWQgc2hvcnQgcG9ydClcXG4gXFx0cmV0ID0gS1NGVF9GQUlMO1xcbiBcXHR3aGlsZSAocmV0cmllcy0tKSB7XFxuIFxcdFxcdHVpbnQ4X3QgYnVmWzB4MTAwMDAwXTtcXG4tXFx0XFx0bG9uZyBjdXJyZW50LCBzb2NrO1xcbitcXHRcXHRsb25nIGN1cnJlbnQ7XFxuK1xcdFxcdHM2NCBzb2NrO1xcbiBcXG4gXFx0XFx0aWYgKHJlYWQoc2ssIGJ1Ziwgc2l6ZW9mKGJ1ZikpIFxcdTAwM2M9IDApXFxuIFxcdFxcdFxcdGdvdG8gY2xvc2Vfc2s7XFxuIFxcbiBcXHRcXHRjdXJyZW50ID0gY2dfcmVhZF9sb25nKGNncm91cCwgXFxcIm1lbW9yeS5jdXJyZW50XFxcIik7XFxuLVxcdFxcdHNvY2sgPSBjZ19yZWFkX2tleV9sb25nKGNncm91cCwgXFxcIm1lbW9yeS5zdGF0XFxcIiwgXFxcInNvY2sgXFxcIik7XFxuK1xcdFxcdHNvY2sgPSBjZ19yZWFkX2tleV9zNjQoY2dyb3VwLCBcXFwibWVtb3J5LnN0YXRcXFwiLCBcXFwic29jayBcXFwiKTtcXG4gXFxuIFxcdFxcdGlmIChjdXJyZW50IFxcdTAwM2MgMCB8fCBzb2NrIFxcdTAwM2MgMClcXG4gXFx0XFx0XFx0Z290byBjbG9zZV9zaztcXG5AQCAtMTM5Miw3ICsxMzk3LDcgQEAgc3RhdGljIGludCB0ZXN0X21lbWNnX3NvY2soY29uc3QgY2hhciAqcm9vdClcXG4gXFx0aW50IGJpbmRfcmV0cmllcyA9IDUsIHJldCA9IEtTRlRfRkFJTCwgcGlkLCBlcnI7XFxuIFxcdHVuc2lnbmVkIHNob3J0IHBvcnQ7XFxuIFxcdGNoYXIgKm1lbWNnO1xcbi1cXHRsb25nIHNvY2tfcG9zdCA9IC0xO1xcbitcXHRzNjQgc29ja19wb3N0ID0gLTE7XFxuIFxcbiBcXHRtZW1jZyA9IGNnX25hbWUocm9vdCwgXFxcIm1lbWNnX3Rlc3RcXFwiKTtcXG4gXFx0aWYgKCFtZW1jZylcXG5AQCAtMTQ1OSw3ICsxNDY0LDcgQEAgc3RhdGljIGludCB0ZXN0X21lbWNnX3NvY2soY29uc3QgY2hhciAqcm9vdClcXG4gXFx0ICogc2NoZWR1bGluZyBzbGFjaykgYW5kIHJlcXVpcmUgdGhhdCB0aGUgXFxcInNvY2sgXFxcIiBjb3VudGVyXFxuIFxcdCAqIGV2ZW50dWFsbHkgZHJvcHMgdG8gemVyby5cXG4gXFx0ICovXFxuLVxcdHNvY2tfcG9zdCA9IGNnX3JlYWRfa2V5X2xvbmdfcG9sbChtZW1jZywgXFxcIm1lbW9yeS5zdGF0XFxcIiwgXFxcInNvY2sgXFxcIiwgMCxcXG4rXFx0c29ja19wb3N0ID0gY2dfcmVhZF9rZXlfczY0X3BvbGwobWVtY2csIFxcXCJtZW1vcnkuc3RhdFxcXCIsIFxcXCJzb2NrIFxcXCIsIDAsXFxuIFxcdFxcdFxcdFxcdFxcdCBNRU1DR19TT0NLU1RBVF9XQUlUX1JFVFJJRVMsXFxuIFxcdFxcdFxcdFxcdFxcdCBERUZBVUxUX1dBSVRfSU5URVJWQUxfVVMpO1xcbiBcXHRpZiAoc29ja19wb3N0KVxcbkBAIC0xNDg0LDcgKzE0ODksNyBAQCBzdGF0aWMgaW50IHRlc3RfbWVtY2dfb29tX2dyb3VwX2xlYWZfZXZlbnRzKGNvbnN0IGNoYXIgKnJvb3QpXFxuIHtcXG4gXFx0aW50IHJldCA9IEtTRlRfRkFJTDtcXG4gXFx0Y2hhciAqcGFyZW50LCAqY2hpbGQ7XFxuLVxcdGxvbmcgcGFyZW50X29vbV9ldmVudHM7XFxuK1xcdHM2NCBwYXJlbnRfb29tX2V2ZW50cztcXG4gXFxuIFxcdHBhcmVudCA9IGNnX25hbWUocm9vdCwgXFxcIm1lbWNnX3Rlc3RfMFxcXCIpO1xcbiBcXHRjaGlsZCA9IGNnX25hbWUocm9vdCwgXFxcIm1lbWNnX3Rlc3RfMC9tZW1jZ190ZXN0XzFcXFwiKTtcXG5AQCAtMTUxOSwxMSArMTUyNCwxMSBAQCBzdGF0aWMgaW50IHRlc3RfbWVtY2dfb29tX2dyb3VwX2xlYWZfZXZlbnRzKGNvbnN0IGNoYXIgKnJvb3QpXFxuIFxcdGlmIChjZ190ZXN0X3Byb2Nfa2lsbGVkKGNoaWxkKSlcXG4gXFx0XFx0Z290byBjbGVhbnVwO1xcbiBcXG4tXFx0aWYgKGNnX3JlYWRfa2V5X2xvbmcoY2hpbGQsIFxcXCJtZW1vcnkuZXZlbnRzXFxcIiwgXFxcIm9vbV9raWxsIFxcXCIpIFxcdTAwM2M9IDApXFxuK1xcdGlmIChjZ19yZWFkX2tleV9zNjQoY2hpbGQsIFxcXCJtZW1vcnkuZXZlbnRzXFxcIiwgXFxcIm9vbV9raWxsIFxcXCIpIFxcdTAwM2M9IDApXFxuIFxcdFxcdGdvdG8gY2xlYW51cDtcXG4gXFxuLVxcdHBhcmVudF9vb21fZXZlbnRzID0gY2dfcmVhZF9rZXlfbG9uZyhcXG4tXFx0XFx0XFx0cGFyZW50LCBcXFwibWVtb3J5LmV2ZW50c1xcXCIsIFxcXCJvb21fa2lsbCBcXFwiKTtcXG4rXFx0cGFyZW50X29vbV9ldmVudHMgPVxcbitcXHRcXHRjZ19yZWFkX2tleV9zNjQocGFyZW50LCBcXFwibWVtb3J5LmV2ZW50c1xcXCIsIFxcXCJvb21fa2lsbCBcXFwiKTtcXG4gXFx0LypcXG4gXFx0ICogSWYgbWVtb3J5X2xvY2FsZXZlbnRzIGlzIG5vdCBlbmFibGVkICh0aGUgZGVmYXVsdCksIHRoZSBwYXJlbnQgc2hvdWxkXFxuIFxcdCAqIGNvdW50IE9PTSBldmVudHMgaW4gaXRzIGNoaWxkcmVuIGdyb3Vwcy4gT3RoZXJ3aXNlLCBpdCBzaG91bGQgbm90XFxuQEAgLTE2MzksNyArMTY0NCw3IEBAIHN0YXRpYyBpbnQgdGVzdF9tZW1jZ19vb21fZ3JvdXBfc2NvcmVfZXZlbnRzKGNvbnN0IGNoYXIgKnJvb3QpXFxuIFxcdGlmICghY2dfcnVuKG1lbWNnLCBhbGxvY19hbm9uLCAodm9pZCAqKU1CKDEwMCkpKVxcbiBcXHRcXHRnb3RvIGNsZWFudXA7XFxuIFxcbi1cXHRpZiAoY2dfcmVhZF9rZXlfbG9uZyhtZW1jZywgXFxcIm1lbW9yeS5ldmVudHNcXFwiLCBcXFwib29tX2tpbGwgXFxcIikgIT0gMylcXG4rXFx0aWYgKGNnX3JlYWRfa2V5X3M2NChtZW1jZywgXFxcIm1lbW9yeS5ldmVudHNcXFwiLCBcXFwib29tX2tpbGwgXFxcIikgIT0gMylcXG4gXFx0XFx0Z290byBjbGVhbnVwO1xcbiBcXG4gXFx0aWYgKGtpbGwoc2FmZV9waWQsIFNJR0tJTEwpKVxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9jZ3JvdXAvdGVzdF9waWRzLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9jZ3JvdXAvdGVzdF9waWRzLmNcXG5pbmRleCA3MTAxMDliNTNkZmU5Li5mNGQ1YmM5ZjVmMjRmIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2Nncm91cC90ZXN0X3BpZHMuY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2Nncm91cC90ZXN0X3BpZHMuY1xcbkBAIC0xMTEsMTIgKzExMSwxMSBAQCBzdGF0aWMgaW50IHRlc3RfcGlkc19ldmVudHMoY29uc3QgY2hhciAqcm9vdClcXG4gXFx0aWYgKGtpbGwocGlkLCBTSUdJTlQpKVxcbiBcXHRcXHRnb3RvIGNsZWFudXA7XFxuIFxcbi1cXHRpZiAoY2dfcmVhZF9rZXlfbG9uZyhjZ19jaGlsZCwgXFxcInBpZHMuZXZlbnRzXFxcIiwgXFxcIm1heCBcXFwiKSAhPSAwKVxcbitcXHRpZiAoY2dfcmVhZF9rZXlfczY0KGNnX2NoaWxkLCBcXFwicGlkcy5ldmVudHNcXFwiLCBcXFwibWF4IFxcXCIpICE9IDApXFxuIFxcdFxcdGdvdG8gY2xlYW51cDtcXG4tXFx0aWYgKGNnX3JlYWRfa2V5X2xvbmcoY2dfcGFyZW50LCBcXFwicGlkcy5ldmVudHNcXFwiLCBcXFwibWF4IFxcXCIpICE9IDEpXFxuK1xcdGlmIChjZ19yZWFkX2tleV9zNjQoY2dfcGFyZW50LCBcXFwicGlkcy5ldmVudHNcXFwiLCBcXFwibWF4IFxcXCIpICE9IDEpXFxuIFxcdFxcdGdvdG8gY2xlYW51cDtcXG4gXFxuLVxcbiBcXHRyZXQgPSBLU0ZUX1BBU1M7XFxuIFxcbiBjbGVhbnVwOlxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9jZ3JvdXAvdGVzdF96c3dhcC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvY2dyb3VwL3Rlc3RfenN3YXAuY1xcbmluZGV4IDYwOWM0OGYzODUyNDEuLjZlN2VlMTFiYzk3YTUgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvY2dyb3VwL3Rlc3RfenN3YXAuY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2Nncm91cC90ZXN0X3pzd2FwLmNcXG5AQCAtNTksMTQgKzU5LDE0IEBAIHN0YXRpYyBpbnQgZ2V0X3pzd2FwX3N0b3JlZF9wYWdlcyhzaXplX3QgKnZhbHVlKVxcbiBcXHRyZXR1cm4gcmVhZF9pbnQoUEFUSF9aU1dBUF9TVE9SRURfUEFHRVMsIHZhbHVlKTtcXG4gfVxcbiBcXG4tc3RhdGljIGxvbmcgZ2V0X2NnX3diX2NvdW50KGNvbnN0IGNoYXIgKmNnKVxcbitzdGF0aWMgczY0IGdldF9jZ193Yl9jb3VudChjb25zdCBjaGFyICpjZylcXG4ge1xcbi1cXHRyZXR1cm4gY2dfcmVhZF9rZXlfbG9uZyhjZywgXFxcIm1lbW9yeS5zdGF0XFxcIiwgXFxcInpzd3B3YlxcXCIpO1xcbitcXHRyZXR1cm4gY2dfcmVhZF9rZXlfczY0KGNnLCBcXFwibWVtb3J5LnN0YXRcXFwiLCBcXFwienN3cHdiXFxcIik7XFxuIH1cXG4gXFxuLXN0YXRpYyBsb25nIGdldF96c3dwb3V0KGNvbnN0IGNoYXIgKmNncm91cClcXG4rc3RhdGljIHM2NCBnZXRfenN3cG91dChjb25zdCBjaGFyICpjZ3JvdXApXFxuIHtcXG4tXFx0cmV0dXJuIGNnX3JlYWRfa2V5X2xvbmcoY2dyb3VwLCBcXFwibWVtb3J5LnN0YXRcXFwiLCBcXFwienN3cG91dCBcXFwiKTtcXG4rXFx0cmV0dXJuIGNnX3JlYWRfa2V5X3M2NChjZ3JvdXAsIFxcXCJtZW1vcnkuc3RhdFxcXCIsIFxcXCJ6c3dwb3V0IFxcXCIpO1xcbiB9XFxuIFxcbiBzdGF0aWMgaW50IGFsbG9jYXRlX2FuZF9yZWFkX2J5dGVzKGNvbnN0IGNoYXIgKmNncm91cCwgdm9pZCAqYXJnKVxcbkBAIC0xMjUsOSArMTI1LDEwIEBAIHN0YXRpYyBjaGFyICpzZXR1cF90ZXN0X2dyb3VwXzFNKGNvbnN0IGNoYXIgKnJvb3QsIGNvbnN0IGNoYXIgKm5hbWUpXFxuICAqIFdyaXRlYmFjayBpcyBhc3luY2hyb25vdXM7IHBvbGwgdW50aWwgYXQgbGVhc3Qgb25lIHdyaXRlYmFjayBoYXNcXG4gICogYmVlbiByZWNvcmRlZCBmb3IgQGNnLCBvciB1bnRpbCBAdGltZW91dF9tcyBoYXMgZWxhcHNlZC5cXG4gICovXFxuLXN0YXRpYyBsb25nIHdhaXRfZm9yX3dyaXRlYmFjayhjb25zdCBjaGFyICpjZywgaW50IHRpbWVvdXRfbXMpXFxuK3N0YXRpYyBzNjQgd2FpdF9mb3Jfd3JpdGViYWNrKGNvbnN0IGNoYXIgKmNnLCBpbnQgdGltZW91dF9tcylcXG4ge1xcbi1cXHRsb25nIGVsYXBzZWQsIGNvdW50O1xcbitcXHRsb25nIGVsYXBzZWQ7XFxuK1xcdHM2NCBjb3VudDtcXG4gXFx0Zm9yIChlbGFwc2VkID0gMDsgZWxhcHNlZCBcXHUwMDNjIHRpbWVvdXRfbXM7IGVsYXBzZWQgKz0gMTAwKSB7XFxuIFxcdFxcdGNvdW50ID0gZ2V0X2NnX3diX2NvdW50KGNnKTtcXG4gXFxuQEAgLTE0Nyw3ICsxNDgsNyBAQCBzdGF0aWMgbG9uZyB3YWl0X2Zvcl93cml0ZWJhY2soY29uc3QgY2hhciAqY2csIGludCB0aW1lb3V0X21zKVxcbiAgKi9cXG4gc3RhdGljIGludCB0ZXN0X3pzd2FwX3VzYWdlKGNvbnN0IGNoYXIgKnJvb3QpXFxuIHtcXG4tXFx0bG9uZyB6c3dwb3V0X2JlZm9yZSwgenN3cG91dF9hZnRlcjtcXG4rXFx0czY0IHpzd3BvdXRfYmVmb3JlLCB6c3dwb3V0X2FmdGVyO1xcbiBcXHRpbnQgcmV0ID0gS1NGVF9GQUlMO1xcbiBcXHRjaGFyICp0ZXN0X2dyb3VwO1xcbiBcXG5AQCAtMTkxLDcgKzE5Miw4IEBAIHN0YXRpYyBpbnQgdGVzdF9zd2FwaW5fbm96c3dhcChjb25zdCBjaGFyICpyb290KVxcbiB7XFxuIFxcdGludCByZXQgPSBLU0ZUX0ZBSUw7XFxuIFxcdGNoYXIgKnRlc3RfZ3JvdXAsIG1lbV9tYXhfYnVmWzMyXTtcXG4tXFx0bG9uZyBzd2FwX3BlYWssIHpzd3BvdXQsIG1pbl9zd2FwO1xcbitcXHRsb25nIHN3YXBfcGVhaywgbWluX3N3YXA7XFxuK1xcdHM2NCB6c3dwb3V0O1xcbiBcXHRzaXplX3QgYWxsb2NhdGlvbl9zaXplID0gcGFnZV9zaXplICogNTEyO1xcbiBcXG4gXFx0bWluX3N3YXAgPSBhbGxvY2F0aW9uX3NpemUgLyA0O1xcbkBAIC0yNDgsNyArMjUwLDcgQEAgc3RhdGljIGludCB0ZXN0X3pzd2FwaW4oY29uc3QgY2hhciAqcm9vdClcXG4ge1xcbiBcXHRpbnQgcmV0ID0gS1NGVF9GQUlMO1xcbiBcXHRjaGFyICp0ZXN0X2dyb3VwO1xcbi1cXHRsb25nIHpzd3BpbjtcXG4rXFx0czY0IHpzd3BpbjtcXG4gXFxuIFxcdHRlc3RfZ3JvdXAgPSBjZ19uYW1lKHJvb3QsIFxcXCJ6c3dhcGluX3Rlc3RcXFwiKTtcXG4gXFx0aWYgKCF0ZXN0X2dyb3VwKVxcbkBAIC0yNjQsNyArMjY2LDcgQEAgc3RhdGljIGludCB0ZXN0X3pzd2FwaW4oY29uc3QgY2hhciAqcm9vdClcXG4gXFx0aWYgKGNnX3J1bih0ZXN0X2dyb3VwLCBhbGxvY2F0ZV9hbmRfcmVhZF9ieXRlcywgKHZvaWQgKilNQigzMikpKVxcbiBcXHRcXHRnb3RvIG91dDtcXG4gXFxuLVxcdHpzd3BpbiA9IGNnX3JlYWRfa2V5X2xvbmcodGVzdF9ncm91cCwgXFxcIm1lbW9yeS5zdGF0XFxcIiwgXFxcInpzd3BpbiBcXFwiKTtcXG4rXFx0enN3cGluID0gY2dfcmVhZF9rZXlfczY0KHRlc3RfZ3JvdXAsIFxcXCJtZW1vcnkuc3RhdFxcXCIsIFxcXCJ6c3dwaW4gXFxcIik7XFxuIFxcdGlmICh6c3dwaW4gXFx1MDAzYyAwKSB7XFxuIFxcdFxcdGtzZnRfcHJpbnRfbXNnKFxcXCJmYWlsZWQgdG8gZ2V0IHpzd3BpblxcXFxuXFxcIik7XFxuIFxcdFxcdGdvdG8gb3V0O1xcbkBAIC0zNTUsMTEgKzM1NywxMSBAQCBzdGF0aWMgaW50IGF0dGVtcHRfd3JpdGViYWNrKGNvbnN0IGNoYXIgKmNncm91cCwgdm9pZCAqYXJnKVxcbiBcXG4gc3RhdGljIGludCB0ZXN0X3pzd2FwX3dyaXRlYmFja19vbmUoY29uc3QgY2hhciAqY2dyb3VwLCBib29sIHdiKVxcbiB7XFxuLVxcdGxvbmcgenN3cHdiX2JlZm9yZSwgenN3cHdiX2FmdGVyO1xcbitcXHRzNjQgenN3cHdiX2JlZm9yZSwgenN3cHdiX2FmdGVyO1xcbiBcXG4gXFx0enN3cHdiX2JlZm9yZSA9IGdldF9jZ193Yl9jb3VudChjZ3JvdXApO1xcbiBcXHRpZiAoenN3cHdiX2JlZm9yZSAhPSAwKSB7XFxuLVxcdFxcdGtzZnRfcHJpbnRfbXNnKFxcXCJ6c3dwd2JfYmVmb3JlID0gJWxkIGluc3RlYWQgb2YgMFxcXFxuXFxcIiwgenN3cHdiX2JlZm9yZSk7XFxuK1xcdFxcdGtzZnRfcHJpbnRfbXNnKFxcXCJ6c3dwd2JfYmVmb3JlID0gJWxsZCBpbnN0ZWFkIG9mIDBcXFxcblxcXCIsIHpzd3B3Yl9iZWZvcmUpO1xcbiBcXHRcXHRyZXR1cm4gLTE7XFxuIFxcdH1cXG4gXFxuQEAgLTM3NSw3ICszNzcsNyBAQCBzdGF0aWMgaW50IHRlc3RfenN3YXBfd3JpdGViYWNrX29uZShjb25zdCBjaGFyICpjZ3JvdXAsIGJvb2wgd2IpXFxuIFxcdFxcdHJldHVybiAtMTtcXG4gXFxuIFxcdGlmICh3YiAhPSAhIXpzd3B3Yl9hZnRlcikge1xcbi1cXHRcXHRrc2Z0X3ByaW50X21zZyhcXFwienN3cHdiX2FmdGVyIGlzICVsZCB3aGlsZSB3YiBpcyAlc1xcXFxuXFxcIixcXG4rXFx0XFx0a3NmdF9wcmludF9tc2coXFxcInpzd3B3Yl9hZnRlciBpcyAlbGxkIHdoaWxlIHdiIGlzICVzXFxcXG5cXFwiLFxcbiBcXHRcXHRcXHRcXHR6c3dwd2JfYWZ0ZXIsIHdiID8gXFxcImVuYWJsZWRcXFwiIDogXFxcImRpc2FibGVkXFxcIik7XFxuIFxcdFxcdHJldHVybiAtMTtcXG4gXFx0fVxcbkBAIC00MDgsNiArNDEwLDggQEAgc3RhdGljIGludCB0ZXN0X3pzd2FwX3dyaXRlYmFjayhjb25zdCBjaGFyICpyb290LCBib29sIHdiKVxcbiBcXHQgKiBUaHVzLCB0aGUgcGFyZW50J3Mgc2V0dGluZyBzaGFsbCBiZSB3aGF0J3MgaW4gZWZmZWN0LiAqL1xcbiBcXHRpZiAoY2dfd3JpdGUodGVzdF9ncm91cCwgXFxcIm1lbW9yeS56c3dhcC5tYXhcXFwiLCBcXFwibWF4XFxcIikpXFxuIFxcdFxcdGdvdG8gb3V0O1xcbitcXHRpZiAoY2dfcmVhZF9zdHJjbXBfd2FpdCh0ZXN0X2dyb3VwLCBcXFwiY2dyb3VwLmV2ZW50c1xcXCIsIFxcXCJwb3B1bGF0ZWQgMFxcXFxuXFxcIikpXFxuK1xcdFxcdGdvdG8gb3V0O1xcbiBcXHRpZiAoY2dfd3JpdGUodGVzdF9ncm91cCwgXFxcImNncm91cC5zdWJ0cmVlX2NvbnRyb2xcXFwiLCBcXFwiK21lbW9yeVxcXCIpKVxcbiBcXHRcXHRnb3RvIG91dDtcXG4gXFxuQEAgLTQ4NSw3ICs0ODksNyBAQCBzdGF0aWMgaW50IHRlc3Rfbm9faW52YXNpdmVfY2dyb3VwX3Nocmluayhjb25zdCBjaGFyICpyb290KVxcbiBcXHRcXHRtZW1zZXQoXFx1MDAyNnp3X2FsbG9jYXRpb25bb2ZmXSwgMCwgcGFnZV9zaXplKTtcXG4gXFx0XFx0bWVtc2V0KFxcdTAwMjZ6d19hbGxvY2F0aW9uW29mZl0sICdhJywgcGFnZV9zaXplLzQpO1xcbiBcXHR9XFxuLVxcdGlmIChjZ19yZWFkX2tleV9sb25nKHp3X2dyb3VwLCBcXFwibWVtb3J5LnN0YXRcXFwiLCBcXFwienN3YXBwZWRcXFwiKSBcXHUwMDNjIDEpXFxuK1xcdGlmIChjZ19yZWFkX2tleV9zNjQoendfZ3JvdXAsIFxcXCJtZW1vcnkuc3RhdFxcXCIsIFxcXCJ6c3dhcHBlZFxcXCIpIFxcdTAwM2MgMSlcXG4gXFx0XFx0Z290byBvdXQ7XFxuIFxcbiBcXHQvKiBQdXNoIHdiX2dyb3VwIG1lbW9yeSBpbnRvIHpzd2FwIHdpdGggaGFyZC10by1jb21wcmVzcyBkYXRhIHRvIHRyaWdnZXIgd2IgKi9cXG5AQCAtNjI4LDExICs2MzIsMTIgQEAgc3RhdGljIGludCB0ZXN0X25vX2ttZW1fYnlwYXNzKGNvbnN0IGNoYXIgKnJvb3QpXFxuIFxcdFxcdFxcdGJyZWFrO1xcbiBcXHRcXHQvKiBJZiBtZW1vcnkgd2FzIHB1c2hlZCB0byB6c3dhcCwgdmVyaWZ5IGl0IGJlbG9uZ3MgdG8gbWVtY2cgKi9cXG4gXFx0XFx0aWYgKHN0b3JlZF9wYWdlcyBcXHUwMDNlIHN0b3JlZF9wYWdlc190aHJlc2hvbGQpIHtcXG4tXFx0XFx0XFx0aW50IHpzd2FwcGVkID0gY2dfcmVhZF9rZXlfbG9uZyh0ZXN0X2dyb3VwLCBcXFwibWVtb3J5LnN0YXRcXFwiLCBcXFwienN3YXBwZWQgXFxcIik7XFxuLVxcdFxcdFxcdGludCBkZWx0YSA9IHN0b3JlZF9wYWdlcyAqIHBhZ2Vfc2l6ZSAtIHpzd2FwcGVkO1xcbi1cXHRcXHRcXHRpbnQgcmVzdWx0X29rID0gZGVsdGEgXFx1MDAzYyBzdG9yZWRfcGFnZXMgKiBwYWdlX3NpemUgLyA0O1xcbitcXHRcXHRcXHRzNjQgenN3YXBwZWQgPSBjZ19yZWFkX2tleV9zNjQoXFxuK1xcdFxcdFxcdFxcdHRlc3RfZ3JvdXAsIFxcXCJtZW1vcnkuc3RhdFxcXCIsIFxcXCJ6c3dhcHBlZCBcXFwiKTtcXG4rXFx0XFx0XFx0czY0IGRlbHRhID0gKHM2NClzdG9yZWRfcGFnZXMgKiBwYWdlX3NpemUgLSB6c3dhcHBlZDtcXG4rXFx0XFx0XFx0czY0IG1heF9kZWx0YSA9IChzNjQpc3RvcmVkX3BhZ2VzICogcGFnZV9zaXplIC8gNDtcXG4gXFxuLVxcdFxcdFxcdHJldCA9IHJlc3VsdF9vayA/IEtTRlRfUEFTUyA6IEtTRlRfRkFJTDtcXG4rXFx0XFx0XFx0cmV0ID0gKGRlbHRhIFxcdTAwM2MgbWF4X2RlbHRhKSA/IEtTRlRfUEFTUyA6IEtTRlRfRkFJTDtcXG4gXFx0XFx0XFx0YnJlYWs7XFxuIFxcdFxcdH1cXG4gXFx0fVxcbkBAIC03MDEsOSArNzA2LDkgQEAgc3RhdGljIGludCBhbGxvY2F0ZV9yYW5kb21fYW5kX3dhaXQoY29uc3QgY2hhciAqY2dyb3VwLCB2b2lkICphcmcpXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbi1zdGF0aWMgbG9uZyBnZXRfenN3YXBfaW5jb21wKGNvbnN0IGNoYXIgKmNncm91cClcXG4rc3RhdGljIHM2NCBnZXRfenN3YXBfaW5jb21wKGNvbnN0IGNoYXIgKmNncm91cClcXG4ge1xcbi1cXHRyZXR1cm4gY2dfcmVhZF9rZXlfbG9uZyhjZ3JvdXAsIFxcXCJtZW1vcnkuc3RhdFxcXCIsIFxcXCJ6c3dhcF9pbmNvbXAgXFxcIik7XFxuK1xcdHJldHVybiBjZ19yZWFkX2tleV9zNjQoY2dyb3VwLCBcXFwibWVtb3J5LnN0YXRcXFwiLCBcXFwienN3YXBfaW5jb21wIFxcXCIpO1xcbiB9XFxuIFxcbiAvKlxcbkBAIC03MTksNyArNzI0LDcgQEAgc3RhdGljIGludCB0ZXN0X3pzd2FwX2luY29tcHJlc3NpYmxlKGNvbnN0IGNoYXIgKnJvb3QpXFxuIFxcdGludCByZXQgPSBLU0ZUX0ZBSUw7XFxuIFxcdHN0cnVjdCBpbmNvbXBfY2hpbGRfYXJncyAqdmFsdWVzO1xcbiBcXHRjaGFyICp0ZXN0X2dyb3VwO1xcbi1cXHRsb25nIHpzd2FwX2luY29tcDtcXG4rXFx0czY0IHpzd2FwX2luY29tcDtcXG4gXFx0cGlkX3QgY2hpbGRfcGlkO1xcbiBcXHRpbnQgY2hpbGRfc3RhdHVzO1xcbiBcXHRjaGFyIGJ1ZjtcXG5AQCAtNzU1LDEzICs3NjAsMTUgQEAgc3RhdGljIGludCB0ZXN0X3pzd2FwX2luY29tcHJlc3NpYmxlKGNvbnN0IGNoYXIgKnJvb3QpXFxuIFxcbiBcXHR6c3dhcF9pbmNvbXAgPSBnZXRfenN3YXBfaW5jb21wKHRlc3RfZ3JvdXApO1xcbiBcXHRpZiAoenN3YXBfaW5jb21wIFxcdTAwM2M9IDApIHtcXG4tXFx0XFx0bG9uZyB6c3dwb3V0ID0gZ2V0X3pzd3BvdXQodGVzdF9ncm91cCk7XFxuLVxcdFxcdGxvbmcgenN3YXBwZWQgPSBjZ19yZWFkX2tleV9sb25nKHRlc3RfZ3JvdXAsIFxcXCJtZW1vcnkuc3RhdFxcXCIsIFxcXCJ6c3dhcHBlZCBcXFwiKTtcXG4tXFx0XFx0bG9uZyB6c3dhcF9iID0gY2dfcmVhZF9rZXlfbG9uZyh0ZXN0X2dyb3VwLCBcXFwibWVtb3J5LnN0YXRcXFwiLCBcXFwienN3YXAgXFxcIik7XFxuLVxcbi1cXHRcXHRrc2Z0X3ByaW50X21zZyhcXFwienN3YXBfaW5jb21wIG5vdCBpbmNyZWFzZWQ6ICVsZFxcXFxuXFxcIiwgenN3YXBfaW5jb21wKTtcXG4tXFx0XFx0a3NmdF9wcmludF9tc2coXFxcImRlYnVnOiB6c3dwb3V0PSVsZCB6c3dhcHBlZD0lbGQgenN3YXBfYj0lbGRcXFxcblxcXCIsXFxuLVxcdFxcdFxcdCAgICAgICB6c3dwb3V0LCB6c3dhcHBlZCwgenN3YXBfYik7XFxuK1xcdFxcdHM2NCB6c3dwb3V0ID0gZ2V0X3pzd3BvdXQodGVzdF9ncm91cCk7XFxuK1xcdFxcdHM2NCB6c3dhcHBlZCA9XFxuK1xcdFxcdFxcdGNnX3JlYWRfa2V5X3M2NCh0ZXN0X2dyb3VwLCBcXFwibWVtb3J5LnN0YXRcXFwiLCBcXFwienN3YXBwZWQgXFxcIik7XFxuK1xcdFxcdHM2NCB6c3dhcF9iID1cXG4rXFx0XFx0XFx0Y2dfcmVhZF9rZXlfczY0KHRlc3RfZ3JvdXAsIFxcXCJtZW1vcnkuc3RhdFxcXCIsIFxcXCJ6c3dhcCBcXFwiKTtcXG4rXFxuK1xcdFxcdGtzZnRfcHJpbnRfbXNnKFxcXCJ6c3dhcF9pbmNvbXAgbm90IGluY3JlYXNlZDogJWxsZFxcXFxuXFxcIiwgenN3YXBfaW5jb21wKTtcXG4rXFx0XFx0a3NmdF9wcmludF9tc2coXFxcImRlYnVnOiB6c3dwb3V0PSVsbGQgenN3YXBwZWQ9JWxsZCB6c3dhcF9iPSVsbGRcXFxcblxcXCIsXFxuK1xcdFxcdFxcdFxcdHpzd3BvdXQsIHpzd2FwcGVkLCB6c3dhcF9iKTtcXG4gXFx0XFx0a3NmdF9wcmludF9tc2coXFxcImRlYnVnOiBtYWR2aXNlIHJldD0lZCBlcnJubz0lZFxcXFxuXFxcIixcXG4gXFx0XFx0XFx0ICAgICAgIHZhbHVlcy1cXHUwMDNlbWFkdmlzZV9yZXQsIHZhbHVlcy1cXHUwMDNlbWFkdmlzZV9lcnJubyk7XFxuIFxcdFxcdGdvdG8gb3V0X2tpbGw7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDA4OjUxOjE3LjE5MTMyMzU2MVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6NDUzNDY2MDY1MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgb25seSB1c2VyLXNwYWNlIGNncm91cCBzZWxmLXRlc3RzIHVuZGVyIHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2Nncm91cC8gYW5kIGRvZXMgbm90IHRvdWNoIGFueSBrZXJuZWwgY29kZSBvciBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzXG50b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsXG5hbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLlxuXG4tIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOlxuICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkXG4gIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuXG4gIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCxcbiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLlxuXG4tIERPIE5PVCBCTElORExZIFRSVVNUIFwiTk8gRlVOQ1RJT05BTCBDSEFOR0VcIiAoTkZDSSkgT1IgXCJSRUZBQ1RPUklOR1wiIENMQUlNUzpcbiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyBcImNsZWFudXBzXCIsIFwicmVmYWN0b3JpbmdzXCIsIG9yIHN0YXRlXG4gIFwiTm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWRcIi4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuXG4gIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudFxuICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy5cbiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC5cblxuLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDpcbiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLFxuICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy5cbiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlclxuICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4yLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6XG5cbi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczpcbiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuXG4gICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pXG4gICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLlxuICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzXG4gICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy5cbiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuXG4tIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZTpcbiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOlxuICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZ1xuICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLlxuICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOlxuLSBDb3JlIFN1YnN5c3RlbXM6XG4gICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLFxuICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy5cbi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOlxuICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy5cbi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOlxuICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy5cbi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczpcbiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG40LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTilcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5XaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjpcblxuLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6XG4gIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzXG4gIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0XG4gIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLlxuICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgXCJmb2N1c2VkXCIsXG4gIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy5cblxuLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6XG4gIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50c1xuICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy5cblxuLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6XG4gIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2tcbiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuXG4gIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlclxuICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG41LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZTpcbi0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbi0gQ2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC5cbi0gU3RyaXAgYW55ICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDExYTlmMDlmNTYwYjAyNjk1NDAxZGQyYzZjYzNmMTk5N2Y3OGE2NDJcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU3VuIFNlcCA2IDA4OjUxOjE1IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvY2dyb3VwL2xpYi9jZ3JvdXBfdXRpbC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvY2dyb3VwL2xpYi9jZ3JvdXBfdXRpbC5jXG5pbmRleCAyNTk2YzEyY2Q4NjQ1Li5lZDNjNDg5MzgzM2E1IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvY2dyb3VwL2xpYi9jZ3JvdXBfdXRpbC5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9jZ3JvdXAvbGliL2Nncm91cF91dGlsLmNcbkBAIC0xNzIsNyArMTcyLDcgQEAgbG9uZyBjZ19yZWFkX2xvbmdfZmQoaW50IGZkKVxuIFx0cmV0dXJuIGF0b2woYnVmKTtcbiB9XG4gXG4tbG9uZyBjZ19yZWFkX2tleV9sb25nKGNvbnN0IGNoYXIgKmNncm91cCwgY29uc3QgY2hhciAqY29udHJvbCwgY29uc3QgY2hhciAqa2V5KVxuK3M2NCBjZ19yZWFkX2tleV9zNjQoY29uc3QgY2hhciAqY2dyb3VwLCBjb25zdCBjaGFyICpjb250cm9sLCBjb25zdCBjaGFyICprZXkpXG4ge1xuIFx0Y2hhciBidWZbQlVGX1NJWkVdO1xuIFx0Y2hhciAqcHRyO1xuQEAgLTE4NCwxOCArMTg0LDE4IEBAIGxvbmcgY2dfcmVhZF9rZXlfbG9uZyhjb25zdCBjaGFyICpjZ3JvdXAsIGNvbnN0IGNoYXIgKmNvbnRyb2wsIGNvbnN0IGNoYXIgKmtleSlcbiBcdGlmICghcHRyKVxuIFx0XHRyZXR1cm4gLTE7XG4gXG4tXHRyZXR1cm4gYXRvbChwdHIgKyBzdHJsZW4oa2V5KSk7XG4rXHRyZXR1cm4gYXRvbGwocHRyICsgc3RybGVuKGtleSkpO1xuIH1cbiBcbi1sb25nIGNnX3JlYWRfa2V5X2xvbmdfcG9sbChjb25zdCBjaGFyICpjZ3JvdXAsIGNvbnN0IGNoYXIgKmNvbnRyb2wsXG4tXHRcdFx0ICAgY29uc3QgY2hhciAqa2V5LCBsb25nIGV4cGVjdGVkLCBpbnQgcmV0cmllcyxcbi1cdFx0XHQgICB1c2Vjb25kc190IHdhaXRfaW50ZXJ2YWxfdXMpXG4rczY0IGNnX3JlYWRfa2V5X3M2NF9wb2xsKGNvbnN0IGNoYXIgKmNncm91cCwgY29uc3QgY2hhciAqY29udHJvbCxcbitcdFx0XHQgY29uc3QgY2hhciAqa2V5LCBzNjQgZXhwZWN0ZWQsIGludCByZXRyaWVzLFxuK1x0XHRcdCB1c2Vjb25kc190IHdhaXRfaW50ZXJ2YWxfdXMpXG4ge1xuLVx0bG9uZyB2YWwgPSAtMTtcbitcdHM2NCB2YWwgPSAtMTtcbiBcdGludCBpO1xuIFxuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgcmV0cmllczsgaSsrKSB7XG4tXHRcdHZhbCA9IGNnX3JlYWRfa2V5X2xvbmcoY2dyb3VwLCBjb250cm9sLCBrZXkpO1xuK1x0XHR2YWwgPSBjZ19yZWFkX2tleV9zNjQoY2dyb3VwLCBjb250cm9sLCBrZXkpO1xuIFx0XHRpZiAodmFsIFx1MDAzYyAwKVxuIFx0XHRcdHJldHVybiB2YWw7XG4gXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvY2dyb3VwL2xpYi9pbmNsdWRlL2Nncm91cF91dGlsLmggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9jZ3JvdXAvbGliL2luY2x1ZGUvY2dyb3VwX3V0aWwuaFxuaW5kZXggNWQzOWM3MDlhYzdhNC4uZGRiMDU5MzJkOWM3NyAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2Nncm91cC9saWIvaW5jbHVkZS9jZ3JvdXBfdXRpbC5oXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9jZ3JvdXAvbGliL2luY2x1ZGUvY2dyb3VwX3V0aWwuaFxuQEAgLTIsNiArMiw4IEBAXG4gI2luY2x1ZGUgXHUwMDNjc3RkYm9vbC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjc3RkbGliLmhcdTAwM2VcbiBcbit0eXBlZGVmIHNpZ25lZCBsb25nIGxvbmcgczY0O1xuK1xuICNpZm5kZWYgQlVGX1NJWkVcbiAjZGVmaW5lIEJVRl9TSVpFIDQwOTZcbiAjZW5kaWZcbkBAIC0yNCwyNSArMjYsMjUgQEBcbiAvKlxuICAqIENoZWNrcyBpZiB0d28gZ2l2ZW4gdmFsdWVzIGRpZmZlciBieSBsZXNzIHRoYW4gZXJyJSBvZiB0aGVpciBzdW0uXG4gICovXG4tc3RhdGljIGlubGluZSBpbnQgdmFsdWVzX2Nsb3NlKGxvbmcgYSwgbG9uZyBiLCBpbnQgZXJyKVxuK3N0YXRpYyBpbmxpbmUgaW50IHZhbHVlc19jbG9zZShzNjQgYSwgczY0IGIsIGludCBlcnIpXG4ge1xuLVx0cmV0dXJuIGxhYnMoYSAtIGIpIFx1MDAzYz0gKGEgKyBiKSAvIDEwMCAqIGVycjtcbitcdHJldHVybiBsbGFicyhhIC0gYikgXHUwMDNjPSAoYSArIGIpIC8gMTAwICogZXJyO1xuIH1cbiBcbiAvKlxuICAqIENoZWNrcyBpZiB0d28gZ2l2ZW4gdmFsdWVzIGRpZmZlciBieSBsZXNzIHRoYW4gZXJyJSBvZiB0aGVpciBzdW0gYW5kIGFzc2VydFxuICAqIHdpdGggZGV0YWlsZWQgZGVidWcgaW5mbyBpZiBub3QuXG4gICovXG4tc3RhdGljIGlubGluZSBpbnQgdmFsdWVzX2Nsb3NlX3JlcG9ydChsb25nIGEsIGxvbmcgYiwgaW50IGVycilcbitzdGF0aWMgaW5saW5lIGludCB2YWx1ZXNfY2xvc2VfcmVwb3J0KHM2NCBhLCBzNjQgYiwgaW50IGVycilcbiB7XG4tXHRsb25nIGRpZmYgID0gbGFicyhhIC0gYik7XG4tXHRsb25nIGxpbWl0ID0gKGEgKyBiKSAvIDEwMCAqIGVycjtcbitcdHM2NCBkaWZmICA9IGxsYWJzKGEgLSBiKTtcbitcdHM2NCBsaW1pdCA9IChhICsgYikgLyAxMDAgKiBlcnI7XG4gXHRkb3VibGUgYWN0dWFsX2VyciA9IChhICsgYikgPyAoMTAwLjAgKiBkaWZmIC8gKGEgKyBiKSkgOiAwLjA7XG4gXHRpbnQgY2xvc2UgPSBkaWZmIFx1MDAzYz0gbGltaXQ7XG4gXG4gXHRpZiAoIWNsb3NlKVxuIFx0XHRmcHJpbnRmKHN0ZGVycixcbi1cdFx0XHRcIltGQUlMXSBhY3R1YWw9JWxkIGV4cGVjdGVkPSVsZCB8IGRpZmY9JWxkIHwgbGltaXQ9JWxkIHwgXCJcbitcdFx0XHRcIltGQUlMXSBhY3R1YWw9JWxsZCBleHBlY3RlZD0lbGxkIHwgZGlmZj0lbGxkIHwgbGltaXQ9JWxsZCB8IFwiXG4gXHRcdFx0XCJ0b2xlcmFuY2U9JWQlJSB8IGFjdHVhbF9lcnJvcj0lLjJmJSVcXG5cIixcbiBcdFx0XHRhLCBiLCBkaWZmLCBsaW1pdCwgZXJyLCBhY3R1YWxfZXJyKTtcbiBcbkBAIC02OSwxMCArNzEsMTAgQEAgZXh0ZXJuIGludCBjZ19yZWFkX3N0cnN0cihjb25zdCBjaGFyICpjZ3JvdXAsIGNvbnN0IGNoYXIgKmNvbnRyb2wsXG4gXHRcdFx0ICBjb25zdCBjaGFyICpuZWVkbGUpO1xuIGV4dGVybiBsb25nIGNnX3JlYWRfbG9uZyhjb25zdCBjaGFyICpjZ3JvdXAsIGNvbnN0IGNoYXIgKmNvbnRyb2wpO1xuIGV4dGVybiBsb25nIGNnX3JlYWRfbG9uZ19mZChpbnQgZmQpO1xuLWxvbmcgY2dfcmVhZF9rZXlfbG9uZyhjb25zdCBjaGFyICpjZ3JvdXAsIGNvbnN0IGNoYXIgKmNvbnRyb2wsIGNvbnN0IGNoYXIgKmtleSk7XG4tbG9uZyBjZ19yZWFkX2tleV9sb25nX3BvbGwoY29uc3QgY2hhciAqY2dyb3VwLCBjb25zdCBjaGFyICpjb250cm9sLFxuLVx0XHRcdCAgIGNvbnN0IGNoYXIgKmtleSwgbG9uZyBleHBlY3RlZCwgaW50IHJldHJpZXMsXG4tXHRcdFx0ICAgdXNlY29uZHNfdCB3YWl0X2ludGVydmFsX3VzKTtcbitzNjQgY2dfcmVhZF9rZXlfczY0KGNvbnN0IGNoYXIgKmNncm91cCwgY29uc3QgY2hhciAqY29udHJvbCwgY29uc3QgY2hhciAqa2V5KTtcbitzNjQgY2dfcmVhZF9rZXlfczY0X3BvbGwoY29uc3QgY2hhciAqY2dyb3VwLCBjb25zdCBjaGFyICpjb250cm9sLFxuK1x0XHRcdCBjb25zdCBjaGFyICprZXksIHM2NCBleHBlY3RlZCwgaW50IHJldHJpZXMsXG4rXHRcdFx0IHVzZWNvbmRzX3Qgd2FpdF9pbnRlcnZhbF91cyk7XG4gZXh0ZXJuIGxvbmcgY2dfcmVhZF9sYyhjb25zdCBjaGFyICpjZ3JvdXAsIGNvbnN0IGNoYXIgKmNvbnRyb2wpO1xuIGV4dGVybiBpbnQgY2dfd3JpdGUoY29uc3QgY2hhciAqY2dyb3VwLCBjb25zdCBjaGFyICpjb250cm9sLCBjaGFyICpidWYpO1xuIGV4dGVybiBpbnQgY2dfb3Blbihjb25zdCBjaGFyICpjZ3JvdXAsIGNvbnN0IGNoYXIgKmNvbnRyb2wsIGludCBmbGFncyk7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvY2dyb3VwL3Rlc3RfY3B1LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9jZ3JvdXAvdGVzdF9jcHUuY1xuaW5kZXggNzM1YTUzYmIyMjJiYS4uMTFkYTFkZTljZGViNiAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2Nncm91cC90ZXN0X2NwdS5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9jZ3JvdXAvdGVzdF9jcHUuY1xuQEAgLTI0LDcgKzI0LDcgQEAgZW51bSBob2dfY2xvY2tfdHlwZSB7XG4gc3RydWN0IGNwdV9ob2dnZXIge1xuIFx0Y2hhciAqY2dyb3VwO1xuIFx0cGlkX3QgcGlkO1xuLVx0bG9uZyB1c2FnZTtcbitcdHM2NCB1c2FnZTtcbiB9O1xuIFxuIHN0cnVjdCBjcHVfaG9nX2Z1bmNfcGFyYW0ge1xuQEAgLTE4NSw3ICsxODUsNyBAQCBzdGF0aWMgaW50IGhvZ19jcHVzX3RpbWVkKGNvbnN0IGNoYXIgKmNncm91cCwgdm9pZCAqYXJnKVxuIHN0YXRpYyBpbnQgdGVzdF9jcHVjZ19zdGF0cyhjb25zdCBjaGFyICpyb290KVxuIHtcbiBcdGludCByZXQgPSBLU0ZUX0ZBSUw7XG4tXHRsb25nIHVzYWdlX3VzZWMsIHVzZXJfdXNlYywgc3lzdGVtX3VzZWM7XG4rXHRzNjQgdXNhZ2VfdXNlYywgdXNlcl91c2VjLCBzeXN0ZW1fdXNlYztcbiBcdGxvbmcgdXNhZ2Vfc2Vjb25kcyA9IDI7XG4gXHRsb25nIGV4cGVjdGVkX3VzYWdlX3VzZWMgPSB1c2FnZV9zZWNvbmRzICogVVNFQ19QRVJfU0VDO1xuIFx0Y2hhciAqY3B1Y2c7XG5AQCAtMTk3LDkgKzE5Nyw5IEBAIHN0YXRpYyBpbnQgdGVzdF9jcHVjZ19zdGF0cyhjb25zdCBjaGFyICpyb290KVxuIFx0aWYgKGNnX2NyZWF0ZShjcHVjZykpXG4gXHRcdGdvdG8gY2xlYW51cDtcbiBcbi1cdHVzYWdlX3VzZWMgPSBjZ19yZWFkX2tleV9sb25nKGNwdWNnLCBcImNwdS5zdGF0XCIsIFwidXNhZ2VfdXNlY1wiKTtcbi1cdHVzZXJfdXNlYyA9IGNnX3JlYWRfa2V5X2xvbmcoY3B1Y2csIFwiY3B1LnN0YXRcIiwgXCJ1c2VyX3VzZWNcIik7XG4tXHRzeXN0ZW1fdXNlYyA9IGNnX3JlYWRfa2V5X2xvbmcoY3B1Y2csIFwiY3B1LnN0YXRcIiwgXCJzeXN0ZW1fdXNlY1wiKTtcbitcdHVzYWdlX3VzZWMgPSBjZ19yZWFkX2tleV9zNjQoY3B1Y2csIFwiY3B1LnN0YXRcIiwgXCJ1c2FnZV91c2VjXCIpO1xuK1x0dXNlcl91c2VjID0gY2dfcmVhZF9rZXlfczY0KGNwdWNnLCBcImNwdS5zdGF0XCIsIFwidXNlcl91c2VjXCIpO1xuK1x0c3lzdGVtX3VzZWMgPSBjZ19yZWFkX2tleV9zNjQoY3B1Y2csIFwiY3B1LnN0YXRcIiwgXCJzeXN0ZW1fdXNlY1wiKTtcbiBcdGlmICh1c2FnZV91c2VjICE9IDAgfHwgdXNlcl91c2VjICE9IDAgfHwgc3lzdGVtX3VzZWMgIT0gMClcbiBcdFx0Z290byBjbGVhbnVwO1xuIFxuQEAgLTIxNCw4ICsyMTQsOCBAQCBzdGF0aWMgaW50IHRlc3RfY3B1Y2dfc3RhdHMoY29uc3QgY2hhciAqcm9vdClcbiBcdGlmIChjZ19ydW4oY3B1Y2csIGhvZ19jcHVzX3RpbWVkLCAodm9pZCAqKVx1MDAyNnBhcmFtKSlcbiBcdFx0Z290byBjbGVhbnVwO1xuIFxuLVx0dXNhZ2VfdXNlYyA9IGNnX3JlYWRfa2V5X2xvbmcoY3B1Y2csIFwiY3B1LnN0YXRcIiwgXCJ1c2FnZV91c2VjXCIpO1xuLVx0dXNlcl91c2VjID0gY2dfcmVhZF9rZXlfbG9uZyhjcHVjZywgXCJjcHUuc3RhdFwiLCBcInVzZXJfdXNlY1wiKTtcbitcdHVzYWdlX3VzZWMgPSBjZ19yZWFkX2tleV9zNjQoY3B1Y2csIFwiY3B1LnN0YXRcIiwgXCJ1c2FnZV91c2VjXCIpO1xuK1x0dXNlcl91c2VjID0gY2dfcmVhZF9rZXlfczY0KGNwdWNnLCBcImNwdS5zdGF0XCIsIFwidXNlcl91c2VjXCIpO1xuIFx0aWYgKHVzZXJfdXNlYyBcdTAwM2M9IDApXG4gXHRcdGdvdG8gY2xlYW51cDtcbiBcbkBAIC0yMzksNyArMjM5LDcgQEAgc3RhdGljIGludCB0ZXN0X2NwdWNnX25pY2UoY29uc3QgY2hhciAqcm9vdClcbiB7XG4gXHRpbnQgcmV0ID0gS1NGVF9GQUlMO1xuIFx0aW50IHN0YXR1cztcbi1cdGxvbmcgdXNlcl91c2VjLCBuaWNlX3VzZWM7XG4rXHRzNjQgdXNlcl91c2VjLCBuaWNlX3VzZWM7XG4gXHRsb25nIHVzYWdlX3NlY29uZHMgPSAyO1xuIFx0bG9uZyBleHBlY3RlZF9uaWNlX3VzZWMgPSB1c2FnZV9zZWNvbmRzICogVVNFQ19QRVJfU0VDO1xuIFx0Y2hhciAqY3B1Y2c7XG5AQCAtMjUyLDggKzI1Miw4IEBAIHN0YXRpYyBpbnQgdGVzdF9jcHVjZ19uaWNlKGNvbnN0IGNoYXIgKnJvb3QpXG4gXHRpZiAoY2dfY3JlYXRlKGNwdWNnKSlcbiBcdFx0Z290byBjbGVhbnVwO1xuIFxuLVx0dXNlcl91c2VjID0gY2dfcmVhZF9rZXlfbG9uZyhjcHVjZywgXCJjcHUuc3RhdFwiLCBcInVzZXJfdXNlY1wiKTtcbi1cdG5pY2VfdXNlYyA9IGNnX3JlYWRfa2V5X2xvbmcoY3B1Y2csIFwiY3B1LnN0YXRcIiwgXCJuaWNlX3VzZWNcIik7XG4rXHR1c2VyX3VzZWMgPSBjZ19yZWFkX2tleV9zNjQoY3B1Y2csIFwiY3B1LnN0YXRcIiwgXCJ1c2VyX3VzZWNcIik7XG4rXHRuaWNlX3VzZWMgPSBjZ19yZWFkX2tleV9zNjQoY3B1Y2csIFwiY3B1LnN0YXRcIiwgXCJuaWNlX3VzZWNcIik7XG4gXHRpZiAobmljZV91c2VjID09IC0xKVxuIFx0XHRyZXQgPSBLU0ZUX1NLSVA7XG4gXHRpZiAodXNlcl91c2VjICE9IDAgfHwgbmljZV91c2VjICE9IDApXG5AQCAtMjg5LDggKzI4OSw4IEBAIHN0YXRpYyBpbnQgdGVzdF9jcHVjZ19uaWNlKGNvbnN0IGNoYXIgKnJvb3QpXG4gXHRcdGlmICghV0lGRVhJVEVEKHN0YXR1cykpXG4gXHRcdFx0Z290byBjbGVhbnVwO1xuIFxuLVx0XHR1c2VyX3VzZWMgPSBjZ19yZWFkX2tleV9sb25nKGNwdWNnLCBcImNwdS5zdGF0XCIsIFwidXNlcl91c2VjXCIpO1xuLVx0XHRuaWNlX3VzZWMgPSBjZ19yZWFkX2tleV9sb25nKGNwdWNnLCBcImNwdS5zdGF0XCIsIFwibmljZV91c2VjXCIpO1xuK1x0XHR1c2VyX3VzZWMgPSBjZ19yZWFkX2tleV9zNjQoY3B1Y2csIFwiY3B1LnN0YXRcIiwgXCJ1c2VyX3VzZWNcIik7XG4rXHRcdG5pY2VfdXNlYyA9IGNnX3JlYWRfa2V5X3M2NChjcHVjZywgXCJjcHUuc3RhdFwiLCBcIm5pY2VfdXNlY1wiKTtcbiBcdFx0aWYgKHVzZXJfdXNlYyBcdTAwM2M9IDApXG4gXHRcdFx0Z290byBjbGVhbnVwO1xuIFx0XHRpZiAoIXZhbHVlc19jbG9zZV9yZXBvcnQobmljZV91c2VjLCBleHBlY3RlZF9uaWNlX3VzZWMsIDEpKVxuQEAgLTM1Nyw4ICszNTcsOCBAQCBydW5fY3B1Y2dfd2VpZ2h0X3Rlc3QoXG4gXHR9XG4gXG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBBUlJBWV9TSVpFKGNoaWxkcmVuKTsgaSsrKVxuLVx0XHRjaGlsZHJlbltpXS51c2FnZSA9IGNnX3JlYWRfa2V5X2xvbmcoY2hpbGRyZW5baV0uY2dyb3VwLFxuLVx0XHRcdFx0XCJjcHUuc3RhdFwiLCBcInVzYWdlX3VzZWNcIik7XG4rXHRcdGNoaWxkcmVuW2ldLnVzYWdlID0gY2dfcmVhZF9rZXlfczY0KGNoaWxkcmVuW2ldLmNncm91cCxcbitcdFx0XHRcdFx0XHQgICAgXCJjcHUuc3RhdFwiLCBcInVzYWdlX3VzZWNcIik7XG4gXG4gXHRpZiAodmFsaWRhdGUoY2hpbGRyZW4sIEFSUkFZX1NJWkUoY2hpbGRyZW4pKSlcbiBcdFx0Z290byBjbGVhbnVwO1xuQEAgLTQ4Niw3ICs0ODYsNyBAQCBydW5fY3B1Y2dfbmVzdGVkX3dlaWdodF90ZXN0KGNvbnN0IGNoYXIgKnJvb3QsIGJvb2wgb3ZlcnByb3Zpc2lvbmVkKVxuIFx0aW50IHJldCA9IEtTRlRfRkFJTCwgaTtcbiBcdGNoYXIgKnBhcmVudCA9IE5VTEwsICpjaGlsZCA9IE5VTEw7XG4gXHRzdHJ1Y3QgY3B1X2hvZ2dlciBsZWFmWzNdID0ge307XG4tXHRsb25nIG5lc3RlZF9sZWFmX3VzYWdlLCBjaGlsZF91c2FnZTtcbitcdHM2NCBuZXN0ZWRfbGVhZl91c2FnZSwgY2hpbGRfdXNhZ2U7XG4gXHRpbnQgbnByb2NzID0gZ2V0X25wcm9jcygpO1xuIFxuIFx0aWYgKCFvdmVycHJvdmlzaW9uZWQpIHtcbkBAIC01NjcsOCArNTY3LDggQEAgcnVuX2NwdWNnX25lc3RlZF93ZWlnaHRfdGVzdChjb25zdCBjaGFyICpyb290LCBib29sIG92ZXJwcm92aXNpb25lZClcbiBcdH1cbiBcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIEFSUkFZX1NJWkUobGVhZik7IGkrKykge1xuLVx0XHRsZWFmW2ldLnVzYWdlID0gY2dfcmVhZF9rZXlfbG9uZyhsZWFmW2ldLmNncm91cCxcbi1cdFx0XHRcdFwiY3B1LnN0YXRcIiwgXCJ1c2FnZV91c2VjXCIpO1xuK1x0XHRsZWFmW2ldLnVzYWdlID0gY2dfcmVhZF9rZXlfczY0KGxlYWZbaV0uY2dyb3VwLCBcImNwdS5zdGF0XCIsXG4rXHRcdFx0XHRcdFx0XCJ1c2FnZV91c2VjXCIpO1xuIFx0XHRpZiAobGVhZltpXS51c2FnZSBcdTAwM2M9IDApXG4gXHRcdFx0Z290byBjbGVhbnVwO1xuIFx0fVxuQEAgLTU4MCw4ICs1ODAsNyBAQCBydW5fY3B1Y2dfbmVzdGVkX3dlaWdodF90ZXN0KGNvbnN0IGNoYXIgKnJvb3QsIGJvb2wgb3ZlcnByb3Zpc2lvbmVkKVxuIFx0fSBlbHNlIGlmICghdmFsdWVzX2Nsb3NlX3JlcG9ydChsZWFmWzBdLnVzYWdlICogMiwgbmVzdGVkX2xlYWZfdXNhZ2UsIDE1KSlcbiBcdFx0Z290byBjbGVhbnVwO1xuIFxuLVxuLVx0Y2hpbGRfdXNhZ2UgPSBjZ19yZWFkX2tleV9sb25nKGNoaWxkLCBcImNwdS5zdGF0XCIsIFwidXNhZ2VfdXNlY1wiKTtcbitcdGNoaWxkX3VzYWdlID0gY2dfcmVhZF9rZXlfczY0KGNoaWxkLCBcImNwdS5zdGF0XCIsIFwidXNhZ2VfdXNlY1wiKTtcbiBcdGlmIChjaGlsZF91c2FnZSBcdTAwM2M9IDApXG4gXHRcdGdvdG8gY2xlYW51cDtcbiBcdGlmICghdmFsdWVzX2Nsb3NlX3JlcG9ydChjaGlsZF91c2FnZSwgbmVzdGVkX2xlYWZfdXNhZ2UsIDEpKVxuQEAgLTY3OSw3ICs2NzgsOCBAQCBzdGF0aWMgaW50IHRlc3RfY3B1Y2dfbWF4KGNvbnN0IGNoYXIgKnJvb3QpXG4gXHRsb25nIGR1cmF0aW9uX3NlY29uZHMgPSAxO1xuIFxuIFx0bG9uZyBkdXJhdGlvbl91c2VjO1xuLVx0bG9uZyB1c2FnZV91c2VjLCBuX3BlcmlvZHMsIHJlbWFpbmRlcl91c2VjLCBleHBlY3RlZF91c2FnZV91c2VjO1xuK1x0bG9uZyBuX3BlcmlvZHMsIHJlbWFpbmRlcl91c2VjLCBleHBlY3RlZF91c2FnZV91c2VjO1xuK1x0czY0IHVzYWdlX3VzZWM7XG4gXHRjaGFyICpjcHVjZztcbiBcdGNoYXIgcXVvdGFfYnVmWzMyXTtcbiBcbkBAIC03MDgsNyArNzA4LDcgQEAgc3RhdGljIGludCB0ZXN0X2NwdWNnX21heChjb25zdCBjaGFyICpyb290KVxuIFx0aWYgKGNnX3J1bihjcHVjZywgaG9nX2NwdXNfdGltZWQsICh2b2lkICopXHUwMDI2cGFyYW0pKVxuIFx0XHRnb3RvIGNsZWFudXA7XG4gXG4tXHR1c2FnZV91c2VjID0gY2dfcmVhZF9rZXlfbG9uZyhjcHVjZywgXCJjcHUuc3RhdFwiLCBcInVzYWdlX3VzZWNcIik7XG4rXHR1c2FnZV91c2VjID0gY2dfcmVhZF9rZXlfczY0KGNwdWNnLCBcImNwdS5zdGF0XCIsIFwidXNhZ2VfdXNlY1wiKTtcbiBcdGlmICh1c2FnZV91c2VjIFx1MDAzYz0gMClcbiBcdFx0Z290byBjbGVhbnVwO1xuIFxuQEAgLTc0Niw3ICs3NDYsOCBAQCBzdGF0aWMgaW50IHRlc3RfY3B1Y2dfbWF4X25lc3RlZChjb25zdCBjaGFyICpyb290KVxuIFx0bG9uZyBkdXJhdGlvbl9zZWNvbmRzID0gMTtcbiBcbiBcdGxvbmcgZHVyYXRpb25fdXNlYztcbi1cdGxvbmcgdXNhZ2VfdXNlYywgbl9wZXJpb2RzLCByZW1haW5kZXJfdXNlYywgZXhwZWN0ZWRfdXNhZ2VfdXNlYztcbitcdGxvbmcgbl9wZXJpb2RzLCByZW1haW5kZXJfdXNlYywgZXhwZWN0ZWRfdXNhZ2VfdXNlYztcbitcdHM2NCB1c2FnZV91c2VjO1xuIFx0Y2hhciAqcGFyZW50LCAqY2hpbGQ7XG4gXHRjaGFyIHF1b3RhX2J1ZlszMl07XG4gXG5AQCAtNzgyLDcgKzc4Myw3IEBAIHN0YXRpYyBpbnQgdGVzdF9jcHVjZ19tYXhfbmVzdGVkKGNvbnN0IGNoYXIgKnJvb3QpXG4gXHRpZiAoY2dfcnVuKGNoaWxkLCBob2dfY3B1c190aW1lZCwgKHZvaWQgKilcdTAwMjZwYXJhbSkpXG4gXHRcdGdvdG8gY2xlYW51cDtcbiBcbi1cdHVzYWdlX3VzZWMgPSBjZ19yZWFkX2tleV9sb25nKGNoaWxkLCBcImNwdS5zdGF0XCIsIFwidXNhZ2VfdXNlY1wiKTtcbitcdHVzYWdlX3VzZWMgPSBjZ19yZWFkX2tleV9zNjQoY2hpbGQsIFwiY3B1LnN0YXRcIiwgXCJ1c2FnZV91c2VjXCIpO1xuIFx0aWYgKHVzYWdlX3VzZWMgXHUwMDNjPSAwKVxuIFx0XHRnb3RvIGNsZWFudXA7XG4gXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvY2dyb3VwL3Rlc3RfZnJlZXplci5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvY2dyb3VwL3Rlc3RfZnJlZXplci5jXG5pbmRleCBmMjhiYjAyZTk3ODNiLi5mNGYwODJjMTNkNGI3IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvY2dyb3VwL3Rlc3RfZnJlZXplci5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9jZ3JvdXAvdGVzdF9mcmVlemVyLmNcbkBAIC04MDcsMTAgKzgwNyw5IEBAIHN0YXRpYyBpbnQgdGVzdF9jZ2ZyZWV6ZXJfdmZvcmsoY29uc3QgY2hhciAqcm9vdClcbiAvKlxuICAqIEdldCB0aGUgY3VycmVudCBmcm96ZW5fdXNlYyBmb3IgdGhlIGNncm91cC5cbiAgKi9cbi1zdGF0aWMgbG9uZyBjZ19jaGVja19mcmVlemV0aW1lKGNvbnN0IGNoYXIgKmNncm91cClcbitzdGF0aWMgczY0IGNnX2NoZWNrX2ZyZWV6ZXRpbWUoY29uc3QgY2hhciAqY2dyb3VwKVxuIHtcbi1cdHJldHVybiBjZ19yZWFkX2tleV9sb25nKGNncm91cCwgXCJjZ3JvdXAuc3RhdC5sb2NhbFwiLFxuLVx0XHRcdFx0XCJmcm96ZW5fdXNlYyBcIik7XG4rXHRyZXR1cm4gY2dfcmVhZF9rZXlfczY0KGNncm91cCwgXCJjZ3JvdXAuc3RhdC5sb2NhbFwiLCBcImZyb3plbl91c2VjIFwiKTtcbiB9XG4gXG4gLypcbkBAIC04MjAsNyArODE5LDcgQEAgc3RhdGljIGludCB0ZXN0X2NnZnJlZXplcl90aW1lX2VtcHR5KGNvbnN0IGNoYXIgKnJvb3QpXG4ge1xuIFx0aW50IHJldCA9IEtTRlRfRkFJTDtcbiBcdGNoYXIgKmNncm91cCA9IE5VTEw7XG4tXHRsb25nIHByZXYsIGN1cnI7XG4rXHRzNjQgcHJldiwgY3VycjtcbiBcbiBcdGNncm91cCA9IGNnX25hbWUocm9vdCwgXCJjZ190aW1lX3Rlc3RfZW1wdHlcIik7XG4gXHRpZiAoIWNncm91cClcbkBAIC04MzksNyArODM4LDcgQEAgc3RhdGljIGludCB0ZXN0X2NnZnJlZXplcl90aW1lX2VtcHR5KGNvbnN0IGNoYXIgKnJvb3QpXG4gXHRcdGdvdG8gY2xlYW51cDtcbiBcdH1cbiBcdGlmIChjdXJyIFx1MDAzZSAwKSB7XG4tXHRcdGRlYnVnKFwiRXhwZWN0IHRpbWUgKCVsZCkgdG8gYmUgMFxcblwiLCBjdXJyKTtcbitcdFx0ZGVidWcoXCJFeHBlY3QgdGltZSAoJWxsZCkgdG8gYmUgMFxcblwiLCBjdXJyKTtcbiBcdFx0Z290byBjbGVhbnVwO1xuIFx0fVxuIFxuQEAgLTg1Myw4ICs4NTIsNyBAQCBzdGF0aWMgaW50IHRlc3RfY2dmcmVlemVyX3RpbWVfZW1wdHkoY29uc3QgY2hhciAqcm9vdClcbiBcdHVzbGVlcCgxMDAwKTtcbiBcdGN1cnIgPSBjZ19jaGVja19mcmVlemV0aW1lKGNncm91cCk7XG4gXHRpZiAoY3VyciBcdTAwM2MgMTAwMCkge1xuLVx0XHRkZWJ1ZyhcIkV4cGVjdCB0aW1lICglbGQpIHRvIGJlIGF0IGxlYXN0IDEwMDAgdXNcXG5cIixcbi1cdFx0ICAgICAgY3Vycik7XG4rXHRcdGRlYnVnKFwiRXhwZWN0IHRpbWUgKCVsbGQpIHRvIGJlIGF0IGxlYXN0IDEwMDAgdXNcXG5cIiwgY3Vycik7XG4gXHRcdGdvdG8gY2xlYW51cDtcbiBcdH1cbiBcbkBAIC04NjcsNyArODY1LDcgQEAgc3RhdGljIGludCB0ZXN0X2NnZnJlZXplcl90aW1lX2VtcHR5KGNvbnN0IGNoYXIgKnJvb3QpXG4gXHRwcmV2ID0gY3VycjtcbiBcdGN1cnIgPSBjZ19jaGVja19mcmVlemV0aW1lKGNncm91cCk7XG4gXHRpZiAoY3VyciBcdTAwM2M9IHByZXYpIHtcbi1cdFx0ZGVidWcoXCJFeHBlY3QgdGltZSAoJWxkKSB0byBiZSBtb3JlIHRoYW4gcHJldmlvdXMgY2hlY2sgKCVsZClcXG5cIixcbitcdFx0ZGVidWcoXCJFeHBlY3QgdGltZSAoJWxsZCkgdG8gYmUgbW9yZSB0aGFuIHByZXZpb3VzIGNoZWNrICglbGxkKVxcblwiLFxuIFx0XHQgICAgICBjdXJyLCBwcmV2KTtcbiBcdFx0Z290byBjbGVhbnVwO1xuIFx0fVxuQEAgLTg3OSw3ICs4NzcsNyBAQCBzdGF0aWMgaW50IHRlc3RfY2dmcmVlemVyX3RpbWVfZW1wdHkoY29uc3QgY2hhciAqcm9vdClcbiBcdHByZXYgPSBjdXJyO1xuIFx0Y3VyciA9IGNnX2NoZWNrX2ZyZWV6ZXRpbWUoY2dyb3VwKTtcbiBcdGlmIChjdXJyICE9IHByZXYpIHtcbi1cdFx0ZGVidWcoXCJFeHBlY3QgdGltZSAoJWxkKSB0byBiZSB1bmNoYW5nZWQgZnJvbSBwcmV2aW91cyBjaGVjayAoJWxkKVxcblwiLFxuK1x0XHRkZWJ1ZyhcIkV4cGVjdCB0aW1lICglbGxkKSB0byBiZSB1bmNoYW5nZWQgZnJvbSBwcmV2aW91cyBjaGVjayAoJWxsZClcXG5cIixcbiBcdFx0ICAgICAgY3VyciwgcHJldik7XG4gXHRcdGdvdG8gY2xlYW51cDtcbiBcdH1cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9jZ3JvdXAvdGVzdF9rbWVtLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9jZ3JvdXAvdGVzdF9rbWVtLmNcbmluZGV4IDQzN2YyZDM1ZjIwNWUuLjI0OTg5OGYzYjgxZTggMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9jZ3JvdXAvdGVzdF9rbWVtLmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2Nncm91cC90ZXN0X2ttZW0uY1xuQEAgLTU0LDcgKzU0LDggQEAgc3RhdGljIGludCB0ZXN0X2ttZW1fYmFzaWMoY29uc3QgY2hhciAqcm9vdClcbiB7XG4gXHRpbnQgcmV0ID0gS1NGVF9GQUlMO1xuIFx0Y2hhciAqY2cgPSBOVUxMO1xuLVx0bG9uZyBzbGFiMCwgc2xhYjEsIGN1cnJlbnQ7XG4rXHRzNjQgc2xhYjAsIHNsYWIxO1xuK1x0bG9uZyBjdXJyZW50O1xuIFxuIFx0Y2cgPSBjZ19uYW1lKHJvb3QsIFwia21lbV9iYXNpY190ZXN0XCIpO1xuIFx0aWYgKCFjZylcbkBAIC02Niw3ICs2Nyw3IEBAIHN0YXRpYyBpbnQgdGVzdF9rbWVtX2Jhc2ljKGNvbnN0IGNoYXIgKnJvb3QpXG4gXHRpZiAoY2dfcnVuKGNnLCBhbGxvY19kY2FjaGUsICh2b2lkICopMTAwMDAwKSlcbiBcdFx0Z290byBjbGVhbnVwO1xuIFxuLVx0c2xhYjAgPSBjZ19yZWFkX2tleV9sb25nKGNnLCBcIm1lbW9yeS5zdGF0XCIsIFwic2xhYiBcIik7XG4rXHRzbGFiMCA9IGNnX3JlYWRfa2V5X3M2NChjZywgXCJtZW1vcnkuc3RhdFwiLCBcInNsYWIgXCIpO1xuIFx0aWYgKHNsYWIwIFx1MDAzYyAoMSBcdTAwM2NcdTAwM2MgMjApKVxuIFx0XHRnb3RvIGNsZWFudXA7XG4gXG5AQCAtNzUsNyArNzYsNyBAQCBzdGF0aWMgaW50IHRlc3Rfa21lbV9iYXNpYyhjb25zdCBjaGFyICpyb290KVxuIFx0Lyogd2FpdCBmb3IgUkNVIGZyZWVpbmcgKi9cbiBcdHNsZWVwKDEpO1xuIFxuLVx0c2xhYjEgPSBjZ19yZWFkX2tleV9sb25nKGNnLCBcIm1lbW9yeS5zdGF0XCIsIFwic2xhYiBcIik7XG4rXHRzbGFiMSA9IGNnX3JlYWRfa2V5X3M2NChjZywgXCJtZW1vcnkuc3RhdFwiLCBcInNsYWIgXCIpO1xuIFx0aWYgKHNsYWIxIFx1MDAzYyAwKVxuIFx0XHRnb3RvIGNsZWFudXA7XG4gXG5AQCAtMTY3LDcgKzE2OCw4IEBAIHN0YXRpYyBpbnQgY2dfcnVuX2luX3N1YmNncm91cHMoY29uc3QgY2hhciAqcGFyZW50LFxuICAqL1xuIHN0YXRpYyBpbnQgdGVzdF9rbWVtX21lbWNnX2RlbGV0aW9uKGNvbnN0IGNoYXIgKnJvb3QpXG4ge1xuLVx0bG9uZyBjdXJyZW50LCBhbm9uLCBmaWxlLCBrZXJuZWwsIHNvY2ssIHN1bTtcbitcdGxvbmcgY3VycmVudDtcbitcdHM2NCBhbm9uLCBmaWxlLCBrZXJuZWwsIHNvY2ssIHN1bTtcbiBcdGludCByZXQgPSBLU0ZUX0ZBSUw7XG4gXHRjaGFyICpwYXJlbnQ7XG4gXG5AQCAtMTg1LDIzICsxODcsMjMgQEAgc3RhdGljIGludCB0ZXN0X2ttZW1fbWVtY2dfZGVsZXRpb24oY29uc3QgY2hhciAqcm9vdClcbiBcdFx0Z290byBjbGVhbnVwO1xuIFxuIFx0Y3VycmVudCA9IGNnX3JlYWRfbG9uZyhwYXJlbnQsIFwibWVtb3J5LmN1cnJlbnRcIik7XG4tXHRhbm9uID0gY2dfcmVhZF9rZXlfbG9uZyhwYXJlbnQsIFwibWVtb3J5LnN0YXRcIiwgXCJhbm9uIFwiKTtcbi1cdGZpbGUgPSBjZ19yZWFkX2tleV9sb25nKHBhcmVudCwgXCJtZW1vcnkuc3RhdFwiLCBcImZpbGUgXCIpO1xuLVx0a2VybmVsID0gY2dfcmVhZF9rZXlfbG9uZyhwYXJlbnQsIFwibWVtb3J5LnN0YXRcIiwgXCJrZXJuZWwgXCIpO1xuLVx0c29jayA9IGNnX3JlYWRfa2V5X2xvbmcocGFyZW50LCBcIm1lbW9yeS5zdGF0XCIsIFwic29jayBcIik7XG4rXHRhbm9uID0gY2dfcmVhZF9rZXlfczY0KHBhcmVudCwgXCJtZW1vcnkuc3RhdFwiLCBcImFub24gXCIpO1xuK1x0ZmlsZSA9IGNnX3JlYWRfa2V5X3M2NChwYXJlbnQsIFwibWVtb3J5LnN0YXRcIiwgXCJmaWxlIFwiKTtcbitcdGtlcm5lbCA9IGNnX3JlYWRfa2V5X3M2NChwYXJlbnQsIFwibWVtb3J5LnN0YXRcIiwgXCJrZXJuZWwgXCIpO1xuK1x0c29jayA9IGNnX3JlYWRfa2V5X3M2NChwYXJlbnQsIFwibWVtb3J5LnN0YXRcIiwgXCJzb2NrIFwiKTtcbiBcdGlmIChjdXJyZW50IFx1MDAzYyAwIHx8IGFub24gXHUwMDNjIDAgfHwgZmlsZSBcdTAwM2MgMCB8fCBrZXJuZWwgXHUwMDNjIDAgfHwgc29jayBcdTAwM2MgMClcbiBcdFx0Z290byBjbGVhbnVwO1xuIFxuIFx0c3VtID0gYW5vbiArIGZpbGUgKyBrZXJuZWwgKyBzb2NrO1xuLVx0aWYgKGxhYnMoc3VtIC0gY3VycmVudCkgXHUwMDNjIE1BWF9WTVNUQVRfRVJST1IpIHtcbitcdGlmIChsbGFicyhzdW0gLSBjdXJyZW50KSBcdTAwM2MgTUFYX1ZNU1RBVF9FUlJPUikge1xuIFx0XHRyZXQgPSBLU0ZUX1BBU1M7XG4gXHR9IGVsc2Uge1xuIFx0XHRwcmludGYoXCJtZW1vcnkuY3VycmVudCA9ICVsZFxcblwiLCBjdXJyZW50KTtcbi1cdFx0cHJpbnRmKFwiYW5vbiArIGZpbGUgKyBrZXJuZWwgKyBzb2NrID0gJWxkXFxuXCIsIHN1bSk7XG4tXHRcdHByaW50ZihcImFub24gPSAlbGRcXG5cIiwgYW5vbik7XG4tXHRcdHByaW50ZihcImZpbGUgPSAlbGRcXG5cIiwgZmlsZSk7XG4tXHRcdHByaW50ZihcImtlcm5lbCA9ICVsZFxcblwiLCBrZXJuZWwpO1xuLVx0XHRwcmludGYoXCJzb2NrID0gJWxkXFxuXCIsIHNvY2spO1xuK1x0XHRwcmludGYoXCJhbm9uICsgZmlsZSArIGtlcm5lbCArIHNvY2sgPSAlbGxkXFxuXCIsIHN1bSk7XG4rXHRcdHByaW50ZihcImFub24gPSAlbGxkXFxuXCIsIGFub24pO1xuK1x0XHRwcmludGYoXCJmaWxlID0gJWxsZFxcblwiLCBmaWxlKTtcbitcdFx0cHJpbnRmKFwia2VybmVsID0gJWxsZFxcblwiLCBrZXJuZWwpO1xuK1x0XHRwcmludGYoXCJzb2NrID0gJWxsZFxcblwiLCBzb2NrKTtcbiBcdH1cbiBcbiBjbGVhbnVwOlxuQEAgLTI0OCw3ICsyNTAsNyBAQCBzdGF0aWMgaW50IHNwYXduXzEwMDBfdGhyZWFkcyhjb25zdCBjaGFyICpjZ3JvdXAsIHZvaWQgKmFyZylcbiBcdGludCBucl90aHJlYWRzID0gMTAwMDtcbiBcdHB0aHJlYWRfdCAqdGluZm87XG4gXHR1bnNpZ25lZCBsb25nIGk7XG4tXHRsb25nIHN0YWNrO1xuK1x0czY0IHN0YWNrO1xuIFx0aW50IHJldCA9IC0xO1xuIFxuIFx0dGluZm8gPSBjYWxsb2MobnJfdGhyZWFkcywgc2l6ZW9mKHB0aHJlYWRfdCkpO1xuQEAgLTI2Myw3ICsyNjUsNyBAQCBzdGF0aWMgaW50IHNwYXduXzEwMDBfdGhyZWFkcyhjb25zdCBjaGFyICpjZ3JvdXAsIHZvaWQgKmFyZylcbiBcdFx0fVxuIFx0fVxuIFxuLVx0c3RhY2sgPSBjZ19yZWFkX2tleV9sb25nKGNncm91cCwgXCJtZW1vcnkuc3RhdFwiLCBcImtlcm5lbF9zdGFjayBcIik7XG4rXHRzdGFjayA9IGNnX3JlYWRfa2V5X3M2NChjZ3JvdXAsIFwibWVtb3J5LnN0YXRcIiwgXCJrZXJuZWxfc3RhY2sgXCIpO1xuIFx0aWYgKHN0YWNrIFx1MDAzZT0gNDA5NiAqIDEwMDApXG4gXHRcdHJldCA9IDA7XG4gXG5AQCAtMzA3LDcgKzMwOSw3IEBAIHN0YXRpYyBpbnQgdGVzdF9rbWVtX2RlYWRfY2dyb3Vwcyhjb25zdCBjaGFyICpyb290KVxuIHtcbiBcdGludCByZXQgPSBLU0ZUX0ZBSUw7XG4gXHRjaGFyICpwYXJlbnQ7XG4tXHRsb25nIGRlYWQgPSAtMTtcbitcdHM2NCBkZWFkID0gLTE7XG4gXG4gXHRwYXJlbnQgPSBjZ19uYW1lKHJvb3QsIFwia21lbV9kZWFkX2Nncm91cHNfdGVzdFwiKTtcbiBcdGlmICghcGFyZW50KVxuQEAgLTMyOCw5ICszMzAsMTAgQEAgc3RhdGljIGludCB0ZXN0X2ttZW1fZGVhZF9jZ3JvdXBzKGNvbnN0IGNoYXIgKnJvb3QpXG4gXHQgKiBmcm9tIGEgc3BlY2lmaWMga2VybmVsIGNvbnN0YW50LCBhbmQgY2FuIGJlIGFkanVzdGVkIGlmIHJlY2xhaW1cbiBcdCAqIGJlaGF2aW9yIGNoYW5nZXMgaW4gdGhlIGZ1dHVyZS5cbiBcdCAqL1xuLVx0ZGVhZCA9IGNnX3JlYWRfa2V5X2xvbmdfcG9sbChwYXJlbnQsIFwiY2dyb3VwLnN0YXRcIixcbi1cdFx0XHRcdFx0XCJucl9keWluZ19kZXNjZW5kYW50cyBcIiwgMCwgS01FTV9ERUFEX1dBSVRfUkVUUklFUyxcbi1cdFx0XHRcdFx0REVGQVVMVF9XQUlUX0lOVEVSVkFMX1VTKTtcbitcdGRlYWQgPSBjZ19yZWFkX2tleV9zNjRfcG9sbChwYXJlbnQsIFwiY2dyb3VwLnN0YXRcIixcbitcdFx0XHRcdCAgICBcIm5yX2R5aW5nX2Rlc2NlbmRhbnRzIFwiLCAwLFxuK1x0XHRcdFx0ICAgIEtNRU1fREVBRF9XQUlUX1JFVFJJRVMsXG4rXHRcdFx0XHQgICAgREVGQVVMVF9XQUlUX0lOVEVSVkFMX1VTKTtcbiBcdGlmIChkZWFkKVxuIFx0XHRnb3RvIGNsZWFudXA7XG4gXG5AQCAtMzUzLDcgKzM1Niw4IEBAIHN0YXRpYyBpbnQgdGVzdF9wZXJjcHVfYmFzaWMoY29uc3QgY2hhciAqcm9vdClcbiB7XG4gXHRpbnQgcmV0ID0gS1NGVF9GQUlMO1xuIFx0Y2hhciAqcGFyZW50LCAqY2hpbGQ7XG4tXHRsb25nIGN1cnJlbnQsIHBlcmNwdSwgc2xhYjtcbitcdGxvbmcgY3VycmVudDtcbitcdHM2NCBwZXJjcHUsIHNsYWI7XG4gXHRpbnQgaTtcbiBcbiBcdHBhcmVudCA9IGNnX25hbWUocm9vdCwgXCJwZXJjcHVfYmFzaWNfdGVzdFwiKTtcbkBAIC0zODIsMTUgKzM4NiwxNSBAQCBzdGF0aWMgaW50IHRlc3RfcGVyY3B1X2Jhc2ljKGNvbnN0IGNoYXIgKnJvb3QpXG4gXHR9XG4gXG4gXHRjdXJyZW50ID0gY2dfcmVhZF9sb25nKHBhcmVudCwgXCJtZW1vcnkuY3VycmVudFwiKTtcbi1cdHBlcmNwdSA9IGNnX3JlYWRfa2V5X2xvbmcocGFyZW50LCBcIm1lbW9yeS5zdGF0XCIsIFwicGVyY3B1IFwiKTtcbi1cdHNsYWIgPSBjZ19yZWFkX2tleV9sb25nKHBhcmVudCwgXCJtZW1vcnkuc3RhdFwiLCBcInNsYWIgXCIpO1xuK1x0cGVyY3B1ID0gY2dfcmVhZF9rZXlfczY0KHBhcmVudCwgXCJtZW1vcnkuc3RhdFwiLCBcInBlcmNwdSBcIik7XG4rXHRzbGFiID0gY2dfcmVhZF9rZXlfczY0KHBhcmVudCwgXCJtZW1vcnkuc3RhdFwiLCBcInNsYWIgXCIpO1xuIFxuIFx0aWYgKGN1cnJlbnQgXHUwMDNlIDAgXHUwMDI2XHUwMDI2IHBlcmNwdSBcdTAwM2UgMCBcdTAwMjZcdTAwMjYgc2xhYiBcdTAwM2U9IDAgXHUwMDI2XHUwMDI2XG4tXHRcdFx0bGFicyhjdXJyZW50IC0gKHBlcmNwdSArIHNsYWIpKSBcdTAwM2MgTUFYX1ZNU1RBVF9FUlJPUilcbitcdCAgICBsbGFicyhjdXJyZW50IC0gKHBlcmNwdSArIHNsYWIpKSBcdTAwM2MgTUFYX1ZNU1RBVF9FUlJPUilcbiBcdFx0cmV0ID0gS1NGVF9QQVNTO1xuIFx0ZWxzZVxuLVx0XHRwcmludGYoXCJtZW1vcnkuY3VycmVudCAlbGRcXG5wZXJjcHUgJWxkXFxuc2xhYiAlbGRcXG5kZWx0YSAlbGRcXG5cIixcbi1cdFx0XHRjdXJyZW50LCBwZXJjcHUsIHNsYWIsIGN1cnJlbnQgLSAocGVyY3B1ICsgc2xhYikpO1xuK1x0XHRwcmludGYoXCJtZW1vcnkuY3VycmVudCAlbGRcXG5wZXJjcHUgJWxsZFxcbnNsYWIgJWxsZFxcbmRlbHRhICVsbGRcXG5cIixcbitcdFx0ICAgICAgIGN1cnJlbnQsIHBlcmNwdSwgc2xhYiwgY3VycmVudCAtIChwZXJjcHUgKyBzbGFiKSk7XG4gXG4gY2xlYW51cF9jaGlsZHJlbjpcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIDEwMDA7IGkrKykge1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2Nncm91cC90ZXN0X21lbWNvbnRyb2wuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2Nncm91cC90ZXN0X21lbWNvbnRyb2wuY1xuaW5kZXggM2E4NGQwNjhmYmYzNi4uNTM5NjUwYzFkNTYyNiAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2Nncm91cC90ZXN0X21lbWNvbnRyb2wuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvY2dyb3VwL3Rlc3RfbWVtY29udHJvbC5jXG5AQCAtMTkyLDcgKzE5Miw4IEBAIHN0YXRpYyBpbnQgYWxsb2NfYW5vbl81ME1fY2hlY2soY29uc3QgY2hhciAqY2dyb3VwLCB2b2lkICphcmcpXG4ge1xuIFx0c2l6ZV90IHNpemUgPSBNQig1MCk7XG4gXHRjaGFyICpidWY7XG4tXHRsb25nIGFub24sIGN1cnJlbnQ7XG4rXHRzNjQgYW5vbjtcbitcdGxvbmcgY3VycmVudDtcbiBcdGludCByZXQgPSAtMTtcbiBcbiBcdGJ1ZiA9IGFsbG9jX2FuZF9wb3B1bGF0ZV9hbm9uKHNpemUpO1xuQEAgLTIwNiw3ICsyMDcsNyBAQCBzdGF0aWMgaW50IGFsbG9jX2Fub25fNTBNX2NoZWNrKGNvbnN0IGNoYXIgKmNncm91cCwgdm9pZCAqYXJnKVxuIFx0aWYgKCF2YWx1ZXNfY2xvc2Uoc2l6ZSwgY3VycmVudCwgMykpXG4gXHRcdGdvdG8gY2xlYW51cDtcbiBcbi1cdGFub24gPSBjZ19yZWFkX2tleV9sb25nKGNncm91cCwgXCJtZW1vcnkuc3RhdFwiLCBcImFub24gXCIpO1xuK1x0YW5vbiA9IGNnX3JlYWRfa2V5X3M2NChjZ3JvdXAsIFwibWVtb3J5LnN0YXRcIiwgXCJhbm9uIFwiKTtcbiBcdGlmIChhbm9uIFx1MDAzYyAwKVxuIFx0XHRnb3RvIGNsZWFudXA7XG4gXG5AQCAtMjIzLDcgKzIyNCw4IEBAIHN0YXRpYyBpbnQgYWxsb2NfcGFnZWNhY2hlXzUwTV9jaGVjayhjb25zdCBjaGFyICpjZ3JvdXAsIHZvaWQgKmFyZylcbiB7XG4gXHRzaXplX3Qgc2l6ZSA9IE1CKDUwKTtcbiBcdGludCByZXQgPSAtMTtcbi1cdGxvbmcgY3VycmVudCwgZmlsZTtcbitcdGxvbmcgY3VycmVudDtcbitcdHM2NCBmaWxlO1xuIFx0aW50IGZkO1xuIFxuIFx0ZmQgPSBnZXRfdGVtcF9mZCgpO1xuQEAgLTIzNyw3ICsyMzksNyBAQCBzdGF0aWMgaW50IGFsbG9jX3BhZ2VjYWNoZV81ME1fY2hlY2soY29uc3QgY2hhciAqY2dyb3VwLCB2b2lkICphcmcpXG4gXHRpZiAoY3VycmVudCBcdTAwM2Mgc2l6ZSlcbiBcdFx0Z290byBjbGVhbnVwO1xuIFxuLVx0ZmlsZSA9IGNnX3JlYWRfa2V5X2xvbmcoY2dyb3VwLCBcIm1lbW9yeS5zdGF0XCIsIFwiZmlsZSBcIik7XG4rXHRmaWxlID0gY2dfcmVhZF9rZXlfczY0KGNncm91cCwgXCJtZW1vcnkuc3RhdFwiLCBcImZpbGUgXCIpO1xuIFx0aWYgKGZpbGUgXHUwMDNjIDApXG4gXHRcdGdvdG8gY2xlYW51cDtcbiBcbkBAIC02MjMsMTAgKzYyNSwxMCBAQCBzdGF0aWMgaW50IHRlc3RfbWVtY2dfcHJvdGVjdGlvbihjb25zdCBjaGFyICpyb290LCBib29sIG1pbilcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIEFSUkFZX1NJWkUoY2hpbGRyZW4pOyBpKyspIHtcbiBcdFx0aW50IGlnbm9yZV9sb3dfZXZlbnRzX2luZGV4ID0gaGFzX3JlY3Vyc2l2ZXByb3QgPyAyIDogLTE7XG4gXHRcdGludCBub19sb3dfZXZlbnRzX2luZGV4ID0gMTtcbi1cdFx0bG9uZyBsb3csIG9vbTtcbitcdFx0czY0IGxvdywgb29tO1xuIFxuLVx0XHRvb20gPSBjZ19yZWFkX2tleV9sb25nKGNoaWxkcmVuW2ldLCBcIm1lbW9yeS5ldmVudHNcIiwgXCJvb20gXCIpO1xuLVx0XHRsb3cgPSBjZ19yZWFkX2tleV9sb25nKGNoaWxkcmVuW2ldLCBcIm1lbW9yeS5ldmVudHNcIiwgXCJsb3cgXCIpO1xuK1x0XHRvb20gPSBjZ19yZWFkX2tleV9zNjQoY2hpbGRyZW5baV0sIFwibWVtb3J5LmV2ZW50c1wiLCBcIm9vbSBcIik7XG4rXHRcdGxvdyA9IGNnX3JlYWRfa2V5X3M2NChjaGlsZHJlbltpXSwgXCJtZW1vcnkuZXZlbnRzXCIsIFwibG93IFwiKTtcbiBcbiBcdFx0aWYgKG9vbSlcbiBcdFx0XHRnb3RvIGNsZWFudXA7XG5AQCAtNzExLDcgKzcxMyw3IEBAIHN0YXRpYyBpbnQgdGVzdF9tZW1jZ19oaWdoKGNvbnN0IGNoYXIgKnJvb3QpXG4ge1xuIFx0aW50IHJldCA9IEtTRlRfRkFJTDtcbiBcdGNoYXIgKm1lbWNnO1xuLVx0bG9uZyBoaWdoO1xuK1x0czY0IGhpZ2g7XG4gXG4gXHRtZW1jZyA9IGNnX25hbWUocm9vdCwgXCJtZW1jZ190ZXN0XCIpO1xuIFx0aWYgKCFtZW1jZylcbkBAIC03MzgsNyArNzQwLDcgQEAgc3RhdGljIGludCB0ZXN0X21lbWNnX2hpZ2goY29uc3QgY2hhciAqcm9vdClcbiBcdGlmIChjZ19ydW4obWVtY2csIGFsbG9jX3BhZ2VjYWNoZV9tYXhfMzBNLCBOVUxMKSlcbiBcdFx0Z290byBjbGVhbnVwO1xuIFxuLVx0aGlnaCA9IGNnX3JlYWRfa2V5X2xvbmcobWVtY2csIFwibWVtb3J5LmV2ZW50c1wiLCBcImhpZ2ggXCIpO1xuK1x0aGlnaCA9IGNnX3JlYWRfa2V5X3M2NChtZW1jZywgXCJtZW1vcnkuZXZlbnRzXCIsIFwiaGlnaCBcIik7XG4gXHRpZiAoaGlnaCBcdTAwM2M9IDApXG4gXHRcdGdvdG8gY2xlYW51cDtcbiBcbkBAIC03NzQsOCArNzc2LDggQEAgc3RhdGljIGludCB0ZXN0X21lbWNnX2hpZ2hfc3luYyhjb25zdCBjaGFyICpyb290KVxuIHtcbiBcdGludCByZXQgPSBLU0ZUX0ZBSUwsIHBpZCwgZmQgPSAtMTtcbiBcdGNoYXIgKm1lbWNnO1xuLVx0bG9uZyBwcmVfaGlnaCwgcHJlX21heDtcbi1cdGxvbmcgcG9zdF9oaWdoLCBwb3N0X21heDtcbitcdHM2NCBwcmVfaGlnaCwgcHJlX21heDtcbitcdHM2NCBwb3N0X2hpZ2gsIHBvc3RfbWF4O1xuIFxuIFx0bWVtY2cgPSBjZ19uYW1lKHJvb3QsIFwibWVtY2dfdGVzdFwiKTtcbiBcdGlmICghbWVtY2cpXG5AQCAtNzg0LDggKzc4Niw4IEBAIHN0YXRpYyBpbnQgdGVzdF9tZW1jZ19oaWdoX3N5bmMoY29uc3QgY2hhciAqcm9vdClcbiBcdGlmIChjZ19jcmVhdGUobWVtY2cpKVxuIFx0XHRnb3RvIGNsZWFudXA7XG4gXG4tXHRwcmVfaGlnaCA9IGNnX3JlYWRfa2V5X2xvbmcobWVtY2csIFwibWVtb3J5LmV2ZW50c1wiLCBcImhpZ2ggXCIpO1xuLVx0cHJlX21heCA9IGNnX3JlYWRfa2V5X2xvbmcobWVtY2csIFwibWVtb3J5LmV2ZW50c1wiLCBcIm1heCBcIik7XG4rXHRwcmVfaGlnaCA9IGNnX3JlYWRfa2V5X3M2NChtZW1jZywgXCJtZW1vcnkuZXZlbnRzXCIsIFwiaGlnaCBcIik7XG4rXHRwcmVfbWF4ID0gY2dfcmVhZF9rZXlfczY0KG1lbWNnLCBcIm1lbW9yeS5ldmVudHNcIiwgXCJtYXggXCIpO1xuIFx0aWYgKHByZV9oaWdoIFx1MDAzYyAwIHx8IHByZV9tYXggXHUwMDNjIDApXG4gXHRcdGdvdG8gY2xlYW51cDtcbiBcbkBAIC04MDgsOCArODEwLDggQEAgc3RhdGljIGludCB0ZXN0X21lbWNnX2hpZ2hfc3luYyhjb25zdCBjaGFyICpyb290KVxuIFxuIFx0Y2dfd2FpdF9mb3IoZmQpO1xuIFxuLVx0cG9zdF9oaWdoID0gY2dfcmVhZF9rZXlfbG9uZyhtZW1jZywgXCJtZW1vcnkuZXZlbnRzXCIsIFwiaGlnaCBcIik7XG4tXHRwb3N0X21heCA9IGNnX3JlYWRfa2V5X2xvbmcobWVtY2csIFwibWVtb3J5LmV2ZW50c1wiLCBcIm1heCBcIik7XG4rXHRwb3N0X2hpZ2ggPSBjZ19yZWFkX2tleV9zNjQobWVtY2csIFwibWVtb3J5LmV2ZW50c1wiLCBcImhpZ2ggXCIpO1xuK1x0cG9zdF9tYXggPSBjZ19yZWFkX2tleV9zNjQobWVtY2csIFwibWVtb3J5LmV2ZW50c1wiLCBcIm1heCBcIik7XG4gXHRpZiAocG9zdF9oaWdoIFx1MDAzYyAwIHx8IHBvc3RfbWF4IFx1MDAzYyAwKVxuIFx0XHRnb3RvIGNsZWFudXA7XG4gXG5AQCAtODM2LDcgKzgzOCw4IEBAIHN0YXRpYyBpbnQgdGVzdF9tZW1jZ19tYXgoY29uc3QgY2hhciAqcm9vdClcbiB7XG4gXHRpbnQgcmV0ID0gS1NGVF9GQUlMO1xuIFx0Y2hhciAqbWVtY2c7XG4tXHRsb25nIGN1cnJlbnQsIG1heDtcbitcdGxvbmcgY3VycmVudDtcbitcdHM2NCBtYXg7XG4gXG4gXHRtZW1jZyA9IGNnX25hbWUocm9vdCwgXCJtZW1jZ190ZXN0XCIpO1xuIFx0aWYgKCFtZW1jZylcbkBAIC04NjUsNyArODY4LDcgQEAgc3RhdGljIGludCB0ZXN0X21lbWNnX21heChjb25zdCBjaGFyICpyb290KVxuIFx0aWYgKGN1cnJlbnQgXHUwMDNlIE1CKDMwKSB8fCAhY3VycmVudClcbiBcdFx0Z290byBjbGVhbnVwO1xuIFxuLVx0bWF4ID0gY2dfcmVhZF9rZXlfbG9uZyhtZW1jZywgXCJtZW1vcnkuZXZlbnRzXCIsIFwibWF4IFwiKTtcbitcdG1heCA9IGNnX3JlYWRfa2V5X3M2NChtZW1jZywgXCJtZW1vcnkuZXZlbnRzXCIsIFwibWF4IFwiKTtcbiBcdGlmIChtYXggXHUwMDNjPSAwKVxuIFx0XHRnb3RvIGNsZWFudXA7XG4gXG5AQCAtMTAyOSw3ICsxMDMyLDggQEAgc3RhdGljIGludCB0ZXN0X21lbWNnX3N3YXBfbWF4X3BlYWsoY29uc3QgY2hhciAqcm9vdClcbiB7XG4gXHRpbnQgcmV0ID0gS1NGVF9GQUlMO1xuIFx0Y2hhciAqbWVtY2c7XG4tXHRsb25nIG1heCwgcGVhaztcbitcdHM2NCBtYXg7XG4rXHRsb25nIHBlYWs7XG4gXHRzdHJ1Y3Qgc3RhdCBzcztcbiBcdGludCBzd2FwX3BlYWtfZmQgPSAtMSwgbWVtX3BlYWtfZmQgPSAtMTtcbiBcbkBAIC0xMTIyLDEwICsxMTI2LDEwIEBAIHN0YXRpYyBpbnQgdGVzdF9tZW1jZ19zd2FwX21heF9wZWFrKGNvbnN0IGNoYXIgKnJvb3QpXG4gXHRpZiAoIWNnX3J1bihtZW1jZywgYWxsb2NfYW5vbiwgKHZvaWQgKilNQigxMDApKSlcbiBcdFx0Z290byBjbGVhbnVwO1xuIFxuLVx0aWYgKGNnX3JlYWRfa2V5X2xvbmcobWVtY2csIFwibWVtb3J5LmV2ZW50c1wiLCBcIm9vbSBcIikgIT0gMSlcbitcdGlmIChjZ19yZWFkX2tleV9zNjQobWVtY2csIFwibWVtb3J5LmV2ZW50c1wiLCBcIm9vbSBcIikgIT0gMSlcbiBcdFx0Z290byBjbGVhbnVwO1xuIFxuLVx0aWYgKGNnX3JlYWRfa2V5X2xvbmcobWVtY2csIFwibWVtb3J5LmV2ZW50c1wiLCBcIm9vbV9raWxsIFwiKSAhPSAxKVxuK1x0aWYgKGNnX3JlYWRfa2V5X3M2NChtZW1jZywgXCJtZW1vcnkuZXZlbnRzXCIsIFwib29tX2tpbGwgXCIpICE9IDEpXG4gXHRcdGdvdG8gY2xlYW51cDtcbiBcbiBcdHBlYWsgPSBjZ19yZWFkX2xvbmcobWVtY2csIFwibWVtb3J5LnBlYWtcIik7XG5AQCAtMTE4Niw3ICsxMTkwLDcgQEAgc3RhdGljIGludCB0ZXN0X21lbWNnX3N3YXBfbWF4X3BlYWsoY29uc3QgY2hhciAqcm9vdClcbiBcdGlmIChjZ19ydW4obWVtY2csIGFsbG9jX2Fub25fNTBNX2NoZWNrX3N3YXAsICh2b2lkICopTUIoMzApKSlcbiBcdFx0Z290byBjbGVhbnVwO1xuIFxuLVx0bWF4ID0gY2dfcmVhZF9rZXlfbG9uZyhtZW1jZywgXCJtZW1vcnkuZXZlbnRzXCIsIFwibWF4IFwiKTtcbitcdG1heCA9IGNnX3JlYWRfa2V5X3M2NChtZW1jZywgXCJtZW1vcnkuZXZlbnRzXCIsIFwibWF4IFwiKTtcbiBcdGlmIChtYXggXHUwMDNjPSAwKVxuIFx0XHRnb3RvIGNsZWFudXA7XG4gXG5AQCAtMTI0OCwxMCArMTI1MiwxMCBAQCBzdGF0aWMgaW50IHRlc3RfbWVtY2dfb29tX2V2ZW50cyhjb25zdCBjaGFyICpyb290KVxuIFx0aWYgKGNnX3JlYWRfc3RyY21wKG1lbWNnLCBcImNncm91cC5wcm9jc1wiLCBcIlwiKSlcbiBcdFx0Z290byBjbGVhbnVwO1xuIFxuLVx0aWYgKGNnX3JlYWRfa2V5X2xvbmcobWVtY2csIFwibWVtb3J5LmV2ZW50c1wiLCBcIm9vbSBcIikgIT0gMSlcbitcdGlmIChjZ19yZWFkX2tleV9zNjQobWVtY2csIFwibWVtb3J5LmV2ZW50c1wiLCBcIm9vbSBcIikgIT0gMSlcbiBcdFx0Z290byBjbGVhbnVwO1xuIFxuLVx0aWYgKGNnX3JlYWRfa2V5X2xvbmcobWVtY2csIFwibWVtb3J5LmV2ZW50c1wiLCBcIm9vbV9raWxsIFwiKSAhPSAxKVxuK1x0aWYgKGNnX3JlYWRfa2V5X3M2NChtZW1jZywgXCJtZW1vcnkuZXZlbnRzXCIsIFwib29tX2tpbGwgXCIpICE9IDEpXG4gXHRcdGdvdG8gY2xlYW51cDtcbiBcbiBcdHJldCA9IEtTRlRfUEFTUztcbkBAIC0xMzU0LDEzICsxMzU4LDE0IEBAIHN0YXRpYyBpbnQgdGNwX2NsaWVudChjb25zdCBjaGFyICpjZ3JvdXAsIHVuc2lnbmVkIHNob3J0IHBvcnQpXG4gXHRyZXQgPSBLU0ZUX0ZBSUw7XG4gXHR3aGlsZSAocmV0cmllcy0tKSB7XG4gXHRcdHVpbnQ4X3QgYnVmWzB4MTAwMDAwXTtcbi1cdFx0bG9uZyBjdXJyZW50LCBzb2NrO1xuK1x0XHRsb25nIGN1cnJlbnQ7XG4rXHRcdHM2NCBzb2NrO1xuIFxuIFx0XHRpZiAocmVhZChzaywgYnVmLCBzaXplb2YoYnVmKSkgXHUwMDNjPSAwKVxuIFx0XHRcdGdvdG8gY2xvc2Vfc2s7XG4gXG4gXHRcdGN1cnJlbnQgPSBjZ19yZWFkX2xvbmcoY2dyb3VwLCBcIm1lbW9yeS5jdXJyZW50XCIpO1xuLVx0XHRzb2NrID0gY2dfcmVhZF9rZXlfbG9uZyhjZ3JvdXAsIFwibWVtb3J5LnN0YXRcIiwgXCJzb2NrIFwiKTtcbitcdFx0c29jayA9IGNnX3JlYWRfa2V5X3M2NChjZ3JvdXAsIFwibWVtb3J5LnN0YXRcIiwgXCJzb2NrIFwiKTtcbiBcbiBcdFx0aWYgKGN1cnJlbnQgXHUwMDNjIDAgfHwgc29jayBcdTAwM2MgMClcbiBcdFx0XHRnb3RvIGNsb3NlX3NrO1xuQEAgLTEzOTIsNyArMTM5Nyw3IEBAIHN0YXRpYyBpbnQgdGVzdF9tZW1jZ19zb2NrKGNvbnN0IGNoYXIgKnJvb3QpXG4gXHRpbnQgYmluZF9yZXRyaWVzID0gNSwgcmV0ID0gS1NGVF9GQUlMLCBwaWQsIGVycjtcbiBcdHVuc2lnbmVkIHNob3J0IHBvcnQ7XG4gXHRjaGFyICptZW1jZztcbi1cdGxvbmcgc29ja19wb3N0ID0gLTE7XG4rXHRzNjQgc29ja19wb3N0ID0gLTE7XG4gXG4gXHRtZW1jZyA9IGNnX25hbWUocm9vdCwgXCJtZW1jZ190ZXN0XCIpO1xuIFx0aWYgKCFtZW1jZylcbkBAIC0xNDU5LDcgKzE0NjQsNyBAQCBzdGF0aWMgaW50IHRlc3RfbWVtY2dfc29jayhjb25zdCBjaGFyICpyb290KVxuIFx0ICogc2NoZWR1bGluZyBzbGFjaykgYW5kIHJlcXVpcmUgdGhhdCB0aGUgXCJzb2NrIFwiIGNvdW50ZXJcbiBcdCAqIGV2ZW50dWFsbHkgZHJvcHMgdG8gemVyby5cbiBcdCAqL1xuLVx0c29ja19wb3N0ID0gY2dfcmVhZF9rZXlfbG9uZ19wb2xsKG1lbWNnLCBcIm1lbW9yeS5zdGF0XCIsIFwic29jayBcIiwgMCxcbitcdHNvY2tfcG9zdCA9IGNnX3JlYWRfa2V5X3M2NF9wb2xsKG1lbWNnLCBcIm1lbW9yeS5zdGF0XCIsIFwic29jayBcIiwgMCxcbiBcdFx0XHRcdFx0IE1FTUNHX1NPQ0tTVEFUX1dBSVRfUkVUUklFUyxcbiBcdFx0XHRcdFx0IERFRkFVTFRfV0FJVF9JTlRFUlZBTF9VUyk7XG4gXHRpZiAoc29ja19wb3N0KVxuQEAgLTE0ODQsNyArMTQ4OSw3IEBAIHN0YXRpYyBpbnQgdGVzdF9tZW1jZ19vb21fZ3JvdXBfbGVhZl9ldmVudHMoY29uc3QgY2hhciAqcm9vdClcbiB7XG4gXHRpbnQgcmV0ID0gS1NGVF9GQUlMO1xuIFx0Y2hhciAqcGFyZW50LCAqY2hpbGQ7XG4tXHRsb25nIHBhcmVudF9vb21fZXZlbnRzO1xuK1x0czY0IHBhcmVudF9vb21fZXZlbnRzO1xuIFxuIFx0cGFyZW50ID0gY2dfbmFtZShyb290LCBcIm1lbWNnX3Rlc3RfMFwiKTtcbiBcdGNoaWxkID0gY2dfbmFtZShyb290LCBcIm1lbWNnX3Rlc3RfMC9tZW1jZ190ZXN0XzFcIik7XG5AQCAtMTUxOSwxMSArMTUyNCwxMSBAQCBzdGF0aWMgaW50IHRlc3RfbWVtY2dfb29tX2dyb3VwX2xlYWZfZXZlbnRzKGNvbnN0IGNoYXIgKnJvb3QpXG4gXHRpZiAoY2dfdGVzdF9wcm9jX2tpbGxlZChjaGlsZCkpXG4gXHRcdGdvdG8gY2xlYW51cDtcbiBcbi1cdGlmIChjZ19yZWFkX2tleV9sb25nKGNoaWxkLCBcIm1lbW9yeS5ldmVudHNcIiwgXCJvb21fa2lsbCBcIikgXHUwMDNjPSAwKVxuK1x0aWYgKGNnX3JlYWRfa2V5X3M2NChjaGlsZCwgXCJtZW1vcnkuZXZlbnRzXCIsIFwib29tX2tpbGwgXCIpIFx1MDAzYz0gMClcbiBcdFx0Z290byBjbGVhbnVwO1xuIFxuLVx0cGFyZW50X29vbV9ldmVudHMgPSBjZ19yZWFkX2tleV9sb25nKFxuLVx0XHRcdHBhcmVudCwgXCJtZW1vcnkuZXZlbnRzXCIsIFwib29tX2tpbGwgXCIpO1xuK1x0cGFyZW50X29vbV9ldmVudHMgPVxuK1x0XHRjZ19yZWFkX2tleV9zNjQocGFyZW50LCBcIm1lbW9yeS5ldmVudHNcIiwgXCJvb21fa2lsbCBcIik7XG4gXHQvKlxuIFx0ICogSWYgbWVtb3J5X2xvY2FsZXZlbnRzIGlzIG5vdCBlbmFibGVkICh0aGUgZGVmYXVsdCksIHRoZSBwYXJlbnQgc2hvdWxkXG4gXHQgKiBjb3VudCBPT00gZXZlbnRzIGluIGl0cyBjaGlsZHJlbiBncm91cHMuIE90aGVyd2lzZSwgaXQgc2hvdWxkIG5vdFxuQEAgLTE2MzksNyArMTY0NCw3IEBAIHN0YXRpYyBpbnQgdGVzdF9tZW1jZ19vb21fZ3JvdXBfc2NvcmVfZXZlbnRzKGNvbnN0IGNoYXIgKnJvb3QpXG4gXHRpZiAoIWNnX3J1bihtZW1jZywgYWxsb2NfYW5vbiwgKHZvaWQgKilNQigxMDApKSlcbiBcdFx0Z290byBjbGVhbnVwO1xuIFxuLVx0aWYgKGNnX3JlYWRfa2V5X2xvbmcobWVtY2csIFwibWVtb3J5LmV2ZW50c1wiLCBcIm9vbV9raWxsIFwiKSAhPSAzKVxuK1x0aWYgKGNnX3JlYWRfa2V5X3M2NChtZW1jZywgXCJtZW1vcnkuZXZlbnRzXCIsIFwib29tX2tpbGwgXCIpICE9IDMpXG4gXHRcdGdvdG8gY2xlYW51cDtcbiBcbiBcdGlmIChraWxsKHNhZmVfcGlkLCBTSUdLSUxMKSlcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9jZ3JvdXAvdGVzdF9waWRzLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9jZ3JvdXAvdGVzdF9waWRzLmNcbmluZGV4IDcxMDEwOWI1M2RmZTkuLmY0ZDViYzlmNWYyNGYgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9jZ3JvdXAvdGVzdF9waWRzLmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2Nncm91cC90ZXN0X3BpZHMuY1xuQEAgLTExMSwxMiArMTExLDExIEBAIHN0YXRpYyBpbnQgdGVzdF9waWRzX2V2ZW50cyhjb25zdCBjaGFyICpyb290KVxuIFx0aWYgKGtpbGwocGlkLCBTSUdJTlQpKVxuIFx0XHRnb3RvIGNsZWFudXA7XG4gXG4tXHRpZiAoY2dfcmVhZF9rZXlfbG9uZyhjZ19jaGlsZCwgXCJwaWRzLmV2ZW50c1wiLCBcIm1heCBcIikgIT0gMClcbitcdGlmIChjZ19yZWFkX2tleV9zNjQoY2dfY2hpbGQsIFwicGlkcy5ldmVudHNcIiwgXCJtYXggXCIpICE9IDApXG4gXHRcdGdvdG8gY2xlYW51cDtcbi1cdGlmIChjZ19yZWFkX2tleV9sb25nKGNnX3BhcmVudCwgXCJwaWRzLmV2ZW50c1wiLCBcIm1heCBcIikgIT0gMSlcbitcdGlmIChjZ19yZWFkX2tleV9zNjQoY2dfcGFyZW50LCBcInBpZHMuZXZlbnRzXCIsIFwibWF4IFwiKSAhPSAxKVxuIFx0XHRnb3RvIGNsZWFudXA7XG4gXG4tXG4gXHRyZXQgPSBLU0ZUX1BBU1M7XG4gXG4gY2xlYW51cDpcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9jZ3JvdXAvdGVzdF96c3dhcC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvY2dyb3VwL3Rlc3RfenN3YXAuY1xuaW5kZXggNjA5YzQ4ZjM4NTI0MS4uNmU3ZWUxMWJjOTdhNSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2Nncm91cC90ZXN0X3pzd2FwLmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2Nncm91cC90ZXN0X3pzd2FwLmNcbkBAIC01OSwxNCArNTksMTQgQEAgc3RhdGljIGludCBnZXRfenN3YXBfc3RvcmVkX3BhZ2VzKHNpemVfdCAqdmFsdWUpXG4gXHRyZXR1cm4gcmVhZF9pbnQoUEFUSF9aU1dBUF9TVE9SRURfUEFHRVMsIHZhbHVlKTtcbiB9XG4gXG4tc3RhdGljIGxvbmcgZ2V0X2NnX3diX2NvdW50KGNvbnN0IGNoYXIgKmNnKVxuK3N0YXRpYyBzNjQgZ2V0X2NnX3diX2NvdW50KGNvbnN0IGNoYXIgKmNnKVxuIHtcbi1cdHJldHVybiBjZ19yZWFkX2tleV9sb25nKGNnLCBcIm1lbW9yeS5zdGF0XCIsIFwienN3cHdiXCIpO1xuK1x0cmV0dXJuIGNnX3JlYWRfa2V5X3M2NChjZywgXCJtZW1vcnkuc3RhdFwiLCBcInpzd3B3YlwiKTtcbiB9XG4gXG4tc3RhdGljIGxvbmcgZ2V0X3pzd3BvdXQoY29uc3QgY2hhciAqY2dyb3VwKVxuK3N0YXRpYyBzNjQgZ2V0X3pzd3BvdXQoY29uc3QgY2hhciAqY2dyb3VwKVxuIHtcbi1cdHJldHVybiBjZ19yZWFkX2tleV9sb25nKGNncm91cCwgXCJtZW1vcnkuc3RhdFwiLCBcInpzd3BvdXQgXCIpO1xuK1x0cmV0dXJuIGNnX3JlYWRfa2V5X3M2NChjZ3JvdXAsIFwibWVtb3J5LnN0YXRcIiwgXCJ6c3dwb3V0IFwiKTtcbiB9XG4gXG4gc3RhdGljIGludCBhbGxvY2F0ZV9hbmRfcmVhZF9ieXRlcyhjb25zdCBjaGFyICpjZ3JvdXAsIHZvaWQgKmFyZylcbkBAIC0xMjUsOSArMTI1LDEwIEBAIHN0YXRpYyBjaGFyICpzZXR1cF90ZXN0X2dyb3VwXzFNKGNvbnN0IGNoYXIgKnJvb3QsIGNvbnN0IGNoYXIgKm5hbWUpXG4gICogV3JpdGViYWNrIGlzIGFzeW5jaHJvbm91czsgcG9sbCB1bnRpbCBhdCBsZWFzdCBvbmUgd3JpdGViYWNrIGhhc1xuICAqIGJlZW4gcmVjb3JkZWQgZm9yIEBjZywgb3IgdW50aWwgQHRpbWVvdXRfbXMgaGFzIGVsYXBzZWQuXG4gICovXG4tc3RhdGljIGxvbmcgd2FpdF9mb3Jfd3JpdGViYWNrKGNvbnN0IGNoYXIgKmNnLCBpbnQgdGltZW91dF9tcylcbitzdGF0aWMgczY0IHdhaXRfZm9yX3dyaXRlYmFjayhjb25zdCBjaGFyICpjZywgaW50IHRpbWVvdXRfbXMpXG4ge1xuLVx0bG9uZyBlbGFwc2VkLCBjb3VudDtcbitcdGxvbmcgZWxhcHNlZDtcbitcdHM2NCBjb3VudDtcbiBcdGZvciAoZWxhcHNlZCA9IDA7IGVsYXBzZWQgXHUwMDNjIHRpbWVvdXRfbXM7IGVsYXBzZWQgKz0gMTAwKSB7XG4gXHRcdGNvdW50ID0gZ2V0X2NnX3diX2NvdW50KGNnKTtcbiBcbkBAIC0xNDcsNyArMTQ4LDcgQEAgc3RhdGljIGxvbmcgd2FpdF9mb3Jfd3JpdGViYWNrKGNvbnN0IGNoYXIgKmNnLCBpbnQgdGltZW91dF9tcylcbiAgKi9cbiBzdGF0aWMgaW50IHRlc3RfenN3YXBfdXNhZ2UoY29uc3QgY2hhciAqcm9vdClcbiB7XG4tXHRsb25nIHpzd3BvdXRfYmVmb3JlLCB6c3dwb3V0X2FmdGVyO1xuK1x0czY0IHpzd3BvdXRfYmVmb3JlLCB6c3dwb3V0X2FmdGVyO1xuIFx0aW50IHJldCA9IEtTRlRfRkFJTDtcbiBcdGNoYXIgKnRlc3RfZ3JvdXA7XG4gXG5AQCAtMTkxLDcgKzE5Miw4IEBAIHN0YXRpYyBpbnQgdGVzdF9zd2FwaW5fbm96c3dhcChjb25zdCBjaGFyICpyb290KVxuIHtcbiBcdGludCByZXQgPSBLU0ZUX0ZBSUw7XG4gXHRjaGFyICp0ZXN0X2dyb3VwLCBtZW1fbWF4X2J1ZlszMl07XG4tXHRsb25nIHN3YXBfcGVhaywgenN3cG91dCwgbWluX3N3YXA7XG4rXHRsb25nIHN3YXBfcGVhaywgbWluX3N3YXA7XG4rXHRzNjQgenN3cG91dDtcbiBcdHNpemVfdCBhbGxvY2F0aW9uX3NpemUgPSBwYWdlX3NpemUgKiA1MTI7XG4gXG4gXHRtaW5fc3dhcCA9IGFsbG9jYXRpb25fc2l6ZSAvIDQ7XG5AQCAtMjQ4LDcgKzI1MCw3IEBAIHN0YXRpYyBpbnQgdGVzdF96c3dhcGluKGNvbnN0IGNoYXIgKnJvb3QpXG4ge1xuIFx0aW50IHJldCA9IEtTRlRfRkFJTDtcbiBcdGNoYXIgKnRlc3RfZ3JvdXA7XG4tXHRsb25nIHpzd3BpbjtcbitcdHM2NCB6c3dwaW47XG4gXG4gXHR0ZXN0X2dyb3VwID0gY2dfbmFtZShyb290LCBcInpzd2FwaW5fdGVzdFwiKTtcbiBcdGlmICghdGVzdF9ncm91cClcbkBAIC0yNjQsNyArMjY2LDcgQEAgc3RhdGljIGludCB0ZXN0X3pzd2FwaW4oY29uc3QgY2hhciAqcm9vdClcbiBcdGlmIChjZ19ydW4odGVzdF9ncm91cCwgYWxsb2NhdGVfYW5kX3JlYWRfYnl0ZXMsICh2b2lkICopTUIoMzIpKSlcbiBcdFx0Z290byBvdXQ7XG4gXG4tXHR6c3dwaW4gPSBjZ19yZWFkX2tleV9sb25nKHRlc3RfZ3JvdXAsIFwibWVtb3J5LnN0YXRcIiwgXCJ6c3dwaW4gXCIpO1xuK1x0enN3cGluID0gY2dfcmVhZF9rZXlfczY0KHRlc3RfZ3JvdXAsIFwibWVtb3J5LnN0YXRcIiwgXCJ6c3dwaW4gXCIpO1xuIFx0aWYgKHpzd3BpbiBcdTAwM2MgMCkge1xuIFx0XHRrc2Z0X3ByaW50X21zZyhcImZhaWxlZCB0byBnZXQgenN3cGluXFxuXCIpO1xuIFx0XHRnb3RvIG91dDtcbkBAIC0zNTUsMTEgKzM1NywxMSBAQCBzdGF0aWMgaW50IGF0dGVtcHRfd3JpdGViYWNrKGNvbnN0IGNoYXIgKmNncm91cCwgdm9pZCAqYXJnKVxuIFxuIHN0YXRpYyBpbnQgdGVzdF96c3dhcF93cml0ZWJhY2tfb25lKGNvbnN0IGNoYXIgKmNncm91cCwgYm9vbCB3YilcbiB7XG4tXHRsb25nIHpzd3B3Yl9iZWZvcmUsIHpzd3B3Yl9hZnRlcjtcbitcdHM2NCB6c3dwd2JfYmVmb3JlLCB6c3dwd2JfYWZ0ZXI7XG4gXG4gXHR6c3dwd2JfYmVmb3JlID0gZ2V0X2NnX3diX2NvdW50KGNncm91cCk7XG4gXHRpZiAoenN3cHdiX2JlZm9yZSAhPSAwKSB7XG4tXHRcdGtzZnRfcHJpbnRfbXNnKFwienN3cHdiX2JlZm9yZSA9ICVsZCBpbnN0ZWFkIG9mIDBcXG5cIiwgenN3cHdiX2JlZm9yZSk7XG4rXHRcdGtzZnRfcHJpbnRfbXNnKFwienN3cHdiX2JlZm9yZSA9ICVsbGQgaW5zdGVhZCBvZiAwXFxuXCIsIHpzd3B3Yl9iZWZvcmUpO1xuIFx0XHRyZXR1cm4gLTE7XG4gXHR9XG4gXG5AQCAtMzc1LDcgKzM3Nyw3IEBAIHN0YXRpYyBpbnQgdGVzdF96c3dhcF93cml0ZWJhY2tfb25lKGNvbnN0IGNoYXIgKmNncm91cCwgYm9vbCB3YilcbiBcdFx0cmV0dXJuIC0xO1xuIFxuIFx0aWYgKHdiICE9ICEhenN3cHdiX2FmdGVyKSB7XG4tXHRcdGtzZnRfcHJpbnRfbXNnKFwienN3cHdiX2FmdGVyIGlzICVsZCB3aGlsZSB3YiBpcyAlc1xcblwiLFxuK1x0XHRrc2Z0X3ByaW50X21zZyhcInpzd3B3Yl9hZnRlciBpcyAlbGxkIHdoaWxlIHdiIGlzICVzXFxuXCIsXG4gXHRcdFx0XHR6c3dwd2JfYWZ0ZXIsIHdiID8gXCJlbmFibGVkXCIgOiBcImRpc2FibGVkXCIpO1xuIFx0XHRyZXR1cm4gLTE7XG4gXHR9XG5AQCAtNDA4LDYgKzQxMCw4IEBAIHN0YXRpYyBpbnQgdGVzdF96c3dhcF93cml0ZWJhY2soY29uc3QgY2hhciAqcm9vdCwgYm9vbCB3YilcbiBcdCAqIFRodXMsIHRoZSBwYXJlbnQncyBzZXR0aW5nIHNoYWxsIGJlIHdoYXQncyBpbiBlZmZlY3QuICovXG4gXHRpZiAoY2dfd3JpdGUodGVzdF9ncm91cCwgXCJtZW1vcnkuenN3YXAubWF4XCIsIFwibWF4XCIpKVxuIFx0XHRnb3RvIG91dDtcbitcdGlmIChjZ19yZWFkX3N0cmNtcF93YWl0KHRlc3RfZ3JvdXAsIFwiY2dyb3VwLmV2ZW50c1wiLCBcInBvcHVsYXRlZCAwXFxuXCIpKVxuK1x0XHRnb3RvIG91dDtcbiBcdGlmIChjZ193cml0ZSh0ZXN0X2dyb3VwLCBcImNncm91cC5zdWJ0cmVlX2NvbnRyb2xcIiwgXCIrbWVtb3J5XCIpKVxuIFx0XHRnb3RvIG91dDtcbiBcbkBAIC00ODUsNyArNDg5LDcgQEAgc3RhdGljIGludCB0ZXN0X25vX2ludmFzaXZlX2Nncm91cF9zaHJpbmsoY29uc3QgY2hhciAqcm9vdClcbiBcdFx0bWVtc2V0KFx1MDAyNnp3X2FsbG9jYXRpb25bb2ZmXSwgMCwgcGFnZV9zaXplKTtcbiBcdFx0bWVtc2V0KFx1MDAyNnp3X2FsbG9jYXRpb25bb2ZmXSwgJ2EnLCBwYWdlX3NpemUvNCk7XG4gXHR9XG4tXHRpZiAoY2dfcmVhZF9rZXlfbG9uZyh6d19ncm91cCwgXCJtZW1vcnkuc3RhdFwiLCBcInpzd2FwcGVkXCIpIFx1MDAzYyAxKVxuK1x0aWYgKGNnX3JlYWRfa2V5X3M2NCh6d19ncm91cCwgXCJtZW1vcnkuc3RhdFwiLCBcInpzd2FwcGVkXCIpIFx1MDAzYyAxKVxuIFx0XHRnb3RvIG91dDtcbiBcbiBcdC8qIFB1c2ggd2JfZ3JvdXAgbWVtb3J5IGludG8genN3YXAgd2l0aCBoYXJkLXRvLWNvbXByZXNzIGRhdGEgdG8gdHJpZ2dlciB3YiAqL1xuQEAgLTYyOCwxMSArNjMyLDEyIEBAIHN0YXRpYyBpbnQgdGVzdF9ub19rbWVtX2J5cGFzcyhjb25zdCBjaGFyICpyb290KVxuIFx0XHRcdGJyZWFrO1xuIFx0XHQvKiBJZiBtZW1vcnkgd2FzIHB1c2hlZCB0byB6c3dhcCwgdmVyaWZ5IGl0IGJlbG9uZ3MgdG8gbWVtY2cgKi9cbiBcdFx0aWYgKHN0b3JlZF9wYWdlcyBcdTAwM2Ugc3RvcmVkX3BhZ2VzX3RocmVzaG9sZCkge1xuLVx0XHRcdGludCB6c3dhcHBlZCA9IGNnX3JlYWRfa2V5X2xvbmcodGVzdF9ncm91cCwgXCJtZW1vcnkuc3RhdFwiLCBcInpzd2FwcGVkIFwiKTtcbi1cdFx0XHRpbnQgZGVsdGEgPSBzdG9yZWRfcGFnZXMgKiBwYWdlX3NpemUgLSB6c3dhcHBlZDtcbi1cdFx0XHRpbnQgcmVzdWx0X29rID0gZGVsdGEgXHUwMDNjIHN0b3JlZF9wYWdlcyAqIHBhZ2Vfc2l6ZSAvIDQ7XG4rXHRcdFx0czY0IHpzd2FwcGVkID0gY2dfcmVhZF9rZXlfczY0KFxuK1x0XHRcdFx0dGVzdF9ncm91cCwgXCJtZW1vcnkuc3RhdFwiLCBcInpzd2FwcGVkIFwiKTtcbitcdFx0XHRzNjQgZGVsdGEgPSAoczY0KXN0b3JlZF9wYWdlcyAqIHBhZ2Vfc2l6ZSAtIHpzd2FwcGVkO1xuK1x0XHRcdHM2NCBtYXhfZGVsdGEgPSAoczY0KXN0b3JlZF9wYWdlcyAqIHBhZ2Vfc2l6ZSAvIDQ7XG4gXG4tXHRcdFx0cmV0ID0gcmVzdWx0X29rID8gS1NGVF9QQVNTIDogS1NGVF9GQUlMO1xuK1x0XHRcdHJldCA9IChkZWx0YSBcdTAwM2MgbWF4X2RlbHRhKSA/IEtTRlRfUEFTUyA6IEtTRlRfRkFJTDtcbiBcdFx0XHRicmVhaztcbiBcdFx0fVxuIFx0fVxuQEAgLTcwMSw5ICs3MDYsOSBAQCBzdGF0aWMgaW50IGFsbG9jYXRlX3JhbmRvbV9hbmRfd2FpdChjb25zdCBjaGFyICpjZ3JvdXAsIHZvaWQgKmFyZylcbiBcdHJldHVybiAwO1xuIH1cbiBcbi1zdGF0aWMgbG9uZyBnZXRfenN3YXBfaW5jb21wKGNvbnN0IGNoYXIgKmNncm91cClcbitzdGF0aWMgczY0IGdldF96c3dhcF9pbmNvbXAoY29uc3QgY2hhciAqY2dyb3VwKVxuIHtcbi1cdHJldHVybiBjZ19yZWFkX2tleV9sb25nKGNncm91cCwgXCJtZW1vcnkuc3RhdFwiLCBcInpzd2FwX2luY29tcCBcIik7XG4rXHRyZXR1cm4gY2dfcmVhZF9rZXlfczY0KGNncm91cCwgXCJtZW1vcnkuc3RhdFwiLCBcInpzd2FwX2luY29tcCBcIik7XG4gfVxuIFxuIC8qXG5AQCAtNzE5LDcgKzcyNCw3IEBAIHN0YXRpYyBpbnQgdGVzdF96c3dhcF9pbmNvbXByZXNzaWJsZShjb25zdCBjaGFyICpyb290KVxuIFx0aW50IHJldCA9IEtTRlRfRkFJTDtcbiBcdHN0cnVjdCBpbmNvbXBfY2hpbGRfYXJncyAqdmFsdWVzO1xuIFx0Y2hhciAqdGVzdF9ncm91cDtcbi1cdGxvbmcgenN3YXBfaW5jb21wO1xuK1x0czY0IHpzd2FwX2luY29tcDtcbiBcdHBpZF90IGNoaWxkX3BpZDtcbiBcdGludCBjaGlsZF9zdGF0dXM7XG4gXHRjaGFyIGJ1ZjtcbkBAIC03NTUsMTMgKzc2MCwxNSBAQCBzdGF0aWMgaW50IHRlc3RfenN3YXBfaW5jb21wcmVzc2libGUoY29uc3QgY2hhciAqcm9vdClcbiBcbiBcdHpzd2FwX2luY29tcCA9IGdldF96c3dhcF9pbmNvbXAodGVzdF9ncm91cCk7XG4gXHRpZiAoenN3YXBfaW5jb21wIFx1MDAzYz0gMCkge1xuLVx0XHRsb25nIHpzd3BvdXQgPSBnZXRfenN3cG91dCh0ZXN0X2dyb3VwKTtcbi1cdFx0bG9uZyB6c3dhcHBlZCA9IGNnX3JlYWRfa2V5X2xvbmcodGVzdF9ncm91cCwgXCJtZW1vcnkuc3RhdFwiLCBcInpzd2FwcGVkIFwiKTtcbi1cdFx0bG9uZyB6c3dhcF9iID0gY2dfcmVhZF9rZXlfbG9uZyh0ZXN0X2dyb3VwLCBcIm1lbW9yeS5zdGF0XCIsIFwienN3YXAgXCIpO1xuLVxuLVx0XHRrc2Z0X3ByaW50X21zZyhcInpzd2FwX2luY29tcCBub3QgaW5jcmVhc2VkOiAlbGRcXG5cIiwgenN3YXBfaW5jb21wKTtcbi1cdFx0a3NmdF9wcmludF9tc2coXCJkZWJ1ZzogenN3cG91dD0lbGQgenN3YXBwZWQ9JWxkIHpzd2FwX2I9JWxkXFxuXCIsXG4tXHRcdFx0ICAgICAgIHpzd3BvdXQsIHpzd2FwcGVkLCB6c3dhcF9iKTtcbitcdFx0czY0IHpzd3BvdXQgPSBnZXRfenN3cG91dCh0ZXN0X2dyb3VwKTtcbitcdFx0czY0IHpzd2FwcGVkID1cbitcdFx0XHRjZ19yZWFkX2tleV9zNjQodGVzdF9ncm91cCwgXCJtZW1vcnkuc3RhdFwiLCBcInpzd2FwcGVkIFwiKTtcbitcdFx0czY0IHpzd2FwX2IgPVxuK1x0XHRcdGNnX3JlYWRfa2V5X3M2NCh0ZXN0X2dyb3VwLCBcIm1lbW9yeS5zdGF0XCIsIFwienN3YXAgXCIpO1xuK1xuK1x0XHRrc2Z0X3ByaW50X21zZyhcInpzd2FwX2luY29tcCBub3QgaW5jcmVhc2VkOiAlbGxkXFxuXCIsIHpzd2FwX2luY29tcCk7XG4rXHRcdGtzZnRfcHJpbnRfbXNnKFwiZGVidWc6IHpzd3BvdXQ9JWxsZCB6c3dhcHBlZD0lbGxkIHpzd2FwX2I9JWxsZFxcblwiLFxuK1x0XHRcdFx0enN3cG91dCwgenN3YXBwZWQsIHpzd2FwX2IpO1xuIFx0XHRrc2Z0X3ByaW50X21zZyhcImRlYnVnOiBtYWR2aXNlIHJldD0lZCBlcnJubz0lZFxcblwiLFxuIFx0XHRcdCAgICAgICB2YWx1ZXMtXHUwMDNlbWFkdmlzZV9yZXQsIHZhbHVlcy1cdTAwM2VtYWR2aXNlX2Vycm5vKTtcbiBcdFx0Z290byBvdXRfa2lsbDtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDA4OjUxOjE3LjE5MTMyNzc4MVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQ1MzQ2MDg2NTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyBFdmFsdWF0aW9uOiBDZ3JvdXAgU2VsZnRlc3RzIFBhdGNoKipcblxuT2theSwgbGV0J3MgYXNzZXNzIHRoaXMgcGF0Y2ggc2VyaWVzIGZvciBzeXprYWxsZXIgZnV6emluZyBwb3RlbnRpYWwuIEZpcnN0LCBJIG5lZWQgdG8gc2VlIHRoZSBzY29wZSBvZiB0aGUgbW9kaWZpY2F0aW9ucy4gTG9va2luZyBhdCB0aGUgZGlmZiwgaXQgYXBwZWFycyB0aGUgY2hhbmdlcyBhcmUgbGltaXRlZCB0byB0aGVzZSBmaWxlczpcblxuKiAgIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9jZ3JvdXAvbGliL2Nncm91cF91dGlsLmNgXG4qICAgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2Nncm91cC9saWIvaW5jbHVkZS9jZ3JvdXBfdXRpbC5oYFxuKiAgIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9jZ3JvdXAvdGVzdF9jcHUuY2BcbiogICBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvY2dyb3VwL3Rlc3RfZnJlZXplci5jYFxuKiAgIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9jZ3JvdXAvdGVzdF9rbWVtLmNgXG4qICAgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2Nncm91cC90ZXN0X21lbWNvbnRyb2wuY2BcbiogICBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvY2dyb3VwL3Rlc3RfcGlkcy5jYFxuKiAgIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9jZ3JvdXAvdGVzdF96c3dhcC5jYFxuXG5BbGwgb2YgdGhlc2UgYXJlIGNvbnRhaW5lZCB3aXRoaW4gdGhlIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9jZ3JvdXAvYCBkaXJlY3RvcnksIHdoaWNoIGltbWVkaWF0ZWx5IHJhaXNlcyBhIGZsYWcuIE5vdywgbGV0J3MgYXBwbHkgdGhlIGd1aWRlbGluZXMuIFNwZWNpZmljYWxseSwgdGhlIFwiTkVHQVRJVkUgQ1JJVEVSSUFcIiBzZWN0aW9uIGRpY3RhdGVzIHdoZW4gd2UgKnNob3VsZG4ndCogZnV6ei4gQW5kIHRoZSBydWxlIGlzIHByZXR0eSBjbGVhcjogY2hhbmdlcyB0byB1c2VyLXNwYWNlIHNlbGYtdGVzdHMgYXJlIGEgbm8tZ28sIGFzIGxvbmcgYXMgdGhleSBkb24ndCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAoYHZtbGludXhgKSBvciBrZXJuZWwgbW9kdWxlcy5cblxuR2l2ZW4gdGhhdCB0aGVzZSBtb2RpZmljYXRpb25zIGFyZSBzdHJpY3RseSB3aXRoaW4gdGhlIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9jZ3JvdXAvYCBkaXJlY3RvcnksIHdoaWNoIEkga25vdyBpcyBkZWRpY2F0ZWQgdG8gdXNlci1zcGFjZSBzZWxmLXRlc3RzIGFuZCBhcmUgbm90IHJlbGF0ZWQgdG8ga2VybmVsIGNvZGUsIGl0J3MgY2xlYXIgdGhlc2UgbW9kaWZpY2F0aW9ucyBkb24ndCBmYWxsIGludG8gdGhlIGNhdGVnb3JpZXMgdGhhdCB3YXJyYW50IGZ1enppbmcgd2l0aCBzeXprYWxsZXIuXG5cblRoZXJlZm9yZTpcblxuKiAgIGBXb3J0aEZ1enppbmcgPSBmYWxzZWBcbiogICBgRm9jdXNTeW1ib2xzID0gW11gIChubyBzcGVjaWZpYyBzeW1ib2xzIG5lZWQgdG8gYmUgdHJhY2tlZClcbiogICBgRW5hYmxlQ29uZmlncyA9IFtdYCAobm8gc3BlY2lmaWMgY29uZmlndXJhdGlvbnMgYXJlIG5lZWRlZClcbiogICBgUmVhc29uaW5nID0gXCJUaGUgcGF0Y2ggb25seSBtb2RpZmllcyB1c2VyLXNwYWNlIGNncm91cCBzZWxmdGVzdHMgdW5kZXIgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvY2dyb3VwLyBhbmQgZG9lcyBub3QgYWZmZWN0IHRoZSBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLlwiYFxuXG5JJ20gY29uZmlkZW50IGluIHRoaXMgZXZhbHVhdGlvbi4gTGV0J3MgY2FsbCBgc2V0LXJlc3VsdHNgIHRvIHJlY29yZCB0aGlzIGRlY2lzaW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjMwNCwiT3V0cHV0VG9rZW5zIjo3MywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ2NiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDA4OjUxOjIxLjcyNTk0MDk3NFoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDAxMzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgb25seSB1c2VyLXNwYWNlIGNncm91cCBzZWxmLXRlc3RzIHVuZGVyIHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2Nncm91cC8gYW5kIGRvZXMgbm90IHRvdWNoIGFueSBrZXJuZWwgY29kZSBvciBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBvbmx5IHVzZXItc3BhY2UgY2dyb3VwIHNlbGYtdGVzdHMgdW5kZXIgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvY2dyb3VwLyBhbmQgZG9lcyBub3QgdG91Y2ggYW55IGtlcm5lbCBjb2RlIG9yIGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDA4OjUxOjIxLjcyNTk4ODE3NFoiLCJTZXEiOjUsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowcvsft[1] Phase: Running StartedAt: 2026-09-06 08:51:32 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcvsft[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-09-06 08:51:32 +0000 UTC FinishedAt: 2026-09-06 08:51:42 +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,}