Name: series-workflow7xgs8 Phase: Failed StartedAt: 2026-09-08 16:31:19 +0000 UTC FinishedAt: 2026-09-08 16:54:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7xgs8[0] Phase: Succeeded StartedAt: 2026-09-08 16:31:19 +0000 UTC FinishedAt: 2026-09-08 16:53:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7xgs8[0].run-triage Phase: Succeeded StartedAt: 2026-09-08 16:31:19 +0000 UTC FinishedAt: 2026-09-08 16:53:54 +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+CgkJCTx0ZD4yMDI2LzA5LzA4IDE2OjUzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb25seSBtb2RpZmllcyB1c2VyLXNwYWNlIHNlbGZ0ZXN0IGNvZGUgaW4gdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGFnZW1hcF9pb2N0bC5jLCB3aGljaCBkb2VzIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSBvciBrZXJuZWwtc3BhY2UgbG9naWMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDE2OjUzPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgZjg4NmJiMDg3Y2QyOWIwNDZiNjVkNGU4OGM0ZTQ3ZjRhYzM5NTAzZFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgU2VwIDggMTY6NTM6MzQgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGFnZW1hcF9pb2N0bC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGFnZW1hcF9pb2N0bC5jXG5pbmRleCBlYWRjNzE1OWNhNWI5Li5kOWE0ZmI3ODJlY2ZlIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGFnZW1hcF9pb2N0bC5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wYWdlbWFwX2lvY3RsLmNcbkBAIC0zNiwxNSAmIzQzOzM2LDE1IEBAXG4gXG4gI2RlZmluZSBURVNUX0lURVJBVElPTlMgMTAwXG4gI2RlZmluZSBQQUdFTUFQIFwmIzM0Oy9wcm9jL3NlbGYvcGFnZW1hcFwmIzM0O1xuLWludCBwYWdlbWFwX2ZkO1xuLWludCB1ZmZkO1xuLXNpemVfdCBwYWdlX3NpemU7XG4tc2l6ZV90IGhwYWdlX3NpemU7XG4tY29uc3QgY2hhciAqcHJvZ25hbWU7XG4mIzQzO3N0YXRpYyBpbnQgcGFnZW1hcF9mZDtcbiYjNDM7c3RhdGljIGludCB1ZmZkO1xuJiM0MztzdGF0aWMgc2l6ZV90IHBhZ2Vfc2l6ZTtcbiYjNDM7c3RhdGljIHNpemVfdCBocGFnZV9zaXplO1xuJiM0MztzdGF0aWMgY29uc3QgY2hhciAqcHJvZ25hbWU7XG4gXG4gI2RlZmluZSBMRU4ocmVnaW9uKVx0KChyZWdpb24uZW5kIC0gcmVnaW9uLnN0YXJ0KS9wYWdlX3NpemUpXG4gXG4tc3RhdGljIGxvbmcgcGFnZW1hcF9pb2N0bCh2b2lkICpzdGFydCwgaW50IGxlbiwgdm9pZCAqdmVjLCBpbnQgdmVjX2xlbiwgaW50IGZsYWcsXG4mIzQzO3N0YXRpYyBsb25nIHBhZ2VtYXBfaW9jdGwodm9pZCAqc3RhcnQsIHNpemVfdCBsZW4sIHZvaWQgKnZlYywgc2l6ZV90IHZlY19sZW4sIGludCBmbGFnLFxuIFx0XHRcdCAgaW50IG1heF9wYWdlcywgbG9uZyByZXF1aXJlZF9tYXNrLCBsb25nIGFueW9mX21hc2ssIGxvbmcgZXhjbHVkZWRfbWFzayxcbiBcdFx0XHQgIGxvbmcgcmV0dXJuX21hc2spXG4ge1xuQEAgLTY1LDcgJiM0Mzs2NSw3IEBAIHN0YXRpYyBsb25nIHBhZ2VtYXBfaW9jdGwodm9pZCAqc3RhcnQsIGludCBsZW4sIHZvaWQgKnZlYywgaW50IHZlY19sZW4sIGludCBmbGFnXG4gXHRyZXR1cm4gaW9jdGwocGFnZW1hcF9mZCwgUEFHRU1BUF9TQ0FOLCBcdTAwMjZhcmcpO1xuIH1cbiBcbi1zdGF0aWMgbG9uZyBwYWdlbWFwX2lvYyh2b2lkICpzdGFydCwgaW50IGxlbiwgdm9pZCAqdmVjLCBpbnQgdmVjX2xlbiwgaW50IGZsYWcsXG4mIzQzO3N0YXRpYyBsb25nIHBhZ2VtYXBfaW9jKHZvaWQgKnN0YXJ0LCBzaXplX3QgbGVuLCB2b2lkICp2ZWMsIHNpemVfdCB2ZWNfbGVuLCBpbnQgZmxhZyxcbiBcdFx0XHRpbnQgbWF4X3BhZ2VzLCBsb25nIHJlcXVpcmVkX21hc2ssIGxvbmcgYW55b2ZfbWFzaywgbG9uZyBleGNsdWRlZF9tYXNrLFxuIFx0XHRcdGxvbmcgcmV0dXJuX21hc2ssIGxvbmcgKndhbGtfZW5kKVxuIHtcbkBAIC05Miw4ICYjNDM7OTIsNyBAQCBzdGF0aWMgbG9uZyBwYWdlbWFwX2lvYyh2b2lkICpzdGFydCwgaW50IGxlbiwgdm9pZCAqdmVjLCBpbnQgdmVjX2xlbiwgaW50IGZsYWcsXG4gXHRyZXR1cm4gcmV0O1xuIH1cbiBcbi1cbi1pbnQgaW5pdF91ZmZkKHZvaWQpXG4mIzQzO3N0YXRpYyBpbnQgaW5pdF91ZmZkKHZvaWQpXG4ge1xuIFx0c3RydWN0IHVmZmRpb19hcGkgdWZmZGlvX2FwaTtcbiBcbkBAIC0xMTYsNyAmIzQzOzExNSw3IEBAIGludCBpbml0X3VmZmQodm9pZClcbiBcdHJldHVybiAwO1xuIH1cbiBcbi1pbnQgd3BfaW5pdCh2b2lkICphZGRyLCBsb25nIHNpemUpXG4mIzQzO3N0YXRpYyBpbnQgd3BfaW5pdCh2b2lkICphZGRyLCBzaXplX3Qgc2l6ZSlcbiB7XG4gXHRzdHJ1Y3QgdWZmZGlvX3JlZ2lzdGVyIHVmZmRpb19yZWdpc3RlcjtcbiBcdHN0cnVjdCB1ZmZkaW9fd3JpdGVwcm90ZWN0IHdwO1xuQEAgLTE0MCw3ICYjNDM7MTM5LDcgQEAgaW50IHdwX2luaXQodm9pZCAqYWRkciwgbG9uZyBzaXplKVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuLWludCB3cF9mcmVlKHZvaWQgKmFkZHIsIGxvbmcgc2l6ZSlcbiYjNDM7c3RhdGljIGludCB3cF9mcmVlKHZvaWQgKmFkZHIsIHNpemVfdCBzaXplKVxuIHtcbiBcdHN0cnVjdCB1ZmZkaW9fcmVnaXN0ZXIgdWZmZGlvX3JlZ2lzdGVyO1xuIFxuQEAgLTE1Miw3ICYjNDM7MTUxLDcgQEAgaW50IHdwX2ZyZWUodm9pZCAqYWRkciwgbG9uZyBzaXplKVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuLWludCB3cF9hZGRyX3JhbmdlKHZvaWQgKmFkZHIsIGludCBzaXplKVxuJiM0MztzdGF0aWMgaW50IHdwX2FkZHJfcmFuZ2Uodm9pZCAqYWRkciwgc2l6ZV90IHNpemUpXG4ge1xuIFx0aWYgKHBhZ2VtYXBfaW9jdGwoYWRkciwgc2l6ZSwgTlVMTCwgMCxcbiBcdFx0XHQgIFBNX1NDQU5fV1BfTUFUQ0hJTkcgfCBQTV9TQ0FOX0NIRUNLX1dQQVNZTkMsXG5AQCAtMTYyLDcgJiM0MzsxNjEsNyBAQCBpbnQgd3BfYWRkcl9yYW5nZSh2b2lkICphZGRyLCBpbnQgc2l6ZSlcbiBcdHJldHVybiAwO1xuIH1cbiBcbi12b2lkICpnZXRodWdldGxiX21lbShpbnQgc2l6ZSwgaW50ICpzaG1pZClcbiYjNDM7c3RhdGljIHZvaWQgKmdldGh1Z2V0bGJfbWVtKHNpemVfdCBzaXplLCBpbnQgKnNobWlkKVxuIHtcbiBcdGNoYXIgKm1lbTtcbiBcbkBAIC0xODYsOSAmIzQzOzE4NSwxMCBAQCB2b2lkICpnZXRodWdldGxiX21lbShpbnQgc2l6ZSwgaW50ICpzaG1pZClcbiBcdHJldHVybiBtZW07XG4gfVxuIFxuLWludCB1c2VyZmF1bHRmZF90ZXN0cyh2b2lkKVxuJiM0MztzdGF0aWMgaW50IHVzZXJmYXVsdGZkX3Rlc3RzKHZvaWQpXG4ge1xuLVx0bG9uZyBtZW1fc2l6ZSwgdmVjX3NpemUsIHdyaXR0ZW4sIG51bV9wYWdlcyA9IDE2O1xuJiM0MztcdHNpemVfdCBtZW1fc2l6ZSwgdmVjX3NpemUsIG51bV9wYWdlcyA9IDE2O1xuJiM0MztcdGxvbmcgd3JpdHRlbjtcbiBcdGNoYXIgKm1lbSwgKnZlYztcbiBcbiBcdG1lbV9zaXplID0gbnVtX3BhZ2VzICogcGFnZV9zaXplO1xuQEAgLTIyOSw5ICYjNDM7MjI5LDEwIEBAIGludCB1c2VyZmF1bHRmZF90ZXN0cyh2b2lkKVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuLWludCBnZXRfcmVhZHMoc3RydWN0IHBhZ2VfcmVnaW9uICp2ZWMsIGludCB2ZWNfc2l6ZSlcbiYjNDM7c3RhdGljIGludCBnZXRfcmVhZHMoc3RydWN0IHBhZ2VfcmVnaW9uICp2ZWMsIHNpemVfdCB2ZWNfc2l6ZSlcbiB7XG4tXHRpbnQgaSwgc3VtID0gMDtcbiYjNDM7XHRzaXplX3QgaTtcbiYjNDM7XHRpbnQgc3VtID0gMDtcbiBcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHZlY19zaXplOyBpJiM0MzsmIzQzOylcbiBcdFx0c3VtICYjNDM7PSBMRU4odmVjW2ldKTtcbkBAIC0yMzksOSAmIzQzOzI0MCw5IEBAIGludCBnZXRfcmVhZHMoc3RydWN0IHBhZ2VfcmVnaW9uICp2ZWMsIGludCB2ZWNfc2l6ZSlcbiBcdHJldHVybiBzdW07XG4gfVxuIFxuLWludCBzYW5pdHlfdGVzdHNfc2Qodm9pZClcbiYjNDM7c3RhdGljIGludCBzYW5pdHlfdGVzdHNfc2Qodm9pZClcbiB7XG4tXHR1bnNpZ25lZCBsb25nIGxvbmcgbWVtX3NpemUsIHZlY19zaXplLCBpLCB0b3RhbF9wYWdlcyA9IDA7XG4mIzQzO1x0c2l6ZV90IG1lbV9zaXplLCB2ZWNfc2l6ZSwgaSwgdG90YWxfcGFnZXMgPSAwO1xuIFx0bG9uZyByZXQsIHJldDIsIHJldDM7XG4gXHRpbnQgbnVtX3BhZ2VzID0gMTAwMDtcbiBcdGludCB0b3RhbF93cml0ZXMsIHRvdGFsX3JlYWRzLCByZWFkcywgY291bnQ7XG5AQCAtMzMxLDcgJiM0MzszMzIsNyBAQCBpbnQgc2FuaXR5X3Rlc3RzX3NkKHZvaWQpXG4gXHRpZiAocmV0IFx1MDAzYyAwKVxuIFx0XHRrc2Z0X2V4aXRfZmFpbF9tc2coXCYjMzQ7ZXJyb3IgJWxkICVkICVzXFxuXCYjMzQ7LCByZXQsIGVycm5vLCBzdHJlcnJvcihlcnJubykpO1xuIFxuLVx0a3NmdF90ZXN0X3Jlc3VsdCgodW5zaWduZWQgbG9uZyBsb25nKXJldCA9PSBtZW1fc2l6ZS8ocGFnZV9zaXplICogMiksXG4mIzQzO1x0a3NmdF90ZXN0X3Jlc3VsdCgoc2l6ZV90KXJldCA9PSBtZW1fc2l6ZS8ocGFnZV9zaXplICogMiksXG4gXHRcdFx0IFwmIzM0OyVzIFJlcGVhdGVkIHBhdHRlcm4gb2Ygd3JpdHRlbiBhbmQgbm9uLXdyaXR0ZW4gcGFnZXNcXG5cJiMzNDssIF9fZnVuY19fKTtcbiBcbiBcdC8qIDQuIFJlcGVhdGVkIHBhdHRlcm4gb2Ygd3JpdHRlbiBhbmQgbm9uLXdyaXR0ZW4gcGFnZXMgaW4gcGFydHMgKi9cbkBAIC02ODIsOSAmIzQzOzY4Myw5IEBAIGludCBzYW5pdHlfdGVzdHNfc2Qodm9pZClcbiBcdHJldHVybiAwO1xuIH1cbiBcbi1pbnQgYmFzZV90ZXN0cyhjaGFyICpwcmVmaXgsIGNoYXIgKm1lbSwgdW5zaWduZWQgbG9uZyBsb25nIG1lbV9zaXplLCBpbnQgc2tpcClcbiYjNDM7c3RhdGljIGludCBiYXNlX3Rlc3RzKGNoYXIgKnByZWZpeCwgY2hhciAqbWVtLCBzaXplX3QgbWVtX3NpemUsIGludCBza2lwKVxuIHtcbi1cdHVuc2lnbmVkIGxvbmcgbG9uZyB2ZWNfc2l6ZTtcbiYjNDM7XHRzaXplX3QgdmVjX3NpemU7XG4gXHRpbnQgd3JpdHRlbjtcbiBcdHN0cnVjdCBwYWdlX3JlZ2lvbiAqdmVjLCAqdmVjMjtcbiBcbkBAIC03ODcsNyAmIzQzOzc4OCw3IEBAIGludCBiYXNlX3Rlc3RzKGNoYXIgKnByZWZpeCwgY2hhciAqbWVtLCB1bnNpZ25lZCBsb25nIGxvbmcgbWVtX3NpemUsIGludCBza2lwKVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuLXZvaWQgKmdldGh1Z2VwYWdlKGludCBtYXBfc2l6ZSlcbiYjNDM7c3RhdGljIHZvaWQgKmdldGh1Z2VwYWdlKHNpemVfdCBtYXBfc2l6ZSlcbiB7XG4gXHRpbnQgcmV0O1xuIFx0Y2hhciAqbWFwO1xuQEAgLTgwNSwxMyAmIzQzOzgwNiwxMyBAQCB2b2lkICpnZXRodWdlcGFnZShpbnQgbWFwX3NpemUpXG4gXHRyZXR1cm4gbWFwO1xuIH1cbiBcbi1pbnQgaHBhZ2VfdW5pdF90ZXN0cyh2b2lkKVxuJiM0MztzdGF0aWMgaW50IGhwYWdlX3VuaXRfdGVzdHModm9pZClcbiB7XG4gXHRjaGFyICptYXA7XG4gXHRpbnQgcmV0LCByZXQyO1xuIFx0c2l6ZV90IG51bV9wYWdlcyA9IDEwO1xuLVx0dW5zaWduZWQgbG9uZyBsb25nIG1hcF9zaXplID0gaHBhZ2Vfc2l6ZSAqIG51bV9wYWdlcztcbi1cdHVuc2lnbmVkIGxvbmcgbG9uZyB2ZWNfc2l6ZSA9IG1hcF9zaXplL3BhZ2Vfc2l6ZTtcbiYjNDM7XHRzaXplX3QgbWFwX3NpemUgPSBocGFnZV9zaXplICogbnVtX3BhZ2VzO1xuJiM0MztcdHNpemVfdCB2ZWNfc2l6ZSA9IG1hcF9zaXplL3BhZ2Vfc2l6ZTtcbiBcdHN0cnVjdCBwYWdlX3JlZ2lvbiAqdmVjLCAqdmVjMjtcbiBcbiBcdHZlYyA9IGNhbGxvYyh2ZWNfc2l6ZSwgc2l6ZW9mKHN0cnVjdCBwYWdlX3JlZ2lvbikpO1xuQEAgLTk5OSwxMSAmIzQzOzEwMDAsMTIgQEAgaW50IGhwYWdlX3VuaXRfdGVzdHModm9pZClcbiBcdHJldHVybiAwO1xuIH1cbiBcbi1pbnQgdW5tYXBwZWRfcmVnaW9uX3Rlc3RzKHZvaWQpXG4mIzQzO3N0YXRpYyBpbnQgdW5tYXBwZWRfcmVnaW9uX3Rlc3RzKHZvaWQpXG4ge1xuIFx0dm9pZCAqc3RhcnQgPSAodm9pZCAqKTB4MTAwMDAwMDA7XG4tXHRpbnQgd3JpdHRlbiwgbGVuID0gMHgwMDA0MDAwMDtcbi1cdGxvbmcgdmVjX3NpemUgPSBsZW4gLyBwYWdlX3NpemU7XG4mIzQzO1x0aW50IHdyaXR0ZW47XG4mIzQzO1x0c2l6ZV90IGxlbiA9IDB4MDAwNDAwMDA7XG4mIzQzO1x0c2l6ZV90IHZlY19zaXplID0gbGVuIC8gcGFnZV9zaXplO1xuIFx0c3RydWN0IHBhZ2VfcmVnaW9uICp2ZWMgPSBjYWxsb2ModmVjX3NpemUsIHNpemVvZihzdHJ1Y3QgcGFnZV9yZWdpb24pKTtcbiBcdGlmICghdmVjKVxuIFx0XHRrc2Z0X2V4aXRfZmFpbF9tc2coXCYjMzQ7ZXJyb3Igbm9tZW1cXG5cJiMzNDspO1xuQEAgLTEwNzIsNyAmIzQzOzEwNzQsNyBAQCBzdGF0aWMgdm9pZCB0ZXN0X3NpbXBsZSh2b2lkKVxuICAqIHdpdGggbm8gcGFnZSB0YWJsZSwgZXhlcmNpc2luZyBwYWdlbWFwX3NjYW5fcHRlX2hvbGUoKTsgYSBiYXNlLXBhZ2UgcmFuZ2VcbiAgKiBsZWF2ZXMgcHRlX25vbmUgZW50cmllcy5cbiAgKi9cbi1zdGF0aWMgdm9pZCB1bnBvcHVsYXRlZF93cml0dGVuX3Rlc3QoY29uc3QgY2hhciAqbmFtZSwgY2hhciAqbWVtLCBsb25nIHNpemUsXG4mIzQzO3N0YXRpYyB2b2lkIHVucG9wdWxhdGVkX3dyaXR0ZW5fdGVzdChjb25zdCBjaGFyICpuYW1lLCBjaGFyICptZW0sIHNpemVfdCBzaXplLFxuIFx0XHRcdFx0ICAgICBib29sIHVzZV90aHApXG4ge1xuIFx0bG9uZyBucGFnZXMgPSBzaXplIC8gcGFnZV9zaXplLCBmYXN0ID0gMCwgc2xvdyA9IDAsIHJldDtcbkBAIC0xMTE1LDcgJiM0MzsxMTE3LDcgQEAgc3RhdGljIHZvaWQgdW5wb3B1bGF0ZWRfd3JpdHRlbl90ZXN0KGNvbnN0IGNoYXIgKm5hbWUsIGNoYXIgKm1lbSwgbG9uZyBzaXplLFxuIFxuIHN0YXRpYyB2b2lkIHVucG9wdWxhdGVkX3NjYW5fdGVzdCh2b2lkKVxuIHtcbi1cdGxvbmcgbWVtX3NpemUgPSAxNiAqIHBhZ2Vfc2l6ZTtcbiYjNDM7XHRzaXplX3QgbWVtX3NpemUgPSAxNiAqIHBhZ2Vfc2l6ZTtcbiBcdGNoYXIgKm1lbTtcbiBcbiBcdG1lbSA9IG1tYXAoTlVMTCwgbWVtX3NpemUsIFBST1RfUkVBRCB8IFBST1RfV1JJVEUsXG5AQCAtMTE1NSwxMCAmIzQzOzExNTcsMTAgQEAgc3RhdGljIHZvaWQgdW5wb3B1bGF0ZWRfdGhwX3NjYW5fdGVzdCh2b2lkKVxuIFx0bXVubWFwKGFyZWEsIDIgKiBocGFnZV9zaXplKTtcbiB9XG4gXG4taW50IHNhbml0eV90ZXN0cyh2b2lkKVxuJiM0MztzdGF0aWMgaW50IHNhbml0eV90ZXN0cyh2b2lkKVxuIHtcbi1cdHVuc2lnbmVkIGxvbmcgbG9uZyBtZW1fc2l6ZSwgdmVjX3NpemU7XG4tXHRsb25nIHJldCwgZmQsIGksIGJ1Zl9zaXplLCBucl9wYWdlcztcbiYjNDM7XHRzaXplX3QgbWVtX3NpemUsIHZlY19zaXplLCBpLCBidWZfc2l6ZTtcbiYjNDM7XHRsb25nIHJldCwgZmQsIG5yX3BhZ2VzO1xuIFx0c3RydWN0IHBhZ2VfcmVnaW9uICp2ZWM7XG4gXHRjaGFyICptZW0sICpmbWVtO1xuIFx0c3RydWN0IHN0YXQgc2J1ZjtcbkBAIC0xMzI3LDcgJiM0MzsxMzI5LDcgQEAgaW50IHNhbml0eV90ZXN0cyh2b2lkKVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuLWludCBtcHJvdGVjdF90ZXN0cyh2b2lkKVxuJiM0MztzdGF0aWMgaW50IG1wcm90ZWN0X3Rlc3RzKHZvaWQpXG4ge1xuIFx0aW50IHJldDtcbiBcdGNoYXIgKm1lbSwgKm1lbTI7XG5AQCAtMTQ0Nyw3ICYjNDM7MTQ0OSw3IEBAIHN0YXRpYyBzc2l6ZV90IGdldF9kaXJ0eV9wYWdlc19yZXNldChjaGFyICptZW0sIHVuc2lnbmVkIGludCBjb3VudCxcbiBcdHJldHVybiBjbnQ7XG4gfVxuIFxuLXZvaWQgKnRocmVhZF9wcm9jKHZvaWQgKm1lbSlcbiYjNDM7c3RhdGljIHZvaWQgKnRocmVhZF9wcm9jKHZvaWQgKm1lbSlcbiB7XG4gXHRpbnQgKm0gPSBtZW07XG4gXHRsb25nIGN1cnJfZmF1bHRzLCBmYXVsdHM7XG5AQCAtMTQ4Nyw3ICYjNDM7MTQ4OSw3IEBAIHZvaWQgKnRocmVhZF9wcm9jKHZvaWQgKm1lbSlcbiBcdHJldHVybiBOVUxMO1xuIH1cbiBcbi1zdGF0aWMgdm9pZCB0cmFuc2FjdF90ZXN0KGludCBwYWdlX3NpemUpXG4mIzQzO3N0YXRpYyB2b2lkIHRyYW5zYWN0X3Rlc3Qodm9pZClcbiB7XG4gXHR1bnNpZ25lZCBpbnQgaSwgY291bnQsIGV4dHJhX3BhZ2VzO1xuIFx0dW5zaWduZWQgaW50IGM7XG5AQCAtMTU4MCwxMSAmIzQzOzE1ODIsMTEgQEAgc3RhdGljIHZvaWQgdHJhbnNhY3RfdGVzdChpbnQgcGFnZV9zaXplKVxuIFx0XHRcdCAgICAgIGV4dHJhX3RocmVhZF9mYXVsdHMpO1xuIH1cbiBcbi12b2lkIHplcm9wZm5fdGVzdHModm9pZClcbiYjNDM7c3RhdGljIHZvaWQgemVyb3Bmbl90ZXN0cyh2b2lkKVxuIHtcbi1cdHVuc2lnbmVkIGxvbmcgbG9uZyBtZW1fc2l6ZTtcbiYjNDM7XHRzaXplX3QgbWVtX3NpemUsIGk7XG4gXHRzdHJ1Y3QgcGFnZV9yZWdpb24gdmVjO1xuLVx0aW50IGksIHJldDtcbiYjNDM7XHRpbnQgcmV0O1xuIFx0Y2hhciAqbW1hcF9tZW0sICptZW07XG4gXG4gXHQvKiBUZXN0IHdpdGggbm9ybWFsIG1lbW9yeSAqL1xuQEAgLTE2NDIsOCAmIzQzOzE2NDQsOCBAQCB2b2lkIHplcm9wZm5fdGVzdHModm9pZClcbiBcbiBpbnQgbWFpbihpbnQgX19hdHRyaWJ1dGVfXygodW51c2VkKSkgYXJnYywgY2hhciAqYXJndltdKVxuIHtcbi1cdGludCBzaG1pZCwgYnVmX3NpemUsIGZkLCBpLCByZXQ7XG4tXHR1bnNpZ25lZCBsb25nIGxvbmcgbWVtX3NpemU7XG4mIzQzO1x0aW50IHNobWlkLCBmZCwgcmV0O1xuJiM0MztcdHNpemVfdCBtZW1fc2l6ZSwgYnVmX3NpemUsIGk7XG4gXHRjaGFyICptZW0sICptYXAsICpmbWVtO1xuIFx0c3RydWN0IHN0YXQgc2J1ZjtcbiBcbkBAIC0xNjUxLDYgJiM0MzsxNjUzLDkgQEAgaW50IG1haW4oaW50IF9fYXR0cmlidXRlX18oKHVudXNlZCkpIGFyZ2MsIGNoYXIgKmFyZ3ZbXSlcbiBcbiBcdGtzZnRfcHJpbnRfaGVhZGVyKCk7XG4gXG4mIzQzO1x0cGFnZV9zaXplID0gZ2V0cGFnZXNpemUoKTtcbiYjNDM7XHRocGFnZV9zaXplID0gcmVhZF9wbWRfcGFnZXNpemUoKTtcbiYjNDM7XG4gXHRpZiAoaW5pdF91ZmZkKCkpXG4gXHRcdGtzZnRfZXhpdF9za2lwKFwmIzM0O0ZhaWxlZCB0byBpbml0aWFsaXplIHVzZXJmYXVsdGZkXFxuXCYjMzQ7KTtcbiBcbkBAIC0xNjU5LDkgJiM0MzsxNjY0LDYgQEAgaW50IG1haW4oaW50IF9fYXR0cmlidXRlX18oKHVudXNlZCkpIGFyZ2MsIGNoYXIgKmFyZ3ZbXSlcbiBcbiBcdGtzZnRfc2V0X3BsYW4oMTE5KTtcbiBcbi1cdHBhZ2Vfc2l6ZSA9IGdldHBhZ2VzaXplKCk7XG4tXHRocGFnZV9zaXplID0gcmVhZF9wbWRfcGFnZXNpemUoKTtcbi1cbiBcdHBhZ2VtYXBfZmQgPSBvcGVuKFBBR0VNQVAsIE9fUkRPTkxZKTtcbiBcdGlmIChwYWdlbWFwX2ZkIFx1MDAzYyAwKVxuIFx0XHRrc2Z0X2V4aXRfZmFpbF9tc2coXCYjMzQ7RmFpbGVkIHRvIG9wZW4gXCYjMzQ7IFBBR0VNQVAgXCYjMzQ7XFxuXCYjMzQ7KTtcbkBAIC0xODIxLDcgJiM0MzsxODIzLDcgQEAgaW50IG1haW4oaW50IF9fYXR0cmlidXRlX18oKHVudXNlZCkpIGFyZ2MsIGNoYXIgKmFyZ3ZbXSlcbiBcdG1wcm90ZWN0X3Rlc3RzKCk7XG4gXG4gXHQvKiAxMy4gVHJhbnNhY3QgdGVzdCAqL1xuLVx0dHJhbnNhY3RfdGVzdChwYWdlX3NpemUpO1xuJiM0MztcdHRyYW5zYWN0X3Rlc3QoKTtcbiBcbiBcdC8qIDE0LiBTYW5pdHkgdGVzdGluZyAqL1xuIFx0c2FuaXR5X3Rlc3RzKCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTY6NTM8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb25seSBtb2RpZmllcyB1c2VyLXNwYWNlIHNlbGZ0ZXN0IGNvZGUgaW4gdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGFnZW1hcF9pb2N0bC5jLCB3aGljaCBkb2VzIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSBvciBrZXJuZWwtc3BhY2UgbG9naWMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3MKdG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncywKYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy4KCi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6CiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZAogIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuCiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLAogIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy4KCi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgJiMzNDtOTyBGVU5DVElPTkFMIENIQU5HRSYjMzQ7IChORkNJKSBPUiAmIzM0O1JFRkFDVE9SSU5HJiMzNDsgQ0xBSU1TOgogIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgJiMzNDtjbGVhbnVwcyYjMzQ7LCAmIzM0O3JlZmFjdG9yaW5ncyYjMzQ7LCBvciBzdGF0ZQogICYjMzQ7Tm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWQmIzM0Oy4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuCiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50CiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuCiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC4KCi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6CiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLAogIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLgogIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXIKICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoyLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOgoKLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOgogICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLgogICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pCiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuCiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50cwogICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy4KICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy4KLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6CiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczoKICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZwogICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuCiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQozLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6Ci0gQ29yZSBTdWJzeXN0ZW1zOgogICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLAogICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLgotIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczoKICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy4KLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6CiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuCi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczoKICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpXaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjoKCi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOgogIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzCiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHQKICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS4KICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgJiMzNDtmb2N1c2VkJiMzNDssCiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLgoKLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6CiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzCiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuCgotIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKToKICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrCiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuCiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyCiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlncwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOgotIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCi0gQ2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC4KLSBTdHJpcCBhbnkgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgZjg4NmJiMDg3Y2QyOWIwNDZiNjVkNGU4OGM0ZTQ3ZjRhYzM5NTAzZApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUdWUgU2VwIDggMTY6NTM6MzQgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wYWdlbWFwX2lvY3RsLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wYWdlbWFwX2lvY3RsLmMKaW5kZXggZWFkYzcxNTljYTViOS4uZDlhNGZiNzgyZWNmZSAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGFnZW1hcF9pb2N0bC5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3BhZ2VtYXBfaW9jdGwuYwpAQCAtMzYsMTUgJiM0MzszNiwxNSBAQAogCiAjZGVmaW5lIFRFU1RfSVRFUkFUSU9OUyAxMDAKICNkZWZpbmUgUEFHRU1BUCAmIzM0Oy9wcm9jL3NlbGYvcGFnZW1hcCYjMzQ7Ci1pbnQgcGFnZW1hcF9mZDsKLWludCB1ZmZkOwotc2l6ZV90IHBhZ2Vfc2l6ZTsKLXNpemVfdCBocGFnZV9zaXplOwotY29uc3QgY2hhciAqcHJvZ25hbWU7CiYjNDM7c3RhdGljIGludCBwYWdlbWFwX2ZkOwomIzQzO3N0YXRpYyBpbnQgdWZmZDsKJiM0MztzdGF0aWMgc2l6ZV90IHBhZ2Vfc2l6ZTsKJiM0MztzdGF0aWMgc2l6ZV90IGhwYWdlX3NpemU7CiYjNDM7c3RhdGljIGNvbnN0IGNoYXIgKnByb2duYW1lOwogCiAjZGVmaW5lIExFTihyZWdpb24pCSgocmVnaW9uLmVuZCAtIHJlZ2lvbi5zdGFydCkvcGFnZV9zaXplKQogCi1zdGF0aWMgbG9uZyBwYWdlbWFwX2lvY3RsKHZvaWQgKnN0YXJ0LCBpbnQgbGVuLCB2b2lkICp2ZWMsIGludCB2ZWNfbGVuLCBpbnQgZmxhZywKJiM0MztzdGF0aWMgbG9uZyBwYWdlbWFwX2lvY3RsKHZvaWQgKnN0YXJ0LCBzaXplX3QgbGVuLCB2b2lkICp2ZWMsIHNpemVfdCB2ZWNfbGVuLCBpbnQgZmxhZywKIAkJCSAgaW50IG1heF9wYWdlcywgbG9uZyByZXF1aXJlZF9tYXNrLCBsb25nIGFueW9mX21hc2ssIGxvbmcgZXhjbHVkZWRfbWFzaywKIAkJCSAgbG9uZyByZXR1cm5fbWFzaykKIHsKQEAgLTY1LDcgJiM0Mzs2NSw3IEBAIHN0YXRpYyBsb25nIHBhZ2VtYXBfaW9jdGwodm9pZCAqc3RhcnQsIGludCBsZW4sIHZvaWQgKnZlYywgaW50IHZlY19sZW4sIGludCBmbGFnCiAJcmV0dXJuIGlvY3RsKHBhZ2VtYXBfZmQsIFBBR0VNQVBfU0NBTiwgJmFtcDthcmcpOwogfQogCi1zdGF0aWMgbG9uZyBwYWdlbWFwX2lvYyh2b2lkICpzdGFydCwgaW50IGxlbiwgdm9pZCAqdmVjLCBpbnQgdmVjX2xlbiwgaW50IGZsYWcsCiYjNDM7c3RhdGljIGxvbmcgcGFnZW1hcF9pb2Modm9pZCAqc3RhcnQsIHNpemVfdCBsZW4sIHZvaWQgKnZlYywgc2l6ZV90IHZlY19sZW4sIGludCBmbGFnLAogCQkJaW50IG1heF9wYWdlcywgbG9uZyByZXF1aXJlZF9tYXNrLCBsb25nIGFueW9mX21hc2ssIGxvbmcgZXhjbHVkZWRfbWFzaywKIAkJCWxvbmcgcmV0dXJuX21hc2ssIGxvbmcgKndhbGtfZW5kKQogewpAQCAtOTIsOCAmIzQzOzkyLDcgQEAgc3RhdGljIGxvbmcgcGFnZW1hcF9pb2Modm9pZCAqc3RhcnQsIGludCBsZW4sIHZvaWQgKnZlYywgaW50IHZlY19sZW4sIGludCBmbGFnLAogCXJldHVybiByZXQ7CiB9CiAKLQotaW50IGluaXRfdWZmZCh2b2lkKQomIzQzO3N0YXRpYyBpbnQgaW5pdF91ZmZkKHZvaWQpCiB7CiAJc3RydWN0IHVmZmRpb19hcGkgdWZmZGlvX2FwaTsKIApAQCAtMTE2LDcgJiM0MzsxMTUsNyBAQCBpbnQgaW5pdF91ZmZkKHZvaWQpCiAJcmV0dXJuIDA7CiB9CiAKLWludCB3cF9pbml0KHZvaWQgKmFkZHIsIGxvbmcgc2l6ZSkKJiM0MztzdGF0aWMgaW50IHdwX2luaXQodm9pZCAqYWRkciwgc2l6ZV90IHNpemUpCiB7CiAJc3RydWN0IHVmZmRpb19yZWdpc3RlciB1ZmZkaW9fcmVnaXN0ZXI7CiAJc3RydWN0IHVmZmRpb193cml0ZXByb3RlY3Qgd3A7CkBAIC0xNDAsNyAmIzQzOzEzOSw3IEBAIGludCB3cF9pbml0KHZvaWQgKmFkZHIsIGxvbmcgc2l6ZSkKIAlyZXR1cm4gMDsKIH0KIAotaW50IHdwX2ZyZWUodm9pZCAqYWRkciwgbG9uZyBzaXplKQomIzQzO3N0YXRpYyBpbnQgd3BfZnJlZSh2b2lkICphZGRyLCBzaXplX3Qgc2l6ZSkKIHsKIAlzdHJ1Y3QgdWZmZGlvX3JlZ2lzdGVyIHVmZmRpb19yZWdpc3RlcjsKIApAQCAtMTUyLDcgJiM0MzsxNTEsNyBAQCBpbnQgd3BfZnJlZSh2b2lkICphZGRyLCBsb25nIHNpemUpCiAJcmV0dXJuIDA7CiB9CiAKLWludCB3cF9hZGRyX3JhbmdlKHZvaWQgKmFkZHIsIGludCBzaXplKQomIzQzO3N0YXRpYyBpbnQgd3BfYWRkcl9yYW5nZSh2b2lkICphZGRyLCBzaXplX3Qgc2l6ZSkKIHsKIAlpZiAocGFnZW1hcF9pb2N0bChhZGRyLCBzaXplLCBOVUxMLCAwLAogCQkJICBQTV9TQ0FOX1dQX01BVENISU5HIHwgUE1fU0NBTl9DSEVDS19XUEFTWU5DLApAQCAtMTYyLDcgJiM0MzsxNjEsNyBAQCBpbnQgd3BfYWRkcl9yYW5nZSh2b2lkICphZGRyLCBpbnQgc2l6ZSkKIAlyZXR1cm4gMDsKIH0KIAotdm9pZCAqZ2V0aHVnZXRsYl9tZW0oaW50IHNpemUsIGludCAqc2htaWQpCiYjNDM7c3RhdGljIHZvaWQgKmdldGh1Z2V0bGJfbWVtKHNpemVfdCBzaXplLCBpbnQgKnNobWlkKQogewogCWNoYXIgKm1lbTsKIApAQCAtMTg2LDkgJiM0MzsxODUsMTAgQEAgdm9pZCAqZ2V0aHVnZXRsYl9tZW0oaW50IHNpemUsIGludCAqc2htaWQpCiAJcmV0dXJuIG1lbTsKIH0KIAotaW50IHVzZXJmYXVsdGZkX3Rlc3RzKHZvaWQpCiYjNDM7c3RhdGljIGludCB1c2VyZmF1bHRmZF90ZXN0cyh2b2lkKQogewotCWxvbmcgbWVtX3NpemUsIHZlY19zaXplLCB3cml0dGVuLCBudW1fcGFnZXMgPSAxNjsKJiM0MzsJc2l6ZV90IG1lbV9zaXplLCB2ZWNfc2l6ZSwgbnVtX3BhZ2VzID0gMTY7CiYjNDM7CWxvbmcgd3JpdHRlbjsKIAljaGFyICptZW0sICp2ZWM7CiAKIAltZW1fc2l6ZSA9IG51bV9wYWdlcyAqIHBhZ2Vfc2l6ZTsKQEAgLTIyOSw5ICYjNDM7MjI5LDEwIEBAIGludCB1c2VyZmF1bHRmZF90ZXN0cyh2b2lkKQogCXJldHVybiAwOwogfQogCi1pbnQgZ2V0X3JlYWRzKHN0cnVjdCBwYWdlX3JlZ2lvbiAqdmVjLCBpbnQgdmVjX3NpemUpCiYjNDM7c3RhdGljIGludCBnZXRfcmVhZHMoc3RydWN0IHBhZ2VfcmVnaW9uICp2ZWMsIHNpemVfdCB2ZWNfc2l6ZSkKIHsKLQlpbnQgaSwgc3VtID0gMDsKJiM0MzsJc2l6ZV90IGk7CiYjNDM7CWludCBzdW0gPSAwOwogCiAJZm9yIChpID0gMDsgaSAmbHQ7IHZlY19zaXplOyBpJiM0MzsmIzQzOykKIAkJc3VtICYjNDM7PSBMRU4odmVjW2ldKTsKQEAgLTIzOSw5ICYjNDM7MjQwLDkgQEAgaW50IGdldF9yZWFkcyhzdHJ1Y3QgcGFnZV9yZWdpb24gKnZlYywgaW50IHZlY19zaXplKQogCXJldHVybiBzdW07CiB9CiAKLWludCBzYW5pdHlfdGVzdHNfc2Qodm9pZCkKJiM0MztzdGF0aWMgaW50IHNhbml0eV90ZXN0c19zZCh2b2lkKQogewotCXVuc2lnbmVkIGxvbmcgbG9uZyBtZW1fc2l6ZSwgdmVjX3NpemUsIGksIHRvdGFsX3BhZ2VzID0gMDsKJiM0MzsJc2l6ZV90IG1lbV9zaXplLCB2ZWNfc2l6ZSwgaSwgdG90YWxfcGFnZXMgPSAwOwogCWxvbmcgcmV0LCByZXQyLCByZXQzOwogCWludCBudW1fcGFnZXMgPSAxMDAwOwogCWludCB0b3RhbF93cml0ZXMsIHRvdGFsX3JlYWRzLCByZWFkcywgY291bnQ7CkBAIC0zMzEsNyAmIzQzOzMzMiw3IEBAIGludCBzYW5pdHlfdGVzdHNfc2Qodm9pZCkKIAlpZiAocmV0ICZsdDsgMCkKIAkJa3NmdF9leGl0X2ZhaWxfbXNnKCYjMzQ7ZXJyb3IgJWxkICVkICVzXG4mIzM0OywgcmV0LCBlcnJubywgc3RyZXJyb3IoZXJybm8pKTsKIAotCWtzZnRfdGVzdF9yZXN1bHQoKHVuc2lnbmVkIGxvbmcgbG9uZylyZXQgPT0gbWVtX3NpemUvKHBhZ2Vfc2l6ZSAqIDIpLAomIzQzOwlrc2Z0X3Rlc3RfcmVzdWx0KChzaXplX3QpcmV0ID09IG1lbV9zaXplLyhwYWdlX3NpemUgKiAyKSwKIAkJCSAmIzM0OyVzIFJlcGVhdGVkIHBhdHRlcm4gb2Ygd3JpdHRlbiBhbmQgbm9uLXdyaXR0ZW4gcGFnZXNcbiYjMzQ7LCBfX2Z1bmNfXyk7CiAKIAkvKiA0LiBSZXBlYXRlZCBwYXR0ZXJuIG9mIHdyaXR0ZW4gYW5kIG5vbi13cml0dGVuIHBhZ2VzIGluIHBhcnRzICovCkBAIC02ODIsOSAmIzQzOzY4Myw5IEBAIGludCBzYW5pdHlfdGVzdHNfc2Qodm9pZCkKIAlyZXR1cm4gMDsKIH0KIAotaW50IGJhc2VfdGVzdHMoY2hhciAqcHJlZml4LCBjaGFyICptZW0sIHVuc2lnbmVkIGxvbmcgbG9uZyBtZW1fc2l6ZSwgaW50IHNraXApCiYjNDM7c3RhdGljIGludCBiYXNlX3Rlc3RzKGNoYXIgKnByZWZpeCwgY2hhciAqbWVtLCBzaXplX3QgbWVtX3NpemUsIGludCBza2lwKQogewotCXVuc2lnbmVkIGxvbmcgbG9uZyB2ZWNfc2l6ZTsKJiM0MzsJc2l6ZV90IHZlY19zaXplOwogCWludCB3cml0dGVuOwogCXN0cnVjdCBwYWdlX3JlZ2lvbiAqdmVjLCAqdmVjMjsKIApAQCAtNzg3LDcgJiM0Mzs3ODgsNyBAQCBpbnQgYmFzZV90ZXN0cyhjaGFyICpwcmVmaXgsIGNoYXIgKm1lbSwgdW5zaWduZWQgbG9uZyBsb25nIG1lbV9zaXplLCBpbnQgc2tpcCkKIAlyZXR1cm4gMDsKIH0KIAotdm9pZCAqZ2V0aHVnZXBhZ2UoaW50IG1hcF9zaXplKQomIzQzO3N0YXRpYyB2b2lkICpnZXRodWdlcGFnZShzaXplX3QgbWFwX3NpemUpCiB7CiAJaW50IHJldDsKIAljaGFyICptYXA7CkBAIC04MDUsMTMgJiM0Mzs4MDYsMTMgQEAgdm9pZCAqZ2V0aHVnZXBhZ2UoaW50IG1hcF9zaXplKQogCXJldHVybiBtYXA7CiB9CiAKLWludCBocGFnZV91bml0X3Rlc3RzKHZvaWQpCiYjNDM7c3RhdGljIGludCBocGFnZV91bml0X3Rlc3RzKHZvaWQpCiB7CiAJY2hhciAqbWFwOwogCWludCByZXQsIHJldDI7CiAJc2l6ZV90IG51bV9wYWdlcyA9IDEwOwotCXVuc2lnbmVkIGxvbmcgbG9uZyBtYXBfc2l6ZSA9IGhwYWdlX3NpemUgKiBudW1fcGFnZXM7Ci0JdW5zaWduZWQgbG9uZyBsb25nIHZlY19zaXplID0gbWFwX3NpemUvcGFnZV9zaXplOwomIzQzOwlzaXplX3QgbWFwX3NpemUgPSBocGFnZV9zaXplICogbnVtX3BhZ2VzOwomIzQzOwlzaXplX3QgdmVjX3NpemUgPSBtYXBfc2l6ZS9wYWdlX3NpemU7CiAJc3RydWN0IHBhZ2VfcmVnaW9uICp2ZWMsICp2ZWMyOwogCiAJdmVjID0gY2FsbG9jKHZlY19zaXplLCBzaXplb2Yoc3RydWN0IHBhZ2VfcmVnaW9uKSk7CkBAIC05OTksMTEgJiM0MzsxMDAwLDEyIEBAIGludCBocGFnZV91bml0X3Rlc3RzKHZvaWQpCiAJcmV0dXJuIDA7CiB9CiAKLWludCB1bm1hcHBlZF9yZWdpb25fdGVzdHModm9pZCkKJiM0MztzdGF0aWMgaW50IHVubWFwcGVkX3JlZ2lvbl90ZXN0cyh2b2lkKQogewogCXZvaWQgKnN0YXJ0ID0gKHZvaWQgKikweDEwMDAwMDAwOwotCWludCB3cml0dGVuLCBsZW4gPSAweDAwMDQwMDAwOwotCWxvbmcgdmVjX3NpemUgPSBsZW4gLyBwYWdlX3NpemU7CiYjNDM7CWludCB3cml0dGVuOwomIzQzOwlzaXplX3QgbGVuID0gMHgwMDA0MDAwMDsKJiM0MzsJc2l6ZV90IHZlY19zaXplID0gbGVuIC8gcGFnZV9zaXplOwogCXN0cnVjdCBwYWdlX3JlZ2lvbiAqdmVjID0gY2FsbG9jKHZlY19zaXplLCBzaXplb2Yoc3RydWN0IHBhZ2VfcmVnaW9uKSk7CiAJaWYgKCF2ZWMpCiAJCWtzZnRfZXhpdF9mYWlsX21zZygmIzM0O2Vycm9yIG5vbWVtXG4mIzM0Oyk7CkBAIC0xMDcyLDcgJiM0MzsxMDc0LDcgQEAgc3RhdGljIHZvaWQgdGVzdF9zaW1wbGUodm9pZCkKICAqIHdpdGggbm8gcGFnZSB0YWJsZSwgZXhlcmNpc2luZyBwYWdlbWFwX3NjYW5fcHRlX2hvbGUoKTsgYSBiYXNlLXBhZ2UgcmFuZ2UKICAqIGxlYXZlcyBwdGVfbm9uZSBlbnRyaWVzLgogICovCi1zdGF0aWMgdm9pZCB1bnBvcHVsYXRlZF93cml0dGVuX3Rlc3QoY29uc3QgY2hhciAqbmFtZSwgY2hhciAqbWVtLCBsb25nIHNpemUsCiYjNDM7c3RhdGljIHZvaWQgdW5wb3B1bGF0ZWRfd3JpdHRlbl90ZXN0KGNvbnN0IGNoYXIgKm5hbWUsIGNoYXIgKm1lbSwgc2l6ZV90IHNpemUsCiAJCQkJICAgICBib29sIHVzZV90aHApCiB7CiAJbG9uZyBucGFnZXMgPSBzaXplIC8gcGFnZV9zaXplLCBmYXN0ID0gMCwgc2xvdyA9IDAsIHJldDsKQEAgLTExMTUsNyAmIzQzOzExMTcsNyBAQCBzdGF0aWMgdm9pZCB1bnBvcHVsYXRlZF93cml0dGVuX3Rlc3QoY29uc3QgY2hhciAqbmFtZSwgY2hhciAqbWVtLCBsb25nIHNpemUsCiAKIHN0YXRpYyB2b2lkIHVucG9wdWxhdGVkX3NjYW5fdGVzdCh2b2lkKQogewotCWxvbmcgbWVtX3NpemUgPSAxNiAqIHBhZ2Vfc2l6ZTsKJiM0MzsJc2l6ZV90IG1lbV9zaXplID0gMTYgKiBwYWdlX3NpemU7CiAJY2hhciAqbWVtOwogCiAJbWVtID0gbW1hcChOVUxMLCBtZW1fc2l6ZSwgUFJPVF9SRUFEIHwgUFJPVF9XUklURSwKQEAgLTExNTUsMTAgJiM0MzsxMTU3LDEwIEBAIHN0YXRpYyB2b2lkIHVucG9wdWxhdGVkX3RocF9zY2FuX3Rlc3Qodm9pZCkKIAltdW5tYXAoYXJlYSwgMiAqIGhwYWdlX3NpemUpOwogfQogCi1pbnQgc2FuaXR5X3Rlc3RzKHZvaWQpCiYjNDM7c3RhdGljIGludCBzYW5pdHlfdGVzdHModm9pZCkKIHsKLQl1bnNpZ25lZCBsb25nIGxvbmcgbWVtX3NpemUsIHZlY19zaXplOwotCWxvbmcgcmV0LCBmZCwgaSwgYnVmX3NpemUsIG5yX3BhZ2VzOwomIzQzOwlzaXplX3QgbWVtX3NpemUsIHZlY19zaXplLCBpLCBidWZfc2l6ZTsKJiM0MzsJbG9uZyByZXQsIGZkLCBucl9wYWdlczsKIAlzdHJ1Y3QgcGFnZV9yZWdpb24gKnZlYzsKIAljaGFyICptZW0sICpmbWVtOwogCXN0cnVjdCBzdGF0IHNidWY7CkBAIC0xMzI3LDcgJiM0MzsxMzI5LDcgQEAgaW50IHNhbml0eV90ZXN0cyh2b2lkKQogCXJldHVybiAwOwogfQogCi1pbnQgbXByb3RlY3RfdGVzdHModm9pZCkKJiM0MztzdGF0aWMgaW50IG1wcm90ZWN0X3Rlc3RzKHZvaWQpCiB7CiAJaW50IHJldDsKIAljaGFyICptZW0sICptZW0yOwpAQCAtMTQ0Nyw3ICYjNDM7MTQ0OSw3IEBAIHN0YXRpYyBzc2l6ZV90IGdldF9kaXJ0eV9wYWdlc19yZXNldChjaGFyICptZW0sIHVuc2lnbmVkIGludCBjb3VudCwKIAlyZXR1cm4gY250OwogfQogCi12b2lkICp0aHJlYWRfcHJvYyh2b2lkICptZW0pCiYjNDM7c3RhdGljIHZvaWQgKnRocmVhZF9wcm9jKHZvaWQgKm1lbSkKIHsKIAlpbnQgKm0gPSBtZW07CiAJbG9uZyBjdXJyX2ZhdWx0cywgZmF1bHRzOwpAQCAtMTQ4Nyw3ICYjNDM7MTQ4OSw3IEBAIHZvaWQgKnRocmVhZF9wcm9jKHZvaWQgKm1lbSkKIAlyZXR1cm4gTlVMTDsKIH0KIAotc3RhdGljIHZvaWQgdHJhbnNhY3RfdGVzdChpbnQgcGFnZV9zaXplKQomIzQzO3N0YXRpYyB2b2lkIHRyYW5zYWN0X3Rlc3Qodm9pZCkKIHsKIAl1bnNpZ25lZCBpbnQgaSwgY291bnQsIGV4dHJhX3BhZ2VzOwogCXVuc2lnbmVkIGludCBjOwpAQCAtMTU4MCwxMSAmIzQzOzE1ODIsMTEgQEAgc3RhdGljIHZvaWQgdHJhbnNhY3RfdGVzdChpbnQgcGFnZV9zaXplKQogCQkJICAgICAgZXh0cmFfdGhyZWFkX2ZhdWx0cyk7CiB9CiAKLXZvaWQgemVyb3Bmbl90ZXN0cyh2b2lkKQomIzQzO3N0YXRpYyB2b2lkIHplcm9wZm5fdGVzdHModm9pZCkKIHsKLQl1bnNpZ25lZCBsb25nIGxvbmcgbWVtX3NpemU7CiYjNDM7CXNpemVfdCBtZW1fc2l6ZSwgaTsKIAlzdHJ1Y3QgcGFnZV9yZWdpb24gdmVjOwotCWludCBpLCByZXQ7CiYjNDM7CWludCByZXQ7CiAJY2hhciAqbW1hcF9tZW0sICptZW07CiAKIAkvKiBUZXN0IHdpdGggbm9ybWFsIG1lbW9yeSAqLwpAQCAtMTY0Miw4ICYjNDM7MTY0NCw4IEBAIHZvaWQgemVyb3Bmbl90ZXN0cyh2b2lkKQogCiBpbnQgbWFpbihpbnQgX19hdHRyaWJ1dGVfXygodW51c2VkKSkgYXJnYywgY2hhciAqYXJndltdKQogewotCWludCBzaG1pZCwgYnVmX3NpemUsIGZkLCBpLCByZXQ7Ci0JdW5zaWduZWQgbG9uZyBsb25nIG1lbV9zaXplOwomIzQzOwlpbnQgc2htaWQsIGZkLCByZXQ7CiYjNDM7CXNpemVfdCBtZW1fc2l6ZSwgYnVmX3NpemUsIGk7CiAJY2hhciAqbWVtLCAqbWFwLCAqZm1lbTsKIAlzdHJ1Y3Qgc3RhdCBzYnVmOwogCkBAIC0xNjUxLDYgJiM0MzsxNjUzLDkgQEAgaW50IG1haW4oaW50IF9fYXR0cmlidXRlX18oKHVudXNlZCkpIGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKIAogCWtzZnRfcHJpbnRfaGVhZGVyKCk7CiAKJiM0MzsJcGFnZV9zaXplID0gZ2V0cGFnZXNpemUoKTsKJiM0MzsJaHBhZ2Vfc2l6ZSA9IHJlYWRfcG1kX3BhZ2VzaXplKCk7CiYjNDM7CiAJaWYgKGluaXRfdWZmZCgpKQogCQlrc2Z0X2V4aXRfc2tpcCgmIzM0O0ZhaWxlZCB0byBpbml0aWFsaXplIHVzZXJmYXVsdGZkXG4mIzM0Oyk7CiAKQEAgLTE2NTksOSAmIzQzOzE2NjQsNiBAQCBpbnQgbWFpbihpbnQgX19hdHRyaWJ1dGVfXygodW51c2VkKSkgYXJnYywgY2hhciAqYXJndltdKQogCiAJa3NmdF9zZXRfcGxhbigxMTkpOwogCi0JcGFnZV9zaXplID0gZ2V0cGFnZXNpemUoKTsKLQlocGFnZV9zaXplID0gcmVhZF9wbWRfcGFnZXNpemUoKTsKLQogCXBhZ2VtYXBfZmQgPSBvcGVuKFBBR0VNQVAsIE9fUkRPTkxZKTsKIAlpZiAocGFnZW1hcF9mZCAmbHQ7IDApCiAJCWtzZnRfZXhpdF9mYWlsX21zZygmIzM0O0ZhaWxlZCB0byBvcGVuICYjMzQ7IFBBR0VNQVAgJiMzNDtcbiYjMzQ7KTsKQEAgLTE4MjEsNyAmIzQzOzE4MjMsNyBAQCBpbnQgbWFpbihpbnQgX19hdHRyaWJ1dGVfXygodW51c2VkKSkgYXJnYywgY2hhciAqYXJndltdKQogCW1wcm90ZWN0X3Rlc3RzKCk7CiAKIAkvKiAxMy4gVHJhbnNhY3QgdGVzdCAqLwotCXRyYW5zYWN0X3Rlc3QocGFnZV9zaXplKTsKJiM0MzsJdHJhbnNhY3RfdGVzdCgpOwogCiAJLyogMTQuIFNhbml0eSB0ZXN0aW5nICovCiAJc2FuaXR5X3Rlc3RzKCk7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDE2OjUzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYyMDAKCQkJCQkJCW91dHB1dDogNzQKCQkJCQkJCXRob3VnaHRzOiAzMTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gVGhlIHBhdGNoIGlzIHRvdWNoaW5nIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wYWdlbWFwX2lvY3RsLmNgLiBNeSBtaW5kIGltbWVkaWF0ZWx5IGdvZXMgdG8gdGhlIHJ1bGVzIOKAkyBzcGVjaWZpY2FsbHksIHdoZW4gd2UgY2FuIGNvbmZpZGVudGx5IHNheSBhIGNoYW5nZSAqaXNuJiMzOTt0KiB3b3J0aCBmdXp6aW5nLiBJIG5lZWQgdG8gbWFrZSB0aGUgY29ycmVjdCBhc3Nlc3NtZW50IG9mIFdvcnRoRnV6emluZy4KCk15IHByaW1hcnkgZm9jdXMgaXMgb24gc2VjdGlvbiAyIG9mIHRoZSBjcml0ZXJpYSDigJMgdGhlICpuZWdhdGl2ZSogY3JpdGVyaWEuIFdlJiMzOTtyZSBsb29raW5nIGZvciByZWFzb25zIHRvIHJ1bGUgdGhpcyBwYXRjaCAqb3V0KiBvZiBmdXp6aW5nIHNjb3BlLiBUaGUgcnVsZSBpcyBwcmV0dHkgY2xlYXI6IGlmIGFsbCB0aGUgbW9kaWZpZWQgY29kZSBzdHJpY3RseSBmYWxscyBpbnRvIHRoZSBjYXRlZ29yeSBvZiAmIzM0O05vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXMsIGxpa2UgdXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgb3Igc2NyaXB0cyB0aGF0ICpkb24mIzM5O3QqIGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcywmIzM0OyB0aGVuIHdlIHJldHVybiBgV29ydGhGdXp6aW5nPWZhbHNlYC4KCk5vdywgbG9va2luZyBhdCB0aGUgbW9kaWZpZWQgZmlsZSwgaXQmIzM5O3MgdW5kZW5pYWJseSB3aXRoaW4gYHRvb2xzL2AsIHNwZWNpZmljYWxseSB1bmRlciBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vYC4gVGhpcyBpbW1lZGlhdGVseSBmbGFncyBpdCBhcyBhIHNlbGZ0ZXN0LCB3aGljaCwgYnkgZGVmaW5pdGlvbiwgaXMgdXNlci1zcGFjZSBjb2RlLiBUaGUgcGF0aCBhbG9uZSBpcyBwcmFjdGljYWxseSBhIGd1YXJhbnRlZSB0aGF0IGl0IGRvZXNuJiMzOTt0IHRvdWNoIHRoZSBrZXJuZWwgaW1hZ2Ugb3IgbW9kdWxlcy4gSSBuZWVkIHRvIGJlIDEwMCUgc3VyZSwgdGhvdWdoLiBTbywgSSYjMzk7bSBjaGVja2luZyB0aGUgZGlmZiBhZ2FpbiDigJMganVzdCB0byBiZSBjZXJ0YWluLgoKWWVwLCB0aGUgZGlmZiBjb25maXJtcyBpdC4gVGhlICpvbmx5KiBjaGFuZ2UgaXMgdG8gYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3BhZ2VtYXBfaW9jdGwuY2AuIE5vdGhpbmcgZWxzZSBpcyBpbXBhY3RlZC4KClRoZXJlZm9yZSwgdGhlIHZlcmRpY3QgaXMgY2xlYXI6IGBXb3J0aEZ1enppbmc6IGZhbHNlYC4gVGhlcmUgaXMgbm8gcmVhc29uIHRvIHRlc3QgdGhpcyBmaWxlIGFzIGl0IGlzIGEgdXNlci1zcGFjZSBzZWxmdGVzdCwgd2hpY2ggaXMgZXhhY3RseSB3aHkgdGhlIGZpbGUgaXMgc3RvcmVkIGluIGB0b29sc2AuIFRoZSBydWxlcyBhcmUgbWV0LiBDb25zZXF1ZW50bHksIGBFbmFibGVDb25maWdzYCBhbmQgYEZvY3VzU3ltYm9sc2Agd2lsbCBiZSBlbXB0eSwgYXMgdGhpcyBpc24mIzM5O3Qga2VybmVsLXNwYWNlIGxvZ2ljIHdlJiMzOTtyZSBpbnRlcmVzdGVkIGluIGZ1enppbmcuIFRoZSByZWFzb25pbmcgaXMgc29saWQ6IHNvbGVseSBtb2RpZmllcyBhIHVzZXItc3BhY2Ugc2VsZnRlc3QgYW5kIGhhcyBubyBiZWFyaW5nIG9uIHRoZSBrZXJuZWwgaW1hZ2Ugb3IgbW9kdWxlcy4KCkFscmlnaHQsIGxldCYjMzk7cyBjYWxsIGBzZXQtcmVzdWx0c2AgYW5kIG1vdmUgb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTY6NTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIHVzZXItc3BhY2Ugc2VsZnRlc3QgY29kZSBpbiB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wYWdlbWFwX2lvY3RsLmMsIHdoaWNoIGRvZXMgbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlIG9yIGtlcm5lbC1zcGFjZSBsb2dpYy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgdXNlci1zcGFjZSBzZWxmdGVzdCBjb2RlIGluIHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3BhZ2VtYXBfaW9jdGwuYywgd2hpY2ggZG9lcyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2Ugb3Iga2VybmVsLXNwYWNlIGxvZ2ljLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxNjo1MzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMDhUMTY6NTM6MzUuMjgwNDkwNTk3WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzY5MDQ1MTA1MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgdXNlci1zcGFjZSBzZWxmdGVzdCBjb2RlIGluIHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3BhZ2VtYXBfaW9jdGwuYywgd2hpY2ggZG9lcyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2Ugb3Iga2VybmVsLXNwYWNlIGxvZ2ljLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTY6NTM6MzUuMjgwNDk3MTI3WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MDU4OTgyMjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBmODg2YmIwODdjZDI5YjA0NmI2NWQ0ZTg4YzRlNDdmNGFjMzk1MDNkXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUdWUgU2VwIDggMTY6NTM6MzQgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGFnZW1hcF9pb2N0bC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGFnZW1hcF9pb2N0bC5jXFxuaW5kZXggZWFkYzcxNTljYTViOS4uZDlhNGZiNzgyZWNmZSAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wYWdlbWFwX2lvY3RsLmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wYWdlbWFwX2lvY3RsLmNcXG5AQCAtMzYsMTUgKzM2LDE1IEBAXFxuIFxcbiAjZGVmaW5lIFRFU1RfSVRFUkFUSU9OUyAxMDBcXG4gI2RlZmluZSBQQUdFTUFQIFxcXCIvcHJvYy9zZWxmL3BhZ2VtYXBcXFwiXFxuLWludCBwYWdlbWFwX2ZkO1xcbi1pbnQgdWZmZDtcXG4tc2l6ZV90IHBhZ2Vfc2l6ZTtcXG4tc2l6ZV90IGhwYWdlX3NpemU7XFxuLWNvbnN0IGNoYXIgKnByb2duYW1lO1xcbitzdGF0aWMgaW50IHBhZ2VtYXBfZmQ7XFxuK3N0YXRpYyBpbnQgdWZmZDtcXG4rc3RhdGljIHNpemVfdCBwYWdlX3NpemU7XFxuK3N0YXRpYyBzaXplX3QgaHBhZ2Vfc2l6ZTtcXG4rc3RhdGljIGNvbnN0IGNoYXIgKnByb2duYW1lO1xcbiBcXG4gI2RlZmluZSBMRU4ocmVnaW9uKVxcdCgocmVnaW9uLmVuZCAtIHJlZ2lvbi5zdGFydCkvcGFnZV9zaXplKVxcbiBcXG4tc3RhdGljIGxvbmcgcGFnZW1hcF9pb2N0bCh2b2lkICpzdGFydCwgaW50IGxlbiwgdm9pZCAqdmVjLCBpbnQgdmVjX2xlbiwgaW50IGZsYWcsXFxuK3N0YXRpYyBsb25nIHBhZ2VtYXBfaW9jdGwodm9pZCAqc3RhcnQsIHNpemVfdCBsZW4sIHZvaWQgKnZlYywgc2l6ZV90IHZlY19sZW4sIGludCBmbGFnLFxcbiBcXHRcXHRcXHQgIGludCBtYXhfcGFnZXMsIGxvbmcgcmVxdWlyZWRfbWFzaywgbG9uZyBhbnlvZl9tYXNrLCBsb25nIGV4Y2x1ZGVkX21hc2ssXFxuIFxcdFxcdFxcdCAgbG9uZyByZXR1cm5fbWFzaylcXG4ge1xcbkBAIC02NSw3ICs2NSw3IEBAIHN0YXRpYyBsb25nIHBhZ2VtYXBfaW9jdGwodm9pZCAqc3RhcnQsIGludCBsZW4sIHZvaWQgKnZlYywgaW50IHZlY19sZW4sIGludCBmbGFnXFxuIFxcdHJldHVybiBpb2N0bChwYWdlbWFwX2ZkLCBQQUdFTUFQX1NDQU4sIFxcdTAwMjZhcmcpO1xcbiB9XFxuIFxcbi1zdGF0aWMgbG9uZyBwYWdlbWFwX2lvYyh2b2lkICpzdGFydCwgaW50IGxlbiwgdm9pZCAqdmVjLCBpbnQgdmVjX2xlbiwgaW50IGZsYWcsXFxuK3N0YXRpYyBsb25nIHBhZ2VtYXBfaW9jKHZvaWQgKnN0YXJ0LCBzaXplX3QgbGVuLCB2b2lkICp2ZWMsIHNpemVfdCB2ZWNfbGVuLCBpbnQgZmxhZyxcXG4gXFx0XFx0XFx0aW50IG1heF9wYWdlcywgbG9uZyByZXF1aXJlZF9tYXNrLCBsb25nIGFueW9mX21hc2ssIGxvbmcgZXhjbHVkZWRfbWFzayxcXG4gXFx0XFx0XFx0bG9uZyByZXR1cm5fbWFzaywgbG9uZyAqd2Fsa19lbmQpXFxuIHtcXG5AQCAtOTIsOCArOTIsNyBAQCBzdGF0aWMgbG9uZyBwYWdlbWFwX2lvYyh2b2lkICpzdGFydCwgaW50IGxlbiwgdm9pZCAqdmVjLCBpbnQgdmVjX2xlbiwgaW50IGZsYWcsXFxuIFxcdHJldHVybiByZXQ7XFxuIH1cXG4gXFxuLVxcbi1pbnQgaW5pdF91ZmZkKHZvaWQpXFxuK3N0YXRpYyBpbnQgaW5pdF91ZmZkKHZvaWQpXFxuIHtcXG4gXFx0c3RydWN0IHVmZmRpb19hcGkgdWZmZGlvX2FwaTtcXG4gXFxuQEAgLTExNiw3ICsxMTUsNyBAQCBpbnQgaW5pdF91ZmZkKHZvaWQpXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbi1pbnQgd3BfaW5pdCh2b2lkICphZGRyLCBsb25nIHNpemUpXFxuK3N0YXRpYyBpbnQgd3BfaW5pdCh2b2lkICphZGRyLCBzaXplX3Qgc2l6ZSlcXG4ge1xcbiBcXHRzdHJ1Y3QgdWZmZGlvX3JlZ2lzdGVyIHVmZmRpb19yZWdpc3RlcjtcXG4gXFx0c3RydWN0IHVmZmRpb193cml0ZXByb3RlY3Qgd3A7XFxuQEAgLTE0MCw3ICsxMzksNyBAQCBpbnQgd3BfaW5pdCh2b2lkICphZGRyLCBsb25nIHNpemUpXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbi1pbnQgd3BfZnJlZSh2b2lkICphZGRyLCBsb25nIHNpemUpXFxuK3N0YXRpYyBpbnQgd3BfZnJlZSh2b2lkICphZGRyLCBzaXplX3Qgc2l6ZSlcXG4ge1xcbiBcXHRzdHJ1Y3QgdWZmZGlvX3JlZ2lzdGVyIHVmZmRpb19yZWdpc3RlcjtcXG4gXFxuQEAgLTE1Miw3ICsxNTEsNyBAQCBpbnQgd3BfZnJlZSh2b2lkICphZGRyLCBsb25nIHNpemUpXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbi1pbnQgd3BfYWRkcl9yYW5nZSh2b2lkICphZGRyLCBpbnQgc2l6ZSlcXG4rc3RhdGljIGludCB3cF9hZGRyX3JhbmdlKHZvaWQgKmFkZHIsIHNpemVfdCBzaXplKVxcbiB7XFxuIFxcdGlmIChwYWdlbWFwX2lvY3RsKGFkZHIsIHNpemUsIE5VTEwsIDAsXFxuIFxcdFxcdFxcdCAgUE1fU0NBTl9XUF9NQVRDSElORyB8IFBNX1NDQU5fQ0hFQ0tfV1BBU1lOQyxcXG5AQCAtMTYyLDcgKzE2MSw3IEBAIGludCB3cF9hZGRyX3JhbmdlKHZvaWQgKmFkZHIsIGludCBzaXplKVxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4tdm9pZCAqZ2V0aHVnZXRsYl9tZW0oaW50IHNpemUsIGludCAqc2htaWQpXFxuK3N0YXRpYyB2b2lkICpnZXRodWdldGxiX21lbShzaXplX3Qgc2l6ZSwgaW50ICpzaG1pZClcXG4ge1xcbiBcXHRjaGFyICptZW07XFxuIFxcbkBAIC0xODYsOSArMTg1LDEwIEBAIHZvaWQgKmdldGh1Z2V0bGJfbWVtKGludCBzaXplLCBpbnQgKnNobWlkKVxcbiBcXHRyZXR1cm4gbWVtO1xcbiB9XFxuIFxcbi1pbnQgdXNlcmZhdWx0ZmRfdGVzdHModm9pZClcXG4rc3RhdGljIGludCB1c2VyZmF1bHRmZF90ZXN0cyh2b2lkKVxcbiB7XFxuLVxcdGxvbmcgbWVtX3NpemUsIHZlY19zaXplLCB3cml0dGVuLCBudW1fcGFnZXMgPSAxNjtcXG4rXFx0c2l6ZV90IG1lbV9zaXplLCB2ZWNfc2l6ZSwgbnVtX3BhZ2VzID0gMTY7XFxuK1xcdGxvbmcgd3JpdHRlbjtcXG4gXFx0Y2hhciAqbWVtLCAqdmVjO1xcbiBcXG4gXFx0bWVtX3NpemUgPSBudW1fcGFnZXMgKiBwYWdlX3NpemU7XFxuQEAgLTIyOSw5ICsyMjksMTAgQEAgaW50IHVzZXJmYXVsdGZkX3Rlc3RzKHZvaWQpXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbi1pbnQgZ2V0X3JlYWRzKHN0cnVjdCBwYWdlX3JlZ2lvbiAqdmVjLCBpbnQgdmVjX3NpemUpXFxuK3N0YXRpYyBpbnQgZ2V0X3JlYWRzKHN0cnVjdCBwYWdlX3JlZ2lvbiAqdmVjLCBzaXplX3QgdmVjX3NpemUpXFxuIHtcXG4tXFx0aW50IGksIHN1bSA9IDA7XFxuK1xcdHNpemVfdCBpO1xcbitcXHRpbnQgc3VtID0gMDtcXG4gXFxuIFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyB2ZWNfc2l6ZTsgaSsrKVxcbiBcXHRcXHRzdW0gKz0gTEVOKHZlY1tpXSk7XFxuQEAgLTIzOSw5ICsyNDAsOSBAQCBpbnQgZ2V0X3JlYWRzKHN0cnVjdCBwYWdlX3JlZ2lvbiAqdmVjLCBpbnQgdmVjX3NpemUpXFxuIFxcdHJldHVybiBzdW07XFxuIH1cXG4gXFxuLWludCBzYW5pdHlfdGVzdHNfc2Qodm9pZClcXG4rc3RhdGljIGludCBzYW5pdHlfdGVzdHNfc2Qodm9pZClcXG4ge1xcbi1cXHR1bnNpZ25lZCBsb25nIGxvbmcgbWVtX3NpemUsIHZlY19zaXplLCBpLCB0b3RhbF9wYWdlcyA9IDA7XFxuK1xcdHNpemVfdCBtZW1fc2l6ZSwgdmVjX3NpemUsIGksIHRvdGFsX3BhZ2VzID0gMDtcXG4gXFx0bG9uZyByZXQsIHJldDIsIHJldDM7XFxuIFxcdGludCBudW1fcGFnZXMgPSAxMDAwO1xcbiBcXHRpbnQgdG90YWxfd3JpdGVzLCB0b3RhbF9yZWFkcywgcmVhZHMsIGNvdW50O1xcbkBAIC0zMzEsNyArMzMyLDcgQEAgaW50IHNhbml0eV90ZXN0c19zZCh2b2lkKVxcbiBcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4gXFx0XFx0a3NmdF9leGl0X2ZhaWxfbXNnKFxcXCJlcnJvciAlbGQgJWQgJXNcXFxcblxcXCIsIHJldCwgZXJybm8sIHN0cmVycm9yKGVycm5vKSk7XFxuIFxcbi1cXHRrc2Z0X3Rlc3RfcmVzdWx0KCh1bnNpZ25lZCBsb25nIGxvbmcpcmV0ID09IG1lbV9zaXplLyhwYWdlX3NpemUgKiAyKSxcXG4rXFx0a3NmdF90ZXN0X3Jlc3VsdCgoc2l6ZV90KXJldCA9PSBtZW1fc2l6ZS8ocGFnZV9zaXplICogMiksXFxuIFxcdFxcdFxcdCBcXFwiJXMgUmVwZWF0ZWQgcGF0dGVybiBvZiB3cml0dGVuIGFuZCBub24td3JpdHRlbiBwYWdlc1xcXFxuXFxcIiwgX19mdW5jX18pO1xcbiBcXG4gXFx0LyogNC4gUmVwZWF0ZWQgcGF0dGVybiBvZiB3cml0dGVuIGFuZCBub24td3JpdHRlbiBwYWdlcyBpbiBwYXJ0cyAqL1xcbkBAIC02ODIsOSArNjgzLDkgQEAgaW50IHNhbml0eV90ZXN0c19zZCh2b2lkKVxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4taW50IGJhc2VfdGVzdHMoY2hhciAqcHJlZml4LCBjaGFyICptZW0sIHVuc2lnbmVkIGxvbmcgbG9uZyBtZW1fc2l6ZSwgaW50IHNraXApXFxuK3N0YXRpYyBpbnQgYmFzZV90ZXN0cyhjaGFyICpwcmVmaXgsIGNoYXIgKm1lbSwgc2l6ZV90IG1lbV9zaXplLCBpbnQgc2tpcClcXG4ge1xcbi1cXHR1bnNpZ25lZCBsb25nIGxvbmcgdmVjX3NpemU7XFxuK1xcdHNpemVfdCB2ZWNfc2l6ZTtcXG4gXFx0aW50IHdyaXR0ZW47XFxuIFxcdHN0cnVjdCBwYWdlX3JlZ2lvbiAqdmVjLCAqdmVjMjtcXG4gXFxuQEAgLTc4Nyw3ICs3ODgsNyBAQCBpbnQgYmFzZV90ZXN0cyhjaGFyICpwcmVmaXgsIGNoYXIgKm1lbSwgdW5zaWduZWQgbG9uZyBsb25nIG1lbV9zaXplLCBpbnQgc2tpcClcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuLXZvaWQgKmdldGh1Z2VwYWdlKGludCBtYXBfc2l6ZSlcXG4rc3RhdGljIHZvaWQgKmdldGh1Z2VwYWdlKHNpemVfdCBtYXBfc2l6ZSlcXG4ge1xcbiBcXHRpbnQgcmV0O1xcbiBcXHRjaGFyICptYXA7XFxuQEAgLTgwNSwxMyArODA2LDEzIEBAIHZvaWQgKmdldGh1Z2VwYWdlKGludCBtYXBfc2l6ZSlcXG4gXFx0cmV0dXJuIG1hcDtcXG4gfVxcbiBcXG4taW50IGhwYWdlX3VuaXRfdGVzdHModm9pZClcXG4rc3RhdGljIGludCBocGFnZV91bml0X3Rlc3RzKHZvaWQpXFxuIHtcXG4gXFx0Y2hhciAqbWFwO1xcbiBcXHRpbnQgcmV0LCByZXQyO1xcbiBcXHRzaXplX3QgbnVtX3BhZ2VzID0gMTA7XFxuLVxcdHVuc2lnbmVkIGxvbmcgbG9uZyBtYXBfc2l6ZSA9IGhwYWdlX3NpemUgKiBudW1fcGFnZXM7XFxuLVxcdHVuc2lnbmVkIGxvbmcgbG9uZyB2ZWNfc2l6ZSA9IG1hcF9zaXplL3BhZ2Vfc2l6ZTtcXG4rXFx0c2l6ZV90IG1hcF9zaXplID0gaHBhZ2Vfc2l6ZSAqIG51bV9wYWdlcztcXG4rXFx0c2l6ZV90IHZlY19zaXplID0gbWFwX3NpemUvcGFnZV9zaXplO1xcbiBcXHRzdHJ1Y3QgcGFnZV9yZWdpb24gKnZlYywgKnZlYzI7XFxuIFxcbiBcXHR2ZWMgPSBjYWxsb2ModmVjX3NpemUsIHNpemVvZihzdHJ1Y3QgcGFnZV9yZWdpb24pKTtcXG5AQCAtOTk5LDExICsxMDAwLDEyIEBAIGludCBocGFnZV91bml0X3Rlc3RzKHZvaWQpXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbi1pbnQgdW5tYXBwZWRfcmVnaW9uX3Rlc3RzKHZvaWQpXFxuK3N0YXRpYyBpbnQgdW5tYXBwZWRfcmVnaW9uX3Rlc3RzKHZvaWQpXFxuIHtcXG4gXFx0dm9pZCAqc3RhcnQgPSAodm9pZCAqKTB4MTAwMDAwMDA7XFxuLVxcdGludCB3cml0dGVuLCBsZW4gPSAweDAwMDQwMDAwO1xcbi1cXHRsb25nIHZlY19zaXplID0gbGVuIC8gcGFnZV9zaXplO1xcbitcXHRpbnQgd3JpdHRlbjtcXG4rXFx0c2l6ZV90IGxlbiA9IDB4MDAwNDAwMDA7XFxuK1xcdHNpemVfdCB2ZWNfc2l6ZSA9IGxlbiAvIHBhZ2Vfc2l6ZTtcXG4gXFx0c3RydWN0IHBhZ2VfcmVnaW9uICp2ZWMgPSBjYWxsb2ModmVjX3NpemUsIHNpemVvZihzdHJ1Y3QgcGFnZV9yZWdpb24pKTtcXG4gXFx0aWYgKCF2ZWMpXFxuIFxcdFxcdGtzZnRfZXhpdF9mYWlsX21zZyhcXFwiZXJyb3Igbm9tZW1cXFxcblxcXCIpO1xcbkBAIC0xMDcyLDcgKzEwNzQsNyBAQCBzdGF0aWMgdm9pZCB0ZXN0X3NpbXBsZSh2b2lkKVxcbiAgKiB3aXRoIG5vIHBhZ2UgdGFibGUsIGV4ZXJjaXNpbmcgcGFnZW1hcF9zY2FuX3B0ZV9ob2xlKCk7IGEgYmFzZS1wYWdlIHJhbmdlXFxuICAqIGxlYXZlcyBwdGVfbm9uZSBlbnRyaWVzLlxcbiAgKi9cXG4tc3RhdGljIHZvaWQgdW5wb3B1bGF0ZWRfd3JpdHRlbl90ZXN0KGNvbnN0IGNoYXIgKm5hbWUsIGNoYXIgKm1lbSwgbG9uZyBzaXplLFxcbitzdGF0aWMgdm9pZCB1bnBvcHVsYXRlZF93cml0dGVuX3Rlc3QoY29uc3QgY2hhciAqbmFtZSwgY2hhciAqbWVtLCBzaXplX3Qgc2l6ZSxcXG4gXFx0XFx0XFx0XFx0ICAgICBib29sIHVzZV90aHApXFxuIHtcXG4gXFx0bG9uZyBucGFnZXMgPSBzaXplIC8gcGFnZV9zaXplLCBmYXN0ID0gMCwgc2xvdyA9IDAsIHJldDtcXG5AQCAtMTExNSw3ICsxMTE3LDcgQEAgc3RhdGljIHZvaWQgdW5wb3B1bGF0ZWRfd3JpdHRlbl90ZXN0KGNvbnN0IGNoYXIgKm5hbWUsIGNoYXIgKm1lbSwgbG9uZyBzaXplLFxcbiBcXG4gc3RhdGljIHZvaWQgdW5wb3B1bGF0ZWRfc2Nhbl90ZXN0KHZvaWQpXFxuIHtcXG4tXFx0bG9uZyBtZW1fc2l6ZSA9IDE2ICogcGFnZV9zaXplO1xcbitcXHRzaXplX3QgbWVtX3NpemUgPSAxNiAqIHBhZ2Vfc2l6ZTtcXG4gXFx0Y2hhciAqbWVtO1xcbiBcXG4gXFx0bWVtID0gbW1hcChOVUxMLCBtZW1fc2l6ZSwgUFJPVF9SRUFEIHwgUFJPVF9XUklURSxcXG5AQCAtMTE1NSwxMCArMTE1NywxMCBAQCBzdGF0aWMgdm9pZCB1bnBvcHVsYXRlZF90aHBfc2Nhbl90ZXN0KHZvaWQpXFxuIFxcdG11bm1hcChhcmVhLCAyICogaHBhZ2Vfc2l6ZSk7XFxuIH1cXG4gXFxuLWludCBzYW5pdHlfdGVzdHModm9pZClcXG4rc3RhdGljIGludCBzYW5pdHlfdGVzdHModm9pZClcXG4ge1xcbi1cXHR1bnNpZ25lZCBsb25nIGxvbmcgbWVtX3NpemUsIHZlY19zaXplO1xcbi1cXHRsb25nIHJldCwgZmQsIGksIGJ1Zl9zaXplLCBucl9wYWdlcztcXG4rXFx0c2l6ZV90IG1lbV9zaXplLCB2ZWNfc2l6ZSwgaSwgYnVmX3NpemU7XFxuK1xcdGxvbmcgcmV0LCBmZCwgbnJfcGFnZXM7XFxuIFxcdHN0cnVjdCBwYWdlX3JlZ2lvbiAqdmVjO1xcbiBcXHRjaGFyICptZW0sICpmbWVtO1xcbiBcXHRzdHJ1Y3Qgc3RhdCBzYnVmO1xcbkBAIC0xMzI3LDcgKzEzMjksNyBAQCBpbnQgc2FuaXR5X3Rlc3RzKHZvaWQpXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbi1pbnQgbXByb3RlY3RfdGVzdHModm9pZClcXG4rc3RhdGljIGludCBtcHJvdGVjdF90ZXN0cyh2b2lkKVxcbiB7XFxuIFxcdGludCByZXQ7XFxuIFxcdGNoYXIgKm1lbSwgKm1lbTI7XFxuQEAgLTE0NDcsNyArMTQ0OSw3IEBAIHN0YXRpYyBzc2l6ZV90IGdldF9kaXJ0eV9wYWdlc19yZXNldChjaGFyICptZW0sIHVuc2lnbmVkIGludCBjb3VudCxcXG4gXFx0cmV0dXJuIGNudDtcXG4gfVxcbiBcXG4tdm9pZCAqdGhyZWFkX3Byb2Modm9pZCAqbWVtKVxcbitzdGF0aWMgdm9pZCAqdGhyZWFkX3Byb2Modm9pZCAqbWVtKVxcbiB7XFxuIFxcdGludCAqbSA9IG1lbTtcXG4gXFx0bG9uZyBjdXJyX2ZhdWx0cywgZmF1bHRzO1xcbkBAIC0xNDg3LDcgKzE0ODksNyBAQCB2b2lkICp0aHJlYWRfcHJvYyh2b2lkICptZW0pXFxuIFxcdHJldHVybiBOVUxMO1xcbiB9XFxuIFxcbi1zdGF0aWMgdm9pZCB0cmFuc2FjdF90ZXN0KGludCBwYWdlX3NpemUpXFxuK3N0YXRpYyB2b2lkIHRyYW5zYWN0X3Rlc3Qodm9pZClcXG4ge1xcbiBcXHR1bnNpZ25lZCBpbnQgaSwgY291bnQsIGV4dHJhX3BhZ2VzO1xcbiBcXHR1bnNpZ25lZCBpbnQgYztcXG5AQCAtMTU4MCwxMSArMTU4MiwxMSBAQCBzdGF0aWMgdm9pZCB0cmFuc2FjdF90ZXN0KGludCBwYWdlX3NpemUpXFxuIFxcdFxcdFxcdCAgICAgIGV4dHJhX3RocmVhZF9mYXVsdHMpO1xcbiB9XFxuIFxcbi12b2lkIHplcm9wZm5fdGVzdHModm9pZClcXG4rc3RhdGljIHZvaWQgemVyb3Bmbl90ZXN0cyh2b2lkKVxcbiB7XFxuLVxcdHVuc2lnbmVkIGxvbmcgbG9uZyBtZW1fc2l6ZTtcXG4rXFx0c2l6ZV90IG1lbV9zaXplLCBpO1xcbiBcXHRzdHJ1Y3QgcGFnZV9yZWdpb24gdmVjO1xcbi1cXHRpbnQgaSwgcmV0O1xcbitcXHRpbnQgcmV0O1xcbiBcXHRjaGFyICptbWFwX21lbSwgKm1lbTtcXG4gXFxuIFxcdC8qIFRlc3Qgd2l0aCBub3JtYWwgbWVtb3J5ICovXFxuQEAgLTE2NDIsOCArMTY0NCw4IEBAIHZvaWQgemVyb3Bmbl90ZXN0cyh2b2lkKVxcbiBcXG4gaW50IG1haW4oaW50IF9fYXR0cmlidXRlX18oKHVudXNlZCkpIGFyZ2MsIGNoYXIgKmFyZ3ZbXSlcXG4ge1xcbi1cXHRpbnQgc2htaWQsIGJ1Zl9zaXplLCBmZCwgaSwgcmV0O1xcbi1cXHR1bnNpZ25lZCBsb25nIGxvbmcgbWVtX3NpemU7XFxuK1xcdGludCBzaG1pZCwgZmQsIHJldDtcXG4rXFx0c2l6ZV90IG1lbV9zaXplLCBidWZfc2l6ZSwgaTtcXG4gXFx0Y2hhciAqbWVtLCAqbWFwLCAqZm1lbTtcXG4gXFx0c3RydWN0IHN0YXQgc2J1ZjtcXG4gXFxuQEAgLTE2NTEsNiArMTY1Myw5IEBAIGludCBtYWluKGludCBfX2F0dHJpYnV0ZV9fKCh1bnVzZWQpKSBhcmdjLCBjaGFyICphcmd2W10pXFxuIFxcbiBcXHRrc2Z0X3ByaW50X2hlYWRlcigpO1xcbiBcXG4rXFx0cGFnZV9zaXplID0gZ2V0cGFnZXNpemUoKTtcXG4rXFx0aHBhZ2Vfc2l6ZSA9IHJlYWRfcG1kX3BhZ2VzaXplKCk7XFxuK1xcbiBcXHRpZiAoaW5pdF91ZmZkKCkpXFxuIFxcdFxcdGtzZnRfZXhpdF9za2lwKFxcXCJGYWlsZWQgdG8gaW5pdGlhbGl6ZSB1c2VyZmF1bHRmZFxcXFxuXFxcIik7XFxuIFxcbkBAIC0xNjU5LDkgKzE2NjQsNiBAQCBpbnQgbWFpbihpbnQgX19hdHRyaWJ1dGVfXygodW51c2VkKSkgYXJnYywgY2hhciAqYXJndltdKVxcbiBcXG4gXFx0a3NmdF9zZXRfcGxhbigxMTkpO1xcbiBcXG4tXFx0cGFnZV9zaXplID0gZ2V0cGFnZXNpemUoKTtcXG4tXFx0aHBhZ2Vfc2l6ZSA9IHJlYWRfcG1kX3BhZ2VzaXplKCk7XFxuLVxcbiBcXHRwYWdlbWFwX2ZkID0gb3BlbihQQUdFTUFQLCBPX1JET05MWSk7XFxuIFxcdGlmIChwYWdlbWFwX2ZkIFxcdTAwM2MgMClcXG4gXFx0XFx0a3NmdF9leGl0X2ZhaWxfbXNnKFxcXCJGYWlsZWQgdG8gb3BlbiBcXFwiIFBBR0VNQVAgXFxcIlxcXFxuXFxcIik7XFxuQEAgLTE4MjEsNyArMTgyMyw3IEBAIGludCBtYWluKGludCBfX2F0dHJpYnV0ZV9fKCh1bnVzZWQpKSBhcmdjLCBjaGFyICphcmd2W10pXFxuIFxcdG1wcm90ZWN0X3Rlc3RzKCk7XFxuIFxcbiBcXHQvKiAxMy4gVHJhbnNhY3QgdGVzdCAqL1xcbi1cXHR0cmFuc2FjdF90ZXN0KHBhZ2Vfc2l6ZSk7XFxuK1xcdHRyYW5zYWN0X3Rlc3QoKTtcXG4gXFxuIFxcdC8qIDE0LiBTYW5pdHkgdGVzdGluZyAqL1xcbiBcXHRzYW5pdHlfdGVzdHMoKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTY6NTM6MzUuODg2OTU4NTQ3WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjo3MDgzOTY2MDMzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIHVzZXItc3BhY2Ugc2VsZnRlc3QgY29kZSBpbiB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wYWdlbWFwX2lvY3RsLmMsIHdoaWNoIGRvZXMgbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlIG9yIGtlcm5lbC1zcGFjZSBsb2dpYy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3NcbnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4xLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncyxcbmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuXG5cbi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6XG4gIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWRcbiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS5cbiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLFxuICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuXG5cbi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgXCJOTyBGVU5DVElPTkFMIENIQU5HRVwiIChORkNJKSBPUiBcIlJFRkFDVE9SSU5HXCIgQ0xBSU1TOlxuICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzIFwiY2xlYW51cHNcIiwgXCJyZWZhY3RvcmluZ3NcIiwgb3Igc3RhdGVcbiAgXCJObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZFwiLiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS5cbiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50XG4gIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLlxuICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLlxuXG4tIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOlxuICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosXG4gIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLlxuICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyXG4gIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczpcblxuLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOlxuICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy5cbiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLylcbiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuXG4gICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHNcbiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLlxuICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy5cbi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOlxuICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6XG4gICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nXG4gICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuXG4gICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6XG4tIENvcmUgU3Vic3lzdGVtczpcbiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksXG4gICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLlxuLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6XG4gICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLlxuLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6XG4gICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLlxuLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOlxuICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOlxuXG4tIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzpcbiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXNcbiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHRcbiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuXG4gIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyBcImZvY3VzZWRcIixcbiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLlxuXG4tIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzpcbiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzXG4gIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LlxuXG4tIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKTpcbiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFja1xuICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy5cbiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyXG4gIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3Ncbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5JZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOlxuLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuLSBDaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLlxuLSBTdHJpcCBhbnkgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgZjg4NmJiMDg3Y2QyOWIwNDZiNjVkNGU4OGM0ZTQ3ZjRhYzM5NTAzZFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgU2VwIDggMTY6NTM6MzQgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wYWdlbWFwX2lvY3RsLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wYWdlbWFwX2lvY3RsLmNcbmluZGV4IGVhZGM3MTU5Y2E1YjkuLmQ5YTRmYjc4MmVjZmUgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wYWdlbWFwX2lvY3RsLmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3BhZ2VtYXBfaW9jdGwuY1xuQEAgLTM2LDE1ICszNiwxNSBAQFxuIFxuICNkZWZpbmUgVEVTVF9JVEVSQVRJT05TIDEwMFxuICNkZWZpbmUgUEFHRU1BUCBcIi9wcm9jL3NlbGYvcGFnZW1hcFwiXG4taW50IHBhZ2VtYXBfZmQ7XG4taW50IHVmZmQ7XG4tc2l6ZV90IHBhZ2Vfc2l6ZTtcbi1zaXplX3QgaHBhZ2Vfc2l6ZTtcbi1jb25zdCBjaGFyICpwcm9nbmFtZTtcbitzdGF0aWMgaW50IHBhZ2VtYXBfZmQ7XG4rc3RhdGljIGludCB1ZmZkO1xuK3N0YXRpYyBzaXplX3QgcGFnZV9zaXplO1xuK3N0YXRpYyBzaXplX3QgaHBhZ2Vfc2l6ZTtcbitzdGF0aWMgY29uc3QgY2hhciAqcHJvZ25hbWU7XG4gXG4gI2RlZmluZSBMRU4ocmVnaW9uKVx0KChyZWdpb24uZW5kIC0gcmVnaW9uLnN0YXJ0KS9wYWdlX3NpemUpXG4gXG4tc3RhdGljIGxvbmcgcGFnZW1hcF9pb2N0bCh2b2lkICpzdGFydCwgaW50IGxlbiwgdm9pZCAqdmVjLCBpbnQgdmVjX2xlbiwgaW50IGZsYWcsXG4rc3RhdGljIGxvbmcgcGFnZW1hcF9pb2N0bCh2b2lkICpzdGFydCwgc2l6ZV90IGxlbiwgdm9pZCAqdmVjLCBzaXplX3QgdmVjX2xlbiwgaW50IGZsYWcsXG4gXHRcdFx0ICBpbnQgbWF4X3BhZ2VzLCBsb25nIHJlcXVpcmVkX21hc2ssIGxvbmcgYW55b2ZfbWFzaywgbG9uZyBleGNsdWRlZF9tYXNrLFxuIFx0XHRcdCAgbG9uZyByZXR1cm5fbWFzaylcbiB7XG5AQCAtNjUsNyArNjUsNyBAQCBzdGF0aWMgbG9uZyBwYWdlbWFwX2lvY3RsKHZvaWQgKnN0YXJ0LCBpbnQgbGVuLCB2b2lkICp2ZWMsIGludCB2ZWNfbGVuLCBpbnQgZmxhZ1xuIFx0cmV0dXJuIGlvY3RsKHBhZ2VtYXBfZmQsIFBBR0VNQVBfU0NBTiwgXHUwMDI2YXJnKTtcbiB9XG4gXG4tc3RhdGljIGxvbmcgcGFnZW1hcF9pb2Modm9pZCAqc3RhcnQsIGludCBsZW4sIHZvaWQgKnZlYywgaW50IHZlY19sZW4sIGludCBmbGFnLFxuK3N0YXRpYyBsb25nIHBhZ2VtYXBfaW9jKHZvaWQgKnN0YXJ0LCBzaXplX3QgbGVuLCB2b2lkICp2ZWMsIHNpemVfdCB2ZWNfbGVuLCBpbnQgZmxhZyxcbiBcdFx0XHRpbnQgbWF4X3BhZ2VzLCBsb25nIHJlcXVpcmVkX21hc2ssIGxvbmcgYW55b2ZfbWFzaywgbG9uZyBleGNsdWRlZF9tYXNrLFxuIFx0XHRcdGxvbmcgcmV0dXJuX21hc2ssIGxvbmcgKndhbGtfZW5kKVxuIHtcbkBAIC05Miw4ICs5Miw3IEBAIHN0YXRpYyBsb25nIHBhZ2VtYXBfaW9jKHZvaWQgKnN0YXJ0LCBpbnQgbGVuLCB2b2lkICp2ZWMsIGludCB2ZWNfbGVuLCBpbnQgZmxhZyxcbiBcdHJldHVybiByZXQ7XG4gfVxuIFxuLVxuLWludCBpbml0X3VmZmQodm9pZClcbitzdGF0aWMgaW50IGluaXRfdWZmZCh2b2lkKVxuIHtcbiBcdHN0cnVjdCB1ZmZkaW9fYXBpIHVmZmRpb19hcGk7XG4gXG5AQCAtMTE2LDcgKzExNSw3IEBAIGludCBpbml0X3VmZmQodm9pZClcbiBcdHJldHVybiAwO1xuIH1cbiBcbi1pbnQgd3BfaW5pdCh2b2lkICphZGRyLCBsb25nIHNpemUpXG4rc3RhdGljIGludCB3cF9pbml0KHZvaWQgKmFkZHIsIHNpemVfdCBzaXplKVxuIHtcbiBcdHN0cnVjdCB1ZmZkaW9fcmVnaXN0ZXIgdWZmZGlvX3JlZ2lzdGVyO1xuIFx0c3RydWN0IHVmZmRpb193cml0ZXByb3RlY3Qgd3A7XG5AQCAtMTQwLDcgKzEzOSw3IEBAIGludCB3cF9pbml0KHZvaWQgKmFkZHIsIGxvbmcgc2l6ZSlcbiBcdHJldHVybiAwO1xuIH1cbiBcbi1pbnQgd3BfZnJlZSh2b2lkICphZGRyLCBsb25nIHNpemUpXG4rc3RhdGljIGludCB3cF9mcmVlKHZvaWQgKmFkZHIsIHNpemVfdCBzaXplKVxuIHtcbiBcdHN0cnVjdCB1ZmZkaW9fcmVnaXN0ZXIgdWZmZGlvX3JlZ2lzdGVyO1xuIFxuQEAgLTE1Miw3ICsxNTEsNyBAQCBpbnQgd3BfZnJlZSh2b2lkICphZGRyLCBsb25nIHNpemUpXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4taW50IHdwX2FkZHJfcmFuZ2Uodm9pZCAqYWRkciwgaW50IHNpemUpXG4rc3RhdGljIGludCB3cF9hZGRyX3JhbmdlKHZvaWQgKmFkZHIsIHNpemVfdCBzaXplKVxuIHtcbiBcdGlmIChwYWdlbWFwX2lvY3RsKGFkZHIsIHNpemUsIE5VTEwsIDAsXG4gXHRcdFx0ICBQTV9TQ0FOX1dQX01BVENISU5HIHwgUE1fU0NBTl9DSEVDS19XUEFTWU5DLFxuQEAgLTE2Miw3ICsxNjEsNyBAQCBpbnQgd3BfYWRkcl9yYW5nZSh2b2lkICphZGRyLCBpbnQgc2l6ZSlcbiBcdHJldHVybiAwO1xuIH1cbiBcbi12b2lkICpnZXRodWdldGxiX21lbShpbnQgc2l6ZSwgaW50ICpzaG1pZClcbitzdGF0aWMgdm9pZCAqZ2V0aHVnZXRsYl9tZW0oc2l6ZV90IHNpemUsIGludCAqc2htaWQpXG4ge1xuIFx0Y2hhciAqbWVtO1xuIFxuQEAgLTE4Niw5ICsxODUsMTAgQEAgdm9pZCAqZ2V0aHVnZXRsYl9tZW0oaW50IHNpemUsIGludCAqc2htaWQpXG4gXHRyZXR1cm4gbWVtO1xuIH1cbiBcbi1pbnQgdXNlcmZhdWx0ZmRfdGVzdHModm9pZClcbitzdGF0aWMgaW50IHVzZXJmYXVsdGZkX3Rlc3RzKHZvaWQpXG4ge1xuLVx0bG9uZyBtZW1fc2l6ZSwgdmVjX3NpemUsIHdyaXR0ZW4sIG51bV9wYWdlcyA9IDE2O1xuK1x0c2l6ZV90IG1lbV9zaXplLCB2ZWNfc2l6ZSwgbnVtX3BhZ2VzID0gMTY7XG4rXHRsb25nIHdyaXR0ZW47XG4gXHRjaGFyICptZW0sICp2ZWM7XG4gXG4gXHRtZW1fc2l6ZSA9IG51bV9wYWdlcyAqIHBhZ2Vfc2l6ZTtcbkBAIC0yMjksOSArMjI5LDEwIEBAIGludCB1c2VyZmF1bHRmZF90ZXN0cyh2b2lkKVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuLWludCBnZXRfcmVhZHMoc3RydWN0IHBhZ2VfcmVnaW9uICp2ZWMsIGludCB2ZWNfc2l6ZSlcbitzdGF0aWMgaW50IGdldF9yZWFkcyhzdHJ1Y3QgcGFnZV9yZWdpb24gKnZlYywgc2l6ZV90IHZlY19zaXplKVxuIHtcbi1cdGludCBpLCBzdW0gPSAwO1xuK1x0c2l6ZV90IGk7XG4rXHRpbnQgc3VtID0gMDtcbiBcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHZlY19zaXplOyBpKyspXG4gXHRcdHN1bSArPSBMRU4odmVjW2ldKTtcbkBAIC0yMzksOSArMjQwLDkgQEAgaW50IGdldF9yZWFkcyhzdHJ1Y3QgcGFnZV9yZWdpb24gKnZlYywgaW50IHZlY19zaXplKVxuIFx0cmV0dXJuIHN1bTtcbiB9XG4gXG4taW50IHNhbml0eV90ZXN0c19zZCh2b2lkKVxuK3N0YXRpYyBpbnQgc2FuaXR5X3Rlc3RzX3NkKHZvaWQpXG4ge1xuLVx0dW5zaWduZWQgbG9uZyBsb25nIG1lbV9zaXplLCB2ZWNfc2l6ZSwgaSwgdG90YWxfcGFnZXMgPSAwO1xuK1x0c2l6ZV90IG1lbV9zaXplLCB2ZWNfc2l6ZSwgaSwgdG90YWxfcGFnZXMgPSAwO1xuIFx0bG9uZyByZXQsIHJldDIsIHJldDM7XG4gXHRpbnQgbnVtX3BhZ2VzID0gMTAwMDtcbiBcdGludCB0b3RhbF93cml0ZXMsIHRvdGFsX3JlYWRzLCByZWFkcywgY291bnQ7XG5AQCAtMzMxLDcgKzMzMiw3IEBAIGludCBzYW5pdHlfdGVzdHNfc2Qodm9pZClcbiBcdGlmIChyZXQgXHUwMDNjIDApXG4gXHRcdGtzZnRfZXhpdF9mYWlsX21zZyhcImVycm9yICVsZCAlZCAlc1xcblwiLCByZXQsIGVycm5vLCBzdHJlcnJvcihlcnJubykpO1xuIFxuLVx0a3NmdF90ZXN0X3Jlc3VsdCgodW5zaWduZWQgbG9uZyBsb25nKXJldCA9PSBtZW1fc2l6ZS8ocGFnZV9zaXplICogMiksXG4rXHRrc2Z0X3Rlc3RfcmVzdWx0KChzaXplX3QpcmV0ID09IG1lbV9zaXplLyhwYWdlX3NpemUgKiAyKSxcbiBcdFx0XHQgXCIlcyBSZXBlYXRlZCBwYXR0ZXJuIG9mIHdyaXR0ZW4gYW5kIG5vbi13cml0dGVuIHBhZ2VzXFxuXCIsIF9fZnVuY19fKTtcbiBcbiBcdC8qIDQuIFJlcGVhdGVkIHBhdHRlcm4gb2Ygd3JpdHRlbiBhbmQgbm9uLXdyaXR0ZW4gcGFnZXMgaW4gcGFydHMgKi9cbkBAIC02ODIsOSArNjgzLDkgQEAgaW50IHNhbml0eV90ZXN0c19zZCh2b2lkKVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuLWludCBiYXNlX3Rlc3RzKGNoYXIgKnByZWZpeCwgY2hhciAqbWVtLCB1bnNpZ25lZCBsb25nIGxvbmcgbWVtX3NpemUsIGludCBza2lwKVxuK3N0YXRpYyBpbnQgYmFzZV90ZXN0cyhjaGFyICpwcmVmaXgsIGNoYXIgKm1lbSwgc2l6ZV90IG1lbV9zaXplLCBpbnQgc2tpcClcbiB7XG4tXHR1bnNpZ25lZCBsb25nIGxvbmcgdmVjX3NpemU7XG4rXHRzaXplX3QgdmVjX3NpemU7XG4gXHRpbnQgd3JpdHRlbjtcbiBcdHN0cnVjdCBwYWdlX3JlZ2lvbiAqdmVjLCAqdmVjMjtcbiBcbkBAIC03ODcsNyArNzg4LDcgQEAgaW50IGJhc2VfdGVzdHMoY2hhciAqcHJlZml4LCBjaGFyICptZW0sIHVuc2lnbmVkIGxvbmcgbG9uZyBtZW1fc2l6ZSwgaW50IHNraXApXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4tdm9pZCAqZ2V0aHVnZXBhZ2UoaW50IG1hcF9zaXplKVxuK3N0YXRpYyB2b2lkICpnZXRodWdlcGFnZShzaXplX3QgbWFwX3NpemUpXG4ge1xuIFx0aW50IHJldDtcbiBcdGNoYXIgKm1hcDtcbkBAIC04MDUsMTMgKzgwNiwxMyBAQCB2b2lkICpnZXRodWdlcGFnZShpbnQgbWFwX3NpemUpXG4gXHRyZXR1cm4gbWFwO1xuIH1cbiBcbi1pbnQgaHBhZ2VfdW5pdF90ZXN0cyh2b2lkKVxuK3N0YXRpYyBpbnQgaHBhZ2VfdW5pdF90ZXN0cyh2b2lkKVxuIHtcbiBcdGNoYXIgKm1hcDtcbiBcdGludCByZXQsIHJldDI7XG4gXHRzaXplX3QgbnVtX3BhZ2VzID0gMTA7XG4tXHR1bnNpZ25lZCBsb25nIGxvbmcgbWFwX3NpemUgPSBocGFnZV9zaXplICogbnVtX3BhZ2VzO1xuLVx0dW5zaWduZWQgbG9uZyBsb25nIHZlY19zaXplID0gbWFwX3NpemUvcGFnZV9zaXplO1xuK1x0c2l6ZV90IG1hcF9zaXplID0gaHBhZ2Vfc2l6ZSAqIG51bV9wYWdlcztcbitcdHNpemVfdCB2ZWNfc2l6ZSA9IG1hcF9zaXplL3BhZ2Vfc2l6ZTtcbiBcdHN0cnVjdCBwYWdlX3JlZ2lvbiAqdmVjLCAqdmVjMjtcbiBcbiBcdHZlYyA9IGNhbGxvYyh2ZWNfc2l6ZSwgc2l6ZW9mKHN0cnVjdCBwYWdlX3JlZ2lvbikpO1xuQEAgLTk5OSwxMSArMTAwMCwxMiBAQCBpbnQgaHBhZ2VfdW5pdF90ZXN0cyh2b2lkKVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuLWludCB1bm1hcHBlZF9yZWdpb25fdGVzdHModm9pZClcbitzdGF0aWMgaW50IHVubWFwcGVkX3JlZ2lvbl90ZXN0cyh2b2lkKVxuIHtcbiBcdHZvaWQgKnN0YXJ0ID0gKHZvaWQgKikweDEwMDAwMDAwO1xuLVx0aW50IHdyaXR0ZW4sIGxlbiA9IDB4MDAwNDAwMDA7XG4tXHRsb25nIHZlY19zaXplID0gbGVuIC8gcGFnZV9zaXplO1xuK1x0aW50IHdyaXR0ZW47XG4rXHRzaXplX3QgbGVuID0gMHgwMDA0MDAwMDtcbitcdHNpemVfdCB2ZWNfc2l6ZSA9IGxlbiAvIHBhZ2Vfc2l6ZTtcbiBcdHN0cnVjdCBwYWdlX3JlZ2lvbiAqdmVjID0gY2FsbG9jKHZlY19zaXplLCBzaXplb2Yoc3RydWN0IHBhZ2VfcmVnaW9uKSk7XG4gXHRpZiAoIXZlYylcbiBcdFx0a3NmdF9leGl0X2ZhaWxfbXNnKFwiZXJyb3Igbm9tZW1cXG5cIik7XG5AQCAtMTA3Miw3ICsxMDc0LDcgQEAgc3RhdGljIHZvaWQgdGVzdF9zaW1wbGUodm9pZClcbiAgKiB3aXRoIG5vIHBhZ2UgdGFibGUsIGV4ZXJjaXNpbmcgcGFnZW1hcF9zY2FuX3B0ZV9ob2xlKCk7IGEgYmFzZS1wYWdlIHJhbmdlXG4gICogbGVhdmVzIHB0ZV9ub25lIGVudHJpZXMuXG4gICovXG4tc3RhdGljIHZvaWQgdW5wb3B1bGF0ZWRfd3JpdHRlbl90ZXN0KGNvbnN0IGNoYXIgKm5hbWUsIGNoYXIgKm1lbSwgbG9uZyBzaXplLFxuK3N0YXRpYyB2b2lkIHVucG9wdWxhdGVkX3dyaXR0ZW5fdGVzdChjb25zdCBjaGFyICpuYW1lLCBjaGFyICptZW0sIHNpemVfdCBzaXplLFxuIFx0XHRcdFx0ICAgICBib29sIHVzZV90aHApXG4ge1xuIFx0bG9uZyBucGFnZXMgPSBzaXplIC8gcGFnZV9zaXplLCBmYXN0ID0gMCwgc2xvdyA9IDAsIHJldDtcbkBAIC0xMTE1LDcgKzExMTcsNyBAQCBzdGF0aWMgdm9pZCB1bnBvcHVsYXRlZF93cml0dGVuX3Rlc3QoY29uc3QgY2hhciAqbmFtZSwgY2hhciAqbWVtLCBsb25nIHNpemUsXG4gXG4gc3RhdGljIHZvaWQgdW5wb3B1bGF0ZWRfc2Nhbl90ZXN0KHZvaWQpXG4ge1xuLVx0bG9uZyBtZW1fc2l6ZSA9IDE2ICogcGFnZV9zaXplO1xuK1x0c2l6ZV90IG1lbV9zaXplID0gMTYgKiBwYWdlX3NpemU7XG4gXHRjaGFyICptZW07XG4gXG4gXHRtZW0gPSBtbWFwKE5VTEwsIG1lbV9zaXplLCBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFLFxuQEAgLTExNTUsMTAgKzExNTcsMTAgQEAgc3RhdGljIHZvaWQgdW5wb3B1bGF0ZWRfdGhwX3NjYW5fdGVzdCh2b2lkKVxuIFx0bXVubWFwKGFyZWEsIDIgKiBocGFnZV9zaXplKTtcbiB9XG4gXG4taW50IHNhbml0eV90ZXN0cyh2b2lkKVxuK3N0YXRpYyBpbnQgc2FuaXR5X3Rlc3RzKHZvaWQpXG4ge1xuLVx0dW5zaWduZWQgbG9uZyBsb25nIG1lbV9zaXplLCB2ZWNfc2l6ZTtcbi1cdGxvbmcgcmV0LCBmZCwgaSwgYnVmX3NpemUsIG5yX3BhZ2VzO1xuK1x0c2l6ZV90IG1lbV9zaXplLCB2ZWNfc2l6ZSwgaSwgYnVmX3NpemU7XG4rXHRsb25nIHJldCwgZmQsIG5yX3BhZ2VzO1xuIFx0c3RydWN0IHBhZ2VfcmVnaW9uICp2ZWM7XG4gXHRjaGFyICptZW0sICpmbWVtO1xuIFx0c3RydWN0IHN0YXQgc2J1ZjtcbkBAIC0xMzI3LDcgKzEzMjksNyBAQCBpbnQgc2FuaXR5X3Rlc3RzKHZvaWQpXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4taW50IG1wcm90ZWN0X3Rlc3RzKHZvaWQpXG4rc3RhdGljIGludCBtcHJvdGVjdF90ZXN0cyh2b2lkKVxuIHtcbiBcdGludCByZXQ7XG4gXHRjaGFyICptZW0sICptZW0yO1xuQEAgLTE0NDcsNyArMTQ0OSw3IEBAIHN0YXRpYyBzc2l6ZV90IGdldF9kaXJ0eV9wYWdlc19yZXNldChjaGFyICptZW0sIHVuc2lnbmVkIGludCBjb3VudCxcbiBcdHJldHVybiBjbnQ7XG4gfVxuIFxuLXZvaWQgKnRocmVhZF9wcm9jKHZvaWQgKm1lbSlcbitzdGF0aWMgdm9pZCAqdGhyZWFkX3Byb2Modm9pZCAqbWVtKVxuIHtcbiBcdGludCAqbSA9IG1lbTtcbiBcdGxvbmcgY3Vycl9mYXVsdHMsIGZhdWx0cztcbkBAIC0xNDg3LDcgKzE0ODksNyBAQCB2b2lkICp0aHJlYWRfcHJvYyh2b2lkICptZW0pXG4gXHRyZXR1cm4gTlVMTDtcbiB9XG4gXG4tc3RhdGljIHZvaWQgdHJhbnNhY3RfdGVzdChpbnQgcGFnZV9zaXplKVxuK3N0YXRpYyB2b2lkIHRyYW5zYWN0X3Rlc3Qodm9pZClcbiB7XG4gXHR1bnNpZ25lZCBpbnQgaSwgY291bnQsIGV4dHJhX3BhZ2VzO1xuIFx0dW5zaWduZWQgaW50IGM7XG5AQCAtMTU4MCwxMSArMTU4MiwxMSBAQCBzdGF0aWMgdm9pZCB0cmFuc2FjdF90ZXN0KGludCBwYWdlX3NpemUpXG4gXHRcdFx0ICAgICAgZXh0cmFfdGhyZWFkX2ZhdWx0cyk7XG4gfVxuIFxuLXZvaWQgemVyb3Bmbl90ZXN0cyh2b2lkKVxuK3N0YXRpYyB2b2lkIHplcm9wZm5fdGVzdHModm9pZClcbiB7XG4tXHR1bnNpZ25lZCBsb25nIGxvbmcgbWVtX3NpemU7XG4rXHRzaXplX3QgbWVtX3NpemUsIGk7XG4gXHRzdHJ1Y3QgcGFnZV9yZWdpb24gdmVjO1xuLVx0aW50IGksIHJldDtcbitcdGludCByZXQ7XG4gXHRjaGFyICptbWFwX21lbSwgKm1lbTtcbiBcbiBcdC8qIFRlc3Qgd2l0aCBub3JtYWwgbWVtb3J5ICovXG5AQCAtMTY0Miw4ICsxNjQ0LDggQEAgdm9pZCB6ZXJvcGZuX3Rlc3RzKHZvaWQpXG4gXG4gaW50IG1haW4oaW50IF9fYXR0cmlidXRlX18oKHVudXNlZCkpIGFyZ2MsIGNoYXIgKmFyZ3ZbXSlcbiB7XG4tXHRpbnQgc2htaWQsIGJ1Zl9zaXplLCBmZCwgaSwgcmV0O1xuLVx0dW5zaWduZWQgbG9uZyBsb25nIG1lbV9zaXplO1xuK1x0aW50IHNobWlkLCBmZCwgcmV0O1xuK1x0c2l6ZV90IG1lbV9zaXplLCBidWZfc2l6ZSwgaTtcbiBcdGNoYXIgKm1lbSwgKm1hcCwgKmZtZW07XG4gXHRzdHJ1Y3Qgc3RhdCBzYnVmO1xuIFxuQEAgLTE2NTEsNiArMTY1Myw5IEBAIGludCBtYWluKGludCBfX2F0dHJpYnV0ZV9fKCh1bnVzZWQpKSBhcmdjLCBjaGFyICphcmd2W10pXG4gXG4gXHRrc2Z0X3ByaW50X2hlYWRlcigpO1xuIFxuK1x0cGFnZV9zaXplID0gZ2V0cGFnZXNpemUoKTtcbitcdGhwYWdlX3NpemUgPSByZWFkX3BtZF9wYWdlc2l6ZSgpO1xuK1xuIFx0aWYgKGluaXRfdWZmZCgpKVxuIFx0XHRrc2Z0X2V4aXRfc2tpcChcIkZhaWxlZCB0byBpbml0aWFsaXplIHVzZXJmYXVsdGZkXFxuXCIpO1xuIFxuQEAgLTE2NTksOSArMTY2NCw2IEBAIGludCBtYWluKGludCBfX2F0dHJpYnV0ZV9fKCh1bnVzZWQpKSBhcmdjLCBjaGFyICphcmd2W10pXG4gXG4gXHRrc2Z0X3NldF9wbGFuKDExOSk7XG4gXG4tXHRwYWdlX3NpemUgPSBnZXRwYWdlc2l6ZSgpO1xuLVx0aHBhZ2Vfc2l6ZSA9IHJlYWRfcG1kX3BhZ2VzaXplKCk7XG4tXG4gXHRwYWdlbWFwX2ZkID0gb3BlbihQQUdFTUFQLCBPX1JET05MWSk7XG4gXHRpZiAocGFnZW1hcF9mZCBcdTAwM2MgMClcbiBcdFx0a3NmdF9leGl0X2ZhaWxfbXNnKFwiRmFpbGVkIHRvIG9wZW4gXCIgUEFHRU1BUCBcIlxcblwiKTtcbkBAIC0xODIxLDcgKzE4MjMsNyBAQCBpbnQgbWFpbihpbnQgX19hdHRyaWJ1dGVfXygodW51c2VkKSkgYXJnYywgY2hhciAqYXJndltdKVxuIFx0bXByb3RlY3RfdGVzdHMoKTtcbiBcbiBcdC8qIDEzLiBUcmFuc2FjdCB0ZXN0ICovXG4tXHR0cmFuc2FjdF90ZXN0KHBhZ2Vfc2l6ZSk7XG4rXHR0cmFuc2FjdF90ZXN0KCk7XG4gXG4gXHQvKiAxNC4gU2FuaXR5IHRlc3RpbmcgKi9cbiBcdHNhbml0eV90ZXN0cygpO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTY6NTM6MzUuODg2OTU5ODQ3WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NzA4MzkyNzg5MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gVGhlIHBhdGNoIGlzIHRvdWNoaW5nIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wYWdlbWFwX2lvY3RsLmNgLiBNeSBtaW5kIGltbWVkaWF0ZWx5IGdvZXMgdG8gdGhlIHJ1bGVzIOKAkyBzcGVjaWZpY2FsbHksIHdoZW4gd2UgY2FuIGNvbmZpZGVudGx5IHNheSBhIGNoYW5nZSAqaXNuJ3QqIHdvcnRoIGZ1enppbmcuIEkgbmVlZCB0byBtYWtlIHRoZSBjb3JyZWN0IGFzc2Vzc21lbnQgb2YgV29ydGhGdXp6aW5nLlxuXG5NeSBwcmltYXJ5IGZvY3VzIGlzIG9uIHNlY3Rpb24gMiBvZiB0aGUgY3JpdGVyaWEg4oCTIHRoZSAqbmVnYXRpdmUqIGNyaXRlcmlhLiBXZSdyZSBsb29raW5nIGZvciByZWFzb25zIHRvIHJ1bGUgdGhpcyBwYXRjaCAqb3V0KiBvZiBmdXp6aW5nIHNjb3BlLiBUaGUgcnVsZSBpcyBwcmV0dHkgY2xlYXI6IGlmIGFsbCB0aGUgbW9kaWZpZWQgY29kZSBzdHJpY3RseSBmYWxscyBpbnRvIHRoZSBjYXRlZ29yeSBvZiBcIk5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXMsIGxpa2UgdXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgb3Igc2NyaXB0cyB0aGF0ICpkb24ndCogYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLFwiIHRoZW4gd2UgcmV0dXJuIGBXb3J0aEZ1enppbmc9ZmFsc2VgLlxuXG5Ob3csIGxvb2tpbmcgYXQgdGhlIG1vZGlmaWVkIGZpbGUsIGl0J3MgdW5kZW5pYWJseSB3aXRoaW4gYHRvb2xzL2AsIHNwZWNpZmljYWxseSB1bmRlciBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vYC4gVGhpcyBpbW1lZGlhdGVseSBmbGFncyBpdCBhcyBhIHNlbGZ0ZXN0LCB3aGljaCwgYnkgZGVmaW5pdGlvbiwgaXMgdXNlci1zcGFjZSBjb2RlLiBUaGUgcGF0aCBhbG9uZSBpcyBwcmFjdGljYWxseSBhIGd1YXJhbnRlZSB0aGF0IGl0IGRvZXNuJ3QgdG91Y2ggdGhlIGtlcm5lbCBpbWFnZSBvciBtb2R1bGVzLiBJIG5lZWQgdG8gYmUgMTAwJSBzdXJlLCB0aG91Z2guIFNvLCBJJ20gY2hlY2tpbmcgdGhlIGRpZmYgYWdhaW4g4oCTIGp1c3QgdG8gYmUgY2VydGFpbi5cblxuWWVwLCB0aGUgZGlmZiBjb25maXJtcyBpdC4gVGhlICpvbmx5KiBjaGFuZ2UgaXMgdG8gYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3BhZ2VtYXBfaW9jdGwuY2AuIE5vdGhpbmcgZWxzZSBpcyBpbXBhY3RlZC5cblxuVGhlcmVmb3JlLCB0aGUgdmVyZGljdCBpcyBjbGVhcjogYFdvcnRoRnV6emluZzogZmFsc2VgLiBUaGVyZSBpcyBubyByZWFzb24gdG8gdGVzdCB0aGlzIGZpbGUgYXMgaXQgaXMgYSB1c2VyLXNwYWNlIHNlbGZ0ZXN0LCB3aGljaCBpcyBleGFjdGx5IHdoeSB0aGUgZmlsZSBpcyBzdG9yZWQgaW4gYHRvb2xzYC4gVGhlIHJ1bGVzIGFyZSBtZXQuIENvbnNlcXVlbnRseSwgYEVuYWJsZUNvbmZpZ3NgIGFuZCBgRm9jdXNTeW1ib2xzYCB3aWxsIGJlIGVtcHR5LCBhcyB0aGlzIGlzbid0IGtlcm5lbC1zcGFjZSBsb2dpYyB3ZSdyZSBpbnRlcmVzdGVkIGluIGZ1enppbmcuIFRoZSByZWFzb25pbmcgaXMgc29saWQ6IHNvbGVseSBtb2RpZmllcyBhIHVzZXItc3BhY2Ugc2VsZnRlc3QgYW5kIGhhcyBubyBiZWFyaW5nIG9uIHRoZSBrZXJuZWwgaW1hZ2Ugb3IgbW9kdWxlcy5cblxuQWxyaWdodCwgbGV0J3MgY2FsbCBgc2V0LXJlc3VsdHNgIGFuZCBtb3ZlIG9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2MjAwLCJPdXRwdXRUb2tlbnMiOjc0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzEwLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTY6NTM6NDIuOTcwODkxODZaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMwNzYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgdXNlci1zcGFjZSBzZWxmdGVzdCBjb2RlIGluIHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3BhZ2VtYXBfaW9jdGwuYywgd2hpY2ggZG9lcyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2Ugb3Iga2VybmVsLXNwYWNlIGxvZ2ljLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggb25seSBtb2RpZmllcyB1c2VyLXNwYWNlIHNlbGZ0ZXN0IGNvZGUgaW4gdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGFnZW1hcF9pb2N0bC5jLCB3aGljaCBkb2VzIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSBvciBrZXJuZWwtc3BhY2UgbG9naWMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQxNjo1Mzo0Mi45NzA5MjcyMloiLCJTZXEiOjUsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozODQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow7xgs8[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-08 16:31:19 +0000 UTC FinishedAt: 2026-09-08 16:53:44 +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+CgkJCTx0ZD4yMDI2LzA5LzA4IDE2OjUzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb25seSBtb2RpZmllcyB1c2VyLXNwYWNlIHNlbGZ0ZXN0IGNvZGUgaW4gdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGFnZW1hcF9pb2N0bC5jLCB3aGljaCBkb2VzIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSBvciBrZXJuZWwtc3BhY2UgbG9naWMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDE2OjUzPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgZjg4NmJiMDg3Y2QyOWIwNDZiNjVkNGU4OGM0ZTQ3ZjRhYzM5NTAzZFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgU2VwIDggMTY6NTM6MzQgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGFnZW1hcF9pb2N0bC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGFnZW1hcF9pb2N0bC5jXG5pbmRleCBlYWRjNzE1OWNhNWI5Li5kOWE0ZmI3ODJlY2ZlIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGFnZW1hcF9pb2N0bC5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wYWdlbWFwX2lvY3RsLmNcbkBAIC0zNiwxNSAmIzQzOzM2LDE1IEBAXG4gXG4gI2RlZmluZSBURVNUX0lURVJBVElPTlMgMTAwXG4gI2RlZmluZSBQQUdFTUFQIFwmIzM0Oy9wcm9jL3NlbGYvcGFnZW1hcFwmIzM0O1xuLWludCBwYWdlbWFwX2ZkO1xuLWludCB1ZmZkO1xuLXNpemVfdCBwYWdlX3NpemU7XG4tc2l6ZV90IGhwYWdlX3NpemU7XG4tY29uc3QgY2hhciAqcHJvZ25hbWU7XG4mIzQzO3N0YXRpYyBpbnQgcGFnZW1hcF9mZDtcbiYjNDM7c3RhdGljIGludCB1ZmZkO1xuJiM0MztzdGF0aWMgc2l6ZV90IHBhZ2Vfc2l6ZTtcbiYjNDM7c3RhdGljIHNpemVfdCBocGFnZV9zaXplO1xuJiM0MztzdGF0aWMgY29uc3QgY2hhciAqcHJvZ25hbWU7XG4gXG4gI2RlZmluZSBMRU4ocmVnaW9uKVx0KChyZWdpb24uZW5kIC0gcmVnaW9uLnN0YXJ0KS9wYWdlX3NpemUpXG4gXG4tc3RhdGljIGxvbmcgcGFnZW1hcF9pb2N0bCh2b2lkICpzdGFydCwgaW50IGxlbiwgdm9pZCAqdmVjLCBpbnQgdmVjX2xlbiwgaW50IGZsYWcsXG4mIzQzO3N0YXRpYyBsb25nIHBhZ2VtYXBfaW9jdGwodm9pZCAqc3RhcnQsIHNpemVfdCBsZW4sIHZvaWQgKnZlYywgc2l6ZV90IHZlY19sZW4sIGludCBmbGFnLFxuIFx0XHRcdCAgaW50IG1heF9wYWdlcywgbG9uZyByZXF1aXJlZF9tYXNrLCBsb25nIGFueW9mX21hc2ssIGxvbmcgZXhjbHVkZWRfbWFzayxcbiBcdFx0XHQgIGxvbmcgcmV0dXJuX21hc2spXG4ge1xuQEAgLTY1LDcgJiM0Mzs2NSw3IEBAIHN0YXRpYyBsb25nIHBhZ2VtYXBfaW9jdGwodm9pZCAqc3RhcnQsIGludCBsZW4sIHZvaWQgKnZlYywgaW50IHZlY19sZW4sIGludCBmbGFnXG4gXHRyZXR1cm4gaW9jdGwocGFnZW1hcF9mZCwgUEFHRU1BUF9TQ0FOLCBcdTAwMjZhcmcpO1xuIH1cbiBcbi1zdGF0aWMgbG9uZyBwYWdlbWFwX2lvYyh2b2lkICpzdGFydCwgaW50IGxlbiwgdm9pZCAqdmVjLCBpbnQgdmVjX2xlbiwgaW50IGZsYWcsXG4mIzQzO3N0YXRpYyBsb25nIHBhZ2VtYXBfaW9jKHZvaWQgKnN0YXJ0LCBzaXplX3QgbGVuLCB2b2lkICp2ZWMsIHNpemVfdCB2ZWNfbGVuLCBpbnQgZmxhZyxcbiBcdFx0XHRpbnQgbWF4X3BhZ2VzLCBsb25nIHJlcXVpcmVkX21hc2ssIGxvbmcgYW55b2ZfbWFzaywgbG9uZyBleGNsdWRlZF9tYXNrLFxuIFx0XHRcdGxvbmcgcmV0dXJuX21hc2ssIGxvbmcgKndhbGtfZW5kKVxuIHtcbkBAIC05Miw4ICYjNDM7OTIsNyBAQCBzdGF0aWMgbG9uZyBwYWdlbWFwX2lvYyh2b2lkICpzdGFydCwgaW50IGxlbiwgdm9pZCAqdmVjLCBpbnQgdmVjX2xlbiwgaW50IGZsYWcsXG4gXHRyZXR1cm4gcmV0O1xuIH1cbiBcbi1cbi1pbnQgaW5pdF91ZmZkKHZvaWQpXG4mIzQzO3N0YXRpYyBpbnQgaW5pdF91ZmZkKHZvaWQpXG4ge1xuIFx0c3RydWN0IHVmZmRpb19hcGkgdWZmZGlvX2FwaTtcbiBcbkBAIC0xMTYsNyAmIzQzOzExNSw3IEBAIGludCBpbml0X3VmZmQodm9pZClcbiBcdHJldHVybiAwO1xuIH1cbiBcbi1pbnQgd3BfaW5pdCh2b2lkICphZGRyLCBsb25nIHNpemUpXG4mIzQzO3N0YXRpYyBpbnQgd3BfaW5pdCh2b2lkICphZGRyLCBzaXplX3Qgc2l6ZSlcbiB7XG4gXHRzdHJ1Y3QgdWZmZGlvX3JlZ2lzdGVyIHVmZmRpb19yZWdpc3RlcjtcbiBcdHN0cnVjdCB1ZmZkaW9fd3JpdGVwcm90ZWN0IHdwO1xuQEAgLTE0MCw3ICYjNDM7MTM5LDcgQEAgaW50IHdwX2luaXQodm9pZCAqYWRkciwgbG9uZyBzaXplKVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuLWludCB3cF9mcmVlKHZvaWQgKmFkZHIsIGxvbmcgc2l6ZSlcbiYjNDM7c3RhdGljIGludCB3cF9mcmVlKHZvaWQgKmFkZHIsIHNpemVfdCBzaXplKVxuIHtcbiBcdHN0cnVjdCB1ZmZkaW9fcmVnaXN0ZXIgdWZmZGlvX3JlZ2lzdGVyO1xuIFxuQEAgLTE1Miw3ICYjNDM7MTUxLDcgQEAgaW50IHdwX2ZyZWUodm9pZCAqYWRkciwgbG9uZyBzaXplKVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuLWludCB3cF9hZGRyX3JhbmdlKHZvaWQgKmFkZHIsIGludCBzaXplKVxuJiM0MztzdGF0aWMgaW50IHdwX2FkZHJfcmFuZ2Uodm9pZCAqYWRkciwgc2l6ZV90IHNpemUpXG4ge1xuIFx0aWYgKHBhZ2VtYXBfaW9jdGwoYWRkciwgc2l6ZSwgTlVMTCwgMCxcbiBcdFx0XHQgIFBNX1NDQU5fV1BfTUFUQ0hJTkcgfCBQTV9TQ0FOX0NIRUNLX1dQQVNZTkMsXG5AQCAtMTYyLDcgJiM0MzsxNjEsNyBAQCBpbnQgd3BfYWRkcl9yYW5nZSh2b2lkICphZGRyLCBpbnQgc2l6ZSlcbiBcdHJldHVybiAwO1xuIH1cbiBcbi12b2lkICpnZXRodWdldGxiX21lbShpbnQgc2l6ZSwgaW50ICpzaG1pZClcbiYjNDM7c3RhdGljIHZvaWQgKmdldGh1Z2V0bGJfbWVtKHNpemVfdCBzaXplLCBpbnQgKnNobWlkKVxuIHtcbiBcdGNoYXIgKm1lbTtcbiBcbkBAIC0xODYsOSAmIzQzOzE4NSwxMCBAQCB2b2lkICpnZXRodWdldGxiX21lbShpbnQgc2l6ZSwgaW50ICpzaG1pZClcbiBcdHJldHVybiBtZW07XG4gfVxuIFxuLWludCB1c2VyZmF1bHRmZF90ZXN0cyh2b2lkKVxuJiM0MztzdGF0aWMgaW50IHVzZXJmYXVsdGZkX3Rlc3RzKHZvaWQpXG4ge1xuLVx0bG9uZyBtZW1fc2l6ZSwgdmVjX3NpemUsIHdyaXR0ZW4sIG51bV9wYWdlcyA9IDE2O1xuJiM0MztcdHNpemVfdCBtZW1fc2l6ZSwgdmVjX3NpemUsIG51bV9wYWdlcyA9IDE2O1xuJiM0MztcdGxvbmcgd3JpdHRlbjtcbiBcdGNoYXIgKm1lbSwgKnZlYztcbiBcbiBcdG1lbV9zaXplID0gbnVtX3BhZ2VzICogcGFnZV9zaXplO1xuQEAgLTIyOSw5ICYjNDM7MjI5LDEwIEBAIGludCB1c2VyZmF1bHRmZF90ZXN0cyh2b2lkKVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuLWludCBnZXRfcmVhZHMoc3RydWN0IHBhZ2VfcmVnaW9uICp2ZWMsIGludCB2ZWNfc2l6ZSlcbiYjNDM7c3RhdGljIGludCBnZXRfcmVhZHMoc3RydWN0IHBhZ2VfcmVnaW9uICp2ZWMsIHNpemVfdCB2ZWNfc2l6ZSlcbiB7XG4tXHRpbnQgaSwgc3VtID0gMDtcbiYjNDM7XHRzaXplX3QgaTtcbiYjNDM7XHRpbnQgc3VtID0gMDtcbiBcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHZlY19zaXplOyBpJiM0MzsmIzQzOylcbiBcdFx0c3VtICYjNDM7PSBMRU4odmVjW2ldKTtcbkBAIC0yMzksOSAmIzQzOzI0MCw5IEBAIGludCBnZXRfcmVhZHMoc3RydWN0IHBhZ2VfcmVnaW9uICp2ZWMsIGludCB2ZWNfc2l6ZSlcbiBcdHJldHVybiBzdW07XG4gfVxuIFxuLWludCBzYW5pdHlfdGVzdHNfc2Qodm9pZClcbiYjNDM7c3RhdGljIGludCBzYW5pdHlfdGVzdHNfc2Qodm9pZClcbiB7XG4tXHR1bnNpZ25lZCBsb25nIGxvbmcgbWVtX3NpemUsIHZlY19zaXplLCBpLCB0b3RhbF9wYWdlcyA9IDA7XG4mIzQzO1x0c2l6ZV90IG1lbV9zaXplLCB2ZWNfc2l6ZSwgaSwgdG90YWxfcGFnZXMgPSAwO1xuIFx0bG9uZyByZXQsIHJldDIsIHJldDM7XG4gXHRpbnQgbnVtX3BhZ2VzID0gMTAwMDtcbiBcdGludCB0b3RhbF93cml0ZXMsIHRvdGFsX3JlYWRzLCByZWFkcywgY291bnQ7XG5AQCAtMzMxLDcgJiM0MzszMzIsNyBAQCBpbnQgc2FuaXR5X3Rlc3RzX3NkKHZvaWQpXG4gXHRpZiAocmV0IFx1MDAzYyAwKVxuIFx0XHRrc2Z0X2V4aXRfZmFpbF9tc2coXCYjMzQ7ZXJyb3IgJWxkICVkICVzXFxuXCYjMzQ7LCByZXQsIGVycm5vLCBzdHJlcnJvcihlcnJubykpO1xuIFxuLVx0a3NmdF90ZXN0X3Jlc3VsdCgodW5zaWduZWQgbG9uZyBsb25nKXJldCA9PSBtZW1fc2l6ZS8ocGFnZV9zaXplICogMiksXG4mIzQzO1x0a3NmdF90ZXN0X3Jlc3VsdCgoc2l6ZV90KXJldCA9PSBtZW1fc2l6ZS8ocGFnZV9zaXplICogMiksXG4gXHRcdFx0IFwmIzM0OyVzIFJlcGVhdGVkIHBhdHRlcm4gb2Ygd3JpdHRlbiBhbmQgbm9uLXdyaXR0ZW4gcGFnZXNcXG5cJiMzNDssIF9fZnVuY19fKTtcbiBcbiBcdC8qIDQuIFJlcGVhdGVkIHBhdHRlcm4gb2Ygd3JpdHRlbiBhbmQgbm9uLXdyaXR0ZW4gcGFnZXMgaW4gcGFydHMgKi9cbkBAIC02ODIsOSAmIzQzOzY4Myw5IEBAIGludCBzYW5pdHlfdGVzdHNfc2Qodm9pZClcbiBcdHJldHVybiAwO1xuIH1cbiBcbi1pbnQgYmFzZV90ZXN0cyhjaGFyICpwcmVmaXgsIGNoYXIgKm1lbSwgdW5zaWduZWQgbG9uZyBsb25nIG1lbV9zaXplLCBpbnQgc2tpcClcbiYjNDM7c3RhdGljIGludCBiYXNlX3Rlc3RzKGNoYXIgKnByZWZpeCwgY2hhciAqbWVtLCBzaXplX3QgbWVtX3NpemUsIGludCBza2lwKVxuIHtcbi1cdHVuc2lnbmVkIGxvbmcgbG9uZyB2ZWNfc2l6ZTtcbiYjNDM7XHRzaXplX3QgdmVjX3NpemU7XG4gXHRpbnQgd3JpdHRlbjtcbiBcdHN0cnVjdCBwYWdlX3JlZ2lvbiAqdmVjLCAqdmVjMjtcbiBcbkBAIC03ODcsNyAmIzQzOzc4OCw3IEBAIGludCBiYXNlX3Rlc3RzKGNoYXIgKnByZWZpeCwgY2hhciAqbWVtLCB1bnNpZ25lZCBsb25nIGxvbmcgbWVtX3NpemUsIGludCBza2lwKVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuLXZvaWQgKmdldGh1Z2VwYWdlKGludCBtYXBfc2l6ZSlcbiYjNDM7c3RhdGljIHZvaWQgKmdldGh1Z2VwYWdlKHNpemVfdCBtYXBfc2l6ZSlcbiB7XG4gXHRpbnQgcmV0O1xuIFx0Y2hhciAqbWFwO1xuQEAgLTgwNSwxMyAmIzQzOzgwNiwxMyBAQCB2b2lkICpnZXRodWdlcGFnZShpbnQgbWFwX3NpemUpXG4gXHRyZXR1cm4gbWFwO1xuIH1cbiBcbi1pbnQgaHBhZ2VfdW5pdF90ZXN0cyh2b2lkKVxuJiM0MztzdGF0aWMgaW50IGhwYWdlX3VuaXRfdGVzdHModm9pZClcbiB7XG4gXHRjaGFyICptYXA7XG4gXHRpbnQgcmV0LCByZXQyO1xuIFx0c2l6ZV90IG51bV9wYWdlcyA9IDEwO1xuLVx0dW5zaWduZWQgbG9uZyBsb25nIG1hcF9zaXplID0gaHBhZ2Vfc2l6ZSAqIG51bV9wYWdlcztcbi1cdHVuc2lnbmVkIGxvbmcgbG9uZyB2ZWNfc2l6ZSA9IG1hcF9zaXplL3BhZ2Vfc2l6ZTtcbiYjNDM7XHRzaXplX3QgbWFwX3NpemUgPSBocGFnZV9zaXplICogbnVtX3BhZ2VzO1xuJiM0MztcdHNpemVfdCB2ZWNfc2l6ZSA9IG1hcF9zaXplL3BhZ2Vfc2l6ZTtcbiBcdHN0cnVjdCBwYWdlX3JlZ2lvbiAqdmVjLCAqdmVjMjtcbiBcbiBcdHZlYyA9IGNhbGxvYyh2ZWNfc2l6ZSwgc2l6ZW9mKHN0cnVjdCBwYWdlX3JlZ2lvbikpO1xuQEAgLTk5OSwxMSAmIzQzOzEwMDAsMTIgQEAgaW50IGhwYWdlX3VuaXRfdGVzdHModm9pZClcbiBcdHJldHVybiAwO1xuIH1cbiBcbi1pbnQgdW5tYXBwZWRfcmVnaW9uX3Rlc3RzKHZvaWQpXG4mIzQzO3N0YXRpYyBpbnQgdW5tYXBwZWRfcmVnaW9uX3Rlc3RzKHZvaWQpXG4ge1xuIFx0dm9pZCAqc3RhcnQgPSAodm9pZCAqKTB4MTAwMDAwMDA7XG4tXHRpbnQgd3JpdHRlbiwgbGVuID0gMHgwMDA0MDAwMDtcbi1cdGxvbmcgdmVjX3NpemUgPSBsZW4gLyBwYWdlX3NpemU7XG4mIzQzO1x0aW50IHdyaXR0ZW47XG4mIzQzO1x0c2l6ZV90IGxlbiA9IDB4MDAwNDAwMDA7XG4mIzQzO1x0c2l6ZV90IHZlY19zaXplID0gbGVuIC8gcGFnZV9zaXplO1xuIFx0c3RydWN0IHBhZ2VfcmVnaW9uICp2ZWMgPSBjYWxsb2ModmVjX3NpemUsIHNpemVvZihzdHJ1Y3QgcGFnZV9yZWdpb24pKTtcbiBcdGlmICghdmVjKVxuIFx0XHRrc2Z0X2V4aXRfZmFpbF9tc2coXCYjMzQ7ZXJyb3Igbm9tZW1cXG5cJiMzNDspO1xuQEAgLTEwNzIsNyAmIzQzOzEwNzQsNyBAQCBzdGF0aWMgdm9pZCB0ZXN0X3NpbXBsZSh2b2lkKVxuICAqIHdpdGggbm8gcGFnZSB0YWJsZSwgZXhlcmNpc2luZyBwYWdlbWFwX3NjYW5fcHRlX2hvbGUoKTsgYSBiYXNlLXBhZ2UgcmFuZ2VcbiAgKiBsZWF2ZXMgcHRlX25vbmUgZW50cmllcy5cbiAgKi9cbi1zdGF0aWMgdm9pZCB1bnBvcHVsYXRlZF93cml0dGVuX3Rlc3QoY29uc3QgY2hhciAqbmFtZSwgY2hhciAqbWVtLCBsb25nIHNpemUsXG4mIzQzO3N0YXRpYyB2b2lkIHVucG9wdWxhdGVkX3dyaXR0ZW5fdGVzdChjb25zdCBjaGFyICpuYW1lLCBjaGFyICptZW0sIHNpemVfdCBzaXplLFxuIFx0XHRcdFx0ICAgICBib29sIHVzZV90aHApXG4ge1xuIFx0bG9uZyBucGFnZXMgPSBzaXplIC8gcGFnZV9zaXplLCBmYXN0ID0gMCwgc2xvdyA9IDAsIHJldDtcbkBAIC0xMTE1LDcgJiM0MzsxMTE3LDcgQEAgc3RhdGljIHZvaWQgdW5wb3B1bGF0ZWRfd3JpdHRlbl90ZXN0KGNvbnN0IGNoYXIgKm5hbWUsIGNoYXIgKm1lbSwgbG9uZyBzaXplLFxuIFxuIHN0YXRpYyB2b2lkIHVucG9wdWxhdGVkX3NjYW5fdGVzdCh2b2lkKVxuIHtcbi1cdGxvbmcgbWVtX3NpemUgPSAxNiAqIHBhZ2Vfc2l6ZTtcbiYjNDM7XHRzaXplX3QgbWVtX3NpemUgPSAxNiAqIHBhZ2Vfc2l6ZTtcbiBcdGNoYXIgKm1lbTtcbiBcbiBcdG1lbSA9IG1tYXAoTlVMTCwgbWVtX3NpemUsIFBST1RfUkVBRCB8IFBST1RfV1JJVEUsXG5AQCAtMTE1NSwxMCAmIzQzOzExNTcsMTAgQEAgc3RhdGljIHZvaWQgdW5wb3B1bGF0ZWRfdGhwX3NjYW5fdGVzdCh2b2lkKVxuIFx0bXVubWFwKGFyZWEsIDIgKiBocGFnZV9zaXplKTtcbiB9XG4gXG4taW50IHNhbml0eV90ZXN0cyh2b2lkKVxuJiM0MztzdGF0aWMgaW50IHNhbml0eV90ZXN0cyh2b2lkKVxuIHtcbi1cdHVuc2lnbmVkIGxvbmcgbG9uZyBtZW1fc2l6ZSwgdmVjX3NpemU7XG4tXHRsb25nIHJldCwgZmQsIGksIGJ1Zl9zaXplLCBucl9wYWdlcztcbiYjNDM7XHRzaXplX3QgbWVtX3NpemUsIHZlY19zaXplLCBpLCBidWZfc2l6ZTtcbiYjNDM7XHRsb25nIHJldCwgZmQsIG5yX3BhZ2VzO1xuIFx0c3RydWN0IHBhZ2VfcmVnaW9uICp2ZWM7XG4gXHRjaGFyICptZW0sICpmbWVtO1xuIFx0c3RydWN0IHN0YXQgc2J1ZjtcbkBAIC0xMzI3LDcgJiM0MzsxMzI5LDcgQEAgaW50IHNhbml0eV90ZXN0cyh2b2lkKVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuLWludCBtcHJvdGVjdF90ZXN0cyh2b2lkKVxuJiM0MztzdGF0aWMgaW50IG1wcm90ZWN0X3Rlc3RzKHZvaWQpXG4ge1xuIFx0aW50IHJldDtcbiBcdGNoYXIgKm1lbSwgKm1lbTI7XG5AQCAtMTQ0Nyw3ICYjNDM7MTQ0OSw3IEBAIHN0YXRpYyBzc2l6ZV90IGdldF9kaXJ0eV9wYWdlc19yZXNldChjaGFyICptZW0sIHVuc2lnbmVkIGludCBjb3VudCxcbiBcdHJldHVybiBjbnQ7XG4gfVxuIFxuLXZvaWQgKnRocmVhZF9wcm9jKHZvaWQgKm1lbSlcbiYjNDM7c3RhdGljIHZvaWQgKnRocmVhZF9wcm9jKHZvaWQgKm1lbSlcbiB7XG4gXHRpbnQgKm0gPSBtZW07XG4gXHRsb25nIGN1cnJfZmF1bHRzLCBmYXVsdHM7XG5AQCAtMTQ4Nyw3ICYjNDM7MTQ4OSw3IEBAIHZvaWQgKnRocmVhZF9wcm9jKHZvaWQgKm1lbSlcbiBcdHJldHVybiBOVUxMO1xuIH1cbiBcbi1zdGF0aWMgdm9pZCB0cmFuc2FjdF90ZXN0KGludCBwYWdlX3NpemUpXG4mIzQzO3N0YXRpYyB2b2lkIHRyYW5zYWN0X3Rlc3Qodm9pZClcbiB7XG4gXHR1bnNpZ25lZCBpbnQgaSwgY291bnQsIGV4dHJhX3BhZ2VzO1xuIFx0dW5zaWduZWQgaW50IGM7XG5AQCAtMTU4MCwxMSAmIzQzOzE1ODIsMTEgQEAgc3RhdGljIHZvaWQgdHJhbnNhY3RfdGVzdChpbnQgcGFnZV9zaXplKVxuIFx0XHRcdCAgICAgIGV4dHJhX3RocmVhZF9mYXVsdHMpO1xuIH1cbiBcbi12b2lkIHplcm9wZm5fdGVzdHModm9pZClcbiYjNDM7c3RhdGljIHZvaWQgemVyb3Bmbl90ZXN0cyh2b2lkKVxuIHtcbi1cdHVuc2lnbmVkIGxvbmcgbG9uZyBtZW1fc2l6ZTtcbiYjNDM7XHRzaXplX3QgbWVtX3NpemUsIGk7XG4gXHRzdHJ1Y3QgcGFnZV9yZWdpb24gdmVjO1xuLVx0aW50IGksIHJldDtcbiYjNDM7XHRpbnQgcmV0O1xuIFx0Y2hhciAqbW1hcF9tZW0sICptZW07XG4gXG4gXHQvKiBUZXN0IHdpdGggbm9ybWFsIG1lbW9yeSAqL1xuQEAgLTE2NDIsOCAmIzQzOzE2NDQsOCBAQCB2b2lkIHplcm9wZm5fdGVzdHModm9pZClcbiBcbiBpbnQgbWFpbihpbnQgX19hdHRyaWJ1dGVfXygodW51c2VkKSkgYXJnYywgY2hhciAqYXJndltdKVxuIHtcbi1cdGludCBzaG1pZCwgYnVmX3NpemUsIGZkLCBpLCByZXQ7XG4tXHR1bnNpZ25lZCBsb25nIGxvbmcgbWVtX3NpemU7XG4mIzQzO1x0aW50IHNobWlkLCBmZCwgcmV0O1xuJiM0MztcdHNpemVfdCBtZW1fc2l6ZSwgYnVmX3NpemUsIGk7XG4gXHRjaGFyICptZW0sICptYXAsICpmbWVtO1xuIFx0c3RydWN0IHN0YXQgc2J1ZjtcbiBcbkBAIC0xNjUxLDYgJiM0MzsxNjUzLDkgQEAgaW50IG1haW4oaW50IF9fYXR0cmlidXRlX18oKHVudXNlZCkpIGFyZ2MsIGNoYXIgKmFyZ3ZbXSlcbiBcbiBcdGtzZnRfcHJpbnRfaGVhZGVyKCk7XG4gXG4mIzQzO1x0cGFnZV9zaXplID0gZ2V0cGFnZXNpemUoKTtcbiYjNDM7XHRocGFnZV9zaXplID0gcmVhZF9wbWRfcGFnZXNpemUoKTtcbiYjNDM7XG4gXHRpZiAoaW5pdF91ZmZkKCkpXG4gXHRcdGtzZnRfZXhpdF9za2lwKFwmIzM0O0ZhaWxlZCB0byBpbml0aWFsaXplIHVzZXJmYXVsdGZkXFxuXCYjMzQ7KTtcbiBcbkBAIC0xNjU5LDkgJiM0MzsxNjY0LDYgQEAgaW50IG1haW4oaW50IF9fYXR0cmlidXRlX18oKHVudXNlZCkpIGFyZ2MsIGNoYXIgKmFyZ3ZbXSlcbiBcbiBcdGtzZnRfc2V0X3BsYW4oMTE5KTtcbiBcbi1cdHBhZ2Vfc2l6ZSA9IGdldHBhZ2VzaXplKCk7XG4tXHRocGFnZV9zaXplID0gcmVhZF9wbWRfcGFnZXNpemUoKTtcbi1cbiBcdHBhZ2VtYXBfZmQgPSBvcGVuKFBBR0VNQVAsIE9fUkRPTkxZKTtcbiBcdGlmIChwYWdlbWFwX2ZkIFx1MDAzYyAwKVxuIFx0XHRrc2Z0X2V4aXRfZmFpbF9tc2coXCYjMzQ7RmFpbGVkIHRvIG9wZW4gXCYjMzQ7IFBBR0VNQVAgXCYjMzQ7XFxuXCYjMzQ7KTtcbkBAIC0xODIxLDcgJiM0MzsxODIzLDcgQEAgaW50IG1haW4oaW50IF9fYXR0cmlidXRlX18oKHVudXNlZCkpIGFyZ2MsIGNoYXIgKmFyZ3ZbXSlcbiBcdG1wcm90ZWN0X3Rlc3RzKCk7XG4gXG4gXHQvKiAxMy4gVHJhbnNhY3QgdGVzdCAqL1xuLVx0dHJhbnNhY3RfdGVzdChwYWdlX3NpemUpO1xuJiM0MztcdHRyYW5zYWN0X3Rlc3QoKTtcbiBcbiBcdC8qIDE0LiBTYW5pdHkgdGVzdGluZyAqL1xuIFx0c2FuaXR5X3Rlc3RzKCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTY6NTM8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb25seSBtb2RpZmllcyB1c2VyLXNwYWNlIHNlbGZ0ZXN0IGNvZGUgaW4gdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGFnZW1hcF9pb2N0bC5jLCB3aGljaCBkb2VzIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSBvciBrZXJuZWwtc3BhY2UgbG9naWMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3MKdG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncywKYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy4KCi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6CiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZAogIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuCiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLAogIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy4KCi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgJiMzNDtOTyBGVU5DVElPTkFMIENIQU5HRSYjMzQ7IChORkNJKSBPUiAmIzM0O1JFRkFDVE9SSU5HJiMzNDsgQ0xBSU1TOgogIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgJiMzNDtjbGVhbnVwcyYjMzQ7LCAmIzM0O3JlZmFjdG9yaW5ncyYjMzQ7LCBvciBzdGF0ZQogICYjMzQ7Tm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWQmIzM0Oy4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuCiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50CiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuCiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC4KCi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6CiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLAogIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLgogIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXIKICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoyLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOgoKLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOgogICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLgogICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pCiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuCiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50cwogICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy4KICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy4KLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6CiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczoKICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZwogICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuCiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQozLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6Ci0gQ29yZSBTdWJzeXN0ZW1zOgogICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLAogICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLgotIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczoKICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy4KLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6CiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuCi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczoKICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpXaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjoKCi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOgogIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzCiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHQKICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS4KICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgJiMzNDtmb2N1c2VkJiMzNDssCiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLgoKLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6CiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzCiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuCgotIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKToKICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrCiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuCiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyCiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlncwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOgotIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCi0gQ2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC4KLSBTdHJpcCBhbnkgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgZjg4NmJiMDg3Y2QyOWIwNDZiNjVkNGU4OGM0ZTQ3ZjRhYzM5NTAzZApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUdWUgU2VwIDggMTY6NTM6MzQgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wYWdlbWFwX2lvY3RsLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wYWdlbWFwX2lvY3RsLmMKaW5kZXggZWFkYzcxNTljYTViOS4uZDlhNGZiNzgyZWNmZSAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGFnZW1hcF9pb2N0bC5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3BhZ2VtYXBfaW9jdGwuYwpAQCAtMzYsMTUgJiM0MzszNiwxNSBAQAogCiAjZGVmaW5lIFRFU1RfSVRFUkFUSU9OUyAxMDAKICNkZWZpbmUgUEFHRU1BUCAmIzM0Oy9wcm9jL3NlbGYvcGFnZW1hcCYjMzQ7Ci1pbnQgcGFnZW1hcF9mZDsKLWludCB1ZmZkOwotc2l6ZV90IHBhZ2Vfc2l6ZTsKLXNpemVfdCBocGFnZV9zaXplOwotY29uc3QgY2hhciAqcHJvZ25hbWU7CiYjNDM7c3RhdGljIGludCBwYWdlbWFwX2ZkOwomIzQzO3N0YXRpYyBpbnQgdWZmZDsKJiM0MztzdGF0aWMgc2l6ZV90IHBhZ2Vfc2l6ZTsKJiM0MztzdGF0aWMgc2l6ZV90IGhwYWdlX3NpemU7CiYjNDM7c3RhdGljIGNvbnN0IGNoYXIgKnByb2duYW1lOwogCiAjZGVmaW5lIExFTihyZWdpb24pCSgocmVnaW9uLmVuZCAtIHJlZ2lvbi5zdGFydCkvcGFnZV9zaXplKQogCi1zdGF0aWMgbG9uZyBwYWdlbWFwX2lvY3RsKHZvaWQgKnN0YXJ0LCBpbnQgbGVuLCB2b2lkICp2ZWMsIGludCB2ZWNfbGVuLCBpbnQgZmxhZywKJiM0MztzdGF0aWMgbG9uZyBwYWdlbWFwX2lvY3RsKHZvaWQgKnN0YXJ0LCBzaXplX3QgbGVuLCB2b2lkICp2ZWMsIHNpemVfdCB2ZWNfbGVuLCBpbnQgZmxhZywKIAkJCSAgaW50IG1heF9wYWdlcywgbG9uZyByZXF1aXJlZF9tYXNrLCBsb25nIGFueW9mX21hc2ssIGxvbmcgZXhjbHVkZWRfbWFzaywKIAkJCSAgbG9uZyByZXR1cm5fbWFzaykKIHsKQEAgLTY1LDcgJiM0Mzs2NSw3IEBAIHN0YXRpYyBsb25nIHBhZ2VtYXBfaW9jdGwodm9pZCAqc3RhcnQsIGludCBsZW4sIHZvaWQgKnZlYywgaW50IHZlY19sZW4sIGludCBmbGFnCiAJcmV0dXJuIGlvY3RsKHBhZ2VtYXBfZmQsIFBBR0VNQVBfU0NBTiwgJmFtcDthcmcpOwogfQogCi1zdGF0aWMgbG9uZyBwYWdlbWFwX2lvYyh2b2lkICpzdGFydCwgaW50IGxlbiwgdm9pZCAqdmVjLCBpbnQgdmVjX2xlbiwgaW50IGZsYWcsCiYjNDM7c3RhdGljIGxvbmcgcGFnZW1hcF9pb2Modm9pZCAqc3RhcnQsIHNpemVfdCBsZW4sIHZvaWQgKnZlYywgc2l6ZV90IHZlY19sZW4sIGludCBmbGFnLAogCQkJaW50IG1heF9wYWdlcywgbG9uZyByZXF1aXJlZF9tYXNrLCBsb25nIGFueW9mX21hc2ssIGxvbmcgZXhjbHVkZWRfbWFzaywKIAkJCWxvbmcgcmV0dXJuX21hc2ssIGxvbmcgKndhbGtfZW5kKQogewpAQCAtOTIsOCAmIzQzOzkyLDcgQEAgc3RhdGljIGxvbmcgcGFnZW1hcF9pb2Modm9pZCAqc3RhcnQsIGludCBsZW4sIHZvaWQgKnZlYywgaW50IHZlY19sZW4sIGludCBmbGFnLAogCXJldHVybiByZXQ7CiB9CiAKLQotaW50IGluaXRfdWZmZCh2b2lkKQomIzQzO3N0YXRpYyBpbnQgaW5pdF91ZmZkKHZvaWQpCiB7CiAJc3RydWN0IHVmZmRpb19hcGkgdWZmZGlvX2FwaTsKIApAQCAtMTE2LDcgJiM0MzsxMTUsNyBAQCBpbnQgaW5pdF91ZmZkKHZvaWQpCiAJcmV0dXJuIDA7CiB9CiAKLWludCB3cF9pbml0KHZvaWQgKmFkZHIsIGxvbmcgc2l6ZSkKJiM0MztzdGF0aWMgaW50IHdwX2luaXQodm9pZCAqYWRkciwgc2l6ZV90IHNpemUpCiB7CiAJc3RydWN0IHVmZmRpb19yZWdpc3RlciB1ZmZkaW9fcmVnaXN0ZXI7CiAJc3RydWN0IHVmZmRpb193cml0ZXByb3RlY3Qgd3A7CkBAIC0xNDAsNyAmIzQzOzEzOSw3IEBAIGludCB3cF9pbml0KHZvaWQgKmFkZHIsIGxvbmcgc2l6ZSkKIAlyZXR1cm4gMDsKIH0KIAotaW50IHdwX2ZyZWUodm9pZCAqYWRkciwgbG9uZyBzaXplKQomIzQzO3N0YXRpYyBpbnQgd3BfZnJlZSh2b2lkICphZGRyLCBzaXplX3Qgc2l6ZSkKIHsKIAlzdHJ1Y3QgdWZmZGlvX3JlZ2lzdGVyIHVmZmRpb19yZWdpc3RlcjsKIApAQCAtMTUyLDcgJiM0MzsxNTEsNyBAQCBpbnQgd3BfZnJlZSh2b2lkICphZGRyLCBsb25nIHNpemUpCiAJcmV0dXJuIDA7CiB9CiAKLWludCB3cF9hZGRyX3JhbmdlKHZvaWQgKmFkZHIsIGludCBzaXplKQomIzQzO3N0YXRpYyBpbnQgd3BfYWRkcl9yYW5nZSh2b2lkICphZGRyLCBzaXplX3Qgc2l6ZSkKIHsKIAlpZiAocGFnZW1hcF9pb2N0bChhZGRyLCBzaXplLCBOVUxMLCAwLAogCQkJICBQTV9TQ0FOX1dQX01BVENISU5HIHwgUE1fU0NBTl9DSEVDS19XUEFTWU5DLApAQCAtMTYyLDcgJiM0MzsxNjEsNyBAQCBpbnQgd3BfYWRkcl9yYW5nZSh2b2lkICphZGRyLCBpbnQgc2l6ZSkKIAlyZXR1cm4gMDsKIH0KIAotdm9pZCAqZ2V0aHVnZXRsYl9tZW0oaW50IHNpemUsIGludCAqc2htaWQpCiYjNDM7c3RhdGljIHZvaWQgKmdldGh1Z2V0bGJfbWVtKHNpemVfdCBzaXplLCBpbnQgKnNobWlkKQogewogCWNoYXIgKm1lbTsKIApAQCAtMTg2LDkgJiM0MzsxODUsMTAgQEAgdm9pZCAqZ2V0aHVnZXRsYl9tZW0oaW50IHNpemUsIGludCAqc2htaWQpCiAJcmV0dXJuIG1lbTsKIH0KIAotaW50IHVzZXJmYXVsdGZkX3Rlc3RzKHZvaWQpCiYjNDM7c3RhdGljIGludCB1c2VyZmF1bHRmZF90ZXN0cyh2b2lkKQogewotCWxvbmcgbWVtX3NpemUsIHZlY19zaXplLCB3cml0dGVuLCBudW1fcGFnZXMgPSAxNjsKJiM0MzsJc2l6ZV90IG1lbV9zaXplLCB2ZWNfc2l6ZSwgbnVtX3BhZ2VzID0gMTY7CiYjNDM7CWxvbmcgd3JpdHRlbjsKIAljaGFyICptZW0sICp2ZWM7CiAKIAltZW1fc2l6ZSA9IG51bV9wYWdlcyAqIHBhZ2Vfc2l6ZTsKQEAgLTIyOSw5ICYjNDM7MjI5LDEwIEBAIGludCB1c2VyZmF1bHRmZF90ZXN0cyh2b2lkKQogCXJldHVybiAwOwogfQogCi1pbnQgZ2V0X3JlYWRzKHN0cnVjdCBwYWdlX3JlZ2lvbiAqdmVjLCBpbnQgdmVjX3NpemUpCiYjNDM7c3RhdGljIGludCBnZXRfcmVhZHMoc3RydWN0IHBhZ2VfcmVnaW9uICp2ZWMsIHNpemVfdCB2ZWNfc2l6ZSkKIHsKLQlpbnQgaSwgc3VtID0gMDsKJiM0MzsJc2l6ZV90IGk7CiYjNDM7CWludCBzdW0gPSAwOwogCiAJZm9yIChpID0gMDsgaSAmbHQ7IHZlY19zaXplOyBpJiM0MzsmIzQzOykKIAkJc3VtICYjNDM7PSBMRU4odmVjW2ldKTsKQEAgLTIzOSw5ICYjNDM7MjQwLDkgQEAgaW50IGdldF9yZWFkcyhzdHJ1Y3QgcGFnZV9yZWdpb24gKnZlYywgaW50IHZlY19zaXplKQogCXJldHVybiBzdW07CiB9CiAKLWludCBzYW5pdHlfdGVzdHNfc2Qodm9pZCkKJiM0MztzdGF0aWMgaW50IHNhbml0eV90ZXN0c19zZCh2b2lkKQogewotCXVuc2lnbmVkIGxvbmcgbG9uZyBtZW1fc2l6ZSwgdmVjX3NpemUsIGksIHRvdGFsX3BhZ2VzID0gMDsKJiM0MzsJc2l6ZV90IG1lbV9zaXplLCB2ZWNfc2l6ZSwgaSwgdG90YWxfcGFnZXMgPSAwOwogCWxvbmcgcmV0LCByZXQyLCByZXQzOwogCWludCBudW1fcGFnZXMgPSAxMDAwOwogCWludCB0b3RhbF93cml0ZXMsIHRvdGFsX3JlYWRzLCByZWFkcywgY291bnQ7CkBAIC0zMzEsNyAmIzQzOzMzMiw3IEBAIGludCBzYW5pdHlfdGVzdHNfc2Qodm9pZCkKIAlpZiAocmV0ICZsdDsgMCkKIAkJa3NmdF9leGl0X2ZhaWxfbXNnKCYjMzQ7ZXJyb3IgJWxkICVkICVzXG4mIzM0OywgcmV0LCBlcnJubywgc3RyZXJyb3IoZXJybm8pKTsKIAotCWtzZnRfdGVzdF9yZXN1bHQoKHVuc2lnbmVkIGxvbmcgbG9uZylyZXQgPT0gbWVtX3NpemUvKHBhZ2Vfc2l6ZSAqIDIpLAomIzQzOwlrc2Z0X3Rlc3RfcmVzdWx0KChzaXplX3QpcmV0ID09IG1lbV9zaXplLyhwYWdlX3NpemUgKiAyKSwKIAkJCSAmIzM0OyVzIFJlcGVhdGVkIHBhdHRlcm4gb2Ygd3JpdHRlbiBhbmQgbm9uLXdyaXR0ZW4gcGFnZXNcbiYjMzQ7LCBfX2Z1bmNfXyk7CiAKIAkvKiA0LiBSZXBlYXRlZCBwYXR0ZXJuIG9mIHdyaXR0ZW4gYW5kIG5vbi13cml0dGVuIHBhZ2VzIGluIHBhcnRzICovCkBAIC02ODIsOSAmIzQzOzY4Myw5IEBAIGludCBzYW5pdHlfdGVzdHNfc2Qodm9pZCkKIAlyZXR1cm4gMDsKIH0KIAotaW50IGJhc2VfdGVzdHMoY2hhciAqcHJlZml4LCBjaGFyICptZW0sIHVuc2lnbmVkIGxvbmcgbG9uZyBtZW1fc2l6ZSwgaW50IHNraXApCiYjNDM7c3RhdGljIGludCBiYXNlX3Rlc3RzKGNoYXIgKnByZWZpeCwgY2hhciAqbWVtLCBzaXplX3QgbWVtX3NpemUsIGludCBza2lwKQogewotCXVuc2lnbmVkIGxvbmcgbG9uZyB2ZWNfc2l6ZTsKJiM0MzsJc2l6ZV90IHZlY19zaXplOwogCWludCB3cml0dGVuOwogCXN0cnVjdCBwYWdlX3JlZ2lvbiAqdmVjLCAqdmVjMjsKIApAQCAtNzg3LDcgJiM0Mzs3ODgsNyBAQCBpbnQgYmFzZV90ZXN0cyhjaGFyICpwcmVmaXgsIGNoYXIgKm1lbSwgdW5zaWduZWQgbG9uZyBsb25nIG1lbV9zaXplLCBpbnQgc2tpcCkKIAlyZXR1cm4gMDsKIH0KIAotdm9pZCAqZ2V0aHVnZXBhZ2UoaW50IG1hcF9zaXplKQomIzQzO3N0YXRpYyB2b2lkICpnZXRodWdlcGFnZShzaXplX3QgbWFwX3NpemUpCiB7CiAJaW50IHJldDsKIAljaGFyICptYXA7CkBAIC04MDUsMTMgJiM0Mzs4MDYsMTMgQEAgdm9pZCAqZ2V0aHVnZXBhZ2UoaW50IG1hcF9zaXplKQogCXJldHVybiBtYXA7CiB9CiAKLWludCBocGFnZV91bml0X3Rlc3RzKHZvaWQpCiYjNDM7c3RhdGljIGludCBocGFnZV91bml0X3Rlc3RzKHZvaWQpCiB7CiAJY2hhciAqbWFwOwogCWludCByZXQsIHJldDI7CiAJc2l6ZV90IG51bV9wYWdlcyA9IDEwOwotCXVuc2lnbmVkIGxvbmcgbG9uZyBtYXBfc2l6ZSA9IGhwYWdlX3NpemUgKiBudW1fcGFnZXM7Ci0JdW5zaWduZWQgbG9uZyBsb25nIHZlY19zaXplID0gbWFwX3NpemUvcGFnZV9zaXplOwomIzQzOwlzaXplX3QgbWFwX3NpemUgPSBocGFnZV9zaXplICogbnVtX3BhZ2VzOwomIzQzOwlzaXplX3QgdmVjX3NpemUgPSBtYXBfc2l6ZS9wYWdlX3NpemU7CiAJc3RydWN0IHBhZ2VfcmVnaW9uICp2ZWMsICp2ZWMyOwogCiAJdmVjID0gY2FsbG9jKHZlY19zaXplLCBzaXplb2Yoc3RydWN0IHBhZ2VfcmVnaW9uKSk7CkBAIC05OTksMTEgJiM0MzsxMDAwLDEyIEBAIGludCBocGFnZV91bml0X3Rlc3RzKHZvaWQpCiAJcmV0dXJuIDA7CiB9CiAKLWludCB1bm1hcHBlZF9yZWdpb25fdGVzdHModm9pZCkKJiM0MztzdGF0aWMgaW50IHVubWFwcGVkX3JlZ2lvbl90ZXN0cyh2b2lkKQogewogCXZvaWQgKnN0YXJ0ID0gKHZvaWQgKikweDEwMDAwMDAwOwotCWludCB3cml0dGVuLCBsZW4gPSAweDAwMDQwMDAwOwotCWxvbmcgdmVjX3NpemUgPSBsZW4gLyBwYWdlX3NpemU7CiYjNDM7CWludCB3cml0dGVuOwomIzQzOwlzaXplX3QgbGVuID0gMHgwMDA0MDAwMDsKJiM0MzsJc2l6ZV90IHZlY19zaXplID0gbGVuIC8gcGFnZV9zaXplOwogCXN0cnVjdCBwYWdlX3JlZ2lvbiAqdmVjID0gY2FsbG9jKHZlY19zaXplLCBzaXplb2Yoc3RydWN0IHBhZ2VfcmVnaW9uKSk7CiAJaWYgKCF2ZWMpCiAJCWtzZnRfZXhpdF9mYWlsX21zZygmIzM0O2Vycm9yIG5vbWVtXG4mIzM0Oyk7CkBAIC0xMDcyLDcgJiM0MzsxMDc0LDcgQEAgc3RhdGljIHZvaWQgdGVzdF9zaW1wbGUodm9pZCkKICAqIHdpdGggbm8gcGFnZSB0YWJsZSwgZXhlcmNpc2luZyBwYWdlbWFwX3NjYW5fcHRlX2hvbGUoKTsgYSBiYXNlLXBhZ2UgcmFuZ2UKICAqIGxlYXZlcyBwdGVfbm9uZSBlbnRyaWVzLgogICovCi1zdGF0aWMgdm9pZCB1bnBvcHVsYXRlZF93cml0dGVuX3Rlc3QoY29uc3QgY2hhciAqbmFtZSwgY2hhciAqbWVtLCBsb25nIHNpemUsCiYjNDM7c3RhdGljIHZvaWQgdW5wb3B1bGF0ZWRfd3JpdHRlbl90ZXN0KGNvbnN0IGNoYXIgKm5hbWUsIGNoYXIgKm1lbSwgc2l6ZV90IHNpemUsCiAJCQkJICAgICBib29sIHVzZV90aHApCiB7CiAJbG9uZyBucGFnZXMgPSBzaXplIC8gcGFnZV9zaXplLCBmYXN0ID0gMCwgc2xvdyA9IDAsIHJldDsKQEAgLTExMTUsNyAmIzQzOzExMTcsNyBAQCBzdGF0aWMgdm9pZCB1bnBvcHVsYXRlZF93cml0dGVuX3Rlc3QoY29uc3QgY2hhciAqbmFtZSwgY2hhciAqbWVtLCBsb25nIHNpemUsCiAKIHN0YXRpYyB2b2lkIHVucG9wdWxhdGVkX3NjYW5fdGVzdCh2b2lkKQogewotCWxvbmcgbWVtX3NpemUgPSAxNiAqIHBhZ2Vfc2l6ZTsKJiM0MzsJc2l6ZV90IG1lbV9zaXplID0gMTYgKiBwYWdlX3NpemU7CiAJY2hhciAqbWVtOwogCiAJbWVtID0gbW1hcChOVUxMLCBtZW1fc2l6ZSwgUFJPVF9SRUFEIHwgUFJPVF9XUklURSwKQEAgLTExNTUsMTAgJiM0MzsxMTU3LDEwIEBAIHN0YXRpYyB2b2lkIHVucG9wdWxhdGVkX3RocF9zY2FuX3Rlc3Qodm9pZCkKIAltdW5tYXAoYXJlYSwgMiAqIGhwYWdlX3NpemUpOwogfQogCi1pbnQgc2FuaXR5X3Rlc3RzKHZvaWQpCiYjNDM7c3RhdGljIGludCBzYW5pdHlfdGVzdHModm9pZCkKIHsKLQl1bnNpZ25lZCBsb25nIGxvbmcgbWVtX3NpemUsIHZlY19zaXplOwotCWxvbmcgcmV0LCBmZCwgaSwgYnVmX3NpemUsIG5yX3BhZ2VzOwomIzQzOwlzaXplX3QgbWVtX3NpemUsIHZlY19zaXplLCBpLCBidWZfc2l6ZTsKJiM0MzsJbG9uZyByZXQsIGZkLCBucl9wYWdlczsKIAlzdHJ1Y3QgcGFnZV9yZWdpb24gKnZlYzsKIAljaGFyICptZW0sICpmbWVtOwogCXN0cnVjdCBzdGF0IHNidWY7CkBAIC0xMzI3LDcgJiM0MzsxMzI5LDcgQEAgaW50IHNhbml0eV90ZXN0cyh2b2lkKQogCXJldHVybiAwOwogfQogCi1pbnQgbXByb3RlY3RfdGVzdHModm9pZCkKJiM0MztzdGF0aWMgaW50IG1wcm90ZWN0X3Rlc3RzKHZvaWQpCiB7CiAJaW50IHJldDsKIAljaGFyICptZW0sICptZW0yOwpAQCAtMTQ0Nyw3ICYjNDM7MTQ0OSw3IEBAIHN0YXRpYyBzc2l6ZV90IGdldF9kaXJ0eV9wYWdlc19yZXNldChjaGFyICptZW0sIHVuc2lnbmVkIGludCBjb3VudCwKIAlyZXR1cm4gY250OwogfQogCi12b2lkICp0aHJlYWRfcHJvYyh2b2lkICptZW0pCiYjNDM7c3RhdGljIHZvaWQgKnRocmVhZF9wcm9jKHZvaWQgKm1lbSkKIHsKIAlpbnQgKm0gPSBtZW07CiAJbG9uZyBjdXJyX2ZhdWx0cywgZmF1bHRzOwpAQCAtMTQ4Nyw3ICYjNDM7MTQ4OSw3IEBAIHZvaWQgKnRocmVhZF9wcm9jKHZvaWQgKm1lbSkKIAlyZXR1cm4gTlVMTDsKIH0KIAotc3RhdGljIHZvaWQgdHJhbnNhY3RfdGVzdChpbnQgcGFnZV9zaXplKQomIzQzO3N0YXRpYyB2b2lkIHRyYW5zYWN0X3Rlc3Qodm9pZCkKIHsKIAl1bnNpZ25lZCBpbnQgaSwgY291bnQsIGV4dHJhX3BhZ2VzOwogCXVuc2lnbmVkIGludCBjOwpAQCAtMTU4MCwxMSAmIzQzOzE1ODIsMTEgQEAgc3RhdGljIHZvaWQgdHJhbnNhY3RfdGVzdChpbnQgcGFnZV9zaXplKQogCQkJICAgICAgZXh0cmFfdGhyZWFkX2ZhdWx0cyk7CiB9CiAKLXZvaWQgemVyb3Bmbl90ZXN0cyh2b2lkKQomIzQzO3N0YXRpYyB2b2lkIHplcm9wZm5fdGVzdHModm9pZCkKIHsKLQl1bnNpZ25lZCBsb25nIGxvbmcgbWVtX3NpemU7CiYjNDM7CXNpemVfdCBtZW1fc2l6ZSwgaTsKIAlzdHJ1Y3QgcGFnZV9yZWdpb24gdmVjOwotCWludCBpLCByZXQ7CiYjNDM7CWludCByZXQ7CiAJY2hhciAqbW1hcF9tZW0sICptZW07CiAKIAkvKiBUZXN0IHdpdGggbm9ybWFsIG1lbW9yeSAqLwpAQCAtMTY0Miw4ICYjNDM7MTY0NCw4IEBAIHZvaWQgemVyb3Bmbl90ZXN0cyh2b2lkKQogCiBpbnQgbWFpbihpbnQgX19hdHRyaWJ1dGVfXygodW51c2VkKSkgYXJnYywgY2hhciAqYXJndltdKQogewotCWludCBzaG1pZCwgYnVmX3NpemUsIGZkLCBpLCByZXQ7Ci0JdW5zaWduZWQgbG9uZyBsb25nIG1lbV9zaXplOwomIzQzOwlpbnQgc2htaWQsIGZkLCByZXQ7CiYjNDM7CXNpemVfdCBtZW1fc2l6ZSwgYnVmX3NpemUsIGk7CiAJY2hhciAqbWVtLCAqbWFwLCAqZm1lbTsKIAlzdHJ1Y3Qgc3RhdCBzYnVmOwogCkBAIC0xNjUxLDYgJiM0MzsxNjUzLDkgQEAgaW50IG1haW4oaW50IF9fYXR0cmlidXRlX18oKHVudXNlZCkpIGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKIAogCWtzZnRfcHJpbnRfaGVhZGVyKCk7CiAKJiM0MzsJcGFnZV9zaXplID0gZ2V0cGFnZXNpemUoKTsKJiM0MzsJaHBhZ2Vfc2l6ZSA9IHJlYWRfcG1kX3BhZ2VzaXplKCk7CiYjNDM7CiAJaWYgKGluaXRfdWZmZCgpKQogCQlrc2Z0X2V4aXRfc2tpcCgmIzM0O0ZhaWxlZCB0byBpbml0aWFsaXplIHVzZXJmYXVsdGZkXG4mIzM0Oyk7CiAKQEAgLTE2NTksOSAmIzQzOzE2NjQsNiBAQCBpbnQgbWFpbihpbnQgX19hdHRyaWJ1dGVfXygodW51c2VkKSkgYXJnYywgY2hhciAqYXJndltdKQogCiAJa3NmdF9zZXRfcGxhbigxMTkpOwogCi0JcGFnZV9zaXplID0gZ2V0cGFnZXNpemUoKTsKLQlocGFnZV9zaXplID0gcmVhZF9wbWRfcGFnZXNpemUoKTsKLQogCXBhZ2VtYXBfZmQgPSBvcGVuKFBBR0VNQVAsIE9fUkRPTkxZKTsKIAlpZiAocGFnZW1hcF9mZCAmbHQ7IDApCiAJCWtzZnRfZXhpdF9mYWlsX21zZygmIzM0O0ZhaWxlZCB0byBvcGVuICYjMzQ7IFBBR0VNQVAgJiMzNDtcbiYjMzQ7KTsKQEAgLTE4MjEsNyAmIzQzOzE4MjMsNyBAQCBpbnQgbWFpbihpbnQgX19hdHRyaWJ1dGVfXygodW51c2VkKSkgYXJnYywgY2hhciAqYXJndltdKQogCW1wcm90ZWN0X3Rlc3RzKCk7CiAKIAkvKiAxMy4gVHJhbnNhY3QgdGVzdCAqLwotCXRyYW5zYWN0X3Rlc3QocGFnZV9zaXplKTsKJiM0MzsJdHJhbnNhY3RfdGVzdCgpOwogCiAJLyogMTQuIFNhbml0eSB0ZXN0aW5nICovCiAJc2FuaXR5X3Rlc3RzKCk7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDE2OjUzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYyMDAKCQkJCQkJCW91dHB1dDogNzQKCQkJCQkJCXRob3VnaHRzOiAzMTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gVGhlIHBhdGNoIGlzIHRvdWNoaW5nIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wYWdlbWFwX2lvY3RsLmNgLiBNeSBtaW5kIGltbWVkaWF0ZWx5IGdvZXMgdG8gdGhlIHJ1bGVzIOKAkyBzcGVjaWZpY2FsbHksIHdoZW4gd2UgY2FuIGNvbmZpZGVudGx5IHNheSBhIGNoYW5nZSAqaXNuJiMzOTt0KiB3b3J0aCBmdXp6aW5nLiBJIG5lZWQgdG8gbWFrZSB0aGUgY29ycmVjdCBhc3Nlc3NtZW50IG9mIFdvcnRoRnV6emluZy4KCk15IHByaW1hcnkgZm9jdXMgaXMgb24gc2VjdGlvbiAyIG9mIHRoZSBjcml0ZXJpYSDigJMgdGhlICpuZWdhdGl2ZSogY3JpdGVyaWEuIFdlJiMzOTtyZSBsb29raW5nIGZvciByZWFzb25zIHRvIHJ1bGUgdGhpcyBwYXRjaCAqb3V0KiBvZiBmdXp6aW5nIHNjb3BlLiBUaGUgcnVsZSBpcyBwcmV0dHkgY2xlYXI6IGlmIGFsbCB0aGUgbW9kaWZpZWQgY29kZSBzdHJpY3RseSBmYWxscyBpbnRvIHRoZSBjYXRlZ29yeSBvZiAmIzM0O05vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXMsIGxpa2UgdXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgb3Igc2NyaXB0cyB0aGF0ICpkb24mIzM5O3QqIGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcywmIzM0OyB0aGVuIHdlIHJldHVybiBgV29ydGhGdXp6aW5nPWZhbHNlYC4KCk5vdywgbG9va2luZyBhdCB0aGUgbW9kaWZpZWQgZmlsZSwgaXQmIzM5O3MgdW5kZW5pYWJseSB3aXRoaW4gYHRvb2xzL2AsIHNwZWNpZmljYWxseSB1bmRlciBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vYC4gVGhpcyBpbW1lZGlhdGVseSBmbGFncyBpdCBhcyBhIHNlbGZ0ZXN0LCB3aGljaCwgYnkgZGVmaW5pdGlvbiwgaXMgdXNlci1zcGFjZSBjb2RlLiBUaGUgcGF0aCBhbG9uZSBpcyBwcmFjdGljYWxseSBhIGd1YXJhbnRlZSB0aGF0IGl0IGRvZXNuJiMzOTt0IHRvdWNoIHRoZSBrZXJuZWwgaW1hZ2Ugb3IgbW9kdWxlcy4gSSBuZWVkIHRvIGJlIDEwMCUgc3VyZSwgdGhvdWdoLiBTbywgSSYjMzk7bSBjaGVja2luZyB0aGUgZGlmZiBhZ2FpbiDigJMganVzdCB0byBiZSBjZXJ0YWluLgoKWWVwLCB0aGUgZGlmZiBjb25maXJtcyBpdC4gVGhlICpvbmx5KiBjaGFuZ2UgaXMgdG8gYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3BhZ2VtYXBfaW9jdGwuY2AuIE5vdGhpbmcgZWxzZSBpcyBpbXBhY3RlZC4KClRoZXJlZm9yZSwgdGhlIHZlcmRpY3QgaXMgY2xlYXI6IGBXb3J0aEZ1enppbmc6IGZhbHNlYC4gVGhlcmUgaXMgbm8gcmVhc29uIHRvIHRlc3QgdGhpcyBmaWxlIGFzIGl0IGlzIGEgdXNlci1zcGFjZSBzZWxmdGVzdCwgd2hpY2ggaXMgZXhhY3RseSB3aHkgdGhlIGZpbGUgaXMgc3RvcmVkIGluIGB0b29sc2AuIFRoZSBydWxlcyBhcmUgbWV0LiBDb25zZXF1ZW50bHksIGBFbmFibGVDb25maWdzYCBhbmQgYEZvY3VzU3ltYm9sc2Agd2lsbCBiZSBlbXB0eSwgYXMgdGhpcyBpc24mIzM5O3Qga2VybmVsLXNwYWNlIGxvZ2ljIHdlJiMzOTtyZSBpbnRlcmVzdGVkIGluIGZ1enppbmcuIFRoZSByZWFzb25pbmcgaXMgc29saWQ6IHNvbGVseSBtb2RpZmllcyBhIHVzZXItc3BhY2Ugc2VsZnRlc3QgYW5kIGhhcyBubyBiZWFyaW5nIG9uIHRoZSBrZXJuZWwgaW1hZ2Ugb3IgbW9kdWxlcy4KCkFscmlnaHQsIGxldCYjMzk7cyBjYWxsIGBzZXQtcmVzdWx0c2AgYW5kIG1vdmUgb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTY6NTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIHVzZXItc3BhY2Ugc2VsZnRlc3QgY29kZSBpbiB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wYWdlbWFwX2lvY3RsLmMsIHdoaWNoIGRvZXMgbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlIG9yIGtlcm5lbC1zcGFjZSBsb2dpYy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgdXNlci1zcGFjZSBzZWxmdGVzdCBjb2RlIGluIHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3BhZ2VtYXBfaW9jdGwuYywgd2hpY2ggZG9lcyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2Ugb3Iga2VybmVsLXNwYWNlIGxvZ2ljLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxNjo1MzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMDhUMTY6NTM6MzUuMjgwNDkwNTk3WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzY5MDQ1MTA1MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgdXNlci1zcGFjZSBzZWxmdGVzdCBjb2RlIGluIHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3BhZ2VtYXBfaW9jdGwuYywgd2hpY2ggZG9lcyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2Ugb3Iga2VybmVsLXNwYWNlIGxvZ2ljLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTY6NTM6MzUuMjgwNDk3MTI3WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MDU4OTgyMjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBmODg2YmIwODdjZDI5YjA0NmI2NWQ0ZTg4YzRlNDdmNGFjMzk1MDNkXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUdWUgU2VwIDggMTY6NTM6MzQgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGFnZW1hcF9pb2N0bC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGFnZW1hcF9pb2N0bC5jXFxuaW5kZXggZWFkYzcxNTljYTViOS4uZDlhNGZiNzgyZWNmZSAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wYWdlbWFwX2lvY3RsLmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wYWdlbWFwX2lvY3RsLmNcXG5AQCAtMzYsMTUgKzM2LDE1IEBAXFxuIFxcbiAjZGVmaW5lIFRFU1RfSVRFUkFUSU9OUyAxMDBcXG4gI2RlZmluZSBQQUdFTUFQIFxcXCIvcHJvYy9zZWxmL3BhZ2VtYXBcXFwiXFxuLWludCBwYWdlbWFwX2ZkO1xcbi1pbnQgdWZmZDtcXG4tc2l6ZV90IHBhZ2Vfc2l6ZTtcXG4tc2l6ZV90IGhwYWdlX3NpemU7XFxuLWNvbnN0IGNoYXIgKnByb2duYW1lO1xcbitzdGF0aWMgaW50IHBhZ2VtYXBfZmQ7XFxuK3N0YXRpYyBpbnQgdWZmZDtcXG4rc3RhdGljIHNpemVfdCBwYWdlX3NpemU7XFxuK3N0YXRpYyBzaXplX3QgaHBhZ2Vfc2l6ZTtcXG4rc3RhdGljIGNvbnN0IGNoYXIgKnByb2duYW1lO1xcbiBcXG4gI2RlZmluZSBMRU4ocmVnaW9uKVxcdCgocmVnaW9uLmVuZCAtIHJlZ2lvbi5zdGFydCkvcGFnZV9zaXplKVxcbiBcXG4tc3RhdGljIGxvbmcgcGFnZW1hcF9pb2N0bCh2b2lkICpzdGFydCwgaW50IGxlbiwgdm9pZCAqdmVjLCBpbnQgdmVjX2xlbiwgaW50IGZsYWcsXFxuK3N0YXRpYyBsb25nIHBhZ2VtYXBfaW9jdGwodm9pZCAqc3RhcnQsIHNpemVfdCBsZW4sIHZvaWQgKnZlYywgc2l6ZV90IHZlY19sZW4sIGludCBmbGFnLFxcbiBcXHRcXHRcXHQgIGludCBtYXhfcGFnZXMsIGxvbmcgcmVxdWlyZWRfbWFzaywgbG9uZyBhbnlvZl9tYXNrLCBsb25nIGV4Y2x1ZGVkX21hc2ssXFxuIFxcdFxcdFxcdCAgbG9uZyByZXR1cm5fbWFzaylcXG4ge1xcbkBAIC02NSw3ICs2NSw3IEBAIHN0YXRpYyBsb25nIHBhZ2VtYXBfaW9jdGwodm9pZCAqc3RhcnQsIGludCBsZW4sIHZvaWQgKnZlYywgaW50IHZlY19sZW4sIGludCBmbGFnXFxuIFxcdHJldHVybiBpb2N0bChwYWdlbWFwX2ZkLCBQQUdFTUFQX1NDQU4sIFxcdTAwMjZhcmcpO1xcbiB9XFxuIFxcbi1zdGF0aWMgbG9uZyBwYWdlbWFwX2lvYyh2b2lkICpzdGFydCwgaW50IGxlbiwgdm9pZCAqdmVjLCBpbnQgdmVjX2xlbiwgaW50IGZsYWcsXFxuK3N0YXRpYyBsb25nIHBhZ2VtYXBfaW9jKHZvaWQgKnN0YXJ0LCBzaXplX3QgbGVuLCB2b2lkICp2ZWMsIHNpemVfdCB2ZWNfbGVuLCBpbnQgZmxhZyxcXG4gXFx0XFx0XFx0aW50IG1heF9wYWdlcywgbG9uZyByZXF1aXJlZF9tYXNrLCBsb25nIGFueW9mX21hc2ssIGxvbmcgZXhjbHVkZWRfbWFzayxcXG4gXFx0XFx0XFx0bG9uZyByZXR1cm5fbWFzaywgbG9uZyAqd2Fsa19lbmQpXFxuIHtcXG5AQCAtOTIsOCArOTIsNyBAQCBzdGF0aWMgbG9uZyBwYWdlbWFwX2lvYyh2b2lkICpzdGFydCwgaW50IGxlbiwgdm9pZCAqdmVjLCBpbnQgdmVjX2xlbiwgaW50IGZsYWcsXFxuIFxcdHJldHVybiByZXQ7XFxuIH1cXG4gXFxuLVxcbi1pbnQgaW5pdF91ZmZkKHZvaWQpXFxuK3N0YXRpYyBpbnQgaW5pdF91ZmZkKHZvaWQpXFxuIHtcXG4gXFx0c3RydWN0IHVmZmRpb19hcGkgdWZmZGlvX2FwaTtcXG4gXFxuQEAgLTExNiw3ICsxMTUsNyBAQCBpbnQgaW5pdF91ZmZkKHZvaWQpXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbi1pbnQgd3BfaW5pdCh2b2lkICphZGRyLCBsb25nIHNpemUpXFxuK3N0YXRpYyBpbnQgd3BfaW5pdCh2b2lkICphZGRyLCBzaXplX3Qgc2l6ZSlcXG4ge1xcbiBcXHRzdHJ1Y3QgdWZmZGlvX3JlZ2lzdGVyIHVmZmRpb19yZWdpc3RlcjtcXG4gXFx0c3RydWN0IHVmZmRpb193cml0ZXByb3RlY3Qgd3A7XFxuQEAgLTE0MCw3ICsxMzksNyBAQCBpbnQgd3BfaW5pdCh2b2lkICphZGRyLCBsb25nIHNpemUpXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbi1pbnQgd3BfZnJlZSh2b2lkICphZGRyLCBsb25nIHNpemUpXFxuK3N0YXRpYyBpbnQgd3BfZnJlZSh2b2lkICphZGRyLCBzaXplX3Qgc2l6ZSlcXG4ge1xcbiBcXHRzdHJ1Y3QgdWZmZGlvX3JlZ2lzdGVyIHVmZmRpb19yZWdpc3RlcjtcXG4gXFxuQEAgLTE1Miw3ICsxNTEsNyBAQCBpbnQgd3BfZnJlZSh2b2lkICphZGRyLCBsb25nIHNpemUpXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbi1pbnQgd3BfYWRkcl9yYW5nZSh2b2lkICphZGRyLCBpbnQgc2l6ZSlcXG4rc3RhdGljIGludCB3cF9hZGRyX3JhbmdlKHZvaWQgKmFkZHIsIHNpemVfdCBzaXplKVxcbiB7XFxuIFxcdGlmIChwYWdlbWFwX2lvY3RsKGFkZHIsIHNpemUsIE5VTEwsIDAsXFxuIFxcdFxcdFxcdCAgUE1fU0NBTl9XUF9NQVRDSElORyB8IFBNX1NDQU5fQ0hFQ0tfV1BBU1lOQyxcXG5AQCAtMTYyLDcgKzE2MSw3IEBAIGludCB3cF9hZGRyX3JhbmdlKHZvaWQgKmFkZHIsIGludCBzaXplKVxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4tdm9pZCAqZ2V0aHVnZXRsYl9tZW0oaW50IHNpemUsIGludCAqc2htaWQpXFxuK3N0YXRpYyB2b2lkICpnZXRodWdldGxiX21lbShzaXplX3Qgc2l6ZSwgaW50ICpzaG1pZClcXG4ge1xcbiBcXHRjaGFyICptZW07XFxuIFxcbkBAIC0xODYsOSArMTg1LDEwIEBAIHZvaWQgKmdldGh1Z2V0bGJfbWVtKGludCBzaXplLCBpbnQgKnNobWlkKVxcbiBcXHRyZXR1cm4gbWVtO1xcbiB9XFxuIFxcbi1pbnQgdXNlcmZhdWx0ZmRfdGVzdHModm9pZClcXG4rc3RhdGljIGludCB1c2VyZmF1bHRmZF90ZXN0cyh2b2lkKVxcbiB7XFxuLVxcdGxvbmcgbWVtX3NpemUsIHZlY19zaXplLCB3cml0dGVuLCBudW1fcGFnZXMgPSAxNjtcXG4rXFx0c2l6ZV90IG1lbV9zaXplLCB2ZWNfc2l6ZSwgbnVtX3BhZ2VzID0gMTY7XFxuK1xcdGxvbmcgd3JpdHRlbjtcXG4gXFx0Y2hhciAqbWVtLCAqdmVjO1xcbiBcXG4gXFx0bWVtX3NpemUgPSBudW1fcGFnZXMgKiBwYWdlX3NpemU7XFxuQEAgLTIyOSw5ICsyMjksMTAgQEAgaW50IHVzZXJmYXVsdGZkX3Rlc3RzKHZvaWQpXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbi1pbnQgZ2V0X3JlYWRzKHN0cnVjdCBwYWdlX3JlZ2lvbiAqdmVjLCBpbnQgdmVjX3NpemUpXFxuK3N0YXRpYyBpbnQgZ2V0X3JlYWRzKHN0cnVjdCBwYWdlX3JlZ2lvbiAqdmVjLCBzaXplX3QgdmVjX3NpemUpXFxuIHtcXG4tXFx0aW50IGksIHN1bSA9IDA7XFxuK1xcdHNpemVfdCBpO1xcbitcXHRpbnQgc3VtID0gMDtcXG4gXFxuIFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyB2ZWNfc2l6ZTsgaSsrKVxcbiBcXHRcXHRzdW0gKz0gTEVOKHZlY1tpXSk7XFxuQEAgLTIzOSw5ICsyNDAsOSBAQCBpbnQgZ2V0X3JlYWRzKHN0cnVjdCBwYWdlX3JlZ2lvbiAqdmVjLCBpbnQgdmVjX3NpemUpXFxuIFxcdHJldHVybiBzdW07XFxuIH1cXG4gXFxuLWludCBzYW5pdHlfdGVzdHNfc2Qodm9pZClcXG4rc3RhdGljIGludCBzYW5pdHlfdGVzdHNfc2Qodm9pZClcXG4ge1xcbi1cXHR1bnNpZ25lZCBsb25nIGxvbmcgbWVtX3NpemUsIHZlY19zaXplLCBpLCB0b3RhbF9wYWdlcyA9IDA7XFxuK1xcdHNpemVfdCBtZW1fc2l6ZSwgdmVjX3NpemUsIGksIHRvdGFsX3BhZ2VzID0gMDtcXG4gXFx0bG9uZyByZXQsIHJldDIsIHJldDM7XFxuIFxcdGludCBudW1fcGFnZXMgPSAxMDAwO1xcbiBcXHRpbnQgdG90YWxfd3JpdGVzLCB0b3RhbF9yZWFkcywgcmVhZHMsIGNvdW50O1xcbkBAIC0zMzEsNyArMzMyLDcgQEAgaW50IHNhbml0eV90ZXN0c19zZCh2b2lkKVxcbiBcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4gXFx0XFx0a3NmdF9leGl0X2ZhaWxfbXNnKFxcXCJlcnJvciAlbGQgJWQgJXNcXFxcblxcXCIsIHJldCwgZXJybm8sIHN0cmVycm9yKGVycm5vKSk7XFxuIFxcbi1cXHRrc2Z0X3Rlc3RfcmVzdWx0KCh1bnNpZ25lZCBsb25nIGxvbmcpcmV0ID09IG1lbV9zaXplLyhwYWdlX3NpemUgKiAyKSxcXG4rXFx0a3NmdF90ZXN0X3Jlc3VsdCgoc2l6ZV90KXJldCA9PSBtZW1fc2l6ZS8ocGFnZV9zaXplICogMiksXFxuIFxcdFxcdFxcdCBcXFwiJXMgUmVwZWF0ZWQgcGF0dGVybiBvZiB3cml0dGVuIGFuZCBub24td3JpdHRlbiBwYWdlc1xcXFxuXFxcIiwgX19mdW5jX18pO1xcbiBcXG4gXFx0LyogNC4gUmVwZWF0ZWQgcGF0dGVybiBvZiB3cml0dGVuIGFuZCBub24td3JpdHRlbiBwYWdlcyBpbiBwYXJ0cyAqL1xcbkBAIC02ODIsOSArNjgzLDkgQEAgaW50IHNhbml0eV90ZXN0c19zZCh2b2lkKVxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4taW50IGJhc2VfdGVzdHMoY2hhciAqcHJlZml4LCBjaGFyICptZW0sIHVuc2lnbmVkIGxvbmcgbG9uZyBtZW1fc2l6ZSwgaW50IHNraXApXFxuK3N0YXRpYyBpbnQgYmFzZV90ZXN0cyhjaGFyICpwcmVmaXgsIGNoYXIgKm1lbSwgc2l6ZV90IG1lbV9zaXplLCBpbnQgc2tpcClcXG4ge1xcbi1cXHR1bnNpZ25lZCBsb25nIGxvbmcgdmVjX3NpemU7XFxuK1xcdHNpemVfdCB2ZWNfc2l6ZTtcXG4gXFx0aW50IHdyaXR0ZW47XFxuIFxcdHN0cnVjdCBwYWdlX3JlZ2lvbiAqdmVjLCAqdmVjMjtcXG4gXFxuQEAgLTc4Nyw3ICs3ODgsNyBAQCBpbnQgYmFzZV90ZXN0cyhjaGFyICpwcmVmaXgsIGNoYXIgKm1lbSwgdW5zaWduZWQgbG9uZyBsb25nIG1lbV9zaXplLCBpbnQgc2tpcClcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuLXZvaWQgKmdldGh1Z2VwYWdlKGludCBtYXBfc2l6ZSlcXG4rc3RhdGljIHZvaWQgKmdldGh1Z2VwYWdlKHNpemVfdCBtYXBfc2l6ZSlcXG4ge1xcbiBcXHRpbnQgcmV0O1xcbiBcXHRjaGFyICptYXA7XFxuQEAgLTgwNSwxMyArODA2LDEzIEBAIHZvaWQgKmdldGh1Z2VwYWdlKGludCBtYXBfc2l6ZSlcXG4gXFx0cmV0dXJuIG1hcDtcXG4gfVxcbiBcXG4taW50IGhwYWdlX3VuaXRfdGVzdHModm9pZClcXG4rc3RhdGljIGludCBocGFnZV91bml0X3Rlc3RzKHZvaWQpXFxuIHtcXG4gXFx0Y2hhciAqbWFwO1xcbiBcXHRpbnQgcmV0LCByZXQyO1xcbiBcXHRzaXplX3QgbnVtX3BhZ2VzID0gMTA7XFxuLVxcdHVuc2lnbmVkIGxvbmcgbG9uZyBtYXBfc2l6ZSA9IGhwYWdlX3NpemUgKiBudW1fcGFnZXM7XFxuLVxcdHVuc2lnbmVkIGxvbmcgbG9uZyB2ZWNfc2l6ZSA9IG1hcF9zaXplL3BhZ2Vfc2l6ZTtcXG4rXFx0c2l6ZV90IG1hcF9zaXplID0gaHBhZ2Vfc2l6ZSAqIG51bV9wYWdlcztcXG4rXFx0c2l6ZV90IHZlY19zaXplID0gbWFwX3NpemUvcGFnZV9zaXplO1xcbiBcXHRzdHJ1Y3QgcGFnZV9yZWdpb24gKnZlYywgKnZlYzI7XFxuIFxcbiBcXHR2ZWMgPSBjYWxsb2ModmVjX3NpemUsIHNpemVvZihzdHJ1Y3QgcGFnZV9yZWdpb24pKTtcXG5AQCAtOTk5LDExICsxMDAwLDEyIEBAIGludCBocGFnZV91bml0X3Rlc3RzKHZvaWQpXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbi1pbnQgdW5tYXBwZWRfcmVnaW9uX3Rlc3RzKHZvaWQpXFxuK3N0YXRpYyBpbnQgdW5tYXBwZWRfcmVnaW9uX3Rlc3RzKHZvaWQpXFxuIHtcXG4gXFx0dm9pZCAqc3RhcnQgPSAodm9pZCAqKTB4MTAwMDAwMDA7XFxuLVxcdGludCB3cml0dGVuLCBsZW4gPSAweDAwMDQwMDAwO1xcbi1cXHRsb25nIHZlY19zaXplID0gbGVuIC8gcGFnZV9zaXplO1xcbitcXHRpbnQgd3JpdHRlbjtcXG4rXFx0c2l6ZV90IGxlbiA9IDB4MDAwNDAwMDA7XFxuK1xcdHNpemVfdCB2ZWNfc2l6ZSA9IGxlbiAvIHBhZ2Vfc2l6ZTtcXG4gXFx0c3RydWN0IHBhZ2VfcmVnaW9uICp2ZWMgPSBjYWxsb2ModmVjX3NpemUsIHNpemVvZihzdHJ1Y3QgcGFnZV9yZWdpb24pKTtcXG4gXFx0aWYgKCF2ZWMpXFxuIFxcdFxcdGtzZnRfZXhpdF9mYWlsX21zZyhcXFwiZXJyb3Igbm9tZW1cXFxcblxcXCIpO1xcbkBAIC0xMDcyLDcgKzEwNzQsNyBAQCBzdGF0aWMgdm9pZCB0ZXN0X3NpbXBsZSh2b2lkKVxcbiAgKiB3aXRoIG5vIHBhZ2UgdGFibGUsIGV4ZXJjaXNpbmcgcGFnZW1hcF9zY2FuX3B0ZV9ob2xlKCk7IGEgYmFzZS1wYWdlIHJhbmdlXFxuICAqIGxlYXZlcyBwdGVfbm9uZSBlbnRyaWVzLlxcbiAgKi9cXG4tc3RhdGljIHZvaWQgdW5wb3B1bGF0ZWRfd3JpdHRlbl90ZXN0KGNvbnN0IGNoYXIgKm5hbWUsIGNoYXIgKm1lbSwgbG9uZyBzaXplLFxcbitzdGF0aWMgdm9pZCB1bnBvcHVsYXRlZF93cml0dGVuX3Rlc3QoY29uc3QgY2hhciAqbmFtZSwgY2hhciAqbWVtLCBzaXplX3Qgc2l6ZSxcXG4gXFx0XFx0XFx0XFx0ICAgICBib29sIHVzZV90aHApXFxuIHtcXG4gXFx0bG9uZyBucGFnZXMgPSBzaXplIC8gcGFnZV9zaXplLCBmYXN0ID0gMCwgc2xvdyA9IDAsIHJldDtcXG5AQCAtMTExNSw3ICsxMTE3LDcgQEAgc3RhdGljIHZvaWQgdW5wb3B1bGF0ZWRfd3JpdHRlbl90ZXN0KGNvbnN0IGNoYXIgKm5hbWUsIGNoYXIgKm1lbSwgbG9uZyBzaXplLFxcbiBcXG4gc3RhdGljIHZvaWQgdW5wb3B1bGF0ZWRfc2Nhbl90ZXN0KHZvaWQpXFxuIHtcXG4tXFx0bG9uZyBtZW1fc2l6ZSA9IDE2ICogcGFnZV9zaXplO1xcbitcXHRzaXplX3QgbWVtX3NpemUgPSAxNiAqIHBhZ2Vfc2l6ZTtcXG4gXFx0Y2hhciAqbWVtO1xcbiBcXG4gXFx0bWVtID0gbW1hcChOVUxMLCBtZW1fc2l6ZSwgUFJPVF9SRUFEIHwgUFJPVF9XUklURSxcXG5AQCAtMTE1NSwxMCArMTE1NywxMCBAQCBzdGF0aWMgdm9pZCB1bnBvcHVsYXRlZF90aHBfc2Nhbl90ZXN0KHZvaWQpXFxuIFxcdG11bm1hcChhcmVhLCAyICogaHBhZ2Vfc2l6ZSk7XFxuIH1cXG4gXFxuLWludCBzYW5pdHlfdGVzdHModm9pZClcXG4rc3RhdGljIGludCBzYW5pdHlfdGVzdHModm9pZClcXG4ge1xcbi1cXHR1bnNpZ25lZCBsb25nIGxvbmcgbWVtX3NpemUsIHZlY19zaXplO1xcbi1cXHRsb25nIHJldCwgZmQsIGksIGJ1Zl9zaXplLCBucl9wYWdlcztcXG4rXFx0c2l6ZV90IG1lbV9zaXplLCB2ZWNfc2l6ZSwgaSwgYnVmX3NpemU7XFxuK1xcdGxvbmcgcmV0LCBmZCwgbnJfcGFnZXM7XFxuIFxcdHN0cnVjdCBwYWdlX3JlZ2lvbiAqdmVjO1xcbiBcXHRjaGFyICptZW0sICpmbWVtO1xcbiBcXHRzdHJ1Y3Qgc3RhdCBzYnVmO1xcbkBAIC0xMzI3LDcgKzEzMjksNyBAQCBpbnQgc2FuaXR5X3Rlc3RzKHZvaWQpXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbi1pbnQgbXByb3RlY3RfdGVzdHModm9pZClcXG4rc3RhdGljIGludCBtcHJvdGVjdF90ZXN0cyh2b2lkKVxcbiB7XFxuIFxcdGludCByZXQ7XFxuIFxcdGNoYXIgKm1lbSwgKm1lbTI7XFxuQEAgLTE0NDcsNyArMTQ0OSw3IEBAIHN0YXRpYyBzc2l6ZV90IGdldF9kaXJ0eV9wYWdlc19yZXNldChjaGFyICptZW0sIHVuc2lnbmVkIGludCBjb3VudCxcXG4gXFx0cmV0dXJuIGNudDtcXG4gfVxcbiBcXG4tdm9pZCAqdGhyZWFkX3Byb2Modm9pZCAqbWVtKVxcbitzdGF0aWMgdm9pZCAqdGhyZWFkX3Byb2Modm9pZCAqbWVtKVxcbiB7XFxuIFxcdGludCAqbSA9IG1lbTtcXG4gXFx0bG9uZyBjdXJyX2ZhdWx0cywgZmF1bHRzO1xcbkBAIC0xNDg3LDcgKzE0ODksNyBAQCB2b2lkICp0aHJlYWRfcHJvYyh2b2lkICptZW0pXFxuIFxcdHJldHVybiBOVUxMO1xcbiB9XFxuIFxcbi1zdGF0aWMgdm9pZCB0cmFuc2FjdF90ZXN0KGludCBwYWdlX3NpemUpXFxuK3N0YXRpYyB2b2lkIHRyYW5zYWN0X3Rlc3Qodm9pZClcXG4ge1xcbiBcXHR1bnNpZ25lZCBpbnQgaSwgY291bnQsIGV4dHJhX3BhZ2VzO1xcbiBcXHR1bnNpZ25lZCBpbnQgYztcXG5AQCAtMTU4MCwxMSArMTU4MiwxMSBAQCBzdGF0aWMgdm9pZCB0cmFuc2FjdF90ZXN0KGludCBwYWdlX3NpemUpXFxuIFxcdFxcdFxcdCAgICAgIGV4dHJhX3RocmVhZF9mYXVsdHMpO1xcbiB9XFxuIFxcbi12b2lkIHplcm9wZm5fdGVzdHModm9pZClcXG4rc3RhdGljIHZvaWQgemVyb3Bmbl90ZXN0cyh2b2lkKVxcbiB7XFxuLVxcdHVuc2lnbmVkIGxvbmcgbG9uZyBtZW1fc2l6ZTtcXG4rXFx0c2l6ZV90IG1lbV9zaXplLCBpO1xcbiBcXHRzdHJ1Y3QgcGFnZV9yZWdpb24gdmVjO1xcbi1cXHRpbnQgaSwgcmV0O1xcbitcXHRpbnQgcmV0O1xcbiBcXHRjaGFyICptbWFwX21lbSwgKm1lbTtcXG4gXFxuIFxcdC8qIFRlc3Qgd2l0aCBub3JtYWwgbWVtb3J5ICovXFxuQEAgLTE2NDIsOCArMTY0NCw4IEBAIHZvaWQgemVyb3Bmbl90ZXN0cyh2b2lkKVxcbiBcXG4gaW50IG1haW4oaW50IF9fYXR0cmlidXRlX18oKHVudXNlZCkpIGFyZ2MsIGNoYXIgKmFyZ3ZbXSlcXG4ge1xcbi1cXHRpbnQgc2htaWQsIGJ1Zl9zaXplLCBmZCwgaSwgcmV0O1xcbi1cXHR1bnNpZ25lZCBsb25nIGxvbmcgbWVtX3NpemU7XFxuK1xcdGludCBzaG1pZCwgZmQsIHJldDtcXG4rXFx0c2l6ZV90IG1lbV9zaXplLCBidWZfc2l6ZSwgaTtcXG4gXFx0Y2hhciAqbWVtLCAqbWFwLCAqZm1lbTtcXG4gXFx0c3RydWN0IHN0YXQgc2J1ZjtcXG4gXFxuQEAgLTE2NTEsNiArMTY1Myw5IEBAIGludCBtYWluKGludCBfX2F0dHJpYnV0ZV9fKCh1bnVzZWQpKSBhcmdjLCBjaGFyICphcmd2W10pXFxuIFxcbiBcXHRrc2Z0X3ByaW50X2hlYWRlcigpO1xcbiBcXG4rXFx0cGFnZV9zaXplID0gZ2V0cGFnZXNpemUoKTtcXG4rXFx0aHBhZ2Vfc2l6ZSA9IHJlYWRfcG1kX3BhZ2VzaXplKCk7XFxuK1xcbiBcXHRpZiAoaW5pdF91ZmZkKCkpXFxuIFxcdFxcdGtzZnRfZXhpdF9za2lwKFxcXCJGYWlsZWQgdG8gaW5pdGlhbGl6ZSB1c2VyZmF1bHRmZFxcXFxuXFxcIik7XFxuIFxcbkBAIC0xNjU5LDkgKzE2NjQsNiBAQCBpbnQgbWFpbihpbnQgX19hdHRyaWJ1dGVfXygodW51c2VkKSkgYXJnYywgY2hhciAqYXJndltdKVxcbiBcXG4gXFx0a3NmdF9zZXRfcGxhbigxMTkpO1xcbiBcXG4tXFx0cGFnZV9zaXplID0gZ2V0cGFnZXNpemUoKTtcXG4tXFx0aHBhZ2Vfc2l6ZSA9IHJlYWRfcG1kX3BhZ2VzaXplKCk7XFxuLVxcbiBcXHRwYWdlbWFwX2ZkID0gb3BlbihQQUdFTUFQLCBPX1JET05MWSk7XFxuIFxcdGlmIChwYWdlbWFwX2ZkIFxcdTAwM2MgMClcXG4gXFx0XFx0a3NmdF9leGl0X2ZhaWxfbXNnKFxcXCJGYWlsZWQgdG8gb3BlbiBcXFwiIFBBR0VNQVAgXFxcIlxcXFxuXFxcIik7XFxuQEAgLTE4MjEsNyArMTgyMyw3IEBAIGludCBtYWluKGludCBfX2F0dHJpYnV0ZV9fKCh1bnVzZWQpKSBhcmdjLCBjaGFyICphcmd2W10pXFxuIFxcdG1wcm90ZWN0X3Rlc3RzKCk7XFxuIFxcbiBcXHQvKiAxMy4gVHJhbnNhY3QgdGVzdCAqL1xcbi1cXHR0cmFuc2FjdF90ZXN0KHBhZ2Vfc2l6ZSk7XFxuK1xcdHRyYW5zYWN0X3Rlc3QoKTtcXG4gXFxuIFxcdC8qIDE0LiBTYW5pdHkgdGVzdGluZyAqL1xcbiBcXHRzYW5pdHlfdGVzdHMoKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTY6NTM6MzUuODg2OTU4NTQ3WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjo3MDgzOTY2MDMzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIHVzZXItc3BhY2Ugc2VsZnRlc3QgY29kZSBpbiB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wYWdlbWFwX2lvY3RsLmMsIHdoaWNoIGRvZXMgbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlIG9yIGtlcm5lbC1zcGFjZSBsb2dpYy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3NcbnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4xLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncyxcbmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuXG5cbi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6XG4gIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWRcbiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS5cbiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLFxuICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuXG5cbi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgXCJOTyBGVU5DVElPTkFMIENIQU5HRVwiIChORkNJKSBPUiBcIlJFRkFDVE9SSU5HXCIgQ0xBSU1TOlxuICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzIFwiY2xlYW51cHNcIiwgXCJyZWZhY3RvcmluZ3NcIiwgb3Igc3RhdGVcbiAgXCJObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZFwiLiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS5cbiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50XG4gIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLlxuICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLlxuXG4tIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOlxuICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosXG4gIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLlxuICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyXG4gIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczpcblxuLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOlxuICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy5cbiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLylcbiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuXG4gICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHNcbiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLlxuICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy5cbi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOlxuICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6XG4gICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nXG4gICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuXG4gICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6XG4tIENvcmUgU3Vic3lzdGVtczpcbiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksXG4gICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLlxuLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6XG4gICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLlxuLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6XG4gICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLlxuLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOlxuICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOlxuXG4tIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzpcbiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXNcbiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHRcbiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuXG4gIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyBcImZvY3VzZWRcIixcbiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLlxuXG4tIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzpcbiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzXG4gIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LlxuXG4tIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKTpcbiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFja1xuICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy5cbiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyXG4gIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3Ncbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5JZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOlxuLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuLSBDaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLlxuLSBTdHJpcCBhbnkgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgZjg4NmJiMDg3Y2QyOWIwNDZiNjVkNGU4OGM0ZTQ3ZjRhYzM5NTAzZFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgU2VwIDggMTY6NTM6MzQgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wYWdlbWFwX2lvY3RsLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wYWdlbWFwX2lvY3RsLmNcbmluZGV4IGVhZGM3MTU5Y2E1YjkuLmQ5YTRmYjc4MmVjZmUgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wYWdlbWFwX2lvY3RsLmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3BhZ2VtYXBfaW9jdGwuY1xuQEAgLTM2LDE1ICszNiwxNSBAQFxuIFxuICNkZWZpbmUgVEVTVF9JVEVSQVRJT05TIDEwMFxuICNkZWZpbmUgUEFHRU1BUCBcIi9wcm9jL3NlbGYvcGFnZW1hcFwiXG4taW50IHBhZ2VtYXBfZmQ7XG4taW50IHVmZmQ7XG4tc2l6ZV90IHBhZ2Vfc2l6ZTtcbi1zaXplX3QgaHBhZ2Vfc2l6ZTtcbi1jb25zdCBjaGFyICpwcm9nbmFtZTtcbitzdGF0aWMgaW50IHBhZ2VtYXBfZmQ7XG4rc3RhdGljIGludCB1ZmZkO1xuK3N0YXRpYyBzaXplX3QgcGFnZV9zaXplO1xuK3N0YXRpYyBzaXplX3QgaHBhZ2Vfc2l6ZTtcbitzdGF0aWMgY29uc3QgY2hhciAqcHJvZ25hbWU7XG4gXG4gI2RlZmluZSBMRU4ocmVnaW9uKVx0KChyZWdpb24uZW5kIC0gcmVnaW9uLnN0YXJ0KS9wYWdlX3NpemUpXG4gXG4tc3RhdGljIGxvbmcgcGFnZW1hcF9pb2N0bCh2b2lkICpzdGFydCwgaW50IGxlbiwgdm9pZCAqdmVjLCBpbnQgdmVjX2xlbiwgaW50IGZsYWcsXG4rc3RhdGljIGxvbmcgcGFnZW1hcF9pb2N0bCh2b2lkICpzdGFydCwgc2l6ZV90IGxlbiwgdm9pZCAqdmVjLCBzaXplX3QgdmVjX2xlbiwgaW50IGZsYWcsXG4gXHRcdFx0ICBpbnQgbWF4X3BhZ2VzLCBsb25nIHJlcXVpcmVkX21hc2ssIGxvbmcgYW55b2ZfbWFzaywgbG9uZyBleGNsdWRlZF9tYXNrLFxuIFx0XHRcdCAgbG9uZyByZXR1cm5fbWFzaylcbiB7XG5AQCAtNjUsNyArNjUsNyBAQCBzdGF0aWMgbG9uZyBwYWdlbWFwX2lvY3RsKHZvaWQgKnN0YXJ0LCBpbnQgbGVuLCB2b2lkICp2ZWMsIGludCB2ZWNfbGVuLCBpbnQgZmxhZ1xuIFx0cmV0dXJuIGlvY3RsKHBhZ2VtYXBfZmQsIFBBR0VNQVBfU0NBTiwgXHUwMDI2YXJnKTtcbiB9XG4gXG4tc3RhdGljIGxvbmcgcGFnZW1hcF9pb2Modm9pZCAqc3RhcnQsIGludCBsZW4sIHZvaWQgKnZlYywgaW50IHZlY19sZW4sIGludCBmbGFnLFxuK3N0YXRpYyBsb25nIHBhZ2VtYXBfaW9jKHZvaWQgKnN0YXJ0LCBzaXplX3QgbGVuLCB2b2lkICp2ZWMsIHNpemVfdCB2ZWNfbGVuLCBpbnQgZmxhZyxcbiBcdFx0XHRpbnQgbWF4X3BhZ2VzLCBsb25nIHJlcXVpcmVkX21hc2ssIGxvbmcgYW55b2ZfbWFzaywgbG9uZyBleGNsdWRlZF9tYXNrLFxuIFx0XHRcdGxvbmcgcmV0dXJuX21hc2ssIGxvbmcgKndhbGtfZW5kKVxuIHtcbkBAIC05Miw4ICs5Miw3IEBAIHN0YXRpYyBsb25nIHBhZ2VtYXBfaW9jKHZvaWQgKnN0YXJ0LCBpbnQgbGVuLCB2b2lkICp2ZWMsIGludCB2ZWNfbGVuLCBpbnQgZmxhZyxcbiBcdHJldHVybiByZXQ7XG4gfVxuIFxuLVxuLWludCBpbml0X3VmZmQodm9pZClcbitzdGF0aWMgaW50IGluaXRfdWZmZCh2b2lkKVxuIHtcbiBcdHN0cnVjdCB1ZmZkaW9fYXBpIHVmZmRpb19hcGk7XG4gXG5AQCAtMTE2LDcgKzExNSw3IEBAIGludCBpbml0X3VmZmQodm9pZClcbiBcdHJldHVybiAwO1xuIH1cbiBcbi1pbnQgd3BfaW5pdCh2b2lkICphZGRyLCBsb25nIHNpemUpXG4rc3RhdGljIGludCB3cF9pbml0KHZvaWQgKmFkZHIsIHNpemVfdCBzaXplKVxuIHtcbiBcdHN0cnVjdCB1ZmZkaW9fcmVnaXN0ZXIgdWZmZGlvX3JlZ2lzdGVyO1xuIFx0c3RydWN0IHVmZmRpb193cml0ZXByb3RlY3Qgd3A7XG5AQCAtMTQwLDcgKzEzOSw3IEBAIGludCB3cF9pbml0KHZvaWQgKmFkZHIsIGxvbmcgc2l6ZSlcbiBcdHJldHVybiAwO1xuIH1cbiBcbi1pbnQgd3BfZnJlZSh2b2lkICphZGRyLCBsb25nIHNpemUpXG4rc3RhdGljIGludCB3cF9mcmVlKHZvaWQgKmFkZHIsIHNpemVfdCBzaXplKVxuIHtcbiBcdHN0cnVjdCB1ZmZkaW9fcmVnaXN0ZXIgdWZmZGlvX3JlZ2lzdGVyO1xuIFxuQEAgLTE1Miw3ICsxNTEsNyBAQCBpbnQgd3BfZnJlZSh2b2lkICphZGRyLCBsb25nIHNpemUpXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4taW50IHdwX2FkZHJfcmFuZ2Uodm9pZCAqYWRkciwgaW50IHNpemUpXG4rc3RhdGljIGludCB3cF9hZGRyX3JhbmdlKHZvaWQgKmFkZHIsIHNpemVfdCBzaXplKVxuIHtcbiBcdGlmIChwYWdlbWFwX2lvY3RsKGFkZHIsIHNpemUsIE5VTEwsIDAsXG4gXHRcdFx0ICBQTV9TQ0FOX1dQX01BVENISU5HIHwgUE1fU0NBTl9DSEVDS19XUEFTWU5DLFxuQEAgLTE2Miw3ICsxNjEsNyBAQCBpbnQgd3BfYWRkcl9yYW5nZSh2b2lkICphZGRyLCBpbnQgc2l6ZSlcbiBcdHJldHVybiAwO1xuIH1cbiBcbi12b2lkICpnZXRodWdldGxiX21lbShpbnQgc2l6ZSwgaW50ICpzaG1pZClcbitzdGF0aWMgdm9pZCAqZ2V0aHVnZXRsYl9tZW0oc2l6ZV90IHNpemUsIGludCAqc2htaWQpXG4ge1xuIFx0Y2hhciAqbWVtO1xuIFxuQEAgLTE4Niw5ICsxODUsMTAgQEAgdm9pZCAqZ2V0aHVnZXRsYl9tZW0oaW50IHNpemUsIGludCAqc2htaWQpXG4gXHRyZXR1cm4gbWVtO1xuIH1cbiBcbi1pbnQgdXNlcmZhdWx0ZmRfdGVzdHModm9pZClcbitzdGF0aWMgaW50IHVzZXJmYXVsdGZkX3Rlc3RzKHZvaWQpXG4ge1xuLVx0bG9uZyBtZW1fc2l6ZSwgdmVjX3NpemUsIHdyaXR0ZW4sIG51bV9wYWdlcyA9IDE2O1xuK1x0c2l6ZV90IG1lbV9zaXplLCB2ZWNfc2l6ZSwgbnVtX3BhZ2VzID0gMTY7XG4rXHRsb25nIHdyaXR0ZW47XG4gXHRjaGFyICptZW0sICp2ZWM7XG4gXG4gXHRtZW1fc2l6ZSA9IG51bV9wYWdlcyAqIHBhZ2Vfc2l6ZTtcbkBAIC0yMjksOSArMjI5LDEwIEBAIGludCB1c2VyZmF1bHRmZF90ZXN0cyh2b2lkKVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuLWludCBnZXRfcmVhZHMoc3RydWN0IHBhZ2VfcmVnaW9uICp2ZWMsIGludCB2ZWNfc2l6ZSlcbitzdGF0aWMgaW50IGdldF9yZWFkcyhzdHJ1Y3QgcGFnZV9yZWdpb24gKnZlYywgc2l6ZV90IHZlY19zaXplKVxuIHtcbi1cdGludCBpLCBzdW0gPSAwO1xuK1x0c2l6ZV90IGk7XG4rXHRpbnQgc3VtID0gMDtcbiBcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHZlY19zaXplOyBpKyspXG4gXHRcdHN1bSArPSBMRU4odmVjW2ldKTtcbkBAIC0yMzksOSArMjQwLDkgQEAgaW50IGdldF9yZWFkcyhzdHJ1Y3QgcGFnZV9yZWdpb24gKnZlYywgaW50IHZlY19zaXplKVxuIFx0cmV0dXJuIHN1bTtcbiB9XG4gXG4taW50IHNhbml0eV90ZXN0c19zZCh2b2lkKVxuK3N0YXRpYyBpbnQgc2FuaXR5X3Rlc3RzX3NkKHZvaWQpXG4ge1xuLVx0dW5zaWduZWQgbG9uZyBsb25nIG1lbV9zaXplLCB2ZWNfc2l6ZSwgaSwgdG90YWxfcGFnZXMgPSAwO1xuK1x0c2l6ZV90IG1lbV9zaXplLCB2ZWNfc2l6ZSwgaSwgdG90YWxfcGFnZXMgPSAwO1xuIFx0bG9uZyByZXQsIHJldDIsIHJldDM7XG4gXHRpbnQgbnVtX3BhZ2VzID0gMTAwMDtcbiBcdGludCB0b3RhbF93cml0ZXMsIHRvdGFsX3JlYWRzLCByZWFkcywgY291bnQ7XG5AQCAtMzMxLDcgKzMzMiw3IEBAIGludCBzYW5pdHlfdGVzdHNfc2Qodm9pZClcbiBcdGlmIChyZXQgXHUwMDNjIDApXG4gXHRcdGtzZnRfZXhpdF9mYWlsX21zZyhcImVycm9yICVsZCAlZCAlc1xcblwiLCByZXQsIGVycm5vLCBzdHJlcnJvcihlcnJubykpO1xuIFxuLVx0a3NmdF90ZXN0X3Jlc3VsdCgodW5zaWduZWQgbG9uZyBsb25nKXJldCA9PSBtZW1fc2l6ZS8ocGFnZV9zaXplICogMiksXG4rXHRrc2Z0X3Rlc3RfcmVzdWx0KChzaXplX3QpcmV0ID09IG1lbV9zaXplLyhwYWdlX3NpemUgKiAyKSxcbiBcdFx0XHQgXCIlcyBSZXBlYXRlZCBwYXR0ZXJuIG9mIHdyaXR0ZW4gYW5kIG5vbi13cml0dGVuIHBhZ2VzXFxuXCIsIF9fZnVuY19fKTtcbiBcbiBcdC8qIDQuIFJlcGVhdGVkIHBhdHRlcm4gb2Ygd3JpdHRlbiBhbmQgbm9uLXdyaXR0ZW4gcGFnZXMgaW4gcGFydHMgKi9cbkBAIC02ODIsOSArNjgzLDkgQEAgaW50IHNhbml0eV90ZXN0c19zZCh2b2lkKVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuLWludCBiYXNlX3Rlc3RzKGNoYXIgKnByZWZpeCwgY2hhciAqbWVtLCB1bnNpZ25lZCBsb25nIGxvbmcgbWVtX3NpemUsIGludCBza2lwKVxuK3N0YXRpYyBpbnQgYmFzZV90ZXN0cyhjaGFyICpwcmVmaXgsIGNoYXIgKm1lbSwgc2l6ZV90IG1lbV9zaXplLCBpbnQgc2tpcClcbiB7XG4tXHR1bnNpZ25lZCBsb25nIGxvbmcgdmVjX3NpemU7XG4rXHRzaXplX3QgdmVjX3NpemU7XG4gXHRpbnQgd3JpdHRlbjtcbiBcdHN0cnVjdCBwYWdlX3JlZ2lvbiAqdmVjLCAqdmVjMjtcbiBcbkBAIC03ODcsNyArNzg4LDcgQEAgaW50IGJhc2VfdGVzdHMoY2hhciAqcHJlZml4LCBjaGFyICptZW0sIHVuc2lnbmVkIGxvbmcgbG9uZyBtZW1fc2l6ZSwgaW50IHNraXApXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4tdm9pZCAqZ2V0aHVnZXBhZ2UoaW50IG1hcF9zaXplKVxuK3N0YXRpYyB2b2lkICpnZXRodWdlcGFnZShzaXplX3QgbWFwX3NpemUpXG4ge1xuIFx0aW50IHJldDtcbiBcdGNoYXIgKm1hcDtcbkBAIC04MDUsMTMgKzgwNiwxMyBAQCB2b2lkICpnZXRodWdlcGFnZShpbnQgbWFwX3NpemUpXG4gXHRyZXR1cm4gbWFwO1xuIH1cbiBcbi1pbnQgaHBhZ2VfdW5pdF90ZXN0cyh2b2lkKVxuK3N0YXRpYyBpbnQgaHBhZ2VfdW5pdF90ZXN0cyh2b2lkKVxuIHtcbiBcdGNoYXIgKm1hcDtcbiBcdGludCByZXQsIHJldDI7XG4gXHRzaXplX3QgbnVtX3BhZ2VzID0gMTA7XG4tXHR1bnNpZ25lZCBsb25nIGxvbmcgbWFwX3NpemUgPSBocGFnZV9zaXplICogbnVtX3BhZ2VzO1xuLVx0dW5zaWduZWQgbG9uZyBsb25nIHZlY19zaXplID0gbWFwX3NpemUvcGFnZV9zaXplO1xuK1x0c2l6ZV90IG1hcF9zaXplID0gaHBhZ2Vfc2l6ZSAqIG51bV9wYWdlcztcbitcdHNpemVfdCB2ZWNfc2l6ZSA9IG1hcF9zaXplL3BhZ2Vfc2l6ZTtcbiBcdHN0cnVjdCBwYWdlX3JlZ2lvbiAqdmVjLCAqdmVjMjtcbiBcbiBcdHZlYyA9IGNhbGxvYyh2ZWNfc2l6ZSwgc2l6ZW9mKHN0cnVjdCBwYWdlX3JlZ2lvbikpO1xuQEAgLTk5OSwxMSArMTAwMCwxMiBAQCBpbnQgaHBhZ2VfdW5pdF90ZXN0cyh2b2lkKVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuLWludCB1bm1hcHBlZF9yZWdpb25fdGVzdHModm9pZClcbitzdGF0aWMgaW50IHVubWFwcGVkX3JlZ2lvbl90ZXN0cyh2b2lkKVxuIHtcbiBcdHZvaWQgKnN0YXJ0ID0gKHZvaWQgKikweDEwMDAwMDAwO1xuLVx0aW50IHdyaXR0ZW4sIGxlbiA9IDB4MDAwNDAwMDA7XG4tXHRsb25nIHZlY19zaXplID0gbGVuIC8gcGFnZV9zaXplO1xuK1x0aW50IHdyaXR0ZW47XG4rXHRzaXplX3QgbGVuID0gMHgwMDA0MDAwMDtcbitcdHNpemVfdCB2ZWNfc2l6ZSA9IGxlbiAvIHBhZ2Vfc2l6ZTtcbiBcdHN0cnVjdCBwYWdlX3JlZ2lvbiAqdmVjID0gY2FsbG9jKHZlY19zaXplLCBzaXplb2Yoc3RydWN0IHBhZ2VfcmVnaW9uKSk7XG4gXHRpZiAoIXZlYylcbiBcdFx0a3NmdF9leGl0X2ZhaWxfbXNnKFwiZXJyb3Igbm9tZW1cXG5cIik7XG5AQCAtMTA3Miw3ICsxMDc0LDcgQEAgc3RhdGljIHZvaWQgdGVzdF9zaW1wbGUodm9pZClcbiAgKiB3aXRoIG5vIHBhZ2UgdGFibGUsIGV4ZXJjaXNpbmcgcGFnZW1hcF9zY2FuX3B0ZV9ob2xlKCk7IGEgYmFzZS1wYWdlIHJhbmdlXG4gICogbGVhdmVzIHB0ZV9ub25lIGVudHJpZXMuXG4gICovXG4tc3RhdGljIHZvaWQgdW5wb3B1bGF0ZWRfd3JpdHRlbl90ZXN0KGNvbnN0IGNoYXIgKm5hbWUsIGNoYXIgKm1lbSwgbG9uZyBzaXplLFxuK3N0YXRpYyB2b2lkIHVucG9wdWxhdGVkX3dyaXR0ZW5fdGVzdChjb25zdCBjaGFyICpuYW1lLCBjaGFyICptZW0sIHNpemVfdCBzaXplLFxuIFx0XHRcdFx0ICAgICBib29sIHVzZV90aHApXG4ge1xuIFx0bG9uZyBucGFnZXMgPSBzaXplIC8gcGFnZV9zaXplLCBmYXN0ID0gMCwgc2xvdyA9IDAsIHJldDtcbkBAIC0xMTE1LDcgKzExMTcsNyBAQCBzdGF0aWMgdm9pZCB1bnBvcHVsYXRlZF93cml0dGVuX3Rlc3QoY29uc3QgY2hhciAqbmFtZSwgY2hhciAqbWVtLCBsb25nIHNpemUsXG4gXG4gc3RhdGljIHZvaWQgdW5wb3B1bGF0ZWRfc2Nhbl90ZXN0KHZvaWQpXG4ge1xuLVx0bG9uZyBtZW1fc2l6ZSA9IDE2ICogcGFnZV9zaXplO1xuK1x0c2l6ZV90IG1lbV9zaXplID0gMTYgKiBwYWdlX3NpemU7XG4gXHRjaGFyICptZW07XG4gXG4gXHRtZW0gPSBtbWFwKE5VTEwsIG1lbV9zaXplLCBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFLFxuQEAgLTExNTUsMTAgKzExNTcsMTAgQEAgc3RhdGljIHZvaWQgdW5wb3B1bGF0ZWRfdGhwX3NjYW5fdGVzdCh2b2lkKVxuIFx0bXVubWFwKGFyZWEsIDIgKiBocGFnZV9zaXplKTtcbiB9XG4gXG4taW50IHNhbml0eV90ZXN0cyh2b2lkKVxuK3N0YXRpYyBpbnQgc2FuaXR5X3Rlc3RzKHZvaWQpXG4ge1xuLVx0dW5zaWduZWQgbG9uZyBsb25nIG1lbV9zaXplLCB2ZWNfc2l6ZTtcbi1cdGxvbmcgcmV0LCBmZCwgaSwgYnVmX3NpemUsIG5yX3BhZ2VzO1xuK1x0c2l6ZV90IG1lbV9zaXplLCB2ZWNfc2l6ZSwgaSwgYnVmX3NpemU7XG4rXHRsb25nIHJldCwgZmQsIG5yX3BhZ2VzO1xuIFx0c3RydWN0IHBhZ2VfcmVnaW9uICp2ZWM7XG4gXHRjaGFyICptZW0sICpmbWVtO1xuIFx0c3RydWN0IHN0YXQgc2J1ZjtcbkBAIC0xMzI3LDcgKzEzMjksNyBAQCBpbnQgc2FuaXR5X3Rlc3RzKHZvaWQpXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4taW50IG1wcm90ZWN0X3Rlc3RzKHZvaWQpXG4rc3RhdGljIGludCBtcHJvdGVjdF90ZXN0cyh2b2lkKVxuIHtcbiBcdGludCByZXQ7XG4gXHRjaGFyICptZW0sICptZW0yO1xuQEAgLTE0NDcsNyArMTQ0OSw3IEBAIHN0YXRpYyBzc2l6ZV90IGdldF9kaXJ0eV9wYWdlc19yZXNldChjaGFyICptZW0sIHVuc2lnbmVkIGludCBjb3VudCxcbiBcdHJldHVybiBjbnQ7XG4gfVxuIFxuLXZvaWQgKnRocmVhZF9wcm9jKHZvaWQgKm1lbSlcbitzdGF0aWMgdm9pZCAqdGhyZWFkX3Byb2Modm9pZCAqbWVtKVxuIHtcbiBcdGludCAqbSA9IG1lbTtcbiBcdGxvbmcgY3Vycl9mYXVsdHMsIGZhdWx0cztcbkBAIC0xNDg3LDcgKzE0ODksNyBAQCB2b2lkICp0aHJlYWRfcHJvYyh2b2lkICptZW0pXG4gXHRyZXR1cm4gTlVMTDtcbiB9XG4gXG4tc3RhdGljIHZvaWQgdHJhbnNhY3RfdGVzdChpbnQgcGFnZV9zaXplKVxuK3N0YXRpYyB2b2lkIHRyYW5zYWN0X3Rlc3Qodm9pZClcbiB7XG4gXHR1bnNpZ25lZCBpbnQgaSwgY291bnQsIGV4dHJhX3BhZ2VzO1xuIFx0dW5zaWduZWQgaW50IGM7XG5AQCAtMTU4MCwxMSArMTU4MiwxMSBAQCBzdGF0aWMgdm9pZCB0cmFuc2FjdF90ZXN0KGludCBwYWdlX3NpemUpXG4gXHRcdFx0ICAgICAgZXh0cmFfdGhyZWFkX2ZhdWx0cyk7XG4gfVxuIFxuLXZvaWQgemVyb3Bmbl90ZXN0cyh2b2lkKVxuK3N0YXRpYyB2b2lkIHplcm9wZm5fdGVzdHModm9pZClcbiB7XG4tXHR1bnNpZ25lZCBsb25nIGxvbmcgbWVtX3NpemU7XG4rXHRzaXplX3QgbWVtX3NpemUsIGk7XG4gXHRzdHJ1Y3QgcGFnZV9yZWdpb24gdmVjO1xuLVx0aW50IGksIHJldDtcbitcdGludCByZXQ7XG4gXHRjaGFyICptbWFwX21lbSwgKm1lbTtcbiBcbiBcdC8qIFRlc3Qgd2l0aCBub3JtYWwgbWVtb3J5ICovXG5AQCAtMTY0Miw4ICsxNjQ0LDggQEAgdm9pZCB6ZXJvcGZuX3Rlc3RzKHZvaWQpXG4gXG4gaW50IG1haW4oaW50IF9fYXR0cmlidXRlX18oKHVudXNlZCkpIGFyZ2MsIGNoYXIgKmFyZ3ZbXSlcbiB7XG4tXHRpbnQgc2htaWQsIGJ1Zl9zaXplLCBmZCwgaSwgcmV0O1xuLVx0dW5zaWduZWQgbG9uZyBsb25nIG1lbV9zaXplO1xuK1x0aW50IHNobWlkLCBmZCwgcmV0O1xuK1x0c2l6ZV90IG1lbV9zaXplLCBidWZfc2l6ZSwgaTtcbiBcdGNoYXIgKm1lbSwgKm1hcCwgKmZtZW07XG4gXHRzdHJ1Y3Qgc3RhdCBzYnVmO1xuIFxuQEAgLTE2NTEsNiArMTY1Myw5IEBAIGludCBtYWluKGludCBfX2F0dHJpYnV0ZV9fKCh1bnVzZWQpKSBhcmdjLCBjaGFyICphcmd2W10pXG4gXG4gXHRrc2Z0X3ByaW50X2hlYWRlcigpO1xuIFxuK1x0cGFnZV9zaXplID0gZ2V0cGFnZXNpemUoKTtcbitcdGhwYWdlX3NpemUgPSByZWFkX3BtZF9wYWdlc2l6ZSgpO1xuK1xuIFx0aWYgKGluaXRfdWZmZCgpKVxuIFx0XHRrc2Z0X2V4aXRfc2tpcChcIkZhaWxlZCB0byBpbml0aWFsaXplIHVzZXJmYXVsdGZkXFxuXCIpO1xuIFxuQEAgLTE2NTksOSArMTY2NCw2IEBAIGludCBtYWluKGludCBfX2F0dHJpYnV0ZV9fKCh1bnVzZWQpKSBhcmdjLCBjaGFyICphcmd2W10pXG4gXG4gXHRrc2Z0X3NldF9wbGFuKDExOSk7XG4gXG4tXHRwYWdlX3NpemUgPSBnZXRwYWdlc2l6ZSgpO1xuLVx0aHBhZ2Vfc2l6ZSA9IHJlYWRfcG1kX3BhZ2VzaXplKCk7XG4tXG4gXHRwYWdlbWFwX2ZkID0gb3BlbihQQUdFTUFQLCBPX1JET05MWSk7XG4gXHRpZiAocGFnZW1hcF9mZCBcdTAwM2MgMClcbiBcdFx0a3NmdF9leGl0X2ZhaWxfbXNnKFwiRmFpbGVkIHRvIG9wZW4gXCIgUEFHRU1BUCBcIlxcblwiKTtcbkBAIC0xODIxLDcgKzE4MjMsNyBAQCBpbnQgbWFpbihpbnQgX19hdHRyaWJ1dGVfXygodW51c2VkKSkgYXJnYywgY2hhciAqYXJndltdKVxuIFx0bXByb3RlY3RfdGVzdHMoKTtcbiBcbiBcdC8qIDEzLiBUcmFuc2FjdCB0ZXN0ICovXG4tXHR0cmFuc2FjdF90ZXN0KHBhZ2Vfc2l6ZSk7XG4rXHR0cmFuc2FjdF90ZXN0KCk7XG4gXG4gXHQvKiAxNC4gU2FuaXR5IHRlc3RpbmcgKi9cbiBcdHNhbml0eV90ZXN0cygpO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTY6NTM6MzUuODg2OTU5ODQ3WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NzA4MzkyNzg5MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gVGhlIHBhdGNoIGlzIHRvdWNoaW5nIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wYWdlbWFwX2lvY3RsLmNgLiBNeSBtaW5kIGltbWVkaWF0ZWx5IGdvZXMgdG8gdGhlIHJ1bGVzIOKAkyBzcGVjaWZpY2FsbHksIHdoZW4gd2UgY2FuIGNvbmZpZGVudGx5IHNheSBhIGNoYW5nZSAqaXNuJ3QqIHdvcnRoIGZ1enppbmcuIEkgbmVlZCB0byBtYWtlIHRoZSBjb3JyZWN0IGFzc2Vzc21lbnQgb2YgV29ydGhGdXp6aW5nLlxuXG5NeSBwcmltYXJ5IGZvY3VzIGlzIG9uIHNlY3Rpb24gMiBvZiB0aGUgY3JpdGVyaWEg4oCTIHRoZSAqbmVnYXRpdmUqIGNyaXRlcmlhLiBXZSdyZSBsb29raW5nIGZvciByZWFzb25zIHRvIHJ1bGUgdGhpcyBwYXRjaCAqb3V0KiBvZiBmdXp6aW5nIHNjb3BlLiBUaGUgcnVsZSBpcyBwcmV0dHkgY2xlYXI6IGlmIGFsbCB0aGUgbW9kaWZpZWQgY29kZSBzdHJpY3RseSBmYWxscyBpbnRvIHRoZSBjYXRlZ29yeSBvZiBcIk5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXMsIGxpa2UgdXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgb3Igc2NyaXB0cyB0aGF0ICpkb24ndCogYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLFwiIHRoZW4gd2UgcmV0dXJuIGBXb3J0aEZ1enppbmc9ZmFsc2VgLlxuXG5Ob3csIGxvb2tpbmcgYXQgdGhlIG1vZGlmaWVkIGZpbGUsIGl0J3MgdW5kZW5pYWJseSB3aXRoaW4gYHRvb2xzL2AsIHNwZWNpZmljYWxseSB1bmRlciBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vYC4gVGhpcyBpbW1lZGlhdGVseSBmbGFncyBpdCBhcyBhIHNlbGZ0ZXN0LCB3aGljaCwgYnkgZGVmaW5pdGlvbiwgaXMgdXNlci1zcGFjZSBjb2RlLiBUaGUgcGF0aCBhbG9uZSBpcyBwcmFjdGljYWxseSBhIGd1YXJhbnRlZSB0aGF0IGl0IGRvZXNuJ3QgdG91Y2ggdGhlIGtlcm5lbCBpbWFnZSBvciBtb2R1bGVzLiBJIG5lZWQgdG8gYmUgMTAwJSBzdXJlLCB0aG91Z2guIFNvLCBJJ20gY2hlY2tpbmcgdGhlIGRpZmYgYWdhaW4g4oCTIGp1c3QgdG8gYmUgY2VydGFpbi5cblxuWWVwLCB0aGUgZGlmZiBjb25maXJtcyBpdC4gVGhlICpvbmx5KiBjaGFuZ2UgaXMgdG8gYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3BhZ2VtYXBfaW9jdGwuY2AuIE5vdGhpbmcgZWxzZSBpcyBpbXBhY3RlZC5cblxuVGhlcmVmb3JlLCB0aGUgdmVyZGljdCBpcyBjbGVhcjogYFdvcnRoRnV6emluZzogZmFsc2VgLiBUaGVyZSBpcyBubyByZWFzb24gdG8gdGVzdCB0aGlzIGZpbGUgYXMgaXQgaXMgYSB1c2VyLXNwYWNlIHNlbGZ0ZXN0LCB3aGljaCBpcyBleGFjdGx5IHdoeSB0aGUgZmlsZSBpcyBzdG9yZWQgaW4gYHRvb2xzYC4gVGhlIHJ1bGVzIGFyZSBtZXQuIENvbnNlcXVlbnRseSwgYEVuYWJsZUNvbmZpZ3NgIGFuZCBgRm9jdXNTeW1ib2xzYCB3aWxsIGJlIGVtcHR5LCBhcyB0aGlzIGlzbid0IGtlcm5lbC1zcGFjZSBsb2dpYyB3ZSdyZSBpbnRlcmVzdGVkIGluIGZ1enppbmcuIFRoZSByZWFzb25pbmcgaXMgc29saWQ6IHNvbGVseSBtb2RpZmllcyBhIHVzZXItc3BhY2Ugc2VsZnRlc3QgYW5kIGhhcyBubyBiZWFyaW5nIG9uIHRoZSBrZXJuZWwgaW1hZ2Ugb3IgbW9kdWxlcy5cblxuQWxyaWdodCwgbGV0J3MgY2FsbCBgc2V0LXJlc3VsdHNgIGFuZCBtb3ZlIG9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2MjAwLCJPdXRwdXRUb2tlbnMiOjc0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzEwLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTY6NTM6NDIuOTcwODkxODZaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMwNzYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgdXNlci1zcGFjZSBzZWxmdGVzdCBjb2RlIGluIHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3BhZ2VtYXBfaW9jdGwuYywgd2hpY2ggZG9lcyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2Ugb3Iga2VybmVsLXNwYWNlIGxvZ2ljLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggb25seSBtb2RpZmllcyB1c2VyLXNwYWNlIHNlbGZ0ZXN0IGNvZGUgaW4gdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGFnZW1hcF9pb2N0bC5jLCB3aGljaCBkb2VzIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSBvciBrZXJuZWwtc3BhY2UgbG9naWMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQxNjo1Mzo0Mi45NzA5MjcyMloiLCJTZXEiOjUsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozODQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow7xgs8[1] Phase: Running StartedAt: 2026-09-08 16:53:54 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7xgs8[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-09-08 16:53:54 +0000 UTC FinishedAt: 2026-09-08 16:53:57 +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,}