Name: series-workflowp72fc Phase: Failed StartedAt: 2026-08-20 19:45:04 +0000 UTC FinishedAt: 2026-08-20 19:49:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowp72fc[0] Phase: Succeeded StartedAt: 2026-08-20 19:45:04 +0000 UTC FinishedAt: 2026-08-20 19:49:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowp72fc[0].run-triage Phase: Succeeded StartedAt: 2026-08-20 19:45:04 +0000 UTC FinishedAt: 2026-08-20 19:49:01 +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+CgkJCTx0ZD4yMDI2LzA4LzIwIDE5OjQ4PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb25seSBtb2RpZmllcyBtZW1vcnkgbWFuYWdlbWVudCBzZWxmdGVzdHMgaW4gdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vIGFuZCBkb2VzIG5vdCBtYWtlIGFueSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGNvcmUga2VybmVsLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmUgY29kZS4gVGhlcmVmb3JlLCBpdCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBrZXJuZWwgbG9naWMgdGhhdCByZXF1aXJlcyBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAxOTo0ODwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDFjYjU1ZmE5ODJmYmRlM2UzNmRjNjAxMGIxZWU3NmQ5ZmQzMWMyNzRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IEF1ZyAyMCAxOTo0ODozOCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9raHVnZXBhZ2VkLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9raHVnZXBhZ2VkLmNcbmluZGV4IDEwZThkZWRjYjA4N2QuLjJlNDY2NWU2ZDU4NTIgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9raHVnZXBhZ2VkLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2todWdlcGFnZWQuY1xuQEAgLTUzMyw3ICYjNDM7NTMzLDcgQEAgc3RhdGljIHZvaWQgX19tYWR2aXNlX2NvbGxhcHNlKGNvbnN0IGNoYXIgKm1zZywgY2hhciAqcCwgaW50IG5yX2hwYWdlcyxcbiBcdHJldCA9IG1hZHZpc2VfY29sbGFwc2VfcmV0cnkocCwgbnJfaHBhZ2VzICogaHBhZ2VfcG1kX3NpemUpO1xuIFx0aWYgKCgoYm9vbClyZXQpID09IGV4cGVjdClcbiBcdFx0ZmFpbChcJiMzNDtGYWlsOiBCYWQgcmV0dXJuIHZhbHVlXCYjMzQ7KTtcbi1cdGVsc2UgaWYgKCFvcHMtXHUwMDNlY2hlY2tfaHVnZShwLCBleHBlY3QgPyBucl9ocGFnZXMgOiAwKSlcbiYjNDM7XHRlbHNlIGlmICghb3BzLVx1MDAzZWNoZWNrX2h1Z2UocCwgZXhwZWN0ID8gbnJfaHBhZ2VzIDogLW5yX2hwYWdlcykpXG4gXHRcdGZhaWwoXCYjMzQ7RmFpbDogY2hlY2tfaHVnZSgpXCYjMzQ7KTtcbiBcdGVsc2VcbiBcdFx0c3VjY2VzcyhcJiMzNDtPS1wmIzM0Oyk7XG5AQCAtNTQ1LDcgJiM0Mzs1NDUsNyBAQCBzdGF0aWMgdm9pZCBtYWR2aXNlX2NvbGxhcHNlKGNvbnN0IGNoYXIgKm1zZywgY2hhciAqcCwgaW50IG5yX2hwYWdlcyxcbiBcdFx0XHQgICAgIHN0cnVjdCBtZW1fb3BzICpvcHMsIGJvb2wgZXhwZWN0KVxuIHtcbiBcdC8qIFNhbml0eSBjaGVjayAqL1xuLVx0aWYgKCFvcHMtXHUwMDNlY2hlY2tfaHVnZShwLCAwKSlcbiYjNDM7XHRpZiAoIW9wcy1cdTAwM2VjaGVja19odWdlKHAsIC1ucl9ocGFnZXMpKVxuIFx0XHRrc2Z0X2V4aXRfZmFpbF9tc2coXCYjMzQ7VW5leHBlY3RlZCBodWdlIHBhZ2VcXG5cJiMzNDspO1xuIFx0X19tYWR2aXNlX2NvbGxhcHNlKG1zZywgcCwgbnJfaHBhZ2VzLCBvcHMsIGV4cGVjdCk7XG4gfVxuQEAgLTU1OCw3ICYjNDM7NTU4LDcgQEAgc3RhdGljIGJvb2wgd2FpdF9mb3Jfc2Nhbihjb25zdCBjaGFyICptc2csIGNoYXIgKnAsIGludCBucl9ocGFnZXMsXG4gXHRpbnQgdGltZW91dCA9IDY7IC8qIDMgc2Vjb25kcyAqL1xuIFxuIFx0LyogU2FuaXR5IGNoZWNrICovXG4tXHRpZiAoIW9wcy1cdTAwM2VjaGVja19odWdlKHAsIDApKVxuJiM0MztcdGlmICghb3BzLVx1MDAzZWNoZWNrX2h1Z2UocCwgLW5yX2hwYWdlcykpXG4gXHRcdGtzZnRfZXhpdF9mYWlsX21zZyhcJiMzNDtVbmV4cGVjdGVkIGh1Z2UgcGFnZVxcblwmIzM0Oyk7XG4gXG4gXHRtYWR2aXNlKHAsIG5yX2hwYWdlcyAqIGhwYWdlX3BtZF9zaXplLCBNQURWX0hVR0VQQUdFKTtcbkBAIC02MDUsNyAmIzQzOzYwNSw3IEBAIHN0YXRpYyB2b2lkIGtodWdlcGFnZWRfY29sbGFwc2UoY29uc3QgY2hhciAqbXNnLCBjaGFyICpwLCBpbnQgbnJfaHBhZ2VzLFxuIFx0aWYgKG9wcyAhPSBcdTAwMjZfX2Fub25fb3BzKVxuIFx0XHRvcHMtXHUwMDNlZmF1bHQocCwgMCwgbnJfaHBhZ2VzICogaHBhZ2VfcG1kX3NpemUpO1xuIFxuLVx0aWYgKG9wcy1cdTAwM2VjaGVja19odWdlKHAsIGV4cGVjdCA/IG5yX2hwYWdlcyA6IDApKVxuJiM0MztcdGlmIChvcHMtXHUwMDNlY2hlY2tfaHVnZShwLCBleHBlY3QgPyBucl9ocGFnZXMgOiAtbnJfaHBhZ2VzKSlcbiBcdFx0c3VjY2VzcyhcJiMzNDtPS1wmIzM0Oyk7XG4gXHRlbHNlXG4gXHRcdGZhaWwoXCYjMzQ7RmFpbFwmIzM0Oyk7XG5AQCAtNjQzLDcgJiM0Mzs2NDMsNyBAQCBzdGF0aWMgdm9pZCBhbGxvY19hdF9mYXVsdCh2b2lkKVxuIFxuIFx0bWFkdmlzZShwLCBwYWdlX3NpemUsIE1BRFZfRE9OVE5FRUQpO1xuIFx0a3NmdF9wcmludF9tc2coXCYjMzQ7U3BsaXQgaHVnZSBQTUQgb24gTUFEVl9ET05UTkVFRC4uLlwmIzM0Oyk7XG4tXHRpZiAoY2hlY2tfaHVnZV9hbm9uKHAsIDAsIGhwYWdlX3BtZF9zaXplKSlcbiYjNDM7XHRpZiAoY2hlY2tfaHVnZV9hbm9uKHAsIC0xLCBocGFnZV9wbWRfc2l6ZSkpXG4gXHRcdHN1Y2Nlc3MoXCYjMzQ7T0tcJiMzNDspO1xuIFx0ZWxzZVxuIFx0XHRmYWlsKFwmIzM0O0ZhaWxcJiMzNDspO1xuQEAgLTgxNSw3ICYjNDM7ODE1LDcgQEAgc3RhdGljIHZvaWQgY29sbGFwc2Vfc2luZ2xlX3B0ZV9lbnRyeV9jb21wb3VuZChzdHJ1Y3QgY29sbGFwc2VfY29udGV4dCAqYywgc3RydWNcbiBcdG1hZHZpc2UocCwgaHBhZ2VfcG1kX3NpemUsIE1BRFZfTk9IVUdFUEFHRSk7XG4gXHRrc2Z0X3ByaW50X21zZyhcJiMzNDtTcGxpdCBodWdlIHBhZ2UgbGVhdmluZyBzaW5nbGUgUFRFIG1hcHBpbmcgY29tcG91bmQgcGFnZS4uLlwmIzM0Oyk7XG4gXHRtYWR2aXNlKHAgJiM0MzsgcGFnZV9zaXplLCBocGFnZV9wbWRfc2l6ZSAtIHBhZ2Vfc2l6ZSwgTUFEVl9ET05UTkVFRCk7XG4tXHRpZiAob3BzLVx1MDAzZWNoZWNrX2h1Z2UocCwgMCkpXG4mIzQzO1x0aWYgKG9wcy1cdTAwM2VjaGVja19odWdlKHAsIC0xKSlcbiBcdFx0c3VjY2VzcyhcJiMzNDtPS1wmIzM0Oyk7XG4gXHRlbHNlXG4gXHRcdGZhaWwoXCYjMzQ7RmFpbFwmIzM0Oyk7XG5AQCAtODM2LDcgJiM0Mzs4MzYsNyBAQCBzdGF0aWMgdm9pZCBjb2xsYXBzZV9mdWxsX29mX2NvbXBvdW5kKHN0cnVjdCBjb2xsYXBzZV9jb250ZXh0ICpjLCBzdHJ1Y3QgbWVtX29wc1xuIFx0a3NmdF9wcmludF9tc2coXCYjMzQ7U3BsaXQgaHVnZSBwYWdlIGxlYXZpbmcgc2luZ2xlIFBURSBwYWdlIHRhYmxlIGZ1bGwgb2YgY29tcG91bmQgcGFnZXMuLi5cJiMzNDspO1xuIFx0bWFkdmlzZShwLCBwYWdlX3NpemUsIE1BRFZfTk9IVUdFUEFHRSk7XG4gXHRtYWR2aXNlKHAsIGhwYWdlX3BtZF9zaXplLCBNQURWX05PSFVHRVBBR0UpO1xuLVx0aWYgKG9wcy1cdTAwM2VjaGVja19odWdlKHAsIDApKVxuJiM0MztcdGlmIChvcHMtXHUwMDNlY2hlY2tfaHVnZShwLCAtMSkpXG4gXHRcdHN1Y2Nlc3MoXCYjMzQ7T0tcJiMzNDspO1xuIFx0ZWxzZVxuIFx0XHRmYWlsKFwmIzM0O0ZhaWxcJiMzNDspO1xuQEAgLTkwMyw3ICYjNDM7OTAzLDcgQEAgc3RhdGljIHZvaWQgY29sbGFwc2VfZm9yayhzdHJ1Y3QgY29sbGFwc2VfY29udGV4dCAqYywgc3RydWN0IG1lbV9vcHMgKm9wcylcbiBcbiBcdGtzZnRfcHJpbnRfbXNnKFwmIzM0O0FsbG9jYXRlIHNtYWxsIHBhZ2UuLi5cJiMzNDspO1xuIFx0b3BzLVx1MDAzZWZhdWx0KHAsIDAsIHBhZ2Vfc2l6ZSk7XG4tXHRpZiAob3BzLVx1MDAzZWNoZWNrX2h1Z2UocCwgMCkpXG4mIzQzO1x0aWYgKG9wcy1cdTAwM2VjaGVja19odWdlKHAsIC0xKSlcbiBcdFx0c3VjY2VzcyhcJiMzNDtPS1wmIzM0Oyk7XG4gXHRlbHNlXG4gXHRcdGZhaWwoXCYjMzQ7RmFpbFwmIzM0Oyk7XG5AQCAtOTExLDcgJiM0Mzs5MTEsNyBAQCBzdGF0aWMgdm9pZCBjb2xsYXBzZV9mb3JrKHN0cnVjdCBjb2xsYXBzZV9jb250ZXh0ICpjLCBzdHJ1Y3QgbWVtX29wcyAqb3BzKVxuIFx0a3NmdF9wcmludF9tc2coXCYjMzQ7U2hhcmUgc21hbGwgcGFnZSBvdmVyIGZvcmsoKS4uLlwmIzM0Oyk7XG4gXHRpZiAoIWZvcmsoKSkge1xuIFx0XHQvKiBEbyBub3QgdG91Y2ggc2V0dGluZ3Mgb24gY2hpbGQgZXhpdCAqL1xuLVx0XHRpZiAob3BzLVx1MDAzZWNoZWNrX2h1Z2UocCwgMCkpXG4mIzQzO1x0XHRpZiAob3BzLVx1MDAzZWNoZWNrX2h1Z2UocCwgLTEpKVxuIFx0XHRcdHN1Y2Nlc3MoXCYjMzQ7T0tcJiMzNDspO1xuIFx0XHRlbHNlXG4gXHRcdFx0ZmFpbChcJiMzNDtGYWlsXCYjMzQ7KTtcbkBAIC05MjksNyAmIzQzOzkyOSw3IEBAIHN0YXRpYyB2b2lkIGNvbGxhcHNlX2Zvcmsoc3RydWN0IGNvbGxhcHNlX2NvbnRleHQgKmMsIHN0cnVjdCBtZW1fb3BzICpvcHMpXG4gXHRleGl0X3N0YXR1cyA9IFdFWElUU1RBVFVTKHdzdGF0dXMpO1xuIFxuIFx0a3NmdF9wcmludF9tc2coXCYjMzQ7Q2hlY2sgaWYgcGFyZW50IHN0aWxsIGhhcyBzbWFsbCBwYWdlLi4uXCYjMzQ7KTtcbi1cdGlmIChvcHMtXHUwMDNlY2hlY2tfaHVnZShwLCAwKSlcbiYjNDM7XHRpZiAob3BzLVx1MDAzZWNoZWNrX2h1Z2UocCwgLTEpKVxuIFx0XHRzdWNjZXNzKFwmIzM0O09LXCYjMzQ7KTtcbiBcdGVsc2VcbiBcdFx0ZmFpbChcJiMzNDtGYWlsXCYjMzQ7KTtcbkBAIC05NTUsNyAmIzQzOzk1NSw3IEBAIHN0YXRpYyB2b2lkIGNvbGxhcHNlX2ZvcmtfY29tcG91bmQoc3RydWN0IGNvbGxhcHNlX2NvbnRleHQgKmMsIHN0cnVjdCBtZW1fb3BzICpvXG4gXHRcdGtzZnRfcHJpbnRfbXNnKFwmIzM0O1NwbGl0IGh1Z2UgcGFnZSBQTUQgaW4gY2hpbGQgcHJvY2Vzcy4uLlwmIzM0Oyk7XG4gXHRcdG1hZHZpc2UocCwgcGFnZV9zaXplLCBNQURWX05PSFVHRVBBR0UpO1xuIFx0XHRtYWR2aXNlKHAsIGhwYWdlX3BtZF9zaXplLCBNQURWX05PSFVHRVBBR0UpO1xuLVx0XHRpZiAob3BzLVx1MDAzZWNoZWNrX2h1Z2UocCwgMCkpXG4mIzQzO1x0XHRpZiAob3BzLVx1MDAzZWNoZWNrX2h1Z2UocCwgLTEpKVxuIFx0XHRcdHN1Y2Nlc3MoXCYjMzQ7T0tcJiMzNDspO1xuIFx0XHRlbHNlXG4gXHRcdFx0ZmFpbChcJiMzNDtGYWlsXCYjMzQ7KTtcbkBAIC0xMDAzLDcgJiM0MzsxMDAzLDcgQEAgc3RhdGljIHZvaWQgY29sbGFwc2VfbWF4X3B0ZXNfc2hhcmVkKHN0cnVjdCBjb2xsYXBzZV9jb250ZXh0ICpjLCBzdHJ1Y3QgbWVtX29wc1xuIFx0XHRrc2Z0X3ByaW50X21zZyhcJiMzNDtUcmlnZ2VyIENvVyBvbiBwYWdlICVkIG9mICVkLi4uXCYjMzQ7LFxuIFx0XHRcdFx0aHBhZ2VfcG1kX25yIC0gbWF4X3B0ZXNfc2hhcmVkIC0gMSwgaHBhZ2VfcG1kX25yKTtcbiBcdFx0b3BzLVx1MDAzZWZhdWx0KHAsIDAsIChocGFnZV9wbWRfbnIgLSBtYXhfcHRlc19zaGFyZWQgLSAxKSAqIHBhZ2Vfc2l6ZSk7XG4tXHRcdGlmIChvcHMtXHUwMDNlY2hlY2tfaHVnZShwLCAwKSlcbiYjNDM7XHRcdGlmIChvcHMtXHUwMDNlY2hlY2tfaHVnZShwLCAtMSkpXG4gXHRcdFx0c3VjY2VzcyhcJiMzNDtPS1wmIzM0Oyk7XG4gXHRcdGVsc2VcbiBcdFx0XHRmYWlsKFwmIzM0O0ZhaWxcJiMzNDspO1xuQEAgLTEwMTYsNyAmIzQzOzEwMTYsNyBAQCBzdGF0aWMgdm9pZCBjb2xsYXBzZV9tYXhfcHRlc19zaGFyZWQoc3RydWN0IGNvbGxhcHNlX2NvbnRleHQgKmMsIHN0cnVjdCBtZW1fb3BzXG4gXHRcdFx0ICAgICAgIGhwYWdlX3BtZF9uciAtIG1heF9wdGVzX3NoYXJlZCwgaHBhZ2VfcG1kX25yKTtcbiBcdFx0XHRvcHMtXHUwMDNlZmF1bHQocCwgMCwgKGhwYWdlX3BtZF9uciAtIG1heF9wdGVzX3NoYXJlZCkgKlxuIFx0XHRcdFx0ICAgIHBhZ2Vfc2l6ZSk7XG4tXHRcdFx0aWYgKG9wcy1cdTAwM2VjaGVja19odWdlKHAsIDApKVxuJiM0MztcdFx0XHRpZiAob3BzLVx1MDAzZWNoZWNrX2h1Z2UocCwgLTEpKVxuIFx0XHRcdFx0c3VjY2VzcyhcJiMzNDtPS1wmIzM0Oyk7XG4gXHRcdFx0ZWxzZVxuIFx0XHRcdFx0ZmFpbChcJiMzNDtGYWlsXCYjMzQ7KTtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9zcGxpdF9odWdlX3BhZ2VfdGVzdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vc3BsaXRfaHVnZV9wYWdlX3Rlc3QuY1xuaW5kZXggMzJiOTkxNDcyZjc0NC4uNGZjZDMzMGNmMDcyNiAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3NwbGl0X2h1Z2VfcGFnZV90ZXN0LmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3NwbGl0X2h1Z2VfcGFnZV90ZXN0LmNcbkBAIC0zMDMsNiAmIzQzOzMwMyw5IEBAIHN0YXRpYyB2b2lkIHZlcmlmeV9yc3NfYW5vbl9zcGxpdF9odWdlX3BhZ2VfYWxsX3plcm9lcyhjaGFyICpvbmVfcGFnZSwgaW50IG5yX2hwXG4gXHRpZiAoIXJzc19hbm9uX2JlZm9yZSlcbiBcdFx0a3NmdF9leGl0X2ZhaWxfbXNnKFwmIzM0O05vIFJzc0Fub24gaXMgYWxsb2NhdGVkIGJlZm9yZSBzcGxpdFxcblwmIzM0Oyk7XG4gXG4mIzQzO1x0LyogUHJldmVudCBraHVnZXBhZ2VkIGZyb20gY29sbGFwc2luZyB0aGUgcGFnZXMuICovXG4mIzQzO1x0bWFkdmlzZShvbmVfcGFnZSwgbGVuLCBNQURWX05PSFVHRVBBR0UpO1xuJiM0MztcbiBcdC8qIHNwbGl0IGFsbCBUSFBzICovXG4gXHR3cml0ZV9kZWJ1Z2ZzKFBJRF9GTVQsIGdldHBpZCgpLCAodWludDY0X3Qpb25lX3BhZ2UsXG4gXHRcdCAgICAgICh1aW50NjRfdClvbmVfcGFnZSAmIzQzOyBsZW4sIDApO1xuQEAgLTMxMSw3ICYjNDM7MzE0LDcgQEAgc3RhdGljIHZvaWQgdmVyaWZ5X3Jzc19hbm9uX3NwbGl0X2h1Z2VfcGFnZV9hbGxfemVyb2VzKGNoYXIgKm9uZV9wYWdlLCBpbnQgbnJfaHBcbiBcdFx0aWYgKG9uZV9wYWdlW2ldICE9IChjaGFyKTApXG4gXHRcdFx0a3NmdF9leGl0X2ZhaWxfbXNnKFwmIzM0OyVsZCBieXRlIGNvcnJ1cHRlZFxcblwmIzM0OywgaSk7XG4gXG4tXHRpZiAoIWNoZWNrX2h1Z2VfYW5vbihvbmVfcGFnZSwgMCwgcG1kX3BhZ2VzaXplKSlcbiYjNDM7XHRpZiAoIWNoZWNrX2h1Z2VfYW5vbihvbmVfcGFnZSwgLW5yX2hwYWdlcywgcG1kX3BhZ2VzaXplKSlcbiBcdFx0a3NmdF9leGl0X2ZhaWxfbXNnKFwmIzM0O1N0aWxsIEFub25IdWdlUGFnZXMgbm90IHNwbGl0XFxuXCYjMzQ7KTtcbiBcbiBcdHJzc19hbm9uX2FmdGVyID0gcnNzX2Fub24oKTtcbkBAIC0zNTAsNiAmIzQzOzM1Myw5IEBAIHN0YXRpYyB2b2lkIHNwbGl0X3BtZF90aHBfdG9fb3JkZXIoaW50IG9yZGVyKVxuIFx0aWYgKCFjaGVja19odWdlX2Fub24ob25lX3BhZ2UsIDQsIHBtZF9wYWdlc2l6ZSkpXG4gXHRcdGtzZnRfZXhpdF9mYWlsX21zZyhcJiMzNDtObyBUSFAgaXMgYWxsb2NhdGVkXFxuXCYjMzQ7KTtcbiBcbiYjNDM7XHQvKiBQcmV2ZW50IGtodWdlcGFnZWQgZnJvbSBjb2xsYXBzaW5nIHRoZSBwYWdlcy4gKi9cbiYjNDM7XHRtYWR2aXNlKG9uZV9wYWdlLCBsZW4sIE1BRFZfTk9IVUdFUEFHRSk7XG4mIzQzO1xuIFx0Lyogc3BsaXQgYWxsIFRIUHMgKi9cbiBcdHdyaXRlX2RlYnVnZnMoUElEX0ZNVCwgZ2V0cGlkKCksICh1aW50NjRfdClvbmVfcGFnZSxcbiBcdFx0KHVpbnQ2NF90KW9uZV9wYWdlICYjNDM7IGxlbiwgb3JkZXIpO1xuQEAgLTM2Niw3ICYjNDM7MzcyLDcgQEAgc3RhdGljIHZvaWQgc3BsaXRfcG1kX3RocF90b19vcmRlcihpbnQgb3JkZXIpXG4gXHRcdFx0XHRcdCAgIChwbWRfb3JkZXIgJiM0MzsgMSkpKVxuIFx0XHRrc2Z0X2V4aXRfZmFpbF9tc2coXCYjMzQ7VW5leHBlY3RlZCBUSFAgc3BsaXRcXG5cJiMzNDspO1xuIFxuLVx0aWYgKCFjaGVja19odWdlX2Fub24ob25lX3BhZ2UsIDAsIHBtZF9wYWdlc2l6ZSkpXG4mIzQzO1x0aWYgKCFjaGVja19odWdlX2Fub24ob25lX3BhZ2UsIC00LCBwbWRfcGFnZXNpemUpKVxuIFx0XHRrc2Z0X2V4aXRfZmFpbF9tc2coXCYjMzQ7U3RpbGwgQW5vbkh1Z2VQYWdlcyBub3Qgc3BsaXRcXG5cJiMzNDspO1xuIFxuIFx0a3NmdF90ZXN0X3Jlc3VsdF9wYXNzKFwmIzM0O1NwbGl0IGh1Z2UgcGFnZXMgdG8gb3JkZXIgJWQgc3VjY2Vzc2Z1bFxcblwmIzM0Oywgb3JkZXIpO1xuQEAgLTQzNiw2ICYjNDM7NDQyLDkgQEAgc3RhdGljIHZvaWQgc3BsaXRfcHRlX21hcHBlZF90aHAodm9pZClcbiBcdFx0Z290byBvdXQ7XG4gXHR9XG4gXG4mIzQzO1x0LyogUHJldmVudCBraHVnZXBhZ2VkIGZyb20gY29sbGFwc2luZyB0aGUgcGFnZXMuICovXG4mIzQzO1x0bWFkdmlzZSh0aHBfYXJlYSwgdGhwX2FyZWFfc2l6ZSwgTUFEVl9OT0hVR0VQQUdFKTtcbiYjNDM7XG4gXHQvKiBTcGxpdCBhbGwgVEhQcyB0aHJvdWdoIHRoZSByZW1hcHBlZCBwYWdlcy4gKi9cbiBcdHdyaXRlX2RlYnVnZnMoUElEX0ZNVCwgZ2V0cGlkKCksICh1aW50NjRfdClwYWdlX2FyZWEsXG4gXHRcdCAgICAgICh1aW50NjRfdClwYWdlX2FyZWEgJiM0MzsgcGFnZV9hcmVhX3NpemUsIDApO1xuQEAgLTY2NSw2ICYjNDM7Njc0LDggQEAgc3RhdGljIGludCBjcmVhdGVfcGFnZWNhY2hlX3RocF9hbmRfZmQoY29uc3QgY2hhciAqdGVzdGZpbGUsIHNpemVfdCBmZF9zaXplLFxuIFx0XHRrc2Z0X3Rlc3RfcmVzdWx0X3NraXAoXCYjMzQ7UGFnZWNhY2hlIGZvbGlvIHNwbGl0IHNraXBwZWRcXG5cJiMzNDspO1xuIFx0XHRyZXR1cm4gLTI7XG4gXHR9XG4mIzQzO1x0LyogUHJldmVudCBraHVnZXBhZ2VkIGZyb20gY29sbGFwc2luZyB0aGUgcGFnZXMuICovXG4mIzQzO1x0bWFkdmlzZSgqYWRkciwgZmRfc2l6ZSwgTUFEVl9OT0hVR0VQQUdFKTtcbiBcdHJldHVybiAwO1xuIGVycl9vdXRfY2xvc2U6XG4gXHRjbG9zZSgqZmQpO1xuQEAgLTczNSw3ICYjNDM7NzQ2LDcgQEAgc3RhdGljIHZvaWQgc3BsaXRfdGhwX2luX3BhZ2VjYWNoZV90b19vcmRlcl9hdChzaXplX3QgZmRfc2l6ZSxcbiBcdFx0Z290byBvdXQ7XG4gXHR9XG4gXG4tXHRpZiAoIWNoZWNrX2h1Z2VfZmlsZShhZGRyLCAwLCBwbWRfcGFnZXNpemUpKSB7XG4mIzQzO1x0aWYgKCFjaGVja19odWdlX2ZpbGUoYWRkciwgLShmZF9zaXplIC8gcG1kX3BhZ2VzaXplKSwgcG1kX3BhZ2VzaXplKSkge1xuIFx0XHRrc2Z0X3ByaW50X21zZyhcJiMzNDtTdGlsbCBGaWxlUG1kTWFwcGVkIG5vdCBzcGxpdFxcblwmIzM0Oyk7XG4gXHRcdGVyciA9IEVYSVRfRkFJTFVSRTtcbiBcdFx0Z290byBvdXQ7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdm1fdXRpbC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdm1fdXRpbC5jXG5pbmRleCAzMTFmYzViNDUxM2ViLi4xNjZkNWQ3OTI4OWYzIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdm1fdXRpbC5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS92bV91dGlsLmNcbkBAIC0xNCw2ICYjNDM7MTQsOCBAQFxuICNkZWZpbmUgUE1EX1NJWkVfRklMRV9QQVRIIFwmIzM0Oy9zeXMva2VybmVsL21tL3RyYW5zcGFyZW50X2h1Z2VwYWdlL2hwYWdlX3BtZF9zaXplXCYjMzQ7XG4gI2RlZmluZSBTTUFQX0ZJTEVfUEFUSCBcJiMzNDsvcHJvYy9zZWxmL3NtYXBzXCYjMzQ7XG4gI2RlZmluZSBTVEFUVVNfRklMRV9QQVRIIFwmIzM0Oy9wcm9jL3NlbGYvc3RhdHVzXCYjMzQ7XG4mIzQzOyNkZWZpbmUgUEFHRU1BUF9GSUxFX1BBVEggXCYjMzQ7L3Byb2Mvc2VsZi9wYWdlbWFwXCYjMzQ7XG4mIzQzOyNkZWZpbmUgS1BBR0VGTEFHU19GSUxFX1BBVEggXCYjMzQ7L3Byb2Mva3BhZ2VmbGFnc1wmIzM0O1xuICNkZWZpbmUgTUFYX0xJTkVfTEVOR1RIIDUwMFxuIFxuIHVuc2lnbmVkIGludCBfX3BhZ2Vfc2l6ZTtcbkBAIC0yMjksMzcgJiM0MzsyMzEsMTI4IEBAIGNoYXIgKl9fZ2V0X3NtYXBfZW50cnkodm9pZCAqYWRkciwgY29uc3QgY2hhciAqcGF0dGVybiwgY2hhciAqYnVmLCBzaXplX3QgbGVuKVxuIFx0cmV0dXJuIGVudHJ5O1xuIH1cbiBcbi1ib29sIF9fY2hlY2tfaHVnZSh2b2lkICphZGRyLCBjaGFyICpwYXR0ZXJuLCBpbnQgbnJfaHBhZ2VzLFxuLVx0XHQgIHVpbnQ2NF90IGhwYWdlX3NpemUpXG4te1xuLVx0Y2hhciBidWZmZXJbTUFYX0xJTkVfTEVOR1RIXTtcbi1cdHVpbnQ2NF90IHRocCA9IC0xO1xuLVx0Y2hhciAqZW50cnk7XG4tXG4tXHRlbnRyeSA9IF9fZ2V0X3NtYXBfZW50cnkoYWRkciwgcGF0dGVybiwgYnVmZmVyLCBzaXplb2YoYnVmZmVyKSk7XG4tXHRpZiAoIWVudHJ5KVxuLVx0XHRnb3RvIGVycl9vdXQ7XG4tXG4tXHRpZiAoc3NjYW5mKGVudHJ5LCBcJiMzNDslOVwmIzM0OyBTQ051NjQgXCYjMzQ7IGtCXCYjMzQ7LCBcdTAwMjZ0aHApICE9IDEpXG4tXHRcdGtzZnRfZXhpdF9mYWlsX21zZyhcJiMzNDtSZWFkaW5nIHNtYXAgZXJyb3JcXG5cJiMzNDspO1xuLVxuLWVycl9vdXQ6XG4tXHRyZXR1cm4gdGhwID09IChucl9ocGFnZXMgKiAoaHBhZ2Vfc2l6ZSBcdTAwM2VcdTAwM2UgMTApKTtcbi19XG4tXG4gYm9vbCBjaGVja19odWdlX2Fub24odm9pZCAqYWRkciwgaW50IG5yX2hwYWdlcywgdWludDY0X3QgaHBhZ2Vfc2l6ZSlcbiB7XG4tXHRyZXR1cm4gX19jaGVja19odWdlKGFkZHIsIFwmIzM0O0Fub25IdWdlUGFnZXM6IFwmIzM0OywgbnJfaHBhZ2VzLCBocGFnZV9zaXplKTtcbiYjNDM7XHRpbnQgaSwgcGFnZW1hcF9mZCwgbnIgPSAwO1xuJiM0MztcdHVpbnQ2NF90IGNhdGVnb3JpZXM7XG4mIzQzO1x0Ym9vbCBleHBlY3RfaHVnZTtcbiYjNDM7XG4mIzQzO1x0aWYgKG5yX2hwYWdlcyA9PSAwIHx8IGhwYWdlX3NpemUgPT0gMClcbiYjNDM7XHRcdHJldHVybiBmYWxzZTtcbiYjNDM7XG4mIzQzO1x0aWYgKG5yX2hwYWdlcyBcdTAwM2MgMCkge1xuJiM0MztcdFx0bnJfaHBhZ2VzID0gLW5yX2hwYWdlcztcbiYjNDM7XHRcdGV4cGVjdF9odWdlID0gZmFsc2U7XG4mIzQzO1x0fSBlbHNlXG4mIzQzO1x0XHRleHBlY3RfaHVnZSA9IHRydWU7XG4mIzQzO1xuJiM0MztcdHBhZ2VtYXBfZmQgPSBvcGVuKFBBR0VNQVBfRklMRV9QQVRILCBPX1JET05MWSk7XG4mIzQzO1x0aWYgKHBhZ2VtYXBfZmQgXHUwMDNjIDApXG4mIzQzO1x0XHRrc2Z0X2V4aXRfZmFpbF9tc2coXCYjMzQ7b3BlbiBwYWdlbWFwOiAlc1xcblwmIzM0Oywgc3RyZXJyb3IoZXJybm8pKTtcbiYjNDM7XG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgbnJfaHBhZ2VzOyBpJiM0MzsmIzQzOywgYWRkciAmIzQzOz0gaHBhZ2Vfc2l6ZSkge1xuJiM0MztcdFx0Y2F0ZWdvcmllcyA9IHBhZ2VtYXBfc2Nhbl9nZXRfY2F0ZWdvcmllcyhwYWdlbWFwX2ZkLCBhZGRyKTtcbiYjNDM7XHRcdGlmICghKGNhdGVnb3JpZXMgXHUwMDI2IFBBR0VfSVNfSFVHRSkpXG4mIzQzO1x0XHRcdGNvbnRpbnVlO1xuJiM0MztcdFx0aWYgKGNhdGVnb3JpZXMgXHUwMDI2IFBBR0VfSVNfRklMRSlcbiYjNDM7XHRcdFx0Y29udGludWU7XG4mIzQzO1x0XHRuciYjNDM7JiM0Mzs7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRjbG9zZShwYWdlbWFwX2ZkKTtcbiYjNDM7XHRyZXR1cm4gZXhwZWN0X2h1Z2UgPyBuciA9PSBucl9ocGFnZXMgOiBuciA9PSAwO1xuIH1cbiBcbiBib29sIGNoZWNrX2h1Z2VfZmlsZSh2b2lkICphZGRyLCBpbnQgbnJfaHBhZ2VzLCB1aW50NjRfdCBocGFnZV9zaXplKVxuIHtcbi1cdHJldHVybiBfX2NoZWNrX2h1Z2UoYWRkciwgXCYjMzQ7RmlsZVBtZE1hcHBlZDpcJiMzNDssIG5yX2hwYWdlcywgaHBhZ2Vfc2l6ZSk7XG4mIzQzO1x0aW50IGksIHBhZ2VtYXBfZmQsIGtwZl9mZCwgbnIgPSAwO1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgcGZuO1xuJiM0MztcdHVpbnQ2NF90IGNhdGVnb3JpZXMsIGtwZjtcbiYjNDM7XHRib29sIGV4cGVjdF9odWdlO1xuJiM0MztcbiYjNDM7XHRpZiAobnJfaHBhZ2VzID09IDAgfHwgaHBhZ2Vfc2l6ZSA9PSAwKVxuJiM0MztcdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcbiYjNDM7XHRpZiAobnJfaHBhZ2VzIFx1MDAzYyAwKSB7XG4mIzQzO1x0XHRucl9ocGFnZXMgPSAtbnJfaHBhZ2VzO1xuJiM0MztcdFx0ZXhwZWN0X2h1Z2UgPSBmYWxzZTtcbiYjNDM7XHR9IGVsc2VcbiYjNDM7XHRcdGV4cGVjdF9odWdlID0gdHJ1ZTtcbiYjNDM7XG4mIzQzO1x0cGFnZW1hcF9mZCA9IG9wZW4oUEFHRU1BUF9GSUxFX1BBVEgsIE9fUkRPTkxZKTtcbiYjNDM7XHRpZiAocGFnZW1hcF9mZCBcdTAwM2MgMClcbiYjNDM7XHRcdGtzZnRfZXhpdF9mYWlsX21zZyhcJiMzNDtvcGVuIHBhZ2VtYXA6ICVzXFxuXCYjMzQ7LCBzdHJlcnJvcihlcnJubykpO1xuJiM0MztcbiYjNDM7XHRrcGZfZmQgPSBvcGVuKEtQQUdFRkxBR1NfRklMRV9QQVRILCBPX1JET05MWSk7XG4mIzQzO1x0aWYgKGtwZl9mZCBcdTAwM2MgMClcbiYjNDM7XHRcdGtzZnRfZXhpdF9mYWlsX21zZyhcJiMzNDtvcGVuIGtwYWdlZmxhZ3M6ICVzXFxuXCYjMzQ7LCBzdHJlcnJvcihlcnJubykpO1xuJiM0MztcbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBucl9ocGFnZXM7IGkmIzQzOyYjNDM7LCBhZGRyICYjNDM7PSBocGFnZV9zaXplKSB7XG4mIzQzO1x0XHRjYXRlZ29yaWVzID0gcGFnZW1hcF9zY2FuX2dldF9jYXRlZ29yaWVzKHBhZ2VtYXBfZmQsIGFkZHIpO1xuJiM0MztcdFx0cGZuID0gcGFnZW1hcF9nZXRfcGZuKHBhZ2VtYXBfZmQsIGFkZHIpO1xuJiM0MztcdFx0aWYgKHBmbiA9PSAtMVVMKVxuJiM0MztcdFx0XHRjb250aW51ZTtcbiYjNDM7XHRcdGlmIChwYWdlZmxhZ3NfZ2V0KHBmbiwga3BmX2ZkLCBcdTAwMjZrcGYpKVxuJiM0MztcdFx0XHRrc2Z0X2V4aXRfZmFpbF9tc2coXCYjMzQ7cmVhZCBrcGFnZWZsYWdzOiAlc1xcblwmIzM0Oywgc3RyZXJyb3IoZXJybm8pKTtcbiYjNDM7XHRcdGlmICghKGNhdGVnb3JpZXMgXHUwMDI2IFBBR0VfSVNfSFVHRSkpXG4mIzQzO1x0XHRcdGNvbnRpbnVlO1xuJiM0MztcdFx0aWYgKCEoY2F0ZWdvcmllcyBcdTAwMjYgUEFHRV9JU19GSUxFKSlcbiYjNDM7XHRcdFx0Y29udGludWU7XG4mIzQzO1x0XHRpZiAoa3BmIFx1MDAyNiBLUEZfU1dBUEJBQ0tFRClcbiYjNDM7XHRcdFx0Y29udGludWU7XG4mIzQzO1x0XHRuciYjNDM7JiM0Mzs7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRjbG9zZShwYWdlbWFwX2ZkKTtcbiYjNDM7XHRjbG9zZShrcGZfZmQpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gZXhwZWN0X2h1Z2UgPyBuciA9PSBucl9ocGFnZXMgOiBuciA9PSAwO1xuIH1cbiBcbiBib29sIGNoZWNrX2h1Z2Vfc2htZW0odm9pZCAqYWRkciwgaW50IG5yX2hwYWdlcywgdWludDY0X3QgaHBhZ2Vfc2l6ZSlcbiB7XG4tXHRyZXR1cm4gX19jaGVja19odWdlKGFkZHIsIFwmIzM0O1NobWVtUG1kTWFwcGVkOlwmIzM0OywgbnJfaHBhZ2VzLCBocGFnZV9zaXplKTtcbiYjNDM7XHRpbnQgaSwgcGFnZW1hcF9mZCwga3BmX2ZkLCBuciA9IDA7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBwZm47XG4mIzQzO1x0dWludDY0X3QgY2F0ZWdvcmllcywga3BmO1xuJiM0MztcdGJvb2wgZXhwZWN0X2h1Z2U7XG4mIzQzO1xuJiM0MztcdGlmIChucl9ocGFnZXMgPT0gMCB8fCBocGFnZV9zaXplID09IDApXG4mIzQzO1x0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1xuJiM0MztcdGlmIChucl9ocGFnZXMgXHUwMDNjIDApIHtcbiYjNDM7XHRcdG5yX2hwYWdlcyA9IC1ucl9ocGFnZXM7XG4mIzQzO1x0XHRleHBlY3RfaHVnZSA9IHRydWU7XG4mIzQzO1x0fSBlbHNlXG4mIzQzO1x0XHRleHBlY3RfaHVnZSA9IGZhbHNlO1xuJiM0MztcbiYjNDM7XHRwYWdlbWFwX2ZkID0gb3BlbihQQUdFTUFQX0ZJTEVfUEFUSCwgT19SRE9OTFkpO1xuJiM0MztcdGlmIChwYWdlbWFwX2ZkIFx1MDAzYyAwKVxuJiM0MztcdFx0a3NmdF9leGl0X2ZhaWxfbXNnKFwmIzM0O29wZW4gcGFnZW1hcDogJXNcXG5cJiMzNDssIHN0cmVycm9yKGVycm5vKSk7XG4mIzQzO1xuJiM0MztcdGtwZl9mZCA9IG9wZW4oS1BBR0VGTEFHU19GSUxFX1BBVEgsIE9fUkRPTkxZKTtcbiYjNDM7XHRpZiAoa3BmX2ZkIFx1MDAzYyAwKVxuJiM0MztcdFx0a3NmdF9leGl0X2ZhaWxfbXNnKFwmIzM0O29wZW4ga3BhZ2VmbGFnczogJXNcXG5cJiMzNDssIHN0cmVycm9yKGVycm5vKSk7XG4mIzQzO1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG5yX2hwYWdlczsgaSYjNDM7JiM0MzssIGFkZHIgJiM0Mzs9IGhwYWdlX3NpemUpIHtcbiYjNDM7XHRcdGNhdGVnb3JpZXMgPSBwYWdlbWFwX3NjYW5fZ2V0X2NhdGVnb3JpZXMocGFnZW1hcF9mZCwgYWRkcik7XG4mIzQzO1x0XHRwZm4gPSBwYWdlbWFwX2dldF9wZm4ocGFnZW1hcF9mZCwgYWRkcik7XG4mIzQzO1x0XHRpZiAocGZuID09IC0xVUwpXG4mIzQzO1x0XHRcdGNvbnRpbnVlO1xuJiM0MztcdFx0aWYgKHBhZ2VmbGFnc19nZXQocGZuLCBrcGZfZmQsIFx1MDAyNmtwZikpXG4mIzQzO1x0XHRcdGtzZnRfZXhpdF9mYWlsX21zZyhcJiMzNDtyZWFkIGtwYWdlZmxhZ3M6ICVzXFxuXCYjMzQ7LCBzdHJlcnJvcihlcnJubykpO1xuJiM0MztcdFx0aWYgKCEoY2F0ZWdvcmllcyBcdTAwMjYgUEFHRV9JU19IVUdFKSlcbiYjNDM7XHRcdFx0Y29udGludWU7XG4mIzQzO1x0XHRpZiAoIShjYXRlZ29yaWVzIFx1MDAyNiBQQUdFX0lTX0ZJTEUpKVxuJiM0MztcdFx0XHRjb250aW51ZTtcbiYjNDM7XHRcdGlmICghKGtwZiBcdTAwMjYgS1BGX1NXQVBCQUNLRUQpKVxuJiM0MztcdFx0XHRjb250aW51ZTtcbiYjNDM7XHRcdG5yJiM0MzsmIzQzOztcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGNsb3NlKHBhZ2VtYXBfZmQpO1xuJiM0MztcdGNsb3NlKGtwZl9mZCk7XG4mIzQzO1xuJiM0MztcdHJldHVybiBleHBlY3RfaHVnZSA/IG5yID09IG5yX2hwYWdlcyA6IG5yID09IDA7XG4gfVxuIFxuIGludDY0X3QgYWxsb2NhdGVfdHJhbnNodWdlKHZvaWQgKnB0ciwgaW50IHBhZ2VtYXBfZmQpXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdm1fdXRpbC5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdm1fdXRpbC5oXG5pbmRleCBlYThmYzhmZGYwZWIwLi4wYTE2MjdmMzZlZmMzIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdm1fdXRpbC5oXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS92bV91dGlsLmhcbkBAIC0xOCw2ICYjNDM7MTgsNyBAQFxuICNkZWZpbmUgUE1fU1dBUCAgICAgICAgICAgICAgICAgICAgICAgQklUX1VMTCg2MilcbiAjZGVmaW5lIFBNX1BSRVNFTlQgICAgICAgICAgICAgICAgICAgIEJJVF9VTEwoNjMpXG4gXG4mIzQzOyNkZWZpbmUgS1BGX1NXQVBCQUNLRUQgICAgICAgICAgICAgICAgQklUX1VMTCgxNClcbiAjZGVmaW5lIEtQRl9DT01QT1VORF9IRUFEICAgICAgICAgICAgIEJJVF9VTEwoMTUpXG4gI2RlZmluZSBLUEZfQ09NUE9VTkRfVEFJTCAgICAgICAgICAgICBCSVRfVUxMKDE2KVxuICNkZWZpbmUgS1BGX0hXUE9JU09OICAgICAgICAgICAgICAgICAgQklUX1VMTCgxOSlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAxOTo0ODwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb25seSBtb2RpZmllcyBtZW1vcnkgbWFuYWdlbWVudCBzZWxmdGVzdHMgaW4gdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vIGFuZCBkb2VzIG5vdCBtYWtlIGFueSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGNvcmUga2VybmVsLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmUgY29kZS4gVGhlcmVmb3JlLCBpdCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBrZXJuZWwgbG9naWMgdGhhdCByZXF1aXJlcyBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDFjYjU1ZmE5ODJmYmRlM2UzNmRjNjAxMGIxZWU3NmQ5ZmQzMWMyNzQKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVGh1IEF1ZyAyMCAxOTo0ODozOCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2todWdlcGFnZWQuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2todWdlcGFnZWQuYwppbmRleCAxMGU4ZGVkY2IwODdkLi4yZTQ2NjVlNmQ1ODUyIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9raHVnZXBhZ2VkLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0va2h1Z2VwYWdlZC5jCkBAIC01MzMsNyAmIzQzOzUzMyw3IEBAIHN0YXRpYyB2b2lkIF9fbWFkdmlzZV9jb2xsYXBzZShjb25zdCBjaGFyICptc2csIGNoYXIgKnAsIGludCBucl9ocGFnZXMsCiAJcmV0ID0gbWFkdmlzZV9jb2xsYXBzZV9yZXRyeShwLCBucl9ocGFnZXMgKiBocGFnZV9wbWRfc2l6ZSk7CiAJaWYgKCgoYm9vbClyZXQpID09IGV4cGVjdCkKIAkJZmFpbCgmIzM0O0ZhaWw6IEJhZCByZXR1cm4gdmFsdWUmIzM0Oyk7Ci0JZWxzZSBpZiAoIW9wcy0mZ3Q7Y2hlY2tfaHVnZShwLCBleHBlY3QgPyBucl9ocGFnZXMgOiAwKSkKJiM0MzsJZWxzZSBpZiAoIW9wcy0mZ3Q7Y2hlY2tfaHVnZShwLCBleHBlY3QgPyBucl9ocGFnZXMgOiAtbnJfaHBhZ2VzKSkKIAkJZmFpbCgmIzM0O0ZhaWw6IGNoZWNrX2h1Z2UoKSYjMzQ7KTsKIAllbHNlCiAJCXN1Y2Nlc3MoJiMzNDtPSyYjMzQ7KTsKQEAgLTU0NSw3ICYjNDM7NTQ1LDcgQEAgc3RhdGljIHZvaWQgbWFkdmlzZV9jb2xsYXBzZShjb25zdCBjaGFyICptc2csIGNoYXIgKnAsIGludCBucl9ocGFnZXMsCiAJCQkgICAgIHN0cnVjdCBtZW1fb3BzICpvcHMsIGJvb2wgZXhwZWN0KQogewogCS8qIFNhbml0eSBjaGVjayAqLwotCWlmICghb3BzLSZndDtjaGVja19odWdlKHAsIDApKQomIzQzOwlpZiAoIW9wcy0mZ3Q7Y2hlY2tfaHVnZShwLCAtbnJfaHBhZ2VzKSkKIAkJa3NmdF9leGl0X2ZhaWxfbXNnKCYjMzQ7VW5leHBlY3RlZCBodWdlIHBhZ2VcbiYjMzQ7KTsKIAlfX21hZHZpc2VfY29sbGFwc2UobXNnLCBwLCBucl9ocGFnZXMsIG9wcywgZXhwZWN0KTsKIH0KQEAgLTU1OCw3ICYjNDM7NTU4LDcgQEAgc3RhdGljIGJvb2wgd2FpdF9mb3Jfc2Nhbihjb25zdCBjaGFyICptc2csIGNoYXIgKnAsIGludCBucl9ocGFnZXMsCiAJaW50IHRpbWVvdXQgPSA2OyAvKiAzIHNlY29uZHMgKi8KIAogCS8qIFNhbml0eSBjaGVjayAqLwotCWlmICghb3BzLSZndDtjaGVja19odWdlKHAsIDApKQomIzQzOwlpZiAoIW9wcy0mZ3Q7Y2hlY2tfaHVnZShwLCAtbnJfaHBhZ2VzKSkKIAkJa3NmdF9leGl0X2ZhaWxfbXNnKCYjMzQ7VW5leHBlY3RlZCBodWdlIHBhZ2VcbiYjMzQ7KTsKIAogCW1hZHZpc2UocCwgbnJfaHBhZ2VzICogaHBhZ2VfcG1kX3NpemUsIE1BRFZfSFVHRVBBR0UpOwpAQCAtNjA1LDcgJiM0Mzs2MDUsNyBAQCBzdGF0aWMgdm9pZCBraHVnZXBhZ2VkX2NvbGxhcHNlKGNvbnN0IGNoYXIgKm1zZywgY2hhciAqcCwgaW50IG5yX2hwYWdlcywKIAlpZiAob3BzICE9ICZhbXA7X19hbm9uX29wcykKIAkJb3BzLSZndDtmYXVsdChwLCAwLCBucl9ocGFnZXMgKiBocGFnZV9wbWRfc2l6ZSk7CiAKLQlpZiAob3BzLSZndDtjaGVja19odWdlKHAsIGV4cGVjdCA/IG5yX2hwYWdlcyA6IDApKQomIzQzOwlpZiAob3BzLSZndDtjaGVja19odWdlKHAsIGV4cGVjdCA/IG5yX2hwYWdlcyA6IC1ucl9ocGFnZXMpKQogCQlzdWNjZXNzKCYjMzQ7T0smIzM0Oyk7CiAJZWxzZQogCQlmYWlsKCYjMzQ7RmFpbCYjMzQ7KTsKQEAgLTY0Myw3ICYjNDM7NjQzLDcgQEAgc3RhdGljIHZvaWQgYWxsb2NfYXRfZmF1bHQodm9pZCkKIAogCW1hZHZpc2UocCwgcGFnZV9zaXplLCBNQURWX0RPTlRORUVEKTsKIAlrc2Z0X3ByaW50X21zZygmIzM0O1NwbGl0IGh1Z2UgUE1EIG9uIE1BRFZfRE9OVE5FRUQuLi4mIzM0Oyk7Ci0JaWYgKGNoZWNrX2h1Z2VfYW5vbihwLCAwLCBocGFnZV9wbWRfc2l6ZSkpCiYjNDM7CWlmIChjaGVja19odWdlX2Fub24ocCwgLTEsIGhwYWdlX3BtZF9zaXplKSkKIAkJc3VjY2VzcygmIzM0O09LJiMzNDspOwogCWVsc2UKIAkJZmFpbCgmIzM0O0ZhaWwmIzM0Oyk7CkBAIC04MTUsNyAmIzQzOzgxNSw3IEBAIHN0YXRpYyB2b2lkIGNvbGxhcHNlX3NpbmdsZV9wdGVfZW50cnlfY29tcG91bmQoc3RydWN0IGNvbGxhcHNlX2NvbnRleHQgKmMsIHN0cnVjCiAJbWFkdmlzZShwLCBocGFnZV9wbWRfc2l6ZSwgTUFEVl9OT0hVR0VQQUdFKTsKIAlrc2Z0X3ByaW50X21zZygmIzM0O1NwbGl0IGh1Z2UgcGFnZSBsZWF2aW5nIHNpbmdsZSBQVEUgbWFwcGluZyBjb21wb3VuZCBwYWdlLi4uJiMzNDspOwogCW1hZHZpc2UocCAmIzQzOyBwYWdlX3NpemUsIGhwYWdlX3BtZF9zaXplIC0gcGFnZV9zaXplLCBNQURWX0RPTlRORUVEKTsKLQlpZiAob3BzLSZndDtjaGVja19odWdlKHAsIDApKQomIzQzOwlpZiAob3BzLSZndDtjaGVja19odWdlKHAsIC0xKSkKIAkJc3VjY2VzcygmIzM0O09LJiMzNDspOwogCWVsc2UKIAkJZmFpbCgmIzM0O0ZhaWwmIzM0Oyk7CkBAIC04MzYsNyAmIzQzOzgzNiw3IEBAIHN0YXRpYyB2b2lkIGNvbGxhcHNlX2Z1bGxfb2ZfY29tcG91bmQoc3RydWN0IGNvbGxhcHNlX2NvbnRleHQgKmMsIHN0cnVjdCBtZW1fb3BzCiAJa3NmdF9wcmludF9tc2coJiMzNDtTcGxpdCBodWdlIHBhZ2UgbGVhdmluZyBzaW5nbGUgUFRFIHBhZ2UgdGFibGUgZnVsbCBvZiBjb21wb3VuZCBwYWdlcy4uLiYjMzQ7KTsKIAltYWR2aXNlKHAsIHBhZ2Vfc2l6ZSwgTUFEVl9OT0hVR0VQQUdFKTsKIAltYWR2aXNlKHAsIGhwYWdlX3BtZF9zaXplLCBNQURWX05PSFVHRVBBR0UpOwotCWlmIChvcHMtJmd0O2NoZWNrX2h1Z2UocCwgMCkpCiYjNDM7CWlmIChvcHMtJmd0O2NoZWNrX2h1Z2UocCwgLTEpKQogCQlzdWNjZXNzKCYjMzQ7T0smIzM0Oyk7CiAJZWxzZQogCQlmYWlsKCYjMzQ7RmFpbCYjMzQ7KTsKQEAgLTkwMyw3ICYjNDM7OTAzLDcgQEAgc3RhdGljIHZvaWQgY29sbGFwc2VfZm9yayhzdHJ1Y3QgY29sbGFwc2VfY29udGV4dCAqYywgc3RydWN0IG1lbV9vcHMgKm9wcykKIAogCWtzZnRfcHJpbnRfbXNnKCYjMzQ7QWxsb2NhdGUgc21hbGwgcGFnZS4uLiYjMzQ7KTsKIAlvcHMtJmd0O2ZhdWx0KHAsIDAsIHBhZ2Vfc2l6ZSk7Ci0JaWYgKG9wcy0mZ3Q7Y2hlY2tfaHVnZShwLCAwKSkKJiM0MzsJaWYgKG9wcy0mZ3Q7Y2hlY2tfaHVnZShwLCAtMSkpCiAJCXN1Y2Nlc3MoJiMzNDtPSyYjMzQ7KTsKIAllbHNlCiAJCWZhaWwoJiMzNDtGYWlsJiMzNDspOwpAQCAtOTExLDcgJiM0Mzs5MTEsNyBAQCBzdGF0aWMgdm9pZCBjb2xsYXBzZV9mb3JrKHN0cnVjdCBjb2xsYXBzZV9jb250ZXh0ICpjLCBzdHJ1Y3QgbWVtX29wcyAqb3BzKQogCWtzZnRfcHJpbnRfbXNnKCYjMzQ7U2hhcmUgc21hbGwgcGFnZSBvdmVyIGZvcmsoKS4uLiYjMzQ7KTsKIAlpZiAoIWZvcmsoKSkgewogCQkvKiBEbyBub3QgdG91Y2ggc2V0dGluZ3Mgb24gY2hpbGQgZXhpdCAqLwotCQlpZiAob3BzLSZndDtjaGVja19odWdlKHAsIDApKQomIzQzOwkJaWYgKG9wcy0mZ3Q7Y2hlY2tfaHVnZShwLCAtMSkpCiAJCQlzdWNjZXNzKCYjMzQ7T0smIzM0Oyk7CiAJCWVsc2UKIAkJCWZhaWwoJiMzNDtGYWlsJiMzNDspOwpAQCAtOTI5LDcgJiM0Mzs5MjksNyBAQCBzdGF0aWMgdm9pZCBjb2xsYXBzZV9mb3JrKHN0cnVjdCBjb2xsYXBzZV9jb250ZXh0ICpjLCBzdHJ1Y3QgbWVtX29wcyAqb3BzKQogCWV4aXRfc3RhdHVzID0gV0VYSVRTVEFUVVMod3N0YXR1cyk7CiAKIAlrc2Z0X3ByaW50X21zZygmIzM0O0NoZWNrIGlmIHBhcmVudCBzdGlsbCBoYXMgc21hbGwgcGFnZS4uLiYjMzQ7KTsKLQlpZiAob3BzLSZndDtjaGVja19odWdlKHAsIDApKQomIzQzOwlpZiAob3BzLSZndDtjaGVja19odWdlKHAsIC0xKSkKIAkJc3VjY2VzcygmIzM0O09LJiMzNDspOwogCWVsc2UKIAkJZmFpbCgmIzM0O0ZhaWwmIzM0Oyk7CkBAIC05NTUsNyAmIzQzOzk1NSw3IEBAIHN0YXRpYyB2b2lkIGNvbGxhcHNlX2ZvcmtfY29tcG91bmQoc3RydWN0IGNvbGxhcHNlX2NvbnRleHQgKmMsIHN0cnVjdCBtZW1fb3BzICpvCiAJCWtzZnRfcHJpbnRfbXNnKCYjMzQ7U3BsaXQgaHVnZSBwYWdlIFBNRCBpbiBjaGlsZCBwcm9jZXNzLi4uJiMzNDspOwogCQltYWR2aXNlKHAsIHBhZ2Vfc2l6ZSwgTUFEVl9OT0hVR0VQQUdFKTsKIAkJbWFkdmlzZShwLCBocGFnZV9wbWRfc2l6ZSwgTUFEVl9OT0hVR0VQQUdFKTsKLQkJaWYgKG9wcy0mZ3Q7Y2hlY2tfaHVnZShwLCAwKSkKJiM0MzsJCWlmIChvcHMtJmd0O2NoZWNrX2h1Z2UocCwgLTEpKQogCQkJc3VjY2VzcygmIzM0O09LJiMzNDspOwogCQllbHNlCiAJCQlmYWlsKCYjMzQ7RmFpbCYjMzQ7KTsKQEAgLTEwMDMsNyAmIzQzOzEwMDMsNyBAQCBzdGF0aWMgdm9pZCBjb2xsYXBzZV9tYXhfcHRlc19zaGFyZWQoc3RydWN0IGNvbGxhcHNlX2NvbnRleHQgKmMsIHN0cnVjdCBtZW1fb3BzCiAJCWtzZnRfcHJpbnRfbXNnKCYjMzQ7VHJpZ2dlciBDb1cgb24gcGFnZSAlZCBvZiAlZC4uLiYjMzQ7LAogCQkJCWhwYWdlX3BtZF9uciAtIG1heF9wdGVzX3NoYXJlZCAtIDEsIGhwYWdlX3BtZF9ucik7CiAJCW9wcy0mZ3Q7ZmF1bHQocCwgMCwgKGhwYWdlX3BtZF9uciAtIG1heF9wdGVzX3NoYXJlZCAtIDEpICogcGFnZV9zaXplKTsKLQkJaWYgKG9wcy0mZ3Q7Y2hlY2tfaHVnZShwLCAwKSkKJiM0MzsJCWlmIChvcHMtJmd0O2NoZWNrX2h1Z2UocCwgLTEpKQogCQkJc3VjY2VzcygmIzM0O09LJiMzNDspOwogCQllbHNlCiAJCQlmYWlsKCYjMzQ7RmFpbCYjMzQ7KTsKQEAgLTEwMTYsNyAmIzQzOzEwMTYsNyBAQCBzdGF0aWMgdm9pZCBjb2xsYXBzZV9tYXhfcHRlc19zaGFyZWQoc3RydWN0IGNvbGxhcHNlX2NvbnRleHQgKmMsIHN0cnVjdCBtZW1fb3BzCiAJCQkgICAgICAgaHBhZ2VfcG1kX25yIC0gbWF4X3B0ZXNfc2hhcmVkLCBocGFnZV9wbWRfbnIpOwogCQkJb3BzLSZndDtmYXVsdChwLCAwLCAoaHBhZ2VfcG1kX25yIC0gbWF4X3B0ZXNfc2hhcmVkKSAqCiAJCQkJICAgIHBhZ2Vfc2l6ZSk7Ci0JCQlpZiAob3BzLSZndDtjaGVja19odWdlKHAsIDApKQomIzQzOwkJCWlmIChvcHMtJmd0O2NoZWNrX2h1Z2UocCwgLTEpKQogCQkJCXN1Y2Nlc3MoJiMzNDtPSyYjMzQ7KTsKIAkJCWVsc2UKIAkJCQlmYWlsKCYjMzQ7RmFpbCYjMzQ7KTsKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3NwbGl0X2h1Z2VfcGFnZV90ZXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9zcGxpdF9odWdlX3BhZ2VfdGVzdC5jCmluZGV4IDMyYjk5MTQ3MmY3NDQuLjRmY2QzMzBjZjA3MjYgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3NwbGl0X2h1Z2VfcGFnZV90ZXN0LmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vc3BsaXRfaHVnZV9wYWdlX3Rlc3QuYwpAQCAtMzAzLDYgJiM0MzszMDMsOSBAQCBzdGF0aWMgdm9pZCB2ZXJpZnlfcnNzX2Fub25fc3BsaXRfaHVnZV9wYWdlX2FsbF96ZXJvZXMoY2hhciAqb25lX3BhZ2UsIGludCBucl9ocAogCWlmICghcnNzX2Fub25fYmVmb3JlKQogCQlrc2Z0X2V4aXRfZmFpbF9tc2coJiMzNDtObyBSc3NBbm9uIGlzIGFsbG9jYXRlZCBiZWZvcmUgc3BsaXRcbiYjMzQ7KTsKIAomIzQzOwkvKiBQcmV2ZW50IGtodWdlcGFnZWQgZnJvbSBjb2xsYXBzaW5nIHRoZSBwYWdlcy4gKi8KJiM0MzsJbWFkdmlzZShvbmVfcGFnZSwgbGVuLCBNQURWX05PSFVHRVBBR0UpOwomIzQzOwogCS8qIHNwbGl0IGFsbCBUSFBzICovCiAJd3JpdGVfZGVidWdmcyhQSURfRk1ULCBnZXRwaWQoKSwgKHVpbnQ2NF90KW9uZV9wYWdlLAogCQkgICAgICAodWludDY0X3Qpb25lX3BhZ2UgJiM0MzsgbGVuLCAwKTsKQEAgLTMxMSw3ICYjNDM7MzE0LDcgQEAgc3RhdGljIHZvaWQgdmVyaWZ5X3Jzc19hbm9uX3NwbGl0X2h1Z2VfcGFnZV9hbGxfemVyb2VzKGNoYXIgKm9uZV9wYWdlLCBpbnQgbnJfaHAKIAkJaWYgKG9uZV9wYWdlW2ldICE9IChjaGFyKTApCiAJCQlrc2Z0X2V4aXRfZmFpbF9tc2coJiMzNDslbGQgYnl0ZSBjb3JydXB0ZWRcbiYjMzQ7LCBpKTsKIAotCWlmICghY2hlY2tfaHVnZV9hbm9uKG9uZV9wYWdlLCAwLCBwbWRfcGFnZXNpemUpKQomIzQzOwlpZiAoIWNoZWNrX2h1Z2VfYW5vbihvbmVfcGFnZSwgLW5yX2hwYWdlcywgcG1kX3BhZ2VzaXplKSkKIAkJa3NmdF9leGl0X2ZhaWxfbXNnKCYjMzQ7U3RpbGwgQW5vbkh1Z2VQYWdlcyBub3Qgc3BsaXRcbiYjMzQ7KTsKIAogCXJzc19hbm9uX2FmdGVyID0gcnNzX2Fub24oKTsKQEAgLTM1MCw2ICYjNDM7MzUzLDkgQEAgc3RhdGljIHZvaWQgc3BsaXRfcG1kX3RocF90b19vcmRlcihpbnQgb3JkZXIpCiAJaWYgKCFjaGVja19odWdlX2Fub24ob25lX3BhZ2UsIDQsIHBtZF9wYWdlc2l6ZSkpCiAJCWtzZnRfZXhpdF9mYWlsX21zZygmIzM0O05vIFRIUCBpcyBhbGxvY2F0ZWRcbiYjMzQ7KTsKIAomIzQzOwkvKiBQcmV2ZW50IGtodWdlcGFnZWQgZnJvbSBjb2xsYXBzaW5nIHRoZSBwYWdlcy4gKi8KJiM0MzsJbWFkdmlzZShvbmVfcGFnZSwgbGVuLCBNQURWX05PSFVHRVBBR0UpOwomIzQzOwogCS8qIHNwbGl0IGFsbCBUSFBzICovCiAJd3JpdGVfZGVidWdmcyhQSURfRk1ULCBnZXRwaWQoKSwgKHVpbnQ2NF90KW9uZV9wYWdlLAogCQkodWludDY0X3Qpb25lX3BhZ2UgJiM0MzsgbGVuLCBvcmRlcik7CkBAIC0zNjYsNyAmIzQzOzM3Miw3IEBAIHN0YXRpYyB2b2lkIHNwbGl0X3BtZF90aHBfdG9fb3JkZXIoaW50IG9yZGVyKQogCQkJCQkgICAocG1kX29yZGVyICYjNDM7IDEpKSkKIAkJa3NmdF9leGl0X2ZhaWxfbXNnKCYjMzQ7VW5leHBlY3RlZCBUSFAgc3BsaXRcbiYjMzQ7KTsKIAotCWlmICghY2hlY2tfaHVnZV9hbm9uKG9uZV9wYWdlLCAwLCBwbWRfcGFnZXNpemUpKQomIzQzOwlpZiAoIWNoZWNrX2h1Z2VfYW5vbihvbmVfcGFnZSwgLTQsIHBtZF9wYWdlc2l6ZSkpCiAJCWtzZnRfZXhpdF9mYWlsX21zZygmIzM0O1N0aWxsIEFub25IdWdlUGFnZXMgbm90IHNwbGl0XG4mIzM0Oyk7CiAKIAlrc2Z0X3Rlc3RfcmVzdWx0X3Bhc3MoJiMzNDtTcGxpdCBodWdlIHBhZ2VzIHRvIG9yZGVyICVkIHN1Y2Nlc3NmdWxcbiYjMzQ7LCBvcmRlcik7CkBAIC00MzYsNiAmIzQzOzQ0Miw5IEBAIHN0YXRpYyB2b2lkIHNwbGl0X3B0ZV9tYXBwZWRfdGhwKHZvaWQpCiAJCWdvdG8gb3V0OwogCX0KIAomIzQzOwkvKiBQcmV2ZW50IGtodWdlcGFnZWQgZnJvbSBjb2xsYXBzaW5nIHRoZSBwYWdlcy4gKi8KJiM0MzsJbWFkdmlzZSh0aHBfYXJlYSwgdGhwX2FyZWFfc2l6ZSwgTUFEVl9OT0hVR0VQQUdFKTsKJiM0MzsKIAkvKiBTcGxpdCBhbGwgVEhQcyB0aHJvdWdoIHRoZSByZW1hcHBlZCBwYWdlcy4gKi8KIAl3cml0ZV9kZWJ1Z2ZzKFBJRF9GTVQsIGdldHBpZCgpLCAodWludDY0X3QpcGFnZV9hcmVhLAogCQkgICAgICAodWludDY0X3QpcGFnZV9hcmVhICYjNDM7IHBhZ2VfYXJlYV9zaXplLCAwKTsKQEAgLTY2NSw2ICYjNDM7Njc0LDggQEAgc3RhdGljIGludCBjcmVhdGVfcGFnZWNhY2hlX3RocF9hbmRfZmQoY29uc3QgY2hhciAqdGVzdGZpbGUsIHNpemVfdCBmZF9zaXplLAogCQlrc2Z0X3Rlc3RfcmVzdWx0X3NraXAoJiMzNDtQYWdlY2FjaGUgZm9saW8gc3BsaXQgc2tpcHBlZFxuJiMzNDspOwogCQlyZXR1cm4gLTI7CiAJfQomIzQzOwkvKiBQcmV2ZW50IGtodWdlcGFnZWQgZnJvbSBjb2xsYXBzaW5nIHRoZSBwYWdlcy4gKi8KJiM0MzsJbWFkdmlzZSgqYWRkciwgZmRfc2l6ZSwgTUFEVl9OT0hVR0VQQUdFKTsKIAlyZXR1cm4gMDsKIGVycl9vdXRfY2xvc2U6CiAJY2xvc2UoKmZkKTsKQEAgLTczNSw3ICYjNDM7NzQ2LDcgQEAgc3RhdGljIHZvaWQgc3BsaXRfdGhwX2luX3BhZ2VjYWNoZV90b19vcmRlcl9hdChzaXplX3QgZmRfc2l6ZSwKIAkJZ290byBvdXQ7CiAJfQogCi0JaWYgKCFjaGVja19odWdlX2ZpbGUoYWRkciwgMCwgcG1kX3BhZ2VzaXplKSkgewomIzQzOwlpZiAoIWNoZWNrX2h1Z2VfZmlsZShhZGRyLCAtKGZkX3NpemUgLyBwbWRfcGFnZXNpemUpLCBwbWRfcGFnZXNpemUpKSB7CiAJCWtzZnRfcHJpbnRfbXNnKCYjMzQ7U3RpbGwgRmlsZVBtZE1hcHBlZCBub3Qgc3BsaXRcbiYjMzQ7KTsKIAkJZXJyID0gRVhJVF9GQUlMVVJFOwogCQlnb3RvIG91dDsKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ZtX3V0aWwuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ZtX3V0aWwuYwppbmRleCAzMTFmYzViNDUxM2ViLi4xNjZkNWQ3OTI4OWYzIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS92bV91dGlsLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdm1fdXRpbC5jCkBAIC0xNCw2ICYjNDM7MTQsOCBAQAogI2RlZmluZSBQTURfU0laRV9GSUxFX1BBVEggJiMzNDsvc3lzL2tlcm5lbC9tbS90cmFuc3BhcmVudF9odWdlcGFnZS9ocGFnZV9wbWRfc2l6ZSYjMzQ7CiAjZGVmaW5lIFNNQVBfRklMRV9QQVRIICYjMzQ7L3Byb2Mvc2VsZi9zbWFwcyYjMzQ7CiAjZGVmaW5lIFNUQVRVU19GSUxFX1BBVEggJiMzNDsvcHJvYy9zZWxmL3N0YXR1cyYjMzQ7CiYjNDM7I2RlZmluZSBQQUdFTUFQX0ZJTEVfUEFUSCAmIzM0Oy9wcm9jL3NlbGYvcGFnZW1hcCYjMzQ7CiYjNDM7I2RlZmluZSBLUEFHRUZMQUdTX0ZJTEVfUEFUSCAmIzM0Oy9wcm9jL2twYWdlZmxhZ3MmIzM0OwogI2RlZmluZSBNQVhfTElORV9MRU5HVEggNTAwCiAKIHVuc2lnbmVkIGludCBfX3BhZ2Vfc2l6ZTsKQEAgLTIyOSwzNyAmIzQzOzIzMSwxMjggQEAgY2hhciAqX19nZXRfc21hcF9lbnRyeSh2b2lkICphZGRyLCBjb25zdCBjaGFyICpwYXR0ZXJuLCBjaGFyICpidWYsIHNpemVfdCBsZW4pCiAJcmV0dXJuIGVudHJ5OwogfQogCi1ib29sIF9fY2hlY2tfaHVnZSh2b2lkICphZGRyLCBjaGFyICpwYXR0ZXJuLCBpbnQgbnJfaHBhZ2VzLAotCQkgIHVpbnQ2NF90IGhwYWdlX3NpemUpCi17Ci0JY2hhciBidWZmZXJbTUFYX0xJTkVfTEVOR1RIXTsKLQl1aW50NjRfdCB0aHAgPSAtMTsKLQljaGFyICplbnRyeTsKLQotCWVudHJ5ID0gX19nZXRfc21hcF9lbnRyeShhZGRyLCBwYXR0ZXJuLCBidWZmZXIsIHNpemVvZihidWZmZXIpKTsKLQlpZiAoIWVudHJ5KQotCQlnb3RvIGVycl9vdXQ7Ci0KLQlpZiAoc3NjYW5mKGVudHJ5LCAmIzM0OyU5JiMzNDsgU0NOdTY0ICYjMzQ7IGtCJiMzNDssICZhbXA7dGhwKSAhPSAxKQotCQlrc2Z0X2V4aXRfZmFpbF9tc2coJiMzNDtSZWFkaW5nIHNtYXAgZXJyb3JcbiYjMzQ7KTsKLQotZXJyX291dDoKLQlyZXR1cm4gdGhwID09IChucl9ocGFnZXMgKiAoaHBhZ2Vfc2l6ZSAmZ3Q7Jmd0OyAxMCkpOwotfQotCiBib29sIGNoZWNrX2h1Z2VfYW5vbih2b2lkICphZGRyLCBpbnQgbnJfaHBhZ2VzLCB1aW50NjRfdCBocGFnZV9zaXplKQogewotCXJldHVybiBfX2NoZWNrX2h1Z2UoYWRkciwgJiMzNDtBbm9uSHVnZVBhZ2VzOiAmIzM0OywgbnJfaHBhZ2VzLCBocGFnZV9zaXplKTsKJiM0MzsJaW50IGksIHBhZ2VtYXBfZmQsIG5yID0gMDsKJiM0MzsJdWludDY0X3QgY2F0ZWdvcmllczsKJiM0MzsJYm9vbCBleHBlY3RfaHVnZTsKJiM0MzsKJiM0MzsJaWYgKG5yX2hwYWdlcyA9PSAwIHx8IGhwYWdlX3NpemUgPT0gMCkKJiM0MzsJCXJldHVybiBmYWxzZTsKJiM0MzsKJiM0MzsJaWYgKG5yX2hwYWdlcyAmbHQ7IDApIHsKJiM0MzsJCW5yX2hwYWdlcyA9IC1ucl9ocGFnZXM7CiYjNDM7CQlleHBlY3RfaHVnZSA9IGZhbHNlOwomIzQzOwl9IGVsc2UKJiM0MzsJCWV4cGVjdF9odWdlID0gdHJ1ZTsKJiM0MzsKJiM0MzsJcGFnZW1hcF9mZCA9IG9wZW4oUEFHRU1BUF9GSUxFX1BBVEgsIE9fUkRPTkxZKTsKJiM0MzsJaWYgKHBhZ2VtYXBfZmQgJmx0OyAwKQomIzQzOwkJa3NmdF9leGl0X2ZhaWxfbXNnKCYjMzQ7b3BlbiBwYWdlbWFwOiAlc1xuJiMzNDssIHN0cmVycm9yKGVycm5vKSk7CiYjNDM7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBucl9ocGFnZXM7IGkmIzQzOyYjNDM7LCBhZGRyICYjNDM7PSBocGFnZV9zaXplKSB7CiYjNDM7CQljYXRlZ29yaWVzID0gcGFnZW1hcF9zY2FuX2dldF9jYXRlZ29yaWVzKHBhZ2VtYXBfZmQsIGFkZHIpOwomIzQzOwkJaWYgKCEoY2F0ZWdvcmllcyAmYW1wOyBQQUdFX0lTX0hVR0UpKQomIzQzOwkJCWNvbnRpbnVlOwomIzQzOwkJaWYgKGNhdGVnb3JpZXMgJmFtcDsgUEFHRV9JU19GSUxFKQomIzQzOwkJCWNvbnRpbnVlOwomIzQzOwkJbnImIzQzOyYjNDM7OwomIzQzOwl9CiYjNDM7CiYjNDM7CWNsb3NlKHBhZ2VtYXBfZmQpOwomIzQzOwlyZXR1cm4gZXhwZWN0X2h1Z2UgPyBuciA9PSBucl9ocGFnZXMgOiBuciA9PSAwOwogfQogCiBib29sIGNoZWNrX2h1Z2VfZmlsZSh2b2lkICphZGRyLCBpbnQgbnJfaHBhZ2VzLCB1aW50NjRfdCBocGFnZV9zaXplKQogewotCXJldHVybiBfX2NoZWNrX2h1Z2UoYWRkciwgJiMzNDtGaWxlUG1kTWFwcGVkOiYjMzQ7LCBucl9ocGFnZXMsIGhwYWdlX3NpemUpOwomIzQzOwlpbnQgaSwgcGFnZW1hcF9mZCwga3BmX2ZkLCBuciA9IDA7CiYjNDM7CXVuc2lnbmVkIGxvbmcgcGZuOwomIzQzOwl1aW50NjRfdCBjYXRlZ29yaWVzLCBrcGY7CiYjNDM7CWJvb2wgZXhwZWN0X2h1Z2U7CiYjNDM7CiYjNDM7CWlmIChucl9ocGFnZXMgPT0gMCB8fCBocGFnZV9zaXplID09IDApCiYjNDM7CQlyZXR1cm4gZmFsc2U7CiYjNDM7CiYjNDM7CWlmIChucl9ocGFnZXMgJmx0OyAwKSB7CiYjNDM7CQlucl9ocGFnZXMgPSAtbnJfaHBhZ2VzOwomIzQzOwkJZXhwZWN0X2h1Z2UgPSBmYWxzZTsKJiM0MzsJfSBlbHNlCiYjNDM7CQlleHBlY3RfaHVnZSA9IHRydWU7CiYjNDM7CiYjNDM7CXBhZ2VtYXBfZmQgPSBvcGVuKFBBR0VNQVBfRklMRV9QQVRILCBPX1JET05MWSk7CiYjNDM7CWlmIChwYWdlbWFwX2ZkICZsdDsgMCkKJiM0MzsJCWtzZnRfZXhpdF9mYWlsX21zZygmIzM0O29wZW4gcGFnZW1hcDogJXNcbiYjMzQ7LCBzdHJlcnJvcihlcnJubykpOwomIzQzOwomIzQzOwlrcGZfZmQgPSBvcGVuKEtQQUdFRkxBR1NfRklMRV9QQVRILCBPX1JET05MWSk7CiYjNDM7CWlmIChrcGZfZmQgJmx0OyAwKQomIzQzOwkJa3NmdF9leGl0X2ZhaWxfbXNnKCYjMzQ7b3BlbiBrcGFnZWZsYWdzOiAlc1xuJiMzNDssIHN0cmVycm9yKGVycm5vKSk7CiYjNDM7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBucl9ocGFnZXM7IGkmIzQzOyYjNDM7LCBhZGRyICYjNDM7PSBocGFnZV9zaXplKSB7CiYjNDM7CQljYXRlZ29yaWVzID0gcGFnZW1hcF9zY2FuX2dldF9jYXRlZ29yaWVzKHBhZ2VtYXBfZmQsIGFkZHIpOwomIzQzOwkJcGZuID0gcGFnZW1hcF9nZXRfcGZuKHBhZ2VtYXBfZmQsIGFkZHIpOwomIzQzOwkJaWYgKHBmbiA9PSAtMVVMKQomIzQzOwkJCWNvbnRpbnVlOwomIzQzOwkJaWYgKHBhZ2VmbGFnc19nZXQocGZuLCBrcGZfZmQsICZhbXA7a3BmKSkKJiM0MzsJCQlrc2Z0X2V4aXRfZmFpbF9tc2coJiMzNDtyZWFkIGtwYWdlZmxhZ3M6ICVzXG4mIzM0Oywgc3RyZXJyb3IoZXJybm8pKTsKJiM0MzsJCWlmICghKGNhdGVnb3JpZXMgJmFtcDsgUEFHRV9JU19IVUdFKSkKJiM0MzsJCQljb250aW51ZTsKJiM0MzsJCWlmICghKGNhdGVnb3JpZXMgJmFtcDsgUEFHRV9JU19GSUxFKSkKJiM0MzsJCQljb250aW51ZTsKJiM0MzsJCWlmIChrcGYgJmFtcDsgS1BGX1NXQVBCQUNLRUQpCiYjNDM7CQkJY29udGludWU7CiYjNDM7CQluciYjNDM7JiM0Mzs7CiYjNDM7CX0KJiM0MzsKJiM0MzsJY2xvc2UocGFnZW1hcF9mZCk7CiYjNDM7CWNsb3NlKGtwZl9mZCk7CiYjNDM7CiYjNDM7CXJldHVybiBleHBlY3RfaHVnZSA/IG5yID09IG5yX2hwYWdlcyA6IG5yID09IDA7CiB9CiAKIGJvb2wgY2hlY2tfaHVnZV9zaG1lbSh2b2lkICphZGRyLCBpbnQgbnJfaHBhZ2VzLCB1aW50NjRfdCBocGFnZV9zaXplKQogewotCXJldHVybiBfX2NoZWNrX2h1Z2UoYWRkciwgJiMzNDtTaG1lbVBtZE1hcHBlZDomIzM0OywgbnJfaHBhZ2VzLCBocGFnZV9zaXplKTsKJiM0MzsJaW50IGksIHBhZ2VtYXBfZmQsIGtwZl9mZCwgbnIgPSAwOwomIzQzOwl1bnNpZ25lZCBsb25nIHBmbjsKJiM0MzsJdWludDY0X3QgY2F0ZWdvcmllcywga3BmOwomIzQzOwlib29sIGV4cGVjdF9odWdlOwomIzQzOwomIzQzOwlpZiAobnJfaHBhZ2VzID09IDAgfHwgaHBhZ2Vfc2l6ZSA9PSAwKQomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwomIzQzOwlpZiAobnJfaHBhZ2VzICZsdDsgMCkgewomIzQzOwkJbnJfaHBhZ2VzID0gLW5yX2hwYWdlczsKJiM0MzsJCWV4cGVjdF9odWdlID0gdHJ1ZTsKJiM0MzsJfSBlbHNlCiYjNDM7CQlleHBlY3RfaHVnZSA9IGZhbHNlOwomIzQzOwomIzQzOwlwYWdlbWFwX2ZkID0gb3BlbihQQUdFTUFQX0ZJTEVfUEFUSCwgT19SRE9OTFkpOwomIzQzOwlpZiAocGFnZW1hcF9mZCAmbHQ7IDApCiYjNDM7CQlrc2Z0X2V4aXRfZmFpbF9tc2coJiMzNDtvcGVuIHBhZ2VtYXA6ICVzXG4mIzM0Oywgc3RyZXJyb3IoZXJybm8pKTsKJiM0MzsKJiM0MzsJa3BmX2ZkID0gb3BlbihLUEFHRUZMQUdTX0ZJTEVfUEFUSCwgT19SRE9OTFkpOwomIzQzOwlpZiAoa3BmX2ZkICZsdDsgMCkKJiM0MzsJCWtzZnRfZXhpdF9mYWlsX21zZygmIzM0O29wZW4ga3BhZ2VmbGFnczogJXNcbiYjMzQ7LCBzdHJlcnJvcihlcnJubykpOwomIzQzOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgbnJfaHBhZ2VzOyBpJiM0MzsmIzQzOywgYWRkciAmIzQzOz0gaHBhZ2Vfc2l6ZSkgewomIzQzOwkJY2F0ZWdvcmllcyA9IHBhZ2VtYXBfc2Nhbl9nZXRfY2F0ZWdvcmllcyhwYWdlbWFwX2ZkLCBhZGRyKTsKJiM0MzsJCXBmbiA9IHBhZ2VtYXBfZ2V0X3BmbihwYWdlbWFwX2ZkLCBhZGRyKTsKJiM0MzsJCWlmIChwZm4gPT0gLTFVTCkKJiM0MzsJCQljb250aW51ZTsKJiM0MzsJCWlmIChwYWdlZmxhZ3NfZ2V0KHBmbiwga3BmX2ZkLCAmYW1wO2twZikpCiYjNDM7CQkJa3NmdF9leGl0X2ZhaWxfbXNnKCYjMzQ7cmVhZCBrcGFnZWZsYWdzOiAlc1xuJiMzNDssIHN0cmVycm9yKGVycm5vKSk7CiYjNDM7CQlpZiAoIShjYXRlZ29yaWVzICZhbXA7IFBBR0VfSVNfSFVHRSkpCiYjNDM7CQkJY29udGludWU7CiYjNDM7CQlpZiAoIShjYXRlZ29yaWVzICZhbXA7IFBBR0VfSVNfRklMRSkpCiYjNDM7CQkJY29udGludWU7CiYjNDM7CQlpZiAoIShrcGYgJmFtcDsgS1BGX1NXQVBCQUNLRUQpKQomIzQzOwkJCWNvbnRpbnVlOwomIzQzOwkJbnImIzQzOyYjNDM7OwomIzQzOwl9CiYjNDM7CiYjNDM7CWNsb3NlKHBhZ2VtYXBfZmQpOwomIzQzOwljbG9zZShrcGZfZmQpOwomIzQzOwomIzQzOwlyZXR1cm4gZXhwZWN0X2h1Z2UgPyBuciA9PSBucl9ocGFnZXMgOiBuciA9PSAwOwogfQogCiBpbnQ2NF90IGFsbG9jYXRlX3RyYW5zaHVnZSh2b2lkICpwdHIsIGludCBwYWdlbWFwX2ZkKQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdm1fdXRpbC5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdm1fdXRpbC5oCmluZGV4IGVhOGZjOGZkZjBlYjAuLjBhMTYyN2YzNmVmYzMgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ZtX3V0aWwuaAomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS92bV91dGlsLmgKQEAgLTE4LDYgJiM0MzsxOCw3IEBACiAjZGVmaW5lIFBNX1NXQVAgICAgICAgICAgICAgICAgICAgICAgIEJJVF9VTEwoNjIpCiAjZGVmaW5lIFBNX1BSRVNFTlQgICAgICAgICAgICAgICAgICAgIEJJVF9VTEwoNjMpCiAKJiM0MzsjZGVmaW5lIEtQRl9TV0FQQkFDS0VEICAgICAgICAgICAgICAgIEJJVF9VTEwoMTQpCiAjZGVmaW5lIEtQRl9DT01QT1VORF9IRUFEICAgICAgICAgICAgIEJJVF9VTEwoMTUpCiAjZGVmaW5lIEtQRl9DT01QT1VORF9UQUlMICAgICAgICAgICAgIEJJVF9VTEwoMTYpCiAjZGVmaW5lIEtQRl9IV1BPSVNPTiAgICAgICAgICAgICAgICAgIEJJVF9VTEwoMTkpCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIwIDE5OjQ4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDcyNjgKCQkJCQkJCW91dHB1dDogODQKCQkJCQkJCXRob3VnaHRzOiAzMDUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQXNzZXNzaW5nIHRoZSBGdXp6aW5nIEltcGFjdCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBUaGlzIHBhdGNoIGlzIHRvdWNoaW5nIGZpbGVzIHdpdGhpbiBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vYC4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIHNlZWluZyBjaGFuZ2VzIGluIGBraHVnZXBhZ2VkLmNgLCBgc3BsaXRfaHVnZV9wYWdlX3Rlc3QuY2AsIGB2bV91dGlsLmNgLCBhbmQgYHZtX3V0aWwuaGAuIFJpZ2h0IG9mZiB0aGUgYmF0LCB0aGVzZSBhcmUgYWxsIHNlbGZ0ZXN0cyByZWxhdGVkIHRvIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0uIFRoYXQmIzM5O3MgZ29vZDsgaXQga2VlcHMgaXQgc29tZXdoYXQgY29udGFpbmVkLgoKTm93LCBhIGNyaXRpY2FsIHBvaW50IGhlcmUg4oCTIGFuZCBJJiMzOTttIHJlYWxseSBtYWtpbmcgc3VyZSB0byBuYWlsIHRoaXMgZG93biDigJMgdGhpcyBwYXRjaCBpc24mIzM5O3QgdG91Y2hpbmcgYW55IG9mIHRoZSBjb3JlIGtlcm5lbCBjb2RlLCBhbnkgZHJpdmVycywgb3IgYW55IGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBzdHVmZi4gSXQmIzM5O3Mgc29sZWx5IGNvbmZpbmVkIHRvIHRoZSBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYCBkaXJlY3RvcnkuIE5vIHJlYWwgbG9naWMgaXMgZ2V0dGluZyBjaGFuZ2VkLiBKdXN0IGRvdWJsZSBjaGVja2luZy4uLiB5dXAsIHRob3NlIGFyZSBhbGwgdGhlIGZpbGVzLgoKR2l2ZW4gdGhhdCwgbXkgY29uY2x1c2lvbiBpcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkLiBTaW5jZSB0aGlzIHBhdGNoICpvbmx5KiBtb2RpZmllcyBzZWxmdGVzdHMsIGl0JiMzOTtzIG5vdCBpbnRyb2R1Y2luZyBhbnkgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCB3b3VsZCB3YXJyYW50IGZ1enppbmcuIFdlJiMzOTtyZSBub3QgZ2V0dGluZyBhbnkgbmV3IGNvZGUgcGF0aHMgb3IgbG9naWMgdGhhdCBuZWVkIHRvIGJlIHBva2VkIGF0LiBTbywgSSB3aWxsIHJldHVybiBgV29ydGhGdXp6aW5nPWZhbHNlYC4gVGhlIHJlYXNvbmluZyBpcyBjbGVhcjogdGhlIGNoYW5nZXMgYXJlIGlzb2xhdGVkIHRvIHNlbGZ0ZXN0cywgYW5kIHRoZXJlJiMzOTtzIG5vIGZ1bmN0aW9uYWwga2VybmVsIGxvZ2ljIGludm9sdmVkLiBUaGF0JiMzOTtzIHRoZSByZXN1bHQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjAgMTk6NDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIG1lbW9yeSBtYW5hZ2VtZW50IHNlbGZ0ZXN0cyBpbiB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS8gYW5kIGRvZXMgbm90IG1ha2UgYW55IGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUgY29yZSBrZXJuZWwsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZSBjb2RlLiBUaGVyZWZvcmUsIGl0IGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IGtlcm5lbCBsb2dpYyB0aGF0IHJlcXVpcmVzIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIG1lbW9yeSBtYW5hZ2VtZW50IHNlbGZ0ZXN0cyBpbiB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS8gYW5kIGRvZXMgbm90IG1ha2UgYW55IGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUgY29yZSBrZXJuZWwsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZSBjb2RlLiBUaGVyZWZvcmUsIGl0IGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IGtlcm5lbCBsb2dpYyB0aGF0IHJlcXVpcmVzIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIwIDE5OjQ4PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0yMFQxOTo0ODo0MC42NTg5OTgxMDlaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5NzM4MjkzOTgyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggb25seSBtb2RpZmllcyBtZW1vcnkgbWFuYWdlbWVudCBzZWxmdGVzdHMgaW4gdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vIGFuZCBkb2VzIG5vdCBtYWtlIGFueSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGNvcmUga2VybmVsLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmUgY29kZS4gVGhlcmVmb3JlLCBpdCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBrZXJuZWwgbG9naWMgdGhhdCByZXF1aXJlcyBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjBUMTk6NDg6NDAuNjU5MDA1MzU5WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDI5NDc3MDA0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgMWNiNTVmYTk4MmZiZGUzZTM2ZGM2MDEwYjFlZTc2ZDlmZDMxYzI3NFxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVGh1IEF1ZyAyMCAxOTo0ODozOCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9raHVnZXBhZ2VkLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9raHVnZXBhZ2VkLmNcXG5pbmRleCAxMGU4ZGVkY2IwODdkLi4yZTQ2NjVlNmQ1ODUyIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2todWdlcGFnZWQuY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2todWdlcGFnZWQuY1xcbkBAIC01MzMsNyArNTMzLDcgQEAgc3RhdGljIHZvaWQgX19tYWR2aXNlX2NvbGxhcHNlKGNvbnN0IGNoYXIgKm1zZywgY2hhciAqcCwgaW50IG5yX2hwYWdlcyxcXG4gXFx0cmV0ID0gbWFkdmlzZV9jb2xsYXBzZV9yZXRyeShwLCBucl9ocGFnZXMgKiBocGFnZV9wbWRfc2l6ZSk7XFxuIFxcdGlmICgoKGJvb2wpcmV0KSA9PSBleHBlY3QpXFxuIFxcdFxcdGZhaWwoXFxcIkZhaWw6IEJhZCByZXR1cm4gdmFsdWVcXFwiKTtcXG4tXFx0ZWxzZSBpZiAoIW9wcy1cXHUwMDNlY2hlY2tfaHVnZShwLCBleHBlY3QgPyBucl9ocGFnZXMgOiAwKSlcXG4rXFx0ZWxzZSBpZiAoIW9wcy1cXHUwMDNlY2hlY2tfaHVnZShwLCBleHBlY3QgPyBucl9ocGFnZXMgOiAtbnJfaHBhZ2VzKSlcXG4gXFx0XFx0ZmFpbChcXFwiRmFpbDogY2hlY2tfaHVnZSgpXFxcIik7XFxuIFxcdGVsc2VcXG4gXFx0XFx0c3VjY2VzcyhcXFwiT0tcXFwiKTtcXG5AQCAtNTQ1LDcgKzU0NSw3IEBAIHN0YXRpYyB2b2lkIG1hZHZpc2VfY29sbGFwc2UoY29uc3QgY2hhciAqbXNnLCBjaGFyICpwLCBpbnQgbnJfaHBhZ2VzLFxcbiBcXHRcXHRcXHQgICAgIHN0cnVjdCBtZW1fb3BzICpvcHMsIGJvb2wgZXhwZWN0KVxcbiB7XFxuIFxcdC8qIFNhbml0eSBjaGVjayAqL1xcbi1cXHRpZiAoIW9wcy1cXHUwMDNlY2hlY2tfaHVnZShwLCAwKSlcXG4rXFx0aWYgKCFvcHMtXFx1MDAzZWNoZWNrX2h1Z2UocCwgLW5yX2hwYWdlcykpXFxuIFxcdFxcdGtzZnRfZXhpdF9mYWlsX21zZyhcXFwiVW5leHBlY3RlZCBodWdlIHBhZ2VcXFxcblxcXCIpO1xcbiBcXHRfX21hZHZpc2VfY29sbGFwc2UobXNnLCBwLCBucl9ocGFnZXMsIG9wcywgZXhwZWN0KTtcXG4gfVxcbkBAIC01NTgsNyArNTU4LDcgQEAgc3RhdGljIGJvb2wgd2FpdF9mb3Jfc2Nhbihjb25zdCBjaGFyICptc2csIGNoYXIgKnAsIGludCBucl9ocGFnZXMsXFxuIFxcdGludCB0aW1lb3V0ID0gNjsgLyogMyBzZWNvbmRzICovXFxuIFxcbiBcXHQvKiBTYW5pdHkgY2hlY2sgKi9cXG4tXFx0aWYgKCFvcHMtXFx1MDAzZWNoZWNrX2h1Z2UocCwgMCkpXFxuK1xcdGlmICghb3BzLVxcdTAwM2VjaGVja19odWdlKHAsIC1ucl9ocGFnZXMpKVxcbiBcXHRcXHRrc2Z0X2V4aXRfZmFpbF9tc2coXFxcIlVuZXhwZWN0ZWQgaHVnZSBwYWdlXFxcXG5cXFwiKTtcXG4gXFxuIFxcdG1hZHZpc2UocCwgbnJfaHBhZ2VzICogaHBhZ2VfcG1kX3NpemUsIE1BRFZfSFVHRVBBR0UpO1xcbkBAIC02MDUsNyArNjA1LDcgQEAgc3RhdGljIHZvaWQga2h1Z2VwYWdlZF9jb2xsYXBzZShjb25zdCBjaGFyICptc2csIGNoYXIgKnAsIGludCBucl9ocGFnZXMsXFxuIFxcdGlmIChvcHMgIT0gXFx1MDAyNl9fYW5vbl9vcHMpXFxuIFxcdFxcdG9wcy1cXHUwMDNlZmF1bHQocCwgMCwgbnJfaHBhZ2VzICogaHBhZ2VfcG1kX3NpemUpO1xcbiBcXG4tXFx0aWYgKG9wcy1cXHUwMDNlY2hlY2tfaHVnZShwLCBleHBlY3QgPyBucl9ocGFnZXMgOiAwKSlcXG4rXFx0aWYgKG9wcy1cXHUwMDNlY2hlY2tfaHVnZShwLCBleHBlY3QgPyBucl9ocGFnZXMgOiAtbnJfaHBhZ2VzKSlcXG4gXFx0XFx0c3VjY2VzcyhcXFwiT0tcXFwiKTtcXG4gXFx0ZWxzZVxcbiBcXHRcXHRmYWlsKFxcXCJGYWlsXFxcIik7XFxuQEAgLTY0Myw3ICs2NDMsNyBAQCBzdGF0aWMgdm9pZCBhbGxvY19hdF9mYXVsdCh2b2lkKVxcbiBcXG4gXFx0bWFkdmlzZShwLCBwYWdlX3NpemUsIE1BRFZfRE9OVE5FRUQpO1xcbiBcXHRrc2Z0X3ByaW50X21zZyhcXFwiU3BsaXQgaHVnZSBQTUQgb24gTUFEVl9ET05UTkVFRC4uLlxcXCIpO1xcbi1cXHRpZiAoY2hlY2tfaHVnZV9hbm9uKHAsIDAsIGhwYWdlX3BtZF9zaXplKSlcXG4rXFx0aWYgKGNoZWNrX2h1Z2VfYW5vbihwLCAtMSwgaHBhZ2VfcG1kX3NpemUpKVxcbiBcXHRcXHRzdWNjZXNzKFxcXCJPS1xcXCIpO1xcbiBcXHRlbHNlXFxuIFxcdFxcdGZhaWwoXFxcIkZhaWxcXFwiKTtcXG5AQCAtODE1LDcgKzgxNSw3IEBAIHN0YXRpYyB2b2lkIGNvbGxhcHNlX3NpbmdsZV9wdGVfZW50cnlfY29tcG91bmQoc3RydWN0IGNvbGxhcHNlX2NvbnRleHQgKmMsIHN0cnVjXFxuIFxcdG1hZHZpc2UocCwgaHBhZ2VfcG1kX3NpemUsIE1BRFZfTk9IVUdFUEFHRSk7XFxuIFxcdGtzZnRfcHJpbnRfbXNnKFxcXCJTcGxpdCBodWdlIHBhZ2UgbGVhdmluZyBzaW5nbGUgUFRFIG1hcHBpbmcgY29tcG91bmQgcGFnZS4uLlxcXCIpO1xcbiBcXHRtYWR2aXNlKHAgKyBwYWdlX3NpemUsIGhwYWdlX3BtZF9zaXplIC0gcGFnZV9zaXplLCBNQURWX0RPTlRORUVEKTtcXG4tXFx0aWYgKG9wcy1cXHUwMDNlY2hlY2tfaHVnZShwLCAwKSlcXG4rXFx0aWYgKG9wcy1cXHUwMDNlY2hlY2tfaHVnZShwLCAtMSkpXFxuIFxcdFxcdHN1Y2Nlc3MoXFxcIk9LXFxcIik7XFxuIFxcdGVsc2VcXG4gXFx0XFx0ZmFpbChcXFwiRmFpbFxcXCIpO1xcbkBAIC04MzYsNyArODM2LDcgQEAgc3RhdGljIHZvaWQgY29sbGFwc2VfZnVsbF9vZl9jb21wb3VuZChzdHJ1Y3QgY29sbGFwc2VfY29udGV4dCAqYywgc3RydWN0IG1lbV9vcHNcXG4gXFx0a3NmdF9wcmludF9tc2coXFxcIlNwbGl0IGh1Z2UgcGFnZSBsZWF2aW5nIHNpbmdsZSBQVEUgcGFnZSB0YWJsZSBmdWxsIG9mIGNvbXBvdW5kIHBhZ2VzLi4uXFxcIik7XFxuIFxcdG1hZHZpc2UocCwgcGFnZV9zaXplLCBNQURWX05PSFVHRVBBR0UpO1xcbiBcXHRtYWR2aXNlKHAsIGhwYWdlX3BtZF9zaXplLCBNQURWX05PSFVHRVBBR0UpO1xcbi1cXHRpZiAob3BzLVxcdTAwM2VjaGVja19odWdlKHAsIDApKVxcbitcXHRpZiAob3BzLVxcdTAwM2VjaGVja19odWdlKHAsIC0xKSlcXG4gXFx0XFx0c3VjY2VzcyhcXFwiT0tcXFwiKTtcXG4gXFx0ZWxzZVxcbiBcXHRcXHRmYWlsKFxcXCJGYWlsXFxcIik7XFxuQEAgLTkwMyw3ICs5MDMsNyBAQCBzdGF0aWMgdm9pZCBjb2xsYXBzZV9mb3JrKHN0cnVjdCBjb2xsYXBzZV9jb250ZXh0ICpjLCBzdHJ1Y3QgbWVtX29wcyAqb3BzKVxcbiBcXG4gXFx0a3NmdF9wcmludF9tc2coXFxcIkFsbG9jYXRlIHNtYWxsIHBhZ2UuLi5cXFwiKTtcXG4gXFx0b3BzLVxcdTAwM2VmYXVsdChwLCAwLCBwYWdlX3NpemUpO1xcbi1cXHRpZiAob3BzLVxcdTAwM2VjaGVja19odWdlKHAsIDApKVxcbitcXHRpZiAob3BzLVxcdTAwM2VjaGVja19odWdlKHAsIC0xKSlcXG4gXFx0XFx0c3VjY2VzcyhcXFwiT0tcXFwiKTtcXG4gXFx0ZWxzZVxcbiBcXHRcXHRmYWlsKFxcXCJGYWlsXFxcIik7XFxuQEAgLTkxMSw3ICs5MTEsNyBAQCBzdGF0aWMgdm9pZCBjb2xsYXBzZV9mb3JrKHN0cnVjdCBjb2xsYXBzZV9jb250ZXh0ICpjLCBzdHJ1Y3QgbWVtX29wcyAqb3BzKVxcbiBcXHRrc2Z0X3ByaW50X21zZyhcXFwiU2hhcmUgc21hbGwgcGFnZSBvdmVyIGZvcmsoKS4uLlxcXCIpO1xcbiBcXHRpZiAoIWZvcmsoKSkge1xcbiBcXHRcXHQvKiBEbyBub3QgdG91Y2ggc2V0dGluZ3Mgb24gY2hpbGQgZXhpdCAqL1xcbi1cXHRcXHRpZiAob3BzLVxcdTAwM2VjaGVja19odWdlKHAsIDApKVxcbitcXHRcXHRpZiAob3BzLVxcdTAwM2VjaGVja19odWdlKHAsIC0xKSlcXG4gXFx0XFx0XFx0c3VjY2VzcyhcXFwiT0tcXFwiKTtcXG4gXFx0XFx0ZWxzZVxcbiBcXHRcXHRcXHRmYWlsKFxcXCJGYWlsXFxcIik7XFxuQEAgLTkyOSw3ICs5MjksNyBAQCBzdGF0aWMgdm9pZCBjb2xsYXBzZV9mb3JrKHN0cnVjdCBjb2xsYXBzZV9jb250ZXh0ICpjLCBzdHJ1Y3QgbWVtX29wcyAqb3BzKVxcbiBcXHRleGl0X3N0YXR1cyA9IFdFWElUU1RBVFVTKHdzdGF0dXMpO1xcbiBcXG4gXFx0a3NmdF9wcmludF9tc2coXFxcIkNoZWNrIGlmIHBhcmVudCBzdGlsbCBoYXMgc21hbGwgcGFnZS4uLlxcXCIpO1xcbi1cXHRpZiAob3BzLVxcdTAwM2VjaGVja19odWdlKHAsIDApKVxcbitcXHRpZiAob3BzLVxcdTAwM2VjaGVja19odWdlKHAsIC0xKSlcXG4gXFx0XFx0c3VjY2VzcyhcXFwiT0tcXFwiKTtcXG4gXFx0ZWxzZVxcbiBcXHRcXHRmYWlsKFxcXCJGYWlsXFxcIik7XFxuQEAgLTk1NSw3ICs5NTUsNyBAQCBzdGF0aWMgdm9pZCBjb2xsYXBzZV9mb3JrX2NvbXBvdW5kKHN0cnVjdCBjb2xsYXBzZV9jb250ZXh0ICpjLCBzdHJ1Y3QgbWVtX29wcyAqb1xcbiBcXHRcXHRrc2Z0X3ByaW50X21zZyhcXFwiU3BsaXQgaHVnZSBwYWdlIFBNRCBpbiBjaGlsZCBwcm9jZXNzLi4uXFxcIik7XFxuIFxcdFxcdG1hZHZpc2UocCwgcGFnZV9zaXplLCBNQURWX05PSFVHRVBBR0UpO1xcbiBcXHRcXHRtYWR2aXNlKHAsIGhwYWdlX3BtZF9zaXplLCBNQURWX05PSFVHRVBBR0UpO1xcbi1cXHRcXHRpZiAob3BzLVxcdTAwM2VjaGVja19odWdlKHAsIDApKVxcbitcXHRcXHRpZiAob3BzLVxcdTAwM2VjaGVja19odWdlKHAsIC0xKSlcXG4gXFx0XFx0XFx0c3VjY2VzcyhcXFwiT0tcXFwiKTtcXG4gXFx0XFx0ZWxzZVxcbiBcXHRcXHRcXHRmYWlsKFxcXCJGYWlsXFxcIik7XFxuQEAgLTEwMDMsNyArMTAwMyw3IEBAIHN0YXRpYyB2b2lkIGNvbGxhcHNlX21heF9wdGVzX3NoYXJlZChzdHJ1Y3QgY29sbGFwc2VfY29udGV4dCAqYywgc3RydWN0IG1lbV9vcHNcXG4gXFx0XFx0a3NmdF9wcmludF9tc2coXFxcIlRyaWdnZXIgQ29XIG9uIHBhZ2UgJWQgb2YgJWQuLi5cXFwiLFxcbiBcXHRcXHRcXHRcXHRocGFnZV9wbWRfbnIgLSBtYXhfcHRlc19zaGFyZWQgLSAxLCBocGFnZV9wbWRfbnIpO1xcbiBcXHRcXHRvcHMtXFx1MDAzZWZhdWx0KHAsIDAsIChocGFnZV9wbWRfbnIgLSBtYXhfcHRlc19zaGFyZWQgLSAxKSAqIHBhZ2Vfc2l6ZSk7XFxuLVxcdFxcdGlmIChvcHMtXFx1MDAzZWNoZWNrX2h1Z2UocCwgMCkpXFxuK1xcdFxcdGlmIChvcHMtXFx1MDAzZWNoZWNrX2h1Z2UocCwgLTEpKVxcbiBcXHRcXHRcXHRzdWNjZXNzKFxcXCJPS1xcXCIpO1xcbiBcXHRcXHRlbHNlXFxuIFxcdFxcdFxcdGZhaWwoXFxcIkZhaWxcXFwiKTtcXG5AQCAtMTAxNiw3ICsxMDE2LDcgQEAgc3RhdGljIHZvaWQgY29sbGFwc2VfbWF4X3B0ZXNfc2hhcmVkKHN0cnVjdCBjb2xsYXBzZV9jb250ZXh0ICpjLCBzdHJ1Y3QgbWVtX29wc1xcbiBcXHRcXHRcXHQgICAgICAgaHBhZ2VfcG1kX25yIC0gbWF4X3B0ZXNfc2hhcmVkLCBocGFnZV9wbWRfbnIpO1xcbiBcXHRcXHRcXHRvcHMtXFx1MDAzZWZhdWx0KHAsIDAsIChocGFnZV9wbWRfbnIgLSBtYXhfcHRlc19zaGFyZWQpICpcXG4gXFx0XFx0XFx0XFx0ICAgIHBhZ2Vfc2l6ZSk7XFxuLVxcdFxcdFxcdGlmIChvcHMtXFx1MDAzZWNoZWNrX2h1Z2UocCwgMCkpXFxuK1xcdFxcdFxcdGlmIChvcHMtXFx1MDAzZWNoZWNrX2h1Z2UocCwgLTEpKVxcbiBcXHRcXHRcXHRcXHRzdWNjZXNzKFxcXCJPS1xcXCIpO1xcbiBcXHRcXHRcXHRlbHNlXFxuIFxcdFxcdFxcdFxcdGZhaWwoXFxcIkZhaWxcXFwiKTtcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vc3BsaXRfaHVnZV9wYWdlX3Rlc3QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3NwbGl0X2h1Z2VfcGFnZV90ZXN0LmNcXG5pbmRleCAzMmI5OTE0NzJmNzQ0Li40ZmNkMzMwY2YwNzI2IDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3NwbGl0X2h1Z2VfcGFnZV90ZXN0LmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9zcGxpdF9odWdlX3BhZ2VfdGVzdC5jXFxuQEAgLTMwMyw2ICszMDMsOSBAQCBzdGF0aWMgdm9pZCB2ZXJpZnlfcnNzX2Fub25fc3BsaXRfaHVnZV9wYWdlX2FsbF96ZXJvZXMoY2hhciAqb25lX3BhZ2UsIGludCBucl9ocFxcbiBcXHRpZiAoIXJzc19hbm9uX2JlZm9yZSlcXG4gXFx0XFx0a3NmdF9leGl0X2ZhaWxfbXNnKFxcXCJObyBSc3NBbm9uIGlzIGFsbG9jYXRlZCBiZWZvcmUgc3BsaXRcXFxcblxcXCIpO1xcbiBcXG4rXFx0LyogUHJldmVudCBraHVnZXBhZ2VkIGZyb20gY29sbGFwc2luZyB0aGUgcGFnZXMuICovXFxuK1xcdG1hZHZpc2Uob25lX3BhZ2UsIGxlbiwgTUFEVl9OT0hVR0VQQUdFKTtcXG4rXFxuIFxcdC8qIHNwbGl0IGFsbCBUSFBzICovXFxuIFxcdHdyaXRlX2RlYnVnZnMoUElEX0ZNVCwgZ2V0cGlkKCksICh1aW50NjRfdClvbmVfcGFnZSxcXG4gXFx0XFx0ICAgICAgKHVpbnQ2NF90KW9uZV9wYWdlICsgbGVuLCAwKTtcXG5AQCAtMzExLDcgKzMxNCw3IEBAIHN0YXRpYyB2b2lkIHZlcmlmeV9yc3NfYW5vbl9zcGxpdF9odWdlX3BhZ2VfYWxsX3plcm9lcyhjaGFyICpvbmVfcGFnZSwgaW50IG5yX2hwXFxuIFxcdFxcdGlmIChvbmVfcGFnZVtpXSAhPSAoY2hhcikwKVxcbiBcXHRcXHRcXHRrc2Z0X2V4aXRfZmFpbF9tc2coXFxcIiVsZCBieXRlIGNvcnJ1cHRlZFxcXFxuXFxcIiwgaSk7XFxuIFxcbi1cXHRpZiAoIWNoZWNrX2h1Z2VfYW5vbihvbmVfcGFnZSwgMCwgcG1kX3BhZ2VzaXplKSlcXG4rXFx0aWYgKCFjaGVja19odWdlX2Fub24ob25lX3BhZ2UsIC1ucl9ocGFnZXMsIHBtZF9wYWdlc2l6ZSkpXFxuIFxcdFxcdGtzZnRfZXhpdF9mYWlsX21zZyhcXFwiU3RpbGwgQW5vbkh1Z2VQYWdlcyBub3Qgc3BsaXRcXFxcblxcXCIpO1xcbiBcXG4gXFx0cnNzX2Fub25fYWZ0ZXIgPSByc3NfYW5vbigpO1xcbkBAIC0zNTAsNiArMzUzLDkgQEAgc3RhdGljIHZvaWQgc3BsaXRfcG1kX3RocF90b19vcmRlcihpbnQgb3JkZXIpXFxuIFxcdGlmICghY2hlY2tfaHVnZV9hbm9uKG9uZV9wYWdlLCA0LCBwbWRfcGFnZXNpemUpKVxcbiBcXHRcXHRrc2Z0X2V4aXRfZmFpbF9tc2coXFxcIk5vIFRIUCBpcyBhbGxvY2F0ZWRcXFxcblxcXCIpO1xcbiBcXG4rXFx0LyogUHJldmVudCBraHVnZXBhZ2VkIGZyb20gY29sbGFwc2luZyB0aGUgcGFnZXMuICovXFxuK1xcdG1hZHZpc2Uob25lX3BhZ2UsIGxlbiwgTUFEVl9OT0hVR0VQQUdFKTtcXG4rXFxuIFxcdC8qIHNwbGl0IGFsbCBUSFBzICovXFxuIFxcdHdyaXRlX2RlYnVnZnMoUElEX0ZNVCwgZ2V0cGlkKCksICh1aW50NjRfdClvbmVfcGFnZSxcXG4gXFx0XFx0KHVpbnQ2NF90KW9uZV9wYWdlICsgbGVuLCBvcmRlcik7XFxuQEAgLTM2Niw3ICszNzIsNyBAQCBzdGF0aWMgdm9pZCBzcGxpdF9wbWRfdGhwX3RvX29yZGVyKGludCBvcmRlcilcXG4gXFx0XFx0XFx0XFx0XFx0ICAgKHBtZF9vcmRlciArIDEpKSlcXG4gXFx0XFx0a3NmdF9leGl0X2ZhaWxfbXNnKFxcXCJVbmV4cGVjdGVkIFRIUCBzcGxpdFxcXFxuXFxcIik7XFxuIFxcbi1cXHRpZiAoIWNoZWNrX2h1Z2VfYW5vbihvbmVfcGFnZSwgMCwgcG1kX3BhZ2VzaXplKSlcXG4rXFx0aWYgKCFjaGVja19odWdlX2Fub24ob25lX3BhZ2UsIC00LCBwbWRfcGFnZXNpemUpKVxcbiBcXHRcXHRrc2Z0X2V4aXRfZmFpbF9tc2coXFxcIlN0aWxsIEFub25IdWdlUGFnZXMgbm90IHNwbGl0XFxcXG5cXFwiKTtcXG4gXFxuIFxcdGtzZnRfdGVzdF9yZXN1bHRfcGFzcyhcXFwiU3BsaXQgaHVnZSBwYWdlcyB0byBvcmRlciAlZCBzdWNjZXNzZnVsXFxcXG5cXFwiLCBvcmRlcik7XFxuQEAgLTQzNiw2ICs0NDIsOSBAQCBzdGF0aWMgdm9pZCBzcGxpdF9wdGVfbWFwcGVkX3RocCh2b2lkKVxcbiBcXHRcXHRnb3RvIG91dDtcXG4gXFx0fVxcbiBcXG4rXFx0LyogUHJldmVudCBraHVnZXBhZ2VkIGZyb20gY29sbGFwc2luZyB0aGUgcGFnZXMuICovXFxuK1xcdG1hZHZpc2UodGhwX2FyZWEsIHRocF9hcmVhX3NpemUsIE1BRFZfTk9IVUdFUEFHRSk7XFxuK1xcbiBcXHQvKiBTcGxpdCBhbGwgVEhQcyB0aHJvdWdoIHRoZSByZW1hcHBlZCBwYWdlcy4gKi9cXG4gXFx0d3JpdGVfZGVidWdmcyhQSURfRk1ULCBnZXRwaWQoKSwgKHVpbnQ2NF90KXBhZ2VfYXJlYSxcXG4gXFx0XFx0ICAgICAgKHVpbnQ2NF90KXBhZ2VfYXJlYSArIHBhZ2VfYXJlYV9zaXplLCAwKTtcXG5AQCAtNjY1LDYgKzY3NCw4IEBAIHN0YXRpYyBpbnQgY3JlYXRlX3BhZ2VjYWNoZV90aHBfYW5kX2ZkKGNvbnN0IGNoYXIgKnRlc3RmaWxlLCBzaXplX3QgZmRfc2l6ZSxcXG4gXFx0XFx0a3NmdF90ZXN0X3Jlc3VsdF9za2lwKFxcXCJQYWdlY2FjaGUgZm9saW8gc3BsaXQgc2tpcHBlZFxcXFxuXFxcIik7XFxuIFxcdFxcdHJldHVybiAtMjtcXG4gXFx0fVxcbitcXHQvKiBQcmV2ZW50IGtodWdlcGFnZWQgZnJvbSBjb2xsYXBzaW5nIHRoZSBwYWdlcy4gKi9cXG4rXFx0bWFkdmlzZSgqYWRkciwgZmRfc2l6ZSwgTUFEVl9OT0hVR0VQQUdFKTtcXG4gXFx0cmV0dXJuIDA7XFxuIGVycl9vdXRfY2xvc2U6XFxuIFxcdGNsb3NlKCpmZCk7XFxuQEAgLTczNSw3ICs3NDYsNyBAQCBzdGF0aWMgdm9pZCBzcGxpdF90aHBfaW5fcGFnZWNhY2hlX3RvX29yZGVyX2F0KHNpemVfdCBmZF9zaXplLFxcbiBcXHRcXHRnb3RvIG91dDtcXG4gXFx0fVxcbiBcXG4tXFx0aWYgKCFjaGVja19odWdlX2ZpbGUoYWRkciwgMCwgcG1kX3BhZ2VzaXplKSkge1xcbitcXHRpZiAoIWNoZWNrX2h1Z2VfZmlsZShhZGRyLCAtKGZkX3NpemUgLyBwbWRfcGFnZXNpemUpLCBwbWRfcGFnZXNpemUpKSB7XFxuIFxcdFxcdGtzZnRfcHJpbnRfbXNnKFxcXCJTdGlsbCBGaWxlUG1kTWFwcGVkIG5vdCBzcGxpdFxcXFxuXFxcIik7XFxuIFxcdFxcdGVyciA9IEVYSVRfRkFJTFVSRTtcXG4gXFx0XFx0Z290byBvdXQ7XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ZtX3V0aWwuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ZtX3V0aWwuY1xcbmluZGV4IDMxMWZjNWI0NTEzZWIuLjE2NmQ1ZDc5Mjg5ZjMgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdm1fdXRpbC5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdm1fdXRpbC5jXFxuQEAgLTE0LDYgKzE0LDggQEBcXG4gI2RlZmluZSBQTURfU0laRV9GSUxFX1BBVEggXFxcIi9zeXMva2VybmVsL21tL3RyYW5zcGFyZW50X2h1Z2VwYWdlL2hwYWdlX3BtZF9zaXplXFxcIlxcbiAjZGVmaW5lIFNNQVBfRklMRV9QQVRIIFxcXCIvcHJvYy9zZWxmL3NtYXBzXFxcIlxcbiAjZGVmaW5lIFNUQVRVU19GSUxFX1BBVEggXFxcIi9wcm9jL3NlbGYvc3RhdHVzXFxcIlxcbisjZGVmaW5lIFBBR0VNQVBfRklMRV9QQVRIIFxcXCIvcHJvYy9zZWxmL3BhZ2VtYXBcXFwiXFxuKyNkZWZpbmUgS1BBR0VGTEFHU19GSUxFX1BBVEggXFxcIi9wcm9jL2twYWdlZmxhZ3NcXFwiXFxuICNkZWZpbmUgTUFYX0xJTkVfTEVOR1RIIDUwMFxcbiBcXG4gdW5zaWduZWQgaW50IF9fcGFnZV9zaXplO1xcbkBAIC0yMjksMzcgKzIzMSwxMjggQEAgY2hhciAqX19nZXRfc21hcF9lbnRyeSh2b2lkICphZGRyLCBjb25zdCBjaGFyICpwYXR0ZXJuLCBjaGFyICpidWYsIHNpemVfdCBsZW4pXFxuIFxcdHJldHVybiBlbnRyeTtcXG4gfVxcbiBcXG4tYm9vbCBfX2NoZWNrX2h1Z2Uodm9pZCAqYWRkciwgY2hhciAqcGF0dGVybiwgaW50IG5yX2hwYWdlcyxcXG4tXFx0XFx0ICB1aW50NjRfdCBocGFnZV9zaXplKVxcbi17XFxuLVxcdGNoYXIgYnVmZmVyW01BWF9MSU5FX0xFTkdUSF07XFxuLVxcdHVpbnQ2NF90IHRocCA9IC0xO1xcbi1cXHRjaGFyICplbnRyeTtcXG4tXFxuLVxcdGVudHJ5ID0gX19nZXRfc21hcF9lbnRyeShhZGRyLCBwYXR0ZXJuLCBidWZmZXIsIHNpemVvZihidWZmZXIpKTtcXG4tXFx0aWYgKCFlbnRyeSlcXG4tXFx0XFx0Z290byBlcnJfb3V0O1xcbi1cXG4tXFx0aWYgKHNzY2FuZihlbnRyeSwgXFxcIiU5XFxcIiBTQ051NjQgXFxcIiBrQlxcXCIsIFxcdTAwMjZ0aHApICE9IDEpXFxuLVxcdFxcdGtzZnRfZXhpdF9mYWlsX21zZyhcXFwiUmVhZGluZyBzbWFwIGVycm9yXFxcXG5cXFwiKTtcXG4tXFxuLWVycl9vdXQ6XFxuLVxcdHJldHVybiB0aHAgPT0gKG5yX2hwYWdlcyAqIChocGFnZV9zaXplIFxcdTAwM2VcXHUwMDNlIDEwKSk7XFxuLX1cXG4tXFxuIGJvb2wgY2hlY2tfaHVnZV9hbm9uKHZvaWQgKmFkZHIsIGludCBucl9ocGFnZXMsIHVpbnQ2NF90IGhwYWdlX3NpemUpXFxuIHtcXG4tXFx0cmV0dXJuIF9fY2hlY2tfaHVnZShhZGRyLCBcXFwiQW5vbkh1Z2VQYWdlczogXFxcIiwgbnJfaHBhZ2VzLCBocGFnZV9zaXplKTtcXG4rXFx0aW50IGksIHBhZ2VtYXBfZmQsIG5yID0gMDtcXG4rXFx0dWludDY0X3QgY2F0ZWdvcmllcztcXG4rXFx0Ym9vbCBleHBlY3RfaHVnZTtcXG4rXFxuK1xcdGlmIChucl9ocGFnZXMgPT0gMCB8fCBocGFnZV9zaXplID09IDApXFxuK1xcdFxcdHJldHVybiBmYWxzZTtcXG4rXFxuK1xcdGlmIChucl9ocGFnZXMgXFx1MDAzYyAwKSB7XFxuK1xcdFxcdG5yX2hwYWdlcyA9IC1ucl9ocGFnZXM7XFxuK1xcdFxcdGV4cGVjdF9odWdlID0gZmFsc2U7XFxuK1xcdH0gZWxzZVxcbitcXHRcXHRleHBlY3RfaHVnZSA9IHRydWU7XFxuK1xcbitcXHRwYWdlbWFwX2ZkID0gb3BlbihQQUdFTUFQX0ZJTEVfUEFUSCwgT19SRE9OTFkpO1xcbitcXHRpZiAocGFnZW1hcF9mZCBcXHUwMDNjIDApXFxuK1xcdFxcdGtzZnRfZXhpdF9mYWlsX21zZyhcXFwib3BlbiBwYWdlbWFwOiAlc1xcXFxuXFxcIiwgc3RyZXJyb3IoZXJybm8pKTtcXG4rXFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBucl9ocGFnZXM7IGkrKywgYWRkciArPSBocGFnZV9zaXplKSB7XFxuK1xcdFxcdGNhdGVnb3JpZXMgPSBwYWdlbWFwX3NjYW5fZ2V0X2NhdGVnb3JpZXMocGFnZW1hcF9mZCwgYWRkcik7XFxuK1xcdFxcdGlmICghKGNhdGVnb3JpZXMgXFx1MDAyNiBQQUdFX0lTX0hVR0UpKVxcbitcXHRcXHRcXHRjb250aW51ZTtcXG4rXFx0XFx0aWYgKGNhdGVnb3JpZXMgXFx1MDAyNiBQQUdFX0lTX0ZJTEUpXFxuK1xcdFxcdFxcdGNvbnRpbnVlO1xcbitcXHRcXHRucisrO1xcbitcXHR9XFxuK1xcbitcXHRjbG9zZShwYWdlbWFwX2ZkKTtcXG4rXFx0cmV0dXJuIGV4cGVjdF9odWdlID8gbnIgPT0gbnJfaHBhZ2VzIDogbnIgPT0gMDtcXG4gfVxcbiBcXG4gYm9vbCBjaGVja19odWdlX2ZpbGUodm9pZCAqYWRkciwgaW50IG5yX2hwYWdlcywgdWludDY0X3QgaHBhZ2Vfc2l6ZSlcXG4ge1xcbi1cXHRyZXR1cm4gX19jaGVja19odWdlKGFkZHIsIFxcXCJGaWxlUG1kTWFwcGVkOlxcXCIsIG5yX2hwYWdlcywgaHBhZ2Vfc2l6ZSk7XFxuK1xcdGludCBpLCBwYWdlbWFwX2ZkLCBrcGZfZmQsIG5yID0gMDtcXG4rXFx0dW5zaWduZWQgbG9uZyBwZm47XFxuK1xcdHVpbnQ2NF90IGNhdGVnb3JpZXMsIGtwZjtcXG4rXFx0Ym9vbCBleHBlY3RfaHVnZTtcXG4rXFxuK1xcdGlmIChucl9ocGFnZXMgPT0gMCB8fCBocGFnZV9zaXplID09IDApXFxuK1xcdFxcdHJldHVybiBmYWxzZTtcXG4rXFxuK1xcdGlmIChucl9ocGFnZXMgXFx1MDAzYyAwKSB7XFxuK1xcdFxcdG5yX2hwYWdlcyA9IC1ucl9ocGFnZXM7XFxuK1xcdFxcdGV4cGVjdF9odWdlID0gZmFsc2U7XFxuK1xcdH0gZWxzZVxcbitcXHRcXHRleHBlY3RfaHVnZSA9IHRydWU7XFxuK1xcbitcXHRwYWdlbWFwX2ZkID0gb3BlbihQQUdFTUFQX0ZJTEVfUEFUSCwgT19SRE9OTFkpO1xcbitcXHRpZiAocGFnZW1hcF9mZCBcXHUwMDNjIDApXFxuK1xcdFxcdGtzZnRfZXhpdF9mYWlsX21zZyhcXFwib3BlbiBwYWdlbWFwOiAlc1xcXFxuXFxcIiwgc3RyZXJyb3IoZXJybm8pKTtcXG4rXFxuK1xcdGtwZl9mZCA9IG9wZW4oS1BBR0VGTEFHU19GSUxFX1BBVEgsIE9fUkRPTkxZKTtcXG4rXFx0aWYgKGtwZl9mZCBcXHUwMDNjIDApXFxuK1xcdFxcdGtzZnRfZXhpdF9mYWlsX21zZyhcXFwib3BlbiBrcGFnZWZsYWdzOiAlc1xcXFxuXFxcIiwgc3RyZXJyb3IoZXJybm8pKTtcXG4rXFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBucl9ocGFnZXM7IGkrKywgYWRkciArPSBocGFnZV9zaXplKSB7XFxuK1xcdFxcdGNhdGVnb3JpZXMgPSBwYWdlbWFwX3NjYW5fZ2V0X2NhdGVnb3JpZXMocGFnZW1hcF9mZCwgYWRkcik7XFxuK1xcdFxcdHBmbiA9IHBhZ2VtYXBfZ2V0X3BmbihwYWdlbWFwX2ZkLCBhZGRyKTtcXG4rXFx0XFx0aWYgKHBmbiA9PSAtMVVMKVxcbitcXHRcXHRcXHRjb250aW51ZTtcXG4rXFx0XFx0aWYgKHBhZ2VmbGFnc19nZXQocGZuLCBrcGZfZmQsIFxcdTAwMjZrcGYpKVxcbitcXHRcXHRcXHRrc2Z0X2V4aXRfZmFpbF9tc2coXFxcInJlYWQga3BhZ2VmbGFnczogJXNcXFxcblxcXCIsIHN0cmVycm9yKGVycm5vKSk7XFxuK1xcdFxcdGlmICghKGNhdGVnb3JpZXMgXFx1MDAyNiBQQUdFX0lTX0hVR0UpKVxcbitcXHRcXHRcXHRjb250aW51ZTtcXG4rXFx0XFx0aWYgKCEoY2F0ZWdvcmllcyBcXHUwMDI2IFBBR0VfSVNfRklMRSkpXFxuK1xcdFxcdFxcdGNvbnRpbnVlO1xcbitcXHRcXHRpZiAoa3BmIFxcdTAwMjYgS1BGX1NXQVBCQUNLRUQpXFxuK1xcdFxcdFxcdGNvbnRpbnVlO1xcbitcXHRcXHRucisrO1xcbitcXHR9XFxuK1xcbitcXHRjbG9zZShwYWdlbWFwX2ZkKTtcXG4rXFx0Y2xvc2Uoa3BmX2ZkKTtcXG4rXFxuK1xcdHJldHVybiBleHBlY3RfaHVnZSA/IG5yID09IG5yX2hwYWdlcyA6IG5yID09IDA7XFxuIH1cXG4gXFxuIGJvb2wgY2hlY2tfaHVnZV9zaG1lbSh2b2lkICphZGRyLCBpbnQgbnJfaHBhZ2VzLCB1aW50NjRfdCBocGFnZV9zaXplKVxcbiB7XFxuLVxcdHJldHVybiBfX2NoZWNrX2h1Z2UoYWRkciwgXFxcIlNobWVtUG1kTWFwcGVkOlxcXCIsIG5yX2hwYWdlcywgaHBhZ2Vfc2l6ZSk7XFxuK1xcdGludCBpLCBwYWdlbWFwX2ZkLCBrcGZfZmQsIG5yID0gMDtcXG4rXFx0dW5zaWduZWQgbG9uZyBwZm47XFxuK1xcdHVpbnQ2NF90IGNhdGVnb3JpZXMsIGtwZjtcXG4rXFx0Ym9vbCBleHBlY3RfaHVnZTtcXG4rXFxuK1xcdGlmIChucl9ocGFnZXMgPT0gMCB8fCBocGFnZV9zaXplID09IDApXFxuK1xcdFxcdHJldHVybiBmYWxzZTtcXG4rXFxuK1xcdGlmIChucl9ocGFnZXMgXFx1MDAzYyAwKSB7XFxuK1xcdFxcdG5yX2hwYWdlcyA9IC1ucl9ocGFnZXM7XFxuK1xcdFxcdGV4cGVjdF9odWdlID0gdHJ1ZTtcXG4rXFx0fSBlbHNlXFxuK1xcdFxcdGV4cGVjdF9odWdlID0gZmFsc2U7XFxuK1xcbitcXHRwYWdlbWFwX2ZkID0gb3BlbihQQUdFTUFQX0ZJTEVfUEFUSCwgT19SRE9OTFkpO1xcbitcXHRpZiAocGFnZW1hcF9mZCBcXHUwMDNjIDApXFxuK1xcdFxcdGtzZnRfZXhpdF9mYWlsX21zZyhcXFwib3BlbiBwYWdlbWFwOiAlc1xcXFxuXFxcIiwgc3RyZXJyb3IoZXJybm8pKTtcXG4rXFxuK1xcdGtwZl9mZCA9IG9wZW4oS1BBR0VGTEFHU19GSUxFX1BBVEgsIE9fUkRPTkxZKTtcXG4rXFx0aWYgKGtwZl9mZCBcXHUwMDNjIDApXFxuK1xcdFxcdGtzZnRfZXhpdF9mYWlsX21zZyhcXFwib3BlbiBrcGFnZWZsYWdzOiAlc1xcXFxuXFxcIiwgc3RyZXJyb3IoZXJybm8pKTtcXG4rXFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBucl9ocGFnZXM7IGkrKywgYWRkciArPSBocGFnZV9zaXplKSB7XFxuK1xcdFxcdGNhdGVnb3JpZXMgPSBwYWdlbWFwX3NjYW5fZ2V0X2NhdGVnb3JpZXMocGFnZW1hcF9mZCwgYWRkcik7XFxuK1xcdFxcdHBmbiA9IHBhZ2VtYXBfZ2V0X3BmbihwYWdlbWFwX2ZkLCBhZGRyKTtcXG4rXFx0XFx0aWYgKHBmbiA9PSAtMVVMKVxcbitcXHRcXHRcXHRjb250aW51ZTtcXG4rXFx0XFx0aWYgKHBhZ2VmbGFnc19nZXQocGZuLCBrcGZfZmQsIFxcdTAwMjZrcGYpKVxcbitcXHRcXHRcXHRrc2Z0X2V4aXRfZmFpbF9tc2coXFxcInJlYWQga3BhZ2VmbGFnczogJXNcXFxcblxcXCIsIHN0cmVycm9yKGVycm5vKSk7XFxuK1xcdFxcdGlmICghKGNhdGVnb3JpZXMgXFx1MDAyNiBQQUdFX0lTX0hVR0UpKVxcbitcXHRcXHRcXHRjb250aW51ZTtcXG4rXFx0XFx0aWYgKCEoY2F0ZWdvcmllcyBcXHUwMDI2IFBBR0VfSVNfRklMRSkpXFxuK1xcdFxcdFxcdGNvbnRpbnVlO1xcbitcXHRcXHRpZiAoIShrcGYgXFx1MDAyNiBLUEZfU1dBUEJBQ0tFRCkpXFxuK1xcdFxcdFxcdGNvbnRpbnVlO1xcbitcXHRcXHRucisrO1xcbitcXHR9XFxuK1xcbitcXHRjbG9zZShwYWdlbWFwX2ZkKTtcXG4rXFx0Y2xvc2Uoa3BmX2ZkKTtcXG4rXFxuK1xcdHJldHVybiBleHBlY3RfaHVnZSA/IG5yID09IG5yX2hwYWdlcyA6IG5yID09IDA7XFxuIH1cXG4gXFxuIGludDY0X3QgYWxsb2NhdGVfdHJhbnNodWdlKHZvaWQgKnB0ciwgaW50IHBhZ2VtYXBfZmQpXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ZtX3V0aWwuaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ZtX3V0aWwuaFxcbmluZGV4IGVhOGZjOGZkZjBlYjAuLjBhMTYyN2YzNmVmYzMgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdm1fdXRpbC5oXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdm1fdXRpbC5oXFxuQEAgLTE4LDYgKzE4LDcgQEBcXG4gI2RlZmluZSBQTV9TV0FQICAgICAgICAgICAgICAgICAgICAgICBCSVRfVUxMKDYyKVxcbiAjZGVmaW5lIFBNX1BSRVNFTlQgICAgICAgICAgICAgICAgICAgIEJJVF9VTEwoNjMpXFxuIFxcbisjZGVmaW5lIEtQRl9TV0FQQkFDS0VEICAgICAgICAgICAgICAgIEJJVF9VTEwoMTQpXFxuICNkZWZpbmUgS1BGX0NPTVBPVU5EX0hFQUQgICAgICAgICAgICAgQklUX1VMTCgxNSlcXG4gI2RlZmluZSBLUEZfQ09NUE9VTkRfVEFJTCAgICAgICAgICAgICBCSVRfVUxMKDE2KVxcbiAjZGVmaW5lIEtQRl9IV1BPSVNPTiAgICAgICAgICAgICAgICAgIEJJVF9VTEwoMTkpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIwVDE5OjQ4OjQyLjA4OTI5MDQ3M1oiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjgzMDc5ODY0NDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgbWVtb3J5IG1hbmFnZW1lbnQgc2VsZnRlc3RzIGluIHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tLyBhbmQgZG9lcyBub3QgbWFrZSBhbnkgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBjb3JlIGtlcm5lbCwgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlIGNvZGUuIFRoZXJlZm9yZSwgaXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcga2VybmVsIGxvZ2ljIHRoYXQgcmVxdWlyZXMgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDFjYjU1ZmE5ODJmYmRlM2UzNmRjNjAxMGIxZWU3NmQ5ZmQzMWMyNzRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IEF1ZyAyMCAxOTo0ODozOCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2todWdlcGFnZWQuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2todWdlcGFnZWQuY1xuaW5kZXggMTBlOGRlZGNiMDg3ZC4uMmU0NjY1ZTZkNTg1MiAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2todWdlcGFnZWQuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0va2h1Z2VwYWdlZC5jXG5AQCAtNTMzLDcgKzUzMyw3IEBAIHN0YXRpYyB2b2lkIF9fbWFkdmlzZV9jb2xsYXBzZShjb25zdCBjaGFyICptc2csIGNoYXIgKnAsIGludCBucl9ocGFnZXMsXG4gXHRyZXQgPSBtYWR2aXNlX2NvbGxhcHNlX3JldHJ5KHAsIG5yX2hwYWdlcyAqIGhwYWdlX3BtZF9zaXplKTtcbiBcdGlmICgoKGJvb2wpcmV0KSA9PSBleHBlY3QpXG4gXHRcdGZhaWwoXCJGYWlsOiBCYWQgcmV0dXJuIHZhbHVlXCIpO1xuLVx0ZWxzZSBpZiAoIW9wcy1cdTAwM2VjaGVja19odWdlKHAsIGV4cGVjdCA/IG5yX2hwYWdlcyA6IDApKVxuK1x0ZWxzZSBpZiAoIW9wcy1cdTAwM2VjaGVja19odWdlKHAsIGV4cGVjdCA/IG5yX2hwYWdlcyA6IC1ucl9ocGFnZXMpKVxuIFx0XHRmYWlsKFwiRmFpbDogY2hlY2tfaHVnZSgpXCIpO1xuIFx0ZWxzZVxuIFx0XHRzdWNjZXNzKFwiT0tcIik7XG5AQCAtNTQ1LDcgKzU0NSw3IEBAIHN0YXRpYyB2b2lkIG1hZHZpc2VfY29sbGFwc2UoY29uc3QgY2hhciAqbXNnLCBjaGFyICpwLCBpbnQgbnJfaHBhZ2VzLFxuIFx0XHRcdCAgICAgc3RydWN0IG1lbV9vcHMgKm9wcywgYm9vbCBleHBlY3QpXG4ge1xuIFx0LyogU2FuaXR5IGNoZWNrICovXG4tXHRpZiAoIW9wcy1cdTAwM2VjaGVja19odWdlKHAsIDApKVxuK1x0aWYgKCFvcHMtXHUwMDNlY2hlY2tfaHVnZShwLCAtbnJfaHBhZ2VzKSlcbiBcdFx0a3NmdF9leGl0X2ZhaWxfbXNnKFwiVW5leHBlY3RlZCBodWdlIHBhZ2VcXG5cIik7XG4gXHRfX21hZHZpc2VfY29sbGFwc2UobXNnLCBwLCBucl9ocGFnZXMsIG9wcywgZXhwZWN0KTtcbiB9XG5AQCAtNTU4LDcgKzU1OCw3IEBAIHN0YXRpYyBib29sIHdhaXRfZm9yX3NjYW4oY29uc3QgY2hhciAqbXNnLCBjaGFyICpwLCBpbnQgbnJfaHBhZ2VzLFxuIFx0aW50IHRpbWVvdXQgPSA2OyAvKiAzIHNlY29uZHMgKi9cbiBcbiBcdC8qIFNhbml0eSBjaGVjayAqL1xuLVx0aWYgKCFvcHMtXHUwMDNlY2hlY2tfaHVnZShwLCAwKSlcbitcdGlmICghb3BzLVx1MDAzZWNoZWNrX2h1Z2UocCwgLW5yX2hwYWdlcykpXG4gXHRcdGtzZnRfZXhpdF9mYWlsX21zZyhcIlVuZXhwZWN0ZWQgaHVnZSBwYWdlXFxuXCIpO1xuIFxuIFx0bWFkdmlzZShwLCBucl9ocGFnZXMgKiBocGFnZV9wbWRfc2l6ZSwgTUFEVl9IVUdFUEFHRSk7XG5AQCAtNjA1LDcgKzYwNSw3IEBAIHN0YXRpYyB2b2lkIGtodWdlcGFnZWRfY29sbGFwc2UoY29uc3QgY2hhciAqbXNnLCBjaGFyICpwLCBpbnQgbnJfaHBhZ2VzLFxuIFx0aWYgKG9wcyAhPSBcdTAwMjZfX2Fub25fb3BzKVxuIFx0XHRvcHMtXHUwMDNlZmF1bHQocCwgMCwgbnJfaHBhZ2VzICogaHBhZ2VfcG1kX3NpemUpO1xuIFxuLVx0aWYgKG9wcy1cdTAwM2VjaGVja19odWdlKHAsIGV4cGVjdCA/IG5yX2hwYWdlcyA6IDApKVxuK1x0aWYgKG9wcy1cdTAwM2VjaGVja19odWdlKHAsIGV4cGVjdCA/IG5yX2hwYWdlcyA6IC1ucl9ocGFnZXMpKVxuIFx0XHRzdWNjZXNzKFwiT0tcIik7XG4gXHRlbHNlXG4gXHRcdGZhaWwoXCJGYWlsXCIpO1xuQEAgLTY0Myw3ICs2NDMsNyBAQCBzdGF0aWMgdm9pZCBhbGxvY19hdF9mYXVsdCh2b2lkKVxuIFxuIFx0bWFkdmlzZShwLCBwYWdlX3NpemUsIE1BRFZfRE9OVE5FRUQpO1xuIFx0a3NmdF9wcmludF9tc2coXCJTcGxpdCBodWdlIFBNRCBvbiBNQURWX0RPTlRORUVELi4uXCIpO1xuLVx0aWYgKGNoZWNrX2h1Z2VfYW5vbihwLCAwLCBocGFnZV9wbWRfc2l6ZSkpXG4rXHRpZiAoY2hlY2tfaHVnZV9hbm9uKHAsIC0xLCBocGFnZV9wbWRfc2l6ZSkpXG4gXHRcdHN1Y2Nlc3MoXCJPS1wiKTtcbiBcdGVsc2VcbiBcdFx0ZmFpbChcIkZhaWxcIik7XG5AQCAtODE1LDcgKzgxNSw3IEBAIHN0YXRpYyB2b2lkIGNvbGxhcHNlX3NpbmdsZV9wdGVfZW50cnlfY29tcG91bmQoc3RydWN0IGNvbGxhcHNlX2NvbnRleHQgKmMsIHN0cnVjXG4gXHRtYWR2aXNlKHAsIGhwYWdlX3BtZF9zaXplLCBNQURWX05PSFVHRVBBR0UpO1xuIFx0a3NmdF9wcmludF9tc2coXCJTcGxpdCBodWdlIHBhZ2UgbGVhdmluZyBzaW5nbGUgUFRFIG1hcHBpbmcgY29tcG91bmQgcGFnZS4uLlwiKTtcbiBcdG1hZHZpc2UocCArIHBhZ2Vfc2l6ZSwgaHBhZ2VfcG1kX3NpemUgLSBwYWdlX3NpemUsIE1BRFZfRE9OVE5FRUQpO1xuLVx0aWYgKG9wcy1cdTAwM2VjaGVja19odWdlKHAsIDApKVxuK1x0aWYgKG9wcy1cdTAwM2VjaGVja19odWdlKHAsIC0xKSlcbiBcdFx0c3VjY2VzcyhcIk9LXCIpO1xuIFx0ZWxzZVxuIFx0XHRmYWlsKFwiRmFpbFwiKTtcbkBAIC04MzYsNyArODM2LDcgQEAgc3RhdGljIHZvaWQgY29sbGFwc2VfZnVsbF9vZl9jb21wb3VuZChzdHJ1Y3QgY29sbGFwc2VfY29udGV4dCAqYywgc3RydWN0IG1lbV9vcHNcbiBcdGtzZnRfcHJpbnRfbXNnKFwiU3BsaXQgaHVnZSBwYWdlIGxlYXZpbmcgc2luZ2xlIFBURSBwYWdlIHRhYmxlIGZ1bGwgb2YgY29tcG91bmQgcGFnZXMuLi5cIik7XG4gXHRtYWR2aXNlKHAsIHBhZ2Vfc2l6ZSwgTUFEVl9OT0hVR0VQQUdFKTtcbiBcdG1hZHZpc2UocCwgaHBhZ2VfcG1kX3NpemUsIE1BRFZfTk9IVUdFUEFHRSk7XG4tXHRpZiAob3BzLVx1MDAzZWNoZWNrX2h1Z2UocCwgMCkpXG4rXHRpZiAob3BzLVx1MDAzZWNoZWNrX2h1Z2UocCwgLTEpKVxuIFx0XHRzdWNjZXNzKFwiT0tcIik7XG4gXHRlbHNlXG4gXHRcdGZhaWwoXCJGYWlsXCIpO1xuQEAgLTkwMyw3ICs5MDMsNyBAQCBzdGF0aWMgdm9pZCBjb2xsYXBzZV9mb3JrKHN0cnVjdCBjb2xsYXBzZV9jb250ZXh0ICpjLCBzdHJ1Y3QgbWVtX29wcyAqb3BzKVxuIFxuIFx0a3NmdF9wcmludF9tc2coXCJBbGxvY2F0ZSBzbWFsbCBwYWdlLi4uXCIpO1xuIFx0b3BzLVx1MDAzZWZhdWx0KHAsIDAsIHBhZ2Vfc2l6ZSk7XG4tXHRpZiAob3BzLVx1MDAzZWNoZWNrX2h1Z2UocCwgMCkpXG4rXHRpZiAob3BzLVx1MDAzZWNoZWNrX2h1Z2UocCwgLTEpKVxuIFx0XHRzdWNjZXNzKFwiT0tcIik7XG4gXHRlbHNlXG4gXHRcdGZhaWwoXCJGYWlsXCIpO1xuQEAgLTkxMSw3ICs5MTEsNyBAQCBzdGF0aWMgdm9pZCBjb2xsYXBzZV9mb3JrKHN0cnVjdCBjb2xsYXBzZV9jb250ZXh0ICpjLCBzdHJ1Y3QgbWVtX29wcyAqb3BzKVxuIFx0a3NmdF9wcmludF9tc2coXCJTaGFyZSBzbWFsbCBwYWdlIG92ZXIgZm9yaygpLi4uXCIpO1xuIFx0aWYgKCFmb3JrKCkpIHtcbiBcdFx0LyogRG8gbm90IHRvdWNoIHNldHRpbmdzIG9uIGNoaWxkIGV4aXQgKi9cbi1cdFx0aWYgKG9wcy1cdTAwM2VjaGVja19odWdlKHAsIDApKVxuK1x0XHRpZiAob3BzLVx1MDAzZWNoZWNrX2h1Z2UocCwgLTEpKVxuIFx0XHRcdHN1Y2Nlc3MoXCJPS1wiKTtcbiBcdFx0ZWxzZVxuIFx0XHRcdGZhaWwoXCJGYWlsXCIpO1xuQEAgLTkyOSw3ICs5MjksNyBAQCBzdGF0aWMgdm9pZCBjb2xsYXBzZV9mb3JrKHN0cnVjdCBjb2xsYXBzZV9jb250ZXh0ICpjLCBzdHJ1Y3QgbWVtX29wcyAqb3BzKVxuIFx0ZXhpdF9zdGF0dXMgPSBXRVhJVFNUQVRVUyh3c3RhdHVzKTtcbiBcbiBcdGtzZnRfcHJpbnRfbXNnKFwiQ2hlY2sgaWYgcGFyZW50IHN0aWxsIGhhcyBzbWFsbCBwYWdlLi4uXCIpO1xuLVx0aWYgKG9wcy1cdTAwM2VjaGVja19odWdlKHAsIDApKVxuK1x0aWYgKG9wcy1cdTAwM2VjaGVja19odWdlKHAsIC0xKSlcbiBcdFx0c3VjY2VzcyhcIk9LXCIpO1xuIFx0ZWxzZVxuIFx0XHRmYWlsKFwiRmFpbFwiKTtcbkBAIC05NTUsNyArOTU1LDcgQEAgc3RhdGljIHZvaWQgY29sbGFwc2VfZm9ya19jb21wb3VuZChzdHJ1Y3QgY29sbGFwc2VfY29udGV4dCAqYywgc3RydWN0IG1lbV9vcHMgKm9cbiBcdFx0a3NmdF9wcmludF9tc2coXCJTcGxpdCBodWdlIHBhZ2UgUE1EIGluIGNoaWxkIHByb2Nlc3MuLi5cIik7XG4gXHRcdG1hZHZpc2UocCwgcGFnZV9zaXplLCBNQURWX05PSFVHRVBBR0UpO1xuIFx0XHRtYWR2aXNlKHAsIGhwYWdlX3BtZF9zaXplLCBNQURWX05PSFVHRVBBR0UpO1xuLVx0XHRpZiAob3BzLVx1MDAzZWNoZWNrX2h1Z2UocCwgMCkpXG4rXHRcdGlmIChvcHMtXHUwMDNlY2hlY2tfaHVnZShwLCAtMSkpXG4gXHRcdFx0c3VjY2VzcyhcIk9LXCIpO1xuIFx0XHRlbHNlXG4gXHRcdFx0ZmFpbChcIkZhaWxcIik7XG5AQCAtMTAwMyw3ICsxMDAzLDcgQEAgc3RhdGljIHZvaWQgY29sbGFwc2VfbWF4X3B0ZXNfc2hhcmVkKHN0cnVjdCBjb2xsYXBzZV9jb250ZXh0ICpjLCBzdHJ1Y3QgbWVtX29wc1xuIFx0XHRrc2Z0X3ByaW50X21zZyhcIlRyaWdnZXIgQ29XIG9uIHBhZ2UgJWQgb2YgJWQuLi5cIixcbiBcdFx0XHRcdGhwYWdlX3BtZF9uciAtIG1heF9wdGVzX3NoYXJlZCAtIDEsIGhwYWdlX3BtZF9ucik7XG4gXHRcdG9wcy1cdTAwM2VmYXVsdChwLCAwLCAoaHBhZ2VfcG1kX25yIC0gbWF4X3B0ZXNfc2hhcmVkIC0gMSkgKiBwYWdlX3NpemUpO1xuLVx0XHRpZiAob3BzLVx1MDAzZWNoZWNrX2h1Z2UocCwgMCkpXG4rXHRcdGlmIChvcHMtXHUwMDNlY2hlY2tfaHVnZShwLCAtMSkpXG4gXHRcdFx0c3VjY2VzcyhcIk9LXCIpO1xuIFx0XHRlbHNlXG4gXHRcdFx0ZmFpbChcIkZhaWxcIik7XG5AQCAtMTAxNiw3ICsxMDE2LDcgQEAgc3RhdGljIHZvaWQgY29sbGFwc2VfbWF4X3B0ZXNfc2hhcmVkKHN0cnVjdCBjb2xsYXBzZV9jb250ZXh0ICpjLCBzdHJ1Y3QgbWVtX29wc1xuIFx0XHRcdCAgICAgICBocGFnZV9wbWRfbnIgLSBtYXhfcHRlc19zaGFyZWQsIGhwYWdlX3BtZF9ucik7XG4gXHRcdFx0b3BzLVx1MDAzZWZhdWx0KHAsIDAsIChocGFnZV9wbWRfbnIgLSBtYXhfcHRlc19zaGFyZWQpICpcbiBcdFx0XHRcdCAgICBwYWdlX3NpemUpO1xuLVx0XHRcdGlmIChvcHMtXHUwMDNlY2hlY2tfaHVnZShwLCAwKSlcbitcdFx0XHRpZiAob3BzLVx1MDAzZWNoZWNrX2h1Z2UocCwgLTEpKVxuIFx0XHRcdFx0c3VjY2VzcyhcIk9LXCIpO1xuIFx0XHRcdGVsc2VcbiBcdFx0XHRcdGZhaWwoXCJGYWlsXCIpO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3NwbGl0X2h1Z2VfcGFnZV90ZXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9zcGxpdF9odWdlX3BhZ2VfdGVzdC5jXG5pbmRleCAzMmI5OTE0NzJmNzQ0Li40ZmNkMzMwY2YwNzI2IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vc3BsaXRfaHVnZV9wYWdlX3Rlc3QuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vc3BsaXRfaHVnZV9wYWdlX3Rlc3QuY1xuQEAgLTMwMyw2ICszMDMsOSBAQCBzdGF0aWMgdm9pZCB2ZXJpZnlfcnNzX2Fub25fc3BsaXRfaHVnZV9wYWdlX2FsbF96ZXJvZXMoY2hhciAqb25lX3BhZ2UsIGludCBucl9ocFxuIFx0aWYgKCFyc3NfYW5vbl9iZWZvcmUpXG4gXHRcdGtzZnRfZXhpdF9mYWlsX21zZyhcIk5vIFJzc0Fub24gaXMgYWxsb2NhdGVkIGJlZm9yZSBzcGxpdFxcblwiKTtcbiBcbitcdC8qIFByZXZlbnQga2h1Z2VwYWdlZCBmcm9tIGNvbGxhcHNpbmcgdGhlIHBhZ2VzLiAqL1xuK1x0bWFkdmlzZShvbmVfcGFnZSwgbGVuLCBNQURWX05PSFVHRVBBR0UpO1xuK1xuIFx0Lyogc3BsaXQgYWxsIFRIUHMgKi9cbiBcdHdyaXRlX2RlYnVnZnMoUElEX0ZNVCwgZ2V0cGlkKCksICh1aW50NjRfdClvbmVfcGFnZSxcbiBcdFx0ICAgICAgKHVpbnQ2NF90KW9uZV9wYWdlICsgbGVuLCAwKTtcbkBAIC0zMTEsNyArMzE0LDcgQEAgc3RhdGljIHZvaWQgdmVyaWZ5X3Jzc19hbm9uX3NwbGl0X2h1Z2VfcGFnZV9hbGxfemVyb2VzKGNoYXIgKm9uZV9wYWdlLCBpbnQgbnJfaHBcbiBcdFx0aWYgKG9uZV9wYWdlW2ldICE9IChjaGFyKTApXG4gXHRcdFx0a3NmdF9leGl0X2ZhaWxfbXNnKFwiJWxkIGJ5dGUgY29ycnVwdGVkXFxuXCIsIGkpO1xuIFxuLVx0aWYgKCFjaGVja19odWdlX2Fub24ob25lX3BhZ2UsIDAsIHBtZF9wYWdlc2l6ZSkpXG4rXHRpZiAoIWNoZWNrX2h1Z2VfYW5vbihvbmVfcGFnZSwgLW5yX2hwYWdlcywgcG1kX3BhZ2VzaXplKSlcbiBcdFx0a3NmdF9leGl0X2ZhaWxfbXNnKFwiU3RpbGwgQW5vbkh1Z2VQYWdlcyBub3Qgc3BsaXRcXG5cIik7XG4gXG4gXHRyc3NfYW5vbl9hZnRlciA9IHJzc19hbm9uKCk7XG5AQCAtMzUwLDYgKzM1Myw5IEBAIHN0YXRpYyB2b2lkIHNwbGl0X3BtZF90aHBfdG9fb3JkZXIoaW50IG9yZGVyKVxuIFx0aWYgKCFjaGVja19odWdlX2Fub24ob25lX3BhZ2UsIDQsIHBtZF9wYWdlc2l6ZSkpXG4gXHRcdGtzZnRfZXhpdF9mYWlsX21zZyhcIk5vIFRIUCBpcyBhbGxvY2F0ZWRcXG5cIik7XG4gXG4rXHQvKiBQcmV2ZW50IGtodWdlcGFnZWQgZnJvbSBjb2xsYXBzaW5nIHRoZSBwYWdlcy4gKi9cbitcdG1hZHZpc2Uob25lX3BhZ2UsIGxlbiwgTUFEVl9OT0hVR0VQQUdFKTtcbitcbiBcdC8qIHNwbGl0IGFsbCBUSFBzICovXG4gXHR3cml0ZV9kZWJ1Z2ZzKFBJRF9GTVQsIGdldHBpZCgpLCAodWludDY0X3Qpb25lX3BhZ2UsXG4gXHRcdCh1aW50NjRfdClvbmVfcGFnZSArIGxlbiwgb3JkZXIpO1xuQEAgLTM2Niw3ICszNzIsNyBAQCBzdGF0aWMgdm9pZCBzcGxpdF9wbWRfdGhwX3RvX29yZGVyKGludCBvcmRlcilcbiBcdFx0XHRcdFx0ICAgKHBtZF9vcmRlciArIDEpKSlcbiBcdFx0a3NmdF9leGl0X2ZhaWxfbXNnKFwiVW5leHBlY3RlZCBUSFAgc3BsaXRcXG5cIik7XG4gXG4tXHRpZiAoIWNoZWNrX2h1Z2VfYW5vbihvbmVfcGFnZSwgMCwgcG1kX3BhZ2VzaXplKSlcbitcdGlmICghY2hlY2tfaHVnZV9hbm9uKG9uZV9wYWdlLCAtNCwgcG1kX3BhZ2VzaXplKSlcbiBcdFx0a3NmdF9leGl0X2ZhaWxfbXNnKFwiU3RpbGwgQW5vbkh1Z2VQYWdlcyBub3Qgc3BsaXRcXG5cIik7XG4gXG4gXHRrc2Z0X3Rlc3RfcmVzdWx0X3Bhc3MoXCJTcGxpdCBodWdlIHBhZ2VzIHRvIG9yZGVyICVkIHN1Y2Nlc3NmdWxcXG5cIiwgb3JkZXIpO1xuQEAgLTQzNiw2ICs0NDIsOSBAQCBzdGF0aWMgdm9pZCBzcGxpdF9wdGVfbWFwcGVkX3RocCh2b2lkKVxuIFx0XHRnb3RvIG91dDtcbiBcdH1cbiBcbitcdC8qIFByZXZlbnQga2h1Z2VwYWdlZCBmcm9tIGNvbGxhcHNpbmcgdGhlIHBhZ2VzLiAqL1xuK1x0bWFkdmlzZSh0aHBfYXJlYSwgdGhwX2FyZWFfc2l6ZSwgTUFEVl9OT0hVR0VQQUdFKTtcbitcbiBcdC8qIFNwbGl0IGFsbCBUSFBzIHRocm91Z2ggdGhlIHJlbWFwcGVkIHBhZ2VzLiAqL1xuIFx0d3JpdGVfZGVidWdmcyhQSURfRk1ULCBnZXRwaWQoKSwgKHVpbnQ2NF90KXBhZ2VfYXJlYSxcbiBcdFx0ICAgICAgKHVpbnQ2NF90KXBhZ2VfYXJlYSArIHBhZ2VfYXJlYV9zaXplLCAwKTtcbkBAIC02NjUsNiArNjc0LDggQEAgc3RhdGljIGludCBjcmVhdGVfcGFnZWNhY2hlX3RocF9hbmRfZmQoY29uc3QgY2hhciAqdGVzdGZpbGUsIHNpemVfdCBmZF9zaXplLFxuIFx0XHRrc2Z0X3Rlc3RfcmVzdWx0X3NraXAoXCJQYWdlY2FjaGUgZm9saW8gc3BsaXQgc2tpcHBlZFxcblwiKTtcbiBcdFx0cmV0dXJuIC0yO1xuIFx0fVxuK1x0LyogUHJldmVudCBraHVnZXBhZ2VkIGZyb20gY29sbGFwc2luZyB0aGUgcGFnZXMuICovXG4rXHRtYWR2aXNlKCphZGRyLCBmZF9zaXplLCBNQURWX05PSFVHRVBBR0UpO1xuIFx0cmV0dXJuIDA7XG4gZXJyX291dF9jbG9zZTpcbiBcdGNsb3NlKCpmZCk7XG5AQCAtNzM1LDcgKzc0Niw3IEBAIHN0YXRpYyB2b2lkIHNwbGl0X3RocF9pbl9wYWdlY2FjaGVfdG9fb3JkZXJfYXQoc2l6ZV90IGZkX3NpemUsXG4gXHRcdGdvdG8gb3V0O1xuIFx0fVxuIFxuLVx0aWYgKCFjaGVja19odWdlX2ZpbGUoYWRkciwgMCwgcG1kX3BhZ2VzaXplKSkge1xuK1x0aWYgKCFjaGVja19odWdlX2ZpbGUoYWRkciwgLShmZF9zaXplIC8gcG1kX3BhZ2VzaXplKSwgcG1kX3BhZ2VzaXplKSkge1xuIFx0XHRrc2Z0X3ByaW50X21zZyhcIlN0aWxsIEZpbGVQbWRNYXBwZWQgbm90IHNwbGl0XFxuXCIpO1xuIFx0XHRlcnIgPSBFWElUX0ZBSUxVUkU7XG4gXHRcdGdvdG8gb3V0O1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ZtX3V0aWwuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ZtX3V0aWwuY1xuaW5kZXggMzExZmM1YjQ1MTNlYi4uMTY2ZDVkNzkyODlmMyAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ZtX3V0aWwuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdm1fdXRpbC5jXG5AQCAtMTQsNiArMTQsOCBAQFxuICNkZWZpbmUgUE1EX1NJWkVfRklMRV9QQVRIIFwiL3N5cy9rZXJuZWwvbW0vdHJhbnNwYXJlbnRfaHVnZXBhZ2UvaHBhZ2VfcG1kX3NpemVcIlxuICNkZWZpbmUgU01BUF9GSUxFX1BBVEggXCIvcHJvYy9zZWxmL3NtYXBzXCJcbiAjZGVmaW5lIFNUQVRVU19GSUxFX1BBVEggXCIvcHJvYy9zZWxmL3N0YXR1c1wiXG4rI2RlZmluZSBQQUdFTUFQX0ZJTEVfUEFUSCBcIi9wcm9jL3NlbGYvcGFnZW1hcFwiXG4rI2RlZmluZSBLUEFHRUZMQUdTX0ZJTEVfUEFUSCBcIi9wcm9jL2twYWdlZmxhZ3NcIlxuICNkZWZpbmUgTUFYX0xJTkVfTEVOR1RIIDUwMFxuIFxuIHVuc2lnbmVkIGludCBfX3BhZ2Vfc2l6ZTtcbkBAIC0yMjksMzcgKzIzMSwxMjggQEAgY2hhciAqX19nZXRfc21hcF9lbnRyeSh2b2lkICphZGRyLCBjb25zdCBjaGFyICpwYXR0ZXJuLCBjaGFyICpidWYsIHNpemVfdCBsZW4pXG4gXHRyZXR1cm4gZW50cnk7XG4gfVxuIFxuLWJvb2wgX19jaGVja19odWdlKHZvaWQgKmFkZHIsIGNoYXIgKnBhdHRlcm4sIGludCBucl9ocGFnZXMsXG4tXHRcdCAgdWludDY0X3QgaHBhZ2Vfc2l6ZSlcbi17XG4tXHRjaGFyIGJ1ZmZlcltNQVhfTElORV9MRU5HVEhdO1xuLVx0dWludDY0X3QgdGhwID0gLTE7XG4tXHRjaGFyICplbnRyeTtcbi1cbi1cdGVudHJ5ID0gX19nZXRfc21hcF9lbnRyeShhZGRyLCBwYXR0ZXJuLCBidWZmZXIsIHNpemVvZihidWZmZXIpKTtcbi1cdGlmICghZW50cnkpXG4tXHRcdGdvdG8gZXJyX291dDtcbi1cbi1cdGlmIChzc2NhbmYoZW50cnksIFwiJTlcIiBTQ051NjQgXCIga0JcIiwgXHUwMDI2dGhwKSAhPSAxKVxuLVx0XHRrc2Z0X2V4aXRfZmFpbF9tc2coXCJSZWFkaW5nIHNtYXAgZXJyb3JcXG5cIik7XG4tXG4tZXJyX291dDpcbi1cdHJldHVybiB0aHAgPT0gKG5yX2hwYWdlcyAqIChocGFnZV9zaXplIFx1MDAzZVx1MDAzZSAxMCkpO1xuLX1cbi1cbiBib29sIGNoZWNrX2h1Z2VfYW5vbih2b2lkICphZGRyLCBpbnQgbnJfaHBhZ2VzLCB1aW50NjRfdCBocGFnZV9zaXplKVxuIHtcbi1cdHJldHVybiBfX2NoZWNrX2h1Z2UoYWRkciwgXCJBbm9uSHVnZVBhZ2VzOiBcIiwgbnJfaHBhZ2VzLCBocGFnZV9zaXplKTtcbitcdGludCBpLCBwYWdlbWFwX2ZkLCBuciA9IDA7XG4rXHR1aW50NjRfdCBjYXRlZ29yaWVzO1xuK1x0Ym9vbCBleHBlY3RfaHVnZTtcbitcbitcdGlmIChucl9ocGFnZXMgPT0gMCB8fCBocGFnZV9zaXplID09IDApXG4rXHRcdHJldHVybiBmYWxzZTtcbitcbitcdGlmIChucl9ocGFnZXMgXHUwMDNjIDApIHtcbitcdFx0bnJfaHBhZ2VzID0gLW5yX2hwYWdlcztcbitcdFx0ZXhwZWN0X2h1Z2UgPSBmYWxzZTtcbitcdH0gZWxzZVxuK1x0XHRleHBlY3RfaHVnZSA9IHRydWU7XG4rXG4rXHRwYWdlbWFwX2ZkID0gb3BlbihQQUdFTUFQX0ZJTEVfUEFUSCwgT19SRE9OTFkpO1xuK1x0aWYgKHBhZ2VtYXBfZmQgXHUwMDNjIDApXG4rXHRcdGtzZnRfZXhpdF9mYWlsX21zZyhcIm9wZW4gcGFnZW1hcDogJXNcXG5cIiwgc3RyZXJyb3IoZXJybm8pKTtcbitcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG5yX2hwYWdlczsgaSsrLCBhZGRyICs9IGhwYWdlX3NpemUpIHtcbitcdFx0Y2F0ZWdvcmllcyA9IHBhZ2VtYXBfc2Nhbl9nZXRfY2F0ZWdvcmllcyhwYWdlbWFwX2ZkLCBhZGRyKTtcbitcdFx0aWYgKCEoY2F0ZWdvcmllcyBcdTAwMjYgUEFHRV9JU19IVUdFKSlcbitcdFx0XHRjb250aW51ZTtcbitcdFx0aWYgKGNhdGVnb3JpZXMgXHUwMDI2IFBBR0VfSVNfRklMRSlcbitcdFx0XHRjb250aW51ZTtcbitcdFx0bnIrKztcbitcdH1cbitcbitcdGNsb3NlKHBhZ2VtYXBfZmQpO1xuK1x0cmV0dXJuIGV4cGVjdF9odWdlID8gbnIgPT0gbnJfaHBhZ2VzIDogbnIgPT0gMDtcbiB9XG4gXG4gYm9vbCBjaGVja19odWdlX2ZpbGUodm9pZCAqYWRkciwgaW50IG5yX2hwYWdlcywgdWludDY0X3QgaHBhZ2Vfc2l6ZSlcbiB7XG4tXHRyZXR1cm4gX19jaGVja19odWdlKGFkZHIsIFwiRmlsZVBtZE1hcHBlZDpcIiwgbnJfaHBhZ2VzLCBocGFnZV9zaXplKTtcbitcdGludCBpLCBwYWdlbWFwX2ZkLCBrcGZfZmQsIG5yID0gMDtcbitcdHVuc2lnbmVkIGxvbmcgcGZuO1xuK1x0dWludDY0X3QgY2F0ZWdvcmllcywga3BmO1xuK1x0Ym9vbCBleHBlY3RfaHVnZTtcbitcbitcdGlmIChucl9ocGFnZXMgPT0gMCB8fCBocGFnZV9zaXplID09IDApXG4rXHRcdHJldHVybiBmYWxzZTtcbitcbitcdGlmIChucl9ocGFnZXMgXHUwMDNjIDApIHtcbitcdFx0bnJfaHBhZ2VzID0gLW5yX2hwYWdlcztcbitcdFx0ZXhwZWN0X2h1Z2UgPSBmYWxzZTtcbitcdH0gZWxzZVxuK1x0XHRleHBlY3RfaHVnZSA9IHRydWU7XG4rXG4rXHRwYWdlbWFwX2ZkID0gb3BlbihQQUdFTUFQX0ZJTEVfUEFUSCwgT19SRE9OTFkpO1xuK1x0aWYgKHBhZ2VtYXBfZmQgXHUwMDNjIDApXG4rXHRcdGtzZnRfZXhpdF9mYWlsX21zZyhcIm9wZW4gcGFnZW1hcDogJXNcXG5cIiwgc3RyZXJyb3IoZXJybm8pKTtcbitcbitcdGtwZl9mZCA9IG9wZW4oS1BBR0VGTEFHU19GSUxFX1BBVEgsIE9fUkRPTkxZKTtcbitcdGlmIChrcGZfZmQgXHUwMDNjIDApXG4rXHRcdGtzZnRfZXhpdF9mYWlsX21zZyhcIm9wZW4ga3BhZ2VmbGFnczogJXNcXG5cIiwgc3RyZXJyb3IoZXJybm8pKTtcbitcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG5yX2hwYWdlczsgaSsrLCBhZGRyICs9IGhwYWdlX3NpemUpIHtcbitcdFx0Y2F0ZWdvcmllcyA9IHBhZ2VtYXBfc2Nhbl9nZXRfY2F0ZWdvcmllcyhwYWdlbWFwX2ZkLCBhZGRyKTtcbitcdFx0cGZuID0gcGFnZW1hcF9nZXRfcGZuKHBhZ2VtYXBfZmQsIGFkZHIpO1xuK1x0XHRpZiAocGZuID09IC0xVUwpXG4rXHRcdFx0Y29udGludWU7XG4rXHRcdGlmIChwYWdlZmxhZ3NfZ2V0KHBmbiwga3BmX2ZkLCBcdTAwMjZrcGYpKVxuK1x0XHRcdGtzZnRfZXhpdF9mYWlsX21zZyhcInJlYWQga3BhZ2VmbGFnczogJXNcXG5cIiwgc3RyZXJyb3IoZXJybm8pKTtcbitcdFx0aWYgKCEoY2F0ZWdvcmllcyBcdTAwMjYgUEFHRV9JU19IVUdFKSlcbitcdFx0XHRjb250aW51ZTtcbitcdFx0aWYgKCEoY2F0ZWdvcmllcyBcdTAwMjYgUEFHRV9JU19GSUxFKSlcbitcdFx0XHRjb250aW51ZTtcbitcdFx0aWYgKGtwZiBcdTAwMjYgS1BGX1NXQVBCQUNLRUQpXG4rXHRcdFx0Y29udGludWU7XG4rXHRcdG5yKys7XG4rXHR9XG4rXG4rXHRjbG9zZShwYWdlbWFwX2ZkKTtcbitcdGNsb3NlKGtwZl9mZCk7XG4rXG4rXHRyZXR1cm4gZXhwZWN0X2h1Z2UgPyBuciA9PSBucl9ocGFnZXMgOiBuciA9PSAwO1xuIH1cbiBcbiBib29sIGNoZWNrX2h1Z2Vfc2htZW0odm9pZCAqYWRkciwgaW50IG5yX2hwYWdlcywgdWludDY0X3QgaHBhZ2Vfc2l6ZSlcbiB7XG4tXHRyZXR1cm4gX19jaGVja19odWdlKGFkZHIsIFwiU2htZW1QbWRNYXBwZWQ6XCIsIG5yX2hwYWdlcywgaHBhZ2Vfc2l6ZSk7XG4rXHRpbnQgaSwgcGFnZW1hcF9mZCwga3BmX2ZkLCBuciA9IDA7XG4rXHR1bnNpZ25lZCBsb25nIHBmbjtcbitcdHVpbnQ2NF90IGNhdGVnb3JpZXMsIGtwZjtcbitcdGJvb2wgZXhwZWN0X2h1Z2U7XG4rXG4rXHRpZiAobnJfaHBhZ2VzID09IDAgfHwgaHBhZ2Vfc2l6ZSA9PSAwKVxuK1x0XHRyZXR1cm4gZmFsc2U7XG4rXG4rXHRpZiAobnJfaHBhZ2VzIFx1MDAzYyAwKSB7XG4rXHRcdG5yX2hwYWdlcyA9IC1ucl9ocGFnZXM7XG4rXHRcdGV4cGVjdF9odWdlID0gdHJ1ZTtcbitcdH0gZWxzZVxuK1x0XHRleHBlY3RfaHVnZSA9IGZhbHNlO1xuK1xuK1x0cGFnZW1hcF9mZCA9IG9wZW4oUEFHRU1BUF9GSUxFX1BBVEgsIE9fUkRPTkxZKTtcbitcdGlmIChwYWdlbWFwX2ZkIFx1MDAzYyAwKVxuK1x0XHRrc2Z0X2V4aXRfZmFpbF9tc2coXCJvcGVuIHBhZ2VtYXA6ICVzXFxuXCIsIHN0cmVycm9yKGVycm5vKSk7XG4rXG4rXHRrcGZfZmQgPSBvcGVuKEtQQUdFRkxBR1NfRklMRV9QQVRILCBPX1JET05MWSk7XG4rXHRpZiAoa3BmX2ZkIFx1MDAzYyAwKVxuK1x0XHRrc2Z0X2V4aXRfZmFpbF9tc2coXCJvcGVuIGtwYWdlZmxhZ3M6ICVzXFxuXCIsIHN0cmVycm9yKGVycm5vKSk7XG4rXG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBucl9ocGFnZXM7IGkrKywgYWRkciArPSBocGFnZV9zaXplKSB7XG4rXHRcdGNhdGVnb3JpZXMgPSBwYWdlbWFwX3NjYW5fZ2V0X2NhdGVnb3JpZXMocGFnZW1hcF9mZCwgYWRkcik7XG4rXHRcdHBmbiA9IHBhZ2VtYXBfZ2V0X3BmbihwYWdlbWFwX2ZkLCBhZGRyKTtcbitcdFx0aWYgKHBmbiA9PSAtMVVMKVxuK1x0XHRcdGNvbnRpbnVlO1xuK1x0XHRpZiAocGFnZWZsYWdzX2dldChwZm4sIGtwZl9mZCwgXHUwMDI2a3BmKSlcbitcdFx0XHRrc2Z0X2V4aXRfZmFpbF9tc2coXCJyZWFkIGtwYWdlZmxhZ3M6ICVzXFxuXCIsIHN0cmVycm9yKGVycm5vKSk7XG4rXHRcdGlmICghKGNhdGVnb3JpZXMgXHUwMDI2IFBBR0VfSVNfSFVHRSkpXG4rXHRcdFx0Y29udGludWU7XG4rXHRcdGlmICghKGNhdGVnb3JpZXMgXHUwMDI2IFBBR0VfSVNfRklMRSkpXG4rXHRcdFx0Y29udGludWU7XG4rXHRcdGlmICghKGtwZiBcdTAwMjYgS1BGX1NXQVBCQUNLRUQpKVxuK1x0XHRcdGNvbnRpbnVlO1xuK1x0XHRucisrO1xuK1x0fVxuK1xuK1x0Y2xvc2UocGFnZW1hcF9mZCk7XG4rXHRjbG9zZShrcGZfZmQpO1xuK1xuK1x0cmV0dXJuIGV4cGVjdF9odWdlID8gbnIgPT0gbnJfaHBhZ2VzIDogbnIgPT0gMDtcbiB9XG4gXG4gaW50NjRfdCBhbGxvY2F0ZV90cmFuc2h1Z2Uodm9pZCAqcHRyLCBpbnQgcGFnZW1hcF9mZClcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS92bV91dGlsLmggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS92bV91dGlsLmhcbmluZGV4IGVhOGZjOGZkZjBlYjAuLjBhMTYyN2YzNmVmYzMgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS92bV91dGlsLmhcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ZtX3V0aWwuaFxuQEAgLTE4LDYgKzE4LDcgQEBcbiAjZGVmaW5lIFBNX1NXQVAgICAgICAgICAgICAgICAgICAgICAgIEJJVF9VTEwoNjIpXG4gI2RlZmluZSBQTV9QUkVTRU5UICAgICAgICAgICAgICAgICAgICBCSVRfVUxMKDYzKVxuIFxuKyNkZWZpbmUgS1BGX1NXQVBCQUNLRUQgICAgICAgICAgICAgICAgQklUX1VMTCgxNClcbiAjZGVmaW5lIEtQRl9DT01QT1VORF9IRUFEICAgICAgICAgICAgIEJJVF9VTEwoMTUpXG4gI2RlZmluZSBLUEZfQ09NUE9VTkRfVEFJTCAgICAgICAgICAgICBCSVRfVUxMKDE2KVxuICNkZWZpbmUgS1BGX0hXUE9JU09OICAgICAgICAgICAgICAgICAgQklUX1VMTCgxOSlcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIwVDE5OjQ4OjQyLjA4OTI5MjU1M1oiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjgzMDc5NTUyODgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQXNzZXNzaW5nIHRoZSBGdXp6aW5nIEltcGFjdCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gVGhpcyBwYXRjaCBpcyB0b3VjaGluZyBmaWxlcyB3aXRoaW4gYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2AuIFNwZWNpZmljYWxseSwgSSdtIHNlZWluZyBjaGFuZ2VzIGluIGBraHVnZXBhZ2VkLmNgLCBgc3BsaXRfaHVnZV9wYWdlX3Rlc3QuY2AsIGB2bV91dGlsLmNgLCBhbmQgYHZtX3V0aWwuaGAuIFJpZ2h0IG9mZiB0aGUgYmF0LCB0aGVzZSBhcmUgYWxsIHNlbGZ0ZXN0cyByZWxhdGVkIHRvIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0uIFRoYXQncyBnb29kOyBpdCBrZWVwcyBpdCBzb21ld2hhdCBjb250YWluZWQuXG5cbk5vdywgYSBjcml0aWNhbCBwb2ludCBoZXJlIOKAkyBhbmQgSSdtIHJlYWxseSBtYWtpbmcgc3VyZSB0byBuYWlsIHRoaXMgZG93biDigJMgdGhpcyBwYXRjaCBpc24ndCB0b3VjaGluZyBhbnkgb2YgdGhlIGNvcmUga2VybmVsIGNvZGUsIGFueSBkcml2ZXJzLCBvciBhbnkgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIHN0dWZmLiBJdCdzIHNvbGVseSBjb25maW5lZCB0byB0aGUgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2AgZGlyZWN0b3J5LiBObyByZWFsIGxvZ2ljIGlzIGdldHRpbmcgY2hhbmdlZC4gSnVzdCBkb3VibGUgY2hlY2tpbmcuLi4geXVwLCB0aG9zZSBhcmUgYWxsIHRoZSBmaWxlcy5cblxuR2l2ZW4gdGhhdCwgbXkgY29uY2x1c2lvbiBpcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkLiBTaW5jZSB0aGlzIHBhdGNoICpvbmx5KiBtb2RpZmllcyBzZWxmdGVzdHMsIGl0J3Mgbm90IGludHJvZHVjaW5nIGFueSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHdvdWxkIHdhcnJhbnQgZnV6emluZy4gV2UncmUgbm90IGdldHRpbmcgYW55IG5ldyBjb2RlIHBhdGhzIG9yIGxvZ2ljIHRoYXQgbmVlZCB0byBiZSBwb2tlZCBhdC4gU28sIEkgd2lsbCByZXR1cm4gYFdvcnRoRnV6emluZz1mYWxzZWAuIFRoZSByZWFzb25pbmcgaXMgY2xlYXI6IHRoZSBjaGFuZ2VzIGFyZSBpc29sYXRlZCB0byBzZWxmdGVzdHMsIGFuZCB0aGVyZSdzIG5vIGZ1bmN0aW9uYWwga2VybmVsIGxvZ2ljIGludm9sdmVkLiBUaGF0J3MgdGhlIHJlc3VsdC5cblxuXG4iLCJJbnB1dFRva2VucyI6NzI2OCwiT3V0cHV0VG9rZW5zIjo4NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMwNSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIwVDE5OjQ4OjUwLjM5NzI1MDUzMVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjQ2MjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggb25seSBtb2RpZmllcyBtZW1vcnkgbWFuYWdlbWVudCBzZWxmdGVzdHMgaW4gdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vIGFuZCBkb2VzIG5vdCBtYWtlIGFueSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGNvcmUga2VybmVsLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmUgY29kZS4gVGhlcmVmb3JlLCBpdCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBrZXJuZWwgbG9naWMgdGhhdCByZXF1aXJlcyBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggb25seSBtb2RpZmllcyBtZW1vcnkgbWFuYWdlbWVudCBzZWxmdGVzdHMgaW4gdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vIGFuZCBkb2VzIG5vdCBtYWtlIGFueSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGNvcmUga2VybmVsLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmUgY29kZS4gVGhlcmVmb3JlLCBpdCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBrZXJuZWwgbG9naWMgdGhhdCByZXF1aXJlcyBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjBUMTk6NDg6NTAuMzk3Mjc4OTMxWiIsIlNlcSI6NSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI2NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowp72fc[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-20 19:45:04 +0000 UTC FinishedAt: 2026-08-20 19:48:51 +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+CgkJCTx0ZD4yMDI2LzA4LzIwIDE5OjQ4PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb25seSBtb2RpZmllcyBtZW1vcnkgbWFuYWdlbWVudCBzZWxmdGVzdHMgaW4gdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vIGFuZCBkb2VzIG5vdCBtYWtlIGFueSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGNvcmUga2VybmVsLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmUgY29kZS4gVGhlcmVmb3JlLCBpdCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBrZXJuZWwgbG9naWMgdGhhdCByZXF1aXJlcyBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAxOTo0ODwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDFjYjU1ZmE5ODJmYmRlM2UzNmRjNjAxMGIxZWU3NmQ5ZmQzMWMyNzRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IEF1ZyAyMCAxOTo0ODozOCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9raHVnZXBhZ2VkLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9raHVnZXBhZ2VkLmNcbmluZGV4IDEwZThkZWRjYjA4N2QuLjJlNDY2NWU2ZDU4NTIgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9raHVnZXBhZ2VkLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2todWdlcGFnZWQuY1xuQEAgLTUzMyw3ICYjNDM7NTMzLDcgQEAgc3RhdGljIHZvaWQgX19tYWR2aXNlX2NvbGxhcHNlKGNvbnN0IGNoYXIgKm1zZywgY2hhciAqcCwgaW50IG5yX2hwYWdlcyxcbiBcdHJldCA9IG1hZHZpc2VfY29sbGFwc2VfcmV0cnkocCwgbnJfaHBhZ2VzICogaHBhZ2VfcG1kX3NpemUpO1xuIFx0aWYgKCgoYm9vbClyZXQpID09IGV4cGVjdClcbiBcdFx0ZmFpbChcJiMzNDtGYWlsOiBCYWQgcmV0dXJuIHZhbHVlXCYjMzQ7KTtcbi1cdGVsc2UgaWYgKCFvcHMtXHUwMDNlY2hlY2tfaHVnZShwLCBleHBlY3QgPyBucl9ocGFnZXMgOiAwKSlcbiYjNDM7XHRlbHNlIGlmICghb3BzLVx1MDAzZWNoZWNrX2h1Z2UocCwgZXhwZWN0ID8gbnJfaHBhZ2VzIDogLW5yX2hwYWdlcykpXG4gXHRcdGZhaWwoXCYjMzQ7RmFpbDogY2hlY2tfaHVnZSgpXCYjMzQ7KTtcbiBcdGVsc2VcbiBcdFx0c3VjY2VzcyhcJiMzNDtPS1wmIzM0Oyk7XG5AQCAtNTQ1LDcgJiM0Mzs1NDUsNyBAQCBzdGF0aWMgdm9pZCBtYWR2aXNlX2NvbGxhcHNlKGNvbnN0IGNoYXIgKm1zZywgY2hhciAqcCwgaW50IG5yX2hwYWdlcyxcbiBcdFx0XHQgICAgIHN0cnVjdCBtZW1fb3BzICpvcHMsIGJvb2wgZXhwZWN0KVxuIHtcbiBcdC8qIFNhbml0eSBjaGVjayAqL1xuLVx0aWYgKCFvcHMtXHUwMDNlY2hlY2tfaHVnZShwLCAwKSlcbiYjNDM7XHRpZiAoIW9wcy1cdTAwM2VjaGVja19odWdlKHAsIC1ucl9ocGFnZXMpKVxuIFx0XHRrc2Z0X2V4aXRfZmFpbF9tc2coXCYjMzQ7VW5leHBlY3RlZCBodWdlIHBhZ2VcXG5cJiMzNDspO1xuIFx0X19tYWR2aXNlX2NvbGxhcHNlKG1zZywgcCwgbnJfaHBhZ2VzLCBvcHMsIGV4cGVjdCk7XG4gfVxuQEAgLTU1OCw3ICYjNDM7NTU4LDcgQEAgc3RhdGljIGJvb2wgd2FpdF9mb3Jfc2Nhbihjb25zdCBjaGFyICptc2csIGNoYXIgKnAsIGludCBucl9ocGFnZXMsXG4gXHRpbnQgdGltZW91dCA9IDY7IC8qIDMgc2Vjb25kcyAqL1xuIFxuIFx0LyogU2FuaXR5IGNoZWNrICovXG4tXHRpZiAoIW9wcy1cdTAwM2VjaGVja19odWdlKHAsIDApKVxuJiM0MztcdGlmICghb3BzLVx1MDAzZWNoZWNrX2h1Z2UocCwgLW5yX2hwYWdlcykpXG4gXHRcdGtzZnRfZXhpdF9mYWlsX21zZyhcJiMzNDtVbmV4cGVjdGVkIGh1Z2UgcGFnZVxcblwmIzM0Oyk7XG4gXG4gXHRtYWR2aXNlKHAsIG5yX2hwYWdlcyAqIGhwYWdlX3BtZF9zaXplLCBNQURWX0hVR0VQQUdFKTtcbkBAIC02MDUsNyAmIzQzOzYwNSw3IEBAIHN0YXRpYyB2b2lkIGtodWdlcGFnZWRfY29sbGFwc2UoY29uc3QgY2hhciAqbXNnLCBjaGFyICpwLCBpbnQgbnJfaHBhZ2VzLFxuIFx0aWYgKG9wcyAhPSBcdTAwMjZfX2Fub25fb3BzKVxuIFx0XHRvcHMtXHUwMDNlZmF1bHQocCwgMCwgbnJfaHBhZ2VzICogaHBhZ2VfcG1kX3NpemUpO1xuIFxuLVx0aWYgKG9wcy1cdTAwM2VjaGVja19odWdlKHAsIGV4cGVjdCA/IG5yX2hwYWdlcyA6IDApKVxuJiM0MztcdGlmIChvcHMtXHUwMDNlY2hlY2tfaHVnZShwLCBleHBlY3QgPyBucl9ocGFnZXMgOiAtbnJfaHBhZ2VzKSlcbiBcdFx0c3VjY2VzcyhcJiMzNDtPS1wmIzM0Oyk7XG4gXHRlbHNlXG4gXHRcdGZhaWwoXCYjMzQ7RmFpbFwmIzM0Oyk7XG5AQCAtNjQzLDcgJiM0Mzs2NDMsNyBAQCBzdGF0aWMgdm9pZCBhbGxvY19hdF9mYXVsdCh2b2lkKVxuIFxuIFx0bWFkdmlzZShwLCBwYWdlX3NpemUsIE1BRFZfRE9OVE5FRUQpO1xuIFx0a3NmdF9wcmludF9tc2coXCYjMzQ7U3BsaXQgaHVnZSBQTUQgb24gTUFEVl9ET05UTkVFRC4uLlwmIzM0Oyk7XG4tXHRpZiAoY2hlY2tfaHVnZV9hbm9uKHAsIDAsIGhwYWdlX3BtZF9zaXplKSlcbiYjNDM7XHRpZiAoY2hlY2tfaHVnZV9hbm9uKHAsIC0xLCBocGFnZV9wbWRfc2l6ZSkpXG4gXHRcdHN1Y2Nlc3MoXCYjMzQ7T0tcJiMzNDspO1xuIFx0ZWxzZVxuIFx0XHRmYWlsKFwmIzM0O0ZhaWxcJiMzNDspO1xuQEAgLTgxNSw3ICYjNDM7ODE1LDcgQEAgc3RhdGljIHZvaWQgY29sbGFwc2Vfc2luZ2xlX3B0ZV9lbnRyeV9jb21wb3VuZChzdHJ1Y3QgY29sbGFwc2VfY29udGV4dCAqYywgc3RydWNcbiBcdG1hZHZpc2UocCwgaHBhZ2VfcG1kX3NpemUsIE1BRFZfTk9IVUdFUEFHRSk7XG4gXHRrc2Z0X3ByaW50X21zZyhcJiMzNDtTcGxpdCBodWdlIHBhZ2UgbGVhdmluZyBzaW5nbGUgUFRFIG1hcHBpbmcgY29tcG91bmQgcGFnZS4uLlwmIzM0Oyk7XG4gXHRtYWR2aXNlKHAgJiM0MzsgcGFnZV9zaXplLCBocGFnZV9wbWRfc2l6ZSAtIHBhZ2Vfc2l6ZSwgTUFEVl9ET05UTkVFRCk7XG4tXHRpZiAob3BzLVx1MDAzZWNoZWNrX2h1Z2UocCwgMCkpXG4mIzQzO1x0aWYgKG9wcy1cdTAwM2VjaGVja19odWdlKHAsIC0xKSlcbiBcdFx0c3VjY2VzcyhcJiMzNDtPS1wmIzM0Oyk7XG4gXHRlbHNlXG4gXHRcdGZhaWwoXCYjMzQ7RmFpbFwmIzM0Oyk7XG5AQCAtODM2LDcgJiM0Mzs4MzYsNyBAQCBzdGF0aWMgdm9pZCBjb2xsYXBzZV9mdWxsX29mX2NvbXBvdW5kKHN0cnVjdCBjb2xsYXBzZV9jb250ZXh0ICpjLCBzdHJ1Y3QgbWVtX29wc1xuIFx0a3NmdF9wcmludF9tc2coXCYjMzQ7U3BsaXQgaHVnZSBwYWdlIGxlYXZpbmcgc2luZ2xlIFBURSBwYWdlIHRhYmxlIGZ1bGwgb2YgY29tcG91bmQgcGFnZXMuLi5cJiMzNDspO1xuIFx0bWFkdmlzZShwLCBwYWdlX3NpemUsIE1BRFZfTk9IVUdFUEFHRSk7XG4gXHRtYWR2aXNlKHAsIGhwYWdlX3BtZF9zaXplLCBNQURWX05PSFVHRVBBR0UpO1xuLVx0aWYgKG9wcy1cdTAwM2VjaGVja19odWdlKHAsIDApKVxuJiM0MztcdGlmIChvcHMtXHUwMDNlY2hlY2tfaHVnZShwLCAtMSkpXG4gXHRcdHN1Y2Nlc3MoXCYjMzQ7T0tcJiMzNDspO1xuIFx0ZWxzZVxuIFx0XHRmYWlsKFwmIzM0O0ZhaWxcJiMzNDspO1xuQEAgLTkwMyw3ICYjNDM7OTAzLDcgQEAgc3RhdGljIHZvaWQgY29sbGFwc2VfZm9yayhzdHJ1Y3QgY29sbGFwc2VfY29udGV4dCAqYywgc3RydWN0IG1lbV9vcHMgKm9wcylcbiBcbiBcdGtzZnRfcHJpbnRfbXNnKFwmIzM0O0FsbG9jYXRlIHNtYWxsIHBhZ2UuLi5cJiMzNDspO1xuIFx0b3BzLVx1MDAzZWZhdWx0KHAsIDAsIHBhZ2Vfc2l6ZSk7XG4tXHRpZiAob3BzLVx1MDAzZWNoZWNrX2h1Z2UocCwgMCkpXG4mIzQzO1x0aWYgKG9wcy1cdTAwM2VjaGVja19odWdlKHAsIC0xKSlcbiBcdFx0c3VjY2VzcyhcJiMzNDtPS1wmIzM0Oyk7XG4gXHRlbHNlXG4gXHRcdGZhaWwoXCYjMzQ7RmFpbFwmIzM0Oyk7XG5AQCAtOTExLDcgJiM0Mzs5MTEsNyBAQCBzdGF0aWMgdm9pZCBjb2xsYXBzZV9mb3JrKHN0cnVjdCBjb2xsYXBzZV9jb250ZXh0ICpjLCBzdHJ1Y3QgbWVtX29wcyAqb3BzKVxuIFx0a3NmdF9wcmludF9tc2coXCYjMzQ7U2hhcmUgc21hbGwgcGFnZSBvdmVyIGZvcmsoKS4uLlwmIzM0Oyk7XG4gXHRpZiAoIWZvcmsoKSkge1xuIFx0XHQvKiBEbyBub3QgdG91Y2ggc2V0dGluZ3Mgb24gY2hpbGQgZXhpdCAqL1xuLVx0XHRpZiAob3BzLVx1MDAzZWNoZWNrX2h1Z2UocCwgMCkpXG4mIzQzO1x0XHRpZiAob3BzLVx1MDAzZWNoZWNrX2h1Z2UocCwgLTEpKVxuIFx0XHRcdHN1Y2Nlc3MoXCYjMzQ7T0tcJiMzNDspO1xuIFx0XHRlbHNlXG4gXHRcdFx0ZmFpbChcJiMzNDtGYWlsXCYjMzQ7KTtcbkBAIC05MjksNyAmIzQzOzkyOSw3IEBAIHN0YXRpYyB2b2lkIGNvbGxhcHNlX2Zvcmsoc3RydWN0IGNvbGxhcHNlX2NvbnRleHQgKmMsIHN0cnVjdCBtZW1fb3BzICpvcHMpXG4gXHRleGl0X3N0YXR1cyA9IFdFWElUU1RBVFVTKHdzdGF0dXMpO1xuIFxuIFx0a3NmdF9wcmludF9tc2coXCYjMzQ7Q2hlY2sgaWYgcGFyZW50IHN0aWxsIGhhcyBzbWFsbCBwYWdlLi4uXCYjMzQ7KTtcbi1cdGlmIChvcHMtXHUwMDNlY2hlY2tfaHVnZShwLCAwKSlcbiYjNDM7XHRpZiAob3BzLVx1MDAzZWNoZWNrX2h1Z2UocCwgLTEpKVxuIFx0XHRzdWNjZXNzKFwmIzM0O09LXCYjMzQ7KTtcbiBcdGVsc2VcbiBcdFx0ZmFpbChcJiMzNDtGYWlsXCYjMzQ7KTtcbkBAIC05NTUsNyAmIzQzOzk1NSw3IEBAIHN0YXRpYyB2b2lkIGNvbGxhcHNlX2ZvcmtfY29tcG91bmQoc3RydWN0IGNvbGxhcHNlX2NvbnRleHQgKmMsIHN0cnVjdCBtZW1fb3BzICpvXG4gXHRcdGtzZnRfcHJpbnRfbXNnKFwmIzM0O1NwbGl0IGh1Z2UgcGFnZSBQTUQgaW4gY2hpbGQgcHJvY2Vzcy4uLlwmIzM0Oyk7XG4gXHRcdG1hZHZpc2UocCwgcGFnZV9zaXplLCBNQURWX05PSFVHRVBBR0UpO1xuIFx0XHRtYWR2aXNlKHAsIGhwYWdlX3BtZF9zaXplLCBNQURWX05PSFVHRVBBR0UpO1xuLVx0XHRpZiAob3BzLVx1MDAzZWNoZWNrX2h1Z2UocCwgMCkpXG4mIzQzO1x0XHRpZiAob3BzLVx1MDAzZWNoZWNrX2h1Z2UocCwgLTEpKVxuIFx0XHRcdHN1Y2Nlc3MoXCYjMzQ7T0tcJiMzNDspO1xuIFx0XHRlbHNlXG4gXHRcdFx0ZmFpbChcJiMzNDtGYWlsXCYjMzQ7KTtcbkBAIC0xMDAzLDcgJiM0MzsxMDAzLDcgQEAgc3RhdGljIHZvaWQgY29sbGFwc2VfbWF4X3B0ZXNfc2hhcmVkKHN0cnVjdCBjb2xsYXBzZV9jb250ZXh0ICpjLCBzdHJ1Y3QgbWVtX29wc1xuIFx0XHRrc2Z0X3ByaW50X21zZyhcJiMzNDtUcmlnZ2VyIENvVyBvbiBwYWdlICVkIG9mICVkLi4uXCYjMzQ7LFxuIFx0XHRcdFx0aHBhZ2VfcG1kX25yIC0gbWF4X3B0ZXNfc2hhcmVkIC0gMSwgaHBhZ2VfcG1kX25yKTtcbiBcdFx0b3BzLVx1MDAzZWZhdWx0KHAsIDAsIChocGFnZV9wbWRfbnIgLSBtYXhfcHRlc19zaGFyZWQgLSAxKSAqIHBhZ2Vfc2l6ZSk7XG4tXHRcdGlmIChvcHMtXHUwMDNlY2hlY2tfaHVnZShwLCAwKSlcbiYjNDM7XHRcdGlmIChvcHMtXHUwMDNlY2hlY2tfaHVnZShwLCAtMSkpXG4gXHRcdFx0c3VjY2VzcyhcJiMzNDtPS1wmIzM0Oyk7XG4gXHRcdGVsc2VcbiBcdFx0XHRmYWlsKFwmIzM0O0ZhaWxcJiMzNDspO1xuQEAgLTEwMTYsNyAmIzQzOzEwMTYsNyBAQCBzdGF0aWMgdm9pZCBjb2xsYXBzZV9tYXhfcHRlc19zaGFyZWQoc3RydWN0IGNvbGxhcHNlX2NvbnRleHQgKmMsIHN0cnVjdCBtZW1fb3BzXG4gXHRcdFx0ICAgICAgIGhwYWdlX3BtZF9uciAtIG1heF9wdGVzX3NoYXJlZCwgaHBhZ2VfcG1kX25yKTtcbiBcdFx0XHRvcHMtXHUwMDNlZmF1bHQocCwgMCwgKGhwYWdlX3BtZF9uciAtIG1heF9wdGVzX3NoYXJlZCkgKlxuIFx0XHRcdFx0ICAgIHBhZ2Vfc2l6ZSk7XG4tXHRcdFx0aWYgKG9wcy1cdTAwM2VjaGVja19odWdlKHAsIDApKVxuJiM0MztcdFx0XHRpZiAob3BzLVx1MDAzZWNoZWNrX2h1Z2UocCwgLTEpKVxuIFx0XHRcdFx0c3VjY2VzcyhcJiMzNDtPS1wmIzM0Oyk7XG4gXHRcdFx0ZWxzZVxuIFx0XHRcdFx0ZmFpbChcJiMzNDtGYWlsXCYjMzQ7KTtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9zcGxpdF9odWdlX3BhZ2VfdGVzdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vc3BsaXRfaHVnZV9wYWdlX3Rlc3QuY1xuaW5kZXggMzJiOTkxNDcyZjc0NC4uNGZjZDMzMGNmMDcyNiAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3NwbGl0X2h1Z2VfcGFnZV90ZXN0LmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3NwbGl0X2h1Z2VfcGFnZV90ZXN0LmNcbkBAIC0zMDMsNiAmIzQzOzMwMyw5IEBAIHN0YXRpYyB2b2lkIHZlcmlmeV9yc3NfYW5vbl9zcGxpdF9odWdlX3BhZ2VfYWxsX3plcm9lcyhjaGFyICpvbmVfcGFnZSwgaW50IG5yX2hwXG4gXHRpZiAoIXJzc19hbm9uX2JlZm9yZSlcbiBcdFx0a3NmdF9leGl0X2ZhaWxfbXNnKFwmIzM0O05vIFJzc0Fub24gaXMgYWxsb2NhdGVkIGJlZm9yZSBzcGxpdFxcblwmIzM0Oyk7XG4gXG4mIzQzO1x0LyogUHJldmVudCBraHVnZXBhZ2VkIGZyb20gY29sbGFwc2luZyB0aGUgcGFnZXMuICovXG4mIzQzO1x0bWFkdmlzZShvbmVfcGFnZSwgbGVuLCBNQURWX05PSFVHRVBBR0UpO1xuJiM0MztcbiBcdC8qIHNwbGl0IGFsbCBUSFBzICovXG4gXHR3cml0ZV9kZWJ1Z2ZzKFBJRF9GTVQsIGdldHBpZCgpLCAodWludDY0X3Qpb25lX3BhZ2UsXG4gXHRcdCAgICAgICh1aW50NjRfdClvbmVfcGFnZSAmIzQzOyBsZW4sIDApO1xuQEAgLTMxMSw3ICYjNDM7MzE0LDcgQEAgc3RhdGljIHZvaWQgdmVyaWZ5X3Jzc19hbm9uX3NwbGl0X2h1Z2VfcGFnZV9hbGxfemVyb2VzKGNoYXIgKm9uZV9wYWdlLCBpbnQgbnJfaHBcbiBcdFx0aWYgKG9uZV9wYWdlW2ldICE9IChjaGFyKTApXG4gXHRcdFx0a3NmdF9leGl0X2ZhaWxfbXNnKFwmIzM0OyVsZCBieXRlIGNvcnJ1cHRlZFxcblwmIzM0OywgaSk7XG4gXG4tXHRpZiAoIWNoZWNrX2h1Z2VfYW5vbihvbmVfcGFnZSwgMCwgcG1kX3BhZ2VzaXplKSlcbiYjNDM7XHRpZiAoIWNoZWNrX2h1Z2VfYW5vbihvbmVfcGFnZSwgLW5yX2hwYWdlcywgcG1kX3BhZ2VzaXplKSlcbiBcdFx0a3NmdF9leGl0X2ZhaWxfbXNnKFwmIzM0O1N0aWxsIEFub25IdWdlUGFnZXMgbm90IHNwbGl0XFxuXCYjMzQ7KTtcbiBcbiBcdHJzc19hbm9uX2FmdGVyID0gcnNzX2Fub24oKTtcbkBAIC0zNTAsNiAmIzQzOzM1Myw5IEBAIHN0YXRpYyB2b2lkIHNwbGl0X3BtZF90aHBfdG9fb3JkZXIoaW50IG9yZGVyKVxuIFx0aWYgKCFjaGVja19odWdlX2Fub24ob25lX3BhZ2UsIDQsIHBtZF9wYWdlc2l6ZSkpXG4gXHRcdGtzZnRfZXhpdF9mYWlsX21zZyhcJiMzNDtObyBUSFAgaXMgYWxsb2NhdGVkXFxuXCYjMzQ7KTtcbiBcbiYjNDM7XHQvKiBQcmV2ZW50IGtodWdlcGFnZWQgZnJvbSBjb2xsYXBzaW5nIHRoZSBwYWdlcy4gKi9cbiYjNDM7XHRtYWR2aXNlKG9uZV9wYWdlLCBsZW4sIE1BRFZfTk9IVUdFUEFHRSk7XG4mIzQzO1xuIFx0Lyogc3BsaXQgYWxsIFRIUHMgKi9cbiBcdHdyaXRlX2RlYnVnZnMoUElEX0ZNVCwgZ2V0cGlkKCksICh1aW50NjRfdClvbmVfcGFnZSxcbiBcdFx0KHVpbnQ2NF90KW9uZV9wYWdlICYjNDM7IGxlbiwgb3JkZXIpO1xuQEAgLTM2Niw3ICYjNDM7MzcyLDcgQEAgc3RhdGljIHZvaWQgc3BsaXRfcG1kX3RocF90b19vcmRlcihpbnQgb3JkZXIpXG4gXHRcdFx0XHRcdCAgIChwbWRfb3JkZXIgJiM0MzsgMSkpKVxuIFx0XHRrc2Z0X2V4aXRfZmFpbF9tc2coXCYjMzQ7VW5leHBlY3RlZCBUSFAgc3BsaXRcXG5cJiMzNDspO1xuIFxuLVx0aWYgKCFjaGVja19odWdlX2Fub24ob25lX3BhZ2UsIDAsIHBtZF9wYWdlc2l6ZSkpXG4mIzQzO1x0aWYgKCFjaGVja19odWdlX2Fub24ob25lX3BhZ2UsIC00LCBwbWRfcGFnZXNpemUpKVxuIFx0XHRrc2Z0X2V4aXRfZmFpbF9tc2coXCYjMzQ7U3RpbGwgQW5vbkh1Z2VQYWdlcyBub3Qgc3BsaXRcXG5cJiMzNDspO1xuIFxuIFx0a3NmdF90ZXN0X3Jlc3VsdF9wYXNzKFwmIzM0O1NwbGl0IGh1Z2UgcGFnZXMgdG8gb3JkZXIgJWQgc3VjY2Vzc2Z1bFxcblwmIzM0Oywgb3JkZXIpO1xuQEAgLTQzNiw2ICYjNDM7NDQyLDkgQEAgc3RhdGljIHZvaWQgc3BsaXRfcHRlX21hcHBlZF90aHAodm9pZClcbiBcdFx0Z290byBvdXQ7XG4gXHR9XG4gXG4mIzQzO1x0LyogUHJldmVudCBraHVnZXBhZ2VkIGZyb20gY29sbGFwc2luZyB0aGUgcGFnZXMuICovXG4mIzQzO1x0bWFkdmlzZSh0aHBfYXJlYSwgdGhwX2FyZWFfc2l6ZSwgTUFEVl9OT0hVR0VQQUdFKTtcbiYjNDM7XG4gXHQvKiBTcGxpdCBhbGwgVEhQcyB0aHJvdWdoIHRoZSByZW1hcHBlZCBwYWdlcy4gKi9cbiBcdHdyaXRlX2RlYnVnZnMoUElEX0ZNVCwgZ2V0cGlkKCksICh1aW50NjRfdClwYWdlX2FyZWEsXG4gXHRcdCAgICAgICh1aW50NjRfdClwYWdlX2FyZWEgJiM0MzsgcGFnZV9hcmVhX3NpemUsIDApO1xuQEAgLTY2NSw2ICYjNDM7Njc0LDggQEAgc3RhdGljIGludCBjcmVhdGVfcGFnZWNhY2hlX3RocF9hbmRfZmQoY29uc3QgY2hhciAqdGVzdGZpbGUsIHNpemVfdCBmZF9zaXplLFxuIFx0XHRrc2Z0X3Rlc3RfcmVzdWx0X3NraXAoXCYjMzQ7UGFnZWNhY2hlIGZvbGlvIHNwbGl0IHNraXBwZWRcXG5cJiMzNDspO1xuIFx0XHRyZXR1cm4gLTI7XG4gXHR9XG4mIzQzO1x0LyogUHJldmVudCBraHVnZXBhZ2VkIGZyb20gY29sbGFwc2luZyB0aGUgcGFnZXMuICovXG4mIzQzO1x0bWFkdmlzZSgqYWRkciwgZmRfc2l6ZSwgTUFEVl9OT0hVR0VQQUdFKTtcbiBcdHJldHVybiAwO1xuIGVycl9vdXRfY2xvc2U6XG4gXHRjbG9zZSgqZmQpO1xuQEAgLTczNSw3ICYjNDM7NzQ2LDcgQEAgc3RhdGljIHZvaWQgc3BsaXRfdGhwX2luX3BhZ2VjYWNoZV90b19vcmRlcl9hdChzaXplX3QgZmRfc2l6ZSxcbiBcdFx0Z290byBvdXQ7XG4gXHR9XG4gXG4tXHRpZiAoIWNoZWNrX2h1Z2VfZmlsZShhZGRyLCAwLCBwbWRfcGFnZXNpemUpKSB7XG4mIzQzO1x0aWYgKCFjaGVja19odWdlX2ZpbGUoYWRkciwgLShmZF9zaXplIC8gcG1kX3BhZ2VzaXplKSwgcG1kX3BhZ2VzaXplKSkge1xuIFx0XHRrc2Z0X3ByaW50X21zZyhcJiMzNDtTdGlsbCBGaWxlUG1kTWFwcGVkIG5vdCBzcGxpdFxcblwmIzM0Oyk7XG4gXHRcdGVyciA9IEVYSVRfRkFJTFVSRTtcbiBcdFx0Z290byBvdXQ7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdm1fdXRpbC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdm1fdXRpbC5jXG5pbmRleCAzMTFmYzViNDUxM2ViLi4xNjZkNWQ3OTI4OWYzIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdm1fdXRpbC5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS92bV91dGlsLmNcbkBAIC0xNCw2ICYjNDM7MTQsOCBAQFxuICNkZWZpbmUgUE1EX1NJWkVfRklMRV9QQVRIIFwmIzM0Oy9zeXMva2VybmVsL21tL3RyYW5zcGFyZW50X2h1Z2VwYWdlL2hwYWdlX3BtZF9zaXplXCYjMzQ7XG4gI2RlZmluZSBTTUFQX0ZJTEVfUEFUSCBcJiMzNDsvcHJvYy9zZWxmL3NtYXBzXCYjMzQ7XG4gI2RlZmluZSBTVEFUVVNfRklMRV9QQVRIIFwmIzM0Oy9wcm9jL3NlbGYvc3RhdHVzXCYjMzQ7XG4mIzQzOyNkZWZpbmUgUEFHRU1BUF9GSUxFX1BBVEggXCYjMzQ7L3Byb2Mvc2VsZi9wYWdlbWFwXCYjMzQ7XG4mIzQzOyNkZWZpbmUgS1BBR0VGTEFHU19GSUxFX1BBVEggXCYjMzQ7L3Byb2Mva3BhZ2VmbGFnc1wmIzM0O1xuICNkZWZpbmUgTUFYX0xJTkVfTEVOR1RIIDUwMFxuIFxuIHVuc2lnbmVkIGludCBfX3BhZ2Vfc2l6ZTtcbkBAIC0yMjksMzcgJiM0MzsyMzEsMTI4IEBAIGNoYXIgKl9fZ2V0X3NtYXBfZW50cnkodm9pZCAqYWRkciwgY29uc3QgY2hhciAqcGF0dGVybiwgY2hhciAqYnVmLCBzaXplX3QgbGVuKVxuIFx0cmV0dXJuIGVudHJ5O1xuIH1cbiBcbi1ib29sIF9fY2hlY2tfaHVnZSh2b2lkICphZGRyLCBjaGFyICpwYXR0ZXJuLCBpbnQgbnJfaHBhZ2VzLFxuLVx0XHQgIHVpbnQ2NF90IGhwYWdlX3NpemUpXG4te1xuLVx0Y2hhciBidWZmZXJbTUFYX0xJTkVfTEVOR1RIXTtcbi1cdHVpbnQ2NF90IHRocCA9IC0xO1xuLVx0Y2hhciAqZW50cnk7XG4tXG4tXHRlbnRyeSA9IF9fZ2V0X3NtYXBfZW50cnkoYWRkciwgcGF0dGVybiwgYnVmZmVyLCBzaXplb2YoYnVmZmVyKSk7XG4tXHRpZiAoIWVudHJ5KVxuLVx0XHRnb3RvIGVycl9vdXQ7XG4tXG4tXHRpZiAoc3NjYW5mKGVudHJ5LCBcJiMzNDslOVwmIzM0OyBTQ051NjQgXCYjMzQ7IGtCXCYjMzQ7LCBcdTAwMjZ0aHApICE9IDEpXG4tXHRcdGtzZnRfZXhpdF9mYWlsX21zZyhcJiMzNDtSZWFkaW5nIHNtYXAgZXJyb3JcXG5cJiMzNDspO1xuLVxuLWVycl9vdXQ6XG4tXHRyZXR1cm4gdGhwID09IChucl9ocGFnZXMgKiAoaHBhZ2Vfc2l6ZSBcdTAwM2VcdTAwM2UgMTApKTtcbi19XG4tXG4gYm9vbCBjaGVja19odWdlX2Fub24odm9pZCAqYWRkciwgaW50IG5yX2hwYWdlcywgdWludDY0X3QgaHBhZ2Vfc2l6ZSlcbiB7XG4tXHRyZXR1cm4gX19jaGVja19odWdlKGFkZHIsIFwmIzM0O0Fub25IdWdlUGFnZXM6IFwmIzM0OywgbnJfaHBhZ2VzLCBocGFnZV9zaXplKTtcbiYjNDM7XHRpbnQgaSwgcGFnZW1hcF9mZCwgbnIgPSAwO1xuJiM0MztcdHVpbnQ2NF90IGNhdGVnb3JpZXM7XG4mIzQzO1x0Ym9vbCBleHBlY3RfaHVnZTtcbiYjNDM7XG4mIzQzO1x0aWYgKG5yX2hwYWdlcyA9PSAwIHx8IGhwYWdlX3NpemUgPT0gMClcbiYjNDM7XHRcdHJldHVybiBmYWxzZTtcbiYjNDM7XG4mIzQzO1x0aWYgKG5yX2hwYWdlcyBcdTAwM2MgMCkge1xuJiM0MztcdFx0bnJfaHBhZ2VzID0gLW5yX2hwYWdlcztcbiYjNDM7XHRcdGV4cGVjdF9odWdlID0gZmFsc2U7XG4mIzQzO1x0fSBlbHNlXG4mIzQzO1x0XHRleHBlY3RfaHVnZSA9IHRydWU7XG4mIzQzO1xuJiM0MztcdHBhZ2VtYXBfZmQgPSBvcGVuKFBBR0VNQVBfRklMRV9QQVRILCBPX1JET05MWSk7XG4mIzQzO1x0aWYgKHBhZ2VtYXBfZmQgXHUwMDNjIDApXG4mIzQzO1x0XHRrc2Z0X2V4aXRfZmFpbF9tc2coXCYjMzQ7b3BlbiBwYWdlbWFwOiAlc1xcblwmIzM0Oywgc3RyZXJyb3IoZXJybm8pKTtcbiYjNDM7XG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgbnJfaHBhZ2VzOyBpJiM0MzsmIzQzOywgYWRkciAmIzQzOz0gaHBhZ2Vfc2l6ZSkge1xuJiM0MztcdFx0Y2F0ZWdvcmllcyA9IHBhZ2VtYXBfc2Nhbl9nZXRfY2F0ZWdvcmllcyhwYWdlbWFwX2ZkLCBhZGRyKTtcbiYjNDM7XHRcdGlmICghKGNhdGVnb3JpZXMgXHUwMDI2IFBBR0VfSVNfSFVHRSkpXG4mIzQzO1x0XHRcdGNvbnRpbnVlO1xuJiM0MztcdFx0aWYgKGNhdGVnb3JpZXMgXHUwMDI2IFBBR0VfSVNfRklMRSlcbiYjNDM7XHRcdFx0Y29udGludWU7XG4mIzQzO1x0XHRuciYjNDM7JiM0Mzs7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRjbG9zZShwYWdlbWFwX2ZkKTtcbiYjNDM7XHRyZXR1cm4gZXhwZWN0X2h1Z2UgPyBuciA9PSBucl9ocGFnZXMgOiBuciA9PSAwO1xuIH1cbiBcbiBib29sIGNoZWNrX2h1Z2VfZmlsZSh2b2lkICphZGRyLCBpbnQgbnJfaHBhZ2VzLCB1aW50NjRfdCBocGFnZV9zaXplKVxuIHtcbi1cdHJldHVybiBfX2NoZWNrX2h1Z2UoYWRkciwgXCYjMzQ7RmlsZVBtZE1hcHBlZDpcJiMzNDssIG5yX2hwYWdlcywgaHBhZ2Vfc2l6ZSk7XG4mIzQzO1x0aW50IGksIHBhZ2VtYXBfZmQsIGtwZl9mZCwgbnIgPSAwO1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgcGZuO1xuJiM0MztcdHVpbnQ2NF90IGNhdGVnb3JpZXMsIGtwZjtcbiYjNDM7XHRib29sIGV4cGVjdF9odWdlO1xuJiM0MztcbiYjNDM7XHRpZiAobnJfaHBhZ2VzID09IDAgfHwgaHBhZ2Vfc2l6ZSA9PSAwKVxuJiM0MztcdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcbiYjNDM7XHRpZiAobnJfaHBhZ2VzIFx1MDAzYyAwKSB7XG4mIzQzO1x0XHRucl9ocGFnZXMgPSAtbnJfaHBhZ2VzO1xuJiM0MztcdFx0ZXhwZWN0X2h1Z2UgPSBmYWxzZTtcbiYjNDM7XHR9IGVsc2VcbiYjNDM7XHRcdGV4cGVjdF9odWdlID0gdHJ1ZTtcbiYjNDM7XG4mIzQzO1x0cGFnZW1hcF9mZCA9IG9wZW4oUEFHRU1BUF9GSUxFX1BBVEgsIE9fUkRPTkxZKTtcbiYjNDM7XHRpZiAocGFnZW1hcF9mZCBcdTAwM2MgMClcbiYjNDM7XHRcdGtzZnRfZXhpdF9mYWlsX21zZyhcJiMzNDtvcGVuIHBhZ2VtYXA6ICVzXFxuXCYjMzQ7LCBzdHJlcnJvcihlcnJubykpO1xuJiM0MztcbiYjNDM7XHRrcGZfZmQgPSBvcGVuKEtQQUdFRkxBR1NfRklMRV9QQVRILCBPX1JET05MWSk7XG4mIzQzO1x0aWYgKGtwZl9mZCBcdTAwM2MgMClcbiYjNDM7XHRcdGtzZnRfZXhpdF9mYWlsX21zZyhcJiMzNDtvcGVuIGtwYWdlZmxhZ3M6ICVzXFxuXCYjMzQ7LCBzdHJlcnJvcihlcnJubykpO1xuJiM0MztcbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBucl9ocGFnZXM7IGkmIzQzOyYjNDM7LCBhZGRyICYjNDM7PSBocGFnZV9zaXplKSB7XG4mIzQzO1x0XHRjYXRlZ29yaWVzID0gcGFnZW1hcF9zY2FuX2dldF9jYXRlZ29yaWVzKHBhZ2VtYXBfZmQsIGFkZHIpO1xuJiM0MztcdFx0cGZuID0gcGFnZW1hcF9nZXRfcGZuKHBhZ2VtYXBfZmQsIGFkZHIpO1xuJiM0MztcdFx0aWYgKHBmbiA9PSAtMVVMKVxuJiM0MztcdFx0XHRjb250aW51ZTtcbiYjNDM7XHRcdGlmIChwYWdlZmxhZ3NfZ2V0KHBmbiwga3BmX2ZkLCBcdTAwMjZrcGYpKVxuJiM0MztcdFx0XHRrc2Z0X2V4aXRfZmFpbF9tc2coXCYjMzQ7cmVhZCBrcGFnZWZsYWdzOiAlc1xcblwmIzM0Oywgc3RyZXJyb3IoZXJybm8pKTtcbiYjNDM7XHRcdGlmICghKGNhdGVnb3JpZXMgXHUwMDI2IFBBR0VfSVNfSFVHRSkpXG4mIzQzO1x0XHRcdGNvbnRpbnVlO1xuJiM0MztcdFx0aWYgKCEoY2F0ZWdvcmllcyBcdTAwMjYgUEFHRV9JU19GSUxFKSlcbiYjNDM7XHRcdFx0Y29udGludWU7XG4mIzQzO1x0XHRpZiAoa3BmIFx1MDAyNiBLUEZfU1dBUEJBQ0tFRClcbiYjNDM7XHRcdFx0Y29udGludWU7XG4mIzQzO1x0XHRuciYjNDM7JiM0Mzs7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRjbG9zZShwYWdlbWFwX2ZkKTtcbiYjNDM7XHRjbG9zZShrcGZfZmQpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gZXhwZWN0X2h1Z2UgPyBuciA9PSBucl9ocGFnZXMgOiBuciA9PSAwO1xuIH1cbiBcbiBib29sIGNoZWNrX2h1Z2Vfc2htZW0odm9pZCAqYWRkciwgaW50IG5yX2hwYWdlcywgdWludDY0X3QgaHBhZ2Vfc2l6ZSlcbiB7XG4tXHRyZXR1cm4gX19jaGVja19odWdlKGFkZHIsIFwmIzM0O1NobWVtUG1kTWFwcGVkOlwmIzM0OywgbnJfaHBhZ2VzLCBocGFnZV9zaXplKTtcbiYjNDM7XHRpbnQgaSwgcGFnZW1hcF9mZCwga3BmX2ZkLCBuciA9IDA7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBwZm47XG4mIzQzO1x0dWludDY0X3QgY2F0ZWdvcmllcywga3BmO1xuJiM0MztcdGJvb2wgZXhwZWN0X2h1Z2U7XG4mIzQzO1xuJiM0MztcdGlmIChucl9ocGFnZXMgPT0gMCB8fCBocGFnZV9zaXplID09IDApXG4mIzQzO1x0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1xuJiM0MztcdGlmIChucl9ocGFnZXMgXHUwMDNjIDApIHtcbiYjNDM7XHRcdG5yX2hwYWdlcyA9IC1ucl9ocGFnZXM7XG4mIzQzO1x0XHRleHBlY3RfaHVnZSA9IHRydWU7XG4mIzQzO1x0fSBlbHNlXG4mIzQzO1x0XHRleHBlY3RfaHVnZSA9IGZhbHNlO1xuJiM0MztcbiYjNDM7XHRwYWdlbWFwX2ZkID0gb3BlbihQQUdFTUFQX0ZJTEVfUEFUSCwgT19SRE9OTFkpO1xuJiM0MztcdGlmIChwYWdlbWFwX2ZkIFx1MDAzYyAwKVxuJiM0MztcdFx0a3NmdF9leGl0X2ZhaWxfbXNnKFwmIzM0O29wZW4gcGFnZW1hcDogJXNcXG5cJiMzNDssIHN0cmVycm9yKGVycm5vKSk7XG4mIzQzO1xuJiM0MztcdGtwZl9mZCA9IG9wZW4oS1BBR0VGTEFHU19GSUxFX1BBVEgsIE9fUkRPTkxZKTtcbiYjNDM7XHRpZiAoa3BmX2ZkIFx1MDAzYyAwKVxuJiM0MztcdFx0a3NmdF9leGl0X2ZhaWxfbXNnKFwmIzM0O29wZW4ga3BhZ2VmbGFnczogJXNcXG5cJiMzNDssIHN0cmVycm9yKGVycm5vKSk7XG4mIzQzO1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG5yX2hwYWdlczsgaSYjNDM7JiM0MzssIGFkZHIgJiM0Mzs9IGhwYWdlX3NpemUpIHtcbiYjNDM7XHRcdGNhdGVnb3JpZXMgPSBwYWdlbWFwX3NjYW5fZ2V0X2NhdGVnb3JpZXMocGFnZW1hcF9mZCwgYWRkcik7XG4mIzQzO1x0XHRwZm4gPSBwYWdlbWFwX2dldF9wZm4ocGFnZW1hcF9mZCwgYWRkcik7XG4mIzQzO1x0XHRpZiAocGZuID09IC0xVUwpXG4mIzQzO1x0XHRcdGNvbnRpbnVlO1xuJiM0MztcdFx0aWYgKHBhZ2VmbGFnc19nZXQocGZuLCBrcGZfZmQsIFx1MDAyNmtwZikpXG4mIzQzO1x0XHRcdGtzZnRfZXhpdF9mYWlsX21zZyhcJiMzNDtyZWFkIGtwYWdlZmxhZ3M6ICVzXFxuXCYjMzQ7LCBzdHJlcnJvcihlcnJubykpO1xuJiM0MztcdFx0aWYgKCEoY2F0ZWdvcmllcyBcdTAwMjYgUEFHRV9JU19IVUdFKSlcbiYjNDM7XHRcdFx0Y29udGludWU7XG4mIzQzO1x0XHRpZiAoIShjYXRlZ29yaWVzIFx1MDAyNiBQQUdFX0lTX0ZJTEUpKVxuJiM0MztcdFx0XHRjb250aW51ZTtcbiYjNDM7XHRcdGlmICghKGtwZiBcdTAwMjYgS1BGX1NXQVBCQUNLRUQpKVxuJiM0MztcdFx0XHRjb250aW51ZTtcbiYjNDM7XHRcdG5yJiM0MzsmIzQzOztcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGNsb3NlKHBhZ2VtYXBfZmQpO1xuJiM0MztcdGNsb3NlKGtwZl9mZCk7XG4mIzQzO1xuJiM0MztcdHJldHVybiBleHBlY3RfaHVnZSA/IG5yID09IG5yX2hwYWdlcyA6IG5yID09IDA7XG4gfVxuIFxuIGludDY0X3QgYWxsb2NhdGVfdHJhbnNodWdlKHZvaWQgKnB0ciwgaW50IHBhZ2VtYXBfZmQpXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdm1fdXRpbC5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdm1fdXRpbC5oXG5pbmRleCBlYThmYzhmZGYwZWIwLi4wYTE2MjdmMzZlZmMzIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdm1fdXRpbC5oXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS92bV91dGlsLmhcbkBAIC0xOCw2ICYjNDM7MTgsNyBAQFxuICNkZWZpbmUgUE1fU1dBUCAgICAgICAgICAgICAgICAgICAgICAgQklUX1VMTCg2MilcbiAjZGVmaW5lIFBNX1BSRVNFTlQgICAgICAgICAgICAgICAgICAgIEJJVF9VTEwoNjMpXG4gXG4mIzQzOyNkZWZpbmUgS1BGX1NXQVBCQUNLRUQgICAgICAgICAgICAgICAgQklUX1VMTCgxNClcbiAjZGVmaW5lIEtQRl9DT01QT1VORF9IRUFEICAgICAgICAgICAgIEJJVF9VTEwoMTUpXG4gI2RlZmluZSBLUEZfQ09NUE9VTkRfVEFJTCAgICAgICAgICAgICBCSVRfVUxMKDE2KVxuICNkZWZpbmUgS1BGX0hXUE9JU09OICAgICAgICAgICAgICAgICAgQklUX1VMTCgxOSlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAxOTo0ODwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb25seSBtb2RpZmllcyBtZW1vcnkgbWFuYWdlbWVudCBzZWxmdGVzdHMgaW4gdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vIGFuZCBkb2VzIG5vdCBtYWtlIGFueSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGNvcmUga2VybmVsLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmUgY29kZS4gVGhlcmVmb3JlLCBpdCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBrZXJuZWwgbG9naWMgdGhhdCByZXF1aXJlcyBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDFjYjU1ZmE5ODJmYmRlM2UzNmRjNjAxMGIxZWU3NmQ5ZmQzMWMyNzQKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVGh1IEF1ZyAyMCAxOTo0ODozOCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2todWdlcGFnZWQuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2todWdlcGFnZWQuYwppbmRleCAxMGU4ZGVkY2IwODdkLi4yZTQ2NjVlNmQ1ODUyIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9raHVnZXBhZ2VkLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0va2h1Z2VwYWdlZC5jCkBAIC01MzMsNyAmIzQzOzUzMyw3IEBAIHN0YXRpYyB2b2lkIF9fbWFkdmlzZV9jb2xsYXBzZShjb25zdCBjaGFyICptc2csIGNoYXIgKnAsIGludCBucl9ocGFnZXMsCiAJcmV0ID0gbWFkdmlzZV9jb2xsYXBzZV9yZXRyeShwLCBucl9ocGFnZXMgKiBocGFnZV9wbWRfc2l6ZSk7CiAJaWYgKCgoYm9vbClyZXQpID09IGV4cGVjdCkKIAkJZmFpbCgmIzM0O0ZhaWw6IEJhZCByZXR1cm4gdmFsdWUmIzM0Oyk7Ci0JZWxzZSBpZiAoIW9wcy0mZ3Q7Y2hlY2tfaHVnZShwLCBleHBlY3QgPyBucl9ocGFnZXMgOiAwKSkKJiM0MzsJZWxzZSBpZiAoIW9wcy0mZ3Q7Y2hlY2tfaHVnZShwLCBleHBlY3QgPyBucl9ocGFnZXMgOiAtbnJfaHBhZ2VzKSkKIAkJZmFpbCgmIzM0O0ZhaWw6IGNoZWNrX2h1Z2UoKSYjMzQ7KTsKIAllbHNlCiAJCXN1Y2Nlc3MoJiMzNDtPSyYjMzQ7KTsKQEAgLTU0NSw3ICYjNDM7NTQ1LDcgQEAgc3RhdGljIHZvaWQgbWFkdmlzZV9jb2xsYXBzZShjb25zdCBjaGFyICptc2csIGNoYXIgKnAsIGludCBucl9ocGFnZXMsCiAJCQkgICAgIHN0cnVjdCBtZW1fb3BzICpvcHMsIGJvb2wgZXhwZWN0KQogewogCS8qIFNhbml0eSBjaGVjayAqLwotCWlmICghb3BzLSZndDtjaGVja19odWdlKHAsIDApKQomIzQzOwlpZiAoIW9wcy0mZ3Q7Y2hlY2tfaHVnZShwLCAtbnJfaHBhZ2VzKSkKIAkJa3NmdF9leGl0X2ZhaWxfbXNnKCYjMzQ7VW5leHBlY3RlZCBodWdlIHBhZ2VcbiYjMzQ7KTsKIAlfX21hZHZpc2VfY29sbGFwc2UobXNnLCBwLCBucl9ocGFnZXMsIG9wcywgZXhwZWN0KTsKIH0KQEAgLTU1OCw3ICYjNDM7NTU4LDcgQEAgc3RhdGljIGJvb2wgd2FpdF9mb3Jfc2Nhbihjb25zdCBjaGFyICptc2csIGNoYXIgKnAsIGludCBucl9ocGFnZXMsCiAJaW50IHRpbWVvdXQgPSA2OyAvKiAzIHNlY29uZHMgKi8KIAogCS8qIFNhbml0eSBjaGVjayAqLwotCWlmICghb3BzLSZndDtjaGVja19odWdlKHAsIDApKQomIzQzOwlpZiAoIW9wcy0mZ3Q7Y2hlY2tfaHVnZShwLCAtbnJfaHBhZ2VzKSkKIAkJa3NmdF9leGl0X2ZhaWxfbXNnKCYjMzQ7VW5leHBlY3RlZCBodWdlIHBhZ2VcbiYjMzQ7KTsKIAogCW1hZHZpc2UocCwgbnJfaHBhZ2VzICogaHBhZ2VfcG1kX3NpemUsIE1BRFZfSFVHRVBBR0UpOwpAQCAtNjA1LDcgJiM0Mzs2MDUsNyBAQCBzdGF0aWMgdm9pZCBraHVnZXBhZ2VkX2NvbGxhcHNlKGNvbnN0IGNoYXIgKm1zZywgY2hhciAqcCwgaW50IG5yX2hwYWdlcywKIAlpZiAob3BzICE9ICZhbXA7X19hbm9uX29wcykKIAkJb3BzLSZndDtmYXVsdChwLCAwLCBucl9ocGFnZXMgKiBocGFnZV9wbWRfc2l6ZSk7CiAKLQlpZiAob3BzLSZndDtjaGVja19odWdlKHAsIGV4cGVjdCA/IG5yX2hwYWdlcyA6IDApKQomIzQzOwlpZiAob3BzLSZndDtjaGVja19odWdlKHAsIGV4cGVjdCA/IG5yX2hwYWdlcyA6IC1ucl9ocGFnZXMpKQogCQlzdWNjZXNzKCYjMzQ7T0smIzM0Oyk7CiAJZWxzZQogCQlmYWlsKCYjMzQ7RmFpbCYjMzQ7KTsKQEAgLTY0Myw3ICYjNDM7NjQzLDcgQEAgc3RhdGljIHZvaWQgYWxsb2NfYXRfZmF1bHQodm9pZCkKIAogCW1hZHZpc2UocCwgcGFnZV9zaXplLCBNQURWX0RPTlRORUVEKTsKIAlrc2Z0X3ByaW50X21zZygmIzM0O1NwbGl0IGh1Z2UgUE1EIG9uIE1BRFZfRE9OVE5FRUQuLi4mIzM0Oyk7Ci0JaWYgKGNoZWNrX2h1Z2VfYW5vbihwLCAwLCBocGFnZV9wbWRfc2l6ZSkpCiYjNDM7CWlmIChjaGVja19odWdlX2Fub24ocCwgLTEsIGhwYWdlX3BtZF9zaXplKSkKIAkJc3VjY2VzcygmIzM0O09LJiMzNDspOwogCWVsc2UKIAkJZmFpbCgmIzM0O0ZhaWwmIzM0Oyk7CkBAIC04MTUsNyAmIzQzOzgxNSw3IEBAIHN0YXRpYyB2b2lkIGNvbGxhcHNlX3NpbmdsZV9wdGVfZW50cnlfY29tcG91bmQoc3RydWN0IGNvbGxhcHNlX2NvbnRleHQgKmMsIHN0cnVjCiAJbWFkdmlzZShwLCBocGFnZV9wbWRfc2l6ZSwgTUFEVl9OT0hVR0VQQUdFKTsKIAlrc2Z0X3ByaW50X21zZygmIzM0O1NwbGl0IGh1Z2UgcGFnZSBsZWF2aW5nIHNpbmdsZSBQVEUgbWFwcGluZyBjb21wb3VuZCBwYWdlLi4uJiMzNDspOwogCW1hZHZpc2UocCAmIzQzOyBwYWdlX3NpemUsIGhwYWdlX3BtZF9zaXplIC0gcGFnZV9zaXplLCBNQURWX0RPTlRORUVEKTsKLQlpZiAob3BzLSZndDtjaGVja19odWdlKHAsIDApKQomIzQzOwlpZiAob3BzLSZndDtjaGVja19odWdlKHAsIC0xKSkKIAkJc3VjY2VzcygmIzM0O09LJiMzNDspOwogCWVsc2UKIAkJZmFpbCgmIzM0O0ZhaWwmIzM0Oyk7CkBAIC04MzYsNyAmIzQzOzgzNiw3IEBAIHN0YXRpYyB2b2lkIGNvbGxhcHNlX2Z1bGxfb2ZfY29tcG91bmQoc3RydWN0IGNvbGxhcHNlX2NvbnRleHQgKmMsIHN0cnVjdCBtZW1fb3BzCiAJa3NmdF9wcmludF9tc2coJiMzNDtTcGxpdCBodWdlIHBhZ2UgbGVhdmluZyBzaW5nbGUgUFRFIHBhZ2UgdGFibGUgZnVsbCBvZiBjb21wb3VuZCBwYWdlcy4uLiYjMzQ7KTsKIAltYWR2aXNlKHAsIHBhZ2Vfc2l6ZSwgTUFEVl9OT0hVR0VQQUdFKTsKIAltYWR2aXNlKHAsIGhwYWdlX3BtZF9zaXplLCBNQURWX05PSFVHRVBBR0UpOwotCWlmIChvcHMtJmd0O2NoZWNrX2h1Z2UocCwgMCkpCiYjNDM7CWlmIChvcHMtJmd0O2NoZWNrX2h1Z2UocCwgLTEpKQogCQlzdWNjZXNzKCYjMzQ7T0smIzM0Oyk7CiAJZWxzZQogCQlmYWlsKCYjMzQ7RmFpbCYjMzQ7KTsKQEAgLTkwMyw3ICYjNDM7OTAzLDcgQEAgc3RhdGljIHZvaWQgY29sbGFwc2VfZm9yayhzdHJ1Y3QgY29sbGFwc2VfY29udGV4dCAqYywgc3RydWN0IG1lbV9vcHMgKm9wcykKIAogCWtzZnRfcHJpbnRfbXNnKCYjMzQ7QWxsb2NhdGUgc21hbGwgcGFnZS4uLiYjMzQ7KTsKIAlvcHMtJmd0O2ZhdWx0KHAsIDAsIHBhZ2Vfc2l6ZSk7Ci0JaWYgKG9wcy0mZ3Q7Y2hlY2tfaHVnZShwLCAwKSkKJiM0MzsJaWYgKG9wcy0mZ3Q7Y2hlY2tfaHVnZShwLCAtMSkpCiAJCXN1Y2Nlc3MoJiMzNDtPSyYjMzQ7KTsKIAllbHNlCiAJCWZhaWwoJiMzNDtGYWlsJiMzNDspOwpAQCAtOTExLDcgJiM0Mzs5MTEsNyBAQCBzdGF0aWMgdm9pZCBjb2xsYXBzZV9mb3JrKHN0cnVjdCBjb2xsYXBzZV9jb250ZXh0ICpjLCBzdHJ1Y3QgbWVtX29wcyAqb3BzKQogCWtzZnRfcHJpbnRfbXNnKCYjMzQ7U2hhcmUgc21hbGwgcGFnZSBvdmVyIGZvcmsoKS4uLiYjMzQ7KTsKIAlpZiAoIWZvcmsoKSkgewogCQkvKiBEbyBub3QgdG91Y2ggc2V0dGluZ3Mgb24gY2hpbGQgZXhpdCAqLwotCQlpZiAob3BzLSZndDtjaGVja19odWdlKHAsIDApKQomIzQzOwkJaWYgKG9wcy0mZ3Q7Y2hlY2tfaHVnZShwLCAtMSkpCiAJCQlzdWNjZXNzKCYjMzQ7T0smIzM0Oyk7CiAJCWVsc2UKIAkJCWZhaWwoJiMzNDtGYWlsJiMzNDspOwpAQCAtOTI5LDcgJiM0Mzs5MjksNyBAQCBzdGF0aWMgdm9pZCBjb2xsYXBzZV9mb3JrKHN0cnVjdCBjb2xsYXBzZV9jb250ZXh0ICpjLCBzdHJ1Y3QgbWVtX29wcyAqb3BzKQogCWV4aXRfc3RhdHVzID0gV0VYSVRTVEFUVVMod3N0YXR1cyk7CiAKIAlrc2Z0X3ByaW50X21zZygmIzM0O0NoZWNrIGlmIHBhcmVudCBzdGlsbCBoYXMgc21hbGwgcGFnZS4uLiYjMzQ7KTsKLQlpZiAob3BzLSZndDtjaGVja19odWdlKHAsIDApKQomIzQzOwlpZiAob3BzLSZndDtjaGVja19odWdlKHAsIC0xKSkKIAkJc3VjY2VzcygmIzM0O09LJiMzNDspOwogCWVsc2UKIAkJZmFpbCgmIzM0O0ZhaWwmIzM0Oyk7CkBAIC05NTUsNyAmIzQzOzk1NSw3IEBAIHN0YXRpYyB2b2lkIGNvbGxhcHNlX2ZvcmtfY29tcG91bmQoc3RydWN0IGNvbGxhcHNlX2NvbnRleHQgKmMsIHN0cnVjdCBtZW1fb3BzICpvCiAJCWtzZnRfcHJpbnRfbXNnKCYjMzQ7U3BsaXQgaHVnZSBwYWdlIFBNRCBpbiBjaGlsZCBwcm9jZXNzLi4uJiMzNDspOwogCQltYWR2aXNlKHAsIHBhZ2Vfc2l6ZSwgTUFEVl9OT0hVR0VQQUdFKTsKIAkJbWFkdmlzZShwLCBocGFnZV9wbWRfc2l6ZSwgTUFEVl9OT0hVR0VQQUdFKTsKLQkJaWYgKG9wcy0mZ3Q7Y2hlY2tfaHVnZShwLCAwKSkKJiM0MzsJCWlmIChvcHMtJmd0O2NoZWNrX2h1Z2UocCwgLTEpKQogCQkJc3VjY2VzcygmIzM0O09LJiMzNDspOwogCQllbHNlCiAJCQlmYWlsKCYjMzQ7RmFpbCYjMzQ7KTsKQEAgLTEwMDMsNyAmIzQzOzEwMDMsNyBAQCBzdGF0aWMgdm9pZCBjb2xsYXBzZV9tYXhfcHRlc19zaGFyZWQoc3RydWN0IGNvbGxhcHNlX2NvbnRleHQgKmMsIHN0cnVjdCBtZW1fb3BzCiAJCWtzZnRfcHJpbnRfbXNnKCYjMzQ7VHJpZ2dlciBDb1cgb24gcGFnZSAlZCBvZiAlZC4uLiYjMzQ7LAogCQkJCWhwYWdlX3BtZF9uciAtIG1heF9wdGVzX3NoYXJlZCAtIDEsIGhwYWdlX3BtZF9ucik7CiAJCW9wcy0mZ3Q7ZmF1bHQocCwgMCwgKGhwYWdlX3BtZF9uciAtIG1heF9wdGVzX3NoYXJlZCAtIDEpICogcGFnZV9zaXplKTsKLQkJaWYgKG9wcy0mZ3Q7Y2hlY2tfaHVnZShwLCAwKSkKJiM0MzsJCWlmIChvcHMtJmd0O2NoZWNrX2h1Z2UocCwgLTEpKQogCQkJc3VjY2VzcygmIzM0O09LJiMzNDspOwogCQllbHNlCiAJCQlmYWlsKCYjMzQ7RmFpbCYjMzQ7KTsKQEAgLTEwMTYsNyAmIzQzOzEwMTYsNyBAQCBzdGF0aWMgdm9pZCBjb2xsYXBzZV9tYXhfcHRlc19zaGFyZWQoc3RydWN0IGNvbGxhcHNlX2NvbnRleHQgKmMsIHN0cnVjdCBtZW1fb3BzCiAJCQkgICAgICAgaHBhZ2VfcG1kX25yIC0gbWF4X3B0ZXNfc2hhcmVkLCBocGFnZV9wbWRfbnIpOwogCQkJb3BzLSZndDtmYXVsdChwLCAwLCAoaHBhZ2VfcG1kX25yIC0gbWF4X3B0ZXNfc2hhcmVkKSAqCiAJCQkJICAgIHBhZ2Vfc2l6ZSk7Ci0JCQlpZiAob3BzLSZndDtjaGVja19odWdlKHAsIDApKQomIzQzOwkJCWlmIChvcHMtJmd0O2NoZWNrX2h1Z2UocCwgLTEpKQogCQkJCXN1Y2Nlc3MoJiMzNDtPSyYjMzQ7KTsKIAkJCWVsc2UKIAkJCQlmYWlsKCYjMzQ7RmFpbCYjMzQ7KTsKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3NwbGl0X2h1Z2VfcGFnZV90ZXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9zcGxpdF9odWdlX3BhZ2VfdGVzdC5jCmluZGV4IDMyYjk5MTQ3MmY3NDQuLjRmY2QzMzBjZjA3MjYgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3NwbGl0X2h1Z2VfcGFnZV90ZXN0LmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vc3BsaXRfaHVnZV9wYWdlX3Rlc3QuYwpAQCAtMzAzLDYgJiM0MzszMDMsOSBAQCBzdGF0aWMgdm9pZCB2ZXJpZnlfcnNzX2Fub25fc3BsaXRfaHVnZV9wYWdlX2FsbF96ZXJvZXMoY2hhciAqb25lX3BhZ2UsIGludCBucl9ocAogCWlmICghcnNzX2Fub25fYmVmb3JlKQogCQlrc2Z0X2V4aXRfZmFpbF9tc2coJiMzNDtObyBSc3NBbm9uIGlzIGFsbG9jYXRlZCBiZWZvcmUgc3BsaXRcbiYjMzQ7KTsKIAomIzQzOwkvKiBQcmV2ZW50IGtodWdlcGFnZWQgZnJvbSBjb2xsYXBzaW5nIHRoZSBwYWdlcy4gKi8KJiM0MzsJbWFkdmlzZShvbmVfcGFnZSwgbGVuLCBNQURWX05PSFVHRVBBR0UpOwomIzQzOwogCS8qIHNwbGl0IGFsbCBUSFBzICovCiAJd3JpdGVfZGVidWdmcyhQSURfRk1ULCBnZXRwaWQoKSwgKHVpbnQ2NF90KW9uZV9wYWdlLAogCQkgICAgICAodWludDY0X3Qpb25lX3BhZ2UgJiM0MzsgbGVuLCAwKTsKQEAgLTMxMSw3ICYjNDM7MzE0LDcgQEAgc3RhdGljIHZvaWQgdmVyaWZ5X3Jzc19hbm9uX3NwbGl0X2h1Z2VfcGFnZV9hbGxfemVyb2VzKGNoYXIgKm9uZV9wYWdlLCBpbnQgbnJfaHAKIAkJaWYgKG9uZV9wYWdlW2ldICE9IChjaGFyKTApCiAJCQlrc2Z0X2V4aXRfZmFpbF9tc2coJiMzNDslbGQgYnl0ZSBjb3JydXB0ZWRcbiYjMzQ7LCBpKTsKIAotCWlmICghY2hlY2tfaHVnZV9hbm9uKG9uZV9wYWdlLCAwLCBwbWRfcGFnZXNpemUpKQomIzQzOwlpZiAoIWNoZWNrX2h1Z2VfYW5vbihvbmVfcGFnZSwgLW5yX2hwYWdlcywgcG1kX3BhZ2VzaXplKSkKIAkJa3NmdF9leGl0X2ZhaWxfbXNnKCYjMzQ7U3RpbGwgQW5vbkh1Z2VQYWdlcyBub3Qgc3BsaXRcbiYjMzQ7KTsKIAogCXJzc19hbm9uX2FmdGVyID0gcnNzX2Fub24oKTsKQEAgLTM1MCw2ICYjNDM7MzUzLDkgQEAgc3RhdGljIHZvaWQgc3BsaXRfcG1kX3RocF90b19vcmRlcihpbnQgb3JkZXIpCiAJaWYgKCFjaGVja19odWdlX2Fub24ob25lX3BhZ2UsIDQsIHBtZF9wYWdlc2l6ZSkpCiAJCWtzZnRfZXhpdF9mYWlsX21zZygmIzM0O05vIFRIUCBpcyBhbGxvY2F0ZWRcbiYjMzQ7KTsKIAomIzQzOwkvKiBQcmV2ZW50IGtodWdlcGFnZWQgZnJvbSBjb2xsYXBzaW5nIHRoZSBwYWdlcy4gKi8KJiM0MzsJbWFkdmlzZShvbmVfcGFnZSwgbGVuLCBNQURWX05PSFVHRVBBR0UpOwomIzQzOwogCS8qIHNwbGl0IGFsbCBUSFBzICovCiAJd3JpdGVfZGVidWdmcyhQSURfRk1ULCBnZXRwaWQoKSwgKHVpbnQ2NF90KW9uZV9wYWdlLAogCQkodWludDY0X3Qpb25lX3BhZ2UgJiM0MzsgbGVuLCBvcmRlcik7CkBAIC0zNjYsNyAmIzQzOzM3Miw3IEBAIHN0YXRpYyB2b2lkIHNwbGl0X3BtZF90aHBfdG9fb3JkZXIoaW50IG9yZGVyKQogCQkJCQkgICAocG1kX29yZGVyICYjNDM7IDEpKSkKIAkJa3NmdF9leGl0X2ZhaWxfbXNnKCYjMzQ7VW5leHBlY3RlZCBUSFAgc3BsaXRcbiYjMzQ7KTsKIAotCWlmICghY2hlY2tfaHVnZV9hbm9uKG9uZV9wYWdlLCAwLCBwbWRfcGFnZXNpemUpKQomIzQzOwlpZiAoIWNoZWNrX2h1Z2VfYW5vbihvbmVfcGFnZSwgLTQsIHBtZF9wYWdlc2l6ZSkpCiAJCWtzZnRfZXhpdF9mYWlsX21zZygmIzM0O1N0aWxsIEFub25IdWdlUGFnZXMgbm90IHNwbGl0XG4mIzM0Oyk7CiAKIAlrc2Z0X3Rlc3RfcmVzdWx0X3Bhc3MoJiMzNDtTcGxpdCBodWdlIHBhZ2VzIHRvIG9yZGVyICVkIHN1Y2Nlc3NmdWxcbiYjMzQ7LCBvcmRlcik7CkBAIC00MzYsNiAmIzQzOzQ0Miw5IEBAIHN0YXRpYyB2b2lkIHNwbGl0X3B0ZV9tYXBwZWRfdGhwKHZvaWQpCiAJCWdvdG8gb3V0OwogCX0KIAomIzQzOwkvKiBQcmV2ZW50IGtodWdlcGFnZWQgZnJvbSBjb2xsYXBzaW5nIHRoZSBwYWdlcy4gKi8KJiM0MzsJbWFkdmlzZSh0aHBfYXJlYSwgdGhwX2FyZWFfc2l6ZSwgTUFEVl9OT0hVR0VQQUdFKTsKJiM0MzsKIAkvKiBTcGxpdCBhbGwgVEhQcyB0aHJvdWdoIHRoZSByZW1hcHBlZCBwYWdlcy4gKi8KIAl3cml0ZV9kZWJ1Z2ZzKFBJRF9GTVQsIGdldHBpZCgpLCAodWludDY0X3QpcGFnZV9hcmVhLAogCQkgICAgICAodWludDY0X3QpcGFnZV9hcmVhICYjNDM7IHBhZ2VfYXJlYV9zaXplLCAwKTsKQEAgLTY2NSw2ICYjNDM7Njc0LDggQEAgc3RhdGljIGludCBjcmVhdGVfcGFnZWNhY2hlX3RocF9hbmRfZmQoY29uc3QgY2hhciAqdGVzdGZpbGUsIHNpemVfdCBmZF9zaXplLAogCQlrc2Z0X3Rlc3RfcmVzdWx0X3NraXAoJiMzNDtQYWdlY2FjaGUgZm9saW8gc3BsaXQgc2tpcHBlZFxuJiMzNDspOwogCQlyZXR1cm4gLTI7CiAJfQomIzQzOwkvKiBQcmV2ZW50IGtodWdlcGFnZWQgZnJvbSBjb2xsYXBzaW5nIHRoZSBwYWdlcy4gKi8KJiM0MzsJbWFkdmlzZSgqYWRkciwgZmRfc2l6ZSwgTUFEVl9OT0hVR0VQQUdFKTsKIAlyZXR1cm4gMDsKIGVycl9vdXRfY2xvc2U6CiAJY2xvc2UoKmZkKTsKQEAgLTczNSw3ICYjNDM7NzQ2LDcgQEAgc3RhdGljIHZvaWQgc3BsaXRfdGhwX2luX3BhZ2VjYWNoZV90b19vcmRlcl9hdChzaXplX3QgZmRfc2l6ZSwKIAkJZ290byBvdXQ7CiAJfQogCi0JaWYgKCFjaGVja19odWdlX2ZpbGUoYWRkciwgMCwgcG1kX3BhZ2VzaXplKSkgewomIzQzOwlpZiAoIWNoZWNrX2h1Z2VfZmlsZShhZGRyLCAtKGZkX3NpemUgLyBwbWRfcGFnZXNpemUpLCBwbWRfcGFnZXNpemUpKSB7CiAJCWtzZnRfcHJpbnRfbXNnKCYjMzQ7U3RpbGwgRmlsZVBtZE1hcHBlZCBub3Qgc3BsaXRcbiYjMzQ7KTsKIAkJZXJyID0gRVhJVF9GQUlMVVJFOwogCQlnb3RvIG91dDsKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ZtX3V0aWwuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ZtX3V0aWwuYwppbmRleCAzMTFmYzViNDUxM2ViLi4xNjZkNWQ3OTI4OWYzIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS92bV91dGlsLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdm1fdXRpbC5jCkBAIC0xNCw2ICYjNDM7MTQsOCBAQAogI2RlZmluZSBQTURfU0laRV9GSUxFX1BBVEggJiMzNDsvc3lzL2tlcm5lbC9tbS90cmFuc3BhcmVudF9odWdlcGFnZS9ocGFnZV9wbWRfc2l6ZSYjMzQ7CiAjZGVmaW5lIFNNQVBfRklMRV9QQVRIICYjMzQ7L3Byb2Mvc2VsZi9zbWFwcyYjMzQ7CiAjZGVmaW5lIFNUQVRVU19GSUxFX1BBVEggJiMzNDsvcHJvYy9zZWxmL3N0YXR1cyYjMzQ7CiYjNDM7I2RlZmluZSBQQUdFTUFQX0ZJTEVfUEFUSCAmIzM0Oy9wcm9jL3NlbGYvcGFnZW1hcCYjMzQ7CiYjNDM7I2RlZmluZSBLUEFHRUZMQUdTX0ZJTEVfUEFUSCAmIzM0Oy9wcm9jL2twYWdlZmxhZ3MmIzM0OwogI2RlZmluZSBNQVhfTElORV9MRU5HVEggNTAwCiAKIHVuc2lnbmVkIGludCBfX3BhZ2Vfc2l6ZTsKQEAgLTIyOSwzNyAmIzQzOzIzMSwxMjggQEAgY2hhciAqX19nZXRfc21hcF9lbnRyeSh2b2lkICphZGRyLCBjb25zdCBjaGFyICpwYXR0ZXJuLCBjaGFyICpidWYsIHNpemVfdCBsZW4pCiAJcmV0dXJuIGVudHJ5OwogfQogCi1ib29sIF9fY2hlY2tfaHVnZSh2b2lkICphZGRyLCBjaGFyICpwYXR0ZXJuLCBpbnQgbnJfaHBhZ2VzLAotCQkgIHVpbnQ2NF90IGhwYWdlX3NpemUpCi17Ci0JY2hhciBidWZmZXJbTUFYX0xJTkVfTEVOR1RIXTsKLQl1aW50NjRfdCB0aHAgPSAtMTsKLQljaGFyICplbnRyeTsKLQotCWVudHJ5ID0gX19nZXRfc21hcF9lbnRyeShhZGRyLCBwYXR0ZXJuLCBidWZmZXIsIHNpemVvZihidWZmZXIpKTsKLQlpZiAoIWVudHJ5KQotCQlnb3RvIGVycl9vdXQ7Ci0KLQlpZiAoc3NjYW5mKGVudHJ5LCAmIzM0OyU5JiMzNDsgU0NOdTY0ICYjMzQ7IGtCJiMzNDssICZhbXA7dGhwKSAhPSAxKQotCQlrc2Z0X2V4aXRfZmFpbF9tc2coJiMzNDtSZWFkaW5nIHNtYXAgZXJyb3JcbiYjMzQ7KTsKLQotZXJyX291dDoKLQlyZXR1cm4gdGhwID09IChucl9ocGFnZXMgKiAoaHBhZ2Vfc2l6ZSAmZ3Q7Jmd0OyAxMCkpOwotfQotCiBib29sIGNoZWNrX2h1Z2VfYW5vbih2b2lkICphZGRyLCBpbnQgbnJfaHBhZ2VzLCB1aW50NjRfdCBocGFnZV9zaXplKQogewotCXJldHVybiBfX2NoZWNrX2h1Z2UoYWRkciwgJiMzNDtBbm9uSHVnZVBhZ2VzOiAmIzM0OywgbnJfaHBhZ2VzLCBocGFnZV9zaXplKTsKJiM0MzsJaW50IGksIHBhZ2VtYXBfZmQsIG5yID0gMDsKJiM0MzsJdWludDY0X3QgY2F0ZWdvcmllczsKJiM0MzsJYm9vbCBleHBlY3RfaHVnZTsKJiM0MzsKJiM0MzsJaWYgKG5yX2hwYWdlcyA9PSAwIHx8IGhwYWdlX3NpemUgPT0gMCkKJiM0MzsJCXJldHVybiBmYWxzZTsKJiM0MzsKJiM0MzsJaWYgKG5yX2hwYWdlcyAmbHQ7IDApIHsKJiM0MzsJCW5yX2hwYWdlcyA9IC1ucl9ocGFnZXM7CiYjNDM7CQlleHBlY3RfaHVnZSA9IGZhbHNlOwomIzQzOwl9IGVsc2UKJiM0MzsJCWV4cGVjdF9odWdlID0gdHJ1ZTsKJiM0MzsKJiM0MzsJcGFnZW1hcF9mZCA9IG9wZW4oUEFHRU1BUF9GSUxFX1BBVEgsIE9fUkRPTkxZKTsKJiM0MzsJaWYgKHBhZ2VtYXBfZmQgJmx0OyAwKQomIzQzOwkJa3NmdF9leGl0X2ZhaWxfbXNnKCYjMzQ7b3BlbiBwYWdlbWFwOiAlc1xuJiMzNDssIHN0cmVycm9yKGVycm5vKSk7CiYjNDM7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBucl9ocGFnZXM7IGkmIzQzOyYjNDM7LCBhZGRyICYjNDM7PSBocGFnZV9zaXplKSB7CiYjNDM7CQljYXRlZ29yaWVzID0gcGFnZW1hcF9zY2FuX2dldF9jYXRlZ29yaWVzKHBhZ2VtYXBfZmQsIGFkZHIpOwomIzQzOwkJaWYgKCEoY2F0ZWdvcmllcyAmYW1wOyBQQUdFX0lTX0hVR0UpKQomIzQzOwkJCWNvbnRpbnVlOwomIzQzOwkJaWYgKGNhdGVnb3JpZXMgJmFtcDsgUEFHRV9JU19GSUxFKQomIzQzOwkJCWNvbnRpbnVlOwomIzQzOwkJbnImIzQzOyYjNDM7OwomIzQzOwl9CiYjNDM7CiYjNDM7CWNsb3NlKHBhZ2VtYXBfZmQpOwomIzQzOwlyZXR1cm4gZXhwZWN0X2h1Z2UgPyBuciA9PSBucl9ocGFnZXMgOiBuciA9PSAwOwogfQogCiBib29sIGNoZWNrX2h1Z2VfZmlsZSh2b2lkICphZGRyLCBpbnQgbnJfaHBhZ2VzLCB1aW50NjRfdCBocGFnZV9zaXplKQogewotCXJldHVybiBfX2NoZWNrX2h1Z2UoYWRkciwgJiMzNDtGaWxlUG1kTWFwcGVkOiYjMzQ7LCBucl9ocGFnZXMsIGhwYWdlX3NpemUpOwomIzQzOwlpbnQgaSwgcGFnZW1hcF9mZCwga3BmX2ZkLCBuciA9IDA7CiYjNDM7CXVuc2lnbmVkIGxvbmcgcGZuOwomIzQzOwl1aW50NjRfdCBjYXRlZ29yaWVzLCBrcGY7CiYjNDM7CWJvb2wgZXhwZWN0X2h1Z2U7CiYjNDM7CiYjNDM7CWlmIChucl9ocGFnZXMgPT0gMCB8fCBocGFnZV9zaXplID09IDApCiYjNDM7CQlyZXR1cm4gZmFsc2U7CiYjNDM7CiYjNDM7CWlmIChucl9ocGFnZXMgJmx0OyAwKSB7CiYjNDM7CQlucl9ocGFnZXMgPSAtbnJfaHBhZ2VzOwomIzQzOwkJZXhwZWN0X2h1Z2UgPSBmYWxzZTsKJiM0MzsJfSBlbHNlCiYjNDM7CQlleHBlY3RfaHVnZSA9IHRydWU7CiYjNDM7CiYjNDM7CXBhZ2VtYXBfZmQgPSBvcGVuKFBBR0VNQVBfRklMRV9QQVRILCBPX1JET05MWSk7CiYjNDM7CWlmIChwYWdlbWFwX2ZkICZsdDsgMCkKJiM0MzsJCWtzZnRfZXhpdF9mYWlsX21zZygmIzM0O29wZW4gcGFnZW1hcDogJXNcbiYjMzQ7LCBzdHJlcnJvcihlcnJubykpOwomIzQzOwomIzQzOwlrcGZfZmQgPSBvcGVuKEtQQUdFRkxBR1NfRklMRV9QQVRILCBPX1JET05MWSk7CiYjNDM7CWlmIChrcGZfZmQgJmx0OyAwKQomIzQzOwkJa3NmdF9leGl0X2ZhaWxfbXNnKCYjMzQ7b3BlbiBrcGFnZWZsYWdzOiAlc1xuJiMzNDssIHN0cmVycm9yKGVycm5vKSk7CiYjNDM7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBucl9ocGFnZXM7IGkmIzQzOyYjNDM7LCBhZGRyICYjNDM7PSBocGFnZV9zaXplKSB7CiYjNDM7CQljYXRlZ29yaWVzID0gcGFnZW1hcF9zY2FuX2dldF9jYXRlZ29yaWVzKHBhZ2VtYXBfZmQsIGFkZHIpOwomIzQzOwkJcGZuID0gcGFnZW1hcF9nZXRfcGZuKHBhZ2VtYXBfZmQsIGFkZHIpOwomIzQzOwkJaWYgKHBmbiA9PSAtMVVMKQomIzQzOwkJCWNvbnRpbnVlOwomIzQzOwkJaWYgKHBhZ2VmbGFnc19nZXQocGZuLCBrcGZfZmQsICZhbXA7a3BmKSkKJiM0MzsJCQlrc2Z0X2V4aXRfZmFpbF9tc2coJiMzNDtyZWFkIGtwYWdlZmxhZ3M6ICVzXG4mIzM0Oywgc3RyZXJyb3IoZXJybm8pKTsKJiM0MzsJCWlmICghKGNhdGVnb3JpZXMgJmFtcDsgUEFHRV9JU19IVUdFKSkKJiM0MzsJCQljb250aW51ZTsKJiM0MzsJCWlmICghKGNhdGVnb3JpZXMgJmFtcDsgUEFHRV9JU19GSUxFKSkKJiM0MzsJCQljb250aW51ZTsKJiM0MzsJCWlmIChrcGYgJmFtcDsgS1BGX1NXQVBCQUNLRUQpCiYjNDM7CQkJY29udGludWU7CiYjNDM7CQluciYjNDM7JiM0Mzs7CiYjNDM7CX0KJiM0MzsKJiM0MzsJY2xvc2UocGFnZW1hcF9mZCk7CiYjNDM7CWNsb3NlKGtwZl9mZCk7CiYjNDM7CiYjNDM7CXJldHVybiBleHBlY3RfaHVnZSA/IG5yID09IG5yX2hwYWdlcyA6IG5yID09IDA7CiB9CiAKIGJvb2wgY2hlY2tfaHVnZV9zaG1lbSh2b2lkICphZGRyLCBpbnQgbnJfaHBhZ2VzLCB1aW50NjRfdCBocGFnZV9zaXplKQogewotCXJldHVybiBfX2NoZWNrX2h1Z2UoYWRkciwgJiMzNDtTaG1lbVBtZE1hcHBlZDomIzM0OywgbnJfaHBhZ2VzLCBocGFnZV9zaXplKTsKJiM0MzsJaW50IGksIHBhZ2VtYXBfZmQsIGtwZl9mZCwgbnIgPSAwOwomIzQzOwl1bnNpZ25lZCBsb25nIHBmbjsKJiM0MzsJdWludDY0X3QgY2F0ZWdvcmllcywga3BmOwomIzQzOwlib29sIGV4cGVjdF9odWdlOwomIzQzOwomIzQzOwlpZiAobnJfaHBhZ2VzID09IDAgfHwgaHBhZ2Vfc2l6ZSA9PSAwKQomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwomIzQzOwlpZiAobnJfaHBhZ2VzICZsdDsgMCkgewomIzQzOwkJbnJfaHBhZ2VzID0gLW5yX2hwYWdlczsKJiM0MzsJCWV4cGVjdF9odWdlID0gdHJ1ZTsKJiM0MzsJfSBlbHNlCiYjNDM7CQlleHBlY3RfaHVnZSA9IGZhbHNlOwomIzQzOwomIzQzOwlwYWdlbWFwX2ZkID0gb3BlbihQQUdFTUFQX0ZJTEVfUEFUSCwgT19SRE9OTFkpOwomIzQzOwlpZiAocGFnZW1hcF9mZCAmbHQ7IDApCiYjNDM7CQlrc2Z0X2V4aXRfZmFpbF9tc2coJiMzNDtvcGVuIHBhZ2VtYXA6ICVzXG4mIzM0Oywgc3RyZXJyb3IoZXJybm8pKTsKJiM0MzsKJiM0MzsJa3BmX2ZkID0gb3BlbihLUEFHRUZMQUdTX0ZJTEVfUEFUSCwgT19SRE9OTFkpOwomIzQzOwlpZiAoa3BmX2ZkICZsdDsgMCkKJiM0MzsJCWtzZnRfZXhpdF9mYWlsX21zZygmIzM0O29wZW4ga3BhZ2VmbGFnczogJXNcbiYjMzQ7LCBzdHJlcnJvcihlcnJubykpOwomIzQzOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgbnJfaHBhZ2VzOyBpJiM0MzsmIzQzOywgYWRkciAmIzQzOz0gaHBhZ2Vfc2l6ZSkgewomIzQzOwkJY2F0ZWdvcmllcyA9IHBhZ2VtYXBfc2Nhbl9nZXRfY2F0ZWdvcmllcyhwYWdlbWFwX2ZkLCBhZGRyKTsKJiM0MzsJCXBmbiA9IHBhZ2VtYXBfZ2V0X3BmbihwYWdlbWFwX2ZkLCBhZGRyKTsKJiM0MzsJCWlmIChwZm4gPT0gLTFVTCkKJiM0MzsJCQljb250aW51ZTsKJiM0MzsJCWlmIChwYWdlZmxhZ3NfZ2V0KHBmbiwga3BmX2ZkLCAmYW1wO2twZikpCiYjNDM7CQkJa3NmdF9leGl0X2ZhaWxfbXNnKCYjMzQ7cmVhZCBrcGFnZWZsYWdzOiAlc1xuJiMzNDssIHN0cmVycm9yKGVycm5vKSk7CiYjNDM7CQlpZiAoIShjYXRlZ29yaWVzICZhbXA7IFBBR0VfSVNfSFVHRSkpCiYjNDM7CQkJY29udGludWU7CiYjNDM7CQlpZiAoIShjYXRlZ29yaWVzICZhbXA7IFBBR0VfSVNfRklMRSkpCiYjNDM7CQkJY29udGludWU7CiYjNDM7CQlpZiAoIShrcGYgJmFtcDsgS1BGX1NXQVBCQUNLRUQpKQomIzQzOwkJCWNvbnRpbnVlOwomIzQzOwkJbnImIzQzOyYjNDM7OwomIzQzOwl9CiYjNDM7CiYjNDM7CWNsb3NlKHBhZ2VtYXBfZmQpOwomIzQzOwljbG9zZShrcGZfZmQpOwomIzQzOwomIzQzOwlyZXR1cm4gZXhwZWN0X2h1Z2UgPyBuciA9PSBucl9ocGFnZXMgOiBuciA9PSAwOwogfQogCiBpbnQ2NF90IGFsbG9jYXRlX3RyYW5zaHVnZSh2b2lkICpwdHIsIGludCBwYWdlbWFwX2ZkKQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdm1fdXRpbC5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdm1fdXRpbC5oCmluZGV4IGVhOGZjOGZkZjBlYjAuLjBhMTYyN2YzNmVmYzMgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ZtX3V0aWwuaAomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS92bV91dGlsLmgKQEAgLTE4LDYgJiM0MzsxOCw3IEBACiAjZGVmaW5lIFBNX1NXQVAgICAgICAgICAgICAgICAgICAgICAgIEJJVF9VTEwoNjIpCiAjZGVmaW5lIFBNX1BSRVNFTlQgICAgICAgICAgICAgICAgICAgIEJJVF9VTEwoNjMpCiAKJiM0MzsjZGVmaW5lIEtQRl9TV0FQQkFDS0VEICAgICAgICAgICAgICAgIEJJVF9VTEwoMTQpCiAjZGVmaW5lIEtQRl9DT01QT1VORF9IRUFEICAgICAgICAgICAgIEJJVF9VTEwoMTUpCiAjZGVmaW5lIEtQRl9DT01QT1VORF9UQUlMICAgICAgICAgICAgIEJJVF9VTEwoMTYpCiAjZGVmaW5lIEtQRl9IV1BPSVNPTiAgICAgICAgICAgICAgICAgIEJJVF9VTEwoMTkpCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIwIDE5OjQ4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDcyNjgKCQkJCQkJCW91dHB1dDogODQKCQkJCQkJCXRob3VnaHRzOiAzMDUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQXNzZXNzaW5nIHRoZSBGdXp6aW5nIEltcGFjdCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBUaGlzIHBhdGNoIGlzIHRvdWNoaW5nIGZpbGVzIHdpdGhpbiBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vYC4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIHNlZWluZyBjaGFuZ2VzIGluIGBraHVnZXBhZ2VkLmNgLCBgc3BsaXRfaHVnZV9wYWdlX3Rlc3QuY2AsIGB2bV91dGlsLmNgLCBhbmQgYHZtX3V0aWwuaGAuIFJpZ2h0IG9mZiB0aGUgYmF0LCB0aGVzZSBhcmUgYWxsIHNlbGZ0ZXN0cyByZWxhdGVkIHRvIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0uIFRoYXQmIzM5O3MgZ29vZDsgaXQga2VlcHMgaXQgc29tZXdoYXQgY29udGFpbmVkLgoKTm93LCBhIGNyaXRpY2FsIHBvaW50IGhlcmUg4oCTIGFuZCBJJiMzOTttIHJlYWxseSBtYWtpbmcgc3VyZSB0byBuYWlsIHRoaXMgZG93biDigJMgdGhpcyBwYXRjaCBpc24mIzM5O3QgdG91Y2hpbmcgYW55IG9mIHRoZSBjb3JlIGtlcm5lbCBjb2RlLCBhbnkgZHJpdmVycywgb3IgYW55IGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBzdHVmZi4gSXQmIzM5O3Mgc29sZWx5IGNvbmZpbmVkIHRvIHRoZSBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYCBkaXJlY3RvcnkuIE5vIHJlYWwgbG9naWMgaXMgZ2V0dGluZyBjaGFuZ2VkLiBKdXN0IGRvdWJsZSBjaGVja2luZy4uLiB5dXAsIHRob3NlIGFyZSBhbGwgdGhlIGZpbGVzLgoKR2l2ZW4gdGhhdCwgbXkgY29uY2x1c2lvbiBpcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkLiBTaW5jZSB0aGlzIHBhdGNoICpvbmx5KiBtb2RpZmllcyBzZWxmdGVzdHMsIGl0JiMzOTtzIG5vdCBpbnRyb2R1Y2luZyBhbnkgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCB3b3VsZCB3YXJyYW50IGZ1enppbmcuIFdlJiMzOTtyZSBub3QgZ2V0dGluZyBhbnkgbmV3IGNvZGUgcGF0aHMgb3IgbG9naWMgdGhhdCBuZWVkIHRvIGJlIHBva2VkIGF0LiBTbywgSSB3aWxsIHJldHVybiBgV29ydGhGdXp6aW5nPWZhbHNlYC4gVGhlIHJlYXNvbmluZyBpcyBjbGVhcjogdGhlIGNoYW5nZXMgYXJlIGlzb2xhdGVkIHRvIHNlbGZ0ZXN0cywgYW5kIHRoZXJlJiMzOTtzIG5vIGZ1bmN0aW9uYWwga2VybmVsIGxvZ2ljIGludm9sdmVkLiBUaGF0JiMzOTtzIHRoZSByZXN1bHQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjAgMTk6NDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIG1lbW9yeSBtYW5hZ2VtZW50IHNlbGZ0ZXN0cyBpbiB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS8gYW5kIGRvZXMgbm90IG1ha2UgYW55IGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUgY29yZSBrZXJuZWwsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZSBjb2RlLiBUaGVyZWZvcmUsIGl0IGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IGtlcm5lbCBsb2dpYyB0aGF0IHJlcXVpcmVzIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIG1lbW9yeSBtYW5hZ2VtZW50IHNlbGZ0ZXN0cyBpbiB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS8gYW5kIGRvZXMgbm90IG1ha2UgYW55IGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUgY29yZSBrZXJuZWwsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZSBjb2RlLiBUaGVyZWZvcmUsIGl0IGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IGtlcm5lbCBsb2dpYyB0aGF0IHJlcXVpcmVzIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIwIDE5OjQ4PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0yMFQxOTo0ODo0MC42NTg5OTgxMDlaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5NzM4MjkzOTgyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggb25seSBtb2RpZmllcyBtZW1vcnkgbWFuYWdlbWVudCBzZWxmdGVzdHMgaW4gdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vIGFuZCBkb2VzIG5vdCBtYWtlIGFueSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGNvcmUga2VybmVsLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmUgY29kZS4gVGhlcmVmb3JlLCBpdCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBrZXJuZWwgbG9naWMgdGhhdCByZXF1aXJlcyBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjBUMTk6NDg6NDAuNjU5MDA1MzU5WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDI5NDc3MDA0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgMWNiNTVmYTk4MmZiZGUzZTM2ZGM2MDEwYjFlZTc2ZDlmZDMxYzI3NFxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVGh1IEF1ZyAyMCAxOTo0ODozOCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9raHVnZXBhZ2VkLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9raHVnZXBhZ2VkLmNcXG5pbmRleCAxMGU4ZGVkY2IwODdkLi4yZTQ2NjVlNmQ1ODUyIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2todWdlcGFnZWQuY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2todWdlcGFnZWQuY1xcbkBAIC01MzMsNyArNTMzLDcgQEAgc3RhdGljIHZvaWQgX19tYWR2aXNlX2NvbGxhcHNlKGNvbnN0IGNoYXIgKm1zZywgY2hhciAqcCwgaW50IG5yX2hwYWdlcyxcXG4gXFx0cmV0ID0gbWFkdmlzZV9jb2xsYXBzZV9yZXRyeShwLCBucl9ocGFnZXMgKiBocGFnZV9wbWRfc2l6ZSk7XFxuIFxcdGlmICgoKGJvb2wpcmV0KSA9PSBleHBlY3QpXFxuIFxcdFxcdGZhaWwoXFxcIkZhaWw6IEJhZCByZXR1cm4gdmFsdWVcXFwiKTtcXG4tXFx0ZWxzZSBpZiAoIW9wcy1cXHUwMDNlY2hlY2tfaHVnZShwLCBleHBlY3QgPyBucl9ocGFnZXMgOiAwKSlcXG4rXFx0ZWxzZSBpZiAoIW9wcy1cXHUwMDNlY2hlY2tfaHVnZShwLCBleHBlY3QgPyBucl9ocGFnZXMgOiAtbnJfaHBhZ2VzKSlcXG4gXFx0XFx0ZmFpbChcXFwiRmFpbDogY2hlY2tfaHVnZSgpXFxcIik7XFxuIFxcdGVsc2VcXG4gXFx0XFx0c3VjY2VzcyhcXFwiT0tcXFwiKTtcXG5AQCAtNTQ1LDcgKzU0NSw3IEBAIHN0YXRpYyB2b2lkIG1hZHZpc2VfY29sbGFwc2UoY29uc3QgY2hhciAqbXNnLCBjaGFyICpwLCBpbnQgbnJfaHBhZ2VzLFxcbiBcXHRcXHRcXHQgICAgIHN0cnVjdCBtZW1fb3BzICpvcHMsIGJvb2wgZXhwZWN0KVxcbiB7XFxuIFxcdC8qIFNhbml0eSBjaGVjayAqL1xcbi1cXHRpZiAoIW9wcy1cXHUwMDNlY2hlY2tfaHVnZShwLCAwKSlcXG4rXFx0aWYgKCFvcHMtXFx1MDAzZWNoZWNrX2h1Z2UocCwgLW5yX2hwYWdlcykpXFxuIFxcdFxcdGtzZnRfZXhpdF9mYWlsX21zZyhcXFwiVW5leHBlY3RlZCBodWdlIHBhZ2VcXFxcblxcXCIpO1xcbiBcXHRfX21hZHZpc2VfY29sbGFwc2UobXNnLCBwLCBucl9ocGFnZXMsIG9wcywgZXhwZWN0KTtcXG4gfVxcbkBAIC01NTgsNyArNTU4LDcgQEAgc3RhdGljIGJvb2wgd2FpdF9mb3Jfc2Nhbihjb25zdCBjaGFyICptc2csIGNoYXIgKnAsIGludCBucl9ocGFnZXMsXFxuIFxcdGludCB0aW1lb3V0ID0gNjsgLyogMyBzZWNvbmRzICovXFxuIFxcbiBcXHQvKiBTYW5pdHkgY2hlY2sgKi9cXG4tXFx0aWYgKCFvcHMtXFx1MDAzZWNoZWNrX2h1Z2UocCwgMCkpXFxuK1xcdGlmICghb3BzLVxcdTAwM2VjaGVja19odWdlKHAsIC1ucl9ocGFnZXMpKVxcbiBcXHRcXHRrc2Z0X2V4aXRfZmFpbF9tc2coXFxcIlVuZXhwZWN0ZWQgaHVnZSBwYWdlXFxcXG5cXFwiKTtcXG4gXFxuIFxcdG1hZHZpc2UocCwgbnJfaHBhZ2VzICogaHBhZ2VfcG1kX3NpemUsIE1BRFZfSFVHRVBBR0UpO1xcbkBAIC02MDUsNyArNjA1LDcgQEAgc3RhdGljIHZvaWQga2h1Z2VwYWdlZF9jb2xsYXBzZShjb25zdCBjaGFyICptc2csIGNoYXIgKnAsIGludCBucl9ocGFnZXMsXFxuIFxcdGlmIChvcHMgIT0gXFx1MDAyNl9fYW5vbl9vcHMpXFxuIFxcdFxcdG9wcy1cXHUwMDNlZmF1bHQocCwgMCwgbnJfaHBhZ2VzICogaHBhZ2VfcG1kX3NpemUpO1xcbiBcXG4tXFx0aWYgKG9wcy1cXHUwMDNlY2hlY2tfaHVnZShwLCBleHBlY3QgPyBucl9ocGFnZXMgOiAwKSlcXG4rXFx0aWYgKG9wcy1cXHUwMDNlY2hlY2tfaHVnZShwLCBleHBlY3QgPyBucl9ocGFnZXMgOiAtbnJfaHBhZ2VzKSlcXG4gXFx0XFx0c3VjY2VzcyhcXFwiT0tcXFwiKTtcXG4gXFx0ZWxzZVxcbiBcXHRcXHRmYWlsKFxcXCJGYWlsXFxcIik7XFxuQEAgLTY0Myw3ICs2NDMsNyBAQCBzdGF0aWMgdm9pZCBhbGxvY19hdF9mYXVsdCh2b2lkKVxcbiBcXG4gXFx0bWFkdmlzZShwLCBwYWdlX3NpemUsIE1BRFZfRE9OVE5FRUQpO1xcbiBcXHRrc2Z0X3ByaW50X21zZyhcXFwiU3BsaXQgaHVnZSBQTUQgb24gTUFEVl9ET05UTkVFRC4uLlxcXCIpO1xcbi1cXHRpZiAoY2hlY2tfaHVnZV9hbm9uKHAsIDAsIGhwYWdlX3BtZF9zaXplKSlcXG4rXFx0aWYgKGNoZWNrX2h1Z2VfYW5vbihwLCAtMSwgaHBhZ2VfcG1kX3NpemUpKVxcbiBcXHRcXHRzdWNjZXNzKFxcXCJPS1xcXCIpO1xcbiBcXHRlbHNlXFxuIFxcdFxcdGZhaWwoXFxcIkZhaWxcXFwiKTtcXG5AQCAtODE1LDcgKzgxNSw3IEBAIHN0YXRpYyB2b2lkIGNvbGxhcHNlX3NpbmdsZV9wdGVfZW50cnlfY29tcG91bmQoc3RydWN0IGNvbGxhcHNlX2NvbnRleHQgKmMsIHN0cnVjXFxuIFxcdG1hZHZpc2UocCwgaHBhZ2VfcG1kX3NpemUsIE1BRFZfTk9IVUdFUEFHRSk7XFxuIFxcdGtzZnRfcHJpbnRfbXNnKFxcXCJTcGxpdCBodWdlIHBhZ2UgbGVhdmluZyBzaW5nbGUgUFRFIG1hcHBpbmcgY29tcG91bmQgcGFnZS4uLlxcXCIpO1xcbiBcXHRtYWR2aXNlKHAgKyBwYWdlX3NpemUsIGhwYWdlX3BtZF9zaXplIC0gcGFnZV9zaXplLCBNQURWX0RPTlRORUVEKTtcXG4tXFx0aWYgKG9wcy1cXHUwMDNlY2hlY2tfaHVnZShwLCAwKSlcXG4rXFx0aWYgKG9wcy1cXHUwMDNlY2hlY2tfaHVnZShwLCAtMSkpXFxuIFxcdFxcdHN1Y2Nlc3MoXFxcIk9LXFxcIik7XFxuIFxcdGVsc2VcXG4gXFx0XFx0ZmFpbChcXFwiRmFpbFxcXCIpO1xcbkBAIC04MzYsNyArODM2LDcgQEAgc3RhdGljIHZvaWQgY29sbGFwc2VfZnVsbF9vZl9jb21wb3VuZChzdHJ1Y3QgY29sbGFwc2VfY29udGV4dCAqYywgc3RydWN0IG1lbV9vcHNcXG4gXFx0a3NmdF9wcmludF9tc2coXFxcIlNwbGl0IGh1Z2UgcGFnZSBsZWF2aW5nIHNpbmdsZSBQVEUgcGFnZSB0YWJsZSBmdWxsIG9mIGNvbXBvdW5kIHBhZ2VzLi4uXFxcIik7XFxuIFxcdG1hZHZpc2UocCwgcGFnZV9zaXplLCBNQURWX05PSFVHRVBBR0UpO1xcbiBcXHRtYWR2aXNlKHAsIGhwYWdlX3BtZF9zaXplLCBNQURWX05PSFVHRVBBR0UpO1xcbi1cXHRpZiAob3BzLVxcdTAwM2VjaGVja19odWdlKHAsIDApKVxcbitcXHRpZiAob3BzLVxcdTAwM2VjaGVja19odWdlKHAsIC0xKSlcXG4gXFx0XFx0c3VjY2VzcyhcXFwiT0tcXFwiKTtcXG4gXFx0ZWxzZVxcbiBcXHRcXHRmYWlsKFxcXCJGYWlsXFxcIik7XFxuQEAgLTkwMyw3ICs5MDMsNyBAQCBzdGF0aWMgdm9pZCBjb2xsYXBzZV9mb3JrKHN0cnVjdCBjb2xsYXBzZV9jb250ZXh0ICpjLCBzdHJ1Y3QgbWVtX29wcyAqb3BzKVxcbiBcXG4gXFx0a3NmdF9wcmludF9tc2coXFxcIkFsbG9jYXRlIHNtYWxsIHBhZ2UuLi5cXFwiKTtcXG4gXFx0b3BzLVxcdTAwM2VmYXVsdChwLCAwLCBwYWdlX3NpemUpO1xcbi1cXHRpZiAob3BzLVxcdTAwM2VjaGVja19odWdlKHAsIDApKVxcbitcXHRpZiAob3BzLVxcdTAwM2VjaGVja19odWdlKHAsIC0xKSlcXG4gXFx0XFx0c3VjY2VzcyhcXFwiT0tcXFwiKTtcXG4gXFx0ZWxzZVxcbiBcXHRcXHRmYWlsKFxcXCJGYWlsXFxcIik7XFxuQEAgLTkxMSw3ICs5MTEsNyBAQCBzdGF0aWMgdm9pZCBjb2xsYXBzZV9mb3JrKHN0cnVjdCBjb2xsYXBzZV9jb250ZXh0ICpjLCBzdHJ1Y3QgbWVtX29wcyAqb3BzKVxcbiBcXHRrc2Z0X3ByaW50X21zZyhcXFwiU2hhcmUgc21hbGwgcGFnZSBvdmVyIGZvcmsoKS4uLlxcXCIpO1xcbiBcXHRpZiAoIWZvcmsoKSkge1xcbiBcXHRcXHQvKiBEbyBub3QgdG91Y2ggc2V0dGluZ3Mgb24gY2hpbGQgZXhpdCAqL1xcbi1cXHRcXHRpZiAob3BzLVxcdTAwM2VjaGVja19odWdlKHAsIDApKVxcbitcXHRcXHRpZiAob3BzLVxcdTAwM2VjaGVja19odWdlKHAsIC0xKSlcXG4gXFx0XFx0XFx0c3VjY2VzcyhcXFwiT0tcXFwiKTtcXG4gXFx0XFx0ZWxzZVxcbiBcXHRcXHRcXHRmYWlsKFxcXCJGYWlsXFxcIik7XFxuQEAgLTkyOSw3ICs5MjksNyBAQCBzdGF0aWMgdm9pZCBjb2xsYXBzZV9mb3JrKHN0cnVjdCBjb2xsYXBzZV9jb250ZXh0ICpjLCBzdHJ1Y3QgbWVtX29wcyAqb3BzKVxcbiBcXHRleGl0X3N0YXR1cyA9IFdFWElUU1RBVFVTKHdzdGF0dXMpO1xcbiBcXG4gXFx0a3NmdF9wcmludF9tc2coXFxcIkNoZWNrIGlmIHBhcmVudCBzdGlsbCBoYXMgc21hbGwgcGFnZS4uLlxcXCIpO1xcbi1cXHRpZiAob3BzLVxcdTAwM2VjaGVja19odWdlKHAsIDApKVxcbitcXHRpZiAob3BzLVxcdTAwM2VjaGVja19odWdlKHAsIC0xKSlcXG4gXFx0XFx0c3VjY2VzcyhcXFwiT0tcXFwiKTtcXG4gXFx0ZWxzZVxcbiBcXHRcXHRmYWlsKFxcXCJGYWlsXFxcIik7XFxuQEAgLTk1NSw3ICs5NTUsNyBAQCBzdGF0aWMgdm9pZCBjb2xsYXBzZV9mb3JrX2NvbXBvdW5kKHN0cnVjdCBjb2xsYXBzZV9jb250ZXh0ICpjLCBzdHJ1Y3QgbWVtX29wcyAqb1xcbiBcXHRcXHRrc2Z0X3ByaW50X21zZyhcXFwiU3BsaXQgaHVnZSBwYWdlIFBNRCBpbiBjaGlsZCBwcm9jZXNzLi4uXFxcIik7XFxuIFxcdFxcdG1hZHZpc2UocCwgcGFnZV9zaXplLCBNQURWX05PSFVHRVBBR0UpO1xcbiBcXHRcXHRtYWR2aXNlKHAsIGhwYWdlX3BtZF9zaXplLCBNQURWX05PSFVHRVBBR0UpO1xcbi1cXHRcXHRpZiAob3BzLVxcdTAwM2VjaGVja19odWdlKHAsIDApKVxcbitcXHRcXHRpZiAob3BzLVxcdTAwM2VjaGVja19odWdlKHAsIC0xKSlcXG4gXFx0XFx0XFx0c3VjY2VzcyhcXFwiT0tcXFwiKTtcXG4gXFx0XFx0ZWxzZVxcbiBcXHRcXHRcXHRmYWlsKFxcXCJGYWlsXFxcIik7XFxuQEAgLTEwMDMsNyArMTAwMyw3IEBAIHN0YXRpYyB2b2lkIGNvbGxhcHNlX21heF9wdGVzX3NoYXJlZChzdHJ1Y3QgY29sbGFwc2VfY29udGV4dCAqYywgc3RydWN0IG1lbV9vcHNcXG4gXFx0XFx0a3NmdF9wcmludF9tc2coXFxcIlRyaWdnZXIgQ29XIG9uIHBhZ2UgJWQgb2YgJWQuLi5cXFwiLFxcbiBcXHRcXHRcXHRcXHRocGFnZV9wbWRfbnIgLSBtYXhfcHRlc19zaGFyZWQgLSAxLCBocGFnZV9wbWRfbnIpO1xcbiBcXHRcXHRvcHMtXFx1MDAzZWZhdWx0KHAsIDAsIChocGFnZV9wbWRfbnIgLSBtYXhfcHRlc19zaGFyZWQgLSAxKSAqIHBhZ2Vfc2l6ZSk7XFxuLVxcdFxcdGlmIChvcHMtXFx1MDAzZWNoZWNrX2h1Z2UocCwgMCkpXFxuK1xcdFxcdGlmIChvcHMtXFx1MDAzZWNoZWNrX2h1Z2UocCwgLTEpKVxcbiBcXHRcXHRcXHRzdWNjZXNzKFxcXCJPS1xcXCIpO1xcbiBcXHRcXHRlbHNlXFxuIFxcdFxcdFxcdGZhaWwoXFxcIkZhaWxcXFwiKTtcXG5AQCAtMTAxNiw3ICsxMDE2LDcgQEAgc3RhdGljIHZvaWQgY29sbGFwc2VfbWF4X3B0ZXNfc2hhcmVkKHN0cnVjdCBjb2xsYXBzZV9jb250ZXh0ICpjLCBzdHJ1Y3QgbWVtX29wc1xcbiBcXHRcXHRcXHQgICAgICAgaHBhZ2VfcG1kX25yIC0gbWF4X3B0ZXNfc2hhcmVkLCBocGFnZV9wbWRfbnIpO1xcbiBcXHRcXHRcXHRvcHMtXFx1MDAzZWZhdWx0KHAsIDAsIChocGFnZV9wbWRfbnIgLSBtYXhfcHRlc19zaGFyZWQpICpcXG4gXFx0XFx0XFx0XFx0ICAgIHBhZ2Vfc2l6ZSk7XFxuLVxcdFxcdFxcdGlmIChvcHMtXFx1MDAzZWNoZWNrX2h1Z2UocCwgMCkpXFxuK1xcdFxcdFxcdGlmIChvcHMtXFx1MDAzZWNoZWNrX2h1Z2UocCwgLTEpKVxcbiBcXHRcXHRcXHRcXHRzdWNjZXNzKFxcXCJPS1xcXCIpO1xcbiBcXHRcXHRcXHRlbHNlXFxuIFxcdFxcdFxcdFxcdGZhaWwoXFxcIkZhaWxcXFwiKTtcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vc3BsaXRfaHVnZV9wYWdlX3Rlc3QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3NwbGl0X2h1Z2VfcGFnZV90ZXN0LmNcXG5pbmRleCAzMmI5OTE0NzJmNzQ0Li40ZmNkMzMwY2YwNzI2IDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3NwbGl0X2h1Z2VfcGFnZV90ZXN0LmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9zcGxpdF9odWdlX3BhZ2VfdGVzdC5jXFxuQEAgLTMwMyw2ICszMDMsOSBAQCBzdGF0aWMgdm9pZCB2ZXJpZnlfcnNzX2Fub25fc3BsaXRfaHVnZV9wYWdlX2FsbF96ZXJvZXMoY2hhciAqb25lX3BhZ2UsIGludCBucl9ocFxcbiBcXHRpZiAoIXJzc19hbm9uX2JlZm9yZSlcXG4gXFx0XFx0a3NmdF9leGl0X2ZhaWxfbXNnKFxcXCJObyBSc3NBbm9uIGlzIGFsbG9jYXRlZCBiZWZvcmUgc3BsaXRcXFxcblxcXCIpO1xcbiBcXG4rXFx0LyogUHJldmVudCBraHVnZXBhZ2VkIGZyb20gY29sbGFwc2luZyB0aGUgcGFnZXMuICovXFxuK1xcdG1hZHZpc2Uob25lX3BhZ2UsIGxlbiwgTUFEVl9OT0hVR0VQQUdFKTtcXG4rXFxuIFxcdC8qIHNwbGl0IGFsbCBUSFBzICovXFxuIFxcdHdyaXRlX2RlYnVnZnMoUElEX0ZNVCwgZ2V0cGlkKCksICh1aW50NjRfdClvbmVfcGFnZSxcXG4gXFx0XFx0ICAgICAgKHVpbnQ2NF90KW9uZV9wYWdlICsgbGVuLCAwKTtcXG5AQCAtMzExLDcgKzMxNCw3IEBAIHN0YXRpYyB2b2lkIHZlcmlmeV9yc3NfYW5vbl9zcGxpdF9odWdlX3BhZ2VfYWxsX3plcm9lcyhjaGFyICpvbmVfcGFnZSwgaW50IG5yX2hwXFxuIFxcdFxcdGlmIChvbmVfcGFnZVtpXSAhPSAoY2hhcikwKVxcbiBcXHRcXHRcXHRrc2Z0X2V4aXRfZmFpbF9tc2coXFxcIiVsZCBieXRlIGNvcnJ1cHRlZFxcXFxuXFxcIiwgaSk7XFxuIFxcbi1cXHRpZiAoIWNoZWNrX2h1Z2VfYW5vbihvbmVfcGFnZSwgMCwgcG1kX3BhZ2VzaXplKSlcXG4rXFx0aWYgKCFjaGVja19odWdlX2Fub24ob25lX3BhZ2UsIC1ucl9ocGFnZXMsIHBtZF9wYWdlc2l6ZSkpXFxuIFxcdFxcdGtzZnRfZXhpdF9mYWlsX21zZyhcXFwiU3RpbGwgQW5vbkh1Z2VQYWdlcyBub3Qgc3BsaXRcXFxcblxcXCIpO1xcbiBcXG4gXFx0cnNzX2Fub25fYWZ0ZXIgPSByc3NfYW5vbigpO1xcbkBAIC0zNTAsNiArMzUzLDkgQEAgc3RhdGljIHZvaWQgc3BsaXRfcG1kX3RocF90b19vcmRlcihpbnQgb3JkZXIpXFxuIFxcdGlmICghY2hlY2tfaHVnZV9hbm9uKG9uZV9wYWdlLCA0LCBwbWRfcGFnZXNpemUpKVxcbiBcXHRcXHRrc2Z0X2V4aXRfZmFpbF9tc2coXFxcIk5vIFRIUCBpcyBhbGxvY2F0ZWRcXFxcblxcXCIpO1xcbiBcXG4rXFx0LyogUHJldmVudCBraHVnZXBhZ2VkIGZyb20gY29sbGFwc2luZyB0aGUgcGFnZXMuICovXFxuK1xcdG1hZHZpc2Uob25lX3BhZ2UsIGxlbiwgTUFEVl9OT0hVR0VQQUdFKTtcXG4rXFxuIFxcdC8qIHNwbGl0IGFsbCBUSFBzICovXFxuIFxcdHdyaXRlX2RlYnVnZnMoUElEX0ZNVCwgZ2V0cGlkKCksICh1aW50NjRfdClvbmVfcGFnZSxcXG4gXFx0XFx0KHVpbnQ2NF90KW9uZV9wYWdlICsgbGVuLCBvcmRlcik7XFxuQEAgLTM2Niw3ICszNzIsNyBAQCBzdGF0aWMgdm9pZCBzcGxpdF9wbWRfdGhwX3RvX29yZGVyKGludCBvcmRlcilcXG4gXFx0XFx0XFx0XFx0XFx0ICAgKHBtZF9vcmRlciArIDEpKSlcXG4gXFx0XFx0a3NmdF9leGl0X2ZhaWxfbXNnKFxcXCJVbmV4cGVjdGVkIFRIUCBzcGxpdFxcXFxuXFxcIik7XFxuIFxcbi1cXHRpZiAoIWNoZWNrX2h1Z2VfYW5vbihvbmVfcGFnZSwgMCwgcG1kX3BhZ2VzaXplKSlcXG4rXFx0aWYgKCFjaGVja19odWdlX2Fub24ob25lX3BhZ2UsIC00LCBwbWRfcGFnZXNpemUpKVxcbiBcXHRcXHRrc2Z0X2V4aXRfZmFpbF9tc2coXFxcIlN0aWxsIEFub25IdWdlUGFnZXMgbm90IHNwbGl0XFxcXG5cXFwiKTtcXG4gXFxuIFxcdGtzZnRfdGVzdF9yZXN1bHRfcGFzcyhcXFwiU3BsaXQgaHVnZSBwYWdlcyB0byBvcmRlciAlZCBzdWNjZXNzZnVsXFxcXG5cXFwiLCBvcmRlcik7XFxuQEAgLTQzNiw2ICs0NDIsOSBAQCBzdGF0aWMgdm9pZCBzcGxpdF9wdGVfbWFwcGVkX3RocCh2b2lkKVxcbiBcXHRcXHRnb3RvIG91dDtcXG4gXFx0fVxcbiBcXG4rXFx0LyogUHJldmVudCBraHVnZXBhZ2VkIGZyb20gY29sbGFwc2luZyB0aGUgcGFnZXMuICovXFxuK1xcdG1hZHZpc2UodGhwX2FyZWEsIHRocF9hcmVhX3NpemUsIE1BRFZfTk9IVUdFUEFHRSk7XFxuK1xcbiBcXHQvKiBTcGxpdCBhbGwgVEhQcyB0aHJvdWdoIHRoZSByZW1hcHBlZCBwYWdlcy4gKi9cXG4gXFx0d3JpdGVfZGVidWdmcyhQSURfRk1ULCBnZXRwaWQoKSwgKHVpbnQ2NF90KXBhZ2VfYXJlYSxcXG4gXFx0XFx0ICAgICAgKHVpbnQ2NF90KXBhZ2VfYXJlYSArIHBhZ2VfYXJlYV9zaXplLCAwKTtcXG5AQCAtNjY1LDYgKzY3NCw4IEBAIHN0YXRpYyBpbnQgY3JlYXRlX3BhZ2VjYWNoZV90aHBfYW5kX2ZkKGNvbnN0IGNoYXIgKnRlc3RmaWxlLCBzaXplX3QgZmRfc2l6ZSxcXG4gXFx0XFx0a3NmdF90ZXN0X3Jlc3VsdF9za2lwKFxcXCJQYWdlY2FjaGUgZm9saW8gc3BsaXQgc2tpcHBlZFxcXFxuXFxcIik7XFxuIFxcdFxcdHJldHVybiAtMjtcXG4gXFx0fVxcbitcXHQvKiBQcmV2ZW50IGtodWdlcGFnZWQgZnJvbSBjb2xsYXBzaW5nIHRoZSBwYWdlcy4gKi9cXG4rXFx0bWFkdmlzZSgqYWRkciwgZmRfc2l6ZSwgTUFEVl9OT0hVR0VQQUdFKTtcXG4gXFx0cmV0dXJuIDA7XFxuIGVycl9vdXRfY2xvc2U6XFxuIFxcdGNsb3NlKCpmZCk7XFxuQEAgLTczNSw3ICs3NDYsNyBAQCBzdGF0aWMgdm9pZCBzcGxpdF90aHBfaW5fcGFnZWNhY2hlX3RvX29yZGVyX2F0KHNpemVfdCBmZF9zaXplLFxcbiBcXHRcXHRnb3RvIG91dDtcXG4gXFx0fVxcbiBcXG4tXFx0aWYgKCFjaGVja19odWdlX2ZpbGUoYWRkciwgMCwgcG1kX3BhZ2VzaXplKSkge1xcbitcXHRpZiAoIWNoZWNrX2h1Z2VfZmlsZShhZGRyLCAtKGZkX3NpemUgLyBwbWRfcGFnZXNpemUpLCBwbWRfcGFnZXNpemUpKSB7XFxuIFxcdFxcdGtzZnRfcHJpbnRfbXNnKFxcXCJTdGlsbCBGaWxlUG1kTWFwcGVkIG5vdCBzcGxpdFxcXFxuXFxcIik7XFxuIFxcdFxcdGVyciA9IEVYSVRfRkFJTFVSRTtcXG4gXFx0XFx0Z290byBvdXQ7XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ZtX3V0aWwuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ZtX3V0aWwuY1xcbmluZGV4IDMxMWZjNWI0NTEzZWIuLjE2NmQ1ZDc5Mjg5ZjMgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdm1fdXRpbC5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdm1fdXRpbC5jXFxuQEAgLTE0LDYgKzE0LDggQEBcXG4gI2RlZmluZSBQTURfU0laRV9GSUxFX1BBVEggXFxcIi9zeXMva2VybmVsL21tL3RyYW5zcGFyZW50X2h1Z2VwYWdlL2hwYWdlX3BtZF9zaXplXFxcIlxcbiAjZGVmaW5lIFNNQVBfRklMRV9QQVRIIFxcXCIvcHJvYy9zZWxmL3NtYXBzXFxcIlxcbiAjZGVmaW5lIFNUQVRVU19GSUxFX1BBVEggXFxcIi9wcm9jL3NlbGYvc3RhdHVzXFxcIlxcbisjZGVmaW5lIFBBR0VNQVBfRklMRV9QQVRIIFxcXCIvcHJvYy9zZWxmL3BhZ2VtYXBcXFwiXFxuKyNkZWZpbmUgS1BBR0VGTEFHU19GSUxFX1BBVEggXFxcIi9wcm9jL2twYWdlZmxhZ3NcXFwiXFxuICNkZWZpbmUgTUFYX0xJTkVfTEVOR1RIIDUwMFxcbiBcXG4gdW5zaWduZWQgaW50IF9fcGFnZV9zaXplO1xcbkBAIC0yMjksMzcgKzIzMSwxMjggQEAgY2hhciAqX19nZXRfc21hcF9lbnRyeSh2b2lkICphZGRyLCBjb25zdCBjaGFyICpwYXR0ZXJuLCBjaGFyICpidWYsIHNpemVfdCBsZW4pXFxuIFxcdHJldHVybiBlbnRyeTtcXG4gfVxcbiBcXG4tYm9vbCBfX2NoZWNrX2h1Z2Uodm9pZCAqYWRkciwgY2hhciAqcGF0dGVybiwgaW50IG5yX2hwYWdlcyxcXG4tXFx0XFx0ICB1aW50NjRfdCBocGFnZV9zaXplKVxcbi17XFxuLVxcdGNoYXIgYnVmZmVyW01BWF9MSU5FX0xFTkdUSF07XFxuLVxcdHVpbnQ2NF90IHRocCA9IC0xO1xcbi1cXHRjaGFyICplbnRyeTtcXG4tXFxuLVxcdGVudHJ5ID0gX19nZXRfc21hcF9lbnRyeShhZGRyLCBwYXR0ZXJuLCBidWZmZXIsIHNpemVvZihidWZmZXIpKTtcXG4tXFx0aWYgKCFlbnRyeSlcXG4tXFx0XFx0Z290byBlcnJfb3V0O1xcbi1cXG4tXFx0aWYgKHNzY2FuZihlbnRyeSwgXFxcIiU5XFxcIiBTQ051NjQgXFxcIiBrQlxcXCIsIFxcdTAwMjZ0aHApICE9IDEpXFxuLVxcdFxcdGtzZnRfZXhpdF9mYWlsX21zZyhcXFwiUmVhZGluZyBzbWFwIGVycm9yXFxcXG5cXFwiKTtcXG4tXFxuLWVycl9vdXQ6XFxuLVxcdHJldHVybiB0aHAgPT0gKG5yX2hwYWdlcyAqIChocGFnZV9zaXplIFxcdTAwM2VcXHUwMDNlIDEwKSk7XFxuLX1cXG4tXFxuIGJvb2wgY2hlY2tfaHVnZV9hbm9uKHZvaWQgKmFkZHIsIGludCBucl9ocGFnZXMsIHVpbnQ2NF90IGhwYWdlX3NpemUpXFxuIHtcXG4tXFx0cmV0dXJuIF9fY2hlY2tfaHVnZShhZGRyLCBcXFwiQW5vbkh1Z2VQYWdlczogXFxcIiwgbnJfaHBhZ2VzLCBocGFnZV9zaXplKTtcXG4rXFx0aW50IGksIHBhZ2VtYXBfZmQsIG5yID0gMDtcXG4rXFx0dWludDY0X3QgY2F0ZWdvcmllcztcXG4rXFx0Ym9vbCBleHBlY3RfaHVnZTtcXG4rXFxuK1xcdGlmIChucl9ocGFnZXMgPT0gMCB8fCBocGFnZV9zaXplID09IDApXFxuK1xcdFxcdHJldHVybiBmYWxzZTtcXG4rXFxuK1xcdGlmIChucl9ocGFnZXMgXFx1MDAzYyAwKSB7XFxuK1xcdFxcdG5yX2hwYWdlcyA9IC1ucl9ocGFnZXM7XFxuK1xcdFxcdGV4cGVjdF9odWdlID0gZmFsc2U7XFxuK1xcdH0gZWxzZVxcbitcXHRcXHRleHBlY3RfaHVnZSA9IHRydWU7XFxuK1xcbitcXHRwYWdlbWFwX2ZkID0gb3BlbihQQUdFTUFQX0ZJTEVfUEFUSCwgT19SRE9OTFkpO1xcbitcXHRpZiAocGFnZW1hcF9mZCBcXHUwMDNjIDApXFxuK1xcdFxcdGtzZnRfZXhpdF9mYWlsX21zZyhcXFwib3BlbiBwYWdlbWFwOiAlc1xcXFxuXFxcIiwgc3RyZXJyb3IoZXJybm8pKTtcXG4rXFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBucl9ocGFnZXM7IGkrKywgYWRkciArPSBocGFnZV9zaXplKSB7XFxuK1xcdFxcdGNhdGVnb3JpZXMgPSBwYWdlbWFwX3NjYW5fZ2V0X2NhdGVnb3JpZXMocGFnZW1hcF9mZCwgYWRkcik7XFxuK1xcdFxcdGlmICghKGNhdGVnb3JpZXMgXFx1MDAyNiBQQUdFX0lTX0hVR0UpKVxcbitcXHRcXHRcXHRjb250aW51ZTtcXG4rXFx0XFx0aWYgKGNhdGVnb3JpZXMgXFx1MDAyNiBQQUdFX0lTX0ZJTEUpXFxuK1xcdFxcdFxcdGNvbnRpbnVlO1xcbitcXHRcXHRucisrO1xcbitcXHR9XFxuK1xcbitcXHRjbG9zZShwYWdlbWFwX2ZkKTtcXG4rXFx0cmV0dXJuIGV4cGVjdF9odWdlID8gbnIgPT0gbnJfaHBhZ2VzIDogbnIgPT0gMDtcXG4gfVxcbiBcXG4gYm9vbCBjaGVja19odWdlX2ZpbGUodm9pZCAqYWRkciwgaW50IG5yX2hwYWdlcywgdWludDY0X3QgaHBhZ2Vfc2l6ZSlcXG4ge1xcbi1cXHRyZXR1cm4gX19jaGVja19odWdlKGFkZHIsIFxcXCJGaWxlUG1kTWFwcGVkOlxcXCIsIG5yX2hwYWdlcywgaHBhZ2Vfc2l6ZSk7XFxuK1xcdGludCBpLCBwYWdlbWFwX2ZkLCBrcGZfZmQsIG5yID0gMDtcXG4rXFx0dW5zaWduZWQgbG9uZyBwZm47XFxuK1xcdHVpbnQ2NF90IGNhdGVnb3JpZXMsIGtwZjtcXG4rXFx0Ym9vbCBleHBlY3RfaHVnZTtcXG4rXFxuK1xcdGlmIChucl9ocGFnZXMgPT0gMCB8fCBocGFnZV9zaXplID09IDApXFxuK1xcdFxcdHJldHVybiBmYWxzZTtcXG4rXFxuK1xcdGlmIChucl9ocGFnZXMgXFx1MDAzYyAwKSB7XFxuK1xcdFxcdG5yX2hwYWdlcyA9IC1ucl9ocGFnZXM7XFxuK1xcdFxcdGV4cGVjdF9odWdlID0gZmFsc2U7XFxuK1xcdH0gZWxzZVxcbitcXHRcXHRleHBlY3RfaHVnZSA9IHRydWU7XFxuK1xcbitcXHRwYWdlbWFwX2ZkID0gb3BlbihQQUdFTUFQX0ZJTEVfUEFUSCwgT19SRE9OTFkpO1xcbitcXHRpZiAocGFnZW1hcF9mZCBcXHUwMDNjIDApXFxuK1xcdFxcdGtzZnRfZXhpdF9mYWlsX21zZyhcXFwib3BlbiBwYWdlbWFwOiAlc1xcXFxuXFxcIiwgc3RyZXJyb3IoZXJybm8pKTtcXG4rXFxuK1xcdGtwZl9mZCA9IG9wZW4oS1BBR0VGTEFHU19GSUxFX1BBVEgsIE9fUkRPTkxZKTtcXG4rXFx0aWYgKGtwZl9mZCBcXHUwMDNjIDApXFxuK1xcdFxcdGtzZnRfZXhpdF9mYWlsX21zZyhcXFwib3BlbiBrcGFnZWZsYWdzOiAlc1xcXFxuXFxcIiwgc3RyZXJyb3IoZXJybm8pKTtcXG4rXFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBucl9ocGFnZXM7IGkrKywgYWRkciArPSBocGFnZV9zaXplKSB7XFxuK1xcdFxcdGNhdGVnb3JpZXMgPSBwYWdlbWFwX3NjYW5fZ2V0X2NhdGVnb3JpZXMocGFnZW1hcF9mZCwgYWRkcik7XFxuK1xcdFxcdHBmbiA9IHBhZ2VtYXBfZ2V0X3BmbihwYWdlbWFwX2ZkLCBhZGRyKTtcXG4rXFx0XFx0aWYgKHBmbiA9PSAtMVVMKVxcbitcXHRcXHRcXHRjb250aW51ZTtcXG4rXFx0XFx0aWYgKHBhZ2VmbGFnc19nZXQocGZuLCBrcGZfZmQsIFxcdTAwMjZrcGYpKVxcbitcXHRcXHRcXHRrc2Z0X2V4aXRfZmFpbF9tc2coXFxcInJlYWQga3BhZ2VmbGFnczogJXNcXFxcblxcXCIsIHN0cmVycm9yKGVycm5vKSk7XFxuK1xcdFxcdGlmICghKGNhdGVnb3JpZXMgXFx1MDAyNiBQQUdFX0lTX0hVR0UpKVxcbitcXHRcXHRcXHRjb250aW51ZTtcXG4rXFx0XFx0aWYgKCEoY2F0ZWdvcmllcyBcXHUwMDI2IFBBR0VfSVNfRklMRSkpXFxuK1xcdFxcdFxcdGNvbnRpbnVlO1xcbitcXHRcXHRpZiAoa3BmIFxcdTAwMjYgS1BGX1NXQVBCQUNLRUQpXFxuK1xcdFxcdFxcdGNvbnRpbnVlO1xcbitcXHRcXHRucisrO1xcbitcXHR9XFxuK1xcbitcXHRjbG9zZShwYWdlbWFwX2ZkKTtcXG4rXFx0Y2xvc2Uoa3BmX2ZkKTtcXG4rXFxuK1xcdHJldHVybiBleHBlY3RfaHVnZSA/IG5yID09IG5yX2hwYWdlcyA6IG5yID09IDA7XFxuIH1cXG4gXFxuIGJvb2wgY2hlY2tfaHVnZV9zaG1lbSh2b2lkICphZGRyLCBpbnQgbnJfaHBhZ2VzLCB1aW50NjRfdCBocGFnZV9zaXplKVxcbiB7XFxuLVxcdHJldHVybiBfX2NoZWNrX2h1Z2UoYWRkciwgXFxcIlNobWVtUG1kTWFwcGVkOlxcXCIsIG5yX2hwYWdlcywgaHBhZ2Vfc2l6ZSk7XFxuK1xcdGludCBpLCBwYWdlbWFwX2ZkLCBrcGZfZmQsIG5yID0gMDtcXG4rXFx0dW5zaWduZWQgbG9uZyBwZm47XFxuK1xcdHVpbnQ2NF90IGNhdGVnb3JpZXMsIGtwZjtcXG4rXFx0Ym9vbCBleHBlY3RfaHVnZTtcXG4rXFxuK1xcdGlmIChucl9ocGFnZXMgPT0gMCB8fCBocGFnZV9zaXplID09IDApXFxuK1xcdFxcdHJldHVybiBmYWxzZTtcXG4rXFxuK1xcdGlmIChucl9ocGFnZXMgXFx1MDAzYyAwKSB7XFxuK1xcdFxcdG5yX2hwYWdlcyA9IC1ucl9ocGFnZXM7XFxuK1xcdFxcdGV4cGVjdF9odWdlID0gdHJ1ZTtcXG4rXFx0fSBlbHNlXFxuK1xcdFxcdGV4cGVjdF9odWdlID0gZmFsc2U7XFxuK1xcbitcXHRwYWdlbWFwX2ZkID0gb3BlbihQQUdFTUFQX0ZJTEVfUEFUSCwgT19SRE9OTFkpO1xcbitcXHRpZiAocGFnZW1hcF9mZCBcXHUwMDNjIDApXFxuK1xcdFxcdGtzZnRfZXhpdF9mYWlsX21zZyhcXFwib3BlbiBwYWdlbWFwOiAlc1xcXFxuXFxcIiwgc3RyZXJyb3IoZXJybm8pKTtcXG4rXFxuK1xcdGtwZl9mZCA9IG9wZW4oS1BBR0VGTEFHU19GSUxFX1BBVEgsIE9fUkRPTkxZKTtcXG4rXFx0aWYgKGtwZl9mZCBcXHUwMDNjIDApXFxuK1xcdFxcdGtzZnRfZXhpdF9mYWlsX21zZyhcXFwib3BlbiBrcGFnZWZsYWdzOiAlc1xcXFxuXFxcIiwgc3RyZXJyb3IoZXJybm8pKTtcXG4rXFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBucl9ocGFnZXM7IGkrKywgYWRkciArPSBocGFnZV9zaXplKSB7XFxuK1xcdFxcdGNhdGVnb3JpZXMgPSBwYWdlbWFwX3NjYW5fZ2V0X2NhdGVnb3JpZXMocGFnZW1hcF9mZCwgYWRkcik7XFxuK1xcdFxcdHBmbiA9IHBhZ2VtYXBfZ2V0X3BmbihwYWdlbWFwX2ZkLCBhZGRyKTtcXG4rXFx0XFx0aWYgKHBmbiA9PSAtMVVMKVxcbitcXHRcXHRcXHRjb250aW51ZTtcXG4rXFx0XFx0aWYgKHBhZ2VmbGFnc19nZXQocGZuLCBrcGZfZmQsIFxcdTAwMjZrcGYpKVxcbitcXHRcXHRcXHRrc2Z0X2V4aXRfZmFpbF9tc2coXFxcInJlYWQga3BhZ2VmbGFnczogJXNcXFxcblxcXCIsIHN0cmVycm9yKGVycm5vKSk7XFxuK1xcdFxcdGlmICghKGNhdGVnb3JpZXMgXFx1MDAyNiBQQUdFX0lTX0hVR0UpKVxcbitcXHRcXHRcXHRjb250aW51ZTtcXG4rXFx0XFx0aWYgKCEoY2F0ZWdvcmllcyBcXHUwMDI2IFBBR0VfSVNfRklMRSkpXFxuK1xcdFxcdFxcdGNvbnRpbnVlO1xcbitcXHRcXHRpZiAoIShrcGYgXFx1MDAyNiBLUEZfU1dBUEJBQ0tFRCkpXFxuK1xcdFxcdFxcdGNvbnRpbnVlO1xcbitcXHRcXHRucisrO1xcbitcXHR9XFxuK1xcbitcXHRjbG9zZShwYWdlbWFwX2ZkKTtcXG4rXFx0Y2xvc2Uoa3BmX2ZkKTtcXG4rXFxuK1xcdHJldHVybiBleHBlY3RfaHVnZSA/IG5yID09IG5yX2hwYWdlcyA6IG5yID09IDA7XFxuIH1cXG4gXFxuIGludDY0X3QgYWxsb2NhdGVfdHJhbnNodWdlKHZvaWQgKnB0ciwgaW50IHBhZ2VtYXBfZmQpXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ZtX3V0aWwuaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ZtX3V0aWwuaFxcbmluZGV4IGVhOGZjOGZkZjBlYjAuLjBhMTYyN2YzNmVmYzMgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdm1fdXRpbC5oXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdm1fdXRpbC5oXFxuQEAgLTE4LDYgKzE4LDcgQEBcXG4gI2RlZmluZSBQTV9TV0FQICAgICAgICAgICAgICAgICAgICAgICBCSVRfVUxMKDYyKVxcbiAjZGVmaW5lIFBNX1BSRVNFTlQgICAgICAgICAgICAgICAgICAgIEJJVF9VTEwoNjMpXFxuIFxcbisjZGVmaW5lIEtQRl9TV0FQQkFDS0VEICAgICAgICAgICAgICAgIEJJVF9VTEwoMTQpXFxuICNkZWZpbmUgS1BGX0NPTVBPVU5EX0hFQUQgICAgICAgICAgICAgQklUX1VMTCgxNSlcXG4gI2RlZmluZSBLUEZfQ09NUE9VTkRfVEFJTCAgICAgICAgICAgICBCSVRfVUxMKDE2KVxcbiAjZGVmaW5lIEtQRl9IV1BPSVNPTiAgICAgICAgICAgICAgICAgIEJJVF9VTEwoMTkpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIwVDE5OjQ4OjQyLjA4OTI5MDQ3M1oiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjgzMDc5ODY0NDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgbWVtb3J5IG1hbmFnZW1lbnQgc2VsZnRlc3RzIGluIHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tLyBhbmQgZG9lcyBub3QgbWFrZSBhbnkgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBjb3JlIGtlcm5lbCwgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlIGNvZGUuIFRoZXJlZm9yZSwgaXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcga2VybmVsIGxvZ2ljIHRoYXQgcmVxdWlyZXMgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDFjYjU1ZmE5ODJmYmRlM2UzNmRjNjAxMGIxZWU3NmQ5ZmQzMWMyNzRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IEF1ZyAyMCAxOTo0ODozOCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2todWdlcGFnZWQuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2todWdlcGFnZWQuY1xuaW5kZXggMTBlOGRlZGNiMDg3ZC4uMmU0NjY1ZTZkNTg1MiAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2todWdlcGFnZWQuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0va2h1Z2VwYWdlZC5jXG5AQCAtNTMzLDcgKzUzMyw3IEBAIHN0YXRpYyB2b2lkIF9fbWFkdmlzZV9jb2xsYXBzZShjb25zdCBjaGFyICptc2csIGNoYXIgKnAsIGludCBucl9ocGFnZXMsXG4gXHRyZXQgPSBtYWR2aXNlX2NvbGxhcHNlX3JldHJ5KHAsIG5yX2hwYWdlcyAqIGhwYWdlX3BtZF9zaXplKTtcbiBcdGlmICgoKGJvb2wpcmV0KSA9PSBleHBlY3QpXG4gXHRcdGZhaWwoXCJGYWlsOiBCYWQgcmV0dXJuIHZhbHVlXCIpO1xuLVx0ZWxzZSBpZiAoIW9wcy1cdTAwM2VjaGVja19odWdlKHAsIGV4cGVjdCA/IG5yX2hwYWdlcyA6IDApKVxuK1x0ZWxzZSBpZiAoIW9wcy1cdTAwM2VjaGVja19odWdlKHAsIGV4cGVjdCA/IG5yX2hwYWdlcyA6IC1ucl9ocGFnZXMpKVxuIFx0XHRmYWlsKFwiRmFpbDogY2hlY2tfaHVnZSgpXCIpO1xuIFx0ZWxzZVxuIFx0XHRzdWNjZXNzKFwiT0tcIik7XG5AQCAtNTQ1LDcgKzU0NSw3IEBAIHN0YXRpYyB2b2lkIG1hZHZpc2VfY29sbGFwc2UoY29uc3QgY2hhciAqbXNnLCBjaGFyICpwLCBpbnQgbnJfaHBhZ2VzLFxuIFx0XHRcdCAgICAgc3RydWN0IG1lbV9vcHMgKm9wcywgYm9vbCBleHBlY3QpXG4ge1xuIFx0LyogU2FuaXR5IGNoZWNrICovXG4tXHRpZiAoIW9wcy1cdTAwM2VjaGVja19odWdlKHAsIDApKVxuK1x0aWYgKCFvcHMtXHUwMDNlY2hlY2tfaHVnZShwLCAtbnJfaHBhZ2VzKSlcbiBcdFx0a3NmdF9leGl0X2ZhaWxfbXNnKFwiVW5leHBlY3RlZCBodWdlIHBhZ2VcXG5cIik7XG4gXHRfX21hZHZpc2VfY29sbGFwc2UobXNnLCBwLCBucl9ocGFnZXMsIG9wcywgZXhwZWN0KTtcbiB9XG5AQCAtNTU4LDcgKzU1OCw3IEBAIHN0YXRpYyBib29sIHdhaXRfZm9yX3NjYW4oY29uc3QgY2hhciAqbXNnLCBjaGFyICpwLCBpbnQgbnJfaHBhZ2VzLFxuIFx0aW50IHRpbWVvdXQgPSA2OyAvKiAzIHNlY29uZHMgKi9cbiBcbiBcdC8qIFNhbml0eSBjaGVjayAqL1xuLVx0aWYgKCFvcHMtXHUwMDNlY2hlY2tfaHVnZShwLCAwKSlcbitcdGlmICghb3BzLVx1MDAzZWNoZWNrX2h1Z2UocCwgLW5yX2hwYWdlcykpXG4gXHRcdGtzZnRfZXhpdF9mYWlsX21zZyhcIlVuZXhwZWN0ZWQgaHVnZSBwYWdlXFxuXCIpO1xuIFxuIFx0bWFkdmlzZShwLCBucl9ocGFnZXMgKiBocGFnZV9wbWRfc2l6ZSwgTUFEVl9IVUdFUEFHRSk7XG5AQCAtNjA1LDcgKzYwNSw3IEBAIHN0YXRpYyB2b2lkIGtodWdlcGFnZWRfY29sbGFwc2UoY29uc3QgY2hhciAqbXNnLCBjaGFyICpwLCBpbnQgbnJfaHBhZ2VzLFxuIFx0aWYgKG9wcyAhPSBcdTAwMjZfX2Fub25fb3BzKVxuIFx0XHRvcHMtXHUwMDNlZmF1bHQocCwgMCwgbnJfaHBhZ2VzICogaHBhZ2VfcG1kX3NpemUpO1xuIFxuLVx0aWYgKG9wcy1cdTAwM2VjaGVja19odWdlKHAsIGV4cGVjdCA/IG5yX2hwYWdlcyA6IDApKVxuK1x0aWYgKG9wcy1cdTAwM2VjaGVja19odWdlKHAsIGV4cGVjdCA/IG5yX2hwYWdlcyA6IC1ucl9ocGFnZXMpKVxuIFx0XHRzdWNjZXNzKFwiT0tcIik7XG4gXHRlbHNlXG4gXHRcdGZhaWwoXCJGYWlsXCIpO1xuQEAgLTY0Myw3ICs2NDMsNyBAQCBzdGF0aWMgdm9pZCBhbGxvY19hdF9mYXVsdCh2b2lkKVxuIFxuIFx0bWFkdmlzZShwLCBwYWdlX3NpemUsIE1BRFZfRE9OVE5FRUQpO1xuIFx0a3NmdF9wcmludF9tc2coXCJTcGxpdCBodWdlIFBNRCBvbiBNQURWX0RPTlRORUVELi4uXCIpO1xuLVx0aWYgKGNoZWNrX2h1Z2VfYW5vbihwLCAwLCBocGFnZV9wbWRfc2l6ZSkpXG4rXHRpZiAoY2hlY2tfaHVnZV9hbm9uKHAsIC0xLCBocGFnZV9wbWRfc2l6ZSkpXG4gXHRcdHN1Y2Nlc3MoXCJPS1wiKTtcbiBcdGVsc2VcbiBcdFx0ZmFpbChcIkZhaWxcIik7XG5AQCAtODE1LDcgKzgxNSw3IEBAIHN0YXRpYyB2b2lkIGNvbGxhcHNlX3NpbmdsZV9wdGVfZW50cnlfY29tcG91bmQoc3RydWN0IGNvbGxhcHNlX2NvbnRleHQgKmMsIHN0cnVjXG4gXHRtYWR2aXNlKHAsIGhwYWdlX3BtZF9zaXplLCBNQURWX05PSFVHRVBBR0UpO1xuIFx0a3NmdF9wcmludF9tc2coXCJTcGxpdCBodWdlIHBhZ2UgbGVhdmluZyBzaW5nbGUgUFRFIG1hcHBpbmcgY29tcG91bmQgcGFnZS4uLlwiKTtcbiBcdG1hZHZpc2UocCArIHBhZ2Vfc2l6ZSwgaHBhZ2VfcG1kX3NpemUgLSBwYWdlX3NpemUsIE1BRFZfRE9OVE5FRUQpO1xuLVx0aWYgKG9wcy1cdTAwM2VjaGVja19odWdlKHAsIDApKVxuK1x0aWYgKG9wcy1cdTAwM2VjaGVja19odWdlKHAsIC0xKSlcbiBcdFx0c3VjY2VzcyhcIk9LXCIpO1xuIFx0ZWxzZVxuIFx0XHRmYWlsKFwiRmFpbFwiKTtcbkBAIC04MzYsNyArODM2LDcgQEAgc3RhdGljIHZvaWQgY29sbGFwc2VfZnVsbF9vZl9jb21wb3VuZChzdHJ1Y3QgY29sbGFwc2VfY29udGV4dCAqYywgc3RydWN0IG1lbV9vcHNcbiBcdGtzZnRfcHJpbnRfbXNnKFwiU3BsaXQgaHVnZSBwYWdlIGxlYXZpbmcgc2luZ2xlIFBURSBwYWdlIHRhYmxlIGZ1bGwgb2YgY29tcG91bmQgcGFnZXMuLi5cIik7XG4gXHRtYWR2aXNlKHAsIHBhZ2Vfc2l6ZSwgTUFEVl9OT0hVR0VQQUdFKTtcbiBcdG1hZHZpc2UocCwgaHBhZ2VfcG1kX3NpemUsIE1BRFZfTk9IVUdFUEFHRSk7XG4tXHRpZiAob3BzLVx1MDAzZWNoZWNrX2h1Z2UocCwgMCkpXG4rXHRpZiAob3BzLVx1MDAzZWNoZWNrX2h1Z2UocCwgLTEpKVxuIFx0XHRzdWNjZXNzKFwiT0tcIik7XG4gXHRlbHNlXG4gXHRcdGZhaWwoXCJGYWlsXCIpO1xuQEAgLTkwMyw3ICs5MDMsNyBAQCBzdGF0aWMgdm9pZCBjb2xsYXBzZV9mb3JrKHN0cnVjdCBjb2xsYXBzZV9jb250ZXh0ICpjLCBzdHJ1Y3QgbWVtX29wcyAqb3BzKVxuIFxuIFx0a3NmdF9wcmludF9tc2coXCJBbGxvY2F0ZSBzbWFsbCBwYWdlLi4uXCIpO1xuIFx0b3BzLVx1MDAzZWZhdWx0KHAsIDAsIHBhZ2Vfc2l6ZSk7XG4tXHRpZiAob3BzLVx1MDAzZWNoZWNrX2h1Z2UocCwgMCkpXG4rXHRpZiAob3BzLVx1MDAzZWNoZWNrX2h1Z2UocCwgLTEpKVxuIFx0XHRzdWNjZXNzKFwiT0tcIik7XG4gXHRlbHNlXG4gXHRcdGZhaWwoXCJGYWlsXCIpO1xuQEAgLTkxMSw3ICs5MTEsNyBAQCBzdGF0aWMgdm9pZCBjb2xsYXBzZV9mb3JrKHN0cnVjdCBjb2xsYXBzZV9jb250ZXh0ICpjLCBzdHJ1Y3QgbWVtX29wcyAqb3BzKVxuIFx0a3NmdF9wcmludF9tc2coXCJTaGFyZSBzbWFsbCBwYWdlIG92ZXIgZm9yaygpLi4uXCIpO1xuIFx0aWYgKCFmb3JrKCkpIHtcbiBcdFx0LyogRG8gbm90IHRvdWNoIHNldHRpbmdzIG9uIGNoaWxkIGV4aXQgKi9cbi1cdFx0aWYgKG9wcy1cdTAwM2VjaGVja19odWdlKHAsIDApKVxuK1x0XHRpZiAob3BzLVx1MDAzZWNoZWNrX2h1Z2UocCwgLTEpKVxuIFx0XHRcdHN1Y2Nlc3MoXCJPS1wiKTtcbiBcdFx0ZWxzZVxuIFx0XHRcdGZhaWwoXCJGYWlsXCIpO1xuQEAgLTkyOSw3ICs5MjksNyBAQCBzdGF0aWMgdm9pZCBjb2xsYXBzZV9mb3JrKHN0cnVjdCBjb2xsYXBzZV9jb250ZXh0ICpjLCBzdHJ1Y3QgbWVtX29wcyAqb3BzKVxuIFx0ZXhpdF9zdGF0dXMgPSBXRVhJVFNUQVRVUyh3c3RhdHVzKTtcbiBcbiBcdGtzZnRfcHJpbnRfbXNnKFwiQ2hlY2sgaWYgcGFyZW50IHN0aWxsIGhhcyBzbWFsbCBwYWdlLi4uXCIpO1xuLVx0aWYgKG9wcy1cdTAwM2VjaGVja19odWdlKHAsIDApKVxuK1x0aWYgKG9wcy1cdTAwM2VjaGVja19odWdlKHAsIC0xKSlcbiBcdFx0c3VjY2VzcyhcIk9LXCIpO1xuIFx0ZWxzZVxuIFx0XHRmYWlsKFwiRmFpbFwiKTtcbkBAIC05NTUsNyArOTU1LDcgQEAgc3RhdGljIHZvaWQgY29sbGFwc2VfZm9ya19jb21wb3VuZChzdHJ1Y3QgY29sbGFwc2VfY29udGV4dCAqYywgc3RydWN0IG1lbV9vcHMgKm9cbiBcdFx0a3NmdF9wcmludF9tc2coXCJTcGxpdCBodWdlIHBhZ2UgUE1EIGluIGNoaWxkIHByb2Nlc3MuLi5cIik7XG4gXHRcdG1hZHZpc2UocCwgcGFnZV9zaXplLCBNQURWX05PSFVHRVBBR0UpO1xuIFx0XHRtYWR2aXNlKHAsIGhwYWdlX3BtZF9zaXplLCBNQURWX05PSFVHRVBBR0UpO1xuLVx0XHRpZiAob3BzLVx1MDAzZWNoZWNrX2h1Z2UocCwgMCkpXG4rXHRcdGlmIChvcHMtXHUwMDNlY2hlY2tfaHVnZShwLCAtMSkpXG4gXHRcdFx0c3VjY2VzcyhcIk9LXCIpO1xuIFx0XHRlbHNlXG4gXHRcdFx0ZmFpbChcIkZhaWxcIik7XG5AQCAtMTAwMyw3ICsxMDAzLDcgQEAgc3RhdGljIHZvaWQgY29sbGFwc2VfbWF4X3B0ZXNfc2hhcmVkKHN0cnVjdCBjb2xsYXBzZV9jb250ZXh0ICpjLCBzdHJ1Y3QgbWVtX29wc1xuIFx0XHRrc2Z0X3ByaW50X21zZyhcIlRyaWdnZXIgQ29XIG9uIHBhZ2UgJWQgb2YgJWQuLi5cIixcbiBcdFx0XHRcdGhwYWdlX3BtZF9uciAtIG1heF9wdGVzX3NoYXJlZCAtIDEsIGhwYWdlX3BtZF9ucik7XG4gXHRcdG9wcy1cdTAwM2VmYXVsdChwLCAwLCAoaHBhZ2VfcG1kX25yIC0gbWF4X3B0ZXNfc2hhcmVkIC0gMSkgKiBwYWdlX3NpemUpO1xuLVx0XHRpZiAob3BzLVx1MDAzZWNoZWNrX2h1Z2UocCwgMCkpXG4rXHRcdGlmIChvcHMtXHUwMDNlY2hlY2tfaHVnZShwLCAtMSkpXG4gXHRcdFx0c3VjY2VzcyhcIk9LXCIpO1xuIFx0XHRlbHNlXG4gXHRcdFx0ZmFpbChcIkZhaWxcIik7XG5AQCAtMTAxNiw3ICsxMDE2LDcgQEAgc3RhdGljIHZvaWQgY29sbGFwc2VfbWF4X3B0ZXNfc2hhcmVkKHN0cnVjdCBjb2xsYXBzZV9jb250ZXh0ICpjLCBzdHJ1Y3QgbWVtX29wc1xuIFx0XHRcdCAgICAgICBocGFnZV9wbWRfbnIgLSBtYXhfcHRlc19zaGFyZWQsIGhwYWdlX3BtZF9ucik7XG4gXHRcdFx0b3BzLVx1MDAzZWZhdWx0KHAsIDAsIChocGFnZV9wbWRfbnIgLSBtYXhfcHRlc19zaGFyZWQpICpcbiBcdFx0XHRcdCAgICBwYWdlX3NpemUpO1xuLVx0XHRcdGlmIChvcHMtXHUwMDNlY2hlY2tfaHVnZShwLCAwKSlcbitcdFx0XHRpZiAob3BzLVx1MDAzZWNoZWNrX2h1Z2UocCwgLTEpKVxuIFx0XHRcdFx0c3VjY2VzcyhcIk9LXCIpO1xuIFx0XHRcdGVsc2VcbiBcdFx0XHRcdGZhaWwoXCJGYWlsXCIpO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3NwbGl0X2h1Z2VfcGFnZV90ZXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9zcGxpdF9odWdlX3BhZ2VfdGVzdC5jXG5pbmRleCAzMmI5OTE0NzJmNzQ0Li40ZmNkMzMwY2YwNzI2IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vc3BsaXRfaHVnZV9wYWdlX3Rlc3QuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vc3BsaXRfaHVnZV9wYWdlX3Rlc3QuY1xuQEAgLTMwMyw2ICszMDMsOSBAQCBzdGF0aWMgdm9pZCB2ZXJpZnlfcnNzX2Fub25fc3BsaXRfaHVnZV9wYWdlX2FsbF96ZXJvZXMoY2hhciAqb25lX3BhZ2UsIGludCBucl9ocFxuIFx0aWYgKCFyc3NfYW5vbl9iZWZvcmUpXG4gXHRcdGtzZnRfZXhpdF9mYWlsX21zZyhcIk5vIFJzc0Fub24gaXMgYWxsb2NhdGVkIGJlZm9yZSBzcGxpdFxcblwiKTtcbiBcbitcdC8qIFByZXZlbnQga2h1Z2VwYWdlZCBmcm9tIGNvbGxhcHNpbmcgdGhlIHBhZ2VzLiAqL1xuK1x0bWFkdmlzZShvbmVfcGFnZSwgbGVuLCBNQURWX05PSFVHRVBBR0UpO1xuK1xuIFx0Lyogc3BsaXQgYWxsIFRIUHMgKi9cbiBcdHdyaXRlX2RlYnVnZnMoUElEX0ZNVCwgZ2V0cGlkKCksICh1aW50NjRfdClvbmVfcGFnZSxcbiBcdFx0ICAgICAgKHVpbnQ2NF90KW9uZV9wYWdlICsgbGVuLCAwKTtcbkBAIC0zMTEsNyArMzE0LDcgQEAgc3RhdGljIHZvaWQgdmVyaWZ5X3Jzc19hbm9uX3NwbGl0X2h1Z2VfcGFnZV9hbGxfemVyb2VzKGNoYXIgKm9uZV9wYWdlLCBpbnQgbnJfaHBcbiBcdFx0aWYgKG9uZV9wYWdlW2ldICE9IChjaGFyKTApXG4gXHRcdFx0a3NmdF9leGl0X2ZhaWxfbXNnKFwiJWxkIGJ5dGUgY29ycnVwdGVkXFxuXCIsIGkpO1xuIFxuLVx0aWYgKCFjaGVja19odWdlX2Fub24ob25lX3BhZ2UsIDAsIHBtZF9wYWdlc2l6ZSkpXG4rXHRpZiAoIWNoZWNrX2h1Z2VfYW5vbihvbmVfcGFnZSwgLW5yX2hwYWdlcywgcG1kX3BhZ2VzaXplKSlcbiBcdFx0a3NmdF9leGl0X2ZhaWxfbXNnKFwiU3RpbGwgQW5vbkh1Z2VQYWdlcyBub3Qgc3BsaXRcXG5cIik7XG4gXG4gXHRyc3NfYW5vbl9hZnRlciA9IHJzc19hbm9uKCk7XG5AQCAtMzUwLDYgKzM1Myw5IEBAIHN0YXRpYyB2b2lkIHNwbGl0X3BtZF90aHBfdG9fb3JkZXIoaW50IG9yZGVyKVxuIFx0aWYgKCFjaGVja19odWdlX2Fub24ob25lX3BhZ2UsIDQsIHBtZF9wYWdlc2l6ZSkpXG4gXHRcdGtzZnRfZXhpdF9mYWlsX21zZyhcIk5vIFRIUCBpcyBhbGxvY2F0ZWRcXG5cIik7XG4gXG4rXHQvKiBQcmV2ZW50IGtodWdlcGFnZWQgZnJvbSBjb2xsYXBzaW5nIHRoZSBwYWdlcy4gKi9cbitcdG1hZHZpc2Uob25lX3BhZ2UsIGxlbiwgTUFEVl9OT0hVR0VQQUdFKTtcbitcbiBcdC8qIHNwbGl0IGFsbCBUSFBzICovXG4gXHR3cml0ZV9kZWJ1Z2ZzKFBJRF9GTVQsIGdldHBpZCgpLCAodWludDY0X3Qpb25lX3BhZ2UsXG4gXHRcdCh1aW50NjRfdClvbmVfcGFnZSArIGxlbiwgb3JkZXIpO1xuQEAgLTM2Niw3ICszNzIsNyBAQCBzdGF0aWMgdm9pZCBzcGxpdF9wbWRfdGhwX3RvX29yZGVyKGludCBvcmRlcilcbiBcdFx0XHRcdFx0ICAgKHBtZF9vcmRlciArIDEpKSlcbiBcdFx0a3NmdF9leGl0X2ZhaWxfbXNnKFwiVW5leHBlY3RlZCBUSFAgc3BsaXRcXG5cIik7XG4gXG4tXHRpZiAoIWNoZWNrX2h1Z2VfYW5vbihvbmVfcGFnZSwgMCwgcG1kX3BhZ2VzaXplKSlcbitcdGlmICghY2hlY2tfaHVnZV9hbm9uKG9uZV9wYWdlLCAtNCwgcG1kX3BhZ2VzaXplKSlcbiBcdFx0a3NmdF9leGl0X2ZhaWxfbXNnKFwiU3RpbGwgQW5vbkh1Z2VQYWdlcyBub3Qgc3BsaXRcXG5cIik7XG4gXG4gXHRrc2Z0X3Rlc3RfcmVzdWx0X3Bhc3MoXCJTcGxpdCBodWdlIHBhZ2VzIHRvIG9yZGVyICVkIHN1Y2Nlc3NmdWxcXG5cIiwgb3JkZXIpO1xuQEAgLTQzNiw2ICs0NDIsOSBAQCBzdGF0aWMgdm9pZCBzcGxpdF9wdGVfbWFwcGVkX3RocCh2b2lkKVxuIFx0XHRnb3RvIG91dDtcbiBcdH1cbiBcbitcdC8qIFByZXZlbnQga2h1Z2VwYWdlZCBmcm9tIGNvbGxhcHNpbmcgdGhlIHBhZ2VzLiAqL1xuK1x0bWFkdmlzZSh0aHBfYXJlYSwgdGhwX2FyZWFfc2l6ZSwgTUFEVl9OT0hVR0VQQUdFKTtcbitcbiBcdC8qIFNwbGl0IGFsbCBUSFBzIHRocm91Z2ggdGhlIHJlbWFwcGVkIHBhZ2VzLiAqL1xuIFx0d3JpdGVfZGVidWdmcyhQSURfRk1ULCBnZXRwaWQoKSwgKHVpbnQ2NF90KXBhZ2VfYXJlYSxcbiBcdFx0ICAgICAgKHVpbnQ2NF90KXBhZ2VfYXJlYSArIHBhZ2VfYXJlYV9zaXplLCAwKTtcbkBAIC02NjUsNiArNjc0LDggQEAgc3RhdGljIGludCBjcmVhdGVfcGFnZWNhY2hlX3RocF9hbmRfZmQoY29uc3QgY2hhciAqdGVzdGZpbGUsIHNpemVfdCBmZF9zaXplLFxuIFx0XHRrc2Z0X3Rlc3RfcmVzdWx0X3NraXAoXCJQYWdlY2FjaGUgZm9saW8gc3BsaXQgc2tpcHBlZFxcblwiKTtcbiBcdFx0cmV0dXJuIC0yO1xuIFx0fVxuK1x0LyogUHJldmVudCBraHVnZXBhZ2VkIGZyb20gY29sbGFwc2luZyB0aGUgcGFnZXMuICovXG4rXHRtYWR2aXNlKCphZGRyLCBmZF9zaXplLCBNQURWX05PSFVHRVBBR0UpO1xuIFx0cmV0dXJuIDA7XG4gZXJyX291dF9jbG9zZTpcbiBcdGNsb3NlKCpmZCk7XG5AQCAtNzM1LDcgKzc0Niw3IEBAIHN0YXRpYyB2b2lkIHNwbGl0X3RocF9pbl9wYWdlY2FjaGVfdG9fb3JkZXJfYXQoc2l6ZV90IGZkX3NpemUsXG4gXHRcdGdvdG8gb3V0O1xuIFx0fVxuIFxuLVx0aWYgKCFjaGVja19odWdlX2ZpbGUoYWRkciwgMCwgcG1kX3BhZ2VzaXplKSkge1xuK1x0aWYgKCFjaGVja19odWdlX2ZpbGUoYWRkciwgLShmZF9zaXplIC8gcG1kX3BhZ2VzaXplKSwgcG1kX3BhZ2VzaXplKSkge1xuIFx0XHRrc2Z0X3ByaW50X21zZyhcIlN0aWxsIEZpbGVQbWRNYXBwZWQgbm90IHNwbGl0XFxuXCIpO1xuIFx0XHRlcnIgPSBFWElUX0ZBSUxVUkU7XG4gXHRcdGdvdG8gb3V0O1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ZtX3V0aWwuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ZtX3V0aWwuY1xuaW5kZXggMzExZmM1YjQ1MTNlYi4uMTY2ZDVkNzkyODlmMyAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ZtX3V0aWwuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdm1fdXRpbC5jXG5AQCAtMTQsNiArMTQsOCBAQFxuICNkZWZpbmUgUE1EX1NJWkVfRklMRV9QQVRIIFwiL3N5cy9rZXJuZWwvbW0vdHJhbnNwYXJlbnRfaHVnZXBhZ2UvaHBhZ2VfcG1kX3NpemVcIlxuICNkZWZpbmUgU01BUF9GSUxFX1BBVEggXCIvcHJvYy9zZWxmL3NtYXBzXCJcbiAjZGVmaW5lIFNUQVRVU19GSUxFX1BBVEggXCIvcHJvYy9zZWxmL3N0YXR1c1wiXG4rI2RlZmluZSBQQUdFTUFQX0ZJTEVfUEFUSCBcIi9wcm9jL3NlbGYvcGFnZW1hcFwiXG4rI2RlZmluZSBLUEFHRUZMQUdTX0ZJTEVfUEFUSCBcIi9wcm9jL2twYWdlZmxhZ3NcIlxuICNkZWZpbmUgTUFYX0xJTkVfTEVOR1RIIDUwMFxuIFxuIHVuc2lnbmVkIGludCBfX3BhZ2Vfc2l6ZTtcbkBAIC0yMjksMzcgKzIzMSwxMjggQEAgY2hhciAqX19nZXRfc21hcF9lbnRyeSh2b2lkICphZGRyLCBjb25zdCBjaGFyICpwYXR0ZXJuLCBjaGFyICpidWYsIHNpemVfdCBsZW4pXG4gXHRyZXR1cm4gZW50cnk7XG4gfVxuIFxuLWJvb2wgX19jaGVja19odWdlKHZvaWQgKmFkZHIsIGNoYXIgKnBhdHRlcm4sIGludCBucl9ocGFnZXMsXG4tXHRcdCAgdWludDY0X3QgaHBhZ2Vfc2l6ZSlcbi17XG4tXHRjaGFyIGJ1ZmZlcltNQVhfTElORV9MRU5HVEhdO1xuLVx0dWludDY0X3QgdGhwID0gLTE7XG4tXHRjaGFyICplbnRyeTtcbi1cbi1cdGVudHJ5ID0gX19nZXRfc21hcF9lbnRyeShhZGRyLCBwYXR0ZXJuLCBidWZmZXIsIHNpemVvZihidWZmZXIpKTtcbi1cdGlmICghZW50cnkpXG4tXHRcdGdvdG8gZXJyX291dDtcbi1cbi1cdGlmIChzc2NhbmYoZW50cnksIFwiJTlcIiBTQ051NjQgXCIga0JcIiwgXHUwMDI2dGhwKSAhPSAxKVxuLVx0XHRrc2Z0X2V4aXRfZmFpbF9tc2coXCJSZWFkaW5nIHNtYXAgZXJyb3JcXG5cIik7XG4tXG4tZXJyX291dDpcbi1cdHJldHVybiB0aHAgPT0gKG5yX2hwYWdlcyAqIChocGFnZV9zaXplIFx1MDAzZVx1MDAzZSAxMCkpO1xuLX1cbi1cbiBib29sIGNoZWNrX2h1Z2VfYW5vbih2b2lkICphZGRyLCBpbnQgbnJfaHBhZ2VzLCB1aW50NjRfdCBocGFnZV9zaXplKVxuIHtcbi1cdHJldHVybiBfX2NoZWNrX2h1Z2UoYWRkciwgXCJBbm9uSHVnZVBhZ2VzOiBcIiwgbnJfaHBhZ2VzLCBocGFnZV9zaXplKTtcbitcdGludCBpLCBwYWdlbWFwX2ZkLCBuciA9IDA7XG4rXHR1aW50NjRfdCBjYXRlZ29yaWVzO1xuK1x0Ym9vbCBleHBlY3RfaHVnZTtcbitcbitcdGlmIChucl9ocGFnZXMgPT0gMCB8fCBocGFnZV9zaXplID09IDApXG4rXHRcdHJldHVybiBmYWxzZTtcbitcbitcdGlmIChucl9ocGFnZXMgXHUwMDNjIDApIHtcbitcdFx0bnJfaHBhZ2VzID0gLW5yX2hwYWdlcztcbitcdFx0ZXhwZWN0X2h1Z2UgPSBmYWxzZTtcbitcdH0gZWxzZVxuK1x0XHRleHBlY3RfaHVnZSA9IHRydWU7XG4rXG4rXHRwYWdlbWFwX2ZkID0gb3BlbihQQUdFTUFQX0ZJTEVfUEFUSCwgT19SRE9OTFkpO1xuK1x0aWYgKHBhZ2VtYXBfZmQgXHUwMDNjIDApXG4rXHRcdGtzZnRfZXhpdF9mYWlsX21zZyhcIm9wZW4gcGFnZW1hcDogJXNcXG5cIiwgc3RyZXJyb3IoZXJybm8pKTtcbitcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG5yX2hwYWdlczsgaSsrLCBhZGRyICs9IGhwYWdlX3NpemUpIHtcbitcdFx0Y2F0ZWdvcmllcyA9IHBhZ2VtYXBfc2Nhbl9nZXRfY2F0ZWdvcmllcyhwYWdlbWFwX2ZkLCBhZGRyKTtcbitcdFx0aWYgKCEoY2F0ZWdvcmllcyBcdTAwMjYgUEFHRV9JU19IVUdFKSlcbitcdFx0XHRjb250aW51ZTtcbitcdFx0aWYgKGNhdGVnb3JpZXMgXHUwMDI2IFBBR0VfSVNfRklMRSlcbitcdFx0XHRjb250aW51ZTtcbitcdFx0bnIrKztcbitcdH1cbitcbitcdGNsb3NlKHBhZ2VtYXBfZmQpO1xuK1x0cmV0dXJuIGV4cGVjdF9odWdlID8gbnIgPT0gbnJfaHBhZ2VzIDogbnIgPT0gMDtcbiB9XG4gXG4gYm9vbCBjaGVja19odWdlX2ZpbGUodm9pZCAqYWRkciwgaW50IG5yX2hwYWdlcywgdWludDY0X3QgaHBhZ2Vfc2l6ZSlcbiB7XG4tXHRyZXR1cm4gX19jaGVja19odWdlKGFkZHIsIFwiRmlsZVBtZE1hcHBlZDpcIiwgbnJfaHBhZ2VzLCBocGFnZV9zaXplKTtcbitcdGludCBpLCBwYWdlbWFwX2ZkLCBrcGZfZmQsIG5yID0gMDtcbitcdHVuc2lnbmVkIGxvbmcgcGZuO1xuK1x0dWludDY0X3QgY2F0ZWdvcmllcywga3BmO1xuK1x0Ym9vbCBleHBlY3RfaHVnZTtcbitcbitcdGlmIChucl9ocGFnZXMgPT0gMCB8fCBocGFnZV9zaXplID09IDApXG4rXHRcdHJldHVybiBmYWxzZTtcbitcbitcdGlmIChucl9ocGFnZXMgXHUwMDNjIDApIHtcbitcdFx0bnJfaHBhZ2VzID0gLW5yX2hwYWdlcztcbitcdFx0ZXhwZWN0X2h1Z2UgPSBmYWxzZTtcbitcdH0gZWxzZVxuK1x0XHRleHBlY3RfaHVnZSA9IHRydWU7XG4rXG4rXHRwYWdlbWFwX2ZkID0gb3BlbihQQUdFTUFQX0ZJTEVfUEFUSCwgT19SRE9OTFkpO1xuK1x0aWYgKHBhZ2VtYXBfZmQgXHUwMDNjIDApXG4rXHRcdGtzZnRfZXhpdF9mYWlsX21zZyhcIm9wZW4gcGFnZW1hcDogJXNcXG5cIiwgc3RyZXJyb3IoZXJybm8pKTtcbitcbitcdGtwZl9mZCA9IG9wZW4oS1BBR0VGTEFHU19GSUxFX1BBVEgsIE9fUkRPTkxZKTtcbitcdGlmIChrcGZfZmQgXHUwMDNjIDApXG4rXHRcdGtzZnRfZXhpdF9mYWlsX21zZyhcIm9wZW4ga3BhZ2VmbGFnczogJXNcXG5cIiwgc3RyZXJyb3IoZXJybm8pKTtcbitcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG5yX2hwYWdlczsgaSsrLCBhZGRyICs9IGhwYWdlX3NpemUpIHtcbitcdFx0Y2F0ZWdvcmllcyA9IHBhZ2VtYXBfc2Nhbl9nZXRfY2F0ZWdvcmllcyhwYWdlbWFwX2ZkLCBhZGRyKTtcbitcdFx0cGZuID0gcGFnZW1hcF9nZXRfcGZuKHBhZ2VtYXBfZmQsIGFkZHIpO1xuK1x0XHRpZiAocGZuID09IC0xVUwpXG4rXHRcdFx0Y29udGludWU7XG4rXHRcdGlmIChwYWdlZmxhZ3NfZ2V0KHBmbiwga3BmX2ZkLCBcdTAwMjZrcGYpKVxuK1x0XHRcdGtzZnRfZXhpdF9mYWlsX21zZyhcInJlYWQga3BhZ2VmbGFnczogJXNcXG5cIiwgc3RyZXJyb3IoZXJybm8pKTtcbitcdFx0aWYgKCEoY2F0ZWdvcmllcyBcdTAwMjYgUEFHRV9JU19IVUdFKSlcbitcdFx0XHRjb250aW51ZTtcbitcdFx0aWYgKCEoY2F0ZWdvcmllcyBcdTAwMjYgUEFHRV9JU19GSUxFKSlcbitcdFx0XHRjb250aW51ZTtcbitcdFx0aWYgKGtwZiBcdTAwMjYgS1BGX1NXQVBCQUNLRUQpXG4rXHRcdFx0Y29udGludWU7XG4rXHRcdG5yKys7XG4rXHR9XG4rXG4rXHRjbG9zZShwYWdlbWFwX2ZkKTtcbitcdGNsb3NlKGtwZl9mZCk7XG4rXG4rXHRyZXR1cm4gZXhwZWN0X2h1Z2UgPyBuciA9PSBucl9ocGFnZXMgOiBuciA9PSAwO1xuIH1cbiBcbiBib29sIGNoZWNrX2h1Z2Vfc2htZW0odm9pZCAqYWRkciwgaW50IG5yX2hwYWdlcywgdWludDY0X3QgaHBhZ2Vfc2l6ZSlcbiB7XG4tXHRyZXR1cm4gX19jaGVja19odWdlKGFkZHIsIFwiU2htZW1QbWRNYXBwZWQ6XCIsIG5yX2hwYWdlcywgaHBhZ2Vfc2l6ZSk7XG4rXHRpbnQgaSwgcGFnZW1hcF9mZCwga3BmX2ZkLCBuciA9IDA7XG4rXHR1bnNpZ25lZCBsb25nIHBmbjtcbitcdHVpbnQ2NF90IGNhdGVnb3JpZXMsIGtwZjtcbitcdGJvb2wgZXhwZWN0X2h1Z2U7XG4rXG4rXHRpZiAobnJfaHBhZ2VzID09IDAgfHwgaHBhZ2Vfc2l6ZSA9PSAwKVxuK1x0XHRyZXR1cm4gZmFsc2U7XG4rXG4rXHRpZiAobnJfaHBhZ2VzIFx1MDAzYyAwKSB7XG4rXHRcdG5yX2hwYWdlcyA9IC1ucl9ocGFnZXM7XG4rXHRcdGV4cGVjdF9odWdlID0gdHJ1ZTtcbitcdH0gZWxzZVxuK1x0XHRleHBlY3RfaHVnZSA9IGZhbHNlO1xuK1xuK1x0cGFnZW1hcF9mZCA9IG9wZW4oUEFHRU1BUF9GSUxFX1BBVEgsIE9fUkRPTkxZKTtcbitcdGlmIChwYWdlbWFwX2ZkIFx1MDAzYyAwKVxuK1x0XHRrc2Z0X2V4aXRfZmFpbF9tc2coXCJvcGVuIHBhZ2VtYXA6ICVzXFxuXCIsIHN0cmVycm9yKGVycm5vKSk7XG4rXG4rXHRrcGZfZmQgPSBvcGVuKEtQQUdFRkxBR1NfRklMRV9QQVRILCBPX1JET05MWSk7XG4rXHRpZiAoa3BmX2ZkIFx1MDAzYyAwKVxuK1x0XHRrc2Z0X2V4aXRfZmFpbF9tc2coXCJvcGVuIGtwYWdlZmxhZ3M6ICVzXFxuXCIsIHN0cmVycm9yKGVycm5vKSk7XG4rXG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBucl9ocGFnZXM7IGkrKywgYWRkciArPSBocGFnZV9zaXplKSB7XG4rXHRcdGNhdGVnb3JpZXMgPSBwYWdlbWFwX3NjYW5fZ2V0X2NhdGVnb3JpZXMocGFnZW1hcF9mZCwgYWRkcik7XG4rXHRcdHBmbiA9IHBhZ2VtYXBfZ2V0X3BmbihwYWdlbWFwX2ZkLCBhZGRyKTtcbitcdFx0aWYgKHBmbiA9PSAtMVVMKVxuK1x0XHRcdGNvbnRpbnVlO1xuK1x0XHRpZiAocGFnZWZsYWdzX2dldChwZm4sIGtwZl9mZCwgXHUwMDI2a3BmKSlcbitcdFx0XHRrc2Z0X2V4aXRfZmFpbF9tc2coXCJyZWFkIGtwYWdlZmxhZ3M6ICVzXFxuXCIsIHN0cmVycm9yKGVycm5vKSk7XG4rXHRcdGlmICghKGNhdGVnb3JpZXMgXHUwMDI2IFBBR0VfSVNfSFVHRSkpXG4rXHRcdFx0Y29udGludWU7XG4rXHRcdGlmICghKGNhdGVnb3JpZXMgXHUwMDI2IFBBR0VfSVNfRklMRSkpXG4rXHRcdFx0Y29udGludWU7XG4rXHRcdGlmICghKGtwZiBcdTAwMjYgS1BGX1NXQVBCQUNLRUQpKVxuK1x0XHRcdGNvbnRpbnVlO1xuK1x0XHRucisrO1xuK1x0fVxuK1xuK1x0Y2xvc2UocGFnZW1hcF9mZCk7XG4rXHRjbG9zZShrcGZfZmQpO1xuK1xuK1x0cmV0dXJuIGV4cGVjdF9odWdlID8gbnIgPT0gbnJfaHBhZ2VzIDogbnIgPT0gMDtcbiB9XG4gXG4gaW50NjRfdCBhbGxvY2F0ZV90cmFuc2h1Z2Uodm9pZCAqcHRyLCBpbnQgcGFnZW1hcF9mZClcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS92bV91dGlsLmggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS92bV91dGlsLmhcbmluZGV4IGVhOGZjOGZkZjBlYjAuLjBhMTYyN2YzNmVmYzMgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS92bV91dGlsLmhcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ZtX3V0aWwuaFxuQEAgLTE4LDYgKzE4LDcgQEBcbiAjZGVmaW5lIFBNX1NXQVAgICAgICAgICAgICAgICAgICAgICAgIEJJVF9VTEwoNjIpXG4gI2RlZmluZSBQTV9QUkVTRU5UICAgICAgICAgICAgICAgICAgICBCSVRfVUxMKDYzKVxuIFxuKyNkZWZpbmUgS1BGX1NXQVBCQUNLRUQgICAgICAgICAgICAgICAgQklUX1VMTCgxNClcbiAjZGVmaW5lIEtQRl9DT01QT1VORF9IRUFEICAgICAgICAgICAgIEJJVF9VTEwoMTUpXG4gI2RlZmluZSBLUEZfQ09NUE9VTkRfVEFJTCAgICAgICAgICAgICBCSVRfVUxMKDE2KVxuICNkZWZpbmUgS1BGX0hXUE9JU09OICAgICAgICAgICAgICAgICAgQklUX1VMTCgxOSlcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIwVDE5OjQ4OjQyLjA4OTI5MjU1M1oiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjgzMDc5NTUyODgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQXNzZXNzaW5nIHRoZSBGdXp6aW5nIEltcGFjdCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gVGhpcyBwYXRjaCBpcyB0b3VjaGluZyBmaWxlcyB3aXRoaW4gYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2AuIFNwZWNpZmljYWxseSwgSSdtIHNlZWluZyBjaGFuZ2VzIGluIGBraHVnZXBhZ2VkLmNgLCBgc3BsaXRfaHVnZV9wYWdlX3Rlc3QuY2AsIGB2bV91dGlsLmNgLCBhbmQgYHZtX3V0aWwuaGAuIFJpZ2h0IG9mZiB0aGUgYmF0LCB0aGVzZSBhcmUgYWxsIHNlbGZ0ZXN0cyByZWxhdGVkIHRvIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0uIFRoYXQncyBnb29kOyBpdCBrZWVwcyBpdCBzb21ld2hhdCBjb250YWluZWQuXG5cbk5vdywgYSBjcml0aWNhbCBwb2ludCBoZXJlIOKAkyBhbmQgSSdtIHJlYWxseSBtYWtpbmcgc3VyZSB0byBuYWlsIHRoaXMgZG93biDigJMgdGhpcyBwYXRjaCBpc24ndCB0b3VjaGluZyBhbnkgb2YgdGhlIGNvcmUga2VybmVsIGNvZGUsIGFueSBkcml2ZXJzLCBvciBhbnkgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIHN0dWZmLiBJdCdzIHNvbGVseSBjb25maW5lZCB0byB0aGUgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2AgZGlyZWN0b3J5LiBObyByZWFsIGxvZ2ljIGlzIGdldHRpbmcgY2hhbmdlZC4gSnVzdCBkb3VibGUgY2hlY2tpbmcuLi4geXVwLCB0aG9zZSBhcmUgYWxsIHRoZSBmaWxlcy5cblxuR2l2ZW4gdGhhdCwgbXkgY29uY2x1c2lvbiBpcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkLiBTaW5jZSB0aGlzIHBhdGNoICpvbmx5KiBtb2RpZmllcyBzZWxmdGVzdHMsIGl0J3Mgbm90IGludHJvZHVjaW5nIGFueSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHdvdWxkIHdhcnJhbnQgZnV6emluZy4gV2UncmUgbm90IGdldHRpbmcgYW55IG5ldyBjb2RlIHBhdGhzIG9yIGxvZ2ljIHRoYXQgbmVlZCB0byBiZSBwb2tlZCBhdC4gU28sIEkgd2lsbCByZXR1cm4gYFdvcnRoRnV6emluZz1mYWxzZWAuIFRoZSByZWFzb25pbmcgaXMgY2xlYXI6IHRoZSBjaGFuZ2VzIGFyZSBpc29sYXRlZCB0byBzZWxmdGVzdHMsIGFuZCB0aGVyZSdzIG5vIGZ1bmN0aW9uYWwga2VybmVsIGxvZ2ljIGludm9sdmVkLiBUaGF0J3MgdGhlIHJlc3VsdC5cblxuXG4iLCJJbnB1dFRva2VucyI6NzI2OCwiT3V0cHV0VG9rZW5zIjo4NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMwNSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIwVDE5OjQ4OjUwLjM5NzI1MDUzMVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjQ2MjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggb25seSBtb2RpZmllcyBtZW1vcnkgbWFuYWdlbWVudCBzZWxmdGVzdHMgaW4gdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vIGFuZCBkb2VzIG5vdCBtYWtlIGFueSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGNvcmUga2VybmVsLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmUgY29kZS4gVGhlcmVmb3JlLCBpdCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBrZXJuZWwgbG9naWMgdGhhdCByZXF1aXJlcyBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggb25seSBtb2RpZmllcyBtZW1vcnkgbWFuYWdlbWVudCBzZWxmdGVzdHMgaW4gdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vIGFuZCBkb2VzIG5vdCBtYWtlIGFueSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGNvcmUga2VybmVsLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmUgY29kZS4gVGhlcmVmb3JlLCBpdCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBrZXJuZWwgbG9naWMgdGhhdCByZXF1aXJlcyBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjBUMTk6NDg6NTAuMzk3Mjc4OTMxWiIsIlNlcSI6NSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI2NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowp72fc[1] Phase: Running StartedAt: 2026-08-20 19:49:01 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowp72fc[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-08-20 19:49:01 +0000 UTC FinishedAt: 2026-08-20 19:49:06 +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,}