Name: series-workflow4c8tv Phase: Failed StartedAt: 2026-08-06 03:51:02 +0000 UTC FinishedAt: 2026-08-06 04:08:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4c8tv[0] Phase: Succeeded StartedAt: 2026-08-06 03:51:02 +0000 UTC FinishedAt: 2026-08-06 04:08:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4c8tv[0].run-triage Phase: Succeeded StartedAt: 2026-08-06 03:51:02 +0000 UTC FinishedAt: 2026-08-06 04:08:23 +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+CgkJCTx0ZD4yMDI2LzA4LzA2IDA0OjA3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgdXNlci1zcGFjZSBzZWxmdGVzdHMgaW4gdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vIGFuZCBkb2VzIG5vdCBtYWtlIGFueSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCBjb2RlIGl0c2VsZi4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMDQ6MDc8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA1NGJjNzg1M2Q0ZjVmNWU1ZWQ4ZGZiYjlmZmZmYzM5NWMzM2Q0ZGE0XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBBdWcgNiAwNDowNzoxMCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9mb2xpb19zcGxpdF9yYWNlX3Rlc3QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2ZvbGlvX3NwbGl0X3JhY2VfdGVzdC5jXG5pbmRleCA2MzI5ZTM3ZmZmNGM5Li40NWI4NGY3YjM2NGUwIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZm9saW9fc3BsaXRfcmFjZV90ZXN0LmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2ZvbGlvX3NwbGl0X3JhY2VfdGVzdC5jXG5AQCAtMTgyLDcgJiM0MzsxODIsNyBAQCBzdGF0aWMgdWludDY0X3QgcnVuX2l0ZXJhdGlvbih2b2lkKVxuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgVE9UQUxfUEFHRVM7IGkmIzQzOyYjNDM7KVxuIFx0XHRmaWxsX3BhZ2UobW1hcF9iYXNlLCBpKTtcbiBcbi1cdGlmICghY2hlY2tfaHVnZV9zaG1lbShtbWFwX2Jhc2UsIE5SX1BNRF9QQUdFLCBwbWRfcGFnZXNpemUpKVxuJiM0MztcdGlmICghY2hlY2tfaHVnZV9zaG1lbShtbWFwX2Jhc2UsIEZJTEVfU0laRSwgTlJfUE1EX1BBR0UsIHBtZF9wYWdlc2l6ZSkpXG4gXHRcdGtzZnRfZXhpdF9mYWlsX21zZyhcJiMzNDtObyBzaG1lbSBUSFAgaXMgYWxsb2NhdGVkXFxuXCYjMzQ7KTtcbiBcbiBcdGlmIChwdGhyZWFkX2JhcnJpZXJfaW5pdChcdTAwMjZjdGwuYmFycmllciwgTlVMTCwgTlVNX1JFQURFUl9USFJFQURTICYjNDM7IDEpICE9IDApXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0va2h1Z2VwYWdlZC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0va2h1Z2VwYWdlZC5jXG5pbmRleCBiMjU0YmFmOWUwYjc1Li43Zjg3YWVlZDMwMWM0IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0va2h1Z2VwYWdlZC5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9raHVnZXBhZ2VkLmNcbkBAIC0yNiw5ICYjNDM7MjYsMTEgQEBcbiBcbiAjZGVmaW5lIEJBU0VfQUREUiAoKHZvaWQgKikoMVVMIFx1MDAzY1x1MDAzYyAzMCkpXG4gc3RhdGljIHVuc2lnbmVkIGxvbmcgaHBhZ2VfcG1kX3NpemU7XG4mIzQzO3N0YXRpYyBpbnQgaHBhZ2VfcG1kX29yZGVyO1xuIHN0YXRpYyB1bnNpZ25lZCBsb25nIHBhZ2Vfc2l6ZTtcbiBzdGF0aWMgaW50IGhwYWdlX3BtZF9ucjtcbiBzdGF0aWMgaW50IGFub25fb3JkZXI7XG4mIzQzO3N0YXRpYyBpbnQgY29sbGFwc2Vfb3JkZXI7XG4gXG4gI2RlZmluZSBQSURfU01BUFMgXCYjMzQ7L3Byb2Mvc2VsZi9zbWFwc1wmIzM0O1xuICNkZWZpbmUgVEVTVF9GSUxFIFwmIzM0O2NvbGxhcHNlX3Rlc3RfZmlsZVwmIzM0O1xuQEAgLTUxLDcgJiM0Mzs1Myw3IEBAIHN0cnVjdCBtZW1fb3BzIHtcbiBcdHZvaWQgKigqc2V0dXBfYXJlYSkoaW50IG5yX2hwYWdlcyk7XG4gXHR2b2lkICgqY2xlYW51cF9hcmVhKSh2b2lkICpwLCB1bnNpZ25lZCBsb25nIHNpemUpO1xuIFx0dm9pZCAoKmZhdWx0KSh2b2lkICpwLCB1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCk7XG4tXHRib29sICgqY2hlY2tfaHVnZSkodm9pZCAqYWRkciwgaW50IG5yX2hwYWdlcyk7XG4mIzQzO1x0Ym9vbCAoKmNoZWNrX2h1Z2UpKHZvaWQgKmFkZHIsIHNpemVfdCBsZW4sIGludCBucl9ocGFnZXMsIHVuc2lnbmVkIGxvbmcgaHBhZ2Vfc2l6ZSk7XG4gXHRjb25zdCBjaGFyICpuYW1lO1xuIH07XG4gXG5AQCAtNjksNiAmIzQzOzcxLDcgQEAgc3RydWN0IGNvbGxhcHNlX2NvbnRleHQge1xuIH07XG4gXG4gc3RhdGljIHN0cnVjdCBjb2xsYXBzZV9jb250ZXh0ICpraHVnZXBhZ2VkX2NvbnRleHQ7XG4mIzQzO3N0YXRpYyBzdHJ1Y3QgY29sbGFwc2VfY29udGV4dCAqbXRocF9raHVnZXBhZ2VkX2NvbnRleHQ7XG4gc3RhdGljIHN0cnVjdCBjb2xsYXBzZV9jb250ZXh0ICptYWR2aXNlX2NvbnRleHQ7XG4gXG4gc3RydWN0IGZpbGVfaW5mbyB7XG5AQCAtMjk1LDcgJiM0MzsyOTgsNyBAQCBzdGF0aWMgdm9pZCAqYWxsb2NfaHBhZ2Uoc3RydWN0IG1lbV9vcHMgKm9wcylcbiBcdGtzZnRfcHJpbnRfbXNnKFwmIzM0O0FsbG9jYXRlIGh1Z2UgcGFnZS4uLlwmIzM0Oyk7XG4gXHRpZiAobWFkdmlzZV9jb2xsYXBzZV9yZXRyeShwLCBocGFnZV9wbWRfc2l6ZSkpXG4gXHRcdGtzZnRfZXhpdF9mYWlsX3BlcnJvcihcJiMzNDttYWR2aXNlKE1BRFZfQ09MTEFQU0UpXCYjMzQ7KTtcbi1cdGlmICghb3BzLVx1MDAzZWNoZWNrX2h1Z2UocCwgMSkpXG4mIzQzO1x0aWYgKCFvcHMtXHUwMDNlY2hlY2tfaHVnZShwLCBocGFnZV9wbWRfc2l6ZSwgMSwgaHBhZ2VfcG1kX3NpemUpKVxuIFx0XHRrc2Z0X2V4aXRfZmFpbF9wZXJyb3IoXCYjMzQ7bWFkdmlzZShNQURWX0NPTExBUFNFKVwmIzM0Oyk7XG4gXHRpZiAobWFkdmlzZShwLCBocGFnZV9wbWRfc2l6ZSwgTUFEVl9IVUdFUEFHRSkpXG4gXHRcdGtzZnRfZXhpdF9mYWlsX3BlcnJvcihcJiMzNDttYWR2aXNlKE1BRFZfSFVHRVBBR0UpXCYjMzQ7KTtcbkBAIC0zMjksOSAmIzQzOzMzMiwxMCBAQCBzdGF0aWMgdm9pZCBhbm9uX2ZhdWx0KHZvaWQgKnAsIHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kKVxuIFx0ZmlsbF9tZW1vcnkocCwgc3RhcnQsIGVuZCk7XG4gfVxuIFxuLXN0YXRpYyBib29sIGFub25fY2hlY2tfaHVnZSh2b2lkICphZGRyLCBpbnQgbnJfaHBhZ2VzKVxuJiM0MztzdGF0aWMgYm9vbCBhbm9uX2NoZWNrX2h1Z2Uodm9pZCAqYWRkciwgc2l6ZV90IGxlbiwgaW50IG5yX2hwYWdlcyxcbiYjNDM7XHRcdHVuc2lnbmVkIGxvbmcgaHBhZ2Vfc2l6ZSlcbiB7XG4tXHRyZXR1cm4gY2hlY2tfaHVnZV9hbm9uKGFkZHIsIG5yX2hwYWdlcywgaHBhZ2VfcG1kX3NpemUpO1xuJiM0MztcdHJldHVybiBjaGVja19odWdlX2Fub24oYWRkciwgbGVuLCBucl9ocGFnZXMsIGhwYWdlX3NpemUpO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCAqZmlsZV9zZXR1cF9hcmVhX2NvbW1vbihpbnQgbnJfaHBhZ2VzLCBlbnVtIGZpbGVfc2V0dXBfb3BzIHNldHVwKVxuQEAgLTQzMSwxMyAmIzQzOzQzNSwxNCBAQCBzdGF0aWMgdm9pZCBmaWxlX2ZhdWx0X3dyaXRlKHZvaWQgKnAsIHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kKVxuIFx0XHRrc2Z0X2V4aXRfZmFpbF9wZXJyb3IoXCYjMzQ7bWFkdmlzZShNQURWX1BPUFVMQVRFX1dSSVRFKVwmIzM0Oyk7XG4gfVxuIFxuLXN0YXRpYyBib29sIGZpbGVfY2hlY2tfaHVnZSh2b2lkICphZGRyLCBpbnQgbnJfaHBhZ2VzKVxuJiM0MztzdGF0aWMgYm9vbCBmaWxlX2NoZWNrX2h1Z2Uodm9pZCAqYWRkciwgc2l6ZV90IGxlbiwgaW50IG5yX2hwYWdlcyxcbiYjNDM7XHRcdHVuc2lnbmVkIGxvbmcgaHBhZ2Vfc2l6ZSlcbiB7XG4gXHRzd2l0Y2ggKGZpbmZvLnR5cGUpIHtcbiBcdGNhc2UgVk1BX0ZJTEU6XG4tXHRcdHJldHVybiBjaGVja19odWdlX2ZpbGUoYWRkciwgbnJfaHBhZ2VzLCBocGFnZV9wbWRfc2l6ZSk7XG4mIzQzO1x0XHRyZXR1cm4gY2hlY2tfaHVnZV9maWxlKGFkZHIsIGxlbiwgbnJfaHBhZ2VzLCBocGFnZV9zaXplKTtcbiBcdGNhc2UgVk1BX1NITUVNOlxuLVx0XHRyZXR1cm4gY2hlY2tfaHVnZV9zaG1lbShhZGRyLCBucl9ocGFnZXMsIGhwYWdlX3BtZF9zaXplKTtcbiYjNDM7XHRcdHJldHVybiBjaGVja19odWdlX3NobWVtKGFkZHIsIGxlbiwgbnJfaHBhZ2VzLCBocGFnZV9zaXplKTtcbiBcdGRlZmF1bHQ6XG4gXHRcdGV4aXQoRVhJVF9GQUlMVVJFKTtcbiBcdFx0cmV0dXJuIGZhbHNlO1xuQEAgLTQ2Nyw5ICYjNDM7NDcyLDEwIEBAIHN0YXRpYyB2b2lkIHNobWVtX2NsZWFudXBfYXJlYSh2b2lkICpwLCB1bnNpZ25lZCBsb25nIHNpemUpXG4gXHRjbG9zZShmaW5mby5mZCk7XG4gfVxuIFxuLXN0YXRpYyBib29sIHNobWVtX2NoZWNrX2h1Z2Uodm9pZCAqYWRkciwgaW50IG5yX2hwYWdlcylcbiYjNDM7c3RhdGljIGJvb2wgc2htZW1fY2hlY2tfaHVnZSh2b2lkICphZGRyLCBzaXplX3QgbGVuLCBpbnQgbnJfaHBhZ2VzLFxuJiM0MztcdFx0dW5zaWduZWQgbG9uZyBocGFnZV9zaXplKVxuIHtcbi1cdHJldHVybiBjaGVja19odWdlX3NobWVtKGFkZHIsIG5yX2hwYWdlcywgaHBhZ2VfcG1kX3NpemUpO1xuJiM0MztcdHJldHVybiBjaGVja19odWdlX3NobWVtKGFkZHIsIGxlbiwgbnJfaHBhZ2VzLCBocGFnZV9zaXplKTtcbiB9XG4gXG4gc3RhdGljIHN0cnVjdCBtZW1fb3BzIF9fYW5vbl9vcHMgPSB7XG5AQCAtNTUyLDcgJiM0Mzs1NTgsNyBAQCBzdGF0aWMgdm9pZCBfX21hZHZpc2VfY29sbGFwc2UoY29uc3QgY2hhciAqbXNnLCBjaGFyICpwLCBpbnQgbnJfaHBhZ2VzLFxuIFx0cmV0ID0gbWFkdmlzZV9jb2xsYXBzZV9yZXRyeShwLCBucl9ocGFnZXMgKiBocGFnZV9wbWRfc2l6ZSk7XG4gXHRpZiAoKChib29sKXJldCkgPT0gZXhwZWN0KVxuIFx0XHRmYWlsKFwmIzM0O0ZhaWw6IEJhZCByZXR1cm4gdmFsdWVcJiMzNDspO1xuLVx0ZWxzZSBpZiAoIW9wcy1cdTAwM2VjaGVja19odWdlKHAsIGV4cGVjdCA/IG5yX2hwYWdlcyA6IDApKVxuJiM0MztcdGVsc2UgaWYgKCFvcHMtXHUwMDNlY2hlY2tfaHVnZShwLCBucl9ocGFnZXMgKiBocGFnZV9wbWRfc2l6ZSwgZXhwZWN0ID8gbnJfaHBhZ2VzIDogMCwgaHBhZ2VfcG1kX3NpemUpKVxuIFx0XHRmYWlsKFwmIzM0O0ZhaWw6IGNoZWNrX2h1Z2UoKVwmIzM0Oyk7XG4gXHRlbHNlXG4gXHRcdHN1Y2Nlc3MoXCYjMzQ7T0tcJiMzNDspO1xuQEAgLTU2NCwzMCAmIzQzOzU3MCwzMSBAQCBzdGF0aWMgdm9pZCBtYWR2aXNlX2NvbGxhcHNlKGNvbnN0IGNoYXIgKm1zZywgY2hhciAqcCwgaW50IG5yX2hwYWdlcyxcbiBcdFx0XHQgICAgIHN0cnVjdCBtZW1fb3BzICpvcHMsIGJvb2wgZXhwZWN0KVxuIHtcbiBcdC8qIFNhbml0eSBjaGVjayAqL1xuLVx0aWYgKCFvcHMtXHUwMDNlY2hlY2tfaHVnZShwLCAwKSlcbiYjNDM7XHRpZiAoIW9wcy1cdTAwM2VjaGVja19odWdlKHAsIG5yX2hwYWdlcyAqIGhwYWdlX3BtZF9zaXplLCAwLCBocGFnZV9wbWRfc2l6ZSkpXG4gXHRcdGtzZnRfZXhpdF9mYWlsX21zZyhcJiMzNDtVbmV4cGVjdGVkIGh1Z2UgcGFnZVxcblwmIzM0Oyk7XG4gXHRfX21hZHZpc2VfY29sbGFwc2UobXNnLCBwLCBucl9ocGFnZXMsIG9wcywgZXhwZWN0KTtcbiB9XG4gXG4gI2RlZmluZSBUSUNLIDUwMDAwMFxuLXN0YXRpYyBib29sIHdhaXRfZm9yX3NjYW4oY29uc3QgY2hhciAqbXNnLCBjaGFyICpwLCBpbnQgbnJfaHBhZ2VzLFxuLVx0XHRcdCAgc3RydWN0IG1lbV9vcHMgKm9wcylcbiYjNDM7c3RhdGljIGJvb2wgd2FpdF9mb3Jfc2Nhbihjb25zdCBjaGFyICptc2csIGNoYXIgKnAsIHNpemVfdCBsZW4sXG4mIzQzO1x0XHRpbnQgbnJfaHBhZ2VzLCBpbnQgY29sbGFwX29yZGVyLCBzdHJ1Y3QgbWVtX29wcyAqb3BzKVxuIHtcbiYjNDM7XHR1bnNpZ25lZCBsb25nIGhwYWdlX3NpemUgPSBwYWdlX3NpemUgXHUwMDNjXHUwMDNjIGNvbGxhcF9vcmRlcjtcbiBcdGludCBmdWxsX3NjYW5zO1xuIFx0aW50IHRpbWVvdXQgPSA2OyAvKiAzIHNlY29uZHMgKi9cbiBcbiBcdC8qIFNhbml0eSBjaGVjayAqL1xuLVx0aWYgKCFvcHMtXHUwMDNlY2hlY2tfaHVnZShwLCAwKSlcbiYjNDM7XHRpZiAoIW9wcy1cdTAwM2VjaGVja19odWdlKHAsIGxlbiwgMCwgaHBhZ2Vfc2l6ZSkpXG4gXHRcdGtzZnRfZXhpdF9mYWlsX21zZyhcJiMzNDtVbmV4cGVjdGVkIGh1Z2UgcGFnZVxcblwmIzM0Oyk7XG4gXG4tXHRtYWR2aXNlKHAsIG5yX2hwYWdlcyAqIGhwYWdlX3BtZF9zaXplLCBNQURWX0hVR0VQQUdFKTtcbiYjNDM7XHRtYWR2aXNlKHAsIGxlbiwgTUFEVl9IVUdFUEFHRSk7XG4gXG4gXHQvKiBXYWl0IHVudGlsIHRoZSBzZWNvbmQgZnVsbF9zY2FuIGNvbXBsZXRlZCAqL1xuIFx0ZnVsbF9zY2FucyA9IHRocF9yZWFkX251bShcJiMzNDtraHVnZXBhZ2VkL2Z1bGxfc2NhbnNcJiMzNDspICYjNDM7IDI7XG4gXG4gXHRrc2Z0X3ByaW50X21zZyhcJiMzNDslcy4uLlwmIzM0OywgbXNnKTtcbiBcdHdoaWxlICh0aW1lb3V0LS0pIHtcbi1cdFx0aWYgKG9wcy1cdTAwM2VjaGVja19odWdlKHAsIG5yX2hwYWdlcykpXG4mIzQzO1x0XHRpZiAob3BzLVx1MDAzZWNoZWNrX2h1Z2UocCwgbGVuLCBucl9ocGFnZXMsIGhwYWdlX3NpemUpKVxuIFx0XHRcdGJyZWFrO1xuIFx0XHRpZiAodGhwX3JlYWRfbnVtKFwmIzM0O2todWdlcGFnZWQvZnVsbF9zY2Fuc1wmIzM0OykgXHUwMDNlPSBmdWxsX3NjYW5zKVxuIFx0XHRcdGJyZWFrO1xuQEAgLTYwMSw2ICYjNDM7NjA4LDggQEAgc3RhdGljIGJvb2wgd2FpdF9mb3Jfc2Nhbihjb25zdCBjaGFyICptc2csIGNoYXIgKnAsIGludCBucl9ocGFnZXMsXG4gc3RhdGljIHZvaWQga2h1Z2VwYWdlZF9jb2xsYXBzZShjb25zdCBjaGFyICptc2csIGNoYXIgKnAsIGludCBucl9ocGFnZXMsXG4gXHRcdFx0XHRzdHJ1Y3QgbWVtX29wcyAqb3BzLCBib29sIGV4cGVjdClcbiB7XG4mIzQzO1x0c2l6ZV90IGxlbiA9IG5yX2hwYWdlcyAqIGhwYWdlX3BtZF9zaXplO1xuJiM0MztcbiBcdC8qXG4gXHQgKiByZWFkXHUwMDI2d3JpdGUgZmlsZSBjb2xsYXBzZSBmYWlscyBzaW5jZSBraHVnZXBhZ2VkIGRvZXMgbm90IGZsdXNoXG4gXHQgKiB0aGUgdGFyZ2V0IGRpcnR5IGZvbGlvc1xuQEAgLTYwOCw3ICYjNDM7NjE3LDcgQEAgc3RhdGljIHZvaWQga2h1Z2VwYWdlZF9jb2xsYXBzZShjb25zdCBjaGFyICptc2csIGNoYXIgKnAsIGludCBucl9ocGFnZXMsXG4gXHRpZiAoIWlzX3RtcGZzKG9wcykgXHUwMDI2XHUwMDI2IG9wcyA9PSBcdTAwMjZfX3JlYWRfd3JpdGVfZmlsZV93cml0ZV9vcHMpXG4gXHRcdGV4cGVjdCA9IGZhbHNlO1xuIFxuLVx0aWYgKHdhaXRfZm9yX3NjYW4obXNnLCBwLCBucl9ocGFnZXMsIG9wcykpIHtcbiYjNDM7XHRpZiAod2FpdF9mb3Jfc2Nhbihtc2csIHAsIGxlbiwgbnJfaHBhZ2VzLCBocGFnZV9wbWRfb3JkZXIsIG9wcykpIHtcbiBcdFx0aWYgKGV4cGVjdClcbiBcdFx0XHRmYWlsKFwmIzM0O1RpbWVvdXRcJiMzNDspO1xuIFx0XHRlbHNlXG5AQCAtNjI0LDEwICYjNDM7NjMzLDU0IEBAIHN0YXRpYyB2b2lkIGtodWdlcGFnZWRfY29sbGFwc2UoY29uc3QgY2hhciAqbXNnLCBjaGFyICpwLCBpbnQgbnJfaHBhZ2VzLFxuIFx0aWYgKG9wcyAhPSBcdTAwMjZfX2Fub25fb3BzKVxuIFx0XHRvcHMtXHUwMDNlZmF1bHQocCwgMCwgbnJfaHBhZ2VzICogaHBhZ2VfcG1kX3NpemUpO1xuIFxuLVx0aWYgKG9wcy1cdTAwM2VjaGVja19odWdlKHAsIGV4cGVjdCA/IG5yX2hwYWdlcyA6IDApKVxuJiM0MztcdGlmIChvcHMtXHUwMDNlY2hlY2tfaHVnZShwLCBsZW4sIGV4cGVjdCA/IG5yX2hwYWdlcyA6IDAsIGhwYWdlX3BtZF9zaXplKSlcbiYjNDM7XHRcdHN1Y2Nlc3MoXCYjMzQ7T0tcJiMzNDspO1xuJiM0MztcdGVsc2VcbiYjNDM7XHRcdGZhaWwoXCYjMzQ7RmFpbFwmIzM0Oyk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIG10aHBfa2h1Z2VwYWdlZF9jb2xsYXBzZShjb25zdCBjaGFyICptc2csIGNoYXIgKnAsIGludCBucl9ocGFnZXMsXG4mIzQzO1x0XHRcdFx0c3RydWN0IG1lbV9vcHMgKm9wcywgYm9vbCBleHBlY3QpXG4mIzQzO3tcbiYjNDM7XHR1bnNpZ25lZCBsb25nIGhwYWdlX3NpemUgPSBwYWdlX3NpemUgXHUwMDNjXHUwMDNjIGNvbGxhcHNlX29yZGVyO1xuJiM0MztcdHN0cnVjdCB0aHBfc2V0dGluZ3Mgc2V0dGluZ3MgPSAqdGhwX2N1cnJlbnRfc2V0dGluZ3MoKTtcbiYjNDM7XHQvKiBtVEhQIGNvbGxwYXNlIG9ubHkgYWxsb2NhdGVzIFBNRCBzaXplZCBtZW1vcnkgKi9cbiYjNDM7XHRzaXplX3QgbGVuID0gaHBhZ2VfcG1kX3NpemU7XG4mIzQzO1xuJiM0MztcdC8qIFNldCBtVEhQIHNldHRpbmcgZm9yIG1USFAgY29sbGFwc2UgKi9cbiYjNDM7XHRpZiAob3BzID09IFx1MDAyNl9fYW5vbl9vcHMpIHtcbiYjNDM7XHRcdHNldHRpbmdzLnRocF9lbmFibGVkID0gVEhQX05FVkVSO1xuJiM0MztcdFx0c2V0dGluZ3MuaHVnZXBhZ2VzW2NvbGxhcHNlX29yZGVyXS5lbmFibGVkID0gVEhQX01BRFZJU0U7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHR0aHBfcHVzaF9zZXR0aW5ncyhcdTAwMjZzZXR0aW5ncyk7XG4mIzQzO1xuJiM0MztcdGlmICh3YWl0X2Zvcl9zY2FuKG1zZywgcCwgbGVuLCBucl9ocGFnZXMsIGNvbGxhcHNlX29yZGVyLCBvcHMpKSB7XG4mIzQzO1x0XHRpZiAoZXhwZWN0KVxuJiM0MztcdFx0XHRmYWlsKFwmIzM0O1RpbWVvdXRcJiMzNDspO1xuJiM0MztcdFx0ZWxzZVxuJiM0MztcdFx0XHRzdWNjZXNzKFwmIzM0O09LXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO1x0XHQvKiBSZXN0b3JlIFRIUCBzZXR0aW5ncyBmb3IgbVRIUCBjb2xsYXBzZS4gKi9cbiYjNDM7XHRcdHRocF9wb3Bfc2V0dGluZ3MoKTtcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogRm9yIGZpbGUgYW5kIHNobWVtIG1lbW9yeSwga2h1Z2VwYWdlZCBvbmx5IHJldHJhY3RzIHB0ZSBlbnRyaWVzIGFmdGVyXG4mIzQzO1x0ICogcHV0dGluZyB0aGUgbmV3IGh1Z2VwYWdlIGluIHRoZSBwYWdlIGNhY2hlLiBUaGUgaHVnZXBhZ2UgbXVzdCBiZVxuJiM0MztcdCAqIHN1YnNlcXVlbnRseSByZWZhdWx0ZWQgdG8gaW5zdGFsbCB0aGUgcG1kIG1hcHBpbmcgZm9yIHRoZSBtbS5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAob3BzICE9IFx1MDAyNl9fYW5vbl9vcHMpXG4mIzQzO1x0XHRvcHMtXHUwMDNlZmF1bHQocCwgMCwgbnJfaHBhZ2VzICogaHBhZ2Vfc2l6ZSk7XG4mIzQzO1xuJiM0MztcdGlmIChvcHMtXHUwMDNlY2hlY2tfaHVnZShwLCBsZW4sIGV4cGVjdCA/IG5yX2hwYWdlcyA6IDAsIGhwYWdlX3NpemUpKVxuIFx0XHRzdWNjZXNzKFwmIzM0O09LXCYjMzQ7KTtcbiBcdGVsc2VcbiBcdFx0ZmFpbChcJiMzNDtGYWlsXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO1x0LyogUmVzdG9yZSBUSFAgc2V0dGluZ3MgZm9yIG1USFAgY29sbGFwc2UuICovXG4mIzQzO1x0dGhwX3BvcF9zZXR0aW5ncygpO1xuIH1cbiBcbiBzdGF0aWMgc3RydWN0IGNvbGxhcHNlX2NvbnRleHQgX19raHVnZXBhZ2VkX2NvbnRleHQgPSB7XG5AQCAtNjM2LDYgJiM0Mzs2ODksMTIgQEAgc3RhdGljIHN0cnVjdCBjb2xsYXBzZV9jb250ZXh0IF9fa2h1Z2VwYWdlZF9jb250ZXh0ID0ge1xuIFx0Lm5hbWUgPSBcJiMzNDtraHVnZXBhZ2VkXCYjMzQ7LFxuIH07XG4gXG4mIzQzO3N0YXRpYyBzdHJ1Y3QgY29sbGFwc2VfY29udGV4dCBfX210aHBfa2h1Z2VwYWdlZF9jb250ZXh0ID0ge1xuJiM0MztcdC5jb2xsYXBzZSA9IFx1MDAyNm10aHBfa2h1Z2VwYWdlZF9jb2xsYXBzZSxcbiYjNDM7XHQuZW5mb3JjZV9wdGVfc2Nhbl9saW1pdHMgPSB0cnVlLFxuJiM0MztcdC5uYW1lID0gXCYjMzQ7bXRocF9raHVnZXBhZ2VkXCYjMzQ7LFxuJiM0Mzt9O1xuJiM0MztcbiBzdGF0aWMgc3RydWN0IGNvbGxhcHNlX2NvbnRleHQgX19tYWR2aXNlX2NvbnRleHQgPSB7XG4gXHQuY29sbGFwc2UgPSBcdTAwMjZtYWR2aXNlX2NvbGxhcHNlLFxuIFx0LmVuZm9yY2VfcHRlX3NjYW5fbGltaXRzID0gZmFsc2UsXG5AQCAtNjUzLDcgJiM0Mzs3MTIsNyBAQCBzdGF0aWMgdm9pZCBhbGxvY19hdF9mYXVsdCh2b2lkKVxuIFx0cCA9IGFsbG9jX21hcHBpbmcoMSk7XG4gXHQqcCA9IDE7XG4gXHRrc2Z0X3ByaW50X21zZyhcJiMzNDtBbGxvY2F0ZSBodWdlIHBhZ2Ugb24gZmF1bHQuLi5cJiMzNDspO1xuLVx0aWYgKGNoZWNrX2h1Z2VfYW5vbihwLCAxLCBocGFnZV9wbWRfc2l6ZSkpXG4mIzQzO1x0aWYgKGNoZWNrX2h1Z2VfYW5vbihwLCBocGFnZV9wbWRfc2l6ZSwgMSwgaHBhZ2VfcG1kX3NpemUpKVxuIFx0XHRzdWNjZXNzKFwmIzM0O09LXCYjMzQ7KTtcbiBcdGVsc2VcbiBcdFx0ZmFpbChcJiMzNDtGYWlsXCYjMzQ7KTtcbkBAIC02NjIsNyAmIzQzOzcyMSw3IEBAIHN0YXRpYyB2b2lkIGFsbG9jX2F0X2ZhdWx0KHZvaWQpXG4gXG4gXHRtYWR2aXNlKHAsIHBhZ2Vfc2l6ZSwgTUFEVl9ET05UTkVFRCk7XG4gXHRrc2Z0X3ByaW50X21zZyhcJiMzNDtTcGxpdCBodWdlIFBNRCBvbiBNQURWX0RPTlRORUVELi4uXCYjMzQ7KTtcbi1cdGlmIChjaGVja19odWdlX2Fub24ocCwgMCwgaHBhZ2VfcG1kX3NpemUpKVxuJiM0MztcdGlmIChjaGVja19odWdlX2Fub24ocCwgaHBhZ2VfcG1kX3NpemUsIDAsIGhwYWdlX3BtZF9zaXplKSlcbiBcdFx0c3VjY2VzcyhcJiMzNDtPS1wmIzM0Oyk7XG4gXHRlbHNlXG4gXHRcdGZhaWwoXCYjMzQ7RmFpbFwmIzM0Oyk7XG5AQCAtNjc0LDEwICYjNDM7NzMzLDE3IEBAIHN0YXRpYyB2b2lkIGFsbG9jX2F0X2ZhdWx0KHZvaWQpXG4gc3RhdGljIHZvaWQgY29sbGFwc2VfZnVsbChzdHJ1Y3QgY29sbGFwc2VfY29udGV4dCAqYywgc3RydWN0IG1lbV9vcHMgKm9wcylcbiB7XG4gXHR2b2lkICpwO1xuLVx0aW50IG5yX2hwYWdlcyA9IDQ7XG4mIzQzO1x0aW50IG5yX3BtZHMgPSA0LCBucl9ocGFnZXMgPSA0O1xuIFx0dW5zaWduZWQgbG9uZyBzaXplID0gbnJfaHBhZ2VzICogaHBhZ2VfcG1kX3NpemU7XG4gXG4tXHRwID0gb3BzLVx1MDAzZXNldHVwX2FyZWEobnJfaHBhZ2VzKTtcbiYjNDM7XHQvKiBPbmx5IHRyeSAxIFBNRCBzaXplZCByYW5nZSBmb3IgbVRIUCBjb2xsYXBzZS4gKi9cbiYjNDM7XHRpZiAoYyA9PSBcdTAwMjZfX210aHBfa2h1Z2VwYWdlZF9jb250ZXh0KSB7XG4mIzQzO1x0XHRucl9wbWRzID0gMTtcbiYjNDM7XHRcdG5yX2hwYWdlcyA9IDEgXHUwMDNjXHUwMDNjIChocGFnZV9wbWRfb3JkZXIgLSBjb2xsYXBzZV9vcmRlcik7XG4mIzQzO1x0XHRzaXplID0gaHBhZ2VfcG1kX3NpemU7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRwID0gb3BzLVx1MDAzZXNldHVwX2FyZWEobnJfcG1kcyk7XG4gXHRvcHMtXHUwMDNlZmF1bHQocCwgMCwgc2l6ZSk7XG4gXHRjLVx1MDAzZWNvbGxhcHNlKFwmIzM0O0NvbGxhcHNlIG11bHRpcGxlIGZ1bGx5IHBvcHVsYXRlZCBQVEUgdGFibGVcJiMzNDssIHAsIG5yX2hwYWdlcyxcbiBcdFx0ICAgIG9wcywgdHJ1ZSk7XG5AQCAtNjg5LDEwICYjNDM7NzU1LDMxIEBAIHN0YXRpYyB2b2lkIGNvbGxhcHNlX2Z1bGwoc3RydWN0IGNvbGxhcHNlX2NvbnRleHQgKmMsIHN0cnVjdCBtZW1fb3BzICpvcHMpXG4gXG4gc3RhdGljIHZvaWQgY29sbGFwc2VfZW1wdHkoc3RydWN0IGNvbGxhcHNlX2NvbnRleHQgKmMsIHN0cnVjdCBtZW1fb3BzICpvcHMpXG4ge1xuJiM0MztcdGludCBucl9ocGFnZXMgPSAxO1xuJiM0MztcdHZvaWQgKnA7XG4mIzQzO1xuJiM0MztcdGlmIChjID09IFx1MDAyNl9fbXRocF9raHVnZXBhZ2VkX2NvbnRleHQpXG4mIzQzO1x0XHRucl9ocGFnZXMgPSAxIFx1MDAzY1x1MDAzYyAoaHBhZ2VfcG1kX29yZGVyIC0gY29sbGFwc2Vfb3JkZXIpO1xuJiM0MztcbiYjNDM7XHRwID0gb3BzLVx1MDAzZXNldHVwX2FyZWEoMSk7XG4mIzQzO1x0Yy1cdTAwM2Vjb2xsYXBzZShcJiMzNDtEbyBub3QgY29sbGFwc2UgZW1wdHkgUFRFIHRhYmxlXCYjMzQ7LCBwLCBucl9ocGFnZXMsIG9wcywgZmFsc2UpO1xuJiM0MztcdG9wcy1cdTAwM2VjbGVhbnVwX2FyZWEocCwgaHBhZ2VfcG1kX3NpemUpO1xuJiM0MztcdGtzZnRfdGVzdF9yZXN1bHRfcmVwb3J0KGV4aXRfc3RhdHVzLCBcJiMzNDslc1xcblwmIzM0OywgX19mdW5jX18pO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBjb2xsYXBzZV9zaW5nbGVfbXRocChzdHJ1Y3QgY29sbGFwc2VfY29udGV4dCAqYywgc3RydWN0IG1lbV9vcHMgKm9wcylcbiYjNDM7e1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgaHBhZ2Vfc2l6ZSA9IHBhZ2Vfc2l6ZSBcdTAwM2NcdTAwM2MgY29sbGFwc2Vfb3JkZXI7XG4gXHR2b2lkICpwO1xuIFxuIFx0cCA9IG9wcy1cdTAwM2VzZXR1cF9hcmVhKDEpO1xuLVx0Yy1cdTAwM2Vjb2xsYXBzZShcJiMzNDtEbyBub3QgY29sbGFwc2UgZW1wdHkgUFRFIHRhYmxlXCYjMzQ7LCBwLCAxLCBvcHMsIGZhbHNlKTtcbiYjNDM7XHQvKlxuJiM0MztcdCAqIE9ubHkgZmF1bHQgY29sbGFwc2Vfb3JkZXIgc2l6ZWQgcmFuZ2VzLCBhbmQgb25seSBjaGVjayAxXG4mIzQzO1x0ICogY29sbGFwc2Vfb3JkZXIgc2l6ZWQgaHVnZSBwYWdlLlxuJiM0MztcdCAqL1xuJiM0MztcdG9wcy1cdTAwM2VmYXVsdChwLCAwLCBocGFnZV9zaXplKTtcbiYjNDM7XHRjLVx1MDAzZWNvbGxhcHNlKFwmIzM0O0NvbGxhcHNlIFBURSB0YWJsZSB3aXRoIGhhbGYgUFRFIGVudHJpZXMgcHJlc2VudFwmIzM0OyxcbiYjNDM7XHRcdHAsIDEsIG9wcywgdHJ1ZSk7XG4gXHRvcHMtXHUwMDNlY2xlYW51cF9hcmVhKHAsIGhwYWdlX3BtZF9zaXplKTtcbiBcdGtzZnRfdGVzdF9yZXN1bHRfcmVwb3J0KGV4aXRfc3RhdHVzLCBcJiMzNDslc1xcblwmIzM0OywgX19mdW5jX18pO1xuIH1cbkBAIC04NDgsNyAmIzQzOzkzNSw3IEBAIHN0YXRpYyB2b2lkIGNvbGxhcHNlX3NpbmdsZV9wdGVfZW50cnlfY29tcG91bmQoc3RydWN0IGNvbGxhcHNlX2NvbnRleHQgKmMsIHN0cnVjXG4gXHRtYWR2aXNlKHAsIGhwYWdlX3BtZF9zaXplLCBNQURWX05PSFVHRVBBR0UpO1xuIFx0a3NmdF9wcmludF9tc2coXCYjMzQ7U3BsaXQgaHVnZSBwYWdlIGxlYXZpbmcgc2luZ2xlIFBURSBtYXBwaW5nIGNvbXBvdW5kIHBhZ2UuLi5cJiMzNDspO1xuIFx0bWFkdmlzZShwICYjNDM7IHBhZ2Vfc2l6ZSwgaHBhZ2VfcG1kX3NpemUgLSBwYWdlX3NpemUsIE1BRFZfRE9OVE5FRUQpO1xuLVx0aWYgKG9wcy1cdTAwM2VjaGVja19odWdlKHAsIDApKVxuJiM0MztcdGlmIChvcHMtXHUwMDNlY2hlY2tfaHVnZShwLCBocGFnZV9wbWRfc2l6ZSwgMCwgaHBhZ2VfcG1kX3NpemUpKVxuIFx0XHRzdWNjZXNzKFwmIzM0O09LXCYjMzQ7KTtcbiBcdGVsc2VcbiBcdFx0ZmFpbChcJiMzNDtGYWlsXCYjMzQ7KTtcbkBAIC04NjksNyAmIzQzOzk1Niw3IEBAIHN0YXRpYyB2b2lkIGNvbGxhcHNlX2Z1bGxfb2ZfY29tcG91bmQoc3RydWN0IGNvbGxhcHNlX2NvbnRleHQgKmMsIHN0cnVjdCBtZW1fb3BzXG4gXHRrc2Z0X3ByaW50X21zZyhcJiMzNDtTcGxpdCBodWdlIHBhZ2UgbGVhdmluZyBzaW5nbGUgUFRFIHBhZ2UgdGFibGUgZnVsbCBvZiBjb21wb3VuZCBwYWdlcy4uLlwmIzM0Oyk7XG4gXHRtYWR2aXNlKHAsIHBhZ2Vfc2l6ZSwgTUFEVl9OT0hVR0VQQUdFKTtcbiBcdG1hZHZpc2UocCwgaHBhZ2VfcG1kX3NpemUsIE1BRFZfTk9IVUdFUEFHRSk7XG4tXHRpZiAob3BzLVx1MDAzZWNoZWNrX2h1Z2UocCwgMCkpXG4mIzQzO1x0aWYgKG9wcy1cdTAwM2VjaGVja19odWdlKHAsIGhwYWdlX3BtZF9zaXplLCAwLCBocGFnZV9wbWRfc2l6ZSkpXG4gXHRcdHN1Y2Nlc3MoXCYjMzQ7T0tcJiMzNDspO1xuIFx0ZWxzZVxuIFx0XHRmYWlsKFwmIzM0O0ZhaWxcJiMzNDspO1xuQEAgLTg5MSw3ICYjNDM7OTc4LDcgQEAgc3RhdGljIHZvaWQgY29sbGFwc2VfY29tcG91bmRfZXh0cmVtZShzdHJ1Y3QgY29sbGFwc2VfY29udGV4dCAqYywgc3RydWN0IG1lbV9vcHNcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGhwYWdlX3BtZF9ucjsgaSYjNDM7JiM0MzspIHtcbiBcdFx0bWFkdmlzZShCQVNFX0FERFIsIGhwYWdlX3BtZF9zaXplLCBNQURWX0hVR0VQQUdFKTtcbiBcdFx0b3BzLVx1MDAzZWZhdWx0KEJBU0VfQUREUiwgMCwgaHBhZ2VfcG1kX3NpemUpO1xuLVx0XHRpZiAoIW9wcy1cdTAwM2VjaGVja19odWdlKEJBU0VfQUREUiwgMSkpXG4mIzQzO1x0XHRpZiAoIW9wcy1cdTAwM2VjaGVja19odWdlKEJBU0VfQUREUiwgaHBhZ2VfcG1kX3NpemUsIDEsIGhwYWdlX3BtZF9zaXplKSlcbiBcdFx0XHRrc2Z0X2V4aXRfZmFpbF9tc2coXCYjMzQ7RmFpbGVkIHRvIGFsbG9jYXRlIGh1Z2UgcGFnZVxcblwmIzM0Oyk7XG4gXHRcdG1hZHZpc2UoQkFTRV9BRERSLCBocGFnZV9wbWRfc2l6ZSwgTUFEVl9OT0hVR0VQQUdFKTtcbiBcbkBAIC05MTQsNyAmIzQzOzEwMDEsNyBAQCBzdGF0aWMgdm9pZCBjb2xsYXBzZV9jb21wb3VuZF9leHRyZW1lKHN0cnVjdCBjb2xsYXBzZV9jb250ZXh0ICpjLCBzdHJ1Y3QgbWVtX29wc1xuIFxuIFx0b3BzLVx1MDAzZWNsZWFudXBfYXJlYShCQVNFX0FERFIsIGhwYWdlX3BtZF9zaXplKTtcbiBcdG9wcy1cdTAwM2VmYXVsdChwLCAwLCBocGFnZV9wbWRfc2l6ZSk7XG4tXHRpZiAoIW9wcy1cdTAwM2VjaGVja19odWdlKHAsIDEpKVxuJiM0MztcdGlmICghb3BzLVx1MDAzZWNoZWNrX2h1Z2UocCwgaHBhZ2VfcG1kX3NpemUsIDEsIGhwYWdlX3BtZF9zaXplKSlcbiBcdFx0c3VjY2VzcyhcJiMzNDtPS1wmIzM0Oyk7XG4gXHRlbHNlXG4gXHRcdGZhaWwoXCYjMzQ7RmFpbFwmIzM0Oyk7XG5AQCAtOTM2LDcgJiM0MzsxMDIzLDcgQEAgc3RhdGljIHZvaWQgY29sbGFwc2VfZm9yayhzdHJ1Y3QgY29sbGFwc2VfY29udGV4dCAqYywgc3RydWN0IG1lbV9vcHMgKm9wcylcbiBcbiBcdGtzZnRfcHJpbnRfbXNnKFwmIzM0O0FsbG9jYXRlIHNtYWxsIHBhZ2UuLi5cJiMzNDspO1xuIFx0b3BzLVx1MDAzZWZhdWx0KHAsIDAsIHBhZ2Vfc2l6ZSk7XG4tXHRpZiAob3BzLVx1MDAzZWNoZWNrX2h1Z2UocCwgMCkpXG4mIzQzO1x0aWYgKG9wcy1cdTAwM2VjaGVja19odWdlKHAsIGhwYWdlX3BtZF9zaXplLCAwLCBocGFnZV9wbWRfc2l6ZSkpXG4gXHRcdHN1Y2Nlc3MoXCYjMzQ7T0tcJiMzNDspO1xuIFx0ZWxzZVxuIFx0XHRmYWlsKFwmIzM0O0ZhaWxcJiMzNDspO1xuQEAgLTk0NCw3ICYjNDM7MTAzMSw3IEBAIHN0YXRpYyB2b2lkIGNvbGxhcHNlX2Zvcmsoc3RydWN0IGNvbGxhcHNlX2NvbnRleHQgKmMsIHN0cnVjdCBtZW1fb3BzICpvcHMpXG4gXHRrc2Z0X3ByaW50X21zZyhcJiMzNDtTaGFyZSBzbWFsbCBwYWdlIG92ZXIgZm9yaygpLi4uXCYjMzQ7KTtcbiBcdGlmICghZm9yaygpKSB7XG4gXHRcdC8qIERvIG5vdCB0b3VjaCBzZXR0aW5ncyBvbiBjaGlsZCBleGl0ICovXG4tXHRcdGlmIChvcHMtXHUwMDNlY2hlY2tfaHVnZShwLCAwKSlcbiYjNDM7XHRcdGlmIChvcHMtXHUwMDNlY2hlY2tfaHVnZShwLCBocGFnZV9wbWRfc2l6ZSwgMCwgaHBhZ2VfcG1kX3NpemUpKVxuIFx0XHRcdHN1Y2Nlc3MoXCYjMzQ7T0tcJiMzNDspO1xuIFx0XHRlbHNlXG4gXHRcdFx0ZmFpbChcJiMzNDtGYWlsXCYjMzQ7KTtcbkBAIC05NjIsNyAmIzQzOzEwNDksNyBAQCBzdGF0aWMgdm9pZCBjb2xsYXBzZV9mb3JrKHN0cnVjdCBjb2xsYXBzZV9jb250ZXh0ICpjLCBzdHJ1Y3QgbWVtX29wcyAqb3BzKVxuIFx0ZXhpdF9zdGF0dXMgPSBXRVhJVFNUQVRVUyh3c3RhdHVzKTtcbiBcbiBcdGtzZnRfcHJpbnRfbXNnKFwmIzM0O0NoZWNrIGlmIHBhcmVudCBzdGlsbCBoYXMgc21hbGwgcGFnZS4uLlwmIzM0Oyk7XG4tXHRpZiAob3BzLVx1MDAzZWNoZWNrX2h1Z2UocCwgMCkpXG4mIzQzO1x0aWYgKG9wcy1cdTAwM2VjaGVja19odWdlKHAsIGhwYWdlX3BtZF9zaXplLCAwLCBocGFnZV9wbWRfc2l6ZSkpXG4gXHRcdHN1Y2Nlc3MoXCYjMzQ7T0tcJiMzNDspO1xuIFx0ZWxzZVxuIFx0XHRmYWlsKFwmIzM0O0ZhaWxcJiMzNDspO1xuQEAgLTk4MCw3ICYjNDM7MTA2Nyw3IEBAIHN0YXRpYyB2b2lkIGNvbGxhcHNlX2ZvcmtfY29tcG91bmQoc3RydWN0IGNvbGxhcHNlX2NvbnRleHQgKmMsIHN0cnVjdCBtZW1fb3BzICpvXG4gXHRrc2Z0X3ByaW50X21zZyhcJiMzNDtTaGFyZSBodWdlIHBhZ2Ugb3ZlciBmb3JrKCkuLi5cJiMzNDspO1xuIFx0aWYgKCFmb3JrKCkpIHtcbiBcdFx0LyogRG8gbm90IHRvdWNoIHNldHRpbmdzIG9uIGNoaWxkIGV4aXQgKi9cbi1cdFx0aWYgKG9wcy1cdTAwM2VjaGVja19odWdlKHAsIDEpKVxuJiM0MztcdFx0aWYgKG9wcy1cdTAwM2VjaGVja19odWdlKHAsIGhwYWdlX3BtZF9zaXplLCAxLCBocGFnZV9wbWRfc2l6ZSkpXG4gXHRcdFx0c3VjY2VzcyhcJiMzNDtPS1wmIzM0Oyk7XG4gXHRcdGVsc2VcbiBcdFx0XHRmYWlsKFwmIzM0O0ZhaWxcJiMzNDspO1xuQEAgLTk4OCw3ICYjNDM7MTA3NSw3IEBAIHN0YXRpYyB2b2lkIGNvbGxhcHNlX2ZvcmtfY29tcG91bmQoc3RydWN0IGNvbGxhcHNlX2NvbnRleHQgKmMsIHN0cnVjdCBtZW1fb3BzICpvXG4gXHRcdGtzZnRfcHJpbnRfbXNnKFwmIzM0O1NwbGl0IGh1Z2UgcGFnZSBQTUQgaW4gY2hpbGQgcHJvY2Vzcy4uLlwmIzM0Oyk7XG4gXHRcdG1hZHZpc2UocCwgcGFnZV9zaXplLCBNQURWX05PSFVHRVBBR0UpO1xuIFx0XHRtYWR2aXNlKHAsIGhwYWdlX3BtZF9zaXplLCBNQURWX05PSFVHRVBBR0UpO1xuLVx0XHRpZiAob3BzLVx1MDAzZWNoZWNrX2h1Z2UocCwgMCkpXG4mIzQzO1x0XHRpZiAob3BzLVx1MDAzZWNoZWNrX2h1Z2UocCwgaHBhZ2VfcG1kX3NpemUsIDAsIGhwYWdlX3BtZF9zaXplKSlcbiBcdFx0XHRzdWNjZXNzKFwmIzM0O09LXCYjMzQ7KTtcbiBcdFx0ZWxzZVxuIFx0XHRcdGZhaWwoXCYjMzQ7RmFpbFwmIzM0Oyk7XG5AQCAtMTAwOSw3ICYjNDM7MTA5Niw3IEBAIHN0YXRpYyB2b2lkIGNvbGxhcHNlX2ZvcmtfY29tcG91bmQoc3RydWN0IGNvbGxhcHNlX2NvbnRleHQgKmMsIHN0cnVjdCBtZW1fb3BzICpvXG4gXHRleGl0X3N0YXR1cyA9IFdFWElUU1RBVFVTKHdzdGF0dXMpO1xuIFxuIFx0a3NmdF9wcmludF9tc2coXCYjMzQ7Q2hlY2sgaWYgcGFyZW50IHN0aWxsIGhhcyBodWdlIHBhZ2UuLi5cJiMzNDspO1xuLVx0aWYgKG9wcy1cdTAwM2VjaGVja19odWdlKHAsIDEpKVxuJiM0MztcdGlmIChvcHMtXHUwMDNlY2hlY2tfaHVnZShwLCBocGFnZV9wbWRfc2l6ZSwgMSwgaHBhZ2VfcG1kX3NpemUpKVxuIFx0XHRzdWNjZXNzKFwmIzM0O09LXCYjMzQ7KTtcbiBcdGVsc2VcbiBcdFx0ZmFpbChcJiMzNDtGYWlsXCYjMzQ7KTtcbkBAIC0xMDI4LDcgJiM0MzsxMTE1LDcgQEAgc3RhdGljIHZvaWQgY29sbGFwc2VfbWF4X3B0ZXNfc2hhcmVkKHN0cnVjdCBjb2xsYXBzZV9jb250ZXh0ICpjLCBzdHJ1Y3QgbWVtX29wc1xuIFx0a3NmdF9wcmludF9tc2coXCYjMzQ7U2hhcmUgaHVnZSBwYWdlIG92ZXIgZm9yaygpLi4uXCYjMzQ7KTtcbiBcdGlmICghZm9yaygpKSB7XG4gXHRcdC8qIERvIG5vdCB0b3VjaCBzZXR0aW5ncyBvbiBjaGlsZCBleGl0ICovXG4tXHRcdGlmIChvcHMtXHUwMDNlY2hlY2tfaHVnZShwLCAxKSlcbiYjNDM7XHRcdGlmIChvcHMtXHUwMDNlY2hlY2tfaHVnZShwLCBocGFnZV9wbWRfc2l6ZSwgMSwgaHBhZ2VfcG1kX3NpemUpKVxuIFx0XHRcdHN1Y2Nlc3MoXCYjMzQ7T0tcJiMzNDspO1xuIFx0XHRlbHNlXG4gXHRcdFx0ZmFpbChcJiMzNDtGYWlsXCYjMzQ7KTtcbkBAIC0xMDM2LDcgJiM0MzsxMTIzLDcgQEAgc3RhdGljIHZvaWQgY29sbGFwc2VfbWF4X3B0ZXNfc2hhcmVkKHN0cnVjdCBjb2xsYXBzZV9jb250ZXh0ICpjLCBzdHJ1Y3QgbWVtX29wc1xuIFx0XHRrc2Z0X3ByaW50X21zZyhcJiMzNDtUcmlnZ2VyIENvVyBvbiBwYWdlICVkIG9mICVkLi4uXCYjMzQ7LFxuIFx0XHRcdFx0aHBhZ2VfcG1kX25yIC0gbWF4X3B0ZXNfc2hhcmVkIC0gMSwgaHBhZ2VfcG1kX25yKTtcbiBcdFx0b3BzLVx1MDAzZWZhdWx0KHAsIDAsIChocGFnZV9wbWRfbnIgLSBtYXhfcHRlc19zaGFyZWQgLSAxKSAqIHBhZ2Vfc2l6ZSk7XG4tXHRcdGlmIChvcHMtXHUwMDNlY2hlY2tfaHVnZShwLCAwKSlcbiYjNDM7XHRcdGlmIChvcHMtXHUwMDNlY2hlY2tfaHVnZShwLCBocGFnZV9wbWRfc2l6ZSwgMCwgaHBhZ2VfcG1kX3NpemUpKVxuIFx0XHRcdHN1Y2Nlc3MoXCYjMzQ7T0tcJiMzNDspO1xuIFx0XHRlbHNlXG4gXHRcdFx0ZmFpbChcJiMzNDtGYWlsXCYjMzQ7KTtcbkBAIC0xMDQ5LDcgJiM0MzsxMTM2LDcgQEAgc3RhdGljIHZvaWQgY29sbGFwc2VfbWF4X3B0ZXNfc2hhcmVkKHN0cnVjdCBjb2xsYXBzZV9jb250ZXh0ICpjLCBzdHJ1Y3QgbWVtX29wc1xuIFx0XHRcdCAgICAgICBocGFnZV9wbWRfbnIgLSBtYXhfcHRlc19zaGFyZWQsIGhwYWdlX3BtZF9ucik7XG4gXHRcdFx0b3BzLVx1MDAzZWZhdWx0KHAsIDAsIChocGFnZV9wbWRfbnIgLSBtYXhfcHRlc19zaGFyZWQpICpcbiBcdFx0XHRcdCAgICBwYWdlX3NpemUpO1xuLVx0XHRcdGlmIChvcHMtXHUwMDNlY2hlY2tfaHVnZShwLCAwKSlcbiYjNDM7XHRcdFx0aWYgKG9wcy1cdTAwM2VjaGVja19odWdlKHAsIGhwYWdlX3BtZF9zaXplLCAwLCBocGFnZV9wbWRfc2l6ZSkpXG4gXHRcdFx0XHRzdWNjZXNzKFwmIzM0O09LXCYjMzQ7KTtcbiBcdFx0XHRlbHNlXG4gXHRcdFx0XHRmYWlsKFwmIzM0O0ZhaWxcJiMzNDspO1xuQEAgLTEwNjcsNyAmIzQzOzExNTQsNyBAQCBzdGF0aWMgdm9pZCBjb2xsYXBzZV9tYXhfcHRlc19zaGFyZWQoc3RydWN0IGNvbGxhcHNlX2NvbnRleHQgKmMsIHN0cnVjdCBtZW1fb3BzXG4gXHRleGl0X3N0YXR1cyA9IFdFWElUU1RBVFVTKHdzdGF0dXMpO1xuIFxuIFx0a3NmdF9wcmludF9tc2coXCYjMzQ7Q2hlY2sgaWYgcGFyZW50IHN0aWxsIGhhcyBodWdlIHBhZ2UuLi5cJiMzNDspO1xuLVx0aWYgKG9wcy1cdTAwM2VjaGVja19odWdlKHAsIDEpKVxuJiM0MztcdGlmIChvcHMtXHUwMDNlY2hlY2tfaHVnZShwLCBocGFnZV9wbWRfc2l6ZSwgMSwgaHBhZ2VfcG1kX3NpemUpKVxuIFx0XHRzdWNjZXNzKFwmIzM0O09LXCYjMzQ7KTtcbiBcdGVsc2VcbiBcdFx0ZmFpbChcJiMzNDtGYWlsXCYjMzQ7KTtcbkBAIC0xMTA4LDggJiM0MzsxMTk1LDggQEAgc3RhdGljIHZvaWQgbWFkdmlzZV9yZXRyYWN0ZWRfcGFnZV90YWJsZXMoc3RydWN0IGNvbGxhcHNlX2NvbnRleHQgKmMsXG4gXHRvcHMtXHUwMDNlZmF1bHQocCwgMCwgc2l6ZSk7XG4gXG4gXHQvKiBMZXQga2h1Z2VwYWdlZCBjb2xsYXBzZSBhbmQgbGVhdmUgcG1kIGNsZWFyZWQgKi9cbi1cdGlmICh3YWl0X2Zvcl9zY2FuKFwmIzM0O0NvbGxhcHNlIGFuZCBsZWF2ZSBQTUQgY2xlYXJlZFwmIzM0OywgcCwgbnJfaHBhZ2VzLFxuLVx0XHRcdCAgb3BzKSkge1xuJiM0MztcdGlmICh3YWl0X2Zvcl9zY2FuKFwmIzM0O0NvbGxhcHNlIGFuZCBsZWF2ZSBQTUQgY2xlYXJlZFwmIzM0OywgcCwgc2l6ZSwgbnJfaHBhZ2VzLFxuJiM0MztcdFx0XHQgIGhwYWdlX3BtZF9vcmRlciwgb3BzKSkge1xuIFx0XHRmYWlsKFwmIzM0O1RpbWVvdXRcJiMzNDspO1xuIFx0XHRyZXR1cm47XG4gXHR9XG5AQCAtMTEyNSwxNyAmIzQzOzEyMTIsMTkgQEAgc3RhdGljIHZvaWQgdXNhZ2Uodm9pZClcbiB7XG4gXHRmcHJpbnRmKHN0ZGVyciwgXCYjMzQ7XFxuVXNhZ2U6IC4va2h1Z2VwYWdlZCBbT1BUSU9OU10gXHUwMDNjdGVzdCB0eXBlXHUwMDNlIFtkaXJdXFxuXFxuXCYjMzQ7KTtcbiBcdGZwcmludGYoc3RkZXJyLCBcJiMzNDtcXHRcdTAwM2N0ZXN0IHR5cGVcdTAwM2VcXHQ6IFx1MDAzY2NvbnRleHRcdTAwM2U6XHUwMDNjbWVtX3R5cGVcdTAwM2VcXG5cJiMzNDspO1xuLVx0ZnByaW50ZihzdGRlcnIsIFwmIzM0O1xcdFx1MDAzY2NvbnRleHRcdTAwM2VcXHQ6IFthbGx8a2h1Z2VwYWdlZHxtYWR2aXNlXVxcblwmIzM0Oyk7XG4mIzQzO1x0ZnByaW50ZihzdGRlcnIsIFwmIzM0O1xcdFx1MDAzY2NvbnRleHRcdTAwM2VcXHQ6IFthbGx8a2h1Z2VwYWdlZHxtdGhwX2todWdlcGFnZWR8bWFkdmlzZV1cXG5cJiMzNDspO1xuIFx0ZnByaW50ZihzdGRlcnIsIFwmIzM0O1xcdFx1MDAzY21lbV90eXBlXHUwMDNlXFx0OiBbYWxsfGFub258ZmlsZXxzaG1lbV1cXG5cJiMzNDspO1xuIFx0ZnByaW50ZihzdGRlcnIsIFwmIzM0O1xcblxcdFxcXCYjMzQ7ZmlsZSxhbGxcXFwmIzM0OyBtZW1fdHlwZSByZXF1aXJlcyBbZGlyXSBhcmd1bWVudFxcblwmIzM0Oyk7XG4gXHRmcHJpbnRmKHN0ZGVyciwgXCYjMzQ7XFxuXFx0XFxcJiMzNDtmaWxlLGFsbFxcXCYjMzQ7IG1lbV90eXBlIHJlcXVpcmVzIGEgZmlsZSBzeXN0ZW1cXG5cJiMzNDspO1xuIFx0ZnByaW50ZihzdGRlcnIsXHRcJiMzNDtcXHR3aXRoIFBNRC1zaXplZCBsYXJnZSBmb2xpbyBzdXBwb3J0XFxuXCYjMzQ7KTtcbiBcdGZwcmludGYoc3RkZXJyLCBcJiMzNDtcXG5cXHRpZiBbZGlyXSBpcyBhIChzdWIpZGlyZWN0b3J5IG9mIGEgdG1wZnMgbW91bnQsIHRtcGZzIG11c3QgYmVcXG5cJiMzNDspO1xuIFx0ZnByaW50ZihzdGRlcnIsXHRcJiMzNDtcXHRtb3VudGVkIHdpdGggaHVnZT1hZHZpc2Ugb3B0aW9uIGZvciBraHVnZXBhZ2VkIHRlc3RzIHRvIHdvcmtcXG5cJiMzNDspO1xuJiM0MztcdGZwcmludGYoc3RkZXJyLCBcJiMzNDtcXG5cXHRtdGhwX2todWdlcGFnZWQgb25seSBzdXBwb3J0cyBhbm9uIG1lbV90eXBlIG5vdy5cXG5cJiMzNDspO1xuIFx0ZnByaW50ZihzdGRlcnIsXHRcJiMzNDtcXG5cXHRTdXBwb3J0ZWQgT3B0aW9uczpcXG5cJiMzNDspO1xuIFx0ZnByaW50ZihzdGRlcnIsXHRcJiMzNDtcXHRcXHQtaDogVGhpcyBoZWxwIG1lc3NhZ2UuXFxuXCYjMzQ7KTtcbiBcdGZwcmludGYoc3RkZXJyLFx0XCYjMzQ7XFx0XFx0LXM6IG1USFAgc2l6ZSwgZXhwcmVzc2VkIGFzIHBhZ2Ugb3JkZXIuXFxuXCYjMzQ7KTtcbiBcdGZwcmludGYoc3RkZXJyLFx0XCYjMzQ7XFx0XFx0ICAgIERlZmF1bHRzIHRvIDAuIFVzZSB0aGlzIHNpemUgZm9yIGFub24gb3Igc2htZW0gYWxsb2NhdGlvbnMuXFxuXCYjMzQ7KTtcbiYjNDM7XHRmcHJpbnRmKHN0ZGVycixcdFwmIzM0O1xcdFxcdC1jOiBjb2xsYXBzZSBvcmRlciBmb3IgbVRIUCBjb2xsYXBzZSwgZXhwcmVzc2VkIGFzIHBhZ2Ugb3JkZXIuXFxuXCYjMzQ7KTtcbiBcdGV4aXQoMSk7XG4gfVxuIFxuQEAgLTExNDUsMTEgJiM0MzsxMjM0LDE0IEBAIHN0YXRpYyB2b2lkIHBhcnNlX3Rlc3RfdHlwZShpbnQgYXJnYywgY2hhciAqKmFyZ3YpXG4gXHRjaGFyICpidWY7XG4gXHRjb25zdCBjaGFyICp0b2tlbjtcbiBcbi1cdHdoaWxlICgob3B0ID0gZ2V0b3B0KGFyZ2MsIGFyZ3YsIFwmIzM0O3M6aFwmIzM0OykpICE9IC0xKSB7XG4mIzQzO1x0d2hpbGUgKChvcHQgPSBnZXRvcHQoYXJnYywgYXJndiwgXCYjMzQ7czpjOmhcJiMzNDspKSAhPSAtMSkge1xuIFx0XHRzd2l0Y2ggKG9wdCkge1xuIFx0XHRjYXNlICYjMzk7cyYjMzk7OlxuIFx0XHRcdGFub25fb3JkZXIgPSBhdG9pKG9wdGFyZyk7XG4gXHRcdFx0YnJlYWs7XG4mIzQzO1x0XHRjYXNlICYjMzk7YyYjMzk7OlxuJiM0MztcdFx0XHRjb2xsYXBzZV9vcmRlciA9IGF0b2kob3B0YXJnKTtcbiYjNDM7XHRcdFx0YnJlYWs7XG4gXHRcdGNhc2UgJiMzOTtoJiMzOTs6XG4gXHRcdGRlZmF1bHQ6XG4gXHRcdFx0dXNhZ2UoKTtcbkBAIC0xMTc1LDYgJiM0MzsxMjY3LDEwIEBAIHN0YXRpYyB2b2lkIHBhcnNlX3Rlc3RfdHlwZShpbnQgYXJnYywgY2hhciAqKmFyZ3YpXG4gXHRcdG1hZHZpc2VfY29udGV4dCA9ICBcdTAwMjZfX21hZHZpc2VfY29udGV4dDtcbiBcdH0gZWxzZSBpZiAoIXN0cmNtcCh0b2tlbiwgXCYjMzQ7a2h1Z2VwYWdlZFwmIzM0OykpIHtcbiBcdFx0a2h1Z2VwYWdlZF9jb250ZXh0ID0gIFx1MDAyNl9fa2h1Z2VwYWdlZF9jb250ZXh0O1xuJiM0MztcdH0gZWxzZSBpZiAoIXN0cmNtcCh0b2tlbiwgXCYjMzQ7bXRocF9raHVnZXBhZ2VkXCYjMzQ7KSkge1xuJiM0MztcdFx0bXRocF9raHVnZXBhZ2VkX2NvbnRleHQgPSAgXHUwMDI2X19tdGhwX2todWdlcGFnZWRfY29udGV4dDtcbiYjNDM7XHRcdGlmIChjb2xsYXBzZV9vcmRlciBcdTAwM2M9IDAgfHwgY29sbGFwc2Vfb3JkZXIgXHUwMDNlPSBocGFnZV9wbWRfb3JkZXIpXG4mIzQzO1x0XHRcdHVzYWdlKCk7XG4gXHR9IGVsc2UgaWYgKCFzdHJjbXAodG9rZW4sIFwmIzM0O21hZHZpc2VcJiMzNDspKSB7XG4gXHRcdG1hZHZpc2VfY29udGV4dCA9ICBcdTAwMjZfX21hZHZpc2VfY29udGV4dDtcbiBcdH0gZWxzZSB7XG5AQCAtMTE5MCwxNCAmIzQzOzEyODYsMjAgQEAgc3RhdGljIHZvaWQgcGFyc2VfdGVzdF90eXBlKGludCBhcmdjLCBjaGFyICoqYXJndilcbiBcdFx0cmVhZF93cml0ZV9maWxlX3dyaXRlX29wcyA9ICBcdTAwMjZfX3JlYWRfd3JpdGVfZmlsZV93cml0ZV9vcHM7XG4gXHRcdGFub25fb3BzID0gXHUwMDI2X19hbm9uX29wcztcbiBcdFx0c2htZW1fb3BzID0gXHUwMDI2X19zaG1lbV9vcHM7XG4mIzQzO1x0XHRpZiAobXRocF9raHVnZXBhZ2VkX2NvbnRleHQpXG4mIzQzO1x0XHRcdHVzYWdlKCk7XG4gXHR9IGVsc2UgaWYgKCFzdHJjbXAoYnVmLCBcJiMzNDthbm9uXCYjMzQ7KSkge1xuIFx0XHRhbm9uX29wcyA9IFx1MDAyNl9fYW5vbl9vcHM7XG4gXHR9IGVsc2UgaWYgKCFzdHJjbXAoYnVmLCBcJiMzNDtmaWxlXCYjMzQ7KSkge1xuIFx0XHRyZWFkX29ubHlfZmlsZV9vcHMgPSAgXHUwMDI2X19yZWFkX29ubHlfZmlsZV9vcHM7XG4gXHRcdHJlYWRfd3JpdGVfZmlsZV9yZWFkX29wcyA9ICBcdTAwMjZfX3JlYWRfd3JpdGVfZmlsZV9yZWFkX29wcztcbiBcdFx0cmVhZF93cml0ZV9maWxlX3dyaXRlX29wcyA9ICBcdTAwMjZfX3JlYWRfd3JpdGVfZmlsZV93cml0ZV9vcHM7XG4mIzQzO1x0XHRpZiAobXRocF9raHVnZXBhZ2VkX2NvbnRleHQpXG4mIzQzO1x0XHRcdHVzYWdlKCk7XG4gXHR9IGVsc2UgaWYgKCFzdHJjbXAoYnVmLCBcJiMzNDtzaG1lbVwmIzM0OykpIHtcbiBcdFx0c2htZW1fb3BzID0gXHUwMDI2X19zaG1lbV9vcHM7XG4mIzQzO1x0XHRpZiAobXRocF9raHVnZXBhZ2VkX2NvbnRleHQpXG4mIzQzO1x0XHRcdHVzYWdlKCk7XG4gXHR9IGVsc2Uge1xuIFx0XHR1c2FnZSgpO1xuIFx0fVxuQEAgLTEyNDAsNyAmIzQzOzEzNDIsNiBAQCBzdGF0aWMgaW50IG5yX3Rlc3RfY2FzZXM7XG4gXG4gaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KVxuIHtcbi1cdGludCBocGFnZV9wbWRfb3JkZXI7XG4gXHRzdHJ1Y3QgdGhwX3NldHRpbmdzIGRlZmF1bHRfc2V0dGluZ3MgPSB7XG4gXHRcdC50aHBfZW5hYmxlZCA9IFRIUF9NQURWSVNFLFxuIFx0XHQudGhwX2RlZnJhZyA9IFRIUF9ERUZSQUdfQUxXQVlTLFxuQEAgLTEyNjYsMTAgJiM0MzsxMzY3LDYgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KVxuIFx0aWYgKCF0aHBfaXNfZW5hYmxlZCgpKVxuIFx0XHRrc2Z0X2V4aXRfc2tpcChcJiMzNDtUcmFuc3BhcmVudCBIdWdlcGFnZXMgbm90IGF2YWlsYWJsZVxcblwmIzM0Oyk7XG4gXG4tXHRwYXJzZV90ZXN0X3R5cGUoYXJnYywgYXJndik7XG4tXG4tXHRzZXRidWYoc3Rkb3V0LCBOVUxMKTtcbi1cbiBcdHBhZ2Vfc2l6ZSA9IGdldHBhZ2VzaXplKCk7XG4gXHRocGFnZV9wbWRfc2l6ZSA9IHJlYWRfcG1kX3BhZ2VzaXplKCk7XG4gXHRpZiAoIWhwYWdlX3BtZF9zaXplKVxuQEAgLTEyNzcsNiAmIzQzOzEzNzQsMTAgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KVxuIFx0aHBhZ2VfcG1kX25yID0gaHBhZ2VfcG1kX3NpemUgLyBwYWdlX3NpemU7XG4gXHRocGFnZV9wbWRfb3JkZXIgPSBfX2J1aWx0aW5fY3R6KGhwYWdlX3BtZF9ucik7XG4gXG4mIzQzO1x0cGFyc2VfdGVzdF90eXBlKGFyZ2MsIGFyZ3YpO1xuJiM0MztcbiYjNDM7XHRzZXRidWYoc3Rkb3V0LCBOVUxMKTtcbiYjNDM7XG4gXHRkZWZhdWx0X3NldHRpbmdzLmtodWdlcGFnZWQubWF4X3B0ZXNfbm9uZSA9IGhwYWdlX3BtZF9uciAtIDE7XG4gXHRkZWZhdWx0X3NldHRpbmdzLmtodWdlcGFnZWQubWF4X3B0ZXNfc3dhcCA9IGhwYWdlX3BtZF9uciAvIDg7XG4gXHRkZWZhdWx0X3NldHRpbmdzLmtodWdlcGFnZWQubWF4X3B0ZXNfc2hhcmVkID0gaHBhZ2VfcG1kX25yIC8gMjtcbkBAIC0xMjk0LDYgJiM0MzsxMzk1LDcgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KVxuIFx0VEVTVChjb2xsYXBzZV9mdWxsLCBraHVnZXBhZ2VkX2NvbnRleHQsIHJlYWRfd3JpdGVfZmlsZV9yZWFkX29wcyk7XG4gXHRURVNUKGNvbGxhcHNlX2Z1bGwsIGtodWdlcGFnZWRfY29udGV4dCwgcmVhZF93cml0ZV9maWxlX3dyaXRlX29wcyk7XG4gXHRURVNUKGNvbGxhcHNlX2Z1bGwsIGtodWdlcGFnZWRfY29udGV4dCwgc2htZW1fb3BzKTtcbiYjNDM7XHRURVNUKGNvbGxhcHNlX2Z1bGwsIG10aHBfa2h1Z2VwYWdlZF9jb250ZXh0LCBhbm9uX29wcyk7XG4gXHRURVNUKGNvbGxhcHNlX2Z1bGwsIG1hZHZpc2VfY29udGV4dCwgYW5vbl9vcHMpO1xuIFx0VEVTVChjb2xsYXBzZV9mdWxsLCBtYWR2aXNlX2NvbnRleHQsIHJlYWRfb25seV9maWxlX29wcyk7XG4gXHRURVNUKGNvbGxhcHNlX2Z1bGwsIG1hZHZpc2VfY29udGV4dCwgcmVhZF93cml0ZV9maWxlX3JlYWRfb3BzKTtcbkBAIC0xMzAxLDggJiM0MzsxNDAzLDExIEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndilcbiBcdFRFU1QoY29sbGFwc2VfZnVsbCwgbWFkdmlzZV9jb250ZXh0LCBzaG1lbV9vcHMpO1xuIFxuIFx0VEVTVChjb2xsYXBzZV9lbXB0eSwga2h1Z2VwYWdlZF9jb250ZXh0LCBhbm9uX29wcyk7XG4mIzQzO1x0VEVTVChjb2xsYXBzZV9lbXB0eSwgbXRocF9raHVnZXBhZ2VkX2NvbnRleHQsIGFub25fb3BzKTtcbiBcdFRFU1QoY29sbGFwc2VfZW1wdHksIG1hZHZpc2VfY29udGV4dCwgYW5vbl9vcHMpO1xuIFxuJiM0MztcdFRFU1QoY29sbGFwc2Vfc2luZ2xlX210aHAsIG10aHBfa2h1Z2VwYWdlZF9jb250ZXh0LCBhbm9uX29wcyk7XG4mIzQzO1xuIFx0VEVTVChjb2xsYXBzZV9zaW5nbGVfcHRlX2VudHJ5LCBraHVnZXBhZ2VkX2NvbnRleHQsIGFub25fb3BzKTtcbiBcdFRFU1QoY29sbGFwc2Vfc2luZ2xlX3B0ZV9lbnRyeSwga2h1Z2VwYWdlZF9jb250ZXh0LCByZWFkX29ubHlfZmlsZV9vcHMpO1xuIFx0VEVTVChjb2xsYXBzZV9zaW5nbGVfcHRlX2VudHJ5LCBraHVnZXBhZ2VkX2NvbnRleHQsIHJlYWRfd3JpdGVfZmlsZV9yZWFkX29wcyk7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGFnZW1hcF9pb2N0bC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGFnZW1hcF9pb2N0bC5jXG5pbmRleCAxYjJkZmZjYzk5OWIwLi5jZmQxOTg3MzM5YzEzIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGFnZW1hcF9pb2N0bC5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wYWdlbWFwX2lvY3RsLmNcbkBAIC0xMDg1LDcgJiM0MzsxMDg1LDcgQEAgc3RhdGljIHZvaWQgdW5wb3B1bGF0ZWRfd3JpdHRlbl90ZXN0KGNvbnN0IGNoYXIgKm5hbWUsIGNoYXIgKm1lbSwgbG9uZyBzaXplLFxuIFx0bWVtc2V0KG1lbSwgMSwgc2l6ZSk7XG4gXHRpZiAodXNlX3RocCBcdTAwMjZcdTAwMjZcbiBcdCAgICAobWFkdmlzZShtZW0sIHNpemUsIE1BRFZfQ09MTEFQU0UpIHx8XG4tXHQgICAgICFjaGVja19odWdlX2Fub24obWVtLCBzaXplIC8gaHBhZ2Vfc2l6ZSwgaHBhZ2Vfc2l6ZSkpKSB7XG4mIzQzO1x0ICAgICAhY2hlY2tfaHVnZV9hbm9uKG1lbSwgc2l6ZSwgc2l6ZSAvIGhwYWdlX3NpemUsIGhwYWdlX3NpemUpKSkge1xuIFx0XHRrc2Z0X3Rlc3RfcmVzdWx0X3NraXAoXCYjMzQ7JXMgY291bGQgbm90IGZvcm0gYSBUSFBcXG5cJiMzNDssIG5hbWUpO1xuIFx0XHRnb3RvIG91dDtcbiBcdH1cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wcmN0bF90aHBfZGlzYWJsZS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcHJjdGxfdGhwX2Rpc2FibGUuY1xuaW5kZXggZDhkOWQxZGU1N2I4Yi4uODJjNmU5NmVhNmViMyAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ByY3RsX3RocF9kaXNhYmxlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ByY3RsX3RocF9kaXNhYmxlLmNcbkBAIC02Nyw3ICYjNDM7NjcsNyBAQCBzdGF0aWMgaW50IHRlc3RfbW1hcF90aHAoZW51bSB0aHBfY29sbGFwc2VfdHlwZSBtYWR2aXNlX2J1Ziwgc2l6ZV90IHBtZHNpemUpXG4gXHQvKiBIQUNLOiBtYWtlIHN1cmUgd2UgaGF2ZSBhIHNlcGFyYXRlIFZNQSB0aGF0IHdlIGNhbiBjaGVjayByZWxpYWJseS4gKi9cbiBcdG1wcm90ZWN0KG1lbSwgcG1kc2l6ZSwgUFJPVF9SRUFEKTtcbiBcbi1cdHJldCA9IGNoZWNrX2h1Z2VfYW5vbihtZW0sIDEsIHBtZHNpemUpO1xuJiM0MztcdHJldCA9IGNoZWNrX2h1Z2VfYW5vbihtZW0sIHBtZHNpemUsIDEsIHBtZHNpemUpO1xuIFx0bXVubWFwKG1tYXBfbWVtLCBtbWFwX3NpemUpO1xuIFx0cmV0dXJuIHJldDtcbiB9XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcnVuX3ZtdGVzdHMuc2ggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ydW5fdm10ZXN0cy5zaFxuaW5kZXggNjg3ZDExNWUzYmQ4MC4uZDA5ZjlmNmEzODRlZSAxMDA3NTVcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3J1bl92bXRlc3RzLnNoXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ydW5fdm10ZXN0cy5zaFxuQEAgLTQxMCw2ICYjNDM7NDEwLDggQEAgQ0FURUdPUlk9XCYjMzQ7dGhwXCYjMzQ7IHJ1bl90ZXN0IC4va2h1Z2VwYWdlZCBhbGw6c2htZW1cbiBcbiBDQVRFR09SWT1cJiMzNDt0aHBcJiMzNDsgcnVuX3Rlc3QgLi9raHVnZXBhZ2VkIC1zIDQgYWxsOnNobWVtXG4gXG4mIzQzO0NBVEVHT1JZPVwmIzM0O3RocFwmIzM0OyBydW5fdGVzdCAuL2todWdlcGFnZWQgLWMgNCBtdGhwX2todWdlcGFnZWQ6YW5vblxuJiM0MztcbiAjIFRyeSB0byBjcmVhdGUgWEZTIGlmIG5vdCBwcm92aWRlZFxuIGlmIFsgLXogXCYjMzQ7JHtTUExJVF9IVUdFX1BBR0VfVEVTVF9YRlNfUEFUSH1cJiMzNDsgXTsgdGhlblxuICAgICBpZiB0ZXN0X3NlbGVjdGVkIFwmIzM0O3RocFwmIzM0OzsgdGhlblxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3NvZnQtZGlydHkuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3NvZnQtZGlydHkuY1xuaW5kZXggZmIxODY0YTY4ZTFjNi4uZTE5OGZhY2Y3OGJiNSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3NvZnQtZGlydHkuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vc29mdC1kaXJ0eS5jXG5AQCAtMTAzLDcgJiM0MzsxMDMsNyBAQCBzdGF0aWMgdm9pZCB0ZXN0X2h1Z2VwYWdlKGludCBwYWdlbWFwX2ZkLCBpbnQgcGFnZXNpemUpXG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBocGFnZV9sZW47IGkmIzQzOyYjNDM7KVxuIFx0XHRtYXBbaV0gPSAoY2hhcilpO1xuIFxuLVx0aWYgKGNoZWNrX2h1Z2VfYW5vbihtYXAsIDEsIGhwYWdlX2xlbikpIHtcbiYjNDM7XHRpZiAoY2hlY2tfaHVnZV9hbm9uKG1hcCwgaHBhZ2VfbGVuLCAxLCBocGFnZV9sZW4pKSB7XG4gXHRcdGtzZnRfdGVzdF9yZXN1bHRfcGFzcyhcJiMzNDtUZXN0ICVzIGh1Z2UgcGFnZSBhbGxvY2F0aW9uXFxuXCYjMzQ7LCBfX2Z1bmNfXyk7XG4gXG4gXHRcdGNsZWFyX3NvZnRkaXJ0eSgpO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3NwbGl0X2h1Z2VfcGFnZV90ZXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9zcGxpdF9odWdlX3BhZ2VfdGVzdC5jXG5pbmRleCAzMmI5OTE0NzJmNzQ0Li44NmE2MDM2OTI4MjYxIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vc3BsaXRfaHVnZV9wYWdlX3Rlc3QuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vc3BsaXRfaHVnZV9wYWdlX3Rlc3QuY1xuQEAgLTEwNCwxMjkgJiM0MzsxMDQsNiBAQCBzdGF0aWMgYm9vbCBpc19iYWNrZWRfYnlfZm9saW8oY2hhciAqdmFkZHIsIGludCBvcmRlciwgaW50IHBhZ2VtYXBfZmQsXG4gXHRyZXR1cm4gZmFsc2U7XG4gfVxuIFxuLXN0YXRpYyBpbnQgdmFkZHJfcGFnZWZsYWdzX2dldChjaGFyICp2YWRkciwgaW50IHBhZ2VtYXBfZmQsIGludCBrcGFnZWZsYWdzX2ZkLFxuLVx0XHR1aW50NjRfdCAqZmxhZ3MpXG4te1xuLVx0dW5zaWduZWQgbG9uZyBwZm47XG4tXG4tXHRwZm4gPSBwYWdlbWFwX2dldF9wZm4ocGFnZW1hcF9mZCwgdmFkZHIpO1xuLVxuLVx0Lyogbm9uLXByZXNlbnQgUEZOICovXG4tXHRpZiAocGZuID09IC0xVUwpXG4tXHRcdHJldHVybiAxO1xuLVxuLVx0aWYgKHBhZ2VmbGFnc19nZXQocGZuLCBrcGFnZWZsYWdzX2ZkLCBmbGFncykpXG4tXHRcdHJldHVybiAtMTtcbi1cbi1cdHJldHVybiAwO1xuLX1cbi1cbi0vKlxuLSAqIGdhdGhlcl9hZnRlcl9zcGxpdF9mb2xpb19vcmRlcnMgLSBzY2FuIHRocm91Z2ggW3ZhZGRyX3N0YXJ0LCBsZW4pIGFuZCByZWNvcmRcbi0gKiBmb2xpbyBvcmRlcnNcbi0gKlxuLSAqIEB2YWRkcl9zdGFydDogc3RhcnQgdmFkZHJcbi0gKiBAbGVuOiByYW5nZSBsZW5ndGhcbi0gKiBAcGFnZW1hcF9mZDogZmlsZSBkZXNjcmlwdG9yIHRvIC9wcm9jL1x1MDAzY3BpZFx1MDAzZS9wYWdlbWFwXG4tICogQGtwYWdlZmxhZ3NfZmQ6IGZpbGUgZGVzY3JpcHRvciB0byAvcHJvYy9rcGFnZWZsYWdzXG4tICogQG9yZGVyczogb3V0cHV0IGZvbGlvIG9yZGVyIGFycmF5XG4tICogQG5yX29yZGVyczogZm9saW8gb3JkZXIgYXJyYXkgc2l6ZVxuLSAqXG4tICogZ2F0aGVyX2FmdGVyX3NwbGl0X2ZvbGlvX29yZGVycygpIHNjYW4gdGhyb3VnaCBbdmFkZHJfc3RhcnQsIGxlbikgYW5kIGNoZWNrXG4tICogYWxsIGZvbGlvcyB3aXRoaW4gdGhlIHJhbmdlIGFuZCByZWNvcmQgdGhlaXIgb3JkZXJzLiBBbGwgb3JkZXItMCBwYWdlcyB3aWxsXG4tICogYmUgcmVjb3JkZWQuIE5vbi1wcmVzZW50IHZhZGRyIGlzIHNraXBwZWQuXG4tICpcbi0gKiBOT1RFOiB0aGUgZnVuY3Rpb24gaXMgdXNlZCB0byBjaGVjayBmb2xpbyBvcmRlcnMgYWZ0ZXIgYSBzcGxpdCBpcyBwZXJmb3JtZWQsXG4tICogc28gaXQgYXNzdW1lcyBbdmFkZHJfc3RhcnQsIGxlbikgZnVsbHkgbWFwcyB0byBhZnRlci1zcGxpdCBmb2xpb3Mgd2l0aGluIHRoYXRcbi0gKiByYW5nZS5cbi0gKlxuLSAqIFJldHVybjogMCAtIG5vIGVycm9yLCAtMSAtIHVuaGFuZGxlZCBjYXNlc1xuLSAqL1xuLXN0YXRpYyBpbnQgZ2F0aGVyX2FmdGVyX3NwbGl0X2ZvbGlvX29yZGVycyhjaGFyICp2YWRkcl9zdGFydCwgc2l6ZV90IGxlbixcbi1cdFx0aW50IHBhZ2VtYXBfZmQsIGludCBrcGFnZWZsYWdzX2ZkLCBpbnQgb3JkZXJzW10sIGludCBucl9vcmRlcnMpXG4te1xuLVx0dWludDY0X3QgcGFnZV9mbGFncyA9IDA7XG4tXHRpbnQgY3VyX29yZGVyID0gLTE7XG4tXHRjaGFyICp2YWRkcjtcbi1cbi1cdGlmIChwYWdlbWFwX2ZkID09IC0xIHx8IGtwYWdlZmxhZ3NfZmQgPT0gLTEpXG4tXHRcdHJldHVybiAtMTtcbi1cdGlmICghb3JkZXJzKVxuLVx0XHRyZXR1cm4gLTE7XG4tXHRpZiAobnJfb3JkZXJzIFx1MDAzYz0gMClcbi1cdFx0cmV0dXJuIC0xO1xuLVxuLVx0Zm9yICh2YWRkciA9IHZhZGRyX3N0YXJ0OyB2YWRkciBcdTAwM2MgdmFkZHJfc3RhcnQgJiM0MzsgbGVuOykge1xuLVx0XHRjaGFyICpuZXh0X2ZvbGlvX3ZhZGRyO1xuLVx0XHRpbnQgc3RhdHVzO1xuLVxuLVx0XHRzdGF0dXMgPSB2YWRkcl9wYWdlZmxhZ3NfZ2V0KHZhZGRyLCBwYWdlbWFwX2ZkLCBrcGFnZWZsYWdzX2ZkLFxuLVx0XHRcdFx0XHRcdTAwMjZwYWdlX2ZsYWdzKTtcbi1cdFx0aWYgKHN0YXR1cyBcdTAwM2MgMClcbi1cdFx0XHRyZXR1cm4gLTE7XG4tXG4tXHRcdC8qIHNraXAgbm9uIHByZXNlbnQgdmFkZHIgKi9cbi1cdFx0aWYgKHN0YXR1cyA9PSAxKSB7XG4tXHRcdFx0dmFkZHIgJiM0Mzs9IHBzaXplKCk7XG4tXHRcdFx0Y29udGludWU7XG4tXHRcdH1cbi1cbi1cdFx0LyogYWxsIG9yZGVyLTAgcGFnZXMgd2l0aCBwb3NzaWJsZSBmYWxzZSBwb3N0aXZlIChub24gZm9saW8pICovXG4tXHRcdGlmICghKHBhZ2VfZmxhZ3MgXHUwMDI2IChLUEZfQ09NUE9VTkRfSEVBRCB8IEtQRl9DT01QT1VORF9UQUlMKSkpIHtcbi1cdFx0XHRvcmRlcnNbMF0mIzQzOyYjNDM7O1xuLVx0XHRcdHZhZGRyICYjNDM7PSBwc2l6ZSgpO1xuLVx0XHRcdGNvbnRpbnVlO1xuLVx0XHR9XG4tXG4tXHRcdC8qIHNraXAgbm9uIHRocCBjb21wb3VuZCBwYWdlcyAqL1xuLVx0XHRpZiAoIShwYWdlX2ZsYWdzIFx1MDAyNiBLUEZfVEhQKSkge1xuLVx0XHRcdHZhZGRyICYjNDM7PSBwc2l6ZSgpO1xuLVx0XHRcdGNvbnRpbnVlO1xuLVx0XHR9XG4tXG4tXHRcdC8qIHZwbiBwb2ludHMgdG8gcGFydCBvZiBhIFRIUCBhdCB0aGlzIHBvaW50ICovXG4tXHRcdGlmIChwYWdlX2ZsYWdzIFx1MDAyNiBLUEZfQ09NUE9VTkRfSEVBRClcbi1cdFx0XHRjdXJfb3JkZXIgPSAxO1xuLVx0XHRlbHNlIHtcbi1cdFx0XHR2YWRkciAmIzQzOz0gcHNpemUoKTtcbi1cdFx0XHRjb250aW51ZTtcbi1cdFx0fVxuLVxuLVx0XHRuZXh0X2ZvbGlvX3ZhZGRyID0gdmFkZHIgJiM0MzsgKDFVTCBcdTAwM2NcdTAwM2MgKGN1cl9vcmRlciAmIzQzOyBwc2hpZnQoKSkpO1xuLVxuLVx0XHRpZiAobmV4dF9mb2xpb192YWRkciBcdTAwM2U9IHZhZGRyX3N0YXJ0ICYjNDM7IGxlbilcbi1cdFx0XHRicmVhaztcbi1cbi1cdFx0d2hpbGUgKChzdGF0dXMgPSB2YWRkcl9wYWdlZmxhZ3NfZ2V0KG5leHRfZm9saW9fdmFkZHIsXG4tXHRcdFx0XHRcdFx0ICAgICBwYWdlbWFwX2ZkLCBrcGFnZWZsYWdzX2ZkLFxuLVx0XHRcdFx0XHRcdCAgICAgXHUwMDI2cGFnZV9mbGFncykpIFx1MDAzZT0gMCkge1xuLVx0XHRcdC8qXG4tXHRcdFx0ICogbm9uIHByZXNlbnQgdmFkZHIsIG5leHQgY29tcG91bmQgaGVhZCBwYWdlLCBvclxuLVx0XHRcdCAqIG9yZGVyLTAgcGFnZVxuLVx0XHRcdCAqL1xuLVx0XHRcdGlmIChzdGF0dXMgPT0gMSB8fFxuLVx0XHRcdCAgICAocGFnZV9mbGFncyBcdTAwMjYgS1BGX0NPTVBPVU5EX0hFQUQpIHx8XG4tXHRcdFx0ICAgICEocGFnZV9mbGFncyBcdTAwMjYgKEtQRl9DT01QT1VORF9IRUFEIHwgS1BGX0NPTVBPVU5EX1RBSUwpKSkge1xuLVx0XHRcdFx0aWYgKGN1cl9vcmRlciBcdTAwM2MgbnJfb3JkZXJzKSB7XG4tXHRcdFx0XHRcdG9yZGVyc1tjdXJfb3JkZXJdJiM0MzsmIzQzOztcbi1cdFx0XHRcdFx0Y3VyX29yZGVyID0gLTE7XG4tXHRcdFx0XHRcdHZhZGRyID0gbmV4dF9mb2xpb192YWRkcjtcbi1cdFx0XHRcdH1cbi1cdFx0XHRcdGJyZWFrO1xuLVx0XHRcdH1cbi1cbi1cdFx0XHRjdXJfb3JkZXImIzQzOyYjNDM7O1xuLVx0XHRcdG5leHRfZm9saW9fdmFkZHIgPSB2YWRkciAmIzQzOyAoMVVMIFx1MDAzY1x1MDAzYyAoY3VyX29yZGVyICYjNDM7IHBzaGlmdCgpKSk7XG4tXHRcdH1cbi1cbi1cdFx0aWYgKHN0YXR1cyBcdTAwM2MgMClcbi1cdFx0XHRyZXR1cm4gc3RhdHVzO1xuLVx0fVxuLVx0aWYgKGN1cl9vcmRlciBcdTAwM2UgMCBcdTAwMjZcdTAwMjYgY3VyX29yZGVyIFx1MDAzYyBucl9vcmRlcnMpXG4tXHRcdG9yZGVyc1tjdXJfb3JkZXJdJiM0MzsmIzQzOztcbi1cdHJldHVybiAwO1xuLX1cbi1cbiBzdGF0aWMgaW50IGNoZWNrX2FmdGVyX3NwbGl0X2ZvbGlvX29yZGVycyhjaGFyICp2YWRkcl9zdGFydCwgc2l6ZV90IGxlbixcbiBcdFx0aW50IHBhZ2VtYXBfZmQsIGludCBrcGFnZWZsYWdzX2ZkLCBpbnQgb3JkZXJzW10sIGludCBucl9vcmRlcnMpXG4ge1xuQEAgLTI0MCw3ICYjNDM7MTE3LDcgQEAgc3RhdGljIGludCBjaGVja19hZnRlcl9zcGxpdF9mb2xpb19vcmRlcnMoY2hhciAqdmFkZHJfc3RhcnQsIHNpemVfdCBsZW4sXG4gXHRcdGtzZnRfZXhpdF9mYWlsX21zZyhcJiMzNDtDYW5ub3QgYWxsb2NhdGUgbWVtb3J5IGZvciB2YWRkcl9vcmRlcnNcJiMzNDspO1xuIFxuIFx0bWVtc2V0KHZhZGRyX29yZGVycywgMCwgc2l6ZW9mKGludCkgKiBucl9vcmRlcnMpO1xuLVx0c3RhdHVzID0gZ2F0aGVyX2FmdGVyX3NwbGl0X2ZvbGlvX29yZGVycyh2YWRkcl9zdGFydCwgbGVuLCBwYWdlbWFwX2ZkLFxuJiM0MztcdHN0YXR1cyA9IGdhdGhlcl9mb2xpb19vcmRlcnModmFkZHJfc3RhcnQsIGxlbiwgcGFnZW1hcF9mZCxcbiBcdFx0XHRcdCAgICAga3BhZ2VmbGFnc19mZCwgdmFkZHJfb3JkZXJzLCBucl9vcmRlcnMpO1xuIFx0aWYgKHN0YXR1cylcbiBcdFx0a3NmdF9leGl0X2ZhaWxfbXNnKFwmIzM0O2dhdGhlciBmb2xpbyBpbmZvIGZhaWxlZFxcblwmIzM0Oyk7XG5AQCAtMjk2LDcgJiM0MzsxNzMsNyBAQCBzdGF0aWMgdm9pZCB2ZXJpZnlfcnNzX2Fub25fc3BsaXRfaHVnZV9wYWdlX2FsbF96ZXJvZXMoY2hhciAqb25lX3BhZ2UsIGludCBucl9ocFxuIFx0dW5zaWduZWQgbG9uZyByc3NfYW5vbl9iZWZvcmUsIHJzc19hbm9uX2FmdGVyO1xuIFx0c2l6ZV90IGk7XG4gXG4tXHRpZiAoIWNoZWNrX2h1Z2VfYW5vbihvbmVfcGFnZSwgbnJfaHBhZ2VzLCBwbWRfcGFnZXNpemUpKVxuJiM0MztcdGlmICghY2hlY2tfaHVnZV9hbm9uKG9uZV9wYWdlLCBucl9ocGFnZXMgKiBwbWRfcGFnZXNpemUsIG5yX2hwYWdlcywgcG1kX3BhZ2VzaXplKSlcbiBcdFx0a3NmdF9leGl0X2ZhaWxfbXNnKFwmIzM0O05vIFRIUCBpcyBhbGxvY2F0ZWRcXG5cJiMzNDspO1xuIFxuIFx0cnNzX2Fub25fYmVmb3JlID0gcnNzX2Fub24oKTtcbkBAIC0zMTEsNyAmIzQzOzE4OCw3IEBAIHN0YXRpYyB2b2lkIHZlcmlmeV9yc3NfYW5vbl9zcGxpdF9odWdlX3BhZ2VfYWxsX3plcm9lcyhjaGFyICpvbmVfcGFnZSwgaW50IG5yX2hwXG4gXHRcdGlmIChvbmVfcGFnZVtpXSAhPSAoY2hhcikwKVxuIFx0XHRcdGtzZnRfZXhpdF9mYWlsX21zZyhcJiMzNDslbGQgYnl0ZSBjb3JydXB0ZWRcXG5cJiMzNDssIGkpO1xuIFxuLVx0aWYgKCFjaGVja19odWdlX2Fub24ob25lX3BhZ2UsIDAsIHBtZF9wYWdlc2l6ZSkpXG4mIzQzO1x0aWYgKCFjaGVja19odWdlX2Fub24ob25lX3BhZ2UsIG5yX2hwYWdlcyAqIHBtZF9wYWdlc2l6ZSwgMCwgcG1kX3BhZ2VzaXplKSlcbiBcdFx0a3NmdF9leGl0X2ZhaWxfbXNnKFwmIzM0O1N0aWxsIEFub25IdWdlUGFnZXMgbm90IHNwbGl0XFxuXCYjMzQ7KTtcbiBcbiBcdHJzc19hbm9uX2FmdGVyID0gcnNzX2Fub24oKTtcbkBAIC0zNDcsNyAmIzQzOzIyNCw3IEBAIHN0YXRpYyB2b2lkIHNwbGl0X3BtZF90aHBfdG9fb3JkZXIoaW50IG9yZGVyKVxuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgbGVuOyBpJiM0MzsmIzQzOylcbiBcdFx0b25lX3BhZ2VbaV0gPSAoY2hhcilpO1xuIFxuLVx0aWYgKCFjaGVja19odWdlX2Fub24ob25lX3BhZ2UsIDQsIHBtZF9wYWdlc2l6ZSkpXG4mIzQzO1x0aWYgKCFjaGVja19odWdlX2Fub24ob25lX3BhZ2UsIDQgKiBwbWRfcGFnZXNpemUsIDQsIHBtZF9wYWdlc2l6ZSkpXG4gXHRcdGtzZnRfZXhpdF9mYWlsX21zZyhcJiMzNDtObyBUSFAgaXMgYWxsb2NhdGVkXFxuXCYjMzQ7KTtcbiBcbiBcdC8qIHNwbGl0IGFsbCBUSFBzICovXG5AQCAtMzY2LDcgJiM0MzsyNDMsNyBAQCBzdGF0aWMgdm9pZCBzcGxpdF9wbWRfdGhwX3RvX29yZGVyKGludCBvcmRlcilcbiBcdFx0XHRcdFx0ICAgKHBtZF9vcmRlciAmIzQzOyAxKSkpXG4gXHRcdGtzZnRfZXhpdF9mYWlsX21zZyhcJiMzNDtVbmV4cGVjdGVkIFRIUCBzcGxpdFxcblwmIzM0Oyk7XG4gXG4tXHRpZiAoIWNoZWNrX2h1Z2VfYW5vbihvbmVfcGFnZSwgMCwgcG1kX3BhZ2VzaXplKSlcbiYjNDM7XHRpZiAoIWNoZWNrX2h1Z2VfYW5vbihvbmVfcGFnZSwgNCAqIHBtZF9wYWdlc2l6ZSwgMCwgcG1kX3BhZ2VzaXplKSlcbiBcdFx0a3NmdF9leGl0X2ZhaWxfbXNnKFwmIzM0O1N0aWxsIEFub25IdWdlUGFnZXMgbm90IHNwbGl0XFxuXCYjMzQ7KTtcbiBcbiBcdGtzZnRfdGVzdF9yZXN1bHRfcGFzcyhcJiMzNDtTcGxpdCBodWdlIHBhZ2VzIHRvIG9yZGVyICVkIHN1Y2Nlc3NmdWxcXG5cJiMzNDssIG9yZGVyKTtcbkBAIC0zOTMsNyAmIzQzOzI3MCw3IEBAIHN0YXRpYyB2b2lkIHNwbGl0X3B0ZV9tYXBwZWRfdGhwKHZvaWQpXG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyB0aHBfYXJlYV9zaXplOyBpJiM0MzsmIzQzOylcbiBcdFx0dGhwX2FyZWFbaV0gPSAoY2hhcilpO1xuIFxuLVx0aWYgKCFjaGVja19odWdlX2Fub24odGhwX2FyZWEsIG5yX3RocHMsIHBtZF9wYWdlc2l6ZSkpIHtcbiYjNDM7XHRpZiAoIWNoZWNrX2h1Z2VfYW5vbih0aHBfYXJlYSwgbnJfdGhwcyAqIHBtZF9wYWdlc2l6ZSwgbnJfdGhwcywgcG1kX3BhZ2VzaXplKSkge1xuIFx0XHRrc2Z0X3Rlc3RfcmVzdWx0X3NraXAoXCYjMzQ7Tm90IGFsbCBUSFBzIGFsbG9jYXRlZFxcblwmIzM0Oyk7XG4gXHRcdGdvdG8gb3V0O1xuIFx0fVxuQEAgLTY1Nyw3ICYjNDM7NTM0LDcgQEAgc3RhdGljIGludCBjcmVhdGVfcGFnZWNhY2hlX3RocF9hbmRfZmQoY29uc3QgY2hhciAqdGVzdGZpbGUsIHNpemVfdCBmZF9zaXplLFxuIFxuIFx0Zm9yY2VfcmVhZF9wYWdlcygqYWRkciwgZmRfc2l6ZSAvIHBtZF9wYWdlc2l6ZSwgcG1kX3BhZ2VzaXplKTtcbiBcbi1cdGlmICghY2hlY2tfaHVnZV9maWxlKCphZGRyLCBmZF9zaXplIC8gcG1kX3BhZ2VzaXplLCBwbWRfcGFnZXNpemUpKSB7XG4mIzQzO1x0aWYgKCFjaGVja19odWdlX2ZpbGUoKmFkZHIsIGZkX3NpemUsIGZkX3NpemUgLyBwbWRfcGFnZXNpemUsIHBtZF9wYWdlc2l6ZSkpIHtcbiBcdFx0a3NmdF9wcmludF9tc2coXCYjMzQ7Tm8gbGFyZ2UgcGFnZWNhY2hlIGZvbGlvIGdlbmVyYXRlZCwgcGxlYXNlIHByb3ZpZGUgYSBmaWxlc3lzdGVtIHN1cHBvcnRpbmcgbGFyZ2UgZm9saW9cXG5cJiMzNDspO1xuIFx0XHRtdW5tYXAoKmFkZHIsIGZkX3NpemUpO1xuIFx0XHRjbG9zZSgqZmQpO1xuQEAgLTczNSw3ICYjNDM7NjEyLDcgQEAgc3RhdGljIHZvaWQgc3BsaXRfdGhwX2luX3BhZ2VjYWNoZV90b19vcmRlcl9hdChzaXplX3QgZmRfc2l6ZSxcbiBcdFx0Z290byBvdXQ7XG4gXHR9XG4gXG4tXHRpZiAoIWNoZWNrX2h1Z2VfZmlsZShhZGRyLCAwLCBwbWRfcGFnZXNpemUpKSB7XG4mIzQzO1x0aWYgKCFjaGVja19odWdlX2ZpbGUoYWRkciwgZmRfc2l6ZSwgMCwgcG1kX3BhZ2VzaXplKSkge1xuIFx0XHRrc2Z0X3ByaW50X21zZyhcJiMzNDtTdGlsbCBGaWxlUG1kTWFwcGVkIG5vdCBzcGxpdFxcblwmIzM0Oyk7XG4gXHRcdGVyciA9IEVYSVRfRkFJTFVSRTtcbiBcdFx0Z290byBvdXQ7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdWZmZC1jb21tb24uYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3VmZmQtY29tbW9uLmNcbmluZGV4IGY0OGY1ZDQ1OTRhYjAuLjFmYjk2N2VmNDk4NTQgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS91ZmZkLWNvbW1vbi5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS91ZmZkLWNvbW1vbi5jXG5AQCAtMTk0LDcgJiM0MzsxOTQsOSBAQCBzdGF0aWMgdm9pZCBzaG1lbV9hbGlhc19tYXBwaW5nKHVmZmRfZ2xvYmFsX3Rlc3Rfb3B0c190ICpnb3B0cywgX191NjQgKnN0YXJ0LFxuIFxuIHN0YXRpYyB2b2lkIHNobWVtX2NoZWNrX3BtZF9tYXBwaW5nKHVmZmRfZ2xvYmFsX3Rlc3Rfb3B0c190ICpnb3B0cywgdm9pZCAqcCwgaW50IGV4cGVjdF9ucl9ocGFnZXMpXG4ge1xuLVx0aWYgKCFjaGVja19odWdlX3NobWVtKGdvcHRzLVx1MDAzZWFyZWFfZHN0X2FsaWFzLCBleHBlY3RfbnJfaHBhZ2VzLFxuJiM0MztcdHNpemVfdCBsZW4gPSBleHBlY3RfbnJfaHBhZ2VzICogcmVhZF9wbWRfcGFnZXNpemUoKTtcbiYjNDM7XG4mIzQzO1x0aWYgKCFjaGVja19odWdlX3NobWVtKGdvcHRzLVx1MDAzZWFyZWFfZHN0X2FsaWFzLCBsZW4sIGV4cGVjdF9ucl9ocGFnZXMsXG4gXHRcdFx0ICAgICAgcmVhZF9wbWRfcGFnZXNpemUoKSkpXG4gXHRcdGVycihcJiMzNDtEaWQgbm90IGZpbmQgZXhwZWN0ZWQgJWQgbnVtYmVyIG9mIGh1Z2VwYWdlc1wmIzM0OyxcbiBcdFx0ICAgIGV4cGVjdF9ucl9ocGFnZXMpO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ZtX3V0aWwuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ZtX3V0aWwuY1xuaW5kZXggZWYxZWExMTk4MWE3NC4uMTNiNWNmZjdkZmUzMSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ZtX3V0aWwuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdm1fdXRpbC5jXG5AQCAtMTUsNiAmIzQzOzE1LDkgQEBcbiAjZGVmaW5lIFNNQVBfRklMRV9QQVRIIFwmIzM0Oy9wcm9jL3NlbGYvc21hcHNcJiMzNDtcbiAjZGVmaW5lIFNUQVRVU19GSUxFX1BBVEggXCYjMzQ7L3Byb2Mvc2VsZi9zdGF0dXNcJiMzNDtcbiAjZGVmaW5lIE1BWF9MSU5FX0xFTkdUSCA1MDBcbiYjNDM7I2RlZmluZSBQQUdFTUFQX1BBVEggXCYjMzQ7L3Byb2Mvc2VsZi9wYWdlbWFwXCYjMzQ7XG4mIzQzOyNkZWZpbmUgS1BBR0VGTEFHU19QQVRIIFwmIzM0Oy9wcm9jL2twYWdlZmxhZ3NcJiMzNDtcbiYjNDM7I2RlZmluZSBNQVhfTlJfT1JERVJTIDIwXG4gXG4gdW5zaWduZWQgaW50IF9fcGFnZV9zaXplO1xuIHVuc2lnbmVkIGludCBfX3BhZ2Vfc2hpZnQ7XG5AQCAtMTk0LDYgJiM0MzsxOTcsMTI1IEBAIHVuc2lnbmVkIGxvbmcgcnNzX2Fub24odm9pZClcbiBcdHJldHVybiByc3NfYW5vbjtcbiB9XG4gXG4mIzQzO3N0YXRpYyBpbnQgdmFkZHJfcGFnZWZsYWdzX2dldChjaGFyICp2YWRkciwgaW50IHBhZ2VtYXBfZmQsIGludCBrcGFnZWZsYWdzX2ZkLFxuJiM0MztcdFx0dWludDY0X3QgKmZsYWdzKVxuJiM0Mzt7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBwZm47XG4mIzQzO1xuJiM0MztcdHBmbiA9IHBhZ2VtYXBfZ2V0X3BmbihwYWdlbWFwX2ZkLCB2YWRkcik7XG4mIzQzO1xuJiM0MztcdC8qIG5vbi1wcmVzZW50IFBGTiAqL1xuJiM0MztcdGlmIChwZm4gPT0gLTFVTClcbiYjNDM7XHRcdHJldHVybiAxO1xuJiM0MztcbiYjNDM7XHRpZiAocGFnZWZsYWdzX2dldChwZm4sIGtwYWdlZmxhZ3NfZmQsIGZsYWdzKSlcbiYjNDM7XHRcdHJldHVybiAtMTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qXG4mIzQzOyAqIGdhdGhlcl9mb2xpb19vcmRlcnMgLSBzY2FuIHRocm91Z2ggW3ZhZGRyX3N0YXJ0LCBsZW4pIGFuZCByZWNvcmRcbiYjNDM7ICogZm9saW8gb3JkZXJzXG4mIzQzOyAqXG4mIzQzOyAqIEB2YWRkcl9zdGFydDogc3RhcnQgdmFkZHJcbiYjNDM7ICogQGxlbjogcmFuZ2UgbGVuZ3RoXG4mIzQzOyAqIEBwYWdlbWFwX2ZkOiBmaWxlIGRlc2NyaXB0b3IgdG8gL3Byb2MvXHUwMDNjcGlkXHUwMDNlL3BhZ2VtYXBcbiYjNDM7ICogQGtwYWdlZmxhZ3NfZmQ6IGZpbGUgZGVzY3JpcHRvciB0byAvcHJvYy9rcGFnZWZsYWdzXG4mIzQzOyAqIEBvcmRlcnM6IG91dHB1dCBmb2xpbyBvcmRlciBhcnJheVxuJiM0MzsgKiBAbnJfb3JkZXJzOiBmb2xpbyBvcmRlciBhcnJheSBzaXplXG4mIzQzOyAqXG4mIzQzOyAqIGdhdGhlcl9mb2xpb19vcmRlcnMoKSBzY2FuIHRocm91Z2ggW3ZhZGRyX3N0YXJ0LCBsZW4pIGFuZCBjaGVja1xuJiM0MzsgKiBhbGwgZm9saW9zIHdpdGhpbiB0aGUgcmFuZ2UgYW5kIHJlY29yZCB0aGVpciBvcmRlcnMuIEFsbCBvcmRlci0wIHBhZ2VzIHdpbGxcbiYjNDM7ICogYmUgcmVjb3JkZWQuIE5vbi1wcmVzZW50IHZhZGRyIGlzIHNraXBwZWQuXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybjogMCAtIG5vIGVycm9yLCAtMSAtIHVuaGFuZGxlZCBjYXNlc1xuJiM0MzsgKi9cbiYjNDM7aW50IGdhdGhlcl9mb2xpb19vcmRlcnMoY2hhciAqdmFkZHJfc3RhcnQsIHNpemVfdCBsZW4sXG4mIzQzO1x0XHRpbnQgcGFnZW1hcF9mZCwgaW50IGtwYWdlZmxhZ3NfZmQsIGludCBvcmRlcnNbXSwgaW50IG5yX29yZGVycylcbiYjNDM7e1xuJiM0MztcdHVpbnQ2NF90IHBhZ2VfZmxhZ3MgPSAwO1xuJiM0MztcdGludCBjdXJfb3JkZXIgPSAtMTtcbiYjNDM7XHRjaGFyICp2YWRkcjtcbiYjNDM7XG4mIzQzO1x0aWYgKHBhZ2VtYXBfZmQgPT0gLTEgfHwga3BhZ2VmbGFnc19mZCA9PSAtMSlcbiYjNDM7XHRcdHJldHVybiAtMTtcbiYjNDM7XHRpZiAoIW9yZGVycylcbiYjNDM7XHRcdHJldHVybiAtMTtcbiYjNDM7XHRpZiAobnJfb3JkZXJzIFx1MDAzYz0gMClcbiYjNDM7XHRcdHJldHVybiAtMTtcbiYjNDM7XG4mIzQzO1x0Zm9yICh2YWRkciA9IHZhZGRyX3N0YXJ0OyB2YWRkciBcdTAwM2MgdmFkZHJfc3RhcnQgJiM0MzsgbGVuOykge1xuJiM0MztcdFx0Y2hhciAqbmV4dF9mb2xpb192YWRkcjtcbiYjNDM7XHRcdGludCBzdGF0dXM7XG4mIzQzO1xuJiM0MztcdFx0c3RhdHVzID0gdmFkZHJfcGFnZWZsYWdzX2dldCh2YWRkciwgcGFnZW1hcF9mZCwga3BhZ2VmbGFnc19mZCxcbiYjNDM7XHRcdFx0XHRcdTAwMjZwYWdlX2ZsYWdzKTtcbiYjNDM7XHRcdGlmIChzdGF0dXMgXHUwMDNjIDApXG4mIzQzO1x0XHRcdHJldHVybiAtMTtcbiYjNDM7XG4mIzQzO1x0XHQvKiBza2lwIG5vbiBwcmVzZW50IHZhZGRyICovXG4mIzQzO1x0XHRpZiAoc3RhdHVzID09IDEpIHtcbiYjNDM7XHRcdFx0dmFkZHIgJiM0Mzs9IHBzaXplKCk7XG4mIzQzO1x0XHRcdGNvbnRpbnVlO1xuJiM0MztcdFx0fVxuJiM0MztcbiYjNDM7XHRcdC8qIGFsbCBvcmRlci0wIHBhZ2VzIHdpdGggcG9zc2libGUgZmFsc2UgcG9zdGl2ZSAobm9uIGZvbGlvKSAqL1xuJiM0MztcdFx0aWYgKCEocGFnZV9mbGFncyBcdTAwMjYgKEtQRl9DT01QT1VORF9IRUFEIHwgS1BGX0NPTVBPVU5EX1RBSUwpKSkge1xuJiM0MztcdFx0XHRvcmRlcnNbMF0mIzQzOyYjNDM7O1xuJiM0MztcdFx0XHR2YWRkciAmIzQzOz0gcHNpemUoKTtcbiYjNDM7XHRcdFx0Y29udGludWU7XG4mIzQzO1x0XHR9XG4mIzQzO1xuJiM0MztcdFx0Lyogc2tpcCBub24gdGhwIGNvbXBvdW5kIHBhZ2VzICovXG4mIzQzO1x0XHRpZiAoIShwYWdlX2ZsYWdzIFx1MDAyNiBLUEZfVEhQKSkge1xuJiM0MztcdFx0XHR2YWRkciAmIzQzOz0gcHNpemUoKTtcbiYjNDM7XHRcdFx0Y29udGludWU7XG4mIzQzO1x0XHR9XG4mIzQzO1xuJiM0MztcdFx0LyogdnBuIHBvaW50cyB0byBwYXJ0IG9mIGEgVEhQIGF0IHRoaXMgcG9pbnQgKi9cbiYjNDM7XHRcdGlmIChwYWdlX2ZsYWdzIFx1MDAyNiBLUEZfQ09NUE9VTkRfSEVBRClcbiYjNDM7XHRcdFx0Y3VyX29yZGVyID0gMTtcbiYjNDM7XHRcdGVsc2Uge1xuJiM0MztcdFx0XHR2YWRkciAmIzQzOz0gcHNpemUoKTtcbiYjNDM7XHRcdFx0Y29udGludWU7XG4mIzQzO1x0XHR9XG4mIzQzO1xuJiM0MztcdFx0bmV4dF9mb2xpb192YWRkciA9IHZhZGRyICYjNDM7ICgxVUwgXHUwMDNjXHUwMDNjIChjdXJfb3JkZXIgJiM0MzsgcHNoaWZ0KCkpKTtcbiYjNDM7XG4mIzQzO1x0XHRpZiAobmV4dF9mb2xpb192YWRkciBcdTAwM2U9IHZhZGRyX3N0YXJ0ICYjNDM7IGxlbilcbiYjNDM7XHRcdFx0YnJlYWs7XG4mIzQzO1xuJiM0MztcdFx0d2hpbGUgKChzdGF0dXMgPSB2YWRkcl9wYWdlZmxhZ3NfZ2V0KG5leHRfZm9saW9fdmFkZHIsXG4mIzQzO1x0XHRcdFx0XHRcdCAgICAgcGFnZW1hcF9mZCwga3BhZ2VmbGFnc19mZCxcbiYjNDM7XHRcdFx0XHRcdFx0ICAgICBcdTAwMjZwYWdlX2ZsYWdzKSkgXHUwMDNlPSAwKSB7XG4mIzQzO1x0XHRcdC8qXG4mIzQzO1x0XHRcdCAqIG5vbiBwcmVzZW50IHZhZGRyLCBuZXh0IGNvbXBvdW5kIGhlYWQgcGFnZSwgb3JcbiYjNDM7XHRcdFx0ICogb3JkZXItMCBwYWdlXG4mIzQzO1x0XHRcdCAqL1xuJiM0MztcdFx0XHRpZiAoc3RhdHVzID09IDEgfHxcbiYjNDM7XHRcdFx0ICAgIChwYWdlX2ZsYWdzIFx1MDAyNiBLUEZfQ09NUE9VTkRfSEVBRCkgfHxcbiYjNDM7XHRcdFx0ICAgICEocGFnZV9mbGFncyBcdTAwMjYgKEtQRl9DT01QT1VORF9IRUFEIHwgS1BGX0NPTVBPVU5EX1RBSUwpKSkge1xuJiM0MztcdFx0XHRcdGlmIChjdXJfb3JkZXIgXHUwMDNjIG5yX29yZGVycykge1xuJiM0MztcdFx0XHRcdFx0b3JkZXJzW2N1cl9vcmRlcl0mIzQzOyYjNDM7O1xuJiM0MztcdFx0XHRcdFx0Y3VyX29yZGVyID0gLTE7XG4mIzQzO1x0XHRcdFx0XHR2YWRkciA9IG5leHRfZm9saW9fdmFkZHI7XG4mIzQzO1x0XHRcdFx0fVxuJiM0MztcdFx0XHRcdGJyZWFrO1xuJiM0MztcdFx0XHR9XG4mIzQzO1xuJiM0MztcdFx0XHRjdXJfb3JkZXImIzQzOyYjNDM7O1xuJiM0MztcdFx0XHRuZXh0X2ZvbGlvX3ZhZGRyID0gdmFkZHIgJiM0MzsgKDFVTCBcdTAwM2NcdTAwM2MgKGN1cl9vcmRlciAmIzQzOyBwc2hpZnQoKSkpO1xuJiM0MztcdFx0fVxuJiM0MztcbiYjNDM7XHRcdGlmIChzdGF0dXMgXHUwMDNjIDApXG4mIzQzO1x0XHRcdHJldHVybiBzdGF0dXM7XG4mIzQzO1x0fVxuJiM0MztcdGlmIChjdXJfb3JkZXIgXHUwMDNlIDAgXHUwMDI2XHUwMDI2IGN1cl9vcmRlciBcdTAwM2MgbnJfb3JkZXJzKVxuJiM0MztcdFx0b3JkZXJzW2N1cl9vcmRlcl0mIzQzOyYjNDM7O1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuIGNoYXIgKl9fZ2V0X3NtYXBfZW50cnkodm9pZCAqYWRkciwgY29uc3QgY2hhciAqcGF0dGVybiwgY2hhciAqYnVmLCBzaXplX3QgbGVuKVxuIHtcbiBcdGludCByZXQ7XG5AQCAtMjI5LDcgJiM0MzszNTEsNyBAQCBjaGFyICpfX2dldF9zbWFwX2VudHJ5KHZvaWQgKmFkZHIsIGNvbnN0IGNoYXIgKnBhdHRlcm4sIGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbilcbiBcdHJldHVybiBlbnRyeTtcbiB9XG4gXG4tYm9vbCBfX2NoZWNrX2h1Z2Uodm9pZCAqYWRkciwgY2hhciAqcGF0dGVybiwgaW50IG5yX2hwYWdlcyxcbiYjNDM7c3RhdGljIGJvb2wgX19jaGVja19wbWRfaHVnZSh2b2lkICphZGRyLCBjaGFyICpwYXR0ZXJuLCBpbnQgbnJfaHBhZ2VzLFxuIFx0XHQgIHVpbnQ2NF90IGhwYWdlX3NpemUpXG4ge1xuIFx0Y2hhciBidWZmZXJbTUFYX0xJTkVfTEVOR1RIXTtcbkBAIC0yNDcsMTkgJiM0MzszNjksODQgQEAgYm9vbCBfX2NoZWNrX2h1Z2Uodm9pZCAqYWRkciwgY2hhciAqcGF0dGVybiwgaW50IG5yX2hwYWdlcyxcbiBcdHJldHVybiB0aHAgPT0gKG5yX2hwYWdlcyAqIChocGFnZV9zaXplIFx1MDAzZVx1MDAzZSAxMCkpO1xuIH1cbiBcbi1ib29sIGNoZWNrX2h1Z2VfYW5vbih2b2lkICphZGRyLCBpbnQgbnJfaHBhZ2VzLCB1aW50NjRfdCBocGFnZV9zaXplKVxuJiM0MztzdGF0aWMgYm9vbCBjaGVja19sYXJnZV9mb2xpb3Modm9pZCAqYWRkciwgc2l6ZV90IGxlbiwgaW50IG5yX2hwYWdlcyxcbiYjNDM7XHRcdHVpbnQ2NF90IGhwYWdlX3NpemUpXG4mIzQzO3tcbiYjNDM7XHRpbnQgb3JkZXIgPSAwLCBwYWdlc2l6ZSA9IGdldHBhZ2VzaXplKCk7XG4mIzQzO1x0dW5zaWduZWQgaW50IG5yX3BhZ2VzID0gaHBhZ2Vfc2l6ZSAvIHBhZ2VzaXplO1xuJiM0MztcdGludCBvcmRlcnNbTUFYX05SX09SREVSU10sIHN0YXR1cztcbiYjNDM7XHRpbnQgcGFnZW1hcF9mZCwga3BhZ2VmbGFnc19mZDtcbiYjNDM7XHRib29sIHJldCA9IGZhbHNlO1xuJiM0MztcbiYjNDM7XHRpZiAoIW5yX3BhZ2VzKVxuJiM0MztcdFx0a3NmdF9leGl0X2ZhaWxfbXNnKFwmIzM0O2ludmFsaWQgaHVnZXBhZ2Ugc2l6ZVxcblwmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdG9yZGVyID0gMzEgLSBfX2J1aWx0aW5fY2x6KG5yX3BhZ2VzKTtcbiYjNDM7XHRpZiAoIW9yZGVyIHx8IG9yZGVyIFx1MDAzZT0gTUFYX05SX09SREVSUylcbiYjNDM7XHRcdGtzZnRfZXhpdF9mYWlsX21zZyhcJiMzNDtpbnZhbGlkIG9yZGVyXFxuXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO1x0bWVtc2V0KG9yZGVycywgMCwgc2l6ZW9mKGludCkgKiBNQVhfTlJfT1JERVJTKTtcbiYjNDM7XHRwYWdlbWFwX2ZkID0gb3BlbihQQUdFTUFQX1BBVEgsIE9fUkRPTkxZKTtcbiYjNDM7XHRpZiAocGFnZW1hcF9mZCA9PSAtMSlcbiYjNDM7XHRcdGtzZnRfZXhpdF9mYWlsX21zZyhcJiMzNDtyZWFkIHBhZ2VtYXAgZmFpbFxcblwmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdGtwYWdlZmxhZ3NfZmQgPSBvcGVuKEtQQUdFRkxBR1NfUEFUSCwgT19SRE9OTFkpO1xuJiM0MztcdGlmIChrcGFnZWZsYWdzX2ZkID09IC0xKSB7XG4mIzQzO1x0XHRjbG9zZShwYWdlbWFwX2ZkKTtcbiYjNDM7XHRcdGtzZnRfZXhpdF9mYWlsX21zZyhcJiMzNDtyZWFkIGtwYWdlZmxhZ3MgZmFpbFxcblwmIzM0Oyk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRzdGF0dXMgPSBnYXRoZXJfZm9saW9fb3JkZXJzKGFkZHIsIGxlbiwgcGFnZW1hcF9mZCxcbiYjNDM7XHRcdFx0a3BhZ2VmbGFnc19mZCwgb3JkZXJzLCBNQVhfTlJfT1JERVJTKTtcbiYjNDM7XHRpZiAoc3RhdHVzKVxuJiM0MztcdFx0Z290byBvdXQ7XG4mIzQzO1xuJiM0MztcdGlmIChvcmRlcnNbb3JkZXJdID09IG5yX2hwYWdlcylcbiYjNDM7XHRcdHJldCA9IHRydWU7XG4mIzQzO1xuJiM0MztvdXQ6XG4mIzQzO1x0Y2xvc2UocGFnZW1hcF9mZCk7XG4mIzQzO1x0Y2xvc2Uoa3BhZ2VmbGFnc19mZCk7XG4mIzQzO1x0cmV0dXJuIHJldDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7Ym9vbCBjaGVja19odWdlX2Fub24odm9pZCAqYWRkciwgc2l6ZV90IGxlbiwgaW50IG5yX2hwYWdlcywgdWludDY0X3QgaHBhZ2Vfc2l6ZSlcbiB7XG4tXHRyZXR1cm4gX19jaGVja19odWdlKGFkZHIsIFwmIzM0O0Fub25IdWdlUGFnZXM6IFwmIzM0OywgbnJfaHBhZ2VzLCBocGFnZV9zaXplKTtcbiYjNDM7XHR1aW50NjRfdCBwbWRfcGFnZXNpemUgPSByZWFkX3BtZF9wYWdlc2l6ZSgpO1xuJiM0MztcbiYjNDM7XHRpZiAoIXBtZF9wYWdlc2l6ZSlcbiYjNDM7XHRcdGtzZnRfZXhpdF9mYWlsX21zZyhcJiMzNDtyZWFkaW5nIFBNRCBwYWdlc2l6ZSBmYWlsZWRcXG5cJiMzNDspO1xuJiM0MztcbiYjNDM7XHRpZiAoaHBhZ2Vfc2l6ZSA9PSBwbWRfcGFnZXNpemUpXG4mIzQzO1x0XHRyZXR1cm4gX19jaGVja19wbWRfaHVnZShhZGRyLCBcJiMzNDtBbm9uSHVnZVBhZ2VzOiBcJiMzNDssIG5yX2hwYWdlcywgaHBhZ2Vfc2l6ZSk7XG4mIzQzO1xuJiM0MztcdHJldHVybiBjaGVja19sYXJnZV9mb2xpb3MoYWRkciwgbGVuLCBucl9ocGFnZXMsIGhwYWdlX3NpemUpO1xuIH1cbiBcbi1ib29sIGNoZWNrX2h1Z2VfZmlsZSh2b2lkICphZGRyLCBpbnQgbnJfaHBhZ2VzLCB1aW50NjRfdCBocGFnZV9zaXplKVxuJiM0Mztib29sIGNoZWNrX2h1Z2VfZmlsZSh2b2lkICphZGRyLCBzaXplX3QgbGVuLCBpbnQgbnJfaHBhZ2VzLCB1aW50NjRfdCBocGFnZV9zaXplKVxuIHtcbi1cdHJldHVybiBfX2NoZWNrX2h1Z2UoYWRkciwgXCYjMzQ7RmlsZVBtZE1hcHBlZDpcJiMzNDssIG5yX2hwYWdlcywgaHBhZ2Vfc2l6ZSk7XG4mIzQzO1x0dWludDY0X3QgcG1kX3BhZ2VzaXplID0gcmVhZF9wbWRfcGFnZXNpemUoKTtcbiYjNDM7XG4mIzQzO1x0aWYgKCFwbWRfcGFnZXNpemUpXG4mIzQzO1x0XHRrc2Z0X2V4aXRfZmFpbF9tc2coXCYjMzQ7cmVhZGluZyBQTUQgcGFnZXNpemUgZmFpbGVkXFxuXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO1x0aWYgKGhwYWdlX3NpemUgPT0gcG1kX3BhZ2VzaXplKVxuJiM0MztcdFx0cmV0dXJuIF9fY2hlY2tfcG1kX2h1Z2UoYWRkciwgXCYjMzQ7RmlsZVBtZE1hcHBlZDpcJiMzNDssIG5yX2hwYWdlcywgaHBhZ2Vfc2l6ZSk7XG4mIzQzO1xuJiM0MztcdHJldHVybiBjaGVja19sYXJnZV9mb2xpb3MoYWRkciwgbGVuLCBucl9ocGFnZXMsIGhwYWdlX3NpemUpO1xuIH1cbiBcbi1ib29sIGNoZWNrX2h1Z2Vfc2htZW0odm9pZCAqYWRkciwgaW50IG5yX2hwYWdlcywgdWludDY0X3QgaHBhZ2Vfc2l6ZSlcbiYjNDM7Ym9vbCBjaGVja19odWdlX3NobWVtKHZvaWQgKmFkZHIsIHNpemVfdCBsZW4sIGludCBucl9ocGFnZXMsIHVpbnQ2NF90IGhwYWdlX3NpemUpXG4ge1xuLVx0cmV0dXJuIF9fY2hlY2tfaHVnZShhZGRyLCBcJiMzNDtTaG1lbVBtZE1hcHBlZDpcJiMzNDssIG5yX2hwYWdlcywgaHBhZ2Vfc2l6ZSk7XG4mIzQzO1x0dWludDY0X3QgcG1kX3BhZ2VzaXplID0gcmVhZF9wbWRfcGFnZXNpemUoKTtcbiYjNDM7XG4mIzQzO1x0aWYgKCFwbWRfcGFnZXNpemUpXG4mIzQzO1x0XHRrc2Z0X2V4aXRfZmFpbF9tc2coXCYjMzQ7cmVhZGluZyBQTUQgcGFnZXNpemUgZmFpbGVkXFxuXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO1x0aWYgKGhwYWdlX3NpemUgPT0gcG1kX3BhZ2VzaXplKVxuJiM0MztcdFx0cmV0dXJuIF9fY2hlY2tfcG1kX2h1Z2UoYWRkciwgXCYjMzQ7U2htZW1QbWRNYXBwZWQ6XCYjMzQ7LCBucl9ocGFnZXMsIGhwYWdlX3NpemUpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gY2hlY2tfbGFyZ2VfZm9saW9zKGFkZHIsIGxlbiwgbnJfaHBhZ2VzLCBocGFnZV9zaXplKTtcbiB9XG4gXG4gaW50NjRfdCBhbGxvY2F0ZV90cmFuc2h1Z2Uodm9pZCAqcHRyLCBpbnQgcGFnZW1hcF9mZClcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS92bV91dGlsLmggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS92bV91dGlsLmhcbmluZGV4IDc3OTkxNTRiNjdlZWQuLjlhNDlhZjg4NzAyZTQgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS92bV91dGlsLmhcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ZtX3V0aWwuaFxuQEAgLTkwLDExICYjNDM7OTAsMTMgQEAgdm9pZCBjbGVhcl9zb2Z0ZGlydHkodm9pZCk7XG4gYm9vbCBjaGVja19mb3JfcGF0dGVybihGSUxFICpmcCwgY29uc3QgY2hhciAqcGF0dGVybiwgY2hhciAqYnVmLCBzaXplX3QgbGVuKTtcbiB1aW50NjRfdCByZWFkX3BtZF9wYWdlc2l6ZSh2b2lkKTtcbiB1bnNpZ25lZCBsb25nIHJzc19hbm9uKHZvaWQpO1xuLWJvb2wgY2hlY2tfaHVnZV9hbm9uKHZvaWQgKmFkZHIsIGludCBucl9ocGFnZXMsIHVpbnQ2NF90IGhwYWdlX3NpemUpO1xuLWJvb2wgY2hlY2tfaHVnZV9maWxlKHZvaWQgKmFkZHIsIGludCBucl9ocGFnZXMsIHVpbnQ2NF90IGhwYWdlX3NpemUpO1xuLWJvb2wgY2hlY2tfaHVnZV9zaG1lbSh2b2lkICphZGRyLCBpbnQgbnJfaHBhZ2VzLCB1aW50NjRfdCBocGFnZV9zaXplKTtcbiYjNDM7Ym9vbCBjaGVja19odWdlX2Fub24odm9pZCAqYWRkciwgc2l6ZV90IGxlbiwgaW50IG5yX2hwYWdlcywgdWludDY0X3QgaHBhZ2Vfc2l6ZSk7XG4mIzQzO2Jvb2wgY2hlY2tfaHVnZV9maWxlKHZvaWQgKmFkZHIsIHNpemVfdCBsZW4sIGludCBucl9ocGFnZXMsIHVpbnQ2NF90IGhwYWdlX3NpemUpO1xuJiM0Mztib29sIGNoZWNrX2h1Z2Vfc2htZW0odm9pZCAqYWRkciwgc2l6ZV90IGxlbiwgaW50IG5yX2hwYWdlcywgdWludDY0X3QgaHBhZ2Vfc2l6ZSk7XG4gaW50NjRfdCBhbGxvY2F0ZV90cmFuc2h1Z2Uodm9pZCAqcHRyLCBpbnQgcGFnZW1hcF9mZCk7XG4gaW50IHBhZ2VmbGFnc19nZXQodW5zaWduZWQgbG9uZyBwZm4sIGludCBrcGFnZWZsYWdzX2ZkLCB1aW50NjRfdCAqZmxhZ3MpO1xuJiM0MztpbnQgZ2F0aGVyX2ZvbGlvX29yZGVycyhjaGFyICp2YWRkcl9zdGFydCwgc2l6ZV90IGxlbixcbiYjNDM7XHRcdGludCBwYWdlbWFwX2ZkLCBpbnQga3BhZ2VmbGFnc19mZCwgaW50IG9yZGVyc1tdLCBpbnQgbnJfb3JkZXJzKTtcbiBcbiBpbnQgdWZmZF9yZWdpc3RlcihpbnQgdWZmZCwgdm9pZCAqYWRkciwgdWludDY0X3QgbGVuLFxuIFx0XHQgIGJvb2wgbWlzcywgYm9vbCB3cCwgYm9vbCBtaW5vcik7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMDQ6MDc8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgdXNlci1zcGFjZSBzZWxmdGVzdHMgaW4gdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vIGFuZCBkb2VzIG5vdCBtYWtlIGFueSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCBjb2RlIGl0c2VsZi4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA1NGJjNzg1M2Q0ZjVmNWU1ZWQ4ZGZiYjlmZmZmYzM5NWMzM2Q0ZGE0CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFRodSBBdWcgNiAwNDowNzoxMCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2ZvbGlvX3NwbGl0X3JhY2VfdGVzdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZm9saW9fc3BsaXRfcmFjZV90ZXN0LmMKaW5kZXggNjMyOWUzN2ZmZjRjOS4uNDViODRmN2IzNjRlMCAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZm9saW9fc3BsaXRfcmFjZV90ZXN0LmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZm9saW9fc3BsaXRfcmFjZV90ZXN0LmMKQEAgLTE4Miw3ICYjNDM7MTgyLDcgQEAgc3RhdGljIHVpbnQ2NF90IHJ1bl9pdGVyYXRpb24odm9pZCkKIAlmb3IgKGkgPSAwOyBpICZsdDsgVE9UQUxfUEFHRVM7IGkmIzQzOyYjNDM7KQogCQlmaWxsX3BhZ2UobW1hcF9iYXNlLCBpKTsKIAotCWlmICghY2hlY2tfaHVnZV9zaG1lbShtbWFwX2Jhc2UsIE5SX1BNRF9QQUdFLCBwbWRfcGFnZXNpemUpKQomIzQzOwlpZiAoIWNoZWNrX2h1Z2Vfc2htZW0obW1hcF9iYXNlLCBGSUxFX1NJWkUsIE5SX1BNRF9QQUdFLCBwbWRfcGFnZXNpemUpKQogCQlrc2Z0X2V4aXRfZmFpbF9tc2coJiMzNDtObyBzaG1lbSBUSFAgaXMgYWxsb2NhdGVkXG4mIzM0Oyk7CiAKIAlpZiAocHRocmVhZF9iYXJyaWVyX2luaXQoJmFtcDtjdGwuYmFycmllciwgTlVMTCwgTlVNX1JFQURFUl9USFJFQURTICYjNDM7IDEpICE9IDApCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9raHVnZXBhZ2VkLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9raHVnZXBhZ2VkLmMKaW5kZXggYjI1NGJhZjllMGI3NS4uN2Y4N2FlZWQzMDFjNCAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0va2h1Z2VwYWdlZC5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2todWdlcGFnZWQuYwpAQCAtMjYsOSAmIzQzOzI2LDExIEBACiAKICNkZWZpbmUgQkFTRV9BRERSICgodm9pZCAqKSgxVUwgJmx0OyZsdDsgMzApKQogc3RhdGljIHVuc2lnbmVkIGxvbmcgaHBhZ2VfcG1kX3NpemU7CiYjNDM7c3RhdGljIGludCBocGFnZV9wbWRfb3JkZXI7CiBzdGF0aWMgdW5zaWduZWQgbG9uZyBwYWdlX3NpemU7CiBzdGF0aWMgaW50IGhwYWdlX3BtZF9ucjsKIHN0YXRpYyBpbnQgYW5vbl9vcmRlcjsKJiM0MztzdGF0aWMgaW50IGNvbGxhcHNlX29yZGVyOwogCiAjZGVmaW5lIFBJRF9TTUFQUyAmIzM0Oy9wcm9jL3NlbGYvc21hcHMmIzM0OwogI2RlZmluZSBURVNUX0ZJTEUgJiMzNDtjb2xsYXBzZV90ZXN0X2ZpbGUmIzM0OwpAQCAtNTEsNyAmIzQzOzUzLDcgQEAgc3RydWN0IG1lbV9vcHMgewogCXZvaWQgKigqc2V0dXBfYXJlYSkoaW50IG5yX2hwYWdlcyk7CiAJdm9pZCAoKmNsZWFudXBfYXJlYSkodm9pZCAqcCwgdW5zaWduZWQgbG9uZyBzaXplKTsKIAl2b2lkICgqZmF1bHQpKHZvaWQgKnAsIHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kKTsKLQlib29sICgqY2hlY2tfaHVnZSkodm9pZCAqYWRkciwgaW50IG5yX2hwYWdlcyk7CiYjNDM7CWJvb2wgKCpjaGVja19odWdlKSh2b2lkICphZGRyLCBzaXplX3QgbGVuLCBpbnQgbnJfaHBhZ2VzLCB1bnNpZ25lZCBsb25nIGhwYWdlX3NpemUpOwogCWNvbnN0IGNoYXIgKm5hbWU7CiB9OwogCkBAIC02OSw2ICYjNDM7NzEsNyBAQCBzdHJ1Y3QgY29sbGFwc2VfY29udGV4dCB7CiB9OwogCiBzdGF0aWMgc3RydWN0IGNvbGxhcHNlX2NvbnRleHQgKmtodWdlcGFnZWRfY29udGV4dDsKJiM0MztzdGF0aWMgc3RydWN0IGNvbGxhcHNlX2NvbnRleHQgKm10aHBfa2h1Z2VwYWdlZF9jb250ZXh0Owogc3RhdGljIHN0cnVjdCBjb2xsYXBzZV9jb250ZXh0ICptYWR2aXNlX2NvbnRleHQ7CiAKIHN0cnVjdCBmaWxlX2luZm8gewpAQCAtMjk1LDcgJiM0MzsyOTgsNyBAQCBzdGF0aWMgdm9pZCAqYWxsb2NfaHBhZ2Uoc3RydWN0IG1lbV9vcHMgKm9wcykKIAlrc2Z0X3ByaW50X21zZygmIzM0O0FsbG9jYXRlIGh1Z2UgcGFnZS4uLiYjMzQ7KTsKIAlpZiAobWFkdmlzZV9jb2xsYXBzZV9yZXRyeShwLCBocGFnZV9wbWRfc2l6ZSkpCiAJCWtzZnRfZXhpdF9mYWlsX3BlcnJvcigmIzM0O21hZHZpc2UoTUFEVl9DT0xMQVBTRSkmIzM0Oyk7Ci0JaWYgKCFvcHMtJmd0O2NoZWNrX2h1Z2UocCwgMSkpCiYjNDM7CWlmICghb3BzLSZndDtjaGVja19odWdlKHAsIGhwYWdlX3BtZF9zaXplLCAxLCBocGFnZV9wbWRfc2l6ZSkpCiAJCWtzZnRfZXhpdF9mYWlsX3BlcnJvcigmIzM0O21hZHZpc2UoTUFEVl9DT0xMQVBTRSkmIzM0Oyk7CiAJaWYgKG1hZHZpc2UocCwgaHBhZ2VfcG1kX3NpemUsIE1BRFZfSFVHRVBBR0UpKQogCQlrc2Z0X2V4aXRfZmFpbF9wZXJyb3IoJiMzNDttYWR2aXNlKE1BRFZfSFVHRVBBR0UpJiMzNDspOwpAQCAtMzI5LDkgJiM0MzszMzIsMTAgQEAgc3RhdGljIHZvaWQgYW5vbl9mYXVsdCh2b2lkICpwLCB1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCkKIAlmaWxsX21lbW9yeShwLCBzdGFydCwgZW5kKTsKIH0KIAotc3RhdGljIGJvb2wgYW5vbl9jaGVja19odWdlKHZvaWQgKmFkZHIsIGludCBucl9ocGFnZXMpCiYjNDM7c3RhdGljIGJvb2wgYW5vbl9jaGVja19odWdlKHZvaWQgKmFkZHIsIHNpemVfdCBsZW4sIGludCBucl9ocGFnZXMsCiYjNDM7CQl1bnNpZ25lZCBsb25nIGhwYWdlX3NpemUpCiB7Ci0JcmV0dXJuIGNoZWNrX2h1Z2VfYW5vbihhZGRyLCBucl9ocGFnZXMsIGhwYWdlX3BtZF9zaXplKTsKJiM0MzsJcmV0dXJuIGNoZWNrX2h1Z2VfYW5vbihhZGRyLCBsZW4sIG5yX2hwYWdlcywgaHBhZ2Vfc2l6ZSk7CiB9CiAKIHN0YXRpYyB2b2lkICpmaWxlX3NldHVwX2FyZWFfY29tbW9uKGludCBucl9ocGFnZXMsIGVudW0gZmlsZV9zZXR1cF9vcHMgc2V0dXApCkBAIC00MzEsMTMgJiM0Mzs0MzUsMTQgQEAgc3RhdGljIHZvaWQgZmlsZV9mYXVsdF93cml0ZSh2b2lkICpwLCB1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCkKIAkJa3NmdF9leGl0X2ZhaWxfcGVycm9yKCYjMzQ7bWFkdmlzZShNQURWX1BPUFVMQVRFX1dSSVRFKSYjMzQ7KTsKIH0KIAotc3RhdGljIGJvb2wgZmlsZV9jaGVja19odWdlKHZvaWQgKmFkZHIsIGludCBucl9ocGFnZXMpCiYjNDM7c3RhdGljIGJvb2wgZmlsZV9jaGVja19odWdlKHZvaWQgKmFkZHIsIHNpemVfdCBsZW4sIGludCBucl9ocGFnZXMsCiYjNDM7CQl1bnNpZ25lZCBsb25nIGhwYWdlX3NpemUpCiB7CiAJc3dpdGNoIChmaW5mby50eXBlKSB7CiAJY2FzZSBWTUFfRklMRToKLQkJcmV0dXJuIGNoZWNrX2h1Z2VfZmlsZShhZGRyLCBucl9ocGFnZXMsIGhwYWdlX3BtZF9zaXplKTsKJiM0MzsJCXJldHVybiBjaGVja19odWdlX2ZpbGUoYWRkciwgbGVuLCBucl9ocGFnZXMsIGhwYWdlX3NpemUpOwogCWNhc2UgVk1BX1NITUVNOgotCQlyZXR1cm4gY2hlY2tfaHVnZV9zaG1lbShhZGRyLCBucl9ocGFnZXMsIGhwYWdlX3BtZF9zaXplKTsKJiM0MzsJCXJldHVybiBjaGVja19odWdlX3NobWVtKGFkZHIsIGxlbiwgbnJfaHBhZ2VzLCBocGFnZV9zaXplKTsKIAlkZWZhdWx0OgogCQlleGl0KEVYSVRfRkFJTFVSRSk7CiAJCXJldHVybiBmYWxzZTsKQEAgLTQ2Nyw5ICYjNDM7NDcyLDEwIEBAIHN0YXRpYyB2b2lkIHNobWVtX2NsZWFudXBfYXJlYSh2b2lkICpwLCB1bnNpZ25lZCBsb25nIHNpemUpCiAJY2xvc2UoZmluZm8uZmQpOwogfQogCi1zdGF0aWMgYm9vbCBzaG1lbV9jaGVja19odWdlKHZvaWQgKmFkZHIsIGludCBucl9ocGFnZXMpCiYjNDM7c3RhdGljIGJvb2wgc2htZW1fY2hlY2tfaHVnZSh2b2lkICphZGRyLCBzaXplX3QgbGVuLCBpbnQgbnJfaHBhZ2VzLAomIzQzOwkJdW5zaWduZWQgbG9uZyBocGFnZV9zaXplKQogewotCXJldHVybiBjaGVja19odWdlX3NobWVtKGFkZHIsIG5yX2hwYWdlcywgaHBhZ2VfcG1kX3NpemUpOwomIzQzOwlyZXR1cm4gY2hlY2tfaHVnZV9zaG1lbShhZGRyLCBsZW4sIG5yX2hwYWdlcywgaHBhZ2Vfc2l6ZSk7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgbWVtX29wcyBfX2Fub25fb3BzID0gewpAQCAtNTUyLDcgJiM0Mzs1NTgsNyBAQCBzdGF0aWMgdm9pZCBfX21hZHZpc2VfY29sbGFwc2UoY29uc3QgY2hhciAqbXNnLCBjaGFyICpwLCBpbnQgbnJfaHBhZ2VzLAogCXJldCA9IG1hZHZpc2VfY29sbGFwc2VfcmV0cnkocCwgbnJfaHBhZ2VzICogaHBhZ2VfcG1kX3NpemUpOwogCWlmICgoKGJvb2wpcmV0KSA9PSBleHBlY3QpCiAJCWZhaWwoJiMzNDtGYWlsOiBCYWQgcmV0dXJuIHZhbHVlJiMzNDspOwotCWVsc2UgaWYgKCFvcHMtJmd0O2NoZWNrX2h1Z2UocCwgZXhwZWN0ID8gbnJfaHBhZ2VzIDogMCkpCiYjNDM7CWVsc2UgaWYgKCFvcHMtJmd0O2NoZWNrX2h1Z2UocCwgbnJfaHBhZ2VzICogaHBhZ2VfcG1kX3NpemUsIGV4cGVjdCA/IG5yX2hwYWdlcyA6IDAsIGhwYWdlX3BtZF9zaXplKSkKIAkJZmFpbCgmIzM0O0ZhaWw6IGNoZWNrX2h1Z2UoKSYjMzQ7KTsKIAllbHNlCiAJCXN1Y2Nlc3MoJiMzNDtPSyYjMzQ7KTsKQEAgLTU2NCwzMCAmIzQzOzU3MCwzMSBAQCBzdGF0aWMgdm9pZCBtYWR2aXNlX2NvbGxhcHNlKGNvbnN0IGNoYXIgKm1zZywgY2hhciAqcCwgaW50IG5yX2hwYWdlcywKIAkJCSAgICAgc3RydWN0IG1lbV9vcHMgKm9wcywgYm9vbCBleHBlY3QpCiB7CiAJLyogU2FuaXR5IGNoZWNrICovCi0JaWYgKCFvcHMtJmd0O2NoZWNrX2h1Z2UocCwgMCkpCiYjNDM7CWlmICghb3BzLSZndDtjaGVja19odWdlKHAsIG5yX2hwYWdlcyAqIGhwYWdlX3BtZF9zaXplLCAwLCBocGFnZV9wbWRfc2l6ZSkpCiAJCWtzZnRfZXhpdF9mYWlsX21zZygmIzM0O1VuZXhwZWN0ZWQgaHVnZSBwYWdlXG4mIzM0Oyk7CiAJX19tYWR2aXNlX2NvbGxhcHNlKG1zZywgcCwgbnJfaHBhZ2VzLCBvcHMsIGV4cGVjdCk7CiB9CiAKICNkZWZpbmUgVElDSyA1MDAwMDAKLXN0YXRpYyBib29sIHdhaXRfZm9yX3NjYW4oY29uc3QgY2hhciAqbXNnLCBjaGFyICpwLCBpbnQgbnJfaHBhZ2VzLAotCQkJICBzdHJ1Y3QgbWVtX29wcyAqb3BzKQomIzQzO3N0YXRpYyBib29sIHdhaXRfZm9yX3NjYW4oY29uc3QgY2hhciAqbXNnLCBjaGFyICpwLCBzaXplX3QgbGVuLAomIzQzOwkJaW50IG5yX2hwYWdlcywgaW50IGNvbGxhcF9vcmRlciwgc3RydWN0IG1lbV9vcHMgKm9wcykKIHsKJiM0MzsJdW5zaWduZWQgbG9uZyBocGFnZV9zaXplID0gcGFnZV9zaXplICZsdDsmbHQ7IGNvbGxhcF9vcmRlcjsKIAlpbnQgZnVsbF9zY2FuczsKIAlpbnQgdGltZW91dCA9IDY7IC8qIDMgc2Vjb25kcyAqLwogCiAJLyogU2FuaXR5IGNoZWNrICovCi0JaWYgKCFvcHMtJmd0O2NoZWNrX2h1Z2UocCwgMCkpCiYjNDM7CWlmICghb3BzLSZndDtjaGVja19odWdlKHAsIGxlbiwgMCwgaHBhZ2Vfc2l6ZSkpCiAJCWtzZnRfZXhpdF9mYWlsX21zZygmIzM0O1VuZXhwZWN0ZWQgaHVnZSBwYWdlXG4mIzM0Oyk7CiAKLQltYWR2aXNlKHAsIG5yX2hwYWdlcyAqIGhwYWdlX3BtZF9zaXplLCBNQURWX0hVR0VQQUdFKTsKJiM0MzsJbWFkdmlzZShwLCBsZW4sIE1BRFZfSFVHRVBBR0UpOwogCiAJLyogV2FpdCB1bnRpbCB0aGUgc2Vjb25kIGZ1bGxfc2NhbiBjb21wbGV0ZWQgKi8KIAlmdWxsX3NjYW5zID0gdGhwX3JlYWRfbnVtKCYjMzQ7a2h1Z2VwYWdlZC9mdWxsX3NjYW5zJiMzNDspICYjNDM7IDI7CiAKIAlrc2Z0X3ByaW50X21zZygmIzM0OyVzLi4uJiMzNDssIG1zZyk7CiAJd2hpbGUgKHRpbWVvdXQtLSkgewotCQlpZiAob3BzLSZndDtjaGVja19odWdlKHAsIG5yX2hwYWdlcykpCiYjNDM7CQlpZiAob3BzLSZndDtjaGVja19odWdlKHAsIGxlbiwgbnJfaHBhZ2VzLCBocGFnZV9zaXplKSkKIAkJCWJyZWFrOwogCQlpZiAodGhwX3JlYWRfbnVtKCYjMzQ7a2h1Z2VwYWdlZC9mdWxsX3NjYW5zJiMzNDspICZndDs9IGZ1bGxfc2NhbnMpCiAJCQlicmVhazsKQEAgLTYwMSw2ICYjNDM7NjA4LDggQEAgc3RhdGljIGJvb2wgd2FpdF9mb3Jfc2Nhbihjb25zdCBjaGFyICptc2csIGNoYXIgKnAsIGludCBucl9ocGFnZXMsCiBzdGF0aWMgdm9pZCBraHVnZXBhZ2VkX2NvbGxhcHNlKGNvbnN0IGNoYXIgKm1zZywgY2hhciAqcCwgaW50IG5yX2hwYWdlcywKIAkJCQlzdHJ1Y3QgbWVtX29wcyAqb3BzLCBib29sIGV4cGVjdCkKIHsKJiM0MzsJc2l6ZV90IGxlbiA9IG5yX2hwYWdlcyAqIGhwYWdlX3BtZF9zaXplOwomIzQzOwogCS8qCiAJICogcmVhZCZhbXA7d3JpdGUgZmlsZSBjb2xsYXBzZSBmYWlscyBzaW5jZSBraHVnZXBhZ2VkIGRvZXMgbm90IGZsdXNoCiAJICogdGhlIHRhcmdldCBkaXJ0eSBmb2xpb3MKQEAgLTYwOCw3ICYjNDM7NjE3LDcgQEAgc3RhdGljIHZvaWQga2h1Z2VwYWdlZF9jb2xsYXBzZShjb25zdCBjaGFyICptc2csIGNoYXIgKnAsIGludCBucl9ocGFnZXMsCiAJaWYgKCFpc190bXBmcyhvcHMpICZhbXA7JmFtcDsgb3BzID09ICZhbXA7X19yZWFkX3dyaXRlX2ZpbGVfd3JpdGVfb3BzKQogCQlleHBlY3QgPSBmYWxzZTsKIAotCWlmICh3YWl0X2Zvcl9zY2FuKG1zZywgcCwgbnJfaHBhZ2VzLCBvcHMpKSB7CiYjNDM7CWlmICh3YWl0X2Zvcl9zY2FuKG1zZywgcCwgbGVuLCBucl9ocGFnZXMsIGhwYWdlX3BtZF9vcmRlciwgb3BzKSkgewogCQlpZiAoZXhwZWN0KQogCQkJZmFpbCgmIzM0O1RpbWVvdXQmIzM0Oyk7CiAJCWVsc2UKQEAgLTYyNCwxMCAmIzQzOzYzMyw1NCBAQCBzdGF0aWMgdm9pZCBraHVnZXBhZ2VkX2NvbGxhcHNlKGNvbnN0IGNoYXIgKm1zZywgY2hhciAqcCwgaW50IG5yX2hwYWdlcywKIAlpZiAob3BzICE9ICZhbXA7X19hbm9uX29wcykKIAkJb3BzLSZndDtmYXVsdChwLCAwLCBucl9ocGFnZXMgKiBocGFnZV9wbWRfc2l6ZSk7CiAKLQlpZiAob3BzLSZndDtjaGVja19odWdlKHAsIGV4cGVjdCA/IG5yX2hwYWdlcyA6IDApKQomIzQzOwlpZiAob3BzLSZndDtjaGVja19odWdlKHAsIGxlbiwgZXhwZWN0ID8gbnJfaHBhZ2VzIDogMCwgaHBhZ2VfcG1kX3NpemUpKQomIzQzOwkJc3VjY2VzcygmIzM0O09LJiMzNDspOwomIzQzOwllbHNlCiYjNDM7CQlmYWlsKCYjMzQ7RmFpbCYjMzQ7KTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgbXRocF9raHVnZXBhZ2VkX2NvbGxhcHNlKGNvbnN0IGNoYXIgKm1zZywgY2hhciAqcCwgaW50IG5yX2hwYWdlcywKJiM0MzsJCQkJc3RydWN0IG1lbV9vcHMgKm9wcywgYm9vbCBleHBlY3QpCiYjNDM7ewomIzQzOwl1bnNpZ25lZCBsb25nIGhwYWdlX3NpemUgPSBwYWdlX3NpemUgJmx0OyZsdDsgY29sbGFwc2Vfb3JkZXI7CiYjNDM7CXN0cnVjdCB0aHBfc2V0dGluZ3Mgc2V0dGluZ3MgPSAqdGhwX2N1cnJlbnRfc2V0dGluZ3MoKTsKJiM0MzsJLyogbVRIUCBjb2xscGFzZSBvbmx5IGFsbG9jYXRlcyBQTUQgc2l6ZWQgbWVtb3J5ICovCiYjNDM7CXNpemVfdCBsZW4gPSBocGFnZV9wbWRfc2l6ZTsKJiM0MzsKJiM0MzsJLyogU2V0IG1USFAgc2V0dGluZyBmb3IgbVRIUCBjb2xsYXBzZSAqLwomIzQzOwlpZiAob3BzID09ICZhbXA7X19hbm9uX29wcykgewomIzQzOwkJc2V0dGluZ3MudGhwX2VuYWJsZWQgPSBUSFBfTkVWRVI7CiYjNDM7CQlzZXR0aW5ncy5odWdlcGFnZXNbY29sbGFwc2Vfb3JkZXJdLmVuYWJsZWQgPSBUSFBfTUFEVklTRTsKJiM0MzsJfQomIzQzOwomIzQzOwl0aHBfcHVzaF9zZXR0aW5ncygmYW1wO3NldHRpbmdzKTsKJiM0MzsKJiM0MzsJaWYgKHdhaXRfZm9yX3NjYW4obXNnLCBwLCBsZW4sIG5yX2hwYWdlcywgY29sbGFwc2Vfb3JkZXIsIG9wcykpIHsKJiM0MzsJCWlmIChleHBlY3QpCiYjNDM7CQkJZmFpbCgmIzM0O1RpbWVvdXQmIzM0Oyk7CiYjNDM7CQllbHNlCiYjNDM7CQkJc3VjY2VzcygmIzM0O09LJiMzNDspOwomIzQzOwomIzQzOwkJLyogUmVzdG9yZSBUSFAgc2V0dGluZ3MgZm9yIG1USFAgY29sbGFwc2UuICovCiYjNDM7CQl0aHBfcG9wX3NldHRpbmdzKCk7CiYjNDM7CQlyZXR1cm47CiYjNDM7CX0KJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogRm9yIGZpbGUgYW5kIHNobWVtIG1lbW9yeSwga2h1Z2VwYWdlZCBvbmx5IHJldHJhY3RzIHB0ZSBlbnRyaWVzIGFmdGVyCiYjNDM7CSAqIHB1dHRpbmcgdGhlIG5ldyBodWdlcGFnZSBpbiB0aGUgcGFnZSBjYWNoZS4gVGhlIGh1Z2VwYWdlIG11c3QgYmUKJiM0MzsJICogc3Vic2VxdWVudGx5IHJlZmF1bHRlZCB0byBpbnN0YWxsIHRoZSBwbWQgbWFwcGluZyBmb3IgdGhlIG1tLgomIzQzOwkgKi8KJiM0MzsJaWYgKG9wcyAhPSAmYW1wO19fYW5vbl9vcHMpCiYjNDM7CQlvcHMtJmd0O2ZhdWx0KHAsIDAsIG5yX2hwYWdlcyAqIGhwYWdlX3NpemUpOwomIzQzOwomIzQzOwlpZiAob3BzLSZndDtjaGVja19odWdlKHAsIGxlbiwgZXhwZWN0ID8gbnJfaHBhZ2VzIDogMCwgaHBhZ2Vfc2l6ZSkpCiAJCXN1Y2Nlc3MoJiMzNDtPSyYjMzQ7KTsKIAllbHNlCiAJCWZhaWwoJiMzNDtGYWlsJiMzNDspOwomIzQzOwomIzQzOwkvKiBSZXN0b3JlIFRIUCBzZXR0aW5ncyBmb3IgbVRIUCBjb2xsYXBzZS4gKi8KJiM0MzsJdGhwX3BvcF9zZXR0aW5ncygpOwogfQogCiBzdGF0aWMgc3RydWN0IGNvbGxhcHNlX2NvbnRleHQgX19raHVnZXBhZ2VkX2NvbnRleHQgPSB7CkBAIC02MzYsNiAmIzQzOzY4OSwxMiBAQCBzdGF0aWMgc3RydWN0IGNvbGxhcHNlX2NvbnRleHQgX19raHVnZXBhZ2VkX2NvbnRleHQgPSB7CiAJLm5hbWUgPSAmIzM0O2todWdlcGFnZWQmIzM0OywKIH07CiAKJiM0MztzdGF0aWMgc3RydWN0IGNvbGxhcHNlX2NvbnRleHQgX19tdGhwX2todWdlcGFnZWRfY29udGV4dCA9IHsKJiM0MzsJLmNvbGxhcHNlID0gJmFtcDttdGhwX2todWdlcGFnZWRfY29sbGFwc2UsCiYjNDM7CS5lbmZvcmNlX3B0ZV9zY2FuX2xpbWl0cyA9IHRydWUsCiYjNDM7CS5uYW1lID0gJiMzNDttdGhwX2todWdlcGFnZWQmIzM0OywKJiM0Mzt9OwomIzQzOwogc3RhdGljIHN0cnVjdCBjb2xsYXBzZV9jb250ZXh0IF9fbWFkdmlzZV9jb250ZXh0ID0gewogCS5jb2xsYXBzZSA9ICZhbXA7bWFkdmlzZV9jb2xsYXBzZSwKIAkuZW5mb3JjZV9wdGVfc2Nhbl9saW1pdHMgPSBmYWxzZSwKQEAgLTY1Myw3ICYjNDM7NzEyLDcgQEAgc3RhdGljIHZvaWQgYWxsb2NfYXRfZmF1bHQodm9pZCkKIAlwID0gYWxsb2NfbWFwcGluZygxKTsKIAkqcCA9IDE7CiAJa3NmdF9wcmludF9tc2coJiMzNDtBbGxvY2F0ZSBodWdlIHBhZ2Ugb24gZmF1bHQuLi4mIzM0Oyk7Ci0JaWYgKGNoZWNrX2h1Z2VfYW5vbihwLCAxLCBocGFnZV9wbWRfc2l6ZSkpCiYjNDM7CWlmIChjaGVja19odWdlX2Fub24ocCwgaHBhZ2VfcG1kX3NpemUsIDEsIGhwYWdlX3BtZF9zaXplKSkKIAkJc3VjY2VzcygmIzM0O09LJiMzNDspOwogCWVsc2UKIAkJZmFpbCgmIzM0O0ZhaWwmIzM0Oyk7CkBAIC02NjIsNyAmIzQzOzcyMSw3IEBAIHN0YXRpYyB2b2lkIGFsbG9jX2F0X2ZhdWx0KHZvaWQpCiAKIAltYWR2aXNlKHAsIHBhZ2Vfc2l6ZSwgTUFEVl9ET05UTkVFRCk7CiAJa3NmdF9wcmludF9tc2coJiMzNDtTcGxpdCBodWdlIFBNRCBvbiBNQURWX0RPTlRORUVELi4uJiMzNDspOwotCWlmIChjaGVja19odWdlX2Fub24ocCwgMCwgaHBhZ2VfcG1kX3NpemUpKQomIzQzOwlpZiAoY2hlY2tfaHVnZV9hbm9uKHAsIGhwYWdlX3BtZF9zaXplLCAwLCBocGFnZV9wbWRfc2l6ZSkpCiAJCXN1Y2Nlc3MoJiMzNDtPSyYjMzQ7KTsKIAllbHNlCiAJCWZhaWwoJiMzNDtGYWlsJiMzNDspOwpAQCAtNjc0LDEwICYjNDM7NzMzLDE3IEBAIHN0YXRpYyB2b2lkIGFsbG9jX2F0X2ZhdWx0KHZvaWQpCiBzdGF0aWMgdm9pZCBjb2xsYXBzZV9mdWxsKHN0cnVjdCBjb2xsYXBzZV9jb250ZXh0ICpjLCBzdHJ1Y3QgbWVtX29wcyAqb3BzKQogewogCXZvaWQgKnA7Ci0JaW50IG5yX2hwYWdlcyA9IDQ7CiYjNDM7CWludCBucl9wbWRzID0gNCwgbnJfaHBhZ2VzID0gNDsKIAl1bnNpZ25lZCBsb25nIHNpemUgPSBucl9ocGFnZXMgKiBocGFnZV9wbWRfc2l6ZTsKIAotCXAgPSBvcHMtJmd0O3NldHVwX2FyZWEobnJfaHBhZ2VzKTsKJiM0MzsJLyogT25seSB0cnkgMSBQTUQgc2l6ZWQgcmFuZ2UgZm9yIG1USFAgY29sbGFwc2UuICovCiYjNDM7CWlmIChjID09ICZhbXA7X19tdGhwX2todWdlcGFnZWRfY29udGV4dCkgewomIzQzOwkJbnJfcG1kcyA9IDE7CiYjNDM7CQlucl9ocGFnZXMgPSAxICZsdDsmbHQ7IChocGFnZV9wbWRfb3JkZXIgLSBjb2xsYXBzZV9vcmRlcik7CiYjNDM7CQlzaXplID0gaHBhZ2VfcG1kX3NpemU7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcCA9IG9wcy0mZ3Q7c2V0dXBfYXJlYShucl9wbWRzKTsKIAlvcHMtJmd0O2ZhdWx0KHAsIDAsIHNpemUpOwogCWMtJmd0O2NvbGxhcHNlKCYjMzQ7Q29sbGFwc2UgbXVsdGlwbGUgZnVsbHkgcG9wdWxhdGVkIFBURSB0YWJsZSYjMzQ7LCBwLCBucl9ocGFnZXMsCiAJCSAgICBvcHMsIHRydWUpOwpAQCAtNjg5LDEwICYjNDM7NzU1LDMxIEBAIHN0YXRpYyB2b2lkIGNvbGxhcHNlX2Z1bGwoc3RydWN0IGNvbGxhcHNlX2NvbnRleHQgKmMsIHN0cnVjdCBtZW1fb3BzICpvcHMpCiAKIHN0YXRpYyB2b2lkIGNvbGxhcHNlX2VtcHR5KHN0cnVjdCBjb2xsYXBzZV9jb250ZXh0ICpjLCBzdHJ1Y3QgbWVtX29wcyAqb3BzKQogewomIzQzOwlpbnQgbnJfaHBhZ2VzID0gMTsKJiM0MzsJdm9pZCAqcDsKJiM0MzsKJiM0MzsJaWYgKGMgPT0gJmFtcDtfX210aHBfa2h1Z2VwYWdlZF9jb250ZXh0KQomIzQzOwkJbnJfaHBhZ2VzID0gMSAmbHQ7Jmx0OyAoaHBhZ2VfcG1kX29yZGVyIC0gY29sbGFwc2Vfb3JkZXIpOwomIzQzOwomIzQzOwlwID0gb3BzLSZndDtzZXR1cF9hcmVhKDEpOwomIzQzOwljLSZndDtjb2xsYXBzZSgmIzM0O0RvIG5vdCBjb2xsYXBzZSBlbXB0eSBQVEUgdGFibGUmIzM0OywgcCwgbnJfaHBhZ2VzLCBvcHMsIGZhbHNlKTsKJiM0MzsJb3BzLSZndDtjbGVhbnVwX2FyZWEocCwgaHBhZ2VfcG1kX3NpemUpOwomIzQzOwlrc2Z0X3Rlc3RfcmVzdWx0X3JlcG9ydChleGl0X3N0YXR1cywgJiMzNDslc1xuJiMzNDssIF9fZnVuY19fKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgY29sbGFwc2Vfc2luZ2xlX210aHAoc3RydWN0IGNvbGxhcHNlX2NvbnRleHQgKmMsIHN0cnVjdCBtZW1fb3BzICpvcHMpCiYjNDM7ewomIzQzOwl1bnNpZ25lZCBsb25nIGhwYWdlX3NpemUgPSBwYWdlX3NpemUgJmx0OyZsdDsgY29sbGFwc2Vfb3JkZXI7CiAJdm9pZCAqcDsKIAogCXAgPSBvcHMtJmd0O3NldHVwX2FyZWEoMSk7Ci0JYy0mZ3Q7Y29sbGFwc2UoJiMzNDtEbyBub3QgY29sbGFwc2UgZW1wdHkgUFRFIHRhYmxlJiMzNDssIHAsIDEsIG9wcywgZmFsc2UpOwomIzQzOwkvKgomIzQzOwkgKiBPbmx5IGZhdWx0IGNvbGxhcHNlX29yZGVyIHNpemVkIHJhbmdlcywgYW5kIG9ubHkgY2hlY2sgMQomIzQzOwkgKiBjb2xsYXBzZV9vcmRlciBzaXplZCBodWdlIHBhZ2UuCiYjNDM7CSAqLwomIzQzOwlvcHMtJmd0O2ZhdWx0KHAsIDAsIGhwYWdlX3NpemUpOwomIzQzOwljLSZndDtjb2xsYXBzZSgmIzM0O0NvbGxhcHNlIFBURSB0YWJsZSB3aXRoIGhhbGYgUFRFIGVudHJpZXMgcHJlc2VudCYjMzQ7LAomIzQzOwkJcCwgMSwgb3BzLCB0cnVlKTsKIAlvcHMtJmd0O2NsZWFudXBfYXJlYShwLCBocGFnZV9wbWRfc2l6ZSk7CiAJa3NmdF90ZXN0X3Jlc3VsdF9yZXBvcnQoZXhpdF9zdGF0dXMsICYjMzQ7JXNcbiYjMzQ7LCBfX2Z1bmNfXyk7CiB9CkBAIC04NDgsNyAmIzQzOzkzNSw3IEBAIHN0YXRpYyB2b2lkIGNvbGxhcHNlX3NpbmdsZV9wdGVfZW50cnlfY29tcG91bmQoc3RydWN0IGNvbGxhcHNlX2NvbnRleHQgKmMsIHN0cnVjCiAJbWFkdmlzZShwLCBocGFnZV9wbWRfc2l6ZSwgTUFEVl9OT0hVR0VQQUdFKTsKIAlrc2Z0X3ByaW50X21zZygmIzM0O1NwbGl0IGh1Z2UgcGFnZSBsZWF2aW5nIHNpbmdsZSBQVEUgbWFwcGluZyBjb21wb3VuZCBwYWdlLi4uJiMzNDspOwogCW1hZHZpc2UocCAmIzQzOyBwYWdlX3NpemUsIGhwYWdlX3BtZF9zaXplIC0gcGFnZV9zaXplLCBNQURWX0RPTlRORUVEKTsKLQlpZiAob3BzLSZndDtjaGVja19odWdlKHAsIDApKQomIzQzOwlpZiAob3BzLSZndDtjaGVja19odWdlKHAsIGhwYWdlX3BtZF9zaXplLCAwLCBocGFnZV9wbWRfc2l6ZSkpCiAJCXN1Y2Nlc3MoJiMzNDtPSyYjMzQ7KTsKIAllbHNlCiAJCWZhaWwoJiMzNDtGYWlsJiMzNDspOwpAQCAtODY5LDcgJiM0Mzs5NTYsNyBAQCBzdGF0aWMgdm9pZCBjb2xsYXBzZV9mdWxsX29mX2NvbXBvdW5kKHN0cnVjdCBjb2xsYXBzZV9jb250ZXh0ICpjLCBzdHJ1Y3QgbWVtX29wcwogCWtzZnRfcHJpbnRfbXNnKCYjMzQ7U3BsaXQgaHVnZSBwYWdlIGxlYXZpbmcgc2luZ2xlIFBURSBwYWdlIHRhYmxlIGZ1bGwgb2YgY29tcG91bmQgcGFnZXMuLi4mIzM0Oyk7CiAJbWFkdmlzZShwLCBwYWdlX3NpemUsIE1BRFZfTk9IVUdFUEFHRSk7CiAJbWFkdmlzZShwLCBocGFnZV9wbWRfc2l6ZSwgTUFEVl9OT0hVR0VQQUdFKTsKLQlpZiAob3BzLSZndDtjaGVja19odWdlKHAsIDApKQomIzQzOwlpZiAob3BzLSZndDtjaGVja19odWdlKHAsIGhwYWdlX3BtZF9zaXplLCAwLCBocGFnZV9wbWRfc2l6ZSkpCiAJCXN1Y2Nlc3MoJiMzNDtPSyYjMzQ7KTsKIAllbHNlCiAJCWZhaWwoJiMzNDtGYWlsJiMzNDspOwpAQCAtODkxLDcgJiM0Mzs5NzgsNyBAQCBzdGF0aWMgdm9pZCBjb2xsYXBzZV9jb21wb3VuZF9leHRyZW1lKHN0cnVjdCBjb2xsYXBzZV9jb250ZXh0ICpjLCBzdHJ1Y3QgbWVtX29wcwogCWZvciAoaSA9IDA7IGkgJmx0OyBocGFnZV9wbWRfbnI7IGkmIzQzOyYjNDM7KSB7CiAJCW1hZHZpc2UoQkFTRV9BRERSLCBocGFnZV9wbWRfc2l6ZSwgTUFEVl9IVUdFUEFHRSk7CiAJCW9wcy0mZ3Q7ZmF1bHQoQkFTRV9BRERSLCAwLCBocGFnZV9wbWRfc2l6ZSk7Ci0JCWlmICghb3BzLSZndDtjaGVja19odWdlKEJBU0VfQUREUiwgMSkpCiYjNDM7CQlpZiAoIW9wcy0mZ3Q7Y2hlY2tfaHVnZShCQVNFX0FERFIsIGhwYWdlX3BtZF9zaXplLCAxLCBocGFnZV9wbWRfc2l6ZSkpCiAJCQlrc2Z0X2V4aXRfZmFpbF9tc2coJiMzNDtGYWlsZWQgdG8gYWxsb2NhdGUgaHVnZSBwYWdlXG4mIzM0Oyk7CiAJCW1hZHZpc2UoQkFTRV9BRERSLCBocGFnZV9wbWRfc2l6ZSwgTUFEVl9OT0hVR0VQQUdFKTsKIApAQCAtOTE0LDcgJiM0MzsxMDAxLDcgQEAgc3RhdGljIHZvaWQgY29sbGFwc2VfY29tcG91bmRfZXh0cmVtZShzdHJ1Y3QgY29sbGFwc2VfY29udGV4dCAqYywgc3RydWN0IG1lbV9vcHMKIAogCW9wcy0mZ3Q7Y2xlYW51cF9hcmVhKEJBU0VfQUREUiwgaHBhZ2VfcG1kX3NpemUpOwogCW9wcy0mZ3Q7ZmF1bHQocCwgMCwgaHBhZ2VfcG1kX3NpemUpOwotCWlmICghb3BzLSZndDtjaGVja19odWdlKHAsIDEpKQomIzQzOwlpZiAoIW9wcy0mZ3Q7Y2hlY2tfaHVnZShwLCBocGFnZV9wbWRfc2l6ZSwgMSwgaHBhZ2VfcG1kX3NpemUpKQogCQlzdWNjZXNzKCYjMzQ7T0smIzM0Oyk7CiAJZWxzZQogCQlmYWlsKCYjMzQ7RmFpbCYjMzQ7KTsKQEAgLTkzNiw3ICYjNDM7MTAyMyw3IEBAIHN0YXRpYyB2b2lkIGNvbGxhcHNlX2Zvcmsoc3RydWN0IGNvbGxhcHNlX2NvbnRleHQgKmMsIHN0cnVjdCBtZW1fb3BzICpvcHMpCiAKIAlrc2Z0X3ByaW50X21zZygmIzM0O0FsbG9jYXRlIHNtYWxsIHBhZ2UuLi4mIzM0Oyk7CiAJb3BzLSZndDtmYXVsdChwLCAwLCBwYWdlX3NpemUpOwotCWlmIChvcHMtJmd0O2NoZWNrX2h1Z2UocCwgMCkpCiYjNDM7CWlmIChvcHMtJmd0O2NoZWNrX2h1Z2UocCwgaHBhZ2VfcG1kX3NpemUsIDAsIGhwYWdlX3BtZF9zaXplKSkKIAkJc3VjY2VzcygmIzM0O09LJiMzNDspOwogCWVsc2UKIAkJZmFpbCgmIzM0O0ZhaWwmIzM0Oyk7CkBAIC05NDQsNyAmIzQzOzEwMzEsNyBAQCBzdGF0aWMgdm9pZCBjb2xsYXBzZV9mb3JrKHN0cnVjdCBjb2xsYXBzZV9jb250ZXh0ICpjLCBzdHJ1Y3QgbWVtX29wcyAqb3BzKQogCWtzZnRfcHJpbnRfbXNnKCYjMzQ7U2hhcmUgc21hbGwgcGFnZSBvdmVyIGZvcmsoKS4uLiYjMzQ7KTsKIAlpZiAoIWZvcmsoKSkgewogCQkvKiBEbyBub3QgdG91Y2ggc2V0dGluZ3Mgb24gY2hpbGQgZXhpdCAqLwotCQlpZiAob3BzLSZndDtjaGVja19odWdlKHAsIDApKQomIzQzOwkJaWYgKG9wcy0mZ3Q7Y2hlY2tfaHVnZShwLCBocGFnZV9wbWRfc2l6ZSwgMCwgaHBhZ2VfcG1kX3NpemUpKQogCQkJc3VjY2VzcygmIzM0O09LJiMzNDspOwogCQllbHNlCiAJCQlmYWlsKCYjMzQ7RmFpbCYjMzQ7KTsKQEAgLTk2Miw3ICYjNDM7MTA0OSw3IEBAIHN0YXRpYyB2b2lkIGNvbGxhcHNlX2Zvcmsoc3RydWN0IGNvbGxhcHNlX2NvbnRleHQgKmMsIHN0cnVjdCBtZW1fb3BzICpvcHMpCiAJZXhpdF9zdGF0dXMgPSBXRVhJVFNUQVRVUyh3c3RhdHVzKTsKIAogCWtzZnRfcHJpbnRfbXNnKCYjMzQ7Q2hlY2sgaWYgcGFyZW50IHN0aWxsIGhhcyBzbWFsbCBwYWdlLi4uJiMzNDspOwotCWlmIChvcHMtJmd0O2NoZWNrX2h1Z2UocCwgMCkpCiYjNDM7CWlmIChvcHMtJmd0O2NoZWNrX2h1Z2UocCwgaHBhZ2VfcG1kX3NpemUsIDAsIGhwYWdlX3BtZF9zaXplKSkKIAkJc3VjY2VzcygmIzM0O09LJiMzNDspOwogCWVsc2UKIAkJZmFpbCgmIzM0O0ZhaWwmIzM0Oyk7CkBAIC05ODAsNyAmIzQzOzEwNjcsNyBAQCBzdGF0aWMgdm9pZCBjb2xsYXBzZV9mb3JrX2NvbXBvdW5kKHN0cnVjdCBjb2xsYXBzZV9jb250ZXh0ICpjLCBzdHJ1Y3QgbWVtX29wcyAqbwogCWtzZnRfcHJpbnRfbXNnKCYjMzQ7U2hhcmUgaHVnZSBwYWdlIG92ZXIgZm9yaygpLi4uJiMzNDspOwogCWlmICghZm9yaygpKSB7CiAJCS8qIERvIG5vdCB0b3VjaCBzZXR0aW5ncyBvbiBjaGlsZCBleGl0ICovCi0JCWlmIChvcHMtJmd0O2NoZWNrX2h1Z2UocCwgMSkpCiYjNDM7CQlpZiAob3BzLSZndDtjaGVja19odWdlKHAsIGhwYWdlX3BtZF9zaXplLCAxLCBocGFnZV9wbWRfc2l6ZSkpCiAJCQlzdWNjZXNzKCYjMzQ7T0smIzM0Oyk7CiAJCWVsc2UKIAkJCWZhaWwoJiMzNDtGYWlsJiMzNDspOwpAQCAtOTg4LDcgJiM0MzsxMDc1LDcgQEAgc3RhdGljIHZvaWQgY29sbGFwc2VfZm9ya19jb21wb3VuZChzdHJ1Y3QgY29sbGFwc2VfY29udGV4dCAqYywgc3RydWN0IG1lbV9vcHMgKm8KIAkJa3NmdF9wcmludF9tc2coJiMzNDtTcGxpdCBodWdlIHBhZ2UgUE1EIGluIGNoaWxkIHByb2Nlc3MuLi4mIzM0Oyk7CiAJCW1hZHZpc2UocCwgcGFnZV9zaXplLCBNQURWX05PSFVHRVBBR0UpOwogCQltYWR2aXNlKHAsIGhwYWdlX3BtZF9zaXplLCBNQURWX05PSFVHRVBBR0UpOwotCQlpZiAob3BzLSZndDtjaGVja19odWdlKHAsIDApKQomIzQzOwkJaWYgKG9wcy0mZ3Q7Y2hlY2tfaHVnZShwLCBocGFnZV9wbWRfc2l6ZSwgMCwgaHBhZ2VfcG1kX3NpemUpKQogCQkJc3VjY2VzcygmIzM0O09LJiMzNDspOwogCQllbHNlCiAJCQlmYWlsKCYjMzQ7RmFpbCYjMzQ7KTsKQEAgLTEwMDksNyAmIzQzOzEwOTYsNyBAQCBzdGF0aWMgdm9pZCBjb2xsYXBzZV9mb3JrX2NvbXBvdW5kKHN0cnVjdCBjb2xsYXBzZV9jb250ZXh0ICpjLCBzdHJ1Y3QgbWVtX29wcyAqbwogCWV4aXRfc3RhdHVzID0gV0VYSVRTVEFUVVMod3N0YXR1cyk7CiAKIAlrc2Z0X3ByaW50X21zZygmIzM0O0NoZWNrIGlmIHBhcmVudCBzdGlsbCBoYXMgaHVnZSBwYWdlLi4uJiMzNDspOwotCWlmIChvcHMtJmd0O2NoZWNrX2h1Z2UocCwgMSkpCiYjNDM7CWlmIChvcHMtJmd0O2NoZWNrX2h1Z2UocCwgaHBhZ2VfcG1kX3NpemUsIDEsIGhwYWdlX3BtZF9zaXplKSkKIAkJc3VjY2VzcygmIzM0O09LJiMzNDspOwogCWVsc2UKIAkJZmFpbCgmIzM0O0ZhaWwmIzM0Oyk7CkBAIC0xMDI4LDcgJiM0MzsxMTE1LDcgQEAgc3RhdGljIHZvaWQgY29sbGFwc2VfbWF4X3B0ZXNfc2hhcmVkKHN0cnVjdCBjb2xsYXBzZV9jb250ZXh0ICpjLCBzdHJ1Y3QgbWVtX29wcwogCWtzZnRfcHJpbnRfbXNnKCYjMzQ7U2hhcmUgaHVnZSBwYWdlIG92ZXIgZm9yaygpLi4uJiMzNDspOwogCWlmICghZm9yaygpKSB7CiAJCS8qIERvIG5vdCB0b3VjaCBzZXR0aW5ncyBvbiBjaGlsZCBleGl0ICovCi0JCWlmIChvcHMtJmd0O2NoZWNrX2h1Z2UocCwgMSkpCiYjNDM7CQlpZiAob3BzLSZndDtjaGVja19odWdlKHAsIGhwYWdlX3BtZF9zaXplLCAxLCBocGFnZV9wbWRfc2l6ZSkpCiAJCQlzdWNjZXNzKCYjMzQ7T0smIzM0Oyk7CiAJCWVsc2UKIAkJCWZhaWwoJiMzNDtGYWlsJiMzNDspOwpAQCAtMTAzNiw3ICYjNDM7MTEyMyw3IEBAIHN0YXRpYyB2b2lkIGNvbGxhcHNlX21heF9wdGVzX3NoYXJlZChzdHJ1Y3QgY29sbGFwc2VfY29udGV4dCAqYywgc3RydWN0IG1lbV9vcHMKIAkJa3NmdF9wcmludF9tc2coJiMzNDtUcmlnZ2VyIENvVyBvbiBwYWdlICVkIG9mICVkLi4uJiMzNDssCiAJCQkJaHBhZ2VfcG1kX25yIC0gbWF4X3B0ZXNfc2hhcmVkIC0gMSwgaHBhZ2VfcG1kX25yKTsKIAkJb3BzLSZndDtmYXVsdChwLCAwLCAoaHBhZ2VfcG1kX25yIC0gbWF4X3B0ZXNfc2hhcmVkIC0gMSkgKiBwYWdlX3NpemUpOwotCQlpZiAob3BzLSZndDtjaGVja19odWdlKHAsIDApKQomIzQzOwkJaWYgKG9wcy0mZ3Q7Y2hlY2tfaHVnZShwLCBocGFnZV9wbWRfc2l6ZSwgMCwgaHBhZ2VfcG1kX3NpemUpKQogCQkJc3VjY2VzcygmIzM0O09LJiMzNDspOwogCQllbHNlCiAJCQlmYWlsKCYjMzQ7RmFpbCYjMzQ7KTsKQEAgLTEwNDksNyAmIzQzOzExMzYsNyBAQCBzdGF0aWMgdm9pZCBjb2xsYXBzZV9tYXhfcHRlc19zaGFyZWQoc3RydWN0IGNvbGxhcHNlX2NvbnRleHQgKmMsIHN0cnVjdCBtZW1fb3BzCiAJCQkgICAgICAgaHBhZ2VfcG1kX25yIC0gbWF4X3B0ZXNfc2hhcmVkLCBocGFnZV9wbWRfbnIpOwogCQkJb3BzLSZndDtmYXVsdChwLCAwLCAoaHBhZ2VfcG1kX25yIC0gbWF4X3B0ZXNfc2hhcmVkKSAqCiAJCQkJICAgIHBhZ2Vfc2l6ZSk7Ci0JCQlpZiAob3BzLSZndDtjaGVja19odWdlKHAsIDApKQomIzQzOwkJCWlmIChvcHMtJmd0O2NoZWNrX2h1Z2UocCwgaHBhZ2VfcG1kX3NpemUsIDAsIGhwYWdlX3BtZF9zaXplKSkKIAkJCQlzdWNjZXNzKCYjMzQ7T0smIzM0Oyk7CiAJCQllbHNlCiAJCQkJZmFpbCgmIzM0O0ZhaWwmIzM0Oyk7CkBAIC0xMDY3LDcgJiM0MzsxMTU0LDcgQEAgc3RhdGljIHZvaWQgY29sbGFwc2VfbWF4X3B0ZXNfc2hhcmVkKHN0cnVjdCBjb2xsYXBzZV9jb250ZXh0ICpjLCBzdHJ1Y3QgbWVtX29wcwogCWV4aXRfc3RhdHVzID0gV0VYSVRTVEFUVVMod3N0YXR1cyk7CiAKIAlrc2Z0X3ByaW50X21zZygmIzM0O0NoZWNrIGlmIHBhcmVudCBzdGlsbCBoYXMgaHVnZSBwYWdlLi4uJiMzNDspOwotCWlmIChvcHMtJmd0O2NoZWNrX2h1Z2UocCwgMSkpCiYjNDM7CWlmIChvcHMtJmd0O2NoZWNrX2h1Z2UocCwgaHBhZ2VfcG1kX3NpemUsIDEsIGhwYWdlX3BtZF9zaXplKSkKIAkJc3VjY2VzcygmIzM0O09LJiMzNDspOwogCWVsc2UKIAkJZmFpbCgmIzM0O0ZhaWwmIzM0Oyk7CkBAIC0xMTA4LDggJiM0MzsxMTk1LDggQEAgc3RhdGljIHZvaWQgbWFkdmlzZV9yZXRyYWN0ZWRfcGFnZV90YWJsZXMoc3RydWN0IGNvbGxhcHNlX2NvbnRleHQgKmMsCiAJb3BzLSZndDtmYXVsdChwLCAwLCBzaXplKTsKIAogCS8qIExldCBraHVnZXBhZ2VkIGNvbGxhcHNlIGFuZCBsZWF2ZSBwbWQgY2xlYXJlZCAqLwotCWlmICh3YWl0X2Zvcl9zY2FuKCYjMzQ7Q29sbGFwc2UgYW5kIGxlYXZlIFBNRCBjbGVhcmVkJiMzNDssIHAsIG5yX2hwYWdlcywKLQkJCSAgb3BzKSkgewomIzQzOwlpZiAod2FpdF9mb3Jfc2NhbigmIzM0O0NvbGxhcHNlIGFuZCBsZWF2ZSBQTUQgY2xlYXJlZCYjMzQ7LCBwLCBzaXplLCBucl9ocGFnZXMsCiYjNDM7CQkJICBocGFnZV9wbWRfb3JkZXIsIG9wcykpIHsKIAkJZmFpbCgmIzM0O1RpbWVvdXQmIzM0Oyk7CiAJCXJldHVybjsKIAl9CkBAIC0xMTI1LDE3ICYjNDM7MTIxMiwxOSBAQCBzdGF0aWMgdm9pZCB1c2FnZSh2b2lkKQogewogCWZwcmludGYoc3RkZXJyLCAmIzM0O1xuVXNhZ2U6IC4va2h1Z2VwYWdlZCBbT1BUSU9OU10gJmx0O3Rlc3QgdHlwZSZndDsgW2Rpcl1cblxuJiMzNDspOwogCWZwcmludGYoc3RkZXJyLCAmIzM0O1x0Jmx0O3Rlc3QgdHlwZSZndDtcdDogJmx0O2NvbnRleHQmZ3Q7OiZsdDttZW1fdHlwZSZndDtcbiYjMzQ7KTsKLQlmcHJpbnRmKHN0ZGVyciwgJiMzNDtcdCZsdDtjb250ZXh0Jmd0O1x0OiBbYWxsfGtodWdlcGFnZWR8bWFkdmlzZV1cbiYjMzQ7KTsKJiM0MzsJZnByaW50ZihzdGRlcnIsICYjMzQ7XHQmbHQ7Y29udGV4dCZndDtcdDogW2FsbHxraHVnZXBhZ2VkfG10aHBfa2h1Z2VwYWdlZHxtYWR2aXNlXVxuJiMzNDspOwogCWZwcmludGYoc3RkZXJyLCAmIzM0O1x0Jmx0O21lbV90eXBlJmd0O1x0OiBbYWxsfGFub258ZmlsZXxzaG1lbV1cbiYjMzQ7KTsKIAlmcHJpbnRmKHN0ZGVyciwgJiMzNDtcblx0XCYjMzQ7ZmlsZSxhbGxcJiMzNDsgbWVtX3R5cGUgcmVxdWlyZXMgW2Rpcl0gYXJndW1lbnRcbiYjMzQ7KTsKIAlmcHJpbnRmKHN0ZGVyciwgJiMzNDtcblx0XCYjMzQ7ZmlsZSxhbGxcJiMzNDsgbWVtX3R5cGUgcmVxdWlyZXMgYSBmaWxlIHN5c3RlbVxuJiMzNDspOwogCWZwcmludGYoc3RkZXJyLAkmIzM0O1x0d2l0aCBQTUQtc2l6ZWQgbGFyZ2UgZm9saW8gc3VwcG9ydFxuJiMzNDspOwogCWZwcmludGYoc3RkZXJyLCAmIzM0O1xuXHRpZiBbZGlyXSBpcyBhIChzdWIpZGlyZWN0b3J5IG9mIGEgdG1wZnMgbW91bnQsIHRtcGZzIG11c3QgYmVcbiYjMzQ7KTsKIAlmcHJpbnRmKHN0ZGVyciwJJiMzNDtcdG1vdW50ZWQgd2l0aCBodWdlPWFkdmlzZSBvcHRpb24gZm9yIGtodWdlcGFnZWQgdGVzdHMgdG8gd29ya1xuJiMzNDspOwomIzQzOwlmcHJpbnRmKHN0ZGVyciwgJiMzNDtcblx0bXRocF9raHVnZXBhZ2VkIG9ubHkgc3VwcG9ydHMgYW5vbiBtZW1fdHlwZSBub3cuXG4mIzM0Oyk7CiAJZnByaW50ZihzdGRlcnIsCSYjMzQ7XG5cdFN1cHBvcnRlZCBPcHRpb25zOlxuJiMzNDspOwogCWZwcmludGYoc3RkZXJyLAkmIzM0O1x0XHQtaDogVGhpcyBoZWxwIG1lc3NhZ2UuXG4mIzM0Oyk7CiAJZnByaW50ZihzdGRlcnIsCSYjMzQ7XHRcdC1zOiBtVEhQIHNpemUsIGV4cHJlc3NlZCBhcyBwYWdlIG9yZGVyLlxuJiMzNDspOwogCWZwcmludGYoc3RkZXJyLAkmIzM0O1x0XHQgICAgRGVmYXVsdHMgdG8gMC4gVXNlIHRoaXMgc2l6ZSBmb3IgYW5vbiBvciBzaG1lbSBhbGxvY2F0aW9ucy5cbiYjMzQ7KTsKJiM0MzsJZnByaW50ZihzdGRlcnIsCSYjMzQ7XHRcdC1jOiBjb2xsYXBzZSBvcmRlciBmb3IgbVRIUCBjb2xsYXBzZSwgZXhwcmVzc2VkIGFzIHBhZ2Ugb3JkZXIuXG4mIzM0Oyk7CiAJZXhpdCgxKTsKIH0KIApAQCAtMTE0NSwxMSAmIzQzOzEyMzQsMTQgQEAgc3RhdGljIHZvaWQgcGFyc2VfdGVzdF90eXBlKGludCBhcmdjLCBjaGFyICoqYXJndikKIAljaGFyICpidWY7CiAJY29uc3QgY2hhciAqdG9rZW47CiAKLQl3aGlsZSAoKG9wdCA9IGdldG9wdChhcmdjLCBhcmd2LCAmIzM0O3M6aCYjMzQ7KSkgIT0gLTEpIHsKJiM0MzsJd2hpbGUgKChvcHQgPSBnZXRvcHQoYXJnYywgYXJndiwgJiMzNDtzOmM6aCYjMzQ7KSkgIT0gLTEpIHsKIAkJc3dpdGNoIChvcHQpIHsKIAkJY2FzZSAmIzM5O3MmIzM5OzoKIAkJCWFub25fb3JkZXIgPSBhdG9pKG9wdGFyZyk7CiAJCQlicmVhazsKJiM0MzsJCWNhc2UgJiMzOTtjJiMzOTs6CiYjNDM7CQkJY29sbGFwc2Vfb3JkZXIgPSBhdG9pKG9wdGFyZyk7CiYjNDM7CQkJYnJlYWs7CiAJCWNhc2UgJiMzOTtoJiMzOTs6CiAJCWRlZmF1bHQ6CiAJCQl1c2FnZSgpOwpAQCAtMTE3NSw2ICYjNDM7MTI2NywxMCBAQCBzdGF0aWMgdm9pZCBwYXJzZV90ZXN0X3R5cGUoaW50IGFyZ2MsIGNoYXIgKiphcmd2KQogCQltYWR2aXNlX2NvbnRleHQgPSAgJmFtcDtfX21hZHZpc2VfY29udGV4dDsKIAl9IGVsc2UgaWYgKCFzdHJjbXAodG9rZW4sICYjMzQ7a2h1Z2VwYWdlZCYjMzQ7KSkgewogCQlraHVnZXBhZ2VkX2NvbnRleHQgPSAgJmFtcDtfX2todWdlcGFnZWRfY29udGV4dDsKJiM0MzsJfSBlbHNlIGlmICghc3RyY21wKHRva2VuLCAmIzM0O210aHBfa2h1Z2VwYWdlZCYjMzQ7KSkgewomIzQzOwkJbXRocF9raHVnZXBhZ2VkX2NvbnRleHQgPSAgJmFtcDtfX210aHBfa2h1Z2VwYWdlZF9jb250ZXh0OwomIzQzOwkJaWYgKGNvbGxhcHNlX29yZGVyICZsdDs9IDAgfHwgY29sbGFwc2Vfb3JkZXIgJmd0Oz0gaHBhZ2VfcG1kX29yZGVyKQomIzQzOwkJCXVzYWdlKCk7CiAJfSBlbHNlIGlmICghc3RyY21wKHRva2VuLCAmIzM0O21hZHZpc2UmIzM0OykpIHsKIAkJbWFkdmlzZV9jb250ZXh0ID0gICZhbXA7X19tYWR2aXNlX2NvbnRleHQ7CiAJfSBlbHNlIHsKQEAgLTExOTAsMTQgJiM0MzsxMjg2LDIwIEBAIHN0YXRpYyB2b2lkIHBhcnNlX3Rlc3RfdHlwZShpbnQgYXJnYywgY2hhciAqKmFyZ3YpCiAJCXJlYWRfd3JpdGVfZmlsZV93cml0ZV9vcHMgPSAgJmFtcDtfX3JlYWRfd3JpdGVfZmlsZV93cml0ZV9vcHM7CiAJCWFub25fb3BzID0gJmFtcDtfX2Fub25fb3BzOwogCQlzaG1lbV9vcHMgPSAmYW1wO19fc2htZW1fb3BzOwomIzQzOwkJaWYgKG10aHBfa2h1Z2VwYWdlZF9jb250ZXh0KQomIzQzOwkJCXVzYWdlKCk7CiAJfSBlbHNlIGlmICghc3RyY21wKGJ1ZiwgJiMzNDthbm9uJiMzNDspKSB7CiAJCWFub25fb3BzID0gJmFtcDtfX2Fub25fb3BzOwogCX0gZWxzZSBpZiAoIXN0cmNtcChidWYsICYjMzQ7ZmlsZSYjMzQ7KSkgewogCQlyZWFkX29ubHlfZmlsZV9vcHMgPSAgJmFtcDtfX3JlYWRfb25seV9maWxlX29wczsKIAkJcmVhZF93cml0ZV9maWxlX3JlYWRfb3BzID0gICZhbXA7X19yZWFkX3dyaXRlX2ZpbGVfcmVhZF9vcHM7CiAJCXJlYWRfd3JpdGVfZmlsZV93cml0ZV9vcHMgPSAgJmFtcDtfX3JlYWRfd3JpdGVfZmlsZV93cml0ZV9vcHM7CiYjNDM7CQlpZiAobXRocF9raHVnZXBhZ2VkX2NvbnRleHQpCiYjNDM7CQkJdXNhZ2UoKTsKIAl9IGVsc2UgaWYgKCFzdHJjbXAoYnVmLCAmIzM0O3NobWVtJiMzNDspKSB7CiAJCXNobWVtX29wcyA9ICZhbXA7X19zaG1lbV9vcHM7CiYjNDM7CQlpZiAobXRocF9raHVnZXBhZ2VkX2NvbnRleHQpCiYjNDM7CQkJdXNhZ2UoKTsKIAl9IGVsc2UgewogCQl1c2FnZSgpOwogCX0KQEAgLTEyNDAsNyAmIzQzOzEzNDIsNiBAQCBzdGF0aWMgaW50IG5yX3Rlc3RfY2FzZXM7CiAKIGludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKIHsKLQlpbnQgaHBhZ2VfcG1kX29yZGVyOwogCXN0cnVjdCB0aHBfc2V0dGluZ3MgZGVmYXVsdF9zZXR0aW5ncyA9IHsKIAkJLnRocF9lbmFibGVkID0gVEhQX01BRFZJU0UsCiAJCS50aHBfZGVmcmFnID0gVEhQX0RFRlJBR19BTFdBWVMsCkBAIC0xMjY2LDEwICYjNDM7MTM2Nyw2IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKIAlpZiAoIXRocF9pc19lbmFibGVkKCkpCiAJCWtzZnRfZXhpdF9za2lwKCYjMzQ7VHJhbnNwYXJlbnQgSHVnZXBhZ2VzIG5vdCBhdmFpbGFibGVcbiYjMzQ7KTsKIAotCXBhcnNlX3Rlc3RfdHlwZShhcmdjLCBhcmd2KTsKLQotCXNldGJ1ZihzdGRvdXQsIE5VTEwpOwotCiAJcGFnZV9zaXplID0gZ2V0cGFnZXNpemUoKTsKIAlocGFnZV9wbWRfc2l6ZSA9IHJlYWRfcG1kX3BhZ2VzaXplKCk7CiAJaWYgKCFocGFnZV9wbWRfc2l6ZSkKQEAgLTEyNzcsNiAmIzQzOzEzNzQsMTAgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQogCWhwYWdlX3BtZF9uciA9IGhwYWdlX3BtZF9zaXplIC8gcGFnZV9zaXplOwogCWhwYWdlX3BtZF9vcmRlciA9IF9fYnVpbHRpbl9jdHooaHBhZ2VfcG1kX25yKTsKIAomIzQzOwlwYXJzZV90ZXN0X3R5cGUoYXJnYywgYXJndik7CiYjNDM7CiYjNDM7CXNldGJ1ZihzdGRvdXQsIE5VTEwpOwomIzQzOwogCWRlZmF1bHRfc2V0dGluZ3Mua2h1Z2VwYWdlZC5tYXhfcHRlc19ub25lID0gaHBhZ2VfcG1kX25yIC0gMTsKIAlkZWZhdWx0X3NldHRpbmdzLmtodWdlcGFnZWQubWF4X3B0ZXNfc3dhcCA9IGhwYWdlX3BtZF9uciAvIDg7CiAJZGVmYXVsdF9zZXR0aW5ncy5raHVnZXBhZ2VkLm1heF9wdGVzX3NoYXJlZCA9IGhwYWdlX3BtZF9uciAvIDI7CkBAIC0xMjk0LDYgJiM0MzsxMzk1LDcgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQogCVRFU1QoY29sbGFwc2VfZnVsbCwga2h1Z2VwYWdlZF9jb250ZXh0LCByZWFkX3dyaXRlX2ZpbGVfcmVhZF9vcHMpOwogCVRFU1QoY29sbGFwc2VfZnVsbCwga2h1Z2VwYWdlZF9jb250ZXh0LCByZWFkX3dyaXRlX2ZpbGVfd3JpdGVfb3BzKTsKIAlURVNUKGNvbGxhcHNlX2Z1bGwsIGtodWdlcGFnZWRfY29udGV4dCwgc2htZW1fb3BzKTsKJiM0MzsJVEVTVChjb2xsYXBzZV9mdWxsLCBtdGhwX2todWdlcGFnZWRfY29udGV4dCwgYW5vbl9vcHMpOwogCVRFU1QoY29sbGFwc2VfZnVsbCwgbWFkdmlzZV9jb250ZXh0LCBhbm9uX29wcyk7CiAJVEVTVChjb2xsYXBzZV9mdWxsLCBtYWR2aXNlX2NvbnRleHQsIHJlYWRfb25seV9maWxlX29wcyk7CiAJVEVTVChjb2xsYXBzZV9mdWxsLCBtYWR2aXNlX2NvbnRleHQsIHJlYWRfd3JpdGVfZmlsZV9yZWFkX29wcyk7CkBAIC0xMzAxLDggJiM0MzsxNDAzLDExIEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKIAlURVNUKGNvbGxhcHNlX2Z1bGwsIG1hZHZpc2VfY29udGV4dCwgc2htZW1fb3BzKTsKIAogCVRFU1QoY29sbGFwc2VfZW1wdHksIGtodWdlcGFnZWRfY29udGV4dCwgYW5vbl9vcHMpOwomIzQzOwlURVNUKGNvbGxhcHNlX2VtcHR5LCBtdGhwX2todWdlcGFnZWRfY29udGV4dCwgYW5vbl9vcHMpOwogCVRFU1QoY29sbGFwc2VfZW1wdHksIG1hZHZpc2VfY29udGV4dCwgYW5vbl9vcHMpOwogCiYjNDM7CVRFU1QoY29sbGFwc2Vfc2luZ2xlX210aHAsIG10aHBfa2h1Z2VwYWdlZF9jb250ZXh0LCBhbm9uX29wcyk7CiYjNDM7CiAJVEVTVChjb2xsYXBzZV9zaW5nbGVfcHRlX2VudHJ5LCBraHVnZXBhZ2VkX2NvbnRleHQsIGFub25fb3BzKTsKIAlURVNUKGNvbGxhcHNlX3NpbmdsZV9wdGVfZW50cnksIGtodWdlcGFnZWRfY29udGV4dCwgcmVhZF9vbmx5X2ZpbGVfb3BzKTsKIAlURVNUKGNvbGxhcHNlX3NpbmdsZV9wdGVfZW50cnksIGtodWdlcGFnZWRfY29udGV4dCwgcmVhZF93cml0ZV9maWxlX3JlYWRfb3BzKTsKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3BhZ2VtYXBfaW9jdGwuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3BhZ2VtYXBfaW9jdGwuYwppbmRleCAxYjJkZmZjYzk5OWIwLi5jZmQxOTg3MzM5YzEzIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wYWdlbWFwX2lvY3RsLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGFnZW1hcF9pb2N0bC5jCkBAIC0xMDg1LDcgJiM0MzsxMDg1LDcgQEAgc3RhdGljIHZvaWQgdW5wb3B1bGF0ZWRfd3JpdHRlbl90ZXN0KGNvbnN0IGNoYXIgKm5hbWUsIGNoYXIgKm1lbSwgbG9uZyBzaXplLAogCW1lbXNldChtZW0sIDEsIHNpemUpOwogCWlmICh1c2VfdGhwICZhbXA7JmFtcDsKIAkgICAgKG1hZHZpc2UobWVtLCBzaXplLCBNQURWX0NPTExBUFNFKSB8fAotCSAgICAgIWNoZWNrX2h1Z2VfYW5vbihtZW0sIHNpemUgLyBocGFnZV9zaXplLCBocGFnZV9zaXplKSkpIHsKJiM0MzsJICAgICAhY2hlY2tfaHVnZV9hbm9uKG1lbSwgc2l6ZSwgc2l6ZSAvIGhwYWdlX3NpemUsIGhwYWdlX3NpemUpKSkgewogCQlrc2Z0X3Rlc3RfcmVzdWx0X3NraXAoJiMzNDslcyBjb3VsZCBub3QgZm9ybSBhIFRIUFxuJiMzNDssIG5hbWUpOwogCQlnb3RvIG91dDsKIAl9CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wcmN0bF90aHBfZGlzYWJsZS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcHJjdGxfdGhwX2Rpc2FibGUuYwppbmRleCBkOGQ5ZDFkZTU3YjhiLi44MmM2ZTk2ZWE2ZWIzIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wcmN0bF90aHBfZGlzYWJsZS5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ByY3RsX3RocF9kaXNhYmxlLmMKQEAgLTY3LDcgJiM0Mzs2Nyw3IEBAIHN0YXRpYyBpbnQgdGVzdF9tbWFwX3RocChlbnVtIHRocF9jb2xsYXBzZV90eXBlIG1hZHZpc2VfYnVmLCBzaXplX3QgcG1kc2l6ZSkKIAkvKiBIQUNLOiBtYWtlIHN1cmUgd2UgaGF2ZSBhIHNlcGFyYXRlIFZNQSB0aGF0IHdlIGNhbiBjaGVjayByZWxpYWJseS4gKi8KIAltcHJvdGVjdChtZW0sIHBtZHNpemUsIFBST1RfUkVBRCk7CiAKLQlyZXQgPSBjaGVja19odWdlX2Fub24obWVtLCAxLCBwbWRzaXplKTsKJiM0MzsJcmV0ID0gY2hlY2tfaHVnZV9hbm9uKG1lbSwgcG1kc2l6ZSwgMSwgcG1kc2l6ZSk7CiAJbXVubWFwKG1tYXBfbWVtLCBtbWFwX3NpemUpOwogCXJldHVybiByZXQ7CiB9CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ydW5fdm10ZXN0cy5zaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3J1bl92bXRlc3RzLnNoCmluZGV4IDY4N2QxMTVlM2JkODAuLmQwOWY5ZjZhMzg0ZWUgMTAwNzU1Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3J1bl92bXRlc3RzLnNoCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3J1bl92bXRlc3RzLnNoCkBAIC00MTAsNiAmIzQzOzQxMCw4IEBAIENBVEVHT1JZPSYjMzQ7dGhwJiMzNDsgcnVuX3Rlc3QgLi9raHVnZXBhZ2VkIGFsbDpzaG1lbQogCiBDQVRFR09SWT0mIzM0O3RocCYjMzQ7IHJ1bl90ZXN0IC4va2h1Z2VwYWdlZCAtcyA0IGFsbDpzaG1lbQogCiYjNDM7Q0FURUdPUlk9JiMzNDt0aHAmIzM0OyBydW5fdGVzdCAuL2todWdlcGFnZWQgLWMgNCBtdGhwX2todWdlcGFnZWQ6YW5vbgomIzQzOwogIyBUcnkgdG8gY3JlYXRlIFhGUyBpZiBub3QgcHJvdmlkZWQKIGlmIFsgLXogJiMzNDske1NQTElUX0hVR0VfUEFHRV9URVNUX1hGU19QQVRIfSYjMzQ7IF07IHRoZW4KICAgICBpZiB0ZXN0X3NlbGVjdGVkICYjMzQ7dGhwJiMzNDs7IHRoZW4KZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3NvZnQtZGlydHkuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3NvZnQtZGlydHkuYwppbmRleCBmYjE4NjRhNjhlMWM2Li5lMTk4ZmFjZjc4YmI1IDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9zb2Z0LWRpcnR5LmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vc29mdC1kaXJ0eS5jCkBAIC0xMDMsNyAmIzQzOzEwMyw3IEBAIHN0YXRpYyB2b2lkIHRlc3RfaHVnZXBhZ2UoaW50IHBhZ2VtYXBfZmQsIGludCBwYWdlc2l6ZSkKIAlmb3IgKGkgPSAwOyBpICZsdDsgaHBhZ2VfbGVuOyBpJiM0MzsmIzQzOykKIAkJbWFwW2ldID0gKGNoYXIpaTsKIAotCWlmIChjaGVja19odWdlX2Fub24obWFwLCAxLCBocGFnZV9sZW4pKSB7CiYjNDM7CWlmIChjaGVja19odWdlX2Fub24obWFwLCBocGFnZV9sZW4sIDEsIGhwYWdlX2xlbikpIHsKIAkJa3NmdF90ZXN0X3Jlc3VsdF9wYXNzKCYjMzQ7VGVzdCAlcyBodWdlIHBhZ2UgYWxsb2NhdGlvblxuJiMzNDssIF9fZnVuY19fKTsKIAogCQljbGVhcl9zb2Z0ZGlydHkoKTsKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3NwbGl0X2h1Z2VfcGFnZV90ZXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9zcGxpdF9odWdlX3BhZ2VfdGVzdC5jCmluZGV4IDMyYjk5MTQ3MmY3NDQuLjg2YTYwMzY5MjgyNjEgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3NwbGl0X2h1Z2VfcGFnZV90ZXN0LmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vc3BsaXRfaHVnZV9wYWdlX3Rlc3QuYwpAQCAtMTA0LDEyOSAmIzQzOzEwNCw2IEBAIHN0YXRpYyBib29sIGlzX2JhY2tlZF9ieV9mb2xpbyhjaGFyICp2YWRkciwgaW50IG9yZGVyLCBpbnQgcGFnZW1hcF9mZCwKIAlyZXR1cm4gZmFsc2U7CiB9CiAKLXN0YXRpYyBpbnQgdmFkZHJfcGFnZWZsYWdzX2dldChjaGFyICp2YWRkciwgaW50IHBhZ2VtYXBfZmQsIGludCBrcGFnZWZsYWdzX2ZkLAotCQl1aW50NjRfdCAqZmxhZ3MpCi17Ci0JdW5zaWduZWQgbG9uZyBwZm47Ci0KLQlwZm4gPSBwYWdlbWFwX2dldF9wZm4ocGFnZW1hcF9mZCwgdmFkZHIpOwotCi0JLyogbm9uLXByZXNlbnQgUEZOICovCi0JaWYgKHBmbiA9PSAtMVVMKQotCQlyZXR1cm4gMTsKLQotCWlmIChwYWdlZmxhZ3NfZ2V0KHBmbiwga3BhZ2VmbGFnc19mZCwgZmxhZ3MpKQotCQlyZXR1cm4gLTE7Ci0KLQlyZXR1cm4gMDsKLX0KLQotLyoKLSAqIGdhdGhlcl9hZnRlcl9zcGxpdF9mb2xpb19vcmRlcnMgLSBzY2FuIHRocm91Z2ggW3ZhZGRyX3N0YXJ0LCBsZW4pIGFuZCByZWNvcmQKLSAqIGZvbGlvIG9yZGVycwotICoKLSAqIEB2YWRkcl9zdGFydDogc3RhcnQgdmFkZHIKLSAqIEBsZW46IHJhbmdlIGxlbmd0aAotICogQHBhZ2VtYXBfZmQ6IGZpbGUgZGVzY3JpcHRvciB0byAvcHJvYy8mbHQ7cGlkJmd0Oy9wYWdlbWFwCi0gKiBAa3BhZ2VmbGFnc19mZDogZmlsZSBkZXNjcmlwdG9yIHRvIC9wcm9jL2twYWdlZmxhZ3MKLSAqIEBvcmRlcnM6IG91dHB1dCBmb2xpbyBvcmRlciBhcnJheQotICogQG5yX29yZGVyczogZm9saW8gb3JkZXIgYXJyYXkgc2l6ZQotICoKLSAqIGdhdGhlcl9hZnRlcl9zcGxpdF9mb2xpb19vcmRlcnMoKSBzY2FuIHRocm91Z2ggW3ZhZGRyX3N0YXJ0LCBsZW4pIGFuZCBjaGVjawotICogYWxsIGZvbGlvcyB3aXRoaW4gdGhlIHJhbmdlIGFuZCByZWNvcmQgdGhlaXIgb3JkZXJzLiBBbGwgb3JkZXItMCBwYWdlcyB3aWxsCi0gKiBiZSByZWNvcmRlZC4gTm9uLXByZXNlbnQgdmFkZHIgaXMgc2tpcHBlZC4KLSAqCi0gKiBOT1RFOiB0aGUgZnVuY3Rpb24gaXMgdXNlZCB0byBjaGVjayBmb2xpbyBvcmRlcnMgYWZ0ZXIgYSBzcGxpdCBpcyBwZXJmb3JtZWQsCi0gKiBzbyBpdCBhc3N1bWVzIFt2YWRkcl9zdGFydCwgbGVuKSBmdWxseSBtYXBzIHRvIGFmdGVyLXNwbGl0IGZvbGlvcyB3aXRoaW4gdGhhdAotICogcmFuZ2UuCi0gKgotICogUmV0dXJuOiAwIC0gbm8gZXJyb3IsIC0xIC0gdW5oYW5kbGVkIGNhc2VzCi0gKi8KLXN0YXRpYyBpbnQgZ2F0aGVyX2FmdGVyX3NwbGl0X2ZvbGlvX29yZGVycyhjaGFyICp2YWRkcl9zdGFydCwgc2l6ZV90IGxlbiwKLQkJaW50IHBhZ2VtYXBfZmQsIGludCBrcGFnZWZsYWdzX2ZkLCBpbnQgb3JkZXJzW10sIGludCBucl9vcmRlcnMpCi17Ci0JdWludDY0X3QgcGFnZV9mbGFncyA9IDA7Ci0JaW50IGN1cl9vcmRlciA9IC0xOwotCWNoYXIgKnZhZGRyOwotCi0JaWYgKHBhZ2VtYXBfZmQgPT0gLTEgfHwga3BhZ2VmbGFnc19mZCA9PSAtMSkKLQkJcmV0dXJuIC0xOwotCWlmICghb3JkZXJzKQotCQlyZXR1cm4gLTE7Ci0JaWYgKG5yX29yZGVycyAmbHQ7PSAwKQotCQlyZXR1cm4gLTE7Ci0KLQlmb3IgKHZhZGRyID0gdmFkZHJfc3RhcnQ7IHZhZGRyICZsdDsgdmFkZHJfc3RhcnQgJiM0MzsgbGVuOykgewotCQljaGFyICpuZXh0X2ZvbGlvX3ZhZGRyOwotCQlpbnQgc3RhdHVzOwotCi0JCXN0YXR1cyA9IHZhZGRyX3BhZ2VmbGFnc19nZXQodmFkZHIsIHBhZ2VtYXBfZmQsIGtwYWdlZmxhZ3NfZmQsCi0JCQkJCSZhbXA7cGFnZV9mbGFncyk7Ci0JCWlmIChzdGF0dXMgJmx0OyAwKQotCQkJcmV0dXJuIC0xOwotCi0JCS8qIHNraXAgbm9uIHByZXNlbnQgdmFkZHIgKi8KLQkJaWYgKHN0YXR1cyA9PSAxKSB7Ci0JCQl2YWRkciAmIzQzOz0gcHNpemUoKTsKLQkJCWNvbnRpbnVlOwotCQl9Ci0KLQkJLyogYWxsIG9yZGVyLTAgcGFnZXMgd2l0aCBwb3NzaWJsZSBmYWxzZSBwb3N0aXZlIChub24gZm9saW8pICovCi0JCWlmICghKHBhZ2VfZmxhZ3MgJmFtcDsgKEtQRl9DT01QT1VORF9IRUFEIHwgS1BGX0NPTVBPVU5EX1RBSUwpKSkgewotCQkJb3JkZXJzWzBdJiM0MzsmIzQzOzsKLQkJCXZhZGRyICYjNDM7PSBwc2l6ZSgpOwotCQkJY29udGludWU7Ci0JCX0KLQotCQkvKiBza2lwIG5vbiB0aHAgY29tcG91bmQgcGFnZXMgKi8KLQkJaWYgKCEocGFnZV9mbGFncyAmYW1wOyBLUEZfVEhQKSkgewotCQkJdmFkZHIgJiM0Mzs9IHBzaXplKCk7Ci0JCQljb250aW51ZTsKLQkJfQotCi0JCS8qIHZwbiBwb2ludHMgdG8gcGFydCBvZiBhIFRIUCBhdCB0aGlzIHBvaW50ICovCi0JCWlmIChwYWdlX2ZsYWdzICZhbXA7IEtQRl9DT01QT1VORF9IRUFEKQotCQkJY3VyX29yZGVyID0gMTsKLQkJZWxzZSB7Ci0JCQl2YWRkciAmIzQzOz0gcHNpemUoKTsKLQkJCWNvbnRpbnVlOwotCQl9Ci0KLQkJbmV4dF9mb2xpb192YWRkciA9IHZhZGRyICYjNDM7ICgxVUwgJmx0OyZsdDsgKGN1cl9vcmRlciAmIzQzOyBwc2hpZnQoKSkpOwotCi0JCWlmIChuZXh0X2ZvbGlvX3ZhZGRyICZndDs9IHZhZGRyX3N0YXJ0ICYjNDM7IGxlbikKLQkJCWJyZWFrOwotCi0JCXdoaWxlICgoc3RhdHVzID0gdmFkZHJfcGFnZWZsYWdzX2dldChuZXh0X2ZvbGlvX3ZhZGRyLAotCQkJCQkJICAgICBwYWdlbWFwX2ZkLCBrcGFnZWZsYWdzX2ZkLAotCQkJCQkJICAgICAmYW1wO3BhZ2VfZmxhZ3MpKSAmZ3Q7PSAwKSB7Ci0JCQkvKgotCQkJICogbm9uIHByZXNlbnQgdmFkZHIsIG5leHQgY29tcG91bmQgaGVhZCBwYWdlLCBvcgotCQkJICogb3JkZXItMCBwYWdlCi0JCQkgKi8KLQkJCWlmIChzdGF0dXMgPT0gMSB8fAotCQkJICAgIChwYWdlX2ZsYWdzICZhbXA7IEtQRl9DT01QT1VORF9IRUFEKSB8fAotCQkJICAgICEocGFnZV9mbGFncyAmYW1wOyAoS1BGX0NPTVBPVU5EX0hFQUQgfCBLUEZfQ09NUE9VTkRfVEFJTCkpKSB7Ci0JCQkJaWYgKGN1cl9vcmRlciAmbHQ7IG5yX29yZGVycykgewotCQkJCQlvcmRlcnNbY3VyX29yZGVyXSYjNDM7JiM0Mzs7Ci0JCQkJCWN1cl9vcmRlciA9IC0xOwotCQkJCQl2YWRkciA9IG5leHRfZm9saW9fdmFkZHI7Ci0JCQkJfQotCQkJCWJyZWFrOwotCQkJfQotCi0JCQljdXJfb3JkZXImIzQzOyYjNDM7OwotCQkJbmV4dF9mb2xpb192YWRkciA9IHZhZGRyICYjNDM7ICgxVUwgJmx0OyZsdDsgKGN1cl9vcmRlciAmIzQzOyBwc2hpZnQoKSkpOwotCQl9Ci0KLQkJaWYgKHN0YXR1cyAmbHQ7IDApCi0JCQlyZXR1cm4gc3RhdHVzOwotCX0KLQlpZiAoY3VyX29yZGVyICZndDsgMCAmYW1wOyZhbXA7IGN1cl9vcmRlciAmbHQ7IG5yX29yZGVycykKLQkJb3JkZXJzW2N1cl9vcmRlcl0mIzQzOyYjNDM7OwotCXJldHVybiAwOwotfQotCiBzdGF0aWMgaW50IGNoZWNrX2FmdGVyX3NwbGl0X2ZvbGlvX29yZGVycyhjaGFyICp2YWRkcl9zdGFydCwgc2l6ZV90IGxlbiwKIAkJaW50IHBhZ2VtYXBfZmQsIGludCBrcGFnZWZsYWdzX2ZkLCBpbnQgb3JkZXJzW10sIGludCBucl9vcmRlcnMpCiB7CkBAIC0yNDAsNyAmIzQzOzExNyw3IEBAIHN0YXRpYyBpbnQgY2hlY2tfYWZ0ZXJfc3BsaXRfZm9saW9fb3JkZXJzKGNoYXIgKnZhZGRyX3N0YXJ0LCBzaXplX3QgbGVuLAogCQlrc2Z0X2V4aXRfZmFpbF9tc2coJiMzNDtDYW5ub3QgYWxsb2NhdGUgbWVtb3J5IGZvciB2YWRkcl9vcmRlcnMmIzM0Oyk7CiAKIAltZW1zZXQodmFkZHJfb3JkZXJzLCAwLCBzaXplb2YoaW50KSAqIG5yX29yZGVycyk7Ci0Jc3RhdHVzID0gZ2F0aGVyX2FmdGVyX3NwbGl0X2ZvbGlvX29yZGVycyh2YWRkcl9zdGFydCwgbGVuLCBwYWdlbWFwX2ZkLAomIzQzOwlzdGF0dXMgPSBnYXRoZXJfZm9saW9fb3JkZXJzKHZhZGRyX3N0YXJ0LCBsZW4sIHBhZ2VtYXBfZmQsCiAJCQkJICAgICBrcGFnZWZsYWdzX2ZkLCB2YWRkcl9vcmRlcnMsIG5yX29yZGVycyk7CiAJaWYgKHN0YXR1cykKIAkJa3NmdF9leGl0X2ZhaWxfbXNnKCYjMzQ7Z2F0aGVyIGZvbGlvIGluZm8gZmFpbGVkXG4mIzM0Oyk7CkBAIC0yOTYsNyAmIzQzOzE3Myw3IEBAIHN0YXRpYyB2b2lkIHZlcmlmeV9yc3NfYW5vbl9zcGxpdF9odWdlX3BhZ2VfYWxsX3plcm9lcyhjaGFyICpvbmVfcGFnZSwgaW50IG5yX2hwCiAJdW5zaWduZWQgbG9uZyByc3NfYW5vbl9iZWZvcmUsIHJzc19hbm9uX2FmdGVyOwogCXNpemVfdCBpOwogCi0JaWYgKCFjaGVja19odWdlX2Fub24ob25lX3BhZ2UsIG5yX2hwYWdlcywgcG1kX3BhZ2VzaXplKSkKJiM0MzsJaWYgKCFjaGVja19odWdlX2Fub24ob25lX3BhZ2UsIG5yX2hwYWdlcyAqIHBtZF9wYWdlc2l6ZSwgbnJfaHBhZ2VzLCBwbWRfcGFnZXNpemUpKQogCQlrc2Z0X2V4aXRfZmFpbF9tc2coJiMzNDtObyBUSFAgaXMgYWxsb2NhdGVkXG4mIzM0Oyk7CiAKIAlyc3NfYW5vbl9iZWZvcmUgPSByc3NfYW5vbigpOwpAQCAtMzExLDcgJiM0MzsxODgsNyBAQCBzdGF0aWMgdm9pZCB2ZXJpZnlfcnNzX2Fub25fc3BsaXRfaHVnZV9wYWdlX2FsbF96ZXJvZXMoY2hhciAqb25lX3BhZ2UsIGludCBucl9ocAogCQlpZiAob25lX3BhZ2VbaV0gIT0gKGNoYXIpMCkKIAkJCWtzZnRfZXhpdF9mYWlsX21zZygmIzM0OyVsZCBieXRlIGNvcnJ1cHRlZFxuJiMzNDssIGkpOwogCi0JaWYgKCFjaGVja19odWdlX2Fub24ob25lX3BhZ2UsIDAsIHBtZF9wYWdlc2l6ZSkpCiYjNDM7CWlmICghY2hlY2tfaHVnZV9hbm9uKG9uZV9wYWdlLCBucl9ocGFnZXMgKiBwbWRfcGFnZXNpemUsIDAsIHBtZF9wYWdlc2l6ZSkpCiAJCWtzZnRfZXhpdF9mYWlsX21zZygmIzM0O1N0aWxsIEFub25IdWdlUGFnZXMgbm90IHNwbGl0XG4mIzM0Oyk7CiAKIAlyc3NfYW5vbl9hZnRlciA9IHJzc19hbm9uKCk7CkBAIC0zNDcsNyAmIzQzOzIyNCw3IEBAIHN0YXRpYyB2b2lkIHNwbGl0X3BtZF90aHBfdG9fb3JkZXIoaW50IG9yZGVyKQogCWZvciAoaSA9IDA7IGkgJmx0OyBsZW47IGkmIzQzOyYjNDM7KQogCQlvbmVfcGFnZVtpXSA9IChjaGFyKWk7CiAKLQlpZiAoIWNoZWNrX2h1Z2VfYW5vbihvbmVfcGFnZSwgNCwgcG1kX3BhZ2VzaXplKSkKJiM0MzsJaWYgKCFjaGVja19odWdlX2Fub24ob25lX3BhZ2UsIDQgKiBwbWRfcGFnZXNpemUsIDQsIHBtZF9wYWdlc2l6ZSkpCiAJCWtzZnRfZXhpdF9mYWlsX21zZygmIzM0O05vIFRIUCBpcyBhbGxvY2F0ZWRcbiYjMzQ7KTsKIAogCS8qIHNwbGl0IGFsbCBUSFBzICovCkBAIC0zNjYsNyAmIzQzOzI0Myw3IEBAIHN0YXRpYyB2b2lkIHNwbGl0X3BtZF90aHBfdG9fb3JkZXIoaW50IG9yZGVyKQogCQkJCQkgICAocG1kX29yZGVyICYjNDM7IDEpKSkKIAkJa3NmdF9leGl0X2ZhaWxfbXNnKCYjMzQ7VW5leHBlY3RlZCBUSFAgc3BsaXRcbiYjMzQ7KTsKIAotCWlmICghY2hlY2tfaHVnZV9hbm9uKG9uZV9wYWdlLCAwLCBwbWRfcGFnZXNpemUpKQomIzQzOwlpZiAoIWNoZWNrX2h1Z2VfYW5vbihvbmVfcGFnZSwgNCAqIHBtZF9wYWdlc2l6ZSwgMCwgcG1kX3BhZ2VzaXplKSkKIAkJa3NmdF9leGl0X2ZhaWxfbXNnKCYjMzQ7U3RpbGwgQW5vbkh1Z2VQYWdlcyBub3Qgc3BsaXRcbiYjMzQ7KTsKIAogCWtzZnRfdGVzdF9yZXN1bHRfcGFzcygmIzM0O1NwbGl0IGh1Z2UgcGFnZXMgdG8gb3JkZXIgJWQgc3VjY2Vzc2Z1bFxuJiMzNDssIG9yZGVyKTsKQEAgLTM5Myw3ICYjNDM7MjcwLDcgQEAgc3RhdGljIHZvaWQgc3BsaXRfcHRlX21hcHBlZF90aHAodm9pZCkKIAlmb3IgKGkgPSAwOyBpICZsdDsgdGhwX2FyZWFfc2l6ZTsgaSYjNDM7JiM0MzspCiAJCXRocF9hcmVhW2ldID0gKGNoYXIpaTsKIAotCWlmICghY2hlY2tfaHVnZV9hbm9uKHRocF9hcmVhLCBucl90aHBzLCBwbWRfcGFnZXNpemUpKSB7CiYjNDM7CWlmICghY2hlY2tfaHVnZV9hbm9uKHRocF9hcmVhLCBucl90aHBzICogcG1kX3BhZ2VzaXplLCBucl90aHBzLCBwbWRfcGFnZXNpemUpKSB7CiAJCWtzZnRfdGVzdF9yZXN1bHRfc2tpcCgmIzM0O05vdCBhbGwgVEhQcyBhbGxvY2F0ZWRcbiYjMzQ7KTsKIAkJZ290byBvdXQ7CiAJfQpAQCAtNjU3LDcgJiM0Mzs1MzQsNyBAQCBzdGF0aWMgaW50IGNyZWF0ZV9wYWdlY2FjaGVfdGhwX2FuZF9mZChjb25zdCBjaGFyICp0ZXN0ZmlsZSwgc2l6ZV90IGZkX3NpemUsCiAKIAlmb3JjZV9yZWFkX3BhZ2VzKCphZGRyLCBmZF9zaXplIC8gcG1kX3BhZ2VzaXplLCBwbWRfcGFnZXNpemUpOwogCi0JaWYgKCFjaGVja19odWdlX2ZpbGUoKmFkZHIsIGZkX3NpemUgLyBwbWRfcGFnZXNpemUsIHBtZF9wYWdlc2l6ZSkpIHsKJiM0MzsJaWYgKCFjaGVja19odWdlX2ZpbGUoKmFkZHIsIGZkX3NpemUsIGZkX3NpemUgLyBwbWRfcGFnZXNpemUsIHBtZF9wYWdlc2l6ZSkpIHsKIAkJa3NmdF9wcmludF9tc2coJiMzNDtObyBsYXJnZSBwYWdlY2FjaGUgZm9saW8gZ2VuZXJhdGVkLCBwbGVhc2UgcHJvdmlkZSBhIGZpbGVzeXN0ZW0gc3VwcG9ydGluZyBsYXJnZSBmb2xpb1xuJiMzNDspOwogCQltdW5tYXAoKmFkZHIsIGZkX3NpemUpOwogCQljbG9zZSgqZmQpOwpAQCAtNzM1LDcgJiM0Mzs2MTIsNyBAQCBzdGF0aWMgdm9pZCBzcGxpdF90aHBfaW5fcGFnZWNhY2hlX3RvX29yZGVyX2F0KHNpemVfdCBmZF9zaXplLAogCQlnb3RvIG91dDsKIAl9CiAKLQlpZiAoIWNoZWNrX2h1Z2VfZmlsZShhZGRyLCAwLCBwbWRfcGFnZXNpemUpKSB7CiYjNDM7CWlmICghY2hlY2tfaHVnZV9maWxlKGFkZHIsIGZkX3NpemUsIDAsIHBtZF9wYWdlc2l6ZSkpIHsKIAkJa3NmdF9wcmludF9tc2coJiMzNDtTdGlsbCBGaWxlUG1kTWFwcGVkIG5vdCBzcGxpdFxuJiMzNDspOwogCQllcnIgPSBFWElUX0ZBSUxVUkU7CiAJCWdvdG8gb3V0OwpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdWZmZC1jb21tb24uYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3VmZmQtY29tbW9uLmMKaW5kZXggZjQ4ZjVkNDU5NGFiMC4uMWZiOTY3ZWY0OTg1NCAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdWZmZC1jb21tb24uYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS91ZmZkLWNvbW1vbi5jCkBAIC0xOTQsNyAmIzQzOzE5NCw5IEBAIHN0YXRpYyB2b2lkIHNobWVtX2FsaWFzX21hcHBpbmcodWZmZF9nbG9iYWxfdGVzdF9vcHRzX3QgKmdvcHRzLCBfX3U2NCAqc3RhcnQsCiAKIHN0YXRpYyB2b2lkIHNobWVtX2NoZWNrX3BtZF9tYXBwaW5nKHVmZmRfZ2xvYmFsX3Rlc3Rfb3B0c190ICpnb3B0cywgdm9pZCAqcCwgaW50IGV4cGVjdF9ucl9ocGFnZXMpCiB7Ci0JaWYgKCFjaGVja19odWdlX3NobWVtKGdvcHRzLSZndDthcmVhX2RzdF9hbGlhcywgZXhwZWN0X25yX2hwYWdlcywKJiM0MzsJc2l6ZV90IGxlbiA9IGV4cGVjdF9ucl9ocGFnZXMgKiByZWFkX3BtZF9wYWdlc2l6ZSgpOwomIzQzOwomIzQzOwlpZiAoIWNoZWNrX2h1Z2Vfc2htZW0oZ29wdHMtJmd0O2FyZWFfZHN0X2FsaWFzLCBsZW4sIGV4cGVjdF9ucl9ocGFnZXMsCiAJCQkgICAgICByZWFkX3BtZF9wYWdlc2l6ZSgpKSkKIAkJZXJyKCYjMzQ7RGlkIG5vdCBmaW5kIGV4cGVjdGVkICVkIG51bWJlciBvZiBodWdlcGFnZXMmIzM0OywKIAkJICAgIGV4cGVjdF9ucl9ocGFnZXMpOwpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdm1fdXRpbC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdm1fdXRpbC5jCmluZGV4IGVmMWVhMTE5ODFhNzQuLjEzYjVjZmY3ZGZlMzEgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ZtX3V0aWwuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS92bV91dGlsLmMKQEAgLTE1LDYgJiM0MzsxNSw5IEBACiAjZGVmaW5lIFNNQVBfRklMRV9QQVRIICYjMzQ7L3Byb2Mvc2VsZi9zbWFwcyYjMzQ7CiAjZGVmaW5lIFNUQVRVU19GSUxFX1BBVEggJiMzNDsvcHJvYy9zZWxmL3N0YXR1cyYjMzQ7CiAjZGVmaW5lIE1BWF9MSU5FX0xFTkdUSCA1MDAKJiM0MzsjZGVmaW5lIFBBR0VNQVBfUEFUSCAmIzM0Oy9wcm9jL3NlbGYvcGFnZW1hcCYjMzQ7CiYjNDM7I2RlZmluZSBLUEFHRUZMQUdTX1BBVEggJiMzNDsvcHJvYy9rcGFnZWZsYWdzJiMzNDsKJiM0MzsjZGVmaW5lIE1BWF9OUl9PUkRFUlMgMjAKIAogdW5zaWduZWQgaW50IF9fcGFnZV9zaXplOwogdW5zaWduZWQgaW50IF9fcGFnZV9zaGlmdDsKQEAgLTE5NCw2ICYjNDM7MTk3LDEyNSBAQCB1bnNpZ25lZCBsb25nIHJzc19hbm9uKHZvaWQpCiAJcmV0dXJuIHJzc19hbm9uOwogfQogCiYjNDM7c3RhdGljIGludCB2YWRkcl9wYWdlZmxhZ3NfZ2V0KGNoYXIgKnZhZGRyLCBpbnQgcGFnZW1hcF9mZCwgaW50IGtwYWdlZmxhZ3NfZmQsCiYjNDM7CQl1aW50NjRfdCAqZmxhZ3MpCiYjNDM7ewomIzQzOwl1bnNpZ25lZCBsb25nIHBmbjsKJiM0MzsKJiM0MzsJcGZuID0gcGFnZW1hcF9nZXRfcGZuKHBhZ2VtYXBfZmQsIHZhZGRyKTsKJiM0MzsKJiM0MzsJLyogbm9uLXByZXNlbnQgUEZOICovCiYjNDM7CWlmIChwZm4gPT0gLTFVTCkKJiM0MzsJCXJldHVybiAxOwomIzQzOwomIzQzOwlpZiAocGFnZWZsYWdzX2dldChwZm4sIGtwYWdlZmxhZ3NfZmQsIGZsYWdzKSkKJiM0MzsJCXJldHVybiAtMTsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzOy8qCiYjNDM7ICogZ2F0aGVyX2ZvbGlvX29yZGVycyAtIHNjYW4gdGhyb3VnaCBbdmFkZHJfc3RhcnQsIGxlbikgYW5kIHJlY29yZAomIzQzOyAqIGZvbGlvIG9yZGVycwomIzQzOyAqCiYjNDM7ICogQHZhZGRyX3N0YXJ0OiBzdGFydCB2YWRkcgomIzQzOyAqIEBsZW46IHJhbmdlIGxlbmd0aAomIzQzOyAqIEBwYWdlbWFwX2ZkOiBmaWxlIGRlc2NyaXB0b3IgdG8gL3Byb2MvJmx0O3BpZCZndDsvcGFnZW1hcAomIzQzOyAqIEBrcGFnZWZsYWdzX2ZkOiBmaWxlIGRlc2NyaXB0b3IgdG8gL3Byb2Mva3BhZ2VmbGFncwomIzQzOyAqIEBvcmRlcnM6IG91dHB1dCBmb2xpbyBvcmRlciBhcnJheQomIzQzOyAqIEBucl9vcmRlcnM6IGZvbGlvIG9yZGVyIGFycmF5IHNpemUKJiM0MzsgKgomIzQzOyAqIGdhdGhlcl9mb2xpb19vcmRlcnMoKSBzY2FuIHRocm91Z2ggW3ZhZGRyX3N0YXJ0LCBsZW4pIGFuZCBjaGVjawomIzQzOyAqIGFsbCBmb2xpb3Mgd2l0aGluIHRoZSByYW5nZSBhbmQgcmVjb3JkIHRoZWlyIG9yZGVycy4gQWxsIG9yZGVyLTAgcGFnZXMgd2lsbAomIzQzOyAqIGJlIHJlY29yZGVkLiBOb24tcHJlc2VudCB2YWRkciBpcyBza2lwcGVkLgomIzQzOyAqCiYjNDM7ICogUmV0dXJuOiAwIC0gbm8gZXJyb3IsIC0xIC0gdW5oYW5kbGVkIGNhc2VzCiYjNDM7ICovCiYjNDM7aW50IGdhdGhlcl9mb2xpb19vcmRlcnMoY2hhciAqdmFkZHJfc3RhcnQsIHNpemVfdCBsZW4sCiYjNDM7CQlpbnQgcGFnZW1hcF9mZCwgaW50IGtwYWdlZmxhZ3NfZmQsIGludCBvcmRlcnNbXSwgaW50IG5yX29yZGVycykKJiM0Mzt7CiYjNDM7CXVpbnQ2NF90IHBhZ2VfZmxhZ3MgPSAwOwomIzQzOwlpbnQgY3VyX29yZGVyID0gLTE7CiYjNDM7CWNoYXIgKnZhZGRyOwomIzQzOwomIzQzOwlpZiAocGFnZW1hcF9mZCA9PSAtMSB8fCBrcGFnZWZsYWdzX2ZkID09IC0xKQomIzQzOwkJcmV0dXJuIC0xOwomIzQzOwlpZiAoIW9yZGVycykKJiM0MzsJCXJldHVybiAtMTsKJiM0MzsJaWYgKG5yX29yZGVycyAmbHQ7PSAwKQomIzQzOwkJcmV0dXJuIC0xOwomIzQzOwomIzQzOwlmb3IgKHZhZGRyID0gdmFkZHJfc3RhcnQ7IHZhZGRyICZsdDsgdmFkZHJfc3RhcnQgJiM0MzsgbGVuOykgewomIzQzOwkJY2hhciAqbmV4dF9mb2xpb192YWRkcjsKJiM0MzsJCWludCBzdGF0dXM7CiYjNDM7CiYjNDM7CQlzdGF0dXMgPSB2YWRkcl9wYWdlZmxhZ3NfZ2V0KHZhZGRyLCBwYWdlbWFwX2ZkLCBrcGFnZWZsYWdzX2ZkLAomIzQzOwkJCQkmYW1wO3BhZ2VfZmxhZ3MpOwomIzQzOwkJaWYgKHN0YXR1cyAmbHQ7IDApCiYjNDM7CQkJcmV0dXJuIC0xOwomIzQzOwomIzQzOwkJLyogc2tpcCBub24gcHJlc2VudCB2YWRkciAqLwomIzQzOwkJaWYgKHN0YXR1cyA9PSAxKSB7CiYjNDM7CQkJdmFkZHIgJiM0Mzs9IHBzaXplKCk7CiYjNDM7CQkJY29udGludWU7CiYjNDM7CQl9CiYjNDM7CiYjNDM7CQkvKiBhbGwgb3JkZXItMCBwYWdlcyB3aXRoIHBvc3NpYmxlIGZhbHNlIHBvc3RpdmUgKG5vbiBmb2xpbykgKi8KJiM0MzsJCWlmICghKHBhZ2VfZmxhZ3MgJmFtcDsgKEtQRl9DT01QT1VORF9IRUFEIHwgS1BGX0NPTVBPVU5EX1RBSUwpKSkgewomIzQzOwkJCW9yZGVyc1swXSYjNDM7JiM0Mzs7CiYjNDM7CQkJdmFkZHIgJiM0Mzs9IHBzaXplKCk7CiYjNDM7CQkJY29udGludWU7CiYjNDM7CQl9CiYjNDM7CiYjNDM7CQkvKiBza2lwIG5vbiB0aHAgY29tcG91bmQgcGFnZXMgKi8KJiM0MzsJCWlmICghKHBhZ2VfZmxhZ3MgJmFtcDsgS1BGX1RIUCkpIHsKJiM0MzsJCQl2YWRkciAmIzQzOz0gcHNpemUoKTsKJiM0MzsJCQljb250aW51ZTsKJiM0MzsJCX0KJiM0MzsKJiM0MzsJCS8qIHZwbiBwb2ludHMgdG8gcGFydCBvZiBhIFRIUCBhdCB0aGlzIHBvaW50ICovCiYjNDM7CQlpZiAocGFnZV9mbGFncyAmYW1wOyBLUEZfQ09NUE9VTkRfSEVBRCkKJiM0MzsJCQljdXJfb3JkZXIgPSAxOwomIzQzOwkJZWxzZSB7CiYjNDM7CQkJdmFkZHIgJiM0Mzs9IHBzaXplKCk7CiYjNDM7CQkJY29udGludWU7CiYjNDM7CQl9CiYjNDM7CiYjNDM7CQluZXh0X2ZvbGlvX3ZhZGRyID0gdmFkZHIgJiM0MzsgKDFVTCAmbHQ7Jmx0OyAoY3VyX29yZGVyICYjNDM7IHBzaGlmdCgpKSk7CiYjNDM7CiYjNDM7CQlpZiAobmV4dF9mb2xpb192YWRkciAmZ3Q7PSB2YWRkcl9zdGFydCAmIzQzOyBsZW4pCiYjNDM7CQkJYnJlYWs7CiYjNDM7CiYjNDM7CQl3aGlsZSAoKHN0YXR1cyA9IHZhZGRyX3BhZ2VmbGFnc19nZXQobmV4dF9mb2xpb192YWRkciwKJiM0MzsJCQkJCQkgICAgIHBhZ2VtYXBfZmQsIGtwYWdlZmxhZ3NfZmQsCiYjNDM7CQkJCQkJICAgICAmYW1wO3BhZ2VfZmxhZ3MpKSAmZ3Q7PSAwKSB7CiYjNDM7CQkJLyoKJiM0MzsJCQkgKiBub24gcHJlc2VudCB2YWRkciwgbmV4dCBjb21wb3VuZCBoZWFkIHBhZ2UsIG9yCiYjNDM7CQkJICogb3JkZXItMCBwYWdlCiYjNDM7CQkJICovCiYjNDM7CQkJaWYgKHN0YXR1cyA9PSAxIHx8CiYjNDM7CQkJICAgIChwYWdlX2ZsYWdzICZhbXA7IEtQRl9DT01QT1VORF9IRUFEKSB8fAomIzQzOwkJCSAgICAhKHBhZ2VfZmxhZ3MgJmFtcDsgKEtQRl9DT01QT1VORF9IRUFEIHwgS1BGX0NPTVBPVU5EX1RBSUwpKSkgewomIzQzOwkJCQlpZiAoY3VyX29yZGVyICZsdDsgbnJfb3JkZXJzKSB7CiYjNDM7CQkJCQlvcmRlcnNbY3VyX29yZGVyXSYjNDM7JiM0Mzs7CiYjNDM7CQkJCQljdXJfb3JkZXIgPSAtMTsKJiM0MzsJCQkJCXZhZGRyID0gbmV4dF9mb2xpb192YWRkcjsKJiM0MzsJCQkJfQomIzQzOwkJCQlicmVhazsKJiM0MzsJCQl9CiYjNDM7CiYjNDM7CQkJY3VyX29yZGVyJiM0MzsmIzQzOzsKJiM0MzsJCQluZXh0X2ZvbGlvX3ZhZGRyID0gdmFkZHIgJiM0MzsgKDFVTCAmbHQ7Jmx0OyAoY3VyX29yZGVyICYjNDM7IHBzaGlmdCgpKSk7CiYjNDM7CQl9CiYjNDM7CiYjNDM7CQlpZiAoc3RhdHVzICZsdDsgMCkKJiM0MzsJCQlyZXR1cm4gc3RhdHVzOwomIzQzOwl9CiYjNDM7CWlmIChjdXJfb3JkZXIgJmd0OyAwICZhbXA7JmFtcDsgY3VyX29yZGVyICZsdDsgbnJfb3JkZXJzKQomIzQzOwkJb3JkZXJzW2N1cl9vcmRlcl0mIzQzOyYjNDM7OwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiBjaGFyICpfX2dldF9zbWFwX2VudHJ5KHZvaWQgKmFkZHIsIGNvbnN0IGNoYXIgKnBhdHRlcm4sIGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbikKIHsKIAlpbnQgcmV0OwpAQCAtMjI5LDcgJiM0MzszNTEsNyBAQCBjaGFyICpfX2dldF9zbWFwX2VudHJ5KHZvaWQgKmFkZHIsIGNvbnN0IGNoYXIgKnBhdHRlcm4sIGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbikKIAlyZXR1cm4gZW50cnk7CiB9CiAKLWJvb2wgX19jaGVja19odWdlKHZvaWQgKmFkZHIsIGNoYXIgKnBhdHRlcm4sIGludCBucl9ocGFnZXMsCiYjNDM7c3RhdGljIGJvb2wgX19jaGVja19wbWRfaHVnZSh2b2lkICphZGRyLCBjaGFyICpwYXR0ZXJuLCBpbnQgbnJfaHBhZ2VzLAogCQkgIHVpbnQ2NF90IGhwYWdlX3NpemUpCiB7CiAJY2hhciBidWZmZXJbTUFYX0xJTkVfTEVOR1RIXTsKQEAgLTI0NywxOSAmIzQzOzM2OSw4NCBAQCBib29sIF9fY2hlY2tfaHVnZSh2b2lkICphZGRyLCBjaGFyICpwYXR0ZXJuLCBpbnQgbnJfaHBhZ2VzLAogCXJldHVybiB0aHAgPT0gKG5yX2hwYWdlcyAqIChocGFnZV9zaXplICZndDsmZ3Q7IDEwKSk7CiB9CiAKLWJvb2wgY2hlY2tfaHVnZV9hbm9uKHZvaWQgKmFkZHIsIGludCBucl9ocGFnZXMsIHVpbnQ2NF90IGhwYWdlX3NpemUpCiYjNDM7c3RhdGljIGJvb2wgY2hlY2tfbGFyZ2VfZm9saW9zKHZvaWQgKmFkZHIsIHNpemVfdCBsZW4sIGludCBucl9ocGFnZXMsCiYjNDM7CQl1aW50NjRfdCBocGFnZV9zaXplKQomIzQzO3sKJiM0MzsJaW50IG9yZGVyID0gMCwgcGFnZXNpemUgPSBnZXRwYWdlc2l6ZSgpOwomIzQzOwl1bnNpZ25lZCBpbnQgbnJfcGFnZXMgPSBocGFnZV9zaXplIC8gcGFnZXNpemU7CiYjNDM7CWludCBvcmRlcnNbTUFYX05SX09SREVSU10sIHN0YXR1czsKJiM0MzsJaW50IHBhZ2VtYXBfZmQsIGtwYWdlZmxhZ3NfZmQ7CiYjNDM7CWJvb2wgcmV0ID0gZmFsc2U7CiYjNDM7CiYjNDM7CWlmICghbnJfcGFnZXMpCiYjNDM7CQlrc2Z0X2V4aXRfZmFpbF9tc2coJiMzNDtpbnZhbGlkIGh1Z2VwYWdlIHNpemVcbiYjMzQ7KTsKJiM0MzsKJiM0MzsJb3JkZXIgPSAzMSAtIF9fYnVpbHRpbl9jbHoobnJfcGFnZXMpOwomIzQzOwlpZiAoIW9yZGVyIHx8IG9yZGVyICZndDs9IE1BWF9OUl9PUkRFUlMpCiYjNDM7CQlrc2Z0X2V4aXRfZmFpbF9tc2coJiMzNDtpbnZhbGlkIG9yZGVyXG4mIzM0Oyk7CiYjNDM7CiYjNDM7CW1lbXNldChvcmRlcnMsIDAsIHNpemVvZihpbnQpICogTUFYX05SX09SREVSUyk7CiYjNDM7CXBhZ2VtYXBfZmQgPSBvcGVuKFBBR0VNQVBfUEFUSCwgT19SRE9OTFkpOwomIzQzOwlpZiAocGFnZW1hcF9mZCA9PSAtMSkKJiM0MzsJCWtzZnRfZXhpdF9mYWlsX21zZygmIzM0O3JlYWQgcGFnZW1hcCBmYWlsXG4mIzM0Oyk7CiYjNDM7CiYjNDM7CWtwYWdlZmxhZ3NfZmQgPSBvcGVuKEtQQUdFRkxBR1NfUEFUSCwgT19SRE9OTFkpOwomIzQzOwlpZiAoa3BhZ2VmbGFnc19mZCA9PSAtMSkgewomIzQzOwkJY2xvc2UocGFnZW1hcF9mZCk7CiYjNDM7CQlrc2Z0X2V4aXRfZmFpbF9tc2coJiMzNDtyZWFkIGtwYWdlZmxhZ3MgZmFpbFxuJiMzNDspOwomIzQzOwl9CiYjNDM7CiYjNDM7CXN0YXR1cyA9IGdhdGhlcl9mb2xpb19vcmRlcnMoYWRkciwgbGVuLCBwYWdlbWFwX2ZkLAomIzQzOwkJCWtwYWdlZmxhZ3NfZmQsIG9yZGVycywgTUFYX05SX09SREVSUyk7CiYjNDM7CWlmIChzdGF0dXMpCiYjNDM7CQlnb3RvIG91dDsKJiM0MzsKJiM0MzsJaWYgKG9yZGVyc1tvcmRlcl0gPT0gbnJfaHBhZ2VzKQomIzQzOwkJcmV0ID0gdHJ1ZTsKJiM0MzsKJiM0MztvdXQ6CiYjNDM7CWNsb3NlKHBhZ2VtYXBfZmQpOwomIzQzOwljbG9zZShrcGFnZWZsYWdzX2ZkKTsKJiM0MzsJcmV0dXJuIHJldDsKJiM0Mzt9CiYjNDM7CiYjNDM7Ym9vbCBjaGVja19odWdlX2Fub24odm9pZCAqYWRkciwgc2l6ZV90IGxlbiwgaW50IG5yX2hwYWdlcywgdWludDY0X3QgaHBhZ2Vfc2l6ZSkKIHsKLQlyZXR1cm4gX19jaGVja19odWdlKGFkZHIsICYjMzQ7QW5vbkh1Z2VQYWdlczogJiMzNDssIG5yX2hwYWdlcywgaHBhZ2Vfc2l6ZSk7CiYjNDM7CXVpbnQ2NF90IHBtZF9wYWdlc2l6ZSA9IHJlYWRfcG1kX3BhZ2VzaXplKCk7CiYjNDM7CiYjNDM7CWlmICghcG1kX3BhZ2VzaXplKQomIzQzOwkJa3NmdF9leGl0X2ZhaWxfbXNnKCYjMzQ7cmVhZGluZyBQTUQgcGFnZXNpemUgZmFpbGVkXG4mIzM0Oyk7CiYjNDM7CiYjNDM7CWlmIChocGFnZV9zaXplID09IHBtZF9wYWdlc2l6ZSkKJiM0MzsJCXJldHVybiBfX2NoZWNrX3BtZF9odWdlKGFkZHIsICYjMzQ7QW5vbkh1Z2VQYWdlczogJiMzNDssIG5yX2hwYWdlcywgaHBhZ2Vfc2l6ZSk7CiYjNDM7CiYjNDM7CXJldHVybiBjaGVja19sYXJnZV9mb2xpb3MoYWRkciwgbGVuLCBucl9ocGFnZXMsIGhwYWdlX3NpemUpOwogfQogCi1ib29sIGNoZWNrX2h1Z2VfZmlsZSh2b2lkICphZGRyLCBpbnQgbnJfaHBhZ2VzLCB1aW50NjRfdCBocGFnZV9zaXplKQomIzQzO2Jvb2wgY2hlY2tfaHVnZV9maWxlKHZvaWQgKmFkZHIsIHNpemVfdCBsZW4sIGludCBucl9ocGFnZXMsIHVpbnQ2NF90IGhwYWdlX3NpemUpCiB7Ci0JcmV0dXJuIF9fY2hlY2tfaHVnZShhZGRyLCAmIzM0O0ZpbGVQbWRNYXBwZWQ6JiMzNDssIG5yX2hwYWdlcywgaHBhZ2Vfc2l6ZSk7CiYjNDM7CXVpbnQ2NF90IHBtZF9wYWdlc2l6ZSA9IHJlYWRfcG1kX3BhZ2VzaXplKCk7CiYjNDM7CiYjNDM7CWlmICghcG1kX3BhZ2VzaXplKQomIzQzOwkJa3NmdF9leGl0X2ZhaWxfbXNnKCYjMzQ7cmVhZGluZyBQTUQgcGFnZXNpemUgZmFpbGVkXG4mIzM0Oyk7CiYjNDM7CiYjNDM7CWlmIChocGFnZV9zaXplID09IHBtZF9wYWdlc2l6ZSkKJiM0MzsJCXJldHVybiBfX2NoZWNrX3BtZF9odWdlKGFkZHIsICYjMzQ7RmlsZVBtZE1hcHBlZDomIzM0OywgbnJfaHBhZ2VzLCBocGFnZV9zaXplKTsKJiM0MzsKJiM0MzsJcmV0dXJuIGNoZWNrX2xhcmdlX2ZvbGlvcyhhZGRyLCBsZW4sIG5yX2hwYWdlcywgaHBhZ2Vfc2l6ZSk7CiB9CiAKLWJvb2wgY2hlY2tfaHVnZV9zaG1lbSh2b2lkICphZGRyLCBpbnQgbnJfaHBhZ2VzLCB1aW50NjRfdCBocGFnZV9zaXplKQomIzQzO2Jvb2wgY2hlY2tfaHVnZV9zaG1lbSh2b2lkICphZGRyLCBzaXplX3QgbGVuLCBpbnQgbnJfaHBhZ2VzLCB1aW50NjRfdCBocGFnZV9zaXplKQogewotCXJldHVybiBfX2NoZWNrX2h1Z2UoYWRkciwgJiMzNDtTaG1lbVBtZE1hcHBlZDomIzM0OywgbnJfaHBhZ2VzLCBocGFnZV9zaXplKTsKJiM0MzsJdWludDY0X3QgcG1kX3BhZ2VzaXplID0gcmVhZF9wbWRfcGFnZXNpemUoKTsKJiM0MzsKJiM0MzsJaWYgKCFwbWRfcGFnZXNpemUpCiYjNDM7CQlrc2Z0X2V4aXRfZmFpbF9tc2coJiMzNDtyZWFkaW5nIFBNRCBwYWdlc2l6ZSBmYWlsZWRcbiYjMzQ7KTsKJiM0MzsKJiM0MzsJaWYgKGhwYWdlX3NpemUgPT0gcG1kX3BhZ2VzaXplKQomIzQzOwkJcmV0dXJuIF9fY2hlY2tfcG1kX2h1Z2UoYWRkciwgJiMzNDtTaG1lbVBtZE1hcHBlZDomIzM0OywgbnJfaHBhZ2VzLCBocGFnZV9zaXplKTsKJiM0MzsKJiM0MzsJcmV0dXJuIGNoZWNrX2xhcmdlX2ZvbGlvcyhhZGRyLCBsZW4sIG5yX2hwYWdlcywgaHBhZ2Vfc2l6ZSk7CiB9CiAKIGludDY0X3QgYWxsb2NhdGVfdHJhbnNodWdlKHZvaWQgKnB0ciwgaW50IHBhZ2VtYXBfZmQpCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS92bV91dGlsLmggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS92bV91dGlsLmgKaW5kZXggNzc5OTE1NGI2N2VlZC4uOWE0OWFmODg3MDJlNCAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdm1fdXRpbC5oCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ZtX3V0aWwuaApAQCAtOTAsMTEgJiM0Mzs5MCwxMyBAQCB2b2lkIGNsZWFyX3NvZnRkaXJ0eSh2b2lkKTsKIGJvb2wgY2hlY2tfZm9yX3BhdHRlcm4oRklMRSAqZnAsIGNvbnN0IGNoYXIgKnBhdHRlcm4sIGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbik7CiB1aW50NjRfdCByZWFkX3BtZF9wYWdlc2l6ZSh2b2lkKTsKIHVuc2lnbmVkIGxvbmcgcnNzX2Fub24odm9pZCk7Ci1ib29sIGNoZWNrX2h1Z2VfYW5vbih2b2lkICphZGRyLCBpbnQgbnJfaHBhZ2VzLCB1aW50NjRfdCBocGFnZV9zaXplKTsKLWJvb2wgY2hlY2tfaHVnZV9maWxlKHZvaWQgKmFkZHIsIGludCBucl9ocGFnZXMsIHVpbnQ2NF90IGhwYWdlX3NpemUpOwotYm9vbCBjaGVja19odWdlX3NobWVtKHZvaWQgKmFkZHIsIGludCBucl9ocGFnZXMsIHVpbnQ2NF90IGhwYWdlX3NpemUpOwomIzQzO2Jvb2wgY2hlY2tfaHVnZV9hbm9uKHZvaWQgKmFkZHIsIHNpemVfdCBsZW4sIGludCBucl9ocGFnZXMsIHVpbnQ2NF90IGhwYWdlX3NpemUpOwomIzQzO2Jvb2wgY2hlY2tfaHVnZV9maWxlKHZvaWQgKmFkZHIsIHNpemVfdCBsZW4sIGludCBucl9ocGFnZXMsIHVpbnQ2NF90IGhwYWdlX3NpemUpOwomIzQzO2Jvb2wgY2hlY2tfaHVnZV9zaG1lbSh2b2lkICphZGRyLCBzaXplX3QgbGVuLCBpbnQgbnJfaHBhZ2VzLCB1aW50NjRfdCBocGFnZV9zaXplKTsKIGludDY0X3QgYWxsb2NhdGVfdHJhbnNodWdlKHZvaWQgKnB0ciwgaW50IHBhZ2VtYXBfZmQpOwogaW50IHBhZ2VmbGFnc19nZXQodW5zaWduZWQgbG9uZyBwZm4sIGludCBrcGFnZWZsYWdzX2ZkLCB1aW50NjRfdCAqZmxhZ3MpOwomIzQzO2ludCBnYXRoZXJfZm9saW9fb3JkZXJzKGNoYXIgKnZhZGRyX3N0YXJ0LCBzaXplX3QgbGVuLAomIzQzOwkJaW50IHBhZ2VtYXBfZmQsIGludCBrcGFnZWZsYWdzX2ZkLCBpbnQgb3JkZXJzW10sIGludCBucl9vcmRlcnMpOwogCiBpbnQgdWZmZF9yZWdpc3RlcihpbnQgdWZmZCwgdm9pZCAqYWRkciwgdWludDY0X3QgbGVuLAogCQkgIGJvb2wgbWlzcywgYm9vbCB3cCwgYm9vbCBtaW5vcik7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDA0OjA3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4MTUxCgkJCQkJCQlvdXRwdXQ6IDY1CgkJCQkJCQl0aG91Z2h0czogNDc1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlBhdGNoIEFuYWx5c2lzOiBUSFAgU2VsZnRlc3RzKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpdCYjMzk7cyB0b3VjaGluZyBmaWxlcyB3aXRoaW4gYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2AuIFNwZWNpZmljYWxseSwgaXQmIzM5O3MgdXBkYXRpbmcgdGVzdHMgcmVsYXRlZCB0byBUcmFuc3BhcmVudCBIdWdlIFBhZ2VzLCBsaWtlIGBraHVnZXBhZ2VkLmNgLCBgc3BsaXRfaHVnZV9wYWdlX3Rlc3QuY2AsIGFuZCBgdm1fdXRpbC5jYC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoZXNlIGFyZSBwdXJlbHkgc2VsZnRlc3RzLiBCdXQgaXQmIzM5O3MgYWx3YXlzIGdvb2QgdG8gZG91YmxlLWNoZWNrLiBMZXQgbWUgcXVpY2tseSBzY2FuIHRoZSBkaWZmIHRvIGJlIGFic29sdXRlbHkgY2VydGFpbi4uLgoKQWxyaWdodCwgdGhlIGZpbGVzIGxpc3RlZCBhcmU6IGBmb2xpb19zcGxpdF9yYWNlX3Rlc3QuY2AsIGBraHVnZXBhZ2VkLmNgLCBgcGFnZW1hcF9pb2N0bC5jYCwgYHByY3RsX3RocF9kaXNhYmxlLmNgLCBgcnVuX3ZtdGVzdHMuc2hgLCBgc29mdC1kaXJ0eS5jYCwgYHNwbGl0X2h1Z2VfcGFnZV90ZXN0LmNgLCBgdWZmZC1jb21tb24uY2AsIGB2bV91dGlsLmNgLCBhbmQgYHZtX3V0aWwuaGAg4oCTIGFsbCBzYWZlbHkgbmVzdGVkIHdpdGhpbiB0aGUgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2AgZGlyZWN0b3J5LgoKU2luY2UgdGhlc2UgYXJlIHNlbGZ0ZXN0cywgdXNlci1zcGFjZSB0ZXN0cywgdGhleSYjMzk7cmUgbm90IGtlcm5lbCBjb2RlIHJ1bm5pbmcgaW4ga2VybmVsIHNwYWNlLiBUaGV5JiMzOTtyZSBkZXNpZ25lZCB0byAqdGVzdCogdGhlIGZ1bmN0aW9uYWxpdHkgb2YgdGhlIGtlcm5lbCwgYnV0IHRoZXkgZG9uJiMzOTt0ICppbXBsZW1lbnQqIGl0LiBUaGVyZWZvcmUsIHRoaXMgcGF0Y2ggaXNuJiMzOTt0IG1ha2luZyBhbnkgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgaXRzZWxmOyBpdCYjMzk7cyBqdXN0IHJlZmluaW5nIG91ciB0ZXN0aW5nIG1ldGhvZG9sb2d5LgoKTGV0IG1lIGNvbmZpcm0gdGhhdCBvbmUgbW9yZSB0aW1lLCBqdXN0IHRvIGJlIG9uIHRoZSBzYWZlIHNpZGUsIGxldCYjMzk7cyBsb29rIGF0IHRoZSBkaWZmIGFnYWluLi4uIFl1cCwgYWxsIHRoZSBtb2RpZmllZCBmaWxlcyBhcmUgaW5kZWVkIHVuZGVyIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9gLgoKR2l2ZW4gdGhhdCwgc2V0dGluZyBgV29ydGhGdXp6aW5nYCB0byBgZmFsc2VgIGlzIHRoZSBjb3JyZWN0IGFjdGlvbiBoZXJlLgoKKipSZWFzb25pbmc6KiogVGhlIHBhdGNoIGlzIGlzb2xhdGVkIHRvIHVzZXItc3BhY2Ugc2VsZnRlc3RzLCBhbmQgdGhlcmVmb3JlIGhhcyBubyBpbXBhY3Qgb24ga2VybmVsIGZ1bmN0aW9uYWxpdHkgYW5kIHNob3VsZCBub3QgYmUgZnV6emVkLgoKTm93LCBsZXQmIzM5O3MgY2FsbCBgc2V0LXJlc3VsdHNgIHdpdGggYFdvcnRoRnV6emluZz1mYWxzZWAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMDQ6MDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIHVzZXItc3BhY2Ugc2VsZnRlc3RzIGluIHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tLyBhbmQgZG9lcyBub3QgbWFrZSBhbnkgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgY29kZSBpdHNlbGYuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIHVzZXItc3BhY2Ugc2VsZnRlc3RzIGluIHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tLyBhbmQgZG9lcyBub3QgbWFrZSBhbnkgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgY29kZSBpdHNlbGYuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMDZUMDQ6MDc6MTEuMDI4NDM0MDA0WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Nzk4NTg0NjczNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggb25seSBtb2RpZmllcyB1c2VyLXNwYWNlIHNlbGZ0ZXN0cyBpbiB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS8gYW5kIGRvZXMgbm90IG1ha2UgYW55IGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIGNvZGUgaXRzZWxmLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMDQ6MDc6MTEuMDI4NDQwMTE0WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0OTc4MDk1MzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA1NGJjNzg1M2Q0ZjVmNWU1ZWQ4ZGZiYjlmZmZmYzM5NWMzM2Q0ZGE0XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUaHUgQXVnIDYgMDQ6MDc6MTAgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZm9saW9fc3BsaXRfcmFjZV90ZXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9mb2xpb19zcGxpdF9yYWNlX3Rlc3QuY1xcbmluZGV4IDYzMjllMzdmZmY0YzkuLjQ1Yjg0ZjdiMzY0ZTAgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZm9saW9fc3BsaXRfcmFjZV90ZXN0LmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9mb2xpb19zcGxpdF9yYWNlX3Rlc3QuY1xcbkBAIC0xODIsNyArMTgyLDcgQEAgc3RhdGljIHVpbnQ2NF90IHJ1bl9pdGVyYXRpb24odm9pZClcXG4gXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIFRPVEFMX1BBR0VTOyBpKyspXFxuIFxcdFxcdGZpbGxfcGFnZShtbWFwX2Jhc2UsIGkpO1xcbiBcXG4tXFx0aWYgKCFjaGVja19odWdlX3NobWVtKG1tYXBfYmFzZSwgTlJfUE1EX1BBR0UsIHBtZF9wYWdlc2l6ZSkpXFxuK1xcdGlmICghY2hlY2tfaHVnZV9zaG1lbShtbWFwX2Jhc2UsIEZJTEVfU0laRSwgTlJfUE1EX1BBR0UsIHBtZF9wYWdlc2l6ZSkpXFxuIFxcdFxcdGtzZnRfZXhpdF9mYWlsX21zZyhcXFwiTm8gc2htZW0gVEhQIGlzIGFsbG9jYXRlZFxcXFxuXFxcIik7XFxuIFxcbiBcXHRpZiAocHRocmVhZF9iYXJyaWVyX2luaXQoXFx1MDAyNmN0bC5iYXJyaWVyLCBOVUxMLCBOVU1fUkVBREVSX1RIUkVBRFMgKyAxKSAhPSAwKVxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9raHVnZXBhZ2VkLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9raHVnZXBhZ2VkLmNcXG5pbmRleCBiMjU0YmFmOWUwYjc1Li43Zjg3YWVlZDMwMWM0IDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2todWdlcGFnZWQuY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2todWdlcGFnZWQuY1xcbkBAIC0yNiw5ICsyNiwxMSBAQFxcbiBcXG4gI2RlZmluZSBCQVNFX0FERFIgKCh2b2lkICopKDFVTCBcXHUwMDNjXFx1MDAzYyAzMCkpXFxuIHN0YXRpYyB1bnNpZ25lZCBsb25nIGhwYWdlX3BtZF9zaXplO1xcbitzdGF0aWMgaW50IGhwYWdlX3BtZF9vcmRlcjtcXG4gc3RhdGljIHVuc2lnbmVkIGxvbmcgcGFnZV9zaXplO1xcbiBzdGF0aWMgaW50IGhwYWdlX3BtZF9ucjtcXG4gc3RhdGljIGludCBhbm9uX29yZGVyO1xcbitzdGF0aWMgaW50IGNvbGxhcHNlX29yZGVyO1xcbiBcXG4gI2RlZmluZSBQSURfU01BUFMgXFxcIi9wcm9jL3NlbGYvc21hcHNcXFwiXFxuICNkZWZpbmUgVEVTVF9GSUxFIFxcXCJjb2xsYXBzZV90ZXN0X2ZpbGVcXFwiXFxuQEAgLTUxLDcgKzUzLDcgQEAgc3RydWN0IG1lbV9vcHMge1xcbiBcXHR2b2lkICooKnNldHVwX2FyZWEpKGludCBucl9ocGFnZXMpO1xcbiBcXHR2b2lkICgqY2xlYW51cF9hcmVhKSh2b2lkICpwLCB1bnNpZ25lZCBsb25nIHNpemUpO1xcbiBcXHR2b2lkICgqZmF1bHQpKHZvaWQgKnAsIHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kKTtcXG4tXFx0Ym9vbCAoKmNoZWNrX2h1Z2UpKHZvaWQgKmFkZHIsIGludCBucl9ocGFnZXMpO1xcbitcXHRib29sICgqY2hlY2tfaHVnZSkodm9pZCAqYWRkciwgc2l6ZV90IGxlbiwgaW50IG5yX2hwYWdlcywgdW5zaWduZWQgbG9uZyBocGFnZV9zaXplKTtcXG4gXFx0Y29uc3QgY2hhciAqbmFtZTtcXG4gfTtcXG4gXFxuQEAgLTY5LDYgKzcxLDcgQEAgc3RydWN0IGNvbGxhcHNlX2NvbnRleHQge1xcbiB9O1xcbiBcXG4gc3RhdGljIHN0cnVjdCBjb2xsYXBzZV9jb250ZXh0ICpraHVnZXBhZ2VkX2NvbnRleHQ7XFxuK3N0YXRpYyBzdHJ1Y3QgY29sbGFwc2VfY29udGV4dCAqbXRocF9raHVnZXBhZ2VkX2NvbnRleHQ7XFxuIHN0YXRpYyBzdHJ1Y3QgY29sbGFwc2VfY29udGV4dCAqbWFkdmlzZV9jb250ZXh0O1xcbiBcXG4gc3RydWN0IGZpbGVfaW5mbyB7XFxuQEAgLTI5NSw3ICsyOTgsNyBAQCBzdGF0aWMgdm9pZCAqYWxsb2NfaHBhZ2Uoc3RydWN0IG1lbV9vcHMgKm9wcylcXG4gXFx0a3NmdF9wcmludF9tc2coXFxcIkFsbG9jYXRlIGh1Z2UgcGFnZS4uLlxcXCIpO1xcbiBcXHRpZiAobWFkdmlzZV9jb2xsYXBzZV9yZXRyeShwLCBocGFnZV9wbWRfc2l6ZSkpXFxuIFxcdFxcdGtzZnRfZXhpdF9mYWlsX3BlcnJvcihcXFwibWFkdmlzZShNQURWX0NPTExBUFNFKVxcXCIpO1xcbi1cXHRpZiAoIW9wcy1cXHUwMDNlY2hlY2tfaHVnZShwLCAxKSlcXG4rXFx0aWYgKCFvcHMtXFx1MDAzZWNoZWNrX2h1Z2UocCwgaHBhZ2VfcG1kX3NpemUsIDEsIGhwYWdlX3BtZF9zaXplKSlcXG4gXFx0XFx0a3NmdF9leGl0X2ZhaWxfcGVycm9yKFxcXCJtYWR2aXNlKE1BRFZfQ09MTEFQU0UpXFxcIik7XFxuIFxcdGlmIChtYWR2aXNlKHAsIGhwYWdlX3BtZF9zaXplLCBNQURWX0hVR0VQQUdFKSlcXG4gXFx0XFx0a3NmdF9leGl0X2ZhaWxfcGVycm9yKFxcXCJtYWR2aXNlKE1BRFZfSFVHRVBBR0UpXFxcIik7XFxuQEAgLTMyOSw5ICszMzIsMTAgQEAgc3RhdGljIHZvaWQgYW5vbl9mYXVsdCh2b2lkICpwLCB1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZClcXG4gXFx0ZmlsbF9tZW1vcnkocCwgc3RhcnQsIGVuZCk7XFxuIH1cXG4gXFxuLXN0YXRpYyBib29sIGFub25fY2hlY2tfaHVnZSh2b2lkICphZGRyLCBpbnQgbnJfaHBhZ2VzKVxcbitzdGF0aWMgYm9vbCBhbm9uX2NoZWNrX2h1Z2Uodm9pZCAqYWRkciwgc2l6ZV90IGxlbiwgaW50IG5yX2hwYWdlcyxcXG4rXFx0XFx0dW5zaWduZWQgbG9uZyBocGFnZV9zaXplKVxcbiB7XFxuLVxcdHJldHVybiBjaGVja19odWdlX2Fub24oYWRkciwgbnJfaHBhZ2VzLCBocGFnZV9wbWRfc2l6ZSk7XFxuK1xcdHJldHVybiBjaGVja19odWdlX2Fub24oYWRkciwgbGVuLCBucl9ocGFnZXMsIGhwYWdlX3NpemUpO1xcbiB9XFxuIFxcbiBzdGF0aWMgdm9pZCAqZmlsZV9zZXR1cF9hcmVhX2NvbW1vbihpbnQgbnJfaHBhZ2VzLCBlbnVtIGZpbGVfc2V0dXBfb3BzIHNldHVwKVxcbkBAIC00MzEsMTMgKzQzNSwxNCBAQCBzdGF0aWMgdm9pZCBmaWxlX2ZhdWx0X3dyaXRlKHZvaWQgKnAsIHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kKVxcbiBcXHRcXHRrc2Z0X2V4aXRfZmFpbF9wZXJyb3IoXFxcIm1hZHZpc2UoTUFEVl9QT1BVTEFURV9XUklURSlcXFwiKTtcXG4gfVxcbiBcXG4tc3RhdGljIGJvb2wgZmlsZV9jaGVja19odWdlKHZvaWQgKmFkZHIsIGludCBucl9ocGFnZXMpXFxuK3N0YXRpYyBib29sIGZpbGVfY2hlY2tfaHVnZSh2b2lkICphZGRyLCBzaXplX3QgbGVuLCBpbnQgbnJfaHBhZ2VzLFxcbitcXHRcXHR1bnNpZ25lZCBsb25nIGhwYWdlX3NpemUpXFxuIHtcXG4gXFx0c3dpdGNoIChmaW5mby50eXBlKSB7XFxuIFxcdGNhc2UgVk1BX0ZJTEU6XFxuLVxcdFxcdHJldHVybiBjaGVja19odWdlX2ZpbGUoYWRkciwgbnJfaHBhZ2VzLCBocGFnZV9wbWRfc2l6ZSk7XFxuK1xcdFxcdHJldHVybiBjaGVja19odWdlX2ZpbGUoYWRkciwgbGVuLCBucl9ocGFnZXMsIGhwYWdlX3NpemUpO1xcbiBcXHRjYXNlIFZNQV9TSE1FTTpcXG4tXFx0XFx0cmV0dXJuIGNoZWNrX2h1Z2Vfc2htZW0oYWRkciwgbnJfaHBhZ2VzLCBocGFnZV9wbWRfc2l6ZSk7XFxuK1xcdFxcdHJldHVybiBjaGVja19odWdlX3NobWVtKGFkZHIsIGxlbiwgbnJfaHBhZ2VzLCBocGFnZV9zaXplKTtcXG4gXFx0ZGVmYXVsdDpcXG4gXFx0XFx0ZXhpdChFWElUX0ZBSUxVUkUpO1xcbiBcXHRcXHRyZXR1cm4gZmFsc2U7XFxuQEAgLTQ2Nyw5ICs0NzIsMTAgQEAgc3RhdGljIHZvaWQgc2htZW1fY2xlYW51cF9hcmVhKHZvaWQgKnAsIHVuc2lnbmVkIGxvbmcgc2l6ZSlcXG4gXFx0Y2xvc2UoZmluZm8uZmQpO1xcbiB9XFxuIFxcbi1zdGF0aWMgYm9vbCBzaG1lbV9jaGVja19odWdlKHZvaWQgKmFkZHIsIGludCBucl9ocGFnZXMpXFxuK3N0YXRpYyBib29sIHNobWVtX2NoZWNrX2h1Z2Uodm9pZCAqYWRkciwgc2l6ZV90IGxlbiwgaW50IG5yX2hwYWdlcyxcXG4rXFx0XFx0dW5zaWduZWQgbG9uZyBocGFnZV9zaXplKVxcbiB7XFxuLVxcdHJldHVybiBjaGVja19odWdlX3NobWVtKGFkZHIsIG5yX2hwYWdlcywgaHBhZ2VfcG1kX3NpemUpO1xcbitcXHRyZXR1cm4gY2hlY2tfaHVnZV9zaG1lbShhZGRyLCBsZW4sIG5yX2hwYWdlcywgaHBhZ2Vfc2l6ZSk7XFxuIH1cXG4gXFxuIHN0YXRpYyBzdHJ1Y3QgbWVtX29wcyBfX2Fub25fb3BzID0ge1xcbkBAIC01NTIsNyArNTU4LDcgQEAgc3RhdGljIHZvaWQgX19tYWR2aXNlX2NvbGxhcHNlKGNvbnN0IGNoYXIgKm1zZywgY2hhciAqcCwgaW50IG5yX2hwYWdlcyxcXG4gXFx0cmV0ID0gbWFkdmlzZV9jb2xsYXBzZV9yZXRyeShwLCBucl9ocGFnZXMgKiBocGFnZV9wbWRfc2l6ZSk7XFxuIFxcdGlmICgoKGJvb2wpcmV0KSA9PSBleHBlY3QpXFxuIFxcdFxcdGZhaWwoXFxcIkZhaWw6IEJhZCByZXR1cm4gdmFsdWVcXFwiKTtcXG4tXFx0ZWxzZSBpZiAoIW9wcy1cXHUwMDNlY2hlY2tfaHVnZShwLCBleHBlY3QgPyBucl9ocGFnZXMgOiAwKSlcXG4rXFx0ZWxzZSBpZiAoIW9wcy1cXHUwMDNlY2hlY2tfaHVnZShwLCBucl9ocGFnZXMgKiBocGFnZV9wbWRfc2l6ZSwgZXhwZWN0ID8gbnJfaHBhZ2VzIDogMCwgaHBhZ2VfcG1kX3NpemUpKVxcbiBcXHRcXHRmYWlsKFxcXCJGYWlsOiBjaGVja19odWdlKClcXFwiKTtcXG4gXFx0ZWxzZVxcbiBcXHRcXHRzdWNjZXNzKFxcXCJPS1xcXCIpO1xcbkBAIC01NjQsMzAgKzU3MCwzMSBAQCBzdGF0aWMgdm9pZCBtYWR2aXNlX2NvbGxhcHNlKGNvbnN0IGNoYXIgKm1zZywgY2hhciAqcCwgaW50IG5yX2hwYWdlcyxcXG4gXFx0XFx0XFx0ICAgICBzdHJ1Y3QgbWVtX29wcyAqb3BzLCBib29sIGV4cGVjdClcXG4ge1xcbiBcXHQvKiBTYW5pdHkgY2hlY2sgKi9cXG4tXFx0aWYgKCFvcHMtXFx1MDAzZWNoZWNrX2h1Z2UocCwgMCkpXFxuK1xcdGlmICghb3BzLVxcdTAwM2VjaGVja19odWdlKHAsIG5yX2hwYWdlcyAqIGhwYWdlX3BtZF9zaXplLCAwLCBocGFnZV9wbWRfc2l6ZSkpXFxuIFxcdFxcdGtzZnRfZXhpdF9mYWlsX21zZyhcXFwiVW5leHBlY3RlZCBodWdlIHBhZ2VcXFxcblxcXCIpO1xcbiBcXHRfX21hZHZpc2VfY29sbGFwc2UobXNnLCBwLCBucl9ocGFnZXMsIG9wcywgZXhwZWN0KTtcXG4gfVxcbiBcXG4gI2RlZmluZSBUSUNLIDUwMDAwMFxcbi1zdGF0aWMgYm9vbCB3YWl0X2Zvcl9zY2FuKGNvbnN0IGNoYXIgKm1zZywgY2hhciAqcCwgaW50IG5yX2hwYWdlcyxcXG4tXFx0XFx0XFx0ICBzdHJ1Y3QgbWVtX29wcyAqb3BzKVxcbitzdGF0aWMgYm9vbCB3YWl0X2Zvcl9zY2FuKGNvbnN0IGNoYXIgKm1zZywgY2hhciAqcCwgc2l6ZV90IGxlbixcXG4rXFx0XFx0aW50IG5yX2hwYWdlcywgaW50IGNvbGxhcF9vcmRlciwgc3RydWN0IG1lbV9vcHMgKm9wcylcXG4ge1xcbitcXHR1bnNpZ25lZCBsb25nIGhwYWdlX3NpemUgPSBwYWdlX3NpemUgXFx1MDAzY1xcdTAwM2MgY29sbGFwX29yZGVyO1xcbiBcXHRpbnQgZnVsbF9zY2FucztcXG4gXFx0aW50IHRpbWVvdXQgPSA2OyAvKiAzIHNlY29uZHMgKi9cXG4gXFxuIFxcdC8qIFNhbml0eSBjaGVjayAqL1xcbi1cXHRpZiAoIW9wcy1cXHUwMDNlY2hlY2tfaHVnZShwLCAwKSlcXG4rXFx0aWYgKCFvcHMtXFx1MDAzZWNoZWNrX2h1Z2UocCwgbGVuLCAwLCBocGFnZV9zaXplKSlcXG4gXFx0XFx0a3NmdF9leGl0X2ZhaWxfbXNnKFxcXCJVbmV4cGVjdGVkIGh1Z2UgcGFnZVxcXFxuXFxcIik7XFxuIFxcbi1cXHRtYWR2aXNlKHAsIG5yX2hwYWdlcyAqIGhwYWdlX3BtZF9zaXplLCBNQURWX0hVR0VQQUdFKTtcXG4rXFx0bWFkdmlzZShwLCBsZW4sIE1BRFZfSFVHRVBBR0UpO1xcbiBcXG4gXFx0LyogV2FpdCB1bnRpbCB0aGUgc2Vjb25kIGZ1bGxfc2NhbiBjb21wbGV0ZWQgKi9cXG4gXFx0ZnVsbF9zY2FucyA9IHRocF9yZWFkX251bShcXFwia2h1Z2VwYWdlZC9mdWxsX3NjYW5zXFxcIikgKyAyO1xcbiBcXG4gXFx0a3NmdF9wcmludF9tc2coXFxcIiVzLi4uXFxcIiwgbXNnKTtcXG4gXFx0d2hpbGUgKHRpbWVvdXQtLSkge1xcbi1cXHRcXHRpZiAob3BzLVxcdTAwM2VjaGVja19odWdlKHAsIG5yX2hwYWdlcykpXFxuK1xcdFxcdGlmIChvcHMtXFx1MDAzZWNoZWNrX2h1Z2UocCwgbGVuLCBucl9ocGFnZXMsIGhwYWdlX3NpemUpKVxcbiBcXHRcXHRcXHRicmVhaztcXG4gXFx0XFx0aWYgKHRocF9yZWFkX251bShcXFwia2h1Z2VwYWdlZC9mdWxsX3NjYW5zXFxcIikgXFx1MDAzZT0gZnVsbF9zY2FucylcXG4gXFx0XFx0XFx0YnJlYWs7XFxuQEAgLTYwMSw2ICs2MDgsOCBAQCBzdGF0aWMgYm9vbCB3YWl0X2Zvcl9zY2FuKGNvbnN0IGNoYXIgKm1zZywgY2hhciAqcCwgaW50IG5yX2hwYWdlcyxcXG4gc3RhdGljIHZvaWQga2h1Z2VwYWdlZF9jb2xsYXBzZShjb25zdCBjaGFyICptc2csIGNoYXIgKnAsIGludCBucl9ocGFnZXMsXFxuIFxcdFxcdFxcdFxcdHN0cnVjdCBtZW1fb3BzICpvcHMsIGJvb2wgZXhwZWN0KVxcbiB7XFxuK1xcdHNpemVfdCBsZW4gPSBucl9ocGFnZXMgKiBocGFnZV9wbWRfc2l6ZTtcXG4rXFxuIFxcdC8qXFxuIFxcdCAqIHJlYWRcXHUwMDI2d3JpdGUgZmlsZSBjb2xsYXBzZSBmYWlscyBzaW5jZSBraHVnZXBhZ2VkIGRvZXMgbm90IGZsdXNoXFxuIFxcdCAqIHRoZSB0YXJnZXQgZGlydHkgZm9saW9zXFxuQEAgLTYwOCw3ICs2MTcsNyBAQCBzdGF0aWMgdm9pZCBraHVnZXBhZ2VkX2NvbGxhcHNlKGNvbnN0IGNoYXIgKm1zZywgY2hhciAqcCwgaW50IG5yX2hwYWdlcyxcXG4gXFx0aWYgKCFpc190bXBmcyhvcHMpIFxcdTAwMjZcXHUwMDI2IG9wcyA9PSBcXHUwMDI2X19yZWFkX3dyaXRlX2ZpbGVfd3JpdGVfb3BzKVxcbiBcXHRcXHRleHBlY3QgPSBmYWxzZTtcXG4gXFxuLVxcdGlmICh3YWl0X2Zvcl9zY2FuKG1zZywgcCwgbnJfaHBhZ2VzLCBvcHMpKSB7XFxuK1xcdGlmICh3YWl0X2Zvcl9zY2FuKG1zZywgcCwgbGVuLCBucl9ocGFnZXMsIGhwYWdlX3BtZF9vcmRlciwgb3BzKSkge1xcbiBcXHRcXHRpZiAoZXhwZWN0KVxcbiBcXHRcXHRcXHRmYWlsKFxcXCJUaW1lb3V0XFxcIik7XFxuIFxcdFxcdGVsc2VcXG5AQCAtNjI0LDEwICs2MzMsNTQgQEAgc3RhdGljIHZvaWQga2h1Z2VwYWdlZF9jb2xsYXBzZShjb25zdCBjaGFyICptc2csIGNoYXIgKnAsIGludCBucl9ocGFnZXMsXFxuIFxcdGlmIChvcHMgIT0gXFx1MDAyNl9fYW5vbl9vcHMpXFxuIFxcdFxcdG9wcy1cXHUwMDNlZmF1bHQocCwgMCwgbnJfaHBhZ2VzICogaHBhZ2VfcG1kX3NpemUpO1xcbiBcXG4tXFx0aWYgKG9wcy1cXHUwMDNlY2hlY2tfaHVnZShwLCBleHBlY3QgPyBucl9ocGFnZXMgOiAwKSlcXG4rXFx0aWYgKG9wcy1cXHUwMDNlY2hlY2tfaHVnZShwLCBsZW4sIGV4cGVjdCA/IG5yX2hwYWdlcyA6IDAsIGhwYWdlX3BtZF9zaXplKSlcXG4rXFx0XFx0c3VjY2VzcyhcXFwiT0tcXFwiKTtcXG4rXFx0ZWxzZVxcbitcXHRcXHRmYWlsKFxcXCJGYWlsXFxcIik7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIG10aHBfa2h1Z2VwYWdlZF9jb2xsYXBzZShjb25zdCBjaGFyICptc2csIGNoYXIgKnAsIGludCBucl9ocGFnZXMsXFxuK1xcdFxcdFxcdFxcdHN0cnVjdCBtZW1fb3BzICpvcHMsIGJvb2wgZXhwZWN0KVxcbit7XFxuK1xcdHVuc2lnbmVkIGxvbmcgaHBhZ2Vfc2l6ZSA9IHBhZ2Vfc2l6ZSBcXHUwMDNjXFx1MDAzYyBjb2xsYXBzZV9vcmRlcjtcXG4rXFx0c3RydWN0IHRocF9zZXR0aW5ncyBzZXR0aW5ncyA9ICp0aHBfY3VycmVudF9zZXR0aW5ncygpO1xcbitcXHQvKiBtVEhQIGNvbGxwYXNlIG9ubHkgYWxsb2NhdGVzIFBNRCBzaXplZCBtZW1vcnkgKi9cXG4rXFx0c2l6ZV90IGxlbiA9IGhwYWdlX3BtZF9zaXplO1xcbitcXG4rXFx0LyogU2V0IG1USFAgc2V0dGluZyBmb3IgbVRIUCBjb2xsYXBzZSAqL1xcbitcXHRpZiAob3BzID09IFxcdTAwMjZfX2Fub25fb3BzKSB7XFxuK1xcdFxcdHNldHRpbmdzLnRocF9lbmFibGVkID0gVEhQX05FVkVSO1xcbitcXHRcXHRzZXR0aW5ncy5odWdlcGFnZXNbY29sbGFwc2Vfb3JkZXJdLmVuYWJsZWQgPSBUSFBfTUFEVklTRTtcXG4rXFx0fVxcbitcXG4rXFx0dGhwX3B1c2hfc2V0dGluZ3MoXFx1MDAyNnNldHRpbmdzKTtcXG4rXFxuK1xcdGlmICh3YWl0X2Zvcl9zY2FuKG1zZywgcCwgbGVuLCBucl9ocGFnZXMsIGNvbGxhcHNlX29yZGVyLCBvcHMpKSB7XFxuK1xcdFxcdGlmIChleHBlY3QpXFxuK1xcdFxcdFxcdGZhaWwoXFxcIlRpbWVvdXRcXFwiKTtcXG4rXFx0XFx0ZWxzZVxcbitcXHRcXHRcXHRzdWNjZXNzKFxcXCJPS1xcXCIpO1xcbitcXG4rXFx0XFx0LyogUmVzdG9yZSBUSFAgc2V0dGluZ3MgZm9yIG1USFAgY29sbGFwc2UuICovXFxuK1xcdFxcdHRocF9wb3Bfc2V0dGluZ3MoKTtcXG4rXFx0XFx0cmV0dXJuO1xcbitcXHR9XFxuK1xcbitcXHQvKlxcbitcXHQgKiBGb3IgZmlsZSBhbmQgc2htZW0gbWVtb3J5LCBraHVnZXBhZ2VkIG9ubHkgcmV0cmFjdHMgcHRlIGVudHJpZXMgYWZ0ZXJcXG4rXFx0ICogcHV0dGluZyB0aGUgbmV3IGh1Z2VwYWdlIGluIHRoZSBwYWdlIGNhY2hlLiBUaGUgaHVnZXBhZ2UgbXVzdCBiZVxcbitcXHQgKiBzdWJzZXF1ZW50bHkgcmVmYXVsdGVkIHRvIGluc3RhbGwgdGhlIHBtZCBtYXBwaW5nIGZvciB0aGUgbW0uXFxuK1xcdCAqL1xcbitcXHRpZiAob3BzICE9IFxcdTAwMjZfX2Fub25fb3BzKVxcbitcXHRcXHRvcHMtXFx1MDAzZWZhdWx0KHAsIDAsIG5yX2hwYWdlcyAqIGhwYWdlX3NpemUpO1xcbitcXG4rXFx0aWYgKG9wcy1cXHUwMDNlY2hlY2tfaHVnZShwLCBsZW4sIGV4cGVjdCA/IG5yX2hwYWdlcyA6IDAsIGhwYWdlX3NpemUpKVxcbiBcXHRcXHRzdWNjZXNzKFxcXCJPS1xcXCIpO1xcbiBcXHRlbHNlXFxuIFxcdFxcdGZhaWwoXFxcIkZhaWxcXFwiKTtcXG4rXFxuK1xcdC8qIFJlc3RvcmUgVEhQIHNldHRpbmdzIGZvciBtVEhQIGNvbGxhcHNlLiAqL1xcbitcXHR0aHBfcG9wX3NldHRpbmdzKCk7XFxuIH1cXG4gXFxuIHN0YXRpYyBzdHJ1Y3QgY29sbGFwc2VfY29udGV4dCBfX2todWdlcGFnZWRfY29udGV4dCA9IHtcXG5AQCAtNjM2LDYgKzY4OSwxMiBAQCBzdGF0aWMgc3RydWN0IGNvbGxhcHNlX2NvbnRleHQgX19raHVnZXBhZ2VkX2NvbnRleHQgPSB7XFxuIFxcdC5uYW1lID0gXFxcImtodWdlcGFnZWRcXFwiLFxcbiB9O1xcbiBcXG4rc3RhdGljIHN0cnVjdCBjb2xsYXBzZV9jb250ZXh0IF9fbXRocF9raHVnZXBhZ2VkX2NvbnRleHQgPSB7XFxuK1xcdC5jb2xsYXBzZSA9IFxcdTAwMjZtdGhwX2todWdlcGFnZWRfY29sbGFwc2UsXFxuK1xcdC5lbmZvcmNlX3B0ZV9zY2FuX2xpbWl0cyA9IHRydWUsXFxuK1xcdC5uYW1lID0gXFxcIm10aHBfa2h1Z2VwYWdlZFxcXCIsXFxuK307XFxuK1xcbiBzdGF0aWMgc3RydWN0IGNvbGxhcHNlX2NvbnRleHQgX19tYWR2aXNlX2NvbnRleHQgPSB7XFxuIFxcdC5jb2xsYXBzZSA9IFxcdTAwMjZtYWR2aXNlX2NvbGxhcHNlLFxcbiBcXHQuZW5mb3JjZV9wdGVfc2Nhbl9saW1pdHMgPSBmYWxzZSxcXG5AQCAtNjUzLDcgKzcxMiw3IEBAIHN0YXRpYyB2b2lkIGFsbG9jX2F0X2ZhdWx0KHZvaWQpXFxuIFxcdHAgPSBhbGxvY19tYXBwaW5nKDEpO1xcbiBcXHQqcCA9IDE7XFxuIFxcdGtzZnRfcHJpbnRfbXNnKFxcXCJBbGxvY2F0ZSBodWdlIHBhZ2Ugb24gZmF1bHQuLi5cXFwiKTtcXG4tXFx0aWYgKGNoZWNrX2h1Z2VfYW5vbihwLCAxLCBocGFnZV9wbWRfc2l6ZSkpXFxuK1xcdGlmIChjaGVja19odWdlX2Fub24ocCwgaHBhZ2VfcG1kX3NpemUsIDEsIGhwYWdlX3BtZF9zaXplKSlcXG4gXFx0XFx0c3VjY2VzcyhcXFwiT0tcXFwiKTtcXG4gXFx0ZWxzZVxcbiBcXHRcXHRmYWlsKFxcXCJGYWlsXFxcIik7XFxuQEAgLTY2Miw3ICs3MjEsNyBAQCBzdGF0aWMgdm9pZCBhbGxvY19hdF9mYXVsdCh2b2lkKVxcbiBcXG4gXFx0bWFkdmlzZShwLCBwYWdlX3NpemUsIE1BRFZfRE9OVE5FRUQpO1xcbiBcXHRrc2Z0X3ByaW50X21zZyhcXFwiU3BsaXQgaHVnZSBQTUQgb24gTUFEVl9ET05UTkVFRC4uLlxcXCIpO1xcbi1cXHRpZiAoY2hlY2tfaHVnZV9hbm9uKHAsIDAsIGhwYWdlX3BtZF9zaXplKSlcXG4rXFx0aWYgKGNoZWNrX2h1Z2VfYW5vbihwLCBocGFnZV9wbWRfc2l6ZSwgMCwgaHBhZ2VfcG1kX3NpemUpKVxcbiBcXHRcXHRzdWNjZXNzKFxcXCJPS1xcXCIpO1xcbiBcXHRlbHNlXFxuIFxcdFxcdGZhaWwoXFxcIkZhaWxcXFwiKTtcXG5AQCAtNjc0LDEwICs3MzMsMTcgQEAgc3RhdGljIHZvaWQgYWxsb2NfYXRfZmF1bHQodm9pZClcXG4gc3RhdGljIHZvaWQgY29sbGFwc2VfZnVsbChzdHJ1Y3QgY29sbGFwc2VfY29udGV4dCAqYywgc3RydWN0IG1lbV9vcHMgKm9wcylcXG4ge1xcbiBcXHR2b2lkICpwO1xcbi1cXHRpbnQgbnJfaHBhZ2VzID0gNDtcXG4rXFx0aW50IG5yX3BtZHMgPSA0LCBucl9ocGFnZXMgPSA0O1xcbiBcXHR1bnNpZ25lZCBsb25nIHNpemUgPSBucl9ocGFnZXMgKiBocGFnZV9wbWRfc2l6ZTtcXG4gXFxuLVxcdHAgPSBvcHMtXFx1MDAzZXNldHVwX2FyZWEobnJfaHBhZ2VzKTtcXG4rXFx0LyogT25seSB0cnkgMSBQTUQgc2l6ZWQgcmFuZ2UgZm9yIG1USFAgY29sbGFwc2UuICovXFxuK1xcdGlmIChjID09IFxcdTAwMjZfX210aHBfa2h1Z2VwYWdlZF9jb250ZXh0KSB7XFxuK1xcdFxcdG5yX3BtZHMgPSAxO1xcbitcXHRcXHRucl9ocGFnZXMgPSAxIFxcdTAwM2NcXHUwMDNjIChocGFnZV9wbWRfb3JkZXIgLSBjb2xsYXBzZV9vcmRlcik7XFxuK1xcdFxcdHNpemUgPSBocGFnZV9wbWRfc2l6ZTtcXG4rXFx0fVxcbitcXG4rXFx0cCA9IG9wcy1cXHUwMDNlc2V0dXBfYXJlYShucl9wbWRzKTtcXG4gXFx0b3BzLVxcdTAwM2VmYXVsdChwLCAwLCBzaXplKTtcXG4gXFx0Yy1cXHUwMDNlY29sbGFwc2UoXFxcIkNvbGxhcHNlIG11bHRpcGxlIGZ1bGx5IHBvcHVsYXRlZCBQVEUgdGFibGVcXFwiLCBwLCBucl9ocGFnZXMsXFxuIFxcdFxcdCAgICBvcHMsIHRydWUpO1xcbkBAIC02ODksMTAgKzc1NSwzMSBAQCBzdGF0aWMgdm9pZCBjb2xsYXBzZV9mdWxsKHN0cnVjdCBjb2xsYXBzZV9jb250ZXh0ICpjLCBzdHJ1Y3QgbWVtX29wcyAqb3BzKVxcbiBcXG4gc3RhdGljIHZvaWQgY29sbGFwc2VfZW1wdHkoc3RydWN0IGNvbGxhcHNlX2NvbnRleHQgKmMsIHN0cnVjdCBtZW1fb3BzICpvcHMpXFxuIHtcXG4rXFx0aW50IG5yX2hwYWdlcyA9IDE7XFxuK1xcdHZvaWQgKnA7XFxuK1xcbitcXHRpZiAoYyA9PSBcXHUwMDI2X19tdGhwX2todWdlcGFnZWRfY29udGV4dClcXG4rXFx0XFx0bnJfaHBhZ2VzID0gMSBcXHUwMDNjXFx1MDAzYyAoaHBhZ2VfcG1kX29yZGVyIC0gY29sbGFwc2Vfb3JkZXIpO1xcbitcXG4rXFx0cCA9IG9wcy1cXHUwMDNlc2V0dXBfYXJlYSgxKTtcXG4rXFx0Yy1cXHUwMDNlY29sbGFwc2UoXFxcIkRvIG5vdCBjb2xsYXBzZSBlbXB0eSBQVEUgdGFibGVcXFwiLCBwLCBucl9ocGFnZXMsIG9wcywgZmFsc2UpO1xcbitcXHRvcHMtXFx1MDAzZWNsZWFudXBfYXJlYShwLCBocGFnZV9wbWRfc2l6ZSk7XFxuK1xcdGtzZnRfdGVzdF9yZXN1bHRfcmVwb3J0KGV4aXRfc3RhdHVzLCBcXFwiJXNcXFxcblxcXCIsIF9fZnVuY19fKTtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgY29sbGFwc2Vfc2luZ2xlX210aHAoc3RydWN0IGNvbGxhcHNlX2NvbnRleHQgKmMsIHN0cnVjdCBtZW1fb3BzICpvcHMpXFxuK3tcXG4rXFx0dW5zaWduZWQgbG9uZyBocGFnZV9zaXplID0gcGFnZV9zaXplIFxcdTAwM2NcXHUwMDNjIGNvbGxhcHNlX29yZGVyO1xcbiBcXHR2b2lkICpwO1xcbiBcXG4gXFx0cCA9IG9wcy1cXHUwMDNlc2V0dXBfYXJlYSgxKTtcXG4tXFx0Yy1cXHUwMDNlY29sbGFwc2UoXFxcIkRvIG5vdCBjb2xsYXBzZSBlbXB0eSBQVEUgdGFibGVcXFwiLCBwLCAxLCBvcHMsIGZhbHNlKTtcXG4rXFx0LypcXG4rXFx0ICogT25seSBmYXVsdCBjb2xsYXBzZV9vcmRlciBzaXplZCByYW5nZXMsIGFuZCBvbmx5IGNoZWNrIDFcXG4rXFx0ICogY29sbGFwc2Vfb3JkZXIgc2l6ZWQgaHVnZSBwYWdlLlxcbitcXHQgKi9cXG4rXFx0b3BzLVxcdTAwM2VmYXVsdChwLCAwLCBocGFnZV9zaXplKTtcXG4rXFx0Yy1cXHUwMDNlY29sbGFwc2UoXFxcIkNvbGxhcHNlIFBURSB0YWJsZSB3aXRoIGhhbGYgUFRFIGVudHJpZXMgcHJlc2VudFxcXCIsXFxuK1xcdFxcdHAsIDEsIG9wcywgdHJ1ZSk7XFxuIFxcdG9wcy1cXHUwMDNlY2xlYW51cF9hcmVhKHAsIGhwYWdlX3BtZF9zaXplKTtcXG4gXFx0a3NmdF90ZXN0X3Jlc3VsdF9yZXBvcnQoZXhpdF9zdGF0dXMsIFxcXCIlc1xcXFxuXFxcIiwgX19mdW5jX18pO1xcbiB9XFxuQEAgLTg0OCw3ICs5MzUsNyBAQCBzdGF0aWMgdm9pZCBjb2xsYXBzZV9zaW5nbGVfcHRlX2VudHJ5X2NvbXBvdW5kKHN0cnVjdCBjb2xsYXBzZV9jb250ZXh0ICpjLCBzdHJ1Y1xcbiBcXHRtYWR2aXNlKHAsIGhwYWdlX3BtZF9zaXplLCBNQURWX05PSFVHRVBBR0UpO1xcbiBcXHRrc2Z0X3ByaW50X21zZyhcXFwiU3BsaXQgaHVnZSBwYWdlIGxlYXZpbmcgc2luZ2xlIFBURSBtYXBwaW5nIGNvbXBvdW5kIHBhZ2UuLi5cXFwiKTtcXG4gXFx0bWFkdmlzZShwICsgcGFnZV9zaXplLCBocGFnZV9wbWRfc2l6ZSAtIHBhZ2Vfc2l6ZSwgTUFEVl9ET05UTkVFRCk7XFxuLVxcdGlmIChvcHMtXFx1MDAzZWNoZWNrX2h1Z2UocCwgMCkpXFxuK1xcdGlmIChvcHMtXFx1MDAzZWNoZWNrX2h1Z2UocCwgaHBhZ2VfcG1kX3NpemUsIDAsIGhwYWdlX3BtZF9zaXplKSlcXG4gXFx0XFx0c3VjY2VzcyhcXFwiT0tcXFwiKTtcXG4gXFx0ZWxzZVxcbiBcXHRcXHRmYWlsKFxcXCJGYWlsXFxcIik7XFxuQEAgLTg2OSw3ICs5NTYsNyBAQCBzdGF0aWMgdm9pZCBjb2xsYXBzZV9mdWxsX29mX2NvbXBvdW5kKHN0cnVjdCBjb2xsYXBzZV9jb250ZXh0ICpjLCBzdHJ1Y3QgbWVtX29wc1xcbiBcXHRrc2Z0X3ByaW50X21zZyhcXFwiU3BsaXQgaHVnZSBwYWdlIGxlYXZpbmcgc2luZ2xlIFBURSBwYWdlIHRhYmxlIGZ1bGwgb2YgY29tcG91bmQgcGFnZXMuLi5cXFwiKTtcXG4gXFx0bWFkdmlzZShwLCBwYWdlX3NpemUsIE1BRFZfTk9IVUdFUEFHRSk7XFxuIFxcdG1hZHZpc2UocCwgaHBhZ2VfcG1kX3NpemUsIE1BRFZfTk9IVUdFUEFHRSk7XFxuLVxcdGlmIChvcHMtXFx1MDAzZWNoZWNrX2h1Z2UocCwgMCkpXFxuK1xcdGlmIChvcHMtXFx1MDAzZWNoZWNrX2h1Z2UocCwgaHBhZ2VfcG1kX3NpemUsIDAsIGhwYWdlX3BtZF9zaXplKSlcXG4gXFx0XFx0c3VjY2VzcyhcXFwiT0tcXFwiKTtcXG4gXFx0ZWxzZVxcbiBcXHRcXHRmYWlsKFxcXCJGYWlsXFxcIik7XFxuQEAgLTg5MSw3ICs5NzgsNyBAQCBzdGF0aWMgdm9pZCBjb2xsYXBzZV9jb21wb3VuZF9leHRyZW1lKHN0cnVjdCBjb2xsYXBzZV9jb250ZXh0ICpjLCBzdHJ1Y3QgbWVtX29wc1xcbiBcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgaHBhZ2VfcG1kX25yOyBpKyspIHtcXG4gXFx0XFx0bWFkdmlzZShCQVNFX0FERFIsIGhwYWdlX3BtZF9zaXplLCBNQURWX0hVR0VQQUdFKTtcXG4gXFx0XFx0b3BzLVxcdTAwM2VmYXVsdChCQVNFX0FERFIsIDAsIGhwYWdlX3BtZF9zaXplKTtcXG4tXFx0XFx0aWYgKCFvcHMtXFx1MDAzZWNoZWNrX2h1Z2UoQkFTRV9BRERSLCAxKSlcXG4rXFx0XFx0aWYgKCFvcHMtXFx1MDAzZWNoZWNrX2h1Z2UoQkFTRV9BRERSLCBocGFnZV9wbWRfc2l6ZSwgMSwgaHBhZ2VfcG1kX3NpemUpKVxcbiBcXHRcXHRcXHRrc2Z0X2V4aXRfZmFpbF9tc2coXFxcIkZhaWxlZCB0byBhbGxvY2F0ZSBodWdlIHBhZ2VcXFxcblxcXCIpO1xcbiBcXHRcXHRtYWR2aXNlKEJBU0VfQUREUiwgaHBhZ2VfcG1kX3NpemUsIE1BRFZfTk9IVUdFUEFHRSk7XFxuIFxcbkBAIC05MTQsNyArMTAwMSw3IEBAIHN0YXRpYyB2b2lkIGNvbGxhcHNlX2NvbXBvdW5kX2V4dHJlbWUoc3RydWN0IGNvbGxhcHNlX2NvbnRleHQgKmMsIHN0cnVjdCBtZW1fb3BzXFxuIFxcbiBcXHRvcHMtXFx1MDAzZWNsZWFudXBfYXJlYShCQVNFX0FERFIsIGhwYWdlX3BtZF9zaXplKTtcXG4gXFx0b3BzLVxcdTAwM2VmYXVsdChwLCAwLCBocGFnZV9wbWRfc2l6ZSk7XFxuLVxcdGlmICghb3BzLVxcdTAwM2VjaGVja19odWdlKHAsIDEpKVxcbitcXHRpZiAoIW9wcy1cXHUwMDNlY2hlY2tfaHVnZShwLCBocGFnZV9wbWRfc2l6ZSwgMSwgaHBhZ2VfcG1kX3NpemUpKVxcbiBcXHRcXHRzdWNjZXNzKFxcXCJPS1xcXCIpO1xcbiBcXHRlbHNlXFxuIFxcdFxcdGZhaWwoXFxcIkZhaWxcXFwiKTtcXG5AQCAtOTM2LDcgKzEwMjMsNyBAQCBzdGF0aWMgdm9pZCBjb2xsYXBzZV9mb3JrKHN0cnVjdCBjb2xsYXBzZV9jb250ZXh0ICpjLCBzdHJ1Y3QgbWVtX29wcyAqb3BzKVxcbiBcXG4gXFx0a3NmdF9wcmludF9tc2coXFxcIkFsbG9jYXRlIHNtYWxsIHBhZ2UuLi5cXFwiKTtcXG4gXFx0b3BzLVxcdTAwM2VmYXVsdChwLCAwLCBwYWdlX3NpemUpO1xcbi1cXHRpZiAob3BzLVxcdTAwM2VjaGVja19odWdlKHAsIDApKVxcbitcXHRpZiAob3BzLVxcdTAwM2VjaGVja19odWdlKHAsIGhwYWdlX3BtZF9zaXplLCAwLCBocGFnZV9wbWRfc2l6ZSkpXFxuIFxcdFxcdHN1Y2Nlc3MoXFxcIk9LXFxcIik7XFxuIFxcdGVsc2VcXG4gXFx0XFx0ZmFpbChcXFwiRmFpbFxcXCIpO1xcbkBAIC05NDQsNyArMTAzMSw3IEBAIHN0YXRpYyB2b2lkIGNvbGxhcHNlX2Zvcmsoc3RydWN0IGNvbGxhcHNlX2NvbnRleHQgKmMsIHN0cnVjdCBtZW1fb3BzICpvcHMpXFxuIFxcdGtzZnRfcHJpbnRfbXNnKFxcXCJTaGFyZSBzbWFsbCBwYWdlIG92ZXIgZm9yaygpLi4uXFxcIik7XFxuIFxcdGlmICghZm9yaygpKSB7XFxuIFxcdFxcdC8qIERvIG5vdCB0b3VjaCBzZXR0aW5ncyBvbiBjaGlsZCBleGl0ICovXFxuLVxcdFxcdGlmIChvcHMtXFx1MDAzZWNoZWNrX2h1Z2UocCwgMCkpXFxuK1xcdFxcdGlmIChvcHMtXFx1MDAzZWNoZWNrX2h1Z2UocCwgaHBhZ2VfcG1kX3NpemUsIDAsIGhwYWdlX3BtZF9zaXplKSlcXG4gXFx0XFx0XFx0c3VjY2VzcyhcXFwiT0tcXFwiKTtcXG4gXFx0XFx0ZWxzZVxcbiBcXHRcXHRcXHRmYWlsKFxcXCJGYWlsXFxcIik7XFxuQEAgLTk2Miw3ICsxMDQ5LDcgQEAgc3RhdGljIHZvaWQgY29sbGFwc2VfZm9yayhzdHJ1Y3QgY29sbGFwc2VfY29udGV4dCAqYywgc3RydWN0IG1lbV9vcHMgKm9wcylcXG4gXFx0ZXhpdF9zdGF0dXMgPSBXRVhJVFNUQVRVUyh3c3RhdHVzKTtcXG4gXFxuIFxcdGtzZnRfcHJpbnRfbXNnKFxcXCJDaGVjayBpZiBwYXJlbnQgc3RpbGwgaGFzIHNtYWxsIHBhZ2UuLi5cXFwiKTtcXG4tXFx0aWYgKG9wcy1cXHUwMDNlY2hlY2tfaHVnZShwLCAwKSlcXG4rXFx0aWYgKG9wcy1cXHUwMDNlY2hlY2tfaHVnZShwLCBocGFnZV9wbWRfc2l6ZSwgMCwgaHBhZ2VfcG1kX3NpemUpKVxcbiBcXHRcXHRzdWNjZXNzKFxcXCJPS1xcXCIpO1xcbiBcXHRlbHNlXFxuIFxcdFxcdGZhaWwoXFxcIkZhaWxcXFwiKTtcXG5AQCAtOTgwLDcgKzEwNjcsNyBAQCBzdGF0aWMgdm9pZCBjb2xsYXBzZV9mb3JrX2NvbXBvdW5kKHN0cnVjdCBjb2xsYXBzZV9jb250ZXh0ICpjLCBzdHJ1Y3QgbWVtX29wcyAqb1xcbiBcXHRrc2Z0X3ByaW50X21zZyhcXFwiU2hhcmUgaHVnZSBwYWdlIG92ZXIgZm9yaygpLi4uXFxcIik7XFxuIFxcdGlmICghZm9yaygpKSB7XFxuIFxcdFxcdC8qIERvIG5vdCB0b3VjaCBzZXR0aW5ncyBvbiBjaGlsZCBleGl0ICovXFxuLVxcdFxcdGlmIChvcHMtXFx1MDAzZWNoZWNrX2h1Z2UocCwgMSkpXFxuK1xcdFxcdGlmIChvcHMtXFx1MDAzZWNoZWNrX2h1Z2UocCwgaHBhZ2VfcG1kX3NpemUsIDEsIGhwYWdlX3BtZF9zaXplKSlcXG4gXFx0XFx0XFx0c3VjY2VzcyhcXFwiT0tcXFwiKTtcXG4gXFx0XFx0ZWxzZVxcbiBcXHRcXHRcXHRmYWlsKFxcXCJGYWlsXFxcIik7XFxuQEAgLTk4OCw3ICsxMDc1LDcgQEAgc3RhdGljIHZvaWQgY29sbGFwc2VfZm9ya19jb21wb3VuZChzdHJ1Y3QgY29sbGFwc2VfY29udGV4dCAqYywgc3RydWN0IG1lbV9vcHMgKm9cXG4gXFx0XFx0a3NmdF9wcmludF9tc2coXFxcIlNwbGl0IGh1Z2UgcGFnZSBQTUQgaW4gY2hpbGQgcHJvY2Vzcy4uLlxcXCIpO1xcbiBcXHRcXHRtYWR2aXNlKHAsIHBhZ2Vfc2l6ZSwgTUFEVl9OT0hVR0VQQUdFKTtcXG4gXFx0XFx0bWFkdmlzZShwLCBocGFnZV9wbWRfc2l6ZSwgTUFEVl9OT0hVR0VQQUdFKTtcXG4tXFx0XFx0aWYgKG9wcy1cXHUwMDNlY2hlY2tfaHVnZShwLCAwKSlcXG4rXFx0XFx0aWYgKG9wcy1cXHUwMDNlY2hlY2tfaHVnZShwLCBocGFnZV9wbWRfc2l6ZSwgMCwgaHBhZ2VfcG1kX3NpemUpKVxcbiBcXHRcXHRcXHRzdWNjZXNzKFxcXCJPS1xcXCIpO1xcbiBcXHRcXHRlbHNlXFxuIFxcdFxcdFxcdGZhaWwoXFxcIkZhaWxcXFwiKTtcXG5AQCAtMTAwOSw3ICsxMDk2LDcgQEAgc3RhdGljIHZvaWQgY29sbGFwc2VfZm9ya19jb21wb3VuZChzdHJ1Y3QgY29sbGFwc2VfY29udGV4dCAqYywgc3RydWN0IG1lbV9vcHMgKm9cXG4gXFx0ZXhpdF9zdGF0dXMgPSBXRVhJVFNUQVRVUyh3c3RhdHVzKTtcXG4gXFxuIFxcdGtzZnRfcHJpbnRfbXNnKFxcXCJDaGVjayBpZiBwYXJlbnQgc3RpbGwgaGFzIGh1Z2UgcGFnZS4uLlxcXCIpO1xcbi1cXHRpZiAob3BzLVxcdTAwM2VjaGVja19odWdlKHAsIDEpKVxcbitcXHRpZiAob3BzLVxcdTAwM2VjaGVja19odWdlKHAsIGhwYWdlX3BtZF9zaXplLCAxLCBocGFnZV9wbWRfc2l6ZSkpXFxuIFxcdFxcdHN1Y2Nlc3MoXFxcIk9LXFxcIik7XFxuIFxcdGVsc2VcXG4gXFx0XFx0ZmFpbChcXFwiRmFpbFxcXCIpO1xcbkBAIC0xMDI4LDcgKzExMTUsNyBAQCBzdGF0aWMgdm9pZCBjb2xsYXBzZV9tYXhfcHRlc19zaGFyZWQoc3RydWN0IGNvbGxhcHNlX2NvbnRleHQgKmMsIHN0cnVjdCBtZW1fb3BzXFxuIFxcdGtzZnRfcHJpbnRfbXNnKFxcXCJTaGFyZSBodWdlIHBhZ2Ugb3ZlciBmb3JrKCkuLi5cXFwiKTtcXG4gXFx0aWYgKCFmb3JrKCkpIHtcXG4gXFx0XFx0LyogRG8gbm90IHRvdWNoIHNldHRpbmdzIG9uIGNoaWxkIGV4aXQgKi9cXG4tXFx0XFx0aWYgKG9wcy1cXHUwMDNlY2hlY2tfaHVnZShwLCAxKSlcXG4rXFx0XFx0aWYgKG9wcy1cXHUwMDNlY2hlY2tfaHVnZShwLCBocGFnZV9wbWRfc2l6ZSwgMSwgaHBhZ2VfcG1kX3NpemUpKVxcbiBcXHRcXHRcXHRzdWNjZXNzKFxcXCJPS1xcXCIpO1xcbiBcXHRcXHRlbHNlXFxuIFxcdFxcdFxcdGZhaWwoXFxcIkZhaWxcXFwiKTtcXG5AQCAtMTAzNiw3ICsxMTIzLDcgQEAgc3RhdGljIHZvaWQgY29sbGFwc2VfbWF4X3B0ZXNfc2hhcmVkKHN0cnVjdCBjb2xsYXBzZV9jb250ZXh0ICpjLCBzdHJ1Y3QgbWVtX29wc1xcbiBcXHRcXHRrc2Z0X3ByaW50X21zZyhcXFwiVHJpZ2dlciBDb1cgb24gcGFnZSAlZCBvZiAlZC4uLlxcXCIsXFxuIFxcdFxcdFxcdFxcdGhwYWdlX3BtZF9uciAtIG1heF9wdGVzX3NoYXJlZCAtIDEsIGhwYWdlX3BtZF9ucik7XFxuIFxcdFxcdG9wcy1cXHUwMDNlZmF1bHQocCwgMCwgKGhwYWdlX3BtZF9uciAtIG1heF9wdGVzX3NoYXJlZCAtIDEpICogcGFnZV9zaXplKTtcXG4tXFx0XFx0aWYgKG9wcy1cXHUwMDNlY2hlY2tfaHVnZShwLCAwKSlcXG4rXFx0XFx0aWYgKG9wcy1cXHUwMDNlY2hlY2tfaHVnZShwLCBocGFnZV9wbWRfc2l6ZSwgMCwgaHBhZ2VfcG1kX3NpemUpKVxcbiBcXHRcXHRcXHRzdWNjZXNzKFxcXCJPS1xcXCIpO1xcbiBcXHRcXHRlbHNlXFxuIFxcdFxcdFxcdGZhaWwoXFxcIkZhaWxcXFwiKTtcXG5AQCAtMTA0OSw3ICsxMTM2LDcgQEAgc3RhdGljIHZvaWQgY29sbGFwc2VfbWF4X3B0ZXNfc2hhcmVkKHN0cnVjdCBjb2xsYXBzZV9jb250ZXh0ICpjLCBzdHJ1Y3QgbWVtX29wc1xcbiBcXHRcXHRcXHQgICAgICAgaHBhZ2VfcG1kX25yIC0gbWF4X3B0ZXNfc2hhcmVkLCBocGFnZV9wbWRfbnIpO1xcbiBcXHRcXHRcXHRvcHMtXFx1MDAzZWZhdWx0KHAsIDAsIChocGFnZV9wbWRfbnIgLSBtYXhfcHRlc19zaGFyZWQpICpcXG4gXFx0XFx0XFx0XFx0ICAgIHBhZ2Vfc2l6ZSk7XFxuLVxcdFxcdFxcdGlmIChvcHMtXFx1MDAzZWNoZWNrX2h1Z2UocCwgMCkpXFxuK1xcdFxcdFxcdGlmIChvcHMtXFx1MDAzZWNoZWNrX2h1Z2UocCwgaHBhZ2VfcG1kX3NpemUsIDAsIGhwYWdlX3BtZF9zaXplKSlcXG4gXFx0XFx0XFx0XFx0c3VjY2VzcyhcXFwiT0tcXFwiKTtcXG4gXFx0XFx0XFx0ZWxzZVxcbiBcXHRcXHRcXHRcXHRmYWlsKFxcXCJGYWlsXFxcIik7XFxuQEAgLTEwNjcsNyArMTE1NCw3IEBAIHN0YXRpYyB2b2lkIGNvbGxhcHNlX21heF9wdGVzX3NoYXJlZChzdHJ1Y3QgY29sbGFwc2VfY29udGV4dCAqYywgc3RydWN0IG1lbV9vcHNcXG4gXFx0ZXhpdF9zdGF0dXMgPSBXRVhJVFNUQVRVUyh3c3RhdHVzKTtcXG4gXFxuIFxcdGtzZnRfcHJpbnRfbXNnKFxcXCJDaGVjayBpZiBwYXJlbnQgc3RpbGwgaGFzIGh1Z2UgcGFnZS4uLlxcXCIpO1xcbi1cXHRpZiAob3BzLVxcdTAwM2VjaGVja19odWdlKHAsIDEpKVxcbitcXHRpZiAob3BzLVxcdTAwM2VjaGVja19odWdlKHAsIGhwYWdlX3BtZF9zaXplLCAxLCBocGFnZV9wbWRfc2l6ZSkpXFxuIFxcdFxcdHN1Y2Nlc3MoXFxcIk9LXFxcIik7XFxuIFxcdGVsc2VcXG4gXFx0XFx0ZmFpbChcXFwiRmFpbFxcXCIpO1xcbkBAIC0xMTA4LDggKzExOTUsOCBAQCBzdGF0aWMgdm9pZCBtYWR2aXNlX3JldHJhY3RlZF9wYWdlX3RhYmxlcyhzdHJ1Y3QgY29sbGFwc2VfY29udGV4dCAqYyxcXG4gXFx0b3BzLVxcdTAwM2VmYXVsdChwLCAwLCBzaXplKTtcXG4gXFxuIFxcdC8qIExldCBraHVnZXBhZ2VkIGNvbGxhcHNlIGFuZCBsZWF2ZSBwbWQgY2xlYXJlZCAqL1xcbi1cXHRpZiAod2FpdF9mb3Jfc2NhbihcXFwiQ29sbGFwc2UgYW5kIGxlYXZlIFBNRCBjbGVhcmVkXFxcIiwgcCwgbnJfaHBhZ2VzLFxcbi1cXHRcXHRcXHQgIG9wcykpIHtcXG4rXFx0aWYgKHdhaXRfZm9yX3NjYW4oXFxcIkNvbGxhcHNlIGFuZCBsZWF2ZSBQTUQgY2xlYXJlZFxcXCIsIHAsIHNpemUsIG5yX2hwYWdlcyxcXG4rXFx0XFx0XFx0ICBocGFnZV9wbWRfb3JkZXIsIG9wcykpIHtcXG4gXFx0XFx0ZmFpbChcXFwiVGltZW91dFxcXCIpO1xcbiBcXHRcXHRyZXR1cm47XFxuIFxcdH1cXG5AQCAtMTEyNSwxNyArMTIxMiwxOSBAQCBzdGF0aWMgdm9pZCB1c2FnZSh2b2lkKVxcbiB7XFxuIFxcdGZwcmludGYoc3RkZXJyLCBcXFwiXFxcXG5Vc2FnZTogLi9raHVnZXBhZ2VkIFtPUFRJT05TXSBcXHUwMDNjdGVzdCB0eXBlXFx1MDAzZSBbZGlyXVxcXFxuXFxcXG5cXFwiKTtcXG4gXFx0ZnByaW50ZihzdGRlcnIsIFxcXCJcXFxcdFxcdTAwM2N0ZXN0IHR5cGVcXHUwMDNlXFxcXHQ6IFxcdTAwM2Njb250ZXh0XFx1MDAzZTpcXHUwMDNjbWVtX3R5cGVcXHUwMDNlXFxcXG5cXFwiKTtcXG4tXFx0ZnByaW50ZihzdGRlcnIsIFxcXCJcXFxcdFxcdTAwM2Njb250ZXh0XFx1MDAzZVxcXFx0OiBbYWxsfGtodWdlcGFnZWR8bWFkdmlzZV1cXFxcblxcXCIpO1xcbitcXHRmcHJpbnRmKHN0ZGVyciwgXFxcIlxcXFx0XFx1MDAzY2NvbnRleHRcXHUwMDNlXFxcXHQ6IFthbGx8a2h1Z2VwYWdlZHxtdGhwX2todWdlcGFnZWR8bWFkdmlzZV1cXFxcblxcXCIpO1xcbiBcXHRmcHJpbnRmKHN0ZGVyciwgXFxcIlxcXFx0XFx1MDAzY21lbV90eXBlXFx1MDAzZVxcXFx0OiBbYWxsfGFub258ZmlsZXxzaG1lbV1cXFxcblxcXCIpO1xcbiBcXHRmcHJpbnRmKHN0ZGVyciwgXFxcIlxcXFxuXFxcXHRcXFxcXFxcImZpbGUsYWxsXFxcXFxcXCIgbWVtX3R5cGUgcmVxdWlyZXMgW2Rpcl0gYXJndW1lbnRcXFxcblxcXCIpO1xcbiBcXHRmcHJpbnRmKHN0ZGVyciwgXFxcIlxcXFxuXFxcXHRcXFxcXFxcImZpbGUsYWxsXFxcXFxcXCIgbWVtX3R5cGUgcmVxdWlyZXMgYSBmaWxlIHN5c3RlbVxcXFxuXFxcIik7XFxuIFxcdGZwcmludGYoc3RkZXJyLFxcdFxcXCJcXFxcdHdpdGggUE1ELXNpemVkIGxhcmdlIGZvbGlvIHN1cHBvcnRcXFxcblxcXCIpO1xcbiBcXHRmcHJpbnRmKHN0ZGVyciwgXFxcIlxcXFxuXFxcXHRpZiBbZGlyXSBpcyBhIChzdWIpZGlyZWN0b3J5IG9mIGEgdG1wZnMgbW91bnQsIHRtcGZzIG11c3QgYmVcXFxcblxcXCIpO1xcbiBcXHRmcHJpbnRmKHN0ZGVycixcXHRcXFwiXFxcXHRtb3VudGVkIHdpdGggaHVnZT1hZHZpc2Ugb3B0aW9uIGZvciBraHVnZXBhZ2VkIHRlc3RzIHRvIHdvcmtcXFxcblxcXCIpO1xcbitcXHRmcHJpbnRmKHN0ZGVyciwgXFxcIlxcXFxuXFxcXHRtdGhwX2todWdlcGFnZWQgb25seSBzdXBwb3J0cyBhbm9uIG1lbV90eXBlIG5vdy5cXFxcblxcXCIpO1xcbiBcXHRmcHJpbnRmKHN0ZGVycixcXHRcXFwiXFxcXG5cXFxcdFN1cHBvcnRlZCBPcHRpb25zOlxcXFxuXFxcIik7XFxuIFxcdGZwcmludGYoc3RkZXJyLFxcdFxcXCJcXFxcdFxcXFx0LWg6IFRoaXMgaGVscCBtZXNzYWdlLlxcXFxuXFxcIik7XFxuIFxcdGZwcmludGYoc3RkZXJyLFxcdFxcXCJcXFxcdFxcXFx0LXM6IG1USFAgc2l6ZSwgZXhwcmVzc2VkIGFzIHBhZ2Ugb3JkZXIuXFxcXG5cXFwiKTtcXG4gXFx0ZnByaW50ZihzdGRlcnIsXFx0XFxcIlxcXFx0XFxcXHQgICAgRGVmYXVsdHMgdG8gMC4gVXNlIHRoaXMgc2l6ZSBmb3IgYW5vbiBvciBzaG1lbSBhbGxvY2F0aW9ucy5cXFxcblxcXCIpO1xcbitcXHRmcHJpbnRmKHN0ZGVycixcXHRcXFwiXFxcXHRcXFxcdC1jOiBjb2xsYXBzZSBvcmRlciBmb3IgbVRIUCBjb2xsYXBzZSwgZXhwcmVzc2VkIGFzIHBhZ2Ugb3JkZXIuXFxcXG5cXFwiKTtcXG4gXFx0ZXhpdCgxKTtcXG4gfVxcbiBcXG5AQCAtMTE0NSwxMSArMTIzNCwxNCBAQCBzdGF0aWMgdm9pZCBwYXJzZV90ZXN0X3R5cGUoaW50IGFyZ2MsIGNoYXIgKiphcmd2KVxcbiBcXHRjaGFyICpidWY7XFxuIFxcdGNvbnN0IGNoYXIgKnRva2VuO1xcbiBcXG4tXFx0d2hpbGUgKChvcHQgPSBnZXRvcHQoYXJnYywgYXJndiwgXFxcInM6aFxcXCIpKSAhPSAtMSkge1xcbitcXHR3aGlsZSAoKG9wdCA9IGdldG9wdChhcmdjLCBhcmd2LCBcXFwiczpjOmhcXFwiKSkgIT0gLTEpIHtcXG4gXFx0XFx0c3dpdGNoIChvcHQpIHtcXG4gXFx0XFx0Y2FzZSAncyc6XFxuIFxcdFxcdFxcdGFub25fb3JkZXIgPSBhdG9pKG9wdGFyZyk7XFxuIFxcdFxcdFxcdGJyZWFrO1xcbitcXHRcXHRjYXNlICdjJzpcXG4rXFx0XFx0XFx0Y29sbGFwc2Vfb3JkZXIgPSBhdG9pKG9wdGFyZyk7XFxuK1xcdFxcdFxcdGJyZWFrO1xcbiBcXHRcXHRjYXNlICdoJzpcXG4gXFx0XFx0ZGVmYXVsdDpcXG4gXFx0XFx0XFx0dXNhZ2UoKTtcXG5AQCAtMTE3NSw2ICsxMjY3LDEwIEBAIHN0YXRpYyB2b2lkIHBhcnNlX3Rlc3RfdHlwZShpbnQgYXJnYywgY2hhciAqKmFyZ3YpXFxuIFxcdFxcdG1hZHZpc2VfY29udGV4dCA9ICBcXHUwMDI2X19tYWR2aXNlX2NvbnRleHQ7XFxuIFxcdH0gZWxzZSBpZiAoIXN0cmNtcCh0b2tlbiwgXFxcImtodWdlcGFnZWRcXFwiKSkge1xcbiBcXHRcXHRraHVnZXBhZ2VkX2NvbnRleHQgPSAgXFx1MDAyNl9fa2h1Z2VwYWdlZF9jb250ZXh0O1xcbitcXHR9IGVsc2UgaWYgKCFzdHJjbXAodG9rZW4sIFxcXCJtdGhwX2todWdlcGFnZWRcXFwiKSkge1xcbitcXHRcXHRtdGhwX2todWdlcGFnZWRfY29udGV4dCA9ICBcXHUwMDI2X19tdGhwX2todWdlcGFnZWRfY29udGV4dDtcXG4rXFx0XFx0aWYgKGNvbGxhcHNlX29yZGVyIFxcdTAwM2M9IDAgfHwgY29sbGFwc2Vfb3JkZXIgXFx1MDAzZT0gaHBhZ2VfcG1kX29yZGVyKVxcbitcXHRcXHRcXHR1c2FnZSgpO1xcbiBcXHR9IGVsc2UgaWYgKCFzdHJjbXAodG9rZW4sIFxcXCJtYWR2aXNlXFxcIikpIHtcXG4gXFx0XFx0bWFkdmlzZV9jb250ZXh0ID0gIFxcdTAwMjZfX21hZHZpc2VfY29udGV4dDtcXG4gXFx0fSBlbHNlIHtcXG5AQCAtMTE5MCwxNCArMTI4NiwyMCBAQCBzdGF0aWMgdm9pZCBwYXJzZV90ZXN0X3R5cGUoaW50IGFyZ2MsIGNoYXIgKiphcmd2KVxcbiBcXHRcXHRyZWFkX3dyaXRlX2ZpbGVfd3JpdGVfb3BzID0gIFxcdTAwMjZfX3JlYWRfd3JpdGVfZmlsZV93cml0ZV9vcHM7XFxuIFxcdFxcdGFub25fb3BzID0gXFx1MDAyNl9fYW5vbl9vcHM7XFxuIFxcdFxcdHNobWVtX29wcyA9IFxcdTAwMjZfX3NobWVtX29wcztcXG4rXFx0XFx0aWYgKG10aHBfa2h1Z2VwYWdlZF9jb250ZXh0KVxcbitcXHRcXHRcXHR1c2FnZSgpO1xcbiBcXHR9IGVsc2UgaWYgKCFzdHJjbXAoYnVmLCBcXFwiYW5vblxcXCIpKSB7XFxuIFxcdFxcdGFub25fb3BzID0gXFx1MDAyNl9fYW5vbl9vcHM7XFxuIFxcdH0gZWxzZSBpZiAoIXN0cmNtcChidWYsIFxcXCJmaWxlXFxcIikpIHtcXG4gXFx0XFx0cmVhZF9vbmx5X2ZpbGVfb3BzID0gIFxcdTAwMjZfX3JlYWRfb25seV9maWxlX29wcztcXG4gXFx0XFx0cmVhZF93cml0ZV9maWxlX3JlYWRfb3BzID0gIFxcdTAwMjZfX3JlYWRfd3JpdGVfZmlsZV9yZWFkX29wcztcXG4gXFx0XFx0cmVhZF93cml0ZV9maWxlX3dyaXRlX29wcyA9ICBcXHUwMDI2X19yZWFkX3dyaXRlX2ZpbGVfd3JpdGVfb3BzO1xcbitcXHRcXHRpZiAobXRocF9raHVnZXBhZ2VkX2NvbnRleHQpXFxuK1xcdFxcdFxcdHVzYWdlKCk7XFxuIFxcdH0gZWxzZSBpZiAoIXN0cmNtcChidWYsIFxcXCJzaG1lbVxcXCIpKSB7XFxuIFxcdFxcdHNobWVtX29wcyA9IFxcdTAwMjZfX3NobWVtX29wcztcXG4rXFx0XFx0aWYgKG10aHBfa2h1Z2VwYWdlZF9jb250ZXh0KVxcbitcXHRcXHRcXHR1c2FnZSgpO1xcbiBcXHR9IGVsc2Uge1xcbiBcXHRcXHR1c2FnZSgpO1xcbiBcXHR9XFxuQEAgLTEyNDAsNyArMTM0Miw2IEBAIHN0YXRpYyBpbnQgbnJfdGVzdF9jYXNlcztcXG4gXFxuIGludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndilcXG4ge1xcbi1cXHRpbnQgaHBhZ2VfcG1kX29yZGVyO1xcbiBcXHRzdHJ1Y3QgdGhwX3NldHRpbmdzIGRlZmF1bHRfc2V0dGluZ3MgPSB7XFxuIFxcdFxcdC50aHBfZW5hYmxlZCA9IFRIUF9NQURWSVNFLFxcbiBcXHRcXHQudGhwX2RlZnJhZyA9IFRIUF9ERUZSQUdfQUxXQVlTLFxcbkBAIC0xMjY2LDEwICsxMzY3LDYgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KVxcbiBcXHRpZiAoIXRocF9pc19lbmFibGVkKCkpXFxuIFxcdFxcdGtzZnRfZXhpdF9za2lwKFxcXCJUcmFuc3BhcmVudCBIdWdlcGFnZXMgbm90IGF2YWlsYWJsZVxcXFxuXFxcIik7XFxuIFxcbi1cXHRwYXJzZV90ZXN0X3R5cGUoYXJnYywgYXJndik7XFxuLVxcbi1cXHRzZXRidWYoc3Rkb3V0LCBOVUxMKTtcXG4tXFxuIFxcdHBhZ2Vfc2l6ZSA9IGdldHBhZ2VzaXplKCk7XFxuIFxcdGhwYWdlX3BtZF9zaXplID0gcmVhZF9wbWRfcGFnZXNpemUoKTtcXG4gXFx0aWYgKCFocGFnZV9wbWRfc2l6ZSlcXG5AQCAtMTI3Nyw2ICsxMzc0LDEwIEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndilcXG4gXFx0aHBhZ2VfcG1kX25yID0gaHBhZ2VfcG1kX3NpemUgLyBwYWdlX3NpemU7XFxuIFxcdGhwYWdlX3BtZF9vcmRlciA9IF9fYnVpbHRpbl9jdHooaHBhZ2VfcG1kX25yKTtcXG4gXFxuK1xcdHBhcnNlX3Rlc3RfdHlwZShhcmdjLCBhcmd2KTtcXG4rXFxuK1xcdHNldGJ1ZihzdGRvdXQsIE5VTEwpO1xcbitcXG4gXFx0ZGVmYXVsdF9zZXR0aW5ncy5raHVnZXBhZ2VkLm1heF9wdGVzX25vbmUgPSBocGFnZV9wbWRfbnIgLSAxO1xcbiBcXHRkZWZhdWx0X3NldHRpbmdzLmtodWdlcGFnZWQubWF4X3B0ZXNfc3dhcCA9IGhwYWdlX3BtZF9uciAvIDg7XFxuIFxcdGRlZmF1bHRfc2V0dGluZ3Mua2h1Z2VwYWdlZC5tYXhfcHRlc19zaGFyZWQgPSBocGFnZV9wbWRfbnIgLyAyO1xcbkBAIC0xMjk0LDYgKzEzOTUsNyBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpXFxuIFxcdFRFU1QoY29sbGFwc2VfZnVsbCwga2h1Z2VwYWdlZF9jb250ZXh0LCByZWFkX3dyaXRlX2ZpbGVfcmVhZF9vcHMpO1xcbiBcXHRURVNUKGNvbGxhcHNlX2Z1bGwsIGtodWdlcGFnZWRfY29udGV4dCwgcmVhZF93cml0ZV9maWxlX3dyaXRlX29wcyk7XFxuIFxcdFRFU1QoY29sbGFwc2VfZnVsbCwga2h1Z2VwYWdlZF9jb250ZXh0LCBzaG1lbV9vcHMpO1xcbitcXHRURVNUKGNvbGxhcHNlX2Z1bGwsIG10aHBfa2h1Z2VwYWdlZF9jb250ZXh0LCBhbm9uX29wcyk7XFxuIFxcdFRFU1QoY29sbGFwc2VfZnVsbCwgbWFkdmlzZV9jb250ZXh0LCBhbm9uX29wcyk7XFxuIFxcdFRFU1QoY29sbGFwc2VfZnVsbCwgbWFkdmlzZV9jb250ZXh0LCByZWFkX29ubHlfZmlsZV9vcHMpO1xcbiBcXHRURVNUKGNvbGxhcHNlX2Z1bGwsIG1hZHZpc2VfY29udGV4dCwgcmVhZF93cml0ZV9maWxlX3JlYWRfb3BzKTtcXG5AQCAtMTMwMSw4ICsxNDAzLDExIEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndilcXG4gXFx0VEVTVChjb2xsYXBzZV9mdWxsLCBtYWR2aXNlX2NvbnRleHQsIHNobWVtX29wcyk7XFxuIFxcbiBcXHRURVNUKGNvbGxhcHNlX2VtcHR5LCBraHVnZXBhZ2VkX2NvbnRleHQsIGFub25fb3BzKTtcXG4rXFx0VEVTVChjb2xsYXBzZV9lbXB0eSwgbXRocF9raHVnZXBhZ2VkX2NvbnRleHQsIGFub25fb3BzKTtcXG4gXFx0VEVTVChjb2xsYXBzZV9lbXB0eSwgbWFkdmlzZV9jb250ZXh0LCBhbm9uX29wcyk7XFxuIFxcbitcXHRURVNUKGNvbGxhcHNlX3NpbmdsZV9tdGhwLCBtdGhwX2todWdlcGFnZWRfY29udGV4dCwgYW5vbl9vcHMpO1xcbitcXG4gXFx0VEVTVChjb2xsYXBzZV9zaW5nbGVfcHRlX2VudHJ5LCBraHVnZXBhZ2VkX2NvbnRleHQsIGFub25fb3BzKTtcXG4gXFx0VEVTVChjb2xsYXBzZV9zaW5nbGVfcHRlX2VudHJ5LCBraHVnZXBhZ2VkX2NvbnRleHQsIHJlYWRfb25seV9maWxlX29wcyk7XFxuIFxcdFRFU1QoY29sbGFwc2Vfc2luZ2xlX3B0ZV9lbnRyeSwga2h1Z2VwYWdlZF9jb250ZXh0LCByZWFkX3dyaXRlX2ZpbGVfcmVhZF9vcHMpO1xcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wYWdlbWFwX2lvY3RsLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wYWdlbWFwX2lvY3RsLmNcXG5pbmRleCAxYjJkZmZjYzk5OWIwLi5jZmQxOTg3MzM5YzEzIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3BhZ2VtYXBfaW9jdGwuY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3BhZ2VtYXBfaW9jdGwuY1xcbkBAIC0xMDg1LDcgKzEwODUsNyBAQCBzdGF0aWMgdm9pZCB1bnBvcHVsYXRlZF93cml0dGVuX3Rlc3QoY29uc3QgY2hhciAqbmFtZSwgY2hhciAqbWVtLCBsb25nIHNpemUsXFxuIFxcdG1lbXNldChtZW0sIDEsIHNpemUpO1xcbiBcXHRpZiAodXNlX3RocCBcXHUwMDI2XFx1MDAyNlxcbiBcXHQgICAgKG1hZHZpc2UobWVtLCBzaXplLCBNQURWX0NPTExBUFNFKSB8fFxcbi1cXHQgICAgICFjaGVja19odWdlX2Fub24obWVtLCBzaXplIC8gaHBhZ2Vfc2l6ZSwgaHBhZ2Vfc2l6ZSkpKSB7XFxuK1xcdCAgICAgIWNoZWNrX2h1Z2VfYW5vbihtZW0sIHNpemUsIHNpemUgLyBocGFnZV9zaXplLCBocGFnZV9zaXplKSkpIHtcXG4gXFx0XFx0a3NmdF90ZXN0X3Jlc3VsdF9za2lwKFxcXCIlcyBjb3VsZCBub3QgZm9ybSBhIFRIUFxcXFxuXFxcIiwgbmFtZSk7XFxuIFxcdFxcdGdvdG8gb3V0O1xcbiBcXHR9XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ByY3RsX3RocF9kaXNhYmxlLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wcmN0bF90aHBfZGlzYWJsZS5jXFxuaW5kZXggZDhkOWQxZGU1N2I4Yi4uODJjNmU5NmVhNmViMyAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wcmN0bF90aHBfZGlzYWJsZS5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcHJjdGxfdGhwX2Rpc2FibGUuY1xcbkBAIC02Nyw3ICs2Nyw3IEBAIHN0YXRpYyBpbnQgdGVzdF9tbWFwX3RocChlbnVtIHRocF9jb2xsYXBzZV90eXBlIG1hZHZpc2VfYnVmLCBzaXplX3QgcG1kc2l6ZSlcXG4gXFx0LyogSEFDSzogbWFrZSBzdXJlIHdlIGhhdmUgYSBzZXBhcmF0ZSBWTUEgdGhhdCB3ZSBjYW4gY2hlY2sgcmVsaWFibHkuICovXFxuIFxcdG1wcm90ZWN0KG1lbSwgcG1kc2l6ZSwgUFJPVF9SRUFEKTtcXG4gXFxuLVxcdHJldCA9IGNoZWNrX2h1Z2VfYW5vbihtZW0sIDEsIHBtZHNpemUpO1xcbitcXHRyZXQgPSBjaGVja19odWdlX2Fub24obWVtLCBwbWRzaXplLCAxLCBwbWRzaXplKTtcXG4gXFx0bXVubWFwKG1tYXBfbWVtLCBtbWFwX3NpemUpO1xcbiBcXHRyZXR1cm4gcmV0O1xcbiB9XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3J1bl92bXRlc3RzLnNoIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcnVuX3ZtdGVzdHMuc2hcXG5pbmRleCA2ODdkMTE1ZTNiZDgwLi5kMDlmOWY2YTM4NGVlIDEwMDc1NVxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3J1bl92bXRlc3RzLnNoXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcnVuX3ZtdGVzdHMuc2hcXG5AQCAtNDEwLDYgKzQxMCw4IEBAIENBVEVHT1JZPVxcXCJ0aHBcXFwiIHJ1bl90ZXN0IC4va2h1Z2VwYWdlZCBhbGw6c2htZW1cXG4gXFxuIENBVEVHT1JZPVxcXCJ0aHBcXFwiIHJ1bl90ZXN0IC4va2h1Z2VwYWdlZCAtcyA0IGFsbDpzaG1lbVxcbiBcXG4rQ0FURUdPUlk9XFxcInRocFxcXCIgcnVuX3Rlc3QgLi9raHVnZXBhZ2VkIC1jIDQgbXRocF9raHVnZXBhZ2VkOmFub25cXG4rXFxuICMgVHJ5IHRvIGNyZWF0ZSBYRlMgaWYgbm90IHByb3ZpZGVkXFxuIGlmIFsgLXogXFxcIiR7U1BMSVRfSFVHRV9QQUdFX1RFU1RfWEZTX1BBVEh9XFxcIiBdOyB0aGVuXFxuICAgICBpZiB0ZXN0X3NlbGVjdGVkIFxcXCJ0aHBcXFwiOyB0aGVuXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3NvZnQtZGlydHkuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3NvZnQtZGlydHkuY1xcbmluZGV4IGZiMTg2NGE2OGUxYzYuLmUxOThmYWNmNzhiYjUgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vc29mdC1kaXJ0eS5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vc29mdC1kaXJ0eS5jXFxuQEAgLTEwMyw3ICsxMDMsNyBAQCBzdGF0aWMgdm9pZCB0ZXN0X2h1Z2VwYWdlKGludCBwYWdlbWFwX2ZkLCBpbnQgcGFnZXNpemUpXFxuIFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBocGFnZV9sZW47IGkrKylcXG4gXFx0XFx0bWFwW2ldID0gKGNoYXIpaTtcXG4gXFxuLVxcdGlmIChjaGVja19odWdlX2Fub24obWFwLCAxLCBocGFnZV9sZW4pKSB7XFxuK1xcdGlmIChjaGVja19odWdlX2Fub24obWFwLCBocGFnZV9sZW4sIDEsIGhwYWdlX2xlbikpIHtcXG4gXFx0XFx0a3NmdF90ZXN0X3Jlc3VsdF9wYXNzKFxcXCJUZXN0ICVzIGh1Z2UgcGFnZSBhbGxvY2F0aW9uXFxcXG5cXFwiLCBfX2Z1bmNfXyk7XFxuIFxcbiBcXHRcXHRjbGVhcl9zb2Z0ZGlydHkoKTtcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vc3BsaXRfaHVnZV9wYWdlX3Rlc3QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3NwbGl0X2h1Z2VfcGFnZV90ZXN0LmNcXG5pbmRleCAzMmI5OTE0NzJmNzQ0Li44NmE2MDM2OTI4MjYxIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3NwbGl0X2h1Z2VfcGFnZV90ZXN0LmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9zcGxpdF9odWdlX3BhZ2VfdGVzdC5jXFxuQEAgLTEwNCwxMjkgKzEwNCw2IEBAIHN0YXRpYyBib29sIGlzX2JhY2tlZF9ieV9mb2xpbyhjaGFyICp2YWRkciwgaW50IG9yZGVyLCBpbnQgcGFnZW1hcF9mZCxcXG4gXFx0cmV0dXJuIGZhbHNlO1xcbiB9XFxuIFxcbi1zdGF0aWMgaW50IHZhZGRyX3BhZ2VmbGFnc19nZXQoY2hhciAqdmFkZHIsIGludCBwYWdlbWFwX2ZkLCBpbnQga3BhZ2VmbGFnc19mZCxcXG4tXFx0XFx0dWludDY0X3QgKmZsYWdzKVxcbi17XFxuLVxcdHVuc2lnbmVkIGxvbmcgcGZuO1xcbi1cXG4tXFx0cGZuID0gcGFnZW1hcF9nZXRfcGZuKHBhZ2VtYXBfZmQsIHZhZGRyKTtcXG4tXFxuLVxcdC8qIG5vbi1wcmVzZW50IFBGTiAqL1xcbi1cXHRpZiAocGZuID09IC0xVUwpXFxuLVxcdFxcdHJldHVybiAxO1xcbi1cXG4tXFx0aWYgKHBhZ2VmbGFnc19nZXQocGZuLCBrcGFnZWZsYWdzX2ZkLCBmbGFncykpXFxuLVxcdFxcdHJldHVybiAtMTtcXG4tXFxuLVxcdHJldHVybiAwO1xcbi19XFxuLVxcbi0vKlxcbi0gKiBnYXRoZXJfYWZ0ZXJfc3BsaXRfZm9saW9fb3JkZXJzIC0gc2NhbiB0aHJvdWdoIFt2YWRkcl9zdGFydCwgbGVuKSBhbmQgcmVjb3JkXFxuLSAqIGZvbGlvIG9yZGVyc1xcbi0gKlxcbi0gKiBAdmFkZHJfc3RhcnQ6IHN0YXJ0IHZhZGRyXFxuLSAqIEBsZW46IHJhbmdlIGxlbmd0aFxcbi0gKiBAcGFnZW1hcF9mZDogZmlsZSBkZXNjcmlwdG9yIHRvIC9wcm9jL1xcdTAwM2NwaWRcXHUwMDNlL3BhZ2VtYXBcXG4tICogQGtwYWdlZmxhZ3NfZmQ6IGZpbGUgZGVzY3JpcHRvciB0byAvcHJvYy9rcGFnZWZsYWdzXFxuLSAqIEBvcmRlcnM6IG91dHB1dCBmb2xpbyBvcmRlciBhcnJheVxcbi0gKiBAbnJfb3JkZXJzOiBmb2xpbyBvcmRlciBhcnJheSBzaXplXFxuLSAqXFxuLSAqIGdhdGhlcl9hZnRlcl9zcGxpdF9mb2xpb19vcmRlcnMoKSBzY2FuIHRocm91Z2ggW3ZhZGRyX3N0YXJ0LCBsZW4pIGFuZCBjaGVja1xcbi0gKiBhbGwgZm9saW9zIHdpdGhpbiB0aGUgcmFuZ2UgYW5kIHJlY29yZCB0aGVpciBvcmRlcnMuIEFsbCBvcmRlci0wIHBhZ2VzIHdpbGxcXG4tICogYmUgcmVjb3JkZWQuIE5vbi1wcmVzZW50IHZhZGRyIGlzIHNraXBwZWQuXFxuLSAqXFxuLSAqIE5PVEU6IHRoZSBmdW5jdGlvbiBpcyB1c2VkIHRvIGNoZWNrIGZvbGlvIG9yZGVycyBhZnRlciBhIHNwbGl0IGlzIHBlcmZvcm1lZCxcXG4tICogc28gaXQgYXNzdW1lcyBbdmFkZHJfc3RhcnQsIGxlbikgZnVsbHkgbWFwcyB0byBhZnRlci1zcGxpdCBmb2xpb3Mgd2l0aGluIHRoYXRcXG4tICogcmFuZ2UuXFxuLSAqXFxuLSAqIFJldHVybjogMCAtIG5vIGVycm9yLCAtMSAtIHVuaGFuZGxlZCBjYXNlc1xcbi0gKi9cXG4tc3RhdGljIGludCBnYXRoZXJfYWZ0ZXJfc3BsaXRfZm9saW9fb3JkZXJzKGNoYXIgKnZhZGRyX3N0YXJ0LCBzaXplX3QgbGVuLFxcbi1cXHRcXHRpbnQgcGFnZW1hcF9mZCwgaW50IGtwYWdlZmxhZ3NfZmQsIGludCBvcmRlcnNbXSwgaW50IG5yX29yZGVycylcXG4te1xcbi1cXHR1aW50NjRfdCBwYWdlX2ZsYWdzID0gMDtcXG4tXFx0aW50IGN1cl9vcmRlciA9IC0xO1xcbi1cXHRjaGFyICp2YWRkcjtcXG4tXFxuLVxcdGlmIChwYWdlbWFwX2ZkID09IC0xIHx8IGtwYWdlZmxhZ3NfZmQgPT0gLTEpXFxuLVxcdFxcdHJldHVybiAtMTtcXG4tXFx0aWYgKCFvcmRlcnMpXFxuLVxcdFxcdHJldHVybiAtMTtcXG4tXFx0aWYgKG5yX29yZGVycyBcXHUwMDNjPSAwKVxcbi1cXHRcXHRyZXR1cm4gLTE7XFxuLVxcbi1cXHRmb3IgKHZhZGRyID0gdmFkZHJfc3RhcnQ7IHZhZGRyIFxcdTAwM2MgdmFkZHJfc3RhcnQgKyBsZW47KSB7XFxuLVxcdFxcdGNoYXIgKm5leHRfZm9saW9fdmFkZHI7XFxuLVxcdFxcdGludCBzdGF0dXM7XFxuLVxcbi1cXHRcXHRzdGF0dXMgPSB2YWRkcl9wYWdlZmxhZ3NfZ2V0KHZhZGRyLCBwYWdlbWFwX2ZkLCBrcGFnZWZsYWdzX2ZkLFxcbi1cXHRcXHRcXHRcXHRcXHRcXHUwMDI2cGFnZV9mbGFncyk7XFxuLVxcdFxcdGlmIChzdGF0dXMgXFx1MDAzYyAwKVxcbi1cXHRcXHRcXHRyZXR1cm4gLTE7XFxuLVxcbi1cXHRcXHQvKiBza2lwIG5vbiBwcmVzZW50IHZhZGRyICovXFxuLVxcdFxcdGlmIChzdGF0dXMgPT0gMSkge1xcbi1cXHRcXHRcXHR2YWRkciArPSBwc2l6ZSgpO1xcbi1cXHRcXHRcXHRjb250aW51ZTtcXG4tXFx0XFx0fVxcbi1cXG4tXFx0XFx0LyogYWxsIG9yZGVyLTAgcGFnZXMgd2l0aCBwb3NzaWJsZSBmYWxzZSBwb3N0aXZlIChub24gZm9saW8pICovXFxuLVxcdFxcdGlmICghKHBhZ2VfZmxhZ3MgXFx1MDAyNiAoS1BGX0NPTVBPVU5EX0hFQUQgfCBLUEZfQ09NUE9VTkRfVEFJTCkpKSB7XFxuLVxcdFxcdFxcdG9yZGVyc1swXSsrO1xcbi1cXHRcXHRcXHR2YWRkciArPSBwc2l6ZSgpO1xcbi1cXHRcXHRcXHRjb250aW51ZTtcXG4tXFx0XFx0fVxcbi1cXG4tXFx0XFx0Lyogc2tpcCBub24gdGhwIGNvbXBvdW5kIHBhZ2VzICovXFxuLVxcdFxcdGlmICghKHBhZ2VfZmxhZ3MgXFx1MDAyNiBLUEZfVEhQKSkge1xcbi1cXHRcXHRcXHR2YWRkciArPSBwc2l6ZSgpO1xcbi1cXHRcXHRcXHRjb250aW51ZTtcXG4tXFx0XFx0fVxcbi1cXG4tXFx0XFx0LyogdnBuIHBvaW50cyB0byBwYXJ0IG9mIGEgVEhQIGF0IHRoaXMgcG9pbnQgKi9cXG4tXFx0XFx0aWYgKHBhZ2VfZmxhZ3MgXFx1MDAyNiBLUEZfQ09NUE9VTkRfSEVBRClcXG4tXFx0XFx0XFx0Y3VyX29yZGVyID0gMTtcXG4tXFx0XFx0ZWxzZSB7XFxuLVxcdFxcdFxcdHZhZGRyICs9IHBzaXplKCk7XFxuLVxcdFxcdFxcdGNvbnRpbnVlO1xcbi1cXHRcXHR9XFxuLVxcbi1cXHRcXHRuZXh0X2ZvbGlvX3ZhZGRyID0gdmFkZHIgKyAoMVVMIFxcdTAwM2NcXHUwMDNjIChjdXJfb3JkZXIgKyBwc2hpZnQoKSkpO1xcbi1cXG4tXFx0XFx0aWYgKG5leHRfZm9saW9fdmFkZHIgXFx1MDAzZT0gdmFkZHJfc3RhcnQgKyBsZW4pXFxuLVxcdFxcdFxcdGJyZWFrO1xcbi1cXG4tXFx0XFx0d2hpbGUgKChzdGF0dXMgPSB2YWRkcl9wYWdlZmxhZ3NfZ2V0KG5leHRfZm9saW9fdmFkZHIsXFxuLVxcdFxcdFxcdFxcdFxcdFxcdCAgICAgcGFnZW1hcF9mZCwga3BhZ2VmbGFnc19mZCxcXG4tXFx0XFx0XFx0XFx0XFx0XFx0ICAgICBcXHUwMDI2cGFnZV9mbGFncykpIFxcdTAwM2U9IDApIHtcXG4tXFx0XFx0XFx0LypcXG4tXFx0XFx0XFx0ICogbm9uIHByZXNlbnQgdmFkZHIsIG5leHQgY29tcG91bmQgaGVhZCBwYWdlLCBvclxcbi1cXHRcXHRcXHQgKiBvcmRlci0wIHBhZ2VcXG4tXFx0XFx0XFx0ICovXFxuLVxcdFxcdFxcdGlmIChzdGF0dXMgPT0gMSB8fFxcbi1cXHRcXHRcXHQgICAgKHBhZ2VfZmxhZ3MgXFx1MDAyNiBLUEZfQ09NUE9VTkRfSEVBRCkgfHxcXG4tXFx0XFx0XFx0ICAgICEocGFnZV9mbGFncyBcXHUwMDI2IChLUEZfQ09NUE9VTkRfSEVBRCB8IEtQRl9DT01QT1VORF9UQUlMKSkpIHtcXG4tXFx0XFx0XFx0XFx0aWYgKGN1cl9vcmRlciBcXHUwMDNjIG5yX29yZGVycykge1xcbi1cXHRcXHRcXHRcXHRcXHRvcmRlcnNbY3VyX29yZGVyXSsrO1xcbi1cXHRcXHRcXHRcXHRcXHRjdXJfb3JkZXIgPSAtMTtcXG4tXFx0XFx0XFx0XFx0XFx0dmFkZHIgPSBuZXh0X2ZvbGlvX3ZhZGRyO1xcbi1cXHRcXHRcXHRcXHR9XFxuLVxcdFxcdFxcdFxcdGJyZWFrO1xcbi1cXHRcXHRcXHR9XFxuLVxcbi1cXHRcXHRcXHRjdXJfb3JkZXIrKztcXG4tXFx0XFx0XFx0bmV4dF9mb2xpb192YWRkciA9IHZhZGRyICsgKDFVTCBcXHUwMDNjXFx1MDAzYyAoY3VyX29yZGVyICsgcHNoaWZ0KCkpKTtcXG4tXFx0XFx0fVxcbi1cXG4tXFx0XFx0aWYgKHN0YXR1cyBcXHUwMDNjIDApXFxuLVxcdFxcdFxcdHJldHVybiBzdGF0dXM7XFxuLVxcdH1cXG4tXFx0aWYgKGN1cl9vcmRlciBcXHUwMDNlIDAgXFx1MDAyNlxcdTAwMjYgY3VyX29yZGVyIFxcdTAwM2MgbnJfb3JkZXJzKVxcbi1cXHRcXHRvcmRlcnNbY3VyX29yZGVyXSsrO1xcbi1cXHRyZXR1cm4gMDtcXG4tfVxcbi1cXG4gc3RhdGljIGludCBjaGVja19hZnRlcl9zcGxpdF9mb2xpb19vcmRlcnMoY2hhciAqdmFkZHJfc3RhcnQsIHNpemVfdCBsZW4sXFxuIFxcdFxcdGludCBwYWdlbWFwX2ZkLCBpbnQga3BhZ2VmbGFnc19mZCwgaW50IG9yZGVyc1tdLCBpbnQgbnJfb3JkZXJzKVxcbiB7XFxuQEAgLTI0MCw3ICsxMTcsNyBAQCBzdGF0aWMgaW50IGNoZWNrX2FmdGVyX3NwbGl0X2ZvbGlvX29yZGVycyhjaGFyICp2YWRkcl9zdGFydCwgc2l6ZV90IGxlbixcXG4gXFx0XFx0a3NmdF9leGl0X2ZhaWxfbXNnKFxcXCJDYW5ub3QgYWxsb2NhdGUgbWVtb3J5IGZvciB2YWRkcl9vcmRlcnNcXFwiKTtcXG4gXFxuIFxcdG1lbXNldCh2YWRkcl9vcmRlcnMsIDAsIHNpemVvZihpbnQpICogbnJfb3JkZXJzKTtcXG4tXFx0c3RhdHVzID0gZ2F0aGVyX2FmdGVyX3NwbGl0X2ZvbGlvX29yZGVycyh2YWRkcl9zdGFydCwgbGVuLCBwYWdlbWFwX2ZkLFxcbitcXHRzdGF0dXMgPSBnYXRoZXJfZm9saW9fb3JkZXJzKHZhZGRyX3N0YXJ0LCBsZW4sIHBhZ2VtYXBfZmQsXFxuIFxcdFxcdFxcdFxcdCAgICAga3BhZ2VmbGFnc19mZCwgdmFkZHJfb3JkZXJzLCBucl9vcmRlcnMpO1xcbiBcXHRpZiAoc3RhdHVzKVxcbiBcXHRcXHRrc2Z0X2V4aXRfZmFpbF9tc2coXFxcImdhdGhlciBmb2xpbyBpbmZvIGZhaWxlZFxcXFxuXFxcIik7XFxuQEAgLTI5Niw3ICsxNzMsNyBAQCBzdGF0aWMgdm9pZCB2ZXJpZnlfcnNzX2Fub25fc3BsaXRfaHVnZV9wYWdlX2FsbF96ZXJvZXMoY2hhciAqb25lX3BhZ2UsIGludCBucl9ocFxcbiBcXHR1bnNpZ25lZCBsb25nIHJzc19hbm9uX2JlZm9yZSwgcnNzX2Fub25fYWZ0ZXI7XFxuIFxcdHNpemVfdCBpO1xcbiBcXG4tXFx0aWYgKCFjaGVja19odWdlX2Fub24ob25lX3BhZ2UsIG5yX2hwYWdlcywgcG1kX3BhZ2VzaXplKSlcXG4rXFx0aWYgKCFjaGVja19odWdlX2Fub24ob25lX3BhZ2UsIG5yX2hwYWdlcyAqIHBtZF9wYWdlc2l6ZSwgbnJfaHBhZ2VzLCBwbWRfcGFnZXNpemUpKVxcbiBcXHRcXHRrc2Z0X2V4aXRfZmFpbF9tc2coXFxcIk5vIFRIUCBpcyBhbGxvY2F0ZWRcXFxcblxcXCIpO1xcbiBcXG4gXFx0cnNzX2Fub25fYmVmb3JlID0gcnNzX2Fub24oKTtcXG5AQCAtMzExLDcgKzE4OCw3IEBAIHN0YXRpYyB2b2lkIHZlcmlmeV9yc3NfYW5vbl9zcGxpdF9odWdlX3BhZ2VfYWxsX3plcm9lcyhjaGFyICpvbmVfcGFnZSwgaW50IG5yX2hwXFxuIFxcdFxcdGlmIChvbmVfcGFnZVtpXSAhPSAoY2hhcikwKVxcbiBcXHRcXHRcXHRrc2Z0X2V4aXRfZmFpbF9tc2coXFxcIiVsZCBieXRlIGNvcnJ1cHRlZFxcXFxuXFxcIiwgaSk7XFxuIFxcbi1cXHRpZiAoIWNoZWNrX2h1Z2VfYW5vbihvbmVfcGFnZSwgMCwgcG1kX3BhZ2VzaXplKSlcXG4rXFx0aWYgKCFjaGVja19odWdlX2Fub24ob25lX3BhZ2UsIG5yX2hwYWdlcyAqIHBtZF9wYWdlc2l6ZSwgMCwgcG1kX3BhZ2VzaXplKSlcXG4gXFx0XFx0a3NmdF9leGl0X2ZhaWxfbXNnKFxcXCJTdGlsbCBBbm9uSHVnZVBhZ2VzIG5vdCBzcGxpdFxcXFxuXFxcIik7XFxuIFxcbiBcXHRyc3NfYW5vbl9hZnRlciA9IHJzc19hbm9uKCk7XFxuQEAgLTM0Nyw3ICsyMjQsNyBAQCBzdGF0aWMgdm9pZCBzcGxpdF9wbWRfdGhwX3RvX29yZGVyKGludCBvcmRlcilcXG4gXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIGxlbjsgaSsrKVxcbiBcXHRcXHRvbmVfcGFnZVtpXSA9IChjaGFyKWk7XFxuIFxcbi1cXHRpZiAoIWNoZWNrX2h1Z2VfYW5vbihvbmVfcGFnZSwgNCwgcG1kX3BhZ2VzaXplKSlcXG4rXFx0aWYgKCFjaGVja19odWdlX2Fub24ob25lX3BhZ2UsIDQgKiBwbWRfcGFnZXNpemUsIDQsIHBtZF9wYWdlc2l6ZSkpXFxuIFxcdFxcdGtzZnRfZXhpdF9mYWlsX21zZyhcXFwiTm8gVEhQIGlzIGFsbG9jYXRlZFxcXFxuXFxcIik7XFxuIFxcbiBcXHQvKiBzcGxpdCBhbGwgVEhQcyAqL1xcbkBAIC0zNjYsNyArMjQzLDcgQEAgc3RhdGljIHZvaWQgc3BsaXRfcG1kX3RocF90b19vcmRlcihpbnQgb3JkZXIpXFxuIFxcdFxcdFxcdFxcdFxcdCAgIChwbWRfb3JkZXIgKyAxKSkpXFxuIFxcdFxcdGtzZnRfZXhpdF9mYWlsX21zZyhcXFwiVW5leHBlY3RlZCBUSFAgc3BsaXRcXFxcblxcXCIpO1xcbiBcXG4tXFx0aWYgKCFjaGVja19odWdlX2Fub24ob25lX3BhZ2UsIDAsIHBtZF9wYWdlc2l6ZSkpXFxuK1xcdGlmICghY2hlY2tfaHVnZV9hbm9uKG9uZV9wYWdlLCA0ICogcG1kX3BhZ2VzaXplLCAwLCBwbWRfcGFnZXNpemUpKVxcbiBcXHRcXHRrc2Z0X2V4aXRfZmFpbF9tc2coXFxcIlN0aWxsIEFub25IdWdlUGFnZXMgbm90IHNwbGl0XFxcXG5cXFwiKTtcXG4gXFxuIFxcdGtzZnRfdGVzdF9yZXN1bHRfcGFzcyhcXFwiU3BsaXQgaHVnZSBwYWdlcyB0byBvcmRlciAlZCBzdWNjZXNzZnVsXFxcXG5cXFwiLCBvcmRlcik7XFxuQEAgLTM5Myw3ICsyNzAsNyBAQCBzdGF0aWMgdm9pZCBzcGxpdF9wdGVfbWFwcGVkX3RocCh2b2lkKVxcbiBcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgdGhwX2FyZWFfc2l6ZTsgaSsrKVxcbiBcXHRcXHR0aHBfYXJlYVtpXSA9IChjaGFyKWk7XFxuIFxcbi1cXHRpZiAoIWNoZWNrX2h1Z2VfYW5vbih0aHBfYXJlYSwgbnJfdGhwcywgcG1kX3BhZ2VzaXplKSkge1xcbitcXHRpZiAoIWNoZWNrX2h1Z2VfYW5vbih0aHBfYXJlYSwgbnJfdGhwcyAqIHBtZF9wYWdlc2l6ZSwgbnJfdGhwcywgcG1kX3BhZ2VzaXplKSkge1xcbiBcXHRcXHRrc2Z0X3Rlc3RfcmVzdWx0X3NraXAoXFxcIk5vdCBhbGwgVEhQcyBhbGxvY2F0ZWRcXFxcblxcXCIpO1xcbiBcXHRcXHRnb3RvIG91dDtcXG4gXFx0fVxcbkBAIC02NTcsNyArNTM0LDcgQEAgc3RhdGljIGludCBjcmVhdGVfcGFnZWNhY2hlX3RocF9hbmRfZmQoY29uc3QgY2hhciAqdGVzdGZpbGUsIHNpemVfdCBmZF9zaXplLFxcbiBcXG4gXFx0Zm9yY2VfcmVhZF9wYWdlcygqYWRkciwgZmRfc2l6ZSAvIHBtZF9wYWdlc2l6ZSwgcG1kX3BhZ2VzaXplKTtcXG4gXFxuLVxcdGlmICghY2hlY2tfaHVnZV9maWxlKCphZGRyLCBmZF9zaXplIC8gcG1kX3BhZ2VzaXplLCBwbWRfcGFnZXNpemUpKSB7XFxuK1xcdGlmICghY2hlY2tfaHVnZV9maWxlKCphZGRyLCBmZF9zaXplLCBmZF9zaXplIC8gcG1kX3BhZ2VzaXplLCBwbWRfcGFnZXNpemUpKSB7XFxuIFxcdFxcdGtzZnRfcHJpbnRfbXNnKFxcXCJObyBsYXJnZSBwYWdlY2FjaGUgZm9saW8gZ2VuZXJhdGVkLCBwbGVhc2UgcHJvdmlkZSBhIGZpbGVzeXN0ZW0gc3VwcG9ydGluZyBsYXJnZSBmb2xpb1xcXFxuXFxcIik7XFxuIFxcdFxcdG11bm1hcCgqYWRkciwgZmRfc2l6ZSk7XFxuIFxcdFxcdGNsb3NlKCpmZCk7XFxuQEAgLTczNSw3ICs2MTIsNyBAQCBzdGF0aWMgdm9pZCBzcGxpdF90aHBfaW5fcGFnZWNhY2hlX3RvX29yZGVyX2F0KHNpemVfdCBmZF9zaXplLFxcbiBcXHRcXHRnb3RvIG91dDtcXG4gXFx0fVxcbiBcXG4tXFx0aWYgKCFjaGVja19odWdlX2ZpbGUoYWRkciwgMCwgcG1kX3BhZ2VzaXplKSkge1xcbitcXHRpZiAoIWNoZWNrX2h1Z2VfZmlsZShhZGRyLCBmZF9zaXplLCAwLCBwbWRfcGFnZXNpemUpKSB7XFxuIFxcdFxcdGtzZnRfcHJpbnRfbXNnKFxcXCJTdGlsbCBGaWxlUG1kTWFwcGVkIG5vdCBzcGxpdFxcXFxuXFxcIik7XFxuIFxcdFxcdGVyciA9IEVYSVRfRkFJTFVSRTtcXG4gXFx0XFx0Z290byBvdXQ7XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3VmZmQtY29tbW9uLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS91ZmZkLWNvbW1vbi5jXFxuaW5kZXggZjQ4ZjVkNDU5NGFiMC4uMWZiOTY3ZWY0OTg1NCAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS91ZmZkLWNvbW1vbi5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdWZmZC1jb21tb24uY1xcbkBAIC0xOTQsNyArMTk0LDkgQEAgc3RhdGljIHZvaWQgc2htZW1fYWxpYXNfbWFwcGluZyh1ZmZkX2dsb2JhbF90ZXN0X29wdHNfdCAqZ29wdHMsIF9fdTY0ICpzdGFydCxcXG4gXFxuIHN0YXRpYyB2b2lkIHNobWVtX2NoZWNrX3BtZF9tYXBwaW5nKHVmZmRfZ2xvYmFsX3Rlc3Rfb3B0c190ICpnb3B0cywgdm9pZCAqcCwgaW50IGV4cGVjdF9ucl9ocGFnZXMpXFxuIHtcXG4tXFx0aWYgKCFjaGVja19odWdlX3NobWVtKGdvcHRzLVxcdTAwM2VhcmVhX2RzdF9hbGlhcywgZXhwZWN0X25yX2hwYWdlcyxcXG4rXFx0c2l6ZV90IGxlbiA9IGV4cGVjdF9ucl9ocGFnZXMgKiByZWFkX3BtZF9wYWdlc2l6ZSgpO1xcbitcXG4rXFx0aWYgKCFjaGVja19odWdlX3NobWVtKGdvcHRzLVxcdTAwM2VhcmVhX2RzdF9hbGlhcywgbGVuLCBleHBlY3RfbnJfaHBhZ2VzLFxcbiBcXHRcXHRcXHQgICAgICByZWFkX3BtZF9wYWdlc2l6ZSgpKSlcXG4gXFx0XFx0ZXJyKFxcXCJEaWQgbm90IGZpbmQgZXhwZWN0ZWQgJWQgbnVtYmVyIG9mIGh1Z2VwYWdlc1xcXCIsXFxuIFxcdFxcdCAgICBleHBlY3RfbnJfaHBhZ2VzKTtcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdm1fdXRpbC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdm1fdXRpbC5jXFxuaW5kZXggZWYxZWExMTk4MWE3NC4uMTNiNWNmZjdkZmUzMSAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS92bV91dGlsLmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS92bV91dGlsLmNcXG5AQCAtMTUsNiArMTUsOSBAQFxcbiAjZGVmaW5lIFNNQVBfRklMRV9QQVRIIFxcXCIvcHJvYy9zZWxmL3NtYXBzXFxcIlxcbiAjZGVmaW5lIFNUQVRVU19GSUxFX1BBVEggXFxcIi9wcm9jL3NlbGYvc3RhdHVzXFxcIlxcbiAjZGVmaW5lIE1BWF9MSU5FX0xFTkdUSCA1MDBcXG4rI2RlZmluZSBQQUdFTUFQX1BBVEggXFxcIi9wcm9jL3NlbGYvcGFnZW1hcFxcXCJcXG4rI2RlZmluZSBLUEFHRUZMQUdTX1BBVEggXFxcIi9wcm9jL2twYWdlZmxhZ3NcXFwiXFxuKyNkZWZpbmUgTUFYX05SX09SREVSUyAyMFxcbiBcXG4gdW5zaWduZWQgaW50IF9fcGFnZV9zaXplO1xcbiB1bnNpZ25lZCBpbnQgX19wYWdlX3NoaWZ0O1xcbkBAIC0xOTQsNiArMTk3LDEyNSBAQCB1bnNpZ25lZCBsb25nIHJzc19hbm9uKHZvaWQpXFxuIFxcdHJldHVybiByc3NfYW5vbjtcXG4gfVxcbiBcXG4rc3RhdGljIGludCB2YWRkcl9wYWdlZmxhZ3NfZ2V0KGNoYXIgKnZhZGRyLCBpbnQgcGFnZW1hcF9mZCwgaW50IGtwYWdlZmxhZ3NfZmQsXFxuK1xcdFxcdHVpbnQ2NF90ICpmbGFncylcXG4re1xcbitcXHR1bnNpZ25lZCBsb25nIHBmbjtcXG4rXFxuK1xcdHBmbiA9IHBhZ2VtYXBfZ2V0X3BmbihwYWdlbWFwX2ZkLCB2YWRkcik7XFxuK1xcbitcXHQvKiBub24tcHJlc2VudCBQRk4gKi9cXG4rXFx0aWYgKHBmbiA9PSAtMVVMKVxcbitcXHRcXHRyZXR1cm4gMTtcXG4rXFxuK1xcdGlmIChwYWdlZmxhZ3NfZ2V0KHBmbiwga3BhZ2VmbGFnc19mZCwgZmxhZ3MpKVxcbitcXHRcXHRyZXR1cm4gLTE7XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rLypcXG4rICogZ2F0aGVyX2ZvbGlvX29yZGVycyAtIHNjYW4gdGhyb3VnaCBbdmFkZHJfc3RhcnQsIGxlbikgYW5kIHJlY29yZFxcbisgKiBmb2xpbyBvcmRlcnNcXG4rICpcXG4rICogQHZhZGRyX3N0YXJ0OiBzdGFydCB2YWRkclxcbisgKiBAbGVuOiByYW5nZSBsZW5ndGhcXG4rICogQHBhZ2VtYXBfZmQ6IGZpbGUgZGVzY3JpcHRvciB0byAvcHJvYy9cXHUwMDNjcGlkXFx1MDAzZS9wYWdlbWFwXFxuKyAqIEBrcGFnZWZsYWdzX2ZkOiBmaWxlIGRlc2NyaXB0b3IgdG8gL3Byb2Mva3BhZ2VmbGFnc1xcbisgKiBAb3JkZXJzOiBvdXRwdXQgZm9saW8gb3JkZXIgYXJyYXlcXG4rICogQG5yX29yZGVyczogZm9saW8gb3JkZXIgYXJyYXkgc2l6ZVxcbisgKlxcbisgKiBnYXRoZXJfZm9saW9fb3JkZXJzKCkgc2NhbiB0aHJvdWdoIFt2YWRkcl9zdGFydCwgbGVuKSBhbmQgY2hlY2tcXG4rICogYWxsIGZvbGlvcyB3aXRoaW4gdGhlIHJhbmdlIGFuZCByZWNvcmQgdGhlaXIgb3JkZXJzLiBBbGwgb3JkZXItMCBwYWdlcyB3aWxsXFxuKyAqIGJlIHJlY29yZGVkLiBOb24tcHJlc2VudCB2YWRkciBpcyBza2lwcGVkLlxcbisgKlxcbisgKiBSZXR1cm46IDAgLSBubyBlcnJvciwgLTEgLSB1bmhhbmRsZWQgY2FzZXNcXG4rICovXFxuK2ludCBnYXRoZXJfZm9saW9fb3JkZXJzKGNoYXIgKnZhZGRyX3N0YXJ0LCBzaXplX3QgbGVuLFxcbitcXHRcXHRpbnQgcGFnZW1hcF9mZCwgaW50IGtwYWdlZmxhZ3NfZmQsIGludCBvcmRlcnNbXSwgaW50IG5yX29yZGVycylcXG4re1xcbitcXHR1aW50NjRfdCBwYWdlX2ZsYWdzID0gMDtcXG4rXFx0aW50IGN1cl9vcmRlciA9IC0xO1xcbitcXHRjaGFyICp2YWRkcjtcXG4rXFxuK1xcdGlmIChwYWdlbWFwX2ZkID09IC0xIHx8IGtwYWdlZmxhZ3NfZmQgPT0gLTEpXFxuK1xcdFxcdHJldHVybiAtMTtcXG4rXFx0aWYgKCFvcmRlcnMpXFxuK1xcdFxcdHJldHVybiAtMTtcXG4rXFx0aWYgKG5yX29yZGVycyBcXHUwMDNjPSAwKVxcbitcXHRcXHRyZXR1cm4gLTE7XFxuK1xcbitcXHRmb3IgKHZhZGRyID0gdmFkZHJfc3RhcnQ7IHZhZGRyIFxcdTAwM2MgdmFkZHJfc3RhcnQgKyBsZW47KSB7XFxuK1xcdFxcdGNoYXIgKm5leHRfZm9saW9fdmFkZHI7XFxuK1xcdFxcdGludCBzdGF0dXM7XFxuK1xcbitcXHRcXHRzdGF0dXMgPSB2YWRkcl9wYWdlZmxhZ3NfZ2V0KHZhZGRyLCBwYWdlbWFwX2ZkLCBrcGFnZWZsYWdzX2ZkLFxcbitcXHRcXHRcXHRcXHRcXHUwMDI2cGFnZV9mbGFncyk7XFxuK1xcdFxcdGlmIChzdGF0dXMgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRyZXR1cm4gLTE7XFxuK1xcbitcXHRcXHQvKiBza2lwIG5vbiBwcmVzZW50IHZhZGRyICovXFxuK1xcdFxcdGlmIChzdGF0dXMgPT0gMSkge1xcbitcXHRcXHRcXHR2YWRkciArPSBwc2l6ZSgpO1xcbitcXHRcXHRcXHRjb250aW51ZTtcXG4rXFx0XFx0fVxcbitcXG4rXFx0XFx0LyogYWxsIG9yZGVyLTAgcGFnZXMgd2l0aCBwb3NzaWJsZSBmYWxzZSBwb3N0aXZlIChub24gZm9saW8pICovXFxuK1xcdFxcdGlmICghKHBhZ2VfZmxhZ3MgXFx1MDAyNiAoS1BGX0NPTVBPVU5EX0hFQUQgfCBLUEZfQ09NUE9VTkRfVEFJTCkpKSB7XFxuK1xcdFxcdFxcdG9yZGVyc1swXSsrO1xcbitcXHRcXHRcXHR2YWRkciArPSBwc2l6ZSgpO1xcbitcXHRcXHRcXHRjb250aW51ZTtcXG4rXFx0XFx0fVxcbitcXG4rXFx0XFx0Lyogc2tpcCBub24gdGhwIGNvbXBvdW5kIHBhZ2VzICovXFxuK1xcdFxcdGlmICghKHBhZ2VfZmxhZ3MgXFx1MDAyNiBLUEZfVEhQKSkge1xcbitcXHRcXHRcXHR2YWRkciArPSBwc2l6ZSgpO1xcbitcXHRcXHRcXHRjb250aW51ZTtcXG4rXFx0XFx0fVxcbitcXG4rXFx0XFx0LyogdnBuIHBvaW50cyB0byBwYXJ0IG9mIGEgVEhQIGF0IHRoaXMgcG9pbnQgKi9cXG4rXFx0XFx0aWYgKHBhZ2VfZmxhZ3MgXFx1MDAyNiBLUEZfQ09NUE9VTkRfSEVBRClcXG4rXFx0XFx0XFx0Y3VyX29yZGVyID0gMTtcXG4rXFx0XFx0ZWxzZSB7XFxuK1xcdFxcdFxcdHZhZGRyICs9IHBzaXplKCk7XFxuK1xcdFxcdFxcdGNvbnRpbnVlO1xcbitcXHRcXHR9XFxuK1xcbitcXHRcXHRuZXh0X2ZvbGlvX3ZhZGRyID0gdmFkZHIgKyAoMVVMIFxcdTAwM2NcXHUwMDNjIChjdXJfb3JkZXIgKyBwc2hpZnQoKSkpO1xcbitcXG4rXFx0XFx0aWYgKG5leHRfZm9saW9fdmFkZHIgXFx1MDAzZT0gdmFkZHJfc3RhcnQgKyBsZW4pXFxuK1xcdFxcdFxcdGJyZWFrO1xcbitcXG4rXFx0XFx0d2hpbGUgKChzdGF0dXMgPSB2YWRkcl9wYWdlZmxhZ3NfZ2V0KG5leHRfZm9saW9fdmFkZHIsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgICAgcGFnZW1hcF9mZCwga3BhZ2VmbGFnc19mZCxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICAgICBcXHUwMDI2cGFnZV9mbGFncykpIFxcdTAwM2U9IDApIHtcXG4rXFx0XFx0XFx0LypcXG4rXFx0XFx0XFx0ICogbm9uIHByZXNlbnQgdmFkZHIsIG5leHQgY29tcG91bmQgaGVhZCBwYWdlLCBvclxcbitcXHRcXHRcXHQgKiBvcmRlci0wIHBhZ2VcXG4rXFx0XFx0XFx0ICovXFxuK1xcdFxcdFxcdGlmIChzdGF0dXMgPT0gMSB8fFxcbitcXHRcXHRcXHQgICAgKHBhZ2VfZmxhZ3MgXFx1MDAyNiBLUEZfQ09NUE9VTkRfSEVBRCkgfHxcXG4rXFx0XFx0XFx0ICAgICEocGFnZV9mbGFncyBcXHUwMDI2IChLUEZfQ09NUE9VTkRfSEVBRCB8IEtQRl9DT01QT1VORF9UQUlMKSkpIHtcXG4rXFx0XFx0XFx0XFx0aWYgKGN1cl9vcmRlciBcXHUwMDNjIG5yX29yZGVycykge1xcbitcXHRcXHRcXHRcXHRcXHRvcmRlcnNbY3VyX29yZGVyXSsrO1xcbitcXHRcXHRcXHRcXHRcXHRjdXJfb3JkZXIgPSAtMTtcXG4rXFx0XFx0XFx0XFx0XFx0dmFkZHIgPSBuZXh0X2ZvbGlvX3ZhZGRyO1xcbitcXHRcXHRcXHRcXHR9XFxuK1xcdFxcdFxcdFxcdGJyZWFrO1xcbitcXHRcXHRcXHR9XFxuK1xcbitcXHRcXHRcXHRjdXJfb3JkZXIrKztcXG4rXFx0XFx0XFx0bmV4dF9mb2xpb192YWRkciA9IHZhZGRyICsgKDFVTCBcXHUwMDNjXFx1MDAzYyAoY3VyX29yZGVyICsgcHNoaWZ0KCkpKTtcXG4rXFx0XFx0fVxcbitcXG4rXFx0XFx0aWYgKHN0YXR1cyBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdHJldHVybiBzdGF0dXM7XFxuK1xcdH1cXG4rXFx0aWYgKGN1cl9vcmRlciBcXHUwMDNlIDAgXFx1MDAyNlxcdTAwMjYgY3VyX29yZGVyIFxcdTAwM2MgbnJfb3JkZXJzKVxcbitcXHRcXHRvcmRlcnNbY3VyX29yZGVyXSsrO1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4gY2hhciAqX19nZXRfc21hcF9lbnRyeSh2b2lkICphZGRyLCBjb25zdCBjaGFyICpwYXR0ZXJuLCBjaGFyICpidWYsIHNpemVfdCBsZW4pXFxuIHtcXG4gXFx0aW50IHJldDtcXG5AQCAtMjI5LDcgKzM1MSw3IEBAIGNoYXIgKl9fZ2V0X3NtYXBfZW50cnkodm9pZCAqYWRkciwgY29uc3QgY2hhciAqcGF0dGVybiwgY2hhciAqYnVmLCBzaXplX3QgbGVuKVxcbiBcXHRyZXR1cm4gZW50cnk7XFxuIH1cXG4gXFxuLWJvb2wgX19jaGVja19odWdlKHZvaWQgKmFkZHIsIGNoYXIgKnBhdHRlcm4sIGludCBucl9ocGFnZXMsXFxuK3N0YXRpYyBib29sIF9fY2hlY2tfcG1kX2h1Z2Uodm9pZCAqYWRkciwgY2hhciAqcGF0dGVybiwgaW50IG5yX2hwYWdlcyxcXG4gXFx0XFx0ICB1aW50NjRfdCBocGFnZV9zaXplKVxcbiB7XFxuIFxcdGNoYXIgYnVmZmVyW01BWF9MSU5FX0xFTkdUSF07XFxuQEAgLTI0NywxOSArMzY5LDg0IEBAIGJvb2wgX19jaGVja19odWdlKHZvaWQgKmFkZHIsIGNoYXIgKnBhdHRlcm4sIGludCBucl9ocGFnZXMsXFxuIFxcdHJldHVybiB0aHAgPT0gKG5yX2hwYWdlcyAqIChocGFnZV9zaXplIFxcdTAwM2VcXHUwMDNlIDEwKSk7XFxuIH1cXG4gXFxuLWJvb2wgY2hlY2tfaHVnZV9hbm9uKHZvaWQgKmFkZHIsIGludCBucl9ocGFnZXMsIHVpbnQ2NF90IGhwYWdlX3NpemUpXFxuK3N0YXRpYyBib29sIGNoZWNrX2xhcmdlX2ZvbGlvcyh2b2lkICphZGRyLCBzaXplX3QgbGVuLCBpbnQgbnJfaHBhZ2VzLFxcbitcXHRcXHR1aW50NjRfdCBocGFnZV9zaXplKVxcbit7XFxuK1xcdGludCBvcmRlciA9IDAsIHBhZ2VzaXplID0gZ2V0cGFnZXNpemUoKTtcXG4rXFx0dW5zaWduZWQgaW50IG5yX3BhZ2VzID0gaHBhZ2Vfc2l6ZSAvIHBhZ2VzaXplO1xcbitcXHRpbnQgb3JkZXJzW01BWF9OUl9PUkRFUlNdLCBzdGF0dXM7XFxuK1xcdGludCBwYWdlbWFwX2ZkLCBrcGFnZWZsYWdzX2ZkO1xcbitcXHRib29sIHJldCA9IGZhbHNlO1xcbitcXG4rXFx0aWYgKCFucl9wYWdlcylcXG4rXFx0XFx0a3NmdF9leGl0X2ZhaWxfbXNnKFxcXCJpbnZhbGlkIGh1Z2VwYWdlIHNpemVcXFxcblxcXCIpO1xcbitcXG4rXFx0b3JkZXIgPSAzMSAtIF9fYnVpbHRpbl9jbHoobnJfcGFnZXMpO1xcbitcXHRpZiAoIW9yZGVyIHx8IG9yZGVyIFxcdTAwM2U9IE1BWF9OUl9PUkRFUlMpXFxuK1xcdFxcdGtzZnRfZXhpdF9mYWlsX21zZyhcXFwiaW52YWxpZCBvcmRlclxcXFxuXFxcIik7XFxuK1xcbitcXHRtZW1zZXQob3JkZXJzLCAwLCBzaXplb2YoaW50KSAqIE1BWF9OUl9PUkRFUlMpO1xcbitcXHRwYWdlbWFwX2ZkID0gb3BlbihQQUdFTUFQX1BBVEgsIE9fUkRPTkxZKTtcXG4rXFx0aWYgKHBhZ2VtYXBfZmQgPT0gLTEpXFxuK1xcdFxcdGtzZnRfZXhpdF9mYWlsX21zZyhcXFwicmVhZCBwYWdlbWFwIGZhaWxcXFxcblxcXCIpO1xcbitcXG4rXFx0a3BhZ2VmbGFnc19mZCA9IG9wZW4oS1BBR0VGTEFHU19QQVRILCBPX1JET05MWSk7XFxuK1xcdGlmIChrcGFnZWZsYWdzX2ZkID09IC0xKSB7XFxuK1xcdFxcdGNsb3NlKHBhZ2VtYXBfZmQpO1xcbitcXHRcXHRrc2Z0X2V4aXRfZmFpbF9tc2coXFxcInJlYWQga3BhZ2VmbGFncyBmYWlsXFxcXG5cXFwiKTtcXG4rXFx0fVxcbitcXG4rXFx0c3RhdHVzID0gZ2F0aGVyX2ZvbGlvX29yZGVycyhhZGRyLCBsZW4sIHBhZ2VtYXBfZmQsXFxuK1xcdFxcdFxcdGtwYWdlZmxhZ3NfZmQsIG9yZGVycywgTUFYX05SX09SREVSUyk7XFxuK1xcdGlmIChzdGF0dXMpXFxuK1xcdFxcdGdvdG8gb3V0O1xcbitcXG4rXFx0aWYgKG9yZGVyc1tvcmRlcl0gPT0gbnJfaHBhZ2VzKVxcbitcXHRcXHRyZXQgPSB0cnVlO1xcbitcXG4rb3V0OlxcbitcXHRjbG9zZShwYWdlbWFwX2ZkKTtcXG4rXFx0Y2xvc2Uoa3BhZ2VmbGFnc19mZCk7XFxuK1xcdHJldHVybiByZXQ7XFxuK31cXG4rXFxuK2Jvb2wgY2hlY2tfaHVnZV9hbm9uKHZvaWQgKmFkZHIsIHNpemVfdCBsZW4sIGludCBucl9ocGFnZXMsIHVpbnQ2NF90IGhwYWdlX3NpemUpXFxuIHtcXG4tXFx0cmV0dXJuIF9fY2hlY2tfaHVnZShhZGRyLCBcXFwiQW5vbkh1Z2VQYWdlczogXFxcIiwgbnJfaHBhZ2VzLCBocGFnZV9zaXplKTtcXG4rXFx0dWludDY0X3QgcG1kX3BhZ2VzaXplID0gcmVhZF9wbWRfcGFnZXNpemUoKTtcXG4rXFxuK1xcdGlmICghcG1kX3BhZ2VzaXplKVxcbitcXHRcXHRrc2Z0X2V4aXRfZmFpbF9tc2coXFxcInJlYWRpbmcgUE1EIHBhZ2VzaXplIGZhaWxlZFxcXFxuXFxcIik7XFxuK1xcbitcXHRpZiAoaHBhZ2Vfc2l6ZSA9PSBwbWRfcGFnZXNpemUpXFxuK1xcdFxcdHJldHVybiBfX2NoZWNrX3BtZF9odWdlKGFkZHIsIFxcXCJBbm9uSHVnZVBhZ2VzOiBcXFwiLCBucl9ocGFnZXMsIGhwYWdlX3NpemUpO1xcbitcXG4rXFx0cmV0dXJuIGNoZWNrX2xhcmdlX2ZvbGlvcyhhZGRyLCBsZW4sIG5yX2hwYWdlcywgaHBhZ2Vfc2l6ZSk7XFxuIH1cXG4gXFxuLWJvb2wgY2hlY2tfaHVnZV9maWxlKHZvaWQgKmFkZHIsIGludCBucl9ocGFnZXMsIHVpbnQ2NF90IGhwYWdlX3NpemUpXFxuK2Jvb2wgY2hlY2tfaHVnZV9maWxlKHZvaWQgKmFkZHIsIHNpemVfdCBsZW4sIGludCBucl9ocGFnZXMsIHVpbnQ2NF90IGhwYWdlX3NpemUpXFxuIHtcXG4tXFx0cmV0dXJuIF9fY2hlY2tfaHVnZShhZGRyLCBcXFwiRmlsZVBtZE1hcHBlZDpcXFwiLCBucl9ocGFnZXMsIGhwYWdlX3NpemUpO1xcbitcXHR1aW50NjRfdCBwbWRfcGFnZXNpemUgPSByZWFkX3BtZF9wYWdlc2l6ZSgpO1xcbitcXG4rXFx0aWYgKCFwbWRfcGFnZXNpemUpXFxuK1xcdFxcdGtzZnRfZXhpdF9mYWlsX21zZyhcXFwicmVhZGluZyBQTUQgcGFnZXNpemUgZmFpbGVkXFxcXG5cXFwiKTtcXG4rXFxuK1xcdGlmIChocGFnZV9zaXplID09IHBtZF9wYWdlc2l6ZSlcXG4rXFx0XFx0cmV0dXJuIF9fY2hlY2tfcG1kX2h1Z2UoYWRkciwgXFxcIkZpbGVQbWRNYXBwZWQ6XFxcIiwgbnJfaHBhZ2VzLCBocGFnZV9zaXplKTtcXG4rXFxuK1xcdHJldHVybiBjaGVja19sYXJnZV9mb2xpb3MoYWRkciwgbGVuLCBucl9ocGFnZXMsIGhwYWdlX3NpemUpO1xcbiB9XFxuIFxcbi1ib29sIGNoZWNrX2h1Z2Vfc2htZW0odm9pZCAqYWRkciwgaW50IG5yX2hwYWdlcywgdWludDY0X3QgaHBhZ2Vfc2l6ZSlcXG4rYm9vbCBjaGVja19odWdlX3NobWVtKHZvaWQgKmFkZHIsIHNpemVfdCBsZW4sIGludCBucl9ocGFnZXMsIHVpbnQ2NF90IGhwYWdlX3NpemUpXFxuIHtcXG4tXFx0cmV0dXJuIF9fY2hlY2tfaHVnZShhZGRyLCBcXFwiU2htZW1QbWRNYXBwZWQ6XFxcIiwgbnJfaHBhZ2VzLCBocGFnZV9zaXplKTtcXG4rXFx0dWludDY0X3QgcG1kX3BhZ2VzaXplID0gcmVhZF9wbWRfcGFnZXNpemUoKTtcXG4rXFxuK1xcdGlmICghcG1kX3BhZ2VzaXplKVxcbitcXHRcXHRrc2Z0X2V4aXRfZmFpbF9tc2coXFxcInJlYWRpbmcgUE1EIHBhZ2VzaXplIGZhaWxlZFxcXFxuXFxcIik7XFxuK1xcbitcXHRpZiAoaHBhZ2Vfc2l6ZSA9PSBwbWRfcGFnZXNpemUpXFxuK1xcdFxcdHJldHVybiBfX2NoZWNrX3BtZF9odWdlKGFkZHIsIFxcXCJTaG1lbVBtZE1hcHBlZDpcXFwiLCBucl9ocGFnZXMsIGhwYWdlX3NpemUpO1xcbitcXG4rXFx0cmV0dXJuIGNoZWNrX2xhcmdlX2ZvbGlvcyhhZGRyLCBsZW4sIG5yX2hwYWdlcywgaHBhZ2Vfc2l6ZSk7XFxuIH1cXG4gXFxuIGludDY0X3QgYWxsb2NhdGVfdHJhbnNodWdlKHZvaWQgKnB0ciwgaW50IHBhZ2VtYXBfZmQpXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ZtX3V0aWwuaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ZtX3V0aWwuaFxcbmluZGV4IDc3OTkxNTRiNjdlZWQuLjlhNDlhZjg4NzAyZTQgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdm1fdXRpbC5oXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdm1fdXRpbC5oXFxuQEAgLTkwLDExICs5MCwxMyBAQCB2b2lkIGNsZWFyX3NvZnRkaXJ0eSh2b2lkKTtcXG4gYm9vbCBjaGVja19mb3JfcGF0dGVybihGSUxFICpmcCwgY29uc3QgY2hhciAqcGF0dGVybiwgY2hhciAqYnVmLCBzaXplX3QgbGVuKTtcXG4gdWludDY0X3QgcmVhZF9wbWRfcGFnZXNpemUodm9pZCk7XFxuIHVuc2lnbmVkIGxvbmcgcnNzX2Fub24odm9pZCk7XFxuLWJvb2wgY2hlY2tfaHVnZV9hbm9uKHZvaWQgKmFkZHIsIGludCBucl9ocGFnZXMsIHVpbnQ2NF90IGhwYWdlX3NpemUpO1xcbi1ib29sIGNoZWNrX2h1Z2VfZmlsZSh2b2lkICphZGRyLCBpbnQgbnJfaHBhZ2VzLCB1aW50NjRfdCBocGFnZV9zaXplKTtcXG4tYm9vbCBjaGVja19odWdlX3NobWVtKHZvaWQgKmFkZHIsIGludCBucl9ocGFnZXMsIHVpbnQ2NF90IGhwYWdlX3NpemUpO1xcbitib29sIGNoZWNrX2h1Z2VfYW5vbih2b2lkICphZGRyLCBzaXplX3QgbGVuLCBpbnQgbnJfaHBhZ2VzLCB1aW50NjRfdCBocGFnZV9zaXplKTtcXG4rYm9vbCBjaGVja19odWdlX2ZpbGUodm9pZCAqYWRkciwgc2l6ZV90IGxlbiwgaW50IG5yX2hwYWdlcywgdWludDY0X3QgaHBhZ2Vfc2l6ZSk7XFxuK2Jvb2wgY2hlY2tfaHVnZV9zaG1lbSh2b2lkICphZGRyLCBzaXplX3QgbGVuLCBpbnQgbnJfaHBhZ2VzLCB1aW50NjRfdCBocGFnZV9zaXplKTtcXG4gaW50NjRfdCBhbGxvY2F0ZV90cmFuc2h1Z2Uodm9pZCAqcHRyLCBpbnQgcGFnZW1hcF9mZCk7XFxuIGludCBwYWdlZmxhZ3NfZ2V0KHVuc2lnbmVkIGxvbmcgcGZuLCBpbnQga3BhZ2VmbGFnc19mZCwgdWludDY0X3QgKmZsYWdzKTtcXG4raW50IGdhdGhlcl9mb2xpb19vcmRlcnMoY2hhciAqdmFkZHJfc3RhcnQsIHNpemVfdCBsZW4sXFxuK1xcdFxcdGludCBwYWdlbWFwX2ZkLCBpbnQga3BhZ2VmbGFnc19mZCwgaW50IG9yZGVyc1tdLCBpbnQgbnJfb3JkZXJzKTtcXG4gXFxuIGludCB1ZmZkX3JlZ2lzdGVyKGludCB1ZmZkLCB2b2lkICphZGRyLCB1aW50NjRfdCBsZW4sXFxuIFxcdFxcdCAgYm9vbCBtaXNzLCBib29sIHdwLCBib29sIG1pbm9yKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMDQ6MDc6MTEuNTI3MDgxODUyWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6NzQ4NzE5MzcwOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggb25seSBtb2RpZmllcyB1c2VyLXNwYWNlIHNlbGZ0ZXN0cyBpbiB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS8gYW5kIGRvZXMgbm90IG1ha2UgYW55IGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIGNvZGUgaXRzZWxmLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNTRiYzc4NTNkNGY1ZjVlNWVkOGRmYmI5ZmZmZmMzOTVjMzNkNGRhNFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgQXVnIDYgMDQ6MDc6MTAgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9mb2xpb19zcGxpdF9yYWNlX3Rlc3QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2ZvbGlvX3NwbGl0X3JhY2VfdGVzdC5jXG5pbmRleCA2MzI5ZTM3ZmZmNGM5Li40NWI4NGY3YjM2NGUwIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZm9saW9fc3BsaXRfcmFjZV90ZXN0LmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2ZvbGlvX3NwbGl0X3JhY2VfdGVzdC5jXG5AQCAtMTgyLDcgKzE4Miw3IEBAIHN0YXRpYyB1aW50NjRfdCBydW5faXRlcmF0aW9uKHZvaWQpXG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBUT1RBTF9QQUdFUzsgaSsrKVxuIFx0XHRmaWxsX3BhZ2UobW1hcF9iYXNlLCBpKTtcbiBcbi1cdGlmICghY2hlY2tfaHVnZV9zaG1lbShtbWFwX2Jhc2UsIE5SX1BNRF9QQUdFLCBwbWRfcGFnZXNpemUpKVxuK1x0aWYgKCFjaGVja19odWdlX3NobWVtKG1tYXBfYmFzZSwgRklMRV9TSVpFLCBOUl9QTURfUEFHRSwgcG1kX3BhZ2VzaXplKSlcbiBcdFx0a3NmdF9leGl0X2ZhaWxfbXNnKFwiTm8gc2htZW0gVEhQIGlzIGFsbG9jYXRlZFxcblwiKTtcbiBcbiBcdGlmIChwdGhyZWFkX2JhcnJpZXJfaW5pdChcdTAwMjZjdGwuYmFycmllciwgTlVMTCwgTlVNX1JFQURFUl9USFJFQURTICsgMSkgIT0gMClcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9raHVnZXBhZ2VkLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9raHVnZXBhZ2VkLmNcbmluZGV4IGIyNTRiYWY5ZTBiNzUuLjdmODdhZWVkMzAxYzQgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9raHVnZXBhZ2VkLmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2todWdlcGFnZWQuY1xuQEAgLTI2LDkgKzI2LDExIEBAXG4gXG4gI2RlZmluZSBCQVNFX0FERFIgKCh2b2lkICopKDFVTCBcdTAwM2NcdTAwM2MgMzApKVxuIHN0YXRpYyB1bnNpZ25lZCBsb25nIGhwYWdlX3BtZF9zaXplO1xuK3N0YXRpYyBpbnQgaHBhZ2VfcG1kX29yZGVyO1xuIHN0YXRpYyB1bnNpZ25lZCBsb25nIHBhZ2Vfc2l6ZTtcbiBzdGF0aWMgaW50IGhwYWdlX3BtZF9ucjtcbiBzdGF0aWMgaW50IGFub25fb3JkZXI7XG4rc3RhdGljIGludCBjb2xsYXBzZV9vcmRlcjtcbiBcbiAjZGVmaW5lIFBJRF9TTUFQUyBcIi9wcm9jL3NlbGYvc21hcHNcIlxuICNkZWZpbmUgVEVTVF9GSUxFIFwiY29sbGFwc2VfdGVzdF9maWxlXCJcbkBAIC01MSw3ICs1Myw3IEBAIHN0cnVjdCBtZW1fb3BzIHtcbiBcdHZvaWQgKigqc2V0dXBfYXJlYSkoaW50IG5yX2hwYWdlcyk7XG4gXHR2b2lkICgqY2xlYW51cF9hcmVhKSh2b2lkICpwLCB1bnNpZ25lZCBsb25nIHNpemUpO1xuIFx0dm9pZCAoKmZhdWx0KSh2b2lkICpwLCB1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCk7XG4tXHRib29sICgqY2hlY2tfaHVnZSkodm9pZCAqYWRkciwgaW50IG5yX2hwYWdlcyk7XG4rXHRib29sICgqY2hlY2tfaHVnZSkodm9pZCAqYWRkciwgc2l6ZV90IGxlbiwgaW50IG5yX2hwYWdlcywgdW5zaWduZWQgbG9uZyBocGFnZV9zaXplKTtcbiBcdGNvbnN0IGNoYXIgKm5hbWU7XG4gfTtcbiBcbkBAIC02OSw2ICs3MSw3IEBAIHN0cnVjdCBjb2xsYXBzZV9jb250ZXh0IHtcbiB9O1xuIFxuIHN0YXRpYyBzdHJ1Y3QgY29sbGFwc2VfY29udGV4dCAqa2h1Z2VwYWdlZF9jb250ZXh0O1xuK3N0YXRpYyBzdHJ1Y3QgY29sbGFwc2VfY29udGV4dCAqbXRocF9raHVnZXBhZ2VkX2NvbnRleHQ7XG4gc3RhdGljIHN0cnVjdCBjb2xsYXBzZV9jb250ZXh0ICptYWR2aXNlX2NvbnRleHQ7XG4gXG4gc3RydWN0IGZpbGVfaW5mbyB7XG5AQCAtMjk1LDcgKzI5OCw3IEBAIHN0YXRpYyB2b2lkICphbGxvY19ocGFnZShzdHJ1Y3QgbWVtX29wcyAqb3BzKVxuIFx0a3NmdF9wcmludF9tc2coXCJBbGxvY2F0ZSBodWdlIHBhZ2UuLi5cIik7XG4gXHRpZiAobWFkdmlzZV9jb2xsYXBzZV9yZXRyeShwLCBocGFnZV9wbWRfc2l6ZSkpXG4gXHRcdGtzZnRfZXhpdF9mYWlsX3BlcnJvcihcIm1hZHZpc2UoTUFEVl9DT0xMQVBTRSlcIik7XG4tXHRpZiAoIW9wcy1cdTAwM2VjaGVja19odWdlKHAsIDEpKVxuK1x0aWYgKCFvcHMtXHUwMDNlY2hlY2tfaHVnZShwLCBocGFnZV9wbWRfc2l6ZSwgMSwgaHBhZ2VfcG1kX3NpemUpKVxuIFx0XHRrc2Z0X2V4aXRfZmFpbF9wZXJyb3IoXCJtYWR2aXNlKE1BRFZfQ09MTEFQU0UpXCIpO1xuIFx0aWYgKG1hZHZpc2UocCwgaHBhZ2VfcG1kX3NpemUsIE1BRFZfSFVHRVBBR0UpKVxuIFx0XHRrc2Z0X2V4aXRfZmFpbF9wZXJyb3IoXCJtYWR2aXNlKE1BRFZfSFVHRVBBR0UpXCIpO1xuQEAgLTMyOSw5ICszMzIsMTAgQEAgc3RhdGljIHZvaWQgYW5vbl9mYXVsdCh2b2lkICpwLCB1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZClcbiBcdGZpbGxfbWVtb3J5KHAsIHN0YXJ0LCBlbmQpO1xuIH1cbiBcbi1zdGF0aWMgYm9vbCBhbm9uX2NoZWNrX2h1Z2Uodm9pZCAqYWRkciwgaW50IG5yX2hwYWdlcylcbitzdGF0aWMgYm9vbCBhbm9uX2NoZWNrX2h1Z2Uodm9pZCAqYWRkciwgc2l6ZV90IGxlbiwgaW50IG5yX2hwYWdlcyxcbitcdFx0dW5zaWduZWQgbG9uZyBocGFnZV9zaXplKVxuIHtcbi1cdHJldHVybiBjaGVja19odWdlX2Fub24oYWRkciwgbnJfaHBhZ2VzLCBocGFnZV9wbWRfc2l6ZSk7XG4rXHRyZXR1cm4gY2hlY2tfaHVnZV9hbm9uKGFkZHIsIGxlbiwgbnJfaHBhZ2VzLCBocGFnZV9zaXplKTtcbiB9XG4gXG4gc3RhdGljIHZvaWQgKmZpbGVfc2V0dXBfYXJlYV9jb21tb24oaW50IG5yX2hwYWdlcywgZW51bSBmaWxlX3NldHVwX29wcyBzZXR1cClcbkBAIC00MzEsMTMgKzQzNSwxNCBAQCBzdGF0aWMgdm9pZCBmaWxlX2ZhdWx0X3dyaXRlKHZvaWQgKnAsIHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kKVxuIFx0XHRrc2Z0X2V4aXRfZmFpbF9wZXJyb3IoXCJtYWR2aXNlKE1BRFZfUE9QVUxBVEVfV1JJVEUpXCIpO1xuIH1cbiBcbi1zdGF0aWMgYm9vbCBmaWxlX2NoZWNrX2h1Z2Uodm9pZCAqYWRkciwgaW50IG5yX2hwYWdlcylcbitzdGF0aWMgYm9vbCBmaWxlX2NoZWNrX2h1Z2Uodm9pZCAqYWRkciwgc2l6ZV90IGxlbiwgaW50IG5yX2hwYWdlcyxcbitcdFx0dW5zaWduZWQgbG9uZyBocGFnZV9zaXplKVxuIHtcbiBcdHN3aXRjaCAoZmluZm8udHlwZSkge1xuIFx0Y2FzZSBWTUFfRklMRTpcbi1cdFx0cmV0dXJuIGNoZWNrX2h1Z2VfZmlsZShhZGRyLCBucl9ocGFnZXMsIGhwYWdlX3BtZF9zaXplKTtcbitcdFx0cmV0dXJuIGNoZWNrX2h1Z2VfZmlsZShhZGRyLCBsZW4sIG5yX2hwYWdlcywgaHBhZ2Vfc2l6ZSk7XG4gXHRjYXNlIFZNQV9TSE1FTTpcbi1cdFx0cmV0dXJuIGNoZWNrX2h1Z2Vfc2htZW0oYWRkciwgbnJfaHBhZ2VzLCBocGFnZV9wbWRfc2l6ZSk7XG4rXHRcdHJldHVybiBjaGVja19odWdlX3NobWVtKGFkZHIsIGxlbiwgbnJfaHBhZ2VzLCBocGFnZV9zaXplKTtcbiBcdGRlZmF1bHQ6XG4gXHRcdGV4aXQoRVhJVF9GQUlMVVJFKTtcbiBcdFx0cmV0dXJuIGZhbHNlO1xuQEAgLTQ2Nyw5ICs0NzIsMTAgQEAgc3RhdGljIHZvaWQgc2htZW1fY2xlYW51cF9hcmVhKHZvaWQgKnAsIHVuc2lnbmVkIGxvbmcgc2l6ZSlcbiBcdGNsb3NlKGZpbmZvLmZkKTtcbiB9XG4gXG4tc3RhdGljIGJvb2wgc2htZW1fY2hlY2tfaHVnZSh2b2lkICphZGRyLCBpbnQgbnJfaHBhZ2VzKVxuK3N0YXRpYyBib29sIHNobWVtX2NoZWNrX2h1Z2Uodm9pZCAqYWRkciwgc2l6ZV90IGxlbiwgaW50IG5yX2hwYWdlcyxcbitcdFx0dW5zaWduZWQgbG9uZyBocGFnZV9zaXplKVxuIHtcbi1cdHJldHVybiBjaGVja19odWdlX3NobWVtKGFkZHIsIG5yX2hwYWdlcywgaHBhZ2VfcG1kX3NpemUpO1xuK1x0cmV0dXJuIGNoZWNrX2h1Z2Vfc2htZW0oYWRkciwgbGVuLCBucl9ocGFnZXMsIGhwYWdlX3NpemUpO1xuIH1cbiBcbiBzdGF0aWMgc3RydWN0IG1lbV9vcHMgX19hbm9uX29wcyA9IHtcbkBAIC01NTIsNyArNTU4LDcgQEAgc3RhdGljIHZvaWQgX19tYWR2aXNlX2NvbGxhcHNlKGNvbnN0IGNoYXIgKm1zZywgY2hhciAqcCwgaW50IG5yX2hwYWdlcyxcbiBcdHJldCA9IG1hZHZpc2VfY29sbGFwc2VfcmV0cnkocCwgbnJfaHBhZ2VzICogaHBhZ2VfcG1kX3NpemUpO1xuIFx0aWYgKCgoYm9vbClyZXQpID09IGV4cGVjdClcbiBcdFx0ZmFpbChcIkZhaWw6IEJhZCByZXR1cm4gdmFsdWVcIik7XG4tXHRlbHNlIGlmICghb3BzLVx1MDAzZWNoZWNrX2h1Z2UocCwgZXhwZWN0ID8gbnJfaHBhZ2VzIDogMCkpXG4rXHRlbHNlIGlmICghb3BzLVx1MDAzZWNoZWNrX2h1Z2UocCwgbnJfaHBhZ2VzICogaHBhZ2VfcG1kX3NpemUsIGV4cGVjdCA/IG5yX2hwYWdlcyA6IDAsIGhwYWdlX3BtZF9zaXplKSlcbiBcdFx0ZmFpbChcIkZhaWw6IGNoZWNrX2h1Z2UoKVwiKTtcbiBcdGVsc2VcbiBcdFx0c3VjY2VzcyhcIk9LXCIpO1xuQEAgLTU2NCwzMCArNTcwLDMxIEBAIHN0YXRpYyB2b2lkIG1hZHZpc2VfY29sbGFwc2UoY29uc3QgY2hhciAqbXNnLCBjaGFyICpwLCBpbnQgbnJfaHBhZ2VzLFxuIFx0XHRcdCAgICAgc3RydWN0IG1lbV9vcHMgKm9wcywgYm9vbCBleHBlY3QpXG4ge1xuIFx0LyogU2FuaXR5IGNoZWNrICovXG4tXHRpZiAoIW9wcy1cdTAwM2VjaGVja19odWdlKHAsIDApKVxuK1x0aWYgKCFvcHMtXHUwMDNlY2hlY2tfaHVnZShwLCBucl9ocGFnZXMgKiBocGFnZV9wbWRfc2l6ZSwgMCwgaHBhZ2VfcG1kX3NpemUpKVxuIFx0XHRrc2Z0X2V4aXRfZmFpbF9tc2coXCJVbmV4cGVjdGVkIGh1Z2UgcGFnZVxcblwiKTtcbiBcdF9fbWFkdmlzZV9jb2xsYXBzZShtc2csIHAsIG5yX2hwYWdlcywgb3BzLCBleHBlY3QpO1xuIH1cbiBcbiAjZGVmaW5lIFRJQ0sgNTAwMDAwXG4tc3RhdGljIGJvb2wgd2FpdF9mb3Jfc2Nhbihjb25zdCBjaGFyICptc2csIGNoYXIgKnAsIGludCBucl9ocGFnZXMsXG4tXHRcdFx0ICBzdHJ1Y3QgbWVtX29wcyAqb3BzKVxuK3N0YXRpYyBib29sIHdhaXRfZm9yX3NjYW4oY29uc3QgY2hhciAqbXNnLCBjaGFyICpwLCBzaXplX3QgbGVuLFxuK1x0XHRpbnQgbnJfaHBhZ2VzLCBpbnQgY29sbGFwX29yZGVyLCBzdHJ1Y3QgbWVtX29wcyAqb3BzKVxuIHtcbitcdHVuc2lnbmVkIGxvbmcgaHBhZ2Vfc2l6ZSA9IHBhZ2Vfc2l6ZSBcdTAwM2NcdTAwM2MgY29sbGFwX29yZGVyO1xuIFx0aW50IGZ1bGxfc2NhbnM7XG4gXHRpbnQgdGltZW91dCA9IDY7IC8qIDMgc2Vjb25kcyAqL1xuIFxuIFx0LyogU2FuaXR5IGNoZWNrICovXG4tXHRpZiAoIW9wcy1cdTAwM2VjaGVja19odWdlKHAsIDApKVxuK1x0aWYgKCFvcHMtXHUwMDNlY2hlY2tfaHVnZShwLCBsZW4sIDAsIGhwYWdlX3NpemUpKVxuIFx0XHRrc2Z0X2V4aXRfZmFpbF9tc2coXCJVbmV4cGVjdGVkIGh1Z2UgcGFnZVxcblwiKTtcbiBcbi1cdG1hZHZpc2UocCwgbnJfaHBhZ2VzICogaHBhZ2VfcG1kX3NpemUsIE1BRFZfSFVHRVBBR0UpO1xuK1x0bWFkdmlzZShwLCBsZW4sIE1BRFZfSFVHRVBBR0UpO1xuIFxuIFx0LyogV2FpdCB1bnRpbCB0aGUgc2Vjb25kIGZ1bGxfc2NhbiBjb21wbGV0ZWQgKi9cbiBcdGZ1bGxfc2NhbnMgPSB0aHBfcmVhZF9udW0oXCJraHVnZXBhZ2VkL2Z1bGxfc2NhbnNcIikgKyAyO1xuIFxuIFx0a3NmdF9wcmludF9tc2coXCIlcy4uLlwiLCBtc2cpO1xuIFx0d2hpbGUgKHRpbWVvdXQtLSkge1xuLVx0XHRpZiAob3BzLVx1MDAzZWNoZWNrX2h1Z2UocCwgbnJfaHBhZ2VzKSlcbitcdFx0aWYgKG9wcy1cdTAwM2VjaGVja19odWdlKHAsIGxlbiwgbnJfaHBhZ2VzLCBocGFnZV9zaXplKSlcbiBcdFx0XHRicmVhaztcbiBcdFx0aWYgKHRocF9yZWFkX251bShcImtodWdlcGFnZWQvZnVsbF9zY2Fuc1wiKSBcdTAwM2U9IGZ1bGxfc2NhbnMpXG4gXHRcdFx0YnJlYWs7XG5AQCAtNjAxLDYgKzYwOCw4IEBAIHN0YXRpYyBib29sIHdhaXRfZm9yX3NjYW4oY29uc3QgY2hhciAqbXNnLCBjaGFyICpwLCBpbnQgbnJfaHBhZ2VzLFxuIHN0YXRpYyB2b2lkIGtodWdlcGFnZWRfY29sbGFwc2UoY29uc3QgY2hhciAqbXNnLCBjaGFyICpwLCBpbnQgbnJfaHBhZ2VzLFxuIFx0XHRcdFx0c3RydWN0IG1lbV9vcHMgKm9wcywgYm9vbCBleHBlY3QpXG4ge1xuK1x0c2l6ZV90IGxlbiA9IG5yX2hwYWdlcyAqIGhwYWdlX3BtZF9zaXplO1xuK1xuIFx0LypcbiBcdCAqIHJlYWRcdTAwMjZ3cml0ZSBmaWxlIGNvbGxhcHNlIGZhaWxzIHNpbmNlIGtodWdlcGFnZWQgZG9lcyBub3QgZmx1c2hcbiBcdCAqIHRoZSB0YXJnZXQgZGlydHkgZm9saW9zXG5AQCAtNjA4LDcgKzYxNyw3IEBAIHN0YXRpYyB2b2lkIGtodWdlcGFnZWRfY29sbGFwc2UoY29uc3QgY2hhciAqbXNnLCBjaGFyICpwLCBpbnQgbnJfaHBhZ2VzLFxuIFx0aWYgKCFpc190bXBmcyhvcHMpIFx1MDAyNlx1MDAyNiBvcHMgPT0gXHUwMDI2X19yZWFkX3dyaXRlX2ZpbGVfd3JpdGVfb3BzKVxuIFx0XHRleHBlY3QgPSBmYWxzZTtcbiBcbi1cdGlmICh3YWl0X2Zvcl9zY2FuKG1zZywgcCwgbnJfaHBhZ2VzLCBvcHMpKSB7XG4rXHRpZiAod2FpdF9mb3Jfc2Nhbihtc2csIHAsIGxlbiwgbnJfaHBhZ2VzLCBocGFnZV9wbWRfb3JkZXIsIG9wcykpIHtcbiBcdFx0aWYgKGV4cGVjdClcbiBcdFx0XHRmYWlsKFwiVGltZW91dFwiKTtcbiBcdFx0ZWxzZVxuQEAgLTYyNCwxMCArNjMzLDU0IEBAIHN0YXRpYyB2b2lkIGtodWdlcGFnZWRfY29sbGFwc2UoY29uc3QgY2hhciAqbXNnLCBjaGFyICpwLCBpbnQgbnJfaHBhZ2VzLFxuIFx0aWYgKG9wcyAhPSBcdTAwMjZfX2Fub25fb3BzKVxuIFx0XHRvcHMtXHUwMDNlZmF1bHQocCwgMCwgbnJfaHBhZ2VzICogaHBhZ2VfcG1kX3NpemUpO1xuIFxuLVx0aWYgKG9wcy1cdTAwM2VjaGVja19odWdlKHAsIGV4cGVjdCA/IG5yX2hwYWdlcyA6IDApKVxuK1x0aWYgKG9wcy1cdTAwM2VjaGVja19odWdlKHAsIGxlbiwgZXhwZWN0ID8gbnJfaHBhZ2VzIDogMCwgaHBhZ2VfcG1kX3NpemUpKVxuK1x0XHRzdWNjZXNzKFwiT0tcIik7XG4rXHRlbHNlXG4rXHRcdGZhaWwoXCJGYWlsXCIpO1xuK31cbitcbitzdGF0aWMgdm9pZCBtdGhwX2todWdlcGFnZWRfY29sbGFwc2UoY29uc3QgY2hhciAqbXNnLCBjaGFyICpwLCBpbnQgbnJfaHBhZ2VzLFxuK1x0XHRcdFx0c3RydWN0IG1lbV9vcHMgKm9wcywgYm9vbCBleHBlY3QpXG4re1xuK1x0dW5zaWduZWQgbG9uZyBocGFnZV9zaXplID0gcGFnZV9zaXplIFx1MDAzY1x1MDAzYyBjb2xsYXBzZV9vcmRlcjtcbitcdHN0cnVjdCB0aHBfc2V0dGluZ3Mgc2V0dGluZ3MgPSAqdGhwX2N1cnJlbnRfc2V0dGluZ3MoKTtcbitcdC8qIG1USFAgY29sbHBhc2Ugb25seSBhbGxvY2F0ZXMgUE1EIHNpemVkIG1lbW9yeSAqL1xuK1x0c2l6ZV90IGxlbiA9IGhwYWdlX3BtZF9zaXplO1xuK1xuK1x0LyogU2V0IG1USFAgc2V0dGluZyBmb3IgbVRIUCBjb2xsYXBzZSAqL1xuK1x0aWYgKG9wcyA9PSBcdTAwMjZfX2Fub25fb3BzKSB7XG4rXHRcdHNldHRpbmdzLnRocF9lbmFibGVkID0gVEhQX05FVkVSO1xuK1x0XHRzZXR0aW5ncy5odWdlcGFnZXNbY29sbGFwc2Vfb3JkZXJdLmVuYWJsZWQgPSBUSFBfTUFEVklTRTtcbitcdH1cbitcbitcdHRocF9wdXNoX3NldHRpbmdzKFx1MDAyNnNldHRpbmdzKTtcbitcbitcdGlmICh3YWl0X2Zvcl9zY2FuKG1zZywgcCwgbGVuLCBucl9ocGFnZXMsIGNvbGxhcHNlX29yZGVyLCBvcHMpKSB7XG4rXHRcdGlmIChleHBlY3QpXG4rXHRcdFx0ZmFpbChcIlRpbWVvdXRcIik7XG4rXHRcdGVsc2VcbitcdFx0XHRzdWNjZXNzKFwiT0tcIik7XG4rXG4rXHRcdC8qIFJlc3RvcmUgVEhQIHNldHRpbmdzIGZvciBtVEhQIGNvbGxhcHNlLiAqL1xuK1x0XHR0aHBfcG9wX3NldHRpbmdzKCk7XG4rXHRcdHJldHVybjtcbitcdH1cbitcbitcdC8qXG4rXHQgKiBGb3IgZmlsZSBhbmQgc2htZW0gbWVtb3J5LCBraHVnZXBhZ2VkIG9ubHkgcmV0cmFjdHMgcHRlIGVudHJpZXMgYWZ0ZXJcbitcdCAqIHB1dHRpbmcgdGhlIG5ldyBodWdlcGFnZSBpbiB0aGUgcGFnZSBjYWNoZS4gVGhlIGh1Z2VwYWdlIG11c3QgYmVcbitcdCAqIHN1YnNlcXVlbnRseSByZWZhdWx0ZWQgdG8gaW5zdGFsbCB0aGUgcG1kIG1hcHBpbmcgZm9yIHRoZSBtbS5cbitcdCAqL1xuK1x0aWYgKG9wcyAhPSBcdTAwMjZfX2Fub25fb3BzKVxuK1x0XHRvcHMtXHUwMDNlZmF1bHQocCwgMCwgbnJfaHBhZ2VzICogaHBhZ2Vfc2l6ZSk7XG4rXG4rXHRpZiAob3BzLVx1MDAzZWNoZWNrX2h1Z2UocCwgbGVuLCBleHBlY3QgPyBucl9ocGFnZXMgOiAwLCBocGFnZV9zaXplKSlcbiBcdFx0c3VjY2VzcyhcIk9LXCIpO1xuIFx0ZWxzZVxuIFx0XHRmYWlsKFwiRmFpbFwiKTtcbitcbitcdC8qIFJlc3RvcmUgVEhQIHNldHRpbmdzIGZvciBtVEhQIGNvbGxhcHNlLiAqL1xuK1x0dGhwX3BvcF9zZXR0aW5ncygpO1xuIH1cbiBcbiBzdGF0aWMgc3RydWN0IGNvbGxhcHNlX2NvbnRleHQgX19raHVnZXBhZ2VkX2NvbnRleHQgPSB7XG5AQCAtNjM2LDYgKzY4OSwxMiBAQCBzdGF0aWMgc3RydWN0IGNvbGxhcHNlX2NvbnRleHQgX19raHVnZXBhZ2VkX2NvbnRleHQgPSB7XG4gXHQubmFtZSA9IFwia2h1Z2VwYWdlZFwiLFxuIH07XG4gXG4rc3RhdGljIHN0cnVjdCBjb2xsYXBzZV9jb250ZXh0IF9fbXRocF9raHVnZXBhZ2VkX2NvbnRleHQgPSB7XG4rXHQuY29sbGFwc2UgPSBcdTAwMjZtdGhwX2todWdlcGFnZWRfY29sbGFwc2UsXG4rXHQuZW5mb3JjZV9wdGVfc2Nhbl9saW1pdHMgPSB0cnVlLFxuK1x0Lm5hbWUgPSBcIm10aHBfa2h1Z2VwYWdlZFwiLFxuK307XG4rXG4gc3RhdGljIHN0cnVjdCBjb2xsYXBzZV9jb250ZXh0IF9fbWFkdmlzZV9jb250ZXh0ID0ge1xuIFx0LmNvbGxhcHNlID0gXHUwMDI2bWFkdmlzZV9jb2xsYXBzZSxcbiBcdC5lbmZvcmNlX3B0ZV9zY2FuX2xpbWl0cyA9IGZhbHNlLFxuQEAgLTY1Myw3ICs3MTIsNyBAQCBzdGF0aWMgdm9pZCBhbGxvY19hdF9mYXVsdCh2b2lkKVxuIFx0cCA9IGFsbG9jX21hcHBpbmcoMSk7XG4gXHQqcCA9IDE7XG4gXHRrc2Z0X3ByaW50X21zZyhcIkFsbG9jYXRlIGh1Z2UgcGFnZSBvbiBmYXVsdC4uLlwiKTtcbi1cdGlmIChjaGVja19odWdlX2Fub24ocCwgMSwgaHBhZ2VfcG1kX3NpemUpKVxuK1x0aWYgKGNoZWNrX2h1Z2VfYW5vbihwLCBocGFnZV9wbWRfc2l6ZSwgMSwgaHBhZ2VfcG1kX3NpemUpKVxuIFx0XHRzdWNjZXNzKFwiT0tcIik7XG4gXHRlbHNlXG4gXHRcdGZhaWwoXCJGYWlsXCIpO1xuQEAgLTY2Miw3ICs3MjEsNyBAQCBzdGF0aWMgdm9pZCBhbGxvY19hdF9mYXVsdCh2b2lkKVxuIFxuIFx0bWFkdmlzZShwLCBwYWdlX3NpemUsIE1BRFZfRE9OVE5FRUQpO1xuIFx0a3NmdF9wcmludF9tc2coXCJTcGxpdCBodWdlIFBNRCBvbiBNQURWX0RPTlRORUVELi4uXCIpO1xuLVx0aWYgKGNoZWNrX2h1Z2VfYW5vbihwLCAwLCBocGFnZV9wbWRfc2l6ZSkpXG4rXHRpZiAoY2hlY2tfaHVnZV9hbm9uKHAsIGhwYWdlX3BtZF9zaXplLCAwLCBocGFnZV9wbWRfc2l6ZSkpXG4gXHRcdHN1Y2Nlc3MoXCJPS1wiKTtcbiBcdGVsc2VcbiBcdFx0ZmFpbChcIkZhaWxcIik7XG5AQCAtNjc0LDEwICs3MzMsMTcgQEAgc3RhdGljIHZvaWQgYWxsb2NfYXRfZmF1bHQodm9pZClcbiBzdGF0aWMgdm9pZCBjb2xsYXBzZV9mdWxsKHN0cnVjdCBjb2xsYXBzZV9jb250ZXh0ICpjLCBzdHJ1Y3QgbWVtX29wcyAqb3BzKVxuIHtcbiBcdHZvaWQgKnA7XG4tXHRpbnQgbnJfaHBhZ2VzID0gNDtcbitcdGludCBucl9wbWRzID0gNCwgbnJfaHBhZ2VzID0gNDtcbiBcdHVuc2lnbmVkIGxvbmcgc2l6ZSA9IG5yX2hwYWdlcyAqIGhwYWdlX3BtZF9zaXplO1xuIFxuLVx0cCA9IG9wcy1cdTAwM2VzZXR1cF9hcmVhKG5yX2hwYWdlcyk7XG4rXHQvKiBPbmx5IHRyeSAxIFBNRCBzaXplZCByYW5nZSBmb3IgbVRIUCBjb2xsYXBzZS4gKi9cbitcdGlmIChjID09IFx1MDAyNl9fbXRocF9raHVnZXBhZ2VkX2NvbnRleHQpIHtcbitcdFx0bnJfcG1kcyA9IDE7XG4rXHRcdG5yX2hwYWdlcyA9IDEgXHUwMDNjXHUwMDNjIChocGFnZV9wbWRfb3JkZXIgLSBjb2xsYXBzZV9vcmRlcik7XG4rXHRcdHNpemUgPSBocGFnZV9wbWRfc2l6ZTtcbitcdH1cbitcbitcdHAgPSBvcHMtXHUwMDNlc2V0dXBfYXJlYShucl9wbWRzKTtcbiBcdG9wcy1cdTAwM2VmYXVsdChwLCAwLCBzaXplKTtcbiBcdGMtXHUwMDNlY29sbGFwc2UoXCJDb2xsYXBzZSBtdWx0aXBsZSBmdWxseSBwb3B1bGF0ZWQgUFRFIHRhYmxlXCIsIHAsIG5yX2hwYWdlcyxcbiBcdFx0ICAgIG9wcywgdHJ1ZSk7XG5AQCAtNjg5LDEwICs3NTUsMzEgQEAgc3RhdGljIHZvaWQgY29sbGFwc2VfZnVsbChzdHJ1Y3QgY29sbGFwc2VfY29udGV4dCAqYywgc3RydWN0IG1lbV9vcHMgKm9wcylcbiBcbiBzdGF0aWMgdm9pZCBjb2xsYXBzZV9lbXB0eShzdHJ1Y3QgY29sbGFwc2VfY29udGV4dCAqYywgc3RydWN0IG1lbV9vcHMgKm9wcylcbiB7XG4rXHRpbnQgbnJfaHBhZ2VzID0gMTtcbitcdHZvaWQgKnA7XG4rXG4rXHRpZiAoYyA9PSBcdTAwMjZfX210aHBfa2h1Z2VwYWdlZF9jb250ZXh0KVxuK1x0XHRucl9ocGFnZXMgPSAxIFx1MDAzY1x1MDAzYyAoaHBhZ2VfcG1kX29yZGVyIC0gY29sbGFwc2Vfb3JkZXIpO1xuK1xuK1x0cCA9IG9wcy1cdTAwM2VzZXR1cF9hcmVhKDEpO1xuK1x0Yy1cdTAwM2Vjb2xsYXBzZShcIkRvIG5vdCBjb2xsYXBzZSBlbXB0eSBQVEUgdGFibGVcIiwgcCwgbnJfaHBhZ2VzLCBvcHMsIGZhbHNlKTtcbitcdG9wcy1cdTAwM2VjbGVhbnVwX2FyZWEocCwgaHBhZ2VfcG1kX3NpemUpO1xuK1x0a3NmdF90ZXN0X3Jlc3VsdF9yZXBvcnQoZXhpdF9zdGF0dXMsIFwiJXNcXG5cIiwgX19mdW5jX18pO1xuK31cbitcbitzdGF0aWMgdm9pZCBjb2xsYXBzZV9zaW5nbGVfbXRocChzdHJ1Y3QgY29sbGFwc2VfY29udGV4dCAqYywgc3RydWN0IG1lbV9vcHMgKm9wcylcbit7XG4rXHR1bnNpZ25lZCBsb25nIGhwYWdlX3NpemUgPSBwYWdlX3NpemUgXHUwMDNjXHUwMDNjIGNvbGxhcHNlX29yZGVyO1xuIFx0dm9pZCAqcDtcbiBcbiBcdHAgPSBvcHMtXHUwMDNlc2V0dXBfYXJlYSgxKTtcbi1cdGMtXHUwMDNlY29sbGFwc2UoXCJEbyBub3QgY29sbGFwc2UgZW1wdHkgUFRFIHRhYmxlXCIsIHAsIDEsIG9wcywgZmFsc2UpO1xuK1x0LypcbitcdCAqIE9ubHkgZmF1bHQgY29sbGFwc2Vfb3JkZXIgc2l6ZWQgcmFuZ2VzLCBhbmQgb25seSBjaGVjayAxXG4rXHQgKiBjb2xsYXBzZV9vcmRlciBzaXplZCBodWdlIHBhZ2UuXG4rXHQgKi9cbitcdG9wcy1cdTAwM2VmYXVsdChwLCAwLCBocGFnZV9zaXplKTtcbitcdGMtXHUwMDNlY29sbGFwc2UoXCJDb2xsYXBzZSBQVEUgdGFibGUgd2l0aCBoYWxmIFBURSBlbnRyaWVzIHByZXNlbnRcIixcbitcdFx0cCwgMSwgb3BzLCB0cnVlKTtcbiBcdG9wcy1cdTAwM2VjbGVhbnVwX2FyZWEocCwgaHBhZ2VfcG1kX3NpemUpO1xuIFx0a3NmdF90ZXN0X3Jlc3VsdF9yZXBvcnQoZXhpdF9zdGF0dXMsIFwiJXNcXG5cIiwgX19mdW5jX18pO1xuIH1cbkBAIC04NDgsNyArOTM1LDcgQEAgc3RhdGljIHZvaWQgY29sbGFwc2Vfc2luZ2xlX3B0ZV9lbnRyeV9jb21wb3VuZChzdHJ1Y3QgY29sbGFwc2VfY29udGV4dCAqYywgc3RydWNcbiBcdG1hZHZpc2UocCwgaHBhZ2VfcG1kX3NpemUsIE1BRFZfTk9IVUdFUEFHRSk7XG4gXHRrc2Z0X3ByaW50X21zZyhcIlNwbGl0IGh1Z2UgcGFnZSBsZWF2aW5nIHNpbmdsZSBQVEUgbWFwcGluZyBjb21wb3VuZCBwYWdlLi4uXCIpO1xuIFx0bWFkdmlzZShwICsgcGFnZV9zaXplLCBocGFnZV9wbWRfc2l6ZSAtIHBhZ2Vfc2l6ZSwgTUFEVl9ET05UTkVFRCk7XG4tXHRpZiAob3BzLVx1MDAzZWNoZWNrX2h1Z2UocCwgMCkpXG4rXHRpZiAob3BzLVx1MDAzZWNoZWNrX2h1Z2UocCwgaHBhZ2VfcG1kX3NpemUsIDAsIGhwYWdlX3BtZF9zaXplKSlcbiBcdFx0c3VjY2VzcyhcIk9LXCIpO1xuIFx0ZWxzZVxuIFx0XHRmYWlsKFwiRmFpbFwiKTtcbkBAIC04NjksNyArOTU2LDcgQEAgc3RhdGljIHZvaWQgY29sbGFwc2VfZnVsbF9vZl9jb21wb3VuZChzdHJ1Y3QgY29sbGFwc2VfY29udGV4dCAqYywgc3RydWN0IG1lbV9vcHNcbiBcdGtzZnRfcHJpbnRfbXNnKFwiU3BsaXQgaHVnZSBwYWdlIGxlYXZpbmcgc2luZ2xlIFBURSBwYWdlIHRhYmxlIGZ1bGwgb2YgY29tcG91bmQgcGFnZXMuLi5cIik7XG4gXHRtYWR2aXNlKHAsIHBhZ2Vfc2l6ZSwgTUFEVl9OT0hVR0VQQUdFKTtcbiBcdG1hZHZpc2UocCwgaHBhZ2VfcG1kX3NpemUsIE1BRFZfTk9IVUdFUEFHRSk7XG4tXHRpZiAob3BzLVx1MDAzZWNoZWNrX2h1Z2UocCwgMCkpXG4rXHRpZiAob3BzLVx1MDAzZWNoZWNrX2h1Z2UocCwgaHBhZ2VfcG1kX3NpemUsIDAsIGhwYWdlX3BtZF9zaXplKSlcbiBcdFx0c3VjY2VzcyhcIk9LXCIpO1xuIFx0ZWxzZVxuIFx0XHRmYWlsKFwiRmFpbFwiKTtcbkBAIC04OTEsNyArOTc4LDcgQEAgc3RhdGljIHZvaWQgY29sbGFwc2VfY29tcG91bmRfZXh0cmVtZShzdHJ1Y3QgY29sbGFwc2VfY29udGV4dCAqYywgc3RydWN0IG1lbV9vcHNcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGhwYWdlX3BtZF9ucjsgaSsrKSB7XG4gXHRcdG1hZHZpc2UoQkFTRV9BRERSLCBocGFnZV9wbWRfc2l6ZSwgTUFEVl9IVUdFUEFHRSk7XG4gXHRcdG9wcy1cdTAwM2VmYXVsdChCQVNFX0FERFIsIDAsIGhwYWdlX3BtZF9zaXplKTtcbi1cdFx0aWYgKCFvcHMtXHUwMDNlY2hlY2tfaHVnZShCQVNFX0FERFIsIDEpKVxuK1x0XHRpZiAoIW9wcy1cdTAwM2VjaGVja19odWdlKEJBU0VfQUREUiwgaHBhZ2VfcG1kX3NpemUsIDEsIGhwYWdlX3BtZF9zaXplKSlcbiBcdFx0XHRrc2Z0X2V4aXRfZmFpbF9tc2coXCJGYWlsZWQgdG8gYWxsb2NhdGUgaHVnZSBwYWdlXFxuXCIpO1xuIFx0XHRtYWR2aXNlKEJBU0VfQUREUiwgaHBhZ2VfcG1kX3NpemUsIE1BRFZfTk9IVUdFUEFHRSk7XG4gXG5AQCAtOTE0LDcgKzEwMDEsNyBAQCBzdGF0aWMgdm9pZCBjb2xsYXBzZV9jb21wb3VuZF9leHRyZW1lKHN0cnVjdCBjb2xsYXBzZV9jb250ZXh0ICpjLCBzdHJ1Y3QgbWVtX29wc1xuIFxuIFx0b3BzLVx1MDAzZWNsZWFudXBfYXJlYShCQVNFX0FERFIsIGhwYWdlX3BtZF9zaXplKTtcbiBcdG9wcy1cdTAwM2VmYXVsdChwLCAwLCBocGFnZV9wbWRfc2l6ZSk7XG4tXHRpZiAoIW9wcy1cdTAwM2VjaGVja19odWdlKHAsIDEpKVxuK1x0aWYgKCFvcHMtXHUwMDNlY2hlY2tfaHVnZShwLCBocGFnZV9wbWRfc2l6ZSwgMSwgaHBhZ2VfcG1kX3NpemUpKVxuIFx0XHRzdWNjZXNzKFwiT0tcIik7XG4gXHRlbHNlXG4gXHRcdGZhaWwoXCJGYWlsXCIpO1xuQEAgLTkzNiw3ICsxMDIzLDcgQEAgc3RhdGljIHZvaWQgY29sbGFwc2VfZm9yayhzdHJ1Y3QgY29sbGFwc2VfY29udGV4dCAqYywgc3RydWN0IG1lbV9vcHMgKm9wcylcbiBcbiBcdGtzZnRfcHJpbnRfbXNnKFwiQWxsb2NhdGUgc21hbGwgcGFnZS4uLlwiKTtcbiBcdG9wcy1cdTAwM2VmYXVsdChwLCAwLCBwYWdlX3NpemUpO1xuLVx0aWYgKG9wcy1cdTAwM2VjaGVja19odWdlKHAsIDApKVxuK1x0aWYgKG9wcy1cdTAwM2VjaGVja19odWdlKHAsIGhwYWdlX3BtZF9zaXplLCAwLCBocGFnZV9wbWRfc2l6ZSkpXG4gXHRcdHN1Y2Nlc3MoXCJPS1wiKTtcbiBcdGVsc2VcbiBcdFx0ZmFpbChcIkZhaWxcIik7XG5AQCAtOTQ0LDcgKzEwMzEsNyBAQCBzdGF0aWMgdm9pZCBjb2xsYXBzZV9mb3JrKHN0cnVjdCBjb2xsYXBzZV9jb250ZXh0ICpjLCBzdHJ1Y3QgbWVtX29wcyAqb3BzKVxuIFx0a3NmdF9wcmludF9tc2coXCJTaGFyZSBzbWFsbCBwYWdlIG92ZXIgZm9yaygpLi4uXCIpO1xuIFx0aWYgKCFmb3JrKCkpIHtcbiBcdFx0LyogRG8gbm90IHRvdWNoIHNldHRpbmdzIG9uIGNoaWxkIGV4aXQgKi9cbi1cdFx0aWYgKG9wcy1cdTAwM2VjaGVja19odWdlKHAsIDApKVxuK1x0XHRpZiAob3BzLVx1MDAzZWNoZWNrX2h1Z2UocCwgaHBhZ2VfcG1kX3NpemUsIDAsIGhwYWdlX3BtZF9zaXplKSlcbiBcdFx0XHRzdWNjZXNzKFwiT0tcIik7XG4gXHRcdGVsc2VcbiBcdFx0XHRmYWlsKFwiRmFpbFwiKTtcbkBAIC05NjIsNyArMTA0OSw3IEBAIHN0YXRpYyB2b2lkIGNvbGxhcHNlX2Zvcmsoc3RydWN0IGNvbGxhcHNlX2NvbnRleHQgKmMsIHN0cnVjdCBtZW1fb3BzICpvcHMpXG4gXHRleGl0X3N0YXR1cyA9IFdFWElUU1RBVFVTKHdzdGF0dXMpO1xuIFxuIFx0a3NmdF9wcmludF9tc2coXCJDaGVjayBpZiBwYXJlbnQgc3RpbGwgaGFzIHNtYWxsIHBhZ2UuLi5cIik7XG4tXHRpZiAob3BzLVx1MDAzZWNoZWNrX2h1Z2UocCwgMCkpXG4rXHRpZiAob3BzLVx1MDAzZWNoZWNrX2h1Z2UocCwgaHBhZ2VfcG1kX3NpemUsIDAsIGhwYWdlX3BtZF9zaXplKSlcbiBcdFx0c3VjY2VzcyhcIk9LXCIpO1xuIFx0ZWxzZVxuIFx0XHRmYWlsKFwiRmFpbFwiKTtcbkBAIC05ODAsNyArMTA2Nyw3IEBAIHN0YXRpYyB2b2lkIGNvbGxhcHNlX2ZvcmtfY29tcG91bmQoc3RydWN0IGNvbGxhcHNlX2NvbnRleHQgKmMsIHN0cnVjdCBtZW1fb3BzICpvXG4gXHRrc2Z0X3ByaW50X21zZyhcIlNoYXJlIGh1Z2UgcGFnZSBvdmVyIGZvcmsoKS4uLlwiKTtcbiBcdGlmICghZm9yaygpKSB7XG4gXHRcdC8qIERvIG5vdCB0b3VjaCBzZXR0aW5ncyBvbiBjaGlsZCBleGl0ICovXG4tXHRcdGlmIChvcHMtXHUwMDNlY2hlY2tfaHVnZShwLCAxKSlcbitcdFx0aWYgKG9wcy1cdTAwM2VjaGVja19odWdlKHAsIGhwYWdlX3BtZF9zaXplLCAxLCBocGFnZV9wbWRfc2l6ZSkpXG4gXHRcdFx0c3VjY2VzcyhcIk9LXCIpO1xuIFx0XHRlbHNlXG4gXHRcdFx0ZmFpbChcIkZhaWxcIik7XG5AQCAtOTg4LDcgKzEwNzUsNyBAQCBzdGF0aWMgdm9pZCBjb2xsYXBzZV9mb3JrX2NvbXBvdW5kKHN0cnVjdCBjb2xsYXBzZV9jb250ZXh0ICpjLCBzdHJ1Y3QgbWVtX29wcyAqb1xuIFx0XHRrc2Z0X3ByaW50X21zZyhcIlNwbGl0IGh1Z2UgcGFnZSBQTUQgaW4gY2hpbGQgcHJvY2Vzcy4uLlwiKTtcbiBcdFx0bWFkdmlzZShwLCBwYWdlX3NpemUsIE1BRFZfTk9IVUdFUEFHRSk7XG4gXHRcdG1hZHZpc2UocCwgaHBhZ2VfcG1kX3NpemUsIE1BRFZfTk9IVUdFUEFHRSk7XG4tXHRcdGlmIChvcHMtXHUwMDNlY2hlY2tfaHVnZShwLCAwKSlcbitcdFx0aWYgKG9wcy1cdTAwM2VjaGVja19odWdlKHAsIGhwYWdlX3BtZF9zaXplLCAwLCBocGFnZV9wbWRfc2l6ZSkpXG4gXHRcdFx0c3VjY2VzcyhcIk9LXCIpO1xuIFx0XHRlbHNlXG4gXHRcdFx0ZmFpbChcIkZhaWxcIik7XG5AQCAtMTAwOSw3ICsxMDk2LDcgQEAgc3RhdGljIHZvaWQgY29sbGFwc2VfZm9ya19jb21wb3VuZChzdHJ1Y3QgY29sbGFwc2VfY29udGV4dCAqYywgc3RydWN0IG1lbV9vcHMgKm9cbiBcdGV4aXRfc3RhdHVzID0gV0VYSVRTVEFUVVMod3N0YXR1cyk7XG4gXG4gXHRrc2Z0X3ByaW50X21zZyhcIkNoZWNrIGlmIHBhcmVudCBzdGlsbCBoYXMgaHVnZSBwYWdlLi4uXCIpO1xuLVx0aWYgKG9wcy1cdTAwM2VjaGVja19odWdlKHAsIDEpKVxuK1x0aWYgKG9wcy1cdTAwM2VjaGVja19odWdlKHAsIGhwYWdlX3BtZF9zaXplLCAxLCBocGFnZV9wbWRfc2l6ZSkpXG4gXHRcdHN1Y2Nlc3MoXCJPS1wiKTtcbiBcdGVsc2VcbiBcdFx0ZmFpbChcIkZhaWxcIik7XG5AQCAtMTAyOCw3ICsxMTE1LDcgQEAgc3RhdGljIHZvaWQgY29sbGFwc2VfbWF4X3B0ZXNfc2hhcmVkKHN0cnVjdCBjb2xsYXBzZV9jb250ZXh0ICpjLCBzdHJ1Y3QgbWVtX29wc1xuIFx0a3NmdF9wcmludF9tc2coXCJTaGFyZSBodWdlIHBhZ2Ugb3ZlciBmb3JrKCkuLi5cIik7XG4gXHRpZiAoIWZvcmsoKSkge1xuIFx0XHQvKiBEbyBub3QgdG91Y2ggc2V0dGluZ3Mgb24gY2hpbGQgZXhpdCAqL1xuLVx0XHRpZiAob3BzLVx1MDAzZWNoZWNrX2h1Z2UocCwgMSkpXG4rXHRcdGlmIChvcHMtXHUwMDNlY2hlY2tfaHVnZShwLCBocGFnZV9wbWRfc2l6ZSwgMSwgaHBhZ2VfcG1kX3NpemUpKVxuIFx0XHRcdHN1Y2Nlc3MoXCJPS1wiKTtcbiBcdFx0ZWxzZVxuIFx0XHRcdGZhaWwoXCJGYWlsXCIpO1xuQEAgLTEwMzYsNyArMTEyMyw3IEBAIHN0YXRpYyB2b2lkIGNvbGxhcHNlX21heF9wdGVzX3NoYXJlZChzdHJ1Y3QgY29sbGFwc2VfY29udGV4dCAqYywgc3RydWN0IG1lbV9vcHNcbiBcdFx0a3NmdF9wcmludF9tc2coXCJUcmlnZ2VyIENvVyBvbiBwYWdlICVkIG9mICVkLi4uXCIsXG4gXHRcdFx0XHRocGFnZV9wbWRfbnIgLSBtYXhfcHRlc19zaGFyZWQgLSAxLCBocGFnZV9wbWRfbnIpO1xuIFx0XHRvcHMtXHUwMDNlZmF1bHQocCwgMCwgKGhwYWdlX3BtZF9uciAtIG1heF9wdGVzX3NoYXJlZCAtIDEpICogcGFnZV9zaXplKTtcbi1cdFx0aWYgKG9wcy1cdTAwM2VjaGVja19odWdlKHAsIDApKVxuK1x0XHRpZiAob3BzLVx1MDAzZWNoZWNrX2h1Z2UocCwgaHBhZ2VfcG1kX3NpemUsIDAsIGhwYWdlX3BtZF9zaXplKSlcbiBcdFx0XHRzdWNjZXNzKFwiT0tcIik7XG4gXHRcdGVsc2VcbiBcdFx0XHRmYWlsKFwiRmFpbFwiKTtcbkBAIC0xMDQ5LDcgKzExMzYsNyBAQCBzdGF0aWMgdm9pZCBjb2xsYXBzZV9tYXhfcHRlc19zaGFyZWQoc3RydWN0IGNvbGxhcHNlX2NvbnRleHQgKmMsIHN0cnVjdCBtZW1fb3BzXG4gXHRcdFx0ICAgICAgIGhwYWdlX3BtZF9uciAtIG1heF9wdGVzX3NoYXJlZCwgaHBhZ2VfcG1kX25yKTtcbiBcdFx0XHRvcHMtXHUwMDNlZmF1bHQocCwgMCwgKGhwYWdlX3BtZF9uciAtIG1heF9wdGVzX3NoYXJlZCkgKlxuIFx0XHRcdFx0ICAgIHBhZ2Vfc2l6ZSk7XG4tXHRcdFx0aWYgKG9wcy1cdTAwM2VjaGVja19odWdlKHAsIDApKVxuK1x0XHRcdGlmIChvcHMtXHUwMDNlY2hlY2tfaHVnZShwLCBocGFnZV9wbWRfc2l6ZSwgMCwgaHBhZ2VfcG1kX3NpemUpKVxuIFx0XHRcdFx0c3VjY2VzcyhcIk9LXCIpO1xuIFx0XHRcdGVsc2VcbiBcdFx0XHRcdGZhaWwoXCJGYWlsXCIpO1xuQEAgLTEwNjcsNyArMTE1NCw3IEBAIHN0YXRpYyB2b2lkIGNvbGxhcHNlX21heF9wdGVzX3NoYXJlZChzdHJ1Y3QgY29sbGFwc2VfY29udGV4dCAqYywgc3RydWN0IG1lbV9vcHNcbiBcdGV4aXRfc3RhdHVzID0gV0VYSVRTVEFUVVMod3N0YXR1cyk7XG4gXG4gXHRrc2Z0X3ByaW50X21zZyhcIkNoZWNrIGlmIHBhcmVudCBzdGlsbCBoYXMgaHVnZSBwYWdlLi4uXCIpO1xuLVx0aWYgKG9wcy1cdTAwM2VjaGVja19odWdlKHAsIDEpKVxuK1x0aWYgKG9wcy1cdTAwM2VjaGVja19odWdlKHAsIGhwYWdlX3BtZF9zaXplLCAxLCBocGFnZV9wbWRfc2l6ZSkpXG4gXHRcdHN1Y2Nlc3MoXCJPS1wiKTtcbiBcdGVsc2VcbiBcdFx0ZmFpbChcIkZhaWxcIik7XG5AQCAtMTEwOCw4ICsxMTk1LDggQEAgc3RhdGljIHZvaWQgbWFkdmlzZV9yZXRyYWN0ZWRfcGFnZV90YWJsZXMoc3RydWN0IGNvbGxhcHNlX2NvbnRleHQgKmMsXG4gXHRvcHMtXHUwMDNlZmF1bHQocCwgMCwgc2l6ZSk7XG4gXG4gXHQvKiBMZXQga2h1Z2VwYWdlZCBjb2xsYXBzZSBhbmQgbGVhdmUgcG1kIGNsZWFyZWQgKi9cbi1cdGlmICh3YWl0X2Zvcl9zY2FuKFwiQ29sbGFwc2UgYW5kIGxlYXZlIFBNRCBjbGVhcmVkXCIsIHAsIG5yX2hwYWdlcyxcbi1cdFx0XHQgIG9wcykpIHtcbitcdGlmICh3YWl0X2Zvcl9zY2FuKFwiQ29sbGFwc2UgYW5kIGxlYXZlIFBNRCBjbGVhcmVkXCIsIHAsIHNpemUsIG5yX2hwYWdlcyxcbitcdFx0XHQgIGhwYWdlX3BtZF9vcmRlciwgb3BzKSkge1xuIFx0XHRmYWlsKFwiVGltZW91dFwiKTtcbiBcdFx0cmV0dXJuO1xuIFx0fVxuQEAgLTExMjUsMTcgKzEyMTIsMTkgQEAgc3RhdGljIHZvaWQgdXNhZ2Uodm9pZClcbiB7XG4gXHRmcHJpbnRmKHN0ZGVyciwgXCJcXG5Vc2FnZTogLi9raHVnZXBhZ2VkIFtPUFRJT05TXSBcdTAwM2N0ZXN0IHR5cGVcdTAwM2UgW2Rpcl1cXG5cXG5cIik7XG4gXHRmcHJpbnRmKHN0ZGVyciwgXCJcXHRcdTAwM2N0ZXN0IHR5cGVcdTAwM2VcXHQ6IFx1MDAzY2NvbnRleHRcdTAwM2U6XHUwMDNjbWVtX3R5cGVcdTAwM2VcXG5cIik7XG4tXHRmcHJpbnRmKHN0ZGVyciwgXCJcXHRcdTAwM2Njb250ZXh0XHUwMDNlXFx0OiBbYWxsfGtodWdlcGFnZWR8bWFkdmlzZV1cXG5cIik7XG4rXHRmcHJpbnRmKHN0ZGVyciwgXCJcXHRcdTAwM2Njb250ZXh0XHUwMDNlXFx0OiBbYWxsfGtodWdlcGFnZWR8bXRocF9raHVnZXBhZ2VkfG1hZHZpc2VdXFxuXCIpO1xuIFx0ZnByaW50ZihzdGRlcnIsIFwiXFx0XHUwMDNjbWVtX3R5cGVcdTAwM2VcXHQ6IFthbGx8YW5vbnxmaWxlfHNobWVtXVxcblwiKTtcbiBcdGZwcmludGYoc3RkZXJyLCBcIlxcblxcdFxcXCJmaWxlLGFsbFxcXCIgbWVtX3R5cGUgcmVxdWlyZXMgW2Rpcl0gYXJndW1lbnRcXG5cIik7XG4gXHRmcHJpbnRmKHN0ZGVyciwgXCJcXG5cXHRcXFwiZmlsZSxhbGxcXFwiIG1lbV90eXBlIHJlcXVpcmVzIGEgZmlsZSBzeXN0ZW1cXG5cIik7XG4gXHRmcHJpbnRmKHN0ZGVycixcdFwiXFx0d2l0aCBQTUQtc2l6ZWQgbGFyZ2UgZm9saW8gc3VwcG9ydFxcblwiKTtcbiBcdGZwcmludGYoc3RkZXJyLCBcIlxcblxcdGlmIFtkaXJdIGlzIGEgKHN1YilkaXJlY3Rvcnkgb2YgYSB0bXBmcyBtb3VudCwgdG1wZnMgbXVzdCBiZVxcblwiKTtcbiBcdGZwcmludGYoc3RkZXJyLFx0XCJcXHRtb3VudGVkIHdpdGggaHVnZT1hZHZpc2Ugb3B0aW9uIGZvciBraHVnZXBhZ2VkIHRlc3RzIHRvIHdvcmtcXG5cIik7XG4rXHRmcHJpbnRmKHN0ZGVyciwgXCJcXG5cXHRtdGhwX2todWdlcGFnZWQgb25seSBzdXBwb3J0cyBhbm9uIG1lbV90eXBlIG5vdy5cXG5cIik7XG4gXHRmcHJpbnRmKHN0ZGVycixcdFwiXFxuXFx0U3VwcG9ydGVkIE9wdGlvbnM6XFxuXCIpO1xuIFx0ZnByaW50ZihzdGRlcnIsXHRcIlxcdFxcdC1oOiBUaGlzIGhlbHAgbWVzc2FnZS5cXG5cIik7XG4gXHRmcHJpbnRmKHN0ZGVycixcdFwiXFx0XFx0LXM6IG1USFAgc2l6ZSwgZXhwcmVzc2VkIGFzIHBhZ2Ugb3JkZXIuXFxuXCIpO1xuIFx0ZnByaW50ZihzdGRlcnIsXHRcIlxcdFxcdCAgICBEZWZhdWx0cyB0byAwLiBVc2UgdGhpcyBzaXplIGZvciBhbm9uIG9yIHNobWVtIGFsbG9jYXRpb25zLlxcblwiKTtcbitcdGZwcmludGYoc3RkZXJyLFx0XCJcXHRcXHQtYzogY29sbGFwc2Ugb3JkZXIgZm9yIG1USFAgY29sbGFwc2UsIGV4cHJlc3NlZCBhcyBwYWdlIG9yZGVyLlxcblwiKTtcbiBcdGV4aXQoMSk7XG4gfVxuIFxuQEAgLTExNDUsMTEgKzEyMzQsMTQgQEAgc3RhdGljIHZvaWQgcGFyc2VfdGVzdF90eXBlKGludCBhcmdjLCBjaGFyICoqYXJndilcbiBcdGNoYXIgKmJ1ZjtcbiBcdGNvbnN0IGNoYXIgKnRva2VuO1xuIFxuLVx0d2hpbGUgKChvcHQgPSBnZXRvcHQoYXJnYywgYXJndiwgXCJzOmhcIikpICE9IC0xKSB7XG4rXHR3aGlsZSAoKG9wdCA9IGdldG9wdChhcmdjLCBhcmd2LCBcInM6YzpoXCIpKSAhPSAtMSkge1xuIFx0XHRzd2l0Y2ggKG9wdCkge1xuIFx0XHRjYXNlICdzJzpcbiBcdFx0XHRhbm9uX29yZGVyID0gYXRvaShvcHRhcmcpO1xuIFx0XHRcdGJyZWFrO1xuK1x0XHRjYXNlICdjJzpcbitcdFx0XHRjb2xsYXBzZV9vcmRlciA9IGF0b2kob3B0YXJnKTtcbitcdFx0XHRicmVhaztcbiBcdFx0Y2FzZSAnaCc6XG4gXHRcdGRlZmF1bHQ6XG4gXHRcdFx0dXNhZ2UoKTtcbkBAIC0xMTc1LDYgKzEyNjcsMTAgQEAgc3RhdGljIHZvaWQgcGFyc2VfdGVzdF90eXBlKGludCBhcmdjLCBjaGFyICoqYXJndilcbiBcdFx0bWFkdmlzZV9jb250ZXh0ID0gIFx1MDAyNl9fbWFkdmlzZV9jb250ZXh0O1xuIFx0fSBlbHNlIGlmICghc3RyY21wKHRva2VuLCBcImtodWdlcGFnZWRcIikpIHtcbiBcdFx0a2h1Z2VwYWdlZF9jb250ZXh0ID0gIFx1MDAyNl9fa2h1Z2VwYWdlZF9jb250ZXh0O1xuK1x0fSBlbHNlIGlmICghc3RyY21wKHRva2VuLCBcIm10aHBfa2h1Z2VwYWdlZFwiKSkge1xuK1x0XHRtdGhwX2todWdlcGFnZWRfY29udGV4dCA9ICBcdTAwMjZfX210aHBfa2h1Z2VwYWdlZF9jb250ZXh0O1xuK1x0XHRpZiAoY29sbGFwc2Vfb3JkZXIgXHUwMDNjPSAwIHx8IGNvbGxhcHNlX29yZGVyIFx1MDAzZT0gaHBhZ2VfcG1kX29yZGVyKVxuK1x0XHRcdHVzYWdlKCk7XG4gXHR9IGVsc2UgaWYgKCFzdHJjbXAodG9rZW4sIFwibWFkdmlzZVwiKSkge1xuIFx0XHRtYWR2aXNlX2NvbnRleHQgPSAgXHUwMDI2X19tYWR2aXNlX2NvbnRleHQ7XG4gXHR9IGVsc2Uge1xuQEAgLTExOTAsMTQgKzEyODYsMjAgQEAgc3RhdGljIHZvaWQgcGFyc2VfdGVzdF90eXBlKGludCBhcmdjLCBjaGFyICoqYXJndilcbiBcdFx0cmVhZF93cml0ZV9maWxlX3dyaXRlX29wcyA9ICBcdTAwMjZfX3JlYWRfd3JpdGVfZmlsZV93cml0ZV9vcHM7XG4gXHRcdGFub25fb3BzID0gXHUwMDI2X19hbm9uX29wcztcbiBcdFx0c2htZW1fb3BzID0gXHUwMDI2X19zaG1lbV9vcHM7XG4rXHRcdGlmIChtdGhwX2todWdlcGFnZWRfY29udGV4dClcbitcdFx0XHR1c2FnZSgpO1xuIFx0fSBlbHNlIGlmICghc3RyY21wKGJ1ZiwgXCJhbm9uXCIpKSB7XG4gXHRcdGFub25fb3BzID0gXHUwMDI2X19hbm9uX29wcztcbiBcdH0gZWxzZSBpZiAoIXN0cmNtcChidWYsIFwiZmlsZVwiKSkge1xuIFx0XHRyZWFkX29ubHlfZmlsZV9vcHMgPSAgXHUwMDI2X19yZWFkX29ubHlfZmlsZV9vcHM7XG4gXHRcdHJlYWRfd3JpdGVfZmlsZV9yZWFkX29wcyA9ICBcdTAwMjZfX3JlYWRfd3JpdGVfZmlsZV9yZWFkX29wcztcbiBcdFx0cmVhZF93cml0ZV9maWxlX3dyaXRlX29wcyA9ICBcdTAwMjZfX3JlYWRfd3JpdGVfZmlsZV93cml0ZV9vcHM7XG4rXHRcdGlmIChtdGhwX2todWdlcGFnZWRfY29udGV4dClcbitcdFx0XHR1c2FnZSgpO1xuIFx0fSBlbHNlIGlmICghc3RyY21wKGJ1ZiwgXCJzaG1lbVwiKSkge1xuIFx0XHRzaG1lbV9vcHMgPSBcdTAwMjZfX3NobWVtX29wcztcbitcdFx0aWYgKG10aHBfa2h1Z2VwYWdlZF9jb250ZXh0KVxuK1x0XHRcdHVzYWdlKCk7XG4gXHR9IGVsc2Uge1xuIFx0XHR1c2FnZSgpO1xuIFx0fVxuQEAgLTEyNDAsNyArMTM0Miw2IEBAIHN0YXRpYyBpbnQgbnJfdGVzdF9jYXNlcztcbiBcbiBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpXG4ge1xuLVx0aW50IGhwYWdlX3BtZF9vcmRlcjtcbiBcdHN0cnVjdCB0aHBfc2V0dGluZ3MgZGVmYXVsdF9zZXR0aW5ncyA9IHtcbiBcdFx0LnRocF9lbmFibGVkID0gVEhQX01BRFZJU0UsXG4gXHRcdC50aHBfZGVmcmFnID0gVEhQX0RFRlJBR19BTFdBWVMsXG5AQCAtMTI2NiwxMCArMTM2Nyw2IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndilcbiBcdGlmICghdGhwX2lzX2VuYWJsZWQoKSlcbiBcdFx0a3NmdF9leGl0X3NraXAoXCJUcmFuc3BhcmVudCBIdWdlcGFnZXMgbm90IGF2YWlsYWJsZVxcblwiKTtcbiBcbi1cdHBhcnNlX3Rlc3RfdHlwZShhcmdjLCBhcmd2KTtcbi1cbi1cdHNldGJ1ZihzdGRvdXQsIE5VTEwpO1xuLVxuIFx0cGFnZV9zaXplID0gZ2V0cGFnZXNpemUoKTtcbiBcdGhwYWdlX3BtZF9zaXplID0gcmVhZF9wbWRfcGFnZXNpemUoKTtcbiBcdGlmICghaHBhZ2VfcG1kX3NpemUpXG5AQCAtMTI3Nyw2ICsxMzc0LDEwIEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndilcbiBcdGhwYWdlX3BtZF9uciA9IGhwYWdlX3BtZF9zaXplIC8gcGFnZV9zaXplO1xuIFx0aHBhZ2VfcG1kX29yZGVyID0gX19idWlsdGluX2N0eihocGFnZV9wbWRfbnIpO1xuIFxuK1x0cGFyc2VfdGVzdF90eXBlKGFyZ2MsIGFyZ3YpO1xuK1xuK1x0c2V0YnVmKHN0ZG91dCwgTlVMTCk7XG4rXG4gXHRkZWZhdWx0X3NldHRpbmdzLmtodWdlcGFnZWQubWF4X3B0ZXNfbm9uZSA9IGhwYWdlX3BtZF9uciAtIDE7XG4gXHRkZWZhdWx0X3NldHRpbmdzLmtodWdlcGFnZWQubWF4X3B0ZXNfc3dhcCA9IGhwYWdlX3BtZF9uciAvIDg7XG4gXHRkZWZhdWx0X3NldHRpbmdzLmtodWdlcGFnZWQubWF4X3B0ZXNfc2hhcmVkID0gaHBhZ2VfcG1kX25yIC8gMjtcbkBAIC0xMjk0LDYgKzEzOTUsNyBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpXG4gXHRURVNUKGNvbGxhcHNlX2Z1bGwsIGtodWdlcGFnZWRfY29udGV4dCwgcmVhZF93cml0ZV9maWxlX3JlYWRfb3BzKTtcbiBcdFRFU1QoY29sbGFwc2VfZnVsbCwga2h1Z2VwYWdlZF9jb250ZXh0LCByZWFkX3dyaXRlX2ZpbGVfd3JpdGVfb3BzKTtcbiBcdFRFU1QoY29sbGFwc2VfZnVsbCwga2h1Z2VwYWdlZF9jb250ZXh0LCBzaG1lbV9vcHMpO1xuK1x0VEVTVChjb2xsYXBzZV9mdWxsLCBtdGhwX2todWdlcGFnZWRfY29udGV4dCwgYW5vbl9vcHMpO1xuIFx0VEVTVChjb2xsYXBzZV9mdWxsLCBtYWR2aXNlX2NvbnRleHQsIGFub25fb3BzKTtcbiBcdFRFU1QoY29sbGFwc2VfZnVsbCwgbWFkdmlzZV9jb250ZXh0LCByZWFkX29ubHlfZmlsZV9vcHMpO1xuIFx0VEVTVChjb2xsYXBzZV9mdWxsLCBtYWR2aXNlX2NvbnRleHQsIHJlYWRfd3JpdGVfZmlsZV9yZWFkX29wcyk7XG5AQCAtMTMwMSw4ICsxNDAzLDExIEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndilcbiBcdFRFU1QoY29sbGFwc2VfZnVsbCwgbWFkdmlzZV9jb250ZXh0LCBzaG1lbV9vcHMpO1xuIFxuIFx0VEVTVChjb2xsYXBzZV9lbXB0eSwga2h1Z2VwYWdlZF9jb250ZXh0LCBhbm9uX29wcyk7XG4rXHRURVNUKGNvbGxhcHNlX2VtcHR5LCBtdGhwX2todWdlcGFnZWRfY29udGV4dCwgYW5vbl9vcHMpO1xuIFx0VEVTVChjb2xsYXBzZV9lbXB0eSwgbWFkdmlzZV9jb250ZXh0LCBhbm9uX29wcyk7XG4gXG4rXHRURVNUKGNvbGxhcHNlX3NpbmdsZV9tdGhwLCBtdGhwX2todWdlcGFnZWRfY29udGV4dCwgYW5vbl9vcHMpO1xuK1xuIFx0VEVTVChjb2xsYXBzZV9zaW5nbGVfcHRlX2VudHJ5LCBraHVnZXBhZ2VkX2NvbnRleHQsIGFub25fb3BzKTtcbiBcdFRFU1QoY29sbGFwc2Vfc2luZ2xlX3B0ZV9lbnRyeSwga2h1Z2VwYWdlZF9jb250ZXh0LCByZWFkX29ubHlfZmlsZV9vcHMpO1xuIFx0VEVTVChjb2xsYXBzZV9zaW5nbGVfcHRlX2VudHJ5LCBraHVnZXBhZ2VkX2NvbnRleHQsIHJlYWRfd3JpdGVfZmlsZV9yZWFkX29wcyk7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGFnZW1hcF9pb2N0bC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGFnZW1hcF9pb2N0bC5jXG5pbmRleCAxYjJkZmZjYzk5OWIwLi5jZmQxOTg3MzM5YzEzIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGFnZW1hcF9pb2N0bC5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wYWdlbWFwX2lvY3RsLmNcbkBAIC0xMDg1LDcgKzEwODUsNyBAQCBzdGF0aWMgdm9pZCB1bnBvcHVsYXRlZF93cml0dGVuX3Rlc3QoY29uc3QgY2hhciAqbmFtZSwgY2hhciAqbWVtLCBsb25nIHNpemUsXG4gXHRtZW1zZXQobWVtLCAxLCBzaXplKTtcbiBcdGlmICh1c2VfdGhwIFx1MDAyNlx1MDAyNlxuIFx0ICAgIChtYWR2aXNlKG1lbSwgc2l6ZSwgTUFEVl9DT0xMQVBTRSkgfHxcbi1cdCAgICAgIWNoZWNrX2h1Z2VfYW5vbihtZW0sIHNpemUgLyBocGFnZV9zaXplLCBocGFnZV9zaXplKSkpIHtcbitcdCAgICAgIWNoZWNrX2h1Z2VfYW5vbihtZW0sIHNpemUsIHNpemUgLyBocGFnZV9zaXplLCBocGFnZV9zaXplKSkpIHtcbiBcdFx0a3NmdF90ZXN0X3Jlc3VsdF9za2lwKFwiJXMgY291bGQgbm90IGZvcm0gYSBUSFBcXG5cIiwgbmFtZSk7XG4gXHRcdGdvdG8gb3V0O1xuIFx0fVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ByY3RsX3RocF9kaXNhYmxlLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wcmN0bF90aHBfZGlzYWJsZS5jXG5pbmRleCBkOGQ5ZDFkZTU3YjhiLi44MmM2ZTk2ZWE2ZWIzIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcHJjdGxfdGhwX2Rpc2FibGUuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcHJjdGxfdGhwX2Rpc2FibGUuY1xuQEAgLTY3LDcgKzY3LDcgQEAgc3RhdGljIGludCB0ZXN0X21tYXBfdGhwKGVudW0gdGhwX2NvbGxhcHNlX3R5cGUgbWFkdmlzZV9idWYsIHNpemVfdCBwbWRzaXplKVxuIFx0LyogSEFDSzogbWFrZSBzdXJlIHdlIGhhdmUgYSBzZXBhcmF0ZSBWTUEgdGhhdCB3ZSBjYW4gY2hlY2sgcmVsaWFibHkuICovXG4gXHRtcHJvdGVjdChtZW0sIHBtZHNpemUsIFBST1RfUkVBRCk7XG4gXG4tXHRyZXQgPSBjaGVja19odWdlX2Fub24obWVtLCAxLCBwbWRzaXplKTtcbitcdHJldCA9IGNoZWNrX2h1Z2VfYW5vbihtZW0sIHBtZHNpemUsIDEsIHBtZHNpemUpO1xuIFx0bXVubWFwKG1tYXBfbWVtLCBtbWFwX3NpemUpO1xuIFx0cmV0dXJuIHJldDtcbiB9XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcnVuX3ZtdGVzdHMuc2ggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ydW5fdm10ZXN0cy5zaFxuaW5kZXggNjg3ZDExNWUzYmQ4MC4uZDA5ZjlmNmEzODRlZSAxMDA3NTVcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3J1bl92bXRlc3RzLnNoXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ydW5fdm10ZXN0cy5zaFxuQEAgLTQxMCw2ICs0MTAsOCBAQCBDQVRFR09SWT1cInRocFwiIHJ1bl90ZXN0IC4va2h1Z2VwYWdlZCBhbGw6c2htZW1cbiBcbiBDQVRFR09SWT1cInRocFwiIHJ1bl90ZXN0IC4va2h1Z2VwYWdlZCAtcyA0IGFsbDpzaG1lbVxuIFxuK0NBVEVHT1JZPVwidGhwXCIgcnVuX3Rlc3QgLi9raHVnZXBhZ2VkIC1jIDQgbXRocF9raHVnZXBhZ2VkOmFub25cbitcbiAjIFRyeSB0byBjcmVhdGUgWEZTIGlmIG5vdCBwcm92aWRlZFxuIGlmIFsgLXogXCIke1NQTElUX0hVR0VfUEFHRV9URVNUX1hGU19QQVRIfVwiIF07IHRoZW5cbiAgICAgaWYgdGVzdF9zZWxlY3RlZCBcInRocFwiOyB0aGVuXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vc29mdC1kaXJ0eS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vc29mdC1kaXJ0eS5jXG5pbmRleCBmYjE4NjRhNjhlMWM2Li5lMTk4ZmFjZjc4YmI1IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vc29mdC1kaXJ0eS5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9zb2Z0LWRpcnR5LmNcbkBAIC0xMDMsNyArMTAzLDcgQEAgc3RhdGljIHZvaWQgdGVzdF9odWdlcGFnZShpbnQgcGFnZW1hcF9mZCwgaW50IHBhZ2VzaXplKVxuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgaHBhZ2VfbGVuOyBpKyspXG4gXHRcdG1hcFtpXSA9IChjaGFyKWk7XG4gXG4tXHRpZiAoY2hlY2tfaHVnZV9hbm9uKG1hcCwgMSwgaHBhZ2VfbGVuKSkge1xuK1x0aWYgKGNoZWNrX2h1Z2VfYW5vbihtYXAsIGhwYWdlX2xlbiwgMSwgaHBhZ2VfbGVuKSkge1xuIFx0XHRrc2Z0X3Rlc3RfcmVzdWx0X3Bhc3MoXCJUZXN0ICVzIGh1Z2UgcGFnZSBhbGxvY2F0aW9uXFxuXCIsIF9fZnVuY19fKTtcbiBcbiBcdFx0Y2xlYXJfc29mdGRpcnR5KCk7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vc3BsaXRfaHVnZV9wYWdlX3Rlc3QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3NwbGl0X2h1Z2VfcGFnZV90ZXN0LmNcbmluZGV4IDMyYjk5MTQ3MmY3NDQuLjg2YTYwMzY5MjgyNjEgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9zcGxpdF9odWdlX3BhZ2VfdGVzdC5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9zcGxpdF9odWdlX3BhZ2VfdGVzdC5jXG5AQCAtMTA0LDEyOSArMTA0LDYgQEAgc3RhdGljIGJvb2wgaXNfYmFja2VkX2J5X2ZvbGlvKGNoYXIgKnZhZGRyLCBpbnQgb3JkZXIsIGludCBwYWdlbWFwX2ZkLFxuIFx0cmV0dXJuIGZhbHNlO1xuIH1cbiBcbi1zdGF0aWMgaW50IHZhZGRyX3BhZ2VmbGFnc19nZXQoY2hhciAqdmFkZHIsIGludCBwYWdlbWFwX2ZkLCBpbnQga3BhZ2VmbGFnc19mZCxcbi1cdFx0dWludDY0X3QgKmZsYWdzKVxuLXtcbi1cdHVuc2lnbmVkIGxvbmcgcGZuO1xuLVxuLVx0cGZuID0gcGFnZW1hcF9nZXRfcGZuKHBhZ2VtYXBfZmQsIHZhZGRyKTtcbi1cbi1cdC8qIG5vbi1wcmVzZW50IFBGTiAqL1xuLVx0aWYgKHBmbiA9PSAtMVVMKVxuLVx0XHRyZXR1cm4gMTtcbi1cbi1cdGlmIChwYWdlZmxhZ3NfZ2V0KHBmbiwga3BhZ2VmbGFnc19mZCwgZmxhZ3MpKVxuLVx0XHRyZXR1cm4gLTE7XG4tXG4tXHRyZXR1cm4gMDtcbi19XG4tXG4tLypcbi0gKiBnYXRoZXJfYWZ0ZXJfc3BsaXRfZm9saW9fb3JkZXJzIC0gc2NhbiB0aHJvdWdoIFt2YWRkcl9zdGFydCwgbGVuKSBhbmQgcmVjb3JkXG4tICogZm9saW8gb3JkZXJzXG4tICpcbi0gKiBAdmFkZHJfc3RhcnQ6IHN0YXJ0IHZhZGRyXG4tICogQGxlbjogcmFuZ2UgbGVuZ3RoXG4tICogQHBhZ2VtYXBfZmQ6IGZpbGUgZGVzY3JpcHRvciB0byAvcHJvYy9cdTAwM2NwaWRcdTAwM2UvcGFnZW1hcFxuLSAqIEBrcGFnZWZsYWdzX2ZkOiBmaWxlIGRlc2NyaXB0b3IgdG8gL3Byb2Mva3BhZ2VmbGFnc1xuLSAqIEBvcmRlcnM6IG91dHB1dCBmb2xpbyBvcmRlciBhcnJheVxuLSAqIEBucl9vcmRlcnM6IGZvbGlvIG9yZGVyIGFycmF5IHNpemVcbi0gKlxuLSAqIGdhdGhlcl9hZnRlcl9zcGxpdF9mb2xpb19vcmRlcnMoKSBzY2FuIHRocm91Z2ggW3ZhZGRyX3N0YXJ0LCBsZW4pIGFuZCBjaGVja1xuLSAqIGFsbCBmb2xpb3Mgd2l0aGluIHRoZSByYW5nZSBhbmQgcmVjb3JkIHRoZWlyIG9yZGVycy4gQWxsIG9yZGVyLTAgcGFnZXMgd2lsbFxuLSAqIGJlIHJlY29yZGVkLiBOb24tcHJlc2VudCB2YWRkciBpcyBza2lwcGVkLlxuLSAqXG4tICogTk9URTogdGhlIGZ1bmN0aW9uIGlzIHVzZWQgdG8gY2hlY2sgZm9saW8gb3JkZXJzIGFmdGVyIGEgc3BsaXQgaXMgcGVyZm9ybWVkLFxuLSAqIHNvIGl0IGFzc3VtZXMgW3ZhZGRyX3N0YXJ0LCBsZW4pIGZ1bGx5IG1hcHMgdG8gYWZ0ZXItc3BsaXQgZm9saW9zIHdpdGhpbiB0aGF0XG4tICogcmFuZ2UuXG4tICpcbi0gKiBSZXR1cm46IDAgLSBubyBlcnJvciwgLTEgLSB1bmhhbmRsZWQgY2FzZXNcbi0gKi9cbi1zdGF0aWMgaW50IGdhdGhlcl9hZnRlcl9zcGxpdF9mb2xpb19vcmRlcnMoY2hhciAqdmFkZHJfc3RhcnQsIHNpemVfdCBsZW4sXG4tXHRcdGludCBwYWdlbWFwX2ZkLCBpbnQga3BhZ2VmbGFnc19mZCwgaW50IG9yZGVyc1tdLCBpbnQgbnJfb3JkZXJzKVxuLXtcbi1cdHVpbnQ2NF90IHBhZ2VfZmxhZ3MgPSAwO1xuLVx0aW50IGN1cl9vcmRlciA9IC0xO1xuLVx0Y2hhciAqdmFkZHI7XG4tXG4tXHRpZiAocGFnZW1hcF9mZCA9PSAtMSB8fCBrcGFnZWZsYWdzX2ZkID09IC0xKVxuLVx0XHRyZXR1cm4gLTE7XG4tXHRpZiAoIW9yZGVycylcbi1cdFx0cmV0dXJuIC0xO1xuLVx0aWYgKG5yX29yZGVycyBcdTAwM2M9IDApXG4tXHRcdHJldHVybiAtMTtcbi1cbi1cdGZvciAodmFkZHIgPSB2YWRkcl9zdGFydDsgdmFkZHIgXHUwMDNjIHZhZGRyX3N0YXJ0ICsgbGVuOykge1xuLVx0XHRjaGFyICpuZXh0X2ZvbGlvX3ZhZGRyO1xuLVx0XHRpbnQgc3RhdHVzO1xuLVxuLVx0XHRzdGF0dXMgPSB2YWRkcl9wYWdlZmxhZ3NfZ2V0KHZhZGRyLCBwYWdlbWFwX2ZkLCBrcGFnZWZsYWdzX2ZkLFxuLVx0XHRcdFx0XHRcdTAwMjZwYWdlX2ZsYWdzKTtcbi1cdFx0aWYgKHN0YXR1cyBcdTAwM2MgMClcbi1cdFx0XHRyZXR1cm4gLTE7XG4tXG4tXHRcdC8qIHNraXAgbm9uIHByZXNlbnQgdmFkZHIgKi9cbi1cdFx0aWYgKHN0YXR1cyA9PSAxKSB7XG4tXHRcdFx0dmFkZHIgKz0gcHNpemUoKTtcbi1cdFx0XHRjb250aW51ZTtcbi1cdFx0fVxuLVxuLVx0XHQvKiBhbGwgb3JkZXItMCBwYWdlcyB3aXRoIHBvc3NpYmxlIGZhbHNlIHBvc3RpdmUgKG5vbiBmb2xpbykgKi9cbi1cdFx0aWYgKCEocGFnZV9mbGFncyBcdTAwMjYgKEtQRl9DT01QT1VORF9IRUFEIHwgS1BGX0NPTVBPVU5EX1RBSUwpKSkge1xuLVx0XHRcdG9yZGVyc1swXSsrO1xuLVx0XHRcdHZhZGRyICs9IHBzaXplKCk7XG4tXHRcdFx0Y29udGludWU7XG4tXHRcdH1cbi1cbi1cdFx0Lyogc2tpcCBub24gdGhwIGNvbXBvdW5kIHBhZ2VzICovXG4tXHRcdGlmICghKHBhZ2VfZmxhZ3MgXHUwMDI2IEtQRl9USFApKSB7XG4tXHRcdFx0dmFkZHIgKz0gcHNpemUoKTtcbi1cdFx0XHRjb250aW51ZTtcbi1cdFx0fVxuLVxuLVx0XHQvKiB2cG4gcG9pbnRzIHRvIHBhcnQgb2YgYSBUSFAgYXQgdGhpcyBwb2ludCAqL1xuLVx0XHRpZiAocGFnZV9mbGFncyBcdTAwMjYgS1BGX0NPTVBPVU5EX0hFQUQpXG4tXHRcdFx0Y3VyX29yZGVyID0gMTtcbi1cdFx0ZWxzZSB7XG4tXHRcdFx0dmFkZHIgKz0gcHNpemUoKTtcbi1cdFx0XHRjb250aW51ZTtcbi1cdFx0fVxuLVxuLVx0XHRuZXh0X2ZvbGlvX3ZhZGRyID0gdmFkZHIgKyAoMVVMIFx1MDAzY1x1MDAzYyAoY3VyX29yZGVyICsgcHNoaWZ0KCkpKTtcbi1cbi1cdFx0aWYgKG5leHRfZm9saW9fdmFkZHIgXHUwMDNlPSB2YWRkcl9zdGFydCArIGxlbilcbi1cdFx0XHRicmVhaztcbi1cbi1cdFx0d2hpbGUgKChzdGF0dXMgPSB2YWRkcl9wYWdlZmxhZ3NfZ2V0KG5leHRfZm9saW9fdmFkZHIsXG4tXHRcdFx0XHRcdFx0ICAgICBwYWdlbWFwX2ZkLCBrcGFnZWZsYWdzX2ZkLFxuLVx0XHRcdFx0XHRcdCAgICAgXHUwMDI2cGFnZV9mbGFncykpIFx1MDAzZT0gMCkge1xuLVx0XHRcdC8qXG4tXHRcdFx0ICogbm9uIHByZXNlbnQgdmFkZHIsIG5leHQgY29tcG91bmQgaGVhZCBwYWdlLCBvclxuLVx0XHRcdCAqIG9yZGVyLTAgcGFnZVxuLVx0XHRcdCAqL1xuLVx0XHRcdGlmIChzdGF0dXMgPT0gMSB8fFxuLVx0XHRcdCAgICAocGFnZV9mbGFncyBcdTAwMjYgS1BGX0NPTVBPVU5EX0hFQUQpIHx8XG4tXHRcdFx0ICAgICEocGFnZV9mbGFncyBcdTAwMjYgKEtQRl9DT01QT1VORF9IRUFEIHwgS1BGX0NPTVBPVU5EX1RBSUwpKSkge1xuLVx0XHRcdFx0aWYgKGN1cl9vcmRlciBcdTAwM2MgbnJfb3JkZXJzKSB7XG4tXHRcdFx0XHRcdG9yZGVyc1tjdXJfb3JkZXJdKys7XG4tXHRcdFx0XHRcdGN1cl9vcmRlciA9IC0xO1xuLVx0XHRcdFx0XHR2YWRkciA9IG5leHRfZm9saW9fdmFkZHI7XG4tXHRcdFx0XHR9XG4tXHRcdFx0XHRicmVhaztcbi1cdFx0XHR9XG4tXG4tXHRcdFx0Y3VyX29yZGVyKys7XG4tXHRcdFx0bmV4dF9mb2xpb192YWRkciA9IHZhZGRyICsgKDFVTCBcdTAwM2NcdTAwM2MgKGN1cl9vcmRlciArIHBzaGlmdCgpKSk7XG4tXHRcdH1cbi1cbi1cdFx0aWYgKHN0YXR1cyBcdTAwM2MgMClcbi1cdFx0XHRyZXR1cm4gc3RhdHVzO1xuLVx0fVxuLVx0aWYgKGN1cl9vcmRlciBcdTAwM2UgMCBcdTAwMjZcdTAwMjYgY3VyX29yZGVyIFx1MDAzYyBucl9vcmRlcnMpXG4tXHRcdG9yZGVyc1tjdXJfb3JkZXJdKys7XG4tXHRyZXR1cm4gMDtcbi19XG4tXG4gc3RhdGljIGludCBjaGVja19hZnRlcl9zcGxpdF9mb2xpb19vcmRlcnMoY2hhciAqdmFkZHJfc3RhcnQsIHNpemVfdCBsZW4sXG4gXHRcdGludCBwYWdlbWFwX2ZkLCBpbnQga3BhZ2VmbGFnc19mZCwgaW50IG9yZGVyc1tdLCBpbnQgbnJfb3JkZXJzKVxuIHtcbkBAIC0yNDAsNyArMTE3LDcgQEAgc3RhdGljIGludCBjaGVja19hZnRlcl9zcGxpdF9mb2xpb19vcmRlcnMoY2hhciAqdmFkZHJfc3RhcnQsIHNpemVfdCBsZW4sXG4gXHRcdGtzZnRfZXhpdF9mYWlsX21zZyhcIkNhbm5vdCBhbGxvY2F0ZSBtZW1vcnkgZm9yIHZhZGRyX29yZGVyc1wiKTtcbiBcbiBcdG1lbXNldCh2YWRkcl9vcmRlcnMsIDAsIHNpemVvZihpbnQpICogbnJfb3JkZXJzKTtcbi1cdHN0YXR1cyA9IGdhdGhlcl9hZnRlcl9zcGxpdF9mb2xpb19vcmRlcnModmFkZHJfc3RhcnQsIGxlbiwgcGFnZW1hcF9mZCxcbitcdHN0YXR1cyA9IGdhdGhlcl9mb2xpb19vcmRlcnModmFkZHJfc3RhcnQsIGxlbiwgcGFnZW1hcF9mZCxcbiBcdFx0XHRcdCAgICAga3BhZ2VmbGFnc19mZCwgdmFkZHJfb3JkZXJzLCBucl9vcmRlcnMpO1xuIFx0aWYgKHN0YXR1cylcbiBcdFx0a3NmdF9leGl0X2ZhaWxfbXNnKFwiZ2F0aGVyIGZvbGlvIGluZm8gZmFpbGVkXFxuXCIpO1xuQEAgLTI5Niw3ICsxNzMsNyBAQCBzdGF0aWMgdm9pZCB2ZXJpZnlfcnNzX2Fub25fc3BsaXRfaHVnZV9wYWdlX2FsbF96ZXJvZXMoY2hhciAqb25lX3BhZ2UsIGludCBucl9ocFxuIFx0dW5zaWduZWQgbG9uZyByc3NfYW5vbl9iZWZvcmUsIHJzc19hbm9uX2FmdGVyO1xuIFx0c2l6ZV90IGk7XG4gXG4tXHRpZiAoIWNoZWNrX2h1Z2VfYW5vbihvbmVfcGFnZSwgbnJfaHBhZ2VzLCBwbWRfcGFnZXNpemUpKVxuK1x0aWYgKCFjaGVja19odWdlX2Fub24ob25lX3BhZ2UsIG5yX2hwYWdlcyAqIHBtZF9wYWdlc2l6ZSwgbnJfaHBhZ2VzLCBwbWRfcGFnZXNpemUpKVxuIFx0XHRrc2Z0X2V4aXRfZmFpbF9tc2coXCJObyBUSFAgaXMgYWxsb2NhdGVkXFxuXCIpO1xuIFxuIFx0cnNzX2Fub25fYmVmb3JlID0gcnNzX2Fub24oKTtcbkBAIC0zMTEsNyArMTg4LDcgQEAgc3RhdGljIHZvaWQgdmVyaWZ5X3Jzc19hbm9uX3NwbGl0X2h1Z2VfcGFnZV9hbGxfemVyb2VzKGNoYXIgKm9uZV9wYWdlLCBpbnQgbnJfaHBcbiBcdFx0aWYgKG9uZV9wYWdlW2ldICE9IChjaGFyKTApXG4gXHRcdFx0a3NmdF9leGl0X2ZhaWxfbXNnKFwiJWxkIGJ5dGUgY29ycnVwdGVkXFxuXCIsIGkpO1xuIFxuLVx0aWYgKCFjaGVja19odWdlX2Fub24ob25lX3BhZ2UsIDAsIHBtZF9wYWdlc2l6ZSkpXG4rXHRpZiAoIWNoZWNrX2h1Z2VfYW5vbihvbmVfcGFnZSwgbnJfaHBhZ2VzICogcG1kX3BhZ2VzaXplLCAwLCBwbWRfcGFnZXNpemUpKVxuIFx0XHRrc2Z0X2V4aXRfZmFpbF9tc2coXCJTdGlsbCBBbm9uSHVnZVBhZ2VzIG5vdCBzcGxpdFxcblwiKTtcbiBcbiBcdHJzc19hbm9uX2FmdGVyID0gcnNzX2Fub24oKTtcbkBAIC0zNDcsNyArMjI0LDcgQEAgc3RhdGljIHZvaWQgc3BsaXRfcG1kX3RocF90b19vcmRlcihpbnQgb3JkZXIpXG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBsZW47IGkrKylcbiBcdFx0b25lX3BhZ2VbaV0gPSAoY2hhcilpO1xuIFxuLVx0aWYgKCFjaGVja19odWdlX2Fub24ob25lX3BhZ2UsIDQsIHBtZF9wYWdlc2l6ZSkpXG4rXHRpZiAoIWNoZWNrX2h1Z2VfYW5vbihvbmVfcGFnZSwgNCAqIHBtZF9wYWdlc2l6ZSwgNCwgcG1kX3BhZ2VzaXplKSlcbiBcdFx0a3NmdF9leGl0X2ZhaWxfbXNnKFwiTm8gVEhQIGlzIGFsbG9jYXRlZFxcblwiKTtcbiBcbiBcdC8qIHNwbGl0IGFsbCBUSFBzICovXG5AQCAtMzY2LDcgKzI0Myw3IEBAIHN0YXRpYyB2b2lkIHNwbGl0X3BtZF90aHBfdG9fb3JkZXIoaW50IG9yZGVyKVxuIFx0XHRcdFx0XHQgICAocG1kX29yZGVyICsgMSkpKVxuIFx0XHRrc2Z0X2V4aXRfZmFpbF9tc2coXCJVbmV4cGVjdGVkIFRIUCBzcGxpdFxcblwiKTtcbiBcbi1cdGlmICghY2hlY2tfaHVnZV9hbm9uKG9uZV9wYWdlLCAwLCBwbWRfcGFnZXNpemUpKVxuK1x0aWYgKCFjaGVja19odWdlX2Fub24ob25lX3BhZ2UsIDQgKiBwbWRfcGFnZXNpemUsIDAsIHBtZF9wYWdlc2l6ZSkpXG4gXHRcdGtzZnRfZXhpdF9mYWlsX21zZyhcIlN0aWxsIEFub25IdWdlUGFnZXMgbm90IHNwbGl0XFxuXCIpO1xuIFxuIFx0a3NmdF90ZXN0X3Jlc3VsdF9wYXNzKFwiU3BsaXQgaHVnZSBwYWdlcyB0byBvcmRlciAlZCBzdWNjZXNzZnVsXFxuXCIsIG9yZGVyKTtcbkBAIC0zOTMsNyArMjcwLDcgQEAgc3RhdGljIHZvaWQgc3BsaXRfcHRlX21hcHBlZF90aHAodm9pZClcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHRocF9hcmVhX3NpemU7IGkrKylcbiBcdFx0dGhwX2FyZWFbaV0gPSAoY2hhcilpO1xuIFxuLVx0aWYgKCFjaGVja19odWdlX2Fub24odGhwX2FyZWEsIG5yX3RocHMsIHBtZF9wYWdlc2l6ZSkpIHtcbitcdGlmICghY2hlY2tfaHVnZV9hbm9uKHRocF9hcmVhLCBucl90aHBzICogcG1kX3BhZ2VzaXplLCBucl90aHBzLCBwbWRfcGFnZXNpemUpKSB7XG4gXHRcdGtzZnRfdGVzdF9yZXN1bHRfc2tpcChcIk5vdCBhbGwgVEhQcyBhbGxvY2F0ZWRcXG5cIik7XG4gXHRcdGdvdG8gb3V0O1xuIFx0fVxuQEAgLTY1Nyw3ICs1MzQsNyBAQCBzdGF0aWMgaW50IGNyZWF0ZV9wYWdlY2FjaGVfdGhwX2FuZF9mZChjb25zdCBjaGFyICp0ZXN0ZmlsZSwgc2l6ZV90IGZkX3NpemUsXG4gXG4gXHRmb3JjZV9yZWFkX3BhZ2VzKCphZGRyLCBmZF9zaXplIC8gcG1kX3BhZ2VzaXplLCBwbWRfcGFnZXNpemUpO1xuIFxuLVx0aWYgKCFjaGVja19odWdlX2ZpbGUoKmFkZHIsIGZkX3NpemUgLyBwbWRfcGFnZXNpemUsIHBtZF9wYWdlc2l6ZSkpIHtcbitcdGlmICghY2hlY2tfaHVnZV9maWxlKCphZGRyLCBmZF9zaXplLCBmZF9zaXplIC8gcG1kX3BhZ2VzaXplLCBwbWRfcGFnZXNpemUpKSB7XG4gXHRcdGtzZnRfcHJpbnRfbXNnKFwiTm8gbGFyZ2UgcGFnZWNhY2hlIGZvbGlvIGdlbmVyYXRlZCwgcGxlYXNlIHByb3ZpZGUgYSBmaWxlc3lzdGVtIHN1cHBvcnRpbmcgbGFyZ2UgZm9saW9cXG5cIik7XG4gXHRcdG11bm1hcCgqYWRkciwgZmRfc2l6ZSk7XG4gXHRcdGNsb3NlKCpmZCk7XG5AQCAtNzM1LDcgKzYxMiw3IEBAIHN0YXRpYyB2b2lkIHNwbGl0X3RocF9pbl9wYWdlY2FjaGVfdG9fb3JkZXJfYXQoc2l6ZV90IGZkX3NpemUsXG4gXHRcdGdvdG8gb3V0O1xuIFx0fVxuIFxuLVx0aWYgKCFjaGVja19odWdlX2ZpbGUoYWRkciwgMCwgcG1kX3BhZ2VzaXplKSkge1xuK1x0aWYgKCFjaGVja19odWdlX2ZpbGUoYWRkciwgZmRfc2l6ZSwgMCwgcG1kX3BhZ2VzaXplKSkge1xuIFx0XHRrc2Z0X3ByaW50X21zZyhcIlN0aWxsIEZpbGVQbWRNYXBwZWQgbm90IHNwbGl0XFxuXCIpO1xuIFx0XHRlcnIgPSBFWElUX0ZBSUxVUkU7XG4gXHRcdGdvdG8gb3V0O1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3VmZmQtY29tbW9uLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS91ZmZkLWNvbW1vbi5jXG5pbmRleCBmNDhmNWQ0NTk0YWIwLi4xZmI5NjdlZjQ5ODU0IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdWZmZC1jb21tb24uY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdWZmZC1jb21tb24uY1xuQEAgLTE5NCw3ICsxOTQsOSBAQCBzdGF0aWMgdm9pZCBzaG1lbV9hbGlhc19tYXBwaW5nKHVmZmRfZ2xvYmFsX3Rlc3Rfb3B0c190ICpnb3B0cywgX191NjQgKnN0YXJ0LFxuIFxuIHN0YXRpYyB2b2lkIHNobWVtX2NoZWNrX3BtZF9tYXBwaW5nKHVmZmRfZ2xvYmFsX3Rlc3Rfb3B0c190ICpnb3B0cywgdm9pZCAqcCwgaW50IGV4cGVjdF9ucl9ocGFnZXMpXG4ge1xuLVx0aWYgKCFjaGVja19odWdlX3NobWVtKGdvcHRzLVx1MDAzZWFyZWFfZHN0X2FsaWFzLCBleHBlY3RfbnJfaHBhZ2VzLFxuK1x0c2l6ZV90IGxlbiA9IGV4cGVjdF9ucl9ocGFnZXMgKiByZWFkX3BtZF9wYWdlc2l6ZSgpO1xuK1xuK1x0aWYgKCFjaGVja19odWdlX3NobWVtKGdvcHRzLVx1MDAzZWFyZWFfZHN0X2FsaWFzLCBsZW4sIGV4cGVjdF9ucl9ocGFnZXMsXG4gXHRcdFx0ICAgICAgcmVhZF9wbWRfcGFnZXNpemUoKSkpXG4gXHRcdGVycihcIkRpZCBub3QgZmluZCBleHBlY3RlZCAlZCBudW1iZXIgb2YgaHVnZXBhZ2VzXCIsXG4gXHRcdCAgICBleHBlY3RfbnJfaHBhZ2VzKTtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS92bV91dGlsLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS92bV91dGlsLmNcbmluZGV4IGVmMWVhMTE5ODFhNzQuLjEzYjVjZmY3ZGZlMzEgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS92bV91dGlsLmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ZtX3V0aWwuY1xuQEAgLTE1LDYgKzE1LDkgQEBcbiAjZGVmaW5lIFNNQVBfRklMRV9QQVRIIFwiL3Byb2Mvc2VsZi9zbWFwc1wiXG4gI2RlZmluZSBTVEFUVVNfRklMRV9QQVRIIFwiL3Byb2Mvc2VsZi9zdGF0dXNcIlxuICNkZWZpbmUgTUFYX0xJTkVfTEVOR1RIIDUwMFxuKyNkZWZpbmUgUEFHRU1BUF9QQVRIIFwiL3Byb2Mvc2VsZi9wYWdlbWFwXCJcbisjZGVmaW5lIEtQQUdFRkxBR1NfUEFUSCBcIi9wcm9jL2twYWdlZmxhZ3NcIlxuKyNkZWZpbmUgTUFYX05SX09SREVSUyAyMFxuIFxuIHVuc2lnbmVkIGludCBfX3BhZ2Vfc2l6ZTtcbiB1bnNpZ25lZCBpbnQgX19wYWdlX3NoaWZ0O1xuQEAgLTE5NCw2ICsxOTcsMTI1IEBAIHVuc2lnbmVkIGxvbmcgcnNzX2Fub24odm9pZClcbiBcdHJldHVybiByc3NfYW5vbjtcbiB9XG4gXG4rc3RhdGljIGludCB2YWRkcl9wYWdlZmxhZ3NfZ2V0KGNoYXIgKnZhZGRyLCBpbnQgcGFnZW1hcF9mZCwgaW50IGtwYWdlZmxhZ3NfZmQsXG4rXHRcdHVpbnQ2NF90ICpmbGFncylcbit7XG4rXHR1bnNpZ25lZCBsb25nIHBmbjtcbitcbitcdHBmbiA9IHBhZ2VtYXBfZ2V0X3BmbihwYWdlbWFwX2ZkLCB2YWRkcik7XG4rXG4rXHQvKiBub24tcHJlc2VudCBQRk4gKi9cbitcdGlmIChwZm4gPT0gLTFVTClcbitcdFx0cmV0dXJuIDE7XG4rXG4rXHRpZiAocGFnZWZsYWdzX2dldChwZm4sIGtwYWdlZmxhZ3NfZmQsIGZsYWdzKSlcbitcdFx0cmV0dXJuIC0xO1xuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuKy8qXG4rICogZ2F0aGVyX2ZvbGlvX29yZGVycyAtIHNjYW4gdGhyb3VnaCBbdmFkZHJfc3RhcnQsIGxlbikgYW5kIHJlY29yZFxuKyAqIGZvbGlvIG9yZGVyc1xuKyAqXG4rICogQHZhZGRyX3N0YXJ0OiBzdGFydCB2YWRkclxuKyAqIEBsZW46IHJhbmdlIGxlbmd0aFxuKyAqIEBwYWdlbWFwX2ZkOiBmaWxlIGRlc2NyaXB0b3IgdG8gL3Byb2MvXHUwMDNjcGlkXHUwMDNlL3BhZ2VtYXBcbisgKiBAa3BhZ2VmbGFnc19mZDogZmlsZSBkZXNjcmlwdG9yIHRvIC9wcm9jL2twYWdlZmxhZ3NcbisgKiBAb3JkZXJzOiBvdXRwdXQgZm9saW8gb3JkZXIgYXJyYXlcbisgKiBAbnJfb3JkZXJzOiBmb2xpbyBvcmRlciBhcnJheSBzaXplXG4rICpcbisgKiBnYXRoZXJfZm9saW9fb3JkZXJzKCkgc2NhbiB0aHJvdWdoIFt2YWRkcl9zdGFydCwgbGVuKSBhbmQgY2hlY2tcbisgKiBhbGwgZm9saW9zIHdpdGhpbiB0aGUgcmFuZ2UgYW5kIHJlY29yZCB0aGVpciBvcmRlcnMuIEFsbCBvcmRlci0wIHBhZ2VzIHdpbGxcbisgKiBiZSByZWNvcmRlZC4gTm9uLXByZXNlbnQgdmFkZHIgaXMgc2tpcHBlZC5cbisgKlxuKyAqIFJldHVybjogMCAtIG5vIGVycm9yLCAtMSAtIHVuaGFuZGxlZCBjYXNlc1xuKyAqL1xuK2ludCBnYXRoZXJfZm9saW9fb3JkZXJzKGNoYXIgKnZhZGRyX3N0YXJ0LCBzaXplX3QgbGVuLFxuK1x0XHRpbnQgcGFnZW1hcF9mZCwgaW50IGtwYWdlZmxhZ3NfZmQsIGludCBvcmRlcnNbXSwgaW50IG5yX29yZGVycylcbit7XG4rXHR1aW50NjRfdCBwYWdlX2ZsYWdzID0gMDtcbitcdGludCBjdXJfb3JkZXIgPSAtMTtcbitcdGNoYXIgKnZhZGRyO1xuK1xuK1x0aWYgKHBhZ2VtYXBfZmQgPT0gLTEgfHwga3BhZ2VmbGFnc19mZCA9PSAtMSlcbitcdFx0cmV0dXJuIC0xO1xuK1x0aWYgKCFvcmRlcnMpXG4rXHRcdHJldHVybiAtMTtcbitcdGlmIChucl9vcmRlcnMgXHUwMDNjPSAwKVxuK1x0XHRyZXR1cm4gLTE7XG4rXG4rXHRmb3IgKHZhZGRyID0gdmFkZHJfc3RhcnQ7IHZhZGRyIFx1MDAzYyB2YWRkcl9zdGFydCArIGxlbjspIHtcbitcdFx0Y2hhciAqbmV4dF9mb2xpb192YWRkcjtcbitcdFx0aW50IHN0YXR1cztcbitcbitcdFx0c3RhdHVzID0gdmFkZHJfcGFnZWZsYWdzX2dldCh2YWRkciwgcGFnZW1hcF9mZCwga3BhZ2VmbGFnc19mZCxcbitcdFx0XHRcdFx1MDAyNnBhZ2VfZmxhZ3MpO1xuK1x0XHRpZiAoc3RhdHVzIFx1MDAzYyAwKVxuK1x0XHRcdHJldHVybiAtMTtcbitcbitcdFx0Lyogc2tpcCBub24gcHJlc2VudCB2YWRkciAqL1xuK1x0XHRpZiAoc3RhdHVzID09IDEpIHtcbitcdFx0XHR2YWRkciArPSBwc2l6ZSgpO1xuK1x0XHRcdGNvbnRpbnVlO1xuK1x0XHR9XG4rXG4rXHRcdC8qIGFsbCBvcmRlci0wIHBhZ2VzIHdpdGggcG9zc2libGUgZmFsc2UgcG9zdGl2ZSAobm9uIGZvbGlvKSAqL1xuK1x0XHRpZiAoIShwYWdlX2ZsYWdzIFx1MDAyNiAoS1BGX0NPTVBPVU5EX0hFQUQgfCBLUEZfQ09NUE9VTkRfVEFJTCkpKSB7XG4rXHRcdFx0b3JkZXJzWzBdKys7XG4rXHRcdFx0dmFkZHIgKz0gcHNpemUoKTtcbitcdFx0XHRjb250aW51ZTtcbitcdFx0fVxuK1xuK1x0XHQvKiBza2lwIG5vbiB0aHAgY29tcG91bmQgcGFnZXMgKi9cbitcdFx0aWYgKCEocGFnZV9mbGFncyBcdTAwMjYgS1BGX1RIUCkpIHtcbitcdFx0XHR2YWRkciArPSBwc2l6ZSgpO1xuK1x0XHRcdGNvbnRpbnVlO1xuK1x0XHR9XG4rXG4rXHRcdC8qIHZwbiBwb2ludHMgdG8gcGFydCBvZiBhIFRIUCBhdCB0aGlzIHBvaW50ICovXG4rXHRcdGlmIChwYWdlX2ZsYWdzIFx1MDAyNiBLUEZfQ09NUE9VTkRfSEVBRClcbitcdFx0XHRjdXJfb3JkZXIgPSAxO1xuK1x0XHRlbHNlIHtcbitcdFx0XHR2YWRkciArPSBwc2l6ZSgpO1xuK1x0XHRcdGNvbnRpbnVlO1xuK1x0XHR9XG4rXG4rXHRcdG5leHRfZm9saW9fdmFkZHIgPSB2YWRkciArICgxVUwgXHUwMDNjXHUwMDNjIChjdXJfb3JkZXIgKyBwc2hpZnQoKSkpO1xuK1xuK1x0XHRpZiAobmV4dF9mb2xpb192YWRkciBcdTAwM2U9IHZhZGRyX3N0YXJ0ICsgbGVuKVxuK1x0XHRcdGJyZWFrO1xuK1xuK1x0XHR3aGlsZSAoKHN0YXR1cyA9IHZhZGRyX3BhZ2VmbGFnc19nZXQobmV4dF9mb2xpb192YWRkcixcbitcdFx0XHRcdFx0XHQgICAgIHBhZ2VtYXBfZmQsIGtwYWdlZmxhZ3NfZmQsXG4rXHRcdFx0XHRcdFx0ICAgICBcdTAwMjZwYWdlX2ZsYWdzKSkgXHUwMDNlPSAwKSB7XG4rXHRcdFx0LypcbitcdFx0XHQgKiBub24gcHJlc2VudCB2YWRkciwgbmV4dCBjb21wb3VuZCBoZWFkIHBhZ2UsIG9yXG4rXHRcdFx0ICogb3JkZXItMCBwYWdlXG4rXHRcdFx0ICovXG4rXHRcdFx0aWYgKHN0YXR1cyA9PSAxIHx8XG4rXHRcdFx0ICAgIChwYWdlX2ZsYWdzIFx1MDAyNiBLUEZfQ09NUE9VTkRfSEVBRCkgfHxcbitcdFx0XHQgICAgIShwYWdlX2ZsYWdzIFx1MDAyNiAoS1BGX0NPTVBPVU5EX0hFQUQgfCBLUEZfQ09NUE9VTkRfVEFJTCkpKSB7XG4rXHRcdFx0XHRpZiAoY3VyX29yZGVyIFx1MDAzYyBucl9vcmRlcnMpIHtcbitcdFx0XHRcdFx0b3JkZXJzW2N1cl9vcmRlcl0rKztcbitcdFx0XHRcdFx0Y3VyX29yZGVyID0gLTE7XG4rXHRcdFx0XHRcdHZhZGRyID0gbmV4dF9mb2xpb192YWRkcjtcbitcdFx0XHRcdH1cbitcdFx0XHRcdGJyZWFrO1xuK1x0XHRcdH1cbitcbitcdFx0XHRjdXJfb3JkZXIrKztcbitcdFx0XHRuZXh0X2ZvbGlvX3ZhZGRyID0gdmFkZHIgKyAoMVVMIFx1MDAzY1x1MDAzYyAoY3VyX29yZGVyICsgcHNoaWZ0KCkpKTtcbitcdFx0fVxuK1xuK1x0XHRpZiAoc3RhdHVzIFx1MDAzYyAwKVxuK1x0XHRcdHJldHVybiBzdGF0dXM7XG4rXHR9XG4rXHRpZiAoY3VyX29yZGVyIFx1MDAzZSAwIFx1MDAyNlx1MDAyNiBjdXJfb3JkZXIgXHUwMDNjIG5yX29yZGVycylcbitcdFx0b3JkZXJzW2N1cl9vcmRlcl0rKztcbitcdHJldHVybiAwO1xuK31cbitcbiBjaGFyICpfX2dldF9zbWFwX2VudHJ5KHZvaWQgKmFkZHIsIGNvbnN0IGNoYXIgKnBhdHRlcm4sIGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbilcbiB7XG4gXHRpbnQgcmV0O1xuQEAgLTIyOSw3ICszNTEsNyBAQCBjaGFyICpfX2dldF9zbWFwX2VudHJ5KHZvaWQgKmFkZHIsIGNvbnN0IGNoYXIgKnBhdHRlcm4sIGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbilcbiBcdHJldHVybiBlbnRyeTtcbiB9XG4gXG4tYm9vbCBfX2NoZWNrX2h1Z2Uodm9pZCAqYWRkciwgY2hhciAqcGF0dGVybiwgaW50IG5yX2hwYWdlcyxcbitzdGF0aWMgYm9vbCBfX2NoZWNrX3BtZF9odWdlKHZvaWQgKmFkZHIsIGNoYXIgKnBhdHRlcm4sIGludCBucl9ocGFnZXMsXG4gXHRcdCAgdWludDY0X3QgaHBhZ2Vfc2l6ZSlcbiB7XG4gXHRjaGFyIGJ1ZmZlcltNQVhfTElORV9MRU5HVEhdO1xuQEAgLTI0NywxOSArMzY5LDg0IEBAIGJvb2wgX19jaGVja19odWdlKHZvaWQgKmFkZHIsIGNoYXIgKnBhdHRlcm4sIGludCBucl9ocGFnZXMsXG4gXHRyZXR1cm4gdGhwID09IChucl9ocGFnZXMgKiAoaHBhZ2Vfc2l6ZSBcdTAwM2VcdTAwM2UgMTApKTtcbiB9XG4gXG4tYm9vbCBjaGVja19odWdlX2Fub24odm9pZCAqYWRkciwgaW50IG5yX2hwYWdlcywgdWludDY0X3QgaHBhZ2Vfc2l6ZSlcbitzdGF0aWMgYm9vbCBjaGVja19sYXJnZV9mb2xpb3Modm9pZCAqYWRkciwgc2l6ZV90IGxlbiwgaW50IG5yX2hwYWdlcyxcbitcdFx0dWludDY0X3QgaHBhZ2Vfc2l6ZSlcbit7XG4rXHRpbnQgb3JkZXIgPSAwLCBwYWdlc2l6ZSA9IGdldHBhZ2VzaXplKCk7XG4rXHR1bnNpZ25lZCBpbnQgbnJfcGFnZXMgPSBocGFnZV9zaXplIC8gcGFnZXNpemU7XG4rXHRpbnQgb3JkZXJzW01BWF9OUl9PUkRFUlNdLCBzdGF0dXM7XG4rXHRpbnQgcGFnZW1hcF9mZCwga3BhZ2VmbGFnc19mZDtcbitcdGJvb2wgcmV0ID0gZmFsc2U7XG4rXG4rXHRpZiAoIW5yX3BhZ2VzKVxuK1x0XHRrc2Z0X2V4aXRfZmFpbF9tc2coXCJpbnZhbGlkIGh1Z2VwYWdlIHNpemVcXG5cIik7XG4rXG4rXHRvcmRlciA9IDMxIC0gX19idWlsdGluX2Nseihucl9wYWdlcyk7XG4rXHRpZiAoIW9yZGVyIHx8IG9yZGVyIFx1MDAzZT0gTUFYX05SX09SREVSUylcbitcdFx0a3NmdF9leGl0X2ZhaWxfbXNnKFwiaW52YWxpZCBvcmRlclxcblwiKTtcbitcbitcdG1lbXNldChvcmRlcnMsIDAsIHNpemVvZihpbnQpICogTUFYX05SX09SREVSUyk7XG4rXHRwYWdlbWFwX2ZkID0gb3BlbihQQUdFTUFQX1BBVEgsIE9fUkRPTkxZKTtcbitcdGlmIChwYWdlbWFwX2ZkID09IC0xKVxuK1x0XHRrc2Z0X2V4aXRfZmFpbF9tc2coXCJyZWFkIHBhZ2VtYXAgZmFpbFxcblwiKTtcbitcbitcdGtwYWdlZmxhZ3NfZmQgPSBvcGVuKEtQQUdFRkxBR1NfUEFUSCwgT19SRE9OTFkpO1xuK1x0aWYgKGtwYWdlZmxhZ3NfZmQgPT0gLTEpIHtcbitcdFx0Y2xvc2UocGFnZW1hcF9mZCk7XG4rXHRcdGtzZnRfZXhpdF9mYWlsX21zZyhcInJlYWQga3BhZ2VmbGFncyBmYWlsXFxuXCIpO1xuK1x0fVxuK1xuK1x0c3RhdHVzID0gZ2F0aGVyX2ZvbGlvX29yZGVycyhhZGRyLCBsZW4sIHBhZ2VtYXBfZmQsXG4rXHRcdFx0a3BhZ2VmbGFnc19mZCwgb3JkZXJzLCBNQVhfTlJfT1JERVJTKTtcbitcdGlmIChzdGF0dXMpXG4rXHRcdGdvdG8gb3V0O1xuK1xuK1x0aWYgKG9yZGVyc1tvcmRlcl0gPT0gbnJfaHBhZ2VzKVxuK1x0XHRyZXQgPSB0cnVlO1xuK1xuK291dDpcbitcdGNsb3NlKHBhZ2VtYXBfZmQpO1xuK1x0Y2xvc2Uoa3BhZ2VmbGFnc19mZCk7XG4rXHRyZXR1cm4gcmV0O1xuK31cbitcbitib29sIGNoZWNrX2h1Z2VfYW5vbih2b2lkICphZGRyLCBzaXplX3QgbGVuLCBpbnQgbnJfaHBhZ2VzLCB1aW50NjRfdCBocGFnZV9zaXplKVxuIHtcbi1cdHJldHVybiBfX2NoZWNrX2h1Z2UoYWRkciwgXCJBbm9uSHVnZVBhZ2VzOiBcIiwgbnJfaHBhZ2VzLCBocGFnZV9zaXplKTtcbitcdHVpbnQ2NF90IHBtZF9wYWdlc2l6ZSA9IHJlYWRfcG1kX3BhZ2VzaXplKCk7XG4rXG4rXHRpZiAoIXBtZF9wYWdlc2l6ZSlcbitcdFx0a3NmdF9leGl0X2ZhaWxfbXNnKFwicmVhZGluZyBQTUQgcGFnZXNpemUgZmFpbGVkXFxuXCIpO1xuK1xuK1x0aWYgKGhwYWdlX3NpemUgPT0gcG1kX3BhZ2VzaXplKVxuK1x0XHRyZXR1cm4gX19jaGVja19wbWRfaHVnZShhZGRyLCBcIkFub25IdWdlUGFnZXM6IFwiLCBucl9ocGFnZXMsIGhwYWdlX3NpemUpO1xuK1xuK1x0cmV0dXJuIGNoZWNrX2xhcmdlX2ZvbGlvcyhhZGRyLCBsZW4sIG5yX2hwYWdlcywgaHBhZ2Vfc2l6ZSk7XG4gfVxuIFxuLWJvb2wgY2hlY2tfaHVnZV9maWxlKHZvaWQgKmFkZHIsIGludCBucl9ocGFnZXMsIHVpbnQ2NF90IGhwYWdlX3NpemUpXG4rYm9vbCBjaGVja19odWdlX2ZpbGUodm9pZCAqYWRkciwgc2l6ZV90IGxlbiwgaW50IG5yX2hwYWdlcywgdWludDY0X3QgaHBhZ2Vfc2l6ZSlcbiB7XG4tXHRyZXR1cm4gX19jaGVja19odWdlKGFkZHIsIFwiRmlsZVBtZE1hcHBlZDpcIiwgbnJfaHBhZ2VzLCBocGFnZV9zaXplKTtcbitcdHVpbnQ2NF90IHBtZF9wYWdlc2l6ZSA9IHJlYWRfcG1kX3BhZ2VzaXplKCk7XG4rXG4rXHRpZiAoIXBtZF9wYWdlc2l6ZSlcbitcdFx0a3NmdF9leGl0X2ZhaWxfbXNnKFwicmVhZGluZyBQTUQgcGFnZXNpemUgZmFpbGVkXFxuXCIpO1xuK1xuK1x0aWYgKGhwYWdlX3NpemUgPT0gcG1kX3BhZ2VzaXplKVxuK1x0XHRyZXR1cm4gX19jaGVja19wbWRfaHVnZShhZGRyLCBcIkZpbGVQbWRNYXBwZWQ6XCIsIG5yX2hwYWdlcywgaHBhZ2Vfc2l6ZSk7XG4rXG4rXHRyZXR1cm4gY2hlY2tfbGFyZ2VfZm9saW9zKGFkZHIsIGxlbiwgbnJfaHBhZ2VzLCBocGFnZV9zaXplKTtcbiB9XG4gXG4tYm9vbCBjaGVja19odWdlX3NobWVtKHZvaWQgKmFkZHIsIGludCBucl9ocGFnZXMsIHVpbnQ2NF90IGhwYWdlX3NpemUpXG4rYm9vbCBjaGVja19odWdlX3NobWVtKHZvaWQgKmFkZHIsIHNpemVfdCBsZW4sIGludCBucl9ocGFnZXMsIHVpbnQ2NF90IGhwYWdlX3NpemUpXG4ge1xuLVx0cmV0dXJuIF9fY2hlY2tfaHVnZShhZGRyLCBcIlNobWVtUG1kTWFwcGVkOlwiLCBucl9ocGFnZXMsIGhwYWdlX3NpemUpO1xuK1x0dWludDY0X3QgcG1kX3BhZ2VzaXplID0gcmVhZF9wbWRfcGFnZXNpemUoKTtcbitcbitcdGlmICghcG1kX3BhZ2VzaXplKVxuK1x0XHRrc2Z0X2V4aXRfZmFpbF9tc2coXCJyZWFkaW5nIFBNRCBwYWdlc2l6ZSBmYWlsZWRcXG5cIik7XG4rXG4rXHRpZiAoaHBhZ2Vfc2l6ZSA9PSBwbWRfcGFnZXNpemUpXG4rXHRcdHJldHVybiBfX2NoZWNrX3BtZF9odWdlKGFkZHIsIFwiU2htZW1QbWRNYXBwZWQ6XCIsIG5yX2hwYWdlcywgaHBhZ2Vfc2l6ZSk7XG4rXG4rXHRyZXR1cm4gY2hlY2tfbGFyZ2VfZm9saW9zKGFkZHIsIGxlbiwgbnJfaHBhZ2VzLCBocGFnZV9zaXplKTtcbiB9XG4gXG4gaW50NjRfdCBhbGxvY2F0ZV90cmFuc2h1Z2Uodm9pZCAqcHRyLCBpbnQgcGFnZW1hcF9mZClcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS92bV91dGlsLmggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS92bV91dGlsLmhcbmluZGV4IDc3OTkxNTRiNjdlZWQuLjlhNDlhZjg4NzAyZTQgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS92bV91dGlsLmhcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ZtX3V0aWwuaFxuQEAgLTkwLDExICs5MCwxMyBAQCB2b2lkIGNsZWFyX3NvZnRkaXJ0eSh2b2lkKTtcbiBib29sIGNoZWNrX2Zvcl9wYXR0ZXJuKEZJTEUgKmZwLCBjb25zdCBjaGFyICpwYXR0ZXJuLCBjaGFyICpidWYsIHNpemVfdCBsZW4pO1xuIHVpbnQ2NF90IHJlYWRfcG1kX3BhZ2VzaXplKHZvaWQpO1xuIHVuc2lnbmVkIGxvbmcgcnNzX2Fub24odm9pZCk7XG4tYm9vbCBjaGVja19odWdlX2Fub24odm9pZCAqYWRkciwgaW50IG5yX2hwYWdlcywgdWludDY0X3QgaHBhZ2Vfc2l6ZSk7XG4tYm9vbCBjaGVja19odWdlX2ZpbGUodm9pZCAqYWRkciwgaW50IG5yX2hwYWdlcywgdWludDY0X3QgaHBhZ2Vfc2l6ZSk7XG4tYm9vbCBjaGVja19odWdlX3NobWVtKHZvaWQgKmFkZHIsIGludCBucl9ocGFnZXMsIHVpbnQ2NF90IGhwYWdlX3NpemUpO1xuK2Jvb2wgY2hlY2tfaHVnZV9hbm9uKHZvaWQgKmFkZHIsIHNpemVfdCBsZW4sIGludCBucl9ocGFnZXMsIHVpbnQ2NF90IGhwYWdlX3NpemUpO1xuK2Jvb2wgY2hlY2tfaHVnZV9maWxlKHZvaWQgKmFkZHIsIHNpemVfdCBsZW4sIGludCBucl9ocGFnZXMsIHVpbnQ2NF90IGhwYWdlX3NpemUpO1xuK2Jvb2wgY2hlY2tfaHVnZV9zaG1lbSh2b2lkICphZGRyLCBzaXplX3QgbGVuLCBpbnQgbnJfaHBhZ2VzLCB1aW50NjRfdCBocGFnZV9zaXplKTtcbiBpbnQ2NF90IGFsbG9jYXRlX3RyYW5zaHVnZSh2b2lkICpwdHIsIGludCBwYWdlbWFwX2ZkKTtcbiBpbnQgcGFnZWZsYWdzX2dldCh1bnNpZ25lZCBsb25nIHBmbiwgaW50IGtwYWdlZmxhZ3NfZmQsIHVpbnQ2NF90ICpmbGFncyk7XG4raW50IGdhdGhlcl9mb2xpb19vcmRlcnMoY2hhciAqdmFkZHJfc3RhcnQsIHNpemVfdCBsZW4sXG4rXHRcdGludCBwYWdlbWFwX2ZkLCBpbnQga3BhZ2VmbGFnc19mZCwgaW50IG9yZGVyc1tdLCBpbnQgbnJfb3JkZXJzKTtcbiBcbiBpbnQgdWZmZF9yZWdpc3RlcihpbnQgdWZmZCwgdm9pZCAqYWRkciwgdWludDY0X3QgbGVuLFxuIFx0XHQgIGJvb2wgbWlzcywgYm9vbCB3cCwgYm9vbCBtaW5vcik7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQwNDowNzoxMS41MjcwODMxNjJaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3NDg3MTY4Njg5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlBhdGNoIEFuYWx5c2lzOiBUSFAgU2VsZnRlc3RzKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaXQncyB0b3VjaGluZyBmaWxlcyB3aXRoaW4gYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2AuIFNwZWNpZmljYWxseSwgaXQncyB1cGRhdGluZyB0ZXN0cyByZWxhdGVkIHRvIFRyYW5zcGFyZW50IEh1Z2UgUGFnZXMsIGxpa2UgYGtodWdlcGFnZWQuY2AsIGBzcGxpdF9odWdlX3BhZ2VfdGVzdC5jYCwgYW5kIGB2bV91dGlsLmNgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhlc2UgYXJlIHB1cmVseSBzZWxmdGVzdHMuIEJ1dCBpdCdzIGFsd2F5cyBnb29kIHRvIGRvdWJsZS1jaGVjay4gTGV0IG1lIHF1aWNrbHkgc2NhbiB0aGUgZGlmZiB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4uLi5cblxuQWxyaWdodCwgdGhlIGZpbGVzIGxpc3RlZCBhcmU6IGBmb2xpb19zcGxpdF9yYWNlX3Rlc3QuY2AsIGBraHVnZXBhZ2VkLmNgLCBgcGFnZW1hcF9pb2N0bC5jYCwgYHByY3RsX3RocF9kaXNhYmxlLmNgLCBgcnVuX3ZtdGVzdHMuc2hgLCBgc29mdC1kaXJ0eS5jYCwgYHNwbGl0X2h1Z2VfcGFnZV90ZXN0LmNgLCBgdWZmZC1jb21tb24uY2AsIGB2bV91dGlsLmNgLCBhbmQgYHZtX3V0aWwuaGAg4oCTIGFsbCBzYWZlbHkgbmVzdGVkIHdpdGhpbiB0aGUgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2AgZGlyZWN0b3J5LlxuXG5TaW5jZSB0aGVzZSBhcmUgc2VsZnRlc3RzLCB1c2VyLXNwYWNlIHRlc3RzLCB0aGV5J3JlIG5vdCBrZXJuZWwgY29kZSBydW5uaW5nIGluIGtlcm5lbCBzcGFjZS4gVGhleSdyZSBkZXNpZ25lZCB0byAqdGVzdCogdGhlIGZ1bmN0aW9uYWxpdHkgb2YgdGhlIGtlcm5lbCwgYnV0IHRoZXkgZG9uJ3QgKmltcGxlbWVudCogaXQuIFRoZXJlZm9yZSwgdGhpcyBwYXRjaCBpc24ndCBtYWtpbmcgYW55IGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIGl0c2VsZjsgaXQncyBqdXN0IHJlZmluaW5nIG91ciB0ZXN0aW5nIG1ldGhvZG9sb2d5LlxuXG5MZXQgbWUgY29uZmlybSB0aGF0IG9uZSBtb3JlIHRpbWUsIGp1c3QgdG8gYmUgb24gdGhlIHNhZmUgc2lkZSwgbGV0J3MgbG9vayBhdCB0aGUgZGlmZiBhZ2Fpbi4uLiBZdXAsIGFsbCB0aGUgbW9kaWZpZWQgZmlsZXMgYXJlIGluZGVlZCB1bmRlciBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vYC5cblxuR2l2ZW4gdGhhdCwgc2V0dGluZyBgV29ydGhGdXp6aW5nYCB0byBgZmFsc2VgIGlzIHRoZSBjb3JyZWN0IGFjdGlvbiBoZXJlLlxuXG4qKlJlYXNvbmluZzoqKiBUaGUgcGF0Y2ggaXMgaXNvbGF0ZWQgdG8gdXNlci1zcGFjZSBzZWxmdGVzdHMsIGFuZCB0aGVyZWZvcmUgaGFzIG5vIGltcGFjdCBvbiBrZXJuZWwgZnVuY3Rpb25hbGl0eSBhbmQgc2hvdWxkIG5vdCBiZSBmdXp6ZWQuXG5cbk5vdywgbGV0J3MgY2FsbCBgc2V0LXJlc3VsdHNgIHdpdGggYFdvcnRoRnV6emluZz1mYWxzZWAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4MTUxLCJPdXRwdXRUb2tlbnMiOjY1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDc1LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMDQ6MDc6MTkuMDE0MjU1MDgxWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTQ2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW10sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIHVzZXItc3BhY2Ugc2VsZnRlc3RzIGluIHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tLyBhbmQgZG9lcyBub3QgbWFrZSBhbnkgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgY29kZSBpdHNlbGYuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIHVzZXItc3BhY2Ugc2VsZnRlc3RzIGluIHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tLyBhbmQgZG9lcyBub3QgbWFrZSBhbnkgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgY29kZSBpdHNlbGYuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },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-workflow4c8tv[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-06 03:51:02 +0000 UTC FinishedAt: 2026-08-06 04:07:20 +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+CgkJCTx0ZD4yMDI2LzA4LzA2IDA0OjA3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgdXNlci1zcGFjZSBzZWxmdGVzdHMgaW4gdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vIGFuZCBkb2VzIG5vdCBtYWtlIGFueSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCBjb2RlIGl0c2VsZi4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMDQ6MDc8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA1NGJjNzg1M2Q0ZjVmNWU1ZWQ4ZGZiYjlmZmZmYzM5NWMzM2Q0ZGE0XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBBdWcgNiAwNDowNzoxMCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9mb2xpb19zcGxpdF9yYWNlX3Rlc3QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2ZvbGlvX3NwbGl0X3JhY2VfdGVzdC5jXG5pbmRleCA2MzI5ZTM3ZmZmNGM5Li40NWI4NGY3YjM2NGUwIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZm9saW9fc3BsaXRfcmFjZV90ZXN0LmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2ZvbGlvX3NwbGl0X3JhY2VfdGVzdC5jXG5AQCAtMTgyLDcgJiM0MzsxODIsNyBAQCBzdGF0aWMgdWludDY0X3QgcnVuX2l0ZXJhdGlvbih2b2lkKVxuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgVE9UQUxfUEFHRVM7IGkmIzQzOyYjNDM7KVxuIFx0XHRmaWxsX3BhZ2UobW1hcF9iYXNlLCBpKTtcbiBcbi1cdGlmICghY2hlY2tfaHVnZV9zaG1lbShtbWFwX2Jhc2UsIE5SX1BNRF9QQUdFLCBwbWRfcGFnZXNpemUpKVxuJiM0MztcdGlmICghY2hlY2tfaHVnZV9zaG1lbShtbWFwX2Jhc2UsIEZJTEVfU0laRSwgTlJfUE1EX1BBR0UsIHBtZF9wYWdlc2l6ZSkpXG4gXHRcdGtzZnRfZXhpdF9mYWlsX21zZyhcJiMzNDtObyBzaG1lbSBUSFAgaXMgYWxsb2NhdGVkXFxuXCYjMzQ7KTtcbiBcbiBcdGlmIChwdGhyZWFkX2JhcnJpZXJfaW5pdChcdTAwMjZjdGwuYmFycmllciwgTlVMTCwgTlVNX1JFQURFUl9USFJFQURTICYjNDM7IDEpICE9IDApXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0va2h1Z2VwYWdlZC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0va2h1Z2VwYWdlZC5jXG5pbmRleCBiMjU0YmFmOWUwYjc1Li43Zjg3YWVlZDMwMWM0IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0va2h1Z2VwYWdlZC5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9raHVnZXBhZ2VkLmNcbkBAIC0yNiw5ICYjNDM7MjYsMTEgQEBcbiBcbiAjZGVmaW5lIEJBU0VfQUREUiAoKHZvaWQgKikoMVVMIFx1MDAzY1x1MDAzYyAzMCkpXG4gc3RhdGljIHVuc2lnbmVkIGxvbmcgaHBhZ2VfcG1kX3NpemU7XG4mIzQzO3N0YXRpYyBpbnQgaHBhZ2VfcG1kX29yZGVyO1xuIHN0YXRpYyB1bnNpZ25lZCBsb25nIHBhZ2Vfc2l6ZTtcbiBzdGF0aWMgaW50IGhwYWdlX3BtZF9ucjtcbiBzdGF0aWMgaW50IGFub25fb3JkZXI7XG4mIzQzO3N0YXRpYyBpbnQgY29sbGFwc2Vfb3JkZXI7XG4gXG4gI2RlZmluZSBQSURfU01BUFMgXCYjMzQ7L3Byb2Mvc2VsZi9zbWFwc1wmIzM0O1xuICNkZWZpbmUgVEVTVF9GSUxFIFwmIzM0O2NvbGxhcHNlX3Rlc3RfZmlsZVwmIzM0O1xuQEAgLTUxLDcgJiM0Mzs1Myw3IEBAIHN0cnVjdCBtZW1fb3BzIHtcbiBcdHZvaWQgKigqc2V0dXBfYXJlYSkoaW50IG5yX2hwYWdlcyk7XG4gXHR2b2lkICgqY2xlYW51cF9hcmVhKSh2b2lkICpwLCB1bnNpZ25lZCBsb25nIHNpemUpO1xuIFx0dm9pZCAoKmZhdWx0KSh2b2lkICpwLCB1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCk7XG4tXHRib29sICgqY2hlY2tfaHVnZSkodm9pZCAqYWRkciwgaW50IG5yX2hwYWdlcyk7XG4mIzQzO1x0Ym9vbCAoKmNoZWNrX2h1Z2UpKHZvaWQgKmFkZHIsIHNpemVfdCBsZW4sIGludCBucl9ocGFnZXMsIHVuc2lnbmVkIGxvbmcgaHBhZ2Vfc2l6ZSk7XG4gXHRjb25zdCBjaGFyICpuYW1lO1xuIH07XG4gXG5AQCAtNjksNiAmIzQzOzcxLDcgQEAgc3RydWN0IGNvbGxhcHNlX2NvbnRleHQge1xuIH07XG4gXG4gc3RhdGljIHN0cnVjdCBjb2xsYXBzZV9jb250ZXh0ICpraHVnZXBhZ2VkX2NvbnRleHQ7XG4mIzQzO3N0YXRpYyBzdHJ1Y3QgY29sbGFwc2VfY29udGV4dCAqbXRocF9raHVnZXBhZ2VkX2NvbnRleHQ7XG4gc3RhdGljIHN0cnVjdCBjb2xsYXBzZV9jb250ZXh0ICptYWR2aXNlX2NvbnRleHQ7XG4gXG4gc3RydWN0IGZpbGVfaW5mbyB7XG5AQCAtMjk1LDcgJiM0MzsyOTgsNyBAQCBzdGF0aWMgdm9pZCAqYWxsb2NfaHBhZ2Uoc3RydWN0IG1lbV9vcHMgKm9wcylcbiBcdGtzZnRfcHJpbnRfbXNnKFwmIzM0O0FsbG9jYXRlIGh1Z2UgcGFnZS4uLlwmIzM0Oyk7XG4gXHRpZiAobWFkdmlzZV9jb2xsYXBzZV9yZXRyeShwLCBocGFnZV9wbWRfc2l6ZSkpXG4gXHRcdGtzZnRfZXhpdF9mYWlsX3BlcnJvcihcJiMzNDttYWR2aXNlKE1BRFZfQ09MTEFQU0UpXCYjMzQ7KTtcbi1cdGlmICghb3BzLVx1MDAzZWNoZWNrX2h1Z2UocCwgMSkpXG4mIzQzO1x0aWYgKCFvcHMtXHUwMDNlY2hlY2tfaHVnZShwLCBocGFnZV9wbWRfc2l6ZSwgMSwgaHBhZ2VfcG1kX3NpemUpKVxuIFx0XHRrc2Z0X2V4aXRfZmFpbF9wZXJyb3IoXCYjMzQ7bWFkdmlzZShNQURWX0NPTExBUFNFKVwmIzM0Oyk7XG4gXHRpZiAobWFkdmlzZShwLCBocGFnZV9wbWRfc2l6ZSwgTUFEVl9IVUdFUEFHRSkpXG4gXHRcdGtzZnRfZXhpdF9mYWlsX3BlcnJvcihcJiMzNDttYWR2aXNlKE1BRFZfSFVHRVBBR0UpXCYjMzQ7KTtcbkBAIC0zMjksOSAmIzQzOzMzMiwxMCBAQCBzdGF0aWMgdm9pZCBhbm9uX2ZhdWx0KHZvaWQgKnAsIHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kKVxuIFx0ZmlsbF9tZW1vcnkocCwgc3RhcnQsIGVuZCk7XG4gfVxuIFxuLXN0YXRpYyBib29sIGFub25fY2hlY2tfaHVnZSh2b2lkICphZGRyLCBpbnQgbnJfaHBhZ2VzKVxuJiM0MztzdGF0aWMgYm9vbCBhbm9uX2NoZWNrX2h1Z2Uodm9pZCAqYWRkciwgc2l6ZV90IGxlbiwgaW50IG5yX2hwYWdlcyxcbiYjNDM7XHRcdHVuc2lnbmVkIGxvbmcgaHBhZ2Vfc2l6ZSlcbiB7XG4tXHRyZXR1cm4gY2hlY2tfaHVnZV9hbm9uKGFkZHIsIG5yX2hwYWdlcywgaHBhZ2VfcG1kX3NpemUpO1xuJiM0MztcdHJldHVybiBjaGVja19odWdlX2Fub24oYWRkciwgbGVuLCBucl9ocGFnZXMsIGhwYWdlX3NpemUpO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCAqZmlsZV9zZXR1cF9hcmVhX2NvbW1vbihpbnQgbnJfaHBhZ2VzLCBlbnVtIGZpbGVfc2V0dXBfb3BzIHNldHVwKVxuQEAgLTQzMSwxMyAmIzQzOzQzNSwxNCBAQCBzdGF0aWMgdm9pZCBmaWxlX2ZhdWx0X3dyaXRlKHZvaWQgKnAsIHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kKVxuIFx0XHRrc2Z0X2V4aXRfZmFpbF9wZXJyb3IoXCYjMzQ7bWFkdmlzZShNQURWX1BPUFVMQVRFX1dSSVRFKVwmIzM0Oyk7XG4gfVxuIFxuLXN0YXRpYyBib29sIGZpbGVfY2hlY2tfaHVnZSh2b2lkICphZGRyLCBpbnQgbnJfaHBhZ2VzKVxuJiM0MztzdGF0aWMgYm9vbCBmaWxlX2NoZWNrX2h1Z2Uodm9pZCAqYWRkciwgc2l6ZV90IGxlbiwgaW50IG5yX2hwYWdlcyxcbiYjNDM7XHRcdHVuc2lnbmVkIGxvbmcgaHBhZ2Vfc2l6ZSlcbiB7XG4gXHRzd2l0Y2ggKGZpbmZvLnR5cGUpIHtcbiBcdGNhc2UgVk1BX0ZJTEU6XG4tXHRcdHJldHVybiBjaGVja19odWdlX2ZpbGUoYWRkciwgbnJfaHBhZ2VzLCBocGFnZV9wbWRfc2l6ZSk7XG4mIzQzO1x0XHRyZXR1cm4gY2hlY2tfaHVnZV9maWxlKGFkZHIsIGxlbiwgbnJfaHBhZ2VzLCBocGFnZV9zaXplKTtcbiBcdGNhc2UgVk1BX1NITUVNOlxuLVx0XHRyZXR1cm4gY2hlY2tfaHVnZV9zaG1lbShhZGRyLCBucl9ocGFnZXMsIGhwYWdlX3BtZF9zaXplKTtcbiYjNDM7XHRcdHJldHVybiBjaGVja19odWdlX3NobWVtKGFkZHIsIGxlbiwgbnJfaHBhZ2VzLCBocGFnZV9zaXplKTtcbiBcdGRlZmF1bHQ6XG4gXHRcdGV4aXQoRVhJVF9GQUlMVVJFKTtcbiBcdFx0cmV0dXJuIGZhbHNlO1xuQEAgLTQ2Nyw5ICYjNDM7NDcyLDEwIEBAIHN0YXRpYyB2b2lkIHNobWVtX2NsZWFudXBfYXJlYSh2b2lkICpwLCB1bnNpZ25lZCBsb25nIHNpemUpXG4gXHRjbG9zZShmaW5mby5mZCk7XG4gfVxuIFxuLXN0YXRpYyBib29sIHNobWVtX2NoZWNrX2h1Z2Uodm9pZCAqYWRkciwgaW50IG5yX2hwYWdlcylcbiYjNDM7c3RhdGljIGJvb2wgc2htZW1fY2hlY2tfaHVnZSh2b2lkICphZGRyLCBzaXplX3QgbGVuLCBpbnQgbnJfaHBhZ2VzLFxuJiM0MztcdFx0dW5zaWduZWQgbG9uZyBocGFnZV9zaXplKVxuIHtcbi1cdHJldHVybiBjaGVja19odWdlX3NobWVtKGFkZHIsIG5yX2hwYWdlcywgaHBhZ2VfcG1kX3NpemUpO1xuJiM0MztcdHJldHVybiBjaGVja19odWdlX3NobWVtKGFkZHIsIGxlbiwgbnJfaHBhZ2VzLCBocGFnZV9zaXplKTtcbiB9XG4gXG4gc3RhdGljIHN0cnVjdCBtZW1fb3BzIF9fYW5vbl9vcHMgPSB7XG5AQCAtNTUyLDcgJiM0Mzs1NTgsNyBAQCBzdGF0aWMgdm9pZCBfX21hZHZpc2VfY29sbGFwc2UoY29uc3QgY2hhciAqbXNnLCBjaGFyICpwLCBpbnQgbnJfaHBhZ2VzLFxuIFx0cmV0ID0gbWFkdmlzZV9jb2xsYXBzZV9yZXRyeShwLCBucl9ocGFnZXMgKiBocGFnZV9wbWRfc2l6ZSk7XG4gXHRpZiAoKChib29sKXJldCkgPT0gZXhwZWN0KVxuIFx0XHRmYWlsKFwmIzM0O0ZhaWw6IEJhZCByZXR1cm4gdmFsdWVcJiMzNDspO1xuLVx0ZWxzZSBpZiAoIW9wcy1cdTAwM2VjaGVja19odWdlKHAsIGV4cGVjdCA/IG5yX2hwYWdlcyA6IDApKVxuJiM0MztcdGVsc2UgaWYgKCFvcHMtXHUwMDNlY2hlY2tfaHVnZShwLCBucl9ocGFnZXMgKiBocGFnZV9wbWRfc2l6ZSwgZXhwZWN0ID8gbnJfaHBhZ2VzIDogMCwgaHBhZ2VfcG1kX3NpemUpKVxuIFx0XHRmYWlsKFwmIzM0O0ZhaWw6IGNoZWNrX2h1Z2UoKVwmIzM0Oyk7XG4gXHRlbHNlXG4gXHRcdHN1Y2Nlc3MoXCYjMzQ7T0tcJiMzNDspO1xuQEAgLTU2NCwzMCAmIzQzOzU3MCwzMSBAQCBzdGF0aWMgdm9pZCBtYWR2aXNlX2NvbGxhcHNlKGNvbnN0IGNoYXIgKm1zZywgY2hhciAqcCwgaW50IG5yX2hwYWdlcyxcbiBcdFx0XHQgICAgIHN0cnVjdCBtZW1fb3BzICpvcHMsIGJvb2wgZXhwZWN0KVxuIHtcbiBcdC8qIFNhbml0eSBjaGVjayAqL1xuLVx0aWYgKCFvcHMtXHUwMDNlY2hlY2tfaHVnZShwLCAwKSlcbiYjNDM7XHRpZiAoIW9wcy1cdTAwM2VjaGVja19odWdlKHAsIG5yX2hwYWdlcyAqIGhwYWdlX3BtZF9zaXplLCAwLCBocGFnZV9wbWRfc2l6ZSkpXG4gXHRcdGtzZnRfZXhpdF9mYWlsX21zZyhcJiMzNDtVbmV4cGVjdGVkIGh1Z2UgcGFnZVxcblwmIzM0Oyk7XG4gXHRfX21hZHZpc2VfY29sbGFwc2UobXNnLCBwLCBucl9ocGFnZXMsIG9wcywgZXhwZWN0KTtcbiB9XG4gXG4gI2RlZmluZSBUSUNLIDUwMDAwMFxuLXN0YXRpYyBib29sIHdhaXRfZm9yX3NjYW4oY29uc3QgY2hhciAqbXNnLCBjaGFyICpwLCBpbnQgbnJfaHBhZ2VzLFxuLVx0XHRcdCAgc3RydWN0IG1lbV9vcHMgKm9wcylcbiYjNDM7c3RhdGljIGJvb2wgd2FpdF9mb3Jfc2Nhbihjb25zdCBjaGFyICptc2csIGNoYXIgKnAsIHNpemVfdCBsZW4sXG4mIzQzO1x0XHRpbnQgbnJfaHBhZ2VzLCBpbnQgY29sbGFwX29yZGVyLCBzdHJ1Y3QgbWVtX29wcyAqb3BzKVxuIHtcbiYjNDM7XHR1bnNpZ25lZCBsb25nIGhwYWdlX3NpemUgPSBwYWdlX3NpemUgXHUwMDNjXHUwMDNjIGNvbGxhcF9vcmRlcjtcbiBcdGludCBmdWxsX3NjYW5zO1xuIFx0aW50IHRpbWVvdXQgPSA2OyAvKiAzIHNlY29uZHMgKi9cbiBcbiBcdC8qIFNhbml0eSBjaGVjayAqL1xuLVx0aWYgKCFvcHMtXHUwMDNlY2hlY2tfaHVnZShwLCAwKSlcbiYjNDM7XHRpZiAoIW9wcy1cdTAwM2VjaGVja19odWdlKHAsIGxlbiwgMCwgaHBhZ2Vfc2l6ZSkpXG4gXHRcdGtzZnRfZXhpdF9mYWlsX21zZyhcJiMzNDtVbmV4cGVjdGVkIGh1Z2UgcGFnZVxcblwmIzM0Oyk7XG4gXG4tXHRtYWR2aXNlKHAsIG5yX2hwYWdlcyAqIGhwYWdlX3BtZF9zaXplLCBNQURWX0hVR0VQQUdFKTtcbiYjNDM7XHRtYWR2aXNlKHAsIGxlbiwgTUFEVl9IVUdFUEFHRSk7XG4gXG4gXHQvKiBXYWl0IHVudGlsIHRoZSBzZWNvbmQgZnVsbF9zY2FuIGNvbXBsZXRlZCAqL1xuIFx0ZnVsbF9zY2FucyA9IHRocF9yZWFkX251bShcJiMzNDtraHVnZXBhZ2VkL2Z1bGxfc2NhbnNcJiMzNDspICYjNDM7IDI7XG4gXG4gXHRrc2Z0X3ByaW50X21zZyhcJiMzNDslcy4uLlwmIzM0OywgbXNnKTtcbiBcdHdoaWxlICh0aW1lb3V0LS0pIHtcbi1cdFx0aWYgKG9wcy1cdTAwM2VjaGVja19odWdlKHAsIG5yX2hwYWdlcykpXG4mIzQzO1x0XHRpZiAob3BzLVx1MDAzZWNoZWNrX2h1Z2UocCwgbGVuLCBucl9ocGFnZXMsIGhwYWdlX3NpemUpKVxuIFx0XHRcdGJyZWFrO1xuIFx0XHRpZiAodGhwX3JlYWRfbnVtKFwmIzM0O2todWdlcGFnZWQvZnVsbF9zY2Fuc1wmIzM0OykgXHUwMDNlPSBmdWxsX3NjYW5zKVxuIFx0XHRcdGJyZWFrO1xuQEAgLTYwMSw2ICYjNDM7NjA4LDggQEAgc3RhdGljIGJvb2wgd2FpdF9mb3Jfc2Nhbihjb25zdCBjaGFyICptc2csIGNoYXIgKnAsIGludCBucl9ocGFnZXMsXG4gc3RhdGljIHZvaWQga2h1Z2VwYWdlZF9jb2xsYXBzZShjb25zdCBjaGFyICptc2csIGNoYXIgKnAsIGludCBucl9ocGFnZXMsXG4gXHRcdFx0XHRzdHJ1Y3QgbWVtX29wcyAqb3BzLCBib29sIGV4cGVjdClcbiB7XG4mIzQzO1x0c2l6ZV90IGxlbiA9IG5yX2hwYWdlcyAqIGhwYWdlX3BtZF9zaXplO1xuJiM0MztcbiBcdC8qXG4gXHQgKiByZWFkXHUwMDI2d3JpdGUgZmlsZSBjb2xsYXBzZSBmYWlscyBzaW5jZSBraHVnZXBhZ2VkIGRvZXMgbm90IGZsdXNoXG4gXHQgKiB0aGUgdGFyZ2V0IGRpcnR5IGZvbGlvc1xuQEAgLTYwOCw3ICYjNDM7NjE3LDcgQEAgc3RhdGljIHZvaWQga2h1Z2VwYWdlZF9jb2xsYXBzZShjb25zdCBjaGFyICptc2csIGNoYXIgKnAsIGludCBucl9ocGFnZXMsXG4gXHRpZiAoIWlzX3RtcGZzKG9wcykgXHUwMDI2XHUwMDI2IG9wcyA9PSBcdTAwMjZfX3JlYWRfd3JpdGVfZmlsZV93cml0ZV9vcHMpXG4gXHRcdGV4cGVjdCA9IGZhbHNlO1xuIFxuLVx0aWYgKHdhaXRfZm9yX3NjYW4obXNnLCBwLCBucl9ocGFnZXMsIG9wcykpIHtcbiYjNDM7XHRpZiAod2FpdF9mb3Jfc2Nhbihtc2csIHAsIGxlbiwgbnJfaHBhZ2VzLCBocGFnZV9wbWRfb3JkZXIsIG9wcykpIHtcbiBcdFx0aWYgKGV4cGVjdClcbiBcdFx0XHRmYWlsKFwmIzM0O1RpbWVvdXRcJiMzNDspO1xuIFx0XHRlbHNlXG5AQCAtNjI0LDEwICYjNDM7NjMzLDU0IEBAIHN0YXRpYyB2b2lkIGtodWdlcGFnZWRfY29sbGFwc2UoY29uc3QgY2hhciAqbXNnLCBjaGFyICpwLCBpbnQgbnJfaHBhZ2VzLFxuIFx0aWYgKG9wcyAhPSBcdTAwMjZfX2Fub25fb3BzKVxuIFx0XHRvcHMtXHUwMDNlZmF1bHQocCwgMCwgbnJfaHBhZ2VzICogaHBhZ2VfcG1kX3NpemUpO1xuIFxuLVx0aWYgKG9wcy1cdTAwM2VjaGVja19odWdlKHAsIGV4cGVjdCA/IG5yX2hwYWdlcyA6IDApKVxuJiM0MztcdGlmIChvcHMtXHUwMDNlY2hlY2tfaHVnZShwLCBsZW4sIGV4cGVjdCA/IG5yX2hwYWdlcyA6IDAsIGhwYWdlX3BtZF9zaXplKSlcbiYjNDM7XHRcdHN1Y2Nlc3MoXCYjMzQ7T0tcJiMzNDspO1xuJiM0MztcdGVsc2VcbiYjNDM7XHRcdGZhaWwoXCYjMzQ7RmFpbFwmIzM0Oyk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIG10aHBfa2h1Z2VwYWdlZF9jb2xsYXBzZShjb25zdCBjaGFyICptc2csIGNoYXIgKnAsIGludCBucl9ocGFnZXMsXG4mIzQzO1x0XHRcdFx0c3RydWN0IG1lbV9vcHMgKm9wcywgYm9vbCBleHBlY3QpXG4mIzQzO3tcbiYjNDM7XHR1bnNpZ25lZCBsb25nIGhwYWdlX3NpemUgPSBwYWdlX3NpemUgXHUwMDNjXHUwMDNjIGNvbGxhcHNlX29yZGVyO1xuJiM0MztcdHN0cnVjdCB0aHBfc2V0dGluZ3Mgc2V0dGluZ3MgPSAqdGhwX2N1cnJlbnRfc2V0dGluZ3MoKTtcbiYjNDM7XHQvKiBtVEhQIGNvbGxwYXNlIG9ubHkgYWxsb2NhdGVzIFBNRCBzaXplZCBtZW1vcnkgKi9cbiYjNDM7XHRzaXplX3QgbGVuID0gaHBhZ2VfcG1kX3NpemU7XG4mIzQzO1xuJiM0MztcdC8qIFNldCBtVEhQIHNldHRpbmcgZm9yIG1USFAgY29sbGFwc2UgKi9cbiYjNDM7XHRpZiAob3BzID09IFx1MDAyNl9fYW5vbl9vcHMpIHtcbiYjNDM7XHRcdHNldHRpbmdzLnRocF9lbmFibGVkID0gVEhQX05FVkVSO1xuJiM0MztcdFx0c2V0dGluZ3MuaHVnZXBhZ2VzW2NvbGxhcHNlX29yZGVyXS5lbmFibGVkID0gVEhQX01BRFZJU0U7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHR0aHBfcHVzaF9zZXR0aW5ncyhcdTAwMjZzZXR0aW5ncyk7XG4mIzQzO1xuJiM0MztcdGlmICh3YWl0X2Zvcl9zY2FuKG1zZywgcCwgbGVuLCBucl9ocGFnZXMsIGNvbGxhcHNlX29yZGVyLCBvcHMpKSB7XG4mIzQzO1x0XHRpZiAoZXhwZWN0KVxuJiM0MztcdFx0XHRmYWlsKFwmIzM0O1RpbWVvdXRcJiMzNDspO1xuJiM0MztcdFx0ZWxzZVxuJiM0MztcdFx0XHRzdWNjZXNzKFwmIzM0O09LXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO1x0XHQvKiBSZXN0b3JlIFRIUCBzZXR0aW5ncyBmb3IgbVRIUCBjb2xsYXBzZS4gKi9cbiYjNDM7XHRcdHRocF9wb3Bfc2V0dGluZ3MoKTtcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogRm9yIGZpbGUgYW5kIHNobWVtIG1lbW9yeSwga2h1Z2VwYWdlZCBvbmx5IHJldHJhY3RzIHB0ZSBlbnRyaWVzIGFmdGVyXG4mIzQzO1x0ICogcHV0dGluZyB0aGUgbmV3IGh1Z2VwYWdlIGluIHRoZSBwYWdlIGNhY2hlLiBUaGUgaHVnZXBhZ2UgbXVzdCBiZVxuJiM0MztcdCAqIHN1YnNlcXVlbnRseSByZWZhdWx0ZWQgdG8gaW5zdGFsbCB0aGUgcG1kIG1hcHBpbmcgZm9yIHRoZSBtbS5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAob3BzICE9IFx1MDAyNl9fYW5vbl9vcHMpXG4mIzQzO1x0XHRvcHMtXHUwMDNlZmF1bHQocCwgMCwgbnJfaHBhZ2VzICogaHBhZ2Vfc2l6ZSk7XG4mIzQzO1xuJiM0MztcdGlmIChvcHMtXHUwMDNlY2hlY2tfaHVnZShwLCBsZW4sIGV4cGVjdCA/IG5yX2hwYWdlcyA6IDAsIGhwYWdlX3NpemUpKVxuIFx0XHRzdWNjZXNzKFwmIzM0O09LXCYjMzQ7KTtcbiBcdGVsc2VcbiBcdFx0ZmFpbChcJiMzNDtGYWlsXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO1x0LyogUmVzdG9yZSBUSFAgc2V0dGluZ3MgZm9yIG1USFAgY29sbGFwc2UuICovXG4mIzQzO1x0dGhwX3BvcF9zZXR0aW5ncygpO1xuIH1cbiBcbiBzdGF0aWMgc3RydWN0IGNvbGxhcHNlX2NvbnRleHQgX19raHVnZXBhZ2VkX2NvbnRleHQgPSB7XG5AQCAtNjM2LDYgJiM0Mzs2ODksMTIgQEAgc3RhdGljIHN0cnVjdCBjb2xsYXBzZV9jb250ZXh0IF9fa2h1Z2VwYWdlZF9jb250ZXh0ID0ge1xuIFx0Lm5hbWUgPSBcJiMzNDtraHVnZXBhZ2VkXCYjMzQ7LFxuIH07XG4gXG4mIzQzO3N0YXRpYyBzdHJ1Y3QgY29sbGFwc2VfY29udGV4dCBfX210aHBfa2h1Z2VwYWdlZF9jb250ZXh0ID0ge1xuJiM0MztcdC5jb2xsYXBzZSA9IFx1MDAyNm10aHBfa2h1Z2VwYWdlZF9jb2xsYXBzZSxcbiYjNDM7XHQuZW5mb3JjZV9wdGVfc2Nhbl9saW1pdHMgPSB0cnVlLFxuJiM0MztcdC5uYW1lID0gXCYjMzQ7bXRocF9raHVnZXBhZ2VkXCYjMzQ7LFxuJiM0Mzt9O1xuJiM0MztcbiBzdGF0aWMgc3RydWN0IGNvbGxhcHNlX2NvbnRleHQgX19tYWR2aXNlX2NvbnRleHQgPSB7XG4gXHQuY29sbGFwc2UgPSBcdTAwMjZtYWR2aXNlX2NvbGxhcHNlLFxuIFx0LmVuZm9yY2VfcHRlX3NjYW5fbGltaXRzID0gZmFsc2UsXG5AQCAtNjUzLDcgJiM0Mzs3MTIsNyBAQCBzdGF0aWMgdm9pZCBhbGxvY19hdF9mYXVsdCh2b2lkKVxuIFx0cCA9IGFsbG9jX21hcHBpbmcoMSk7XG4gXHQqcCA9IDE7XG4gXHRrc2Z0X3ByaW50X21zZyhcJiMzNDtBbGxvY2F0ZSBodWdlIHBhZ2Ugb24gZmF1bHQuLi5cJiMzNDspO1xuLVx0aWYgKGNoZWNrX2h1Z2VfYW5vbihwLCAxLCBocGFnZV9wbWRfc2l6ZSkpXG4mIzQzO1x0aWYgKGNoZWNrX2h1Z2VfYW5vbihwLCBocGFnZV9wbWRfc2l6ZSwgMSwgaHBhZ2VfcG1kX3NpemUpKVxuIFx0XHRzdWNjZXNzKFwmIzM0O09LXCYjMzQ7KTtcbiBcdGVsc2VcbiBcdFx0ZmFpbChcJiMzNDtGYWlsXCYjMzQ7KTtcbkBAIC02NjIsNyAmIzQzOzcyMSw3IEBAIHN0YXRpYyB2b2lkIGFsbG9jX2F0X2ZhdWx0KHZvaWQpXG4gXG4gXHRtYWR2aXNlKHAsIHBhZ2Vfc2l6ZSwgTUFEVl9ET05UTkVFRCk7XG4gXHRrc2Z0X3ByaW50X21zZyhcJiMzNDtTcGxpdCBodWdlIFBNRCBvbiBNQURWX0RPTlRORUVELi4uXCYjMzQ7KTtcbi1cdGlmIChjaGVja19odWdlX2Fub24ocCwgMCwgaHBhZ2VfcG1kX3NpemUpKVxuJiM0MztcdGlmIChjaGVja19odWdlX2Fub24ocCwgaHBhZ2VfcG1kX3NpemUsIDAsIGhwYWdlX3BtZF9zaXplKSlcbiBcdFx0c3VjY2VzcyhcJiMzNDtPS1wmIzM0Oyk7XG4gXHRlbHNlXG4gXHRcdGZhaWwoXCYjMzQ7RmFpbFwmIzM0Oyk7XG5AQCAtNjc0LDEwICYjNDM7NzMzLDE3IEBAIHN0YXRpYyB2b2lkIGFsbG9jX2F0X2ZhdWx0KHZvaWQpXG4gc3RhdGljIHZvaWQgY29sbGFwc2VfZnVsbChzdHJ1Y3QgY29sbGFwc2VfY29udGV4dCAqYywgc3RydWN0IG1lbV9vcHMgKm9wcylcbiB7XG4gXHR2b2lkICpwO1xuLVx0aW50IG5yX2hwYWdlcyA9IDQ7XG4mIzQzO1x0aW50IG5yX3BtZHMgPSA0LCBucl9ocGFnZXMgPSA0O1xuIFx0dW5zaWduZWQgbG9uZyBzaXplID0gbnJfaHBhZ2VzICogaHBhZ2VfcG1kX3NpemU7XG4gXG4tXHRwID0gb3BzLVx1MDAzZXNldHVwX2FyZWEobnJfaHBhZ2VzKTtcbiYjNDM7XHQvKiBPbmx5IHRyeSAxIFBNRCBzaXplZCByYW5nZSBmb3IgbVRIUCBjb2xsYXBzZS4gKi9cbiYjNDM7XHRpZiAoYyA9PSBcdTAwMjZfX210aHBfa2h1Z2VwYWdlZF9jb250ZXh0KSB7XG4mIzQzO1x0XHRucl9wbWRzID0gMTtcbiYjNDM7XHRcdG5yX2hwYWdlcyA9IDEgXHUwMDNjXHUwMDNjIChocGFnZV9wbWRfb3JkZXIgLSBjb2xsYXBzZV9vcmRlcik7XG4mIzQzO1x0XHRzaXplID0gaHBhZ2VfcG1kX3NpemU7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRwID0gb3BzLVx1MDAzZXNldHVwX2FyZWEobnJfcG1kcyk7XG4gXHRvcHMtXHUwMDNlZmF1bHQocCwgMCwgc2l6ZSk7XG4gXHRjLVx1MDAzZWNvbGxhcHNlKFwmIzM0O0NvbGxhcHNlIG11bHRpcGxlIGZ1bGx5IHBvcHVsYXRlZCBQVEUgdGFibGVcJiMzNDssIHAsIG5yX2hwYWdlcyxcbiBcdFx0ICAgIG9wcywgdHJ1ZSk7XG5AQCAtNjg5LDEwICYjNDM7NzU1LDMxIEBAIHN0YXRpYyB2b2lkIGNvbGxhcHNlX2Z1bGwoc3RydWN0IGNvbGxhcHNlX2NvbnRleHQgKmMsIHN0cnVjdCBtZW1fb3BzICpvcHMpXG4gXG4gc3RhdGljIHZvaWQgY29sbGFwc2VfZW1wdHkoc3RydWN0IGNvbGxhcHNlX2NvbnRleHQgKmMsIHN0cnVjdCBtZW1fb3BzICpvcHMpXG4ge1xuJiM0MztcdGludCBucl9ocGFnZXMgPSAxO1xuJiM0MztcdHZvaWQgKnA7XG4mIzQzO1xuJiM0MztcdGlmIChjID09IFx1MDAyNl9fbXRocF9raHVnZXBhZ2VkX2NvbnRleHQpXG4mIzQzO1x0XHRucl9ocGFnZXMgPSAxIFx1MDAzY1x1MDAzYyAoaHBhZ2VfcG1kX29yZGVyIC0gY29sbGFwc2Vfb3JkZXIpO1xuJiM0MztcbiYjNDM7XHRwID0gb3BzLVx1MDAzZXNldHVwX2FyZWEoMSk7XG4mIzQzO1x0Yy1cdTAwM2Vjb2xsYXBzZShcJiMzNDtEbyBub3QgY29sbGFwc2UgZW1wdHkgUFRFIHRhYmxlXCYjMzQ7LCBwLCBucl9ocGFnZXMsIG9wcywgZmFsc2UpO1xuJiM0MztcdG9wcy1cdTAwM2VjbGVhbnVwX2FyZWEocCwgaHBhZ2VfcG1kX3NpemUpO1xuJiM0MztcdGtzZnRfdGVzdF9yZXN1bHRfcmVwb3J0KGV4aXRfc3RhdHVzLCBcJiMzNDslc1xcblwmIzM0OywgX19mdW5jX18pO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBjb2xsYXBzZV9zaW5nbGVfbXRocChzdHJ1Y3QgY29sbGFwc2VfY29udGV4dCAqYywgc3RydWN0IG1lbV9vcHMgKm9wcylcbiYjNDM7e1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgaHBhZ2Vfc2l6ZSA9IHBhZ2Vfc2l6ZSBcdTAwM2NcdTAwM2MgY29sbGFwc2Vfb3JkZXI7XG4gXHR2b2lkICpwO1xuIFxuIFx0cCA9IG9wcy1cdTAwM2VzZXR1cF9hcmVhKDEpO1xuLVx0Yy1cdTAwM2Vjb2xsYXBzZShcJiMzNDtEbyBub3QgY29sbGFwc2UgZW1wdHkgUFRFIHRhYmxlXCYjMzQ7LCBwLCAxLCBvcHMsIGZhbHNlKTtcbiYjNDM7XHQvKlxuJiM0MztcdCAqIE9ubHkgZmF1bHQgY29sbGFwc2Vfb3JkZXIgc2l6ZWQgcmFuZ2VzLCBhbmQgb25seSBjaGVjayAxXG4mIzQzO1x0ICogY29sbGFwc2Vfb3JkZXIgc2l6ZWQgaHVnZSBwYWdlLlxuJiM0MztcdCAqL1xuJiM0MztcdG9wcy1cdTAwM2VmYXVsdChwLCAwLCBocGFnZV9zaXplKTtcbiYjNDM7XHRjLVx1MDAzZWNvbGxhcHNlKFwmIzM0O0NvbGxhcHNlIFBURSB0YWJsZSB3aXRoIGhhbGYgUFRFIGVudHJpZXMgcHJlc2VudFwmIzM0OyxcbiYjNDM7XHRcdHAsIDEsIG9wcywgdHJ1ZSk7XG4gXHRvcHMtXHUwMDNlY2xlYW51cF9hcmVhKHAsIGhwYWdlX3BtZF9zaXplKTtcbiBcdGtzZnRfdGVzdF9yZXN1bHRfcmVwb3J0KGV4aXRfc3RhdHVzLCBcJiMzNDslc1xcblwmIzM0OywgX19mdW5jX18pO1xuIH1cbkBAIC04NDgsNyAmIzQzOzkzNSw3IEBAIHN0YXRpYyB2b2lkIGNvbGxhcHNlX3NpbmdsZV9wdGVfZW50cnlfY29tcG91bmQoc3RydWN0IGNvbGxhcHNlX2NvbnRleHQgKmMsIHN0cnVjXG4gXHRtYWR2aXNlKHAsIGhwYWdlX3BtZF9zaXplLCBNQURWX05PSFVHRVBBR0UpO1xuIFx0a3NmdF9wcmludF9tc2coXCYjMzQ7U3BsaXQgaHVnZSBwYWdlIGxlYXZpbmcgc2luZ2xlIFBURSBtYXBwaW5nIGNvbXBvdW5kIHBhZ2UuLi5cJiMzNDspO1xuIFx0bWFkdmlzZShwICYjNDM7IHBhZ2Vfc2l6ZSwgaHBhZ2VfcG1kX3NpemUgLSBwYWdlX3NpemUsIE1BRFZfRE9OVE5FRUQpO1xuLVx0aWYgKG9wcy1cdTAwM2VjaGVja19odWdlKHAsIDApKVxuJiM0MztcdGlmIChvcHMtXHUwMDNlY2hlY2tfaHVnZShwLCBocGFnZV9wbWRfc2l6ZSwgMCwgaHBhZ2VfcG1kX3NpemUpKVxuIFx0XHRzdWNjZXNzKFwmIzM0O09LXCYjMzQ7KTtcbiBcdGVsc2VcbiBcdFx0ZmFpbChcJiMzNDtGYWlsXCYjMzQ7KTtcbkBAIC04NjksNyAmIzQzOzk1Niw3IEBAIHN0YXRpYyB2b2lkIGNvbGxhcHNlX2Z1bGxfb2ZfY29tcG91bmQoc3RydWN0IGNvbGxhcHNlX2NvbnRleHQgKmMsIHN0cnVjdCBtZW1fb3BzXG4gXHRrc2Z0X3ByaW50X21zZyhcJiMzNDtTcGxpdCBodWdlIHBhZ2UgbGVhdmluZyBzaW5nbGUgUFRFIHBhZ2UgdGFibGUgZnVsbCBvZiBjb21wb3VuZCBwYWdlcy4uLlwmIzM0Oyk7XG4gXHRtYWR2aXNlKHAsIHBhZ2Vfc2l6ZSwgTUFEVl9OT0hVR0VQQUdFKTtcbiBcdG1hZHZpc2UocCwgaHBhZ2VfcG1kX3NpemUsIE1BRFZfTk9IVUdFUEFHRSk7XG4tXHRpZiAob3BzLVx1MDAzZWNoZWNrX2h1Z2UocCwgMCkpXG4mIzQzO1x0aWYgKG9wcy1cdTAwM2VjaGVja19odWdlKHAsIGhwYWdlX3BtZF9zaXplLCAwLCBocGFnZV9wbWRfc2l6ZSkpXG4gXHRcdHN1Y2Nlc3MoXCYjMzQ7T0tcJiMzNDspO1xuIFx0ZWxzZVxuIFx0XHRmYWlsKFwmIzM0O0ZhaWxcJiMzNDspO1xuQEAgLTg5MSw3ICYjNDM7OTc4LDcgQEAgc3RhdGljIHZvaWQgY29sbGFwc2VfY29tcG91bmRfZXh0cmVtZShzdHJ1Y3QgY29sbGFwc2VfY29udGV4dCAqYywgc3RydWN0IG1lbV9vcHNcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGhwYWdlX3BtZF9ucjsgaSYjNDM7JiM0MzspIHtcbiBcdFx0bWFkdmlzZShCQVNFX0FERFIsIGhwYWdlX3BtZF9zaXplLCBNQURWX0hVR0VQQUdFKTtcbiBcdFx0b3BzLVx1MDAzZWZhdWx0KEJBU0VfQUREUiwgMCwgaHBhZ2VfcG1kX3NpemUpO1xuLVx0XHRpZiAoIW9wcy1cdTAwM2VjaGVja19odWdlKEJBU0VfQUREUiwgMSkpXG4mIzQzO1x0XHRpZiAoIW9wcy1cdTAwM2VjaGVja19odWdlKEJBU0VfQUREUiwgaHBhZ2VfcG1kX3NpemUsIDEsIGhwYWdlX3BtZF9zaXplKSlcbiBcdFx0XHRrc2Z0X2V4aXRfZmFpbF9tc2coXCYjMzQ7RmFpbGVkIHRvIGFsbG9jYXRlIGh1Z2UgcGFnZVxcblwmIzM0Oyk7XG4gXHRcdG1hZHZpc2UoQkFTRV9BRERSLCBocGFnZV9wbWRfc2l6ZSwgTUFEVl9OT0hVR0VQQUdFKTtcbiBcbkBAIC05MTQsNyAmIzQzOzEwMDEsNyBAQCBzdGF0aWMgdm9pZCBjb2xsYXBzZV9jb21wb3VuZF9leHRyZW1lKHN0cnVjdCBjb2xsYXBzZV9jb250ZXh0ICpjLCBzdHJ1Y3QgbWVtX29wc1xuIFxuIFx0b3BzLVx1MDAzZWNsZWFudXBfYXJlYShCQVNFX0FERFIsIGhwYWdlX3BtZF9zaXplKTtcbiBcdG9wcy1cdTAwM2VmYXVsdChwLCAwLCBocGFnZV9wbWRfc2l6ZSk7XG4tXHRpZiAoIW9wcy1cdTAwM2VjaGVja19odWdlKHAsIDEpKVxuJiM0MztcdGlmICghb3BzLVx1MDAzZWNoZWNrX2h1Z2UocCwgaHBhZ2VfcG1kX3NpemUsIDEsIGhwYWdlX3BtZF9zaXplKSlcbiBcdFx0c3VjY2VzcyhcJiMzNDtPS1wmIzM0Oyk7XG4gXHRlbHNlXG4gXHRcdGZhaWwoXCYjMzQ7RmFpbFwmIzM0Oyk7XG5AQCAtOTM2LDcgJiM0MzsxMDIzLDcgQEAgc3RhdGljIHZvaWQgY29sbGFwc2VfZm9yayhzdHJ1Y3QgY29sbGFwc2VfY29udGV4dCAqYywgc3RydWN0IG1lbV9vcHMgKm9wcylcbiBcbiBcdGtzZnRfcHJpbnRfbXNnKFwmIzM0O0FsbG9jYXRlIHNtYWxsIHBhZ2UuLi5cJiMzNDspO1xuIFx0b3BzLVx1MDAzZWZhdWx0KHAsIDAsIHBhZ2Vfc2l6ZSk7XG4tXHRpZiAob3BzLVx1MDAzZWNoZWNrX2h1Z2UocCwgMCkpXG4mIzQzO1x0aWYgKG9wcy1cdTAwM2VjaGVja19odWdlKHAsIGhwYWdlX3BtZF9zaXplLCAwLCBocGFnZV9wbWRfc2l6ZSkpXG4gXHRcdHN1Y2Nlc3MoXCYjMzQ7T0tcJiMzNDspO1xuIFx0ZWxzZVxuIFx0XHRmYWlsKFwmIzM0O0ZhaWxcJiMzNDspO1xuQEAgLTk0NCw3ICYjNDM7MTAzMSw3IEBAIHN0YXRpYyB2b2lkIGNvbGxhcHNlX2Zvcmsoc3RydWN0IGNvbGxhcHNlX2NvbnRleHQgKmMsIHN0cnVjdCBtZW1fb3BzICpvcHMpXG4gXHRrc2Z0X3ByaW50X21zZyhcJiMzNDtTaGFyZSBzbWFsbCBwYWdlIG92ZXIgZm9yaygpLi4uXCYjMzQ7KTtcbiBcdGlmICghZm9yaygpKSB7XG4gXHRcdC8qIERvIG5vdCB0b3VjaCBzZXR0aW5ncyBvbiBjaGlsZCBleGl0ICovXG4tXHRcdGlmIChvcHMtXHUwMDNlY2hlY2tfaHVnZShwLCAwKSlcbiYjNDM7XHRcdGlmIChvcHMtXHUwMDNlY2hlY2tfaHVnZShwLCBocGFnZV9wbWRfc2l6ZSwgMCwgaHBhZ2VfcG1kX3NpemUpKVxuIFx0XHRcdHN1Y2Nlc3MoXCYjMzQ7T0tcJiMzNDspO1xuIFx0XHRlbHNlXG4gXHRcdFx0ZmFpbChcJiMzNDtGYWlsXCYjMzQ7KTtcbkBAIC05NjIsNyAmIzQzOzEwNDksNyBAQCBzdGF0aWMgdm9pZCBjb2xsYXBzZV9mb3JrKHN0cnVjdCBjb2xsYXBzZV9jb250ZXh0ICpjLCBzdHJ1Y3QgbWVtX29wcyAqb3BzKVxuIFx0ZXhpdF9zdGF0dXMgPSBXRVhJVFNUQVRVUyh3c3RhdHVzKTtcbiBcbiBcdGtzZnRfcHJpbnRfbXNnKFwmIzM0O0NoZWNrIGlmIHBhcmVudCBzdGlsbCBoYXMgc21hbGwgcGFnZS4uLlwmIzM0Oyk7XG4tXHRpZiAob3BzLVx1MDAzZWNoZWNrX2h1Z2UocCwgMCkpXG4mIzQzO1x0aWYgKG9wcy1cdTAwM2VjaGVja19odWdlKHAsIGhwYWdlX3BtZF9zaXplLCAwLCBocGFnZV9wbWRfc2l6ZSkpXG4gXHRcdHN1Y2Nlc3MoXCYjMzQ7T0tcJiMzNDspO1xuIFx0ZWxzZVxuIFx0XHRmYWlsKFwmIzM0O0ZhaWxcJiMzNDspO1xuQEAgLTk4MCw3ICYjNDM7MTA2Nyw3IEBAIHN0YXRpYyB2b2lkIGNvbGxhcHNlX2ZvcmtfY29tcG91bmQoc3RydWN0IGNvbGxhcHNlX2NvbnRleHQgKmMsIHN0cnVjdCBtZW1fb3BzICpvXG4gXHRrc2Z0X3ByaW50X21zZyhcJiMzNDtTaGFyZSBodWdlIHBhZ2Ugb3ZlciBmb3JrKCkuLi5cJiMzNDspO1xuIFx0aWYgKCFmb3JrKCkpIHtcbiBcdFx0LyogRG8gbm90IHRvdWNoIHNldHRpbmdzIG9uIGNoaWxkIGV4aXQgKi9cbi1cdFx0aWYgKG9wcy1cdTAwM2VjaGVja19odWdlKHAsIDEpKVxuJiM0MztcdFx0aWYgKG9wcy1cdTAwM2VjaGVja19odWdlKHAsIGhwYWdlX3BtZF9zaXplLCAxLCBocGFnZV9wbWRfc2l6ZSkpXG4gXHRcdFx0c3VjY2VzcyhcJiMzNDtPS1wmIzM0Oyk7XG4gXHRcdGVsc2VcbiBcdFx0XHRmYWlsKFwmIzM0O0ZhaWxcJiMzNDspO1xuQEAgLTk4OCw3ICYjNDM7MTA3NSw3IEBAIHN0YXRpYyB2b2lkIGNvbGxhcHNlX2ZvcmtfY29tcG91bmQoc3RydWN0IGNvbGxhcHNlX2NvbnRleHQgKmMsIHN0cnVjdCBtZW1fb3BzICpvXG4gXHRcdGtzZnRfcHJpbnRfbXNnKFwmIzM0O1NwbGl0IGh1Z2UgcGFnZSBQTUQgaW4gY2hpbGQgcHJvY2Vzcy4uLlwmIzM0Oyk7XG4gXHRcdG1hZHZpc2UocCwgcGFnZV9zaXplLCBNQURWX05PSFVHRVBBR0UpO1xuIFx0XHRtYWR2aXNlKHAsIGhwYWdlX3BtZF9zaXplLCBNQURWX05PSFVHRVBBR0UpO1xuLVx0XHRpZiAob3BzLVx1MDAzZWNoZWNrX2h1Z2UocCwgMCkpXG4mIzQzO1x0XHRpZiAob3BzLVx1MDAzZWNoZWNrX2h1Z2UocCwgaHBhZ2VfcG1kX3NpemUsIDAsIGhwYWdlX3BtZF9zaXplKSlcbiBcdFx0XHRzdWNjZXNzKFwmIzM0O09LXCYjMzQ7KTtcbiBcdFx0ZWxzZVxuIFx0XHRcdGZhaWwoXCYjMzQ7RmFpbFwmIzM0Oyk7XG5AQCAtMTAwOSw3ICYjNDM7MTA5Niw3IEBAIHN0YXRpYyB2b2lkIGNvbGxhcHNlX2ZvcmtfY29tcG91bmQoc3RydWN0IGNvbGxhcHNlX2NvbnRleHQgKmMsIHN0cnVjdCBtZW1fb3BzICpvXG4gXHRleGl0X3N0YXR1cyA9IFdFWElUU1RBVFVTKHdzdGF0dXMpO1xuIFxuIFx0a3NmdF9wcmludF9tc2coXCYjMzQ7Q2hlY2sgaWYgcGFyZW50IHN0aWxsIGhhcyBodWdlIHBhZ2UuLi5cJiMzNDspO1xuLVx0aWYgKG9wcy1cdTAwM2VjaGVja19odWdlKHAsIDEpKVxuJiM0MztcdGlmIChvcHMtXHUwMDNlY2hlY2tfaHVnZShwLCBocGFnZV9wbWRfc2l6ZSwgMSwgaHBhZ2VfcG1kX3NpemUpKVxuIFx0XHRzdWNjZXNzKFwmIzM0O09LXCYjMzQ7KTtcbiBcdGVsc2VcbiBcdFx0ZmFpbChcJiMzNDtGYWlsXCYjMzQ7KTtcbkBAIC0xMDI4LDcgJiM0MzsxMTE1LDcgQEAgc3RhdGljIHZvaWQgY29sbGFwc2VfbWF4X3B0ZXNfc2hhcmVkKHN0cnVjdCBjb2xsYXBzZV9jb250ZXh0ICpjLCBzdHJ1Y3QgbWVtX29wc1xuIFx0a3NmdF9wcmludF9tc2coXCYjMzQ7U2hhcmUgaHVnZSBwYWdlIG92ZXIgZm9yaygpLi4uXCYjMzQ7KTtcbiBcdGlmICghZm9yaygpKSB7XG4gXHRcdC8qIERvIG5vdCB0b3VjaCBzZXR0aW5ncyBvbiBjaGlsZCBleGl0ICovXG4tXHRcdGlmIChvcHMtXHUwMDNlY2hlY2tfaHVnZShwLCAxKSlcbiYjNDM7XHRcdGlmIChvcHMtXHUwMDNlY2hlY2tfaHVnZShwLCBocGFnZV9wbWRfc2l6ZSwgMSwgaHBhZ2VfcG1kX3NpemUpKVxuIFx0XHRcdHN1Y2Nlc3MoXCYjMzQ7T0tcJiMzNDspO1xuIFx0XHRlbHNlXG4gXHRcdFx0ZmFpbChcJiMzNDtGYWlsXCYjMzQ7KTtcbkBAIC0xMDM2LDcgJiM0MzsxMTIzLDcgQEAgc3RhdGljIHZvaWQgY29sbGFwc2VfbWF4X3B0ZXNfc2hhcmVkKHN0cnVjdCBjb2xsYXBzZV9jb250ZXh0ICpjLCBzdHJ1Y3QgbWVtX29wc1xuIFx0XHRrc2Z0X3ByaW50X21zZyhcJiMzNDtUcmlnZ2VyIENvVyBvbiBwYWdlICVkIG9mICVkLi4uXCYjMzQ7LFxuIFx0XHRcdFx0aHBhZ2VfcG1kX25yIC0gbWF4X3B0ZXNfc2hhcmVkIC0gMSwgaHBhZ2VfcG1kX25yKTtcbiBcdFx0b3BzLVx1MDAzZWZhdWx0KHAsIDAsIChocGFnZV9wbWRfbnIgLSBtYXhfcHRlc19zaGFyZWQgLSAxKSAqIHBhZ2Vfc2l6ZSk7XG4tXHRcdGlmIChvcHMtXHUwMDNlY2hlY2tfaHVnZShwLCAwKSlcbiYjNDM7XHRcdGlmIChvcHMtXHUwMDNlY2hlY2tfaHVnZShwLCBocGFnZV9wbWRfc2l6ZSwgMCwgaHBhZ2VfcG1kX3NpemUpKVxuIFx0XHRcdHN1Y2Nlc3MoXCYjMzQ7T0tcJiMzNDspO1xuIFx0XHRlbHNlXG4gXHRcdFx0ZmFpbChcJiMzNDtGYWlsXCYjMzQ7KTtcbkBAIC0xMDQ5LDcgJiM0MzsxMTM2LDcgQEAgc3RhdGljIHZvaWQgY29sbGFwc2VfbWF4X3B0ZXNfc2hhcmVkKHN0cnVjdCBjb2xsYXBzZV9jb250ZXh0ICpjLCBzdHJ1Y3QgbWVtX29wc1xuIFx0XHRcdCAgICAgICBocGFnZV9wbWRfbnIgLSBtYXhfcHRlc19zaGFyZWQsIGhwYWdlX3BtZF9ucik7XG4gXHRcdFx0b3BzLVx1MDAzZWZhdWx0KHAsIDAsIChocGFnZV9wbWRfbnIgLSBtYXhfcHRlc19zaGFyZWQpICpcbiBcdFx0XHRcdCAgICBwYWdlX3NpemUpO1xuLVx0XHRcdGlmIChvcHMtXHUwMDNlY2hlY2tfaHVnZShwLCAwKSlcbiYjNDM7XHRcdFx0aWYgKG9wcy1cdTAwM2VjaGVja19odWdlKHAsIGhwYWdlX3BtZF9zaXplLCAwLCBocGFnZV9wbWRfc2l6ZSkpXG4gXHRcdFx0XHRzdWNjZXNzKFwmIzM0O09LXCYjMzQ7KTtcbiBcdFx0XHRlbHNlXG4gXHRcdFx0XHRmYWlsKFwmIzM0O0ZhaWxcJiMzNDspO1xuQEAgLTEwNjcsNyAmIzQzOzExNTQsNyBAQCBzdGF0aWMgdm9pZCBjb2xsYXBzZV9tYXhfcHRlc19zaGFyZWQoc3RydWN0IGNvbGxhcHNlX2NvbnRleHQgKmMsIHN0cnVjdCBtZW1fb3BzXG4gXHRleGl0X3N0YXR1cyA9IFdFWElUU1RBVFVTKHdzdGF0dXMpO1xuIFxuIFx0a3NmdF9wcmludF9tc2coXCYjMzQ7Q2hlY2sgaWYgcGFyZW50IHN0aWxsIGhhcyBodWdlIHBhZ2UuLi5cJiMzNDspO1xuLVx0aWYgKG9wcy1cdTAwM2VjaGVja19odWdlKHAsIDEpKVxuJiM0MztcdGlmIChvcHMtXHUwMDNlY2hlY2tfaHVnZShwLCBocGFnZV9wbWRfc2l6ZSwgMSwgaHBhZ2VfcG1kX3NpemUpKVxuIFx0XHRzdWNjZXNzKFwmIzM0O09LXCYjMzQ7KTtcbiBcdGVsc2VcbiBcdFx0ZmFpbChcJiMzNDtGYWlsXCYjMzQ7KTtcbkBAIC0xMTA4LDggJiM0MzsxMTk1LDggQEAgc3RhdGljIHZvaWQgbWFkdmlzZV9yZXRyYWN0ZWRfcGFnZV90YWJsZXMoc3RydWN0IGNvbGxhcHNlX2NvbnRleHQgKmMsXG4gXHRvcHMtXHUwMDNlZmF1bHQocCwgMCwgc2l6ZSk7XG4gXG4gXHQvKiBMZXQga2h1Z2VwYWdlZCBjb2xsYXBzZSBhbmQgbGVhdmUgcG1kIGNsZWFyZWQgKi9cbi1cdGlmICh3YWl0X2Zvcl9zY2FuKFwmIzM0O0NvbGxhcHNlIGFuZCBsZWF2ZSBQTUQgY2xlYXJlZFwmIzM0OywgcCwgbnJfaHBhZ2VzLFxuLVx0XHRcdCAgb3BzKSkge1xuJiM0MztcdGlmICh3YWl0X2Zvcl9zY2FuKFwmIzM0O0NvbGxhcHNlIGFuZCBsZWF2ZSBQTUQgY2xlYXJlZFwmIzM0OywgcCwgc2l6ZSwgbnJfaHBhZ2VzLFxuJiM0MztcdFx0XHQgIGhwYWdlX3BtZF9vcmRlciwgb3BzKSkge1xuIFx0XHRmYWlsKFwmIzM0O1RpbWVvdXRcJiMzNDspO1xuIFx0XHRyZXR1cm47XG4gXHR9XG5AQCAtMTEyNSwxNyAmIzQzOzEyMTIsMTkgQEAgc3RhdGljIHZvaWQgdXNhZ2Uodm9pZClcbiB7XG4gXHRmcHJpbnRmKHN0ZGVyciwgXCYjMzQ7XFxuVXNhZ2U6IC4va2h1Z2VwYWdlZCBbT1BUSU9OU10gXHUwMDNjdGVzdCB0eXBlXHUwMDNlIFtkaXJdXFxuXFxuXCYjMzQ7KTtcbiBcdGZwcmludGYoc3RkZXJyLCBcJiMzNDtcXHRcdTAwM2N0ZXN0IHR5cGVcdTAwM2VcXHQ6IFx1MDAzY2NvbnRleHRcdTAwM2U6XHUwMDNjbWVtX3R5cGVcdTAwM2VcXG5cJiMzNDspO1xuLVx0ZnByaW50ZihzdGRlcnIsIFwmIzM0O1xcdFx1MDAzY2NvbnRleHRcdTAwM2VcXHQ6IFthbGx8a2h1Z2VwYWdlZHxtYWR2aXNlXVxcblwmIzM0Oyk7XG4mIzQzO1x0ZnByaW50ZihzdGRlcnIsIFwmIzM0O1xcdFx1MDAzY2NvbnRleHRcdTAwM2VcXHQ6IFthbGx8a2h1Z2VwYWdlZHxtdGhwX2todWdlcGFnZWR8bWFkdmlzZV1cXG5cJiMzNDspO1xuIFx0ZnByaW50ZihzdGRlcnIsIFwmIzM0O1xcdFx1MDAzY21lbV90eXBlXHUwMDNlXFx0OiBbYWxsfGFub258ZmlsZXxzaG1lbV1cXG5cJiMzNDspO1xuIFx0ZnByaW50ZihzdGRlcnIsIFwmIzM0O1xcblxcdFxcXCYjMzQ7ZmlsZSxhbGxcXFwmIzM0OyBtZW1fdHlwZSByZXF1aXJlcyBbZGlyXSBhcmd1bWVudFxcblwmIzM0Oyk7XG4gXHRmcHJpbnRmKHN0ZGVyciwgXCYjMzQ7XFxuXFx0XFxcJiMzNDtmaWxlLGFsbFxcXCYjMzQ7IG1lbV90eXBlIHJlcXVpcmVzIGEgZmlsZSBzeXN0ZW1cXG5cJiMzNDspO1xuIFx0ZnByaW50ZihzdGRlcnIsXHRcJiMzNDtcXHR3aXRoIFBNRC1zaXplZCBsYXJnZSBmb2xpbyBzdXBwb3J0XFxuXCYjMzQ7KTtcbiBcdGZwcmludGYoc3RkZXJyLCBcJiMzNDtcXG5cXHRpZiBbZGlyXSBpcyBhIChzdWIpZGlyZWN0b3J5IG9mIGEgdG1wZnMgbW91bnQsIHRtcGZzIG11c3QgYmVcXG5cJiMzNDspO1xuIFx0ZnByaW50ZihzdGRlcnIsXHRcJiMzNDtcXHRtb3VudGVkIHdpdGggaHVnZT1hZHZpc2Ugb3B0aW9uIGZvciBraHVnZXBhZ2VkIHRlc3RzIHRvIHdvcmtcXG5cJiMzNDspO1xuJiM0MztcdGZwcmludGYoc3RkZXJyLCBcJiMzNDtcXG5cXHRtdGhwX2todWdlcGFnZWQgb25seSBzdXBwb3J0cyBhbm9uIG1lbV90eXBlIG5vdy5cXG5cJiMzNDspO1xuIFx0ZnByaW50ZihzdGRlcnIsXHRcJiMzNDtcXG5cXHRTdXBwb3J0ZWQgT3B0aW9uczpcXG5cJiMzNDspO1xuIFx0ZnByaW50ZihzdGRlcnIsXHRcJiMzNDtcXHRcXHQtaDogVGhpcyBoZWxwIG1lc3NhZ2UuXFxuXCYjMzQ7KTtcbiBcdGZwcmludGYoc3RkZXJyLFx0XCYjMzQ7XFx0XFx0LXM6IG1USFAgc2l6ZSwgZXhwcmVzc2VkIGFzIHBhZ2Ugb3JkZXIuXFxuXCYjMzQ7KTtcbiBcdGZwcmludGYoc3RkZXJyLFx0XCYjMzQ7XFx0XFx0ICAgIERlZmF1bHRzIHRvIDAuIFVzZSB0aGlzIHNpemUgZm9yIGFub24gb3Igc2htZW0gYWxsb2NhdGlvbnMuXFxuXCYjMzQ7KTtcbiYjNDM7XHRmcHJpbnRmKHN0ZGVycixcdFwmIzM0O1xcdFxcdC1jOiBjb2xsYXBzZSBvcmRlciBmb3IgbVRIUCBjb2xsYXBzZSwgZXhwcmVzc2VkIGFzIHBhZ2Ugb3JkZXIuXFxuXCYjMzQ7KTtcbiBcdGV4aXQoMSk7XG4gfVxuIFxuQEAgLTExNDUsMTEgJiM0MzsxMjM0LDE0IEBAIHN0YXRpYyB2b2lkIHBhcnNlX3Rlc3RfdHlwZShpbnQgYXJnYywgY2hhciAqKmFyZ3YpXG4gXHRjaGFyICpidWY7XG4gXHRjb25zdCBjaGFyICp0b2tlbjtcbiBcbi1cdHdoaWxlICgob3B0ID0gZ2V0b3B0KGFyZ2MsIGFyZ3YsIFwmIzM0O3M6aFwmIzM0OykpICE9IC0xKSB7XG4mIzQzO1x0d2hpbGUgKChvcHQgPSBnZXRvcHQoYXJnYywgYXJndiwgXCYjMzQ7czpjOmhcJiMzNDspKSAhPSAtMSkge1xuIFx0XHRzd2l0Y2ggKG9wdCkge1xuIFx0XHRjYXNlICYjMzk7cyYjMzk7OlxuIFx0XHRcdGFub25fb3JkZXIgPSBhdG9pKG9wdGFyZyk7XG4gXHRcdFx0YnJlYWs7XG4mIzQzO1x0XHRjYXNlICYjMzk7YyYjMzk7OlxuJiM0MztcdFx0XHRjb2xsYXBzZV9vcmRlciA9IGF0b2kob3B0YXJnKTtcbiYjNDM7XHRcdFx0YnJlYWs7XG4gXHRcdGNhc2UgJiMzOTtoJiMzOTs6XG4gXHRcdGRlZmF1bHQ6XG4gXHRcdFx0dXNhZ2UoKTtcbkBAIC0xMTc1LDYgJiM0MzsxMjY3LDEwIEBAIHN0YXRpYyB2b2lkIHBhcnNlX3Rlc3RfdHlwZShpbnQgYXJnYywgY2hhciAqKmFyZ3YpXG4gXHRcdG1hZHZpc2VfY29udGV4dCA9ICBcdTAwMjZfX21hZHZpc2VfY29udGV4dDtcbiBcdH0gZWxzZSBpZiAoIXN0cmNtcCh0b2tlbiwgXCYjMzQ7a2h1Z2VwYWdlZFwmIzM0OykpIHtcbiBcdFx0a2h1Z2VwYWdlZF9jb250ZXh0ID0gIFx1MDAyNl9fa2h1Z2VwYWdlZF9jb250ZXh0O1xuJiM0MztcdH0gZWxzZSBpZiAoIXN0cmNtcCh0b2tlbiwgXCYjMzQ7bXRocF9raHVnZXBhZ2VkXCYjMzQ7KSkge1xuJiM0MztcdFx0bXRocF9raHVnZXBhZ2VkX2NvbnRleHQgPSAgXHUwMDI2X19tdGhwX2todWdlcGFnZWRfY29udGV4dDtcbiYjNDM7XHRcdGlmIChjb2xsYXBzZV9vcmRlciBcdTAwM2M9IDAgfHwgY29sbGFwc2Vfb3JkZXIgXHUwMDNlPSBocGFnZV9wbWRfb3JkZXIpXG4mIzQzO1x0XHRcdHVzYWdlKCk7XG4gXHR9IGVsc2UgaWYgKCFzdHJjbXAodG9rZW4sIFwmIzM0O21hZHZpc2VcJiMzNDspKSB7XG4gXHRcdG1hZHZpc2VfY29udGV4dCA9ICBcdTAwMjZfX21hZHZpc2VfY29udGV4dDtcbiBcdH0gZWxzZSB7XG5AQCAtMTE5MCwxNCAmIzQzOzEyODYsMjAgQEAgc3RhdGljIHZvaWQgcGFyc2VfdGVzdF90eXBlKGludCBhcmdjLCBjaGFyICoqYXJndilcbiBcdFx0cmVhZF93cml0ZV9maWxlX3dyaXRlX29wcyA9ICBcdTAwMjZfX3JlYWRfd3JpdGVfZmlsZV93cml0ZV9vcHM7XG4gXHRcdGFub25fb3BzID0gXHUwMDI2X19hbm9uX29wcztcbiBcdFx0c2htZW1fb3BzID0gXHUwMDI2X19zaG1lbV9vcHM7XG4mIzQzO1x0XHRpZiAobXRocF9raHVnZXBhZ2VkX2NvbnRleHQpXG4mIzQzO1x0XHRcdHVzYWdlKCk7XG4gXHR9IGVsc2UgaWYgKCFzdHJjbXAoYnVmLCBcJiMzNDthbm9uXCYjMzQ7KSkge1xuIFx0XHRhbm9uX29wcyA9IFx1MDAyNl9fYW5vbl9vcHM7XG4gXHR9IGVsc2UgaWYgKCFzdHJjbXAoYnVmLCBcJiMzNDtmaWxlXCYjMzQ7KSkge1xuIFx0XHRyZWFkX29ubHlfZmlsZV9vcHMgPSAgXHUwMDI2X19yZWFkX29ubHlfZmlsZV9vcHM7XG4gXHRcdHJlYWRfd3JpdGVfZmlsZV9yZWFkX29wcyA9ICBcdTAwMjZfX3JlYWRfd3JpdGVfZmlsZV9yZWFkX29wcztcbiBcdFx0cmVhZF93cml0ZV9maWxlX3dyaXRlX29wcyA9ICBcdTAwMjZfX3JlYWRfd3JpdGVfZmlsZV93cml0ZV9vcHM7XG4mIzQzO1x0XHRpZiAobXRocF9raHVnZXBhZ2VkX2NvbnRleHQpXG4mIzQzO1x0XHRcdHVzYWdlKCk7XG4gXHR9IGVsc2UgaWYgKCFzdHJjbXAoYnVmLCBcJiMzNDtzaG1lbVwmIzM0OykpIHtcbiBcdFx0c2htZW1fb3BzID0gXHUwMDI2X19zaG1lbV9vcHM7XG4mIzQzO1x0XHRpZiAobXRocF9raHVnZXBhZ2VkX2NvbnRleHQpXG4mIzQzO1x0XHRcdHVzYWdlKCk7XG4gXHR9IGVsc2Uge1xuIFx0XHR1c2FnZSgpO1xuIFx0fVxuQEAgLTEyNDAsNyAmIzQzOzEzNDIsNiBAQCBzdGF0aWMgaW50IG5yX3Rlc3RfY2FzZXM7XG4gXG4gaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KVxuIHtcbi1cdGludCBocGFnZV9wbWRfb3JkZXI7XG4gXHRzdHJ1Y3QgdGhwX3NldHRpbmdzIGRlZmF1bHRfc2V0dGluZ3MgPSB7XG4gXHRcdC50aHBfZW5hYmxlZCA9IFRIUF9NQURWSVNFLFxuIFx0XHQudGhwX2RlZnJhZyA9IFRIUF9ERUZSQUdfQUxXQVlTLFxuQEAgLTEyNjYsMTAgJiM0MzsxMzY3LDYgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KVxuIFx0aWYgKCF0aHBfaXNfZW5hYmxlZCgpKVxuIFx0XHRrc2Z0X2V4aXRfc2tpcChcJiMzNDtUcmFuc3BhcmVudCBIdWdlcGFnZXMgbm90IGF2YWlsYWJsZVxcblwmIzM0Oyk7XG4gXG4tXHRwYXJzZV90ZXN0X3R5cGUoYXJnYywgYXJndik7XG4tXG4tXHRzZXRidWYoc3Rkb3V0LCBOVUxMKTtcbi1cbiBcdHBhZ2Vfc2l6ZSA9IGdldHBhZ2VzaXplKCk7XG4gXHRocGFnZV9wbWRfc2l6ZSA9IHJlYWRfcG1kX3BhZ2VzaXplKCk7XG4gXHRpZiAoIWhwYWdlX3BtZF9zaXplKVxuQEAgLTEyNzcsNiAmIzQzOzEzNzQsMTAgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KVxuIFx0aHBhZ2VfcG1kX25yID0gaHBhZ2VfcG1kX3NpemUgLyBwYWdlX3NpemU7XG4gXHRocGFnZV9wbWRfb3JkZXIgPSBfX2J1aWx0aW5fY3R6KGhwYWdlX3BtZF9ucik7XG4gXG4mIzQzO1x0cGFyc2VfdGVzdF90eXBlKGFyZ2MsIGFyZ3YpO1xuJiM0MztcbiYjNDM7XHRzZXRidWYoc3Rkb3V0LCBOVUxMKTtcbiYjNDM7XG4gXHRkZWZhdWx0X3NldHRpbmdzLmtodWdlcGFnZWQubWF4X3B0ZXNfbm9uZSA9IGhwYWdlX3BtZF9uciAtIDE7XG4gXHRkZWZhdWx0X3NldHRpbmdzLmtodWdlcGFnZWQubWF4X3B0ZXNfc3dhcCA9IGhwYWdlX3BtZF9uciAvIDg7XG4gXHRkZWZhdWx0X3NldHRpbmdzLmtodWdlcGFnZWQubWF4X3B0ZXNfc2hhcmVkID0gaHBhZ2VfcG1kX25yIC8gMjtcbkBAIC0xMjk0LDYgJiM0MzsxMzk1LDcgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KVxuIFx0VEVTVChjb2xsYXBzZV9mdWxsLCBraHVnZXBhZ2VkX2NvbnRleHQsIHJlYWRfd3JpdGVfZmlsZV9yZWFkX29wcyk7XG4gXHRURVNUKGNvbGxhcHNlX2Z1bGwsIGtodWdlcGFnZWRfY29udGV4dCwgcmVhZF93cml0ZV9maWxlX3dyaXRlX29wcyk7XG4gXHRURVNUKGNvbGxhcHNlX2Z1bGwsIGtodWdlcGFnZWRfY29udGV4dCwgc2htZW1fb3BzKTtcbiYjNDM7XHRURVNUKGNvbGxhcHNlX2Z1bGwsIG10aHBfa2h1Z2VwYWdlZF9jb250ZXh0LCBhbm9uX29wcyk7XG4gXHRURVNUKGNvbGxhcHNlX2Z1bGwsIG1hZHZpc2VfY29udGV4dCwgYW5vbl9vcHMpO1xuIFx0VEVTVChjb2xsYXBzZV9mdWxsLCBtYWR2aXNlX2NvbnRleHQsIHJlYWRfb25seV9maWxlX29wcyk7XG4gXHRURVNUKGNvbGxhcHNlX2Z1bGwsIG1hZHZpc2VfY29udGV4dCwgcmVhZF93cml0ZV9maWxlX3JlYWRfb3BzKTtcbkBAIC0xMzAxLDggJiM0MzsxNDAzLDExIEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndilcbiBcdFRFU1QoY29sbGFwc2VfZnVsbCwgbWFkdmlzZV9jb250ZXh0LCBzaG1lbV9vcHMpO1xuIFxuIFx0VEVTVChjb2xsYXBzZV9lbXB0eSwga2h1Z2VwYWdlZF9jb250ZXh0LCBhbm9uX29wcyk7XG4mIzQzO1x0VEVTVChjb2xsYXBzZV9lbXB0eSwgbXRocF9raHVnZXBhZ2VkX2NvbnRleHQsIGFub25fb3BzKTtcbiBcdFRFU1QoY29sbGFwc2VfZW1wdHksIG1hZHZpc2VfY29udGV4dCwgYW5vbl9vcHMpO1xuIFxuJiM0MztcdFRFU1QoY29sbGFwc2Vfc2luZ2xlX210aHAsIG10aHBfa2h1Z2VwYWdlZF9jb250ZXh0LCBhbm9uX29wcyk7XG4mIzQzO1xuIFx0VEVTVChjb2xsYXBzZV9zaW5nbGVfcHRlX2VudHJ5LCBraHVnZXBhZ2VkX2NvbnRleHQsIGFub25fb3BzKTtcbiBcdFRFU1QoY29sbGFwc2Vfc2luZ2xlX3B0ZV9lbnRyeSwga2h1Z2VwYWdlZF9jb250ZXh0LCByZWFkX29ubHlfZmlsZV9vcHMpO1xuIFx0VEVTVChjb2xsYXBzZV9zaW5nbGVfcHRlX2VudHJ5LCBraHVnZXBhZ2VkX2NvbnRleHQsIHJlYWRfd3JpdGVfZmlsZV9yZWFkX29wcyk7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGFnZW1hcF9pb2N0bC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGFnZW1hcF9pb2N0bC5jXG5pbmRleCAxYjJkZmZjYzk5OWIwLi5jZmQxOTg3MzM5YzEzIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGFnZW1hcF9pb2N0bC5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wYWdlbWFwX2lvY3RsLmNcbkBAIC0xMDg1LDcgJiM0MzsxMDg1LDcgQEAgc3RhdGljIHZvaWQgdW5wb3B1bGF0ZWRfd3JpdHRlbl90ZXN0KGNvbnN0IGNoYXIgKm5hbWUsIGNoYXIgKm1lbSwgbG9uZyBzaXplLFxuIFx0bWVtc2V0KG1lbSwgMSwgc2l6ZSk7XG4gXHRpZiAodXNlX3RocCBcdTAwMjZcdTAwMjZcbiBcdCAgICAobWFkdmlzZShtZW0sIHNpemUsIE1BRFZfQ09MTEFQU0UpIHx8XG4tXHQgICAgICFjaGVja19odWdlX2Fub24obWVtLCBzaXplIC8gaHBhZ2Vfc2l6ZSwgaHBhZ2Vfc2l6ZSkpKSB7XG4mIzQzO1x0ICAgICAhY2hlY2tfaHVnZV9hbm9uKG1lbSwgc2l6ZSwgc2l6ZSAvIGhwYWdlX3NpemUsIGhwYWdlX3NpemUpKSkge1xuIFx0XHRrc2Z0X3Rlc3RfcmVzdWx0X3NraXAoXCYjMzQ7JXMgY291bGQgbm90IGZvcm0gYSBUSFBcXG5cJiMzNDssIG5hbWUpO1xuIFx0XHRnb3RvIG91dDtcbiBcdH1cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wcmN0bF90aHBfZGlzYWJsZS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcHJjdGxfdGhwX2Rpc2FibGUuY1xuaW5kZXggZDhkOWQxZGU1N2I4Yi4uODJjNmU5NmVhNmViMyAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ByY3RsX3RocF9kaXNhYmxlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ByY3RsX3RocF9kaXNhYmxlLmNcbkBAIC02Nyw3ICYjNDM7NjcsNyBAQCBzdGF0aWMgaW50IHRlc3RfbW1hcF90aHAoZW51bSB0aHBfY29sbGFwc2VfdHlwZSBtYWR2aXNlX2J1Ziwgc2l6ZV90IHBtZHNpemUpXG4gXHQvKiBIQUNLOiBtYWtlIHN1cmUgd2UgaGF2ZSBhIHNlcGFyYXRlIFZNQSB0aGF0IHdlIGNhbiBjaGVjayByZWxpYWJseS4gKi9cbiBcdG1wcm90ZWN0KG1lbSwgcG1kc2l6ZSwgUFJPVF9SRUFEKTtcbiBcbi1cdHJldCA9IGNoZWNrX2h1Z2VfYW5vbihtZW0sIDEsIHBtZHNpemUpO1xuJiM0MztcdHJldCA9IGNoZWNrX2h1Z2VfYW5vbihtZW0sIHBtZHNpemUsIDEsIHBtZHNpemUpO1xuIFx0bXVubWFwKG1tYXBfbWVtLCBtbWFwX3NpemUpO1xuIFx0cmV0dXJuIHJldDtcbiB9XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcnVuX3ZtdGVzdHMuc2ggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ydW5fdm10ZXN0cy5zaFxuaW5kZXggNjg3ZDExNWUzYmQ4MC4uZDA5ZjlmNmEzODRlZSAxMDA3NTVcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3J1bl92bXRlc3RzLnNoXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ydW5fdm10ZXN0cy5zaFxuQEAgLTQxMCw2ICYjNDM7NDEwLDggQEAgQ0FURUdPUlk9XCYjMzQ7dGhwXCYjMzQ7IHJ1bl90ZXN0IC4va2h1Z2VwYWdlZCBhbGw6c2htZW1cbiBcbiBDQVRFR09SWT1cJiMzNDt0aHBcJiMzNDsgcnVuX3Rlc3QgLi9raHVnZXBhZ2VkIC1zIDQgYWxsOnNobWVtXG4gXG4mIzQzO0NBVEVHT1JZPVwmIzM0O3RocFwmIzM0OyBydW5fdGVzdCAuL2todWdlcGFnZWQgLWMgNCBtdGhwX2todWdlcGFnZWQ6YW5vblxuJiM0MztcbiAjIFRyeSB0byBjcmVhdGUgWEZTIGlmIG5vdCBwcm92aWRlZFxuIGlmIFsgLXogXCYjMzQ7JHtTUExJVF9IVUdFX1BBR0VfVEVTVF9YRlNfUEFUSH1cJiMzNDsgXTsgdGhlblxuICAgICBpZiB0ZXN0X3NlbGVjdGVkIFwmIzM0O3RocFwmIzM0OzsgdGhlblxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3NvZnQtZGlydHkuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3NvZnQtZGlydHkuY1xuaW5kZXggZmIxODY0YTY4ZTFjNi4uZTE5OGZhY2Y3OGJiNSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3NvZnQtZGlydHkuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vc29mdC1kaXJ0eS5jXG5AQCAtMTAzLDcgJiM0MzsxMDMsNyBAQCBzdGF0aWMgdm9pZCB0ZXN0X2h1Z2VwYWdlKGludCBwYWdlbWFwX2ZkLCBpbnQgcGFnZXNpemUpXG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBocGFnZV9sZW47IGkmIzQzOyYjNDM7KVxuIFx0XHRtYXBbaV0gPSAoY2hhcilpO1xuIFxuLVx0aWYgKGNoZWNrX2h1Z2VfYW5vbihtYXAsIDEsIGhwYWdlX2xlbikpIHtcbiYjNDM7XHRpZiAoY2hlY2tfaHVnZV9hbm9uKG1hcCwgaHBhZ2VfbGVuLCAxLCBocGFnZV9sZW4pKSB7XG4gXHRcdGtzZnRfdGVzdF9yZXN1bHRfcGFzcyhcJiMzNDtUZXN0ICVzIGh1Z2UgcGFnZSBhbGxvY2F0aW9uXFxuXCYjMzQ7LCBfX2Z1bmNfXyk7XG4gXG4gXHRcdGNsZWFyX3NvZnRkaXJ0eSgpO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3NwbGl0X2h1Z2VfcGFnZV90ZXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9zcGxpdF9odWdlX3BhZ2VfdGVzdC5jXG5pbmRleCAzMmI5OTE0NzJmNzQ0Li44NmE2MDM2OTI4MjYxIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vc3BsaXRfaHVnZV9wYWdlX3Rlc3QuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vc3BsaXRfaHVnZV9wYWdlX3Rlc3QuY1xuQEAgLTEwNCwxMjkgJiM0MzsxMDQsNiBAQCBzdGF0aWMgYm9vbCBpc19iYWNrZWRfYnlfZm9saW8oY2hhciAqdmFkZHIsIGludCBvcmRlciwgaW50IHBhZ2VtYXBfZmQsXG4gXHRyZXR1cm4gZmFsc2U7XG4gfVxuIFxuLXN0YXRpYyBpbnQgdmFkZHJfcGFnZWZsYWdzX2dldChjaGFyICp2YWRkciwgaW50IHBhZ2VtYXBfZmQsIGludCBrcGFnZWZsYWdzX2ZkLFxuLVx0XHR1aW50NjRfdCAqZmxhZ3MpXG4te1xuLVx0dW5zaWduZWQgbG9uZyBwZm47XG4tXG4tXHRwZm4gPSBwYWdlbWFwX2dldF9wZm4ocGFnZW1hcF9mZCwgdmFkZHIpO1xuLVxuLVx0Lyogbm9uLXByZXNlbnQgUEZOICovXG4tXHRpZiAocGZuID09IC0xVUwpXG4tXHRcdHJldHVybiAxO1xuLVxuLVx0aWYgKHBhZ2VmbGFnc19nZXQocGZuLCBrcGFnZWZsYWdzX2ZkLCBmbGFncykpXG4tXHRcdHJldHVybiAtMTtcbi1cbi1cdHJldHVybiAwO1xuLX1cbi1cbi0vKlxuLSAqIGdhdGhlcl9hZnRlcl9zcGxpdF9mb2xpb19vcmRlcnMgLSBzY2FuIHRocm91Z2ggW3ZhZGRyX3N0YXJ0LCBsZW4pIGFuZCByZWNvcmRcbi0gKiBmb2xpbyBvcmRlcnNcbi0gKlxuLSAqIEB2YWRkcl9zdGFydDogc3RhcnQgdmFkZHJcbi0gKiBAbGVuOiByYW5nZSBsZW5ndGhcbi0gKiBAcGFnZW1hcF9mZDogZmlsZSBkZXNjcmlwdG9yIHRvIC9wcm9jL1x1MDAzY3BpZFx1MDAzZS9wYWdlbWFwXG4tICogQGtwYWdlZmxhZ3NfZmQ6IGZpbGUgZGVzY3JpcHRvciB0byAvcHJvYy9rcGFnZWZsYWdzXG4tICogQG9yZGVyczogb3V0cHV0IGZvbGlvIG9yZGVyIGFycmF5XG4tICogQG5yX29yZGVyczogZm9saW8gb3JkZXIgYXJyYXkgc2l6ZVxuLSAqXG4tICogZ2F0aGVyX2FmdGVyX3NwbGl0X2ZvbGlvX29yZGVycygpIHNjYW4gdGhyb3VnaCBbdmFkZHJfc3RhcnQsIGxlbikgYW5kIGNoZWNrXG4tICogYWxsIGZvbGlvcyB3aXRoaW4gdGhlIHJhbmdlIGFuZCByZWNvcmQgdGhlaXIgb3JkZXJzLiBBbGwgb3JkZXItMCBwYWdlcyB3aWxsXG4tICogYmUgcmVjb3JkZWQuIE5vbi1wcmVzZW50IHZhZGRyIGlzIHNraXBwZWQuXG4tICpcbi0gKiBOT1RFOiB0aGUgZnVuY3Rpb24gaXMgdXNlZCB0byBjaGVjayBmb2xpbyBvcmRlcnMgYWZ0ZXIgYSBzcGxpdCBpcyBwZXJmb3JtZWQsXG4tICogc28gaXQgYXNzdW1lcyBbdmFkZHJfc3RhcnQsIGxlbikgZnVsbHkgbWFwcyB0byBhZnRlci1zcGxpdCBmb2xpb3Mgd2l0aGluIHRoYXRcbi0gKiByYW5nZS5cbi0gKlxuLSAqIFJldHVybjogMCAtIG5vIGVycm9yLCAtMSAtIHVuaGFuZGxlZCBjYXNlc1xuLSAqL1xuLXN0YXRpYyBpbnQgZ2F0aGVyX2FmdGVyX3NwbGl0X2ZvbGlvX29yZGVycyhjaGFyICp2YWRkcl9zdGFydCwgc2l6ZV90IGxlbixcbi1cdFx0aW50IHBhZ2VtYXBfZmQsIGludCBrcGFnZWZsYWdzX2ZkLCBpbnQgb3JkZXJzW10sIGludCBucl9vcmRlcnMpXG4te1xuLVx0dWludDY0X3QgcGFnZV9mbGFncyA9IDA7XG4tXHRpbnQgY3VyX29yZGVyID0gLTE7XG4tXHRjaGFyICp2YWRkcjtcbi1cbi1cdGlmIChwYWdlbWFwX2ZkID09IC0xIHx8IGtwYWdlZmxhZ3NfZmQgPT0gLTEpXG4tXHRcdHJldHVybiAtMTtcbi1cdGlmICghb3JkZXJzKVxuLVx0XHRyZXR1cm4gLTE7XG4tXHRpZiAobnJfb3JkZXJzIFx1MDAzYz0gMClcbi1cdFx0cmV0dXJuIC0xO1xuLVxuLVx0Zm9yICh2YWRkciA9IHZhZGRyX3N0YXJ0OyB2YWRkciBcdTAwM2MgdmFkZHJfc3RhcnQgJiM0MzsgbGVuOykge1xuLVx0XHRjaGFyICpuZXh0X2ZvbGlvX3ZhZGRyO1xuLVx0XHRpbnQgc3RhdHVzO1xuLVxuLVx0XHRzdGF0dXMgPSB2YWRkcl9wYWdlZmxhZ3NfZ2V0KHZhZGRyLCBwYWdlbWFwX2ZkLCBrcGFnZWZsYWdzX2ZkLFxuLVx0XHRcdFx0XHRcdTAwMjZwYWdlX2ZsYWdzKTtcbi1cdFx0aWYgKHN0YXR1cyBcdTAwM2MgMClcbi1cdFx0XHRyZXR1cm4gLTE7XG4tXG4tXHRcdC8qIHNraXAgbm9uIHByZXNlbnQgdmFkZHIgKi9cbi1cdFx0aWYgKHN0YXR1cyA9PSAxKSB7XG4tXHRcdFx0dmFkZHIgJiM0Mzs9IHBzaXplKCk7XG4tXHRcdFx0Y29udGludWU7XG4tXHRcdH1cbi1cbi1cdFx0LyogYWxsIG9yZGVyLTAgcGFnZXMgd2l0aCBwb3NzaWJsZSBmYWxzZSBwb3N0aXZlIChub24gZm9saW8pICovXG4tXHRcdGlmICghKHBhZ2VfZmxhZ3MgXHUwMDI2IChLUEZfQ09NUE9VTkRfSEVBRCB8IEtQRl9DT01QT1VORF9UQUlMKSkpIHtcbi1cdFx0XHRvcmRlcnNbMF0mIzQzOyYjNDM7O1xuLVx0XHRcdHZhZGRyICYjNDM7PSBwc2l6ZSgpO1xuLVx0XHRcdGNvbnRpbnVlO1xuLVx0XHR9XG4tXG4tXHRcdC8qIHNraXAgbm9uIHRocCBjb21wb3VuZCBwYWdlcyAqL1xuLVx0XHRpZiAoIShwYWdlX2ZsYWdzIFx1MDAyNiBLUEZfVEhQKSkge1xuLVx0XHRcdHZhZGRyICYjNDM7PSBwc2l6ZSgpO1xuLVx0XHRcdGNvbnRpbnVlO1xuLVx0XHR9XG4tXG4tXHRcdC8qIHZwbiBwb2ludHMgdG8gcGFydCBvZiBhIFRIUCBhdCB0aGlzIHBvaW50ICovXG4tXHRcdGlmIChwYWdlX2ZsYWdzIFx1MDAyNiBLUEZfQ09NUE9VTkRfSEVBRClcbi1cdFx0XHRjdXJfb3JkZXIgPSAxO1xuLVx0XHRlbHNlIHtcbi1cdFx0XHR2YWRkciAmIzQzOz0gcHNpemUoKTtcbi1cdFx0XHRjb250aW51ZTtcbi1cdFx0fVxuLVxuLVx0XHRuZXh0X2ZvbGlvX3ZhZGRyID0gdmFkZHIgJiM0MzsgKDFVTCBcdTAwM2NcdTAwM2MgKGN1cl9vcmRlciAmIzQzOyBwc2hpZnQoKSkpO1xuLVxuLVx0XHRpZiAobmV4dF9mb2xpb192YWRkciBcdTAwM2U9IHZhZGRyX3N0YXJ0ICYjNDM7IGxlbilcbi1cdFx0XHRicmVhaztcbi1cbi1cdFx0d2hpbGUgKChzdGF0dXMgPSB2YWRkcl9wYWdlZmxhZ3NfZ2V0KG5leHRfZm9saW9fdmFkZHIsXG4tXHRcdFx0XHRcdFx0ICAgICBwYWdlbWFwX2ZkLCBrcGFnZWZsYWdzX2ZkLFxuLVx0XHRcdFx0XHRcdCAgICAgXHUwMDI2cGFnZV9mbGFncykpIFx1MDAzZT0gMCkge1xuLVx0XHRcdC8qXG4tXHRcdFx0ICogbm9uIHByZXNlbnQgdmFkZHIsIG5leHQgY29tcG91bmQgaGVhZCBwYWdlLCBvclxuLVx0XHRcdCAqIG9yZGVyLTAgcGFnZVxuLVx0XHRcdCAqL1xuLVx0XHRcdGlmIChzdGF0dXMgPT0gMSB8fFxuLVx0XHRcdCAgICAocGFnZV9mbGFncyBcdTAwMjYgS1BGX0NPTVBPVU5EX0hFQUQpIHx8XG4tXHRcdFx0ICAgICEocGFnZV9mbGFncyBcdTAwMjYgKEtQRl9DT01QT1VORF9IRUFEIHwgS1BGX0NPTVBPVU5EX1RBSUwpKSkge1xuLVx0XHRcdFx0aWYgKGN1cl9vcmRlciBcdTAwM2MgbnJfb3JkZXJzKSB7XG4tXHRcdFx0XHRcdG9yZGVyc1tjdXJfb3JkZXJdJiM0MzsmIzQzOztcbi1cdFx0XHRcdFx0Y3VyX29yZGVyID0gLTE7XG4tXHRcdFx0XHRcdHZhZGRyID0gbmV4dF9mb2xpb192YWRkcjtcbi1cdFx0XHRcdH1cbi1cdFx0XHRcdGJyZWFrO1xuLVx0XHRcdH1cbi1cbi1cdFx0XHRjdXJfb3JkZXImIzQzOyYjNDM7O1xuLVx0XHRcdG5leHRfZm9saW9fdmFkZHIgPSB2YWRkciAmIzQzOyAoMVVMIFx1MDAzY1x1MDAzYyAoY3VyX29yZGVyICYjNDM7IHBzaGlmdCgpKSk7XG4tXHRcdH1cbi1cbi1cdFx0aWYgKHN0YXR1cyBcdTAwM2MgMClcbi1cdFx0XHRyZXR1cm4gc3RhdHVzO1xuLVx0fVxuLVx0aWYgKGN1cl9vcmRlciBcdTAwM2UgMCBcdTAwMjZcdTAwMjYgY3VyX29yZGVyIFx1MDAzYyBucl9vcmRlcnMpXG4tXHRcdG9yZGVyc1tjdXJfb3JkZXJdJiM0MzsmIzQzOztcbi1cdHJldHVybiAwO1xuLX1cbi1cbiBzdGF0aWMgaW50IGNoZWNrX2FmdGVyX3NwbGl0X2ZvbGlvX29yZGVycyhjaGFyICp2YWRkcl9zdGFydCwgc2l6ZV90IGxlbixcbiBcdFx0aW50IHBhZ2VtYXBfZmQsIGludCBrcGFnZWZsYWdzX2ZkLCBpbnQgb3JkZXJzW10sIGludCBucl9vcmRlcnMpXG4ge1xuQEAgLTI0MCw3ICYjNDM7MTE3LDcgQEAgc3RhdGljIGludCBjaGVja19hZnRlcl9zcGxpdF9mb2xpb19vcmRlcnMoY2hhciAqdmFkZHJfc3RhcnQsIHNpemVfdCBsZW4sXG4gXHRcdGtzZnRfZXhpdF9mYWlsX21zZyhcJiMzNDtDYW5ub3QgYWxsb2NhdGUgbWVtb3J5IGZvciB2YWRkcl9vcmRlcnNcJiMzNDspO1xuIFxuIFx0bWVtc2V0KHZhZGRyX29yZGVycywgMCwgc2l6ZW9mKGludCkgKiBucl9vcmRlcnMpO1xuLVx0c3RhdHVzID0gZ2F0aGVyX2FmdGVyX3NwbGl0X2ZvbGlvX29yZGVycyh2YWRkcl9zdGFydCwgbGVuLCBwYWdlbWFwX2ZkLFxuJiM0MztcdHN0YXR1cyA9IGdhdGhlcl9mb2xpb19vcmRlcnModmFkZHJfc3RhcnQsIGxlbiwgcGFnZW1hcF9mZCxcbiBcdFx0XHRcdCAgICAga3BhZ2VmbGFnc19mZCwgdmFkZHJfb3JkZXJzLCBucl9vcmRlcnMpO1xuIFx0aWYgKHN0YXR1cylcbiBcdFx0a3NmdF9leGl0X2ZhaWxfbXNnKFwmIzM0O2dhdGhlciBmb2xpbyBpbmZvIGZhaWxlZFxcblwmIzM0Oyk7XG5AQCAtMjk2LDcgJiM0MzsxNzMsNyBAQCBzdGF0aWMgdm9pZCB2ZXJpZnlfcnNzX2Fub25fc3BsaXRfaHVnZV9wYWdlX2FsbF96ZXJvZXMoY2hhciAqb25lX3BhZ2UsIGludCBucl9ocFxuIFx0dW5zaWduZWQgbG9uZyByc3NfYW5vbl9iZWZvcmUsIHJzc19hbm9uX2FmdGVyO1xuIFx0c2l6ZV90IGk7XG4gXG4tXHRpZiAoIWNoZWNrX2h1Z2VfYW5vbihvbmVfcGFnZSwgbnJfaHBhZ2VzLCBwbWRfcGFnZXNpemUpKVxuJiM0MztcdGlmICghY2hlY2tfaHVnZV9hbm9uKG9uZV9wYWdlLCBucl9ocGFnZXMgKiBwbWRfcGFnZXNpemUsIG5yX2hwYWdlcywgcG1kX3BhZ2VzaXplKSlcbiBcdFx0a3NmdF9leGl0X2ZhaWxfbXNnKFwmIzM0O05vIFRIUCBpcyBhbGxvY2F0ZWRcXG5cJiMzNDspO1xuIFxuIFx0cnNzX2Fub25fYmVmb3JlID0gcnNzX2Fub24oKTtcbkBAIC0zMTEsNyAmIzQzOzE4OCw3IEBAIHN0YXRpYyB2b2lkIHZlcmlmeV9yc3NfYW5vbl9zcGxpdF9odWdlX3BhZ2VfYWxsX3plcm9lcyhjaGFyICpvbmVfcGFnZSwgaW50IG5yX2hwXG4gXHRcdGlmIChvbmVfcGFnZVtpXSAhPSAoY2hhcikwKVxuIFx0XHRcdGtzZnRfZXhpdF9mYWlsX21zZyhcJiMzNDslbGQgYnl0ZSBjb3JydXB0ZWRcXG5cJiMzNDssIGkpO1xuIFxuLVx0aWYgKCFjaGVja19odWdlX2Fub24ob25lX3BhZ2UsIDAsIHBtZF9wYWdlc2l6ZSkpXG4mIzQzO1x0aWYgKCFjaGVja19odWdlX2Fub24ob25lX3BhZ2UsIG5yX2hwYWdlcyAqIHBtZF9wYWdlc2l6ZSwgMCwgcG1kX3BhZ2VzaXplKSlcbiBcdFx0a3NmdF9leGl0X2ZhaWxfbXNnKFwmIzM0O1N0aWxsIEFub25IdWdlUGFnZXMgbm90IHNwbGl0XFxuXCYjMzQ7KTtcbiBcbiBcdHJzc19hbm9uX2FmdGVyID0gcnNzX2Fub24oKTtcbkBAIC0zNDcsNyAmIzQzOzIyNCw3IEBAIHN0YXRpYyB2b2lkIHNwbGl0X3BtZF90aHBfdG9fb3JkZXIoaW50IG9yZGVyKVxuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgbGVuOyBpJiM0MzsmIzQzOylcbiBcdFx0b25lX3BhZ2VbaV0gPSAoY2hhcilpO1xuIFxuLVx0aWYgKCFjaGVja19odWdlX2Fub24ob25lX3BhZ2UsIDQsIHBtZF9wYWdlc2l6ZSkpXG4mIzQzO1x0aWYgKCFjaGVja19odWdlX2Fub24ob25lX3BhZ2UsIDQgKiBwbWRfcGFnZXNpemUsIDQsIHBtZF9wYWdlc2l6ZSkpXG4gXHRcdGtzZnRfZXhpdF9mYWlsX21zZyhcJiMzNDtObyBUSFAgaXMgYWxsb2NhdGVkXFxuXCYjMzQ7KTtcbiBcbiBcdC8qIHNwbGl0IGFsbCBUSFBzICovXG5AQCAtMzY2LDcgJiM0MzsyNDMsNyBAQCBzdGF0aWMgdm9pZCBzcGxpdF9wbWRfdGhwX3RvX29yZGVyKGludCBvcmRlcilcbiBcdFx0XHRcdFx0ICAgKHBtZF9vcmRlciAmIzQzOyAxKSkpXG4gXHRcdGtzZnRfZXhpdF9mYWlsX21zZyhcJiMzNDtVbmV4cGVjdGVkIFRIUCBzcGxpdFxcblwmIzM0Oyk7XG4gXG4tXHRpZiAoIWNoZWNrX2h1Z2VfYW5vbihvbmVfcGFnZSwgMCwgcG1kX3BhZ2VzaXplKSlcbiYjNDM7XHRpZiAoIWNoZWNrX2h1Z2VfYW5vbihvbmVfcGFnZSwgNCAqIHBtZF9wYWdlc2l6ZSwgMCwgcG1kX3BhZ2VzaXplKSlcbiBcdFx0a3NmdF9leGl0X2ZhaWxfbXNnKFwmIzM0O1N0aWxsIEFub25IdWdlUGFnZXMgbm90IHNwbGl0XFxuXCYjMzQ7KTtcbiBcbiBcdGtzZnRfdGVzdF9yZXN1bHRfcGFzcyhcJiMzNDtTcGxpdCBodWdlIHBhZ2VzIHRvIG9yZGVyICVkIHN1Y2Nlc3NmdWxcXG5cJiMzNDssIG9yZGVyKTtcbkBAIC0zOTMsNyAmIzQzOzI3MCw3IEBAIHN0YXRpYyB2b2lkIHNwbGl0X3B0ZV9tYXBwZWRfdGhwKHZvaWQpXG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyB0aHBfYXJlYV9zaXplOyBpJiM0MzsmIzQzOylcbiBcdFx0dGhwX2FyZWFbaV0gPSAoY2hhcilpO1xuIFxuLVx0aWYgKCFjaGVja19odWdlX2Fub24odGhwX2FyZWEsIG5yX3RocHMsIHBtZF9wYWdlc2l6ZSkpIHtcbiYjNDM7XHRpZiAoIWNoZWNrX2h1Z2VfYW5vbih0aHBfYXJlYSwgbnJfdGhwcyAqIHBtZF9wYWdlc2l6ZSwgbnJfdGhwcywgcG1kX3BhZ2VzaXplKSkge1xuIFx0XHRrc2Z0X3Rlc3RfcmVzdWx0X3NraXAoXCYjMzQ7Tm90IGFsbCBUSFBzIGFsbG9jYXRlZFxcblwmIzM0Oyk7XG4gXHRcdGdvdG8gb3V0O1xuIFx0fVxuQEAgLTY1Nyw3ICYjNDM7NTM0LDcgQEAgc3RhdGljIGludCBjcmVhdGVfcGFnZWNhY2hlX3RocF9hbmRfZmQoY29uc3QgY2hhciAqdGVzdGZpbGUsIHNpemVfdCBmZF9zaXplLFxuIFxuIFx0Zm9yY2VfcmVhZF9wYWdlcygqYWRkciwgZmRfc2l6ZSAvIHBtZF9wYWdlc2l6ZSwgcG1kX3BhZ2VzaXplKTtcbiBcbi1cdGlmICghY2hlY2tfaHVnZV9maWxlKCphZGRyLCBmZF9zaXplIC8gcG1kX3BhZ2VzaXplLCBwbWRfcGFnZXNpemUpKSB7XG4mIzQzO1x0aWYgKCFjaGVja19odWdlX2ZpbGUoKmFkZHIsIGZkX3NpemUsIGZkX3NpemUgLyBwbWRfcGFnZXNpemUsIHBtZF9wYWdlc2l6ZSkpIHtcbiBcdFx0a3NmdF9wcmludF9tc2coXCYjMzQ7Tm8gbGFyZ2UgcGFnZWNhY2hlIGZvbGlvIGdlbmVyYXRlZCwgcGxlYXNlIHByb3ZpZGUgYSBmaWxlc3lzdGVtIHN1cHBvcnRpbmcgbGFyZ2UgZm9saW9cXG5cJiMzNDspO1xuIFx0XHRtdW5tYXAoKmFkZHIsIGZkX3NpemUpO1xuIFx0XHRjbG9zZSgqZmQpO1xuQEAgLTczNSw3ICYjNDM7NjEyLDcgQEAgc3RhdGljIHZvaWQgc3BsaXRfdGhwX2luX3BhZ2VjYWNoZV90b19vcmRlcl9hdChzaXplX3QgZmRfc2l6ZSxcbiBcdFx0Z290byBvdXQ7XG4gXHR9XG4gXG4tXHRpZiAoIWNoZWNrX2h1Z2VfZmlsZShhZGRyLCAwLCBwbWRfcGFnZXNpemUpKSB7XG4mIzQzO1x0aWYgKCFjaGVja19odWdlX2ZpbGUoYWRkciwgZmRfc2l6ZSwgMCwgcG1kX3BhZ2VzaXplKSkge1xuIFx0XHRrc2Z0X3ByaW50X21zZyhcJiMzNDtTdGlsbCBGaWxlUG1kTWFwcGVkIG5vdCBzcGxpdFxcblwmIzM0Oyk7XG4gXHRcdGVyciA9IEVYSVRfRkFJTFVSRTtcbiBcdFx0Z290byBvdXQ7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdWZmZC1jb21tb24uYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3VmZmQtY29tbW9uLmNcbmluZGV4IGY0OGY1ZDQ1OTRhYjAuLjFmYjk2N2VmNDk4NTQgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS91ZmZkLWNvbW1vbi5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS91ZmZkLWNvbW1vbi5jXG5AQCAtMTk0LDcgJiM0MzsxOTQsOSBAQCBzdGF0aWMgdm9pZCBzaG1lbV9hbGlhc19tYXBwaW5nKHVmZmRfZ2xvYmFsX3Rlc3Rfb3B0c190ICpnb3B0cywgX191NjQgKnN0YXJ0LFxuIFxuIHN0YXRpYyB2b2lkIHNobWVtX2NoZWNrX3BtZF9tYXBwaW5nKHVmZmRfZ2xvYmFsX3Rlc3Rfb3B0c190ICpnb3B0cywgdm9pZCAqcCwgaW50IGV4cGVjdF9ucl9ocGFnZXMpXG4ge1xuLVx0aWYgKCFjaGVja19odWdlX3NobWVtKGdvcHRzLVx1MDAzZWFyZWFfZHN0X2FsaWFzLCBleHBlY3RfbnJfaHBhZ2VzLFxuJiM0MztcdHNpemVfdCBsZW4gPSBleHBlY3RfbnJfaHBhZ2VzICogcmVhZF9wbWRfcGFnZXNpemUoKTtcbiYjNDM7XG4mIzQzO1x0aWYgKCFjaGVja19odWdlX3NobWVtKGdvcHRzLVx1MDAzZWFyZWFfZHN0X2FsaWFzLCBsZW4sIGV4cGVjdF9ucl9ocGFnZXMsXG4gXHRcdFx0ICAgICAgcmVhZF9wbWRfcGFnZXNpemUoKSkpXG4gXHRcdGVycihcJiMzNDtEaWQgbm90IGZpbmQgZXhwZWN0ZWQgJWQgbnVtYmVyIG9mIGh1Z2VwYWdlc1wmIzM0OyxcbiBcdFx0ICAgIGV4cGVjdF9ucl9ocGFnZXMpO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ZtX3V0aWwuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ZtX3V0aWwuY1xuaW5kZXggZWYxZWExMTk4MWE3NC4uMTNiNWNmZjdkZmUzMSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ZtX3V0aWwuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdm1fdXRpbC5jXG5AQCAtMTUsNiAmIzQzOzE1LDkgQEBcbiAjZGVmaW5lIFNNQVBfRklMRV9QQVRIIFwmIzM0Oy9wcm9jL3NlbGYvc21hcHNcJiMzNDtcbiAjZGVmaW5lIFNUQVRVU19GSUxFX1BBVEggXCYjMzQ7L3Byb2Mvc2VsZi9zdGF0dXNcJiMzNDtcbiAjZGVmaW5lIE1BWF9MSU5FX0xFTkdUSCA1MDBcbiYjNDM7I2RlZmluZSBQQUdFTUFQX1BBVEggXCYjMzQ7L3Byb2Mvc2VsZi9wYWdlbWFwXCYjMzQ7XG4mIzQzOyNkZWZpbmUgS1BBR0VGTEFHU19QQVRIIFwmIzM0Oy9wcm9jL2twYWdlZmxhZ3NcJiMzNDtcbiYjNDM7I2RlZmluZSBNQVhfTlJfT1JERVJTIDIwXG4gXG4gdW5zaWduZWQgaW50IF9fcGFnZV9zaXplO1xuIHVuc2lnbmVkIGludCBfX3BhZ2Vfc2hpZnQ7XG5AQCAtMTk0LDYgJiM0MzsxOTcsMTI1IEBAIHVuc2lnbmVkIGxvbmcgcnNzX2Fub24odm9pZClcbiBcdHJldHVybiByc3NfYW5vbjtcbiB9XG4gXG4mIzQzO3N0YXRpYyBpbnQgdmFkZHJfcGFnZWZsYWdzX2dldChjaGFyICp2YWRkciwgaW50IHBhZ2VtYXBfZmQsIGludCBrcGFnZWZsYWdzX2ZkLFxuJiM0MztcdFx0dWludDY0X3QgKmZsYWdzKVxuJiM0Mzt7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBwZm47XG4mIzQzO1xuJiM0MztcdHBmbiA9IHBhZ2VtYXBfZ2V0X3BmbihwYWdlbWFwX2ZkLCB2YWRkcik7XG4mIzQzO1xuJiM0MztcdC8qIG5vbi1wcmVzZW50IFBGTiAqL1xuJiM0MztcdGlmIChwZm4gPT0gLTFVTClcbiYjNDM7XHRcdHJldHVybiAxO1xuJiM0MztcbiYjNDM7XHRpZiAocGFnZWZsYWdzX2dldChwZm4sIGtwYWdlZmxhZ3NfZmQsIGZsYWdzKSlcbiYjNDM7XHRcdHJldHVybiAtMTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qXG4mIzQzOyAqIGdhdGhlcl9mb2xpb19vcmRlcnMgLSBzY2FuIHRocm91Z2ggW3ZhZGRyX3N0YXJ0LCBsZW4pIGFuZCByZWNvcmRcbiYjNDM7ICogZm9saW8gb3JkZXJzXG4mIzQzOyAqXG4mIzQzOyAqIEB2YWRkcl9zdGFydDogc3RhcnQgdmFkZHJcbiYjNDM7ICogQGxlbjogcmFuZ2UgbGVuZ3RoXG4mIzQzOyAqIEBwYWdlbWFwX2ZkOiBmaWxlIGRlc2NyaXB0b3IgdG8gL3Byb2MvXHUwMDNjcGlkXHUwMDNlL3BhZ2VtYXBcbiYjNDM7ICogQGtwYWdlZmxhZ3NfZmQ6IGZpbGUgZGVzY3JpcHRvciB0byAvcHJvYy9rcGFnZWZsYWdzXG4mIzQzOyAqIEBvcmRlcnM6IG91dHB1dCBmb2xpbyBvcmRlciBhcnJheVxuJiM0MzsgKiBAbnJfb3JkZXJzOiBmb2xpbyBvcmRlciBhcnJheSBzaXplXG4mIzQzOyAqXG4mIzQzOyAqIGdhdGhlcl9mb2xpb19vcmRlcnMoKSBzY2FuIHRocm91Z2ggW3ZhZGRyX3N0YXJ0LCBsZW4pIGFuZCBjaGVja1xuJiM0MzsgKiBhbGwgZm9saW9zIHdpdGhpbiB0aGUgcmFuZ2UgYW5kIHJlY29yZCB0aGVpciBvcmRlcnMuIEFsbCBvcmRlci0wIHBhZ2VzIHdpbGxcbiYjNDM7ICogYmUgcmVjb3JkZWQuIE5vbi1wcmVzZW50IHZhZGRyIGlzIHNraXBwZWQuXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybjogMCAtIG5vIGVycm9yLCAtMSAtIHVuaGFuZGxlZCBjYXNlc1xuJiM0MzsgKi9cbiYjNDM7aW50IGdhdGhlcl9mb2xpb19vcmRlcnMoY2hhciAqdmFkZHJfc3RhcnQsIHNpemVfdCBsZW4sXG4mIzQzO1x0XHRpbnQgcGFnZW1hcF9mZCwgaW50IGtwYWdlZmxhZ3NfZmQsIGludCBvcmRlcnNbXSwgaW50IG5yX29yZGVycylcbiYjNDM7e1xuJiM0MztcdHVpbnQ2NF90IHBhZ2VfZmxhZ3MgPSAwO1xuJiM0MztcdGludCBjdXJfb3JkZXIgPSAtMTtcbiYjNDM7XHRjaGFyICp2YWRkcjtcbiYjNDM7XG4mIzQzO1x0aWYgKHBhZ2VtYXBfZmQgPT0gLTEgfHwga3BhZ2VmbGFnc19mZCA9PSAtMSlcbiYjNDM7XHRcdHJldHVybiAtMTtcbiYjNDM7XHRpZiAoIW9yZGVycylcbiYjNDM7XHRcdHJldHVybiAtMTtcbiYjNDM7XHRpZiAobnJfb3JkZXJzIFx1MDAzYz0gMClcbiYjNDM7XHRcdHJldHVybiAtMTtcbiYjNDM7XG4mIzQzO1x0Zm9yICh2YWRkciA9IHZhZGRyX3N0YXJ0OyB2YWRkciBcdTAwM2MgdmFkZHJfc3RhcnQgJiM0MzsgbGVuOykge1xuJiM0MztcdFx0Y2hhciAqbmV4dF9mb2xpb192YWRkcjtcbiYjNDM7XHRcdGludCBzdGF0dXM7XG4mIzQzO1xuJiM0MztcdFx0c3RhdHVzID0gdmFkZHJfcGFnZWZsYWdzX2dldCh2YWRkciwgcGFnZW1hcF9mZCwga3BhZ2VmbGFnc19mZCxcbiYjNDM7XHRcdFx0XHRcdTAwMjZwYWdlX2ZsYWdzKTtcbiYjNDM7XHRcdGlmIChzdGF0dXMgXHUwMDNjIDApXG4mIzQzO1x0XHRcdHJldHVybiAtMTtcbiYjNDM7XG4mIzQzO1x0XHQvKiBza2lwIG5vbiBwcmVzZW50IHZhZGRyICovXG4mIzQzO1x0XHRpZiAoc3RhdHVzID09IDEpIHtcbiYjNDM7XHRcdFx0dmFkZHIgJiM0Mzs9IHBzaXplKCk7XG4mIzQzO1x0XHRcdGNvbnRpbnVlO1xuJiM0MztcdFx0fVxuJiM0MztcbiYjNDM7XHRcdC8qIGFsbCBvcmRlci0wIHBhZ2VzIHdpdGggcG9zc2libGUgZmFsc2UgcG9zdGl2ZSAobm9uIGZvbGlvKSAqL1xuJiM0MztcdFx0aWYgKCEocGFnZV9mbGFncyBcdTAwMjYgKEtQRl9DT01QT1VORF9IRUFEIHwgS1BGX0NPTVBPVU5EX1RBSUwpKSkge1xuJiM0MztcdFx0XHRvcmRlcnNbMF0mIzQzOyYjNDM7O1xuJiM0MztcdFx0XHR2YWRkciAmIzQzOz0gcHNpemUoKTtcbiYjNDM7XHRcdFx0Y29udGludWU7XG4mIzQzO1x0XHR9XG4mIzQzO1xuJiM0MztcdFx0Lyogc2tpcCBub24gdGhwIGNvbXBvdW5kIHBhZ2VzICovXG4mIzQzO1x0XHRpZiAoIShwYWdlX2ZsYWdzIFx1MDAyNiBLUEZfVEhQKSkge1xuJiM0MztcdFx0XHR2YWRkciAmIzQzOz0gcHNpemUoKTtcbiYjNDM7XHRcdFx0Y29udGludWU7XG4mIzQzO1x0XHR9XG4mIzQzO1xuJiM0MztcdFx0LyogdnBuIHBvaW50cyB0byBwYXJ0IG9mIGEgVEhQIGF0IHRoaXMgcG9pbnQgKi9cbiYjNDM7XHRcdGlmIChwYWdlX2ZsYWdzIFx1MDAyNiBLUEZfQ09NUE9VTkRfSEVBRClcbiYjNDM7XHRcdFx0Y3VyX29yZGVyID0gMTtcbiYjNDM7XHRcdGVsc2Uge1xuJiM0MztcdFx0XHR2YWRkciAmIzQzOz0gcHNpemUoKTtcbiYjNDM7XHRcdFx0Y29udGludWU7XG4mIzQzO1x0XHR9XG4mIzQzO1xuJiM0MztcdFx0bmV4dF9mb2xpb192YWRkciA9IHZhZGRyICYjNDM7ICgxVUwgXHUwMDNjXHUwMDNjIChjdXJfb3JkZXIgJiM0MzsgcHNoaWZ0KCkpKTtcbiYjNDM7XG4mIzQzO1x0XHRpZiAobmV4dF9mb2xpb192YWRkciBcdTAwM2U9IHZhZGRyX3N0YXJ0ICYjNDM7IGxlbilcbiYjNDM7XHRcdFx0YnJlYWs7XG4mIzQzO1xuJiM0MztcdFx0d2hpbGUgKChzdGF0dXMgPSB2YWRkcl9wYWdlZmxhZ3NfZ2V0KG5leHRfZm9saW9fdmFkZHIsXG4mIzQzO1x0XHRcdFx0XHRcdCAgICAgcGFnZW1hcF9mZCwga3BhZ2VmbGFnc19mZCxcbiYjNDM7XHRcdFx0XHRcdFx0ICAgICBcdTAwMjZwYWdlX2ZsYWdzKSkgXHUwMDNlPSAwKSB7XG4mIzQzO1x0XHRcdC8qXG4mIzQzO1x0XHRcdCAqIG5vbiBwcmVzZW50IHZhZGRyLCBuZXh0IGNvbXBvdW5kIGhlYWQgcGFnZSwgb3JcbiYjNDM7XHRcdFx0ICogb3JkZXItMCBwYWdlXG4mIzQzO1x0XHRcdCAqL1xuJiM0MztcdFx0XHRpZiAoc3RhdHVzID09IDEgfHxcbiYjNDM7XHRcdFx0ICAgIChwYWdlX2ZsYWdzIFx1MDAyNiBLUEZfQ09NUE9VTkRfSEVBRCkgfHxcbiYjNDM7XHRcdFx0ICAgICEocGFnZV9mbGFncyBcdTAwMjYgKEtQRl9DT01QT1VORF9IRUFEIHwgS1BGX0NPTVBPVU5EX1RBSUwpKSkge1xuJiM0MztcdFx0XHRcdGlmIChjdXJfb3JkZXIgXHUwMDNjIG5yX29yZGVycykge1xuJiM0MztcdFx0XHRcdFx0b3JkZXJzW2N1cl9vcmRlcl0mIzQzOyYjNDM7O1xuJiM0MztcdFx0XHRcdFx0Y3VyX29yZGVyID0gLTE7XG4mIzQzO1x0XHRcdFx0XHR2YWRkciA9IG5leHRfZm9saW9fdmFkZHI7XG4mIzQzO1x0XHRcdFx0fVxuJiM0MztcdFx0XHRcdGJyZWFrO1xuJiM0MztcdFx0XHR9XG4mIzQzO1xuJiM0MztcdFx0XHRjdXJfb3JkZXImIzQzOyYjNDM7O1xuJiM0MztcdFx0XHRuZXh0X2ZvbGlvX3ZhZGRyID0gdmFkZHIgJiM0MzsgKDFVTCBcdTAwM2NcdTAwM2MgKGN1cl9vcmRlciAmIzQzOyBwc2hpZnQoKSkpO1xuJiM0MztcdFx0fVxuJiM0MztcbiYjNDM7XHRcdGlmIChzdGF0dXMgXHUwMDNjIDApXG4mIzQzO1x0XHRcdHJldHVybiBzdGF0dXM7XG4mIzQzO1x0fVxuJiM0MztcdGlmIChjdXJfb3JkZXIgXHUwMDNlIDAgXHUwMDI2XHUwMDI2IGN1cl9vcmRlciBcdTAwM2MgbnJfb3JkZXJzKVxuJiM0MztcdFx0b3JkZXJzW2N1cl9vcmRlcl0mIzQzOyYjNDM7O1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuIGNoYXIgKl9fZ2V0X3NtYXBfZW50cnkodm9pZCAqYWRkciwgY29uc3QgY2hhciAqcGF0dGVybiwgY2hhciAqYnVmLCBzaXplX3QgbGVuKVxuIHtcbiBcdGludCByZXQ7XG5AQCAtMjI5LDcgJiM0MzszNTEsNyBAQCBjaGFyICpfX2dldF9zbWFwX2VudHJ5KHZvaWQgKmFkZHIsIGNvbnN0IGNoYXIgKnBhdHRlcm4sIGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbilcbiBcdHJldHVybiBlbnRyeTtcbiB9XG4gXG4tYm9vbCBfX2NoZWNrX2h1Z2Uodm9pZCAqYWRkciwgY2hhciAqcGF0dGVybiwgaW50IG5yX2hwYWdlcyxcbiYjNDM7c3RhdGljIGJvb2wgX19jaGVja19wbWRfaHVnZSh2b2lkICphZGRyLCBjaGFyICpwYXR0ZXJuLCBpbnQgbnJfaHBhZ2VzLFxuIFx0XHQgIHVpbnQ2NF90IGhwYWdlX3NpemUpXG4ge1xuIFx0Y2hhciBidWZmZXJbTUFYX0xJTkVfTEVOR1RIXTtcbkBAIC0yNDcsMTkgJiM0MzszNjksODQgQEAgYm9vbCBfX2NoZWNrX2h1Z2Uodm9pZCAqYWRkciwgY2hhciAqcGF0dGVybiwgaW50IG5yX2hwYWdlcyxcbiBcdHJldHVybiB0aHAgPT0gKG5yX2hwYWdlcyAqIChocGFnZV9zaXplIFx1MDAzZVx1MDAzZSAxMCkpO1xuIH1cbiBcbi1ib29sIGNoZWNrX2h1Z2VfYW5vbih2b2lkICphZGRyLCBpbnQgbnJfaHBhZ2VzLCB1aW50NjRfdCBocGFnZV9zaXplKVxuJiM0MztzdGF0aWMgYm9vbCBjaGVja19sYXJnZV9mb2xpb3Modm9pZCAqYWRkciwgc2l6ZV90IGxlbiwgaW50IG5yX2hwYWdlcyxcbiYjNDM7XHRcdHVpbnQ2NF90IGhwYWdlX3NpemUpXG4mIzQzO3tcbiYjNDM7XHRpbnQgb3JkZXIgPSAwLCBwYWdlc2l6ZSA9IGdldHBhZ2VzaXplKCk7XG4mIzQzO1x0dW5zaWduZWQgaW50IG5yX3BhZ2VzID0gaHBhZ2Vfc2l6ZSAvIHBhZ2VzaXplO1xuJiM0MztcdGludCBvcmRlcnNbTUFYX05SX09SREVSU10sIHN0YXR1cztcbiYjNDM7XHRpbnQgcGFnZW1hcF9mZCwga3BhZ2VmbGFnc19mZDtcbiYjNDM7XHRib29sIHJldCA9IGZhbHNlO1xuJiM0MztcbiYjNDM7XHRpZiAoIW5yX3BhZ2VzKVxuJiM0MztcdFx0a3NmdF9leGl0X2ZhaWxfbXNnKFwmIzM0O2ludmFsaWQgaHVnZXBhZ2Ugc2l6ZVxcblwmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdG9yZGVyID0gMzEgLSBfX2J1aWx0aW5fY2x6KG5yX3BhZ2VzKTtcbiYjNDM7XHRpZiAoIW9yZGVyIHx8IG9yZGVyIFx1MDAzZT0gTUFYX05SX09SREVSUylcbiYjNDM7XHRcdGtzZnRfZXhpdF9mYWlsX21zZyhcJiMzNDtpbnZhbGlkIG9yZGVyXFxuXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO1x0bWVtc2V0KG9yZGVycywgMCwgc2l6ZW9mKGludCkgKiBNQVhfTlJfT1JERVJTKTtcbiYjNDM7XHRwYWdlbWFwX2ZkID0gb3BlbihQQUdFTUFQX1BBVEgsIE9fUkRPTkxZKTtcbiYjNDM7XHRpZiAocGFnZW1hcF9mZCA9PSAtMSlcbiYjNDM7XHRcdGtzZnRfZXhpdF9mYWlsX21zZyhcJiMzNDtyZWFkIHBhZ2VtYXAgZmFpbFxcblwmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdGtwYWdlZmxhZ3NfZmQgPSBvcGVuKEtQQUdFRkxBR1NfUEFUSCwgT19SRE9OTFkpO1xuJiM0MztcdGlmIChrcGFnZWZsYWdzX2ZkID09IC0xKSB7XG4mIzQzO1x0XHRjbG9zZShwYWdlbWFwX2ZkKTtcbiYjNDM7XHRcdGtzZnRfZXhpdF9mYWlsX21zZyhcJiMzNDtyZWFkIGtwYWdlZmxhZ3MgZmFpbFxcblwmIzM0Oyk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRzdGF0dXMgPSBnYXRoZXJfZm9saW9fb3JkZXJzKGFkZHIsIGxlbiwgcGFnZW1hcF9mZCxcbiYjNDM7XHRcdFx0a3BhZ2VmbGFnc19mZCwgb3JkZXJzLCBNQVhfTlJfT1JERVJTKTtcbiYjNDM7XHRpZiAoc3RhdHVzKVxuJiM0MztcdFx0Z290byBvdXQ7XG4mIzQzO1xuJiM0MztcdGlmIChvcmRlcnNbb3JkZXJdID09IG5yX2hwYWdlcylcbiYjNDM7XHRcdHJldCA9IHRydWU7XG4mIzQzO1xuJiM0MztvdXQ6XG4mIzQzO1x0Y2xvc2UocGFnZW1hcF9mZCk7XG4mIzQzO1x0Y2xvc2Uoa3BhZ2VmbGFnc19mZCk7XG4mIzQzO1x0cmV0dXJuIHJldDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7Ym9vbCBjaGVja19odWdlX2Fub24odm9pZCAqYWRkciwgc2l6ZV90IGxlbiwgaW50IG5yX2hwYWdlcywgdWludDY0X3QgaHBhZ2Vfc2l6ZSlcbiB7XG4tXHRyZXR1cm4gX19jaGVja19odWdlKGFkZHIsIFwmIzM0O0Fub25IdWdlUGFnZXM6IFwmIzM0OywgbnJfaHBhZ2VzLCBocGFnZV9zaXplKTtcbiYjNDM7XHR1aW50NjRfdCBwbWRfcGFnZXNpemUgPSByZWFkX3BtZF9wYWdlc2l6ZSgpO1xuJiM0MztcbiYjNDM7XHRpZiAoIXBtZF9wYWdlc2l6ZSlcbiYjNDM7XHRcdGtzZnRfZXhpdF9mYWlsX21zZyhcJiMzNDtyZWFkaW5nIFBNRCBwYWdlc2l6ZSBmYWlsZWRcXG5cJiMzNDspO1xuJiM0MztcbiYjNDM7XHRpZiAoaHBhZ2Vfc2l6ZSA9PSBwbWRfcGFnZXNpemUpXG4mIzQzO1x0XHRyZXR1cm4gX19jaGVja19wbWRfaHVnZShhZGRyLCBcJiMzNDtBbm9uSHVnZVBhZ2VzOiBcJiMzNDssIG5yX2hwYWdlcywgaHBhZ2Vfc2l6ZSk7XG4mIzQzO1xuJiM0MztcdHJldHVybiBjaGVja19sYXJnZV9mb2xpb3MoYWRkciwgbGVuLCBucl9ocGFnZXMsIGhwYWdlX3NpemUpO1xuIH1cbiBcbi1ib29sIGNoZWNrX2h1Z2VfZmlsZSh2b2lkICphZGRyLCBpbnQgbnJfaHBhZ2VzLCB1aW50NjRfdCBocGFnZV9zaXplKVxuJiM0Mztib29sIGNoZWNrX2h1Z2VfZmlsZSh2b2lkICphZGRyLCBzaXplX3QgbGVuLCBpbnQgbnJfaHBhZ2VzLCB1aW50NjRfdCBocGFnZV9zaXplKVxuIHtcbi1cdHJldHVybiBfX2NoZWNrX2h1Z2UoYWRkciwgXCYjMzQ7RmlsZVBtZE1hcHBlZDpcJiMzNDssIG5yX2hwYWdlcywgaHBhZ2Vfc2l6ZSk7XG4mIzQzO1x0dWludDY0X3QgcG1kX3BhZ2VzaXplID0gcmVhZF9wbWRfcGFnZXNpemUoKTtcbiYjNDM7XG4mIzQzO1x0aWYgKCFwbWRfcGFnZXNpemUpXG4mIzQzO1x0XHRrc2Z0X2V4aXRfZmFpbF9tc2coXCYjMzQ7cmVhZGluZyBQTUQgcGFnZXNpemUgZmFpbGVkXFxuXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO1x0aWYgKGhwYWdlX3NpemUgPT0gcG1kX3BhZ2VzaXplKVxuJiM0MztcdFx0cmV0dXJuIF9fY2hlY2tfcG1kX2h1Z2UoYWRkciwgXCYjMzQ7RmlsZVBtZE1hcHBlZDpcJiMzNDssIG5yX2hwYWdlcywgaHBhZ2Vfc2l6ZSk7XG4mIzQzO1xuJiM0MztcdHJldHVybiBjaGVja19sYXJnZV9mb2xpb3MoYWRkciwgbGVuLCBucl9ocGFnZXMsIGhwYWdlX3NpemUpO1xuIH1cbiBcbi1ib29sIGNoZWNrX2h1Z2Vfc2htZW0odm9pZCAqYWRkciwgaW50IG5yX2hwYWdlcywgdWludDY0X3QgaHBhZ2Vfc2l6ZSlcbiYjNDM7Ym9vbCBjaGVja19odWdlX3NobWVtKHZvaWQgKmFkZHIsIHNpemVfdCBsZW4sIGludCBucl9ocGFnZXMsIHVpbnQ2NF90IGhwYWdlX3NpemUpXG4ge1xuLVx0cmV0dXJuIF9fY2hlY2tfaHVnZShhZGRyLCBcJiMzNDtTaG1lbVBtZE1hcHBlZDpcJiMzNDssIG5yX2hwYWdlcywgaHBhZ2Vfc2l6ZSk7XG4mIzQzO1x0dWludDY0X3QgcG1kX3BhZ2VzaXplID0gcmVhZF9wbWRfcGFnZXNpemUoKTtcbiYjNDM7XG4mIzQzO1x0aWYgKCFwbWRfcGFnZXNpemUpXG4mIzQzO1x0XHRrc2Z0X2V4aXRfZmFpbF9tc2coXCYjMzQ7cmVhZGluZyBQTUQgcGFnZXNpemUgZmFpbGVkXFxuXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO1x0aWYgKGhwYWdlX3NpemUgPT0gcG1kX3BhZ2VzaXplKVxuJiM0MztcdFx0cmV0dXJuIF9fY2hlY2tfcG1kX2h1Z2UoYWRkciwgXCYjMzQ7U2htZW1QbWRNYXBwZWQ6XCYjMzQ7LCBucl9ocGFnZXMsIGhwYWdlX3NpemUpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gY2hlY2tfbGFyZ2VfZm9saW9zKGFkZHIsIGxlbiwgbnJfaHBhZ2VzLCBocGFnZV9zaXplKTtcbiB9XG4gXG4gaW50NjRfdCBhbGxvY2F0ZV90cmFuc2h1Z2Uodm9pZCAqcHRyLCBpbnQgcGFnZW1hcF9mZClcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS92bV91dGlsLmggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS92bV91dGlsLmhcbmluZGV4IDc3OTkxNTRiNjdlZWQuLjlhNDlhZjg4NzAyZTQgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS92bV91dGlsLmhcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ZtX3V0aWwuaFxuQEAgLTkwLDExICYjNDM7OTAsMTMgQEAgdm9pZCBjbGVhcl9zb2Z0ZGlydHkodm9pZCk7XG4gYm9vbCBjaGVja19mb3JfcGF0dGVybihGSUxFICpmcCwgY29uc3QgY2hhciAqcGF0dGVybiwgY2hhciAqYnVmLCBzaXplX3QgbGVuKTtcbiB1aW50NjRfdCByZWFkX3BtZF9wYWdlc2l6ZSh2b2lkKTtcbiB1bnNpZ25lZCBsb25nIHJzc19hbm9uKHZvaWQpO1xuLWJvb2wgY2hlY2tfaHVnZV9hbm9uKHZvaWQgKmFkZHIsIGludCBucl9ocGFnZXMsIHVpbnQ2NF90IGhwYWdlX3NpemUpO1xuLWJvb2wgY2hlY2tfaHVnZV9maWxlKHZvaWQgKmFkZHIsIGludCBucl9ocGFnZXMsIHVpbnQ2NF90IGhwYWdlX3NpemUpO1xuLWJvb2wgY2hlY2tfaHVnZV9zaG1lbSh2b2lkICphZGRyLCBpbnQgbnJfaHBhZ2VzLCB1aW50NjRfdCBocGFnZV9zaXplKTtcbiYjNDM7Ym9vbCBjaGVja19odWdlX2Fub24odm9pZCAqYWRkciwgc2l6ZV90IGxlbiwgaW50IG5yX2hwYWdlcywgdWludDY0X3QgaHBhZ2Vfc2l6ZSk7XG4mIzQzO2Jvb2wgY2hlY2tfaHVnZV9maWxlKHZvaWQgKmFkZHIsIHNpemVfdCBsZW4sIGludCBucl9ocGFnZXMsIHVpbnQ2NF90IGhwYWdlX3NpemUpO1xuJiM0Mztib29sIGNoZWNrX2h1Z2Vfc2htZW0odm9pZCAqYWRkciwgc2l6ZV90IGxlbiwgaW50IG5yX2hwYWdlcywgdWludDY0X3QgaHBhZ2Vfc2l6ZSk7XG4gaW50NjRfdCBhbGxvY2F0ZV90cmFuc2h1Z2Uodm9pZCAqcHRyLCBpbnQgcGFnZW1hcF9mZCk7XG4gaW50IHBhZ2VmbGFnc19nZXQodW5zaWduZWQgbG9uZyBwZm4sIGludCBrcGFnZWZsYWdzX2ZkLCB1aW50NjRfdCAqZmxhZ3MpO1xuJiM0MztpbnQgZ2F0aGVyX2ZvbGlvX29yZGVycyhjaGFyICp2YWRkcl9zdGFydCwgc2l6ZV90IGxlbixcbiYjNDM7XHRcdGludCBwYWdlbWFwX2ZkLCBpbnQga3BhZ2VmbGFnc19mZCwgaW50IG9yZGVyc1tdLCBpbnQgbnJfb3JkZXJzKTtcbiBcbiBpbnQgdWZmZF9yZWdpc3RlcihpbnQgdWZmZCwgdm9pZCAqYWRkciwgdWludDY0X3QgbGVuLFxuIFx0XHQgIGJvb2wgbWlzcywgYm9vbCB3cCwgYm9vbCBtaW5vcik7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMDQ6MDc8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgdXNlci1zcGFjZSBzZWxmdGVzdHMgaW4gdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vIGFuZCBkb2VzIG5vdCBtYWtlIGFueSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCBjb2RlIGl0c2VsZi4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA1NGJjNzg1M2Q0ZjVmNWU1ZWQ4ZGZiYjlmZmZmYzM5NWMzM2Q0ZGE0CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFRodSBBdWcgNiAwNDowNzoxMCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2ZvbGlvX3NwbGl0X3JhY2VfdGVzdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZm9saW9fc3BsaXRfcmFjZV90ZXN0LmMKaW5kZXggNjMyOWUzN2ZmZjRjOS4uNDViODRmN2IzNjRlMCAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZm9saW9fc3BsaXRfcmFjZV90ZXN0LmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZm9saW9fc3BsaXRfcmFjZV90ZXN0LmMKQEAgLTE4Miw3ICYjNDM7MTgyLDcgQEAgc3RhdGljIHVpbnQ2NF90IHJ1bl9pdGVyYXRpb24odm9pZCkKIAlmb3IgKGkgPSAwOyBpICZsdDsgVE9UQUxfUEFHRVM7IGkmIzQzOyYjNDM7KQogCQlmaWxsX3BhZ2UobW1hcF9iYXNlLCBpKTsKIAotCWlmICghY2hlY2tfaHVnZV9zaG1lbShtbWFwX2Jhc2UsIE5SX1BNRF9QQUdFLCBwbWRfcGFnZXNpemUpKQomIzQzOwlpZiAoIWNoZWNrX2h1Z2Vfc2htZW0obW1hcF9iYXNlLCBGSUxFX1NJWkUsIE5SX1BNRF9QQUdFLCBwbWRfcGFnZXNpemUpKQogCQlrc2Z0X2V4aXRfZmFpbF9tc2coJiMzNDtObyBzaG1lbSBUSFAgaXMgYWxsb2NhdGVkXG4mIzM0Oyk7CiAKIAlpZiAocHRocmVhZF9iYXJyaWVyX2luaXQoJmFtcDtjdGwuYmFycmllciwgTlVMTCwgTlVNX1JFQURFUl9USFJFQURTICYjNDM7IDEpICE9IDApCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9raHVnZXBhZ2VkLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9raHVnZXBhZ2VkLmMKaW5kZXggYjI1NGJhZjllMGI3NS4uN2Y4N2FlZWQzMDFjNCAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0va2h1Z2VwYWdlZC5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2todWdlcGFnZWQuYwpAQCAtMjYsOSAmIzQzOzI2LDExIEBACiAKICNkZWZpbmUgQkFTRV9BRERSICgodm9pZCAqKSgxVUwgJmx0OyZsdDsgMzApKQogc3RhdGljIHVuc2lnbmVkIGxvbmcgaHBhZ2VfcG1kX3NpemU7CiYjNDM7c3RhdGljIGludCBocGFnZV9wbWRfb3JkZXI7CiBzdGF0aWMgdW5zaWduZWQgbG9uZyBwYWdlX3NpemU7CiBzdGF0aWMgaW50IGhwYWdlX3BtZF9ucjsKIHN0YXRpYyBpbnQgYW5vbl9vcmRlcjsKJiM0MztzdGF0aWMgaW50IGNvbGxhcHNlX29yZGVyOwogCiAjZGVmaW5lIFBJRF9TTUFQUyAmIzM0Oy9wcm9jL3NlbGYvc21hcHMmIzM0OwogI2RlZmluZSBURVNUX0ZJTEUgJiMzNDtjb2xsYXBzZV90ZXN0X2ZpbGUmIzM0OwpAQCAtNTEsNyAmIzQzOzUzLDcgQEAgc3RydWN0IG1lbV9vcHMgewogCXZvaWQgKigqc2V0dXBfYXJlYSkoaW50IG5yX2hwYWdlcyk7CiAJdm9pZCAoKmNsZWFudXBfYXJlYSkodm9pZCAqcCwgdW5zaWduZWQgbG9uZyBzaXplKTsKIAl2b2lkICgqZmF1bHQpKHZvaWQgKnAsIHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kKTsKLQlib29sICgqY2hlY2tfaHVnZSkodm9pZCAqYWRkciwgaW50IG5yX2hwYWdlcyk7CiYjNDM7CWJvb2wgKCpjaGVja19odWdlKSh2b2lkICphZGRyLCBzaXplX3QgbGVuLCBpbnQgbnJfaHBhZ2VzLCB1bnNpZ25lZCBsb25nIGhwYWdlX3NpemUpOwogCWNvbnN0IGNoYXIgKm5hbWU7CiB9OwogCkBAIC02OSw2ICYjNDM7NzEsNyBAQCBzdHJ1Y3QgY29sbGFwc2VfY29udGV4dCB7CiB9OwogCiBzdGF0aWMgc3RydWN0IGNvbGxhcHNlX2NvbnRleHQgKmtodWdlcGFnZWRfY29udGV4dDsKJiM0MztzdGF0aWMgc3RydWN0IGNvbGxhcHNlX2NvbnRleHQgKm10aHBfa2h1Z2VwYWdlZF9jb250ZXh0Owogc3RhdGljIHN0cnVjdCBjb2xsYXBzZV9jb250ZXh0ICptYWR2aXNlX2NvbnRleHQ7CiAKIHN0cnVjdCBmaWxlX2luZm8gewpAQCAtMjk1LDcgJiM0MzsyOTgsNyBAQCBzdGF0aWMgdm9pZCAqYWxsb2NfaHBhZ2Uoc3RydWN0IG1lbV9vcHMgKm9wcykKIAlrc2Z0X3ByaW50X21zZygmIzM0O0FsbG9jYXRlIGh1Z2UgcGFnZS4uLiYjMzQ7KTsKIAlpZiAobWFkdmlzZV9jb2xsYXBzZV9yZXRyeShwLCBocGFnZV9wbWRfc2l6ZSkpCiAJCWtzZnRfZXhpdF9mYWlsX3BlcnJvcigmIzM0O21hZHZpc2UoTUFEVl9DT0xMQVBTRSkmIzM0Oyk7Ci0JaWYgKCFvcHMtJmd0O2NoZWNrX2h1Z2UocCwgMSkpCiYjNDM7CWlmICghb3BzLSZndDtjaGVja19odWdlKHAsIGhwYWdlX3BtZF9zaXplLCAxLCBocGFnZV9wbWRfc2l6ZSkpCiAJCWtzZnRfZXhpdF9mYWlsX3BlcnJvcigmIzM0O21hZHZpc2UoTUFEVl9DT0xMQVBTRSkmIzM0Oyk7CiAJaWYgKG1hZHZpc2UocCwgaHBhZ2VfcG1kX3NpemUsIE1BRFZfSFVHRVBBR0UpKQogCQlrc2Z0X2V4aXRfZmFpbF9wZXJyb3IoJiMzNDttYWR2aXNlKE1BRFZfSFVHRVBBR0UpJiMzNDspOwpAQCAtMzI5LDkgJiM0MzszMzIsMTAgQEAgc3RhdGljIHZvaWQgYW5vbl9mYXVsdCh2b2lkICpwLCB1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCkKIAlmaWxsX21lbW9yeShwLCBzdGFydCwgZW5kKTsKIH0KIAotc3RhdGljIGJvb2wgYW5vbl9jaGVja19odWdlKHZvaWQgKmFkZHIsIGludCBucl9ocGFnZXMpCiYjNDM7c3RhdGljIGJvb2wgYW5vbl9jaGVja19odWdlKHZvaWQgKmFkZHIsIHNpemVfdCBsZW4sIGludCBucl9ocGFnZXMsCiYjNDM7CQl1bnNpZ25lZCBsb25nIGhwYWdlX3NpemUpCiB7Ci0JcmV0dXJuIGNoZWNrX2h1Z2VfYW5vbihhZGRyLCBucl9ocGFnZXMsIGhwYWdlX3BtZF9zaXplKTsKJiM0MzsJcmV0dXJuIGNoZWNrX2h1Z2VfYW5vbihhZGRyLCBsZW4sIG5yX2hwYWdlcywgaHBhZ2Vfc2l6ZSk7CiB9CiAKIHN0YXRpYyB2b2lkICpmaWxlX3NldHVwX2FyZWFfY29tbW9uKGludCBucl9ocGFnZXMsIGVudW0gZmlsZV9zZXR1cF9vcHMgc2V0dXApCkBAIC00MzEsMTMgJiM0Mzs0MzUsMTQgQEAgc3RhdGljIHZvaWQgZmlsZV9mYXVsdF93cml0ZSh2b2lkICpwLCB1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCkKIAkJa3NmdF9leGl0X2ZhaWxfcGVycm9yKCYjMzQ7bWFkdmlzZShNQURWX1BPUFVMQVRFX1dSSVRFKSYjMzQ7KTsKIH0KIAotc3RhdGljIGJvb2wgZmlsZV9jaGVja19odWdlKHZvaWQgKmFkZHIsIGludCBucl9ocGFnZXMpCiYjNDM7c3RhdGljIGJvb2wgZmlsZV9jaGVja19odWdlKHZvaWQgKmFkZHIsIHNpemVfdCBsZW4sIGludCBucl9ocGFnZXMsCiYjNDM7CQl1bnNpZ25lZCBsb25nIGhwYWdlX3NpemUpCiB7CiAJc3dpdGNoIChmaW5mby50eXBlKSB7CiAJY2FzZSBWTUFfRklMRToKLQkJcmV0dXJuIGNoZWNrX2h1Z2VfZmlsZShhZGRyLCBucl9ocGFnZXMsIGhwYWdlX3BtZF9zaXplKTsKJiM0MzsJCXJldHVybiBjaGVja19odWdlX2ZpbGUoYWRkciwgbGVuLCBucl9ocGFnZXMsIGhwYWdlX3NpemUpOwogCWNhc2UgVk1BX1NITUVNOgotCQlyZXR1cm4gY2hlY2tfaHVnZV9zaG1lbShhZGRyLCBucl9ocGFnZXMsIGhwYWdlX3BtZF9zaXplKTsKJiM0MzsJCXJldHVybiBjaGVja19odWdlX3NobWVtKGFkZHIsIGxlbiwgbnJfaHBhZ2VzLCBocGFnZV9zaXplKTsKIAlkZWZhdWx0OgogCQlleGl0KEVYSVRfRkFJTFVSRSk7CiAJCXJldHVybiBmYWxzZTsKQEAgLTQ2Nyw5ICYjNDM7NDcyLDEwIEBAIHN0YXRpYyB2b2lkIHNobWVtX2NsZWFudXBfYXJlYSh2b2lkICpwLCB1bnNpZ25lZCBsb25nIHNpemUpCiAJY2xvc2UoZmluZm8uZmQpOwogfQogCi1zdGF0aWMgYm9vbCBzaG1lbV9jaGVja19odWdlKHZvaWQgKmFkZHIsIGludCBucl9ocGFnZXMpCiYjNDM7c3RhdGljIGJvb2wgc2htZW1fY2hlY2tfaHVnZSh2b2lkICphZGRyLCBzaXplX3QgbGVuLCBpbnQgbnJfaHBhZ2VzLAomIzQzOwkJdW5zaWduZWQgbG9uZyBocGFnZV9zaXplKQogewotCXJldHVybiBjaGVja19odWdlX3NobWVtKGFkZHIsIG5yX2hwYWdlcywgaHBhZ2VfcG1kX3NpemUpOwomIzQzOwlyZXR1cm4gY2hlY2tfaHVnZV9zaG1lbShhZGRyLCBsZW4sIG5yX2hwYWdlcywgaHBhZ2Vfc2l6ZSk7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgbWVtX29wcyBfX2Fub25fb3BzID0gewpAQCAtNTUyLDcgJiM0Mzs1NTgsNyBAQCBzdGF0aWMgdm9pZCBfX21hZHZpc2VfY29sbGFwc2UoY29uc3QgY2hhciAqbXNnLCBjaGFyICpwLCBpbnQgbnJfaHBhZ2VzLAogCXJldCA9IG1hZHZpc2VfY29sbGFwc2VfcmV0cnkocCwgbnJfaHBhZ2VzICogaHBhZ2VfcG1kX3NpemUpOwogCWlmICgoKGJvb2wpcmV0KSA9PSBleHBlY3QpCiAJCWZhaWwoJiMzNDtGYWlsOiBCYWQgcmV0dXJuIHZhbHVlJiMzNDspOwotCWVsc2UgaWYgKCFvcHMtJmd0O2NoZWNrX2h1Z2UocCwgZXhwZWN0ID8gbnJfaHBhZ2VzIDogMCkpCiYjNDM7CWVsc2UgaWYgKCFvcHMtJmd0O2NoZWNrX2h1Z2UocCwgbnJfaHBhZ2VzICogaHBhZ2VfcG1kX3NpemUsIGV4cGVjdCA/IG5yX2hwYWdlcyA6IDAsIGhwYWdlX3BtZF9zaXplKSkKIAkJZmFpbCgmIzM0O0ZhaWw6IGNoZWNrX2h1Z2UoKSYjMzQ7KTsKIAllbHNlCiAJCXN1Y2Nlc3MoJiMzNDtPSyYjMzQ7KTsKQEAgLTU2NCwzMCAmIzQzOzU3MCwzMSBAQCBzdGF0aWMgdm9pZCBtYWR2aXNlX2NvbGxhcHNlKGNvbnN0IGNoYXIgKm1zZywgY2hhciAqcCwgaW50IG5yX2hwYWdlcywKIAkJCSAgICAgc3RydWN0IG1lbV9vcHMgKm9wcywgYm9vbCBleHBlY3QpCiB7CiAJLyogU2FuaXR5IGNoZWNrICovCi0JaWYgKCFvcHMtJmd0O2NoZWNrX2h1Z2UocCwgMCkpCiYjNDM7CWlmICghb3BzLSZndDtjaGVja19odWdlKHAsIG5yX2hwYWdlcyAqIGhwYWdlX3BtZF9zaXplLCAwLCBocGFnZV9wbWRfc2l6ZSkpCiAJCWtzZnRfZXhpdF9mYWlsX21zZygmIzM0O1VuZXhwZWN0ZWQgaHVnZSBwYWdlXG4mIzM0Oyk7CiAJX19tYWR2aXNlX2NvbGxhcHNlKG1zZywgcCwgbnJfaHBhZ2VzLCBvcHMsIGV4cGVjdCk7CiB9CiAKICNkZWZpbmUgVElDSyA1MDAwMDAKLXN0YXRpYyBib29sIHdhaXRfZm9yX3NjYW4oY29uc3QgY2hhciAqbXNnLCBjaGFyICpwLCBpbnQgbnJfaHBhZ2VzLAotCQkJICBzdHJ1Y3QgbWVtX29wcyAqb3BzKQomIzQzO3N0YXRpYyBib29sIHdhaXRfZm9yX3NjYW4oY29uc3QgY2hhciAqbXNnLCBjaGFyICpwLCBzaXplX3QgbGVuLAomIzQzOwkJaW50IG5yX2hwYWdlcywgaW50IGNvbGxhcF9vcmRlciwgc3RydWN0IG1lbV9vcHMgKm9wcykKIHsKJiM0MzsJdW5zaWduZWQgbG9uZyBocGFnZV9zaXplID0gcGFnZV9zaXplICZsdDsmbHQ7IGNvbGxhcF9vcmRlcjsKIAlpbnQgZnVsbF9zY2FuczsKIAlpbnQgdGltZW91dCA9IDY7IC8qIDMgc2Vjb25kcyAqLwogCiAJLyogU2FuaXR5IGNoZWNrICovCi0JaWYgKCFvcHMtJmd0O2NoZWNrX2h1Z2UocCwgMCkpCiYjNDM7CWlmICghb3BzLSZndDtjaGVja19odWdlKHAsIGxlbiwgMCwgaHBhZ2Vfc2l6ZSkpCiAJCWtzZnRfZXhpdF9mYWlsX21zZygmIzM0O1VuZXhwZWN0ZWQgaHVnZSBwYWdlXG4mIzM0Oyk7CiAKLQltYWR2aXNlKHAsIG5yX2hwYWdlcyAqIGhwYWdlX3BtZF9zaXplLCBNQURWX0hVR0VQQUdFKTsKJiM0MzsJbWFkdmlzZShwLCBsZW4sIE1BRFZfSFVHRVBBR0UpOwogCiAJLyogV2FpdCB1bnRpbCB0aGUgc2Vjb25kIGZ1bGxfc2NhbiBjb21wbGV0ZWQgKi8KIAlmdWxsX3NjYW5zID0gdGhwX3JlYWRfbnVtKCYjMzQ7a2h1Z2VwYWdlZC9mdWxsX3NjYW5zJiMzNDspICYjNDM7IDI7CiAKIAlrc2Z0X3ByaW50X21zZygmIzM0OyVzLi4uJiMzNDssIG1zZyk7CiAJd2hpbGUgKHRpbWVvdXQtLSkgewotCQlpZiAob3BzLSZndDtjaGVja19odWdlKHAsIG5yX2hwYWdlcykpCiYjNDM7CQlpZiAob3BzLSZndDtjaGVja19odWdlKHAsIGxlbiwgbnJfaHBhZ2VzLCBocGFnZV9zaXplKSkKIAkJCWJyZWFrOwogCQlpZiAodGhwX3JlYWRfbnVtKCYjMzQ7a2h1Z2VwYWdlZC9mdWxsX3NjYW5zJiMzNDspICZndDs9IGZ1bGxfc2NhbnMpCiAJCQlicmVhazsKQEAgLTYwMSw2ICYjNDM7NjA4LDggQEAgc3RhdGljIGJvb2wgd2FpdF9mb3Jfc2Nhbihjb25zdCBjaGFyICptc2csIGNoYXIgKnAsIGludCBucl9ocGFnZXMsCiBzdGF0aWMgdm9pZCBraHVnZXBhZ2VkX2NvbGxhcHNlKGNvbnN0IGNoYXIgKm1zZywgY2hhciAqcCwgaW50IG5yX2hwYWdlcywKIAkJCQlzdHJ1Y3QgbWVtX29wcyAqb3BzLCBib29sIGV4cGVjdCkKIHsKJiM0MzsJc2l6ZV90IGxlbiA9IG5yX2hwYWdlcyAqIGhwYWdlX3BtZF9zaXplOwomIzQzOwogCS8qCiAJICogcmVhZCZhbXA7d3JpdGUgZmlsZSBjb2xsYXBzZSBmYWlscyBzaW5jZSBraHVnZXBhZ2VkIGRvZXMgbm90IGZsdXNoCiAJICogdGhlIHRhcmdldCBkaXJ0eSBmb2xpb3MKQEAgLTYwOCw3ICYjNDM7NjE3LDcgQEAgc3RhdGljIHZvaWQga2h1Z2VwYWdlZF9jb2xsYXBzZShjb25zdCBjaGFyICptc2csIGNoYXIgKnAsIGludCBucl9ocGFnZXMsCiAJaWYgKCFpc190bXBmcyhvcHMpICZhbXA7JmFtcDsgb3BzID09ICZhbXA7X19yZWFkX3dyaXRlX2ZpbGVfd3JpdGVfb3BzKQogCQlleHBlY3QgPSBmYWxzZTsKIAotCWlmICh3YWl0X2Zvcl9zY2FuKG1zZywgcCwgbnJfaHBhZ2VzLCBvcHMpKSB7CiYjNDM7CWlmICh3YWl0X2Zvcl9zY2FuKG1zZywgcCwgbGVuLCBucl9ocGFnZXMsIGhwYWdlX3BtZF9vcmRlciwgb3BzKSkgewogCQlpZiAoZXhwZWN0KQogCQkJZmFpbCgmIzM0O1RpbWVvdXQmIzM0Oyk7CiAJCWVsc2UKQEAgLTYyNCwxMCAmIzQzOzYzMyw1NCBAQCBzdGF0aWMgdm9pZCBraHVnZXBhZ2VkX2NvbGxhcHNlKGNvbnN0IGNoYXIgKm1zZywgY2hhciAqcCwgaW50IG5yX2hwYWdlcywKIAlpZiAob3BzICE9ICZhbXA7X19hbm9uX29wcykKIAkJb3BzLSZndDtmYXVsdChwLCAwLCBucl9ocGFnZXMgKiBocGFnZV9wbWRfc2l6ZSk7CiAKLQlpZiAob3BzLSZndDtjaGVja19odWdlKHAsIGV4cGVjdCA/IG5yX2hwYWdlcyA6IDApKQomIzQzOwlpZiAob3BzLSZndDtjaGVja19odWdlKHAsIGxlbiwgZXhwZWN0ID8gbnJfaHBhZ2VzIDogMCwgaHBhZ2VfcG1kX3NpemUpKQomIzQzOwkJc3VjY2VzcygmIzM0O09LJiMzNDspOwomIzQzOwllbHNlCiYjNDM7CQlmYWlsKCYjMzQ7RmFpbCYjMzQ7KTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgbXRocF9raHVnZXBhZ2VkX2NvbGxhcHNlKGNvbnN0IGNoYXIgKm1zZywgY2hhciAqcCwgaW50IG5yX2hwYWdlcywKJiM0MzsJCQkJc3RydWN0IG1lbV9vcHMgKm9wcywgYm9vbCBleHBlY3QpCiYjNDM7ewomIzQzOwl1bnNpZ25lZCBsb25nIGhwYWdlX3NpemUgPSBwYWdlX3NpemUgJmx0OyZsdDsgY29sbGFwc2Vfb3JkZXI7CiYjNDM7CXN0cnVjdCB0aHBfc2V0dGluZ3Mgc2V0dGluZ3MgPSAqdGhwX2N1cnJlbnRfc2V0dGluZ3MoKTsKJiM0MzsJLyogbVRIUCBjb2xscGFzZSBvbmx5IGFsbG9jYXRlcyBQTUQgc2l6ZWQgbWVtb3J5ICovCiYjNDM7CXNpemVfdCBsZW4gPSBocGFnZV9wbWRfc2l6ZTsKJiM0MzsKJiM0MzsJLyogU2V0IG1USFAgc2V0dGluZyBmb3IgbVRIUCBjb2xsYXBzZSAqLwomIzQzOwlpZiAob3BzID09ICZhbXA7X19hbm9uX29wcykgewomIzQzOwkJc2V0dGluZ3MudGhwX2VuYWJsZWQgPSBUSFBfTkVWRVI7CiYjNDM7CQlzZXR0aW5ncy5odWdlcGFnZXNbY29sbGFwc2Vfb3JkZXJdLmVuYWJsZWQgPSBUSFBfTUFEVklTRTsKJiM0MzsJfQomIzQzOwomIzQzOwl0aHBfcHVzaF9zZXR0aW5ncygmYW1wO3NldHRpbmdzKTsKJiM0MzsKJiM0MzsJaWYgKHdhaXRfZm9yX3NjYW4obXNnLCBwLCBsZW4sIG5yX2hwYWdlcywgY29sbGFwc2Vfb3JkZXIsIG9wcykpIHsKJiM0MzsJCWlmIChleHBlY3QpCiYjNDM7CQkJZmFpbCgmIzM0O1RpbWVvdXQmIzM0Oyk7CiYjNDM7CQllbHNlCiYjNDM7CQkJc3VjY2VzcygmIzM0O09LJiMzNDspOwomIzQzOwomIzQzOwkJLyogUmVzdG9yZSBUSFAgc2V0dGluZ3MgZm9yIG1USFAgY29sbGFwc2UuICovCiYjNDM7CQl0aHBfcG9wX3NldHRpbmdzKCk7CiYjNDM7CQlyZXR1cm47CiYjNDM7CX0KJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogRm9yIGZpbGUgYW5kIHNobWVtIG1lbW9yeSwga2h1Z2VwYWdlZCBvbmx5IHJldHJhY3RzIHB0ZSBlbnRyaWVzIGFmdGVyCiYjNDM7CSAqIHB1dHRpbmcgdGhlIG5ldyBodWdlcGFnZSBpbiB0aGUgcGFnZSBjYWNoZS4gVGhlIGh1Z2VwYWdlIG11c3QgYmUKJiM0MzsJICogc3Vic2VxdWVudGx5IHJlZmF1bHRlZCB0byBpbnN0YWxsIHRoZSBwbWQgbWFwcGluZyBmb3IgdGhlIG1tLgomIzQzOwkgKi8KJiM0MzsJaWYgKG9wcyAhPSAmYW1wO19fYW5vbl9vcHMpCiYjNDM7CQlvcHMtJmd0O2ZhdWx0KHAsIDAsIG5yX2hwYWdlcyAqIGhwYWdlX3NpemUpOwomIzQzOwomIzQzOwlpZiAob3BzLSZndDtjaGVja19odWdlKHAsIGxlbiwgZXhwZWN0ID8gbnJfaHBhZ2VzIDogMCwgaHBhZ2Vfc2l6ZSkpCiAJCXN1Y2Nlc3MoJiMzNDtPSyYjMzQ7KTsKIAllbHNlCiAJCWZhaWwoJiMzNDtGYWlsJiMzNDspOwomIzQzOwomIzQzOwkvKiBSZXN0b3JlIFRIUCBzZXR0aW5ncyBmb3IgbVRIUCBjb2xsYXBzZS4gKi8KJiM0MzsJdGhwX3BvcF9zZXR0aW5ncygpOwogfQogCiBzdGF0aWMgc3RydWN0IGNvbGxhcHNlX2NvbnRleHQgX19raHVnZXBhZ2VkX2NvbnRleHQgPSB7CkBAIC02MzYsNiAmIzQzOzY4OSwxMiBAQCBzdGF0aWMgc3RydWN0IGNvbGxhcHNlX2NvbnRleHQgX19raHVnZXBhZ2VkX2NvbnRleHQgPSB7CiAJLm5hbWUgPSAmIzM0O2todWdlcGFnZWQmIzM0OywKIH07CiAKJiM0MztzdGF0aWMgc3RydWN0IGNvbGxhcHNlX2NvbnRleHQgX19tdGhwX2todWdlcGFnZWRfY29udGV4dCA9IHsKJiM0MzsJLmNvbGxhcHNlID0gJmFtcDttdGhwX2todWdlcGFnZWRfY29sbGFwc2UsCiYjNDM7CS5lbmZvcmNlX3B0ZV9zY2FuX2xpbWl0cyA9IHRydWUsCiYjNDM7CS5uYW1lID0gJiMzNDttdGhwX2todWdlcGFnZWQmIzM0OywKJiM0Mzt9OwomIzQzOwogc3RhdGljIHN0cnVjdCBjb2xsYXBzZV9jb250ZXh0IF9fbWFkdmlzZV9jb250ZXh0ID0gewogCS5jb2xsYXBzZSA9ICZhbXA7bWFkdmlzZV9jb2xsYXBzZSwKIAkuZW5mb3JjZV9wdGVfc2Nhbl9saW1pdHMgPSBmYWxzZSwKQEAgLTY1Myw3ICYjNDM7NzEyLDcgQEAgc3RhdGljIHZvaWQgYWxsb2NfYXRfZmF1bHQodm9pZCkKIAlwID0gYWxsb2NfbWFwcGluZygxKTsKIAkqcCA9IDE7CiAJa3NmdF9wcmludF9tc2coJiMzNDtBbGxvY2F0ZSBodWdlIHBhZ2Ugb24gZmF1bHQuLi4mIzM0Oyk7Ci0JaWYgKGNoZWNrX2h1Z2VfYW5vbihwLCAxLCBocGFnZV9wbWRfc2l6ZSkpCiYjNDM7CWlmIChjaGVja19odWdlX2Fub24ocCwgaHBhZ2VfcG1kX3NpemUsIDEsIGhwYWdlX3BtZF9zaXplKSkKIAkJc3VjY2VzcygmIzM0O09LJiMzNDspOwogCWVsc2UKIAkJZmFpbCgmIzM0O0ZhaWwmIzM0Oyk7CkBAIC02NjIsNyAmIzQzOzcyMSw3IEBAIHN0YXRpYyB2b2lkIGFsbG9jX2F0X2ZhdWx0KHZvaWQpCiAKIAltYWR2aXNlKHAsIHBhZ2Vfc2l6ZSwgTUFEVl9ET05UTkVFRCk7CiAJa3NmdF9wcmludF9tc2coJiMzNDtTcGxpdCBodWdlIFBNRCBvbiBNQURWX0RPTlRORUVELi4uJiMzNDspOwotCWlmIChjaGVja19odWdlX2Fub24ocCwgMCwgaHBhZ2VfcG1kX3NpemUpKQomIzQzOwlpZiAoY2hlY2tfaHVnZV9hbm9uKHAsIGhwYWdlX3BtZF9zaXplLCAwLCBocGFnZV9wbWRfc2l6ZSkpCiAJCXN1Y2Nlc3MoJiMzNDtPSyYjMzQ7KTsKIAllbHNlCiAJCWZhaWwoJiMzNDtGYWlsJiMzNDspOwpAQCAtNjc0LDEwICYjNDM7NzMzLDE3IEBAIHN0YXRpYyB2b2lkIGFsbG9jX2F0X2ZhdWx0KHZvaWQpCiBzdGF0aWMgdm9pZCBjb2xsYXBzZV9mdWxsKHN0cnVjdCBjb2xsYXBzZV9jb250ZXh0ICpjLCBzdHJ1Y3QgbWVtX29wcyAqb3BzKQogewogCXZvaWQgKnA7Ci0JaW50IG5yX2hwYWdlcyA9IDQ7CiYjNDM7CWludCBucl9wbWRzID0gNCwgbnJfaHBhZ2VzID0gNDsKIAl1bnNpZ25lZCBsb25nIHNpemUgPSBucl9ocGFnZXMgKiBocGFnZV9wbWRfc2l6ZTsKIAotCXAgPSBvcHMtJmd0O3NldHVwX2FyZWEobnJfaHBhZ2VzKTsKJiM0MzsJLyogT25seSB0cnkgMSBQTUQgc2l6ZWQgcmFuZ2UgZm9yIG1USFAgY29sbGFwc2UuICovCiYjNDM7CWlmIChjID09ICZhbXA7X19tdGhwX2todWdlcGFnZWRfY29udGV4dCkgewomIzQzOwkJbnJfcG1kcyA9IDE7CiYjNDM7CQlucl9ocGFnZXMgPSAxICZsdDsmbHQ7IChocGFnZV9wbWRfb3JkZXIgLSBjb2xsYXBzZV9vcmRlcik7CiYjNDM7CQlzaXplID0gaHBhZ2VfcG1kX3NpemU7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcCA9IG9wcy0mZ3Q7c2V0dXBfYXJlYShucl9wbWRzKTsKIAlvcHMtJmd0O2ZhdWx0KHAsIDAsIHNpemUpOwogCWMtJmd0O2NvbGxhcHNlKCYjMzQ7Q29sbGFwc2UgbXVsdGlwbGUgZnVsbHkgcG9wdWxhdGVkIFBURSB0YWJsZSYjMzQ7LCBwLCBucl9ocGFnZXMsCiAJCSAgICBvcHMsIHRydWUpOwpAQCAtNjg5LDEwICYjNDM7NzU1LDMxIEBAIHN0YXRpYyB2b2lkIGNvbGxhcHNlX2Z1bGwoc3RydWN0IGNvbGxhcHNlX2NvbnRleHQgKmMsIHN0cnVjdCBtZW1fb3BzICpvcHMpCiAKIHN0YXRpYyB2b2lkIGNvbGxhcHNlX2VtcHR5KHN0cnVjdCBjb2xsYXBzZV9jb250ZXh0ICpjLCBzdHJ1Y3QgbWVtX29wcyAqb3BzKQogewomIzQzOwlpbnQgbnJfaHBhZ2VzID0gMTsKJiM0MzsJdm9pZCAqcDsKJiM0MzsKJiM0MzsJaWYgKGMgPT0gJmFtcDtfX210aHBfa2h1Z2VwYWdlZF9jb250ZXh0KQomIzQzOwkJbnJfaHBhZ2VzID0gMSAmbHQ7Jmx0OyAoaHBhZ2VfcG1kX29yZGVyIC0gY29sbGFwc2Vfb3JkZXIpOwomIzQzOwomIzQzOwlwID0gb3BzLSZndDtzZXR1cF9hcmVhKDEpOwomIzQzOwljLSZndDtjb2xsYXBzZSgmIzM0O0RvIG5vdCBjb2xsYXBzZSBlbXB0eSBQVEUgdGFibGUmIzM0OywgcCwgbnJfaHBhZ2VzLCBvcHMsIGZhbHNlKTsKJiM0MzsJb3BzLSZndDtjbGVhbnVwX2FyZWEocCwgaHBhZ2VfcG1kX3NpemUpOwomIzQzOwlrc2Z0X3Rlc3RfcmVzdWx0X3JlcG9ydChleGl0X3N0YXR1cywgJiMzNDslc1xuJiMzNDssIF9fZnVuY19fKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgY29sbGFwc2Vfc2luZ2xlX210aHAoc3RydWN0IGNvbGxhcHNlX2NvbnRleHQgKmMsIHN0cnVjdCBtZW1fb3BzICpvcHMpCiYjNDM7ewomIzQzOwl1bnNpZ25lZCBsb25nIGhwYWdlX3NpemUgPSBwYWdlX3NpemUgJmx0OyZsdDsgY29sbGFwc2Vfb3JkZXI7CiAJdm9pZCAqcDsKIAogCXAgPSBvcHMtJmd0O3NldHVwX2FyZWEoMSk7Ci0JYy0mZ3Q7Y29sbGFwc2UoJiMzNDtEbyBub3QgY29sbGFwc2UgZW1wdHkgUFRFIHRhYmxlJiMzNDssIHAsIDEsIG9wcywgZmFsc2UpOwomIzQzOwkvKgomIzQzOwkgKiBPbmx5IGZhdWx0IGNvbGxhcHNlX29yZGVyIHNpemVkIHJhbmdlcywgYW5kIG9ubHkgY2hlY2sgMQomIzQzOwkgKiBjb2xsYXBzZV9vcmRlciBzaXplZCBodWdlIHBhZ2UuCiYjNDM7CSAqLwomIzQzOwlvcHMtJmd0O2ZhdWx0KHAsIDAsIGhwYWdlX3NpemUpOwomIzQzOwljLSZndDtjb2xsYXBzZSgmIzM0O0NvbGxhcHNlIFBURSB0YWJsZSB3aXRoIGhhbGYgUFRFIGVudHJpZXMgcHJlc2VudCYjMzQ7LAomIzQzOwkJcCwgMSwgb3BzLCB0cnVlKTsKIAlvcHMtJmd0O2NsZWFudXBfYXJlYShwLCBocGFnZV9wbWRfc2l6ZSk7CiAJa3NmdF90ZXN0X3Jlc3VsdF9yZXBvcnQoZXhpdF9zdGF0dXMsICYjMzQ7JXNcbiYjMzQ7LCBfX2Z1bmNfXyk7CiB9CkBAIC04NDgsNyAmIzQzOzkzNSw3IEBAIHN0YXRpYyB2b2lkIGNvbGxhcHNlX3NpbmdsZV9wdGVfZW50cnlfY29tcG91bmQoc3RydWN0IGNvbGxhcHNlX2NvbnRleHQgKmMsIHN0cnVjCiAJbWFkdmlzZShwLCBocGFnZV9wbWRfc2l6ZSwgTUFEVl9OT0hVR0VQQUdFKTsKIAlrc2Z0X3ByaW50X21zZygmIzM0O1NwbGl0IGh1Z2UgcGFnZSBsZWF2aW5nIHNpbmdsZSBQVEUgbWFwcGluZyBjb21wb3VuZCBwYWdlLi4uJiMzNDspOwogCW1hZHZpc2UocCAmIzQzOyBwYWdlX3NpemUsIGhwYWdlX3BtZF9zaXplIC0gcGFnZV9zaXplLCBNQURWX0RPTlRORUVEKTsKLQlpZiAob3BzLSZndDtjaGVja19odWdlKHAsIDApKQomIzQzOwlpZiAob3BzLSZndDtjaGVja19odWdlKHAsIGhwYWdlX3BtZF9zaXplLCAwLCBocGFnZV9wbWRfc2l6ZSkpCiAJCXN1Y2Nlc3MoJiMzNDtPSyYjMzQ7KTsKIAllbHNlCiAJCWZhaWwoJiMzNDtGYWlsJiMzNDspOwpAQCAtODY5LDcgJiM0Mzs5NTYsNyBAQCBzdGF0aWMgdm9pZCBjb2xsYXBzZV9mdWxsX29mX2NvbXBvdW5kKHN0cnVjdCBjb2xsYXBzZV9jb250ZXh0ICpjLCBzdHJ1Y3QgbWVtX29wcwogCWtzZnRfcHJpbnRfbXNnKCYjMzQ7U3BsaXQgaHVnZSBwYWdlIGxlYXZpbmcgc2luZ2xlIFBURSBwYWdlIHRhYmxlIGZ1bGwgb2YgY29tcG91bmQgcGFnZXMuLi4mIzM0Oyk7CiAJbWFkdmlzZShwLCBwYWdlX3NpemUsIE1BRFZfTk9IVUdFUEFHRSk7CiAJbWFkdmlzZShwLCBocGFnZV9wbWRfc2l6ZSwgTUFEVl9OT0hVR0VQQUdFKTsKLQlpZiAob3BzLSZndDtjaGVja19odWdlKHAsIDApKQomIzQzOwlpZiAob3BzLSZndDtjaGVja19odWdlKHAsIGhwYWdlX3BtZF9zaXplLCAwLCBocGFnZV9wbWRfc2l6ZSkpCiAJCXN1Y2Nlc3MoJiMzNDtPSyYjMzQ7KTsKIAllbHNlCiAJCWZhaWwoJiMzNDtGYWlsJiMzNDspOwpAQCAtODkxLDcgJiM0Mzs5NzgsNyBAQCBzdGF0aWMgdm9pZCBjb2xsYXBzZV9jb21wb3VuZF9leHRyZW1lKHN0cnVjdCBjb2xsYXBzZV9jb250ZXh0ICpjLCBzdHJ1Y3QgbWVtX29wcwogCWZvciAoaSA9IDA7IGkgJmx0OyBocGFnZV9wbWRfbnI7IGkmIzQzOyYjNDM7KSB7CiAJCW1hZHZpc2UoQkFTRV9BRERSLCBocGFnZV9wbWRfc2l6ZSwgTUFEVl9IVUdFUEFHRSk7CiAJCW9wcy0mZ3Q7ZmF1bHQoQkFTRV9BRERSLCAwLCBocGFnZV9wbWRfc2l6ZSk7Ci0JCWlmICghb3BzLSZndDtjaGVja19odWdlKEJBU0VfQUREUiwgMSkpCiYjNDM7CQlpZiAoIW9wcy0mZ3Q7Y2hlY2tfaHVnZShCQVNFX0FERFIsIGhwYWdlX3BtZF9zaXplLCAxLCBocGFnZV9wbWRfc2l6ZSkpCiAJCQlrc2Z0X2V4aXRfZmFpbF9tc2coJiMzNDtGYWlsZWQgdG8gYWxsb2NhdGUgaHVnZSBwYWdlXG4mIzM0Oyk7CiAJCW1hZHZpc2UoQkFTRV9BRERSLCBocGFnZV9wbWRfc2l6ZSwgTUFEVl9OT0hVR0VQQUdFKTsKIApAQCAtOTE0LDcgJiM0MzsxMDAxLDcgQEAgc3RhdGljIHZvaWQgY29sbGFwc2VfY29tcG91bmRfZXh0cmVtZShzdHJ1Y3QgY29sbGFwc2VfY29udGV4dCAqYywgc3RydWN0IG1lbV9vcHMKIAogCW9wcy0mZ3Q7Y2xlYW51cF9hcmVhKEJBU0VfQUREUiwgaHBhZ2VfcG1kX3NpemUpOwogCW9wcy0mZ3Q7ZmF1bHQocCwgMCwgaHBhZ2VfcG1kX3NpemUpOwotCWlmICghb3BzLSZndDtjaGVja19odWdlKHAsIDEpKQomIzQzOwlpZiAoIW9wcy0mZ3Q7Y2hlY2tfaHVnZShwLCBocGFnZV9wbWRfc2l6ZSwgMSwgaHBhZ2VfcG1kX3NpemUpKQogCQlzdWNjZXNzKCYjMzQ7T0smIzM0Oyk7CiAJZWxzZQogCQlmYWlsKCYjMzQ7RmFpbCYjMzQ7KTsKQEAgLTkzNiw3ICYjNDM7MTAyMyw3IEBAIHN0YXRpYyB2b2lkIGNvbGxhcHNlX2Zvcmsoc3RydWN0IGNvbGxhcHNlX2NvbnRleHQgKmMsIHN0cnVjdCBtZW1fb3BzICpvcHMpCiAKIAlrc2Z0X3ByaW50X21zZygmIzM0O0FsbG9jYXRlIHNtYWxsIHBhZ2UuLi4mIzM0Oyk7CiAJb3BzLSZndDtmYXVsdChwLCAwLCBwYWdlX3NpemUpOwotCWlmIChvcHMtJmd0O2NoZWNrX2h1Z2UocCwgMCkpCiYjNDM7CWlmIChvcHMtJmd0O2NoZWNrX2h1Z2UocCwgaHBhZ2VfcG1kX3NpemUsIDAsIGhwYWdlX3BtZF9zaXplKSkKIAkJc3VjY2VzcygmIzM0O09LJiMzNDspOwogCWVsc2UKIAkJZmFpbCgmIzM0O0ZhaWwmIzM0Oyk7CkBAIC05NDQsNyAmIzQzOzEwMzEsNyBAQCBzdGF0aWMgdm9pZCBjb2xsYXBzZV9mb3JrKHN0cnVjdCBjb2xsYXBzZV9jb250ZXh0ICpjLCBzdHJ1Y3QgbWVtX29wcyAqb3BzKQogCWtzZnRfcHJpbnRfbXNnKCYjMzQ7U2hhcmUgc21hbGwgcGFnZSBvdmVyIGZvcmsoKS4uLiYjMzQ7KTsKIAlpZiAoIWZvcmsoKSkgewogCQkvKiBEbyBub3QgdG91Y2ggc2V0dGluZ3Mgb24gY2hpbGQgZXhpdCAqLwotCQlpZiAob3BzLSZndDtjaGVja19odWdlKHAsIDApKQomIzQzOwkJaWYgKG9wcy0mZ3Q7Y2hlY2tfaHVnZShwLCBocGFnZV9wbWRfc2l6ZSwgMCwgaHBhZ2VfcG1kX3NpemUpKQogCQkJc3VjY2VzcygmIzM0O09LJiMzNDspOwogCQllbHNlCiAJCQlmYWlsKCYjMzQ7RmFpbCYjMzQ7KTsKQEAgLTk2Miw3ICYjNDM7MTA0OSw3IEBAIHN0YXRpYyB2b2lkIGNvbGxhcHNlX2Zvcmsoc3RydWN0IGNvbGxhcHNlX2NvbnRleHQgKmMsIHN0cnVjdCBtZW1fb3BzICpvcHMpCiAJZXhpdF9zdGF0dXMgPSBXRVhJVFNUQVRVUyh3c3RhdHVzKTsKIAogCWtzZnRfcHJpbnRfbXNnKCYjMzQ7Q2hlY2sgaWYgcGFyZW50IHN0aWxsIGhhcyBzbWFsbCBwYWdlLi4uJiMzNDspOwotCWlmIChvcHMtJmd0O2NoZWNrX2h1Z2UocCwgMCkpCiYjNDM7CWlmIChvcHMtJmd0O2NoZWNrX2h1Z2UocCwgaHBhZ2VfcG1kX3NpemUsIDAsIGhwYWdlX3BtZF9zaXplKSkKIAkJc3VjY2VzcygmIzM0O09LJiMzNDspOwogCWVsc2UKIAkJZmFpbCgmIzM0O0ZhaWwmIzM0Oyk7CkBAIC05ODAsNyAmIzQzOzEwNjcsNyBAQCBzdGF0aWMgdm9pZCBjb2xsYXBzZV9mb3JrX2NvbXBvdW5kKHN0cnVjdCBjb2xsYXBzZV9jb250ZXh0ICpjLCBzdHJ1Y3QgbWVtX29wcyAqbwogCWtzZnRfcHJpbnRfbXNnKCYjMzQ7U2hhcmUgaHVnZSBwYWdlIG92ZXIgZm9yaygpLi4uJiMzNDspOwogCWlmICghZm9yaygpKSB7CiAJCS8qIERvIG5vdCB0b3VjaCBzZXR0aW5ncyBvbiBjaGlsZCBleGl0ICovCi0JCWlmIChvcHMtJmd0O2NoZWNrX2h1Z2UocCwgMSkpCiYjNDM7CQlpZiAob3BzLSZndDtjaGVja19odWdlKHAsIGhwYWdlX3BtZF9zaXplLCAxLCBocGFnZV9wbWRfc2l6ZSkpCiAJCQlzdWNjZXNzKCYjMzQ7T0smIzM0Oyk7CiAJCWVsc2UKIAkJCWZhaWwoJiMzNDtGYWlsJiMzNDspOwpAQCAtOTg4LDcgJiM0MzsxMDc1LDcgQEAgc3RhdGljIHZvaWQgY29sbGFwc2VfZm9ya19jb21wb3VuZChzdHJ1Y3QgY29sbGFwc2VfY29udGV4dCAqYywgc3RydWN0IG1lbV9vcHMgKm8KIAkJa3NmdF9wcmludF9tc2coJiMzNDtTcGxpdCBodWdlIHBhZ2UgUE1EIGluIGNoaWxkIHByb2Nlc3MuLi4mIzM0Oyk7CiAJCW1hZHZpc2UocCwgcGFnZV9zaXplLCBNQURWX05PSFVHRVBBR0UpOwogCQltYWR2aXNlKHAsIGhwYWdlX3BtZF9zaXplLCBNQURWX05PSFVHRVBBR0UpOwotCQlpZiAob3BzLSZndDtjaGVja19odWdlKHAsIDApKQomIzQzOwkJaWYgKG9wcy0mZ3Q7Y2hlY2tfaHVnZShwLCBocGFnZV9wbWRfc2l6ZSwgMCwgaHBhZ2VfcG1kX3NpemUpKQogCQkJc3VjY2VzcygmIzM0O09LJiMzNDspOwogCQllbHNlCiAJCQlmYWlsKCYjMzQ7RmFpbCYjMzQ7KTsKQEAgLTEwMDksNyAmIzQzOzEwOTYsNyBAQCBzdGF0aWMgdm9pZCBjb2xsYXBzZV9mb3JrX2NvbXBvdW5kKHN0cnVjdCBjb2xsYXBzZV9jb250ZXh0ICpjLCBzdHJ1Y3QgbWVtX29wcyAqbwogCWV4aXRfc3RhdHVzID0gV0VYSVRTVEFUVVMod3N0YXR1cyk7CiAKIAlrc2Z0X3ByaW50X21zZygmIzM0O0NoZWNrIGlmIHBhcmVudCBzdGlsbCBoYXMgaHVnZSBwYWdlLi4uJiMzNDspOwotCWlmIChvcHMtJmd0O2NoZWNrX2h1Z2UocCwgMSkpCiYjNDM7CWlmIChvcHMtJmd0O2NoZWNrX2h1Z2UocCwgaHBhZ2VfcG1kX3NpemUsIDEsIGhwYWdlX3BtZF9zaXplKSkKIAkJc3VjY2VzcygmIzM0O09LJiMzNDspOwogCWVsc2UKIAkJZmFpbCgmIzM0O0ZhaWwmIzM0Oyk7CkBAIC0xMDI4LDcgJiM0MzsxMTE1LDcgQEAgc3RhdGljIHZvaWQgY29sbGFwc2VfbWF4X3B0ZXNfc2hhcmVkKHN0cnVjdCBjb2xsYXBzZV9jb250ZXh0ICpjLCBzdHJ1Y3QgbWVtX29wcwogCWtzZnRfcHJpbnRfbXNnKCYjMzQ7U2hhcmUgaHVnZSBwYWdlIG92ZXIgZm9yaygpLi4uJiMzNDspOwogCWlmICghZm9yaygpKSB7CiAJCS8qIERvIG5vdCB0b3VjaCBzZXR0aW5ncyBvbiBjaGlsZCBleGl0ICovCi0JCWlmIChvcHMtJmd0O2NoZWNrX2h1Z2UocCwgMSkpCiYjNDM7CQlpZiAob3BzLSZndDtjaGVja19odWdlKHAsIGhwYWdlX3BtZF9zaXplLCAxLCBocGFnZV9wbWRfc2l6ZSkpCiAJCQlzdWNjZXNzKCYjMzQ7T0smIzM0Oyk7CiAJCWVsc2UKIAkJCWZhaWwoJiMzNDtGYWlsJiMzNDspOwpAQCAtMTAzNiw3ICYjNDM7MTEyMyw3IEBAIHN0YXRpYyB2b2lkIGNvbGxhcHNlX21heF9wdGVzX3NoYXJlZChzdHJ1Y3QgY29sbGFwc2VfY29udGV4dCAqYywgc3RydWN0IG1lbV9vcHMKIAkJa3NmdF9wcmludF9tc2coJiMzNDtUcmlnZ2VyIENvVyBvbiBwYWdlICVkIG9mICVkLi4uJiMzNDssCiAJCQkJaHBhZ2VfcG1kX25yIC0gbWF4X3B0ZXNfc2hhcmVkIC0gMSwgaHBhZ2VfcG1kX25yKTsKIAkJb3BzLSZndDtmYXVsdChwLCAwLCAoaHBhZ2VfcG1kX25yIC0gbWF4X3B0ZXNfc2hhcmVkIC0gMSkgKiBwYWdlX3NpemUpOwotCQlpZiAob3BzLSZndDtjaGVja19odWdlKHAsIDApKQomIzQzOwkJaWYgKG9wcy0mZ3Q7Y2hlY2tfaHVnZShwLCBocGFnZV9wbWRfc2l6ZSwgMCwgaHBhZ2VfcG1kX3NpemUpKQogCQkJc3VjY2VzcygmIzM0O09LJiMzNDspOwogCQllbHNlCiAJCQlmYWlsKCYjMzQ7RmFpbCYjMzQ7KTsKQEAgLTEwNDksNyAmIzQzOzExMzYsNyBAQCBzdGF0aWMgdm9pZCBjb2xsYXBzZV9tYXhfcHRlc19zaGFyZWQoc3RydWN0IGNvbGxhcHNlX2NvbnRleHQgKmMsIHN0cnVjdCBtZW1fb3BzCiAJCQkgICAgICAgaHBhZ2VfcG1kX25yIC0gbWF4X3B0ZXNfc2hhcmVkLCBocGFnZV9wbWRfbnIpOwogCQkJb3BzLSZndDtmYXVsdChwLCAwLCAoaHBhZ2VfcG1kX25yIC0gbWF4X3B0ZXNfc2hhcmVkKSAqCiAJCQkJICAgIHBhZ2Vfc2l6ZSk7Ci0JCQlpZiAob3BzLSZndDtjaGVja19odWdlKHAsIDApKQomIzQzOwkJCWlmIChvcHMtJmd0O2NoZWNrX2h1Z2UocCwgaHBhZ2VfcG1kX3NpemUsIDAsIGhwYWdlX3BtZF9zaXplKSkKIAkJCQlzdWNjZXNzKCYjMzQ7T0smIzM0Oyk7CiAJCQllbHNlCiAJCQkJZmFpbCgmIzM0O0ZhaWwmIzM0Oyk7CkBAIC0xMDY3LDcgJiM0MzsxMTU0LDcgQEAgc3RhdGljIHZvaWQgY29sbGFwc2VfbWF4X3B0ZXNfc2hhcmVkKHN0cnVjdCBjb2xsYXBzZV9jb250ZXh0ICpjLCBzdHJ1Y3QgbWVtX29wcwogCWV4aXRfc3RhdHVzID0gV0VYSVRTVEFUVVMod3N0YXR1cyk7CiAKIAlrc2Z0X3ByaW50X21zZygmIzM0O0NoZWNrIGlmIHBhcmVudCBzdGlsbCBoYXMgaHVnZSBwYWdlLi4uJiMzNDspOwotCWlmIChvcHMtJmd0O2NoZWNrX2h1Z2UocCwgMSkpCiYjNDM7CWlmIChvcHMtJmd0O2NoZWNrX2h1Z2UocCwgaHBhZ2VfcG1kX3NpemUsIDEsIGhwYWdlX3BtZF9zaXplKSkKIAkJc3VjY2VzcygmIzM0O09LJiMzNDspOwogCWVsc2UKIAkJZmFpbCgmIzM0O0ZhaWwmIzM0Oyk7CkBAIC0xMTA4LDggJiM0MzsxMTk1LDggQEAgc3RhdGljIHZvaWQgbWFkdmlzZV9yZXRyYWN0ZWRfcGFnZV90YWJsZXMoc3RydWN0IGNvbGxhcHNlX2NvbnRleHQgKmMsCiAJb3BzLSZndDtmYXVsdChwLCAwLCBzaXplKTsKIAogCS8qIExldCBraHVnZXBhZ2VkIGNvbGxhcHNlIGFuZCBsZWF2ZSBwbWQgY2xlYXJlZCAqLwotCWlmICh3YWl0X2Zvcl9zY2FuKCYjMzQ7Q29sbGFwc2UgYW5kIGxlYXZlIFBNRCBjbGVhcmVkJiMzNDssIHAsIG5yX2hwYWdlcywKLQkJCSAgb3BzKSkgewomIzQzOwlpZiAod2FpdF9mb3Jfc2NhbigmIzM0O0NvbGxhcHNlIGFuZCBsZWF2ZSBQTUQgY2xlYXJlZCYjMzQ7LCBwLCBzaXplLCBucl9ocGFnZXMsCiYjNDM7CQkJICBocGFnZV9wbWRfb3JkZXIsIG9wcykpIHsKIAkJZmFpbCgmIzM0O1RpbWVvdXQmIzM0Oyk7CiAJCXJldHVybjsKIAl9CkBAIC0xMTI1LDE3ICYjNDM7MTIxMiwxOSBAQCBzdGF0aWMgdm9pZCB1c2FnZSh2b2lkKQogewogCWZwcmludGYoc3RkZXJyLCAmIzM0O1xuVXNhZ2U6IC4va2h1Z2VwYWdlZCBbT1BUSU9OU10gJmx0O3Rlc3QgdHlwZSZndDsgW2Rpcl1cblxuJiMzNDspOwogCWZwcmludGYoc3RkZXJyLCAmIzM0O1x0Jmx0O3Rlc3QgdHlwZSZndDtcdDogJmx0O2NvbnRleHQmZ3Q7OiZsdDttZW1fdHlwZSZndDtcbiYjMzQ7KTsKLQlmcHJpbnRmKHN0ZGVyciwgJiMzNDtcdCZsdDtjb250ZXh0Jmd0O1x0OiBbYWxsfGtodWdlcGFnZWR8bWFkdmlzZV1cbiYjMzQ7KTsKJiM0MzsJZnByaW50ZihzdGRlcnIsICYjMzQ7XHQmbHQ7Y29udGV4dCZndDtcdDogW2FsbHxraHVnZXBhZ2VkfG10aHBfa2h1Z2VwYWdlZHxtYWR2aXNlXVxuJiMzNDspOwogCWZwcmludGYoc3RkZXJyLCAmIzM0O1x0Jmx0O21lbV90eXBlJmd0O1x0OiBbYWxsfGFub258ZmlsZXxzaG1lbV1cbiYjMzQ7KTsKIAlmcHJpbnRmKHN0ZGVyciwgJiMzNDtcblx0XCYjMzQ7ZmlsZSxhbGxcJiMzNDsgbWVtX3R5cGUgcmVxdWlyZXMgW2Rpcl0gYXJndW1lbnRcbiYjMzQ7KTsKIAlmcHJpbnRmKHN0ZGVyciwgJiMzNDtcblx0XCYjMzQ7ZmlsZSxhbGxcJiMzNDsgbWVtX3R5cGUgcmVxdWlyZXMgYSBmaWxlIHN5c3RlbVxuJiMzNDspOwogCWZwcmludGYoc3RkZXJyLAkmIzM0O1x0d2l0aCBQTUQtc2l6ZWQgbGFyZ2UgZm9saW8gc3VwcG9ydFxuJiMzNDspOwogCWZwcmludGYoc3RkZXJyLCAmIzM0O1xuXHRpZiBbZGlyXSBpcyBhIChzdWIpZGlyZWN0b3J5IG9mIGEgdG1wZnMgbW91bnQsIHRtcGZzIG11c3QgYmVcbiYjMzQ7KTsKIAlmcHJpbnRmKHN0ZGVyciwJJiMzNDtcdG1vdW50ZWQgd2l0aCBodWdlPWFkdmlzZSBvcHRpb24gZm9yIGtodWdlcGFnZWQgdGVzdHMgdG8gd29ya1xuJiMzNDspOwomIzQzOwlmcHJpbnRmKHN0ZGVyciwgJiMzNDtcblx0bXRocF9raHVnZXBhZ2VkIG9ubHkgc3VwcG9ydHMgYW5vbiBtZW1fdHlwZSBub3cuXG4mIzM0Oyk7CiAJZnByaW50ZihzdGRlcnIsCSYjMzQ7XG5cdFN1cHBvcnRlZCBPcHRpb25zOlxuJiMzNDspOwogCWZwcmludGYoc3RkZXJyLAkmIzM0O1x0XHQtaDogVGhpcyBoZWxwIG1lc3NhZ2UuXG4mIzM0Oyk7CiAJZnByaW50ZihzdGRlcnIsCSYjMzQ7XHRcdC1zOiBtVEhQIHNpemUsIGV4cHJlc3NlZCBhcyBwYWdlIG9yZGVyLlxuJiMzNDspOwogCWZwcmludGYoc3RkZXJyLAkmIzM0O1x0XHQgICAgRGVmYXVsdHMgdG8gMC4gVXNlIHRoaXMgc2l6ZSBmb3IgYW5vbiBvciBzaG1lbSBhbGxvY2F0aW9ucy5cbiYjMzQ7KTsKJiM0MzsJZnByaW50ZihzdGRlcnIsCSYjMzQ7XHRcdC1jOiBjb2xsYXBzZSBvcmRlciBmb3IgbVRIUCBjb2xsYXBzZSwgZXhwcmVzc2VkIGFzIHBhZ2Ugb3JkZXIuXG4mIzM0Oyk7CiAJZXhpdCgxKTsKIH0KIApAQCAtMTE0NSwxMSAmIzQzOzEyMzQsMTQgQEAgc3RhdGljIHZvaWQgcGFyc2VfdGVzdF90eXBlKGludCBhcmdjLCBjaGFyICoqYXJndikKIAljaGFyICpidWY7CiAJY29uc3QgY2hhciAqdG9rZW47CiAKLQl3aGlsZSAoKG9wdCA9IGdldG9wdChhcmdjLCBhcmd2LCAmIzM0O3M6aCYjMzQ7KSkgIT0gLTEpIHsKJiM0MzsJd2hpbGUgKChvcHQgPSBnZXRvcHQoYXJnYywgYXJndiwgJiMzNDtzOmM6aCYjMzQ7KSkgIT0gLTEpIHsKIAkJc3dpdGNoIChvcHQpIHsKIAkJY2FzZSAmIzM5O3MmIzM5OzoKIAkJCWFub25fb3JkZXIgPSBhdG9pKG9wdGFyZyk7CiAJCQlicmVhazsKJiM0MzsJCWNhc2UgJiMzOTtjJiMzOTs6CiYjNDM7CQkJY29sbGFwc2Vfb3JkZXIgPSBhdG9pKG9wdGFyZyk7CiYjNDM7CQkJYnJlYWs7CiAJCWNhc2UgJiMzOTtoJiMzOTs6CiAJCWRlZmF1bHQ6CiAJCQl1c2FnZSgpOwpAQCAtMTE3NSw2ICYjNDM7MTI2NywxMCBAQCBzdGF0aWMgdm9pZCBwYXJzZV90ZXN0X3R5cGUoaW50IGFyZ2MsIGNoYXIgKiphcmd2KQogCQltYWR2aXNlX2NvbnRleHQgPSAgJmFtcDtfX21hZHZpc2VfY29udGV4dDsKIAl9IGVsc2UgaWYgKCFzdHJjbXAodG9rZW4sICYjMzQ7a2h1Z2VwYWdlZCYjMzQ7KSkgewogCQlraHVnZXBhZ2VkX2NvbnRleHQgPSAgJmFtcDtfX2todWdlcGFnZWRfY29udGV4dDsKJiM0MzsJfSBlbHNlIGlmICghc3RyY21wKHRva2VuLCAmIzM0O210aHBfa2h1Z2VwYWdlZCYjMzQ7KSkgewomIzQzOwkJbXRocF9raHVnZXBhZ2VkX2NvbnRleHQgPSAgJmFtcDtfX210aHBfa2h1Z2VwYWdlZF9jb250ZXh0OwomIzQzOwkJaWYgKGNvbGxhcHNlX29yZGVyICZsdDs9IDAgfHwgY29sbGFwc2Vfb3JkZXIgJmd0Oz0gaHBhZ2VfcG1kX29yZGVyKQomIzQzOwkJCXVzYWdlKCk7CiAJfSBlbHNlIGlmICghc3RyY21wKHRva2VuLCAmIzM0O21hZHZpc2UmIzM0OykpIHsKIAkJbWFkdmlzZV9jb250ZXh0ID0gICZhbXA7X19tYWR2aXNlX2NvbnRleHQ7CiAJfSBlbHNlIHsKQEAgLTExOTAsMTQgJiM0MzsxMjg2LDIwIEBAIHN0YXRpYyB2b2lkIHBhcnNlX3Rlc3RfdHlwZShpbnQgYXJnYywgY2hhciAqKmFyZ3YpCiAJCXJlYWRfd3JpdGVfZmlsZV93cml0ZV9vcHMgPSAgJmFtcDtfX3JlYWRfd3JpdGVfZmlsZV93cml0ZV9vcHM7CiAJCWFub25fb3BzID0gJmFtcDtfX2Fub25fb3BzOwogCQlzaG1lbV9vcHMgPSAmYW1wO19fc2htZW1fb3BzOwomIzQzOwkJaWYgKG10aHBfa2h1Z2VwYWdlZF9jb250ZXh0KQomIzQzOwkJCXVzYWdlKCk7CiAJfSBlbHNlIGlmICghc3RyY21wKGJ1ZiwgJiMzNDthbm9uJiMzNDspKSB7CiAJCWFub25fb3BzID0gJmFtcDtfX2Fub25fb3BzOwogCX0gZWxzZSBpZiAoIXN0cmNtcChidWYsICYjMzQ7ZmlsZSYjMzQ7KSkgewogCQlyZWFkX29ubHlfZmlsZV9vcHMgPSAgJmFtcDtfX3JlYWRfb25seV9maWxlX29wczsKIAkJcmVhZF93cml0ZV9maWxlX3JlYWRfb3BzID0gICZhbXA7X19yZWFkX3dyaXRlX2ZpbGVfcmVhZF9vcHM7CiAJCXJlYWRfd3JpdGVfZmlsZV93cml0ZV9vcHMgPSAgJmFtcDtfX3JlYWRfd3JpdGVfZmlsZV93cml0ZV9vcHM7CiYjNDM7CQlpZiAobXRocF9raHVnZXBhZ2VkX2NvbnRleHQpCiYjNDM7CQkJdXNhZ2UoKTsKIAl9IGVsc2UgaWYgKCFzdHJjbXAoYnVmLCAmIzM0O3NobWVtJiMzNDspKSB7CiAJCXNobWVtX29wcyA9ICZhbXA7X19zaG1lbV9vcHM7CiYjNDM7CQlpZiAobXRocF9raHVnZXBhZ2VkX2NvbnRleHQpCiYjNDM7CQkJdXNhZ2UoKTsKIAl9IGVsc2UgewogCQl1c2FnZSgpOwogCX0KQEAgLTEyNDAsNyAmIzQzOzEzNDIsNiBAQCBzdGF0aWMgaW50IG5yX3Rlc3RfY2FzZXM7CiAKIGludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKIHsKLQlpbnQgaHBhZ2VfcG1kX29yZGVyOwogCXN0cnVjdCB0aHBfc2V0dGluZ3MgZGVmYXVsdF9zZXR0aW5ncyA9IHsKIAkJLnRocF9lbmFibGVkID0gVEhQX01BRFZJU0UsCiAJCS50aHBfZGVmcmFnID0gVEhQX0RFRlJBR19BTFdBWVMsCkBAIC0xMjY2LDEwICYjNDM7MTM2Nyw2IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKIAlpZiAoIXRocF9pc19lbmFibGVkKCkpCiAJCWtzZnRfZXhpdF9za2lwKCYjMzQ7VHJhbnNwYXJlbnQgSHVnZXBhZ2VzIG5vdCBhdmFpbGFibGVcbiYjMzQ7KTsKIAotCXBhcnNlX3Rlc3RfdHlwZShhcmdjLCBhcmd2KTsKLQotCXNldGJ1ZihzdGRvdXQsIE5VTEwpOwotCiAJcGFnZV9zaXplID0gZ2V0cGFnZXNpemUoKTsKIAlocGFnZV9wbWRfc2l6ZSA9IHJlYWRfcG1kX3BhZ2VzaXplKCk7CiAJaWYgKCFocGFnZV9wbWRfc2l6ZSkKQEAgLTEyNzcsNiAmIzQzOzEzNzQsMTAgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQogCWhwYWdlX3BtZF9uciA9IGhwYWdlX3BtZF9zaXplIC8gcGFnZV9zaXplOwogCWhwYWdlX3BtZF9vcmRlciA9IF9fYnVpbHRpbl9jdHooaHBhZ2VfcG1kX25yKTsKIAomIzQzOwlwYXJzZV90ZXN0X3R5cGUoYXJnYywgYXJndik7CiYjNDM7CiYjNDM7CXNldGJ1ZihzdGRvdXQsIE5VTEwpOwomIzQzOwogCWRlZmF1bHRfc2V0dGluZ3Mua2h1Z2VwYWdlZC5tYXhfcHRlc19ub25lID0gaHBhZ2VfcG1kX25yIC0gMTsKIAlkZWZhdWx0X3NldHRpbmdzLmtodWdlcGFnZWQubWF4X3B0ZXNfc3dhcCA9IGhwYWdlX3BtZF9uciAvIDg7CiAJZGVmYXVsdF9zZXR0aW5ncy5raHVnZXBhZ2VkLm1heF9wdGVzX3NoYXJlZCA9IGhwYWdlX3BtZF9uciAvIDI7CkBAIC0xMjk0LDYgJiM0MzsxMzk1LDcgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQogCVRFU1QoY29sbGFwc2VfZnVsbCwga2h1Z2VwYWdlZF9jb250ZXh0LCByZWFkX3dyaXRlX2ZpbGVfcmVhZF9vcHMpOwogCVRFU1QoY29sbGFwc2VfZnVsbCwga2h1Z2VwYWdlZF9jb250ZXh0LCByZWFkX3dyaXRlX2ZpbGVfd3JpdGVfb3BzKTsKIAlURVNUKGNvbGxhcHNlX2Z1bGwsIGtodWdlcGFnZWRfY29udGV4dCwgc2htZW1fb3BzKTsKJiM0MzsJVEVTVChjb2xsYXBzZV9mdWxsLCBtdGhwX2todWdlcGFnZWRfY29udGV4dCwgYW5vbl9vcHMpOwogCVRFU1QoY29sbGFwc2VfZnVsbCwgbWFkdmlzZV9jb250ZXh0LCBhbm9uX29wcyk7CiAJVEVTVChjb2xsYXBzZV9mdWxsLCBtYWR2aXNlX2NvbnRleHQsIHJlYWRfb25seV9maWxlX29wcyk7CiAJVEVTVChjb2xsYXBzZV9mdWxsLCBtYWR2aXNlX2NvbnRleHQsIHJlYWRfd3JpdGVfZmlsZV9yZWFkX29wcyk7CkBAIC0xMzAxLDggJiM0MzsxNDAzLDExIEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKIAlURVNUKGNvbGxhcHNlX2Z1bGwsIG1hZHZpc2VfY29udGV4dCwgc2htZW1fb3BzKTsKIAogCVRFU1QoY29sbGFwc2VfZW1wdHksIGtodWdlcGFnZWRfY29udGV4dCwgYW5vbl9vcHMpOwomIzQzOwlURVNUKGNvbGxhcHNlX2VtcHR5LCBtdGhwX2todWdlcGFnZWRfY29udGV4dCwgYW5vbl9vcHMpOwogCVRFU1QoY29sbGFwc2VfZW1wdHksIG1hZHZpc2VfY29udGV4dCwgYW5vbl9vcHMpOwogCiYjNDM7CVRFU1QoY29sbGFwc2Vfc2luZ2xlX210aHAsIG10aHBfa2h1Z2VwYWdlZF9jb250ZXh0LCBhbm9uX29wcyk7CiYjNDM7CiAJVEVTVChjb2xsYXBzZV9zaW5nbGVfcHRlX2VudHJ5LCBraHVnZXBhZ2VkX2NvbnRleHQsIGFub25fb3BzKTsKIAlURVNUKGNvbGxhcHNlX3NpbmdsZV9wdGVfZW50cnksIGtodWdlcGFnZWRfY29udGV4dCwgcmVhZF9vbmx5X2ZpbGVfb3BzKTsKIAlURVNUKGNvbGxhcHNlX3NpbmdsZV9wdGVfZW50cnksIGtodWdlcGFnZWRfY29udGV4dCwgcmVhZF93cml0ZV9maWxlX3JlYWRfb3BzKTsKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3BhZ2VtYXBfaW9jdGwuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3BhZ2VtYXBfaW9jdGwuYwppbmRleCAxYjJkZmZjYzk5OWIwLi5jZmQxOTg3MzM5YzEzIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wYWdlbWFwX2lvY3RsLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGFnZW1hcF9pb2N0bC5jCkBAIC0xMDg1LDcgJiM0MzsxMDg1LDcgQEAgc3RhdGljIHZvaWQgdW5wb3B1bGF0ZWRfd3JpdHRlbl90ZXN0KGNvbnN0IGNoYXIgKm5hbWUsIGNoYXIgKm1lbSwgbG9uZyBzaXplLAogCW1lbXNldChtZW0sIDEsIHNpemUpOwogCWlmICh1c2VfdGhwICZhbXA7JmFtcDsKIAkgICAgKG1hZHZpc2UobWVtLCBzaXplLCBNQURWX0NPTExBUFNFKSB8fAotCSAgICAgIWNoZWNrX2h1Z2VfYW5vbihtZW0sIHNpemUgLyBocGFnZV9zaXplLCBocGFnZV9zaXplKSkpIHsKJiM0MzsJICAgICAhY2hlY2tfaHVnZV9hbm9uKG1lbSwgc2l6ZSwgc2l6ZSAvIGhwYWdlX3NpemUsIGhwYWdlX3NpemUpKSkgewogCQlrc2Z0X3Rlc3RfcmVzdWx0X3NraXAoJiMzNDslcyBjb3VsZCBub3QgZm9ybSBhIFRIUFxuJiMzNDssIG5hbWUpOwogCQlnb3RvIG91dDsKIAl9CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wcmN0bF90aHBfZGlzYWJsZS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcHJjdGxfdGhwX2Rpc2FibGUuYwppbmRleCBkOGQ5ZDFkZTU3YjhiLi44MmM2ZTk2ZWE2ZWIzIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wcmN0bF90aHBfZGlzYWJsZS5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ByY3RsX3RocF9kaXNhYmxlLmMKQEAgLTY3LDcgJiM0Mzs2Nyw3IEBAIHN0YXRpYyBpbnQgdGVzdF9tbWFwX3RocChlbnVtIHRocF9jb2xsYXBzZV90eXBlIG1hZHZpc2VfYnVmLCBzaXplX3QgcG1kc2l6ZSkKIAkvKiBIQUNLOiBtYWtlIHN1cmUgd2UgaGF2ZSBhIHNlcGFyYXRlIFZNQSB0aGF0IHdlIGNhbiBjaGVjayByZWxpYWJseS4gKi8KIAltcHJvdGVjdChtZW0sIHBtZHNpemUsIFBST1RfUkVBRCk7CiAKLQlyZXQgPSBjaGVja19odWdlX2Fub24obWVtLCAxLCBwbWRzaXplKTsKJiM0MzsJcmV0ID0gY2hlY2tfaHVnZV9hbm9uKG1lbSwgcG1kc2l6ZSwgMSwgcG1kc2l6ZSk7CiAJbXVubWFwKG1tYXBfbWVtLCBtbWFwX3NpemUpOwogCXJldHVybiByZXQ7CiB9CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ydW5fdm10ZXN0cy5zaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3J1bl92bXRlc3RzLnNoCmluZGV4IDY4N2QxMTVlM2JkODAuLmQwOWY5ZjZhMzg0ZWUgMTAwNzU1Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3J1bl92bXRlc3RzLnNoCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3J1bl92bXRlc3RzLnNoCkBAIC00MTAsNiAmIzQzOzQxMCw4IEBAIENBVEVHT1JZPSYjMzQ7dGhwJiMzNDsgcnVuX3Rlc3QgLi9raHVnZXBhZ2VkIGFsbDpzaG1lbQogCiBDQVRFR09SWT0mIzM0O3RocCYjMzQ7IHJ1bl90ZXN0IC4va2h1Z2VwYWdlZCAtcyA0IGFsbDpzaG1lbQogCiYjNDM7Q0FURUdPUlk9JiMzNDt0aHAmIzM0OyBydW5fdGVzdCAuL2todWdlcGFnZWQgLWMgNCBtdGhwX2todWdlcGFnZWQ6YW5vbgomIzQzOwogIyBUcnkgdG8gY3JlYXRlIFhGUyBpZiBub3QgcHJvdmlkZWQKIGlmIFsgLXogJiMzNDske1NQTElUX0hVR0VfUEFHRV9URVNUX1hGU19QQVRIfSYjMzQ7IF07IHRoZW4KICAgICBpZiB0ZXN0X3NlbGVjdGVkICYjMzQ7dGhwJiMzNDs7IHRoZW4KZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3NvZnQtZGlydHkuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3NvZnQtZGlydHkuYwppbmRleCBmYjE4NjRhNjhlMWM2Li5lMTk4ZmFjZjc4YmI1IDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9zb2Z0LWRpcnR5LmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vc29mdC1kaXJ0eS5jCkBAIC0xMDMsNyAmIzQzOzEwMyw3IEBAIHN0YXRpYyB2b2lkIHRlc3RfaHVnZXBhZ2UoaW50IHBhZ2VtYXBfZmQsIGludCBwYWdlc2l6ZSkKIAlmb3IgKGkgPSAwOyBpICZsdDsgaHBhZ2VfbGVuOyBpJiM0MzsmIzQzOykKIAkJbWFwW2ldID0gKGNoYXIpaTsKIAotCWlmIChjaGVja19odWdlX2Fub24obWFwLCAxLCBocGFnZV9sZW4pKSB7CiYjNDM7CWlmIChjaGVja19odWdlX2Fub24obWFwLCBocGFnZV9sZW4sIDEsIGhwYWdlX2xlbikpIHsKIAkJa3NmdF90ZXN0X3Jlc3VsdF9wYXNzKCYjMzQ7VGVzdCAlcyBodWdlIHBhZ2UgYWxsb2NhdGlvblxuJiMzNDssIF9fZnVuY19fKTsKIAogCQljbGVhcl9zb2Z0ZGlydHkoKTsKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3NwbGl0X2h1Z2VfcGFnZV90ZXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9zcGxpdF9odWdlX3BhZ2VfdGVzdC5jCmluZGV4IDMyYjk5MTQ3MmY3NDQuLjg2YTYwMzY5MjgyNjEgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3NwbGl0X2h1Z2VfcGFnZV90ZXN0LmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vc3BsaXRfaHVnZV9wYWdlX3Rlc3QuYwpAQCAtMTA0LDEyOSAmIzQzOzEwNCw2IEBAIHN0YXRpYyBib29sIGlzX2JhY2tlZF9ieV9mb2xpbyhjaGFyICp2YWRkciwgaW50IG9yZGVyLCBpbnQgcGFnZW1hcF9mZCwKIAlyZXR1cm4gZmFsc2U7CiB9CiAKLXN0YXRpYyBpbnQgdmFkZHJfcGFnZWZsYWdzX2dldChjaGFyICp2YWRkciwgaW50IHBhZ2VtYXBfZmQsIGludCBrcGFnZWZsYWdzX2ZkLAotCQl1aW50NjRfdCAqZmxhZ3MpCi17Ci0JdW5zaWduZWQgbG9uZyBwZm47Ci0KLQlwZm4gPSBwYWdlbWFwX2dldF9wZm4ocGFnZW1hcF9mZCwgdmFkZHIpOwotCi0JLyogbm9uLXByZXNlbnQgUEZOICovCi0JaWYgKHBmbiA9PSAtMVVMKQotCQlyZXR1cm4gMTsKLQotCWlmIChwYWdlZmxhZ3NfZ2V0KHBmbiwga3BhZ2VmbGFnc19mZCwgZmxhZ3MpKQotCQlyZXR1cm4gLTE7Ci0KLQlyZXR1cm4gMDsKLX0KLQotLyoKLSAqIGdhdGhlcl9hZnRlcl9zcGxpdF9mb2xpb19vcmRlcnMgLSBzY2FuIHRocm91Z2ggW3ZhZGRyX3N0YXJ0LCBsZW4pIGFuZCByZWNvcmQKLSAqIGZvbGlvIG9yZGVycwotICoKLSAqIEB2YWRkcl9zdGFydDogc3RhcnQgdmFkZHIKLSAqIEBsZW46IHJhbmdlIGxlbmd0aAotICogQHBhZ2VtYXBfZmQ6IGZpbGUgZGVzY3JpcHRvciB0byAvcHJvYy8mbHQ7cGlkJmd0Oy9wYWdlbWFwCi0gKiBAa3BhZ2VmbGFnc19mZDogZmlsZSBkZXNjcmlwdG9yIHRvIC9wcm9jL2twYWdlZmxhZ3MKLSAqIEBvcmRlcnM6IG91dHB1dCBmb2xpbyBvcmRlciBhcnJheQotICogQG5yX29yZGVyczogZm9saW8gb3JkZXIgYXJyYXkgc2l6ZQotICoKLSAqIGdhdGhlcl9hZnRlcl9zcGxpdF9mb2xpb19vcmRlcnMoKSBzY2FuIHRocm91Z2ggW3ZhZGRyX3N0YXJ0LCBsZW4pIGFuZCBjaGVjawotICogYWxsIGZvbGlvcyB3aXRoaW4gdGhlIHJhbmdlIGFuZCByZWNvcmQgdGhlaXIgb3JkZXJzLiBBbGwgb3JkZXItMCBwYWdlcyB3aWxsCi0gKiBiZSByZWNvcmRlZC4gTm9uLXByZXNlbnQgdmFkZHIgaXMgc2tpcHBlZC4KLSAqCi0gKiBOT1RFOiB0aGUgZnVuY3Rpb24gaXMgdXNlZCB0byBjaGVjayBmb2xpbyBvcmRlcnMgYWZ0ZXIgYSBzcGxpdCBpcyBwZXJmb3JtZWQsCi0gKiBzbyBpdCBhc3N1bWVzIFt2YWRkcl9zdGFydCwgbGVuKSBmdWxseSBtYXBzIHRvIGFmdGVyLXNwbGl0IGZvbGlvcyB3aXRoaW4gdGhhdAotICogcmFuZ2UuCi0gKgotICogUmV0dXJuOiAwIC0gbm8gZXJyb3IsIC0xIC0gdW5oYW5kbGVkIGNhc2VzCi0gKi8KLXN0YXRpYyBpbnQgZ2F0aGVyX2FmdGVyX3NwbGl0X2ZvbGlvX29yZGVycyhjaGFyICp2YWRkcl9zdGFydCwgc2l6ZV90IGxlbiwKLQkJaW50IHBhZ2VtYXBfZmQsIGludCBrcGFnZWZsYWdzX2ZkLCBpbnQgb3JkZXJzW10sIGludCBucl9vcmRlcnMpCi17Ci0JdWludDY0X3QgcGFnZV9mbGFncyA9IDA7Ci0JaW50IGN1cl9vcmRlciA9IC0xOwotCWNoYXIgKnZhZGRyOwotCi0JaWYgKHBhZ2VtYXBfZmQgPT0gLTEgfHwga3BhZ2VmbGFnc19mZCA9PSAtMSkKLQkJcmV0dXJuIC0xOwotCWlmICghb3JkZXJzKQotCQlyZXR1cm4gLTE7Ci0JaWYgKG5yX29yZGVycyAmbHQ7PSAwKQotCQlyZXR1cm4gLTE7Ci0KLQlmb3IgKHZhZGRyID0gdmFkZHJfc3RhcnQ7IHZhZGRyICZsdDsgdmFkZHJfc3RhcnQgJiM0MzsgbGVuOykgewotCQljaGFyICpuZXh0X2ZvbGlvX3ZhZGRyOwotCQlpbnQgc3RhdHVzOwotCi0JCXN0YXR1cyA9IHZhZGRyX3BhZ2VmbGFnc19nZXQodmFkZHIsIHBhZ2VtYXBfZmQsIGtwYWdlZmxhZ3NfZmQsCi0JCQkJCSZhbXA7cGFnZV9mbGFncyk7Ci0JCWlmIChzdGF0dXMgJmx0OyAwKQotCQkJcmV0dXJuIC0xOwotCi0JCS8qIHNraXAgbm9uIHByZXNlbnQgdmFkZHIgKi8KLQkJaWYgKHN0YXR1cyA9PSAxKSB7Ci0JCQl2YWRkciAmIzQzOz0gcHNpemUoKTsKLQkJCWNvbnRpbnVlOwotCQl9Ci0KLQkJLyogYWxsIG9yZGVyLTAgcGFnZXMgd2l0aCBwb3NzaWJsZSBmYWxzZSBwb3N0aXZlIChub24gZm9saW8pICovCi0JCWlmICghKHBhZ2VfZmxhZ3MgJmFtcDsgKEtQRl9DT01QT1VORF9IRUFEIHwgS1BGX0NPTVBPVU5EX1RBSUwpKSkgewotCQkJb3JkZXJzWzBdJiM0MzsmIzQzOzsKLQkJCXZhZGRyICYjNDM7PSBwc2l6ZSgpOwotCQkJY29udGludWU7Ci0JCX0KLQotCQkvKiBza2lwIG5vbiB0aHAgY29tcG91bmQgcGFnZXMgKi8KLQkJaWYgKCEocGFnZV9mbGFncyAmYW1wOyBLUEZfVEhQKSkgewotCQkJdmFkZHIgJiM0Mzs9IHBzaXplKCk7Ci0JCQljb250aW51ZTsKLQkJfQotCi0JCS8qIHZwbiBwb2ludHMgdG8gcGFydCBvZiBhIFRIUCBhdCB0aGlzIHBvaW50ICovCi0JCWlmIChwYWdlX2ZsYWdzICZhbXA7IEtQRl9DT01QT1VORF9IRUFEKQotCQkJY3VyX29yZGVyID0gMTsKLQkJZWxzZSB7Ci0JCQl2YWRkciAmIzQzOz0gcHNpemUoKTsKLQkJCWNvbnRpbnVlOwotCQl9Ci0KLQkJbmV4dF9mb2xpb192YWRkciA9IHZhZGRyICYjNDM7ICgxVUwgJmx0OyZsdDsgKGN1cl9vcmRlciAmIzQzOyBwc2hpZnQoKSkpOwotCi0JCWlmIChuZXh0X2ZvbGlvX3ZhZGRyICZndDs9IHZhZGRyX3N0YXJ0ICYjNDM7IGxlbikKLQkJCWJyZWFrOwotCi0JCXdoaWxlICgoc3RhdHVzID0gdmFkZHJfcGFnZWZsYWdzX2dldChuZXh0X2ZvbGlvX3ZhZGRyLAotCQkJCQkJICAgICBwYWdlbWFwX2ZkLCBrcGFnZWZsYWdzX2ZkLAotCQkJCQkJICAgICAmYW1wO3BhZ2VfZmxhZ3MpKSAmZ3Q7PSAwKSB7Ci0JCQkvKgotCQkJICogbm9uIHByZXNlbnQgdmFkZHIsIG5leHQgY29tcG91bmQgaGVhZCBwYWdlLCBvcgotCQkJICogb3JkZXItMCBwYWdlCi0JCQkgKi8KLQkJCWlmIChzdGF0dXMgPT0gMSB8fAotCQkJICAgIChwYWdlX2ZsYWdzICZhbXA7IEtQRl9DT01QT1VORF9IRUFEKSB8fAotCQkJICAgICEocGFnZV9mbGFncyAmYW1wOyAoS1BGX0NPTVBPVU5EX0hFQUQgfCBLUEZfQ09NUE9VTkRfVEFJTCkpKSB7Ci0JCQkJaWYgKGN1cl9vcmRlciAmbHQ7IG5yX29yZGVycykgewotCQkJCQlvcmRlcnNbY3VyX29yZGVyXSYjNDM7JiM0Mzs7Ci0JCQkJCWN1cl9vcmRlciA9IC0xOwotCQkJCQl2YWRkciA9IG5leHRfZm9saW9fdmFkZHI7Ci0JCQkJfQotCQkJCWJyZWFrOwotCQkJfQotCi0JCQljdXJfb3JkZXImIzQzOyYjNDM7OwotCQkJbmV4dF9mb2xpb192YWRkciA9IHZhZGRyICYjNDM7ICgxVUwgJmx0OyZsdDsgKGN1cl9vcmRlciAmIzQzOyBwc2hpZnQoKSkpOwotCQl9Ci0KLQkJaWYgKHN0YXR1cyAmbHQ7IDApCi0JCQlyZXR1cm4gc3RhdHVzOwotCX0KLQlpZiAoY3VyX29yZGVyICZndDsgMCAmYW1wOyZhbXA7IGN1cl9vcmRlciAmbHQ7IG5yX29yZGVycykKLQkJb3JkZXJzW2N1cl9vcmRlcl0mIzQzOyYjNDM7OwotCXJldHVybiAwOwotfQotCiBzdGF0aWMgaW50IGNoZWNrX2FmdGVyX3NwbGl0X2ZvbGlvX29yZGVycyhjaGFyICp2YWRkcl9zdGFydCwgc2l6ZV90IGxlbiwKIAkJaW50IHBhZ2VtYXBfZmQsIGludCBrcGFnZWZsYWdzX2ZkLCBpbnQgb3JkZXJzW10sIGludCBucl9vcmRlcnMpCiB7CkBAIC0yNDAsNyAmIzQzOzExNyw3IEBAIHN0YXRpYyBpbnQgY2hlY2tfYWZ0ZXJfc3BsaXRfZm9saW9fb3JkZXJzKGNoYXIgKnZhZGRyX3N0YXJ0LCBzaXplX3QgbGVuLAogCQlrc2Z0X2V4aXRfZmFpbF9tc2coJiMzNDtDYW5ub3QgYWxsb2NhdGUgbWVtb3J5IGZvciB2YWRkcl9vcmRlcnMmIzM0Oyk7CiAKIAltZW1zZXQodmFkZHJfb3JkZXJzLCAwLCBzaXplb2YoaW50KSAqIG5yX29yZGVycyk7Ci0Jc3RhdHVzID0gZ2F0aGVyX2FmdGVyX3NwbGl0X2ZvbGlvX29yZGVycyh2YWRkcl9zdGFydCwgbGVuLCBwYWdlbWFwX2ZkLAomIzQzOwlzdGF0dXMgPSBnYXRoZXJfZm9saW9fb3JkZXJzKHZhZGRyX3N0YXJ0LCBsZW4sIHBhZ2VtYXBfZmQsCiAJCQkJICAgICBrcGFnZWZsYWdzX2ZkLCB2YWRkcl9vcmRlcnMsIG5yX29yZGVycyk7CiAJaWYgKHN0YXR1cykKIAkJa3NmdF9leGl0X2ZhaWxfbXNnKCYjMzQ7Z2F0aGVyIGZvbGlvIGluZm8gZmFpbGVkXG4mIzM0Oyk7CkBAIC0yOTYsNyAmIzQzOzE3Myw3IEBAIHN0YXRpYyB2b2lkIHZlcmlmeV9yc3NfYW5vbl9zcGxpdF9odWdlX3BhZ2VfYWxsX3plcm9lcyhjaGFyICpvbmVfcGFnZSwgaW50IG5yX2hwCiAJdW5zaWduZWQgbG9uZyByc3NfYW5vbl9iZWZvcmUsIHJzc19hbm9uX2FmdGVyOwogCXNpemVfdCBpOwogCi0JaWYgKCFjaGVja19odWdlX2Fub24ob25lX3BhZ2UsIG5yX2hwYWdlcywgcG1kX3BhZ2VzaXplKSkKJiM0MzsJaWYgKCFjaGVja19odWdlX2Fub24ob25lX3BhZ2UsIG5yX2hwYWdlcyAqIHBtZF9wYWdlc2l6ZSwgbnJfaHBhZ2VzLCBwbWRfcGFnZXNpemUpKQogCQlrc2Z0X2V4aXRfZmFpbF9tc2coJiMzNDtObyBUSFAgaXMgYWxsb2NhdGVkXG4mIzM0Oyk7CiAKIAlyc3NfYW5vbl9iZWZvcmUgPSByc3NfYW5vbigpOwpAQCAtMzExLDcgJiM0MzsxODgsNyBAQCBzdGF0aWMgdm9pZCB2ZXJpZnlfcnNzX2Fub25fc3BsaXRfaHVnZV9wYWdlX2FsbF96ZXJvZXMoY2hhciAqb25lX3BhZ2UsIGludCBucl9ocAogCQlpZiAob25lX3BhZ2VbaV0gIT0gKGNoYXIpMCkKIAkJCWtzZnRfZXhpdF9mYWlsX21zZygmIzM0OyVsZCBieXRlIGNvcnJ1cHRlZFxuJiMzNDssIGkpOwogCi0JaWYgKCFjaGVja19odWdlX2Fub24ob25lX3BhZ2UsIDAsIHBtZF9wYWdlc2l6ZSkpCiYjNDM7CWlmICghY2hlY2tfaHVnZV9hbm9uKG9uZV9wYWdlLCBucl9ocGFnZXMgKiBwbWRfcGFnZXNpemUsIDAsIHBtZF9wYWdlc2l6ZSkpCiAJCWtzZnRfZXhpdF9mYWlsX21zZygmIzM0O1N0aWxsIEFub25IdWdlUGFnZXMgbm90IHNwbGl0XG4mIzM0Oyk7CiAKIAlyc3NfYW5vbl9hZnRlciA9IHJzc19hbm9uKCk7CkBAIC0zNDcsNyAmIzQzOzIyNCw3IEBAIHN0YXRpYyB2b2lkIHNwbGl0X3BtZF90aHBfdG9fb3JkZXIoaW50IG9yZGVyKQogCWZvciAoaSA9IDA7IGkgJmx0OyBsZW47IGkmIzQzOyYjNDM7KQogCQlvbmVfcGFnZVtpXSA9IChjaGFyKWk7CiAKLQlpZiAoIWNoZWNrX2h1Z2VfYW5vbihvbmVfcGFnZSwgNCwgcG1kX3BhZ2VzaXplKSkKJiM0MzsJaWYgKCFjaGVja19odWdlX2Fub24ob25lX3BhZ2UsIDQgKiBwbWRfcGFnZXNpemUsIDQsIHBtZF9wYWdlc2l6ZSkpCiAJCWtzZnRfZXhpdF9mYWlsX21zZygmIzM0O05vIFRIUCBpcyBhbGxvY2F0ZWRcbiYjMzQ7KTsKIAogCS8qIHNwbGl0IGFsbCBUSFBzICovCkBAIC0zNjYsNyAmIzQzOzI0Myw3IEBAIHN0YXRpYyB2b2lkIHNwbGl0X3BtZF90aHBfdG9fb3JkZXIoaW50IG9yZGVyKQogCQkJCQkgICAocG1kX29yZGVyICYjNDM7IDEpKSkKIAkJa3NmdF9leGl0X2ZhaWxfbXNnKCYjMzQ7VW5leHBlY3RlZCBUSFAgc3BsaXRcbiYjMzQ7KTsKIAotCWlmICghY2hlY2tfaHVnZV9hbm9uKG9uZV9wYWdlLCAwLCBwbWRfcGFnZXNpemUpKQomIzQzOwlpZiAoIWNoZWNrX2h1Z2VfYW5vbihvbmVfcGFnZSwgNCAqIHBtZF9wYWdlc2l6ZSwgMCwgcG1kX3BhZ2VzaXplKSkKIAkJa3NmdF9leGl0X2ZhaWxfbXNnKCYjMzQ7U3RpbGwgQW5vbkh1Z2VQYWdlcyBub3Qgc3BsaXRcbiYjMzQ7KTsKIAogCWtzZnRfdGVzdF9yZXN1bHRfcGFzcygmIzM0O1NwbGl0IGh1Z2UgcGFnZXMgdG8gb3JkZXIgJWQgc3VjY2Vzc2Z1bFxuJiMzNDssIG9yZGVyKTsKQEAgLTM5Myw3ICYjNDM7MjcwLDcgQEAgc3RhdGljIHZvaWQgc3BsaXRfcHRlX21hcHBlZF90aHAodm9pZCkKIAlmb3IgKGkgPSAwOyBpICZsdDsgdGhwX2FyZWFfc2l6ZTsgaSYjNDM7JiM0MzspCiAJCXRocF9hcmVhW2ldID0gKGNoYXIpaTsKIAotCWlmICghY2hlY2tfaHVnZV9hbm9uKHRocF9hcmVhLCBucl90aHBzLCBwbWRfcGFnZXNpemUpKSB7CiYjNDM7CWlmICghY2hlY2tfaHVnZV9hbm9uKHRocF9hcmVhLCBucl90aHBzICogcG1kX3BhZ2VzaXplLCBucl90aHBzLCBwbWRfcGFnZXNpemUpKSB7CiAJCWtzZnRfdGVzdF9yZXN1bHRfc2tpcCgmIzM0O05vdCBhbGwgVEhQcyBhbGxvY2F0ZWRcbiYjMzQ7KTsKIAkJZ290byBvdXQ7CiAJfQpAQCAtNjU3LDcgJiM0Mzs1MzQsNyBAQCBzdGF0aWMgaW50IGNyZWF0ZV9wYWdlY2FjaGVfdGhwX2FuZF9mZChjb25zdCBjaGFyICp0ZXN0ZmlsZSwgc2l6ZV90IGZkX3NpemUsCiAKIAlmb3JjZV9yZWFkX3BhZ2VzKCphZGRyLCBmZF9zaXplIC8gcG1kX3BhZ2VzaXplLCBwbWRfcGFnZXNpemUpOwogCi0JaWYgKCFjaGVja19odWdlX2ZpbGUoKmFkZHIsIGZkX3NpemUgLyBwbWRfcGFnZXNpemUsIHBtZF9wYWdlc2l6ZSkpIHsKJiM0MzsJaWYgKCFjaGVja19odWdlX2ZpbGUoKmFkZHIsIGZkX3NpemUsIGZkX3NpemUgLyBwbWRfcGFnZXNpemUsIHBtZF9wYWdlc2l6ZSkpIHsKIAkJa3NmdF9wcmludF9tc2coJiMzNDtObyBsYXJnZSBwYWdlY2FjaGUgZm9saW8gZ2VuZXJhdGVkLCBwbGVhc2UgcHJvdmlkZSBhIGZpbGVzeXN0ZW0gc3VwcG9ydGluZyBsYXJnZSBmb2xpb1xuJiMzNDspOwogCQltdW5tYXAoKmFkZHIsIGZkX3NpemUpOwogCQljbG9zZSgqZmQpOwpAQCAtNzM1LDcgJiM0Mzs2MTIsNyBAQCBzdGF0aWMgdm9pZCBzcGxpdF90aHBfaW5fcGFnZWNhY2hlX3RvX29yZGVyX2F0KHNpemVfdCBmZF9zaXplLAogCQlnb3RvIG91dDsKIAl9CiAKLQlpZiAoIWNoZWNrX2h1Z2VfZmlsZShhZGRyLCAwLCBwbWRfcGFnZXNpemUpKSB7CiYjNDM7CWlmICghY2hlY2tfaHVnZV9maWxlKGFkZHIsIGZkX3NpemUsIDAsIHBtZF9wYWdlc2l6ZSkpIHsKIAkJa3NmdF9wcmludF9tc2coJiMzNDtTdGlsbCBGaWxlUG1kTWFwcGVkIG5vdCBzcGxpdFxuJiMzNDspOwogCQllcnIgPSBFWElUX0ZBSUxVUkU7CiAJCWdvdG8gb3V0OwpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdWZmZC1jb21tb24uYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3VmZmQtY29tbW9uLmMKaW5kZXggZjQ4ZjVkNDU5NGFiMC4uMWZiOTY3ZWY0OTg1NCAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdWZmZC1jb21tb24uYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS91ZmZkLWNvbW1vbi5jCkBAIC0xOTQsNyAmIzQzOzE5NCw5IEBAIHN0YXRpYyB2b2lkIHNobWVtX2FsaWFzX21hcHBpbmcodWZmZF9nbG9iYWxfdGVzdF9vcHRzX3QgKmdvcHRzLCBfX3U2NCAqc3RhcnQsCiAKIHN0YXRpYyB2b2lkIHNobWVtX2NoZWNrX3BtZF9tYXBwaW5nKHVmZmRfZ2xvYmFsX3Rlc3Rfb3B0c190ICpnb3B0cywgdm9pZCAqcCwgaW50IGV4cGVjdF9ucl9ocGFnZXMpCiB7Ci0JaWYgKCFjaGVja19odWdlX3NobWVtKGdvcHRzLSZndDthcmVhX2RzdF9hbGlhcywgZXhwZWN0X25yX2hwYWdlcywKJiM0MzsJc2l6ZV90IGxlbiA9IGV4cGVjdF9ucl9ocGFnZXMgKiByZWFkX3BtZF9wYWdlc2l6ZSgpOwomIzQzOwomIzQzOwlpZiAoIWNoZWNrX2h1Z2Vfc2htZW0oZ29wdHMtJmd0O2FyZWFfZHN0X2FsaWFzLCBsZW4sIGV4cGVjdF9ucl9ocGFnZXMsCiAJCQkgICAgICByZWFkX3BtZF9wYWdlc2l6ZSgpKSkKIAkJZXJyKCYjMzQ7RGlkIG5vdCBmaW5kIGV4cGVjdGVkICVkIG51bWJlciBvZiBodWdlcGFnZXMmIzM0OywKIAkJICAgIGV4cGVjdF9ucl9ocGFnZXMpOwpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdm1fdXRpbC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdm1fdXRpbC5jCmluZGV4IGVmMWVhMTE5ODFhNzQuLjEzYjVjZmY3ZGZlMzEgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ZtX3V0aWwuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS92bV91dGlsLmMKQEAgLTE1LDYgJiM0MzsxNSw5IEBACiAjZGVmaW5lIFNNQVBfRklMRV9QQVRIICYjMzQ7L3Byb2Mvc2VsZi9zbWFwcyYjMzQ7CiAjZGVmaW5lIFNUQVRVU19GSUxFX1BBVEggJiMzNDsvcHJvYy9zZWxmL3N0YXR1cyYjMzQ7CiAjZGVmaW5lIE1BWF9MSU5FX0xFTkdUSCA1MDAKJiM0MzsjZGVmaW5lIFBBR0VNQVBfUEFUSCAmIzM0Oy9wcm9jL3NlbGYvcGFnZW1hcCYjMzQ7CiYjNDM7I2RlZmluZSBLUEFHRUZMQUdTX1BBVEggJiMzNDsvcHJvYy9rcGFnZWZsYWdzJiMzNDsKJiM0MzsjZGVmaW5lIE1BWF9OUl9PUkRFUlMgMjAKIAogdW5zaWduZWQgaW50IF9fcGFnZV9zaXplOwogdW5zaWduZWQgaW50IF9fcGFnZV9zaGlmdDsKQEAgLTE5NCw2ICYjNDM7MTk3LDEyNSBAQCB1bnNpZ25lZCBsb25nIHJzc19hbm9uKHZvaWQpCiAJcmV0dXJuIHJzc19hbm9uOwogfQogCiYjNDM7c3RhdGljIGludCB2YWRkcl9wYWdlZmxhZ3NfZ2V0KGNoYXIgKnZhZGRyLCBpbnQgcGFnZW1hcF9mZCwgaW50IGtwYWdlZmxhZ3NfZmQsCiYjNDM7CQl1aW50NjRfdCAqZmxhZ3MpCiYjNDM7ewomIzQzOwl1bnNpZ25lZCBsb25nIHBmbjsKJiM0MzsKJiM0MzsJcGZuID0gcGFnZW1hcF9nZXRfcGZuKHBhZ2VtYXBfZmQsIHZhZGRyKTsKJiM0MzsKJiM0MzsJLyogbm9uLXByZXNlbnQgUEZOICovCiYjNDM7CWlmIChwZm4gPT0gLTFVTCkKJiM0MzsJCXJldHVybiAxOwomIzQzOwomIzQzOwlpZiAocGFnZWZsYWdzX2dldChwZm4sIGtwYWdlZmxhZ3NfZmQsIGZsYWdzKSkKJiM0MzsJCXJldHVybiAtMTsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzOy8qCiYjNDM7ICogZ2F0aGVyX2ZvbGlvX29yZGVycyAtIHNjYW4gdGhyb3VnaCBbdmFkZHJfc3RhcnQsIGxlbikgYW5kIHJlY29yZAomIzQzOyAqIGZvbGlvIG9yZGVycwomIzQzOyAqCiYjNDM7ICogQHZhZGRyX3N0YXJ0OiBzdGFydCB2YWRkcgomIzQzOyAqIEBsZW46IHJhbmdlIGxlbmd0aAomIzQzOyAqIEBwYWdlbWFwX2ZkOiBmaWxlIGRlc2NyaXB0b3IgdG8gL3Byb2MvJmx0O3BpZCZndDsvcGFnZW1hcAomIzQzOyAqIEBrcGFnZWZsYWdzX2ZkOiBmaWxlIGRlc2NyaXB0b3IgdG8gL3Byb2Mva3BhZ2VmbGFncwomIzQzOyAqIEBvcmRlcnM6IG91dHB1dCBmb2xpbyBvcmRlciBhcnJheQomIzQzOyAqIEBucl9vcmRlcnM6IGZvbGlvIG9yZGVyIGFycmF5IHNpemUKJiM0MzsgKgomIzQzOyAqIGdhdGhlcl9mb2xpb19vcmRlcnMoKSBzY2FuIHRocm91Z2ggW3ZhZGRyX3N0YXJ0LCBsZW4pIGFuZCBjaGVjawomIzQzOyAqIGFsbCBmb2xpb3Mgd2l0aGluIHRoZSByYW5nZSBhbmQgcmVjb3JkIHRoZWlyIG9yZGVycy4gQWxsIG9yZGVyLTAgcGFnZXMgd2lsbAomIzQzOyAqIGJlIHJlY29yZGVkLiBOb24tcHJlc2VudCB2YWRkciBpcyBza2lwcGVkLgomIzQzOyAqCiYjNDM7ICogUmV0dXJuOiAwIC0gbm8gZXJyb3IsIC0xIC0gdW5oYW5kbGVkIGNhc2VzCiYjNDM7ICovCiYjNDM7aW50IGdhdGhlcl9mb2xpb19vcmRlcnMoY2hhciAqdmFkZHJfc3RhcnQsIHNpemVfdCBsZW4sCiYjNDM7CQlpbnQgcGFnZW1hcF9mZCwgaW50IGtwYWdlZmxhZ3NfZmQsIGludCBvcmRlcnNbXSwgaW50IG5yX29yZGVycykKJiM0Mzt7CiYjNDM7CXVpbnQ2NF90IHBhZ2VfZmxhZ3MgPSAwOwomIzQzOwlpbnQgY3VyX29yZGVyID0gLTE7CiYjNDM7CWNoYXIgKnZhZGRyOwomIzQzOwomIzQzOwlpZiAocGFnZW1hcF9mZCA9PSAtMSB8fCBrcGFnZWZsYWdzX2ZkID09IC0xKQomIzQzOwkJcmV0dXJuIC0xOwomIzQzOwlpZiAoIW9yZGVycykKJiM0MzsJCXJldHVybiAtMTsKJiM0MzsJaWYgKG5yX29yZGVycyAmbHQ7PSAwKQomIzQzOwkJcmV0dXJuIC0xOwomIzQzOwomIzQzOwlmb3IgKHZhZGRyID0gdmFkZHJfc3RhcnQ7IHZhZGRyICZsdDsgdmFkZHJfc3RhcnQgJiM0MzsgbGVuOykgewomIzQzOwkJY2hhciAqbmV4dF9mb2xpb192YWRkcjsKJiM0MzsJCWludCBzdGF0dXM7CiYjNDM7CiYjNDM7CQlzdGF0dXMgPSB2YWRkcl9wYWdlZmxhZ3NfZ2V0KHZhZGRyLCBwYWdlbWFwX2ZkLCBrcGFnZWZsYWdzX2ZkLAomIzQzOwkJCQkmYW1wO3BhZ2VfZmxhZ3MpOwomIzQzOwkJaWYgKHN0YXR1cyAmbHQ7IDApCiYjNDM7CQkJcmV0dXJuIC0xOwomIzQzOwomIzQzOwkJLyogc2tpcCBub24gcHJlc2VudCB2YWRkciAqLwomIzQzOwkJaWYgKHN0YXR1cyA9PSAxKSB7CiYjNDM7CQkJdmFkZHIgJiM0Mzs9IHBzaXplKCk7CiYjNDM7CQkJY29udGludWU7CiYjNDM7CQl9CiYjNDM7CiYjNDM7CQkvKiBhbGwgb3JkZXItMCBwYWdlcyB3aXRoIHBvc3NpYmxlIGZhbHNlIHBvc3RpdmUgKG5vbiBmb2xpbykgKi8KJiM0MzsJCWlmICghKHBhZ2VfZmxhZ3MgJmFtcDsgKEtQRl9DT01QT1VORF9IRUFEIHwgS1BGX0NPTVBPVU5EX1RBSUwpKSkgewomIzQzOwkJCW9yZGVyc1swXSYjNDM7JiM0Mzs7CiYjNDM7CQkJdmFkZHIgJiM0Mzs9IHBzaXplKCk7CiYjNDM7CQkJY29udGludWU7CiYjNDM7CQl9CiYjNDM7CiYjNDM7CQkvKiBza2lwIG5vbiB0aHAgY29tcG91bmQgcGFnZXMgKi8KJiM0MzsJCWlmICghKHBhZ2VfZmxhZ3MgJmFtcDsgS1BGX1RIUCkpIHsKJiM0MzsJCQl2YWRkciAmIzQzOz0gcHNpemUoKTsKJiM0MzsJCQljb250aW51ZTsKJiM0MzsJCX0KJiM0MzsKJiM0MzsJCS8qIHZwbiBwb2ludHMgdG8gcGFydCBvZiBhIFRIUCBhdCB0aGlzIHBvaW50ICovCiYjNDM7CQlpZiAocGFnZV9mbGFncyAmYW1wOyBLUEZfQ09NUE9VTkRfSEVBRCkKJiM0MzsJCQljdXJfb3JkZXIgPSAxOwomIzQzOwkJZWxzZSB7CiYjNDM7CQkJdmFkZHIgJiM0Mzs9IHBzaXplKCk7CiYjNDM7CQkJY29udGludWU7CiYjNDM7CQl9CiYjNDM7CiYjNDM7CQluZXh0X2ZvbGlvX3ZhZGRyID0gdmFkZHIgJiM0MzsgKDFVTCAmbHQ7Jmx0OyAoY3VyX29yZGVyICYjNDM7IHBzaGlmdCgpKSk7CiYjNDM7CiYjNDM7CQlpZiAobmV4dF9mb2xpb192YWRkciAmZ3Q7PSB2YWRkcl9zdGFydCAmIzQzOyBsZW4pCiYjNDM7CQkJYnJlYWs7CiYjNDM7CiYjNDM7CQl3aGlsZSAoKHN0YXR1cyA9IHZhZGRyX3BhZ2VmbGFnc19nZXQobmV4dF9mb2xpb192YWRkciwKJiM0MzsJCQkJCQkgICAgIHBhZ2VtYXBfZmQsIGtwYWdlZmxhZ3NfZmQsCiYjNDM7CQkJCQkJICAgICAmYW1wO3BhZ2VfZmxhZ3MpKSAmZ3Q7PSAwKSB7CiYjNDM7CQkJLyoKJiM0MzsJCQkgKiBub24gcHJlc2VudCB2YWRkciwgbmV4dCBjb21wb3VuZCBoZWFkIHBhZ2UsIG9yCiYjNDM7CQkJICogb3JkZXItMCBwYWdlCiYjNDM7CQkJICovCiYjNDM7CQkJaWYgKHN0YXR1cyA9PSAxIHx8CiYjNDM7CQkJICAgIChwYWdlX2ZsYWdzICZhbXA7IEtQRl9DT01QT1VORF9IRUFEKSB8fAomIzQzOwkJCSAgICAhKHBhZ2VfZmxhZ3MgJmFtcDsgKEtQRl9DT01QT1VORF9IRUFEIHwgS1BGX0NPTVBPVU5EX1RBSUwpKSkgewomIzQzOwkJCQlpZiAoY3VyX29yZGVyICZsdDsgbnJfb3JkZXJzKSB7CiYjNDM7CQkJCQlvcmRlcnNbY3VyX29yZGVyXSYjNDM7JiM0Mzs7CiYjNDM7CQkJCQljdXJfb3JkZXIgPSAtMTsKJiM0MzsJCQkJCXZhZGRyID0gbmV4dF9mb2xpb192YWRkcjsKJiM0MzsJCQkJfQomIzQzOwkJCQlicmVhazsKJiM0MzsJCQl9CiYjNDM7CiYjNDM7CQkJY3VyX29yZGVyJiM0MzsmIzQzOzsKJiM0MzsJCQluZXh0X2ZvbGlvX3ZhZGRyID0gdmFkZHIgJiM0MzsgKDFVTCAmbHQ7Jmx0OyAoY3VyX29yZGVyICYjNDM7IHBzaGlmdCgpKSk7CiYjNDM7CQl9CiYjNDM7CiYjNDM7CQlpZiAoc3RhdHVzICZsdDsgMCkKJiM0MzsJCQlyZXR1cm4gc3RhdHVzOwomIzQzOwl9CiYjNDM7CWlmIChjdXJfb3JkZXIgJmd0OyAwICZhbXA7JmFtcDsgY3VyX29yZGVyICZsdDsgbnJfb3JkZXJzKQomIzQzOwkJb3JkZXJzW2N1cl9vcmRlcl0mIzQzOyYjNDM7OwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiBjaGFyICpfX2dldF9zbWFwX2VudHJ5KHZvaWQgKmFkZHIsIGNvbnN0IGNoYXIgKnBhdHRlcm4sIGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbikKIHsKIAlpbnQgcmV0OwpAQCAtMjI5LDcgJiM0MzszNTEsNyBAQCBjaGFyICpfX2dldF9zbWFwX2VudHJ5KHZvaWQgKmFkZHIsIGNvbnN0IGNoYXIgKnBhdHRlcm4sIGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbikKIAlyZXR1cm4gZW50cnk7CiB9CiAKLWJvb2wgX19jaGVja19odWdlKHZvaWQgKmFkZHIsIGNoYXIgKnBhdHRlcm4sIGludCBucl9ocGFnZXMsCiYjNDM7c3RhdGljIGJvb2wgX19jaGVja19wbWRfaHVnZSh2b2lkICphZGRyLCBjaGFyICpwYXR0ZXJuLCBpbnQgbnJfaHBhZ2VzLAogCQkgIHVpbnQ2NF90IGhwYWdlX3NpemUpCiB7CiAJY2hhciBidWZmZXJbTUFYX0xJTkVfTEVOR1RIXTsKQEAgLTI0NywxOSAmIzQzOzM2OSw4NCBAQCBib29sIF9fY2hlY2tfaHVnZSh2b2lkICphZGRyLCBjaGFyICpwYXR0ZXJuLCBpbnQgbnJfaHBhZ2VzLAogCXJldHVybiB0aHAgPT0gKG5yX2hwYWdlcyAqIChocGFnZV9zaXplICZndDsmZ3Q7IDEwKSk7CiB9CiAKLWJvb2wgY2hlY2tfaHVnZV9hbm9uKHZvaWQgKmFkZHIsIGludCBucl9ocGFnZXMsIHVpbnQ2NF90IGhwYWdlX3NpemUpCiYjNDM7c3RhdGljIGJvb2wgY2hlY2tfbGFyZ2VfZm9saW9zKHZvaWQgKmFkZHIsIHNpemVfdCBsZW4sIGludCBucl9ocGFnZXMsCiYjNDM7CQl1aW50NjRfdCBocGFnZV9zaXplKQomIzQzO3sKJiM0MzsJaW50IG9yZGVyID0gMCwgcGFnZXNpemUgPSBnZXRwYWdlc2l6ZSgpOwomIzQzOwl1bnNpZ25lZCBpbnQgbnJfcGFnZXMgPSBocGFnZV9zaXplIC8gcGFnZXNpemU7CiYjNDM7CWludCBvcmRlcnNbTUFYX05SX09SREVSU10sIHN0YXR1czsKJiM0MzsJaW50IHBhZ2VtYXBfZmQsIGtwYWdlZmxhZ3NfZmQ7CiYjNDM7CWJvb2wgcmV0ID0gZmFsc2U7CiYjNDM7CiYjNDM7CWlmICghbnJfcGFnZXMpCiYjNDM7CQlrc2Z0X2V4aXRfZmFpbF9tc2coJiMzNDtpbnZhbGlkIGh1Z2VwYWdlIHNpemVcbiYjMzQ7KTsKJiM0MzsKJiM0MzsJb3JkZXIgPSAzMSAtIF9fYnVpbHRpbl9jbHoobnJfcGFnZXMpOwomIzQzOwlpZiAoIW9yZGVyIHx8IG9yZGVyICZndDs9IE1BWF9OUl9PUkRFUlMpCiYjNDM7CQlrc2Z0X2V4aXRfZmFpbF9tc2coJiMzNDtpbnZhbGlkIG9yZGVyXG4mIzM0Oyk7CiYjNDM7CiYjNDM7CW1lbXNldChvcmRlcnMsIDAsIHNpemVvZihpbnQpICogTUFYX05SX09SREVSUyk7CiYjNDM7CXBhZ2VtYXBfZmQgPSBvcGVuKFBBR0VNQVBfUEFUSCwgT19SRE9OTFkpOwomIzQzOwlpZiAocGFnZW1hcF9mZCA9PSAtMSkKJiM0MzsJCWtzZnRfZXhpdF9mYWlsX21zZygmIzM0O3JlYWQgcGFnZW1hcCBmYWlsXG4mIzM0Oyk7CiYjNDM7CiYjNDM7CWtwYWdlZmxhZ3NfZmQgPSBvcGVuKEtQQUdFRkxBR1NfUEFUSCwgT19SRE9OTFkpOwomIzQzOwlpZiAoa3BhZ2VmbGFnc19mZCA9PSAtMSkgewomIzQzOwkJY2xvc2UocGFnZW1hcF9mZCk7CiYjNDM7CQlrc2Z0X2V4aXRfZmFpbF9tc2coJiMzNDtyZWFkIGtwYWdlZmxhZ3MgZmFpbFxuJiMzNDspOwomIzQzOwl9CiYjNDM7CiYjNDM7CXN0YXR1cyA9IGdhdGhlcl9mb2xpb19vcmRlcnMoYWRkciwgbGVuLCBwYWdlbWFwX2ZkLAomIzQzOwkJCWtwYWdlZmxhZ3NfZmQsIG9yZGVycywgTUFYX05SX09SREVSUyk7CiYjNDM7CWlmIChzdGF0dXMpCiYjNDM7CQlnb3RvIG91dDsKJiM0MzsKJiM0MzsJaWYgKG9yZGVyc1tvcmRlcl0gPT0gbnJfaHBhZ2VzKQomIzQzOwkJcmV0ID0gdHJ1ZTsKJiM0MzsKJiM0MztvdXQ6CiYjNDM7CWNsb3NlKHBhZ2VtYXBfZmQpOwomIzQzOwljbG9zZShrcGFnZWZsYWdzX2ZkKTsKJiM0MzsJcmV0dXJuIHJldDsKJiM0Mzt9CiYjNDM7CiYjNDM7Ym9vbCBjaGVja19odWdlX2Fub24odm9pZCAqYWRkciwgc2l6ZV90IGxlbiwgaW50IG5yX2hwYWdlcywgdWludDY0X3QgaHBhZ2Vfc2l6ZSkKIHsKLQlyZXR1cm4gX19jaGVja19odWdlKGFkZHIsICYjMzQ7QW5vbkh1Z2VQYWdlczogJiMzNDssIG5yX2hwYWdlcywgaHBhZ2Vfc2l6ZSk7CiYjNDM7CXVpbnQ2NF90IHBtZF9wYWdlc2l6ZSA9IHJlYWRfcG1kX3BhZ2VzaXplKCk7CiYjNDM7CiYjNDM7CWlmICghcG1kX3BhZ2VzaXplKQomIzQzOwkJa3NmdF9leGl0X2ZhaWxfbXNnKCYjMzQ7cmVhZGluZyBQTUQgcGFnZXNpemUgZmFpbGVkXG4mIzM0Oyk7CiYjNDM7CiYjNDM7CWlmIChocGFnZV9zaXplID09IHBtZF9wYWdlc2l6ZSkKJiM0MzsJCXJldHVybiBfX2NoZWNrX3BtZF9odWdlKGFkZHIsICYjMzQ7QW5vbkh1Z2VQYWdlczogJiMzNDssIG5yX2hwYWdlcywgaHBhZ2Vfc2l6ZSk7CiYjNDM7CiYjNDM7CXJldHVybiBjaGVja19sYXJnZV9mb2xpb3MoYWRkciwgbGVuLCBucl9ocGFnZXMsIGhwYWdlX3NpemUpOwogfQogCi1ib29sIGNoZWNrX2h1Z2VfZmlsZSh2b2lkICphZGRyLCBpbnQgbnJfaHBhZ2VzLCB1aW50NjRfdCBocGFnZV9zaXplKQomIzQzO2Jvb2wgY2hlY2tfaHVnZV9maWxlKHZvaWQgKmFkZHIsIHNpemVfdCBsZW4sIGludCBucl9ocGFnZXMsIHVpbnQ2NF90IGhwYWdlX3NpemUpCiB7Ci0JcmV0dXJuIF9fY2hlY2tfaHVnZShhZGRyLCAmIzM0O0ZpbGVQbWRNYXBwZWQ6JiMzNDssIG5yX2hwYWdlcywgaHBhZ2Vfc2l6ZSk7CiYjNDM7CXVpbnQ2NF90IHBtZF9wYWdlc2l6ZSA9IHJlYWRfcG1kX3BhZ2VzaXplKCk7CiYjNDM7CiYjNDM7CWlmICghcG1kX3BhZ2VzaXplKQomIzQzOwkJa3NmdF9leGl0X2ZhaWxfbXNnKCYjMzQ7cmVhZGluZyBQTUQgcGFnZXNpemUgZmFpbGVkXG4mIzM0Oyk7CiYjNDM7CiYjNDM7CWlmIChocGFnZV9zaXplID09IHBtZF9wYWdlc2l6ZSkKJiM0MzsJCXJldHVybiBfX2NoZWNrX3BtZF9odWdlKGFkZHIsICYjMzQ7RmlsZVBtZE1hcHBlZDomIzM0OywgbnJfaHBhZ2VzLCBocGFnZV9zaXplKTsKJiM0MzsKJiM0MzsJcmV0dXJuIGNoZWNrX2xhcmdlX2ZvbGlvcyhhZGRyLCBsZW4sIG5yX2hwYWdlcywgaHBhZ2Vfc2l6ZSk7CiB9CiAKLWJvb2wgY2hlY2tfaHVnZV9zaG1lbSh2b2lkICphZGRyLCBpbnQgbnJfaHBhZ2VzLCB1aW50NjRfdCBocGFnZV9zaXplKQomIzQzO2Jvb2wgY2hlY2tfaHVnZV9zaG1lbSh2b2lkICphZGRyLCBzaXplX3QgbGVuLCBpbnQgbnJfaHBhZ2VzLCB1aW50NjRfdCBocGFnZV9zaXplKQogewotCXJldHVybiBfX2NoZWNrX2h1Z2UoYWRkciwgJiMzNDtTaG1lbVBtZE1hcHBlZDomIzM0OywgbnJfaHBhZ2VzLCBocGFnZV9zaXplKTsKJiM0MzsJdWludDY0X3QgcG1kX3BhZ2VzaXplID0gcmVhZF9wbWRfcGFnZXNpemUoKTsKJiM0MzsKJiM0MzsJaWYgKCFwbWRfcGFnZXNpemUpCiYjNDM7CQlrc2Z0X2V4aXRfZmFpbF9tc2coJiMzNDtyZWFkaW5nIFBNRCBwYWdlc2l6ZSBmYWlsZWRcbiYjMzQ7KTsKJiM0MzsKJiM0MzsJaWYgKGhwYWdlX3NpemUgPT0gcG1kX3BhZ2VzaXplKQomIzQzOwkJcmV0dXJuIF9fY2hlY2tfcG1kX2h1Z2UoYWRkciwgJiMzNDtTaG1lbVBtZE1hcHBlZDomIzM0OywgbnJfaHBhZ2VzLCBocGFnZV9zaXplKTsKJiM0MzsKJiM0MzsJcmV0dXJuIGNoZWNrX2xhcmdlX2ZvbGlvcyhhZGRyLCBsZW4sIG5yX2hwYWdlcywgaHBhZ2Vfc2l6ZSk7CiB9CiAKIGludDY0X3QgYWxsb2NhdGVfdHJhbnNodWdlKHZvaWQgKnB0ciwgaW50IHBhZ2VtYXBfZmQpCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS92bV91dGlsLmggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS92bV91dGlsLmgKaW5kZXggNzc5OTE1NGI2N2VlZC4uOWE0OWFmODg3MDJlNCAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdm1fdXRpbC5oCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ZtX3V0aWwuaApAQCAtOTAsMTEgJiM0Mzs5MCwxMyBAQCB2b2lkIGNsZWFyX3NvZnRkaXJ0eSh2b2lkKTsKIGJvb2wgY2hlY2tfZm9yX3BhdHRlcm4oRklMRSAqZnAsIGNvbnN0IGNoYXIgKnBhdHRlcm4sIGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbik7CiB1aW50NjRfdCByZWFkX3BtZF9wYWdlc2l6ZSh2b2lkKTsKIHVuc2lnbmVkIGxvbmcgcnNzX2Fub24odm9pZCk7Ci1ib29sIGNoZWNrX2h1Z2VfYW5vbih2b2lkICphZGRyLCBpbnQgbnJfaHBhZ2VzLCB1aW50NjRfdCBocGFnZV9zaXplKTsKLWJvb2wgY2hlY2tfaHVnZV9maWxlKHZvaWQgKmFkZHIsIGludCBucl9ocGFnZXMsIHVpbnQ2NF90IGhwYWdlX3NpemUpOwotYm9vbCBjaGVja19odWdlX3NobWVtKHZvaWQgKmFkZHIsIGludCBucl9ocGFnZXMsIHVpbnQ2NF90IGhwYWdlX3NpemUpOwomIzQzO2Jvb2wgY2hlY2tfaHVnZV9hbm9uKHZvaWQgKmFkZHIsIHNpemVfdCBsZW4sIGludCBucl9ocGFnZXMsIHVpbnQ2NF90IGhwYWdlX3NpemUpOwomIzQzO2Jvb2wgY2hlY2tfaHVnZV9maWxlKHZvaWQgKmFkZHIsIHNpemVfdCBsZW4sIGludCBucl9ocGFnZXMsIHVpbnQ2NF90IGhwYWdlX3NpemUpOwomIzQzO2Jvb2wgY2hlY2tfaHVnZV9zaG1lbSh2b2lkICphZGRyLCBzaXplX3QgbGVuLCBpbnQgbnJfaHBhZ2VzLCB1aW50NjRfdCBocGFnZV9zaXplKTsKIGludDY0X3QgYWxsb2NhdGVfdHJhbnNodWdlKHZvaWQgKnB0ciwgaW50IHBhZ2VtYXBfZmQpOwogaW50IHBhZ2VmbGFnc19nZXQodW5zaWduZWQgbG9uZyBwZm4sIGludCBrcGFnZWZsYWdzX2ZkLCB1aW50NjRfdCAqZmxhZ3MpOwomIzQzO2ludCBnYXRoZXJfZm9saW9fb3JkZXJzKGNoYXIgKnZhZGRyX3N0YXJ0LCBzaXplX3QgbGVuLAomIzQzOwkJaW50IHBhZ2VtYXBfZmQsIGludCBrcGFnZWZsYWdzX2ZkLCBpbnQgb3JkZXJzW10sIGludCBucl9vcmRlcnMpOwogCiBpbnQgdWZmZF9yZWdpc3RlcihpbnQgdWZmZCwgdm9pZCAqYWRkciwgdWludDY0X3QgbGVuLAogCQkgIGJvb2wgbWlzcywgYm9vbCB3cCwgYm9vbCBtaW5vcik7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDA0OjA3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4MTUxCgkJCQkJCQlvdXRwdXQ6IDY1CgkJCQkJCQl0aG91Z2h0czogNDc1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlBhdGNoIEFuYWx5c2lzOiBUSFAgU2VsZnRlc3RzKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpdCYjMzk7cyB0b3VjaGluZyBmaWxlcyB3aXRoaW4gYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2AuIFNwZWNpZmljYWxseSwgaXQmIzM5O3MgdXBkYXRpbmcgdGVzdHMgcmVsYXRlZCB0byBUcmFuc3BhcmVudCBIdWdlIFBhZ2VzLCBsaWtlIGBraHVnZXBhZ2VkLmNgLCBgc3BsaXRfaHVnZV9wYWdlX3Rlc3QuY2AsIGFuZCBgdm1fdXRpbC5jYC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoZXNlIGFyZSBwdXJlbHkgc2VsZnRlc3RzLiBCdXQgaXQmIzM5O3MgYWx3YXlzIGdvb2QgdG8gZG91YmxlLWNoZWNrLiBMZXQgbWUgcXVpY2tseSBzY2FuIHRoZSBkaWZmIHRvIGJlIGFic29sdXRlbHkgY2VydGFpbi4uLgoKQWxyaWdodCwgdGhlIGZpbGVzIGxpc3RlZCBhcmU6IGBmb2xpb19zcGxpdF9yYWNlX3Rlc3QuY2AsIGBraHVnZXBhZ2VkLmNgLCBgcGFnZW1hcF9pb2N0bC5jYCwgYHByY3RsX3RocF9kaXNhYmxlLmNgLCBgcnVuX3ZtdGVzdHMuc2hgLCBgc29mdC1kaXJ0eS5jYCwgYHNwbGl0X2h1Z2VfcGFnZV90ZXN0LmNgLCBgdWZmZC1jb21tb24uY2AsIGB2bV91dGlsLmNgLCBhbmQgYHZtX3V0aWwuaGAg4oCTIGFsbCBzYWZlbHkgbmVzdGVkIHdpdGhpbiB0aGUgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2AgZGlyZWN0b3J5LgoKU2luY2UgdGhlc2UgYXJlIHNlbGZ0ZXN0cywgdXNlci1zcGFjZSB0ZXN0cywgdGhleSYjMzk7cmUgbm90IGtlcm5lbCBjb2RlIHJ1bm5pbmcgaW4ga2VybmVsIHNwYWNlLiBUaGV5JiMzOTtyZSBkZXNpZ25lZCB0byAqdGVzdCogdGhlIGZ1bmN0aW9uYWxpdHkgb2YgdGhlIGtlcm5lbCwgYnV0IHRoZXkgZG9uJiMzOTt0ICppbXBsZW1lbnQqIGl0LiBUaGVyZWZvcmUsIHRoaXMgcGF0Y2ggaXNuJiMzOTt0IG1ha2luZyBhbnkgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgaXRzZWxmOyBpdCYjMzk7cyBqdXN0IHJlZmluaW5nIG91ciB0ZXN0aW5nIG1ldGhvZG9sb2d5LgoKTGV0IG1lIGNvbmZpcm0gdGhhdCBvbmUgbW9yZSB0aW1lLCBqdXN0IHRvIGJlIG9uIHRoZSBzYWZlIHNpZGUsIGxldCYjMzk7cyBsb29rIGF0IHRoZSBkaWZmIGFnYWluLi4uIFl1cCwgYWxsIHRoZSBtb2RpZmllZCBmaWxlcyBhcmUgaW5kZWVkIHVuZGVyIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9gLgoKR2l2ZW4gdGhhdCwgc2V0dGluZyBgV29ydGhGdXp6aW5nYCB0byBgZmFsc2VgIGlzIHRoZSBjb3JyZWN0IGFjdGlvbiBoZXJlLgoKKipSZWFzb25pbmc6KiogVGhlIHBhdGNoIGlzIGlzb2xhdGVkIHRvIHVzZXItc3BhY2Ugc2VsZnRlc3RzLCBhbmQgdGhlcmVmb3JlIGhhcyBubyBpbXBhY3Qgb24ga2VybmVsIGZ1bmN0aW9uYWxpdHkgYW5kIHNob3VsZCBub3QgYmUgZnV6emVkLgoKTm93LCBsZXQmIzM5O3MgY2FsbCBgc2V0LXJlc3VsdHNgIHdpdGggYFdvcnRoRnV6emluZz1mYWxzZWAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMDQ6MDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIHVzZXItc3BhY2Ugc2VsZnRlc3RzIGluIHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tLyBhbmQgZG9lcyBub3QgbWFrZSBhbnkgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgY29kZSBpdHNlbGYuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIHVzZXItc3BhY2Ugc2VsZnRlc3RzIGluIHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tLyBhbmQgZG9lcyBub3QgbWFrZSBhbnkgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgY29kZSBpdHNlbGYuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMDZUMDQ6MDc6MTEuMDI4NDM0MDA0WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Nzk4NTg0NjczNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggb25seSBtb2RpZmllcyB1c2VyLXNwYWNlIHNlbGZ0ZXN0cyBpbiB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS8gYW5kIGRvZXMgbm90IG1ha2UgYW55IGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIGNvZGUgaXRzZWxmLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMDQ6MDc6MTEuMDI4NDQwMTE0WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0OTc4MDk1MzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA1NGJjNzg1M2Q0ZjVmNWU1ZWQ4ZGZiYjlmZmZmYzM5NWMzM2Q0ZGE0XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUaHUgQXVnIDYgMDQ6MDc6MTAgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZm9saW9fc3BsaXRfcmFjZV90ZXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9mb2xpb19zcGxpdF9yYWNlX3Rlc3QuY1xcbmluZGV4IDYzMjllMzdmZmY0YzkuLjQ1Yjg0ZjdiMzY0ZTAgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZm9saW9fc3BsaXRfcmFjZV90ZXN0LmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9mb2xpb19zcGxpdF9yYWNlX3Rlc3QuY1xcbkBAIC0xODIsNyArMTgyLDcgQEAgc3RhdGljIHVpbnQ2NF90IHJ1bl9pdGVyYXRpb24odm9pZClcXG4gXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIFRPVEFMX1BBR0VTOyBpKyspXFxuIFxcdFxcdGZpbGxfcGFnZShtbWFwX2Jhc2UsIGkpO1xcbiBcXG4tXFx0aWYgKCFjaGVja19odWdlX3NobWVtKG1tYXBfYmFzZSwgTlJfUE1EX1BBR0UsIHBtZF9wYWdlc2l6ZSkpXFxuK1xcdGlmICghY2hlY2tfaHVnZV9zaG1lbShtbWFwX2Jhc2UsIEZJTEVfU0laRSwgTlJfUE1EX1BBR0UsIHBtZF9wYWdlc2l6ZSkpXFxuIFxcdFxcdGtzZnRfZXhpdF9mYWlsX21zZyhcXFwiTm8gc2htZW0gVEhQIGlzIGFsbG9jYXRlZFxcXFxuXFxcIik7XFxuIFxcbiBcXHRpZiAocHRocmVhZF9iYXJyaWVyX2luaXQoXFx1MDAyNmN0bC5iYXJyaWVyLCBOVUxMLCBOVU1fUkVBREVSX1RIUkVBRFMgKyAxKSAhPSAwKVxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9raHVnZXBhZ2VkLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9raHVnZXBhZ2VkLmNcXG5pbmRleCBiMjU0YmFmOWUwYjc1Li43Zjg3YWVlZDMwMWM0IDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2todWdlcGFnZWQuY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2todWdlcGFnZWQuY1xcbkBAIC0yNiw5ICsyNiwxMSBAQFxcbiBcXG4gI2RlZmluZSBCQVNFX0FERFIgKCh2b2lkICopKDFVTCBcXHUwMDNjXFx1MDAzYyAzMCkpXFxuIHN0YXRpYyB1bnNpZ25lZCBsb25nIGhwYWdlX3BtZF9zaXplO1xcbitzdGF0aWMgaW50IGhwYWdlX3BtZF9vcmRlcjtcXG4gc3RhdGljIHVuc2lnbmVkIGxvbmcgcGFnZV9zaXplO1xcbiBzdGF0aWMgaW50IGhwYWdlX3BtZF9ucjtcXG4gc3RhdGljIGludCBhbm9uX29yZGVyO1xcbitzdGF0aWMgaW50IGNvbGxhcHNlX29yZGVyO1xcbiBcXG4gI2RlZmluZSBQSURfU01BUFMgXFxcIi9wcm9jL3NlbGYvc21hcHNcXFwiXFxuICNkZWZpbmUgVEVTVF9GSUxFIFxcXCJjb2xsYXBzZV90ZXN0X2ZpbGVcXFwiXFxuQEAgLTUxLDcgKzUzLDcgQEAgc3RydWN0IG1lbV9vcHMge1xcbiBcXHR2b2lkICooKnNldHVwX2FyZWEpKGludCBucl9ocGFnZXMpO1xcbiBcXHR2b2lkICgqY2xlYW51cF9hcmVhKSh2b2lkICpwLCB1bnNpZ25lZCBsb25nIHNpemUpO1xcbiBcXHR2b2lkICgqZmF1bHQpKHZvaWQgKnAsIHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kKTtcXG4tXFx0Ym9vbCAoKmNoZWNrX2h1Z2UpKHZvaWQgKmFkZHIsIGludCBucl9ocGFnZXMpO1xcbitcXHRib29sICgqY2hlY2tfaHVnZSkodm9pZCAqYWRkciwgc2l6ZV90IGxlbiwgaW50IG5yX2hwYWdlcywgdW5zaWduZWQgbG9uZyBocGFnZV9zaXplKTtcXG4gXFx0Y29uc3QgY2hhciAqbmFtZTtcXG4gfTtcXG4gXFxuQEAgLTY5LDYgKzcxLDcgQEAgc3RydWN0IGNvbGxhcHNlX2NvbnRleHQge1xcbiB9O1xcbiBcXG4gc3RhdGljIHN0cnVjdCBjb2xsYXBzZV9jb250ZXh0ICpraHVnZXBhZ2VkX2NvbnRleHQ7XFxuK3N0YXRpYyBzdHJ1Y3QgY29sbGFwc2VfY29udGV4dCAqbXRocF9raHVnZXBhZ2VkX2NvbnRleHQ7XFxuIHN0YXRpYyBzdHJ1Y3QgY29sbGFwc2VfY29udGV4dCAqbWFkdmlzZV9jb250ZXh0O1xcbiBcXG4gc3RydWN0IGZpbGVfaW5mbyB7XFxuQEAgLTI5NSw3ICsyOTgsNyBAQCBzdGF0aWMgdm9pZCAqYWxsb2NfaHBhZ2Uoc3RydWN0IG1lbV9vcHMgKm9wcylcXG4gXFx0a3NmdF9wcmludF9tc2coXFxcIkFsbG9jYXRlIGh1Z2UgcGFnZS4uLlxcXCIpO1xcbiBcXHRpZiAobWFkdmlzZV9jb2xsYXBzZV9yZXRyeShwLCBocGFnZV9wbWRfc2l6ZSkpXFxuIFxcdFxcdGtzZnRfZXhpdF9mYWlsX3BlcnJvcihcXFwibWFkdmlzZShNQURWX0NPTExBUFNFKVxcXCIpO1xcbi1cXHRpZiAoIW9wcy1cXHUwMDNlY2hlY2tfaHVnZShwLCAxKSlcXG4rXFx0aWYgKCFvcHMtXFx1MDAzZWNoZWNrX2h1Z2UocCwgaHBhZ2VfcG1kX3NpemUsIDEsIGhwYWdlX3BtZF9zaXplKSlcXG4gXFx0XFx0a3NmdF9leGl0X2ZhaWxfcGVycm9yKFxcXCJtYWR2aXNlKE1BRFZfQ09MTEFQU0UpXFxcIik7XFxuIFxcdGlmIChtYWR2aXNlKHAsIGhwYWdlX3BtZF9zaXplLCBNQURWX0hVR0VQQUdFKSlcXG4gXFx0XFx0a3NmdF9leGl0X2ZhaWxfcGVycm9yKFxcXCJtYWR2aXNlKE1BRFZfSFVHRVBBR0UpXFxcIik7XFxuQEAgLTMyOSw5ICszMzIsMTAgQEAgc3RhdGljIHZvaWQgYW5vbl9mYXVsdCh2b2lkICpwLCB1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZClcXG4gXFx0ZmlsbF9tZW1vcnkocCwgc3RhcnQsIGVuZCk7XFxuIH1cXG4gXFxuLXN0YXRpYyBib29sIGFub25fY2hlY2tfaHVnZSh2b2lkICphZGRyLCBpbnQgbnJfaHBhZ2VzKVxcbitzdGF0aWMgYm9vbCBhbm9uX2NoZWNrX2h1Z2Uodm9pZCAqYWRkciwgc2l6ZV90IGxlbiwgaW50IG5yX2hwYWdlcyxcXG4rXFx0XFx0dW5zaWduZWQgbG9uZyBocGFnZV9zaXplKVxcbiB7XFxuLVxcdHJldHVybiBjaGVja19odWdlX2Fub24oYWRkciwgbnJfaHBhZ2VzLCBocGFnZV9wbWRfc2l6ZSk7XFxuK1xcdHJldHVybiBjaGVja19odWdlX2Fub24oYWRkciwgbGVuLCBucl9ocGFnZXMsIGhwYWdlX3NpemUpO1xcbiB9XFxuIFxcbiBzdGF0aWMgdm9pZCAqZmlsZV9zZXR1cF9hcmVhX2NvbW1vbihpbnQgbnJfaHBhZ2VzLCBlbnVtIGZpbGVfc2V0dXBfb3BzIHNldHVwKVxcbkBAIC00MzEsMTMgKzQzNSwxNCBAQCBzdGF0aWMgdm9pZCBmaWxlX2ZhdWx0X3dyaXRlKHZvaWQgKnAsIHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kKVxcbiBcXHRcXHRrc2Z0X2V4aXRfZmFpbF9wZXJyb3IoXFxcIm1hZHZpc2UoTUFEVl9QT1BVTEFURV9XUklURSlcXFwiKTtcXG4gfVxcbiBcXG4tc3RhdGljIGJvb2wgZmlsZV9jaGVja19odWdlKHZvaWQgKmFkZHIsIGludCBucl9ocGFnZXMpXFxuK3N0YXRpYyBib29sIGZpbGVfY2hlY2tfaHVnZSh2b2lkICphZGRyLCBzaXplX3QgbGVuLCBpbnQgbnJfaHBhZ2VzLFxcbitcXHRcXHR1bnNpZ25lZCBsb25nIGhwYWdlX3NpemUpXFxuIHtcXG4gXFx0c3dpdGNoIChmaW5mby50eXBlKSB7XFxuIFxcdGNhc2UgVk1BX0ZJTEU6XFxuLVxcdFxcdHJldHVybiBjaGVja19odWdlX2ZpbGUoYWRkciwgbnJfaHBhZ2VzLCBocGFnZV9wbWRfc2l6ZSk7XFxuK1xcdFxcdHJldHVybiBjaGVja19odWdlX2ZpbGUoYWRkciwgbGVuLCBucl9ocGFnZXMsIGhwYWdlX3NpemUpO1xcbiBcXHRjYXNlIFZNQV9TSE1FTTpcXG4tXFx0XFx0cmV0dXJuIGNoZWNrX2h1Z2Vfc2htZW0oYWRkciwgbnJfaHBhZ2VzLCBocGFnZV9wbWRfc2l6ZSk7XFxuK1xcdFxcdHJldHVybiBjaGVja19odWdlX3NobWVtKGFkZHIsIGxlbiwgbnJfaHBhZ2VzLCBocGFnZV9zaXplKTtcXG4gXFx0ZGVmYXVsdDpcXG4gXFx0XFx0ZXhpdChFWElUX0ZBSUxVUkUpO1xcbiBcXHRcXHRyZXR1cm4gZmFsc2U7XFxuQEAgLTQ2Nyw5ICs0NzIsMTAgQEAgc3RhdGljIHZvaWQgc2htZW1fY2xlYW51cF9hcmVhKHZvaWQgKnAsIHVuc2lnbmVkIGxvbmcgc2l6ZSlcXG4gXFx0Y2xvc2UoZmluZm8uZmQpO1xcbiB9XFxuIFxcbi1zdGF0aWMgYm9vbCBzaG1lbV9jaGVja19odWdlKHZvaWQgKmFkZHIsIGludCBucl9ocGFnZXMpXFxuK3N0YXRpYyBib29sIHNobWVtX2NoZWNrX2h1Z2Uodm9pZCAqYWRkciwgc2l6ZV90IGxlbiwgaW50IG5yX2hwYWdlcyxcXG4rXFx0XFx0dW5zaWduZWQgbG9uZyBocGFnZV9zaXplKVxcbiB7XFxuLVxcdHJldHVybiBjaGVja19odWdlX3NobWVtKGFkZHIsIG5yX2hwYWdlcywgaHBhZ2VfcG1kX3NpemUpO1xcbitcXHRyZXR1cm4gY2hlY2tfaHVnZV9zaG1lbShhZGRyLCBsZW4sIG5yX2hwYWdlcywgaHBhZ2Vfc2l6ZSk7XFxuIH1cXG4gXFxuIHN0YXRpYyBzdHJ1Y3QgbWVtX29wcyBfX2Fub25fb3BzID0ge1xcbkBAIC01NTIsNyArNTU4LDcgQEAgc3RhdGljIHZvaWQgX19tYWR2aXNlX2NvbGxhcHNlKGNvbnN0IGNoYXIgKm1zZywgY2hhciAqcCwgaW50IG5yX2hwYWdlcyxcXG4gXFx0cmV0ID0gbWFkdmlzZV9jb2xsYXBzZV9yZXRyeShwLCBucl9ocGFnZXMgKiBocGFnZV9wbWRfc2l6ZSk7XFxuIFxcdGlmICgoKGJvb2wpcmV0KSA9PSBleHBlY3QpXFxuIFxcdFxcdGZhaWwoXFxcIkZhaWw6IEJhZCByZXR1cm4gdmFsdWVcXFwiKTtcXG4tXFx0ZWxzZSBpZiAoIW9wcy1cXHUwMDNlY2hlY2tfaHVnZShwLCBleHBlY3QgPyBucl9ocGFnZXMgOiAwKSlcXG4rXFx0ZWxzZSBpZiAoIW9wcy1cXHUwMDNlY2hlY2tfaHVnZShwLCBucl9ocGFnZXMgKiBocGFnZV9wbWRfc2l6ZSwgZXhwZWN0ID8gbnJfaHBhZ2VzIDogMCwgaHBhZ2VfcG1kX3NpemUpKVxcbiBcXHRcXHRmYWlsKFxcXCJGYWlsOiBjaGVja19odWdlKClcXFwiKTtcXG4gXFx0ZWxzZVxcbiBcXHRcXHRzdWNjZXNzKFxcXCJPS1xcXCIpO1xcbkBAIC01NjQsMzAgKzU3MCwzMSBAQCBzdGF0aWMgdm9pZCBtYWR2aXNlX2NvbGxhcHNlKGNvbnN0IGNoYXIgKm1zZywgY2hhciAqcCwgaW50IG5yX2hwYWdlcyxcXG4gXFx0XFx0XFx0ICAgICBzdHJ1Y3QgbWVtX29wcyAqb3BzLCBib29sIGV4cGVjdClcXG4ge1xcbiBcXHQvKiBTYW5pdHkgY2hlY2sgKi9cXG4tXFx0aWYgKCFvcHMtXFx1MDAzZWNoZWNrX2h1Z2UocCwgMCkpXFxuK1xcdGlmICghb3BzLVxcdTAwM2VjaGVja19odWdlKHAsIG5yX2hwYWdlcyAqIGhwYWdlX3BtZF9zaXplLCAwLCBocGFnZV9wbWRfc2l6ZSkpXFxuIFxcdFxcdGtzZnRfZXhpdF9mYWlsX21zZyhcXFwiVW5leHBlY3RlZCBodWdlIHBhZ2VcXFxcblxcXCIpO1xcbiBcXHRfX21hZHZpc2VfY29sbGFwc2UobXNnLCBwLCBucl9ocGFnZXMsIG9wcywgZXhwZWN0KTtcXG4gfVxcbiBcXG4gI2RlZmluZSBUSUNLIDUwMDAwMFxcbi1zdGF0aWMgYm9vbCB3YWl0X2Zvcl9zY2FuKGNvbnN0IGNoYXIgKm1zZywgY2hhciAqcCwgaW50IG5yX2hwYWdlcyxcXG4tXFx0XFx0XFx0ICBzdHJ1Y3QgbWVtX29wcyAqb3BzKVxcbitzdGF0aWMgYm9vbCB3YWl0X2Zvcl9zY2FuKGNvbnN0IGNoYXIgKm1zZywgY2hhciAqcCwgc2l6ZV90IGxlbixcXG4rXFx0XFx0aW50IG5yX2hwYWdlcywgaW50IGNvbGxhcF9vcmRlciwgc3RydWN0IG1lbV9vcHMgKm9wcylcXG4ge1xcbitcXHR1bnNpZ25lZCBsb25nIGhwYWdlX3NpemUgPSBwYWdlX3NpemUgXFx1MDAzY1xcdTAwM2MgY29sbGFwX29yZGVyO1xcbiBcXHRpbnQgZnVsbF9zY2FucztcXG4gXFx0aW50IHRpbWVvdXQgPSA2OyAvKiAzIHNlY29uZHMgKi9cXG4gXFxuIFxcdC8qIFNhbml0eSBjaGVjayAqL1xcbi1cXHRpZiAoIW9wcy1cXHUwMDNlY2hlY2tfaHVnZShwLCAwKSlcXG4rXFx0aWYgKCFvcHMtXFx1MDAzZWNoZWNrX2h1Z2UocCwgbGVuLCAwLCBocGFnZV9zaXplKSlcXG4gXFx0XFx0a3NmdF9leGl0X2ZhaWxfbXNnKFxcXCJVbmV4cGVjdGVkIGh1Z2UgcGFnZVxcXFxuXFxcIik7XFxuIFxcbi1cXHRtYWR2aXNlKHAsIG5yX2hwYWdlcyAqIGhwYWdlX3BtZF9zaXplLCBNQURWX0hVR0VQQUdFKTtcXG4rXFx0bWFkdmlzZShwLCBsZW4sIE1BRFZfSFVHRVBBR0UpO1xcbiBcXG4gXFx0LyogV2FpdCB1bnRpbCB0aGUgc2Vjb25kIGZ1bGxfc2NhbiBjb21wbGV0ZWQgKi9cXG4gXFx0ZnVsbF9zY2FucyA9IHRocF9yZWFkX251bShcXFwia2h1Z2VwYWdlZC9mdWxsX3NjYW5zXFxcIikgKyAyO1xcbiBcXG4gXFx0a3NmdF9wcmludF9tc2coXFxcIiVzLi4uXFxcIiwgbXNnKTtcXG4gXFx0d2hpbGUgKHRpbWVvdXQtLSkge1xcbi1cXHRcXHRpZiAob3BzLVxcdTAwM2VjaGVja19odWdlKHAsIG5yX2hwYWdlcykpXFxuK1xcdFxcdGlmIChvcHMtXFx1MDAzZWNoZWNrX2h1Z2UocCwgbGVuLCBucl9ocGFnZXMsIGhwYWdlX3NpemUpKVxcbiBcXHRcXHRcXHRicmVhaztcXG4gXFx0XFx0aWYgKHRocF9yZWFkX251bShcXFwia2h1Z2VwYWdlZC9mdWxsX3NjYW5zXFxcIikgXFx1MDAzZT0gZnVsbF9zY2FucylcXG4gXFx0XFx0XFx0YnJlYWs7XFxuQEAgLTYwMSw2ICs2MDgsOCBAQCBzdGF0aWMgYm9vbCB3YWl0X2Zvcl9zY2FuKGNvbnN0IGNoYXIgKm1zZywgY2hhciAqcCwgaW50IG5yX2hwYWdlcyxcXG4gc3RhdGljIHZvaWQga2h1Z2VwYWdlZF9jb2xsYXBzZShjb25zdCBjaGFyICptc2csIGNoYXIgKnAsIGludCBucl9ocGFnZXMsXFxuIFxcdFxcdFxcdFxcdHN0cnVjdCBtZW1fb3BzICpvcHMsIGJvb2wgZXhwZWN0KVxcbiB7XFxuK1xcdHNpemVfdCBsZW4gPSBucl9ocGFnZXMgKiBocGFnZV9wbWRfc2l6ZTtcXG4rXFxuIFxcdC8qXFxuIFxcdCAqIHJlYWRcXHUwMDI2d3JpdGUgZmlsZSBjb2xsYXBzZSBmYWlscyBzaW5jZSBraHVnZXBhZ2VkIGRvZXMgbm90IGZsdXNoXFxuIFxcdCAqIHRoZSB0YXJnZXQgZGlydHkgZm9saW9zXFxuQEAgLTYwOCw3ICs2MTcsNyBAQCBzdGF0aWMgdm9pZCBraHVnZXBhZ2VkX2NvbGxhcHNlKGNvbnN0IGNoYXIgKm1zZywgY2hhciAqcCwgaW50IG5yX2hwYWdlcyxcXG4gXFx0aWYgKCFpc190bXBmcyhvcHMpIFxcdTAwMjZcXHUwMDI2IG9wcyA9PSBcXHUwMDI2X19yZWFkX3dyaXRlX2ZpbGVfd3JpdGVfb3BzKVxcbiBcXHRcXHRleHBlY3QgPSBmYWxzZTtcXG4gXFxuLVxcdGlmICh3YWl0X2Zvcl9zY2FuKG1zZywgcCwgbnJfaHBhZ2VzLCBvcHMpKSB7XFxuK1xcdGlmICh3YWl0X2Zvcl9zY2FuKG1zZywgcCwgbGVuLCBucl9ocGFnZXMsIGhwYWdlX3BtZF9vcmRlciwgb3BzKSkge1xcbiBcXHRcXHRpZiAoZXhwZWN0KVxcbiBcXHRcXHRcXHRmYWlsKFxcXCJUaW1lb3V0XFxcIik7XFxuIFxcdFxcdGVsc2VcXG5AQCAtNjI0LDEwICs2MzMsNTQgQEAgc3RhdGljIHZvaWQga2h1Z2VwYWdlZF9jb2xsYXBzZShjb25zdCBjaGFyICptc2csIGNoYXIgKnAsIGludCBucl9ocGFnZXMsXFxuIFxcdGlmIChvcHMgIT0gXFx1MDAyNl9fYW5vbl9vcHMpXFxuIFxcdFxcdG9wcy1cXHUwMDNlZmF1bHQocCwgMCwgbnJfaHBhZ2VzICogaHBhZ2VfcG1kX3NpemUpO1xcbiBcXG4tXFx0aWYgKG9wcy1cXHUwMDNlY2hlY2tfaHVnZShwLCBleHBlY3QgPyBucl9ocGFnZXMgOiAwKSlcXG4rXFx0aWYgKG9wcy1cXHUwMDNlY2hlY2tfaHVnZShwLCBsZW4sIGV4cGVjdCA/IG5yX2hwYWdlcyA6IDAsIGhwYWdlX3BtZF9zaXplKSlcXG4rXFx0XFx0c3VjY2VzcyhcXFwiT0tcXFwiKTtcXG4rXFx0ZWxzZVxcbitcXHRcXHRmYWlsKFxcXCJGYWlsXFxcIik7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIG10aHBfa2h1Z2VwYWdlZF9jb2xsYXBzZShjb25zdCBjaGFyICptc2csIGNoYXIgKnAsIGludCBucl9ocGFnZXMsXFxuK1xcdFxcdFxcdFxcdHN0cnVjdCBtZW1fb3BzICpvcHMsIGJvb2wgZXhwZWN0KVxcbit7XFxuK1xcdHVuc2lnbmVkIGxvbmcgaHBhZ2Vfc2l6ZSA9IHBhZ2Vfc2l6ZSBcXHUwMDNjXFx1MDAzYyBjb2xsYXBzZV9vcmRlcjtcXG4rXFx0c3RydWN0IHRocF9zZXR0aW5ncyBzZXR0aW5ncyA9ICp0aHBfY3VycmVudF9zZXR0aW5ncygpO1xcbitcXHQvKiBtVEhQIGNvbGxwYXNlIG9ubHkgYWxsb2NhdGVzIFBNRCBzaXplZCBtZW1vcnkgKi9cXG4rXFx0c2l6ZV90IGxlbiA9IGhwYWdlX3BtZF9zaXplO1xcbitcXG4rXFx0LyogU2V0IG1USFAgc2V0dGluZyBmb3IgbVRIUCBjb2xsYXBzZSAqL1xcbitcXHRpZiAob3BzID09IFxcdTAwMjZfX2Fub25fb3BzKSB7XFxuK1xcdFxcdHNldHRpbmdzLnRocF9lbmFibGVkID0gVEhQX05FVkVSO1xcbitcXHRcXHRzZXR0aW5ncy5odWdlcGFnZXNbY29sbGFwc2Vfb3JkZXJdLmVuYWJsZWQgPSBUSFBfTUFEVklTRTtcXG4rXFx0fVxcbitcXG4rXFx0dGhwX3B1c2hfc2V0dGluZ3MoXFx1MDAyNnNldHRpbmdzKTtcXG4rXFxuK1xcdGlmICh3YWl0X2Zvcl9zY2FuKG1zZywgcCwgbGVuLCBucl9ocGFnZXMsIGNvbGxhcHNlX29yZGVyLCBvcHMpKSB7XFxuK1xcdFxcdGlmIChleHBlY3QpXFxuK1xcdFxcdFxcdGZhaWwoXFxcIlRpbWVvdXRcXFwiKTtcXG4rXFx0XFx0ZWxzZVxcbitcXHRcXHRcXHRzdWNjZXNzKFxcXCJPS1xcXCIpO1xcbitcXG4rXFx0XFx0LyogUmVzdG9yZSBUSFAgc2V0dGluZ3MgZm9yIG1USFAgY29sbGFwc2UuICovXFxuK1xcdFxcdHRocF9wb3Bfc2V0dGluZ3MoKTtcXG4rXFx0XFx0cmV0dXJuO1xcbitcXHR9XFxuK1xcbitcXHQvKlxcbitcXHQgKiBGb3IgZmlsZSBhbmQgc2htZW0gbWVtb3J5LCBraHVnZXBhZ2VkIG9ubHkgcmV0cmFjdHMgcHRlIGVudHJpZXMgYWZ0ZXJcXG4rXFx0ICogcHV0dGluZyB0aGUgbmV3IGh1Z2VwYWdlIGluIHRoZSBwYWdlIGNhY2hlLiBUaGUgaHVnZXBhZ2UgbXVzdCBiZVxcbitcXHQgKiBzdWJzZXF1ZW50bHkgcmVmYXVsdGVkIHRvIGluc3RhbGwgdGhlIHBtZCBtYXBwaW5nIGZvciB0aGUgbW0uXFxuK1xcdCAqL1xcbitcXHRpZiAob3BzICE9IFxcdTAwMjZfX2Fub25fb3BzKVxcbitcXHRcXHRvcHMtXFx1MDAzZWZhdWx0KHAsIDAsIG5yX2hwYWdlcyAqIGhwYWdlX3NpemUpO1xcbitcXG4rXFx0aWYgKG9wcy1cXHUwMDNlY2hlY2tfaHVnZShwLCBsZW4sIGV4cGVjdCA/IG5yX2hwYWdlcyA6IDAsIGhwYWdlX3NpemUpKVxcbiBcXHRcXHRzdWNjZXNzKFxcXCJPS1xcXCIpO1xcbiBcXHRlbHNlXFxuIFxcdFxcdGZhaWwoXFxcIkZhaWxcXFwiKTtcXG4rXFxuK1xcdC8qIFJlc3RvcmUgVEhQIHNldHRpbmdzIGZvciBtVEhQIGNvbGxhcHNlLiAqL1xcbitcXHR0aHBfcG9wX3NldHRpbmdzKCk7XFxuIH1cXG4gXFxuIHN0YXRpYyBzdHJ1Y3QgY29sbGFwc2VfY29udGV4dCBfX2todWdlcGFnZWRfY29udGV4dCA9IHtcXG5AQCAtNjM2LDYgKzY4OSwxMiBAQCBzdGF0aWMgc3RydWN0IGNvbGxhcHNlX2NvbnRleHQgX19raHVnZXBhZ2VkX2NvbnRleHQgPSB7XFxuIFxcdC5uYW1lID0gXFxcImtodWdlcGFnZWRcXFwiLFxcbiB9O1xcbiBcXG4rc3RhdGljIHN0cnVjdCBjb2xsYXBzZV9jb250ZXh0IF9fbXRocF9raHVnZXBhZ2VkX2NvbnRleHQgPSB7XFxuK1xcdC5jb2xsYXBzZSA9IFxcdTAwMjZtdGhwX2todWdlcGFnZWRfY29sbGFwc2UsXFxuK1xcdC5lbmZvcmNlX3B0ZV9zY2FuX2xpbWl0cyA9IHRydWUsXFxuK1xcdC5uYW1lID0gXFxcIm10aHBfa2h1Z2VwYWdlZFxcXCIsXFxuK307XFxuK1xcbiBzdGF0aWMgc3RydWN0IGNvbGxhcHNlX2NvbnRleHQgX19tYWR2aXNlX2NvbnRleHQgPSB7XFxuIFxcdC5jb2xsYXBzZSA9IFxcdTAwMjZtYWR2aXNlX2NvbGxhcHNlLFxcbiBcXHQuZW5mb3JjZV9wdGVfc2Nhbl9saW1pdHMgPSBmYWxzZSxcXG5AQCAtNjUzLDcgKzcxMiw3IEBAIHN0YXRpYyB2b2lkIGFsbG9jX2F0X2ZhdWx0KHZvaWQpXFxuIFxcdHAgPSBhbGxvY19tYXBwaW5nKDEpO1xcbiBcXHQqcCA9IDE7XFxuIFxcdGtzZnRfcHJpbnRfbXNnKFxcXCJBbGxvY2F0ZSBodWdlIHBhZ2Ugb24gZmF1bHQuLi5cXFwiKTtcXG4tXFx0aWYgKGNoZWNrX2h1Z2VfYW5vbihwLCAxLCBocGFnZV9wbWRfc2l6ZSkpXFxuK1xcdGlmIChjaGVja19odWdlX2Fub24ocCwgaHBhZ2VfcG1kX3NpemUsIDEsIGhwYWdlX3BtZF9zaXplKSlcXG4gXFx0XFx0c3VjY2VzcyhcXFwiT0tcXFwiKTtcXG4gXFx0ZWxzZVxcbiBcXHRcXHRmYWlsKFxcXCJGYWlsXFxcIik7XFxuQEAgLTY2Miw3ICs3MjEsNyBAQCBzdGF0aWMgdm9pZCBhbGxvY19hdF9mYXVsdCh2b2lkKVxcbiBcXG4gXFx0bWFkdmlzZShwLCBwYWdlX3NpemUsIE1BRFZfRE9OVE5FRUQpO1xcbiBcXHRrc2Z0X3ByaW50X21zZyhcXFwiU3BsaXQgaHVnZSBQTUQgb24gTUFEVl9ET05UTkVFRC4uLlxcXCIpO1xcbi1cXHRpZiAoY2hlY2tfaHVnZV9hbm9uKHAsIDAsIGhwYWdlX3BtZF9zaXplKSlcXG4rXFx0aWYgKGNoZWNrX2h1Z2VfYW5vbihwLCBocGFnZV9wbWRfc2l6ZSwgMCwgaHBhZ2VfcG1kX3NpemUpKVxcbiBcXHRcXHRzdWNjZXNzKFxcXCJPS1xcXCIpO1xcbiBcXHRlbHNlXFxuIFxcdFxcdGZhaWwoXFxcIkZhaWxcXFwiKTtcXG5AQCAtNjc0LDEwICs3MzMsMTcgQEAgc3RhdGljIHZvaWQgYWxsb2NfYXRfZmF1bHQodm9pZClcXG4gc3RhdGljIHZvaWQgY29sbGFwc2VfZnVsbChzdHJ1Y3QgY29sbGFwc2VfY29udGV4dCAqYywgc3RydWN0IG1lbV9vcHMgKm9wcylcXG4ge1xcbiBcXHR2b2lkICpwO1xcbi1cXHRpbnQgbnJfaHBhZ2VzID0gNDtcXG4rXFx0aW50IG5yX3BtZHMgPSA0LCBucl9ocGFnZXMgPSA0O1xcbiBcXHR1bnNpZ25lZCBsb25nIHNpemUgPSBucl9ocGFnZXMgKiBocGFnZV9wbWRfc2l6ZTtcXG4gXFxuLVxcdHAgPSBvcHMtXFx1MDAzZXNldHVwX2FyZWEobnJfaHBhZ2VzKTtcXG4rXFx0LyogT25seSB0cnkgMSBQTUQgc2l6ZWQgcmFuZ2UgZm9yIG1USFAgY29sbGFwc2UuICovXFxuK1xcdGlmIChjID09IFxcdTAwMjZfX210aHBfa2h1Z2VwYWdlZF9jb250ZXh0KSB7XFxuK1xcdFxcdG5yX3BtZHMgPSAxO1xcbitcXHRcXHRucl9ocGFnZXMgPSAxIFxcdTAwM2NcXHUwMDNjIChocGFnZV9wbWRfb3JkZXIgLSBjb2xsYXBzZV9vcmRlcik7XFxuK1xcdFxcdHNpemUgPSBocGFnZV9wbWRfc2l6ZTtcXG4rXFx0fVxcbitcXG4rXFx0cCA9IG9wcy1cXHUwMDNlc2V0dXBfYXJlYShucl9wbWRzKTtcXG4gXFx0b3BzLVxcdTAwM2VmYXVsdChwLCAwLCBzaXplKTtcXG4gXFx0Yy1cXHUwMDNlY29sbGFwc2UoXFxcIkNvbGxhcHNlIG11bHRpcGxlIGZ1bGx5IHBvcHVsYXRlZCBQVEUgdGFibGVcXFwiLCBwLCBucl9ocGFnZXMsXFxuIFxcdFxcdCAgICBvcHMsIHRydWUpO1xcbkBAIC02ODksMTAgKzc1NSwzMSBAQCBzdGF0aWMgdm9pZCBjb2xsYXBzZV9mdWxsKHN0cnVjdCBjb2xsYXBzZV9jb250ZXh0ICpjLCBzdHJ1Y3QgbWVtX29wcyAqb3BzKVxcbiBcXG4gc3RhdGljIHZvaWQgY29sbGFwc2VfZW1wdHkoc3RydWN0IGNvbGxhcHNlX2NvbnRleHQgKmMsIHN0cnVjdCBtZW1fb3BzICpvcHMpXFxuIHtcXG4rXFx0aW50IG5yX2hwYWdlcyA9IDE7XFxuK1xcdHZvaWQgKnA7XFxuK1xcbitcXHRpZiAoYyA9PSBcXHUwMDI2X19tdGhwX2todWdlcGFnZWRfY29udGV4dClcXG4rXFx0XFx0bnJfaHBhZ2VzID0gMSBcXHUwMDNjXFx1MDAzYyAoaHBhZ2VfcG1kX29yZGVyIC0gY29sbGFwc2Vfb3JkZXIpO1xcbitcXG4rXFx0cCA9IG9wcy1cXHUwMDNlc2V0dXBfYXJlYSgxKTtcXG4rXFx0Yy1cXHUwMDNlY29sbGFwc2UoXFxcIkRvIG5vdCBjb2xsYXBzZSBlbXB0eSBQVEUgdGFibGVcXFwiLCBwLCBucl9ocGFnZXMsIG9wcywgZmFsc2UpO1xcbitcXHRvcHMtXFx1MDAzZWNsZWFudXBfYXJlYShwLCBocGFnZV9wbWRfc2l6ZSk7XFxuK1xcdGtzZnRfdGVzdF9yZXN1bHRfcmVwb3J0KGV4aXRfc3RhdHVzLCBcXFwiJXNcXFxcblxcXCIsIF9fZnVuY19fKTtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgY29sbGFwc2Vfc2luZ2xlX210aHAoc3RydWN0IGNvbGxhcHNlX2NvbnRleHQgKmMsIHN0cnVjdCBtZW1fb3BzICpvcHMpXFxuK3tcXG4rXFx0dW5zaWduZWQgbG9uZyBocGFnZV9zaXplID0gcGFnZV9zaXplIFxcdTAwM2NcXHUwMDNjIGNvbGxhcHNlX29yZGVyO1xcbiBcXHR2b2lkICpwO1xcbiBcXG4gXFx0cCA9IG9wcy1cXHUwMDNlc2V0dXBfYXJlYSgxKTtcXG4tXFx0Yy1cXHUwMDNlY29sbGFwc2UoXFxcIkRvIG5vdCBjb2xsYXBzZSBlbXB0eSBQVEUgdGFibGVcXFwiLCBwLCAxLCBvcHMsIGZhbHNlKTtcXG4rXFx0LypcXG4rXFx0ICogT25seSBmYXVsdCBjb2xsYXBzZV9vcmRlciBzaXplZCByYW5nZXMsIGFuZCBvbmx5IGNoZWNrIDFcXG4rXFx0ICogY29sbGFwc2Vfb3JkZXIgc2l6ZWQgaHVnZSBwYWdlLlxcbitcXHQgKi9cXG4rXFx0b3BzLVxcdTAwM2VmYXVsdChwLCAwLCBocGFnZV9zaXplKTtcXG4rXFx0Yy1cXHUwMDNlY29sbGFwc2UoXFxcIkNvbGxhcHNlIFBURSB0YWJsZSB3aXRoIGhhbGYgUFRFIGVudHJpZXMgcHJlc2VudFxcXCIsXFxuK1xcdFxcdHAsIDEsIG9wcywgdHJ1ZSk7XFxuIFxcdG9wcy1cXHUwMDNlY2xlYW51cF9hcmVhKHAsIGhwYWdlX3BtZF9zaXplKTtcXG4gXFx0a3NmdF90ZXN0X3Jlc3VsdF9yZXBvcnQoZXhpdF9zdGF0dXMsIFxcXCIlc1xcXFxuXFxcIiwgX19mdW5jX18pO1xcbiB9XFxuQEAgLTg0OCw3ICs5MzUsNyBAQCBzdGF0aWMgdm9pZCBjb2xsYXBzZV9zaW5nbGVfcHRlX2VudHJ5X2NvbXBvdW5kKHN0cnVjdCBjb2xsYXBzZV9jb250ZXh0ICpjLCBzdHJ1Y1xcbiBcXHRtYWR2aXNlKHAsIGhwYWdlX3BtZF9zaXplLCBNQURWX05PSFVHRVBBR0UpO1xcbiBcXHRrc2Z0X3ByaW50X21zZyhcXFwiU3BsaXQgaHVnZSBwYWdlIGxlYXZpbmcgc2luZ2xlIFBURSBtYXBwaW5nIGNvbXBvdW5kIHBhZ2UuLi5cXFwiKTtcXG4gXFx0bWFkdmlzZShwICsgcGFnZV9zaXplLCBocGFnZV9wbWRfc2l6ZSAtIHBhZ2Vfc2l6ZSwgTUFEVl9ET05UTkVFRCk7XFxuLVxcdGlmIChvcHMtXFx1MDAzZWNoZWNrX2h1Z2UocCwgMCkpXFxuK1xcdGlmIChvcHMtXFx1MDAzZWNoZWNrX2h1Z2UocCwgaHBhZ2VfcG1kX3NpemUsIDAsIGhwYWdlX3BtZF9zaXplKSlcXG4gXFx0XFx0c3VjY2VzcyhcXFwiT0tcXFwiKTtcXG4gXFx0ZWxzZVxcbiBcXHRcXHRmYWlsKFxcXCJGYWlsXFxcIik7XFxuQEAgLTg2OSw3ICs5NTYsNyBAQCBzdGF0aWMgdm9pZCBjb2xsYXBzZV9mdWxsX29mX2NvbXBvdW5kKHN0cnVjdCBjb2xsYXBzZV9jb250ZXh0ICpjLCBzdHJ1Y3QgbWVtX29wc1xcbiBcXHRrc2Z0X3ByaW50X21zZyhcXFwiU3BsaXQgaHVnZSBwYWdlIGxlYXZpbmcgc2luZ2xlIFBURSBwYWdlIHRhYmxlIGZ1bGwgb2YgY29tcG91bmQgcGFnZXMuLi5cXFwiKTtcXG4gXFx0bWFkdmlzZShwLCBwYWdlX3NpemUsIE1BRFZfTk9IVUdFUEFHRSk7XFxuIFxcdG1hZHZpc2UocCwgaHBhZ2VfcG1kX3NpemUsIE1BRFZfTk9IVUdFUEFHRSk7XFxuLVxcdGlmIChvcHMtXFx1MDAzZWNoZWNrX2h1Z2UocCwgMCkpXFxuK1xcdGlmIChvcHMtXFx1MDAzZWNoZWNrX2h1Z2UocCwgaHBhZ2VfcG1kX3NpemUsIDAsIGhwYWdlX3BtZF9zaXplKSlcXG4gXFx0XFx0c3VjY2VzcyhcXFwiT0tcXFwiKTtcXG4gXFx0ZWxzZVxcbiBcXHRcXHRmYWlsKFxcXCJGYWlsXFxcIik7XFxuQEAgLTg5MSw3ICs5NzgsNyBAQCBzdGF0aWMgdm9pZCBjb2xsYXBzZV9jb21wb3VuZF9leHRyZW1lKHN0cnVjdCBjb2xsYXBzZV9jb250ZXh0ICpjLCBzdHJ1Y3QgbWVtX29wc1xcbiBcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgaHBhZ2VfcG1kX25yOyBpKyspIHtcXG4gXFx0XFx0bWFkdmlzZShCQVNFX0FERFIsIGhwYWdlX3BtZF9zaXplLCBNQURWX0hVR0VQQUdFKTtcXG4gXFx0XFx0b3BzLVxcdTAwM2VmYXVsdChCQVNFX0FERFIsIDAsIGhwYWdlX3BtZF9zaXplKTtcXG4tXFx0XFx0aWYgKCFvcHMtXFx1MDAzZWNoZWNrX2h1Z2UoQkFTRV9BRERSLCAxKSlcXG4rXFx0XFx0aWYgKCFvcHMtXFx1MDAzZWNoZWNrX2h1Z2UoQkFTRV9BRERSLCBocGFnZV9wbWRfc2l6ZSwgMSwgaHBhZ2VfcG1kX3NpemUpKVxcbiBcXHRcXHRcXHRrc2Z0X2V4aXRfZmFpbF9tc2coXFxcIkZhaWxlZCB0byBhbGxvY2F0ZSBodWdlIHBhZ2VcXFxcblxcXCIpO1xcbiBcXHRcXHRtYWR2aXNlKEJBU0VfQUREUiwgaHBhZ2VfcG1kX3NpemUsIE1BRFZfTk9IVUdFUEFHRSk7XFxuIFxcbkBAIC05MTQsNyArMTAwMSw3IEBAIHN0YXRpYyB2b2lkIGNvbGxhcHNlX2NvbXBvdW5kX2V4dHJlbWUoc3RydWN0IGNvbGxhcHNlX2NvbnRleHQgKmMsIHN0cnVjdCBtZW1fb3BzXFxuIFxcbiBcXHRvcHMtXFx1MDAzZWNsZWFudXBfYXJlYShCQVNFX0FERFIsIGhwYWdlX3BtZF9zaXplKTtcXG4gXFx0b3BzLVxcdTAwM2VmYXVsdChwLCAwLCBocGFnZV9wbWRfc2l6ZSk7XFxuLVxcdGlmICghb3BzLVxcdTAwM2VjaGVja19odWdlKHAsIDEpKVxcbitcXHRpZiAoIW9wcy1cXHUwMDNlY2hlY2tfaHVnZShwLCBocGFnZV9wbWRfc2l6ZSwgMSwgaHBhZ2VfcG1kX3NpemUpKVxcbiBcXHRcXHRzdWNjZXNzKFxcXCJPS1xcXCIpO1xcbiBcXHRlbHNlXFxuIFxcdFxcdGZhaWwoXFxcIkZhaWxcXFwiKTtcXG5AQCAtOTM2LDcgKzEwMjMsNyBAQCBzdGF0aWMgdm9pZCBjb2xsYXBzZV9mb3JrKHN0cnVjdCBjb2xsYXBzZV9jb250ZXh0ICpjLCBzdHJ1Y3QgbWVtX29wcyAqb3BzKVxcbiBcXG4gXFx0a3NmdF9wcmludF9tc2coXFxcIkFsbG9jYXRlIHNtYWxsIHBhZ2UuLi5cXFwiKTtcXG4gXFx0b3BzLVxcdTAwM2VmYXVsdChwLCAwLCBwYWdlX3NpemUpO1xcbi1cXHRpZiAob3BzLVxcdTAwM2VjaGVja19odWdlKHAsIDApKVxcbitcXHRpZiAob3BzLVxcdTAwM2VjaGVja19odWdlKHAsIGhwYWdlX3BtZF9zaXplLCAwLCBocGFnZV9wbWRfc2l6ZSkpXFxuIFxcdFxcdHN1Y2Nlc3MoXFxcIk9LXFxcIik7XFxuIFxcdGVsc2VcXG4gXFx0XFx0ZmFpbChcXFwiRmFpbFxcXCIpO1xcbkBAIC05NDQsNyArMTAzMSw3IEBAIHN0YXRpYyB2b2lkIGNvbGxhcHNlX2Zvcmsoc3RydWN0IGNvbGxhcHNlX2NvbnRleHQgKmMsIHN0cnVjdCBtZW1fb3BzICpvcHMpXFxuIFxcdGtzZnRfcHJpbnRfbXNnKFxcXCJTaGFyZSBzbWFsbCBwYWdlIG92ZXIgZm9yaygpLi4uXFxcIik7XFxuIFxcdGlmICghZm9yaygpKSB7XFxuIFxcdFxcdC8qIERvIG5vdCB0b3VjaCBzZXR0aW5ncyBvbiBjaGlsZCBleGl0ICovXFxuLVxcdFxcdGlmIChvcHMtXFx1MDAzZWNoZWNrX2h1Z2UocCwgMCkpXFxuK1xcdFxcdGlmIChvcHMtXFx1MDAzZWNoZWNrX2h1Z2UocCwgaHBhZ2VfcG1kX3NpemUsIDAsIGhwYWdlX3BtZF9zaXplKSlcXG4gXFx0XFx0XFx0c3VjY2VzcyhcXFwiT0tcXFwiKTtcXG4gXFx0XFx0ZWxzZVxcbiBcXHRcXHRcXHRmYWlsKFxcXCJGYWlsXFxcIik7XFxuQEAgLTk2Miw3ICsxMDQ5LDcgQEAgc3RhdGljIHZvaWQgY29sbGFwc2VfZm9yayhzdHJ1Y3QgY29sbGFwc2VfY29udGV4dCAqYywgc3RydWN0IG1lbV9vcHMgKm9wcylcXG4gXFx0ZXhpdF9zdGF0dXMgPSBXRVhJVFNUQVRVUyh3c3RhdHVzKTtcXG4gXFxuIFxcdGtzZnRfcHJpbnRfbXNnKFxcXCJDaGVjayBpZiBwYXJlbnQgc3RpbGwgaGFzIHNtYWxsIHBhZ2UuLi5cXFwiKTtcXG4tXFx0aWYgKG9wcy1cXHUwMDNlY2hlY2tfaHVnZShwLCAwKSlcXG4rXFx0aWYgKG9wcy1cXHUwMDNlY2hlY2tfaHVnZShwLCBocGFnZV9wbWRfc2l6ZSwgMCwgaHBhZ2VfcG1kX3NpemUpKVxcbiBcXHRcXHRzdWNjZXNzKFxcXCJPS1xcXCIpO1xcbiBcXHRlbHNlXFxuIFxcdFxcdGZhaWwoXFxcIkZhaWxcXFwiKTtcXG5AQCAtOTgwLDcgKzEwNjcsNyBAQCBzdGF0aWMgdm9pZCBjb2xsYXBzZV9mb3JrX2NvbXBvdW5kKHN0cnVjdCBjb2xsYXBzZV9jb250ZXh0ICpjLCBzdHJ1Y3QgbWVtX29wcyAqb1xcbiBcXHRrc2Z0X3ByaW50X21zZyhcXFwiU2hhcmUgaHVnZSBwYWdlIG92ZXIgZm9yaygpLi4uXFxcIik7XFxuIFxcdGlmICghZm9yaygpKSB7XFxuIFxcdFxcdC8qIERvIG5vdCB0b3VjaCBzZXR0aW5ncyBvbiBjaGlsZCBleGl0ICovXFxuLVxcdFxcdGlmIChvcHMtXFx1MDAzZWNoZWNrX2h1Z2UocCwgMSkpXFxuK1xcdFxcdGlmIChvcHMtXFx1MDAzZWNoZWNrX2h1Z2UocCwgaHBhZ2VfcG1kX3NpemUsIDEsIGhwYWdlX3BtZF9zaXplKSlcXG4gXFx0XFx0XFx0c3VjY2VzcyhcXFwiT0tcXFwiKTtcXG4gXFx0XFx0ZWxzZVxcbiBcXHRcXHRcXHRmYWlsKFxcXCJGYWlsXFxcIik7XFxuQEAgLTk4OCw3ICsxMDc1LDcgQEAgc3RhdGljIHZvaWQgY29sbGFwc2VfZm9ya19jb21wb3VuZChzdHJ1Y3QgY29sbGFwc2VfY29udGV4dCAqYywgc3RydWN0IG1lbV9vcHMgKm9cXG4gXFx0XFx0a3NmdF9wcmludF9tc2coXFxcIlNwbGl0IGh1Z2UgcGFnZSBQTUQgaW4gY2hpbGQgcHJvY2Vzcy4uLlxcXCIpO1xcbiBcXHRcXHRtYWR2aXNlKHAsIHBhZ2Vfc2l6ZSwgTUFEVl9OT0hVR0VQQUdFKTtcXG4gXFx0XFx0bWFkdmlzZShwLCBocGFnZV9wbWRfc2l6ZSwgTUFEVl9OT0hVR0VQQUdFKTtcXG4tXFx0XFx0aWYgKG9wcy1cXHUwMDNlY2hlY2tfaHVnZShwLCAwKSlcXG4rXFx0XFx0aWYgKG9wcy1cXHUwMDNlY2hlY2tfaHVnZShwLCBocGFnZV9wbWRfc2l6ZSwgMCwgaHBhZ2VfcG1kX3NpemUpKVxcbiBcXHRcXHRcXHRzdWNjZXNzKFxcXCJPS1xcXCIpO1xcbiBcXHRcXHRlbHNlXFxuIFxcdFxcdFxcdGZhaWwoXFxcIkZhaWxcXFwiKTtcXG5AQCAtMTAwOSw3ICsxMDk2LDcgQEAgc3RhdGljIHZvaWQgY29sbGFwc2VfZm9ya19jb21wb3VuZChzdHJ1Y3QgY29sbGFwc2VfY29udGV4dCAqYywgc3RydWN0IG1lbV9vcHMgKm9cXG4gXFx0ZXhpdF9zdGF0dXMgPSBXRVhJVFNUQVRVUyh3c3RhdHVzKTtcXG4gXFxuIFxcdGtzZnRfcHJpbnRfbXNnKFxcXCJDaGVjayBpZiBwYXJlbnQgc3RpbGwgaGFzIGh1Z2UgcGFnZS4uLlxcXCIpO1xcbi1cXHRpZiAob3BzLVxcdTAwM2VjaGVja19odWdlKHAsIDEpKVxcbitcXHRpZiAob3BzLVxcdTAwM2VjaGVja19odWdlKHAsIGhwYWdlX3BtZF9zaXplLCAxLCBocGFnZV9wbWRfc2l6ZSkpXFxuIFxcdFxcdHN1Y2Nlc3MoXFxcIk9LXFxcIik7XFxuIFxcdGVsc2VcXG4gXFx0XFx0ZmFpbChcXFwiRmFpbFxcXCIpO1xcbkBAIC0xMDI4LDcgKzExMTUsNyBAQCBzdGF0aWMgdm9pZCBjb2xsYXBzZV9tYXhfcHRlc19zaGFyZWQoc3RydWN0IGNvbGxhcHNlX2NvbnRleHQgKmMsIHN0cnVjdCBtZW1fb3BzXFxuIFxcdGtzZnRfcHJpbnRfbXNnKFxcXCJTaGFyZSBodWdlIHBhZ2Ugb3ZlciBmb3JrKCkuLi5cXFwiKTtcXG4gXFx0aWYgKCFmb3JrKCkpIHtcXG4gXFx0XFx0LyogRG8gbm90IHRvdWNoIHNldHRpbmdzIG9uIGNoaWxkIGV4aXQgKi9cXG4tXFx0XFx0aWYgKG9wcy1cXHUwMDNlY2hlY2tfaHVnZShwLCAxKSlcXG4rXFx0XFx0aWYgKG9wcy1cXHUwMDNlY2hlY2tfaHVnZShwLCBocGFnZV9wbWRfc2l6ZSwgMSwgaHBhZ2VfcG1kX3NpemUpKVxcbiBcXHRcXHRcXHRzdWNjZXNzKFxcXCJPS1xcXCIpO1xcbiBcXHRcXHRlbHNlXFxuIFxcdFxcdFxcdGZhaWwoXFxcIkZhaWxcXFwiKTtcXG5AQCAtMTAzNiw3ICsxMTIzLDcgQEAgc3RhdGljIHZvaWQgY29sbGFwc2VfbWF4X3B0ZXNfc2hhcmVkKHN0cnVjdCBjb2xsYXBzZV9jb250ZXh0ICpjLCBzdHJ1Y3QgbWVtX29wc1xcbiBcXHRcXHRrc2Z0X3ByaW50X21zZyhcXFwiVHJpZ2dlciBDb1cgb24gcGFnZSAlZCBvZiAlZC4uLlxcXCIsXFxuIFxcdFxcdFxcdFxcdGhwYWdlX3BtZF9uciAtIG1heF9wdGVzX3NoYXJlZCAtIDEsIGhwYWdlX3BtZF9ucik7XFxuIFxcdFxcdG9wcy1cXHUwMDNlZmF1bHQocCwgMCwgKGhwYWdlX3BtZF9uciAtIG1heF9wdGVzX3NoYXJlZCAtIDEpICogcGFnZV9zaXplKTtcXG4tXFx0XFx0aWYgKG9wcy1cXHUwMDNlY2hlY2tfaHVnZShwLCAwKSlcXG4rXFx0XFx0aWYgKG9wcy1cXHUwMDNlY2hlY2tfaHVnZShwLCBocGFnZV9wbWRfc2l6ZSwgMCwgaHBhZ2VfcG1kX3NpemUpKVxcbiBcXHRcXHRcXHRzdWNjZXNzKFxcXCJPS1xcXCIpO1xcbiBcXHRcXHRlbHNlXFxuIFxcdFxcdFxcdGZhaWwoXFxcIkZhaWxcXFwiKTtcXG5AQCAtMTA0OSw3ICsxMTM2LDcgQEAgc3RhdGljIHZvaWQgY29sbGFwc2VfbWF4X3B0ZXNfc2hhcmVkKHN0cnVjdCBjb2xsYXBzZV9jb250ZXh0ICpjLCBzdHJ1Y3QgbWVtX29wc1xcbiBcXHRcXHRcXHQgICAgICAgaHBhZ2VfcG1kX25yIC0gbWF4X3B0ZXNfc2hhcmVkLCBocGFnZV9wbWRfbnIpO1xcbiBcXHRcXHRcXHRvcHMtXFx1MDAzZWZhdWx0KHAsIDAsIChocGFnZV9wbWRfbnIgLSBtYXhfcHRlc19zaGFyZWQpICpcXG4gXFx0XFx0XFx0XFx0ICAgIHBhZ2Vfc2l6ZSk7XFxuLVxcdFxcdFxcdGlmIChvcHMtXFx1MDAzZWNoZWNrX2h1Z2UocCwgMCkpXFxuK1xcdFxcdFxcdGlmIChvcHMtXFx1MDAzZWNoZWNrX2h1Z2UocCwgaHBhZ2VfcG1kX3NpemUsIDAsIGhwYWdlX3BtZF9zaXplKSlcXG4gXFx0XFx0XFx0XFx0c3VjY2VzcyhcXFwiT0tcXFwiKTtcXG4gXFx0XFx0XFx0ZWxzZVxcbiBcXHRcXHRcXHRcXHRmYWlsKFxcXCJGYWlsXFxcIik7XFxuQEAgLTEwNjcsNyArMTE1NCw3IEBAIHN0YXRpYyB2b2lkIGNvbGxhcHNlX21heF9wdGVzX3NoYXJlZChzdHJ1Y3QgY29sbGFwc2VfY29udGV4dCAqYywgc3RydWN0IG1lbV9vcHNcXG4gXFx0ZXhpdF9zdGF0dXMgPSBXRVhJVFNUQVRVUyh3c3RhdHVzKTtcXG4gXFxuIFxcdGtzZnRfcHJpbnRfbXNnKFxcXCJDaGVjayBpZiBwYXJlbnQgc3RpbGwgaGFzIGh1Z2UgcGFnZS4uLlxcXCIpO1xcbi1cXHRpZiAob3BzLVxcdTAwM2VjaGVja19odWdlKHAsIDEpKVxcbitcXHRpZiAob3BzLVxcdTAwM2VjaGVja19odWdlKHAsIGhwYWdlX3BtZF9zaXplLCAxLCBocGFnZV9wbWRfc2l6ZSkpXFxuIFxcdFxcdHN1Y2Nlc3MoXFxcIk9LXFxcIik7XFxuIFxcdGVsc2VcXG4gXFx0XFx0ZmFpbChcXFwiRmFpbFxcXCIpO1xcbkBAIC0xMTA4LDggKzExOTUsOCBAQCBzdGF0aWMgdm9pZCBtYWR2aXNlX3JldHJhY3RlZF9wYWdlX3RhYmxlcyhzdHJ1Y3QgY29sbGFwc2VfY29udGV4dCAqYyxcXG4gXFx0b3BzLVxcdTAwM2VmYXVsdChwLCAwLCBzaXplKTtcXG4gXFxuIFxcdC8qIExldCBraHVnZXBhZ2VkIGNvbGxhcHNlIGFuZCBsZWF2ZSBwbWQgY2xlYXJlZCAqL1xcbi1cXHRpZiAod2FpdF9mb3Jfc2NhbihcXFwiQ29sbGFwc2UgYW5kIGxlYXZlIFBNRCBjbGVhcmVkXFxcIiwgcCwgbnJfaHBhZ2VzLFxcbi1cXHRcXHRcXHQgIG9wcykpIHtcXG4rXFx0aWYgKHdhaXRfZm9yX3NjYW4oXFxcIkNvbGxhcHNlIGFuZCBsZWF2ZSBQTUQgY2xlYXJlZFxcXCIsIHAsIHNpemUsIG5yX2hwYWdlcyxcXG4rXFx0XFx0XFx0ICBocGFnZV9wbWRfb3JkZXIsIG9wcykpIHtcXG4gXFx0XFx0ZmFpbChcXFwiVGltZW91dFxcXCIpO1xcbiBcXHRcXHRyZXR1cm47XFxuIFxcdH1cXG5AQCAtMTEyNSwxNyArMTIxMiwxOSBAQCBzdGF0aWMgdm9pZCB1c2FnZSh2b2lkKVxcbiB7XFxuIFxcdGZwcmludGYoc3RkZXJyLCBcXFwiXFxcXG5Vc2FnZTogLi9raHVnZXBhZ2VkIFtPUFRJT05TXSBcXHUwMDNjdGVzdCB0eXBlXFx1MDAzZSBbZGlyXVxcXFxuXFxcXG5cXFwiKTtcXG4gXFx0ZnByaW50ZihzdGRlcnIsIFxcXCJcXFxcdFxcdTAwM2N0ZXN0IHR5cGVcXHUwMDNlXFxcXHQ6IFxcdTAwM2Njb250ZXh0XFx1MDAzZTpcXHUwMDNjbWVtX3R5cGVcXHUwMDNlXFxcXG5cXFwiKTtcXG4tXFx0ZnByaW50ZihzdGRlcnIsIFxcXCJcXFxcdFxcdTAwM2Njb250ZXh0XFx1MDAzZVxcXFx0OiBbYWxsfGtodWdlcGFnZWR8bWFkdmlzZV1cXFxcblxcXCIpO1xcbitcXHRmcHJpbnRmKHN0ZGVyciwgXFxcIlxcXFx0XFx1MDAzY2NvbnRleHRcXHUwMDNlXFxcXHQ6IFthbGx8a2h1Z2VwYWdlZHxtdGhwX2todWdlcGFnZWR8bWFkdmlzZV1cXFxcblxcXCIpO1xcbiBcXHRmcHJpbnRmKHN0ZGVyciwgXFxcIlxcXFx0XFx1MDAzY21lbV90eXBlXFx1MDAzZVxcXFx0OiBbYWxsfGFub258ZmlsZXxzaG1lbV1cXFxcblxcXCIpO1xcbiBcXHRmcHJpbnRmKHN0ZGVyciwgXFxcIlxcXFxuXFxcXHRcXFxcXFxcImZpbGUsYWxsXFxcXFxcXCIgbWVtX3R5cGUgcmVxdWlyZXMgW2Rpcl0gYXJndW1lbnRcXFxcblxcXCIpO1xcbiBcXHRmcHJpbnRmKHN0ZGVyciwgXFxcIlxcXFxuXFxcXHRcXFxcXFxcImZpbGUsYWxsXFxcXFxcXCIgbWVtX3R5cGUgcmVxdWlyZXMgYSBmaWxlIHN5c3RlbVxcXFxuXFxcIik7XFxuIFxcdGZwcmludGYoc3RkZXJyLFxcdFxcXCJcXFxcdHdpdGggUE1ELXNpemVkIGxhcmdlIGZvbGlvIHN1cHBvcnRcXFxcblxcXCIpO1xcbiBcXHRmcHJpbnRmKHN0ZGVyciwgXFxcIlxcXFxuXFxcXHRpZiBbZGlyXSBpcyBhIChzdWIpZGlyZWN0b3J5IG9mIGEgdG1wZnMgbW91bnQsIHRtcGZzIG11c3QgYmVcXFxcblxcXCIpO1xcbiBcXHRmcHJpbnRmKHN0ZGVycixcXHRcXFwiXFxcXHRtb3VudGVkIHdpdGggaHVnZT1hZHZpc2Ugb3B0aW9uIGZvciBraHVnZXBhZ2VkIHRlc3RzIHRvIHdvcmtcXFxcblxcXCIpO1xcbitcXHRmcHJpbnRmKHN0ZGVyciwgXFxcIlxcXFxuXFxcXHRtdGhwX2todWdlcGFnZWQgb25seSBzdXBwb3J0cyBhbm9uIG1lbV90eXBlIG5vdy5cXFxcblxcXCIpO1xcbiBcXHRmcHJpbnRmKHN0ZGVycixcXHRcXFwiXFxcXG5cXFxcdFN1cHBvcnRlZCBPcHRpb25zOlxcXFxuXFxcIik7XFxuIFxcdGZwcmludGYoc3RkZXJyLFxcdFxcXCJcXFxcdFxcXFx0LWg6IFRoaXMgaGVscCBtZXNzYWdlLlxcXFxuXFxcIik7XFxuIFxcdGZwcmludGYoc3RkZXJyLFxcdFxcXCJcXFxcdFxcXFx0LXM6IG1USFAgc2l6ZSwgZXhwcmVzc2VkIGFzIHBhZ2Ugb3JkZXIuXFxcXG5cXFwiKTtcXG4gXFx0ZnByaW50ZihzdGRlcnIsXFx0XFxcIlxcXFx0XFxcXHQgICAgRGVmYXVsdHMgdG8gMC4gVXNlIHRoaXMgc2l6ZSBmb3IgYW5vbiBvciBzaG1lbSBhbGxvY2F0aW9ucy5cXFxcblxcXCIpO1xcbitcXHRmcHJpbnRmKHN0ZGVycixcXHRcXFwiXFxcXHRcXFxcdC1jOiBjb2xsYXBzZSBvcmRlciBmb3IgbVRIUCBjb2xsYXBzZSwgZXhwcmVzc2VkIGFzIHBhZ2Ugb3JkZXIuXFxcXG5cXFwiKTtcXG4gXFx0ZXhpdCgxKTtcXG4gfVxcbiBcXG5AQCAtMTE0NSwxMSArMTIzNCwxNCBAQCBzdGF0aWMgdm9pZCBwYXJzZV90ZXN0X3R5cGUoaW50IGFyZ2MsIGNoYXIgKiphcmd2KVxcbiBcXHRjaGFyICpidWY7XFxuIFxcdGNvbnN0IGNoYXIgKnRva2VuO1xcbiBcXG4tXFx0d2hpbGUgKChvcHQgPSBnZXRvcHQoYXJnYywgYXJndiwgXFxcInM6aFxcXCIpKSAhPSAtMSkge1xcbitcXHR3aGlsZSAoKG9wdCA9IGdldG9wdChhcmdjLCBhcmd2LCBcXFwiczpjOmhcXFwiKSkgIT0gLTEpIHtcXG4gXFx0XFx0c3dpdGNoIChvcHQpIHtcXG4gXFx0XFx0Y2FzZSAncyc6XFxuIFxcdFxcdFxcdGFub25fb3JkZXIgPSBhdG9pKG9wdGFyZyk7XFxuIFxcdFxcdFxcdGJyZWFrO1xcbitcXHRcXHRjYXNlICdjJzpcXG4rXFx0XFx0XFx0Y29sbGFwc2Vfb3JkZXIgPSBhdG9pKG9wdGFyZyk7XFxuK1xcdFxcdFxcdGJyZWFrO1xcbiBcXHRcXHRjYXNlICdoJzpcXG4gXFx0XFx0ZGVmYXVsdDpcXG4gXFx0XFx0XFx0dXNhZ2UoKTtcXG5AQCAtMTE3NSw2ICsxMjY3LDEwIEBAIHN0YXRpYyB2b2lkIHBhcnNlX3Rlc3RfdHlwZShpbnQgYXJnYywgY2hhciAqKmFyZ3YpXFxuIFxcdFxcdG1hZHZpc2VfY29udGV4dCA9ICBcXHUwMDI2X19tYWR2aXNlX2NvbnRleHQ7XFxuIFxcdH0gZWxzZSBpZiAoIXN0cmNtcCh0b2tlbiwgXFxcImtodWdlcGFnZWRcXFwiKSkge1xcbiBcXHRcXHRraHVnZXBhZ2VkX2NvbnRleHQgPSAgXFx1MDAyNl9fa2h1Z2VwYWdlZF9jb250ZXh0O1xcbitcXHR9IGVsc2UgaWYgKCFzdHJjbXAodG9rZW4sIFxcXCJtdGhwX2todWdlcGFnZWRcXFwiKSkge1xcbitcXHRcXHRtdGhwX2todWdlcGFnZWRfY29udGV4dCA9ICBcXHUwMDI2X19tdGhwX2todWdlcGFnZWRfY29udGV4dDtcXG4rXFx0XFx0aWYgKGNvbGxhcHNlX29yZGVyIFxcdTAwM2M9IDAgfHwgY29sbGFwc2Vfb3JkZXIgXFx1MDAzZT0gaHBhZ2VfcG1kX29yZGVyKVxcbitcXHRcXHRcXHR1c2FnZSgpO1xcbiBcXHR9IGVsc2UgaWYgKCFzdHJjbXAodG9rZW4sIFxcXCJtYWR2aXNlXFxcIikpIHtcXG4gXFx0XFx0bWFkdmlzZV9jb250ZXh0ID0gIFxcdTAwMjZfX21hZHZpc2VfY29udGV4dDtcXG4gXFx0fSBlbHNlIHtcXG5AQCAtMTE5MCwxNCArMTI4NiwyMCBAQCBzdGF0aWMgdm9pZCBwYXJzZV90ZXN0X3R5cGUoaW50IGFyZ2MsIGNoYXIgKiphcmd2KVxcbiBcXHRcXHRyZWFkX3dyaXRlX2ZpbGVfd3JpdGVfb3BzID0gIFxcdTAwMjZfX3JlYWRfd3JpdGVfZmlsZV93cml0ZV9vcHM7XFxuIFxcdFxcdGFub25fb3BzID0gXFx1MDAyNl9fYW5vbl9vcHM7XFxuIFxcdFxcdHNobWVtX29wcyA9IFxcdTAwMjZfX3NobWVtX29wcztcXG4rXFx0XFx0aWYgKG10aHBfa2h1Z2VwYWdlZF9jb250ZXh0KVxcbitcXHRcXHRcXHR1c2FnZSgpO1xcbiBcXHR9IGVsc2UgaWYgKCFzdHJjbXAoYnVmLCBcXFwiYW5vblxcXCIpKSB7XFxuIFxcdFxcdGFub25fb3BzID0gXFx1MDAyNl9fYW5vbl9vcHM7XFxuIFxcdH0gZWxzZSBpZiAoIXN0cmNtcChidWYsIFxcXCJmaWxlXFxcIikpIHtcXG4gXFx0XFx0cmVhZF9vbmx5X2ZpbGVfb3BzID0gIFxcdTAwMjZfX3JlYWRfb25seV9maWxlX29wcztcXG4gXFx0XFx0cmVhZF93cml0ZV9maWxlX3JlYWRfb3BzID0gIFxcdTAwMjZfX3JlYWRfd3JpdGVfZmlsZV9yZWFkX29wcztcXG4gXFx0XFx0cmVhZF93cml0ZV9maWxlX3dyaXRlX29wcyA9ICBcXHUwMDI2X19yZWFkX3dyaXRlX2ZpbGVfd3JpdGVfb3BzO1xcbitcXHRcXHRpZiAobXRocF9raHVnZXBhZ2VkX2NvbnRleHQpXFxuK1xcdFxcdFxcdHVzYWdlKCk7XFxuIFxcdH0gZWxzZSBpZiAoIXN0cmNtcChidWYsIFxcXCJzaG1lbVxcXCIpKSB7XFxuIFxcdFxcdHNobWVtX29wcyA9IFxcdTAwMjZfX3NobWVtX29wcztcXG4rXFx0XFx0aWYgKG10aHBfa2h1Z2VwYWdlZF9jb250ZXh0KVxcbitcXHRcXHRcXHR1c2FnZSgpO1xcbiBcXHR9IGVsc2Uge1xcbiBcXHRcXHR1c2FnZSgpO1xcbiBcXHR9XFxuQEAgLTEyNDAsNyArMTM0Miw2IEBAIHN0YXRpYyBpbnQgbnJfdGVzdF9jYXNlcztcXG4gXFxuIGludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndilcXG4ge1xcbi1cXHRpbnQgaHBhZ2VfcG1kX29yZGVyO1xcbiBcXHRzdHJ1Y3QgdGhwX3NldHRpbmdzIGRlZmF1bHRfc2V0dGluZ3MgPSB7XFxuIFxcdFxcdC50aHBfZW5hYmxlZCA9IFRIUF9NQURWSVNFLFxcbiBcXHRcXHQudGhwX2RlZnJhZyA9IFRIUF9ERUZSQUdfQUxXQVlTLFxcbkBAIC0xMjY2LDEwICsxMzY3LDYgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KVxcbiBcXHRpZiAoIXRocF9pc19lbmFibGVkKCkpXFxuIFxcdFxcdGtzZnRfZXhpdF9za2lwKFxcXCJUcmFuc3BhcmVudCBIdWdlcGFnZXMgbm90IGF2YWlsYWJsZVxcXFxuXFxcIik7XFxuIFxcbi1cXHRwYXJzZV90ZXN0X3R5cGUoYXJnYywgYXJndik7XFxuLVxcbi1cXHRzZXRidWYoc3Rkb3V0LCBOVUxMKTtcXG4tXFxuIFxcdHBhZ2Vfc2l6ZSA9IGdldHBhZ2VzaXplKCk7XFxuIFxcdGhwYWdlX3BtZF9zaXplID0gcmVhZF9wbWRfcGFnZXNpemUoKTtcXG4gXFx0aWYgKCFocGFnZV9wbWRfc2l6ZSlcXG5AQCAtMTI3Nyw2ICsxMzc0LDEwIEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndilcXG4gXFx0aHBhZ2VfcG1kX25yID0gaHBhZ2VfcG1kX3NpemUgLyBwYWdlX3NpemU7XFxuIFxcdGhwYWdlX3BtZF9vcmRlciA9IF9fYnVpbHRpbl9jdHooaHBhZ2VfcG1kX25yKTtcXG4gXFxuK1xcdHBhcnNlX3Rlc3RfdHlwZShhcmdjLCBhcmd2KTtcXG4rXFxuK1xcdHNldGJ1ZihzdGRvdXQsIE5VTEwpO1xcbitcXG4gXFx0ZGVmYXVsdF9zZXR0aW5ncy5raHVnZXBhZ2VkLm1heF9wdGVzX25vbmUgPSBocGFnZV9wbWRfbnIgLSAxO1xcbiBcXHRkZWZhdWx0X3NldHRpbmdzLmtodWdlcGFnZWQubWF4X3B0ZXNfc3dhcCA9IGhwYWdlX3BtZF9uciAvIDg7XFxuIFxcdGRlZmF1bHRfc2V0dGluZ3Mua2h1Z2VwYWdlZC5tYXhfcHRlc19zaGFyZWQgPSBocGFnZV9wbWRfbnIgLyAyO1xcbkBAIC0xMjk0LDYgKzEzOTUsNyBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpXFxuIFxcdFRFU1QoY29sbGFwc2VfZnVsbCwga2h1Z2VwYWdlZF9jb250ZXh0LCByZWFkX3dyaXRlX2ZpbGVfcmVhZF9vcHMpO1xcbiBcXHRURVNUKGNvbGxhcHNlX2Z1bGwsIGtodWdlcGFnZWRfY29udGV4dCwgcmVhZF93cml0ZV9maWxlX3dyaXRlX29wcyk7XFxuIFxcdFRFU1QoY29sbGFwc2VfZnVsbCwga2h1Z2VwYWdlZF9jb250ZXh0LCBzaG1lbV9vcHMpO1xcbitcXHRURVNUKGNvbGxhcHNlX2Z1bGwsIG10aHBfa2h1Z2VwYWdlZF9jb250ZXh0LCBhbm9uX29wcyk7XFxuIFxcdFRFU1QoY29sbGFwc2VfZnVsbCwgbWFkdmlzZV9jb250ZXh0LCBhbm9uX29wcyk7XFxuIFxcdFRFU1QoY29sbGFwc2VfZnVsbCwgbWFkdmlzZV9jb250ZXh0LCByZWFkX29ubHlfZmlsZV9vcHMpO1xcbiBcXHRURVNUKGNvbGxhcHNlX2Z1bGwsIG1hZHZpc2VfY29udGV4dCwgcmVhZF93cml0ZV9maWxlX3JlYWRfb3BzKTtcXG5AQCAtMTMwMSw4ICsxNDAzLDExIEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndilcXG4gXFx0VEVTVChjb2xsYXBzZV9mdWxsLCBtYWR2aXNlX2NvbnRleHQsIHNobWVtX29wcyk7XFxuIFxcbiBcXHRURVNUKGNvbGxhcHNlX2VtcHR5LCBraHVnZXBhZ2VkX2NvbnRleHQsIGFub25fb3BzKTtcXG4rXFx0VEVTVChjb2xsYXBzZV9lbXB0eSwgbXRocF9raHVnZXBhZ2VkX2NvbnRleHQsIGFub25fb3BzKTtcXG4gXFx0VEVTVChjb2xsYXBzZV9lbXB0eSwgbWFkdmlzZV9jb250ZXh0LCBhbm9uX29wcyk7XFxuIFxcbitcXHRURVNUKGNvbGxhcHNlX3NpbmdsZV9tdGhwLCBtdGhwX2todWdlcGFnZWRfY29udGV4dCwgYW5vbl9vcHMpO1xcbitcXG4gXFx0VEVTVChjb2xsYXBzZV9zaW5nbGVfcHRlX2VudHJ5LCBraHVnZXBhZ2VkX2NvbnRleHQsIGFub25fb3BzKTtcXG4gXFx0VEVTVChjb2xsYXBzZV9zaW5nbGVfcHRlX2VudHJ5LCBraHVnZXBhZ2VkX2NvbnRleHQsIHJlYWRfb25seV9maWxlX29wcyk7XFxuIFxcdFRFU1QoY29sbGFwc2Vfc2luZ2xlX3B0ZV9lbnRyeSwga2h1Z2VwYWdlZF9jb250ZXh0LCByZWFkX3dyaXRlX2ZpbGVfcmVhZF9vcHMpO1xcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wYWdlbWFwX2lvY3RsLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wYWdlbWFwX2lvY3RsLmNcXG5pbmRleCAxYjJkZmZjYzk5OWIwLi5jZmQxOTg3MzM5YzEzIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3BhZ2VtYXBfaW9jdGwuY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3BhZ2VtYXBfaW9jdGwuY1xcbkBAIC0xMDg1LDcgKzEwODUsNyBAQCBzdGF0aWMgdm9pZCB1bnBvcHVsYXRlZF93cml0dGVuX3Rlc3QoY29uc3QgY2hhciAqbmFtZSwgY2hhciAqbWVtLCBsb25nIHNpemUsXFxuIFxcdG1lbXNldChtZW0sIDEsIHNpemUpO1xcbiBcXHRpZiAodXNlX3RocCBcXHUwMDI2XFx1MDAyNlxcbiBcXHQgICAgKG1hZHZpc2UobWVtLCBzaXplLCBNQURWX0NPTExBUFNFKSB8fFxcbi1cXHQgICAgICFjaGVja19odWdlX2Fub24obWVtLCBzaXplIC8gaHBhZ2Vfc2l6ZSwgaHBhZ2Vfc2l6ZSkpKSB7XFxuK1xcdCAgICAgIWNoZWNrX2h1Z2VfYW5vbihtZW0sIHNpemUsIHNpemUgLyBocGFnZV9zaXplLCBocGFnZV9zaXplKSkpIHtcXG4gXFx0XFx0a3NmdF90ZXN0X3Jlc3VsdF9za2lwKFxcXCIlcyBjb3VsZCBub3QgZm9ybSBhIFRIUFxcXFxuXFxcIiwgbmFtZSk7XFxuIFxcdFxcdGdvdG8gb3V0O1xcbiBcXHR9XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ByY3RsX3RocF9kaXNhYmxlLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wcmN0bF90aHBfZGlzYWJsZS5jXFxuaW5kZXggZDhkOWQxZGU1N2I4Yi4uODJjNmU5NmVhNmViMyAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wcmN0bF90aHBfZGlzYWJsZS5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcHJjdGxfdGhwX2Rpc2FibGUuY1xcbkBAIC02Nyw3ICs2Nyw3IEBAIHN0YXRpYyBpbnQgdGVzdF9tbWFwX3RocChlbnVtIHRocF9jb2xsYXBzZV90eXBlIG1hZHZpc2VfYnVmLCBzaXplX3QgcG1kc2l6ZSlcXG4gXFx0LyogSEFDSzogbWFrZSBzdXJlIHdlIGhhdmUgYSBzZXBhcmF0ZSBWTUEgdGhhdCB3ZSBjYW4gY2hlY2sgcmVsaWFibHkuICovXFxuIFxcdG1wcm90ZWN0KG1lbSwgcG1kc2l6ZSwgUFJPVF9SRUFEKTtcXG4gXFxuLVxcdHJldCA9IGNoZWNrX2h1Z2VfYW5vbihtZW0sIDEsIHBtZHNpemUpO1xcbitcXHRyZXQgPSBjaGVja19odWdlX2Fub24obWVtLCBwbWRzaXplLCAxLCBwbWRzaXplKTtcXG4gXFx0bXVubWFwKG1tYXBfbWVtLCBtbWFwX3NpemUpO1xcbiBcXHRyZXR1cm4gcmV0O1xcbiB9XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3J1bl92bXRlc3RzLnNoIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcnVuX3ZtdGVzdHMuc2hcXG5pbmRleCA2ODdkMTE1ZTNiZDgwLi5kMDlmOWY2YTM4NGVlIDEwMDc1NVxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3J1bl92bXRlc3RzLnNoXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcnVuX3ZtdGVzdHMuc2hcXG5AQCAtNDEwLDYgKzQxMCw4IEBAIENBVEVHT1JZPVxcXCJ0aHBcXFwiIHJ1bl90ZXN0IC4va2h1Z2VwYWdlZCBhbGw6c2htZW1cXG4gXFxuIENBVEVHT1JZPVxcXCJ0aHBcXFwiIHJ1bl90ZXN0IC4va2h1Z2VwYWdlZCAtcyA0IGFsbDpzaG1lbVxcbiBcXG4rQ0FURUdPUlk9XFxcInRocFxcXCIgcnVuX3Rlc3QgLi9raHVnZXBhZ2VkIC1jIDQgbXRocF9raHVnZXBhZ2VkOmFub25cXG4rXFxuICMgVHJ5IHRvIGNyZWF0ZSBYRlMgaWYgbm90IHByb3ZpZGVkXFxuIGlmIFsgLXogXFxcIiR7U1BMSVRfSFVHRV9QQUdFX1RFU1RfWEZTX1BBVEh9XFxcIiBdOyB0aGVuXFxuICAgICBpZiB0ZXN0X3NlbGVjdGVkIFxcXCJ0aHBcXFwiOyB0aGVuXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3NvZnQtZGlydHkuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3NvZnQtZGlydHkuY1xcbmluZGV4IGZiMTg2NGE2OGUxYzYuLmUxOThmYWNmNzhiYjUgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vc29mdC1kaXJ0eS5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vc29mdC1kaXJ0eS5jXFxuQEAgLTEwMyw3ICsxMDMsNyBAQCBzdGF0aWMgdm9pZCB0ZXN0X2h1Z2VwYWdlKGludCBwYWdlbWFwX2ZkLCBpbnQgcGFnZXNpemUpXFxuIFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBocGFnZV9sZW47IGkrKylcXG4gXFx0XFx0bWFwW2ldID0gKGNoYXIpaTtcXG4gXFxuLVxcdGlmIChjaGVja19odWdlX2Fub24obWFwLCAxLCBocGFnZV9sZW4pKSB7XFxuK1xcdGlmIChjaGVja19odWdlX2Fub24obWFwLCBocGFnZV9sZW4sIDEsIGhwYWdlX2xlbikpIHtcXG4gXFx0XFx0a3NmdF90ZXN0X3Jlc3VsdF9wYXNzKFxcXCJUZXN0ICVzIGh1Z2UgcGFnZSBhbGxvY2F0aW9uXFxcXG5cXFwiLCBfX2Z1bmNfXyk7XFxuIFxcbiBcXHRcXHRjbGVhcl9zb2Z0ZGlydHkoKTtcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vc3BsaXRfaHVnZV9wYWdlX3Rlc3QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3NwbGl0X2h1Z2VfcGFnZV90ZXN0LmNcXG5pbmRleCAzMmI5OTE0NzJmNzQ0Li44NmE2MDM2OTI4MjYxIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3NwbGl0X2h1Z2VfcGFnZV90ZXN0LmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9zcGxpdF9odWdlX3BhZ2VfdGVzdC5jXFxuQEAgLTEwNCwxMjkgKzEwNCw2IEBAIHN0YXRpYyBib29sIGlzX2JhY2tlZF9ieV9mb2xpbyhjaGFyICp2YWRkciwgaW50IG9yZGVyLCBpbnQgcGFnZW1hcF9mZCxcXG4gXFx0cmV0dXJuIGZhbHNlO1xcbiB9XFxuIFxcbi1zdGF0aWMgaW50IHZhZGRyX3BhZ2VmbGFnc19nZXQoY2hhciAqdmFkZHIsIGludCBwYWdlbWFwX2ZkLCBpbnQga3BhZ2VmbGFnc19mZCxcXG4tXFx0XFx0dWludDY0X3QgKmZsYWdzKVxcbi17XFxuLVxcdHVuc2lnbmVkIGxvbmcgcGZuO1xcbi1cXG4tXFx0cGZuID0gcGFnZW1hcF9nZXRfcGZuKHBhZ2VtYXBfZmQsIHZhZGRyKTtcXG4tXFxuLVxcdC8qIG5vbi1wcmVzZW50IFBGTiAqL1xcbi1cXHRpZiAocGZuID09IC0xVUwpXFxuLVxcdFxcdHJldHVybiAxO1xcbi1cXG4tXFx0aWYgKHBhZ2VmbGFnc19nZXQocGZuLCBrcGFnZWZsYWdzX2ZkLCBmbGFncykpXFxuLVxcdFxcdHJldHVybiAtMTtcXG4tXFxuLVxcdHJldHVybiAwO1xcbi19XFxuLVxcbi0vKlxcbi0gKiBnYXRoZXJfYWZ0ZXJfc3BsaXRfZm9saW9fb3JkZXJzIC0gc2NhbiB0aHJvdWdoIFt2YWRkcl9zdGFydCwgbGVuKSBhbmQgcmVjb3JkXFxuLSAqIGZvbGlvIG9yZGVyc1xcbi0gKlxcbi0gKiBAdmFkZHJfc3RhcnQ6IHN0YXJ0IHZhZGRyXFxuLSAqIEBsZW46IHJhbmdlIGxlbmd0aFxcbi0gKiBAcGFnZW1hcF9mZDogZmlsZSBkZXNjcmlwdG9yIHRvIC9wcm9jL1xcdTAwM2NwaWRcXHUwMDNlL3BhZ2VtYXBcXG4tICogQGtwYWdlZmxhZ3NfZmQ6IGZpbGUgZGVzY3JpcHRvciB0byAvcHJvYy9rcGFnZWZsYWdzXFxuLSAqIEBvcmRlcnM6IG91dHB1dCBmb2xpbyBvcmRlciBhcnJheVxcbi0gKiBAbnJfb3JkZXJzOiBmb2xpbyBvcmRlciBhcnJheSBzaXplXFxuLSAqXFxuLSAqIGdhdGhlcl9hZnRlcl9zcGxpdF9mb2xpb19vcmRlcnMoKSBzY2FuIHRocm91Z2ggW3ZhZGRyX3N0YXJ0LCBsZW4pIGFuZCBjaGVja1xcbi0gKiBhbGwgZm9saW9zIHdpdGhpbiB0aGUgcmFuZ2UgYW5kIHJlY29yZCB0aGVpciBvcmRlcnMuIEFsbCBvcmRlci0wIHBhZ2VzIHdpbGxcXG4tICogYmUgcmVjb3JkZWQuIE5vbi1wcmVzZW50IHZhZGRyIGlzIHNraXBwZWQuXFxuLSAqXFxuLSAqIE5PVEU6IHRoZSBmdW5jdGlvbiBpcyB1c2VkIHRvIGNoZWNrIGZvbGlvIG9yZGVycyBhZnRlciBhIHNwbGl0IGlzIHBlcmZvcm1lZCxcXG4tICogc28gaXQgYXNzdW1lcyBbdmFkZHJfc3RhcnQsIGxlbikgZnVsbHkgbWFwcyB0byBhZnRlci1zcGxpdCBmb2xpb3Mgd2l0aGluIHRoYXRcXG4tICogcmFuZ2UuXFxuLSAqXFxuLSAqIFJldHVybjogMCAtIG5vIGVycm9yLCAtMSAtIHVuaGFuZGxlZCBjYXNlc1xcbi0gKi9cXG4tc3RhdGljIGludCBnYXRoZXJfYWZ0ZXJfc3BsaXRfZm9saW9fb3JkZXJzKGNoYXIgKnZhZGRyX3N0YXJ0LCBzaXplX3QgbGVuLFxcbi1cXHRcXHRpbnQgcGFnZW1hcF9mZCwgaW50IGtwYWdlZmxhZ3NfZmQsIGludCBvcmRlcnNbXSwgaW50IG5yX29yZGVycylcXG4te1xcbi1cXHR1aW50NjRfdCBwYWdlX2ZsYWdzID0gMDtcXG4tXFx0aW50IGN1cl9vcmRlciA9IC0xO1xcbi1cXHRjaGFyICp2YWRkcjtcXG4tXFxuLVxcdGlmIChwYWdlbWFwX2ZkID09IC0xIHx8IGtwYWdlZmxhZ3NfZmQgPT0gLTEpXFxuLVxcdFxcdHJldHVybiAtMTtcXG4tXFx0aWYgKCFvcmRlcnMpXFxuLVxcdFxcdHJldHVybiAtMTtcXG4tXFx0aWYgKG5yX29yZGVycyBcXHUwMDNjPSAwKVxcbi1cXHRcXHRyZXR1cm4gLTE7XFxuLVxcbi1cXHRmb3IgKHZhZGRyID0gdmFkZHJfc3RhcnQ7IHZhZGRyIFxcdTAwM2MgdmFkZHJfc3RhcnQgKyBsZW47KSB7XFxuLVxcdFxcdGNoYXIgKm5leHRfZm9saW9fdmFkZHI7XFxuLVxcdFxcdGludCBzdGF0dXM7XFxuLVxcbi1cXHRcXHRzdGF0dXMgPSB2YWRkcl9wYWdlZmxhZ3NfZ2V0KHZhZGRyLCBwYWdlbWFwX2ZkLCBrcGFnZWZsYWdzX2ZkLFxcbi1cXHRcXHRcXHRcXHRcXHRcXHUwMDI2cGFnZV9mbGFncyk7XFxuLVxcdFxcdGlmIChzdGF0dXMgXFx1MDAzYyAwKVxcbi1cXHRcXHRcXHRyZXR1cm4gLTE7XFxuLVxcbi1cXHRcXHQvKiBza2lwIG5vbiBwcmVzZW50IHZhZGRyICovXFxuLVxcdFxcdGlmIChzdGF0dXMgPT0gMSkge1xcbi1cXHRcXHRcXHR2YWRkciArPSBwc2l6ZSgpO1xcbi1cXHRcXHRcXHRjb250aW51ZTtcXG4tXFx0XFx0fVxcbi1cXG4tXFx0XFx0LyogYWxsIG9yZGVyLTAgcGFnZXMgd2l0aCBwb3NzaWJsZSBmYWxzZSBwb3N0aXZlIChub24gZm9saW8pICovXFxuLVxcdFxcdGlmICghKHBhZ2VfZmxhZ3MgXFx1MDAyNiAoS1BGX0NPTVBPVU5EX0hFQUQgfCBLUEZfQ09NUE9VTkRfVEFJTCkpKSB7XFxuLVxcdFxcdFxcdG9yZGVyc1swXSsrO1xcbi1cXHRcXHRcXHR2YWRkciArPSBwc2l6ZSgpO1xcbi1cXHRcXHRcXHRjb250aW51ZTtcXG4tXFx0XFx0fVxcbi1cXG4tXFx0XFx0Lyogc2tpcCBub24gdGhwIGNvbXBvdW5kIHBhZ2VzICovXFxuLVxcdFxcdGlmICghKHBhZ2VfZmxhZ3MgXFx1MDAyNiBLUEZfVEhQKSkge1xcbi1cXHRcXHRcXHR2YWRkciArPSBwc2l6ZSgpO1xcbi1cXHRcXHRcXHRjb250aW51ZTtcXG4tXFx0XFx0fVxcbi1cXG4tXFx0XFx0LyogdnBuIHBvaW50cyB0byBwYXJ0IG9mIGEgVEhQIGF0IHRoaXMgcG9pbnQgKi9cXG4tXFx0XFx0aWYgKHBhZ2VfZmxhZ3MgXFx1MDAyNiBLUEZfQ09NUE9VTkRfSEVBRClcXG4tXFx0XFx0XFx0Y3VyX29yZGVyID0gMTtcXG4tXFx0XFx0ZWxzZSB7XFxuLVxcdFxcdFxcdHZhZGRyICs9IHBzaXplKCk7XFxuLVxcdFxcdFxcdGNvbnRpbnVlO1xcbi1cXHRcXHR9XFxuLVxcbi1cXHRcXHRuZXh0X2ZvbGlvX3ZhZGRyID0gdmFkZHIgKyAoMVVMIFxcdTAwM2NcXHUwMDNjIChjdXJfb3JkZXIgKyBwc2hpZnQoKSkpO1xcbi1cXG4tXFx0XFx0aWYgKG5leHRfZm9saW9fdmFkZHIgXFx1MDAzZT0gdmFkZHJfc3RhcnQgKyBsZW4pXFxuLVxcdFxcdFxcdGJyZWFrO1xcbi1cXG4tXFx0XFx0d2hpbGUgKChzdGF0dXMgPSB2YWRkcl9wYWdlZmxhZ3NfZ2V0KG5leHRfZm9saW9fdmFkZHIsXFxuLVxcdFxcdFxcdFxcdFxcdFxcdCAgICAgcGFnZW1hcF9mZCwga3BhZ2VmbGFnc19mZCxcXG4tXFx0XFx0XFx0XFx0XFx0XFx0ICAgICBcXHUwMDI2cGFnZV9mbGFncykpIFxcdTAwM2U9IDApIHtcXG4tXFx0XFx0XFx0LypcXG4tXFx0XFx0XFx0ICogbm9uIHByZXNlbnQgdmFkZHIsIG5leHQgY29tcG91bmQgaGVhZCBwYWdlLCBvclxcbi1cXHRcXHRcXHQgKiBvcmRlci0wIHBhZ2VcXG4tXFx0XFx0XFx0ICovXFxuLVxcdFxcdFxcdGlmIChzdGF0dXMgPT0gMSB8fFxcbi1cXHRcXHRcXHQgICAgKHBhZ2VfZmxhZ3MgXFx1MDAyNiBLUEZfQ09NUE9VTkRfSEVBRCkgfHxcXG4tXFx0XFx0XFx0ICAgICEocGFnZV9mbGFncyBcXHUwMDI2IChLUEZfQ09NUE9VTkRfSEVBRCB8IEtQRl9DT01QT1VORF9UQUlMKSkpIHtcXG4tXFx0XFx0XFx0XFx0aWYgKGN1cl9vcmRlciBcXHUwMDNjIG5yX29yZGVycykge1xcbi1cXHRcXHRcXHRcXHRcXHRvcmRlcnNbY3VyX29yZGVyXSsrO1xcbi1cXHRcXHRcXHRcXHRcXHRjdXJfb3JkZXIgPSAtMTtcXG4tXFx0XFx0XFx0XFx0XFx0dmFkZHIgPSBuZXh0X2ZvbGlvX3ZhZGRyO1xcbi1cXHRcXHRcXHRcXHR9XFxuLVxcdFxcdFxcdFxcdGJyZWFrO1xcbi1cXHRcXHRcXHR9XFxuLVxcbi1cXHRcXHRcXHRjdXJfb3JkZXIrKztcXG4tXFx0XFx0XFx0bmV4dF9mb2xpb192YWRkciA9IHZhZGRyICsgKDFVTCBcXHUwMDNjXFx1MDAzYyAoY3VyX29yZGVyICsgcHNoaWZ0KCkpKTtcXG4tXFx0XFx0fVxcbi1cXG4tXFx0XFx0aWYgKHN0YXR1cyBcXHUwMDNjIDApXFxuLVxcdFxcdFxcdHJldHVybiBzdGF0dXM7XFxuLVxcdH1cXG4tXFx0aWYgKGN1cl9vcmRlciBcXHUwMDNlIDAgXFx1MDAyNlxcdTAwMjYgY3VyX29yZGVyIFxcdTAwM2MgbnJfb3JkZXJzKVxcbi1cXHRcXHRvcmRlcnNbY3VyX29yZGVyXSsrO1xcbi1cXHRyZXR1cm4gMDtcXG4tfVxcbi1cXG4gc3RhdGljIGludCBjaGVja19hZnRlcl9zcGxpdF9mb2xpb19vcmRlcnMoY2hhciAqdmFkZHJfc3RhcnQsIHNpemVfdCBsZW4sXFxuIFxcdFxcdGludCBwYWdlbWFwX2ZkLCBpbnQga3BhZ2VmbGFnc19mZCwgaW50IG9yZGVyc1tdLCBpbnQgbnJfb3JkZXJzKVxcbiB7XFxuQEAgLTI0MCw3ICsxMTcsNyBAQCBzdGF0aWMgaW50IGNoZWNrX2FmdGVyX3NwbGl0X2ZvbGlvX29yZGVycyhjaGFyICp2YWRkcl9zdGFydCwgc2l6ZV90IGxlbixcXG4gXFx0XFx0a3NmdF9leGl0X2ZhaWxfbXNnKFxcXCJDYW5ub3QgYWxsb2NhdGUgbWVtb3J5IGZvciB2YWRkcl9vcmRlcnNcXFwiKTtcXG4gXFxuIFxcdG1lbXNldCh2YWRkcl9vcmRlcnMsIDAsIHNpemVvZihpbnQpICogbnJfb3JkZXJzKTtcXG4tXFx0c3RhdHVzID0gZ2F0aGVyX2FmdGVyX3NwbGl0X2ZvbGlvX29yZGVycyh2YWRkcl9zdGFydCwgbGVuLCBwYWdlbWFwX2ZkLFxcbitcXHRzdGF0dXMgPSBnYXRoZXJfZm9saW9fb3JkZXJzKHZhZGRyX3N0YXJ0LCBsZW4sIHBhZ2VtYXBfZmQsXFxuIFxcdFxcdFxcdFxcdCAgICAga3BhZ2VmbGFnc19mZCwgdmFkZHJfb3JkZXJzLCBucl9vcmRlcnMpO1xcbiBcXHRpZiAoc3RhdHVzKVxcbiBcXHRcXHRrc2Z0X2V4aXRfZmFpbF9tc2coXFxcImdhdGhlciBmb2xpbyBpbmZvIGZhaWxlZFxcXFxuXFxcIik7XFxuQEAgLTI5Niw3ICsxNzMsNyBAQCBzdGF0aWMgdm9pZCB2ZXJpZnlfcnNzX2Fub25fc3BsaXRfaHVnZV9wYWdlX2FsbF96ZXJvZXMoY2hhciAqb25lX3BhZ2UsIGludCBucl9ocFxcbiBcXHR1bnNpZ25lZCBsb25nIHJzc19hbm9uX2JlZm9yZSwgcnNzX2Fub25fYWZ0ZXI7XFxuIFxcdHNpemVfdCBpO1xcbiBcXG4tXFx0aWYgKCFjaGVja19odWdlX2Fub24ob25lX3BhZ2UsIG5yX2hwYWdlcywgcG1kX3BhZ2VzaXplKSlcXG4rXFx0aWYgKCFjaGVja19odWdlX2Fub24ob25lX3BhZ2UsIG5yX2hwYWdlcyAqIHBtZF9wYWdlc2l6ZSwgbnJfaHBhZ2VzLCBwbWRfcGFnZXNpemUpKVxcbiBcXHRcXHRrc2Z0X2V4aXRfZmFpbF9tc2coXFxcIk5vIFRIUCBpcyBhbGxvY2F0ZWRcXFxcblxcXCIpO1xcbiBcXG4gXFx0cnNzX2Fub25fYmVmb3JlID0gcnNzX2Fub24oKTtcXG5AQCAtMzExLDcgKzE4OCw3IEBAIHN0YXRpYyB2b2lkIHZlcmlmeV9yc3NfYW5vbl9zcGxpdF9odWdlX3BhZ2VfYWxsX3plcm9lcyhjaGFyICpvbmVfcGFnZSwgaW50IG5yX2hwXFxuIFxcdFxcdGlmIChvbmVfcGFnZVtpXSAhPSAoY2hhcikwKVxcbiBcXHRcXHRcXHRrc2Z0X2V4aXRfZmFpbF9tc2coXFxcIiVsZCBieXRlIGNvcnJ1cHRlZFxcXFxuXFxcIiwgaSk7XFxuIFxcbi1cXHRpZiAoIWNoZWNrX2h1Z2VfYW5vbihvbmVfcGFnZSwgMCwgcG1kX3BhZ2VzaXplKSlcXG4rXFx0aWYgKCFjaGVja19odWdlX2Fub24ob25lX3BhZ2UsIG5yX2hwYWdlcyAqIHBtZF9wYWdlc2l6ZSwgMCwgcG1kX3BhZ2VzaXplKSlcXG4gXFx0XFx0a3NmdF9leGl0X2ZhaWxfbXNnKFxcXCJTdGlsbCBBbm9uSHVnZVBhZ2VzIG5vdCBzcGxpdFxcXFxuXFxcIik7XFxuIFxcbiBcXHRyc3NfYW5vbl9hZnRlciA9IHJzc19hbm9uKCk7XFxuQEAgLTM0Nyw3ICsyMjQsNyBAQCBzdGF0aWMgdm9pZCBzcGxpdF9wbWRfdGhwX3RvX29yZGVyKGludCBvcmRlcilcXG4gXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIGxlbjsgaSsrKVxcbiBcXHRcXHRvbmVfcGFnZVtpXSA9IChjaGFyKWk7XFxuIFxcbi1cXHRpZiAoIWNoZWNrX2h1Z2VfYW5vbihvbmVfcGFnZSwgNCwgcG1kX3BhZ2VzaXplKSlcXG4rXFx0aWYgKCFjaGVja19odWdlX2Fub24ob25lX3BhZ2UsIDQgKiBwbWRfcGFnZXNpemUsIDQsIHBtZF9wYWdlc2l6ZSkpXFxuIFxcdFxcdGtzZnRfZXhpdF9mYWlsX21zZyhcXFwiTm8gVEhQIGlzIGFsbG9jYXRlZFxcXFxuXFxcIik7XFxuIFxcbiBcXHQvKiBzcGxpdCBhbGwgVEhQcyAqL1xcbkBAIC0zNjYsNyArMjQzLDcgQEAgc3RhdGljIHZvaWQgc3BsaXRfcG1kX3RocF90b19vcmRlcihpbnQgb3JkZXIpXFxuIFxcdFxcdFxcdFxcdFxcdCAgIChwbWRfb3JkZXIgKyAxKSkpXFxuIFxcdFxcdGtzZnRfZXhpdF9mYWlsX21zZyhcXFwiVW5leHBlY3RlZCBUSFAgc3BsaXRcXFxcblxcXCIpO1xcbiBcXG4tXFx0aWYgKCFjaGVja19odWdlX2Fub24ob25lX3BhZ2UsIDAsIHBtZF9wYWdlc2l6ZSkpXFxuK1xcdGlmICghY2hlY2tfaHVnZV9hbm9uKG9uZV9wYWdlLCA0ICogcG1kX3BhZ2VzaXplLCAwLCBwbWRfcGFnZXNpemUpKVxcbiBcXHRcXHRrc2Z0X2V4aXRfZmFpbF9tc2coXFxcIlN0aWxsIEFub25IdWdlUGFnZXMgbm90IHNwbGl0XFxcXG5cXFwiKTtcXG4gXFxuIFxcdGtzZnRfdGVzdF9yZXN1bHRfcGFzcyhcXFwiU3BsaXQgaHVnZSBwYWdlcyB0byBvcmRlciAlZCBzdWNjZXNzZnVsXFxcXG5cXFwiLCBvcmRlcik7XFxuQEAgLTM5Myw3ICsyNzAsNyBAQCBzdGF0aWMgdm9pZCBzcGxpdF9wdGVfbWFwcGVkX3RocCh2b2lkKVxcbiBcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgdGhwX2FyZWFfc2l6ZTsgaSsrKVxcbiBcXHRcXHR0aHBfYXJlYVtpXSA9IChjaGFyKWk7XFxuIFxcbi1cXHRpZiAoIWNoZWNrX2h1Z2VfYW5vbih0aHBfYXJlYSwgbnJfdGhwcywgcG1kX3BhZ2VzaXplKSkge1xcbitcXHRpZiAoIWNoZWNrX2h1Z2VfYW5vbih0aHBfYXJlYSwgbnJfdGhwcyAqIHBtZF9wYWdlc2l6ZSwgbnJfdGhwcywgcG1kX3BhZ2VzaXplKSkge1xcbiBcXHRcXHRrc2Z0X3Rlc3RfcmVzdWx0X3NraXAoXFxcIk5vdCBhbGwgVEhQcyBhbGxvY2F0ZWRcXFxcblxcXCIpO1xcbiBcXHRcXHRnb3RvIG91dDtcXG4gXFx0fVxcbkBAIC02NTcsNyArNTM0LDcgQEAgc3RhdGljIGludCBjcmVhdGVfcGFnZWNhY2hlX3RocF9hbmRfZmQoY29uc3QgY2hhciAqdGVzdGZpbGUsIHNpemVfdCBmZF9zaXplLFxcbiBcXG4gXFx0Zm9yY2VfcmVhZF9wYWdlcygqYWRkciwgZmRfc2l6ZSAvIHBtZF9wYWdlc2l6ZSwgcG1kX3BhZ2VzaXplKTtcXG4gXFxuLVxcdGlmICghY2hlY2tfaHVnZV9maWxlKCphZGRyLCBmZF9zaXplIC8gcG1kX3BhZ2VzaXplLCBwbWRfcGFnZXNpemUpKSB7XFxuK1xcdGlmICghY2hlY2tfaHVnZV9maWxlKCphZGRyLCBmZF9zaXplLCBmZF9zaXplIC8gcG1kX3BhZ2VzaXplLCBwbWRfcGFnZXNpemUpKSB7XFxuIFxcdFxcdGtzZnRfcHJpbnRfbXNnKFxcXCJObyBsYXJnZSBwYWdlY2FjaGUgZm9saW8gZ2VuZXJhdGVkLCBwbGVhc2UgcHJvdmlkZSBhIGZpbGVzeXN0ZW0gc3VwcG9ydGluZyBsYXJnZSBmb2xpb1xcXFxuXFxcIik7XFxuIFxcdFxcdG11bm1hcCgqYWRkciwgZmRfc2l6ZSk7XFxuIFxcdFxcdGNsb3NlKCpmZCk7XFxuQEAgLTczNSw3ICs2MTIsNyBAQCBzdGF0aWMgdm9pZCBzcGxpdF90aHBfaW5fcGFnZWNhY2hlX3RvX29yZGVyX2F0KHNpemVfdCBmZF9zaXplLFxcbiBcXHRcXHRnb3RvIG91dDtcXG4gXFx0fVxcbiBcXG4tXFx0aWYgKCFjaGVja19odWdlX2ZpbGUoYWRkciwgMCwgcG1kX3BhZ2VzaXplKSkge1xcbitcXHRpZiAoIWNoZWNrX2h1Z2VfZmlsZShhZGRyLCBmZF9zaXplLCAwLCBwbWRfcGFnZXNpemUpKSB7XFxuIFxcdFxcdGtzZnRfcHJpbnRfbXNnKFxcXCJTdGlsbCBGaWxlUG1kTWFwcGVkIG5vdCBzcGxpdFxcXFxuXFxcIik7XFxuIFxcdFxcdGVyciA9IEVYSVRfRkFJTFVSRTtcXG4gXFx0XFx0Z290byBvdXQ7XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3VmZmQtY29tbW9uLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS91ZmZkLWNvbW1vbi5jXFxuaW5kZXggZjQ4ZjVkNDU5NGFiMC4uMWZiOTY3ZWY0OTg1NCAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS91ZmZkLWNvbW1vbi5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdWZmZC1jb21tb24uY1xcbkBAIC0xOTQsNyArMTk0LDkgQEAgc3RhdGljIHZvaWQgc2htZW1fYWxpYXNfbWFwcGluZyh1ZmZkX2dsb2JhbF90ZXN0X29wdHNfdCAqZ29wdHMsIF9fdTY0ICpzdGFydCxcXG4gXFxuIHN0YXRpYyB2b2lkIHNobWVtX2NoZWNrX3BtZF9tYXBwaW5nKHVmZmRfZ2xvYmFsX3Rlc3Rfb3B0c190ICpnb3B0cywgdm9pZCAqcCwgaW50IGV4cGVjdF9ucl9ocGFnZXMpXFxuIHtcXG4tXFx0aWYgKCFjaGVja19odWdlX3NobWVtKGdvcHRzLVxcdTAwM2VhcmVhX2RzdF9hbGlhcywgZXhwZWN0X25yX2hwYWdlcyxcXG4rXFx0c2l6ZV90IGxlbiA9IGV4cGVjdF9ucl9ocGFnZXMgKiByZWFkX3BtZF9wYWdlc2l6ZSgpO1xcbitcXG4rXFx0aWYgKCFjaGVja19odWdlX3NobWVtKGdvcHRzLVxcdTAwM2VhcmVhX2RzdF9hbGlhcywgbGVuLCBleHBlY3RfbnJfaHBhZ2VzLFxcbiBcXHRcXHRcXHQgICAgICByZWFkX3BtZF9wYWdlc2l6ZSgpKSlcXG4gXFx0XFx0ZXJyKFxcXCJEaWQgbm90IGZpbmQgZXhwZWN0ZWQgJWQgbnVtYmVyIG9mIGh1Z2VwYWdlc1xcXCIsXFxuIFxcdFxcdCAgICBleHBlY3RfbnJfaHBhZ2VzKTtcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdm1fdXRpbC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdm1fdXRpbC5jXFxuaW5kZXggZWYxZWExMTk4MWE3NC4uMTNiNWNmZjdkZmUzMSAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS92bV91dGlsLmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS92bV91dGlsLmNcXG5AQCAtMTUsNiArMTUsOSBAQFxcbiAjZGVmaW5lIFNNQVBfRklMRV9QQVRIIFxcXCIvcHJvYy9zZWxmL3NtYXBzXFxcIlxcbiAjZGVmaW5lIFNUQVRVU19GSUxFX1BBVEggXFxcIi9wcm9jL3NlbGYvc3RhdHVzXFxcIlxcbiAjZGVmaW5lIE1BWF9MSU5FX0xFTkdUSCA1MDBcXG4rI2RlZmluZSBQQUdFTUFQX1BBVEggXFxcIi9wcm9jL3NlbGYvcGFnZW1hcFxcXCJcXG4rI2RlZmluZSBLUEFHRUZMQUdTX1BBVEggXFxcIi9wcm9jL2twYWdlZmxhZ3NcXFwiXFxuKyNkZWZpbmUgTUFYX05SX09SREVSUyAyMFxcbiBcXG4gdW5zaWduZWQgaW50IF9fcGFnZV9zaXplO1xcbiB1bnNpZ25lZCBpbnQgX19wYWdlX3NoaWZ0O1xcbkBAIC0xOTQsNiArMTk3LDEyNSBAQCB1bnNpZ25lZCBsb25nIHJzc19hbm9uKHZvaWQpXFxuIFxcdHJldHVybiByc3NfYW5vbjtcXG4gfVxcbiBcXG4rc3RhdGljIGludCB2YWRkcl9wYWdlZmxhZ3NfZ2V0KGNoYXIgKnZhZGRyLCBpbnQgcGFnZW1hcF9mZCwgaW50IGtwYWdlZmxhZ3NfZmQsXFxuK1xcdFxcdHVpbnQ2NF90ICpmbGFncylcXG4re1xcbitcXHR1bnNpZ25lZCBsb25nIHBmbjtcXG4rXFxuK1xcdHBmbiA9IHBhZ2VtYXBfZ2V0X3BmbihwYWdlbWFwX2ZkLCB2YWRkcik7XFxuK1xcbitcXHQvKiBub24tcHJlc2VudCBQRk4gKi9cXG4rXFx0aWYgKHBmbiA9PSAtMVVMKVxcbitcXHRcXHRyZXR1cm4gMTtcXG4rXFxuK1xcdGlmIChwYWdlZmxhZ3NfZ2V0KHBmbiwga3BhZ2VmbGFnc19mZCwgZmxhZ3MpKVxcbitcXHRcXHRyZXR1cm4gLTE7XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rLypcXG4rICogZ2F0aGVyX2ZvbGlvX29yZGVycyAtIHNjYW4gdGhyb3VnaCBbdmFkZHJfc3RhcnQsIGxlbikgYW5kIHJlY29yZFxcbisgKiBmb2xpbyBvcmRlcnNcXG4rICpcXG4rICogQHZhZGRyX3N0YXJ0OiBzdGFydCB2YWRkclxcbisgKiBAbGVuOiByYW5nZSBsZW5ndGhcXG4rICogQHBhZ2VtYXBfZmQ6IGZpbGUgZGVzY3JpcHRvciB0byAvcHJvYy9cXHUwMDNjcGlkXFx1MDAzZS9wYWdlbWFwXFxuKyAqIEBrcGFnZWZsYWdzX2ZkOiBmaWxlIGRlc2NyaXB0b3IgdG8gL3Byb2Mva3BhZ2VmbGFnc1xcbisgKiBAb3JkZXJzOiBvdXRwdXQgZm9saW8gb3JkZXIgYXJyYXlcXG4rICogQG5yX29yZGVyczogZm9saW8gb3JkZXIgYXJyYXkgc2l6ZVxcbisgKlxcbisgKiBnYXRoZXJfZm9saW9fb3JkZXJzKCkgc2NhbiB0aHJvdWdoIFt2YWRkcl9zdGFydCwgbGVuKSBhbmQgY2hlY2tcXG4rICogYWxsIGZvbGlvcyB3aXRoaW4gdGhlIHJhbmdlIGFuZCByZWNvcmQgdGhlaXIgb3JkZXJzLiBBbGwgb3JkZXItMCBwYWdlcyB3aWxsXFxuKyAqIGJlIHJlY29yZGVkLiBOb24tcHJlc2VudCB2YWRkciBpcyBza2lwcGVkLlxcbisgKlxcbisgKiBSZXR1cm46IDAgLSBubyBlcnJvciwgLTEgLSB1bmhhbmRsZWQgY2FzZXNcXG4rICovXFxuK2ludCBnYXRoZXJfZm9saW9fb3JkZXJzKGNoYXIgKnZhZGRyX3N0YXJ0LCBzaXplX3QgbGVuLFxcbitcXHRcXHRpbnQgcGFnZW1hcF9mZCwgaW50IGtwYWdlZmxhZ3NfZmQsIGludCBvcmRlcnNbXSwgaW50IG5yX29yZGVycylcXG4re1xcbitcXHR1aW50NjRfdCBwYWdlX2ZsYWdzID0gMDtcXG4rXFx0aW50IGN1cl9vcmRlciA9IC0xO1xcbitcXHRjaGFyICp2YWRkcjtcXG4rXFxuK1xcdGlmIChwYWdlbWFwX2ZkID09IC0xIHx8IGtwYWdlZmxhZ3NfZmQgPT0gLTEpXFxuK1xcdFxcdHJldHVybiAtMTtcXG4rXFx0aWYgKCFvcmRlcnMpXFxuK1xcdFxcdHJldHVybiAtMTtcXG4rXFx0aWYgKG5yX29yZGVycyBcXHUwMDNjPSAwKVxcbitcXHRcXHRyZXR1cm4gLTE7XFxuK1xcbitcXHRmb3IgKHZhZGRyID0gdmFkZHJfc3RhcnQ7IHZhZGRyIFxcdTAwM2MgdmFkZHJfc3RhcnQgKyBsZW47KSB7XFxuK1xcdFxcdGNoYXIgKm5leHRfZm9saW9fdmFkZHI7XFxuK1xcdFxcdGludCBzdGF0dXM7XFxuK1xcbitcXHRcXHRzdGF0dXMgPSB2YWRkcl9wYWdlZmxhZ3NfZ2V0KHZhZGRyLCBwYWdlbWFwX2ZkLCBrcGFnZWZsYWdzX2ZkLFxcbitcXHRcXHRcXHRcXHRcXHUwMDI2cGFnZV9mbGFncyk7XFxuK1xcdFxcdGlmIChzdGF0dXMgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRyZXR1cm4gLTE7XFxuK1xcbitcXHRcXHQvKiBza2lwIG5vbiBwcmVzZW50IHZhZGRyICovXFxuK1xcdFxcdGlmIChzdGF0dXMgPT0gMSkge1xcbitcXHRcXHRcXHR2YWRkciArPSBwc2l6ZSgpO1xcbitcXHRcXHRcXHRjb250aW51ZTtcXG4rXFx0XFx0fVxcbitcXG4rXFx0XFx0LyogYWxsIG9yZGVyLTAgcGFnZXMgd2l0aCBwb3NzaWJsZSBmYWxzZSBwb3N0aXZlIChub24gZm9saW8pICovXFxuK1xcdFxcdGlmICghKHBhZ2VfZmxhZ3MgXFx1MDAyNiAoS1BGX0NPTVBPVU5EX0hFQUQgfCBLUEZfQ09NUE9VTkRfVEFJTCkpKSB7XFxuK1xcdFxcdFxcdG9yZGVyc1swXSsrO1xcbitcXHRcXHRcXHR2YWRkciArPSBwc2l6ZSgpO1xcbitcXHRcXHRcXHRjb250aW51ZTtcXG4rXFx0XFx0fVxcbitcXG4rXFx0XFx0Lyogc2tpcCBub24gdGhwIGNvbXBvdW5kIHBhZ2VzICovXFxuK1xcdFxcdGlmICghKHBhZ2VfZmxhZ3MgXFx1MDAyNiBLUEZfVEhQKSkge1xcbitcXHRcXHRcXHR2YWRkciArPSBwc2l6ZSgpO1xcbitcXHRcXHRcXHRjb250aW51ZTtcXG4rXFx0XFx0fVxcbitcXG4rXFx0XFx0LyogdnBuIHBvaW50cyB0byBwYXJ0IG9mIGEgVEhQIGF0IHRoaXMgcG9pbnQgKi9cXG4rXFx0XFx0aWYgKHBhZ2VfZmxhZ3MgXFx1MDAyNiBLUEZfQ09NUE9VTkRfSEVBRClcXG4rXFx0XFx0XFx0Y3VyX29yZGVyID0gMTtcXG4rXFx0XFx0ZWxzZSB7XFxuK1xcdFxcdFxcdHZhZGRyICs9IHBzaXplKCk7XFxuK1xcdFxcdFxcdGNvbnRpbnVlO1xcbitcXHRcXHR9XFxuK1xcbitcXHRcXHRuZXh0X2ZvbGlvX3ZhZGRyID0gdmFkZHIgKyAoMVVMIFxcdTAwM2NcXHUwMDNjIChjdXJfb3JkZXIgKyBwc2hpZnQoKSkpO1xcbitcXG4rXFx0XFx0aWYgKG5leHRfZm9saW9fdmFkZHIgXFx1MDAzZT0gdmFkZHJfc3RhcnQgKyBsZW4pXFxuK1xcdFxcdFxcdGJyZWFrO1xcbitcXG4rXFx0XFx0d2hpbGUgKChzdGF0dXMgPSB2YWRkcl9wYWdlZmxhZ3NfZ2V0KG5leHRfZm9saW9fdmFkZHIsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgICAgcGFnZW1hcF9mZCwga3BhZ2VmbGFnc19mZCxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICAgICBcXHUwMDI2cGFnZV9mbGFncykpIFxcdTAwM2U9IDApIHtcXG4rXFx0XFx0XFx0LypcXG4rXFx0XFx0XFx0ICogbm9uIHByZXNlbnQgdmFkZHIsIG5leHQgY29tcG91bmQgaGVhZCBwYWdlLCBvclxcbitcXHRcXHRcXHQgKiBvcmRlci0wIHBhZ2VcXG4rXFx0XFx0XFx0ICovXFxuK1xcdFxcdFxcdGlmIChzdGF0dXMgPT0gMSB8fFxcbitcXHRcXHRcXHQgICAgKHBhZ2VfZmxhZ3MgXFx1MDAyNiBLUEZfQ09NUE9VTkRfSEVBRCkgfHxcXG4rXFx0XFx0XFx0ICAgICEocGFnZV9mbGFncyBcXHUwMDI2IChLUEZfQ09NUE9VTkRfSEVBRCB8IEtQRl9DT01QT1VORF9UQUlMKSkpIHtcXG4rXFx0XFx0XFx0XFx0aWYgKGN1cl9vcmRlciBcXHUwMDNjIG5yX29yZGVycykge1xcbitcXHRcXHRcXHRcXHRcXHRvcmRlcnNbY3VyX29yZGVyXSsrO1xcbitcXHRcXHRcXHRcXHRcXHRjdXJfb3JkZXIgPSAtMTtcXG4rXFx0XFx0XFx0XFx0XFx0dmFkZHIgPSBuZXh0X2ZvbGlvX3ZhZGRyO1xcbitcXHRcXHRcXHRcXHR9XFxuK1xcdFxcdFxcdFxcdGJyZWFrO1xcbitcXHRcXHRcXHR9XFxuK1xcbitcXHRcXHRcXHRjdXJfb3JkZXIrKztcXG4rXFx0XFx0XFx0bmV4dF9mb2xpb192YWRkciA9IHZhZGRyICsgKDFVTCBcXHUwMDNjXFx1MDAzYyAoY3VyX29yZGVyICsgcHNoaWZ0KCkpKTtcXG4rXFx0XFx0fVxcbitcXG4rXFx0XFx0aWYgKHN0YXR1cyBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdHJldHVybiBzdGF0dXM7XFxuK1xcdH1cXG4rXFx0aWYgKGN1cl9vcmRlciBcXHUwMDNlIDAgXFx1MDAyNlxcdTAwMjYgY3VyX29yZGVyIFxcdTAwM2MgbnJfb3JkZXJzKVxcbitcXHRcXHRvcmRlcnNbY3VyX29yZGVyXSsrO1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4gY2hhciAqX19nZXRfc21hcF9lbnRyeSh2b2lkICphZGRyLCBjb25zdCBjaGFyICpwYXR0ZXJuLCBjaGFyICpidWYsIHNpemVfdCBsZW4pXFxuIHtcXG4gXFx0aW50IHJldDtcXG5AQCAtMjI5LDcgKzM1MSw3IEBAIGNoYXIgKl9fZ2V0X3NtYXBfZW50cnkodm9pZCAqYWRkciwgY29uc3QgY2hhciAqcGF0dGVybiwgY2hhciAqYnVmLCBzaXplX3QgbGVuKVxcbiBcXHRyZXR1cm4gZW50cnk7XFxuIH1cXG4gXFxuLWJvb2wgX19jaGVja19odWdlKHZvaWQgKmFkZHIsIGNoYXIgKnBhdHRlcm4sIGludCBucl9ocGFnZXMsXFxuK3N0YXRpYyBib29sIF9fY2hlY2tfcG1kX2h1Z2Uodm9pZCAqYWRkciwgY2hhciAqcGF0dGVybiwgaW50IG5yX2hwYWdlcyxcXG4gXFx0XFx0ICB1aW50NjRfdCBocGFnZV9zaXplKVxcbiB7XFxuIFxcdGNoYXIgYnVmZmVyW01BWF9MSU5FX0xFTkdUSF07XFxuQEAgLTI0NywxOSArMzY5LDg0IEBAIGJvb2wgX19jaGVja19odWdlKHZvaWQgKmFkZHIsIGNoYXIgKnBhdHRlcm4sIGludCBucl9ocGFnZXMsXFxuIFxcdHJldHVybiB0aHAgPT0gKG5yX2hwYWdlcyAqIChocGFnZV9zaXplIFxcdTAwM2VcXHUwMDNlIDEwKSk7XFxuIH1cXG4gXFxuLWJvb2wgY2hlY2tfaHVnZV9hbm9uKHZvaWQgKmFkZHIsIGludCBucl9ocGFnZXMsIHVpbnQ2NF90IGhwYWdlX3NpemUpXFxuK3N0YXRpYyBib29sIGNoZWNrX2xhcmdlX2ZvbGlvcyh2b2lkICphZGRyLCBzaXplX3QgbGVuLCBpbnQgbnJfaHBhZ2VzLFxcbitcXHRcXHR1aW50NjRfdCBocGFnZV9zaXplKVxcbit7XFxuK1xcdGludCBvcmRlciA9IDAsIHBhZ2VzaXplID0gZ2V0cGFnZXNpemUoKTtcXG4rXFx0dW5zaWduZWQgaW50IG5yX3BhZ2VzID0gaHBhZ2Vfc2l6ZSAvIHBhZ2VzaXplO1xcbitcXHRpbnQgb3JkZXJzW01BWF9OUl9PUkRFUlNdLCBzdGF0dXM7XFxuK1xcdGludCBwYWdlbWFwX2ZkLCBrcGFnZWZsYWdzX2ZkO1xcbitcXHRib29sIHJldCA9IGZhbHNlO1xcbitcXG4rXFx0aWYgKCFucl9wYWdlcylcXG4rXFx0XFx0a3NmdF9leGl0X2ZhaWxfbXNnKFxcXCJpbnZhbGlkIGh1Z2VwYWdlIHNpemVcXFxcblxcXCIpO1xcbitcXG4rXFx0b3JkZXIgPSAzMSAtIF9fYnVpbHRpbl9jbHoobnJfcGFnZXMpO1xcbitcXHRpZiAoIW9yZGVyIHx8IG9yZGVyIFxcdTAwM2U9IE1BWF9OUl9PUkRFUlMpXFxuK1xcdFxcdGtzZnRfZXhpdF9mYWlsX21zZyhcXFwiaW52YWxpZCBvcmRlclxcXFxuXFxcIik7XFxuK1xcbitcXHRtZW1zZXQob3JkZXJzLCAwLCBzaXplb2YoaW50KSAqIE1BWF9OUl9PUkRFUlMpO1xcbitcXHRwYWdlbWFwX2ZkID0gb3BlbihQQUdFTUFQX1BBVEgsIE9fUkRPTkxZKTtcXG4rXFx0aWYgKHBhZ2VtYXBfZmQgPT0gLTEpXFxuK1xcdFxcdGtzZnRfZXhpdF9mYWlsX21zZyhcXFwicmVhZCBwYWdlbWFwIGZhaWxcXFxcblxcXCIpO1xcbitcXG4rXFx0a3BhZ2VmbGFnc19mZCA9IG9wZW4oS1BBR0VGTEFHU19QQVRILCBPX1JET05MWSk7XFxuK1xcdGlmIChrcGFnZWZsYWdzX2ZkID09IC0xKSB7XFxuK1xcdFxcdGNsb3NlKHBhZ2VtYXBfZmQpO1xcbitcXHRcXHRrc2Z0X2V4aXRfZmFpbF9tc2coXFxcInJlYWQga3BhZ2VmbGFncyBmYWlsXFxcXG5cXFwiKTtcXG4rXFx0fVxcbitcXG4rXFx0c3RhdHVzID0gZ2F0aGVyX2ZvbGlvX29yZGVycyhhZGRyLCBsZW4sIHBhZ2VtYXBfZmQsXFxuK1xcdFxcdFxcdGtwYWdlZmxhZ3NfZmQsIG9yZGVycywgTUFYX05SX09SREVSUyk7XFxuK1xcdGlmIChzdGF0dXMpXFxuK1xcdFxcdGdvdG8gb3V0O1xcbitcXG4rXFx0aWYgKG9yZGVyc1tvcmRlcl0gPT0gbnJfaHBhZ2VzKVxcbitcXHRcXHRyZXQgPSB0cnVlO1xcbitcXG4rb3V0OlxcbitcXHRjbG9zZShwYWdlbWFwX2ZkKTtcXG4rXFx0Y2xvc2Uoa3BhZ2VmbGFnc19mZCk7XFxuK1xcdHJldHVybiByZXQ7XFxuK31cXG4rXFxuK2Jvb2wgY2hlY2tfaHVnZV9hbm9uKHZvaWQgKmFkZHIsIHNpemVfdCBsZW4sIGludCBucl9ocGFnZXMsIHVpbnQ2NF90IGhwYWdlX3NpemUpXFxuIHtcXG4tXFx0cmV0dXJuIF9fY2hlY2tfaHVnZShhZGRyLCBcXFwiQW5vbkh1Z2VQYWdlczogXFxcIiwgbnJfaHBhZ2VzLCBocGFnZV9zaXplKTtcXG4rXFx0dWludDY0X3QgcG1kX3BhZ2VzaXplID0gcmVhZF9wbWRfcGFnZXNpemUoKTtcXG4rXFxuK1xcdGlmICghcG1kX3BhZ2VzaXplKVxcbitcXHRcXHRrc2Z0X2V4aXRfZmFpbF9tc2coXFxcInJlYWRpbmcgUE1EIHBhZ2VzaXplIGZhaWxlZFxcXFxuXFxcIik7XFxuK1xcbitcXHRpZiAoaHBhZ2Vfc2l6ZSA9PSBwbWRfcGFnZXNpemUpXFxuK1xcdFxcdHJldHVybiBfX2NoZWNrX3BtZF9odWdlKGFkZHIsIFxcXCJBbm9uSHVnZVBhZ2VzOiBcXFwiLCBucl9ocGFnZXMsIGhwYWdlX3NpemUpO1xcbitcXG4rXFx0cmV0dXJuIGNoZWNrX2xhcmdlX2ZvbGlvcyhhZGRyLCBsZW4sIG5yX2hwYWdlcywgaHBhZ2Vfc2l6ZSk7XFxuIH1cXG4gXFxuLWJvb2wgY2hlY2tfaHVnZV9maWxlKHZvaWQgKmFkZHIsIGludCBucl9ocGFnZXMsIHVpbnQ2NF90IGhwYWdlX3NpemUpXFxuK2Jvb2wgY2hlY2tfaHVnZV9maWxlKHZvaWQgKmFkZHIsIHNpemVfdCBsZW4sIGludCBucl9ocGFnZXMsIHVpbnQ2NF90IGhwYWdlX3NpemUpXFxuIHtcXG4tXFx0cmV0dXJuIF9fY2hlY2tfaHVnZShhZGRyLCBcXFwiRmlsZVBtZE1hcHBlZDpcXFwiLCBucl9ocGFnZXMsIGhwYWdlX3NpemUpO1xcbitcXHR1aW50NjRfdCBwbWRfcGFnZXNpemUgPSByZWFkX3BtZF9wYWdlc2l6ZSgpO1xcbitcXG4rXFx0aWYgKCFwbWRfcGFnZXNpemUpXFxuK1xcdFxcdGtzZnRfZXhpdF9mYWlsX21zZyhcXFwicmVhZGluZyBQTUQgcGFnZXNpemUgZmFpbGVkXFxcXG5cXFwiKTtcXG4rXFxuK1xcdGlmIChocGFnZV9zaXplID09IHBtZF9wYWdlc2l6ZSlcXG4rXFx0XFx0cmV0dXJuIF9fY2hlY2tfcG1kX2h1Z2UoYWRkciwgXFxcIkZpbGVQbWRNYXBwZWQ6XFxcIiwgbnJfaHBhZ2VzLCBocGFnZV9zaXplKTtcXG4rXFxuK1xcdHJldHVybiBjaGVja19sYXJnZV9mb2xpb3MoYWRkciwgbGVuLCBucl9ocGFnZXMsIGhwYWdlX3NpemUpO1xcbiB9XFxuIFxcbi1ib29sIGNoZWNrX2h1Z2Vfc2htZW0odm9pZCAqYWRkciwgaW50IG5yX2hwYWdlcywgdWludDY0X3QgaHBhZ2Vfc2l6ZSlcXG4rYm9vbCBjaGVja19odWdlX3NobWVtKHZvaWQgKmFkZHIsIHNpemVfdCBsZW4sIGludCBucl9ocGFnZXMsIHVpbnQ2NF90IGhwYWdlX3NpemUpXFxuIHtcXG4tXFx0cmV0dXJuIF9fY2hlY2tfaHVnZShhZGRyLCBcXFwiU2htZW1QbWRNYXBwZWQ6XFxcIiwgbnJfaHBhZ2VzLCBocGFnZV9zaXplKTtcXG4rXFx0dWludDY0X3QgcG1kX3BhZ2VzaXplID0gcmVhZF9wbWRfcGFnZXNpemUoKTtcXG4rXFxuK1xcdGlmICghcG1kX3BhZ2VzaXplKVxcbitcXHRcXHRrc2Z0X2V4aXRfZmFpbF9tc2coXFxcInJlYWRpbmcgUE1EIHBhZ2VzaXplIGZhaWxlZFxcXFxuXFxcIik7XFxuK1xcbitcXHRpZiAoaHBhZ2Vfc2l6ZSA9PSBwbWRfcGFnZXNpemUpXFxuK1xcdFxcdHJldHVybiBfX2NoZWNrX3BtZF9odWdlKGFkZHIsIFxcXCJTaG1lbVBtZE1hcHBlZDpcXFwiLCBucl9ocGFnZXMsIGhwYWdlX3NpemUpO1xcbitcXG4rXFx0cmV0dXJuIGNoZWNrX2xhcmdlX2ZvbGlvcyhhZGRyLCBsZW4sIG5yX2hwYWdlcywgaHBhZ2Vfc2l6ZSk7XFxuIH1cXG4gXFxuIGludDY0X3QgYWxsb2NhdGVfdHJhbnNodWdlKHZvaWQgKnB0ciwgaW50IHBhZ2VtYXBfZmQpXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ZtX3V0aWwuaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ZtX3V0aWwuaFxcbmluZGV4IDc3OTkxNTRiNjdlZWQuLjlhNDlhZjg4NzAyZTQgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdm1fdXRpbC5oXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdm1fdXRpbC5oXFxuQEAgLTkwLDExICs5MCwxMyBAQCB2b2lkIGNsZWFyX3NvZnRkaXJ0eSh2b2lkKTtcXG4gYm9vbCBjaGVja19mb3JfcGF0dGVybihGSUxFICpmcCwgY29uc3QgY2hhciAqcGF0dGVybiwgY2hhciAqYnVmLCBzaXplX3QgbGVuKTtcXG4gdWludDY0X3QgcmVhZF9wbWRfcGFnZXNpemUodm9pZCk7XFxuIHVuc2lnbmVkIGxvbmcgcnNzX2Fub24odm9pZCk7XFxuLWJvb2wgY2hlY2tfaHVnZV9hbm9uKHZvaWQgKmFkZHIsIGludCBucl9ocGFnZXMsIHVpbnQ2NF90IGhwYWdlX3NpemUpO1xcbi1ib29sIGNoZWNrX2h1Z2VfZmlsZSh2b2lkICphZGRyLCBpbnQgbnJfaHBhZ2VzLCB1aW50NjRfdCBocGFnZV9zaXplKTtcXG4tYm9vbCBjaGVja19odWdlX3NobWVtKHZvaWQgKmFkZHIsIGludCBucl9ocGFnZXMsIHVpbnQ2NF90IGhwYWdlX3NpemUpO1xcbitib29sIGNoZWNrX2h1Z2VfYW5vbih2b2lkICphZGRyLCBzaXplX3QgbGVuLCBpbnQgbnJfaHBhZ2VzLCB1aW50NjRfdCBocGFnZV9zaXplKTtcXG4rYm9vbCBjaGVja19odWdlX2ZpbGUodm9pZCAqYWRkciwgc2l6ZV90IGxlbiwgaW50IG5yX2hwYWdlcywgdWludDY0X3QgaHBhZ2Vfc2l6ZSk7XFxuK2Jvb2wgY2hlY2tfaHVnZV9zaG1lbSh2b2lkICphZGRyLCBzaXplX3QgbGVuLCBpbnQgbnJfaHBhZ2VzLCB1aW50NjRfdCBocGFnZV9zaXplKTtcXG4gaW50NjRfdCBhbGxvY2F0ZV90cmFuc2h1Z2Uodm9pZCAqcHRyLCBpbnQgcGFnZW1hcF9mZCk7XFxuIGludCBwYWdlZmxhZ3NfZ2V0KHVuc2lnbmVkIGxvbmcgcGZuLCBpbnQga3BhZ2VmbGFnc19mZCwgdWludDY0X3QgKmZsYWdzKTtcXG4raW50IGdhdGhlcl9mb2xpb19vcmRlcnMoY2hhciAqdmFkZHJfc3RhcnQsIHNpemVfdCBsZW4sXFxuK1xcdFxcdGludCBwYWdlbWFwX2ZkLCBpbnQga3BhZ2VmbGFnc19mZCwgaW50IG9yZGVyc1tdLCBpbnQgbnJfb3JkZXJzKTtcXG4gXFxuIGludCB1ZmZkX3JlZ2lzdGVyKGludCB1ZmZkLCB2b2lkICphZGRyLCB1aW50NjRfdCBsZW4sXFxuIFxcdFxcdCAgYm9vbCBtaXNzLCBib29sIHdwLCBib29sIG1pbm9yKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMDQ6MDc6MTEuNTI3MDgxODUyWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6NzQ4NzE5MzcwOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggb25seSBtb2RpZmllcyB1c2VyLXNwYWNlIHNlbGZ0ZXN0cyBpbiB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS8gYW5kIGRvZXMgbm90IG1ha2UgYW55IGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIGNvZGUgaXRzZWxmLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNTRiYzc4NTNkNGY1ZjVlNWVkOGRmYmI5ZmZmZmMzOTVjMzNkNGRhNFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgQXVnIDYgMDQ6MDc6MTAgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9mb2xpb19zcGxpdF9yYWNlX3Rlc3QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2ZvbGlvX3NwbGl0X3JhY2VfdGVzdC5jXG5pbmRleCA2MzI5ZTM3ZmZmNGM5Li40NWI4NGY3YjM2NGUwIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZm9saW9fc3BsaXRfcmFjZV90ZXN0LmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2ZvbGlvX3NwbGl0X3JhY2VfdGVzdC5jXG5AQCAtMTgyLDcgKzE4Miw3IEBAIHN0YXRpYyB1aW50NjRfdCBydW5faXRlcmF0aW9uKHZvaWQpXG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBUT1RBTF9QQUdFUzsgaSsrKVxuIFx0XHRmaWxsX3BhZ2UobW1hcF9iYXNlLCBpKTtcbiBcbi1cdGlmICghY2hlY2tfaHVnZV9zaG1lbShtbWFwX2Jhc2UsIE5SX1BNRF9QQUdFLCBwbWRfcGFnZXNpemUpKVxuK1x0aWYgKCFjaGVja19odWdlX3NobWVtKG1tYXBfYmFzZSwgRklMRV9TSVpFLCBOUl9QTURfUEFHRSwgcG1kX3BhZ2VzaXplKSlcbiBcdFx0a3NmdF9leGl0X2ZhaWxfbXNnKFwiTm8gc2htZW0gVEhQIGlzIGFsbG9jYXRlZFxcblwiKTtcbiBcbiBcdGlmIChwdGhyZWFkX2JhcnJpZXJfaW5pdChcdTAwMjZjdGwuYmFycmllciwgTlVMTCwgTlVNX1JFQURFUl9USFJFQURTICsgMSkgIT0gMClcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9raHVnZXBhZ2VkLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9raHVnZXBhZ2VkLmNcbmluZGV4IGIyNTRiYWY5ZTBiNzUuLjdmODdhZWVkMzAxYzQgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9raHVnZXBhZ2VkLmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2todWdlcGFnZWQuY1xuQEAgLTI2LDkgKzI2LDExIEBAXG4gXG4gI2RlZmluZSBCQVNFX0FERFIgKCh2b2lkICopKDFVTCBcdTAwM2NcdTAwM2MgMzApKVxuIHN0YXRpYyB1bnNpZ25lZCBsb25nIGhwYWdlX3BtZF9zaXplO1xuK3N0YXRpYyBpbnQgaHBhZ2VfcG1kX29yZGVyO1xuIHN0YXRpYyB1bnNpZ25lZCBsb25nIHBhZ2Vfc2l6ZTtcbiBzdGF0aWMgaW50IGhwYWdlX3BtZF9ucjtcbiBzdGF0aWMgaW50IGFub25fb3JkZXI7XG4rc3RhdGljIGludCBjb2xsYXBzZV9vcmRlcjtcbiBcbiAjZGVmaW5lIFBJRF9TTUFQUyBcIi9wcm9jL3NlbGYvc21hcHNcIlxuICNkZWZpbmUgVEVTVF9GSUxFIFwiY29sbGFwc2VfdGVzdF9maWxlXCJcbkBAIC01MSw3ICs1Myw3IEBAIHN0cnVjdCBtZW1fb3BzIHtcbiBcdHZvaWQgKigqc2V0dXBfYXJlYSkoaW50IG5yX2hwYWdlcyk7XG4gXHR2b2lkICgqY2xlYW51cF9hcmVhKSh2b2lkICpwLCB1bnNpZ25lZCBsb25nIHNpemUpO1xuIFx0dm9pZCAoKmZhdWx0KSh2b2lkICpwLCB1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCk7XG4tXHRib29sICgqY2hlY2tfaHVnZSkodm9pZCAqYWRkciwgaW50IG5yX2hwYWdlcyk7XG4rXHRib29sICgqY2hlY2tfaHVnZSkodm9pZCAqYWRkciwgc2l6ZV90IGxlbiwgaW50IG5yX2hwYWdlcywgdW5zaWduZWQgbG9uZyBocGFnZV9zaXplKTtcbiBcdGNvbnN0IGNoYXIgKm5hbWU7XG4gfTtcbiBcbkBAIC02OSw2ICs3MSw3IEBAIHN0cnVjdCBjb2xsYXBzZV9jb250ZXh0IHtcbiB9O1xuIFxuIHN0YXRpYyBzdHJ1Y3QgY29sbGFwc2VfY29udGV4dCAqa2h1Z2VwYWdlZF9jb250ZXh0O1xuK3N0YXRpYyBzdHJ1Y3QgY29sbGFwc2VfY29udGV4dCAqbXRocF9raHVnZXBhZ2VkX2NvbnRleHQ7XG4gc3RhdGljIHN0cnVjdCBjb2xsYXBzZV9jb250ZXh0ICptYWR2aXNlX2NvbnRleHQ7XG4gXG4gc3RydWN0IGZpbGVfaW5mbyB7XG5AQCAtMjk1LDcgKzI5OCw3IEBAIHN0YXRpYyB2b2lkICphbGxvY19ocGFnZShzdHJ1Y3QgbWVtX29wcyAqb3BzKVxuIFx0a3NmdF9wcmludF9tc2coXCJBbGxvY2F0ZSBodWdlIHBhZ2UuLi5cIik7XG4gXHRpZiAobWFkdmlzZV9jb2xsYXBzZV9yZXRyeShwLCBocGFnZV9wbWRfc2l6ZSkpXG4gXHRcdGtzZnRfZXhpdF9mYWlsX3BlcnJvcihcIm1hZHZpc2UoTUFEVl9DT0xMQVBTRSlcIik7XG4tXHRpZiAoIW9wcy1cdTAwM2VjaGVja19odWdlKHAsIDEpKVxuK1x0aWYgKCFvcHMtXHUwMDNlY2hlY2tfaHVnZShwLCBocGFnZV9wbWRfc2l6ZSwgMSwgaHBhZ2VfcG1kX3NpemUpKVxuIFx0XHRrc2Z0X2V4aXRfZmFpbF9wZXJyb3IoXCJtYWR2aXNlKE1BRFZfQ09MTEFQU0UpXCIpO1xuIFx0aWYgKG1hZHZpc2UocCwgaHBhZ2VfcG1kX3NpemUsIE1BRFZfSFVHRVBBR0UpKVxuIFx0XHRrc2Z0X2V4aXRfZmFpbF9wZXJyb3IoXCJtYWR2aXNlKE1BRFZfSFVHRVBBR0UpXCIpO1xuQEAgLTMyOSw5ICszMzIsMTAgQEAgc3RhdGljIHZvaWQgYW5vbl9mYXVsdCh2b2lkICpwLCB1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZClcbiBcdGZpbGxfbWVtb3J5KHAsIHN0YXJ0LCBlbmQpO1xuIH1cbiBcbi1zdGF0aWMgYm9vbCBhbm9uX2NoZWNrX2h1Z2Uodm9pZCAqYWRkciwgaW50IG5yX2hwYWdlcylcbitzdGF0aWMgYm9vbCBhbm9uX2NoZWNrX2h1Z2Uodm9pZCAqYWRkciwgc2l6ZV90IGxlbiwgaW50IG5yX2hwYWdlcyxcbitcdFx0dW5zaWduZWQgbG9uZyBocGFnZV9zaXplKVxuIHtcbi1cdHJldHVybiBjaGVja19odWdlX2Fub24oYWRkciwgbnJfaHBhZ2VzLCBocGFnZV9wbWRfc2l6ZSk7XG4rXHRyZXR1cm4gY2hlY2tfaHVnZV9hbm9uKGFkZHIsIGxlbiwgbnJfaHBhZ2VzLCBocGFnZV9zaXplKTtcbiB9XG4gXG4gc3RhdGljIHZvaWQgKmZpbGVfc2V0dXBfYXJlYV9jb21tb24oaW50IG5yX2hwYWdlcywgZW51bSBmaWxlX3NldHVwX29wcyBzZXR1cClcbkBAIC00MzEsMTMgKzQzNSwxNCBAQCBzdGF0aWMgdm9pZCBmaWxlX2ZhdWx0X3dyaXRlKHZvaWQgKnAsIHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kKVxuIFx0XHRrc2Z0X2V4aXRfZmFpbF9wZXJyb3IoXCJtYWR2aXNlKE1BRFZfUE9QVUxBVEVfV1JJVEUpXCIpO1xuIH1cbiBcbi1zdGF0aWMgYm9vbCBmaWxlX2NoZWNrX2h1Z2Uodm9pZCAqYWRkciwgaW50IG5yX2hwYWdlcylcbitzdGF0aWMgYm9vbCBmaWxlX2NoZWNrX2h1Z2Uodm9pZCAqYWRkciwgc2l6ZV90IGxlbiwgaW50IG5yX2hwYWdlcyxcbitcdFx0dW5zaWduZWQgbG9uZyBocGFnZV9zaXplKVxuIHtcbiBcdHN3aXRjaCAoZmluZm8udHlwZSkge1xuIFx0Y2FzZSBWTUFfRklMRTpcbi1cdFx0cmV0dXJuIGNoZWNrX2h1Z2VfZmlsZShhZGRyLCBucl9ocGFnZXMsIGhwYWdlX3BtZF9zaXplKTtcbitcdFx0cmV0dXJuIGNoZWNrX2h1Z2VfZmlsZShhZGRyLCBsZW4sIG5yX2hwYWdlcywgaHBhZ2Vfc2l6ZSk7XG4gXHRjYXNlIFZNQV9TSE1FTTpcbi1cdFx0cmV0dXJuIGNoZWNrX2h1Z2Vfc2htZW0oYWRkciwgbnJfaHBhZ2VzLCBocGFnZV9wbWRfc2l6ZSk7XG4rXHRcdHJldHVybiBjaGVja19odWdlX3NobWVtKGFkZHIsIGxlbiwgbnJfaHBhZ2VzLCBocGFnZV9zaXplKTtcbiBcdGRlZmF1bHQ6XG4gXHRcdGV4aXQoRVhJVF9GQUlMVVJFKTtcbiBcdFx0cmV0dXJuIGZhbHNlO1xuQEAgLTQ2Nyw5ICs0NzIsMTAgQEAgc3RhdGljIHZvaWQgc2htZW1fY2xlYW51cF9hcmVhKHZvaWQgKnAsIHVuc2lnbmVkIGxvbmcgc2l6ZSlcbiBcdGNsb3NlKGZpbmZvLmZkKTtcbiB9XG4gXG4tc3RhdGljIGJvb2wgc2htZW1fY2hlY2tfaHVnZSh2b2lkICphZGRyLCBpbnQgbnJfaHBhZ2VzKVxuK3N0YXRpYyBib29sIHNobWVtX2NoZWNrX2h1Z2Uodm9pZCAqYWRkciwgc2l6ZV90IGxlbiwgaW50IG5yX2hwYWdlcyxcbitcdFx0dW5zaWduZWQgbG9uZyBocGFnZV9zaXplKVxuIHtcbi1cdHJldHVybiBjaGVja19odWdlX3NobWVtKGFkZHIsIG5yX2hwYWdlcywgaHBhZ2VfcG1kX3NpemUpO1xuK1x0cmV0dXJuIGNoZWNrX2h1Z2Vfc2htZW0oYWRkciwgbGVuLCBucl9ocGFnZXMsIGhwYWdlX3NpemUpO1xuIH1cbiBcbiBzdGF0aWMgc3RydWN0IG1lbV9vcHMgX19hbm9uX29wcyA9IHtcbkBAIC01NTIsNyArNTU4LDcgQEAgc3RhdGljIHZvaWQgX19tYWR2aXNlX2NvbGxhcHNlKGNvbnN0IGNoYXIgKm1zZywgY2hhciAqcCwgaW50IG5yX2hwYWdlcyxcbiBcdHJldCA9IG1hZHZpc2VfY29sbGFwc2VfcmV0cnkocCwgbnJfaHBhZ2VzICogaHBhZ2VfcG1kX3NpemUpO1xuIFx0aWYgKCgoYm9vbClyZXQpID09IGV4cGVjdClcbiBcdFx0ZmFpbChcIkZhaWw6IEJhZCByZXR1cm4gdmFsdWVcIik7XG4tXHRlbHNlIGlmICghb3BzLVx1MDAzZWNoZWNrX2h1Z2UocCwgZXhwZWN0ID8gbnJfaHBhZ2VzIDogMCkpXG4rXHRlbHNlIGlmICghb3BzLVx1MDAzZWNoZWNrX2h1Z2UocCwgbnJfaHBhZ2VzICogaHBhZ2VfcG1kX3NpemUsIGV4cGVjdCA/IG5yX2hwYWdlcyA6IDAsIGhwYWdlX3BtZF9zaXplKSlcbiBcdFx0ZmFpbChcIkZhaWw6IGNoZWNrX2h1Z2UoKVwiKTtcbiBcdGVsc2VcbiBcdFx0c3VjY2VzcyhcIk9LXCIpO1xuQEAgLTU2NCwzMCArNTcwLDMxIEBAIHN0YXRpYyB2b2lkIG1hZHZpc2VfY29sbGFwc2UoY29uc3QgY2hhciAqbXNnLCBjaGFyICpwLCBpbnQgbnJfaHBhZ2VzLFxuIFx0XHRcdCAgICAgc3RydWN0IG1lbV9vcHMgKm9wcywgYm9vbCBleHBlY3QpXG4ge1xuIFx0LyogU2FuaXR5IGNoZWNrICovXG4tXHRpZiAoIW9wcy1cdTAwM2VjaGVja19odWdlKHAsIDApKVxuK1x0aWYgKCFvcHMtXHUwMDNlY2hlY2tfaHVnZShwLCBucl9ocGFnZXMgKiBocGFnZV9wbWRfc2l6ZSwgMCwgaHBhZ2VfcG1kX3NpemUpKVxuIFx0XHRrc2Z0X2V4aXRfZmFpbF9tc2coXCJVbmV4cGVjdGVkIGh1Z2UgcGFnZVxcblwiKTtcbiBcdF9fbWFkdmlzZV9jb2xsYXBzZShtc2csIHAsIG5yX2hwYWdlcywgb3BzLCBleHBlY3QpO1xuIH1cbiBcbiAjZGVmaW5lIFRJQ0sgNTAwMDAwXG4tc3RhdGljIGJvb2wgd2FpdF9mb3Jfc2Nhbihjb25zdCBjaGFyICptc2csIGNoYXIgKnAsIGludCBucl9ocGFnZXMsXG4tXHRcdFx0ICBzdHJ1Y3QgbWVtX29wcyAqb3BzKVxuK3N0YXRpYyBib29sIHdhaXRfZm9yX3NjYW4oY29uc3QgY2hhciAqbXNnLCBjaGFyICpwLCBzaXplX3QgbGVuLFxuK1x0XHRpbnQgbnJfaHBhZ2VzLCBpbnQgY29sbGFwX29yZGVyLCBzdHJ1Y3QgbWVtX29wcyAqb3BzKVxuIHtcbitcdHVuc2lnbmVkIGxvbmcgaHBhZ2Vfc2l6ZSA9IHBhZ2Vfc2l6ZSBcdTAwM2NcdTAwM2MgY29sbGFwX29yZGVyO1xuIFx0aW50IGZ1bGxfc2NhbnM7XG4gXHRpbnQgdGltZW91dCA9IDY7IC8qIDMgc2Vjb25kcyAqL1xuIFxuIFx0LyogU2FuaXR5IGNoZWNrICovXG4tXHRpZiAoIW9wcy1cdTAwM2VjaGVja19odWdlKHAsIDApKVxuK1x0aWYgKCFvcHMtXHUwMDNlY2hlY2tfaHVnZShwLCBsZW4sIDAsIGhwYWdlX3NpemUpKVxuIFx0XHRrc2Z0X2V4aXRfZmFpbF9tc2coXCJVbmV4cGVjdGVkIGh1Z2UgcGFnZVxcblwiKTtcbiBcbi1cdG1hZHZpc2UocCwgbnJfaHBhZ2VzICogaHBhZ2VfcG1kX3NpemUsIE1BRFZfSFVHRVBBR0UpO1xuK1x0bWFkdmlzZShwLCBsZW4sIE1BRFZfSFVHRVBBR0UpO1xuIFxuIFx0LyogV2FpdCB1bnRpbCB0aGUgc2Vjb25kIGZ1bGxfc2NhbiBjb21wbGV0ZWQgKi9cbiBcdGZ1bGxfc2NhbnMgPSB0aHBfcmVhZF9udW0oXCJraHVnZXBhZ2VkL2Z1bGxfc2NhbnNcIikgKyAyO1xuIFxuIFx0a3NmdF9wcmludF9tc2coXCIlcy4uLlwiLCBtc2cpO1xuIFx0d2hpbGUgKHRpbWVvdXQtLSkge1xuLVx0XHRpZiAob3BzLVx1MDAzZWNoZWNrX2h1Z2UocCwgbnJfaHBhZ2VzKSlcbitcdFx0aWYgKG9wcy1cdTAwM2VjaGVja19odWdlKHAsIGxlbiwgbnJfaHBhZ2VzLCBocGFnZV9zaXplKSlcbiBcdFx0XHRicmVhaztcbiBcdFx0aWYgKHRocF9yZWFkX251bShcImtodWdlcGFnZWQvZnVsbF9zY2Fuc1wiKSBcdTAwM2U9IGZ1bGxfc2NhbnMpXG4gXHRcdFx0YnJlYWs7XG5AQCAtNjAxLDYgKzYwOCw4IEBAIHN0YXRpYyBib29sIHdhaXRfZm9yX3NjYW4oY29uc3QgY2hhciAqbXNnLCBjaGFyICpwLCBpbnQgbnJfaHBhZ2VzLFxuIHN0YXRpYyB2b2lkIGtodWdlcGFnZWRfY29sbGFwc2UoY29uc3QgY2hhciAqbXNnLCBjaGFyICpwLCBpbnQgbnJfaHBhZ2VzLFxuIFx0XHRcdFx0c3RydWN0IG1lbV9vcHMgKm9wcywgYm9vbCBleHBlY3QpXG4ge1xuK1x0c2l6ZV90IGxlbiA9IG5yX2hwYWdlcyAqIGhwYWdlX3BtZF9zaXplO1xuK1xuIFx0LypcbiBcdCAqIHJlYWRcdTAwMjZ3cml0ZSBmaWxlIGNvbGxhcHNlIGZhaWxzIHNpbmNlIGtodWdlcGFnZWQgZG9lcyBub3QgZmx1c2hcbiBcdCAqIHRoZSB0YXJnZXQgZGlydHkgZm9saW9zXG5AQCAtNjA4LDcgKzYxNyw3IEBAIHN0YXRpYyB2b2lkIGtodWdlcGFnZWRfY29sbGFwc2UoY29uc3QgY2hhciAqbXNnLCBjaGFyICpwLCBpbnQgbnJfaHBhZ2VzLFxuIFx0aWYgKCFpc190bXBmcyhvcHMpIFx1MDAyNlx1MDAyNiBvcHMgPT0gXHUwMDI2X19yZWFkX3dyaXRlX2ZpbGVfd3JpdGVfb3BzKVxuIFx0XHRleHBlY3QgPSBmYWxzZTtcbiBcbi1cdGlmICh3YWl0X2Zvcl9zY2FuKG1zZywgcCwgbnJfaHBhZ2VzLCBvcHMpKSB7XG4rXHRpZiAod2FpdF9mb3Jfc2Nhbihtc2csIHAsIGxlbiwgbnJfaHBhZ2VzLCBocGFnZV9wbWRfb3JkZXIsIG9wcykpIHtcbiBcdFx0aWYgKGV4cGVjdClcbiBcdFx0XHRmYWlsKFwiVGltZW91dFwiKTtcbiBcdFx0ZWxzZVxuQEAgLTYyNCwxMCArNjMzLDU0IEBAIHN0YXRpYyB2b2lkIGtodWdlcGFnZWRfY29sbGFwc2UoY29uc3QgY2hhciAqbXNnLCBjaGFyICpwLCBpbnQgbnJfaHBhZ2VzLFxuIFx0aWYgKG9wcyAhPSBcdTAwMjZfX2Fub25fb3BzKVxuIFx0XHRvcHMtXHUwMDNlZmF1bHQocCwgMCwgbnJfaHBhZ2VzICogaHBhZ2VfcG1kX3NpemUpO1xuIFxuLVx0aWYgKG9wcy1cdTAwM2VjaGVja19odWdlKHAsIGV4cGVjdCA/IG5yX2hwYWdlcyA6IDApKVxuK1x0aWYgKG9wcy1cdTAwM2VjaGVja19odWdlKHAsIGxlbiwgZXhwZWN0ID8gbnJfaHBhZ2VzIDogMCwgaHBhZ2VfcG1kX3NpemUpKVxuK1x0XHRzdWNjZXNzKFwiT0tcIik7XG4rXHRlbHNlXG4rXHRcdGZhaWwoXCJGYWlsXCIpO1xuK31cbitcbitzdGF0aWMgdm9pZCBtdGhwX2todWdlcGFnZWRfY29sbGFwc2UoY29uc3QgY2hhciAqbXNnLCBjaGFyICpwLCBpbnQgbnJfaHBhZ2VzLFxuK1x0XHRcdFx0c3RydWN0IG1lbV9vcHMgKm9wcywgYm9vbCBleHBlY3QpXG4re1xuK1x0dW5zaWduZWQgbG9uZyBocGFnZV9zaXplID0gcGFnZV9zaXplIFx1MDAzY1x1MDAzYyBjb2xsYXBzZV9vcmRlcjtcbitcdHN0cnVjdCB0aHBfc2V0dGluZ3Mgc2V0dGluZ3MgPSAqdGhwX2N1cnJlbnRfc2V0dGluZ3MoKTtcbitcdC8qIG1USFAgY29sbHBhc2Ugb25seSBhbGxvY2F0ZXMgUE1EIHNpemVkIG1lbW9yeSAqL1xuK1x0c2l6ZV90IGxlbiA9IGhwYWdlX3BtZF9zaXplO1xuK1xuK1x0LyogU2V0IG1USFAgc2V0dGluZyBmb3IgbVRIUCBjb2xsYXBzZSAqL1xuK1x0aWYgKG9wcyA9PSBcdTAwMjZfX2Fub25fb3BzKSB7XG4rXHRcdHNldHRpbmdzLnRocF9lbmFibGVkID0gVEhQX05FVkVSO1xuK1x0XHRzZXR0aW5ncy5odWdlcGFnZXNbY29sbGFwc2Vfb3JkZXJdLmVuYWJsZWQgPSBUSFBfTUFEVklTRTtcbitcdH1cbitcbitcdHRocF9wdXNoX3NldHRpbmdzKFx1MDAyNnNldHRpbmdzKTtcbitcbitcdGlmICh3YWl0X2Zvcl9zY2FuKG1zZywgcCwgbGVuLCBucl9ocGFnZXMsIGNvbGxhcHNlX29yZGVyLCBvcHMpKSB7XG4rXHRcdGlmIChleHBlY3QpXG4rXHRcdFx0ZmFpbChcIlRpbWVvdXRcIik7XG4rXHRcdGVsc2VcbitcdFx0XHRzdWNjZXNzKFwiT0tcIik7XG4rXG4rXHRcdC8qIFJlc3RvcmUgVEhQIHNldHRpbmdzIGZvciBtVEhQIGNvbGxhcHNlLiAqL1xuK1x0XHR0aHBfcG9wX3NldHRpbmdzKCk7XG4rXHRcdHJldHVybjtcbitcdH1cbitcbitcdC8qXG4rXHQgKiBGb3IgZmlsZSBhbmQgc2htZW0gbWVtb3J5LCBraHVnZXBhZ2VkIG9ubHkgcmV0cmFjdHMgcHRlIGVudHJpZXMgYWZ0ZXJcbitcdCAqIHB1dHRpbmcgdGhlIG5ldyBodWdlcGFnZSBpbiB0aGUgcGFnZSBjYWNoZS4gVGhlIGh1Z2VwYWdlIG11c3QgYmVcbitcdCAqIHN1YnNlcXVlbnRseSByZWZhdWx0ZWQgdG8gaW5zdGFsbCB0aGUgcG1kIG1hcHBpbmcgZm9yIHRoZSBtbS5cbitcdCAqL1xuK1x0aWYgKG9wcyAhPSBcdTAwMjZfX2Fub25fb3BzKVxuK1x0XHRvcHMtXHUwMDNlZmF1bHQocCwgMCwgbnJfaHBhZ2VzICogaHBhZ2Vfc2l6ZSk7XG4rXG4rXHRpZiAob3BzLVx1MDAzZWNoZWNrX2h1Z2UocCwgbGVuLCBleHBlY3QgPyBucl9ocGFnZXMgOiAwLCBocGFnZV9zaXplKSlcbiBcdFx0c3VjY2VzcyhcIk9LXCIpO1xuIFx0ZWxzZVxuIFx0XHRmYWlsKFwiRmFpbFwiKTtcbitcbitcdC8qIFJlc3RvcmUgVEhQIHNldHRpbmdzIGZvciBtVEhQIGNvbGxhcHNlLiAqL1xuK1x0dGhwX3BvcF9zZXR0aW5ncygpO1xuIH1cbiBcbiBzdGF0aWMgc3RydWN0IGNvbGxhcHNlX2NvbnRleHQgX19raHVnZXBhZ2VkX2NvbnRleHQgPSB7XG5AQCAtNjM2LDYgKzY4OSwxMiBAQCBzdGF0aWMgc3RydWN0IGNvbGxhcHNlX2NvbnRleHQgX19raHVnZXBhZ2VkX2NvbnRleHQgPSB7XG4gXHQubmFtZSA9IFwia2h1Z2VwYWdlZFwiLFxuIH07XG4gXG4rc3RhdGljIHN0cnVjdCBjb2xsYXBzZV9jb250ZXh0IF9fbXRocF9raHVnZXBhZ2VkX2NvbnRleHQgPSB7XG4rXHQuY29sbGFwc2UgPSBcdTAwMjZtdGhwX2todWdlcGFnZWRfY29sbGFwc2UsXG4rXHQuZW5mb3JjZV9wdGVfc2Nhbl9saW1pdHMgPSB0cnVlLFxuK1x0Lm5hbWUgPSBcIm10aHBfa2h1Z2VwYWdlZFwiLFxuK307XG4rXG4gc3RhdGljIHN0cnVjdCBjb2xsYXBzZV9jb250ZXh0IF9fbWFkdmlzZV9jb250ZXh0ID0ge1xuIFx0LmNvbGxhcHNlID0gXHUwMDI2bWFkdmlzZV9jb2xsYXBzZSxcbiBcdC5lbmZvcmNlX3B0ZV9zY2FuX2xpbWl0cyA9IGZhbHNlLFxuQEAgLTY1Myw3ICs3MTIsNyBAQCBzdGF0aWMgdm9pZCBhbGxvY19hdF9mYXVsdCh2b2lkKVxuIFx0cCA9IGFsbG9jX21hcHBpbmcoMSk7XG4gXHQqcCA9IDE7XG4gXHRrc2Z0X3ByaW50X21zZyhcIkFsbG9jYXRlIGh1Z2UgcGFnZSBvbiBmYXVsdC4uLlwiKTtcbi1cdGlmIChjaGVja19odWdlX2Fub24ocCwgMSwgaHBhZ2VfcG1kX3NpemUpKVxuK1x0aWYgKGNoZWNrX2h1Z2VfYW5vbihwLCBocGFnZV9wbWRfc2l6ZSwgMSwgaHBhZ2VfcG1kX3NpemUpKVxuIFx0XHRzdWNjZXNzKFwiT0tcIik7XG4gXHRlbHNlXG4gXHRcdGZhaWwoXCJGYWlsXCIpO1xuQEAgLTY2Miw3ICs3MjEsNyBAQCBzdGF0aWMgdm9pZCBhbGxvY19hdF9mYXVsdCh2b2lkKVxuIFxuIFx0bWFkdmlzZShwLCBwYWdlX3NpemUsIE1BRFZfRE9OVE5FRUQpO1xuIFx0a3NmdF9wcmludF9tc2coXCJTcGxpdCBodWdlIFBNRCBvbiBNQURWX0RPTlRORUVELi4uXCIpO1xuLVx0aWYgKGNoZWNrX2h1Z2VfYW5vbihwLCAwLCBocGFnZV9wbWRfc2l6ZSkpXG4rXHRpZiAoY2hlY2tfaHVnZV9hbm9uKHAsIGhwYWdlX3BtZF9zaXplLCAwLCBocGFnZV9wbWRfc2l6ZSkpXG4gXHRcdHN1Y2Nlc3MoXCJPS1wiKTtcbiBcdGVsc2VcbiBcdFx0ZmFpbChcIkZhaWxcIik7XG5AQCAtNjc0LDEwICs3MzMsMTcgQEAgc3RhdGljIHZvaWQgYWxsb2NfYXRfZmF1bHQodm9pZClcbiBzdGF0aWMgdm9pZCBjb2xsYXBzZV9mdWxsKHN0cnVjdCBjb2xsYXBzZV9jb250ZXh0ICpjLCBzdHJ1Y3QgbWVtX29wcyAqb3BzKVxuIHtcbiBcdHZvaWQgKnA7XG4tXHRpbnQgbnJfaHBhZ2VzID0gNDtcbitcdGludCBucl9wbWRzID0gNCwgbnJfaHBhZ2VzID0gNDtcbiBcdHVuc2lnbmVkIGxvbmcgc2l6ZSA9IG5yX2hwYWdlcyAqIGhwYWdlX3BtZF9zaXplO1xuIFxuLVx0cCA9IG9wcy1cdTAwM2VzZXR1cF9hcmVhKG5yX2hwYWdlcyk7XG4rXHQvKiBPbmx5IHRyeSAxIFBNRCBzaXplZCByYW5nZSBmb3IgbVRIUCBjb2xsYXBzZS4gKi9cbitcdGlmIChjID09IFx1MDAyNl9fbXRocF9raHVnZXBhZ2VkX2NvbnRleHQpIHtcbitcdFx0bnJfcG1kcyA9IDE7XG4rXHRcdG5yX2hwYWdlcyA9IDEgXHUwMDNjXHUwMDNjIChocGFnZV9wbWRfb3JkZXIgLSBjb2xsYXBzZV9vcmRlcik7XG4rXHRcdHNpemUgPSBocGFnZV9wbWRfc2l6ZTtcbitcdH1cbitcbitcdHAgPSBvcHMtXHUwMDNlc2V0dXBfYXJlYShucl9wbWRzKTtcbiBcdG9wcy1cdTAwM2VmYXVsdChwLCAwLCBzaXplKTtcbiBcdGMtXHUwMDNlY29sbGFwc2UoXCJDb2xsYXBzZSBtdWx0aXBsZSBmdWxseSBwb3B1bGF0ZWQgUFRFIHRhYmxlXCIsIHAsIG5yX2hwYWdlcyxcbiBcdFx0ICAgIG9wcywgdHJ1ZSk7XG5AQCAtNjg5LDEwICs3NTUsMzEgQEAgc3RhdGljIHZvaWQgY29sbGFwc2VfZnVsbChzdHJ1Y3QgY29sbGFwc2VfY29udGV4dCAqYywgc3RydWN0IG1lbV9vcHMgKm9wcylcbiBcbiBzdGF0aWMgdm9pZCBjb2xsYXBzZV9lbXB0eShzdHJ1Y3QgY29sbGFwc2VfY29udGV4dCAqYywgc3RydWN0IG1lbV9vcHMgKm9wcylcbiB7XG4rXHRpbnQgbnJfaHBhZ2VzID0gMTtcbitcdHZvaWQgKnA7XG4rXG4rXHRpZiAoYyA9PSBcdTAwMjZfX210aHBfa2h1Z2VwYWdlZF9jb250ZXh0KVxuK1x0XHRucl9ocGFnZXMgPSAxIFx1MDAzY1x1MDAzYyAoaHBhZ2VfcG1kX29yZGVyIC0gY29sbGFwc2Vfb3JkZXIpO1xuK1xuK1x0cCA9IG9wcy1cdTAwM2VzZXR1cF9hcmVhKDEpO1xuK1x0Yy1cdTAwM2Vjb2xsYXBzZShcIkRvIG5vdCBjb2xsYXBzZSBlbXB0eSBQVEUgdGFibGVcIiwgcCwgbnJfaHBhZ2VzLCBvcHMsIGZhbHNlKTtcbitcdG9wcy1cdTAwM2VjbGVhbnVwX2FyZWEocCwgaHBhZ2VfcG1kX3NpemUpO1xuK1x0a3NmdF90ZXN0X3Jlc3VsdF9yZXBvcnQoZXhpdF9zdGF0dXMsIFwiJXNcXG5cIiwgX19mdW5jX18pO1xuK31cbitcbitzdGF0aWMgdm9pZCBjb2xsYXBzZV9zaW5nbGVfbXRocChzdHJ1Y3QgY29sbGFwc2VfY29udGV4dCAqYywgc3RydWN0IG1lbV9vcHMgKm9wcylcbit7XG4rXHR1bnNpZ25lZCBsb25nIGhwYWdlX3NpemUgPSBwYWdlX3NpemUgXHUwMDNjXHUwMDNjIGNvbGxhcHNlX29yZGVyO1xuIFx0dm9pZCAqcDtcbiBcbiBcdHAgPSBvcHMtXHUwMDNlc2V0dXBfYXJlYSgxKTtcbi1cdGMtXHUwMDNlY29sbGFwc2UoXCJEbyBub3QgY29sbGFwc2UgZW1wdHkgUFRFIHRhYmxlXCIsIHAsIDEsIG9wcywgZmFsc2UpO1xuK1x0LypcbitcdCAqIE9ubHkgZmF1bHQgY29sbGFwc2Vfb3JkZXIgc2l6ZWQgcmFuZ2VzLCBhbmQgb25seSBjaGVjayAxXG4rXHQgKiBjb2xsYXBzZV9vcmRlciBzaXplZCBodWdlIHBhZ2UuXG4rXHQgKi9cbitcdG9wcy1cdTAwM2VmYXVsdChwLCAwLCBocGFnZV9zaXplKTtcbitcdGMtXHUwMDNlY29sbGFwc2UoXCJDb2xsYXBzZSBQVEUgdGFibGUgd2l0aCBoYWxmIFBURSBlbnRyaWVzIHByZXNlbnRcIixcbitcdFx0cCwgMSwgb3BzLCB0cnVlKTtcbiBcdG9wcy1cdTAwM2VjbGVhbnVwX2FyZWEocCwgaHBhZ2VfcG1kX3NpemUpO1xuIFx0a3NmdF90ZXN0X3Jlc3VsdF9yZXBvcnQoZXhpdF9zdGF0dXMsIFwiJXNcXG5cIiwgX19mdW5jX18pO1xuIH1cbkBAIC04NDgsNyArOTM1LDcgQEAgc3RhdGljIHZvaWQgY29sbGFwc2Vfc2luZ2xlX3B0ZV9lbnRyeV9jb21wb3VuZChzdHJ1Y3QgY29sbGFwc2VfY29udGV4dCAqYywgc3RydWNcbiBcdG1hZHZpc2UocCwgaHBhZ2VfcG1kX3NpemUsIE1BRFZfTk9IVUdFUEFHRSk7XG4gXHRrc2Z0X3ByaW50X21zZyhcIlNwbGl0IGh1Z2UgcGFnZSBsZWF2aW5nIHNpbmdsZSBQVEUgbWFwcGluZyBjb21wb3VuZCBwYWdlLi4uXCIpO1xuIFx0bWFkdmlzZShwICsgcGFnZV9zaXplLCBocGFnZV9wbWRfc2l6ZSAtIHBhZ2Vfc2l6ZSwgTUFEVl9ET05UTkVFRCk7XG4tXHRpZiAob3BzLVx1MDAzZWNoZWNrX2h1Z2UocCwgMCkpXG4rXHRpZiAob3BzLVx1MDAzZWNoZWNrX2h1Z2UocCwgaHBhZ2VfcG1kX3NpemUsIDAsIGhwYWdlX3BtZF9zaXplKSlcbiBcdFx0c3VjY2VzcyhcIk9LXCIpO1xuIFx0ZWxzZVxuIFx0XHRmYWlsKFwiRmFpbFwiKTtcbkBAIC04NjksNyArOTU2LDcgQEAgc3RhdGljIHZvaWQgY29sbGFwc2VfZnVsbF9vZl9jb21wb3VuZChzdHJ1Y3QgY29sbGFwc2VfY29udGV4dCAqYywgc3RydWN0IG1lbV9vcHNcbiBcdGtzZnRfcHJpbnRfbXNnKFwiU3BsaXQgaHVnZSBwYWdlIGxlYXZpbmcgc2luZ2xlIFBURSBwYWdlIHRhYmxlIGZ1bGwgb2YgY29tcG91bmQgcGFnZXMuLi5cIik7XG4gXHRtYWR2aXNlKHAsIHBhZ2Vfc2l6ZSwgTUFEVl9OT0hVR0VQQUdFKTtcbiBcdG1hZHZpc2UocCwgaHBhZ2VfcG1kX3NpemUsIE1BRFZfTk9IVUdFUEFHRSk7XG4tXHRpZiAob3BzLVx1MDAzZWNoZWNrX2h1Z2UocCwgMCkpXG4rXHRpZiAob3BzLVx1MDAzZWNoZWNrX2h1Z2UocCwgaHBhZ2VfcG1kX3NpemUsIDAsIGhwYWdlX3BtZF9zaXplKSlcbiBcdFx0c3VjY2VzcyhcIk9LXCIpO1xuIFx0ZWxzZVxuIFx0XHRmYWlsKFwiRmFpbFwiKTtcbkBAIC04OTEsNyArOTc4LDcgQEAgc3RhdGljIHZvaWQgY29sbGFwc2VfY29tcG91bmRfZXh0cmVtZShzdHJ1Y3QgY29sbGFwc2VfY29udGV4dCAqYywgc3RydWN0IG1lbV9vcHNcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGhwYWdlX3BtZF9ucjsgaSsrKSB7XG4gXHRcdG1hZHZpc2UoQkFTRV9BRERSLCBocGFnZV9wbWRfc2l6ZSwgTUFEVl9IVUdFUEFHRSk7XG4gXHRcdG9wcy1cdTAwM2VmYXVsdChCQVNFX0FERFIsIDAsIGhwYWdlX3BtZF9zaXplKTtcbi1cdFx0aWYgKCFvcHMtXHUwMDNlY2hlY2tfaHVnZShCQVNFX0FERFIsIDEpKVxuK1x0XHRpZiAoIW9wcy1cdTAwM2VjaGVja19odWdlKEJBU0VfQUREUiwgaHBhZ2VfcG1kX3NpemUsIDEsIGhwYWdlX3BtZF9zaXplKSlcbiBcdFx0XHRrc2Z0X2V4aXRfZmFpbF9tc2coXCJGYWlsZWQgdG8gYWxsb2NhdGUgaHVnZSBwYWdlXFxuXCIpO1xuIFx0XHRtYWR2aXNlKEJBU0VfQUREUiwgaHBhZ2VfcG1kX3NpemUsIE1BRFZfTk9IVUdFUEFHRSk7XG4gXG5AQCAtOTE0LDcgKzEwMDEsNyBAQCBzdGF0aWMgdm9pZCBjb2xsYXBzZV9jb21wb3VuZF9leHRyZW1lKHN0cnVjdCBjb2xsYXBzZV9jb250ZXh0ICpjLCBzdHJ1Y3QgbWVtX29wc1xuIFxuIFx0b3BzLVx1MDAzZWNsZWFudXBfYXJlYShCQVNFX0FERFIsIGhwYWdlX3BtZF9zaXplKTtcbiBcdG9wcy1cdTAwM2VmYXVsdChwLCAwLCBocGFnZV9wbWRfc2l6ZSk7XG4tXHRpZiAoIW9wcy1cdTAwM2VjaGVja19odWdlKHAsIDEpKVxuK1x0aWYgKCFvcHMtXHUwMDNlY2hlY2tfaHVnZShwLCBocGFnZV9wbWRfc2l6ZSwgMSwgaHBhZ2VfcG1kX3NpemUpKVxuIFx0XHRzdWNjZXNzKFwiT0tcIik7XG4gXHRlbHNlXG4gXHRcdGZhaWwoXCJGYWlsXCIpO1xuQEAgLTkzNiw3ICsxMDIzLDcgQEAgc3RhdGljIHZvaWQgY29sbGFwc2VfZm9yayhzdHJ1Y3QgY29sbGFwc2VfY29udGV4dCAqYywgc3RydWN0IG1lbV9vcHMgKm9wcylcbiBcbiBcdGtzZnRfcHJpbnRfbXNnKFwiQWxsb2NhdGUgc21hbGwgcGFnZS4uLlwiKTtcbiBcdG9wcy1cdTAwM2VmYXVsdChwLCAwLCBwYWdlX3NpemUpO1xuLVx0aWYgKG9wcy1cdTAwM2VjaGVja19odWdlKHAsIDApKVxuK1x0aWYgKG9wcy1cdTAwM2VjaGVja19odWdlKHAsIGhwYWdlX3BtZF9zaXplLCAwLCBocGFnZV9wbWRfc2l6ZSkpXG4gXHRcdHN1Y2Nlc3MoXCJPS1wiKTtcbiBcdGVsc2VcbiBcdFx0ZmFpbChcIkZhaWxcIik7XG5AQCAtOTQ0LDcgKzEwMzEsNyBAQCBzdGF0aWMgdm9pZCBjb2xsYXBzZV9mb3JrKHN0cnVjdCBjb2xsYXBzZV9jb250ZXh0ICpjLCBzdHJ1Y3QgbWVtX29wcyAqb3BzKVxuIFx0a3NmdF9wcmludF9tc2coXCJTaGFyZSBzbWFsbCBwYWdlIG92ZXIgZm9yaygpLi4uXCIpO1xuIFx0aWYgKCFmb3JrKCkpIHtcbiBcdFx0LyogRG8gbm90IHRvdWNoIHNldHRpbmdzIG9uIGNoaWxkIGV4aXQgKi9cbi1cdFx0aWYgKG9wcy1cdTAwM2VjaGVja19odWdlKHAsIDApKVxuK1x0XHRpZiAob3BzLVx1MDAzZWNoZWNrX2h1Z2UocCwgaHBhZ2VfcG1kX3NpemUsIDAsIGhwYWdlX3BtZF9zaXplKSlcbiBcdFx0XHRzdWNjZXNzKFwiT0tcIik7XG4gXHRcdGVsc2VcbiBcdFx0XHRmYWlsKFwiRmFpbFwiKTtcbkBAIC05NjIsNyArMTA0OSw3IEBAIHN0YXRpYyB2b2lkIGNvbGxhcHNlX2Zvcmsoc3RydWN0IGNvbGxhcHNlX2NvbnRleHQgKmMsIHN0cnVjdCBtZW1fb3BzICpvcHMpXG4gXHRleGl0X3N0YXR1cyA9IFdFWElUU1RBVFVTKHdzdGF0dXMpO1xuIFxuIFx0a3NmdF9wcmludF9tc2coXCJDaGVjayBpZiBwYXJlbnQgc3RpbGwgaGFzIHNtYWxsIHBhZ2UuLi5cIik7XG4tXHRpZiAob3BzLVx1MDAzZWNoZWNrX2h1Z2UocCwgMCkpXG4rXHRpZiAob3BzLVx1MDAzZWNoZWNrX2h1Z2UocCwgaHBhZ2VfcG1kX3NpemUsIDAsIGhwYWdlX3BtZF9zaXplKSlcbiBcdFx0c3VjY2VzcyhcIk9LXCIpO1xuIFx0ZWxzZVxuIFx0XHRmYWlsKFwiRmFpbFwiKTtcbkBAIC05ODAsNyArMTA2Nyw3IEBAIHN0YXRpYyB2b2lkIGNvbGxhcHNlX2ZvcmtfY29tcG91bmQoc3RydWN0IGNvbGxhcHNlX2NvbnRleHQgKmMsIHN0cnVjdCBtZW1fb3BzICpvXG4gXHRrc2Z0X3ByaW50X21zZyhcIlNoYXJlIGh1Z2UgcGFnZSBvdmVyIGZvcmsoKS4uLlwiKTtcbiBcdGlmICghZm9yaygpKSB7XG4gXHRcdC8qIERvIG5vdCB0b3VjaCBzZXR0aW5ncyBvbiBjaGlsZCBleGl0ICovXG4tXHRcdGlmIChvcHMtXHUwMDNlY2hlY2tfaHVnZShwLCAxKSlcbitcdFx0aWYgKG9wcy1cdTAwM2VjaGVja19odWdlKHAsIGhwYWdlX3BtZF9zaXplLCAxLCBocGFnZV9wbWRfc2l6ZSkpXG4gXHRcdFx0c3VjY2VzcyhcIk9LXCIpO1xuIFx0XHRlbHNlXG4gXHRcdFx0ZmFpbChcIkZhaWxcIik7XG5AQCAtOTg4LDcgKzEwNzUsNyBAQCBzdGF0aWMgdm9pZCBjb2xsYXBzZV9mb3JrX2NvbXBvdW5kKHN0cnVjdCBjb2xsYXBzZV9jb250ZXh0ICpjLCBzdHJ1Y3QgbWVtX29wcyAqb1xuIFx0XHRrc2Z0X3ByaW50X21zZyhcIlNwbGl0IGh1Z2UgcGFnZSBQTUQgaW4gY2hpbGQgcHJvY2Vzcy4uLlwiKTtcbiBcdFx0bWFkdmlzZShwLCBwYWdlX3NpemUsIE1BRFZfTk9IVUdFUEFHRSk7XG4gXHRcdG1hZHZpc2UocCwgaHBhZ2VfcG1kX3NpemUsIE1BRFZfTk9IVUdFUEFHRSk7XG4tXHRcdGlmIChvcHMtXHUwMDNlY2hlY2tfaHVnZShwLCAwKSlcbitcdFx0aWYgKG9wcy1cdTAwM2VjaGVja19odWdlKHAsIGhwYWdlX3BtZF9zaXplLCAwLCBocGFnZV9wbWRfc2l6ZSkpXG4gXHRcdFx0c3VjY2VzcyhcIk9LXCIpO1xuIFx0XHRlbHNlXG4gXHRcdFx0ZmFpbChcIkZhaWxcIik7XG5AQCAtMTAwOSw3ICsxMDk2LDcgQEAgc3RhdGljIHZvaWQgY29sbGFwc2VfZm9ya19jb21wb3VuZChzdHJ1Y3QgY29sbGFwc2VfY29udGV4dCAqYywgc3RydWN0IG1lbV9vcHMgKm9cbiBcdGV4aXRfc3RhdHVzID0gV0VYSVRTVEFUVVMod3N0YXR1cyk7XG4gXG4gXHRrc2Z0X3ByaW50X21zZyhcIkNoZWNrIGlmIHBhcmVudCBzdGlsbCBoYXMgaHVnZSBwYWdlLi4uXCIpO1xuLVx0aWYgKG9wcy1cdTAwM2VjaGVja19odWdlKHAsIDEpKVxuK1x0aWYgKG9wcy1cdTAwM2VjaGVja19odWdlKHAsIGhwYWdlX3BtZF9zaXplLCAxLCBocGFnZV9wbWRfc2l6ZSkpXG4gXHRcdHN1Y2Nlc3MoXCJPS1wiKTtcbiBcdGVsc2VcbiBcdFx0ZmFpbChcIkZhaWxcIik7XG5AQCAtMTAyOCw3ICsxMTE1LDcgQEAgc3RhdGljIHZvaWQgY29sbGFwc2VfbWF4X3B0ZXNfc2hhcmVkKHN0cnVjdCBjb2xsYXBzZV9jb250ZXh0ICpjLCBzdHJ1Y3QgbWVtX29wc1xuIFx0a3NmdF9wcmludF9tc2coXCJTaGFyZSBodWdlIHBhZ2Ugb3ZlciBmb3JrKCkuLi5cIik7XG4gXHRpZiAoIWZvcmsoKSkge1xuIFx0XHQvKiBEbyBub3QgdG91Y2ggc2V0dGluZ3Mgb24gY2hpbGQgZXhpdCAqL1xuLVx0XHRpZiAob3BzLVx1MDAzZWNoZWNrX2h1Z2UocCwgMSkpXG4rXHRcdGlmIChvcHMtXHUwMDNlY2hlY2tfaHVnZShwLCBocGFnZV9wbWRfc2l6ZSwgMSwgaHBhZ2VfcG1kX3NpemUpKVxuIFx0XHRcdHN1Y2Nlc3MoXCJPS1wiKTtcbiBcdFx0ZWxzZVxuIFx0XHRcdGZhaWwoXCJGYWlsXCIpO1xuQEAgLTEwMzYsNyArMTEyMyw3IEBAIHN0YXRpYyB2b2lkIGNvbGxhcHNlX21heF9wdGVzX3NoYXJlZChzdHJ1Y3QgY29sbGFwc2VfY29udGV4dCAqYywgc3RydWN0IG1lbV9vcHNcbiBcdFx0a3NmdF9wcmludF9tc2coXCJUcmlnZ2VyIENvVyBvbiBwYWdlICVkIG9mICVkLi4uXCIsXG4gXHRcdFx0XHRocGFnZV9wbWRfbnIgLSBtYXhfcHRlc19zaGFyZWQgLSAxLCBocGFnZV9wbWRfbnIpO1xuIFx0XHRvcHMtXHUwMDNlZmF1bHQocCwgMCwgKGhwYWdlX3BtZF9uciAtIG1heF9wdGVzX3NoYXJlZCAtIDEpICogcGFnZV9zaXplKTtcbi1cdFx0aWYgKG9wcy1cdTAwM2VjaGVja19odWdlKHAsIDApKVxuK1x0XHRpZiAob3BzLVx1MDAzZWNoZWNrX2h1Z2UocCwgaHBhZ2VfcG1kX3NpemUsIDAsIGhwYWdlX3BtZF9zaXplKSlcbiBcdFx0XHRzdWNjZXNzKFwiT0tcIik7XG4gXHRcdGVsc2VcbiBcdFx0XHRmYWlsKFwiRmFpbFwiKTtcbkBAIC0xMDQ5LDcgKzExMzYsNyBAQCBzdGF0aWMgdm9pZCBjb2xsYXBzZV9tYXhfcHRlc19zaGFyZWQoc3RydWN0IGNvbGxhcHNlX2NvbnRleHQgKmMsIHN0cnVjdCBtZW1fb3BzXG4gXHRcdFx0ICAgICAgIGhwYWdlX3BtZF9uciAtIG1heF9wdGVzX3NoYXJlZCwgaHBhZ2VfcG1kX25yKTtcbiBcdFx0XHRvcHMtXHUwMDNlZmF1bHQocCwgMCwgKGhwYWdlX3BtZF9uciAtIG1heF9wdGVzX3NoYXJlZCkgKlxuIFx0XHRcdFx0ICAgIHBhZ2Vfc2l6ZSk7XG4tXHRcdFx0aWYgKG9wcy1cdTAwM2VjaGVja19odWdlKHAsIDApKVxuK1x0XHRcdGlmIChvcHMtXHUwMDNlY2hlY2tfaHVnZShwLCBocGFnZV9wbWRfc2l6ZSwgMCwgaHBhZ2VfcG1kX3NpemUpKVxuIFx0XHRcdFx0c3VjY2VzcyhcIk9LXCIpO1xuIFx0XHRcdGVsc2VcbiBcdFx0XHRcdGZhaWwoXCJGYWlsXCIpO1xuQEAgLTEwNjcsNyArMTE1NCw3IEBAIHN0YXRpYyB2b2lkIGNvbGxhcHNlX21heF9wdGVzX3NoYXJlZChzdHJ1Y3QgY29sbGFwc2VfY29udGV4dCAqYywgc3RydWN0IG1lbV9vcHNcbiBcdGV4aXRfc3RhdHVzID0gV0VYSVRTVEFUVVMod3N0YXR1cyk7XG4gXG4gXHRrc2Z0X3ByaW50X21zZyhcIkNoZWNrIGlmIHBhcmVudCBzdGlsbCBoYXMgaHVnZSBwYWdlLi4uXCIpO1xuLVx0aWYgKG9wcy1cdTAwM2VjaGVja19odWdlKHAsIDEpKVxuK1x0aWYgKG9wcy1cdTAwM2VjaGVja19odWdlKHAsIGhwYWdlX3BtZF9zaXplLCAxLCBocGFnZV9wbWRfc2l6ZSkpXG4gXHRcdHN1Y2Nlc3MoXCJPS1wiKTtcbiBcdGVsc2VcbiBcdFx0ZmFpbChcIkZhaWxcIik7XG5AQCAtMTEwOCw4ICsxMTk1LDggQEAgc3RhdGljIHZvaWQgbWFkdmlzZV9yZXRyYWN0ZWRfcGFnZV90YWJsZXMoc3RydWN0IGNvbGxhcHNlX2NvbnRleHQgKmMsXG4gXHRvcHMtXHUwMDNlZmF1bHQocCwgMCwgc2l6ZSk7XG4gXG4gXHQvKiBMZXQga2h1Z2VwYWdlZCBjb2xsYXBzZSBhbmQgbGVhdmUgcG1kIGNsZWFyZWQgKi9cbi1cdGlmICh3YWl0X2Zvcl9zY2FuKFwiQ29sbGFwc2UgYW5kIGxlYXZlIFBNRCBjbGVhcmVkXCIsIHAsIG5yX2hwYWdlcyxcbi1cdFx0XHQgIG9wcykpIHtcbitcdGlmICh3YWl0X2Zvcl9zY2FuKFwiQ29sbGFwc2UgYW5kIGxlYXZlIFBNRCBjbGVhcmVkXCIsIHAsIHNpemUsIG5yX2hwYWdlcyxcbitcdFx0XHQgIGhwYWdlX3BtZF9vcmRlciwgb3BzKSkge1xuIFx0XHRmYWlsKFwiVGltZW91dFwiKTtcbiBcdFx0cmV0dXJuO1xuIFx0fVxuQEAgLTExMjUsMTcgKzEyMTIsMTkgQEAgc3RhdGljIHZvaWQgdXNhZ2Uodm9pZClcbiB7XG4gXHRmcHJpbnRmKHN0ZGVyciwgXCJcXG5Vc2FnZTogLi9raHVnZXBhZ2VkIFtPUFRJT05TXSBcdTAwM2N0ZXN0IHR5cGVcdTAwM2UgW2Rpcl1cXG5cXG5cIik7XG4gXHRmcHJpbnRmKHN0ZGVyciwgXCJcXHRcdTAwM2N0ZXN0IHR5cGVcdTAwM2VcXHQ6IFx1MDAzY2NvbnRleHRcdTAwM2U6XHUwMDNjbWVtX3R5cGVcdTAwM2VcXG5cIik7XG4tXHRmcHJpbnRmKHN0ZGVyciwgXCJcXHRcdTAwM2Njb250ZXh0XHUwMDNlXFx0OiBbYWxsfGtodWdlcGFnZWR8bWFkdmlzZV1cXG5cIik7XG4rXHRmcHJpbnRmKHN0ZGVyciwgXCJcXHRcdTAwM2Njb250ZXh0XHUwMDNlXFx0OiBbYWxsfGtodWdlcGFnZWR8bXRocF9raHVnZXBhZ2VkfG1hZHZpc2VdXFxuXCIpO1xuIFx0ZnByaW50ZihzdGRlcnIsIFwiXFx0XHUwMDNjbWVtX3R5cGVcdTAwM2VcXHQ6IFthbGx8YW5vbnxmaWxlfHNobWVtXVxcblwiKTtcbiBcdGZwcmludGYoc3RkZXJyLCBcIlxcblxcdFxcXCJmaWxlLGFsbFxcXCIgbWVtX3R5cGUgcmVxdWlyZXMgW2Rpcl0gYXJndW1lbnRcXG5cIik7XG4gXHRmcHJpbnRmKHN0ZGVyciwgXCJcXG5cXHRcXFwiZmlsZSxhbGxcXFwiIG1lbV90eXBlIHJlcXVpcmVzIGEgZmlsZSBzeXN0ZW1cXG5cIik7XG4gXHRmcHJpbnRmKHN0ZGVycixcdFwiXFx0d2l0aCBQTUQtc2l6ZWQgbGFyZ2UgZm9saW8gc3VwcG9ydFxcblwiKTtcbiBcdGZwcmludGYoc3RkZXJyLCBcIlxcblxcdGlmIFtkaXJdIGlzIGEgKHN1YilkaXJlY3Rvcnkgb2YgYSB0bXBmcyBtb3VudCwgdG1wZnMgbXVzdCBiZVxcblwiKTtcbiBcdGZwcmludGYoc3RkZXJyLFx0XCJcXHRtb3VudGVkIHdpdGggaHVnZT1hZHZpc2Ugb3B0aW9uIGZvciBraHVnZXBhZ2VkIHRlc3RzIHRvIHdvcmtcXG5cIik7XG4rXHRmcHJpbnRmKHN0ZGVyciwgXCJcXG5cXHRtdGhwX2todWdlcGFnZWQgb25seSBzdXBwb3J0cyBhbm9uIG1lbV90eXBlIG5vdy5cXG5cIik7XG4gXHRmcHJpbnRmKHN0ZGVycixcdFwiXFxuXFx0U3VwcG9ydGVkIE9wdGlvbnM6XFxuXCIpO1xuIFx0ZnByaW50ZihzdGRlcnIsXHRcIlxcdFxcdC1oOiBUaGlzIGhlbHAgbWVzc2FnZS5cXG5cIik7XG4gXHRmcHJpbnRmKHN0ZGVycixcdFwiXFx0XFx0LXM6IG1USFAgc2l6ZSwgZXhwcmVzc2VkIGFzIHBhZ2Ugb3JkZXIuXFxuXCIpO1xuIFx0ZnByaW50ZihzdGRlcnIsXHRcIlxcdFxcdCAgICBEZWZhdWx0cyB0byAwLiBVc2UgdGhpcyBzaXplIGZvciBhbm9uIG9yIHNobWVtIGFsbG9jYXRpb25zLlxcblwiKTtcbitcdGZwcmludGYoc3RkZXJyLFx0XCJcXHRcXHQtYzogY29sbGFwc2Ugb3JkZXIgZm9yIG1USFAgY29sbGFwc2UsIGV4cHJlc3NlZCBhcyBwYWdlIG9yZGVyLlxcblwiKTtcbiBcdGV4aXQoMSk7XG4gfVxuIFxuQEAgLTExNDUsMTEgKzEyMzQsMTQgQEAgc3RhdGljIHZvaWQgcGFyc2VfdGVzdF90eXBlKGludCBhcmdjLCBjaGFyICoqYXJndilcbiBcdGNoYXIgKmJ1ZjtcbiBcdGNvbnN0IGNoYXIgKnRva2VuO1xuIFxuLVx0d2hpbGUgKChvcHQgPSBnZXRvcHQoYXJnYywgYXJndiwgXCJzOmhcIikpICE9IC0xKSB7XG4rXHR3aGlsZSAoKG9wdCA9IGdldG9wdChhcmdjLCBhcmd2LCBcInM6YzpoXCIpKSAhPSAtMSkge1xuIFx0XHRzd2l0Y2ggKG9wdCkge1xuIFx0XHRjYXNlICdzJzpcbiBcdFx0XHRhbm9uX29yZGVyID0gYXRvaShvcHRhcmcpO1xuIFx0XHRcdGJyZWFrO1xuK1x0XHRjYXNlICdjJzpcbitcdFx0XHRjb2xsYXBzZV9vcmRlciA9IGF0b2kob3B0YXJnKTtcbitcdFx0XHRicmVhaztcbiBcdFx0Y2FzZSAnaCc6XG4gXHRcdGRlZmF1bHQ6XG4gXHRcdFx0dXNhZ2UoKTtcbkBAIC0xMTc1LDYgKzEyNjcsMTAgQEAgc3RhdGljIHZvaWQgcGFyc2VfdGVzdF90eXBlKGludCBhcmdjLCBjaGFyICoqYXJndilcbiBcdFx0bWFkdmlzZV9jb250ZXh0ID0gIFx1MDAyNl9fbWFkdmlzZV9jb250ZXh0O1xuIFx0fSBlbHNlIGlmICghc3RyY21wKHRva2VuLCBcImtodWdlcGFnZWRcIikpIHtcbiBcdFx0a2h1Z2VwYWdlZF9jb250ZXh0ID0gIFx1MDAyNl9fa2h1Z2VwYWdlZF9jb250ZXh0O1xuK1x0fSBlbHNlIGlmICghc3RyY21wKHRva2VuLCBcIm10aHBfa2h1Z2VwYWdlZFwiKSkge1xuK1x0XHRtdGhwX2todWdlcGFnZWRfY29udGV4dCA9ICBcdTAwMjZfX210aHBfa2h1Z2VwYWdlZF9jb250ZXh0O1xuK1x0XHRpZiAoY29sbGFwc2Vfb3JkZXIgXHUwMDNjPSAwIHx8IGNvbGxhcHNlX29yZGVyIFx1MDAzZT0gaHBhZ2VfcG1kX29yZGVyKVxuK1x0XHRcdHVzYWdlKCk7XG4gXHR9IGVsc2UgaWYgKCFzdHJjbXAodG9rZW4sIFwibWFkdmlzZVwiKSkge1xuIFx0XHRtYWR2aXNlX2NvbnRleHQgPSAgXHUwMDI2X19tYWR2aXNlX2NvbnRleHQ7XG4gXHR9IGVsc2Uge1xuQEAgLTExOTAsMTQgKzEyODYsMjAgQEAgc3RhdGljIHZvaWQgcGFyc2VfdGVzdF90eXBlKGludCBhcmdjLCBjaGFyICoqYXJndilcbiBcdFx0cmVhZF93cml0ZV9maWxlX3dyaXRlX29wcyA9ICBcdTAwMjZfX3JlYWRfd3JpdGVfZmlsZV93cml0ZV9vcHM7XG4gXHRcdGFub25fb3BzID0gXHUwMDI2X19hbm9uX29wcztcbiBcdFx0c2htZW1fb3BzID0gXHUwMDI2X19zaG1lbV9vcHM7XG4rXHRcdGlmIChtdGhwX2todWdlcGFnZWRfY29udGV4dClcbitcdFx0XHR1c2FnZSgpO1xuIFx0fSBlbHNlIGlmICghc3RyY21wKGJ1ZiwgXCJhbm9uXCIpKSB7XG4gXHRcdGFub25fb3BzID0gXHUwMDI2X19hbm9uX29wcztcbiBcdH0gZWxzZSBpZiAoIXN0cmNtcChidWYsIFwiZmlsZVwiKSkge1xuIFx0XHRyZWFkX29ubHlfZmlsZV9vcHMgPSAgXHUwMDI2X19yZWFkX29ubHlfZmlsZV9vcHM7XG4gXHRcdHJlYWRfd3JpdGVfZmlsZV9yZWFkX29wcyA9ICBcdTAwMjZfX3JlYWRfd3JpdGVfZmlsZV9yZWFkX29wcztcbiBcdFx0cmVhZF93cml0ZV9maWxlX3dyaXRlX29wcyA9ICBcdTAwMjZfX3JlYWRfd3JpdGVfZmlsZV93cml0ZV9vcHM7XG4rXHRcdGlmIChtdGhwX2todWdlcGFnZWRfY29udGV4dClcbitcdFx0XHR1c2FnZSgpO1xuIFx0fSBlbHNlIGlmICghc3RyY21wKGJ1ZiwgXCJzaG1lbVwiKSkge1xuIFx0XHRzaG1lbV9vcHMgPSBcdTAwMjZfX3NobWVtX29wcztcbitcdFx0aWYgKG10aHBfa2h1Z2VwYWdlZF9jb250ZXh0KVxuK1x0XHRcdHVzYWdlKCk7XG4gXHR9IGVsc2Uge1xuIFx0XHR1c2FnZSgpO1xuIFx0fVxuQEAgLTEyNDAsNyArMTM0Miw2IEBAIHN0YXRpYyBpbnQgbnJfdGVzdF9jYXNlcztcbiBcbiBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpXG4ge1xuLVx0aW50IGhwYWdlX3BtZF9vcmRlcjtcbiBcdHN0cnVjdCB0aHBfc2V0dGluZ3MgZGVmYXVsdF9zZXR0aW5ncyA9IHtcbiBcdFx0LnRocF9lbmFibGVkID0gVEhQX01BRFZJU0UsXG4gXHRcdC50aHBfZGVmcmFnID0gVEhQX0RFRlJBR19BTFdBWVMsXG5AQCAtMTI2NiwxMCArMTM2Nyw2IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndilcbiBcdGlmICghdGhwX2lzX2VuYWJsZWQoKSlcbiBcdFx0a3NmdF9leGl0X3NraXAoXCJUcmFuc3BhcmVudCBIdWdlcGFnZXMgbm90IGF2YWlsYWJsZVxcblwiKTtcbiBcbi1cdHBhcnNlX3Rlc3RfdHlwZShhcmdjLCBhcmd2KTtcbi1cbi1cdHNldGJ1ZihzdGRvdXQsIE5VTEwpO1xuLVxuIFx0cGFnZV9zaXplID0gZ2V0cGFnZXNpemUoKTtcbiBcdGhwYWdlX3BtZF9zaXplID0gcmVhZF9wbWRfcGFnZXNpemUoKTtcbiBcdGlmICghaHBhZ2VfcG1kX3NpemUpXG5AQCAtMTI3Nyw2ICsxMzc0LDEwIEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndilcbiBcdGhwYWdlX3BtZF9uciA9IGhwYWdlX3BtZF9zaXplIC8gcGFnZV9zaXplO1xuIFx0aHBhZ2VfcG1kX29yZGVyID0gX19idWlsdGluX2N0eihocGFnZV9wbWRfbnIpO1xuIFxuK1x0cGFyc2VfdGVzdF90eXBlKGFyZ2MsIGFyZ3YpO1xuK1xuK1x0c2V0YnVmKHN0ZG91dCwgTlVMTCk7XG4rXG4gXHRkZWZhdWx0X3NldHRpbmdzLmtodWdlcGFnZWQubWF4X3B0ZXNfbm9uZSA9IGhwYWdlX3BtZF9uciAtIDE7XG4gXHRkZWZhdWx0X3NldHRpbmdzLmtodWdlcGFnZWQubWF4X3B0ZXNfc3dhcCA9IGhwYWdlX3BtZF9uciAvIDg7XG4gXHRkZWZhdWx0X3NldHRpbmdzLmtodWdlcGFnZWQubWF4X3B0ZXNfc2hhcmVkID0gaHBhZ2VfcG1kX25yIC8gMjtcbkBAIC0xMjk0LDYgKzEzOTUsNyBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpXG4gXHRURVNUKGNvbGxhcHNlX2Z1bGwsIGtodWdlcGFnZWRfY29udGV4dCwgcmVhZF93cml0ZV9maWxlX3JlYWRfb3BzKTtcbiBcdFRFU1QoY29sbGFwc2VfZnVsbCwga2h1Z2VwYWdlZF9jb250ZXh0LCByZWFkX3dyaXRlX2ZpbGVfd3JpdGVfb3BzKTtcbiBcdFRFU1QoY29sbGFwc2VfZnVsbCwga2h1Z2VwYWdlZF9jb250ZXh0LCBzaG1lbV9vcHMpO1xuK1x0VEVTVChjb2xsYXBzZV9mdWxsLCBtdGhwX2todWdlcGFnZWRfY29udGV4dCwgYW5vbl9vcHMpO1xuIFx0VEVTVChjb2xsYXBzZV9mdWxsLCBtYWR2aXNlX2NvbnRleHQsIGFub25fb3BzKTtcbiBcdFRFU1QoY29sbGFwc2VfZnVsbCwgbWFkdmlzZV9jb250ZXh0LCByZWFkX29ubHlfZmlsZV9vcHMpO1xuIFx0VEVTVChjb2xsYXBzZV9mdWxsLCBtYWR2aXNlX2NvbnRleHQsIHJlYWRfd3JpdGVfZmlsZV9yZWFkX29wcyk7XG5AQCAtMTMwMSw4ICsxNDAzLDExIEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndilcbiBcdFRFU1QoY29sbGFwc2VfZnVsbCwgbWFkdmlzZV9jb250ZXh0LCBzaG1lbV9vcHMpO1xuIFxuIFx0VEVTVChjb2xsYXBzZV9lbXB0eSwga2h1Z2VwYWdlZF9jb250ZXh0LCBhbm9uX29wcyk7XG4rXHRURVNUKGNvbGxhcHNlX2VtcHR5LCBtdGhwX2todWdlcGFnZWRfY29udGV4dCwgYW5vbl9vcHMpO1xuIFx0VEVTVChjb2xsYXBzZV9lbXB0eSwgbWFkdmlzZV9jb250ZXh0LCBhbm9uX29wcyk7XG4gXG4rXHRURVNUKGNvbGxhcHNlX3NpbmdsZV9tdGhwLCBtdGhwX2todWdlcGFnZWRfY29udGV4dCwgYW5vbl9vcHMpO1xuK1xuIFx0VEVTVChjb2xsYXBzZV9zaW5nbGVfcHRlX2VudHJ5LCBraHVnZXBhZ2VkX2NvbnRleHQsIGFub25fb3BzKTtcbiBcdFRFU1QoY29sbGFwc2Vfc2luZ2xlX3B0ZV9lbnRyeSwga2h1Z2VwYWdlZF9jb250ZXh0LCByZWFkX29ubHlfZmlsZV9vcHMpO1xuIFx0VEVTVChjb2xsYXBzZV9zaW5nbGVfcHRlX2VudHJ5LCBraHVnZXBhZ2VkX2NvbnRleHQsIHJlYWRfd3JpdGVfZmlsZV9yZWFkX29wcyk7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGFnZW1hcF9pb2N0bC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGFnZW1hcF9pb2N0bC5jXG5pbmRleCAxYjJkZmZjYzk5OWIwLi5jZmQxOTg3MzM5YzEzIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGFnZW1hcF9pb2N0bC5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wYWdlbWFwX2lvY3RsLmNcbkBAIC0xMDg1LDcgKzEwODUsNyBAQCBzdGF0aWMgdm9pZCB1bnBvcHVsYXRlZF93cml0dGVuX3Rlc3QoY29uc3QgY2hhciAqbmFtZSwgY2hhciAqbWVtLCBsb25nIHNpemUsXG4gXHRtZW1zZXQobWVtLCAxLCBzaXplKTtcbiBcdGlmICh1c2VfdGhwIFx1MDAyNlx1MDAyNlxuIFx0ICAgIChtYWR2aXNlKG1lbSwgc2l6ZSwgTUFEVl9DT0xMQVBTRSkgfHxcbi1cdCAgICAgIWNoZWNrX2h1Z2VfYW5vbihtZW0sIHNpemUgLyBocGFnZV9zaXplLCBocGFnZV9zaXplKSkpIHtcbitcdCAgICAgIWNoZWNrX2h1Z2VfYW5vbihtZW0sIHNpemUsIHNpemUgLyBocGFnZV9zaXplLCBocGFnZV9zaXplKSkpIHtcbiBcdFx0a3NmdF90ZXN0X3Jlc3VsdF9za2lwKFwiJXMgY291bGQgbm90IGZvcm0gYSBUSFBcXG5cIiwgbmFtZSk7XG4gXHRcdGdvdG8gb3V0O1xuIFx0fVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ByY3RsX3RocF9kaXNhYmxlLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wcmN0bF90aHBfZGlzYWJsZS5jXG5pbmRleCBkOGQ5ZDFkZTU3YjhiLi44MmM2ZTk2ZWE2ZWIzIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcHJjdGxfdGhwX2Rpc2FibGUuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcHJjdGxfdGhwX2Rpc2FibGUuY1xuQEAgLTY3LDcgKzY3LDcgQEAgc3RhdGljIGludCB0ZXN0X21tYXBfdGhwKGVudW0gdGhwX2NvbGxhcHNlX3R5cGUgbWFkdmlzZV9idWYsIHNpemVfdCBwbWRzaXplKVxuIFx0LyogSEFDSzogbWFrZSBzdXJlIHdlIGhhdmUgYSBzZXBhcmF0ZSBWTUEgdGhhdCB3ZSBjYW4gY2hlY2sgcmVsaWFibHkuICovXG4gXHRtcHJvdGVjdChtZW0sIHBtZHNpemUsIFBST1RfUkVBRCk7XG4gXG4tXHRyZXQgPSBjaGVja19odWdlX2Fub24obWVtLCAxLCBwbWRzaXplKTtcbitcdHJldCA9IGNoZWNrX2h1Z2VfYW5vbihtZW0sIHBtZHNpemUsIDEsIHBtZHNpemUpO1xuIFx0bXVubWFwKG1tYXBfbWVtLCBtbWFwX3NpemUpO1xuIFx0cmV0dXJuIHJldDtcbiB9XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcnVuX3ZtdGVzdHMuc2ggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ydW5fdm10ZXN0cy5zaFxuaW5kZXggNjg3ZDExNWUzYmQ4MC4uZDA5ZjlmNmEzODRlZSAxMDA3NTVcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3J1bl92bXRlc3RzLnNoXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ydW5fdm10ZXN0cy5zaFxuQEAgLTQxMCw2ICs0MTAsOCBAQCBDQVRFR09SWT1cInRocFwiIHJ1bl90ZXN0IC4va2h1Z2VwYWdlZCBhbGw6c2htZW1cbiBcbiBDQVRFR09SWT1cInRocFwiIHJ1bl90ZXN0IC4va2h1Z2VwYWdlZCAtcyA0IGFsbDpzaG1lbVxuIFxuK0NBVEVHT1JZPVwidGhwXCIgcnVuX3Rlc3QgLi9raHVnZXBhZ2VkIC1jIDQgbXRocF9raHVnZXBhZ2VkOmFub25cbitcbiAjIFRyeSB0byBjcmVhdGUgWEZTIGlmIG5vdCBwcm92aWRlZFxuIGlmIFsgLXogXCIke1NQTElUX0hVR0VfUEFHRV9URVNUX1hGU19QQVRIfVwiIF07IHRoZW5cbiAgICAgaWYgdGVzdF9zZWxlY3RlZCBcInRocFwiOyB0aGVuXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vc29mdC1kaXJ0eS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vc29mdC1kaXJ0eS5jXG5pbmRleCBmYjE4NjRhNjhlMWM2Li5lMTk4ZmFjZjc4YmI1IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vc29mdC1kaXJ0eS5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9zb2Z0LWRpcnR5LmNcbkBAIC0xMDMsNyArMTAzLDcgQEAgc3RhdGljIHZvaWQgdGVzdF9odWdlcGFnZShpbnQgcGFnZW1hcF9mZCwgaW50IHBhZ2VzaXplKVxuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgaHBhZ2VfbGVuOyBpKyspXG4gXHRcdG1hcFtpXSA9IChjaGFyKWk7XG4gXG4tXHRpZiAoY2hlY2tfaHVnZV9hbm9uKG1hcCwgMSwgaHBhZ2VfbGVuKSkge1xuK1x0aWYgKGNoZWNrX2h1Z2VfYW5vbihtYXAsIGhwYWdlX2xlbiwgMSwgaHBhZ2VfbGVuKSkge1xuIFx0XHRrc2Z0X3Rlc3RfcmVzdWx0X3Bhc3MoXCJUZXN0ICVzIGh1Z2UgcGFnZSBhbGxvY2F0aW9uXFxuXCIsIF9fZnVuY19fKTtcbiBcbiBcdFx0Y2xlYXJfc29mdGRpcnR5KCk7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vc3BsaXRfaHVnZV9wYWdlX3Rlc3QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3NwbGl0X2h1Z2VfcGFnZV90ZXN0LmNcbmluZGV4IDMyYjk5MTQ3MmY3NDQuLjg2YTYwMzY5MjgyNjEgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9zcGxpdF9odWdlX3BhZ2VfdGVzdC5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9zcGxpdF9odWdlX3BhZ2VfdGVzdC5jXG5AQCAtMTA0LDEyOSArMTA0LDYgQEAgc3RhdGljIGJvb2wgaXNfYmFja2VkX2J5X2ZvbGlvKGNoYXIgKnZhZGRyLCBpbnQgb3JkZXIsIGludCBwYWdlbWFwX2ZkLFxuIFx0cmV0dXJuIGZhbHNlO1xuIH1cbiBcbi1zdGF0aWMgaW50IHZhZGRyX3BhZ2VmbGFnc19nZXQoY2hhciAqdmFkZHIsIGludCBwYWdlbWFwX2ZkLCBpbnQga3BhZ2VmbGFnc19mZCxcbi1cdFx0dWludDY0X3QgKmZsYWdzKVxuLXtcbi1cdHVuc2lnbmVkIGxvbmcgcGZuO1xuLVxuLVx0cGZuID0gcGFnZW1hcF9nZXRfcGZuKHBhZ2VtYXBfZmQsIHZhZGRyKTtcbi1cbi1cdC8qIG5vbi1wcmVzZW50IFBGTiAqL1xuLVx0aWYgKHBmbiA9PSAtMVVMKVxuLVx0XHRyZXR1cm4gMTtcbi1cbi1cdGlmIChwYWdlZmxhZ3NfZ2V0KHBmbiwga3BhZ2VmbGFnc19mZCwgZmxhZ3MpKVxuLVx0XHRyZXR1cm4gLTE7XG4tXG4tXHRyZXR1cm4gMDtcbi19XG4tXG4tLypcbi0gKiBnYXRoZXJfYWZ0ZXJfc3BsaXRfZm9saW9fb3JkZXJzIC0gc2NhbiB0aHJvdWdoIFt2YWRkcl9zdGFydCwgbGVuKSBhbmQgcmVjb3JkXG4tICogZm9saW8gb3JkZXJzXG4tICpcbi0gKiBAdmFkZHJfc3RhcnQ6IHN0YXJ0IHZhZGRyXG4tICogQGxlbjogcmFuZ2UgbGVuZ3RoXG4tICogQHBhZ2VtYXBfZmQ6IGZpbGUgZGVzY3JpcHRvciB0byAvcHJvYy9cdTAwM2NwaWRcdTAwM2UvcGFnZW1hcFxuLSAqIEBrcGFnZWZsYWdzX2ZkOiBmaWxlIGRlc2NyaXB0b3IgdG8gL3Byb2Mva3BhZ2VmbGFnc1xuLSAqIEBvcmRlcnM6IG91dHB1dCBmb2xpbyBvcmRlciBhcnJheVxuLSAqIEBucl9vcmRlcnM6IGZvbGlvIG9yZGVyIGFycmF5IHNpemVcbi0gKlxuLSAqIGdhdGhlcl9hZnRlcl9zcGxpdF9mb2xpb19vcmRlcnMoKSBzY2FuIHRocm91Z2ggW3ZhZGRyX3N0YXJ0LCBsZW4pIGFuZCBjaGVja1xuLSAqIGFsbCBmb2xpb3Mgd2l0aGluIHRoZSByYW5nZSBhbmQgcmVjb3JkIHRoZWlyIG9yZGVycy4gQWxsIG9yZGVyLTAgcGFnZXMgd2lsbFxuLSAqIGJlIHJlY29yZGVkLiBOb24tcHJlc2VudCB2YWRkciBpcyBza2lwcGVkLlxuLSAqXG4tICogTk9URTogdGhlIGZ1bmN0aW9uIGlzIHVzZWQgdG8gY2hlY2sgZm9saW8gb3JkZXJzIGFmdGVyIGEgc3BsaXQgaXMgcGVyZm9ybWVkLFxuLSAqIHNvIGl0IGFzc3VtZXMgW3ZhZGRyX3N0YXJ0LCBsZW4pIGZ1bGx5IG1hcHMgdG8gYWZ0ZXItc3BsaXQgZm9saW9zIHdpdGhpbiB0aGF0XG4tICogcmFuZ2UuXG4tICpcbi0gKiBSZXR1cm46IDAgLSBubyBlcnJvciwgLTEgLSB1bmhhbmRsZWQgY2FzZXNcbi0gKi9cbi1zdGF0aWMgaW50IGdhdGhlcl9hZnRlcl9zcGxpdF9mb2xpb19vcmRlcnMoY2hhciAqdmFkZHJfc3RhcnQsIHNpemVfdCBsZW4sXG4tXHRcdGludCBwYWdlbWFwX2ZkLCBpbnQga3BhZ2VmbGFnc19mZCwgaW50IG9yZGVyc1tdLCBpbnQgbnJfb3JkZXJzKVxuLXtcbi1cdHVpbnQ2NF90IHBhZ2VfZmxhZ3MgPSAwO1xuLVx0aW50IGN1cl9vcmRlciA9IC0xO1xuLVx0Y2hhciAqdmFkZHI7XG4tXG4tXHRpZiAocGFnZW1hcF9mZCA9PSAtMSB8fCBrcGFnZWZsYWdzX2ZkID09IC0xKVxuLVx0XHRyZXR1cm4gLTE7XG4tXHRpZiAoIW9yZGVycylcbi1cdFx0cmV0dXJuIC0xO1xuLVx0aWYgKG5yX29yZGVycyBcdTAwM2M9IDApXG4tXHRcdHJldHVybiAtMTtcbi1cbi1cdGZvciAodmFkZHIgPSB2YWRkcl9zdGFydDsgdmFkZHIgXHUwMDNjIHZhZGRyX3N0YXJ0ICsgbGVuOykge1xuLVx0XHRjaGFyICpuZXh0X2ZvbGlvX3ZhZGRyO1xuLVx0XHRpbnQgc3RhdHVzO1xuLVxuLVx0XHRzdGF0dXMgPSB2YWRkcl9wYWdlZmxhZ3NfZ2V0KHZhZGRyLCBwYWdlbWFwX2ZkLCBrcGFnZWZsYWdzX2ZkLFxuLVx0XHRcdFx0XHRcdTAwMjZwYWdlX2ZsYWdzKTtcbi1cdFx0aWYgKHN0YXR1cyBcdTAwM2MgMClcbi1cdFx0XHRyZXR1cm4gLTE7XG4tXG4tXHRcdC8qIHNraXAgbm9uIHByZXNlbnQgdmFkZHIgKi9cbi1cdFx0aWYgKHN0YXR1cyA9PSAxKSB7XG4tXHRcdFx0dmFkZHIgKz0gcHNpemUoKTtcbi1cdFx0XHRjb250aW51ZTtcbi1cdFx0fVxuLVxuLVx0XHQvKiBhbGwgb3JkZXItMCBwYWdlcyB3aXRoIHBvc3NpYmxlIGZhbHNlIHBvc3RpdmUgKG5vbiBmb2xpbykgKi9cbi1cdFx0aWYgKCEocGFnZV9mbGFncyBcdTAwMjYgKEtQRl9DT01QT1VORF9IRUFEIHwgS1BGX0NPTVBPVU5EX1RBSUwpKSkge1xuLVx0XHRcdG9yZGVyc1swXSsrO1xuLVx0XHRcdHZhZGRyICs9IHBzaXplKCk7XG4tXHRcdFx0Y29udGludWU7XG4tXHRcdH1cbi1cbi1cdFx0Lyogc2tpcCBub24gdGhwIGNvbXBvdW5kIHBhZ2VzICovXG4tXHRcdGlmICghKHBhZ2VfZmxhZ3MgXHUwMDI2IEtQRl9USFApKSB7XG4tXHRcdFx0dmFkZHIgKz0gcHNpemUoKTtcbi1cdFx0XHRjb250aW51ZTtcbi1cdFx0fVxuLVxuLVx0XHQvKiB2cG4gcG9pbnRzIHRvIHBhcnQgb2YgYSBUSFAgYXQgdGhpcyBwb2ludCAqL1xuLVx0XHRpZiAocGFnZV9mbGFncyBcdTAwMjYgS1BGX0NPTVBPVU5EX0hFQUQpXG4tXHRcdFx0Y3VyX29yZGVyID0gMTtcbi1cdFx0ZWxzZSB7XG4tXHRcdFx0dmFkZHIgKz0gcHNpemUoKTtcbi1cdFx0XHRjb250aW51ZTtcbi1cdFx0fVxuLVxuLVx0XHRuZXh0X2ZvbGlvX3ZhZGRyID0gdmFkZHIgKyAoMVVMIFx1MDAzY1x1MDAzYyAoY3VyX29yZGVyICsgcHNoaWZ0KCkpKTtcbi1cbi1cdFx0aWYgKG5leHRfZm9saW9fdmFkZHIgXHUwMDNlPSB2YWRkcl9zdGFydCArIGxlbilcbi1cdFx0XHRicmVhaztcbi1cbi1cdFx0d2hpbGUgKChzdGF0dXMgPSB2YWRkcl9wYWdlZmxhZ3NfZ2V0KG5leHRfZm9saW9fdmFkZHIsXG4tXHRcdFx0XHRcdFx0ICAgICBwYWdlbWFwX2ZkLCBrcGFnZWZsYWdzX2ZkLFxuLVx0XHRcdFx0XHRcdCAgICAgXHUwMDI2cGFnZV9mbGFncykpIFx1MDAzZT0gMCkge1xuLVx0XHRcdC8qXG4tXHRcdFx0ICogbm9uIHByZXNlbnQgdmFkZHIsIG5leHQgY29tcG91bmQgaGVhZCBwYWdlLCBvclxuLVx0XHRcdCAqIG9yZGVyLTAgcGFnZVxuLVx0XHRcdCAqL1xuLVx0XHRcdGlmIChzdGF0dXMgPT0gMSB8fFxuLVx0XHRcdCAgICAocGFnZV9mbGFncyBcdTAwMjYgS1BGX0NPTVBPVU5EX0hFQUQpIHx8XG4tXHRcdFx0ICAgICEocGFnZV9mbGFncyBcdTAwMjYgKEtQRl9DT01QT1VORF9IRUFEIHwgS1BGX0NPTVBPVU5EX1RBSUwpKSkge1xuLVx0XHRcdFx0aWYgKGN1cl9vcmRlciBcdTAwM2MgbnJfb3JkZXJzKSB7XG4tXHRcdFx0XHRcdG9yZGVyc1tjdXJfb3JkZXJdKys7XG4tXHRcdFx0XHRcdGN1cl9vcmRlciA9IC0xO1xuLVx0XHRcdFx0XHR2YWRkciA9IG5leHRfZm9saW9fdmFkZHI7XG4tXHRcdFx0XHR9XG4tXHRcdFx0XHRicmVhaztcbi1cdFx0XHR9XG4tXG4tXHRcdFx0Y3VyX29yZGVyKys7XG4tXHRcdFx0bmV4dF9mb2xpb192YWRkciA9IHZhZGRyICsgKDFVTCBcdTAwM2NcdTAwM2MgKGN1cl9vcmRlciArIHBzaGlmdCgpKSk7XG4tXHRcdH1cbi1cbi1cdFx0aWYgKHN0YXR1cyBcdTAwM2MgMClcbi1cdFx0XHRyZXR1cm4gc3RhdHVzO1xuLVx0fVxuLVx0aWYgKGN1cl9vcmRlciBcdTAwM2UgMCBcdTAwMjZcdTAwMjYgY3VyX29yZGVyIFx1MDAzYyBucl9vcmRlcnMpXG4tXHRcdG9yZGVyc1tjdXJfb3JkZXJdKys7XG4tXHRyZXR1cm4gMDtcbi19XG4tXG4gc3RhdGljIGludCBjaGVja19hZnRlcl9zcGxpdF9mb2xpb19vcmRlcnMoY2hhciAqdmFkZHJfc3RhcnQsIHNpemVfdCBsZW4sXG4gXHRcdGludCBwYWdlbWFwX2ZkLCBpbnQga3BhZ2VmbGFnc19mZCwgaW50IG9yZGVyc1tdLCBpbnQgbnJfb3JkZXJzKVxuIHtcbkBAIC0yNDAsNyArMTE3LDcgQEAgc3RhdGljIGludCBjaGVja19hZnRlcl9zcGxpdF9mb2xpb19vcmRlcnMoY2hhciAqdmFkZHJfc3RhcnQsIHNpemVfdCBsZW4sXG4gXHRcdGtzZnRfZXhpdF9mYWlsX21zZyhcIkNhbm5vdCBhbGxvY2F0ZSBtZW1vcnkgZm9yIHZhZGRyX29yZGVyc1wiKTtcbiBcbiBcdG1lbXNldCh2YWRkcl9vcmRlcnMsIDAsIHNpemVvZihpbnQpICogbnJfb3JkZXJzKTtcbi1cdHN0YXR1cyA9IGdhdGhlcl9hZnRlcl9zcGxpdF9mb2xpb19vcmRlcnModmFkZHJfc3RhcnQsIGxlbiwgcGFnZW1hcF9mZCxcbitcdHN0YXR1cyA9IGdhdGhlcl9mb2xpb19vcmRlcnModmFkZHJfc3RhcnQsIGxlbiwgcGFnZW1hcF9mZCxcbiBcdFx0XHRcdCAgICAga3BhZ2VmbGFnc19mZCwgdmFkZHJfb3JkZXJzLCBucl9vcmRlcnMpO1xuIFx0aWYgKHN0YXR1cylcbiBcdFx0a3NmdF9leGl0X2ZhaWxfbXNnKFwiZ2F0aGVyIGZvbGlvIGluZm8gZmFpbGVkXFxuXCIpO1xuQEAgLTI5Niw3ICsxNzMsNyBAQCBzdGF0aWMgdm9pZCB2ZXJpZnlfcnNzX2Fub25fc3BsaXRfaHVnZV9wYWdlX2FsbF96ZXJvZXMoY2hhciAqb25lX3BhZ2UsIGludCBucl9ocFxuIFx0dW5zaWduZWQgbG9uZyByc3NfYW5vbl9iZWZvcmUsIHJzc19hbm9uX2FmdGVyO1xuIFx0c2l6ZV90IGk7XG4gXG4tXHRpZiAoIWNoZWNrX2h1Z2VfYW5vbihvbmVfcGFnZSwgbnJfaHBhZ2VzLCBwbWRfcGFnZXNpemUpKVxuK1x0aWYgKCFjaGVja19odWdlX2Fub24ob25lX3BhZ2UsIG5yX2hwYWdlcyAqIHBtZF9wYWdlc2l6ZSwgbnJfaHBhZ2VzLCBwbWRfcGFnZXNpemUpKVxuIFx0XHRrc2Z0X2V4aXRfZmFpbF9tc2coXCJObyBUSFAgaXMgYWxsb2NhdGVkXFxuXCIpO1xuIFxuIFx0cnNzX2Fub25fYmVmb3JlID0gcnNzX2Fub24oKTtcbkBAIC0zMTEsNyArMTg4LDcgQEAgc3RhdGljIHZvaWQgdmVyaWZ5X3Jzc19hbm9uX3NwbGl0X2h1Z2VfcGFnZV9hbGxfemVyb2VzKGNoYXIgKm9uZV9wYWdlLCBpbnQgbnJfaHBcbiBcdFx0aWYgKG9uZV9wYWdlW2ldICE9IChjaGFyKTApXG4gXHRcdFx0a3NmdF9leGl0X2ZhaWxfbXNnKFwiJWxkIGJ5dGUgY29ycnVwdGVkXFxuXCIsIGkpO1xuIFxuLVx0aWYgKCFjaGVja19odWdlX2Fub24ob25lX3BhZ2UsIDAsIHBtZF9wYWdlc2l6ZSkpXG4rXHRpZiAoIWNoZWNrX2h1Z2VfYW5vbihvbmVfcGFnZSwgbnJfaHBhZ2VzICogcG1kX3BhZ2VzaXplLCAwLCBwbWRfcGFnZXNpemUpKVxuIFx0XHRrc2Z0X2V4aXRfZmFpbF9tc2coXCJTdGlsbCBBbm9uSHVnZVBhZ2VzIG5vdCBzcGxpdFxcblwiKTtcbiBcbiBcdHJzc19hbm9uX2FmdGVyID0gcnNzX2Fub24oKTtcbkBAIC0zNDcsNyArMjI0LDcgQEAgc3RhdGljIHZvaWQgc3BsaXRfcG1kX3RocF90b19vcmRlcihpbnQgb3JkZXIpXG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBsZW47IGkrKylcbiBcdFx0b25lX3BhZ2VbaV0gPSAoY2hhcilpO1xuIFxuLVx0aWYgKCFjaGVja19odWdlX2Fub24ob25lX3BhZ2UsIDQsIHBtZF9wYWdlc2l6ZSkpXG4rXHRpZiAoIWNoZWNrX2h1Z2VfYW5vbihvbmVfcGFnZSwgNCAqIHBtZF9wYWdlc2l6ZSwgNCwgcG1kX3BhZ2VzaXplKSlcbiBcdFx0a3NmdF9leGl0X2ZhaWxfbXNnKFwiTm8gVEhQIGlzIGFsbG9jYXRlZFxcblwiKTtcbiBcbiBcdC8qIHNwbGl0IGFsbCBUSFBzICovXG5AQCAtMzY2LDcgKzI0Myw3IEBAIHN0YXRpYyB2b2lkIHNwbGl0X3BtZF90aHBfdG9fb3JkZXIoaW50IG9yZGVyKVxuIFx0XHRcdFx0XHQgICAocG1kX29yZGVyICsgMSkpKVxuIFx0XHRrc2Z0X2V4aXRfZmFpbF9tc2coXCJVbmV4cGVjdGVkIFRIUCBzcGxpdFxcblwiKTtcbiBcbi1cdGlmICghY2hlY2tfaHVnZV9hbm9uKG9uZV9wYWdlLCAwLCBwbWRfcGFnZXNpemUpKVxuK1x0aWYgKCFjaGVja19odWdlX2Fub24ob25lX3BhZ2UsIDQgKiBwbWRfcGFnZXNpemUsIDAsIHBtZF9wYWdlc2l6ZSkpXG4gXHRcdGtzZnRfZXhpdF9mYWlsX21zZyhcIlN0aWxsIEFub25IdWdlUGFnZXMgbm90IHNwbGl0XFxuXCIpO1xuIFxuIFx0a3NmdF90ZXN0X3Jlc3VsdF9wYXNzKFwiU3BsaXQgaHVnZSBwYWdlcyB0byBvcmRlciAlZCBzdWNjZXNzZnVsXFxuXCIsIG9yZGVyKTtcbkBAIC0zOTMsNyArMjcwLDcgQEAgc3RhdGljIHZvaWQgc3BsaXRfcHRlX21hcHBlZF90aHAodm9pZClcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHRocF9hcmVhX3NpemU7IGkrKylcbiBcdFx0dGhwX2FyZWFbaV0gPSAoY2hhcilpO1xuIFxuLVx0aWYgKCFjaGVja19odWdlX2Fub24odGhwX2FyZWEsIG5yX3RocHMsIHBtZF9wYWdlc2l6ZSkpIHtcbitcdGlmICghY2hlY2tfaHVnZV9hbm9uKHRocF9hcmVhLCBucl90aHBzICogcG1kX3BhZ2VzaXplLCBucl90aHBzLCBwbWRfcGFnZXNpemUpKSB7XG4gXHRcdGtzZnRfdGVzdF9yZXN1bHRfc2tpcChcIk5vdCBhbGwgVEhQcyBhbGxvY2F0ZWRcXG5cIik7XG4gXHRcdGdvdG8gb3V0O1xuIFx0fVxuQEAgLTY1Nyw3ICs1MzQsNyBAQCBzdGF0aWMgaW50IGNyZWF0ZV9wYWdlY2FjaGVfdGhwX2FuZF9mZChjb25zdCBjaGFyICp0ZXN0ZmlsZSwgc2l6ZV90IGZkX3NpemUsXG4gXG4gXHRmb3JjZV9yZWFkX3BhZ2VzKCphZGRyLCBmZF9zaXplIC8gcG1kX3BhZ2VzaXplLCBwbWRfcGFnZXNpemUpO1xuIFxuLVx0aWYgKCFjaGVja19odWdlX2ZpbGUoKmFkZHIsIGZkX3NpemUgLyBwbWRfcGFnZXNpemUsIHBtZF9wYWdlc2l6ZSkpIHtcbitcdGlmICghY2hlY2tfaHVnZV9maWxlKCphZGRyLCBmZF9zaXplLCBmZF9zaXplIC8gcG1kX3BhZ2VzaXplLCBwbWRfcGFnZXNpemUpKSB7XG4gXHRcdGtzZnRfcHJpbnRfbXNnKFwiTm8gbGFyZ2UgcGFnZWNhY2hlIGZvbGlvIGdlbmVyYXRlZCwgcGxlYXNlIHByb3ZpZGUgYSBmaWxlc3lzdGVtIHN1cHBvcnRpbmcgbGFyZ2UgZm9saW9cXG5cIik7XG4gXHRcdG11bm1hcCgqYWRkciwgZmRfc2l6ZSk7XG4gXHRcdGNsb3NlKCpmZCk7XG5AQCAtNzM1LDcgKzYxMiw3IEBAIHN0YXRpYyB2b2lkIHNwbGl0X3RocF9pbl9wYWdlY2FjaGVfdG9fb3JkZXJfYXQoc2l6ZV90IGZkX3NpemUsXG4gXHRcdGdvdG8gb3V0O1xuIFx0fVxuIFxuLVx0aWYgKCFjaGVja19odWdlX2ZpbGUoYWRkciwgMCwgcG1kX3BhZ2VzaXplKSkge1xuK1x0aWYgKCFjaGVja19odWdlX2ZpbGUoYWRkciwgZmRfc2l6ZSwgMCwgcG1kX3BhZ2VzaXplKSkge1xuIFx0XHRrc2Z0X3ByaW50X21zZyhcIlN0aWxsIEZpbGVQbWRNYXBwZWQgbm90IHNwbGl0XFxuXCIpO1xuIFx0XHRlcnIgPSBFWElUX0ZBSUxVUkU7XG4gXHRcdGdvdG8gb3V0O1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3VmZmQtY29tbW9uLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS91ZmZkLWNvbW1vbi5jXG5pbmRleCBmNDhmNWQ0NTk0YWIwLi4xZmI5NjdlZjQ5ODU0IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdWZmZC1jb21tb24uY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdWZmZC1jb21tb24uY1xuQEAgLTE5NCw3ICsxOTQsOSBAQCBzdGF0aWMgdm9pZCBzaG1lbV9hbGlhc19tYXBwaW5nKHVmZmRfZ2xvYmFsX3Rlc3Rfb3B0c190ICpnb3B0cywgX191NjQgKnN0YXJ0LFxuIFxuIHN0YXRpYyB2b2lkIHNobWVtX2NoZWNrX3BtZF9tYXBwaW5nKHVmZmRfZ2xvYmFsX3Rlc3Rfb3B0c190ICpnb3B0cywgdm9pZCAqcCwgaW50IGV4cGVjdF9ucl9ocGFnZXMpXG4ge1xuLVx0aWYgKCFjaGVja19odWdlX3NobWVtKGdvcHRzLVx1MDAzZWFyZWFfZHN0X2FsaWFzLCBleHBlY3RfbnJfaHBhZ2VzLFxuK1x0c2l6ZV90IGxlbiA9IGV4cGVjdF9ucl9ocGFnZXMgKiByZWFkX3BtZF9wYWdlc2l6ZSgpO1xuK1xuK1x0aWYgKCFjaGVja19odWdlX3NobWVtKGdvcHRzLVx1MDAzZWFyZWFfZHN0X2FsaWFzLCBsZW4sIGV4cGVjdF9ucl9ocGFnZXMsXG4gXHRcdFx0ICAgICAgcmVhZF9wbWRfcGFnZXNpemUoKSkpXG4gXHRcdGVycihcIkRpZCBub3QgZmluZCBleHBlY3RlZCAlZCBudW1iZXIgb2YgaHVnZXBhZ2VzXCIsXG4gXHRcdCAgICBleHBlY3RfbnJfaHBhZ2VzKTtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS92bV91dGlsLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS92bV91dGlsLmNcbmluZGV4IGVmMWVhMTE5ODFhNzQuLjEzYjVjZmY3ZGZlMzEgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS92bV91dGlsLmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ZtX3V0aWwuY1xuQEAgLTE1LDYgKzE1LDkgQEBcbiAjZGVmaW5lIFNNQVBfRklMRV9QQVRIIFwiL3Byb2Mvc2VsZi9zbWFwc1wiXG4gI2RlZmluZSBTVEFUVVNfRklMRV9QQVRIIFwiL3Byb2Mvc2VsZi9zdGF0dXNcIlxuICNkZWZpbmUgTUFYX0xJTkVfTEVOR1RIIDUwMFxuKyNkZWZpbmUgUEFHRU1BUF9QQVRIIFwiL3Byb2Mvc2VsZi9wYWdlbWFwXCJcbisjZGVmaW5lIEtQQUdFRkxBR1NfUEFUSCBcIi9wcm9jL2twYWdlZmxhZ3NcIlxuKyNkZWZpbmUgTUFYX05SX09SREVSUyAyMFxuIFxuIHVuc2lnbmVkIGludCBfX3BhZ2Vfc2l6ZTtcbiB1bnNpZ25lZCBpbnQgX19wYWdlX3NoaWZ0O1xuQEAgLTE5NCw2ICsxOTcsMTI1IEBAIHVuc2lnbmVkIGxvbmcgcnNzX2Fub24odm9pZClcbiBcdHJldHVybiByc3NfYW5vbjtcbiB9XG4gXG4rc3RhdGljIGludCB2YWRkcl9wYWdlZmxhZ3NfZ2V0KGNoYXIgKnZhZGRyLCBpbnQgcGFnZW1hcF9mZCwgaW50IGtwYWdlZmxhZ3NfZmQsXG4rXHRcdHVpbnQ2NF90ICpmbGFncylcbit7XG4rXHR1bnNpZ25lZCBsb25nIHBmbjtcbitcbitcdHBmbiA9IHBhZ2VtYXBfZ2V0X3BmbihwYWdlbWFwX2ZkLCB2YWRkcik7XG4rXG4rXHQvKiBub24tcHJlc2VudCBQRk4gKi9cbitcdGlmIChwZm4gPT0gLTFVTClcbitcdFx0cmV0dXJuIDE7XG4rXG4rXHRpZiAocGFnZWZsYWdzX2dldChwZm4sIGtwYWdlZmxhZ3NfZmQsIGZsYWdzKSlcbitcdFx0cmV0dXJuIC0xO1xuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuKy8qXG4rICogZ2F0aGVyX2ZvbGlvX29yZGVycyAtIHNjYW4gdGhyb3VnaCBbdmFkZHJfc3RhcnQsIGxlbikgYW5kIHJlY29yZFxuKyAqIGZvbGlvIG9yZGVyc1xuKyAqXG4rICogQHZhZGRyX3N0YXJ0OiBzdGFydCB2YWRkclxuKyAqIEBsZW46IHJhbmdlIGxlbmd0aFxuKyAqIEBwYWdlbWFwX2ZkOiBmaWxlIGRlc2NyaXB0b3IgdG8gL3Byb2MvXHUwMDNjcGlkXHUwMDNlL3BhZ2VtYXBcbisgKiBAa3BhZ2VmbGFnc19mZDogZmlsZSBkZXNjcmlwdG9yIHRvIC9wcm9jL2twYWdlZmxhZ3NcbisgKiBAb3JkZXJzOiBvdXRwdXQgZm9saW8gb3JkZXIgYXJyYXlcbisgKiBAbnJfb3JkZXJzOiBmb2xpbyBvcmRlciBhcnJheSBzaXplXG4rICpcbisgKiBnYXRoZXJfZm9saW9fb3JkZXJzKCkgc2NhbiB0aHJvdWdoIFt2YWRkcl9zdGFydCwgbGVuKSBhbmQgY2hlY2tcbisgKiBhbGwgZm9saW9zIHdpdGhpbiB0aGUgcmFuZ2UgYW5kIHJlY29yZCB0aGVpciBvcmRlcnMuIEFsbCBvcmRlci0wIHBhZ2VzIHdpbGxcbisgKiBiZSByZWNvcmRlZC4gTm9uLXByZXNlbnQgdmFkZHIgaXMgc2tpcHBlZC5cbisgKlxuKyAqIFJldHVybjogMCAtIG5vIGVycm9yLCAtMSAtIHVuaGFuZGxlZCBjYXNlc1xuKyAqL1xuK2ludCBnYXRoZXJfZm9saW9fb3JkZXJzKGNoYXIgKnZhZGRyX3N0YXJ0LCBzaXplX3QgbGVuLFxuK1x0XHRpbnQgcGFnZW1hcF9mZCwgaW50IGtwYWdlZmxhZ3NfZmQsIGludCBvcmRlcnNbXSwgaW50IG5yX29yZGVycylcbit7XG4rXHR1aW50NjRfdCBwYWdlX2ZsYWdzID0gMDtcbitcdGludCBjdXJfb3JkZXIgPSAtMTtcbitcdGNoYXIgKnZhZGRyO1xuK1xuK1x0aWYgKHBhZ2VtYXBfZmQgPT0gLTEgfHwga3BhZ2VmbGFnc19mZCA9PSAtMSlcbitcdFx0cmV0dXJuIC0xO1xuK1x0aWYgKCFvcmRlcnMpXG4rXHRcdHJldHVybiAtMTtcbitcdGlmIChucl9vcmRlcnMgXHUwMDNjPSAwKVxuK1x0XHRyZXR1cm4gLTE7XG4rXG4rXHRmb3IgKHZhZGRyID0gdmFkZHJfc3RhcnQ7IHZhZGRyIFx1MDAzYyB2YWRkcl9zdGFydCArIGxlbjspIHtcbitcdFx0Y2hhciAqbmV4dF9mb2xpb192YWRkcjtcbitcdFx0aW50IHN0YXR1cztcbitcbitcdFx0c3RhdHVzID0gdmFkZHJfcGFnZWZsYWdzX2dldCh2YWRkciwgcGFnZW1hcF9mZCwga3BhZ2VmbGFnc19mZCxcbitcdFx0XHRcdFx1MDAyNnBhZ2VfZmxhZ3MpO1xuK1x0XHRpZiAoc3RhdHVzIFx1MDAzYyAwKVxuK1x0XHRcdHJldHVybiAtMTtcbitcbitcdFx0Lyogc2tpcCBub24gcHJlc2VudCB2YWRkciAqL1xuK1x0XHRpZiAoc3RhdHVzID09IDEpIHtcbitcdFx0XHR2YWRkciArPSBwc2l6ZSgpO1xuK1x0XHRcdGNvbnRpbnVlO1xuK1x0XHR9XG4rXG4rXHRcdC8qIGFsbCBvcmRlci0wIHBhZ2VzIHdpdGggcG9zc2libGUgZmFsc2UgcG9zdGl2ZSAobm9uIGZvbGlvKSAqL1xuK1x0XHRpZiAoIShwYWdlX2ZsYWdzIFx1MDAyNiAoS1BGX0NPTVBPVU5EX0hFQUQgfCBLUEZfQ09NUE9VTkRfVEFJTCkpKSB7XG4rXHRcdFx0b3JkZXJzWzBdKys7XG4rXHRcdFx0dmFkZHIgKz0gcHNpemUoKTtcbitcdFx0XHRjb250aW51ZTtcbitcdFx0fVxuK1xuK1x0XHQvKiBza2lwIG5vbiB0aHAgY29tcG91bmQgcGFnZXMgKi9cbitcdFx0aWYgKCEocGFnZV9mbGFncyBcdTAwMjYgS1BGX1RIUCkpIHtcbitcdFx0XHR2YWRkciArPSBwc2l6ZSgpO1xuK1x0XHRcdGNvbnRpbnVlO1xuK1x0XHR9XG4rXG4rXHRcdC8qIHZwbiBwb2ludHMgdG8gcGFydCBvZiBhIFRIUCBhdCB0aGlzIHBvaW50ICovXG4rXHRcdGlmIChwYWdlX2ZsYWdzIFx1MDAyNiBLUEZfQ09NUE9VTkRfSEVBRClcbitcdFx0XHRjdXJfb3JkZXIgPSAxO1xuK1x0XHRlbHNlIHtcbitcdFx0XHR2YWRkciArPSBwc2l6ZSgpO1xuK1x0XHRcdGNvbnRpbnVlO1xuK1x0XHR9XG4rXG4rXHRcdG5leHRfZm9saW9fdmFkZHIgPSB2YWRkciArICgxVUwgXHUwMDNjXHUwMDNjIChjdXJfb3JkZXIgKyBwc2hpZnQoKSkpO1xuK1xuK1x0XHRpZiAobmV4dF9mb2xpb192YWRkciBcdTAwM2U9IHZhZGRyX3N0YXJ0ICsgbGVuKVxuK1x0XHRcdGJyZWFrO1xuK1xuK1x0XHR3aGlsZSAoKHN0YXR1cyA9IHZhZGRyX3BhZ2VmbGFnc19nZXQobmV4dF9mb2xpb192YWRkcixcbitcdFx0XHRcdFx0XHQgICAgIHBhZ2VtYXBfZmQsIGtwYWdlZmxhZ3NfZmQsXG4rXHRcdFx0XHRcdFx0ICAgICBcdTAwMjZwYWdlX2ZsYWdzKSkgXHUwMDNlPSAwKSB7XG4rXHRcdFx0LypcbitcdFx0XHQgKiBub24gcHJlc2VudCB2YWRkciwgbmV4dCBjb21wb3VuZCBoZWFkIHBhZ2UsIG9yXG4rXHRcdFx0ICogb3JkZXItMCBwYWdlXG4rXHRcdFx0ICovXG4rXHRcdFx0aWYgKHN0YXR1cyA9PSAxIHx8XG4rXHRcdFx0ICAgIChwYWdlX2ZsYWdzIFx1MDAyNiBLUEZfQ09NUE9VTkRfSEVBRCkgfHxcbitcdFx0XHQgICAgIShwYWdlX2ZsYWdzIFx1MDAyNiAoS1BGX0NPTVBPVU5EX0hFQUQgfCBLUEZfQ09NUE9VTkRfVEFJTCkpKSB7XG4rXHRcdFx0XHRpZiAoY3VyX29yZGVyIFx1MDAzYyBucl9vcmRlcnMpIHtcbitcdFx0XHRcdFx0b3JkZXJzW2N1cl9vcmRlcl0rKztcbitcdFx0XHRcdFx0Y3VyX29yZGVyID0gLTE7XG4rXHRcdFx0XHRcdHZhZGRyID0gbmV4dF9mb2xpb192YWRkcjtcbitcdFx0XHRcdH1cbitcdFx0XHRcdGJyZWFrO1xuK1x0XHRcdH1cbitcbitcdFx0XHRjdXJfb3JkZXIrKztcbitcdFx0XHRuZXh0X2ZvbGlvX3ZhZGRyID0gdmFkZHIgKyAoMVVMIFx1MDAzY1x1MDAzYyAoY3VyX29yZGVyICsgcHNoaWZ0KCkpKTtcbitcdFx0fVxuK1xuK1x0XHRpZiAoc3RhdHVzIFx1MDAzYyAwKVxuK1x0XHRcdHJldHVybiBzdGF0dXM7XG4rXHR9XG4rXHRpZiAoY3VyX29yZGVyIFx1MDAzZSAwIFx1MDAyNlx1MDAyNiBjdXJfb3JkZXIgXHUwMDNjIG5yX29yZGVycylcbitcdFx0b3JkZXJzW2N1cl9vcmRlcl0rKztcbitcdHJldHVybiAwO1xuK31cbitcbiBjaGFyICpfX2dldF9zbWFwX2VudHJ5KHZvaWQgKmFkZHIsIGNvbnN0IGNoYXIgKnBhdHRlcm4sIGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbilcbiB7XG4gXHRpbnQgcmV0O1xuQEAgLTIyOSw3ICszNTEsNyBAQCBjaGFyICpfX2dldF9zbWFwX2VudHJ5KHZvaWQgKmFkZHIsIGNvbnN0IGNoYXIgKnBhdHRlcm4sIGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbilcbiBcdHJldHVybiBlbnRyeTtcbiB9XG4gXG4tYm9vbCBfX2NoZWNrX2h1Z2Uodm9pZCAqYWRkciwgY2hhciAqcGF0dGVybiwgaW50IG5yX2hwYWdlcyxcbitzdGF0aWMgYm9vbCBfX2NoZWNrX3BtZF9odWdlKHZvaWQgKmFkZHIsIGNoYXIgKnBhdHRlcm4sIGludCBucl9ocGFnZXMsXG4gXHRcdCAgdWludDY0X3QgaHBhZ2Vfc2l6ZSlcbiB7XG4gXHRjaGFyIGJ1ZmZlcltNQVhfTElORV9MRU5HVEhdO1xuQEAgLTI0NywxOSArMzY5LDg0IEBAIGJvb2wgX19jaGVja19odWdlKHZvaWQgKmFkZHIsIGNoYXIgKnBhdHRlcm4sIGludCBucl9ocGFnZXMsXG4gXHRyZXR1cm4gdGhwID09IChucl9ocGFnZXMgKiAoaHBhZ2Vfc2l6ZSBcdTAwM2VcdTAwM2UgMTApKTtcbiB9XG4gXG4tYm9vbCBjaGVja19odWdlX2Fub24odm9pZCAqYWRkciwgaW50IG5yX2hwYWdlcywgdWludDY0X3QgaHBhZ2Vfc2l6ZSlcbitzdGF0aWMgYm9vbCBjaGVja19sYXJnZV9mb2xpb3Modm9pZCAqYWRkciwgc2l6ZV90IGxlbiwgaW50IG5yX2hwYWdlcyxcbitcdFx0dWludDY0X3QgaHBhZ2Vfc2l6ZSlcbit7XG4rXHRpbnQgb3JkZXIgPSAwLCBwYWdlc2l6ZSA9IGdldHBhZ2VzaXplKCk7XG4rXHR1bnNpZ25lZCBpbnQgbnJfcGFnZXMgPSBocGFnZV9zaXplIC8gcGFnZXNpemU7XG4rXHRpbnQgb3JkZXJzW01BWF9OUl9PUkRFUlNdLCBzdGF0dXM7XG4rXHRpbnQgcGFnZW1hcF9mZCwga3BhZ2VmbGFnc19mZDtcbitcdGJvb2wgcmV0ID0gZmFsc2U7XG4rXG4rXHRpZiAoIW5yX3BhZ2VzKVxuK1x0XHRrc2Z0X2V4aXRfZmFpbF9tc2coXCJpbnZhbGlkIGh1Z2VwYWdlIHNpemVcXG5cIik7XG4rXG4rXHRvcmRlciA9IDMxIC0gX19idWlsdGluX2Nseihucl9wYWdlcyk7XG4rXHRpZiAoIW9yZGVyIHx8IG9yZGVyIFx1MDAzZT0gTUFYX05SX09SREVSUylcbitcdFx0a3NmdF9leGl0X2ZhaWxfbXNnKFwiaW52YWxpZCBvcmRlclxcblwiKTtcbitcbitcdG1lbXNldChvcmRlcnMsIDAsIHNpemVvZihpbnQpICogTUFYX05SX09SREVSUyk7XG4rXHRwYWdlbWFwX2ZkID0gb3BlbihQQUdFTUFQX1BBVEgsIE9fUkRPTkxZKTtcbitcdGlmIChwYWdlbWFwX2ZkID09IC0xKVxuK1x0XHRrc2Z0X2V4aXRfZmFpbF9tc2coXCJyZWFkIHBhZ2VtYXAgZmFpbFxcblwiKTtcbitcbitcdGtwYWdlZmxhZ3NfZmQgPSBvcGVuKEtQQUdFRkxBR1NfUEFUSCwgT19SRE9OTFkpO1xuK1x0aWYgKGtwYWdlZmxhZ3NfZmQgPT0gLTEpIHtcbitcdFx0Y2xvc2UocGFnZW1hcF9mZCk7XG4rXHRcdGtzZnRfZXhpdF9mYWlsX21zZyhcInJlYWQga3BhZ2VmbGFncyBmYWlsXFxuXCIpO1xuK1x0fVxuK1xuK1x0c3RhdHVzID0gZ2F0aGVyX2ZvbGlvX29yZGVycyhhZGRyLCBsZW4sIHBhZ2VtYXBfZmQsXG4rXHRcdFx0a3BhZ2VmbGFnc19mZCwgb3JkZXJzLCBNQVhfTlJfT1JERVJTKTtcbitcdGlmIChzdGF0dXMpXG4rXHRcdGdvdG8gb3V0O1xuK1xuK1x0aWYgKG9yZGVyc1tvcmRlcl0gPT0gbnJfaHBhZ2VzKVxuK1x0XHRyZXQgPSB0cnVlO1xuK1xuK291dDpcbitcdGNsb3NlKHBhZ2VtYXBfZmQpO1xuK1x0Y2xvc2Uoa3BhZ2VmbGFnc19mZCk7XG4rXHRyZXR1cm4gcmV0O1xuK31cbitcbitib29sIGNoZWNrX2h1Z2VfYW5vbih2b2lkICphZGRyLCBzaXplX3QgbGVuLCBpbnQgbnJfaHBhZ2VzLCB1aW50NjRfdCBocGFnZV9zaXplKVxuIHtcbi1cdHJldHVybiBfX2NoZWNrX2h1Z2UoYWRkciwgXCJBbm9uSHVnZVBhZ2VzOiBcIiwgbnJfaHBhZ2VzLCBocGFnZV9zaXplKTtcbitcdHVpbnQ2NF90IHBtZF9wYWdlc2l6ZSA9IHJlYWRfcG1kX3BhZ2VzaXplKCk7XG4rXG4rXHRpZiAoIXBtZF9wYWdlc2l6ZSlcbitcdFx0a3NmdF9leGl0X2ZhaWxfbXNnKFwicmVhZGluZyBQTUQgcGFnZXNpemUgZmFpbGVkXFxuXCIpO1xuK1xuK1x0aWYgKGhwYWdlX3NpemUgPT0gcG1kX3BhZ2VzaXplKVxuK1x0XHRyZXR1cm4gX19jaGVja19wbWRfaHVnZShhZGRyLCBcIkFub25IdWdlUGFnZXM6IFwiLCBucl9ocGFnZXMsIGhwYWdlX3NpemUpO1xuK1xuK1x0cmV0dXJuIGNoZWNrX2xhcmdlX2ZvbGlvcyhhZGRyLCBsZW4sIG5yX2hwYWdlcywgaHBhZ2Vfc2l6ZSk7XG4gfVxuIFxuLWJvb2wgY2hlY2tfaHVnZV9maWxlKHZvaWQgKmFkZHIsIGludCBucl9ocGFnZXMsIHVpbnQ2NF90IGhwYWdlX3NpemUpXG4rYm9vbCBjaGVja19odWdlX2ZpbGUodm9pZCAqYWRkciwgc2l6ZV90IGxlbiwgaW50IG5yX2hwYWdlcywgdWludDY0X3QgaHBhZ2Vfc2l6ZSlcbiB7XG4tXHRyZXR1cm4gX19jaGVja19odWdlKGFkZHIsIFwiRmlsZVBtZE1hcHBlZDpcIiwgbnJfaHBhZ2VzLCBocGFnZV9zaXplKTtcbitcdHVpbnQ2NF90IHBtZF9wYWdlc2l6ZSA9IHJlYWRfcG1kX3BhZ2VzaXplKCk7XG4rXG4rXHRpZiAoIXBtZF9wYWdlc2l6ZSlcbitcdFx0a3NmdF9leGl0X2ZhaWxfbXNnKFwicmVhZGluZyBQTUQgcGFnZXNpemUgZmFpbGVkXFxuXCIpO1xuK1xuK1x0aWYgKGhwYWdlX3NpemUgPT0gcG1kX3BhZ2VzaXplKVxuK1x0XHRyZXR1cm4gX19jaGVja19wbWRfaHVnZShhZGRyLCBcIkZpbGVQbWRNYXBwZWQ6XCIsIG5yX2hwYWdlcywgaHBhZ2Vfc2l6ZSk7XG4rXG4rXHRyZXR1cm4gY2hlY2tfbGFyZ2VfZm9saW9zKGFkZHIsIGxlbiwgbnJfaHBhZ2VzLCBocGFnZV9zaXplKTtcbiB9XG4gXG4tYm9vbCBjaGVja19odWdlX3NobWVtKHZvaWQgKmFkZHIsIGludCBucl9ocGFnZXMsIHVpbnQ2NF90IGhwYWdlX3NpemUpXG4rYm9vbCBjaGVja19odWdlX3NobWVtKHZvaWQgKmFkZHIsIHNpemVfdCBsZW4sIGludCBucl9ocGFnZXMsIHVpbnQ2NF90IGhwYWdlX3NpemUpXG4ge1xuLVx0cmV0dXJuIF9fY2hlY2tfaHVnZShhZGRyLCBcIlNobWVtUG1kTWFwcGVkOlwiLCBucl9ocGFnZXMsIGhwYWdlX3NpemUpO1xuK1x0dWludDY0X3QgcG1kX3BhZ2VzaXplID0gcmVhZF9wbWRfcGFnZXNpemUoKTtcbitcbitcdGlmICghcG1kX3BhZ2VzaXplKVxuK1x0XHRrc2Z0X2V4aXRfZmFpbF9tc2coXCJyZWFkaW5nIFBNRCBwYWdlc2l6ZSBmYWlsZWRcXG5cIik7XG4rXG4rXHRpZiAoaHBhZ2Vfc2l6ZSA9PSBwbWRfcGFnZXNpemUpXG4rXHRcdHJldHVybiBfX2NoZWNrX3BtZF9odWdlKGFkZHIsIFwiU2htZW1QbWRNYXBwZWQ6XCIsIG5yX2hwYWdlcywgaHBhZ2Vfc2l6ZSk7XG4rXG4rXHRyZXR1cm4gY2hlY2tfbGFyZ2VfZm9saW9zKGFkZHIsIGxlbiwgbnJfaHBhZ2VzLCBocGFnZV9zaXplKTtcbiB9XG4gXG4gaW50NjRfdCBhbGxvY2F0ZV90cmFuc2h1Z2Uodm9pZCAqcHRyLCBpbnQgcGFnZW1hcF9mZClcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS92bV91dGlsLmggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS92bV91dGlsLmhcbmluZGV4IDc3OTkxNTRiNjdlZWQuLjlhNDlhZjg4NzAyZTQgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS92bV91dGlsLmhcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ZtX3V0aWwuaFxuQEAgLTkwLDExICs5MCwxMyBAQCB2b2lkIGNsZWFyX3NvZnRkaXJ0eSh2b2lkKTtcbiBib29sIGNoZWNrX2Zvcl9wYXR0ZXJuKEZJTEUgKmZwLCBjb25zdCBjaGFyICpwYXR0ZXJuLCBjaGFyICpidWYsIHNpemVfdCBsZW4pO1xuIHVpbnQ2NF90IHJlYWRfcG1kX3BhZ2VzaXplKHZvaWQpO1xuIHVuc2lnbmVkIGxvbmcgcnNzX2Fub24odm9pZCk7XG4tYm9vbCBjaGVja19odWdlX2Fub24odm9pZCAqYWRkciwgaW50IG5yX2hwYWdlcywgdWludDY0X3QgaHBhZ2Vfc2l6ZSk7XG4tYm9vbCBjaGVja19odWdlX2ZpbGUodm9pZCAqYWRkciwgaW50IG5yX2hwYWdlcywgdWludDY0X3QgaHBhZ2Vfc2l6ZSk7XG4tYm9vbCBjaGVja19odWdlX3NobWVtKHZvaWQgKmFkZHIsIGludCBucl9ocGFnZXMsIHVpbnQ2NF90IGhwYWdlX3NpemUpO1xuK2Jvb2wgY2hlY2tfaHVnZV9hbm9uKHZvaWQgKmFkZHIsIHNpemVfdCBsZW4sIGludCBucl9ocGFnZXMsIHVpbnQ2NF90IGhwYWdlX3NpemUpO1xuK2Jvb2wgY2hlY2tfaHVnZV9maWxlKHZvaWQgKmFkZHIsIHNpemVfdCBsZW4sIGludCBucl9ocGFnZXMsIHVpbnQ2NF90IGhwYWdlX3NpemUpO1xuK2Jvb2wgY2hlY2tfaHVnZV9zaG1lbSh2b2lkICphZGRyLCBzaXplX3QgbGVuLCBpbnQgbnJfaHBhZ2VzLCB1aW50NjRfdCBocGFnZV9zaXplKTtcbiBpbnQ2NF90IGFsbG9jYXRlX3RyYW5zaHVnZSh2b2lkICpwdHIsIGludCBwYWdlbWFwX2ZkKTtcbiBpbnQgcGFnZWZsYWdzX2dldCh1bnNpZ25lZCBsb25nIHBmbiwgaW50IGtwYWdlZmxhZ3NfZmQsIHVpbnQ2NF90ICpmbGFncyk7XG4raW50IGdhdGhlcl9mb2xpb19vcmRlcnMoY2hhciAqdmFkZHJfc3RhcnQsIHNpemVfdCBsZW4sXG4rXHRcdGludCBwYWdlbWFwX2ZkLCBpbnQga3BhZ2VmbGFnc19mZCwgaW50IG9yZGVyc1tdLCBpbnQgbnJfb3JkZXJzKTtcbiBcbiBpbnQgdWZmZF9yZWdpc3RlcihpbnQgdWZmZCwgdm9pZCAqYWRkciwgdWludDY0X3QgbGVuLFxuIFx0XHQgIGJvb2wgbWlzcywgYm9vbCB3cCwgYm9vbCBtaW5vcik7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQwNDowNzoxMS41MjcwODMxNjJaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3NDg3MTY4Njg5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlBhdGNoIEFuYWx5c2lzOiBUSFAgU2VsZnRlc3RzKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaXQncyB0b3VjaGluZyBmaWxlcyB3aXRoaW4gYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2AuIFNwZWNpZmljYWxseSwgaXQncyB1cGRhdGluZyB0ZXN0cyByZWxhdGVkIHRvIFRyYW5zcGFyZW50IEh1Z2UgUGFnZXMsIGxpa2UgYGtodWdlcGFnZWQuY2AsIGBzcGxpdF9odWdlX3BhZ2VfdGVzdC5jYCwgYW5kIGB2bV91dGlsLmNgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhlc2UgYXJlIHB1cmVseSBzZWxmdGVzdHMuIEJ1dCBpdCdzIGFsd2F5cyBnb29kIHRvIGRvdWJsZS1jaGVjay4gTGV0IG1lIHF1aWNrbHkgc2NhbiB0aGUgZGlmZiB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4uLi5cblxuQWxyaWdodCwgdGhlIGZpbGVzIGxpc3RlZCBhcmU6IGBmb2xpb19zcGxpdF9yYWNlX3Rlc3QuY2AsIGBraHVnZXBhZ2VkLmNgLCBgcGFnZW1hcF9pb2N0bC5jYCwgYHByY3RsX3RocF9kaXNhYmxlLmNgLCBgcnVuX3ZtdGVzdHMuc2hgLCBgc29mdC1kaXJ0eS5jYCwgYHNwbGl0X2h1Z2VfcGFnZV90ZXN0LmNgLCBgdWZmZC1jb21tb24uY2AsIGB2bV91dGlsLmNgLCBhbmQgYHZtX3V0aWwuaGAg4oCTIGFsbCBzYWZlbHkgbmVzdGVkIHdpdGhpbiB0aGUgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2AgZGlyZWN0b3J5LlxuXG5TaW5jZSB0aGVzZSBhcmUgc2VsZnRlc3RzLCB1c2VyLXNwYWNlIHRlc3RzLCB0aGV5J3JlIG5vdCBrZXJuZWwgY29kZSBydW5uaW5nIGluIGtlcm5lbCBzcGFjZS4gVGhleSdyZSBkZXNpZ25lZCB0byAqdGVzdCogdGhlIGZ1bmN0aW9uYWxpdHkgb2YgdGhlIGtlcm5lbCwgYnV0IHRoZXkgZG9uJ3QgKmltcGxlbWVudCogaXQuIFRoZXJlZm9yZSwgdGhpcyBwYXRjaCBpc24ndCBtYWtpbmcgYW55IGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIGl0c2VsZjsgaXQncyBqdXN0IHJlZmluaW5nIG91ciB0ZXN0aW5nIG1ldGhvZG9sb2d5LlxuXG5MZXQgbWUgY29uZmlybSB0aGF0IG9uZSBtb3JlIHRpbWUsIGp1c3QgdG8gYmUgb24gdGhlIHNhZmUgc2lkZSwgbGV0J3MgbG9vayBhdCB0aGUgZGlmZiBhZ2Fpbi4uLiBZdXAsIGFsbCB0aGUgbW9kaWZpZWQgZmlsZXMgYXJlIGluZGVlZCB1bmRlciBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vYC5cblxuR2l2ZW4gdGhhdCwgc2V0dGluZyBgV29ydGhGdXp6aW5nYCB0byBgZmFsc2VgIGlzIHRoZSBjb3JyZWN0IGFjdGlvbiBoZXJlLlxuXG4qKlJlYXNvbmluZzoqKiBUaGUgcGF0Y2ggaXMgaXNvbGF0ZWQgdG8gdXNlci1zcGFjZSBzZWxmdGVzdHMsIGFuZCB0aGVyZWZvcmUgaGFzIG5vIGltcGFjdCBvbiBrZXJuZWwgZnVuY3Rpb25hbGl0eSBhbmQgc2hvdWxkIG5vdCBiZSBmdXp6ZWQuXG5cbk5vdywgbGV0J3MgY2FsbCBgc2V0LXJlc3VsdHNgIHdpdGggYFdvcnRoRnV6emluZz1mYWxzZWAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4MTUxLCJPdXRwdXRUb2tlbnMiOjY1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDc1LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMDQ6MDc6MTkuMDE0MjU1MDgxWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTQ2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW10sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIHVzZXItc3BhY2Ugc2VsZnRlc3RzIGluIHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tLyBhbmQgZG9lcyBub3QgbWFrZSBhbnkgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgY29kZSBpdHNlbGYuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIHVzZXItc3BhY2Ugc2VsZnRlc3RzIGluIHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tLyBhbmQgZG9lcyBub3QgbWFrZSBhbnkgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgY29kZSBpdHNlbGYuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },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-workflow4c8tv[1] Phase: Running StartedAt: 2026-08-06 04:08:23 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4c8tv[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-08-06 04:08:23 +0000 UTC FinishedAt: 2026-08-06 04:08:28 +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,}