Name: series-workflowmcbkj Phase: Succeeded StartedAt: 2026-07-23 22:03:55 +0000 UTC FinishedAt: 2026-07-24 02:59:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmcbkj[0] Phase: Succeeded StartedAt: 2026-07-23 22:03:55 +0000 UTC FinishedAt: 2026-07-23 22:39:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmcbkj[0].run-triage Phase: Succeeded StartedAt: 2026-07-23 22:03:55 +0000 UTC FinishedAt: 2026-07-23 22:39:26 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "bpf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git", "commit_hash": "cfce77b63375dac81d53f2f85593c548415206b7", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "bpf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git", "commit_hash": "cfce77b63375dac81d53f2f85593c548415206b7", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL" ], "series_id": "bc6e3bf0-4b8c-42d2-9d4d-c20e9acd5371" }, "track": "KASAN", "fuzz": { "focus": [ "bpf" ], "focus_symbols": [ "htab_map_alloc", "htab_map_update_elem", "htab_lru_map_update_elem", "__htab_lru_percpu_map_update_elem", "htab_map_delete_elem", "htab_lru_map_delete_elem", "__htab_map_lookup_and_delete_elem", "__htab_map_lookup_and_delete_batch", "bpf_map_meta_alloc", "htab_map_gen_lookup", "htab_lru_map_gen_lookup", "htab_percpu_map_gen_lookup", "htab_of_map_gen_lookup" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIzIDIyOjM4PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aHRhYl9tYXBfYWxsb2MmIzM0OywKICAgICYjMzQ7aHRhYl9tYXBfdXBkYXRlX2VsZW0mIzM0OywKICAgICYjMzQ7aHRhYl9scnVfbWFwX3VwZGF0ZV9lbGVtJiMzNDssCiAgICAmIzM0O19faHRhYl9scnVfcGVyY3B1X21hcF91cGRhdGVfZWxlbSYjMzQ7LAogICAgJiMzNDtodGFiX21hcF9kZWxldGVfZWxlbSYjMzQ7LAogICAgJiMzNDtodGFiX2xydV9tYXBfZGVsZXRlX2VsZW0mIzM0OywKICAgICYjMzQ7X19odGFiX21hcF9sb29rdXBfYW5kX2RlbGV0ZV9lbGVtJiMzNDssCiAgICAmIzM0O19faHRhYl9tYXBfbG9va3VwX2FuZF9kZWxldGVfYmF0Y2gmIzM0OywKICAgICYjMzQ7YnBmX21hcF9tZXRhX2FsbG9jJiMzNDssCiAgICAmIzM0O2h0YWJfbWFwX2dlbl9sb29rdXAmIzM0OywKICAgICYjMzQ7aHRhYl9scnVfbWFwX2dlbl9sb29rdXAmIzM0OywKICAgICYjMzQ7aHRhYl9wZXJjcHVfbWFwX2dlbl9sb29rdXAmIzM0OywKICAgICYjMzQ7aHRhYl9vZl9tYXBfZ2VuX2xvb2t1cCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmdW5jdGlvbmFsbHkgbW9kaWZpZXMgdGhlIG1lbW9yeSBsYXlvdXQgYW5kIG9wZXJhdGlvbnMgb2YgQlBGIGhhc2ggbWFwcyAoaW5jbHVkaW5nIExSVSBhbmQgcGVyLUNQVSB2YXJpYW50cykuIEl0IGludHJvZHVjZXMgbmV3IHN0cnVjdHVyZXMgYW5kIG9mZnNldHMgZm9yIGhhc2ggbWFwIGVsZW1lbnRzLCB3aGljaCBhZmZlY3RzIGFsbG9jYXRpb24sIHVwZGF0ZXMsIGRlbGV0aW9ucywgYW5kIEpJVCBsb29rdXAgZ2VuZXJhdGlvbi4gRnV6emluZyBpcyBuZWVkZWQgdG8gZW5zdXJlIG1lbW9yeSBzYWZldHkgYW5kIGNvcnJlY3RuZXNzIG9mIHRoZXNlIGNvcmUgQlBGIG1hcCBvcGVyYXRpb25zLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIzIDIyOjM4PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgMjQzYTI3MDY0MGUwZGM5MDFlNGE3OGI1OTliMDc0OGQ1OWJmN2I2M1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgSnVsIDIzIDIyOjM4OjQwIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvaGFzaHRhYi5jIGIva2VybmVsL2JwZi9oYXNodGFiLmNcbmluZGV4IDlmMzk0ZTFhYTJlODViLi5iOGMzMGQ0MDI5NTg3OSAxMDA2NDRcbi0tLSBhL2tlcm5lbC9icGYvaGFzaHRhYi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvYnBmL2hhc2h0YWIuY1xuQEAgLTEwMiw2ICYjNDM7MTAyLDcgQEAgc3RydWN0IGJwZl9odGFiIHtcbiBcdGJvb2wgdXNlX3BlcmNwdV9jb3VudGVyO1xuIFx0dTMyIG5fYnVja2V0cztcdC8qIG51bWJlciBvZiBoYXNoIGJ1Y2tldHMgKi9cbiBcdHUzMiBlbGVtX3NpemU7XHQvKiBzaXplIG9mIGVhY2ggZWxlbWVudCBpbiBieXRlcyAqL1xuJiM0MztcdHUzMiBrZXlfb2Zmc2V0O1x0Lyogb2Zmc2V0IG9mIGtleSBpbiBieXRlcyAqL1xuIFx0dTMyIGhhc2hybmQ7XG4gfTtcbiBcbkBAIC0xMTcsMTggJiM0MzsxMTgsNDYgQEAgc3RydWN0IGh0YWJfZWxlbSB7XG4gXHRcdFx0fTtcbiBcdFx0fTtcbiBcdH07XG4mIzQzO1x0dTMyIGhhc2g7IC8qIE9ubHkgd2hlbiBodGFiX2hhc19oYXNoKCkgKi9cbiYjNDM7fSBfX2FsaWduZWQoOCk7XG4mIzQzO1xuJiM0MztzdHJ1Y3QgaHRhYl9lbGVtX2xydSB7XG4gXHR1bmlvbiB7XG4tXHRcdC8qIHBvaW50ZXIgdG8gcGVyLWNwdSBwb2ludGVyICovXG4tXHRcdHZvaWQgKnB0cl90b19wcHRyO1xuLVx0XHRzdHJ1Y3QgYnBmX2xydV9ub2RlIGxydV9ub2RlO1xuJiM0MztcdFx0c3RydWN0IGhsaXN0X251bGxzX25vZGUgaGFzaF9ub2RlO1xuJiM0MztcdFx0c3RydWN0IHtcbiYjNDM7XHRcdFx0dm9pZCAqcGFkZGluZztcbiYjNDM7XHRcdFx0dW5pb24ge1xuJiM0MztcdFx0XHRcdHN0cnVjdCBwY3B1X2ZyZWVsaXN0X25vZGUgZm5vZGU7XG4mIzQzO1x0XHRcdFx0c3RydWN0IGh0YWJfZWxlbV9scnUgKmJhdGNoX2ZsaW5rO1xuJiM0MztcdFx0XHR9O1xuJiM0MztcdFx0fTtcbiBcdH07XG4mIzQzO1x0c3RydWN0IGJwZl9scnVfbm9kZSBscnVfbm9kZTtcbiBcdHUzMiBoYXNoO1xuLVx0Y2hhciBrZXlbXSBfX2FsaWduZWQoOCk7XG4tfTtcbiYjNDM7fSBfX2FsaWduZWQoOCk7XG4mIzQzO1xuJiM0MzsvKiBPbmx5IGZvciBub24tcHJlYWxsb2NhdGVkIFBDUFUgbWFwcy4gUHJlYWxsb2NhdGVkIFBDUFUgbWFwcyBkb24mIzM5O3QgbmVlZFxuJiM0MzsgKiBwdHJfdG9fcHB0ciwgYW5kIHVzZSBodGFiX2VsZW0uXG4mIzQzOyAqL1xuJiM0MztzdHJ1Y3QgaHRhYl9lbGVtX3BjcHUge1xuJiM0MztcdHVuaW9uIHtcbiYjNDM7XHRcdHN0cnVjdCBobGlzdF9udWxsc19ub2RlIGhhc2hfbm9kZTtcbiYjNDM7XHRcdHN0cnVjdCB7XG4mIzQzO1x0XHRcdHZvaWQgKnBhZGRpbmc7XG4mIzQzO1x0XHRcdHVuaW9uIHtcbiYjNDM7XHRcdFx0XHRzdHJ1Y3QgcGNwdV9mcmVlbGlzdF9ub2RlIGZub2RlO1xuJiM0MztcdFx0XHRcdHN0cnVjdCBodGFiX2VsZW1fcGNwdSAqYmF0Y2hfZmxpbms7XG4mIzQzO1x0XHRcdH07XG4mIzQzO1x0XHR9O1xuJiM0MztcdH07XG4mIzQzO1x0dm9pZCAqcHRyX3RvX3BwdHI7XG4mIzQzO1x0dTMyIGhhc2g7IC8qIE9ubHkgd2hlbiBodGFiX2hhc19oYXNoKCkgKi9cbiYjNDM7fSBfX2FsaWduZWQoOCk7XG4gXG4gc3RydWN0IGh0YWJfYnRmX3JlY29yZCB7XG4gXHRzdHJ1Y3QgYnRmX3JlY29yZCAqcmVjb3JkO1xuIFx0dTMyIGtleV9zaXplO1xuJiM0MztcdHUzMiBrZXlfb2Zmc2V0O1xuIH07XG4gXG4gc3RhdGljIGlubGluZSBib29sIGh0YWJfaXNfcHJlYWxsb2MoY29uc3Qgc3RydWN0IGJwZl9odGFiICpodGFiKVxuQEAgLTEzNiw2ICYjNDM7MTY1LDIxIEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBodGFiX2lzX3ByZWFsbG9jKGNvbnN0IHN0cnVjdCBicGZfaHRhYiAqaHRhYilcbiBcdHJldHVybiAhKGh0YWItXHUwMDNlbWFwLm1hcF9mbGFncyBcdTAwMjYgQlBGX0ZfTk9fUFJFQUxMT0MpO1xuIH1cbiBcbiYjNDM7c3RhdGljIGlubGluZSBzdHJ1Y3QgYnBmX2xydV9ub2RlICpodGFiX2VsZW1fbHJ1X25vZGUoc3RydWN0IGh0YWJfZWxlbSAqbClcbiYjNDM7e1xuJiM0MztcdHJldHVybiBcdTAwMjYoKHN0cnVjdCBodGFiX2VsZW1fbHJ1ICopbCktXHUwMDNlbHJ1X25vZGU7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCAqaHRhYl9lbGVtX2dldF9wdHJfdG9fcHB0cihzdHJ1Y3QgaHRhYl9lbGVtICpsKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuICgoc3RydWN0IGh0YWJfZWxlbV9wY3B1ICopbCktXHUwMDNlcHRyX3RvX3BwdHI7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBodGFiX2VsZW1fc2V0X3B0cl90b19wcHRyKHN0cnVjdCBodGFiX2VsZW0gKmwsIHZvaWQgKnB0cilcbiYjNDM7e1xuJiM0MztcdCgoc3RydWN0IGh0YWJfZWxlbV9wY3B1ICopbCktXHUwMDNlcHRyX3RvX3BwdHIgPSBwdHI7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIHZvaWQgaHRhYl9pbml0X2J1Y2tldHMoc3RydWN0IGJwZl9odGFiICpodGFiKVxuIHtcbiBcdHVuc2lnbmVkIGludCBpO1xuQEAgLTE4MywyNSAmIzQzOzIyNywzMCBAQCBzdGF0aWMgaW5saW5lIGJvb2wgaXNfZmRfaHRhYihjb25zdCBzdHJ1Y3QgYnBmX2h0YWIgKmh0YWIpXG4gXHRyZXR1cm4gaHRhYi1cdTAwM2VtYXAubWFwX3R5cGUgPT0gQlBGX01BUF9UWVBFX0hBU0hfT0ZfTUFQUztcbiB9XG4gXG4tc3RhdGljIGlubGluZSB2b2lkICpodGFiX2VsZW1fdmFsdWUoc3RydWN0IGh0YWJfZWxlbSAqbCwgdTMyIGtleV9zaXplKVxuJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgKmh0YWJfZWxlbV9rZXkoc3RydWN0IGJwZl9odGFiICpodGFiLCBzdHJ1Y3QgaHRhYl9lbGVtICpsKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuICh2b2lkICopbCAmIzQzOyBodGFiLVx1MDAzZWtleV9vZmZzZXQ7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCAqaHRhYl9lbGVtX3ZhbHVlKHN0cnVjdCBicGZfaHRhYiAqaHRhYiwgc3RydWN0IGh0YWJfZWxlbSAqbClcbiB7XG4tXHRyZXR1cm4gbC1cdTAwM2VrZXkgJiM0Mzsgcm91bmRfdXAoa2V5X3NpemUsIDgpO1xuJiM0MztcdHJldHVybiBodGFiX2VsZW1fa2V5KGh0YWIsIGwpICYjNDM7IHJvdW5kX3VwKGh0YWItXHUwMDNlbWFwLmtleV9zaXplLCA4KTtcbiB9XG4gXG4tc3RhdGljIGlubGluZSB2b2lkIGh0YWJfZWxlbV9zZXRfcHRyKHN0cnVjdCBodGFiX2VsZW0gKmwsIHUzMiBrZXlfc2l6ZSxcbiYjNDM7c3RhdGljIGlubGluZSB2b2lkIGh0YWJfZWxlbV9zZXRfcHRyKHN0cnVjdCBicGZfaHRhYiAqaHRhYiwgc3RydWN0IGh0YWJfZWxlbSAqbCxcbiBcdFx0XHRcdCAgICAgdm9pZCBfX3BlcmNwdSAqcHB0cilcbiB7XG4tXHQqKHZvaWQgX19wZXJjcHUgKiopaHRhYl9lbGVtX3ZhbHVlKGwsIGtleV9zaXplKSA9IHBwdHI7XG4mIzQzO1x0Kih2b2lkIF9fcGVyY3B1ICoqKWh0YWJfZWxlbV92YWx1ZShodGFiLCBsKSA9IHBwdHI7XG4gfVxuIFxuLXN0YXRpYyBpbmxpbmUgdm9pZCBfX3BlcmNwdSAqaHRhYl9lbGVtX2dldF9wdHIoc3RydWN0IGh0YWJfZWxlbSAqbCwgdTMyIGtleV9zaXplKVxuJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgX19wZXJjcHUgKmh0YWJfZWxlbV9nZXRfcHRyKHN0cnVjdCBicGZfaHRhYiAqaHRhYiwgc3RydWN0IGh0YWJfZWxlbSAqbClcbiB7XG4tXHRyZXR1cm4gKih2b2lkIF9fcGVyY3B1ICoqKWh0YWJfZWxlbV92YWx1ZShsLCBrZXlfc2l6ZSk7XG4mIzQzO1x0cmV0dXJuICoodm9pZCBfX3BlcmNwdSAqKilodGFiX2VsZW1fdmFsdWUoaHRhYiwgbCk7XG4gfVxuIFxuLXN0YXRpYyB2b2lkICpmZF9odGFiX21hcF9nZXRfcHRyKGNvbnN0IHN0cnVjdCBicGZfbWFwICptYXAsIHN0cnVjdCBodGFiX2VsZW0gKmwpXG4mIzQzO3N0YXRpYyB2b2lkICpmZF9odGFiX21hcF9nZXRfcHRyKHN0cnVjdCBicGZfaHRhYiAqaHRhYiwgc3RydWN0IGh0YWJfZWxlbSAqbClcbiB7XG4tXHRyZXR1cm4gKih2b2lkICoqKWh0YWJfZWxlbV92YWx1ZShsLCBtYXAtXHUwMDNla2V5X3NpemUpO1xuJiM0MztcdHJldHVybiAqKHZvaWQgKiopaHRhYl9lbGVtX3ZhbHVlKGh0YWIsIGwpO1xuIH1cbiBcbiBzdGF0aWMgc3RydWN0IGh0YWJfZWxlbSAqZ2V0X2h0YWJfZWxlbShzdHJ1Y3QgYnBmX2h0YWIgKmh0YWIsIGludCBpKVxuQEAgLTIwOSw2ICYjNDM7MjU4LDMzIEBAIHN0YXRpYyBzdHJ1Y3QgaHRhYl9lbGVtICpnZXRfaHRhYl9lbGVtKHN0cnVjdCBicGZfaHRhYiAqaHRhYiwgaW50IGkpXG4gXHRyZXR1cm4gKHN0cnVjdCBodGFiX2VsZW0gKikgKGh0YWItXHUwMDNlZWxlbXMgJiM0MzsgaSAqICh1NjQpaHRhYi1cdTAwM2VlbGVtX3NpemUpO1xuIH1cbiBcbiYjNDM7c3RhdGljIGlubGluZSBib29sIGh0YWJfaGFzX2hhc2goY29uc3Qgc3RydWN0IGJwZl9odGFiICpodGFiKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIGh0YWJfaXNfbHJ1KGh0YWIpIHx8IGh0YWItXHUwMDNlbWFwLmtleV9zaXplIFx1MDAzZSA4O1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW5saW5lIHUzMiBodGFiX2VsZW1faGFzaChzdHJ1Y3QgYnBmX2h0YWIgKmh0YWIsIHN0cnVjdCBodGFiX2VsZW0gKmwpXG4mIzQzO3tcbiYjNDM7XHRpZiAoaHRhYl9pc19scnUoaHRhYikpXG4mIzQzO1x0XHRyZXR1cm4gKChzdHJ1Y3QgaHRhYl9lbGVtX2xydSAqKWwpLVx1MDAzZWhhc2g7XG4mIzQzO1x0ZWxzZSBpZiAoaHRhYl9pc19wZXJjcHUoaHRhYikgXHUwMDI2XHUwMDI2ICFodGFiX2lzX3ByZWFsbG9jKGh0YWIpKVxuJiM0MztcdFx0cmV0dXJuICgoc3RydWN0IGh0YWJfZWxlbV9wY3B1ICopbCktXHUwMDNlaGFzaDtcbiYjNDM7XHRlbHNlXG4mIzQzO1x0XHRyZXR1cm4gbC1cdTAwM2VoYXNoO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgaHRhYl9lbGVtX3NldF9oYXNoKHN0cnVjdCBicGZfaHRhYiAqaHRhYiwgc3RydWN0IGh0YWJfZWxlbSAqbCwgdTMyIGhhc2gpXG4mIzQzO3tcbiYjNDM7XHRpZiAoIWh0YWJfaGFzX2hhc2goaHRhYikpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1x0aWYgKGh0YWJfaXNfbHJ1KGh0YWIpKVxuJiM0MztcdFx0KChzdHJ1Y3QgaHRhYl9lbGVtX2xydSAqKWwpLVx1MDAzZWhhc2ggPSBoYXNoO1xuJiM0MztcdGVsc2UgaWYgKGh0YWJfaXNfcGVyY3B1KGh0YWIpIFx1MDAyNlx1MDAyNiAhaHRhYl9pc19wcmVhbGxvYyhodGFiKSlcbiYjNDM7XHRcdCgoc3RydWN0IGh0YWJfZWxlbV9wY3B1ICopbCktXHUwMDNlaGFzaCA9IGhhc2g7XG4mIzQzO1x0ZWxzZVxuJiM0MztcdFx0bC1cdTAwM2VoYXNoID0gaGFzaDtcbiYjNDM7fVxuJiM0MztcbiAvKiBCb3RoIHBlcmNwdSBhbmQgZmQgaHRhYiBzdXBwb3J0IGluLXBsYWNlIHVwZGF0ZSwgc28gbm8gbmVlZCBmb3JcbiAgKiBleHRyYSBlbGVtLiBMUlUgaXRzZWxmIGNhbiByZW1vdmUgdGhlIGxlYXN0IHVzZWQgZWxlbWVudCwgc29cbiAgKiB0aGVyZSBpcyBubyBuZWVkIGZvciBhbiBleHRyYSBlbGVtIGR1cmluZyBtYXBfdXBkYXRlLlxuQEAgLTIzMSw3ICYjNDM7MzA3LDcgQEAgc3RhdGljIHZvaWQgaHRhYl9mcmVlX3ByZWFsbG9jZWRfaW50ZXJuYWxfc3RydWN0cyhzdHJ1Y3QgYnBmX2h0YWIgKmh0YWIpXG4gXG4gXHRcdGVsZW0gPSBnZXRfaHRhYl9lbGVtKGh0YWIsIGkpO1xuIFx0XHRicGZfbWFwX2ZyZWVfaW50ZXJuYWxfc3RydWN0cyhcdTAwMjZodGFiLVx1MDAzZW1hcCxcbi1cdFx0XHRcdFx0ICAgICAgaHRhYl9lbGVtX3ZhbHVlKGVsZW0sIGh0YWItXHUwMDNlbWFwLmtleV9zaXplKSk7XG4mIzQzO1x0XHRcdFx0XHQgICAgICBodGFiX2VsZW1fdmFsdWUoaHRhYiwgZWxlbSkpO1xuIFx0XHRjb25kX3Jlc2NoZWQoKTtcbiBcdH1cbiB9XG5AQCAtMjU0LDcgJiM0MzszMzAsNyBAQCBzdGF0aWMgdm9pZCBodGFiX2ZyZWVfcHJlYWxsb2NlZF9maWVsZHMoc3RydWN0IGJwZl9odGFiICpodGFiKVxuIFxuIFx0XHRlbGVtID0gZ2V0X2h0YWJfZWxlbShodGFiLCBpKTtcbiBcdFx0aWYgKGh0YWJfaXNfcGVyY3B1KGh0YWIpKSB7XG4tXHRcdFx0dm9pZCBfX3BlcmNwdSAqcHB0ciA9IGh0YWJfZWxlbV9nZXRfcHRyKGVsZW0sIGh0YWItXHUwMDNlbWFwLmtleV9zaXplKTtcbiYjNDM7XHRcdFx0dm9pZCBfX3BlcmNwdSAqcHB0ciA9IGh0YWJfZWxlbV9nZXRfcHRyKGh0YWIsIGVsZW0pO1xuIFx0XHRcdGludCBjcHU7XG4gXG4gXHRcdFx0Zm9yX2VhY2hfcG9zc2libGVfY3B1KGNwdSkge1xuQEAgLTI2Myw3ICYjNDM7MzM5LDcgQEAgc3RhdGljIHZvaWQgaHRhYl9mcmVlX3ByZWFsbG9jZWRfZmllbGRzKHN0cnVjdCBicGZfaHRhYiAqaHRhYilcbiBcdFx0XHR9XG4gXHRcdH0gZWxzZSB7XG4gXHRcdFx0YnBmX29ial9mcmVlX2ZpZWxkcyhodGFiLVx1MDAzZW1hcC5yZWNvcmQsXG4tXHRcdFx0XHRcdCAgICBodGFiX2VsZW1fdmFsdWUoZWxlbSwgaHRhYi1cdTAwM2VtYXAua2V5X3NpemUpKTtcbiYjNDM7XHRcdFx0XHRcdCAgICBodGFiX2VsZW1fdmFsdWUoaHRhYiwgZWxlbSkpO1xuIFx0XHRcdGNvbmRfcmVzY2hlZCgpO1xuIFx0XHR9XG4gXHRcdGNvbmRfcmVzY2hlZCgpO1xuQEAgLTI4MCw4ICYjNDM7MzU2LDcgQEAgc3RhdGljIHZvaWQgaHRhYl9mcmVlX2VsZW1zKHN0cnVjdCBicGZfaHRhYiAqaHRhYilcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGh0YWItXHUwMDNlbWFwLm1heF9lbnRyaWVzOyBpJiM0MzsmIzQzOykge1xuIFx0XHR2b2lkIF9fcGVyY3B1ICpwcHRyO1xuIFxuLVx0XHRwcHRyID0gaHRhYl9lbGVtX2dldF9wdHIoZ2V0X2h0YWJfZWxlbShodGFiLCBpKSxcbi1cdFx0XHRcdFx0IGh0YWItXHUwMDNlbWFwLmtleV9zaXplKTtcbiYjNDM7XHRcdHBwdHIgPSBodGFiX2VsZW1fZ2V0X3B0cihodGFiLCBnZXRfaHRhYl9lbGVtKGh0YWIsIGkpKTtcbiBcdFx0ZnJlZV9wZXJjcHUocHB0cik7XG4gXHRcdGNvbmRfcmVzY2hlZCgpO1xuIFx0fVxuQEAgLTMwOCw4ICYjNDM7MzgzLDggQEAgc3RhdGljIHN0cnVjdCBodGFiX2VsZW0gKnByZWFsbG9jX2xydV9wb3Aoc3RydWN0IGJwZl9odGFiICpodGFiLCB2b2lkICprZXksXG4gXG4gXHRpZiAobm9kZSkge1xuIFx0XHRicGZfbWFwX2luY19lbGVtX2NvdW50KFx1MDAyNmh0YWItXHUwMDNlbWFwKTtcbi1cdFx0bCA9IGNvbnRhaW5lcl9vZihub2RlLCBzdHJ1Y3QgaHRhYl9lbGVtLCBscnVfbm9kZSk7XG4tXHRcdG1lbWNweShsLVx1MDAzZWtleSwga2V5LCBodGFiLVx1MDAzZW1hcC5rZXlfc2l6ZSk7XG4mIzQzO1x0XHRsID0gKHN0cnVjdCBodGFiX2VsZW0gKiljb250YWluZXJfb2Yobm9kZSwgc3RydWN0IGh0YWJfZWxlbV9scnUsIGxydV9ub2RlKTtcbiYjNDM7XHRcdG1lbWNweShodGFiX2VsZW1fa2V5KGh0YWIsIGwpLCBrZXksIGh0YWItXHUwMDNlbWFwLmtleV9zaXplKTtcbiBcdFx0cmV0dXJuIGw7XG4gXHR9XG4gXG5AQCAtMzQwLDggJiM0Mzs0MTUsNyBAQCBzdGF0aWMgaW50IHByZWFsbG9jX2luaXQoc3RydWN0IGJwZl9odGFiICpodGFiKVxuIFx0XHRcdFx0XHQgICAgR0ZQX1VTRVIgfCBfX0dGUF9OT1dBUk4pO1xuIFx0XHRpZiAoIXBwdHIpXG4gXHRcdFx0Z290byBmcmVlX2VsZW1zO1xuLVx0XHRodGFiX2VsZW1fc2V0X3B0cihnZXRfaHRhYl9lbGVtKGh0YWIsIGkpLCBodGFiLVx1MDAzZW1hcC5rZXlfc2l6ZSxcbi1cdFx0XHRcdCAgcHB0cik7XG4mIzQzO1x0XHRodGFiX2VsZW1fc2V0X3B0cihodGFiLCBnZXRfaHRhYl9lbGVtKGh0YWIsIGkpLCBwcHRyKTtcbiBcdFx0Y29uZF9yZXNjaGVkKCk7XG4gXHR9XG4gXG5AQCAtMzQ5LDggJiM0Mzs0MjMsOCBAQCBzdGF0aWMgaW50IHByZWFsbG9jX2luaXQoc3RydWN0IGJwZl9odGFiICpodGFiKVxuIFx0aWYgKGh0YWJfaXNfbHJ1KGh0YWIpKVxuIFx0XHRlcnIgPSBicGZfbHJ1X2luaXQoXHUwMDI2aHRhYi1cdTAwM2VscnUsXG4gXHRcdFx0XHQgICBodGFiLVx1MDAzZW1hcC5tYXBfZmxhZ3MgXHUwMDI2IEJQRl9GX05PX0NPTU1PTl9MUlUsXG4tXHRcdFx0XHQgICBvZmZzZXRvZihzdHJ1Y3QgaHRhYl9lbGVtLCBoYXNoKSAtXG4tXHRcdFx0XHQgICBvZmZzZXRvZihzdHJ1Y3QgaHRhYl9lbGVtLCBscnVfbm9kZSksXG4mIzQzO1x0XHRcdFx0ICAgb2Zmc2V0b2Yoc3RydWN0IGh0YWJfZWxlbV9scnUsIGhhc2gpIC1cbiYjNDM7XHRcdFx0XHQgICBvZmZzZXRvZihzdHJ1Y3QgaHRhYl9lbGVtX2xydSwgbHJ1X25vZGUpLFxuIFx0XHRcdFx0ICAgaHRhYl9scnVfbWFwX2RlbGV0ZV9ub2RlLFxuIFx0XHRcdFx0ICAgaHRhYik7XG4gXHRlbHNlXG5AQCAtMzYxLDcgJiM0Mzs0MzUsNyBAQCBzdGF0aWMgaW50IHByZWFsbG9jX2luaXQoc3RydWN0IGJwZl9odGFiICpodGFiKVxuIFxuIFx0aWYgKGh0YWJfaXNfbHJ1KGh0YWIpKVxuIFx0XHRicGZfbHJ1X3BvcHVsYXRlKFx1MDAyNmh0YWItXHUwMDNlbHJ1LCBodGFiLVx1MDAzZWVsZW1zLFxuLVx0XHRcdFx0IG9mZnNldG9mKHN0cnVjdCBodGFiX2VsZW0sIGxydV9ub2RlKSxcbiYjNDM7XHRcdFx0XHQgb2Zmc2V0b2Yoc3RydWN0IGh0YWJfZWxlbV9scnUsIGxydV9ub2RlKSxcbiBcdFx0XHRcdCBodGFiLVx1MDAzZWVsZW1fc2l6ZSwgbnVtX2VudHJpZXMpO1xuIFx0ZWxzZVxuIFx0XHRwY3B1X2ZyZWVsaXN0X3BvcHVsYXRlKFx1MDAyNmh0YWItXHUwMDNlZnJlZWxpc3QsXG5AQCAtNDI4LDYgJiM0Mzs1MDIsMjUgQEAgc3RhdGljIGludCBodGFiX21hcF9hbGxvY19jaGVjayh1bmlvbiBicGZfYXR0ciAqYXR0cilcbiBcdEJVSUxEX0JVR19PTihvZmZzZXRvZihzdHJ1Y3QgaHRhYl9lbGVtLCBmbm9kZS5uZXh0KSAhPVxuIFx0XHQgICAgIG9mZnNldG9mKHN0cnVjdCBodGFiX2VsZW0sIGhhc2hfbm9kZS5wcHJldikpO1xuIFxuJiM0MztcdC8qIGh0YWJfZWxlbSBwb2ludGVycyBhcmUgdXNlZCBhcyBiYXNlIHBvaW50ZXJzIGZvciBodGFiX2VsZW1fbHJ1IGFuZFxuJiM0MztcdCAqIGh0YWJfZWxlbV9wY3B1LiBUaGVzZSBzdHJ1Y3R1cmVzIG11c3Qgc2hhcmUgYSBjb21tb24gaW5pdGlhbCBzZXF1ZW5jZVxuJiM0MztcdCAqIHRvIGVuc3VyZSBwb2ludGVyIGNhc3RpbmcgYmV0d2VlbiB0aGVtIGlzIHNhZmUuXG4mIzQzO1x0ICovXG4mIzQzO1x0QlVJTERfQlVHX09OKG9mZnNldG9mKHN0cnVjdCBodGFiX2VsZW0sIGhhc2hfbm9kZSkgIT1cbiYjNDM7XHRcdCAgICAgb2Zmc2V0b2Yoc3RydWN0IGh0YWJfZWxlbV9scnUsIGhhc2hfbm9kZSkpO1xuJiM0MztcdEJVSUxEX0JVR19PTihvZmZzZXRvZihzdHJ1Y3QgaHRhYl9lbGVtLCBoYXNoX25vZGUpICE9XG4mIzQzO1x0XHQgICAgIG9mZnNldG9mKHN0cnVjdCBodGFiX2VsZW1fcGNwdSwgaGFzaF9ub2RlKSk7XG4mIzQzO1xuJiM0MztcdEJVSUxEX0JVR19PTihvZmZzZXRvZihzdHJ1Y3QgaHRhYl9lbGVtLCBwYWRkaW5nKSAhPVxuJiM0MztcdFx0ICAgICBvZmZzZXRvZihzdHJ1Y3QgaHRhYl9lbGVtX2xydSwgcGFkZGluZykpO1xuJiM0MztcdEJVSUxEX0JVR19PTihvZmZzZXRvZihzdHJ1Y3QgaHRhYl9lbGVtLCBwYWRkaW5nKSAhPVxuJiM0MztcdFx0ICAgICBvZmZzZXRvZihzdHJ1Y3QgaHRhYl9lbGVtX3BjcHUsIHBhZGRpbmcpKTtcbiYjNDM7XG4mIzQzO1x0QlVJTERfQlVHX09OKG9mZnNldG9mKHN0cnVjdCBodGFiX2VsZW0sIGZub2RlKSAhPVxuJiM0MztcdFx0ICAgICBvZmZzZXRvZihzdHJ1Y3QgaHRhYl9lbGVtX2xydSwgZm5vZGUpKTtcbiYjNDM7XHRCVUlMRF9CVUdfT04ob2Zmc2V0b2Yoc3RydWN0IGh0YWJfZWxlbSwgZm5vZGUpICE9XG4mIzQzO1x0XHQgICAgIG9mZnNldG9mKHN0cnVjdCBodGFiX2VsZW1fcGNwdSwgZm5vZGUpKTtcbiYjNDM7XG4gXHRpZiAoemVyb19zZWVkIFx1MDAyNlx1MDAyNiAhY2FwYWJsZShDQVBfU1lTX0FETUlOKSlcbiBcdFx0LyogR3VhcmQgYWdhaW5zdCBsb2NhbCBEb1MsIGFuZCBkaXNjb3VyYWdlIHByb2R1Y3Rpb24gdXNlLiAqL1xuIFx0XHRyZXR1cm4gLUVQRVJNO1xuQEAgLTQ3Niw3ICYjNDM7NTY5LDcgQEAgc3RhdGljIHZvaWQgaHRhYl9tZW1fZHRvcih2b2lkICpvYmosIHZvaWQgKmN0eClcbiBcdGlmIChJU19FUlJfT1JfTlVMTChocmVjLVx1MDAzZXJlY29yZCkpXG4gXHRcdHJldHVybjtcbiBcbi1cdG1hcF92YWx1ZSA9IGh0YWJfZWxlbV92YWx1ZShlbGVtLCBocmVjLVx1MDAzZWtleV9zaXplKTtcbiYjNDM7XHRtYXBfdmFsdWUgPSAodm9pZCAqKWVsZW0gJiM0MzsgaHJlYy1cdTAwM2VrZXlfb2Zmc2V0ICYjNDM7IHJvdW5kX3VwKGhyZWMtXHUwMDNla2V5X3NpemUsIDgpO1xuIFx0YnBmX29ial9mcmVlX2ZpZWxkcyhocmVjLVx1MDAzZXJlY29yZCwgbWFwX3ZhbHVlKTtcbiB9XG4gXG5AQCAtNTAyLDcgJiM0Mzs1OTUsNyBAQCBzdGF0aWMgdm9pZCBodGFiX2R0b3JfY3R4X2ZyZWUodm9pZCAqY3R4KVxuIH1cbiBcbiBzdGF0aWMgaW50IGJwZl9tYV9zZXRfZHRvcihzdHJ1Y3QgYnBmX21hcCAqbWFwLCBzdHJ1Y3QgYnBmX21lbV9hbGxvYyAqbWEsXG4tXHRcdFx0ICAgdm9pZCAoKmR0b3IpKHZvaWQgKiwgdm9pZCAqKSlcbiYjNDM7XHRcdFx0ICAgdm9pZCAoKmR0b3IpKHZvaWQgKiwgdm9pZCAqKSwgdTMyIGtleV9vZmZzZXQpXG4ge1xuIFx0c3RydWN0IGh0YWJfYnRmX3JlY29yZCAqaHJlYztcbiBcdGludCBlcnI7XG5AQCAtNTE1LDYgJiM0Mzs2MDgsNyBAQCBzdGF0aWMgaW50IGJwZl9tYV9zZXRfZHRvcihzdHJ1Y3QgYnBmX21hcCAqbWFwLCBzdHJ1Y3QgYnBmX21lbV9hbGxvYyAqbWEsXG4gXHRpZiAoIWhyZWMpXG4gXHRcdHJldHVybiAtRU5PTUVNO1xuIFx0aHJlYy1cdTAwM2VrZXlfc2l6ZSA9IG1hcC1cdTAwM2VrZXlfc2l6ZTtcbiYjNDM7XHRocmVjLVx1MDAzZWtleV9vZmZzZXQgPSBrZXlfb2Zmc2V0O1xuIFx0aHJlYy1cdTAwM2VyZWNvcmQgPSBidGZfcmVjb3JkX2R1cChtYXAtXHUwMDNlcmVjb3JkKTtcbiBcdGlmIChJU19FUlIoaHJlYy1cdTAwM2VyZWNvcmQpKSB7XG4gXHRcdGVyciA9IFBUUl9FUlIoaHJlYy1cdTAwM2VyZWNvcmQpO1xuQEAgLTUzNyw5ICYjNDM7NjMxLDkgQEAgc3RhdGljIGludCBodGFiX21hcF9jaGVja19idGYoc3RydWN0IGJwZl9tYXAgKm1hcCwgY29uc3Qgc3RydWN0IGJ0ZiAqYnRmLFxuIFx0ICogcG9wdWxhdGVkIGluIGh0YWJfbWFwX2FsbG9jKCksIHNvIGl0IHdpbGwgYWx3YXlzIGFwcGVhciBhcyBOVUxMLlxuIFx0ICovXG4gXHRpZiAoaHRhYl9pc19wZXJjcHUoaHRhYikpXG4tXHRcdHJldHVybiBicGZfbWFfc2V0X2R0b3IobWFwLCBcdTAwMjZodGFiLVx1MDAzZXBjcHVfbWEsIGh0YWJfcGNwdV9tZW1fZHRvcik7XG4mIzQzO1x0XHRyZXR1cm4gYnBmX21hX3NldF9kdG9yKG1hcCwgXHUwMDI2aHRhYi1cdTAwM2VwY3B1X21hLCBodGFiX3BjcHVfbWVtX2R0b3IsIGh0YWItXHUwMDNla2V5X29mZnNldCk7XG4gXHRlbHNlXG4tXHRcdHJldHVybiBicGZfbWFfc2V0X2R0b3IobWFwLCBcdTAwMjZodGFiLVx1MDAzZW1hLCBodGFiX21lbV9kdG9yKTtcbiYjNDM7XHRcdHJldHVybiBicGZfbWFfc2V0X2R0b3IobWFwLCBcdTAwMjZodGFiLVx1MDAzZW1hLCBodGFiX21lbV9kdG9yLCBodGFiLVx1MDAzZWtleV9vZmZzZXQpO1xuIH1cbiBcbiBzdGF0aWMgc3RydWN0IGJwZl9tYXAgKmh0YWJfbWFwX2FsbG9jKHVuaW9uIGJwZl9hdHRyICphdHRyKVxuQEAgLTU4Myw4ICYjNDM7Njc3LDE4IEBAIHN0YXRpYyBzdHJ1Y3QgYnBmX21hcCAqaHRhYl9tYXBfYWxsb2ModW5pb24gYnBmX2F0dHIgKmF0dHIpXG4gXG4gXHRodGFiLVx1MDAzZW5fYnVja2V0cyA9IHJvdW5kdXBfcG93X29mX3R3byhodGFiLVx1MDAzZW1hcC5tYXhfZW50cmllcyk7XG4gXG4tXHRodGFiLVx1MDAzZWVsZW1fc2l6ZSA9IHNpemVvZihzdHJ1Y3QgaHRhYl9lbGVtKSAmIzQzO1xuLVx0XHRcdCAgcm91bmRfdXAoaHRhYi1cdTAwM2VtYXAua2V5X3NpemUsIDgpO1xuJiM0MztcdGlmIChodGFiX2lzX2xydShodGFiKSlcbiYjNDM7XHRcdGh0YWItXHUwMDNla2V5X29mZnNldCA9IHNpemVvZihzdHJ1Y3QgaHRhYl9lbGVtX2xydSk7XG4mIzQzO1x0ZWxzZSBpZiAocGVyY3B1IFx1MDAyNlx1MDAyNiAhcHJlYWxsb2MpXG4mIzQzO1x0XHRodGFiLVx1MDAzZWtleV9vZmZzZXQgPSByb3VuZF91cChodGFiX2hhc19oYXNoKGh0YWIpID9cbiYjNDM7XHRcdFx0XHRcdCAgICBzaXplb2Yoc3RydWN0IGh0YWJfZWxlbV9wY3B1KSA6XG4mIzQzO1x0XHRcdFx0XHQgICAgb2Zmc2V0b2Yoc3RydWN0IGh0YWJfZWxlbV9wY3B1LCBoYXNoKSwgOCk7XG4mIzQzO1x0ZWxzZVxuJiM0MztcdFx0aHRhYi1cdTAwM2VrZXlfb2Zmc2V0ID0gcm91bmRfdXAoaHRhYl9oYXNfaGFzaChodGFiKSA/XG4mIzQzO1x0XHRcdFx0XHQgICAgc2l6ZW9mKHN0cnVjdCBodGFiX2VsZW0pIDpcbiYjNDM7XHRcdFx0XHRcdCAgICBvZmZzZXRvZihzdHJ1Y3QgaHRhYl9lbGVtLCBoYXNoKSwgOCk7XG4mIzQzO1xuJiM0MztcdGh0YWItXHUwMDNlZWxlbV9zaXplID0gaHRhYi1cdTAwM2VrZXlfb2Zmc2V0ICYjNDM7IHJvdW5kX3VwKGh0YWItXHUwMDNlbWFwLmtleV9zaXplLCA4KTtcbiBcdGlmIChwZXJjcHUpXG4gXHRcdGh0YWItXHUwMDNlZWxlbV9zaXplICYjNDM7PSBzaXplb2Yodm9pZCAqKTtcbiBcdGVsc2VcbkBAIC02OTIsMTQgJiM0Mzs3OTYsMTYgQEAgc3RhdGljIGlubGluZSBzdHJ1Y3QgaGxpc3RfbnVsbHNfaGVhZCAqc2VsZWN0X2J1Y2tldChzdHJ1Y3QgYnBmX2h0YWIgKmh0YWIsIHUzMlxuIH1cbiBcbiAvKiB0aGlzIGxvb2t1cCBmdW5jdGlvbiBjYW4gb25seSBiZSBjYWxsZWQgd2l0aCBidWNrZXQgbG9jayB0YWtlbiAqL1xuLXN0YXRpYyBzdHJ1Y3QgaHRhYl9lbGVtICpsb29rdXBfZWxlbV9yYXcoc3RydWN0IGhsaXN0X251bGxzX2hlYWQgKmhlYWQsIHUzMiBoYXNoLFxuJiM0MztzdGF0aWMgc3RydWN0IGh0YWJfZWxlbSAqbG9va3VwX2VsZW1fcmF3KHN0cnVjdCBicGZfaHRhYiAqaHRhYixcbiYjNDM7XHRcdFx0XHRcdCBzdHJ1Y3QgaGxpc3RfbnVsbHNfaGVhZCAqaGVhZCwgdTMyIGhhc2gsXG4gXHRcdFx0XHRcdCB2b2lkICprZXksIHUzMiBrZXlfc2l6ZSlcbiB7XG4gXHRzdHJ1Y3QgaGxpc3RfbnVsbHNfbm9kZSAqbjtcbiBcdHN0cnVjdCBodGFiX2VsZW0gKmw7XG4gXG4gXHRobGlzdF9udWxsc19mb3JfZWFjaF9lbnRyeV9yY3UobCwgbiwgaGVhZCwgaGFzaF9ub2RlKVxuLVx0XHRpZiAobC1cdTAwM2VoYXNoID09IGhhc2ggXHUwMDI2XHUwMDI2ICFtZW1jbXAoXHUwMDI2bC1cdTAwM2VrZXksIGtleSwga2V5X3NpemUpKVxuJiM0MztcdFx0aWYgKCghaHRhYl9oYXNfaGFzaChodGFiKSB8fCBodGFiX2VsZW1faGFzaChodGFiLCBsKSA9PSBoYXNoKSBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdCAgICAhbWVtY21wKGh0YWJfZWxlbV9rZXkoaHRhYiwgbCksIGtleSwga2V5X3NpemUpKVxuIFx0XHRcdHJldHVybiBsO1xuIFxuIFx0cmV0dXJuIE5VTEw7XG5AQCAtNzA5LDcgJiM0Mzs4MTUsOCBAQCBzdGF0aWMgc3RydWN0IGh0YWJfZWxlbSAqbG9va3VwX2VsZW1fcmF3KHN0cnVjdCBobGlzdF9udWxsc19oZWFkICpoZWFkLCB1MzIgaGFzaFxuICAqIHRoZSB1bmxpa2VseSBldmVudCB3aGVuIGVsZW1lbnRzIG1vdmVkIGZyb20gb25lIGJ1Y2tldCBpbnRvIGFub3RoZXJcbiAgKiB3aGlsZSBsaW5rIGxpc3QgaXMgYmVpbmcgd2Fsa2VkXG4gICovXG4tc3RhdGljIHN0cnVjdCBodGFiX2VsZW0gKmxvb2t1cF9udWxsc19lbGVtX3JhdyhzdHJ1Y3QgaGxpc3RfbnVsbHNfaGVhZCAqaGVhZCxcbiYjNDM7c3RhdGljIHN0cnVjdCBodGFiX2VsZW0gKmxvb2t1cF9udWxsc19lbGVtX3JhdyhzdHJ1Y3QgYnBmX2h0YWIgKmh0YWIsXG4mIzQzO1x0XHRcdFx0XHQgICAgICAgc3RydWN0IGhsaXN0X251bGxzX2hlYWQgKmhlYWQsXG4gXHRcdFx0XHRcdCAgICAgICB1MzIgaGFzaCwgdm9pZCAqa2V5LFxuIFx0XHRcdFx0XHQgICAgICAgdTMyIGtleV9zaXplLCB1MzIgbl9idWNrZXRzKVxuIHtcbkBAIC03MTgsNyAmIzQzOzgyNSw4IEBAIHN0YXRpYyBzdHJ1Y3QgaHRhYl9lbGVtICpsb29rdXBfbnVsbHNfZWxlbV9yYXcoc3RydWN0IGhsaXN0X251bGxzX2hlYWQgKmhlYWQsXG4gXG4gYWdhaW46XG4gXHRobGlzdF9udWxsc19mb3JfZWFjaF9lbnRyeV9yY3UobCwgbiwgaGVhZCwgaGFzaF9ub2RlKVxuLVx0XHRpZiAobC1cdTAwM2VoYXNoID09IGhhc2ggXHUwMDI2XHUwMDI2ICFtZW1jbXAoXHUwMDI2bC1cdTAwM2VrZXksIGtleSwga2V5X3NpemUpKVxuJiM0MztcdFx0aWYgKCghaHRhYl9oYXNfaGFzaChodGFiKSB8fCBodGFiX2VsZW1faGFzaChodGFiLCBsKSA9PSBoYXNoKSBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdCAgICAhbWVtY21wKGh0YWJfZWxlbV9rZXkoaHRhYiwgbCksIGtleSwga2V5X3NpemUpKVxuIFx0XHRcdHJldHVybiBsO1xuIFxuIFx0aWYgKHVubGlrZWx5KGdldF9udWxsc192YWx1ZShuKSAhPSAoaGFzaCBcdTAwMjYgKG5fYnVja2V0cyAtIDEpKSkpXG5AQCAtNzQ3LDE3ICYjNDM7ODU1LDE4IEBAIHN0YXRpYyB2b2lkICpfX2h0YWJfbWFwX2xvb2t1cF9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSlcbiBcbiBcdGhlYWQgPSBzZWxlY3RfYnVja2V0KGh0YWIsIGhhc2gpO1xuIFxuLVx0bCA9IGxvb2t1cF9udWxsc19lbGVtX3JhdyhoZWFkLCBoYXNoLCBrZXksIGtleV9zaXplLCBodGFiLVx1MDAzZW5fYnVja2V0cyk7XG4mIzQzO1x0bCA9IGxvb2t1cF9udWxsc19lbGVtX3JhdyhodGFiLCBoZWFkLCBoYXNoLCBrZXksIGtleV9zaXplLCBodGFiLVx1MDAzZW5fYnVja2V0cyk7XG4gXG4gXHRyZXR1cm4gbDtcbiB9XG4gXG4gc3RhdGljIHZvaWQgKmh0YWJfbWFwX2xvb2t1cF9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSlcbiB7XG4mIzQzO1x0c3RydWN0IGJwZl9odGFiICpodGFiID0gY29udGFpbmVyX29mKG1hcCwgc3RydWN0IGJwZl9odGFiLCBtYXApO1xuIFx0c3RydWN0IGh0YWJfZWxlbSAqbCA9IF9faHRhYl9tYXBfbG9va3VwX2VsZW0obWFwLCBrZXkpO1xuIFxuIFx0aWYgKGwpXG4tXHRcdHJldHVybiBodGFiX2VsZW1fdmFsdWUobCwgbWFwLVx1MDAzZWtleV9zaXplKTtcbiYjNDM7XHRcdHJldHVybiBodGFiX2VsZW1fdmFsdWUoaHRhYiwgbCk7XG4gXG4gXHRyZXR1cm4gTlVMTDtcbiB9XG5AQCAtNzc1LDYgJiM0Mzs4ODQsNyBAQCBzdGF0aWMgdm9pZCAqaHRhYl9tYXBfbG9va3VwX2VsZW0oc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5KVxuICAqL1xuIHN0YXRpYyBpbnQgaHRhYl9tYXBfZ2VuX2xvb2t1cChzdHJ1Y3QgYnBmX21hcCAqbWFwLCBzdHJ1Y3QgYnBmX2luc24gKmluc25fYnVmKVxuIHtcbiYjNDM7XHRzdHJ1Y3QgYnBmX2h0YWIgKmh0YWIgPSBjb250YWluZXJfb2YobWFwLCBzdHJ1Y3QgYnBmX2h0YWIsIG1hcCk7XG4gXHRzdHJ1Y3QgYnBmX2luc24gKmluc24gPSBpbnNuX2J1ZjtcbiBcdGNvbnN0IGludCByZXQgPSBCUEZfUkVHXzA7XG4gXG5AQCAtNzgzLDcgJiM0Mzs4OTMsNyBAQCBzdGF0aWMgaW50IGh0YWJfbWFwX2dlbl9sb29rdXAoc3RydWN0IGJwZl9tYXAgKm1hcCwgc3RydWN0IGJwZl9pbnNuICppbnNuX2J1ZilcbiBcdCppbnNuJiM0MzsmIzQzOyA9IEJQRl9FTUlUX0NBTEwoX19odGFiX21hcF9sb29rdXBfZWxlbSk7XG4gXHQqaW5zbiYjNDM7JiM0MzsgPSBCUEZfSk1QX0lNTShCUEZfSkVRLCByZXQsIDAsIDEpO1xuIFx0Kmluc24mIzQzOyYjNDM7ID0gQlBGX0FMVTY0X0lNTShCUEZfQURELCByZXQsXG4tXHRcdFx0XHRvZmZzZXRvZihzdHJ1Y3QgaHRhYl9lbGVtLCBrZXkpICYjNDM7XG4mIzQzO1x0XHRcdFx0aHRhYi1cdTAwM2VrZXlfb2Zmc2V0ICYjNDM7XG4gXHRcdFx0XHRyb3VuZF91cChtYXAtXHUwMDNla2V5X3NpemUsIDgpKTtcbiBcdHJldHVybiBpbnNuIC0gaW5zbl9idWY7XG4gfVxuQEAgLTc5MSwxMiAmIzQzOzkwMSwxMyBAQCBzdGF0aWMgaW50IGh0YWJfbWFwX2dlbl9sb29rdXAoc3RydWN0IGJwZl9tYXAgKm1hcCwgc3RydWN0IGJwZl9pbnNuICppbnNuX2J1ZilcbiBzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgKl9faHRhYl9scnVfbWFwX2xvb2t1cF9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsXG4gXHRcdFx0XHRcdFx0XHR2b2lkICprZXksIGNvbnN0IGJvb2wgbWFyaylcbiB7XG4mIzQzO1x0c3RydWN0IGJwZl9odGFiICpodGFiID0gY29udGFpbmVyX29mKG1hcCwgc3RydWN0IGJwZl9odGFiLCBtYXApO1xuIFx0c3RydWN0IGh0YWJfZWxlbSAqbCA9IF9faHRhYl9tYXBfbG9va3VwX2VsZW0obWFwLCBrZXkpO1xuIFxuIFx0aWYgKGwpIHtcbiBcdFx0aWYgKG1hcmspXG4tXHRcdFx0YnBmX2xydV9ub2RlX3NldF9yZWYoXHUwMDI2bC1cdTAwM2VscnVfbm9kZSk7XG4tXHRcdHJldHVybiBodGFiX2VsZW1fdmFsdWUobCwgbWFwLVx1MDAzZWtleV9zaXplKTtcbiYjNDM7XHRcdFx0YnBmX2xydV9ub2RlX3NldF9yZWYoaHRhYl9lbGVtX2xydV9ub2RlKGwpKTtcbiYjNDM7XHRcdHJldHVybiBodGFiX2VsZW1fdmFsdWUoaHRhYiwgbCk7XG4gXHR9XG4gXG4gXHRyZXR1cm4gTlVMTDtcbkBAIC04MTUsNiAmIzQzOzkyNiw3IEBAIHN0YXRpYyB2b2lkICpodGFiX2xydV9tYXBfbG9va3VwX2VsZW1fc3lzKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSlcbiBzdGF0aWMgaW50IGh0YWJfbHJ1X21hcF9nZW5fbG9va3VwKHN0cnVjdCBicGZfbWFwICptYXAsXG4gXHRcdFx0XHQgICBzdHJ1Y3QgYnBmX2luc24gKmluc25fYnVmKVxuIHtcbiYjNDM7XHRzdHJ1Y3QgYnBmX2h0YWIgKmh0YWIgPSBjb250YWluZXJfb2YobWFwLCBzdHJ1Y3QgYnBmX2h0YWIsIG1hcCk7XG4gXHRzdHJ1Y3QgYnBmX2luc24gKmluc24gPSBpbnNuX2J1ZjtcbiBcdGNvbnN0IGludCByZXQgPSBCUEZfUkVHXzA7XG4gXHRjb25zdCBpbnQgcmVmX3JlZyA9IEJQRl9SRUdfMTtcbkBAIC04MjQsMTUgJiM0Mzs5MzYsMTUgQEAgc3RhdGljIGludCBodGFiX2xydV9tYXBfZ2VuX2xvb2t1cChzdHJ1Y3QgYnBmX21hcCAqbWFwLFxuIFx0Kmluc24mIzQzOyYjNDM7ID0gQlBGX0VNSVRfQ0FMTChfX2h0YWJfbWFwX2xvb2t1cF9lbGVtKTtcbiBcdCppbnNuJiM0MzsmIzQzOyA9IEJQRl9KTVBfSU1NKEJQRl9KRVEsIHJldCwgMCwgNCk7XG4gXHQqaW5zbiYjNDM7JiM0MzsgPSBCUEZfTERYX01FTShCUEZfQiwgcmVmX3JlZywgcmV0LFxuLVx0XHRcdCAgICAgIG9mZnNldG9mKHN0cnVjdCBodGFiX2VsZW0sIGxydV9ub2RlKSAmIzQzO1xuJiM0MztcdFx0XHQgICAgICBvZmZzZXRvZihzdHJ1Y3QgaHRhYl9lbGVtX2xydSwgbHJ1X25vZGUpICYjNDM7XG4gXHRcdFx0ICAgICAgb2Zmc2V0b2Yoc3RydWN0IGJwZl9scnVfbm9kZSwgcmVmKSk7XG4gXHQqaW5zbiYjNDM7JiM0MzsgPSBCUEZfSk1QX0lNTShCUEZfSk5FLCByZWZfcmVnLCAwLCAxKTtcbiBcdCppbnNuJiM0MzsmIzQzOyA9IEJQRl9TVF9NRU0oQlBGX0IsIHJldCxcbi1cdFx0XHQgICAgIG9mZnNldG9mKHN0cnVjdCBodGFiX2VsZW0sIGxydV9ub2RlKSAmIzQzO1xuJiM0MztcdFx0XHQgICAgIG9mZnNldG9mKHN0cnVjdCBodGFiX2VsZW1fbHJ1LCBscnVfbm9kZSkgJiM0MztcbiBcdFx0XHQgICAgIG9mZnNldG9mKHN0cnVjdCBicGZfbHJ1X25vZGUsIHJlZiksXG4gXHRcdFx0ICAgICAxKTtcbiBcdCppbnNuJiM0MzsmIzQzOyA9IEJQRl9BTFU2NF9JTU0oQlBGX0FERCwgcmV0LFxuLVx0XHRcdFx0b2Zmc2V0b2Yoc3RydWN0IGh0YWJfZWxlbSwga2V5KSAmIzQzO1xuJiM0MztcdFx0XHRcdGh0YWItXHUwMDNla2V5X29mZnNldCAmIzQzO1xuIFx0XHRcdFx0cm91bmRfdXAobWFwLVx1MDAzZWtleV9zaXplLCA4KSk7XG4gXHRyZXR1cm4gaW5zbiAtIGluc25fYnVmO1xuIH1cbkBAIC04NDQsMTMgJiM0Mzs5NTYsMTMgQEAgc3RhdGljIHZvaWQgY2hlY2tfYW5kX2NhbmNlbF9maWVsZHMoc3RydWN0IGJwZl9odGFiICpodGFiLFxuIFx0XHRyZXR1cm47XG4gXG4gXHRpZiAoaHRhYl9pc19wZXJjcHUoaHRhYikpIHtcbi1cdFx0dm9pZCBfX3BlcmNwdSAqcHB0ciA9IGh0YWJfZWxlbV9nZXRfcHRyKGVsZW0sIGh0YWItXHUwMDNlbWFwLmtleV9zaXplKTtcbiYjNDM7XHRcdHZvaWQgX19wZXJjcHUgKnBwdHIgPSBodGFiX2VsZW1fZ2V0X3B0cihodGFiLCBlbGVtKTtcbiBcdFx0aW50IGNwdTtcbiBcbiBcdFx0Zm9yX2VhY2hfcG9zc2libGVfY3B1KGNwdSlcbiBcdFx0XHRicGZfb2JqX2NhbmNlbF9maWVsZHMoXHUwMDI2aHRhYi1cdTAwM2VtYXAsIHBlcl9jcHVfcHRyKHBwdHIsIGNwdSkpO1xuIFx0fSBlbHNlIHtcbi1cdFx0dm9pZCAqbWFwX3ZhbHVlID0gaHRhYl9lbGVtX3ZhbHVlKGVsZW0sIGh0YWItXHUwMDNlbWFwLmtleV9zaXplKTtcbiYjNDM7XHRcdHZvaWQgKm1hcF92YWx1ZSA9IGh0YWJfZWxlbV92YWx1ZShodGFiLCBlbGVtKTtcbiBcbiBcdFx0YnBmX29ial9jYW5jZWxfZmllbGRzKFx1MDAyNmh0YWItXHUwMDNlbWFwLCBtYXBfdmFsdWUpO1xuIFx0fVxuQEAgLTg2OSw4ICYjNDM7OTgxLDggQEAgc3RhdGljIGJvb2wgaHRhYl9scnVfbWFwX2RlbGV0ZV9ub2RlKHZvaWQgKmFyZywgc3RydWN0IGJwZl9scnVfbm9kZSAqbm9kZSlcbiBcdHN0cnVjdCBidWNrZXQgKmI7XG4gXHRpbnQgcmV0O1xuIFxuLVx0dGd0X2wgPSBjb250YWluZXJfb2Yobm9kZSwgc3RydWN0IGh0YWJfZWxlbSwgbHJ1X25vZGUpO1xuLVx0YiA9IF9fc2VsZWN0X2J1Y2tldChodGFiLCB0Z3RfbC1cdTAwM2VoYXNoKTtcbiYjNDM7XHR0Z3RfbCA9IChzdHJ1Y3QgaHRhYl9lbGVtICopY29udGFpbmVyX29mKG5vZGUsIHN0cnVjdCBodGFiX2VsZW1fbHJ1LCBscnVfbm9kZSk7XG4mIzQzO1x0YiA9IF9fc2VsZWN0X2J1Y2tldChodGFiLCBodGFiX2VsZW1faGFzaChodGFiLCB0Z3RfbCkpO1xuIFx0aGVhZCA9IFx1MDAyNmItXHUwMDNlaGVhZDtcbiBcbiBcdHJldCA9IGh0YWJfbG9ja19idWNrZXQoYiwgXHUwMDI2ZmxhZ3MpO1xuQEAgLTkxMiw3ICYjNDM7MTAyNCw3IEBAIHN0YXRpYyBpbnQgaHRhYl9tYXBfZ2V0X25leHRfa2V5KHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSwgdm9pZCAqbmV4dF9rZXkpXG4gXHRoZWFkID0gc2VsZWN0X2J1Y2tldChodGFiLCBoYXNoKTtcbiBcbiBcdC8qIGxvb2t1cCB0aGUga2V5ICovXG4tXHRsID0gbG9va3VwX251bGxzX2VsZW1fcmF3KGhlYWQsIGhhc2gsIGtleSwga2V5X3NpemUsIGh0YWItXHUwMDNlbl9idWNrZXRzKTtcbiYjNDM7XHRsID0gbG9va3VwX251bGxzX2VsZW1fcmF3KGh0YWIsIGhlYWQsIGhhc2gsIGtleSwga2V5X3NpemUsIGh0YWItXHUwMDNlbl9idWNrZXRzKTtcbiBcbiBcdGlmICghbClcbiBcdFx0Z290byBmaW5kX2ZpcnN0X2VsZW07XG5AQCAtOTIzLDcgJiM0MzsxMDM1LDcgQEAgc3RhdGljIGludCBodGFiX21hcF9nZXRfbmV4dF9rZXkoc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5LCB2b2lkICpuZXh0X2tleSlcbiBcbiBcdGlmIChuZXh0X2wpIHtcbiBcdFx0LyogaWYgbmV4dCBlbGVtIGluIHRoaXMgaGFzaCBsaXN0IGlzIG5vbi16ZXJvLCBqdXN0IHJldHVybiBpdCAqL1xuLVx0XHRtZW1jcHkobmV4dF9rZXksIG5leHRfbC1cdTAwM2VrZXksIGtleV9zaXplKTtcbiYjNDM7XHRcdG1lbWNweShuZXh0X2tleSwgaHRhYl9lbGVtX2tleShodGFiLCBuZXh0X2wpLCBrZXlfc2l6ZSk7XG4gXHRcdHJldHVybiAwO1xuIFx0fVxuIFxuQEAgLTk0MSw3ICYjNDM7MTA1Myw3IEBAIHN0YXRpYyBpbnQgaHRhYl9tYXBfZ2V0X25leHRfa2V5KHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSwgdm9pZCAqbmV4dF9rZXkpXG4gXHRcdFx0XHRcdCAgc3RydWN0IGh0YWJfZWxlbSwgaGFzaF9ub2RlKTtcbiBcdFx0aWYgKG5leHRfbCkge1xuIFx0XHRcdC8qIGlmIGl0JiMzOTtzIG5vdCBlbXB0eSwganVzdCByZXR1cm4gaXQgKi9cbi1cdFx0XHRtZW1jcHkobmV4dF9rZXksIG5leHRfbC1cdTAwM2VrZXksIGtleV9zaXplKTtcbiYjNDM7XHRcdFx0bWVtY3B5KG5leHRfa2V5LCBodGFiX2VsZW1fa2V5KGh0YWIsIG5leHRfbCksIGtleV9zaXplKTtcbiBcdFx0XHRyZXR1cm4gMDtcbiBcdFx0fVxuIFx0fVxuQEAgLTk1NSw3ICYjNDM7MTA2Nyw3IEBAIHN0YXRpYyB2b2lkIGh0YWJfZWxlbV9mcmVlKHN0cnVjdCBicGZfaHRhYiAqaHRhYiwgc3RydWN0IGh0YWJfZWxlbSAqbClcbiBcdGNoZWNrX2FuZF9jYW5jZWxfZmllbGRzKGh0YWIsIGwpO1xuIFxuIFx0aWYgKGh0YWItXHUwMDNlbWFwLm1hcF90eXBlID09IEJQRl9NQVBfVFlQRV9QRVJDUFVfSEFTSClcbi1cdFx0YnBmX21lbV9jYWNoZV9mcmVlKFx1MDAyNmh0YWItXHUwMDNlcGNwdV9tYSwgbC1cdTAwM2VwdHJfdG9fcHB0cik7XG4mIzQzO1x0XHRicGZfbWVtX2NhY2hlX2ZyZWUoXHUwMDI2aHRhYi1cdTAwM2VwY3B1X21hLCBodGFiX2VsZW1fZ2V0X3B0cl90b19wcHRyKGwpKTtcbiBcdGJwZl9tZW1fY2FjaGVfZnJlZShcdTAwMjZodGFiLVx1MDAzZW1hLCBsKTtcbiB9XG4gXG5AQCAtOTY1LDcgJiM0MzsxMDc3LDcgQEAgc3RhdGljIHZvaWQgaHRhYl9wdXRfZmRfdmFsdWUoc3RydWN0IGJwZl9odGFiICpodGFiLCBzdHJ1Y3QgaHRhYl9lbGVtICpsKVxuIFx0dm9pZCAqcHRyO1xuIFxuIFx0aWYgKG1hcC1cdTAwM2VvcHMtXHUwMDNlbWFwX2ZkX3B1dF9wdHIpIHtcbi1cdFx0cHRyID0gZmRfaHRhYl9tYXBfZ2V0X3B0cihtYXAsIGwpO1xuJiM0MztcdFx0cHRyID0gZmRfaHRhYl9tYXBfZ2V0X3B0cihodGFiLCBsKTtcbiBcdFx0bWFwLVx1MDAzZW9wcy1cdTAwM2VtYXBfZmRfcHV0X3B0cihtYXAsIHB0ciwgdHJ1ZSk7XG4gXHR9XG4gfVxuQEAgLTExMTcsMTAgJiM0MzsxMjI5LDEwIEBAIHN0YXRpYyBzdHJ1Y3QgaHRhYl9lbGVtICphbGxvY19odGFiX2VsZW0oc3RydWN0IGJwZl9odGFiICpodGFiLCB2b2lkICprZXksXG4gXHRcdH1cbiBcdH1cbiBcbi1cdG1lbWNweShsX25ldy1cdTAwM2VrZXksIGtleSwga2V5X3NpemUpO1xuJiM0MztcdG1lbWNweShodGFiX2VsZW1fa2V5KGh0YWIsIGxfbmV3KSwga2V5LCBrZXlfc2l6ZSk7XG4gXHRpZiAocGVyY3B1KSB7XG4gXHRcdGlmIChwcmVhbGxvYykge1xuLVx0XHRcdHBwdHIgPSBodGFiX2VsZW1fZ2V0X3B0cihsX25ldywga2V5X3NpemUpO1xuJiM0MztcdFx0XHRwcHRyID0gaHRhYl9lbGVtX2dldF9wdHIoaHRhYiwgbF9uZXcpO1xuIFx0XHR9IGVsc2Uge1xuIFx0XHRcdC8qIGFsbG9jX3BlcmNwdSB6ZXJvLWZpbGxzICovXG4gXHRcdFx0dm9pZCAqcHRyID0gYnBmX21lbV9jYWNoZV9hbGxvYyhcdTAwMjZodGFiLVx1MDAzZXBjcHVfbWEpO1xuQEAgLTExMzAsMjYgJiM0MzsxMjQyLDI2IEBAIHN0YXRpYyBzdHJ1Y3QgaHRhYl9lbGVtICphbGxvY19odGFiX2VsZW0oc3RydWN0IGJwZl9odGFiICpodGFiLCB2b2lkICprZXksXG4gXHRcdFx0XHRsX25ldyA9IEVSUl9QVFIoLUVOT01FTSk7XG4gXHRcdFx0XHRnb3RvIGRlY19jb3VudDtcbiBcdFx0XHR9XG4tXHRcdFx0bF9uZXctXHUwMDNlcHRyX3RvX3BwdHIgPSBwdHI7XG4mIzQzO1x0XHRcdGh0YWJfZWxlbV9zZXRfcHRyX3RvX3BwdHIobF9uZXcsIHB0cik7XG4gXHRcdFx0cHB0ciA9ICoodm9pZCBfX3BlcmNwdSAqKilwdHI7XG4gXHRcdH1cbiBcbiBcdFx0cGNwdV9pbml0X3ZhbHVlKGh0YWIsIHBwdHIsIHZhbHVlLCBvbmFsbGNwdXMsIG1hcF9mbGFncyk7XG4gXG4gXHRcdGlmICghcHJlYWxsb2MpXG4tXHRcdFx0aHRhYl9lbGVtX3NldF9wdHIobF9uZXcsIGtleV9zaXplLCBwcHRyKTtcbiYjNDM7XHRcdFx0aHRhYl9lbGVtX3NldF9wdHIoaHRhYiwgbF9uZXcsIHBwdHIpO1xuIFx0fSBlbHNlIGlmIChmZF9odGFiX21hcF9uZWVkc19hZGp1c3QoaHRhYikpIHtcbiBcdFx0c2l6ZSA9IHJvdW5kX3VwKHNpemUsIDgpO1xuLVx0XHRtZW1jcHkoaHRhYl9lbGVtX3ZhbHVlKGxfbmV3LCBrZXlfc2l6ZSksIHZhbHVlLCBzaXplKTtcbiYjNDM7XHRcdG1lbWNweShodGFiX2VsZW1fdmFsdWUoaHRhYiwgbF9uZXcpLCB2YWx1ZSwgc2l6ZSk7XG4gXHR9IGVsc2UgaWYgKG1hcF9mbGFncyBcdTAwMjYgQlBGX0ZfTE9DSykge1xuIFx0XHRjb3B5X21hcF92YWx1ZV9sb2NrZWQoXHUwMDI2aHRhYi1cdTAwM2VtYXAsXG4tXHRcdFx0XHQgICAgICBodGFiX2VsZW1fdmFsdWUobF9uZXcsIGtleV9zaXplKSxcbiYjNDM7XHRcdFx0XHQgICAgICBodGFiX2VsZW1fdmFsdWUoaHRhYiwgbF9uZXcpLFxuIFx0XHRcdFx0ICAgICAgdmFsdWUsIGZhbHNlKTtcbiBcdH0gZWxzZSB7XG4tXHRcdGNvcHlfbWFwX3ZhbHVlKFx1MDAyNmh0YWItXHUwMDNlbWFwLCBodGFiX2VsZW1fdmFsdWUobF9uZXcsIGtleV9zaXplKSwgdmFsdWUpO1xuJiM0MztcdFx0Y29weV9tYXBfdmFsdWUoXHUwMDI2aHRhYi1cdTAwM2VtYXAsIGh0YWJfZWxlbV92YWx1ZShodGFiLCBsX25ldyksIHZhbHVlKTtcbiBcdH1cbiBcbi1cdGxfbmV3LVx1MDAzZWhhc2ggPSBoYXNoO1xuJiM0MztcdGh0YWJfZWxlbV9zZXRfaGFzaChodGFiLCBsX25ldywgaGFzaCk7XG4gXHRyZXR1cm4gbF9uZXc7XG4gZGVjX2NvdW50OlxuIFx0ZGVjX2VsZW1fY291bnQoaHRhYik7XG5AQCAtMTE5OSw3ICYjNDM7MTMxMSw3IEBAIHN0YXRpYyBsb25nIGh0YWJfbWFwX3VwZGF0ZV9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSwgdm9pZCAqdmFsdWUsXG4gXHRcdGlmICh1bmxpa2VseSghYnRmX3JlY29yZF9oYXNfZmllbGQobWFwLVx1MDAzZXJlY29yZCwgQlBGX1NQSU5fTE9DSykpKVxuIFx0XHRcdHJldHVybiAtRUlOVkFMO1xuIFx0XHQvKiBmaW5kIGFuIGVsZW1lbnQgd2l0aG91dCB0YWtpbmcgdGhlIGJ1Y2tldCBsb2NrICovXG4tXHRcdGxfb2xkID0gbG9va3VwX251bGxzX2VsZW1fcmF3KGhlYWQsIGhhc2gsIGtleSwga2V5X3NpemUsXG4mIzQzO1x0XHRsX29sZCA9IGxvb2t1cF9udWxsc19lbGVtX3JhdyhodGFiLCBoZWFkLCBoYXNoLCBrZXksIGtleV9zaXplLFxuIFx0XHRcdFx0XHQgICAgICBodGFiLVx1MDAzZW5fYnVja2V0cyk7XG4gXHRcdHJldCA9IGNoZWNrX2ZsYWdzKGh0YWIsIGxfb2xkLCBtYXBfZmxhZ3MpO1xuIFx0XHRpZiAocmV0KVxuQEAgLTEyMDcsNyAmIzQzOzEzMTksNyBAQCBzdGF0aWMgbG9uZyBodGFiX21hcF91cGRhdGVfZWxlbShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXksIHZvaWQgKnZhbHVlLFxuIFx0XHRpZiAobF9vbGQpIHtcbiBcdFx0XHQvKiBncmFiIHRoZSBlbGVtZW50IGxvY2sgYW5kIHVwZGF0ZSB2YWx1ZSBpbiBwbGFjZSAqL1xuIFx0XHRcdGNvcHlfbWFwX3ZhbHVlX2xvY2tlZChtYXAsXG4tXHRcdFx0XHRcdCAgICAgIGh0YWJfZWxlbV92YWx1ZShsX29sZCwga2V5X3NpemUpLFxuJiM0MztcdFx0XHRcdFx0ICAgICAgaHRhYl9lbGVtX3ZhbHVlKGh0YWIsIGxfb2xkKSxcbiBcdFx0XHRcdFx0ICAgICAgdmFsdWUsIGZhbHNlKTtcbiBcdFx0XHRyZXR1cm4gMDtcbiBcdFx0fVxuQEAgLTEyMjEsNyAmIzQzOzEzMzMsNyBAQCBzdGF0aWMgbG9uZyBodGFiX21hcF91cGRhdGVfZWxlbShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXksIHZvaWQgKnZhbHVlLFxuIFx0aWYgKHJldClcbiBcdFx0cmV0dXJuIHJldDtcbiBcbi1cdGxfb2xkID0gbG9va3VwX2VsZW1fcmF3KGhlYWQsIGhhc2gsIGtleSwga2V5X3NpemUpO1xuJiM0MztcdGxfb2xkID0gbG9va3VwX2VsZW1fcmF3KGh0YWIsIGhlYWQsIGhhc2gsIGtleSwga2V5X3NpemUpO1xuIFxuIFx0cmV0ID0gY2hlY2tfZmxhZ3MoaHRhYiwgbF9vbGQsIG1hcF9mbGFncyk7XG4gXHRpZiAocmV0KVxuQEAgLTEyMzUsNyAmIzQzOzEzNDcsNyBAQCBzdGF0aWMgbG9uZyBodGFiX21hcF91cGRhdGVfZWxlbShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXksIHZvaWQgKnZhbHVlLFxuIFx0XHQgKiBhbmQgdXBkYXRlIGVsZW1lbnQgaW4gcGxhY2VcbiBcdFx0ICovXG4gXHRcdGNvcHlfbWFwX3ZhbHVlX2xvY2tlZChtYXAsXG4tXHRcdFx0XHQgICAgICBodGFiX2VsZW1fdmFsdWUobF9vbGQsIGtleV9zaXplKSxcbiYjNDM7XHRcdFx0XHQgICAgICBodGFiX2VsZW1fdmFsdWUoaHRhYiwgbF9vbGQpLFxuIFx0XHRcdFx0ICAgICAgdmFsdWUsIGZhbHNlKTtcbiBcdFx0cmV0ID0gMDtcbiBcdFx0Z290byBlcnI7XG5AQCAtMTI3NSw3ICYjNDM7MTM4Nyw3IEBAIHN0YXRpYyB2b2lkIGh0YWJfbHJ1X3B1c2hfZnJlZShzdHJ1Y3QgYnBmX2h0YWIgKmh0YWIsIHN0cnVjdCBodGFiX2VsZW0gKmVsZW0pXG4ge1xuIFx0Y2hlY2tfYW5kX2NhbmNlbF9maWVsZHMoaHRhYiwgZWxlbSk7XG4gXHRicGZfbWFwX2RlY19lbGVtX2NvdW50KFx1MDAyNmh0YWItXHUwMDNlbWFwKTtcbi1cdGJwZl9scnVfcHVzaF9mcmVlKFx1MDAyNmh0YWItXHUwMDNlbHJ1LCBcdTAwMjZlbGVtLVx1MDAzZWxydV9ub2RlKTtcbiYjNDM7XHRicGZfbHJ1X3B1c2hfZnJlZShcdTAwMjZodGFiLVx1MDAzZWxydSwgaHRhYl9lbGVtX2xydV9ub2RlKGVsZW0pKTtcbiB9XG4gXG4gc3RhdGljIGxvbmcgaHRhYl9scnVfbWFwX3VwZGF0ZV9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSwgdm9pZCAqdmFsdWUsXG5AQCAtMTMxMCwxMyAmIzQzOzE0MjIsMTMgQEAgc3RhdGljIGxvbmcgaHRhYl9scnVfbWFwX3VwZGF0ZV9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSwgdm9pZCAqdmFsdWVcbiBcdGxfbmV3ID0gcHJlYWxsb2NfbHJ1X3BvcChodGFiLCBrZXksIGhhc2gpO1xuIFx0aWYgKCFsX25ldylcbiBcdFx0cmV0dXJuIC1FTk9NRU07XG4tXHRjb3B5X21hcF92YWx1ZShcdTAwMjZodGFiLVx1MDAzZW1hcCwgaHRhYl9lbGVtX3ZhbHVlKGxfbmV3LCBtYXAtXHUwMDNla2V5X3NpemUpLCB2YWx1ZSk7XG4mIzQzO1x0Y29weV9tYXBfdmFsdWUoXHUwMDI2aHRhYi1cdTAwM2VtYXAsIGh0YWJfZWxlbV92YWx1ZShodGFiLCBsX25ldyksIHZhbHVlKTtcbiBcbiBcdHJldCA9IGh0YWJfbG9ja19idWNrZXQoYiwgXHUwMDI2ZmxhZ3MpO1xuIFx0aWYgKHJldClcbiBcdFx0Z290byBlcnJfbG9ja19idWNrZXQ7XG4gXG4tXHRsX29sZCA9IGxvb2t1cF9lbGVtX3JhdyhoZWFkLCBoYXNoLCBrZXksIGtleV9zaXplKTtcbiYjNDM7XHRsX29sZCA9IGxvb2t1cF9lbGVtX3JhdyhodGFiLCBoZWFkLCBoYXNoLCBrZXksIGtleV9zaXplKTtcbiBcbiBcdHJldCA9IGNoZWNrX2ZsYWdzKGh0YWIsIGxfb2xkLCBtYXBfZmxhZ3MpO1xuIFx0aWYgKHJldClcbkBAIC0xMzI3LDcgJiM0MzsxNDM5LDcgQEAgc3RhdGljIGxvbmcgaHRhYl9scnVfbWFwX3VwZGF0ZV9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSwgdm9pZCAqdmFsdWVcbiBcdCAqL1xuIFx0aGxpc3RfbnVsbHNfYWRkX2hlYWRfcmN1KFx1MDAyNmxfbmV3LVx1MDAzZWhhc2hfbm9kZSwgaGVhZCk7XG4gXHRpZiAobF9vbGQpIHtcbi1cdFx0YnBmX2xydV9ub2RlX3NldF9yZWYoXHUwMDI2bF9uZXctXHUwMDNlbHJ1X25vZGUpO1xuJiM0MztcdFx0YnBmX2xydV9ub2RlX3NldF9yZWYoaHRhYl9lbGVtX2xydV9ub2RlKGxfbmV3KSk7XG4gXHRcdGhsaXN0X251bGxzX2RlbF9yY3UoXHUwMDI2bF9vbGQtXHUwMDNlaGFzaF9ub2RlKTtcbiBcdH1cbiBcdHJldCA9IDA7XG5AQCAtMTM4Myw3ICYjNDM7MTQ5NSw3IEBAIHN0YXRpYyBsb25nIGh0YWJfbWFwX3VwZGF0ZV9lbGVtX2luX3BsYWNlKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSxcbiBcdGlmIChyZXQpXG4gXHRcdHJldHVybiByZXQ7XG4gXG4tXHRsX29sZCA9IGxvb2t1cF9lbGVtX3JhdyhoZWFkLCBoYXNoLCBrZXksIGtleV9zaXplKTtcbiYjNDM7XHRsX29sZCA9IGxvb2t1cF9lbGVtX3JhdyhodGFiLCBoZWFkLCBoYXNoLCBrZXksIGtleV9zaXplKTtcbiBcbiBcdHJldCA9IGNoZWNrX2ZsYWdzKGh0YWIsIGxfb2xkLCBtYXBfZmxhZ3MpO1xuIFx0aWYgKHJldClcbkBAIC0xMzkyLDEwICYjNDM7MTUwNCwxMCBAQCBzdGF0aWMgbG9uZyBodGFiX21hcF91cGRhdGVfZWxlbV9pbl9wbGFjZShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXksXG4gXHRpZiAobF9vbGQpIHtcbiBcdFx0LyogVXBkYXRlIHZhbHVlIGluLXBsYWNlICovXG4gXHRcdGlmIChwZXJjcHUpIHtcbi1cdFx0XHRwY3B1X2NvcHlfdmFsdWUoaHRhYiwgaHRhYl9lbGVtX2dldF9wdHIobF9vbGQsIGtleV9zaXplKSxcbiYjNDM7XHRcdFx0cGNwdV9jb3B5X3ZhbHVlKGh0YWIsIGh0YWJfZWxlbV9nZXRfcHRyKGh0YWIsIGxfb2xkKSxcbiBcdFx0XHRcdFx0dmFsdWUsIG9uYWxsY3B1cywgbWFwX2ZsYWdzKTtcbiBcdFx0fSBlbHNlIHtcbi1cdFx0XHR2b2lkICoqaW5uZXJfbWFwX3BwdHIgPSBodGFiX2VsZW1fdmFsdWUobF9vbGQsIGtleV9zaXplKTtcbiYjNDM7XHRcdFx0dm9pZCAqKmlubmVyX21hcF9wcHRyID0gaHRhYl9lbGVtX3ZhbHVlKGh0YWIsIGxfb2xkKTtcbiBcbiBcdFx0XHRvbGRfbWFwX3B0ciA9ICppbm5lcl9tYXBfcHB0cjtcbiBcdFx0XHRXUklURV9PTkNFKCppbm5lcl9tYXBfcHB0ciwgKih2b2lkICoqKXZhbHVlKTtcbkBAIC0xNDU2LDIwICYjNDM7MTU2OCwyMCBAQCBzdGF0aWMgbG9uZyBfX2h0YWJfbHJ1X3BlcmNwdV9tYXBfdXBkYXRlX2VsZW0oc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5LFxuIFx0aWYgKHJldClcbiBcdFx0Z290byBlcnJfbG9ja19idWNrZXQ7XG4gXG4tXHRsX29sZCA9IGxvb2t1cF9lbGVtX3JhdyhoZWFkLCBoYXNoLCBrZXksIGtleV9zaXplKTtcbiYjNDM7XHRsX29sZCA9IGxvb2t1cF9lbGVtX3JhdyhodGFiLCBoZWFkLCBoYXNoLCBrZXksIGtleV9zaXplKTtcbiBcbiBcdHJldCA9IGNoZWNrX2ZsYWdzKGh0YWIsIGxfb2xkLCBtYXBfZmxhZ3MpO1xuIFx0aWYgKHJldClcbiBcdFx0Z290byBlcnI7XG4gXG4gXHRpZiAobF9vbGQpIHtcbi1cdFx0YnBmX2xydV9ub2RlX3NldF9yZWYoXHUwMDI2bF9vbGQtXHUwMDNlbHJ1X25vZGUpO1xuJiM0MztcdFx0YnBmX2xydV9ub2RlX3NldF9yZWYoaHRhYl9lbGVtX2xydV9ub2RlKGxfb2xkKSk7XG4gXG4gXHRcdC8qIHBlci1jcHUgaGFzaCBtYXAgY2FuIHVwZGF0ZSB2YWx1ZSBpbi1wbGFjZSAqL1xuLVx0XHRwY3B1X2NvcHlfdmFsdWUoaHRhYiwgaHRhYl9lbGVtX2dldF9wdHIobF9vbGQsIGtleV9zaXplKSxcbiYjNDM7XHRcdHBjcHVfY29weV92YWx1ZShodGFiLCBodGFiX2VsZW1fZ2V0X3B0cihodGFiLCBsX29sZCksXG4gXHRcdFx0XHR2YWx1ZSwgb25hbGxjcHVzLCBtYXBfZmxhZ3MpO1xuIFx0fSBlbHNlIHtcbi1cdFx0cGNwdV9pbml0X3ZhbHVlKGh0YWIsIGh0YWJfZWxlbV9nZXRfcHRyKGxfbmV3LCBrZXlfc2l6ZSksXG4mIzQzO1x0XHRwY3B1X2luaXRfdmFsdWUoaHRhYiwgaHRhYl9lbGVtX2dldF9wdHIoaHRhYiwgbF9uZXcpLFxuIFx0XHRcdFx0dmFsdWUsIG9uYWxsY3B1cywgbWFwX2ZsYWdzKTtcbiBcdFx0aGxpc3RfbnVsbHNfYWRkX2hlYWRfcmN1KFx1MDAyNmxfbmV3LVx1MDAzZWhhc2hfbm9kZSwgaGVhZCk7XG4gXHRcdGxfbmV3ID0gTlVMTDtcbkBAIC0xNDgwLDcgJiM0MzsxNTkyLDcgQEAgc3RhdGljIGxvbmcgX19odGFiX2xydV9wZXJjcHVfbWFwX3VwZGF0ZV9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSxcbiBlcnJfbG9ja19idWNrZXQ6XG4gXHRpZiAobF9uZXcpIHtcbiBcdFx0YnBmX21hcF9kZWNfZWxlbV9jb3VudChcdTAwMjZodGFiLVx1MDAzZW1hcCk7XG4tXHRcdGJwZl9scnVfcHVzaF9mcmVlKFx1MDAyNmh0YWItXHUwMDNlbHJ1LCBcdTAwMjZsX25ldy1cdTAwM2VscnVfbm9kZSk7XG4mIzQzO1x0XHRicGZfbHJ1X3B1c2hfZnJlZShcdTAwMjZodGFiLVx1MDAzZWxydSwgaHRhYl9lbGVtX2xydV9ub2RlKGxfbmV3KSk7XG4gXHR9XG4gXHRyZXR1cm4gcmV0O1xuIH1cbkBAIC0xNTIxLDcgJiM0MzsxNjMzLDcgQEAgc3RhdGljIGxvbmcgaHRhYl9tYXBfZGVsZXRlX2VsZW0oc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5KVxuIFx0aWYgKHJldClcbiBcdFx0cmV0dXJuIHJldDtcbiBcbi1cdGwgPSBsb29rdXBfZWxlbV9yYXcoaGVhZCwgaGFzaCwga2V5LCBrZXlfc2l6ZSk7XG4mIzQzO1x0bCA9IGxvb2t1cF9lbGVtX3JhdyhodGFiLCBoZWFkLCBoYXNoLCBrZXksIGtleV9zaXplKTtcbiBcdGlmIChsKVxuIFx0XHRobGlzdF9udWxsc19kZWxfcmN1KFx1MDAyNmwtXHUwMDNlaGFzaF9ub2RlKTtcbiBcdGVsc2VcbkBAIC0xNTU2LDcgJiM0MzsxNjY4LDcgQEAgc3RhdGljIGxvbmcgaHRhYl9scnVfbWFwX2RlbGV0ZV9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSlcbiBcdGlmIChyZXQpXG4gXHRcdHJldHVybiByZXQ7XG4gXG4tXHRsID0gbG9va3VwX2VsZW1fcmF3KGhlYWQsIGhhc2gsIGtleSwga2V5X3NpemUpO1xuJiM0MztcdGwgPSBsb29rdXBfZWxlbV9yYXcoaHRhYiwgaGVhZCwgaGFzaCwga2V5LCBrZXlfc2l6ZSk7XG4gXG4gXHRpZiAobClcbiBcdFx0aGxpc3RfbnVsbHNfZGVsX3JjdShcdTAwMjZsLVx1MDAzZWhhc2hfbm9kZSk7XG5AQCAtMTYwMiw3ICYjNDM7MTcxNCw3IEBAIHN0YXRpYyB2b2lkIGh0YWJfZnJlZV9tYWxsb2NlZF9pbnRlcm5hbF9zdHJ1Y3RzKHN0cnVjdCBicGZfaHRhYiAqaHRhYilcbiBcdFx0aGxpc3RfbnVsbHNfZm9yX2VhY2hfZW50cnkobCwgbiwgaGVhZCwgaGFzaF9ub2RlKSB7XG4gXHRcdFx0LyogV2Ugb25seSBmcmVlIGludGVybmFsIHN0cnVjdHMgb24gdXJlZiBkcm9wcGluZyB0byB6ZXJvICovXG4gXHRcdFx0YnBmX21hcF9mcmVlX2ludGVybmFsX3N0cnVjdHMoXHUwMDI2aHRhYi1cdTAwM2VtYXAsXG4tXHRcdFx0XHRcdFx0ICAgICAgaHRhYl9lbGVtX3ZhbHVlKGwsIGh0YWItXHUwMDNlbWFwLmtleV9zaXplKSk7XG4mIzQzO1x0XHRcdFx0XHRcdCAgICAgIGh0YWJfZWxlbV92YWx1ZShodGFiLCBsKSk7XG4gXHRcdH1cbiBcdFx0Y29uZF9yZXNjaGVkX3JjdSgpO1xuIFx0fVxuQEAgLTE2OTcsNyAmIzQzOzE4MDksNyBAQCBzdGF0aWMgaW50IF9faHRhYl9tYXBfbG9va3VwX2FuZF9kZWxldGVfZWxlbShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXksXG4gXHRpZiAocmV0KVxuIFx0XHRyZXR1cm4gcmV0O1xuIFxuLVx0bCA9IGxvb2t1cF9lbGVtX3JhdyhoZWFkLCBoYXNoLCBrZXksIGtleV9zaXplKTtcbiYjNDM7XHRsID0gbG9va3VwX2VsZW1fcmF3KGh0YWIsIGhlYWQsIGhhc2gsIGtleSwga2V5X3NpemUpO1xuIFx0aWYgKCFsKSB7XG4gXHRcdHJldCA9IC1FTk9FTlQ7XG4gXHRcdGdvdG8gb3V0X3VubG9jaztcbkBAIC0xNzA4LDE0ICYjNDM7MTgyMCwxNCBAQCBzdGF0aWMgaW50IF9faHRhYl9tYXBfbG9va3VwX2FuZF9kZWxldGVfZWxlbShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXksXG4gXHRcdHZvaWQgX19wZXJjcHUgKnBwdHI7XG4gXHRcdGludCBvZmYgPSAwLCBjcHU7XG4gXG4tXHRcdHBwdHIgPSBodGFiX2VsZW1fZ2V0X3B0cihsLCBrZXlfc2l6ZSk7XG4mIzQzO1x0XHRwcHRyID0gaHRhYl9lbGVtX2dldF9wdHIoaHRhYiwgbCk7XG4gXHRcdGZvcl9lYWNoX3Bvc3NpYmxlX2NwdShjcHUpIHtcbiBcdFx0XHRjb3B5X21hcF92YWx1ZV9sb25nKFx1MDAyNmh0YWItXHUwMDNlbWFwLCB2YWx1ZSAmIzQzOyBvZmYsIHBlcl9jcHVfcHRyKHBwdHIsIGNwdSkpO1xuIFx0XHRcdGNoZWNrX2FuZF9pbml0X21hcF92YWx1ZShcdTAwMjZodGFiLVx1MDAzZW1hcCwgdmFsdWUgJiM0Mzsgb2ZmKTtcbiBcdFx0XHRvZmYgJiM0Mzs9IHJvdW5kdXBfdmFsdWVfc2l6ZTtcbiBcdFx0fVxuIFx0fSBlbHNlIHtcbi1cdFx0dm9pZCAqc3JjID0gaHRhYl9lbGVtX3ZhbHVlKGwsIG1hcC1cdTAwM2VrZXlfc2l6ZSk7XG4mIzQzO1x0XHR2b2lkICpzcmMgPSBodGFiX2VsZW1fdmFsdWUoaHRhYiwgbCk7XG4gXG4gXHRcdGlmIChmbGFncyBcdTAwMjYgQlBGX0ZfTE9DSylcbiBcdFx0XHRjb3B5X21hcF92YWx1ZV9sb2NrZWQobWFwLCB2YWx1ZSwgc3JjLCB0cnVlKTtcbkBAIC0xODk4LDEzICYjNDM7MjAxMCwxMyBAQCBfX2h0YWJfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2JhdGNoKHN0cnVjdCBicGZfbWFwICptYXAsXG4gXHRcdGdvdG8gbmV4dF9iYXRjaDtcbiBcbiBcdGhsaXN0X251bGxzX2Zvcl9lYWNoX2VudHJ5X3NhZmUobCwgbiwgaGVhZCwgaGFzaF9ub2RlKSB7XG4tXHRcdG1lbWNweShkc3Rfa2V5LCBsLVx1MDAzZWtleSwga2V5X3NpemUpO1xuJiM0MztcdFx0bWVtY3B5KGRzdF9rZXksIGh0YWJfZWxlbV9rZXkoaHRhYiwgbCksIGtleV9zaXplKTtcbiBcbiBcdFx0aWYgKGlzX3BlcmNwdSkge1xuIFx0XHRcdGludCBvZmYgPSAwLCBjcHU7XG4gXHRcdFx0dm9pZCBfX3BlcmNwdSAqcHB0cjtcbiBcbi1cdFx0XHRwcHRyID0gaHRhYl9lbGVtX2dldF9wdHIobCwgbWFwLVx1MDAzZWtleV9zaXplKTtcbiYjNDM7XHRcdFx0cHB0ciA9IGh0YWJfZWxlbV9nZXRfcHRyKGh0YWIsIGwpO1xuIFx0XHRcdGlmIChlbGVtX21hcF9mbGFncyBcdTAwMjYgQlBGX0ZfQ1BVKSB7XG4gXHRcdFx0XHRjcHUgPSBlbGVtX21hcF9mbGFncyBcdTAwM2VcdTAwM2UgMzI7XG4gXHRcdFx0XHRjb3B5X21hcF92YWx1ZShcdTAwMjZodGFiLVx1MDAzZW1hcCwgZHN0X3ZhbCwgcGVyX2NwdV9wdHIocHB0ciwgY3B1KSk7XG5AQCAtMTkxOCw3ICYjNDM7MjAzMCw3IEBAIF9faHRhYl9tYXBfbG9va3VwX2FuZF9kZWxldGVfYmF0Y2goc3RydWN0IGJwZl9tYXAgKm1hcCxcbiBcdFx0XHRcdH1cbiBcdFx0XHR9XG4gXHRcdH0gZWxzZSB7XG4tXHRcdFx0dmFsdWUgPSBodGFiX2VsZW1fdmFsdWUobCwga2V5X3NpemUpO1xuJiM0MztcdFx0XHR2YWx1ZSA9IGh0YWJfZWxlbV92YWx1ZShodGFiLCBsKTtcbiBcdFx0XHRpZiAoaXNfZmRfaHRhYihodGFiKSkge1xuIFx0XHRcdFx0c3RydWN0IGJwZl9tYXAgKippbm5lcl9tYXAgPSB2YWx1ZTtcbiBcbkBAIC0yMTgzLDEyICYjNDM7MjI5NSwxMiBAQCBzdGF0aWMgaW50IF9fYnBmX2hhc2hfbWFwX3NlcV9zaG93KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCBzdHJ1Y3QgaHRhYl9lbGVtICplbGVtKVxuIFx0XHRjdHgubWV0YSA9IFx1MDAyNm1ldGE7XG4gXHRcdGN0eC5tYXAgPSBpbmZvLVx1MDAzZW1hcDtcbiBcdFx0aWYgKGVsZW0pIHtcbi1cdFx0XHRjdHgua2V5ID0gZWxlbS1cdTAwM2VrZXk7XG4mIzQzO1x0XHRcdGN0eC5rZXkgPSBodGFiX2VsZW1fa2V5KGluZm8tXHUwMDNlaHRhYiwgZWxlbSk7XG4gXHRcdFx0aWYgKCFpbmZvLVx1MDAzZXBlcmNwdV92YWx1ZV9idWYpIHtcbi1cdFx0XHRcdGN0eC52YWx1ZSA9IGh0YWJfZWxlbV92YWx1ZShlbGVtLCBtYXAtXHUwMDNla2V5X3NpemUpO1xuJiM0MztcdFx0XHRcdGN0eC52YWx1ZSA9IGh0YWJfZWxlbV92YWx1ZShpbmZvLVx1MDAzZWh0YWIsIGVsZW0pO1xuIFx0XHRcdH0gZWxzZSB7XG4gXHRcdFx0XHRyb3VuZHVwX3ZhbHVlX3NpemUgPSByb3VuZF91cChtYXAtXHUwMDNldmFsdWVfc2l6ZSwgOCk7XG4tXHRcdFx0XHRwcHRyID0gaHRhYl9lbGVtX2dldF9wdHIoZWxlbSwgbWFwLVx1MDAzZWtleV9zaXplKTtcbiYjNDM7XHRcdFx0XHRwcHRyID0gaHRhYl9lbGVtX2dldF9wdHIoaW5mby1cdTAwM2VodGFiLCBlbGVtKTtcbiBcdFx0XHRcdGZvcl9lYWNoX3Bvc3NpYmxlX2NwdShjcHUpIHtcbiBcdFx0XHRcdFx0Y29weV9tYXBfdmFsdWVfbG9uZyhtYXAsIGluZm8tXHUwMDNlcGVyY3B1X3ZhbHVlX2J1ZiAmIzQzOyBvZmYsXG4gXHRcdFx0XHRcdFx0XHQgICAgcGVyX2NwdV9wdHIocHB0ciwgY3B1KSk7XG5AQCAtMjI5MywxMyAmIzQzOzI0MDUsMTMgQEAgc3RhdGljIGxvbmcgYnBmX2Zvcl9lYWNoX2hhc2hfZWxlbShzdHJ1Y3QgYnBmX21hcCAqbWFwLCBicGZfY2FsbGJhY2tfdCBjYWxsYmFja19cbiBcdFx0cmN1X3JlYWRfbG9jaygpO1xuIFx0XHRoZWFkID0gXHUwMDI2Yi1cdTAwM2VoZWFkO1xuIFx0XHRobGlzdF9udWxsc19mb3JfZWFjaF9lbnRyeV9zYWZlKGVsZW0sIG4sIGhlYWQsIGhhc2hfbm9kZSkge1xuLVx0XHRcdGtleSA9IGVsZW0tXHUwMDNla2V5O1xuJiM0MztcdFx0XHRrZXkgPSBodGFiX2VsZW1fa2V5KGh0YWIsIGVsZW0pO1xuIFx0XHRcdGlmIChpc19wZXJjcHUpIHtcbiBcdFx0XHRcdC8qIGN1cnJlbnQgY3B1IHZhbHVlIGZvciBwZXJjcHUgbWFwICovXG4tXHRcdFx0XHRwcHRyID0gaHRhYl9lbGVtX2dldF9wdHIoZWxlbSwgbWFwLVx1MDAzZWtleV9zaXplKTtcbiYjNDM7XHRcdFx0XHRwcHRyID0gaHRhYl9lbGVtX2dldF9wdHIoaHRhYiwgZWxlbSk7XG4gXHRcdFx0XHR2YWwgPSB0aGlzX2NwdV9wdHIocHB0cik7XG4gXHRcdFx0fSBlbHNlIHtcbi1cdFx0XHRcdHZhbCA9IGh0YWJfZWxlbV92YWx1ZShlbGVtLCBtYXAtXHUwMDNla2V5X3NpemUpO1xuJiM0MztcdFx0XHRcdHZhbCA9IGh0YWJfZWxlbV92YWx1ZShodGFiLCBlbGVtKTtcbiBcdFx0XHR9XG4gXHRcdFx0bnVtX2VsZW1zJiM0MzsmIzQzOztcbiBcdFx0XHRyZXQgPSBjYWxsYmFja19mbigodTY0KShsb25nKW1hcCwgKHU2NCkobG9uZylrZXksXG5AQCAtMjQwMywxMCAmIzQzOzI1MTUsMTEgQEAgY29uc3Qgc3RydWN0IGJwZl9tYXBfb3BzIGh0YWJfbHJ1X21hcF9vcHMgPSB7XG4gLyogQ2FsbGVkIGZyb20gZUJQRiBwcm9ncmFtICovXG4gc3RhdGljIHZvaWQgKmh0YWJfcGVyY3B1X21hcF9sb29rdXBfZWxlbShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXkpXG4ge1xuJiM0MztcdHN0cnVjdCBicGZfaHRhYiAqaHRhYiA9IGNvbnRhaW5lcl9vZihtYXAsIHN0cnVjdCBicGZfaHRhYiwgbWFwKTtcbiBcdHN0cnVjdCBodGFiX2VsZW0gKmwgPSBfX2h0YWJfbWFwX2xvb2t1cF9lbGVtKG1hcCwga2V5KTtcbiBcbiBcdGlmIChsKVxuLVx0XHRyZXR1cm4gdGhpc19jcHVfcHRyKGh0YWJfZWxlbV9nZXRfcHRyKGwsIG1hcC1cdTAwM2VrZXlfc2l6ZSkpO1xuJiM0MztcdFx0cmV0dXJuIHRoaXNfY3B1X3B0cihodGFiX2VsZW1fZ2V0X3B0cihodGFiLCBsKSk7XG4gXHRlbHNlXG4gXHRcdHJldHVybiBOVUxMO1xuIH1cbkBAIC0yNDE0LDYgJiM0MzsyNTI3LDcgQEAgc3RhdGljIHZvaWQgKmh0YWJfcGVyY3B1X21hcF9sb29rdXBfZWxlbShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXkpXG4gLyogaW5saW5lIGJwZl9tYXBfbG9va3VwX2VsZW0oKSBjYWxsIGZvciBwZXItQ1BVIGhhc2htYXAgKi9cbiBzdGF0aWMgaW50IGh0YWJfcGVyY3B1X21hcF9nZW5fbG9va3VwKHN0cnVjdCBicGZfbWFwICptYXAsIHN0cnVjdCBicGZfaW5zbiAqaW5zbl9idWYpXG4ge1xuJiM0MztcdHN0cnVjdCBicGZfaHRhYiAqaHRhYiA9IGNvbnRhaW5lcl9vZihtYXAsIHN0cnVjdCBicGZfaHRhYiwgbWFwKTtcbiBcdHN0cnVjdCBicGZfaW5zbiAqaW5zbiA9IGluc25fYnVmO1xuIFxuIFx0aWYgKCFicGZfaml0X3N1cHBvcnRzX3BlcmNwdV9pbnNuKCkpXG5AQCAtMjQyNCw3ICYjNDM7MjUzOCw3IEBAIHN0YXRpYyBpbnQgaHRhYl9wZXJjcHVfbWFwX2dlbl9sb29rdXAoc3RydWN0IGJwZl9tYXAgKm1hcCwgc3RydWN0IGJwZl9pbnNuICppbnNuXG4gXHQqaW5zbiYjNDM7JiM0MzsgPSBCUEZfRU1JVF9DQUxMKF9faHRhYl9tYXBfbG9va3VwX2VsZW0pO1xuIFx0Kmluc24mIzQzOyYjNDM7ID0gQlBGX0pNUF9JTU0oQlBGX0pFUSwgQlBGX1JFR18wLCAwLCAzKTtcbiBcdCppbnNuJiM0MzsmIzQzOyA9IEJQRl9BTFU2NF9JTU0oQlBGX0FERCwgQlBGX1JFR18wLFxuLVx0XHRcdFx0b2Zmc2V0b2Yoc3RydWN0IGh0YWJfZWxlbSwga2V5KSAmIzQzOyByb3VuZHVwKG1hcC1cdTAwM2VrZXlfc2l6ZSwgOCkpO1xuJiM0MztcdFx0XHRcdGh0YWItXHUwMDNla2V5X29mZnNldCAmIzQzOyByb3VuZHVwKG1hcC1cdTAwM2VrZXlfc2l6ZSwgOCkpO1xuIFx0Kmluc24mIzQzOyYjNDM7ID0gQlBGX0xEWF9NRU0oQlBGX0RXLCBCUEZfUkVHXzAsIEJQRl9SRUdfMCwgMCk7XG4gXHQqaW5zbiYjNDM7JiM0MzsgPSBCUEZfTU9WNjRfUEVSQ1BVX1JFRyhCUEZfUkVHXzAsIEJQRl9SRUdfMCk7XG4gXG5AQCAtMjQzMyw2ICYjNDM7MjU0Nyw3IEBAIHN0YXRpYyBpbnQgaHRhYl9wZXJjcHVfbWFwX2dlbl9sb29rdXAoc3RydWN0IGJwZl9tYXAgKm1hcCwgc3RydWN0IGJwZl9pbnNuICppbnNuXG4gXG4gc3RhdGljIHZvaWQgKmh0YWJfcGVyY3B1X21hcF9sb29rdXBfcGVyY3B1X2VsZW0oc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5LCB1MzIgY3B1KVxuIHtcbiYjNDM7XHRzdHJ1Y3QgYnBmX2h0YWIgKmh0YWIgPSBjb250YWluZXJfb2YobWFwLCBzdHJ1Y3QgYnBmX2h0YWIsIG1hcCk7XG4gXHRzdHJ1Y3QgaHRhYl9lbGVtICpsO1xuIFxuIFx0aWYgKGNwdSBcdTAwM2U9IG5yX2NwdV9pZHMpXG5AQCAtMjQ0MCwxOCAmIzQzOzI1NTUsMTkgQEAgc3RhdGljIHZvaWQgKmh0YWJfcGVyY3B1X21hcF9sb29rdXBfcGVyY3B1X2VsZW0oc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5LFxuIFxuIFx0bCA9IF9faHRhYl9tYXBfbG9va3VwX2VsZW0obWFwLCBrZXkpO1xuIFx0aWYgKGwpXG4tXHRcdHJldHVybiBwZXJfY3B1X3B0cihodGFiX2VsZW1fZ2V0X3B0cihsLCBtYXAtXHUwMDNla2V5X3NpemUpLCBjcHUpO1xuJiM0MztcdFx0cmV0dXJuIHBlcl9jcHVfcHRyKGh0YWJfZWxlbV9nZXRfcHRyKGh0YWIsIGwpLCBjcHUpO1xuIFx0ZWxzZVxuIFx0XHRyZXR1cm4gTlVMTDtcbiB9XG4gXG4gc3RhdGljIHZvaWQgKmh0YWJfbHJ1X3BlcmNwdV9tYXBfbG9va3VwX2VsZW0oc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5KVxuIHtcbiYjNDM7XHRzdHJ1Y3QgYnBmX2h0YWIgKmh0YWIgPSBjb250YWluZXJfb2YobWFwLCBzdHJ1Y3QgYnBmX2h0YWIsIG1hcCk7XG4gXHRzdHJ1Y3QgaHRhYl9lbGVtICpsID0gX19odGFiX21hcF9sb29rdXBfZWxlbShtYXAsIGtleSk7XG4gXG4gXHRpZiAobCkge1xuLVx0XHRicGZfbHJ1X25vZGVfc2V0X3JlZihcdTAwMjZsLVx1MDAzZWxydV9ub2RlKTtcbi1cdFx0cmV0dXJuIHRoaXNfY3B1X3B0cihodGFiX2VsZW1fZ2V0X3B0cihsLCBtYXAtXHUwMDNla2V5X3NpemUpKTtcbiYjNDM7XHRcdGJwZl9scnVfbm9kZV9zZXRfcmVmKGh0YWJfZWxlbV9scnVfbm9kZShsKSk7XG4mIzQzO1x0XHRyZXR1cm4gdGhpc19jcHVfcHRyKGh0YWJfZWxlbV9nZXRfcHRyKGh0YWIsIGwpKTtcbiBcdH1cbiBcbiBcdHJldHVybiBOVUxMO1xuQEAgLTI0NTksNiAmIzQzOzI1NzUsNyBAQCBzdGF0aWMgdm9pZCAqaHRhYl9scnVfcGVyY3B1X21hcF9sb29rdXBfZWxlbShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXkpXG4gXG4gc3RhdGljIHZvaWQgKmh0YWJfbHJ1X3BlcmNwdV9tYXBfbG9va3VwX3BlcmNwdV9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSwgdTMyIGNwdSlcbiB7XG4mIzQzO1x0c3RydWN0IGJwZl9odGFiICpodGFiID0gY29udGFpbmVyX29mKG1hcCwgc3RydWN0IGJwZl9odGFiLCBtYXApO1xuIFx0c3RydWN0IGh0YWJfZWxlbSAqbDtcbiBcbiBcdGlmIChjcHUgXHUwMDNlPSBucl9jcHVfaWRzKVxuQEAgLTI0NjYsOCAmIzQzOzI1ODMsOCBAQCBzdGF0aWMgdm9pZCAqaHRhYl9scnVfcGVyY3B1X21hcF9sb29rdXBfcGVyY3B1X2VsZW0oc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa1xuIFxuIFx0bCA9IF9faHRhYl9tYXBfbG9va3VwX2VsZW0obWFwLCBrZXkpO1xuIFx0aWYgKGwpIHtcbi1cdFx0YnBmX2xydV9ub2RlX3NldF9yZWYoXHUwMDI2bC1cdTAwM2VscnVfbm9kZSk7XG4tXHRcdHJldHVybiBwZXJfY3B1X3B0cihodGFiX2VsZW1fZ2V0X3B0cihsLCBtYXAtXHUwMDNla2V5X3NpemUpLCBjcHUpO1xuJiM0MztcdFx0YnBmX2xydV9ub2RlX3NldF9yZWYoaHRhYl9lbGVtX2xydV9ub2RlKGwpKTtcbiYjNDM7XHRcdHJldHVybiBwZXJfY3B1X3B0cihodGFiX2VsZW1fZ2V0X3B0cihodGFiLCBsKSwgY3B1KTtcbiBcdH1cbiBcbiBcdHJldHVybiBOVUxMO1xuQEAgLTI0NzUsNiAmIzQzOzI1OTIsNyBAQCBzdGF0aWMgdm9pZCAqaHRhYl9scnVfcGVyY3B1X21hcF9sb29rdXBfcGVyY3B1X2VsZW0oc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa1xuIFxuIGludCBicGZfcGVyY3B1X2hhc2hfY29weShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXksIHZvaWQgKnZhbHVlLCB1NjQgbWFwX2ZsYWdzKVxuIHtcbiYjNDM7XHRzdHJ1Y3QgYnBmX2h0YWIgKmh0YWIgPSBjb250YWluZXJfb2YobWFwLCBzdHJ1Y3QgYnBmX2h0YWIsIG1hcCk7XG4gXHRzdHJ1Y3QgaHRhYl9lbGVtICpsO1xuIFx0dm9pZCBfX3BlcmNwdSAqcHB0cjtcbiBcdGludCByZXQgPSAtRU5PRU5UO1xuQEAgLTI0OTQsNyAmIzQzOzI2MTIsNyBAQCBpbnQgYnBmX3BlcmNwdV9oYXNoX2NvcHkoc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5LCB2b2lkICp2YWx1ZSwgdTY0IG1hcF9mbFxuIFx0LyogV2UgZG8gbm90IG1hcmsgTFJVIG1hcCBlbGVtZW50IGhlcmUgaW4gb3JkZXIgdG8gbm90IG1lc3MgdXBcbiBcdCAqIGV2aWN0aW9uIGhldXJpc3RpY3Mgd2hlbiB1c2VyIHNwYWNlIGRvZXMgYSBtYXAgd2Fsay5cbiBcdCAqL1xuLVx0cHB0ciA9IGh0YWJfZWxlbV9nZXRfcHRyKGwsIG1hcC1cdTAwM2VrZXlfc2l6ZSk7XG4mIzQzO1x0cHB0ciA9IGh0YWJfZWxlbV9nZXRfcHRyKGh0YWIsIGwpO1xuIFx0aWYgKG1hcF9mbGFncyBcdTAwMjYgQlBGX0ZfQ1BVKSB7XG4gXHRcdGNwdSA9IG1hcF9mbGFncyBcdTAwM2VcdTAwM2UgMzI7XG4gXHRcdGNvcHlfbWFwX3ZhbHVlKG1hcCwgdmFsdWUsIHBlcl9jcHVfcHRyKHBwdHIsIGNwdSkpO1xuQEAgLTI1MzIsNiAmIzQzOzI2NTAsNyBAQCBpbnQgYnBmX3BlcmNwdV9oYXNoX3VwZGF0ZShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXksIHZvaWQgKnZhbHVlLFxuIHN0YXRpYyB2b2lkIGh0YWJfcGVyY3B1X21hcF9zZXFfc2hvd19lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSxcbiBcdFx0XHRcdFx0ICBzdHJ1Y3Qgc2VxX2ZpbGUgKm0pXG4ge1xuJiM0MztcdHN0cnVjdCBicGZfaHRhYiAqaHRhYiA9IGNvbnRhaW5lcl9vZihtYXAsIHN0cnVjdCBicGZfaHRhYiwgbWFwKTtcbiBcdHN0cnVjdCBodGFiX2VsZW0gKmw7XG4gXHR2b2lkIF9fcGVyY3B1ICpwcHRyO1xuIFx0aW50IGNwdTtcbkBAIC0yNTQ2LDcgJiM0MzsyNjY1LDcgQEAgc3RhdGljIHZvaWQgaHRhYl9wZXJjcHVfbWFwX3NlcV9zaG93X2VsZW0oc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5LFxuIFxuIFx0YnRmX3R5cGVfc2VxX3Nob3cobWFwLVx1MDAzZWJ0ZiwgbWFwLVx1MDAzZWJ0Zl9rZXlfdHlwZV9pZCwga2V5LCBtKTtcbiBcdHNlcV9wdXRzKG0sIFwmIzM0Ozoge1xcblwmIzM0Oyk7XG4tXHRwcHRyID0gaHRhYl9lbGVtX2dldF9wdHIobCwgbWFwLVx1MDAzZWtleV9zaXplKTtcbiYjNDM7XHRwcHRyID0gaHRhYl9lbGVtX2dldF9wdHIoaHRhYiwgbCk7XG4gXHRmb3JfZWFjaF9wb3NzaWJsZV9jcHUoY3B1KSB7XG4gXHRcdHNlcV9wcmludGYobSwgXCYjMzQ7XFx0Y3B1JWQ6IFwmIzM0OywgY3B1KTtcbiBcdFx0YnRmX3R5cGVfc2VxX3Nob3cobWFwLVx1MDAzZWJ0ZiwgbWFwLVx1MDAzZWJ0Zl92YWx1ZV90eXBlX2lkLFxuQEAgLTI2MjAsNyAmIzQzOzI3MzksNyBAQCBzdGF0aWMgdm9pZCBmZF9odGFiX21hcF9mcmVlKHN0cnVjdCBicGZfbWFwICptYXApXG4gXHRcdGhlYWQgPSBzZWxlY3RfYnVja2V0KGh0YWIsIGkpO1xuIFxuIFx0XHRobGlzdF9udWxsc19mb3JfZWFjaF9lbnRyeV9zYWZlKGwsIG4sIGhlYWQsIGhhc2hfbm9kZSkge1xuLVx0XHRcdHZvaWQgKnB0ciA9IGZkX2h0YWJfbWFwX2dldF9wdHIobWFwLCBsKTtcbiYjNDM7XHRcdFx0dm9pZCAqcHRyID0gZmRfaHRhYl9tYXBfZ2V0X3B0cihodGFiLCBsKTtcbiBcbiBcdFx0XHRtYXAtXHUwMDNlb3BzLVx1MDAzZW1hcF9mZF9wdXRfcHRyKG1hcCwgcHRyLCBmYWxzZSk7XG4gXHRcdH1cbkBAIC0yNzA1LDYgJiM0MzsyODI0LDcgQEAgc3RhdGljIHZvaWQgKmh0YWJfb2ZfbWFwX2xvb2t1cF9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSlcbiBzdGF0aWMgaW50IGh0YWJfb2ZfbWFwX2dlbl9sb29rdXAoc3RydWN0IGJwZl9tYXAgKm1hcCxcbiBcdFx0XHRcdCAgc3RydWN0IGJwZl9pbnNuICppbnNuX2J1ZilcbiB7XG4mIzQzO1x0c3RydWN0IGJwZl9odGFiICpodGFiID0gY29udGFpbmVyX29mKG1hcCwgc3RydWN0IGJwZl9odGFiLCBtYXApO1xuIFx0c3RydWN0IGJwZl9pbnNuICppbnNuID0gaW5zbl9idWY7XG4gXHRjb25zdCBpbnQgcmV0ID0gQlBGX1JFR18wO1xuIFxuQEAgLTI3MTMsNyAmIzQzOzI4MzMsNyBAQCBzdGF0aWMgaW50IGh0YWJfb2ZfbWFwX2dlbl9sb29rdXAoc3RydWN0IGJwZl9tYXAgKm1hcCxcbiBcdCppbnNuJiM0MzsmIzQzOyA9IEJQRl9FTUlUX0NBTEwoX19odGFiX21hcF9sb29rdXBfZWxlbSk7XG4gXHQqaW5zbiYjNDM7JiM0MzsgPSBCUEZfSk1QX0lNTShCUEZfSkVRLCByZXQsIDAsIDIpO1xuIFx0Kmluc24mIzQzOyYjNDM7ID0gQlBGX0FMVTY0X0lNTShCUEZfQURELCByZXQsXG4tXHRcdFx0XHRvZmZzZXRvZihzdHJ1Y3QgaHRhYl9lbGVtLCBrZXkpICYjNDM7XG4mIzQzO1x0XHRcdFx0aHRhYi1cdTAwM2VrZXlfb2Zmc2V0ICYjNDM7XG4gXHRcdFx0XHRyb3VuZF91cChtYXAtXHUwMDNla2V5X3NpemUsIDgpKTtcbiBcdCppbnNuJiM0MzsmIzQzOyA9IEJQRl9MRFhfTUVNKEJQRl9EVywgcmV0LCByZXQsIDApO1xuIFxuQEAgLTMxMTIsNyAmIzQzOzMyMzIsNyBAQCBzdGF0aWMgaW50IHJodGFiX21hcF9jaGVja19idGYoc3RydWN0IGJwZl9tYXAgKm1hcCwgY29uc3Qgc3RydWN0IGJ0ZiAqYnRmLFxuIHtcbiBcdHN0cnVjdCBicGZfcmh0YWIgKnJodGFiID0gY29udGFpbmVyX29mKG1hcCwgc3RydWN0IGJwZl9yaHRhYiwgbWFwKTtcbiBcbi1cdHJldHVybiBicGZfbWFfc2V0X2R0b3IobWFwLCBcdTAwMjZyaHRhYi1cdTAwM2VtYSwgcmh0YWJfbWVtX2R0b3IpO1xuJiM0MztcdHJldHVybiBicGZfbWFfc2V0X2R0b3IobWFwLCBcdTAwMjZyaHRhYi1cdTAwM2VtYSwgcmh0YWJfbWVtX2R0b3IsIG9mZnNldG9mKHN0cnVjdCByaHRhYl9lbGVtLCBkYXRhKSk7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIHJodGFiX21hcF9mcmVlX2ludGVybmFsX3N0cnVjdHMoc3RydWN0IGJwZl9tYXAgKm1hcClcbkBAIC0zNTMzLDMgJiM0MzszNjUzLDE2IEBAIGNvbnN0IHN0cnVjdCBicGZfbWFwX29wcyByaHRhYl9tYXBfb3BzID0ge1xuIFx0Lm1hcF9idGZfaWQgPSBcdTAwMjZyaHRhYl9tYXBfYnRmX2lkc1swXSxcbiBcdC5pdGVyX3NlcV9pbmZvID0gXHUwMDI2cmhhc2hfaXRlcl9zZXFfaW5mbyxcbiB9O1xuJiM0MztcbiYjNDM7c2l6ZV90IGJwZl9odGFiX21hcF9tZXRhX3NpemUodm9pZClcbiYjNDM7e1xuJiM0MztcdHJldHVybiBzaXplb2Yoc3RydWN0IGJwZl9odGFiKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7dm9pZCBicGZfaHRhYl9tYXBfbWV0YV9pbml0KHN0cnVjdCBicGZfbWFwICppbm5lcl9tYXBfbWV0YSwgc3RydWN0IGJwZl9tYXAgKmlubmVyX21hcClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBicGZfaHRhYiAqaW5uZXJfaHRhYl9tZXRhID0gY29udGFpbmVyX29mKGlubmVyX21hcF9tZXRhLCBzdHJ1Y3QgYnBmX2h0YWIsIG1hcCk7XG4mIzQzO1x0c3RydWN0IGJwZl9odGFiICppbm5lcl9odGFiID0gY29udGFpbmVyX29mKGlubmVyX21hcCwgc3RydWN0IGJwZl9odGFiLCBtYXApO1xuJiM0MztcbiYjNDM7XHRpbm5lcl9odGFiX21ldGEtXHUwMDNla2V5X29mZnNldCA9IGlubmVyX2h0YWItXHUwMDNla2V5X29mZnNldDtcbiYjNDM7fVxuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvbWFwX2luX21hcC5jIGIva2VybmVsL2JwZi9tYXBfaW5fbWFwLmNcbmluZGV4IGQyY2JhYjRiZGY2NDRhLi5iMmRiNWQwYzk4YmVlMiAxMDA2NDRcbi0tLSBhL2tlcm5lbC9icGYvbWFwX2luX21hcC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvYnBmL21hcF9pbl9tYXAuY1xuQEAgLTcsNiAmIzQzOzcsMTUgQEBcbiBcbiAjaW5jbHVkZSBcJiMzNDttYXBfaW5fbWFwLmhcJiMzNDtcbiBcbiYjNDM7c3RhdGljIGJvb2wgYnBmX21hcF90eXBlX2lzX2h0YWIoZW51bSBicGZfbWFwX3R5cGUgdHlwZSlcbiYjNDM7e1xuJiM0MztcdHJldHVybiB0eXBlID09IEJQRl9NQVBfVFlQRV9IQVNIIHx8XG4mIzQzO1x0ICAgICAgIHR5cGUgPT0gQlBGX01BUF9UWVBFX1BFUkNQVV9IQVNIIHx8XG4mIzQzO1x0ICAgICAgIHR5cGUgPT0gQlBGX01BUF9UWVBFX0xSVV9IQVNIIHx8XG4mIzQzO1x0ICAgICAgIHR5cGUgPT0gQlBGX01BUF9UWVBFX0xSVV9QRVJDUFVfSEFTSCB8fFxuJiM0MztcdCAgICAgICB0eXBlID09IEJQRl9NQVBfVFlQRV9IQVNIX09GX01BUFM7XG4mIzQzO31cbiYjNDM7XG4gc3RydWN0IGJwZl9tYXAgKmJwZl9tYXBfbWV0YV9hbGxvYyhpbnQgaW5uZXJfbWFwX3VmZClcbiB7XG4gXHRzdHJ1Y3QgYnBmX21hcCAqaW5uZXJfbWFwLCAqaW5uZXJfbWFwX21ldGE7XG5AQCAtMjksNiAmIzQzOzM4LDggQEAgc3RydWN0IGJwZl9tYXAgKmJwZl9tYXBfbWV0YV9hbGxvYyhpbnQgaW5uZXJfbWFwX3VmZClcbiBcdC8qIEluIHNvbWUgY2FzZXMgdmVyaWZpZXIgbmVlZHMgdG8gYWNjZXNzIGJleW9uZCBqdXN0IGJhc2UgbWFwLiAqL1xuIFx0aWYgKGlubmVyX21hcC1cdTAwM2VvcHMgPT0gXHUwMDI2YXJyYXlfbWFwX29wcyB8fCBpbm5lcl9tYXAtXHUwMDNlb3BzID09IFx1MDAyNnBlcmNwdV9hcnJheV9tYXBfb3BzKVxuIFx0XHRpbm5lcl9tYXBfbWV0YV9zaXplID0gc2l6ZW9mKHN0cnVjdCBicGZfYXJyYXkpO1xuJiM0MztcdGVsc2UgaWYgKGJwZl9tYXBfdHlwZV9pc19odGFiKGlubmVyX21hcC1cdTAwM2VtYXBfdHlwZSkpXG4mIzQzO1x0XHRpbm5lcl9tYXBfbWV0YV9zaXplID0gYnBmX2h0YWJfbWFwX21ldGFfc2l6ZSgpO1xuIFxuIFx0aW5uZXJfbWFwX21ldGEgPSBremFsbG9jKGlubmVyX21hcF9tZXRhX3NpemUsIEdGUF9VU0VSKTtcbiBcdGlmICghaW5uZXJfbWFwX21ldGEpXG5AQCAtNzAsNiAmIzQzOzgxLDggQEAgc3RydWN0IGJwZl9tYXAgKmJwZl9tYXBfbWV0YV9hbGxvYyhpbnQgaW5uZXJfbWFwX3VmZClcbiBcdFx0aW5uZXJfYXJyYXlfbWV0YS1cdTAwM2VpbmRleF9tYXNrID0gaW5uZXJfYXJyYXktXHUwMDNlaW5kZXhfbWFzaztcbiBcdFx0aW5uZXJfYXJyYXlfbWV0YS1cdTAwM2VlbGVtX3NpemUgPSBpbm5lcl9hcnJheS1cdTAwM2VlbGVtX3NpemU7XG4gXHRcdGlubmVyX21hcF9tZXRhLVx1MDAzZWJ5cGFzc19zcGVjX3YxID0gaW5uZXJfbWFwLVx1MDAzZWJ5cGFzc19zcGVjX3YxO1xuJiM0MztcdH0gZWxzZSBpZiAoYnBmX21hcF90eXBlX2lzX2h0YWIoaW5uZXJfbWFwLVx1MDAzZW1hcF90eXBlKSkge1xuJiM0MztcdFx0YnBmX2h0YWJfbWFwX21ldGFfaW5pdChpbm5lcl9tYXBfbWV0YSwgaW5uZXJfbWFwKTtcbiBcdH1cbiBcdHJldHVybiBpbm5lcl9tYXBfbWV0YTtcbiB9XG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9tYXBfaW5fbWFwLmggYi9rZXJuZWwvYnBmL21hcF9pbl9tYXAuaFxuaW5kZXggN2Q2MTYwMjM1NGRlODAuLjFlZGMyMDU3NzJkOGNkIDEwMDY0NFxuLS0tIGEva2VybmVsL2JwZi9tYXBfaW5fbWFwLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9icGYvbWFwX2luX21hcC5oXG5AQCAtMTUsNSAmIzQzOzE1LDcgQEAgdm9pZCAqYnBmX21hcF9mZF9nZXRfcHRyKHN0cnVjdCBicGZfbWFwICptYXAsIHN0cnVjdCBmaWxlICptYXBfZmlsZSxcbiBcdFx0XHQgaW50IHVmZCk7XG4gdm9pZCBicGZfbWFwX2ZkX3B1dF9wdHIoc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqcHRyLCBib29sIG5lZWRfZGVmZXIpO1xuIHUzMiBicGZfbWFwX2ZkX3N5c19sb29rdXBfZWxlbSh2b2lkICpwdHIpO1xuJiM0MztzaXplX3QgYnBmX2h0YWJfbWFwX21ldGFfc2l6ZSh2b2lkKTtcbiYjNDM7dm9pZCBicGZfaHRhYl9tYXBfbWV0YV9pbml0KHN0cnVjdCBicGZfbWFwICppbm5lcl9tYXBfbWV0YSwgc3RydWN0IGJwZl9tYXAgKmlubmVyX21hcCk7XG4gXG4gI2VuZGlmXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL21hcF9wdHJfa2Vybi5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL21hcF9wdHJfa2Vybi5jXG5pbmRleCAzNzNjOGQxN2VhNTU3ZC4uNmJkNGNiNjhjMjBjMWMgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvbWFwX3B0cl9rZXJuLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9tYXBfcHRyX2tlcm4uY1xuQEAgLTExNCw3ICYjNDM7MTE0LDcgQEAgc3RhdGljIGlubGluZSBpbnQgY2hlY2tfaGFzaCh2b2lkKVxuIFx0VkVSSUZZKGNoZWNrX2RlZmF1bHRfbm9pbmxpbmUoXHUwMDI2aGFzaC1cdTAwM2VtYXAsIG1hcCkpO1xuIFxuIFx0VkVSSUZZKGhhc2gtXHUwMDNlbl9idWNrZXRzID09IE1BWF9FTlRSSUVTKTtcbi1cdFZFUklGWShoYXNoLVx1MDAzZWVsZW1fc2l6ZSA9PSA2NCk7XG4mIzQzO1x0VkVSSUZZKGhhc2gtXHUwMDNlZWxlbV9zaXplID09IDMyKTtcbiBcbiBcdFZFUklGWShoYXNoLVx1MDAzZWNvdW50LmNvdW50ZXIgPT0gMCk7XG4gXHRWRVJJRlkoYnBmX21hcF9zdW1fZWxlbV9jb3VudChtYXApID09IDApO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIzIDIyOjM4PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCUEZfU1lTQ0FMTCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2h0YWJfbWFwX2FsbG9jJiMzNDssCiAgICAmIzM0O2h0YWJfbWFwX3VwZGF0ZV9lbGVtJiMzNDssCiAgICAmIzM0O2h0YWJfbHJ1X21hcF91cGRhdGVfZWxlbSYjMzQ7LAogICAgJiMzNDtfX2h0YWJfbHJ1X3BlcmNwdV9tYXBfdXBkYXRlX2VsZW0mIzM0OywKICAgICYjMzQ7aHRhYl9tYXBfZGVsZXRlX2VsZW0mIzM0OywKICAgICYjMzQ7aHRhYl9scnVfbWFwX2RlbGV0ZV9lbGVtJiMzNDssCiAgICAmIzM0O19faHRhYl9tYXBfbG9va3VwX2FuZF9kZWxldGVfZWxlbSYjMzQ7LAogICAgJiMzNDtfX2h0YWJfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2JhdGNoJiMzNDssCiAgICAmIzM0O2JwZl9tYXBfbWV0YV9hbGxvYyYjMzQ7LAogICAgJiMzNDtodGFiX21hcF9nZW5fbG9va3VwJiMzNDssCiAgICAmIzM0O2h0YWJfbHJ1X21hcF9nZW5fbG9va3VwJiMzNDssCiAgICAmIzM0O2h0YWJfcGVyY3B1X21hcF9nZW5fbG9va3VwJiMzNDssCiAgICAmIzM0O2h0YWJfb2ZfbWFwX2dlbl9sb29rdXAmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZnVuY3Rpb25hbGx5IG1vZGlmaWVzIHRoZSBtZW1vcnkgbGF5b3V0IGFuZCBvcGVyYXRpb25zIG9mIEJQRiBoYXNoIG1hcHMgKGluY2x1ZGluZyBMUlUgYW5kIHBlci1DUFUgdmFyaWFudHMpLiBJdCBpbnRyb2R1Y2VzIG5ldyBzdHJ1Y3R1cmVzIGFuZCBvZmZzZXRzIGZvciBoYXNoIG1hcCBlbGVtZW50cywgd2hpY2ggYWZmZWN0cyBhbGxvY2F0aW9uLCB1cGRhdGVzLCBkZWxldGlvbnMsIGFuZCBKSVQgbG9va3VwIGdlbmVyYXRpb24uIEZ1enppbmcgaXMgbmVlZGVkIHRvIGVuc3VyZSBtZW1vcnkgc2FmZXR5IGFuZCBjb3JyZWN0bmVzcyBvZiB0aGVzZSBjb3JlIEJQRiBtYXAgb3BlcmF0aW9ucy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLApldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXQKICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LAogICBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMjQzYTI3MDY0MGUwZGM5MDFlNGE3OGI1OTliMDc0OGQ1OWJmN2I2MwpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUaHUgSnVsIDIzIDIyOjM4OjQwIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9oYXNodGFiLmMgYi9rZXJuZWwvYnBmL2hhc2h0YWIuYwppbmRleCA5ZjM5NGUxYWEyZTg1Yi4uYjhjMzBkNDAyOTU4NzkgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9icGYvaGFzaHRhYi5jCiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9icGYvaGFzaHRhYi5jCkBAIC0xMDIsNiAmIzQzOzEwMiw3IEBAIHN0cnVjdCBicGZfaHRhYiB7CiAJYm9vbCB1c2VfcGVyY3B1X2NvdW50ZXI7CiAJdTMyIG5fYnVja2V0czsJLyogbnVtYmVyIG9mIGhhc2ggYnVja2V0cyAqLwogCXUzMiBlbGVtX3NpemU7CS8qIHNpemUgb2YgZWFjaCBlbGVtZW50IGluIGJ5dGVzICovCiYjNDM7CXUzMiBrZXlfb2Zmc2V0OwkvKiBvZmZzZXQgb2Yga2V5IGluIGJ5dGVzICovCiAJdTMyIGhhc2hybmQ7CiB9OwogCkBAIC0xMTcsMTggJiM0MzsxMTgsNDYgQEAgc3RydWN0IGh0YWJfZWxlbSB7CiAJCQl9OwogCQl9OwogCX07CiYjNDM7CXUzMiBoYXNoOyAvKiBPbmx5IHdoZW4gaHRhYl9oYXNfaGFzaCgpICovCiYjNDM7fSBfX2FsaWduZWQoOCk7CiYjNDM7CiYjNDM7c3RydWN0IGh0YWJfZWxlbV9scnUgewogCXVuaW9uIHsKLQkJLyogcG9pbnRlciB0byBwZXItY3B1IHBvaW50ZXIgKi8KLQkJdm9pZCAqcHRyX3RvX3BwdHI7Ci0JCXN0cnVjdCBicGZfbHJ1X25vZGUgbHJ1X25vZGU7CiYjNDM7CQlzdHJ1Y3QgaGxpc3RfbnVsbHNfbm9kZSBoYXNoX25vZGU7CiYjNDM7CQlzdHJ1Y3QgewomIzQzOwkJCXZvaWQgKnBhZGRpbmc7CiYjNDM7CQkJdW5pb24gewomIzQzOwkJCQlzdHJ1Y3QgcGNwdV9mcmVlbGlzdF9ub2RlIGZub2RlOwomIzQzOwkJCQlzdHJ1Y3QgaHRhYl9lbGVtX2xydSAqYmF0Y2hfZmxpbms7CiYjNDM7CQkJfTsKJiM0MzsJCX07CiAJfTsKJiM0MzsJc3RydWN0IGJwZl9scnVfbm9kZSBscnVfbm9kZTsKIAl1MzIgaGFzaDsKLQljaGFyIGtleVtdIF9fYWxpZ25lZCg4KTsKLX07CiYjNDM7fSBfX2FsaWduZWQoOCk7CiYjNDM7CiYjNDM7LyogT25seSBmb3Igbm9uLXByZWFsbG9jYXRlZCBQQ1BVIG1hcHMuIFByZWFsbG9jYXRlZCBQQ1BVIG1hcHMgZG9uJiMzOTt0IG5lZWQKJiM0MzsgKiBwdHJfdG9fcHB0ciwgYW5kIHVzZSBodGFiX2VsZW0uCiYjNDM7ICovCiYjNDM7c3RydWN0IGh0YWJfZWxlbV9wY3B1IHsKJiM0MzsJdW5pb24gewomIzQzOwkJc3RydWN0IGhsaXN0X251bGxzX25vZGUgaGFzaF9ub2RlOwomIzQzOwkJc3RydWN0IHsKJiM0MzsJCQl2b2lkICpwYWRkaW5nOwomIzQzOwkJCXVuaW9uIHsKJiM0MzsJCQkJc3RydWN0IHBjcHVfZnJlZWxpc3Rfbm9kZSBmbm9kZTsKJiM0MzsJCQkJc3RydWN0IGh0YWJfZWxlbV9wY3B1ICpiYXRjaF9mbGluazsKJiM0MzsJCQl9OwomIzQzOwkJfTsKJiM0MzsJfTsKJiM0MzsJdm9pZCAqcHRyX3RvX3BwdHI7CiYjNDM7CXUzMiBoYXNoOyAvKiBPbmx5IHdoZW4gaHRhYl9oYXNfaGFzaCgpICovCiYjNDM7fSBfX2FsaWduZWQoOCk7CiAKIHN0cnVjdCBodGFiX2J0Zl9yZWNvcmQgewogCXN0cnVjdCBidGZfcmVjb3JkICpyZWNvcmQ7CiAJdTMyIGtleV9zaXplOwomIzQzOwl1MzIga2V5X29mZnNldDsKIH07CiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBodGFiX2lzX3ByZWFsbG9jKGNvbnN0IHN0cnVjdCBicGZfaHRhYiAqaHRhYikKQEAgLTEzNiw2ICYjNDM7MTY1LDIxIEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBodGFiX2lzX3ByZWFsbG9jKGNvbnN0IHN0cnVjdCBicGZfaHRhYiAqaHRhYikKIAlyZXR1cm4gIShodGFiLSZndDttYXAubWFwX2ZsYWdzICZhbXA7IEJQRl9GX05PX1BSRUFMTE9DKTsKIH0KIAomIzQzO3N0YXRpYyBpbmxpbmUgc3RydWN0IGJwZl9scnVfbm9kZSAqaHRhYl9lbGVtX2xydV9ub2RlKHN0cnVjdCBodGFiX2VsZW0gKmwpCiYjNDM7ewomIzQzOwlyZXR1cm4gJmFtcDsoKHN0cnVjdCBodGFiX2VsZW1fbHJ1ICopbCktJmd0O2xydV9ub2RlOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgKmh0YWJfZWxlbV9nZXRfcHRyX3RvX3BwdHIoc3RydWN0IGh0YWJfZWxlbSAqbCkKJiM0Mzt7CiYjNDM7CXJldHVybiAoKHN0cnVjdCBodGFiX2VsZW1fcGNwdSAqKWwpLSZndDtwdHJfdG9fcHB0cjsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGlubGluZSB2b2lkIGh0YWJfZWxlbV9zZXRfcHRyX3RvX3BwdHIoc3RydWN0IGh0YWJfZWxlbSAqbCwgdm9pZCAqcHRyKQomIzQzO3sKJiM0MzsJKChzdHJ1Y3QgaHRhYl9lbGVtX3BjcHUgKilsKS0mZ3Q7cHRyX3RvX3BwdHIgPSBwdHI7CiYjNDM7fQomIzQzOwogc3RhdGljIHZvaWQgaHRhYl9pbml0X2J1Y2tldHMoc3RydWN0IGJwZl9odGFiICpodGFiKQogewogCXVuc2lnbmVkIGludCBpOwpAQCAtMTgzLDI1ICYjNDM7MjI3LDMwIEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBpc19mZF9odGFiKGNvbnN0IHN0cnVjdCBicGZfaHRhYiAqaHRhYikKIAlyZXR1cm4gaHRhYi0mZ3Q7bWFwLm1hcF90eXBlID09IEJQRl9NQVBfVFlQRV9IQVNIX09GX01BUFM7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCAqaHRhYl9lbGVtX3ZhbHVlKHN0cnVjdCBodGFiX2VsZW0gKmwsIHUzMiBrZXlfc2l6ZSkKJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgKmh0YWJfZWxlbV9rZXkoc3RydWN0IGJwZl9odGFiICpodGFiLCBzdHJ1Y3QgaHRhYl9lbGVtICpsKQomIzQzO3sKJiM0MzsJcmV0dXJuICh2b2lkICopbCAmIzQzOyBodGFiLSZndDtrZXlfb2Zmc2V0OwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgKmh0YWJfZWxlbV92YWx1ZShzdHJ1Y3QgYnBmX2h0YWIgKmh0YWIsIHN0cnVjdCBodGFiX2VsZW0gKmwpCiB7Ci0JcmV0dXJuIGwtJmd0O2tleSAmIzQzOyByb3VuZF91cChrZXlfc2l6ZSwgOCk7CiYjNDM7CXJldHVybiBodGFiX2VsZW1fa2V5KGh0YWIsIGwpICYjNDM7IHJvdW5kX3VwKGh0YWItJmd0O21hcC5rZXlfc2l6ZSwgOCk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBodGFiX2VsZW1fc2V0X3B0cihzdHJ1Y3QgaHRhYl9lbGVtICpsLCB1MzIga2V5X3NpemUsCiYjNDM7c3RhdGljIGlubGluZSB2b2lkIGh0YWJfZWxlbV9zZXRfcHRyKHN0cnVjdCBicGZfaHRhYiAqaHRhYiwgc3RydWN0IGh0YWJfZWxlbSAqbCwKIAkJCQkgICAgIHZvaWQgX19wZXJjcHUgKnBwdHIpCiB7Ci0JKih2b2lkIF9fcGVyY3B1ICoqKWh0YWJfZWxlbV92YWx1ZShsLCBrZXlfc2l6ZSkgPSBwcHRyOwomIzQzOwkqKHZvaWQgX19wZXJjcHUgKiopaHRhYl9lbGVtX3ZhbHVlKGh0YWIsIGwpID0gcHB0cjsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIF9fcGVyY3B1ICpodGFiX2VsZW1fZ2V0X3B0cihzdHJ1Y3QgaHRhYl9lbGVtICpsLCB1MzIga2V5X3NpemUpCiYjNDM7c3RhdGljIGlubGluZSB2b2lkIF9fcGVyY3B1ICpodGFiX2VsZW1fZ2V0X3B0cihzdHJ1Y3QgYnBmX2h0YWIgKmh0YWIsIHN0cnVjdCBodGFiX2VsZW0gKmwpCiB7Ci0JcmV0dXJuICoodm9pZCBfX3BlcmNwdSAqKilodGFiX2VsZW1fdmFsdWUobCwga2V5X3NpemUpOwomIzQzOwlyZXR1cm4gKih2b2lkIF9fcGVyY3B1ICoqKWh0YWJfZWxlbV92YWx1ZShodGFiLCBsKTsKIH0KIAotc3RhdGljIHZvaWQgKmZkX2h0YWJfbWFwX2dldF9wdHIoY29uc3Qgc3RydWN0IGJwZl9tYXAgKm1hcCwgc3RydWN0IGh0YWJfZWxlbSAqbCkKJiM0MztzdGF0aWMgdm9pZCAqZmRfaHRhYl9tYXBfZ2V0X3B0cihzdHJ1Y3QgYnBmX2h0YWIgKmh0YWIsIHN0cnVjdCBodGFiX2VsZW0gKmwpCiB7Ci0JcmV0dXJuICoodm9pZCAqKilodGFiX2VsZW1fdmFsdWUobCwgbWFwLSZndDtrZXlfc2l6ZSk7CiYjNDM7CXJldHVybiAqKHZvaWQgKiopaHRhYl9lbGVtX3ZhbHVlKGh0YWIsIGwpOwogfQogCiBzdGF0aWMgc3RydWN0IGh0YWJfZWxlbSAqZ2V0X2h0YWJfZWxlbShzdHJ1Y3QgYnBmX2h0YWIgKmh0YWIsIGludCBpKQpAQCAtMjA5LDYgJiM0MzsyNTgsMzMgQEAgc3RhdGljIHN0cnVjdCBodGFiX2VsZW0gKmdldF9odGFiX2VsZW0oc3RydWN0IGJwZl9odGFiICpodGFiLCBpbnQgaSkKIAlyZXR1cm4gKHN0cnVjdCBodGFiX2VsZW0gKikgKGh0YWItJmd0O2VsZW1zICYjNDM7IGkgKiAodTY0KWh0YWItJmd0O2VsZW1fc2l6ZSk7CiB9CiAKJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgaHRhYl9oYXNfaGFzaChjb25zdCBzdHJ1Y3QgYnBmX2h0YWIgKmh0YWIpCiYjNDM7ewomIzQzOwlyZXR1cm4gaHRhYl9pc19scnUoaHRhYikgfHwgaHRhYi0mZ3Q7bWFwLmtleV9zaXplICZndDsgODsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGlubGluZSB1MzIgaHRhYl9lbGVtX2hhc2goc3RydWN0IGJwZl9odGFiICpodGFiLCBzdHJ1Y3QgaHRhYl9lbGVtICpsKQomIzQzO3sKJiM0MzsJaWYgKGh0YWJfaXNfbHJ1KGh0YWIpKQomIzQzOwkJcmV0dXJuICgoc3RydWN0IGh0YWJfZWxlbV9scnUgKilsKS0mZ3Q7aGFzaDsKJiM0MzsJZWxzZSBpZiAoaHRhYl9pc19wZXJjcHUoaHRhYikgJmFtcDsmYW1wOyAhaHRhYl9pc19wcmVhbGxvYyhodGFiKSkKJiM0MzsJCXJldHVybiAoKHN0cnVjdCBodGFiX2VsZW1fcGNwdSAqKWwpLSZndDtoYXNoOwomIzQzOwllbHNlCiYjNDM7CQlyZXR1cm4gbC0mZ3Q7aGFzaDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGlubGluZSB2b2lkIGh0YWJfZWxlbV9zZXRfaGFzaChzdHJ1Y3QgYnBmX2h0YWIgKmh0YWIsIHN0cnVjdCBodGFiX2VsZW0gKmwsIHUzMiBoYXNoKQomIzQzO3sKJiM0MzsJaWYgKCFodGFiX2hhc19oYXNoKGh0YWIpKQomIzQzOwkJcmV0dXJuOwomIzQzOwlpZiAoaHRhYl9pc19scnUoaHRhYikpCiYjNDM7CQkoKHN0cnVjdCBodGFiX2VsZW1fbHJ1ICopbCktJmd0O2hhc2ggPSBoYXNoOwomIzQzOwllbHNlIGlmIChodGFiX2lzX3BlcmNwdShodGFiKSAmYW1wOyZhbXA7ICFodGFiX2lzX3ByZWFsbG9jKGh0YWIpKQomIzQzOwkJKChzdHJ1Y3QgaHRhYl9lbGVtX3BjcHUgKilsKS0mZ3Q7aGFzaCA9IGhhc2g7CiYjNDM7CWVsc2UKJiM0MzsJCWwtJmd0O2hhc2ggPSBoYXNoOwomIzQzO30KJiM0MzsKIC8qIEJvdGggcGVyY3B1IGFuZCBmZCBodGFiIHN1cHBvcnQgaW4tcGxhY2UgdXBkYXRlLCBzbyBubyBuZWVkIGZvcgogICogZXh0cmEgZWxlbS4gTFJVIGl0c2VsZiBjYW4gcmVtb3ZlIHRoZSBsZWFzdCB1c2VkIGVsZW1lbnQsIHNvCiAgKiB0aGVyZSBpcyBubyBuZWVkIGZvciBhbiBleHRyYSBlbGVtIGR1cmluZyBtYXBfdXBkYXRlLgpAQCAtMjMxLDcgJiM0MzszMDcsNyBAQCBzdGF0aWMgdm9pZCBodGFiX2ZyZWVfcHJlYWxsb2NlZF9pbnRlcm5hbF9zdHJ1Y3RzKHN0cnVjdCBicGZfaHRhYiAqaHRhYikKIAogCQllbGVtID0gZ2V0X2h0YWJfZWxlbShodGFiLCBpKTsKIAkJYnBmX21hcF9mcmVlX2ludGVybmFsX3N0cnVjdHMoJmFtcDtodGFiLSZndDttYXAsCi0JCQkJCSAgICAgIGh0YWJfZWxlbV92YWx1ZShlbGVtLCBodGFiLSZndDttYXAua2V5X3NpemUpKTsKJiM0MzsJCQkJCSAgICAgIGh0YWJfZWxlbV92YWx1ZShodGFiLCBlbGVtKSk7CiAJCWNvbmRfcmVzY2hlZCgpOwogCX0KIH0KQEAgLTI1NCw3ICYjNDM7MzMwLDcgQEAgc3RhdGljIHZvaWQgaHRhYl9mcmVlX3ByZWFsbG9jZWRfZmllbGRzKHN0cnVjdCBicGZfaHRhYiAqaHRhYikKIAogCQllbGVtID0gZ2V0X2h0YWJfZWxlbShodGFiLCBpKTsKIAkJaWYgKGh0YWJfaXNfcGVyY3B1KGh0YWIpKSB7Ci0JCQl2b2lkIF9fcGVyY3B1ICpwcHRyID0gaHRhYl9lbGVtX2dldF9wdHIoZWxlbSwgaHRhYi0mZ3Q7bWFwLmtleV9zaXplKTsKJiM0MzsJCQl2b2lkIF9fcGVyY3B1ICpwcHRyID0gaHRhYl9lbGVtX2dldF9wdHIoaHRhYiwgZWxlbSk7CiAJCQlpbnQgY3B1OwogCiAJCQlmb3JfZWFjaF9wb3NzaWJsZV9jcHUoY3B1KSB7CkBAIC0yNjMsNyAmIzQzOzMzOSw3IEBAIHN0YXRpYyB2b2lkIGh0YWJfZnJlZV9wcmVhbGxvY2VkX2ZpZWxkcyhzdHJ1Y3QgYnBmX2h0YWIgKmh0YWIpCiAJCQl9CiAJCX0gZWxzZSB7CiAJCQlicGZfb2JqX2ZyZWVfZmllbGRzKGh0YWItJmd0O21hcC5yZWNvcmQsCi0JCQkJCSAgICBodGFiX2VsZW1fdmFsdWUoZWxlbSwgaHRhYi0mZ3Q7bWFwLmtleV9zaXplKSk7CiYjNDM7CQkJCQkgICAgaHRhYl9lbGVtX3ZhbHVlKGh0YWIsIGVsZW0pKTsKIAkJCWNvbmRfcmVzY2hlZCgpOwogCQl9CiAJCWNvbmRfcmVzY2hlZCgpOwpAQCAtMjgwLDggJiM0MzszNTYsNyBAQCBzdGF0aWMgdm9pZCBodGFiX2ZyZWVfZWxlbXMoc3RydWN0IGJwZl9odGFiICpodGFiKQogCWZvciAoaSA9IDA7IGkgJmx0OyBodGFiLSZndDttYXAubWF4X2VudHJpZXM7IGkmIzQzOyYjNDM7KSB7CiAJCXZvaWQgX19wZXJjcHUgKnBwdHI7CiAKLQkJcHB0ciA9IGh0YWJfZWxlbV9nZXRfcHRyKGdldF9odGFiX2VsZW0oaHRhYiwgaSksCi0JCQkJCSBodGFiLSZndDttYXAua2V5X3NpemUpOwomIzQzOwkJcHB0ciA9IGh0YWJfZWxlbV9nZXRfcHRyKGh0YWIsIGdldF9odGFiX2VsZW0oaHRhYiwgaSkpOwogCQlmcmVlX3BlcmNwdShwcHRyKTsKIAkJY29uZF9yZXNjaGVkKCk7CiAJfQpAQCAtMzA4LDggJiM0MzszODMsOCBAQCBzdGF0aWMgc3RydWN0IGh0YWJfZWxlbSAqcHJlYWxsb2NfbHJ1X3BvcChzdHJ1Y3QgYnBmX2h0YWIgKmh0YWIsIHZvaWQgKmtleSwKIAogCWlmIChub2RlKSB7CiAJCWJwZl9tYXBfaW5jX2VsZW1fY291bnQoJmFtcDtodGFiLSZndDttYXApOwotCQlsID0gY29udGFpbmVyX29mKG5vZGUsIHN0cnVjdCBodGFiX2VsZW0sIGxydV9ub2RlKTsKLQkJbWVtY3B5KGwtJmd0O2tleSwga2V5LCBodGFiLSZndDttYXAua2V5X3NpemUpOwomIzQzOwkJbCA9IChzdHJ1Y3QgaHRhYl9lbGVtICopY29udGFpbmVyX29mKG5vZGUsIHN0cnVjdCBodGFiX2VsZW1fbHJ1LCBscnVfbm9kZSk7CiYjNDM7CQltZW1jcHkoaHRhYl9lbGVtX2tleShodGFiLCBsKSwga2V5LCBodGFiLSZndDttYXAua2V5X3NpemUpOwogCQlyZXR1cm4gbDsKIAl9CiAKQEAgLTM0MCw4ICYjNDM7NDE1LDcgQEAgc3RhdGljIGludCBwcmVhbGxvY19pbml0KHN0cnVjdCBicGZfaHRhYiAqaHRhYikKIAkJCQkJICAgIEdGUF9VU0VSIHwgX19HRlBfTk9XQVJOKTsKIAkJaWYgKCFwcHRyKQogCQkJZ290byBmcmVlX2VsZW1zOwotCQlodGFiX2VsZW1fc2V0X3B0cihnZXRfaHRhYl9lbGVtKGh0YWIsIGkpLCBodGFiLSZndDttYXAua2V5X3NpemUsCi0JCQkJICBwcHRyKTsKJiM0MzsJCWh0YWJfZWxlbV9zZXRfcHRyKGh0YWIsIGdldF9odGFiX2VsZW0oaHRhYiwgaSksIHBwdHIpOwogCQljb25kX3Jlc2NoZWQoKTsKIAl9CiAKQEAgLTM0OSw4ICYjNDM7NDIzLDggQEAgc3RhdGljIGludCBwcmVhbGxvY19pbml0KHN0cnVjdCBicGZfaHRhYiAqaHRhYikKIAlpZiAoaHRhYl9pc19scnUoaHRhYikpCiAJCWVyciA9IGJwZl9scnVfaW5pdCgmYW1wO2h0YWItJmd0O2xydSwKIAkJCQkgICBodGFiLSZndDttYXAubWFwX2ZsYWdzICZhbXA7IEJQRl9GX05PX0NPTU1PTl9MUlUsCi0JCQkJICAgb2Zmc2V0b2Yoc3RydWN0IGh0YWJfZWxlbSwgaGFzaCkgLQotCQkJCSAgIG9mZnNldG9mKHN0cnVjdCBodGFiX2VsZW0sIGxydV9ub2RlKSwKJiM0MzsJCQkJICAgb2Zmc2V0b2Yoc3RydWN0IGh0YWJfZWxlbV9scnUsIGhhc2gpIC0KJiM0MzsJCQkJICAgb2Zmc2V0b2Yoc3RydWN0IGh0YWJfZWxlbV9scnUsIGxydV9ub2RlKSwKIAkJCQkgICBodGFiX2xydV9tYXBfZGVsZXRlX25vZGUsCiAJCQkJICAgaHRhYik7CiAJZWxzZQpAQCAtMzYxLDcgJiM0Mzs0MzUsNyBAQCBzdGF0aWMgaW50IHByZWFsbG9jX2luaXQoc3RydWN0IGJwZl9odGFiICpodGFiKQogCiAJaWYgKGh0YWJfaXNfbHJ1KGh0YWIpKQogCQlicGZfbHJ1X3BvcHVsYXRlKCZhbXA7aHRhYi0mZ3Q7bHJ1LCBodGFiLSZndDtlbGVtcywKLQkJCQkgb2Zmc2V0b2Yoc3RydWN0IGh0YWJfZWxlbSwgbHJ1X25vZGUpLAomIzQzOwkJCQkgb2Zmc2V0b2Yoc3RydWN0IGh0YWJfZWxlbV9scnUsIGxydV9ub2RlKSwKIAkJCQkgaHRhYi0mZ3Q7ZWxlbV9zaXplLCBudW1fZW50cmllcyk7CiAJZWxzZQogCQlwY3B1X2ZyZWVsaXN0X3BvcHVsYXRlKCZhbXA7aHRhYi0mZ3Q7ZnJlZWxpc3QsCkBAIC00MjgsNiAmIzQzOzUwMiwyNSBAQCBzdGF0aWMgaW50IGh0YWJfbWFwX2FsbG9jX2NoZWNrKHVuaW9uIGJwZl9hdHRyICphdHRyKQogCUJVSUxEX0JVR19PTihvZmZzZXRvZihzdHJ1Y3QgaHRhYl9lbGVtLCBmbm9kZS5uZXh0KSAhPQogCQkgICAgIG9mZnNldG9mKHN0cnVjdCBodGFiX2VsZW0sIGhhc2hfbm9kZS5wcHJldikpOwogCiYjNDM7CS8qIGh0YWJfZWxlbSBwb2ludGVycyBhcmUgdXNlZCBhcyBiYXNlIHBvaW50ZXJzIGZvciBodGFiX2VsZW1fbHJ1IGFuZAomIzQzOwkgKiBodGFiX2VsZW1fcGNwdS4gVGhlc2Ugc3RydWN0dXJlcyBtdXN0IHNoYXJlIGEgY29tbW9uIGluaXRpYWwgc2VxdWVuY2UKJiM0MzsJICogdG8gZW5zdXJlIHBvaW50ZXIgY2FzdGluZyBiZXR3ZWVuIHRoZW0gaXMgc2FmZS4KJiM0MzsJICovCiYjNDM7CUJVSUxEX0JVR19PTihvZmZzZXRvZihzdHJ1Y3QgaHRhYl9lbGVtLCBoYXNoX25vZGUpICE9CiYjNDM7CQkgICAgIG9mZnNldG9mKHN0cnVjdCBodGFiX2VsZW1fbHJ1LCBoYXNoX25vZGUpKTsKJiM0MzsJQlVJTERfQlVHX09OKG9mZnNldG9mKHN0cnVjdCBodGFiX2VsZW0sIGhhc2hfbm9kZSkgIT0KJiM0MzsJCSAgICAgb2Zmc2V0b2Yoc3RydWN0IGh0YWJfZWxlbV9wY3B1LCBoYXNoX25vZGUpKTsKJiM0MzsKJiM0MzsJQlVJTERfQlVHX09OKG9mZnNldG9mKHN0cnVjdCBodGFiX2VsZW0sIHBhZGRpbmcpICE9CiYjNDM7CQkgICAgIG9mZnNldG9mKHN0cnVjdCBodGFiX2VsZW1fbHJ1LCBwYWRkaW5nKSk7CiYjNDM7CUJVSUxEX0JVR19PTihvZmZzZXRvZihzdHJ1Y3QgaHRhYl9lbGVtLCBwYWRkaW5nKSAhPQomIzQzOwkJICAgICBvZmZzZXRvZihzdHJ1Y3QgaHRhYl9lbGVtX3BjcHUsIHBhZGRpbmcpKTsKJiM0MzsKJiM0MzsJQlVJTERfQlVHX09OKG9mZnNldG9mKHN0cnVjdCBodGFiX2VsZW0sIGZub2RlKSAhPQomIzQzOwkJICAgICBvZmZzZXRvZihzdHJ1Y3QgaHRhYl9lbGVtX2xydSwgZm5vZGUpKTsKJiM0MzsJQlVJTERfQlVHX09OKG9mZnNldG9mKHN0cnVjdCBodGFiX2VsZW0sIGZub2RlKSAhPQomIzQzOwkJICAgICBvZmZzZXRvZihzdHJ1Y3QgaHRhYl9lbGVtX3BjcHUsIGZub2RlKSk7CiYjNDM7CiAJaWYgKHplcm9fc2VlZCAmYW1wOyZhbXA7ICFjYXBhYmxlKENBUF9TWVNfQURNSU4pKQogCQkvKiBHdWFyZCBhZ2FpbnN0IGxvY2FsIERvUywgYW5kIGRpc2NvdXJhZ2UgcHJvZHVjdGlvbiB1c2UuICovCiAJCXJldHVybiAtRVBFUk07CkBAIC00NzYsNyAmIzQzOzU2OSw3IEBAIHN0YXRpYyB2b2lkIGh0YWJfbWVtX2R0b3Iodm9pZCAqb2JqLCB2b2lkICpjdHgpCiAJaWYgKElTX0VSUl9PUl9OVUxMKGhyZWMtJmd0O3JlY29yZCkpCiAJCXJldHVybjsKIAotCW1hcF92YWx1ZSA9IGh0YWJfZWxlbV92YWx1ZShlbGVtLCBocmVjLSZndDtrZXlfc2l6ZSk7CiYjNDM7CW1hcF92YWx1ZSA9ICh2b2lkICopZWxlbSAmIzQzOyBocmVjLSZndDtrZXlfb2Zmc2V0ICYjNDM7IHJvdW5kX3VwKGhyZWMtJmd0O2tleV9zaXplLCA4KTsKIAlicGZfb2JqX2ZyZWVfZmllbGRzKGhyZWMtJmd0O3JlY29yZCwgbWFwX3ZhbHVlKTsKIH0KIApAQCAtNTAyLDcgJiM0Mzs1OTUsNyBAQCBzdGF0aWMgdm9pZCBodGFiX2R0b3JfY3R4X2ZyZWUodm9pZCAqY3R4KQogfQogCiBzdGF0aWMgaW50IGJwZl9tYV9zZXRfZHRvcihzdHJ1Y3QgYnBmX21hcCAqbWFwLCBzdHJ1Y3QgYnBmX21lbV9hbGxvYyAqbWEsCi0JCQkgICB2b2lkICgqZHRvcikodm9pZCAqLCB2b2lkICopKQomIzQzOwkJCSAgIHZvaWQgKCpkdG9yKSh2b2lkICosIHZvaWQgKiksIHUzMiBrZXlfb2Zmc2V0KQogewogCXN0cnVjdCBodGFiX2J0Zl9yZWNvcmQgKmhyZWM7CiAJaW50IGVycjsKQEAgLTUxNSw2ICYjNDM7NjA4LDcgQEAgc3RhdGljIGludCBicGZfbWFfc2V0X2R0b3Ioc3RydWN0IGJwZl9tYXAgKm1hcCwgc3RydWN0IGJwZl9tZW1fYWxsb2MgKm1hLAogCWlmICghaHJlYykKIAkJcmV0dXJuIC1FTk9NRU07CiAJaHJlYy0mZ3Q7a2V5X3NpemUgPSBtYXAtJmd0O2tleV9zaXplOwomIzQzOwlocmVjLSZndDtrZXlfb2Zmc2V0ID0ga2V5X29mZnNldDsKIAlocmVjLSZndDtyZWNvcmQgPSBidGZfcmVjb3JkX2R1cChtYXAtJmd0O3JlY29yZCk7CiAJaWYgKElTX0VSUihocmVjLSZndDtyZWNvcmQpKSB7CiAJCWVyciA9IFBUUl9FUlIoaHJlYy0mZ3Q7cmVjb3JkKTsKQEAgLTUzNyw5ICYjNDM7NjMxLDkgQEAgc3RhdGljIGludCBodGFiX21hcF9jaGVja19idGYoc3RydWN0IGJwZl9tYXAgKm1hcCwgY29uc3Qgc3RydWN0IGJ0ZiAqYnRmLAogCSAqIHBvcHVsYXRlZCBpbiBodGFiX21hcF9hbGxvYygpLCBzbyBpdCB3aWxsIGFsd2F5cyBhcHBlYXIgYXMgTlVMTC4KIAkgKi8KIAlpZiAoaHRhYl9pc19wZXJjcHUoaHRhYikpCi0JCXJldHVybiBicGZfbWFfc2V0X2R0b3IobWFwLCAmYW1wO2h0YWItJmd0O3BjcHVfbWEsIGh0YWJfcGNwdV9tZW1fZHRvcik7CiYjNDM7CQlyZXR1cm4gYnBmX21hX3NldF9kdG9yKG1hcCwgJmFtcDtodGFiLSZndDtwY3B1X21hLCBodGFiX3BjcHVfbWVtX2R0b3IsIGh0YWItJmd0O2tleV9vZmZzZXQpOwogCWVsc2UKLQkJcmV0dXJuIGJwZl9tYV9zZXRfZHRvcihtYXAsICZhbXA7aHRhYi0mZ3Q7bWEsIGh0YWJfbWVtX2R0b3IpOwomIzQzOwkJcmV0dXJuIGJwZl9tYV9zZXRfZHRvcihtYXAsICZhbXA7aHRhYi0mZ3Q7bWEsIGh0YWJfbWVtX2R0b3IsIGh0YWItJmd0O2tleV9vZmZzZXQpOwogfQogCiBzdGF0aWMgc3RydWN0IGJwZl9tYXAgKmh0YWJfbWFwX2FsbG9jKHVuaW9uIGJwZl9hdHRyICphdHRyKQpAQCAtNTgzLDggJiM0Mzs2NzcsMTggQEAgc3RhdGljIHN0cnVjdCBicGZfbWFwICpodGFiX21hcF9hbGxvYyh1bmlvbiBicGZfYXR0ciAqYXR0cikKIAogCWh0YWItJmd0O25fYnVja2V0cyA9IHJvdW5kdXBfcG93X29mX3R3byhodGFiLSZndDttYXAubWF4X2VudHJpZXMpOwogCi0JaHRhYi0mZ3Q7ZWxlbV9zaXplID0gc2l6ZW9mKHN0cnVjdCBodGFiX2VsZW0pICYjNDM7Ci0JCQkgIHJvdW5kX3VwKGh0YWItJmd0O21hcC5rZXlfc2l6ZSwgOCk7CiYjNDM7CWlmIChodGFiX2lzX2xydShodGFiKSkKJiM0MzsJCWh0YWItJmd0O2tleV9vZmZzZXQgPSBzaXplb2Yoc3RydWN0IGh0YWJfZWxlbV9scnUpOwomIzQzOwllbHNlIGlmIChwZXJjcHUgJmFtcDsmYW1wOyAhcHJlYWxsb2MpCiYjNDM7CQlodGFiLSZndDtrZXlfb2Zmc2V0ID0gcm91bmRfdXAoaHRhYl9oYXNfaGFzaChodGFiKSA/CiYjNDM7CQkJCQkgICAgc2l6ZW9mKHN0cnVjdCBodGFiX2VsZW1fcGNwdSkgOgomIzQzOwkJCQkJICAgIG9mZnNldG9mKHN0cnVjdCBodGFiX2VsZW1fcGNwdSwgaGFzaCksIDgpOwomIzQzOwllbHNlCiYjNDM7CQlodGFiLSZndDtrZXlfb2Zmc2V0ID0gcm91bmRfdXAoaHRhYl9oYXNfaGFzaChodGFiKSA/CiYjNDM7CQkJCQkgICAgc2l6ZW9mKHN0cnVjdCBodGFiX2VsZW0pIDoKJiM0MzsJCQkJCSAgICBvZmZzZXRvZihzdHJ1Y3QgaHRhYl9lbGVtLCBoYXNoKSwgOCk7CiYjNDM7CiYjNDM7CWh0YWItJmd0O2VsZW1fc2l6ZSA9IGh0YWItJmd0O2tleV9vZmZzZXQgJiM0Mzsgcm91bmRfdXAoaHRhYi0mZ3Q7bWFwLmtleV9zaXplLCA4KTsKIAlpZiAocGVyY3B1KQogCQlodGFiLSZndDtlbGVtX3NpemUgJiM0Mzs9IHNpemVvZih2b2lkICopOwogCWVsc2UKQEAgLTY5MiwxNCAmIzQzOzc5NiwxNiBAQCBzdGF0aWMgaW5saW5lIHN0cnVjdCBobGlzdF9udWxsc19oZWFkICpzZWxlY3RfYnVja2V0KHN0cnVjdCBicGZfaHRhYiAqaHRhYiwgdTMyCiB9CiAKIC8qIHRoaXMgbG9va3VwIGZ1bmN0aW9uIGNhbiBvbmx5IGJlIGNhbGxlZCB3aXRoIGJ1Y2tldCBsb2NrIHRha2VuICovCi1zdGF0aWMgc3RydWN0IGh0YWJfZWxlbSAqbG9va3VwX2VsZW1fcmF3KHN0cnVjdCBobGlzdF9udWxsc19oZWFkICpoZWFkLCB1MzIgaGFzaCwKJiM0MztzdGF0aWMgc3RydWN0IGh0YWJfZWxlbSAqbG9va3VwX2VsZW1fcmF3KHN0cnVjdCBicGZfaHRhYiAqaHRhYiwKJiM0MzsJCQkJCSBzdHJ1Y3QgaGxpc3RfbnVsbHNfaGVhZCAqaGVhZCwgdTMyIGhhc2gsCiAJCQkJCSB2b2lkICprZXksIHUzMiBrZXlfc2l6ZSkKIHsKIAlzdHJ1Y3QgaGxpc3RfbnVsbHNfbm9kZSAqbjsKIAlzdHJ1Y3QgaHRhYl9lbGVtICpsOwogCiAJaGxpc3RfbnVsbHNfZm9yX2VhY2hfZW50cnlfcmN1KGwsIG4sIGhlYWQsIGhhc2hfbm9kZSkKLQkJaWYgKGwtJmd0O2hhc2ggPT0gaGFzaCAmYW1wOyZhbXA7ICFtZW1jbXAoJmFtcDtsLSZndDtrZXksIGtleSwga2V5X3NpemUpKQomIzQzOwkJaWYgKCghaHRhYl9oYXNfaGFzaChodGFiKSB8fCBodGFiX2VsZW1faGFzaChodGFiLCBsKSA9PSBoYXNoKSAmYW1wOyZhbXA7CiYjNDM7CQkgICAgIW1lbWNtcChodGFiX2VsZW1fa2V5KGh0YWIsIGwpLCBrZXksIGtleV9zaXplKSkKIAkJCXJldHVybiBsOwogCiAJcmV0dXJuIE5VTEw7CkBAIC03MDksNyAmIzQzOzgxNSw4IEBAIHN0YXRpYyBzdHJ1Y3QgaHRhYl9lbGVtICpsb29rdXBfZWxlbV9yYXcoc3RydWN0IGhsaXN0X251bGxzX2hlYWQgKmhlYWQsIHUzMiBoYXNoCiAgKiB0aGUgdW5saWtlbHkgZXZlbnQgd2hlbiBlbGVtZW50cyBtb3ZlZCBmcm9tIG9uZSBidWNrZXQgaW50byBhbm90aGVyCiAgKiB3aGlsZSBsaW5rIGxpc3QgaXMgYmVpbmcgd2Fsa2VkCiAgKi8KLXN0YXRpYyBzdHJ1Y3QgaHRhYl9lbGVtICpsb29rdXBfbnVsbHNfZWxlbV9yYXcoc3RydWN0IGhsaXN0X251bGxzX2hlYWQgKmhlYWQsCiYjNDM7c3RhdGljIHN0cnVjdCBodGFiX2VsZW0gKmxvb2t1cF9udWxsc19lbGVtX3JhdyhzdHJ1Y3QgYnBmX2h0YWIgKmh0YWIsCiYjNDM7CQkJCQkgICAgICAgc3RydWN0IGhsaXN0X251bGxzX2hlYWQgKmhlYWQsCiAJCQkJCSAgICAgICB1MzIgaGFzaCwgdm9pZCAqa2V5LAogCQkJCQkgICAgICAgdTMyIGtleV9zaXplLCB1MzIgbl9idWNrZXRzKQogewpAQCAtNzE4LDcgJiM0Mzs4MjUsOCBAQCBzdGF0aWMgc3RydWN0IGh0YWJfZWxlbSAqbG9va3VwX251bGxzX2VsZW1fcmF3KHN0cnVjdCBobGlzdF9udWxsc19oZWFkICpoZWFkLAogCiBhZ2FpbjoKIAlobGlzdF9udWxsc19mb3JfZWFjaF9lbnRyeV9yY3UobCwgbiwgaGVhZCwgaGFzaF9ub2RlKQotCQlpZiAobC0mZ3Q7aGFzaCA9PSBoYXNoICZhbXA7JmFtcDsgIW1lbWNtcCgmYW1wO2wtJmd0O2tleSwga2V5LCBrZXlfc2l6ZSkpCiYjNDM7CQlpZiAoKCFodGFiX2hhc19oYXNoKGh0YWIpIHx8IGh0YWJfZWxlbV9oYXNoKGh0YWIsIGwpID09IGhhc2gpICZhbXA7JmFtcDsKJiM0MzsJCSAgICAhbWVtY21wKGh0YWJfZWxlbV9rZXkoaHRhYiwgbCksIGtleSwga2V5X3NpemUpKQogCQkJcmV0dXJuIGw7CiAKIAlpZiAodW5saWtlbHkoZ2V0X251bGxzX3ZhbHVlKG4pICE9IChoYXNoICZhbXA7IChuX2J1Y2tldHMgLSAxKSkpKQpAQCAtNzQ3LDE3ICYjNDM7ODU1LDE4IEBAIHN0YXRpYyB2b2lkICpfX2h0YWJfbWFwX2xvb2t1cF9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSkKIAogCWhlYWQgPSBzZWxlY3RfYnVja2V0KGh0YWIsIGhhc2gpOwogCi0JbCA9IGxvb2t1cF9udWxsc19lbGVtX3JhdyhoZWFkLCBoYXNoLCBrZXksIGtleV9zaXplLCBodGFiLSZndDtuX2J1Y2tldHMpOwomIzQzOwlsID0gbG9va3VwX251bGxzX2VsZW1fcmF3KGh0YWIsIGhlYWQsIGhhc2gsIGtleSwga2V5X3NpemUsIGh0YWItJmd0O25fYnVja2V0cyk7CiAKIAlyZXR1cm4gbDsKIH0KIAogc3RhdGljIHZvaWQgKmh0YWJfbWFwX2xvb2t1cF9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSkKIHsKJiM0MzsJc3RydWN0IGJwZl9odGFiICpodGFiID0gY29udGFpbmVyX29mKG1hcCwgc3RydWN0IGJwZl9odGFiLCBtYXApOwogCXN0cnVjdCBodGFiX2VsZW0gKmwgPSBfX2h0YWJfbWFwX2xvb2t1cF9lbGVtKG1hcCwga2V5KTsKIAogCWlmIChsKQotCQlyZXR1cm4gaHRhYl9lbGVtX3ZhbHVlKGwsIG1hcC0mZ3Q7a2V5X3NpemUpOwomIzQzOwkJcmV0dXJuIGh0YWJfZWxlbV92YWx1ZShodGFiLCBsKTsKIAogCXJldHVybiBOVUxMOwogfQpAQCAtNzc1LDYgJiM0Mzs4ODQsNyBAQCBzdGF0aWMgdm9pZCAqaHRhYl9tYXBfbG9va3VwX2VsZW0oc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5KQogICovCiBzdGF0aWMgaW50IGh0YWJfbWFwX2dlbl9sb29rdXAoc3RydWN0IGJwZl9tYXAgKm1hcCwgc3RydWN0IGJwZl9pbnNuICppbnNuX2J1ZikKIHsKJiM0MzsJc3RydWN0IGJwZl9odGFiICpodGFiID0gY29udGFpbmVyX29mKG1hcCwgc3RydWN0IGJwZl9odGFiLCBtYXApOwogCXN0cnVjdCBicGZfaW5zbiAqaW5zbiA9IGluc25fYnVmOwogCWNvbnN0IGludCByZXQgPSBCUEZfUkVHXzA7CiAKQEAgLTc4Myw3ICYjNDM7ODkzLDcgQEAgc3RhdGljIGludCBodGFiX21hcF9nZW5fbG9va3VwKHN0cnVjdCBicGZfbWFwICptYXAsIHN0cnVjdCBicGZfaW5zbiAqaW5zbl9idWYpCiAJKmluc24mIzQzOyYjNDM7ID0gQlBGX0VNSVRfQ0FMTChfX2h0YWJfbWFwX2xvb2t1cF9lbGVtKTsKIAkqaW5zbiYjNDM7JiM0MzsgPSBCUEZfSk1QX0lNTShCUEZfSkVRLCByZXQsIDAsIDEpOwogCSppbnNuJiM0MzsmIzQzOyA9IEJQRl9BTFU2NF9JTU0oQlBGX0FERCwgcmV0LAotCQkJCW9mZnNldG9mKHN0cnVjdCBodGFiX2VsZW0sIGtleSkgJiM0MzsKJiM0MzsJCQkJaHRhYi0mZ3Q7a2V5X29mZnNldCAmIzQzOwogCQkJCXJvdW5kX3VwKG1hcC0mZ3Q7a2V5X3NpemUsIDgpKTsKIAlyZXR1cm4gaW5zbiAtIGluc25fYnVmOwogfQpAQCAtNzkxLDEyICYjNDM7OTAxLDEzIEBAIHN0YXRpYyBpbnQgaHRhYl9tYXBfZ2VuX2xvb2t1cChzdHJ1Y3QgYnBmX21hcCAqbWFwLCBzdHJ1Y3QgYnBmX2luc24gKmluc25fYnVmKQogc3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkICpfX2h0YWJfbHJ1X21hcF9sb29rdXBfZWxlbShzdHJ1Y3QgYnBmX21hcCAqbWFwLAogCQkJCQkJCXZvaWQgKmtleSwgY29uc3QgYm9vbCBtYXJrKQogewomIzQzOwlzdHJ1Y3QgYnBmX2h0YWIgKmh0YWIgPSBjb250YWluZXJfb2YobWFwLCBzdHJ1Y3QgYnBmX2h0YWIsIG1hcCk7CiAJc3RydWN0IGh0YWJfZWxlbSAqbCA9IF9faHRhYl9tYXBfbG9va3VwX2VsZW0obWFwLCBrZXkpOwogCiAJaWYgKGwpIHsKIAkJaWYgKG1hcmspCi0JCQlicGZfbHJ1X25vZGVfc2V0X3JlZigmYW1wO2wtJmd0O2xydV9ub2RlKTsKLQkJcmV0dXJuIGh0YWJfZWxlbV92YWx1ZShsLCBtYXAtJmd0O2tleV9zaXplKTsKJiM0MzsJCQlicGZfbHJ1X25vZGVfc2V0X3JlZihodGFiX2VsZW1fbHJ1X25vZGUobCkpOwomIzQzOwkJcmV0dXJuIGh0YWJfZWxlbV92YWx1ZShodGFiLCBsKTsKIAl9CiAKIAlyZXR1cm4gTlVMTDsKQEAgLTgxNSw2ICYjNDM7OTI2LDcgQEAgc3RhdGljIHZvaWQgKmh0YWJfbHJ1X21hcF9sb29rdXBfZWxlbV9zeXMoc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5KQogc3RhdGljIGludCBodGFiX2xydV9tYXBfZ2VuX2xvb2t1cChzdHJ1Y3QgYnBmX21hcCAqbWFwLAogCQkJCSAgIHN0cnVjdCBicGZfaW5zbiAqaW5zbl9idWYpCiB7CiYjNDM7CXN0cnVjdCBicGZfaHRhYiAqaHRhYiA9IGNvbnRhaW5lcl9vZihtYXAsIHN0cnVjdCBicGZfaHRhYiwgbWFwKTsKIAlzdHJ1Y3QgYnBmX2luc24gKmluc24gPSBpbnNuX2J1ZjsKIAljb25zdCBpbnQgcmV0ID0gQlBGX1JFR18wOwogCWNvbnN0IGludCByZWZfcmVnID0gQlBGX1JFR18xOwpAQCAtODI0LDE1ICYjNDM7OTM2LDE1IEBAIHN0YXRpYyBpbnQgaHRhYl9scnVfbWFwX2dlbl9sb29rdXAoc3RydWN0IGJwZl9tYXAgKm1hcCwKIAkqaW5zbiYjNDM7JiM0MzsgPSBCUEZfRU1JVF9DQUxMKF9faHRhYl9tYXBfbG9va3VwX2VsZW0pOwogCSppbnNuJiM0MzsmIzQzOyA9IEJQRl9KTVBfSU1NKEJQRl9KRVEsIHJldCwgMCwgNCk7CiAJKmluc24mIzQzOyYjNDM7ID0gQlBGX0xEWF9NRU0oQlBGX0IsIHJlZl9yZWcsIHJldCwKLQkJCSAgICAgIG9mZnNldG9mKHN0cnVjdCBodGFiX2VsZW0sIGxydV9ub2RlKSAmIzQzOwomIzQzOwkJCSAgICAgIG9mZnNldG9mKHN0cnVjdCBodGFiX2VsZW1fbHJ1LCBscnVfbm9kZSkgJiM0MzsKIAkJCSAgICAgIG9mZnNldG9mKHN0cnVjdCBicGZfbHJ1X25vZGUsIHJlZikpOwogCSppbnNuJiM0MzsmIzQzOyA9IEJQRl9KTVBfSU1NKEJQRl9KTkUsIHJlZl9yZWcsIDAsIDEpOwogCSppbnNuJiM0MzsmIzQzOyA9IEJQRl9TVF9NRU0oQlBGX0IsIHJldCwKLQkJCSAgICAgb2Zmc2V0b2Yoc3RydWN0IGh0YWJfZWxlbSwgbHJ1X25vZGUpICYjNDM7CiYjNDM7CQkJICAgICBvZmZzZXRvZihzdHJ1Y3QgaHRhYl9lbGVtX2xydSwgbHJ1X25vZGUpICYjNDM7CiAJCQkgICAgIG9mZnNldG9mKHN0cnVjdCBicGZfbHJ1X25vZGUsIHJlZiksCiAJCQkgICAgIDEpOwogCSppbnNuJiM0MzsmIzQzOyA9IEJQRl9BTFU2NF9JTU0oQlBGX0FERCwgcmV0LAotCQkJCW9mZnNldG9mKHN0cnVjdCBodGFiX2VsZW0sIGtleSkgJiM0MzsKJiM0MzsJCQkJaHRhYi0mZ3Q7a2V5X29mZnNldCAmIzQzOwogCQkJCXJvdW5kX3VwKG1hcC0mZ3Q7a2V5X3NpemUsIDgpKTsKIAlyZXR1cm4gaW5zbiAtIGluc25fYnVmOwogfQpAQCAtODQ0LDEzICYjNDM7OTU2LDEzIEBAIHN0YXRpYyB2b2lkIGNoZWNrX2FuZF9jYW5jZWxfZmllbGRzKHN0cnVjdCBicGZfaHRhYiAqaHRhYiwKIAkJcmV0dXJuOwogCiAJaWYgKGh0YWJfaXNfcGVyY3B1KGh0YWIpKSB7Ci0JCXZvaWQgX19wZXJjcHUgKnBwdHIgPSBodGFiX2VsZW1fZ2V0X3B0cihlbGVtLCBodGFiLSZndDttYXAua2V5X3NpemUpOwomIzQzOwkJdm9pZCBfX3BlcmNwdSAqcHB0ciA9IGh0YWJfZWxlbV9nZXRfcHRyKGh0YWIsIGVsZW0pOwogCQlpbnQgY3B1OwogCiAJCWZvcl9lYWNoX3Bvc3NpYmxlX2NwdShjcHUpCiAJCQlicGZfb2JqX2NhbmNlbF9maWVsZHMoJmFtcDtodGFiLSZndDttYXAsIHBlcl9jcHVfcHRyKHBwdHIsIGNwdSkpOwogCX0gZWxzZSB7Ci0JCXZvaWQgKm1hcF92YWx1ZSA9IGh0YWJfZWxlbV92YWx1ZShlbGVtLCBodGFiLSZndDttYXAua2V5X3NpemUpOwomIzQzOwkJdm9pZCAqbWFwX3ZhbHVlID0gaHRhYl9lbGVtX3ZhbHVlKGh0YWIsIGVsZW0pOwogCiAJCWJwZl9vYmpfY2FuY2VsX2ZpZWxkcygmYW1wO2h0YWItJmd0O21hcCwgbWFwX3ZhbHVlKTsKIAl9CkBAIC04NjksOCAmIzQzOzk4MSw4IEBAIHN0YXRpYyBib29sIGh0YWJfbHJ1X21hcF9kZWxldGVfbm9kZSh2b2lkICphcmcsIHN0cnVjdCBicGZfbHJ1X25vZGUgKm5vZGUpCiAJc3RydWN0IGJ1Y2tldCAqYjsKIAlpbnQgcmV0OwogCi0JdGd0X2wgPSBjb250YWluZXJfb2Yobm9kZSwgc3RydWN0IGh0YWJfZWxlbSwgbHJ1X25vZGUpOwotCWIgPSBfX3NlbGVjdF9idWNrZXQoaHRhYiwgdGd0X2wtJmd0O2hhc2gpOwomIzQzOwl0Z3RfbCA9IChzdHJ1Y3QgaHRhYl9lbGVtICopY29udGFpbmVyX29mKG5vZGUsIHN0cnVjdCBodGFiX2VsZW1fbHJ1LCBscnVfbm9kZSk7CiYjNDM7CWIgPSBfX3NlbGVjdF9idWNrZXQoaHRhYiwgaHRhYl9lbGVtX2hhc2goaHRhYiwgdGd0X2wpKTsKIAloZWFkID0gJmFtcDtiLSZndDtoZWFkOwogCiAJcmV0ID0gaHRhYl9sb2NrX2J1Y2tldChiLCAmYW1wO2ZsYWdzKTsKQEAgLTkxMiw3ICYjNDM7MTAyNCw3IEBAIHN0YXRpYyBpbnQgaHRhYl9tYXBfZ2V0X25leHRfa2V5KHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSwgdm9pZCAqbmV4dF9rZXkpCiAJaGVhZCA9IHNlbGVjdF9idWNrZXQoaHRhYiwgaGFzaCk7CiAKIAkvKiBsb29rdXAgdGhlIGtleSAqLwotCWwgPSBsb29rdXBfbnVsbHNfZWxlbV9yYXcoaGVhZCwgaGFzaCwga2V5LCBrZXlfc2l6ZSwgaHRhYi0mZ3Q7bl9idWNrZXRzKTsKJiM0MzsJbCA9IGxvb2t1cF9udWxsc19lbGVtX3JhdyhodGFiLCBoZWFkLCBoYXNoLCBrZXksIGtleV9zaXplLCBodGFiLSZndDtuX2J1Y2tldHMpOwogCiAJaWYgKCFsKQogCQlnb3RvIGZpbmRfZmlyc3RfZWxlbTsKQEAgLTkyMyw3ICYjNDM7MTAzNSw3IEBAIHN0YXRpYyBpbnQgaHRhYl9tYXBfZ2V0X25leHRfa2V5KHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSwgdm9pZCAqbmV4dF9rZXkpCiAKIAlpZiAobmV4dF9sKSB7CiAJCS8qIGlmIG5leHQgZWxlbSBpbiB0aGlzIGhhc2ggbGlzdCBpcyBub24temVybywganVzdCByZXR1cm4gaXQgKi8KLQkJbWVtY3B5KG5leHRfa2V5LCBuZXh0X2wtJmd0O2tleSwga2V5X3NpemUpOwomIzQzOwkJbWVtY3B5KG5leHRfa2V5LCBodGFiX2VsZW1fa2V5KGh0YWIsIG5leHRfbCksIGtleV9zaXplKTsKIAkJcmV0dXJuIDA7CiAJfQogCkBAIC05NDEsNyAmIzQzOzEwNTMsNyBAQCBzdGF0aWMgaW50IGh0YWJfbWFwX2dldF9uZXh0X2tleShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXksIHZvaWQgKm5leHRfa2V5KQogCQkJCQkgIHN0cnVjdCBodGFiX2VsZW0sIGhhc2hfbm9kZSk7CiAJCWlmIChuZXh0X2wpIHsKIAkJCS8qIGlmIGl0JiMzOTtzIG5vdCBlbXB0eSwganVzdCByZXR1cm4gaXQgKi8KLQkJCW1lbWNweShuZXh0X2tleSwgbmV4dF9sLSZndDtrZXksIGtleV9zaXplKTsKJiM0MzsJCQltZW1jcHkobmV4dF9rZXksIGh0YWJfZWxlbV9rZXkoaHRhYiwgbmV4dF9sKSwga2V5X3NpemUpOwogCQkJcmV0dXJuIDA7CiAJCX0KIAl9CkBAIC05NTUsNyAmIzQzOzEwNjcsNyBAQCBzdGF0aWMgdm9pZCBodGFiX2VsZW1fZnJlZShzdHJ1Y3QgYnBmX2h0YWIgKmh0YWIsIHN0cnVjdCBodGFiX2VsZW0gKmwpCiAJY2hlY2tfYW5kX2NhbmNlbF9maWVsZHMoaHRhYiwgbCk7CiAKIAlpZiAoaHRhYi0mZ3Q7bWFwLm1hcF90eXBlID09IEJQRl9NQVBfVFlQRV9QRVJDUFVfSEFTSCkKLQkJYnBmX21lbV9jYWNoZV9mcmVlKCZhbXA7aHRhYi0mZ3Q7cGNwdV9tYSwgbC0mZ3Q7cHRyX3RvX3BwdHIpOwomIzQzOwkJYnBmX21lbV9jYWNoZV9mcmVlKCZhbXA7aHRhYi0mZ3Q7cGNwdV9tYSwgaHRhYl9lbGVtX2dldF9wdHJfdG9fcHB0cihsKSk7CiAJYnBmX21lbV9jYWNoZV9mcmVlKCZhbXA7aHRhYi0mZ3Q7bWEsIGwpOwogfQogCkBAIC05NjUsNyAmIzQzOzEwNzcsNyBAQCBzdGF0aWMgdm9pZCBodGFiX3B1dF9mZF92YWx1ZShzdHJ1Y3QgYnBmX2h0YWIgKmh0YWIsIHN0cnVjdCBodGFiX2VsZW0gKmwpCiAJdm9pZCAqcHRyOwogCiAJaWYgKG1hcC0mZ3Q7b3BzLSZndDttYXBfZmRfcHV0X3B0cikgewotCQlwdHIgPSBmZF9odGFiX21hcF9nZXRfcHRyKG1hcCwgbCk7CiYjNDM7CQlwdHIgPSBmZF9odGFiX21hcF9nZXRfcHRyKGh0YWIsIGwpOwogCQltYXAtJmd0O29wcy0mZ3Q7bWFwX2ZkX3B1dF9wdHIobWFwLCBwdHIsIHRydWUpOwogCX0KIH0KQEAgLTExMTcsMTAgJiM0MzsxMjI5LDEwIEBAIHN0YXRpYyBzdHJ1Y3QgaHRhYl9lbGVtICphbGxvY19odGFiX2VsZW0oc3RydWN0IGJwZl9odGFiICpodGFiLCB2b2lkICprZXksCiAJCX0KIAl9CiAKLQltZW1jcHkobF9uZXctJmd0O2tleSwga2V5LCBrZXlfc2l6ZSk7CiYjNDM7CW1lbWNweShodGFiX2VsZW1fa2V5KGh0YWIsIGxfbmV3KSwga2V5LCBrZXlfc2l6ZSk7CiAJaWYgKHBlcmNwdSkgewogCQlpZiAocHJlYWxsb2MpIHsKLQkJCXBwdHIgPSBodGFiX2VsZW1fZ2V0X3B0cihsX25ldywga2V5X3NpemUpOwomIzQzOwkJCXBwdHIgPSBodGFiX2VsZW1fZ2V0X3B0cihodGFiLCBsX25ldyk7CiAJCX0gZWxzZSB7CiAJCQkvKiBhbGxvY19wZXJjcHUgemVyby1maWxscyAqLwogCQkJdm9pZCAqcHRyID0gYnBmX21lbV9jYWNoZV9hbGxvYygmYW1wO2h0YWItJmd0O3BjcHVfbWEpOwpAQCAtMTEzMCwyNiAmIzQzOzEyNDIsMjYgQEAgc3RhdGljIHN0cnVjdCBodGFiX2VsZW0gKmFsbG9jX2h0YWJfZWxlbShzdHJ1Y3QgYnBmX2h0YWIgKmh0YWIsIHZvaWQgKmtleSwKIAkJCQlsX25ldyA9IEVSUl9QVFIoLUVOT01FTSk7CiAJCQkJZ290byBkZWNfY291bnQ7CiAJCQl9Ci0JCQlsX25ldy0mZ3Q7cHRyX3RvX3BwdHIgPSBwdHI7CiYjNDM7CQkJaHRhYl9lbGVtX3NldF9wdHJfdG9fcHB0cihsX25ldywgcHRyKTsKIAkJCXBwdHIgPSAqKHZvaWQgX19wZXJjcHUgKiopcHRyOwogCQl9CiAKIAkJcGNwdV9pbml0X3ZhbHVlKGh0YWIsIHBwdHIsIHZhbHVlLCBvbmFsbGNwdXMsIG1hcF9mbGFncyk7CiAKIAkJaWYgKCFwcmVhbGxvYykKLQkJCWh0YWJfZWxlbV9zZXRfcHRyKGxfbmV3LCBrZXlfc2l6ZSwgcHB0cik7CiYjNDM7CQkJaHRhYl9lbGVtX3NldF9wdHIoaHRhYiwgbF9uZXcsIHBwdHIpOwogCX0gZWxzZSBpZiAoZmRfaHRhYl9tYXBfbmVlZHNfYWRqdXN0KGh0YWIpKSB7CiAJCXNpemUgPSByb3VuZF91cChzaXplLCA4KTsKLQkJbWVtY3B5KGh0YWJfZWxlbV92YWx1ZShsX25ldywga2V5X3NpemUpLCB2YWx1ZSwgc2l6ZSk7CiYjNDM7CQltZW1jcHkoaHRhYl9lbGVtX3ZhbHVlKGh0YWIsIGxfbmV3KSwgdmFsdWUsIHNpemUpOwogCX0gZWxzZSBpZiAobWFwX2ZsYWdzICZhbXA7IEJQRl9GX0xPQ0spIHsKIAkJY29weV9tYXBfdmFsdWVfbG9ja2VkKCZhbXA7aHRhYi0mZ3Q7bWFwLAotCQkJCSAgICAgIGh0YWJfZWxlbV92YWx1ZShsX25ldywga2V5X3NpemUpLAomIzQzOwkJCQkgICAgICBodGFiX2VsZW1fdmFsdWUoaHRhYiwgbF9uZXcpLAogCQkJCSAgICAgIHZhbHVlLCBmYWxzZSk7CiAJfSBlbHNlIHsKLQkJY29weV9tYXBfdmFsdWUoJmFtcDtodGFiLSZndDttYXAsIGh0YWJfZWxlbV92YWx1ZShsX25ldywga2V5X3NpemUpLCB2YWx1ZSk7CiYjNDM7CQljb3B5X21hcF92YWx1ZSgmYW1wO2h0YWItJmd0O21hcCwgaHRhYl9lbGVtX3ZhbHVlKGh0YWIsIGxfbmV3KSwgdmFsdWUpOwogCX0KIAotCWxfbmV3LSZndDtoYXNoID0gaGFzaDsKJiM0MzsJaHRhYl9lbGVtX3NldF9oYXNoKGh0YWIsIGxfbmV3LCBoYXNoKTsKIAlyZXR1cm4gbF9uZXc7CiBkZWNfY291bnQ6CiAJZGVjX2VsZW1fY291bnQoaHRhYik7CkBAIC0xMTk5LDcgJiM0MzsxMzExLDcgQEAgc3RhdGljIGxvbmcgaHRhYl9tYXBfdXBkYXRlX2VsZW0oc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5LCB2b2lkICp2YWx1ZSwKIAkJaWYgKHVubGlrZWx5KCFidGZfcmVjb3JkX2hhc19maWVsZChtYXAtJmd0O3JlY29yZCwgQlBGX1NQSU5fTE9DSykpKQogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCS8qIGZpbmQgYW4gZWxlbWVudCB3aXRob3V0IHRha2luZyB0aGUgYnVja2V0IGxvY2sgKi8KLQkJbF9vbGQgPSBsb29rdXBfbnVsbHNfZWxlbV9yYXcoaGVhZCwgaGFzaCwga2V5LCBrZXlfc2l6ZSwKJiM0MzsJCWxfb2xkID0gbG9va3VwX251bGxzX2VsZW1fcmF3KGh0YWIsIGhlYWQsIGhhc2gsIGtleSwga2V5X3NpemUsCiAJCQkJCSAgICAgIGh0YWItJmd0O25fYnVja2V0cyk7CiAJCXJldCA9IGNoZWNrX2ZsYWdzKGh0YWIsIGxfb2xkLCBtYXBfZmxhZ3MpOwogCQlpZiAocmV0KQpAQCAtMTIwNyw3ICYjNDM7MTMxOSw3IEBAIHN0YXRpYyBsb25nIGh0YWJfbWFwX3VwZGF0ZV9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSwgdm9pZCAqdmFsdWUsCiAJCWlmIChsX29sZCkgewogCQkJLyogZ3JhYiB0aGUgZWxlbWVudCBsb2NrIGFuZCB1cGRhdGUgdmFsdWUgaW4gcGxhY2UgKi8KIAkJCWNvcHlfbWFwX3ZhbHVlX2xvY2tlZChtYXAsCi0JCQkJCSAgICAgIGh0YWJfZWxlbV92YWx1ZShsX29sZCwga2V5X3NpemUpLAomIzQzOwkJCQkJICAgICAgaHRhYl9lbGVtX3ZhbHVlKGh0YWIsIGxfb2xkKSwKIAkJCQkJICAgICAgdmFsdWUsIGZhbHNlKTsKIAkJCXJldHVybiAwOwogCQl9CkBAIC0xMjIxLDcgJiM0MzsxMzMzLDcgQEAgc3RhdGljIGxvbmcgaHRhYl9tYXBfdXBkYXRlX2VsZW0oc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5LCB2b2lkICp2YWx1ZSwKIAlpZiAocmV0KQogCQlyZXR1cm4gcmV0OwogCi0JbF9vbGQgPSBsb29rdXBfZWxlbV9yYXcoaGVhZCwgaGFzaCwga2V5LCBrZXlfc2l6ZSk7CiYjNDM7CWxfb2xkID0gbG9va3VwX2VsZW1fcmF3KGh0YWIsIGhlYWQsIGhhc2gsIGtleSwga2V5X3NpemUpOwogCiAJcmV0ID0gY2hlY2tfZmxhZ3MoaHRhYiwgbF9vbGQsIG1hcF9mbGFncyk7CiAJaWYgKHJldCkKQEAgLTEyMzUsNyAmIzQzOzEzNDcsNyBAQCBzdGF0aWMgbG9uZyBodGFiX21hcF91cGRhdGVfZWxlbShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXksIHZvaWQgKnZhbHVlLAogCQkgKiBhbmQgdXBkYXRlIGVsZW1lbnQgaW4gcGxhY2UKIAkJICovCiAJCWNvcHlfbWFwX3ZhbHVlX2xvY2tlZChtYXAsCi0JCQkJICAgICAgaHRhYl9lbGVtX3ZhbHVlKGxfb2xkLCBrZXlfc2l6ZSksCiYjNDM7CQkJCSAgICAgIGh0YWJfZWxlbV92YWx1ZShodGFiLCBsX29sZCksCiAJCQkJICAgICAgdmFsdWUsIGZhbHNlKTsKIAkJcmV0ID0gMDsKIAkJZ290byBlcnI7CkBAIC0xMjc1LDcgJiM0MzsxMzg3LDcgQEAgc3RhdGljIHZvaWQgaHRhYl9scnVfcHVzaF9mcmVlKHN0cnVjdCBicGZfaHRhYiAqaHRhYiwgc3RydWN0IGh0YWJfZWxlbSAqZWxlbSkKIHsKIAljaGVja19hbmRfY2FuY2VsX2ZpZWxkcyhodGFiLCBlbGVtKTsKIAlicGZfbWFwX2RlY19lbGVtX2NvdW50KCZhbXA7aHRhYi0mZ3Q7bWFwKTsKLQlicGZfbHJ1X3B1c2hfZnJlZSgmYW1wO2h0YWItJmd0O2xydSwgJmFtcDtlbGVtLSZndDtscnVfbm9kZSk7CiYjNDM7CWJwZl9scnVfcHVzaF9mcmVlKCZhbXA7aHRhYi0mZ3Q7bHJ1LCBodGFiX2VsZW1fbHJ1X25vZGUoZWxlbSkpOwogfQogCiBzdGF0aWMgbG9uZyBodGFiX2xydV9tYXBfdXBkYXRlX2VsZW0oc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5LCB2b2lkICp2YWx1ZSwKQEAgLTEzMTAsMTMgJiM0MzsxNDIyLDEzIEBAIHN0YXRpYyBsb25nIGh0YWJfbHJ1X21hcF91cGRhdGVfZWxlbShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXksIHZvaWQgKnZhbHVlCiAJbF9uZXcgPSBwcmVhbGxvY19scnVfcG9wKGh0YWIsIGtleSwgaGFzaCk7CiAJaWYgKCFsX25ldykKIAkJcmV0dXJuIC1FTk9NRU07Ci0JY29weV9tYXBfdmFsdWUoJmFtcDtodGFiLSZndDttYXAsIGh0YWJfZWxlbV92YWx1ZShsX25ldywgbWFwLSZndDtrZXlfc2l6ZSksIHZhbHVlKTsKJiM0MzsJY29weV9tYXBfdmFsdWUoJmFtcDtodGFiLSZndDttYXAsIGh0YWJfZWxlbV92YWx1ZShodGFiLCBsX25ldyksIHZhbHVlKTsKIAogCXJldCA9IGh0YWJfbG9ja19idWNrZXQoYiwgJmFtcDtmbGFncyk7CiAJaWYgKHJldCkKIAkJZ290byBlcnJfbG9ja19idWNrZXQ7CiAKLQlsX29sZCA9IGxvb2t1cF9lbGVtX3JhdyhoZWFkLCBoYXNoLCBrZXksIGtleV9zaXplKTsKJiM0MzsJbF9vbGQgPSBsb29rdXBfZWxlbV9yYXcoaHRhYiwgaGVhZCwgaGFzaCwga2V5LCBrZXlfc2l6ZSk7CiAKIAlyZXQgPSBjaGVja19mbGFncyhodGFiLCBsX29sZCwgbWFwX2ZsYWdzKTsKIAlpZiAocmV0KQpAQCAtMTMyNyw3ICYjNDM7MTQzOSw3IEBAIHN0YXRpYyBsb25nIGh0YWJfbHJ1X21hcF91cGRhdGVfZWxlbShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXksIHZvaWQgKnZhbHVlCiAJICovCiAJaGxpc3RfbnVsbHNfYWRkX2hlYWRfcmN1KCZhbXA7bF9uZXctJmd0O2hhc2hfbm9kZSwgaGVhZCk7CiAJaWYgKGxfb2xkKSB7Ci0JCWJwZl9scnVfbm9kZV9zZXRfcmVmKCZhbXA7bF9uZXctJmd0O2xydV9ub2RlKTsKJiM0MzsJCWJwZl9scnVfbm9kZV9zZXRfcmVmKGh0YWJfZWxlbV9scnVfbm9kZShsX25ldykpOwogCQlobGlzdF9udWxsc19kZWxfcmN1KCZhbXA7bF9vbGQtJmd0O2hhc2hfbm9kZSk7CiAJfQogCXJldCA9IDA7CkBAIC0xMzgzLDcgJiM0MzsxNDk1LDcgQEAgc3RhdGljIGxvbmcgaHRhYl9tYXBfdXBkYXRlX2VsZW1faW5fcGxhY2Uoc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5LAogCWlmIChyZXQpCiAJCXJldHVybiByZXQ7CiAKLQlsX29sZCA9IGxvb2t1cF9lbGVtX3JhdyhoZWFkLCBoYXNoLCBrZXksIGtleV9zaXplKTsKJiM0MzsJbF9vbGQgPSBsb29rdXBfZWxlbV9yYXcoaHRhYiwgaGVhZCwgaGFzaCwga2V5LCBrZXlfc2l6ZSk7CiAKIAlyZXQgPSBjaGVja19mbGFncyhodGFiLCBsX29sZCwgbWFwX2ZsYWdzKTsKIAlpZiAocmV0KQpAQCAtMTM5MiwxMCAmIzQzOzE1MDQsMTAgQEAgc3RhdGljIGxvbmcgaHRhYl9tYXBfdXBkYXRlX2VsZW1faW5fcGxhY2Uoc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5LAogCWlmIChsX29sZCkgewogCQkvKiBVcGRhdGUgdmFsdWUgaW4tcGxhY2UgKi8KIAkJaWYgKHBlcmNwdSkgewotCQkJcGNwdV9jb3B5X3ZhbHVlKGh0YWIsIGh0YWJfZWxlbV9nZXRfcHRyKGxfb2xkLCBrZXlfc2l6ZSksCiYjNDM7CQkJcGNwdV9jb3B5X3ZhbHVlKGh0YWIsIGh0YWJfZWxlbV9nZXRfcHRyKGh0YWIsIGxfb2xkKSwKIAkJCQkJdmFsdWUsIG9uYWxsY3B1cywgbWFwX2ZsYWdzKTsKIAkJfSBlbHNlIHsKLQkJCXZvaWQgKippbm5lcl9tYXBfcHB0ciA9IGh0YWJfZWxlbV92YWx1ZShsX29sZCwga2V5X3NpemUpOwomIzQzOwkJCXZvaWQgKippbm5lcl9tYXBfcHB0ciA9IGh0YWJfZWxlbV92YWx1ZShodGFiLCBsX29sZCk7CiAKIAkJCW9sZF9tYXBfcHRyID0gKmlubmVyX21hcF9wcHRyOwogCQkJV1JJVEVfT05DRSgqaW5uZXJfbWFwX3BwdHIsICoodm9pZCAqKil2YWx1ZSk7CkBAIC0xNDU2LDIwICYjNDM7MTU2OCwyMCBAQCBzdGF0aWMgbG9uZyBfX2h0YWJfbHJ1X3BlcmNwdV9tYXBfdXBkYXRlX2VsZW0oc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5LAogCWlmIChyZXQpCiAJCWdvdG8gZXJyX2xvY2tfYnVja2V0OwogCi0JbF9vbGQgPSBsb29rdXBfZWxlbV9yYXcoaGVhZCwgaGFzaCwga2V5LCBrZXlfc2l6ZSk7CiYjNDM7CWxfb2xkID0gbG9va3VwX2VsZW1fcmF3KGh0YWIsIGhlYWQsIGhhc2gsIGtleSwga2V5X3NpemUpOwogCiAJcmV0ID0gY2hlY2tfZmxhZ3MoaHRhYiwgbF9vbGQsIG1hcF9mbGFncyk7CiAJaWYgKHJldCkKIAkJZ290byBlcnI7CiAKIAlpZiAobF9vbGQpIHsKLQkJYnBmX2xydV9ub2RlX3NldF9yZWYoJmFtcDtsX29sZC0mZ3Q7bHJ1X25vZGUpOwomIzQzOwkJYnBmX2xydV9ub2RlX3NldF9yZWYoaHRhYl9lbGVtX2xydV9ub2RlKGxfb2xkKSk7CiAKIAkJLyogcGVyLWNwdSBoYXNoIG1hcCBjYW4gdXBkYXRlIHZhbHVlIGluLXBsYWNlICovCi0JCXBjcHVfY29weV92YWx1ZShodGFiLCBodGFiX2VsZW1fZ2V0X3B0cihsX29sZCwga2V5X3NpemUpLAomIzQzOwkJcGNwdV9jb3B5X3ZhbHVlKGh0YWIsIGh0YWJfZWxlbV9nZXRfcHRyKGh0YWIsIGxfb2xkKSwKIAkJCQl2YWx1ZSwgb25hbGxjcHVzLCBtYXBfZmxhZ3MpOwogCX0gZWxzZSB7Ci0JCXBjcHVfaW5pdF92YWx1ZShodGFiLCBodGFiX2VsZW1fZ2V0X3B0cihsX25ldywga2V5X3NpemUpLAomIzQzOwkJcGNwdV9pbml0X3ZhbHVlKGh0YWIsIGh0YWJfZWxlbV9nZXRfcHRyKGh0YWIsIGxfbmV3KSwKIAkJCQl2YWx1ZSwgb25hbGxjcHVzLCBtYXBfZmxhZ3MpOwogCQlobGlzdF9udWxsc19hZGRfaGVhZF9yY3UoJmFtcDtsX25ldy0mZ3Q7aGFzaF9ub2RlLCBoZWFkKTsKIAkJbF9uZXcgPSBOVUxMOwpAQCAtMTQ4MCw3ICYjNDM7MTU5Miw3IEBAIHN0YXRpYyBsb25nIF9faHRhYl9scnVfcGVyY3B1X21hcF91cGRhdGVfZWxlbShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXksCiBlcnJfbG9ja19idWNrZXQ6CiAJaWYgKGxfbmV3KSB7CiAJCWJwZl9tYXBfZGVjX2VsZW1fY291bnQoJmFtcDtodGFiLSZndDttYXApOwotCQlicGZfbHJ1X3B1c2hfZnJlZSgmYW1wO2h0YWItJmd0O2xydSwgJmFtcDtsX25ldy0mZ3Q7bHJ1X25vZGUpOwomIzQzOwkJYnBmX2xydV9wdXNoX2ZyZWUoJmFtcDtodGFiLSZndDtscnUsIGh0YWJfZWxlbV9scnVfbm9kZShsX25ldykpOwogCX0KIAlyZXR1cm4gcmV0OwogfQpAQCAtMTUyMSw3ICYjNDM7MTYzMyw3IEBAIHN0YXRpYyBsb25nIGh0YWJfbWFwX2RlbGV0ZV9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSkKIAlpZiAocmV0KQogCQlyZXR1cm4gcmV0OwogCi0JbCA9IGxvb2t1cF9lbGVtX3JhdyhoZWFkLCBoYXNoLCBrZXksIGtleV9zaXplKTsKJiM0MzsJbCA9IGxvb2t1cF9lbGVtX3JhdyhodGFiLCBoZWFkLCBoYXNoLCBrZXksIGtleV9zaXplKTsKIAlpZiAobCkKIAkJaGxpc3RfbnVsbHNfZGVsX3JjdSgmYW1wO2wtJmd0O2hhc2hfbm9kZSk7CiAJZWxzZQpAQCAtMTU1Niw3ICYjNDM7MTY2OCw3IEBAIHN0YXRpYyBsb25nIGh0YWJfbHJ1X21hcF9kZWxldGVfZWxlbShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXkpCiAJaWYgKHJldCkKIAkJcmV0dXJuIHJldDsKIAotCWwgPSBsb29rdXBfZWxlbV9yYXcoaGVhZCwgaGFzaCwga2V5LCBrZXlfc2l6ZSk7CiYjNDM7CWwgPSBsb29rdXBfZWxlbV9yYXcoaHRhYiwgaGVhZCwgaGFzaCwga2V5LCBrZXlfc2l6ZSk7CiAKIAlpZiAobCkKIAkJaGxpc3RfbnVsbHNfZGVsX3JjdSgmYW1wO2wtJmd0O2hhc2hfbm9kZSk7CkBAIC0xNjAyLDcgJiM0MzsxNzE0LDcgQEAgc3RhdGljIHZvaWQgaHRhYl9mcmVlX21hbGxvY2VkX2ludGVybmFsX3N0cnVjdHMoc3RydWN0IGJwZl9odGFiICpodGFiKQogCQlobGlzdF9udWxsc19mb3JfZWFjaF9lbnRyeShsLCBuLCBoZWFkLCBoYXNoX25vZGUpIHsKIAkJCS8qIFdlIG9ubHkgZnJlZSBpbnRlcm5hbCBzdHJ1Y3RzIG9uIHVyZWYgZHJvcHBpbmcgdG8gemVybyAqLwogCQkJYnBmX21hcF9mcmVlX2ludGVybmFsX3N0cnVjdHMoJmFtcDtodGFiLSZndDttYXAsCi0JCQkJCQkgICAgICBodGFiX2VsZW1fdmFsdWUobCwgaHRhYi0mZ3Q7bWFwLmtleV9zaXplKSk7CiYjNDM7CQkJCQkJICAgICAgaHRhYl9lbGVtX3ZhbHVlKGh0YWIsIGwpKTsKIAkJfQogCQljb25kX3Jlc2NoZWRfcmN1KCk7CiAJfQpAQCAtMTY5Nyw3ICYjNDM7MTgwOSw3IEBAIHN0YXRpYyBpbnQgX19odGFiX21hcF9sb29rdXBfYW5kX2RlbGV0ZV9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSwKIAlpZiAocmV0KQogCQlyZXR1cm4gcmV0OwogCi0JbCA9IGxvb2t1cF9lbGVtX3JhdyhoZWFkLCBoYXNoLCBrZXksIGtleV9zaXplKTsKJiM0MzsJbCA9IGxvb2t1cF9lbGVtX3JhdyhodGFiLCBoZWFkLCBoYXNoLCBrZXksIGtleV9zaXplKTsKIAlpZiAoIWwpIHsKIAkJcmV0ID0gLUVOT0VOVDsKIAkJZ290byBvdXRfdW5sb2NrOwpAQCAtMTcwOCwxNCAmIzQzOzE4MjAsMTQgQEAgc3RhdGljIGludCBfX2h0YWJfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2VsZW0oc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5LAogCQl2b2lkIF9fcGVyY3B1ICpwcHRyOwogCQlpbnQgb2ZmID0gMCwgY3B1OwogCi0JCXBwdHIgPSBodGFiX2VsZW1fZ2V0X3B0cihsLCBrZXlfc2l6ZSk7CiYjNDM7CQlwcHRyID0gaHRhYl9lbGVtX2dldF9wdHIoaHRhYiwgbCk7CiAJCWZvcl9lYWNoX3Bvc3NpYmxlX2NwdShjcHUpIHsKIAkJCWNvcHlfbWFwX3ZhbHVlX2xvbmcoJmFtcDtodGFiLSZndDttYXAsIHZhbHVlICYjNDM7IG9mZiwgcGVyX2NwdV9wdHIocHB0ciwgY3B1KSk7CiAJCQljaGVja19hbmRfaW5pdF9tYXBfdmFsdWUoJmFtcDtodGFiLSZndDttYXAsIHZhbHVlICYjNDM7IG9mZik7CiAJCQlvZmYgJiM0Mzs9IHJvdW5kdXBfdmFsdWVfc2l6ZTsKIAkJfQogCX0gZWxzZSB7Ci0JCXZvaWQgKnNyYyA9IGh0YWJfZWxlbV92YWx1ZShsLCBtYXAtJmd0O2tleV9zaXplKTsKJiM0MzsJCXZvaWQgKnNyYyA9IGh0YWJfZWxlbV92YWx1ZShodGFiLCBsKTsKIAogCQlpZiAoZmxhZ3MgJmFtcDsgQlBGX0ZfTE9DSykKIAkJCWNvcHlfbWFwX3ZhbHVlX2xvY2tlZChtYXAsIHZhbHVlLCBzcmMsIHRydWUpOwpAQCAtMTg5OCwxMyAmIzQzOzIwMTAsMTMgQEAgX19odGFiX21hcF9sb29rdXBfYW5kX2RlbGV0ZV9iYXRjaChzdHJ1Y3QgYnBmX21hcCAqbWFwLAogCQlnb3RvIG5leHRfYmF0Y2g7CiAKIAlobGlzdF9udWxsc19mb3JfZWFjaF9lbnRyeV9zYWZlKGwsIG4sIGhlYWQsIGhhc2hfbm9kZSkgewotCQltZW1jcHkoZHN0X2tleSwgbC0mZ3Q7a2V5LCBrZXlfc2l6ZSk7CiYjNDM7CQltZW1jcHkoZHN0X2tleSwgaHRhYl9lbGVtX2tleShodGFiLCBsKSwga2V5X3NpemUpOwogCiAJCWlmIChpc19wZXJjcHUpIHsKIAkJCWludCBvZmYgPSAwLCBjcHU7CiAJCQl2b2lkIF9fcGVyY3B1ICpwcHRyOwogCi0JCQlwcHRyID0gaHRhYl9lbGVtX2dldF9wdHIobCwgbWFwLSZndDtrZXlfc2l6ZSk7CiYjNDM7CQkJcHB0ciA9IGh0YWJfZWxlbV9nZXRfcHRyKGh0YWIsIGwpOwogCQkJaWYgKGVsZW1fbWFwX2ZsYWdzICZhbXA7IEJQRl9GX0NQVSkgewogCQkJCWNwdSA9IGVsZW1fbWFwX2ZsYWdzICZndDsmZ3Q7IDMyOwogCQkJCWNvcHlfbWFwX3ZhbHVlKCZhbXA7aHRhYi0mZ3Q7bWFwLCBkc3RfdmFsLCBwZXJfY3B1X3B0cihwcHRyLCBjcHUpKTsKQEAgLTE5MTgsNyAmIzQzOzIwMzAsNyBAQCBfX2h0YWJfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2JhdGNoKHN0cnVjdCBicGZfbWFwICptYXAsCiAJCQkJfQogCQkJfQogCQl9IGVsc2UgewotCQkJdmFsdWUgPSBodGFiX2VsZW1fdmFsdWUobCwga2V5X3NpemUpOwomIzQzOwkJCXZhbHVlID0gaHRhYl9lbGVtX3ZhbHVlKGh0YWIsIGwpOwogCQkJaWYgKGlzX2ZkX2h0YWIoaHRhYikpIHsKIAkJCQlzdHJ1Y3QgYnBmX21hcCAqKmlubmVyX21hcCA9IHZhbHVlOwogCkBAIC0yMTgzLDEyICYjNDM7MjI5NSwxMiBAQCBzdGF0aWMgaW50IF9fYnBmX2hhc2hfbWFwX3NlcV9zaG93KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCBzdHJ1Y3QgaHRhYl9lbGVtICplbGVtKQogCQljdHgubWV0YSA9ICZhbXA7bWV0YTsKIAkJY3R4Lm1hcCA9IGluZm8tJmd0O21hcDsKIAkJaWYgKGVsZW0pIHsKLQkJCWN0eC5rZXkgPSBlbGVtLSZndDtrZXk7CiYjNDM7CQkJY3R4LmtleSA9IGh0YWJfZWxlbV9rZXkoaW5mby0mZ3Q7aHRhYiwgZWxlbSk7CiAJCQlpZiAoIWluZm8tJmd0O3BlcmNwdV92YWx1ZV9idWYpIHsKLQkJCQljdHgudmFsdWUgPSBodGFiX2VsZW1fdmFsdWUoZWxlbSwgbWFwLSZndDtrZXlfc2l6ZSk7CiYjNDM7CQkJCWN0eC52YWx1ZSA9IGh0YWJfZWxlbV92YWx1ZShpbmZvLSZndDtodGFiLCBlbGVtKTsKIAkJCX0gZWxzZSB7CiAJCQkJcm91bmR1cF92YWx1ZV9zaXplID0gcm91bmRfdXAobWFwLSZndDt2YWx1ZV9zaXplLCA4KTsKLQkJCQlwcHRyID0gaHRhYl9lbGVtX2dldF9wdHIoZWxlbSwgbWFwLSZndDtrZXlfc2l6ZSk7CiYjNDM7CQkJCXBwdHIgPSBodGFiX2VsZW1fZ2V0X3B0cihpbmZvLSZndDtodGFiLCBlbGVtKTsKIAkJCQlmb3JfZWFjaF9wb3NzaWJsZV9jcHUoY3B1KSB7CiAJCQkJCWNvcHlfbWFwX3ZhbHVlX2xvbmcobWFwLCBpbmZvLSZndDtwZXJjcHVfdmFsdWVfYnVmICYjNDM7IG9mZiwKIAkJCQkJCQkgICAgcGVyX2NwdV9wdHIocHB0ciwgY3B1KSk7CkBAIC0yMjkzLDEzICYjNDM7MjQwNSwxMyBAQCBzdGF0aWMgbG9uZyBicGZfZm9yX2VhY2hfaGFzaF9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIGJwZl9jYWxsYmFja190IGNhbGxiYWNrXwogCQlyY3VfcmVhZF9sb2NrKCk7CiAJCWhlYWQgPSAmYW1wO2ItJmd0O2hlYWQ7CiAJCWhsaXN0X251bGxzX2Zvcl9lYWNoX2VudHJ5X3NhZmUoZWxlbSwgbiwgaGVhZCwgaGFzaF9ub2RlKSB7Ci0JCQlrZXkgPSBlbGVtLSZndDtrZXk7CiYjNDM7CQkJa2V5ID0gaHRhYl9lbGVtX2tleShodGFiLCBlbGVtKTsKIAkJCWlmIChpc19wZXJjcHUpIHsKIAkJCQkvKiBjdXJyZW50IGNwdSB2YWx1ZSBmb3IgcGVyY3B1IG1hcCAqLwotCQkJCXBwdHIgPSBodGFiX2VsZW1fZ2V0X3B0cihlbGVtLCBtYXAtJmd0O2tleV9zaXplKTsKJiM0MzsJCQkJcHB0ciA9IGh0YWJfZWxlbV9nZXRfcHRyKGh0YWIsIGVsZW0pOwogCQkJCXZhbCA9IHRoaXNfY3B1X3B0cihwcHRyKTsKIAkJCX0gZWxzZSB7Ci0JCQkJdmFsID0gaHRhYl9lbGVtX3ZhbHVlKGVsZW0sIG1hcC0mZ3Q7a2V5X3NpemUpOwomIzQzOwkJCQl2YWwgPSBodGFiX2VsZW1fdmFsdWUoaHRhYiwgZWxlbSk7CiAJCQl9CiAJCQludW1fZWxlbXMmIzQzOyYjNDM7OwogCQkJcmV0ID0gY2FsbGJhY2tfZm4oKHU2NCkobG9uZyltYXAsICh1NjQpKGxvbmcpa2V5LApAQCAtMjQwMywxMCAmIzQzOzI1MTUsMTEgQEAgY29uc3Qgc3RydWN0IGJwZl9tYXBfb3BzIGh0YWJfbHJ1X21hcF9vcHMgPSB7CiAvKiBDYWxsZWQgZnJvbSBlQlBGIHByb2dyYW0gKi8KIHN0YXRpYyB2b2lkICpodGFiX3BlcmNwdV9tYXBfbG9va3VwX2VsZW0oc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5KQogewomIzQzOwlzdHJ1Y3QgYnBmX2h0YWIgKmh0YWIgPSBjb250YWluZXJfb2YobWFwLCBzdHJ1Y3QgYnBmX2h0YWIsIG1hcCk7CiAJc3RydWN0IGh0YWJfZWxlbSAqbCA9IF9faHRhYl9tYXBfbG9va3VwX2VsZW0obWFwLCBrZXkpOwogCiAJaWYgKGwpCi0JCXJldHVybiB0aGlzX2NwdV9wdHIoaHRhYl9lbGVtX2dldF9wdHIobCwgbWFwLSZndDtrZXlfc2l6ZSkpOwomIzQzOwkJcmV0dXJuIHRoaXNfY3B1X3B0cihodGFiX2VsZW1fZ2V0X3B0cihodGFiLCBsKSk7CiAJZWxzZQogCQlyZXR1cm4gTlVMTDsKIH0KQEAgLTI0MTQsNiAmIzQzOzI1MjcsNyBAQCBzdGF0aWMgdm9pZCAqaHRhYl9wZXJjcHVfbWFwX2xvb2t1cF9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSkKIC8qIGlubGluZSBicGZfbWFwX2xvb2t1cF9lbGVtKCkgY2FsbCBmb3IgcGVyLUNQVSBoYXNobWFwICovCiBzdGF0aWMgaW50IGh0YWJfcGVyY3B1X21hcF9nZW5fbG9va3VwKHN0cnVjdCBicGZfbWFwICptYXAsIHN0cnVjdCBicGZfaW5zbiAqaW5zbl9idWYpCiB7CiYjNDM7CXN0cnVjdCBicGZfaHRhYiAqaHRhYiA9IGNvbnRhaW5lcl9vZihtYXAsIHN0cnVjdCBicGZfaHRhYiwgbWFwKTsKIAlzdHJ1Y3QgYnBmX2luc24gKmluc24gPSBpbnNuX2J1ZjsKIAogCWlmICghYnBmX2ppdF9zdXBwb3J0c19wZXJjcHVfaW5zbigpKQpAQCAtMjQyNCw3ICYjNDM7MjUzOCw3IEBAIHN0YXRpYyBpbnQgaHRhYl9wZXJjcHVfbWFwX2dlbl9sb29rdXAoc3RydWN0IGJwZl9tYXAgKm1hcCwgc3RydWN0IGJwZl9pbnNuICppbnNuCiAJKmluc24mIzQzOyYjNDM7ID0gQlBGX0VNSVRfQ0FMTChfX2h0YWJfbWFwX2xvb2t1cF9lbGVtKTsKIAkqaW5zbiYjNDM7JiM0MzsgPSBCUEZfSk1QX0lNTShCUEZfSkVRLCBCUEZfUkVHXzAsIDAsIDMpOwogCSppbnNuJiM0MzsmIzQzOyA9IEJQRl9BTFU2NF9JTU0oQlBGX0FERCwgQlBGX1JFR18wLAotCQkJCW9mZnNldG9mKHN0cnVjdCBodGFiX2VsZW0sIGtleSkgJiM0Mzsgcm91bmR1cChtYXAtJmd0O2tleV9zaXplLCA4KSk7CiYjNDM7CQkJCWh0YWItJmd0O2tleV9vZmZzZXQgJiM0Mzsgcm91bmR1cChtYXAtJmd0O2tleV9zaXplLCA4KSk7CiAJKmluc24mIzQzOyYjNDM7ID0gQlBGX0xEWF9NRU0oQlBGX0RXLCBCUEZfUkVHXzAsIEJQRl9SRUdfMCwgMCk7CiAJKmluc24mIzQzOyYjNDM7ID0gQlBGX01PVjY0X1BFUkNQVV9SRUcoQlBGX1JFR18wLCBCUEZfUkVHXzApOwogCkBAIC0yNDMzLDYgJiM0MzsyNTQ3LDcgQEAgc3RhdGljIGludCBodGFiX3BlcmNwdV9tYXBfZ2VuX2xvb2t1cChzdHJ1Y3QgYnBmX21hcCAqbWFwLCBzdHJ1Y3QgYnBmX2luc24gKmluc24KIAogc3RhdGljIHZvaWQgKmh0YWJfcGVyY3B1X21hcF9sb29rdXBfcGVyY3B1X2VsZW0oc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5LCB1MzIgY3B1KQogewomIzQzOwlzdHJ1Y3QgYnBmX2h0YWIgKmh0YWIgPSBjb250YWluZXJfb2YobWFwLCBzdHJ1Y3QgYnBmX2h0YWIsIG1hcCk7CiAJc3RydWN0IGh0YWJfZWxlbSAqbDsKIAogCWlmIChjcHUgJmd0Oz0gbnJfY3B1X2lkcykKQEAgLTI0NDAsMTggJiM0MzsyNTU1LDE5IEBAIHN0YXRpYyB2b2lkICpodGFiX3BlcmNwdV9tYXBfbG9va3VwX3BlcmNwdV9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSwKIAogCWwgPSBfX2h0YWJfbWFwX2xvb2t1cF9lbGVtKG1hcCwga2V5KTsKIAlpZiAobCkKLQkJcmV0dXJuIHBlcl9jcHVfcHRyKGh0YWJfZWxlbV9nZXRfcHRyKGwsIG1hcC0mZ3Q7a2V5X3NpemUpLCBjcHUpOwomIzQzOwkJcmV0dXJuIHBlcl9jcHVfcHRyKGh0YWJfZWxlbV9nZXRfcHRyKGh0YWIsIGwpLCBjcHUpOwogCWVsc2UKIAkJcmV0dXJuIE5VTEw7CiB9CiAKIHN0YXRpYyB2b2lkICpodGFiX2xydV9wZXJjcHVfbWFwX2xvb2t1cF9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSkKIHsKJiM0MzsJc3RydWN0IGJwZl9odGFiICpodGFiID0gY29udGFpbmVyX29mKG1hcCwgc3RydWN0IGJwZl9odGFiLCBtYXApOwogCXN0cnVjdCBodGFiX2VsZW0gKmwgPSBfX2h0YWJfbWFwX2xvb2t1cF9lbGVtKG1hcCwga2V5KTsKIAogCWlmIChsKSB7Ci0JCWJwZl9scnVfbm9kZV9zZXRfcmVmKCZhbXA7bC0mZ3Q7bHJ1X25vZGUpOwotCQlyZXR1cm4gdGhpc19jcHVfcHRyKGh0YWJfZWxlbV9nZXRfcHRyKGwsIG1hcC0mZ3Q7a2V5X3NpemUpKTsKJiM0MzsJCWJwZl9scnVfbm9kZV9zZXRfcmVmKGh0YWJfZWxlbV9scnVfbm9kZShsKSk7CiYjNDM7CQlyZXR1cm4gdGhpc19jcHVfcHRyKGh0YWJfZWxlbV9nZXRfcHRyKGh0YWIsIGwpKTsKIAl9CiAKIAlyZXR1cm4gTlVMTDsKQEAgLTI0NTksNiAmIzQzOzI1NzUsNyBAQCBzdGF0aWMgdm9pZCAqaHRhYl9scnVfcGVyY3B1X21hcF9sb29rdXBfZWxlbShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXkpCiAKIHN0YXRpYyB2b2lkICpodGFiX2xydV9wZXJjcHVfbWFwX2xvb2t1cF9wZXJjcHVfZWxlbShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXksIHUzMiBjcHUpCiB7CiYjNDM7CXN0cnVjdCBicGZfaHRhYiAqaHRhYiA9IGNvbnRhaW5lcl9vZihtYXAsIHN0cnVjdCBicGZfaHRhYiwgbWFwKTsKIAlzdHJ1Y3QgaHRhYl9lbGVtICpsOwogCiAJaWYgKGNwdSAmZ3Q7PSBucl9jcHVfaWRzKQpAQCAtMjQ2Niw4ICYjNDM7MjU4Myw4IEBAIHN0YXRpYyB2b2lkICpodGFiX2xydV9wZXJjcHVfbWFwX2xvb2t1cF9wZXJjcHVfZWxlbShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprCiAKIAlsID0gX19odGFiX21hcF9sb29rdXBfZWxlbShtYXAsIGtleSk7CiAJaWYgKGwpIHsKLQkJYnBmX2xydV9ub2RlX3NldF9yZWYoJmFtcDtsLSZndDtscnVfbm9kZSk7Ci0JCXJldHVybiBwZXJfY3B1X3B0cihodGFiX2VsZW1fZ2V0X3B0cihsLCBtYXAtJmd0O2tleV9zaXplKSwgY3B1KTsKJiM0MzsJCWJwZl9scnVfbm9kZV9zZXRfcmVmKGh0YWJfZWxlbV9scnVfbm9kZShsKSk7CiYjNDM7CQlyZXR1cm4gcGVyX2NwdV9wdHIoaHRhYl9lbGVtX2dldF9wdHIoaHRhYiwgbCksIGNwdSk7CiAJfQogCiAJcmV0dXJuIE5VTEw7CkBAIC0yNDc1LDYgJiM0MzsyNTkyLDcgQEAgc3RhdGljIHZvaWQgKmh0YWJfbHJ1X3BlcmNwdV9tYXBfbG9va3VwX3BlcmNwdV9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmsKIAogaW50IGJwZl9wZXJjcHVfaGFzaF9jb3B5KHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSwgdm9pZCAqdmFsdWUsIHU2NCBtYXBfZmxhZ3MpCiB7CiYjNDM7CXN0cnVjdCBicGZfaHRhYiAqaHRhYiA9IGNvbnRhaW5lcl9vZihtYXAsIHN0cnVjdCBicGZfaHRhYiwgbWFwKTsKIAlzdHJ1Y3QgaHRhYl9lbGVtICpsOwogCXZvaWQgX19wZXJjcHUgKnBwdHI7CiAJaW50IHJldCA9IC1FTk9FTlQ7CkBAIC0yNDk0LDcgJiM0MzsyNjEyLDcgQEAgaW50IGJwZl9wZXJjcHVfaGFzaF9jb3B5KHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSwgdm9pZCAqdmFsdWUsIHU2NCBtYXBfZmwKIAkvKiBXZSBkbyBub3QgbWFyayBMUlUgbWFwIGVsZW1lbnQgaGVyZSBpbiBvcmRlciB0byBub3QgbWVzcyB1cAogCSAqIGV2aWN0aW9uIGhldXJpc3RpY3Mgd2hlbiB1c2VyIHNwYWNlIGRvZXMgYSBtYXAgd2Fsay4KIAkgKi8KLQlwcHRyID0gaHRhYl9lbGVtX2dldF9wdHIobCwgbWFwLSZndDtrZXlfc2l6ZSk7CiYjNDM7CXBwdHIgPSBodGFiX2VsZW1fZ2V0X3B0cihodGFiLCBsKTsKIAlpZiAobWFwX2ZsYWdzICZhbXA7IEJQRl9GX0NQVSkgewogCQljcHUgPSBtYXBfZmxhZ3MgJmd0OyZndDsgMzI7CiAJCWNvcHlfbWFwX3ZhbHVlKG1hcCwgdmFsdWUsIHBlcl9jcHVfcHRyKHBwdHIsIGNwdSkpOwpAQCAtMjUzMiw2ICYjNDM7MjY1MCw3IEBAIGludCBicGZfcGVyY3B1X2hhc2hfdXBkYXRlKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSwgdm9pZCAqdmFsdWUsCiBzdGF0aWMgdm9pZCBodGFiX3BlcmNwdV9tYXBfc2VxX3Nob3dfZWxlbShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXksCiAJCQkJCSAgc3RydWN0IHNlcV9maWxlICptKQogewomIzQzOwlzdHJ1Y3QgYnBmX2h0YWIgKmh0YWIgPSBjb250YWluZXJfb2YobWFwLCBzdHJ1Y3QgYnBmX2h0YWIsIG1hcCk7CiAJc3RydWN0IGh0YWJfZWxlbSAqbDsKIAl2b2lkIF9fcGVyY3B1ICpwcHRyOwogCWludCBjcHU7CkBAIC0yNTQ2LDcgJiM0MzsyNjY1LDcgQEAgc3RhdGljIHZvaWQgaHRhYl9wZXJjcHVfbWFwX3NlcV9zaG93X2VsZW0oc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5LAogCiAJYnRmX3R5cGVfc2VxX3Nob3cobWFwLSZndDtidGYsIG1hcC0mZ3Q7YnRmX2tleV90eXBlX2lkLCBrZXksIG0pOwogCXNlcV9wdXRzKG0sICYjMzQ7OiB7XG4mIzM0Oyk7Ci0JcHB0ciA9IGh0YWJfZWxlbV9nZXRfcHRyKGwsIG1hcC0mZ3Q7a2V5X3NpemUpOwomIzQzOwlwcHRyID0gaHRhYl9lbGVtX2dldF9wdHIoaHRhYiwgbCk7CiAJZm9yX2VhY2hfcG9zc2libGVfY3B1KGNwdSkgewogCQlzZXFfcHJpbnRmKG0sICYjMzQ7XHRjcHUlZDogJiMzNDssIGNwdSk7CiAJCWJ0Zl90eXBlX3NlcV9zaG93KG1hcC0mZ3Q7YnRmLCBtYXAtJmd0O2J0Zl92YWx1ZV90eXBlX2lkLApAQCAtMjYyMCw3ICYjNDM7MjczOSw3IEBAIHN0YXRpYyB2b2lkIGZkX2h0YWJfbWFwX2ZyZWUoc3RydWN0IGJwZl9tYXAgKm1hcCkKIAkJaGVhZCA9IHNlbGVjdF9idWNrZXQoaHRhYiwgaSk7CiAKIAkJaGxpc3RfbnVsbHNfZm9yX2VhY2hfZW50cnlfc2FmZShsLCBuLCBoZWFkLCBoYXNoX25vZGUpIHsKLQkJCXZvaWQgKnB0ciA9IGZkX2h0YWJfbWFwX2dldF9wdHIobWFwLCBsKTsKJiM0MzsJCQl2b2lkICpwdHIgPSBmZF9odGFiX21hcF9nZXRfcHRyKGh0YWIsIGwpOwogCiAJCQltYXAtJmd0O29wcy0mZ3Q7bWFwX2ZkX3B1dF9wdHIobWFwLCBwdHIsIGZhbHNlKTsKIAkJfQpAQCAtMjcwNSw2ICYjNDM7MjgyNCw3IEBAIHN0YXRpYyB2b2lkICpodGFiX29mX21hcF9sb29rdXBfZWxlbShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXkpCiBzdGF0aWMgaW50IGh0YWJfb2ZfbWFwX2dlbl9sb29rdXAoc3RydWN0IGJwZl9tYXAgKm1hcCwKIAkJCQkgIHN0cnVjdCBicGZfaW5zbiAqaW5zbl9idWYpCiB7CiYjNDM7CXN0cnVjdCBicGZfaHRhYiAqaHRhYiA9IGNvbnRhaW5lcl9vZihtYXAsIHN0cnVjdCBicGZfaHRhYiwgbWFwKTsKIAlzdHJ1Y3QgYnBmX2luc24gKmluc24gPSBpbnNuX2J1ZjsKIAljb25zdCBpbnQgcmV0ID0gQlBGX1JFR18wOwogCkBAIC0yNzEzLDcgJiM0MzsyODMzLDcgQEAgc3RhdGljIGludCBodGFiX29mX21hcF9nZW5fbG9va3VwKHN0cnVjdCBicGZfbWFwICptYXAsCiAJKmluc24mIzQzOyYjNDM7ID0gQlBGX0VNSVRfQ0FMTChfX2h0YWJfbWFwX2xvb2t1cF9lbGVtKTsKIAkqaW5zbiYjNDM7JiM0MzsgPSBCUEZfSk1QX0lNTShCUEZfSkVRLCByZXQsIDAsIDIpOwogCSppbnNuJiM0MzsmIzQzOyA9IEJQRl9BTFU2NF9JTU0oQlBGX0FERCwgcmV0LAotCQkJCW9mZnNldG9mKHN0cnVjdCBodGFiX2VsZW0sIGtleSkgJiM0MzsKJiM0MzsJCQkJaHRhYi0mZ3Q7a2V5X29mZnNldCAmIzQzOwogCQkJCXJvdW5kX3VwKG1hcC0mZ3Q7a2V5X3NpemUsIDgpKTsKIAkqaW5zbiYjNDM7JiM0MzsgPSBCUEZfTERYX01FTShCUEZfRFcsIHJldCwgcmV0LCAwKTsKIApAQCAtMzExMiw3ICYjNDM7MzIzMiw3IEBAIHN0YXRpYyBpbnQgcmh0YWJfbWFwX2NoZWNrX2J0ZihzdHJ1Y3QgYnBmX21hcCAqbWFwLCBjb25zdCBzdHJ1Y3QgYnRmICpidGYsCiB7CiAJc3RydWN0IGJwZl9yaHRhYiAqcmh0YWIgPSBjb250YWluZXJfb2YobWFwLCBzdHJ1Y3QgYnBmX3JodGFiLCBtYXApOwogCi0JcmV0dXJuIGJwZl9tYV9zZXRfZHRvcihtYXAsICZhbXA7cmh0YWItJmd0O21hLCByaHRhYl9tZW1fZHRvcik7CiYjNDM7CXJldHVybiBicGZfbWFfc2V0X2R0b3IobWFwLCAmYW1wO3JodGFiLSZndDttYSwgcmh0YWJfbWVtX2R0b3IsIG9mZnNldG9mKHN0cnVjdCByaHRhYl9lbGVtLCBkYXRhKSk7CiB9CiAKIHN0YXRpYyB2b2lkIHJodGFiX21hcF9mcmVlX2ludGVybmFsX3N0cnVjdHMoc3RydWN0IGJwZl9tYXAgKm1hcCkKQEAgLTM1MzMsMyAmIzQzOzM2NTMsMTYgQEAgY29uc3Qgc3RydWN0IGJwZl9tYXBfb3BzIHJodGFiX21hcF9vcHMgPSB7CiAJLm1hcF9idGZfaWQgPSAmYW1wO3JodGFiX21hcF9idGZfaWRzWzBdLAogCS5pdGVyX3NlcV9pbmZvID0gJmFtcDtyaGFzaF9pdGVyX3NlcV9pbmZvLAogfTsKJiM0MzsKJiM0MztzaXplX3QgYnBmX2h0YWJfbWFwX21ldGFfc2l6ZSh2b2lkKQomIzQzO3sKJiM0MzsJcmV0dXJuIHNpemVvZihzdHJ1Y3QgYnBmX2h0YWIpOwomIzQzO30KJiM0MzsKJiM0Mzt2b2lkIGJwZl9odGFiX21hcF9tZXRhX2luaXQoc3RydWN0IGJwZl9tYXAgKmlubmVyX21hcF9tZXRhLCBzdHJ1Y3QgYnBmX21hcCAqaW5uZXJfbWFwKQomIzQzO3sKJiM0MzsJc3RydWN0IGJwZl9odGFiICppbm5lcl9odGFiX21ldGEgPSBjb250YWluZXJfb2YoaW5uZXJfbWFwX21ldGEsIHN0cnVjdCBicGZfaHRhYiwgbWFwKTsKJiM0MzsJc3RydWN0IGJwZl9odGFiICppbm5lcl9odGFiID0gY29udGFpbmVyX29mKGlubmVyX21hcCwgc3RydWN0IGJwZl9odGFiLCBtYXApOwomIzQzOwomIzQzOwlpbm5lcl9odGFiX21ldGEtJmd0O2tleV9vZmZzZXQgPSBpbm5lcl9odGFiLSZndDtrZXlfb2Zmc2V0OwomIzQzO30KZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvbWFwX2luX21hcC5jIGIva2VybmVsL2JwZi9tYXBfaW5fbWFwLmMKaW5kZXggZDJjYmFiNGJkZjY0NGEuLmIyZGI1ZDBjOThiZWUyIDEwMDY0NAotLS0gYS9rZXJuZWwvYnBmL21hcF9pbl9tYXAuYwomIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvYnBmL21hcF9pbl9tYXAuYwpAQCAtNyw2ICYjNDM7NywxNSBAQAogCiAjaW5jbHVkZSAmIzM0O21hcF9pbl9tYXAuaCYjMzQ7CiAKJiM0MztzdGF0aWMgYm9vbCBicGZfbWFwX3R5cGVfaXNfaHRhYihlbnVtIGJwZl9tYXBfdHlwZSB0eXBlKQomIzQzO3sKJiM0MzsJcmV0dXJuIHR5cGUgPT0gQlBGX01BUF9UWVBFX0hBU0ggfHwKJiM0MzsJICAgICAgIHR5cGUgPT0gQlBGX01BUF9UWVBFX1BFUkNQVV9IQVNIIHx8CiYjNDM7CSAgICAgICB0eXBlID09IEJQRl9NQVBfVFlQRV9MUlVfSEFTSCB8fAomIzQzOwkgICAgICAgdHlwZSA9PSBCUEZfTUFQX1RZUEVfTFJVX1BFUkNQVV9IQVNIIHx8CiYjNDM7CSAgICAgICB0eXBlID09IEJQRl9NQVBfVFlQRV9IQVNIX09GX01BUFM7CiYjNDM7fQomIzQzOwogc3RydWN0IGJwZl9tYXAgKmJwZl9tYXBfbWV0YV9hbGxvYyhpbnQgaW5uZXJfbWFwX3VmZCkKIHsKIAlzdHJ1Y3QgYnBmX21hcCAqaW5uZXJfbWFwLCAqaW5uZXJfbWFwX21ldGE7CkBAIC0yOSw2ICYjNDM7MzgsOCBAQCBzdHJ1Y3QgYnBmX21hcCAqYnBmX21hcF9tZXRhX2FsbG9jKGludCBpbm5lcl9tYXBfdWZkKQogCS8qIEluIHNvbWUgY2FzZXMgdmVyaWZpZXIgbmVlZHMgdG8gYWNjZXNzIGJleW9uZCBqdXN0IGJhc2UgbWFwLiAqLwogCWlmIChpbm5lcl9tYXAtJmd0O29wcyA9PSAmYW1wO2FycmF5X21hcF9vcHMgfHwgaW5uZXJfbWFwLSZndDtvcHMgPT0gJmFtcDtwZXJjcHVfYXJyYXlfbWFwX29wcykKIAkJaW5uZXJfbWFwX21ldGFfc2l6ZSA9IHNpemVvZihzdHJ1Y3QgYnBmX2FycmF5KTsKJiM0MzsJZWxzZSBpZiAoYnBmX21hcF90eXBlX2lzX2h0YWIoaW5uZXJfbWFwLSZndDttYXBfdHlwZSkpCiYjNDM7CQlpbm5lcl9tYXBfbWV0YV9zaXplID0gYnBmX2h0YWJfbWFwX21ldGFfc2l6ZSgpOwogCiAJaW5uZXJfbWFwX21ldGEgPSBremFsbG9jKGlubmVyX21hcF9tZXRhX3NpemUsIEdGUF9VU0VSKTsKIAlpZiAoIWlubmVyX21hcF9tZXRhKQpAQCAtNzAsNiAmIzQzOzgxLDggQEAgc3RydWN0IGJwZl9tYXAgKmJwZl9tYXBfbWV0YV9hbGxvYyhpbnQgaW5uZXJfbWFwX3VmZCkKIAkJaW5uZXJfYXJyYXlfbWV0YS0mZ3Q7aW5kZXhfbWFzayA9IGlubmVyX2FycmF5LSZndDtpbmRleF9tYXNrOwogCQlpbm5lcl9hcnJheV9tZXRhLSZndDtlbGVtX3NpemUgPSBpbm5lcl9hcnJheS0mZ3Q7ZWxlbV9zaXplOwogCQlpbm5lcl9tYXBfbWV0YS0mZ3Q7YnlwYXNzX3NwZWNfdjEgPSBpbm5lcl9tYXAtJmd0O2J5cGFzc19zcGVjX3YxOwomIzQzOwl9IGVsc2UgaWYgKGJwZl9tYXBfdHlwZV9pc19odGFiKGlubmVyX21hcC0mZ3Q7bWFwX3R5cGUpKSB7CiYjNDM7CQlicGZfaHRhYl9tYXBfbWV0YV9pbml0KGlubmVyX21hcF9tZXRhLCBpbm5lcl9tYXApOwogCX0KIAlyZXR1cm4gaW5uZXJfbWFwX21ldGE7CiB9CmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL21hcF9pbl9tYXAuaCBiL2tlcm5lbC9icGYvbWFwX2luX21hcC5oCmluZGV4IDdkNjE2MDIzNTRkZTgwLi4xZWRjMjA1NzcyZDhjZCAxMDA2NDQKLS0tIGEva2VybmVsL2JwZi9tYXBfaW5fbWFwLmgKJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2JwZi9tYXBfaW5fbWFwLmgKQEAgLTE1LDUgJiM0MzsxNSw3IEBAIHZvaWQgKmJwZl9tYXBfZmRfZ2V0X3B0cihzdHJ1Y3QgYnBmX21hcCAqbWFwLCBzdHJ1Y3QgZmlsZSAqbWFwX2ZpbGUsCiAJCQkgaW50IHVmZCk7CiB2b2lkIGJwZl9tYXBfZmRfcHV0X3B0cihzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICpwdHIsIGJvb2wgbmVlZF9kZWZlcik7CiB1MzIgYnBmX21hcF9mZF9zeXNfbG9va3VwX2VsZW0odm9pZCAqcHRyKTsKJiM0MztzaXplX3QgYnBmX2h0YWJfbWFwX21ldGFfc2l6ZSh2b2lkKTsKJiM0Mzt2b2lkIGJwZl9odGFiX21hcF9tZXRhX2luaXQoc3RydWN0IGJwZl9tYXAgKmlubmVyX21hcF9tZXRhLCBzdHJ1Y3QgYnBmX21hcCAqaW5uZXJfbWFwKTsKIAogI2VuZGlmCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvbWFwX3B0cl9rZXJuLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvbWFwX3B0cl9rZXJuLmMKaW5kZXggMzczYzhkMTdlYTU1N2QuLjZiZDRjYjY4YzIwYzFjIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvbWFwX3B0cl9rZXJuLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL21hcF9wdHJfa2Vybi5jCkBAIC0xMTQsNyAmIzQzOzExNCw3IEBAIHN0YXRpYyBpbmxpbmUgaW50IGNoZWNrX2hhc2godm9pZCkKIAlWRVJJRlkoY2hlY2tfZGVmYXVsdF9ub2lubGluZSgmYW1wO2hhc2gtJmd0O21hcCwgbWFwKSk7CiAKIAlWRVJJRlkoaGFzaC0mZ3Q7bl9idWNrZXRzID09IE1BWF9FTlRSSUVTKTsKLQlWRVJJRlkoaGFzaC0mZ3Q7ZWxlbV9zaXplID09IDY0KTsKJiM0MzsJVkVSSUZZKGhhc2gtJmd0O2VsZW1fc2l6ZSA9PSAzMik7CiAKIAlWRVJJRlkoaGFzaC0mZ3Q7Y291bnQuY291bnRlciA9PSAwKTsKIAlWRVJJRlkoYnBmX21hcF9zdW1fZWxlbV9jb3VudChtYXApID09IDApOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMyAyMjozODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODU3MgoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDU4MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEJQRiBIYXNoIFRhYmxlIE9wdGltaXphdGlvbiBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBnb3QgdGhpcyBwYXRjaCDigJMgc2VlbXMgbGlrZSBhIHByZXR0eSBzaWduaWZpY2FudCBvbmUg4oCTIHRvdWNoaW5nIGBrZXJuZWwvYnBmL2hhc2h0YWIuY2AgYW5kIGBrZXJuZWwvYnBmL21hcF9pbl9tYXAuY2AuIEZyb20gdGhlIGRlc2NyaXB0aW9uLCBpdCBsb29rcyBsaWtlIHRoZXkmIzM5O3JlIG9wdGltaXppbmcgdGhlIG1lbW9yeSBsYXlvdXQgb2YgQlBGIGhhc2ggdGFibGVzLCBzcGxpdHRpbmcgYHN0cnVjdCBodGFiX2VsZW1gIGludG8gbXVsdGlwbGUgc3BlY2lhbGl6ZWQgc3RydWN0dXJlcyAoYGh0YWJfZWxlbWAsIGBodGFiX2VsZW1fbHJ1YCwgYGh0YWJfZWxlbV9wY3B1YCkgYW5kIGFsc28gYWRkaW5nIGBrZXlfb2Zmc2V0YCB0byBgc3RydWN0IGJwZl9odGFiYC4gVGhpcyBpcyBhICpmdW5jdGlvbmFsKiBjaGFuZ2UgdG8gdGhlIGNvcmUgaGFzaCBtYXAgaW1wbGVtZW50YXRpb24sIGFuZCB0aGF0IGltbWVkaWF0ZWx5IHRlbGxzIG1lIHdlIG5lZWQgdG8gdHJlYXQgdGhpcyBhcyBoaWdoLXByaW9yaXR5IGZvciBmdXp6aW5nLiBJdCYjMzk7cyBhIHByaW1lIHRhcmdldCBmb3IgdW5jb3ZlcmluZyBzdWJ0bGUgbWVtb3J5IGNvcnJ1cHRpb24gb3IgY29uY3VycmVuY3kgaXNzdWVzLgoKTXkgaW1tZWRpYXRlIG5leHQgc3RlcCBpcyB0byBkcmlsbCBkb3duIGludG8gdGhlIGRldGFpbHMgb2YgdGhlIGNvZGUuIExldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyBiZWVuIGFkZGVkLCBtb2RpZmllZCwgb3IgY2hhbmdlZC4gSSYjMzk7bSBnb2luZyB0byBsb29rIGNsb3NlbHkgYXQgdGhlc2UgbmV3IG9yIGNoYW5nZWQgZnVuY3Rpb25zOiBgaHRhYl9lbGVtX2xydV9ub2RlYCwgYGh0YWJfZWxlbV9nZXRfcHRyX3RvX3BwdHJgLCBgaHRhYl9lbGVtX3NldF9wdHJfdG9fcHB0cmAsIGBodGFiX2VsZW1fa2V5YCwgYGh0YWJfZWxlbV92YWx1ZWAsIGBodGFiX2VsZW1fc2V0X3B0cmAsIGBodGFiX2VsZW1fZ2V0X3B0cmAsIGBmZF9odGFiX21hcF9nZXRfcHRyYCwgYGh0YWJfaGFzX2hhc2hgLCBgaHRhYl9lbGVtX2hhc2hgLCBgaHRhYl9lbGVtX3NldF9oYXNoYCwgYGh0YWJfbWFwX2FsbG9jX2NoZWNrYCwgYGh0YWJfbWFwX2FsbG9jYCwgYGh0YWJfbWFwX2dlbl9sb29rdXBgLCBgaHRhYl9scnVfbWFwX2dlbl9sb29rdXBgLCBgaHRhYl9tYXBfdXBkYXRlX2VsZW1gLCBgaHRhYl9scnVfbWFwX3VwZGF0ZV9lbGVtYCwgYF9faHRhYl9scnVfcGVyY3B1X21hcF91cGRhdGVfZWxlbWAsIGBodGFiX21hcF9kZWxldGVfZWxlbWAsIGBodGFiX2xydV9tYXBfZGVsZXRlX2VsZW1gLCBgX19odGFiX21hcF9sb29rdXBfYW5kX2RlbGV0ZV9lbGVtYCwgYF9faHRhYl9tYXBfbG9va3VwX2FuZF9kZWxldGVfYmF0Y2hgLCBgYnBmX3BlcmNwdV9oYXNoX2NvcHlgLCBgaHRhYl9vZl9tYXBfZ2VuX2xvb2t1cGAsIGBicGZfaHRhYl9tYXBfbWV0YV9zaXplYCwgYGJwZl9odGFiX21hcF9tZXRhX2luaXRgLCBhbmQgYGJwZl9tYXBfbWV0YV9hbGxvY2AuIEFueSBvbmUgb2YgdGhlc2UsIGlmIG1pc2hhbmRsZWQsIGNvdWxkIGhhdmUgc2lnbmlmaWNhbnQgc2VjdXJpdHkgaW1wbGljYXRpb25zLgoKTm93LCBsZXQmIzM5O3MgbmFpbCBkb3duIHRoZSBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcy4gYENPTkZJR19CUEZfU1lTQ0FMTGAgd2lsbCBiZSB0aGUgcHJpbWFyeSBlbmFibGVyIGZvciBCUEYsIG9mIGNvdXJzZS4gR2l2ZW4gdGhlIGZvY3VzIG9uIGhhc2ggbWFwcywgSSYjMzk7bSBnb2luZyB0byBxdWlja2x5IGNoZWNrIGlmIHRoZXJlIGFyZSBhbnkgc3BlY2lmaWMgY29uZmlndXJhdGlvbiBmbGFncyBmb3IgQlBGIGhhc2ggbWFwcyB0aGVtc2VsdmVzLiBObyBkZWRpY2F0ZWQgY29uZmlnIG9wdGlvbnMsIHdoaWNoIG1ha2VzIHNlbnNlIC0gdGhlIGhhc2ggdGFibGUgaW1wbGVtZW50YXRpb24gaXMgY29yZSBCUEYuCgpJIG5lZWQgdG8gY29uZmlybSB0aGVzZSBmdW5jdGlvbnMmIzM5OyBpbnRlcmFjdGlvbnMgd2l0aCB0aGUgZXhpc3RpbmcgQlBGIGhhc2ggbWFwIGluZnJhc3RydWN0dXJlLiBUaW1lIHRvIHNlYXJjaCB0aGUgc291cmNlIGZvciBgQlBGX01BUF9UWVBFX0hBU0hgIGFuZCBgQlBGX01BUF9UWVBFX0xSVV9IQVNIYCB3aXRoaW4gYGtlcm5lbC9icGYvaGFzaHRhYi5jYCB0byBzZWUgaG93IHRob3NlIG1hcCB0eXBlcyBhcmUgaW50ZWdyYXRlZCB3aXRoIHRoZSBuZXcgY29kZS4gVGhpcyB3aWxsIGhlbHAgdW5kZXJzdGFuZCB0aGUgYnJlYWR0aCBvZiBpbXBhY3Qgb2YgdGhpcyBjaGFuZ2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjMgMjI6Mzg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7QlBGX01BUF9UWVBFX0hBU0gmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvYnBmL2hhc2h0YWIuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL2hhc2h0YWIuYz0yMjU9c3RhdGljIGlubGluZSBib29sIGlzX2ZkX2h0YWIoY29uc3Qgc3RydWN0IGJwZl9odGFiICpodGFiKVxua2VybmVsL2JwZi9oYXNodGFiLmMtMjI2LXtcbmtlcm5lbC9icGYvaGFzaHRhYi5jOjIyNzpcdHJldHVybiBodGFiLVx1MDAzZW1hcC5tYXBfdHlwZSA9PSBCUEZfTUFQX1RZUEVfSEFTSF9PRl9NQVBTO1xua2VybmVsL2JwZi9oYXNodGFiLmMtMjI4LX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMyAyMjozODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDAyMQoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDQxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqSW52ZXN0aWdhdGluZyBQb3RlbnRpYWwgQlBGIENvbmZpZ3VyYXRpb24gTnVhbmNlcyoqCgpPa2F5LCBiZWZvcmUgSSBkaXZlIHRvbyBkZWVwIGludG8gdGhlIGltcGxpY2F0aW9ucyBoZXJlLCBJIG5lZWQgdG8gdGFrZSBhIHF1aWNrIHBlZWsgYXQgdGhlIEJQRiBpbnRlcm5hbHMuIFNwZWNpZmljYWxseSwgSSBzaG91bGQgY2hlY2sgYGtlcm5lbC9icGYvaGFzaHRhYi5jYCBhbmQgYGtlcm5lbC9icGYvbWFwX2luX21hcC5jYC4gVGhvc2UgZmlsZXMgYXJlIGxpa2VseSB0byBjb250YWluIHRoZSBjcnVjaWFsIGxvdy1sZXZlbCBkZXRhaWxzIHJlZ2FyZGluZyBwb3RlbnRpYWwgY29uZmlndXJhdGlvbnMgb3IgbGltaXRhdGlvbnMgdGhhdCBJIG5lZWQgdG8gYmUgYXdhcmUgb2YuIEkmIzM5O20gbG9va2luZyBmb3IgYW55IHNwZWNpZmljIGNvbmZpZ3VyYXRpb25zIHRoYXQgbWlnaHQgaW1wYWN0IHRoZSBiZWhhdmlvciBvciBwZXJmb3JtYW5jZSBJJiMzOTttIGNvbnNpZGVyaW5nLiBHb3R0YSBtYWtlIHN1cmUgSSYjMzk7bSBub3Qgb3Zlcmxvb2tpbmcgc29tZSBzdWJ0bGUgZGV0YWlsIGJ1cmllZCB3aXRoaW4gdGhvc2UgaW1wbGVtZW50YXRpb25zLiBUaGF0IGxldmVsIG9mIGRldGFpbCBpcyBjcml0aWNhbCBmb3IgZnVsbHkgdW5kZXJzdGFuZGluZyB0aGUgbGFuZHNjYXBlIGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjMgMjI6Mzg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtDT05GSUdfJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9oYXNodGFiLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIzIDIyOjM4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwMjY3CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgY29uc2lkZXJpbmcgdGhpcyBteXNlbGY6CgoqKkludmVzdGlnYXRpbmcgQ29uZmlndXJhdGlvbiBEZXBlbmRlbmNpZXMqKgoKT2theSwgaXQgc2VlbXMgdGhlcmUgYXJlIG5vIHNwZWNpZmljIGNvbmZpZ3VyYXRpb24gZGV0YWlscyBleHBsaWNpdGx5IGRlZmluZWQgd2l0aGluIGBoYXNodGFiLmNgLiBUaGF0JiMzOTtzIG5vdCBlbnRpcmVseSB1bmV4cGVjdGVkLCBkZXBlbmRpbmcgb24gdGhlIHN5c3RlbSBkZXNpZ24sIGJ1dCBzdGlsbCBnb29kIHRvIGNvbmZpcm0uIE5vdywgaWYgdGhlIGNvbmZpZ3VyYXRpb24gaXNuJiMzOTt0IGluIHRoZSBvYnZpb3VzIHBsYWNlLCB3aGVyZSBlbHNlIGNvdWxkIGl0IGJlPyBUaGUgc3RydWN0dXJlIG9mdGVuIGRpY3RhdGVzIHRoZSBvcmdhbml6YXRpb24gb2YgY29kZS4gTXkgaW5zdGluY3RzIGFyZSB0ZWxsaW5nIG1lIHRvIGxvb2sgYXQgYG1hcF9pbl9tYXAuY2AuIEl0JiMzOTtzIHBvc3NpYmxlIHRoYXQgdGhlIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVycyBhcmUgc29tZWhvdyBtYW5hZ2VkIHdpdGhpbiB0aGUgbmVzdGVkIG1hcCBzdHJ1Y3R1cmUgaXRzZWxmLCBvciBhdCBsZWFzdCByZWZlcmVuY2VkIGZyb20gdGhlcmUuIExldCYjMzk7cyBzZWUgd2hhdCB3ZSBjYW4gZGlnIHVwIHRoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIzIDIyOjM4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Q09ORklHXyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvbWFwX2luX21hcC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMyAyMjozODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDQ4MgoJCQkJCQkJb3V0cHV0OiAyNzgKCQkJCQkJCXRob3VnaHRzOiAxMTQwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBCUEYgSGFzaCBNYXAgT3BlcmF0aW9ucyBmb3IgRnV6emluZyoqCgpPa2F5LCBmaXJzdCB0aGluZ3MgZmlyc3QsIHRoaXMgaXMgZGVmaW5pdGVseSByZWxhdGVkIHRvIGBDT05GSUdfQlBGX1NZU0NBTExgLCB0aGF0JiMzOTtzIHRoZSBrZXkgZW5hYmxpbmcgY29uZmlndXJhdGlvbi4gTGV0JiMzOTtzIGRpZyBpbiBhbmQgZmlndXJlIG91dCB0aGUgbW9zdCBpbXBvcnRhbnQgZnVuY3Rpb25zIHRvIHRhcmdldCBmb3IgZnV6emluZy4gVGhpcyBwYXRjaCBpcyBjbGVhcmx5IHRvdWNoaW5nIEJQRiBoYXNoIG1hcCBvcGVyYXRpb25zLgoKTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGdyYWIgYWxsIHRoZSByZWxldmFudCBmdW5jdGlvbnMsIGFuZCB0aGVuIHJlZmluZS4gSSYjMzk7bGwgbmVlZCB0byBmb2N1cyBvbjogYGh0YWJfbWFwX2FsbG9jYCwgYGh0YWJfbWFwX3VwZGF0ZV9lbGVtYCwgYGh0YWJfbHJ1X21hcF91cGRhdGVfZWxlbWAsIGBfX2h0YWJfbHJ1X3BlcmNwdV9tYXBfdXBkYXRlX2VsZW1gLCBgaHRhYl9tYXBfZGVsZXRlX2VsZW1gLCBgaHRhYl9scnVfbWFwX2RlbGV0ZV9lbGVtYCwgYF9faHRhYl9tYXBfbG9va3VwX2FuZF9kZWxldGVfZWxlbWAsIGBfX2h0YWJfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2JhdGNoYCwgYGJwZl9tYXBfbWV0YV9hbGxvY2AsIGFuZCB0aGUgdmFyaW91cyBsb29rdXAgZnVuY3Rpb25zOiBgaHRhYl9tYXBfZ2VuX2xvb2t1cGAsIGBodGFiX2xydV9tYXBfZ2VuX2xvb2t1cGAsIGBodGFiX3BlcmNwdV9tYXBfZ2VuX2xvb2t1cGAsIGFuZCBgaHRhYl9vZl9tYXBfZ2VuX2xvb2t1cGAuIFRoZXNlIHNlZW0gbGlrZSB0aGUgY29yZSBlbnRyeSBwb2ludHMgZm9yIHRoZSBjaGFuZ2VzLgoKQWxyaWdodCwgSSYjMzk7bSBnb2luZyB0byByZWZpbmUgdGhhdCBsaXN0IGEgbGl0dGxlLiBXYWl0LCBJIHJlbWVtYmVyIHRoYXQgYGh0YWJfbWFwX3VwZGF0ZV9lbGVtYCBpcyBhIHByZXR0eSBpbXBvcnRhbnQgaG90LXBhdGggZnVuY3Rpb24sIHRoZSBzcGVjaWZpYyBpbXBsZW1lbnRhdGlvbiBmb3IgaGFzaCBtYXBzLCBzbyBpdCYjMzk7cyBhIHByaW1lIHRhcmdldCwgZXNwZWNpYWxseSBjb25zaWRlcmluZyBmdXp6aW5nIEJQRiBtYXAgb3BlcmF0aW9ucyBpcyBzdGFuZGFyZCBwcmFjdGljZS4KCkFmdGVyIHRoYXQgaW5pdGlhbCBsaXN0IEkmIzM5O2xsIGtlZXAgdGhlIG9uZXMgSSYjMzk7dmUgbGlzdGVkIHByZXZpb3VzbHkgYW5kIGZvY3VzIG9uIHRoZSBgYnBmX21hcF9tZXRhX2FsbG9jYCBiZWNhdXNlIHRoYXQgY291bGQgYmUgYSBzaWduaWZpY2FudCBjaGFuZ2UgYW5kIHRodXMgYSBwb3RlbnRpYWwgdGFyZ2V0IGZvciBmdXp6aW5nLgoKTm93LCBsZXQmIzM5O3Mgc2VlLCBgaHRhYl9tYXBfdXBkYXRlX2VsZW1gIGlzIHN0YXRpYywgd2hpY2ggaXMgdXN1YWxseSBub3QgaWRlYWwgZm9yIGZ1enppbmcuIEhvd2V2ZXIsIGl0JiMzOTtzIGFzc2lnbmVkIHRvIGBtYXBfb3BzYCwgc28gU3l6a2FsbGVyICpzaG91bGQqIGJlIGFibGUgdG8gdGFyZ2V0IGl0IHRocm91Z2ggdGhlIGBicGYoKWAgc3lzY2FsbC4gWWVzLCBgRm9jdXNTeW1ib2xzYCBhcmUgc3BlY2lmaWNhbGx5IHRob3NlIHRoYXQgY2FuIGJlIHRhcmdldGVkIGJ5IHN5emthbGxlciBvciBhcmUgY3JpdGljYWwgZm9yIGNvdmVyYWdlLgoKU28sIHRoZSBkZWZpbml0aXZlIGxpc3QgZm9yIG15IGFuYWx5c2lzIG5vdyBpbmNsdWRlczogYGh0YWJfbWFwX2FsbG9jYCwgYGh0YWJfbWFwX3VwZGF0ZV9lbGVtYCwgYGh0YWJfbHJ1X21hcF91cGRhdGVfZWxlbWAsIGBfX2h0YWJfbHJ1X3BlcmNwdV9tYXBfdXBkYXRlX2VsZW1gLCBgaHRhYl9tYXBfZGVsZXRlX2VsZW1gLCBgaHRhYl9scnVfbWFwX2RlbGV0ZV9lbGVtYCwgYF9faHRhYl9tYXBfbG9va3VwX2FuZF9kZWxldGVfZWxlbWAsIGBfX2h0YWJfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2JhdGNoYCwgYGJwZl9tYXBfbWV0YV9hbGxvY2AsIGBodGFiX21hcF9nZW5fbG9va3VwYCwgYGh0YWJfbHJ1X21hcF9nZW5fbG9va3VwYCwgYGh0YWJfcGVyY3B1X21hcF9nZW5fbG9va3VwYCwgYW5kIGBodGFiX29mX21hcF9nZW5fbG9va3VwYC4gSSYjMzk7bGwgbWFrZSBzdXJlIHRvIG5vdGUgdGhlc2UuCgpKdXN0IHZlcmlmeWluZyB0aGF0IGBodGFiX21hcF9nZW5fbG9va3VwYCBpcyBpbmRlZWQgcHJlc2VudCBpbiB0aGUgZGlmZi4gR29vZC4KClllcywgdGhpcyBpcyBkZWZpbml0ZWx5IHdvcnRoIGZ1enppbmcuIFRoZSBwYXRjaCBpcyBjaGFuZ2luZyB0aGUgbWVtb3J5IGxheW91dCBhbmQgb3BlcmF0aW9ucyBvZiBCUEYgaGFzaCBtYXBzLCBpbmNsdWRpbmcgdGhlIExSVSBhbmQgcGVyLUNQVSB2YXJpYW50cy4gSXQgaW50cm9kdWNlcyBuZXcgc3RydWN0dXJlcyBhbmQgb2Zmc2V0cyB3aGljaCBpbiB0dXJuIGFmZmVjdHMgY3J1Y2lhbCBvcGVyYXRpb25zIGxpa2UgYWxsb2NhdGlvbiwgdXBkYXRlcywgZGVsZXRpb25zLCBhbmQgSklUIGxvb2t1cCBnZW5lcmF0aW9uLiBGdXp6aW5nIGlzIGVzc2VudGlhbCBoZXJlIHRvIGVuc3VyZSBtZW1vcnkgc2FmZXR5IGFuZCB0aGUgY29ycmVjdG5lc3Mgb2YgdGhlc2UgY29yZSBCUEYgbWFwIG9wZXJhdGlvbnMgZ2l2ZW4gdGhlIHN1YnN0YW50aWFsIGNoYW5nZXMuCgpNeSBmaW5hbCBzZXR0aW5ncyB3aWxsIGJlOiBgV29ydGhGdXp6aW5nOiB0cnVlYCwgYEVuYWJsZUNvbmZpZ3M6IFsmIzM0O0JQRl9TWVNDQUxMJiMzNDtdYCwgYEZvY3VzU3ltYm9sczogWyYjMzQ7aHRhYl9tYXBfYWxsb2MmIzM0OywgJiMzNDtodGFiX21hcF91cGRhdGVfZWxlbSYjMzQ7LCAmIzM0O2h0YWJfbHJ1X21hcF91cGRhdGVfZWxlbSYjMzQ7LCAmIzM0O19faHRhYl9scnVfcGVyY3B1X21hcF91cGRhdGVfZWxlbSYjMzQ7LCAmIzM0O2h0YWJfbWFwX2RlbGV0ZV9lbGVtJiMzNDssICYjMzQ7aHRhYl9scnVfbWFwX2RlbGV0ZV9lbGVtJiMzNDssICYjMzQ7X19odGFiX21hcF9sb29rdXBfYW5kX2RlbGV0ZV9lbGVtJiMzNDssICYjMzQ7X19odGFiX21hcF9sb29rdXBfYW5kX2RlbGV0ZV9iYXRjaCYjMzQ7LCAmIzM0O2JwZl9tYXBfbWV0YV9hbGxvYyYjMzQ7LCAmIzM0O2h0YWJfbWFwX2dlbl9sb29rdXAmIzM0OywgJiMzNDtodGFiX2xydV9tYXBfZ2VuX2xvb2t1cCYjMzQ7LCAmIzM0O2h0YWJfcGVyY3B1X21hcF9nZW5fbG9va3VwJiMzNDssICYjMzQ7aHRhYl9vZl9tYXBfZ2VuX2xvb2t1cCYjMzQ7XWAsIGFuZCBgUmVhc29uaW5nOiAmIzM0O1RoZSBwYXRjaCBmdW5jdGlvbmFsbHkgbW9kaWZpZXMgdGhlIG1lbW9yeSBsYXlvdXQgYW5kIG9wZXJhdGlvbnMgb2YgQlBGIGhhc2ggbWFwcyAoaW5jbHVkaW5nIExSVSBhbmQgcGVyLUNQVSB2YXJpYW50cykuIEl0IGludHJvZHVjZXMgbmV3IHN0cnVjdHVyZXMgYW5kIG9mZnNldHMgZm9yIGhhc2ggbWFwIGVsZW1lbnRzLCB3aGljaCBhZmZlY3RzIGFsbG9jYXRpb24sIHVwZGF0ZXMsIGRlbGV0aW9ucywgYW5kIEpJVCBsb29rdXAgZ2VuZXJhdGlvbi4gRnV6emluZyBpcyBuZWVkZWQgdG8gZW5zdXJlIG1lbW9yeSBzYWZldHkgYW5kIGNvcnJlY3RuZXNzIG9mIHRoZXNlIGNvcmUgQlBGIG1hcCBvcGVyYXRpb25zLiYjMzQ7YAoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMyAyMjozOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtodGFiX21hcF9hbGxvYyYjMzQ7LAogICAgJiMzNDtodGFiX21hcF91cGRhdGVfZWxlbSYjMzQ7LAogICAgJiMzNDtodGFiX2xydV9tYXBfdXBkYXRlX2VsZW0mIzM0OywKICAgICYjMzQ7X19odGFiX2xydV9wZXJjcHVfbWFwX3VwZGF0ZV9lbGVtJiMzNDssCiAgICAmIzM0O2h0YWJfbWFwX2RlbGV0ZV9lbGVtJiMzNDssCiAgICAmIzM0O2h0YWJfbHJ1X21hcF9kZWxldGVfZWxlbSYjMzQ7LAogICAgJiMzNDtfX2h0YWJfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2VsZW0mIzM0OywKICAgICYjMzQ7X19odGFiX21hcF9sb29rdXBfYW5kX2RlbGV0ZV9iYXRjaCYjMzQ7LAogICAgJiMzNDticGZfbWFwX21ldGFfYWxsb2MmIzM0OywKICAgICYjMzQ7aHRhYl9tYXBfZ2VuX2xvb2t1cCYjMzQ7LAogICAgJiMzNDtodGFiX2xydV9tYXBfZ2VuX2xvb2t1cCYjMzQ7LAogICAgJiMzNDtodGFiX3BlcmNwdV9tYXBfZ2VuX2xvb2t1cCYjMzQ7LAogICAgJiMzNDtodGFiX29mX21hcF9nZW5fbG9va3VwJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZ1bmN0aW9uYWxseSBtb2RpZmllcyB0aGUgbWVtb3J5IGxheW91dCBhbmQgb3BlcmF0aW9ucyBvZiBCUEYgaGFzaCBtYXBzIChpbmNsdWRpbmcgTFJVIGFuZCBwZXItQ1BVIHZhcmlhbnRzKS4gSXQgaW50cm9kdWNlcyBuZXcgc3RydWN0dXJlcyBhbmQgb2Zmc2V0cyBmb3IgaGFzaCBtYXAgZWxlbWVudHMsIHdoaWNoIGFmZmVjdHMgYWxsb2NhdGlvbiwgdXBkYXRlcywgZGVsZXRpb25zLCBhbmQgSklUIGxvb2t1cCBnZW5lcmF0aW9uLiBGdXp6aW5nIGlzIG5lZWRlZCB0byBlbnN1cmUgbWVtb3J5IHNhZmV0eSBhbmQgY29ycmVjdG5lc3Mgb2YgdGhlc2UgY29yZSBCUEYgbWFwIG9wZXJhdGlvbnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aHRhYl9tYXBfYWxsb2MmIzM0OywKICAgICYjMzQ7aHRhYl9tYXBfdXBkYXRlX2VsZW0mIzM0OywKICAgICYjMzQ7aHRhYl9scnVfbWFwX3VwZGF0ZV9lbGVtJiMzNDssCiAgICAmIzM0O19faHRhYl9scnVfcGVyY3B1X21hcF91cGRhdGVfZWxlbSYjMzQ7LAogICAgJiMzNDtodGFiX21hcF9kZWxldGVfZWxlbSYjMzQ7LAogICAgJiMzNDtodGFiX2xydV9tYXBfZGVsZXRlX2VsZW0mIzM0OywKICAgICYjMzQ7X19odGFiX21hcF9sb29rdXBfYW5kX2RlbGV0ZV9lbGVtJiMzNDssCiAgICAmIzM0O19faHRhYl9tYXBfbG9va3VwX2FuZF9kZWxldGVfYmF0Y2gmIzM0OywKICAgICYjMzQ7YnBmX21hcF9tZXRhX2FsbG9jJiMzNDssCiAgICAmIzM0O2h0YWJfbWFwX2dlbl9sb29rdXAmIzM0OywKICAgICYjMzQ7aHRhYl9scnVfbWFwX2dlbl9sb29rdXAmIzM0OywKICAgICYjMzQ7aHRhYl9wZXJjcHVfbWFwX2dlbl9sb29rdXAmIzM0OywKICAgICYjMzQ7aHRhYl9vZl9tYXBfZ2VuX2xvb2t1cCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmdW5jdGlvbmFsbHkgbW9kaWZpZXMgdGhlIG1lbW9yeSBsYXlvdXQgYW5kIG9wZXJhdGlvbnMgb2YgQlBGIGhhc2ggbWFwcyAoaW5jbHVkaW5nIExSVSBhbmQgcGVyLUNQVSB2YXJpYW50cykuIEl0IGludHJvZHVjZXMgbmV3IHN0cnVjdHVyZXMgYW5kIG9mZnNldHMgZm9yIGhhc2ggbWFwIGVsZW1lbnRzLCB3aGljaCBhZmZlY3RzIGFsbG9jYXRpb24sIHVwZGF0ZXMsIGRlbGV0aW9ucywgYW5kIEpJVCBsb29rdXAgZ2VuZXJhdGlvbi4gRnV6emluZyBpcyBuZWVkZWQgdG8gZW5zdXJlIG1lbW9yeSBzYWZldHkgYW5kIGNvcnJlY3RuZXNzIG9mIHRoZXNlIGNvcmUgQlBGIG1hcCBvcGVyYXRpb25zLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDctMjNUMjI6Mzg6NDIuNjQ2MDQ0NzJaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMTcxMDg2MjExMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfU1lTQ0FMTFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImh0YWJfbWFwX2FsbG9jXCIsXG4gICAgXCJodGFiX21hcF91cGRhdGVfZWxlbVwiLFxuICAgIFwiaHRhYl9scnVfbWFwX3VwZGF0ZV9lbGVtXCIsXG4gICAgXCJfX2h0YWJfbHJ1X3BlcmNwdV9tYXBfdXBkYXRlX2VsZW1cIixcbiAgICBcImh0YWJfbWFwX2RlbGV0ZV9lbGVtXCIsXG4gICAgXCJodGFiX2xydV9tYXBfZGVsZXRlX2VsZW1cIixcbiAgICBcIl9faHRhYl9tYXBfbG9va3VwX2FuZF9kZWxldGVfZWxlbVwiLFxuICAgIFwiX19odGFiX21hcF9sb29rdXBfYW5kX2RlbGV0ZV9iYXRjaFwiLFxuICAgIFwiYnBmX21hcF9tZXRhX2FsbG9jXCIsXG4gICAgXCJodGFiX21hcF9nZW5fbG9va3VwXCIsXG4gICAgXCJodGFiX2xydV9tYXBfZ2VuX2xvb2t1cFwiLFxuICAgIFwiaHRhYl9wZXJjcHVfbWFwX2dlbl9sb29rdXBcIixcbiAgICBcImh0YWJfb2ZfbWFwX2dlbl9sb29rdXBcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmdW5jdGlvbmFsbHkgbW9kaWZpZXMgdGhlIG1lbW9yeSBsYXlvdXQgYW5kIG9wZXJhdGlvbnMgb2YgQlBGIGhhc2ggbWFwcyAoaW5jbHVkaW5nIExSVSBhbmQgcGVyLUNQVSB2YXJpYW50cykuIEl0IGludHJvZHVjZXMgbmV3IHN0cnVjdHVyZXMgYW5kIG9mZnNldHMgZm9yIGhhc2ggbWFwIGVsZW1lbnRzLCB3aGljaCBhZmZlY3RzIGFsbG9jYXRpb24sIHVwZGF0ZXMsIGRlbGV0aW9ucywgYW5kIEpJVCBsb29rdXAgZ2VuZXJhdGlvbi4gRnV6emluZyBpcyBuZWVkZWQgdG8gZW5zdXJlIG1lbW9yeSBzYWZldHkgYW5kIGNvcnJlY3RuZXNzIG9mIHRoZXNlIGNvcmUgQlBGIG1hcCBvcGVyYXRpb25zLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yM1QyMjozODo0Mi42NDYwNTExOVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjU2MDg3NDg0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgMjQzYTI3MDY0MGUwZGM5MDFlNGE3OGI1OTliMDc0OGQ1OWJmN2I2M1xcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVGh1IEp1bCAyMyAyMjozODo0MCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL2hhc2h0YWIuYyBiL2tlcm5lbC9icGYvaGFzaHRhYi5jXFxuaW5kZXggOWYzOTRlMWFhMmU4NWIuLmI4YzMwZDQwMjk1ODc5IDEwMDY0NFxcbi0tLSBhL2tlcm5lbC9icGYvaGFzaHRhYi5jXFxuKysrIGIva2VybmVsL2JwZi9oYXNodGFiLmNcXG5AQCAtMTAyLDYgKzEwMiw3IEBAIHN0cnVjdCBicGZfaHRhYiB7XFxuIFxcdGJvb2wgdXNlX3BlcmNwdV9jb3VudGVyO1xcbiBcXHR1MzIgbl9idWNrZXRzO1xcdC8qIG51bWJlciBvZiBoYXNoIGJ1Y2tldHMgKi9cXG4gXFx0dTMyIGVsZW1fc2l6ZTtcXHQvKiBzaXplIG9mIGVhY2ggZWxlbWVudCBpbiBieXRlcyAqL1xcbitcXHR1MzIga2V5X29mZnNldDtcXHQvKiBvZmZzZXQgb2Yga2V5IGluIGJ5dGVzICovXFxuIFxcdHUzMiBoYXNocm5kO1xcbiB9O1xcbiBcXG5AQCAtMTE3LDE4ICsxMTgsNDYgQEAgc3RydWN0IGh0YWJfZWxlbSB7XFxuIFxcdFxcdFxcdH07XFxuIFxcdFxcdH07XFxuIFxcdH07XFxuK1xcdHUzMiBoYXNoOyAvKiBPbmx5IHdoZW4gaHRhYl9oYXNfaGFzaCgpICovXFxuK30gX19hbGlnbmVkKDgpO1xcbitcXG4rc3RydWN0IGh0YWJfZWxlbV9scnUge1xcbiBcXHR1bmlvbiB7XFxuLVxcdFxcdC8qIHBvaW50ZXIgdG8gcGVyLWNwdSBwb2ludGVyICovXFxuLVxcdFxcdHZvaWQgKnB0cl90b19wcHRyO1xcbi1cXHRcXHRzdHJ1Y3QgYnBmX2xydV9ub2RlIGxydV9ub2RlO1xcbitcXHRcXHRzdHJ1Y3QgaGxpc3RfbnVsbHNfbm9kZSBoYXNoX25vZGU7XFxuK1xcdFxcdHN0cnVjdCB7XFxuK1xcdFxcdFxcdHZvaWQgKnBhZGRpbmc7XFxuK1xcdFxcdFxcdHVuaW9uIHtcXG4rXFx0XFx0XFx0XFx0c3RydWN0IHBjcHVfZnJlZWxpc3Rfbm9kZSBmbm9kZTtcXG4rXFx0XFx0XFx0XFx0c3RydWN0IGh0YWJfZWxlbV9scnUgKmJhdGNoX2ZsaW5rO1xcbitcXHRcXHRcXHR9O1xcbitcXHRcXHR9O1xcbiBcXHR9O1xcbitcXHRzdHJ1Y3QgYnBmX2xydV9ub2RlIGxydV9ub2RlO1xcbiBcXHR1MzIgaGFzaDtcXG4tXFx0Y2hhciBrZXlbXSBfX2FsaWduZWQoOCk7XFxuLX07XFxuK30gX19hbGlnbmVkKDgpO1xcbitcXG4rLyogT25seSBmb3Igbm9uLXByZWFsbG9jYXRlZCBQQ1BVIG1hcHMuIFByZWFsbG9jYXRlZCBQQ1BVIG1hcHMgZG9uJ3QgbmVlZFxcbisgKiBwdHJfdG9fcHB0ciwgYW5kIHVzZSBodGFiX2VsZW0uXFxuKyAqL1xcbitzdHJ1Y3QgaHRhYl9lbGVtX3BjcHUge1xcbitcXHR1bmlvbiB7XFxuK1xcdFxcdHN0cnVjdCBobGlzdF9udWxsc19ub2RlIGhhc2hfbm9kZTtcXG4rXFx0XFx0c3RydWN0IHtcXG4rXFx0XFx0XFx0dm9pZCAqcGFkZGluZztcXG4rXFx0XFx0XFx0dW5pb24ge1xcbitcXHRcXHRcXHRcXHRzdHJ1Y3QgcGNwdV9mcmVlbGlzdF9ub2RlIGZub2RlO1xcbitcXHRcXHRcXHRcXHRzdHJ1Y3QgaHRhYl9lbGVtX3BjcHUgKmJhdGNoX2ZsaW5rO1xcbitcXHRcXHRcXHR9O1xcbitcXHRcXHR9O1xcbitcXHR9O1xcbitcXHR2b2lkICpwdHJfdG9fcHB0cjtcXG4rXFx0dTMyIGhhc2g7IC8qIE9ubHkgd2hlbiBodGFiX2hhc19oYXNoKCkgKi9cXG4rfSBfX2FsaWduZWQoOCk7XFxuIFxcbiBzdHJ1Y3QgaHRhYl9idGZfcmVjb3JkIHtcXG4gXFx0c3RydWN0IGJ0Zl9yZWNvcmQgKnJlY29yZDtcXG4gXFx0dTMyIGtleV9zaXplO1xcbitcXHR1MzIga2V5X29mZnNldDtcXG4gfTtcXG4gXFxuIHN0YXRpYyBpbmxpbmUgYm9vbCBodGFiX2lzX3ByZWFsbG9jKGNvbnN0IHN0cnVjdCBicGZfaHRhYiAqaHRhYilcXG5AQCAtMTM2LDYgKzE2NSwyMSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgaHRhYl9pc19wcmVhbGxvYyhjb25zdCBzdHJ1Y3QgYnBmX2h0YWIgKmh0YWIpXFxuIFxcdHJldHVybiAhKGh0YWItXFx1MDAzZW1hcC5tYXBfZmxhZ3MgXFx1MDAyNiBCUEZfRl9OT19QUkVBTExPQyk7XFxuIH1cXG4gXFxuK3N0YXRpYyBpbmxpbmUgc3RydWN0IGJwZl9scnVfbm9kZSAqaHRhYl9lbGVtX2xydV9ub2RlKHN0cnVjdCBodGFiX2VsZW0gKmwpXFxuK3tcXG4rXFx0cmV0dXJuIFxcdTAwMjYoKHN0cnVjdCBodGFiX2VsZW1fbHJ1ICopbCktXFx1MDAzZWxydV9ub2RlO1xcbit9XFxuK1xcbitzdGF0aWMgaW5saW5lIHZvaWQgKmh0YWJfZWxlbV9nZXRfcHRyX3RvX3BwdHIoc3RydWN0IGh0YWJfZWxlbSAqbClcXG4re1xcbitcXHRyZXR1cm4gKChzdHJ1Y3QgaHRhYl9lbGVtX3BjcHUgKilsKS1cXHUwMDNlcHRyX3RvX3BwdHI7XFxuK31cXG4rXFxuK3N0YXRpYyBpbmxpbmUgdm9pZCBodGFiX2VsZW1fc2V0X3B0cl90b19wcHRyKHN0cnVjdCBodGFiX2VsZW0gKmwsIHZvaWQgKnB0cilcXG4re1xcbitcXHQoKHN0cnVjdCBodGFiX2VsZW1fcGNwdSAqKWwpLVxcdTAwM2VwdHJfdG9fcHB0ciA9IHB0cjtcXG4rfVxcbitcXG4gc3RhdGljIHZvaWQgaHRhYl9pbml0X2J1Y2tldHMoc3RydWN0IGJwZl9odGFiICpodGFiKVxcbiB7XFxuIFxcdHVuc2lnbmVkIGludCBpO1xcbkBAIC0xODMsMjUgKzIyNywzMCBAQCBzdGF0aWMgaW5saW5lIGJvb2wgaXNfZmRfaHRhYihjb25zdCBzdHJ1Y3QgYnBmX2h0YWIgKmh0YWIpXFxuIFxcdHJldHVybiBodGFiLVxcdTAwM2VtYXAubWFwX3R5cGUgPT0gQlBGX01BUF9UWVBFX0hBU0hfT0ZfTUFQUztcXG4gfVxcbiBcXG4tc3RhdGljIGlubGluZSB2b2lkICpodGFiX2VsZW1fdmFsdWUoc3RydWN0IGh0YWJfZWxlbSAqbCwgdTMyIGtleV9zaXplKVxcbitzdGF0aWMgaW5saW5lIHZvaWQgKmh0YWJfZWxlbV9rZXkoc3RydWN0IGJwZl9odGFiICpodGFiLCBzdHJ1Y3QgaHRhYl9lbGVtICpsKVxcbit7XFxuK1xcdHJldHVybiAodm9pZCAqKWwgKyBodGFiLVxcdTAwM2VrZXlfb2Zmc2V0O1xcbit9XFxuK1xcbitzdGF0aWMgaW5saW5lIHZvaWQgKmh0YWJfZWxlbV92YWx1ZShzdHJ1Y3QgYnBmX2h0YWIgKmh0YWIsIHN0cnVjdCBodGFiX2VsZW0gKmwpXFxuIHtcXG4tXFx0cmV0dXJuIGwtXFx1MDAzZWtleSArIHJvdW5kX3VwKGtleV9zaXplLCA4KTtcXG4rXFx0cmV0dXJuIGh0YWJfZWxlbV9rZXkoaHRhYiwgbCkgKyByb3VuZF91cChodGFiLVxcdTAwM2VtYXAua2V5X3NpemUsIDgpO1xcbiB9XFxuIFxcbi1zdGF0aWMgaW5saW5lIHZvaWQgaHRhYl9lbGVtX3NldF9wdHIoc3RydWN0IGh0YWJfZWxlbSAqbCwgdTMyIGtleV9zaXplLFxcbitzdGF0aWMgaW5saW5lIHZvaWQgaHRhYl9lbGVtX3NldF9wdHIoc3RydWN0IGJwZl9odGFiICpodGFiLCBzdHJ1Y3QgaHRhYl9lbGVtICpsLFxcbiBcXHRcXHRcXHRcXHQgICAgIHZvaWQgX19wZXJjcHUgKnBwdHIpXFxuIHtcXG4tXFx0Kih2b2lkIF9fcGVyY3B1ICoqKWh0YWJfZWxlbV92YWx1ZShsLCBrZXlfc2l6ZSkgPSBwcHRyO1xcbitcXHQqKHZvaWQgX19wZXJjcHUgKiopaHRhYl9lbGVtX3ZhbHVlKGh0YWIsIGwpID0gcHB0cjtcXG4gfVxcbiBcXG4tc3RhdGljIGlubGluZSB2b2lkIF9fcGVyY3B1ICpodGFiX2VsZW1fZ2V0X3B0cihzdHJ1Y3QgaHRhYl9lbGVtICpsLCB1MzIga2V5X3NpemUpXFxuK3N0YXRpYyBpbmxpbmUgdm9pZCBfX3BlcmNwdSAqaHRhYl9lbGVtX2dldF9wdHIoc3RydWN0IGJwZl9odGFiICpodGFiLCBzdHJ1Y3QgaHRhYl9lbGVtICpsKVxcbiB7XFxuLVxcdHJldHVybiAqKHZvaWQgX19wZXJjcHUgKiopaHRhYl9lbGVtX3ZhbHVlKGwsIGtleV9zaXplKTtcXG4rXFx0cmV0dXJuICoodm9pZCBfX3BlcmNwdSAqKilodGFiX2VsZW1fdmFsdWUoaHRhYiwgbCk7XFxuIH1cXG4gXFxuLXN0YXRpYyB2b2lkICpmZF9odGFiX21hcF9nZXRfcHRyKGNvbnN0IHN0cnVjdCBicGZfbWFwICptYXAsIHN0cnVjdCBodGFiX2VsZW0gKmwpXFxuK3N0YXRpYyB2b2lkICpmZF9odGFiX21hcF9nZXRfcHRyKHN0cnVjdCBicGZfaHRhYiAqaHRhYiwgc3RydWN0IGh0YWJfZWxlbSAqbClcXG4ge1xcbi1cXHRyZXR1cm4gKih2b2lkICoqKWh0YWJfZWxlbV92YWx1ZShsLCBtYXAtXFx1MDAzZWtleV9zaXplKTtcXG4rXFx0cmV0dXJuICoodm9pZCAqKilodGFiX2VsZW1fdmFsdWUoaHRhYiwgbCk7XFxuIH1cXG4gXFxuIHN0YXRpYyBzdHJ1Y3QgaHRhYl9lbGVtICpnZXRfaHRhYl9lbGVtKHN0cnVjdCBicGZfaHRhYiAqaHRhYiwgaW50IGkpXFxuQEAgLTIwOSw2ICsyNTgsMzMgQEAgc3RhdGljIHN0cnVjdCBodGFiX2VsZW0gKmdldF9odGFiX2VsZW0oc3RydWN0IGJwZl9odGFiICpodGFiLCBpbnQgaSlcXG4gXFx0cmV0dXJuIChzdHJ1Y3QgaHRhYl9lbGVtICopIChodGFiLVxcdTAwM2VlbGVtcyArIGkgKiAodTY0KWh0YWItXFx1MDAzZWVsZW1fc2l6ZSk7XFxuIH1cXG4gXFxuK3N0YXRpYyBpbmxpbmUgYm9vbCBodGFiX2hhc19oYXNoKGNvbnN0IHN0cnVjdCBicGZfaHRhYiAqaHRhYilcXG4re1xcbitcXHRyZXR1cm4gaHRhYl9pc19scnUoaHRhYikgfHwgaHRhYi1cXHUwMDNlbWFwLmtleV9zaXplIFxcdTAwM2UgODtcXG4rfVxcbitcXG4rc3RhdGljIGlubGluZSB1MzIgaHRhYl9lbGVtX2hhc2goc3RydWN0IGJwZl9odGFiICpodGFiLCBzdHJ1Y3QgaHRhYl9lbGVtICpsKVxcbit7XFxuK1xcdGlmIChodGFiX2lzX2xydShodGFiKSlcXG4rXFx0XFx0cmV0dXJuICgoc3RydWN0IGh0YWJfZWxlbV9scnUgKilsKS1cXHUwMDNlaGFzaDtcXG4rXFx0ZWxzZSBpZiAoaHRhYl9pc19wZXJjcHUoaHRhYikgXFx1MDAyNlxcdTAwMjYgIWh0YWJfaXNfcHJlYWxsb2MoaHRhYikpXFxuK1xcdFxcdHJldHVybiAoKHN0cnVjdCBodGFiX2VsZW1fcGNwdSAqKWwpLVxcdTAwM2VoYXNoO1xcbitcXHRlbHNlXFxuK1xcdFxcdHJldHVybiBsLVxcdTAwM2VoYXNoO1xcbit9XFxuK1xcbitzdGF0aWMgaW5saW5lIHZvaWQgaHRhYl9lbGVtX3NldF9oYXNoKHN0cnVjdCBicGZfaHRhYiAqaHRhYiwgc3RydWN0IGh0YWJfZWxlbSAqbCwgdTMyIGhhc2gpXFxuK3tcXG4rXFx0aWYgKCFodGFiX2hhc19oYXNoKGh0YWIpKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcdGlmIChodGFiX2lzX2xydShodGFiKSlcXG4rXFx0XFx0KChzdHJ1Y3QgaHRhYl9lbGVtX2xydSAqKWwpLVxcdTAwM2VoYXNoID0gaGFzaDtcXG4rXFx0ZWxzZSBpZiAoaHRhYl9pc19wZXJjcHUoaHRhYikgXFx1MDAyNlxcdTAwMjYgIWh0YWJfaXNfcHJlYWxsb2MoaHRhYikpXFxuK1xcdFxcdCgoc3RydWN0IGh0YWJfZWxlbV9wY3B1ICopbCktXFx1MDAzZWhhc2ggPSBoYXNoO1xcbitcXHRlbHNlXFxuK1xcdFxcdGwtXFx1MDAzZWhhc2ggPSBoYXNoO1xcbit9XFxuK1xcbiAvKiBCb3RoIHBlcmNwdSBhbmQgZmQgaHRhYiBzdXBwb3J0IGluLXBsYWNlIHVwZGF0ZSwgc28gbm8gbmVlZCBmb3JcXG4gICogZXh0cmEgZWxlbS4gTFJVIGl0c2VsZiBjYW4gcmVtb3ZlIHRoZSBsZWFzdCB1c2VkIGVsZW1lbnQsIHNvXFxuICAqIHRoZXJlIGlzIG5vIG5lZWQgZm9yIGFuIGV4dHJhIGVsZW0gZHVyaW5nIG1hcF91cGRhdGUuXFxuQEAgLTIzMSw3ICszMDcsNyBAQCBzdGF0aWMgdm9pZCBodGFiX2ZyZWVfcHJlYWxsb2NlZF9pbnRlcm5hbF9zdHJ1Y3RzKHN0cnVjdCBicGZfaHRhYiAqaHRhYilcXG4gXFxuIFxcdFxcdGVsZW0gPSBnZXRfaHRhYl9lbGVtKGh0YWIsIGkpO1xcbiBcXHRcXHRicGZfbWFwX2ZyZWVfaW50ZXJuYWxfc3RydWN0cyhcXHUwMDI2aHRhYi1cXHUwMDNlbWFwLFxcbi1cXHRcXHRcXHRcXHRcXHQgICAgICBodGFiX2VsZW1fdmFsdWUoZWxlbSwgaHRhYi1cXHUwMDNlbWFwLmtleV9zaXplKSk7XFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgIGh0YWJfZWxlbV92YWx1ZShodGFiLCBlbGVtKSk7XFxuIFxcdFxcdGNvbmRfcmVzY2hlZCgpO1xcbiBcXHR9XFxuIH1cXG5AQCAtMjU0LDcgKzMzMCw3IEBAIHN0YXRpYyB2b2lkIGh0YWJfZnJlZV9wcmVhbGxvY2VkX2ZpZWxkcyhzdHJ1Y3QgYnBmX2h0YWIgKmh0YWIpXFxuIFxcbiBcXHRcXHRlbGVtID0gZ2V0X2h0YWJfZWxlbShodGFiLCBpKTtcXG4gXFx0XFx0aWYgKGh0YWJfaXNfcGVyY3B1KGh0YWIpKSB7XFxuLVxcdFxcdFxcdHZvaWQgX19wZXJjcHUgKnBwdHIgPSBodGFiX2VsZW1fZ2V0X3B0cihlbGVtLCBodGFiLVxcdTAwM2VtYXAua2V5X3NpemUpO1xcbitcXHRcXHRcXHR2b2lkIF9fcGVyY3B1ICpwcHRyID0gaHRhYl9lbGVtX2dldF9wdHIoaHRhYiwgZWxlbSk7XFxuIFxcdFxcdFxcdGludCBjcHU7XFxuIFxcbiBcXHRcXHRcXHRmb3JfZWFjaF9wb3NzaWJsZV9jcHUoY3B1KSB7XFxuQEAgLTI2Myw3ICszMzksNyBAQCBzdGF0aWMgdm9pZCBodGFiX2ZyZWVfcHJlYWxsb2NlZF9maWVsZHMoc3RydWN0IGJwZl9odGFiICpodGFiKVxcbiBcXHRcXHRcXHR9XFxuIFxcdFxcdH0gZWxzZSB7XFxuIFxcdFxcdFxcdGJwZl9vYmpfZnJlZV9maWVsZHMoaHRhYi1cXHUwMDNlbWFwLnJlY29yZCxcXG4tXFx0XFx0XFx0XFx0XFx0ICAgIGh0YWJfZWxlbV92YWx1ZShlbGVtLCBodGFiLVxcdTAwM2VtYXAua2V5X3NpemUpKTtcXG4rXFx0XFx0XFx0XFx0XFx0ICAgIGh0YWJfZWxlbV92YWx1ZShodGFiLCBlbGVtKSk7XFxuIFxcdFxcdFxcdGNvbmRfcmVzY2hlZCgpO1xcbiBcXHRcXHR9XFxuIFxcdFxcdGNvbmRfcmVzY2hlZCgpO1xcbkBAIC0yODAsOCArMzU2LDcgQEAgc3RhdGljIHZvaWQgaHRhYl9mcmVlX2VsZW1zKHN0cnVjdCBicGZfaHRhYiAqaHRhYilcXG4gXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIGh0YWItXFx1MDAzZW1hcC5tYXhfZW50cmllczsgaSsrKSB7XFxuIFxcdFxcdHZvaWQgX19wZXJjcHUgKnBwdHI7XFxuIFxcbi1cXHRcXHRwcHRyID0gaHRhYl9lbGVtX2dldF9wdHIoZ2V0X2h0YWJfZWxlbShodGFiLCBpKSxcXG4tXFx0XFx0XFx0XFx0XFx0IGh0YWItXFx1MDAzZW1hcC5rZXlfc2l6ZSk7XFxuK1xcdFxcdHBwdHIgPSBodGFiX2VsZW1fZ2V0X3B0cihodGFiLCBnZXRfaHRhYl9lbGVtKGh0YWIsIGkpKTtcXG4gXFx0XFx0ZnJlZV9wZXJjcHUocHB0cik7XFxuIFxcdFxcdGNvbmRfcmVzY2hlZCgpO1xcbiBcXHR9XFxuQEAgLTMwOCw4ICszODMsOCBAQCBzdGF0aWMgc3RydWN0IGh0YWJfZWxlbSAqcHJlYWxsb2NfbHJ1X3BvcChzdHJ1Y3QgYnBmX2h0YWIgKmh0YWIsIHZvaWQgKmtleSxcXG4gXFxuIFxcdGlmIChub2RlKSB7XFxuIFxcdFxcdGJwZl9tYXBfaW5jX2VsZW1fY291bnQoXFx1MDAyNmh0YWItXFx1MDAzZW1hcCk7XFxuLVxcdFxcdGwgPSBjb250YWluZXJfb2Yobm9kZSwgc3RydWN0IGh0YWJfZWxlbSwgbHJ1X25vZGUpO1xcbi1cXHRcXHRtZW1jcHkobC1cXHUwMDNla2V5LCBrZXksIGh0YWItXFx1MDAzZW1hcC5rZXlfc2l6ZSk7XFxuK1xcdFxcdGwgPSAoc3RydWN0IGh0YWJfZWxlbSAqKWNvbnRhaW5lcl9vZihub2RlLCBzdHJ1Y3QgaHRhYl9lbGVtX2xydSwgbHJ1X25vZGUpO1xcbitcXHRcXHRtZW1jcHkoaHRhYl9lbGVtX2tleShodGFiLCBsKSwga2V5LCBodGFiLVxcdTAwM2VtYXAua2V5X3NpemUpO1xcbiBcXHRcXHRyZXR1cm4gbDtcXG4gXFx0fVxcbiBcXG5AQCAtMzQwLDggKzQxNSw3IEBAIHN0YXRpYyBpbnQgcHJlYWxsb2NfaW5pdChzdHJ1Y3QgYnBmX2h0YWIgKmh0YWIpXFxuIFxcdFxcdFxcdFxcdFxcdCAgICBHRlBfVVNFUiB8IF9fR0ZQX05PV0FSTik7XFxuIFxcdFxcdGlmICghcHB0cilcXG4gXFx0XFx0XFx0Z290byBmcmVlX2VsZW1zO1xcbi1cXHRcXHRodGFiX2VsZW1fc2V0X3B0cihnZXRfaHRhYl9lbGVtKGh0YWIsIGkpLCBodGFiLVxcdTAwM2VtYXAua2V5X3NpemUsXFxuLVxcdFxcdFxcdFxcdCAgcHB0cik7XFxuK1xcdFxcdGh0YWJfZWxlbV9zZXRfcHRyKGh0YWIsIGdldF9odGFiX2VsZW0oaHRhYiwgaSksIHBwdHIpO1xcbiBcXHRcXHRjb25kX3Jlc2NoZWQoKTtcXG4gXFx0fVxcbiBcXG5AQCAtMzQ5LDggKzQyMyw4IEBAIHN0YXRpYyBpbnQgcHJlYWxsb2NfaW5pdChzdHJ1Y3QgYnBmX2h0YWIgKmh0YWIpXFxuIFxcdGlmIChodGFiX2lzX2xydShodGFiKSlcXG4gXFx0XFx0ZXJyID0gYnBmX2xydV9pbml0KFxcdTAwMjZodGFiLVxcdTAwM2VscnUsXFxuIFxcdFxcdFxcdFxcdCAgIGh0YWItXFx1MDAzZW1hcC5tYXBfZmxhZ3MgXFx1MDAyNiBCUEZfRl9OT19DT01NT05fTFJVLFxcbi1cXHRcXHRcXHRcXHQgICBvZmZzZXRvZihzdHJ1Y3QgaHRhYl9lbGVtLCBoYXNoKSAtXFxuLVxcdFxcdFxcdFxcdCAgIG9mZnNldG9mKHN0cnVjdCBodGFiX2VsZW0sIGxydV9ub2RlKSxcXG4rXFx0XFx0XFx0XFx0ICAgb2Zmc2V0b2Yoc3RydWN0IGh0YWJfZWxlbV9scnUsIGhhc2gpIC1cXG4rXFx0XFx0XFx0XFx0ICAgb2Zmc2V0b2Yoc3RydWN0IGh0YWJfZWxlbV9scnUsIGxydV9ub2RlKSxcXG4gXFx0XFx0XFx0XFx0ICAgaHRhYl9scnVfbWFwX2RlbGV0ZV9ub2RlLFxcbiBcXHRcXHRcXHRcXHQgICBodGFiKTtcXG4gXFx0ZWxzZVxcbkBAIC0zNjEsNyArNDM1LDcgQEAgc3RhdGljIGludCBwcmVhbGxvY19pbml0KHN0cnVjdCBicGZfaHRhYiAqaHRhYilcXG4gXFxuIFxcdGlmIChodGFiX2lzX2xydShodGFiKSlcXG4gXFx0XFx0YnBmX2xydV9wb3B1bGF0ZShcXHUwMDI2aHRhYi1cXHUwMDNlbHJ1LCBodGFiLVxcdTAwM2VlbGVtcyxcXG4tXFx0XFx0XFx0XFx0IG9mZnNldG9mKHN0cnVjdCBodGFiX2VsZW0sIGxydV9ub2RlKSxcXG4rXFx0XFx0XFx0XFx0IG9mZnNldG9mKHN0cnVjdCBodGFiX2VsZW1fbHJ1LCBscnVfbm9kZSksXFxuIFxcdFxcdFxcdFxcdCBodGFiLVxcdTAwM2VlbGVtX3NpemUsIG51bV9lbnRyaWVzKTtcXG4gXFx0ZWxzZVxcbiBcXHRcXHRwY3B1X2ZyZWVsaXN0X3BvcHVsYXRlKFxcdTAwMjZodGFiLVxcdTAwM2VmcmVlbGlzdCxcXG5AQCAtNDI4LDYgKzUwMiwyNSBAQCBzdGF0aWMgaW50IGh0YWJfbWFwX2FsbG9jX2NoZWNrKHVuaW9uIGJwZl9hdHRyICphdHRyKVxcbiBcXHRCVUlMRF9CVUdfT04ob2Zmc2V0b2Yoc3RydWN0IGh0YWJfZWxlbSwgZm5vZGUubmV4dCkgIT1cXG4gXFx0XFx0ICAgICBvZmZzZXRvZihzdHJ1Y3QgaHRhYl9lbGVtLCBoYXNoX25vZGUucHByZXYpKTtcXG4gXFxuK1xcdC8qIGh0YWJfZWxlbSBwb2ludGVycyBhcmUgdXNlZCBhcyBiYXNlIHBvaW50ZXJzIGZvciBodGFiX2VsZW1fbHJ1IGFuZFxcbitcXHQgKiBodGFiX2VsZW1fcGNwdS4gVGhlc2Ugc3RydWN0dXJlcyBtdXN0IHNoYXJlIGEgY29tbW9uIGluaXRpYWwgc2VxdWVuY2VcXG4rXFx0ICogdG8gZW5zdXJlIHBvaW50ZXIgY2FzdGluZyBiZXR3ZWVuIHRoZW0gaXMgc2FmZS5cXG4rXFx0ICovXFxuK1xcdEJVSUxEX0JVR19PTihvZmZzZXRvZihzdHJ1Y3QgaHRhYl9lbGVtLCBoYXNoX25vZGUpICE9XFxuK1xcdFxcdCAgICAgb2Zmc2V0b2Yoc3RydWN0IGh0YWJfZWxlbV9scnUsIGhhc2hfbm9kZSkpO1xcbitcXHRCVUlMRF9CVUdfT04ob2Zmc2V0b2Yoc3RydWN0IGh0YWJfZWxlbSwgaGFzaF9ub2RlKSAhPVxcbitcXHRcXHQgICAgIG9mZnNldG9mKHN0cnVjdCBodGFiX2VsZW1fcGNwdSwgaGFzaF9ub2RlKSk7XFxuK1xcbitcXHRCVUlMRF9CVUdfT04ob2Zmc2V0b2Yoc3RydWN0IGh0YWJfZWxlbSwgcGFkZGluZykgIT1cXG4rXFx0XFx0ICAgICBvZmZzZXRvZihzdHJ1Y3QgaHRhYl9lbGVtX2xydSwgcGFkZGluZykpO1xcbitcXHRCVUlMRF9CVUdfT04ob2Zmc2V0b2Yoc3RydWN0IGh0YWJfZWxlbSwgcGFkZGluZykgIT1cXG4rXFx0XFx0ICAgICBvZmZzZXRvZihzdHJ1Y3QgaHRhYl9lbGVtX3BjcHUsIHBhZGRpbmcpKTtcXG4rXFxuK1xcdEJVSUxEX0JVR19PTihvZmZzZXRvZihzdHJ1Y3QgaHRhYl9lbGVtLCBmbm9kZSkgIT1cXG4rXFx0XFx0ICAgICBvZmZzZXRvZihzdHJ1Y3QgaHRhYl9lbGVtX2xydSwgZm5vZGUpKTtcXG4rXFx0QlVJTERfQlVHX09OKG9mZnNldG9mKHN0cnVjdCBodGFiX2VsZW0sIGZub2RlKSAhPVxcbitcXHRcXHQgICAgIG9mZnNldG9mKHN0cnVjdCBodGFiX2VsZW1fcGNwdSwgZm5vZGUpKTtcXG4rXFxuIFxcdGlmICh6ZXJvX3NlZWQgXFx1MDAyNlxcdTAwMjYgIWNhcGFibGUoQ0FQX1NZU19BRE1JTikpXFxuIFxcdFxcdC8qIEd1YXJkIGFnYWluc3QgbG9jYWwgRG9TLCBhbmQgZGlzY291cmFnZSBwcm9kdWN0aW9uIHVzZS4gKi9cXG4gXFx0XFx0cmV0dXJuIC1FUEVSTTtcXG5AQCAtNDc2LDcgKzU2OSw3IEBAIHN0YXRpYyB2b2lkIGh0YWJfbWVtX2R0b3Iodm9pZCAqb2JqLCB2b2lkICpjdHgpXFxuIFxcdGlmIChJU19FUlJfT1JfTlVMTChocmVjLVxcdTAwM2VyZWNvcmQpKVxcbiBcXHRcXHRyZXR1cm47XFxuIFxcbi1cXHRtYXBfdmFsdWUgPSBodGFiX2VsZW1fdmFsdWUoZWxlbSwgaHJlYy1cXHUwMDNla2V5X3NpemUpO1xcbitcXHRtYXBfdmFsdWUgPSAodm9pZCAqKWVsZW0gKyBocmVjLVxcdTAwM2VrZXlfb2Zmc2V0ICsgcm91bmRfdXAoaHJlYy1cXHUwMDNla2V5X3NpemUsIDgpO1xcbiBcXHRicGZfb2JqX2ZyZWVfZmllbGRzKGhyZWMtXFx1MDAzZXJlY29yZCwgbWFwX3ZhbHVlKTtcXG4gfVxcbiBcXG5AQCAtNTAyLDcgKzU5NSw3IEBAIHN0YXRpYyB2b2lkIGh0YWJfZHRvcl9jdHhfZnJlZSh2b2lkICpjdHgpXFxuIH1cXG4gXFxuIHN0YXRpYyBpbnQgYnBmX21hX3NldF9kdG9yKHN0cnVjdCBicGZfbWFwICptYXAsIHN0cnVjdCBicGZfbWVtX2FsbG9jICptYSxcXG4tXFx0XFx0XFx0ICAgdm9pZCAoKmR0b3IpKHZvaWQgKiwgdm9pZCAqKSlcXG4rXFx0XFx0XFx0ICAgdm9pZCAoKmR0b3IpKHZvaWQgKiwgdm9pZCAqKSwgdTMyIGtleV9vZmZzZXQpXFxuIHtcXG4gXFx0c3RydWN0IGh0YWJfYnRmX3JlY29yZCAqaHJlYztcXG4gXFx0aW50IGVycjtcXG5AQCAtNTE1LDYgKzYwOCw3IEBAIHN0YXRpYyBpbnQgYnBmX21hX3NldF9kdG9yKHN0cnVjdCBicGZfbWFwICptYXAsIHN0cnVjdCBicGZfbWVtX2FsbG9jICptYSxcXG4gXFx0aWYgKCFocmVjKVxcbiBcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4gXFx0aHJlYy1cXHUwMDNla2V5X3NpemUgPSBtYXAtXFx1MDAzZWtleV9zaXplO1xcbitcXHRocmVjLVxcdTAwM2VrZXlfb2Zmc2V0ID0ga2V5X29mZnNldDtcXG4gXFx0aHJlYy1cXHUwMDNlcmVjb3JkID0gYnRmX3JlY29yZF9kdXAobWFwLVxcdTAwM2VyZWNvcmQpO1xcbiBcXHRpZiAoSVNfRVJSKGhyZWMtXFx1MDAzZXJlY29yZCkpIHtcXG4gXFx0XFx0ZXJyID0gUFRSX0VSUihocmVjLVxcdTAwM2VyZWNvcmQpO1xcbkBAIC01MzcsOSArNjMxLDkgQEAgc3RhdGljIGludCBodGFiX21hcF9jaGVja19idGYoc3RydWN0IGJwZl9tYXAgKm1hcCwgY29uc3Qgc3RydWN0IGJ0ZiAqYnRmLFxcbiBcXHQgKiBwb3B1bGF0ZWQgaW4gaHRhYl9tYXBfYWxsb2MoKSwgc28gaXQgd2lsbCBhbHdheXMgYXBwZWFyIGFzIE5VTEwuXFxuIFxcdCAqL1xcbiBcXHRpZiAoaHRhYl9pc19wZXJjcHUoaHRhYikpXFxuLVxcdFxcdHJldHVybiBicGZfbWFfc2V0X2R0b3IobWFwLCBcXHUwMDI2aHRhYi1cXHUwMDNlcGNwdV9tYSwgaHRhYl9wY3B1X21lbV9kdG9yKTtcXG4rXFx0XFx0cmV0dXJuIGJwZl9tYV9zZXRfZHRvcihtYXAsIFxcdTAwMjZodGFiLVxcdTAwM2VwY3B1X21hLCBodGFiX3BjcHVfbWVtX2R0b3IsIGh0YWItXFx1MDAzZWtleV9vZmZzZXQpO1xcbiBcXHRlbHNlXFxuLVxcdFxcdHJldHVybiBicGZfbWFfc2V0X2R0b3IobWFwLCBcXHUwMDI2aHRhYi1cXHUwMDNlbWEsIGh0YWJfbWVtX2R0b3IpO1xcbitcXHRcXHRyZXR1cm4gYnBmX21hX3NldF9kdG9yKG1hcCwgXFx1MDAyNmh0YWItXFx1MDAzZW1hLCBodGFiX21lbV9kdG9yLCBodGFiLVxcdTAwM2VrZXlfb2Zmc2V0KTtcXG4gfVxcbiBcXG4gc3RhdGljIHN0cnVjdCBicGZfbWFwICpodGFiX21hcF9hbGxvYyh1bmlvbiBicGZfYXR0ciAqYXR0cilcXG5AQCAtNTgzLDggKzY3NywxOCBAQCBzdGF0aWMgc3RydWN0IGJwZl9tYXAgKmh0YWJfbWFwX2FsbG9jKHVuaW9uIGJwZl9hdHRyICphdHRyKVxcbiBcXG4gXFx0aHRhYi1cXHUwMDNlbl9idWNrZXRzID0gcm91bmR1cF9wb3dfb2ZfdHdvKGh0YWItXFx1MDAzZW1hcC5tYXhfZW50cmllcyk7XFxuIFxcbi1cXHRodGFiLVxcdTAwM2VlbGVtX3NpemUgPSBzaXplb2Yoc3RydWN0IGh0YWJfZWxlbSkgK1xcbi1cXHRcXHRcXHQgIHJvdW5kX3VwKGh0YWItXFx1MDAzZW1hcC5rZXlfc2l6ZSwgOCk7XFxuK1xcdGlmIChodGFiX2lzX2xydShodGFiKSlcXG4rXFx0XFx0aHRhYi1cXHUwMDNla2V5X29mZnNldCA9IHNpemVvZihzdHJ1Y3QgaHRhYl9lbGVtX2xydSk7XFxuK1xcdGVsc2UgaWYgKHBlcmNwdSBcXHUwMDI2XFx1MDAyNiAhcHJlYWxsb2MpXFxuK1xcdFxcdGh0YWItXFx1MDAzZWtleV9vZmZzZXQgPSByb3VuZF91cChodGFiX2hhc19oYXNoKGh0YWIpID9cXG4rXFx0XFx0XFx0XFx0XFx0ICAgIHNpemVvZihzdHJ1Y3QgaHRhYl9lbGVtX3BjcHUpIDpcXG4rXFx0XFx0XFx0XFx0XFx0ICAgIG9mZnNldG9mKHN0cnVjdCBodGFiX2VsZW1fcGNwdSwgaGFzaCksIDgpO1xcbitcXHRlbHNlXFxuK1xcdFxcdGh0YWItXFx1MDAzZWtleV9vZmZzZXQgPSByb3VuZF91cChodGFiX2hhc19oYXNoKGh0YWIpID9cXG4rXFx0XFx0XFx0XFx0XFx0ICAgIHNpemVvZihzdHJ1Y3QgaHRhYl9lbGVtKSA6XFxuK1xcdFxcdFxcdFxcdFxcdCAgICBvZmZzZXRvZihzdHJ1Y3QgaHRhYl9lbGVtLCBoYXNoKSwgOCk7XFxuK1xcbitcXHRodGFiLVxcdTAwM2VlbGVtX3NpemUgPSBodGFiLVxcdTAwM2VrZXlfb2Zmc2V0ICsgcm91bmRfdXAoaHRhYi1cXHUwMDNlbWFwLmtleV9zaXplLCA4KTtcXG4gXFx0aWYgKHBlcmNwdSlcXG4gXFx0XFx0aHRhYi1cXHUwMDNlZWxlbV9zaXplICs9IHNpemVvZih2b2lkICopO1xcbiBcXHRlbHNlXFxuQEAgLTY5MiwxNCArNzk2LDE2IEBAIHN0YXRpYyBpbmxpbmUgc3RydWN0IGhsaXN0X251bGxzX2hlYWQgKnNlbGVjdF9idWNrZXQoc3RydWN0IGJwZl9odGFiICpodGFiLCB1MzJcXG4gfVxcbiBcXG4gLyogdGhpcyBsb29rdXAgZnVuY3Rpb24gY2FuIG9ubHkgYmUgY2FsbGVkIHdpdGggYnVja2V0IGxvY2sgdGFrZW4gKi9cXG4tc3RhdGljIHN0cnVjdCBodGFiX2VsZW0gKmxvb2t1cF9lbGVtX3JhdyhzdHJ1Y3QgaGxpc3RfbnVsbHNfaGVhZCAqaGVhZCwgdTMyIGhhc2gsXFxuK3N0YXRpYyBzdHJ1Y3QgaHRhYl9lbGVtICpsb29rdXBfZWxlbV9yYXcoc3RydWN0IGJwZl9odGFiICpodGFiLFxcbitcXHRcXHRcXHRcXHRcXHQgc3RydWN0IGhsaXN0X251bGxzX2hlYWQgKmhlYWQsIHUzMiBoYXNoLFxcbiBcXHRcXHRcXHRcXHRcXHQgdm9pZCAqa2V5LCB1MzIga2V5X3NpemUpXFxuIHtcXG4gXFx0c3RydWN0IGhsaXN0X251bGxzX25vZGUgKm47XFxuIFxcdHN0cnVjdCBodGFiX2VsZW0gKmw7XFxuIFxcbiBcXHRobGlzdF9udWxsc19mb3JfZWFjaF9lbnRyeV9yY3UobCwgbiwgaGVhZCwgaGFzaF9ub2RlKVxcbi1cXHRcXHRpZiAobC1cXHUwMDNlaGFzaCA9PSBoYXNoIFxcdTAwMjZcXHUwMDI2ICFtZW1jbXAoXFx1MDAyNmwtXFx1MDAzZWtleSwga2V5LCBrZXlfc2l6ZSkpXFxuK1xcdFxcdGlmICgoIWh0YWJfaGFzX2hhc2goaHRhYikgfHwgaHRhYl9lbGVtX2hhc2goaHRhYiwgbCkgPT0gaGFzaCkgXFx1MDAyNlxcdTAwMjZcXG4rXFx0XFx0ICAgICFtZW1jbXAoaHRhYl9lbGVtX2tleShodGFiLCBsKSwga2V5LCBrZXlfc2l6ZSkpXFxuIFxcdFxcdFxcdHJldHVybiBsO1xcbiBcXG4gXFx0cmV0dXJuIE5VTEw7XFxuQEAgLTcwOSw3ICs4MTUsOCBAQCBzdGF0aWMgc3RydWN0IGh0YWJfZWxlbSAqbG9va3VwX2VsZW1fcmF3KHN0cnVjdCBobGlzdF9udWxsc19oZWFkICpoZWFkLCB1MzIgaGFzaFxcbiAgKiB0aGUgdW5saWtlbHkgZXZlbnQgd2hlbiBlbGVtZW50cyBtb3ZlZCBmcm9tIG9uZSBidWNrZXQgaW50byBhbm90aGVyXFxuICAqIHdoaWxlIGxpbmsgbGlzdCBpcyBiZWluZyB3YWxrZWRcXG4gICovXFxuLXN0YXRpYyBzdHJ1Y3QgaHRhYl9lbGVtICpsb29rdXBfbnVsbHNfZWxlbV9yYXcoc3RydWN0IGhsaXN0X251bGxzX2hlYWQgKmhlYWQsXFxuK3N0YXRpYyBzdHJ1Y3QgaHRhYl9lbGVtICpsb29rdXBfbnVsbHNfZWxlbV9yYXcoc3RydWN0IGJwZl9odGFiICpodGFiLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgICAgc3RydWN0IGhsaXN0X251bGxzX2hlYWQgKmhlYWQsXFxuIFxcdFxcdFxcdFxcdFxcdCAgICAgICB1MzIgaGFzaCwgdm9pZCAqa2V5LFxcbiBcXHRcXHRcXHRcXHRcXHQgICAgICAgdTMyIGtleV9zaXplLCB1MzIgbl9idWNrZXRzKVxcbiB7XFxuQEAgLTcxOCw3ICs4MjUsOCBAQCBzdGF0aWMgc3RydWN0IGh0YWJfZWxlbSAqbG9va3VwX251bGxzX2VsZW1fcmF3KHN0cnVjdCBobGlzdF9udWxsc19oZWFkICpoZWFkLFxcbiBcXG4gYWdhaW46XFxuIFxcdGhsaXN0X251bGxzX2Zvcl9lYWNoX2VudHJ5X3JjdShsLCBuLCBoZWFkLCBoYXNoX25vZGUpXFxuLVxcdFxcdGlmIChsLVxcdTAwM2VoYXNoID09IGhhc2ggXFx1MDAyNlxcdTAwMjYgIW1lbWNtcChcXHUwMDI2bC1cXHUwMDNla2V5LCBrZXksIGtleV9zaXplKSlcXG4rXFx0XFx0aWYgKCghaHRhYl9oYXNfaGFzaChodGFiKSB8fCBodGFiX2VsZW1faGFzaChodGFiLCBsKSA9PSBoYXNoKSBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHQgICAgIW1lbWNtcChodGFiX2VsZW1fa2V5KGh0YWIsIGwpLCBrZXksIGtleV9zaXplKSlcXG4gXFx0XFx0XFx0cmV0dXJuIGw7XFxuIFxcbiBcXHRpZiAodW5saWtlbHkoZ2V0X251bGxzX3ZhbHVlKG4pICE9IChoYXNoIFxcdTAwMjYgKG5fYnVja2V0cyAtIDEpKSkpXFxuQEAgLTc0NywxNyArODU1LDE4IEBAIHN0YXRpYyB2b2lkICpfX2h0YWJfbWFwX2xvb2t1cF9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSlcXG4gXFxuIFxcdGhlYWQgPSBzZWxlY3RfYnVja2V0KGh0YWIsIGhhc2gpO1xcbiBcXG4tXFx0bCA9IGxvb2t1cF9udWxsc19lbGVtX3JhdyhoZWFkLCBoYXNoLCBrZXksIGtleV9zaXplLCBodGFiLVxcdTAwM2VuX2J1Y2tldHMpO1xcbitcXHRsID0gbG9va3VwX251bGxzX2VsZW1fcmF3KGh0YWIsIGhlYWQsIGhhc2gsIGtleSwga2V5X3NpemUsIGh0YWItXFx1MDAzZW5fYnVja2V0cyk7XFxuIFxcbiBcXHRyZXR1cm4gbDtcXG4gfVxcbiBcXG4gc3RhdGljIHZvaWQgKmh0YWJfbWFwX2xvb2t1cF9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSlcXG4ge1xcbitcXHRzdHJ1Y3QgYnBmX2h0YWIgKmh0YWIgPSBjb250YWluZXJfb2YobWFwLCBzdHJ1Y3QgYnBmX2h0YWIsIG1hcCk7XFxuIFxcdHN0cnVjdCBodGFiX2VsZW0gKmwgPSBfX2h0YWJfbWFwX2xvb2t1cF9lbGVtKG1hcCwga2V5KTtcXG4gXFxuIFxcdGlmIChsKVxcbi1cXHRcXHRyZXR1cm4gaHRhYl9lbGVtX3ZhbHVlKGwsIG1hcC1cXHUwMDNla2V5X3NpemUpO1xcbitcXHRcXHRyZXR1cm4gaHRhYl9lbGVtX3ZhbHVlKGh0YWIsIGwpO1xcbiBcXG4gXFx0cmV0dXJuIE5VTEw7XFxuIH1cXG5AQCAtNzc1LDYgKzg4NCw3IEBAIHN0YXRpYyB2b2lkICpodGFiX21hcF9sb29rdXBfZWxlbShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXkpXFxuICAqL1xcbiBzdGF0aWMgaW50IGh0YWJfbWFwX2dlbl9sb29rdXAoc3RydWN0IGJwZl9tYXAgKm1hcCwgc3RydWN0IGJwZl9pbnNuICppbnNuX2J1ZilcXG4ge1xcbitcXHRzdHJ1Y3QgYnBmX2h0YWIgKmh0YWIgPSBjb250YWluZXJfb2YobWFwLCBzdHJ1Y3QgYnBmX2h0YWIsIG1hcCk7XFxuIFxcdHN0cnVjdCBicGZfaW5zbiAqaW5zbiA9IGluc25fYnVmO1xcbiBcXHRjb25zdCBpbnQgcmV0ID0gQlBGX1JFR18wO1xcbiBcXG5AQCAtNzgzLDcgKzg5Myw3IEBAIHN0YXRpYyBpbnQgaHRhYl9tYXBfZ2VuX2xvb2t1cChzdHJ1Y3QgYnBmX21hcCAqbWFwLCBzdHJ1Y3QgYnBmX2luc24gKmluc25fYnVmKVxcbiBcXHQqaW5zbisrID0gQlBGX0VNSVRfQ0FMTChfX2h0YWJfbWFwX2xvb2t1cF9lbGVtKTtcXG4gXFx0Kmluc24rKyA9IEJQRl9KTVBfSU1NKEJQRl9KRVEsIHJldCwgMCwgMSk7XFxuIFxcdCppbnNuKysgPSBCUEZfQUxVNjRfSU1NKEJQRl9BREQsIHJldCxcXG4tXFx0XFx0XFx0XFx0b2Zmc2V0b2Yoc3RydWN0IGh0YWJfZWxlbSwga2V5KSArXFxuK1xcdFxcdFxcdFxcdGh0YWItXFx1MDAzZWtleV9vZmZzZXQgK1xcbiBcXHRcXHRcXHRcXHRyb3VuZF91cChtYXAtXFx1MDAzZWtleV9zaXplLCA4KSk7XFxuIFxcdHJldHVybiBpbnNuIC0gaW5zbl9idWY7XFxuIH1cXG5AQCAtNzkxLDEyICs5MDEsMTMgQEAgc3RhdGljIGludCBodGFiX21hcF9nZW5fbG9va3VwKHN0cnVjdCBicGZfbWFwICptYXAsIHN0cnVjdCBicGZfaW5zbiAqaW5zbl9idWYpXFxuIHN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCAqX19odGFiX2xydV9tYXBfbG9va3VwX2VsZW0oc3RydWN0IGJwZl9tYXAgKm1hcCxcXG4gXFx0XFx0XFx0XFx0XFx0XFx0XFx0dm9pZCAqa2V5LCBjb25zdCBib29sIG1hcmspXFxuIHtcXG4rXFx0c3RydWN0IGJwZl9odGFiICpodGFiID0gY29udGFpbmVyX29mKG1hcCwgc3RydWN0IGJwZl9odGFiLCBtYXApO1xcbiBcXHRzdHJ1Y3QgaHRhYl9lbGVtICpsID0gX19odGFiX21hcF9sb29rdXBfZWxlbShtYXAsIGtleSk7XFxuIFxcbiBcXHRpZiAobCkge1xcbiBcXHRcXHRpZiAobWFyaylcXG4tXFx0XFx0XFx0YnBmX2xydV9ub2RlX3NldF9yZWYoXFx1MDAyNmwtXFx1MDAzZWxydV9ub2RlKTtcXG4tXFx0XFx0cmV0dXJuIGh0YWJfZWxlbV92YWx1ZShsLCBtYXAtXFx1MDAzZWtleV9zaXplKTtcXG4rXFx0XFx0XFx0YnBmX2xydV9ub2RlX3NldF9yZWYoaHRhYl9lbGVtX2xydV9ub2RlKGwpKTtcXG4rXFx0XFx0cmV0dXJuIGh0YWJfZWxlbV92YWx1ZShodGFiLCBsKTtcXG4gXFx0fVxcbiBcXG4gXFx0cmV0dXJuIE5VTEw7XFxuQEAgLTgxNSw2ICs5MjYsNyBAQCBzdGF0aWMgdm9pZCAqaHRhYl9scnVfbWFwX2xvb2t1cF9lbGVtX3N5cyhzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXkpXFxuIHN0YXRpYyBpbnQgaHRhYl9scnVfbWFwX2dlbl9sb29rdXAoc3RydWN0IGJwZl9tYXAgKm1hcCxcXG4gXFx0XFx0XFx0XFx0ICAgc3RydWN0IGJwZl9pbnNuICppbnNuX2J1ZilcXG4ge1xcbitcXHRzdHJ1Y3QgYnBmX2h0YWIgKmh0YWIgPSBjb250YWluZXJfb2YobWFwLCBzdHJ1Y3QgYnBmX2h0YWIsIG1hcCk7XFxuIFxcdHN0cnVjdCBicGZfaW5zbiAqaW5zbiA9IGluc25fYnVmO1xcbiBcXHRjb25zdCBpbnQgcmV0ID0gQlBGX1JFR18wO1xcbiBcXHRjb25zdCBpbnQgcmVmX3JlZyA9IEJQRl9SRUdfMTtcXG5AQCAtODI0LDE1ICs5MzYsMTUgQEAgc3RhdGljIGludCBodGFiX2xydV9tYXBfZ2VuX2xvb2t1cChzdHJ1Y3QgYnBmX21hcCAqbWFwLFxcbiBcXHQqaW5zbisrID0gQlBGX0VNSVRfQ0FMTChfX2h0YWJfbWFwX2xvb2t1cF9lbGVtKTtcXG4gXFx0Kmluc24rKyA9IEJQRl9KTVBfSU1NKEJQRl9KRVEsIHJldCwgMCwgNCk7XFxuIFxcdCppbnNuKysgPSBCUEZfTERYX01FTShCUEZfQiwgcmVmX3JlZywgcmV0LFxcbi1cXHRcXHRcXHQgICAgICBvZmZzZXRvZihzdHJ1Y3QgaHRhYl9lbGVtLCBscnVfbm9kZSkgK1xcbitcXHRcXHRcXHQgICAgICBvZmZzZXRvZihzdHJ1Y3QgaHRhYl9lbGVtX2xydSwgbHJ1X25vZGUpICtcXG4gXFx0XFx0XFx0ICAgICAgb2Zmc2V0b2Yoc3RydWN0IGJwZl9scnVfbm9kZSwgcmVmKSk7XFxuIFxcdCppbnNuKysgPSBCUEZfSk1QX0lNTShCUEZfSk5FLCByZWZfcmVnLCAwLCAxKTtcXG4gXFx0Kmluc24rKyA9IEJQRl9TVF9NRU0oQlBGX0IsIHJldCxcXG4tXFx0XFx0XFx0ICAgICBvZmZzZXRvZihzdHJ1Y3QgaHRhYl9lbGVtLCBscnVfbm9kZSkgK1xcbitcXHRcXHRcXHQgICAgIG9mZnNldG9mKHN0cnVjdCBodGFiX2VsZW1fbHJ1LCBscnVfbm9kZSkgK1xcbiBcXHRcXHRcXHQgICAgIG9mZnNldG9mKHN0cnVjdCBicGZfbHJ1X25vZGUsIHJlZiksXFxuIFxcdFxcdFxcdCAgICAgMSk7XFxuIFxcdCppbnNuKysgPSBCUEZfQUxVNjRfSU1NKEJQRl9BREQsIHJldCxcXG4tXFx0XFx0XFx0XFx0b2Zmc2V0b2Yoc3RydWN0IGh0YWJfZWxlbSwga2V5KSArXFxuK1xcdFxcdFxcdFxcdGh0YWItXFx1MDAzZWtleV9vZmZzZXQgK1xcbiBcXHRcXHRcXHRcXHRyb3VuZF91cChtYXAtXFx1MDAzZWtleV9zaXplLCA4KSk7XFxuIFxcdHJldHVybiBpbnNuIC0gaW5zbl9idWY7XFxuIH1cXG5AQCAtODQ0LDEzICs5NTYsMTMgQEAgc3RhdGljIHZvaWQgY2hlY2tfYW5kX2NhbmNlbF9maWVsZHMoc3RydWN0IGJwZl9odGFiICpodGFiLFxcbiBcXHRcXHRyZXR1cm47XFxuIFxcbiBcXHRpZiAoaHRhYl9pc19wZXJjcHUoaHRhYikpIHtcXG4tXFx0XFx0dm9pZCBfX3BlcmNwdSAqcHB0ciA9IGh0YWJfZWxlbV9nZXRfcHRyKGVsZW0sIGh0YWItXFx1MDAzZW1hcC5rZXlfc2l6ZSk7XFxuK1xcdFxcdHZvaWQgX19wZXJjcHUgKnBwdHIgPSBodGFiX2VsZW1fZ2V0X3B0cihodGFiLCBlbGVtKTtcXG4gXFx0XFx0aW50IGNwdTtcXG4gXFxuIFxcdFxcdGZvcl9lYWNoX3Bvc3NpYmxlX2NwdShjcHUpXFxuIFxcdFxcdFxcdGJwZl9vYmpfY2FuY2VsX2ZpZWxkcyhcXHUwMDI2aHRhYi1cXHUwMDNlbWFwLCBwZXJfY3B1X3B0cihwcHRyLCBjcHUpKTtcXG4gXFx0fSBlbHNlIHtcXG4tXFx0XFx0dm9pZCAqbWFwX3ZhbHVlID0gaHRhYl9lbGVtX3ZhbHVlKGVsZW0sIGh0YWItXFx1MDAzZW1hcC5rZXlfc2l6ZSk7XFxuK1xcdFxcdHZvaWQgKm1hcF92YWx1ZSA9IGh0YWJfZWxlbV92YWx1ZShodGFiLCBlbGVtKTtcXG4gXFxuIFxcdFxcdGJwZl9vYmpfY2FuY2VsX2ZpZWxkcyhcXHUwMDI2aHRhYi1cXHUwMDNlbWFwLCBtYXBfdmFsdWUpO1xcbiBcXHR9XFxuQEAgLTg2OSw4ICs5ODEsOCBAQCBzdGF0aWMgYm9vbCBodGFiX2xydV9tYXBfZGVsZXRlX25vZGUodm9pZCAqYXJnLCBzdHJ1Y3QgYnBmX2xydV9ub2RlICpub2RlKVxcbiBcXHRzdHJ1Y3QgYnVja2V0ICpiO1xcbiBcXHRpbnQgcmV0O1xcbiBcXG4tXFx0dGd0X2wgPSBjb250YWluZXJfb2Yobm9kZSwgc3RydWN0IGh0YWJfZWxlbSwgbHJ1X25vZGUpO1xcbi1cXHRiID0gX19zZWxlY3RfYnVja2V0KGh0YWIsIHRndF9sLVxcdTAwM2VoYXNoKTtcXG4rXFx0dGd0X2wgPSAoc3RydWN0IGh0YWJfZWxlbSAqKWNvbnRhaW5lcl9vZihub2RlLCBzdHJ1Y3QgaHRhYl9lbGVtX2xydSwgbHJ1X25vZGUpO1xcbitcXHRiID0gX19zZWxlY3RfYnVja2V0KGh0YWIsIGh0YWJfZWxlbV9oYXNoKGh0YWIsIHRndF9sKSk7XFxuIFxcdGhlYWQgPSBcXHUwMDI2Yi1cXHUwMDNlaGVhZDtcXG4gXFxuIFxcdHJldCA9IGh0YWJfbG9ja19idWNrZXQoYiwgXFx1MDAyNmZsYWdzKTtcXG5AQCAtOTEyLDcgKzEwMjQsNyBAQCBzdGF0aWMgaW50IGh0YWJfbWFwX2dldF9uZXh0X2tleShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXksIHZvaWQgKm5leHRfa2V5KVxcbiBcXHRoZWFkID0gc2VsZWN0X2J1Y2tldChodGFiLCBoYXNoKTtcXG4gXFxuIFxcdC8qIGxvb2t1cCB0aGUga2V5ICovXFxuLVxcdGwgPSBsb29rdXBfbnVsbHNfZWxlbV9yYXcoaGVhZCwgaGFzaCwga2V5LCBrZXlfc2l6ZSwgaHRhYi1cXHUwMDNlbl9idWNrZXRzKTtcXG4rXFx0bCA9IGxvb2t1cF9udWxsc19lbGVtX3JhdyhodGFiLCBoZWFkLCBoYXNoLCBrZXksIGtleV9zaXplLCBodGFiLVxcdTAwM2VuX2J1Y2tldHMpO1xcbiBcXG4gXFx0aWYgKCFsKVxcbiBcXHRcXHRnb3RvIGZpbmRfZmlyc3RfZWxlbTtcXG5AQCAtOTIzLDcgKzEwMzUsNyBAQCBzdGF0aWMgaW50IGh0YWJfbWFwX2dldF9uZXh0X2tleShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXksIHZvaWQgKm5leHRfa2V5KVxcbiBcXG4gXFx0aWYgKG5leHRfbCkge1xcbiBcXHRcXHQvKiBpZiBuZXh0IGVsZW0gaW4gdGhpcyBoYXNoIGxpc3QgaXMgbm9uLXplcm8sIGp1c3QgcmV0dXJuIGl0ICovXFxuLVxcdFxcdG1lbWNweShuZXh0X2tleSwgbmV4dF9sLVxcdTAwM2VrZXksIGtleV9zaXplKTtcXG4rXFx0XFx0bWVtY3B5KG5leHRfa2V5LCBodGFiX2VsZW1fa2V5KGh0YWIsIG5leHRfbCksIGtleV9zaXplKTtcXG4gXFx0XFx0cmV0dXJuIDA7XFxuIFxcdH1cXG4gXFxuQEAgLTk0MSw3ICsxMDUzLDcgQEAgc3RhdGljIGludCBodGFiX21hcF9nZXRfbmV4dF9rZXkoc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5LCB2b2lkICpuZXh0X2tleSlcXG4gXFx0XFx0XFx0XFx0XFx0ICBzdHJ1Y3QgaHRhYl9lbGVtLCBoYXNoX25vZGUpO1xcbiBcXHRcXHRpZiAobmV4dF9sKSB7XFxuIFxcdFxcdFxcdC8qIGlmIGl0J3Mgbm90IGVtcHR5LCBqdXN0IHJldHVybiBpdCAqL1xcbi1cXHRcXHRcXHRtZW1jcHkobmV4dF9rZXksIG5leHRfbC1cXHUwMDNla2V5LCBrZXlfc2l6ZSk7XFxuK1xcdFxcdFxcdG1lbWNweShuZXh0X2tleSwgaHRhYl9lbGVtX2tleShodGFiLCBuZXh0X2wpLCBrZXlfc2l6ZSk7XFxuIFxcdFxcdFxcdHJldHVybiAwO1xcbiBcXHRcXHR9XFxuIFxcdH1cXG5AQCAtOTU1LDcgKzEwNjcsNyBAQCBzdGF0aWMgdm9pZCBodGFiX2VsZW1fZnJlZShzdHJ1Y3QgYnBmX2h0YWIgKmh0YWIsIHN0cnVjdCBodGFiX2VsZW0gKmwpXFxuIFxcdGNoZWNrX2FuZF9jYW5jZWxfZmllbGRzKGh0YWIsIGwpO1xcbiBcXG4gXFx0aWYgKGh0YWItXFx1MDAzZW1hcC5tYXBfdHlwZSA9PSBCUEZfTUFQX1RZUEVfUEVSQ1BVX0hBU0gpXFxuLVxcdFxcdGJwZl9tZW1fY2FjaGVfZnJlZShcXHUwMDI2aHRhYi1cXHUwMDNlcGNwdV9tYSwgbC1cXHUwMDNlcHRyX3RvX3BwdHIpO1xcbitcXHRcXHRicGZfbWVtX2NhY2hlX2ZyZWUoXFx1MDAyNmh0YWItXFx1MDAzZXBjcHVfbWEsIGh0YWJfZWxlbV9nZXRfcHRyX3RvX3BwdHIobCkpO1xcbiBcXHRicGZfbWVtX2NhY2hlX2ZyZWUoXFx1MDAyNmh0YWItXFx1MDAzZW1hLCBsKTtcXG4gfVxcbiBcXG5AQCAtOTY1LDcgKzEwNzcsNyBAQCBzdGF0aWMgdm9pZCBodGFiX3B1dF9mZF92YWx1ZShzdHJ1Y3QgYnBmX2h0YWIgKmh0YWIsIHN0cnVjdCBodGFiX2VsZW0gKmwpXFxuIFxcdHZvaWQgKnB0cjtcXG4gXFxuIFxcdGlmIChtYXAtXFx1MDAzZW9wcy1cXHUwMDNlbWFwX2ZkX3B1dF9wdHIpIHtcXG4tXFx0XFx0cHRyID0gZmRfaHRhYl9tYXBfZ2V0X3B0cihtYXAsIGwpO1xcbitcXHRcXHRwdHIgPSBmZF9odGFiX21hcF9nZXRfcHRyKGh0YWIsIGwpO1xcbiBcXHRcXHRtYXAtXFx1MDAzZW9wcy1cXHUwMDNlbWFwX2ZkX3B1dF9wdHIobWFwLCBwdHIsIHRydWUpO1xcbiBcXHR9XFxuIH1cXG5AQCAtMTExNywxMCArMTIyOSwxMCBAQCBzdGF0aWMgc3RydWN0IGh0YWJfZWxlbSAqYWxsb2NfaHRhYl9lbGVtKHN0cnVjdCBicGZfaHRhYiAqaHRhYiwgdm9pZCAqa2V5LFxcbiBcXHRcXHR9XFxuIFxcdH1cXG4gXFxuLVxcdG1lbWNweShsX25ldy1cXHUwMDNla2V5LCBrZXksIGtleV9zaXplKTtcXG4rXFx0bWVtY3B5KGh0YWJfZWxlbV9rZXkoaHRhYiwgbF9uZXcpLCBrZXksIGtleV9zaXplKTtcXG4gXFx0aWYgKHBlcmNwdSkge1xcbiBcXHRcXHRpZiAocHJlYWxsb2MpIHtcXG4tXFx0XFx0XFx0cHB0ciA9IGh0YWJfZWxlbV9nZXRfcHRyKGxfbmV3LCBrZXlfc2l6ZSk7XFxuK1xcdFxcdFxcdHBwdHIgPSBodGFiX2VsZW1fZ2V0X3B0cihodGFiLCBsX25ldyk7XFxuIFxcdFxcdH0gZWxzZSB7XFxuIFxcdFxcdFxcdC8qIGFsbG9jX3BlcmNwdSB6ZXJvLWZpbGxzICovXFxuIFxcdFxcdFxcdHZvaWQgKnB0ciA9IGJwZl9tZW1fY2FjaGVfYWxsb2MoXFx1MDAyNmh0YWItXFx1MDAzZXBjcHVfbWEpO1xcbkBAIC0xMTMwLDI2ICsxMjQyLDI2IEBAIHN0YXRpYyBzdHJ1Y3QgaHRhYl9lbGVtICphbGxvY19odGFiX2VsZW0oc3RydWN0IGJwZl9odGFiICpodGFiLCB2b2lkICprZXksXFxuIFxcdFxcdFxcdFxcdGxfbmV3ID0gRVJSX1BUUigtRU5PTUVNKTtcXG4gXFx0XFx0XFx0XFx0Z290byBkZWNfY291bnQ7XFxuIFxcdFxcdFxcdH1cXG4tXFx0XFx0XFx0bF9uZXctXFx1MDAzZXB0cl90b19wcHRyID0gcHRyO1xcbitcXHRcXHRcXHRodGFiX2VsZW1fc2V0X3B0cl90b19wcHRyKGxfbmV3LCBwdHIpO1xcbiBcXHRcXHRcXHRwcHRyID0gKih2b2lkIF9fcGVyY3B1ICoqKXB0cjtcXG4gXFx0XFx0fVxcbiBcXG4gXFx0XFx0cGNwdV9pbml0X3ZhbHVlKGh0YWIsIHBwdHIsIHZhbHVlLCBvbmFsbGNwdXMsIG1hcF9mbGFncyk7XFxuIFxcbiBcXHRcXHRpZiAoIXByZWFsbG9jKVxcbi1cXHRcXHRcXHRodGFiX2VsZW1fc2V0X3B0cihsX25ldywga2V5X3NpemUsIHBwdHIpO1xcbitcXHRcXHRcXHRodGFiX2VsZW1fc2V0X3B0cihodGFiLCBsX25ldywgcHB0cik7XFxuIFxcdH0gZWxzZSBpZiAoZmRfaHRhYl9tYXBfbmVlZHNfYWRqdXN0KGh0YWIpKSB7XFxuIFxcdFxcdHNpemUgPSByb3VuZF91cChzaXplLCA4KTtcXG4tXFx0XFx0bWVtY3B5KGh0YWJfZWxlbV92YWx1ZShsX25ldywga2V5X3NpemUpLCB2YWx1ZSwgc2l6ZSk7XFxuK1xcdFxcdG1lbWNweShodGFiX2VsZW1fdmFsdWUoaHRhYiwgbF9uZXcpLCB2YWx1ZSwgc2l6ZSk7XFxuIFxcdH0gZWxzZSBpZiAobWFwX2ZsYWdzIFxcdTAwMjYgQlBGX0ZfTE9DSykge1xcbiBcXHRcXHRjb3B5X21hcF92YWx1ZV9sb2NrZWQoXFx1MDAyNmh0YWItXFx1MDAzZW1hcCxcXG4tXFx0XFx0XFx0XFx0ICAgICAgaHRhYl9lbGVtX3ZhbHVlKGxfbmV3LCBrZXlfc2l6ZSksXFxuK1xcdFxcdFxcdFxcdCAgICAgIGh0YWJfZWxlbV92YWx1ZShodGFiLCBsX25ldyksXFxuIFxcdFxcdFxcdFxcdCAgICAgIHZhbHVlLCBmYWxzZSk7XFxuIFxcdH0gZWxzZSB7XFxuLVxcdFxcdGNvcHlfbWFwX3ZhbHVlKFxcdTAwMjZodGFiLVxcdTAwM2VtYXAsIGh0YWJfZWxlbV92YWx1ZShsX25ldywga2V5X3NpemUpLCB2YWx1ZSk7XFxuK1xcdFxcdGNvcHlfbWFwX3ZhbHVlKFxcdTAwMjZodGFiLVxcdTAwM2VtYXAsIGh0YWJfZWxlbV92YWx1ZShodGFiLCBsX25ldyksIHZhbHVlKTtcXG4gXFx0fVxcbiBcXG4tXFx0bF9uZXctXFx1MDAzZWhhc2ggPSBoYXNoO1xcbitcXHRodGFiX2VsZW1fc2V0X2hhc2goaHRhYiwgbF9uZXcsIGhhc2gpO1xcbiBcXHRyZXR1cm4gbF9uZXc7XFxuIGRlY19jb3VudDpcXG4gXFx0ZGVjX2VsZW1fY291bnQoaHRhYik7XFxuQEAgLTExOTksNyArMTMxMSw3IEBAIHN0YXRpYyBsb25nIGh0YWJfbWFwX3VwZGF0ZV9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSwgdm9pZCAqdmFsdWUsXFxuIFxcdFxcdGlmICh1bmxpa2VseSghYnRmX3JlY29yZF9oYXNfZmllbGQobWFwLVxcdTAwM2VyZWNvcmQsIEJQRl9TUElOX0xPQ0spKSlcXG4gXFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIFxcdFxcdC8qIGZpbmQgYW4gZWxlbWVudCB3aXRob3V0IHRha2luZyB0aGUgYnVja2V0IGxvY2sgKi9cXG4tXFx0XFx0bF9vbGQgPSBsb29rdXBfbnVsbHNfZWxlbV9yYXcoaGVhZCwgaGFzaCwga2V5LCBrZXlfc2l6ZSxcXG4rXFx0XFx0bF9vbGQgPSBsb29rdXBfbnVsbHNfZWxlbV9yYXcoaHRhYiwgaGVhZCwgaGFzaCwga2V5LCBrZXlfc2l6ZSxcXG4gXFx0XFx0XFx0XFx0XFx0ICAgICAgaHRhYi1cXHUwMDNlbl9idWNrZXRzKTtcXG4gXFx0XFx0cmV0ID0gY2hlY2tfZmxhZ3MoaHRhYiwgbF9vbGQsIG1hcF9mbGFncyk7XFxuIFxcdFxcdGlmIChyZXQpXFxuQEAgLTEyMDcsNyArMTMxOSw3IEBAIHN0YXRpYyBsb25nIGh0YWJfbWFwX3VwZGF0ZV9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSwgdm9pZCAqdmFsdWUsXFxuIFxcdFxcdGlmIChsX29sZCkge1xcbiBcXHRcXHRcXHQvKiBncmFiIHRoZSBlbGVtZW50IGxvY2sgYW5kIHVwZGF0ZSB2YWx1ZSBpbiBwbGFjZSAqL1xcbiBcXHRcXHRcXHRjb3B5X21hcF92YWx1ZV9sb2NrZWQobWFwLFxcbi1cXHRcXHRcXHRcXHRcXHQgICAgICBodGFiX2VsZW1fdmFsdWUobF9vbGQsIGtleV9zaXplKSxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICAgaHRhYl9lbGVtX3ZhbHVlKGh0YWIsIGxfb2xkKSxcXG4gXFx0XFx0XFx0XFx0XFx0ICAgICAgdmFsdWUsIGZhbHNlKTtcXG4gXFx0XFx0XFx0cmV0dXJuIDA7XFxuIFxcdFxcdH1cXG5AQCAtMTIyMSw3ICsxMzMzLDcgQEAgc3RhdGljIGxvbmcgaHRhYl9tYXBfdXBkYXRlX2VsZW0oc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5LCB2b2lkICp2YWx1ZSxcXG4gXFx0aWYgKHJldClcXG4gXFx0XFx0cmV0dXJuIHJldDtcXG4gXFxuLVxcdGxfb2xkID0gbG9va3VwX2VsZW1fcmF3KGhlYWQsIGhhc2gsIGtleSwga2V5X3NpemUpO1xcbitcXHRsX29sZCA9IGxvb2t1cF9lbGVtX3JhdyhodGFiLCBoZWFkLCBoYXNoLCBrZXksIGtleV9zaXplKTtcXG4gXFxuIFxcdHJldCA9IGNoZWNrX2ZsYWdzKGh0YWIsIGxfb2xkLCBtYXBfZmxhZ3MpO1xcbiBcXHRpZiAocmV0KVxcbkBAIC0xMjM1LDcgKzEzNDcsNyBAQCBzdGF0aWMgbG9uZyBodGFiX21hcF91cGRhdGVfZWxlbShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXksIHZvaWQgKnZhbHVlLFxcbiBcXHRcXHQgKiBhbmQgdXBkYXRlIGVsZW1lbnQgaW4gcGxhY2VcXG4gXFx0XFx0ICovXFxuIFxcdFxcdGNvcHlfbWFwX3ZhbHVlX2xvY2tlZChtYXAsXFxuLVxcdFxcdFxcdFxcdCAgICAgIGh0YWJfZWxlbV92YWx1ZShsX29sZCwga2V5X3NpemUpLFxcbitcXHRcXHRcXHRcXHQgICAgICBodGFiX2VsZW1fdmFsdWUoaHRhYiwgbF9vbGQpLFxcbiBcXHRcXHRcXHRcXHQgICAgICB2YWx1ZSwgZmFsc2UpO1xcbiBcXHRcXHRyZXQgPSAwO1xcbiBcXHRcXHRnb3RvIGVycjtcXG5AQCAtMTI3NSw3ICsxMzg3LDcgQEAgc3RhdGljIHZvaWQgaHRhYl9scnVfcHVzaF9mcmVlKHN0cnVjdCBicGZfaHRhYiAqaHRhYiwgc3RydWN0IGh0YWJfZWxlbSAqZWxlbSlcXG4ge1xcbiBcXHRjaGVja19hbmRfY2FuY2VsX2ZpZWxkcyhodGFiLCBlbGVtKTtcXG4gXFx0YnBmX21hcF9kZWNfZWxlbV9jb3VudChcXHUwMDI2aHRhYi1cXHUwMDNlbWFwKTtcXG4tXFx0YnBmX2xydV9wdXNoX2ZyZWUoXFx1MDAyNmh0YWItXFx1MDAzZWxydSwgXFx1MDAyNmVsZW0tXFx1MDAzZWxydV9ub2RlKTtcXG4rXFx0YnBmX2xydV9wdXNoX2ZyZWUoXFx1MDAyNmh0YWItXFx1MDAzZWxydSwgaHRhYl9lbGVtX2xydV9ub2RlKGVsZW0pKTtcXG4gfVxcbiBcXG4gc3RhdGljIGxvbmcgaHRhYl9scnVfbWFwX3VwZGF0ZV9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSwgdm9pZCAqdmFsdWUsXFxuQEAgLTEzMTAsMTMgKzE0MjIsMTMgQEAgc3RhdGljIGxvbmcgaHRhYl9scnVfbWFwX3VwZGF0ZV9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSwgdm9pZCAqdmFsdWVcXG4gXFx0bF9uZXcgPSBwcmVhbGxvY19scnVfcG9wKGh0YWIsIGtleSwgaGFzaCk7XFxuIFxcdGlmICghbF9uZXcpXFxuIFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbi1cXHRjb3B5X21hcF92YWx1ZShcXHUwMDI2aHRhYi1cXHUwMDNlbWFwLCBodGFiX2VsZW1fdmFsdWUobF9uZXcsIG1hcC1cXHUwMDNla2V5X3NpemUpLCB2YWx1ZSk7XFxuK1xcdGNvcHlfbWFwX3ZhbHVlKFxcdTAwMjZodGFiLVxcdTAwM2VtYXAsIGh0YWJfZWxlbV92YWx1ZShodGFiLCBsX25ldyksIHZhbHVlKTtcXG4gXFxuIFxcdHJldCA9IGh0YWJfbG9ja19idWNrZXQoYiwgXFx1MDAyNmZsYWdzKTtcXG4gXFx0aWYgKHJldClcXG4gXFx0XFx0Z290byBlcnJfbG9ja19idWNrZXQ7XFxuIFxcbi1cXHRsX29sZCA9IGxvb2t1cF9lbGVtX3JhdyhoZWFkLCBoYXNoLCBrZXksIGtleV9zaXplKTtcXG4rXFx0bF9vbGQgPSBsb29rdXBfZWxlbV9yYXcoaHRhYiwgaGVhZCwgaGFzaCwga2V5LCBrZXlfc2l6ZSk7XFxuIFxcbiBcXHRyZXQgPSBjaGVja19mbGFncyhodGFiLCBsX29sZCwgbWFwX2ZsYWdzKTtcXG4gXFx0aWYgKHJldClcXG5AQCAtMTMyNyw3ICsxNDM5LDcgQEAgc3RhdGljIGxvbmcgaHRhYl9scnVfbWFwX3VwZGF0ZV9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSwgdm9pZCAqdmFsdWVcXG4gXFx0ICovXFxuIFxcdGhsaXN0X251bGxzX2FkZF9oZWFkX3JjdShcXHUwMDI2bF9uZXctXFx1MDAzZWhhc2hfbm9kZSwgaGVhZCk7XFxuIFxcdGlmIChsX29sZCkge1xcbi1cXHRcXHRicGZfbHJ1X25vZGVfc2V0X3JlZihcXHUwMDI2bF9uZXctXFx1MDAzZWxydV9ub2RlKTtcXG4rXFx0XFx0YnBmX2xydV9ub2RlX3NldF9yZWYoaHRhYl9lbGVtX2xydV9ub2RlKGxfbmV3KSk7XFxuIFxcdFxcdGhsaXN0X251bGxzX2RlbF9yY3UoXFx1MDAyNmxfb2xkLVxcdTAwM2VoYXNoX25vZGUpO1xcbiBcXHR9XFxuIFxcdHJldCA9IDA7XFxuQEAgLTEzODMsNyArMTQ5NSw3IEBAIHN0YXRpYyBsb25nIGh0YWJfbWFwX3VwZGF0ZV9lbGVtX2luX3BsYWNlKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSxcXG4gXFx0aWYgKHJldClcXG4gXFx0XFx0cmV0dXJuIHJldDtcXG4gXFxuLVxcdGxfb2xkID0gbG9va3VwX2VsZW1fcmF3KGhlYWQsIGhhc2gsIGtleSwga2V5X3NpemUpO1xcbitcXHRsX29sZCA9IGxvb2t1cF9lbGVtX3JhdyhodGFiLCBoZWFkLCBoYXNoLCBrZXksIGtleV9zaXplKTtcXG4gXFxuIFxcdHJldCA9IGNoZWNrX2ZsYWdzKGh0YWIsIGxfb2xkLCBtYXBfZmxhZ3MpO1xcbiBcXHRpZiAocmV0KVxcbkBAIC0xMzkyLDEwICsxNTA0LDEwIEBAIHN0YXRpYyBsb25nIGh0YWJfbWFwX3VwZGF0ZV9lbGVtX2luX3BsYWNlKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSxcXG4gXFx0aWYgKGxfb2xkKSB7XFxuIFxcdFxcdC8qIFVwZGF0ZSB2YWx1ZSBpbi1wbGFjZSAqL1xcbiBcXHRcXHRpZiAocGVyY3B1KSB7XFxuLVxcdFxcdFxcdHBjcHVfY29weV92YWx1ZShodGFiLCBodGFiX2VsZW1fZ2V0X3B0cihsX29sZCwga2V5X3NpemUpLFxcbitcXHRcXHRcXHRwY3B1X2NvcHlfdmFsdWUoaHRhYiwgaHRhYl9lbGVtX2dldF9wdHIoaHRhYiwgbF9vbGQpLFxcbiBcXHRcXHRcXHRcXHRcXHR2YWx1ZSwgb25hbGxjcHVzLCBtYXBfZmxhZ3MpO1xcbiBcXHRcXHR9IGVsc2Uge1xcbi1cXHRcXHRcXHR2b2lkICoqaW5uZXJfbWFwX3BwdHIgPSBodGFiX2VsZW1fdmFsdWUobF9vbGQsIGtleV9zaXplKTtcXG4rXFx0XFx0XFx0dm9pZCAqKmlubmVyX21hcF9wcHRyID0gaHRhYl9lbGVtX3ZhbHVlKGh0YWIsIGxfb2xkKTtcXG4gXFxuIFxcdFxcdFxcdG9sZF9tYXBfcHRyID0gKmlubmVyX21hcF9wcHRyO1xcbiBcXHRcXHRcXHRXUklURV9PTkNFKCppbm5lcl9tYXBfcHB0ciwgKih2b2lkICoqKXZhbHVlKTtcXG5AQCAtMTQ1NiwyMCArMTU2OCwyMCBAQCBzdGF0aWMgbG9uZyBfX2h0YWJfbHJ1X3BlcmNwdV9tYXBfdXBkYXRlX2VsZW0oc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5LFxcbiBcXHRpZiAocmV0KVxcbiBcXHRcXHRnb3RvIGVycl9sb2NrX2J1Y2tldDtcXG4gXFxuLVxcdGxfb2xkID0gbG9va3VwX2VsZW1fcmF3KGhlYWQsIGhhc2gsIGtleSwga2V5X3NpemUpO1xcbitcXHRsX29sZCA9IGxvb2t1cF9lbGVtX3JhdyhodGFiLCBoZWFkLCBoYXNoLCBrZXksIGtleV9zaXplKTtcXG4gXFxuIFxcdHJldCA9IGNoZWNrX2ZsYWdzKGh0YWIsIGxfb2xkLCBtYXBfZmxhZ3MpO1xcbiBcXHRpZiAocmV0KVxcbiBcXHRcXHRnb3RvIGVycjtcXG4gXFxuIFxcdGlmIChsX29sZCkge1xcbi1cXHRcXHRicGZfbHJ1X25vZGVfc2V0X3JlZihcXHUwMDI2bF9vbGQtXFx1MDAzZWxydV9ub2RlKTtcXG4rXFx0XFx0YnBmX2xydV9ub2RlX3NldF9yZWYoaHRhYl9lbGVtX2xydV9ub2RlKGxfb2xkKSk7XFxuIFxcbiBcXHRcXHQvKiBwZXItY3B1IGhhc2ggbWFwIGNhbiB1cGRhdGUgdmFsdWUgaW4tcGxhY2UgKi9cXG4tXFx0XFx0cGNwdV9jb3B5X3ZhbHVlKGh0YWIsIGh0YWJfZWxlbV9nZXRfcHRyKGxfb2xkLCBrZXlfc2l6ZSksXFxuK1xcdFxcdHBjcHVfY29weV92YWx1ZShodGFiLCBodGFiX2VsZW1fZ2V0X3B0cihodGFiLCBsX29sZCksXFxuIFxcdFxcdFxcdFxcdHZhbHVlLCBvbmFsbGNwdXMsIG1hcF9mbGFncyk7XFxuIFxcdH0gZWxzZSB7XFxuLVxcdFxcdHBjcHVfaW5pdF92YWx1ZShodGFiLCBodGFiX2VsZW1fZ2V0X3B0cihsX25ldywga2V5X3NpemUpLFxcbitcXHRcXHRwY3B1X2luaXRfdmFsdWUoaHRhYiwgaHRhYl9lbGVtX2dldF9wdHIoaHRhYiwgbF9uZXcpLFxcbiBcXHRcXHRcXHRcXHR2YWx1ZSwgb25hbGxjcHVzLCBtYXBfZmxhZ3MpO1xcbiBcXHRcXHRobGlzdF9udWxsc19hZGRfaGVhZF9yY3UoXFx1MDAyNmxfbmV3LVxcdTAwM2VoYXNoX25vZGUsIGhlYWQpO1xcbiBcXHRcXHRsX25ldyA9IE5VTEw7XFxuQEAgLTE0ODAsNyArMTU5Miw3IEBAIHN0YXRpYyBsb25nIF9faHRhYl9scnVfcGVyY3B1X21hcF91cGRhdGVfZWxlbShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXksXFxuIGVycl9sb2NrX2J1Y2tldDpcXG4gXFx0aWYgKGxfbmV3KSB7XFxuIFxcdFxcdGJwZl9tYXBfZGVjX2VsZW1fY291bnQoXFx1MDAyNmh0YWItXFx1MDAzZW1hcCk7XFxuLVxcdFxcdGJwZl9scnVfcHVzaF9mcmVlKFxcdTAwMjZodGFiLVxcdTAwM2VscnUsIFxcdTAwMjZsX25ldy1cXHUwMDNlbHJ1X25vZGUpO1xcbitcXHRcXHRicGZfbHJ1X3B1c2hfZnJlZShcXHUwMDI2aHRhYi1cXHUwMDNlbHJ1LCBodGFiX2VsZW1fbHJ1X25vZGUobF9uZXcpKTtcXG4gXFx0fVxcbiBcXHRyZXR1cm4gcmV0O1xcbiB9XFxuQEAgLTE1MjEsNyArMTYzMyw3IEBAIHN0YXRpYyBsb25nIGh0YWJfbWFwX2RlbGV0ZV9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSlcXG4gXFx0aWYgKHJldClcXG4gXFx0XFx0cmV0dXJuIHJldDtcXG4gXFxuLVxcdGwgPSBsb29rdXBfZWxlbV9yYXcoaGVhZCwgaGFzaCwga2V5LCBrZXlfc2l6ZSk7XFxuK1xcdGwgPSBsb29rdXBfZWxlbV9yYXcoaHRhYiwgaGVhZCwgaGFzaCwga2V5LCBrZXlfc2l6ZSk7XFxuIFxcdGlmIChsKVxcbiBcXHRcXHRobGlzdF9udWxsc19kZWxfcmN1KFxcdTAwMjZsLVxcdTAwM2VoYXNoX25vZGUpO1xcbiBcXHRlbHNlXFxuQEAgLTE1NTYsNyArMTY2OCw3IEBAIHN0YXRpYyBsb25nIGh0YWJfbHJ1X21hcF9kZWxldGVfZWxlbShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXkpXFxuIFxcdGlmIChyZXQpXFxuIFxcdFxcdHJldHVybiByZXQ7XFxuIFxcbi1cXHRsID0gbG9va3VwX2VsZW1fcmF3KGhlYWQsIGhhc2gsIGtleSwga2V5X3NpemUpO1xcbitcXHRsID0gbG9va3VwX2VsZW1fcmF3KGh0YWIsIGhlYWQsIGhhc2gsIGtleSwga2V5X3NpemUpO1xcbiBcXG4gXFx0aWYgKGwpXFxuIFxcdFxcdGhsaXN0X251bGxzX2RlbF9yY3UoXFx1MDAyNmwtXFx1MDAzZWhhc2hfbm9kZSk7XFxuQEAgLTE2MDIsNyArMTcxNCw3IEBAIHN0YXRpYyB2b2lkIGh0YWJfZnJlZV9tYWxsb2NlZF9pbnRlcm5hbF9zdHJ1Y3RzKHN0cnVjdCBicGZfaHRhYiAqaHRhYilcXG4gXFx0XFx0aGxpc3RfbnVsbHNfZm9yX2VhY2hfZW50cnkobCwgbiwgaGVhZCwgaGFzaF9ub2RlKSB7XFxuIFxcdFxcdFxcdC8qIFdlIG9ubHkgZnJlZSBpbnRlcm5hbCBzdHJ1Y3RzIG9uIHVyZWYgZHJvcHBpbmcgdG8gemVybyAqL1xcbiBcXHRcXHRcXHRicGZfbWFwX2ZyZWVfaW50ZXJuYWxfc3RydWN0cyhcXHUwMDI2aHRhYi1cXHUwMDNlbWFwLFxcbi1cXHRcXHRcXHRcXHRcXHRcXHQgICAgICBodGFiX2VsZW1fdmFsdWUobCwgaHRhYi1cXHUwMDNlbWFwLmtleV9zaXplKSk7XFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgICAgIGh0YWJfZWxlbV92YWx1ZShodGFiLCBsKSk7XFxuIFxcdFxcdH1cXG4gXFx0XFx0Y29uZF9yZXNjaGVkX3JjdSgpO1xcbiBcXHR9XFxuQEAgLTE2OTcsNyArMTgwOSw3IEBAIHN0YXRpYyBpbnQgX19odGFiX21hcF9sb29rdXBfYW5kX2RlbGV0ZV9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSxcXG4gXFx0aWYgKHJldClcXG4gXFx0XFx0cmV0dXJuIHJldDtcXG4gXFxuLVxcdGwgPSBsb29rdXBfZWxlbV9yYXcoaGVhZCwgaGFzaCwga2V5LCBrZXlfc2l6ZSk7XFxuK1xcdGwgPSBsb29rdXBfZWxlbV9yYXcoaHRhYiwgaGVhZCwgaGFzaCwga2V5LCBrZXlfc2l6ZSk7XFxuIFxcdGlmICghbCkge1xcbiBcXHRcXHRyZXQgPSAtRU5PRU5UO1xcbiBcXHRcXHRnb3RvIG91dF91bmxvY2s7XFxuQEAgLTE3MDgsMTQgKzE4MjAsMTQgQEAgc3RhdGljIGludCBfX2h0YWJfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2VsZW0oc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5LFxcbiBcXHRcXHR2b2lkIF9fcGVyY3B1ICpwcHRyO1xcbiBcXHRcXHRpbnQgb2ZmID0gMCwgY3B1O1xcbiBcXG4tXFx0XFx0cHB0ciA9IGh0YWJfZWxlbV9nZXRfcHRyKGwsIGtleV9zaXplKTtcXG4rXFx0XFx0cHB0ciA9IGh0YWJfZWxlbV9nZXRfcHRyKGh0YWIsIGwpO1xcbiBcXHRcXHRmb3JfZWFjaF9wb3NzaWJsZV9jcHUoY3B1KSB7XFxuIFxcdFxcdFxcdGNvcHlfbWFwX3ZhbHVlX2xvbmcoXFx1MDAyNmh0YWItXFx1MDAzZW1hcCwgdmFsdWUgKyBvZmYsIHBlcl9jcHVfcHRyKHBwdHIsIGNwdSkpO1xcbiBcXHRcXHRcXHRjaGVja19hbmRfaW5pdF9tYXBfdmFsdWUoXFx1MDAyNmh0YWItXFx1MDAzZW1hcCwgdmFsdWUgKyBvZmYpO1xcbiBcXHRcXHRcXHRvZmYgKz0gcm91bmR1cF92YWx1ZV9zaXplO1xcbiBcXHRcXHR9XFxuIFxcdH0gZWxzZSB7XFxuLVxcdFxcdHZvaWQgKnNyYyA9IGh0YWJfZWxlbV92YWx1ZShsLCBtYXAtXFx1MDAzZWtleV9zaXplKTtcXG4rXFx0XFx0dm9pZCAqc3JjID0gaHRhYl9lbGVtX3ZhbHVlKGh0YWIsIGwpO1xcbiBcXG4gXFx0XFx0aWYgKGZsYWdzIFxcdTAwMjYgQlBGX0ZfTE9DSylcXG4gXFx0XFx0XFx0Y29weV9tYXBfdmFsdWVfbG9ja2VkKG1hcCwgdmFsdWUsIHNyYywgdHJ1ZSk7XFxuQEAgLTE4OTgsMTMgKzIwMTAsMTMgQEAgX19odGFiX21hcF9sb29rdXBfYW5kX2RlbGV0ZV9iYXRjaChzdHJ1Y3QgYnBmX21hcCAqbWFwLFxcbiBcXHRcXHRnb3RvIG5leHRfYmF0Y2g7XFxuIFxcbiBcXHRobGlzdF9udWxsc19mb3JfZWFjaF9lbnRyeV9zYWZlKGwsIG4sIGhlYWQsIGhhc2hfbm9kZSkge1xcbi1cXHRcXHRtZW1jcHkoZHN0X2tleSwgbC1cXHUwMDNla2V5LCBrZXlfc2l6ZSk7XFxuK1xcdFxcdG1lbWNweShkc3Rfa2V5LCBodGFiX2VsZW1fa2V5KGh0YWIsIGwpLCBrZXlfc2l6ZSk7XFxuIFxcbiBcXHRcXHRpZiAoaXNfcGVyY3B1KSB7XFxuIFxcdFxcdFxcdGludCBvZmYgPSAwLCBjcHU7XFxuIFxcdFxcdFxcdHZvaWQgX19wZXJjcHUgKnBwdHI7XFxuIFxcbi1cXHRcXHRcXHRwcHRyID0gaHRhYl9lbGVtX2dldF9wdHIobCwgbWFwLVxcdTAwM2VrZXlfc2l6ZSk7XFxuK1xcdFxcdFxcdHBwdHIgPSBodGFiX2VsZW1fZ2V0X3B0cihodGFiLCBsKTtcXG4gXFx0XFx0XFx0aWYgKGVsZW1fbWFwX2ZsYWdzIFxcdTAwMjYgQlBGX0ZfQ1BVKSB7XFxuIFxcdFxcdFxcdFxcdGNwdSA9IGVsZW1fbWFwX2ZsYWdzIFxcdTAwM2VcXHUwMDNlIDMyO1xcbiBcXHRcXHRcXHRcXHRjb3B5X21hcF92YWx1ZShcXHUwMDI2aHRhYi1cXHUwMDNlbWFwLCBkc3RfdmFsLCBwZXJfY3B1X3B0cihwcHRyLCBjcHUpKTtcXG5AQCAtMTkxOCw3ICsyMDMwLDcgQEAgX19odGFiX21hcF9sb29rdXBfYW5kX2RlbGV0ZV9iYXRjaChzdHJ1Y3QgYnBmX21hcCAqbWFwLFxcbiBcXHRcXHRcXHRcXHR9XFxuIFxcdFxcdFxcdH1cXG4gXFx0XFx0fSBlbHNlIHtcXG4tXFx0XFx0XFx0dmFsdWUgPSBodGFiX2VsZW1fdmFsdWUobCwga2V5X3NpemUpO1xcbitcXHRcXHRcXHR2YWx1ZSA9IGh0YWJfZWxlbV92YWx1ZShodGFiLCBsKTtcXG4gXFx0XFx0XFx0aWYgKGlzX2ZkX2h0YWIoaHRhYikpIHtcXG4gXFx0XFx0XFx0XFx0c3RydWN0IGJwZl9tYXAgKippbm5lcl9tYXAgPSB2YWx1ZTtcXG4gXFxuQEAgLTIxODMsMTIgKzIyOTUsMTIgQEAgc3RhdGljIGludCBfX2JwZl9oYXNoX21hcF9zZXFfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgc3RydWN0IGh0YWJfZWxlbSAqZWxlbSlcXG4gXFx0XFx0Y3R4Lm1ldGEgPSBcXHUwMDI2bWV0YTtcXG4gXFx0XFx0Y3R4Lm1hcCA9IGluZm8tXFx1MDAzZW1hcDtcXG4gXFx0XFx0aWYgKGVsZW0pIHtcXG4tXFx0XFx0XFx0Y3R4LmtleSA9IGVsZW0tXFx1MDAzZWtleTtcXG4rXFx0XFx0XFx0Y3R4LmtleSA9IGh0YWJfZWxlbV9rZXkoaW5mby1cXHUwMDNlaHRhYiwgZWxlbSk7XFxuIFxcdFxcdFxcdGlmICghaW5mby1cXHUwMDNlcGVyY3B1X3ZhbHVlX2J1Zikge1xcbi1cXHRcXHRcXHRcXHRjdHgudmFsdWUgPSBodGFiX2VsZW1fdmFsdWUoZWxlbSwgbWFwLVxcdTAwM2VrZXlfc2l6ZSk7XFxuK1xcdFxcdFxcdFxcdGN0eC52YWx1ZSA9IGh0YWJfZWxlbV92YWx1ZShpbmZvLVxcdTAwM2VodGFiLCBlbGVtKTtcXG4gXFx0XFx0XFx0fSBlbHNlIHtcXG4gXFx0XFx0XFx0XFx0cm91bmR1cF92YWx1ZV9zaXplID0gcm91bmRfdXAobWFwLVxcdTAwM2V2YWx1ZV9zaXplLCA4KTtcXG4tXFx0XFx0XFx0XFx0cHB0ciA9IGh0YWJfZWxlbV9nZXRfcHRyKGVsZW0sIG1hcC1cXHUwMDNla2V5X3NpemUpO1xcbitcXHRcXHRcXHRcXHRwcHRyID0gaHRhYl9lbGVtX2dldF9wdHIoaW5mby1cXHUwMDNlaHRhYiwgZWxlbSk7XFxuIFxcdFxcdFxcdFxcdGZvcl9lYWNoX3Bvc3NpYmxlX2NwdShjcHUpIHtcXG4gXFx0XFx0XFx0XFx0XFx0Y29weV9tYXBfdmFsdWVfbG9uZyhtYXAsIGluZm8tXFx1MDAzZXBlcmNwdV92YWx1ZV9idWYgKyBvZmYsXFxuIFxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICBwZXJfY3B1X3B0cihwcHRyLCBjcHUpKTtcXG5AQCAtMjI5MywxMyArMjQwNSwxMyBAQCBzdGF0aWMgbG9uZyBicGZfZm9yX2VhY2hfaGFzaF9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIGJwZl9jYWxsYmFja190IGNhbGxiYWNrX1xcbiBcXHRcXHRyY3VfcmVhZF9sb2NrKCk7XFxuIFxcdFxcdGhlYWQgPSBcXHUwMDI2Yi1cXHUwMDNlaGVhZDtcXG4gXFx0XFx0aGxpc3RfbnVsbHNfZm9yX2VhY2hfZW50cnlfc2FmZShlbGVtLCBuLCBoZWFkLCBoYXNoX25vZGUpIHtcXG4tXFx0XFx0XFx0a2V5ID0gZWxlbS1cXHUwMDNla2V5O1xcbitcXHRcXHRcXHRrZXkgPSBodGFiX2VsZW1fa2V5KGh0YWIsIGVsZW0pO1xcbiBcXHRcXHRcXHRpZiAoaXNfcGVyY3B1KSB7XFxuIFxcdFxcdFxcdFxcdC8qIGN1cnJlbnQgY3B1IHZhbHVlIGZvciBwZXJjcHUgbWFwICovXFxuLVxcdFxcdFxcdFxcdHBwdHIgPSBodGFiX2VsZW1fZ2V0X3B0cihlbGVtLCBtYXAtXFx1MDAzZWtleV9zaXplKTtcXG4rXFx0XFx0XFx0XFx0cHB0ciA9IGh0YWJfZWxlbV9nZXRfcHRyKGh0YWIsIGVsZW0pO1xcbiBcXHRcXHRcXHRcXHR2YWwgPSB0aGlzX2NwdV9wdHIocHB0cik7XFxuIFxcdFxcdFxcdH0gZWxzZSB7XFxuLVxcdFxcdFxcdFxcdHZhbCA9IGh0YWJfZWxlbV92YWx1ZShlbGVtLCBtYXAtXFx1MDAzZWtleV9zaXplKTtcXG4rXFx0XFx0XFx0XFx0dmFsID0gaHRhYl9lbGVtX3ZhbHVlKGh0YWIsIGVsZW0pO1xcbiBcXHRcXHRcXHR9XFxuIFxcdFxcdFxcdG51bV9lbGVtcysrO1xcbiBcXHRcXHRcXHRyZXQgPSBjYWxsYmFja19mbigodTY0KShsb25nKW1hcCwgKHU2NCkobG9uZylrZXksXFxuQEAgLTI0MDMsMTAgKzI1MTUsMTEgQEAgY29uc3Qgc3RydWN0IGJwZl9tYXBfb3BzIGh0YWJfbHJ1X21hcF9vcHMgPSB7XFxuIC8qIENhbGxlZCBmcm9tIGVCUEYgcHJvZ3JhbSAqL1xcbiBzdGF0aWMgdm9pZCAqaHRhYl9wZXJjcHVfbWFwX2xvb2t1cF9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSlcXG4ge1xcbitcXHRzdHJ1Y3QgYnBmX2h0YWIgKmh0YWIgPSBjb250YWluZXJfb2YobWFwLCBzdHJ1Y3QgYnBmX2h0YWIsIG1hcCk7XFxuIFxcdHN0cnVjdCBodGFiX2VsZW0gKmwgPSBfX2h0YWJfbWFwX2xvb2t1cF9lbGVtKG1hcCwga2V5KTtcXG4gXFxuIFxcdGlmIChsKVxcbi1cXHRcXHRyZXR1cm4gdGhpc19jcHVfcHRyKGh0YWJfZWxlbV9nZXRfcHRyKGwsIG1hcC1cXHUwMDNla2V5X3NpemUpKTtcXG4rXFx0XFx0cmV0dXJuIHRoaXNfY3B1X3B0cihodGFiX2VsZW1fZ2V0X3B0cihodGFiLCBsKSk7XFxuIFxcdGVsc2VcXG4gXFx0XFx0cmV0dXJuIE5VTEw7XFxuIH1cXG5AQCAtMjQxNCw2ICsyNTI3LDcgQEAgc3RhdGljIHZvaWQgKmh0YWJfcGVyY3B1X21hcF9sb29rdXBfZWxlbShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXkpXFxuIC8qIGlubGluZSBicGZfbWFwX2xvb2t1cF9lbGVtKCkgY2FsbCBmb3IgcGVyLUNQVSBoYXNobWFwICovXFxuIHN0YXRpYyBpbnQgaHRhYl9wZXJjcHVfbWFwX2dlbl9sb29rdXAoc3RydWN0IGJwZl9tYXAgKm1hcCwgc3RydWN0IGJwZl9pbnNuICppbnNuX2J1ZilcXG4ge1xcbitcXHRzdHJ1Y3QgYnBmX2h0YWIgKmh0YWIgPSBjb250YWluZXJfb2YobWFwLCBzdHJ1Y3QgYnBmX2h0YWIsIG1hcCk7XFxuIFxcdHN0cnVjdCBicGZfaW5zbiAqaW5zbiA9IGluc25fYnVmO1xcbiBcXG4gXFx0aWYgKCFicGZfaml0X3N1cHBvcnRzX3BlcmNwdV9pbnNuKCkpXFxuQEAgLTI0MjQsNyArMjUzOCw3IEBAIHN0YXRpYyBpbnQgaHRhYl9wZXJjcHVfbWFwX2dlbl9sb29rdXAoc3RydWN0IGJwZl9tYXAgKm1hcCwgc3RydWN0IGJwZl9pbnNuICppbnNuXFxuIFxcdCppbnNuKysgPSBCUEZfRU1JVF9DQUxMKF9faHRhYl9tYXBfbG9va3VwX2VsZW0pO1xcbiBcXHQqaW5zbisrID0gQlBGX0pNUF9JTU0oQlBGX0pFUSwgQlBGX1JFR18wLCAwLCAzKTtcXG4gXFx0Kmluc24rKyA9IEJQRl9BTFU2NF9JTU0oQlBGX0FERCwgQlBGX1JFR18wLFxcbi1cXHRcXHRcXHRcXHRvZmZzZXRvZihzdHJ1Y3QgaHRhYl9lbGVtLCBrZXkpICsgcm91bmR1cChtYXAtXFx1MDAzZWtleV9zaXplLCA4KSk7XFxuK1xcdFxcdFxcdFxcdGh0YWItXFx1MDAzZWtleV9vZmZzZXQgKyByb3VuZHVwKG1hcC1cXHUwMDNla2V5X3NpemUsIDgpKTtcXG4gXFx0Kmluc24rKyA9IEJQRl9MRFhfTUVNKEJQRl9EVywgQlBGX1JFR18wLCBCUEZfUkVHXzAsIDApO1xcbiBcXHQqaW5zbisrID0gQlBGX01PVjY0X1BFUkNQVV9SRUcoQlBGX1JFR18wLCBCUEZfUkVHXzApO1xcbiBcXG5AQCAtMjQzMyw2ICsyNTQ3LDcgQEAgc3RhdGljIGludCBodGFiX3BlcmNwdV9tYXBfZ2VuX2xvb2t1cChzdHJ1Y3QgYnBmX21hcCAqbWFwLCBzdHJ1Y3QgYnBmX2luc24gKmluc25cXG4gXFxuIHN0YXRpYyB2b2lkICpodGFiX3BlcmNwdV9tYXBfbG9va3VwX3BlcmNwdV9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSwgdTMyIGNwdSlcXG4ge1xcbitcXHRzdHJ1Y3QgYnBmX2h0YWIgKmh0YWIgPSBjb250YWluZXJfb2YobWFwLCBzdHJ1Y3QgYnBmX2h0YWIsIG1hcCk7XFxuIFxcdHN0cnVjdCBodGFiX2VsZW0gKmw7XFxuIFxcbiBcXHRpZiAoY3B1IFxcdTAwM2U9IG5yX2NwdV9pZHMpXFxuQEAgLTI0NDAsMTggKzI1NTUsMTkgQEAgc3RhdGljIHZvaWQgKmh0YWJfcGVyY3B1X21hcF9sb29rdXBfcGVyY3B1X2VsZW0oc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5LFxcbiBcXG4gXFx0bCA9IF9faHRhYl9tYXBfbG9va3VwX2VsZW0obWFwLCBrZXkpO1xcbiBcXHRpZiAobClcXG4tXFx0XFx0cmV0dXJuIHBlcl9jcHVfcHRyKGh0YWJfZWxlbV9nZXRfcHRyKGwsIG1hcC1cXHUwMDNla2V5X3NpemUpLCBjcHUpO1xcbitcXHRcXHRyZXR1cm4gcGVyX2NwdV9wdHIoaHRhYl9lbGVtX2dldF9wdHIoaHRhYiwgbCksIGNwdSk7XFxuIFxcdGVsc2VcXG4gXFx0XFx0cmV0dXJuIE5VTEw7XFxuIH1cXG4gXFxuIHN0YXRpYyB2b2lkICpodGFiX2xydV9wZXJjcHVfbWFwX2xvb2t1cF9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSlcXG4ge1xcbitcXHRzdHJ1Y3QgYnBmX2h0YWIgKmh0YWIgPSBjb250YWluZXJfb2YobWFwLCBzdHJ1Y3QgYnBmX2h0YWIsIG1hcCk7XFxuIFxcdHN0cnVjdCBodGFiX2VsZW0gKmwgPSBfX2h0YWJfbWFwX2xvb2t1cF9lbGVtKG1hcCwga2V5KTtcXG4gXFxuIFxcdGlmIChsKSB7XFxuLVxcdFxcdGJwZl9scnVfbm9kZV9zZXRfcmVmKFxcdTAwMjZsLVxcdTAwM2VscnVfbm9kZSk7XFxuLVxcdFxcdHJldHVybiB0aGlzX2NwdV9wdHIoaHRhYl9lbGVtX2dldF9wdHIobCwgbWFwLVxcdTAwM2VrZXlfc2l6ZSkpO1xcbitcXHRcXHRicGZfbHJ1X25vZGVfc2V0X3JlZihodGFiX2VsZW1fbHJ1X25vZGUobCkpO1xcbitcXHRcXHRyZXR1cm4gdGhpc19jcHVfcHRyKGh0YWJfZWxlbV9nZXRfcHRyKGh0YWIsIGwpKTtcXG4gXFx0fVxcbiBcXG4gXFx0cmV0dXJuIE5VTEw7XFxuQEAgLTI0NTksNiArMjU3NSw3IEBAIHN0YXRpYyB2b2lkICpodGFiX2xydV9wZXJjcHVfbWFwX2xvb2t1cF9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSlcXG4gXFxuIHN0YXRpYyB2b2lkICpodGFiX2xydV9wZXJjcHVfbWFwX2xvb2t1cF9wZXJjcHVfZWxlbShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXksIHUzMiBjcHUpXFxuIHtcXG4rXFx0c3RydWN0IGJwZl9odGFiICpodGFiID0gY29udGFpbmVyX29mKG1hcCwgc3RydWN0IGJwZl9odGFiLCBtYXApO1xcbiBcXHRzdHJ1Y3QgaHRhYl9lbGVtICpsO1xcbiBcXG4gXFx0aWYgKGNwdSBcXHUwMDNlPSBucl9jcHVfaWRzKVxcbkBAIC0yNDY2LDggKzI1ODMsOCBAQCBzdGF0aWMgdm9pZCAqaHRhYl9scnVfcGVyY3B1X21hcF9sb29rdXBfcGVyY3B1X2VsZW0oc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa1xcbiBcXG4gXFx0bCA9IF9faHRhYl9tYXBfbG9va3VwX2VsZW0obWFwLCBrZXkpO1xcbiBcXHRpZiAobCkge1xcbi1cXHRcXHRicGZfbHJ1X25vZGVfc2V0X3JlZihcXHUwMDI2bC1cXHUwMDNlbHJ1X25vZGUpO1xcbi1cXHRcXHRyZXR1cm4gcGVyX2NwdV9wdHIoaHRhYl9lbGVtX2dldF9wdHIobCwgbWFwLVxcdTAwM2VrZXlfc2l6ZSksIGNwdSk7XFxuK1xcdFxcdGJwZl9scnVfbm9kZV9zZXRfcmVmKGh0YWJfZWxlbV9scnVfbm9kZShsKSk7XFxuK1xcdFxcdHJldHVybiBwZXJfY3B1X3B0cihodGFiX2VsZW1fZ2V0X3B0cihodGFiLCBsKSwgY3B1KTtcXG4gXFx0fVxcbiBcXG4gXFx0cmV0dXJuIE5VTEw7XFxuQEAgLTI0NzUsNiArMjU5Miw3IEBAIHN0YXRpYyB2b2lkICpodGFiX2xydV9wZXJjcHVfbWFwX2xvb2t1cF9wZXJjcHVfZWxlbShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprXFxuIFxcbiBpbnQgYnBmX3BlcmNwdV9oYXNoX2NvcHkoc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5LCB2b2lkICp2YWx1ZSwgdTY0IG1hcF9mbGFncylcXG4ge1xcbitcXHRzdHJ1Y3QgYnBmX2h0YWIgKmh0YWIgPSBjb250YWluZXJfb2YobWFwLCBzdHJ1Y3QgYnBmX2h0YWIsIG1hcCk7XFxuIFxcdHN0cnVjdCBodGFiX2VsZW0gKmw7XFxuIFxcdHZvaWQgX19wZXJjcHUgKnBwdHI7XFxuIFxcdGludCByZXQgPSAtRU5PRU5UO1xcbkBAIC0yNDk0LDcgKzI2MTIsNyBAQCBpbnQgYnBmX3BlcmNwdV9oYXNoX2NvcHkoc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5LCB2b2lkICp2YWx1ZSwgdTY0IG1hcF9mbFxcbiBcXHQvKiBXZSBkbyBub3QgbWFyayBMUlUgbWFwIGVsZW1lbnQgaGVyZSBpbiBvcmRlciB0byBub3QgbWVzcyB1cFxcbiBcXHQgKiBldmljdGlvbiBoZXVyaXN0aWNzIHdoZW4gdXNlciBzcGFjZSBkb2VzIGEgbWFwIHdhbGsuXFxuIFxcdCAqL1xcbi1cXHRwcHRyID0gaHRhYl9lbGVtX2dldF9wdHIobCwgbWFwLVxcdTAwM2VrZXlfc2l6ZSk7XFxuK1xcdHBwdHIgPSBodGFiX2VsZW1fZ2V0X3B0cihodGFiLCBsKTtcXG4gXFx0aWYgKG1hcF9mbGFncyBcXHUwMDI2IEJQRl9GX0NQVSkge1xcbiBcXHRcXHRjcHUgPSBtYXBfZmxhZ3MgXFx1MDAzZVxcdTAwM2UgMzI7XFxuIFxcdFxcdGNvcHlfbWFwX3ZhbHVlKG1hcCwgdmFsdWUsIHBlcl9jcHVfcHRyKHBwdHIsIGNwdSkpO1xcbkBAIC0yNTMyLDYgKzI2NTAsNyBAQCBpbnQgYnBmX3BlcmNwdV9oYXNoX3VwZGF0ZShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXksIHZvaWQgKnZhbHVlLFxcbiBzdGF0aWMgdm9pZCBodGFiX3BlcmNwdV9tYXBfc2VxX3Nob3dfZWxlbShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXksXFxuIFxcdFxcdFxcdFxcdFxcdCAgc3RydWN0IHNlcV9maWxlICptKVxcbiB7XFxuK1xcdHN0cnVjdCBicGZfaHRhYiAqaHRhYiA9IGNvbnRhaW5lcl9vZihtYXAsIHN0cnVjdCBicGZfaHRhYiwgbWFwKTtcXG4gXFx0c3RydWN0IGh0YWJfZWxlbSAqbDtcXG4gXFx0dm9pZCBfX3BlcmNwdSAqcHB0cjtcXG4gXFx0aW50IGNwdTtcXG5AQCAtMjU0Niw3ICsyNjY1LDcgQEAgc3RhdGljIHZvaWQgaHRhYl9wZXJjcHVfbWFwX3NlcV9zaG93X2VsZW0oc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5LFxcbiBcXG4gXFx0YnRmX3R5cGVfc2VxX3Nob3cobWFwLVxcdTAwM2VidGYsIG1hcC1cXHUwMDNlYnRmX2tleV90eXBlX2lkLCBrZXksIG0pO1xcbiBcXHRzZXFfcHV0cyhtLCBcXFwiOiB7XFxcXG5cXFwiKTtcXG4tXFx0cHB0ciA9IGh0YWJfZWxlbV9nZXRfcHRyKGwsIG1hcC1cXHUwMDNla2V5X3NpemUpO1xcbitcXHRwcHRyID0gaHRhYl9lbGVtX2dldF9wdHIoaHRhYiwgbCk7XFxuIFxcdGZvcl9lYWNoX3Bvc3NpYmxlX2NwdShjcHUpIHtcXG4gXFx0XFx0c2VxX3ByaW50ZihtLCBcXFwiXFxcXHRjcHUlZDogXFxcIiwgY3B1KTtcXG4gXFx0XFx0YnRmX3R5cGVfc2VxX3Nob3cobWFwLVxcdTAwM2VidGYsIG1hcC1cXHUwMDNlYnRmX3ZhbHVlX3R5cGVfaWQsXFxuQEAgLTI2MjAsNyArMjczOSw3IEBAIHN0YXRpYyB2b2lkIGZkX2h0YWJfbWFwX2ZyZWUoc3RydWN0IGJwZl9tYXAgKm1hcClcXG4gXFx0XFx0aGVhZCA9IHNlbGVjdF9idWNrZXQoaHRhYiwgaSk7XFxuIFxcbiBcXHRcXHRobGlzdF9udWxsc19mb3JfZWFjaF9lbnRyeV9zYWZlKGwsIG4sIGhlYWQsIGhhc2hfbm9kZSkge1xcbi1cXHRcXHRcXHR2b2lkICpwdHIgPSBmZF9odGFiX21hcF9nZXRfcHRyKG1hcCwgbCk7XFxuK1xcdFxcdFxcdHZvaWQgKnB0ciA9IGZkX2h0YWJfbWFwX2dldF9wdHIoaHRhYiwgbCk7XFxuIFxcbiBcXHRcXHRcXHRtYXAtXFx1MDAzZW9wcy1cXHUwMDNlbWFwX2ZkX3B1dF9wdHIobWFwLCBwdHIsIGZhbHNlKTtcXG4gXFx0XFx0fVxcbkBAIC0yNzA1LDYgKzI4MjQsNyBAQCBzdGF0aWMgdm9pZCAqaHRhYl9vZl9tYXBfbG9va3VwX2VsZW0oc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5KVxcbiBzdGF0aWMgaW50IGh0YWJfb2ZfbWFwX2dlbl9sb29rdXAoc3RydWN0IGJwZl9tYXAgKm1hcCxcXG4gXFx0XFx0XFx0XFx0ICBzdHJ1Y3QgYnBmX2luc24gKmluc25fYnVmKVxcbiB7XFxuK1xcdHN0cnVjdCBicGZfaHRhYiAqaHRhYiA9IGNvbnRhaW5lcl9vZihtYXAsIHN0cnVjdCBicGZfaHRhYiwgbWFwKTtcXG4gXFx0c3RydWN0IGJwZl9pbnNuICppbnNuID0gaW5zbl9idWY7XFxuIFxcdGNvbnN0IGludCByZXQgPSBCUEZfUkVHXzA7XFxuIFxcbkBAIC0yNzEzLDcgKzI4MzMsNyBAQCBzdGF0aWMgaW50IGh0YWJfb2ZfbWFwX2dlbl9sb29rdXAoc3RydWN0IGJwZl9tYXAgKm1hcCxcXG4gXFx0Kmluc24rKyA9IEJQRl9FTUlUX0NBTEwoX19odGFiX21hcF9sb29rdXBfZWxlbSk7XFxuIFxcdCppbnNuKysgPSBCUEZfSk1QX0lNTShCUEZfSkVRLCByZXQsIDAsIDIpO1xcbiBcXHQqaW5zbisrID0gQlBGX0FMVTY0X0lNTShCUEZfQURELCByZXQsXFxuLVxcdFxcdFxcdFxcdG9mZnNldG9mKHN0cnVjdCBodGFiX2VsZW0sIGtleSkgK1xcbitcXHRcXHRcXHRcXHRodGFiLVxcdTAwM2VrZXlfb2Zmc2V0ICtcXG4gXFx0XFx0XFx0XFx0cm91bmRfdXAobWFwLVxcdTAwM2VrZXlfc2l6ZSwgOCkpO1xcbiBcXHQqaW5zbisrID0gQlBGX0xEWF9NRU0oQlBGX0RXLCByZXQsIHJldCwgMCk7XFxuIFxcbkBAIC0zMTEyLDcgKzMyMzIsNyBAQCBzdGF0aWMgaW50IHJodGFiX21hcF9jaGVja19idGYoc3RydWN0IGJwZl9tYXAgKm1hcCwgY29uc3Qgc3RydWN0IGJ0ZiAqYnRmLFxcbiB7XFxuIFxcdHN0cnVjdCBicGZfcmh0YWIgKnJodGFiID0gY29udGFpbmVyX29mKG1hcCwgc3RydWN0IGJwZl9yaHRhYiwgbWFwKTtcXG4gXFxuLVxcdHJldHVybiBicGZfbWFfc2V0X2R0b3IobWFwLCBcXHUwMDI2cmh0YWItXFx1MDAzZW1hLCByaHRhYl9tZW1fZHRvcik7XFxuK1xcdHJldHVybiBicGZfbWFfc2V0X2R0b3IobWFwLCBcXHUwMDI2cmh0YWItXFx1MDAzZW1hLCByaHRhYl9tZW1fZHRvciwgb2Zmc2V0b2Yoc3RydWN0IHJodGFiX2VsZW0sIGRhdGEpKTtcXG4gfVxcbiBcXG4gc3RhdGljIHZvaWQgcmh0YWJfbWFwX2ZyZWVfaW50ZXJuYWxfc3RydWN0cyhzdHJ1Y3QgYnBmX21hcCAqbWFwKVxcbkBAIC0zNTMzLDMgKzM2NTMsMTYgQEAgY29uc3Qgc3RydWN0IGJwZl9tYXBfb3BzIHJodGFiX21hcF9vcHMgPSB7XFxuIFxcdC5tYXBfYnRmX2lkID0gXFx1MDAyNnJodGFiX21hcF9idGZfaWRzWzBdLFxcbiBcXHQuaXRlcl9zZXFfaW5mbyA9IFxcdTAwMjZyaGFzaF9pdGVyX3NlcV9pbmZvLFxcbiB9O1xcbitcXG4rc2l6ZV90IGJwZl9odGFiX21hcF9tZXRhX3NpemUodm9pZClcXG4re1xcbitcXHRyZXR1cm4gc2l6ZW9mKHN0cnVjdCBicGZfaHRhYik7XFxuK31cXG4rXFxuK3ZvaWQgYnBmX2h0YWJfbWFwX21ldGFfaW5pdChzdHJ1Y3QgYnBmX21hcCAqaW5uZXJfbWFwX21ldGEsIHN0cnVjdCBicGZfbWFwICppbm5lcl9tYXApXFxuK3tcXG4rXFx0c3RydWN0IGJwZl9odGFiICppbm5lcl9odGFiX21ldGEgPSBjb250YWluZXJfb2YoaW5uZXJfbWFwX21ldGEsIHN0cnVjdCBicGZfaHRhYiwgbWFwKTtcXG4rXFx0c3RydWN0IGJwZl9odGFiICppbm5lcl9odGFiID0gY29udGFpbmVyX29mKGlubmVyX21hcCwgc3RydWN0IGJwZl9odGFiLCBtYXApO1xcbitcXG4rXFx0aW5uZXJfaHRhYl9tZXRhLVxcdTAwM2VrZXlfb2Zmc2V0ID0gaW5uZXJfaHRhYi1cXHUwMDNla2V5X29mZnNldDtcXG4rfVxcbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL21hcF9pbl9tYXAuYyBiL2tlcm5lbC9icGYvbWFwX2luX21hcC5jXFxuaW5kZXggZDJjYmFiNGJkZjY0NGEuLmIyZGI1ZDBjOThiZWUyIDEwMDY0NFxcbi0tLSBhL2tlcm5lbC9icGYvbWFwX2luX21hcC5jXFxuKysrIGIva2VybmVsL2JwZi9tYXBfaW5fbWFwLmNcXG5AQCAtNyw2ICs3LDE1IEBAXFxuIFxcbiAjaW5jbHVkZSBcXFwibWFwX2luX21hcC5oXFxcIlxcbiBcXG4rc3RhdGljIGJvb2wgYnBmX21hcF90eXBlX2lzX2h0YWIoZW51bSBicGZfbWFwX3R5cGUgdHlwZSlcXG4re1xcbitcXHRyZXR1cm4gdHlwZSA9PSBCUEZfTUFQX1RZUEVfSEFTSCB8fFxcbitcXHQgICAgICAgdHlwZSA9PSBCUEZfTUFQX1RZUEVfUEVSQ1BVX0hBU0ggfHxcXG4rXFx0ICAgICAgIHR5cGUgPT0gQlBGX01BUF9UWVBFX0xSVV9IQVNIIHx8XFxuK1xcdCAgICAgICB0eXBlID09IEJQRl9NQVBfVFlQRV9MUlVfUEVSQ1BVX0hBU0ggfHxcXG4rXFx0ICAgICAgIHR5cGUgPT0gQlBGX01BUF9UWVBFX0hBU0hfT0ZfTUFQUztcXG4rfVxcbitcXG4gc3RydWN0IGJwZl9tYXAgKmJwZl9tYXBfbWV0YV9hbGxvYyhpbnQgaW5uZXJfbWFwX3VmZClcXG4ge1xcbiBcXHRzdHJ1Y3QgYnBmX21hcCAqaW5uZXJfbWFwLCAqaW5uZXJfbWFwX21ldGE7XFxuQEAgLTI5LDYgKzM4LDggQEAgc3RydWN0IGJwZl9tYXAgKmJwZl9tYXBfbWV0YV9hbGxvYyhpbnQgaW5uZXJfbWFwX3VmZClcXG4gXFx0LyogSW4gc29tZSBjYXNlcyB2ZXJpZmllciBuZWVkcyB0byBhY2Nlc3MgYmV5b25kIGp1c3QgYmFzZSBtYXAuICovXFxuIFxcdGlmIChpbm5lcl9tYXAtXFx1MDAzZW9wcyA9PSBcXHUwMDI2YXJyYXlfbWFwX29wcyB8fCBpbm5lcl9tYXAtXFx1MDAzZW9wcyA9PSBcXHUwMDI2cGVyY3B1X2FycmF5X21hcF9vcHMpXFxuIFxcdFxcdGlubmVyX21hcF9tZXRhX3NpemUgPSBzaXplb2Yoc3RydWN0IGJwZl9hcnJheSk7XFxuK1xcdGVsc2UgaWYgKGJwZl9tYXBfdHlwZV9pc19odGFiKGlubmVyX21hcC1cXHUwMDNlbWFwX3R5cGUpKVxcbitcXHRcXHRpbm5lcl9tYXBfbWV0YV9zaXplID0gYnBmX2h0YWJfbWFwX21ldGFfc2l6ZSgpO1xcbiBcXG4gXFx0aW5uZXJfbWFwX21ldGEgPSBremFsbG9jKGlubmVyX21hcF9tZXRhX3NpemUsIEdGUF9VU0VSKTtcXG4gXFx0aWYgKCFpbm5lcl9tYXBfbWV0YSlcXG5AQCAtNzAsNiArODEsOCBAQCBzdHJ1Y3QgYnBmX21hcCAqYnBmX21hcF9tZXRhX2FsbG9jKGludCBpbm5lcl9tYXBfdWZkKVxcbiBcXHRcXHRpbm5lcl9hcnJheV9tZXRhLVxcdTAwM2VpbmRleF9tYXNrID0gaW5uZXJfYXJyYXktXFx1MDAzZWluZGV4X21hc2s7XFxuIFxcdFxcdGlubmVyX2FycmF5X21ldGEtXFx1MDAzZWVsZW1fc2l6ZSA9IGlubmVyX2FycmF5LVxcdTAwM2VlbGVtX3NpemU7XFxuIFxcdFxcdGlubmVyX21hcF9tZXRhLVxcdTAwM2VieXBhc3Nfc3BlY192MSA9IGlubmVyX21hcC1cXHUwMDNlYnlwYXNzX3NwZWNfdjE7XFxuK1xcdH0gZWxzZSBpZiAoYnBmX21hcF90eXBlX2lzX2h0YWIoaW5uZXJfbWFwLVxcdTAwM2VtYXBfdHlwZSkpIHtcXG4rXFx0XFx0YnBmX2h0YWJfbWFwX21ldGFfaW5pdChpbm5lcl9tYXBfbWV0YSwgaW5uZXJfbWFwKTtcXG4gXFx0fVxcbiBcXHRyZXR1cm4gaW5uZXJfbWFwX21ldGE7XFxuIH1cXG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9tYXBfaW5fbWFwLmggYi9rZXJuZWwvYnBmL21hcF9pbl9tYXAuaFxcbmluZGV4IDdkNjE2MDIzNTRkZTgwLi4xZWRjMjA1NzcyZDhjZCAxMDA2NDRcXG4tLS0gYS9rZXJuZWwvYnBmL21hcF9pbl9tYXAuaFxcbisrKyBiL2tlcm5lbC9icGYvbWFwX2luX21hcC5oXFxuQEAgLTE1LDUgKzE1LDcgQEAgdm9pZCAqYnBmX21hcF9mZF9nZXRfcHRyKHN0cnVjdCBicGZfbWFwICptYXAsIHN0cnVjdCBmaWxlICptYXBfZmlsZSxcXG4gXFx0XFx0XFx0IGludCB1ZmQpO1xcbiB2b2lkIGJwZl9tYXBfZmRfcHV0X3B0cihzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICpwdHIsIGJvb2wgbmVlZF9kZWZlcik7XFxuIHUzMiBicGZfbWFwX2ZkX3N5c19sb29rdXBfZWxlbSh2b2lkICpwdHIpO1xcbitzaXplX3QgYnBmX2h0YWJfbWFwX21ldGFfc2l6ZSh2b2lkKTtcXG4rdm9pZCBicGZfaHRhYl9tYXBfbWV0YV9pbml0KHN0cnVjdCBicGZfbWFwICppbm5lcl9tYXBfbWV0YSwgc3RydWN0IGJwZl9tYXAgKmlubmVyX21hcCk7XFxuIFxcbiAjZW5kaWZcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL21hcF9wdHJfa2Vybi5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL21hcF9wdHJfa2Vybi5jXFxuaW5kZXggMzczYzhkMTdlYTU1N2QuLjZiZDRjYjY4YzIwYzFjIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9tYXBfcHRyX2tlcm4uY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9tYXBfcHRyX2tlcm4uY1xcbkBAIC0xMTQsNyArMTE0LDcgQEAgc3RhdGljIGlubGluZSBpbnQgY2hlY2tfaGFzaCh2b2lkKVxcbiBcXHRWRVJJRlkoY2hlY2tfZGVmYXVsdF9ub2lubGluZShcXHUwMDI2aGFzaC1cXHUwMDNlbWFwLCBtYXApKTtcXG4gXFxuIFxcdFZFUklGWShoYXNoLVxcdTAwM2VuX2J1Y2tldHMgPT0gTUFYX0VOVFJJRVMpO1xcbi1cXHRWRVJJRlkoaGFzaC1cXHUwMDNlZWxlbV9zaXplID09IDY0KTtcXG4rXFx0VkVSSUZZKGhhc2gtXFx1MDAzZWVsZW1fc2l6ZSA9PSAzMik7XFxuIFxcbiBcXHRWRVJJRlkoaGFzaC1cXHUwMDNlY291bnQuY291bnRlciA9PSAwKTtcXG4gXFx0VkVSSUZZKGJwZl9tYXBfc3VtX2VsZW1fY291bnQobWFwKSA9PSAwKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjNUMjI6Mzg6NDMuMzAzMDkzNTU0WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MzEwNTM3OTk1NDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlBGX1NZU0NBTExcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJodGFiX21hcF9hbGxvY1wiLFxuICAgIFwiaHRhYl9tYXBfdXBkYXRlX2VsZW1cIixcbiAgICBcImh0YWJfbHJ1X21hcF91cGRhdGVfZWxlbVwiLFxuICAgIFwiX19odGFiX2xydV9wZXJjcHVfbWFwX3VwZGF0ZV9lbGVtXCIsXG4gICAgXCJodGFiX21hcF9kZWxldGVfZWxlbVwiLFxuICAgIFwiaHRhYl9scnVfbWFwX2RlbGV0ZV9lbGVtXCIsXG4gICAgXCJfX2h0YWJfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2VsZW1cIixcbiAgICBcIl9faHRhYl9tYXBfbG9va3VwX2FuZF9kZWxldGVfYmF0Y2hcIixcbiAgICBcImJwZl9tYXBfbWV0YV9hbGxvY1wiLFxuICAgIFwiaHRhYl9tYXBfZ2VuX2xvb2t1cFwiLFxuICAgIFwiaHRhYl9scnVfbWFwX2dlbl9sb29rdXBcIixcbiAgICBcImh0YWJfcGVyY3B1X21hcF9nZW5fbG9va3VwXCIsXG4gICAgXCJodGFiX29mX21hcF9nZW5fbG9va3VwXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZnVuY3Rpb25hbGx5IG1vZGlmaWVzIHRoZSBtZW1vcnkgbGF5b3V0IGFuZCBvcGVyYXRpb25zIG9mIEJQRiBoYXNoIG1hcHMgKGluY2x1ZGluZyBMUlUgYW5kIHBlci1DUFUgdmFyaWFudHMpLiBJdCBpbnRyb2R1Y2VzIG5ldyBzdHJ1Y3R1cmVzIGFuZCBvZmZzZXRzIGZvciBoYXNoIG1hcCBlbGVtZW50cywgd2hpY2ggYWZmZWN0cyBhbGxvY2F0aW9uLCB1cGRhdGVzLCBkZWxldGlvbnMsIGFuZCBKSVQgbG9va3VwIGdlbmVyYXRpb24uIEZ1enppbmcgaXMgbmVlZGVkIHRvIGVuc3VyZSBtZW1vcnkgc2FmZXR5IGFuZCBjb3JyZWN0bmVzcyBvZiB0aGVzZSBjb3JlIEJQRiBtYXAgb3BlcmF0aW9ucy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdFxuICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LFxuICAgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAyNDNhMjcwNjQwZTBkYzkwMWU0YTc4YjU5OWIwNzQ4ZDU5YmY3YjYzXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBKdWwgMjMgMjI6Mzg6NDAgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL2hhc2h0YWIuYyBiL2tlcm5lbC9icGYvaGFzaHRhYi5jXG5pbmRleCA5ZjM5NGUxYWEyZTg1Yi4uYjhjMzBkNDAyOTU4NzkgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvYnBmL2hhc2h0YWIuY1xuKysrIGIva2VybmVsL2JwZi9oYXNodGFiLmNcbkBAIC0xMDIsNiArMTAyLDcgQEAgc3RydWN0IGJwZl9odGFiIHtcbiBcdGJvb2wgdXNlX3BlcmNwdV9jb3VudGVyO1xuIFx0dTMyIG5fYnVja2V0cztcdC8qIG51bWJlciBvZiBoYXNoIGJ1Y2tldHMgKi9cbiBcdHUzMiBlbGVtX3NpemU7XHQvKiBzaXplIG9mIGVhY2ggZWxlbWVudCBpbiBieXRlcyAqL1xuK1x0dTMyIGtleV9vZmZzZXQ7XHQvKiBvZmZzZXQgb2Yga2V5IGluIGJ5dGVzICovXG4gXHR1MzIgaGFzaHJuZDtcbiB9O1xuIFxuQEAgLTExNywxOCArMTE4LDQ2IEBAIHN0cnVjdCBodGFiX2VsZW0ge1xuIFx0XHRcdH07XG4gXHRcdH07XG4gXHR9O1xuK1x0dTMyIGhhc2g7IC8qIE9ubHkgd2hlbiBodGFiX2hhc19oYXNoKCkgKi9cbit9IF9fYWxpZ25lZCg4KTtcbitcbitzdHJ1Y3QgaHRhYl9lbGVtX2xydSB7XG4gXHR1bmlvbiB7XG4tXHRcdC8qIHBvaW50ZXIgdG8gcGVyLWNwdSBwb2ludGVyICovXG4tXHRcdHZvaWQgKnB0cl90b19wcHRyO1xuLVx0XHRzdHJ1Y3QgYnBmX2xydV9ub2RlIGxydV9ub2RlO1xuK1x0XHRzdHJ1Y3QgaGxpc3RfbnVsbHNfbm9kZSBoYXNoX25vZGU7XG4rXHRcdHN0cnVjdCB7XG4rXHRcdFx0dm9pZCAqcGFkZGluZztcbitcdFx0XHR1bmlvbiB7XG4rXHRcdFx0XHRzdHJ1Y3QgcGNwdV9mcmVlbGlzdF9ub2RlIGZub2RlO1xuK1x0XHRcdFx0c3RydWN0IGh0YWJfZWxlbV9scnUgKmJhdGNoX2ZsaW5rO1xuK1x0XHRcdH07XG4rXHRcdH07XG4gXHR9O1xuK1x0c3RydWN0IGJwZl9scnVfbm9kZSBscnVfbm9kZTtcbiBcdHUzMiBoYXNoO1xuLVx0Y2hhciBrZXlbXSBfX2FsaWduZWQoOCk7XG4tfTtcbit9IF9fYWxpZ25lZCg4KTtcbitcbisvKiBPbmx5IGZvciBub24tcHJlYWxsb2NhdGVkIFBDUFUgbWFwcy4gUHJlYWxsb2NhdGVkIFBDUFUgbWFwcyBkb24ndCBuZWVkXG4rICogcHRyX3RvX3BwdHIsIGFuZCB1c2UgaHRhYl9lbGVtLlxuKyAqL1xuK3N0cnVjdCBodGFiX2VsZW1fcGNwdSB7XG4rXHR1bmlvbiB7XG4rXHRcdHN0cnVjdCBobGlzdF9udWxsc19ub2RlIGhhc2hfbm9kZTtcbitcdFx0c3RydWN0IHtcbitcdFx0XHR2b2lkICpwYWRkaW5nO1xuK1x0XHRcdHVuaW9uIHtcbitcdFx0XHRcdHN0cnVjdCBwY3B1X2ZyZWVsaXN0X25vZGUgZm5vZGU7XG4rXHRcdFx0XHRzdHJ1Y3QgaHRhYl9lbGVtX3BjcHUgKmJhdGNoX2ZsaW5rO1xuK1x0XHRcdH07XG4rXHRcdH07XG4rXHR9O1xuK1x0dm9pZCAqcHRyX3RvX3BwdHI7XG4rXHR1MzIgaGFzaDsgLyogT25seSB3aGVuIGh0YWJfaGFzX2hhc2goKSAqL1xuK30gX19hbGlnbmVkKDgpO1xuIFxuIHN0cnVjdCBodGFiX2J0Zl9yZWNvcmQge1xuIFx0c3RydWN0IGJ0Zl9yZWNvcmQgKnJlY29yZDtcbiBcdHUzMiBrZXlfc2l6ZTtcbitcdHUzMiBrZXlfb2Zmc2V0O1xuIH07XG4gXG4gc3RhdGljIGlubGluZSBib29sIGh0YWJfaXNfcHJlYWxsb2MoY29uc3Qgc3RydWN0IGJwZl9odGFiICpodGFiKVxuQEAgLTEzNiw2ICsxNjUsMjEgQEAgc3RhdGljIGlubGluZSBib29sIGh0YWJfaXNfcHJlYWxsb2MoY29uc3Qgc3RydWN0IGJwZl9odGFiICpodGFiKVxuIFx0cmV0dXJuICEoaHRhYi1cdTAwM2VtYXAubWFwX2ZsYWdzIFx1MDAyNiBCUEZfRl9OT19QUkVBTExPQyk7XG4gfVxuIFxuK3N0YXRpYyBpbmxpbmUgc3RydWN0IGJwZl9scnVfbm9kZSAqaHRhYl9lbGVtX2xydV9ub2RlKHN0cnVjdCBodGFiX2VsZW0gKmwpXG4re1xuK1x0cmV0dXJuIFx1MDAyNigoc3RydWN0IGh0YWJfZWxlbV9scnUgKilsKS1cdTAwM2VscnVfbm9kZTtcbit9XG4rXG4rc3RhdGljIGlubGluZSB2b2lkICpodGFiX2VsZW1fZ2V0X3B0cl90b19wcHRyKHN0cnVjdCBodGFiX2VsZW0gKmwpXG4re1xuK1x0cmV0dXJuICgoc3RydWN0IGh0YWJfZWxlbV9wY3B1ICopbCktXHUwMDNlcHRyX3RvX3BwdHI7XG4rfVxuK1xuK3N0YXRpYyBpbmxpbmUgdm9pZCBodGFiX2VsZW1fc2V0X3B0cl90b19wcHRyKHN0cnVjdCBodGFiX2VsZW0gKmwsIHZvaWQgKnB0cilcbit7XG4rXHQoKHN0cnVjdCBodGFiX2VsZW1fcGNwdSAqKWwpLVx1MDAzZXB0cl90b19wcHRyID0gcHRyO1xuK31cbitcbiBzdGF0aWMgdm9pZCBodGFiX2luaXRfYnVja2V0cyhzdHJ1Y3QgYnBmX2h0YWIgKmh0YWIpXG4ge1xuIFx0dW5zaWduZWQgaW50IGk7XG5AQCAtMTgzLDI1ICsyMjcsMzAgQEAgc3RhdGljIGlubGluZSBib29sIGlzX2ZkX2h0YWIoY29uc3Qgc3RydWN0IGJwZl9odGFiICpodGFiKVxuIFx0cmV0dXJuIGh0YWItXHUwMDNlbWFwLm1hcF90eXBlID09IEJQRl9NQVBfVFlQRV9IQVNIX09GX01BUFM7XG4gfVxuIFxuLXN0YXRpYyBpbmxpbmUgdm9pZCAqaHRhYl9lbGVtX3ZhbHVlKHN0cnVjdCBodGFiX2VsZW0gKmwsIHUzMiBrZXlfc2l6ZSlcbitzdGF0aWMgaW5saW5lIHZvaWQgKmh0YWJfZWxlbV9rZXkoc3RydWN0IGJwZl9odGFiICpodGFiLCBzdHJ1Y3QgaHRhYl9lbGVtICpsKVxuK3tcbitcdHJldHVybiAodm9pZCAqKWwgKyBodGFiLVx1MDAzZWtleV9vZmZzZXQ7XG4rfVxuK1xuK3N0YXRpYyBpbmxpbmUgdm9pZCAqaHRhYl9lbGVtX3ZhbHVlKHN0cnVjdCBicGZfaHRhYiAqaHRhYiwgc3RydWN0IGh0YWJfZWxlbSAqbClcbiB7XG4tXHRyZXR1cm4gbC1cdTAwM2VrZXkgKyByb3VuZF91cChrZXlfc2l6ZSwgOCk7XG4rXHRyZXR1cm4gaHRhYl9lbGVtX2tleShodGFiLCBsKSArIHJvdW5kX3VwKGh0YWItXHUwMDNlbWFwLmtleV9zaXplLCA4KTtcbiB9XG4gXG4tc3RhdGljIGlubGluZSB2b2lkIGh0YWJfZWxlbV9zZXRfcHRyKHN0cnVjdCBodGFiX2VsZW0gKmwsIHUzMiBrZXlfc2l6ZSxcbitzdGF0aWMgaW5saW5lIHZvaWQgaHRhYl9lbGVtX3NldF9wdHIoc3RydWN0IGJwZl9odGFiICpodGFiLCBzdHJ1Y3QgaHRhYl9lbGVtICpsLFxuIFx0XHRcdFx0ICAgICB2b2lkIF9fcGVyY3B1ICpwcHRyKVxuIHtcbi1cdCoodm9pZCBfX3BlcmNwdSAqKilodGFiX2VsZW1fdmFsdWUobCwga2V5X3NpemUpID0gcHB0cjtcbitcdCoodm9pZCBfX3BlcmNwdSAqKilodGFiX2VsZW1fdmFsdWUoaHRhYiwgbCkgPSBwcHRyO1xuIH1cbiBcbi1zdGF0aWMgaW5saW5lIHZvaWQgX19wZXJjcHUgKmh0YWJfZWxlbV9nZXRfcHRyKHN0cnVjdCBodGFiX2VsZW0gKmwsIHUzMiBrZXlfc2l6ZSlcbitzdGF0aWMgaW5saW5lIHZvaWQgX19wZXJjcHUgKmh0YWJfZWxlbV9nZXRfcHRyKHN0cnVjdCBicGZfaHRhYiAqaHRhYiwgc3RydWN0IGh0YWJfZWxlbSAqbClcbiB7XG4tXHRyZXR1cm4gKih2b2lkIF9fcGVyY3B1ICoqKWh0YWJfZWxlbV92YWx1ZShsLCBrZXlfc2l6ZSk7XG4rXHRyZXR1cm4gKih2b2lkIF9fcGVyY3B1ICoqKWh0YWJfZWxlbV92YWx1ZShodGFiLCBsKTtcbiB9XG4gXG4tc3RhdGljIHZvaWQgKmZkX2h0YWJfbWFwX2dldF9wdHIoY29uc3Qgc3RydWN0IGJwZl9tYXAgKm1hcCwgc3RydWN0IGh0YWJfZWxlbSAqbClcbitzdGF0aWMgdm9pZCAqZmRfaHRhYl9tYXBfZ2V0X3B0cihzdHJ1Y3QgYnBmX2h0YWIgKmh0YWIsIHN0cnVjdCBodGFiX2VsZW0gKmwpXG4ge1xuLVx0cmV0dXJuICoodm9pZCAqKilodGFiX2VsZW1fdmFsdWUobCwgbWFwLVx1MDAzZWtleV9zaXplKTtcbitcdHJldHVybiAqKHZvaWQgKiopaHRhYl9lbGVtX3ZhbHVlKGh0YWIsIGwpO1xuIH1cbiBcbiBzdGF0aWMgc3RydWN0IGh0YWJfZWxlbSAqZ2V0X2h0YWJfZWxlbShzdHJ1Y3QgYnBmX2h0YWIgKmh0YWIsIGludCBpKVxuQEAgLTIwOSw2ICsyNTgsMzMgQEAgc3RhdGljIHN0cnVjdCBodGFiX2VsZW0gKmdldF9odGFiX2VsZW0oc3RydWN0IGJwZl9odGFiICpodGFiLCBpbnQgaSlcbiBcdHJldHVybiAoc3RydWN0IGh0YWJfZWxlbSAqKSAoaHRhYi1cdTAwM2VlbGVtcyArIGkgKiAodTY0KWh0YWItXHUwMDNlZWxlbV9zaXplKTtcbiB9XG4gXG4rc3RhdGljIGlubGluZSBib29sIGh0YWJfaGFzX2hhc2goY29uc3Qgc3RydWN0IGJwZl9odGFiICpodGFiKVxuK3tcbitcdHJldHVybiBodGFiX2lzX2xydShodGFiKSB8fCBodGFiLVx1MDAzZW1hcC5rZXlfc2l6ZSBcdTAwM2UgODtcbit9XG4rXG4rc3RhdGljIGlubGluZSB1MzIgaHRhYl9lbGVtX2hhc2goc3RydWN0IGJwZl9odGFiICpodGFiLCBzdHJ1Y3QgaHRhYl9lbGVtICpsKVxuK3tcbitcdGlmIChodGFiX2lzX2xydShodGFiKSlcbitcdFx0cmV0dXJuICgoc3RydWN0IGh0YWJfZWxlbV9scnUgKilsKS1cdTAwM2VoYXNoO1xuK1x0ZWxzZSBpZiAoaHRhYl9pc19wZXJjcHUoaHRhYikgXHUwMDI2XHUwMDI2ICFodGFiX2lzX3ByZWFsbG9jKGh0YWIpKVxuK1x0XHRyZXR1cm4gKChzdHJ1Y3QgaHRhYl9lbGVtX3BjcHUgKilsKS1cdTAwM2VoYXNoO1xuK1x0ZWxzZVxuK1x0XHRyZXR1cm4gbC1cdTAwM2VoYXNoO1xuK31cbitcbitzdGF0aWMgaW5saW5lIHZvaWQgaHRhYl9lbGVtX3NldF9oYXNoKHN0cnVjdCBicGZfaHRhYiAqaHRhYiwgc3RydWN0IGh0YWJfZWxlbSAqbCwgdTMyIGhhc2gpXG4re1xuK1x0aWYgKCFodGFiX2hhc19oYXNoKGh0YWIpKVxuK1x0XHRyZXR1cm47XG4rXHRpZiAoaHRhYl9pc19scnUoaHRhYikpXG4rXHRcdCgoc3RydWN0IGh0YWJfZWxlbV9scnUgKilsKS1cdTAwM2VoYXNoID0gaGFzaDtcbitcdGVsc2UgaWYgKGh0YWJfaXNfcGVyY3B1KGh0YWIpIFx1MDAyNlx1MDAyNiAhaHRhYl9pc19wcmVhbGxvYyhodGFiKSlcbitcdFx0KChzdHJ1Y3QgaHRhYl9lbGVtX3BjcHUgKilsKS1cdTAwM2VoYXNoID0gaGFzaDtcbitcdGVsc2VcbitcdFx0bC1cdTAwM2VoYXNoID0gaGFzaDtcbit9XG4rXG4gLyogQm90aCBwZXJjcHUgYW5kIGZkIGh0YWIgc3VwcG9ydCBpbi1wbGFjZSB1cGRhdGUsIHNvIG5vIG5lZWQgZm9yXG4gICogZXh0cmEgZWxlbS4gTFJVIGl0c2VsZiBjYW4gcmVtb3ZlIHRoZSBsZWFzdCB1c2VkIGVsZW1lbnQsIHNvXG4gICogdGhlcmUgaXMgbm8gbmVlZCBmb3IgYW4gZXh0cmEgZWxlbSBkdXJpbmcgbWFwX3VwZGF0ZS5cbkBAIC0yMzEsNyArMzA3LDcgQEAgc3RhdGljIHZvaWQgaHRhYl9mcmVlX3ByZWFsbG9jZWRfaW50ZXJuYWxfc3RydWN0cyhzdHJ1Y3QgYnBmX2h0YWIgKmh0YWIpXG4gXG4gXHRcdGVsZW0gPSBnZXRfaHRhYl9lbGVtKGh0YWIsIGkpO1xuIFx0XHRicGZfbWFwX2ZyZWVfaW50ZXJuYWxfc3RydWN0cyhcdTAwMjZodGFiLVx1MDAzZW1hcCxcbi1cdFx0XHRcdFx0ICAgICAgaHRhYl9lbGVtX3ZhbHVlKGVsZW0sIGh0YWItXHUwMDNlbWFwLmtleV9zaXplKSk7XG4rXHRcdFx0XHRcdCAgICAgIGh0YWJfZWxlbV92YWx1ZShodGFiLCBlbGVtKSk7XG4gXHRcdGNvbmRfcmVzY2hlZCgpO1xuIFx0fVxuIH1cbkBAIC0yNTQsNyArMzMwLDcgQEAgc3RhdGljIHZvaWQgaHRhYl9mcmVlX3ByZWFsbG9jZWRfZmllbGRzKHN0cnVjdCBicGZfaHRhYiAqaHRhYilcbiBcbiBcdFx0ZWxlbSA9IGdldF9odGFiX2VsZW0oaHRhYiwgaSk7XG4gXHRcdGlmIChodGFiX2lzX3BlcmNwdShodGFiKSkge1xuLVx0XHRcdHZvaWQgX19wZXJjcHUgKnBwdHIgPSBodGFiX2VsZW1fZ2V0X3B0cihlbGVtLCBodGFiLVx1MDAzZW1hcC5rZXlfc2l6ZSk7XG4rXHRcdFx0dm9pZCBfX3BlcmNwdSAqcHB0ciA9IGh0YWJfZWxlbV9nZXRfcHRyKGh0YWIsIGVsZW0pO1xuIFx0XHRcdGludCBjcHU7XG4gXG4gXHRcdFx0Zm9yX2VhY2hfcG9zc2libGVfY3B1KGNwdSkge1xuQEAgLTI2Myw3ICszMzksNyBAQCBzdGF0aWMgdm9pZCBodGFiX2ZyZWVfcHJlYWxsb2NlZF9maWVsZHMoc3RydWN0IGJwZl9odGFiICpodGFiKVxuIFx0XHRcdH1cbiBcdFx0fSBlbHNlIHtcbiBcdFx0XHRicGZfb2JqX2ZyZWVfZmllbGRzKGh0YWItXHUwMDNlbWFwLnJlY29yZCxcbi1cdFx0XHRcdFx0ICAgIGh0YWJfZWxlbV92YWx1ZShlbGVtLCBodGFiLVx1MDAzZW1hcC5rZXlfc2l6ZSkpO1xuK1x0XHRcdFx0XHQgICAgaHRhYl9lbGVtX3ZhbHVlKGh0YWIsIGVsZW0pKTtcbiBcdFx0XHRjb25kX3Jlc2NoZWQoKTtcbiBcdFx0fVxuIFx0XHRjb25kX3Jlc2NoZWQoKTtcbkBAIC0yODAsOCArMzU2LDcgQEAgc3RhdGljIHZvaWQgaHRhYl9mcmVlX2VsZW1zKHN0cnVjdCBicGZfaHRhYiAqaHRhYilcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGh0YWItXHUwMDNlbWFwLm1heF9lbnRyaWVzOyBpKyspIHtcbiBcdFx0dm9pZCBfX3BlcmNwdSAqcHB0cjtcbiBcbi1cdFx0cHB0ciA9IGh0YWJfZWxlbV9nZXRfcHRyKGdldF9odGFiX2VsZW0oaHRhYiwgaSksXG4tXHRcdFx0XHRcdCBodGFiLVx1MDAzZW1hcC5rZXlfc2l6ZSk7XG4rXHRcdHBwdHIgPSBodGFiX2VsZW1fZ2V0X3B0cihodGFiLCBnZXRfaHRhYl9lbGVtKGh0YWIsIGkpKTtcbiBcdFx0ZnJlZV9wZXJjcHUocHB0cik7XG4gXHRcdGNvbmRfcmVzY2hlZCgpO1xuIFx0fVxuQEAgLTMwOCw4ICszODMsOCBAQCBzdGF0aWMgc3RydWN0IGh0YWJfZWxlbSAqcHJlYWxsb2NfbHJ1X3BvcChzdHJ1Y3QgYnBmX2h0YWIgKmh0YWIsIHZvaWQgKmtleSxcbiBcbiBcdGlmIChub2RlKSB7XG4gXHRcdGJwZl9tYXBfaW5jX2VsZW1fY291bnQoXHUwMDI2aHRhYi1cdTAwM2VtYXApO1xuLVx0XHRsID0gY29udGFpbmVyX29mKG5vZGUsIHN0cnVjdCBodGFiX2VsZW0sIGxydV9ub2RlKTtcbi1cdFx0bWVtY3B5KGwtXHUwMDNla2V5LCBrZXksIGh0YWItXHUwMDNlbWFwLmtleV9zaXplKTtcbitcdFx0bCA9IChzdHJ1Y3QgaHRhYl9lbGVtICopY29udGFpbmVyX29mKG5vZGUsIHN0cnVjdCBodGFiX2VsZW1fbHJ1LCBscnVfbm9kZSk7XG4rXHRcdG1lbWNweShodGFiX2VsZW1fa2V5KGh0YWIsIGwpLCBrZXksIGh0YWItXHUwMDNlbWFwLmtleV9zaXplKTtcbiBcdFx0cmV0dXJuIGw7XG4gXHR9XG4gXG5AQCAtMzQwLDggKzQxNSw3IEBAIHN0YXRpYyBpbnQgcHJlYWxsb2NfaW5pdChzdHJ1Y3QgYnBmX2h0YWIgKmh0YWIpXG4gXHRcdFx0XHRcdCAgICBHRlBfVVNFUiB8IF9fR0ZQX05PV0FSTik7XG4gXHRcdGlmICghcHB0cilcbiBcdFx0XHRnb3RvIGZyZWVfZWxlbXM7XG4tXHRcdGh0YWJfZWxlbV9zZXRfcHRyKGdldF9odGFiX2VsZW0oaHRhYiwgaSksIGh0YWItXHUwMDNlbWFwLmtleV9zaXplLFxuLVx0XHRcdFx0ICBwcHRyKTtcbitcdFx0aHRhYl9lbGVtX3NldF9wdHIoaHRhYiwgZ2V0X2h0YWJfZWxlbShodGFiLCBpKSwgcHB0cik7XG4gXHRcdGNvbmRfcmVzY2hlZCgpO1xuIFx0fVxuIFxuQEAgLTM0OSw4ICs0MjMsOCBAQCBzdGF0aWMgaW50IHByZWFsbG9jX2luaXQoc3RydWN0IGJwZl9odGFiICpodGFiKVxuIFx0aWYgKGh0YWJfaXNfbHJ1KGh0YWIpKVxuIFx0XHRlcnIgPSBicGZfbHJ1X2luaXQoXHUwMDI2aHRhYi1cdTAwM2VscnUsXG4gXHRcdFx0XHQgICBodGFiLVx1MDAzZW1hcC5tYXBfZmxhZ3MgXHUwMDI2IEJQRl9GX05PX0NPTU1PTl9MUlUsXG4tXHRcdFx0XHQgICBvZmZzZXRvZihzdHJ1Y3QgaHRhYl9lbGVtLCBoYXNoKSAtXG4tXHRcdFx0XHQgICBvZmZzZXRvZihzdHJ1Y3QgaHRhYl9lbGVtLCBscnVfbm9kZSksXG4rXHRcdFx0XHQgICBvZmZzZXRvZihzdHJ1Y3QgaHRhYl9lbGVtX2xydSwgaGFzaCkgLVxuK1x0XHRcdFx0ICAgb2Zmc2V0b2Yoc3RydWN0IGh0YWJfZWxlbV9scnUsIGxydV9ub2RlKSxcbiBcdFx0XHRcdCAgIGh0YWJfbHJ1X21hcF9kZWxldGVfbm9kZSxcbiBcdFx0XHRcdCAgIGh0YWIpO1xuIFx0ZWxzZVxuQEAgLTM2MSw3ICs0MzUsNyBAQCBzdGF0aWMgaW50IHByZWFsbG9jX2luaXQoc3RydWN0IGJwZl9odGFiICpodGFiKVxuIFxuIFx0aWYgKGh0YWJfaXNfbHJ1KGh0YWIpKVxuIFx0XHRicGZfbHJ1X3BvcHVsYXRlKFx1MDAyNmh0YWItXHUwMDNlbHJ1LCBodGFiLVx1MDAzZWVsZW1zLFxuLVx0XHRcdFx0IG9mZnNldG9mKHN0cnVjdCBodGFiX2VsZW0sIGxydV9ub2RlKSxcbitcdFx0XHRcdCBvZmZzZXRvZihzdHJ1Y3QgaHRhYl9lbGVtX2xydSwgbHJ1X25vZGUpLFxuIFx0XHRcdFx0IGh0YWItXHUwMDNlZWxlbV9zaXplLCBudW1fZW50cmllcyk7XG4gXHRlbHNlXG4gXHRcdHBjcHVfZnJlZWxpc3RfcG9wdWxhdGUoXHUwMDI2aHRhYi1cdTAwM2VmcmVlbGlzdCxcbkBAIC00MjgsNiArNTAyLDI1IEBAIHN0YXRpYyBpbnQgaHRhYl9tYXBfYWxsb2NfY2hlY2sodW5pb24gYnBmX2F0dHIgKmF0dHIpXG4gXHRCVUlMRF9CVUdfT04ob2Zmc2V0b2Yoc3RydWN0IGh0YWJfZWxlbSwgZm5vZGUubmV4dCkgIT1cbiBcdFx0ICAgICBvZmZzZXRvZihzdHJ1Y3QgaHRhYl9lbGVtLCBoYXNoX25vZGUucHByZXYpKTtcbiBcbitcdC8qIGh0YWJfZWxlbSBwb2ludGVycyBhcmUgdXNlZCBhcyBiYXNlIHBvaW50ZXJzIGZvciBodGFiX2VsZW1fbHJ1IGFuZFxuK1x0ICogaHRhYl9lbGVtX3BjcHUuIFRoZXNlIHN0cnVjdHVyZXMgbXVzdCBzaGFyZSBhIGNvbW1vbiBpbml0aWFsIHNlcXVlbmNlXG4rXHQgKiB0byBlbnN1cmUgcG9pbnRlciBjYXN0aW5nIGJldHdlZW4gdGhlbSBpcyBzYWZlLlxuK1x0ICovXG4rXHRCVUlMRF9CVUdfT04ob2Zmc2V0b2Yoc3RydWN0IGh0YWJfZWxlbSwgaGFzaF9ub2RlKSAhPVxuK1x0XHQgICAgIG9mZnNldG9mKHN0cnVjdCBodGFiX2VsZW1fbHJ1LCBoYXNoX25vZGUpKTtcbitcdEJVSUxEX0JVR19PTihvZmZzZXRvZihzdHJ1Y3QgaHRhYl9lbGVtLCBoYXNoX25vZGUpICE9XG4rXHRcdCAgICAgb2Zmc2V0b2Yoc3RydWN0IGh0YWJfZWxlbV9wY3B1LCBoYXNoX25vZGUpKTtcbitcbitcdEJVSUxEX0JVR19PTihvZmZzZXRvZihzdHJ1Y3QgaHRhYl9lbGVtLCBwYWRkaW5nKSAhPVxuK1x0XHQgICAgIG9mZnNldG9mKHN0cnVjdCBodGFiX2VsZW1fbHJ1LCBwYWRkaW5nKSk7XG4rXHRCVUlMRF9CVUdfT04ob2Zmc2V0b2Yoc3RydWN0IGh0YWJfZWxlbSwgcGFkZGluZykgIT1cbitcdFx0ICAgICBvZmZzZXRvZihzdHJ1Y3QgaHRhYl9lbGVtX3BjcHUsIHBhZGRpbmcpKTtcbitcbitcdEJVSUxEX0JVR19PTihvZmZzZXRvZihzdHJ1Y3QgaHRhYl9lbGVtLCBmbm9kZSkgIT1cbitcdFx0ICAgICBvZmZzZXRvZihzdHJ1Y3QgaHRhYl9lbGVtX2xydSwgZm5vZGUpKTtcbitcdEJVSUxEX0JVR19PTihvZmZzZXRvZihzdHJ1Y3QgaHRhYl9lbGVtLCBmbm9kZSkgIT1cbitcdFx0ICAgICBvZmZzZXRvZihzdHJ1Y3QgaHRhYl9lbGVtX3BjcHUsIGZub2RlKSk7XG4rXG4gXHRpZiAoemVyb19zZWVkIFx1MDAyNlx1MDAyNiAhY2FwYWJsZShDQVBfU1lTX0FETUlOKSlcbiBcdFx0LyogR3VhcmQgYWdhaW5zdCBsb2NhbCBEb1MsIGFuZCBkaXNjb3VyYWdlIHByb2R1Y3Rpb24gdXNlLiAqL1xuIFx0XHRyZXR1cm4gLUVQRVJNO1xuQEAgLTQ3Niw3ICs1NjksNyBAQCBzdGF0aWMgdm9pZCBodGFiX21lbV9kdG9yKHZvaWQgKm9iaiwgdm9pZCAqY3R4KVxuIFx0aWYgKElTX0VSUl9PUl9OVUxMKGhyZWMtXHUwMDNlcmVjb3JkKSlcbiBcdFx0cmV0dXJuO1xuIFxuLVx0bWFwX3ZhbHVlID0gaHRhYl9lbGVtX3ZhbHVlKGVsZW0sIGhyZWMtXHUwMDNla2V5X3NpemUpO1xuK1x0bWFwX3ZhbHVlID0gKHZvaWQgKillbGVtICsgaHJlYy1cdTAwM2VrZXlfb2Zmc2V0ICsgcm91bmRfdXAoaHJlYy1cdTAwM2VrZXlfc2l6ZSwgOCk7XG4gXHRicGZfb2JqX2ZyZWVfZmllbGRzKGhyZWMtXHUwMDNlcmVjb3JkLCBtYXBfdmFsdWUpO1xuIH1cbiBcbkBAIC01MDIsNyArNTk1LDcgQEAgc3RhdGljIHZvaWQgaHRhYl9kdG9yX2N0eF9mcmVlKHZvaWQgKmN0eClcbiB9XG4gXG4gc3RhdGljIGludCBicGZfbWFfc2V0X2R0b3Ioc3RydWN0IGJwZl9tYXAgKm1hcCwgc3RydWN0IGJwZl9tZW1fYWxsb2MgKm1hLFxuLVx0XHRcdCAgIHZvaWQgKCpkdG9yKSh2b2lkICosIHZvaWQgKikpXG4rXHRcdFx0ICAgdm9pZCAoKmR0b3IpKHZvaWQgKiwgdm9pZCAqKSwgdTMyIGtleV9vZmZzZXQpXG4ge1xuIFx0c3RydWN0IGh0YWJfYnRmX3JlY29yZCAqaHJlYztcbiBcdGludCBlcnI7XG5AQCAtNTE1LDYgKzYwOCw3IEBAIHN0YXRpYyBpbnQgYnBmX21hX3NldF9kdG9yKHN0cnVjdCBicGZfbWFwICptYXAsIHN0cnVjdCBicGZfbWVtX2FsbG9jICptYSxcbiBcdGlmICghaHJlYylcbiBcdFx0cmV0dXJuIC1FTk9NRU07XG4gXHRocmVjLVx1MDAzZWtleV9zaXplID0gbWFwLVx1MDAzZWtleV9zaXplO1xuK1x0aHJlYy1cdTAwM2VrZXlfb2Zmc2V0ID0ga2V5X29mZnNldDtcbiBcdGhyZWMtXHUwMDNlcmVjb3JkID0gYnRmX3JlY29yZF9kdXAobWFwLVx1MDAzZXJlY29yZCk7XG4gXHRpZiAoSVNfRVJSKGhyZWMtXHUwMDNlcmVjb3JkKSkge1xuIFx0XHRlcnIgPSBQVFJfRVJSKGhyZWMtXHUwMDNlcmVjb3JkKTtcbkBAIC01MzcsOSArNjMxLDkgQEAgc3RhdGljIGludCBodGFiX21hcF9jaGVja19idGYoc3RydWN0IGJwZl9tYXAgKm1hcCwgY29uc3Qgc3RydWN0IGJ0ZiAqYnRmLFxuIFx0ICogcG9wdWxhdGVkIGluIGh0YWJfbWFwX2FsbG9jKCksIHNvIGl0IHdpbGwgYWx3YXlzIGFwcGVhciBhcyBOVUxMLlxuIFx0ICovXG4gXHRpZiAoaHRhYl9pc19wZXJjcHUoaHRhYikpXG4tXHRcdHJldHVybiBicGZfbWFfc2V0X2R0b3IobWFwLCBcdTAwMjZodGFiLVx1MDAzZXBjcHVfbWEsIGh0YWJfcGNwdV9tZW1fZHRvcik7XG4rXHRcdHJldHVybiBicGZfbWFfc2V0X2R0b3IobWFwLCBcdTAwMjZodGFiLVx1MDAzZXBjcHVfbWEsIGh0YWJfcGNwdV9tZW1fZHRvciwgaHRhYi1cdTAwM2VrZXlfb2Zmc2V0KTtcbiBcdGVsc2Vcbi1cdFx0cmV0dXJuIGJwZl9tYV9zZXRfZHRvcihtYXAsIFx1MDAyNmh0YWItXHUwMDNlbWEsIGh0YWJfbWVtX2R0b3IpO1xuK1x0XHRyZXR1cm4gYnBmX21hX3NldF9kdG9yKG1hcCwgXHUwMDI2aHRhYi1cdTAwM2VtYSwgaHRhYl9tZW1fZHRvciwgaHRhYi1cdTAwM2VrZXlfb2Zmc2V0KTtcbiB9XG4gXG4gc3RhdGljIHN0cnVjdCBicGZfbWFwICpodGFiX21hcF9hbGxvYyh1bmlvbiBicGZfYXR0ciAqYXR0cilcbkBAIC01ODMsOCArNjc3LDE4IEBAIHN0YXRpYyBzdHJ1Y3QgYnBmX21hcCAqaHRhYl9tYXBfYWxsb2ModW5pb24gYnBmX2F0dHIgKmF0dHIpXG4gXG4gXHRodGFiLVx1MDAzZW5fYnVja2V0cyA9IHJvdW5kdXBfcG93X29mX3R3byhodGFiLVx1MDAzZW1hcC5tYXhfZW50cmllcyk7XG4gXG4tXHRodGFiLVx1MDAzZWVsZW1fc2l6ZSA9IHNpemVvZihzdHJ1Y3QgaHRhYl9lbGVtKSArXG4tXHRcdFx0ICByb3VuZF91cChodGFiLVx1MDAzZW1hcC5rZXlfc2l6ZSwgOCk7XG4rXHRpZiAoaHRhYl9pc19scnUoaHRhYikpXG4rXHRcdGh0YWItXHUwMDNla2V5X29mZnNldCA9IHNpemVvZihzdHJ1Y3QgaHRhYl9lbGVtX2xydSk7XG4rXHRlbHNlIGlmIChwZXJjcHUgXHUwMDI2XHUwMDI2ICFwcmVhbGxvYylcbitcdFx0aHRhYi1cdTAwM2VrZXlfb2Zmc2V0ID0gcm91bmRfdXAoaHRhYl9oYXNfaGFzaChodGFiKSA/XG4rXHRcdFx0XHRcdCAgICBzaXplb2Yoc3RydWN0IGh0YWJfZWxlbV9wY3B1KSA6XG4rXHRcdFx0XHRcdCAgICBvZmZzZXRvZihzdHJ1Y3QgaHRhYl9lbGVtX3BjcHUsIGhhc2gpLCA4KTtcbitcdGVsc2VcbitcdFx0aHRhYi1cdTAwM2VrZXlfb2Zmc2V0ID0gcm91bmRfdXAoaHRhYl9oYXNfaGFzaChodGFiKSA/XG4rXHRcdFx0XHRcdCAgICBzaXplb2Yoc3RydWN0IGh0YWJfZWxlbSkgOlxuK1x0XHRcdFx0XHQgICAgb2Zmc2V0b2Yoc3RydWN0IGh0YWJfZWxlbSwgaGFzaCksIDgpO1xuK1xuK1x0aHRhYi1cdTAwM2VlbGVtX3NpemUgPSBodGFiLVx1MDAzZWtleV9vZmZzZXQgKyByb3VuZF91cChodGFiLVx1MDAzZW1hcC5rZXlfc2l6ZSwgOCk7XG4gXHRpZiAocGVyY3B1KVxuIFx0XHRodGFiLVx1MDAzZWVsZW1fc2l6ZSArPSBzaXplb2Yodm9pZCAqKTtcbiBcdGVsc2VcbkBAIC02OTIsMTQgKzc5NiwxNiBAQCBzdGF0aWMgaW5saW5lIHN0cnVjdCBobGlzdF9udWxsc19oZWFkICpzZWxlY3RfYnVja2V0KHN0cnVjdCBicGZfaHRhYiAqaHRhYiwgdTMyXG4gfVxuIFxuIC8qIHRoaXMgbG9va3VwIGZ1bmN0aW9uIGNhbiBvbmx5IGJlIGNhbGxlZCB3aXRoIGJ1Y2tldCBsb2NrIHRha2VuICovXG4tc3RhdGljIHN0cnVjdCBodGFiX2VsZW0gKmxvb2t1cF9lbGVtX3JhdyhzdHJ1Y3QgaGxpc3RfbnVsbHNfaGVhZCAqaGVhZCwgdTMyIGhhc2gsXG4rc3RhdGljIHN0cnVjdCBodGFiX2VsZW0gKmxvb2t1cF9lbGVtX3JhdyhzdHJ1Y3QgYnBmX2h0YWIgKmh0YWIsXG4rXHRcdFx0XHRcdCBzdHJ1Y3QgaGxpc3RfbnVsbHNfaGVhZCAqaGVhZCwgdTMyIGhhc2gsXG4gXHRcdFx0XHRcdCB2b2lkICprZXksIHUzMiBrZXlfc2l6ZSlcbiB7XG4gXHRzdHJ1Y3QgaGxpc3RfbnVsbHNfbm9kZSAqbjtcbiBcdHN0cnVjdCBodGFiX2VsZW0gKmw7XG4gXG4gXHRobGlzdF9udWxsc19mb3JfZWFjaF9lbnRyeV9yY3UobCwgbiwgaGVhZCwgaGFzaF9ub2RlKVxuLVx0XHRpZiAobC1cdTAwM2VoYXNoID09IGhhc2ggXHUwMDI2XHUwMDI2ICFtZW1jbXAoXHUwMDI2bC1cdTAwM2VrZXksIGtleSwga2V5X3NpemUpKVxuK1x0XHRpZiAoKCFodGFiX2hhc19oYXNoKGh0YWIpIHx8IGh0YWJfZWxlbV9oYXNoKGh0YWIsIGwpID09IGhhc2gpIFx1MDAyNlx1MDAyNlxuK1x0XHQgICAgIW1lbWNtcChodGFiX2VsZW1fa2V5KGh0YWIsIGwpLCBrZXksIGtleV9zaXplKSlcbiBcdFx0XHRyZXR1cm4gbDtcbiBcbiBcdHJldHVybiBOVUxMO1xuQEAgLTcwOSw3ICs4MTUsOCBAQCBzdGF0aWMgc3RydWN0IGh0YWJfZWxlbSAqbG9va3VwX2VsZW1fcmF3KHN0cnVjdCBobGlzdF9udWxsc19oZWFkICpoZWFkLCB1MzIgaGFzaFxuICAqIHRoZSB1bmxpa2VseSBldmVudCB3aGVuIGVsZW1lbnRzIG1vdmVkIGZyb20gb25lIGJ1Y2tldCBpbnRvIGFub3RoZXJcbiAgKiB3aGlsZSBsaW5rIGxpc3QgaXMgYmVpbmcgd2Fsa2VkXG4gICovXG4tc3RhdGljIHN0cnVjdCBodGFiX2VsZW0gKmxvb2t1cF9udWxsc19lbGVtX3JhdyhzdHJ1Y3QgaGxpc3RfbnVsbHNfaGVhZCAqaGVhZCxcbitzdGF0aWMgc3RydWN0IGh0YWJfZWxlbSAqbG9va3VwX251bGxzX2VsZW1fcmF3KHN0cnVjdCBicGZfaHRhYiAqaHRhYixcbitcdFx0XHRcdFx0ICAgICAgIHN0cnVjdCBobGlzdF9udWxsc19oZWFkICpoZWFkLFxuIFx0XHRcdFx0XHQgICAgICAgdTMyIGhhc2gsIHZvaWQgKmtleSxcbiBcdFx0XHRcdFx0ICAgICAgIHUzMiBrZXlfc2l6ZSwgdTMyIG5fYnVja2V0cylcbiB7XG5AQCAtNzE4LDcgKzgyNSw4IEBAIHN0YXRpYyBzdHJ1Y3QgaHRhYl9lbGVtICpsb29rdXBfbnVsbHNfZWxlbV9yYXcoc3RydWN0IGhsaXN0X251bGxzX2hlYWQgKmhlYWQsXG4gXG4gYWdhaW46XG4gXHRobGlzdF9udWxsc19mb3JfZWFjaF9lbnRyeV9yY3UobCwgbiwgaGVhZCwgaGFzaF9ub2RlKVxuLVx0XHRpZiAobC1cdTAwM2VoYXNoID09IGhhc2ggXHUwMDI2XHUwMDI2ICFtZW1jbXAoXHUwMDI2bC1cdTAwM2VrZXksIGtleSwga2V5X3NpemUpKVxuK1x0XHRpZiAoKCFodGFiX2hhc19oYXNoKGh0YWIpIHx8IGh0YWJfZWxlbV9oYXNoKGh0YWIsIGwpID09IGhhc2gpIFx1MDAyNlx1MDAyNlxuK1x0XHQgICAgIW1lbWNtcChodGFiX2VsZW1fa2V5KGh0YWIsIGwpLCBrZXksIGtleV9zaXplKSlcbiBcdFx0XHRyZXR1cm4gbDtcbiBcbiBcdGlmICh1bmxpa2VseShnZXRfbnVsbHNfdmFsdWUobikgIT0gKGhhc2ggXHUwMDI2IChuX2J1Y2tldHMgLSAxKSkpKVxuQEAgLTc0NywxNyArODU1LDE4IEBAIHN0YXRpYyB2b2lkICpfX2h0YWJfbWFwX2xvb2t1cF9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSlcbiBcbiBcdGhlYWQgPSBzZWxlY3RfYnVja2V0KGh0YWIsIGhhc2gpO1xuIFxuLVx0bCA9IGxvb2t1cF9udWxsc19lbGVtX3JhdyhoZWFkLCBoYXNoLCBrZXksIGtleV9zaXplLCBodGFiLVx1MDAzZW5fYnVja2V0cyk7XG4rXHRsID0gbG9va3VwX251bGxzX2VsZW1fcmF3KGh0YWIsIGhlYWQsIGhhc2gsIGtleSwga2V5X3NpemUsIGh0YWItXHUwMDNlbl9idWNrZXRzKTtcbiBcbiBcdHJldHVybiBsO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCAqaHRhYl9tYXBfbG9va3VwX2VsZW0oc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5KVxuIHtcbitcdHN0cnVjdCBicGZfaHRhYiAqaHRhYiA9IGNvbnRhaW5lcl9vZihtYXAsIHN0cnVjdCBicGZfaHRhYiwgbWFwKTtcbiBcdHN0cnVjdCBodGFiX2VsZW0gKmwgPSBfX2h0YWJfbWFwX2xvb2t1cF9lbGVtKG1hcCwga2V5KTtcbiBcbiBcdGlmIChsKVxuLVx0XHRyZXR1cm4gaHRhYl9lbGVtX3ZhbHVlKGwsIG1hcC1cdTAwM2VrZXlfc2l6ZSk7XG4rXHRcdHJldHVybiBodGFiX2VsZW1fdmFsdWUoaHRhYiwgbCk7XG4gXG4gXHRyZXR1cm4gTlVMTDtcbiB9XG5AQCAtNzc1LDYgKzg4NCw3IEBAIHN0YXRpYyB2b2lkICpodGFiX21hcF9sb29rdXBfZWxlbShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXkpXG4gICovXG4gc3RhdGljIGludCBodGFiX21hcF9nZW5fbG9va3VwKHN0cnVjdCBicGZfbWFwICptYXAsIHN0cnVjdCBicGZfaW5zbiAqaW5zbl9idWYpXG4ge1xuK1x0c3RydWN0IGJwZl9odGFiICpodGFiID0gY29udGFpbmVyX29mKG1hcCwgc3RydWN0IGJwZl9odGFiLCBtYXApO1xuIFx0c3RydWN0IGJwZl9pbnNuICppbnNuID0gaW5zbl9idWY7XG4gXHRjb25zdCBpbnQgcmV0ID0gQlBGX1JFR18wO1xuIFxuQEAgLTc4Myw3ICs4OTMsNyBAQCBzdGF0aWMgaW50IGh0YWJfbWFwX2dlbl9sb29rdXAoc3RydWN0IGJwZl9tYXAgKm1hcCwgc3RydWN0IGJwZl9pbnNuICppbnNuX2J1ZilcbiBcdCppbnNuKysgPSBCUEZfRU1JVF9DQUxMKF9faHRhYl9tYXBfbG9va3VwX2VsZW0pO1xuIFx0Kmluc24rKyA9IEJQRl9KTVBfSU1NKEJQRl9KRVEsIHJldCwgMCwgMSk7XG4gXHQqaW5zbisrID0gQlBGX0FMVTY0X0lNTShCUEZfQURELCByZXQsXG4tXHRcdFx0XHRvZmZzZXRvZihzdHJ1Y3QgaHRhYl9lbGVtLCBrZXkpICtcbitcdFx0XHRcdGh0YWItXHUwMDNla2V5X29mZnNldCArXG4gXHRcdFx0XHRyb3VuZF91cChtYXAtXHUwMDNla2V5X3NpemUsIDgpKTtcbiBcdHJldHVybiBpbnNuIC0gaW5zbl9idWY7XG4gfVxuQEAgLTc5MSwxMiArOTAxLDEzIEBAIHN0YXRpYyBpbnQgaHRhYl9tYXBfZ2VuX2xvb2t1cChzdHJ1Y3QgYnBmX21hcCAqbWFwLCBzdHJ1Y3QgYnBmX2luc24gKmluc25fYnVmKVxuIHN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCAqX19odGFiX2xydV9tYXBfbG9va3VwX2VsZW0oc3RydWN0IGJwZl9tYXAgKm1hcCxcbiBcdFx0XHRcdFx0XHRcdHZvaWQgKmtleSwgY29uc3QgYm9vbCBtYXJrKVxuIHtcbitcdHN0cnVjdCBicGZfaHRhYiAqaHRhYiA9IGNvbnRhaW5lcl9vZihtYXAsIHN0cnVjdCBicGZfaHRhYiwgbWFwKTtcbiBcdHN0cnVjdCBodGFiX2VsZW0gKmwgPSBfX2h0YWJfbWFwX2xvb2t1cF9lbGVtKG1hcCwga2V5KTtcbiBcbiBcdGlmIChsKSB7XG4gXHRcdGlmIChtYXJrKVxuLVx0XHRcdGJwZl9scnVfbm9kZV9zZXRfcmVmKFx1MDAyNmwtXHUwMDNlbHJ1X25vZGUpO1xuLVx0XHRyZXR1cm4gaHRhYl9lbGVtX3ZhbHVlKGwsIG1hcC1cdTAwM2VrZXlfc2l6ZSk7XG4rXHRcdFx0YnBmX2xydV9ub2RlX3NldF9yZWYoaHRhYl9lbGVtX2xydV9ub2RlKGwpKTtcbitcdFx0cmV0dXJuIGh0YWJfZWxlbV92YWx1ZShodGFiLCBsKTtcbiBcdH1cbiBcbiBcdHJldHVybiBOVUxMO1xuQEAgLTgxNSw2ICs5MjYsNyBAQCBzdGF0aWMgdm9pZCAqaHRhYl9scnVfbWFwX2xvb2t1cF9lbGVtX3N5cyhzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXkpXG4gc3RhdGljIGludCBodGFiX2xydV9tYXBfZ2VuX2xvb2t1cChzdHJ1Y3QgYnBmX21hcCAqbWFwLFxuIFx0XHRcdFx0ICAgc3RydWN0IGJwZl9pbnNuICppbnNuX2J1ZilcbiB7XG4rXHRzdHJ1Y3QgYnBmX2h0YWIgKmh0YWIgPSBjb250YWluZXJfb2YobWFwLCBzdHJ1Y3QgYnBmX2h0YWIsIG1hcCk7XG4gXHRzdHJ1Y3QgYnBmX2luc24gKmluc24gPSBpbnNuX2J1ZjtcbiBcdGNvbnN0IGludCByZXQgPSBCUEZfUkVHXzA7XG4gXHRjb25zdCBpbnQgcmVmX3JlZyA9IEJQRl9SRUdfMTtcbkBAIC04MjQsMTUgKzkzNiwxNSBAQCBzdGF0aWMgaW50IGh0YWJfbHJ1X21hcF9nZW5fbG9va3VwKHN0cnVjdCBicGZfbWFwICptYXAsXG4gXHQqaW5zbisrID0gQlBGX0VNSVRfQ0FMTChfX2h0YWJfbWFwX2xvb2t1cF9lbGVtKTtcbiBcdCppbnNuKysgPSBCUEZfSk1QX0lNTShCUEZfSkVRLCByZXQsIDAsIDQpO1xuIFx0Kmluc24rKyA9IEJQRl9MRFhfTUVNKEJQRl9CLCByZWZfcmVnLCByZXQsXG4tXHRcdFx0ICAgICAgb2Zmc2V0b2Yoc3RydWN0IGh0YWJfZWxlbSwgbHJ1X25vZGUpICtcbitcdFx0XHQgICAgICBvZmZzZXRvZihzdHJ1Y3QgaHRhYl9lbGVtX2xydSwgbHJ1X25vZGUpICtcbiBcdFx0XHQgICAgICBvZmZzZXRvZihzdHJ1Y3QgYnBmX2xydV9ub2RlLCByZWYpKTtcbiBcdCppbnNuKysgPSBCUEZfSk1QX0lNTShCUEZfSk5FLCByZWZfcmVnLCAwLCAxKTtcbiBcdCppbnNuKysgPSBCUEZfU1RfTUVNKEJQRl9CLCByZXQsXG4tXHRcdFx0ICAgICBvZmZzZXRvZihzdHJ1Y3QgaHRhYl9lbGVtLCBscnVfbm9kZSkgK1xuK1x0XHRcdCAgICAgb2Zmc2V0b2Yoc3RydWN0IGh0YWJfZWxlbV9scnUsIGxydV9ub2RlKSArXG4gXHRcdFx0ICAgICBvZmZzZXRvZihzdHJ1Y3QgYnBmX2xydV9ub2RlLCByZWYpLFxuIFx0XHRcdCAgICAgMSk7XG4gXHQqaW5zbisrID0gQlBGX0FMVTY0X0lNTShCUEZfQURELCByZXQsXG4tXHRcdFx0XHRvZmZzZXRvZihzdHJ1Y3QgaHRhYl9lbGVtLCBrZXkpICtcbitcdFx0XHRcdGh0YWItXHUwMDNla2V5X29mZnNldCArXG4gXHRcdFx0XHRyb3VuZF91cChtYXAtXHUwMDNla2V5X3NpemUsIDgpKTtcbiBcdHJldHVybiBpbnNuIC0gaW5zbl9idWY7XG4gfVxuQEAgLTg0NCwxMyArOTU2LDEzIEBAIHN0YXRpYyB2b2lkIGNoZWNrX2FuZF9jYW5jZWxfZmllbGRzKHN0cnVjdCBicGZfaHRhYiAqaHRhYixcbiBcdFx0cmV0dXJuO1xuIFxuIFx0aWYgKGh0YWJfaXNfcGVyY3B1KGh0YWIpKSB7XG4tXHRcdHZvaWQgX19wZXJjcHUgKnBwdHIgPSBodGFiX2VsZW1fZ2V0X3B0cihlbGVtLCBodGFiLVx1MDAzZW1hcC5rZXlfc2l6ZSk7XG4rXHRcdHZvaWQgX19wZXJjcHUgKnBwdHIgPSBodGFiX2VsZW1fZ2V0X3B0cihodGFiLCBlbGVtKTtcbiBcdFx0aW50IGNwdTtcbiBcbiBcdFx0Zm9yX2VhY2hfcG9zc2libGVfY3B1KGNwdSlcbiBcdFx0XHRicGZfb2JqX2NhbmNlbF9maWVsZHMoXHUwMDI2aHRhYi1cdTAwM2VtYXAsIHBlcl9jcHVfcHRyKHBwdHIsIGNwdSkpO1xuIFx0fSBlbHNlIHtcbi1cdFx0dm9pZCAqbWFwX3ZhbHVlID0gaHRhYl9lbGVtX3ZhbHVlKGVsZW0sIGh0YWItXHUwMDNlbWFwLmtleV9zaXplKTtcbitcdFx0dm9pZCAqbWFwX3ZhbHVlID0gaHRhYl9lbGVtX3ZhbHVlKGh0YWIsIGVsZW0pO1xuIFxuIFx0XHRicGZfb2JqX2NhbmNlbF9maWVsZHMoXHUwMDI2aHRhYi1cdTAwM2VtYXAsIG1hcF92YWx1ZSk7XG4gXHR9XG5AQCAtODY5LDggKzk4MSw4IEBAIHN0YXRpYyBib29sIGh0YWJfbHJ1X21hcF9kZWxldGVfbm9kZSh2b2lkICphcmcsIHN0cnVjdCBicGZfbHJ1X25vZGUgKm5vZGUpXG4gXHRzdHJ1Y3QgYnVja2V0ICpiO1xuIFx0aW50IHJldDtcbiBcbi1cdHRndF9sID0gY29udGFpbmVyX29mKG5vZGUsIHN0cnVjdCBodGFiX2VsZW0sIGxydV9ub2RlKTtcbi1cdGIgPSBfX3NlbGVjdF9idWNrZXQoaHRhYiwgdGd0X2wtXHUwMDNlaGFzaCk7XG4rXHR0Z3RfbCA9IChzdHJ1Y3QgaHRhYl9lbGVtICopY29udGFpbmVyX29mKG5vZGUsIHN0cnVjdCBodGFiX2VsZW1fbHJ1LCBscnVfbm9kZSk7XG4rXHRiID0gX19zZWxlY3RfYnVja2V0KGh0YWIsIGh0YWJfZWxlbV9oYXNoKGh0YWIsIHRndF9sKSk7XG4gXHRoZWFkID0gXHUwMDI2Yi1cdTAwM2VoZWFkO1xuIFxuIFx0cmV0ID0gaHRhYl9sb2NrX2J1Y2tldChiLCBcdTAwMjZmbGFncyk7XG5AQCAtOTEyLDcgKzEwMjQsNyBAQCBzdGF0aWMgaW50IGh0YWJfbWFwX2dldF9uZXh0X2tleShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXksIHZvaWQgKm5leHRfa2V5KVxuIFx0aGVhZCA9IHNlbGVjdF9idWNrZXQoaHRhYiwgaGFzaCk7XG4gXG4gXHQvKiBsb29rdXAgdGhlIGtleSAqL1xuLVx0bCA9IGxvb2t1cF9udWxsc19lbGVtX3JhdyhoZWFkLCBoYXNoLCBrZXksIGtleV9zaXplLCBodGFiLVx1MDAzZW5fYnVja2V0cyk7XG4rXHRsID0gbG9va3VwX251bGxzX2VsZW1fcmF3KGh0YWIsIGhlYWQsIGhhc2gsIGtleSwga2V5X3NpemUsIGh0YWItXHUwMDNlbl9idWNrZXRzKTtcbiBcbiBcdGlmICghbClcbiBcdFx0Z290byBmaW5kX2ZpcnN0X2VsZW07XG5AQCAtOTIzLDcgKzEwMzUsNyBAQCBzdGF0aWMgaW50IGh0YWJfbWFwX2dldF9uZXh0X2tleShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXksIHZvaWQgKm5leHRfa2V5KVxuIFxuIFx0aWYgKG5leHRfbCkge1xuIFx0XHQvKiBpZiBuZXh0IGVsZW0gaW4gdGhpcyBoYXNoIGxpc3QgaXMgbm9uLXplcm8sIGp1c3QgcmV0dXJuIGl0ICovXG4tXHRcdG1lbWNweShuZXh0X2tleSwgbmV4dF9sLVx1MDAzZWtleSwga2V5X3NpemUpO1xuK1x0XHRtZW1jcHkobmV4dF9rZXksIGh0YWJfZWxlbV9rZXkoaHRhYiwgbmV4dF9sKSwga2V5X3NpemUpO1xuIFx0XHRyZXR1cm4gMDtcbiBcdH1cbiBcbkBAIC05NDEsNyArMTA1Myw3IEBAIHN0YXRpYyBpbnQgaHRhYl9tYXBfZ2V0X25leHRfa2V5KHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSwgdm9pZCAqbmV4dF9rZXkpXG4gXHRcdFx0XHRcdCAgc3RydWN0IGh0YWJfZWxlbSwgaGFzaF9ub2RlKTtcbiBcdFx0aWYgKG5leHRfbCkge1xuIFx0XHRcdC8qIGlmIGl0J3Mgbm90IGVtcHR5LCBqdXN0IHJldHVybiBpdCAqL1xuLVx0XHRcdG1lbWNweShuZXh0X2tleSwgbmV4dF9sLVx1MDAzZWtleSwga2V5X3NpemUpO1xuK1x0XHRcdG1lbWNweShuZXh0X2tleSwgaHRhYl9lbGVtX2tleShodGFiLCBuZXh0X2wpLCBrZXlfc2l6ZSk7XG4gXHRcdFx0cmV0dXJuIDA7XG4gXHRcdH1cbiBcdH1cbkBAIC05NTUsNyArMTA2Nyw3IEBAIHN0YXRpYyB2b2lkIGh0YWJfZWxlbV9mcmVlKHN0cnVjdCBicGZfaHRhYiAqaHRhYiwgc3RydWN0IGh0YWJfZWxlbSAqbClcbiBcdGNoZWNrX2FuZF9jYW5jZWxfZmllbGRzKGh0YWIsIGwpO1xuIFxuIFx0aWYgKGh0YWItXHUwMDNlbWFwLm1hcF90eXBlID09IEJQRl9NQVBfVFlQRV9QRVJDUFVfSEFTSClcbi1cdFx0YnBmX21lbV9jYWNoZV9mcmVlKFx1MDAyNmh0YWItXHUwMDNlcGNwdV9tYSwgbC1cdTAwM2VwdHJfdG9fcHB0cik7XG4rXHRcdGJwZl9tZW1fY2FjaGVfZnJlZShcdTAwMjZodGFiLVx1MDAzZXBjcHVfbWEsIGh0YWJfZWxlbV9nZXRfcHRyX3RvX3BwdHIobCkpO1xuIFx0YnBmX21lbV9jYWNoZV9mcmVlKFx1MDAyNmh0YWItXHUwMDNlbWEsIGwpO1xuIH1cbiBcbkBAIC05NjUsNyArMTA3Nyw3IEBAIHN0YXRpYyB2b2lkIGh0YWJfcHV0X2ZkX3ZhbHVlKHN0cnVjdCBicGZfaHRhYiAqaHRhYiwgc3RydWN0IGh0YWJfZWxlbSAqbClcbiBcdHZvaWQgKnB0cjtcbiBcbiBcdGlmIChtYXAtXHUwMDNlb3BzLVx1MDAzZW1hcF9mZF9wdXRfcHRyKSB7XG4tXHRcdHB0ciA9IGZkX2h0YWJfbWFwX2dldF9wdHIobWFwLCBsKTtcbitcdFx0cHRyID0gZmRfaHRhYl9tYXBfZ2V0X3B0cihodGFiLCBsKTtcbiBcdFx0bWFwLVx1MDAzZW9wcy1cdTAwM2VtYXBfZmRfcHV0X3B0cihtYXAsIHB0ciwgdHJ1ZSk7XG4gXHR9XG4gfVxuQEAgLTExMTcsMTAgKzEyMjksMTAgQEAgc3RhdGljIHN0cnVjdCBodGFiX2VsZW0gKmFsbG9jX2h0YWJfZWxlbShzdHJ1Y3QgYnBmX2h0YWIgKmh0YWIsIHZvaWQgKmtleSxcbiBcdFx0fVxuIFx0fVxuIFxuLVx0bWVtY3B5KGxfbmV3LVx1MDAzZWtleSwga2V5LCBrZXlfc2l6ZSk7XG4rXHRtZW1jcHkoaHRhYl9lbGVtX2tleShodGFiLCBsX25ldyksIGtleSwga2V5X3NpemUpO1xuIFx0aWYgKHBlcmNwdSkge1xuIFx0XHRpZiAocHJlYWxsb2MpIHtcbi1cdFx0XHRwcHRyID0gaHRhYl9lbGVtX2dldF9wdHIobF9uZXcsIGtleV9zaXplKTtcbitcdFx0XHRwcHRyID0gaHRhYl9lbGVtX2dldF9wdHIoaHRhYiwgbF9uZXcpO1xuIFx0XHR9IGVsc2Uge1xuIFx0XHRcdC8qIGFsbG9jX3BlcmNwdSB6ZXJvLWZpbGxzICovXG4gXHRcdFx0dm9pZCAqcHRyID0gYnBmX21lbV9jYWNoZV9hbGxvYyhcdTAwMjZodGFiLVx1MDAzZXBjcHVfbWEpO1xuQEAgLTExMzAsMjYgKzEyNDIsMjYgQEAgc3RhdGljIHN0cnVjdCBodGFiX2VsZW0gKmFsbG9jX2h0YWJfZWxlbShzdHJ1Y3QgYnBmX2h0YWIgKmh0YWIsIHZvaWQgKmtleSxcbiBcdFx0XHRcdGxfbmV3ID0gRVJSX1BUUigtRU5PTUVNKTtcbiBcdFx0XHRcdGdvdG8gZGVjX2NvdW50O1xuIFx0XHRcdH1cbi1cdFx0XHRsX25ldy1cdTAwM2VwdHJfdG9fcHB0ciA9IHB0cjtcbitcdFx0XHRodGFiX2VsZW1fc2V0X3B0cl90b19wcHRyKGxfbmV3LCBwdHIpO1xuIFx0XHRcdHBwdHIgPSAqKHZvaWQgX19wZXJjcHUgKiopcHRyO1xuIFx0XHR9XG4gXG4gXHRcdHBjcHVfaW5pdF92YWx1ZShodGFiLCBwcHRyLCB2YWx1ZSwgb25hbGxjcHVzLCBtYXBfZmxhZ3MpO1xuIFxuIFx0XHRpZiAoIXByZWFsbG9jKVxuLVx0XHRcdGh0YWJfZWxlbV9zZXRfcHRyKGxfbmV3LCBrZXlfc2l6ZSwgcHB0cik7XG4rXHRcdFx0aHRhYl9lbGVtX3NldF9wdHIoaHRhYiwgbF9uZXcsIHBwdHIpO1xuIFx0fSBlbHNlIGlmIChmZF9odGFiX21hcF9uZWVkc19hZGp1c3QoaHRhYikpIHtcbiBcdFx0c2l6ZSA9IHJvdW5kX3VwKHNpemUsIDgpO1xuLVx0XHRtZW1jcHkoaHRhYl9lbGVtX3ZhbHVlKGxfbmV3LCBrZXlfc2l6ZSksIHZhbHVlLCBzaXplKTtcbitcdFx0bWVtY3B5KGh0YWJfZWxlbV92YWx1ZShodGFiLCBsX25ldyksIHZhbHVlLCBzaXplKTtcbiBcdH0gZWxzZSBpZiAobWFwX2ZsYWdzIFx1MDAyNiBCUEZfRl9MT0NLKSB7XG4gXHRcdGNvcHlfbWFwX3ZhbHVlX2xvY2tlZChcdTAwMjZodGFiLVx1MDAzZW1hcCxcbi1cdFx0XHRcdCAgICAgIGh0YWJfZWxlbV92YWx1ZShsX25ldywga2V5X3NpemUpLFxuK1x0XHRcdFx0ICAgICAgaHRhYl9lbGVtX3ZhbHVlKGh0YWIsIGxfbmV3KSxcbiBcdFx0XHRcdCAgICAgIHZhbHVlLCBmYWxzZSk7XG4gXHR9IGVsc2Uge1xuLVx0XHRjb3B5X21hcF92YWx1ZShcdTAwMjZodGFiLVx1MDAzZW1hcCwgaHRhYl9lbGVtX3ZhbHVlKGxfbmV3LCBrZXlfc2l6ZSksIHZhbHVlKTtcbitcdFx0Y29weV9tYXBfdmFsdWUoXHUwMDI2aHRhYi1cdTAwM2VtYXAsIGh0YWJfZWxlbV92YWx1ZShodGFiLCBsX25ldyksIHZhbHVlKTtcbiBcdH1cbiBcbi1cdGxfbmV3LVx1MDAzZWhhc2ggPSBoYXNoO1xuK1x0aHRhYl9lbGVtX3NldF9oYXNoKGh0YWIsIGxfbmV3LCBoYXNoKTtcbiBcdHJldHVybiBsX25ldztcbiBkZWNfY291bnQ6XG4gXHRkZWNfZWxlbV9jb3VudChodGFiKTtcbkBAIC0xMTk5LDcgKzEzMTEsNyBAQCBzdGF0aWMgbG9uZyBodGFiX21hcF91cGRhdGVfZWxlbShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXksIHZvaWQgKnZhbHVlLFxuIFx0XHRpZiAodW5saWtlbHkoIWJ0Zl9yZWNvcmRfaGFzX2ZpZWxkKG1hcC1cdTAwM2VyZWNvcmQsIEJQRl9TUElOX0xPQ0spKSlcbiBcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdFx0LyogZmluZCBhbiBlbGVtZW50IHdpdGhvdXQgdGFraW5nIHRoZSBidWNrZXQgbG9jayAqL1xuLVx0XHRsX29sZCA9IGxvb2t1cF9udWxsc19lbGVtX3JhdyhoZWFkLCBoYXNoLCBrZXksIGtleV9zaXplLFxuK1x0XHRsX29sZCA9IGxvb2t1cF9udWxsc19lbGVtX3JhdyhodGFiLCBoZWFkLCBoYXNoLCBrZXksIGtleV9zaXplLFxuIFx0XHRcdFx0XHQgICAgICBodGFiLVx1MDAzZW5fYnVja2V0cyk7XG4gXHRcdHJldCA9IGNoZWNrX2ZsYWdzKGh0YWIsIGxfb2xkLCBtYXBfZmxhZ3MpO1xuIFx0XHRpZiAocmV0KVxuQEAgLTEyMDcsNyArMTMxOSw3IEBAIHN0YXRpYyBsb25nIGh0YWJfbWFwX3VwZGF0ZV9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSwgdm9pZCAqdmFsdWUsXG4gXHRcdGlmIChsX29sZCkge1xuIFx0XHRcdC8qIGdyYWIgdGhlIGVsZW1lbnQgbG9jayBhbmQgdXBkYXRlIHZhbHVlIGluIHBsYWNlICovXG4gXHRcdFx0Y29weV9tYXBfdmFsdWVfbG9ja2VkKG1hcCxcbi1cdFx0XHRcdFx0ICAgICAgaHRhYl9lbGVtX3ZhbHVlKGxfb2xkLCBrZXlfc2l6ZSksXG4rXHRcdFx0XHRcdCAgICAgIGh0YWJfZWxlbV92YWx1ZShodGFiLCBsX29sZCksXG4gXHRcdFx0XHRcdCAgICAgIHZhbHVlLCBmYWxzZSk7XG4gXHRcdFx0cmV0dXJuIDA7XG4gXHRcdH1cbkBAIC0xMjIxLDcgKzEzMzMsNyBAQCBzdGF0aWMgbG9uZyBodGFiX21hcF91cGRhdGVfZWxlbShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXksIHZvaWQgKnZhbHVlLFxuIFx0aWYgKHJldClcbiBcdFx0cmV0dXJuIHJldDtcbiBcbi1cdGxfb2xkID0gbG9va3VwX2VsZW1fcmF3KGhlYWQsIGhhc2gsIGtleSwga2V5X3NpemUpO1xuK1x0bF9vbGQgPSBsb29rdXBfZWxlbV9yYXcoaHRhYiwgaGVhZCwgaGFzaCwga2V5LCBrZXlfc2l6ZSk7XG4gXG4gXHRyZXQgPSBjaGVja19mbGFncyhodGFiLCBsX29sZCwgbWFwX2ZsYWdzKTtcbiBcdGlmIChyZXQpXG5AQCAtMTIzNSw3ICsxMzQ3LDcgQEAgc3RhdGljIGxvbmcgaHRhYl9tYXBfdXBkYXRlX2VsZW0oc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5LCB2b2lkICp2YWx1ZSxcbiBcdFx0ICogYW5kIHVwZGF0ZSBlbGVtZW50IGluIHBsYWNlXG4gXHRcdCAqL1xuIFx0XHRjb3B5X21hcF92YWx1ZV9sb2NrZWQobWFwLFxuLVx0XHRcdFx0ICAgICAgaHRhYl9lbGVtX3ZhbHVlKGxfb2xkLCBrZXlfc2l6ZSksXG4rXHRcdFx0XHQgICAgICBodGFiX2VsZW1fdmFsdWUoaHRhYiwgbF9vbGQpLFxuIFx0XHRcdFx0ICAgICAgdmFsdWUsIGZhbHNlKTtcbiBcdFx0cmV0ID0gMDtcbiBcdFx0Z290byBlcnI7XG5AQCAtMTI3NSw3ICsxMzg3LDcgQEAgc3RhdGljIHZvaWQgaHRhYl9scnVfcHVzaF9mcmVlKHN0cnVjdCBicGZfaHRhYiAqaHRhYiwgc3RydWN0IGh0YWJfZWxlbSAqZWxlbSlcbiB7XG4gXHRjaGVja19hbmRfY2FuY2VsX2ZpZWxkcyhodGFiLCBlbGVtKTtcbiBcdGJwZl9tYXBfZGVjX2VsZW1fY291bnQoXHUwMDI2aHRhYi1cdTAwM2VtYXApO1xuLVx0YnBmX2xydV9wdXNoX2ZyZWUoXHUwMDI2aHRhYi1cdTAwM2VscnUsIFx1MDAyNmVsZW0tXHUwMDNlbHJ1X25vZGUpO1xuK1x0YnBmX2xydV9wdXNoX2ZyZWUoXHUwMDI2aHRhYi1cdTAwM2VscnUsIGh0YWJfZWxlbV9scnVfbm9kZShlbGVtKSk7XG4gfVxuIFxuIHN0YXRpYyBsb25nIGh0YWJfbHJ1X21hcF91cGRhdGVfZWxlbShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXksIHZvaWQgKnZhbHVlLFxuQEAgLTEzMTAsMTMgKzE0MjIsMTMgQEAgc3RhdGljIGxvbmcgaHRhYl9scnVfbWFwX3VwZGF0ZV9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSwgdm9pZCAqdmFsdWVcbiBcdGxfbmV3ID0gcHJlYWxsb2NfbHJ1X3BvcChodGFiLCBrZXksIGhhc2gpO1xuIFx0aWYgKCFsX25ldylcbiBcdFx0cmV0dXJuIC1FTk9NRU07XG4tXHRjb3B5X21hcF92YWx1ZShcdTAwMjZodGFiLVx1MDAzZW1hcCwgaHRhYl9lbGVtX3ZhbHVlKGxfbmV3LCBtYXAtXHUwMDNla2V5X3NpemUpLCB2YWx1ZSk7XG4rXHRjb3B5X21hcF92YWx1ZShcdTAwMjZodGFiLVx1MDAzZW1hcCwgaHRhYl9lbGVtX3ZhbHVlKGh0YWIsIGxfbmV3KSwgdmFsdWUpO1xuIFxuIFx0cmV0ID0gaHRhYl9sb2NrX2J1Y2tldChiLCBcdTAwMjZmbGFncyk7XG4gXHRpZiAocmV0KVxuIFx0XHRnb3RvIGVycl9sb2NrX2J1Y2tldDtcbiBcbi1cdGxfb2xkID0gbG9va3VwX2VsZW1fcmF3KGhlYWQsIGhhc2gsIGtleSwga2V5X3NpemUpO1xuK1x0bF9vbGQgPSBsb29rdXBfZWxlbV9yYXcoaHRhYiwgaGVhZCwgaGFzaCwga2V5LCBrZXlfc2l6ZSk7XG4gXG4gXHRyZXQgPSBjaGVja19mbGFncyhodGFiLCBsX29sZCwgbWFwX2ZsYWdzKTtcbiBcdGlmIChyZXQpXG5AQCAtMTMyNyw3ICsxNDM5LDcgQEAgc3RhdGljIGxvbmcgaHRhYl9scnVfbWFwX3VwZGF0ZV9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSwgdm9pZCAqdmFsdWVcbiBcdCAqL1xuIFx0aGxpc3RfbnVsbHNfYWRkX2hlYWRfcmN1KFx1MDAyNmxfbmV3LVx1MDAzZWhhc2hfbm9kZSwgaGVhZCk7XG4gXHRpZiAobF9vbGQpIHtcbi1cdFx0YnBmX2xydV9ub2RlX3NldF9yZWYoXHUwMDI2bF9uZXctXHUwMDNlbHJ1X25vZGUpO1xuK1x0XHRicGZfbHJ1X25vZGVfc2V0X3JlZihodGFiX2VsZW1fbHJ1X25vZGUobF9uZXcpKTtcbiBcdFx0aGxpc3RfbnVsbHNfZGVsX3JjdShcdTAwMjZsX29sZC1cdTAwM2VoYXNoX25vZGUpO1xuIFx0fVxuIFx0cmV0ID0gMDtcbkBAIC0xMzgzLDcgKzE0OTUsNyBAQCBzdGF0aWMgbG9uZyBodGFiX21hcF91cGRhdGVfZWxlbV9pbl9wbGFjZShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXksXG4gXHRpZiAocmV0KVxuIFx0XHRyZXR1cm4gcmV0O1xuIFxuLVx0bF9vbGQgPSBsb29rdXBfZWxlbV9yYXcoaGVhZCwgaGFzaCwga2V5LCBrZXlfc2l6ZSk7XG4rXHRsX29sZCA9IGxvb2t1cF9lbGVtX3JhdyhodGFiLCBoZWFkLCBoYXNoLCBrZXksIGtleV9zaXplKTtcbiBcbiBcdHJldCA9IGNoZWNrX2ZsYWdzKGh0YWIsIGxfb2xkLCBtYXBfZmxhZ3MpO1xuIFx0aWYgKHJldClcbkBAIC0xMzkyLDEwICsxNTA0LDEwIEBAIHN0YXRpYyBsb25nIGh0YWJfbWFwX3VwZGF0ZV9lbGVtX2luX3BsYWNlKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSxcbiBcdGlmIChsX29sZCkge1xuIFx0XHQvKiBVcGRhdGUgdmFsdWUgaW4tcGxhY2UgKi9cbiBcdFx0aWYgKHBlcmNwdSkge1xuLVx0XHRcdHBjcHVfY29weV92YWx1ZShodGFiLCBodGFiX2VsZW1fZ2V0X3B0cihsX29sZCwga2V5X3NpemUpLFxuK1x0XHRcdHBjcHVfY29weV92YWx1ZShodGFiLCBodGFiX2VsZW1fZ2V0X3B0cihodGFiLCBsX29sZCksXG4gXHRcdFx0XHRcdHZhbHVlLCBvbmFsbGNwdXMsIG1hcF9mbGFncyk7XG4gXHRcdH0gZWxzZSB7XG4tXHRcdFx0dm9pZCAqKmlubmVyX21hcF9wcHRyID0gaHRhYl9lbGVtX3ZhbHVlKGxfb2xkLCBrZXlfc2l6ZSk7XG4rXHRcdFx0dm9pZCAqKmlubmVyX21hcF9wcHRyID0gaHRhYl9lbGVtX3ZhbHVlKGh0YWIsIGxfb2xkKTtcbiBcbiBcdFx0XHRvbGRfbWFwX3B0ciA9ICppbm5lcl9tYXBfcHB0cjtcbiBcdFx0XHRXUklURV9PTkNFKCppbm5lcl9tYXBfcHB0ciwgKih2b2lkICoqKXZhbHVlKTtcbkBAIC0xNDU2LDIwICsxNTY4LDIwIEBAIHN0YXRpYyBsb25nIF9faHRhYl9scnVfcGVyY3B1X21hcF91cGRhdGVfZWxlbShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXksXG4gXHRpZiAocmV0KVxuIFx0XHRnb3RvIGVycl9sb2NrX2J1Y2tldDtcbiBcbi1cdGxfb2xkID0gbG9va3VwX2VsZW1fcmF3KGhlYWQsIGhhc2gsIGtleSwga2V5X3NpemUpO1xuK1x0bF9vbGQgPSBsb29rdXBfZWxlbV9yYXcoaHRhYiwgaGVhZCwgaGFzaCwga2V5LCBrZXlfc2l6ZSk7XG4gXG4gXHRyZXQgPSBjaGVja19mbGFncyhodGFiLCBsX29sZCwgbWFwX2ZsYWdzKTtcbiBcdGlmIChyZXQpXG4gXHRcdGdvdG8gZXJyO1xuIFxuIFx0aWYgKGxfb2xkKSB7XG4tXHRcdGJwZl9scnVfbm9kZV9zZXRfcmVmKFx1MDAyNmxfb2xkLVx1MDAzZWxydV9ub2RlKTtcbitcdFx0YnBmX2xydV9ub2RlX3NldF9yZWYoaHRhYl9lbGVtX2xydV9ub2RlKGxfb2xkKSk7XG4gXG4gXHRcdC8qIHBlci1jcHUgaGFzaCBtYXAgY2FuIHVwZGF0ZSB2YWx1ZSBpbi1wbGFjZSAqL1xuLVx0XHRwY3B1X2NvcHlfdmFsdWUoaHRhYiwgaHRhYl9lbGVtX2dldF9wdHIobF9vbGQsIGtleV9zaXplKSxcbitcdFx0cGNwdV9jb3B5X3ZhbHVlKGh0YWIsIGh0YWJfZWxlbV9nZXRfcHRyKGh0YWIsIGxfb2xkKSxcbiBcdFx0XHRcdHZhbHVlLCBvbmFsbGNwdXMsIG1hcF9mbGFncyk7XG4gXHR9IGVsc2Uge1xuLVx0XHRwY3B1X2luaXRfdmFsdWUoaHRhYiwgaHRhYl9lbGVtX2dldF9wdHIobF9uZXcsIGtleV9zaXplKSxcbitcdFx0cGNwdV9pbml0X3ZhbHVlKGh0YWIsIGh0YWJfZWxlbV9nZXRfcHRyKGh0YWIsIGxfbmV3KSxcbiBcdFx0XHRcdHZhbHVlLCBvbmFsbGNwdXMsIG1hcF9mbGFncyk7XG4gXHRcdGhsaXN0X251bGxzX2FkZF9oZWFkX3JjdShcdTAwMjZsX25ldy1cdTAwM2VoYXNoX25vZGUsIGhlYWQpO1xuIFx0XHRsX25ldyA9IE5VTEw7XG5AQCAtMTQ4MCw3ICsxNTkyLDcgQEAgc3RhdGljIGxvbmcgX19odGFiX2xydV9wZXJjcHVfbWFwX3VwZGF0ZV9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSxcbiBlcnJfbG9ja19idWNrZXQ6XG4gXHRpZiAobF9uZXcpIHtcbiBcdFx0YnBmX21hcF9kZWNfZWxlbV9jb3VudChcdTAwMjZodGFiLVx1MDAzZW1hcCk7XG4tXHRcdGJwZl9scnVfcHVzaF9mcmVlKFx1MDAyNmh0YWItXHUwMDNlbHJ1LCBcdTAwMjZsX25ldy1cdTAwM2VscnVfbm9kZSk7XG4rXHRcdGJwZl9scnVfcHVzaF9mcmVlKFx1MDAyNmh0YWItXHUwMDNlbHJ1LCBodGFiX2VsZW1fbHJ1X25vZGUobF9uZXcpKTtcbiBcdH1cbiBcdHJldHVybiByZXQ7XG4gfVxuQEAgLTE1MjEsNyArMTYzMyw3IEBAIHN0YXRpYyBsb25nIGh0YWJfbWFwX2RlbGV0ZV9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSlcbiBcdGlmIChyZXQpXG4gXHRcdHJldHVybiByZXQ7XG4gXG4tXHRsID0gbG9va3VwX2VsZW1fcmF3KGhlYWQsIGhhc2gsIGtleSwga2V5X3NpemUpO1xuK1x0bCA9IGxvb2t1cF9lbGVtX3JhdyhodGFiLCBoZWFkLCBoYXNoLCBrZXksIGtleV9zaXplKTtcbiBcdGlmIChsKVxuIFx0XHRobGlzdF9udWxsc19kZWxfcmN1KFx1MDAyNmwtXHUwMDNlaGFzaF9ub2RlKTtcbiBcdGVsc2VcbkBAIC0xNTU2LDcgKzE2NjgsNyBAQCBzdGF0aWMgbG9uZyBodGFiX2xydV9tYXBfZGVsZXRlX2VsZW0oc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5KVxuIFx0aWYgKHJldClcbiBcdFx0cmV0dXJuIHJldDtcbiBcbi1cdGwgPSBsb29rdXBfZWxlbV9yYXcoaGVhZCwgaGFzaCwga2V5LCBrZXlfc2l6ZSk7XG4rXHRsID0gbG9va3VwX2VsZW1fcmF3KGh0YWIsIGhlYWQsIGhhc2gsIGtleSwga2V5X3NpemUpO1xuIFxuIFx0aWYgKGwpXG4gXHRcdGhsaXN0X251bGxzX2RlbF9yY3UoXHUwMDI2bC1cdTAwM2VoYXNoX25vZGUpO1xuQEAgLTE2MDIsNyArMTcxNCw3IEBAIHN0YXRpYyB2b2lkIGh0YWJfZnJlZV9tYWxsb2NlZF9pbnRlcm5hbF9zdHJ1Y3RzKHN0cnVjdCBicGZfaHRhYiAqaHRhYilcbiBcdFx0aGxpc3RfbnVsbHNfZm9yX2VhY2hfZW50cnkobCwgbiwgaGVhZCwgaGFzaF9ub2RlKSB7XG4gXHRcdFx0LyogV2Ugb25seSBmcmVlIGludGVybmFsIHN0cnVjdHMgb24gdXJlZiBkcm9wcGluZyB0byB6ZXJvICovXG4gXHRcdFx0YnBmX21hcF9mcmVlX2ludGVybmFsX3N0cnVjdHMoXHUwMDI2aHRhYi1cdTAwM2VtYXAsXG4tXHRcdFx0XHRcdFx0ICAgICAgaHRhYl9lbGVtX3ZhbHVlKGwsIGh0YWItXHUwMDNlbWFwLmtleV9zaXplKSk7XG4rXHRcdFx0XHRcdFx0ICAgICAgaHRhYl9lbGVtX3ZhbHVlKGh0YWIsIGwpKTtcbiBcdFx0fVxuIFx0XHRjb25kX3Jlc2NoZWRfcmN1KCk7XG4gXHR9XG5AQCAtMTY5Nyw3ICsxODA5LDcgQEAgc3RhdGljIGludCBfX2h0YWJfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2VsZW0oc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5LFxuIFx0aWYgKHJldClcbiBcdFx0cmV0dXJuIHJldDtcbiBcbi1cdGwgPSBsb29rdXBfZWxlbV9yYXcoaGVhZCwgaGFzaCwga2V5LCBrZXlfc2l6ZSk7XG4rXHRsID0gbG9va3VwX2VsZW1fcmF3KGh0YWIsIGhlYWQsIGhhc2gsIGtleSwga2V5X3NpemUpO1xuIFx0aWYgKCFsKSB7XG4gXHRcdHJldCA9IC1FTk9FTlQ7XG4gXHRcdGdvdG8gb3V0X3VubG9jaztcbkBAIC0xNzA4LDE0ICsxODIwLDE0IEBAIHN0YXRpYyBpbnQgX19odGFiX21hcF9sb29rdXBfYW5kX2RlbGV0ZV9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSxcbiBcdFx0dm9pZCBfX3BlcmNwdSAqcHB0cjtcbiBcdFx0aW50IG9mZiA9IDAsIGNwdTtcbiBcbi1cdFx0cHB0ciA9IGh0YWJfZWxlbV9nZXRfcHRyKGwsIGtleV9zaXplKTtcbitcdFx0cHB0ciA9IGh0YWJfZWxlbV9nZXRfcHRyKGh0YWIsIGwpO1xuIFx0XHRmb3JfZWFjaF9wb3NzaWJsZV9jcHUoY3B1KSB7XG4gXHRcdFx0Y29weV9tYXBfdmFsdWVfbG9uZyhcdTAwMjZodGFiLVx1MDAzZW1hcCwgdmFsdWUgKyBvZmYsIHBlcl9jcHVfcHRyKHBwdHIsIGNwdSkpO1xuIFx0XHRcdGNoZWNrX2FuZF9pbml0X21hcF92YWx1ZShcdTAwMjZodGFiLVx1MDAzZW1hcCwgdmFsdWUgKyBvZmYpO1xuIFx0XHRcdG9mZiArPSByb3VuZHVwX3ZhbHVlX3NpemU7XG4gXHRcdH1cbiBcdH0gZWxzZSB7XG4tXHRcdHZvaWQgKnNyYyA9IGh0YWJfZWxlbV92YWx1ZShsLCBtYXAtXHUwMDNla2V5X3NpemUpO1xuK1x0XHR2b2lkICpzcmMgPSBodGFiX2VsZW1fdmFsdWUoaHRhYiwgbCk7XG4gXG4gXHRcdGlmIChmbGFncyBcdTAwMjYgQlBGX0ZfTE9DSylcbiBcdFx0XHRjb3B5X21hcF92YWx1ZV9sb2NrZWQobWFwLCB2YWx1ZSwgc3JjLCB0cnVlKTtcbkBAIC0xODk4LDEzICsyMDEwLDEzIEBAIF9faHRhYl9tYXBfbG9va3VwX2FuZF9kZWxldGVfYmF0Y2goc3RydWN0IGJwZl9tYXAgKm1hcCxcbiBcdFx0Z290byBuZXh0X2JhdGNoO1xuIFxuIFx0aGxpc3RfbnVsbHNfZm9yX2VhY2hfZW50cnlfc2FmZShsLCBuLCBoZWFkLCBoYXNoX25vZGUpIHtcbi1cdFx0bWVtY3B5KGRzdF9rZXksIGwtXHUwMDNla2V5LCBrZXlfc2l6ZSk7XG4rXHRcdG1lbWNweShkc3Rfa2V5LCBodGFiX2VsZW1fa2V5KGh0YWIsIGwpLCBrZXlfc2l6ZSk7XG4gXG4gXHRcdGlmIChpc19wZXJjcHUpIHtcbiBcdFx0XHRpbnQgb2ZmID0gMCwgY3B1O1xuIFx0XHRcdHZvaWQgX19wZXJjcHUgKnBwdHI7XG4gXG4tXHRcdFx0cHB0ciA9IGh0YWJfZWxlbV9nZXRfcHRyKGwsIG1hcC1cdTAwM2VrZXlfc2l6ZSk7XG4rXHRcdFx0cHB0ciA9IGh0YWJfZWxlbV9nZXRfcHRyKGh0YWIsIGwpO1xuIFx0XHRcdGlmIChlbGVtX21hcF9mbGFncyBcdTAwMjYgQlBGX0ZfQ1BVKSB7XG4gXHRcdFx0XHRjcHUgPSBlbGVtX21hcF9mbGFncyBcdTAwM2VcdTAwM2UgMzI7XG4gXHRcdFx0XHRjb3B5X21hcF92YWx1ZShcdTAwMjZodGFiLVx1MDAzZW1hcCwgZHN0X3ZhbCwgcGVyX2NwdV9wdHIocHB0ciwgY3B1KSk7XG5AQCAtMTkxOCw3ICsyMDMwLDcgQEAgX19odGFiX21hcF9sb29rdXBfYW5kX2RlbGV0ZV9iYXRjaChzdHJ1Y3QgYnBmX21hcCAqbWFwLFxuIFx0XHRcdFx0fVxuIFx0XHRcdH1cbiBcdFx0fSBlbHNlIHtcbi1cdFx0XHR2YWx1ZSA9IGh0YWJfZWxlbV92YWx1ZShsLCBrZXlfc2l6ZSk7XG4rXHRcdFx0dmFsdWUgPSBodGFiX2VsZW1fdmFsdWUoaHRhYiwgbCk7XG4gXHRcdFx0aWYgKGlzX2ZkX2h0YWIoaHRhYikpIHtcbiBcdFx0XHRcdHN0cnVjdCBicGZfbWFwICoqaW5uZXJfbWFwID0gdmFsdWU7XG4gXG5AQCAtMjE4MywxMiArMjI5NSwxMiBAQCBzdGF0aWMgaW50IF9fYnBmX2hhc2hfbWFwX3NlcV9zaG93KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCBzdHJ1Y3QgaHRhYl9lbGVtICplbGVtKVxuIFx0XHRjdHgubWV0YSA9IFx1MDAyNm1ldGE7XG4gXHRcdGN0eC5tYXAgPSBpbmZvLVx1MDAzZW1hcDtcbiBcdFx0aWYgKGVsZW0pIHtcbi1cdFx0XHRjdHgua2V5ID0gZWxlbS1cdTAwM2VrZXk7XG4rXHRcdFx0Y3R4LmtleSA9IGh0YWJfZWxlbV9rZXkoaW5mby1cdTAwM2VodGFiLCBlbGVtKTtcbiBcdFx0XHRpZiAoIWluZm8tXHUwMDNlcGVyY3B1X3ZhbHVlX2J1Zikge1xuLVx0XHRcdFx0Y3R4LnZhbHVlID0gaHRhYl9lbGVtX3ZhbHVlKGVsZW0sIG1hcC1cdTAwM2VrZXlfc2l6ZSk7XG4rXHRcdFx0XHRjdHgudmFsdWUgPSBodGFiX2VsZW1fdmFsdWUoaW5mby1cdTAwM2VodGFiLCBlbGVtKTtcbiBcdFx0XHR9IGVsc2Uge1xuIFx0XHRcdFx0cm91bmR1cF92YWx1ZV9zaXplID0gcm91bmRfdXAobWFwLVx1MDAzZXZhbHVlX3NpemUsIDgpO1xuLVx0XHRcdFx0cHB0ciA9IGh0YWJfZWxlbV9nZXRfcHRyKGVsZW0sIG1hcC1cdTAwM2VrZXlfc2l6ZSk7XG4rXHRcdFx0XHRwcHRyID0gaHRhYl9lbGVtX2dldF9wdHIoaW5mby1cdTAwM2VodGFiLCBlbGVtKTtcbiBcdFx0XHRcdGZvcl9lYWNoX3Bvc3NpYmxlX2NwdShjcHUpIHtcbiBcdFx0XHRcdFx0Y29weV9tYXBfdmFsdWVfbG9uZyhtYXAsIGluZm8tXHUwMDNlcGVyY3B1X3ZhbHVlX2J1ZiArIG9mZixcbiBcdFx0XHRcdFx0XHRcdCAgICBwZXJfY3B1X3B0cihwcHRyLCBjcHUpKTtcbkBAIC0yMjkzLDEzICsyNDA1LDEzIEBAIHN0YXRpYyBsb25nIGJwZl9mb3JfZWFjaF9oYXNoX2VsZW0oc3RydWN0IGJwZl9tYXAgKm1hcCwgYnBmX2NhbGxiYWNrX3QgY2FsbGJhY2tfXG4gXHRcdHJjdV9yZWFkX2xvY2soKTtcbiBcdFx0aGVhZCA9IFx1MDAyNmItXHUwMDNlaGVhZDtcbiBcdFx0aGxpc3RfbnVsbHNfZm9yX2VhY2hfZW50cnlfc2FmZShlbGVtLCBuLCBoZWFkLCBoYXNoX25vZGUpIHtcbi1cdFx0XHRrZXkgPSBlbGVtLVx1MDAzZWtleTtcbitcdFx0XHRrZXkgPSBodGFiX2VsZW1fa2V5KGh0YWIsIGVsZW0pO1xuIFx0XHRcdGlmIChpc19wZXJjcHUpIHtcbiBcdFx0XHRcdC8qIGN1cnJlbnQgY3B1IHZhbHVlIGZvciBwZXJjcHUgbWFwICovXG4tXHRcdFx0XHRwcHRyID0gaHRhYl9lbGVtX2dldF9wdHIoZWxlbSwgbWFwLVx1MDAzZWtleV9zaXplKTtcbitcdFx0XHRcdHBwdHIgPSBodGFiX2VsZW1fZ2V0X3B0cihodGFiLCBlbGVtKTtcbiBcdFx0XHRcdHZhbCA9IHRoaXNfY3B1X3B0cihwcHRyKTtcbiBcdFx0XHR9IGVsc2Uge1xuLVx0XHRcdFx0dmFsID0gaHRhYl9lbGVtX3ZhbHVlKGVsZW0sIG1hcC1cdTAwM2VrZXlfc2l6ZSk7XG4rXHRcdFx0XHR2YWwgPSBodGFiX2VsZW1fdmFsdWUoaHRhYiwgZWxlbSk7XG4gXHRcdFx0fVxuIFx0XHRcdG51bV9lbGVtcysrO1xuIFx0XHRcdHJldCA9IGNhbGxiYWNrX2ZuKCh1NjQpKGxvbmcpbWFwLCAodTY0KShsb25nKWtleSxcbkBAIC0yNDAzLDEwICsyNTE1LDExIEBAIGNvbnN0IHN0cnVjdCBicGZfbWFwX29wcyBodGFiX2xydV9tYXBfb3BzID0ge1xuIC8qIENhbGxlZCBmcm9tIGVCUEYgcHJvZ3JhbSAqL1xuIHN0YXRpYyB2b2lkICpodGFiX3BlcmNwdV9tYXBfbG9va3VwX2VsZW0oc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5KVxuIHtcbitcdHN0cnVjdCBicGZfaHRhYiAqaHRhYiA9IGNvbnRhaW5lcl9vZihtYXAsIHN0cnVjdCBicGZfaHRhYiwgbWFwKTtcbiBcdHN0cnVjdCBodGFiX2VsZW0gKmwgPSBfX2h0YWJfbWFwX2xvb2t1cF9lbGVtKG1hcCwga2V5KTtcbiBcbiBcdGlmIChsKVxuLVx0XHRyZXR1cm4gdGhpc19jcHVfcHRyKGh0YWJfZWxlbV9nZXRfcHRyKGwsIG1hcC1cdTAwM2VrZXlfc2l6ZSkpO1xuK1x0XHRyZXR1cm4gdGhpc19jcHVfcHRyKGh0YWJfZWxlbV9nZXRfcHRyKGh0YWIsIGwpKTtcbiBcdGVsc2VcbiBcdFx0cmV0dXJuIE5VTEw7XG4gfVxuQEAgLTI0MTQsNiArMjUyNyw3IEBAIHN0YXRpYyB2b2lkICpodGFiX3BlcmNwdV9tYXBfbG9va3VwX2VsZW0oc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5KVxuIC8qIGlubGluZSBicGZfbWFwX2xvb2t1cF9lbGVtKCkgY2FsbCBmb3IgcGVyLUNQVSBoYXNobWFwICovXG4gc3RhdGljIGludCBodGFiX3BlcmNwdV9tYXBfZ2VuX2xvb2t1cChzdHJ1Y3QgYnBmX21hcCAqbWFwLCBzdHJ1Y3QgYnBmX2luc24gKmluc25fYnVmKVxuIHtcbitcdHN0cnVjdCBicGZfaHRhYiAqaHRhYiA9IGNvbnRhaW5lcl9vZihtYXAsIHN0cnVjdCBicGZfaHRhYiwgbWFwKTtcbiBcdHN0cnVjdCBicGZfaW5zbiAqaW5zbiA9IGluc25fYnVmO1xuIFxuIFx0aWYgKCFicGZfaml0X3N1cHBvcnRzX3BlcmNwdV9pbnNuKCkpXG5AQCAtMjQyNCw3ICsyNTM4LDcgQEAgc3RhdGljIGludCBodGFiX3BlcmNwdV9tYXBfZ2VuX2xvb2t1cChzdHJ1Y3QgYnBmX21hcCAqbWFwLCBzdHJ1Y3QgYnBmX2luc24gKmluc25cbiBcdCppbnNuKysgPSBCUEZfRU1JVF9DQUxMKF9faHRhYl9tYXBfbG9va3VwX2VsZW0pO1xuIFx0Kmluc24rKyA9IEJQRl9KTVBfSU1NKEJQRl9KRVEsIEJQRl9SRUdfMCwgMCwgMyk7XG4gXHQqaW5zbisrID0gQlBGX0FMVTY0X0lNTShCUEZfQURELCBCUEZfUkVHXzAsXG4tXHRcdFx0XHRvZmZzZXRvZihzdHJ1Y3QgaHRhYl9lbGVtLCBrZXkpICsgcm91bmR1cChtYXAtXHUwMDNla2V5X3NpemUsIDgpKTtcbitcdFx0XHRcdGh0YWItXHUwMDNla2V5X29mZnNldCArIHJvdW5kdXAobWFwLVx1MDAzZWtleV9zaXplLCA4KSk7XG4gXHQqaW5zbisrID0gQlBGX0xEWF9NRU0oQlBGX0RXLCBCUEZfUkVHXzAsIEJQRl9SRUdfMCwgMCk7XG4gXHQqaW5zbisrID0gQlBGX01PVjY0X1BFUkNQVV9SRUcoQlBGX1JFR18wLCBCUEZfUkVHXzApO1xuIFxuQEAgLTI0MzMsNiArMjU0Nyw3IEBAIHN0YXRpYyBpbnQgaHRhYl9wZXJjcHVfbWFwX2dlbl9sb29rdXAoc3RydWN0IGJwZl9tYXAgKm1hcCwgc3RydWN0IGJwZl9pbnNuICppbnNuXG4gXG4gc3RhdGljIHZvaWQgKmh0YWJfcGVyY3B1X21hcF9sb29rdXBfcGVyY3B1X2VsZW0oc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5LCB1MzIgY3B1KVxuIHtcbitcdHN0cnVjdCBicGZfaHRhYiAqaHRhYiA9IGNvbnRhaW5lcl9vZihtYXAsIHN0cnVjdCBicGZfaHRhYiwgbWFwKTtcbiBcdHN0cnVjdCBodGFiX2VsZW0gKmw7XG4gXG4gXHRpZiAoY3B1IFx1MDAzZT0gbnJfY3B1X2lkcylcbkBAIC0yNDQwLDE4ICsyNTU1LDE5IEBAIHN0YXRpYyB2b2lkICpodGFiX3BlcmNwdV9tYXBfbG9va3VwX3BlcmNwdV9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSxcbiBcbiBcdGwgPSBfX2h0YWJfbWFwX2xvb2t1cF9lbGVtKG1hcCwga2V5KTtcbiBcdGlmIChsKVxuLVx0XHRyZXR1cm4gcGVyX2NwdV9wdHIoaHRhYl9lbGVtX2dldF9wdHIobCwgbWFwLVx1MDAzZWtleV9zaXplKSwgY3B1KTtcbitcdFx0cmV0dXJuIHBlcl9jcHVfcHRyKGh0YWJfZWxlbV9nZXRfcHRyKGh0YWIsIGwpLCBjcHUpO1xuIFx0ZWxzZVxuIFx0XHRyZXR1cm4gTlVMTDtcbiB9XG4gXG4gc3RhdGljIHZvaWQgKmh0YWJfbHJ1X3BlcmNwdV9tYXBfbG9va3VwX2VsZW0oc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5KVxuIHtcbitcdHN0cnVjdCBicGZfaHRhYiAqaHRhYiA9IGNvbnRhaW5lcl9vZihtYXAsIHN0cnVjdCBicGZfaHRhYiwgbWFwKTtcbiBcdHN0cnVjdCBodGFiX2VsZW0gKmwgPSBfX2h0YWJfbWFwX2xvb2t1cF9lbGVtKG1hcCwga2V5KTtcbiBcbiBcdGlmIChsKSB7XG4tXHRcdGJwZl9scnVfbm9kZV9zZXRfcmVmKFx1MDAyNmwtXHUwMDNlbHJ1X25vZGUpO1xuLVx0XHRyZXR1cm4gdGhpc19jcHVfcHRyKGh0YWJfZWxlbV9nZXRfcHRyKGwsIG1hcC1cdTAwM2VrZXlfc2l6ZSkpO1xuK1x0XHRicGZfbHJ1X25vZGVfc2V0X3JlZihodGFiX2VsZW1fbHJ1X25vZGUobCkpO1xuK1x0XHRyZXR1cm4gdGhpc19jcHVfcHRyKGh0YWJfZWxlbV9nZXRfcHRyKGh0YWIsIGwpKTtcbiBcdH1cbiBcbiBcdHJldHVybiBOVUxMO1xuQEAgLTI0NTksNiArMjU3NSw3IEBAIHN0YXRpYyB2b2lkICpodGFiX2xydV9wZXJjcHVfbWFwX2xvb2t1cF9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSlcbiBcbiBzdGF0aWMgdm9pZCAqaHRhYl9scnVfcGVyY3B1X21hcF9sb29rdXBfcGVyY3B1X2VsZW0oc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5LCB1MzIgY3B1KVxuIHtcbitcdHN0cnVjdCBicGZfaHRhYiAqaHRhYiA9IGNvbnRhaW5lcl9vZihtYXAsIHN0cnVjdCBicGZfaHRhYiwgbWFwKTtcbiBcdHN0cnVjdCBodGFiX2VsZW0gKmw7XG4gXG4gXHRpZiAoY3B1IFx1MDAzZT0gbnJfY3B1X2lkcylcbkBAIC0yNDY2LDggKzI1ODMsOCBAQCBzdGF0aWMgdm9pZCAqaHRhYl9scnVfcGVyY3B1X21hcF9sb29rdXBfcGVyY3B1X2VsZW0oc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa1xuIFxuIFx0bCA9IF9faHRhYl9tYXBfbG9va3VwX2VsZW0obWFwLCBrZXkpO1xuIFx0aWYgKGwpIHtcbi1cdFx0YnBmX2xydV9ub2RlX3NldF9yZWYoXHUwMDI2bC1cdTAwM2VscnVfbm9kZSk7XG4tXHRcdHJldHVybiBwZXJfY3B1X3B0cihodGFiX2VsZW1fZ2V0X3B0cihsLCBtYXAtXHUwMDNla2V5X3NpemUpLCBjcHUpO1xuK1x0XHRicGZfbHJ1X25vZGVfc2V0X3JlZihodGFiX2VsZW1fbHJ1X25vZGUobCkpO1xuK1x0XHRyZXR1cm4gcGVyX2NwdV9wdHIoaHRhYl9lbGVtX2dldF9wdHIoaHRhYiwgbCksIGNwdSk7XG4gXHR9XG4gXG4gXHRyZXR1cm4gTlVMTDtcbkBAIC0yNDc1LDYgKzI1OTIsNyBAQCBzdGF0aWMgdm9pZCAqaHRhYl9scnVfcGVyY3B1X21hcF9sb29rdXBfcGVyY3B1X2VsZW0oc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa1xuIFxuIGludCBicGZfcGVyY3B1X2hhc2hfY29weShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXksIHZvaWQgKnZhbHVlLCB1NjQgbWFwX2ZsYWdzKVxuIHtcbitcdHN0cnVjdCBicGZfaHRhYiAqaHRhYiA9IGNvbnRhaW5lcl9vZihtYXAsIHN0cnVjdCBicGZfaHRhYiwgbWFwKTtcbiBcdHN0cnVjdCBodGFiX2VsZW0gKmw7XG4gXHR2b2lkIF9fcGVyY3B1ICpwcHRyO1xuIFx0aW50IHJldCA9IC1FTk9FTlQ7XG5AQCAtMjQ5NCw3ICsyNjEyLDcgQEAgaW50IGJwZl9wZXJjcHVfaGFzaF9jb3B5KHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSwgdm9pZCAqdmFsdWUsIHU2NCBtYXBfZmxcbiBcdC8qIFdlIGRvIG5vdCBtYXJrIExSVSBtYXAgZWxlbWVudCBoZXJlIGluIG9yZGVyIHRvIG5vdCBtZXNzIHVwXG4gXHQgKiBldmljdGlvbiBoZXVyaXN0aWNzIHdoZW4gdXNlciBzcGFjZSBkb2VzIGEgbWFwIHdhbGsuXG4gXHQgKi9cbi1cdHBwdHIgPSBodGFiX2VsZW1fZ2V0X3B0cihsLCBtYXAtXHUwMDNla2V5X3NpemUpO1xuK1x0cHB0ciA9IGh0YWJfZWxlbV9nZXRfcHRyKGh0YWIsIGwpO1xuIFx0aWYgKG1hcF9mbGFncyBcdTAwMjYgQlBGX0ZfQ1BVKSB7XG4gXHRcdGNwdSA9IG1hcF9mbGFncyBcdTAwM2VcdTAwM2UgMzI7XG4gXHRcdGNvcHlfbWFwX3ZhbHVlKG1hcCwgdmFsdWUsIHBlcl9jcHVfcHRyKHBwdHIsIGNwdSkpO1xuQEAgLTI1MzIsNiArMjY1MCw3IEBAIGludCBicGZfcGVyY3B1X2hhc2hfdXBkYXRlKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSwgdm9pZCAqdmFsdWUsXG4gc3RhdGljIHZvaWQgaHRhYl9wZXJjcHVfbWFwX3NlcV9zaG93X2VsZW0oc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5LFxuIFx0XHRcdFx0XHQgIHN0cnVjdCBzZXFfZmlsZSAqbSlcbiB7XG4rXHRzdHJ1Y3QgYnBmX2h0YWIgKmh0YWIgPSBjb250YWluZXJfb2YobWFwLCBzdHJ1Y3QgYnBmX2h0YWIsIG1hcCk7XG4gXHRzdHJ1Y3QgaHRhYl9lbGVtICpsO1xuIFx0dm9pZCBfX3BlcmNwdSAqcHB0cjtcbiBcdGludCBjcHU7XG5AQCAtMjU0Niw3ICsyNjY1LDcgQEAgc3RhdGljIHZvaWQgaHRhYl9wZXJjcHVfbWFwX3NlcV9zaG93X2VsZW0oc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5LFxuIFxuIFx0YnRmX3R5cGVfc2VxX3Nob3cobWFwLVx1MDAzZWJ0ZiwgbWFwLVx1MDAzZWJ0Zl9rZXlfdHlwZV9pZCwga2V5LCBtKTtcbiBcdHNlcV9wdXRzKG0sIFwiOiB7XFxuXCIpO1xuLVx0cHB0ciA9IGh0YWJfZWxlbV9nZXRfcHRyKGwsIG1hcC1cdTAwM2VrZXlfc2l6ZSk7XG4rXHRwcHRyID0gaHRhYl9lbGVtX2dldF9wdHIoaHRhYiwgbCk7XG4gXHRmb3JfZWFjaF9wb3NzaWJsZV9jcHUoY3B1KSB7XG4gXHRcdHNlcV9wcmludGYobSwgXCJcXHRjcHUlZDogXCIsIGNwdSk7XG4gXHRcdGJ0Zl90eXBlX3NlcV9zaG93KG1hcC1cdTAwM2VidGYsIG1hcC1cdTAwM2VidGZfdmFsdWVfdHlwZV9pZCxcbkBAIC0yNjIwLDcgKzI3MzksNyBAQCBzdGF0aWMgdm9pZCBmZF9odGFiX21hcF9mcmVlKHN0cnVjdCBicGZfbWFwICptYXApXG4gXHRcdGhlYWQgPSBzZWxlY3RfYnVja2V0KGh0YWIsIGkpO1xuIFxuIFx0XHRobGlzdF9udWxsc19mb3JfZWFjaF9lbnRyeV9zYWZlKGwsIG4sIGhlYWQsIGhhc2hfbm9kZSkge1xuLVx0XHRcdHZvaWQgKnB0ciA9IGZkX2h0YWJfbWFwX2dldF9wdHIobWFwLCBsKTtcbitcdFx0XHR2b2lkICpwdHIgPSBmZF9odGFiX21hcF9nZXRfcHRyKGh0YWIsIGwpO1xuIFxuIFx0XHRcdG1hcC1cdTAwM2VvcHMtXHUwMDNlbWFwX2ZkX3B1dF9wdHIobWFwLCBwdHIsIGZhbHNlKTtcbiBcdFx0fVxuQEAgLTI3MDUsNiArMjgyNCw3IEBAIHN0YXRpYyB2b2lkICpodGFiX29mX21hcF9sb29rdXBfZWxlbShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXkpXG4gc3RhdGljIGludCBodGFiX29mX21hcF9nZW5fbG9va3VwKHN0cnVjdCBicGZfbWFwICptYXAsXG4gXHRcdFx0XHQgIHN0cnVjdCBicGZfaW5zbiAqaW5zbl9idWYpXG4ge1xuK1x0c3RydWN0IGJwZl9odGFiICpodGFiID0gY29udGFpbmVyX29mKG1hcCwgc3RydWN0IGJwZl9odGFiLCBtYXApO1xuIFx0c3RydWN0IGJwZl9pbnNuICppbnNuID0gaW5zbl9idWY7XG4gXHRjb25zdCBpbnQgcmV0ID0gQlBGX1JFR18wO1xuIFxuQEAgLTI3MTMsNyArMjgzMyw3IEBAIHN0YXRpYyBpbnQgaHRhYl9vZl9tYXBfZ2VuX2xvb2t1cChzdHJ1Y3QgYnBmX21hcCAqbWFwLFxuIFx0Kmluc24rKyA9IEJQRl9FTUlUX0NBTEwoX19odGFiX21hcF9sb29rdXBfZWxlbSk7XG4gXHQqaW5zbisrID0gQlBGX0pNUF9JTU0oQlBGX0pFUSwgcmV0LCAwLCAyKTtcbiBcdCppbnNuKysgPSBCUEZfQUxVNjRfSU1NKEJQRl9BREQsIHJldCxcbi1cdFx0XHRcdG9mZnNldG9mKHN0cnVjdCBodGFiX2VsZW0sIGtleSkgK1xuK1x0XHRcdFx0aHRhYi1cdTAwM2VrZXlfb2Zmc2V0ICtcbiBcdFx0XHRcdHJvdW5kX3VwKG1hcC1cdTAwM2VrZXlfc2l6ZSwgOCkpO1xuIFx0Kmluc24rKyA9IEJQRl9MRFhfTUVNKEJQRl9EVywgcmV0LCByZXQsIDApO1xuIFxuQEAgLTMxMTIsNyArMzIzMiw3IEBAIHN0YXRpYyBpbnQgcmh0YWJfbWFwX2NoZWNrX2J0ZihzdHJ1Y3QgYnBmX21hcCAqbWFwLCBjb25zdCBzdHJ1Y3QgYnRmICpidGYsXG4ge1xuIFx0c3RydWN0IGJwZl9yaHRhYiAqcmh0YWIgPSBjb250YWluZXJfb2YobWFwLCBzdHJ1Y3QgYnBmX3JodGFiLCBtYXApO1xuIFxuLVx0cmV0dXJuIGJwZl9tYV9zZXRfZHRvcihtYXAsIFx1MDAyNnJodGFiLVx1MDAzZW1hLCByaHRhYl9tZW1fZHRvcik7XG4rXHRyZXR1cm4gYnBmX21hX3NldF9kdG9yKG1hcCwgXHUwMDI2cmh0YWItXHUwMDNlbWEsIHJodGFiX21lbV9kdG9yLCBvZmZzZXRvZihzdHJ1Y3Qgcmh0YWJfZWxlbSwgZGF0YSkpO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCByaHRhYl9tYXBfZnJlZV9pbnRlcm5hbF9zdHJ1Y3RzKHN0cnVjdCBicGZfbWFwICptYXApXG5AQCAtMzUzMywzICszNjUzLDE2IEBAIGNvbnN0IHN0cnVjdCBicGZfbWFwX29wcyByaHRhYl9tYXBfb3BzID0ge1xuIFx0Lm1hcF9idGZfaWQgPSBcdTAwMjZyaHRhYl9tYXBfYnRmX2lkc1swXSxcbiBcdC5pdGVyX3NlcV9pbmZvID0gXHUwMDI2cmhhc2hfaXRlcl9zZXFfaW5mbyxcbiB9O1xuK1xuK3NpemVfdCBicGZfaHRhYl9tYXBfbWV0YV9zaXplKHZvaWQpXG4re1xuK1x0cmV0dXJuIHNpemVvZihzdHJ1Y3QgYnBmX2h0YWIpO1xuK31cbitcbit2b2lkIGJwZl9odGFiX21hcF9tZXRhX2luaXQoc3RydWN0IGJwZl9tYXAgKmlubmVyX21hcF9tZXRhLCBzdHJ1Y3QgYnBmX21hcCAqaW5uZXJfbWFwKVxuK3tcbitcdHN0cnVjdCBicGZfaHRhYiAqaW5uZXJfaHRhYl9tZXRhID0gY29udGFpbmVyX29mKGlubmVyX21hcF9tZXRhLCBzdHJ1Y3QgYnBmX2h0YWIsIG1hcCk7XG4rXHRzdHJ1Y3QgYnBmX2h0YWIgKmlubmVyX2h0YWIgPSBjb250YWluZXJfb2YoaW5uZXJfbWFwLCBzdHJ1Y3QgYnBmX2h0YWIsIG1hcCk7XG4rXG4rXHRpbm5lcl9odGFiX21ldGEtXHUwMDNla2V5X29mZnNldCA9IGlubmVyX2h0YWItXHUwMDNla2V5X29mZnNldDtcbit9XG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9tYXBfaW5fbWFwLmMgYi9rZXJuZWwvYnBmL21hcF9pbl9tYXAuY1xuaW5kZXggZDJjYmFiNGJkZjY0NGEuLmIyZGI1ZDBjOThiZWUyIDEwMDY0NFxuLS0tIGEva2VybmVsL2JwZi9tYXBfaW5fbWFwLmNcbisrKyBiL2tlcm5lbC9icGYvbWFwX2luX21hcC5jXG5AQCAtNyw2ICs3LDE1IEBAXG4gXG4gI2luY2x1ZGUgXCJtYXBfaW5fbWFwLmhcIlxuIFxuK3N0YXRpYyBib29sIGJwZl9tYXBfdHlwZV9pc19odGFiKGVudW0gYnBmX21hcF90eXBlIHR5cGUpXG4re1xuK1x0cmV0dXJuIHR5cGUgPT0gQlBGX01BUF9UWVBFX0hBU0ggfHxcbitcdCAgICAgICB0eXBlID09IEJQRl9NQVBfVFlQRV9QRVJDUFVfSEFTSCB8fFxuK1x0ICAgICAgIHR5cGUgPT0gQlBGX01BUF9UWVBFX0xSVV9IQVNIIHx8XG4rXHQgICAgICAgdHlwZSA9PSBCUEZfTUFQX1RZUEVfTFJVX1BFUkNQVV9IQVNIIHx8XG4rXHQgICAgICAgdHlwZSA9PSBCUEZfTUFQX1RZUEVfSEFTSF9PRl9NQVBTO1xuK31cbitcbiBzdHJ1Y3QgYnBmX21hcCAqYnBmX21hcF9tZXRhX2FsbG9jKGludCBpbm5lcl9tYXBfdWZkKVxuIHtcbiBcdHN0cnVjdCBicGZfbWFwICppbm5lcl9tYXAsICppbm5lcl9tYXBfbWV0YTtcbkBAIC0yOSw2ICszOCw4IEBAIHN0cnVjdCBicGZfbWFwICpicGZfbWFwX21ldGFfYWxsb2MoaW50IGlubmVyX21hcF91ZmQpXG4gXHQvKiBJbiBzb21lIGNhc2VzIHZlcmlmaWVyIG5lZWRzIHRvIGFjY2VzcyBiZXlvbmQganVzdCBiYXNlIG1hcC4gKi9cbiBcdGlmIChpbm5lcl9tYXAtXHUwMDNlb3BzID09IFx1MDAyNmFycmF5X21hcF9vcHMgfHwgaW5uZXJfbWFwLVx1MDAzZW9wcyA9PSBcdTAwMjZwZXJjcHVfYXJyYXlfbWFwX29wcylcbiBcdFx0aW5uZXJfbWFwX21ldGFfc2l6ZSA9IHNpemVvZihzdHJ1Y3QgYnBmX2FycmF5KTtcbitcdGVsc2UgaWYgKGJwZl9tYXBfdHlwZV9pc19odGFiKGlubmVyX21hcC1cdTAwM2VtYXBfdHlwZSkpXG4rXHRcdGlubmVyX21hcF9tZXRhX3NpemUgPSBicGZfaHRhYl9tYXBfbWV0YV9zaXplKCk7XG4gXG4gXHRpbm5lcl9tYXBfbWV0YSA9IGt6YWxsb2MoaW5uZXJfbWFwX21ldGFfc2l6ZSwgR0ZQX1VTRVIpO1xuIFx0aWYgKCFpbm5lcl9tYXBfbWV0YSlcbkBAIC03MCw2ICs4MSw4IEBAIHN0cnVjdCBicGZfbWFwICpicGZfbWFwX21ldGFfYWxsb2MoaW50IGlubmVyX21hcF91ZmQpXG4gXHRcdGlubmVyX2FycmF5X21ldGEtXHUwMDNlaW5kZXhfbWFzayA9IGlubmVyX2FycmF5LVx1MDAzZWluZGV4X21hc2s7XG4gXHRcdGlubmVyX2FycmF5X21ldGEtXHUwMDNlZWxlbV9zaXplID0gaW5uZXJfYXJyYXktXHUwMDNlZWxlbV9zaXplO1xuIFx0XHRpbm5lcl9tYXBfbWV0YS1cdTAwM2VieXBhc3Nfc3BlY192MSA9IGlubmVyX21hcC1cdTAwM2VieXBhc3Nfc3BlY192MTtcbitcdH0gZWxzZSBpZiAoYnBmX21hcF90eXBlX2lzX2h0YWIoaW5uZXJfbWFwLVx1MDAzZW1hcF90eXBlKSkge1xuK1x0XHRicGZfaHRhYl9tYXBfbWV0YV9pbml0KGlubmVyX21hcF9tZXRhLCBpbm5lcl9tYXApO1xuIFx0fVxuIFx0cmV0dXJuIGlubmVyX21hcF9tZXRhO1xuIH1cbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL21hcF9pbl9tYXAuaCBiL2tlcm5lbC9icGYvbWFwX2luX21hcC5oXG5pbmRleCA3ZDYxNjAyMzU0ZGU4MC4uMWVkYzIwNTc3MmQ4Y2QgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvYnBmL21hcF9pbl9tYXAuaFxuKysrIGIva2VybmVsL2JwZi9tYXBfaW5fbWFwLmhcbkBAIC0xNSw1ICsxNSw3IEBAIHZvaWQgKmJwZl9tYXBfZmRfZ2V0X3B0cihzdHJ1Y3QgYnBmX21hcCAqbWFwLCBzdHJ1Y3QgZmlsZSAqbWFwX2ZpbGUsXG4gXHRcdFx0IGludCB1ZmQpO1xuIHZvaWQgYnBmX21hcF9mZF9wdXRfcHRyKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKnB0ciwgYm9vbCBuZWVkX2RlZmVyKTtcbiB1MzIgYnBmX21hcF9mZF9zeXNfbG9va3VwX2VsZW0odm9pZCAqcHRyKTtcbitzaXplX3QgYnBmX2h0YWJfbWFwX21ldGFfc2l6ZSh2b2lkKTtcbit2b2lkIGJwZl9odGFiX21hcF9tZXRhX2luaXQoc3RydWN0IGJwZl9tYXAgKmlubmVyX21hcF9tZXRhLCBzdHJ1Y3QgYnBmX21hcCAqaW5uZXJfbWFwKTtcbiBcbiAjZW5kaWZcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvbWFwX3B0cl9rZXJuLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvbWFwX3B0cl9rZXJuLmNcbmluZGV4IDM3M2M4ZDE3ZWE1NTdkLi42YmQ0Y2I2OGMyMGMxYyAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9tYXBfcHRyX2tlcm4uY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL21hcF9wdHJfa2Vybi5jXG5AQCAtMTE0LDcgKzExNCw3IEBAIHN0YXRpYyBpbmxpbmUgaW50IGNoZWNrX2hhc2godm9pZClcbiBcdFZFUklGWShjaGVja19kZWZhdWx0X25vaW5saW5lKFx1MDAyNmhhc2gtXHUwMDNlbWFwLCBtYXApKTtcbiBcbiBcdFZFUklGWShoYXNoLVx1MDAzZW5fYnVja2V0cyA9PSBNQVhfRU5UUklFUyk7XG4tXHRWRVJJRlkoaGFzaC1cdTAwM2VlbGVtX3NpemUgPT0gNjQpO1xuK1x0VkVSSUZZKGhhc2gtXHUwMDNlZWxlbV9zaXplID09IDMyKTtcbiBcbiBcdFZFUklGWShoYXNoLVx1MDAzZWNvdW50LmNvdW50ZXIgPT0gMCk7XG4gXHRWRVJJRlkoYnBmX21hcF9zdW1fZWxlbV9jb3VudChtYXApID09IDApO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjNUMjI6Mzg6NDMuMzAzMTA0NjI0WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODcyODA4ODQ1MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEJQRiBIYXNoIFRhYmxlIE9wdGltaXphdGlvbiBQYXRjaCoqXG5cbk9rYXksIHNvIEkndmUgZ290IHRoaXMgcGF0Y2gg4oCTIHNlZW1zIGxpa2UgYSBwcmV0dHkgc2lnbmlmaWNhbnQgb25lIOKAkyB0b3VjaGluZyBga2VybmVsL2JwZi9oYXNodGFiLmNgIGFuZCBga2VybmVsL2JwZi9tYXBfaW5fbWFwLmNgLiBGcm9tIHRoZSBkZXNjcmlwdGlvbiwgaXQgbG9va3MgbGlrZSB0aGV5J3JlIG9wdGltaXppbmcgdGhlIG1lbW9yeSBsYXlvdXQgb2YgQlBGIGhhc2ggdGFibGVzLCBzcGxpdHRpbmcgYHN0cnVjdCBodGFiX2VsZW1gIGludG8gbXVsdGlwbGUgc3BlY2lhbGl6ZWQgc3RydWN0dXJlcyAoYGh0YWJfZWxlbWAsIGBodGFiX2VsZW1fbHJ1YCwgYGh0YWJfZWxlbV9wY3B1YCkgYW5kIGFsc28gYWRkaW5nIGBrZXlfb2Zmc2V0YCB0byBgc3RydWN0IGJwZl9odGFiYC4gVGhpcyBpcyBhICpmdW5jdGlvbmFsKiBjaGFuZ2UgdG8gdGhlIGNvcmUgaGFzaCBtYXAgaW1wbGVtZW50YXRpb24sIGFuZCB0aGF0IGltbWVkaWF0ZWx5IHRlbGxzIG1lIHdlIG5lZWQgdG8gdHJlYXQgdGhpcyBhcyBoaWdoLXByaW9yaXR5IGZvciBmdXp6aW5nLiBJdCdzIGEgcHJpbWUgdGFyZ2V0IGZvciB1bmNvdmVyaW5nIHN1YnRsZSBtZW1vcnkgY29ycnVwdGlvbiBvciBjb25jdXJyZW5jeSBpc3N1ZXMuXG5cbk15IGltbWVkaWF0ZSBuZXh0IHN0ZXAgaXMgdG8gZHJpbGwgZG93biBpbnRvIHRoZSBkZXRhaWxzIG9mIHRoZSBjb2RlLiBMZXQncyBzZWUgd2hhdCdzIGJlZW4gYWRkZWQsIG1vZGlmaWVkLCBvciBjaGFuZ2VkLiBJJ20gZ29pbmcgdG8gbG9vayBjbG9zZWx5IGF0IHRoZXNlIG5ldyBvciBjaGFuZ2VkIGZ1bmN0aW9uczogYGh0YWJfZWxlbV9scnVfbm9kZWAsIGBodGFiX2VsZW1fZ2V0X3B0cl90b19wcHRyYCwgYGh0YWJfZWxlbV9zZXRfcHRyX3RvX3BwdHJgLCBgaHRhYl9lbGVtX2tleWAsIGBodGFiX2VsZW1fdmFsdWVgLCBgaHRhYl9lbGVtX3NldF9wdHJgLCBgaHRhYl9lbGVtX2dldF9wdHJgLCBgZmRfaHRhYl9tYXBfZ2V0X3B0cmAsIGBodGFiX2hhc19oYXNoYCwgYGh0YWJfZWxlbV9oYXNoYCwgYGh0YWJfZWxlbV9zZXRfaGFzaGAsIGBodGFiX21hcF9hbGxvY19jaGVja2AsIGBodGFiX21hcF9hbGxvY2AsIGBodGFiX21hcF9nZW5fbG9va3VwYCwgYGh0YWJfbHJ1X21hcF9nZW5fbG9va3VwYCwgYGh0YWJfbWFwX3VwZGF0ZV9lbGVtYCwgYGh0YWJfbHJ1X21hcF91cGRhdGVfZWxlbWAsIGBfX2h0YWJfbHJ1X3BlcmNwdV9tYXBfdXBkYXRlX2VsZW1gLCBgaHRhYl9tYXBfZGVsZXRlX2VsZW1gLCBgaHRhYl9scnVfbWFwX2RlbGV0ZV9lbGVtYCwgYF9faHRhYl9tYXBfbG9va3VwX2FuZF9kZWxldGVfZWxlbWAsIGBfX2h0YWJfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2JhdGNoYCwgYGJwZl9wZXJjcHVfaGFzaF9jb3B5YCwgYGh0YWJfb2ZfbWFwX2dlbl9sb29rdXBgLCBgYnBmX2h0YWJfbWFwX21ldGFfc2l6ZWAsIGBicGZfaHRhYl9tYXBfbWV0YV9pbml0YCwgYW5kIGBicGZfbWFwX21ldGFfYWxsb2NgLiBBbnkgb25lIG9mIHRoZXNlLCBpZiBtaXNoYW5kbGVkLCBjb3VsZCBoYXZlIHNpZ25pZmljYW50IHNlY3VyaXR5IGltcGxpY2F0aW9ucy5cblxuTm93LCBsZXQncyBuYWlsIGRvd24gdGhlIGNvbmZpZ3VyYXRpb24gZGVwZW5kZW5jaWVzLiBgQ09ORklHX0JQRl9TWVNDQUxMYCB3aWxsIGJlIHRoZSBwcmltYXJ5IGVuYWJsZXIgZm9yIEJQRiwgb2YgY291cnNlLiBHaXZlbiB0aGUgZm9jdXMgb24gaGFzaCBtYXBzLCBJJ20gZ29pbmcgdG8gcXVpY2tseSBjaGVjayBpZiB0aGVyZSBhcmUgYW55IHNwZWNpZmljIGNvbmZpZ3VyYXRpb24gZmxhZ3MgZm9yIEJQRiBoYXNoIG1hcHMgdGhlbXNlbHZlcy4gTm8gZGVkaWNhdGVkIGNvbmZpZyBvcHRpb25zLCB3aGljaCBtYWtlcyBzZW5zZSAtIHRoZSBoYXNoIHRhYmxlIGltcGxlbWVudGF0aW9uIGlzIGNvcmUgQlBGLlxuXG5JIG5lZWQgdG8gY29uZmlybSB0aGVzZSBmdW5jdGlvbnMnIGludGVyYWN0aW9ucyB3aXRoIHRoZSBleGlzdGluZyBCUEYgaGFzaCBtYXAgaW5mcmFzdHJ1Y3R1cmUuIFRpbWUgdG8gc2VhcmNoIHRoZSBzb3VyY2UgZm9yIGBCUEZfTUFQX1RZUEVfSEFTSGAgYW5kIGBCUEZfTUFQX1RZUEVfTFJVX0hBU0hgIHdpdGhpbiBga2VybmVsL2JwZi9oYXNodGFiLmNgIHRvIHNlZSBob3cgdGhvc2UgbWFwIHR5cGVzIGFyZSBpbnRlZ3JhdGVkIHdpdGggdGhlIG5ldyBjb2RlLiBUaGlzIHdpbGwgaGVscCB1bmRlcnN0YW5kIHRoZSBicmVhZHRoIG9mIGltcGFjdCBvZiB0aGlzIGNoYW5nZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTg1NzIsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1ODMsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yM1QyMjozODo1Mi4wMzExOTU2MjdaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mjc0NjA2NzMxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkJQRl9NQVBfVFlQRV9IQVNIXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9icGYvaGFzaHRhYi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvaGFzaHRhYi5jPTIyNT1zdGF0aWMgaW5saW5lIGJvb2wgaXNfZmRfaHRhYihjb25zdCBzdHJ1Y3QgYnBmX2h0YWIgKmh0YWIpXFxua2VybmVsL2JwZi9oYXNodGFiLmMtMjI2LXtcXG5rZXJuZWwvYnBmL2hhc2h0YWIuYzoyMjc6XFx0cmV0dXJuIGh0YWItXFx1MDAzZW1hcC5tYXBfdHlwZSA9PSBCUEZfTUFQX1RZUEVfSEFTSF9PRl9NQVBTO1xcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTIyOC19XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIzVDIyOjM4OjUyLjMwNTgwNzg0OFoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQwMjE5MTI4MDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqSW52ZXN0aWdhdGluZyBQb3RlbnRpYWwgQlBGIENvbmZpZ3VyYXRpb24gTnVhbmNlcyoqXG5cbk9rYXksIGJlZm9yZSBJIGRpdmUgdG9vIGRlZXAgaW50byB0aGUgaW1wbGljYXRpb25zIGhlcmUsIEkgbmVlZCB0byB0YWtlIGEgcXVpY2sgcGVlayBhdCB0aGUgQlBGIGludGVybmFscy4gU3BlY2lmaWNhbGx5LCBJIHNob3VsZCBjaGVjayBga2VybmVsL2JwZi9oYXNodGFiLmNgIGFuZCBga2VybmVsL2JwZi9tYXBfaW5fbWFwLmNgLiBUaG9zZSBmaWxlcyBhcmUgbGlrZWx5IHRvIGNvbnRhaW4gdGhlIGNydWNpYWwgbG93LWxldmVsIGRldGFpbHMgcmVnYXJkaW5nIHBvdGVudGlhbCBjb25maWd1cmF0aW9ucyBvciBsaW1pdGF0aW9ucyB0aGF0IEkgbmVlZCB0byBiZSBhd2FyZSBvZi4gSSdtIGxvb2tpbmcgZm9yIGFueSBzcGVjaWZpYyBjb25maWd1cmF0aW9ucyB0aGF0IG1pZ2h0IGltcGFjdCB0aGUgYmVoYXZpb3Igb3IgcGVyZm9ybWFuY2UgSSdtIGNvbnNpZGVyaW5nLiBHb3R0YSBtYWtlIHN1cmUgSSdtIG5vdCBvdmVybG9va2luZyBzb21lIHN1YnRsZSBkZXRhaWwgYnVyaWVkIHdpdGhpbiB0aG9zZSBpbXBsZW1lbnRhdGlvbnMuIFRoYXQgbGV2ZWwgb2YgZGV0YWlsIGlzIGNyaXRpY2FsIGZvciBmdWxseSB1bmRlcnN0YW5kaW5nIHRoZSBsYW5kc2NhcGUgaGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjAwMjEsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yM1QyMjozODo1Ni4zMjc3MjQ1MzhaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjY1MzYwMzcxLCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJDT05GSUdfXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9icGYvaGFzaHRhYi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yM1QyMjozODo1Ni41OTMxMjI3MDlaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyOTE5OTY2NTY3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgY29uc2lkZXJpbmcgdGhpcyBteXNlbGY6XG5cbioqSW52ZXN0aWdhdGluZyBDb25maWd1cmF0aW9uIERlcGVuZGVuY2llcyoqXG5cbk9rYXksIGl0IHNlZW1zIHRoZXJlIGFyZSBubyBzcGVjaWZpYyBjb25maWd1cmF0aW9uIGRldGFpbHMgZXhwbGljaXRseSBkZWZpbmVkIHdpdGhpbiBgaGFzaHRhYi5jYC4gVGhhdCdzIG5vdCBlbnRpcmVseSB1bmV4cGVjdGVkLCBkZXBlbmRpbmcgb24gdGhlIHN5c3RlbSBkZXNpZ24sIGJ1dCBzdGlsbCBnb29kIHRvIGNvbmZpcm0uIE5vdywgaWYgdGhlIGNvbmZpZ3VyYXRpb24gaXNuJ3QgaW4gdGhlIG9idmlvdXMgcGxhY2UsIHdoZXJlIGVsc2UgY291bGQgaXQgYmU/IFRoZSBzdHJ1Y3R1cmUgb2Z0ZW4gZGljdGF0ZXMgdGhlIG9yZ2FuaXphdGlvbiBvZiBjb2RlLiBNeSBpbnN0aW5jdHMgYXJlIHRlbGxpbmcgbWUgdG8gbG9vayBhdCBgbWFwX2luX21hcC5jYC4gSXQncyBwb3NzaWJsZSB0aGF0IHRoZSBjb25maWd1cmF0aW9uIHBhcmFtZXRlcnMgYXJlIHNvbWVob3cgbWFuYWdlZCB3aXRoaW4gdGhlIG5lc3RlZCBtYXAgc3RydWN0dXJlIGl0c2VsZiwgb3IgYXQgbGVhc3QgcmVmZXJlbmNlZCBmcm9tIHRoZXJlLiBMZXQncyBzZWUgd2hhdCB3ZSBjYW4gZGlnIHVwIHRoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDI2NywiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIzVDIyOjM4OjU5LjUxMzA5MTc1NloiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDA2NDM1ODAsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkNPTkZJR19cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2JwZi9tYXBfaW5fbWFwLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIzVDIyOjM4OjU5LjY1Mzc0MjQzNloiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE0Mzc3Nzk0NzM5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBCUEYgSGFzaCBNYXAgT3BlcmF0aW9ucyBmb3IgRnV6emluZyoqXG5cbk9rYXksIGZpcnN0IHRoaW5ncyBmaXJzdCwgdGhpcyBpcyBkZWZpbml0ZWx5IHJlbGF0ZWQgdG8gYENPTkZJR19CUEZfU1lTQ0FMTGAsIHRoYXQncyB0aGUga2V5IGVuYWJsaW5nIGNvbmZpZ3VyYXRpb24uIExldCdzIGRpZyBpbiBhbmQgZmlndXJlIG91dCB0aGUgbW9zdCBpbXBvcnRhbnQgZnVuY3Rpb25zIHRvIHRhcmdldCBmb3IgZnV6emluZy4gVGhpcyBwYXRjaCBpcyBjbGVhcmx5IHRvdWNoaW5nIEJQRiBoYXNoIG1hcCBvcGVyYXRpb25zLlxuXG5NeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZ3JhYiBhbGwgdGhlIHJlbGV2YW50IGZ1bmN0aW9ucywgYW5kIHRoZW4gcmVmaW5lLiBJJ2xsIG5lZWQgdG8gZm9jdXMgb246IGBodGFiX21hcF9hbGxvY2AsIGBodGFiX21hcF91cGRhdGVfZWxlbWAsIGBodGFiX2xydV9tYXBfdXBkYXRlX2VsZW1gLCBgX19odGFiX2xydV9wZXJjcHVfbWFwX3VwZGF0ZV9lbGVtYCwgYGh0YWJfbWFwX2RlbGV0ZV9lbGVtYCwgYGh0YWJfbHJ1X21hcF9kZWxldGVfZWxlbWAsIGBfX2h0YWJfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2VsZW1gLCBgX19odGFiX21hcF9sb29rdXBfYW5kX2RlbGV0ZV9iYXRjaGAsIGBicGZfbWFwX21ldGFfYWxsb2NgLCBhbmQgdGhlIHZhcmlvdXMgbG9va3VwIGZ1bmN0aW9uczogYGh0YWJfbWFwX2dlbl9sb29rdXBgLCBgaHRhYl9scnVfbWFwX2dlbl9sb29rdXBgLCBgaHRhYl9wZXJjcHVfbWFwX2dlbl9sb29rdXBgLCBhbmQgYGh0YWJfb2ZfbWFwX2dlbl9sb29rdXBgLiBUaGVzZSBzZWVtIGxpa2UgdGhlIGNvcmUgZW50cnkgcG9pbnRzIGZvciB0aGUgY2hhbmdlcy5cblxuQWxyaWdodCwgSSdtIGdvaW5nIHRvIHJlZmluZSB0aGF0IGxpc3QgYSBsaXR0bGUuIFdhaXQsIEkgcmVtZW1iZXIgdGhhdCBgaHRhYl9tYXBfdXBkYXRlX2VsZW1gIGlzIGEgcHJldHR5IGltcG9ydGFudCBob3QtcGF0aCBmdW5jdGlvbiwgdGhlIHNwZWNpZmljIGltcGxlbWVudGF0aW9uIGZvciBoYXNoIG1hcHMsIHNvIGl0J3MgYSBwcmltZSB0YXJnZXQsIGVzcGVjaWFsbHkgY29uc2lkZXJpbmcgZnV6emluZyBCUEYgbWFwIG9wZXJhdGlvbnMgaXMgc3RhbmRhcmQgcHJhY3RpY2UuXG5cbkFmdGVyIHRoYXQgaW5pdGlhbCBsaXN0IEknbGwga2VlcCB0aGUgb25lcyBJJ3ZlIGxpc3RlZCBwcmV2aW91c2x5IGFuZCBmb2N1cyBvbiB0aGUgYGJwZl9tYXBfbWV0YV9hbGxvY2AgYmVjYXVzZSB0aGF0IGNvdWxkIGJlIGEgc2lnbmlmaWNhbnQgY2hhbmdlIGFuZCB0aHVzIGEgcG90ZW50aWFsIHRhcmdldCBmb3IgZnV6emluZy5cblxuTm93LCBsZXQncyBzZWUsIGBodGFiX21hcF91cGRhdGVfZWxlbWAgaXMgc3RhdGljLCB3aGljaCBpcyB1c3VhbGx5IG5vdCBpZGVhbCBmb3IgZnV6emluZy4gSG93ZXZlciwgaXQncyBhc3NpZ25lZCB0byBgbWFwX29wc2AsIHNvIFN5emthbGxlciAqc2hvdWxkKiBiZSBhYmxlIHRvIHRhcmdldCBpdCB0aHJvdWdoIHRoZSBgYnBmKClgIHN5c2NhbGwuIFllcywgYEZvY3VzU3ltYm9sc2AgYXJlIHNwZWNpZmljYWxseSB0aG9zZSB0aGF0IGNhbiBiZSB0YXJnZXRlZCBieSBzeXprYWxsZXIgb3IgYXJlIGNyaXRpY2FsIGZvciBjb3ZlcmFnZS5cblxuU28sIHRoZSBkZWZpbml0aXZlIGxpc3QgZm9yIG15IGFuYWx5c2lzIG5vdyBpbmNsdWRlczogYGh0YWJfbWFwX2FsbG9jYCwgYGh0YWJfbWFwX3VwZGF0ZV9lbGVtYCwgYGh0YWJfbHJ1X21hcF91cGRhdGVfZWxlbWAsIGBfX2h0YWJfbHJ1X3BlcmNwdV9tYXBfdXBkYXRlX2VsZW1gLCBgaHRhYl9tYXBfZGVsZXRlX2VsZW1gLCBgaHRhYl9scnVfbWFwX2RlbGV0ZV9lbGVtYCwgYF9faHRhYl9tYXBfbG9va3VwX2FuZF9kZWxldGVfZWxlbWAsIGBfX2h0YWJfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2JhdGNoYCwgYGJwZl9tYXBfbWV0YV9hbGxvY2AsIGBodGFiX21hcF9nZW5fbG9va3VwYCwgYGh0YWJfbHJ1X21hcF9nZW5fbG9va3VwYCwgYGh0YWJfcGVyY3B1X21hcF9nZW5fbG9va3VwYCwgYW5kIGBodGFiX29mX21hcF9nZW5fbG9va3VwYC4gSSdsbCBtYWtlIHN1cmUgdG8gbm90ZSB0aGVzZS5cblxuSnVzdCB2ZXJpZnlpbmcgdGhhdCBgaHRhYl9tYXBfZ2VuX2xvb2t1cGAgaXMgaW5kZWVkIHByZXNlbnQgaW4gdGhlIGRpZmYuIEdvb2QuXG5cblllcywgdGhpcyBpcyBkZWZpbml0ZWx5IHdvcnRoIGZ1enppbmcuIFRoZSBwYXRjaCBpcyBjaGFuZ2luZyB0aGUgbWVtb3J5IGxheW91dCBhbmQgb3BlcmF0aW9ucyBvZiBCUEYgaGFzaCBtYXBzLCBpbmNsdWRpbmcgdGhlIExSVSBhbmQgcGVyLUNQVSB2YXJpYW50cy4gSXQgaW50cm9kdWNlcyBuZXcgc3RydWN0dXJlcyBhbmQgb2Zmc2V0cyB3aGljaCBpbiB0dXJuIGFmZmVjdHMgY3J1Y2lhbCBvcGVyYXRpb25zIGxpa2UgYWxsb2NhdGlvbiwgdXBkYXRlcywgZGVsZXRpb25zLCBhbmQgSklUIGxvb2t1cCBnZW5lcmF0aW9uLiBGdXp6aW5nIGlzIGVzc2VudGlhbCBoZXJlIHRvIGVuc3VyZSBtZW1vcnkgc2FmZXR5IGFuZCB0aGUgY29ycmVjdG5lc3Mgb2YgdGhlc2UgY29yZSBCUEYgbWFwIG9wZXJhdGlvbnMgZ2l2ZW4gdGhlIHN1YnN0YW50aWFsIGNoYW5nZXMuXG5cbk15IGZpbmFsIHNldHRpbmdzIHdpbGwgYmU6IGBXb3J0aEZ1enppbmc6IHRydWVgLCBgRW5hYmxlQ29uZmlnczogW1wiQlBGX1NZU0NBTExcIl1gLCBgRm9jdXNTeW1ib2xzOiBbXCJodGFiX21hcF9hbGxvY1wiLCBcImh0YWJfbWFwX3VwZGF0ZV9lbGVtXCIsIFwiaHRhYl9scnVfbWFwX3VwZGF0ZV9lbGVtXCIsIFwiX19odGFiX2xydV9wZXJjcHVfbWFwX3VwZGF0ZV9lbGVtXCIsIFwiaHRhYl9tYXBfZGVsZXRlX2VsZW1cIiwgXCJodGFiX2xydV9tYXBfZGVsZXRlX2VsZW1cIiwgXCJfX2h0YWJfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2VsZW1cIiwgXCJfX2h0YWJfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2JhdGNoXCIsIFwiYnBmX21hcF9tZXRhX2FsbG9jXCIsIFwiaHRhYl9tYXBfZ2VuX2xvb2t1cFwiLCBcImh0YWJfbHJ1X21hcF9nZW5fbG9va3VwXCIsIFwiaHRhYl9wZXJjcHVfbWFwX2dlbl9sb29rdXBcIiwgXCJodGFiX29mX21hcF9nZW5fbG9va3VwXCJdYCwgYW5kIGBSZWFzb25pbmc6IFwiVGhlIHBhdGNoIGZ1bmN0aW9uYWxseSBtb2RpZmllcyB0aGUgbWVtb3J5IGxheW91dCBhbmQgb3BlcmF0aW9ucyBvZiBCUEYgaGFzaCBtYXBzIChpbmNsdWRpbmcgTFJVIGFuZCBwZXItQ1BVIHZhcmlhbnRzKS4gSXQgaW50cm9kdWNlcyBuZXcgc3RydWN0dXJlcyBhbmQgb2Zmc2V0cyBmb3IgaGFzaCBtYXAgZWxlbWVudHMsIHdoaWNoIGFmZmVjdHMgYWxsb2NhdGlvbiwgdXBkYXRlcywgZGVsZXRpb25zLCBhbmQgSklUIGxvb2t1cCBnZW5lcmF0aW9uLiBGdXp6aW5nIGlzIG5lZWRlZCB0byBlbnN1cmUgbWVtb3J5IHNhZmV0eSBhbmQgY29ycmVjdG5lc3Mgb2YgdGhlc2UgY29yZSBCUEYgbWFwIG9wZXJhdGlvbnMuXCJgXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwNDgyLCJPdXRwdXRUb2tlbnMiOjI3OCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExNDAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjNUMjI6Mzk6MTQuMDMxNTM5Njg1WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzI1MzQ3MjQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfU1lTQ0FMTFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImh0YWJfbWFwX2FsbG9jXCIsXG4gICAgXCJodGFiX21hcF91cGRhdGVfZWxlbVwiLFxuICAgIFwiaHRhYl9scnVfbWFwX3VwZGF0ZV9lbGVtXCIsXG4gICAgXCJfX2h0YWJfbHJ1X3BlcmNwdV9tYXBfdXBkYXRlX2VsZW1cIixcbiAgICBcImh0YWJfbWFwX2RlbGV0ZV9lbGVtXCIsXG4gICAgXCJodGFiX2xydV9tYXBfZGVsZXRlX2VsZW1cIixcbiAgICBcIl9faHRhYl9tYXBfbG9va3VwX2FuZF9kZWxldGVfZWxlbVwiLFxuICAgIFwiX19odGFiX21hcF9sb29rdXBfYW5kX2RlbGV0ZV9iYXRjaFwiLFxuICAgIFwiYnBmX21hcF9tZXRhX2FsbG9jXCIsXG4gICAgXCJodGFiX21hcF9nZW5fbG9va3VwXCIsXG4gICAgXCJodGFiX2xydV9tYXBfZ2VuX2xvb2t1cFwiLFxuICAgIFwiaHRhYl9wZXJjcHVfbWFwX2dlbl9sb29rdXBcIixcbiAgICBcImh0YWJfb2ZfbWFwX2dlbl9sb29rdXBcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmdW5jdGlvbmFsbHkgbW9kaWZpZXMgdGhlIG1lbW9yeSBsYXlvdXQgYW5kIG9wZXJhdGlvbnMgb2YgQlBGIGhhc2ggbWFwcyAoaW5jbHVkaW5nIExSVSBhbmQgcGVyLUNQVSB2YXJpYW50cykuIEl0IGludHJvZHVjZXMgbmV3IHN0cnVjdHVyZXMgYW5kIG9mZnNldHMgZm9yIGhhc2ggbWFwIGVsZW1lbnRzLCB3aGljaCBhZmZlY3RzIGFsbG9jYXRpb24sIHVwZGF0ZXMsIGRlbGV0aW9ucywgYW5kIEpJVCBsb29rdXAgZ2VuZXJhdGlvbi4gRnV6emluZyBpcyBuZWVkZWQgdG8gZW5zdXJlIG1lbW9yeSBzYWZldHkgYW5kIGNvcnJlY3RuZXNzIG9mIHRoZXNlIGNvcmUgQlBGIG1hcCBvcGVyYXRpb25zLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJQRl9TWVNDQUxMXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaHRhYl9tYXBfYWxsb2NcIixcbiAgICBcImh0YWJfbWFwX3VwZGF0ZV9lbGVtXCIsXG4gICAgXCJodGFiX2xydV9tYXBfdXBkYXRlX2VsZW1cIixcbiAgICBcIl9faHRhYl9scnVfcGVyY3B1X21hcF91cGRhdGVfZWxlbVwiLFxuICAgIFwiaHRhYl9tYXBfZGVsZXRlX2VsZW1cIixcbiAgICBcImh0YWJfbHJ1X21hcF9kZWxldGVfZWxlbVwiLFxuICAgIFwiX19odGFiX21hcF9sb29rdXBfYW5kX2RlbGV0ZV9lbGVtXCIsXG4gICAgXCJfX2h0YWJfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2JhdGNoXCIsXG4gICAgXCJicGZfbWFwX21ldGFfYWxsb2NcIixcbiAgICBcImh0YWJfbWFwX2dlbl9sb29rdXBcIixcbiAgICBcImh0YWJfbHJ1X21hcF9nZW5fbG9va3VwXCIsXG4gICAgXCJodGFiX3BlcmNwdV9tYXBfZ2VuX2xvb2t1cFwiLFxuICAgIFwiaHRhYl9vZl9tYXBfZ2VuX2xvb2t1cFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZ1bmN0aW9uYWxseSBtb2RpZmllcyB0aGUgbWVtb3J5IGxheW91dCBhbmQgb3BlcmF0aW9ucyBvZiBCUEYgaGFzaCBtYXBzIChpbmNsdWRpbmcgTFJVIGFuZCBwZXItQ1BVIHZhcmlhbnRzKS4gSXQgaW50cm9kdWNlcyBuZXcgc3RydWN0dXJlcyBhbmQgb2Zmc2V0cyBmb3IgaGFzaCBtYXAgZWxlbWVudHMsIHdoaWNoIGFmZmVjdHMgYWxsb2NhdGlvbiwgdXBkYXRlcywgZGVsZXRpb25zLCBhbmQgSklUIGxvb2t1cCBnZW5lcmF0aW9uLiBGdXp6aW5nIGlzIG5lZWRlZCB0byBlbnN1cmUgbWVtb3J5IHNhZmV0eSBhbmQgY29ycmVjdG5lc3Mgb2YgdGhlc2UgY29yZSBCUEYgbWFwIG9wZXJhdGlvbnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflowmcbkj[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-23 22:03:55 +0000 UTC FinishedAt: 2026-07-23 22:39:16 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "bpf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git", "commit_hash": "cfce77b63375dac81d53f2f85593c548415206b7", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "bpf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git", "commit_hash": "cfce77b63375dac81d53f2f85593c548415206b7", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL" ], "series_id": "bc6e3bf0-4b8c-42d2-9d4d-c20e9acd5371" }, "track": "KASAN", "fuzz": { "focus": [ "bpf" ], "focus_symbols": [ "htab_map_alloc", "htab_map_update_elem", "htab_lru_map_update_elem", "__htab_lru_percpu_map_update_elem", "htab_map_delete_elem", "htab_lru_map_delete_elem", "__htab_map_lookup_and_delete_elem", "__htab_map_lookup_and_delete_batch", "bpf_map_meta_alloc", "htab_map_gen_lookup", "htab_lru_map_gen_lookup", "htab_percpu_map_gen_lookup", "htab_of_map_gen_lookup" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIzIDIyOjM4PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aHRhYl9tYXBfYWxsb2MmIzM0OywKICAgICYjMzQ7aHRhYl9tYXBfdXBkYXRlX2VsZW0mIzM0OywKICAgICYjMzQ7aHRhYl9scnVfbWFwX3VwZGF0ZV9lbGVtJiMzNDssCiAgICAmIzM0O19faHRhYl9scnVfcGVyY3B1X21hcF91cGRhdGVfZWxlbSYjMzQ7LAogICAgJiMzNDtodGFiX21hcF9kZWxldGVfZWxlbSYjMzQ7LAogICAgJiMzNDtodGFiX2xydV9tYXBfZGVsZXRlX2VsZW0mIzM0OywKICAgICYjMzQ7X19odGFiX21hcF9sb29rdXBfYW5kX2RlbGV0ZV9lbGVtJiMzNDssCiAgICAmIzM0O19faHRhYl9tYXBfbG9va3VwX2FuZF9kZWxldGVfYmF0Y2gmIzM0OywKICAgICYjMzQ7YnBmX21hcF9tZXRhX2FsbG9jJiMzNDssCiAgICAmIzM0O2h0YWJfbWFwX2dlbl9sb29rdXAmIzM0OywKICAgICYjMzQ7aHRhYl9scnVfbWFwX2dlbl9sb29rdXAmIzM0OywKICAgICYjMzQ7aHRhYl9wZXJjcHVfbWFwX2dlbl9sb29rdXAmIzM0OywKICAgICYjMzQ7aHRhYl9vZl9tYXBfZ2VuX2xvb2t1cCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmdW5jdGlvbmFsbHkgbW9kaWZpZXMgdGhlIG1lbW9yeSBsYXlvdXQgYW5kIG9wZXJhdGlvbnMgb2YgQlBGIGhhc2ggbWFwcyAoaW5jbHVkaW5nIExSVSBhbmQgcGVyLUNQVSB2YXJpYW50cykuIEl0IGludHJvZHVjZXMgbmV3IHN0cnVjdHVyZXMgYW5kIG9mZnNldHMgZm9yIGhhc2ggbWFwIGVsZW1lbnRzLCB3aGljaCBhZmZlY3RzIGFsbG9jYXRpb24sIHVwZGF0ZXMsIGRlbGV0aW9ucywgYW5kIEpJVCBsb29rdXAgZ2VuZXJhdGlvbi4gRnV6emluZyBpcyBuZWVkZWQgdG8gZW5zdXJlIG1lbW9yeSBzYWZldHkgYW5kIGNvcnJlY3RuZXNzIG9mIHRoZXNlIGNvcmUgQlBGIG1hcCBvcGVyYXRpb25zLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIzIDIyOjM4PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgMjQzYTI3MDY0MGUwZGM5MDFlNGE3OGI1OTliMDc0OGQ1OWJmN2I2M1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgSnVsIDIzIDIyOjM4OjQwIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvaGFzaHRhYi5jIGIva2VybmVsL2JwZi9oYXNodGFiLmNcbmluZGV4IDlmMzk0ZTFhYTJlODViLi5iOGMzMGQ0MDI5NTg3OSAxMDA2NDRcbi0tLSBhL2tlcm5lbC9icGYvaGFzaHRhYi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvYnBmL2hhc2h0YWIuY1xuQEAgLTEwMiw2ICYjNDM7MTAyLDcgQEAgc3RydWN0IGJwZl9odGFiIHtcbiBcdGJvb2wgdXNlX3BlcmNwdV9jb3VudGVyO1xuIFx0dTMyIG5fYnVja2V0cztcdC8qIG51bWJlciBvZiBoYXNoIGJ1Y2tldHMgKi9cbiBcdHUzMiBlbGVtX3NpemU7XHQvKiBzaXplIG9mIGVhY2ggZWxlbWVudCBpbiBieXRlcyAqL1xuJiM0MztcdHUzMiBrZXlfb2Zmc2V0O1x0Lyogb2Zmc2V0IG9mIGtleSBpbiBieXRlcyAqL1xuIFx0dTMyIGhhc2hybmQ7XG4gfTtcbiBcbkBAIC0xMTcsMTggJiM0MzsxMTgsNDYgQEAgc3RydWN0IGh0YWJfZWxlbSB7XG4gXHRcdFx0fTtcbiBcdFx0fTtcbiBcdH07XG4mIzQzO1x0dTMyIGhhc2g7IC8qIE9ubHkgd2hlbiBodGFiX2hhc19oYXNoKCkgKi9cbiYjNDM7fSBfX2FsaWduZWQoOCk7XG4mIzQzO1xuJiM0MztzdHJ1Y3QgaHRhYl9lbGVtX2xydSB7XG4gXHR1bmlvbiB7XG4tXHRcdC8qIHBvaW50ZXIgdG8gcGVyLWNwdSBwb2ludGVyICovXG4tXHRcdHZvaWQgKnB0cl90b19wcHRyO1xuLVx0XHRzdHJ1Y3QgYnBmX2xydV9ub2RlIGxydV9ub2RlO1xuJiM0MztcdFx0c3RydWN0IGhsaXN0X251bGxzX25vZGUgaGFzaF9ub2RlO1xuJiM0MztcdFx0c3RydWN0IHtcbiYjNDM7XHRcdFx0dm9pZCAqcGFkZGluZztcbiYjNDM7XHRcdFx0dW5pb24ge1xuJiM0MztcdFx0XHRcdHN0cnVjdCBwY3B1X2ZyZWVsaXN0X25vZGUgZm5vZGU7XG4mIzQzO1x0XHRcdFx0c3RydWN0IGh0YWJfZWxlbV9scnUgKmJhdGNoX2ZsaW5rO1xuJiM0MztcdFx0XHR9O1xuJiM0MztcdFx0fTtcbiBcdH07XG4mIzQzO1x0c3RydWN0IGJwZl9scnVfbm9kZSBscnVfbm9kZTtcbiBcdHUzMiBoYXNoO1xuLVx0Y2hhciBrZXlbXSBfX2FsaWduZWQoOCk7XG4tfTtcbiYjNDM7fSBfX2FsaWduZWQoOCk7XG4mIzQzO1xuJiM0MzsvKiBPbmx5IGZvciBub24tcHJlYWxsb2NhdGVkIFBDUFUgbWFwcy4gUHJlYWxsb2NhdGVkIFBDUFUgbWFwcyBkb24mIzM5O3QgbmVlZFxuJiM0MzsgKiBwdHJfdG9fcHB0ciwgYW5kIHVzZSBodGFiX2VsZW0uXG4mIzQzOyAqL1xuJiM0MztzdHJ1Y3QgaHRhYl9lbGVtX3BjcHUge1xuJiM0MztcdHVuaW9uIHtcbiYjNDM7XHRcdHN0cnVjdCBobGlzdF9udWxsc19ub2RlIGhhc2hfbm9kZTtcbiYjNDM7XHRcdHN0cnVjdCB7XG4mIzQzO1x0XHRcdHZvaWQgKnBhZGRpbmc7XG4mIzQzO1x0XHRcdHVuaW9uIHtcbiYjNDM7XHRcdFx0XHRzdHJ1Y3QgcGNwdV9mcmVlbGlzdF9ub2RlIGZub2RlO1xuJiM0MztcdFx0XHRcdHN0cnVjdCBodGFiX2VsZW1fcGNwdSAqYmF0Y2hfZmxpbms7XG4mIzQzO1x0XHRcdH07XG4mIzQzO1x0XHR9O1xuJiM0MztcdH07XG4mIzQzO1x0dm9pZCAqcHRyX3RvX3BwdHI7XG4mIzQzO1x0dTMyIGhhc2g7IC8qIE9ubHkgd2hlbiBodGFiX2hhc19oYXNoKCkgKi9cbiYjNDM7fSBfX2FsaWduZWQoOCk7XG4gXG4gc3RydWN0IGh0YWJfYnRmX3JlY29yZCB7XG4gXHRzdHJ1Y3QgYnRmX3JlY29yZCAqcmVjb3JkO1xuIFx0dTMyIGtleV9zaXplO1xuJiM0MztcdHUzMiBrZXlfb2Zmc2V0O1xuIH07XG4gXG4gc3RhdGljIGlubGluZSBib29sIGh0YWJfaXNfcHJlYWxsb2MoY29uc3Qgc3RydWN0IGJwZl9odGFiICpodGFiKVxuQEAgLTEzNiw2ICYjNDM7MTY1LDIxIEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBodGFiX2lzX3ByZWFsbG9jKGNvbnN0IHN0cnVjdCBicGZfaHRhYiAqaHRhYilcbiBcdHJldHVybiAhKGh0YWItXHUwMDNlbWFwLm1hcF9mbGFncyBcdTAwMjYgQlBGX0ZfTk9fUFJFQUxMT0MpO1xuIH1cbiBcbiYjNDM7c3RhdGljIGlubGluZSBzdHJ1Y3QgYnBmX2xydV9ub2RlICpodGFiX2VsZW1fbHJ1X25vZGUoc3RydWN0IGh0YWJfZWxlbSAqbClcbiYjNDM7e1xuJiM0MztcdHJldHVybiBcdTAwMjYoKHN0cnVjdCBodGFiX2VsZW1fbHJ1ICopbCktXHUwMDNlbHJ1X25vZGU7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCAqaHRhYl9lbGVtX2dldF9wdHJfdG9fcHB0cihzdHJ1Y3QgaHRhYl9lbGVtICpsKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuICgoc3RydWN0IGh0YWJfZWxlbV9wY3B1ICopbCktXHUwMDNlcHRyX3RvX3BwdHI7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBodGFiX2VsZW1fc2V0X3B0cl90b19wcHRyKHN0cnVjdCBodGFiX2VsZW0gKmwsIHZvaWQgKnB0cilcbiYjNDM7e1xuJiM0MztcdCgoc3RydWN0IGh0YWJfZWxlbV9wY3B1ICopbCktXHUwMDNlcHRyX3RvX3BwdHIgPSBwdHI7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIHZvaWQgaHRhYl9pbml0X2J1Y2tldHMoc3RydWN0IGJwZl9odGFiICpodGFiKVxuIHtcbiBcdHVuc2lnbmVkIGludCBpO1xuQEAgLTE4MywyNSAmIzQzOzIyNywzMCBAQCBzdGF0aWMgaW5saW5lIGJvb2wgaXNfZmRfaHRhYihjb25zdCBzdHJ1Y3QgYnBmX2h0YWIgKmh0YWIpXG4gXHRyZXR1cm4gaHRhYi1cdTAwM2VtYXAubWFwX3R5cGUgPT0gQlBGX01BUF9UWVBFX0hBU0hfT0ZfTUFQUztcbiB9XG4gXG4tc3RhdGljIGlubGluZSB2b2lkICpodGFiX2VsZW1fdmFsdWUoc3RydWN0IGh0YWJfZWxlbSAqbCwgdTMyIGtleV9zaXplKVxuJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgKmh0YWJfZWxlbV9rZXkoc3RydWN0IGJwZl9odGFiICpodGFiLCBzdHJ1Y3QgaHRhYl9lbGVtICpsKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuICh2b2lkICopbCAmIzQzOyBodGFiLVx1MDAzZWtleV9vZmZzZXQ7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCAqaHRhYl9lbGVtX3ZhbHVlKHN0cnVjdCBicGZfaHRhYiAqaHRhYiwgc3RydWN0IGh0YWJfZWxlbSAqbClcbiB7XG4tXHRyZXR1cm4gbC1cdTAwM2VrZXkgJiM0Mzsgcm91bmRfdXAoa2V5X3NpemUsIDgpO1xuJiM0MztcdHJldHVybiBodGFiX2VsZW1fa2V5KGh0YWIsIGwpICYjNDM7IHJvdW5kX3VwKGh0YWItXHUwMDNlbWFwLmtleV9zaXplLCA4KTtcbiB9XG4gXG4tc3RhdGljIGlubGluZSB2b2lkIGh0YWJfZWxlbV9zZXRfcHRyKHN0cnVjdCBodGFiX2VsZW0gKmwsIHUzMiBrZXlfc2l6ZSxcbiYjNDM7c3RhdGljIGlubGluZSB2b2lkIGh0YWJfZWxlbV9zZXRfcHRyKHN0cnVjdCBicGZfaHRhYiAqaHRhYiwgc3RydWN0IGh0YWJfZWxlbSAqbCxcbiBcdFx0XHRcdCAgICAgdm9pZCBfX3BlcmNwdSAqcHB0cilcbiB7XG4tXHQqKHZvaWQgX19wZXJjcHUgKiopaHRhYl9lbGVtX3ZhbHVlKGwsIGtleV9zaXplKSA9IHBwdHI7XG4mIzQzO1x0Kih2b2lkIF9fcGVyY3B1ICoqKWh0YWJfZWxlbV92YWx1ZShodGFiLCBsKSA9IHBwdHI7XG4gfVxuIFxuLXN0YXRpYyBpbmxpbmUgdm9pZCBfX3BlcmNwdSAqaHRhYl9lbGVtX2dldF9wdHIoc3RydWN0IGh0YWJfZWxlbSAqbCwgdTMyIGtleV9zaXplKVxuJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgX19wZXJjcHUgKmh0YWJfZWxlbV9nZXRfcHRyKHN0cnVjdCBicGZfaHRhYiAqaHRhYiwgc3RydWN0IGh0YWJfZWxlbSAqbClcbiB7XG4tXHRyZXR1cm4gKih2b2lkIF9fcGVyY3B1ICoqKWh0YWJfZWxlbV92YWx1ZShsLCBrZXlfc2l6ZSk7XG4mIzQzO1x0cmV0dXJuICoodm9pZCBfX3BlcmNwdSAqKilodGFiX2VsZW1fdmFsdWUoaHRhYiwgbCk7XG4gfVxuIFxuLXN0YXRpYyB2b2lkICpmZF9odGFiX21hcF9nZXRfcHRyKGNvbnN0IHN0cnVjdCBicGZfbWFwICptYXAsIHN0cnVjdCBodGFiX2VsZW0gKmwpXG4mIzQzO3N0YXRpYyB2b2lkICpmZF9odGFiX21hcF9nZXRfcHRyKHN0cnVjdCBicGZfaHRhYiAqaHRhYiwgc3RydWN0IGh0YWJfZWxlbSAqbClcbiB7XG4tXHRyZXR1cm4gKih2b2lkICoqKWh0YWJfZWxlbV92YWx1ZShsLCBtYXAtXHUwMDNla2V5X3NpemUpO1xuJiM0MztcdHJldHVybiAqKHZvaWQgKiopaHRhYl9lbGVtX3ZhbHVlKGh0YWIsIGwpO1xuIH1cbiBcbiBzdGF0aWMgc3RydWN0IGh0YWJfZWxlbSAqZ2V0X2h0YWJfZWxlbShzdHJ1Y3QgYnBmX2h0YWIgKmh0YWIsIGludCBpKVxuQEAgLTIwOSw2ICYjNDM7MjU4LDMzIEBAIHN0YXRpYyBzdHJ1Y3QgaHRhYl9lbGVtICpnZXRfaHRhYl9lbGVtKHN0cnVjdCBicGZfaHRhYiAqaHRhYiwgaW50IGkpXG4gXHRyZXR1cm4gKHN0cnVjdCBodGFiX2VsZW0gKikgKGh0YWItXHUwMDNlZWxlbXMgJiM0MzsgaSAqICh1NjQpaHRhYi1cdTAwM2VlbGVtX3NpemUpO1xuIH1cbiBcbiYjNDM7c3RhdGljIGlubGluZSBib29sIGh0YWJfaGFzX2hhc2goY29uc3Qgc3RydWN0IGJwZl9odGFiICpodGFiKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIGh0YWJfaXNfbHJ1KGh0YWIpIHx8IGh0YWItXHUwMDNlbWFwLmtleV9zaXplIFx1MDAzZSA4O1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW5saW5lIHUzMiBodGFiX2VsZW1faGFzaChzdHJ1Y3QgYnBmX2h0YWIgKmh0YWIsIHN0cnVjdCBodGFiX2VsZW0gKmwpXG4mIzQzO3tcbiYjNDM7XHRpZiAoaHRhYl9pc19scnUoaHRhYikpXG4mIzQzO1x0XHRyZXR1cm4gKChzdHJ1Y3QgaHRhYl9lbGVtX2xydSAqKWwpLVx1MDAzZWhhc2g7XG4mIzQzO1x0ZWxzZSBpZiAoaHRhYl9pc19wZXJjcHUoaHRhYikgXHUwMDI2XHUwMDI2ICFodGFiX2lzX3ByZWFsbG9jKGh0YWIpKVxuJiM0MztcdFx0cmV0dXJuICgoc3RydWN0IGh0YWJfZWxlbV9wY3B1ICopbCktXHUwMDNlaGFzaDtcbiYjNDM7XHRlbHNlXG4mIzQzO1x0XHRyZXR1cm4gbC1cdTAwM2VoYXNoO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgaHRhYl9lbGVtX3NldF9oYXNoKHN0cnVjdCBicGZfaHRhYiAqaHRhYiwgc3RydWN0IGh0YWJfZWxlbSAqbCwgdTMyIGhhc2gpXG4mIzQzO3tcbiYjNDM7XHRpZiAoIWh0YWJfaGFzX2hhc2goaHRhYikpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1x0aWYgKGh0YWJfaXNfbHJ1KGh0YWIpKVxuJiM0MztcdFx0KChzdHJ1Y3QgaHRhYl9lbGVtX2xydSAqKWwpLVx1MDAzZWhhc2ggPSBoYXNoO1xuJiM0MztcdGVsc2UgaWYgKGh0YWJfaXNfcGVyY3B1KGh0YWIpIFx1MDAyNlx1MDAyNiAhaHRhYl9pc19wcmVhbGxvYyhodGFiKSlcbiYjNDM7XHRcdCgoc3RydWN0IGh0YWJfZWxlbV9wY3B1ICopbCktXHUwMDNlaGFzaCA9IGhhc2g7XG4mIzQzO1x0ZWxzZVxuJiM0MztcdFx0bC1cdTAwM2VoYXNoID0gaGFzaDtcbiYjNDM7fVxuJiM0MztcbiAvKiBCb3RoIHBlcmNwdSBhbmQgZmQgaHRhYiBzdXBwb3J0IGluLXBsYWNlIHVwZGF0ZSwgc28gbm8gbmVlZCBmb3JcbiAgKiBleHRyYSBlbGVtLiBMUlUgaXRzZWxmIGNhbiByZW1vdmUgdGhlIGxlYXN0IHVzZWQgZWxlbWVudCwgc29cbiAgKiB0aGVyZSBpcyBubyBuZWVkIGZvciBhbiBleHRyYSBlbGVtIGR1cmluZyBtYXBfdXBkYXRlLlxuQEAgLTIzMSw3ICYjNDM7MzA3LDcgQEAgc3RhdGljIHZvaWQgaHRhYl9mcmVlX3ByZWFsbG9jZWRfaW50ZXJuYWxfc3RydWN0cyhzdHJ1Y3QgYnBmX2h0YWIgKmh0YWIpXG4gXG4gXHRcdGVsZW0gPSBnZXRfaHRhYl9lbGVtKGh0YWIsIGkpO1xuIFx0XHRicGZfbWFwX2ZyZWVfaW50ZXJuYWxfc3RydWN0cyhcdTAwMjZodGFiLVx1MDAzZW1hcCxcbi1cdFx0XHRcdFx0ICAgICAgaHRhYl9lbGVtX3ZhbHVlKGVsZW0sIGh0YWItXHUwMDNlbWFwLmtleV9zaXplKSk7XG4mIzQzO1x0XHRcdFx0XHQgICAgICBodGFiX2VsZW1fdmFsdWUoaHRhYiwgZWxlbSkpO1xuIFx0XHRjb25kX3Jlc2NoZWQoKTtcbiBcdH1cbiB9XG5AQCAtMjU0LDcgJiM0MzszMzAsNyBAQCBzdGF0aWMgdm9pZCBodGFiX2ZyZWVfcHJlYWxsb2NlZF9maWVsZHMoc3RydWN0IGJwZl9odGFiICpodGFiKVxuIFxuIFx0XHRlbGVtID0gZ2V0X2h0YWJfZWxlbShodGFiLCBpKTtcbiBcdFx0aWYgKGh0YWJfaXNfcGVyY3B1KGh0YWIpKSB7XG4tXHRcdFx0dm9pZCBfX3BlcmNwdSAqcHB0ciA9IGh0YWJfZWxlbV9nZXRfcHRyKGVsZW0sIGh0YWItXHUwMDNlbWFwLmtleV9zaXplKTtcbiYjNDM7XHRcdFx0dm9pZCBfX3BlcmNwdSAqcHB0ciA9IGh0YWJfZWxlbV9nZXRfcHRyKGh0YWIsIGVsZW0pO1xuIFx0XHRcdGludCBjcHU7XG4gXG4gXHRcdFx0Zm9yX2VhY2hfcG9zc2libGVfY3B1KGNwdSkge1xuQEAgLTI2Myw3ICYjNDM7MzM5LDcgQEAgc3RhdGljIHZvaWQgaHRhYl9mcmVlX3ByZWFsbG9jZWRfZmllbGRzKHN0cnVjdCBicGZfaHRhYiAqaHRhYilcbiBcdFx0XHR9XG4gXHRcdH0gZWxzZSB7XG4gXHRcdFx0YnBmX29ial9mcmVlX2ZpZWxkcyhodGFiLVx1MDAzZW1hcC5yZWNvcmQsXG4tXHRcdFx0XHRcdCAgICBodGFiX2VsZW1fdmFsdWUoZWxlbSwgaHRhYi1cdTAwM2VtYXAua2V5X3NpemUpKTtcbiYjNDM7XHRcdFx0XHRcdCAgICBodGFiX2VsZW1fdmFsdWUoaHRhYiwgZWxlbSkpO1xuIFx0XHRcdGNvbmRfcmVzY2hlZCgpO1xuIFx0XHR9XG4gXHRcdGNvbmRfcmVzY2hlZCgpO1xuQEAgLTI4MCw4ICYjNDM7MzU2LDcgQEAgc3RhdGljIHZvaWQgaHRhYl9mcmVlX2VsZW1zKHN0cnVjdCBicGZfaHRhYiAqaHRhYilcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGh0YWItXHUwMDNlbWFwLm1heF9lbnRyaWVzOyBpJiM0MzsmIzQzOykge1xuIFx0XHR2b2lkIF9fcGVyY3B1ICpwcHRyO1xuIFxuLVx0XHRwcHRyID0gaHRhYl9lbGVtX2dldF9wdHIoZ2V0X2h0YWJfZWxlbShodGFiLCBpKSxcbi1cdFx0XHRcdFx0IGh0YWItXHUwMDNlbWFwLmtleV9zaXplKTtcbiYjNDM7XHRcdHBwdHIgPSBodGFiX2VsZW1fZ2V0X3B0cihodGFiLCBnZXRfaHRhYl9lbGVtKGh0YWIsIGkpKTtcbiBcdFx0ZnJlZV9wZXJjcHUocHB0cik7XG4gXHRcdGNvbmRfcmVzY2hlZCgpO1xuIFx0fVxuQEAgLTMwOCw4ICYjNDM7MzgzLDggQEAgc3RhdGljIHN0cnVjdCBodGFiX2VsZW0gKnByZWFsbG9jX2xydV9wb3Aoc3RydWN0IGJwZl9odGFiICpodGFiLCB2b2lkICprZXksXG4gXG4gXHRpZiAobm9kZSkge1xuIFx0XHRicGZfbWFwX2luY19lbGVtX2NvdW50KFx1MDAyNmh0YWItXHUwMDNlbWFwKTtcbi1cdFx0bCA9IGNvbnRhaW5lcl9vZihub2RlLCBzdHJ1Y3QgaHRhYl9lbGVtLCBscnVfbm9kZSk7XG4tXHRcdG1lbWNweShsLVx1MDAzZWtleSwga2V5LCBodGFiLVx1MDAzZW1hcC5rZXlfc2l6ZSk7XG4mIzQzO1x0XHRsID0gKHN0cnVjdCBodGFiX2VsZW0gKiljb250YWluZXJfb2Yobm9kZSwgc3RydWN0IGh0YWJfZWxlbV9scnUsIGxydV9ub2RlKTtcbiYjNDM7XHRcdG1lbWNweShodGFiX2VsZW1fa2V5KGh0YWIsIGwpLCBrZXksIGh0YWItXHUwMDNlbWFwLmtleV9zaXplKTtcbiBcdFx0cmV0dXJuIGw7XG4gXHR9XG4gXG5AQCAtMzQwLDggJiM0Mzs0MTUsNyBAQCBzdGF0aWMgaW50IHByZWFsbG9jX2luaXQoc3RydWN0IGJwZl9odGFiICpodGFiKVxuIFx0XHRcdFx0XHQgICAgR0ZQX1VTRVIgfCBfX0dGUF9OT1dBUk4pO1xuIFx0XHRpZiAoIXBwdHIpXG4gXHRcdFx0Z290byBmcmVlX2VsZW1zO1xuLVx0XHRodGFiX2VsZW1fc2V0X3B0cihnZXRfaHRhYl9lbGVtKGh0YWIsIGkpLCBodGFiLVx1MDAzZW1hcC5rZXlfc2l6ZSxcbi1cdFx0XHRcdCAgcHB0cik7XG4mIzQzO1x0XHRodGFiX2VsZW1fc2V0X3B0cihodGFiLCBnZXRfaHRhYl9lbGVtKGh0YWIsIGkpLCBwcHRyKTtcbiBcdFx0Y29uZF9yZXNjaGVkKCk7XG4gXHR9XG4gXG5AQCAtMzQ5LDggJiM0Mzs0MjMsOCBAQCBzdGF0aWMgaW50IHByZWFsbG9jX2luaXQoc3RydWN0IGJwZl9odGFiICpodGFiKVxuIFx0aWYgKGh0YWJfaXNfbHJ1KGh0YWIpKVxuIFx0XHRlcnIgPSBicGZfbHJ1X2luaXQoXHUwMDI2aHRhYi1cdTAwM2VscnUsXG4gXHRcdFx0XHQgICBodGFiLVx1MDAzZW1hcC5tYXBfZmxhZ3MgXHUwMDI2IEJQRl9GX05PX0NPTU1PTl9MUlUsXG4tXHRcdFx0XHQgICBvZmZzZXRvZihzdHJ1Y3QgaHRhYl9lbGVtLCBoYXNoKSAtXG4tXHRcdFx0XHQgICBvZmZzZXRvZihzdHJ1Y3QgaHRhYl9lbGVtLCBscnVfbm9kZSksXG4mIzQzO1x0XHRcdFx0ICAgb2Zmc2V0b2Yoc3RydWN0IGh0YWJfZWxlbV9scnUsIGhhc2gpIC1cbiYjNDM7XHRcdFx0XHQgICBvZmZzZXRvZihzdHJ1Y3QgaHRhYl9lbGVtX2xydSwgbHJ1X25vZGUpLFxuIFx0XHRcdFx0ICAgaHRhYl9scnVfbWFwX2RlbGV0ZV9ub2RlLFxuIFx0XHRcdFx0ICAgaHRhYik7XG4gXHRlbHNlXG5AQCAtMzYxLDcgJiM0Mzs0MzUsNyBAQCBzdGF0aWMgaW50IHByZWFsbG9jX2luaXQoc3RydWN0IGJwZl9odGFiICpodGFiKVxuIFxuIFx0aWYgKGh0YWJfaXNfbHJ1KGh0YWIpKVxuIFx0XHRicGZfbHJ1X3BvcHVsYXRlKFx1MDAyNmh0YWItXHUwMDNlbHJ1LCBodGFiLVx1MDAzZWVsZW1zLFxuLVx0XHRcdFx0IG9mZnNldG9mKHN0cnVjdCBodGFiX2VsZW0sIGxydV9ub2RlKSxcbiYjNDM7XHRcdFx0XHQgb2Zmc2V0b2Yoc3RydWN0IGh0YWJfZWxlbV9scnUsIGxydV9ub2RlKSxcbiBcdFx0XHRcdCBodGFiLVx1MDAzZWVsZW1fc2l6ZSwgbnVtX2VudHJpZXMpO1xuIFx0ZWxzZVxuIFx0XHRwY3B1X2ZyZWVsaXN0X3BvcHVsYXRlKFx1MDAyNmh0YWItXHUwMDNlZnJlZWxpc3QsXG5AQCAtNDI4LDYgJiM0Mzs1MDIsMjUgQEAgc3RhdGljIGludCBodGFiX21hcF9hbGxvY19jaGVjayh1bmlvbiBicGZfYXR0ciAqYXR0cilcbiBcdEJVSUxEX0JVR19PTihvZmZzZXRvZihzdHJ1Y3QgaHRhYl9lbGVtLCBmbm9kZS5uZXh0KSAhPVxuIFx0XHQgICAgIG9mZnNldG9mKHN0cnVjdCBodGFiX2VsZW0sIGhhc2hfbm9kZS5wcHJldikpO1xuIFxuJiM0MztcdC8qIGh0YWJfZWxlbSBwb2ludGVycyBhcmUgdXNlZCBhcyBiYXNlIHBvaW50ZXJzIGZvciBodGFiX2VsZW1fbHJ1IGFuZFxuJiM0MztcdCAqIGh0YWJfZWxlbV9wY3B1LiBUaGVzZSBzdHJ1Y3R1cmVzIG11c3Qgc2hhcmUgYSBjb21tb24gaW5pdGlhbCBzZXF1ZW5jZVxuJiM0MztcdCAqIHRvIGVuc3VyZSBwb2ludGVyIGNhc3RpbmcgYmV0d2VlbiB0aGVtIGlzIHNhZmUuXG4mIzQzO1x0ICovXG4mIzQzO1x0QlVJTERfQlVHX09OKG9mZnNldG9mKHN0cnVjdCBodGFiX2VsZW0sIGhhc2hfbm9kZSkgIT1cbiYjNDM7XHRcdCAgICAgb2Zmc2V0b2Yoc3RydWN0IGh0YWJfZWxlbV9scnUsIGhhc2hfbm9kZSkpO1xuJiM0MztcdEJVSUxEX0JVR19PTihvZmZzZXRvZihzdHJ1Y3QgaHRhYl9lbGVtLCBoYXNoX25vZGUpICE9XG4mIzQzO1x0XHQgICAgIG9mZnNldG9mKHN0cnVjdCBodGFiX2VsZW1fcGNwdSwgaGFzaF9ub2RlKSk7XG4mIzQzO1xuJiM0MztcdEJVSUxEX0JVR19PTihvZmZzZXRvZihzdHJ1Y3QgaHRhYl9lbGVtLCBwYWRkaW5nKSAhPVxuJiM0MztcdFx0ICAgICBvZmZzZXRvZihzdHJ1Y3QgaHRhYl9lbGVtX2xydSwgcGFkZGluZykpO1xuJiM0MztcdEJVSUxEX0JVR19PTihvZmZzZXRvZihzdHJ1Y3QgaHRhYl9lbGVtLCBwYWRkaW5nKSAhPVxuJiM0MztcdFx0ICAgICBvZmZzZXRvZihzdHJ1Y3QgaHRhYl9lbGVtX3BjcHUsIHBhZGRpbmcpKTtcbiYjNDM7XG4mIzQzO1x0QlVJTERfQlVHX09OKG9mZnNldG9mKHN0cnVjdCBodGFiX2VsZW0sIGZub2RlKSAhPVxuJiM0MztcdFx0ICAgICBvZmZzZXRvZihzdHJ1Y3QgaHRhYl9lbGVtX2xydSwgZm5vZGUpKTtcbiYjNDM7XHRCVUlMRF9CVUdfT04ob2Zmc2V0b2Yoc3RydWN0IGh0YWJfZWxlbSwgZm5vZGUpICE9XG4mIzQzO1x0XHQgICAgIG9mZnNldG9mKHN0cnVjdCBodGFiX2VsZW1fcGNwdSwgZm5vZGUpKTtcbiYjNDM7XG4gXHRpZiAoemVyb19zZWVkIFx1MDAyNlx1MDAyNiAhY2FwYWJsZShDQVBfU1lTX0FETUlOKSlcbiBcdFx0LyogR3VhcmQgYWdhaW5zdCBsb2NhbCBEb1MsIGFuZCBkaXNjb3VyYWdlIHByb2R1Y3Rpb24gdXNlLiAqL1xuIFx0XHRyZXR1cm4gLUVQRVJNO1xuQEAgLTQ3Niw3ICYjNDM7NTY5LDcgQEAgc3RhdGljIHZvaWQgaHRhYl9tZW1fZHRvcih2b2lkICpvYmosIHZvaWQgKmN0eClcbiBcdGlmIChJU19FUlJfT1JfTlVMTChocmVjLVx1MDAzZXJlY29yZCkpXG4gXHRcdHJldHVybjtcbiBcbi1cdG1hcF92YWx1ZSA9IGh0YWJfZWxlbV92YWx1ZShlbGVtLCBocmVjLVx1MDAzZWtleV9zaXplKTtcbiYjNDM7XHRtYXBfdmFsdWUgPSAodm9pZCAqKWVsZW0gJiM0MzsgaHJlYy1cdTAwM2VrZXlfb2Zmc2V0ICYjNDM7IHJvdW5kX3VwKGhyZWMtXHUwMDNla2V5X3NpemUsIDgpO1xuIFx0YnBmX29ial9mcmVlX2ZpZWxkcyhocmVjLVx1MDAzZXJlY29yZCwgbWFwX3ZhbHVlKTtcbiB9XG4gXG5AQCAtNTAyLDcgJiM0Mzs1OTUsNyBAQCBzdGF0aWMgdm9pZCBodGFiX2R0b3JfY3R4X2ZyZWUodm9pZCAqY3R4KVxuIH1cbiBcbiBzdGF0aWMgaW50IGJwZl9tYV9zZXRfZHRvcihzdHJ1Y3QgYnBmX21hcCAqbWFwLCBzdHJ1Y3QgYnBmX21lbV9hbGxvYyAqbWEsXG4tXHRcdFx0ICAgdm9pZCAoKmR0b3IpKHZvaWQgKiwgdm9pZCAqKSlcbiYjNDM7XHRcdFx0ICAgdm9pZCAoKmR0b3IpKHZvaWQgKiwgdm9pZCAqKSwgdTMyIGtleV9vZmZzZXQpXG4ge1xuIFx0c3RydWN0IGh0YWJfYnRmX3JlY29yZCAqaHJlYztcbiBcdGludCBlcnI7XG5AQCAtNTE1LDYgJiM0Mzs2MDgsNyBAQCBzdGF0aWMgaW50IGJwZl9tYV9zZXRfZHRvcihzdHJ1Y3QgYnBmX21hcCAqbWFwLCBzdHJ1Y3QgYnBmX21lbV9hbGxvYyAqbWEsXG4gXHRpZiAoIWhyZWMpXG4gXHRcdHJldHVybiAtRU5PTUVNO1xuIFx0aHJlYy1cdTAwM2VrZXlfc2l6ZSA9IG1hcC1cdTAwM2VrZXlfc2l6ZTtcbiYjNDM7XHRocmVjLVx1MDAzZWtleV9vZmZzZXQgPSBrZXlfb2Zmc2V0O1xuIFx0aHJlYy1cdTAwM2VyZWNvcmQgPSBidGZfcmVjb3JkX2R1cChtYXAtXHUwMDNlcmVjb3JkKTtcbiBcdGlmIChJU19FUlIoaHJlYy1cdTAwM2VyZWNvcmQpKSB7XG4gXHRcdGVyciA9IFBUUl9FUlIoaHJlYy1cdTAwM2VyZWNvcmQpO1xuQEAgLTUzNyw5ICYjNDM7NjMxLDkgQEAgc3RhdGljIGludCBodGFiX21hcF9jaGVja19idGYoc3RydWN0IGJwZl9tYXAgKm1hcCwgY29uc3Qgc3RydWN0IGJ0ZiAqYnRmLFxuIFx0ICogcG9wdWxhdGVkIGluIGh0YWJfbWFwX2FsbG9jKCksIHNvIGl0IHdpbGwgYWx3YXlzIGFwcGVhciBhcyBOVUxMLlxuIFx0ICovXG4gXHRpZiAoaHRhYl9pc19wZXJjcHUoaHRhYikpXG4tXHRcdHJldHVybiBicGZfbWFfc2V0X2R0b3IobWFwLCBcdTAwMjZodGFiLVx1MDAzZXBjcHVfbWEsIGh0YWJfcGNwdV9tZW1fZHRvcik7XG4mIzQzO1x0XHRyZXR1cm4gYnBmX21hX3NldF9kdG9yKG1hcCwgXHUwMDI2aHRhYi1cdTAwM2VwY3B1X21hLCBodGFiX3BjcHVfbWVtX2R0b3IsIGh0YWItXHUwMDNla2V5X29mZnNldCk7XG4gXHRlbHNlXG4tXHRcdHJldHVybiBicGZfbWFfc2V0X2R0b3IobWFwLCBcdTAwMjZodGFiLVx1MDAzZW1hLCBodGFiX21lbV9kdG9yKTtcbiYjNDM7XHRcdHJldHVybiBicGZfbWFfc2V0X2R0b3IobWFwLCBcdTAwMjZodGFiLVx1MDAzZW1hLCBodGFiX21lbV9kdG9yLCBodGFiLVx1MDAzZWtleV9vZmZzZXQpO1xuIH1cbiBcbiBzdGF0aWMgc3RydWN0IGJwZl9tYXAgKmh0YWJfbWFwX2FsbG9jKHVuaW9uIGJwZl9hdHRyICphdHRyKVxuQEAgLTU4Myw4ICYjNDM7Njc3LDE4IEBAIHN0YXRpYyBzdHJ1Y3QgYnBmX21hcCAqaHRhYl9tYXBfYWxsb2ModW5pb24gYnBmX2F0dHIgKmF0dHIpXG4gXG4gXHRodGFiLVx1MDAzZW5fYnVja2V0cyA9IHJvdW5kdXBfcG93X29mX3R3byhodGFiLVx1MDAzZW1hcC5tYXhfZW50cmllcyk7XG4gXG4tXHRodGFiLVx1MDAzZWVsZW1fc2l6ZSA9IHNpemVvZihzdHJ1Y3QgaHRhYl9lbGVtKSAmIzQzO1xuLVx0XHRcdCAgcm91bmRfdXAoaHRhYi1cdTAwM2VtYXAua2V5X3NpemUsIDgpO1xuJiM0MztcdGlmIChodGFiX2lzX2xydShodGFiKSlcbiYjNDM7XHRcdGh0YWItXHUwMDNla2V5X29mZnNldCA9IHNpemVvZihzdHJ1Y3QgaHRhYl9lbGVtX2xydSk7XG4mIzQzO1x0ZWxzZSBpZiAocGVyY3B1IFx1MDAyNlx1MDAyNiAhcHJlYWxsb2MpXG4mIzQzO1x0XHRodGFiLVx1MDAzZWtleV9vZmZzZXQgPSByb3VuZF91cChodGFiX2hhc19oYXNoKGh0YWIpID9cbiYjNDM7XHRcdFx0XHRcdCAgICBzaXplb2Yoc3RydWN0IGh0YWJfZWxlbV9wY3B1KSA6XG4mIzQzO1x0XHRcdFx0XHQgICAgb2Zmc2V0b2Yoc3RydWN0IGh0YWJfZWxlbV9wY3B1LCBoYXNoKSwgOCk7XG4mIzQzO1x0ZWxzZVxuJiM0MztcdFx0aHRhYi1cdTAwM2VrZXlfb2Zmc2V0ID0gcm91bmRfdXAoaHRhYl9oYXNfaGFzaChodGFiKSA/XG4mIzQzO1x0XHRcdFx0XHQgICAgc2l6ZW9mKHN0cnVjdCBodGFiX2VsZW0pIDpcbiYjNDM7XHRcdFx0XHRcdCAgICBvZmZzZXRvZihzdHJ1Y3QgaHRhYl9lbGVtLCBoYXNoKSwgOCk7XG4mIzQzO1xuJiM0MztcdGh0YWItXHUwMDNlZWxlbV9zaXplID0gaHRhYi1cdTAwM2VrZXlfb2Zmc2V0ICYjNDM7IHJvdW5kX3VwKGh0YWItXHUwMDNlbWFwLmtleV9zaXplLCA4KTtcbiBcdGlmIChwZXJjcHUpXG4gXHRcdGh0YWItXHUwMDNlZWxlbV9zaXplICYjNDM7PSBzaXplb2Yodm9pZCAqKTtcbiBcdGVsc2VcbkBAIC02OTIsMTQgJiM0Mzs3OTYsMTYgQEAgc3RhdGljIGlubGluZSBzdHJ1Y3QgaGxpc3RfbnVsbHNfaGVhZCAqc2VsZWN0X2J1Y2tldChzdHJ1Y3QgYnBmX2h0YWIgKmh0YWIsIHUzMlxuIH1cbiBcbiAvKiB0aGlzIGxvb2t1cCBmdW5jdGlvbiBjYW4gb25seSBiZSBjYWxsZWQgd2l0aCBidWNrZXQgbG9jayB0YWtlbiAqL1xuLXN0YXRpYyBzdHJ1Y3QgaHRhYl9lbGVtICpsb29rdXBfZWxlbV9yYXcoc3RydWN0IGhsaXN0X251bGxzX2hlYWQgKmhlYWQsIHUzMiBoYXNoLFxuJiM0MztzdGF0aWMgc3RydWN0IGh0YWJfZWxlbSAqbG9va3VwX2VsZW1fcmF3KHN0cnVjdCBicGZfaHRhYiAqaHRhYixcbiYjNDM7XHRcdFx0XHRcdCBzdHJ1Y3QgaGxpc3RfbnVsbHNfaGVhZCAqaGVhZCwgdTMyIGhhc2gsXG4gXHRcdFx0XHRcdCB2b2lkICprZXksIHUzMiBrZXlfc2l6ZSlcbiB7XG4gXHRzdHJ1Y3QgaGxpc3RfbnVsbHNfbm9kZSAqbjtcbiBcdHN0cnVjdCBodGFiX2VsZW0gKmw7XG4gXG4gXHRobGlzdF9udWxsc19mb3JfZWFjaF9lbnRyeV9yY3UobCwgbiwgaGVhZCwgaGFzaF9ub2RlKVxuLVx0XHRpZiAobC1cdTAwM2VoYXNoID09IGhhc2ggXHUwMDI2XHUwMDI2ICFtZW1jbXAoXHUwMDI2bC1cdTAwM2VrZXksIGtleSwga2V5X3NpemUpKVxuJiM0MztcdFx0aWYgKCghaHRhYl9oYXNfaGFzaChodGFiKSB8fCBodGFiX2VsZW1faGFzaChodGFiLCBsKSA9PSBoYXNoKSBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdCAgICAhbWVtY21wKGh0YWJfZWxlbV9rZXkoaHRhYiwgbCksIGtleSwga2V5X3NpemUpKVxuIFx0XHRcdHJldHVybiBsO1xuIFxuIFx0cmV0dXJuIE5VTEw7XG5AQCAtNzA5LDcgJiM0Mzs4MTUsOCBAQCBzdGF0aWMgc3RydWN0IGh0YWJfZWxlbSAqbG9va3VwX2VsZW1fcmF3KHN0cnVjdCBobGlzdF9udWxsc19oZWFkICpoZWFkLCB1MzIgaGFzaFxuICAqIHRoZSB1bmxpa2VseSBldmVudCB3aGVuIGVsZW1lbnRzIG1vdmVkIGZyb20gb25lIGJ1Y2tldCBpbnRvIGFub3RoZXJcbiAgKiB3aGlsZSBsaW5rIGxpc3QgaXMgYmVpbmcgd2Fsa2VkXG4gICovXG4tc3RhdGljIHN0cnVjdCBodGFiX2VsZW0gKmxvb2t1cF9udWxsc19lbGVtX3JhdyhzdHJ1Y3QgaGxpc3RfbnVsbHNfaGVhZCAqaGVhZCxcbiYjNDM7c3RhdGljIHN0cnVjdCBodGFiX2VsZW0gKmxvb2t1cF9udWxsc19lbGVtX3JhdyhzdHJ1Y3QgYnBmX2h0YWIgKmh0YWIsXG4mIzQzO1x0XHRcdFx0XHQgICAgICAgc3RydWN0IGhsaXN0X251bGxzX2hlYWQgKmhlYWQsXG4gXHRcdFx0XHRcdCAgICAgICB1MzIgaGFzaCwgdm9pZCAqa2V5LFxuIFx0XHRcdFx0XHQgICAgICAgdTMyIGtleV9zaXplLCB1MzIgbl9idWNrZXRzKVxuIHtcbkBAIC03MTgsNyAmIzQzOzgyNSw4IEBAIHN0YXRpYyBzdHJ1Y3QgaHRhYl9lbGVtICpsb29rdXBfbnVsbHNfZWxlbV9yYXcoc3RydWN0IGhsaXN0X251bGxzX2hlYWQgKmhlYWQsXG4gXG4gYWdhaW46XG4gXHRobGlzdF9udWxsc19mb3JfZWFjaF9lbnRyeV9yY3UobCwgbiwgaGVhZCwgaGFzaF9ub2RlKVxuLVx0XHRpZiAobC1cdTAwM2VoYXNoID09IGhhc2ggXHUwMDI2XHUwMDI2ICFtZW1jbXAoXHUwMDI2bC1cdTAwM2VrZXksIGtleSwga2V5X3NpemUpKVxuJiM0MztcdFx0aWYgKCghaHRhYl9oYXNfaGFzaChodGFiKSB8fCBodGFiX2VsZW1faGFzaChodGFiLCBsKSA9PSBoYXNoKSBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdCAgICAhbWVtY21wKGh0YWJfZWxlbV9rZXkoaHRhYiwgbCksIGtleSwga2V5X3NpemUpKVxuIFx0XHRcdHJldHVybiBsO1xuIFxuIFx0aWYgKHVubGlrZWx5KGdldF9udWxsc192YWx1ZShuKSAhPSAoaGFzaCBcdTAwMjYgKG5fYnVja2V0cyAtIDEpKSkpXG5AQCAtNzQ3LDE3ICYjNDM7ODU1LDE4IEBAIHN0YXRpYyB2b2lkICpfX2h0YWJfbWFwX2xvb2t1cF9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSlcbiBcbiBcdGhlYWQgPSBzZWxlY3RfYnVja2V0KGh0YWIsIGhhc2gpO1xuIFxuLVx0bCA9IGxvb2t1cF9udWxsc19lbGVtX3JhdyhoZWFkLCBoYXNoLCBrZXksIGtleV9zaXplLCBodGFiLVx1MDAzZW5fYnVja2V0cyk7XG4mIzQzO1x0bCA9IGxvb2t1cF9udWxsc19lbGVtX3JhdyhodGFiLCBoZWFkLCBoYXNoLCBrZXksIGtleV9zaXplLCBodGFiLVx1MDAzZW5fYnVja2V0cyk7XG4gXG4gXHRyZXR1cm4gbDtcbiB9XG4gXG4gc3RhdGljIHZvaWQgKmh0YWJfbWFwX2xvb2t1cF9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSlcbiB7XG4mIzQzO1x0c3RydWN0IGJwZl9odGFiICpodGFiID0gY29udGFpbmVyX29mKG1hcCwgc3RydWN0IGJwZl9odGFiLCBtYXApO1xuIFx0c3RydWN0IGh0YWJfZWxlbSAqbCA9IF9faHRhYl9tYXBfbG9va3VwX2VsZW0obWFwLCBrZXkpO1xuIFxuIFx0aWYgKGwpXG4tXHRcdHJldHVybiBodGFiX2VsZW1fdmFsdWUobCwgbWFwLVx1MDAzZWtleV9zaXplKTtcbiYjNDM7XHRcdHJldHVybiBodGFiX2VsZW1fdmFsdWUoaHRhYiwgbCk7XG4gXG4gXHRyZXR1cm4gTlVMTDtcbiB9XG5AQCAtNzc1LDYgJiM0Mzs4ODQsNyBAQCBzdGF0aWMgdm9pZCAqaHRhYl9tYXBfbG9va3VwX2VsZW0oc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5KVxuICAqL1xuIHN0YXRpYyBpbnQgaHRhYl9tYXBfZ2VuX2xvb2t1cChzdHJ1Y3QgYnBmX21hcCAqbWFwLCBzdHJ1Y3QgYnBmX2luc24gKmluc25fYnVmKVxuIHtcbiYjNDM7XHRzdHJ1Y3QgYnBmX2h0YWIgKmh0YWIgPSBjb250YWluZXJfb2YobWFwLCBzdHJ1Y3QgYnBmX2h0YWIsIG1hcCk7XG4gXHRzdHJ1Y3QgYnBmX2luc24gKmluc24gPSBpbnNuX2J1ZjtcbiBcdGNvbnN0IGludCByZXQgPSBCUEZfUkVHXzA7XG4gXG5AQCAtNzgzLDcgJiM0Mzs4OTMsNyBAQCBzdGF0aWMgaW50IGh0YWJfbWFwX2dlbl9sb29rdXAoc3RydWN0IGJwZl9tYXAgKm1hcCwgc3RydWN0IGJwZl9pbnNuICppbnNuX2J1ZilcbiBcdCppbnNuJiM0MzsmIzQzOyA9IEJQRl9FTUlUX0NBTEwoX19odGFiX21hcF9sb29rdXBfZWxlbSk7XG4gXHQqaW5zbiYjNDM7JiM0MzsgPSBCUEZfSk1QX0lNTShCUEZfSkVRLCByZXQsIDAsIDEpO1xuIFx0Kmluc24mIzQzOyYjNDM7ID0gQlBGX0FMVTY0X0lNTShCUEZfQURELCByZXQsXG4tXHRcdFx0XHRvZmZzZXRvZihzdHJ1Y3QgaHRhYl9lbGVtLCBrZXkpICYjNDM7XG4mIzQzO1x0XHRcdFx0aHRhYi1cdTAwM2VrZXlfb2Zmc2V0ICYjNDM7XG4gXHRcdFx0XHRyb3VuZF91cChtYXAtXHUwMDNla2V5X3NpemUsIDgpKTtcbiBcdHJldHVybiBpbnNuIC0gaW5zbl9idWY7XG4gfVxuQEAgLTc5MSwxMiAmIzQzOzkwMSwxMyBAQCBzdGF0aWMgaW50IGh0YWJfbWFwX2dlbl9sb29rdXAoc3RydWN0IGJwZl9tYXAgKm1hcCwgc3RydWN0IGJwZl9pbnNuICppbnNuX2J1ZilcbiBzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgKl9faHRhYl9scnVfbWFwX2xvb2t1cF9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsXG4gXHRcdFx0XHRcdFx0XHR2b2lkICprZXksIGNvbnN0IGJvb2wgbWFyaylcbiB7XG4mIzQzO1x0c3RydWN0IGJwZl9odGFiICpodGFiID0gY29udGFpbmVyX29mKG1hcCwgc3RydWN0IGJwZl9odGFiLCBtYXApO1xuIFx0c3RydWN0IGh0YWJfZWxlbSAqbCA9IF9faHRhYl9tYXBfbG9va3VwX2VsZW0obWFwLCBrZXkpO1xuIFxuIFx0aWYgKGwpIHtcbiBcdFx0aWYgKG1hcmspXG4tXHRcdFx0YnBmX2xydV9ub2RlX3NldF9yZWYoXHUwMDI2bC1cdTAwM2VscnVfbm9kZSk7XG4tXHRcdHJldHVybiBodGFiX2VsZW1fdmFsdWUobCwgbWFwLVx1MDAzZWtleV9zaXplKTtcbiYjNDM7XHRcdFx0YnBmX2xydV9ub2RlX3NldF9yZWYoaHRhYl9lbGVtX2xydV9ub2RlKGwpKTtcbiYjNDM7XHRcdHJldHVybiBodGFiX2VsZW1fdmFsdWUoaHRhYiwgbCk7XG4gXHR9XG4gXG4gXHRyZXR1cm4gTlVMTDtcbkBAIC04MTUsNiAmIzQzOzkyNiw3IEBAIHN0YXRpYyB2b2lkICpodGFiX2xydV9tYXBfbG9va3VwX2VsZW1fc3lzKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSlcbiBzdGF0aWMgaW50IGh0YWJfbHJ1X21hcF9nZW5fbG9va3VwKHN0cnVjdCBicGZfbWFwICptYXAsXG4gXHRcdFx0XHQgICBzdHJ1Y3QgYnBmX2luc24gKmluc25fYnVmKVxuIHtcbiYjNDM7XHRzdHJ1Y3QgYnBmX2h0YWIgKmh0YWIgPSBjb250YWluZXJfb2YobWFwLCBzdHJ1Y3QgYnBmX2h0YWIsIG1hcCk7XG4gXHRzdHJ1Y3QgYnBmX2luc24gKmluc24gPSBpbnNuX2J1ZjtcbiBcdGNvbnN0IGludCByZXQgPSBCUEZfUkVHXzA7XG4gXHRjb25zdCBpbnQgcmVmX3JlZyA9IEJQRl9SRUdfMTtcbkBAIC04MjQsMTUgJiM0Mzs5MzYsMTUgQEAgc3RhdGljIGludCBodGFiX2xydV9tYXBfZ2VuX2xvb2t1cChzdHJ1Y3QgYnBmX21hcCAqbWFwLFxuIFx0Kmluc24mIzQzOyYjNDM7ID0gQlBGX0VNSVRfQ0FMTChfX2h0YWJfbWFwX2xvb2t1cF9lbGVtKTtcbiBcdCppbnNuJiM0MzsmIzQzOyA9IEJQRl9KTVBfSU1NKEJQRl9KRVEsIHJldCwgMCwgNCk7XG4gXHQqaW5zbiYjNDM7JiM0MzsgPSBCUEZfTERYX01FTShCUEZfQiwgcmVmX3JlZywgcmV0LFxuLVx0XHRcdCAgICAgIG9mZnNldG9mKHN0cnVjdCBodGFiX2VsZW0sIGxydV9ub2RlKSAmIzQzO1xuJiM0MztcdFx0XHQgICAgICBvZmZzZXRvZihzdHJ1Y3QgaHRhYl9lbGVtX2xydSwgbHJ1X25vZGUpICYjNDM7XG4gXHRcdFx0ICAgICAgb2Zmc2V0b2Yoc3RydWN0IGJwZl9scnVfbm9kZSwgcmVmKSk7XG4gXHQqaW5zbiYjNDM7JiM0MzsgPSBCUEZfSk1QX0lNTShCUEZfSk5FLCByZWZfcmVnLCAwLCAxKTtcbiBcdCppbnNuJiM0MzsmIzQzOyA9IEJQRl9TVF9NRU0oQlBGX0IsIHJldCxcbi1cdFx0XHQgICAgIG9mZnNldG9mKHN0cnVjdCBodGFiX2VsZW0sIGxydV9ub2RlKSAmIzQzO1xuJiM0MztcdFx0XHQgICAgIG9mZnNldG9mKHN0cnVjdCBodGFiX2VsZW1fbHJ1LCBscnVfbm9kZSkgJiM0MztcbiBcdFx0XHQgICAgIG9mZnNldG9mKHN0cnVjdCBicGZfbHJ1X25vZGUsIHJlZiksXG4gXHRcdFx0ICAgICAxKTtcbiBcdCppbnNuJiM0MzsmIzQzOyA9IEJQRl9BTFU2NF9JTU0oQlBGX0FERCwgcmV0LFxuLVx0XHRcdFx0b2Zmc2V0b2Yoc3RydWN0IGh0YWJfZWxlbSwga2V5KSAmIzQzO1xuJiM0MztcdFx0XHRcdGh0YWItXHUwMDNla2V5X29mZnNldCAmIzQzO1xuIFx0XHRcdFx0cm91bmRfdXAobWFwLVx1MDAzZWtleV9zaXplLCA4KSk7XG4gXHRyZXR1cm4gaW5zbiAtIGluc25fYnVmO1xuIH1cbkBAIC04NDQsMTMgJiM0Mzs5NTYsMTMgQEAgc3RhdGljIHZvaWQgY2hlY2tfYW5kX2NhbmNlbF9maWVsZHMoc3RydWN0IGJwZl9odGFiICpodGFiLFxuIFx0XHRyZXR1cm47XG4gXG4gXHRpZiAoaHRhYl9pc19wZXJjcHUoaHRhYikpIHtcbi1cdFx0dm9pZCBfX3BlcmNwdSAqcHB0ciA9IGh0YWJfZWxlbV9nZXRfcHRyKGVsZW0sIGh0YWItXHUwMDNlbWFwLmtleV9zaXplKTtcbiYjNDM7XHRcdHZvaWQgX19wZXJjcHUgKnBwdHIgPSBodGFiX2VsZW1fZ2V0X3B0cihodGFiLCBlbGVtKTtcbiBcdFx0aW50IGNwdTtcbiBcbiBcdFx0Zm9yX2VhY2hfcG9zc2libGVfY3B1KGNwdSlcbiBcdFx0XHRicGZfb2JqX2NhbmNlbF9maWVsZHMoXHUwMDI2aHRhYi1cdTAwM2VtYXAsIHBlcl9jcHVfcHRyKHBwdHIsIGNwdSkpO1xuIFx0fSBlbHNlIHtcbi1cdFx0dm9pZCAqbWFwX3ZhbHVlID0gaHRhYl9lbGVtX3ZhbHVlKGVsZW0sIGh0YWItXHUwMDNlbWFwLmtleV9zaXplKTtcbiYjNDM7XHRcdHZvaWQgKm1hcF92YWx1ZSA9IGh0YWJfZWxlbV92YWx1ZShodGFiLCBlbGVtKTtcbiBcbiBcdFx0YnBmX29ial9jYW5jZWxfZmllbGRzKFx1MDAyNmh0YWItXHUwMDNlbWFwLCBtYXBfdmFsdWUpO1xuIFx0fVxuQEAgLTg2OSw4ICYjNDM7OTgxLDggQEAgc3RhdGljIGJvb2wgaHRhYl9scnVfbWFwX2RlbGV0ZV9ub2RlKHZvaWQgKmFyZywgc3RydWN0IGJwZl9scnVfbm9kZSAqbm9kZSlcbiBcdHN0cnVjdCBidWNrZXQgKmI7XG4gXHRpbnQgcmV0O1xuIFxuLVx0dGd0X2wgPSBjb250YWluZXJfb2Yobm9kZSwgc3RydWN0IGh0YWJfZWxlbSwgbHJ1X25vZGUpO1xuLVx0YiA9IF9fc2VsZWN0X2J1Y2tldChodGFiLCB0Z3RfbC1cdTAwM2VoYXNoKTtcbiYjNDM7XHR0Z3RfbCA9IChzdHJ1Y3QgaHRhYl9lbGVtICopY29udGFpbmVyX29mKG5vZGUsIHN0cnVjdCBodGFiX2VsZW1fbHJ1LCBscnVfbm9kZSk7XG4mIzQzO1x0YiA9IF9fc2VsZWN0X2J1Y2tldChodGFiLCBodGFiX2VsZW1faGFzaChodGFiLCB0Z3RfbCkpO1xuIFx0aGVhZCA9IFx1MDAyNmItXHUwMDNlaGVhZDtcbiBcbiBcdHJldCA9IGh0YWJfbG9ja19idWNrZXQoYiwgXHUwMDI2ZmxhZ3MpO1xuQEAgLTkxMiw3ICYjNDM7MTAyNCw3IEBAIHN0YXRpYyBpbnQgaHRhYl9tYXBfZ2V0X25leHRfa2V5KHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSwgdm9pZCAqbmV4dF9rZXkpXG4gXHRoZWFkID0gc2VsZWN0X2J1Y2tldChodGFiLCBoYXNoKTtcbiBcbiBcdC8qIGxvb2t1cCB0aGUga2V5ICovXG4tXHRsID0gbG9va3VwX251bGxzX2VsZW1fcmF3KGhlYWQsIGhhc2gsIGtleSwga2V5X3NpemUsIGh0YWItXHUwMDNlbl9idWNrZXRzKTtcbiYjNDM7XHRsID0gbG9va3VwX251bGxzX2VsZW1fcmF3KGh0YWIsIGhlYWQsIGhhc2gsIGtleSwga2V5X3NpemUsIGh0YWItXHUwMDNlbl9idWNrZXRzKTtcbiBcbiBcdGlmICghbClcbiBcdFx0Z290byBmaW5kX2ZpcnN0X2VsZW07XG5AQCAtOTIzLDcgJiM0MzsxMDM1LDcgQEAgc3RhdGljIGludCBodGFiX21hcF9nZXRfbmV4dF9rZXkoc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5LCB2b2lkICpuZXh0X2tleSlcbiBcbiBcdGlmIChuZXh0X2wpIHtcbiBcdFx0LyogaWYgbmV4dCBlbGVtIGluIHRoaXMgaGFzaCBsaXN0IGlzIG5vbi16ZXJvLCBqdXN0IHJldHVybiBpdCAqL1xuLVx0XHRtZW1jcHkobmV4dF9rZXksIG5leHRfbC1cdTAwM2VrZXksIGtleV9zaXplKTtcbiYjNDM7XHRcdG1lbWNweShuZXh0X2tleSwgaHRhYl9lbGVtX2tleShodGFiLCBuZXh0X2wpLCBrZXlfc2l6ZSk7XG4gXHRcdHJldHVybiAwO1xuIFx0fVxuIFxuQEAgLTk0MSw3ICYjNDM7MTA1Myw3IEBAIHN0YXRpYyBpbnQgaHRhYl9tYXBfZ2V0X25leHRfa2V5KHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSwgdm9pZCAqbmV4dF9rZXkpXG4gXHRcdFx0XHRcdCAgc3RydWN0IGh0YWJfZWxlbSwgaGFzaF9ub2RlKTtcbiBcdFx0aWYgKG5leHRfbCkge1xuIFx0XHRcdC8qIGlmIGl0JiMzOTtzIG5vdCBlbXB0eSwganVzdCByZXR1cm4gaXQgKi9cbi1cdFx0XHRtZW1jcHkobmV4dF9rZXksIG5leHRfbC1cdTAwM2VrZXksIGtleV9zaXplKTtcbiYjNDM7XHRcdFx0bWVtY3B5KG5leHRfa2V5LCBodGFiX2VsZW1fa2V5KGh0YWIsIG5leHRfbCksIGtleV9zaXplKTtcbiBcdFx0XHRyZXR1cm4gMDtcbiBcdFx0fVxuIFx0fVxuQEAgLTk1NSw3ICYjNDM7MTA2Nyw3IEBAIHN0YXRpYyB2b2lkIGh0YWJfZWxlbV9mcmVlKHN0cnVjdCBicGZfaHRhYiAqaHRhYiwgc3RydWN0IGh0YWJfZWxlbSAqbClcbiBcdGNoZWNrX2FuZF9jYW5jZWxfZmllbGRzKGh0YWIsIGwpO1xuIFxuIFx0aWYgKGh0YWItXHUwMDNlbWFwLm1hcF90eXBlID09IEJQRl9NQVBfVFlQRV9QRVJDUFVfSEFTSClcbi1cdFx0YnBmX21lbV9jYWNoZV9mcmVlKFx1MDAyNmh0YWItXHUwMDNlcGNwdV9tYSwgbC1cdTAwM2VwdHJfdG9fcHB0cik7XG4mIzQzO1x0XHRicGZfbWVtX2NhY2hlX2ZyZWUoXHUwMDI2aHRhYi1cdTAwM2VwY3B1X21hLCBodGFiX2VsZW1fZ2V0X3B0cl90b19wcHRyKGwpKTtcbiBcdGJwZl9tZW1fY2FjaGVfZnJlZShcdTAwMjZodGFiLVx1MDAzZW1hLCBsKTtcbiB9XG4gXG5AQCAtOTY1LDcgJiM0MzsxMDc3LDcgQEAgc3RhdGljIHZvaWQgaHRhYl9wdXRfZmRfdmFsdWUoc3RydWN0IGJwZl9odGFiICpodGFiLCBzdHJ1Y3QgaHRhYl9lbGVtICpsKVxuIFx0dm9pZCAqcHRyO1xuIFxuIFx0aWYgKG1hcC1cdTAwM2VvcHMtXHUwMDNlbWFwX2ZkX3B1dF9wdHIpIHtcbi1cdFx0cHRyID0gZmRfaHRhYl9tYXBfZ2V0X3B0cihtYXAsIGwpO1xuJiM0MztcdFx0cHRyID0gZmRfaHRhYl9tYXBfZ2V0X3B0cihodGFiLCBsKTtcbiBcdFx0bWFwLVx1MDAzZW9wcy1cdTAwM2VtYXBfZmRfcHV0X3B0cihtYXAsIHB0ciwgdHJ1ZSk7XG4gXHR9XG4gfVxuQEAgLTExMTcsMTAgJiM0MzsxMjI5LDEwIEBAIHN0YXRpYyBzdHJ1Y3QgaHRhYl9lbGVtICphbGxvY19odGFiX2VsZW0oc3RydWN0IGJwZl9odGFiICpodGFiLCB2b2lkICprZXksXG4gXHRcdH1cbiBcdH1cbiBcbi1cdG1lbWNweShsX25ldy1cdTAwM2VrZXksIGtleSwga2V5X3NpemUpO1xuJiM0MztcdG1lbWNweShodGFiX2VsZW1fa2V5KGh0YWIsIGxfbmV3KSwga2V5LCBrZXlfc2l6ZSk7XG4gXHRpZiAocGVyY3B1KSB7XG4gXHRcdGlmIChwcmVhbGxvYykge1xuLVx0XHRcdHBwdHIgPSBodGFiX2VsZW1fZ2V0X3B0cihsX25ldywga2V5X3NpemUpO1xuJiM0MztcdFx0XHRwcHRyID0gaHRhYl9lbGVtX2dldF9wdHIoaHRhYiwgbF9uZXcpO1xuIFx0XHR9IGVsc2Uge1xuIFx0XHRcdC8qIGFsbG9jX3BlcmNwdSB6ZXJvLWZpbGxzICovXG4gXHRcdFx0dm9pZCAqcHRyID0gYnBmX21lbV9jYWNoZV9hbGxvYyhcdTAwMjZodGFiLVx1MDAzZXBjcHVfbWEpO1xuQEAgLTExMzAsMjYgJiM0MzsxMjQyLDI2IEBAIHN0YXRpYyBzdHJ1Y3QgaHRhYl9lbGVtICphbGxvY19odGFiX2VsZW0oc3RydWN0IGJwZl9odGFiICpodGFiLCB2b2lkICprZXksXG4gXHRcdFx0XHRsX25ldyA9IEVSUl9QVFIoLUVOT01FTSk7XG4gXHRcdFx0XHRnb3RvIGRlY19jb3VudDtcbiBcdFx0XHR9XG4tXHRcdFx0bF9uZXctXHUwMDNlcHRyX3RvX3BwdHIgPSBwdHI7XG4mIzQzO1x0XHRcdGh0YWJfZWxlbV9zZXRfcHRyX3RvX3BwdHIobF9uZXcsIHB0cik7XG4gXHRcdFx0cHB0ciA9ICoodm9pZCBfX3BlcmNwdSAqKilwdHI7XG4gXHRcdH1cbiBcbiBcdFx0cGNwdV9pbml0X3ZhbHVlKGh0YWIsIHBwdHIsIHZhbHVlLCBvbmFsbGNwdXMsIG1hcF9mbGFncyk7XG4gXG4gXHRcdGlmICghcHJlYWxsb2MpXG4tXHRcdFx0aHRhYl9lbGVtX3NldF9wdHIobF9uZXcsIGtleV9zaXplLCBwcHRyKTtcbiYjNDM7XHRcdFx0aHRhYl9lbGVtX3NldF9wdHIoaHRhYiwgbF9uZXcsIHBwdHIpO1xuIFx0fSBlbHNlIGlmIChmZF9odGFiX21hcF9uZWVkc19hZGp1c3QoaHRhYikpIHtcbiBcdFx0c2l6ZSA9IHJvdW5kX3VwKHNpemUsIDgpO1xuLVx0XHRtZW1jcHkoaHRhYl9lbGVtX3ZhbHVlKGxfbmV3LCBrZXlfc2l6ZSksIHZhbHVlLCBzaXplKTtcbiYjNDM7XHRcdG1lbWNweShodGFiX2VsZW1fdmFsdWUoaHRhYiwgbF9uZXcpLCB2YWx1ZSwgc2l6ZSk7XG4gXHR9IGVsc2UgaWYgKG1hcF9mbGFncyBcdTAwMjYgQlBGX0ZfTE9DSykge1xuIFx0XHRjb3B5X21hcF92YWx1ZV9sb2NrZWQoXHUwMDI2aHRhYi1cdTAwM2VtYXAsXG4tXHRcdFx0XHQgICAgICBodGFiX2VsZW1fdmFsdWUobF9uZXcsIGtleV9zaXplKSxcbiYjNDM7XHRcdFx0XHQgICAgICBodGFiX2VsZW1fdmFsdWUoaHRhYiwgbF9uZXcpLFxuIFx0XHRcdFx0ICAgICAgdmFsdWUsIGZhbHNlKTtcbiBcdH0gZWxzZSB7XG4tXHRcdGNvcHlfbWFwX3ZhbHVlKFx1MDAyNmh0YWItXHUwMDNlbWFwLCBodGFiX2VsZW1fdmFsdWUobF9uZXcsIGtleV9zaXplKSwgdmFsdWUpO1xuJiM0MztcdFx0Y29weV9tYXBfdmFsdWUoXHUwMDI2aHRhYi1cdTAwM2VtYXAsIGh0YWJfZWxlbV92YWx1ZShodGFiLCBsX25ldyksIHZhbHVlKTtcbiBcdH1cbiBcbi1cdGxfbmV3LVx1MDAzZWhhc2ggPSBoYXNoO1xuJiM0MztcdGh0YWJfZWxlbV9zZXRfaGFzaChodGFiLCBsX25ldywgaGFzaCk7XG4gXHRyZXR1cm4gbF9uZXc7XG4gZGVjX2NvdW50OlxuIFx0ZGVjX2VsZW1fY291bnQoaHRhYik7XG5AQCAtMTE5OSw3ICYjNDM7MTMxMSw3IEBAIHN0YXRpYyBsb25nIGh0YWJfbWFwX3VwZGF0ZV9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSwgdm9pZCAqdmFsdWUsXG4gXHRcdGlmICh1bmxpa2VseSghYnRmX3JlY29yZF9oYXNfZmllbGQobWFwLVx1MDAzZXJlY29yZCwgQlBGX1NQSU5fTE9DSykpKVxuIFx0XHRcdHJldHVybiAtRUlOVkFMO1xuIFx0XHQvKiBmaW5kIGFuIGVsZW1lbnQgd2l0aG91dCB0YWtpbmcgdGhlIGJ1Y2tldCBsb2NrICovXG4tXHRcdGxfb2xkID0gbG9va3VwX251bGxzX2VsZW1fcmF3KGhlYWQsIGhhc2gsIGtleSwga2V5X3NpemUsXG4mIzQzO1x0XHRsX29sZCA9IGxvb2t1cF9udWxsc19lbGVtX3JhdyhodGFiLCBoZWFkLCBoYXNoLCBrZXksIGtleV9zaXplLFxuIFx0XHRcdFx0XHQgICAgICBodGFiLVx1MDAzZW5fYnVja2V0cyk7XG4gXHRcdHJldCA9IGNoZWNrX2ZsYWdzKGh0YWIsIGxfb2xkLCBtYXBfZmxhZ3MpO1xuIFx0XHRpZiAocmV0KVxuQEAgLTEyMDcsNyAmIzQzOzEzMTksNyBAQCBzdGF0aWMgbG9uZyBodGFiX21hcF91cGRhdGVfZWxlbShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXksIHZvaWQgKnZhbHVlLFxuIFx0XHRpZiAobF9vbGQpIHtcbiBcdFx0XHQvKiBncmFiIHRoZSBlbGVtZW50IGxvY2sgYW5kIHVwZGF0ZSB2YWx1ZSBpbiBwbGFjZSAqL1xuIFx0XHRcdGNvcHlfbWFwX3ZhbHVlX2xvY2tlZChtYXAsXG4tXHRcdFx0XHRcdCAgICAgIGh0YWJfZWxlbV92YWx1ZShsX29sZCwga2V5X3NpemUpLFxuJiM0MztcdFx0XHRcdFx0ICAgICAgaHRhYl9lbGVtX3ZhbHVlKGh0YWIsIGxfb2xkKSxcbiBcdFx0XHRcdFx0ICAgICAgdmFsdWUsIGZhbHNlKTtcbiBcdFx0XHRyZXR1cm4gMDtcbiBcdFx0fVxuQEAgLTEyMjEsNyAmIzQzOzEzMzMsNyBAQCBzdGF0aWMgbG9uZyBodGFiX21hcF91cGRhdGVfZWxlbShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXksIHZvaWQgKnZhbHVlLFxuIFx0aWYgKHJldClcbiBcdFx0cmV0dXJuIHJldDtcbiBcbi1cdGxfb2xkID0gbG9va3VwX2VsZW1fcmF3KGhlYWQsIGhhc2gsIGtleSwga2V5X3NpemUpO1xuJiM0MztcdGxfb2xkID0gbG9va3VwX2VsZW1fcmF3KGh0YWIsIGhlYWQsIGhhc2gsIGtleSwga2V5X3NpemUpO1xuIFxuIFx0cmV0ID0gY2hlY2tfZmxhZ3MoaHRhYiwgbF9vbGQsIG1hcF9mbGFncyk7XG4gXHRpZiAocmV0KVxuQEAgLTEyMzUsNyAmIzQzOzEzNDcsNyBAQCBzdGF0aWMgbG9uZyBodGFiX21hcF91cGRhdGVfZWxlbShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXksIHZvaWQgKnZhbHVlLFxuIFx0XHQgKiBhbmQgdXBkYXRlIGVsZW1lbnQgaW4gcGxhY2VcbiBcdFx0ICovXG4gXHRcdGNvcHlfbWFwX3ZhbHVlX2xvY2tlZChtYXAsXG4tXHRcdFx0XHQgICAgICBodGFiX2VsZW1fdmFsdWUobF9vbGQsIGtleV9zaXplKSxcbiYjNDM7XHRcdFx0XHQgICAgICBodGFiX2VsZW1fdmFsdWUoaHRhYiwgbF9vbGQpLFxuIFx0XHRcdFx0ICAgICAgdmFsdWUsIGZhbHNlKTtcbiBcdFx0cmV0ID0gMDtcbiBcdFx0Z290byBlcnI7XG5AQCAtMTI3NSw3ICYjNDM7MTM4Nyw3IEBAIHN0YXRpYyB2b2lkIGh0YWJfbHJ1X3B1c2hfZnJlZShzdHJ1Y3QgYnBmX2h0YWIgKmh0YWIsIHN0cnVjdCBodGFiX2VsZW0gKmVsZW0pXG4ge1xuIFx0Y2hlY2tfYW5kX2NhbmNlbF9maWVsZHMoaHRhYiwgZWxlbSk7XG4gXHRicGZfbWFwX2RlY19lbGVtX2NvdW50KFx1MDAyNmh0YWItXHUwMDNlbWFwKTtcbi1cdGJwZl9scnVfcHVzaF9mcmVlKFx1MDAyNmh0YWItXHUwMDNlbHJ1LCBcdTAwMjZlbGVtLVx1MDAzZWxydV9ub2RlKTtcbiYjNDM7XHRicGZfbHJ1X3B1c2hfZnJlZShcdTAwMjZodGFiLVx1MDAzZWxydSwgaHRhYl9lbGVtX2xydV9ub2RlKGVsZW0pKTtcbiB9XG4gXG4gc3RhdGljIGxvbmcgaHRhYl9scnVfbWFwX3VwZGF0ZV9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSwgdm9pZCAqdmFsdWUsXG5AQCAtMTMxMCwxMyAmIzQzOzE0MjIsMTMgQEAgc3RhdGljIGxvbmcgaHRhYl9scnVfbWFwX3VwZGF0ZV9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSwgdm9pZCAqdmFsdWVcbiBcdGxfbmV3ID0gcHJlYWxsb2NfbHJ1X3BvcChodGFiLCBrZXksIGhhc2gpO1xuIFx0aWYgKCFsX25ldylcbiBcdFx0cmV0dXJuIC1FTk9NRU07XG4tXHRjb3B5X21hcF92YWx1ZShcdTAwMjZodGFiLVx1MDAzZW1hcCwgaHRhYl9lbGVtX3ZhbHVlKGxfbmV3LCBtYXAtXHUwMDNla2V5X3NpemUpLCB2YWx1ZSk7XG4mIzQzO1x0Y29weV9tYXBfdmFsdWUoXHUwMDI2aHRhYi1cdTAwM2VtYXAsIGh0YWJfZWxlbV92YWx1ZShodGFiLCBsX25ldyksIHZhbHVlKTtcbiBcbiBcdHJldCA9IGh0YWJfbG9ja19idWNrZXQoYiwgXHUwMDI2ZmxhZ3MpO1xuIFx0aWYgKHJldClcbiBcdFx0Z290byBlcnJfbG9ja19idWNrZXQ7XG4gXG4tXHRsX29sZCA9IGxvb2t1cF9lbGVtX3JhdyhoZWFkLCBoYXNoLCBrZXksIGtleV9zaXplKTtcbiYjNDM7XHRsX29sZCA9IGxvb2t1cF9lbGVtX3JhdyhodGFiLCBoZWFkLCBoYXNoLCBrZXksIGtleV9zaXplKTtcbiBcbiBcdHJldCA9IGNoZWNrX2ZsYWdzKGh0YWIsIGxfb2xkLCBtYXBfZmxhZ3MpO1xuIFx0aWYgKHJldClcbkBAIC0xMzI3LDcgJiM0MzsxNDM5LDcgQEAgc3RhdGljIGxvbmcgaHRhYl9scnVfbWFwX3VwZGF0ZV9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSwgdm9pZCAqdmFsdWVcbiBcdCAqL1xuIFx0aGxpc3RfbnVsbHNfYWRkX2hlYWRfcmN1KFx1MDAyNmxfbmV3LVx1MDAzZWhhc2hfbm9kZSwgaGVhZCk7XG4gXHRpZiAobF9vbGQpIHtcbi1cdFx0YnBmX2xydV9ub2RlX3NldF9yZWYoXHUwMDI2bF9uZXctXHUwMDNlbHJ1X25vZGUpO1xuJiM0MztcdFx0YnBmX2xydV9ub2RlX3NldF9yZWYoaHRhYl9lbGVtX2xydV9ub2RlKGxfbmV3KSk7XG4gXHRcdGhsaXN0X251bGxzX2RlbF9yY3UoXHUwMDI2bF9vbGQtXHUwMDNlaGFzaF9ub2RlKTtcbiBcdH1cbiBcdHJldCA9IDA7XG5AQCAtMTM4Myw3ICYjNDM7MTQ5NSw3IEBAIHN0YXRpYyBsb25nIGh0YWJfbWFwX3VwZGF0ZV9lbGVtX2luX3BsYWNlKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSxcbiBcdGlmIChyZXQpXG4gXHRcdHJldHVybiByZXQ7XG4gXG4tXHRsX29sZCA9IGxvb2t1cF9lbGVtX3JhdyhoZWFkLCBoYXNoLCBrZXksIGtleV9zaXplKTtcbiYjNDM7XHRsX29sZCA9IGxvb2t1cF9lbGVtX3JhdyhodGFiLCBoZWFkLCBoYXNoLCBrZXksIGtleV9zaXplKTtcbiBcbiBcdHJldCA9IGNoZWNrX2ZsYWdzKGh0YWIsIGxfb2xkLCBtYXBfZmxhZ3MpO1xuIFx0aWYgKHJldClcbkBAIC0xMzkyLDEwICYjNDM7MTUwNCwxMCBAQCBzdGF0aWMgbG9uZyBodGFiX21hcF91cGRhdGVfZWxlbV9pbl9wbGFjZShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXksXG4gXHRpZiAobF9vbGQpIHtcbiBcdFx0LyogVXBkYXRlIHZhbHVlIGluLXBsYWNlICovXG4gXHRcdGlmIChwZXJjcHUpIHtcbi1cdFx0XHRwY3B1X2NvcHlfdmFsdWUoaHRhYiwgaHRhYl9lbGVtX2dldF9wdHIobF9vbGQsIGtleV9zaXplKSxcbiYjNDM7XHRcdFx0cGNwdV9jb3B5X3ZhbHVlKGh0YWIsIGh0YWJfZWxlbV9nZXRfcHRyKGh0YWIsIGxfb2xkKSxcbiBcdFx0XHRcdFx0dmFsdWUsIG9uYWxsY3B1cywgbWFwX2ZsYWdzKTtcbiBcdFx0fSBlbHNlIHtcbi1cdFx0XHR2b2lkICoqaW5uZXJfbWFwX3BwdHIgPSBodGFiX2VsZW1fdmFsdWUobF9vbGQsIGtleV9zaXplKTtcbiYjNDM7XHRcdFx0dm9pZCAqKmlubmVyX21hcF9wcHRyID0gaHRhYl9lbGVtX3ZhbHVlKGh0YWIsIGxfb2xkKTtcbiBcbiBcdFx0XHRvbGRfbWFwX3B0ciA9ICppbm5lcl9tYXBfcHB0cjtcbiBcdFx0XHRXUklURV9PTkNFKCppbm5lcl9tYXBfcHB0ciwgKih2b2lkICoqKXZhbHVlKTtcbkBAIC0xNDU2LDIwICYjNDM7MTU2OCwyMCBAQCBzdGF0aWMgbG9uZyBfX2h0YWJfbHJ1X3BlcmNwdV9tYXBfdXBkYXRlX2VsZW0oc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5LFxuIFx0aWYgKHJldClcbiBcdFx0Z290byBlcnJfbG9ja19idWNrZXQ7XG4gXG4tXHRsX29sZCA9IGxvb2t1cF9lbGVtX3JhdyhoZWFkLCBoYXNoLCBrZXksIGtleV9zaXplKTtcbiYjNDM7XHRsX29sZCA9IGxvb2t1cF9lbGVtX3JhdyhodGFiLCBoZWFkLCBoYXNoLCBrZXksIGtleV9zaXplKTtcbiBcbiBcdHJldCA9IGNoZWNrX2ZsYWdzKGh0YWIsIGxfb2xkLCBtYXBfZmxhZ3MpO1xuIFx0aWYgKHJldClcbiBcdFx0Z290byBlcnI7XG4gXG4gXHRpZiAobF9vbGQpIHtcbi1cdFx0YnBmX2xydV9ub2RlX3NldF9yZWYoXHUwMDI2bF9vbGQtXHUwMDNlbHJ1X25vZGUpO1xuJiM0MztcdFx0YnBmX2xydV9ub2RlX3NldF9yZWYoaHRhYl9lbGVtX2xydV9ub2RlKGxfb2xkKSk7XG4gXG4gXHRcdC8qIHBlci1jcHUgaGFzaCBtYXAgY2FuIHVwZGF0ZSB2YWx1ZSBpbi1wbGFjZSAqL1xuLVx0XHRwY3B1X2NvcHlfdmFsdWUoaHRhYiwgaHRhYl9lbGVtX2dldF9wdHIobF9vbGQsIGtleV9zaXplKSxcbiYjNDM7XHRcdHBjcHVfY29weV92YWx1ZShodGFiLCBodGFiX2VsZW1fZ2V0X3B0cihodGFiLCBsX29sZCksXG4gXHRcdFx0XHR2YWx1ZSwgb25hbGxjcHVzLCBtYXBfZmxhZ3MpO1xuIFx0fSBlbHNlIHtcbi1cdFx0cGNwdV9pbml0X3ZhbHVlKGh0YWIsIGh0YWJfZWxlbV9nZXRfcHRyKGxfbmV3LCBrZXlfc2l6ZSksXG4mIzQzO1x0XHRwY3B1X2luaXRfdmFsdWUoaHRhYiwgaHRhYl9lbGVtX2dldF9wdHIoaHRhYiwgbF9uZXcpLFxuIFx0XHRcdFx0dmFsdWUsIG9uYWxsY3B1cywgbWFwX2ZsYWdzKTtcbiBcdFx0aGxpc3RfbnVsbHNfYWRkX2hlYWRfcmN1KFx1MDAyNmxfbmV3LVx1MDAzZWhhc2hfbm9kZSwgaGVhZCk7XG4gXHRcdGxfbmV3ID0gTlVMTDtcbkBAIC0xNDgwLDcgJiM0MzsxNTkyLDcgQEAgc3RhdGljIGxvbmcgX19odGFiX2xydV9wZXJjcHVfbWFwX3VwZGF0ZV9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSxcbiBlcnJfbG9ja19idWNrZXQ6XG4gXHRpZiAobF9uZXcpIHtcbiBcdFx0YnBmX21hcF9kZWNfZWxlbV9jb3VudChcdTAwMjZodGFiLVx1MDAzZW1hcCk7XG4tXHRcdGJwZl9scnVfcHVzaF9mcmVlKFx1MDAyNmh0YWItXHUwMDNlbHJ1LCBcdTAwMjZsX25ldy1cdTAwM2VscnVfbm9kZSk7XG4mIzQzO1x0XHRicGZfbHJ1X3B1c2hfZnJlZShcdTAwMjZodGFiLVx1MDAzZWxydSwgaHRhYl9lbGVtX2xydV9ub2RlKGxfbmV3KSk7XG4gXHR9XG4gXHRyZXR1cm4gcmV0O1xuIH1cbkBAIC0xNTIxLDcgJiM0MzsxNjMzLDcgQEAgc3RhdGljIGxvbmcgaHRhYl9tYXBfZGVsZXRlX2VsZW0oc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5KVxuIFx0aWYgKHJldClcbiBcdFx0cmV0dXJuIHJldDtcbiBcbi1cdGwgPSBsb29rdXBfZWxlbV9yYXcoaGVhZCwgaGFzaCwga2V5LCBrZXlfc2l6ZSk7XG4mIzQzO1x0bCA9IGxvb2t1cF9lbGVtX3JhdyhodGFiLCBoZWFkLCBoYXNoLCBrZXksIGtleV9zaXplKTtcbiBcdGlmIChsKVxuIFx0XHRobGlzdF9udWxsc19kZWxfcmN1KFx1MDAyNmwtXHUwMDNlaGFzaF9ub2RlKTtcbiBcdGVsc2VcbkBAIC0xNTU2LDcgJiM0MzsxNjY4LDcgQEAgc3RhdGljIGxvbmcgaHRhYl9scnVfbWFwX2RlbGV0ZV9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSlcbiBcdGlmIChyZXQpXG4gXHRcdHJldHVybiByZXQ7XG4gXG4tXHRsID0gbG9va3VwX2VsZW1fcmF3KGhlYWQsIGhhc2gsIGtleSwga2V5X3NpemUpO1xuJiM0MztcdGwgPSBsb29rdXBfZWxlbV9yYXcoaHRhYiwgaGVhZCwgaGFzaCwga2V5LCBrZXlfc2l6ZSk7XG4gXG4gXHRpZiAobClcbiBcdFx0aGxpc3RfbnVsbHNfZGVsX3JjdShcdTAwMjZsLVx1MDAzZWhhc2hfbm9kZSk7XG5AQCAtMTYwMiw3ICYjNDM7MTcxNCw3IEBAIHN0YXRpYyB2b2lkIGh0YWJfZnJlZV9tYWxsb2NlZF9pbnRlcm5hbF9zdHJ1Y3RzKHN0cnVjdCBicGZfaHRhYiAqaHRhYilcbiBcdFx0aGxpc3RfbnVsbHNfZm9yX2VhY2hfZW50cnkobCwgbiwgaGVhZCwgaGFzaF9ub2RlKSB7XG4gXHRcdFx0LyogV2Ugb25seSBmcmVlIGludGVybmFsIHN0cnVjdHMgb24gdXJlZiBkcm9wcGluZyB0byB6ZXJvICovXG4gXHRcdFx0YnBmX21hcF9mcmVlX2ludGVybmFsX3N0cnVjdHMoXHUwMDI2aHRhYi1cdTAwM2VtYXAsXG4tXHRcdFx0XHRcdFx0ICAgICAgaHRhYl9lbGVtX3ZhbHVlKGwsIGh0YWItXHUwMDNlbWFwLmtleV9zaXplKSk7XG4mIzQzO1x0XHRcdFx0XHRcdCAgICAgIGh0YWJfZWxlbV92YWx1ZShodGFiLCBsKSk7XG4gXHRcdH1cbiBcdFx0Y29uZF9yZXNjaGVkX3JjdSgpO1xuIFx0fVxuQEAgLTE2OTcsNyAmIzQzOzE4MDksNyBAQCBzdGF0aWMgaW50IF9faHRhYl9tYXBfbG9va3VwX2FuZF9kZWxldGVfZWxlbShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXksXG4gXHRpZiAocmV0KVxuIFx0XHRyZXR1cm4gcmV0O1xuIFxuLVx0bCA9IGxvb2t1cF9lbGVtX3JhdyhoZWFkLCBoYXNoLCBrZXksIGtleV9zaXplKTtcbiYjNDM7XHRsID0gbG9va3VwX2VsZW1fcmF3KGh0YWIsIGhlYWQsIGhhc2gsIGtleSwga2V5X3NpemUpO1xuIFx0aWYgKCFsKSB7XG4gXHRcdHJldCA9IC1FTk9FTlQ7XG4gXHRcdGdvdG8gb3V0X3VubG9jaztcbkBAIC0xNzA4LDE0ICYjNDM7MTgyMCwxNCBAQCBzdGF0aWMgaW50IF9faHRhYl9tYXBfbG9va3VwX2FuZF9kZWxldGVfZWxlbShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXksXG4gXHRcdHZvaWQgX19wZXJjcHUgKnBwdHI7XG4gXHRcdGludCBvZmYgPSAwLCBjcHU7XG4gXG4tXHRcdHBwdHIgPSBodGFiX2VsZW1fZ2V0X3B0cihsLCBrZXlfc2l6ZSk7XG4mIzQzO1x0XHRwcHRyID0gaHRhYl9lbGVtX2dldF9wdHIoaHRhYiwgbCk7XG4gXHRcdGZvcl9lYWNoX3Bvc3NpYmxlX2NwdShjcHUpIHtcbiBcdFx0XHRjb3B5X21hcF92YWx1ZV9sb25nKFx1MDAyNmh0YWItXHUwMDNlbWFwLCB2YWx1ZSAmIzQzOyBvZmYsIHBlcl9jcHVfcHRyKHBwdHIsIGNwdSkpO1xuIFx0XHRcdGNoZWNrX2FuZF9pbml0X21hcF92YWx1ZShcdTAwMjZodGFiLVx1MDAzZW1hcCwgdmFsdWUgJiM0Mzsgb2ZmKTtcbiBcdFx0XHRvZmYgJiM0Mzs9IHJvdW5kdXBfdmFsdWVfc2l6ZTtcbiBcdFx0fVxuIFx0fSBlbHNlIHtcbi1cdFx0dm9pZCAqc3JjID0gaHRhYl9lbGVtX3ZhbHVlKGwsIG1hcC1cdTAwM2VrZXlfc2l6ZSk7XG4mIzQzO1x0XHR2b2lkICpzcmMgPSBodGFiX2VsZW1fdmFsdWUoaHRhYiwgbCk7XG4gXG4gXHRcdGlmIChmbGFncyBcdTAwMjYgQlBGX0ZfTE9DSylcbiBcdFx0XHRjb3B5X21hcF92YWx1ZV9sb2NrZWQobWFwLCB2YWx1ZSwgc3JjLCB0cnVlKTtcbkBAIC0xODk4LDEzICYjNDM7MjAxMCwxMyBAQCBfX2h0YWJfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2JhdGNoKHN0cnVjdCBicGZfbWFwICptYXAsXG4gXHRcdGdvdG8gbmV4dF9iYXRjaDtcbiBcbiBcdGhsaXN0X251bGxzX2Zvcl9lYWNoX2VudHJ5X3NhZmUobCwgbiwgaGVhZCwgaGFzaF9ub2RlKSB7XG4tXHRcdG1lbWNweShkc3Rfa2V5LCBsLVx1MDAzZWtleSwga2V5X3NpemUpO1xuJiM0MztcdFx0bWVtY3B5KGRzdF9rZXksIGh0YWJfZWxlbV9rZXkoaHRhYiwgbCksIGtleV9zaXplKTtcbiBcbiBcdFx0aWYgKGlzX3BlcmNwdSkge1xuIFx0XHRcdGludCBvZmYgPSAwLCBjcHU7XG4gXHRcdFx0dm9pZCBfX3BlcmNwdSAqcHB0cjtcbiBcbi1cdFx0XHRwcHRyID0gaHRhYl9lbGVtX2dldF9wdHIobCwgbWFwLVx1MDAzZWtleV9zaXplKTtcbiYjNDM7XHRcdFx0cHB0ciA9IGh0YWJfZWxlbV9nZXRfcHRyKGh0YWIsIGwpO1xuIFx0XHRcdGlmIChlbGVtX21hcF9mbGFncyBcdTAwMjYgQlBGX0ZfQ1BVKSB7XG4gXHRcdFx0XHRjcHUgPSBlbGVtX21hcF9mbGFncyBcdTAwM2VcdTAwM2UgMzI7XG4gXHRcdFx0XHRjb3B5X21hcF92YWx1ZShcdTAwMjZodGFiLVx1MDAzZW1hcCwgZHN0X3ZhbCwgcGVyX2NwdV9wdHIocHB0ciwgY3B1KSk7XG5AQCAtMTkxOCw3ICYjNDM7MjAzMCw3IEBAIF9faHRhYl9tYXBfbG9va3VwX2FuZF9kZWxldGVfYmF0Y2goc3RydWN0IGJwZl9tYXAgKm1hcCxcbiBcdFx0XHRcdH1cbiBcdFx0XHR9XG4gXHRcdH0gZWxzZSB7XG4tXHRcdFx0dmFsdWUgPSBodGFiX2VsZW1fdmFsdWUobCwga2V5X3NpemUpO1xuJiM0MztcdFx0XHR2YWx1ZSA9IGh0YWJfZWxlbV92YWx1ZShodGFiLCBsKTtcbiBcdFx0XHRpZiAoaXNfZmRfaHRhYihodGFiKSkge1xuIFx0XHRcdFx0c3RydWN0IGJwZl9tYXAgKippbm5lcl9tYXAgPSB2YWx1ZTtcbiBcbkBAIC0yMTgzLDEyICYjNDM7MjI5NSwxMiBAQCBzdGF0aWMgaW50IF9fYnBmX2hhc2hfbWFwX3NlcV9zaG93KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCBzdHJ1Y3QgaHRhYl9lbGVtICplbGVtKVxuIFx0XHRjdHgubWV0YSA9IFx1MDAyNm1ldGE7XG4gXHRcdGN0eC5tYXAgPSBpbmZvLVx1MDAzZW1hcDtcbiBcdFx0aWYgKGVsZW0pIHtcbi1cdFx0XHRjdHgua2V5ID0gZWxlbS1cdTAwM2VrZXk7XG4mIzQzO1x0XHRcdGN0eC5rZXkgPSBodGFiX2VsZW1fa2V5KGluZm8tXHUwMDNlaHRhYiwgZWxlbSk7XG4gXHRcdFx0aWYgKCFpbmZvLVx1MDAzZXBlcmNwdV92YWx1ZV9idWYpIHtcbi1cdFx0XHRcdGN0eC52YWx1ZSA9IGh0YWJfZWxlbV92YWx1ZShlbGVtLCBtYXAtXHUwMDNla2V5X3NpemUpO1xuJiM0MztcdFx0XHRcdGN0eC52YWx1ZSA9IGh0YWJfZWxlbV92YWx1ZShpbmZvLVx1MDAzZWh0YWIsIGVsZW0pO1xuIFx0XHRcdH0gZWxzZSB7XG4gXHRcdFx0XHRyb3VuZHVwX3ZhbHVlX3NpemUgPSByb3VuZF91cChtYXAtXHUwMDNldmFsdWVfc2l6ZSwgOCk7XG4tXHRcdFx0XHRwcHRyID0gaHRhYl9lbGVtX2dldF9wdHIoZWxlbSwgbWFwLVx1MDAzZWtleV9zaXplKTtcbiYjNDM7XHRcdFx0XHRwcHRyID0gaHRhYl9lbGVtX2dldF9wdHIoaW5mby1cdTAwM2VodGFiLCBlbGVtKTtcbiBcdFx0XHRcdGZvcl9lYWNoX3Bvc3NpYmxlX2NwdShjcHUpIHtcbiBcdFx0XHRcdFx0Y29weV9tYXBfdmFsdWVfbG9uZyhtYXAsIGluZm8tXHUwMDNlcGVyY3B1X3ZhbHVlX2J1ZiAmIzQzOyBvZmYsXG4gXHRcdFx0XHRcdFx0XHQgICAgcGVyX2NwdV9wdHIocHB0ciwgY3B1KSk7XG5AQCAtMjI5MywxMyAmIzQzOzI0MDUsMTMgQEAgc3RhdGljIGxvbmcgYnBmX2Zvcl9lYWNoX2hhc2hfZWxlbShzdHJ1Y3QgYnBmX21hcCAqbWFwLCBicGZfY2FsbGJhY2tfdCBjYWxsYmFja19cbiBcdFx0cmN1X3JlYWRfbG9jaygpO1xuIFx0XHRoZWFkID0gXHUwMDI2Yi1cdTAwM2VoZWFkO1xuIFx0XHRobGlzdF9udWxsc19mb3JfZWFjaF9lbnRyeV9zYWZlKGVsZW0sIG4sIGhlYWQsIGhhc2hfbm9kZSkge1xuLVx0XHRcdGtleSA9IGVsZW0tXHUwMDNla2V5O1xuJiM0MztcdFx0XHRrZXkgPSBodGFiX2VsZW1fa2V5KGh0YWIsIGVsZW0pO1xuIFx0XHRcdGlmIChpc19wZXJjcHUpIHtcbiBcdFx0XHRcdC8qIGN1cnJlbnQgY3B1IHZhbHVlIGZvciBwZXJjcHUgbWFwICovXG4tXHRcdFx0XHRwcHRyID0gaHRhYl9lbGVtX2dldF9wdHIoZWxlbSwgbWFwLVx1MDAzZWtleV9zaXplKTtcbiYjNDM7XHRcdFx0XHRwcHRyID0gaHRhYl9lbGVtX2dldF9wdHIoaHRhYiwgZWxlbSk7XG4gXHRcdFx0XHR2YWwgPSB0aGlzX2NwdV9wdHIocHB0cik7XG4gXHRcdFx0fSBlbHNlIHtcbi1cdFx0XHRcdHZhbCA9IGh0YWJfZWxlbV92YWx1ZShlbGVtLCBtYXAtXHUwMDNla2V5X3NpemUpO1xuJiM0MztcdFx0XHRcdHZhbCA9IGh0YWJfZWxlbV92YWx1ZShodGFiLCBlbGVtKTtcbiBcdFx0XHR9XG4gXHRcdFx0bnVtX2VsZW1zJiM0MzsmIzQzOztcbiBcdFx0XHRyZXQgPSBjYWxsYmFja19mbigodTY0KShsb25nKW1hcCwgKHU2NCkobG9uZylrZXksXG5AQCAtMjQwMywxMCAmIzQzOzI1MTUsMTEgQEAgY29uc3Qgc3RydWN0IGJwZl9tYXBfb3BzIGh0YWJfbHJ1X21hcF9vcHMgPSB7XG4gLyogQ2FsbGVkIGZyb20gZUJQRiBwcm9ncmFtICovXG4gc3RhdGljIHZvaWQgKmh0YWJfcGVyY3B1X21hcF9sb29rdXBfZWxlbShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXkpXG4ge1xuJiM0MztcdHN0cnVjdCBicGZfaHRhYiAqaHRhYiA9IGNvbnRhaW5lcl9vZihtYXAsIHN0cnVjdCBicGZfaHRhYiwgbWFwKTtcbiBcdHN0cnVjdCBodGFiX2VsZW0gKmwgPSBfX2h0YWJfbWFwX2xvb2t1cF9lbGVtKG1hcCwga2V5KTtcbiBcbiBcdGlmIChsKVxuLVx0XHRyZXR1cm4gdGhpc19jcHVfcHRyKGh0YWJfZWxlbV9nZXRfcHRyKGwsIG1hcC1cdTAwM2VrZXlfc2l6ZSkpO1xuJiM0MztcdFx0cmV0dXJuIHRoaXNfY3B1X3B0cihodGFiX2VsZW1fZ2V0X3B0cihodGFiLCBsKSk7XG4gXHRlbHNlXG4gXHRcdHJldHVybiBOVUxMO1xuIH1cbkBAIC0yNDE0LDYgJiM0MzsyNTI3LDcgQEAgc3RhdGljIHZvaWQgKmh0YWJfcGVyY3B1X21hcF9sb29rdXBfZWxlbShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXkpXG4gLyogaW5saW5lIGJwZl9tYXBfbG9va3VwX2VsZW0oKSBjYWxsIGZvciBwZXItQ1BVIGhhc2htYXAgKi9cbiBzdGF0aWMgaW50IGh0YWJfcGVyY3B1X21hcF9nZW5fbG9va3VwKHN0cnVjdCBicGZfbWFwICptYXAsIHN0cnVjdCBicGZfaW5zbiAqaW5zbl9idWYpXG4ge1xuJiM0MztcdHN0cnVjdCBicGZfaHRhYiAqaHRhYiA9IGNvbnRhaW5lcl9vZihtYXAsIHN0cnVjdCBicGZfaHRhYiwgbWFwKTtcbiBcdHN0cnVjdCBicGZfaW5zbiAqaW5zbiA9IGluc25fYnVmO1xuIFxuIFx0aWYgKCFicGZfaml0X3N1cHBvcnRzX3BlcmNwdV9pbnNuKCkpXG5AQCAtMjQyNCw3ICYjNDM7MjUzOCw3IEBAIHN0YXRpYyBpbnQgaHRhYl9wZXJjcHVfbWFwX2dlbl9sb29rdXAoc3RydWN0IGJwZl9tYXAgKm1hcCwgc3RydWN0IGJwZl9pbnNuICppbnNuXG4gXHQqaW5zbiYjNDM7JiM0MzsgPSBCUEZfRU1JVF9DQUxMKF9faHRhYl9tYXBfbG9va3VwX2VsZW0pO1xuIFx0Kmluc24mIzQzOyYjNDM7ID0gQlBGX0pNUF9JTU0oQlBGX0pFUSwgQlBGX1JFR18wLCAwLCAzKTtcbiBcdCppbnNuJiM0MzsmIzQzOyA9IEJQRl9BTFU2NF9JTU0oQlBGX0FERCwgQlBGX1JFR18wLFxuLVx0XHRcdFx0b2Zmc2V0b2Yoc3RydWN0IGh0YWJfZWxlbSwga2V5KSAmIzQzOyByb3VuZHVwKG1hcC1cdTAwM2VrZXlfc2l6ZSwgOCkpO1xuJiM0MztcdFx0XHRcdGh0YWItXHUwMDNla2V5X29mZnNldCAmIzQzOyByb3VuZHVwKG1hcC1cdTAwM2VrZXlfc2l6ZSwgOCkpO1xuIFx0Kmluc24mIzQzOyYjNDM7ID0gQlBGX0xEWF9NRU0oQlBGX0RXLCBCUEZfUkVHXzAsIEJQRl9SRUdfMCwgMCk7XG4gXHQqaW5zbiYjNDM7JiM0MzsgPSBCUEZfTU9WNjRfUEVSQ1BVX1JFRyhCUEZfUkVHXzAsIEJQRl9SRUdfMCk7XG4gXG5AQCAtMjQzMyw2ICYjNDM7MjU0Nyw3IEBAIHN0YXRpYyBpbnQgaHRhYl9wZXJjcHVfbWFwX2dlbl9sb29rdXAoc3RydWN0IGJwZl9tYXAgKm1hcCwgc3RydWN0IGJwZl9pbnNuICppbnNuXG4gXG4gc3RhdGljIHZvaWQgKmh0YWJfcGVyY3B1X21hcF9sb29rdXBfcGVyY3B1X2VsZW0oc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5LCB1MzIgY3B1KVxuIHtcbiYjNDM7XHRzdHJ1Y3QgYnBmX2h0YWIgKmh0YWIgPSBjb250YWluZXJfb2YobWFwLCBzdHJ1Y3QgYnBmX2h0YWIsIG1hcCk7XG4gXHRzdHJ1Y3QgaHRhYl9lbGVtICpsO1xuIFxuIFx0aWYgKGNwdSBcdTAwM2U9IG5yX2NwdV9pZHMpXG5AQCAtMjQ0MCwxOCAmIzQzOzI1NTUsMTkgQEAgc3RhdGljIHZvaWQgKmh0YWJfcGVyY3B1X21hcF9sb29rdXBfcGVyY3B1X2VsZW0oc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5LFxuIFxuIFx0bCA9IF9faHRhYl9tYXBfbG9va3VwX2VsZW0obWFwLCBrZXkpO1xuIFx0aWYgKGwpXG4tXHRcdHJldHVybiBwZXJfY3B1X3B0cihodGFiX2VsZW1fZ2V0X3B0cihsLCBtYXAtXHUwMDNla2V5X3NpemUpLCBjcHUpO1xuJiM0MztcdFx0cmV0dXJuIHBlcl9jcHVfcHRyKGh0YWJfZWxlbV9nZXRfcHRyKGh0YWIsIGwpLCBjcHUpO1xuIFx0ZWxzZVxuIFx0XHRyZXR1cm4gTlVMTDtcbiB9XG4gXG4gc3RhdGljIHZvaWQgKmh0YWJfbHJ1X3BlcmNwdV9tYXBfbG9va3VwX2VsZW0oc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5KVxuIHtcbiYjNDM7XHRzdHJ1Y3QgYnBmX2h0YWIgKmh0YWIgPSBjb250YWluZXJfb2YobWFwLCBzdHJ1Y3QgYnBmX2h0YWIsIG1hcCk7XG4gXHRzdHJ1Y3QgaHRhYl9lbGVtICpsID0gX19odGFiX21hcF9sb29rdXBfZWxlbShtYXAsIGtleSk7XG4gXG4gXHRpZiAobCkge1xuLVx0XHRicGZfbHJ1X25vZGVfc2V0X3JlZihcdTAwMjZsLVx1MDAzZWxydV9ub2RlKTtcbi1cdFx0cmV0dXJuIHRoaXNfY3B1X3B0cihodGFiX2VsZW1fZ2V0X3B0cihsLCBtYXAtXHUwMDNla2V5X3NpemUpKTtcbiYjNDM7XHRcdGJwZl9scnVfbm9kZV9zZXRfcmVmKGh0YWJfZWxlbV9scnVfbm9kZShsKSk7XG4mIzQzO1x0XHRyZXR1cm4gdGhpc19jcHVfcHRyKGh0YWJfZWxlbV9nZXRfcHRyKGh0YWIsIGwpKTtcbiBcdH1cbiBcbiBcdHJldHVybiBOVUxMO1xuQEAgLTI0NTksNiAmIzQzOzI1NzUsNyBAQCBzdGF0aWMgdm9pZCAqaHRhYl9scnVfcGVyY3B1X21hcF9sb29rdXBfZWxlbShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXkpXG4gXG4gc3RhdGljIHZvaWQgKmh0YWJfbHJ1X3BlcmNwdV9tYXBfbG9va3VwX3BlcmNwdV9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSwgdTMyIGNwdSlcbiB7XG4mIzQzO1x0c3RydWN0IGJwZl9odGFiICpodGFiID0gY29udGFpbmVyX29mKG1hcCwgc3RydWN0IGJwZl9odGFiLCBtYXApO1xuIFx0c3RydWN0IGh0YWJfZWxlbSAqbDtcbiBcbiBcdGlmIChjcHUgXHUwMDNlPSBucl9jcHVfaWRzKVxuQEAgLTI0NjYsOCAmIzQzOzI1ODMsOCBAQCBzdGF0aWMgdm9pZCAqaHRhYl9scnVfcGVyY3B1X21hcF9sb29rdXBfcGVyY3B1X2VsZW0oc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa1xuIFxuIFx0bCA9IF9faHRhYl9tYXBfbG9va3VwX2VsZW0obWFwLCBrZXkpO1xuIFx0aWYgKGwpIHtcbi1cdFx0YnBmX2xydV9ub2RlX3NldF9yZWYoXHUwMDI2bC1cdTAwM2VscnVfbm9kZSk7XG4tXHRcdHJldHVybiBwZXJfY3B1X3B0cihodGFiX2VsZW1fZ2V0X3B0cihsLCBtYXAtXHUwMDNla2V5X3NpemUpLCBjcHUpO1xuJiM0MztcdFx0YnBmX2xydV9ub2RlX3NldF9yZWYoaHRhYl9lbGVtX2xydV9ub2RlKGwpKTtcbiYjNDM7XHRcdHJldHVybiBwZXJfY3B1X3B0cihodGFiX2VsZW1fZ2V0X3B0cihodGFiLCBsKSwgY3B1KTtcbiBcdH1cbiBcbiBcdHJldHVybiBOVUxMO1xuQEAgLTI0NzUsNiAmIzQzOzI1OTIsNyBAQCBzdGF0aWMgdm9pZCAqaHRhYl9scnVfcGVyY3B1X21hcF9sb29rdXBfcGVyY3B1X2VsZW0oc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa1xuIFxuIGludCBicGZfcGVyY3B1X2hhc2hfY29weShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXksIHZvaWQgKnZhbHVlLCB1NjQgbWFwX2ZsYWdzKVxuIHtcbiYjNDM7XHRzdHJ1Y3QgYnBmX2h0YWIgKmh0YWIgPSBjb250YWluZXJfb2YobWFwLCBzdHJ1Y3QgYnBmX2h0YWIsIG1hcCk7XG4gXHRzdHJ1Y3QgaHRhYl9lbGVtICpsO1xuIFx0dm9pZCBfX3BlcmNwdSAqcHB0cjtcbiBcdGludCByZXQgPSAtRU5PRU5UO1xuQEAgLTI0OTQsNyAmIzQzOzI2MTIsNyBAQCBpbnQgYnBmX3BlcmNwdV9oYXNoX2NvcHkoc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5LCB2b2lkICp2YWx1ZSwgdTY0IG1hcF9mbFxuIFx0LyogV2UgZG8gbm90IG1hcmsgTFJVIG1hcCBlbGVtZW50IGhlcmUgaW4gb3JkZXIgdG8gbm90IG1lc3MgdXBcbiBcdCAqIGV2aWN0aW9uIGhldXJpc3RpY3Mgd2hlbiB1c2VyIHNwYWNlIGRvZXMgYSBtYXAgd2Fsay5cbiBcdCAqL1xuLVx0cHB0ciA9IGh0YWJfZWxlbV9nZXRfcHRyKGwsIG1hcC1cdTAwM2VrZXlfc2l6ZSk7XG4mIzQzO1x0cHB0ciA9IGh0YWJfZWxlbV9nZXRfcHRyKGh0YWIsIGwpO1xuIFx0aWYgKG1hcF9mbGFncyBcdTAwMjYgQlBGX0ZfQ1BVKSB7XG4gXHRcdGNwdSA9IG1hcF9mbGFncyBcdTAwM2VcdTAwM2UgMzI7XG4gXHRcdGNvcHlfbWFwX3ZhbHVlKG1hcCwgdmFsdWUsIHBlcl9jcHVfcHRyKHBwdHIsIGNwdSkpO1xuQEAgLTI1MzIsNiAmIzQzOzI2NTAsNyBAQCBpbnQgYnBmX3BlcmNwdV9oYXNoX3VwZGF0ZShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXksIHZvaWQgKnZhbHVlLFxuIHN0YXRpYyB2b2lkIGh0YWJfcGVyY3B1X21hcF9zZXFfc2hvd19lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSxcbiBcdFx0XHRcdFx0ICBzdHJ1Y3Qgc2VxX2ZpbGUgKm0pXG4ge1xuJiM0MztcdHN0cnVjdCBicGZfaHRhYiAqaHRhYiA9IGNvbnRhaW5lcl9vZihtYXAsIHN0cnVjdCBicGZfaHRhYiwgbWFwKTtcbiBcdHN0cnVjdCBodGFiX2VsZW0gKmw7XG4gXHR2b2lkIF9fcGVyY3B1ICpwcHRyO1xuIFx0aW50IGNwdTtcbkBAIC0yNTQ2LDcgJiM0MzsyNjY1LDcgQEAgc3RhdGljIHZvaWQgaHRhYl9wZXJjcHVfbWFwX3NlcV9zaG93X2VsZW0oc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5LFxuIFxuIFx0YnRmX3R5cGVfc2VxX3Nob3cobWFwLVx1MDAzZWJ0ZiwgbWFwLVx1MDAzZWJ0Zl9rZXlfdHlwZV9pZCwga2V5LCBtKTtcbiBcdHNlcV9wdXRzKG0sIFwmIzM0Ozoge1xcblwmIzM0Oyk7XG4tXHRwcHRyID0gaHRhYl9lbGVtX2dldF9wdHIobCwgbWFwLVx1MDAzZWtleV9zaXplKTtcbiYjNDM7XHRwcHRyID0gaHRhYl9lbGVtX2dldF9wdHIoaHRhYiwgbCk7XG4gXHRmb3JfZWFjaF9wb3NzaWJsZV9jcHUoY3B1KSB7XG4gXHRcdHNlcV9wcmludGYobSwgXCYjMzQ7XFx0Y3B1JWQ6IFwmIzM0OywgY3B1KTtcbiBcdFx0YnRmX3R5cGVfc2VxX3Nob3cobWFwLVx1MDAzZWJ0ZiwgbWFwLVx1MDAzZWJ0Zl92YWx1ZV90eXBlX2lkLFxuQEAgLTI2MjAsNyAmIzQzOzI3MzksNyBAQCBzdGF0aWMgdm9pZCBmZF9odGFiX21hcF9mcmVlKHN0cnVjdCBicGZfbWFwICptYXApXG4gXHRcdGhlYWQgPSBzZWxlY3RfYnVja2V0KGh0YWIsIGkpO1xuIFxuIFx0XHRobGlzdF9udWxsc19mb3JfZWFjaF9lbnRyeV9zYWZlKGwsIG4sIGhlYWQsIGhhc2hfbm9kZSkge1xuLVx0XHRcdHZvaWQgKnB0ciA9IGZkX2h0YWJfbWFwX2dldF9wdHIobWFwLCBsKTtcbiYjNDM7XHRcdFx0dm9pZCAqcHRyID0gZmRfaHRhYl9tYXBfZ2V0X3B0cihodGFiLCBsKTtcbiBcbiBcdFx0XHRtYXAtXHUwMDNlb3BzLVx1MDAzZW1hcF9mZF9wdXRfcHRyKG1hcCwgcHRyLCBmYWxzZSk7XG4gXHRcdH1cbkBAIC0yNzA1LDYgJiM0MzsyODI0LDcgQEAgc3RhdGljIHZvaWQgKmh0YWJfb2ZfbWFwX2xvb2t1cF9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSlcbiBzdGF0aWMgaW50IGh0YWJfb2ZfbWFwX2dlbl9sb29rdXAoc3RydWN0IGJwZl9tYXAgKm1hcCxcbiBcdFx0XHRcdCAgc3RydWN0IGJwZl9pbnNuICppbnNuX2J1ZilcbiB7XG4mIzQzO1x0c3RydWN0IGJwZl9odGFiICpodGFiID0gY29udGFpbmVyX29mKG1hcCwgc3RydWN0IGJwZl9odGFiLCBtYXApO1xuIFx0c3RydWN0IGJwZl9pbnNuICppbnNuID0gaW5zbl9idWY7XG4gXHRjb25zdCBpbnQgcmV0ID0gQlBGX1JFR18wO1xuIFxuQEAgLTI3MTMsNyAmIzQzOzI4MzMsNyBAQCBzdGF0aWMgaW50IGh0YWJfb2ZfbWFwX2dlbl9sb29rdXAoc3RydWN0IGJwZl9tYXAgKm1hcCxcbiBcdCppbnNuJiM0MzsmIzQzOyA9IEJQRl9FTUlUX0NBTEwoX19odGFiX21hcF9sb29rdXBfZWxlbSk7XG4gXHQqaW5zbiYjNDM7JiM0MzsgPSBCUEZfSk1QX0lNTShCUEZfSkVRLCByZXQsIDAsIDIpO1xuIFx0Kmluc24mIzQzOyYjNDM7ID0gQlBGX0FMVTY0X0lNTShCUEZfQURELCByZXQsXG4tXHRcdFx0XHRvZmZzZXRvZihzdHJ1Y3QgaHRhYl9lbGVtLCBrZXkpICYjNDM7XG4mIzQzO1x0XHRcdFx0aHRhYi1cdTAwM2VrZXlfb2Zmc2V0ICYjNDM7XG4gXHRcdFx0XHRyb3VuZF91cChtYXAtXHUwMDNla2V5X3NpemUsIDgpKTtcbiBcdCppbnNuJiM0MzsmIzQzOyA9IEJQRl9MRFhfTUVNKEJQRl9EVywgcmV0LCByZXQsIDApO1xuIFxuQEAgLTMxMTIsNyAmIzQzOzMyMzIsNyBAQCBzdGF0aWMgaW50IHJodGFiX21hcF9jaGVja19idGYoc3RydWN0IGJwZl9tYXAgKm1hcCwgY29uc3Qgc3RydWN0IGJ0ZiAqYnRmLFxuIHtcbiBcdHN0cnVjdCBicGZfcmh0YWIgKnJodGFiID0gY29udGFpbmVyX29mKG1hcCwgc3RydWN0IGJwZl9yaHRhYiwgbWFwKTtcbiBcbi1cdHJldHVybiBicGZfbWFfc2V0X2R0b3IobWFwLCBcdTAwMjZyaHRhYi1cdTAwM2VtYSwgcmh0YWJfbWVtX2R0b3IpO1xuJiM0MztcdHJldHVybiBicGZfbWFfc2V0X2R0b3IobWFwLCBcdTAwMjZyaHRhYi1cdTAwM2VtYSwgcmh0YWJfbWVtX2R0b3IsIG9mZnNldG9mKHN0cnVjdCByaHRhYl9lbGVtLCBkYXRhKSk7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIHJodGFiX21hcF9mcmVlX2ludGVybmFsX3N0cnVjdHMoc3RydWN0IGJwZl9tYXAgKm1hcClcbkBAIC0zNTMzLDMgJiM0MzszNjUzLDE2IEBAIGNvbnN0IHN0cnVjdCBicGZfbWFwX29wcyByaHRhYl9tYXBfb3BzID0ge1xuIFx0Lm1hcF9idGZfaWQgPSBcdTAwMjZyaHRhYl9tYXBfYnRmX2lkc1swXSxcbiBcdC5pdGVyX3NlcV9pbmZvID0gXHUwMDI2cmhhc2hfaXRlcl9zZXFfaW5mbyxcbiB9O1xuJiM0MztcbiYjNDM7c2l6ZV90IGJwZl9odGFiX21hcF9tZXRhX3NpemUodm9pZClcbiYjNDM7e1xuJiM0MztcdHJldHVybiBzaXplb2Yoc3RydWN0IGJwZl9odGFiKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7dm9pZCBicGZfaHRhYl9tYXBfbWV0YV9pbml0KHN0cnVjdCBicGZfbWFwICppbm5lcl9tYXBfbWV0YSwgc3RydWN0IGJwZl9tYXAgKmlubmVyX21hcClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBicGZfaHRhYiAqaW5uZXJfaHRhYl9tZXRhID0gY29udGFpbmVyX29mKGlubmVyX21hcF9tZXRhLCBzdHJ1Y3QgYnBmX2h0YWIsIG1hcCk7XG4mIzQzO1x0c3RydWN0IGJwZl9odGFiICppbm5lcl9odGFiID0gY29udGFpbmVyX29mKGlubmVyX21hcCwgc3RydWN0IGJwZl9odGFiLCBtYXApO1xuJiM0MztcbiYjNDM7XHRpbm5lcl9odGFiX21ldGEtXHUwMDNla2V5X29mZnNldCA9IGlubmVyX2h0YWItXHUwMDNla2V5X29mZnNldDtcbiYjNDM7fVxuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvbWFwX2luX21hcC5jIGIva2VybmVsL2JwZi9tYXBfaW5fbWFwLmNcbmluZGV4IGQyY2JhYjRiZGY2NDRhLi5iMmRiNWQwYzk4YmVlMiAxMDA2NDRcbi0tLSBhL2tlcm5lbC9icGYvbWFwX2luX21hcC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvYnBmL21hcF9pbl9tYXAuY1xuQEAgLTcsNiAmIzQzOzcsMTUgQEBcbiBcbiAjaW5jbHVkZSBcJiMzNDttYXBfaW5fbWFwLmhcJiMzNDtcbiBcbiYjNDM7c3RhdGljIGJvb2wgYnBmX21hcF90eXBlX2lzX2h0YWIoZW51bSBicGZfbWFwX3R5cGUgdHlwZSlcbiYjNDM7e1xuJiM0MztcdHJldHVybiB0eXBlID09IEJQRl9NQVBfVFlQRV9IQVNIIHx8XG4mIzQzO1x0ICAgICAgIHR5cGUgPT0gQlBGX01BUF9UWVBFX1BFUkNQVV9IQVNIIHx8XG4mIzQzO1x0ICAgICAgIHR5cGUgPT0gQlBGX01BUF9UWVBFX0xSVV9IQVNIIHx8XG4mIzQzO1x0ICAgICAgIHR5cGUgPT0gQlBGX01BUF9UWVBFX0xSVV9QRVJDUFVfSEFTSCB8fFxuJiM0MztcdCAgICAgICB0eXBlID09IEJQRl9NQVBfVFlQRV9IQVNIX09GX01BUFM7XG4mIzQzO31cbiYjNDM7XG4gc3RydWN0IGJwZl9tYXAgKmJwZl9tYXBfbWV0YV9hbGxvYyhpbnQgaW5uZXJfbWFwX3VmZClcbiB7XG4gXHRzdHJ1Y3QgYnBmX21hcCAqaW5uZXJfbWFwLCAqaW5uZXJfbWFwX21ldGE7XG5AQCAtMjksNiAmIzQzOzM4LDggQEAgc3RydWN0IGJwZl9tYXAgKmJwZl9tYXBfbWV0YV9hbGxvYyhpbnQgaW5uZXJfbWFwX3VmZClcbiBcdC8qIEluIHNvbWUgY2FzZXMgdmVyaWZpZXIgbmVlZHMgdG8gYWNjZXNzIGJleW9uZCBqdXN0IGJhc2UgbWFwLiAqL1xuIFx0aWYgKGlubmVyX21hcC1cdTAwM2VvcHMgPT0gXHUwMDI2YXJyYXlfbWFwX29wcyB8fCBpbm5lcl9tYXAtXHUwMDNlb3BzID09IFx1MDAyNnBlcmNwdV9hcnJheV9tYXBfb3BzKVxuIFx0XHRpbm5lcl9tYXBfbWV0YV9zaXplID0gc2l6ZW9mKHN0cnVjdCBicGZfYXJyYXkpO1xuJiM0MztcdGVsc2UgaWYgKGJwZl9tYXBfdHlwZV9pc19odGFiKGlubmVyX21hcC1cdTAwM2VtYXBfdHlwZSkpXG4mIzQzO1x0XHRpbm5lcl9tYXBfbWV0YV9zaXplID0gYnBmX2h0YWJfbWFwX21ldGFfc2l6ZSgpO1xuIFxuIFx0aW5uZXJfbWFwX21ldGEgPSBremFsbG9jKGlubmVyX21hcF9tZXRhX3NpemUsIEdGUF9VU0VSKTtcbiBcdGlmICghaW5uZXJfbWFwX21ldGEpXG5AQCAtNzAsNiAmIzQzOzgxLDggQEAgc3RydWN0IGJwZl9tYXAgKmJwZl9tYXBfbWV0YV9hbGxvYyhpbnQgaW5uZXJfbWFwX3VmZClcbiBcdFx0aW5uZXJfYXJyYXlfbWV0YS1cdTAwM2VpbmRleF9tYXNrID0gaW5uZXJfYXJyYXktXHUwMDNlaW5kZXhfbWFzaztcbiBcdFx0aW5uZXJfYXJyYXlfbWV0YS1cdTAwM2VlbGVtX3NpemUgPSBpbm5lcl9hcnJheS1cdTAwM2VlbGVtX3NpemU7XG4gXHRcdGlubmVyX21hcF9tZXRhLVx1MDAzZWJ5cGFzc19zcGVjX3YxID0gaW5uZXJfbWFwLVx1MDAzZWJ5cGFzc19zcGVjX3YxO1xuJiM0MztcdH0gZWxzZSBpZiAoYnBmX21hcF90eXBlX2lzX2h0YWIoaW5uZXJfbWFwLVx1MDAzZW1hcF90eXBlKSkge1xuJiM0MztcdFx0YnBmX2h0YWJfbWFwX21ldGFfaW5pdChpbm5lcl9tYXBfbWV0YSwgaW5uZXJfbWFwKTtcbiBcdH1cbiBcdHJldHVybiBpbm5lcl9tYXBfbWV0YTtcbiB9XG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9tYXBfaW5fbWFwLmggYi9rZXJuZWwvYnBmL21hcF9pbl9tYXAuaFxuaW5kZXggN2Q2MTYwMjM1NGRlODAuLjFlZGMyMDU3NzJkOGNkIDEwMDY0NFxuLS0tIGEva2VybmVsL2JwZi9tYXBfaW5fbWFwLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9icGYvbWFwX2luX21hcC5oXG5AQCAtMTUsNSAmIzQzOzE1LDcgQEAgdm9pZCAqYnBmX21hcF9mZF9nZXRfcHRyKHN0cnVjdCBicGZfbWFwICptYXAsIHN0cnVjdCBmaWxlICptYXBfZmlsZSxcbiBcdFx0XHQgaW50IHVmZCk7XG4gdm9pZCBicGZfbWFwX2ZkX3B1dF9wdHIoc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqcHRyLCBib29sIG5lZWRfZGVmZXIpO1xuIHUzMiBicGZfbWFwX2ZkX3N5c19sb29rdXBfZWxlbSh2b2lkICpwdHIpO1xuJiM0MztzaXplX3QgYnBmX2h0YWJfbWFwX21ldGFfc2l6ZSh2b2lkKTtcbiYjNDM7dm9pZCBicGZfaHRhYl9tYXBfbWV0YV9pbml0KHN0cnVjdCBicGZfbWFwICppbm5lcl9tYXBfbWV0YSwgc3RydWN0IGJwZl9tYXAgKmlubmVyX21hcCk7XG4gXG4gI2VuZGlmXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL21hcF9wdHJfa2Vybi5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL21hcF9wdHJfa2Vybi5jXG5pbmRleCAzNzNjOGQxN2VhNTU3ZC4uNmJkNGNiNjhjMjBjMWMgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvbWFwX3B0cl9rZXJuLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9tYXBfcHRyX2tlcm4uY1xuQEAgLTExNCw3ICYjNDM7MTE0LDcgQEAgc3RhdGljIGlubGluZSBpbnQgY2hlY2tfaGFzaCh2b2lkKVxuIFx0VkVSSUZZKGNoZWNrX2RlZmF1bHRfbm9pbmxpbmUoXHUwMDI2aGFzaC1cdTAwM2VtYXAsIG1hcCkpO1xuIFxuIFx0VkVSSUZZKGhhc2gtXHUwMDNlbl9idWNrZXRzID09IE1BWF9FTlRSSUVTKTtcbi1cdFZFUklGWShoYXNoLVx1MDAzZWVsZW1fc2l6ZSA9PSA2NCk7XG4mIzQzO1x0VkVSSUZZKGhhc2gtXHUwMDNlZWxlbV9zaXplID09IDMyKTtcbiBcbiBcdFZFUklGWShoYXNoLVx1MDAzZWNvdW50LmNvdW50ZXIgPT0gMCk7XG4gXHRWRVJJRlkoYnBmX21hcF9zdW1fZWxlbV9jb3VudChtYXApID09IDApO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIzIDIyOjM4PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCUEZfU1lTQ0FMTCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2h0YWJfbWFwX2FsbG9jJiMzNDssCiAgICAmIzM0O2h0YWJfbWFwX3VwZGF0ZV9lbGVtJiMzNDssCiAgICAmIzM0O2h0YWJfbHJ1X21hcF91cGRhdGVfZWxlbSYjMzQ7LAogICAgJiMzNDtfX2h0YWJfbHJ1X3BlcmNwdV9tYXBfdXBkYXRlX2VsZW0mIzM0OywKICAgICYjMzQ7aHRhYl9tYXBfZGVsZXRlX2VsZW0mIzM0OywKICAgICYjMzQ7aHRhYl9scnVfbWFwX2RlbGV0ZV9lbGVtJiMzNDssCiAgICAmIzM0O19faHRhYl9tYXBfbG9va3VwX2FuZF9kZWxldGVfZWxlbSYjMzQ7LAogICAgJiMzNDtfX2h0YWJfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2JhdGNoJiMzNDssCiAgICAmIzM0O2JwZl9tYXBfbWV0YV9hbGxvYyYjMzQ7LAogICAgJiMzNDtodGFiX21hcF9nZW5fbG9va3VwJiMzNDssCiAgICAmIzM0O2h0YWJfbHJ1X21hcF9nZW5fbG9va3VwJiMzNDssCiAgICAmIzM0O2h0YWJfcGVyY3B1X21hcF9nZW5fbG9va3VwJiMzNDssCiAgICAmIzM0O2h0YWJfb2ZfbWFwX2dlbl9sb29rdXAmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZnVuY3Rpb25hbGx5IG1vZGlmaWVzIHRoZSBtZW1vcnkgbGF5b3V0IGFuZCBvcGVyYXRpb25zIG9mIEJQRiBoYXNoIG1hcHMgKGluY2x1ZGluZyBMUlUgYW5kIHBlci1DUFUgdmFyaWFudHMpLiBJdCBpbnRyb2R1Y2VzIG5ldyBzdHJ1Y3R1cmVzIGFuZCBvZmZzZXRzIGZvciBoYXNoIG1hcCBlbGVtZW50cywgd2hpY2ggYWZmZWN0cyBhbGxvY2F0aW9uLCB1cGRhdGVzLCBkZWxldGlvbnMsIGFuZCBKSVQgbG9va3VwIGdlbmVyYXRpb24uIEZ1enppbmcgaXMgbmVlZGVkIHRvIGVuc3VyZSBtZW1vcnkgc2FmZXR5IGFuZCBjb3JyZWN0bmVzcyBvZiB0aGVzZSBjb3JlIEJQRiBtYXAgb3BlcmF0aW9ucy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLApldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXQKICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LAogICBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMjQzYTI3MDY0MGUwZGM5MDFlNGE3OGI1OTliMDc0OGQ1OWJmN2I2MwpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUaHUgSnVsIDIzIDIyOjM4OjQwIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9oYXNodGFiLmMgYi9rZXJuZWwvYnBmL2hhc2h0YWIuYwppbmRleCA5ZjM5NGUxYWEyZTg1Yi4uYjhjMzBkNDAyOTU4NzkgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9icGYvaGFzaHRhYi5jCiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9icGYvaGFzaHRhYi5jCkBAIC0xMDIsNiAmIzQzOzEwMiw3IEBAIHN0cnVjdCBicGZfaHRhYiB7CiAJYm9vbCB1c2VfcGVyY3B1X2NvdW50ZXI7CiAJdTMyIG5fYnVja2V0czsJLyogbnVtYmVyIG9mIGhhc2ggYnVja2V0cyAqLwogCXUzMiBlbGVtX3NpemU7CS8qIHNpemUgb2YgZWFjaCBlbGVtZW50IGluIGJ5dGVzICovCiYjNDM7CXUzMiBrZXlfb2Zmc2V0OwkvKiBvZmZzZXQgb2Yga2V5IGluIGJ5dGVzICovCiAJdTMyIGhhc2hybmQ7CiB9OwogCkBAIC0xMTcsMTggJiM0MzsxMTgsNDYgQEAgc3RydWN0IGh0YWJfZWxlbSB7CiAJCQl9OwogCQl9OwogCX07CiYjNDM7CXUzMiBoYXNoOyAvKiBPbmx5IHdoZW4gaHRhYl9oYXNfaGFzaCgpICovCiYjNDM7fSBfX2FsaWduZWQoOCk7CiYjNDM7CiYjNDM7c3RydWN0IGh0YWJfZWxlbV9scnUgewogCXVuaW9uIHsKLQkJLyogcG9pbnRlciB0byBwZXItY3B1IHBvaW50ZXIgKi8KLQkJdm9pZCAqcHRyX3RvX3BwdHI7Ci0JCXN0cnVjdCBicGZfbHJ1X25vZGUgbHJ1X25vZGU7CiYjNDM7CQlzdHJ1Y3QgaGxpc3RfbnVsbHNfbm9kZSBoYXNoX25vZGU7CiYjNDM7CQlzdHJ1Y3QgewomIzQzOwkJCXZvaWQgKnBhZGRpbmc7CiYjNDM7CQkJdW5pb24gewomIzQzOwkJCQlzdHJ1Y3QgcGNwdV9mcmVlbGlzdF9ub2RlIGZub2RlOwomIzQzOwkJCQlzdHJ1Y3QgaHRhYl9lbGVtX2xydSAqYmF0Y2hfZmxpbms7CiYjNDM7CQkJfTsKJiM0MzsJCX07CiAJfTsKJiM0MzsJc3RydWN0IGJwZl9scnVfbm9kZSBscnVfbm9kZTsKIAl1MzIgaGFzaDsKLQljaGFyIGtleVtdIF9fYWxpZ25lZCg4KTsKLX07CiYjNDM7fSBfX2FsaWduZWQoOCk7CiYjNDM7CiYjNDM7LyogT25seSBmb3Igbm9uLXByZWFsbG9jYXRlZCBQQ1BVIG1hcHMuIFByZWFsbG9jYXRlZCBQQ1BVIG1hcHMgZG9uJiMzOTt0IG5lZWQKJiM0MzsgKiBwdHJfdG9fcHB0ciwgYW5kIHVzZSBodGFiX2VsZW0uCiYjNDM7ICovCiYjNDM7c3RydWN0IGh0YWJfZWxlbV9wY3B1IHsKJiM0MzsJdW5pb24gewomIzQzOwkJc3RydWN0IGhsaXN0X251bGxzX25vZGUgaGFzaF9ub2RlOwomIzQzOwkJc3RydWN0IHsKJiM0MzsJCQl2b2lkICpwYWRkaW5nOwomIzQzOwkJCXVuaW9uIHsKJiM0MzsJCQkJc3RydWN0IHBjcHVfZnJlZWxpc3Rfbm9kZSBmbm9kZTsKJiM0MzsJCQkJc3RydWN0IGh0YWJfZWxlbV9wY3B1ICpiYXRjaF9mbGluazsKJiM0MzsJCQl9OwomIzQzOwkJfTsKJiM0MzsJfTsKJiM0MzsJdm9pZCAqcHRyX3RvX3BwdHI7CiYjNDM7CXUzMiBoYXNoOyAvKiBPbmx5IHdoZW4gaHRhYl9oYXNfaGFzaCgpICovCiYjNDM7fSBfX2FsaWduZWQoOCk7CiAKIHN0cnVjdCBodGFiX2J0Zl9yZWNvcmQgewogCXN0cnVjdCBidGZfcmVjb3JkICpyZWNvcmQ7CiAJdTMyIGtleV9zaXplOwomIzQzOwl1MzIga2V5X29mZnNldDsKIH07CiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBodGFiX2lzX3ByZWFsbG9jKGNvbnN0IHN0cnVjdCBicGZfaHRhYiAqaHRhYikKQEAgLTEzNiw2ICYjNDM7MTY1LDIxIEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBodGFiX2lzX3ByZWFsbG9jKGNvbnN0IHN0cnVjdCBicGZfaHRhYiAqaHRhYikKIAlyZXR1cm4gIShodGFiLSZndDttYXAubWFwX2ZsYWdzICZhbXA7IEJQRl9GX05PX1BSRUFMTE9DKTsKIH0KIAomIzQzO3N0YXRpYyBpbmxpbmUgc3RydWN0IGJwZl9scnVfbm9kZSAqaHRhYl9lbGVtX2xydV9ub2RlKHN0cnVjdCBodGFiX2VsZW0gKmwpCiYjNDM7ewomIzQzOwlyZXR1cm4gJmFtcDsoKHN0cnVjdCBodGFiX2VsZW1fbHJ1ICopbCktJmd0O2xydV9ub2RlOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgKmh0YWJfZWxlbV9nZXRfcHRyX3RvX3BwdHIoc3RydWN0IGh0YWJfZWxlbSAqbCkKJiM0Mzt7CiYjNDM7CXJldHVybiAoKHN0cnVjdCBodGFiX2VsZW1fcGNwdSAqKWwpLSZndDtwdHJfdG9fcHB0cjsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGlubGluZSB2b2lkIGh0YWJfZWxlbV9zZXRfcHRyX3RvX3BwdHIoc3RydWN0IGh0YWJfZWxlbSAqbCwgdm9pZCAqcHRyKQomIzQzO3sKJiM0MzsJKChzdHJ1Y3QgaHRhYl9lbGVtX3BjcHUgKilsKS0mZ3Q7cHRyX3RvX3BwdHIgPSBwdHI7CiYjNDM7fQomIzQzOwogc3RhdGljIHZvaWQgaHRhYl9pbml0X2J1Y2tldHMoc3RydWN0IGJwZl9odGFiICpodGFiKQogewogCXVuc2lnbmVkIGludCBpOwpAQCAtMTgzLDI1ICYjNDM7MjI3LDMwIEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBpc19mZF9odGFiKGNvbnN0IHN0cnVjdCBicGZfaHRhYiAqaHRhYikKIAlyZXR1cm4gaHRhYi0mZ3Q7bWFwLm1hcF90eXBlID09IEJQRl9NQVBfVFlQRV9IQVNIX09GX01BUFM7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCAqaHRhYl9lbGVtX3ZhbHVlKHN0cnVjdCBodGFiX2VsZW0gKmwsIHUzMiBrZXlfc2l6ZSkKJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgKmh0YWJfZWxlbV9rZXkoc3RydWN0IGJwZl9odGFiICpodGFiLCBzdHJ1Y3QgaHRhYl9lbGVtICpsKQomIzQzO3sKJiM0MzsJcmV0dXJuICh2b2lkICopbCAmIzQzOyBodGFiLSZndDtrZXlfb2Zmc2V0OwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgKmh0YWJfZWxlbV92YWx1ZShzdHJ1Y3QgYnBmX2h0YWIgKmh0YWIsIHN0cnVjdCBodGFiX2VsZW0gKmwpCiB7Ci0JcmV0dXJuIGwtJmd0O2tleSAmIzQzOyByb3VuZF91cChrZXlfc2l6ZSwgOCk7CiYjNDM7CXJldHVybiBodGFiX2VsZW1fa2V5KGh0YWIsIGwpICYjNDM7IHJvdW5kX3VwKGh0YWItJmd0O21hcC5rZXlfc2l6ZSwgOCk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBodGFiX2VsZW1fc2V0X3B0cihzdHJ1Y3QgaHRhYl9lbGVtICpsLCB1MzIga2V5X3NpemUsCiYjNDM7c3RhdGljIGlubGluZSB2b2lkIGh0YWJfZWxlbV9zZXRfcHRyKHN0cnVjdCBicGZfaHRhYiAqaHRhYiwgc3RydWN0IGh0YWJfZWxlbSAqbCwKIAkJCQkgICAgIHZvaWQgX19wZXJjcHUgKnBwdHIpCiB7Ci0JKih2b2lkIF9fcGVyY3B1ICoqKWh0YWJfZWxlbV92YWx1ZShsLCBrZXlfc2l6ZSkgPSBwcHRyOwomIzQzOwkqKHZvaWQgX19wZXJjcHUgKiopaHRhYl9lbGVtX3ZhbHVlKGh0YWIsIGwpID0gcHB0cjsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIF9fcGVyY3B1ICpodGFiX2VsZW1fZ2V0X3B0cihzdHJ1Y3QgaHRhYl9lbGVtICpsLCB1MzIga2V5X3NpemUpCiYjNDM7c3RhdGljIGlubGluZSB2b2lkIF9fcGVyY3B1ICpodGFiX2VsZW1fZ2V0X3B0cihzdHJ1Y3QgYnBmX2h0YWIgKmh0YWIsIHN0cnVjdCBodGFiX2VsZW0gKmwpCiB7Ci0JcmV0dXJuICoodm9pZCBfX3BlcmNwdSAqKilodGFiX2VsZW1fdmFsdWUobCwga2V5X3NpemUpOwomIzQzOwlyZXR1cm4gKih2b2lkIF9fcGVyY3B1ICoqKWh0YWJfZWxlbV92YWx1ZShodGFiLCBsKTsKIH0KIAotc3RhdGljIHZvaWQgKmZkX2h0YWJfbWFwX2dldF9wdHIoY29uc3Qgc3RydWN0IGJwZl9tYXAgKm1hcCwgc3RydWN0IGh0YWJfZWxlbSAqbCkKJiM0MztzdGF0aWMgdm9pZCAqZmRfaHRhYl9tYXBfZ2V0X3B0cihzdHJ1Y3QgYnBmX2h0YWIgKmh0YWIsIHN0cnVjdCBodGFiX2VsZW0gKmwpCiB7Ci0JcmV0dXJuICoodm9pZCAqKilodGFiX2VsZW1fdmFsdWUobCwgbWFwLSZndDtrZXlfc2l6ZSk7CiYjNDM7CXJldHVybiAqKHZvaWQgKiopaHRhYl9lbGVtX3ZhbHVlKGh0YWIsIGwpOwogfQogCiBzdGF0aWMgc3RydWN0IGh0YWJfZWxlbSAqZ2V0X2h0YWJfZWxlbShzdHJ1Y3QgYnBmX2h0YWIgKmh0YWIsIGludCBpKQpAQCAtMjA5LDYgJiM0MzsyNTgsMzMgQEAgc3RhdGljIHN0cnVjdCBodGFiX2VsZW0gKmdldF9odGFiX2VsZW0oc3RydWN0IGJwZl9odGFiICpodGFiLCBpbnQgaSkKIAlyZXR1cm4gKHN0cnVjdCBodGFiX2VsZW0gKikgKGh0YWItJmd0O2VsZW1zICYjNDM7IGkgKiAodTY0KWh0YWItJmd0O2VsZW1fc2l6ZSk7CiB9CiAKJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgaHRhYl9oYXNfaGFzaChjb25zdCBzdHJ1Y3QgYnBmX2h0YWIgKmh0YWIpCiYjNDM7ewomIzQzOwlyZXR1cm4gaHRhYl9pc19scnUoaHRhYikgfHwgaHRhYi0mZ3Q7bWFwLmtleV9zaXplICZndDsgODsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGlubGluZSB1MzIgaHRhYl9lbGVtX2hhc2goc3RydWN0IGJwZl9odGFiICpodGFiLCBzdHJ1Y3QgaHRhYl9lbGVtICpsKQomIzQzO3sKJiM0MzsJaWYgKGh0YWJfaXNfbHJ1KGh0YWIpKQomIzQzOwkJcmV0dXJuICgoc3RydWN0IGh0YWJfZWxlbV9scnUgKilsKS0mZ3Q7aGFzaDsKJiM0MzsJZWxzZSBpZiAoaHRhYl9pc19wZXJjcHUoaHRhYikgJmFtcDsmYW1wOyAhaHRhYl9pc19wcmVhbGxvYyhodGFiKSkKJiM0MzsJCXJldHVybiAoKHN0cnVjdCBodGFiX2VsZW1fcGNwdSAqKWwpLSZndDtoYXNoOwomIzQzOwllbHNlCiYjNDM7CQlyZXR1cm4gbC0mZ3Q7aGFzaDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGlubGluZSB2b2lkIGh0YWJfZWxlbV9zZXRfaGFzaChzdHJ1Y3QgYnBmX2h0YWIgKmh0YWIsIHN0cnVjdCBodGFiX2VsZW0gKmwsIHUzMiBoYXNoKQomIzQzO3sKJiM0MzsJaWYgKCFodGFiX2hhc19oYXNoKGh0YWIpKQomIzQzOwkJcmV0dXJuOwomIzQzOwlpZiAoaHRhYl9pc19scnUoaHRhYikpCiYjNDM7CQkoKHN0cnVjdCBodGFiX2VsZW1fbHJ1ICopbCktJmd0O2hhc2ggPSBoYXNoOwomIzQzOwllbHNlIGlmIChodGFiX2lzX3BlcmNwdShodGFiKSAmYW1wOyZhbXA7ICFodGFiX2lzX3ByZWFsbG9jKGh0YWIpKQomIzQzOwkJKChzdHJ1Y3QgaHRhYl9lbGVtX3BjcHUgKilsKS0mZ3Q7aGFzaCA9IGhhc2g7CiYjNDM7CWVsc2UKJiM0MzsJCWwtJmd0O2hhc2ggPSBoYXNoOwomIzQzO30KJiM0MzsKIC8qIEJvdGggcGVyY3B1IGFuZCBmZCBodGFiIHN1cHBvcnQgaW4tcGxhY2UgdXBkYXRlLCBzbyBubyBuZWVkIGZvcgogICogZXh0cmEgZWxlbS4gTFJVIGl0c2VsZiBjYW4gcmVtb3ZlIHRoZSBsZWFzdCB1c2VkIGVsZW1lbnQsIHNvCiAgKiB0aGVyZSBpcyBubyBuZWVkIGZvciBhbiBleHRyYSBlbGVtIGR1cmluZyBtYXBfdXBkYXRlLgpAQCAtMjMxLDcgJiM0MzszMDcsNyBAQCBzdGF0aWMgdm9pZCBodGFiX2ZyZWVfcHJlYWxsb2NlZF9pbnRlcm5hbF9zdHJ1Y3RzKHN0cnVjdCBicGZfaHRhYiAqaHRhYikKIAogCQllbGVtID0gZ2V0X2h0YWJfZWxlbShodGFiLCBpKTsKIAkJYnBmX21hcF9mcmVlX2ludGVybmFsX3N0cnVjdHMoJmFtcDtodGFiLSZndDttYXAsCi0JCQkJCSAgICAgIGh0YWJfZWxlbV92YWx1ZShlbGVtLCBodGFiLSZndDttYXAua2V5X3NpemUpKTsKJiM0MzsJCQkJCSAgICAgIGh0YWJfZWxlbV92YWx1ZShodGFiLCBlbGVtKSk7CiAJCWNvbmRfcmVzY2hlZCgpOwogCX0KIH0KQEAgLTI1NCw3ICYjNDM7MzMwLDcgQEAgc3RhdGljIHZvaWQgaHRhYl9mcmVlX3ByZWFsbG9jZWRfZmllbGRzKHN0cnVjdCBicGZfaHRhYiAqaHRhYikKIAogCQllbGVtID0gZ2V0X2h0YWJfZWxlbShodGFiLCBpKTsKIAkJaWYgKGh0YWJfaXNfcGVyY3B1KGh0YWIpKSB7Ci0JCQl2b2lkIF9fcGVyY3B1ICpwcHRyID0gaHRhYl9lbGVtX2dldF9wdHIoZWxlbSwgaHRhYi0mZ3Q7bWFwLmtleV9zaXplKTsKJiM0MzsJCQl2b2lkIF9fcGVyY3B1ICpwcHRyID0gaHRhYl9lbGVtX2dldF9wdHIoaHRhYiwgZWxlbSk7CiAJCQlpbnQgY3B1OwogCiAJCQlmb3JfZWFjaF9wb3NzaWJsZV9jcHUoY3B1KSB7CkBAIC0yNjMsNyAmIzQzOzMzOSw3IEBAIHN0YXRpYyB2b2lkIGh0YWJfZnJlZV9wcmVhbGxvY2VkX2ZpZWxkcyhzdHJ1Y3QgYnBmX2h0YWIgKmh0YWIpCiAJCQl9CiAJCX0gZWxzZSB7CiAJCQlicGZfb2JqX2ZyZWVfZmllbGRzKGh0YWItJmd0O21hcC5yZWNvcmQsCi0JCQkJCSAgICBodGFiX2VsZW1fdmFsdWUoZWxlbSwgaHRhYi0mZ3Q7bWFwLmtleV9zaXplKSk7CiYjNDM7CQkJCQkgICAgaHRhYl9lbGVtX3ZhbHVlKGh0YWIsIGVsZW0pKTsKIAkJCWNvbmRfcmVzY2hlZCgpOwogCQl9CiAJCWNvbmRfcmVzY2hlZCgpOwpAQCAtMjgwLDggJiM0MzszNTYsNyBAQCBzdGF0aWMgdm9pZCBodGFiX2ZyZWVfZWxlbXMoc3RydWN0IGJwZl9odGFiICpodGFiKQogCWZvciAoaSA9IDA7IGkgJmx0OyBodGFiLSZndDttYXAubWF4X2VudHJpZXM7IGkmIzQzOyYjNDM7KSB7CiAJCXZvaWQgX19wZXJjcHUgKnBwdHI7CiAKLQkJcHB0ciA9IGh0YWJfZWxlbV9nZXRfcHRyKGdldF9odGFiX2VsZW0oaHRhYiwgaSksCi0JCQkJCSBodGFiLSZndDttYXAua2V5X3NpemUpOwomIzQzOwkJcHB0ciA9IGh0YWJfZWxlbV9nZXRfcHRyKGh0YWIsIGdldF9odGFiX2VsZW0oaHRhYiwgaSkpOwogCQlmcmVlX3BlcmNwdShwcHRyKTsKIAkJY29uZF9yZXNjaGVkKCk7CiAJfQpAQCAtMzA4LDggJiM0MzszODMsOCBAQCBzdGF0aWMgc3RydWN0IGh0YWJfZWxlbSAqcHJlYWxsb2NfbHJ1X3BvcChzdHJ1Y3QgYnBmX2h0YWIgKmh0YWIsIHZvaWQgKmtleSwKIAogCWlmIChub2RlKSB7CiAJCWJwZl9tYXBfaW5jX2VsZW1fY291bnQoJmFtcDtodGFiLSZndDttYXApOwotCQlsID0gY29udGFpbmVyX29mKG5vZGUsIHN0cnVjdCBodGFiX2VsZW0sIGxydV9ub2RlKTsKLQkJbWVtY3B5KGwtJmd0O2tleSwga2V5LCBodGFiLSZndDttYXAua2V5X3NpemUpOwomIzQzOwkJbCA9IChzdHJ1Y3QgaHRhYl9lbGVtICopY29udGFpbmVyX29mKG5vZGUsIHN0cnVjdCBodGFiX2VsZW1fbHJ1LCBscnVfbm9kZSk7CiYjNDM7CQltZW1jcHkoaHRhYl9lbGVtX2tleShodGFiLCBsKSwga2V5LCBodGFiLSZndDttYXAua2V5X3NpemUpOwogCQlyZXR1cm4gbDsKIAl9CiAKQEAgLTM0MCw4ICYjNDM7NDE1LDcgQEAgc3RhdGljIGludCBwcmVhbGxvY19pbml0KHN0cnVjdCBicGZfaHRhYiAqaHRhYikKIAkJCQkJICAgIEdGUF9VU0VSIHwgX19HRlBfTk9XQVJOKTsKIAkJaWYgKCFwcHRyKQogCQkJZ290byBmcmVlX2VsZW1zOwotCQlodGFiX2VsZW1fc2V0X3B0cihnZXRfaHRhYl9lbGVtKGh0YWIsIGkpLCBodGFiLSZndDttYXAua2V5X3NpemUsCi0JCQkJICBwcHRyKTsKJiM0MzsJCWh0YWJfZWxlbV9zZXRfcHRyKGh0YWIsIGdldF9odGFiX2VsZW0oaHRhYiwgaSksIHBwdHIpOwogCQljb25kX3Jlc2NoZWQoKTsKIAl9CiAKQEAgLTM0OSw4ICYjNDM7NDIzLDggQEAgc3RhdGljIGludCBwcmVhbGxvY19pbml0KHN0cnVjdCBicGZfaHRhYiAqaHRhYikKIAlpZiAoaHRhYl9pc19scnUoaHRhYikpCiAJCWVyciA9IGJwZl9scnVfaW5pdCgmYW1wO2h0YWItJmd0O2xydSwKIAkJCQkgICBodGFiLSZndDttYXAubWFwX2ZsYWdzICZhbXA7IEJQRl9GX05PX0NPTU1PTl9MUlUsCi0JCQkJICAgb2Zmc2V0b2Yoc3RydWN0IGh0YWJfZWxlbSwgaGFzaCkgLQotCQkJCSAgIG9mZnNldG9mKHN0cnVjdCBodGFiX2VsZW0sIGxydV9ub2RlKSwKJiM0MzsJCQkJICAgb2Zmc2V0b2Yoc3RydWN0IGh0YWJfZWxlbV9scnUsIGhhc2gpIC0KJiM0MzsJCQkJICAgb2Zmc2V0b2Yoc3RydWN0IGh0YWJfZWxlbV9scnUsIGxydV9ub2RlKSwKIAkJCQkgICBodGFiX2xydV9tYXBfZGVsZXRlX25vZGUsCiAJCQkJICAgaHRhYik7CiAJZWxzZQpAQCAtMzYxLDcgJiM0Mzs0MzUsNyBAQCBzdGF0aWMgaW50IHByZWFsbG9jX2luaXQoc3RydWN0IGJwZl9odGFiICpodGFiKQogCiAJaWYgKGh0YWJfaXNfbHJ1KGh0YWIpKQogCQlicGZfbHJ1X3BvcHVsYXRlKCZhbXA7aHRhYi0mZ3Q7bHJ1LCBodGFiLSZndDtlbGVtcywKLQkJCQkgb2Zmc2V0b2Yoc3RydWN0IGh0YWJfZWxlbSwgbHJ1X25vZGUpLAomIzQzOwkJCQkgb2Zmc2V0b2Yoc3RydWN0IGh0YWJfZWxlbV9scnUsIGxydV9ub2RlKSwKIAkJCQkgaHRhYi0mZ3Q7ZWxlbV9zaXplLCBudW1fZW50cmllcyk7CiAJZWxzZQogCQlwY3B1X2ZyZWVsaXN0X3BvcHVsYXRlKCZhbXA7aHRhYi0mZ3Q7ZnJlZWxpc3QsCkBAIC00MjgsNiAmIzQzOzUwMiwyNSBAQCBzdGF0aWMgaW50IGh0YWJfbWFwX2FsbG9jX2NoZWNrKHVuaW9uIGJwZl9hdHRyICphdHRyKQogCUJVSUxEX0JVR19PTihvZmZzZXRvZihzdHJ1Y3QgaHRhYl9lbGVtLCBmbm9kZS5uZXh0KSAhPQogCQkgICAgIG9mZnNldG9mKHN0cnVjdCBodGFiX2VsZW0sIGhhc2hfbm9kZS5wcHJldikpOwogCiYjNDM7CS8qIGh0YWJfZWxlbSBwb2ludGVycyBhcmUgdXNlZCBhcyBiYXNlIHBvaW50ZXJzIGZvciBodGFiX2VsZW1fbHJ1IGFuZAomIzQzOwkgKiBodGFiX2VsZW1fcGNwdS4gVGhlc2Ugc3RydWN0dXJlcyBtdXN0IHNoYXJlIGEgY29tbW9uIGluaXRpYWwgc2VxdWVuY2UKJiM0MzsJICogdG8gZW5zdXJlIHBvaW50ZXIgY2FzdGluZyBiZXR3ZWVuIHRoZW0gaXMgc2FmZS4KJiM0MzsJICovCiYjNDM7CUJVSUxEX0JVR19PTihvZmZzZXRvZihzdHJ1Y3QgaHRhYl9lbGVtLCBoYXNoX25vZGUpICE9CiYjNDM7CQkgICAgIG9mZnNldG9mKHN0cnVjdCBodGFiX2VsZW1fbHJ1LCBoYXNoX25vZGUpKTsKJiM0MzsJQlVJTERfQlVHX09OKG9mZnNldG9mKHN0cnVjdCBodGFiX2VsZW0sIGhhc2hfbm9kZSkgIT0KJiM0MzsJCSAgICAgb2Zmc2V0b2Yoc3RydWN0IGh0YWJfZWxlbV9wY3B1LCBoYXNoX25vZGUpKTsKJiM0MzsKJiM0MzsJQlVJTERfQlVHX09OKG9mZnNldG9mKHN0cnVjdCBodGFiX2VsZW0sIHBhZGRpbmcpICE9CiYjNDM7CQkgICAgIG9mZnNldG9mKHN0cnVjdCBodGFiX2VsZW1fbHJ1LCBwYWRkaW5nKSk7CiYjNDM7CUJVSUxEX0JVR19PTihvZmZzZXRvZihzdHJ1Y3QgaHRhYl9lbGVtLCBwYWRkaW5nKSAhPQomIzQzOwkJICAgICBvZmZzZXRvZihzdHJ1Y3QgaHRhYl9lbGVtX3BjcHUsIHBhZGRpbmcpKTsKJiM0MzsKJiM0MzsJQlVJTERfQlVHX09OKG9mZnNldG9mKHN0cnVjdCBodGFiX2VsZW0sIGZub2RlKSAhPQomIzQzOwkJICAgICBvZmZzZXRvZihzdHJ1Y3QgaHRhYl9lbGVtX2xydSwgZm5vZGUpKTsKJiM0MzsJQlVJTERfQlVHX09OKG9mZnNldG9mKHN0cnVjdCBodGFiX2VsZW0sIGZub2RlKSAhPQomIzQzOwkJICAgICBvZmZzZXRvZihzdHJ1Y3QgaHRhYl9lbGVtX3BjcHUsIGZub2RlKSk7CiYjNDM7CiAJaWYgKHplcm9fc2VlZCAmYW1wOyZhbXA7ICFjYXBhYmxlKENBUF9TWVNfQURNSU4pKQogCQkvKiBHdWFyZCBhZ2FpbnN0IGxvY2FsIERvUywgYW5kIGRpc2NvdXJhZ2UgcHJvZHVjdGlvbiB1c2UuICovCiAJCXJldHVybiAtRVBFUk07CkBAIC00NzYsNyAmIzQzOzU2OSw3IEBAIHN0YXRpYyB2b2lkIGh0YWJfbWVtX2R0b3Iodm9pZCAqb2JqLCB2b2lkICpjdHgpCiAJaWYgKElTX0VSUl9PUl9OVUxMKGhyZWMtJmd0O3JlY29yZCkpCiAJCXJldHVybjsKIAotCW1hcF92YWx1ZSA9IGh0YWJfZWxlbV92YWx1ZShlbGVtLCBocmVjLSZndDtrZXlfc2l6ZSk7CiYjNDM7CW1hcF92YWx1ZSA9ICh2b2lkICopZWxlbSAmIzQzOyBocmVjLSZndDtrZXlfb2Zmc2V0ICYjNDM7IHJvdW5kX3VwKGhyZWMtJmd0O2tleV9zaXplLCA4KTsKIAlicGZfb2JqX2ZyZWVfZmllbGRzKGhyZWMtJmd0O3JlY29yZCwgbWFwX3ZhbHVlKTsKIH0KIApAQCAtNTAyLDcgJiM0Mzs1OTUsNyBAQCBzdGF0aWMgdm9pZCBodGFiX2R0b3JfY3R4X2ZyZWUodm9pZCAqY3R4KQogfQogCiBzdGF0aWMgaW50IGJwZl9tYV9zZXRfZHRvcihzdHJ1Y3QgYnBmX21hcCAqbWFwLCBzdHJ1Y3QgYnBmX21lbV9hbGxvYyAqbWEsCi0JCQkgICB2b2lkICgqZHRvcikodm9pZCAqLCB2b2lkICopKQomIzQzOwkJCSAgIHZvaWQgKCpkdG9yKSh2b2lkICosIHZvaWQgKiksIHUzMiBrZXlfb2Zmc2V0KQogewogCXN0cnVjdCBodGFiX2J0Zl9yZWNvcmQgKmhyZWM7CiAJaW50IGVycjsKQEAgLTUxNSw2ICYjNDM7NjA4LDcgQEAgc3RhdGljIGludCBicGZfbWFfc2V0X2R0b3Ioc3RydWN0IGJwZl9tYXAgKm1hcCwgc3RydWN0IGJwZl9tZW1fYWxsb2MgKm1hLAogCWlmICghaHJlYykKIAkJcmV0dXJuIC1FTk9NRU07CiAJaHJlYy0mZ3Q7a2V5X3NpemUgPSBtYXAtJmd0O2tleV9zaXplOwomIzQzOwlocmVjLSZndDtrZXlfb2Zmc2V0ID0ga2V5X29mZnNldDsKIAlocmVjLSZndDtyZWNvcmQgPSBidGZfcmVjb3JkX2R1cChtYXAtJmd0O3JlY29yZCk7CiAJaWYgKElTX0VSUihocmVjLSZndDtyZWNvcmQpKSB7CiAJCWVyciA9IFBUUl9FUlIoaHJlYy0mZ3Q7cmVjb3JkKTsKQEAgLTUzNyw5ICYjNDM7NjMxLDkgQEAgc3RhdGljIGludCBodGFiX21hcF9jaGVja19idGYoc3RydWN0IGJwZl9tYXAgKm1hcCwgY29uc3Qgc3RydWN0IGJ0ZiAqYnRmLAogCSAqIHBvcHVsYXRlZCBpbiBodGFiX21hcF9hbGxvYygpLCBzbyBpdCB3aWxsIGFsd2F5cyBhcHBlYXIgYXMgTlVMTC4KIAkgKi8KIAlpZiAoaHRhYl9pc19wZXJjcHUoaHRhYikpCi0JCXJldHVybiBicGZfbWFfc2V0X2R0b3IobWFwLCAmYW1wO2h0YWItJmd0O3BjcHVfbWEsIGh0YWJfcGNwdV9tZW1fZHRvcik7CiYjNDM7CQlyZXR1cm4gYnBmX21hX3NldF9kdG9yKG1hcCwgJmFtcDtodGFiLSZndDtwY3B1X21hLCBodGFiX3BjcHVfbWVtX2R0b3IsIGh0YWItJmd0O2tleV9vZmZzZXQpOwogCWVsc2UKLQkJcmV0dXJuIGJwZl9tYV9zZXRfZHRvcihtYXAsICZhbXA7aHRhYi0mZ3Q7bWEsIGh0YWJfbWVtX2R0b3IpOwomIzQzOwkJcmV0dXJuIGJwZl9tYV9zZXRfZHRvcihtYXAsICZhbXA7aHRhYi0mZ3Q7bWEsIGh0YWJfbWVtX2R0b3IsIGh0YWItJmd0O2tleV9vZmZzZXQpOwogfQogCiBzdGF0aWMgc3RydWN0IGJwZl9tYXAgKmh0YWJfbWFwX2FsbG9jKHVuaW9uIGJwZl9hdHRyICphdHRyKQpAQCAtNTgzLDggJiM0Mzs2NzcsMTggQEAgc3RhdGljIHN0cnVjdCBicGZfbWFwICpodGFiX21hcF9hbGxvYyh1bmlvbiBicGZfYXR0ciAqYXR0cikKIAogCWh0YWItJmd0O25fYnVja2V0cyA9IHJvdW5kdXBfcG93X29mX3R3byhodGFiLSZndDttYXAubWF4X2VudHJpZXMpOwogCi0JaHRhYi0mZ3Q7ZWxlbV9zaXplID0gc2l6ZW9mKHN0cnVjdCBodGFiX2VsZW0pICYjNDM7Ci0JCQkgIHJvdW5kX3VwKGh0YWItJmd0O21hcC5rZXlfc2l6ZSwgOCk7CiYjNDM7CWlmIChodGFiX2lzX2xydShodGFiKSkKJiM0MzsJCWh0YWItJmd0O2tleV9vZmZzZXQgPSBzaXplb2Yoc3RydWN0IGh0YWJfZWxlbV9scnUpOwomIzQzOwllbHNlIGlmIChwZXJjcHUgJmFtcDsmYW1wOyAhcHJlYWxsb2MpCiYjNDM7CQlodGFiLSZndDtrZXlfb2Zmc2V0ID0gcm91bmRfdXAoaHRhYl9oYXNfaGFzaChodGFiKSA/CiYjNDM7CQkJCQkgICAgc2l6ZW9mKHN0cnVjdCBodGFiX2VsZW1fcGNwdSkgOgomIzQzOwkJCQkJICAgIG9mZnNldG9mKHN0cnVjdCBodGFiX2VsZW1fcGNwdSwgaGFzaCksIDgpOwomIzQzOwllbHNlCiYjNDM7CQlodGFiLSZndDtrZXlfb2Zmc2V0ID0gcm91bmRfdXAoaHRhYl9oYXNfaGFzaChodGFiKSA/CiYjNDM7CQkJCQkgICAgc2l6ZW9mKHN0cnVjdCBodGFiX2VsZW0pIDoKJiM0MzsJCQkJCSAgICBvZmZzZXRvZihzdHJ1Y3QgaHRhYl9lbGVtLCBoYXNoKSwgOCk7CiYjNDM7CiYjNDM7CWh0YWItJmd0O2VsZW1fc2l6ZSA9IGh0YWItJmd0O2tleV9vZmZzZXQgJiM0Mzsgcm91bmRfdXAoaHRhYi0mZ3Q7bWFwLmtleV9zaXplLCA4KTsKIAlpZiAocGVyY3B1KQogCQlodGFiLSZndDtlbGVtX3NpemUgJiM0Mzs9IHNpemVvZih2b2lkICopOwogCWVsc2UKQEAgLTY5MiwxNCAmIzQzOzc5NiwxNiBAQCBzdGF0aWMgaW5saW5lIHN0cnVjdCBobGlzdF9udWxsc19oZWFkICpzZWxlY3RfYnVja2V0KHN0cnVjdCBicGZfaHRhYiAqaHRhYiwgdTMyCiB9CiAKIC8qIHRoaXMgbG9va3VwIGZ1bmN0aW9uIGNhbiBvbmx5IGJlIGNhbGxlZCB3aXRoIGJ1Y2tldCBsb2NrIHRha2VuICovCi1zdGF0aWMgc3RydWN0IGh0YWJfZWxlbSAqbG9va3VwX2VsZW1fcmF3KHN0cnVjdCBobGlzdF9udWxsc19oZWFkICpoZWFkLCB1MzIgaGFzaCwKJiM0MztzdGF0aWMgc3RydWN0IGh0YWJfZWxlbSAqbG9va3VwX2VsZW1fcmF3KHN0cnVjdCBicGZfaHRhYiAqaHRhYiwKJiM0MzsJCQkJCSBzdHJ1Y3QgaGxpc3RfbnVsbHNfaGVhZCAqaGVhZCwgdTMyIGhhc2gsCiAJCQkJCSB2b2lkICprZXksIHUzMiBrZXlfc2l6ZSkKIHsKIAlzdHJ1Y3QgaGxpc3RfbnVsbHNfbm9kZSAqbjsKIAlzdHJ1Y3QgaHRhYl9lbGVtICpsOwogCiAJaGxpc3RfbnVsbHNfZm9yX2VhY2hfZW50cnlfcmN1KGwsIG4sIGhlYWQsIGhhc2hfbm9kZSkKLQkJaWYgKGwtJmd0O2hhc2ggPT0gaGFzaCAmYW1wOyZhbXA7ICFtZW1jbXAoJmFtcDtsLSZndDtrZXksIGtleSwga2V5X3NpemUpKQomIzQzOwkJaWYgKCghaHRhYl9oYXNfaGFzaChodGFiKSB8fCBodGFiX2VsZW1faGFzaChodGFiLCBsKSA9PSBoYXNoKSAmYW1wOyZhbXA7CiYjNDM7CQkgICAgIW1lbWNtcChodGFiX2VsZW1fa2V5KGh0YWIsIGwpLCBrZXksIGtleV9zaXplKSkKIAkJCXJldHVybiBsOwogCiAJcmV0dXJuIE5VTEw7CkBAIC03MDksNyAmIzQzOzgxNSw4IEBAIHN0YXRpYyBzdHJ1Y3QgaHRhYl9lbGVtICpsb29rdXBfZWxlbV9yYXcoc3RydWN0IGhsaXN0X251bGxzX2hlYWQgKmhlYWQsIHUzMiBoYXNoCiAgKiB0aGUgdW5saWtlbHkgZXZlbnQgd2hlbiBlbGVtZW50cyBtb3ZlZCBmcm9tIG9uZSBidWNrZXQgaW50byBhbm90aGVyCiAgKiB3aGlsZSBsaW5rIGxpc3QgaXMgYmVpbmcgd2Fsa2VkCiAgKi8KLXN0YXRpYyBzdHJ1Y3QgaHRhYl9lbGVtICpsb29rdXBfbnVsbHNfZWxlbV9yYXcoc3RydWN0IGhsaXN0X251bGxzX2hlYWQgKmhlYWQsCiYjNDM7c3RhdGljIHN0cnVjdCBodGFiX2VsZW0gKmxvb2t1cF9udWxsc19lbGVtX3JhdyhzdHJ1Y3QgYnBmX2h0YWIgKmh0YWIsCiYjNDM7CQkJCQkgICAgICAgc3RydWN0IGhsaXN0X251bGxzX2hlYWQgKmhlYWQsCiAJCQkJCSAgICAgICB1MzIgaGFzaCwgdm9pZCAqa2V5LAogCQkJCQkgICAgICAgdTMyIGtleV9zaXplLCB1MzIgbl9idWNrZXRzKQogewpAQCAtNzE4LDcgJiM0Mzs4MjUsOCBAQCBzdGF0aWMgc3RydWN0IGh0YWJfZWxlbSAqbG9va3VwX251bGxzX2VsZW1fcmF3KHN0cnVjdCBobGlzdF9udWxsc19oZWFkICpoZWFkLAogCiBhZ2FpbjoKIAlobGlzdF9udWxsc19mb3JfZWFjaF9lbnRyeV9yY3UobCwgbiwgaGVhZCwgaGFzaF9ub2RlKQotCQlpZiAobC0mZ3Q7aGFzaCA9PSBoYXNoICZhbXA7JmFtcDsgIW1lbWNtcCgmYW1wO2wtJmd0O2tleSwga2V5LCBrZXlfc2l6ZSkpCiYjNDM7CQlpZiAoKCFodGFiX2hhc19oYXNoKGh0YWIpIHx8IGh0YWJfZWxlbV9oYXNoKGh0YWIsIGwpID09IGhhc2gpICZhbXA7JmFtcDsKJiM0MzsJCSAgICAhbWVtY21wKGh0YWJfZWxlbV9rZXkoaHRhYiwgbCksIGtleSwga2V5X3NpemUpKQogCQkJcmV0dXJuIGw7CiAKIAlpZiAodW5saWtlbHkoZ2V0X251bGxzX3ZhbHVlKG4pICE9IChoYXNoICZhbXA7IChuX2J1Y2tldHMgLSAxKSkpKQpAQCAtNzQ3LDE3ICYjNDM7ODU1LDE4IEBAIHN0YXRpYyB2b2lkICpfX2h0YWJfbWFwX2xvb2t1cF9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSkKIAogCWhlYWQgPSBzZWxlY3RfYnVja2V0KGh0YWIsIGhhc2gpOwogCi0JbCA9IGxvb2t1cF9udWxsc19lbGVtX3JhdyhoZWFkLCBoYXNoLCBrZXksIGtleV9zaXplLCBodGFiLSZndDtuX2J1Y2tldHMpOwomIzQzOwlsID0gbG9va3VwX251bGxzX2VsZW1fcmF3KGh0YWIsIGhlYWQsIGhhc2gsIGtleSwga2V5X3NpemUsIGh0YWItJmd0O25fYnVja2V0cyk7CiAKIAlyZXR1cm4gbDsKIH0KIAogc3RhdGljIHZvaWQgKmh0YWJfbWFwX2xvb2t1cF9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSkKIHsKJiM0MzsJc3RydWN0IGJwZl9odGFiICpodGFiID0gY29udGFpbmVyX29mKG1hcCwgc3RydWN0IGJwZl9odGFiLCBtYXApOwogCXN0cnVjdCBodGFiX2VsZW0gKmwgPSBfX2h0YWJfbWFwX2xvb2t1cF9lbGVtKG1hcCwga2V5KTsKIAogCWlmIChsKQotCQlyZXR1cm4gaHRhYl9lbGVtX3ZhbHVlKGwsIG1hcC0mZ3Q7a2V5X3NpemUpOwomIzQzOwkJcmV0dXJuIGh0YWJfZWxlbV92YWx1ZShodGFiLCBsKTsKIAogCXJldHVybiBOVUxMOwogfQpAQCAtNzc1LDYgJiM0Mzs4ODQsNyBAQCBzdGF0aWMgdm9pZCAqaHRhYl9tYXBfbG9va3VwX2VsZW0oc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5KQogICovCiBzdGF0aWMgaW50IGh0YWJfbWFwX2dlbl9sb29rdXAoc3RydWN0IGJwZl9tYXAgKm1hcCwgc3RydWN0IGJwZl9pbnNuICppbnNuX2J1ZikKIHsKJiM0MzsJc3RydWN0IGJwZl9odGFiICpodGFiID0gY29udGFpbmVyX29mKG1hcCwgc3RydWN0IGJwZl9odGFiLCBtYXApOwogCXN0cnVjdCBicGZfaW5zbiAqaW5zbiA9IGluc25fYnVmOwogCWNvbnN0IGludCByZXQgPSBCUEZfUkVHXzA7CiAKQEAgLTc4Myw3ICYjNDM7ODkzLDcgQEAgc3RhdGljIGludCBodGFiX21hcF9nZW5fbG9va3VwKHN0cnVjdCBicGZfbWFwICptYXAsIHN0cnVjdCBicGZfaW5zbiAqaW5zbl9idWYpCiAJKmluc24mIzQzOyYjNDM7ID0gQlBGX0VNSVRfQ0FMTChfX2h0YWJfbWFwX2xvb2t1cF9lbGVtKTsKIAkqaW5zbiYjNDM7JiM0MzsgPSBCUEZfSk1QX0lNTShCUEZfSkVRLCByZXQsIDAsIDEpOwogCSppbnNuJiM0MzsmIzQzOyA9IEJQRl9BTFU2NF9JTU0oQlBGX0FERCwgcmV0LAotCQkJCW9mZnNldG9mKHN0cnVjdCBodGFiX2VsZW0sIGtleSkgJiM0MzsKJiM0MzsJCQkJaHRhYi0mZ3Q7a2V5X29mZnNldCAmIzQzOwogCQkJCXJvdW5kX3VwKG1hcC0mZ3Q7a2V5X3NpemUsIDgpKTsKIAlyZXR1cm4gaW5zbiAtIGluc25fYnVmOwogfQpAQCAtNzkxLDEyICYjNDM7OTAxLDEzIEBAIHN0YXRpYyBpbnQgaHRhYl9tYXBfZ2VuX2xvb2t1cChzdHJ1Y3QgYnBmX21hcCAqbWFwLCBzdHJ1Y3QgYnBmX2luc24gKmluc25fYnVmKQogc3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkICpfX2h0YWJfbHJ1X21hcF9sb29rdXBfZWxlbShzdHJ1Y3QgYnBmX21hcCAqbWFwLAogCQkJCQkJCXZvaWQgKmtleSwgY29uc3QgYm9vbCBtYXJrKQogewomIzQzOwlzdHJ1Y3QgYnBmX2h0YWIgKmh0YWIgPSBjb250YWluZXJfb2YobWFwLCBzdHJ1Y3QgYnBmX2h0YWIsIG1hcCk7CiAJc3RydWN0IGh0YWJfZWxlbSAqbCA9IF9faHRhYl9tYXBfbG9va3VwX2VsZW0obWFwLCBrZXkpOwogCiAJaWYgKGwpIHsKIAkJaWYgKG1hcmspCi0JCQlicGZfbHJ1X25vZGVfc2V0X3JlZigmYW1wO2wtJmd0O2xydV9ub2RlKTsKLQkJcmV0dXJuIGh0YWJfZWxlbV92YWx1ZShsLCBtYXAtJmd0O2tleV9zaXplKTsKJiM0MzsJCQlicGZfbHJ1X25vZGVfc2V0X3JlZihodGFiX2VsZW1fbHJ1X25vZGUobCkpOwomIzQzOwkJcmV0dXJuIGh0YWJfZWxlbV92YWx1ZShodGFiLCBsKTsKIAl9CiAKIAlyZXR1cm4gTlVMTDsKQEAgLTgxNSw2ICYjNDM7OTI2LDcgQEAgc3RhdGljIHZvaWQgKmh0YWJfbHJ1X21hcF9sb29rdXBfZWxlbV9zeXMoc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5KQogc3RhdGljIGludCBodGFiX2xydV9tYXBfZ2VuX2xvb2t1cChzdHJ1Y3QgYnBmX21hcCAqbWFwLAogCQkJCSAgIHN0cnVjdCBicGZfaW5zbiAqaW5zbl9idWYpCiB7CiYjNDM7CXN0cnVjdCBicGZfaHRhYiAqaHRhYiA9IGNvbnRhaW5lcl9vZihtYXAsIHN0cnVjdCBicGZfaHRhYiwgbWFwKTsKIAlzdHJ1Y3QgYnBmX2luc24gKmluc24gPSBpbnNuX2J1ZjsKIAljb25zdCBpbnQgcmV0ID0gQlBGX1JFR18wOwogCWNvbnN0IGludCByZWZfcmVnID0gQlBGX1JFR18xOwpAQCAtODI0LDE1ICYjNDM7OTM2LDE1IEBAIHN0YXRpYyBpbnQgaHRhYl9scnVfbWFwX2dlbl9sb29rdXAoc3RydWN0IGJwZl9tYXAgKm1hcCwKIAkqaW5zbiYjNDM7JiM0MzsgPSBCUEZfRU1JVF9DQUxMKF9faHRhYl9tYXBfbG9va3VwX2VsZW0pOwogCSppbnNuJiM0MzsmIzQzOyA9IEJQRl9KTVBfSU1NKEJQRl9KRVEsIHJldCwgMCwgNCk7CiAJKmluc24mIzQzOyYjNDM7ID0gQlBGX0xEWF9NRU0oQlBGX0IsIHJlZl9yZWcsIHJldCwKLQkJCSAgICAgIG9mZnNldG9mKHN0cnVjdCBodGFiX2VsZW0sIGxydV9ub2RlKSAmIzQzOwomIzQzOwkJCSAgICAgIG9mZnNldG9mKHN0cnVjdCBodGFiX2VsZW1fbHJ1LCBscnVfbm9kZSkgJiM0MzsKIAkJCSAgICAgIG9mZnNldG9mKHN0cnVjdCBicGZfbHJ1X25vZGUsIHJlZikpOwogCSppbnNuJiM0MzsmIzQzOyA9IEJQRl9KTVBfSU1NKEJQRl9KTkUsIHJlZl9yZWcsIDAsIDEpOwogCSppbnNuJiM0MzsmIzQzOyA9IEJQRl9TVF9NRU0oQlBGX0IsIHJldCwKLQkJCSAgICAgb2Zmc2V0b2Yoc3RydWN0IGh0YWJfZWxlbSwgbHJ1X25vZGUpICYjNDM7CiYjNDM7CQkJICAgICBvZmZzZXRvZihzdHJ1Y3QgaHRhYl9lbGVtX2xydSwgbHJ1X25vZGUpICYjNDM7CiAJCQkgICAgIG9mZnNldG9mKHN0cnVjdCBicGZfbHJ1X25vZGUsIHJlZiksCiAJCQkgICAgIDEpOwogCSppbnNuJiM0MzsmIzQzOyA9IEJQRl9BTFU2NF9JTU0oQlBGX0FERCwgcmV0LAotCQkJCW9mZnNldG9mKHN0cnVjdCBodGFiX2VsZW0sIGtleSkgJiM0MzsKJiM0MzsJCQkJaHRhYi0mZ3Q7a2V5X29mZnNldCAmIzQzOwogCQkJCXJvdW5kX3VwKG1hcC0mZ3Q7a2V5X3NpemUsIDgpKTsKIAlyZXR1cm4gaW5zbiAtIGluc25fYnVmOwogfQpAQCAtODQ0LDEzICYjNDM7OTU2LDEzIEBAIHN0YXRpYyB2b2lkIGNoZWNrX2FuZF9jYW5jZWxfZmllbGRzKHN0cnVjdCBicGZfaHRhYiAqaHRhYiwKIAkJcmV0dXJuOwogCiAJaWYgKGh0YWJfaXNfcGVyY3B1KGh0YWIpKSB7Ci0JCXZvaWQgX19wZXJjcHUgKnBwdHIgPSBodGFiX2VsZW1fZ2V0X3B0cihlbGVtLCBodGFiLSZndDttYXAua2V5X3NpemUpOwomIzQzOwkJdm9pZCBfX3BlcmNwdSAqcHB0ciA9IGh0YWJfZWxlbV9nZXRfcHRyKGh0YWIsIGVsZW0pOwogCQlpbnQgY3B1OwogCiAJCWZvcl9lYWNoX3Bvc3NpYmxlX2NwdShjcHUpCiAJCQlicGZfb2JqX2NhbmNlbF9maWVsZHMoJmFtcDtodGFiLSZndDttYXAsIHBlcl9jcHVfcHRyKHBwdHIsIGNwdSkpOwogCX0gZWxzZSB7Ci0JCXZvaWQgKm1hcF92YWx1ZSA9IGh0YWJfZWxlbV92YWx1ZShlbGVtLCBodGFiLSZndDttYXAua2V5X3NpemUpOwomIzQzOwkJdm9pZCAqbWFwX3ZhbHVlID0gaHRhYl9lbGVtX3ZhbHVlKGh0YWIsIGVsZW0pOwogCiAJCWJwZl9vYmpfY2FuY2VsX2ZpZWxkcygmYW1wO2h0YWItJmd0O21hcCwgbWFwX3ZhbHVlKTsKIAl9CkBAIC04NjksOCAmIzQzOzk4MSw4IEBAIHN0YXRpYyBib29sIGh0YWJfbHJ1X21hcF9kZWxldGVfbm9kZSh2b2lkICphcmcsIHN0cnVjdCBicGZfbHJ1X25vZGUgKm5vZGUpCiAJc3RydWN0IGJ1Y2tldCAqYjsKIAlpbnQgcmV0OwogCi0JdGd0X2wgPSBjb250YWluZXJfb2Yobm9kZSwgc3RydWN0IGh0YWJfZWxlbSwgbHJ1X25vZGUpOwotCWIgPSBfX3NlbGVjdF9idWNrZXQoaHRhYiwgdGd0X2wtJmd0O2hhc2gpOwomIzQzOwl0Z3RfbCA9IChzdHJ1Y3QgaHRhYl9lbGVtICopY29udGFpbmVyX29mKG5vZGUsIHN0cnVjdCBodGFiX2VsZW1fbHJ1LCBscnVfbm9kZSk7CiYjNDM7CWIgPSBfX3NlbGVjdF9idWNrZXQoaHRhYiwgaHRhYl9lbGVtX2hhc2goaHRhYiwgdGd0X2wpKTsKIAloZWFkID0gJmFtcDtiLSZndDtoZWFkOwogCiAJcmV0ID0gaHRhYl9sb2NrX2J1Y2tldChiLCAmYW1wO2ZsYWdzKTsKQEAgLTkxMiw3ICYjNDM7MTAyNCw3IEBAIHN0YXRpYyBpbnQgaHRhYl9tYXBfZ2V0X25leHRfa2V5KHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSwgdm9pZCAqbmV4dF9rZXkpCiAJaGVhZCA9IHNlbGVjdF9idWNrZXQoaHRhYiwgaGFzaCk7CiAKIAkvKiBsb29rdXAgdGhlIGtleSAqLwotCWwgPSBsb29rdXBfbnVsbHNfZWxlbV9yYXcoaGVhZCwgaGFzaCwga2V5LCBrZXlfc2l6ZSwgaHRhYi0mZ3Q7bl9idWNrZXRzKTsKJiM0MzsJbCA9IGxvb2t1cF9udWxsc19lbGVtX3JhdyhodGFiLCBoZWFkLCBoYXNoLCBrZXksIGtleV9zaXplLCBodGFiLSZndDtuX2J1Y2tldHMpOwogCiAJaWYgKCFsKQogCQlnb3RvIGZpbmRfZmlyc3RfZWxlbTsKQEAgLTkyMyw3ICYjNDM7MTAzNSw3IEBAIHN0YXRpYyBpbnQgaHRhYl9tYXBfZ2V0X25leHRfa2V5KHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSwgdm9pZCAqbmV4dF9rZXkpCiAKIAlpZiAobmV4dF9sKSB7CiAJCS8qIGlmIG5leHQgZWxlbSBpbiB0aGlzIGhhc2ggbGlzdCBpcyBub24temVybywganVzdCByZXR1cm4gaXQgKi8KLQkJbWVtY3B5KG5leHRfa2V5LCBuZXh0X2wtJmd0O2tleSwga2V5X3NpemUpOwomIzQzOwkJbWVtY3B5KG5leHRfa2V5LCBodGFiX2VsZW1fa2V5KGh0YWIsIG5leHRfbCksIGtleV9zaXplKTsKIAkJcmV0dXJuIDA7CiAJfQogCkBAIC05NDEsNyAmIzQzOzEwNTMsNyBAQCBzdGF0aWMgaW50IGh0YWJfbWFwX2dldF9uZXh0X2tleShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXksIHZvaWQgKm5leHRfa2V5KQogCQkJCQkgIHN0cnVjdCBodGFiX2VsZW0sIGhhc2hfbm9kZSk7CiAJCWlmIChuZXh0X2wpIHsKIAkJCS8qIGlmIGl0JiMzOTtzIG5vdCBlbXB0eSwganVzdCByZXR1cm4gaXQgKi8KLQkJCW1lbWNweShuZXh0X2tleSwgbmV4dF9sLSZndDtrZXksIGtleV9zaXplKTsKJiM0MzsJCQltZW1jcHkobmV4dF9rZXksIGh0YWJfZWxlbV9rZXkoaHRhYiwgbmV4dF9sKSwga2V5X3NpemUpOwogCQkJcmV0dXJuIDA7CiAJCX0KIAl9CkBAIC05NTUsNyAmIzQzOzEwNjcsNyBAQCBzdGF0aWMgdm9pZCBodGFiX2VsZW1fZnJlZShzdHJ1Y3QgYnBmX2h0YWIgKmh0YWIsIHN0cnVjdCBodGFiX2VsZW0gKmwpCiAJY2hlY2tfYW5kX2NhbmNlbF9maWVsZHMoaHRhYiwgbCk7CiAKIAlpZiAoaHRhYi0mZ3Q7bWFwLm1hcF90eXBlID09IEJQRl9NQVBfVFlQRV9QRVJDUFVfSEFTSCkKLQkJYnBmX21lbV9jYWNoZV9mcmVlKCZhbXA7aHRhYi0mZ3Q7cGNwdV9tYSwgbC0mZ3Q7cHRyX3RvX3BwdHIpOwomIzQzOwkJYnBmX21lbV9jYWNoZV9mcmVlKCZhbXA7aHRhYi0mZ3Q7cGNwdV9tYSwgaHRhYl9lbGVtX2dldF9wdHJfdG9fcHB0cihsKSk7CiAJYnBmX21lbV9jYWNoZV9mcmVlKCZhbXA7aHRhYi0mZ3Q7bWEsIGwpOwogfQogCkBAIC05NjUsNyAmIzQzOzEwNzcsNyBAQCBzdGF0aWMgdm9pZCBodGFiX3B1dF9mZF92YWx1ZShzdHJ1Y3QgYnBmX2h0YWIgKmh0YWIsIHN0cnVjdCBodGFiX2VsZW0gKmwpCiAJdm9pZCAqcHRyOwogCiAJaWYgKG1hcC0mZ3Q7b3BzLSZndDttYXBfZmRfcHV0X3B0cikgewotCQlwdHIgPSBmZF9odGFiX21hcF9nZXRfcHRyKG1hcCwgbCk7CiYjNDM7CQlwdHIgPSBmZF9odGFiX21hcF9nZXRfcHRyKGh0YWIsIGwpOwogCQltYXAtJmd0O29wcy0mZ3Q7bWFwX2ZkX3B1dF9wdHIobWFwLCBwdHIsIHRydWUpOwogCX0KIH0KQEAgLTExMTcsMTAgJiM0MzsxMjI5LDEwIEBAIHN0YXRpYyBzdHJ1Y3QgaHRhYl9lbGVtICphbGxvY19odGFiX2VsZW0oc3RydWN0IGJwZl9odGFiICpodGFiLCB2b2lkICprZXksCiAJCX0KIAl9CiAKLQltZW1jcHkobF9uZXctJmd0O2tleSwga2V5LCBrZXlfc2l6ZSk7CiYjNDM7CW1lbWNweShodGFiX2VsZW1fa2V5KGh0YWIsIGxfbmV3KSwga2V5LCBrZXlfc2l6ZSk7CiAJaWYgKHBlcmNwdSkgewogCQlpZiAocHJlYWxsb2MpIHsKLQkJCXBwdHIgPSBodGFiX2VsZW1fZ2V0X3B0cihsX25ldywga2V5X3NpemUpOwomIzQzOwkJCXBwdHIgPSBodGFiX2VsZW1fZ2V0X3B0cihodGFiLCBsX25ldyk7CiAJCX0gZWxzZSB7CiAJCQkvKiBhbGxvY19wZXJjcHUgemVyby1maWxscyAqLwogCQkJdm9pZCAqcHRyID0gYnBmX21lbV9jYWNoZV9hbGxvYygmYW1wO2h0YWItJmd0O3BjcHVfbWEpOwpAQCAtMTEzMCwyNiAmIzQzOzEyNDIsMjYgQEAgc3RhdGljIHN0cnVjdCBodGFiX2VsZW0gKmFsbG9jX2h0YWJfZWxlbShzdHJ1Y3QgYnBmX2h0YWIgKmh0YWIsIHZvaWQgKmtleSwKIAkJCQlsX25ldyA9IEVSUl9QVFIoLUVOT01FTSk7CiAJCQkJZ290byBkZWNfY291bnQ7CiAJCQl9Ci0JCQlsX25ldy0mZ3Q7cHRyX3RvX3BwdHIgPSBwdHI7CiYjNDM7CQkJaHRhYl9lbGVtX3NldF9wdHJfdG9fcHB0cihsX25ldywgcHRyKTsKIAkJCXBwdHIgPSAqKHZvaWQgX19wZXJjcHUgKiopcHRyOwogCQl9CiAKIAkJcGNwdV9pbml0X3ZhbHVlKGh0YWIsIHBwdHIsIHZhbHVlLCBvbmFsbGNwdXMsIG1hcF9mbGFncyk7CiAKIAkJaWYgKCFwcmVhbGxvYykKLQkJCWh0YWJfZWxlbV9zZXRfcHRyKGxfbmV3LCBrZXlfc2l6ZSwgcHB0cik7CiYjNDM7CQkJaHRhYl9lbGVtX3NldF9wdHIoaHRhYiwgbF9uZXcsIHBwdHIpOwogCX0gZWxzZSBpZiAoZmRfaHRhYl9tYXBfbmVlZHNfYWRqdXN0KGh0YWIpKSB7CiAJCXNpemUgPSByb3VuZF91cChzaXplLCA4KTsKLQkJbWVtY3B5KGh0YWJfZWxlbV92YWx1ZShsX25ldywga2V5X3NpemUpLCB2YWx1ZSwgc2l6ZSk7CiYjNDM7CQltZW1jcHkoaHRhYl9lbGVtX3ZhbHVlKGh0YWIsIGxfbmV3KSwgdmFsdWUsIHNpemUpOwogCX0gZWxzZSBpZiAobWFwX2ZsYWdzICZhbXA7IEJQRl9GX0xPQ0spIHsKIAkJY29weV9tYXBfdmFsdWVfbG9ja2VkKCZhbXA7aHRhYi0mZ3Q7bWFwLAotCQkJCSAgICAgIGh0YWJfZWxlbV92YWx1ZShsX25ldywga2V5X3NpemUpLAomIzQzOwkJCQkgICAgICBodGFiX2VsZW1fdmFsdWUoaHRhYiwgbF9uZXcpLAogCQkJCSAgICAgIHZhbHVlLCBmYWxzZSk7CiAJfSBlbHNlIHsKLQkJY29weV9tYXBfdmFsdWUoJmFtcDtodGFiLSZndDttYXAsIGh0YWJfZWxlbV92YWx1ZShsX25ldywga2V5X3NpemUpLCB2YWx1ZSk7CiYjNDM7CQljb3B5X21hcF92YWx1ZSgmYW1wO2h0YWItJmd0O21hcCwgaHRhYl9lbGVtX3ZhbHVlKGh0YWIsIGxfbmV3KSwgdmFsdWUpOwogCX0KIAotCWxfbmV3LSZndDtoYXNoID0gaGFzaDsKJiM0MzsJaHRhYl9lbGVtX3NldF9oYXNoKGh0YWIsIGxfbmV3LCBoYXNoKTsKIAlyZXR1cm4gbF9uZXc7CiBkZWNfY291bnQ6CiAJZGVjX2VsZW1fY291bnQoaHRhYik7CkBAIC0xMTk5LDcgJiM0MzsxMzExLDcgQEAgc3RhdGljIGxvbmcgaHRhYl9tYXBfdXBkYXRlX2VsZW0oc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5LCB2b2lkICp2YWx1ZSwKIAkJaWYgKHVubGlrZWx5KCFidGZfcmVjb3JkX2hhc19maWVsZChtYXAtJmd0O3JlY29yZCwgQlBGX1NQSU5fTE9DSykpKQogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCS8qIGZpbmQgYW4gZWxlbWVudCB3aXRob3V0IHRha2luZyB0aGUgYnVja2V0IGxvY2sgKi8KLQkJbF9vbGQgPSBsb29rdXBfbnVsbHNfZWxlbV9yYXcoaGVhZCwgaGFzaCwga2V5LCBrZXlfc2l6ZSwKJiM0MzsJCWxfb2xkID0gbG9va3VwX251bGxzX2VsZW1fcmF3KGh0YWIsIGhlYWQsIGhhc2gsIGtleSwga2V5X3NpemUsCiAJCQkJCSAgICAgIGh0YWItJmd0O25fYnVja2V0cyk7CiAJCXJldCA9IGNoZWNrX2ZsYWdzKGh0YWIsIGxfb2xkLCBtYXBfZmxhZ3MpOwogCQlpZiAocmV0KQpAQCAtMTIwNyw3ICYjNDM7MTMxOSw3IEBAIHN0YXRpYyBsb25nIGh0YWJfbWFwX3VwZGF0ZV9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSwgdm9pZCAqdmFsdWUsCiAJCWlmIChsX29sZCkgewogCQkJLyogZ3JhYiB0aGUgZWxlbWVudCBsb2NrIGFuZCB1cGRhdGUgdmFsdWUgaW4gcGxhY2UgKi8KIAkJCWNvcHlfbWFwX3ZhbHVlX2xvY2tlZChtYXAsCi0JCQkJCSAgICAgIGh0YWJfZWxlbV92YWx1ZShsX29sZCwga2V5X3NpemUpLAomIzQzOwkJCQkJICAgICAgaHRhYl9lbGVtX3ZhbHVlKGh0YWIsIGxfb2xkKSwKIAkJCQkJICAgICAgdmFsdWUsIGZhbHNlKTsKIAkJCXJldHVybiAwOwogCQl9CkBAIC0xMjIxLDcgJiM0MzsxMzMzLDcgQEAgc3RhdGljIGxvbmcgaHRhYl9tYXBfdXBkYXRlX2VsZW0oc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5LCB2b2lkICp2YWx1ZSwKIAlpZiAocmV0KQogCQlyZXR1cm4gcmV0OwogCi0JbF9vbGQgPSBsb29rdXBfZWxlbV9yYXcoaGVhZCwgaGFzaCwga2V5LCBrZXlfc2l6ZSk7CiYjNDM7CWxfb2xkID0gbG9va3VwX2VsZW1fcmF3KGh0YWIsIGhlYWQsIGhhc2gsIGtleSwga2V5X3NpemUpOwogCiAJcmV0ID0gY2hlY2tfZmxhZ3MoaHRhYiwgbF9vbGQsIG1hcF9mbGFncyk7CiAJaWYgKHJldCkKQEAgLTEyMzUsNyAmIzQzOzEzNDcsNyBAQCBzdGF0aWMgbG9uZyBodGFiX21hcF91cGRhdGVfZWxlbShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXksIHZvaWQgKnZhbHVlLAogCQkgKiBhbmQgdXBkYXRlIGVsZW1lbnQgaW4gcGxhY2UKIAkJICovCiAJCWNvcHlfbWFwX3ZhbHVlX2xvY2tlZChtYXAsCi0JCQkJICAgICAgaHRhYl9lbGVtX3ZhbHVlKGxfb2xkLCBrZXlfc2l6ZSksCiYjNDM7CQkJCSAgICAgIGh0YWJfZWxlbV92YWx1ZShodGFiLCBsX29sZCksCiAJCQkJICAgICAgdmFsdWUsIGZhbHNlKTsKIAkJcmV0ID0gMDsKIAkJZ290byBlcnI7CkBAIC0xMjc1LDcgJiM0MzsxMzg3LDcgQEAgc3RhdGljIHZvaWQgaHRhYl9scnVfcHVzaF9mcmVlKHN0cnVjdCBicGZfaHRhYiAqaHRhYiwgc3RydWN0IGh0YWJfZWxlbSAqZWxlbSkKIHsKIAljaGVja19hbmRfY2FuY2VsX2ZpZWxkcyhodGFiLCBlbGVtKTsKIAlicGZfbWFwX2RlY19lbGVtX2NvdW50KCZhbXA7aHRhYi0mZ3Q7bWFwKTsKLQlicGZfbHJ1X3B1c2hfZnJlZSgmYW1wO2h0YWItJmd0O2xydSwgJmFtcDtlbGVtLSZndDtscnVfbm9kZSk7CiYjNDM7CWJwZl9scnVfcHVzaF9mcmVlKCZhbXA7aHRhYi0mZ3Q7bHJ1LCBodGFiX2VsZW1fbHJ1X25vZGUoZWxlbSkpOwogfQogCiBzdGF0aWMgbG9uZyBodGFiX2xydV9tYXBfdXBkYXRlX2VsZW0oc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5LCB2b2lkICp2YWx1ZSwKQEAgLTEzMTAsMTMgJiM0MzsxNDIyLDEzIEBAIHN0YXRpYyBsb25nIGh0YWJfbHJ1X21hcF91cGRhdGVfZWxlbShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXksIHZvaWQgKnZhbHVlCiAJbF9uZXcgPSBwcmVhbGxvY19scnVfcG9wKGh0YWIsIGtleSwgaGFzaCk7CiAJaWYgKCFsX25ldykKIAkJcmV0dXJuIC1FTk9NRU07Ci0JY29weV9tYXBfdmFsdWUoJmFtcDtodGFiLSZndDttYXAsIGh0YWJfZWxlbV92YWx1ZShsX25ldywgbWFwLSZndDtrZXlfc2l6ZSksIHZhbHVlKTsKJiM0MzsJY29weV9tYXBfdmFsdWUoJmFtcDtodGFiLSZndDttYXAsIGh0YWJfZWxlbV92YWx1ZShodGFiLCBsX25ldyksIHZhbHVlKTsKIAogCXJldCA9IGh0YWJfbG9ja19idWNrZXQoYiwgJmFtcDtmbGFncyk7CiAJaWYgKHJldCkKIAkJZ290byBlcnJfbG9ja19idWNrZXQ7CiAKLQlsX29sZCA9IGxvb2t1cF9lbGVtX3JhdyhoZWFkLCBoYXNoLCBrZXksIGtleV9zaXplKTsKJiM0MzsJbF9vbGQgPSBsb29rdXBfZWxlbV9yYXcoaHRhYiwgaGVhZCwgaGFzaCwga2V5LCBrZXlfc2l6ZSk7CiAKIAlyZXQgPSBjaGVja19mbGFncyhodGFiLCBsX29sZCwgbWFwX2ZsYWdzKTsKIAlpZiAocmV0KQpAQCAtMTMyNyw3ICYjNDM7MTQzOSw3IEBAIHN0YXRpYyBsb25nIGh0YWJfbHJ1X21hcF91cGRhdGVfZWxlbShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXksIHZvaWQgKnZhbHVlCiAJICovCiAJaGxpc3RfbnVsbHNfYWRkX2hlYWRfcmN1KCZhbXA7bF9uZXctJmd0O2hhc2hfbm9kZSwgaGVhZCk7CiAJaWYgKGxfb2xkKSB7Ci0JCWJwZl9scnVfbm9kZV9zZXRfcmVmKCZhbXA7bF9uZXctJmd0O2xydV9ub2RlKTsKJiM0MzsJCWJwZl9scnVfbm9kZV9zZXRfcmVmKGh0YWJfZWxlbV9scnVfbm9kZShsX25ldykpOwogCQlobGlzdF9udWxsc19kZWxfcmN1KCZhbXA7bF9vbGQtJmd0O2hhc2hfbm9kZSk7CiAJfQogCXJldCA9IDA7CkBAIC0xMzgzLDcgJiM0MzsxNDk1LDcgQEAgc3RhdGljIGxvbmcgaHRhYl9tYXBfdXBkYXRlX2VsZW1faW5fcGxhY2Uoc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5LAogCWlmIChyZXQpCiAJCXJldHVybiByZXQ7CiAKLQlsX29sZCA9IGxvb2t1cF9lbGVtX3JhdyhoZWFkLCBoYXNoLCBrZXksIGtleV9zaXplKTsKJiM0MzsJbF9vbGQgPSBsb29rdXBfZWxlbV9yYXcoaHRhYiwgaGVhZCwgaGFzaCwga2V5LCBrZXlfc2l6ZSk7CiAKIAlyZXQgPSBjaGVja19mbGFncyhodGFiLCBsX29sZCwgbWFwX2ZsYWdzKTsKIAlpZiAocmV0KQpAQCAtMTM5MiwxMCAmIzQzOzE1MDQsMTAgQEAgc3RhdGljIGxvbmcgaHRhYl9tYXBfdXBkYXRlX2VsZW1faW5fcGxhY2Uoc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5LAogCWlmIChsX29sZCkgewogCQkvKiBVcGRhdGUgdmFsdWUgaW4tcGxhY2UgKi8KIAkJaWYgKHBlcmNwdSkgewotCQkJcGNwdV9jb3B5X3ZhbHVlKGh0YWIsIGh0YWJfZWxlbV9nZXRfcHRyKGxfb2xkLCBrZXlfc2l6ZSksCiYjNDM7CQkJcGNwdV9jb3B5X3ZhbHVlKGh0YWIsIGh0YWJfZWxlbV9nZXRfcHRyKGh0YWIsIGxfb2xkKSwKIAkJCQkJdmFsdWUsIG9uYWxsY3B1cywgbWFwX2ZsYWdzKTsKIAkJfSBlbHNlIHsKLQkJCXZvaWQgKippbm5lcl9tYXBfcHB0ciA9IGh0YWJfZWxlbV92YWx1ZShsX29sZCwga2V5X3NpemUpOwomIzQzOwkJCXZvaWQgKippbm5lcl9tYXBfcHB0ciA9IGh0YWJfZWxlbV92YWx1ZShodGFiLCBsX29sZCk7CiAKIAkJCW9sZF9tYXBfcHRyID0gKmlubmVyX21hcF9wcHRyOwogCQkJV1JJVEVfT05DRSgqaW5uZXJfbWFwX3BwdHIsICoodm9pZCAqKil2YWx1ZSk7CkBAIC0xNDU2LDIwICYjNDM7MTU2OCwyMCBAQCBzdGF0aWMgbG9uZyBfX2h0YWJfbHJ1X3BlcmNwdV9tYXBfdXBkYXRlX2VsZW0oc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5LAogCWlmIChyZXQpCiAJCWdvdG8gZXJyX2xvY2tfYnVja2V0OwogCi0JbF9vbGQgPSBsb29rdXBfZWxlbV9yYXcoaGVhZCwgaGFzaCwga2V5LCBrZXlfc2l6ZSk7CiYjNDM7CWxfb2xkID0gbG9va3VwX2VsZW1fcmF3KGh0YWIsIGhlYWQsIGhhc2gsIGtleSwga2V5X3NpemUpOwogCiAJcmV0ID0gY2hlY2tfZmxhZ3MoaHRhYiwgbF9vbGQsIG1hcF9mbGFncyk7CiAJaWYgKHJldCkKIAkJZ290byBlcnI7CiAKIAlpZiAobF9vbGQpIHsKLQkJYnBmX2xydV9ub2RlX3NldF9yZWYoJmFtcDtsX29sZC0mZ3Q7bHJ1X25vZGUpOwomIzQzOwkJYnBmX2xydV9ub2RlX3NldF9yZWYoaHRhYl9lbGVtX2xydV9ub2RlKGxfb2xkKSk7CiAKIAkJLyogcGVyLWNwdSBoYXNoIG1hcCBjYW4gdXBkYXRlIHZhbHVlIGluLXBsYWNlICovCi0JCXBjcHVfY29weV92YWx1ZShodGFiLCBodGFiX2VsZW1fZ2V0X3B0cihsX29sZCwga2V5X3NpemUpLAomIzQzOwkJcGNwdV9jb3B5X3ZhbHVlKGh0YWIsIGh0YWJfZWxlbV9nZXRfcHRyKGh0YWIsIGxfb2xkKSwKIAkJCQl2YWx1ZSwgb25hbGxjcHVzLCBtYXBfZmxhZ3MpOwogCX0gZWxzZSB7Ci0JCXBjcHVfaW5pdF92YWx1ZShodGFiLCBodGFiX2VsZW1fZ2V0X3B0cihsX25ldywga2V5X3NpemUpLAomIzQzOwkJcGNwdV9pbml0X3ZhbHVlKGh0YWIsIGh0YWJfZWxlbV9nZXRfcHRyKGh0YWIsIGxfbmV3KSwKIAkJCQl2YWx1ZSwgb25hbGxjcHVzLCBtYXBfZmxhZ3MpOwogCQlobGlzdF9udWxsc19hZGRfaGVhZF9yY3UoJmFtcDtsX25ldy0mZ3Q7aGFzaF9ub2RlLCBoZWFkKTsKIAkJbF9uZXcgPSBOVUxMOwpAQCAtMTQ4MCw3ICYjNDM7MTU5Miw3IEBAIHN0YXRpYyBsb25nIF9faHRhYl9scnVfcGVyY3B1X21hcF91cGRhdGVfZWxlbShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXksCiBlcnJfbG9ja19idWNrZXQ6CiAJaWYgKGxfbmV3KSB7CiAJCWJwZl9tYXBfZGVjX2VsZW1fY291bnQoJmFtcDtodGFiLSZndDttYXApOwotCQlicGZfbHJ1X3B1c2hfZnJlZSgmYW1wO2h0YWItJmd0O2xydSwgJmFtcDtsX25ldy0mZ3Q7bHJ1X25vZGUpOwomIzQzOwkJYnBmX2xydV9wdXNoX2ZyZWUoJmFtcDtodGFiLSZndDtscnUsIGh0YWJfZWxlbV9scnVfbm9kZShsX25ldykpOwogCX0KIAlyZXR1cm4gcmV0OwogfQpAQCAtMTUyMSw3ICYjNDM7MTYzMyw3IEBAIHN0YXRpYyBsb25nIGh0YWJfbWFwX2RlbGV0ZV9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSkKIAlpZiAocmV0KQogCQlyZXR1cm4gcmV0OwogCi0JbCA9IGxvb2t1cF9lbGVtX3JhdyhoZWFkLCBoYXNoLCBrZXksIGtleV9zaXplKTsKJiM0MzsJbCA9IGxvb2t1cF9lbGVtX3JhdyhodGFiLCBoZWFkLCBoYXNoLCBrZXksIGtleV9zaXplKTsKIAlpZiAobCkKIAkJaGxpc3RfbnVsbHNfZGVsX3JjdSgmYW1wO2wtJmd0O2hhc2hfbm9kZSk7CiAJZWxzZQpAQCAtMTU1Niw3ICYjNDM7MTY2OCw3IEBAIHN0YXRpYyBsb25nIGh0YWJfbHJ1X21hcF9kZWxldGVfZWxlbShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXkpCiAJaWYgKHJldCkKIAkJcmV0dXJuIHJldDsKIAotCWwgPSBsb29rdXBfZWxlbV9yYXcoaGVhZCwgaGFzaCwga2V5LCBrZXlfc2l6ZSk7CiYjNDM7CWwgPSBsb29rdXBfZWxlbV9yYXcoaHRhYiwgaGVhZCwgaGFzaCwga2V5LCBrZXlfc2l6ZSk7CiAKIAlpZiAobCkKIAkJaGxpc3RfbnVsbHNfZGVsX3JjdSgmYW1wO2wtJmd0O2hhc2hfbm9kZSk7CkBAIC0xNjAyLDcgJiM0MzsxNzE0LDcgQEAgc3RhdGljIHZvaWQgaHRhYl9mcmVlX21hbGxvY2VkX2ludGVybmFsX3N0cnVjdHMoc3RydWN0IGJwZl9odGFiICpodGFiKQogCQlobGlzdF9udWxsc19mb3JfZWFjaF9lbnRyeShsLCBuLCBoZWFkLCBoYXNoX25vZGUpIHsKIAkJCS8qIFdlIG9ubHkgZnJlZSBpbnRlcm5hbCBzdHJ1Y3RzIG9uIHVyZWYgZHJvcHBpbmcgdG8gemVybyAqLwogCQkJYnBmX21hcF9mcmVlX2ludGVybmFsX3N0cnVjdHMoJmFtcDtodGFiLSZndDttYXAsCi0JCQkJCQkgICAgICBodGFiX2VsZW1fdmFsdWUobCwgaHRhYi0mZ3Q7bWFwLmtleV9zaXplKSk7CiYjNDM7CQkJCQkJICAgICAgaHRhYl9lbGVtX3ZhbHVlKGh0YWIsIGwpKTsKIAkJfQogCQljb25kX3Jlc2NoZWRfcmN1KCk7CiAJfQpAQCAtMTY5Nyw3ICYjNDM7MTgwOSw3IEBAIHN0YXRpYyBpbnQgX19odGFiX21hcF9sb29rdXBfYW5kX2RlbGV0ZV9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSwKIAlpZiAocmV0KQogCQlyZXR1cm4gcmV0OwogCi0JbCA9IGxvb2t1cF9lbGVtX3JhdyhoZWFkLCBoYXNoLCBrZXksIGtleV9zaXplKTsKJiM0MzsJbCA9IGxvb2t1cF9lbGVtX3JhdyhodGFiLCBoZWFkLCBoYXNoLCBrZXksIGtleV9zaXplKTsKIAlpZiAoIWwpIHsKIAkJcmV0ID0gLUVOT0VOVDsKIAkJZ290byBvdXRfdW5sb2NrOwpAQCAtMTcwOCwxNCAmIzQzOzE4MjAsMTQgQEAgc3RhdGljIGludCBfX2h0YWJfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2VsZW0oc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5LAogCQl2b2lkIF9fcGVyY3B1ICpwcHRyOwogCQlpbnQgb2ZmID0gMCwgY3B1OwogCi0JCXBwdHIgPSBodGFiX2VsZW1fZ2V0X3B0cihsLCBrZXlfc2l6ZSk7CiYjNDM7CQlwcHRyID0gaHRhYl9lbGVtX2dldF9wdHIoaHRhYiwgbCk7CiAJCWZvcl9lYWNoX3Bvc3NpYmxlX2NwdShjcHUpIHsKIAkJCWNvcHlfbWFwX3ZhbHVlX2xvbmcoJmFtcDtodGFiLSZndDttYXAsIHZhbHVlICYjNDM7IG9mZiwgcGVyX2NwdV9wdHIocHB0ciwgY3B1KSk7CiAJCQljaGVja19hbmRfaW5pdF9tYXBfdmFsdWUoJmFtcDtodGFiLSZndDttYXAsIHZhbHVlICYjNDM7IG9mZik7CiAJCQlvZmYgJiM0Mzs9IHJvdW5kdXBfdmFsdWVfc2l6ZTsKIAkJfQogCX0gZWxzZSB7Ci0JCXZvaWQgKnNyYyA9IGh0YWJfZWxlbV92YWx1ZShsLCBtYXAtJmd0O2tleV9zaXplKTsKJiM0MzsJCXZvaWQgKnNyYyA9IGh0YWJfZWxlbV92YWx1ZShodGFiLCBsKTsKIAogCQlpZiAoZmxhZ3MgJmFtcDsgQlBGX0ZfTE9DSykKIAkJCWNvcHlfbWFwX3ZhbHVlX2xvY2tlZChtYXAsIHZhbHVlLCBzcmMsIHRydWUpOwpAQCAtMTg5OCwxMyAmIzQzOzIwMTAsMTMgQEAgX19odGFiX21hcF9sb29rdXBfYW5kX2RlbGV0ZV9iYXRjaChzdHJ1Y3QgYnBmX21hcCAqbWFwLAogCQlnb3RvIG5leHRfYmF0Y2g7CiAKIAlobGlzdF9udWxsc19mb3JfZWFjaF9lbnRyeV9zYWZlKGwsIG4sIGhlYWQsIGhhc2hfbm9kZSkgewotCQltZW1jcHkoZHN0X2tleSwgbC0mZ3Q7a2V5LCBrZXlfc2l6ZSk7CiYjNDM7CQltZW1jcHkoZHN0X2tleSwgaHRhYl9lbGVtX2tleShodGFiLCBsKSwga2V5X3NpemUpOwogCiAJCWlmIChpc19wZXJjcHUpIHsKIAkJCWludCBvZmYgPSAwLCBjcHU7CiAJCQl2b2lkIF9fcGVyY3B1ICpwcHRyOwogCi0JCQlwcHRyID0gaHRhYl9lbGVtX2dldF9wdHIobCwgbWFwLSZndDtrZXlfc2l6ZSk7CiYjNDM7CQkJcHB0ciA9IGh0YWJfZWxlbV9nZXRfcHRyKGh0YWIsIGwpOwogCQkJaWYgKGVsZW1fbWFwX2ZsYWdzICZhbXA7IEJQRl9GX0NQVSkgewogCQkJCWNwdSA9IGVsZW1fbWFwX2ZsYWdzICZndDsmZ3Q7IDMyOwogCQkJCWNvcHlfbWFwX3ZhbHVlKCZhbXA7aHRhYi0mZ3Q7bWFwLCBkc3RfdmFsLCBwZXJfY3B1X3B0cihwcHRyLCBjcHUpKTsKQEAgLTE5MTgsNyAmIzQzOzIwMzAsNyBAQCBfX2h0YWJfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2JhdGNoKHN0cnVjdCBicGZfbWFwICptYXAsCiAJCQkJfQogCQkJfQogCQl9IGVsc2UgewotCQkJdmFsdWUgPSBodGFiX2VsZW1fdmFsdWUobCwga2V5X3NpemUpOwomIzQzOwkJCXZhbHVlID0gaHRhYl9lbGVtX3ZhbHVlKGh0YWIsIGwpOwogCQkJaWYgKGlzX2ZkX2h0YWIoaHRhYikpIHsKIAkJCQlzdHJ1Y3QgYnBmX21hcCAqKmlubmVyX21hcCA9IHZhbHVlOwogCkBAIC0yMTgzLDEyICYjNDM7MjI5NSwxMiBAQCBzdGF0aWMgaW50IF9fYnBmX2hhc2hfbWFwX3NlcV9zaG93KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCBzdHJ1Y3QgaHRhYl9lbGVtICplbGVtKQogCQljdHgubWV0YSA9ICZhbXA7bWV0YTsKIAkJY3R4Lm1hcCA9IGluZm8tJmd0O21hcDsKIAkJaWYgKGVsZW0pIHsKLQkJCWN0eC5rZXkgPSBlbGVtLSZndDtrZXk7CiYjNDM7CQkJY3R4LmtleSA9IGh0YWJfZWxlbV9rZXkoaW5mby0mZ3Q7aHRhYiwgZWxlbSk7CiAJCQlpZiAoIWluZm8tJmd0O3BlcmNwdV92YWx1ZV9idWYpIHsKLQkJCQljdHgudmFsdWUgPSBodGFiX2VsZW1fdmFsdWUoZWxlbSwgbWFwLSZndDtrZXlfc2l6ZSk7CiYjNDM7CQkJCWN0eC52YWx1ZSA9IGh0YWJfZWxlbV92YWx1ZShpbmZvLSZndDtodGFiLCBlbGVtKTsKIAkJCX0gZWxzZSB7CiAJCQkJcm91bmR1cF92YWx1ZV9zaXplID0gcm91bmRfdXAobWFwLSZndDt2YWx1ZV9zaXplLCA4KTsKLQkJCQlwcHRyID0gaHRhYl9lbGVtX2dldF9wdHIoZWxlbSwgbWFwLSZndDtrZXlfc2l6ZSk7CiYjNDM7CQkJCXBwdHIgPSBodGFiX2VsZW1fZ2V0X3B0cihpbmZvLSZndDtodGFiLCBlbGVtKTsKIAkJCQlmb3JfZWFjaF9wb3NzaWJsZV9jcHUoY3B1KSB7CiAJCQkJCWNvcHlfbWFwX3ZhbHVlX2xvbmcobWFwLCBpbmZvLSZndDtwZXJjcHVfdmFsdWVfYnVmICYjNDM7IG9mZiwKIAkJCQkJCQkgICAgcGVyX2NwdV9wdHIocHB0ciwgY3B1KSk7CkBAIC0yMjkzLDEzICYjNDM7MjQwNSwxMyBAQCBzdGF0aWMgbG9uZyBicGZfZm9yX2VhY2hfaGFzaF9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIGJwZl9jYWxsYmFja190IGNhbGxiYWNrXwogCQlyY3VfcmVhZF9sb2NrKCk7CiAJCWhlYWQgPSAmYW1wO2ItJmd0O2hlYWQ7CiAJCWhsaXN0X251bGxzX2Zvcl9lYWNoX2VudHJ5X3NhZmUoZWxlbSwgbiwgaGVhZCwgaGFzaF9ub2RlKSB7Ci0JCQlrZXkgPSBlbGVtLSZndDtrZXk7CiYjNDM7CQkJa2V5ID0gaHRhYl9lbGVtX2tleShodGFiLCBlbGVtKTsKIAkJCWlmIChpc19wZXJjcHUpIHsKIAkJCQkvKiBjdXJyZW50IGNwdSB2YWx1ZSBmb3IgcGVyY3B1IG1hcCAqLwotCQkJCXBwdHIgPSBodGFiX2VsZW1fZ2V0X3B0cihlbGVtLCBtYXAtJmd0O2tleV9zaXplKTsKJiM0MzsJCQkJcHB0ciA9IGh0YWJfZWxlbV9nZXRfcHRyKGh0YWIsIGVsZW0pOwogCQkJCXZhbCA9IHRoaXNfY3B1X3B0cihwcHRyKTsKIAkJCX0gZWxzZSB7Ci0JCQkJdmFsID0gaHRhYl9lbGVtX3ZhbHVlKGVsZW0sIG1hcC0mZ3Q7a2V5X3NpemUpOwomIzQzOwkJCQl2YWwgPSBodGFiX2VsZW1fdmFsdWUoaHRhYiwgZWxlbSk7CiAJCQl9CiAJCQludW1fZWxlbXMmIzQzOyYjNDM7OwogCQkJcmV0ID0gY2FsbGJhY2tfZm4oKHU2NCkobG9uZyltYXAsICh1NjQpKGxvbmcpa2V5LApAQCAtMjQwMywxMCAmIzQzOzI1MTUsMTEgQEAgY29uc3Qgc3RydWN0IGJwZl9tYXBfb3BzIGh0YWJfbHJ1X21hcF9vcHMgPSB7CiAvKiBDYWxsZWQgZnJvbSBlQlBGIHByb2dyYW0gKi8KIHN0YXRpYyB2b2lkICpodGFiX3BlcmNwdV9tYXBfbG9va3VwX2VsZW0oc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5KQogewomIzQzOwlzdHJ1Y3QgYnBmX2h0YWIgKmh0YWIgPSBjb250YWluZXJfb2YobWFwLCBzdHJ1Y3QgYnBmX2h0YWIsIG1hcCk7CiAJc3RydWN0IGh0YWJfZWxlbSAqbCA9IF9faHRhYl9tYXBfbG9va3VwX2VsZW0obWFwLCBrZXkpOwogCiAJaWYgKGwpCi0JCXJldHVybiB0aGlzX2NwdV9wdHIoaHRhYl9lbGVtX2dldF9wdHIobCwgbWFwLSZndDtrZXlfc2l6ZSkpOwomIzQzOwkJcmV0dXJuIHRoaXNfY3B1X3B0cihodGFiX2VsZW1fZ2V0X3B0cihodGFiLCBsKSk7CiAJZWxzZQogCQlyZXR1cm4gTlVMTDsKIH0KQEAgLTI0MTQsNiAmIzQzOzI1MjcsNyBAQCBzdGF0aWMgdm9pZCAqaHRhYl9wZXJjcHVfbWFwX2xvb2t1cF9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSkKIC8qIGlubGluZSBicGZfbWFwX2xvb2t1cF9lbGVtKCkgY2FsbCBmb3IgcGVyLUNQVSBoYXNobWFwICovCiBzdGF0aWMgaW50IGh0YWJfcGVyY3B1X21hcF9nZW5fbG9va3VwKHN0cnVjdCBicGZfbWFwICptYXAsIHN0cnVjdCBicGZfaW5zbiAqaW5zbl9idWYpCiB7CiYjNDM7CXN0cnVjdCBicGZfaHRhYiAqaHRhYiA9IGNvbnRhaW5lcl9vZihtYXAsIHN0cnVjdCBicGZfaHRhYiwgbWFwKTsKIAlzdHJ1Y3QgYnBmX2luc24gKmluc24gPSBpbnNuX2J1ZjsKIAogCWlmICghYnBmX2ppdF9zdXBwb3J0c19wZXJjcHVfaW5zbigpKQpAQCAtMjQyNCw3ICYjNDM7MjUzOCw3IEBAIHN0YXRpYyBpbnQgaHRhYl9wZXJjcHVfbWFwX2dlbl9sb29rdXAoc3RydWN0IGJwZl9tYXAgKm1hcCwgc3RydWN0IGJwZl9pbnNuICppbnNuCiAJKmluc24mIzQzOyYjNDM7ID0gQlBGX0VNSVRfQ0FMTChfX2h0YWJfbWFwX2xvb2t1cF9lbGVtKTsKIAkqaW5zbiYjNDM7JiM0MzsgPSBCUEZfSk1QX0lNTShCUEZfSkVRLCBCUEZfUkVHXzAsIDAsIDMpOwogCSppbnNuJiM0MzsmIzQzOyA9IEJQRl9BTFU2NF9JTU0oQlBGX0FERCwgQlBGX1JFR18wLAotCQkJCW9mZnNldG9mKHN0cnVjdCBodGFiX2VsZW0sIGtleSkgJiM0Mzsgcm91bmR1cChtYXAtJmd0O2tleV9zaXplLCA4KSk7CiYjNDM7CQkJCWh0YWItJmd0O2tleV9vZmZzZXQgJiM0Mzsgcm91bmR1cChtYXAtJmd0O2tleV9zaXplLCA4KSk7CiAJKmluc24mIzQzOyYjNDM7ID0gQlBGX0xEWF9NRU0oQlBGX0RXLCBCUEZfUkVHXzAsIEJQRl9SRUdfMCwgMCk7CiAJKmluc24mIzQzOyYjNDM7ID0gQlBGX01PVjY0X1BFUkNQVV9SRUcoQlBGX1JFR18wLCBCUEZfUkVHXzApOwogCkBAIC0yNDMzLDYgJiM0MzsyNTQ3LDcgQEAgc3RhdGljIGludCBodGFiX3BlcmNwdV9tYXBfZ2VuX2xvb2t1cChzdHJ1Y3QgYnBmX21hcCAqbWFwLCBzdHJ1Y3QgYnBmX2luc24gKmluc24KIAogc3RhdGljIHZvaWQgKmh0YWJfcGVyY3B1X21hcF9sb29rdXBfcGVyY3B1X2VsZW0oc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5LCB1MzIgY3B1KQogewomIzQzOwlzdHJ1Y3QgYnBmX2h0YWIgKmh0YWIgPSBjb250YWluZXJfb2YobWFwLCBzdHJ1Y3QgYnBmX2h0YWIsIG1hcCk7CiAJc3RydWN0IGh0YWJfZWxlbSAqbDsKIAogCWlmIChjcHUgJmd0Oz0gbnJfY3B1X2lkcykKQEAgLTI0NDAsMTggJiM0MzsyNTU1LDE5IEBAIHN0YXRpYyB2b2lkICpodGFiX3BlcmNwdV9tYXBfbG9va3VwX3BlcmNwdV9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSwKIAogCWwgPSBfX2h0YWJfbWFwX2xvb2t1cF9lbGVtKG1hcCwga2V5KTsKIAlpZiAobCkKLQkJcmV0dXJuIHBlcl9jcHVfcHRyKGh0YWJfZWxlbV9nZXRfcHRyKGwsIG1hcC0mZ3Q7a2V5X3NpemUpLCBjcHUpOwomIzQzOwkJcmV0dXJuIHBlcl9jcHVfcHRyKGh0YWJfZWxlbV9nZXRfcHRyKGh0YWIsIGwpLCBjcHUpOwogCWVsc2UKIAkJcmV0dXJuIE5VTEw7CiB9CiAKIHN0YXRpYyB2b2lkICpodGFiX2xydV9wZXJjcHVfbWFwX2xvb2t1cF9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSkKIHsKJiM0MzsJc3RydWN0IGJwZl9odGFiICpodGFiID0gY29udGFpbmVyX29mKG1hcCwgc3RydWN0IGJwZl9odGFiLCBtYXApOwogCXN0cnVjdCBodGFiX2VsZW0gKmwgPSBfX2h0YWJfbWFwX2xvb2t1cF9lbGVtKG1hcCwga2V5KTsKIAogCWlmIChsKSB7Ci0JCWJwZl9scnVfbm9kZV9zZXRfcmVmKCZhbXA7bC0mZ3Q7bHJ1X25vZGUpOwotCQlyZXR1cm4gdGhpc19jcHVfcHRyKGh0YWJfZWxlbV9nZXRfcHRyKGwsIG1hcC0mZ3Q7a2V5X3NpemUpKTsKJiM0MzsJCWJwZl9scnVfbm9kZV9zZXRfcmVmKGh0YWJfZWxlbV9scnVfbm9kZShsKSk7CiYjNDM7CQlyZXR1cm4gdGhpc19jcHVfcHRyKGh0YWJfZWxlbV9nZXRfcHRyKGh0YWIsIGwpKTsKIAl9CiAKIAlyZXR1cm4gTlVMTDsKQEAgLTI0NTksNiAmIzQzOzI1NzUsNyBAQCBzdGF0aWMgdm9pZCAqaHRhYl9scnVfcGVyY3B1X21hcF9sb29rdXBfZWxlbShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXkpCiAKIHN0YXRpYyB2b2lkICpodGFiX2xydV9wZXJjcHVfbWFwX2xvb2t1cF9wZXJjcHVfZWxlbShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXksIHUzMiBjcHUpCiB7CiYjNDM7CXN0cnVjdCBicGZfaHRhYiAqaHRhYiA9IGNvbnRhaW5lcl9vZihtYXAsIHN0cnVjdCBicGZfaHRhYiwgbWFwKTsKIAlzdHJ1Y3QgaHRhYl9lbGVtICpsOwogCiAJaWYgKGNwdSAmZ3Q7PSBucl9jcHVfaWRzKQpAQCAtMjQ2Niw4ICYjNDM7MjU4Myw4IEBAIHN0YXRpYyB2b2lkICpodGFiX2xydV9wZXJjcHVfbWFwX2xvb2t1cF9wZXJjcHVfZWxlbShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprCiAKIAlsID0gX19odGFiX21hcF9sb29rdXBfZWxlbShtYXAsIGtleSk7CiAJaWYgKGwpIHsKLQkJYnBmX2xydV9ub2RlX3NldF9yZWYoJmFtcDtsLSZndDtscnVfbm9kZSk7Ci0JCXJldHVybiBwZXJfY3B1X3B0cihodGFiX2VsZW1fZ2V0X3B0cihsLCBtYXAtJmd0O2tleV9zaXplKSwgY3B1KTsKJiM0MzsJCWJwZl9scnVfbm9kZV9zZXRfcmVmKGh0YWJfZWxlbV9scnVfbm9kZShsKSk7CiYjNDM7CQlyZXR1cm4gcGVyX2NwdV9wdHIoaHRhYl9lbGVtX2dldF9wdHIoaHRhYiwgbCksIGNwdSk7CiAJfQogCiAJcmV0dXJuIE5VTEw7CkBAIC0yNDc1LDYgJiM0MzsyNTkyLDcgQEAgc3RhdGljIHZvaWQgKmh0YWJfbHJ1X3BlcmNwdV9tYXBfbG9va3VwX3BlcmNwdV9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmsKIAogaW50IGJwZl9wZXJjcHVfaGFzaF9jb3B5KHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSwgdm9pZCAqdmFsdWUsIHU2NCBtYXBfZmxhZ3MpCiB7CiYjNDM7CXN0cnVjdCBicGZfaHRhYiAqaHRhYiA9IGNvbnRhaW5lcl9vZihtYXAsIHN0cnVjdCBicGZfaHRhYiwgbWFwKTsKIAlzdHJ1Y3QgaHRhYl9lbGVtICpsOwogCXZvaWQgX19wZXJjcHUgKnBwdHI7CiAJaW50IHJldCA9IC1FTk9FTlQ7CkBAIC0yNDk0LDcgJiM0MzsyNjEyLDcgQEAgaW50IGJwZl9wZXJjcHVfaGFzaF9jb3B5KHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSwgdm9pZCAqdmFsdWUsIHU2NCBtYXBfZmwKIAkvKiBXZSBkbyBub3QgbWFyayBMUlUgbWFwIGVsZW1lbnQgaGVyZSBpbiBvcmRlciB0byBub3QgbWVzcyB1cAogCSAqIGV2aWN0aW9uIGhldXJpc3RpY3Mgd2hlbiB1c2VyIHNwYWNlIGRvZXMgYSBtYXAgd2Fsay4KIAkgKi8KLQlwcHRyID0gaHRhYl9lbGVtX2dldF9wdHIobCwgbWFwLSZndDtrZXlfc2l6ZSk7CiYjNDM7CXBwdHIgPSBodGFiX2VsZW1fZ2V0X3B0cihodGFiLCBsKTsKIAlpZiAobWFwX2ZsYWdzICZhbXA7IEJQRl9GX0NQVSkgewogCQljcHUgPSBtYXBfZmxhZ3MgJmd0OyZndDsgMzI7CiAJCWNvcHlfbWFwX3ZhbHVlKG1hcCwgdmFsdWUsIHBlcl9jcHVfcHRyKHBwdHIsIGNwdSkpOwpAQCAtMjUzMiw2ICYjNDM7MjY1MCw3IEBAIGludCBicGZfcGVyY3B1X2hhc2hfdXBkYXRlKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSwgdm9pZCAqdmFsdWUsCiBzdGF0aWMgdm9pZCBodGFiX3BlcmNwdV9tYXBfc2VxX3Nob3dfZWxlbShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXksCiAJCQkJCSAgc3RydWN0IHNlcV9maWxlICptKQogewomIzQzOwlzdHJ1Y3QgYnBmX2h0YWIgKmh0YWIgPSBjb250YWluZXJfb2YobWFwLCBzdHJ1Y3QgYnBmX2h0YWIsIG1hcCk7CiAJc3RydWN0IGh0YWJfZWxlbSAqbDsKIAl2b2lkIF9fcGVyY3B1ICpwcHRyOwogCWludCBjcHU7CkBAIC0yNTQ2LDcgJiM0MzsyNjY1LDcgQEAgc3RhdGljIHZvaWQgaHRhYl9wZXJjcHVfbWFwX3NlcV9zaG93X2VsZW0oc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5LAogCiAJYnRmX3R5cGVfc2VxX3Nob3cobWFwLSZndDtidGYsIG1hcC0mZ3Q7YnRmX2tleV90eXBlX2lkLCBrZXksIG0pOwogCXNlcV9wdXRzKG0sICYjMzQ7OiB7XG4mIzM0Oyk7Ci0JcHB0ciA9IGh0YWJfZWxlbV9nZXRfcHRyKGwsIG1hcC0mZ3Q7a2V5X3NpemUpOwomIzQzOwlwcHRyID0gaHRhYl9lbGVtX2dldF9wdHIoaHRhYiwgbCk7CiAJZm9yX2VhY2hfcG9zc2libGVfY3B1KGNwdSkgewogCQlzZXFfcHJpbnRmKG0sICYjMzQ7XHRjcHUlZDogJiMzNDssIGNwdSk7CiAJCWJ0Zl90eXBlX3NlcV9zaG93KG1hcC0mZ3Q7YnRmLCBtYXAtJmd0O2J0Zl92YWx1ZV90eXBlX2lkLApAQCAtMjYyMCw3ICYjNDM7MjczOSw3IEBAIHN0YXRpYyB2b2lkIGZkX2h0YWJfbWFwX2ZyZWUoc3RydWN0IGJwZl9tYXAgKm1hcCkKIAkJaGVhZCA9IHNlbGVjdF9idWNrZXQoaHRhYiwgaSk7CiAKIAkJaGxpc3RfbnVsbHNfZm9yX2VhY2hfZW50cnlfc2FmZShsLCBuLCBoZWFkLCBoYXNoX25vZGUpIHsKLQkJCXZvaWQgKnB0ciA9IGZkX2h0YWJfbWFwX2dldF9wdHIobWFwLCBsKTsKJiM0MzsJCQl2b2lkICpwdHIgPSBmZF9odGFiX21hcF9nZXRfcHRyKGh0YWIsIGwpOwogCiAJCQltYXAtJmd0O29wcy0mZ3Q7bWFwX2ZkX3B1dF9wdHIobWFwLCBwdHIsIGZhbHNlKTsKIAkJfQpAQCAtMjcwNSw2ICYjNDM7MjgyNCw3IEBAIHN0YXRpYyB2b2lkICpodGFiX29mX21hcF9sb29rdXBfZWxlbShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXkpCiBzdGF0aWMgaW50IGh0YWJfb2ZfbWFwX2dlbl9sb29rdXAoc3RydWN0IGJwZl9tYXAgKm1hcCwKIAkJCQkgIHN0cnVjdCBicGZfaW5zbiAqaW5zbl9idWYpCiB7CiYjNDM7CXN0cnVjdCBicGZfaHRhYiAqaHRhYiA9IGNvbnRhaW5lcl9vZihtYXAsIHN0cnVjdCBicGZfaHRhYiwgbWFwKTsKIAlzdHJ1Y3QgYnBmX2luc24gKmluc24gPSBpbnNuX2J1ZjsKIAljb25zdCBpbnQgcmV0ID0gQlBGX1JFR18wOwogCkBAIC0yNzEzLDcgJiM0MzsyODMzLDcgQEAgc3RhdGljIGludCBodGFiX29mX21hcF9nZW5fbG9va3VwKHN0cnVjdCBicGZfbWFwICptYXAsCiAJKmluc24mIzQzOyYjNDM7ID0gQlBGX0VNSVRfQ0FMTChfX2h0YWJfbWFwX2xvb2t1cF9lbGVtKTsKIAkqaW5zbiYjNDM7JiM0MzsgPSBCUEZfSk1QX0lNTShCUEZfSkVRLCByZXQsIDAsIDIpOwogCSppbnNuJiM0MzsmIzQzOyA9IEJQRl9BTFU2NF9JTU0oQlBGX0FERCwgcmV0LAotCQkJCW9mZnNldG9mKHN0cnVjdCBodGFiX2VsZW0sIGtleSkgJiM0MzsKJiM0MzsJCQkJaHRhYi0mZ3Q7a2V5X29mZnNldCAmIzQzOwogCQkJCXJvdW5kX3VwKG1hcC0mZ3Q7a2V5X3NpemUsIDgpKTsKIAkqaW5zbiYjNDM7JiM0MzsgPSBCUEZfTERYX01FTShCUEZfRFcsIHJldCwgcmV0LCAwKTsKIApAQCAtMzExMiw3ICYjNDM7MzIzMiw3IEBAIHN0YXRpYyBpbnQgcmh0YWJfbWFwX2NoZWNrX2J0ZihzdHJ1Y3QgYnBmX21hcCAqbWFwLCBjb25zdCBzdHJ1Y3QgYnRmICpidGYsCiB7CiAJc3RydWN0IGJwZl9yaHRhYiAqcmh0YWIgPSBjb250YWluZXJfb2YobWFwLCBzdHJ1Y3QgYnBmX3JodGFiLCBtYXApOwogCi0JcmV0dXJuIGJwZl9tYV9zZXRfZHRvcihtYXAsICZhbXA7cmh0YWItJmd0O21hLCByaHRhYl9tZW1fZHRvcik7CiYjNDM7CXJldHVybiBicGZfbWFfc2V0X2R0b3IobWFwLCAmYW1wO3JodGFiLSZndDttYSwgcmh0YWJfbWVtX2R0b3IsIG9mZnNldG9mKHN0cnVjdCByaHRhYl9lbGVtLCBkYXRhKSk7CiB9CiAKIHN0YXRpYyB2b2lkIHJodGFiX21hcF9mcmVlX2ludGVybmFsX3N0cnVjdHMoc3RydWN0IGJwZl9tYXAgKm1hcCkKQEAgLTM1MzMsMyAmIzQzOzM2NTMsMTYgQEAgY29uc3Qgc3RydWN0IGJwZl9tYXBfb3BzIHJodGFiX21hcF9vcHMgPSB7CiAJLm1hcF9idGZfaWQgPSAmYW1wO3JodGFiX21hcF9idGZfaWRzWzBdLAogCS5pdGVyX3NlcV9pbmZvID0gJmFtcDtyaGFzaF9pdGVyX3NlcV9pbmZvLAogfTsKJiM0MzsKJiM0MztzaXplX3QgYnBmX2h0YWJfbWFwX21ldGFfc2l6ZSh2b2lkKQomIzQzO3sKJiM0MzsJcmV0dXJuIHNpemVvZihzdHJ1Y3QgYnBmX2h0YWIpOwomIzQzO30KJiM0MzsKJiM0Mzt2b2lkIGJwZl9odGFiX21hcF9tZXRhX2luaXQoc3RydWN0IGJwZl9tYXAgKmlubmVyX21hcF9tZXRhLCBzdHJ1Y3QgYnBmX21hcCAqaW5uZXJfbWFwKQomIzQzO3sKJiM0MzsJc3RydWN0IGJwZl9odGFiICppbm5lcl9odGFiX21ldGEgPSBjb250YWluZXJfb2YoaW5uZXJfbWFwX21ldGEsIHN0cnVjdCBicGZfaHRhYiwgbWFwKTsKJiM0MzsJc3RydWN0IGJwZl9odGFiICppbm5lcl9odGFiID0gY29udGFpbmVyX29mKGlubmVyX21hcCwgc3RydWN0IGJwZl9odGFiLCBtYXApOwomIzQzOwomIzQzOwlpbm5lcl9odGFiX21ldGEtJmd0O2tleV9vZmZzZXQgPSBpbm5lcl9odGFiLSZndDtrZXlfb2Zmc2V0OwomIzQzO30KZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvbWFwX2luX21hcC5jIGIva2VybmVsL2JwZi9tYXBfaW5fbWFwLmMKaW5kZXggZDJjYmFiNGJkZjY0NGEuLmIyZGI1ZDBjOThiZWUyIDEwMDY0NAotLS0gYS9rZXJuZWwvYnBmL21hcF9pbl9tYXAuYwomIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvYnBmL21hcF9pbl9tYXAuYwpAQCAtNyw2ICYjNDM7NywxNSBAQAogCiAjaW5jbHVkZSAmIzM0O21hcF9pbl9tYXAuaCYjMzQ7CiAKJiM0MztzdGF0aWMgYm9vbCBicGZfbWFwX3R5cGVfaXNfaHRhYihlbnVtIGJwZl9tYXBfdHlwZSB0eXBlKQomIzQzO3sKJiM0MzsJcmV0dXJuIHR5cGUgPT0gQlBGX01BUF9UWVBFX0hBU0ggfHwKJiM0MzsJICAgICAgIHR5cGUgPT0gQlBGX01BUF9UWVBFX1BFUkNQVV9IQVNIIHx8CiYjNDM7CSAgICAgICB0eXBlID09IEJQRl9NQVBfVFlQRV9MUlVfSEFTSCB8fAomIzQzOwkgICAgICAgdHlwZSA9PSBCUEZfTUFQX1RZUEVfTFJVX1BFUkNQVV9IQVNIIHx8CiYjNDM7CSAgICAgICB0eXBlID09IEJQRl9NQVBfVFlQRV9IQVNIX09GX01BUFM7CiYjNDM7fQomIzQzOwogc3RydWN0IGJwZl9tYXAgKmJwZl9tYXBfbWV0YV9hbGxvYyhpbnQgaW5uZXJfbWFwX3VmZCkKIHsKIAlzdHJ1Y3QgYnBmX21hcCAqaW5uZXJfbWFwLCAqaW5uZXJfbWFwX21ldGE7CkBAIC0yOSw2ICYjNDM7MzgsOCBAQCBzdHJ1Y3QgYnBmX21hcCAqYnBmX21hcF9tZXRhX2FsbG9jKGludCBpbm5lcl9tYXBfdWZkKQogCS8qIEluIHNvbWUgY2FzZXMgdmVyaWZpZXIgbmVlZHMgdG8gYWNjZXNzIGJleW9uZCBqdXN0IGJhc2UgbWFwLiAqLwogCWlmIChpbm5lcl9tYXAtJmd0O29wcyA9PSAmYW1wO2FycmF5X21hcF9vcHMgfHwgaW5uZXJfbWFwLSZndDtvcHMgPT0gJmFtcDtwZXJjcHVfYXJyYXlfbWFwX29wcykKIAkJaW5uZXJfbWFwX21ldGFfc2l6ZSA9IHNpemVvZihzdHJ1Y3QgYnBmX2FycmF5KTsKJiM0MzsJZWxzZSBpZiAoYnBmX21hcF90eXBlX2lzX2h0YWIoaW5uZXJfbWFwLSZndDttYXBfdHlwZSkpCiYjNDM7CQlpbm5lcl9tYXBfbWV0YV9zaXplID0gYnBmX2h0YWJfbWFwX21ldGFfc2l6ZSgpOwogCiAJaW5uZXJfbWFwX21ldGEgPSBremFsbG9jKGlubmVyX21hcF9tZXRhX3NpemUsIEdGUF9VU0VSKTsKIAlpZiAoIWlubmVyX21hcF9tZXRhKQpAQCAtNzAsNiAmIzQzOzgxLDggQEAgc3RydWN0IGJwZl9tYXAgKmJwZl9tYXBfbWV0YV9hbGxvYyhpbnQgaW5uZXJfbWFwX3VmZCkKIAkJaW5uZXJfYXJyYXlfbWV0YS0mZ3Q7aW5kZXhfbWFzayA9IGlubmVyX2FycmF5LSZndDtpbmRleF9tYXNrOwogCQlpbm5lcl9hcnJheV9tZXRhLSZndDtlbGVtX3NpemUgPSBpbm5lcl9hcnJheS0mZ3Q7ZWxlbV9zaXplOwogCQlpbm5lcl9tYXBfbWV0YS0mZ3Q7YnlwYXNzX3NwZWNfdjEgPSBpbm5lcl9tYXAtJmd0O2J5cGFzc19zcGVjX3YxOwomIzQzOwl9IGVsc2UgaWYgKGJwZl9tYXBfdHlwZV9pc19odGFiKGlubmVyX21hcC0mZ3Q7bWFwX3R5cGUpKSB7CiYjNDM7CQlicGZfaHRhYl9tYXBfbWV0YV9pbml0KGlubmVyX21hcF9tZXRhLCBpbm5lcl9tYXApOwogCX0KIAlyZXR1cm4gaW5uZXJfbWFwX21ldGE7CiB9CmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL21hcF9pbl9tYXAuaCBiL2tlcm5lbC9icGYvbWFwX2luX21hcC5oCmluZGV4IDdkNjE2MDIzNTRkZTgwLi4xZWRjMjA1NzcyZDhjZCAxMDA2NDQKLS0tIGEva2VybmVsL2JwZi9tYXBfaW5fbWFwLmgKJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2JwZi9tYXBfaW5fbWFwLmgKQEAgLTE1LDUgJiM0MzsxNSw3IEBAIHZvaWQgKmJwZl9tYXBfZmRfZ2V0X3B0cihzdHJ1Y3QgYnBmX21hcCAqbWFwLCBzdHJ1Y3QgZmlsZSAqbWFwX2ZpbGUsCiAJCQkgaW50IHVmZCk7CiB2b2lkIGJwZl9tYXBfZmRfcHV0X3B0cihzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICpwdHIsIGJvb2wgbmVlZF9kZWZlcik7CiB1MzIgYnBmX21hcF9mZF9zeXNfbG9va3VwX2VsZW0odm9pZCAqcHRyKTsKJiM0MztzaXplX3QgYnBmX2h0YWJfbWFwX21ldGFfc2l6ZSh2b2lkKTsKJiM0Mzt2b2lkIGJwZl9odGFiX21hcF9tZXRhX2luaXQoc3RydWN0IGJwZl9tYXAgKmlubmVyX21hcF9tZXRhLCBzdHJ1Y3QgYnBmX21hcCAqaW5uZXJfbWFwKTsKIAogI2VuZGlmCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvbWFwX3B0cl9rZXJuLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvbWFwX3B0cl9rZXJuLmMKaW5kZXggMzczYzhkMTdlYTU1N2QuLjZiZDRjYjY4YzIwYzFjIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvbWFwX3B0cl9rZXJuLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL21hcF9wdHJfa2Vybi5jCkBAIC0xMTQsNyAmIzQzOzExNCw3IEBAIHN0YXRpYyBpbmxpbmUgaW50IGNoZWNrX2hhc2godm9pZCkKIAlWRVJJRlkoY2hlY2tfZGVmYXVsdF9ub2lubGluZSgmYW1wO2hhc2gtJmd0O21hcCwgbWFwKSk7CiAKIAlWRVJJRlkoaGFzaC0mZ3Q7bl9idWNrZXRzID09IE1BWF9FTlRSSUVTKTsKLQlWRVJJRlkoaGFzaC0mZ3Q7ZWxlbV9zaXplID09IDY0KTsKJiM0MzsJVkVSSUZZKGhhc2gtJmd0O2VsZW1fc2l6ZSA9PSAzMik7CiAKIAlWRVJJRlkoaGFzaC0mZ3Q7Y291bnQuY291bnRlciA9PSAwKTsKIAlWRVJJRlkoYnBmX21hcF9zdW1fZWxlbV9jb3VudChtYXApID09IDApOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMyAyMjozODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODU3MgoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDU4MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEJQRiBIYXNoIFRhYmxlIE9wdGltaXphdGlvbiBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBnb3QgdGhpcyBwYXRjaCDigJMgc2VlbXMgbGlrZSBhIHByZXR0eSBzaWduaWZpY2FudCBvbmUg4oCTIHRvdWNoaW5nIGBrZXJuZWwvYnBmL2hhc2h0YWIuY2AgYW5kIGBrZXJuZWwvYnBmL21hcF9pbl9tYXAuY2AuIEZyb20gdGhlIGRlc2NyaXB0aW9uLCBpdCBsb29rcyBsaWtlIHRoZXkmIzM5O3JlIG9wdGltaXppbmcgdGhlIG1lbW9yeSBsYXlvdXQgb2YgQlBGIGhhc2ggdGFibGVzLCBzcGxpdHRpbmcgYHN0cnVjdCBodGFiX2VsZW1gIGludG8gbXVsdGlwbGUgc3BlY2lhbGl6ZWQgc3RydWN0dXJlcyAoYGh0YWJfZWxlbWAsIGBodGFiX2VsZW1fbHJ1YCwgYGh0YWJfZWxlbV9wY3B1YCkgYW5kIGFsc28gYWRkaW5nIGBrZXlfb2Zmc2V0YCB0byBgc3RydWN0IGJwZl9odGFiYC4gVGhpcyBpcyBhICpmdW5jdGlvbmFsKiBjaGFuZ2UgdG8gdGhlIGNvcmUgaGFzaCBtYXAgaW1wbGVtZW50YXRpb24sIGFuZCB0aGF0IGltbWVkaWF0ZWx5IHRlbGxzIG1lIHdlIG5lZWQgdG8gdHJlYXQgdGhpcyBhcyBoaWdoLXByaW9yaXR5IGZvciBmdXp6aW5nLiBJdCYjMzk7cyBhIHByaW1lIHRhcmdldCBmb3IgdW5jb3ZlcmluZyBzdWJ0bGUgbWVtb3J5IGNvcnJ1cHRpb24gb3IgY29uY3VycmVuY3kgaXNzdWVzLgoKTXkgaW1tZWRpYXRlIG5leHQgc3RlcCBpcyB0byBkcmlsbCBkb3duIGludG8gdGhlIGRldGFpbHMgb2YgdGhlIGNvZGUuIExldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyBiZWVuIGFkZGVkLCBtb2RpZmllZCwgb3IgY2hhbmdlZC4gSSYjMzk7bSBnb2luZyB0byBsb29rIGNsb3NlbHkgYXQgdGhlc2UgbmV3IG9yIGNoYW5nZWQgZnVuY3Rpb25zOiBgaHRhYl9lbGVtX2xydV9ub2RlYCwgYGh0YWJfZWxlbV9nZXRfcHRyX3RvX3BwdHJgLCBgaHRhYl9lbGVtX3NldF9wdHJfdG9fcHB0cmAsIGBodGFiX2VsZW1fa2V5YCwgYGh0YWJfZWxlbV92YWx1ZWAsIGBodGFiX2VsZW1fc2V0X3B0cmAsIGBodGFiX2VsZW1fZ2V0X3B0cmAsIGBmZF9odGFiX21hcF9nZXRfcHRyYCwgYGh0YWJfaGFzX2hhc2hgLCBgaHRhYl9lbGVtX2hhc2hgLCBgaHRhYl9lbGVtX3NldF9oYXNoYCwgYGh0YWJfbWFwX2FsbG9jX2NoZWNrYCwgYGh0YWJfbWFwX2FsbG9jYCwgYGh0YWJfbWFwX2dlbl9sb29rdXBgLCBgaHRhYl9scnVfbWFwX2dlbl9sb29rdXBgLCBgaHRhYl9tYXBfdXBkYXRlX2VsZW1gLCBgaHRhYl9scnVfbWFwX3VwZGF0ZV9lbGVtYCwgYF9faHRhYl9scnVfcGVyY3B1X21hcF91cGRhdGVfZWxlbWAsIGBodGFiX21hcF9kZWxldGVfZWxlbWAsIGBodGFiX2xydV9tYXBfZGVsZXRlX2VsZW1gLCBgX19odGFiX21hcF9sb29rdXBfYW5kX2RlbGV0ZV9lbGVtYCwgYF9faHRhYl9tYXBfbG9va3VwX2FuZF9kZWxldGVfYmF0Y2hgLCBgYnBmX3BlcmNwdV9oYXNoX2NvcHlgLCBgaHRhYl9vZl9tYXBfZ2VuX2xvb2t1cGAsIGBicGZfaHRhYl9tYXBfbWV0YV9zaXplYCwgYGJwZl9odGFiX21hcF9tZXRhX2luaXRgLCBhbmQgYGJwZl9tYXBfbWV0YV9hbGxvY2AuIEFueSBvbmUgb2YgdGhlc2UsIGlmIG1pc2hhbmRsZWQsIGNvdWxkIGhhdmUgc2lnbmlmaWNhbnQgc2VjdXJpdHkgaW1wbGljYXRpb25zLgoKTm93LCBsZXQmIzM5O3MgbmFpbCBkb3duIHRoZSBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcy4gYENPTkZJR19CUEZfU1lTQ0FMTGAgd2lsbCBiZSB0aGUgcHJpbWFyeSBlbmFibGVyIGZvciBCUEYsIG9mIGNvdXJzZS4gR2l2ZW4gdGhlIGZvY3VzIG9uIGhhc2ggbWFwcywgSSYjMzk7bSBnb2luZyB0byBxdWlja2x5IGNoZWNrIGlmIHRoZXJlIGFyZSBhbnkgc3BlY2lmaWMgY29uZmlndXJhdGlvbiBmbGFncyBmb3IgQlBGIGhhc2ggbWFwcyB0aGVtc2VsdmVzLiBObyBkZWRpY2F0ZWQgY29uZmlnIG9wdGlvbnMsIHdoaWNoIG1ha2VzIHNlbnNlIC0gdGhlIGhhc2ggdGFibGUgaW1wbGVtZW50YXRpb24gaXMgY29yZSBCUEYuCgpJIG5lZWQgdG8gY29uZmlybSB0aGVzZSBmdW5jdGlvbnMmIzM5OyBpbnRlcmFjdGlvbnMgd2l0aCB0aGUgZXhpc3RpbmcgQlBGIGhhc2ggbWFwIGluZnJhc3RydWN0dXJlLiBUaW1lIHRvIHNlYXJjaCB0aGUgc291cmNlIGZvciBgQlBGX01BUF9UWVBFX0hBU0hgIGFuZCBgQlBGX01BUF9UWVBFX0xSVV9IQVNIYCB3aXRoaW4gYGtlcm5lbC9icGYvaGFzaHRhYi5jYCB0byBzZWUgaG93IHRob3NlIG1hcCB0eXBlcyBhcmUgaW50ZWdyYXRlZCB3aXRoIHRoZSBuZXcgY29kZS4gVGhpcyB3aWxsIGhlbHAgdW5kZXJzdGFuZCB0aGUgYnJlYWR0aCBvZiBpbXBhY3Qgb2YgdGhpcyBjaGFuZ2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjMgMjI6Mzg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7QlBGX01BUF9UWVBFX0hBU0gmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvYnBmL2hhc2h0YWIuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL2hhc2h0YWIuYz0yMjU9c3RhdGljIGlubGluZSBib29sIGlzX2ZkX2h0YWIoY29uc3Qgc3RydWN0IGJwZl9odGFiICpodGFiKVxua2VybmVsL2JwZi9oYXNodGFiLmMtMjI2LXtcbmtlcm5lbC9icGYvaGFzaHRhYi5jOjIyNzpcdHJldHVybiBodGFiLVx1MDAzZW1hcC5tYXBfdHlwZSA9PSBCUEZfTUFQX1RZUEVfSEFTSF9PRl9NQVBTO1xua2VybmVsL2JwZi9oYXNodGFiLmMtMjI4LX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMyAyMjozODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDAyMQoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDQxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqSW52ZXN0aWdhdGluZyBQb3RlbnRpYWwgQlBGIENvbmZpZ3VyYXRpb24gTnVhbmNlcyoqCgpPa2F5LCBiZWZvcmUgSSBkaXZlIHRvbyBkZWVwIGludG8gdGhlIGltcGxpY2F0aW9ucyBoZXJlLCBJIG5lZWQgdG8gdGFrZSBhIHF1aWNrIHBlZWsgYXQgdGhlIEJQRiBpbnRlcm5hbHMuIFNwZWNpZmljYWxseSwgSSBzaG91bGQgY2hlY2sgYGtlcm5lbC9icGYvaGFzaHRhYi5jYCBhbmQgYGtlcm5lbC9icGYvbWFwX2luX21hcC5jYC4gVGhvc2UgZmlsZXMgYXJlIGxpa2VseSB0byBjb250YWluIHRoZSBjcnVjaWFsIGxvdy1sZXZlbCBkZXRhaWxzIHJlZ2FyZGluZyBwb3RlbnRpYWwgY29uZmlndXJhdGlvbnMgb3IgbGltaXRhdGlvbnMgdGhhdCBJIG5lZWQgdG8gYmUgYXdhcmUgb2YuIEkmIzM5O20gbG9va2luZyBmb3IgYW55IHNwZWNpZmljIGNvbmZpZ3VyYXRpb25zIHRoYXQgbWlnaHQgaW1wYWN0IHRoZSBiZWhhdmlvciBvciBwZXJmb3JtYW5jZSBJJiMzOTttIGNvbnNpZGVyaW5nLiBHb3R0YSBtYWtlIHN1cmUgSSYjMzk7bSBub3Qgb3Zlcmxvb2tpbmcgc29tZSBzdWJ0bGUgZGV0YWlsIGJ1cmllZCB3aXRoaW4gdGhvc2UgaW1wbGVtZW50YXRpb25zLiBUaGF0IGxldmVsIG9mIGRldGFpbCBpcyBjcml0aWNhbCBmb3IgZnVsbHkgdW5kZXJzdGFuZGluZyB0aGUgbGFuZHNjYXBlIGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjMgMjI6Mzg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtDT05GSUdfJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9oYXNodGFiLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIzIDIyOjM4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwMjY3CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgY29uc2lkZXJpbmcgdGhpcyBteXNlbGY6CgoqKkludmVzdGlnYXRpbmcgQ29uZmlndXJhdGlvbiBEZXBlbmRlbmNpZXMqKgoKT2theSwgaXQgc2VlbXMgdGhlcmUgYXJlIG5vIHNwZWNpZmljIGNvbmZpZ3VyYXRpb24gZGV0YWlscyBleHBsaWNpdGx5IGRlZmluZWQgd2l0aGluIGBoYXNodGFiLmNgLiBUaGF0JiMzOTtzIG5vdCBlbnRpcmVseSB1bmV4cGVjdGVkLCBkZXBlbmRpbmcgb24gdGhlIHN5c3RlbSBkZXNpZ24sIGJ1dCBzdGlsbCBnb29kIHRvIGNvbmZpcm0uIE5vdywgaWYgdGhlIGNvbmZpZ3VyYXRpb24gaXNuJiMzOTt0IGluIHRoZSBvYnZpb3VzIHBsYWNlLCB3aGVyZSBlbHNlIGNvdWxkIGl0IGJlPyBUaGUgc3RydWN0dXJlIG9mdGVuIGRpY3RhdGVzIHRoZSBvcmdhbml6YXRpb24gb2YgY29kZS4gTXkgaW5zdGluY3RzIGFyZSB0ZWxsaW5nIG1lIHRvIGxvb2sgYXQgYG1hcF9pbl9tYXAuY2AuIEl0JiMzOTtzIHBvc3NpYmxlIHRoYXQgdGhlIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVycyBhcmUgc29tZWhvdyBtYW5hZ2VkIHdpdGhpbiB0aGUgbmVzdGVkIG1hcCBzdHJ1Y3R1cmUgaXRzZWxmLCBvciBhdCBsZWFzdCByZWZlcmVuY2VkIGZyb20gdGhlcmUuIExldCYjMzk7cyBzZWUgd2hhdCB3ZSBjYW4gZGlnIHVwIHRoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIzIDIyOjM4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Q09ORklHXyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvbWFwX2luX21hcC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMyAyMjozODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDQ4MgoJCQkJCQkJb3V0cHV0OiAyNzgKCQkJCQkJCXRob3VnaHRzOiAxMTQwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBCUEYgSGFzaCBNYXAgT3BlcmF0aW9ucyBmb3IgRnV6emluZyoqCgpPa2F5LCBmaXJzdCB0aGluZ3MgZmlyc3QsIHRoaXMgaXMgZGVmaW5pdGVseSByZWxhdGVkIHRvIGBDT05GSUdfQlBGX1NZU0NBTExgLCB0aGF0JiMzOTtzIHRoZSBrZXkgZW5hYmxpbmcgY29uZmlndXJhdGlvbi4gTGV0JiMzOTtzIGRpZyBpbiBhbmQgZmlndXJlIG91dCB0aGUgbW9zdCBpbXBvcnRhbnQgZnVuY3Rpb25zIHRvIHRhcmdldCBmb3IgZnV6emluZy4gVGhpcyBwYXRjaCBpcyBjbGVhcmx5IHRvdWNoaW5nIEJQRiBoYXNoIG1hcCBvcGVyYXRpb25zLgoKTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGdyYWIgYWxsIHRoZSByZWxldmFudCBmdW5jdGlvbnMsIGFuZCB0aGVuIHJlZmluZS4gSSYjMzk7bGwgbmVlZCB0byBmb2N1cyBvbjogYGh0YWJfbWFwX2FsbG9jYCwgYGh0YWJfbWFwX3VwZGF0ZV9lbGVtYCwgYGh0YWJfbHJ1X21hcF91cGRhdGVfZWxlbWAsIGBfX2h0YWJfbHJ1X3BlcmNwdV9tYXBfdXBkYXRlX2VsZW1gLCBgaHRhYl9tYXBfZGVsZXRlX2VsZW1gLCBgaHRhYl9scnVfbWFwX2RlbGV0ZV9lbGVtYCwgYF9faHRhYl9tYXBfbG9va3VwX2FuZF9kZWxldGVfZWxlbWAsIGBfX2h0YWJfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2JhdGNoYCwgYGJwZl9tYXBfbWV0YV9hbGxvY2AsIGFuZCB0aGUgdmFyaW91cyBsb29rdXAgZnVuY3Rpb25zOiBgaHRhYl9tYXBfZ2VuX2xvb2t1cGAsIGBodGFiX2xydV9tYXBfZ2VuX2xvb2t1cGAsIGBodGFiX3BlcmNwdV9tYXBfZ2VuX2xvb2t1cGAsIGFuZCBgaHRhYl9vZl9tYXBfZ2VuX2xvb2t1cGAuIFRoZXNlIHNlZW0gbGlrZSB0aGUgY29yZSBlbnRyeSBwb2ludHMgZm9yIHRoZSBjaGFuZ2VzLgoKQWxyaWdodCwgSSYjMzk7bSBnb2luZyB0byByZWZpbmUgdGhhdCBsaXN0IGEgbGl0dGxlLiBXYWl0LCBJIHJlbWVtYmVyIHRoYXQgYGh0YWJfbWFwX3VwZGF0ZV9lbGVtYCBpcyBhIHByZXR0eSBpbXBvcnRhbnQgaG90LXBhdGggZnVuY3Rpb24sIHRoZSBzcGVjaWZpYyBpbXBsZW1lbnRhdGlvbiBmb3IgaGFzaCBtYXBzLCBzbyBpdCYjMzk7cyBhIHByaW1lIHRhcmdldCwgZXNwZWNpYWxseSBjb25zaWRlcmluZyBmdXp6aW5nIEJQRiBtYXAgb3BlcmF0aW9ucyBpcyBzdGFuZGFyZCBwcmFjdGljZS4KCkFmdGVyIHRoYXQgaW5pdGlhbCBsaXN0IEkmIzM5O2xsIGtlZXAgdGhlIG9uZXMgSSYjMzk7dmUgbGlzdGVkIHByZXZpb3VzbHkgYW5kIGZvY3VzIG9uIHRoZSBgYnBmX21hcF9tZXRhX2FsbG9jYCBiZWNhdXNlIHRoYXQgY291bGQgYmUgYSBzaWduaWZpY2FudCBjaGFuZ2UgYW5kIHRodXMgYSBwb3RlbnRpYWwgdGFyZ2V0IGZvciBmdXp6aW5nLgoKTm93LCBsZXQmIzM5O3Mgc2VlLCBgaHRhYl9tYXBfdXBkYXRlX2VsZW1gIGlzIHN0YXRpYywgd2hpY2ggaXMgdXN1YWxseSBub3QgaWRlYWwgZm9yIGZ1enppbmcuIEhvd2V2ZXIsIGl0JiMzOTtzIGFzc2lnbmVkIHRvIGBtYXBfb3BzYCwgc28gU3l6a2FsbGVyICpzaG91bGQqIGJlIGFibGUgdG8gdGFyZ2V0IGl0IHRocm91Z2ggdGhlIGBicGYoKWAgc3lzY2FsbC4gWWVzLCBgRm9jdXNTeW1ib2xzYCBhcmUgc3BlY2lmaWNhbGx5IHRob3NlIHRoYXQgY2FuIGJlIHRhcmdldGVkIGJ5IHN5emthbGxlciBvciBhcmUgY3JpdGljYWwgZm9yIGNvdmVyYWdlLgoKU28sIHRoZSBkZWZpbml0aXZlIGxpc3QgZm9yIG15IGFuYWx5c2lzIG5vdyBpbmNsdWRlczogYGh0YWJfbWFwX2FsbG9jYCwgYGh0YWJfbWFwX3VwZGF0ZV9lbGVtYCwgYGh0YWJfbHJ1X21hcF91cGRhdGVfZWxlbWAsIGBfX2h0YWJfbHJ1X3BlcmNwdV9tYXBfdXBkYXRlX2VsZW1gLCBgaHRhYl9tYXBfZGVsZXRlX2VsZW1gLCBgaHRhYl9scnVfbWFwX2RlbGV0ZV9lbGVtYCwgYF9faHRhYl9tYXBfbG9va3VwX2FuZF9kZWxldGVfZWxlbWAsIGBfX2h0YWJfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2JhdGNoYCwgYGJwZl9tYXBfbWV0YV9hbGxvY2AsIGBodGFiX21hcF9nZW5fbG9va3VwYCwgYGh0YWJfbHJ1X21hcF9nZW5fbG9va3VwYCwgYGh0YWJfcGVyY3B1X21hcF9nZW5fbG9va3VwYCwgYW5kIGBodGFiX29mX21hcF9nZW5fbG9va3VwYC4gSSYjMzk7bGwgbWFrZSBzdXJlIHRvIG5vdGUgdGhlc2UuCgpKdXN0IHZlcmlmeWluZyB0aGF0IGBodGFiX21hcF9nZW5fbG9va3VwYCBpcyBpbmRlZWQgcHJlc2VudCBpbiB0aGUgZGlmZi4gR29vZC4KClllcywgdGhpcyBpcyBkZWZpbml0ZWx5IHdvcnRoIGZ1enppbmcuIFRoZSBwYXRjaCBpcyBjaGFuZ2luZyB0aGUgbWVtb3J5IGxheW91dCBhbmQgb3BlcmF0aW9ucyBvZiBCUEYgaGFzaCBtYXBzLCBpbmNsdWRpbmcgdGhlIExSVSBhbmQgcGVyLUNQVSB2YXJpYW50cy4gSXQgaW50cm9kdWNlcyBuZXcgc3RydWN0dXJlcyBhbmQgb2Zmc2V0cyB3aGljaCBpbiB0dXJuIGFmZmVjdHMgY3J1Y2lhbCBvcGVyYXRpb25zIGxpa2UgYWxsb2NhdGlvbiwgdXBkYXRlcywgZGVsZXRpb25zLCBhbmQgSklUIGxvb2t1cCBnZW5lcmF0aW9uLiBGdXp6aW5nIGlzIGVzc2VudGlhbCBoZXJlIHRvIGVuc3VyZSBtZW1vcnkgc2FmZXR5IGFuZCB0aGUgY29ycmVjdG5lc3Mgb2YgdGhlc2UgY29yZSBCUEYgbWFwIG9wZXJhdGlvbnMgZ2l2ZW4gdGhlIHN1YnN0YW50aWFsIGNoYW5nZXMuCgpNeSBmaW5hbCBzZXR0aW5ncyB3aWxsIGJlOiBgV29ydGhGdXp6aW5nOiB0cnVlYCwgYEVuYWJsZUNvbmZpZ3M6IFsmIzM0O0JQRl9TWVNDQUxMJiMzNDtdYCwgYEZvY3VzU3ltYm9sczogWyYjMzQ7aHRhYl9tYXBfYWxsb2MmIzM0OywgJiMzNDtodGFiX21hcF91cGRhdGVfZWxlbSYjMzQ7LCAmIzM0O2h0YWJfbHJ1X21hcF91cGRhdGVfZWxlbSYjMzQ7LCAmIzM0O19faHRhYl9scnVfcGVyY3B1X21hcF91cGRhdGVfZWxlbSYjMzQ7LCAmIzM0O2h0YWJfbWFwX2RlbGV0ZV9lbGVtJiMzNDssICYjMzQ7aHRhYl9scnVfbWFwX2RlbGV0ZV9lbGVtJiMzNDssICYjMzQ7X19odGFiX21hcF9sb29rdXBfYW5kX2RlbGV0ZV9lbGVtJiMzNDssICYjMzQ7X19odGFiX21hcF9sb29rdXBfYW5kX2RlbGV0ZV9iYXRjaCYjMzQ7LCAmIzM0O2JwZl9tYXBfbWV0YV9hbGxvYyYjMzQ7LCAmIzM0O2h0YWJfbWFwX2dlbl9sb29rdXAmIzM0OywgJiMzNDtodGFiX2xydV9tYXBfZ2VuX2xvb2t1cCYjMzQ7LCAmIzM0O2h0YWJfcGVyY3B1X21hcF9nZW5fbG9va3VwJiMzNDssICYjMzQ7aHRhYl9vZl9tYXBfZ2VuX2xvb2t1cCYjMzQ7XWAsIGFuZCBgUmVhc29uaW5nOiAmIzM0O1RoZSBwYXRjaCBmdW5jdGlvbmFsbHkgbW9kaWZpZXMgdGhlIG1lbW9yeSBsYXlvdXQgYW5kIG9wZXJhdGlvbnMgb2YgQlBGIGhhc2ggbWFwcyAoaW5jbHVkaW5nIExSVSBhbmQgcGVyLUNQVSB2YXJpYW50cykuIEl0IGludHJvZHVjZXMgbmV3IHN0cnVjdHVyZXMgYW5kIG9mZnNldHMgZm9yIGhhc2ggbWFwIGVsZW1lbnRzLCB3aGljaCBhZmZlY3RzIGFsbG9jYXRpb24sIHVwZGF0ZXMsIGRlbGV0aW9ucywgYW5kIEpJVCBsb29rdXAgZ2VuZXJhdGlvbi4gRnV6emluZyBpcyBuZWVkZWQgdG8gZW5zdXJlIG1lbW9yeSBzYWZldHkgYW5kIGNvcnJlY3RuZXNzIG9mIHRoZXNlIGNvcmUgQlBGIG1hcCBvcGVyYXRpb25zLiYjMzQ7YAoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMyAyMjozOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtodGFiX21hcF9hbGxvYyYjMzQ7LAogICAgJiMzNDtodGFiX21hcF91cGRhdGVfZWxlbSYjMzQ7LAogICAgJiMzNDtodGFiX2xydV9tYXBfdXBkYXRlX2VsZW0mIzM0OywKICAgICYjMzQ7X19odGFiX2xydV9wZXJjcHVfbWFwX3VwZGF0ZV9lbGVtJiMzNDssCiAgICAmIzM0O2h0YWJfbWFwX2RlbGV0ZV9lbGVtJiMzNDssCiAgICAmIzM0O2h0YWJfbHJ1X21hcF9kZWxldGVfZWxlbSYjMzQ7LAogICAgJiMzNDtfX2h0YWJfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2VsZW0mIzM0OywKICAgICYjMzQ7X19odGFiX21hcF9sb29rdXBfYW5kX2RlbGV0ZV9iYXRjaCYjMzQ7LAogICAgJiMzNDticGZfbWFwX21ldGFfYWxsb2MmIzM0OywKICAgICYjMzQ7aHRhYl9tYXBfZ2VuX2xvb2t1cCYjMzQ7LAogICAgJiMzNDtodGFiX2xydV9tYXBfZ2VuX2xvb2t1cCYjMzQ7LAogICAgJiMzNDtodGFiX3BlcmNwdV9tYXBfZ2VuX2xvb2t1cCYjMzQ7LAogICAgJiMzNDtodGFiX29mX21hcF9nZW5fbG9va3VwJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZ1bmN0aW9uYWxseSBtb2RpZmllcyB0aGUgbWVtb3J5IGxheW91dCBhbmQgb3BlcmF0aW9ucyBvZiBCUEYgaGFzaCBtYXBzIChpbmNsdWRpbmcgTFJVIGFuZCBwZXItQ1BVIHZhcmlhbnRzKS4gSXQgaW50cm9kdWNlcyBuZXcgc3RydWN0dXJlcyBhbmQgb2Zmc2V0cyBmb3IgaGFzaCBtYXAgZWxlbWVudHMsIHdoaWNoIGFmZmVjdHMgYWxsb2NhdGlvbiwgdXBkYXRlcywgZGVsZXRpb25zLCBhbmQgSklUIGxvb2t1cCBnZW5lcmF0aW9uLiBGdXp6aW5nIGlzIG5lZWRlZCB0byBlbnN1cmUgbWVtb3J5IHNhZmV0eSBhbmQgY29ycmVjdG5lc3Mgb2YgdGhlc2UgY29yZSBCUEYgbWFwIG9wZXJhdGlvbnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aHRhYl9tYXBfYWxsb2MmIzM0OywKICAgICYjMzQ7aHRhYl9tYXBfdXBkYXRlX2VsZW0mIzM0OywKICAgICYjMzQ7aHRhYl9scnVfbWFwX3VwZGF0ZV9lbGVtJiMzNDssCiAgICAmIzM0O19faHRhYl9scnVfcGVyY3B1X21hcF91cGRhdGVfZWxlbSYjMzQ7LAogICAgJiMzNDtodGFiX21hcF9kZWxldGVfZWxlbSYjMzQ7LAogICAgJiMzNDtodGFiX2xydV9tYXBfZGVsZXRlX2VsZW0mIzM0OywKICAgICYjMzQ7X19odGFiX21hcF9sb29rdXBfYW5kX2RlbGV0ZV9lbGVtJiMzNDssCiAgICAmIzM0O19faHRhYl9tYXBfbG9va3VwX2FuZF9kZWxldGVfYmF0Y2gmIzM0OywKICAgICYjMzQ7YnBmX21hcF9tZXRhX2FsbG9jJiMzNDssCiAgICAmIzM0O2h0YWJfbWFwX2dlbl9sb29rdXAmIzM0OywKICAgICYjMzQ7aHRhYl9scnVfbWFwX2dlbl9sb29rdXAmIzM0OywKICAgICYjMzQ7aHRhYl9wZXJjcHVfbWFwX2dlbl9sb29rdXAmIzM0OywKICAgICYjMzQ7aHRhYl9vZl9tYXBfZ2VuX2xvb2t1cCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmdW5jdGlvbmFsbHkgbW9kaWZpZXMgdGhlIG1lbW9yeSBsYXlvdXQgYW5kIG9wZXJhdGlvbnMgb2YgQlBGIGhhc2ggbWFwcyAoaW5jbHVkaW5nIExSVSBhbmQgcGVyLUNQVSB2YXJpYW50cykuIEl0IGludHJvZHVjZXMgbmV3IHN0cnVjdHVyZXMgYW5kIG9mZnNldHMgZm9yIGhhc2ggbWFwIGVsZW1lbnRzLCB3aGljaCBhZmZlY3RzIGFsbG9jYXRpb24sIHVwZGF0ZXMsIGRlbGV0aW9ucywgYW5kIEpJVCBsb29rdXAgZ2VuZXJhdGlvbi4gRnV6emluZyBpcyBuZWVkZWQgdG8gZW5zdXJlIG1lbW9yeSBzYWZldHkgYW5kIGNvcnJlY3RuZXNzIG9mIHRoZXNlIGNvcmUgQlBGIG1hcCBvcGVyYXRpb25zLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDctMjNUMjI6Mzg6NDIuNjQ2MDQ0NzJaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMTcxMDg2MjExMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfU1lTQ0FMTFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImh0YWJfbWFwX2FsbG9jXCIsXG4gICAgXCJodGFiX21hcF91cGRhdGVfZWxlbVwiLFxuICAgIFwiaHRhYl9scnVfbWFwX3VwZGF0ZV9lbGVtXCIsXG4gICAgXCJfX2h0YWJfbHJ1X3BlcmNwdV9tYXBfdXBkYXRlX2VsZW1cIixcbiAgICBcImh0YWJfbWFwX2RlbGV0ZV9lbGVtXCIsXG4gICAgXCJodGFiX2xydV9tYXBfZGVsZXRlX2VsZW1cIixcbiAgICBcIl9faHRhYl9tYXBfbG9va3VwX2FuZF9kZWxldGVfZWxlbVwiLFxuICAgIFwiX19odGFiX21hcF9sb29rdXBfYW5kX2RlbGV0ZV9iYXRjaFwiLFxuICAgIFwiYnBmX21hcF9tZXRhX2FsbG9jXCIsXG4gICAgXCJodGFiX21hcF9nZW5fbG9va3VwXCIsXG4gICAgXCJodGFiX2xydV9tYXBfZ2VuX2xvb2t1cFwiLFxuICAgIFwiaHRhYl9wZXJjcHVfbWFwX2dlbl9sb29rdXBcIixcbiAgICBcImh0YWJfb2ZfbWFwX2dlbl9sb29rdXBcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmdW5jdGlvbmFsbHkgbW9kaWZpZXMgdGhlIG1lbW9yeSBsYXlvdXQgYW5kIG9wZXJhdGlvbnMgb2YgQlBGIGhhc2ggbWFwcyAoaW5jbHVkaW5nIExSVSBhbmQgcGVyLUNQVSB2YXJpYW50cykuIEl0IGludHJvZHVjZXMgbmV3IHN0cnVjdHVyZXMgYW5kIG9mZnNldHMgZm9yIGhhc2ggbWFwIGVsZW1lbnRzLCB3aGljaCBhZmZlY3RzIGFsbG9jYXRpb24sIHVwZGF0ZXMsIGRlbGV0aW9ucywgYW5kIEpJVCBsb29rdXAgZ2VuZXJhdGlvbi4gRnV6emluZyBpcyBuZWVkZWQgdG8gZW5zdXJlIG1lbW9yeSBzYWZldHkgYW5kIGNvcnJlY3RuZXNzIG9mIHRoZXNlIGNvcmUgQlBGIG1hcCBvcGVyYXRpb25zLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yM1QyMjozODo0Mi42NDYwNTExOVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjU2MDg3NDg0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgMjQzYTI3MDY0MGUwZGM5MDFlNGE3OGI1OTliMDc0OGQ1OWJmN2I2M1xcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVGh1IEp1bCAyMyAyMjozODo0MCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL2hhc2h0YWIuYyBiL2tlcm5lbC9icGYvaGFzaHRhYi5jXFxuaW5kZXggOWYzOTRlMWFhMmU4NWIuLmI4YzMwZDQwMjk1ODc5IDEwMDY0NFxcbi0tLSBhL2tlcm5lbC9icGYvaGFzaHRhYi5jXFxuKysrIGIva2VybmVsL2JwZi9oYXNodGFiLmNcXG5AQCAtMTAyLDYgKzEwMiw3IEBAIHN0cnVjdCBicGZfaHRhYiB7XFxuIFxcdGJvb2wgdXNlX3BlcmNwdV9jb3VudGVyO1xcbiBcXHR1MzIgbl9idWNrZXRzO1xcdC8qIG51bWJlciBvZiBoYXNoIGJ1Y2tldHMgKi9cXG4gXFx0dTMyIGVsZW1fc2l6ZTtcXHQvKiBzaXplIG9mIGVhY2ggZWxlbWVudCBpbiBieXRlcyAqL1xcbitcXHR1MzIga2V5X29mZnNldDtcXHQvKiBvZmZzZXQgb2Yga2V5IGluIGJ5dGVzICovXFxuIFxcdHUzMiBoYXNocm5kO1xcbiB9O1xcbiBcXG5AQCAtMTE3LDE4ICsxMTgsNDYgQEAgc3RydWN0IGh0YWJfZWxlbSB7XFxuIFxcdFxcdFxcdH07XFxuIFxcdFxcdH07XFxuIFxcdH07XFxuK1xcdHUzMiBoYXNoOyAvKiBPbmx5IHdoZW4gaHRhYl9oYXNfaGFzaCgpICovXFxuK30gX19hbGlnbmVkKDgpO1xcbitcXG4rc3RydWN0IGh0YWJfZWxlbV9scnUge1xcbiBcXHR1bmlvbiB7XFxuLVxcdFxcdC8qIHBvaW50ZXIgdG8gcGVyLWNwdSBwb2ludGVyICovXFxuLVxcdFxcdHZvaWQgKnB0cl90b19wcHRyO1xcbi1cXHRcXHRzdHJ1Y3QgYnBmX2xydV9ub2RlIGxydV9ub2RlO1xcbitcXHRcXHRzdHJ1Y3QgaGxpc3RfbnVsbHNfbm9kZSBoYXNoX25vZGU7XFxuK1xcdFxcdHN0cnVjdCB7XFxuK1xcdFxcdFxcdHZvaWQgKnBhZGRpbmc7XFxuK1xcdFxcdFxcdHVuaW9uIHtcXG4rXFx0XFx0XFx0XFx0c3RydWN0IHBjcHVfZnJlZWxpc3Rfbm9kZSBmbm9kZTtcXG4rXFx0XFx0XFx0XFx0c3RydWN0IGh0YWJfZWxlbV9scnUgKmJhdGNoX2ZsaW5rO1xcbitcXHRcXHRcXHR9O1xcbitcXHRcXHR9O1xcbiBcXHR9O1xcbitcXHRzdHJ1Y3QgYnBmX2xydV9ub2RlIGxydV9ub2RlO1xcbiBcXHR1MzIgaGFzaDtcXG4tXFx0Y2hhciBrZXlbXSBfX2FsaWduZWQoOCk7XFxuLX07XFxuK30gX19hbGlnbmVkKDgpO1xcbitcXG4rLyogT25seSBmb3Igbm9uLXByZWFsbG9jYXRlZCBQQ1BVIG1hcHMuIFByZWFsbG9jYXRlZCBQQ1BVIG1hcHMgZG9uJ3QgbmVlZFxcbisgKiBwdHJfdG9fcHB0ciwgYW5kIHVzZSBodGFiX2VsZW0uXFxuKyAqL1xcbitzdHJ1Y3QgaHRhYl9lbGVtX3BjcHUge1xcbitcXHR1bmlvbiB7XFxuK1xcdFxcdHN0cnVjdCBobGlzdF9udWxsc19ub2RlIGhhc2hfbm9kZTtcXG4rXFx0XFx0c3RydWN0IHtcXG4rXFx0XFx0XFx0dm9pZCAqcGFkZGluZztcXG4rXFx0XFx0XFx0dW5pb24ge1xcbitcXHRcXHRcXHRcXHRzdHJ1Y3QgcGNwdV9mcmVlbGlzdF9ub2RlIGZub2RlO1xcbitcXHRcXHRcXHRcXHRzdHJ1Y3QgaHRhYl9lbGVtX3BjcHUgKmJhdGNoX2ZsaW5rO1xcbitcXHRcXHRcXHR9O1xcbitcXHRcXHR9O1xcbitcXHR9O1xcbitcXHR2b2lkICpwdHJfdG9fcHB0cjtcXG4rXFx0dTMyIGhhc2g7IC8qIE9ubHkgd2hlbiBodGFiX2hhc19oYXNoKCkgKi9cXG4rfSBfX2FsaWduZWQoOCk7XFxuIFxcbiBzdHJ1Y3QgaHRhYl9idGZfcmVjb3JkIHtcXG4gXFx0c3RydWN0IGJ0Zl9yZWNvcmQgKnJlY29yZDtcXG4gXFx0dTMyIGtleV9zaXplO1xcbitcXHR1MzIga2V5X29mZnNldDtcXG4gfTtcXG4gXFxuIHN0YXRpYyBpbmxpbmUgYm9vbCBodGFiX2lzX3ByZWFsbG9jKGNvbnN0IHN0cnVjdCBicGZfaHRhYiAqaHRhYilcXG5AQCAtMTM2LDYgKzE2NSwyMSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgaHRhYl9pc19wcmVhbGxvYyhjb25zdCBzdHJ1Y3QgYnBmX2h0YWIgKmh0YWIpXFxuIFxcdHJldHVybiAhKGh0YWItXFx1MDAzZW1hcC5tYXBfZmxhZ3MgXFx1MDAyNiBCUEZfRl9OT19QUkVBTExPQyk7XFxuIH1cXG4gXFxuK3N0YXRpYyBpbmxpbmUgc3RydWN0IGJwZl9scnVfbm9kZSAqaHRhYl9lbGVtX2xydV9ub2RlKHN0cnVjdCBodGFiX2VsZW0gKmwpXFxuK3tcXG4rXFx0cmV0dXJuIFxcdTAwMjYoKHN0cnVjdCBodGFiX2VsZW1fbHJ1ICopbCktXFx1MDAzZWxydV9ub2RlO1xcbit9XFxuK1xcbitzdGF0aWMgaW5saW5lIHZvaWQgKmh0YWJfZWxlbV9nZXRfcHRyX3RvX3BwdHIoc3RydWN0IGh0YWJfZWxlbSAqbClcXG4re1xcbitcXHRyZXR1cm4gKChzdHJ1Y3QgaHRhYl9lbGVtX3BjcHUgKilsKS1cXHUwMDNlcHRyX3RvX3BwdHI7XFxuK31cXG4rXFxuK3N0YXRpYyBpbmxpbmUgdm9pZCBodGFiX2VsZW1fc2V0X3B0cl90b19wcHRyKHN0cnVjdCBodGFiX2VsZW0gKmwsIHZvaWQgKnB0cilcXG4re1xcbitcXHQoKHN0cnVjdCBodGFiX2VsZW1fcGNwdSAqKWwpLVxcdTAwM2VwdHJfdG9fcHB0ciA9IHB0cjtcXG4rfVxcbitcXG4gc3RhdGljIHZvaWQgaHRhYl9pbml0X2J1Y2tldHMoc3RydWN0IGJwZl9odGFiICpodGFiKVxcbiB7XFxuIFxcdHVuc2lnbmVkIGludCBpO1xcbkBAIC0xODMsMjUgKzIyNywzMCBAQCBzdGF0aWMgaW5saW5lIGJvb2wgaXNfZmRfaHRhYihjb25zdCBzdHJ1Y3QgYnBmX2h0YWIgKmh0YWIpXFxuIFxcdHJldHVybiBodGFiLVxcdTAwM2VtYXAubWFwX3R5cGUgPT0gQlBGX01BUF9UWVBFX0hBU0hfT0ZfTUFQUztcXG4gfVxcbiBcXG4tc3RhdGljIGlubGluZSB2b2lkICpodGFiX2VsZW1fdmFsdWUoc3RydWN0IGh0YWJfZWxlbSAqbCwgdTMyIGtleV9zaXplKVxcbitzdGF0aWMgaW5saW5lIHZvaWQgKmh0YWJfZWxlbV9rZXkoc3RydWN0IGJwZl9odGFiICpodGFiLCBzdHJ1Y3QgaHRhYl9lbGVtICpsKVxcbit7XFxuK1xcdHJldHVybiAodm9pZCAqKWwgKyBodGFiLVxcdTAwM2VrZXlfb2Zmc2V0O1xcbit9XFxuK1xcbitzdGF0aWMgaW5saW5lIHZvaWQgKmh0YWJfZWxlbV92YWx1ZShzdHJ1Y3QgYnBmX2h0YWIgKmh0YWIsIHN0cnVjdCBodGFiX2VsZW0gKmwpXFxuIHtcXG4tXFx0cmV0dXJuIGwtXFx1MDAzZWtleSArIHJvdW5kX3VwKGtleV9zaXplLCA4KTtcXG4rXFx0cmV0dXJuIGh0YWJfZWxlbV9rZXkoaHRhYiwgbCkgKyByb3VuZF91cChodGFiLVxcdTAwM2VtYXAua2V5X3NpemUsIDgpO1xcbiB9XFxuIFxcbi1zdGF0aWMgaW5saW5lIHZvaWQgaHRhYl9lbGVtX3NldF9wdHIoc3RydWN0IGh0YWJfZWxlbSAqbCwgdTMyIGtleV9zaXplLFxcbitzdGF0aWMgaW5saW5lIHZvaWQgaHRhYl9lbGVtX3NldF9wdHIoc3RydWN0IGJwZl9odGFiICpodGFiLCBzdHJ1Y3QgaHRhYl9lbGVtICpsLFxcbiBcXHRcXHRcXHRcXHQgICAgIHZvaWQgX19wZXJjcHUgKnBwdHIpXFxuIHtcXG4tXFx0Kih2b2lkIF9fcGVyY3B1ICoqKWh0YWJfZWxlbV92YWx1ZShsLCBrZXlfc2l6ZSkgPSBwcHRyO1xcbitcXHQqKHZvaWQgX19wZXJjcHUgKiopaHRhYl9lbGVtX3ZhbHVlKGh0YWIsIGwpID0gcHB0cjtcXG4gfVxcbiBcXG4tc3RhdGljIGlubGluZSB2b2lkIF9fcGVyY3B1ICpodGFiX2VsZW1fZ2V0X3B0cihzdHJ1Y3QgaHRhYl9lbGVtICpsLCB1MzIga2V5X3NpemUpXFxuK3N0YXRpYyBpbmxpbmUgdm9pZCBfX3BlcmNwdSAqaHRhYl9lbGVtX2dldF9wdHIoc3RydWN0IGJwZl9odGFiICpodGFiLCBzdHJ1Y3QgaHRhYl9lbGVtICpsKVxcbiB7XFxuLVxcdHJldHVybiAqKHZvaWQgX19wZXJjcHUgKiopaHRhYl9lbGVtX3ZhbHVlKGwsIGtleV9zaXplKTtcXG4rXFx0cmV0dXJuICoodm9pZCBfX3BlcmNwdSAqKilodGFiX2VsZW1fdmFsdWUoaHRhYiwgbCk7XFxuIH1cXG4gXFxuLXN0YXRpYyB2b2lkICpmZF9odGFiX21hcF9nZXRfcHRyKGNvbnN0IHN0cnVjdCBicGZfbWFwICptYXAsIHN0cnVjdCBodGFiX2VsZW0gKmwpXFxuK3N0YXRpYyB2b2lkICpmZF9odGFiX21hcF9nZXRfcHRyKHN0cnVjdCBicGZfaHRhYiAqaHRhYiwgc3RydWN0IGh0YWJfZWxlbSAqbClcXG4ge1xcbi1cXHRyZXR1cm4gKih2b2lkICoqKWh0YWJfZWxlbV92YWx1ZShsLCBtYXAtXFx1MDAzZWtleV9zaXplKTtcXG4rXFx0cmV0dXJuICoodm9pZCAqKilodGFiX2VsZW1fdmFsdWUoaHRhYiwgbCk7XFxuIH1cXG4gXFxuIHN0YXRpYyBzdHJ1Y3QgaHRhYl9lbGVtICpnZXRfaHRhYl9lbGVtKHN0cnVjdCBicGZfaHRhYiAqaHRhYiwgaW50IGkpXFxuQEAgLTIwOSw2ICsyNTgsMzMgQEAgc3RhdGljIHN0cnVjdCBodGFiX2VsZW0gKmdldF9odGFiX2VsZW0oc3RydWN0IGJwZl9odGFiICpodGFiLCBpbnQgaSlcXG4gXFx0cmV0dXJuIChzdHJ1Y3QgaHRhYl9lbGVtICopIChodGFiLVxcdTAwM2VlbGVtcyArIGkgKiAodTY0KWh0YWItXFx1MDAzZWVsZW1fc2l6ZSk7XFxuIH1cXG4gXFxuK3N0YXRpYyBpbmxpbmUgYm9vbCBodGFiX2hhc19oYXNoKGNvbnN0IHN0cnVjdCBicGZfaHRhYiAqaHRhYilcXG4re1xcbitcXHRyZXR1cm4gaHRhYl9pc19scnUoaHRhYikgfHwgaHRhYi1cXHUwMDNlbWFwLmtleV9zaXplIFxcdTAwM2UgODtcXG4rfVxcbitcXG4rc3RhdGljIGlubGluZSB1MzIgaHRhYl9lbGVtX2hhc2goc3RydWN0IGJwZl9odGFiICpodGFiLCBzdHJ1Y3QgaHRhYl9lbGVtICpsKVxcbit7XFxuK1xcdGlmIChodGFiX2lzX2xydShodGFiKSlcXG4rXFx0XFx0cmV0dXJuICgoc3RydWN0IGh0YWJfZWxlbV9scnUgKilsKS1cXHUwMDNlaGFzaDtcXG4rXFx0ZWxzZSBpZiAoaHRhYl9pc19wZXJjcHUoaHRhYikgXFx1MDAyNlxcdTAwMjYgIWh0YWJfaXNfcHJlYWxsb2MoaHRhYikpXFxuK1xcdFxcdHJldHVybiAoKHN0cnVjdCBodGFiX2VsZW1fcGNwdSAqKWwpLVxcdTAwM2VoYXNoO1xcbitcXHRlbHNlXFxuK1xcdFxcdHJldHVybiBsLVxcdTAwM2VoYXNoO1xcbit9XFxuK1xcbitzdGF0aWMgaW5saW5lIHZvaWQgaHRhYl9lbGVtX3NldF9oYXNoKHN0cnVjdCBicGZfaHRhYiAqaHRhYiwgc3RydWN0IGh0YWJfZWxlbSAqbCwgdTMyIGhhc2gpXFxuK3tcXG4rXFx0aWYgKCFodGFiX2hhc19oYXNoKGh0YWIpKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcdGlmIChodGFiX2lzX2xydShodGFiKSlcXG4rXFx0XFx0KChzdHJ1Y3QgaHRhYl9lbGVtX2xydSAqKWwpLVxcdTAwM2VoYXNoID0gaGFzaDtcXG4rXFx0ZWxzZSBpZiAoaHRhYl9pc19wZXJjcHUoaHRhYikgXFx1MDAyNlxcdTAwMjYgIWh0YWJfaXNfcHJlYWxsb2MoaHRhYikpXFxuK1xcdFxcdCgoc3RydWN0IGh0YWJfZWxlbV9wY3B1ICopbCktXFx1MDAzZWhhc2ggPSBoYXNoO1xcbitcXHRlbHNlXFxuK1xcdFxcdGwtXFx1MDAzZWhhc2ggPSBoYXNoO1xcbit9XFxuK1xcbiAvKiBCb3RoIHBlcmNwdSBhbmQgZmQgaHRhYiBzdXBwb3J0IGluLXBsYWNlIHVwZGF0ZSwgc28gbm8gbmVlZCBmb3JcXG4gICogZXh0cmEgZWxlbS4gTFJVIGl0c2VsZiBjYW4gcmVtb3ZlIHRoZSBsZWFzdCB1c2VkIGVsZW1lbnQsIHNvXFxuICAqIHRoZXJlIGlzIG5vIG5lZWQgZm9yIGFuIGV4dHJhIGVsZW0gZHVyaW5nIG1hcF91cGRhdGUuXFxuQEAgLTIzMSw3ICszMDcsNyBAQCBzdGF0aWMgdm9pZCBodGFiX2ZyZWVfcHJlYWxsb2NlZF9pbnRlcm5hbF9zdHJ1Y3RzKHN0cnVjdCBicGZfaHRhYiAqaHRhYilcXG4gXFxuIFxcdFxcdGVsZW0gPSBnZXRfaHRhYl9lbGVtKGh0YWIsIGkpO1xcbiBcXHRcXHRicGZfbWFwX2ZyZWVfaW50ZXJuYWxfc3RydWN0cyhcXHUwMDI2aHRhYi1cXHUwMDNlbWFwLFxcbi1cXHRcXHRcXHRcXHRcXHQgICAgICBodGFiX2VsZW1fdmFsdWUoZWxlbSwgaHRhYi1cXHUwMDNlbWFwLmtleV9zaXplKSk7XFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgIGh0YWJfZWxlbV92YWx1ZShodGFiLCBlbGVtKSk7XFxuIFxcdFxcdGNvbmRfcmVzY2hlZCgpO1xcbiBcXHR9XFxuIH1cXG5AQCAtMjU0LDcgKzMzMCw3IEBAIHN0YXRpYyB2b2lkIGh0YWJfZnJlZV9wcmVhbGxvY2VkX2ZpZWxkcyhzdHJ1Y3QgYnBmX2h0YWIgKmh0YWIpXFxuIFxcbiBcXHRcXHRlbGVtID0gZ2V0X2h0YWJfZWxlbShodGFiLCBpKTtcXG4gXFx0XFx0aWYgKGh0YWJfaXNfcGVyY3B1KGh0YWIpKSB7XFxuLVxcdFxcdFxcdHZvaWQgX19wZXJjcHUgKnBwdHIgPSBodGFiX2VsZW1fZ2V0X3B0cihlbGVtLCBodGFiLVxcdTAwM2VtYXAua2V5X3NpemUpO1xcbitcXHRcXHRcXHR2b2lkIF9fcGVyY3B1ICpwcHRyID0gaHRhYl9lbGVtX2dldF9wdHIoaHRhYiwgZWxlbSk7XFxuIFxcdFxcdFxcdGludCBjcHU7XFxuIFxcbiBcXHRcXHRcXHRmb3JfZWFjaF9wb3NzaWJsZV9jcHUoY3B1KSB7XFxuQEAgLTI2Myw3ICszMzksNyBAQCBzdGF0aWMgdm9pZCBodGFiX2ZyZWVfcHJlYWxsb2NlZF9maWVsZHMoc3RydWN0IGJwZl9odGFiICpodGFiKVxcbiBcXHRcXHRcXHR9XFxuIFxcdFxcdH0gZWxzZSB7XFxuIFxcdFxcdFxcdGJwZl9vYmpfZnJlZV9maWVsZHMoaHRhYi1cXHUwMDNlbWFwLnJlY29yZCxcXG4tXFx0XFx0XFx0XFx0XFx0ICAgIGh0YWJfZWxlbV92YWx1ZShlbGVtLCBodGFiLVxcdTAwM2VtYXAua2V5X3NpemUpKTtcXG4rXFx0XFx0XFx0XFx0XFx0ICAgIGh0YWJfZWxlbV92YWx1ZShodGFiLCBlbGVtKSk7XFxuIFxcdFxcdFxcdGNvbmRfcmVzY2hlZCgpO1xcbiBcXHRcXHR9XFxuIFxcdFxcdGNvbmRfcmVzY2hlZCgpO1xcbkBAIC0yODAsOCArMzU2LDcgQEAgc3RhdGljIHZvaWQgaHRhYl9mcmVlX2VsZW1zKHN0cnVjdCBicGZfaHRhYiAqaHRhYilcXG4gXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIGh0YWItXFx1MDAzZW1hcC5tYXhfZW50cmllczsgaSsrKSB7XFxuIFxcdFxcdHZvaWQgX19wZXJjcHUgKnBwdHI7XFxuIFxcbi1cXHRcXHRwcHRyID0gaHRhYl9lbGVtX2dldF9wdHIoZ2V0X2h0YWJfZWxlbShodGFiLCBpKSxcXG4tXFx0XFx0XFx0XFx0XFx0IGh0YWItXFx1MDAzZW1hcC5rZXlfc2l6ZSk7XFxuK1xcdFxcdHBwdHIgPSBodGFiX2VsZW1fZ2V0X3B0cihodGFiLCBnZXRfaHRhYl9lbGVtKGh0YWIsIGkpKTtcXG4gXFx0XFx0ZnJlZV9wZXJjcHUocHB0cik7XFxuIFxcdFxcdGNvbmRfcmVzY2hlZCgpO1xcbiBcXHR9XFxuQEAgLTMwOCw4ICszODMsOCBAQCBzdGF0aWMgc3RydWN0IGh0YWJfZWxlbSAqcHJlYWxsb2NfbHJ1X3BvcChzdHJ1Y3QgYnBmX2h0YWIgKmh0YWIsIHZvaWQgKmtleSxcXG4gXFxuIFxcdGlmIChub2RlKSB7XFxuIFxcdFxcdGJwZl9tYXBfaW5jX2VsZW1fY291bnQoXFx1MDAyNmh0YWItXFx1MDAzZW1hcCk7XFxuLVxcdFxcdGwgPSBjb250YWluZXJfb2Yobm9kZSwgc3RydWN0IGh0YWJfZWxlbSwgbHJ1X25vZGUpO1xcbi1cXHRcXHRtZW1jcHkobC1cXHUwMDNla2V5LCBrZXksIGh0YWItXFx1MDAzZW1hcC5rZXlfc2l6ZSk7XFxuK1xcdFxcdGwgPSAoc3RydWN0IGh0YWJfZWxlbSAqKWNvbnRhaW5lcl9vZihub2RlLCBzdHJ1Y3QgaHRhYl9lbGVtX2xydSwgbHJ1X25vZGUpO1xcbitcXHRcXHRtZW1jcHkoaHRhYl9lbGVtX2tleShodGFiLCBsKSwga2V5LCBodGFiLVxcdTAwM2VtYXAua2V5X3NpemUpO1xcbiBcXHRcXHRyZXR1cm4gbDtcXG4gXFx0fVxcbiBcXG5AQCAtMzQwLDggKzQxNSw3IEBAIHN0YXRpYyBpbnQgcHJlYWxsb2NfaW5pdChzdHJ1Y3QgYnBmX2h0YWIgKmh0YWIpXFxuIFxcdFxcdFxcdFxcdFxcdCAgICBHRlBfVVNFUiB8IF9fR0ZQX05PV0FSTik7XFxuIFxcdFxcdGlmICghcHB0cilcXG4gXFx0XFx0XFx0Z290byBmcmVlX2VsZW1zO1xcbi1cXHRcXHRodGFiX2VsZW1fc2V0X3B0cihnZXRfaHRhYl9lbGVtKGh0YWIsIGkpLCBodGFiLVxcdTAwM2VtYXAua2V5X3NpemUsXFxuLVxcdFxcdFxcdFxcdCAgcHB0cik7XFxuK1xcdFxcdGh0YWJfZWxlbV9zZXRfcHRyKGh0YWIsIGdldF9odGFiX2VsZW0oaHRhYiwgaSksIHBwdHIpO1xcbiBcXHRcXHRjb25kX3Jlc2NoZWQoKTtcXG4gXFx0fVxcbiBcXG5AQCAtMzQ5LDggKzQyMyw4IEBAIHN0YXRpYyBpbnQgcHJlYWxsb2NfaW5pdChzdHJ1Y3QgYnBmX2h0YWIgKmh0YWIpXFxuIFxcdGlmIChodGFiX2lzX2xydShodGFiKSlcXG4gXFx0XFx0ZXJyID0gYnBmX2xydV9pbml0KFxcdTAwMjZodGFiLVxcdTAwM2VscnUsXFxuIFxcdFxcdFxcdFxcdCAgIGh0YWItXFx1MDAzZW1hcC5tYXBfZmxhZ3MgXFx1MDAyNiBCUEZfRl9OT19DT01NT05fTFJVLFxcbi1cXHRcXHRcXHRcXHQgICBvZmZzZXRvZihzdHJ1Y3QgaHRhYl9lbGVtLCBoYXNoKSAtXFxuLVxcdFxcdFxcdFxcdCAgIG9mZnNldG9mKHN0cnVjdCBodGFiX2VsZW0sIGxydV9ub2RlKSxcXG4rXFx0XFx0XFx0XFx0ICAgb2Zmc2V0b2Yoc3RydWN0IGh0YWJfZWxlbV9scnUsIGhhc2gpIC1cXG4rXFx0XFx0XFx0XFx0ICAgb2Zmc2V0b2Yoc3RydWN0IGh0YWJfZWxlbV9scnUsIGxydV9ub2RlKSxcXG4gXFx0XFx0XFx0XFx0ICAgaHRhYl9scnVfbWFwX2RlbGV0ZV9ub2RlLFxcbiBcXHRcXHRcXHRcXHQgICBodGFiKTtcXG4gXFx0ZWxzZVxcbkBAIC0zNjEsNyArNDM1LDcgQEAgc3RhdGljIGludCBwcmVhbGxvY19pbml0KHN0cnVjdCBicGZfaHRhYiAqaHRhYilcXG4gXFxuIFxcdGlmIChodGFiX2lzX2xydShodGFiKSlcXG4gXFx0XFx0YnBmX2xydV9wb3B1bGF0ZShcXHUwMDI2aHRhYi1cXHUwMDNlbHJ1LCBodGFiLVxcdTAwM2VlbGVtcyxcXG4tXFx0XFx0XFx0XFx0IG9mZnNldG9mKHN0cnVjdCBodGFiX2VsZW0sIGxydV9ub2RlKSxcXG4rXFx0XFx0XFx0XFx0IG9mZnNldG9mKHN0cnVjdCBodGFiX2VsZW1fbHJ1LCBscnVfbm9kZSksXFxuIFxcdFxcdFxcdFxcdCBodGFiLVxcdTAwM2VlbGVtX3NpemUsIG51bV9lbnRyaWVzKTtcXG4gXFx0ZWxzZVxcbiBcXHRcXHRwY3B1X2ZyZWVsaXN0X3BvcHVsYXRlKFxcdTAwMjZodGFiLVxcdTAwM2VmcmVlbGlzdCxcXG5AQCAtNDI4LDYgKzUwMiwyNSBAQCBzdGF0aWMgaW50IGh0YWJfbWFwX2FsbG9jX2NoZWNrKHVuaW9uIGJwZl9hdHRyICphdHRyKVxcbiBcXHRCVUlMRF9CVUdfT04ob2Zmc2V0b2Yoc3RydWN0IGh0YWJfZWxlbSwgZm5vZGUubmV4dCkgIT1cXG4gXFx0XFx0ICAgICBvZmZzZXRvZihzdHJ1Y3QgaHRhYl9lbGVtLCBoYXNoX25vZGUucHByZXYpKTtcXG4gXFxuK1xcdC8qIGh0YWJfZWxlbSBwb2ludGVycyBhcmUgdXNlZCBhcyBiYXNlIHBvaW50ZXJzIGZvciBodGFiX2VsZW1fbHJ1IGFuZFxcbitcXHQgKiBodGFiX2VsZW1fcGNwdS4gVGhlc2Ugc3RydWN0dXJlcyBtdXN0IHNoYXJlIGEgY29tbW9uIGluaXRpYWwgc2VxdWVuY2VcXG4rXFx0ICogdG8gZW5zdXJlIHBvaW50ZXIgY2FzdGluZyBiZXR3ZWVuIHRoZW0gaXMgc2FmZS5cXG4rXFx0ICovXFxuK1xcdEJVSUxEX0JVR19PTihvZmZzZXRvZihzdHJ1Y3QgaHRhYl9lbGVtLCBoYXNoX25vZGUpICE9XFxuK1xcdFxcdCAgICAgb2Zmc2V0b2Yoc3RydWN0IGh0YWJfZWxlbV9scnUsIGhhc2hfbm9kZSkpO1xcbitcXHRCVUlMRF9CVUdfT04ob2Zmc2V0b2Yoc3RydWN0IGh0YWJfZWxlbSwgaGFzaF9ub2RlKSAhPVxcbitcXHRcXHQgICAgIG9mZnNldG9mKHN0cnVjdCBodGFiX2VsZW1fcGNwdSwgaGFzaF9ub2RlKSk7XFxuK1xcbitcXHRCVUlMRF9CVUdfT04ob2Zmc2V0b2Yoc3RydWN0IGh0YWJfZWxlbSwgcGFkZGluZykgIT1cXG4rXFx0XFx0ICAgICBvZmZzZXRvZihzdHJ1Y3QgaHRhYl9lbGVtX2xydSwgcGFkZGluZykpO1xcbitcXHRCVUlMRF9CVUdfT04ob2Zmc2V0b2Yoc3RydWN0IGh0YWJfZWxlbSwgcGFkZGluZykgIT1cXG4rXFx0XFx0ICAgICBvZmZzZXRvZihzdHJ1Y3QgaHRhYl9lbGVtX3BjcHUsIHBhZGRpbmcpKTtcXG4rXFxuK1xcdEJVSUxEX0JVR19PTihvZmZzZXRvZihzdHJ1Y3QgaHRhYl9lbGVtLCBmbm9kZSkgIT1cXG4rXFx0XFx0ICAgICBvZmZzZXRvZihzdHJ1Y3QgaHRhYl9lbGVtX2xydSwgZm5vZGUpKTtcXG4rXFx0QlVJTERfQlVHX09OKG9mZnNldG9mKHN0cnVjdCBodGFiX2VsZW0sIGZub2RlKSAhPVxcbitcXHRcXHQgICAgIG9mZnNldG9mKHN0cnVjdCBodGFiX2VsZW1fcGNwdSwgZm5vZGUpKTtcXG4rXFxuIFxcdGlmICh6ZXJvX3NlZWQgXFx1MDAyNlxcdTAwMjYgIWNhcGFibGUoQ0FQX1NZU19BRE1JTikpXFxuIFxcdFxcdC8qIEd1YXJkIGFnYWluc3QgbG9jYWwgRG9TLCBhbmQgZGlzY291cmFnZSBwcm9kdWN0aW9uIHVzZS4gKi9cXG4gXFx0XFx0cmV0dXJuIC1FUEVSTTtcXG5AQCAtNDc2LDcgKzU2OSw3IEBAIHN0YXRpYyB2b2lkIGh0YWJfbWVtX2R0b3Iodm9pZCAqb2JqLCB2b2lkICpjdHgpXFxuIFxcdGlmIChJU19FUlJfT1JfTlVMTChocmVjLVxcdTAwM2VyZWNvcmQpKVxcbiBcXHRcXHRyZXR1cm47XFxuIFxcbi1cXHRtYXBfdmFsdWUgPSBodGFiX2VsZW1fdmFsdWUoZWxlbSwgaHJlYy1cXHUwMDNla2V5X3NpemUpO1xcbitcXHRtYXBfdmFsdWUgPSAodm9pZCAqKWVsZW0gKyBocmVjLVxcdTAwM2VrZXlfb2Zmc2V0ICsgcm91bmRfdXAoaHJlYy1cXHUwMDNla2V5X3NpemUsIDgpO1xcbiBcXHRicGZfb2JqX2ZyZWVfZmllbGRzKGhyZWMtXFx1MDAzZXJlY29yZCwgbWFwX3ZhbHVlKTtcXG4gfVxcbiBcXG5AQCAtNTAyLDcgKzU5NSw3IEBAIHN0YXRpYyB2b2lkIGh0YWJfZHRvcl9jdHhfZnJlZSh2b2lkICpjdHgpXFxuIH1cXG4gXFxuIHN0YXRpYyBpbnQgYnBmX21hX3NldF9kdG9yKHN0cnVjdCBicGZfbWFwICptYXAsIHN0cnVjdCBicGZfbWVtX2FsbG9jICptYSxcXG4tXFx0XFx0XFx0ICAgdm9pZCAoKmR0b3IpKHZvaWQgKiwgdm9pZCAqKSlcXG4rXFx0XFx0XFx0ICAgdm9pZCAoKmR0b3IpKHZvaWQgKiwgdm9pZCAqKSwgdTMyIGtleV9vZmZzZXQpXFxuIHtcXG4gXFx0c3RydWN0IGh0YWJfYnRmX3JlY29yZCAqaHJlYztcXG4gXFx0aW50IGVycjtcXG5AQCAtNTE1LDYgKzYwOCw3IEBAIHN0YXRpYyBpbnQgYnBmX21hX3NldF9kdG9yKHN0cnVjdCBicGZfbWFwICptYXAsIHN0cnVjdCBicGZfbWVtX2FsbG9jICptYSxcXG4gXFx0aWYgKCFocmVjKVxcbiBcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4gXFx0aHJlYy1cXHUwMDNla2V5X3NpemUgPSBtYXAtXFx1MDAzZWtleV9zaXplO1xcbitcXHRocmVjLVxcdTAwM2VrZXlfb2Zmc2V0ID0ga2V5X29mZnNldDtcXG4gXFx0aHJlYy1cXHUwMDNlcmVjb3JkID0gYnRmX3JlY29yZF9kdXAobWFwLVxcdTAwM2VyZWNvcmQpO1xcbiBcXHRpZiAoSVNfRVJSKGhyZWMtXFx1MDAzZXJlY29yZCkpIHtcXG4gXFx0XFx0ZXJyID0gUFRSX0VSUihocmVjLVxcdTAwM2VyZWNvcmQpO1xcbkBAIC01MzcsOSArNjMxLDkgQEAgc3RhdGljIGludCBodGFiX21hcF9jaGVja19idGYoc3RydWN0IGJwZl9tYXAgKm1hcCwgY29uc3Qgc3RydWN0IGJ0ZiAqYnRmLFxcbiBcXHQgKiBwb3B1bGF0ZWQgaW4gaHRhYl9tYXBfYWxsb2MoKSwgc28gaXQgd2lsbCBhbHdheXMgYXBwZWFyIGFzIE5VTEwuXFxuIFxcdCAqL1xcbiBcXHRpZiAoaHRhYl9pc19wZXJjcHUoaHRhYikpXFxuLVxcdFxcdHJldHVybiBicGZfbWFfc2V0X2R0b3IobWFwLCBcXHUwMDI2aHRhYi1cXHUwMDNlcGNwdV9tYSwgaHRhYl9wY3B1X21lbV9kdG9yKTtcXG4rXFx0XFx0cmV0dXJuIGJwZl9tYV9zZXRfZHRvcihtYXAsIFxcdTAwMjZodGFiLVxcdTAwM2VwY3B1X21hLCBodGFiX3BjcHVfbWVtX2R0b3IsIGh0YWItXFx1MDAzZWtleV9vZmZzZXQpO1xcbiBcXHRlbHNlXFxuLVxcdFxcdHJldHVybiBicGZfbWFfc2V0X2R0b3IobWFwLCBcXHUwMDI2aHRhYi1cXHUwMDNlbWEsIGh0YWJfbWVtX2R0b3IpO1xcbitcXHRcXHRyZXR1cm4gYnBmX21hX3NldF9kdG9yKG1hcCwgXFx1MDAyNmh0YWItXFx1MDAzZW1hLCBodGFiX21lbV9kdG9yLCBodGFiLVxcdTAwM2VrZXlfb2Zmc2V0KTtcXG4gfVxcbiBcXG4gc3RhdGljIHN0cnVjdCBicGZfbWFwICpodGFiX21hcF9hbGxvYyh1bmlvbiBicGZfYXR0ciAqYXR0cilcXG5AQCAtNTgzLDggKzY3NywxOCBAQCBzdGF0aWMgc3RydWN0IGJwZl9tYXAgKmh0YWJfbWFwX2FsbG9jKHVuaW9uIGJwZl9hdHRyICphdHRyKVxcbiBcXG4gXFx0aHRhYi1cXHUwMDNlbl9idWNrZXRzID0gcm91bmR1cF9wb3dfb2ZfdHdvKGh0YWItXFx1MDAzZW1hcC5tYXhfZW50cmllcyk7XFxuIFxcbi1cXHRodGFiLVxcdTAwM2VlbGVtX3NpemUgPSBzaXplb2Yoc3RydWN0IGh0YWJfZWxlbSkgK1xcbi1cXHRcXHRcXHQgIHJvdW5kX3VwKGh0YWItXFx1MDAzZW1hcC5rZXlfc2l6ZSwgOCk7XFxuK1xcdGlmIChodGFiX2lzX2xydShodGFiKSlcXG4rXFx0XFx0aHRhYi1cXHUwMDNla2V5X29mZnNldCA9IHNpemVvZihzdHJ1Y3QgaHRhYl9lbGVtX2xydSk7XFxuK1xcdGVsc2UgaWYgKHBlcmNwdSBcXHUwMDI2XFx1MDAyNiAhcHJlYWxsb2MpXFxuK1xcdFxcdGh0YWItXFx1MDAzZWtleV9vZmZzZXQgPSByb3VuZF91cChodGFiX2hhc19oYXNoKGh0YWIpID9cXG4rXFx0XFx0XFx0XFx0XFx0ICAgIHNpemVvZihzdHJ1Y3QgaHRhYl9lbGVtX3BjcHUpIDpcXG4rXFx0XFx0XFx0XFx0XFx0ICAgIG9mZnNldG9mKHN0cnVjdCBodGFiX2VsZW1fcGNwdSwgaGFzaCksIDgpO1xcbitcXHRlbHNlXFxuK1xcdFxcdGh0YWItXFx1MDAzZWtleV9vZmZzZXQgPSByb3VuZF91cChodGFiX2hhc19oYXNoKGh0YWIpID9cXG4rXFx0XFx0XFx0XFx0XFx0ICAgIHNpemVvZihzdHJ1Y3QgaHRhYl9lbGVtKSA6XFxuK1xcdFxcdFxcdFxcdFxcdCAgICBvZmZzZXRvZihzdHJ1Y3QgaHRhYl9lbGVtLCBoYXNoKSwgOCk7XFxuK1xcbitcXHRodGFiLVxcdTAwM2VlbGVtX3NpemUgPSBodGFiLVxcdTAwM2VrZXlfb2Zmc2V0ICsgcm91bmRfdXAoaHRhYi1cXHUwMDNlbWFwLmtleV9zaXplLCA4KTtcXG4gXFx0aWYgKHBlcmNwdSlcXG4gXFx0XFx0aHRhYi1cXHUwMDNlZWxlbV9zaXplICs9IHNpemVvZih2b2lkICopO1xcbiBcXHRlbHNlXFxuQEAgLTY5MiwxNCArNzk2LDE2IEBAIHN0YXRpYyBpbmxpbmUgc3RydWN0IGhsaXN0X251bGxzX2hlYWQgKnNlbGVjdF9idWNrZXQoc3RydWN0IGJwZl9odGFiICpodGFiLCB1MzJcXG4gfVxcbiBcXG4gLyogdGhpcyBsb29rdXAgZnVuY3Rpb24gY2FuIG9ubHkgYmUgY2FsbGVkIHdpdGggYnVja2V0IGxvY2sgdGFrZW4gKi9cXG4tc3RhdGljIHN0cnVjdCBodGFiX2VsZW0gKmxvb2t1cF9lbGVtX3JhdyhzdHJ1Y3QgaGxpc3RfbnVsbHNfaGVhZCAqaGVhZCwgdTMyIGhhc2gsXFxuK3N0YXRpYyBzdHJ1Y3QgaHRhYl9lbGVtICpsb29rdXBfZWxlbV9yYXcoc3RydWN0IGJwZl9odGFiICpodGFiLFxcbitcXHRcXHRcXHRcXHRcXHQgc3RydWN0IGhsaXN0X251bGxzX2hlYWQgKmhlYWQsIHUzMiBoYXNoLFxcbiBcXHRcXHRcXHRcXHRcXHQgdm9pZCAqa2V5LCB1MzIga2V5X3NpemUpXFxuIHtcXG4gXFx0c3RydWN0IGhsaXN0X251bGxzX25vZGUgKm47XFxuIFxcdHN0cnVjdCBodGFiX2VsZW0gKmw7XFxuIFxcbiBcXHRobGlzdF9udWxsc19mb3JfZWFjaF9lbnRyeV9yY3UobCwgbiwgaGVhZCwgaGFzaF9ub2RlKVxcbi1cXHRcXHRpZiAobC1cXHUwMDNlaGFzaCA9PSBoYXNoIFxcdTAwMjZcXHUwMDI2ICFtZW1jbXAoXFx1MDAyNmwtXFx1MDAzZWtleSwga2V5LCBrZXlfc2l6ZSkpXFxuK1xcdFxcdGlmICgoIWh0YWJfaGFzX2hhc2goaHRhYikgfHwgaHRhYl9lbGVtX2hhc2goaHRhYiwgbCkgPT0gaGFzaCkgXFx1MDAyNlxcdTAwMjZcXG4rXFx0XFx0ICAgICFtZW1jbXAoaHRhYl9lbGVtX2tleShodGFiLCBsKSwga2V5LCBrZXlfc2l6ZSkpXFxuIFxcdFxcdFxcdHJldHVybiBsO1xcbiBcXG4gXFx0cmV0dXJuIE5VTEw7XFxuQEAgLTcwOSw3ICs4MTUsOCBAQCBzdGF0aWMgc3RydWN0IGh0YWJfZWxlbSAqbG9va3VwX2VsZW1fcmF3KHN0cnVjdCBobGlzdF9udWxsc19oZWFkICpoZWFkLCB1MzIgaGFzaFxcbiAgKiB0aGUgdW5saWtlbHkgZXZlbnQgd2hlbiBlbGVtZW50cyBtb3ZlZCBmcm9tIG9uZSBidWNrZXQgaW50byBhbm90aGVyXFxuICAqIHdoaWxlIGxpbmsgbGlzdCBpcyBiZWluZyB3YWxrZWRcXG4gICovXFxuLXN0YXRpYyBzdHJ1Y3QgaHRhYl9lbGVtICpsb29rdXBfbnVsbHNfZWxlbV9yYXcoc3RydWN0IGhsaXN0X251bGxzX2hlYWQgKmhlYWQsXFxuK3N0YXRpYyBzdHJ1Y3QgaHRhYl9lbGVtICpsb29rdXBfbnVsbHNfZWxlbV9yYXcoc3RydWN0IGJwZl9odGFiICpodGFiLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgICAgc3RydWN0IGhsaXN0X251bGxzX2hlYWQgKmhlYWQsXFxuIFxcdFxcdFxcdFxcdFxcdCAgICAgICB1MzIgaGFzaCwgdm9pZCAqa2V5LFxcbiBcXHRcXHRcXHRcXHRcXHQgICAgICAgdTMyIGtleV9zaXplLCB1MzIgbl9idWNrZXRzKVxcbiB7XFxuQEAgLTcxOCw3ICs4MjUsOCBAQCBzdGF0aWMgc3RydWN0IGh0YWJfZWxlbSAqbG9va3VwX251bGxzX2VsZW1fcmF3KHN0cnVjdCBobGlzdF9udWxsc19oZWFkICpoZWFkLFxcbiBcXG4gYWdhaW46XFxuIFxcdGhsaXN0X251bGxzX2Zvcl9lYWNoX2VudHJ5X3JjdShsLCBuLCBoZWFkLCBoYXNoX25vZGUpXFxuLVxcdFxcdGlmIChsLVxcdTAwM2VoYXNoID09IGhhc2ggXFx1MDAyNlxcdTAwMjYgIW1lbWNtcChcXHUwMDI2bC1cXHUwMDNla2V5LCBrZXksIGtleV9zaXplKSlcXG4rXFx0XFx0aWYgKCghaHRhYl9oYXNfaGFzaChodGFiKSB8fCBodGFiX2VsZW1faGFzaChodGFiLCBsKSA9PSBoYXNoKSBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHQgICAgIW1lbWNtcChodGFiX2VsZW1fa2V5KGh0YWIsIGwpLCBrZXksIGtleV9zaXplKSlcXG4gXFx0XFx0XFx0cmV0dXJuIGw7XFxuIFxcbiBcXHRpZiAodW5saWtlbHkoZ2V0X251bGxzX3ZhbHVlKG4pICE9IChoYXNoIFxcdTAwMjYgKG5fYnVja2V0cyAtIDEpKSkpXFxuQEAgLTc0NywxNyArODU1LDE4IEBAIHN0YXRpYyB2b2lkICpfX2h0YWJfbWFwX2xvb2t1cF9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSlcXG4gXFxuIFxcdGhlYWQgPSBzZWxlY3RfYnVja2V0KGh0YWIsIGhhc2gpO1xcbiBcXG4tXFx0bCA9IGxvb2t1cF9udWxsc19lbGVtX3JhdyhoZWFkLCBoYXNoLCBrZXksIGtleV9zaXplLCBodGFiLVxcdTAwM2VuX2J1Y2tldHMpO1xcbitcXHRsID0gbG9va3VwX251bGxzX2VsZW1fcmF3KGh0YWIsIGhlYWQsIGhhc2gsIGtleSwga2V5X3NpemUsIGh0YWItXFx1MDAzZW5fYnVja2V0cyk7XFxuIFxcbiBcXHRyZXR1cm4gbDtcXG4gfVxcbiBcXG4gc3RhdGljIHZvaWQgKmh0YWJfbWFwX2xvb2t1cF9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSlcXG4ge1xcbitcXHRzdHJ1Y3QgYnBmX2h0YWIgKmh0YWIgPSBjb250YWluZXJfb2YobWFwLCBzdHJ1Y3QgYnBmX2h0YWIsIG1hcCk7XFxuIFxcdHN0cnVjdCBodGFiX2VsZW0gKmwgPSBfX2h0YWJfbWFwX2xvb2t1cF9lbGVtKG1hcCwga2V5KTtcXG4gXFxuIFxcdGlmIChsKVxcbi1cXHRcXHRyZXR1cm4gaHRhYl9lbGVtX3ZhbHVlKGwsIG1hcC1cXHUwMDNla2V5X3NpemUpO1xcbitcXHRcXHRyZXR1cm4gaHRhYl9lbGVtX3ZhbHVlKGh0YWIsIGwpO1xcbiBcXG4gXFx0cmV0dXJuIE5VTEw7XFxuIH1cXG5AQCAtNzc1LDYgKzg4NCw3IEBAIHN0YXRpYyB2b2lkICpodGFiX21hcF9sb29rdXBfZWxlbShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXkpXFxuICAqL1xcbiBzdGF0aWMgaW50IGh0YWJfbWFwX2dlbl9sb29rdXAoc3RydWN0IGJwZl9tYXAgKm1hcCwgc3RydWN0IGJwZl9pbnNuICppbnNuX2J1ZilcXG4ge1xcbitcXHRzdHJ1Y3QgYnBmX2h0YWIgKmh0YWIgPSBjb250YWluZXJfb2YobWFwLCBzdHJ1Y3QgYnBmX2h0YWIsIG1hcCk7XFxuIFxcdHN0cnVjdCBicGZfaW5zbiAqaW5zbiA9IGluc25fYnVmO1xcbiBcXHRjb25zdCBpbnQgcmV0ID0gQlBGX1JFR18wO1xcbiBcXG5AQCAtNzgzLDcgKzg5Myw3IEBAIHN0YXRpYyBpbnQgaHRhYl9tYXBfZ2VuX2xvb2t1cChzdHJ1Y3QgYnBmX21hcCAqbWFwLCBzdHJ1Y3QgYnBmX2luc24gKmluc25fYnVmKVxcbiBcXHQqaW5zbisrID0gQlBGX0VNSVRfQ0FMTChfX2h0YWJfbWFwX2xvb2t1cF9lbGVtKTtcXG4gXFx0Kmluc24rKyA9IEJQRl9KTVBfSU1NKEJQRl9KRVEsIHJldCwgMCwgMSk7XFxuIFxcdCppbnNuKysgPSBCUEZfQUxVNjRfSU1NKEJQRl9BREQsIHJldCxcXG4tXFx0XFx0XFx0XFx0b2Zmc2V0b2Yoc3RydWN0IGh0YWJfZWxlbSwga2V5KSArXFxuK1xcdFxcdFxcdFxcdGh0YWItXFx1MDAzZWtleV9vZmZzZXQgK1xcbiBcXHRcXHRcXHRcXHRyb3VuZF91cChtYXAtXFx1MDAzZWtleV9zaXplLCA4KSk7XFxuIFxcdHJldHVybiBpbnNuIC0gaW5zbl9idWY7XFxuIH1cXG5AQCAtNzkxLDEyICs5MDEsMTMgQEAgc3RhdGljIGludCBodGFiX21hcF9nZW5fbG9va3VwKHN0cnVjdCBicGZfbWFwICptYXAsIHN0cnVjdCBicGZfaW5zbiAqaW5zbl9idWYpXFxuIHN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCAqX19odGFiX2xydV9tYXBfbG9va3VwX2VsZW0oc3RydWN0IGJwZl9tYXAgKm1hcCxcXG4gXFx0XFx0XFx0XFx0XFx0XFx0XFx0dm9pZCAqa2V5LCBjb25zdCBib29sIG1hcmspXFxuIHtcXG4rXFx0c3RydWN0IGJwZl9odGFiICpodGFiID0gY29udGFpbmVyX29mKG1hcCwgc3RydWN0IGJwZl9odGFiLCBtYXApO1xcbiBcXHRzdHJ1Y3QgaHRhYl9lbGVtICpsID0gX19odGFiX21hcF9sb29rdXBfZWxlbShtYXAsIGtleSk7XFxuIFxcbiBcXHRpZiAobCkge1xcbiBcXHRcXHRpZiAobWFyaylcXG4tXFx0XFx0XFx0YnBmX2xydV9ub2RlX3NldF9yZWYoXFx1MDAyNmwtXFx1MDAzZWxydV9ub2RlKTtcXG4tXFx0XFx0cmV0dXJuIGh0YWJfZWxlbV92YWx1ZShsLCBtYXAtXFx1MDAzZWtleV9zaXplKTtcXG4rXFx0XFx0XFx0YnBmX2xydV9ub2RlX3NldF9yZWYoaHRhYl9lbGVtX2xydV9ub2RlKGwpKTtcXG4rXFx0XFx0cmV0dXJuIGh0YWJfZWxlbV92YWx1ZShodGFiLCBsKTtcXG4gXFx0fVxcbiBcXG4gXFx0cmV0dXJuIE5VTEw7XFxuQEAgLTgxNSw2ICs5MjYsNyBAQCBzdGF0aWMgdm9pZCAqaHRhYl9scnVfbWFwX2xvb2t1cF9lbGVtX3N5cyhzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXkpXFxuIHN0YXRpYyBpbnQgaHRhYl9scnVfbWFwX2dlbl9sb29rdXAoc3RydWN0IGJwZl9tYXAgKm1hcCxcXG4gXFx0XFx0XFx0XFx0ICAgc3RydWN0IGJwZl9pbnNuICppbnNuX2J1ZilcXG4ge1xcbitcXHRzdHJ1Y3QgYnBmX2h0YWIgKmh0YWIgPSBjb250YWluZXJfb2YobWFwLCBzdHJ1Y3QgYnBmX2h0YWIsIG1hcCk7XFxuIFxcdHN0cnVjdCBicGZfaW5zbiAqaW5zbiA9IGluc25fYnVmO1xcbiBcXHRjb25zdCBpbnQgcmV0ID0gQlBGX1JFR18wO1xcbiBcXHRjb25zdCBpbnQgcmVmX3JlZyA9IEJQRl9SRUdfMTtcXG5AQCAtODI0LDE1ICs5MzYsMTUgQEAgc3RhdGljIGludCBodGFiX2xydV9tYXBfZ2VuX2xvb2t1cChzdHJ1Y3QgYnBmX21hcCAqbWFwLFxcbiBcXHQqaW5zbisrID0gQlBGX0VNSVRfQ0FMTChfX2h0YWJfbWFwX2xvb2t1cF9lbGVtKTtcXG4gXFx0Kmluc24rKyA9IEJQRl9KTVBfSU1NKEJQRl9KRVEsIHJldCwgMCwgNCk7XFxuIFxcdCppbnNuKysgPSBCUEZfTERYX01FTShCUEZfQiwgcmVmX3JlZywgcmV0LFxcbi1cXHRcXHRcXHQgICAgICBvZmZzZXRvZihzdHJ1Y3QgaHRhYl9lbGVtLCBscnVfbm9kZSkgK1xcbitcXHRcXHRcXHQgICAgICBvZmZzZXRvZihzdHJ1Y3QgaHRhYl9lbGVtX2xydSwgbHJ1X25vZGUpICtcXG4gXFx0XFx0XFx0ICAgICAgb2Zmc2V0b2Yoc3RydWN0IGJwZl9scnVfbm9kZSwgcmVmKSk7XFxuIFxcdCppbnNuKysgPSBCUEZfSk1QX0lNTShCUEZfSk5FLCByZWZfcmVnLCAwLCAxKTtcXG4gXFx0Kmluc24rKyA9IEJQRl9TVF9NRU0oQlBGX0IsIHJldCxcXG4tXFx0XFx0XFx0ICAgICBvZmZzZXRvZihzdHJ1Y3QgaHRhYl9lbGVtLCBscnVfbm9kZSkgK1xcbitcXHRcXHRcXHQgICAgIG9mZnNldG9mKHN0cnVjdCBodGFiX2VsZW1fbHJ1LCBscnVfbm9kZSkgK1xcbiBcXHRcXHRcXHQgICAgIG9mZnNldG9mKHN0cnVjdCBicGZfbHJ1X25vZGUsIHJlZiksXFxuIFxcdFxcdFxcdCAgICAgMSk7XFxuIFxcdCppbnNuKysgPSBCUEZfQUxVNjRfSU1NKEJQRl9BREQsIHJldCxcXG4tXFx0XFx0XFx0XFx0b2Zmc2V0b2Yoc3RydWN0IGh0YWJfZWxlbSwga2V5KSArXFxuK1xcdFxcdFxcdFxcdGh0YWItXFx1MDAzZWtleV9vZmZzZXQgK1xcbiBcXHRcXHRcXHRcXHRyb3VuZF91cChtYXAtXFx1MDAzZWtleV9zaXplLCA4KSk7XFxuIFxcdHJldHVybiBpbnNuIC0gaW5zbl9idWY7XFxuIH1cXG5AQCAtODQ0LDEzICs5NTYsMTMgQEAgc3RhdGljIHZvaWQgY2hlY2tfYW5kX2NhbmNlbF9maWVsZHMoc3RydWN0IGJwZl9odGFiICpodGFiLFxcbiBcXHRcXHRyZXR1cm47XFxuIFxcbiBcXHRpZiAoaHRhYl9pc19wZXJjcHUoaHRhYikpIHtcXG4tXFx0XFx0dm9pZCBfX3BlcmNwdSAqcHB0ciA9IGh0YWJfZWxlbV9nZXRfcHRyKGVsZW0sIGh0YWItXFx1MDAzZW1hcC5rZXlfc2l6ZSk7XFxuK1xcdFxcdHZvaWQgX19wZXJjcHUgKnBwdHIgPSBodGFiX2VsZW1fZ2V0X3B0cihodGFiLCBlbGVtKTtcXG4gXFx0XFx0aW50IGNwdTtcXG4gXFxuIFxcdFxcdGZvcl9lYWNoX3Bvc3NpYmxlX2NwdShjcHUpXFxuIFxcdFxcdFxcdGJwZl9vYmpfY2FuY2VsX2ZpZWxkcyhcXHUwMDI2aHRhYi1cXHUwMDNlbWFwLCBwZXJfY3B1X3B0cihwcHRyLCBjcHUpKTtcXG4gXFx0fSBlbHNlIHtcXG4tXFx0XFx0dm9pZCAqbWFwX3ZhbHVlID0gaHRhYl9lbGVtX3ZhbHVlKGVsZW0sIGh0YWItXFx1MDAzZW1hcC5rZXlfc2l6ZSk7XFxuK1xcdFxcdHZvaWQgKm1hcF92YWx1ZSA9IGh0YWJfZWxlbV92YWx1ZShodGFiLCBlbGVtKTtcXG4gXFxuIFxcdFxcdGJwZl9vYmpfY2FuY2VsX2ZpZWxkcyhcXHUwMDI2aHRhYi1cXHUwMDNlbWFwLCBtYXBfdmFsdWUpO1xcbiBcXHR9XFxuQEAgLTg2OSw4ICs5ODEsOCBAQCBzdGF0aWMgYm9vbCBodGFiX2xydV9tYXBfZGVsZXRlX25vZGUodm9pZCAqYXJnLCBzdHJ1Y3QgYnBmX2xydV9ub2RlICpub2RlKVxcbiBcXHRzdHJ1Y3QgYnVja2V0ICpiO1xcbiBcXHRpbnQgcmV0O1xcbiBcXG4tXFx0dGd0X2wgPSBjb250YWluZXJfb2Yobm9kZSwgc3RydWN0IGh0YWJfZWxlbSwgbHJ1X25vZGUpO1xcbi1cXHRiID0gX19zZWxlY3RfYnVja2V0KGh0YWIsIHRndF9sLVxcdTAwM2VoYXNoKTtcXG4rXFx0dGd0X2wgPSAoc3RydWN0IGh0YWJfZWxlbSAqKWNvbnRhaW5lcl9vZihub2RlLCBzdHJ1Y3QgaHRhYl9lbGVtX2xydSwgbHJ1X25vZGUpO1xcbitcXHRiID0gX19zZWxlY3RfYnVja2V0KGh0YWIsIGh0YWJfZWxlbV9oYXNoKGh0YWIsIHRndF9sKSk7XFxuIFxcdGhlYWQgPSBcXHUwMDI2Yi1cXHUwMDNlaGVhZDtcXG4gXFxuIFxcdHJldCA9IGh0YWJfbG9ja19idWNrZXQoYiwgXFx1MDAyNmZsYWdzKTtcXG5AQCAtOTEyLDcgKzEwMjQsNyBAQCBzdGF0aWMgaW50IGh0YWJfbWFwX2dldF9uZXh0X2tleShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXksIHZvaWQgKm5leHRfa2V5KVxcbiBcXHRoZWFkID0gc2VsZWN0X2J1Y2tldChodGFiLCBoYXNoKTtcXG4gXFxuIFxcdC8qIGxvb2t1cCB0aGUga2V5ICovXFxuLVxcdGwgPSBsb29rdXBfbnVsbHNfZWxlbV9yYXcoaGVhZCwgaGFzaCwga2V5LCBrZXlfc2l6ZSwgaHRhYi1cXHUwMDNlbl9idWNrZXRzKTtcXG4rXFx0bCA9IGxvb2t1cF9udWxsc19lbGVtX3JhdyhodGFiLCBoZWFkLCBoYXNoLCBrZXksIGtleV9zaXplLCBodGFiLVxcdTAwM2VuX2J1Y2tldHMpO1xcbiBcXG4gXFx0aWYgKCFsKVxcbiBcXHRcXHRnb3RvIGZpbmRfZmlyc3RfZWxlbTtcXG5AQCAtOTIzLDcgKzEwMzUsNyBAQCBzdGF0aWMgaW50IGh0YWJfbWFwX2dldF9uZXh0X2tleShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXksIHZvaWQgKm5leHRfa2V5KVxcbiBcXG4gXFx0aWYgKG5leHRfbCkge1xcbiBcXHRcXHQvKiBpZiBuZXh0IGVsZW0gaW4gdGhpcyBoYXNoIGxpc3QgaXMgbm9uLXplcm8sIGp1c3QgcmV0dXJuIGl0ICovXFxuLVxcdFxcdG1lbWNweShuZXh0X2tleSwgbmV4dF9sLVxcdTAwM2VrZXksIGtleV9zaXplKTtcXG4rXFx0XFx0bWVtY3B5KG5leHRfa2V5LCBodGFiX2VsZW1fa2V5KGh0YWIsIG5leHRfbCksIGtleV9zaXplKTtcXG4gXFx0XFx0cmV0dXJuIDA7XFxuIFxcdH1cXG4gXFxuQEAgLTk0MSw3ICsxMDUzLDcgQEAgc3RhdGljIGludCBodGFiX21hcF9nZXRfbmV4dF9rZXkoc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5LCB2b2lkICpuZXh0X2tleSlcXG4gXFx0XFx0XFx0XFx0XFx0ICBzdHJ1Y3QgaHRhYl9lbGVtLCBoYXNoX25vZGUpO1xcbiBcXHRcXHRpZiAobmV4dF9sKSB7XFxuIFxcdFxcdFxcdC8qIGlmIGl0J3Mgbm90IGVtcHR5LCBqdXN0IHJldHVybiBpdCAqL1xcbi1cXHRcXHRcXHRtZW1jcHkobmV4dF9rZXksIG5leHRfbC1cXHUwMDNla2V5LCBrZXlfc2l6ZSk7XFxuK1xcdFxcdFxcdG1lbWNweShuZXh0X2tleSwgaHRhYl9lbGVtX2tleShodGFiLCBuZXh0X2wpLCBrZXlfc2l6ZSk7XFxuIFxcdFxcdFxcdHJldHVybiAwO1xcbiBcXHRcXHR9XFxuIFxcdH1cXG5AQCAtOTU1LDcgKzEwNjcsNyBAQCBzdGF0aWMgdm9pZCBodGFiX2VsZW1fZnJlZShzdHJ1Y3QgYnBmX2h0YWIgKmh0YWIsIHN0cnVjdCBodGFiX2VsZW0gKmwpXFxuIFxcdGNoZWNrX2FuZF9jYW5jZWxfZmllbGRzKGh0YWIsIGwpO1xcbiBcXG4gXFx0aWYgKGh0YWItXFx1MDAzZW1hcC5tYXBfdHlwZSA9PSBCUEZfTUFQX1RZUEVfUEVSQ1BVX0hBU0gpXFxuLVxcdFxcdGJwZl9tZW1fY2FjaGVfZnJlZShcXHUwMDI2aHRhYi1cXHUwMDNlcGNwdV9tYSwgbC1cXHUwMDNlcHRyX3RvX3BwdHIpO1xcbitcXHRcXHRicGZfbWVtX2NhY2hlX2ZyZWUoXFx1MDAyNmh0YWItXFx1MDAzZXBjcHVfbWEsIGh0YWJfZWxlbV9nZXRfcHRyX3RvX3BwdHIobCkpO1xcbiBcXHRicGZfbWVtX2NhY2hlX2ZyZWUoXFx1MDAyNmh0YWItXFx1MDAzZW1hLCBsKTtcXG4gfVxcbiBcXG5AQCAtOTY1LDcgKzEwNzcsNyBAQCBzdGF0aWMgdm9pZCBodGFiX3B1dF9mZF92YWx1ZShzdHJ1Y3QgYnBmX2h0YWIgKmh0YWIsIHN0cnVjdCBodGFiX2VsZW0gKmwpXFxuIFxcdHZvaWQgKnB0cjtcXG4gXFxuIFxcdGlmIChtYXAtXFx1MDAzZW9wcy1cXHUwMDNlbWFwX2ZkX3B1dF9wdHIpIHtcXG4tXFx0XFx0cHRyID0gZmRfaHRhYl9tYXBfZ2V0X3B0cihtYXAsIGwpO1xcbitcXHRcXHRwdHIgPSBmZF9odGFiX21hcF9nZXRfcHRyKGh0YWIsIGwpO1xcbiBcXHRcXHRtYXAtXFx1MDAzZW9wcy1cXHUwMDNlbWFwX2ZkX3B1dF9wdHIobWFwLCBwdHIsIHRydWUpO1xcbiBcXHR9XFxuIH1cXG5AQCAtMTExNywxMCArMTIyOSwxMCBAQCBzdGF0aWMgc3RydWN0IGh0YWJfZWxlbSAqYWxsb2NfaHRhYl9lbGVtKHN0cnVjdCBicGZfaHRhYiAqaHRhYiwgdm9pZCAqa2V5LFxcbiBcXHRcXHR9XFxuIFxcdH1cXG4gXFxuLVxcdG1lbWNweShsX25ldy1cXHUwMDNla2V5LCBrZXksIGtleV9zaXplKTtcXG4rXFx0bWVtY3B5KGh0YWJfZWxlbV9rZXkoaHRhYiwgbF9uZXcpLCBrZXksIGtleV9zaXplKTtcXG4gXFx0aWYgKHBlcmNwdSkge1xcbiBcXHRcXHRpZiAocHJlYWxsb2MpIHtcXG4tXFx0XFx0XFx0cHB0ciA9IGh0YWJfZWxlbV9nZXRfcHRyKGxfbmV3LCBrZXlfc2l6ZSk7XFxuK1xcdFxcdFxcdHBwdHIgPSBodGFiX2VsZW1fZ2V0X3B0cihodGFiLCBsX25ldyk7XFxuIFxcdFxcdH0gZWxzZSB7XFxuIFxcdFxcdFxcdC8qIGFsbG9jX3BlcmNwdSB6ZXJvLWZpbGxzICovXFxuIFxcdFxcdFxcdHZvaWQgKnB0ciA9IGJwZl9tZW1fY2FjaGVfYWxsb2MoXFx1MDAyNmh0YWItXFx1MDAzZXBjcHVfbWEpO1xcbkBAIC0xMTMwLDI2ICsxMjQyLDI2IEBAIHN0YXRpYyBzdHJ1Y3QgaHRhYl9lbGVtICphbGxvY19odGFiX2VsZW0oc3RydWN0IGJwZl9odGFiICpodGFiLCB2b2lkICprZXksXFxuIFxcdFxcdFxcdFxcdGxfbmV3ID0gRVJSX1BUUigtRU5PTUVNKTtcXG4gXFx0XFx0XFx0XFx0Z290byBkZWNfY291bnQ7XFxuIFxcdFxcdFxcdH1cXG4tXFx0XFx0XFx0bF9uZXctXFx1MDAzZXB0cl90b19wcHRyID0gcHRyO1xcbitcXHRcXHRcXHRodGFiX2VsZW1fc2V0X3B0cl90b19wcHRyKGxfbmV3LCBwdHIpO1xcbiBcXHRcXHRcXHRwcHRyID0gKih2b2lkIF9fcGVyY3B1ICoqKXB0cjtcXG4gXFx0XFx0fVxcbiBcXG4gXFx0XFx0cGNwdV9pbml0X3ZhbHVlKGh0YWIsIHBwdHIsIHZhbHVlLCBvbmFsbGNwdXMsIG1hcF9mbGFncyk7XFxuIFxcbiBcXHRcXHRpZiAoIXByZWFsbG9jKVxcbi1cXHRcXHRcXHRodGFiX2VsZW1fc2V0X3B0cihsX25ldywga2V5X3NpemUsIHBwdHIpO1xcbitcXHRcXHRcXHRodGFiX2VsZW1fc2V0X3B0cihodGFiLCBsX25ldywgcHB0cik7XFxuIFxcdH0gZWxzZSBpZiAoZmRfaHRhYl9tYXBfbmVlZHNfYWRqdXN0KGh0YWIpKSB7XFxuIFxcdFxcdHNpemUgPSByb3VuZF91cChzaXplLCA4KTtcXG4tXFx0XFx0bWVtY3B5KGh0YWJfZWxlbV92YWx1ZShsX25ldywga2V5X3NpemUpLCB2YWx1ZSwgc2l6ZSk7XFxuK1xcdFxcdG1lbWNweShodGFiX2VsZW1fdmFsdWUoaHRhYiwgbF9uZXcpLCB2YWx1ZSwgc2l6ZSk7XFxuIFxcdH0gZWxzZSBpZiAobWFwX2ZsYWdzIFxcdTAwMjYgQlBGX0ZfTE9DSykge1xcbiBcXHRcXHRjb3B5X21hcF92YWx1ZV9sb2NrZWQoXFx1MDAyNmh0YWItXFx1MDAzZW1hcCxcXG4tXFx0XFx0XFx0XFx0ICAgICAgaHRhYl9lbGVtX3ZhbHVlKGxfbmV3LCBrZXlfc2l6ZSksXFxuK1xcdFxcdFxcdFxcdCAgICAgIGh0YWJfZWxlbV92YWx1ZShodGFiLCBsX25ldyksXFxuIFxcdFxcdFxcdFxcdCAgICAgIHZhbHVlLCBmYWxzZSk7XFxuIFxcdH0gZWxzZSB7XFxuLVxcdFxcdGNvcHlfbWFwX3ZhbHVlKFxcdTAwMjZodGFiLVxcdTAwM2VtYXAsIGh0YWJfZWxlbV92YWx1ZShsX25ldywga2V5X3NpemUpLCB2YWx1ZSk7XFxuK1xcdFxcdGNvcHlfbWFwX3ZhbHVlKFxcdTAwMjZodGFiLVxcdTAwM2VtYXAsIGh0YWJfZWxlbV92YWx1ZShodGFiLCBsX25ldyksIHZhbHVlKTtcXG4gXFx0fVxcbiBcXG4tXFx0bF9uZXctXFx1MDAzZWhhc2ggPSBoYXNoO1xcbitcXHRodGFiX2VsZW1fc2V0X2hhc2goaHRhYiwgbF9uZXcsIGhhc2gpO1xcbiBcXHRyZXR1cm4gbF9uZXc7XFxuIGRlY19jb3VudDpcXG4gXFx0ZGVjX2VsZW1fY291bnQoaHRhYik7XFxuQEAgLTExOTksNyArMTMxMSw3IEBAIHN0YXRpYyBsb25nIGh0YWJfbWFwX3VwZGF0ZV9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSwgdm9pZCAqdmFsdWUsXFxuIFxcdFxcdGlmICh1bmxpa2VseSghYnRmX3JlY29yZF9oYXNfZmllbGQobWFwLVxcdTAwM2VyZWNvcmQsIEJQRl9TUElOX0xPQ0spKSlcXG4gXFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIFxcdFxcdC8qIGZpbmQgYW4gZWxlbWVudCB3aXRob3V0IHRha2luZyB0aGUgYnVja2V0IGxvY2sgKi9cXG4tXFx0XFx0bF9vbGQgPSBsb29rdXBfbnVsbHNfZWxlbV9yYXcoaGVhZCwgaGFzaCwga2V5LCBrZXlfc2l6ZSxcXG4rXFx0XFx0bF9vbGQgPSBsb29rdXBfbnVsbHNfZWxlbV9yYXcoaHRhYiwgaGVhZCwgaGFzaCwga2V5LCBrZXlfc2l6ZSxcXG4gXFx0XFx0XFx0XFx0XFx0ICAgICAgaHRhYi1cXHUwMDNlbl9idWNrZXRzKTtcXG4gXFx0XFx0cmV0ID0gY2hlY2tfZmxhZ3MoaHRhYiwgbF9vbGQsIG1hcF9mbGFncyk7XFxuIFxcdFxcdGlmIChyZXQpXFxuQEAgLTEyMDcsNyArMTMxOSw3IEBAIHN0YXRpYyBsb25nIGh0YWJfbWFwX3VwZGF0ZV9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSwgdm9pZCAqdmFsdWUsXFxuIFxcdFxcdGlmIChsX29sZCkge1xcbiBcXHRcXHRcXHQvKiBncmFiIHRoZSBlbGVtZW50IGxvY2sgYW5kIHVwZGF0ZSB2YWx1ZSBpbiBwbGFjZSAqL1xcbiBcXHRcXHRcXHRjb3B5X21hcF92YWx1ZV9sb2NrZWQobWFwLFxcbi1cXHRcXHRcXHRcXHRcXHQgICAgICBodGFiX2VsZW1fdmFsdWUobF9vbGQsIGtleV9zaXplKSxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICAgaHRhYl9lbGVtX3ZhbHVlKGh0YWIsIGxfb2xkKSxcXG4gXFx0XFx0XFx0XFx0XFx0ICAgICAgdmFsdWUsIGZhbHNlKTtcXG4gXFx0XFx0XFx0cmV0dXJuIDA7XFxuIFxcdFxcdH1cXG5AQCAtMTIyMSw3ICsxMzMzLDcgQEAgc3RhdGljIGxvbmcgaHRhYl9tYXBfdXBkYXRlX2VsZW0oc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5LCB2b2lkICp2YWx1ZSxcXG4gXFx0aWYgKHJldClcXG4gXFx0XFx0cmV0dXJuIHJldDtcXG4gXFxuLVxcdGxfb2xkID0gbG9va3VwX2VsZW1fcmF3KGhlYWQsIGhhc2gsIGtleSwga2V5X3NpemUpO1xcbitcXHRsX29sZCA9IGxvb2t1cF9lbGVtX3JhdyhodGFiLCBoZWFkLCBoYXNoLCBrZXksIGtleV9zaXplKTtcXG4gXFxuIFxcdHJldCA9IGNoZWNrX2ZsYWdzKGh0YWIsIGxfb2xkLCBtYXBfZmxhZ3MpO1xcbiBcXHRpZiAocmV0KVxcbkBAIC0xMjM1LDcgKzEzNDcsNyBAQCBzdGF0aWMgbG9uZyBodGFiX21hcF91cGRhdGVfZWxlbShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXksIHZvaWQgKnZhbHVlLFxcbiBcXHRcXHQgKiBhbmQgdXBkYXRlIGVsZW1lbnQgaW4gcGxhY2VcXG4gXFx0XFx0ICovXFxuIFxcdFxcdGNvcHlfbWFwX3ZhbHVlX2xvY2tlZChtYXAsXFxuLVxcdFxcdFxcdFxcdCAgICAgIGh0YWJfZWxlbV92YWx1ZShsX29sZCwga2V5X3NpemUpLFxcbitcXHRcXHRcXHRcXHQgICAgICBodGFiX2VsZW1fdmFsdWUoaHRhYiwgbF9vbGQpLFxcbiBcXHRcXHRcXHRcXHQgICAgICB2YWx1ZSwgZmFsc2UpO1xcbiBcXHRcXHRyZXQgPSAwO1xcbiBcXHRcXHRnb3RvIGVycjtcXG5AQCAtMTI3NSw3ICsxMzg3LDcgQEAgc3RhdGljIHZvaWQgaHRhYl9scnVfcHVzaF9mcmVlKHN0cnVjdCBicGZfaHRhYiAqaHRhYiwgc3RydWN0IGh0YWJfZWxlbSAqZWxlbSlcXG4ge1xcbiBcXHRjaGVja19hbmRfY2FuY2VsX2ZpZWxkcyhodGFiLCBlbGVtKTtcXG4gXFx0YnBmX21hcF9kZWNfZWxlbV9jb3VudChcXHUwMDI2aHRhYi1cXHUwMDNlbWFwKTtcXG4tXFx0YnBmX2xydV9wdXNoX2ZyZWUoXFx1MDAyNmh0YWItXFx1MDAzZWxydSwgXFx1MDAyNmVsZW0tXFx1MDAzZWxydV9ub2RlKTtcXG4rXFx0YnBmX2xydV9wdXNoX2ZyZWUoXFx1MDAyNmh0YWItXFx1MDAzZWxydSwgaHRhYl9lbGVtX2xydV9ub2RlKGVsZW0pKTtcXG4gfVxcbiBcXG4gc3RhdGljIGxvbmcgaHRhYl9scnVfbWFwX3VwZGF0ZV9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSwgdm9pZCAqdmFsdWUsXFxuQEAgLTEzMTAsMTMgKzE0MjIsMTMgQEAgc3RhdGljIGxvbmcgaHRhYl9scnVfbWFwX3VwZGF0ZV9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSwgdm9pZCAqdmFsdWVcXG4gXFx0bF9uZXcgPSBwcmVhbGxvY19scnVfcG9wKGh0YWIsIGtleSwgaGFzaCk7XFxuIFxcdGlmICghbF9uZXcpXFxuIFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbi1cXHRjb3B5X21hcF92YWx1ZShcXHUwMDI2aHRhYi1cXHUwMDNlbWFwLCBodGFiX2VsZW1fdmFsdWUobF9uZXcsIG1hcC1cXHUwMDNla2V5X3NpemUpLCB2YWx1ZSk7XFxuK1xcdGNvcHlfbWFwX3ZhbHVlKFxcdTAwMjZodGFiLVxcdTAwM2VtYXAsIGh0YWJfZWxlbV92YWx1ZShodGFiLCBsX25ldyksIHZhbHVlKTtcXG4gXFxuIFxcdHJldCA9IGh0YWJfbG9ja19idWNrZXQoYiwgXFx1MDAyNmZsYWdzKTtcXG4gXFx0aWYgKHJldClcXG4gXFx0XFx0Z290byBlcnJfbG9ja19idWNrZXQ7XFxuIFxcbi1cXHRsX29sZCA9IGxvb2t1cF9lbGVtX3JhdyhoZWFkLCBoYXNoLCBrZXksIGtleV9zaXplKTtcXG4rXFx0bF9vbGQgPSBsb29rdXBfZWxlbV9yYXcoaHRhYiwgaGVhZCwgaGFzaCwga2V5LCBrZXlfc2l6ZSk7XFxuIFxcbiBcXHRyZXQgPSBjaGVja19mbGFncyhodGFiLCBsX29sZCwgbWFwX2ZsYWdzKTtcXG4gXFx0aWYgKHJldClcXG5AQCAtMTMyNyw3ICsxNDM5LDcgQEAgc3RhdGljIGxvbmcgaHRhYl9scnVfbWFwX3VwZGF0ZV9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSwgdm9pZCAqdmFsdWVcXG4gXFx0ICovXFxuIFxcdGhsaXN0X251bGxzX2FkZF9oZWFkX3JjdShcXHUwMDI2bF9uZXctXFx1MDAzZWhhc2hfbm9kZSwgaGVhZCk7XFxuIFxcdGlmIChsX29sZCkge1xcbi1cXHRcXHRicGZfbHJ1X25vZGVfc2V0X3JlZihcXHUwMDI2bF9uZXctXFx1MDAzZWxydV9ub2RlKTtcXG4rXFx0XFx0YnBmX2xydV9ub2RlX3NldF9yZWYoaHRhYl9lbGVtX2xydV9ub2RlKGxfbmV3KSk7XFxuIFxcdFxcdGhsaXN0X251bGxzX2RlbF9yY3UoXFx1MDAyNmxfb2xkLVxcdTAwM2VoYXNoX25vZGUpO1xcbiBcXHR9XFxuIFxcdHJldCA9IDA7XFxuQEAgLTEzODMsNyArMTQ5NSw3IEBAIHN0YXRpYyBsb25nIGh0YWJfbWFwX3VwZGF0ZV9lbGVtX2luX3BsYWNlKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSxcXG4gXFx0aWYgKHJldClcXG4gXFx0XFx0cmV0dXJuIHJldDtcXG4gXFxuLVxcdGxfb2xkID0gbG9va3VwX2VsZW1fcmF3KGhlYWQsIGhhc2gsIGtleSwga2V5X3NpemUpO1xcbitcXHRsX29sZCA9IGxvb2t1cF9lbGVtX3JhdyhodGFiLCBoZWFkLCBoYXNoLCBrZXksIGtleV9zaXplKTtcXG4gXFxuIFxcdHJldCA9IGNoZWNrX2ZsYWdzKGh0YWIsIGxfb2xkLCBtYXBfZmxhZ3MpO1xcbiBcXHRpZiAocmV0KVxcbkBAIC0xMzkyLDEwICsxNTA0LDEwIEBAIHN0YXRpYyBsb25nIGh0YWJfbWFwX3VwZGF0ZV9lbGVtX2luX3BsYWNlKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSxcXG4gXFx0aWYgKGxfb2xkKSB7XFxuIFxcdFxcdC8qIFVwZGF0ZSB2YWx1ZSBpbi1wbGFjZSAqL1xcbiBcXHRcXHRpZiAocGVyY3B1KSB7XFxuLVxcdFxcdFxcdHBjcHVfY29weV92YWx1ZShodGFiLCBodGFiX2VsZW1fZ2V0X3B0cihsX29sZCwga2V5X3NpemUpLFxcbitcXHRcXHRcXHRwY3B1X2NvcHlfdmFsdWUoaHRhYiwgaHRhYl9lbGVtX2dldF9wdHIoaHRhYiwgbF9vbGQpLFxcbiBcXHRcXHRcXHRcXHRcXHR2YWx1ZSwgb25hbGxjcHVzLCBtYXBfZmxhZ3MpO1xcbiBcXHRcXHR9IGVsc2Uge1xcbi1cXHRcXHRcXHR2b2lkICoqaW5uZXJfbWFwX3BwdHIgPSBodGFiX2VsZW1fdmFsdWUobF9vbGQsIGtleV9zaXplKTtcXG4rXFx0XFx0XFx0dm9pZCAqKmlubmVyX21hcF9wcHRyID0gaHRhYl9lbGVtX3ZhbHVlKGh0YWIsIGxfb2xkKTtcXG4gXFxuIFxcdFxcdFxcdG9sZF9tYXBfcHRyID0gKmlubmVyX21hcF9wcHRyO1xcbiBcXHRcXHRcXHRXUklURV9PTkNFKCppbm5lcl9tYXBfcHB0ciwgKih2b2lkICoqKXZhbHVlKTtcXG5AQCAtMTQ1NiwyMCArMTU2OCwyMCBAQCBzdGF0aWMgbG9uZyBfX2h0YWJfbHJ1X3BlcmNwdV9tYXBfdXBkYXRlX2VsZW0oc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5LFxcbiBcXHRpZiAocmV0KVxcbiBcXHRcXHRnb3RvIGVycl9sb2NrX2J1Y2tldDtcXG4gXFxuLVxcdGxfb2xkID0gbG9va3VwX2VsZW1fcmF3KGhlYWQsIGhhc2gsIGtleSwga2V5X3NpemUpO1xcbitcXHRsX29sZCA9IGxvb2t1cF9lbGVtX3JhdyhodGFiLCBoZWFkLCBoYXNoLCBrZXksIGtleV9zaXplKTtcXG4gXFxuIFxcdHJldCA9IGNoZWNrX2ZsYWdzKGh0YWIsIGxfb2xkLCBtYXBfZmxhZ3MpO1xcbiBcXHRpZiAocmV0KVxcbiBcXHRcXHRnb3RvIGVycjtcXG4gXFxuIFxcdGlmIChsX29sZCkge1xcbi1cXHRcXHRicGZfbHJ1X25vZGVfc2V0X3JlZihcXHUwMDI2bF9vbGQtXFx1MDAzZWxydV9ub2RlKTtcXG4rXFx0XFx0YnBmX2xydV9ub2RlX3NldF9yZWYoaHRhYl9lbGVtX2xydV9ub2RlKGxfb2xkKSk7XFxuIFxcbiBcXHRcXHQvKiBwZXItY3B1IGhhc2ggbWFwIGNhbiB1cGRhdGUgdmFsdWUgaW4tcGxhY2UgKi9cXG4tXFx0XFx0cGNwdV9jb3B5X3ZhbHVlKGh0YWIsIGh0YWJfZWxlbV9nZXRfcHRyKGxfb2xkLCBrZXlfc2l6ZSksXFxuK1xcdFxcdHBjcHVfY29weV92YWx1ZShodGFiLCBodGFiX2VsZW1fZ2V0X3B0cihodGFiLCBsX29sZCksXFxuIFxcdFxcdFxcdFxcdHZhbHVlLCBvbmFsbGNwdXMsIG1hcF9mbGFncyk7XFxuIFxcdH0gZWxzZSB7XFxuLVxcdFxcdHBjcHVfaW5pdF92YWx1ZShodGFiLCBodGFiX2VsZW1fZ2V0X3B0cihsX25ldywga2V5X3NpemUpLFxcbitcXHRcXHRwY3B1X2luaXRfdmFsdWUoaHRhYiwgaHRhYl9lbGVtX2dldF9wdHIoaHRhYiwgbF9uZXcpLFxcbiBcXHRcXHRcXHRcXHR2YWx1ZSwgb25hbGxjcHVzLCBtYXBfZmxhZ3MpO1xcbiBcXHRcXHRobGlzdF9udWxsc19hZGRfaGVhZF9yY3UoXFx1MDAyNmxfbmV3LVxcdTAwM2VoYXNoX25vZGUsIGhlYWQpO1xcbiBcXHRcXHRsX25ldyA9IE5VTEw7XFxuQEAgLTE0ODAsNyArMTU5Miw3IEBAIHN0YXRpYyBsb25nIF9faHRhYl9scnVfcGVyY3B1X21hcF91cGRhdGVfZWxlbShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXksXFxuIGVycl9sb2NrX2J1Y2tldDpcXG4gXFx0aWYgKGxfbmV3KSB7XFxuIFxcdFxcdGJwZl9tYXBfZGVjX2VsZW1fY291bnQoXFx1MDAyNmh0YWItXFx1MDAzZW1hcCk7XFxuLVxcdFxcdGJwZl9scnVfcHVzaF9mcmVlKFxcdTAwMjZodGFiLVxcdTAwM2VscnUsIFxcdTAwMjZsX25ldy1cXHUwMDNlbHJ1X25vZGUpO1xcbitcXHRcXHRicGZfbHJ1X3B1c2hfZnJlZShcXHUwMDI2aHRhYi1cXHUwMDNlbHJ1LCBodGFiX2VsZW1fbHJ1X25vZGUobF9uZXcpKTtcXG4gXFx0fVxcbiBcXHRyZXR1cm4gcmV0O1xcbiB9XFxuQEAgLTE1MjEsNyArMTYzMyw3IEBAIHN0YXRpYyBsb25nIGh0YWJfbWFwX2RlbGV0ZV9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSlcXG4gXFx0aWYgKHJldClcXG4gXFx0XFx0cmV0dXJuIHJldDtcXG4gXFxuLVxcdGwgPSBsb29rdXBfZWxlbV9yYXcoaGVhZCwgaGFzaCwga2V5LCBrZXlfc2l6ZSk7XFxuK1xcdGwgPSBsb29rdXBfZWxlbV9yYXcoaHRhYiwgaGVhZCwgaGFzaCwga2V5LCBrZXlfc2l6ZSk7XFxuIFxcdGlmIChsKVxcbiBcXHRcXHRobGlzdF9udWxsc19kZWxfcmN1KFxcdTAwMjZsLVxcdTAwM2VoYXNoX25vZGUpO1xcbiBcXHRlbHNlXFxuQEAgLTE1NTYsNyArMTY2OCw3IEBAIHN0YXRpYyBsb25nIGh0YWJfbHJ1X21hcF9kZWxldGVfZWxlbShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXkpXFxuIFxcdGlmIChyZXQpXFxuIFxcdFxcdHJldHVybiByZXQ7XFxuIFxcbi1cXHRsID0gbG9va3VwX2VsZW1fcmF3KGhlYWQsIGhhc2gsIGtleSwga2V5X3NpemUpO1xcbitcXHRsID0gbG9va3VwX2VsZW1fcmF3KGh0YWIsIGhlYWQsIGhhc2gsIGtleSwga2V5X3NpemUpO1xcbiBcXG4gXFx0aWYgKGwpXFxuIFxcdFxcdGhsaXN0X251bGxzX2RlbF9yY3UoXFx1MDAyNmwtXFx1MDAzZWhhc2hfbm9kZSk7XFxuQEAgLTE2MDIsNyArMTcxNCw3IEBAIHN0YXRpYyB2b2lkIGh0YWJfZnJlZV9tYWxsb2NlZF9pbnRlcm5hbF9zdHJ1Y3RzKHN0cnVjdCBicGZfaHRhYiAqaHRhYilcXG4gXFx0XFx0aGxpc3RfbnVsbHNfZm9yX2VhY2hfZW50cnkobCwgbiwgaGVhZCwgaGFzaF9ub2RlKSB7XFxuIFxcdFxcdFxcdC8qIFdlIG9ubHkgZnJlZSBpbnRlcm5hbCBzdHJ1Y3RzIG9uIHVyZWYgZHJvcHBpbmcgdG8gemVybyAqL1xcbiBcXHRcXHRcXHRicGZfbWFwX2ZyZWVfaW50ZXJuYWxfc3RydWN0cyhcXHUwMDI2aHRhYi1cXHUwMDNlbWFwLFxcbi1cXHRcXHRcXHRcXHRcXHRcXHQgICAgICBodGFiX2VsZW1fdmFsdWUobCwgaHRhYi1cXHUwMDNlbWFwLmtleV9zaXplKSk7XFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgICAgIGh0YWJfZWxlbV92YWx1ZShodGFiLCBsKSk7XFxuIFxcdFxcdH1cXG4gXFx0XFx0Y29uZF9yZXNjaGVkX3JjdSgpO1xcbiBcXHR9XFxuQEAgLTE2OTcsNyArMTgwOSw3IEBAIHN0YXRpYyBpbnQgX19odGFiX21hcF9sb29rdXBfYW5kX2RlbGV0ZV9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSxcXG4gXFx0aWYgKHJldClcXG4gXFx0XFx0cmV0dXJuIHJldDtcXG4gXFxuLVxcdGwgPSBsb29rdXBfZWxlbV9yYXcoaGVhZCwgaGFzaCwga2V5LCBrZXlfc2l6ZSk7XFxuK1xcdGwgPSBsb29rdXBfZWxlbV9yYXcoaHRhYiwgaGVhZCwgaGFzaCwga2V5LCBrZXlfc2l6ZSk7XFxuIFxcdGlmICghbCkge1xcbiBcXHRcXHRyZXQgPSAtRU5PRU5UO1xcbiBcXHRcXHRnb3RvIG91dF91bmxvY2s7XFxuQEAgLTE3MDgsMTQgKzE4MjAsMTQgQEAgc3RhdGljIGludCBfX2h0YWJfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2VsZW0oc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5LFxcbiBcXHRcXHR2b2lkIF9fcGVyY3B1ICpwcHRyO1xcbiBcXHRcXHRpbnQgb2ZmID0gMCwgY3B1O1xcbiBcXG4tXFx0XFx0cHB0ciA9IGh0YWJfZWxlbV9nZXRfcHRyKGwsIGtleV9zaXplKTtcXG4rXFx0XFx0cHB0ciA9IGh0YWJfZWxlbV9nZXRfcHRyKGh0YWIsIGwpO1xcbiBcXHRcXHRmb3JfZWFjaF9wb3NzaWJsZV9jcHUoY3B1KSB7XFxuIFxcdFxcdFxcdGNvcHlfbWFwX3ZhbHVlX2xvbmcoXFx1MDAyNmh0YWItXFx1MDAzZW1hcCwgdmFsdWUgKyBvZmYsIHBlcl9jcHVfcHRyKHBwdHIsIGNwdSkpO1xcbiBcXHRcXHRcXHRjaGVja19hbmRfaW5pdF9tYXBfdmFsdWUoXFx1MDAyNmh0YWItXFx1MDAzZW1hcCwgdmFsdWUgKyBvZmYpO1xcbiBcXHRcXHRcXHRvZmYgKz0gcm91bmR1cF92YWx1ZV9zaXplO1xcbiBcXHRcXHR9XFxuIFxcdH0gZWxzZSB7XFxuLVxcdFxcdHZvaWQgKnNyYyA9IGh0YWJfZWxlbV92YWx1ZShsLCBtYXAtXFx1MDAzZWtleV9zaXplKTtcXG4rXFx0XFx0dm9pZCAqc3JjID0gaHRhYl9lbGVtX3ZhbHVlKGh0YWIsIGwpO1xcbiBcXG4gXFx0XFx0aWYgKGZsYWdzIFxcdTAwMjYgQlBGX0ZfTE9DSylcXG4gXFx0XFx0XFx0Y29weV9tYXBfdmFsdWVfbG9ja2VkKG1hcCwgdmFsdWUsIHNyYywgdHJ1ZSk7XFxuQEAgLTE4OTgsMTMgKzIwMTAsMTMgQEAgX19odGFiX21hcF9sb29rdXBfYW5kX2RlbGV0ZV9iYXRjaChzdHJ1Y3QgYnBmX21hcCAqbWFwLFxcbiBcXHRcXHRnb3RvIG5leHRfYmF0Y2g7XFxuIFxcbiBcXHRobGlzdF9udWxsc19mb3JfZWFjaF9lbnRyeV9zYWZlKGwsIG4sIGhlYWQsIGhhc2hfbm9kZSkge1xcbi1cXHRcXHRtZW1jcHkoZHN0X2tleSwgbC1cXHUwMDNla2V5LCBrZXlfc2l6ZSk7XFxuK1xcdFxcdG1lbWNweShkc3Rfa2V5LCBodGFiX2VsZW1fa2V5KGh0YWIsIGwpLCBrZXlfc2l6ZSk7XFxuIFxcbiBcXHRcXHRpZiAoaXNfcGVyY3B1KSB7XFxuIFxcdFxcdFxcdGludCBvZmYgPSAwLCBjcHU7XFxuIFxcdFxcdFxcdHZvaWQgX19wZXJjcHUgKnBwdHI7XFxuIFxcbi1cXHRcXHRcXHRwcHRyID0gaHRhYl9lbGVtX2dldF9wdHIobCwgbWFwLVxcdTAwM2VrZXlfc2l6ZSk7XFxuK1xcdFxcdFxcdHBwdHIgPSBodGFiX2VsZW1fZ2V0X3B0cihodGFiLCBsKTtcXG4gXFx0XFx0XFx0aWYgKGVsZW1fbWFwX2ZsYWdzIFxcdTAwMjYgQlBGX0ZfQ1BVKSB7XFxuIFxcdFxcdFxcdFxcdGNwdSA9IGVsZW1fbWFwX2ZsYWdzIFxcdTAwM2VcXHUwMDNlIDMyO1xcbiBcXHRcXHRcXHRcXHRjb3B5X21hcF92YWx1ZShcXHUwMDI2aHRhYi1cXHUwMDNlbWFwLCBkc3RfdmFsLCBwZXJfY3B1X3B0cihwcHRyLCBjcHUpKTtcXG5AQCAtMTkxOCw3ICsyMDMwLDcgQEAgX19odGFiX21hcF9sb29rdXBfYW5kX2RlbGV0ZV9iYXRjaChzdHJ1Y3QgYnBmX21hcCAqbWFwLFxcbiBcXHRcXHRcXHRcXHR9XFxuIFxcdFxcdFxcdH1cXG4gXFx0XFx0fSBlbHNlIHtcXG4tXFx0XFx0XFx0dmFsdWUgPSBodGFiX2VsZW1fdmFsdWUobCwga2V5X3NpemUpO1xcbitcXHRcXHRcXHR2YWx1ZSA9IGh0YWJfZWxlbV92YWx1ZShodGFiLCBsKTtcXG4gXFx0XFx0XFx0aWYgKGlzX2ZkX2h0YWIoaHRhYikpIHtcXG4gXFx0XFx0XFx0XFx0c3RydWN0IGJwZl9tYXAgKippbm5lcl9tYXAgPSB2YWx1ZTtcXG4gXFxuQEAgLTIxODMsMTIgKzIyOTUsMTIgQEAgc3RhdGljIGludCBfX2JwZl9oYXNoX21hcF9zZXFfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgc3RydWN0IGh0YWJfZWxlbSAqZWxlbSlcXG4gXFx0XFx0Y3R4Lm1ldGEgPSBcXHUwMDI2bWV0YTtcXG4gXFx0XFx0Y3R4Lm1hcCA9IGluZm8tXFx1MDAzZW1hcDtcXG4gXFx0XFx0aWYgKGVsZW0pIHtcXG4tXFx0XFx0XFx0Y3R4LmtleSA9IGVsZW0tXFx1MDAzZWtleTtcXG4rXFx0XFx0XFx0Y3R4LmtleSA9IGh0YWJfZWxlbV9rZXkoaW5mby1cXHUwMDNlaHRhYiwgZWxlbSk7XFxuIFxcdFxcdFxcdGlmICghaW5mby1cXHUwMDNlcGVyY3B1X3ZhbHVlX2J1Zikge1xcbi1cXHRcXHRcXHRcXHRjdHgudmFsdWUgPSBodGFiX2VsZW1fdmFsdWUoZWxlbSwgbWFwLVxcdTAwM2VrZXlfc2l6ZSk7XFxuK1xcdFxcdFxcdFxcdGN0eC52YWx1ZSA9IGh0YWJfZWxlbV92YWx1ZShpbmZvLVxcdTAwM2VodGFiLCBlbGVtKTtcXG4gXFx0XFx0XFx0fSBlbHNlIHtcXG4gXFx0XFx0XFx0XFx0cm91bmR1cF92YWx1ZV9zaXplID0gcm91bmRfdXAobWFwLVxcdTAwM2V2YWx1ZV9zaXplLCA4KTtcXG4tXFx0XFx0XFx0XFx0cHB0ciA9IGh0YWJfZWxlbV9nZXRfcHRyKGVsZW0sIG1hcC1cXHUwMDNla2V5X3NpemUpO1xcbitcXHRcXHRcXHRcXHRwcHRyID0gaHRhYl9lbGVtX2dldF9wdHIoaW5mby1cXHUwMDNlaHRhYiwgZWxlbSk7XFxuIFxcdFxcdFxcdFxcdGZvcl9lYWNoX3Bvc3NpYmxlX2NwdShjcHUpIHtcXG4gXFx0XFx0XFx0XFx0XFx0Y29weV9tYXBfdmFsdWVfbG9uZyhtYXAsIGluZm8tXFx1MDAzZXBlcmNwdV92YWx1ZV9idWYgKyBvZmYsXFxuIFxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICBwZXJfY3B1X3B0cihwcHRyLCBjcHUpKTtcXG5AQCAtMjI5MywxMyArMjQwNSwxMyBAQCBzdGF0aWMgbG9uZyBicGZfZm9yX2VhY2hfaGFzaF9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIGJwZl9jYWxsYmFja190IGNhbGxiYWNrX1xcbiBcXHRcXHRyY3VfcmVhZF9sb2NrKCk7XFxuIFxcdFxcdGhlYWQgPSBcXHUwMDI2Yi1cXHUwMDNlaGVhZDtcXG4gXFx0XFx0aGxpc3RfbnVsbHNfZm9yX2VhY2hfZW50cnlfc2FmZShlbGVtLCBuLCBoZWFkLCBoYXNoX25vZGUpIHtcXG4tXFx0XFx0XFx0a2V5ID0gZWxlbS1cXHUwMDNla2V5O1xcbitcXHRcXHRcXHRrZXkgPSBodGFiX2VsZW1fa2V5KGh0YWIsIGVsZW0pO1xcbiBcXHRcXHRcXHRpZiAoaXNfcGVyY3B1KSB7XFxuIFxcdFxcdFxcdFxcdC8qIGN1cnJlbnQgY3B1IHZhbHVlIGZvciBwZXJjcHUgbWFwICovXFxuLVxcdFxcdFxcdFxcdHBwdHIgPSBodGFiX2VsZW1fZ2V0X3B0cihlbGVtLCBtYXAtXFx1MDAzZWtleV9zaXplKTtcXG4rXFx0XFx0XFx0XFx0cHB0ciA9IGh0YWJfZWxlbV9nZXRfcHRyKGh0YWIsIGVsZW0pO1xcbiBcXHRcXHRcXHRcXHR2YWwgPSB0aGlzX2NwdV9wdHIocHB0cik7XFxuIFxcdFxcdFxcdH0gZWxzZSB7XFxuLVxcdFxcdFxcdFxcdHZhbCA9IGh0YWJfZWxlbV92YWx1ZShlbGVtLCBtYXAtXFx1MDAzZWtleV9zaXplKTtcXG4rXFx0XFx0XFx0XFx0dmFsID0gaHRhYl9lbGVtX3ZhbHVlKGh0YWIsIGVsZW0pO1xcbiBcXHRcXHRcXHR9XFxuIFxcdFxcdFxcdG51bV9lbGVtcysrO1xcbiBcXHRcXHRcXHRyZXQgPSBjYWxsYmFja19mbigodTY0KShsb25nKW1hcCwgKHU2NCkobG9uZylrZXksXFxuQEAgLTI0MDMsMTAgKzI1MTUsMTEgQEAgY29uc3Qgc3RydWN0IGJwZl9tYXBfb3BzIGh0YWJfbHJ1X21hcF9vcHMgPSB7XFxuIC8qIENhbGxlZCBmcm9tIGVCUEYgcHJvZ3JhbSAqL1xcbiBzdGF0aWMgdm9pZCAqaHRhYl9wZXJjcHVfbWFwX2xvb2t1cF9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSlcXG4ge1xcbitcXHRzdHJ1Y3QgYnBmX2h0YWIgKmh0YWIgPSBjb250YWluZXJfb2YobWFwLCBzdHJ1Y3QgYnBmX2h0YWIsIG1hcCk7XFxuIFxcdHN0cnVjdCBodGFiX2VsZW0gKmwgPSBfX2h0YWJfbWFwX2xvb2t1cF9lbGVtKG1hcCwga2V5KTtcXG4gXFxuIFxcdGlmIChsKVxcbi1cXHRcXHRyZXR1cm4gdGhpc19jcHVfcHRyKGh0YWJfZWxlbV9nZXRfcHRyKGwsIG1hcC1cXHUwMDNla2V5X3NpemUpKTtcXG4rXFx0XFx0cmV0dXJuIHRoaXNfY3B1X3B0cihodGFiX2VsZW1fZ2V0X3B0cihodGFiLCBsKSk7XFxuIFxcdGVsc2VcXG4gXFx0XFx0cmV0dXJuIE5VTEw7XFxuIH1cXG5AQCAtMjQxNCw2ICsyNTI3LDcgQEAgc3RhdGljIHZvaWQgKmh0YWJfcGVyY3B1X21hcF9sb29rdXBfZWxlbShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXkpXFxuIC8qIGlubGluZSBicGZfbWFwX2xvb2t1cF9lbGVtKCkgY2FsbCBmb3IgcGVyLUNQVSBoYXNobWFwICovXFxuIHN0YXRpYyBpbnQgaHRhYl9wZXJjcHVfbWFwX2dlbl9sb29rdXAoc3RydWN0IGJwZl9tYXAgKm1hcCwgc3RydWN0IGJwZl9pbnNuICppbnNuX2J1ZilcXG4ge1xcbitcXHRzdHJ1Y3QgYnBmX2h0YWIgKmh0YWIgPSBjb250YWluZXJfb2YobWFwLCBzdHJ1Y3QgYnBmX2h0YWIsIG1hcCk7XFxuIFxcdHN0cnVjdCBicGZfaW5zbiAqaW5zbiA9IGluc25fYnVmO1xcbiBcXG4gXFx0aWYgKCFicGZfaml0X3N1cHBvcnRzX3BlcmNwdV9pbnNuKCkpXFxuQEAgLTI0MjQsNyArMjUzOCw3IEBAIHN0YXRpYyBpbnQgaHRhYl9wZXJjcHVfbWFwX2dlbl9sb29rdXAoc3RydWN0IGJwZl9tYXAgKm1hcCwgc3RydWN0IGJwZl9pbnNuICppbnNuXFxuIFxcdCppbnNuKysgPSBCUEZfRU1JVF9DQUxMKF9faHRhYl9tYXBfbG9va3VwX2VsZW0pO1xcbiBcXHQqaW5zbisrID0gQlBGX0pNUF9JTU0oQlBGX0pFUSwgQlBGX1JFR18wLCAwLCAzKTtcXG4gXFx0Kmluc24rKyA9IEJQRl9BTFU2NF9JTU0oQlBGX0FERCwgQlBGX1JFR18wLFxcbi1cXHRcXHRcXHRcXHRvZmZzZXRvZihzdHJ1Y3QgaHRhYl9lbGVtLCBrZXkpICsgcm91bmR1cChtYXAtXFx1MDAzZWtleV9zaXplLCA4KSk7XFxuK1xcdFxcdFxcdFxcdGh0YWItXFx1MDAzZWtleV9vZmZzZXQgKyByb3VuZHVwKG1hcC1cXHUwMDNla2V5X3NpemUsIDgpKTtcXG4gXFx0Kmluc24rKyA9IEJQRl9MRFhfTUVNKEJQRl9EVywgQlBGX1JFR18wLCBCUEZfUkVHXzAsIDApO1xcbiBcXHQqaW5zbisrID0gQlBGX01PVjY0X1BFUkNQVV9SRUcoQlBGX1JFR18wLCBCUEZfUkVHXzApO1xcbiBcXG5AQCAtMjQzMyw2ICsyNTQ3LDcgQEAgc3RhdGljIGludCBodGFiX3BlcmNwdV9tYXBfZ2VuX2xvb2t1cChzdHJ1Y3QgYnBmX21hcCAqbWFwLCBzdHJ1Y3QgYnBmX2luc24gKmluc25cXG4gXFxuIHN0YXRpYyB2b2lkICpodGFiX3BlcmNwdV9tYXBfbG9va3VwX3BlcmNwdV9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSwgdTMyIGNwdSlcXG4ge1xcbitcXHRzdHJ1Y3QgYnBmX2h0YWIgKmh0YWIgPSBjb250YWluZXJfb2YobWFwLCBzdHJ1Y3QgYnBmX2h0YWIsIG1hcCk7XFxuIFxcdHN0cnVjdCBodGFiX2VsZW0gKmw7XFxuIFxcbiBcXHRpZiAoY3B1IFxcdTAwM2U9IG5yX2NwdV9pZHMpXFxuQEAgLTI0NDAsMTggKzI1NTUsMTkgQEAgc3RhdGljIHZvaWQgKmh0YWJfcGVyY3B1X21hcF9sb29rdXBfcGVyY3B1X2VsZW0oc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5LFxcbiBcXG4gXFx0bCA9IF9faHRhYl9tYXBfbG9va3VwX2VsZW0obWFwLCBrZXkpO1xcbiBcXHRpZiAobClcXG4tXFx0XFx0cmV0dXJuIHBlcl9jcHVfcHRyKGh0YWJfZWxlbV9nZXRfcHRyKGwsIG1hcC1cXHUwMDNla2V5X3NpemUpLCBjcHUpO1xcbitcXHRcXHRyZXR1cm4gcGVyX2NwdV9wdHIoaHRhYl9lbGVtX2dldF9wdHIoaHRhYiwgbCksIGNwdSk7XFxuIFxcdGVsc2VcXG4gXFx0XFx0cmV0dXJuIE5VTEw7XFxuIH1cXG4gXFxuIHN0YXRpYyB2b2lkICpodGFiX2xydV9wZXJjcHVfbWFwX2xvb2t1cF9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSlcXG4ge1xcbitcXHRzdHJ1Y3QgYnBmX2h0YWIgKmh0YWIgPSBjb250YWluZXJfb2YobWFwLCBzdHJ1Y3QgYnBmX2h0YWIsIG1hcCk7XFxuIFxcdHN0cnVjdCBodGFiX2VsZW0gKmwgPSBfX2h0YWJfbWFwX2xvb2t1cF9lbGVtKG1hcCwga2V5KTtcXG4gXFxuIFxcdGlmIChsKSB7XFxuLVxcdFxcdGJwZl9scnVfbm9kZV9zZXRfcmVmKFxcdTAwMjZsLVxcdTAwM2VscnVfbm9kZSk7XFxuLVxcdFxcdHJldHVybiB0aGlzX2NwdV9wdHIoaHRhYl9lbGVtX2dldF9wdHIobCwgbWFwLVxcdTAwM2VrZXlfc2l6ZSkpO1xcbitcXHRcXHRicGZfbHJ1X25vZGVfc2V0X3JlZihodGFiX2VsZW1fbHJ1X25vZGUobCkpO1xcbitcXHRcXHRyZXR1cm4gdGhpc19jcHVfcHRyKGh0YWJfZWxlbV9nZXRfcHRyKGh0YWIsIGwpKTtcXG4gXFx0fVxcbiBcXG4gXFx0cmV0dXJuIE5VTEw7XFxuQEAgLTI0NTksNiArMjU3NSw3IEBAIHN0YXRpYyB2b2lkICpodGFiX2xydV9wZXJjcHVfbWFwX2xvb2t1cF9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSlcXG4gXFxuIHN0YXRpYyB2b2lkICpodGFiX2xydV9wZXJjcHVfbWFwX2xvb2t1cF9wZXJjcHVfZWxlbShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXksIHUzMiBjcHUpXFxuIHtcXG4rXFx0c3RydWN0IGJwZl9odGFiICpodGFiID0gY29udGFpbmVyX29mKG1hcCwgc3RydWN0IGJwZl9odGFiLCBtYXApO1xcbiBcXHRzdHJ1Y3QgaHRhYl9lbGVtICpsO1xcbiBcXG4gXFx0aWYgKGNwdSBcXHUwMDNlPSBucl9jcHVfaWRzKVxcbkBAIC0yNDY2LDggKzI1ODMsOCBAQCBzdGF0aWMgdm9pZCAqaHRhYl9scnVfcGVyY3B1X21hcF9sb29rdXBfcGVyY3B1X2VsZW0oc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa1xcbiBcXG4gXFx0bCA9IF9faHRhYl9tYXBfbG9va3VwX2VsZW0obWFwLCBrZXkpO1xcbiBcXHRpZiAobCkge1xcbi1cXHRcXHRicGZfbHJ1X25vZGVfc2V0X3JlZihcXHUwMDI2bC1cXHUwMDNlbHJ1X25vZGUpO1xcbi1cXHRcXHRyZXR1cm4gcGVyX2NwdV9wdHIoaHRhYl9lbGVtX2dldF9wdHIobCwgbWFwLVxcdTAwM2VrZXlfc2l6ZSksIGNwdSk7XFxuK1xcdFxcdGJwZl9scnVfbm9kZV9zZXRfcmVmKGh0YWJfZWxlbV9scnVfbm9kZShsKSk7XFxuK1xcdFxcdHJldHVybiBwZXJfY3B1X3B0cihodGFiX2VsZW1fZ2V0X3B0cihodGFiLCBsKSwgY3B1KTtcXG4gXFx0fVxcbiBcXG4gXFx0cmV0dXJuIE5VTEw7XFxuQEAgLTI0NzUsNiArMjU5Miw3IEBAIHN0YXRpYyB2b2lkICpodGFiX2xydV9wZXJjcHVfbWFwX2xvb2t1cF9wZXJjcHVfZWxlbShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprXFxuIFxcbiBpbnQgYnBmX3BlcmNwdV9oYXNoX2NvcHkoc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5LCB2b2lkICp2YWx1ZSwgdTY0IG1hcF9mbGFncylcXG4ge1xcbitcXHRzdHJ1Y3QgYnBmX2h0YWIgKmh0YWIgPSBjb250YWluZXJfb2YobWFwLCBzdHJ1Y3QgYnBmX2h0YWIsIG1hcCk7XFxuIFxcdHN0cnVjdCBodGFiX2VsZW0gKmw7XFxuIFxcdHZvaWQgX19wZXJjcHUgKnBwdHI7XFxuIFxcdGludCByZXQgPSAtRU5PRU5UO1xcbkBAIC0yNDk0LDcgKzI2MTIsNyBAQCBpbnQgYnBmX3BlcmNwdV9oYXNoX2NvcHkoc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5LCB2b2lkICp2YWx1ZSwgdTY0IG1hcF9mbFxcbiBcXHQvKiBXZSBkbyBub3QgbWFyayBMUlUgbWFwIGVsZW1lbnQgaGVyZSBpbiBvcmRlciB0byBub3QgbWVzcyB1cFxcbiBcXHQgKiBldmljdGlvbiBoZXVyaXN0aWNzIHdoZW4gdXNlciBzcGFjZSBkb2VzIGEgbWFwIHdhbGsuXFxuIFxcdCAqL1xcbi1cXHRwcHRyID0gaHRhYl9lbGVtX2dldF9wdHIobCwgbWFwLVxcdTAwM2VrZXlfc2l6ZSk7XFxuK1xcdHBwdHIgPSBodGFiX2VsZW1fZ2V0X3B0cihodGFiLCBsKTtcXG4gXFx0aWYgKG1hcF9mbGFncyBcXHUwMDI2IEJQRl9GX0NQVSkge1xcbiBcXHRcXHRjcHUgPSBtYXBfZmxhZ3MgXFx1MDAzZVxcdTAwM2UgMzI7XFxuIFxcdFxcdGNvcHlfbWFwX3ZhbHVlKG1hcCwgdmFsdWUsIHBlcl9jcHVfcHRyKHBwdHIsIGNwdSkpO1xcbkBAIC0yNTMyLDYgKzI2NTAsNyBAQCBpbnQgYnBmX3BlcmNwdV9oYXNoX3VwZGF0ZShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXksIHZvaWQgKnZhbHVlLFxcbiBzdGF0aWMgdm9pZCBodGFiX3BlcmNwdV9tYXBfc2VxX3Nob3dfZWxlbShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXksXFxuIFxcdFxcdFxcdFxcdFxcdCAgc3RydWN0IHNlcV9maWxlICptKVxcbiB7XFxuK1xcdHN0cnVjdCBicGZfaHRhYiAqaHRhYiA9IGNvbnRhaW5lcl9vZihtYXAsIHN0cnVjdCBicGZfaHRhYiwgbWFwKTtcXG4gXFx0c3RydWN0IGh0YWJfZWxlbSAqbDtcXG4gXFx0dm9pZCBfX3BlcmNwdSAqcHB0cjtcXG4gXFx0aW50IGNwdTtcXG5AQCAtMjU0Niw3ICsyNjY1LDcgQEAgc3RhdGljIHZvaWQgaHRhYl9wZXJjcHVfbWFwX3NlcV9zaG93X2VsZW0oc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5LFxcbiBcXG4gXFx0YnRmX3R5cGVfc2VxX3Nob3cobWFwLVxcdTAwM2VidGYsIG1hcC1cXHUwMDNlYnRmX2tleV90eXBlX2lkLCBrZXksIG0pO1xcbiBcXHRzZXFfcHV0cyhtLCBcXFwiOiB7XFxcXG5cXFwiKTtcXG4tXFx0cHB0ciA9IGh0YWJfZWxlbV9nZXRfcHRyKGwsIG1hcC1cXHUwMDNla2V5X3NpemUpO1xcbitcXHRwcHRyID0gaHRhYl9lbGVtX2dldF9wdHIoaHRhYiwgbCk7XFxuIFxcdGZvcl9lYWNoX3Bvc3NpYmxlX2NwdShjcHUpIHtcXG4gXFx0XFx0c2VxX3ByaW50ZihtLCBcXFwiXFxcXHRjcHUlZDogXFxcIiwgY3B1KTtcXG4gXFx0XFx0YnRmX3R5cGVfc2VxX3Nob3cobWFwLVxcdTAwM2VidGYsIG1hcC1cXHUwMDNlYnRmX3ZhbHVlX3R5cGVfaWQsXFxuQEAgLTI2MjAsNyArMjczOSw3IEBAIHN0YXRpYyB2b2lkIGZkX2h0YWJfbWFwX2ZyZWUoc3RydWN0IGJwZl9tYXAgKm1hcClcXG4gXFx0XFx0aGVhZCA9IHNlbGVjdF9idWNrZXQoaHRhYiwgaSk7XFxuIFxcbiBcXHRcXHRobGlzdF9udWxsc19mb3JfZWFjaF9lbnRyeV9zYWZlKGwsIG4sIGhlYWQsIGhhc2hfbm9kZSkge1xcbi1cXHRcXHRcXHR2b2lkICpwdHIgPSBmZF9odGFiX21hcF9nZXRfcHRyKG1hcCwgbCk7XFxuK1xcdFxcdFxcdHZvaWQgKnB0ciA9IGZkX2h0YWJfbWFwX2dldF9wdHIoaHRhYiwgbCk7XFxuIFxcbiBcXHRcXHRcXHRtYXAtXFx1MDAzZW9wcy1cXHUwMDNlbWFwX2ZkX3B1dF9wdHIobWFwLCBwdHIsIGZhbHNlKTtcXG4gXFx0XFx0fVxcbkBAIC0yNzA1LDYgKzI4MjQsNyBAQCBzdGF0aWMgdm9pZCAqaHRhYl9vZl9tYXBfbG9va3VwX2VsZW0oc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5KVxcbiBzdGF0aWMgaW50IGh0YWJfb2ZfbWFwX2dlbl9sb29rdXAoc3RydWN0IGJwZl9tYXAgKm1hcCxcXG4gXFx0XFx0XFx0XFx0ICBzdHJ1Y3QgYnBmX2luc24gKmluc25fYnVmKVxcbiB7XFxuK1xcdHN0cnVjdCBicGZfaHRhYiAqaHRhYiA9IGNvbnRhaW5lcl9vZihtYXAsIHN0cnVjdCBicGZfaHRhYiwgbWFwKTtcXG4gXFx0c3RydWN0IGJwZl9pbnNuICppbnNuID0gaW5zbl9idWY7XFxuIFxcdGNvbnN0IGludCByZXQgPSBCUEZfUkVHXzA7XFxuIFxcbkBAIC0yNzEzLDcgKzI4MzMsNyBAQCBzdGF0aWMgaW50IGh0YWJfb2ZfbWFwX2dlbl9sb29rdXAoc3RydWN0IGJwZl9tYXAgKm1hcCxcXG4gXFx0Kmluc24rKyA9IEJQRl9FTUlUX0NBTEwoX19odGFiX21hcF9sb29rdXBfZWxlbSk7XFxuIFxcdCppbnNuKysgPSBCUEZfSk1QX0lNTShCUEZfSkVRLCByZXQsIDAsIDIpO1xcbiBcXHQqaW5zbisrID0gQlBGX0FMVTY0X0lNTShCUEZfQURELCByZXQsXFxuLVxcdFxcdFxcdFxcdG9mZnNldG9mKHN0cnVjdCBodGFiX2VsZW0sIGtleSkgK1xcbitcXHRcXHRcXHRcXHRodGFiLVxcdTAwM2VrZXlfb2Zmc2V0ICtcXG4gXFx0XFx0XFx0XFx0cm91bmRfdXAobWFwLVxcdTAwM2VrZXlfc2l6ZSwgOCkpO1xcbiBcXHQqaW5zbisrID0gQlBGX0xEWF9NRU0oQlBGX0RXLCByZXQsIHJldCwgMCk7XFxuIFxcbkBAIC0zMTEyLDcgKzMyMzIsNyBAQCBzdGF0aWMgaW50IHJodGFiX21hcF9jaGVja19idGYoc3RydWN0IGJwZl9tYXAgKm1hcCwgY29uc3Qgc3RydWN0IGJ0ZiAqYnRmLFxcbiB7XFxuIFxcdHN0cnVjdCBicGZfcmh0YWIgKnJodGFiID0gY29udGFpbmVyX29mKG1hcCwgc3RydWN0IGJwZl9yaHRhYiwgbWFwKTtcXG4gXFxuLVxcdHJldHVybiBicGZfbWFfc2V0X2R0b3IobWFwLCBcXHUwMDI2cmh0YWItXFx1MDAzZW1hLCByaHRhYl9tZW1fZHRvcik7XFxuK1xcdHJldHVybiBicGZfbWFfc2V0X2R0b3IobWFwLCBcXHUwMDI2cmh0YWItXFx1MDAzZW1hLCByaHRhYl9tZW1fZHRvciwgb2Zmc2V0b2Yoc3RydWN0IHJodGFiX2VsZW0sIGRhdGEpKTtcXG4gfVxcbiBcXG4gc3RhdGljIHZvaWQgcmh0YWJfbWFwX2ZyZWVfaW50ZXJuYWxfc3RydWN0cyhzdHJ1Y3QgYnBmX21hcCAqbWFwKVxcbkBAIC0zNTMzLDMgKzM2NTMsMTYgQEAgY29uc3Qgc3RydWN0IGJwZl9tYXBfb3BzIHJodGFiX21hcF9vcHMgPSB7XFxuIFxcdC5tYXBfYnRmX2lkID0gXFx1MDAyNnJodGFiX21hcF9idGZfaWRzWzBdLFxcbiBcXHQuaXRlcl9zZXFfaW5mbyA9IFxcdTAwMjZyaGFzaF9pdGVyX3NlcV9pbmZvLFxcbiB9O1xcbitcXG4rc2l6ZV90IGJwZl9odGFiX21hcF9tZXRhX3NpemUodm9pZClcXG4re1xcbitcXHRyZXR1cm4gc2l6ZW9mKHN0cnVjdCBicGZfaHRhYik7XFxuK31cXG4rXFxuK3ZvaWQgYnBmX2h0YWJfbWFwX21ldGFfaW5pdChzdHJ1Y3QgYnBmX21hcCAqaW5uZXJfbWFwX21ldGEsIHN0cnVjdCBicGZfbWFwICppbm5lcl9tYXApXFxuK3tcXG4rXFx0c3RydWN0IGJwZl9odGFiICppbm5lcl9odGFiX21ldGEgPSBjb250YWluZXJfb2YoaW5uZXJfbWFwX21ldGEsIHN0cnVjdCBicGZfaHRhYiwgbWFwKTtcXG4rXFx0c3RydWN0IGJwZl9odGFiICppbm5lcl9odGFiID0gY29udGFpbmVyX29mKGlubmVyX21hcCwgc3RydWN0IGJwZl9odGFiLCBtYXApO1xcbitcXG4rXFx0aW5uZXJfaHRhYl9tZXRhLVxcdTAwM2VrZXlfb2Zmc2V0ID0gaW5uZXJfaHRhYi1cXHUwMDNla2V5X29mZnNldDtcXG4rfVxcbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL21hcF9pbl9tYXAuYyBiL2tlcm5lbC9icGYvbWFwX2luX21hcC5jXFxuaW5kZXggZDJjYmFiNGJkZjY0NGEuLmIyZGI1ZDBjOThiZWUyIDEwMDY0NFxcbi0tLSBhL2tlcm5lbC9icGYvbWFwX2luX21hcC5jXFxuKysrIGIva2VybmVsL2JwZi9tYXBfaW5fbWFwLmNcXG5AQCAtNyw2ICs3LDE1IEBAXFxuIFxcbiAjaW5jbHVkZSBcXFwibWFwX2luX21hcC5oXFxcIlxcbiBcXG4rc3RhdGljIGJvb2wgYnBmX21hcF90eXBlX2lzX2h0YWIoZW51bSBicGZfbWFwX3R5cGUgdHlwZSlcXG4re1xcbitcXHRyZXR1cm4gdHlwZSA9PSBCUEZfTUFQX1RZUEVfSEFTSCB8fFxcbitcXHQgICAgICAgdHlwZSA9PSBCUEZfTUFQX1RZUEVfUEVSQ1BVX0hBU0ggfHxcXG4rXFx0ICAgICAgIHR5cGUgPT0gQlBGX01BUF9UWVBFX0xSVV9IQVNIIHx8XFxuK1xcdCAgICAgICB0eXBlID09IEJQRl9NQVBfVFlQRV9MUlVfUEVSQ1BVX0hBU0ggfHxcXG4rXFx0ICAgICAgIHR5cGUgPT0gQlBGX01BUF9UWVBFX0hBU0hfT0ZfTUFQUztcXG4rfVxcbitcXG4gc3RydWN0IGJwZl9tYXAgKmJwZl9tYXBfbWV0YV9hbGxvYyhpbnQgaW5uZXJfbWFwX3VmZClcXG4ge1xcbiBcXHRzdHJ1Y3QgYnBmX21hcCAqaW5uZXJfbWFwLCAqaW5uZXJfbWFwX21ldGE7XFxuQEAgLTI5LDYgKzM4LDggQEAgc3RydWN0IGJwZl9tYXAgKmJwZl9tYXBfbWV0YV9hbGxvYyhpbnQgaW5uZXJfbWFwX3VmZClcXG4gXFx0LyogSW4gc29tZSBjYXNlcyB2ZXJpZmllciBuZWVkcyB0byBhY2Nlc3MgYmV5b25kIGp1c3QgYmFzZSBtYXAuICovXFxuIFxcdGlmIChpbm5lcl9tYXAtXFx1MDAzZW9wcyA9PSBcXHUwMDI2YXJyYXlfbWFwX29wcyB8fCBpbm5lcl9tYXAtXFx1MDAzZW9wcyA9PSBcXHUwMDI2cGVyY3B1X2FycmF5X21hcF9vcHMpXFxuIFxcdFxcdGlubmVyX21hcF9tZXRhX3NpemUgPSBzaXplb2Yoc3RydWN0IGJwZl9hcnJheSk7XFxuK1xcdGVsc2UgaWYgKGJwZl9tYXBfdHlwZV9pc19odGFiKGlubmVyX21hcC1cXHUwMDNlbWFwX3R5cGUpKVxcbitcXHRcXHRpbm5lcl9tYXBfbWV0YV9zaXplID0gYnBmX2h0YWJfbWFwX21ldGFfc2l6ZSgpO1xcbiBcXG4gXFx0aW5uZXJfbWFwX21ldGEgPSBremFsbG9jKGlubmVyX21hcF9tZXRhX3NpemUsIEdGUF9VU0VSKTtcXG4gXFx0aWYgKCFpbm5lcl9tYXBfbWV0YSlcXG5AQCAtNzAsNiArODEsOCBAQCBzdHJ1Y3QgYnBmX21hcCAqYnBmX21hcF9tZXRhX2FsbG9jKGludCBpbm5lcl9tYXBfdWZkKVxcbiBcXHRcXHRpbm5lcl9hcnJheV9tZXRhLVxcdTAwM2VpbmRleF9tYXNrID0gaW5uZXJfYXJyYXktXFx1MDAzZWluZGV4X21hc2s7XFxuIFxcdFxcdGlubmVyX2FycmF5X21ldGEtXFx1MDAzZWVsZW1fc2l6ZSA9IGlubmVyX2FycmF5LVxcdTAwM2VlbGVtX3NpemU7XFxuIFxcdFxcdGlubmVyX21hcF9tZXRhLVxcdTAwM2VieXBhc3Nfc3BlY192MSA9IGlubmVyX21hcC1cXHUwMDNlYnlwYXNzX3NwZWNfdjE7XFxuK1xcdH0gZWxzZSBpZiAoYnBmX21hcF90eXBlX2lzX2h0YWIoaW5uZXJfbWFwLVxcdTAwM2VtYXBfdHlwZSkpIHtcXG4rXFx0XFx0YnBmX2h0YWJfbWFwX21ldGFfaW5pdChpbm5lcl9tYXBfbWV0YSwgaW5uZXJfbWFwKTtcXG4gXFx0fVxcbiBcXHRyZXR1cm4gaW5uZXJfbWFwX21ldGE7XFxuIH1cXG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9tYXBfaW5fbWFwLmggYi9rZXJuZWwvYnBmL21hcF9pbl9tYXAuaFxcbmluZGV4IDdkNjE2MDIzNTRkZTgwLi4xZWRjMjA1NzcyZDhjZCAxMDA2NDRcXG4tLS0gYS9rZXJuZWwvYnBmL21hcF9pbl9tYXAuaFxcbisrKyBiL2tlcm5lbC9icGYvbWFwX2luX21hcC5oXFxuQEAgLTE1LDUgKzE1LDcgQEAgdm9pZCAqYnBmX21hcF9mZF9nZXRfcHRyKHN0cnVjdCBicGZfbWFwICptYXAsIHN0cnVjdCBmaWxlICptYXBfZmlsZSxcXG4gXFx0XFx0XFx0IGludCB1ZmQpO1xcbiB2b2lkIGJwZl9tYXBfZmRfcHV0X3B0cihzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICpwdHIsIGJvb2wgbmVlZF9kZWZlcik7XFxuIHUzMiBicGZfbWFwX2ZkX3N5c19sb29rdXBfZWxlbSh2b2lkICpwdHIpO1xcbitzaXplX3QgYnBmX2h0YWJfbWFwX21ldGFfc2l6ZSh2b2lkKTtcXG4rdm9pZCBicGZfaHRhYl9tYXBfbWV0YV9pbml0KHN0cnVjdCBicGZfbWFwICppbm5lcl9tYXBfbWV0YSwgc3RydWN0IGJwZl9tYXAgKmlubmVyX21hcCk7XFxuIFxcbiAjZW5kaWZcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL21hcF9wdHJfa2Vybi5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL21hcF9wdHJfa2Vybi5jXFxuaW5kZXggMzczYzhkMTdlYTU1N2QuLjZiZDRjYjY4YzIwYzFjIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9tYXBfcHRyX2tlcm4uY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9tYXBfcHRyX2tlcm4uY1xcbkBAIC0xMTQsNyArMTE0LDcgQEAgc3RhdGljIGlubGluZSBpbnQgY2hlY2tfaGFzaCh2b2lkKVxcbiBcXHRWRVJJRlkoY2hlY2tfZGVmYXVsdF9ub2lubGluZShcXHUwMDI2aGFzaC1cXHUwMDNlbWFwLCBtYXApKTtcXG4gXFxuIFxcdFZFUklGWShoYXNoLVxcdTAwM2VuX2J1Y2tldHMgPT0gTUFYX0VOVFJJRVMpO1xcbi1cXHRWRVJJRlkoaGFzaC1cXHUwMDNlZWxlbV9zaXplID09IDY0KTtcXG4rXFx0VkVSSUZZKGhhc2gtXFx1MDAzZWVsZW1fc2l6ZSA9PSAzMik7XFxuIFxcbiBcXHRWRVJJRlkoaGFzaC1cXHUwMDNlY291bnQuY291bnRlciA9PSAwKTtcXG4gXFx0VkVSSUZZKGJwZl9tYXBfc3VtX2VsZW1fY291bnQobWFwKSA9PSAwKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjNUMjI6Mzg6NDMuMzAzMDkzNTU0WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MzEwNTM3OTk1NDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlBGX1NZU0NBTExcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJodGFiX21hcF9hbGxvY1wiLFxuICAgIFwiaHRhYl9tYXBfdXBkYXRlX2VsZW1cIixcbiAgICBcImh0YWJfbHJ1X21hcF91cGRhdGVfZWxlbVwiLFxuICAgIFwiX19odGFiX2xydV9wZXJjcHVfbWFwX3VwZGF0ZV9lbGVtXCIsXG4gICAgXCJodGFiX21hcF9kZWxldGVfZWxlbVwiLFxuICAgIFwiaHRhYl9scnVfbWFwX2RlbGV0ZV9lbGVtXCIsXG4gICAgXCJfX2h0YWJfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2VsZW1cIixcbiAgICBcIl9faHRhYl9tYXBfbG9va3VwX2FuZF9kZWxldGVfYmF0Y2hcIixcbiAgICBcImJwZl9tYXBfbWV0YV9hbGxvY1wiLFxuICAgIFwiaHRhYl9tYXBfZ2VuX2xvb2t1cFwiLFxuICAgIFwiaHRhYl9scnVfbWFwX2dlbl9sb29rdXBcIixcbiAgICBcImh0YWJfcGVyY3B1X21hcF9nZW5fbG9va3VwXCIsXG4gICAgXCJodGFiX29mX21hcF9nZW5fbG9va3VwXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZnVuY3Rpb25hbGx5IG1vZGlmaWVzIHRoZSBtZW1vcnkgbGF5b3V0IGFuZCBvcGVyYXRpb25zIG9mIEJQRiBoYXNoIG1hcHMgKGluY2x1ZGluZyBMUlUgYW5kIHBlci1DUFUgdmFyaWFudHMpLiBJdCBpbnRyb2R1Y2VzIG5ldyBzdHJ1Y3R1cmVzIGFuZCBvZmZzZXRzIGZvciBoYXNoIG1hcCBlbGVtZW50cywgd2hpY2ggYWZmZWN0cyBhbGxvY2F0aW9uLCB1cGRhdGVzLCBkZWxldGlvbnMsIGFuZCBKSVQgbG9va3VwIGdlbmVyYXRpb24uIEZ1enppbmcgaXMgbmVlZGVkIHRvIGVuc3VyZSBtZW1vcnkgc2FmZXR5IGFuZCBjb3JyZWN0bmVzcyBvZiB0aGVzZSBjb3JlIEJQRiBtYXAgb3BlcmF0aW9ucy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdFxuICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LFxuICAgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAyNDNhMjcwNjQwZTBkYzkwMWU0YTc4YjU5OWIwNzQ4ZDU5YmY3YjYzXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBKdWwgMjMgMjI6Mzg6NDAgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL2hhc2h0YWIuYyBiL2tlcm5lbC9icGYvaGFzaHRhYi5jXG5pbmRleCA5ZjM5NGUxYWEyZTg1Yi4uYjhjMzBkNDAyOTU4NzkgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvYnBmL2hhc2h0YWIuY1xuKysrIGIva2VybmVsL2JwZi9oYXNodGFiLmNcbkBAIC0xMDIsNiArMTAyLDcgQEAgc3RydWN0IGJwZl9odGFiIHtcbiBcdGJvb2wgdXNlX3BlcmNwdV9jb3VudGVyO1xuIFx0dTMyIG5fYnVja2V0cztcdC8qIG51bWJlciBvZiBoYXNoIGJ1Y2tldHMgKi9cbiBcdHUzMiBlbGVtX3NpemU7XHQvKiBzaXplIG9mIGVhY2ggZWxlbWVudCBpbiBieXRlcyAqL1xuK1x0dTMyIGtleV9vZmZzZXQ7XHQvKiBvZmZzZXQgb2Yga2V5IGluIGJ5dGVzICovXG4gXHR1MzIgaGFzaHJuZDtcbiB9O1xuIFxuQEAgLTExNywxOCArMTE4LDQ2IEBAIHN0cnVjdCBodGFiX2VsZW0ge1xuIFx0XHRcdH07XG4gXHRcdH07XG4gXHR9O1xuK1x0dTMyIGhhc2g7IC8qIE9ubHkgd2hlbiBodGFiX2hhc19oYXNoKCkgKi9cbit9IF9fYWxpZ25lZCg4KTtcbitcbitzdHJ1Y3QgaHRhYl9lbGVtX2xydSB7XG4gXHR1bmlvbiB7XG4tXHRcdC8qIHBvaW50ZXIgdG8gcGVyLWNwdSBwb2ludGVyICovXG4tXHRcdHZvaWQgKnB0cl90b19wcHRyO1xuLVx0XHRzdHJ1Y3QgYnBmX2xydV9ub2RlIGxydV9ub2RlO1xuK1x0XHRzdHJ1Y3QgaGxpc3RfbnVsbHNfbm9kZSBoYXNoX25vZGU7XG4rXHRcdHN0cnVjdCB7XG4rXHRcdFx0dm9pZCAqcGFkZGluZztcbitcdFx0XHR1bmlvbiB7XG4rXHRcdFx0XHRzdHJ1Y3QgcGNwdV9mcmVlbGlzdF9ub2RlIGZub2RlO1xuK1x0XHRcdFx0c3RydWN0IGh0YWJfZWxlbV9scnUgKmJhdGNoX2ZsaW5rO1xuK1x0XHRcdH07XG4rXHRcdH07XG4gXHR9O1xuK1x0c3RydWN0IGJwZl9scnVfbm9kZSBscnVfbm9kZTtcbiBcdHUzMiBoYXNoO1xuLVx0Y2hhciBrZXlbXSBfX2FsaWduZWQoOCk7XG4tfTtcbit9IF9fYWxpZ25lZCg4KTtcbitcbisvKiBPbmx5IGZvciBub24tcHJlYWxsb2NhdGVkIFBDUFUgbWFwcy4gUHJlYWxsb2NhdGVkIFBDUFUgbWFwcyBkb24ndCBuZWVkXG4rICogcHRyX3RvX3BwdHIsIGFuZCB1c2UgaHRhYl9lbGVtLlxuKyAqL1xuK3N0cnVjdCBodGFiX2VsZW1fcGNwdSB7XG4rXHR1bmlvbiB7XG4rXHRcdHN0cnVjdCBobGlzdF9udWxsc19ub2RlIGhhc2hfbm9kZTtcbitcdFx0c3RydWN0IHtcbitcdFx0XHR2b2lkICpwYWRkaW5nO1xuK1x0XHRcdHVuaW9uIHtcbitcdFx0XHRcdHN0cnVjdCBwY3B1X2ZyZWVsaXN0X25vZGUgZm5vZGU7XG4rXHRcdFx0XHRzdHJ1Y3QgaHRhYl9lbGVtX3BjcHUgKmJhdGNoX2ZsaW5rO1xuK1x0XHRcdH07XG4rXHRcdH07XG4rXHR9O1xuK1x0dm9pZCAqcHRyX3RvX3BwdHI7XG4rXHR1MzIgaGFzaDsgLyogT25seSB3aGVuIGh0YWJfaGFzX2hhc2goKSAqL1xuK30gX19hbGlnbmVkKDgpO1xuIFxuIHN0cnVjdCBodGFiX2J0Zl9yZWNvcmQge1xuIFx0c3RydWN0IGJ0Zl9yZWNvcmQgKnJlY29yZDtcbiBcdHUzMiBrZXlfc2l6ZTtcbitcdHUzMiBrZXlfb2Zmc2V0O1xuIH07XG4gXG4gc3RhdGljIGlubGluZSBib29sIGh0YWJfaXNfcHJlYWxsb2MoY29uc3Qgc3RydWN0IGJwZl9odGFiICpodGFiKVxuQEAgLTEzNiw2ICsxNjUsMjEgQEAgc3RhdGljIGlubGluZSBib29sIGh0YWJfaXNfcHJlYWxsb2MoY29uc3Qgc3RydWN0IGJwZl9odGFiICpodGFiKVxuIFx0cmV0dXJuICEoaHRhYi1cdTAwM2VtYXAubWFwX2ZsYWdzIFx1MDAyNiBCUEZfRl9OT19QUkVBTExPQyk7XG4gfVxuIFxuK3N0YXRpYyBpbmxpbmUgc3RydWN0IGJwZl9scnVfbm9kZSAqaHRhYl9lbGVtX2xydV9ub2RlKHN0cnVjdCBodGFiX2VsZW0gKmwpXG4re1xuK1x0cmV0dXJuIFx1MDAyNigoc3RydWN0IGh0YWJfZWxlbV9scnUgKilsKS1cdTAwM2VscnVfbm9kZTtcbit9XG4rXG4rc3RhdGljIGlubGluZSB2b2lkICpodGFiX2VsZW1fZ2V0X3B0cl90b19wcHRyKHN0cnVjdCBodGFiX2VsZW0gKmwpXG4re1xuK1x0cmV0dXJuICgoc3RydWN0IGh0YWJfZWxlbV9wY3B1ICopbCktXHUwMDNlcHRyX3RvX3BwdHI7XG4rfVxuK1xuK3N0YXRpYyBpbmxpbmUgdm9pZCBodGFiX2VsZW1fc2V0X3B0cl90b19wcHRyKHN0cnVjdCBodGFiX2VsZW0gKmwsIHZvaWQgKnB0cilcbit7XG4rXHQoKHN0cnVjdCBodGFiX2VsZW1fcGNwdSAqKWwpLVx1MDAzZXB0cl90b19wcHRyID0gcHRyO1xuK31cbitcbiBzdGF0aWMgdm9pZCBodGFiX2luaXRfYnVja2V0cyhzdHJ1Y3QgYnBmX2h0YWIgKmh0YWIpXG4ge1xuIFx0dW5zaWduZWQgaW50IGk7XG5AQCAtMTgzLDI1ICsyMjcsMzAgQEAgc3RhdGljIGlubGluZSBib29sIGlzX2ZkX2h0YWIoY29uc3Qgc3RydWN0IGJwZl9odGFiICpodGFiKVxuIFx0cmV0dXJuIGh0YWItXHUwMDNlbWFwLm1hcF90eXBlID09IEJQRl9NQVBfVFlQRV9IQVNIX09GX01BUFM7XG4gfVxuIFxuLXN0YXRpYyBpbmxpbmUgdm9pZCAqaHRhYl9lbGVtX3ZhbHVlKHN0cnVjdCBodGFiX2VsZW0gKmwsIHUzMiBrZXlfc2l6ZSlcbitzdGF0aWMgaW5saW5lIHZvaWQgKmh0YWJfZWxlbV9rZXkoc3RydWN0IGJwZl9odGFiICpodGFiLCBzdHJ1Y3QgaHRhYl9lbGVtICpsKVxuK3tcbitcdHJldHVybiAodm9pZCAqKWwgKyBodGFiLVx1MDAzZWtleV9vZmZzZXQ7XG4rfVxuK1xuK3N0YXRpYyBpbmxpbmUgdm9pZCAqaHRhYl9lbGVtX3ZhbHVlKHN0cnVjdCBicGZfaHRhYiAqaHRhYiwgc3RydWN0IGh0YWJfZWxlbSAqbClcbiB7XG4tXHRyZXR1cm4gbC1cdTAwM2VrZXkgKyByb3VuZF91cChrZXlfc2l6ZSwgOCk7XG4rXHRyZXR1cm4gaHRhYl9lbGVtX2tleShodGFiLCBsKSArIHJvdW5kX3VwKGh0YWItXHUwMDNlbWFwLmtleV9zaXplLCA4KTtcbiB9XG4gXG4tc3RhdGljIGlubGluZSB2b2lkIGh0YWJfZWxlbV9zZXRfcHRyKHN0cnVjdCBodGFiX2VsZW0gKmwsIHUzMiBrZXlfc2l6ZSxcbitzdGF0aWMgaW5saW5lIHZvaWQgaHRhYl9lbGVtX3NldF9wdHIoc3RydWN0IGJwZl9odGFiICpodGFiLCBzdHJ1Y3QgaHRhYl9lbGVtICpsLFxuIFx0XHRcdFx0ICAgICB2b2lkIF9fcGVyY3B1ICpwcHRyKVxuIHtcbi1cdCoodm9pZCBfX3BlcmNwdSAqKilodGFiX2VsZW1fdmFsdWUobCwga2V5X3NpemUpID0gcHB0cjtcbitcdCoodm9pZCBfX3BlcmNwdSAqKilodGFiX2VsZW1fdmFsdWUoaHRhYiwgbCkgPSBwcHRyO1xuIH1cbiBcbi1zdGF0aWMgaW5saW5lIHZvaWQgX19wZXJjcHUgKmh0YWJfZWxlbV9nZXRfcHRyKHN0cnVjdCBodGFiX2VsZW0gKmwsIHUzMiBrZXlfc2l6ZSlcbitzdGF0aWMgaW5saW5lIHZvaWQgX19wZXJjcHUgKmh0YWJfZWxlbV9nZXRfcHRyKHN0cnVjdCBicGZfaHRhYiAqaHRhYiwgc3RydWN0IGh0YWJfZWxlbSAqbClcbiB7XG4tXHRyZXR1cm4gKih2b2lkIF9fcGVyY3B1ICoqKWh0YWJfZWxlbV92YWx1ZShsLCBrZXlfc2l6ZSk7XG4rXHRyZXR1cm4gKih2b2lkIF9fcGVyY3B1ICoqKWh0YWJfZWxlbV92YWx1ZShodGFiLCBsKTtcbiB9XG4gXG4tc3RhdGljIHZvaWQgKmZkX2h0YWJfbWFwX2dldF9wdHIoY29uc3Qgc3RydWN0IGJwZl9tYXAgKm1hcCwgc3RydWN0IGh0YWJfZWxlbSAqbClcbitzdGF0aWMgdm9pZCAqZmRfaHRhYl9tYXBfZ2V0X3B0cihzdHJ1Y3QgYnBmX2h0YWIgKmh0YWIsIHN0cnVjdCBodGFiX2VsZW0gKmwpXG4ge1xuLVx0cmV0dXJuICoodm9pZCAqKilodGFiX2VsZW1fdmFsdWUobCwgbWFwLVx1MDAzZWtleV9zaXplKTtcbitcdHJldHVybiAqKHZvaWQgKiopaHRhYl9lbGVtX3ZhbHVlKGh0YWIsIGwpO1xuIH1cbiBcbiBzdGF0aWMgc3RydWN0IGh0YWJfZWxlbSAqZ2V0X2h0YWJfZWxlbShzdHJ1Y3QgYnBmX2h0YWIgKmh0YWIsIGludCBpKVxuQEAgLTIwOSw2ICsyNTgsMzMgQEAgc3RhdGljIHN0cnVjdCBodGFiX2VsZW0gKmdldF9odGFiX2VsZW0oc3RydWN0IGJwZl9odGFiICpodGFiLCBpbnQgaSlcbiBcdHJldHVybiAoc3RydWN0IGh0YWJfZWxlbSAqKSAoaHRhYi1cdTAwM2VlbGVtcyArIGkgKiAodTY0KWh0YWItXHUwMDNlZWxlbV9zaXplKTtcbiB9XG4gXG4rc3RhdGljIGlubGluZSBib29sIGh0YWJfaGFzX2hhc2goY29uc3Qgc3RydWN0IGJwZl9odGFiICpodGFiKVxuK3tcbitcdHJldHVybiBodGFiX2lzX2xydShodGFiKSB8fCBodGFiLVx1MDAzZW1hcC5rZXlfc2l6ZSBcdTAwM2UgODtcbit9XG4rXG4rc3RhdGljIGlubGluZSB1MzIgaHRhYl9lbGVtX2hhc2goc3RydWN0IGJwZl9odGFiICpodGFiLCBzdHJ1Y3QgaHRhYl9lbGVtICpsKVxuK3tcbitcdGlmIChodGFiX2lzX2xydShodGFiKSlcbitcdFx0cmV0dXJuICgoc3RydWN0IGh0YWJfZWxlbV9scnUgKilsKS1cdTAwM2VoYXNoO1xuK1x0ZWxzZSBpZiAoaHRhYl9pc19wZXJjcHUoaHRhYikgXHUwMDI2XHUwMDI2ICFodGFiX2lzX3ByZWFsbG9jKGh0YWIpKVxuK1x0XHRyZXR1cm4gKChzdHJ1Y3QgaHRhYl9lbGVtX3BjcHUgKilsKS1cdTAwM2VoYXNoO1xuK1x0ZWxzZVxuK1x0XHRyZXR1cm4gbC1cdTAwM2VoYXNoO1xuK31cbitcbitzdGF0aWMgaW5saW5lIHZvaWQgaHRhYl9lbGVtX3NldF9oYXNoKHN0cnVjdCBicGZfaHRhYiAqaHRhYiwgc3RydWN0IGh0YWJfZWxlbSAqbCwgdTMyIGhhc2gpXG4re1xuK1x0aWYgKCFodGFiX2hhc19oYXNoKGh0YWIpKVxuK1x0XHRyZXR1cm47XG4rXHRpZiAoaHRhYl9pc19scnUoaHRhYikpXG4rXHRcdCgoc3RydWN0IGh0YWJfZWxlbV9scnUgKilsKS1cdTAwM2VoYXNoID0gaGFzaDtcbitcdGVsc2UgaWYgKGh0YWJfaXNfcGVyY3B1KGh0YWIpIFx1MDAyNlx1MDAyNiAhaHRhYl9pc19wcmVhbGxvYyhodGFiKSlcbitcdFx0KChzdHJ1Y3QgaHRhYl9lbGVtX3BjcHUgKilsKS1cdTAwM2VoYXNoID0gaGFzaDtcbitcdGVsc2VcbitcdFx0bC1cdTAwM2VoYXNoID0gaGFzaDtcbit9XG4rXG4gLyogQm90aCBwZXJjcHUgYW5kIGZkIGh0YWIgc3VwcG9ydCBpbi1wbGFjZSB1cGRhdGUsIHNvIG5vIG5lZWQgZm9yXG4gICogZXh0cmEgZWxlbS4gTFJVIGl0c2VsZiBjYW4gcmVtb3ZlIHRoZSBsZWFzdCB1c2VkIGVsZW1lbnQsIHNvXG4gICogdGhlcmUgaXMgbm8gbmVlZCBmb3IgYW4gZXh0cmEgZWxlbSBkdXJpbmcgbWFwX3VwZGF0ZS5cbkBAIC0yMzEsNyArMzA3LDcgQEAgc3RhdGljIHZvaWQgaHRhYl9mcmVlX3ByZWFsbG9jZWRfaW50ZXJuYWxfc3RydWN0cyhzdHJ1Y3QgYnBmX2h0YWIgKmh0YWIpXG4gXG4gXHRcdGVsZW0gPSBnZXRfaHRhYl9lbGVtKGh0YWIsIGkpO1xuIFx0XHRicGZfbWFwX2ZyZWVfaW50ZXJuYWxfc3RydWN0cyhcdTAwMjZodGFiLVx1MDAzZW1hcCxcbi1cdFx0XHRcdFx0ICAgICAgaHRhYl9lbGVtX3ZhbHVlKGVsZW0sIGh0YWItXHUwMDNlbWFwLmtleV9zaXplKSk7XG4rXHRcdFx0XHRcdCAgICAgIGh0YWJfZWxlbV92YWx1ZShodGFiLCBlbGVtKSk7XG4gXHRcdGNvbmRfcmVzY2hlZCgpO1xuIFx0fVxuIH1cbkBAIC0yNTQsNyArMzMwLDcgQEAgc3RhdGljIHZvaWQgaHRhYl9mcmVlX3ByZWFsbG9jZWRfZmllbGRzKHN0cnVjdCBicGZfaHRhYiAqaHRhYilcbiBcbiBcdFx0ZWxlbSA9IGdldF9odGFiX2VsZW0oaHRhYiwgaSk7XG4gXHRcdGlmIChodGFiX2lzX3BlcmNwdShodGFiKSkge1xuLVx0XHRcdHZvaWQgX19wZXJjcHUgKnBwdHIgPSBodGFiX2VsZW1fZ2V0X3B0cihlbGVtLCBodGFiLVx1MDAzZW1hcC5rZXlfc2l6ZSk7XG4rXHRcdFx0dm9pZCBfX3BlcmNwdSAqcHB0ciA9IGh0YWJfZWxlbV9nZXRfcHRyKGh0YWIsIGVsZW0pO1xuIFx0XHRcdGludCBjcHU7XG4gXG4gXHRcdFx0Zm9yX2VhY2hfcG9zc2libGVfY3B1KGNwdSkge1xuQEAgLTI2Myw3ICszMzksNyBAQCBzdGF0aWMgdm9pZCBodGFiX2ZyZWVfcHJlYWxsb2NlZF9maWVsZHMoc3RydWN0IGJwZl9odGFiICpodGFiKVxuIFx0XHRcdH1cbiBcdFx0fSBlbHNlIHtcbiBcdFx0XHRicGZfb2JqX2ZyZWVfZmllbGRzKGh0YWItXHUwMDNlbWFwLnJlY29yZCxcbi1cdFx0XHRcdFx0ICAgIGh0YWJfZWxlbV92YWx1ZShlbGVtLCBodGFiLVx1MDAzZW1hcC5rZXlfc2l6ZSkpO1xuK1x0XHRcdFx0XHQgICAgaHRhYl9lbGVtX3ZhbHVlKGh0YWIsIGVsZW0pKTtcbiBcdFx0XHRjb25kX3Jlc2NoZWQoKTtcbiBcdFx0fVxuIFx0XHRjb25kX3Jlc2NoZWQoKTtcbkBAIC0yODAsOCArMzU2LDcgQEAgc3RhdGljIHZvaWQgaHRhYl9mcmVlX2VsZW1zKHN0cnVjdCBicGZfaHRhYiAqaHRhYilcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGh0YWItXHUwMDNlbWFwLm1heF9lbnRyaWVzOyBpKyspIHtcbiBcdFx0dm9pZCBfX3BlcmNwdSAqcHB0cjtcbiBcbi1cdFx0cHB0ciA9IGh0YWJfZWxlbV9nZXRfcHRyKGdldF9odGFiX2VsZW0oaHRhYiwgaSksXG4tXHRcdFx0XHRcdCBodGFiLVx1MDAzZW1hcC5rZXlfc2l6ZSk7XG4rXHRcdHBwdHIgPSBodGFiX2VsZW1fZ2V0X3B0cihodGFiLCBnZXRfaHRhYl9lbGVtKGh0YWIsIGkpKTtcbiBcdFx0ZnJlZV9wZXJjcHUocHB0cik7XG4gXHRcdGNvbmRfcmVzY2hlZCgpO1xuIFx0fVxuQEAgLTMwOCw4ICszODMsOCBAQCBzdGF0aWMgc3RydWN0IGh0YWJfZWxlbSAqcHJlYWxsb2NfbHJ1X3BvcChzdHJ1Y3QgYnBmX2h0YWIgKmh0YWIsIHZvaWQgKmtleSxcbiBcbiBcdGlmIChub2RlKSB7XG4gXHRcdGJwZl9tYXBfaW5jX2VsZW1fY291bnQoXHUwMDI2aHRhYi1cdTAwM2VtYXApO1xuLVx0XHRsID0gY29udGFpbmVyX29mKG5vZGUsIHN0cnVjdCBodGFiX2VsZW0sIGxydV9ub2RlKTtcbi1cdFx0bWVtY3B5KGwtXHUwMDNla2V5LCBrZXksIGh0YWItXHUwMDNlbWFwLmtleV9zaXplKTtcbitcdFx0bCA9IChzdHJ1Y3QgaHRhYl9lbGVtICopY29udGFpbmVyX29mKG5vZGUsIHN0cnVjdCBodGFiX2VsZW1fbHJ1LCBscnVfbm9kZSk7XG4rXHRcdG1lbWNweShodGFiX2VsZW1fa2V5KGh0YWIsIGwpLCBrZXksIGh0YWItXHUwMDNlbWFwLmtleV9zaXplKTtcbiBcdFx0cmV0dXJuIGw7XG4gXHR9XG4gXG5AQCAtMzQwLDggKzQxNSw3IEBAIHN0YXRpYyBpbnQgcHJlYWxsb2NfaW5pdChzdHJ1Y3QgYnBmX2h0YWIgKmh0YWIpXG4gXHRcdFx0XHRcdCAgICBHRlBfVVNFUiB8IF9fR0ZQX05PV0FSTik7XG4gXHRcdGlmICghcHB0cilcbiBcdFx0XHRnb3RvIGZyZWVfZWxlbXM7XG4tXHRcdGh0YWJfZWxlbV9zZXRfcHRyKGdldF9odGFiX2VsZW0oaHRhYiwgaSksIGh0YWItXHUwMDNlbWFwLmtleV9zaXplLFxuLVx0XHRcdFx0ICBwcHRyKTtcbitcdFx0aHRhYl9lbGVtX3NldF9wdHIoaHRhYiwgZ2V0X2h0YWJfZWxlbShodGFiLCBpKSwgcHB0cik7XG4gXHRcdGNvbmRfcmVzY2hlZCgpO1xuIFx0fVxuIFxuQEAgLTM0OSw4ICs0MjMsOCBAQCBzdGF0aWMgaW50IHByZWFsbG9jX2luaXQoc3RydWN0IGJwZl9odGFiICpodGFiKVxuIFx0aWYgKGh0YWJfaXNfbHJ1KGh0YWIpKVxuIFx0XHRlcnIgPSBicGZfbHJ1X2luaXQoXHUwMDI2aHRhYi1cdTAwM2VscnUsXG4gXHRcdFx0XHQgICBodGFiLVx1MDAzZW1hcC5tYXBfZmxhZ3MgXHUwMDI2IEJQRl9GX05PX0NPTU1PTl9MUlUsXG4tXHRcdFx0XHQgICBvZmZzZXRvZihzdHJ1Y3QgaHRhYl9lbGVtLCBoYXNoKSAtXG4tXHRcdFx0XHQgICBvZmZzZXRvZihzdHJ1Y3QgaHRhYl9lbGVtLCBscnVfbm9kZSksXG4rXHRcdFx0XHQgICBvZmZzZXRvZihzdHJ1Y3QgaHRhYl9lbGVtX2xydSwgaGFzaCkgLVxuK1x0XHRcdFx0ICAgb2Zmc2V0b2Yoc3RydWN0IGh0YWJfZWxlbV9scnUsIGxydV9ub2RlKSxcbiBcdFx0XHRcdCAgIGh0YWJfbHJ1X21hcF9kZWxldGVfbm9kZSxcbiBcdFx0XHRcdCAgIGh0YWIpO1xuIFx0ZWxzZVxuQEAgLTM2MSw3ICs0MzUsNyBAQCBzdGF0aWMgaW50IHByZWFsbG9jX2luaXQoc3RydWN0IGJwZl9odGFiICpodGFiKVxuIFxuIFx0aWYgKGh0YWJfaXNfbHJ1KGh0YWIpKVxuIFx0XHRicGZfbHJ1X3BvcHVsYXRlKFx1MDAyNmh0YWItXHUwMDNlbHJ1LCBodGFiLVx1MDAzZWVsZW1zLFxuLVx0XHRcdFx0IG9mZnNldG9mKHN0cnVjdCBodGFiX2VsZW0sIGxydV9ub2RlKSxcbitcdFx0XHRcdCBvZmZzZXRvZihzdHJ1Y3QgaHRhYl9lbGVtX2xydSwgbHJ1X25vZGUpLFxuIFx0XHRcdFx0IGh0YWItXHUwMDNlZWxlbV9zaXplLCBudW1fZW50cmllcyk7XG4gXHRlbHNlXG4gXHRcdHBjcHVfZnJlZWxpc3RfcG9wdWxhdGUoXHUwMDI2aHRhYi1cdTAwM2VmcmVlbGlzdCxcbkBAIC00MjgsNiArNTAyLDI1IEBAIHN0YXRpYyBpbnQgaHRhYl9tYXBfYWxsb2NfY2hlY2sodW5pb24gYnBmX2F0dHIgKmF0dHIpXG4gXHRCVUlMRF9CVUdfT04ob2Zmc2V0b2Yoc3RydWN0IGh0YWJfZWxlbSwgZm5vZGUubmV4dCkgIT1cbiBcdFx0ICAgICBvZmZzZXRvZihzdHJ1Y3QgaHRhYl9lbGVtLCBoYXNoX25vZGUucHByZXYpKTtcbiBcbitcdC8qIGh0YWJfZWxlbSBwb2ludGVycyBhcmUgdXNlZCBhcyBiYXNlIHBvaW50ZXJzIGZvciBodGFiX2VsZW1fbHJ1IGFuZFxuK1x0ICogaHRhYl9lbGVtX3BjcHUuIFRoZXNlIHN0cnVjdHVyZXMgbXVzdCBzaGFyZSBhIGNvbW1vbiBpbml0aWFsIHNlcXVlbmNlXG4rXHQgKiB0byBlbnN1cmUgcG9pbnRlciBjYXN0aW5nIGJldHdlZW4gdGhlbSBpcyBzYWZlLlxuK1x0ICovXG4rXHRCVUlMRF9CVUdfT04ob2Zmc2V0b2Yoc3RydWN0IGh0YWJfZWxlbSwgaGFzaF9ub2RlKSAhPVxuK1x0XHQgICAgIG9mZnNldG9mKHN0cnVjdCBodGFiX2VsZW1fbHJ1LCBoYXNoX25vZGUpKTtcbitcdEJVSUxEX0JVR19PTihvZmZzZXRvZihzdHJ1Y3QgaHRhYl9lbGVtLCBoYXNoX25vZGUpICE9XG4rXHRcdCAgICAgb2Zmc2V0b2Yoc3RydWN0IGh0YWJfZWxlbV9wY3B1LCBoYXNoX25vZGUpKTtcbitcbitcdEJVSUxEX0JVR19PTihvZmZzZXRvZihzdHJ1Y3QgaHRhYl9lbGVtLCBwYWRkaW5nKSAhPVxuK1x0XHQgICAgIG9mZnNldG9mKHN0cnVjdCBodGFiX2VsZW1fbHJ1LCBwYWRkaW5nKSk7XG4rXHRCVUlMRF9CVUdfT04ob2Zmc2V0b2Yoc3RydWN0IGh0YWJfZWxlbSwgcGFkZGluZykgIT1cbitcdFx0ICAgICBvZmZzZXRvZihzdHJ1Y3QgaHRhYl9lbGVtX3BjcHUsIHBhZGRpbmcpKTtcbitcbitcdEJVSUxEX0JVR19PTihvZmZzZXRvZihzdHJ1Y3QgaHRhYl9lbGVtLCBmbm9kZSkgIT1cbitcdFx0ICAgICBvZmZzZXRvZihzdHJ1Y3QgaHRhYl9lbGVtX2xydSwgZm5vZGUpKTtcbitcdEJVSUxEX0JVR19PTihvZmZzZXRvZihzdHJ1Y3QgaHRhYl9lbGVtLCBmbm9kZSkgIT1cbitcdFx0ICAgICBvZmZzZXRvZihzdHJ1Y3QgaHRhYl9lbGVtX3BjcHUsIGZub2RlKSk7XG4rXG4gXHRpZiAoemVyb19zZWVkIFx1MDAyNlx1MDAyNiAhY2FwYWJsZShDQVBfU1lTX0FETUlOKSlcbiBcdFx0LyogR3VhcmQgYWdhaW5zdCBsb2NhbCBEb1MsIGFuZCBkaXNjb3VyYWdlIHByb2R1Y3Rpb24gdXNlLiAqL1xuIFx0XHRyZXR1cm4gLUVQRVJNO1xuQEAgLTQ3Niw3ICs1NjksNyBAQCBzdGF0aWMgdm9pZCBodGFiX21lbV9kdG9yKHZvaWQgKm9iaiwgdm9pZCAqY3R4KVxuIFx0aWYgKElTX0VSUl9PUl9OVUxMKGhyZWMtXHUwMDNlcmVjb3JkKSlcbiBcdFx0cmV0dXJuO1xuIFxuLVx0bWFwX3ZhbHVlID0gaHRhYl9lbGVtX3ZhbHVlKGVsZW0sIGhyZWMtXHUwMDNla2V5X3NpemUpO1xuK1x0bWFwX3ZhbHVlID0gKHZvaWQgKillbGVtICsgaHJlYy1cdTAwM2VrZXlfb2Zmc2V0ICsgcm91bmRfdXAoaHJlYy1cdTAwM2VrZXlfc2l6ZSwgOCk7XG4gXHRicGZfb2JqX2ZyZWVfZmllbGRzKGhyZWMtXHUwMDNlcmVjb3JkLCBtYXBfdmFsdWUpO1xuIH1cbiBcbkBAIC01MDIsNyArNTk1LDcgQEAgc3RhdGljIHZvaWQgaHRhYl9kdG9yX2N0eF9mcmVlKHZvaWQgKmN0eClcbiB9XG4gXG4gc3RhdGljIGludCBicGZfbWFfc2V0X2R0b3Ioc3RydWN0IGJwZl9tYXAgKm1hcCwgc3RydWN0IGJwZl9tZW1fYWxsb2MgKm1hLFxuLVx0XHRcdCAgIHZvaWQgKCpkdG9yKSh2b2lkICosIHZvaWQgKikpXG4rXHRcdFx0ICAgdm9pZCAoKmR0b3IpKHZvaWQgKiwgdm9pZCAqKSwgdTMyIGtleV9vZmZzZXQpXG4ge1xuIFx0c3RydWN0IGh0YWJfYnRmX3JlY29yZCAqaHJlYztcbiBcdGludCBlcnI7XG5AQCAtNTE1LDYgKzYwOCw3IEBAIHN0YXRpYyBpbnQgYnBmX21hX3NldF9kdG9yKHN0cnVjdCBicGZfbWFwICptYXAsIHN0cnVjdCBicGZfbWVtX2FsbG9jICptYSxcbiBcdGlmICghaHJlYylcbiBcdFx0cmV0dXJuIC1FTk9NRU07XG4gXHRocmVjLVx1MDAzZWtleV9zaXplID0gbWFwLVx1MDAzZWtleV9zaXplO1xuK1x0aHJlYy1cdTAwM2VrZXlfb2Zmc2V0ID0ga2V5X29mZnNldDtcbiBcdGhyZWMtXHUwMDNlcmVjb3JkID0gYnRmX3JlY29yZF9kdXAobWFwLVx1MDAzZXJlY29yZCk7XG4gXHRpZiAoSVNfRVJSKGhyZWMtXHUwMDNlcmVjb3JkKSkge1xuIFx0XHRlcnIgPSBQVFJfRVJSKGhyZWMtXHUwMDNlcmVjb3JkKTtcbkBAIC01MzcsOSArNjMxLDkgQEAgc3RhdGljIGludCBodGFiX21hcF9jaGVja19idGYoc3RydWN0IGJwZl9tYXAgKm1hcCwgY29uc3Qgc3RydWN0IGJ0ZiAqYnRmLFxuIFx0ICogcG9wdWxhdGVkIGluIGh0YWJfbWFwX2FsbG9jKCksIHNvIGl0IHdpbGwgYWx3YXlzIGFwcGVhciBhcyBOVUxMLlxuIFx0ICovXG4gXHRpZiAoaHRhYl9pc19wZXJjcHUoaHRhYikpXG4tXHRcdHJldHVybiBicGZfbWFfc2V0X2R0b3IobWFwLCBcdTAwMjZodGFiLVx1MDAzZXBjcHVfbWEsIGh0YWJfcGNwdV9tZW1fZHRvcik7XG4rXHRcdHJldHVybiBicGZfbWFfc2V0X2R0b3IobWFwLCBcdTAwMjZodGFiLVx1MDAzZXBjcHVfbWEsIGh0YWJfcGNwdV9tZW1fZHRvciwgaHRhYi1cdTAwM2VrZXlfb2Zmc2V0KTtcbiBcdGVsc2Vcbi1cdFx0cmV0dXJuIGJwZl9tYV9zZXRfZHRvcihtYXAsIFx1MDAyNmh0YWItXHUwMDNlbWEsIGh0YWJfbWVtX2R0b3IpO1xuK1x0XHRyZXR1cm4gYnBmX21hX3NldF9kdG9yKG1hcCwgXHUwMDI2aHRhYi1cdTAwM2VtYSwgaHRhYl9tZW1fZHRvciwgaHRhYi1cdTAwM2VrZXlfb2Zmc2V0KTtcbiB9XG4gXG4gc3RhdGljIHN0cnVjdCBicGZfbWFwICpodGFiX21hcF9hbGxvYyh1bmlvbiBicGZfYXR0ciAqYXR0cilcbkBAIC01ODMsOCArNjc3LDE4IEBAIHN0YXRpYyBzdHJ1Y3QgYnBmX21hcCAqaHRhYl9tYXBfYWxsb2ModW5pb24gYnBmX2F0dHIgKmF0dHIpXG4gXG4gXHRodGFiLVx1MDAzZW5fYnVja2V0cyA9IHJvdW5kdXBfcG93X29mX3R3byhodGFiLVx1MDAzZW1hcC5tYXhfZW50cmllcyk7XG4gXG4tXHRodGFiLVx1MDAzZWVsZW1fc2l6ZSA9IHNpemVvZihzdHJ1Y3QgaHRhYl9lbGVtKSArXG4tXHRcdFx0ICByb3VuZF91cChodGFiLVx1MDAzZW1hcC5rZXlfc2l6ZSwgOCk7XG4rXHRpZiAoaHRhYl9pc19scnUoaHRhYikpXG4rXHRcdGh0YWItXHUwMDNla2V5X29mZnNldCA9IHNpemVvZihzdHJ1Y3QgaHRhYl9lbGVtX2xydSk7XG4rXHRlbHNlIGlmIChwZXJjcHUgXHUwMDI2XHUwMDI2ICFwcmVhbGxvYylcbitcdFx0aHRhYi1cdTAwM2VrZXlfb2Zmc2V0ID0gcm91bmRfdXAoaHRhYl9oYXNfaGFzaChodGFiKSA/XG4rXHRcdFx0XHRcdCAgICBzaXplb2Yoc3RydWN0IGh0YWJfZWxlbV9wY3B1KSA6XG4rXHRcdFx0XHRcdCAgICBvZmZzZXRvZihzdHJ1Y3QgaHRhYl9lbGVtX3BjcHUsIGhhc2gpLCA4KTtcbitcdGVsc2VcbitcdFx0aHRhYi1cdTAwM2VrZXlfb2Zmc2V0ID0gcm91bmRfdXAoaHRhYl9oYXNfaGFzaChodGFiKSA/XG4rXHRcdFx0XHRcdCAgICBzaXplb2Yoc3RydWN0IGh0YWJfZWxlbSkgOlxuK1x0XHRcdFx0XHQgICAgb2Zmc2V0b2Yoc3RydWN0IGh0YWJfZWxlbSwgaGFzaCksIDgpO1xuK1xuK1x0aHRhYi1cdTAwM2VlbGVtX3NpemUgPSBodGFiLVx1MDAzZWtleV9vZmZzZXQgKyByb3VuZF91cChodGFiLVx1MDAzZW1hcC5rZXlfc2l6ZSwgOCk7XG4gXHRpZiAocGVyY3B1KVxuIFx0XHRodGFiLVx1MDAzZWVsZW1fc2l6ZSArPSBzaXplb2Yodm9pZCAqKTtcbiBcdGVsc2VcbkBAIC02OTIsMTQgKzc5NiwxNiBAQCBzdGF0aWMgaW5saW5lIHN0cnVjdCBobGlzdF9udWxsc19oZWFkICpzZWxlY3RfYnVja2V0KHN0cnVjdCBicGZfaHRhYiAqaHRhYiwgdTMyXG4gfVxuIFxuIC8qIHRoaXMgbG9va3VwIGZ1bmN0aW9uIGNhbiBvbmx5IGJlIGNhbGxlZCB3aXRoIGJ1Y2tldCBsb2NrIHRha2VuICovXG4tc3RhdGljIHN0cnVjdCBodGFiX2VsZW0gKmxvb2t1cF9lbGVtX3JhdyhzdHJ1Y3QgaGxpc3RfbnVsbHNfaGVhZCAqaGVhZCwgdTMyIGhhc2gsXG4rc3RhdGljIHN0cnVjdCBodGFiX2VsZW0gKmxvb2t1cF9lbGVtX3JhdyhzdHJ1Y3QgYnBmX2h0YWIgKmh0YWIsXG4rXHRcdFx0XHRcdCBzdHJ1Y3QgaGxpc3RfbnVsbHNfaGVhZCAqaGVhZCwgdTMyIGhhc2gsXG4gXHRcdFx0XHRcdCB2b2lkICprZXksIHUzMiBrZXlfc2l6ZSlcbiB7XG4gXHRzdHJ1Y3QgaGxpc3RfbnVsbHNfbm9kZSAqbjtcbiBcdHN0cnVjdCBodGFiX2VsZW0gKmw7XG4gXG4gXHRobGlzdF9udWxsc19mb3JfZWFjaF9lbnRyeV9yY3UobCwgbiwgaGVhZCwgaGFzaF9ub2RlKVxuLVx0XHRpZiAobC1cdTAwM2VoYXNoID09IGhhc2ggXHUwMDI2XHUwMDI2ICFtZW1jbXAoXHUwMDI2bC1cdTAwM2VrZXksIGtleSwga2V5X3NpemUpKVxuK1x0XHRpZiAoKCFodGFiX2hhc19oYXNoKGh0YWIpIHx8IGh0YWJfZWxlbV9oYXNoKGh0YWIsIGwpID09IGhhc2gpIFx1MDAyNlx1MDAyNlxuK1x0XHQgICAgIW1lbWNtcChodGFiX2VsZW1fa2V5KGh0YWIsIGwpLCBrZXksIGtleV9zaXplKSlcbiBcdFx0XHRyZXR1cm4gbDtcbiBcbiBcdHJldHVybiBOVUxMO1xuQEAgLTcwOSw3ICs4MTUsOCBAQCBzdGF0aWMgc3RydWN0IGh0YWJfZWxlbSAqbG9va3VwX2VsZW1fcmF3KHN0cnVjdCBobGlzdF9udWxsc19oZWFkICpoZWFkLCB1MzIgaGFzaFxuICAqIHRoZSB1bmxpa2VseSBldmVudCB3aGVuIGVsZW1lbnRzIG1vdmVkIGZyb20gb25lIGJ1Y2tldCBpbnRvIGFub3RoZXJcbiAgKiB3aGlsZSBsaW5rIGxpc3QgaXMgYmVpbmcgd2Fsa2VkXG4gICovXG4tc3RhdGljIHN0cnVjdCBodGFiX2VsZW0gKmxvb2t1cF9udWxsc19lbGVtX3JhdyhzdHJ1Y3QgaGxpc3RfbnVsbHNfaGVhZCAqaGVhZCxcbitzdGF0aWMgc3RydWN0IGh0YWJfZWxlbSAqbG9va3VwX251bGxzX2VsZW1fcmF3KHN0cnVjdCBicGZfaHRhYiAqaHRhYixcbitcdFx0XHRcdFx0ICAgICAgIHN0cnVjdCBobGlzdF9udWxsc19oZWFkICpoZWFkLFxuIFx0XHRcdFx0XHQgICAgICAgdTMyIGhhc2gsIHZvaWQgKmtleSxcbiBcdFx0XHRcdFx0ICAgICAgIHUzMiBrZXlfc2l6ZSwgdTMyIG5fYnVja2V0cylcbiB7XG5AQCAtNzE4LDcgKzgyNSw4IEBAIHN0YXRpYyBzdHJ1Y3QgaHRhYl9lbGVtICpsb29rdXBfbnVsbHNfZWxlbV9yYXcoc3RydWN0IGhsaXN0X251bGxzX2hlYWQgKmhlYWQsXG4gXG4gYWdhaW46XG4gXHRobGlzdF9udWxsc19mb3JfZWFjaF9lbnRyeV9yY3UobCwgbiwgaGVhZCwgaGFzaF9ub2RlKVxuLVx0XHRpZiAobC1cdTAwM2VoYXNoID09IGhhc2ggXHUwMDI2XHUwMDI2ICFtZW1jbXAoXHUwMDI2bC1cdTAwM2VrZXksIGtleSwga2V5X3NpemUpKVxuK1x0XHRpZiAoKCFodGFiX2hhc19oYXNoKGh0YWIpIHx8IGh0YWJfZWxlbV9oYXNoKGh0YWIsIGwpID09IGhhc2gpIFx1MDAyNlx1MDAyNlxuK1x0XHQgICAgIW1lbWNtcChodGFiX2VsZW1fa2V5KGh0YWIsIGwpLCBrZXksIGtleV9zaXplKSlcbiBcdFx0XHRyZXR1cm4gbDtcbiBcbiBcdGlmICh1bmxpa2VseShnZXRfbnVsbHNfdmFsdWUobikgIT0gKGhhc2ggXHUwMDI2IChuX2J1Y2tldHMgLSAxKSkpKVxuQEAgLTc0NywxNyArODU1LDE4IEBAIHN0YXRpYyB2b2lkICpfX2h0YWJfbWFwX2xvb2t1cF9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSlcbiBcbiBcdGhlYWQgPSBzZWxlY3RfYnVja2V0KGh0YWIsIGhhc2gpO1xuIFxuLVx0bCA9IGxvb2t1cF9udWxsc19lbGVtX3JhdyhoZWFkLCBoYXNoLCBrZXksIGtleV9zaXplLCBodGFiLVx1MDAzZW5fYnVja2V0cyk7XG4rXHRsID0gbG9va3VwX251bGxzX2VsZW1fcmF3KGh0YWIsIGhlYWQsIGhhc2gsIGtleSwga2V5X3NpemUsIGh0YWItXHUwMDNlbl9idWNrZXRzKTtcbiBcbiBcdHJldHVybiBsO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCAqaHRhYl9tYXBfbG9va3VwX2VsZW0oc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5KVxuIHtcbitcdHN0cnVjdCBicGZfaHRhYiAqaHRhYiA9IGNvbnRhaW5lcl9vZihtYXAsIHN0cnVjdCBicGZfaHRhYiwgbWFwKTtcbiBcdHN0cnVjdCBodGFiX2VsZW0gKmwgPSBfX2h0YWJfbWFwX2xvb2t1cF9lbGVtKG1hcCwga2V5KTtcbiBcbiBcdGlmIChsKVxuLVx0XHRyZXR1cm4gaHRhYl9lbGVtX3ZhbHVlKGwsIG1hcC1cdTAwM2VrZXlfc2l6ZSk7XG4rXHRcdHJldHVybiBodGFiX2VsZW1fdmFsdWUoaHRhYiwgbCk7XG4gXG4gXHRyZXR1cm4gTlVMTDtcbiB9XG5AQCAtNzc1LDYgKzg4NCw3IEBAIHN0YXRpYyB2b2lkICpodGFiX21hcF9sb29rdXBfZWxlbShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXkpXG4gICovXG4gc3RhdGljIGludCBodGFiX21hcF9nZW5fbG9va3VwKHN0cnVjdCBicGZfbWFwICptYXAsIHN0cnVjdCBicGZfaW5zbiAqaW5zbl9idWYpXG4ge1xuK1x0c3RydWN0IGJwZl9odGFiICpodGFiID0gY29udGFpbmVyX29mKG1hcCwgc3RydWN0IGJwZl9odGFiLCBtYXApO1xuIFx0c3RydWN0IGJwZl9pbnNuICppbnNuID0gaW5zbl9idWY7XG4gXHRjb25zdCBpbnQgcmV0ID0gQlBGX1JFR18wO1xuIFxuQEAgLTc4Myw3ICs4OTMsNyBAQCBzdGF0aWMgaW50IGh0YWJfbWFwX2dlbl9sb29rdXAoc3RydWN0IGJwZl9tYXAgKm1hcCwgc3RydWN0IGJwZl9pbnNuICppbnNuX2J1ZilcbiBcdCppbnNuKysgPSBCUEZfRU1JVF9DQUxMKF9faHRhYl9tYXBfbG9va3VwX2VsZW0pO1xuIFx0Kmluc24rKyA9IEJQRl9KTVBfSU1NKEJQRl9KRVEsIHJldCwgMCwgMSk7XG4gXHQqaW5zbisrID0gQlBGX0FMVTY0X0lNTShCUEZfQURELCByZXQsXG4tXHRcdFx0XHRvZmZzZXRvZihzdHJ1Y3QgaHRhYl9lbGVtLCBrZXkpICtcbitcdFx0XHRcdGh0YWItXHUwMDNla2V5X29mZnNldCArXG4gXHRcdFx0XHRyb3VuZF91cChtYXAtXHUwMDNla2V5X3NpemUsIDgpKTtcbiBcdHJldHVybiBpbnNuIC0gaW5zbl9idWY7XG4gfVxuQEAgLTc5MSwxMiArOTAxLDEzIEBAIHN0YXRpYyBpbnQgaHRhYl9tYXBfZ2VuX2xvb2t1cChzdHJ1Y3QgYnBmX21hcCAqbWFwLCBzdHJ1Y3QgYnBmX2luc24gKmluc25fYnVmKVxuIHN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCAqX19odGFiX2xydV9tYXBfbG9va3VwX2VsZW0oc3RydWN0IGJwZl9tYXAgKm1hcCxcbiBcdFx0XHRcdFx0XHRcdHZvaWQgKmtleSwgY29uc3QgYm9vbCBtYXJrKVxuIHtcbitcdHN0cnVjdCBicGZfaHRhYiAqaHRhYiA9IGNvbnRhaW5lcl9vZihtYXAsIHN0cnVjdCBicGZfaHRhYiwgbWFwKTtcbiBcdHN0cnVjdCBodGFiX2VsZW0gKmwgPSBfX2h0YWJfbWFwX2xvb2t1cF9lbGVtKG1hcCwga2V5KTtcbiBcbiBcdGlmIChsKSB7XG4gXHRcdGlmIChtYXJrKVxuLVx0XHRcdGJwZl9scnVfbm9kZV9zZXRfcmVmKFx1MDAyNmwtXHUwMDNlbHJ1X25vZGUpO1xuLVx0XHRyZXR1cm4gaHRhYl9lbGVtX3ZhbHVlKGwsIG1hcC1cdTAwM2VrZXlfc2l6ZSk7XG4rXHRcdFx0YnBmX2xydV9ub2RlX3NldF9yZWYoaHRhYl9lbGVtX2xydV9ub2RlKGwpKTtcbitcdFx0cmV0dXJuIGh0YWJfZWxlbV92YWx1ZShodGFiLCBsKTtcbiBcdH1cbiBcbiBcdHJldHVybiBOVUxMO1xuQEAgLTgxNSw2ICs5MjYsNyBAQCBzdGF0aWMgdm9pZCAqaHRhYl9scnVfbWFwX2xvb2t1cF9lbGVtX3N5cyhzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXkpXG4gc3RhdGljIGludCBodGFiX2xydV9tYXBfZ2VuX2xvb2t1cChzdHJ1Y3QgYnBmX21hcCAqbWFwLFxuIFx0XHRcdFx0ICAgc3RydWN0IGJwZl9pbnNuICppbnNuX2J1ZilcbiB7XG4rXHRzdHJ1Y3QgYnBmX2h0YWIgKmh0YWIgPSBjb250YWluZXJfb2YobWFwLCBzdHJ1Y3QgYnBmX2h0YWIsIG1hcCk7XG4gXHRzdHJ1Y3QgYnBmX2luc24gKmluc24gPSBpbnNuX2J1ZjtcbiBcdGNvbnN0IGludCByZXQgPSBCUEZfUkVHXzA7XG4gXHRjb25zdCBpbnQgcmVmX3JlZyA9IEJQRl9SRUdfMTtcbkBAIC04MjQsMTUgKzkzNiwxNSBAQCBzdGF0aWMgaW50IGh0YWJfbHJ1X21hcF9nZW5fbG9va3VwKHN0cnVjdCBicGZfbWFwICptYXAsXG4gXHQqaW5zbisrID0gQlBGX0VNSVRfQ0FMTChfX2h0YWJfbWFwX2xvb2t1cF9lbGVtKTtcbiBcdCppbnNuKysgPSBCUEZfSk1QX0lNTShCUEZfSkVRLCByZXQsIDAsIDQpO1xuIFx0Kmluc24rKyA9IEJQRl9MRFhfTUVNKEJQRl9CLCByZWZfcmVnLCByZXQsXG4tXHRcdFx0ICAgICAgb2Zmc2V0b2Yoc3RydWN0IGh0YWJfZWxlbSwgbHJ1X25vZGUpICtcbitcdFx0XHQgICAgICBvZmZzZXRvZihzdHJ1Y3QgaHRhYl9lbGVtX2xydSwgbHJ1X25vZGUpICtcbiBcdFx0XHQgICAgICBvZmZzZXRvZihzdHJ1Y3QgYnBmX2xydV9ub2RlLCByZWYpKTtcbiBcdCppbnNuKysgPSBCUEZfSk1QX0lNTShCUEZfSk5FLCByZWZfcmVnLCAwLCAxKTtcbiBcdCppbnNuKysgPSBCUEZfU1RfTUVNKEJQRl9CLCByZXQsXG4tXHRcdFx0ICAgICBvZmZzZXRvZihzdHJ1Y3QgaHRhYl9lbGVtLCBscnVfbm9kZSkgK1xuK1x0XHRcdCAgICAgb2Zmc2V0b2Yoc3RydWN0IGh0YWJfZWxlbV9scnUsIGxydV9ub2RlKSArXG4gXHRcdFx0ICAgICBvZmZzZXRvZihzdHJ1Y3QgYnBmX2xydV9ub2RlLCByZWYpLFxuIFx0XHRcdCAgICAgMSk7XG4gXHQqaW5zbisrID0gQlBGX0FMVTY0X0lNTShCUEZfQURELCByZXQsXG4tXHRcdFx0XHRvZmZzZXRvZihzdHJ1Y3QgaHRhYl9lbGVtLCBrZXkpICtcbitcdFx0XHRcdGh0YWItXHUwMDNla2V5X29mZnNldCArXG4gXHRcdFx0XHRyb3VuZF91cChtYXAtXHUwMDNla2V5X3NpemUsIDgpKTtcbiBcdHJldHVybiBpbnNuIC0gaW5zbl9idWY7XG4gfVxuQEAgLTg0NCwxMyArOTU2LDEzIEBAIHN0YXRpYyB2b2lkIGNoZWNrX2FuZF9jYW5jZWxfZmllbGRzKHN0cnVjdCBicGZfaHRhYiAqaHRhYixcbiBcdFx0cmV0dXJuO1xuIFxuIFx0aWYgKGh0YWJfaXNfcGVyY3B1KGh0YWIpKSB7XG4tXHRcdHZvaWQgX19wZXJjcHUgKnBwdHIgPSBodGFiX2VsZW1fZ2V0X3B0cihlbGVtLCBodGFiLVx1MDAzZW1hcC5rZXlfc2l6ZSk7XG4rXHRcdHZvaWQgX19wZXJjcHUgKnBwdHIgPSBodGFiX2VsZW1fZ2V0X3B0cihodGFiLCBlbGVtKTtcbiBcdFx0aW50IGNwdTtcbiBcbiBcdFx0Zm9yX2VhY2hfcG9zc2libGVfY3B1KGNwdSlcbiBcdFx0XHRicGZfb2JqX2NhbmNlbF9maWVsZHMoXHUwMDI2aHRhYi1cdTAwM2VtYXAsIHBlcl9jcHVfcHRyKHBwdHIsIGNwdSkpO1xuIFx0fSBlbHNlIHtcbi1cdFx0dm9pZCAqbWFwX3ZhbHVlID0gaHRhYl9lbGVtX3ZhbHVlKGVsZW0sIGh0YWItXHUwMDNlbWFwLmtleV9zaXplKTtcbitcdFx0dm9pZCAqbWFwX3ZhbHVlID0gaHRhYl9lbGVtX3ZhbHVlKGh0YWIsIGVsZW0pO1xuIFxuIFx0XHRicGZfb2JqX2NhbmNlbF9maWVsZHMoXHUwMDI2aHRhYi1cdTAwM2VtYXAsIG1hcF92YWx1ZSk7XG4gXHR9XG5AQCAtODY5LDggKzk4MSw4IEBAIHN0YXRpYyBib29sIGh0YWJfbHJ1X21hcF9kZWxldGVfbm9kZSh2b2lkICphcmcsIHN0cnVjdCBicGZfbHJ1X25vZGUgKm5vZGUpXG4gXHRzdHJ1Y3QgYnVja2V0ICpiO1xuIFx0aW50IHJldDtcbiBcbi1cdHRndF9sID0gY29udGFpbmVyX29mKG5vZGUsIHN0cnVjdCBodGFiX2VsZW0sIGxydV9ub2RlKTtcbi1cdGIgPSBfX3NlbGVjdF9idWNrZXQoaHRhYiwgdGd0X2wtXHUwMDNlaGFzaCk7XG4rXHR0Z3RfbCA9IChzdHJ1Y3QgaHRhYl9lbGVtICopY29udGFpbmVyX29mKG5vZGUsIHN0cnVjdCBodGFiX2VsZW1fbHJ1LCBscnVfbm9kZSk7XG4rXHRiID0gX19zZWxlY3RfYnVja2V0KGh0YWIsIGh0YWJfZWxlbV9oYXNoKGh0YWIsIHRndF9sKSk7XG4gXHRoZWFkID0gXHUwMDI2Yi1cdTAwM2VoZWFkO1xuIFxuIFx0cmV0ID0gaHRhYl9sb2NrX2J1Y2tldChiLCBcdTAwMjZmbGFncyk7XG5AQCAtOTEyLDcgKzEwMjQsNyBAQCBzdGF0aWMgaW50IGh0YWJfbWFwX2dldF9uZXh0X2tleShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXksIHZvaWQgKm5leHRfa2V5KVxuIFx0aGVhZCA9IHNlbGVjdF9idWNrZXQoaHRhYiwgaGFzaCk7XG4gXG4gXHQvKiBsb29rdXAgdGhlIGtleSAqL1xuLVx0bCA9IGxvb2t1cF9udWxsc19lbGVtX3JhdyhoZWFkLCBoYXNoLCBrZXksIGtleV9zaXplLCBodGFiLVx1MDAzZW5fYnVja2V0cyk7XG4rXHRsID0gbG9va3VwX251bGxzX2VsZW1fcmF3KGh0YWIsIGhlYWQsIGhhc2gsIGtleSwga2V5X3NpemUsIGh0YWItXHUwMDNlbl9idWNrZXRzKTtcbiBcbiBcdGlmICghbClcbiBcdFx0Z290byBmaW5kX2ZpcnN0X2VsZW07XG5AQCAtOTIzLDcgKzEwMzUsNyBAQCBzdGF0aWMgaW50IGh0YWJfbWFwX2dldF9uZXh0X2tleShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXksIHZvaWQgKm5leHRfa2V5KVxuIFxuIFx0aWYgKG5leHRfbCkge1xuIFx0XHQvKiBpZiBuZXh0IGVsZW0gaW4gdGhpcyBoYXNoIGxpc3QgaXMgbm9uLXplcm8sIGp1c3QgcmV0dXJuIGl0ICovXG4tXHRcdG1lbWNweShuZXh0X2tleSwgbmV4dF9sLVx1MDAzZWtleSwga2V5X3NpemUpO1xuK1x0XHRtZW1jcHkobmV4dF9rZXksIGh0YWJfZWxlbV9rZXkoaHRhYiwgbmV4dF9sKSwga2V5X3NpemUpO1xuIFx0XHRyZXR1cm4gMDtcbiBcdH1cbiBcbkBAIC05NDEsNyArMTA1Myw3IEBAIHN0YXRpYyBpbnQgaHRhYl9tYXBfZ2V0X25leHRfa2V5KHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSwgdm9pZCAqbmV4dF9rZXkpXG4gXHRcdFx0XHRcdCAgc3RydWN0IGh0YWJfZWxlbSwgaGFzaF9ub2RlKTtcbiBcdFx0aWYgKG5leHRfbCkge1xuIFx0XHRcdC8qIGlmIGl0J3Mgbm90IGVtcHR5LCBqdXN0IHJldHVybiBpdCAqL1xuLVx0XHRcdG1lbWNweShuZXh0X2tleSwgbmV4dF9sLVx1MDAzZWtleSwga2V5X3NpemUpO1xuK1x0XHRcdG1lbWNweShuZXh0X2tleSwgaHRhYl9lbGVtX2tleShodGFiLCBuZXh0X2wpLCBrZXlfc2l6ZSk7XG4gXHRcdFx0cmV0dXJuIDA7XG4gXHRcdH1cbiBcdH1cbkBAIC05NTUsNyArMTA2Nyw3IEBAIHN0YXRpYyB2b2lkIGh0YWJfZWxlbV9mcmVlKHN0cnVjdCBicGZfaHRhYiAqaHRhYiwgc3RydWN0IGh0YWJfZWxlbSAqbClcbiBcdGNoZWNrX2FuZF9jYW5jZWxfZmllbGRzKGh0YWIsIGwpO1xuIFxuIFx0aWYgKGh0YWItXHUwMDNlbWFwLm1hcF90eXBlID09IEJQRl9NQVBfVFlQRV9QRVJDUFVfSEFTSClcbi1cdFx0YnBmX21lbV9jYWNoZV9mcmVlKFx1MDAyNmh0YWItXHUwMDNlcGNwdV9tYSwgbC1cdTAwM2VwdHJfdG9fcHB0cik7XG4rXHRcdGJwZl9tZW1fY2FjaGVfZnJlZShcdTAwMjZodGFiLVx1MDAzZXBjcHVfbWEsIGh0YWJfZWxlbV9nZXRfcHRyX3RvX3BwdHIobCkpO1xuIFx0YnBmX21lbV9jYWNoZV9mcmVlKFx1MDAyNmh0YWItXHUwMDNlbWEsIGwpO1xuIH1cbiBcbkBAIC05NjUsNyArMTA3Nyw3IEBAIHN0YXRpYyB2b2lkIGh0YWJfcHV0X2ZkX3ZhbHVlKHN0cnVjdCBicGZfaHRhYiAqaHRhYiwgc3RydWN0IGh0YWJfZWxlbSAqbClcbiBcdHZvaWQgKnB0cjtcbiBcbiBcdGlmIChtYXAtXHUwMDNlb3BzLVx1MDAzZW1hcF9mZF9wdXRfcHRyKSB7XG4tXHRcdHB0ciA9IGZkX2h0YWJfbWFwX2dldF9wdHIobWFwLCBsKTtcbitcdFx0cHRyID0gZmRfaHRhYl9tYXBfZ2V0X3B0cihodGFiLCBsKTtcbiBcdFx0bWFwLVx1MDAzZW9wcy1cdTAwM2VtYXBfZmRfcHV0X3B0cihtYXAsIHB0ciwgdHJ1ZSk7XG4gXHR9XG4gfVxuQEAgLTExMTcsMTAgKzEyMjksMTAgQEAgc3RhdGljIHN0cnVjdCBodGFiX2VsZW0gKmFsbG9jX2h0YWJfZWxlbShzdHJ1Y3QgYnBmX2h0YWIgKmh0YWIsIHZvaWQgKmtleSxcbiBcdFx0fVxuIFx0fVxuIFxuLVx0bWVtY3B5KGxfbmV3LVx1MDAzZWtleSwga2V5LCBrZXlfc2l6ZSk7XG4rXHRtZW1jcHkoaHRhYl9lbGVtX2tleShodGFiLCBsX25ldyksIGtleSwga2V5X3NpemUpO1xuIFx0aWYgKHBlcmNwdSkge1xuIFx0XHRpZiAocHJlYWxsb2MpIHtcbi1cdFx0XHRwcHRyID0gaHRhYl9lbGVtX2dldF9wdHIobF9uZXcsIGtleV9zaXplKTtcbitcdFx0XHRwcHRyID0gaHRhYl9lbGVtX2dldF9wdHIoaHRhYiwgbF9uZXcpO1xuIFx0XHR9IGVsc2Uge1xuIFx0XHRcdC8qIGFsbG9jX3BlcmNwdSB6ZXJvLWZpbGxzICovXG4gXHRcdFx0dm9pZCAqcHRyID0gYnBmX21lbV9jYWNoZV9hbGxvYyhcdTAwMjZodGFiLVx1MDAzZXBjcHVfbWEpO1xuQEAgLTExMzAsMjYgKzEyNDIsMjYgQEAgc3RhdGljIHN0cnVjdCBodGFiX2VsZW0gKmFsbG9jX2h0YWJfZWxlbShzdHJ1Y3QgYnBmX2h0YWIgKmh0YWIsIHZvaWQgKmtleSxcbiBcdFx0XHRcdGxfbmV3ID0gRVJSX1BUUigtRU5PTUVNKTtcbiBcdFx0XHRcdGdvdG8gZGVjX2NvdW50O1xuIFx0XHRcdH1cbi1cdFx0XHRsX25ldy1cdTAwM2VwdHJfdG9fcHB0ciA9IHB0cjtcbitcdFx0XHRodGFiX2VsZW1fc2V0X3B0cl90b19wcHRyKGxfbmV3LCBwdHIpO1xuIFx0XHRcdHBwdHIgPSAqKHZvaWQgX19wZXJjcHUgKiopcHRyO1xuIFx0XHR9XG4gXG4gXHRcdHBjcHVfaW5pdF92YWx1ZShodGFiLCBwcHRyLCB2YWx1ZSwgb25hbGxjcHVzLCBtYXBfZmxhZ3MpO1xuIFxuIFx0XHRpZiAoIXByZWFsbG9jKVxuLVx0XHRcdGh0YWJfZWxlbV9zZXRfcHRyKGxfbmV3LCBrZXlfc2l6ZSwgcHB0cik7XG4rXHRcdFx0aHRhYl9lbGVtX3NldF9wdHIoaHRhYiwgbF9uZXcsIHBwdHIpO1xuIFx0fSBlbHNlIGlmIChmZF9odGFiX21hcF9uZWVkc19hZGp1c3QoaHRhYikpIHtcbiBcdFx0c2l6ZSA9IHJvdW5kX3VwKHNpemUsIDgpO1xuLVx0XHRtZW1jcHkoaHRhYl9lbGVtX3ZhbHVlKGxfbmV3LCBrZXlfc2l6ZSksIHZhbHVlLCBzaXplKTtcbitcdFx0bWVtY3B5KGh0YWJfZWxlbV92YWx1ZShodGFiLCBsX25ldyksIHZhbHVlLCBzaXplKTtcbiBcdH0gZWxzZSBpZiAobWFwX2ZsYWdzIFx1MDAyNiBCUEZfRl9MT0NLKSB7XG4gXHRcdGNvcHlfbWFwX3ZhbHVlX2xvY2tlZChcdTAwMjZodGFiLVx1MDAzZW1hcCxcbi1cdFx0XHRcdCAgICAgIGh0YWJfZWxlbV92YWx1ZShsX25ldywga2V5X3NpemUpLFxuK1x0XHRcdFx0ICAgICAgaHRhYl9lbGVtX3ZhbHVlKGh0YWIsIGxfbmV3KSxcbiBcdFx0XHRcdCAgICAgIHZhbHVlLCBmYWxzZSk7XG4gXHR9IGVsc2Uge1xuLVx0XHRjb3B5X21hcF92YWx1ZShcdTAwMjZodGFiLVx1MDAzZW1hcCwgaHRhYl9lbGVtX3ZhbHVlKGxfbmV3LCBrZXlfc2l6ZSksIHZhbHVlKTtcbitcdFx0Y29weV9tYXBfdmFsdWUoXHUwMDI2aHRhYi1cdTAwM2VtYXAsIGh0YWJfZWxlbV92YWx1ZShodGFiLCBsX25ldyksIHZhbHVlKTtcbiBcdH1cbiBcbi1cdGxfbmV3LVx1MDAzZWhhc2ggPSBoYXNoO1xuK1x0aHRhYl9lbGVtX3NldF9oYXNoKGh0YWIsIGxfbmV3LCBoYXNoKTtcbiBcdHJldHVybiBsX25ldztcbiBkZWNfY291bnQ6XG4gXHRkZWNfZWxlbV9jb3VudChodGFiKTtcbkBAIC0xMTk5LDcgKzEzMTEsNyBAQCBzdGF0aWMgbG9uZyBodGFiX21hcF91cGRhdGVfZWxlbShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXksIHZvaWQgKnZhbHVlLFxuIFx0XHRpZiAodW5saWtlbHkoIWJ0Zl9yZWNvcmRfaGFzX2ZpZWxkKG1hcC1cdTAwM2VyZWNvcmQsIEJQRl9TUElOX0xPQ0spKSlcbiBcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdFx0LyogZmluZCBhbiBlbGVtZW50IHdpdGhvdXQgdGFraW5nIHRoZSBidWNrZXQgbG9jayAqL1xuLVx0XHRsX29sZCA9IGxvb2t1cF9udWxsc19lbGVtX3JhdyhoZWFkLCBoYXNoLCBrZXksIGtleV9zaXplLFxuK1x0XHRsX29sZCA9IGxvb2t1cF9udWxsc19lbGVtX3JhdyhodGFiLCBoZWFkLCBoYXNoLCBrZXksIGtleV9zaXplLFxuIFx0XHRcdFx0XHQgICAgICBodGFiLVx1MDAzZW5fYnVja2V0cyk7XG4gXHRcdHJldCA9IGNoZWNrX2ZsYWdzKGh0YWIsIGxfb2xkLCBtYXBfZmxhZ3MpO1xuIFx0XHRpZiAocmV0KVxuQEAgLTEyMDcsNyArMTMxOSw3IEBAIHN0YXRpYyBsb25nIGh0YWJfbWFwX3VwZGF0ZV9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSwgdm9pZCAqdmFsdWUsXG4gXHRcdGlmIChsX29sZCkge1xuIFx0XHRcdC8qIGdyYWIgdGhlIGVsZW1lbnQgbG9jayBhbmQgdXBkYXRlIHZhbHVlIGluIHBsYWNlICovXG4gXHRcdFx0Y29weV9tYXBfdmFsdWVfbG9ja2VkKG1hcCxcbi1cdFx0XHRcdFx0ICAgICAgaHRhYl9lbGVtX3ZhbHVlKGxfb2xkLCBrZXlfc2l6ZSksXG4rXHRcdFx0XHRcdCAgICAgIGh0YWJfZWxlbV92YWx1ZShodGFiLCBsX29sZCksXG4gXHRcdFx0XHRcdCAgICAgIHZhbHVlLCBmYWxzZSk7XG4gXHRcdFx0cmV0dXJuIDA7XG4gXHRcdH1cbkBAIC0xMjIxLDcgKzEzMzMsNyBAQCBzdGF0aWMgbG9uZyBodGFiX21hcF91cGRhdGVfZWxlbShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXksIHZvaWQgKnZhbHVlLFxuIFx0aWYgKHJldClcbiBcdFx0cmV0dXJuIHJldDtcbiBcbi1cdGxfb2xkID0gbG9va3VwX2VsZW1fcmF3KGhlYWQsIGhhc2gsIGtleSwga2V5X3NpemUpO1xuK1x0bF9vbGQgPSBsb29rdXBfZWxlbV9yYXcoaHRhYiwgaGVhZCwgaGFzaCwga2V5LCBrZXlfc2l6ZSk7XG4gXG4gXHRyZXQgPSBjaGVja19mbGFncyhodGFiLCBsX29sZCwgbWFwX2ZsYWdzKTtcbiBcdGlmIChyZXQpXG5AQCAtMTIzNSw3ICsxMzQ3LDcgQEAgc3RhdGljIGxvbmcgaHRhYl9tYXBfdXBkYXRlX2VsZW0oc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5LCB2b2lkICp2YWx1ZSxcbiBcdFx0ICogYW5kIHVwZGF0ZSBlbGVtZW50IGluIHBsYWNlXG4gXHRcdCAqL1xuIFx0XHRjb3B5X21hcF92YWx1ZV9sb2NrZWQobWFwLFxuLVx0XHRcdFx0ICAgICAgaHRhYl9lbGVtX3ZhbHVlKGxfb2xkLCBrZXlfc2l6ZSksXG4rXHRcdFx0XHQgICAgICBodGFiX2VsZW1fdmFsdWUoaHRhYiwgbF9vbGQpLFxuIFx0XHRcdFx0ICAgICAgdmFsdWUsIGZhbHNlKTtcbiBcdFx0cmV0ID0gMDtcbiBcdFx0Z290byBlcnI7XG5AQCAtMTI3NSw3ICsxMzg3LDcgQEAgc3RhdGljIHZvaWQgaHRhYl9scnVfcHVzaF9mcmVlKHN0cnVjdCBicGZfaHRhYiAqaHRhYiwgc3RydWN0IGh0YWJfZWxlbSAqZWxlbSlcbiB7XG4gXHRjaGVja19hbmRfY2FuY2VsX2ZpZWxkcyhodGFiLCBlbGVtKTtcbiBcdGJwZl9tYXBfZGVjX2VsZW1fY291bnQoXHUwMDI2aHRhYi1cdTAwM2VtYXApO1xuLVx0YnBmX2xydV9wdXNoX2ZyZWUoXHUwMDI2aHRhYi1cdTAwM2VscnUsIFx1MDAyNmVsZW0tXHUwMDNlbHJ1X25vZGUpO1xuK1x0YnBmX2xydV9wdXNoX2ZyZWUoXHUwMDI2aHRhYi1cdTAwM2VscnUsIGh0YWJfZWxlbV9scnVfbm9kZShlbGVtKSk7XG4gfVxuIFxuIHN0YXRpYyBsb25nIGh0YWJfbHJ1X21hcF91cGRhdGVfZWxlbShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXksIHZvaWQgKnZhbHVlLFxuQEAgLTEzMTAsMTMgKzE0MjIsMTMgQEAgc3RhdGljIGxvbmcgaHRhYl9scnVfbWFwX3VwZGF0ZV9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSwgdm9pZCAqdmFsdWVcbiBcdGxfbmV3ID0gcHJlYWxsb2NfbHJ1X3BvcChodGFiLCBrZXksIGhhc2gpO1xuIFx0aWYgKCFsX25ldylcbiBcdFx0cmV0dXJuIC1FTk9NRU07XG4tXHRjb3B5X21hcF92YWx1ZShcdTAwMjZodGFiLVx1MDAzZW1hcCwgaHRhYl9lbGVtX3ZhbHVlKGxfbmV3LCBtYXAtXHUwMDNla2V5X3NpemUpLCB2YWx1ZSk7XG4rXHRjb3B5X21hcF92YWx1ZShcdTAwMjZodGFiLVx1MDAzZW1hcCwgaHRhYl9lbGVtX3ZhbHVlKGh0YWIsIGxfbmV3KSwgdmFsdWUpO1xuIFxuIFx0cmV0ID0gaHRhYl9sb2NrX2J1Y2tldChiLCBcdTAwMjZmbGFncyk7XG4gXHRpZiAocmV0KVxuIFx0XHRnb3RvIGVycl9sb2NrX2J1Y2tldDtcbiBcbi1cdGxfb2xkID0gbG9va3VwX2VsZW1fcmF3KGhlYWQsIGhhc2gsIGtleSwga2V5X3NpemUpO1xuK1x0bF9vbGQgPSBsb29rdXBfZWxlbV9yYXcoaHRhYiwgaGVhZCwgaGFzaCwga2V5LCBrZXlfc2l6ZSk7XG4gXG4gXHRyZXQgPSBjaGVja19mbGFncyhodGFiLCBsX29sZCwgbWFwX2ZsYWdzKTtcbiBcdGlmIChyZXQpXG5AQCAtMTMyNyw3ICsxNDM5LDcgQEAgc3RhdGljIGxvbmcgaHRhYl9scnVfbWFwX3VwZGF0ZV9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSwgdm9pZCAqdmFsdWVcbiBcdCAqL1xuIFx0aGxpc3RfbnVsbHNfYWRkX2hlYWRfcmN1KFx1MDAyNmxfbmV3LVx1MDAzZWhhc2hfbm9kZSwgaGVhZCk7XG4gXHRpZiAobF9vbGQpIHtcbi1cdFx0YnBmX2xydV9ub2RlX3NldF9yZWYoXHUwMDI2bF9uZXctXHUwMDNlbHJ1X25vZGUpO1xuK1x0XHRicGZfbHJ1X25vZGVfc2V0X3JlZihodGFiX2VsZW1fbHJ1X25vZGUobF9uZXcpKTtcbiBcdFx0aGxpc3RfbnVsbHNfZGVsX3JjdShcdTAwMjZsX29sZC1cdTAwM2VoYXNoX25vZGUpO1xuIFx0fVxuIFx0cmV0ID0gMDtcbkBAIC0xMzgzLDcgKzE0OTUsNyBAQCBzdGF0aWMgbG9uZyBodGFiX21hcF91cGRhdGVfZWxlbV9pbl9wbGFjZShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXksXG4gXHRpZiAocmV0KVxuIFx0XHRyZXR1cm4gcmV0O1xuIFxuLVx0bF9vbGQgPSBsb29rdXBfZWxlbV9yYXcoaGVhZCwgaGFzaCwga2V5LCBrZXlfc2l6ZSk7XG4rXHRsX29sZCA9IGxvb2t1cF9lbGVtX3JhdyhodGFiLCBoZWFkLCBoYXNoLCBrZXksIGtleV9zaXplKTtcbiBcbiBcdHJldCA9IGNoZWNrX2ZsYWdzKGh0YWIsIGxfb2xkLCBtYXBfZmxhZ3MpO1xuIFx0aWYgKHJldClcbkBAIC0xMzkyLDEwICsxNTA0LDEwIEBAIHN0YXRpYyBsb25nIGh0YWJfbWFwX3VwZGF0ZV9lbGVtX2luX3BsYWNlKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSxcbiBcdGlmIChsX29sZCkge1xuIFx0XHQvKiBVcGRhdGUgdmFsdWUgaW4tcGxhY2UgKi9cbiBcdFx0aWYgKHBlcmNwdSkge1xuLVx0XHRcdHBjcHVfY29weV92YWx1ZShodGFiLCBodGFiX2VsZW1fZ2V0X3B0cihsX29sZCwga2V5X3NpemUpLFxuK1x0XHRcdHBjcHVfY29weV92YWx1ZShodGFiLCBodGFiX2VsZW1fZ2V0X3B0cihodGFiLCBsX29sZCksXG4gXHRcdFx0XHRcdHZhbHVlLCBvbmFsbGNwdXMsIG1hcF9mbGFncyk7XG4gXHRcdH0gZWxzZSB7XG4tXHRcdFx0dm9pZCAqKmlubmVyX21hcF9wcHRyID0gaHRhYl9lbGVtX3ZhbHVlKGxfb2xkLCBrZXlfc2l6ZSk7XG4rXHRcdFx0dm9pZCAqKmlubmVyX21hcF9wcHRyID0gaHRhYl9lbGVtX3ZhbHVlKGh0YWIsIGxfb2xkKTtcbiBcbiBcdFx0XHRvbGRfbWFwX3B0ciA9ICppbm5lcl9tYXBfcHB0cjtcbiBcdFx0XHRXUklURV9PTkNFKCppbm5lcl9tYXBfcHB0ciwgKih2b2lkICoqKXZhbHVlKTtcbkBAIC0xNDU2LDIwICsxNTY4LDIwIEBAIHN0YXRpYyBsb25nIF9faHRhYl9scnVfcGVyY3B1X21hcF91cGRhdGVfZWxlbShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXksXG4gXHRpZiAocmV0KVxuIFx0XHRnb3RvIGVycl9sb2NrX2J1Y2tldDtcbiBcbi1cdGxfb2xkID0gbG9va3VwX2VsZW1fcmF3KGhlYWQsIGhhc2gsIGtleSwga2V5X3NpemUpO1xuK1x0bF9vbGQgPSBsb29rdXBfZWxlbV9yYXcoaHRhYiwgaGVhZCwgaGFzaCwga2V5LCBrZXlfc2l6ZSk7XG4gXG4gXHRyZXQgPSBjaGVja19mbGFncyhodGFiLCBsX29sZCwgbWFwX2ZsYWdzKTtcbiBcdGlmIChyZXQpXG4gXHRcdGdvdG8gZXJyO1xuIFxuIFx0aWYgKGxfb2xkKSB7XG4tXHRcdGJwZl9scnVfbm9kZV9zZXRfcmVmKFx1MDAyNmxfb2xkLVx1MDAzZWxydV9ub2RlKTtcbitcdFx0YnBmX2xydV9ub2RlX3NldF9yZWYoaHRhYl9lbGVtX2xydV9ub2RlKGxfb2xkKSk7XG4gXG4gXHRcdC8qIHBlci1jcHUgaGFzaCBtYXAgY2FuIHVwZGF0ZSB2YWx1ZSBpbi1wbGFjZSAqL1xuLVx0XHRwY3B1X2NvcHlfdmFsdWUoaHRhYiwgaHRhYl9lbGVtX2dldF9wdHIobF9vbGQsIGtleV9zaXplKSxcbitcdFx0cGNwdV9jb3B5X3ZhbHVlKGh0YWIsIGh0YWJfZWxlbV9nZXRfcHRyKGh0YWIsIGxfb2xkKSxcbiBcdFx0XHRcdHZhbHVlLCBvbmFsbGNwdXMsIG1hcF9mbGFncyk7XG4gXHR9IGVsc2Uge1xuLVx0XHRwY3B1X2luaXRfdmFsdWUoaHRhYiwgaHRhYl9lbGVtX2dldF9wdHIobF9uZXcsIGtleV9zaXplKSxcbitcdFx0cGNwdV9pbml0X3ZhbHVlKGh0YWIsIGh0YWJfZWxlbV9nZXRfcHRyKGh0YWIsIGxfbmV3KSxcbiBcdFx0XHRcdHZhbHVlLCBvbmFsbGNwdXMsIG1hcF9mbGFncyk7XG4gXHRcdGhsaXN0X251bGxzX2FkZF9oZWFkX3JjdShcdTAwMjZsX25ldy1cdTAwM2VoYXNoX25vZGUsIGhlYWQpO1xuIFx0XHRsX25ldyA9IE5VTEw7XG5AQCAtMTQ4MCw3ICsxNTkyLDcgQEAgc3RhdGljIGxvbmcgX19odGFiX2xydV9wZXJjcHVfbWFwX3VwZGF0ZV9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSxcbiBlcnJfbG9ja19idWNrZXQ6XG4gXHRpZiAobF9uZXcpIHtcbiBcdFx0YnBmX21hcF9kZWNfZWxlbV9jb3VudChcdTAwMjZodGFiLVx1MDAzZW1hcCk7XG4tXHRcdGJwZl9scnVfcHVzaF9mcmVlKFx1MDAyNmh0YWItXHUwMDNlbHJ1LCBcdTAwMjZsX25ldy1cdTAwM2VscnVfbm9kZSk7XG4rXHRcdGJwZl9scnVfcHVzaF9mcmVlKFx1MDAyNmh0YWItXHUwMDNlbHJ1LCBodGFiX2VsZW1fbHJ1X25vZGUobF9uZXcpKTtcbiBcdH1cbiBcdHJldHVybiByZXQ7XG4gfVxuQEAgLTE1MjEsNyArMTYzMyw3IEBAIHN0YXRpYyBsb25nIGh0YWJfbWFwX2RlbGV0ZV9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSlcbiBcdGlmIChyZXQpXG4gXHRcdHJldHVybiByZXQ7XG4gXG4tXHRsID0gbG9va3VwX2VsZW1fcmF3KGhlYWQsIGhhc2gsIGtleSwga2V5X3NpemUpO1xuK1x0bCA9IGxvb2t1cF9lbGVtX3JhdyhodGFiLCBoZWFkLCBoYXNoLCBrZXksIGtleV9zaXplKTtcbiBcdGlmIChsKVxuIFx0XHRobGlzdF9udWxsc19kZWxfcmN1KFx1MDAyNmwtXHUwMDNlaGFzaF9ub2RlKTtcbiBcdGVsc2VcbkBAIC0xNTU2LDcgKzE2NjgsNyBAQCBzdGF0aWMgbG9uZyBodGFiX2xydV9tYXBfZGVsZXRlX2VsZW0oc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5KVxuIFx0aWYgKHJldClcbiBcdFx0cmV0dXJuIHJldDtcbiBcbi1cdGwgPSBsb29rdXBfZWxlbV9yYXcoaGVhZCwgaGFzaCwga2V5LCBrZXlfc2l6ZSk7XG4rXHRsID0gbG9va3VwX2VsZW1fcmF3KGh0YWIsIGhlYWQsIGhhc2gsIGtleSwga2V5X3NpemUpO1xuIFxuIFx0aWYgKGwpXG4gXHRcdGhsaXN0X251bGxzX2RlbF9yY3UoXHUwMDI2bC1cdTAwM2VoYXNoX25vZGUpO1xuQEAgLTE2MDIsNyArMTcxNCw3IEBAIHN0YXRpYyB2b2lkIGh0YWJfZnJlZV9tYWxsb2NlZF9pbnRlcm5hbF9zdHJ1Y3RzKHN0cnVjdCBicGZfaHRhYiAqaHRhYilcbiBcdFx0aGxpc3RfbnVsbHNfZm9yX2VhY2hfZW50cnkobCwgbiwgaGVhZCwgaGFzaF9ub2RlKSB7XG4gXHRcdFx0LyogV2Ugb25seSBmcmVlIGludGVybmFsIHN0cnVjdHMgb24gdXJlZiBkcm9wcGluZyB0byB6ZXJvICovXG4gXHRcdFx0YnBmX21hcF9mcmVlX2ludGVybmFsX3N0cnVjdHMoXHUwMDI2aHRhYi1cdTAwM2VtYXAsXG4tXHRcdFx0XHRcdFx0ICAgICAgaHRhYl9lbGVtX3ZhbHVlKGwsIGh0YWItXHUwMDNlbWFwLmtleV9zaXplKSk7XG4rXHRcdFx0XHRcdFx0ICAgICAgaHRhYl9lbGVtX3ZhbHVlKGh0YWIsIGwpKTtcbiBcdFx0fVxuIFx0XHRjb25kX3Jlc2NoZWRfcmN1KCk7XG4gXHR9XG5AQCAtMTY5Nyw3ICsxODA5LDcgQEAgc3RhdGljIGludCBfX2h0YWJfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2VsZW0oc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5LFxuIFx0aWYgKHJldClcbiBcdFx0cmV0dXJuIHJldDtcbiBcbi1cdGwgPSBsb29rdXBfZWxlbV9yYXcoaGVhZCwgaGFzaCwga2V5LCBrZXlfc2l6ZSk7XG4rXHRsID0gbG9va3VwX2VsZW1fcmF3KGh0YWIsIGhlYWQsIGhhc2gsIGtleSwga2V5X3NpemUpO1xuIFx0aWYgKCFsKSB7XG4gXHRcdHJldCA9IC1FTk9FTlQ7XG4gXHRcdGdvdG8gb3V0X3VubG9jaztcbkBAIC0xNzA4LDE0ICsxODIwLDE0IEBAIHN0YXRpYyBpbnQgX19odGFiX21hcF9sb29rdXBfYW5kX2RlbGV0ZV9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSxcbiBcdFx0dm9pZCBfX3BlcmNwdSAqcHB0cjtcbiBcdFx0aW50IG9mZiA9IDAsIGNwdTtcbiBcbi1cdFx0cHB0ciA9IGh0YWJfZWxlbV9nZXRfcHRyKGwsIGtleV9zaXplKTtcbitcdFx0cHB0ciA9IGh0YWJfZWxlbV9nZXRfcHRyKGh0YWIsIGwpO1xuIFx0XHRmb3JfZWFjaF9wb3NzaWJsZV9jcHUoY3B1KSB7XG4gXHRcdFx0Y29weV9tYXBfdmFsdWVfbG9uZyhcdTAwMjZodGFiLVx1MDAzZW1hcCwgdmFsdWUgKyBvZmYsIHBlcl9jcHVfcHRyKHBwdHIsIGNwdSkpO1xuIFx0XHRcdGNoZWNrX2FuZF9pbml0X21hcF92YWx1ZShcdTAwMjZodGFiLVx1MDAzZW1hcCwgdmFsdWUgKyBvZmYpO1xuIFx0XHRcdG9mZiArPSByb3VuZHVwX3ZhbHVlX3NpemU7XG4gXHRcdH1cbiBcdH0gZWxzZSB7XG4tXHRcdHZvaWQgKnNyYyA9IGh0YWJfZWxlbV92YWx1ZShsLCBtYXAtXHUwMDNla2V5X3NpemUpO1xuK1x0XHR2b2lkICpzcmMgPSBodGFiX2VsZW1fdmFsdWUoaHRhYiwgbCk7XG4gXG4gXHRcdGlmIChmbGFncyBcdTAwMjYgQlBGX0ZfTE9DSylcbiBcdFx0XHRjb3B5X21hcF92YWx1ZV9sb2NrZWQobWFwLCB2YWx1ZSwgc3JjLCB0cnVlKTtcbkBAIC0xODk4LDEzICsyMDEwLDEzIEBAIF9faHRhYl9tYXBfbG9va3VwX2FuZF9kZWxldGVfYmF0Y2goc3RydWN0IGJwZl9tYXAgKm1hcCxcbiBcdFx0Z290byBuZXh0X2JhdGNoO1xuIFxuIFx0aGxpc3RfbnVsbHNfZm9yX2VhY2hfZW50cnlfc2FmZShsLCBuLCBoZWFkLCBoYXNoX25vZGUpIHtcbi1cdFx0bWVtY3B5KGRzdF9rZXksIGwtXHUwMDNla2V5LCBrZXlfc2l6ZSk7XG4rXHRcdG1lbWNweShkc3Rfa2V5LCBodGFiX2VsZW1fa2V5KGh0YWIsIGwpLCBrZXlfc2l6ZSk7XG4gXG4gXHRcdGlmIChpc19wZXJjcHUpIHtcbiBcdFx0XHRpbnQgb2ZmID0gMCwgY3B1O1xuIFx0XHRcdHZvaWQgX19wZXJjcHUgKnBwdHI7XG4gXG4tXHRcdFx0cHB0ciA9IGh0YWJfZWxlbV9nZXRfcHRyKGwsIG1hcC1cdTAwM2VrZXlfc2l6ZSk7XG4rXHRcdFx0cHB0ciA9IGh0YWJfZWxlbV9nZXRfcHRyKGh0YWIsIGwpO1xuIFx0XHRcdGlmIChlbGVtX21hcF9mbGFncyBcdTAwMjYgQlBGX0ZfQ1BVKSB7XG4gXHRcdFx0XHRjcHUgPSBlbGVtX21hcF9mbGFncyBcdTAwM2VcdTAwM2UgMzI7XG4gXHRcdFx0XHRjb3B5X21hcF92YWx1ZShcdTAwMjZodGFiLVx1MDAzZW1hcCwgZHN0X3ZhbCwgcGVyX2NwdV9wdHIocHB0ciwgY3B1KSk7XG5AQCAtMTkxOCw3ICsyMDMwLDcgQEAgX19odGFiX21hcF9sb29rdXBfYW5kX2RlbGV0ZV9iYXRjaChzdHJ1Y3QgYnBmX21hcCAqbWFwLFxuIFx0XHRcdFx0fVxuIFx0XHRcdH1cbiBcdFx0fSBlbHNlIHtcbi1cdFx0XHR2YWx1ZSA9IGh0YWJfZWxlbV92YWx1ZShsLCBrZXlfc2l6ZSk7XG4rXHRcdFx0dmFsdWUgPSBodGFiX2VsZW1fdmFsdWUoaHRhYiwgbCk7XG4gXHRcdFx0aWYgKGlzX2ZkX2h0YWIoaHRhYikpIHtcbiBcdFx0XHRcdHN0cnVjdCBicGZfbWFwICoqaW5uZXJfbWFwID0gdmFsdWU7XG4gXG5AQCAtMjE4MywxMiArMjI5NSwxMiBAQCBzdGF0aWMgaW50IF9fYnBmX2hhc2hfbWFwX3NlcV9zaG93KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCBzdHJ1Y3QgaHRhYl9lbGVtICplbGVtKVxuIFx0XHRjdHgubWV0YSA9IFx1MDAyNm1ldGE7XG4gXHRcdGN0eC5tYXAgPSBpbmZvLVx1MDAzZW1hcDtcbiBcdFx0aWYgKGVsZW0pIHtcbi1cdFx0XHRjdHgua2V5ID0gZWxlbS1cdTAwM2VrZXk7XG4rXHRcdFx0Y3R4LmtleSA9IGh0YWJfZWxlbV9rZXkoaW5mby1cdTAwM2VodGFiLCBlbGVtKTtcbiBcdFx0XHRpZiAoIWluZm8tXHUwMDNlcGVyY3B1X3ZhbHVlX2J1Zikge1xuLVx0XHRcdFx0Y3R4LnZhbHVlID0gaHRhYl9lbGVtX3ZhbHVlKGVsZW0sIG1hcC1cdTAwM2VrZXlfc2l6ZSk7XG4rXHRcdFx0XHRjdHgudmFsdWUgPSBodGFiX2VsZW1fdmFsdWUoaW5mby1cdTAwM2VodGFiLCBlbGVtKTtcbiBcdFx0XHR9IGVsc2Uge1xuIFx0XHRcdFx0cm91bmR1cF92YWx1ZV9zaXplID0gcm91bmRfdXAobWFwLVx1MDAzZXZhbHVlX3NpemUsIDgpO1xuLVx0XHRcdFx0cHB0ciA9IGh0YWJfZWxlbV9nZXRfcHRyKGVsZW0sIG1hcC1cdTAwM2VrZXlfc2l6ZSk7XG4rXHRcdFx0XHRwcHRyID0gaHRhYl9lbGVtX2dldF9wdHIoaW5mby1cdTAwM2VodGFiLCBlbGVtKTtcbiBcdFx0XHRcdGZvcl9lYWNoX3Bvc3NpYmxlX2NwdShjcHUpIHtcbiBcdFx0XHRcdFx0Y29weV9tYXBfdmFsdWVfbG9uZyhtYXAsIGluZm8tXHUwMDNlcGVyY3B1X3ZhbHVlX2J1ZiArIG9mZixcbiBcdFx0XHRcdFx0XHRcdCAgICBwZXJfY3B1X3B0cihwcHRyLCBjcHUpKTtcbkBAIC0yMjkzLDEzICsyNDA1LDEzIEBAIHN0YXRpYyBsb25nIGJwZl9mb3JfZWFjaF9oYXNoX2VsZW0oc3RydWN0IGJwZl9tYXAgKm1hcCwgYnBmX2NhbGxiYWNrX3QgY2FsbGJhY2tfXG4gXHRcdHJjdV9yZWFkX2xvY2soKTtcbiBcdFx0aGVhZCA9IFx1MDAyNmItXHUwMDNlaGVhZDtcbiBcdFx0aGxpc3RfbnVsbHNfZm9yX2VhY2hfZW50cnlfc2FmZShlbGVtLCBuLCBoZWFkLCBoYXNoX25vZGUpIHtcbi1cdFx0XHRrZXkgPSBlbGVtLVx1MDAzZWtleTtcbitcdFx0XHRrZXkgPSBodGFiX2VsZW1fa2V5KGh0YWIsIGVsZW0pO1xuIFx0XHRcdGlmIChpc19wZXJjcHUpIHtcbiBcdFx0XHRcdC8qIGN1cnJlbnQgY3B1IHZhbHVlIGZvciBwZXJjcHUgbWFwICovXG4tXHRcdFx0XHRwcHRyID0gaHRhYl9lbGVtX2dldF9wdHIoZWxlbSwgbWFwLVx1MDAzZWtleV9zaXplKTtcbitcdFx0XHRcdHBwdHIgPSBodGFiX2VsZW1fZ2V0X3B0cihodGFiLCBlbGVtKTtcbiBcdFx0XHRcdHZhbCA9IHRoaXNfY3B1X3B0cihwcHRyKTtcbiBcdFx0XHR9IGVsc2Uge1xuLVx0XHRcdFx0dmFsID0gaHRhYl9lbGVtX3ZhbHVlKGVsZW0sIG1hcC1cdTAwM2VrZXlfc2l6ZSk7XG4rXHRcdFx0XHR2YWwgPSBodGFiX2VsZW1fdmFsdWUoaHRhYiwgZWxlbSk7XG4gXHRcdFx0fVxuIFx0XHRcdG51bV9lbGVtcysrO1xuIFx0XHRcdHJldCA9IGNhbGxiYWNrX2ZuKCh1NjQpKGxvbmcpbWFwLCAodTY0KShsb25nKWtleSxcbkBAIC0yNDAzLDEwICsyNTE1LDExIEBAIGNvbnN0IHN0cnVjdCBicGZfbWFwX29wcyBodGFiX2xydV9tYXBfb3BzID0ge1xuIC8qIENhbGxlZCBmcm9tIGVCUEYgcHJvZ3JhbSAqL1xuIHN0YXRpYyB2b2lkICpodGFiX3BlcmNwdV9tYXBfbG9va3VwX2VsZW0oc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5KVxuIHtcbitcdHN0cnVjdCBicGZfaHRhYiAqaHRhYiA9IGNvbnRhaW5lcl9vZihtYXAsIHN0cnVjdCBicGZfaHRhYiwgbWFwKTtcbiBcdHN0cnVjdCBodGFiX2VsZW0gKmwgPSBfX2h0YWJfbWFwX2xvb2t1cF9lbGVtKG1hcCwga2V5KTtcbiBcbiBcdGlmIChsKVxuLVx0XHRyZXR1cm4gdGhpc19jcHVfcHRyKGh0YWJfZWxlbV9nZXRfcHRyKGwsIG1hcC1cdTAwM2VrZXlfc2l6ZSkpO1xuK1x0XHRyZXR1cm4gdGhpc19jcHVfcHRyKGh0YWJfZWxlbV9nZXRfcHRyKGh0YWIsIGwpKTtcbiBcdGVsc2VcbiBcdFx0cmV0dXJuIE5VTEw7XG4gfVxuQEAgLTI0MTQsNiArMjUyNyw3IEBAIHN0YXRpYyB2b2lkICpodGFiX3BlcmNwdV9tYXBfbG9va3VwX2VsZW0oc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5KVxuIC8qIGlubGluZSBicGZfbWFwX2xvb2t1cF9lbGVtKCkgY2FsbCBmb3IgcGVyLUNQVSBoYXNobWFwICovXG4gc3RhdGljIGludCBodGFiX3BlcmNwdV9tYXBfZ2VuX2xvb2t1cChzdHJ1Y3QgYnBmX21hcCAqbWFwLCBzdHJ1Y3QgYnBmX2luc24gKmluc25fYnVmKVxuIHtcbitcdHN0cnVjdCBicGZfaHRhYiAqaHRhYiA9IGNvbnRhaW5lcl9vZihtYXAsIHN0cnVjdCBicGZfaHRhYiwgbWFwKTtcbiBcdHN0cnVjdCBicGZfaW5zbiAqaW5zbiA9IGluc25fYnVmO1xuIFxuIFx0aWYgKCFicGZfaml0X3N1cHBvcnRzX3BlcmNwdV9pbnNuKCkpXG5AQCAtMjQyNCw3ICsyNTM4LDcgQEAgc3RhdGljIGludCBodGFiX3BlcmNwdV9tYXBfZ2VuX2xvb2t1cChzdHJ1Y3QgYnBmX21hcCAqbWFwLCBzdHJ1Y3QgYnBmX2luc24gKmluc25cbiBcdCppbnNuKysgPSBCUEZfRU1JVF9DQUxMKF9faHRhYl9tYXBfbG9va3VwX2VsZW0pO1xuIFx0Kmluc24rKyA9IEJQRl9KTVBfSU1NKEJQRl9KRVEsIEJQRl9SRUdfMCwgMCwgMyk7XG4gXHQqaW5zbisrID0gQlBGX0FMVTY0X0lNTShCUEZfQURELCBCUEZfUkVHXzAsXG4tXHRcdFx0XHRvZmZzZXRvZihzdHJ1Y3QgaHRhYl9lbGVtLCBrZXkpICsgcm91bmR1cChtYXAtXHUwMDNla2V5X3NpemUsIDgpKTtcbitcdFx0XHRcdGh0YWItXHUwMDNla2V5X29mZnNldCArIHJvdW5kdXAobWFwLVx1MDAzZWtleV9zaXplLCA4KSk7XG4gXHQqaW5zbisrID0gQlBGX0xEWF9NRU0oQlBGX0RXLCBCUEZfUkVHXzAsIEJQRl9SRUdfMCwgMCk7XG4gXHQqaW5zbisrID0gQlBGX01PVjY0X1BFUkNQVV9SRUcoQlBGX1JFR18wLCBCUEZfUkVHXzApO1xuIFxuQEAgLTI0MzMsNiArMjU0Nyw3IEBAIHN0YXRpYyBpbnQgaHRhYl9wZXJjcHVfbWFwX2dlbl9sb29rdXAoc3RydWN0IGJwZl9tYXAgKm1hcCwgc3RydWN0IGJwZl9pbnNuICppbnNuXG4gXG4gc3RhdGljIHZvaWQgKmh0YWJfcGVyY3B1X21hcF9sb29rdXBfcGVyY3B1X2VsZW0oc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5LCB1MzIgY3B1KVxuIHtcbitcdHN0cnVjdCBicGZfaHRhYiAqaHRhYiA9IGNvbnRhaW5lcl9vZihtYXAsIHN0cnVjdCBicGZfaHRhYiwgbWFwKTtcbiBcdHN0cnVjdCBodGFiX2VsZW0gKmw7XG4gXG4gXHRpZiAoY3B1IFx1MDAzZT0gbnJfY3B1X2lkcylcbkBAIC0yNDQwLDE4ICsyNTU1LDE5IEBAIHN0YXRpYyB2b2lkICpodGFiX3BlcmNwdV9tYXBfbG9va3VwX3BlcmNwdV9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSxcbiBcbiBcdGwgPSBfX2h0YWJfbWFwX2xvb2t1cF9lbGVtKG1hcCwga2V5KTtcbiBcdGlmIChsKVxuLVx0XHRyZXR1cm4gcGVyX2NwdV9wdHIoaHRhYl9lbGVtX2dldF9wdHIobCwgbWFwLVx1MDAzZWtleV9zaXplKSwgY3B1KTtcbitcdFx0cmV0dXJuIHBlcl9jcHVfcHRyKGh0YWJfZWxlbV9nZXRfcHRyKGh0YWIsIGwpLCBjcHUpO1xuIFx0ZWxzZVxuIFx0XHRyZXR1cm4gTlVMTDtcbiB9XG4gXG4gc3RhdGljIHZvaWQgKmh0YWJfbHJ1X3BlcmNwdV9tYXBfbG9va3VwX2VsZW0oc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5KVxuIHtcbitcdHN0cnVjdCBicGZfaHRhYiAqaHRhYiA9IGNvbnRhaW5lcl9vZihtYXAsIHN0cnVjdCBicGZfaHRhYiwgbWFwKTtcbiBcdHN0cnVjdCBodGFiX2VsZW0gKmwgPSBfX2h0YWJfbWFwX2xvb2t1cF9lbGVtKG1hcCwga2V5KTtcbiBcbiBcdGlmIChsKSB7XG4tXHRcdGJwZl9scnVfbm9kZV9zZXRfcmVmKFx1MDAyNmwtXHUwMDNlbHJ1X25vZGUpO1xuLVx0XHRyZXR1cm4gdGhpc19jcHVfcHRyKGh0YWJfZWxlbV9nZXRfcHRyKGwsIG1hcC1cdTAwM2VrZXlfc2l6ZSkpO1xuK1x0XHRicGZfbHJ1X25vZGVfc2V0X3JlZihodGFiX2VsZW1fbHJ1X25vZGUobCkpO1xuK1x0XHRyZXR1cm4gdGhpc19jcHVfcHRyKGh0YWJfZWxlbV9nZXRfcHRyKGh0YWIsIGwpKTtcbiBcdH1cbiBcbiBcdHJldHVybiBOVUxMO1xuQEAgLTI0NTksNiArMjU3NSw3IEBAIHN0YXRpYyB2b2lkICpodGFiX2xydV9wZXJjcHVfbWFwX2xvb2t1cF9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSlcbiBcbiBzdGF0aWMgdm9pZCAqaHRhYl9scnVfcGVyY3B1X21hcF9sb29rdXBfcGVyY3B1X2VsZW0oc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5LCB1MzIgY3B1KVxuIHtcbitcdHN0cnVjdCBicGZfaHRhYiAqaHRhYiA9IGNvbnRhaW5lcl9vZihtYXAsIHN0cnVjdCBicGZfaHRhYiwgbWFwKTtcbiBcdHN0cnVjdCBodGFiX2VsZW0gKmw7XG4gXG4gXHRpZiAoY3B1IFx1MDAzZT0gbnJfY3B1X2lkcylcbkBAIC0yNDY2LDggKzI1ODMsOCBAQCBzdGF0aWMgdm9pZCAqaHRhYl9scnVfcGVyY3B1X21hcF9sb29rdXBfcGVyY3B1X2VsZW0oc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa1xuIFxuIFx0bCA9IF9faHRhYl9tYXBfbG9va3VwX2VsZW0obWFwLCBrZXkpO1xuIFx0aWYgKGwpIHtcbi1cdFx0YnBmX2xydV9ub2RlX3NldF9yZWYoXHUwMDI2bC1cdTAwM2VscnVfbm9kZSk7XG4tXHRcdHJldHVybiBwZXJfY3B1X3B0cihodGFiX2VsZW1fZ2V0X3B0cihsLCBtYXAtXHUwMDNla2V5X3NpemUpLCBjcHUpO1xuK1x0XHRicGZfbHJ1X25vZGVfc2V0X3JlZihodGFiX2VsZW1fbHJ1X25vZGUobCkpO1xuK1x0XHRyZXR1cm4gcGVyX2NwdV9wdHIoaHRhYl9lbGVtX2dldF9wdHIoaHRhYiwgbCksIGNwdSk7XG4gXHR9XG4gXG4gXHRyZXR1cm4gTlVMTDtcbkBAIC0yNDc1LDYgKzI1OTIsNyBAQCBzdGF0aWMgdm9pZCAqaHRhYl9scnVfcGVyY3B1X21hcF9sb29rdXBfcGVyY3B1X2VsZW0oc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa1xuIFxuIGludCBicGZfcGVyY3B1X2hhc2hfY29weShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXksIHZvaWQgKnZhbHVlLCB1NjQgbWFwX2ZsYWdzKVxuIHtcbitcdHN0cnVjdCBicGZfaHRhYiAqaHRhYiA9IGNvbnRhaW5lcl9vZihtYXAsIHN0cnVjdCBicGZfaHRhYiwgbWFwKTtcbiBcdHN0cnVjdCBodGFiX2VsZW0gKmw7XG4gXHR2b2lkIF9fcGVyY3B1ICpwcHRyO1xuIFx0aW50IHJldCA9IC1FTk9FTlQ7XG5AQCAtMjQ5NCw3ICsyNjEyLDcgQEAgaW50IGJwZl9wZXJjcHVfaGFzaF9jb3B5KHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSwgdm9pZCAqdmFsdWUsIHU2NCBtYXBfZmxcbiBcdC8qIFdlIGRvIG5vdCBtYXJrIExSVSBtYXAgZWxlbWVudCBoZXJlIGluIG9yZGVyIHRvIG5vdCBtZXNzIHVwXG4gXHQgKiBldmljdGlvbiBoZXVyaXN0aWNzIHdoZW4gdXNlciBzcGFjZSBkb2VzIGEgbWFwIHdhbGsuXG4gXHQgKi9cbi1cdHBwdHIgPSBodGFiX2VsZW1fZ2V0X3B0cihsLCBtYXAtXHUwMDNla2V5X3NpemUpO1xuK1x0cHB0ciA9IGh0YWJfZWxlbV9nZXRfcHRyKGh0YWIsIGwpO1xuIFx0aWYgKG1hcF9mbGFncyBcdTAwMjYgQlBGX0ZfQ1BVKSB7XG4gXHRcdGNwdSA9IG1hcF9mbGFncyBcdTAwM2VcdTAwM2UgMzI7XG4gXHRcdGNvcHlfbWFwX3ZhbHVlKG1hcCwgdmFsdWUsIHBlcl9jcHVfcHRyKHBwdHIsIGNwdSkpO1xuQEAgLTI1MzIsNiArMjY1MCw3IEBAIGludCBicGZfcGVyY3B1X2hhc2hfdXBkYXRlKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSwgdm9pZCAqdmFsdWUsXG4gc3RhdGljIHZvaWQgaHRhYl9wZXJjcHVfbWFwX3NlcV9zaG93X2VsZW0oc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5LFxuIFx0XHRcdFx0XHQgIHN0cnVjdCBzZXFfZmlsZSAqbSlcbiB7XG4rXHRzdHJ1Y3QgYnBmX2h0YWIgKmh0YWIgPSBjb250YWluZXJfb2YobWFwLCBzdHJ1Y3QgYnBmX2h0YWIsIG1hcCk7XG4gXHRzdHJ1Y3QgaHRhYl9lbGVtICpsO1xuIFx0dm9pZCBfX3BlcmNwdSAqcHB0cjtcbiBcdGludCBjcHU7XG5AQCAtMjU0Niw3ICsyNjY1LDcgQEAgc3RhdGljIHZvaWQgaHRhYl9wZXJjcHVfbWFwX3NlcV9zaG93X2VsZW0oc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5LFxuIFxuIFx0YnRmX3R5cGVfc2VxX3Nob3cobWFwLVx1MDAzZWJ0ZiwgbWFwLVx1MDAzZWJ0Zl9rZXlfdHlwZV9pZCwga2V5LCBtKTtcbiBcdHNlcV9wdXRzKG0sIFwiOiB7XFxuXCIpO1xuLVx0cHB0ciA9IGh0YWJfZWxlbV9nZXRfcHRyKGwsIG1hcC1cdTAwM2VrZXlfc2l6ZSk7XG4rXHRwcHRyID0gaHRhYl9lbGVtX2dldF9wdHIoaHRhYiwgbCk7XG4gXHRmb3JfZWFjaF9wb3NzaWJsZV9jcHUoY3B1KSB7XG4gXHRcdHNlcV9wcmludGYobSwgXCJcXHRjcHUlZDogXCIsIGNwdSk7XG4gXHRcdGJ0Zl90eXBlX3NlcV9zaG93KG1hcC1cdTAwM2VidGYsIG1hcC1cdTAwM2VidGZfdmFsdWVfdHlwZV9pZCxcbkBAIC0yNjIwLDcgKzI3MzksNyBAQCBzdGF0aWMgdm9pZCBmZF9odGFiX21hcF9mcmVlKHN0cnVjdCBicGZfbWFwICptYXApXG4gXHRcdGhlYWQgPSBzZWxlY3RfYnVja2V0KGh0YWIsIGkpO1xuIFxuIFx0XHRobGlzdF9udWxsc19mb3JfZWFjaF9lbnRyeV9zYWZlKGwsIG4sIGhlYWQsIGhhc2hfbm9kZSkge1xuLVx0XHRcdHZvaWQgKnB0ciA9IGZkX2h0YWJfbWFwX2dldF9wdHIobWFwLCBsKTtcbitcdFx0XHR2b2lkICpwdHIgPSBmZF9odGFiX21hcF9nZXRfcHRyKGh0YWIsIGwpO1xuIFxuIFx0XHRcdG1hcC1cdTAwM2VvcHMtXHUwMDNlbWFwX2ZkX3B1dF9wdHIobWFwLCBwdHIsIGZhbHNlKTtcbiBcdFx0fVxuQEAgLTI3MDUsNiArMjgyNCw3IEBAIHN0YXRpYyB2b2lkICpodGFiX29mX21hcF9sb29rdXBfZWxlbShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXkpXG4gc3RhdGljIGludCBodGFiX29mX21hcF9nZW5fbG9va3VwKHN0cnVjdCBicGZfbWFwICptYXAsXG4gXHRcdFx0XHQgIHN0cnVjdCBicGZfaW5zbiAqaW5zbl9idWYpXG4ge1xuK1x0c3RydWN0IGJwZl9odGFiICpodGFiID0gY29udGFpbmVyX29mKG1hcCwgc3RydWN0IGJwZl9odGFiLCBtYXApO1xuIFx0c3RydWN0IGJwZl9pbnNuICppbnNuID0gaW5zbl9idWY7XG4gXHRjb25zdCBpbnQgcmV0ID0gQlBGX1JFR18wO1xuIFxuQEAgLTI3MTMsNyArMjgzMyw3IEBAIHN0YXRpYyBpbnQgaHRhYl9vZl9tYXBfZ2VuX2xvb2t1cChzdHJ1Y3QgYnBmX21hcCAqbWFwLFxuIFx0Kmluc24rKyA9IEJQRl9FTUlUX0NBTEwoX19odGFiX21hcF9sb29rdXBfZWxlbSk7XG4gXHQqaW5zbisrID0gQlBGX0pNUF9JTU0oQlBGX0pFUSwgcmV0LCAwLCAyKTtcbiBcdCppbnNuKysgPSBCUEZfQUxVNjRfSU1NKEJQRl9BREQsIHJldCxcbi1cdFx0XHRcdG9mZnNldG9mKHN0cnVjdCBodGFiX2VsZW0sIGtleSkgK1xuK1x0XHRcdFx0aHRhYi1cdTAwM2VrZXlfb2Zmc2V0ICtcbiBcdFx0XHRcdHJvdW5kX3VwKG1hcC1cdTAwM2VrZXlfc2l6ZSwgOCkpO1xuIFx0Kmluc24rKyA9IEJQRl9MRFhfTUVNKEJQRl9EVywgcmV0LCByZXQsIDApO1xuIFxuQEAgLTMxMTIsNyArMzIzMiw3IEBAIHN0YXRpYyBpbnQgcmh0YWJfbWFwX2NoZWNrX2J0ZihzdHJ1Y3QgYnBmX21hcCAqbWFwLCBjb25zdCBzdHJ1Y3QgYnRmICpidGYsXG4ge1xuIFx0c3RydWN0IGJwZl9yaHRhYiAqcmh0YWIgPSBjb250YWluZXJfb2YobWFwLCBzdHJ1Y3QgYnBmX3JodGFiLCBtYXApO1xuIFxuLVx0cmV0dXJuIGJwZl9tYV9zZXRfZHRvcihtYXAsIFx1MDAyNnJodGFiLVx1MDAzZW1hLCByaHRhYl9tZW1fZHRvcik7XG4rXHRyZXR1cm4gYnBmX21hX3NldF9kdG9yKG1hcCwgXHUwMDI2cmh0YWItXHUwMDNlbWEsIHJodGFiX21lbV9kdG9yLCBvZmZzZXRvZihzdHJ1Y3Qgcmh0YWJfZWxlbSwgZGF0YSkpO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCByaHRhYl9tYXBfZnJlZV9pbnRlcm5hbF9zdHJ1Y3RzKHN0cnVjdCBicGZfbWFwICptYXApXG5AQCAtMzUzMywzICszNjUzLDE2IEBAIGNvbnN0IHN0cnVjdCBicGZfbWFwX29wcyByaHRhYl9tYXBfb3BzID0ge1xuIFx0Lm1hcF9idGZfaWQgPSBcdTAwMjZyaHRhYl9tYXBfYnRmX2lkc1swXSxcbiBcdC5pdGVyX3NlcV9pbmZvID0gXHUwMDI2cmhhc2hfaXRlcl9zZXFfaW5mbyxcbiB9O1xuK1xuK3NpemVfdCBicGZfaHRhYl9tYXBfbWV0YV9zaXplKHZvaWQpXG4re1xuK1x0cmV0dXJuIHNpemVvZihzdHJ1Y3QgYnBmX2h0YWIpO1xuK31cbitcbit2b2lkIGJwZl9odGFiX21hcF9tZXRhX2luaXQoc3RydWN0IGJwZl9tYXAgKmlubmVyX21hcF9tZXRhLCBzdHJ1Y3QgYnBmX21hcCAqaW5uZXJfbWFwKVxuK3tcbitcdHN0cnVjdCBicGZfaHRhYiAqaW5uZXJfaHRhYl9tZXRhID0gY29udGFpbmVyX29mKGlubmVyX21hcF9tZXRhLCBzdHJ1Y3QgYnBmX2h0YWIsIG1hcCk7XG4rXHRzdHJ1Y3QgYnBmX2h0YWIgKmlubmVyX2h0YWIgPSBjb250YWluZXJfb2YoaW5uZXJfbWFwLCBzdHJ1Y3QgYnBmX2h0YWIsIG1hcCk7XG4rXG4rXHRpbm5lcl9odGFiX21ldGEtXHUwMDNla2V5X29mZnNldCA9IGlubmVyX2h0YWItXHUwMDNla2V5X29mZnNldDtcbit9XG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9tYXBfaW5fbWFwLmMgYi9rZXJuZWwvYnBmL21hcF9pbl9tYXAuY1xuaW5kZXggZDJjYmFiNGJkZjY0NGEuLmIyZGI1ZDBjOThiZWUyIDEwMDY0NFxuLS0tIGEva2VybmVsL2JwZi9tYXBfaW5fbWFwLmNcbisrKyBiL2tlcm5lbC9icGYvbWFwX2luX21hcC5jXG5AQCAtNyw2ICs3LDE1IEBAXG4gXG4gI2luY2x1ZGUgXCJtYXBfaW5fbWFwLmhcIlxuIFxuK3N0YXRpYyBib29sIGJwZl9tYXBfdHlwZV9pc19odGFiKGVudW0gYnBmX21hcF90eXBlIHR5cGUpXG4re1xuK1x0cmV0dXJuIHR5cGUgPT0gQlBGX01BUF9UWVBFX0hBU0ggfHxcbitcdCAgICAgICB0eXBlID09IEJQRl9NQVBfVFlQRV9QRVJDUFVfSEFTSCB8fFxuK1x0ICAgICAgIHR5cGUgPT0gQlBGX01BUF9UWVBFX0xSVV9IQVNIIHx8XG4rXHQgICAgICAgdHlwZSA9PSBCUEZfTUFQX1RZUEVfTFJVX1BFUkNQVV9IQVNIIHx8XG4rXHQgICAgICAgdHlwZSA9PSBCUEZfTUFQX1RZUEVfSEFTSF9PRl9NQVBTO1xuK31cbitcbiBzdHJ1Y3QgYnBmX21hcCAqYnBmX21hcF9tZXRhX2FsbG9jKGludCBpbm5lcl9tYXBfdWZkKVxuIHtcbiBcdHN0cnVjdCBicGZfbWFwICppbm5lcl9tYXAsICppbm5lcl9tYXBfbWV0YTtcbkBAIC0yOSw2ICszOCw4IEBAIHN0cnVjdCBicGZfbWFwICpicGZfbWFwX21ldGFfYWxsb2MoaW50IGlubmVyX21hcF91ZmQpXG4gXHQvKiBJbiBzb21lIGNhc2VzIHZlcmlmaWVyIG5lZWRzIHRvIGFjY2VzcyBiZXlvbmQganVzdCBiYXNlIG1hcC4gKi9cbiBcdGlmIChpbm5lcl9tYXAtXHUwMDNlb3BzID09IFx1MDAyNmFycmF5X21hcF9vcHMgfHwgaW5uZXJfbWFwLVx1MDAzZW9wcyA9PSBcdTAwMjZwZXJjcHVfYXJyYXlfbWFwX29wcylcbiBcdFx0aW5uZXJfbWFwX21ldGFfc2l6ZSA9IHNpemVvZihzdHJ1Y3QgYnBmX2FycmF5KTtcbitcdGVsc2UgaWYgKGJwZl9tYXBfdHlwZV9pc19odGFiKGlubmVyX21hcC1cdTAwM2VtYXBfdHlwZSkpXG4rXHRcdGlubmVyX21hcF9tZXRhX3NpemUgPSBicGZfaHRhYl9tYXBfbWV0YV9zaXplKCk7XG4gXG4gXHRpbm5lcl9tYXBfbWV0YSA9IGt6YWxsb2MoaW5uZXJfbWFwX21ldGFfc2l6ZSwgR0ZQX1VTRVIpO1xuIFx0aWYgKCFpbm5lcl9tYXBfbWV0YSlcbkBAIC03MCw2ICs4MSw4IEBAIHN0cnVjdCBicGZfbWFwICpicGZfbWFwX21ldGFfYWxsb2MoaW50IGlubmVyX21hcF91ZmQpXG4gXHRcdGlubmVyX2FycmF5X21ldGEtXHUwMDNlaW5kZXhfbWFzayA9IGlubmVyX2FycmF5LVx1MDAzZWluZGV4X21hc2s7XG4gXHRcdGlubmVyX2FycmF5X21ldGEtXHUwMDNlZWxlbV9zaXplID0gaW5uZXJfYXJyYXktXHUwMDNlZWxlbV9zaXplO1xuIFx0XHRpbm5lcl9tYXBfbWV0YS1cdTAwM2VieXBhc3Nfc3BlY192MSA9IGlubmVyX21hcC1cdTAwM2VieXBhc3Nfc3BlY192MTtcbitcdH0gZWxzZSBpZiAoYnBmX21hcF90eXBlX2lzX2h0YWIoaW5uZXJfbWFwLVx1MDAzZW1hcF90eXBlKSkge1xuK1x0XHRicGZfaHRhYl9tYXBfbWV0YV9pbml0KGlubmVyX21hcF9tZXRhLCBpbm5lcl9tYXApO1xuIFx0fVxuIFx0cmV0dXJuIGlubmVyX21hcF9tZXRhO1xuIH1cbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL21hcF9pbl9tYXAuaCBiL2tlcm5lbC9icGYvbWFwX2luX21hcC5oXG5pbmRleCA3ZDYxNjAyMzU0ZGU4MC4uMWVkYzIwNTc3MmQ4Y2QgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvYnBmL21hcF9pbl9tYXAuaFxuKysrIGIva2VybmVsL2JwZi9tYXBfaW5fbWFwLmhcbkBAIC0xNSw1ICsxNSw3IEBAIHZvaWQgKmJwZl9tYXBfZmRfZ2V0X3B0cihzdHJ1Y3QgYnBmX21hcCAqbWFwLCBzdHJ1Y3QgZmlsZSAqbWFwX2ZpbGUsXG4gXHRcdFx0IGludCB1ZmQpO1xuIHZvaWQgYnBmX21hcF9mZF9wdXRfcHRyKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKnB0ciwgYm9vbCBuZWVkX2RlZmVyKTtcbiB1MzIgYnBmX21hcF9mZF9zeXNfbG9va3VwX2VsZW0odm9pZCAqcHRyKTtcbitzaXplX3QgYnBmX2h0YWJfbWFwX21ldGFfc2l6ZSh2b2lkKTtcbit2b2lkIGJwZl9odGFiX21hcF9tZXRhX2luaXQoc3RydWN0IGJwZl9tYXAgKmlubmVyX21hcF9tZXRhLCBzdHJ1Y3QgYnBmX21hcCAqaW5uZXJfbWFwKTtcbiBcbiAjZW5kaWZcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvbWFwX3B0cl9rZXJuLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvbWFwX3B0cl9rZXJuLmNcbmluZGV4IDM3M2M4ZDE3ZWE1NTdkLi42YmQ0Y2I2OGMyMGMxYyAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9tYXBfcHRyX2tlcm4uY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL21hcF9wdHJfa2Vybi5jXG5AQCAtMTE0LDcgKzExNCw3IEBAIHN0YXRpYyBpbmxpbmUgaW50IGNoZWNrX2hhc2godm9pZClcbiBcdFZFUklGWShjaGVja19kZWZhdWx0X25vaW5saW5lKFx1MDAyNmhhc2gtXHUwMDNlbWFwLCBtYXApKTtcbiBcbiBcdFZFUklGWShoYXNoLVx1MDAzZW5fYnVja2V0cyA9PSBNQVhfRU5UUklFUyk7XG4tXHRWRVJJRlkoaGFzaC1cdTAwM2VlbGVtX3NpemUgPT0gNjQpO1xuK1x0VkVSSUZZKGhhc2gtXHUwMDNlZWxlbV9zaXplID09IDMyKTtcbiBcbiBcdFZFUklGWShoYXNoLVx1MDAzZWNvdW50LmNvdW50ZXIgPT0gMCk7XG4gXHRWRVJJRlkoYnBmX21hcF9zdW1fZWxlbV9jb3VudChtYXApID09IDApO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjNUMjI6Mzg6NDMuMzAzMTA0NjI0WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODcyODA4ODQ1MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEJQRiBIYXNoIFRhYmxlIE9wdGltaXphdGlvbiBQYXRjaCoqXG5cbk9rYXksIHNvIEkndmUgZ290IHRoaXMgcGF0Y2gg4oCTIHNlZW1zIGxpa2UgYSBwcmV0dHkgc2lnbmlmaWNhbnQgb25lIOKAkyB0b3VjaGluZyBga2VybmVsL2JwZi9oYXNodGFiLmNgIGFuZCBga2VybmVsL2JwZi9tYXBfaW5fbWFwLmNgLiBGcm9tIHRoZSBkZXNjcmlwdGlvbiwgaXQgbG9va3MgbGlrZSB0aGV5J3JlIG9wdGltaXppbmcgdGhlIG1lbW9yeSBsYXlvdXQgb2YgQlBGIGhhc2ggdGFibGVzLCBzcGxpdHRpbmcgYHN0cnVjdCBodGFiX2VsZW1gIGludG8gbXVsdGlwbGUgc3BlY2lhbGl6ZWQgc3RydWN0dXJlcyAoYGh0YWJfZWxlbWAsIGBodGFiX2VsZW1fbHJ1YCwgYGh0YWJfZWxlbV9wY3B1YCkgYW5kIGFsc28gYWRkaW5nIGBrZXlfb2Zmc2V0YCB0byBgc3RydWN0IGJwZl9odGFiYC4gVGhpcyBpcyBhICpmdW5jdGlvbmFsKiBjaGFuZ2UgdG8gdGhlIGNvcmUgaGFzaCBtYXAgaW1wbGVtZW50YXRpb24sIGFuZCB0aGF0IGltbWVkaWF0ZWx5IHRlbGxzIG1lIHdlIG5lZWQgdG8gdHJlYXQgdGhpcyBhcyBoaWdoLXByaW9yaXR5IGZvciBmdXp6aW5nLiBJdCdzIGEgcHJpbWUgdGFyZ2V0IGZvciB1bmNvdmVyaW5nIHN1YnRsZSBtZW1vcnkgY29ycnVwdGlvbiBvciBjb25jdXJyZW5jeSBpc3N1ZXMuXG5cbk15IGltbWVkaWF0ZSBuZXh0IHN0ZXAgaXMgdG8gZHJpbGwgZG93biBpbnRvIHRoZSBkZXRhaWxzIG9mIHRoZSBjb2RlLiBMZXQncyBzZWUgd2hhdCdzIGJlZW4gYWRkZWQsIG1vZGlmaWVkLCBvciBjaGFuZ2VkLiBJJ20gZ29pbmcgdG8gbG9vayBjbG9zZWx5IGF0IHRoZXNlIG5ldyBvciBjaGFuZ2VkIGZ1bmN0aW9uczogYGh0YWJfZWxlbV9scnVfbm9kZWAsIGBodGFiX2VsZW1fZ2V0X3B0cl90b19wcHRyYCwgYGh0YWJfZWxlbV9zZXRfcHRyX3RvX3BwdHJgLCBgaHRhYl9lbGVtX2tleWAsIGBodGFiX2VsZW1fdmFsdWVgLCBgaHRhYl9lbGVtX3NldF9wdHJgLCBgaHRhYl9lbGVtX2dldF9wdHJgLCBgZmRfaHRhYl9tYXBfZ2V0X3B0cmAsIGBodGFiX2hhc19oYXNoYCwgYGh0YWJfZWxlbV9oYXNoYCwgYGh0YWJfZWxlbV9zZXRfaGFzaGAsIGBodGFiX21hcF9hbGxvY19jaGVja2AsIGBodGFiX21hcF9hbGxvY2AsIGBodGFiX21hcF9nZW5fbG9va3VwYCwgYGh0YWJfbHJ1X21hcF9nZW5fbG9va3VwYCwgYGh0YWJfbWFwX3VwZGF0ZV9lbGVtYCwgYGh0YWJfbHJ1X21hcF91cGRhdGVfZWxlbWAsIGBfX2h0YWJfbHJ1X3BlcmNwdV9tYXBfdXBkYXRlX2VsZW1gLCBgaHRhYl9tYXBfZGVsZXRlX2VsZW1gLCBgaHRhYl9scnVfbWFwX2RlbGV0ZV9lbGVtYCwgYF9faHRhYl9tYXBfbG9va3VwX2FuZF9kZWxldGVfZWxlbWAsIGBfX2h0YWJfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2JhdGNoYCwgYGJwZl9wZXJjcHVfaGFzaF9jb3B5YCwgYGh0YWJfb2ZfbWFwX2dlbl9sb29rdXBgLCBgYnBmX2h0YWJfbWFwX21ldGFfc2l6ZWAsIGBicGZfaHRhYl9tYXBfbWV0YV9pbml0YCwgYW5kIGBicGZfbWFwX21ldGFfYWxsb2NgLiBBbnkgb25lIG9mIHRoZXNlLCBpZiBtaXNoYW5kbGVkLCBjb3VsZCBoYXZlIHNpZ25pZmljYW50IHNlY3VyaXR5IGltcGxpY2F0aW9ucy5cblxuTm93LCBsZXQncyBuYWlsIGRvd24gdGhlIGNvbmZpZ3VyYXRpb24gZGVwZW5kZW5jaWVzLiBgQ09ORklHX0JQRl9TWVNDQUxMYCB3aWxsIGJlIHRoZSBwcmltYXJ5IGVuYWJsZXIgZm9yIEJQRiwgb2YgY291cnNlLiBHaXZlbiB0aGUgZm9jdXMgb24gaGFzaCBtYXBzLCBJJ20gZ29pbmcgdG8gcXVpY2tseSBjaGVjayBpZiB0aGVyZSBhcmUgYW55IHNwZWNpZmljIGNvbmZpZ3VyYXRpb24gZmxhZ3MgZm9yIEJQRiBoYXNoIG1hcHMgdGhlbXNlbHZlcy4gTm8gZGVkaWNhdGVkIGNvbmZpZyBvcHRpb25zLCB3aGljaCBtYWtlcyBzZW5zZSAtIHRoZSBoYXNoIHRhYmxlIGltcGxlbWVudGF0aW9uIGlzIGNvcmUgQlBGLlxuXG5JIG5lZWQgdG8gY29uZmlybSB0aGVzZSBmdW5jdGlvbnMnIGludGVyYWN0aW9ucyB3aXRoIHRoZSBleGlzdGluZyBCUEYgaGFzaCBtYXAgaW5mcmFzdHJ1Y3R1cmUuIFRpbWUgdG8gc2VhcmNoIHRoZSBzb3VyY2UgZm9yIGBCUEZfTUFQX1RZUEVfSEFTSGAgYW5kIGBCUEZfTUFQX1RZUEVfTFJVX0hBU0hgIHdpdGhpbiBga2VybmVsL2JwZi9oYXNodGFiLmNgIHRvIHNlZSBob3cgdGhvc2UgbWFwIHR5cGVzIGFyZSBpbnRlZ3JhdGVkIHdpdGggdGhlIG5ldyBjb2RlLiBUaGlzIHdpbGwgaGVscCB1bmRlcnN0YW5kIHRoZSBicmVhZHRoIG9mIGltcGFjdCBvZiB0aGlzIGNoYW5nZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTg1NzIsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1ODMsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yM1QyMjozODo1Mi4wMzExOTU2MjdaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mjc0NjA2NzMxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkJQRl9NQVBfVFlQRV9IQVNIXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9icGYvaGFzaHRhYi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvaGFzaHRhYi5jPTIyNT1zdGF0aWMgaW5saW5lIGJvb2wgaXNfZmRfaHRhYihjb25zdCBzdHJ1Y3QgYnBmX2h0YWIgKmh0YWIpXFxua2VybmVsL2JwZi9oYXNodGFiLmMtMjI2LXtcXG5rZXJuZWwvYnBmL2hhc2h0YWIuYzoyMjc6XFx0cmV0dXJuIGh0YWItXFx1MDAzZW1hcC5tYXBfdHlwZSA9PSBCUEZfTUFQX1RZUEVfSEFTSF9PRl9NQVBTO1xcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTIyOC19XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIzVDIyOjM4OjUyLjMwNTgwNzg0OFoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQwMjE5MTI4MDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqSW52ZXN0aWdhdGluZyBQb3RlbnRpYWwgQlBGIENvbmZpZ3VyYXRpb24gTnVhbmNlcyoqXG5cbk9rYXksIGJlZm9yZSBJIGRpdmUgdG9vIGRlZXAgaW50byB0aGUgaW1wbGljYXRpb25zIGhlcmUsIEkgbmVlZCB0byB0YWtlIGEgcXVpY2sgcGVlayBhdCB0aGUgQlBGIGludGVybmFscy4gU3BlY2lmaWNhbGx5LCBJIHNob3VsZCBjaGVjayBga2VybmVsL2JwZi9oYXNodGFiLmNgIGFuZCBga2VybmVsL2JwZi9tYXBfaW5fbWFwLmNgLiBUaG9zZSBmaWxlcyBhcmUgbGlrZWx5IHRvIGNvbnRhaW4gdGhlIGNydWNpYWwgbG93LWxldmVsIGRldGFpbHMgcmVnYXJkaW5nIHBvdGVudGlhbCBjb25maWd1cmF0aW9ucyBvciBsaW1pdGF0aW9ucyB0aGF0IEkgbmVlZCB0byBiZSBhd2FyZSBvZi4gSSdtIGxvb2tpbmcgZm9yIGFueSBzcGVjaWZpYyBjb25maWd1cmF0aW9ucyB0aGF0IG1pZ2h0IGltcGFjdCB0aGUgYmVoYXZpb3Igb3IgcGVyZm9ybWFuY2UgSSdtIGNvbnNpZGVyaW5nLiBHb3R0YSBtYWtlIHN1cmUgSSdtIG5vdCBvdmVybG9va2luZyBzb21lIHN1YnRsZSBkZXRhaWwgYnVyaWVkIHdpdGhpbiB0aG9zZSBpbXBsZW1lbnRhdGlvbnMuIFRoYXQgbGV2ZWwgb2YgZGV0YWlsIGlzIGNyaXRpY2FsIGZvciBmdWxseSB1bmRlcnN0YW5kaW5nIHRoZSBsYW5kc2NhcGUgaGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjAwMjEsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yM1QyMjozODo1Ni4zMjc3MjQ1MzhaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjY1MzYwMzcxLCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJDT05GSUdfXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9icGYvaGFzaHRhYi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yM1QyMjozODo1Ni41OTMxMjI3MDlaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyOTE5OTY2NTY3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgY29uc2lkZXJpbmcgdGhpcyBteXNlbGY6XG5cbioqSW52ZXN0aWdhdGluZyBDb25maWd1cmF0aW9uIERlcGVuZGVuY2llcyoqXG5cbk9rYXksIGl0IHNlZW1zIHRoZXJlIGFyZSBubyBzcGVjaWZpYyBjb25maWd1cmF0aW9uIGRldGFpbHMgZXhwbGljaXRseSBkZWZpbmVkIHdpdGhpbiBgaGFzaHRhYi5jYC4gVGhhdCdzIG5vdCBlbnRpcmVseSB1bmV4cGVjdGVkLCBkZXBlbmRpbmcgb24gdGhlIHN5c3RlbSBkZXNpZ24sIGJ1dCBzdGlsbCBnb29kIHRvIGNvbmZpcm0uIE5vdywgaWYgdGhlIGNvbmZpZ3VyYXRpb24gaXNuJ3QgaW4gdGhlIG9idmlvdXMgcGxhY2UsIHdoZXJlIGVsc2UgY291bGQgaXQgYmU/IFRoZSBzdHJ1Y3R1cmUgb2Z0ZW4gZGljdGF0ZXMgdGhlIG9yZ2FuaXphdGlvbiBvZiBjb2RlLiBNeSBpbnN0aW5jdHMgYXJlIHRlbGxpbmcgbWUgdG8gbG9vayBhdCBgbWFwX2luX21hcC5jYC4gSXQncyBwb3NzaWJsZSB0aGF0IHRoZSBjb25maWd1cmF0aW9uIHBhcmFtZXRlcnMgYXJlIHNvbWVob3cgbWFuYWdlZCB3aXRoaW4gdGhlIG5lc3RlZCBtYXAgc3RydWN0dXJlIGl0c2VsZiwgb3IgYXQgbGVhc3QgcmVmZXJlbmNlZCBmcm9tIHRoZXJlLiBMZXQncyBzZWUgd2hhdCB3ZSBjYW4gZGlnIHVwIHRoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDI2NywiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIzVDIyOjM4OjU5LjUxMzA5MTc1NloiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDA2NDM1ODAsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkNPTkZJR19cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2JwZi9tYXBfaW5fbWFwLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIzVDIyOjM4OjU5LjY1Mzc0MjQzNloiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE0Mzc3Nzk0NzM5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBCUEYgSGFzaCBNYXAgT3BlcmF0aW9ucyBmb3IgRnV6emluZyoqXG5cbk9rYXksIGZpcnN0IHRoaW5ncyBmaXJzdCwgdGhpcyBpcyBkZWZpbml0ZWx5IHJlbGF0ZWQgdG8gYENPTkZJR19CUEZfU1lTQ0FMTGAsIHRoYXQncyB0aGUga2V5IGVuYWJsaW5nIGNvbmZpZ3VyYXRpb24uIExldCdzIGRpZyBpbiBhbmQgZmlndXJlIG91dCB0aGUgbW9zdCBpbXBvcnRhbnQgZnVuY3Rpb25zIHRvIHRhcmdldCBmb3IgZnV6emluZy4gVGhpcyBwYXRjaCBpcyBjbGVhcmx5IHRvdWNoaW5nIEJQRiBoYXNoIG1hcCBvcGVyYXRpb25zLlxuXG5NeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZ3JhYiBhbGwgdGhlIHJlbGV2YW50IGZ1bmN0aW9ucywgYW5kIHRoZW4gcmVmaW5lLiBJJ2xsIG5lZWQgdG8gZm9jdXMgb246IGBodGFiX21hcF9hbGxvY2AsIGBodGFiX21hcF91cGRhdGVfZWxlbWAsIGBodGFiX2xydV9tYXBfdXBkYXRlX2VsZW1gLCBgX19odGFiX2xydV9wZXJjcHVfbWFwX3VwZGF0ZV9lbGVtYCwgYGh0YWJfbWFwX2RlbGV0ZV9lbGVtYCwgYGh0YWJfbHJ1X21hcF9kZWxldGVfZWxlbWAsIGBfX2h0YWJfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2VsZW1gLCBgX19odGFiX21hcF9sb29rdXBfYW5kX2RlbGV0ZV9iYXRjaGAsIGBicGZfbWFwX21ldGFfYWxsb2NgLCBhbmQgdGhlIHZhcmlvdXMgbG9va3VwIGZ1bmN0aW9uczogYGh0YWJfbWFwX2dlbl9sb29rdXBgLCBgaHRhYl9scnVfbWFwX2dlbl9sb29rdXBgLCBgaHRhYl9wZXJjcHVfbWFwX2dlbl9sb29rdXBgLCBhbmQgYGh0YWJfb2ZfbWFwX2dlbl9sb29rdXBgLiBUaGVzZSBzZWVtIGxpa2UgdGhlIGNvcmUgZW50cnkgcG9pbnRzIGZvciB0aGUgY2hhbmdlcy5cblxuQWxyaWdodCwgSSdtIGdvaW5nIHRvIHJlZmluZSB0aGF0IGxpc3QgYSBsaXR0bGUuIFdhaXQsIEkgcmVtZW1iZXIgdGhhdCBgaHRhYl9tYXBfdXBkYXRlX2VsZW1gIGlzIGEgcHJldHR5IGltcG9ydGFudCBob3QtcGF0aCBmdW5jdGlvbiwgdGhlIHNwZWNpZmljIGltcGxlbWVudGF0aW9uIGZvciBoYXNoIG1hcHMsIHNvIGl0J3MgYSBwcmltZSB0YXJnZXQsIGVzcGVjaWFsbHkgY29uc2lkZXJpbmcgZnV6emluZyBCUEYgbWFwIG9wZXJhdGlvbnMgaXMgc3RhbmRhcmQgcHJhY3RpY2UuXG5cbkFmdGVyIHRoYXQgaW5pdGlhbCBsaXN0IEknbGwga2VlcCB0aGUgb25lcyBJJ3ZlIGxpc3RlZCBwcmV2aW91c2x5IGFuZCBmb2N1cyBvbiB0aGUgYGJwZl9tYXBfbWV0YV9hbGxvY2AgYmVjYXVzZSB0aGF0IGNvdWxkIGJlIGEgc2lnbmlmaWNhbnQgY2hhbmdlIGFuZCB0aHVzIGEgcG90ZW50aWFsIHRhcmdldCBmb3IgZnV6emluZy5cblxuTm93LCBsZXQncyBzZWUsIGBodGFiX21hcF91cGRhdGVfZWxlbWAgaXMgc3RhdGljLCB3aGljaCBpcyB1c3VhbGx5IG5vdCBpZGVhbCBmb3IgZnV6emluZy4gSG93ZXZlciwgaXQncyBhc3NpZ25lZCB0byBgbWFwX29wc2AsIHNvIFN5emthbGxlciAqc2hvdWxkKiBiZSBhYmxlIHRvIHRhcmdldCBpdCB0aHJvdWdoIHRoZSBgYnBmKClgIHN5c2NhbGwuIFllcywgYEZvY3VzU3ltYm9sc2AgYXJlIHNwZWNpZmljYWxseSB0aG9zZSB0aGF0IGNhbiBiZSB0YXJnZXRlZCBieSBzeXprYWxsZXIgb3IgYXJlIGNyaXRpY2FsIGZvciBjb3ZlcmFnZS5cblxuU28sIHRoZSBkZWZpbml0aXZlIGxpc3QgZm9yIG15IGFuYWx5c2lzIG5vdyBpbmNsdWRlczogYGh0YWJfbWFwX2FsbG9jYCwgYGh0YWJfbWFwX3VwZGF0ZV9lbGVtYCwgYGh0YWJfbHJ1X21hcF91cGRhdGVfZWxlbWAsIGBfX2h0YWJfbHJ1X3BlcmNwdV9tYXBfdXBkYXRlX2VsZW1gLCBgaHRhYl9tYXBfZGVsZXRlX2VsZW1gLCBgaHRhYl9scnVfbWFwX2RlbGV0ZV9lbGVtYCwgYF9faHRhYl9tYXBfbG9va3VwX2FuZF9kZWxldGVfZWxlbWAsIGBfX2h0YWJfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2JhdGNoYCwgYGJwZl9tYXBfbWV0YV9hbGxvY2AsIGBodGFiX21hcF9nZW5fbG9va3VwYCwgYGh0YWJfbHJ1X21hcF9nZW5fbG9va3VwYCwgYGh0YWJfcGVyY3B1X21hcF9nZW5fbG9va3VwYCwgYW5kIGBodGFiX29mX21hcF9nZW5fbG9va3VwYC4gSSdsbCBtYWtlIHN1cmUgdG8gbm90ZSB0aGVzZS5cblxuSnVzdCB2ZXJpZnlpbmcgdGhhdCBgaHRhYl9tYXBfZ2VuX2xvb2t1cGAgaXMgaW5kZWVkIHByZXNlbnQgaW4gdGhlIGRpZmYuIEdvb2QuXG5cblllcywgdGhpcyBpcyBkZWZpbml0ZWx5IHdvcnRoIGZ1enppbmcuIFRoZSBwYXRjaCBpcyBjaGFuZ2luZyB0aGUgbWVtb3J5IGxheW91dCBhbmQgb3BlcmF0aW9ucyBvZiBCUEYgaGFzaCBtYXBzLCBpbmNsdWRpbmcgdGhlIExSVSBhbmQgcGVyLUNQVSB2YXJpYW50cy4gSXQgaW50cm9kdWNlcyBuZXcgc3RydWN0dXJlcyBhbmQgb2Zmc2V0cyB3aGljaCBpbiB0dXJuIGFmZmVjdHMgY3J1Y2lhbCBvcGVyYXRpb25zIGxpa2UgYWxsb2NhdGlvbiwgdXBkYXRlcywgZGVsZXRpb25zLCBhbmQgSklUIGxvb2t1cCBnZW5lcmF0aW9uLiBGdXp6aW5nIGlzIGVzc2VudGlhbCBoZXJlIHRvIGVuc3VyZSBtZW1vcnkgc2FmZXR5IGFuZCB0aGUgY29ycmVjdG5lc3Mgb2YgdGhlc2UgY29yZSBCUEYgbWFwIG9wZXJhdGlvbnMgZ2l2ZW4gdGhlIHN1YnN0YW50aWFsIGNoYW5nZXMuXG5cbk15IGZpbmFsIHNldHRpbmdzIHdpbGwgYmU6IGBXb3J0aEZ1enppbmc6IHRydWVgLCBgRW5hYmxlQ29uZmlnczogW1wiQlBGX1NZU0NBTExcIl1gLCBgRm9jdXNTeW1ib2xzOiBbXCJodGFiX21hcF9hbGxvY1wiLCBcImh0YWJfbWFwX3VwZGF0ZV9lbGVtXCIsIFwiaHRhYl9scnVfbWFwX3VwZGF0ZV9lbGVtXCIsIFwiX19odGFiX2xydV9wZXJjcHVfbWFwX3VwZGF0ZV9lbGVtXCIsIFwiaHRhYl9tYXBfZGVsZXRlX2VsZW1cIiwgXCJodGFiX2xydV9tYXBfZGVsZXRlX2VsZW1cIiwgXCJfX2h0YWJfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2VsZW1cIiwgXCJfX2h0YWJfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2JhdGNoXCIsIFwiYnBmX21hcF9tZXRhX2FsbG9jXCIsIFwiaHRhYl9tYXBfZ2VuX2xvb2t1cFwiLCBcImh0YWJfbHJ1X21hcF9nZW5fbG9va3VwXCIsIFwiaHRhYl9wZXJjcHVfbWFwX2dlbl9sb29rdXBcIiwgXCJodGFiX29mX21hcF9nZW5fbG9va3VwXCJdYCwgYW5kIGBSZWFzb25pbmc6IFwiVGhlIHBhdGNoIGZ1bmN0aW9uYWxseSBtb2RpZmllcyB0aGUgbWVtb3J5IGxheW91dCBhbmQgb3BlcmF0aW9ucyBvZiBCUEYgaGFzaCBtYXBzIChpbmNsdWRpbmcgTFJVIGFuZCBwZXItQ1BVIHZhcmlhbnRzKS4gSXQgaW50cm9kdWNlcyBuZXcgc3RydWN0dXJlcyBhbmQgb2Zmc2V0cyBmb3IgaGFzaCBtYXAgZWxlbWVudHMsIHdoaWNoIGFmZmVjdHMgYWxsb2NhdGlvbiwgdXBkYXRlcywgZGVsZXRpb25zLCBhbmQgSklUIGxvb2t1cCBnZW5lcmF0aW9uLiBGdXp6aW5nIGlzIG5lZWRlZCB0byBlbnN1cmUgbWVtb3J5IHNhZmV0eSBhbmQgY29ycmVjdG5lc3Mgb2YgdGhlc2UgY29yZSBCUEYgbWFwIG9wZXJhdGlvbnMuXCJgXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwNDgyLCJPdXRwdXRUb2tlbnMiOjI3OCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExNDAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjNUMjI6Mzk6MTQuMDMxNTM5Njg1WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzI1MzQ3MjQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfU1lTQ0FMTFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImh0YWJfbWFwX2FsbG9jXCIsXG4gICAgXCJodGFiX21hcF91cGRhdGVfZWxlbVwiLFxuICAgIFwiaHRhYl9scnVfbWFwX3VwZGF0ZV9lbGVtXCIsXG4gICAgXCJfX2h0YWJfbHJ1X3BlcmNwdV9tYXBfdXBkYXRlX2VsZW1cIixcbiAgICBcImh0YWJfbWFwX2RlbGV0ZV9lbGVtXCIsXG4gICAgXCJodGFiX2xydV9tYXBfZGVsZXRlX2VsZW1cIixcbiAgICBcIl9faHRhYl9tYXBfbG9va3VwX2FuZF9kZWxldGVfZWxlbVwiLFxuICAgIFwiX19odGFiX21hcF9sb29rdXBfYW5kX2RlbGV0ZV9iYXRjaFwiLFxuICAgIFwiYnBmX21hcF9tZXRhX2FsbG9jXCIsXG4gICAgXCJodGFiX21hcF9nZW5fbG9va3VwXCIsXG4gICAgXCJodGFiX2xydV9tYXBfZ2VuX2xvb2t1cFwiLFxuICAgIFwiaHRhYl9wZXJjcHVfbWFwX2dlbl9sb29rdXBcIixcbiAgICBcImh0YWJfb2ZfbWFwX2dlbl9sb29rdXBcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmdW5jdGlvbmFsbHkgbW9kaWZpZXMgdGhlIG1lbW9yeSBsYXlvdXQgYW5kIG9wZXJhdGlvbnMgb2YgQlBGIGhhc2ggbWFwcyAoaW5jbHVkaW5nIExSVSBhbmQgcGVyLUNQVSB2YXJpYW50cykuIEl0IGludHJvZHVjZXMgbmV3IHN0cnVjdHVyZXMgYW5kIG9mZnNldHMgZm9yIGhhc2ggbWFwIGVsZW1lbnRzLCB3aGljaCBhZmZlY3RzIGFsbG9jYXRpb24sIHVwZGF0ZXMsIGRlbGV0aW9ucywgYW5kIEpJVCBsb29rdXAgZ2VuZXJhdGlvbi4gRnV6emluZyBpcyBuZWVkZWQgdG8gZW5zdXJlIG1lbW9yeSBzYWZldHkgYW5kIGNvcnJlY3RuZXNzIG9mIHRoZXNlIGNvcmUgQlBGIG1hcCBvcGVyYXRpb25zLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJQRl9TWVNDQUxMXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaHRhYl9tYXBfYWxsb2NcIixcbiAgICBcImh0YWJfbWFwX3VwZGF0ZV9lbGVtXCIsXG4gICAgXCJodGFiX2xydV9tYXBfdXBkYXRlX2VsZW1cIixcbiAgICBcIl9faHRhYl9scnVfcGVyY3B1X21hcF91cGRhdGVfZWxlbVwiLFxuICAgIFwiaHRhYl9tYXBfZGVsZXRlX2VsZW1cIixcbiAgICBcImh0YWJfbHJ1X21hcF9kZWxldGVfZWxlbVwiLFxuICAgIFwiX19odGFiX21hcF9sb29rdXBfYW5kX2RlbGV0ZV9lbGVtXCIsXG4gICAgXCJfX2h0YWJfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2JhdGNoXCIsXG4gICAgXCJicGZfbWFwX21ldGFfYWxsb2NcIixcbiAgICBcImh0YWJfbWFwX2dlbl9sb29rdXBcIixcbiAgICBcImh0YWJfbHJ1X21hcF9nZW5fbG9va3VwXCIsXG4gICAgXCJodGFiX3BlcmNwdV9tYXBfZ2VuX2xvb2t1cFwiLFxuICAgIFwiaHRhYl9vZl9tYXBfZ2VuX2xvb2t1cFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZ1bmN0aW9uYWxseSBtb2RpZmllcyB0aGUgbWVtb3J5IGxheW91dCBhbmQgb3BlcmF0aW9ucyBvZiBCUEYgaGFzaCBtYXBzIChpbmNsdWRpbmcgTFJVIGFuZCBwZXItQ1BVIHZhcmlhbnRzKS4gSXQgaW50cm9kdWNlcyBuZXcgc3RydWN0dXJlcyBhbmQgb2Zmc2V0cyBmb3IgaGFzaCBtYXAgZWxlbWVudHMsIHdoaWNoIGFmZmVjdHMgYWxsb2NhdGlvbiwgdXBkYXRlcywgZGVsZXRpb25zLCBhbmQgSklUIGxvb2t1cCBnZW5lcmF0aW9uLiBGdXp6aW5nIGlzIG5lZWRlZCB0byBlbnN1cmUgbWVtb3J5IHNhZmV0eSBhbmQgY29ycmVjdG5lc3Mgb2YgdGhlc2UgY29yZSBCUEYgbWFwIG9wZXJhdGlvbnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflowmcbkj[1] Phase: Succeeded StartedAt: 2026-07-23 22:39:26 +0000 UTC FinishedAt: 2026-07-23 22:39:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmcbkj[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-23 22:39:27 +0000 UTC FinishedAt: 2026-07-23 22:39:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmcbkj[2] Phase: Succeeded StartedAt: 2026-07-23 22:39:27 +0000 UTC FinishedAt: 2026-07-24 02:59:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmcbkj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cfce77b63375dac81d53f2f85593c548415206b7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["htab_map_alloc","htab_map_update_elem","htab_lru_map_update_elem","__htab_lru_percpu_map_update_elem","htab_map_delete_elem","htab_lru_map_delete_elem","__htab_map_lookup_and_delete_elem","__htab_map_lookup_and_delete_batch","bpf_map_meta_alloc","htab_map_gen_lookup","htab_lru_map_gen_lookup","htab_percpu_map_gen_lookup","htab_of_map_gen_lookup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cfce77b63375dac81d53f2f85593c548415206b7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"bc6e3bf0-4b8c-42d2-9d4d-c20e9acd5371","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-07-23 22:39:27 +0000 UTC FinishedAt: 2026-07-24 02:59:01 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"cfce77b63375dac81d53f2f85593c548415206b7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["htab_map_alloc","htab_map_update_elem","htab_lru_map_update_elem","__htab_lru_percpu_map_update_elem","htab_map_delete_elem","htab_lru_map_delete_elem","__htab_map_lookup_and_delete_elem","__htab_map_lookup_and_delete_batch","bpf_map_meta_alloc","htab_map_gen_lookup","htab_lru_map_gen_lookup","htab_percpu_map_gen_lookup","htab_of_map_gen_lookup"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"cfce77b63375dac81d53f2f85593c548415206b7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"bc6e3bf0-4b8c-42d2-9d4d-c20e9acd5371","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowmcbkj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cfce77b63375dac81d53f2f85593c548415206b7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["htab_map_alloc","htab_map_update_elem","htab_lru_map_update_elem","__htab_lru_percpu_map_update_elem","htab_map_delete_elem","htab_lru_map_delete_elem","__htab_map_lookup_and_delete_elem","__htab_map_lookup_and_delete_batch","bpf_map_meta_alloc","htab_map_gen_lookup","htab_lru_map_gen_lookup","htab_percpu_map_gen_lookup","htab_of_map_gen_lookup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cfce77b63375dac81d53f2f85593c548415206b7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"bc6e3bf0-4b8c-42d2-9d4d-c20e9acd5371","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-07-23 22:39:27 +0000 UTC FinishedAt: 2026-07-23 22:40:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmcbkj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cfce77b63375dac81d53f2f85593c548415206b7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["htab_map_alloc","htab_map_update_elem","htab_lru_map_update_elem","__htab_lru_percpu_map_update_elem","htab_map_delete_elem","htab_lru_map_delete_elem","__htab_map_lookup_and_delete_elem","__htab_map_lookup_and_delete_batch","bpf_map_meta_alloc","htab_map_gen_lookup","htab_lru_map_gen_lookup","htab_percpu_map_gen_lookup","htab_of_map_gen_lookup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cfce77b63375dac81d53f2f85593c548415206b7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"bc6e3bf0-4b8c-42d2-9d4d-c20e9acd5371","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-07-23 22:39:27 +0000 UTC FinishedAt: 2026-07-23 22:39:55 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"cfce77b63375dac81d53f2f85593c548415206b7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowmcbkj/series-workflowmcbkj-convert-artifact-2045527602/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowmcbkj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cfce77b63375dac81d53f2f85593c548415206b7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["htab_map_alloc","htab_map_update_elem","htab_lru_map_update_elem","__htab_lru_percpu_map_update_elem","htab_map_delete_elem","htab_lru_map_delete_elem","__htab_map_lookup_and_delete_elem","__htab_map_lookup_and_delete_batch","bpf_map_meta_alloc","htab_map_gen_lookup","htab_lru_map_gen_lookup","htab_percpu_map_gen_lookup","htab_of_map_gen_lookup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cfce77b63375dac81d53f2f85593c548415206b7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"bc6e3bf0-4b8c-42d2-9d4d-c20e9acd5371","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-07-23 22:40:04 +0000 UTC FinishedAt: 2026-07-23 23:16:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmcbkj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cfce77b63375dac81d53f2f85593c548415206b7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["htab_map_alloc","htab_map_update_elem","htab_lru_map_update_elem","__htab_lru_percpu_map_update_elem","htab_map_delete_elem","htab_lru_map_delete_elem","__htab_map_lookup_and_delete_elem","__htab_map_lookup_and_delete_batch","bpf_map_meta_alloc","htab_map_gen_lookup","htab_lru_map_gen_lookup","htab_percpu_map_gen_lookup","htab_of_map_gen_lookup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cfce77b63375dac81d53f2f85593c548415206b7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"bc6e3bf0-4b8c-42d2-9d4d-c20e9acd5371","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-07-23 22:40:04 +0000 UTC FinishedAt: 2026-07-23 23:16:03 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*2aea375b-1188-469d-855f-1dff83ca98ba,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:request,Path:/tmp/request.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowmcbkj/series-workflowmcbkj-convert-artifact-2045527602/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "build_id": "a07931fb-56e3-44c1-b2dc-e537e048df25", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowmcbkj/series-workflowmcbkj-build-action-224958384/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowmcbkj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cfce77b63375dac81d53f2f85593c548415206b7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["htab_map_alloc","htab_map_update_elem","htab_lru_map_update_elem","__htab_lru_percpu_map_update_elem","htab_map_delete_elem","htab_lru_map_delete_elem","__htab_map_lookup_and_delete_elem","__htab_map_lookup_and_delete_batch","bpf_map_meta_alloc","htab_map_gen_lookup","htab_lru_map_gen_lookup","htab_percpu_map_gen_lookup","htab_of_map_gen_lookup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cfce77b63375dac81d53f2f85593c548415206b7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"bc6e3bf0-4b8c-42d2-9d4d-c20e9acd5371","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-07-23 22:40:04 +0000 UTC FinishedAt: 2026-07-23 23:15:53 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*2aea375b-1188-469d-855f-1dff83ca98ba,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:request,Path:/tmp/request.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowmcbkj/series-workflowmcbkj-convert-artifact-2045527602/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "build_id": "a07931fb-56e3-44c1-b2dc-e537e048df25", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowmcbkj/series-workflowmcbkj-build-action-224958384/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowmcbkj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cfce77b63375dac81d53f2f85593c548415206b7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["htab_map_alloc","htab_map_update_elem","htab_lru_map_update_elem","__htab_lru_percpu_map_update_elem","htab_map_delete_elem","htab_lru_map_delete_elem","__htab_map_lookup_and_delete_elem","__htab_map_lookup_and_delete_batch","bpf_map_meta_alloc","htab_map_gen_lookup","htab_lru_map_gen_lookup","htab_percpu_map_gen_lookup","htab_of_map_gen_lookup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cfce77b63375dac81d53f2f85593c548415206b7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"bc6e3bf0-4b8c-42d2-9d4d-c20e9acd5371","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-07-23 23:16:03 +0000 UTC FinishedAt: 2026-07-23 23:16:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmcbkj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cfce77b63375dac81d53f2f85593c548415206b7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["htab_map_alloc","htab_map_update_elem","htab_lru_map_update_elem","__htab_lru_percpu_map_update_elem","htab_map_delete_elem","htab_lru_map_delete_elem","__htab_map_lookup_and_delete_elem","__htab_map_lookup_and_delete_batch","bpf_map_meta_alloc","htab_map_gen_lookup","htab_lru_map_gen_lookup","htab_percpu_map_gen_lookup","htab_of_map_gen_lookup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cfce77b63375dac81d53f2f85593c548415206b7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"bc6e3bf0-4b8c-42d2-9d4d-c20e9acd5371","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-07-23 23:16:03 +0000 UTC FinishedAt: 2026-07-23 23:16:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmcbkj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cfce77b63375dac81d53f2f85593c548415206b7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["htab_map_alloc","htab_map_update_elem","htab_lru_map_update_elem","__htab_lru_percpu_map_update_elem","htab_map_delete_elem","htab_lru_map_delete_elem","__htab_map_lookup_and_delete_elem","__htab_map_lookup_and_delete_batch","bpf_map_meta_alloc","htab_map_gen_lookup","htab_lru_map_gen_lookup","htab_percpu_map_gen_lookup","htab_of_map_gen_lookup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cfce77b63375dac81d53f2f85593c548415206b7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"bc6e3bf0-4b8c-42d2-9d4d-c20e9acd5371","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-07-23 23:16:03 +0000 UTC FinishedAt: 2026-07-23 23:16:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmcbkj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cfce77b63375dac81d53f2f85593c548415206b7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["htab_map_alloc","htab_map_update_elem","htab_lru_map_update_elem","__htab_lru_percpu_map_update_elem","htab_map_delete_elem","htab_lru_map_delete_elem","__htab_map_lookup_and_delete_elem","__htab_map_lookup_and_delete_batch","bpf_map_meta_alloc","htab_map_gen_lookup","htab_lru_map_gen_lookup","htab_percpu_map_gen_lookup","htab_of_map_gen_lookup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cfce77b63375dac81d53f2f85593c548415206b7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"bc6e3bf0-4b8c-42d2-9d4d-c20e9acd5371","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-07-23 23:16:03 +0000 UTC FinishedAt: 2026-07-23 23:16:09 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"cfce77b63375dac81d53f2f85593c548415206b7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"bc6e3bf0-4b8c-42d2-9d4d-c20e9acd5371","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowmcbkj/series-workflowmcbkj-convert-artifact-3887579213/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowmcbkj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cfce77b63375dac81d53f2f85593c548415206b7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["htab_map_alloc","htab_map_update_elem","htab_lru_map_update_elem","__htab_lru_percpu_map_update_elem","htab_map_delete_elem","htab_lru_map_delete_elem","__htab_map_lookup_and_delete_elem","__htab_map_lookup_and_delete_batch","bpf_map_meta_alloc","htab_map_gen_lookup","htab_lru_map_gen_lookup","htab_percpu_map_gen_lookup","htab_of_map_gen_lookup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cfce77b63375dac81d53f2f85593c548415206b7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"bc6e3bf0-4b8c-42d2-9d4d-c20e9acd5371","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-07-23 23:16:13 +0000 UTC FinishedAt: 2026-07-23 23:18:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmcbkj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cfce77b63375dac81d53f2f85593c548415206b7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["htab_map_alloc","htab_map_update_elem","htab_lru_map_update_elem","__htab_lru_percpu_map_update_elem","htab_map_delete_elem","htab_lru_map_delete_elem","__htab_map_lookup_and_delete_elem","__htab_map_lookup_and_delete_batch","bpf_map_meta_alloc","htab_map_gen_lookup","htab_lru_map_gen_lookup","htab_percpu_map_gen_lookup","htab_of_map_gen_lookup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cfce77b63375dac81d53f2f85593c548415206b7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"bc6e3bf0-4b8c-42d2-9d4d-c20e9acd5371","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-07-23 23:16:13 +0000 UTC FinishedAt: 2026-07-23 23:18:02 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*a07931fb-56e3-44c1-b2dc-e537e048df25,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Boot test: Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:report-findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/base,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowmcbkj/series-workflowmcbkj-build-action-224958384/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "success": true },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-workflowmcbkj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cfce77b63375dac81d53f2f85593c548415206b7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["htab_map_alloc","htab_map_update_elem","htab_lru_map_update_elem","__htab_lru_percpu_map_update_elem","htab_map_delete_elem","htab_lru_map_delete_elem","__htab_map_lookup_and_delete_elem","__htab_map_lookup_and_delete_batch","bpf_map_meta_alloc","htab_map_gen_lookup","htab_lru_map_gen_lookup","htab_percpu_map_gen_lookup","htab_of_map_gen_lookup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cfce77b63375dac81d53f2f85593c548415206b7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"bc6e3bf0-4b8c-42d2-9d4d-c20e9acd5371","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-07-23 23:18:11 +0000 UTC FinishedAt: 2026-07-23 23:18:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmcbkj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cfce77b63375dac81d53f2f85593c548415206b7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["htab_map_alloc","htab_map_update_elem","htab_lru_map_update_elem","__htab_lru_percpu_map_update_elem","htab_map_delete_elem","htab_lru_map_delete_elem","__htab_map_lookup_and_delete_elem","__htab_map_lookup_and_delete_batch","bpf_map_meta_alloc","htab_map_gen_lookup","htab_lru_map_gen_lookup","htab_percpu_map_gen_lookup","htab_of_map_gen_lookup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cfce77b63375dac81d53f2f85593c548415206b7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"bc6e3bf0-4b8c-42d2-9d4d-c20e9acd5371","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-07-23 23:18:11 +0000 UTC FinishedAt: 2026-07-23 23:18:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmcbkj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cfce77b63375dac81d53f2f85593c548415206b7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["htab_map_alloc","htab_map_update_elem","htab_lru_map_update_elem","__htab_lru_percpu_map_update_elem","htab_map_delete_elem","htab_lru_map_delete_elem","__htab_map_lookup_and_delete_elem","__htab_map_lookup_and_delete_batch","bpf_map_meta_alloc","htab_map_gen_lookup","htab_lru_map_gen_lookup","htab_percpu_map_gen_lookup","htab_of_map_gen_lookup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cfce77b63375dac81d53f2f85593c548415206b7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"bc6e3bf0-4b8c-42d2-9d4d-c20e9acd5371","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-07-23 23:18:11 +0000 UTC FinishedAt: 2026-07-23 23:50:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmcbkj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cfce77b63375dac81d53f2f85593c548415206b7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["htab_map_alloc","htab_map_update_elem","htab_lru_map_update_elem","__htab_lru_percpu_map_update_elem","htab_map_delete_elem","htab_lru_map_delete_elem","__htab_map_lookup_and_delete_elem","__htab_map_lookup_and_delete_batch","bpf_map_meta_alloc","htab_map_gen_lookup","htab_lru_map_gen_lookup","htab_percpu_map_gen_lookup","htab_of_map_gen_lookup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cfce77b63375dac81d53f2f85593c548415206b7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"bc6e3bf0-4b8c-42d2-9d4d-c20e9acd5371","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-07-23 23:18:11 +0000 UTC FinishedAt: 2026-07-23 23:50:54 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*2aea375b-1188-469d-855f-1dff83ca98ba,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:request,Path:/tmp/request.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowmcbkj/series-workflowmcbkj-convert-artifact-3887579213/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "build_id": "bddbad73-3072-4395-a264-ed78a7456b44", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowmcbkj/series-workflowmcbkj-build-action-4040093225/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowmcbkj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cfce77b63375dac81d53f2f85593c548415206b7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["htab_map_alloc","htab_map_update_elem","htab_lru_map_update_elem","__htab_lru_percpu_map_update_elem","htab_map_delete_elem","htab_lru_map_delete_elem","__htab_map_lookup_and_delete_elem","__htab_map_lookup_and_delete_batch","bpf_map_meta_alloc","htab_map_gen_lookup","htab_lru_map_gen_lookup","htab_percpu_map_gen_lookup","htab_of_map_gen_lookup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cfce77b63375dac81d53f2f85593c548415206b7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"bc6e3bf0-4b8c-42d2-9d4d-c20e9acd5371","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-07-23 23:18:11 +0000 UTC FinishedAt: 2026-07-23 23:50:44 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*2aea375b-1188-469d-855f-1dff83ca98ba,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:request,Path:/tmp/request.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowmcbkj/series-workflowmcbkj-convert-artifact-3887579213/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "build_id": "bddbad73-3072-4395-a264-ed78a7456b44", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowmcbkj/series-workflowmcbkj-build-action-4040093225/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowmcbkj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cfce77b63375dac81d53f2f85593c548415206b7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["htab_map_alloc","htab_map_update_elem","htab_lru_map_update_elem","__htab_lru_percpu_map_update_elem","htab_map_delete_elem","htab_lru_map_delete_elem","__htab_map_lookup_and_delete_elem","__htab_map_lookup_and_delete_batch","bpf_map_meta_alloc","htab_map_gen_lookup","htab_lru_map_gen_lookup","htab_percpu_map_gen_lookup","htab_of_map_gen_lookup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cfce77b63375dac81d53f2f85593c548415206b7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"bc6e3bf0-4b8c-42d2-9d4d-c20e9acd5371","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-07-23 23:50:54 +0000 UTC FinishedAt: 2026-07-23 23:50:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmcbkj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cfce77b63375dac81d53f2f85593c548415206b7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["htab_map_alloc","htab_map_update_elem","htab_lru_map_update_elem","__htab_lru_percpu_map_update_elem","htab_map_delete_elem","htab_lru_map_delete_elem","__htab_map_lookup_and_delete_elem","__htab_map_lookup_and_delete_batch","bpf_map_meta_alloc","htab_map_gen_lookup","htab_lru_map_gen_lookup","htab_percpu_map_gen_lookup","htab_of_map_gen_lookup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cfce77b63375dac81d53f2f85593c548415206b7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"bc6e3bf0-4b8c-42d2-9d4d-c20e9acd5371","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-07-23 23:50:54 +0000 UTC FinishedAt: 2026-07-23 23:50:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmcbkj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cfce77b63375dac81d53f2f85593c548415206b7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["htab_map_alloc","htab_map_update_elem","htab_lru_map_update_elem","__htab_lru_percpu_map_update_elem","htab_map_delete_elem","htab_lru_map_delete_elem","__htab_map_lookup_and_delete_elem","__htab_map_lookup_and_delete_batch","bpf_map_meta_alloc","htab_map_gen_lookup","htab_lru_map_gen_lookup","htab_percpu_map_gen_lookup","htab_of_map_gen_lookup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cfce77b63375dac81d53f2f85593c548415206b7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"bc6e3bf0-4b8c-42d2-9d4d-c20e9acd5371","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-07-23 23:50:54 +0000 UTC FinishedAt: 2026-07-23 23:52:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmcbkj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cfce77b63375dac81d53f2f85593c548415206b7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["htab_map_alloc","htab_map_update_elem","htab_lru_map_update_elem","__htab_lru_percpu_map_update_elem","htab_map_delete_elem","htab_lru_map_delete_elem","__htab_map_lookup_and_delete_elem","__htab_map_lookup_and_delete_batch","bpf_map_meta_alloc","htab_map_gen_lookup","htab_lru_map_gen_lookup","htab_percpu_map_gen_lookup","htab_of_map_gen_lookup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cfce77b63375dac81d53f2f85593c548415206b7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"bc6e3bf0-4b8c-42d2-9d4d-c20e9acd5371","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-07-23 23:50:54 +0000 UTC FinishedAt: 2026-07-23 23:52:43 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*bddbad73-3072-4395-a264-ed78a7456b44,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Boot test: Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:report-findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/base,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowmcbkj/series-workflowmcbkj-build-action-4040093225/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "success": true },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-workflowmcbkj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cfce77b63375dac81d53f2f85593c548415206b7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["htab_map_alloc","htab_map_update_elem","htab_lru_map_update_elem","__htab_lru_percpu_map_update_elem","htab_map_delete_elem","htab_lru_map_delete_elem","__htab_map_lookup_and_delete_elem","__htab_map_lookup_and_delete_batch","bpf_map_meta_alloc","htab_map_gen_lookup","htab_lru_map_gen_lookup","htab_percpu_map_gen_lookup","htab_of_map_gen_lookup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cfce77b63375dac81d53f2f85593c548415206b7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"bc6e3bf0-4b8c-42d2-9d4d-c20e9acd5371","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-07-23 23:52:53 +0000 UTC FinishedAt: 2026-07-24 02:59:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmcbkj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cfce77b63375dac81d53f2f85593c548415206b7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["htab_map_alloc","htab_map_update_elem","htab_lru_map_update_elem","__htab_lru_percpu_map_update_elem","htab_map_delete_elem","htab_lru_map_delete_elem","__htab_map_lookup_and_delete_elem","__htab_map_lookup_and_delete_batch","bpf_map_meta_alloc","htab_map_gen_lookup","htab_lru_map_gen_lookup","htab_percpu_map_gen_lookup","htab_of_map_gen_lookup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cfce77b63375dac81d53f2f85593c548415206b7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"bc6e3bf0-4b8c-42d2-9d4d-c20e9acd5371","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-07-23 23:52:53 +0000 UTC FinishedAt: 2026-07-24 02:59:01 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["htab_map_alloc","htab_map_update_elem","htab_lru_map_update_elem","__htab_lru_percpu_map_update_elem","htab_map_delete_elem","htab_lru_map_delete_elem","__htab_map_lookup_and_delete_elem","__htab_map_lookup_and_delete_batch","bpf_map_meta_alloc","htab_map_gen_lookup","htab_lru_map_gen_lookup","htab_percpu_map_gen_lookup","htab_of_map_gen_lookup"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:track,Default:nil,Value:*KASAN,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:base-build-id,Default:nil,Value:*a07931fb-56e3-44c1-b2dc-e537e048df25,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*bddbad73-3072-4395-a264-ed78a7456b44,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:base-kernel,Path:,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowmcbkj/series-workflowmcbkj-build-action-224958384/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:patched-kernel,Path:,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowmcbkj/series-workflowmcbkj-build-action-4040093225/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowmcbkj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cfce77b63375dac81d53f2f85593c548415206b7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["htab_map_alloc","htab_map_update_elem","htab_lru_map_update_elem","__htab_lru_percpu_map_update_elem","htab_map_delete_elem","htab_lru_map_delete_elem","__htab_map_lookup_and_delete_elem","__htab_map_lookup_and_delete_batch","bpf_map_meta_alloc","htab_map_gen_lookup","htab_lru_map_gen_lookup","htab_percpu_map_gen_lookup","htab_of_map_gen_lookup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cfce77b63375dac81d53f2f85593c548415206b7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"bc6e3bf0-4b8c-42d2-9d4d-c20e9acd5371","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-07-23 23:52:53 +0000 UTC FinishedAt: 2026-07-23 23:53:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmcbkj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cfce77b63375dac81d53f2f85593c548415206b7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["htab_map_alloc","htab_map_update_elem","htab_lru_map_update_elem","__htab_lru_percpu_map_update_elem","htab_map_delete_elem","htab_lru_map_delete_elem","__htab_map_lookup_and_delete_elem","__htab_map_lookup_and_delete_batch","bpf_map_meta_alloc","htab_map_gen_lookup","htab_lru_map_gen_lookup","htab_percpu_map_gen_lookup","htab_of_map_gen_lookup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cfce77b63375dac81d53f2f85593c548415206b7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"bc6e3bf0-4b8c-42d2-9d4d-c20e9acd5371","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-07-23 23:52:53 +0000 UTC FinishedAt: 2026-07-23 23:53:00 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["htab_map_alloc","htab_map_update_elem","htab_lru_map_update_elem","__htab_lru_percpu_map_update_elem","htab_map_delete_elem","htab_lru_map_delete_elem","__htab_map_lookup_and_delete_elem","__htab_map_lookup_and_delete_batch","bpf_map_meta_alloc","htab_map_gen_lookup","htab_lru_map_gen_lookup","htab_percpu_map_gen_lookup","htab_of_map_gen_lookup"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowmcbkj/series-workflowmcbkj-convert-artifact-974402098/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowmcbkj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cfce77b63375dac81d53f2f85593c548415206b7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["htab_map_alloc","htab_map_update_elem","htab_lru_map_update_elem","__htab_lru_percpu_map_update_elem","htab_map_delete_elem","htab_lru_map_delete_elem","__htab_map_lookup_and_delete_elem","__htab_map_lookup_and_delete_batch","bpf_map_meta_alloc","htab_map_gen_lookup","htab_lru_map_gen_lookup","htab_percpu_map_gen_lookup","htab_of_map_gen_lookup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cfce77b63375dac81d53f2f85593c548415206b7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"bc6e3bf0-4b8c-42d2-9d4d-c20e9acd5371","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-07-23 23:52:53 +0000 UTC FinishedAt: 2026-07-23 23:52:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmcbkj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cfce77b63375dac81d53f2f85593c548415206b7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["htab_map_alloc","htab_map_update_elem","htab_lru_map_update_elem","__htab_lru_percpu_map_update_elem","htab_map_delete_elem","htab_lru_map_delete_elem","__htab_map_lookup_and_delete_elem","__htab_map_lookup_and_delete_batch","bpf_map_meta_alloc","htab_map_gen_lookup","htab_lru_map_gen_lookup","htab_percpu_map_gen_lookup","htab_of_map_gen_lookup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cfce77b63375dac81d53f2f85593c548415206b7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"bc6e3bf0-4b8c-42d2-9d4d-c20e9acd5371","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-07-23 23:52:53 +0000 UTC FinishedAt: 2026-07-23 23:52:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmcbkj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cfce77b63375dac81d53f2f85593c548415206b7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["htab_map_alloc","htab_map_update_elem","htab_lru_map_update_elem","__htab_lru_percpu_map_update_elem","htab_map_delete_elem","htab_lru_map_delete_elem","__htab_map_lookup_and_delete_elem","__htab_map_lookup_and_delete_batch","bpf_map_meta_alloc","htab_map_gen_lookup","htab_lru_map_gen_lookup","htab_percpu_map_gen_lookup","htab_of_map_gen_lookup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cfce77b63375dac81d53f2f85593c548415206b7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"bc6e3bf0-4b8c-42d2-9d4d-c20e9acd5371","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-07-23 23:52:53 +0000 UTC FinishedAt: 2026-07-23 23:52:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmcbkj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cfce77b63375dac81d53f2f85593c548415206b7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["htab_map_alloc","htab_map_update_elem","htab_lru_map_update_elem","__htab_lru_percpu_map_update_elem","htab_map_delete_elem","htab_lru_map_delete_elem","__htab_map_lookup_and_delete_elem","__htab_map_lookup_and_delete_batch","bpf_map_meta_alloc","htab_map_gen_lookup","htab_lru_map_gen_lookup","htab_percpu_map_gen_lookup","htab_of_map_gen_lookup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cfce77b63375dac81d53f2f85593c548415206b7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"bc6e3bf0-4b8c-42d2-9d4d-c20e9acd5371","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-07-23 23:53:03 +0000 UTC FinishedAt: 2026-07-24 02:59:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmcbkj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cfce77b63375dac81d53f2f85593c548415206b7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["htab_map_alloc","htab_map_update_elem","htab_lru_map_update_elem","__htab_lru_percpu_map_update_elem","htab_map_delete_elem","htab_lru_map_delete_elem","__htab_map_lookup_and_delete_elem","__htab_map_lookup_and_delete_batch","bpf_map_meta_alloc","htab_map_gen_lookup","htab_lru_map_gen_lookup","htab_percpu_map_gen_lookup","htab_of_map_gen_lookup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cfce77b63375dac81d53f2f85593c548415206b7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"bc6e3bf0-4b8c-42d2-9d4d-c20e9acd5371","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-07-23 23:53:03 +0000 UTC FinishedAt: 2026-07-24 02:58:51 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*a07931fb-56e3-44c1-b2dc-e537e048df25,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*bddbad73-3072-4395-a264-ed78a7456b44,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Fuzz,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:base-kernel,Path:/base,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowmcbkj/series-workflowmcbkj-build-action-224958384/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:patched-kernel,Path:/patched,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowmcbkj/series-workflowmcbkj-build-action-4040093225/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:config,Path:/tmp/config.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowmcbkj/series-workflowmcbkj-convert-artifact-974402098/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,}