Name: series-workfloww57cg Phase: Succeeded StartedAt: 2026-06-28 05:24:47 +0000 UTC FinishedAt: 2026-06-28 09:26:03 +0000 UTC Input: nil Output: nil --------- Name: series-workfloww57cg[0] Phase: Succeeded StartedAt: 2026-06-28 05:24:47 +0000 UTC FinishedAt: 2026-06-28 05:33:38 +0000 UTC Input: nil Output: nil --------- Name: series-workfloww57cg[0].run-triage Phase: Succeeded StartedAt: 2026-06-28 05:24:47 +0000 UTC FinishedAt: 2026-06-28 05:33:38 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "780d569e6c4b422290f5cba319eb904b355d64be", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MINIX_FS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "780d569e6c4b422290f5cba319eb904b355d64be", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MINIX_FS" ], "series_id": "3b663c96-cf07-46e0-9b8d-785fe615029d" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "minix_dio_read_iter", "minix_dio_write_iter", "minix_dio_write_end_io", "minix_file_read_iter", "minix_file_write_iter", "minix_iomap_begin", "minix_iomap_end", "V1_minix_iomap_begin", "V2_minix_iomap_begin", "minix_writeback_range", "minix_writepages", "minix_read_folio", "minix_readahead", "minix_bmap", "__page_symlink", "minix_get_link", "minix_free_link" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI4IDA1OjMzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01JTklYX0ZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bWluaXhfZGlvX3JlYWRfaXRlciYjMzQ7LAogICAgJiMzNDttaW5peF9kaW9fd3JpdGVfaXRlciYjMzQ7LAogICAgJiMzNDttaW5peF9kaW9fd3JpdGVfZW5kX2lvJiMzNDssCiAgICAmIzM0O21pbml4X2ZpbGVfcmVhZF9pdGVyJiMzNDssCiAgICAmIzM0O21pbml4X2ZpbGVfd3JpdGVfaXRlciYjMzQ7LAogICAgJiMzNDttaW5peF9pb21hcF9iZWdpbiYjMzQ7LAogICAgJiMzNDttaW5peF9pb21hcF9lbmQmIzM0OywKICAgICYjMzQ7VjFfbWluaXhfaW9tYXBfYmVnaW4mIzM0OywKICAgICYjMzQ7VjJfbWluaXhfaW9tYXBfYmVnaW4mIzM0OywKICAgICYjMzQ7bWluaXhfd3JpdGViYWNrX3JhbmdlJiMzNDssCiAgICAmIzM0O21pbml4X3dyaXRlcGFnZXMmIzM0OywKICAgICYjMzQ7bWluaXhfcmVhZF9mb2xpbyYjMzQ7LAogICAgJiMzNDttaW5peF9yZWFkYWhlYWQmIzM0OywKICAgICYjMzQ7bWluaXhfYm1hcCYjMzQ7LAogICAgJiMzNDtfX3BhZ2Vfc3ltbGluayYjMzQ7LAogICAgJiMzNDttaW5peF9nZXRfbGluayYjMzQ7LAogICAgJiMzNDttaW5peF9mcmVlX2xpbmsmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW1wbGVtZW50cyBpb21hcC1iYXNlZCBkaXJlY3QgSS9PIGFuZCBidWZmZXJlZCBJL08gZm9yIHRoZSBtaW5peCBmaWxlc3lzdGVtLCB3aGljaCBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRvIHRoZSBjb3JlIGZpbGVzeXN0ZW0gbG9naWMuIEl0IG1vZGlmaWVzIHJlYWQvd3JpdGUgcGF0aHMsIGJsb2NrIG1hcHBpbmcsIGFuZCBzeW1saW5rIGhhbmRsaW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI4IDA1OjMzPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgYTQ0ZWVmODZmZGE0YjczNzU3NmMyODNhZDA1ZTQ4ZDkxYmJiMjFhNVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTdW4gSnVuIDI4IDA1OjMzOjAyIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2ZzL21pbml4L2ZpbGUuYyBiL2ZzL21pbml4L2ZpbGUuY1xuaW5kZXggODZlNTk0M2NkMmZmNzQuLmIwN2M4NTNmYTQzYWJjIDEwMDY0NFxuLS0tIGEvZnMvbWluaXgvZmlsZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9taW5peC9maWxlLmNcbkBAIC0xNywyMSAmIzQzOzE3LDE2NiBAQCBpbnQgbWluaXhfZnN5bmMoc3RydWN0IGZpbGUgKmZpbGUsIGxvZmZfdCBzdGFydCwgbG9mZl90IGVuZCwgaW50IGRhdGFzeW5jKVxuIFx0XHRcdHN0YXJ0LCBlbmQsIGRhdGFzeW5jKTtcbiB9XG4gXG4mIzQzO3N0YXRpYyBzc2l6ZV90IG1pbml4X2Rpb19yZWFkX2l0ZXIoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKnRvKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGlub2RlICppbm9kZSA9IGlvY2ItXHUwMDNla2lfZmlscC1cdTAwM2VmX21hcHBpbmctXHUwMDNlaG9zdDtcbiYjNDM7XHRzc2l6ZV90IHJldDtcbiYjNDM7XG4mIzQzO1x0aW5vZGVfbG9ja19zaGFyZWQoaW5vZGUpO1xuJiM0MztcbiYjNDM7XHRjb25zdCBzdHJ1Y3QgaW9tYXBfb3BzICpvcHMgPSBtaW5peF9pb21hcF9vcHNfdmVyKGlub2RlKTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gaW9tYXBfZGlvX3J3KGlvY2IsIHRvLCBvcHMsIE5VTEwsIDAsIE5VTEwsIDApO1xuJiM0MztcdGlub2RlX3VubG9ja19zaGFyZWQoaW5vZGUpO1xuJiM0MztcdHJldHVybiByZXQ7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgbWluaXhfZGlvX3dyaXRlX2VuZF9pbyhzdHJ1Y3Qga2lvY2IgKmlvY2IsIHNzaXplX3Qgc2l6ZSwgaW50IGVycm9yLFxuJiM0MztcdFx0dW5zaWduZWQgaW50IGZsYWdzKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGlub2RlICppbm9kZSA9IGZpbGVfaW5vZGUoaW9jYi1cdTAwM2VraV9maWxwKTtcbiYjNDM7XHRsb2ZmX3QgcG9zID0gaW9jYi1cdTAwM2VraV9wb3M7XG4mIzQzO1xuJiM0MztcdGlmIChlcnJvcilcbiYjNDM7XHRcdHJldHVybiBlcnJvcjtcbiYjNDM7XG4mIzQzO1x0cG9zICYjNDM7PSBzaXplO1xuJiM0MztcdGlmIChzaXplIFx1MDAyNlx1MDAyNiBwb3MgXHUwMDNlIGlfc2l6ZV9yZWFkKGlub2RlKSkge1xuJiM0MztcdFx0aV9zaXplX3dyaXRlKGlub2RlLCBwb3MpO1xuJiM0MztcdFx0bWFya19pbm9kZV9kaXJ0eShpbm9kZSk7XG4mIzQzO1x0fVxuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IGlvbWFwX2Rpb19vcHMgbWluaXhfZGlvX3dyaXRlX29wcyA9IHtcbiYjNDM7XHQuZW5kX2lvID0gbWluaXhfZGlvX3dyaXRlX2VuZF9pbyxcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO3N0YXRpYyBzc2l6ZV90IG1pbml4X2Rpb193cml0ZV9pdGVyKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICpmcm9tKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGlub2RlICppbm9kZSA9IGlvY2ItXHUwMDNla2lfZmlscC1cdTAwM2VmX21hcHBpbmctXHUwMDNlaG9zdDtcbiYjNDM7XHRzc2l6ZV90IHJldDtcbiYjNDM7XHR1bnNpZ25lZCBpbnQgZmxhZ3MgPSAwO1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgYmxvY2tzaXplID0gaW5vZGUtXHUwMDNlaV9zYi1cdTAwM2VzX2Jsb2Nrc2l6ZTtcbiYjNDM7XG4mIzQzO1x0aW5vZGVfbG9jayhpbm9kZSk7XG4mIzQzO1x0cmV0ID0gZ2VuZXJpY193cml0ZV9jaGVja3MoaW9jYiwgZnJvbSk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2M9IDApXG4mIzQzO1x0XHRnb3RvIG91dF91bmxvY2s7XG4mIzQzO1xuJiM0MztcdHJldCA9IGtpb2NiX21vZGlmaWVkKGlvY2IpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRnb3RvIG91dF91bmxvY2s7XG4mIzQzO1xuJiM0MztcdGlmIChpb2NiLVx1MDAzZWtpX3BvcyAmIzQzOyBpb3ZfaXRlcl9jb3VudChmcm9tKSBcdTAwM2UgaV9zaXplX3JlYWQoaW5vZGUpIHx8XG4mIzQzO1x0XHQhSVNfQUxJR05FRChpb2NiLVx1MDAzZWtpX3BvcyB8IGlvdl9pdGVyX2FsaWdubWVudChmcm9tKSwgYmxvY2tzaXplKSlcbiYjNDM7XHRcdGZsYWdzIHw9IElPTUFQX0RJT19GT1JDRV9XQUlUO1xuJiM0MztcbiYjNDM7XHRjb25zdCBzdHJ1Y3QgaW9tYXBfb3BzICpvcHMgPSBtaW5peF9pb21hcF9vcHNfdmVyKGlub2RlKTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gaW9tYXBfZGlvX3J3KGlvY2IsIGZyb20sIG9wcyxcbiYjNDM7XHRcdFx1MDAyNm1pbml4X2Rpb193cml0ZV9vcHMsIGZsYWdzLCBOVUxMLCAwKTtcbiYjNDM7XHRpZiAocmV0ID09IC1FTk9UQkxLKVxuJiM0MztcdFx0cmV0ID0gMDsgLyogZmFsbGJhY2sgdG8gYnVmZmVyZWQgKi9cbiYjNDM7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2U9IDAgXHUwMDI2XHUwMDI2IGlvdl9pdGVyX2NvdW50KGZyb20pKSB7XG4mIzQzO1x0XHRsb2ZmX3QgcG9zO1xuJiM0MztcdFx0bG9mZl90IGVuZGJ5dGU7XG4mIzQzO1x0XHRzc2l6ZV90IHN0YXR1cztcbiYjNDM7XG4mIzQzO1x0XHRpb2NiLVx1MDAzZWtpX2ZsYWdzIFx1MDAyNj0gfklPQ0JfRElSRUNUO1xuJiM0MztcdFx0cG9zID0gaW9jYi1cdTAwM2VraV9wb3M7XG4mIzQzO1x0XHRzdGF0dXMgPSBpb21hcF9maWxlX2J1ZmZlcmVkX3dyaXRlKGlvY2IsIGZyb20sIG9wcyxcbiYjNDM7XHRcdFx0TlVMTCwgTlVMTCk7XG4mIzQzO1x0XHRpZiAodW5saWtlbHkoc3RhdHVzIFx1MDAzYyAwKSkge1xuJiM0MztcdFx0XHRyZXQgPSBzdGF0dXM7XG4mIzQzO1x0XHRcdGdvdG8gb3V0X3VubG9jaztcbiYjNDM7XHRcdH1cbiYjNDM7XG4mIzQzO1x0XHRyZXQgJiM0Mzs9IHN0YXR1cztcbiYjNDM7XHRcdGVuZGJ5dGUgPSBwb3MgJiM0Mzsgc3RhdHVzIC0gMTtcbiYjNDM7XHRcdHN0YXR1cyA9IGZpbGVtYXBfd3JpdGVfYW5kX3dhaXRfcmFuZ2UoaW5vZGUtXHUwMDNlaV9tYXBwaW5nLCBwb3MsIGVuZGJ5dGUpO1xuJiM0MztcdFx0aWYgKCFzdGF0dXMpIHtcbiYjNDM7XHRcdFx0aW52YWxpZGF0ZV9tYXBwaW5nX3BhZ2VzKGlub2RlLVx1MDAzZWlfbWFwcGluZyxcbiYjNDM7XHRcdFx0XHRwb3MgXHUwMDNlXHUwMDNlIFBBR0VfU0hJRlQsXG4mIzQzO1x0XHRcdFx0ZW5kYnl0ZSBcdTAwM2VcdTAwM2UgUEFHRV9TSElGVCk7XG4mIzQzO1x0XHRcdGlmIChyZXQgXHUwMDNlIDApXG4mIzQzO1x0XHRcdFx0cmV0ID0gZ2VuZXJpY193cml0ZV9zeW5jKGlvY2IsIHJldCk7XG4mIzQzO1x0XHR9IGVsc2Uge1xuJiM0MztcdFx0XHRyZXQgPSBzdGF0dXM7XG4mIzQzO1x0XHR9XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7b3V0X3VubG9jazpcbiYjNDM7XHRpbm9kZV91bmxvY2soaW5vZGUpO1xuJiM0MztcdHJldHVybiByZXQ7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBzc2l6ZV90IG1pbml4X2ZpbGVfcmVhZF9pdGVyKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICp0bylcbiYjNDM7e1xuJiM0MztcdGlmIChpb2NiLVx1MDAzZWtpX2ZsYWdzIFx1MDAyNiBJT0NCX0RJUkVDVClcbiYjNDM7XHRcdHJldHVybiBtaW5peF9kaW9fcmVhZF9pdGVyKGlvY2IsIHRvKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGdlbmVyaWNfZmlsZV9yZWFkX2l0ZXIoaW9jYiwgdG8pO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgc3NpemVfdCBtaW5peF9maWxlX3dyaXRlX2l0ZXIoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKmZyb20pXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgaW5vZGUgKmlub2RlID0gaW9jYi1cdTAwM2VraV9maWxwLVx1MDAzZWZfbWFwcGluZy1cdTAwM2Vob3N0O1xuJiM0MztcdHNzaXplX3QgcmV0O1xuJiM0MztcbiYjNDM7XHQvKiBtaW5peF9kaW9fd3JpdGVfaXRlciBhbHNvIGxvY2tzIHRoZSBpbm9kZSBhbmQgYXBwZWFycyB0byBkbyB0aGUgc2FtZVxuJiM0MztcdCAqIGdlbmVyYWwgc29ydHMgb2YgY2hlY2tzIGFzIHRoaXMsIHNvIGp1c3QgcmV0dXJuIGRpcmVjdGx5IGZyb20gdGhlcmUuXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKGlvY2ItXHUwMDNla2lfZmxhZ3MgXHUwMDI2IElPQ0JfRElSRUNUKVxuJiM0MztcdFx0cmV0dXJuIG1pbml4X2Rpb193cml0ZV9pdGVyKGlvY2IsIGZyb20pO1xuJiM0MztcbiYjNDM7XHRpbm9kZV9sb2NrKGlub2RlKTtcbiYjNDM7XHRyZXQgPSBnZW5lcmljX3dyaXRlX2NoZWNrcyhpb2NiLCBmcm9tKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYz0gMClcbiYjNDM7XHRcdGdvdG8gdW5sb2NrO1xuJiM0MztcbiYjNDM7XHRyZXQgPSBmaWxlX21vZGlmaWVkKGlvY2ItXHUwMDNla2lfZmlscCk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdGdvdG8gdW5sb2NrO1xuJiM0MztcbiYjNDM7XHRjb25zdCBzdHJ1Y3QgaW9tYXBfb3BzICpvcHMgPSBtaW5peF9pb21hcF9vcHNfdmVyKGlub2RlKTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gaW9tYXBfZmlsZV9idWZmZXJlZF93cml0ZShpb2NiLCBmcm9tLCBvcHMsXG4mIzQzO1x0XHRcdE5VTEwsIE5VTEwpO1xuJiM0MztcbiYjNDM7XHRpZiAocmV0IFx1MDAzZSAwKVxuJiM0MztcdFx0cmV0ID0gZ2VuZXJpY193cml0ZV9zeW5jKGlvY2IsIHJldCk7XG4mIzQzO1xuJiM0Mzt1bmxvY2s6XG4mIzQzO1x0aW5vZGVfdW5sb2NrKGlub2RlKTtcbiYjNDM7XHRyZXR1cm4gcmV0O1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IG1pbml4X2ZpbGVfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlscClcbiYjNDM7e1xuJiM0MztcdGZpbHAtXHUwMDNlZl9tb2RlIHw9IEZNT0RFX0NBTl9PRElSRUNUO1xuJiM0MztcdHJldHVybiBnZW5lcmljX2ZpbGVfb3Blbihpbm9kZSwgZmlscCk7XG4mIzQzO31cbiYjNDM7XG4gLypcbi0gKiBXZSBoYXZlIG1vc3RseSBOVUxMcyBoZXJlOiB0aGUgY3VycmVudCBkZWZhdWx0cyBhcmUgT0sgZm9yXG4tICogdGhlIG1pbml4IGZpbGVzeXN0ZW0uXG4mIzQzOyAqIFdlIHN0aWxsIGhhdmUgc29tZSBOVUxMcyBoZXJlLCBidXQgbm90IGFzIG1hbnkgb2YgdGhlIGN1cnJlbnQgZGVmYXVsdHMgYXJlXG4mIzQzOyAqIHN0aWxsIE9LIGZvciB0aGUgbWluaXggZmlsZXN5c3RlbS5cbiAgKi9cbiYjNDM7XG4gY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBtaW5peF9maWxlX29wZXJhdGlvbnMgPSB7XG4gXHQubGxzZWVrXHRcdD0gZ2VuZXJpY19maWxlX2xsc2Vlayxcbi1cdC5yZWFkX2l0ZXJcdD0gZ2VuZXJpY19maWxlX3JlYWRfaXRlcixcbi1cdC53cml0ZV9pdGVyXHQ9IGdlbmVyaWNfZmlsZV93cml0ZV9pdGVyLFxuJiM0MztcdC5yZWFkX2l0ZXJcdD0gbWluaXhfZmlsZV9yZWFkX2l0ZXIsXG4mIzQzO1x0LndyaXRlX2l0ZXJcdD0gbWluaXhfZmlsZV93cml0ZV9pdGVyLFxuIFx0Lm1tYXBfcHJlcGFyZVx0PSBnZW5lcmljX2ZpbGVfbW1hcF9wcmVwYXJlLFxuJiM0MztcdC5vcGVuXHRcdD0gbWluaXhfZmlsZV9vcGVuLFxuIFx0LmZzeW5jXHRcdD0gbWluaXhfZnN5bmMsXG4gXHQuc3BsaWNlX3JlYWRcdD0gZmlsZW1hcF9zcGxpY2VfcmVhZCxcbiYjNDM7XHQuc3BsaWNlX3dyaXRlXHQ9IGl0ZXJfZmlsZV9zcGxpY2Vfd3JpdGUsXG4gfTtcbiBcbi1zdGF0aWMgaW50IG1pbml4X3NldGF0dHIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXG4tXHRcdFx0IHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGlhdHRyICphdHRyKVxuJiM0MztpbnQgbWluaXhfc2V0YXR0cihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxuJiM0MztcdHN0cnVjdCBpYXR0ciAqYXR0cilcbiB7XG4gXHRzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZF9pbm9kZShkZW50cnkpO1xuIFx0aW50IGVycm9yO1xuZGlmZiAtLWdpdCBhL2ZzL21pbml4L2lub2RlLmMgYi9mcy9taW5peC9pbm9kZS5jXG5pbmRleCBjMzBjYzU5MDY5OGQ2Zi4uYjExM2M0NDc2NGZmOTUgMTAwNjQ0XG4tLS0gYS9mcy9taW5peC9pbm9kZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9taW5peC9pbm9kZS5jXG5AQCAtNDM2LDcgJiM0Mzs0MzYsMzIgQEAgc3RhdGljIGludCBtaW5peF9zdGF0ZnMoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3Qga3N0YXRmcyAqYnVmKVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuLXN0YXRpYyBpbnQgbWluaXhfZ2V0X2Jsb2NrKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHNlY3Rvcl90IGJsb2NrLFxuJiM0MztzdGF0aWMgc3NpemVfdCBtaW5peF93cml0ZWJhY2tfcmFuZ2Uoc3RydWN0IGlvbWFwX3dyaXRlcGFnZV9jdHggKndwYyxcbiYjNDM7XHRzdHJ1Y3QgZm9saW8gKmZvbGlvLCB1NjQgcG9zLCB1bnNpZ25lZCBpbnQgbGVuLCB1NjQgZW5kX3BvcylcbiYjNDM7e1xuJiM0MztcdGludCBlcnJvcjtcbiYjNDM7XG4mIzQzO1x0aWYgKHBvcyBcdTAwM2Mgd3BjLVx1MDAzZWlvbWFwLm9mZnNldCB8fFxuJiM0MztcdFx0XHRwb3MgXHUwMDNlPSB3cGMtXHUwMDNlaW9tYXAub2Zmc2V0ICYjNDM7IHdwYy1cdTAwM2Vpb21hcC5sZW5ndGgpIHtcbiYjNDM7XHRcdGlmIChJTk9ERV9WRVJTSU9OKHdwYy1cdTAwM2Vpbm9kZSkgPT0gTUlOSVhfVjEpXG4mIzQzO1x0XHRcdGVycm9yID0gVjFfbWluaXhfaW9tYXBfYmVnaW4od3BjLVx1MDAzZWlub2RlLCBwb3MsIGxlbiwgSU9NQVBfV1JJVEUsXG4mIzQzO1x0XHRcdFx0XHUwMDI2d3BjLVx1MDAzZWlvbWFwLCBOVUxMKTtcbiYjNDM7XHRcdGVsc2VcbiYjNDM7XHRcdFx0ZXJyb3IgPSBWMl9taW5peF9pb21hcF9iZWdpbih3cGMtXHUwMDNlaW5vZGUsIHBvcywgbGVuLCBJT01BUF9XUklURSxcbiYjNDM7XHRcdFx0XHRcdTAwMjZ3cGMtXHUwMDNlaW9tYXAsIE5VTEwpO1xuJiM0MztcdFx0aWYgKGVycm9yKVxuJiM0MztcdFx0XHRyZXR1cm4gZXJyb3I7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gaW9tYXBfYWRkX3RvX2lvZW5kKHdwYywgZm9saW8sIHBvcywgZW5kX3BvcywgbGVuKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBpb21hcF93cml0ZWJhY2tfb3BzIG1pbml4X3dyaXRlYmFja19vcHMgPSB7XG4mIzQzO1x0LndyaXRlYmFja19yYW5nZSA9IG1pbml4X3dyaXRlYmFja19yYW5nZSxcbiYjNDM7XHQud3JpdGViYWNrX3N1Ym1pdCA9IGlvbWFwX2lvZW5kX3dyaXRlYmFja19zdWJtaXQsXG4mIzQzO307XG4mIzQzO1xuJiM0MztpbnQgbWluaXhfZ2V0X2Jsb2NrKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHNlY3Rvcl90IGJsb2NrLFxuIFx0XHQgICAgc3RydWN0IGJ1ZmZlcl9oZWFkICpiaF9yZXN1bHQsIGludCBjcmVhdGUpXG4ge1xuIFx0aWYgKElOT0RFX1ZFUlNJT04oaW5vZGUpID09IE1JTklYX1YxKVxuQEAgLTQ0NSwxNyAmIzQzOzQ3MCw0NSBAQCBzdGF0aWMgaW50IG1pbml4X2dldF9ibG9jayhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzZWN0b3JfdCBibG9jayxcbiBcdFx0cmV0dXJuIFYyX21pbml4X2dldF9ibG9jayhpbm9kZSwgYmxvY2ssIGJoX3Jlc3VsdCwgY3JlYXRlKTtcbiB9XG4gXG4tc3RhdGljIGludCBtaW5peF93cml0ZXBhZ2VzKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxuJiM0MzsvKiBUaGUgb2xkIG1pbml4X3dyaXRlcGFnZXMsIHByZXNlcnZlZCBmb3IgZGlyZWN0b3J5IG9wZXJhdGlvbnMuICovXG4mIzQzO3N0YXRpYyBpbnQgbWluaXhfYmxvY2tfd3JpdGVwYWdlcyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcbiBcdFx0c3RydWN0IHdyaXRlYmFja19jb250cm9sICp3YmMpXG4ge1xuIFx0cmV0dXJuIG1wYWdlX3dyaXRlcGFnZXMobWFwcGluZywgd2JjLCBtaW5peF9nZXRfYmxvY2spO1xuIH1cbiBcbiYjNDM7c3RhdGljIGludCBtaW5peF93cml0ZXBhZ2VzKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxuJiM0MztcdFx0c3RydWN0IHdyaXRlYmFja19jb250cm9sICp3YmMpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgaW9tYXBfd3JpdGVwYWdlX2N0eCB3cGMgPSB7XG4mIzQzO1x0XHQuaW5vZGUgPSBtYXBwaW5nLVx1MDAzZWhvc3QsXG4mIzQzO1x0XHQud2JjID0gd2JjLFxuJiM0MztcdFx0Lm9wcyA9IFx1MDAyNm1pbml4X3dyaXRlYmFja19vcHMsXG4mIzQzO1x0fTtcbiYjNDM7XHRyZXR1cm4gaW9tYXBfd3JpdGVwYWdlcyhcdTAwMjZ3cGMpO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyBpbnQgbWluaXhfcmVhZF9mb2xpbyhzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IGZvbGlvICpmb2xpbylcbiYjNDM7e1xuJiM0MztcdGNvbnN0IHN0cnVjdCBpb21hcF9vcHMgKm9wcyA9IG1pbml4X2lvbWFwX29wc192ZXIoZm9saW8tXHUwMDNlbWFwcGluZy1cdTAwM2Vob3N0KTtcbiYjNDM7XG4mIzQzO1x0aW9tYXBfYmlvX3JlYWRfZm9saW8oZm9saW8sIG9wcyk7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qIFRoZSBvbGQgbWluaXhfcmVhZF9mb2xpbywgcHJlc2VydmVkIGZvciBkaXJlY3Rvcnkgb3BlcmF0aW9ucy4gKi9cbiYjNDM7c3RhdGljIGludCBtaW5peF9ibG9ja19yZWFkX2ZvbGlvKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIHtcbiBcdHJldHVybiBibG9ja19yZWFkX2Z1bGxfZm9saW8oZm9saW8sIG1pbml4X2dldF9ibG9jayk7XG4gfVxuIFxuJiM0MztzdGF0aWMgdm9pZCBtaW5peF9yZWFkYWhlYWQoc3RydWN0IHJlYWRhaGVhZF9jb250cm9sICpyYWMpXG4mIzQzO3tcbiYjNDM7XHRjb25zdCBzdHJ1Y3QgaW9tYXBfb3BzICpvcHMgPSBtaW5peF9pb21hcF9vcHNfdmVyKHJhYy1cdTAwM2VtYXBwaW5nLVx1MDAzZWhvc3QpO1xuJiM0MztcbiYjNDM7XHRpb21hcF9iaW9fcmVhZGFoZWFkKHJhYywgb3BzKTtcbiYjNDM7fVxuJiM0MztcbiBpbnQgbWluaXhfcHJlcGFyZV9jaHVuayhzdHJ1Y3QgZm9saW8gKmZvbGlvLCBsb2ZmX3QgcG9zLCB1bnNpZ25lZCBsZW4pXG4ge1xuIFx0cmV0dXJuIF9fYmxvY2tfd3JpdGVfYmVnaW4oZm9saW8sIHBvcywgbGVuLCBtaW5peF9nZXRfYmxvY2spO1xuQEAgLTQ4NywyNCAmIzQzOzU0MCw0MiBAQCBzdGF0aWMgaW50IG1pbml4X3dyaXRlX2JlZ2luKGNvbnN0IHN0cnVjdCBraW9jYiAqaW9jYixcbiBcbiBzdGF0aWMgc2VjdG9yX3QgbWluaXhfYm1hcChzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgc2VjdG9yX3QgYmxvY2spXG4ge1xuLVx0cmV0dXJuIGdlbmVyaWNfYmxvY2tfYm1hcChtYXBwaW5nLGJsb2NrLG1pbml4X2dldF9ibG9jayk7XG4mIzQzO1x0Y29uc3Qgc3RydWN0IGlvbWFwX29wcyAqb3BzID0gbWluaXhfaW9tYXBfb3BzX3ZlcihtYXBwaW5nLVx1MDAzZWhvc3QpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gaW9tYXBfYm1hcChtYXBwaW5nLCBibG9jaywgb3BzKTtcbiB9XG4gXG4tc3RhdGljIGNvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgbWluaXhfYW9wcyA9IHtcbi1cdC5kaXJ0eV9mb2xpb1x0PSBibG9ja19kaXJ0eV9mb2xpbyxcbi1cdC5pbnZhbGlkYXRlX2ZvbGlvID0gYmxvY2tfaW52YWxpZGF0ZV9mb2xpbyxcbiYjNDM7Y29uc3Qgc3RydWN0IGFkZHJlc3Nfc3BhY2Vfb3BlcmF0aW9ucyBtaW5peF9hb3BzID0ge1xuJiM0MztcdC5kaXJ0eV9mb2xpb1x0PSBpb21hcF9kaXJ0eV9mb2xpbyxcbiYjNDM7XHQuaW52YWxpZGF0ZV9mb2xpbyA9IGlvbWFwX2ludmFsaWRhdGVfZm9saW8sXG4gXHQucmVhZF9mb2xpbyA9IG1pbml4X3JlYWRfZm9saW8sXG4mIzQzO1x0LnJlYWRhaGVhZCA9IG1pbml4X3JlYWRhaGVhZCxcbiBcdC53cml0ZXBhZ2VzID0gbWluaXhfd3JpdGVwYWdlcyxcbiYjNDM7XHQubWlncmF0ZV9mb2xpbyA9IGZpbGVtYXBfbWlncmF0ZV9mb2xpbyxcbiYjNDM7XHQuYm1hcCA9IG1pbml4X2JtYXAsXG4mIzQzO1x0LmlzX3BhcnRpYWxseV91cHRvZGF0ZSA9IGlvbWFwX2lzX3BhcnRpYWxseV91cHRvZGF0ZSxcbiYjNDM7XHQucmVsZWFzZV9mb2xpbyA9IGlvbWFwX3JlbGVhc2VfZm9saW8sXG4mIzQzO1x0LmVycm9yX3JlbW92ZV9mb2xpbyA9IGdlbmVyaWNfZXJyb3JfcmVtb3ZlX2ZvbGlvLFxuJiM0Mzt9O1xuJiM0MztcbiYjNDM7LyogQSBzcGVjaWFsIGFvcHMgZm9yIGRpcmVjdG9yaWVzIHRoYXQga2VlcHMgdXNpbmcgdGhlIGJ1ZmZlciBoZWFkIGNodW5rcywgYXRcbiYjNDM7ICogbGVhc3QgZm9yIHRoZSB0aW1lIGJlaW5nLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgbWluaXhfZGlyX2FvcHMgPSB7XG4mIzQzO1x0LmRpcnR5X2ZvbGlvID0gYmxvY2tfZGlydHlfZm9saW8sXG4mIzQzO1x0LmludmFsaWRhdGVfZm9saW8gPSBibG9ja19pbnZhbGlkYXRlX2ZvbGlvLFxuJiM0MztcdC5yZWFkX2ZvbGlvID0gbWluaXhfYmxvY2tfcmVhZF9mb2xpbyxcbiBcdC53cml0ZV9iZWdpbiA9IG1pbml4X3dyaXRlX2JlZ2luLFxuIFx0LndyaXRlX2VuZCA9IGdlbmVyaWNfd3JpdGVfZW5kLFxuIFx0Lm1pZ3JhdGVfZm9saW8gPSBidWZmZXJfbWlncmF0ZV9mb2xpbyxcbiBcdC5ibWFwID0gbWluaXhfYm1hcCxcbi1cdC5kaXJlY3RfSU8gPSBub29wX2RpcmVjdF9JT1xuJiM0MztcdC53cml0ZXBhZ2VzID0gbWluaXhfYmxvY2tfd3JpdGVwYWdlcyxcbiB9O1xuIFxuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBtaW5peF9zeW1saW5rX2lub2RlX29wZXJhdGlvbnMgPSB7XG4tXHQuZ2V0X2xpbmtcdD0gcGFnZV9nZXRfbGluayxcbiYjNDM7XHQuZ2V0X2xpbmtcdD0gbWluaXhfZ2V0X2xpbmssXG4gXHQuZ2V0YXR0clx0PSBtaW5peF9nZXRhdHRyLFxuJiM0MztcdC5zZXRhdHRyXHQ9IG1pbml4X3NldGF0dHIsXG4gfTtcbiBcbiB2b2lkIG1pbml4X3NldF9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBkZXZfdCByZGV2KVxuQEAgLTUxNiw3ICYjNDM7NTg3LDcgQEAgdm9pZCBtaW5peF9zZXRfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSwgZGV2X3QgcmRldilcbiBcdH0gZWxzZSBpZiAoU19JU0RJUihpbm9kZS1cdTAwM2VpX21vZGUpKSB7XG4gXHRcdGlub2RlLVx1MDAzZWlfb3AgPSBcdTAwMjZtaW5peF9kaXJfaW5vZGVfb3BlcmF0aW9ucztcbiBcdFx0aW5vZGUtXHUwMDNlaV9mb3AgPSBcdTAwMjZtaW5peF9kaXJfb3BlcmF0aW9ucztcbi1cdFx0aW5vZGUtXHUwMDNlaV9tYXBwaW5nLVx1MDAzZWFfb3BzID0gXHUwMDI2bWluaXhfYW9wcztcbiYjNDM7XHRcdGlub2RlLVx1MDAzZWlfbWFwcGluZy1cdTAwM2VhX29wcyA9IFx1MDAyNm1pbml4X2Rpcl9hb3BzO1xuIFx0fSBlbHNlIGlmIChTX0lTTE5LKGlub2RlLVx1MDAzZWlfbW9kZSkpIHtcbiBcdFx0aW5vZGUtXHUwMDNlaV9vcCA9IFx1MDAyNm1pbml4X3N5bWxpbmtfaW5vZGVfb3BlcmF0aW9ucztcbiBcdFx0aW5vZGVfbm9oaWdobWVtKGlub2RlKTtcbkBAIC03NjgsNCAmIzQzOzgzOSwzIEBAIG1vZHVsZV9pbml0KGluaXRfbWluaXhfZnMpXG4gbW9kdWxlX2V4aXQoZXhpdF9taW5peF9mcylcbiBNT0RVTEVfREVTQ1JJUFRJT04oXCYjMzQ7TWluaXggZmlsZSBzeXN0ZW1cJiMzNDspO1xuIE1PRFVMRV9MSUNFTlNFKFwmIzM0O0dQTFwmIzM0Oyk7XG4tXG5kaWZmIC0tZ2l0IGEvZnMvbWluaXgvaW9tYXAuYyBiL2ZzL21pbml4L2lvbWFwLmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uN2JiMDQzOWUzNjY5OTZcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL21pbml4L2lvbWFwLmNcbkBAIC0wLDAgJiM0MzsxLDExNCBAQFxuJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4mIzQzOy8qXG4mIzQzOyAqIGlvbWFwIGZ1bmN0aW9ucyBmb3IgbWluaXguIEF0IGxlYXN0IHRoZSBmaXJzdCBwYXNzIG9mIHRoaXMgZmlsZSB3YXMgdGFrZW5cbiYjNDM7ICogZnJvbSB0aGUgeGlhZnMgaW9tYXAuYywgd2hpY2ggaXMgZml0dGluZyBzaW5jZSB0aGUgeGlhZnMgbW9kdWxlIGluIHR1cm5cbiYjNDM7ICogYm9ycm93ZWQgaGVhdmlseSBmcm9tIHRoZSBtb2Rlcm5pemVkIG1pbml4IGZzIGtlcm5lbCBtb2R1bGUuXG4mIzQzOyAqL1xuJiM0MztcbiYjNDM7LypcbiYjNDM7ICogbWluaXhfaW9tYXBfYmVnaW4gLSBtYXAgYSBmaWxlIHJhbmdlIHRvIGRpc2sgYmxvY2tzLiBJdCBhY3RzIGFzIGEgcmVwbGFjZW1lbnRcbiYjNDM7ICogZm9yIGdldF9ibG9jayBpbiBpdHJlZV9jb21tb24uYywgYXQgbGVhc3QgaW4gdGhlIGltcG9ydGFudCB3YXlzLCBhbmQgaXNcbiYjNDM7ICogYWRhcHRlZCBmcm9tIGl0LCBidXQgaXQgdXNlcyBpb21hcCBpbnN0ZWFkIG9mIGJ1ZmZlcl9oZWFkLiBUaGlzIGlzIHRha2VuXG4mIzQzOyAqIGRpcmVjdGx5IGZyb20gdGhlIG91dC1vZi10cmVlIHhpYWZzIGlvbWFwIGNoYW5nZXMsIGFuZCB0aGUgZXhmYXQgaW9tYXBcbiYjNDM7ICogY2hhbmdlcyB3ZXJlIGFuIGluc3BpcmF0aW9uIGZvciB0aGF0LlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGludCBtaW5peF9pb21hcF9iZWdpbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb2ZmX3Qgb2Zmc2V0LCBsb2ZmX3QgbGVuZ3RoLFxuJiM0MztcdHVuc2lnbmVkIGludCBmbGFncywgc3RydWN0IGlvbWFwICppb21hcCwgc3RydWN0IGlvbWFwICpzcmNtYXApXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiID0gaW5vZGUtXHUwMDNlaV9zYjtcbiYjNDM7XHR1bnNpZ25lZCBpbnQgYmxrYml0cyA9IHNiLVx1MDAzZXNfYmxvY2tzaXplX2JpdHM7XG4mIzQzO1x0c2VjdG9yX3QgaWJsb2NrID0gb2Zmc2V0IFx1MDAzZVx1MDAzZSBibGtiaXRzO1xuJiM0MztcdGludCBjcmVhdGUgPSBmbGFncyBcdTAwMjYgSU9NQVBfV1JJVEU7XG4mIzQzO1xuJiM0MztcdC8qIE1vc3RseSB0YWtlbiBmcm9tIG1vZGVybi14aWFmcyBpdHJlZS5jIGdldF9ibG9jayB3aXRoIGVsZW1lbnRzIGZyb21cbiYjNDM7XHQgKiBzaW1pbGFyIGV4ZmF0IG9wZXJhdGlvbnMuXG4mIzQzO1x0ICovXG4mIzQzO1x0aW50IG9mZnNldHNbREVQVEhdO1xuJiM0MztcdEluZGlyZWN0IGNoYWluW0RFUFRIXTtcbiYjNDM7XHRJbmRpcmVjdCAqcGFydGlhbDtcbiYjNDM7XHRpbnQgZGVwdGggPSBibG9ja190b19wYXRoKGlub2RlLCBpYmxvY2ssIG9mZnNldHMpO1xuJiM0MztcdGludCBsZWZ0O1xuJiM0MztcdGludCBlcnIgPSAtRUlPO1xuJiM0MztcbiYjNDM7XHRzZWN0b3JfdCBwaHlzO1xuJiM0MztcbiYjNDM7XHQvKiBibG9jayBpcyBiZXlvbmQgbWF4IGZpbGUgc2l6ZSAqL1xuJiM0MztcdGlmIChkZXB0aCA9PSAwKVxuJiM0MztcdFx0Z290byBvdXQ7XG4mIzQzO1xuJiM0MztcdGlvbWFwLVx1MDAzZWJkZXYgPSBpbm9kZS1cdTAwM2VpX3NiLVx1MDAzZXNfYmRldjtcbiYjNDM7XG4mIzQzO3JlcmVhZDpcbiYjNDM7XHRwYXJ0aWFsID0gZ2V0X2JyYW5jaChpbm9kZSwgZGVwdGgsIG9mZnNldHMsIGNoYWluLCBcdTAwMjZlcnIpO1xuJiM0MztcbiYjNDM7XHQvKiBTaW1wbGVzdCBjYXNlIC0gYmxvY2sgZm91bmQsIG5vIGFsbG9jYXRpb24gbmVlZGVkICovXG4mIzQzO1x0aWYgKCFwYXJ0aWFsKSB7XG4mIzQzO1x0XHQvKiBCaXQgb2YgYSB3ZWlyZCBvcmRlciwgYnV0IGl0JiMzOTtsbCBtYWtlIHNlbnNlIHdoZW4geW91IGdldCB0b1xuJiM0MztcdFx0ICogdGhlIGJvdHRvbS5cbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0aW9tYXAtXHUwMDNlZmxhZ3MgPSBJT01BUF9GX01FUkdFRDtcbiYjNDM7Z290X2l0OlxuJiM0MztcdFx0cGh5cyA9IGJsb2NrX3RvX2NwdShjaGFpbltkZXB0aCAtIDFdLmtleSk7XG4mIzQzO1x0XHRwYXJ0aWFsID0gY2hhaW4mIzQzO2RlcHRoLTE7XG4mIzQzO1x0XHQvKiBTZXQgdXAgdGhlIGlvbWFwIHN0cnVjdCBiZWZvcmUgY2xlYW5pbmcgdXAgKi9cbiYjNDM7XHRcdGlvbWFwLVx1MDAzZXR5cGUgPSBJT01BUF9NQVBQRUQ7XG4mIzQzO1x0XHRpb21hcC1cdTAwM2VhZGRyID0gKHU2NClwaHlzIFx1MDAzY1x1MDAzYyBibGtiaXRzO1xuJiM0MztcdFx0aW9tYXAtXHUwMDNlbGVuZ3RoID0gMSBcdTAwM2NcdTAwM2MgYmxrYml0cztcbiYjNDM7XHRcdGlvbWFwLVx1MDAzZW9mZnNldCA9ICh1NjQpaWJsb2NrIFx1MDAzY1x1MDAzYyBibGtiaXRzO1xuJiM0MztcdFx0Z290byBjbGVhbnVwO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0LyogTmV4dCBzaW1wbGUgY2FzZSAtIHBsYWluIGxvb2t1cCBvciBmYWlsZWQgcmVhZCBvZiBpbmRpcmVjdCBibG9jayAqL1xuJiM0MztcdGlmICghY3JlYXRlIHx8IGVyciA9PSAtRUlPKSB7XG4mIzQzO1x0XHRpb21hcC1cdTAwM2V0eXBlID0gSU9NQVBfSE9MRTtcbiYjNDM7XHRcdGlvbWFwLVx1MDAzZWFkZHIgPSBJT01BUF9OVUxMX0FERFI7XG4mIzQzO1x0XHRpb21hcC1cdTAwM2VsZW5ndGggPSAxIFx1MDAzY1x1MDAzYyBibGtiaXRzO1xuJiM0MztcdFx0aW9tYXAtXHUwMDNlb2Zmc2V0ID0gKHU2NClpYmxvY2sgXHUwMDNjXHUwMDNjIGJsa2JpdHM7XG4mIzQzO1x0XHRpb21hcC1cdTAwM2VmbGFncyA9IDA7XG4mIzQzO2NsZWFudXA6XG4mIzQzO1x0XHR3aGlsZSAocGFydGlhbCBcdTAwM2UgY2hhaW4pIHtcbiYjNDM7XHRcdFx0YnJlbHNlKHBhcnRpYWwtXHUwMDNlYmgpO1xuJiM0MztcdFx0XHRwYXJ0aWFsLS07XG4mIzQzO1x0XHR9XG4mIzQzO291dDpcbiYjNDM7XHRcdHJldHVybiBlcnI7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIEluZGlyZWN0IGJsb2NrIG1pZ2h0IGJlIHJlbW92ZWQgYnkgdHJ1bmNhdGUgd2hpbGUgd2Ugd2VyZVxuJiM0MztcdCAqIHJlYWRpbmcgaXQuIEhhbmRsaW5nIG9mIHRoYXQgY2FzZSAoZm9yZ2V0IHdoYXQgd2UmIzM5O3ZlIGdvdCBhbmRcbiYjNDM7XHQgKiByZXJlYWQpIGlzIHRha2VuIG91dCBvZiB0aGUgbWFpbiBwYXRoLlxuJiM0MztcdCAqL1xuJiM0MztcdGlmIChlcnIgPT0gLUVBR0FJTilcbiYjNDM7XHRcdGdvdG8gY2hhbmdlZDtcbiYjNDM7XG4mIzQzO1x0bGVmdCA9IChjaGFpbiAmIzQzOyBkZXB0aCkgLSBwYXJ0aWFsO1xuJiM0MztcdGVyciA9IGFsbG9jX2JyYW5jaChpbm9kZSwgbGVmdCwgb2Zmc2V0cyAmIzQzOyAocGFydGlhbCAtIGNoYWluKSwgcGFydGlhbCk7XG4mIzQzO1x0aWYgKGVycilcbiYjNDM7XHRcdGdvdG8gY2xlYW51cDtcbiYjNDM7XG4mIzQzO1x0aWYgKHNwbGljZV9icmFuY2goaW5vZGUsIGNoYWluLCBwYXJ0aWFsLCBsZWZ0KSBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gY2hhbmdlZDtcbiYjNDM7XG4mIzQzO1x0LyogU3VjY2Vzc2Z1bCBhbGxvY2F0aW9uLCBtYXBwaW5nIGl0LiAqL1xuJiM0MztcdGlvbWFwLVx1MDAzZWZsYWdzID0gSU9NQVBfRl9ORVc7XG4mIzQzO1x0Z290byBnb3RfaXQ7XG4mIzQzO1xuJiM0MztjaGFuZ2VkOlxuJiM0MztcdHdoaWxlIChwYXJ0aWFsIFx1MDAzZSBjaGFpbikge1xuJiM0MztcdFx0YnJlbHNlKHBhcnRpYWwtXHUwMDNlYmgpO1xuJiM0MztcdFx0cGFydGlhbC0tO1xuJiM0MztcdH1cbiYjNDM7XHRnb3RvIHJlcmVhZDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LypcbiYjNDM7ICogbWluaXhfaW9tYXBfZW5kIGVuZHMgdXAgYmVpbmcgYSBub3A7IHNpbmNlIG1pbml4IGRvZXNuJiMzOTt0IGhhdmUgYW55IGV4dGVudHMgb3JcbiYjNDM7ICogdHJhbnNhY3Rpb25zIHRvIHdvcnJ5IGFib3V0LCB0aGVyZSBpc24mIzM5O3QgYW55dGhpbmcgdG8gdXBkYXRlIGhlcmUuIFRoZSBvbi1kaXNrXG4mIzQzOyAqIGluZGlyZWN0IGJsb2NrcyBnZXQgZGlydGllZCBpbiBtaW5peF9pb21hcF9iZWdpbi5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBpbnQgbWluaXhfaW9tYXBfZW5kKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfdCBvZmZzZXQsIGxvZmZfdCBsZW5ndGgsXG4mIzQzO1x0c3NpemVfdCB3cml0dGVuLCB1bnNpZ25lZCBpbnQgZmxhZ3MsIHN0cnVjdCBpb21hcCAqaW9tYXApXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuZGlmZiAtLWdpdCBhL2ZzL21pbml4L2l0cmVlX2NvbW1vbi5jIGIvZnMvbWluaXgvaXRyZWVfY29tbW9uLmNcbmluZGV4IGMzY2QyYzc1YWY5Y2VlLi41YThiNzNhN2JlZGE3OCAxMDA2NDRcbi0tLSBhL2ZzL21pbml4L2l0cmVlX2NvbW1vbi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9taW5peC9pdHJlZV9jb21tb24uY1xuQEAgLTMxMSw3ICYjNDM7MzExLDE2IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCB0cnVuY2F0ZSAoc3RydWN0IGlub2RlICogaW5vZGUpXG4gXHRsb25nIGlibG9jaztcbiBcbiBcdGlibG9jayA9IChpbm9kZS1cdTAwM2VpX3NpemUgJiM0Mzsgc2ItXHUwMDNlc19ibG9ja3NpemUgLTEpIFx1MDAzZVx1MDAzZSBzYi1cdTAwM2VzX2Jsb2Nrc2l6ZV9iaXRzO1xuLVx0YmxvY2tfdHJ1bmNhdGVfcGFnZShpbm9kZS1cdTAwM2VpX21hcHBpbmcsIGlub2RlLVx1MDAzZWlfc2l6ZSwgZ2V0X2Jsb2NrKTtcbiYjNDM7XG4mIzQzO1x0LyogRGVwZW5kaW5nIG9uIHdoYXQgYWRkcmVzcyBzcGFjZSBvcGVyYXRpb25zIGFyZSBiZWluZyB1c2VkIGJ5IHRoZVxuJiM0MztcdCAqIGlub2RlIGJlaW5nIHRydW5jYXRlZCwgd2UgbmVlZCB0byBlaXRoZXIgY2FsbCBpb21hcF90cnVuY2F0ZV9wYWdlIG9yXG4mIzQzO1x0ICogYmxvY2tfdHJ1bmNhdGVfcGFnZS5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAoaW5vZGUtXHUwMDNlaV9tYXBwaW5nLVx1MDAzZWFfb3BzID09IFx1MDAyNm1pbml4X2FvcHMpXG4mIzQzO1x0XHRpb21hcF90cnVuY2F0ZV9wYWdlKGlub2RlLCBpbm9kZS1cdTAwM2VpX3NpemUsIE5VTEwsXG4mIzQzO1x0XHRcdG1pbml4X2lvbWFwX29wc192ZXIoaW5vZGUpLCBOVUxMLCBOVUxMKTtcbiYjNDM7XHRlbHNlXG4mIzQzO1x0XHRibG9ja190cnVuY2F0ZV9wYWdlKGlub2RlLVx1MDAzZWlfbWFwcGluZywgaW5vZGUtXHUwMDNlaV9zaXplLCBnZXRfYmxvY2spO1xuIFxuIFx0biA9IGJsb2NrX3RvX3BhdGgoaW5vZGUsIGlibG9jaywgb2Zmc2V0cyk7XG4gXHRpZiAoIW4pXG5kaWZmIC0tZ2l0IGEvZnMvbWluaXgvaXRyZWVfdjEuYyBiL2ZzL21pbml4L2l0cmVlX3YxLmNcbmluZGV4IDFmZWQ5MDYwNDJhYTg0Li41OGMyOWY0NDQzZDM3MiAxMDA2NDRcbi0tLSBhL2ZzL21pbml4L2l0cmVlX3YxLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL21pbml4L2l0cmVlX3YxLmNcbkBAIC00OSw2ICYjNDM7NDksMTggQEAgc3RhdGljIGludCBibG9ja190b19wYXRoKHN0cnVjdCBpbm9kZSAqIGlub2RlLCBsb25nIGJsb2NrLCBpbnQgb2Zmc2V0c1tERVBUSF0pXG4gfVxuIFxuICNpbmNsdWRlIFwmIzM0O2l0cmVlX2NvbW1vbi5jXCYjMzQ7XG4mIzQzOy8qIE5PVEEgQkVORTpcbiYjNDM7ICpcbiYjNDM7ICogVGhpcyBpcyBpY2t5IHRvIG1lLCBidXQgYXQgdGhlIHNhbWUgdGltZSBoYXZpbmcgaXQgYmUgYSBzdGFuZGFsb25lIEMgZmlsZVxuJiM0MzsgKiB0aGF0JiMzOTtzIGNvbXBpbGVkIHRvIG9iamVjdCBmb3JtIGFuZCBsaW5rZWQgc2VwYXJhdGVseSBsaWtlIGl0IGlzIGluIHhpYWZzIGlzXG4mIzQzOyAqIG11Y2ggbmFzdGllciBpbiBtaW5peCBiZWNhdXNlIG9mIHRoZSBkaWZmZXJlbnQgdmVyc2lvbnMgb2YgdGhlIG1pbml4IGZzIHRoYXRcbiYjNDM7ICogaGF2ZSBzb21lIHZlcnksIHZlcnkgZGlmZmVyZW50IGFzcGVjdHMsIGxpa2UgdGhlIHNpemUgb2YgYmxvY2tfdC4gSSBkb24mIzM5O3RcbiYjNDM7ICogbGlrZSBpdCwgYnV0IHNpbmNlIG1pbml4IGFscmVhZHkgaGFzIHRoaXMgcGF0dGVybiB3aGVyZSBhIGNvbW1vbiBpdHJlZSBmaWxlXG4mIzQzOyAqIGlzIGluY2x1ZGVkIGluIHRoZSBpdHJlZV92MSBhbmQgaXRyZWVfdjIoYW5kIHYzKSBmaWxlcywgSSYjMzk7bSBpbmNsdWRpbmcgaW9tYXAuY1xuJiM0MzsgKiBpbiB0aGVzZSBmaWxlcyBhcyB3ZWxsLiBJdCBkb2VzIGF0IGxlYXN0IGF2b2lkIGV4cG9ydGluZyBzb21lIGN1cnJlbnRseVxuJiM0MzsgKiBzdGF0aWMgZnVuY3Rpb25zIHRoYXQgYXJlbiYjMzk7dCBuZWVkZWQgYW55d2hlcmUgYnV0IGl0cmVlX2NvbW1vbi5jIGFuZCBpb21hcC5jLlxuJiM0MzsgKi9cbiYjNDM7I2luY2x1ZGUgXCYjMzQ7aW9tYXAuY1wmIzM0O1xuIFxuIGludCBWMV9taW5peF9nZXRfYmxvY2soc3RydWN0IGlub2RlICogaW5vZGUsIGxvbmcgYmxvY2ssXG4gXHRcdFx0c3RydWN0IGJ1ZmZlcl9oZWFkICpiaF9yZXN1bHQsIGludCBjcmVhdGUpXG5AQCAtNjEsNyAmIzQzOzczLDE4IEBAIHZvaWQgVjFfbWluaXhfdHJ1bmNhdGUoc3RydWN0IGlub2RlICogaW5vZGUpXG4gXHR0cnVuY2F0ZShpbm9kZSk7XG4gfVxuIFxuLXVuc2lnbmVkIFYxX21pbml4X2Jsb2Nrcyhsb2ZmX3Qgc2l6ZSwgc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcbiYjNDM7dW5zaWduZWQgaW50IFYxX21pbml4X2Jsb2Nrcyhsb2ZmX3Qgc2l6ZSwgc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcbiB7XG4gXHRyZXR1cm4gbmJsb2NrcyhzaXplLCBzYik7XG4gfVxuJiM0MztcbiYjNDM7aW50IFYxX21pbml4X2lvbWFwX2JlZ2luKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfdCBvZmZzZXQsIGxvZmZfdCBsZW5ndGgsXG4mIzQzO1x0dW5zaWduZWQgaW50IGZsYWdzLCBzdHJ1Y3QgaW9tYXAgKmlvbWFwLCBzdHJ1Y3QgaW9tYXAgKnNyY21hcClcbiYjNDM7e1xuJiM0MztcdHJldHVybiBtaW5peF9pb21hcF9iZWdpbihpbm9kZSwgb2Zmc2V0LCBsZW5ndGgsIGZsYWdzLCBpb21hcCwgc3JjbWFwKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7Y29uc3Qgc3RydWN0IGlvbWFwX29wcyBWMV9taW5peF9pb21hcF9vcHMgPSB7XG4mIzQzO1x0LmlvbWFwX2JlZ2luID0gVjFfbWluaXhfaW9tYXBfYmVnaW4sXG4mIzQzO1x0LmlvbWFwX2VuZCAgID0gbWluaXhfaW9tYXBfZW5kLFxuJiM0Mzt9O1xuZGlmZiAtLWdpdCBhL2ZzL21pbml4L2l0cmVlX3YyLmMgYi9mcy9taW5peC9pdHJlZV92Mi5jXG5pbmRleCA5ZDAwZjMxYTJkOWQxNS4uZmM3YTVhZThmYTFjYTMgMTAwNjQ0XG4tLS0gYS9mcy9taW5peC9pdHJlZV92Mi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9taW5peC9pdHJlZV92Mi5jXG5AQCAtNTcsNiAmIzQzOzU3LDEwIEBAIHN0YXRpYyBpbnQgYmxvY2tfdG9fcGF0aChzdHJ1Y3QgaW5vZGUgKiBpbm9kZSwgbG9uZyBibG9jaywgaW50IG9mZnNldHNbREVQVEhdKVxuIH1cbiBcbiAjaW5jbHVkZSBcJiMzNDtpdHJlZV9jb21tb24uY1wmIzM0O1xuJiM0MzsvKiBTZWUgdGhlIG5vdGUgaW4gaXRyZWVfdjEgaW4gYSBjb21tZW50IHRoYXQgc3RhcnRzIFwmIzM0O05PVEEgQkVORVwmIzM0OyBmb3IgYW5cbiYjNDM7ICogZXhwbGFuYXRpb24gZm9yIHdoeSBpb21hcC5jIGlzIGluY2x1ZGVkIGhlcmUuXG4mIzQzOyAqL1xuJiM0MzsjaW5jbHVkZSBcJiMzNDtpb21hcC5jXCYjMzQ7XG4gXG4gaW50IFYyX21pbml4X2dldF9ibG9jayhzdHJ1Y3QgaW5vZGUgKiBpbm9kZSwgbG9uZyBibG9jayxcbiBcdFx0XHRzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoX3Jlc3VsdCwgaW50IGNyZWF0ZSlcbkBAIC02OSw3ICYjNDM7NzMsMTggQEAgdm9pZCBWMl9taW5peF90cnVuY2F0ZShzdHJ1Y3QgaW5vZGUgKiBpbm9kZSlcbiBcdHRydW5jYXRlKGlub2RlKTtcbiB9XG4gXG4tdW5zaWduZWQgVjJfbWluaXhfYmxvY2tzKGxvZmZfdCBzaXplLCBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxuJiM0Mzt1bnNpZ25lZCBpbnQgVjJfbWluaXhfYmxvY2tzKGxvZmZfdCBzaXplLCBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxuIHtcbiBcdHJldHVybiBuYmxvY2tzKHNpemUsIHNiKTtcbiB9XG4mIzQzO1xuJiM0MztpbnQgVjJfbWluaXhfaW9tYXBfYmVnaW4oc3RydWN0IGlub2RlICppbm9kZSwgbG9mZl90IG9mZnNldCwgbG9mZl90IGxlbmd0aCxcbiYjNDM7XHR1bnNpZ25lZCBpbnQgZmxhZ3MsIHN0cnVjdCBpb21hcCAqaW9tYXAsIHN0cnVjdCBpb21hcCAqc3JjbWFwKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIG1pbml4X2lvbWFwX2JlZ2luKGlub2RlLCBvZmZzZXQsIGxlbmd0aCwgZmxhZ3MsIGlvbWFwLCBzcmNtYXApO1xuJiM0Mzt9XG4mIzQzO1xuJiM0Mztjb25zdCBzdHJ1Y3QgaW9tYXBfb3BzIFYyX21pbml4X2lvbWFwX29wcyA9IHtcbiYjNDM7XHQuaW9tYXBfYmVnaW4gPSBWMl9taW5peF9pb21hcF9iZWdpbixcbiYjNDM7XHQuaW9tYXBfZW5kICAgPSBtaW5peF9pb21hcF9lbmQsXG4mIzQzO307XG5kaWZmIC0tZ2l0IGEvZnMvbWluaXgvbWluaXguaCBiL2ZzL21pbml4L21pbml4LmhcbmluZGV4IGYyMDI1YzliNTgyNTJmLi5kMWE4OTBlOTZhYmUyYyAxMDA2NDRcbi0tLSBhL2ZzL21pbml4L21pbml4LmhcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL21pbml4L21pbml4LmhcbkBAIC01LDYgJiM0Mzs1LDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9mcy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcGFnZW1hcC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbWluaXhfZnMuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9pb21hcC5oXHUwMDNlXG4gXG4gI2RlZmluZSBJTk9ERV9WRVJTSU9OKGlub2RlKVx0bWluaXhfc2IoaW5vZGUtXHUwMDNlaV9zYiktXHUwMDNlc192ZXJzaW9uXG4gI2RlZmluZSBNSU5JWF9WMVx0XHQweDAwMDFcdFx0Lyogb3JpZ2luYWwgbWluaXggZnMgKi9cbkBAIC01Niw3ICYjNDM7NTcsOSBAQCBpbnQgbWluaXhfbmV3X2Jsb2NrKHN0cnVjdCBpbm9kZSAqaW5vZGUpO1xuIHZvaWQgbWluaXhfZnJlZV9ibG9jayhzdHJ1Y3QgaW5vZGUgKmlub2RlLCB1bnNpZ25lZCBsb25nIGJsb2NrKTtcbiB1bnNpZ25lZCBsb25nIG1pbml4X2NvdW50X2ZyZWVfYmxvY2tzKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpO1xuIGludCBtaW5peF9nZXRhdHRyKHN0cnVjdCBtbnRfaWRtYXAgKiwgY29uc3Qgc3RydWN0IHBhdGggKixcbi1cdFx0c3RydWN0IGtzdGF0ICosIHUzMiwgdW5zaWduZWQgaW50KTtcbiYjNDM7XHRcdHN0cnVjdCBrc3RhdCAqLCB1MzIsIHVuc2lnbmVkKTtcbiYjNDM7aW50IG1pbml4X3NldGF0dHIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcbiYjNDM7XHRzdHJ1Y3QgaWF0dHIgKmF0dHIpO1xuIGludCBtaW5peF9wcmVwYXJlX2NodW5rKHN0cnVjdCBmb2xpbyAqZm9saW8sIGxvZmZfdCBwb3MsIHVuc2lnbmVkIGxlbik7XG4gc3RydWN0IG1hcHBpbmdfbWV0YWRhdGFfYmhzICptaW5peF9nZXRfbWV0YWRhdGFfYmhzKHN0cnVjdCBpbm9kZSAqaW5vZGUpO1xuIGludCBtaW5peF9mc3luYyhzdHJ1Y3QgZmlsZSAqZmlsZSwgbG9mZl90IHN0YXJ0LCBsb2ZmX3QgZW5kLCBpbnQgZGF0YXN5bmMpO1xuQEAgLTY5LDYgJiM0Mzs3Miw4IEBAIGV4dGVybiBpbnQgVjFfbWluaXhfZ2V0X2Jsb2NrKHN0cnVjdCBpbm9kZSAqLCBsb25nLCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKiwgaW50KTtcbiBleHRlcm4gaW50IFYyX21pbml4X2dldF9ibG9jayhzdHJ1Y3QgaW5vZGUgKiwgbG9uZywgc3RydWN0IGJ1ZmZlcl9oZWFkICosIGludCk7XG4gZXh0ZXJuIHVuc2lnbmVkIFYxX21pbml4X2Jsb2Nrcyhsb2ZmX3QsIHN0cnVjdCBzdXBlcl9ibG9jayAqKTtcbiBleHRlcm4gdW5zaWduZWQgVjJfbWluaXhfYmxvY2tzKGxvZmZfdCwgc3RydWN0IHN1cGVyX2Jsb2NrICopO1xuJiM0MztleHRlcm4gaW50IG1pbml4X2dldF9ibG9jayhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzZWN0b3JfdCBibG9jayxcbiYjNDM7XHRcdCAgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoX3Jlc3VsdCwgaW50IGNyZWF0ZSk7XG4gXG4gc3RydWN0IG1pbml4X2Rpcl9lbnRyeSAqbWluaXhfZmluZF9lbnRyeShzdHJ1Y3QgZGVudHJ5ICosIHN0cnVjdCBmb2xpbyAqKik7XG4gaW50IG1pbml4X2FkZF9saW5rKHN0cnVjdCBkZW50cnkqLCBzdHJ1Y3QgaW5vZGUqKTtcbkBAIC03NywxMyAmIzQzOzgyLDI2IEBAIGludCBtaW5peF9tYWtlX2VtcHR5KHN0cnVjdCBpbm9kZSosIHN0cnVjdCBpbm9kZSopO1xuIGludCBtaW5peF9lbXB0eV9kaXIoc3RydWN0IGlub2RlKik7XG4gaW50IG1pbml4X3NldF9saW5rKHN0cnVjdCBtaW5peF9kaXJfZW50cnkgKmRlLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuIFx0XHRzdHJ1Y3QgaW5vZGUgKmlub2RlKTtcbiYjNDM7ZXh0ZXJuIGNvbnN0IGNoYXIgKm1pbml4X2dldF9saW5rKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGlub2RlICppbm9kZSxcbiYjNDM7XHRcdHN0cnVjdCBkZWxheWVkX2NhbGwgKmNhbGxiYWNrKTtcbiYjNDM7XG4gc3RydWN0IG1pbml4X2Rpcl9lbnRyeSAqbWluaXhfZG90ZG90KHN0cnVjdCBpbm9kZSosIHN0cnVjdCBmb2xpbyAqKik7XG4gaW5vX3QgbWluaXhfaW5vZGVfYnlfbmFtZShzdHJ1Y3QgZGVudHJ5Kik7XG4gXG4mIzQzO2V4dGVybiBpbnQgVjFfbWluaXhfaW9tYXBfYmVnaW4oc3RydWN0IGlub2RlICppbm9kZSwgbG9mZl90IG9mZnNldCxcbiYjNDM7XHRsb2ZmX3QgbGVuZ3RoLCB1bnNpZ25lZCBpbnQgZmxhZ3MsIHN0cnVjdCBpb21hcCAqaW9tYXAsXG4mIzQzO1x0c3RydWN0IGlvbWFwICpzcmNtYXApO1xuJiM0MztleHRlcm4gaW50IFYyX21pbml4X2lvbWFwX2JlZ2luKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfdCBvZmZzZXQsXG4mIzQzO1x0bG9mZl90IGxlbmd0aCwgdW5zaWduZWQgaW50IGZsYWdzLCBzdHJ1Y3QgaW9tYXAgKmlvbWFwLFxuJiM0MztcdHN0cnVjdCBpb21hcCAqc3JjbWFwKTtcbiYjNDM7XG4mIzQzO2V4dGVybiBjb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZV9vcGVyYXRpb25zIG1pbml4X2FvcHM7XG4gZXh0ZXJuIGNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIG1pbml4X2ZpbGVfaW5vZGVfb3BlcmF0aW9ucztcbiBleHRlcm4gY29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgbWluaXhfZGlyX2lub2RlX29wZXJhdGlvbnM7XG4gZXh0ZXJuIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgbWluaXhfZmlsZV9vcGVyYXRpb25zO1xuIGV4dGVybiBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIG1pbml4X2Rpcl9vcGVyYXRpb25zO1xuJiM0MztleHRlcm4gY29uc3Qgc3RydWN0IGlvbWFwX29wcyBWMV9taW5peF9pb21hcF9vcHM7XG4mIzQzO2V4dGVybiBjb25zdCBzdHJ1Y3QgaW9tYXBfb3BzIFYyX21pbml4X2lvbWFwX29wcztcbiBcbiBzdGF0aWMgaW5saW5lIHN0cnVjdCBtaW5peF9zYl9pbmZvICptaW5peF9zYihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxuIHtcbkBAIC05NSwxMSAmIzQzOzExMywxNyBAQCBzdGF0aWMgaW5saW5lIHN0cnVjdCBtaW5peF9pbm9kZV9pbmZvICptaW5peF9pKHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4gXHRyZXR1cm4gY29udGFpbmVyX29mKGlub2RlLCBzdHJ1Y3QgbWluaXhfaW5vZGVfaW5mbywgdmZzX2lub2RlKTtcbiB9XG4gXG4tc3RhdGljIGlubGluZSB1bnNpZ25lZCBtaW5peF9ibG9ja3NfbmVlZGVkKHVuc2lnbmVkIGJpdHMsIHVuc2lnbmVkIGJsb2Nrc2l6ZSlcbiYjNDM7c3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgbWluaXhfYmxvY2tzX25lZWRlZCh1bnNpZ25lZCBpbnQgYml0cywgdW5zaWduZWQgaW50IGJsb2Nrc2l6ZSlcbiB7XG4gXHRyZXR1cm4gRElWX1JPVU5EX1VQKGJpdHMsIGJsb2Nrc2l6ZSAqIDgpO1xuIH1cbiBcbiYjNDM7c3RhdGljIGlubGluZSBjb25zdCBzdHJ1Y3QgaW9tYXBfb3BzICptaW5peF9pb21hcF9vcHNfdmVyKHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gKElOT0RFX1ZFUlNJT04oaW5vZGUpID09IE1JTklYX1YxKSA/XG4mIzQzO1x0XHRcdTAwMjZWMV9taW5peF9pb21hcF9vcHMgOiBcdTAwMjZWMl9taW5peF9pb21hcF9vcHM7XG4mIzQzO31cbiYjNDM7XG4gI2lmIGRlZmluZWQoQ09ORklHX01JTklYX0ZTX05BVElWRV9FTkRJQU4pIFx1MDAyNlx1MDAyNiBcXFxuIFx0ZGVmaW5lZChDT05GSUdfTUlOSVhfRlNfQklHX0VORElBTl8xNkJJVF9JTkRFWEVEKVxuIFxuQEAgLTEyOSw3ICYjNDM7MTUzLDcgQEAgc3RhdGljIGlubGluZSB1bnNpZ25lZCBtaW5peF9ibG9ja3NfbmVlZGVkKHVuc2lnbmVkIGJpdHMsIHVuc2lnbmVkIGJsb2Nrc2l6ZSlcbiAgKiBiaWctZW5kaWFuIDE2Yml0IGluZGV4ZWQgYml0bWFwc1xuICAqL1xuIFxuLXN0YXRpYyBpbmxpbmUgaW50IG1pbml4X2ZpbmRfZmlyc3RfemVyb19iaXQoY29uc3Qgdm9pZCAqdmFkZHIsIHVuc2lnbmVkIHNpemUpXG4mIzQzO3N0YXRpYyBpbmxpbmUgaW50IG1pbml4X2ZpbmRfZmlyc3RfemVyb19iaXQoY29uc3Qgdm9pZCAqdmFkZHIsIHVuc2lnbmVkIGludCBzaXplKVxuIHtcbiBcdGNvbnN0IHVuc2lnbmVkIHNob3J0ICpwID0gdmFkZHIsICphZGRyID0gdmFkZHI7XG4gXHR1bnNpZ25lZCBzaG9ydCBudW07XG5kaWZmIC0tZ2l0IGEvZnMvbWluaXgvbmFtZWkuYyBiL2ZzL21pbml4L25hbWVpLmNcbmluZGV4IDI2M2U0YmE4YjFjODIyLi5lMjQ1ZjU1YTY4ZmY1ZCAxMDA2NDRcbi0tLSBhL2ZzL21pbml4L25hbWVpLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL21pbml4L25hbWVpLmNcbkBAIC02LDYgJiM0Mzs2LDggQEBcbiAgKi9cbiBcbiAjaW5jbHVkZSBcJiMzNDttaW5peC5oXCYjMzQ7XG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2J1ZmZlcl9oZWFkLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvbmFtZWkuaFx1MDAzZVxuIFxuIHN0YXRpYyBpbnQgYWRkX25vbmRpcihzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4ge1xuQEAgLTY5LDYgJiM0Mzs3MSwxMDEgQEAgc3RhdGljIGludCBtaW5peF9jcmVhdGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxuIFx0cmV0dXJuIG1pbml4X21rbm9kKFx1MDAyNm5vcF9tbnRfaWRtYXAsIGRpciwgZGVudHJ5LCBtb2RlLCAwKTtcbiB9XG4gXG4mIzQzO3N0YXRpYyBpbmxpbmUgdTE2ICp2MV9pX2RhdGEoc3RydWN0IGlub2RlICppbm9kZSlcbiYjNDM7e1xuJiM0MztcdHJldHVybiAodTE2ICopbWluaXhfaShpbm9kZSktXHUwMDNldS5pMV9kYXRhO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW5saW5lIHUzMiAqdjJfaV9kYXRhKHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gKHUzMiAqKW1pbml4X2koaW5vZGUpLVx1MDAzZXUuaTJfZGF0YTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGlubGluZSB1MTYgY3B1X3RvX3YxX2Jsb2NrKHNlY3Rvcl90IG4pXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gbjtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGlubGluZSB1MzIgY3B1X3RvX3YyX2Jsb2NrKHNlY3Rvcl90IG4pXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gbjtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGlubGluZSBzZWN0b3JfdCB2MV9ibG9ja190b19jcHUodTE2IG4pXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gbjtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGlubGluZSBzZWN0b3JfdCB2Ml9ibG9ja190b19jcHUodTMyIG4pXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gbjtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyogUmVpbXBsZW1lbnQgcGFnZV9zeW1saW5rJiMzOTtzIGdlbmVyYWwgbG9naWMgd2hpbGUgYXZvaWRpbmcgdXNpbmcgYnVmZmVyIGhlYWRcbiYjNDM7ICogYmFzZWQgYW9wcyBvcGVyYXRpb25zIGxpa2UgYW9wcy1cdTAwM2V3cml0ZV9iZWdpbiBzbyB0aGluZ3MgYmVoYXZlIGJldHRlciB3aXRoXG4mIzQzOyAqIHRoZSBuZXcgcmVnaW1lIG9mIGlvbWFwIGJhc2VkIGFvcHMgb3BlcmF0aW9ucy4gQ3JpYmJpbmcgZnJvbSBwYWdlX3N5bWxpbmsgaW5cbiYjNDM7ICogZnMvbmFtZWkuYyBhbmQgZXh0NCYjMzk7cyBleHQ0X2luaXRfc3ltbGlua19ibG9jay5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBpbnQgX19wYWdlX3N5bWxpbmsoc3RydWN0IGlub2RlICppbm9kZSwgY29uc3QgY2hhciAqc3ltbmFtZSwgaW50IGxlbilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBzdXBlcl9ibG9jayAqc2IgPSBpbm9kZS1cdTAwM2VpX3NiO1xuJiM0MztcdHN0cnVjdCBidWZmZXJfaGVhZCAqYmg7XG4mIzQzO1x0Y2hhciAqa2FkZHI7XG4mIzQzO1x0aW50IGVyciA9IDA7XG4mIzQzO1x0dTE2ICpwMTY7IC8qIHYxIDE2IGJpdCBibG9jayAqL1xuJiM0MztcdHUzMiAqcDMyOyAvKiB2Mi8zIDMyIGJpdCBibG9jayAqL1xuJiM0MztcbiYjNDM7XHRzZWN0b3JfdCBwaHlzO1xuJiM0MztcbiYjNDM7XHRwaHlzID0gbWluaXhfbmV3X2Jsb2NrKGlub2RlKTtcbiYjNDM7XHRpZiAoIXBoeXMpIHtcbiYjNDM7XHRcdGVyciA9IC1FTk9TUEM7XG4mIzQzO1x0XHRnb3RvIHBzX291dDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmIChJTk9ERV9WRVJTSU9OKGlub2RlKSA9PSBNSU5JWF9WMSkge1xuJiM0MztcdFx0cDE2ID0gdjFfaV9kYXRhKGlub2RlKTtcbiYjNDM7XHRcdCpwMTYgPSBjcHVfdG9fdjFfYmxvY2socGh5cyk7XG4mIzQzO1x0fSBlbHNlIHtcbiYjNDM7XHRcdHAzMiA9IHYyX2lfZGF0YShpbm9kZSk7XG4mIzQzO1x0XHQqcDMyID0gY3B1X3RvX3YyX2Jsb2NrKHBoeXMpO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0YmggPSBzYl9nZXRibGsoc2IsIHBoeXMpO1xuJiM0MztcdGlmICghYmgpIHtcbiYjNDM7XHRcdGVyciA9IC1FTk9NRU07XG4mIzQzO1x0XHRnb3RvIHBzX2ZhaWw7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRsb2NrX2J1ZmZlcihiaCk7XG4mIzQzO1x0a2FkZHIgPSAoY2hhciAqKWJoLVx1MDAzZWJfZGF0YTtcbiYjNDM7XHRtZW1zZXQoa2FkZHIsIDAsIHNiLVx1MDAzZXNfYmxvY2tzaXplKTtcbiYjNDM7XHRtZW1jcHkoa2FkZHIsIHN5bW5hbWUsIGxlbik7XG4mIzQzO1x0aW5vZGUtXHUwMDNlaV9zaXplID0gbGVuIC0gMTtcbiYjNDM7XHRzZXRfYnVmZmVyX3VwdG9kYXRlKGJoKTtcbiYjNDM7XHR1bmxvY2tfYnVmZmVyKGJoKTtcbiYjNDM7XG4mIzQzO1x0bW1iX21hcmtfYnVmZmVyX2RpcnR5KGJoLCBcdTAwMjZtaW5peF9pKGlub2RlKS1cdTAwM2VpX21ldGFkYXRhX2Jocyk7XG4mIzQzO1x0aWYgKGlub2RlX25lZWRzX3N5bmMoaW5vZGUpKSB7XG4mIzQzO1x0XHRzeW5jX2RpcnR5X2J1ZmZlcihiaCk7XG4mIzQzO1x0XHRpZiAoYnVmZmVyX3JlcShiaCkgXHUwMDI2XHUwMDI2ICFidWZmZXJfdXB0b2RhdGUoYmgpKSB7XG4mIzQzO1x0XHRcdHByX2VycihcJiMzNDtpL28gZXJyb3Igc3luY2luZyBpdGFibGUgYmxvY2tcJiMzNDspO1xuJiM0MztcdFx0XHRlcnIgPSAtRUlPO1xuJiM0MztcdFx0fVxuJiM0MztcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdG1hcmtfaW5vZGVfZGlydHkoaW5vZGUpO1xuJiM0MztcdGJyZWxzZShiaCk7XG4mIzQzO1xuJiM0Mztwc19vdXQ6XG4mIzQzO1x0cmV0dXJuIGVycjtcbiYjNDM7XG4mIzQzO3BzX2ZhaWw6XG4mIzQzO1x0bWluaXhfZnJlZV9ibG9jayhpbm9kZSwgcGh5cyk7XG4mIzQzO1x0Z290byBwc19vdXQ7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIGludCBtaW5peF9zeW1saW5rKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbiBcdFx0XHQgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBjb25zdCBjaGFyICpzeW1uYW1lKVxuIHtcbkBAIC04NCw3ICYjNDM7MTgxLDcgQEAgc3RhdGljIGludCBtaW5peF9zeW1saW5rKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbiBcdFx0cmV0dXJuIFBUUl9FUlIoaW5vZGUpO1xuIFxuIFx0bWluaXhfc2V0X2lub2RlKGlub2RlLCAwKTtcbi1cdGVyciA9IHBhZ2Vfc3ltbGluayhpbm9kZSwgc3ltbmFtZSwgaSk7XG4mIzQzO1x0ZXJyID0gX19wYWdlX3N5bWxpbmsoaW5vZGUsIHN5bW5hbWUsIGkpO1xuIFx0aWYgKHVubGlrZWx5KGVycikpIHtcbiBcdFx0aW5vZGVfZGVjX2xpbmtfY291bnQoaW5vZGUpO1xuIFx0XHRpcHV0KGlub2RlKTtcbkBAIC0yNzMsNiAmIzQzOzM3MCw0NCBAQCBzdGF0aWMgaW50IG1pbml4X3JlbmFtZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcbiBcdHJldHVybiBlcnI7XG4gfVxuIFxuJiM0MzsvKiBzdHJhaWdodCB1cCB0aGlldmVyeSBoZXJlOyBzdG9sZW4gdmVyYmF0aW0gZnJvbSBleHQ0X2dldF9saW5rICovXG4mIzQzO3N0YXRpYyB2b2lkIG1pbml4X2ZyZWVfbGluayh2b2lkICpiaClcbiYjNDM7e1xuJiM0MztcdGJyZWxzZShiaCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qIEJvcnJvd2luZyBmcm9tIGV4dDRfZ2V0X2xpbmsgdG8gYSBkZWdyZWU7IHNpbmNlIG1pbml4IGlub2RlcyBhbmQgc3ltbGlua3NcbiYjNDM7ICogYXJlIHNpZ25pZmljYW50bHkgc2ltcGxlciwgd2UgZG9uJiMzOTt0IG5lZWQgdG8gZG8gbmVhcmx5IGFzIG11Y2ggYXMgZXh0NFxuJiM0MzsgKiByZXF1aXJlcyBmb3Igb2xkLXRpbWV5IGV4dDQgc2xvdyBsaW5rcy5cbiYjNDM7ICovXG4mIzQzO2NvbnN0IGNoYXIgKm1pbml4X2dldF9saW5rKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGlub2RlICppbm9kZSxcbiYjNDM7XHRcdHN0cnVjdCBkZWxheWVkX2NhbGwgKmNhbGxiYWNrKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHN1cGVyX2Jsb2NrICpzYiA9IGlub2RlLVx1MDAzZWlfc2I7XG4mIzQzO1x0c3RydWN0IGJ1ZmZlcl9oZWFkICpiaDtcbiYjNDM7XHRzZWN0b3JfdCBibGs7XG4mIzQzO1xuJiM0MztcdC8qIEdldCB5b24gYmxvY2ssIGRlcGVuZGluZyBvbiB3aGF0IHZlcnNpb24gb2YgdGhlIG1pbml4IGZzIHRoaXMgaXMuICovXG4mIzQzO1x0aWYgKElOT0RFX1ZFUlNJT04oaW5vZGUpID09IE1JTklYX1YxKVxuJiM0MztcdFx0YmxrID0gdjFfYmxvY2tfdG9fY3B1KCoodjFfaV9kYXRhKGlub2RlKSkpO1xuJiM0MztcdGVsc2VcbiYjNDM7XHRcdGJsayA9IHYyX2Jsb2NrX3RvX2NwdSgqKHYyX2lfZGF0YShpbm9kZSkpKTtcbiYjNDM7XG4mIzQzO1x0YmggPSBzYl9icmVhZChzYiwgYmxrKTtcbiYjNDM7XHRpZiAoSVNfRVJSKGJoKSlcbiYjNDM7XHRcdHJldHVybiBFUlJfQ0FTVChiaCk7XG4mIzQzO1x0aWYgKCFiaCkge1xuJiM0MztcdFx0cHJfZXJyKFwmIzM0O2JhZCBzeW1saW5rIG9uIGlub2RlICVsbHVcJiMzNDssIGlub2RlLVx1MDAzZWlfaW5vKTtcbiYjNDM7XHRcdHJldHVybiBFUlJfUFRSKC1FRlNDT1JSVVBURUQpO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0c2V0X2RlbGF5ZWRfY2FsbChjYWxsYmFjaywgbWluaXhfZnJlZV9saW5rLCBiaCk7XG4mIzQzO1x0bmRfdGVybWluYXRlX2xpbmsoYmgtXHUwMDNlYl9kYXRhLCBpbm9kZS1cdTAwM2VpX3NpemUsXG4mIzQzO1x0XHRcdGlub2RlLVx1MDAzZWlfc2ItXHUwMDNlc19ibG9ja3NpemUgLSAxKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGJoLVx1MDAzZWJfZGF0YTtcbiYjNDM7fVxuJiM0MztcbiAvKlxuICAqIGRpcmVjdG9yaWVzIGNhbiBoYW5kbGUgbW9zdCBvcGVyYXRpb25zLi4uXG4gICovXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjggMDU6MzM8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TUlOSVhfRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDttaW5peF9kaW9fcmVhZF9pdGVyJiMzNDssCiAgICAmIzM0O21pbml4X2Rpb193cml0ZV9pdGVyJiMzNDssCiAgICAmIzM0O21pbml4X2Rpb193cml0ZV9lbmRfaW8mIzM0OywKICAgICYjMzQ7bWluaXhfZmlsZV9yZWFkX2l0ZXImIzM0OywKICAgICYjMzQ7bWluaXhfZmlsZV93cml0ZV9pdGVyJiMzNDssCiAgICAmIzM0O21pbml4X2lvbWFwX2JlZ2luJiMzNDssCiAgICAmIzM0O21pbml4X2lvbWFwX2VuZCYjMzQ7LAogICAgJiMzNDtWMV9taW5peF9pb21hcF9iZWdpbiYjMzQ7LAogICAgJiMzNDtWMl9taW5peF9pb21hcF9iZWdpbiYjMzQ7LAogICAgJiMzNDttaW5peF93cml0ZWJhY2tfcmFuZ2UmIzM0OywKICAgICYjMzQ7bWluaXhfd3JpdGVwYWdlcyYjMzQ7LAogICAgJiMzNDttaW5peF9yZWFkX2ZvbGlvJiMzNDssCiAgICAmIzM0O21pbml4X3JlYWRhaGVhZCYjMzQ7LAogICAgJiMzNDttaW5peF9ibWFwJiMzNDssCiAgICAmIzM0O19fcGFnZV9zeW1saW5rJiMzNDssCiAgICAmIzM0O21pbml4X2dldF9saW5rJiMzNDssCiAgICAmIzM0O21pbml4X2ZyZWVfbGluayYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbXBsZW1lbnRzIGlvbWFwLWJhc2VkIGRpcmVjdCBJL08gYW5kIGJ1ZmZlcmVkIEkvTyBmb3IgdGhlIG1pbml4IGZpbGVzeXN0ZW0sIHdoaWNoIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gdGhlIGNvcmUgZmlsZXN5c3RlbSBsb2dpYy4gSXQgbW9kaWZpZXMgcmVhZC93cml0ZSBwYXRocywgYmxvY2sgbWFwcGluZywgYW5kIHN5bWxpbmsgaGFuZGxpbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0CiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSwKICAgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGE0NGVlZjg2ZmRhNGI3Mzc1NzZjMjgzYWQwNWU0OGQ5MWJiYjIxYTUKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgU3VuIEp1biAyOCAwNTozMzowMiAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2ZzL21pbml4L2ZpbGUuYyBiL2ZzL21pbml4L2ZpbGUuYwppbmRleCA4NmU1OTQzY2QyZmY3NC4uYjA3Yzg1M2ZhNDNhYmMgMTAwNjQ0Ci0tLSBhL2ZzL21pbml4L2ZpbGUuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9taW5peC9maWxlLmMKQEAgLTE3LDIxICYjNDM7MTcsMTY2IEBAIGludCBtaW5peF9mc3luYyhzdHJ1Y3QgZmlsZSAqZmlsZSwgbG9mZl90IHN0YXJ0LCBsb2ZmX3QgZW5kLCBpbnQgZGF0YXN5bmMpCiAJCQlzdGFydCwgZW5kLCBkYXRhc3luYyk7CiB9CiAKJiM0MztzdGF0aWMgc3NpemVfdCBtaW5peF9kaW9fcmVhZF9pdGVyKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICp0bykKJiM0Mzt7CiYjNDM7CXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBpb2NiLSZndDtraV9maWxwLSZndDtmX21hcHBpbmctJmd0O2hvc3Q7CiYjNDM7CXNzaXplX3QgcmV0OwomIzQzOwomIzQzOwlpbm9kZV9sb2NrX3NoYXJlZChpbm9kZSk7CiYjNDM7CiYjNDM7CWNvbnN0IHN0cnVjdCBpb21hcF9vcHMgKm9wcyA9IG1pbml4X2lvbWFwX29wc192ZXIoaW5vZGUpOwomIzQzOwomIzQzOwlyZXQgPSBpb21hcF9kaW9fcncoaW9jYiwgdG8sIG9wcywgTlVMTCwgMCwgTlVMTCwgMCk7CiYjNDM7CWlub2RlX3VubG9ja19zaGFyZWQoaW5vZGUpOwomIzQzOwlyZXR1cm4gcmV0OwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IG1pbml4X2Rpb193cml0ZV9lbmRfaW8oc3RydWN0IGtpb2NiICppb2NiLCBzc2l6ZV90IHNpemUsIGludCBlcnJvciwKJiM0MzsJCXVuc2lnbmVkIGludCBmbGFncykKJiM0Mzt7CiYjNDM7CXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBmaWxlX2lub2RlKGlvY2ItJmd0O2tpX2ZpbHApOwomIzQzOwlsb2ZmX3QgcG9zID0gaW9jYi0mZ3Q7a2lfcG9zOwomIzQzOwomIzQzOwlpZiAoZXJyb3IpCiYjNDM7CQlyZXR1cm4gZXJyb3I7CiYjNDM7CiYjNDM7CXBvcyAmIzQzOz0gc2l6ZTsKJiM0MzsJaWYgKHNpemUgJmFtcDsmYW1wOyBwb3MgJmd0OyBpX3NpemVfcmVhZChpbm9kZSkpIHsKJiM0MzsJCWlfc2l6ZV93cml0ZShpbm9kZSwgcG9zKTsKJiM0MzsJCW1hcmtfaW5vZGVfZGlydHkoaW5vZGUpOwomIzQzOwl9CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IGlvbWFwX2Rpb19vcHMgbWluaXhfZGlvX3dyaXRlX29wcyA9IHsKJiM0MzsJLmVuZF9pbyA9IG1pbml4X2Rpb193cml0ZV9lbmRfaW8sCiYjNDM7fTsKJiM0MzsKJiM0MztzdGF0aWMgc3NpemVfdCBtaW5peF9kaW9fd3JpdGVfaXRlcihzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqZnJvbSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBpb2NiLSZndDtraV9maWxwLSZndDtmX21hcHBpbmctJmd0O2hvc3Q7CiYjNDM7CXNzaXplX3QgcmV0OwomIzQzOwl1bnNpZ25lZCBpbnQgZmxhZ3MgPSAwOwomIzQzOwl1bnNpZ25lZCBsb25nIGJsb2Nrc2l6ZSA9IGlub2RlLSZndDtpX3NiLSZndDtzX2Jsb2Nrc2l6ZTsKJiM0MzsKJiM0MzsJaW5vZGVfbG9jayhpbm9kZSk7CiYjNDM7CXJldCA9IGdlbmVyaWNfd3JpdGVfY2hlY2tzKGlvY2IsIGZyb20pOwomIzQzOwlpZiAocmV0ICZsdDs9IDApCiYjNDM7CQlnb3RvIG91dF91bmxvY2s7CiYjNDM7CiYjNDM7CXJldCA9IGtpb2NiX21vZGlmaWVkKGlvY2IpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJZ290byBvdXRfdW5sb2NrOwomIzQzOwomIzQzOwlpZiAoaW9jYi0mZ3Q7a2lfcG9zICYjNDM7IGlvdl9pdGVyX2NvdW50KGZyb20pICZndDsgaV9zaXplX3JlYWQoaW5vZGUpIHx8CiYjNDM7CQkhSVNfQUxJR05FRChpb2NiLSZndDtraV9wb3MgfCBpb3ZfaXRlcl9hbGlnbm1lbnQoZnJvbSksIGJsb2Nrc2l6ZSkpCiYjNDM7CQlmbGFncyB8PSBJT01BUF9ESU9fRk9SQ0VfV0FJVDsKJiM0MzsKJiM0MzsJY29uc3Qgc3RydWN0IGlvbWFwX29wcyAqb3BzID0gbWluaXhfaW9tYXBfb3BzX3Zlcihpbm9kZSk7CiYjNDM7CiYjNDM7CXJldCA9IGlvbWFwX2Rpb19ydyhpb2NiLCBmcm9tLCBvcHMsCiYjNDM7CQkmYW1wO21pbml4X2Rpb193cml0ZV9vcHMsIGZsYWdzLCBOVUxMLCAwKTsKJiM0MzsJaWYgKHJldCA9PSAtRU5PVEJMSykKJiM0MzsJCXJldCA9IDA7IC8qIGZhbGxiYWNrIHRvIGJ1ZmZlcmVkICovCiYjNDM7CiYjNDM7CWlmIChyZXQgJmd0Oz0gMCAmYW1wOyZhbXA7IGlvdl9pdGVyX2NvdW50KGZyb20pKSB7CiYjNDM7CQlsb2ZmX3QgcG9zOwomIzQzOwkJbG9mZl90IGVuZGJ5dGU7CiYjNDM7CQlzc2l6ZV90IHN0YXR1czsKJiM0MzsKJiM0MzsJCWlvY2ItJmd0O2tpX2ZsYWdzICZhbXA7PSB+SU9DQl9ESVJFQ1Q7CiYjNDM7CQlwb3MgPSBpb2NiLSZndDtraV9wb3M7CiYjNDM7CQlzdGF0dXMgPSBpb21hcF9maWxlX2J1ZmZlcmVkX3dyaXRlKGlvY2IsIGZyb20sIG9wcywKJiM0MzsJCQlOVUxMLCBOVUxMKTsKJiM0MzsJCWlmICh1bmxpa2VseShzdGF0dXMgJmx0OyAwKSkgewomIzQzOwkJCXJldCA9IHN0YXR1czsKJiM0MzsJCQlnb3RvIG91dF91bmxvY2s7CiYjNDM7CQl9CiYjNDM7CiYjNDM7CQlyZXQgJiM0Mzs9IHN0YXR1czsKJiM0MzsJCWVuZGJ5dGUgPSBwb3MgJiM0Mzsgc3RhdHVzIC0gMTsKJiM0MzsJCXN0YXR1cyA9IGZpbGVtYXBfd3JpdGVfYW5kX3dhaXRfcmFuZ2UoaW5vZGUtJmd0O2lfbWFwcGluZywgcG9zLCBlbmRieXRlKTsKJiM0MzsJCWlmICghc3RhdHVzKSB7CiYjNDM7CQkJaW52YWxpZGF0ZV9tYXBwaW5nX3BhZ2VzKGlub2RlLSZndDtpX21hcHBpbmcsCiYjNDM7CQkJCXBvcyAmZ3Q7Jmd0OyBQQUdFX1NISUZULAomIzQzOwkJCQllbmRieXRlICZndDsmZ3Q7IFBBR0VfU0hJRlQpOwomIzQzOwkJCWlmIChyZXQgJmd0OyAwKQomIzQzOwkJCQlyZXQgPSBnZW5lcmljX3dyaXRlX3N5bmMoaW9jYiwgcmV0KTsKJiM0MzsJCX0gZWxzZSB7CiYjNDM7CQkJcmV0ID0gc3RhdHVzOwomIzQzOwkJfQomIzQzOwl9CiYjNDM7CiYjNDM7b3V0X3VubG9jazoKJiM0MzsJaW5vZGVfdW5sb2NrKGlub2RlKTsKJiM0MzsJcmV0dXJuIHJldDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHNzaXplX3QgbWluaXhfZmlsZV9yZWFkX2l0ZXIoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKnRvKQomIzQzO3sKJiM0MzsJaWYgKGlvY2ItJmd0O2tpX2ZsYWdzICZhbXA7IElPQ0JfRElSRUNUKQomIzQzOwkJcmV0dXJuIG1pbml4X2Rpb19yZWFkX2l0ZXIoaW9jYiwgdG8pOwomIzQzOwomIzQzOwlyZXR1cm4gZ2VuZXJpY19maWxlX3JlYWRfaXRlcihpb2NiLCB0byk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBzc2l6ZV90IG1pbml4X2ZpbGVfd3JpdGVfaXRlcihzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqZnJvbSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBpb2NiLSZndDtraV9maWxwLSZndDtmX21hcHBpbmctJmd0O2hvc3Q7CiYjNDM7CXNzaXplX3QgcmV0OwomIzQzOwomIzQzOwkvKiBtaW5peF9kaW9fd3JpdGVfaXRlciBhbHNvIGxvY2tzIHRoZSBpbm9kZSBhbmQgYXBwZWFycyB0byBkbyB0aGUgc2FtZQomIzQzOwkgKiBnZW5lcmFsIHNvcnRzIG9mIGNoZWNrcyBhcyB0aGlzLCBzbyBqdXN0IHJldHVybiBkaXJlY3RseSBmcm9tIHRoZXJlLgomIzQzOwkgKi8KJiM0MzsJaWYgKGlvY2ItJmd0O2tpX2ZsYWdzICZhbXA7IElPQ0JfRElSRUNUKQomIzQzOwkJcmV0dXJuIG1pbml4X2Rpb193cml0ZV9pdGVyKGlvY2IsIGZyb20pOwomIzQzOwomIzQzOwlpbm9kZV9sb2NrKGlub2RlKTsKJiM0MzsJcmV0ID0gZ2VuZXJpY193cml0ZV9jaGVja3MoaW9jYiwgZnJvbSk7CiYjNDM7CWlmIChyZXQgJmx0Oz0gMCkKJiM0MzsJCWdvdG8gdW5sb2NrOwomIzQzOwomIzQzOwlyZXQgPSBmaWxlX21vZGlmaWVkKGlvY2ItJmd0O2tpX2ZpbHApOwomIzQzOwlpZiAocmV0KQomIzQzOwkJZ290byB1bmxvY2s7CiYjNDM7CiYjNDM7CWNvbnN0IHN0cnVjdCBpb21hcF9vcHMgKm9wcyA9IG1pbml4X2lvbWFwX29wc192ZXIoaW5vZGUpOwomIzQzOwomIzQzOwlyZXQgPSBpb21hcF9maWxlX2J1ZmZlcmVkX3dyaXRlKGlvY2IsIGZyb20sIG9wcywKJiM0MzsJCQlOVUxMLCBOVUxMKTsKJiM0MzsKJiM0MzsJaWYgKHJldCAmZ3Q7IDApCiYjNDM7CQlyZXQgPSBnZW5lcmljX3dyaXRlX3N5bmMoaW9jYiwgcmV0KTsKJiM0MzsKJiM0Mzt1bmxvY2s6CiYjNDM7CWlub2RlX3VubG9jayhpbm9kZSk7CiYjNDM7CXJldHVybiByZXQ7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgbWluaXhfZmlsZV9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxwKQomIzQzO3sKJiM0MzsJZmlscC0mZ3Q7Zl9tb2RlIHw9IEZNT0RFX0NBTl9PRElSRUNUOwomIzQzOwlyZXR1cm4gZ2VuZXJpY19maWxlX29wZW4oaW5vZGUsIGZpbHApOwomIzQzO30KJiM0MzsKIC8qCi0gKiBXZSBoYXZlIG1vc3RseSBOVUxMcyBoZXJlOiB0aGUgY3VycmVudCBkZWZhdWx0cyBhcmUgT0sgZm9yCi0gKiB0aGUgbWluaXggZmlsZXN5c3RlbS4KJiM0MzsgKiBXZSBzdGlsbCBoYXZlIHNvbWUgTlVMTHMgaGVyZSwgYnV0IG5vdCBhcyBtYW55IG9mIHRoZSBjdXJyZW50IGRlZmF1bHRzIGFyZQomIzQzOyAqIHN0aWxsIE9LIGZvciB0aGUgbWluaXggZmlsZXN5c3RlbS4KICAqLwomIzQzOwogY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBtaW5peF9maWxlX29wZXJhdGlvbnMgPSB7CiAJLmxsc2VlawkJPSBnZW5lcmljX2ZpbGVfbGxzZWVrLAotCS5yZWFkX2l0ZXIJPSBnZW5lcmljX2ZpbGVfcmVhZF9pdGVyLAotCS53cml0ZV9pdGVyCT0gZ2VuZXJpY19maWxlX3dyaXRlX2l0ZXIsCiYjNDM7CS5yZWFkX2l0ZXIJPSBtaW5peF9maWxlX3JlYWRfaXRlciwKJiM0MzsJLndyaXRlX2l0ZXIJPSBtaW5peF9maWxlX3dyaXRlX2l0ZXIsCiAJLm1tYXBfcHJlcGFyZQk9IGdlbmVyaWNfZmlsZV9tbWFwX3ByZXBhcmUsCiYjNDM7CS5vcGVuCQk9IG1pbml4X2ZpbGVfb3BlbiwKIAkuZnN5bmMJCT0gbWluaXhfZnN5bmMsCiAJLnNwbGljZV9yZWFkCT0gZmlsZW1hcF9zcGxpY2VfcmVhZCwKJiM0MzsJLnNwbGljZV93cml0ZQk9IGl0ZXJfZmlsZV9zcGxpY2Vfd3JpdGUsCiB9OwogCi1zdGF0aWMgaW50IG1pbml4X3NldGF0dHIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsCi0JCQkgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3QgaWF0dHIgKmF0dHIpCiYjNDM7aW50IG1pbml4X3NldGF0dHIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwKJiM0MzsJc3RydWN0IGlhdHRyICphdHRyKQogewogCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBkX2lub2RlKGRlbnRyeSk7CiAJaW50IGVycm9yOwpkaWZmIC0tZ2l0IGEvZnMvbWluaXgvaW5vZGUuYyBiL2ZzL21pbml4L2lub2RlLmMKaW5kZXggYzMwY2M1OTA2OThkNmYuLmIxMTNjNDQ3NjRmZjk1IDEwMDY0NAotLS0gYS9mcy9taW5peC9pbm9kZS5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL21pbml4L2lub2RlLmMKQEAgLTQzNiw3ICYjNDM7NDM2LDMyIEBAIHN0YXRpYyBpbnQgbWluaXhfc3RhdGZzKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGtzdGF0ZnMgKmJ1ZikKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBtaW5peF9nZXRfYmxvY2soc3RydWN0IGlub2RlICppbm9kZSwgc2VjdG9yX3QgYmxvY2ssCiYjNDM7c3RhdGljIHNzaXplX3QgbWluaXhfd3JpdGViYWNrX3JhbmdlKHN0cnVjdCBpb21hcF93cml0ZXBhZ2VfY3R4ICp3cGMsCiYjNDM7CXN0cnVjdCBmb2xpbyAqZm9saW8sIHU2NCBwb3MsIHVuc2lnbmVkIGludCBsZW4sIHU2NCBlbmRfcG9zKQomIzQzO3sKJiM0MzsJaW50IGVycm9yOwomIzQzOwomIzQzOwlpZiAocG9zICZsdDsgd3BjLSZndDtpb21hcC5vZmZzZXQgfHwKJiM0MzsJCQlwb3MgJmd0Oz0gd3BjLSZndDtpb21hcC5vZmZzZXQgJiM0Mzsgd3BjLSZndDtpb21hcC5sZW5ndGgpIHsKJiM0MzsJCWlmIChJTk9ERV9WRVJTSU9OKHdwYy0mZ3Q7aW5vZGUpID09IE1JTklYX1YxKQomIzQzOwkJCWVycm9yID0gVjFfbWluaXhfaW9tYXBfYmVnaW4od3BjLSZndDtpbm9kZSwgcG9zLCBsZW4sIElPTUFQX1dSSVRFLAomIzQzOwkJCQkmYW1wO3dwYy0mZ3Q7aW9tYXAsIE5VTEwpOwomIzQzOwkJZWxzZQomIzQzOwkJCWVycm9yID0gVjJfbWluaXhfaW9tYXBfYmVnaW4od3BjLSZndDtpbm9kZSwgcG9zLCBsZW4sIElPTUFQX1dSSVRFLAomIzQzOwkJCQkmYW1wO3dwYy0mZ3Q7aW9tYXAsIE5VTEwpOwomIzQzOwkJaWYgKGVycm9yKQomIzQzOwkJCXJldHVybiBlcnJvcjsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gaW9tYXBfYWRkX3RvX2lvZW5kKHdwYywgZm9saW8sIHBvcywgZW5kX3BvcywgbGVuKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBpb21hcF93cml0ZWJhY2tfb3BzIG1pbml4X3dyaXRlYmFja19vcHMgPSB7CiYjNDM7CS53cml0ZWJhY2tfcmFuZ2UgPSBtaW5peF93cml0ZWJhY2tfcmFuZ2UsCiYjNDM7CS53cml0ZWJhY2tfc3VibWl0ID0gaW9tYXBfaW9lbmRfd3JpdGViYWNrX3N1Ym1pdCwKJiM0Mzt9OwomIzQzOwomIzQzO2ludCBtaW5peF9nZXRfYmxvY2soc3RydWN0IGlub2RlICppbm9kZSwgc2VjdG9yX3QgYmxvY2ssCiAJCSAgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoX3Jlc3VsdCwgaW50IGNyZWF0ZSkKIHsKIAlpZiAoSU5PREVfVkVSU0lPTihpbm9kZSkgPT0gTUlOSVhfVjEpCkBAIC00NDUsMTcgJiM0Mzs0NzAsNDUgQEAgc3RhdGljIGludCBtaW5peF9nZXRfYmxvY2soc3RydWN0IGlub2RlICppbm9kZSwgc2VjdG9yX3QgYmxvY2ssCiAJCXJldHVybiBWMl9taW5peF9nZXRfYmxvY2soaW5vZGUsIGJsb2NrLCBiaF9yZXN1bHQsIGNyZWF0ZSk7CiB9CiAKLXN0YXRpYyBpbnQgbWluaXhfd3JpdGVwYWdlcyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywKJiM0MzsvKiBUaGUgb2xkIG1pbml4X3dyaXRlcGFnZXMsIHByZXNlcnZlZCBmb3IgZGlyZWN0b3J5IG9wZXJhdGlvbnMuICovCiYjNDM7c3RhdGljIGludCBtaW5peF9ibG9ja193cml0ZXBhZ2VzKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLAogCQlzdHJ1Y3Qgd3JpdGViYWNrX2NvbnRyb2wgKndiYykKIHsKIAlyZXR1cm4gbXBhZ2Vfd3JpdGVwYWdlcyhtYXBwaW5nLCB3YmMsIG1pbml4X2dldF9ibG9jayk7CiB9CiAKJiM0MztzdGF0aWMgaW50IG1pbml4X3dyaXRlcGFnZXMoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsCiYjNDM7CQlzdHJ1Y3Qgd3JpdGViYWNrX2NvbnRyb2wgKndiYykKJiM0Mzt7CiYjNDM7CXN0cnVjdCBpb21hcF93cml0ZXBhZ2VfY3R4IHdwYyA9IHsKJiM0MzsJCS5pbm9kZSA9IG1hcHBpbmctJmd0O2hvc3QsCiYjNDM7CQkud2JjID0gd2JjLAomIzQzOwkJLm9wcyA9ICZhbXA7bWluaXhfd3JpdGViYWNrX29wcywKJiM0MzsJfTsKJiM0MzsJcmV0dXJuIGlvbWFwX3dyaXRlcGFnZXMoJmFtcDt3cGMpOwomIzQzO30KJiM0MzsKIHN0YXRpYyBpbnQgbWluaXhfcmVhZF9mb2xpbyhzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IGZvbGlvICpmb2xpbykKJiM0Mzt7CiYjNDM7CWNvbnN0IHN0cnVjdCBpb21hcF9vcHMgKm9wcyA9IG1pbml4X2lvbWFwX29wc192ZXIoZm9saW8tJmd0O21hcHBpbmctJmd0O2hvc3QpOwomIzQzOwomIzQzOwlpb21hcF9iaW9fcmVhZF9mb2xpbyhmb2xpbywgb3BzKTsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzOy8qIFRoZSBvbGQgbWluaXhfcmVhZF9mb2xpbywgcHJlc2VydmVkIGZvciBkaXJlY3Rvcnkgb3BlcmF0aW9ucy4gKi8KJiM0MztzdGF0aWMgaW50IG1pbml4X2Jsb2NrX3JlYWRfZm9saW8oc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBmb2xpbyAqZm9saW8pCiB7CiAJcmV0dXJuIGJsb2NrX3JlYWRfZnVsbF9mb2xpbyhmb2xpbywgbWluaXhfZ2V0X2Jsb2NrKTsKIH0KIAomIzQzO3N0YXRpYyB2b2lkIG1pbml4X3JlYWRhaGVhZChzdHJ1Y3QgcmVhZGFoZWFkX2NvbnRyb2wgKnJhYykKJiM0Mzt7CiYjNDM7CWNvbnN0IHN0cnVjdCBpb21hcF9vcHMgKm9wcyA9IG1pbml4X2lvbWFwX29wc192ZXIocmFjLSZndDttYXBwaW5nLSZndDtob3N0KTsKJiM0MzsKJiM0MzsJaW9tYXBfYmlvX3JlYWRhaGVhZChyYWMsIG9wcyk7CiYjNDM7fQomIzQzOwogaW50IG1pbml4X3ByZXBhcmVfY2h1bmsoc3RydWN0IGZvbGlvICpmb2xpbywgbG9mZl90IHBvcywgdW5zaWduZWQgbGVuKQogewogCXJldHVybiBfX2Jsb2NrX3dyaXRlX2JlZ2luKGZvbGlvLCBwb3MsIGxlbiwgbWluaXhfZ2V0X2Jsb2NrKTsKQEAgLTQ4NywyNCAmIzQzOzU0MCw0MiBAQCBzdGF0aWMgaW50IG1pbml4X3dyaXRlX2JlZ2luKGNvbnN0IHN0cnVjdCBraW9jYiAqaW9jYiwKIAogc3RhdGljIHNlY3Rvcl90IG1pbml4X2JtYXAoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIHNlY3Rvcl90IGJsb2NrKQogewotCXJldHVybiBnZW5lcmljX2Jsb2NrX2JtYXAobWFwcGluZyxibG9jayxtaW5peF9nZXRfYmxvY2spOwomIzQzOwljb25zdCBzdHJ1Y3QgaW9tYXBfb3BzICpvcHMgPSBtaW5peF9pb21hcF9vcHNfdmVyKG1hcHBpbmctJmd0O2hvc3QpOwomIzQzOwomIzQzOwlyZXR1cm4gaW9tYXBfYm1hcChtYXBwaW5nLCBibG9jaywgb3BzKTsKIH0KIAotc3RhdGljIGNvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgbWluaXhfYW9wcyA9IHsKLQkuZGlydHlfZm9saW8JPSBibG9ja19kaXJ0eV9mb2xpbywKLQkuaW52YWxpZGF0ZV9mb2xpbyA9IGJsb2NrX2ludmFsaWRhdGVfZm9saW8sCiYjNDM7Y29uc3Qgc3RydWN0IGFkZHJlc3Nfc3BhY2Vfb3BlcmF0aW9ucyBtaW5peF9hb3BzID0gewomIzQzOwkuZGlydHlfZm9saW8JPSBpb21hcF9kaXJ0eV9mb2xpbywKJiM0MzsJLmludmFsaWRhdGVfZm9saW8gPSBpb21hcF9pbnZhbGlkYXRlX2ZvbGlvLAogCS5yZWFkX2ZvbGlvID0gbWluaXhfcmVhZF9mb2xpbywKJiM0MzsJLnJlYWRhaGVhZCA9IG1pbml4X3JlYWRhaGVhZCwKIAkud3JpdGVwYWdlcyA9IG1pbml4X3dyaXRlcGFnZXMsCiYjNDM7CS5taWdyYXRlX2ZvbGlvID0gZmlsZW1hcF9taWdyYXRlX2ZvbGlvLAomIzQzOwkuYm1hcCA9IG1pbml4X2JtYXAsCiYjNDM7CS5pc19wYXJ0aWFsbHlfdXB0b2RhdGUgPSBpb21hcF9pc19wYXJ0aWFsbHlfdXB0b2RhdGUsCiYjNDM7CS5yZWxlYXNlX2ZvbGlvID0gaW9tYXBfcmVsZWFzZV9mb2xpbywKJiM0MzsJLmVycm9yX3JlbW92ZV9mb2xpbyA9IGdlbmVyaWNfZXJyb3JfcmVtb3ZlX2ZvbGlvLAomIzQzO307CiYjNDM7CiYjNDM7LyogQSBzcGVjaWFsIGFvcHMgZm9yIGRpcmVjdG9yaWVzIHRoYXQga2VlcHMgdXNpbmcgdGhlIGJ1ZmZlciBoZWFkIGNodW5rcywgYXQKJiM0MzsgKiBsZWFzdCBmb3IgdGhlIHRpbWUgYmVpbmcuCiYjNDM7ICovCiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgbWluaXhfZGlyX2FvcHMgPSB7CiYjNDM7CS5kaXJ0eV9mb2xpbyA9IGJsb2NrX2RpcnR5X2ZvbGlvLAomIzQzOwkuaW52YWxpZGF0ZV9mb2xpbyA9IGJsb2NrX2ludmFsaWRhdGVfZm9saW8sCiYjNDM7CS5yZWFkX2ZvbGlvID0gbWluaXhfYmxvY2tfcmVhZF9mb2xpbywKIAkud3JpdGVfYmVnaW4gPSBtaW5peF93cml0ZV9iZWdpbiwKIAkud3JpdGVfZW5kID0gZ2VuZXJpY193cml0ZV9lbmQsCiAJLm1pZ3JhdGVfZm9saW8gPSBidWZmZXJfbWlncmF0ZV9mb2xpbywKIAkuYm1hcCA9IG1pbml4X2JtYXAsCi0JLmRpcmVjdF9JTyA9IG5vb3BfZGlyZWN0X0lPCiYjNDM7CS53cml0ZXBhZ2VzID0gbWluaXhfYmxvY2tfd3JpdGVwYWdlcywKIH07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBtaW5peF9zeW1saW5rX2lub2RlX29wZXJhdGlvbnMgPSB7Ci0JLmdldF9saW5rCT0gcGFnZV9nZXRfbGluaywKJiM0MzsJLmdldF9saW5rCT0gbWluaXhfZ2V0X2xpbmssCiAJLmdldGF0dHIJPSBtaW5peF9nZXRhdHRyLAomIzQzOwkuc2V0YXR0cgk9IG1pbml4X3NldGF0dHIsCiB9OwogCiB2b2lkIG1pbml4X3NldF9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBkZXZfdCByZGV2KQpAQCAtNTE2LDcgJiM0Mzs1ODcsNyBAQCB2b2lkIG1pbml4X3NldF9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBkZXZfdCByZGV2KQogCX0gZWxzZSBpZiAoU19JU0RJUihpbm9kZS0mZ3Q7aV9tb2RlKSkgewogCQlpbm9kZS0mZ3Q7aV9vcCA9ICZhbXA7bWluaXhfZGlyX2lub2RlX29wZXJhdGlvbnM7CiAJCWlub2RlLSZndDtpX2ZvcCA9ICZhbXA7bWluaXhfZGlyX29wZXJhdGlvbnM7Ci0JCWlub2RlLSZndDtpX21hcHBpbmctJmd0O2Ffb3BzID0gJmFtcDttaW5peF9hb3BzOwomIzQzOwkJaW5vZGUtJmd0O2lfbWFwcGluZy0mZ3Q7YV9vcHMgPSAmYW1wO21pbml4X2Rpcl9hb3BzOwogCX0gZWxzZSBpZiAoU19JU0xOSyhpbm9kZS0mZ3Q7aV9tb2RlKSkgewogCQlpbm9kZS0mZ3Q7aV9vcCA9ICZhbXA7bWluaXhfc3ltbGlua19pbm9kZV9vcGVyYXRpb25zOwogCQlpbm9kZV9ub2hpZ2htZW0oaW5vZGUpOwpAQCAtNzY4LDQgJiM0Mzs4MzksMyBAQCBtb2R1bGVfaW5pdChpbml0X21pbml4X2ZzKQogbW9kdWxlX2V4aXQoZXhpdF9taW5peF9mcykKIE1PRFVMRV9ERVNDUklQVElPTigmIzM0O01pbml4IGZpbGUgc3lzdGVtJiMzNDspOwogTU9EVUxFX0xJQ0VOU0UoJiMzNDtHUEwmIzM0Oyk7Ci0KZGlmZiAtLWdpdCBhL2ZzL21pbml4L2lvbWFwLmMgYi9mcy9taW5peC9pb21hcC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwLi43YmIwNDM5ZTM2Njk5NgotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL21pbml4L2lvbWFwLmMKQEAgLTAsMCAmIzQzOzEsMTE0IEBACiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seQomIzQzOy8qCiYjNDM7ICogaW9tYXAgZnVuY3Rpb25zIGZvciBtaW5peC4gQXQgbGVhc3QgdGhlIGZpcnN0IHBhc3Mgb2YgdGhpcyBmaWxlIHdhcyB0YWtlbgomIzQzOyAqIGZyb20gdGhlIHhpYWZzIGlvbWFwLmMsIHdoaWNoIGlzIGZpdHRpbmcgc2luY2UgdGhlIHhpYWZzIG1vZHVsZSBpbiB0dXJuCiYjNDM7ICogYm9ycm93ZWQgaGVhdmlseSBmcm9tIHRoZSBtb2Rlcm5pemVkIG1pbml4IGZzIGtlcm5lbCBtb2R1bGUuCiYjNDM7ICovCiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBtaW5peF9pb21hcF9iZWdpbiAtIG1hcCBhIGZpbGUgcmFuZ2UgdG8gZGlzayBibG9ja3MuIEl0IGFjdHMgYXMgYSByZXBsYWNlbWVudAomIzQzOyAqIGZvciBnZXRfYmxvY2sgaW4gaXRyZWVfY29tbW9uLmMsIGF0IGxlYXN0IGluIHRoZSBpbXBvcnRhbnQgd2F5cywgYW5kIGlzCiYjNDM7ICogYWRhcHRlZCBmcm9tIGl0LCBidXQgaXQgdXNlcyBpb21hcCBpbnN0ZWFkIG9mIGJ1ZmZlcl9oZWFkLiBUaGlzIGlzIHRha2VuCiYjNDM7ICogZGlyZWN0bHkgZnJvbSB0aGUgb3V0LW9mLXRyZWUgeGlhZnMgaW9tYXAgY2hhbmdlcywgYW5kIHRoZSBleGZhdCBpb21hcAomIzQzOyAqIGNoYW5nZXMgd2VyZSBhbiBpbnNwaXJhdGlvbiBmb3IgdGhhdC4KJiM0MzsgKi8KJiM0MztzdGF0aWMgaW50IG1pbml4X2lvbWFwX2JlZ2luKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfdCBvZmZzZXQsIGxvZmZfdCBsZW5ndGgsCiYjNDM7CXVuc2lnbmVkIGludCBmbGFncywgc3RydWN0IGlvbWFwICppb21hcCwgc3RydWN0IGlvbWFwICpzcmNtYXApCiYjNDM7ewomIzQzOwlzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiID0gaW5vZGUtJmd0O2lfc2I7CiYjNDM7CXVuc2lnbmVkIGludCBibGtiaXRzID0gc2ItJmd0O3NfYmxvY2tzaXplX2JpdHM7CiYjNDM7CXNlY3Rvcl90IGlibG9jayA9IG9mZnNldCAmZ3Q7Jmd0OyBibGtiaXRzOwomIzQzOwlpbnQgY3JlYXRlID0gZmxhZ3MgJmFtcDsgSU9NQVBfV1JJVEU7CiYjNDM7CiYjNDM7CS8qIE1vc3RseSB0YWtlbiBmcm9tIG1vZGVybi14aWFmcyBpdHJlZS5jIGdldF9ibG9jayB3aXRoIGVsZW1lbnRzIGZyb20KJiM0MzsJICogc2ltaWxhciBleGZhdCBvcGVyYXRpb25zLgomIzQzOwkgKi8KJiM0MzsJaW50IG9mZnNldHNbREVQVEhdOwomIzQzOwlJbmRpcmVjdCBjaGFpbltERVBUSF07CiYjNDM7CUluZGlyZWN0ICpwYXJ0aWFsOwomIzQzOwlpbnQgZGVwdGggPSBibG9ja190b19wYXRoKGlub2RlLCBpYmxvY2ssIG9mZnNldHMpOwomIzQzOwlpbnQgbGVmdDsKJiM0MzsJaW50IGVyciA9IC1FSU87CiYjNDM7CiYjNDM7CXNlY3Rvcl90IHBoeXM7CiYjNDM7CiYjNDM7CS8qIGJsb2NrIGlzIGJleW9uZCBtYXggZmlsZSBzaXplICovCiYjNDM7CWlmIChkZXB0aCA9PSAwKQomIzQzOwkJZ290byBvdXQ7CiYjNDM7CiYjNDM7CWlvbWFwLSZndDtiZGV2ID0gaW5vZGUtJmd0O2lfc2ItJmd0O3NfYmRldjsKJiM0MzsKJiM0MztyZXJlYWQ6CiYjNDM7CXBhcnRpYWwgPSBnZXRfYnJhbmNoKGlub2RlLCBkZXB0aCwgb2Zmc2V0cywgY2hhaW4sICZhbXA7ZXJyKTsKJiM0MzsKJiM0MzsJLyogU2ltcGxlc3QgY2FzZSAtIGJsb2NrIGZvdW5kLCBubyBhbGxvY2F0aW9uIG5lZWRlZCAqLwomIzQzOwlpZiAoIXBhcnRpYWwpIHsKJiM0MzsJCS8qIEJpdCBvZiBhIHdlaXJkIG9yZGVyLCBidXQgaXQmIzM5O2xsIG1ha2Ugc2Vuc2Ugd2hlbiB5b3UgZ2V0IHRvCiYjNDM7CQkgKiB0aGUgYm90dG9tLgomIzQzOwkJICovCiYjNDM7CQlpb21hcC0mZ3Q7ZmxhZ3MgPSBJT01BUF9GX01FUkdFRDsKJiM0Mztnb3RfaXQ6CiYjNDM7CQlwaHlzID0gYmxvY2tfdG9fY3B1KGNoYWluW2RlcHRoIC0gMV0ua2V5KTsKJiM0MzsJCXBhcnRpYWwgPSBjaGFpbiYjNDM7ZGVwdGgtMTsKJiM0MzsJCS8qIFNldCB1cCB0aGUgaW9tYXAgc3RydWN0IGJlZm9yZSBjbGVhbmluZyB1cCAqLwomIzQzOwkJaW9tYXAtJmd0O3R5cGUgPSBJT01BUF9NQVBQRUQ7CiYjNDM7CQlpb21hcC0mZ3Q7YWRkciA9ICh1NjQpcGh5cyAmbHQ7Jmx0OyBibGtiaXRzOwomIzQzOwkJaW9tYXAtJmd0O2xlbmd0aCA9IDEgJmx0OyZsdDsgYmxrYml0czsKJiM0MzsJCWlvbWFwLSZndDtvZmZzZXQgPSAodTY0KWlibG9jayAmbHQ7Jmx0OyBibGtiaXRzOwomIzQzOwkJZ290byBjbGVhbnVwOwomIzQzOwl9CiYjNDM7CiYjNDM7CS8qIE5leHQgc2ltcGxlIGNhc2UgLSBwbGFpbiBsb29rdXAgb3IgZmFpbGVkIHJlYWQgb2YgaW5kaXJlY3QgYmxvY2sgKi8KJiM0MzsJaWYgKCFjcmVhdGUgfHwgZXJyID09IC1FSU8pIHsKJiM0MzsJCWlvbWFwLSZndDt0eXBlID0gSU9NQVBfSE9MRTsKJiM0MzsJCWlvbWFwLSZndDthZGRyID0gSU9NQVBfTlVMTF9BRERSOwomIzQzOwkJaW9tYXAtJmd0O2xlbmd0aCA9IDEgJmx0OyZsdDsgYmxrYml0czsKJiM0MzsJCWlvbWFwLSZndDtvZmZzZXQgPSAodTY0KWlibG9jayAmbHQ7Jmx0OyBibGtiaXRzOwomIzQzOwkJaW9tYXAtJmd0O2ZsYWdzID0gMDsKJiM0MztjbGVhbnVwOgomIzQzOwkJd2hpbGUgKHBhcnRpYWwgJmd0OyBjaGFpbikgewomIzQzOwkJCWJyZWxzZShwYXJ0aWFsLSZndDtiaCk7CiYjNDM7CQkJcGFydGlhbC0tOwomIzQzOwkJfQomIzQzO291dDoKJiM0MzsJCXJldHVybiBlcnI7CiYjNDM7CX0KJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogSW5kaXJlY3QgYmxvY2sgbWlnaHQgYmUgcmVtb3ZlZCBieSB0cnVuY2F0ZSB3aGlsZSB3ZSB3ZXJlCiYjNDM7CSAqIHJlYWRpbmcgaXQuIEhhbmRsaW5nIG9mIHRoYXQgY2FzZSAoZm9yZ2V0IHdoYXQgd2UmIzM5O3ZlIGdvdCBhbmQKJiM0MzsJICogcmVyZWFkKSBpcyB0YWtlbiBvdXQgb2YgdGhlIG1haW4gcGF0aC4KJiM0MzsJICovCiYjNDM7CWlmIChlcnIgPT0gLUVBR0FJTikKJiM0MzsJCWdvdG8gY2hhbmdlZDsKJiM0MzsKJiM0MzsJbGVmdCA9IChjaGFpbiAmIzQzOyBkZXB0aCkgLSBwYXJ0aWFsOwomIzQzOwllcnIgPSBhbGxvY19icmFuY2goaW5vZGUsIGxlZnQsIG9mZnNldHMgJiM0MzsgKHBhcnRpYWwgLSBjaGFpbiksIHBhcnRpYWwpOwomIzQzOwlpZiAoZXJyKQomIzQzOwkJZ290byBjbGVhbnVwOwomIzQzOwomIzQzOwlpZiAoc3BsaWNlX2JyYW5jaChpbm9kZSwgY2hhaW4sIHBhcnRpYWwsIGxlZnQpICZsdDsgMCkKJiM0MzsJCWdvdG8gY2hhbmdlZDsKJiM0MzsKJiM0MzsJLyogU3VjY2Vzc2Z1bCBhbGxvY2F0aW9uLCBtYXBwaW5nIGl0LiAqLwomIzQzOwlpb21hcC0mZ3Q7ZmxhZ3MgPSBJT01BUF9GX05FVzsKJiM0MzsJZ290byBnb3RfaXQ7CiYjNDM7CiYjNDM7Y2hhbmdlZDoKJiM0MzsJd2hpbGUgKHBhcnRpYWwgJmd0OyBjaGFpbikgewomIzQzOwkJYnJlbHNlKHBhcnRpYWwtJmd0O2JoKTsKJiM0MzsJCXBhcnRpYWwtLTsKJiM0MzsJfQomIzQzOwlnb3RvIHJlcmVhZDsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBtaW5peF9pb21hcF9lbmQgZW5kcyB1cCBiZWluZyBhIG5vcDsgc2luY2UgbWluaXggZG9lc24mIzM5O3QgaGF2ZSBhbnkgZXh0ZW50cyBvcgomIzQzOyAqIHRyYW5zYWN0aW9ucyB0byB3b3JyeSBhYm91dCwgdGhlcmUgaXNuJiMzOTt0IGFueXRoaW5nIHRvIHVwZGF0ZSBoZXJlLiBUaGUgb24tZGlzawomIzQzOyAqIGluZGlyZWN0IGJsb2NrcyBnZXQgZGlydGllZCBpbiBtaW5peF9pb21hcF9iZWdpbi4KJiM0MzsgKi8KJiM0MztzdGF0aWMgaW50IG1pbml4X2lvbWFwX2VuZChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb2ZmX3Qgb2Zmc2V0LCBsb2ZmX3QgbGVuZ3RoLAomIzQzOwlzc2l6ZV90IHdyaXR0ZW4sIHVuc2lnbmVkIGludCBmbGFncywgc3RydWN0IGlvbWFwICppb21hcCkKJiM0Mzt7CiYjNDM7CXJldHVybiAwOwomIzQzO30KZGlmZiAtLWdpdCBhL2ZzL21pbml4L2l0cmVlX2NvbW1vbi5jIGIvZnMvbWluaXgvaXRyZWVfY29tbW9uLmMKaW5kZXggYzNjZDJjNzVhZjljZWUuLjVhOGI3M2E3YmVkYTc4IDEwMDY0NAotLS0gYS9mcy9taW5peC9pdHJlZV9jb21tb24uYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9taW5peC9pdHJlZV9jb21tb24uYwpAQCAtMzExLDcgJiM0MzszMTEsMTYgQEAgc3RhdGljIGlubGluZSB2b2lkIHRydW5jYXRlIChzdHJ1Y3QgaW5vZGUgKiBpbm9kZSkKIAlsb25nIGlibG9jazsKIAogCWlibG9jayA9IChpbm9kZS0mZ3Q7aV9zaXplICYjNDM7IHNiLSZndDtzX2Jsb2Nrc2l6ZSAtMSkgJmd0OyZndDsgc2ItJmd0O3NfYmxvY2tzaXplX2JpdHM7Ci0JYmxvY2tfdHJ1bmNhdGVfcGFnZShpbm9kZS0mZ3Q7aV9tYXBwaW5nLCBpbm9kZS0mZ3Q7aV9zaXplLCBnZXRfYmxvY2spOwomIzQzOwomIzQzOwkvKiBEZXBlbmRpbmcgb24gd2hhdCBhZGRyZXNzIHNwYWNlIG9wZXJhdGlvbnMgYXJlIGJlaW5nIHVzZWQgYnkgdGhlCiYjNDM7CSAqIGlub2RlIGJlaW5nIHRydW5jYXRlZCwgd2UgbmVlZCB0byBlaXRoZXIgY2FsbCBpb21hcF90cnVuY2F0ZV9wYWdlIG9yCiYjNDM7CSAqIGJsb2NrX3RydW5jYXRlX3BhZ2UuCiYjNDM7CSAqLwomIzQzOwlpZiAoaW5vZGUtJmd0O2lfbWFwcGluZy0mZ3Q7YV9vcHMgPT0gJmFtcDttaW5peF9hb3BzKQomIzQzOwkJaW9tYXBfdHJ1bmNhdGVfcGFnZShpbm9kZSwgaW5vZGUtJmd0O2lfc2l6ZSwgTlVMTCwKJiM0MzsJCQltaW5peF9pb21hcF9vcHNfdmVyKGlub2RlKSwgTlVMTCwgTlVMTCk7CiYjNDM7CWVsc2UKJiM0MzsJCWJsb2NrX3RydW5jYXRlX3BhZ2UoaW5vZGUtJmd0O2lfbWFwcGluZywgaW5vZGUtJmd0O2lfc2l6ZSwgZ2V0X2Jsb2NrKTsKIAogCW4gPSBibG9ja190b19wYXRoKGlub2RlLCBpYmxvY2ssIG9mZnNldHMpOwogCWlmICghbikKZGlmZiAtLWdpdCBhL2ZzL21pbml4L2l0cmVlX3YxLmMgYi9mcy9taW5peC9pdHJlZV92MS5jCmluZGV4IDFmZWQ5MDYwNDJhYTg0Li41OGMyOWY0NDQzZDM3MiAxMDA2NDQKLS0tIGEvZnMvbWluaXgvaXRyZWVfdjEuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9taW5peC9pdHJlZV92MS5jCkBAIC00OSw2ICYjNDM7NDksMTggQEAgc3RhdGljIGludCBibG9ja190b19wYXRoKHN0cnVjdCBpbm9kZSAqIGlub2RlLCBsb25nIGJsb2NrLCBpbnQgb2Zmc2V0c1tERVBUSF0pCiB9CiAKICNpbmNsdWRlICYjMzQ7aXRyZWVfY29tbW9uLmMmIzM0OwomIzQzOy8qIE5PVEEgQkVORToKJiM0MzsgKgomIzQzOyAqIFRoaXMgaXMgaWNreSB0byBtZSwgYnV0IGF0IHRoZSBzYW1lIHRpbWUgaGF2aW5nIGl0IGJlIGEgc3RhbmRhbG9uZSBDIGZpbGUKJiM0MzsgKiB0aGF0JiMzOTtzIGNvbXBpbGVkIHRvIG9iamVjdCBmb3JtIGFuZCBsaW5rZWQgc2VwYXJhdGVseSBsaWtlIGl0IGlzIGluIHhpYWZzIGlzCiYjNDM7ICogbXVjaCBuYXN0aWVyIGluIG1pbml4IGJlY2F1c2Ugb2YgdGhlIGRpZmZlcmVudCB2ZXJzaW9ucyBvZiB0aGUgbWluaXggZnMgdGhhdAomIzQzOyAqIGhhdmUgc29tZSB2ZXJ5LCB2ZXJ5IGRpZmZlcmVudCBhc3BlY3RzLCBsaWtlIHRoZSBzaXplIG9mIGJsb2NrX3QuIEkgZG9uJiMzOTt0CiYjNDM7ICogbGlrZSBpdCwgYnV0IHNpbmNlIG1pbml4IGFscmVhZHkgaGFzIHRoaXMgcGF0dGVybiB3aGVyZSBhIGNvbW1vbiBpdHJlZSBmaWxlCiYjNDM7ICogaXMgaW5jbHVkZWQgaW4gdGhlIGl0cmVlX3YxIGFuZCBpdHJlZV92MihhbmQgdjMpIGZpbGVzLCBJJiMzOTttIGluY2x1ZGluZyBpb21hcC5jCiYjNDM7ICogaW4gdGhlc2UgZmlsZXMgYXMgd2VsbC4gSXQgZG9lcyBhdCBsZWFzdCBhdm9pZCBleHBvcnRpbmcgc29tZSBjdXJyZW50bHkKJiM0MzsgKiBzdGF0aWMgZnVuY3Rpb25zIHRoYXQgYXJlbiYjMzk7dCBuZWVkZWQgYW55d2hlcmUgYnV0IGl0cmVlX2NvbW1vbi5jIGFuZCBpb21hcC5jLgomIzQzOyAqLwomIzQzOyNpbmNsdWRlICYjMzQ7aW9tYXAuYyYjMzQ7CiAKIGludCBWMV9taW5peF9nZXRfYmxvY2soc3RydWN0IGlub2RlICogaW5vZGUsIGxvbmcgYmxvY2ssCiAJCQlzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoX3Jlc3VsdCwgaW50IGNyZWF0ZSkKQEAgLTYxLDcgJiM0Mzs3MywxOCBAQCB2b2lkIFYxX21pbml4X3RydW5jYXRlKHN0cnVjdCBpbm9kZSAqIGlub2RlKQogCXRydW5jYXRlKGlub2RlKTsKIH0KIAotdW5zaWduZWQgVjFfbWluaXhfYmxvY2tzKGxvZmZfdCBzaXplLCBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKQomIzQzO3Vuc2lnbmVkIGludCBWMV9taW5peF9ibG9ja3MobG9mZl90IHNpemUsIHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpCiB7CiAJcmV0dXJuIG5ibG9ja3Moc2l6ZSwgc2IpOwogfQomIzQzOwomIzQzO2ludCBWMV9taW5peF9pb21hcF9iZWdpbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb2ZmX3Qgb2Zmc2V0LCBsb2ZmX3QgbGVuZ3RoLAomIzQzOwl1bnNpZ25lZCBpbnQgZmxhZ3MsIHN0cnVjdCBpb21hcCAqaW9tYXAsIHN0cnVjdCBpb21hcCAqc3JjbWFwKQomIzQzO3sKJiM0MzsJcmV0dXJuIG1pbml4X2lvbWFwX2JlZ2luKGlub2RlLCBvZmZzZXQsIGxlbmd0aCwgZmxhZ3MsIGlvbWFwLCBzcmNtYXApOwomIzQzO30KJiM0MzsKJiM0Mztjb25zdCBzdHJ1Y3QgaW9tYXBfb3BzIFYxX21pbml4X2lvbWFwX29wcyA9IHsKJiM0MzsJLmlvbWFwX2JlZ2luID0gVjFfbWluaXhfaW9tYXBfYmVnaW4sCiYjNDM7CS5pb21hcF9lbmQgICA9IG1pbml4X2lvbWFwX2VuZCwKJiM0Mzt9OwpkaWZmIC0tZ2l0IGEvZnMvbWluaXgvaXRyZWVfdjIuYyBiL2ZzL21pbml4L2l0cmVlX3YyLmMKaW5kZXggOWQwMGYzMWEyZDlkMTUuLmZjN2E1YWU4ZmExY2EzIDEwMDY0NAotLS0gYS9mcy9taW5peC9pdHJlZV92Mi5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL21pbml4L2l0cmVlX3YyLmMKQEAgLTU3LDYgJiM0Mzs1NywxMCBAQCBzdGF0aWMgaW50IGJsb2NrX3RvX3BhdGgoc3RydWN0IGlub2RlICogaW5vZGUsIGxvbmcgYmxvY2ssIGludCBvZmZzZXRzW0RFUFRIXSkKIH0KIAogI2luY2x1ZGUgJiMzNDtpdHJlZV9jb21tb24uYyYjMzQ7CiYjNDM7LyogU2VlIHRoZSBub3RlIGluIGl0cmVlX3YxIGluIGEgY29tbWVudCB0aGF0IHN0YXJ0cyAmIzM0O05PVEEgQkVORSYjMzQ7IGZvciBhbgomIzQzOyAqIGV4cGxhbmF0aW9uIGZvciB3aHkgaW9tYXAuYyBpcyBpbmNsdWRlZCBoZXJlLgomIzQzOyAqLwomIzQzOyNpbmNsdWRlICYjMzQ7aW9tYXAuYyYjMzQ7CiAKIGludCBWMl9taW5peF9nZXRfYmxvY2soc3RydWN0IGlub2RlICogaW5vZGUsIGxvbmcgYmxvY2ssCiAJCQlzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoX3Jlc3VsdCwgaW50IGNyZWF0ZSkKQEAgLTY5LDcgJiM0Mzs3MywxOCBAQCB2b2lkIFYyX21pbml4X3RydW5jYXRlKHN0cnVjdCBpbm9kZSAqIGlub2RlKQogCXRydW5jYXRlKGlub2RlKTsKIH0KIAotdW5zaWduZWQgVjJfbWluaXhfYmxvY2tzKGxvZmZfdCBzaXplLCBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKQomIzQzO3Vuc2lnbmVkIGludCBWMl9taW5peF9ibG9ja3MobG9mZl90IHNpemUsIHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpCiB7CiAJcmV0dXJuIG5ibG9ja3Moc2l6ZSwgc2IpOwogfQomIzQzOwomIzQzO2ludCBWMl9taW5peF9pb21hcF9iZWdpbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb2ZmX3Qgb2Zmc2V0LCBsb2ZmX3QgbGVuZ3RoLAomIzQzOwl1bnNpZ25lZCBpbnQgZmxhZ3MsIHN0cnVjdCBpb21hcCAqaW9tYXAsIHN0cnVjdCBpb21hcCAqc3JjbWFwKQomIzQzO3sKJiM0MzsJcmV0dXJuIG1pbml4X2lvbWFwX2JlZ2luKGlub2RlLCBvZmZzZXQsIGxlbmd0aCwgZmxhZ3MsIGlvbWFwLCBzcmNtYXApOwomIzQzO30KJiM0MzsKJiM0Mztjb25zdCBzdHJ1Y3QgaW9tYXBfb3BzIFYyX21pbml4X2lvbWFwX29wcyA9IHsKJiM0MzsJLmlvbWFwX2JlZ2luID0gVjJfbWluaXhfaW9tYXBfYmVnaW4sCiYjNDM7CS5pb21hcF9lbmQgICA9IG1pbml4X2lvbWFwX2VuZCwKJiM0Mzt9OwpkaWZmIC0tZ2l0IGEvZnMvbWluaXgvbWluaXguaCBiL2ZzL21pbml4L21pbml4LmgKaW5kZXggZjIwMjVjOWI1ODI1MmYuLmQxYTg5MGU5NmFiZTJjIDEwMDY0NAotLS0gYS9mcy9taW5peC9taW5peC5oCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL21pbml4L21pbml4LmgKQEAgLTUsNiAmIzQzOzUsNyBAQAogI2luY2x1ZGUgJmx0O2xpbnV4L2ZzLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvcGFnZW1hcC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L21pbml4X2ZzLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2lvbWFwLmgmZ3Q7CiAKICNkZWZpbmUgSU5PREVfVkVSU0lPTihpbm9kZSkJbWluaXhfc2IoaW5vZGUtJmd0O2lfc2IpLSZndDtzX3ZlcnNpb24KICNkZWZpbmUgTUlOSVhfVjEJCTB4MDAwMQkJLyogb3JpZ2luYWwgbWluaXggZnMgKi8KQEAgLTU2LDcgJiM0Mzs1Nyw5IEBAIGludCBtaW5peF9uZXdfYmxvY2soc3RydWN0IGlub2RlICppbm9kZSk7CiB2b2lkIG1pbml4X2ZyZWVfYmxvY2soc3RydWN0IGlub2RlICppbm9kZSwgdW5zaWduZWQgbG9uZyBibG9jayk7CiB1bnNpZ25lZCBsb25nIG1pbml4X2NvdW50X2ZyZWVfYmxvY2tzKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpOwogaW50IG1pbml4X2dldGF0dHIoc3RydWN0IG1udF9pZG1hcCAqLCBjb25zdCBzdHJ1Y3QgcGF0aCAqLAotCQlzdHJ1Y3Qga3N0YXQgKiwgdTMyLCB1bnNpZ25lZCBpbnQpOwomIzQzOwkJc3RydWN0IGtzdGF0ICosIHUzMiwgdW5zaWduZWQpOwomIzQzO2ludCBtaW5peF9zZXRhdHRyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksCiYjNDM7CXN0cnVjdCBpYXR0ciAqYXR0cik7CiBpbnQgbWluaXhfcHJlcGFyZV9jaHVuayhzdHJ1Y3QgZm9saW8gKmZvbGlvLCBsb2ZmX3QgcG9zLCB1bnNpZ25lZCBsZW4pOwogc3RydWN0IG1hcHBpbmdfbWV0YWRhdGFfYmhzICptaW5peF9nZXRfbWV0YWRhdGFfYmhzKHN0cnVjdCBpbm9kZSAqaW5vZGUpOwogaW50IG1pbml4X2ZzeW5jKHN0cnVjdCBmaWxlICpmaWxlLCBsb2ZmX3Qgc3RhcnQsIGxvZmZfdCBlbmQsIGludCBkYXRhc3luYyk7CkBAIC02OSw2ICYjNDM7NzIsOCBAQCBleHRlcm4gaW50IFYxX21pbml4X2dldF9ibG9jayhzdHJ1Y3QgaW5vZGUgKiwgbG9uZywgc3RydWN0IGJ1ZmZlcl9oZWFkICosIGludCk7CiBleHRlcm4gaW50IFYyX21pbml4X2dldF9ibG9jayhzdHJ1Y3QgaW5vZGUgKiwgbG9uZywgc3RydWN0IGJ1ZmZlcl9oZWFkICosIGludCk7CiBleHRlcm4gdW5zaWduZWQgVjFfbWluaXhfYmxvY2tzKGxvZmZfdCwgc3RydWN0IHN1cGVyX2Jsb2NrICopOwogZXh0ZXJuIHVuc2lnbmVkIFYyX21pbml4X2Jsb2Nrcyhsb2ZmX3QsIHN0cnVjdCBzdXBlcl9ibG9jayAqKTsKJiM0MztleHRlcm4gaW50IG1pbml4X2dldF9ibG9jayhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzZWN0b3JfdCBibG9jaywKJiM0MzsJCSAgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoX3Jlc3VsdCwgaW50IGNyZWF0ZSk7CiAKIHN0cnVjdCBtaW5peF9kaXJfZW50cnkgKm1pbml4X2ZpbmRfZW50cnkoc3RydWN0IGRlbnRyeSAqLCBzdHJ1Y3QgZm9saW8gKiopOwogaW50IG1pbml4X2FkZF9saW5rKHN0cnVjdCBkZW50cnkqLCBzdHJ1Y3QgaW5vZGUqKTsKQEAgLTc3LDEzICYjNDM7ODIsMjYgQEAgaW50IG1pbml4X21ha2VfZW1wdHkoc3RydWN0IGlub2RlKiwgc3RydWN0IGlub2RlKik7CiBpbnQgbWluaXhfZW1wdHlfZGlyKHN0cnVjdCBpbm9kZSopOwogaW50IG1pbml4X3NldF9saW5rKHN0cnVjdCBtaW5peF9kaXJfZW50cnkgKmRlLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLAogCQlzdHJ1Y3QgaW5vZGUgKmlub2RlKTsKJiM0MztleHRlcm4gY29uc3QgY2hhciAqbWluaXhfZ2V0X2xpbmsoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3QgaW5vZGUgKmlub2RlLAomIzQzOwkJc3RydWN0IGRlbGF5ZWRfY2FsbCAqY2FsbGJhY2spOwomIzQzOwogc3RydWN0IG1pbml4X2Rpcl9lbnRyeSAqbWluaXhfZG90ZG90KHN0cnVjdCBpbm9kZSosIHN0cnVjdCBmb2xpbyAqKik7CiBpbm9fdCBtaW5peF9pbm9kZV9ieV9uYW1lKHN0cnVjdCBkZW50cnkqKTsKIAomIzQzO2V4dGVybiBpbnQgVjFfbWluaXhfaW9tYXBfYmVnaW4oc3RydWN0IGlub2RlICppbm9kZSwgbG9mZl90IG9mZnNldCwKJiM0MzsJbG9mZl90IGxlbmd0aCwgdW5zaWduZWQgaW50IGZsYWdzLCBzdHJ1Y3QgaW9tYXAgKmlvbWFwLAomIzQzOwlzdHJ1Y3QgaW9tYXAgKnNyY21hcCk7CiYjNDM7ZXh0ZXJuIGludCBWMl9taW5peF9pb21hcF9iZWdpbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb2ZmX3Qgb2Zmc2V0LAomIzQzOwlsb2ZmX3QgbGVuZ3RoLCB1bnNpZ25lZCBpbnQgZmxhZ3MsIHN0cnVjdCBpb21hcCAqaW9tYXAsCiYjNDM7CXN0cnVjdCBpb21hcCAqc3JjbWFwKTsKJiM0MzsKJiM0MztleHRlcm4gY29uc3Qgc3RydWN0IGFkZHJlc3Nfc3BhY2Vfb3BlcmF0aW9ucyBtaW5peF9hb3BzOwogZXh0ZXJuIGNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIG1pbml4X2ZpbGVfaW5vZGVfb3BlcmF0aW9uczsKIGV4dGVybiBjb25zdCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBtaW5peF9kaXJfaW5vZGVfb3BlcmF0aW9uczsKIGV4dGVybiBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIG1pbml4X2ZpbGVfb3BlcmF0aW9uczsKIGV4dGVybiBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIG1pbml4X2Rpcl9vcGVyYXRpb25zOwomIzQzO2V4dGVybiBjb25zdCBzdHJ1Y3QgaW9tYXBfb3BzIFYxX21pbml4X2lvbWFwX29wczsKJiM0MztleHRlcm4gY29uc3Qgc3RydWN0IGlvbWFwX29wcyBWMl9taW5peF9pb21hcF9vcHM7CiAKIHN0YXRpYyBpbmxpbmUgc3RydWN0IG1pbml4X3NiX2luZm8gKm1pbml4X3NiKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpCiB7CkBAIC05NSwxMSAmIzQzOzExMywxNyBAQCBzdGF0aWMgaW5saW5lIHN0cnVjdCBtaW5peF9pbm9kZV9pbmZvICptaW5peF9pKHN0cnVjdCBpbm9kZSAqaW5vZGUpCiAJcmV0dXJuIGNvbnRhaW5lcl9vZihpbm9kZSwgc3RydWN0IG1pbml4X2lub2RlX2luZm8sIHZmc19pbm9kZSk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbWluaXhfYmxvY2tzX25lZWRlZCh1bnNpZ25lZCBiaXRzLCB1bnNpZ25lZCBibG9ja3NpemUpCiYjNDM7c3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgbWluaXhfYmxvY2tzX25lZWRlZCh1bnNpZ25lZCBpbnQgYml0cywgdW5zaWduZWQgaW50IGJsb2Nrc2l6ZSkKIHsKIAlyZXR1cm4gRElWX1JPVU5EX1VQKGJpdHMsIGJsb2Nrc2l6ZSAqIDgpOwogfQogCiYjNDM7c3RhdGljIGlubGluZSBjb25zdCBzdHJ1Y3QgaW9tYXBfb3BzICptaW5peF9pb21hcF9vcHNfdmVyKHN0cnVjdCBpbm9kZSAqaW5vZGUpCiYjNDM7ewomIzQzOwlyZXR1cm4gKElOT0RFX1ZFUlNJT04oaW5vZGUpID09IE1JTklYX1YxKSA/CiYjNDM7CQkmYW1wO1YxX21pbml4X2lvbWFwX29wcyA6ICZhbXA7VjJfbWluaXhfaW9tYXBfb3BzOwomIzQzO30KJiM0MzsKICNpZiBkZWZpbmVkKENPTkZJR19NSU5JWF9GU19OQVRJVkVfRU5ESUFOKSAmYW1wOyZhbXA7IFwKIAlkZWZpbmVkKENPTkZJR19NSU5JWF9GU19CSUdfRU5ESUFOXzE2QklUX0lOREVYRUQpCiAKQEAgLTEyOSw3ICYjNDM7MTUzLDcgQEAgc3RhdGljIGlubGluZSB1bnNpZ25lZCBtaW5peF9ibG9ja3NfbmVlZGVkKHVuc2lnbmVkIGJpdHMsIHVuc2lnbmVkIGJsb2Nrc2l6ZSkKICAqIGJpZy1lbmRpYW4gMTZiaXQgaW5kZXhlZCBiaXRtYXBzCiAgKi8KIAotc3RhdGljIGlubGluZSBpbnQgbWluaXhfZmluZF9maXJzdF96ZXJvX2JpdChjb25zdCB2b2lkICp2YWRkciwgdW5zaWduZWQgc2l6ZSkKJiM0MztzdGF0aWMgaW5saW5lIGludCBtaW5peF9maW5kX2ZpcnN0X3plcm9fYml0KGNvbnN0IHZvaWQgKnZhZGRyLCB1bnNpZ25lZCBpbnQgc2l6ZSkKIHsKIAljb25zdCB1bnNpZ25lZCBzaG9ydCAqcCA9IHZhZGRyLCAqYWRkciA9IHZhZGRyOwogCXVuc2lnbmVkIHNob3J0IG51bTsKZGlmZiAtLWdpdCBhL2ZzL21pbml4L25hbWVpLmMgYi9mcy9taW5peC9uYW1laS5jCmluZGV4IDI2M2U0YmE4YjFjODIyLi5lMjQ1ZjU1YTY4ZmY1ZCAxMDA2NDQKLS0tIGEvZnMvbWluaXgvbmFtZWkuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9taW5peC9uYW1laS5jCkBAIC02LDYgJiM0Mzs2LDggQEAKICAqLwogCiAjaW5jbHVkZSAmIzM0O21pbml4LmgmIzM0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9idWZmZXJfaGVhZC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9uYW1laS5oJmd0OwogCiBzdGF0aWMgaW50IGFkZF9ub25kaXIoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3QgaW5vZGUgKmlub2RlKQogewpAQCAtNjksNiAmIzQzOzcxLDEwMSBAQCBzdGF0aWMgaW50IG1pbml4X2NyZWF0ZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsCiAJcmV0dXJuIG1pbml4X21rbm9kKCZhbXA7bm9wX21udF9pZG1hcCwgZGlyLCBkZW50cnksIG1vZGUsIDApOwogfQogCiYjNDM7c3RhdGljIGlubGluZSB1MTYgKnYxX2lfZGF0YShzdHJ1Y3QgaW5vZGUgKmlub2RlKQomIzQzO3sKJiM0MzsJcmV0dXJuICh1MTYgKiltaW5peF9pKGlub2RlKS0mZ3Q7dS5pMV9kYXRhOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW5saW5lIHUzMiAqdjJfaV9kYXRhKHN0cnVjdCBpbm9kZSAqaW5vZGUpCiYjNDM7ewomIzQzOwlyZXR1cm4gKHUzMiAqKW1pbml4X2koaW5vZGUpLSZndDt1LmkyX2RhdGE7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbmxpbmUgdTE2IGNwdV90b192MV9ibG9jayhzZWN0b3JfdCBuKQomIzQzO3sKJiM0MzsJcmV0dXJuIG47CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbmxpbmUgdTMyIGNwdV90b192Ml9ibG9jayhzZWN0b3JfdCBuKQomIzQzO3sKJiM0MzsJcmV0dXJuIG47CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbmxpbmUgc2VjdG9yX3QgdjFfYmxvY2tfdG9fY3B1KHUxNiBuKQomIzQzO3sKJiM0MzsJcmV0dXJuIG47CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbmxpbmUgc2VjdG9yX3QgdjJfYmxvY2tfdG9fY3B1KHUzMiBuKQomIzQzO3sKJiM0MzsJcmV0dXJuIG47CiYjNDM7fQomIzQzOwomIzQzOy8qIFJlaW1wbGVtZW50IHBhZ2Vfc3ltbGluayYjMzk7cyBnZW5lcmFsIGxvZ2ljIHdoaWxlIGF2b2lkaW5nIHVzaW5nIGJ1ZmZlciBoZWFkCiYjNDM7ICogYmFzZWQgYW9wcyBvcGVyYXRpb25zIGxpa2UgYW9wcy0mZ3Q7d3JpdGVfYmVnaW4gc28gdGhpbmdzIGJlaGF2ZSBiZXR0ZXIgd2l0aAomIzQzOyAqIHRoZSBuZXcgcmVnaW1lIG9mIGlvbWFwIGJhc2VkIGFvcHMgb3BlcmF0aW9ucy4gQ3JpYmJpbmcgZnJvbSBwYWdlX3N5bWxpbmsgaW4KJiM0MzsgKiBmcy9uYW1laS5jIGFuZCBleHQ0JiMzOTtzIGV4dDRfaW5pdF9zeW1saW5rX2Jsb2NrLgomIzQzOyAqLwomIzQzO3N0YXRpYyBpbnQgX19wYWdlX3N5bWxpbmsoc3RydWN0IGlub2RlICppbm9kZSwgY29uc3QgY2hhciAqc3ltbmFtZSwgaW50IGxlbikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBzdXBlcl9ibG9jayAqc2IgPSBpbm9kZS0mZ3Q7aV9zYjsKJiM0MzsJc3RydWN0IGJ1ZmZlcl9oZWFkICpiaDsKJiM0MzsJY2hhciAqa2FkZHI7CiYjNDM7CWludCBlcnIgPSAwOwomIzQzOwl1MTYgKnAxNjsgLyogdjEgMTYgYml0IGJsb2NrICovCiYjNDM7CXUzMiAqcDMyOyAvKiB2Mi8zIDMyIGJpdCBibG9jayAqLwomIzQzOwomIzQzOwlzZWN0b3JfdCBwaHlzOwomIzQzOwomIzQzOwlwaHlzID0gbWluaXhfbmV3X2Jsb2NrKGlub2RlKTsKJiM0MzsJaWYgKCFwaHlzKSB7CiYjNDM7CQllcnIgPSAtRU5PU1BDOwomIzQzOwkJZ290byBwc19vdXQ7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKElOT0RFX1ZFUlNJT04oaW5vZGUpID09IE1JTklYX1YxKSB7CiYjNDM7CQlwMTYgPSB2MV9pX2RhdGEoaW5vZGUpOwomIzQzOwkJKnAxNiA9IGNwdV90b192MV9ibG9jayhwaHlzKTsKJiM0MzsJfSBlbHNlIHsKJiM0MzsJCXAzMiA9IHYyX2lfZGF0YShpbm9kZSk7CiYjNDM7CQkqcDMyID0gY3B1X3RvX3YyX2Jsb2NrKHBoeXMpOwomIzQzOwl9CiYjNDM7CiYjNDM7CWJoID0gc2JfZ2V0YmxrKHNiLCBwaHlzKTsKJiM0MzsJaWYgKCFiaCkgewomIzQzOwkJZXJyID0gLUVOT01FTTsKJiM0MzsJCWdvdG8gcHNfZmFpbDsKJiM0MzsJfQomIzQzOwomIzQzOwlsb2NrX2J1ZmZlcihiaCk7CiYjNDM7CWthZGRyID0gKGNoYXIgKiliaC0mZ3Q7Yl9kYXRhOwomIzQzOwltZW1zZXQoa2FkZHIsIDAsIHNiLSZndDtzX2Jsb2Nrc2l6ZSk7CiYjNDM7CW1lbWNweShrYWRkciwgc3ltbmFtZSwgbGVuKTsKJiM0MzsJaW5vZGUtJmd0O2lfc2l6ZSA9IGxlbiAtIDE7CiYjNDM7CXNldF9idWZmZXJfdXB0b2RhdGUoYmgpOwomIzQzOwl1bmxvY2tfYnVmZmVyKGJoKTsKJiM0MzsKJiM0MzsJbW1iX21hcmtfYnVmZmVyX2RpcnR5KGJoLCAmYW1wO21pbml4X2koaW5vZGUpLSZndDtpX21ldGFkYXRhX2Jocyk7CiYjNDM7CWlmIChpbm9kZV9uZWVkc19zeW5jKGlub2RlKSkgewomIzQzOwkJc3luY19kaXJ0eV9idWZmZXIoYmgpOwomIzQzOwkJaWYgKGJ1ZmZlcl9yZXEoYmgpICZhbXA7JmFtcDsgIWJ1ZmZlcl91cHRvZGF0ZShiaCkpIHsKJiM0MzsJCQlwcl9lcnIoJiMzNDtpL28gZXJyb3Igc3luY2luZyBpdGFibGUgYmxvY2smIzM0Oyk7CiYjNDM7CQkJZXJyID0gLUVJTzsKJiM0MzsJCX0KJiM0MzsKJiM0MzsJfQomIzQzOwomIzQzOwltYXJrX2lub2RlX2RpcnR5KGlub2RlKTsKJiM0MzsJYnJlbHNlKGJoKTsKJiM0MzsKJiM0Mztwc19vdXQ6CiYjNDM7CXJldHVybiBlcnI7CiYjNDM7CiYjNDM7cHNfZmFpbDoKJiM0MzsJbWluaXhfZnJlZV9ibG9jayhpbm9kZSwgcGh5cyk7CiYjNDM7CWdvdG8gcHNfb3V0OwomIzQzO30KJiM0MzsKIHN0YXRpYyBpbnQgbWluaXhfc3ltbGluayhzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsCiAJCQkgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBjb25zdCBjaGFyICpzeW1uYW1lKQogewpAQCAtODQsNyAmIzQzOzE4MSw3IEBAIHN0YXRpYyBpbnQgbWluaXhfc3ltbGluayhzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsCiAJCXJldHVybiBQVFJfRVJSKGlub2RlKTsKIAogCW1pbml4X3NldF9pbm9kZShpbm9kZSwgMCk7Ci0JZXJyID0gcGFnZV9zeW1saW5rKGlub2RlLCBzeW1uYW1lLCBpKTsKJiM0MzsJZXJyID0gX19wYWdlX3N5bWxpbmsoaW5vZGUsIHN5bW5hbWUsIGkpOwogCWlmICh1bmxpa2VseShlcnIpKSB7CiAJCWlub2RlX2RlY19saW5rX2NvdW50KGlub2RlKTsKIAkJaXB1dChpbm9kZSk7CkBAIC0yNzMsNiAmIzQzOzM3MCw0NCBAQCBzdGF0aWMgaW50IG1pbml4X3JlbmFtZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwKIAlyZXR1cm4gZXJyOwogfQogCiYjNDM7Lyogc3RyYWlnaHQgdXAgdGhpZXZlcnkgaGVyZTsgc3RvbGVuIHZlcmJhdGltIGZyb20gZXh0NF9nZXRfbGluayAqLwomIzQzO3N0YXRpYyB2b2lkIG1pbml4X2ZyZWVfbGluayh2b2lkICpiaCkKJiM0Mzt7CiYjNDM7CWJyZWxzZShiaCk7CiYjNDM7fQomIzQzOwomIzQzOy8qIEJvcnJvd2luZyBmcm9tIGV4dDRfZ2V0X2xpbmsgdG8gYSBkZWdyZWU7IHNpbmNlIG1pbml4IGlub2RlcyBhbmQgc3ltbGlua3MKJiM0MzsgKiBhcmUgc2lnbmlmaWNhbnRseSBzaW1wbGVyLCB3ZSBkb24mIzM5O3QgbmVlZCB0byBkbyBuZWFybHkgYXMgbXVjaCBhcyBleHQ0CiYjNDM7ICogcmVxdWlyZXMgZm9yIG9sZC10aW1leSBleHQ0IHNsb3cgbGlua3MuCiYjNDM7ICovCiYjNDM7Y29uc3QgY2hhciAqbWluaXhfZ2V0X2xpbmsoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3QgaW5vZGUgKmlub2RlLAomIzQzOwkJc3RydWN0IGRlbGF5ZWRfY2FsbCAqY2FsbGJhY2spCiYjNDM7ewomIzQzOwlzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiID0gaW5vZGUtJmd0O2lfc2I7CiYjNDM7CXN0cnVjdCBidWZmZXJfaGVhZCAqYmg7CiYjNDM7CXNlY3Rvcl90IGJsazsKJiM0MzsKJiM0MzsJLyogR2V0IHlvbiBibG9jaywgZGVwZW5kaW5nIG9uIHdoYXQgdmVyc2lvbiBvZiB0aGUgbWluaXggZnMgdGhpcyBpcy4gKi8KJiM0MzsJaWYgKElOT0RFX1ZFUlNJT04oaW5vZGUpID09IE1JTklYX1YxKQomIzQzOwkJYmxrID0gdjFfYmxvY2tfdG9fY3B1KCoodjFfaV9kYXRhKGlub2RlKSkpOwomIzQzOwllbHNlCiYjNDM7CQlibGsgPSB2Ml9ibG9ja190b19jcHUoKih2Ml9pX2RhdGEoaW5vZGUpKSk7CiYjNDM7CiYjNDM7CWJoID0gc2JfYnJlYWQoc2IsIGJsayk7CiYjNDM7CWlmIChJU19FUlIoYmgpKQomIzQzOwkJcmV0dXJuIEVSUl9DQVNUKGJoKTsKJiM0MzsJaWYgKCFiaCkgewomIzQzOwkJcHJfZXJyKCYjMzQ7YmFkIHN5bWxpbmsgb24gaW5vZGUgJWxsdSYjMzQ7LCBpbm9kZS0mZ3Q7aV9pbm8pOwomIzQzOwkJcmV0dXJuIEVSUl9QVFIoLUVGU0NPUlJVUFRFRCk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJc2V0X2RlbGF5ZWRfY2FsbChjYWxsYmFjaywgbWluaXhfZnJlZV9saW5rLCBiaCk7CiYjNDM7CW5kX3Rlcm1pbmF0ZV9saW5rKGJoLSZndDtiX2RhdGEsIGlub2RlLSZndDtpX3NpemUsCiYjNDM7CQkJaW5vZGUtJmd0O2lfc2ItJmd0O3NfYmxvY2tzaXplIC0gMSk7CiYjNDM7CiYjNDM7CXJldHVybiBiaC0mZ3Q7Yl9kYXRhOwomIzQzO30KJiM0MzsKIC8qCiAgKiBkaXJlY3RvcmllcyBjYW4gaGFuZGxlIG1vc3Qgb3BlcmF0aW9ucy4uLgogICovCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI4IDA1OjMzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExNjA4CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogNDQ3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk1pbml4IEkvTyBJbXBsZW1lbnRhdGlvbiBQYXRjaCBBbmFseXNpcyAmYW1wOyBGdXp6aW5nIFN0cmF0ZWd5KioKCk9rYXksIHNvIEkmIzM5O3ZlIGdvdCB0aGlzIHBhdGNoIGhlcmUgdGhhdCYjMzk7cyBkaXZpbmcgZGVlcCBpbnRvIHRoZSBNaW5peCBmaWxlc3lzdGVtIGltcGxlbWVudGF0aW9uLiBJdCYjMzk7cyB0b3VjaGluZyBgZnMvbWluaXgvZmlsZS5jYCwgYGZzL21pbml4L2lub2RlLmNgLCBgZnMvbWluaXgvaW9tYXAuY2AsIHRoZSBgaXRyZWVgIGltcGxlbWVudGF0aW9uLCBhbmQgZXZlbiB0aGUgaGVhZGVyIGFuZCBuYW1lIHJlc29sdXRpb24gY29tcG9uZW50cy4gVGhpcyBpcyBwcmV0dHkgc2lnbmlmaWNhbnQ7IGl0JiMzOTtzIGltcGxlbWVudGluZyBpb21hcC1iYXNlZCBkaXJlY3QgSS9PIGFuZCBidWZmZXJlZCBJL08sIHdoaWNoIGlzIGEgYmlnIGNoYW5nZSB0byBob3cgTWluaXggaGFuZGxlcyBkYXRhLgoKTG9va2luZyBhdCB0aGUgY29kZSBjaGFuZ2VzLCBpdCYjMzk7cyBpbnRyb2R1Y2luZyBhIHdob2xlIHNsZXcgb2YgbmV3IGZ1bmN0aW9uczogYG1pbml4X2Rpb19yZWFkX2l0ZXJgLCBgbWluaXhfZGlvX3dyaXRlX2l0ZXJgLCB0aGUgc3RhbmRhcmQgZmlsZSByZWFkL3dyaXRlIGl0ZXJhdG9ycywgYW5kIHNvbWUgY3J1Y2lhbCBpb21hcCBsaWZlY3ljbGUgZnVuY3Rpb25zIGxpa2UgYG1pbml4X2lvbWFwX2JlZ2luYCBhbmQgYG1pbml4X2lvbWFwX2VuZGAuIFBsdXMsIGl0IGxvb2tzIGxpa2UgdGhleSYjMzk7dmUgdXBkYXRlZCB0aGUgd3JpdGViYWNrIGFuZCByZWFkLWFoZWFkIG1lY2hhbmlzbXMgKGBtaW5peF93cml0ZWJhY2tfcmFuZ2VgLCBgbWluaXhfd3JpdGVwYWdlc2AsIGBtaW5peF9yZWFkX2ZvbGlvYCwgYG1pbml4X3JlYWRhaGVhZGApLiBJIGFsc28gc2VlIGNoYW5nZXMgdG8gYmxvY2sgbWFwcGluZyAoYG1pbml4X2JtYXBgKSBhbmQgc3ltbGluayBoYW5kbGluZywgc3dpdGNoaW5nIGF3YXkgZnJvbSB0aGUgZ2VuZXJpYyBwYWdlIHN5bWxpbmsgZnVuY3Rpb25zIGFuZCB1c2luZyBgX19wYWdlX3N5bWxpbmtgIGFuZCBgbWluaXhfZ2V0X2xpbmtgIGluc3RlYWQuCgpUaGlzIGlzIGEgY2xlYXIgZnVuY3Rpb25hbCBzaGlmdC4gR2l2ZW4gdGhlIGNvbXBsZXhpdHkgYW5kIHRoZSBwb3RlbnRpYWwgZm9yIHN1YnRsZSBpbnRlcmFjdGlvbnMgaW4gYSBmaWxlc3lzdGVtLCB0aGlzIGRlZmluaXRlbHkgd2FycmFudHMgc29tZSBzZXJpb3VzIGZ1enppbmcuIE15IG1haW4gdGFyZ2V0cyBmb3IgZnV6emluZyBzaG91bGQgYmUgYWxsIHRoZSBuZXdseSBpbnRyb2R1Y2VkIGZ1bmN0aW9uczogYG1pbml4X2Rpb19yZWFkX2l0ZXJgLCBgbWluaXhfZGlvX3dyaXRlX2l0ZXJgLCBgbWluaXhfZmlsZV9yZWFkX2l0ZXJgLCBgbWluaXhfZmlsZV93cml0ZV9pdGVyYCwgYG1pbml4X2lvbWFwX2JlZ2luYCwgYG1pbml4X2lvbWFwX2VuZGAsIGBtaW5peF93cml0ZWJhY2tfcmFuZ2VgLCBgbWluaXhfd3JpdGVwYWdlc2AsIGBtaW5peF9yZWFkX2ZvbGlvYCwgYG1pbml4X3JlYWRhaGVhZGAsIGBtaW5peF9ibWFwYCwgYF9fcGFnZV9zeW1saW5rYCwgYW5kIGBtaW5peF9nZXRfbGlua2AuIFRoZXNlIGFyZSB0aGUgY3JpdGljYWwgZW50cnkgcG9pbnRzIGFuZCBkYXRhIG1hbmlwdWxhdGlvbiBmdW5jdGlvbnMgdGhhdCBuZWVkIHRoZSBtb3N0IHNjcnV0aW55LgoKQmVmb3JlIEkgZ28gYW55IGZ1cnRoZXIsIEkmIzM5O2xsIHF1aWNrbHkgY2hlY2sgYGZzL21pbml4L0tjb25maWdgIHRvIGNvbmZpcm0gd2hhdCBjb25maWcgb3B0aW9ucyBhcmUgaW52b2x2ZWQgaW4gZW5hYmxpbmcgdGhlIE1pbml4IGZpbGVzeXN0ZW0uIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBrbm93IGhvdyB0byBhY3R1YWxseSBlbmFibGUgdGhpcyBjb2RlIHBhdGggYW5kIHdoaWNoIGNvbmZpZ3MgYXJlIHJlbGV2YW50IGZvciB0aGUgYnVpbGQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjggMDU6MzM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE1JTklYX0ZTJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvbWluaXgvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9taW5peC9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG5mcy9taW5peC9LY29uZmlnOjI6Y29uZmlnIE1JTklYX0ZTXG5mcy9taW5peC9LY29uZmlnLTMtXHR0cmlzdGF0ZSBcJiMzNDtNaW5peCBmaWxlIHN5c3RlbSBzdXBwb3J0XCYjMzQ7XG4tLVxuZnMvbWluaXgvS2NvbmZpZy0yMC1cbmZzL21pbml4L0tjb25maWc6MjE6Y29uZmlnIE1JTklYX0ZTX05BVElWRV9FTkRJQU5cbmZzL21pbml4L0tjb25maWctMjItXHRkZWZfYm9vbCBNSU5JWF9GU1xuLS1cbmZzL21pbml4L0tjb25maWctMjQtXG5mcy9taW5peC9LY29uZmlnOjI1OmNvbmZpZyBNSU5JWF9GU19CSUdfRU5ESUFOXzE2QklUX0lOREVYRURcbmZzL21pbml4L0tjb25maWctMjYtXHRkZWZfYm9vbCBNSU5JWF9GU1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI4IDA1OjMzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyODEyCgkJCQkJCQlvdXRwdXQ6IDU1CgkJCQkJCQl0aG91Z2h0czogMTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbm5lciBtb25vbG9ndWU6CgoqKkNoZWNraW5nIE15IEFzc3VtcHRpb25zOiBDb25maWcgYW5kIEZvY3VzKioKCkFscmlnaHQsIHRoZSBjb250ZXh0IGlzIHRoZSBgTUlOSVhfRlNgIGNvbmZpZy4gUmlnaHQgYXdheSwgbXkgbWluZCBzdGFydHMgdGlja2luZy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJiMzOTttIGdyb3VuZGVkIGluIHRoZSBzcGVjaWZpY3Mgb2YgKnRoYXQqIHBhcnRpY3VsYXIgY29uZmlndXJhdGlvbi4gQmVmb3JlIEkgZGVsdmUgaW50byBhbnl0aGluZyBlbHNlLCBpdCYjMzk7cyBlc3NlbnRpYWwgdG8gcXVpY2tseSB2ZXJpZnkgdGhhdCBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSByZWxldmFudCBmb2N1cyBzeW1ib2xzIGlzIGFjY3VyYXRlLiBJIGRvbiYjMzk7dCB3YW50IHRvIHdhc3RlIHRpbWUgZG93biBhIHJhYmJpdCBob2xlIGJhc2VkIG9uIGFuIGluY29ycmVjdCBwcmVtaXNlLiBMZXQmIzM5O3MgbWFrZSBzdXJlIEkmIzM5O20gdHJhY2tpbmcgd2l0aCB0aGUgcmlnaHQgdmFyaWFibGVzIGFuZCBkZWZpbml0aW9ucyBmb3IgYE1JTklYX0ZTYC4gVGhpcyBzZWVtcyBsaWtlIGEgc2FuaXR5IGNoZWNrLCBtb3JlIHRoYW4gYW55dGhpbmcgZWxzZSwgYnV0IGVzc2VudGlhbCB0byBlbnN1cmUgZWZmaWNpZW5jeSBpbiB0aGUgbG9uZyBydW4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjggMDU6MzM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7XihzdGF0aWMgKT9bYS16QS1aXzAtOV0mIzQzOyBcXCoqbWluaXhfW2EtekEtWl8wLTldJiM0MztcXCgmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9taW5peC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvbWluaXgvYml0bWFwLmM9Mjc9c3RhdGljIF9fdTMyIGNvdW50X2ZyZWUoc3RydWN0IGJ1ZmZlcl9oZWFkICptYXBbXSwgdW5zaWduZWQgYmxvY2tzaXplLCBfX3UzMiBudW1iaXRzKVxuLS1cbmZzL21pbml4L2JpdG1hcC5jLTQxLVxuZnMvbWluaXgvYml0bWFwLmM6NDI6dm9pZCBtaW5peF9mcmVlX2Jsb2NrKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHVuc2lnbmVkIGxvbmcgYmxvY2spXG5mcy9taW5peC9iaXRtYXAuYy00My17XG4tLVxuZnMvbWluaXgvYml0bWFwLmMtNzAtXG5mcy9taW5peC9iaXRtYXAuYzo3MTppbnQgbWluaXhfbmV3X2Jsb2NrKHN0cnVjdCBpbm9kZSAqIGlub2RlKVxuZnMvbWluaXgvYml0bWFwLmMtNzIte1xuLS1cbmZzL21pbml4L2JpdG1hcC5jPTEzMT1taW5peF9WMl9yYXdfaW5vZGUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgaW5vX3QgaW5vLCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKipiaClcbi0tXG5mcy9taW5peC9iaXRtYXAuYy0xNTctXG5mcy9taW5peC9iaXRtYXAuYzoxNTg6c3RhdGljIHZvaWQgbWluaXhfY2xlYXJfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSlcbmZzL21pbml4L2JpdG1hcC5jLTE1OS17XG4tLVxuZnMvbWluaXgvYml0bWFwLmMtMTgyLVxuZnMvbWluaXgvYml0bWFwLmM6MTgzOnZvaWQgbWluaXhfZnJlZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKiBpbm9kZSlcbmZzL21pbml4L2JpdG1hcC5jLTE4NC17XG4tLVxuZnMvbWluaXgvZGlyLmM9MTg9dHlwZWRlZiBzdHJ1Y3QgbWluaXgzX2Rpcl9lbnRyeSBtaW5peDNfZGlyZW50O1xuZnMvbWluaXgvZGlyLmMtMTktXG5mcy9taW5peC9kaXIuYzoyMDpzdGF0aWMgaW50IG1pbml4X3JlYWRkaXIoc3RydWN0IGZpbGUgKiwgc3RydWN0IGRpcl9jb250ZXh0ICopO1xuZnMvbWluaXgvZGlyLmMtMjEtXG4tLVxuZnMvbWluaXgvZGlyLmM9NDM9c3RhdGljIHZvaWQgZGlyX2NvbW1pdF9jaHVuayhzdHJ1Y3QgZm9saW8gKmZvbGlvLCBsb2ZmX3QgcG9zLCB1bnNpZ25lZCBsZW4pXG4tLVxuZnMvbWluaXgvZGlyLmMtNTYtXG5mcy9taW5peC9kaXIuYzo1NzpzdGF0aWMgaW50IG1pbml4X2hhbmRsZV9kaXJzeW5jKHN0cnVjdCBpbm9kZSAqZGlyKVxuZnMvbWluaXgvZGlyLmMtNTgte1xuLS1cbmZzL21pbml4L2Rpci5jPTc4PXN0YXRpYyBpbmxpbmUgdm9pZCAqbWluaXhfbmV4dF9lbnRyeSh2b2lkICpkZSwgc3RydWN0IG1pbml4X3NiX2luZm8gKnNiaSlcbi0tXG5mcy9taW5peC9kaXIuYy04Mi1cbmZzL21pbml4L2Rpci5jOjgzOnN0YXRpYyBpbnQgbWluaXhfcmVhZGRpcihzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IGRpcl9jb250ZXh0ICpjdHgpXG5mcy9taW5peC9kaXIuYy04NC17XG4tLVxuZnMvbWluaXgvZGlyLmM9MTM3PXN0YXRpYyBpbmxpbmUgaW50IG5hbWVjb21wYXJlKGludCBsZW4sIGludCBtYXhsZW4sXG4tLVxuZnMvbWluaXgvZGlyLmMtMTUzLSAqL1xuZnMvbWluaXgvZGlyLmM6MTU0Om1pbml4X2RpcmVudCAqbWluaXhfZmluZF9lbnRyeShzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBmb2xpbyAqKmZvbGlvcClcbmZzL21pbml4L2Rpci5jLTE1NS17XG4tLVxuZnMvbWluaXgvZGlyLmMtMTk4LVxuZnMvbWluaXgvZGlyLmM6MTk5OmludCBtaW5peF9hZGRfbGluayhzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBpbm9kZSAqaW5vZGUpXG5mcy9taW5peC9kaXIuYy0yMDAte1xuLS1cbmZzL21pbml4L2Rpci5jLTI4NS1cbmZzL21pbml4L2Rpci5jOjI4NjppbnQgbWluaXhfZGVsZXRlX2VudHJ5KHN0cnVjdCBtaW5peF9kaXJfZW50cnkgKmRlLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuZnMvbWluaXgvZGlyLmMtMjg3LXtcbi0tXG5mcy9taW5peC9kaXIuYy0zMDktXG5mcy9taW5peC9kaXIuYzozMTA6aW50IG1pbml4X21ha2VfZW1wdHkoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGlub2RlICpkaXIpXG5mcy9taW5peC9kaXIuYy0zMTEte1xuLS1cbmZzL21pbml4L2Rpci5jLTM1Ni0gKi9cbmZzL21pbml4L2Rpci5jOjM1NzppbnQgbWluaXhfZW1wdHlfZGlyKHN0cnVjdCBpbm9kZSAqIGlub2RlKVxuZnMvbWluaXgvZGlyLmMtMzU4LXtcbi0tXG5mcy9taW5peC9kaXIuYy00MDYtLyogUmVsZWFzZXMgdGhlIHBhZ2UgKi9cbmZzL21pbml4L2Rpci5jOjQwNzppbnQgbWluaXhfc2V0X2xpbmsoc3RydWN0IG1pbml4X2Rpcl9lbnRyeSAqZGUsIHN0cnVjdCBmb2xpbyAqZm9saW8sXG5mcy9taW5peC9kaXIuYy00MDgtXHRcdHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4tLVxuZnMvbWluaXgvZGlyLmM9NDMxPXN0cnVjdCBtaW5peF9kaXJfZW50cnkgKm1pbml4X2RvdGRvdChzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGZvbGlvICoqZm9saW9wKVxuLS1cbmZzL21pbml4L2Rpci5jLTQ0MC1cbmZzL21pbml4L2Rpci5jOjQ0MTppbm9fdCBtaW5peF9pbm9kZV9ieV9uYW1lKHN0cnVjdCBkZW50cnkgKmRlbnRyeSlcbmZzL21pbml4L2Rpci5jLTQ0Mi17XG4tLVxuZnMvbWluaXgvZmlsZS5jLTEyLVxuZnMvbWluaXgvZmlsZS5jOjEzOmludCBtaW5peF9mc3luYyhzdHJ1Y3QgZmlsZSAqZmlsZSwgbG9mZl90IHN0YXJ0LCBsb2ZmX3QgZW5kLCBpbnQgZGF0YXN5bmMpXG5mcy9taW5peC9maWxlLmMtMTQte1xuLS1cbmZzL21pbml4L2ZpbGUuYy0xOS1cbmZzL21pbml4L2ZpbGUuYzoyMDpzdGF0aWMgc3NpemVfdCBtaW5peF9kaW9fcmVhZF9pdGVyKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICp0bylcbmZzL21pbml4L2ZpbGUuYy0yMS17XG4tLVxuZnMvbWluaXgvZmlsZS5jLTMzLVxuZnMvbWluaXgvZmlsZS5jOjM0OnN0YXRpYyBpbnQgbWluaXhfZGlvX3dyaXRlX2VuZF9pbyhzdHJ1Y3Qga2lvY2IgKmlvY2IsIHNzaXplX3Qgc2l6ZSwgaW50IGVycm9yLFxuZnMvbWluaXgvZmlsZS5jLTM1LVx0XHR1bnNpZ25lZCBpbnQgZmxhZ3MpXG4tLVxuZnMvbWluaXgvZmlsZS5jPTUxPXN0YXRpYyBjb25zdCBzdHJ1Y3QgaW9tYXBfZGlvX29wcyBtaW5peF9kaW9fd3JpdGVfb3BzID0ge1xuLS1cbmZzL21pbml4L2ZpbGUuYy01NC1cbmZzL21pbml4L2ZpbGUuYzo1NTpzdGF0aWMgc3NpemVfdCBtaW5peF9kaW9fd3JpdGVfaXRlcihzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqZnJvbSlcbmZzL21pbml4L2ZpbGUuYy01Ni17XG4tLVxuZnMvbWluaXgvZmlsZS5jLTExNC1cbmZzL21pbml4L2ZpbGUuYzoxMTU6c3RhdGljIHNzaXplX3QgbWluaXhfZmlsZV9yZWFkX2l0ZXIoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKnRvKVxuZnMvbWluaXgvZmlsZS5jLTExNi17XG4tLVxuZnMvbWluaXgvZmlsZS5jLTEyMi1cbmZzL21pbml4L2ZpbGUuYzoxMjM6c3RhdGljIHNzaXplX3QgbWluaXhfZmlsZV93cml0ZV9pdGVyKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICpmcm9tKVxuZnMvbWluaXgvZmlsZS5jLTEyNC17XG4tLVxuZnMvbWluaXgvZmlsZS5jLTE1NS1cbmZzL21pbml4L2ZpbGUuYzoxNTY6c3RhdGljIGludCBtaW5peF9maWxlX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbHApXG5mcy9taW5peC9maWxlLmMtMTU3LXtcbi0tXG5mcy9taW5peC9maWxlLmM9MTY3PWNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgbWluaXhfZmlsZV9vcGVyYXRpb25zID0ge1xuLS1cbmZzL21pbml4L2ZpbGUuYy0xNzctXG5mcy9taW5peC9maWxlLmM6MTc4OmludCBtaW5peF9zZXRhdHRyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXG5mcy9taW5peC9maWxlLmMtMTc5LVx0c3RydWN0IGlhdHRyICphdHRyKVxuLS1cbmZzL21pbml4L2lub2RlLmMtMjQtXG5mcy9taW5peC9pbm9kZS5jOjI1OnN0YXRpYyBpbnQgbWluaXhfd3JpdGVfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSxcbmZzL21pbml4L2lub2RlLmMtMjYtXHRcdHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqd2JjKTtcbmZzL21pbml4L2lub2RlLmM6Mjc6c3RhdGljIGludCBtaW5peF9zdGF0ZnMoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3Qga3N0YXRmcyAqYnVmKTtcbmZzL21pbml4L2lub2RlLmMtMjgtXG5mcy9taW5peC9pbm9kZS5jPTI5PXZvaWQgX19taW5peF9lcnJvcl9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBjb25zdCBjaGFyICpmdW5jdGlvbixcbi0tXG5mcy9taW5peC9pbm9kZS5jLTQ0LVxuZnMvbWluaXgvaW5vZGUuYzo0NTpzdGF0aWMgdm9pZCBtaW5peF9ldmljdF9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuZnMvbWluaXgvaW5vZGUuYy00Ni17XG4tLVxuZnMvbWluaXgvaW5vZGUuYy01OS1cbmZzL21pbml4L2lub2RlLmM6NjA6c3RhdGljIHZvaWQgbWluaXhfcHV0X3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXG5mcy9taW5peC9pbm9kZS5jLTYxLXtcbi0tXG5mcy9taW5peC9pbm9kZS5jPTgyPXN0YXRpYyBzdHJ1Y3QgaW5vZGUgKm1pbml4X2FsbG9jX2lub2RlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXG4tLVxuZnMvbWluaXgvaW5vZGUuYy05Mi1cbmZzL21pbml4L2lub2RlLmM6OTM6c3RhdGljIHZvaWQgbWluaXhfZnJlZV9pbl9jb3JlX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpXG5mcy9taW5peC9pbm9kZS5jLTk0LXtcbi0tXG5mcy9taW5peC9pbm9kZS5jPTEyNz1zdGF0aWMgY29uc3Qgc3RydWN0IHN1cGVyX29wZXJhdGlvbnMgbWluaXhfc29wcyA9IHtcbi0tXG5mcy9taW5peC9pbm9kZS5jLTEzNS1cbmZzL21pbml4L2lub2RlLmM6MTM2OnN0YXRpYyBpbnQgbWluaXhfcmVjb25maWd1cmUoc3RydWN0IGZzX2NvbnRleHQgKmZjKVxuZnMvbWluaXgvaW5vZGUuYy0xMzcte1xuLS1cbmZzL21pbml4L2lub2RlLmMtMTczLVxuZnMvbWluaXgvaW5vZGUuYzoxNzQ6c3RhdGljIGJvb2wgbWluaXhfY2hlY2tfc3VwZXJibG9jayhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxuZnMvbWluaXgvaW5vZGUuYy0xNzUte1xuLS1cbmZzL21pbml4L2lub2RlLmMtMjIwLVxuZnMvbWluaXgvaW5vZGUuYzoyMjE6c3RhdGljIGludCBtaW5peF9maWxsX3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqcywgc3RydWN0IGZzX2NvbnRleHQgKmZjKVxuZnMvbWluaXgvaW5vZGUuYy0yMjIte1xuLS1cbmZzL21pbml4L2lub2RlLmMtNDAzLVxuZnMvbWluaXgvaW5vZGUuYzo0MDQ6c3RhdGljIGludCBtaW5peF9nZXRfdHJlZShzdHJ1Y3QgZnNfY29udGV4dCAqZmMpXG5mcy9taW5peC9pbm9kZS5jLTQwNS17XG4tLVxuZnMvbWluaXgvaW5vZGUuYz00MDk9c3RhdGljIGNvbnN0IHN0cnVjdCBmc19jb250ZXh0X29wZXJhdGlvbnMgbWluaXhfY29udGV4dF9vcHMgPSB7XG4tLVxuZnMvbWluaXgvaW5vZGUuYy00MTMtXG5mcy9taW5peC9pbm9kZS5jOjQxNDpzdGF0aWMgaW50IG1pbml4X2luaXRfZnNfY29udGV4dChzdHJ1Y3QgZnNfY29udGV4dCAqZmMpXG5mcy9taW5peC9pbm9kZS5jLTQxNS17XG4tLVxuZnMvbWluaXgvaW5vZGUuYy00MjAtXG5mcy9taW5peC9pbm9kZS5jOjQyMTpzdGF0aWMgaW50IG1pbml4X3N0YXRmcyhzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBrc3RhdGZzICpidWYpXG5mcy9taW5peC9pbm9kZS5jLTQyMi17XG4tLVxuZnMvbWluaXgvaW5vZGUuYy00MzgtXG5mcy9taW5peC9pbm9kZS5jOjQzOTpzdGF0aWMgc3NpemVfdCBtaW5peF93cml0ZWJhY2tfcmFuZ2Uoc3RydWN0IGlvbWFwX3dyaXRlcGFnZV9jdHggKndwYyxcbmZzL21pbml4L2lub2RlLmMtNDQwLVx0c3RydWN0IGZvbGlvICpmb2xpbywgdTY0IHBvcywgdW5zaWduZWQgaW50IGxlbiwgdTY0IGVuZF9wb3MpXG4tLVxuZnMvbWluaXgvaW5vZGUuYz00NTk9c3RhdGljIGNvbnN0IHN0cnVjdCBpb21hcF93cml0ZWJhY2tfb3BzIG1pbml4X3dyaXRlYmFja19vcHMgPSB7XG4tLVxuZnMvbWluaXgvaW5vZGUuYy00NjMtXG5mcy9taW5peC9pbm9kZS5jOjQ2NDppbnQgbWluaXhfZ2V0X2Jsb2NrKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHNlY3Rvcl90IGJsb2NrLFxuZnMvbWluaXgvaW5vZGUuYy00NjUtXHRcdCAgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoX3Jlc3VsdCwgaW50IGNyZWF0ZSlcbi0tXG5mcy9taW5peC9pbm9kZS5jLTQ3My0vKiBUaGUgb2xkIG1pbml4X3dyaXRlcGFnZXMsIHByZXNlcnZlZCBmb3IgZGlyZWN0b3J5IG9wZXJhdGlvbnMuICovXG5mcy9taW5peC9pbm9kZS5jOjQ3NDpzdGF0aWMgaW50IG1pbml4X2Jsb2NrX3dyaXRlcGFnZXMoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXG5mcy9taW5peC9pbm9kZS5jLTQ3NS1cdFx0c3RydWN0IHdyaXRlYmFja19jb250cm9sICp3YmMpXG4tLVxuZnMvbWluaXgvaW5vZGUuYy00NzktXG5mcy9taW5peC9pbm9kZS5jOjQ4MDpzdGF0aWMgaW50IG1pbml4X3dyaXRlcGFnZXMoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXG5mcy9taW5peC9pbm9kZS5jLTQ4MS1cdFx0c3RydWN0IHdyaXRlYmFja19jb250cm9sICp3YmMpXG4tLVxuZnMvbWluaXgvaW5vZGUuYy00OTAtXG5mcy9taW5peC9pbm9kZS5jOjQ5MTpzdGF0aWMgaW50IG1pbml4X3JlYWRfZm9saW8oc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBmb2xpbyAqZm9saW8pXG5mcy9taW5peC9pbm9kZS5jLTQ5Mi17XG4tLVxuZnMvbWluaXgvaW5vZGUuYy00OTktLyogVGhlIG9sZCBtaW5peF9yZWFkX2ZvbGlvLCBwcmVzZXJ2ZWQgZm9yIGRpcmVjdG9yeSBvcGVyYXRpb25zLiAqL1xuZnMvbWluaXgvaW5vZGUuYzo1MDA6c3RhdGljIGludCBtaW5peF9ibG9ja19yZWFkX2ZvbGlvKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuZnMvbWluaXgvaW5vZGUuYy01MDEte1xuLS1cbmZzL21pbml4L2lub2RlLmMtNTA0LVxuZnMvbWluaXgvaW5vZGUuYzo1MDU6c3RhdGljIHZvaWQgbWluaXhfcmVhZGFoZWFkKHN0cnVjdCByZWFkYWhlYWRfY29udHJvbCAqcmFjKVxuZnMvbWluaXgvaW5vZGUuYy01MDYte1xuLS1cbmZzL21pbml4L2lub2RlLmMtNTExLVxuZnMvbWluaXgvaW5vZGUuYzo1MTI6aW50IG1pbml4X3ByZXBhcmVfY2h1bmsoc3RydWN0IGZvbGlvICpmb2xpbywgbG9mZl90IHBvcywgdW5zaWduZWQgbGVuKVxuZnMvbWluaXgvaW5vZGUuYy01MTMte1xuLS1cbmZzL21pbml4L2lub2RlLmMtNTE2LVxuZnMvbWluaXgvaW5vZGUuYzo1MTc6c3RhdGljIHZvaWQgbWluaXhfd3JpdGVfZmFpbGVkKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBsb2ZmX3QgdG8pXG5mcy9taW5peC9pbm9kZS5jLTUxOC17XG4tLVxuZnMvbWluaXgvaW5vZGUuYy01MjYtXG5mcy9taW5peC9pbm9kZS5jOjUyNzpzdGF0aWMgaW50IG1pbml4X3dyaXRlX2JlZ2luKGNvbnN0IHN0cnVjdCBraW9jYiAqaW9jYixcbmZzL21pbml4L2lub2RlLmMtNTI4LVx0XHRcdCAgICAgc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXG4tLVxuZnMvbWluaXgvaW5vZGUuYy01NDAtXG5mcy9taW5peC9pbm9kZS5jOjU0MTpzdGF0aWMgc2VjdG9yX3QgbWluaXhfYm1hcChzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgc2VjdG9yX3QgYmxvY2spXG5mcy9taW5peC9pbm9kZS5jLTU0Mi17XG4tLVxuZnMvbWluaXgvaW5vZGUuYz01NzU9c3RhdGljIGNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIG1pbml4X3N5bWxpbmtfaW5vZGVfb3BlcmF0aW9ucyA9IHtcbi0tXG5mcy9taW5peC9pbm9kZS5jLTU4MC1cbmZzL21pbml4L2lub2RlLmM6NTgxOnZvaWQgbWluaXhfc2V0X2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGRldl90IHJkZXYpXG5mcy9taW5peC9pbm9kZS5jLTU4Mi17XG4tLVxuZnMvbWluaXgvaW5vZGUuYz03MzE9c3RhdGljIHN0cnVjdCBidWZmZXJfaGVhZCAqIFYyX21pbml4X3VwZGF0ZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKiBpbm9kZSlcbi0tXG5mcy9taW5peC9pbm9kZS5jLTc1Ni1cbmZzL21pbml4L2lub2RlLmM6NzU3OnN0YXRpYyBpbnQgbWluaXhfd3JpdGVfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IHdyaXRlYmFja19jb250cm9sICp3YmMpXG5mcy9taW5peC9pbm9kZS5jLTc1OC17XG4tLVxuZnMvbWluaXgvaW5vZGUuYy03NzktXG5mcy9taW5peC9pbm9kZS5jOjc4MDppbnQgbWluaXhfZ2V0YXR0cihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgY29uc3Qgc3RydWN0IHBhdGggKnBhdGgsXG5mcy9taW5peC9pbm9kZS5jLTc4MS1cdFx0ICBzdHJ1Y3Qga3N0YXQgKnN0YXQsIHUzMiByZXF1ZXN0X21hc2ssIHVuc2lnbmVkIGludCBmbGFncylcbi0tXG5mcy9taW5peC9pbm9kZS5jLTc5Ny0gKi9cbmZzL21pbml4L2lub2RlLmM6Nzk4OnZvaWQgbWluaXhfdHJ1bmNhdGUoc3RydWN0IGlub2RlICogaW5vZGUpXG5mcy9taW5peC9pbm9kZS5jLTc5OS17XG4tLVxuZnMvbWluaXgvaW9tYXAuYy0xNC0gKi9cbmZzL21pbml4L2lvbWFwLmM6MTU6c3RhdGljIGludCBtaW5peF9pb21hcF9iZWdpbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb2ZmX3Qgb2Zmc2V0LCBsb2ZmX3QgbGVuZ3RoLFxuZnMvbWluaXgvaW9tYXAuYy0xNi1cdHVuc2lnbmVkIGludCBmbGFncywgc3RydWN0IGlvbWFwICppb21hcCwgc3RydWN0IGlvbWFwICpzcmNtYXApXG4tLVxuZnMvbWluaXgvaW9tYXAuYy0xMDktICovXG5mcy9taW5peC9pb21hcC5jOjExMDpzdGF0aWMgaW50IG1pbml4X2lvbWFwX2VuZChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb2ZmX3Qgb2Zmc2V0LCBsb2ZmX3QgbGVuZ3RoLFxuZnMvbWluaXgvaW9tYXAuYy0xMTEtXHRzc2l6ZV90IHdyaXR0ZW4sIHVuc2lnbmVkIGludCBmbGFncywgc3RydWN0IGlvbWFwICppb21hcClcbi0tXG5mcy9taW5peC9taW5peC5oPTUzPXN0cnVjdCBpbm9kZSAqbWluaXhfbmV3X2lub2RlKGNvbnN0IHN0cnVjdCBpbm9kZSAqLCB1bW9kZV90KTtcbmZzL21pbml4L21pbml4Lmg6NTQ6dm9pZCBtaW5peF9mcmVlX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpO1xuZnMvbWluaXgvbWluaXguaC01NS11bnNpZ25lZCBsb25nIG1pbml4X2NvdW50X2ZyZWVfaW5vZGVzKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpO1xuZnMvbWluaXgvbWluaXguaDo1NjppbnQgbWluaXhfbmV3X2Jsb2NrKHN0cnVjdCBpbm9kZSAqaW5vZGUpO1xuZnMvbWluaXgvbWluaXguaDo1Nzp2b2lkIG1pbml4X2ZyZWVfYmxvY2soc3RydWN0IGlub2RlICppbm9kZSwgdW5zaWduZWQgbG9uZyBibG9jayk7XG5mcy9taW5peC9taW5peC5oLTU4LXVuc2lnbmVkIGxvbmcgbWluaXhfY291bnRfZnJlZV9ibG9ja3Moc3RydWN0IHN1cGVyX2Jsb2NrICpzYik7XG5mcy9taW5peC9taW5peC5oOjU5OmludCBtaW5peF9nZXRhdHRyKHN0cnVjdCBtbnRfaWRtYXAgKiwgY29uc3Qgc3RydWN0IHBhdGggKixcbmZzL21pbml4L21pbml4LmgtNjAtXHRcdHN0cnVjdCBrc3RhdCAqLCB1MzIsIHVuc2lnbmVkKTtcbmZzL21pbml4L21pbml4Lmg6NjE6aW50IG1pbml4X3NldGF0dHIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcbmZzL21pbml4L21pbml4LmgtNjItXHRzdHJ1Y3QgaWF0dHIgKmF0dHIpO1xuZnMvbWluaXgvbWluaXguaDo2MzppbnQgbWluaXhfcHJlcGFyZV9jaHVuayhzdHJ1Y3QgZm9saW8gKmZvbGlvLCBsb2ZmX3QgcG9zLCB1bnNpZ25lZCBsZW4pO1xuZnMvbWluaXgvbWluaXguaC02NC1zdHJ1Y3QgbWFwcGluZ19tZXRhZGF0YV9iaHMgKm1pbml4X2dldF9tZXRhZGF0YV9iaHMoc3RydWN0IGlub2RlICppbm9kZSk7XG5mcy9taW5peC9taW5peC5oOjY1OmludCBtaW5peF9mc3luYyhzdHJ1Y3QgZmlsZSAqZmlsZSwgbG9mZl90IHN0YXJ0LCBsb2ZmX3QgZW5kLCBpbnQgZGF0YXN5bmMpO1xuZnMvbWluaXgvbWluaXguaC02Ni1cbi0tXG5mcy9taW5peC9taW5peC5oPTc4PXN0cnVjdCBtaW5peF9kaXJfZW50cnkgKm1pbml4X2ZpbmRfZW50cnkoc3RydWN0IGRlbnRyeSAqLCBzdHJ1Y3QgZm9saW8gKiopO1xuZnMvbWluaXgvbWluaXguaDo3OTppbnQgbWluaXhfYWRkX2xpbmsoc3RydWN0IGRlbnRyeSosIHN0cnVjdCBpbm9kZSopO1xuZnMvbWluaXgvbWluaXguaDo4MDppbnQgbWluaXhfZGVsZXRlX2VudHJ5KHN0cnVjdCBtaW5peF9kaXJfZW50cnkgKiwgc3RydWN0IGZvbGlvICopO1xuZnMvbWluaXgvbWluaXguaDo4MTppbnQgbWluaXhfbWFrZV9lbXB0eShzdHJ1Y3QgaW5vZGUqLCBzdHJ1Y3QgaW5vZGUqKTtcbmZzL21pbml4L21pbml4Lmg6ODI6aW50IG1pbml4X2VtcHR5X2RpcihzdHJ1Y3QgaW5vZGUqKTtcbmZzL21pbml4L21pbml4Lmg6ODM6aW50IG1pbml4X3NldF9saW5rKHN0cnVjdCBtaW5peF9kaXJfZW50cnkgKmRlLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuZnMvbWluaXgvbWluaXguaC04NC1cdFx0c3RydWN0IGlub2RlICppbm9kZSk7XG4tLVxuZnMvbWluaXgvbWluaXguaD04OD1zdHJ1Y3QgbWluaXhfZGlyX2VudHJ5ICptaW5peF9kb3Rkb3Qoc3RydWN0IGlub2RlKiwgc3RydWN0IGZvbGlvICoqKTtcbmZzL21pbml4L21pbml4Lmg6ODk6aW5vX3QgbWluaXhfaW5vZGVfYnlfbmFtZShzdHJ1Y3QgZGVudHJ5Kik7XG5mcy9taW5peC9taW5peC5oLTkwLVxuLS1cbmZzL21pbml4L25hbWVpLmM9MjQ9c3RhdGljIHN0cnVjdCBkZW50cnkgKm1pbml4X2xvb2t1cChzdHJ1Y3QgaW5vZGUgKiBkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW5zaWduZWQgaW50IGZsYWdzKVxuLS1cbmZzL21pbml4L25hbWVpLmMtMzctXG5mcy9taW5peC9uYW1laS5jOjM4OnN0YXRpYyBpbnQgbWluaXhfbWtub2Qoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxuZnMvbWluaXgvbmFtZWkuYy0zOS1cdFx0ICAgICAgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlLCBkZXZfdCByZGV2KVxuLS1cbmZzL21pbml4L25hbWVpLmMtNTQtXG5mcy9taW5peC9uYW1laS5jOjU1OnN0YXRpYyBpbnQgbWluaXhfdG1wZmlsZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXG5mcy9taW5peC9uYW1laS5jLTU2LVx0XHRcdCBzdHJ1Y3QgZmlsZSAqZmlsZSwgdW1vZGVfdCBtb2RlKVxuLS1cbmZzL21pbml4L25hbWVpLmMtNjctXG5mcy9taW5peC9uYW1laS5jOjY4OnN0YXRpYyBpbnQgbWluaXhfY3JlYXRlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbmZzL21pbml4L25hbWVpLmMtNjktXHRcdFx0c3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUsIGJvb2wgZXhjbClcbi0tXG5mcy9taW5peC9uYW1laS5jPTEwOT1zdGF0aWMgaW50IF9fcGFnZV9zeW1saW5rKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGNvbnN0IGNoYXIgKnN5bW5hbWUsIGludCBsZW4pXG4tLVxuZnMvbWluaXgvbmFtZWkuYy0xNjgtXG5mcy9taW5peC9uYW1laS5jOjE2OTpzdGF0aWMgaW50IG1pbml4X3N5bWxpbmsoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxuZnMvbWluaXgvbmFtZWkuYy0xNzAtXHRcdFx0IHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgY29uc3QgY2hhciAqc3ltbmFtZSlcbi0tXG5mcy9taW5peC9uYW1laS5jLTE5Mi1cbmZzL21pbml4L25hbWVpLmM6MTkzOnN0YXRpYyBpbnQgbWluaXhfbGluayhzdHJ1Y3QgZGVudHJ5ICogb2xkX2RlbnRyeSwgc3RydWN0IGlub2RlICogZGlyLFxuZnMvbWluaXgvbmFtZWkuYy0xOTQtXHRzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpXG4tLVxuZnMvbWluaXgvbmFtZWkuYz0yMDQ9c3RhdGljIHN0cnVjdCBkZW50cnkgKm1pbml4X21rZGlyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbi0tXG5mcy9taW5peC9uYW1laS5jLTIzNy1cbmZzL21pbml4L25hbWVpLmM6MjM4OnN0YXRpYyBpbnQgbWluaXhfdW5saW5rKHN0cnVjdCBpbm9kZSAqIGRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5KVxuZnMvbWluaXgvbmFtZWkuYy0yMzkte1xuLS1cbmZzL21pbml4L25hbWVpLmMtMjYyLVxuZnMvbWluaXgvbmFtZWkuYzoyNjM6c3RhdGljIGludCBtaW5peF9ybWRpcihzdHJ1Y3QgaW5vZGUgKiBkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSlcbmZzL21pbml4L25hbWVpLmMtMjY0LXtcbi0tXG5mcy9taW5peC9uYW1laS5jLTI4Ni1cbmZzL21pbml4L25hbWVpLmM6Mjg3OnN0YXRpYyBpbnQgbWluaXhfcmVuYW1lKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxuZnMvbWluaXgvbmFtZWkuYy0yODgtXHRcdFx0c3RydWN0IGlub2RlICpvbGRfZGlyLCBzdHJ1Y3QgZGVudHJ5ICpvbGRfZGVudHJ5LFxuLS1cbmZzL21pbml4L25hbWVpLmMtMzczLS8qIHN0cmFpZ2h0IHVwIHRoaWV2ZXJ5IGhlcmU7IHN0b2xlbiB2ZXJiYXRpbSBmcm9tIGV4dDRfZ2V0X2xpbmsgKi9cbmZzL21pbml4L25hbWVpLmM6Mzc0OnN0YXRpYyB2b2lkIG1pbml4X2ZyZWVfbGluayh2b2lkICpiaClcbmZzL21pbml4L25hbWVpLmMtMzc1LXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yOCAwNTozMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODUxOQoJCQkJCQkJb3V0cHV0OiAyNjEKCQkJCQkJCXRob3VnaHRzOiAxMTMyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlJlZmluaW5nIHRoZSBNSU5JWCBGaWxlc3lzdGVtIFN5bWJvbCBMaXN0KioKCk9rYXksIGxldCYjMzk7cyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJiMzOTt2ZSBnb3QgdGhlIHJlbGV2YW50IHN5bWJvbHMgbmFpbGVkIGRvd24gZm9yIHRoaXMgTUlOSVggZmlsZXN5c3RlbSBwYXRjaC4gTXkgaW5pdGlhbCBsaXN0IGluY2x1ZGVzOiBgbWluaXhfZGlvX3JlYWRfaXRlcmAsIGBtaW5peF9kaW9fd3JpdGVfaXRlcmAsIGBtaW5peF9kaW9fd3JpdGVfZW5kX2lvYCwgYG1pbml4X2ZpbGVfcmVhZF9pdGVyYCwgYG1pbml4X2ZpbGVfd3JpdGVfaXRlcmAsIGBtaW5peF9pb21hcF9iZWdpbmAsIGBtaW5peF9pb21hcF9lbmRgLCBgbWluaXhfd3JpdGViYWNrX3JhbmdlYCwgYG1pbml4X3dyaXRlcGFnZXNgLCBgbWluaXhfcmVhZF9mb2xpb2AsIGBtaW5peF9yZWFkYWhlYWRgLCBgbWluaXhfYm1hcGAsIGBfX3BhZ2Vfc3ltbGlua2AsIGBtaW5peF9nZXRfbGlua2AsIGFuZCBgbWluaXhfZnJlZV9saW5rYC4KCkZpcnN0LCBJIG5lZWQgdG8gdmVyaWZ5IHdoZXRoZXIgYG1pbml4X2lvbWFwX2JlZ2luYCBhbmQgYG1pbml4X2lvbWFwX2VuZGAgYXJlIGV4cG9ydGVkIG9yIHN0YXRpYy4gVHVybnMgb3V0IHRoZXkgYXJlIHN0YXRpYyB3aXRoaW4gYGZzL21pbml4L2lvbWFwLmNgLCB3aGljaCBpcyBpbmNsdWRlZCBpbiBgaXRyZWVfdjEuY2AgYW5kIGBpdHJlZV92Mi5jYC4gIEFoYSEgVGhhdCBtZWFucyBgVjFfbWluaXhfaW9tYXBfYmVnaW5gIGFuZCBgVjJfbWluaXhfaW9tYXBfYmVnaW5gIGFyZSB0aGUgZXhwb3J0ZWQgdmVyc2lvbnM7IEkgbmVlZCB0byBhZGQgdGhlbSB0byB0aGUgbGlzdCwgd2hpY2ggd2lsbCBnaXZlOiBgVjFfbWluaXhfaW9tYXBfYmVnaW5gIGFuZCBgVjJfbWluaXhfaW9tYXBfYmVnaW5gLgoKTmV4dCwgSSYjMzk7bGwgZ28gdGhyb3VnaCB0aGUgb3RoZXJzIHRvIGNvbmZpcm06CiogICBgbWluaXhfd3JpdGViYWNrX3JhbmdlYCBhbmQgYG1pbml4X3dyaXRlcGFnZXNgIGFyZSBzdGF0aWMgaW4gYGZzL21pbml4L2lub2RlLmNgLgoqICAgYG1pbml4X3JlYWRfZm9saW9gIGFuZCBgbWluaXhfcmVhZGFoZWFkYCBhcmUgc3RhdGljIGluIGBmcy9taW5peC9pbm9kZS5jYC4KKiAgIGBtaW5peF9ibWFwYCBpcyBzdGF0aWMgaW4gYGZzL21pbml4L2lub2RlLmNgLgoqICAgYF9fcGFnZV9zeW1saW5rYCBpcyBzdGF0aWMgaW4gYGZzL21pbml4L25hbWVpLmNgLgoqICAgYG1pbml4X2dldF9saW5rYCBpcyBleHBvcnRlZCBpbiBgZnMvbWluaXgvbmFtZWkuY2AuCiogICBgbWluaXhfZnJlZV9saW5rYCBpcyBzdGF0aWMgaW4gYGZzL21pbml4L25hbWVpLmNgLgoqICAgYG1pbml4X2Rpb19yZWFkX2l0ZXJgLCBgbWluaXhfZGlvX3dyaXRlX2l0ZXJgLCBgbWluaXhfZGlvX3dyaXRlX2VuZF9pb2AsIGBtaW5peF9maWxlX3JlYWRfaXRlcmAsIGFuZCBgbWluaXhfZmlsZV93cml0ZV9pdGVyYCBhcmUgYWxsIHN0YXRpYyBpbiBgZnMvbWluaXgvZmlsZS5jYC4KCldpdGggYWxsIHRoaXMgaW5mb3JtYXRpb24sIEkgY2FuIG5vdyByZWZpbmUgbXkgbGlzdDoKCiogICBgbWluaXhfZGlvX3JlYWRfaXRlcmAKKiAgIGBtaW5peF9kaW9fd3JpdGVfaXRlcmAKKiAgIGBtaW5peF9kaW9fd3JpdGVfZW5kX2lvYAoqICAgYG1pbml4X2ZpbGVfcmVhZF9pdGVyYAoqICAgYG1pbml4X2ZpbGVfd3JpdGVfaXRlcmAKKiAgIGBtaW5peF9pb21hcF9iZWdpbmAKKiAgIGBtaW5peF9pb21hcF9lbmRgCiogICBgVjFfbWluaXhfaW9tYXBfYmVnaW5gCiogICBgVjJfbWluaXhfaW9tYXBfYmVnaW5gCiogICBgbWluaXhfd3JpdGViYWNrX3JhbmdlYAoqICAgYG1pbml4X3dyaXRlcGFnZXNgCiogICBgbWluaXhfcmVhZF9mb2xpb2AKKiAgIGBtaW5peF9yZWFkYWhlYWRgCiogICBgbWluaXhfYm1hcGAKKiAgIGBfX3BhZ2Vfc3ltbGlua2AKKiAgIGBtaW5peF9nZXRfbGlua2AKKiAgIGBtaW5peF9mcmVlX2xpbmtgCgpUaGUgY29uZmlndXJhdGlvbiBpcyBjbGVhcmx5IGBNSU5JWF9GU2AsIHdoaWNoIGlzIHRoZSBjb3JyZWN0IHN5bWJvbC4KClRoZSByYXRpb25hbGUgaXMgdGhpcyBwYXRjaCBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRvIHRoZSBNSU5JWCBmaWxlc3lzdGVtLCBhZGRpbmcgaW9tYXAtYmFzZWQgZGlyZWN0IEkvTyBhbmQgYnVmZmVyZWQgSS9PLiBUaGlzIG1lYW5zIGNoYW5nZXMgdG8gdGhlIGNvcmUgcmVhZC93cml0ZSBwYXRocywgYmxvY2sgbWFwcGluZywgYW5kIHN5bWxpbmsgaGFuZGxpbmcsIHNvIHRoZSBpZGVudGlmaWVkIHN5bWJvbHMgYXJlIGNlbnRyYWwgdG8gdGhpcy4gSSYjMzk7dmUgbm93IGdvdCBhIGdvb2Qgc2V0IG9mIHN5bWJvbHMgdG8gY2hlY2suICBUaW1lIHRvIGNhbGwgc2V0LXJlc3VsdHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjggMDU6MzM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01JTklYX0ZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bWluaXhfZGlvX3JlYWRfaXRlciYjMzQ7LAogICAgJiMzNDttaW5peF9kaW9fd3JpdGVfaXRlciYjMzQ7LAogICAgJiMzNDttaW5peF9kaW9fd3JpdGVfZW5kX2lvJiMzNDssCiAgICAmIzM0O21pbml4X2ZpbGVfcmVhZF9pdGVyJiMzNDssCiAgICAmIzM0O21pbml4X2ZpbGVfd3JpdGVfaXRlciYjMzQ7LAogICAgJiMzNDttaW5peF9pb21hcF9iZWdpbiYjMzQ7LAogICAgJiMzNDttaW5peF9pb21hcF9lbmQmIzM0OywKICAgICYjMzQ7VjFfbWluaXhfaW9tYXBfYmVnaW4mIzM0OywKICAgICYjMzQ7VjJfbWluaXhfaW9tYXBfYmVnaW4mIzM0OywKICAgICYjMzQ7bWluaXhfd3JpdGViYWNrX3JhbmdlJiMzNDssCiAgICAmIzM0O21pbml4X3dyaXRlcGFnZXMmIzM0OywKICAgICYjMzQ7bWluaXhfcmVhZF9mb2xpbyYjMzQ7LAogICAgJiMzNDttaW5peF9yZWFkYWhlYWQmIzM0OywKICAgICYjMzQ7bWluaXhfYm1hcCYjMzQ7LAogICAgJiMzNDtfX3BhZ2Vfc3ltbGluayYjMzQ7LAogICAgJiMzNDttaW5peF9nZXRfbGluayYjMzQ7LAogICAgJiMzNDttaW5peF9mcmVlX2xpbmsmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW1wbGVtZW50cyBpb21hcC1iYXNlZCBkaXJlY3QgSS9PIGFuZCBidWZmZXJlZCBJL08gZm9yIHRoZSBtaW5peCBmaWxlc3lzdGVtLCB3aGljaCBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRvIHRoZSBjb3JlIGZpbGVzeXN0ZW0gbG9naWMuIEl0IG1vZGlmaWVzIHJlYWQvd3JpdGUgcGF0aHMsIGJsb2NrIG1hcHBpbmcsIGFuZCBzeW1saW5rIGhhbmRsaW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtNSU5JWF9GUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O21pbml4X2Rpb19yZWFkX2l0ZXImIzM0OywKICAgICYjMzQ7bWluaXhfZGlvX3dyaXRlX2l0ZXImIzM0OywKICAgICYjMzQ7bWluaXhfZGlvX3dyaXRlX2VuZF9pbyYjMzQ7LAogICAgJiMzNDttaW5peF9maWxlX3JlYWRfaXRlciYjMzQ7LAogICAgJiMzNDttaW5peF9maWxlX3dyaXRlX2l0ZXImIzM0OywKICAgICYjMzQ7bWluaXhfaW9tYXBfYmVnaW4mIzM0OywKICAgICYjMzQ7bWluaXhfaW9tYXBfZW5kJiMzNDssCiAgICAmIzM0O1YxX21pbml4X2lvbWFwX2JlZ2luJiMzNDssCiAgICAmIzM0O1YyX21pbml4X2lvbWFwX2JlZ2luJiMzNDssCiAgICAmIzM0O21pbml4X3dyaXRlYmFja19yYW5nZSYjMzQ7LAogICAgJiMzNDttaW5peF93cml0ZXBhZ2VzJiMzNDssCiAgICAmIzM0O21pbml4X3JlYWRfZm9saW8mIzM0OywKICAgICYjMzQ7bWluaXhfcmVhZGFoZWFkJiMzNDssCiAgICAmIzM0O21pbml4X2JtYXAmIzM0OywKICAgICYjMzQ7X19wYWdlX3N5bWxpbmsmIzM0OywKICAgICYjMzQ7bWluaXhfZ2V0X2xpbmsmIzM0OywKICAgICYjMzQ7bWluaXhfZnJlZV9saW5rJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGltcGxlbWVudHMgaW9tYXAtYmFzZWQgZGlyZWN0IEkvTyBhbmQgYnVmZmVyZWQgSS9PIGZvciB0aGUgbWluaXggZmlsZXN5c3RlbSwgd2hpY2ggaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0byB0aGUgY29yZSBmaWxlc3lzdGVtIGxvZ2ljLiBJdCBtb2RpZmllcyByZWFkL3dyaXRlIHBhdGhzLCBibG9jayBtYXBwaW5nLCBhbmQgc3ltbGluayBoYW5kbGluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI4VDA1OjMzOjAzLjYzNzg0NjA1OVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyNjc5MDIxNDQ0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk1JTklYX0ZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibWluaXhfZGlvX3JlYWRfaXRlclwiLFxuICAgIFwibWluaXhfZGlvX3dyaXRlX2l0ZXJcIixcbiAgICBcIm1pbml4X2Rpb193cml0ZV9lbmRfaW9cIixcbiAgICBcIm1pbml4X2ZpbGVfcmVhZF9pdGVyXCIsXG4gICAgXCJtaW5peF9maWxlX3dyaXRlX2l0ZXJcIixcbiAgICBcIm1pbml4X2lvbWFwX2JlZ2luXCIsXG4gICAgXCJtaW5peF9pb21hcF9lbmRcIixcbiAgICBcIlYxX21pbml4X2lvbWFwX2JlZ2luXCIsXG4gICAgXCJWMl9taW5peF9pb21hcF9iZWdpblwiLFxuICAgIFwibWluaXhfd3JpdGViYWNrX3JhbmdlXCIsXG4gICAgXCJtaW5peF93cml0ZXBhZ2VzXCIsXG4gICAgXCJtaW5peF9yZWFkX2ZvbGlvXCIsXG4gICAgXCJtaW5peF9yZWFkYWhlYWRcIixcbiAgICBcIm1pbml4X2JtYXBcIixcbiAgICBcIl9fcGFnZV9zeW1saW5rXCIsXG4gICAgXCJtaW5peF9nZXRfbGlua1wiLFxuICAgIFwibWluaXhfZnJlZV9saW5rXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW1wbGVtZW50cyBpb21hcC1iYXNlZCBkaXJlY3QgSS9PIGFuZCBidWZmZXJlZCBJL08gZm9yIHRoZSBtaW5peCBmaWxlc3lzdGVtLCB3aGljaCBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRvIHRoZSBjb3JlIGZpbGVzeXN0ZW0gbG9naWMuIEl0IG1vZGlmaWVzIHJlYWQvd3JpdGUgcGF0aHMsIGJsb2NrIG1hcHBpbmcsIGFuZCBzeW1saW5rIGhhbmRsaW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yOFQwNTozMzowMy42Mzc4NTU4MTlaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM3NzI0ODk3NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGE0NGVlZjg2ZmRhNGI3Mzc1NzZjMjgzYWQwNWU0OGQ5MWJiYjIxYTVcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFN1biBKdW4gMjggMDU6MzM6MDIgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZnMvbWluaXgvZmlsZS5jIGIvZnMvbWluaXgvZmlsZS5jXFxuaW5kZXggODZlNTk0M2NkMmZmNzQuLmIwN2M4NTNmYTQzYWJjIDEwMDY0NFxcbi0tLSBhL2ZzL21pbml4L2ZpbGUuY1xcbisrKyBiL2ZzL21pbml4L2ZpbGUuY1xcbkBAIC0xNywyMSArMTcsMTY2IEBAIGludCBtaW5peF9mc3luYyhzdHJ1Y3QgZmlsZSAqZmlsZSwgbG9mZl90IHN0YXJ0LCBsb2ZmX3QgZW5kLCBpbnQgZGF0YXN5bmMpXFxuIFxcdFxcdFxcdHN0YXJ0LCBlbmQsIGRhdGFzeW5jKTtcXG4gfVxcbiBcXG4rc3RhdGljIHNzaXplX3QgbWluaXhfZGlvX3JlYWRfaXRlcihzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqdG8pXFxuK3tcXG4rXFx0c3RydWN0IGlub2RlICppbm9kZSA9IGlvY2ItXFx1MDAzZWtpX2ZpbHAtXFx1MDAzZWZfbWFwcGluZy1cXHUwMDNlaG9zdDtcXG4rXFx0c3NpemVfdCByZXQ7XFxuK1xcbitcXHRpbm9kZV9sb2NrX3NoYXJlZChpbm9kZSk7XFxuK1xcbitcXHRjb25zdCBzdHJ1Y3QgaW9tYXBfb3BzICpvcHMgPSBtaW5peF9pb21hcF9vcHNfdmVyKGlub2RlKTtcXG4rXFxuK1xcdHJldCA9IGlvbWFwX2Rpb19ydyhpb2NiLCB0bywgb3BzLCBOVUxMLCAwLCBOVUxMLCAwKTtcXG4rXFx0aW5vZGVfdW5sb2NrX3NoYXJlZChpbm9kZSk7XFxuK1xcdHJldHVybiByZXQ7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgbWluaXhfZGlvX3dyaXRlX2VuZF9pbyhzdHJ1Y3Qga2lvY2IgKmlvY2IsIHNzaXplX3Qgc2l6ZSwgaW50IGVycm9yLFxcbitcXHRcXHR1bnNpZ25lZCBpbnQgZmxhZ3MpXFxuK3tcXG4rXFx0c3RydWN0IGlub2RlICppbm9kZSA9IGZpbGVfaW5vZGUoaW9jYi1cXHUwMDNla2lfZmlscCk7XFxuK1xcdGxvZmZfdCBwb3MgPSBpb2NiLVxcdTAwM2VraV9wb3M7XFxuK1xcbitcXHRpZiAoZXJyb3IpXFxuK1xcdFxcdHJldHVybiBlcnJvcjtcXG4rXFxuK1xcdHBvcyArPSBzaXplO1xcbitcXHRpZiAoc2l6ZSBcXHUwMDI2XFx1MDAyNiBwb3MgXFx1MDAzZSBpX3NpemVfcmVhZChpbm9kZSkpIHtcXG4rXFx0XFx0aV9zaXplX3dyaXRlKGlub2RlLCBwb3MpO1xcbitcXHRcXHRtYXJrX2lub2RlX2RpcnR5KGlub2RlKTtcXG4rXFx0fVxcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rc3RhdGljIGNvbnN0IHN0cnVjdCBpb21hcF9kaW9fb3BzIG1pbml4X2Rpb193cml0ZV9vcHMgPSB7XFxuK1xcdC5lbmRfaW8gPSBtaW5peF9kaW9fd3JpdGVfZW5kX2lvLFxcbit9O1xcbitcXG4rc3RhdGljIHNzaXplX3QgbWluaXhfZGlvX3dyaXRlX2l0ZXIoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKmZyb20pXFxuK3tcXG4rXFx0c3RydWN0IGlub2RlICppbm9kZSA9IGlvY2ItXFx1MDAzZWtpX2ZpbHAtXFx1MDAzZWZfbWFwcGluZy1cXHUwMDNlaG9zdDtcXG4rXFx0c3NpemVfdCByZXQ7XFxuK1xcdHVuc2lnbmVkIGludCBmbGFncyA9IDA7XFxuK1xcdHVuc2lnbmVkIGxvbmcgYmxvY2tzaXplID0gaW5vZGUtXFx1MDAzZWlfc2ItXFx1MDAzZXNfYmxvY2tzaXplO1xcbitcXG4rXFx0aW5vZGVfbG9jayhpbm9kZSk7XFxuK1xcdHJldCA9IGdlbmVyaWNfd3JpdGVfY2hlY2tzKGlvY2IsIGZyb20pO1xcbitcXHRpZiAocmV0IFxcdTAwM2M9IDApXFxuK1xcdFxcdGdvdG8gb3V0X3VubG9jaztcXG4rXFxuK1xcdHJldCA9IGtpb2NiX21vZGlmaWVkKGlvY2IpO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRnb3RvIG91dF91bmxvY2s7XFxuK1xcbitcXHRpZiAoaW9jYi1cXHUwMDNla2lfcG9zICsgaW92X2l0ZXJfY291bnQoZnJvbSkgXFx1MDAzZSBpX3NpemVfcmVhZChpbm9kZSkgfHxcXG4rXFx0XFx0IUlTX0FMSUdORUQoaW9jYi1cXHUwMDNla2lfcG9zIHwgaW92X2l0ZXJfYWxpZ25tZW50KGZyb20pLCBibG9ja3NpemUpKVxcbitcXHRcXHRmbGFncyB8PSBJT01BUF9ESU9fRk9SQ0VfV0FJVDtcXG4rXFxuK1xcdGNvbnN0IHN0cnVjdCBpb21hcF9vcHMgKm9wcyA9IG1pbml4X2lvbWFwX29wc192ZXIoaW5vZGUpO1xcbitcXG4rXFx0cmV0ID0gaW9tYXBfZGlvX3J3KGlvY2IsIGZyb20sIG9wcyxcXG4rXFx0XFx0XFx1MDAyNm1pbml4X2Rpb193cml0ZV9vcHMsIGZsYWdzLCBOVUxMLCAwKTtcXG4rXFx0aWYgKHJldCA9PSAtRU5PVEJMSylcXG4rXFx0XFx0cmV0ID0gMDsgLyogZmFsbGJhY2sgdG8gYnVmZmVyZWQgKi9cXG4rXFxuK1xcdGlmIChyZXQgXFx1MDAzZT0gMCBcXHUwMDI2XFx1MDAyNiBpb3ZfaXRlcl9jb3VudChmcm9tKSkge1xcbitcXHRcXHRsb2ZmX3QgcG9zO1xcbitcXHRcXHRsb2ZmX3QgZW5kYnl0ZTtcXG4rXFx0XFx0c3NpemVfdCBzdGF0dXM7XFxuK1xcbitcXHRcXHRpb2NiLVxcdTAwM2VraV9mbGFncyBcXHUwMDI2PSB+SU9DQl9ESVJFQ1Q7XFxuK1xcdFxcdHBvcyA9IGlvY2ItXFx1MDAzZWtpX3BvcztcXG4rXFx0XFx0c3RhdHVzID0gaW9tYXBfZmlsZV9idWZmZXJlZF93cml0ZShpb2NiLCBmcm9tLCBvcHMsXFxuK1xcdFxcdFxcdE5VTEwsIE5VTEwpO1xcbitcXHRcXHRpZiAodW5saWtlbHkoc3RhdHVzIFxcdTAwM2MgMCkpIHtcXG4rXFx0XFx0XFx0cmV0ID0gc3RhdHVzO1xcbitcXHRcXHRcXHRnb3RvIG91dF91bmxvY2s7XFxuK1xcdFxcdH1cXG4rXFxuK1xcdFxcdHJldCArPSBzdGF0dXM7XFxuK1xcdFxcdGVuZGJ5dGUgPSBwb3MgKyBzdGF0dXMgLSAxO1xcbitcXHRcXHRzdGF0dXMgPSBmaWxlbWFwX3dyaXRlX2FuZF93YWl0X3JhbmdlKGlub2RlLVxcdTAwM2VpX21hcHBpbmcsIHBvcywgZW5kYnl0ZSk7XFxuK1xcdFxcdGlmICghc3RhdHVzKSB7XFxuK1xcdFxcdFxcdGludmFsaWRhdGVfbWFwcGluZ19wYWdlcyhpbm9kZS1cXHUwMDNlaV9tYXBwaW5nLFxcbitcXHRcXHRcXHRcXHRwb3MgXFx1MDAzZVxcdTAwM2UgUEFHRV9TSElGVCxcXG4rXFx0XFx0XFx0XFx0ZW5kYnl0ZSBcXHUwMDNlXFx1MDAzZSBQQUdFX1NISUZUKTtcXG4rXFx0XFx0XFx0aWYgKHJldCBcXHUwMDNlIDApXFxuK1xcdFxcdFxcdFxcdHJldCA9IGdlbmVyaWNfd3JpdGVfc3luYyhpb2NiLCByZXQpO1xcbitcXHRcXHR9IGVsc2Uge1xcbitcXHRcXHRcXHRyZXQgPSBzdGF0dXM7XFxuK1xcdFxcdH1cXG4rXFx0fVxcbitcXG4rb3V0X3VubG9jazpcXG4rXFx0aW5vZGVfdW5sb2NrKGlub2RlKTtcXG4rXFx0cmV0dXJuIHJldDtcXG4rfVxcbitcXG4rc3RhdGljIHNzaXplX3QgbWluaXhfZmlsZV9yZWFkX2l0ZXIoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKnRvKVxcbit7XFxuK1xcdGlmIChpb2NiLVxcdTAwM2VraV9mbGFncyBcXHUwMDI2IElPQ0JfRElSRUNUKVxcbitcXHRcXHRyZXR1cm4gbWluaXhfZGlvX3JlYWRfaXRlcihpb2NiLCB0byk7XFxuK1xcbitcXHRyZXR1cm4gZ2VuZXJpY19maWxlX3JlYWRfaXRlcihpb2NiLCB0byk7XFxuK31cXG4rXFxuK3N0YXRpYyBzc2l6ZV90IG1pbml4X2ZpbGVfd3JpdGVfaXRlcihzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqZnJvbSlcXG4re1xcbitcXHRzdHJ1Y3QgaW5vZGUgKmlub2RlID0gaW9jYi1cXHUwMDNla2lfZmlscC1cXHUwMDNlZl9tYXBwaW5nLVxcdTAwM2Vob3N0O1xcbitcXHRzc2l6ZV90IHJldDtcXG4rXFxuK1xcdC8qIG1pbml4X2Rpb193cml0ZV9pdGVyIGFsc28gbG9ja3MgdGhlIGlub2RlIGFuZCBhcHBlYXJzIHRvIGRvIHRoZSBzYW1lXFxuK1xcdCAqIGdlbmVyYWwgc29ydHMgb2YgY2hlY2tzIGFzIHRoaXMsIHNvIGp1c3QgcmV0dXJuIGRpcmVjdGx5IGZyb20gdGhlcmUuXFxuK1xcdCAqL1xcbitcXHRpZiAoaW9jYi1cXHUwMDNla2lfZmxhZ3MgXFx1MDAyNiBJT0NCX0RJUkVDVClcXG4rXFx0XFx0cmV0dXJuIG1pbml4X2Rpb193cml0ZV9pdGVyKGlvY2IsIGZyb20pO1xcbitcXG4rXFx0aW5vZGVfbG9jayhpbm9kZSk7XFxuK1xcdHJldCA9IGdlbmVyaWNfd3JpdGVfY2hlY2tzKGlvY2IsIGZyb20pO1xcbitcXHRpZiAocmV0IFxcdTAwM2M9IDApXFxuK1xcdFxcdGdvdG8gdW5sb2NrO1xcbitcXG4rXFx0cmV0ID0gZmlsZV9tb2RpZmllZChpb2NiLVxcdTAwM2VraV9maWxwKTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0Z290byB1bmxvY2s7XFxuK1xcbitcXHRjb25zdCBzdHJ1Y3QgaW9tYXBfb3BzICpvcHMgPSBtaW5peF9pb21hcF9vcHNfdmVyKGlub2RlKTtcXG4rXFxuK1xcdHJldCA9IGlvbWFwX2ZpbGVfYnVmZmVyZWRfd3JpdGUoaW9jYiwgZnJvbSwgb3BzLFxcbitcXHRcXHRcXHROVUxMLCBOVUxMKTtcXG4rXFxuK1xcdGlmIChyZXQgXFx1MDAzZSAwKVxcbitcXHRcXHRyZXQgPSBnZW5lcmljX3dyaXRlX3N5bmMoaW9jYiwgcmV0KTtcXG4rXFxuK3VubG9jazpcXG4rXFx0aW5vZGVfdW5sb2NrKGlub2RlKTtcXG4rXFx0cmV0dXJuIHJldDtcXG4rfVxcbitcXG4rc3RhdGljIGludCBtaW5peF9maWxlX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbHApXFxuK3tcXG4rXFx0ZmlscC1cXHUwMDNlZl9tb2RlIHw9IEZNT0RFX0NBTl9PRElSRUNUO1xcbitcXHRyZXR1cm4gZ2VuZXJpY19maWxlX29wZW4oaW5vZGUsIGZpbHApO1xcbit9XFxuK1xcbiAvKlxcbi0gKiBXZSBoYXZlIG1vc3RseSBOVUxMcyBoZXJlOiB0aGUgY3VycmVudCBkZWZhdWx0cyBhcmUgT0sgZm9yXFxuLSAqIHRoZSBtaW5peCBmaWxlc3lzdGVtLlxcbisgKiBXZSBzdGlsbCBoYXZlIHNvbWUgTlVMTHMgaGVyZSwgYnV0IG5vdCBhcyBtYW55IG9mIHRoZSBjdXJyZW50IGRlZmF1bHRzIGFyZVxcbisgKiBzdGlsbCBPSyBmb3IgdGhlIG1pbml4IGZpbGVzeXN0ZW0uXFxuICAqL1xcbitcXG4gY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBtaW5peF9maWxlX29wZXJhdGlvbnMgPSB7XFxuIFxcdC5sbHNlZWtcXHRcXHQ9IGdlbmVyaWNfZmlsZV9sbHNlZWssXFxuLVxcdC5yZWFkX2l0ZXJcXHQ9IGdlbmVyaWNfZmlsZV9yZWFkX2l0ZXIsXFxuLVxcdC53cml0ZV9pdGVyXFx0PSBnZW5lcmljX2ZpbGVfd3JpdGVfaXRlcixcXG4rXFx0LnJlYWRfaXRlclxcdD0gbWluaXhfZmlsZV9yZWFkX2l0ZXIsXFxuK1xcdC53cml0ZV9pdGVyXFx0PSBtaW5peF9maWxlX3dyaXRlX2l0ZXIsXFxuIFxcdC5tbWFwX3ByZXBhcmVcXHQ9IGdlbmVyaWNfZmlsZV9tbWFwX3ByZXBhcmUsXFxuK1xcdC5vcGVuXFx0XFx0PSBtaW5peF9maWxlX29wZW4sXFxuIFxcdC5mc3luY1xcdFxcdD0gbWluaXhfZnN5bmMsXFxuIFxcdC5zcGxpY2VfcmVhZFxcdD0gZmlsZW1hcF9zcGxpY2VfcmVhZCxcXG4rXFx0LnNwbGljZV93cml0ZVxcdD0gaXRlcl9maWxlX3NwbGljZV93cml0ZSxcXG4gfTtcXG4gXFxuLXN0YXRpYyBpbnQgbWluaXhfc2V0YXR0cihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcXG4tXFx0XFx0XFx0IHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGlhdHRyICphdHRyKVxcbitpbnQgbWluaXhfc2V0YXR0cihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxcbitcXHRzdHJ1Y3QgaWF0dHIgKmF0dHIpXFxuIHtcXG4gXFx0c3RydWN0IGlub2RlICppbm9kZSA9IGRfaW5vZGUoZGVudHJ5KTtcXG4gXFx0aW50IGVycm9yO1xcbmRpZmYgLS1naXQgYS9mcy9taW5peC9pbm9kZS5jIGIvZnMvbWluaXgvaW5vZGUuY1xcbmluZGV4IGMzMGNjNTkwNjk4ZDZmLi5iMTEzYzQ0NzY0ZmY5NSAxMDA2NDRcXG4tLS0gYS9mcy9taW5peC9pbm9kZS5jXFxuKysrIGIvZnMvbWluaXgvaW5vZGUuY1xcbkBAIC00MzYsNyArNDM2LDMyIEBAIHN0YXRpYyBpbnQgbWluaXhfc3RhdGZzKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGtzdGF0ZnMgKmJ1ZilcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuLXN0YXRpYyBpbnQgbWluaXhfZ2V0X2Jsb2NrKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHNlY3Rvcl90IGJsb2NrLFxcbitzdGF0aWMgc3NpemVfdCBtaW5peF93cml0ZWJhY2tfcmFuZ2Uoc3RydWN0IGlvbWFwX3dyaXRlcGFnZV9jdHggKndwYyxcXG4rXFx0c3RydWN0IGZvbGlvICpmb2xpbywgdTY0IHBvcywgdW5zaWduZWQgaW50IGxlbiwgdTY0IGVuZF9wb3MpXFxuK3tcXG4rXFx0aW50IGVycm9yO1xcbitcXG4rXFx0aWYgKHBvcyBcXHUwMDNjIHdwYy1cXHUwMDNlaW9tYXAub2Zmc2V0IHx8XFxuK1xcdFxcdFxcdHBvcyBcXHUwMDNlPSB3cGMtXFx1MDAzZWlvbWFwLm9mZnNldCArIHdwYy1cXHUwMDNlaW9tYXAubGVuZ3RoKSB7XFxuK1xcdFxcdGlmIChJTk9ERV9WRVJTSU9OKHdwYy1cXHUwMDNlaW5vZGUpID09IE1JTklYX1YxKVxcbitcXHRcXHRcXHRlcnJvciA9IFYxX21pbml4X2lvbWFwX2JlZ2luKHdwYy1cXHUwMDNlaW5vZGUsIHBvcywgbGVuLCBJT01BUF9XUklURSxcXG4rXFx0XFx0XFx0XFx0XFx1MDAyNndwYy1cXHUwMDNlaW9tYXAsIE5VTEwpO1xcbitcXHRcXHRlbHNlXFxuK1xcdFxcdFxcdGVycm9yID0gVjJfbWluaXhfaW9tYXBfYmVnaW4od3BjLVxcdTAwM2Vpbm9kZSwgcG9zLCBsZW4sIElPTUFQX1dSSVRFLFxcbitcXHRcXHRcXHRcXHRcXHUwMDI2d3BjLVxcdTAwM2Vpb21hcCwgTlVMTCk7XFxuK1xcdFxcdGlmIChlcnJvcilcXG4rXFx0XFx0XFx0cmV0dXJuIGVycm9yO1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gaW9tYXBfYWRkX3RvX2lvZW5kKHdwYywgZm9saW8sIHBvcywgZW5kX3BvcywgbGVuKTtcXG4rfVxcbitcXG4rc3RhdGljIGNvbnN0IHN0cnVjdCBpb21hcF93cml0ZWJhY2tfb3BzIG1pbml4X3dyaXRlYmFja19vcHMgPSB7XFxuK1xcdC53cml0ZWJhY2tfcmFuZ2UgPSBtaW5peF93cml0ZWJhY2tfcmFuZ2UsXFxuK1xcdC53cml0ZWJhY2tfc3VibWl0ID0gaW9tYXBfaW9lbmRfd3JpdGViYWNrX3N1Ym1pdCxcXG4rfTtcXG4rXFxuK2ludCBtaW5peF9nZXRfYmxvY2soc3RydWN0IGlub2RlICppbm9kZSwgc2VjdG9yX3QgYmxvY2ssXFxuIFxcdFxcdCAgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoX3Jlc3VsdCwgaW50IGNyZWF0ZSlcXG4ge1xcbiBcXHRpZiAoSU5PREVfVkVSU0lPTihpbm9kZSkgPT0gTUlOSVhfVjEpXFxuQEAgLTQ0NSwxNyArNDcwLDQ1IEBAIHN0YXRpYyBpbnQgbWluaXhfZ2V0X2Jsb2NrKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHNlY3Rvcl90IGJsb2NrLFxcbiBcXHRcXHRyZXR1cm4gVjJfbWluaXhfZ2V0X2Jsb2NrKGlub2RlLCBibG9jaywgYmhfcmVzdWx0LCBjcmVhdGUpO1xcbiB9XFxuIFxcbi1zdGF0aWMgaW50IG1pbml4X3dyaXRlcGFnZXMoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXFxuKy8qIFRoZSBvbGQgbWluaXhfd3JpdGVwYWdlcywgcHJlc2VydmVkIGZvciBkaXJlY3Rvcnkgb3BlcmF0aW9ucy4gKi9cXG4rc3RhdGljIGludCBtaW5peF9ibG9ja193cml0ZXBhZ2VzKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxcbiBcXHRcXHRzdHJ1Y3Qgd3JpdGViYWNrX2NvbnRyb2wgKndiYylcXG4ge1xcbiBcXHRyZXR1cm4gbXBhZ2Vfd3JpdGVwYWdlcyhtYXBwaW5nLCB3YmMsIG1pbml4X2dldF9ibG9jayk7XFxuIH1cXG4gXFxuK3N0YXRpYyBpbnQgbWluaXhfd3JpdGVwYWdlcyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcXG4rXFx0XFx0c3RydWN0IHdyaXRlYmFja19jb250cm9sICp3YmMpXFxuK3tcXG4rXFx0c3RydWN0IGlvbWFwX3dyaXRlcGFnZV9jdHggd3BjID0ge1xcbitcXHRcXHQuaW5vZGUgPSBtYXBwaW5nLVxcdTAwM2Vob3N0LFxcbitcXHRcXHQud2JjID0gd2JjLFxcbitcXHRcXHQub3BzID0gXFx1MDAyNm1pbml4X3dyaXRlYmFja19vcHMsXFxuK1xcdH07XFxuK1xcdHJldHVybiBpb21hcF93cml0ZXBhZ2VzKFxcdTAwMjZ3cGMpO1xcbit9XFxuK1xcbiBzdGF0aWMgaW50IG1pbml4X3JlYWRfZm9saW8oc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuK3tcXG4rXFx0Y29uc3Qgc3RydWN0IGlvbWFwX29wcyAqb3BzID0gbWluaXhfaW9tYXBfb3BzX3Zlcihmb2xpby1cXHUwMDNlbWFwcGluZy1cXHUwMDNlaG9zdCk7XFxuK1xcbitcXHRpb21hcF9iaW9fcmVhZF9mb2xpbyhmb2xpbywgb3BzKTtcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuKy8qIFRoZSBvbGQgbWluaXhfcmVhZF9mb2xpbywgcHJlc2VydmVkIGZvciBkaXJlY3Rvcnkgb3BlcmF0aW9ucy4gKi9cXG4rc3RhdGljIGludCBtaW5peF9ibG9ja19yZWFkX2ZvbGlvKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbiB7XFxuIFxcdHJldHVybiBibG9ja19yZWFkX2Z1bGxfZm9saW8oZm9saW8sIG1pbml4X2dldF9ibG9jayk7XFxuIH1cXG4gXFxuK3N0YXRpYyB2b2lkIG1pbml4X3JlYWRhaGVhZChzdHJ1Y3QgcmVhZGFoZWFkX2NvbnRyb2wgKnJhYylcXG4re1xcbitcXHRjb25zdCBzdHJ1Y3QgaW9tYXBfb3BzICpvcHMgPSBtaW5peF9pb21hcF9vcHNfdmVyKHJhYy1cXHUwMDNlbWFwcGluZy1cXHUwMDNlaG9zdCk7XFxuK1xcbitcXHRpb21hcF9iaW9fcmVhZGFoZWFkKHJhYywgb3BzKTtcXG4rfVxcbitcXG4gaW50IG1pbml4X3ByZXBhcmVfY2h1bmsoc3RydWN0IGZvbGlvICpmb2xpbywgbG9mZl90IHBvcywgdW5zaWduZWQgbGVuKVxcbiB7XFxuIFxcdHJldHVybiBfX2Jsb2NrX3dyaXRlX2JlZ2luKGZvbGlvLCBwb3MsIGxlbiwgbWluaXhfZ2V0X2Jsb2NrKTtcXG5AQCAtNDg3LDI0ICs1NDAsNDIgQEAgc3RhdGljIGludCBtaW5peF93cml0ZV9iZWdpbihjb25zdCBzdHJ1Y3Qga2lvY2IgKmlvY2IsXFxuIFxcbiBzdGF0aWMgc2VjdG9yX3QgbWluaXhfYm1hcChzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgc2VjdG9yX3QgYmxvY2spXFxuIHtcXG4tXFx0cmV0dXJuIGdlbmVyaWNfYmxvY2tfYm1hcChtYXBwaW5nLGJsb2NrLG1pbml4X2dldF9ibG9jayk7XFxuK1xcdGNvbnN0IHN0cnVjdCBpb21hcF9vcHMgKm9wcyA9IG1pbml4X2lvbWFwX29wc192ZXIobWFwcGluZy1cXHUwMDNlaG9zdCk7XFxuK1xcbitcXHRyZXR1cm4gaW9tYXBfYm1hcChtYXBwaW5nLCBibG9jaywgb3BzKTtcXG4gfVxcbiBcXG4tc3RhdGljIGNvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgbWluaXhfYW9wcyA9IHtcXG4tXFx0LmRpcnR5X2ZvbGlvXFx0PSBibG9ja19kaXJ0eV9mb2xpbyxcXG4tXFx0LmludmFsaWRhdGVfZm9saW8gPSBibG9ja19pbnZhbGlkYXRlX2ZvbGlvLFxcbitjb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZV9vcGVyYXRpb25zIG1pbml4X2FvcHMgPSB7XFxuK1xcdC5kaXJ0eV9mb2xpb1xcdD0gaW9tYXBfZGlydHlfZm9saW8sXFxuK1xcdC5pbnZhbGlkYXRlX2ZvbGlvID0gaW9tYXBfaW52YWxpZGF0ZV9mb2xpbyxcXG4gXFx0LnJlYWRfZm9saW8gPSBtaW5peF9yZWFkX2ZvbGlvLFxcbitcXHQucmVhZGFoZWFkID0gbWluaXhfcmVhZGFoZWFkLFxcbiBcXHQud3JpdGVwYWdlcyA9IG1pbml4X3dyaXRlcGFnZXMsXFxuK1xcdC5taWdyYXRlX2ZvbGlvID0gZmlsZW1hcF9taWdyYXRlX2ZvbGlvLFxcbitcXHQuYm1hcCA9IG1pbml4X2JtYXAsXFxuK1xcdC5pc19wYXJ0aWFsbHlfdXB0b2RhdGUgPSBpb21hcF9pc19wYXJ0aWFsbHlfdXB0b2RhdGUsXFxuK1xcdC5yZWxlYXNlX2ZvbGlvID0gaW9tYXBfcmVsZWFzZV9mb2xpbyxcXG4rXFx0LmVycm9yX3JlbW92ZV9mb2xpbyA9IGdlbmVyaWNfZXJyb3JfcmVtb3ZlX2ZvbGlvLFxcbit9O1xcbitcXG4rLyogQSBzcGVjaWFsIGFvcHMgZm9yIGRpcmVjdG9yaWVzIHRoYXQga2VlcHMgdXNpbmcgdGhlIGJ1ZmZlciBoZWFkIGNodW5rcywgYXRcXG4rICogbGVhc3QgZm9yIHRoZSB0aW1lIGJlaW5nLlxcbisgKi9cXG4rc3RhdGljIGNvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgbWluaXhfZGlyX2FvcHMgPSB7XFxuK1xcdC5kaXJ0eV9mb2xpbyA9IGJsb2NrX2RpcnR5X2ZvbGlvLFxcbitcXHQuaW52YWxpZGF0ZV9mb2xpbyA9IGJsb2NrX2ludmFsaWRhdGVfZm9saW8sXFxuK1xcdC5yZWFkX2ZvbGlvID0gbWluaXhfYmxvY2tfcmVhZF9mb2xpbyxcXG4gXFx0LndyaXRlX2JlZ2luID0gbWluaXhfd3JpdGVfYmVnaW4sXFxuIFxcdC53cml0ZV9lbmQgPSBnZW5lcmljX3dyaXRlX2VuZCxcXG4gXFx0Lm1pZ3JhdGVfZm9saW8gPSBidWZmZXJfbWlncmF0ZV9mb2xpbyxcXG4gXFx0LmJtYXAgPSBtaW5peF9ibWFwLFxcbi1cXHQuZGlyZWN0X0lPID0gbm9vcF9kaXJlY3RfSU9cXG4rXFx0LndyaXRlcGFnZXMgPSBtaW5peF9ibG9ja193cml0ZXBhZ2VzLFxcbiB9O1xcbiBcXG4gc3RhdGljIGNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIG1pbml4X3N5bWxpbmtfaW5vZGVfb3BlcmF0aW9ucyA9IHtcXG4tXFx0LmdldF9saW5rXFx0PSBwYWdlX2dldF9saW5rLFxcbitcXHQuZ2V0X2xpbmtcXHQ9IG1pbml4X2dldF9saW5rLFxcbiBcXHQuZ2V0YXR0clxcdD0gbWluaXhfZ2V0YXR0cixcXG4rXFx0LnNldGF0dHJcXHQ9IG1pbml4X3NldGF0dHIsXFxuIH07XFxuIFxcbiB2b2lkIG1pbml4X3NldF9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBkZXZfdCByZGV2KVxcbkBAIC01MTYsNyArNTg3LDcgQEAgdm9pZCBtaW5peF9zZXRfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSwgZGV2X3QgcmRldilcXG4gXFx0fSBlbHNlIGlmIChTX0lTRElSKGlub2RlLVxcdTAwM2VpX21vZGUpKSB7XFxuIFxcdFxcdGlub2RlLVxcdTAwM2VpX29wID0gXFx1MDAyNm1pbml4X2Rpcl9pbm9kZV9vcGVyYXRpb25zO1xcbiBcXHRcXHRpbm9kZS1cXHUwMDNlaV9mb3AgPSBcXHUwMDI2bWluaXhfZGlyX29wZXJhdGlvbnM7XFxuLVxcdFxcdGlub2RlLVxcdTAwM2VpX21hcHBpbmctXFx1MDAzZWFfb3BzID0gXFx1MDAyNm1pbml4X2FvcHM7XFxuK1xcdFxcdGlub2RlLVxcdTAwM2VpX21hcHBpbmctXFx1MDAzZWFfb3BzID0gXFx1MDAyNm1pbml4X2Rpcl9hb3BzO1xcbiBcXHR9IGVsc2UgaWYgKFNfSVNMTksoaW5vZGUtXFx1MDAzZWlfbW9kZSkpIHtcXG4gXFx0XFx0aW5vZGUtXFx1MDAzZWlfb3AgPSBcXHUwMDI2bWluaXhfc3ltbGlua19pbm9kZV9vcGVyYXRpb25zO1xcbiBcXHRcXHRpbm9kZV9ub2hpZ2htZW0oaW5vZGUpO1xcbkBAIC03NjgsNCArODM5LDMgQEAgbW9kdWxlX2luaXQoaW5pdF9taW5peF9mcylcXG4gbW9kdWxlX2V4aXQoZXhpdF9taW5peF9mcylcXG4gTU9EVUxFX0RFU0NSSVBUSU9OKFxcXCJNaW5peCBmaWxlIHN5c3RlbVxcXCIpO1xcbiBNT0RVTEVfTElDRU5TRShcXFwiR1BMXFxcIik7XFxuLVxcbmRpZmYgLS1naXQgYS9mcy9taW5peC9pb21hcC5jIGIvZnMvbWluaXgvaW9tYXAuY1xcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLjdiYjA0MzllMzY2OTk2XFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL2ZzL21pbml4L2lvbWFwLmNcXG5AQCAtMCwwICsxLDExNCBAQFxcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuKy8qXFxuKyAqIGlvbWFwIGZ1bmN0aW9ucyBmb3IgbWluaXguIEF0IGxlYXN0IHRoZSBmaXJzdCBwYXNzIG9mIHRoaXMgZmlsZSB3YXMgdGFrZW5cXG4rICogZnJvbSB0aGUgeGlhZnMgaW9tYXAuYywgd2hpY2ggaXMgZml0dGluZyBzaW5jZSB0aGUgeGlhZnMgbW9kdWxlIGluIHR1cm5cXG4rICogYm9ycm93ZWQgaGVhdmlseSBmcm9tIHRoZSBtb2Rlcm5pemVkIG1pbml4IGZzIGtlcm5lbCBtb2R1bGUuXFxuKyAqL1xcbitcXG4rLypcXG4rICogbWluaXhfaW9tYXBfYmVnaW4gLSBtYXAgYSBmaWxlIHJhbmdlIHRvIGRpc2sgYmxvY2tzLiBJdCBhY3RzIGFzIGEgcmVwbGFjZW1lbnRcXG4rICogZm9yIGdldF9ibG9jayBpbiBpdHJlZV9jb21tb24uYywgYXQgbGVhc3QgaW4gdGhlIGltcG9ydGFudCB3YXlzLCBhbmQgaXNcXG4rICogYWRhcHRlZCBmcm9tIGl0LCBidXQgaXQgdXNlcyBpb21hcCBpbnN0ZWFkIG9mIGJ1ZmZlcl9oZWFkLiBUaGlzIGlzIHRha2VuXFxuKyAqIGRpcmVjdGx5IGZyb20gdGhlIG91dC1vZi10cmVlIHhpYWZzIGlvbWFwIGNoYW5nZXMsIGFuZCB0aGUgZXhmYXQgaW9tYXBcXG4rICogY2hhbmdlcyB3ZXJlIGFuIGluc3BpcmF0aW9uIGZvciB0aGF0LlxcbisgKi9cXG4rc3RhdGljIGludCBtaW5peF9pb21hcF9iZWdpbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb2ZmX3Qgb2Zmc2V0LCBsb2ZmX3QgbGVuZ3RoLFxcbitcXHR1bnNpZ25lZCBpbnQgZmxhZ3MsIHN0cnVjdCBpb21hcCAqaW9tYXAsIHN0cnVjdCBpb21hcCAqc3JjbWFwKVxcbit7XFxuK1xcdHN0cnVjdCBzdXBlcl9ibG9jayAqc2IgPSBpbm9kZS1cXHUwMDNlaV9zYjtcXG4rXFx0dW5zaWduZWQgaW50IGJsa2JpdHMgPSBzYi1cXHUwMDNlc19ibG9ja3NpemVfYml0cztcXG4rXFx0c2VjdG9yX3QgaWJsb2NrID0gb2Zmc2V0IFxcdTAwM2VcXHUwMDNlIGJsa2JpdHM7XFxuK1xcdGludCBjcmVhdGUgPSBmbGFncyBcXHUwMDI2IElPTUFQX1dSSVRFO1xcbitcXG4rXFx0LyogTW9zdGx5IHRha2VuIGZyb20gbW9kZXJuLXhpYWZzIGl0cmVlLmMgZ2V0X2Jsb2NrIHdpdGggZWxlbWVudHMgZnJvbVxcbitcXHQgKiBzaW1pbGFyIGV4ZmF0IG9wZXJhdGlvbnMuXFxuK1xcdCAqL1xcbitcXHRpbnQgb2Zmc2V0c1tERVBUSF07XFxuK1xcdEluZGlyZWN0IGNoYWluW0RFUFRIXTtcXG4rXFx0SW5kaXJlY3QgKnBhcnRpYWw7XFxuK1xcdGludCBkZXB0aCA9IGJsb2NrX3RvX3BhdGgoaW5vZGUsIGlibG9jaywgb2Zmc2V0cyk7XFxuK1xcdGludCBsZWZ0O1xcbitcXHRpbnQgZXJyID0gLUVJTztcXG4rXFxuK1xcdHNlY3Rvcl90IHBoeXM7XFxuK1xcbitcXHQvKiBibG9jayBpcyBiZXlvbmQgbWF4IGZpbGUgc2l6ZSAqL1xcbitcXHRpZiAoZGVwdGggPT0gMClcXG4rXFx0XFx0Z290byBvdXQ7XFxuK1xcbitcXHRpb21hcC1cXHUwMDNlYmRldiA9IGlub2RlLVxcdTAwM2VpX3NiLVxcdTAwM2VzX2JkZXY7XFxuK1xcbityZXJlYWQ6XFxuK1xcdHBhcnRpYWwgPSBnZXRfYnJhbmNoKGlub2RlLCBkZXB0aCwgb2Zmc2V0cywgY2hhaW4sIFxcdTAwMjZlcnIpO1xcbitcXG4rXFx0LyogU2ltcGxlc3QgY2FzZSAtIGJsb2NrIGZvdW5kLCBubyBhbGxvY2F0aW9uIG5lZWRlZCAqL1xcbitcXHRpZiAoIXBhcnRpYWwpIHtcXG4rXFx0XFx0LyogQml0IG9mIGEgd2VpcmQgb3JkZXIsIGJ1dCBpdCdsbCBtYWtlIHNlbnNlIHdoZW4geW91IGdldCB0b1xcbitcXHRcXHQgKiB0aGUgYm90dG9tLlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0aW9tYXAtXFx1MDAzZWZsYWdzID0gSU9NQVBfRl9NRVJHRUQ7XFxuK2dvdF9pdDpcXG4rXFx0XFx0cGh5cyA9IGJsb2NrX3RvX2NwdShjaGFpbltkZXB0aCAtIDFdLmtleSk7XFxuK1xcdFxcdHBhcnRpYWwgPSBjaGFpbitkZXB0aC0xO1xcbitcXHRcXHQvKiBTZXQgdXAgdGhlIGlvbWFwIHN0cnVjdCBiZWZvcmUgY2xlYW5pbmcgdXAgKi9cXG4rXFx0XFx0aW9tYXAtXFx1MDAzZXR5cGUgPSBJT01BUF9NQVBQRUQ7XFxuK1xcdFxcdGlvbWFwLVxcdTAwM2VhZGRyID0gKHU2NClwaHlzIFxcdTAwM2NcXHUwMDNjIGJsa2JpdHM7XFxuK1xcdFxcdGlvbWFwLVxcdTAwM2VsZW5ndGggPSAxIFxcdTAwM2NcXHUwMDNjIGJsa2JpdHM7XFxuK1xcdFxcdGlvbWFwLVxcdTAwM2VvZmZzZXQgPSAodTY0KWlibG9jayBcXHUwMDNjXFx1MDAzYyBibGtiaXRzO1xcbitcXHRcXHRnb3RvIGNsZWFudXA7XFxuK1xcdH1cXG4rXFxuK1xcdC8qIE5leHQgc2ltcGxlIGNhc2UgLSBwbGFpbiBsb29rdXAgb3IgZmFpbGVkIHJlYWQgb2YgaW5kaXJlY3QgYmxvY2sgKi9cXG4rXFx0aWYgKCFjcmVhdGUgfHwgZXJyID09IC1FSU8pIHtcXG4rXFx0XFx0aW9tYXAtXFx1MDAzZXR5cGUgPSBJT01BUF9IT0xFO1xcbitcXHRcXHRpb21hcC1cXHUwMDNlYWRkciA9IElPTUFQX05VTExfQUREUjtcXG4rXFx0XFx0aW9tYXAtXFx1MDAzZWxlbmd0aCA9IDEgXFx1MDAzY1xcdTAwM2MgYmxrYml0cztcXG4rXFx0XFx0aW9tYXAtXFx1MDAzZW9mZnNldCA9ICh1NjQpaWJsb2NrIFxcdTAwM2NcXHUwMDNjIGJsa2JpdHM7XFxuK1xcdFxcdGlvbWFwLVxcdTAwM2VmbGFncyA9IDA7XFxuK2NsZWFudXA6XFxuK1xcdFxcdHdoaWxlIChwYXJ0aWFsIFxcdTAwM2UgY2hhaW4pIHtcXG4rXFx0XFx0XFx0YnJlbHNlKHBhcnRpYWwtXFx1MDAzZWJoKTtcXG4rXFx0XFx0XFx0cGFydGlhbC0tO1xcbitcXHRcXHR9XFxuK291dDpcXG4rXFx0XFx0cmV0dXJuIGVycjtcXG4rXFx0fVxcbitcXG4rXFx0LypcXG4rXFx0ICogSW5kaXJlY3QgYmxvY2sgbWlnaHQgYmUgcmVtb3ZlZCBieSB0cnVuY2F0ZSB3aGlsZSB3ZSB3ZXJlXFxuK1xcdCAqIHJlYWRpbmcgaXQuIEhhbmRsaW5nIG9mIHRoYXQgY2FzZSAoZm9yZ2V0IHdoYXQgd2UndmUgZ290IGFuZFxcbitcXHQgKiByZXJlYWQpIGlzIHRha2VuIG91dCBvZiB0aGUgbWFpbiBwYXRoLlxcbitcXHQgKi9cXG4rXFx0aWYgKGVyciA9PSAtRUFHQUlOKVxcbitcXHRcXHRnb3RvIGNoYW5nZWQ7XFxuK1xcbitcXHRsZWZ0ID0gKGNoYWluICsgZGVwdGgpIC0gcGFydGlhbDtcXG4rXFx0ZXJyID0gYWxsb2NfYnJhbmNoKGlub2RlLCBsZWZ0LCBvZmZzZXRzICsgKHBhcnRpYWwgLSBjaGFpbiksIHBhcnRpYWwpO1xcbitcXHRpZiAoZXJyKVxcbitcXHRcXHRnb3RvIGNsZWFudXA7XFxuK1xcbitcXHRpZiAoc3BsaWNlX2JyYW5jaChpbm9kZSwgY2hhaW4sIHBhcnRpYWwsIGxlZnQpIFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBjaGFuZ2VkO1xcbitcXG4rXFx0LyogU3VjY2Vzc2Z1bCBhbGxvY2F0aW9uLCBtYXBwaW5nIGl0LiAqL1xcbitcXHRpb21hcC1cXHUwMDNlZmxhZ3MgPSBJT01BUF9GX05FVztcXG4rXFx0Z290byBnb3RfaXQ7XFxuK1xcbitjaGFuZ2VkOlxcbitcXHR3aGlsZSAocGFydGlhbCBcXHUwMDNlIGNoYWluKSB7XFxuK1xcdFxcdGJyZWxzZShwYXJ0aWFsLVxcdTAwM2ViaCk7XFxuK1xcdFxcdHBhcnRpYWwtLTtcXG4rXFx0fVxcbitcXHRnb3RvIHJlcmVhZDtcXG4rfVxcbitcXG4rLypcXG4rICogbWluaXhfaW9tYXBfZW5kIGVuZHMgdXAgYmVpbmcgYSBub3A7IHNpbmNlIG1pbml4IGRvZXNuJ3QgaGF2ZSBhbnkgZXh0ZW50cyBvclxcbisgKiB0cmFuc2FjdGlvbnMgdG8gd29ycnkgYWJvdXQsIHRoZXJlIGlzbid0IGFueXRoaW5nIHRvIHVwZGF0ZSBoZXJlLiBUaGUgb24tZGlza1xcbisgKiBpbmRpcmVjdCBibG9ja3MgZ2V0IGRpcnRpZWQgaW4gbWluaXhfaW9tYXBfYmVnaW4uXFxuKyAqL1xcbitzdGF0aWMgaW50IG1pbml4X2lvbWFwX2VuZChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb2ZmX3Qgb2Zmc2V0LCBsb2ZmX3QgbGVuZ3RoLFxcbitcXHRzc2l6ZV90IHdyaXR0ZW4sIHVuc2lnbmVkIGludCBmbGFncywgc3RydWN0IGlvbWFwICppb21hcClcXG4re1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbmRpZmYgLS1naXQgYS9mcy9taW5peC9pdHJlZV9jb21tb24uYyBiL2ZzL21pbml4L2l0cmVlX2NvbW1vbi5jXFxuaW5kZXggYzNjZDJjNzVhZjljZWUuLjVhOGI3M2E3YmVkYTc4IDEwMDY0NFxcbi0tLSBhL2ZzL21pbml4L2l0cmVlX2NvbW1vbi5jXFxuKysrIGIvZnMvbWluaXgvaXRyZWVfY29tbW9uLmNcXG5AQCAtMzExLDcgKzMxMSwxNiBAQCBzdGF0aWMgaW5saW5lIHZvaWQgdHJ1bmNhdGUgKHN0cnVjdCBpbm9kZSAqIGlub2RlKVxcbiBcXHRsb25nIGlibG9jaztcXG4gXFxuIFxcdGlibG9jayA9IChpbm9kZS1cXHUwMDNlaV9zaXplICsgc2ItXFx1MDAzZXNfYmxvY2tzaXplIC0xKSBcXHUwMDNlXFx1MDAzZSBzYi1cXHUwMDNlc19ibG9ja3NpemVfYml0cztcXG4tXFx0YmxvY2tfdHJ1bmNhdGVfcGFnZShpbm9kZS1cXHUwMDNlaV9tYXBwaW5nLCBpbm9kZS1cXHUwMDNlaV9zaXplLCBnZXRfYmxvY2spO1xcbitcXG4rXFx0LyogRGVwZW5kaW5nIG9uIHdoYXQgYWRkcmVzcyBzcGFjZSBvcGVyYXRpb25zIGFyZSBiZWluZyB1c2VkIGJ5IHRoZVxcbitcXHQgKiBpbm9kZSBiZWluZyB0cnVuY2F0ZWQsIHdlIG5lZWQgdG8gZWl0aGVyIGNhbGwgaW9tYXBfdHJ1bmNhdGVfcGFnZSBvclxcbitcXHQgKiBibG9ja190cnVuY2F0ZV9wYWdlLlxcbitcXHQgKi9cXG4rXFx0aWYgKGlub2RlLVxcdTAwM2VpX21hcHBpbmctXFx1MDAzZWFfb3BzID09IFxcdTAwMjZtaW5peF9hb3BzKVxcbitcXHRcXHRpb21hcF90cnVuY2F0ZV9wYWdlKGlub2RlLCBpbm9kZS1cXHUwMDNlaV9zaXplLCBOVUxMLFxcbitcXHRcXHRcXHRtaW5peF9pb21hcF9vcHNfdmVyKGlub2RlKSwgTlVMTCwgTlVMTCk7XFxuK1xcdGVsc2VcXG4rXFx0XFx0YmxvY2tfdHJ1bmNhdGVfcGFnZShpbm9kZS1cXHUwMDNlaV9tYXBwaW5nLCBpbm9kZS1cXHUwMDNlaV9zaXplLCBnZXRfYmxvY2spO1xcbiBcXG4gXFx0biA9IGJsb2NrX3RvX3BhdGgoaW5vZGUsIGlibG9jaywgb2Zmc2V0cyk7XFxuIFxcdGlmICghbilcXG5kaWZmIC0tZ2l0IGEvZnMvbWluaXgvaXRyZWVfdjEuYyBiL2ZzL21pbml4L2l0cmVlX3YxLmNcXG5pbmRleCAxZmVkOTA2MDQyYWE4NC4uNThjMjlmNDQ0M2QzNzIgMTAwNjQ0XFxuLS0tIGEvZnMvbWluaXgvaXRyZWVfdjEuY1xcbisrKyBiL2ZzL21pbml4L2l0cmVlX3YxLmNcXG5AQCAtNDksNiArNDksMTggQEAgc3RhdGljIGludCBibG9ja190b19wYXRoKHN0cnVjdCBpbm9kZSAqIGlub2RlLCBsb25nIGJsb2NrLCBpbnQgb2Zmc2V0c1tERVBUSF0pXFxuIH1cXG4gXFxuICNpbmNsdWRlIFxcXCJpdHJlZV9jb21tb24uY1xcXCJcXG4rLyogTk9UQSBCRU5FOlxcbisgKlxcbisgKiBUaGlzIGlzIGlja3kgdG8gbWUsIGJ1dCBhdCB0aGUgc2FtZSB0aW1lIGhhdmluZyBpdCBiZSBhIHN0YW5kYWxvbmUgQyBmaWxlXFxuKyAqIHRoYXQncyBjb21waWxlZCB0byBvYmplY3QgZm9ybSBhbmQgbGlua2VkIHNlcGFyYXRlbHkgbGlrZSBpdCBpcyBpbiB4aWFmcyBpc1xcbisgKiBtdWNoIG5hc3RpZXIgaW4gbWluaXggYmVjYXVzZSBvZiB0aGUgZGlmZmVyZW50IHZlcnNpb25zIG9mIHRoZSBtaW5peCBmcyB0aGF0XFxuKyAqIGhhdmUgc29tZSB2ZXJ5LCB2ZXJ5IGRpZmZlcmVudCBhc3BlY3RzLCBsaWtlIHRoZSBzaXplIG9mIGJsb2NrX3QuIEkgZG9uJ3RcXG4rICogbGlrZSBpdCwgYnV0IHNpbmNlIG1pbml4IGFscmVhZHkgaGFzIHRoaXMgcGF0dGVybiB3aGVyZSBhIGNvbW1vbiBpdHJlZSBmaWxlXFxuKyAqIGlzIGluY2x1ZGVkIGluIHRoZSBpdHJlZV92MSBhbmQgaXRyZWVfdjIoYW5kIHYzKSBmaWxlcywgSSdtIGluY2x1ZGluZyBpb21hcC5jXFxuKyAqIGluIHRoZXNlIGZpbGVzIGFzIHdlbGwuIEl0IGRvZXMgYXQgbGVhc3QgYXZvaWQgZXhwb3J0aW5nIHNvbWUgY3VycmVudGx5XFxuKyAqIHN0YXRpYyBmdW5jdGlvbnMgdGhhdCBhcmVuJ3QgbmVlZGVkIGFueXdoZXJlIGJ1dCBpdHJlZV9jb21tb24uYyBhbmQgaW9tYXAuYy5cXG4rICovXFxuKyNpbmNsdWRlIFxcXCJpb21hcC5jXFxcIlxcbiBcXG4gaW50IFYxX21pbml4X2dldF9ibG9jayhzdHJ1Y3QgaW5vZGUgKiBpbm9kZSwgbG9uZyBibG9jayxcXG4gXFx0XFx0XFx0c3RydWN0IGJ1ZmZlcl9oZWFkICpiaF9yZXN1bHQsIGludCBjcmVhdGUpXFxuQEAgLTYxLDcgKzczLDE4IEBAIHZvaWQgVjFfbWluaXhfdHJ1bmNhdGUoc3RydWN0IGlub2RlICogaW5vZGUpXFxuIFxcdHRydW5jYXRlKGlub2RlKTtcXG4gfVxcbiBcXG4tdW5zaWduZWQgVjFfbWluaXhfYmxvY2tzKGxvZmZfdCBzaXplLCBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxcbit1bnNpZ25lZCBpbnQgVjFfbWluaXhfYmxvY2tzKGxvZmZfdCBzaXplLCBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxcbiB7XFxuIFxcdHJldHVybiBuYmxvY2tzKHNpemUsIHNiKTtcXG4gfVxcbitcXG4raW50IFYxX21pbml4X2lvbWFwX2JlZ2luKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfdCBvZmZzZXQsIGxvZmZfdCBsZW5ndGgsXFxuK1xcdHVuc2lnbmVkIGludCBmbGFncywgc3RydWN0IGlvbWFwICppb21hcCwgc3RydWN0IGlvbWFwICpzcmNtYXApXFxuK3tcXG4rXFx0cmV0dXJuIG1pbml4X2lvbWFwX2JlZ2luKGlub2RlLCBvZmZzZXQsIGxlbmd0aCwgZmxhZ3MsIGlvbWFwLCBzcmNtYXApO1xcbit9XFxuK1xcbitjb25zdCBzdHJ1Y3QgaW9tYXBfb3BzIFYxX21pbml4X2lvbWFwX29wcyA9IHtcXG4rXFx0LmlvbWFwX2JlZ2luID0gVjFfbWluaXhfaW9tYXBfYmVnaW4sXFxuK1xcdC5pb21hcF9lbmQgICA9IG1pbml4X2lvbWFwX2VuZCxcXG4rfTtcXG5kaWZmIC0tZ2l0IGEvZnMvbWluaXgvaXRyZWVfdjIuYyBiL2ZzL21pbml4L2l0cmVlX3YyLmNcXG5pbmRleCA5ZDAwZjMxYTJkOWQxNS4uZmM3YTVhZThmYTFjYTMgMTAwNjQ0XFxuLS0tIGEvZnMvbWluaXgvaXRyZWVfdjIuY1xcbisrKyBiL2ZzL21pbml4L2l0cmVlX3YyLmNcXG5AQCAtNTcsNiArNTcsMTAgQEAgc3RhdGljIGludCBibG9ja190b19wYXRoKHN0cnVjdCBpbm9kZSAqIGlub2RlLCBsb25nIGJsb2NrLCBpbnQgb2Zmc2V0c1tERVBUSF0pXFxuIH1cXG4gXFxuICNpbmNsdWRlIFxcXCJpdHJlZV9jb21tb24uY1xcXCJcXG4rLyogU2VlIHRoZSBub3RlIGluIGl0cmVlX3YxIGluIGEgY29tbWVudCB0aGF0IHN0YXJ0cyBcXFwiTk9UQSBCRU5FXFxcIiBmb3IgYW5cXG4rICogZXhwbGFuYXRpb24gZm9yIHdoeSBpb21hcC5jIGlzIGluY2x1ZGVkIGhlcmUuXFxuKyAqL1xcbisjaW5jbHVkZSBcXFwiaW9tYXAuY1xcXCJcXG4gXFxuIGludCBWMl9taW5peF9nZXRfYmxvY2soc3RydWN0IGlub2RlICogaW5vZGUsIGxvbmcgYmxvY2ssXFxuIFxcdFxcdFxcdHN0cnVjdCBidWZmZXJfaGVhZCAqYmhfcmVzdWx0LCBpbnQgY3JlYXRlKVxcbkBAIC02OSw3ICs3MywxOCBAQCB2b2lkIFYyX21pbml4X3RydW5jYXRlKHN0cnVjdCBpbm9kZSAqIGlub2RlKVxcbiBcXHR0cnVuY2F0ZShpbm9kZSk7XFxuIH1cXG4gXFxuLXVuc2lnbmVkIFYyX21pbml4X2Jsb2Nrcyhsb2ZmX3Qgc2l6ZSwgc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcXG4rdW5zaWduZWQgaW50IFYyX21pbml4X2Jsb2Nrcyhsb2ZmX3Qgc2l6ZSwgc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcXG4ge1xcbiBcXHRyZXR1cm4gbmJsb2NrcyhzaXplLCBzYik7XFxuIH1cXG4rXFxuK2ludCBWMl9taW5peF9pb21hcF9iZWdpbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb2ZmX3Qgb2Zmc2V0LCBsb2ZmX3QgbGVuZ3RoLFxcbitcXHR1bnNpZ25lZCBpbnQgZmxhZ3MsIHN0cnVjdCBpb21hcCAqaW9tYXAsIHN0cnVjdCBpb21hcCAqc3JjbWFwKVxcbit7XFxuK1xcdHJldHVybiBtaW5peF9pb21hcF9iZWdpbihpbm9kZSwgb2Zmc2V0LCBsZW5ndGgsIGZsYWdzLCBpb21hcCwgc3JjbWFwKTtcXG4rfVxcbitcXG4rY29uc3Qgc3RydWN0IGlvbWFwX29wcyBWMl9taW5peF9pb21hcF9vcHMgPSB7XFxuK1xcdC5pb21hcF9iZWdpbiA9IFYyX21pbml4X2lvbWFwX2JlZ2luLFxcbitcXHQuaW9tYXBfZW5kICAgPSBtaW5peF9pb21hcF9lbmQsXFxuK307XFxuZGlmZiAtLWdpdCBhL2ZzL21pbml4L21pbml4LmggYi9mcy9taW5peC9taW5peC5oXFxuaW5kZXggZjIwMjVjOWI1ODI1MmYuLmQxYTg5MGU5NmFiZTJjIDEwMDY0NFxcbi0tLSBhL2ZzL21pbml4L21pbml4LmhcXG4rKysgYi9mcy9taW5peC9taW5peC5oXFxuQEAgLTUsNiArNSw3IEBAXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9mcy5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvcGFnZW1hcC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvbWluaXhfZnMuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2lvbWFwLmhcXHUwMDNlXFxuIFxcbiAjZGVmaW5lIElOT0RFX1ZFUlNJT04oaW5vZGUpXFx0bWluaXhfc2IoaW5vZGUtXFx1MDAzZWlfc2IpLVxcdTAwM2VzX3ZlcnNpb25cXG4gI2RlZmluZSBNSU5JWF9WMVxcdFxcdDB4MDAwMVxcdFxcdC8qIG9yaWdpbmFsIG1pbml4IGZzICovXFxuQEAgLTU2LDcgKzU3LDkgQEAgaW50IG1pbml4X25ld19ibG9jayhzdHJ1Y3QgaW5vZGUgKmlub2RlKTtcXG4gdm9pZCBtaW5peF9mcmVlX2Jsb2NrKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHVuc2lnbmVkIGxvbmcgYmxvY2spO1xcbiB1bnNpZ25lZCBsb25nIG1pbml4X2NvdW50X2ZyZWVfYmxvY2tzKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpO1xcbiBpbnQgbWluaXhfZ2V0YXR0cihzdHJ1Y3QgbW50X2lkbWFwICosIGNvbnN0IHN0cnVjdCBwYXRoICosXFxuLVxcdFxcdHN0cnVjdCBrc3RhdCAqLCB1MzIsIHVuc2lnbmVkIGludCk7XFxuK1xcdFxcdHN0cnVjdCBrc3RhdCAqLCB1MzIsIHVuc2lnbmVkKTtcXG4raW50IG1pbml4X3NldGF0dHIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcXG4rXFx0c3RydWN0IGlhdHRyICphdHRyKTtcXG4gaW50IG1pbml4X3ByZXBhcmVfY2h1bmsoc3RydWN0IGZvbGlvICpmb2xpbywgbG9mZl90IHBvcywgdW5zaWduZWQgbGVuKTtcXG4gc3RydWN0IG1hcHBpbmdfbWV0YWRhdGFfYmhzICptaW5peF9nZXRfbWV0YWRhdGFfYmhzKHN0cnVjdCBpbm9kZSAqaW5vZGUpO1xcbiBpbnQgbWluaXhfZnN5bmMoc3RydWN0IGZpbGUgKmZpbGUsIGxvZmZfdCBzdGFydCwgbG9mZl90IGVuZCwgaW50IGRhdGFzeW5jKTtcXG5AQCAtNjksNiArNzIsOCBAQCBleHRlcm4gaW50IFYxX21pbml4X2dldF9ibG9jayhzdHJ1Y3QgaW5vZGUgKiwgbG9uZywgc3RydWN0IGJ1ZmZlcl9oZWFkICosIGludCk7XFxuIGV4dGVybiBpbnQgVjJfbWluaXhfZ2V0X2Jsb2NrKHN0cnVjdCBpbm9kZSAqLCBsb25nLCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKiwgaW50KTtcXG4gZXh0ZXJuIHVuc2lnbmVkIFYxX21pbml4X2Jsb2Nrcyhsb2ZmX3QsIHN0cnVjdCBzdXBlcl9ibG9jayAqKTtcXG4gZXh0ZXJuIHVuc2lnbmVkIFYyX21pbml4X2Jsb2Nrcyhsb2ZmX3QsIHN0cnVjdCBzdXBlcl9ibG9jayAqKTtcXG4rZXh0ZXJuIGludCBtaW5peF9nZXRfYmxvY2soc3RydWN0IGlub2RlICppbm9kZSwgc2VjdG9yX3QgYmxvY2ssXFxuK1xcdFxcdCAgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoX3Jlc3VsdCwgaW50IGNyZWF0ZSk7XFxuIFxcbiBzdHJ1Y3QgbWluaXhfZGlyX2VudHJ5ICptaW5peF9maW5kX2VudHJ5KHN0cnVjdCBkZW50cnkgKiwgc3RydWN0IGZvbGlvICoqKTtcXG4gaW50IG1pbml4X2FkZF9saW5rKHN0cnVjdCBkZW50cnkqLCBzdHJ1Y3QgaW5vZGUqKTtcXG5AQCAtNzcsMTMgKzgyLDI2IEBAIGludCBtaW5peF9tYWtlX2VtcHR5KHN0cnVjdCBpbm9kZSosIHN0cnVjdCBpbm9kZSopO1xcbiBpbnQgbWluaXhfZW1wdHlfZGlyKHN0cnVjdCBpbm9kZSopO1xcbiBpbnQgbWluaXhfc2V0X2xpbmsoc3RydWN0IG1pbml4X2Rpcl9lbnRyeSAqZGUsIHN0cnVjdCBmb2xpbyAqZm9saW8sXFxuIFxcdFxcdHN0cnVjdCBpbm9kZSAqaW5vZGUpO1xcbitleHRlcm4gY29uc3QgY2hhciAqbWluaXhfZ2V0X2xpbmsoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbitcXHRcXHRzdHJ1Y3QgZGVsYXllZF9jYWxsICpjYWxsYmFjayk7XFxuK1xcbiBzdHJ1Y3QgbWluaXhfZGlyX2VudHJ5ICptaW5peF9kb3Rkb3Qoc3RydWN0IGlub2RlKiwgc3RydWN0IGZvbGlvICoqKTtcXG4gaW5vX3QgbWluaXhfaW5vZGVfYnlfbmFtZShzdHJ1Y3QgZGVudHJ5Kik7XFxuIFxcbitleHRlcm4gaW50IFYxX21pbml4X2lvbWFwX2JlZ2luKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfdCBvZmZzZXQsXFxuK1xcdGxvZmZfdCBsZW5ndGgsIHVuc2lnbmVkIGludCBmbGFncywgc3RydWN0IGlvbWFwICppb21hcCxcXG4rXFx0c3RydWN0IGlvbWFwICpzcmNtYXApO1xcbitleHRlcm4gaW50IFYyX21pbml4X2lvbWFwX2JlZ2luKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfdCBvZmZzZXQsXFxuK1xcdGxvZmZfdCBsZW5ndGgsIHVuc2lnbmVkIGludCBmbGFncywgc3RydWN0IGlvbWFwICppb21hcCxcXG4rXFx0c3RydWN0IGlvbWFwICpzcmNtYXApO1xcbitcXG4rZXh0ZXJuIGNvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgbWluaXhfYW9wcztcXG4gZXh0ZXJuIGNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIG1pbml4X2ZpbGVfaW5vZGVfb3BlcmF0aW9ucztcXG4gZXh0ZXJuIGNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIG1pbml4X2Rpcl9pbm9kZV9vcGVyYXRpb25zO1xcbiBleHRlcm4gY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBtaW5peF9maWxlX29wZXJhdGlvbnM7XFxuIGV4dGVybiBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIG1pbml4X2Rpcl9vcGVyYXRpb25zO1xcbitleHRlcm4gY29uc3Qgc3RydWN0IGlvbWFwX29wcyBWMV9taW5peF9pb21hcF9vcHM7XFxuK2V4dGVybiBjb25zdCBzdHJ1Y3QgaW9tYXBfb3BzIFYyX21pbml4X2lvbWFwX29wcztcXG4gXFxuIHN0YXRpYyBpbmxpbmUgc3RydWN0IG1pbml4X3NiX2luZm8gKm1pbml4X3NiKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXFxuIHtcXG5AQCAtOTUsMTEgKzExMywxNyBAQCBzdGF0aWMgaW5saW5lIHN0cnVjdCBtaW5peF9pbm9kZV9pbmZvICptaW5peF9pKHN0cnVjdCBpbm9kZSAqaW5vZGUpXFxuIFxcdHJldHVybiBjb250YWluZXJfb2YoaW5vZGUsIHN0cnVjdCBtaW5peF9pbm9kZV9pbmZvLCB2ZnNfaW5vZGUpO1xcbiB9XFxuIFxcbi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIG1pbml4X2Jsb2Nrc19uZWVkZWQodW5zaWduZWQgYml0cywgdW5zaWduZWQgYmxvY2tzaXplKVxcbitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBtaW5peF9ibG9ja3NfbmVlZGVkKHVuc2lnbmVkIGludCBiaXRzLCB1bnNpZ25lZCBpbnQgYmxvY2tzaXplKVxcbiB7XFxuIFxcdHJldHVybiBESVZfUk9VTkRfVVAoYml0cywgYmxvY2tzaXplICogOCk7XFxuIH1cXG4gXFxuK3N0YXRpYyBpbmxpbmUgY29uc3Qgc3RydWN0IGlvbWFwX29wcyAqbWluaXhfaW9tYXBfb3BzX3ZlcihzdHJ1Y3QgaW5vZGUgKmlub2RlKVxcbit7XFxuK1xcdHJldHVybiAoSU5PREVfVkVSU0lPTihpbm9kZSkgPT0gTUlOSVhfVjEpID9cXG4rXFx0XFx0XFx1MDAyNlYxX21pbml4X2lvbWFwX29wcyA6IFxcdTAwMjZWMl9taW5peF9pb21hcF9vcHM7XFxuK31cXG4rXFxuICNpZiBkZWZpbmVkKENPTkZJR19NSU5JWF9GU19OQVRJVkVfRU5ESUFOKSBcXHUwMDI2XFx1MDAyNiBcXFxcXFxuIFxcdGRlZmluZWQoQ09ORklHX01JTklYX0ZTX0JJR19FTkRJQU5fMTZCSVRfSU5ERVhFRClcXG4gXFxuQEAgLTEyOSw3ICsxNTMsNyBAQCBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIG1pbml4X2Jsb2Nrc19uZWVkZWQodW5zaWduZWQgYml0cywgdW5zaWduZWQgYmxvY2tzaXplKVxcbiAgKiBiaWctZW5kaWFuIDE2Yml0IGluZGV4ZWQgYml0bWFwc1xcbiAgKi9cXG4gXFxuLXN0YXRpYyBpbmxpbmUgaW50IG1pbml4X2ZpbmRfZmlyc3RfemVyb19iaXQoY29uc3Qgdm9pZCAqdmFkZHIsIHVuc2lnbmVkIHNpemUpXFxuK3N0YXRpYyBpbmxpbmUgaW50IG1pbml4X2ZpbmRfZmlyc3RfemVyb19iaXQoY29uc3Qgdm9pZCAqdmFkZHIsIHVuc2lnbmVkIGludCBzaXplKVxcbiB7XFxuIFxcdGNvbnN0IHVuc2lnbmVkIHNob3J0ICpwID0gdmFkZHIsICphZGRyID0gdmFkZHI7XFxuIFxcdHVuc2lnbmVkIHNob3J0IG51bTtcXG5kaWZmIC0tZ2l0IGEvZnMvbWluaXgvbmFtZWkuYyBiL2ZzL21pbml4L25hbWVpLmNcXG5pbmRleCAyNjNlNGJhOGIxYzgyMi4uZTI0NWY1NWE2OGZmNWQgMTAwNjQ0XFxuLS0tIGEvZnMvbWluaXgvbmFtZWkuY1xcbisrKyBiL2ZzL21pbml4L25hbWVpLmNcXG5AQCAtNiw2ICs2LDggQEBcXG4gICovXFxuIFxcbiAjaW5jbHVkZSBcXFwibWluaXguaFxcXCJcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2J1ZmZlcl9oZWFkLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9uYW1laS5oXFx1MDAzZVxcbiBcXG4gc3RhdGljIGludCBhZGRfbm9uZGlyKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGlub2RlICppbm9kZSlcXG4ge1xcbkBAIC02OSw2ICs3MSwxMDEgQEAgc3RhdGljIGludCBtaW5peF9jcmVhdGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxcbiBcXHRyZXR1cm4gbWluaXhfbWtub2QoXFx1MDAyNm5vcF9tbnRfaWRtYXAsIGRpciwgZGVudHJ5LCBtb2RlLCAwKTtcXG4gfVxcbiBcXG4rc3RhdGljIGlubGluZSB1MTYgKnYxX2lfZGF0YShzdHJ1Y3QgaW5vZGUgKmlub2RlKVxcbit7XFxuK1xcdHJldHVybiAodTE2ICopbWluaXhfaShpbm9kZSktXFx1MDAzZXUuaTFfZGF0YTtcXG4rfVxcbitcXG4rc3RhdGljIGlubGluZSB1MzIgKnYyX2lfZGF0YShzdHJ1Y3QgaW5vZGUgKmlub2RlKVxcbit7XFxuK1xcdHJldHVybiAodTMyICopbWluaXhfaShpbm9kZSktXFx1MDAzZXUuaTJfZGF0YTtcXG4rfVxcbitcXG4rc3RhdGljIGlubGluZSB1MTYgY3B1X3RvX3YxX2Jsb2NrKHNlY3Rvcl90IG4pXFxuK3tcXG4rXFx0cmV0dXJuIG47XFxuK31cXG4rXFxuK3N0YXRpYyBpbmxpbmUgdTMyIGNwdV90b192Ml9ibG9jayhzZWN0b3JfdCBuKVxcbit7XFxuK1xcdHJldHVybiBuO1xcbit9XFxuK1xcbitzdGF0aWMgaW5saW5lIHNlY3Rvcl90IHYxX2Jsb2NrX3RvX2NwdSh1MTYgbilcXG4re1xcbitcXHRyZXR1cm4gbjtcXG4rfVxcbitcXG4rc3RhdGljIGlubGluZSBzZWN0b3JfdCB2Ml9ibG9ja190b19jcHUodTMyIG4pXFxuK3tcXG4rXFx0cmV0dXJuIG47XFxuK31cXG4rXFxuKy8qIFJlaW1wbGVtZW50IHBhZ2Vfc3ltbGluaydzIGdlbmVyYWwgbG9naWMgd2hpbGUgYXZvaWRpbmcgdXNpbmcgYnVmZmVyIGhlYWRcXG4rICogYmFzZWQgYW9wcyBvcGVyYXRpb25zIGxpa2UgYW9wcy1cXHUwMDNld3JpdGVfYmVnaW4gc28gdGhpbmdzIGJlaGF2ZSBiZXR0ZXIgd2l0aFxcbisgKiB0aGUgbmV3IHJlZ2ltZSBvZiBpb21hcCBiYXNlZCBhb3BzIG9wZXJhdGlvbnMuIENyaWJiaW5nIGZyb20gcGFnZV9zeW1saW5rIGluXFxuKyAqIGZzL25hbWVpLmMgYW5kIGV4dDQncyBleHQ0X2luaXRfc3ltbGlua19ibG9jay5cXG4rICovXFxuK3N0YXRpYyBpbnQgX19wYWdlX3N5bWxpbmsoc3RydWN0IGlub2RlICppbm9kZSwgY29uc3QgY2hhciAqc3ltbmFtZSwgaW50IGxlbilcXG4re1xcbitcXHRzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiID0gaW5vZGUtXFx1MDAzZWlfc2I7XFxuK1xcdHN0cnVjdCBidWZmZXJfaGVhZCAqYmg7XFxuK1xcdGNoYXIgKmthZGRyO1xcbitcXHRpbnQgZXJyID0gMDtcXG4rXFx0dTE2ICpwMTY7IC8qIHYxIDE2IGJpdCBibG9jayAqL1xcbitcXHR1MzIgKnAzMjsgLyogdjIvMyAzMiBiaXQgYmxvY2sgKi9cXG4rXFxuK1xcdHNlY3Rvcl90IHBoeXM7XFxuK1xcbitcXHRwaHlzID0gbWluaXhfbmV3X2Jsb2NrKGlub2RlKTtcXG4rXFx0aWYgKCFwaHlzKSB7XFxuK1xcdFxcdGVyciA9IC1FTk9TUEM7XFxuK1xcdFxcdGdvdG8gcHNfb3V0O1xcbitcXHR9XFxuK1xcbitcXHRpZiAoSU5PREVfVkVSU0lPTihpbm9kZSkgPT0gTUlOSVhfVjEpIHtcXG4rXFx0XFx0cDE2ID0gdjFfaV9kYXRhKGlub2RlKTtcXG4rXFx0XFx0KnAxNiA9IGNwdV90b192MV9ibG9jayhwaHlzKTtcXG4rXFx0fSBlbHNlIHtcXG4rXFx0XFx0cDMyID0gdjJfaV9kYXRhKGlub2RlKTtcXG4rXFx0XFx0KnAzMiA9IGNwdV90b192Ml9ibG9jayhwaHlzKTtcXG4rXFx0fVxcbitcXG4rXFx0YmggPSBzYl9nZXRibGsoc2IsIHBoeXMpO1xcbitcXHRpZiAoIWJoKSB7XFxuK1xcdFxcdGVyciA9IC1FTk9NRU07XFxuK1xcdFxcdGdvdG8gcHNfZmFpbDtcXG4rXFx0fVxcbitcXG4rXFx0bG9ja19idWZmZXIoYmgpO1xcbitcXHRrYWRkciA9IChjaGFyICopYmgtXFx1MDAzZWJfZGF0YTtcXG4rXFx0bWVtc2V0KGthZGRyLCAwLCBzYi1cXHUwMDNlc19ibG9ja3NpemUpO1xcbitcXHRtZW1jcHkoa2FkZHIsIHN5bW5hbWUsIGxlbik7XFxuK1xcdGlub2RlLVxcdTAwM2VpX3NpemUgPSBsZW4gLSAxO1xcbitcXHRzZXRfYnVmZmVyX3VwdG9kYXRlKGJoKTtcXG4rXFx0dW5sb2NrX2J1ZmZlcihiaCk7XFxuK1xcbitcXHRtbWJfbWFya19idWZmZXJfZGlydHkoYmgsIFxcdTAwMjZtaW5peF9pKGlub2RlKS1cXHUwMDNlaV9tZXRhZGF0YV9iaHMpO1xcbitcXHRpZiAoaW5vZGVfbmVlZHNfc3luYyhpbm9kZSkpIHtcXG4rXFx0XFx0c3luY19kaXJ0eV9idWZmZXIoYmgpO1xcbitcXHRcXHRpZiAoYnVmZmVyX3JlcShiaCkgXFx1MDAyNlxcdTAwMjYgIWJ1ZmZlcl91cHRvZGF0ZShiaCkpIHtcXG4rXFx0XFx0XFx0cHJfZXJyKFxcXCJpL28gZXJyb3Igc3luY2luZyBpdGFibGUgYmxvY2tcXFwiKTtcXG4rXFx0XFx0XFx0ZXJyID0gLUVJTztcXG4rXFx0XFx0fVxcbitcXG4rXFx0fVxcbitcXG4rXFx0bWFya19pbm9kZV9kaXJ0eShpbm9kZSk7XFxuK1xcdGJyZWxzZShiaCk7XFxuK1xcbitwc19vdXQ6XFxuK1xcdHJldHVybiBlcnI7XFxuK1xcbitwc19mYWlsOlxcbitcXHRtaW5peF9mcmVlX2Jsb2NrKGlub2RlLCBwaHlzKTtcXG4rXFx0Z290byBwc19vdXQ7XFxuK31cXG4rXFxuIHN0YXRpYyBpbnQgbWluaXhfc3ltbGluayhzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXFxuIFxcdFxcdFxcdCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIGNvbnN0IGNoYXIgKnN5bW5hbWUpXFxuIHtcXG5AQCAtODQsNyArMTgxLDcgQEAgc3RhdGljIGludCBtaW5peF9zeW1saW5rKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcXG4gXFx0XFx0cmV0dXJuIFBUUl9FUlIoaW5vZGUpO1xcbiBcXG4gXFx0bWluaXhfc2V0X2lub2RlKGlub2RlLCAwKTtcXG4tXFx0ZXJyID0gcGFnZV9zeW1saW5rKGlub2RlLCBzeW1uYW1lLCBpKTtcXG4rXFx0ZXJyID0gX19wYWdlX3N5bWxpbmsoaW5vZGUsIHN5bW5hbWUsIGkpO1xcbiBcXHRpZiAodW5saWtlbHkoZXJyKSkge1xcbiBcXHRcXHRpbm9kZV9kZWNfbGlua19jb3VudChpbm9kZSk7XFxuIFxcdFxcdGlwdXQoaW5vZGUpO1xcbkBAIC0yNzMsNiArMzcwLDQ0IEBAIHN0YXRpYyBpbnQgbWluaXhfcmVuYW1lKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxcbiBcXHRyZXR1cm4gZXJyO1xcbiB9XFxuIFxcbisvKiBzdHJhaWdodCB1cCB0aGlldmVyeSBoZXJlOyBzdG9sZW4gdmVyYmF0aW0gZnJvbSBleHQ0X2dldF9saW5rICovXFxuK3N0YXRpYyB2b2lkIG1pbml4X2ZyZWVfbGluayh2b2lkICpiaClcXG4re1xcbitcXHRicmVsc2UoYmgpO1xcbit9XFxuK1xcbisvKiBCb3Jyb3dpbmcgZnJvbSBleHQ0X2dldF9saW5rIHRvIGEgZGVncmVlOyBzaW5jZSBtaW5peCBpbm9kZXMgYW5kIHN5bWxpbmtzXFxuKyAqIGFyZSBzaWduaWZpY2FudGx5IHNpbXBsZXIsIHdlIGRvbid0IG5lZWQgdG8gZG8gbmVhcmx5IGFzIG11Y2ggYXMgZXh0NFxcbisgKiByZXF1aXJlcyBmb3Igb2xkLXRpbWV5IGV4dDQgc2xvdyBsaW5rcy5cXG4rICovXFxuK2NvbnN0IGNoYXIgKm1pbml4X2dldF9saW5rKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGlub2RlICppbm9kZSxcXG4rXFx0XFx0c3RydWN0IGRlbGF5ZWRfY2FsbCAqY2FsbGJhY2spXFxuK3tcXG4rXFx0c3RydWN0IHN1cGVyX2Jsb2NrICpzYiA9IGlub2RlLVxcdTAwM2VpX3NiO1xcbitcXHRzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoO1xcbitcXHRzZWN0b3JfdCBibGs7XFxuK1xcbitcXHQvKiBHZXQgeW9uIGJsb2NrLCBkZXBlbmRpbmcgb24gd2hhdCB2ZXJzaW9uIG9mIHRoZSBtaW5peCBmcyB0aGlzIGlzLiAqL1xcbitcXHRpZiAoSU5PREVfVkVSU0lPTihpbm9kZSkgPT0gTUlOSVhfVjEpXFxuK1xcdFxcdGJsayA9IHYxX2Jsb2NrX3RvX2NwdSgqKHYxX2lfZGF0YShpbm9kZSkpKTtcXG4rXFx0ZWxzZVxcbitcXHRcXHRibGsgPSB2Ml9ibG9ja190b19jcHUoKih2Ml9pX2RhdGEoaW5vZGUpKSk7XFxuK1xcbitcXHRiaCA9IHNiX2JyZWFkKHNiLCBibGspO1xcbitcXHRpZiAoSVNfRVJSKGJoKSlcXG4rXFx0XFx0cmV0dXJuIEVSUl9DQVNUKGJoKTtcXG4rXFx0aWYgKCFiaCkge1xcbitcXHRcXHRwcl9lcnIoXFxcImJhZCBzeW1saW5rIG9uIGlub2RlICVsbHVcXFwiLCBpbm9kZS1cXHUwMDNlaV9pbm8pO1xcbitcXHRcXHRyZXR1cm4gRVJSX1BUUigtRUZTQ09SUlVQVEVEKTtcXG4rXFx0fVxcbitcXG4rXFx0c2V0X2RlbGF5ZWRfY2FsbChjYWxsYmFjaywgbWluaXhfZnJlZV9saW5rLCBiaCk7XFxuK1xcdG5kX3Rlcm1pbmF0ZV9saW5rKGJoLVxcdTAwM2ViX2RhdGEsIGlub2RlLVxcdTAwM2VpX3NpemUsXFxuK1xcdFxcdFxcdGlub2RlLVxcdTAwM2VpX3NiLVxcdTAwM2VzX2Jsb2Nrc2l6ZSAtIDEpO1xcbitcXG4rXFx0cmV0dXJuIGJoLVxcdTAwM2ViX2RhdGE7XFxuK31cXG4rXFxuIC8qXFxuICAqIGRpcmVjdG9yaWVzIGNhbiBoYW5kbGUgbW9zdCBvcGVyYXRpb25zLi4uXFxuICAqL1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yOFQwNTozMzowNC4wMTU4NzU0MDJaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjIyMzAwOTc4NjExLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk1JTklYX0ZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibWluaXhfZGlvX3JlYWRfaXRlclwiLFxuICAgIFwibWluaXhfZGlvX3dyaXRlX2l0ZXJcIixcbiAgICBcIm1pbml4X2Rpb193cml0ZV9lbmRfaW9cIixcbiAgICBcIm1pbml4X2ZpbGVfcmVhZF9pdGVyXCIsXG4gICAgXCJtaW5peF9maWxlX3dyaXRlX2l0ZXJcIixcbiAgICBcIm1pbml4X2lvbWFwX2JlZ2luXCIsXG4gICAgXCJtaW5peF9pb21hcF9lbmRcIixcbiAgICBcIlYxX21pbml4X2lvbWFwX2JlZ2luXCIsXG4gICAgXCJWMl9taW5peF9pb21hcF9iZWdpblwiLFxuICAgIFwibWluaXhfd3JpdGViYWNrX3JhbmdlXCIsXG4gICAgXCJtaW5peF93cml0ZXBhZ2VzXCIsXG4gICAgXCJtaW5peF9yZWFkX2ZvbGlvXCIsXG4gICAgXCJtaW5peF9yZWFkYWhlYWRcIixcbiAgICBcIm1pbml4X2JtYXBcIixcbiAgICBcIl9fcGFnZV9zeW1saW5rXCIsXG4gICAgXCJtaW5peF9nZXRfbGlua1wiLFxuICAgIFwibWluaXhfZnJlZV9saW5rXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW1wbGVtZW50cyBpb21hcC1iYXNlZCBkaXJlY3QgSS9PIGFuZCBidWZmZXJlZCBJL08gZm9yIHRoZSBtaW5peCBmaWxlc3lzdGVtLCB3aGljaCBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRvIHRoZSBjb3JlIGZpbGVzeXN0ZW0gbG9naWMuIEl0IG1vZGlmaWVzIHJlYWQvd3JpdGUgcGF0aHMsIGJsb2NrIG1hcHBpbmcsIGFuZCBzeW1saW5rIGhhbmRsaW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG5ldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0XG4gICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksXG4gICBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGE0NGVlZjg2ZmRhNGI3Mzc1NzZjMjgzYWQwNWU0OGQ5MWJiYjIxYTVcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU3VuIEp1biAyOCAwNTozMzowMiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2ZzL21pbml4L2ZpbGUuYyBiL2ZzL21pbml4L2ZpbGUuY1xuaW5kZXggODZlNTk0M2NkMmZmNzQuLmIwN2M4NTNmYTQzYWJjIDEwMDY0NFxuLS0tIGEvZnMvbWluaXgvZmlsZS5jXG4rKysgYi9mcy9taW5peC9maWxlLmNcbkBAIC0xNywyMSArMTcsMTY2IEBAIGludCBtaW5peF9mc3luYyhzdHJ1Y3QgZmlsZSAqZmlsZSwgbG9mZl90IHN0YXJ0LCBsb2ZmX3QgZW5kLCBpbnQgZGF0YXN5bmMpXG4gXHRcdFx0c3RhcnQsIGVuZCwgZGF0YXN5bmMpO1xuIH1cbiBcbitzdGF0aWMgc3NpemVfdCBtaW5peF9kaW9fcmVhZF9pdGVyKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICp0bylcbit7XG4rXHRzdHJ1Y3QgaW5vZGUgKmlub2RlID0gaW9jYi1cdTAwM2VraV9maWxwLVx1MDAzZWZfbWFwcGluZy1cdTAwM2Vob3N0O1xuK1x0c3NpemVfdCByZXQ7XG4rXG4rXHRpbm9kZV9sb2NrX3NoYXJlZChpbm9kZSk7XG4rXG4rXHRjb25zdCBzdHJ1Y3QgaW9tYXBfb3BzICpvcHMgPSBtaW5peF9pb21hcF9vcHNfdmVyKGlub2RlKTtcbitcbitcdHJldCA9IGlvbWFwX2Rpb19ydyhpb2NiLCB0bywgb3BzLCBOVUxMLCAwLCBOVUxMLCAwKTtcbitcdGlub2RlX3VubG9ja19zaGFyZWQoaW5vZGUpO1xuK1x0cmV0dXJuIHJldDtcbit9XG4rXG4rc3RhdGljIGludCBtaW5peF9kaW9fd3JpdGVfZW5kX2lvKHN0cnVjdCBraW9jYiAqaW9jYiwgc3NpemVfdCBzaXplLCBpbnQgZXJyb3IsXG4rXHRcdHVuc2lnbmVkIGludCBmbGFncylcbit7XG4rXHRzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlsZV9pbm9kZShpb2NiLVx1MDAzZWtpX2ZpbHApO1xuK1x0bG9mZl90IHBvcyA9IGlvY2ItXHUwMDNla2lfcG9zO1xuK1xuK1x0aWYgKGVycm9yKVxuK1x0XHRyZXR1cm4gZXJyb3I7XG4rXG4rXHRwb3MgKz0gc2l6ZTtcbitcdGlmIChzaXplIFx1MDAyNlx1MDAyNiBwb3MgXHUwMDNlIGlfc2l6ZV9yZWFkKGlub2RlKSkge1xuK1x0XHRpX3NpemVfd3JpdGUoaW5vZGUsIHBvcyk7XG4rXHRcdG1hcmtfaW5vZGVfZGlydHkoaW5vZGUpO1xuK1x0fVxuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaW9tYXBfZGlvX29wcyBtaW5peF9kaW9fd3JpdGVfb3BzID0ge1xuK1x0LmVuZF9pbyA9IG1pbml4X2Rpb193cml0ZV9lbmRfaW8sXG4rfTtcbitcbitzdGF0aWMgc3NpemVfdCBtaW5peF9kaW9fd3JpdGVfaXRlcihzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqZnJvbSlcbit7XG4rXHRzdHJ1Y3QgaW5vZGUgKmlub2RlID0gaW9jYi1cdTAwM2VraV9maWxwLVx1MDAzZWZfbWFwcGluZy1cdTAwM2Vob3N0O1xuK1x0c3NpemVfdCByZXQ7XG4rXHR1bnNpZ25lZCBpbnQgZmxhZ3MgPSAwO1xuK1x0dW5zaWduZWQgbG9uZyBibG9ja3NpemUgPSBpbm9kZS1cdTAwM2VpX3NiLVx1MDAzZXNfYmxvY2tzaXplO1xuK1xuK1x0aW5vZGVfbG9jayhpbm9kZSk7XG4rXHRyZXQgPSBnZW5lcmljX3dyaXRlX2NoZWNrcyhpb2NiLCBmcm9tKTtcbitcdGlmIChyZXQgXHUwMDNjPSAwKVxuK1x0XHRnb3RvIG91dF91bmxvY2s7XG4rXG4rXHRyZXQgPSBraW9jYl9tb2RpZmllZChpb2NiKTtcbitcdGlmIChyZXQpXG4rXHRcdGdvdG8gb3V0X3VubG9jaztcbitcbitcdGlmIChpb2NiLVx1MDAzZWtpX3BvcyArIGlvdl9pdGVyX2NvdW50KGZyb20pIFx1MDAzZSBpX3NpemVfcmVhZChpbm9kZSkgfHxcbitcdFx0IUlTX0FMSUdORUQoaW9jYi1cdTAwM2VraV9wb3MgfCBpb3ZfaXRlcl9hbGlnbm1lbnQoZnJvbSksIGJsb2Nrc2l6ZSkpXG4rXHRcdGZsYWdzIHw9IElPTUFQX0RJT19GT1JDRV9XQUlUO1xuK1xuK1x0Y29uc3Qgc3RydWN0IGlvbWFwX29wcyAqb3BzID0gbWluaXhfaW9tYXBfb3BzX3Zlcihpbm9kZSk7XG4rXG4rXHRyZXQgPSBpb21hcF9kaW9fcncoaW9jYiwgZnJvbSwgb3BzLFxuK1x0XHRcdTAwMjZtaW5peF9kaW9fd3JpdGVfb3BzLCBmbGFncywgTlVMTCwgMCk7XG4rXHRpZiAocmV0ID09IC1FTk9UQkxLKVxuK1x0XHRyZXQgPSAwOyAvKiBmYWxsYmFjayB0byBidWZmZXJlZCAqL1xuK1xuK1x0aWYgKHJldCBcdTAwM2U9IDAgXHUwMDI2XHUwMDI2IGlvdl9pdGVyX2NvdW50KGZyb20pKSB7XG4rXHRcdGxvZmZfdCBwb3M7XG4rXHRcdGxvZmZfdCBlbmRieXRlO1xuK1x0XHRzc2l6ZV90IHN0YXR1cztcbitcbitcdFx0aW9jYi1cdTAwM2VraV9mbGFncyBcdTAwMjY9IH5JT0NCX0RJUkVDVDtcbitcdFx0cG9zID0gaW9jYi1cdTAwM2VraV9wb3M7XG4rXHRcdHN0YXR1cyA9IGlvbWFwX2ZpbGVfYnVmZmVyZWRfd3JpdGUoaW9jYiwgZnJvbSwgb3BzLFxuK1x0XHRcdE5VTEwsIE5VTEwpO1xuK1x0XHRpZiAodW5saWtlbHkoc3RhdHVzIFx1MDAzYyAwKSkge1xuK1x0XHRcdHJldCA9IHN0YXR1cztcbitcdFx0XHRnb3RvIG91dF91bmxvY2s7XG4rXHRcdH1cbitcbitcdFx0cmV0ICs9IHN0YXR1cztcbitcdFx0ZW5kYnl0ZSA9IHBvcyArIHN0YXR1cyAtIDE7XG4rXHRcdHN0YXR1cyA9IGZpbGVtYXBfd3JpdGVfYW5kX3dhaXRfcmFuZ2UoaW5vZGUtXHUwMDNlaV9tYXBwaW5nLCBwb3MsIGVuZGJ5dGUpO1xuK1x0XHRpZiAoIXN0YXR1cykge1xuK1x0XHRcdGludmFsaWRhdGVfbWFwcGluZ19wYWdlcyhpbm9kZS1cdTAwM2VpX21hcHBpbmcsXG4rXHRcdFx0XHRwb3MgXHUwMDNlXHUwMDNlIFBBR0VfU0hJRlQsXG4rXHRcdFx0XHRlbmRieXRlIFx1MDAzZVx1MDAzZSBQQUdFX1NISUZUKTtcbitcdFx0XHRpZiAocmV0IFx1MDAzZSAwKVxuK1x0XHRcdFx0cmV0ID0gZ2VuZXJpY193cml0ZV9zeW5jKGlvY2IsIHJldCk7XG4rXHRcdH0gZWxzZSB7XG4rXHRcdFx0cmV0ID0gc3RhdHVzO1xuK1x0XHR9XG4rXHR9XG4rXG4rb3V0X3VubG9jazpcbitcdGlub2RlX3VubG9jayhpbm9kZSk7XG4rXHRyZXR1cm4gcmV0O1xuK31cbitcbitzdGF0aWMgc3NpemVfdCBtaW5peF9maWxlX3JlYWRfaXRlcihzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqdG8pXG4re1xuK1x0aWYgKGlvY2ItXHUwMDNla2lfZmxhZ3MgXHUwMDI2IElPQ0JfRElSRUNUKVxuK1x0XHRyZXR1cm4gbWluaXhfZGlvX3JlYWRfaXRlcihpb2NiLCB0byk7XG4rXG4rXHRyZXR1cm4gZ2VuZXJpY19maWxlX3JlYWRfaXRlcihpb2NiLCB0byk7XG4rfVxuK1xuK3N0YXRpYyBzc2l6ZV90IG1pbml4X2ZpbGVfd3JpdGVfaXRlcihzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqZnJvbSlcbit7XG4rXHRzdHJ1Y3QgaW5vZGUgKmlub2RlID0gaW9jYi1cdTAwM2VraV9maWxwLVx1MDAzZWZfbWFwcGluZy1cdTAwM2Vob3N0O1xuK1x0c3NpemVfdCByZXQ7XG4rXG4rXHQvKiBtaW5peF9kaW9fd3JpdGVfaXRlciBhbHNvIGxvY2tzIHRoZSBpbm9kZSBhbmQgYXBwZWFycyB0byBkbyB0aGUgc2FtZVxuK1x0ICogZ2VuZXJhbCBzb3J0cyBvZiBjaGVja3MgYXMgdGhpcywgc28ganVzdCByZXR1cm4gZGlyZWN0bHkgZnJvbSB0aGVyZS5cbitcdCAqL1xuK1x0aWYgKGlvY2ItXHUwMDNla2lfZmxhZ3MgXHUwMDI2IElPQ0JfRElSRUNUKVxuK1x0XHRyZXR1cm4gbWluaXhfZGlvX3dyaXRlX2l0ZXIoaW9jYiwgZnJvbSk7XG4rXG4rXHRpbm9kZV9sb2NrKGlub2RlKTtcbitcdHJldCA9IGdlbmVyaWNfd3JpdGVfY2hlY2tzKGlvY2IsIGZyb20pO1xuK1x0aWYgKHJldCBcdTAwM2M9IDApXG4rXHRcdGdvdG8gdW5sb2NrO1xuK1xuK1x0cmV0ID0gZmlsZV9tb2RpZmllZChpb2NiLVx1MDAzZWtpX2ZpbHApO1xuK1x0aWYgKHJldClcbitcdFx0Z290byB1bmxvY2s7XG4rXG4rXHRjb25zdCBzdHJ1Y3QgaW9tYXBfb3BzICpvcHMgPSBtaW5peF9pb21hcF9vcHNfdmVyKGlub2RlKTtcbitcbitcdHJldCA9IGlvbWFwX2ZpbGVfYnVmZmVyZWRfd3JpdGUoaW9jYiwgZnJvbSwgb3BzLFxuK1x0XHRcdE5VTEwsIE5VTEwpO1xuK1xuK1x0aWYgKHJldCBcdTAwM2UgMClcbitcdFx0cmV0ID0gZ2VuZXJpY193cml0ZV9zeW5jKGlvY2IsIHJldCk7XG4rXG4rdW5sb2NrOlxuK1x0aW5vZGVfdW5sb2NrKGlub2RlKTtcbitcdHJldHVybiByZXQ7XG4rfVxuK1xuK3N0YXRpYyBpbnQgbWluaXhfZmlsZV9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxwKVxuK3tcbitcdGZpbHAtXHUwMDNlZl9tb2RlIHw9IEZNT0RFX0NBTl9PRElSRUNUO1xuK1x0cmV0dXJuIGdlbmVyaWNfZmlsZV9vcGVuKGlub2RlLCBmaWxwKTtcbit9XG4rXG4gLypcbi0gKiBXZSBoYXZlIG1vc3RseSBOVUxMcyBoZXJlOiB0aGUgY3VycmVudCBkZWZhdWx0cyBhcmUgT0sgZm9yXG4tICogdGhlIG1pbml4IGZpbGVzeXN0ZW0uXG4rICogV2Ugc3RpbGwgaGF2ZSBzb21lIE5VTExzIGhlcmUsIGJ1dCBub3QgYXMgbWFueSBvZiB0aGUgY3VycmVudCBkZWZhdWx0cyBhcmVcbisgKiBzdGlsbCBPSyBmb3IgdGhlIG1pbml4IGZpbGVzeXN0ZW0uXG4gICovXG4rXG4gY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBtaW5peF9maWxlX29wZXJhdGlvbnMgPSB7XG4gXHQubGxzZWVrXHRcdD0gZ2VuZXJpY19maWxlX2xsc2Vlayxcbi1cdC5yZWFkX2l0ZXJcdD0gZ2VuZXJpY19maWxlX3JlYWRfaXRlcixcbi1cdC53cml0ZV9pdGVyXHQ9IGdlbmVyaWNfZmlsZV93cml0ZV9pdGVyLFxuK1x0LnJlYWRfaXRlclx0PSBtaW5peF9maWxlX3JlYWRfaXRlcixcbitcdC53cml0ZV9pdGVyXHQ9IG1pbml4X2ZpbGVfd3JpdGVfaXRlcixcbiBcdC5tbWFwX3ByZXBhcmVcdD0gZ2VuZXJpY19maWxlX21tYXBfcHJlcGFyZSxcbitcdC5vcGVuXHRcdD0gbWluaXhfZmlsZV9vcGVuLFxuIFx0LmZzeW5jXHRcdD0gbWluaXhfZnN5bmMsXG4gXHQuc3BsaWNlX3JlYWRcdD0gZmlsZW1hcF9zcGxpY2VfcmVhZCxcbitcdC5zcGxpY2Vfd3JpdGVcdD0gaXRlcl9maWxlX3NwbGljZV93cml0ZSxcbiB9O1xuIFxuLXN0YXRpYyBpbnQgbWluaXhfc2V0YXR0cihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcbi1cdFx0XHQgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3QgaWF0dHIgKmF0dHIpXG4raW50IG1pbml4X3NldGF0dHIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcbitcdHN0cnVjdCBpYXR0ciAqYXR0cilcbiB7XG4gXHRzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZF9pbm9kZShkZW50cnkpO1xuIFx0aW50IGVycm9yO1xuZGlmZiAtLWdpdCBhL2ZzL21pbml4L2lub2RlLmMgYi9mcy9taW5peC9pbm9kZS5jXG5pbmRleCBjMzBjYzU5MDY5OGQ2Zi4uYjExM2M0NDc2NGZmOTUgMTAwNjQ0XG4tLS0gYS9mcy9taW5peC9pbm9kZS5jXG4rKysgYi9mcy9taW5peC9pbm9kZS5jXG5AQCAtNDM2LDcgKzQzNiwzMiBAQCBzdGF0aWMgaW50IG1pbml4X3N0YXRmcyhzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBrc3RhdGZzICpidWYpXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4tc3RhdGljIGludCBtaW5peF9nZXRfYmxvY2soc3RydWN0IGlub2RlICppbm9kZSwgc2VjdG9yX3QgYmxvY2ssXG4rc3RhdGljIHNzaXplX3QgbWluaXhfd3JpdGViYWNrX3JhbmdlKHN0cnVjdCBpb21hcF93cml0ZXBhZ2VfY3R4ICp3cGMsXG4rXHRzdHJ1Y3QgZm9saW8gKmZvbGlvLCB1NjQgcG9zLCB1bnNpZ25lZCBpbnQgbGVuLCB1NjQgZW5kX3Bvcylcbit7XG4rXHRpbnQgZXJyb3I7XG4rXG4rXHRpZiAocG9zIFx1MDAzYyB3cGMtXHUwMDNlaW9tYXAub2Zmc2V0IHx8XG4rXHRcdFx0cG9zIFx1MDAzZT0gd3BjLVx1MDAzZWlvbWFwLm9mZnNldCArIHdwYy1cdTAwM2Vpb21hcC5sZW5ndGgpIHtcbitcdFx0aWYgKElOT0RFX1ZFUlNJT04od3BjLVx1MDAzZWlub2RlKSA9PSBNSU5JWF9WMSlcbitcdFx0XHRlcnJvciA9IFYxX21pbml4X2lvbWFwX2JlZ2luKHdwYy1cdTAwM2Vpbm9kZSwgcG9zLCBsZW4sIElPTUFQX1dSSVRFLFxuK1x0XHRcdFx0XHUwMDI2d3BjLVx1MDAzZWlvbWFwLCBOVUxMKTtcbitcdFx0ZWxzZVxuK1x0XHRcdGVycm9yID0gVjJfbWluaXhfaW9tYXBfYmVnaW4od3BjLVx1MDAzZWlub2RlLCBwb3MsIGxlbiwgSU9NQVBfV1JJVEUsXG4rXHRcdFx0XHRcdTAwMjZ3cGMtXHUwMDNlaW9tYXAsIE5VTEwpO1xuK1x0XHRpZiAoZXJyb3IpXG4rXHRcdFx0cmV0dXJuIGVycm9yO1xuK1x0fVxuK1xuK1x0cmV0dXJuIGlvbWFwX2FkZF90b19pb2VuZCh3cGMsIGZvbGlvLCBwb3MsIGVuZF9wb3MsIGxlbik7XG4rfVxuK1xuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaW9tYXBfd3JpdGViYWNrX29wcyBtaW5peF93cml0ZWJhY2tfb3BzID0ge1xuK1x0LndyaXRlYmFja19yYW5nZSA9IG1pbml4X3dyaXRlYmFja19yYW5nZSxcbitcdC53cml0ZWJhY2tfc3VibWl0ID0gaW9tYXBfaW9lbmRfd3JpdGViYWNrX3N1Ym1pdCxcbit9O1xuK1xuK2ludCBtaW5peF9nZXRfYmxvY2soc3RydWN0IGlub2RlICppbm9kZSwgc2VjdG9yX3QgYmxvY2ssXG4gXHRcdCAgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoX3Jlc3VsdCwgaW50IGNyZWF0ZSlcbiB7XG4gXHRpZiAoSU5PREVfVkVSU0lPTihpbm9kZSkgPT0gTUlOSVhfVjEpXG5AQCAtNDQ1LDE3ICs0NzAsNDUgQEAgc3RhdGljIGludCBtaW5peF9nZXRfYmxvY2soc3RydWN0IGlub2RlICppbm9kZSwgc2VjdG9yX3QgYmxvY2ssXG4gXHRcdHJldHVybiBWMl9taW5peF9nZXRfYmxvY2soaW5vZGUsIGJsb2NrLCBiaF9yZXN1bHQsIGNyZWF0ZSk7XG4gfVxuIFxuLXN0YXRpYyBpbnQgbWluaXhfd3JpdGVwYWdlcyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcbisvKiBUaGUgb2xkIG1pbml4X3dyaXRlcGFnZXMsIHByZXNlcnZlZCBmb3IgZGlyZWN0b3J5IG9wZXJhdGlvbnMuICovXG4rc3RhdGljIGludCBtaW5peF9ibG9ja193cml0ZXBhZ2VzKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxuIFx0XHRzdHJ1Y3Qgd3JpdGViYWNrX2NvbnRyb2wgKndiYylcbiB7XG4gXHRyZXR1cm4gbXBhZ2Vfd3JpdGVwYWdlcyhtYXBwaW5nLCB3YmMsIG1pbml4X2dldF9ibG9jayk7XG4gfVxuIFxuK3N0YXRpYyBpbnQgbWluaXhfd3JpdGVwYWdlcyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcbitcdFx0c3RydWN0IHdyaXRlYmFja19jb250cm9sICp3YmMpXG4re1xuK1x0c3RydWN0IGlvbWFwX3dyaXRlcGFnZV9jdHggd3BjID0ge1xuK1x0XHQuaW5vZGUgPSBtYXBwaW5nLVx1MDAzZWhvc3QsXG4rXHRcdC53YmMgPSB3YmMsXG4rXHRcdC5vcHMgPSBcdTAwMjZtaW5peF93cml0ZWJhY2tfb3BzLFxuK1x0fTtcbitcdHJldHVybiBpb21hcF93cml0ZXBhZ2VzKFx1MDAyNndwYyk7XG4rfVxuK1xuIHN0YXRpYyBpbnQgbWluaXhfcmVhZF9mb2xpbyhzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IGZvbGlvICpmb2xpbylcbit7XG4rXHRjb25zdCBzdHJ1Y3QgaW9tYXBfb3BzICpvcHMgPSBtaW5peF9pb21hcF9vcHNfdmVyKGZvbGlvLVx1MDAzZW1hcHBpbmctXHUwMDNlaG9zdCk7XG4rXG4rXHRpb21hcF9iaW9fcmVhZF9mb2xpbyhmb2xpbywgb3BzKTtcbitcdHJldHVybiAwO1xuK31cbitcbisvKiBUaGUgb2xkIG1pbml4X3JlYWRfZm9saW8sIHByZXNlcnZlZCBmb3IgZGlyZWN0b3J5IG9wZXJhdGlvbnMuICovXG4rc3RhdGljIGludCBtaW5peF9ibG9ja19yZWFkX2ZvbGlvKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIHtcbiBcdHJldHVybiBibG9ja19yZWFkX2Z1bGxfZm9saW8oZm9saW8sIG1pbml4X2dldF9ibG9jayk7XG4gfVxuIFxuK3N0YXRpYyB2b2lkIG1pbml4X3JlYWRhaGVhZChzdHJ1Y3QgcmVhZGFoZWFkX2NvbnRyb2wgKnJhYylcbit7XG4rXHRjb25zdCBzdHJ1Y3QgaW9tYXBfb3BzICpvcHMgPSBtaW5peF9pb21hcF9vcHNfdmVyKHJhYy1cdTAwM2VtYXBwaW5nLVx1MDAzZWhvc3QpO1xuK1xuK1x0aW9tYXBfYmlvX3JlYWRhaGVhZChyYWMsIG9wcyk7XG4rfVxuK1xuIGludCBtaW5peF9wcmVwYXJlX2NodW5rKHN0cnVjdCBmb2xpbyAqZm9saW8sIGxvZmZfdCBwb3MsIHVuc2lnbmVkIGxlbilcbiB7XG4gXHRyZXR1cm4gX19ibG9ja193cml0ZV9iZWdpbihmb2xpbywgcG9zLCBsZW4sIG1pbml4X2dldF9ibG9jayk7XG5AQCAtNDg3LDI0ICs1NDAsNDIgQEAgc3RhdGljIGludCBtaW5peF93cml0ZV9iZWdpbihjb25zdCBzdHJ1Y3Qga2lvY2IgKmlvY2IsXG4gXG4gc3RhdGljIHNlY3Rvcl90IG1pbml4X2JtYXAoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIHNlY3Rvcl90IGJsb2NrKVxuIHtcbi1cdHJldHVybiBnZW5lcmljX2Jsb2NrX2JtYXAobWFwcGluZyxibG9jayxtaW5peF9nZXRfYmxvY2spO1xuK1x0Y29uc3Qgc3RydWN0IGlvbWFwX29wcyAqb3BzID0gbWluaXhfaW9tYXBfb3BzX3ZlcihtYXBwaW5nLVx1MDAzZWhvc3QpO1xuK1xuK1x0cmV0dXJuIGlvbWFwX2JtYXAobWFwcGluZywgYmxvY2ssIG9wcyk7XG4gfVxuIFxuLXN0YXRpYyBjb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZV9vcGVyYXRpb25zIG1pbml4X2FvcHMgPSB7XG4tXHQuZGlydHlfZm9saW9cdD0gYmxvY2tfZGlydHlfZm9saW8sXG4tXHQuaW52YWxpZGF0ZV9mb2xpbyA9IGJsb2NrX2ludmFsaWRhdGVfZm9saW8sXG4rY29uc3Qgc3RydWN0IGFkZHJlc3Nfc3BhY2Vfb3BlcmF0aW9ucyBtaW5peF9hb3BzID0ge1xuK1x0LmRpcnR5X2ZvbGlvXHQ9IGlvbWFwX2RpcnR5X2ZvbGlvLFxuK1x0LmludmFsaWRhdGVfZm9saW8gPSBpb21hcF9pbnZhbGlkYXRlX2ZvbGlvLFxuIFx0LnJlYWRfZm9saW8gPSBtaW5peF9yZWFkX2ZvbGlvLFxuK1x0LnJlYWRhaGVhZCA9IG1pbml4X3JlYWRhaGVhZCxcbiBcdC53cml0ZXBhZ2VzID0gbWluaXhfd3JpdGVwYWdlcyxcbitcdC5taWdyYXRlX2ZvbGlvID0gZmlsZW1hcF9taWdyYXRlX2ZvbGlvLFxuK1x0LmJtYXAgPSBtaW5peF9ibWFwLFxuK1x0LmlzX3BhcnRpYWxseV91cHRvZGF0ZSA9IGlvbWFwX2lzX3BhcnRpYWxseV91cHRvZGF0ZSxcbitcdC5yZWxlYXNlX2ZvbGlvID0gaW9tYXBfcmVsZWFzZV9mb2xpbyxcbitcdC5lcnJvcl9yZW1vdmVfZm9saW8gPSBnZW5lcmljX2Vycm9yX3JlbW92ZV9mb2xpbyxcbit9O1xuK1xuKy8qIEEgc3BlY2lhbCBhb3BzIGZvciBkaXJlY3RvcmllcyB0aGF0IGtlZXBzIHVzaW5nIHRoZSBidWZmZXIgaGVhZCBjaHVua3MsIGF0XG4rICogbGVhc3QgZm9yIHRoZSB0aW1lIGJlaW5nLlxuKyAqL1xuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZV9vcGVyYXRpb25zIG1pbml4X2Rpcl9hb3BzID0ge1xuK1x0LmRpcnR5X2ZvbGlvID0gYmxvY2tfZGlydHlfZm9saW8sXG4rXHQuaW52YWxpZGF0ZV9mb2xpbyA9IGJsb2NrX2ludmFsaWRhdGVfZm9saW8sXG4rXHQucmVhZF9mb2xpbyA9IG1pbml4X2Jsb2NrX3JlYWRfZm9saW8sXG4gXHQud3JpdGVfYmVnaW4gPSBtaW5peF93cml0ZV9iZWdpbixcbiBcdC53cml0ZV9lbmQgPSBnZW5lcmljX3dyaXRlX2VuZCxcbiBcdC5taWdyYXRlX2ZvbGlvID0gYnVmZmVyX21pZ3JhdGVfZm9saW8sXG4gXHQuYm1hcCA9IG1pbml4X2JtYXAsXG4tXHQuZGlyZWN0X0lPID0gbm9vcF9kaXJlY3RfSU9cbitcdC53cml0ZXBhZ2VzID0gbWluaXhfYmxvY2tfd3JpdGVwYWdlcyxcbiB9O1xuIFxuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBtaW5peF9zeW1saW5rX2lub2RlX29wZXJhdGlvbnMgPSB7XG4tXHQuZ2V0X2xpbmtcdD0gcGFnZV9nZXRfbGluayxcbitcdC5nZXRfbGlua1x0PSBtaW5peF9nZXRfbGluayxcbiBcdC5nZXRhdHRyXHQ9IG1pbml4X2dldGF0dHIsXG4rXHQuc2V0YXR0clx0PSBtaW5peF9zZXRhdHRyLFxuIH07XG4gXG4gdm9pZCBtaW5peF9zZXRfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSwgZGV2X3QgcmRldilcbkBAIC01MTYsNyArNTg3LDcgQEAgdm9pZCBtaW5peF9zZXRfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSwgZGV2X3QgcmRldilcbiBcdH0gZWxzZSBpZiAoU19JU0RJUihpbm9kZS1cdTAwM2VpX21vZGUpKSB7XG4gXHRcdGlub2RlLVx1MDAzZWlfb3AgPSBcdTAwMjZtaW5peF9kaXJfaW5vZGVfb3BlcmF0aW9ucztcbiBcdFx0aW5vZGUtXHUwMDNlaV9mb3AgPSBcdTAwMjZtaW5peF9kaXJfb3BlcmF0aW9ucztcbi1cdFx0aW5vZGUtXHUwMDNlaV9tYXBwaW5nLVx1MDAzZWFfb3BzID0gXHUwMDI2bWluaXhfYW9wcztcbitcdFx0aW5vZGUtXHUwMDNlaV9tYXBwaW5nLVx1MDAzZWFfb3BzID0gXHUwMDI2bWluaXhfZGlyX2FvcHM7XG4gXHR9IGVsc2UgaWYgKFNfSVNMTksoaW5vZGUtXHUwMDNlaV9tb2RlKSkge1xuIFx0XHRpbm9kZS1cdTAwM2VpX29wID0gXHUwMDI2bWluaXhfc3ltbGlua19pbm9kZV9vcGVyYXRpb25zO1xuIFx0XHRpbm9kZV9ub2hpZ2htZW0oaW5vZGUpO1xuQEAgLTc2OCw0ICs4MzksMyBAQCBtb2R1bGVfaW5pdChpbml0X21pbml4X2ZzKVxuIG1vZHVsZV9leGl0KGV4aXRfbWluaXhfZnMpXG4gTU9EVUxFX0RFU0NSSVBUSU9OKFwiTWluaXggZmlsZSBzeXN0ZW1cIik7XG4gTU9EVUxFX0xJQ0VOU0UoXCJHUExcIik7XG4tXG5kaWZmIC0tZ2l0IGEvZnMvbWluaXgvaW9tYXAuYyBiL2ZzL21pbml4L2lvbWFwLmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uN2JiMDQzOWUzNjY5OTZcbi0tLSAvZGV2L251bGxcbisrKyBiL2ZzL21pbml4L2lvbWFwLmNcbkBAIC0wLDAgKzEsMTE0IEBAXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuKy8qXG4rICogaW9tYXAgZnVuY3Rpb25zIGZvciBtaW5peC4gQXQgbGVhc3QgdGhlIGZpcnN0IHBhc3Mgb2YgdGhpcyBmaWxlIHdhcyB0YWtlblxuKyAqIGZyb20gdGhlIHhpYWZzIGlvbWFwLmMsIHdoaWNoIGlzIGZpdHRpbmcgc2luY2UgdGhlIHhpYWZzIG1vZHVsZSBpbiB0dXJuXG4rICogYm9ycm93ZWQgaGVhdmlseSBmcm9tIHRoZSBtb2Rlcm5pemVkIG1pbml4IGZzIGtlcm5lbCBtb2R1bGUuXG4rICovXG4rXG4rLypcbisgKiBtaW5peF9pb21hcF9iZWdpbiAtIG1hcCBhIGZpbGUgcmFuZ2UgdG8gZGlzayBibG9ja3MuIEl0IGFjdHMgYXMgYSByZXBsYWNlbWVudFxuKyAqIGZvciBnZXRfYmxvY2sgaW4gaXRyZWVfY29tbW9uLmMsIGF0IGxlYXN0IGluIHRoZSBpbXBvcnRhbnQgd2F5cywgYW5kIGlzXG4rICogYWRhcHRlZCBmcm9tIGl0LCBidXQgaXQgdXNlcyBpb21hcCBpbnN0ZWFkIG9mIGJ1ZmZlcl9oZWFkLiBUaGlzIGlzIHRha2VuXG4rICogZGlyZWN0bHkgZnJvbSB0aGUgb3V0LW9mLXRyZWUgeGlhZnMgaW9tYXAgY2hhbmdlcywgYW5kIHRoZSBleGZhdCBpb21hcFxuKyAqIGNoYW5nZXMgd2VyZSBhbiBpbnNwaXJhdGlvbiBmb3IgdGhhdC5cbisgKi9cbitzdGF0aWMgaW50IG1pbml4X2lvbWFwX2JlZ2luKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfdCBvZmZzZXQsIGxvZmZfdCBsZW5ndGgsXG4rXHR1bnNpZ25lZCBpbnQgZmxhZ3MsIHN0cnVjdCBpb21hcCAqaW9tYXAsIHN0cnVjdCBpb21hcCAqc3JjbWFwKVxuK3tcbitcdHN0cnVjdCBzdXBlcl9ibG9jayAqc2IgPSBpbm9kZS1cdTAwM2VpX3NiO1xuK1x0dW5zaWduZWQgaW50IGJsa2JpdHMgPSBzYi1cdTAwM2VzX2Jsb2Nrc2l6ZV9iaXRzO1xuK1x0c2VjdG9yX3QgaWJsb2NrID0gb2Zmc2V0IFx1MDAzZVx1MDAzZSBibGtiaXRzO1xuK1x0aW50IGNyZWF0ZSA9IGZsYWdzIFx1MDAyNiBJT01BUF9XUklURTtcbitcbitcdC8qIE1vc3RseSB0YWtlbiBmcm9tIG1vZGVybi14aWFmcyBpdHJlZS5jIGdldF9ibG9jayB3aXRoIGVsZW1lbnRzIGZyb21cbitcdCAqIHNpbWlsYXIgZXhmYXQgb3BlcmF0aW9ucy5cbitcdCAqL1xuK1x0aW50IG9mZnNldHNbREVQVEhdO1xuK1x0SW5kaXJlY3QgY2hhaW5bREVQVEhdO1xuK1x0SW5kaXJlY3QgKnBhcnRpYWw7XG4rXHRpbnQgZGVwdGggPSBibG9ja190b19wYXRoKGlub2RlLCBpYmxvY2ssIG9mZnNldHMpO1xuK1x0aW50IGxlZnQ7XG4rXHRpbnQgZXJyID0gLUVJTztcbitcbitcdHNlY3Rvcl90IHBoeXM7XG4rXG4rXHQvKiBibG9jayBpcyBiZXlvbmQgbWF4IGZpbGUgc2l6ZSAqL1xuK1x0aWYgKGRlcHRoID09IDApXG4rXHRcdGdvdG8gb3V0O1xuK1xuK1x0aW9tYXAtXHUwMDNlYmRldiA9IGlub2RlLVx1MDAzZWlfc2ItXHUwMDNlc19iZGV2O1xuK1xuK3JlcmVhZDpcbitcdHBhcnRpYWwgPSBnZXRfYnJhbmNoKGlub2RlLCBkZXB0aCwgb2Zmc2V0cywgY2hhaW4sIFx1MDAyNmVycik7XG4rXG4rXHQvKiBTaW1wbGVzdCBjYXNlIC0gYmxvY2sgZm91bmQsIG5vIGFsbG9jYXRpb24gbmVlZGVkICovXG4rXHRpZiAoIXBhcnRpYWwpIHtcbitcdFx0LyogQml0IG9mIGEgd2VpcmQgb3JkZXIsIGJ1dCBpdCdsbCBtYWtlIHNlbnNlIHdoZW4geW91IGdldCB0b1xuK1x0XHQgKiB0aGUgYm90dG9tLlxuK1x0XHQgKi9cbitcdFx0aW9tYXAtXHUwMDNlZmxhZ3MgPSBJT01BUF9GX01FUkdFRDtcbitnb3RfaXQ6XG4rXHRcdHBoeXMgPSBibG9ja190b19jcHUoY2hhaW5bZGVwdGggLSAxXS5rZXkpO1xuK1x0XHRwYXJ0aWFsID0gY2hhaW4rZGVwdGgtMTtcbitcdFx0LyogU2V0IHVwIHRoZSBpb21hcCBzdHJ1Y3QgYmVmb3JlIGNsZWFuaW5nIHVwICovXG4rXHRcdGlvbWFwLVx1MDAzZXR5cGUgPSBJT01BUF9NQVBQRUQ7XG4rXHRcdGlvbWFwLVx1MDAzZWFkZHIgPSAodTY0KXBoeXMgXHUwMDNjXHUwMDNjIGJsa2JpdHM7XG4rXHRcdGlvbWFwLVx1MDAzZWxlbmd0aCA9IDEgXHUwMDNjXHUwMDNjIGJsa2JpdHM7XG4rXHRcdGlvbWFwLVx1MDAzZW9mZnNldCA9ICh1NjQpaWJsb2NrIFx1MDAzY1x1MDAzYyBibGtiaXRzO1xuK1x0XHRnb3RvIGNsZWFudXA7XG4rXHR9XG4rXG4rXHQvKiBOZXh0IHNpbXBsZSBjYXNlIC0gcGxhaW4gbG9va3VwIG9yIGZhaWxlZCByZWFkIG9mIGluZGlyZWN0IGJsb2NrICovXG4rXHRpZiAoIWNyZWF0ZSB8fCBlcnIgPT0gLUVJTykge1xuK1x0XHRpb21hcC1cdTAwM2V0eXBlID0gSU9NQVBfSE9MRTtcbitcdFx0aW9tYXAtXHUwMDNlYWRkciA9IElPTUFQX05VTExfQUREUjtcbitcdFx0aW9tYXAtXHUwMDNlbGVuZ3RoID0gMSBcdTAwM2NcdTAwM2MgYmxrYml0cztcbitcdFx0aW9tYXAtXHUwMDNlb2Zmc2V0ID0gKHU2NClpYmxvY2sgXHUwMDNjXHUwMDNjIGJsa2JpdHM7XG4rXHRcdGlvbWFwLVx1MDAzZWZsYWdzID0gMDtcbitjbGVhbnVwOlxuK1x0XHR3aGlsZSAocGFydGlhbCBcdTAwM2UgY2hhaW4pIHtcbitcdFx0XHRicmVsc2UocGFydGlhbC1cdTAwM2ViaCk7XG4rXHRcdFx0cGFydGlhbC0tO1xuK1x0XHR9XG4rb3V0OlxuK1x0XHRyZXR1cm4gZXJyO1xuK1x0fVxuK1xuK1x0LypcbitcdCAqIEluZGlyZWN0IGJsb2NrIG1pZ2h0IGJlIHJlbW92ZWQgYnkgdHJ1bmNhdGUgd2hpbGUgd2Ugd2VyZVxuK1x0ICogcmVhZGluZyBpdC4gSGFuZGxpbmcgb2YgdGhhdCBjYXNlIChmb3JnZXQgd2hhdCB3ZSd2ZSBnb3QgYW5kXG4rXHQgKiByZXJlYWQpIGlzIHRha2VuIG91dCBvZiB0aGUgbWFpbiBwYXRoLlxuK1x0ICovXG4rXHRpZiAoZXJyID09IC1FQUdBSU4pXG4rXHRcdGdvdG8gY2hhbmdlZDtcbitcbitcdGxlZnQgPSAoY2hhaW4gKyBkZXB0aCkgLSBwYXJ0aWFsO1xuK1x0ZXJyID0gYWxsb2NfYnJhbmNoKGlub2RlLCBsZWZ0LCBvZmZzZXRzICsgKHBhcnRpYWwgLSBjaGFpbiksIHBhcnRpYWwpO1xuK1x0aWYgKGVycilcbitcdFx0Z290byBjbGVhbnVwO1xuK1xuK1x0aWYgKHNwbGljZV9icmFuY2goaW5vZGUsIGNoYWluLCBwYXJ0aWFsLCBsZWZ0KSBcdTAwM2MgMClcbitcdFx0Z290byBjaGFuZ2VkO1xuK1xuK1x0LyogU3VjY2Vzc2Z1bCBhbGxvY2F0aW9uLCBtYXBwaW5nIGl0LiAqL1xuK1x0aW9tYXAtXHUwMDNlZmxhZ3MgPSBJT01BUF9GX05FVztcbitcdGdvdG8gZ290X2l0O1xuK1xuK2NoYW5nZWQ6XG4rXHR3aGlsZSAocGFydGlhbCBcdTAwM2UgY2hhaW4pIHtcbitcdFx0YnJlbHNlKHBhcnRpYWwtXHUwMDNlYmgpO1xuK1x0XHRwYXJ0aWFsLS07XG4rXHR9XG4rXHRnb3RvIHJlcmVhZDtcbit9XG4rXG4rLypcbisgKiBtaW5peF9pb21hcF9lbmQgZW5kcyB1cCBiZWluZyBhIG5vcDsgc2luY2UgbWluaXggZG9lc24ndCBoYXZlIGFueSBleHRlbnRzIG9yXG4rICogdHJhbnNhY3Rpb25zIHRvIHdvcnJ5IGFib3V0LCB0aGVyZSBpc24ndCBhbnl0aGluZyB0byB1cGRhdGUgaGVyZS4gVGhlIG9uLWRpc2tcbisgKiBpbmRpcmVjdCBibG9ja3MgZ2V0IGRpcnRpZWQgaW4gbWluaXhfaW9tYXBfYmVnaW4uXG4rICovXG4rc3RhdGljIGludCBtaW5peF9pb21hcF9lbmQoc3RydWN0IGlub2RlICppbm9kZSwgbG9mZl90IG9mZnNldCwgbG9mZl90IGxlbmd0aCxcbitcdHNzaXplX3Qgd3JpdHRlbiwgdW5zaWduZWQgaW50IGZsYWdzLCBzdHJ1Y3QgaW9tYXAgKmlvbWFwKVxuK3tcbitcdHJldHVybiAwO1xuK31cbmRpZmYgLS1naXQgYS9mcy9taW5peC9pdHJlZV9jb21tb24uYyBiL2ZzL21pbml4L2l0cmVlX2NvbW1vbi5jXG5pbmRleCBjM2NkMmM3NWFmOWNlZS4uNWE4YjczYTdiZWRhNzggMTAwNjQ0XG4tLS0gYS9mcy9taW5peC9pdHJlZV9jb21tb24uY1xuKysrIGIvZnMvbWluaXgvaXRyZWVfY29tbW9uLmNcbkBAIC0zMTEsNyArMzExLDE2IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCB0cnVuY2F0ZSAoc3RydWN0IGlub2RlICogaW5vZGUpXG4gXHRsb25nIGlibG9jaztcbiBcbiBcdGlibG9jayA9IChpbm9kZS1cdTAwM2VpX3NpemUgKyBzYi1cdTAwM2VzX2Jsb2Nrc2l6ZSAtMSkgXHUwMDNlXHUwMDNlIHNiLVx1MDAzZXNfYmxvY2tzaXplX2JpdHM7XG4tXHRibG9ja190cnVuY2F0ZV9wYWdlKGlub2RlLVx1MDAzZWlfbWFwcGluZywgaW5vZGUtXHUwMDNlaV9zaXplLCBnZXRfYmxvY2spO1xuK1xuK1x0LyogRGVwZW5kaW5nIG9uIHdoYXQgYWRkcmVzcyBzcGFjZSBvcGVyYXRpb25zIGFyZSBiZWluZyB1c2VkIGJ5IHRoZVxuK1x0ICogaW5vZGUgYmVpbmcgdHJ1bmNhdGVkLCB3ZSBuZWVkIHRvIGVpdGhlciBjYWxsIGlvbWFwX3RydW5jYXRlX3BhZ2Ugb3JcbitcdCAqIGJsb2NrX3RydW5jYXRlX3BhZ2UuXG4rXHQgKi9cbitcdGlmIChpbm9kZS1cdTAwM2VpX21hcHBpbmctXHUwMDNlYV9vcHMgPT0gXHUwMDI2bWluaXhfYW9wcylcbitcdFx0aW9tYXBfdHJ1bmNhdGVfcGFnZShpbm9kZSwgaW5vZGUtXHUwMDNlaV9zaXplLCBOVUxMLFxuK1x0XHRcdG1pbml4X2lvbWFwX29wc192ZXIoaW5vZGUpLCBOVUxMLCBOVUxMKTtcbitcdGVsc2VcbitcdFx0YmxvY2tfdHJ1bmNhdGVfcGFnZShpbm9kZS1cdTAwM2VpX21hcHBpbmcsIGlub2RlLVx1MDAzZWlfc2l6ZSwgZ2V0X2Jsb2NrKTtcbiBcbiBcdG4gPSBibG9ja190b19wYXRoKGlub2RlLCBpYmxvY2ssIG9mZnNldHMpO1xuIFx0aWYgKCFuKVxuZGlmZiAtLWdpdCBhL2ZzL21pbml4L2l0cmVlX3YxLmMgYi9mcy9taW5peC9pdHJlZV92MS5jXG5pbmRleCAxZmVkOTA2MDQyYWE4NC4uNThjMjlmNDQ0M2QzNzIgMTAwNjQ0XG4tLS0gYS9mcy9taW5peC9pdHJlZV92MS5jXG4rKysgYi9mcy9taW5peC9pdHJlZV92MS5jXG5AQCAtNDksNiArNDksMTggQEAgc3RhdGljIGludCBibG9ja190b19wYXRoKHN0cnVjdCBpbm9kZSAqIGlub2RlLCBsb25nIGJsb2NrLCBpbnQgb2Zmc2V0c1tERVBUSF0pXG4gfVxuIFxuICNpbmNsdWRlIFwiaXRyZWVfY29tbW9uLmNcIlxuKy8qIE5PVEEgQkVORTpcbisgKlxuKyAqIFRoaXMgaXMgaWNreSB0byBtZSwgYnV0IGF0IHRoZSBzYW1lIHRpbWUgaGF2aW5nIGl0IGJlIGEgc3RhbmRhbG9uZSBDIGZpbGVcbisgKiB0aGF0J3MgY29tcGlsZWQgdG8gb2JqZWN0IGZvcm0gYW5kIGxpbmtlZCBzZXBhcmF0ZWx5IGxpa2UgaXQgaXMgaW4geGlhZnMgaXNcbisgKiBtdWNoIG5hc3RpZXIgaW4gbWluaXggYmVjYXVzZSBvZiB0aGUgZGlmZmVyZW50IHZlcnNpb25zIG9mIHRoZSBtaW5peCBmcyB0aGF0XG4rICogaGF2ZSBzb21lIHZlcnksIHZlcnkgZGlmZmVyZW50IGFzcGVjdHMsIGxpa2UgdGhlIHNpemUgb2YgYmxvY2tfdC4gSSBkb24ndFxuKyAqIGxpa2UgaXQsIGJ1dCBzaW5jZSBtaW5peCBhbHJlYWR5IGhhcyB0aGlzIHBhdHRlcm4gd2hlcmUgYSBjb21tb24gaXRyZWUgZmlsZVxuKyAqIGlzIGluY2x1ZGVkIGluIHRoZSBpdHJlZV92MSBhbmQgaXRyZWVfdjIoYW5kIHYzKSBmaWxlcywgSSdtIGluY2x1ZGluZyBpb21hcC5jXG4rICogaW4gdGhlc2UgZmlsZXMgYXMgd2VsbC4gSXQgZG9lcyBhdCBsZWFzdCBhdm9pZCBleHBvcnRpbmcgc29tZSBjdXJyZW50bHlcbisgKiBzdGF0aWMgZnVuY3Rpb25zIHRoYXQgYXJlbid0IG5lZWRlZCBhbnl3aGVyZSBidXQgaXRyZWVfY29tbW9uLmMgYW5kIGlvbWFwLmMuXG4rICovXG4rI2luY2x1ZGUgXCJpb21hcC5jXCJcbiBcbiBpbnQgVjFfbWluaXhfZ2V0X2Jsb2NrKHN0cnVjdCBpbm9kZSAqIGlub2RlLCBsb25nIGJsb2NrLFxuIFx0XHRcdHN0cnVjdCBidWZmZXJfaGVhZCAqYmhfcmVzdWx0LCBpbnQgY3JlYXRlKVxuQEAgLTYxLDcgKzczLDE4IEBAIHZvaWQgVjFfbWluaXhfdHJ1bmNhdGUoc3RydWN0IGlub2RlICogaW5vZGUpXG4gXHR0cnVuY2F0ZShpbm9kZSk7XG4gfVxuIFxuLXVuc2lnbmVkIFYxX21pbml4X2Jsb2Nrcyhsb2ZmX3Qgc2l6ZSwgc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcbit1bnNpZ25lZCBpbnQgVjFfbWluaXhfYmxvY2tzKGxvZmZfdCBzaXplLCBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxuIHtcbiBcdHJldHVybiBuYmxvY2tzKHNpemUsIHNiKTtcbiB9XG4rXG4raW50IFYxX21pbml4X2lvbWFwX2JlZ2luKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfdCBvZmZzZXQsIGxvZmZfdCBsZW5ndGgsXG4rXHR1bnNpZ25lZCBpbnQgZmxhZ3MsIHN0cnVjdCBpb21hcCAqaW9tYXAsIHN0cnVjdCBpb21hcCAqc3JjbWFwKVxuK3tcbitcdHJldHVybiBtaW5peF9pb21hcF9iZWdpbihpbm9kZSwgb2Zmc2V0LCBsZW5ndGgsIGZsYWdzLCBpb21hcCwgc3JjbWFwKTtcbit9XG4rXG4rY29uc3Qgc3RydWN0IGlvbWFwX29wcyBWMV9taW5peF9pb21hcF9vcHMgPSB7XG4rXHQuaW9tYXBfYmVnaW4gPSBWMV9taW5peF9pb21hcF9iZWdpbixcbitcdC5pb21hcF9lbmQgICA9IG1pbml4X2lvbWFwX2VuZCxcbit9O1xuZGlmZiAtLWdpdCBhL2ZzL21pbml4L2l0cmVlX3YyLmMgYi9mcy9taW5peC9pdHJlZV92Mi5jXG5pbmRleCA5ZDAwZjMxYTJkOWQxNS4uZmM3YTVhZThmYTFjYTMgMTAwNjQ0XG4tLS0gYS9mcy9taW5peC9pdHJlZV92Mi5jXG4rKysgYi9mcy9taW5peC9pdHJlZV92Mi5jXG5AQCAtNTcsNiArNTcsMTAgQEAgc3RhdGljIGludCBibG9ja190b19wYXRoKHN0cnVjdCBpbm9kZSAqIGlub2RlLCBsb25nIGJsb2NrLCBpbnQgb2Zmc2V0c1tERVBUSF0pXG4gfVxuIFxuICNpbmNsdWRlIFwiaXRyZWVfY29tbW9uLmNcIlxuKy8qIFNlZSB0aGUgbm90ZSBpbiBpdHJlZV92MSBpbiBhIGNvbW1lbnQgdGhhdCBzdGFydHMgXCJOT1RBIEJFTkVcIiBmb3IgYW5cbisgKiBleHBsYW5hdGlvbiBmb3Igd2h5IGlvbWFwLmMgaXMgaW5jbHVkZWQgaGVyZS5cbisgKi9cbisjaW5jbHVkZSBcImlvbWFwLmNcIlxuIFxuIGludCBWMl9taW5peF9nZXRfYmxvY2soc3RydWN0IGlub2RlICogaW5vZGUsIGxvbmcgYmxvY2ssXG4gXHRcdFx0c3RydWN0IGJ1ZmZlcl9oZWFkICpiaF9yZXN1bHQsIGludCBjcmVhdGUpXG5AQCAtNjksNyArNzMsMTggQEAgdm9pZCBWMl9taW5peF90cnVuY2F0ZShzdHJ1Y3QgaW5vZGUgKiBpbm9kZSlcbiBcdHRydW5jYXRlKGlub2RlKTtcbiB9XG4gXG4tdW5zaWduZWQgVjJfbWluaXhfYmxvY2tzKGxvZmZfdCBzaXplLCBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxuK3Vuc2lnbmVkIGludCBWMl9taW5peF9ibG9ja3MobG9mZl90IHNpemUsIHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXG4ge1xuIFx0cmV0dXJuIG5ibG9ja3Moc2l6ZSwgc2IpO1xuIH1cbitcbitpbnQgVjJfbWluaXhfaW9tYXBfYmVnaW4oc3RydWN0IGlub2RlICppbm9kZSwgbG9mZl90IG9mZnNldCwgbG9mZl90IGxlbmd0aCxcbitcdHVuc2lnbmVkIGludCBmbGFncywgc3RydWN0IGlvbWFwICppb21hcCwgc3RydWN0IGlvbWFwICpzcmNtYXApXG4re1xuK1x0cmV0dXJuIG1pbml4X2lvbWFwX2JlZ2luKGlub2RlLCBvZmZzZXQsIGxlbmd0aCwgZmxhZ3MsIGlvbWFwLCBzcmNtYXApO1xuK31cbitcbitjb25zdCBzdHJ1Y3QgaW9tYXBfb3BzIFYyX21pbml4X2lvbWFwX29wcyA9IHtcbitcdC5pb21hcF9iZWdpbiA9IFYyX21pbml4X2lvbWFwX2JlZ2luLFxuK1x0LmlvbWFwX2VuZCAgID0gbWluaXhfaW9tYXBfZW5kLFxuK307XG5kaWZmIC0tZ2l0IGEvZnMvbWluaXgvbWluaXguaCBiL2ZzL21pbml4L21pbml4LmhcbmluZGV4IGYyMDI1YzliNTgyNTJmLi5kMWE4OTBlOTZhYmUyYyAxMDA2NDRcbi0tLSBhL2ZzL21pbml4L21pbml4LmhcbisrKyBiL2ZzL21pbml4L21pbml4LmhcbkBAIC01LDYgKzUsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2ZzLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9wYWdlbWFwLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9taW5peF9mcy5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvaW9tYXAuaFx1MDAzZVxuIFxuICNkZWZpbmUgSU5PREVfVkVSU0lPTihpbm9kZSlcdG1pbml4X3NiKGlub2RlLVx1MDAzZWlfc2IpLVx1MDAzZXNfdmVyc2lvblxuICNkZWZpbmUgTUlOSVhfVjFcdFx0MHgwMDAxXHRcdC8qIG9yaWdpbmFsIG1pbml4IGZzICovXG5AQCAtNTYsNyArNTcsOSBAQCBpbnQgbWluaXhfbmV3X2Jsb2NrKHN0cnVjdCBpbm9kZSAqaW5vZGUpO1xuIHZvaWQgbWluaXhfZnJlZV9ibG9jayhzdHJ1Y3QgaW5vZGUgKmlub2RlLCB1bnNpZ25lZCBsb25nIGJsb2NrKTtcbiB1bnNpZ25lZCBsb25nIG1pbml4X2NvdW50X2ZyZWVfYmxvY2tzKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpO1xuIGludCBtaW5peF9nZXRhdHRyKHN0cnVjdCBtbnRfaWRtYXAgKiwgY29uc3Qgc3RydWN0IHBhdGggKixcbi1cdFx0c3RydWN0IGtzdGF0ICosIHUzMiwgdW5zaWduZWQgaW50KTtcbitcdFx0c3RydWN0IGtzdGF0ICosIHUzMiwgdW5zaWduZWQpO1xuK2ludCBtaW5peF9zZXRhdHRyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXG4rXHRzdHJ1Y3QgaWF0dHIgKmF0dHIpO1xuIGludCBtaW5peF9wcmVwYXJlX2NodW5rKHN0cnVjdCBmb2xpbyAqZm9saW8sIGxvZmZfdCBwb3MsIHVuc2lnbmVkIGxlbik7XG4gc3RydWN0IG1hcHBpbmdfbWV0YWRhdGFfYmhzICptaW5peF9nZXRfbWV0YWRhdGFfYmhzKHN0cnVjdCBpbm9kZSAqaW5vZGUpO1xuIGludCBtaW5peF9mc3luYyhzdHJ1Y3QgZmlsZSAqZmlsZSwgbG9mZl90IHN0YXJ0LCBsb2ZmX3QgZW5kLCBpbnQgZGF0YXN5bmMpO1xuQEAgLTY5LDYgKzcyLDggQEAgZXh0ZXJuIGludCBWMV9taW5peF9nZXRfYmxvY2soc3RydWN0IGlub2RlICosIGxvbmcsIHN0cnVjdCBidWZmZXJfaGVhZCAqLCBpbnQpO1xuIGV4dGVybiBpbnQgVjJfbWluaXhfZ2V0X2Jsb2NrKHN0cnVjdCBpbm9kZSAqLCBsb25nLCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKiwgaW50KTtcbiBleHRlcm4gdW5zaWduZWQgVjFfbWluaXhfYmxvY2tzKGxvZmZfdCwgc3RydWN0IHN1cGVyX2Jsb2NrICopO1xuIGV4dGVybiB1bnNpZ25lZCBWMl9taW5peF9ibG9ja3MobG9mZl90LCBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKik7XG4rZXh0ZXJuIGludCBtaW5peF9nZXRfYmxvY2soc3RydWN0IGlub2RlICppbm9kZSwgc2VjdG9yX3QgYmxvY2ssXG4rXHRcdCAgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoX3Jlc3VsdCwgaW50IGNyZWF0ZSk7XG4gXG4gc3RydWN0IG1pbml4X2Rpcl9lbnRyeSAqbWluaXhfZmluZF9lbnRyeShzdHJ1Y3QgZGVudHJ5ICosIHN0cnVjdCBmb2xpbyAqKik7XG4gaW50IG1pbml4X2FkZF9saW5rKHN0cnVjdCBkZW50cnkqLCBzdHJ1Y3QgaW5vZGUqKTtcbkBAIC03NywxMyArODIsMjYgQEAgaW50IG1pbml4X21ha2VfZW1wdHkoc3RydWN0IGlub2RlKiwgc3RydWN0IGlub2RlKik7XG4gaW50IG1pbml4X2VtcHR5X2RpcihzdHJ1Y3QgaW5vZGUqKTtcbiBpbnQgbWluaXhfc2V0X2xpbmsoc3RydWN0IG1pbml4X2Rpcl9lbnRyeSAqZGUsIHN0cnVjdCBmb2xpbyAqZm9saW8sXG4gXHRcdHN0cnVjdCBpbm9kZSAqaW5vZGUpO1xuK2V4dGVybiBjb25zdCBjaGFyICptaW5peF9nZXRfbGluayhzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4rXHRcdHN0cnVjdCBkZWxheWVkX2NhbGwgKmNhbGxiYWNrKTtcbitcbiBzdHJ1Y3QgbWluaXhfZGlyX2VudHJ5ICptaW5peF9kb3Rkb3Qoc3RydWN0IGlub2RlKiwgc3RydWN0IGZvbGlvICoqKTtcbiBpbm9fdCBtaW5peF9pbm9kZV9ieV9uYW1lKHN0cnVjdCBkZW50cnkqKTtcbiBcbitleHRlcm4gaW50IFYxX21pbml4X2lvbWFwX2JlZ2luKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfdCBvZmZzZXQsXG4rXHRsb2ZmX3QgbGVuZ3RoLCB1bnNpZ25lZCBpbnQgZmxhZ3MsIHN0cnVjdCBpb21hcCAqaW9tYXAsXG4rXHRzdHJ1Y3QgaW9tYXAgKnNyY21hcCk7XG4rZXh0ZXJuIGludCBWMl9taW5peF9pb21hcF9iZWdpbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb2ZmX3Qgb2Zmc2V0LFxuK1x0bG9mZl90IGxlbmd0aCwgdW5zaWduZWQgaW50IGZsYWdzLCBzdHJ1Y3QgaW9tYXAgKmlvbWFwLFxuK1x0c3RydWN0IGlvbWFwICpzcmNtYXApO1xuK1xuK2V4dGVybiBjb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZV9vcGVyYXRpb25zIG1pbml4X2FvcHM7XG4gZXh0ZXJuIGNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIG1pbml4X2ZpbGVfaW5vZGVfb3BlcmF0aW9ucztcbiBleHRlcm4gY29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgbWluaXhfZGlyX2lub2RlX29wZXJhdGlvbnM7XG4gZXh0ZXJuIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgbWluaXhfZmlsZV9vcGVyYXRpb25zO1xuIGV4dGVybiBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIG1pbml4X2Rpcl9vcGVyYXRpb25zO1xuK2V4dGVybiBjb25zdCBzdHJ1Y3QgaW9tYXBfb3BzIFYxX21pbml4X2lvbWFwX29wcztcbitleHRlcm4gY29uc3Qgc3RydWN0IGlvbWFwX29wcyBWMl9taW5peF9pb21hcF9vcHM7XG4gXG4gc3RhdGljIGlubGluZSBzdHJ1Y3QgbWluaXhfc2JfaW5mbyAqbWluaXhfc2Ioc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcbiB7XG5AQCAtOTUsMTEgKzExMywxNyBAQCBzdGF0aWMgaW5saW5lIHN0cnVjdCBtaW5peF9pbm9kZV9pbmZvICptaW5peF9pKHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4gXHRyZXR1cm4gY29udGFpbmVyX29mKGlub2RlLCBzdHJ1Y3QgbWluaXhfaW5vZGVfaW5mbywgdmZzX2lub2RlKTtcbiB9XG4gXG4tc3RhdGljIGlubGluZSB1bnNpZ25lZCBtaW5peF9ibG9ja3NfbmVlZGVkKHVuc2lnbmVkIGJpdHMsIHVuc2lnbmVkIGJsb2Nrc2l6ZSlcbitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBtaW5peF9ibG9ja3NfbmVlZGVkKHVuc2lnbmVkIGludCBiaXRzLCB1bnNpZ25lZCBpbnQgYmxvY2tzaXplKVxuIHtcbiBcdHJldHVybiBESVZfUk9VTkRfVVAoYml0cywgYmxvY2tzaXplICogOCk7XG4gfVxuIFxuK3N0YXRpYyBpbmxpbmUgY29uc3Qgc3RydWN0IGlvbWFwX29wcyAqbWluaXhfaW9tYXBfb3BzX3ZlcihzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuK3tcbitcdHJldHVybiAoSU5PREVfVkVSU0lPTihpbm9kZSkgPT0gTUlOSVhfVjEpID9cbitcdFx0XHUwMDI2VjFfbWluaXhfaW9tYXBfb3BzIDogXHUwMDI2VjJfbWluaXhfaW9tYXBfb3BzO1xuK31cbitcbiAjaWYgZGVmaW5lZChDT05GSUdfTUlOSVhfRlNfTkFUSVZFX0VORElBTikgXHUwMDI2XHUwMDI2IFxcXG4gXHRkZWZpbmVkKENPTkZJR19NSU5JWF9GU19CSUdfRU5ESUFOXzE2QklUX0lOREVYRUQpXG4gXG5AQCAtMTI5LDcgKzE1Myw3IEBAIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbWluaXhfYmxvY2tzX25lZWRlZCh1bnNpZ25lZCBiaXRzLCB1bnNpZ25lZCBibG9ja3NpemUpXG4gICogYmlnLWVuZGlhbiAxNmJpdCBpbmRleGVkIGJpdG1hcHNcbiAgKi9cbiBcbi1zdGF0aWMgaW5saW5lIGludCBtaW5peF9maW5kX2ZpcnN0X3plcm9fYml0KGNvbnN0IHZvaWQgKnZhZGRyLCB1bnNpZ25lZCBzaXplKVxuK3N0YXRpYyBpbmxpbmUgaW50IG1pbml4X2ZpbmRfZmlyc3RfemVyb19iaXQoY29uc3Qgdm9pZCAqdmFkZHIsIHVuc2lnbmVkIGludCBzaXplKVxuIHtcbiBcdGNvbnN0IHVuc2lnbmVkIHNob3J0ICpwID0gdmFkZHIsICphZGRyID0gdmFkZHI7XG4gXHR1bnNpZ25lZCBzaG9ydCBudW07XG5kaWZmIC0tZ2l0IGEvZnMvbWluaXgvbmFtZWkuYyBiL2ZzL21pbml4L25hbWVpLmNcbmluZGV4IDI2M2U0YmE4YjFjODIyLi5lMjQ1ZjU1YTY4ZmY1ZCAxMDA2NDRcbi0tLSBhL2ZzL21pbml4L25hbWVpLmNcbisrKyBiL2ZzL21pbml4L25hbWVpLmNcbkBAIC02LDYgKzYsOCBAQFxuICAqL1xuIFxuICNpbmNsdWRlIFwibWluaXguaFwiXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvYnVmZmVyX2hlYWQuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L25hbWVpLmhcdTAwM2VcbiBcbiBzdGF0aWMgaW50IGFkZF9ub25kaXIoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuIHtcbkBAIC02OSw2ICs3MSwxMDEgQEAgc3RhdGljIGludCBtaW5peF9jcmVhdGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxuIFx0cmV0dXJuIG1pbml4X21rbm9kKFx1MDAyNm5vcF9tbnRfaWRtYXAsIGRpciwgZGVudHJ5LCBtb2RlLCAwKTtcbiB9XG4gXG4rc3RhdGljIGlubGluZSB1MTYgKnYxX2lfZGF0YShzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuK3tcbitcdHJldHVybiAodTE2ICopbWluaXhfaShpbm9kZSktXHUwMDNldS5pMV9kYXRhO1xuK31cbitcbitzdGF0aWMgaW5saW5lIHUzMiAqdjJfaV9kYXRhKHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4re1xuK1x0cmV0dXJuICh1MzIgKiltaW5peF9pKGlub2RlKS1cdTAwM2V1LmkyX2RhdGE7XG4rfVxuK1xuK3N0YXRpYyBpbmxpbmUgdTE2IGNwdV90b192MV9ibG9jayhzZWN0b3JfdCBuKVxuK3tcbitcdHJldHVybiBuO1xuK31cbitcbitzdGF0aWMgaW5saW5lIHUzMiBjcHVfdG9fdjJfYmxvY2soc2VjdG9yX3Qgbilcbit7XG4rXHRyZXR1cm4gbjtcbit9XG4rXG4rc3RhdGljIGlubGluZSBzZWN0b3JfdCB2MV9ibG9ja190b19jcHUodTE2IG4pXG4re1xuK1x0cmV0dXJuIG47XG4rfVxuK1xuK3N0YXRpYyBpbmxpbmUgc2VjdG9yX3QgdjJfYmxvY2tfdG9fY3B1KHUzMiBuKVxuK3tcbitcdHJldHVybiBuO1xuK31cbitcbisvKiBSZWltcGxlbWVudCBwYWdlX3N5bWxpbmsncyBnZW5lcmFsIGxvZ2ljIHdoaWxlIGF2b2lkaW5nIHVzaW5nIGJ1ZmZlciBoZWFkXG4rICogYmFzZWQgYW9wcyBvcGVyYXRpb25zIGxpa2UgYW9wcy1cdTAwM2V3cml0ZV9iZWdpbiBzbyB0aGluZ3MgYmVoYXZlIGJldHRlciB3aXRoXG4rICogdGhlIG5ldyByZWdpbWUgb2YgaW9tYXAgYmFzZWQgYW9wcyBvcGVyYXRpb25zLiBDcmliYmluZyBmcm9tIHBhZ2Vfc3ltbGluayBpblxuKyAqIGZzL25hbWVpLmMgYW5kIGV4dDQncyBleHQ0X2luaXRfc3ltbGlua19ibG9jay5cbisgKi9cbitzdGF0aWMgaW50IF9fcGFnZV9zeW1saW5rKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGNvbnN0IGNoYXIgKnN5bW5hbWUsIGludCBsZW4pXG4re1xuK1x0c3RydWN0IHN1cGVyX2Jsb2NrICpzYiA9IGlub2RlLVx1MDAzZWlfc2I7XG4rXHRzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoO1xuK1x0Y2hhciAqa2FkZHI7XG4rXHRpbnQgZXJyID0gMDtcbitcdHUxNiAqcDE2OyAvKiB2MSAxNiBiaXQgYmxvY2sgKi9cbitcdHUzMiAqcDMyOyAvKiB2Mi8zIDMyIGJpdCBibG9jayAqL1xuK1xuK1x0c2VjdG9yX3QgcGh5cztcbitcbitcdHBoeXMgPSBtaW5peF9uZXdfYmxvY2soaW5vZGUpO1xuK1x0aWYgKCFwaHlzKSB7XG4rXHRcdGVyciA9IC1FTk9TUEM7XG4rXHRcdGdvdG8gcHNfb3V0O1xuK1x0fVxuK1xuK1x0aWYgKElOT0RFX1ZFUlNJT04oaW5vZGUpID09IE1JTklYX1YxKSB7XG4rXHRcdHAxNiA9IHYxX2lfZGF0YShpbm9kZSk7XG4rXHRcdCpwMTYgPSBjcHVfdG9fdjFfYmxvY2socGh5cyk7XG4rXHR9IGVsc2Uge1xuK1x0XHRwMzIgPSB2Ml9pX2RhdGEoaW5vZGUpO1xuK1x0XHQqcDMyID0gY3B1X3RvX3YyX2Jsb2NrKHBoeXMpO1xuK1x0fVxuK1xuK1x0YmggPSBzYl9nZXRibGsoc2IsIHBoeXMpO1xuK1x0aWYgKCFiaCkge1xuK1x0XHRlcnIgPSAtRU5PTUVNO1xuK1x0XHRnb3RvIHBzX2ZhaWw7XG4rXHR9XG4rXG4rXHRsb2NrX2J1ZmZlcihiaCk7XG4rXHRrYWRkciA9IChjaGFyICopYmgtXHUwMDNlYl9kYXRhO1xuK1x0bWVtc2V0KGthZGRyLCAwLCBzYi1cdTAwM2VzX2Jsb2Nrc2l6ZSk7XG4rXHRtZW1jcHkoa2FkZHIsIHN5bW5hbWUsIGxlbik7XG4rXHRpbm9kZS1cdTAwM2VpX3NpemUgPSBsZW4gLSAxO1xuK1x0c2V0X2J1ZmZlcl91cHRvZGF0ZShiaCk7XG4rXHR1bmxvY2tfYnVmZmVyKGJoKTtcbitcbitcdG1tYl9tYXJrX2J1ZmZlcl9kaXJ0eShiaCwgXHUwMDI2bWluaXhfaShpbm9kZSktXHUwMDNlaV9tZXRhZGF0YV9iaHMpO1xuK1x0aWYgKGlub2RlX25lZWRzX3N5bmMoaW5vZGUpKSB7XG4rXHRcdHN5bmNfZGlydHlfYnVmZmVyKGJoKTtcbitcdFx0aWYgKGJ1ZmZlcl9yZXEoYmgpIFx1MDAyNlx1MDAyNiAhYnVmZmVyX3VwdG9kYXRlKGJoKSkge1xuK1x0XHRcdHByX2VycihcImkvbyBlcnJvciBzeW5jaW5nIGl0YWJsZSBibG9ja1wiKTtcbitcdFx0XHRlcnIgPSAtRUlPO1xuK1x0XHR9XG4rXG4rXHR9XG4rXG4rXHRtYXJrX2lub2RlX2RpcnR5KGlub2RlKTtcbitcdGJyZWxzZShiaCk7XG4rXG4rcHNfb3V0OlxuK1x0cmV0dXJuIGVycjtcbitcbitwc19mYWlsOlxuK1x0bWluaXhfZnJlZV9ibG9jayhpbm9kZSwgcGh5cyk7XG4rXHRnb3RvIHBzX291dDtcbit9XG4rXG4gc3RhdGljIGludCBtaW5peF9zeW1saW5rKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbiBcdFx0XHQgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBjb25zdCBjaGFyICpzeW1uYW1lKVxuIHtcbkBAIC04NCw3ICsxODEsNyBAQCBzdGF0aWMgaW50IG1pbml4X3N5bWxpbmsoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxuIFx0XHRyZXR1cm4gUFRSX0VSUihpbm9kZSk7XG4gXG4gXHRtaW5peF9zZXRfaW5vZGUoaW5vZGUsIDApO1xuLVx0ZXJyID0gcGFnZV9zeW1saW5rKGlub2RlLCBzeW1uYW1lLCBpKTtcbitcdGVyciA9IF9fcGFnZV9zeW1saW5rKGlub2RlLCBzeW1uYW1lLCBpKTtcbiBcdGlmICh1bmxpa2VseShlcnIpKSB7XG4gXHRcdGlub2RlX2RlY19saW5rX2NvdW50KGlub2RlKTtcbiBcdFx0aXB1dChpbm9kZSk7XG5AQCAtMjczLDYgKzM3MCw0NCBAQCBzdGF0aWMgaW50IG1pbml4X3JlbmFtZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcbiBcdHJldHVybiBlcnI7XG4gfVxuIFxuKy8qIHN0cmFpZ2h0IHVwIHRoaWV2ZXJ5IGhlcmU7IHN0b2xlbiB2ZXJiYXRpbSBmcm9tIGV4dDRfZ2V0X2xpbmsgKi9cbitzdGF0aWMgdm9pZCBtaW5peF9mcmVlX2xpbmsodm9pZCAqYmgpXG4re1xuK1x0YnJlbHNlKGJoKTtcbit9XG4rXG4rLyogQm9ycm93aW5nIGZyb20gZXh0NF9nZXRfbGluayB0byBhIGRlZ3JlZTsgc2luY2UgbWluaXggaW5vZGVzIGFuZCBzeW1saW5rc1xuKyAqIGFyZSBzaWduaWZpY2FudGx5IHNpbXBsZXIsIHdlIGRvbid0IG5lZWQgdG8gZG8gbmVhcmx5IGFzIG11Y2ggYXMgZXh0NFxuKyAqIHJlcXVpcmVzIGZvciBvbGQtdGltZXkgZXh0NCBzbG93IGxpbmtzLlxuKyAqL1xuK2NvbnN0IGNoYXIgKm1pbml4X2dldF9saW5rKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGlub2RlICppbm9kZSxcbitcdFx0c3RydWN0IGRlbGF5ZWRfY2FsbCAqY2FsbGJhY2spXG4re1xuK1x0c3RydWN0IHN1cGVyX2Jsb2NrICpzYiA9IGlub2RlLVx1MDAzZWlfc2I7XG4rXHRzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoO1xuK1x0c2VjdG9yX3QgYmxrO1xuK1xuK1x0LyogR2V0IHlvbiBibG9jaywgZGVwZW5kaW5nIG9uIHdoYXQgdmVyc2lvbiBvZiB0aGUgbWluaXggZnMgdGhpcyBpcy4gKi9cbitcdGlmIChJTk9ERV9WRVJTSU9OKGlub2RlKSA9PSBNSU5JWF9WMSlcbitcdFx0YmxrID0gdjFfYmxvY2tfdG9fY3B1KCoodjFfaV9kYXRhKGlub2RlKSkpO1xuK1x0ZWxzZVxuK1x0XHRibGsgPSB2Ml9ibG9ja190b19jcHUoKih2Ml9pX2RhdGEoaW5vZGUpKSk7XG4rXG4rXHRiaCA9IHNiX2JyZWFkKHNiLCBibGspO1xuK1x0aWYgKElTX0VSUihiaCkpXG4rXHRcdHJldHVybiBFUlJfQ0FTVChiaCk7XG4rXHRpZiAoIWJoKSB7XG4rXHRcdHByX2VycihcImJhZCBzeW1saW5rIG9uIGlub2RlICVsbHVcIiwgaW5vZGUtXHUwMDNlaV9pbm8pO1xuK1x0XHRyZXR1cm4gRVJSX1BUUigtRUZTQ09SUlVQVEVEKTtcbitcdH1cbitcbitcdHNldF9kZWxheWVkX2NhbGwoY2FsbGJhY2ssIG1pbml4X2ZyZWVfbGluaywgYmgpO1xuK1x0bmRfdGVybWluYXRlX2xpbmsoYmgtXHUwMDNlYl9kYXRhLCBpbm9kZS1cdTAwM2VpX3NpemUsXG4rXHRcdFx0aW5vZGUtXHUwMDNlaV9zYi1cdTAwM2VzX2Jsb2Nrc2l6ZSAtIDEpO1xuK1xuK1x0cmV0dXJuIGJoLVx1MDAzZWJfZGF0YTtcbit9XG4rXG4gLypcbiAgKiBkaXJlY3RvcmllcyBjYW4gaGFuZGxlIG1vc3Qgb3BlcmF0aW9ucy4uLlxuICAqL1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjhUMDU6MzM6MDQuMDE1ODc4MjEyWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjYyODUzNjk1NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNaW5peCBJL08gSW1wbGVtZW50YXRpb24gUGF0Y2ggQW5hbHlzaXMgXHUwMDI2IEZ1enppbmcgU3RyYXRlZ3kqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGdvdCB0aGlzIHBhdGNoIGhlcmUgdGhhdCdzIGRpdmluZyBkZWVwIGludG8gdGhlIE1pbml4IGZpbGVzeXN0ZW0gaW1wbGVtZW50YXRpb24uIEl0J3MgdG91Y2hpbmcgYGZzL21pbml4L2ZpbGUuY2AsIGBmcy9taW5peC9pbm9kZS5jYCwgYGZzL21pbml4L2lvbWFwLmNgLCB0aGUgYGl0cmVlYCBpbXBsZW1lbnRhdGlvbiwgYW5kIGV2ZW4gdGhlIGhlYWRlciBhbmQgbmFtZSByZXNvbHV0aW9uIGNvbXBvbmVudHMuIFRoaXMgaXMgcHJldHR5IHNpZ25pZmljYW50OyBpdCdzIGltcGxlbWVudGluZyBpb21hcC1iYXNlZCBkaXJlY3QgSS9PIGFuZCBidWZmZXJlZCBJL08sIHdoaWNoIGlzIGEgYmlnIGNoYW5nZSB0byBob3cgTWluaXggaGFuZGxlcyBkYXRhLlxuXG5Mb29raW5nIGF0IHRoZSBjb2RlIGNoYW5nZXMsIGl0J3MgaW50cm9kdWNpbmcgYSB3aG9sZSBzbGV3IG9mIG5ldyBmdW5jdGlvbnM6IGBtaW5peF9kaW9fcmVhZF9pdGVyYCwgYG1pbml4X2Rpb193cml0ZV9pdGVyYCwgdGhlIHN0YW5kYXJkIGZpbGUgcmVhZC93cml0ZSBpdGVyYXRvcnMsIGFuZCBzb21lIGNydWNpYWwgaW9tYXAgbGlmZWN5Y2xlIGZ1bmN0aW9ucyBsaWtlIGBtaW5peF9pb21hcF9iZWdpbmAgYW5kIGBtaW5peF9pb21hcF9lbmRgLiBQbHVzLCBpdCBsb29rcyBsaWtlIHRoZXkndmUgdXBkYXRlZCB0aGUgd3JpdGViYWNrIGFuZCByZWFkLWFoZWFkIG1lY2hhbmlzbXMgKGBtaW5peF93cml0ZWJhY2tfcmFuZ2VgLCBgbWluaXhfd3JpdGVwYWdlc2AsIGBtaW5peF9yZWFkX2ZvbGlvYCwgYG1pbml4X3JlYWRhaGVhZGApLiBJIGFsc28gc2VlIGNoYW5nZXMgdG8gYmxvY2sgbWFwcGluZyAoYG1pbml4X2JtYXBgKSBhbmQgc3ltbGluayBoYW5kbGluZywgc3dpdGNoaW5nIGF3YXkgZnJvbSB0aGUgZ2VuZXJpYyBwYWdlIHN5bWxpbmsgZnVuY3Rpb25zIGFuZCB1c2luZyBgX19wYWdlX3N5bWxpbmtgIGFuZCBgbWluaXhfZ2V0X2xpbmtgIGluc3RlYWQuXG5cblRoaXMgaXMgYSBjbGVhciBmdW5jdGlvbmFsIHNoaWZ0LiBHaXZlbiB0aGUgY29tcGxleGl0eSBhbmQgdGhlIHBvdGVudGlhbCBmb3Igc3VidGxlIGludGVyYWN0aW9ucyBpbiBhIGZpbGVzeXN0ZW0sIHRoaXMgZGVmaW5pdGVseSB3YXJyYW50cyBzb21lIHNlcmlvdXMgZnV6emluZy4gTXkgbWFpbiB0YXJnZXRzIGZvciBmdXp6aW5nIHNob3VsZCBiZSBhbGwgdGhlIG5ld2x5IGludHJvZHVjZWQgZnVuY3Rpb25zOiBgbWluaXhfZGlvX3JlYWRfaXRlcmAsIGBtaW5peF9kaW9fd3JpdGVfaXRlcmAsIGBtaW5peF9maWxlX3JlYWRfaXRlcmAsIGBtaW5peF9maWxlX3dyaXRlX2l0ZXJgLCBgbWluaXhfaW9tYXBfYmVnaW5gLCBgbWluaXhfaW9tYXBfZW5kYCwgYG1pbml4X3dyaXRlYmFja19yYW5nZWAsIGBtaW5peF93cml0ZXBhZ2VzYCwgYG1pbml4X3JlYWRfZm9saW9gLCBgbWluaXhfcmVhZGFoZWFkYCwgYG1pbml4X2JtYXBgLCBgX19wYWdlX3N5bWxpbmtgLCBhbmQgYG1pbml4X2dldF9saW5rYC4gVGhlc2UgYXJlIHRoZSBjcml0aWNhbCBlbnRyeSBwb2ludHMgYW5kIGRhdGEgbWFuaXB1bGF0aW9uIGZ1bmN0aW9ucyB0aGF0IG5lZWQgdGhlIG1vc3Qgc2NydXRpbnkuXG5cbkJlZm9yZSBJIGdvIGFueSBmdXJ0aGVyLCBJJ2xsIHF1aWNrbHkgY2hlY2sgYGZzL21pbml4L0tjb25maWdgIHRvIGNvbmZpcm0gd2hhdCBjb25maWcgb3B0aW9ucyBhcmUgaW52b2x2ZWQgaW4gZW5hYmxpbmcgdGhlIE1pbml4IGZpbGVzeXN0ZW0uIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBrbm93IGhvdyB0byBhY3R1YWxseSBlbmFibGUgdGhpcyBjb2RlIHBhdGggYW5kIHdoaWNoIGNvbmZpZ3MgYXJlIHJlbGV2YW50IGZvciB0aGUgYnVpbGQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExNjA4LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDQ3LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjhUMDU6MzM6MTAuNjQ0NDE4NzM3WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI3MTQyNjcyMywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTUlOSVhfRlNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvbWluaXgvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9taW5peC9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuZnMvbWluaXgvS2NvbmZpZzoyOmNvbmZpZyBNSU5JWF9GU1xcbmZzL21pbml4L0tjb25maWctMy1cXHR0cmlzdGF0ZSBcXFwiTWluaXggZmlsZSBzeXN0ZW0gc3VwcG9ydFxcXCJcXG4tLVxcbmZzL21pbml4L0tjb25maWctMjAtXFxuZnMvbWluaXgvS2NvbmZpZzoyMTpjb25maWcgTUlOSVhfRlNfTkFUSVZFX0VORElBTlxcbmZzL21pbml4L0tjb25maWctMjItXFx0ZGVmX2Jvb2wgTUlOSVhfRlNcXG4tLVxcbmZzL21pbml4L0tjb25maWctMjQtXFxuZnMvbWluaXgvS2NvbmZpZzoyNTpjb25maWcgTUlOSVhfRlNfQklHX0VORElBTl8xNkJJVF9JTkRFWEVEXFxuZnMvbWluaXgvS2NvbmZpZy0yNi1cXHRkZWZfYm9vbCBNSU5JWF9GU1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yOFQwNTozMzoxMC45MTU4NTMxNloiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMwMTI3OTE0ODEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0J3MgaW5uZXIgbW9ub2xvZ3VlOlxuXG4qKkNoZWNraW5nIE15IEFzc3VtcHRpb25zOiBDb25maWcgYW5kIEZvY3VzKipcblxuQWxyaWdodCwgdGhlIGNvbnRleHQgaXMgdGhlIGBNSU5JWF9GU2AgY29uZmlnLiBSaWdodCBhd2F5LCBteSBtaW5kIHN0YXJ0cyB0aWNraW5nLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEknbSBncm91bmRlZCBpbiB0aGUgc3BlY2lmaWNzIG9mICp0aGF0KiBwYXJ0aWN1bGFyIGNvbmZpZ3VyYXRpb24uIEJlZm9yZSBJIGRlbHZlIGludG8gYW55dGhpbmcgZWxzZSwgaXQncyBlc3NlbnRpYWwgdG8gcXVpY2tseSB2ZXJpZnkgdGhhdCBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSByZWxldmFudCBmb2N1cyBzeW1ib2xzIGlzIGFjY3VyYXRlLiBJIGRvbid0IHdhbnQgdG8gd2FzdGUgdGltZSBkb3duIGEgcmFiYml0IGhvbGUgYmFzZWQgb24gYW4gaW5jb3JyZWN0IHByZW1pc2UuIExldCdzIG1ha2Ugc3VyZSBJJ20gdHJhY2tpbmcgd2l0aCB0aGUgcmlnaHQgdmFyaWFibGVzIGFuZCBkZWZpbml0aW9ucyBmb3IgYE1JTklYX0ZTYC4gVGhpcyBzZWVtcyBsaWtlIGEgc2FuaXR5IGNoZWNrLCBtb3JlIHRoYW4gYW55dGhpbmcgZWxzZSwgYnV0IGVzc2VudGlhbCB0byBlbnN1cmUgZWZmaWNpZW5jeSBpbiB0aGUgbG9uZyBydW4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyODEyLCJPdXRwdXRUb2tlbnMiOjU1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjhUMDU6MzM6MTMuOTI4NjQ5MzQxWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYyNjA3OTI0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl4oc3RhdGljICk/W2EtekEtWl8wLTldKyBcXFxcKiptaW5peF9bYS16QS1aXzAtOV0rXFxcXChcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvbWluaXgvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL21pbml4L2JpdG1hcC5jPTI3PXN0YXRpYyBfX3UzMiBjb3VudF9mcmVlKHN0cnVjdCBidWZmZXJfaGVhZCAqbWFwW10sIHVuc2lnbmVkIGJsb2Nrc2l6ZSwgX191MzIgbnVtYml0cylcXG4tLVxcbmZzL21pbml4L2JpdG1hcC5jLTQxLVxcbmZzL21pbml4L2JpdG1hcC5jOjQyOnZvaWQgbWluaXhfZnJlZV9ibG9jayhzdHJ1Y3QgaW5vZGUgKmlub2RlLCB1bnNpZ25lZCBsb25nIGJsb2NrKVxcbmZzL21pbml4L2JpdG1hcC5jLTQzLXtcXG4tLVxcbmZzL21pbml4L2JpdG1hcC5jLTcwLVxcbmZzL21pbml4L2JpdG1hcC5jOjcxOmludCBtaW5peF9uZXdfYmxvY2soc3RydWN0IGlub2RlICogaW5vZGUpXFxuZnMvbWluaXgvYml0bWFwLmMtNzIte1xcbi0tXFxuZnMvbWluaXgvYml0bWFwLmM9MTMxPW1pbml4X1YyX3Jhd19pbm9kZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBpbm9fdCBpbm8sIHN0cnVjdCBidWZmZXJfaGVhZCAqKmJoKVxcbi0tXFxuZnMvbWluaXgvYml0bWFwLmMtMTU3LVxcbmZzL21pbml4L2JpdG1hcC5jOjE1ODpzdGF0aWMgdm9pZCBtaW5peF9jbGVhcl9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKVxcbmZzL21pbml4L2JpdG1hcC5jLTE1OS17XFxuLS1cXG5mcy9taW5peC9iaXRtYXAuYy0xODItXFxuZnMvbWluaXgvYml0bWFwLmM6MTgzOnZvaWQgbWluaXhfZnJlZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKiBpbm9kZSlcXG5mcy9taW5peC9iaXRtYXAuYy0xODQte1xcbi0tXFxuZnMvbWluaXgvZGlyLmM9MTg9dHlwZWRlZiBzdHJ1Y3QgbWluaXgzX2Rpcl9lbnRyeSBtaW5peDNfZGlyZW50O1xcbmZzL21pbml4L2Rpci5jLTE5LVxcbmZzL21pbml4L2Rpci5jOjIwOnN0YXRpYyBpbnQgbWluaXhfcmVhZGRpcihzdHJ1Y3QgZmlsZSAqLCBzdHJ1Y3QgZGlyX2NvbnRleHQgKik7XFxuZnMvbWluaXgvZGlyLmMtMjEtXFxuLS1cXG5mcy9taW5peC9kaXIuYz00Mz1zdGF0aWMgdm9pZCBkaXJfY29tbWl0X2NodW5rKHN0cnVjdCBmb2xpbyAqZm9saW8sIGxvZmZfdCBwb3MsIHVuc2lnbmVkIGxlbilcXG4tLVxcbmZzL21pbml4L2Rpci5jLTU2LVxcbmZzL21pbml4L2Rpci5jOjU3OnN0YXRpYyBpbnQgbWluaXhfaGFuZGxlX2RpcnN5bmMoc3RydWN0IGlub2RlICpkaXIpXFxuZnMvbWluaXgvZGlyLmMtNTgte1xcbi0tXFxuZnMvbWluaXgvZGlyLmM9Nzg9c3RhdGljIGlubGluZSB2b2lkICptaW5peF9uZXh0X2VudHJ5KHZvaWQgKmRlLCBzdHJ1Y3QgbWluaXhfc2JfaW5mbyAqc2JpKVxcbi0tXFxuZnMvbWluaXgvZGlyLmMtODItXFxuZnMvbWluaXgvZGlyLmM6ODM6c3RhdGljIGludCBtaW5peF9yZWFkZGlyKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgZGlyX2NvbnRleHQgKmN0eClcXG5mcy9taW5peC9kaXIuYy04NC17XFxuLS1cXG5mcy9taW5peC9kaXIuYz0xMzc9c3RhdGljIGlubGluZSBpbnQgbmFtZWNvbXBhcmUoaW50IGxlbiwgaW50IG1heGxlbixcXG4tLVxcbmZzL21pbml4L2Rpci5jLTE1My0gKi9cXG5mcy9taW5peC9kaXIuYzoxNTQ6bWluaXhfZGlyZW50ICptaW5peF9maW5kX2VudHJ5KHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGZvbGlvICoqZm9saW9wKVxcbmZzL21pbml4L2Rpci5jLTE1NS17XFxuLS1cXG5mcy9taW5peC9kaXIuYy0xOTgtXFxuZnMvbWluaXgvZGlyLmM6MTk5OmludCBtaW5peF9hZGRfbGluayhzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBpbm9kZSAqaW5vZGUpXFxuZnMvbWluaXgvZGlyLmMtMjAwLXtcXG4tLVxcbmZzL21pbml4L2Rpci5jLTI4NS1cXG5mcy9taW5peC9kaXIuYzoyODY6aW50IG1pbml4X2RlbGV0ZV9lbnRyeShzdHJ1Y3QgbWluaXhfZGlyX2VudHJ5ICpkZSwgc3RydWN0IGZvbGlvICpmb2xpbylcXG5mcy9taW5peC9kaXIuYy0yODcte1xcbi0tXFxuZnMvbWluaXgvZGlyLmMtMzA5LVxcbmZzL21pbml4L2Rpci5jOjMxMDppbnQgbWluaXhfbWFrZV9lbXB0eShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgaW5vZGUgKmRpcilcXG5mcy9taW5peC9kaXIuYy0zMTEte1xcbi0tXFxuZnMvbWluaXgvZGlyLmMtMzU2LSAqL1xcbmZzL21pbml4L2Rpci5jOjM1NzppbnQgbWluaXhfZW1wdHlfZGlyKHN0cnVjdCBpbm9kZSAqIGlub2RlKVxcbmZzL21pbml4L2Rpci5jLTM1OC17XFxuLS1cXG5mcy9taW5peC9kaXIuYy00MDYtLyogUmVsZWFzZXMgdGhlIHBhZ2UgKi9cXG5mcy9taW5peC9kaXIuYzo0MDc6aW50IG1pbml4X3NldF9saW5rKHN0cnVjdCBtaW5peF9kaXJfZW50cnkgKmRlLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbmZzL21pbml4L2Rpci5jLTQwOC1cXHRcXHRzdHJ1Y3QgaW5vZGUgKmlub2RlKVxcbi0tXFxuZnMvbWluaXgvZGlyLmM9NDMxPXN0cnVjdCBtaW5peF9kaXJfZW50cnkgKm1pbml4X2RvdGRvdChzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGZvbGlvICoqZm9saW9wKVxcbi0tXFxuZnMvbWluaXgvZGlyLmMtNDQwLVxcbmZzL21pbml4L2Rpci5jOjQ0MTppbm9fdCBtaW5peF9pbm9kZV9ieV9uYW1lKHN0cnVjdCBkZW50cnkgKmRlbnRyeSlcXG5mcy9taW5peC9kaXIuYy00NDIte1xcbi0tXFxuZnMvbWluaXgvZmlsZS5jLTEyLVxcbmZzL21pbml4L2ZpbGUuYzoxMzppbnQgbWluaXhfZnN5bmMoc3RydWN0IGZpbGUgKmZpbGUsIGxvZmZfdCBzdGFydCwgbG9mZl90IGVuZCwgaW50IGRhdGFzeW5jKVxcbmZzL21pbml4L2ZpbGUuYy0xNC17XFxuLS1cXG5mcy9taW5peC9maWxlLmMtMTktXFxuZnMvbWluaXgvZmlsZS5jOjIwOnN0YXRpYyBzc2l6ZV90IG1pbml4X2Rpb19yZWFkX2l0ZXIoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKnRvKVxcbmZzL21pbml4L2ZpbGUuYy0yMS17XFxuLS1cXG5mcy9taW5peC9maWxlLmMtMzMtXFxuZnMvbWluaXgvZmlsZS5jOjM0OnN0YXRpYyBpbnQgbWluaXhfZGlvX3dyaXRlX2VuZF9pbyhzdHJ1Y3Qga2lvY2IgKmlvY2IsIHNzaXplX3Qgc2l6ZSwgaW50IGVycm9yLFxcbmZzL21pbml4L2ZpbGUuYy0zNS1cXHRcXHR1bnNpZ25lZCBpbnQgZmxhZ3MpXFxuLS1cXG5mcy9taW5peC9maWxlLmM9NTE9c3RhdGljIGNvbnN0IHN0cnVjdCBpb21hcF9kaW9fb3BzIG1pbml4X2Rpb193cml0ZV9vcHMgPSB7XFxuLS1cXG5mcy9taW5peC9maWxlLmMtNTQtXFxuZnMvbWluaXgvZmlsZS5jOjU1OnN0YXRpYyBzc2l6ZV90IG1pbml4X2Rpb193cml0ZV9pdGVyKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICpmcm9tKVxcbmZzL21pbml4L2ZpbGUuYy01Ni17XFxuLS1cXG5mcy9taW5peC9maWxlLmMtMTE0LVxcbmZzL21pbml4L2ZpbGUuYzoxMTU6c3RhdGljIHNzaXplX3QgbWluaXhfZmlsZV9yZWFkX2l0ZXIoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKnRvKVxcbmZzL21pbml4L2ZpbGUuYy0xMTYte1xcbi0tXFxuZnMvbWluaXgvZmlsZS5jLTEyMi1cXG5mcy9taW5peC9maWxlLmM6MTIzOnN0YXRpYyBzc2l6ZV90IG1pbml4X2ZpbGVfd3JpdGVfaXRlcihzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqZnJvbSlcXG5mcy9taW5peC9maWxlLmMtMTI0LXtcXG4tLVxcbmZzL21pbml4L2ZpbGUuYy0xNTUtXFxuZnMvbWluaXgvZmlsZS5jOjE1NjpzdGF0aWMgaW50IG1pbml4X2ZpbGVfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlscClcXG5mcy9taW5peC9maWxlLmMtMTU3LXtcXG4tLVxcbmZzL21pbml4L2ZpbGUuYz0xNjc9Y29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBtaW5peF9maWxlX29wZXJhdGlvbnMgPSB7XFxuLS1cXG5mcy9taW5peC9maWxlLmMtMTc3LVxcbmZzL21pbml4L2ZpbGUuYzoxNzg6aW50IG1pbml4X3NldGF0dHIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcXG5mcy9taW5peC9maWxlLmMtMTc5LVxcdHN0cnVjdCBpYXR0ciAqYXR0cilcXG4tLVxcbmZzL21pbml4L2lub2RlLmMtMjQtXFxuZnMvbWluaXgvaW5vZGUuYzoyNTpzdGF0aWMgaW50IG1pbml4X3dyaXRlX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuZnMvbWluaXgvaW5vZGUuYy0yNi1cXHRcXHRzdHJ1Y3Qgd3JpdGViYWNrX2NvbnRyb2wgKndiYyk7XFxuZnMvbWluaXgvaW5vZGUuYzoyNzpzdGF0aWMgaW50IG1pbml4X3N0YXRmcyhzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBrc3RhdGZzICpidWYpO1xcbmZzL21pbml4L2lub2RlLmMtMjgtXFxuZnMvbWluaXgvaW5vZGUuYz0yOT12b2lkIF9fbWluaXhfZXJyb3JfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSwgY29uc3QgY2hhciAqZnVuY3Rpb24sXFxuLS1cXG5mcy9taW5peC9pbm9kZS5jLTQ0LVxcbmZzL21pbml4L2lub2RlLmM6NDU6c3RhdGljIHZvaWQgbWluaXhfZXZpY3RfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSlcXG5mcy9taW5peC9pbm9kZS5jLTQ2LXtcXG4tLVxcbmZzL21pbml4L2lub2RlLmMtNTktXFxuZnMvbWluaXgvaW5vZGUuYzo2MDpzdGF0aWMgdm9pZCBtaW5peF9wdXRfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcXG5mcy9taW5peC9pbm9kZS5jLTYxLXtcXG4tLVxcbmZzL21pbml4L2lub2RlLmM9ODI9c3RhdGljIHN0cnVjdCBpbm9kZSAqbWluaXhfYWxsb2NfaW5vZGUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcXG4tLVxcbmZzL21pbml4L2lub2RlLmMtOTItXFxuZnMvbWluaXgvaW5vZGUuYzo5MzpzdGF0aWMgdm9pZCBtaW5peF9mcmVlX2luX2NvcmVfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSlcXG5mcy9taW5peC9pbm9kZS5jLTk0LXtcXG4tLVxcbmZzL21pbml4L2lub2RlLmM9MTI3PXN0YXRpYyBjb25zdCBzdHJ1Y3Qgc3VwZXJfb3BlcmF0aW9ucyBtaW5peF9zb3BzID0ge1xcbi0tXFxuZnMvbWluaXgvaW5vZGUuYy0xMzUtXFxuZnMvbWluaXgvaW5vZGUuYzoxMzY6c3RhdGljIGludCBtaW5peF9yZWNvbmZpZ3VyZShzdHJ1Y3QgZnNfY29udGV4dCAqZmMpXFxuZnMvbWluaXgvaW5vZGUuYy0xMzcte1xcbi0tXFxuZnMvbWluaXgvaW5vZGUuYy0xNzMtXFxuZnMvbWluaXgvaW5vZGUuYzoxNzQ6c3RhdGljIGJvb2wgbWluaXhfY2hlY2tfc3VwZXJibG9jayhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxcbmZzL21pbml4L2lub2RlLmMtMTc1LXtcXG4tLVxcbmZzL21pbml4L2lub2RlLmMtMjIwLVxcbmZzL21pbml4L2lub2RlLmM6MjIxOnN0YXRpYyBpbnQgbWluaXhfZmlsbF9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnMsIHN0cnVjdCBmc19jb250ZXh0ICpmYylcXG5mcy9taW5peC9pbm9kZS5jLTIyMi17XFxuLS1cXG5mcy9taW5peC9pbm9kZS5jLTQwMy1cXG5mcy9taW5peC9pbm9kZS5jOjQwNDpzdGF0aWMgaW50IG1pbml4X2dldF90cmVlKHN0cnVjdCBmc19jb250ZXh0ICpmYylcXG5mcy9taW5peC9pbm9kZS5jLTQwNS17XFxuLS1cXG5mcy9taW5peC9pbm9kZS5jPTQwOT1zdGF0aWMgY29uc3Qgc3RydWN0IGZzX2NvbnRleHRfb3BlcmF0aW9ucyBtaW5peF9jb250ZXh0X29wcyA9IHtcXG4tLVxcbmZzL21pbml4L2lub2RlLmMtNDEzLVxcbmZzL21pbml4L2lub2RlLmM6NDE0OnN0YXRpYyBpbnQgbWluaXhfaW5pdF9mc19jb250ZXh0KHN0cnVjdCBmc19jb250ZXh0ICpmYylcXG5mcy9taW5peC9pbm9kZS5jLTQxNS17XFxuLS1cXG5mcy9taW5peC9pbm9kZS5jLTQyMC1cXG5mcy9taW5peC9pbm9kZS5jOjQyMTpzdGF0aWMgaW50IG1pbml4X3N0YXRmcyhzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBrc3RhdGZzICpidWYpXFxuZnMvbWluaXgvaW5vZGUuYy00MjIte1xcbi0tXFxuZnMvbWluaXgvaW5vZGUuYy00MzgtXFxuZnMvbWluaXgvaW5vZGUuYzo0Mzk6c3RhdGljIHNzaXplX3QgbWluaXhfd3JpdGViYWNrX3JhbmdlKHN0cnVjdCBpb21hcF93cml0ZXBhZ2VfY3R4ICp3cGMsXFxuZnMvbWluaXgvaW5vZGUuYy00NDAtXFx0c3RydWN0IGZvbGlvICpmb2xpbywgdTY0IHBvcywgdW5zaWduZWQgaW50IGxlbiwgdTY0IGVuZF9wb3MpXFxuLS1cXG5mcy9taW5peC9pbm9kZS5jPTQ1OT1zdGF0aWMgY29uc3Qgc3RydWN0IGlvbWFwX3dyaXRlYmFja19vcHMgbWluaXhfd3JpdGViYWNrX29wcyA9IHtcXG4tLVxcbmZzL21pbml4L2lub2RlLmMtNDYzLVxcbmZzL21pbml4L2lub2RlLmM6NDY0OmludCBtaW5peF9nZXRfYmxvY2soc3RydWN0IGlub2RlICppbm9kZSwgc2VjdG9yX3QgYmxvY2ssXFxuZnMvbWluaXgvaW5vZGUuYy00NjUtXFx0XFx0ICAgIHN0cnVjdCBidWZmZXJfaGVhZCAqYmhfcmVzdWx0LCBpbnQgY3JlYXRlKVxcbi0tXFxuZnMvbWluaXgvaW5vZGUuYy00NzMtLyogVGhlIG9sZCBtaW5peF93cml0ZXBhZ2VzLCBwcmVzZXJ2ZWQgZm9yIGRpcmVjdG9yeSBvcGVyYXRpb25zLiAqL1xcbmZzL21pbml4L2lub2RlLmM6NDc0OnN0YXRpYyBpbnQgbWluaXhfYmxvY2tfd3JpdGVwYWdlcyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcXG5mcy9taW5peC9pbm9kZS5jLTQ3NS1cXHRcXHRzdHJ1Y3Qgd3JpdGViYWNrX2NvbnRyb2wgKndiYylcXG4tLVxcbmZzL21pbml4L2lub2RlLmMtNDc5LVxcbmZzL21pbml4L2lub2RlLmM6NDgwOnN0YXRpYyBpbnQgbWluaXhfd3JpdGVwYWdlcyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcXG5mcy9taW5peC9pbm9kZS5jLTQ4MS1cXHRcXHRzdHJ1Y3Qgd3JpdGViYWNrX2NvbnRyb2wgKndiYylcXG4tLVxcbmZzL21pbml4L2lub2RlLmMtNDkwLVxcbmZzL21pbml4L2lub2RlLmM6NDkxOnN0YXRpYyBpbnQgbWluaXhfcmVhZF9mb2xpbyhzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IGZvbGlvICpmb2xpbylcXG5mcy9taW5peC9pbm9kZS5jLTQ5Mi17XFxuLS1cXG5mcy9taW5peC9pbm9kZS5jLTQ5OS0vKiBUaGUgb2xkIG1pbml4X3JlYWRfZm9saW8sIHByZXNlcnZlZCBmb3IgZGlyZWN0b3J5IG9wZXJhdGlvbnMuICovXFxuZnMvbWluaXgvaW5vZGUuYzo1MDA6c3RhdGljIGludCBtaW5peF9ibG9ja19yZWFkX2ZvbGlvKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbmZzL21pbml4L2lub2RlLmMtNTAxLXtcXG4tLVxcbmZzL21pbml4L2lub2RlLmMtNTA0LVxcbmZzL21pbml4L2lub2RlLmM6NTA1OnN0YXRpYyB2b2lkIG1pbml4X3JlYWRhaGVhZChzdHJ1Y3QgcmVhZGFoZWFkX2NvbnRyb2wgKnJhYylcXG5mcy9taW5peC9pbm9kZS5jLTUwNi17XFxuLS1cXG5mcy9taW5peC9pbm9kZS5jLTUxMS1cXG5mcy9taW5peC9pbm9kZS5jOjUxMjppbnQgbWluaXhfcHJlcGFyZV9jaHVuayhzdHJ1Y3QgZm9saW8gKmZvbGlvLCBsb2ZmX3QgcG9zLCB1bnNpZ25lZCBsZW4pXFxuZnMvbWluaXgvaW5vZGUuYy01MTMte1xcbi0tXFxuZnMvbWluaXgvaW5vZGUuYy01MTYtXFxuZnMvbWluaXgvaW5vZGUuYzo1MTc6c3RhdGljIHZvaWQgbWluaXhfd3JpdGVfZmFpbGVkKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBsb2ZmX3QgdG8pXFxuZnMvbWluaXgvaW5vZGUuYy01MTgte1xcbi0tXFxuZnMvbWluaXgvaW5vZGUuYy01MjYtXFxuZnMvbWluaXgvaW5vZGUuYzo1Mjc6c3RhdGljIGludCBtaW5peF93cml0ZV9iZWdpbihjb25zdCBzdHJ1Y3Qga2lvY2IgKmlvY2IsXFxuZnMvbWluaXgvaW5vZGUuYy01MjgtXFx0XFx0XFx0ICAgICBzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcXG4tLVxcbmZzL21pbml4L2lub2RlLmMtNTQwLVxcbmZzL21pbml4L2lub2RlLmM6NTQxOnN0YXRpYyBzZWN0b3JfdCBtaW5peF9ibWFwKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBzZWN0b3JfdCBibG9jaylcXG5mcy9taW5peC9pbm9kZS5jLTU0Mi17XFxuLS1cXG5mcy9taW5peC9pbm9kZS5jPTU3NT1zdGF0aWMgY29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgbWluaXhfc3ltbGlua19pbm9kZV9vcGVyYXRpb25zID0ge1xcbi0tXFxuZnMvbWluaXgvaW5vZGUuYy01ODAtXFxuZnMvbWluaXgvaW5vZGUuYzo1ODE6dm9pZCBtaW5peF9zZXRfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSwgZGV2X3QgcmRldilcXG5mcy9taW5peC9pbm9kZS5jLTU4Mi17XFxuLS1cXG5mcy9taW5peC9pbm9kZS5jPTczMT1zdGF0aWMgc3RydWN0IGJ1ZmZlcl9oZWFkICogVjJfbWluaXhfdXBkYXRlX2lub2RlKHN0cnVjdCBpbm9kZSAqIGlub2RlKVxcbi0tXFxuZnMvbWluaXgvaW5vZGUuYy03NTYtXFxuZnMvbWluaXgvaW5vZGUuYzo3NTc6c3RhdGljIGludCBtaW5peF93cml0ZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3Qgd3JpdGViYWNrX2NvbnRyb2wgKndiYylcXG5mcy9taW5peC9pbm9kZS5jLTc1OC17XFxuLS1cXG5mcy9taW5peC9pbm9kZS5jLTc3OS1cXG5mcy9taW5peC9pbm9kZS5jOjc4MDppbnQgbWluaXhfZ2V0YXR0cihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgY29uc3Qgc3RydWN0IHBhdGggKnBhdGgsXFxuZnMvbWluaXgvaW5vZGUuYy03ODEtXFx0XFx0ICBzdHJ1Y3Qga3N0YXQgKnN0YXQsIHUzMiByZXF1ZXN0X21hc2ssIHVuc2lnbmVkIGludCBmbGFncylcXG4tLVxcbmZzL21pbml4L2lub2RlLmMtNzk3LSAqL1xcbmZzL21pbml4L2lub2RlLmM6Nzk4OnZvaWQgbWluaXhfdHJ1bmNhdGUoc3RydWN0IGlub2RlICogaW5vZGUpXFxuZnMvbWluaXgvaW5vZGUuYy03OTkte1xcbi0tXFxuZnMvbWluaXgvaW9tYXAuYy0xNC0gKi9cXG5mcy9taW5peC9pb21hcC5jOjE1OnN0YXRpYyBpbnQgbWluaXhfaW9tYXBfYmVnaW4oc3RydWN0IGlub2RlICppbm9kZSwgbG9mZl90IG9mZnNldCwgbG9mZl90IGxlbmd0aCxcXG5mcy9taW5peC9pb21hcC5jLTE2LVxcdHVuc2lnbmVkIGludCBmbGFncywgc3RydWN0IGlvbWFwICppb21hcCwgc3RydWN0IGlvbWFwICpzcmNtYXApXFxuLS1cXG5mcy9taW5peC9pb21hcC5jLTEwOS0gKi9cXG5mcy9taW5peC9pb21hcC5jOjExMDpzdGF0aWMgaW50IG1pbml4X2lvbWFwX2VuZChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb2ZmX3Qgb2Zmc2V0LCBsb2ZmX3QgbGVuZ3RoLFxcbmZzL21pbml4L2lvbWFwLmMtMTExLVxcdHNzaXplX3Qgd3JpdHRlbiwgdW5zaWduZWQgaW50IGZsYWdzLCBzdHJ1Y3QgaW9tYXAgKmlvbWFwKVxcbi0tXFxuZnMvbWluaXgvbWluaXguaD01Mz1zdHJ1Y3QgaW5vZGUgKm1pbml4X25ld19pbm9kZShjb25zdCBzdHJ1Y3QgaW5vZGUgKiwgdW1vZGVfdCk7XFxuZnMvbWluaXgvbWluaXguaDo1NDp2b2lkIG1pbml4X2ZyZWVfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSk7XFxuZnMvbWluaXgvbWluaXguaC01NS11bnNpZ25lZCBsb25nIG1pbml4X2NvdW50X2ZyZWVfaW5vZGVzKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpO1xcbmZzL21pbml4L21pbml4Lmg6NTY6aW50IG1pbml4X25ld19ibG9jayhzdHJ1Y3QgaW5vZGUgKmlub2RlKTtcXG5mcy9taW5peC9taW5peC5oOjU3OnZvaWQgbWluaXhfZnJlZV9ibG9jayhzdHJ1Y3QgaW5vZGUgKmlub2RlLCB1bnNpZ25lZCBsb25nIGJsb2NrKTtcXG5mcy9taW5peC9taW5peC5oLTU4LXVuc2lnbmVkIGxvbmcgbWluaXhfY291bnRfZnJlZV9ibG9ja3Moc3RydWN0IHN1cGVyX2Jsb2NrICpzYik7XFxuZnMvbWluaXgvbWluaXguaDo1OTppbnQgbWluaXhfZ2V0YXR0cihzdHJ1Y3QgbW50X2lkbWFwICosIGNvbnN0IHN0cnVjdCBwYXRoICosXFxuZnMvbWluaXgvbWluaXguaC02MC1cXHRcXHRzdHJ1Y3Qga3N0YXQgKiwgdTMyLCB1bnNpZ25lZCk7XFxuZnMvbWluaXgvbWluaXguaDo2MTppbnQgbWluaXhfc2V0YXR0cihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxcbmZzL21pbml4L21pbml4LmgtNjItXFx0c3RydWN0IGlhdHRyICphdHRyKTtcXG5mcy9taW5peC9taW5peC5oOjYzOmludCBtaW5peF9wcmVwYXJlX2NodW5rKHN0cnVjdCBmb2xpbyAqZm9saW8sIGxvZmZfdCBwb3MsIHVuc2lnbmVkIGxlbik7XFxuZnMvbWluaXgvbWluaXguaC02NC1zdHJ1Y3QgbWFwcGluZ19tZXRhZGF0YV9iaHMgKm1pbml4X2dldF9tZXRhZGF0YV9iaHMoc3RydWN0IGlub2RlICppbm9kZSk7XFxuZnMvbWluaXgvbWluaXguaDo2NTppbnQgbWluaXhfZnN5bmMoc3RydWN0IGZpbGUgKmZpbGUsIGxvZmZfdCBzdGFydCwgbG9mZl90IGVuZCwgaW50IGRhdGFzeW5jKTtcXG5mcy9taW5peC9taW5peC5oLTY2LVxcbi0tXFxuZnMvbWluaXgvbWluaXguaD03OD1zdHJ1Y3QgbWluaXhfZGlyX2VudHJ5ICptaW5peF9maW5kX2VudHJ5KHN0cnVjdCBkZW50cnkgKiwgc3RydWN0IGZvbGlvICoqKTtcXG5mcy9taW5peC9taW5peC5oOjc5OmludCBtaW5peF9hZGRfbGluayhzdHJ1Y3QgZGVudHJ5Kiwgc3RydWN0IGlub2RlKik7XFxuZnMvbWluaXgvbWluaXguaDo4MDppbnQgbWluaXhfZGVsZXRlX2VudHJ5KHN0cnVjdCBtaW5peF9kaXJfZW50cnkgKiwgc3RydWN0IGZvbGlvICopO1xcbmZzL21pbml4L21pbml4Lmg6ODE6aW50IG1pbml4X21ha2VfZW1wdHkoc3RydWN0IGlub2RlKiwgc3RydWN0IGlub2RlKik7XFxuZnMvbWluaXgvbWluaXguaDo4MjppbnQgbWluaXhfZW1wdHlfZGlyKHN0cnVjdCBpbm9kZSopO1xcbmZzL21pbml4L21pbml4Lmg6ODM6aW50IG1pbml4X3NldF9saW5rKHN0cnVjdCBtaW5peF9kaXJfZW50cnkgKmRlLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbmZzL21pbml4L21pbml4LmgtODQtXFx0XFx0c3RydWN0IGlub2RlICppbm9kZSk7XFxuLS1cXG5mcy9taW5peC9taW5peC5oPTg4PXN0cnVjdCBtaW5peF9kaXJfZW50cnkgKm1pbml4X2RvdGRvdChzdHJ1Y3QgaW5vZGUqLCBzdHJ1Y3QgZm9saW8gKiopO1xcbmZzL21pbml4L21pbml4Lmg6ODk6aW5vX3QgbWluaXhfaW5vZGVfYnlfbmFtZShzdHJ1Y3QgZGVudHJ5Kik7XFxuZnMvbWluaXgvbWluaXguaC05MC1cXG4tLVxcbmZzL21pbml4L25hbWVpLmM9MjQ9c3RhdGljIHN0cnVjdCBkZW50cnkgKm1pbml4X2xvb2t1cChzdHJ1Y3QgaW5vZGUgKiBkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW5zaWduZWQgaW50IGZsYWdzKVxcbi0tXFxuZnMvbWluaXgvbmFtZWkuYy0zNy1cXG5mcy9taW5peC9uYW1laS5jOjM4OnN0YXRpYyBpbnQgbWluaXhfbWtub2Qoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxcbmZzL21pbml4L25hbWVpLmMtMzktXFx0XFx0ICAgICAgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlLCBkZXZfdCByZGV2KVxcbi0tXFxuZnMvbWluaXgvbmFtZWkuYy01NC1cXG5mcy9taW5peC9uYW1laS5jOjU1OnN0YXRpYyBpbnQgbWluaXhfdG1wZmlsZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXFxuZnMvbWluaXgvbmFtZWkuYy01Ni1cXHRcXHRcXHQgc3RydWN0IGZpbGUgKmZpbGUsIHVtb2RlX3QgbW9kZSlcXG4tLVxcbmZzL21pbml4L25hbWVpLmMtNjctXFxuZnMvbWluaXgvbmFtZWkuYzo2ODpzdGF0aWMgaW50IG1pbml4X2NyZWF0ZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXFxuZnMvbWluaXgvbmFtZWkuYy02OS1cXHRcXHRcXHRzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSwgYm9vbCBleGNsKVxcbi0tXFxuZnMvbWluaXgvbmFtZWkuYz0xMDk9c3RhdGljIGludCBfX3BhZ2Vfc3ltbGluayhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBjb25zdCBjaGFyICpzeW1uYW1lLCBpbnQgbGVuKVxcbi0tXFxuZnMvbWluaXgvbmFtZWkuYy0xNjgtXFxuZnMvbWluaXgvbmFtZWkuYzoxNjk6c3RhdGljIGludCBtaW5peF9zeW1saW5rKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcXG5mcy9taW5peC9uYW1laS5jLTE3MC1cXHRcXHRcXHQgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBjb25zdCBjaGFyICpzeW1uYW1lKVxcbi0tXFxuZnMvbWluaXgvbmFtZWkuYy0xOTItXFxuZnMvbWluaXgvbmFtZWkuYzoxOTM6c3RhdGljIGludCBtaW5peF9saW5rKHN0cnVjdCBkZW50cnkgKiBvbGRfZGVudHJ5LCBzdHJ1Y3QgaW5vZGUgKiBkaXIsXFxuZnMvbWluaXgvbmFtZWkuYy0xOTQtXFx0c3RydWN0IGRlbnRyeSAqZGVudHJ5KVxcbi0tXFxuZnMvbWluaXgvbmFtZWkuYz0yMDQ9c3RhdGljIHN0cnVjdCBkZW50cnkgKm1pbml4X21rZGlyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcXG4tLVxcbmZzL21pbml4L25hbWVpLmMtMjM3LVxcbmZzL21pbml4L25hbWVpLmM6MjM4OnN0YXRpYyBpbnQgbWluaXhfdW5saW5rKHN0cnVjdCBpbm9kZSAqIGRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5KVxcbmZzL21pbml4L25hbWVpLmMtMjM5LXtcXG4tLVxcbmZzL21pbml4L25hbWVpLmMtMjYyLVxcbmZzL21pbml4L25hbWVpLmM6MjYzOnN0YXRpYyBpbnQgbWluaXhfcm1kaXIoc3RydWN0IGlub2RlICogZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpXFxuZnMvbWluaXgvbmFtZWkuYy0yNjQte1xcbi0tXFxuZnMvbWluaXgvbmFtZWkuYy0yODYtXFxuZnMvbWluaXgvbmFtZWkuYzoyODc6c3RhdGljIGludCBtaW5peF9yZW5hbWUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXFxuZnMvbWluaXgvbmFtZWkuYy0yODgtXFx0XFx0XFx0c3RydWN0IGlub2RlICpvbGRfZGlyLCBzdHJ1Y3QgZGVudHJ5ICpvbGRfZGVudHJ5LFxcbi0tXFxuZnMvbWluaXgvbmFtZWkuYy0zNzMtLyogc3RyYWlnaHQgdXAgdGhpZXZlcnkgaGVyZTsgc3RvbGVuIHZlcmJhdGltIGZyb20gZXh0NF9nZXRfbGluayAqL1xcbmZzL21pbml4L25hbWVpLmM6Mzc0OnN0YXRpYyB2b2lkIG1pbml4X2ZyZWVfbGluayh2b2lkICpiaClcXG5mcy9taW5peC9uYW1laS5jLTM3NS17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI4VDA1OjMzOjEzLjk5MTI2NTg4NVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEyMjM3NTE2NDM2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlJlZmluaW5nIHRoZSBNSU5JWCBGaWxlc3lzdGVtIFN5bWJvbCBMaXN0KipcblxuT2theSwgbGV0J3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSd2ZSBnb3QgdGhlIHJlbGV2YW50IHN5bWJvbHMgbmFpbGVkIGRvd24gZm9yIHRoaXMgTUlOSVggZmlsZXN5c3RlbSBwYXRjaC4gTXkgaW5pdGlhbCBsaXN0IGluY2x1ZGVzOiBgbWluaXhfZGlvX3JlYWRfaXRlcmAsIGBtaW5peF9kaW9fd3JpdGVfaXRlcmAsIGBtaW5peF9kaW9fd3JpdGVfZW5kX2lvYCwgYG1pbml4X2ZpbGVfcmVhZF9pdGVyYCwgYG1pbml4X2ZpbGVfd3JpdGVfaXRlcmAsIGBtaW5peF9pb21hcF9iZWdpbmAsIGBtaW5peF9pb21hcF9lbmRgLCBgbWluaXhfd3JpdGViYWNrX3JhbmdlYCwgYG1pbml4X3dyaXRlcGFnZXNgLCBgbWluaXhfcmVhZF9mb2xpb2AsIGBtaW5peF9yZWFkYWhlYWRgLCBgbWluaXhfYm1hcGAsIGBfX3BhZ2Vfc3ltbGlua2AsIGBtaW5peF9nZXRfbGlua2AsIGFuZCBgbWluaXhfZnJlZV9saW5rYC5cblxuRmlyc3QsIEkgbmVlZCB0byB2ZXJpZnkgd2hldGhlciBgbWluaXhfaW9tYXBfYmVnaW5gIGFuZCBgbWluaXhfaW9tYXBfZW5kYCBhcmUgZXhwb3J0ZWQgb3Igc3RhdGljLiBUdXJucyBvdXQgdGhleSBhcmUgc3RhdGljIHdpdGhpbiBgZnMvbWluaXgvaW9tYXAuY2AsIHdoaWNoIGlzIGluY2x1ZGVkIGluIGBpdHJlZV92MS5jYCBhbmQgYGl0cmVlX3YyLmNgLiAgQWhhISBUaGF0IG1lYW5zIGBWMV9taW5peF9pb21hcF9iZWdpbmAgYW5kIGBWMl9taW5peF9pb21hcF9iZWdpbmAgYXJlIHRoZSBleHBvcnRlZCB2ZXJzaW9uczsgSSBuZWVkIHRvIGFkZCB0aGVtIHRvIHRoZSBsaXN0LCB3aGljaCB3aWxsIGdpdmU6IGBWMV9taW5peF9pb21hcF9iZWdpbmAgYW5kIGBWMl9taW5peF9pb21hcF9iZWdpbmAuXG5cbk5leHQsIEknbGwgZ28gdGhyb3VnaCB0aGUgb3RoZXJzIHRvIGNvbmZpcm06XG4qICAgYG1pbml4X3dyaXRlYmFja19yYW5nZWAgYW5kIGBtaW5peF93cml0ZXBhZ2VzYCBhcmUgc3RhdGljIGluIGBmcy9taW5peC9pbm9kZS5jYC5cbiogICBgbWluaXhfcmVhZF9mb2xpb2AgYW5kIGBtaW5peF9yZWFkYWhlYWRgIGFyZSBzdGF0aWMgaW4gYGZzL21pbml4L2lub2RlLmNgLlxuKiAgIGBtaW5peF9ibWFwYCBpcyBzdGF0aWMgaW4gYGZzL21pbml4L2lub2RlLmNgLlxuKiAgIGBfX3BhZ2Vfc3ltbGlua2AgaXMgc3RhdGljIGluIGBmcy9taW5peC9uYW1laS5jYC5cbiogICBgbWluaXhfZ2V0X2xpbmtgIGlzIGV4cG9ydGVkIGluIGBmcy9taW5peC9uYW1laS5jYC5cbiogICBgbWluaXhfZnJlZV9saW5rYCBpcyBzdGF0aWMgaW4gYGZzL21pbml4L25hbWVpLmNgLlxuKiAgIGBtaW5peF9kaW9fcmVhZF9pdGVyYCwgYG1pbml4X2Rpb193cml0ZV9pdGVyYCwgYG1pbml4X2Rpb193cml0ZV9lbmRfaW9gLCBgbWluaXhfZmlsZV9yZWFkX2l0ZXJgLCBhbmQgYG1pbml4X2ZpbGVfd3JpdGVfaXRlcmAgYXJlIGFsbCBzdGF0aWMgaW4gYGZzL21pbml4L2ZpbGUuY2AuXG5cbldpdGggYWxsIHRoaXMgaW5mb3JtYXRpb24sIEkgY2FuIG5vdyByZWZpbmUgbXkgbGlzdDpcblxuKiAgIGBtaW5peF9kaW9fcmVhZF9pdGVyYFxuKiAgIGBtaW5peF9kaW9fd3JpdGVfaXRlcmBcbiogICBgbWluaXhfZGlvX3dyaXRlX2VuZF9pb2BcbiogICBgbWluaXhfZmlsZV9yZWFkX2l0ZXJgXG4qICAgYG1pbml4X2ZpbGVfd3JpdGVfaXRlcmBcbiogICBgbWluaXhfaW9tYXBfYmVnaW5gXG4qICAgYG1pbml4X2lvbWFwX2VuZGBcbiogICBgVjFfbWluaXhfaW9tYXBfYmVnaW5gXG4qICAgYFYyX21pbml4X2lvbWFwX2JlZ2luYFxuKiAgIGBtaW5peF93cml0ZWJhY2tfcmFuZ2VgXG4qICAgYG1pbml4X3dyaXRlcGFnZXNgXG4qICAgYG1pbml4X3JlYWRfZm9saW9gXG4qICAgYG1pbml4X3JlYWRhaGVhZGBcbiogICBgbWluaXhfYm1hcGBcbiogICBgX19wYWdlX3N5bWxpbmtgXG4qICAgYG1pbml4X2dldF9saW5rYFxuKiAgIGBtaW5peF9mcmVlX2xpbmtgXG5cblRoZSBjb25maWd1cmF0aW9uIGlzIGNsZWFybHkgYE1JTklYX0ZTYCwgd2hpY2ggaXMgdGhlIGNvcnJlY3Qgc3ltYm9sLlxuXG5UaGUgcmF0aW9uYWxlIGlzIHRoaXMgcGF0Y2ggaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0byB0aGUgTUlOSVggZmlsZXN5c3RlbSwgYWRkaW5nIGlvbWFwLWJhc2VkIGRpcmVjdCBJL08gYW5kIGJ1ZmZlcmVkIEkvTy4gVGhpcyBtZWFucyBjaGFuZ2VzIHRvIHRoZSBjb3JlIHJlYWQvd3JpdGUgcGF0aHMsIGJsb2NrIG1hcHBpbmcsIGFuZCBzeW1saW5rIGhhbmRsaW5nLCBzbyB0aGUgaWRlbnRpZmllZCBzeW1ib2xzIGFyZSBjZW50cmFsIHRvIHRoaXMuIEkndmUgbm93IGdvdCBhIGdvb2Qgc2V0IG9mIHN5bWJvbHMgdG8gY2hlY2suICBUaW1lIHRvIGNhbGwgc2V0LXJlc3VsdHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4NTE5LCJPdXRwdXRUb2tlbnMiOjI2MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExMzIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjhUMDU6MzM6MjYuMjI4Nzg2NTQxWiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4ODA2MjE1MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTUlOSVhfRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJtaW5peF9kaW9fcmVhZF9pdGVyXCIsXG4gICAgXCJtaW5peF9kaW9fd3JpdGVfaXRlclwiLFxuICAgIFwibWluaXhfZGlvX3dyaXRlX2VuZF9pb1wiLFxuICAgIFwibWluaXhfZmlsZV9yZWFkX2l0ZXJcIixcbiAgICBcIm1pbml4X2ZpbGVfd3JpdGVfaXRlclwiLFxuICAgIFwibWluaXhfaW9tYXBfYmVnaW5cIixcbiAgICBcIm1pbml4X2lvbWFwX2VuZFwiLFxuICAgIFwiVjFfbWluaXhfaW9tYXBfYmVnaW5cIixcbiAgICBcIlYyX21pbml4X2lvbWFwX2JlZ2luXCIsXG4gICAgXCJtaW5peF93cml0ZWJhY2tfcmFuZ2VcIixcbiAgICBcIm1pbml4X3dyaXRlcGFnZXNcIixcbiAgICBcIm1pbml4X3JlYWRfZm9saW9cIixcbiAgICBcIm1pbml4X3JlYWRhaGVhZFwiLFxuICAgIFwibWluaXhfYm1hcFwiLFxuICAgIFwiX19wYWdlX3N5bWxpbmtcIixcbiAgICBcIm1pbml4X2dldF9saW5rXCIsXG4gICAgXCJtaW5peF9mcmVlX2xpbmtcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbXBsZW1lbnRzIGlvbWFwLWJhc2VkIGRpcmVjdCBJL08gYW5kIGJ1ZmZlcmVkIEkvTyBmb3IgdGhlIG1pbml4IGZpbGVzeXN0ZW0sIHdoaWNoIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gdGhlIGNvcmUgZmlsZXN5c3RlbSBsb2dpYy4gSXQgbW9kaWZpZXMgcmVhZC93cml0ZSBwYXRocywgYmxvY2sgbWFwcGluZywgYW5kIHN5bWxpbmsgaGFuZGxpbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTUlOSVhfRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJtaW5peF9kaW9fcmVhZF9pdGVyXCIsXG4gICAgXCJtaW5peF9kaW9fd3JpdGVfaXRlclwiLFxuICAgIFwibWluaXhfZGlvX3dyaXRlX2VuZF9pb1wiLFxuICAgIFwibWluaXhfZmlsZV9yZWFkX2l0ZXJcIixcbiAgICBcIm1pbml4X2ZpbGVfd3JpdGVfaXRlclwiLFxuICAgIFwibWluaXhfaW9tYXBfYmVnaW5cIixcbiAgICBcIm1pbml4X2lvbWFwX2VuZFwiLFxuICAgIFwiVjFfbWluaXhfaW9tYXBfYmVnaW5cIixcbiAgICBcIlYyX21pbml4X2lvbWFwX2JlZ2luXCIsXG4gICAgXCJtaW5peF93cml0ZWJhY2tfcmFuZ2VcIixcbiAgICBcIm1pbml4X3dyaXRlcGFnZXNcIixcbiAgICBcIm1pbml4X3JlYWRfZm9saW9cIixcbiAgICBcIm1pbml4X3JlYWRhaGVhZFwiLFxuICAgIFwibWluaXhfYm1hcFwiLFxuICAgIFwiX19wYWdlX3N5bWxpbmtcIixcbiAgICBcIm1pbml4X2dldF9saW5rXCIsXG4gICAgXCJtaW5peF9mcmVlX2xpbmtcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbXBsZW1lbnRzIGlvbWFwLWJhc2VkIGRpcmVjdCBJL08gYW5kIGJ1ZmZlcmVkIEkvTyBmb3IgdGhlIG1pbml4IGZpbGVzeXN0ZW0sIHdoaWNoIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gdGhlIGNvcmUgZmlsZXN5c3RlbSBsb2dpYy4gSXQgbW9kaWZpZXMgcmVhZC93cml0ZSBwYXRocywgYmxvY2sgbWFwcGluZywgYW5kIHN5bWxpbmsgaGFuZGxpbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workfloww57cg[0].run-triage(0) Phase: Succeeded StartedAt: 2026-06-28 05:24:47 +0000 UTC FinishedAt: 2026-06-28 05:33:28 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "780d569e6c4b422290f5cba319eb904b355d64be", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MINIX_FS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "780d569e6c4b422290f5cba319eb904b355d64be", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MINIX_FS" ], "series_id": "3b663c96-cf07-46e0-9b8d-785fe615029d" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "minix_dio_read_iter", "minix_dio_write_iter", "minix_dio_write_end_io", "minix_file_read_iter", "minix_file_write_iter", "minix_iomap_begin", "minix_iomap_end", "V1_minix_iomap_begin", "V2_minix_iomap_begin", "minix_writeback_range", "minix_writepages", "minix_read_folio", "minix_readahead", "minix_bmap", "__page_symlink", "minix_get_link", "minix_free_link" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI4IDA1OjMzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01JTklYX0ZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bWluaXhfZGlvX3JlYWRfaXRlciYjMzQ7LAogICAgJiMzNDttaW5peF9kaW9fd3JpdGVfaXRlciYjMzQ7LAogICAgJiMzNDttaW5peF9kaW9fd3JpdGVfZW5kX2lvJiMzNDssCiAgICAmIzM0O21pbml4X2ZpbGVfcmVhZF9pdGVyJiMzNDssCiAgICAmIzM0O21pbml4X2ZpbGVfd3JpdGVfaXRlciYjMzQ7LAogICAgJiMzNDttaW5peF9pb21hcF9iZWdpbiYjMzQ7LAogICAgJiMzNDttaW5peF9pb21hcF9lbmQmIzM0OywKICAgICYjMzQ7VjFfbWluaXhfaW9tYXBfYmVnaW4mIzM0OywKICAgICYjMzQ7VjJfbWluaXhfaW9tYXBfYmVnaW4mIzM0OywKICAgICYjMzQ7bWluaXhfd3JpdGViYWNrX3JhbmdlJiMzNDssCiAgICAmIzM0O21pbml4X3dyaXRlcGFnZXMmIzM0OywKICAgICYjMzQ7bWluaXhfcmVhZF9mb2xpbyYjMzQ7LAogICAgJiMzNDttaW5peF9yZWFkYWhlYWQmIzM0OywKICAgICYjMzQ7bWluaXhfYm1hcCYjMzQ7LAogICAgJiMzNDtfX3BhZ2Vfc3ltbGluayYjMzQ7LAogICAgJiMzNDttaW5peF9nZXRfbGluayYjMzQ7LAogICAgJiMzNDttaW5peF9mcmVlX2xpbmsmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW1wbGVtZW50cyBpb21hcC1iYXNlZCBkaXJlY3QgSS9PIGFuZCBidWZmZXJlZCBJL08gZm9yIHRoZSBtaW5peCBmaWxlc3lzdGVtLCB3aGljaCBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRvIHRoZSBjb3JlIGZpbGVzeXN0ZW0gbG9naWMuIEl0IG1vZGlmaWVzIHJlYWQvd3JpdGUgcGF0aHMsIGJsb2NrIG1hcHBpbmcsIGFuZCBzeW1saW5rIGhhbmRsaW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI4IDA1OjMzPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgYTQ0ZWVmODZmZGE0YjczNzU3NmMyODNhZDA1ZTQ4ZDkxYmJiMjFhNVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTdW4gSnVuIDI4IDA1OjMzOjAyIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2ZzL21pbml4L2ZpbGUuYyBiL2ZzL21pbml4L2ZpbGUuY1xuaW5kZXggODZlNTk0M2NkMmZmNzQuLmIwN2M4NTNmYTQzYWJjIDEwMDY0NFxuLS0tIGEvZnMvbWluaXgvZmlsZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9taW5peC9maWxlLmNcbkBAIC0xNywyMSAmIzQzOzE3LDE2NiBAQCBpbnQgbWluaXhfZnN5bmMoc3RydWN0IGZpbGUgKmZpbGUsIGxvZmZfdCBzdGFydCwgbG9mZl90IGVuZCwgaW50IGRhdGFzeW5jKVxuIFx0XHRcdHN0YXJ0LCBlbmQsIGRhdGFzeW5jKTtcbiB9XG4gXG4mIzQzO3N0YXRpYyBzc2l6ZV90IG1pbml4X2Rpb19yZWFkX2l0ZXIoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKnRvKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGlub2RlICppbm9kZSA9IGlvY2ItXHUwMDNla2lfZmlscC1cdTAwM2VmX21hcHBpbmctXHUwMDNlaG9zdDtcbiYjNDM7XHRzc2l6ZV90IHJldDtcbiYjNDM7XG4mIzQzO1x0aW5vZGVfbG9ja19zaGFyZWQoaW5vZGUpO1xuJiM0MztcbiYjNDM7XHRjb25zdCBzdHJ1Y3QgaW9tYXBfb3BzICpvcHMgPSBtaW5peF9pb21hcF9vcHNfdmVyKGlub2RlKTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gaW9tYXBfZGlvX3J3KGlvY2IsIHRvLCBvcHMsIE5VTEwsIDAsIE5VTEwsIDApO1xuJiM0MztcdGlub2RlX3VubG9ja19zaGFyZWQoaW5vZGUpO1xuJiM0MztcdHJldHVybiByZXQ7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgbWluaXhfZGlvX3dyaXRlX2VuZF9pbyhzdHJ1Y3Qga2lvY2IgKmlvY2IsIHNzaXplX3Qgc2l6ZSwgaW50IGVycm9yLFxuJiM0MztcdFx0dW5zaWduZWQgaW50IGZsYWdzKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGlub2RlICppbm9kZSA9IGZpbGVfaW5vZGUoaW9jYi1cdTAwM2VraV9maWxwKTtcbiYjNDM7XHRsb2ZmX3QgcG9zID0gaW9jYi1cdTAwM2VraV9wb3M7XG4mIzQzO1xuJiM0MztcdGlmIChlcnJvcilcbiYjNDM7XHRcdHJldHVybiBlcnJvcjtcbiYjNDM7XG4mIzQzO1x0cG9zICYjNDM7PSBzaXplO1xuJiM0MztcdGlmIChzaXplIFx1MDAyNlx1MDAyNiBwb3MgXHUwMDNlIGlfc2l6ZV9yZWFkKGlub2RlKSkge1xuJiM0MztcdFx0aV9zaXplX3dyaXRlKGlub2RlLCBwb3MpO1xuJiM0MztcdFx0bWFya19pbm9kZV9kaXJ0eShpbm9kZSk7XG4mIzQzO1x0fVxuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IGlvbWFwX2Rpb19vcHMgbWluaXhfZGlvX3dyaXRlX29wcyA9IHtcbiYjNDM7XHQuZW5kX2lvID0gbWluaXhfZGlvX3dyaXRlX2VuZF9pbyxcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO3N0YXRpYyBzc2l6ZV90IG1pbml4X2Rpb193cml0ZV9pdGVyKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICpmcm9tKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGlub2RlICppbm9kZSA9IGlvY2ItXHUwMDNla2lfZmlscC1cdTAwM2VmX21hcHBpbmctXHUwMDNlaG9zdDtcbiYjNDM7XHRzc2l6ZV90IHJldDtcbiYjNDM7XHR1bnNpZ25lZCBpbnQgZmxhZ3MgPSAwO1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgYmxvY2tzaXplID0gaW5vZGUtXHUwMDNlaV9zYi1cdTAwM2VzX2Jsb2Nrc2l6ZTtcbiYjNDM7XG4mIzQzO1x0aW5vZGVfbG9jayhpbm9kZSk7XG4mIzQzO1x0cmV0ID0gZ2VuZXJpY193cml0ZV9jaGVja3MoaW9jYiwgZnJvbSk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2M9IDApXG4mIzQzO1x0XHRnb3RvIG91dF91bmxvY2s7XG4mIzQzO1xuJiM0MztcdHJldCA9IGtpb2NiX21vZGlmaWVkKGlvY2IpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRnb3RvIG91dF91bmxvY2s7XG4mIzQzO1xuJiM0MztcdGlmIChpb2NiLVx1MDAzZWtpX3BvcyAmIzQzOyBpb3ZfaXRlcl9jb3VudChmcm9tKSBcdTAwM2UgaV9zaXplX3JlYWQoaW5vZGUpIHx8XG4mIzQzO1x0XHQhSVNfQUxJR05FRChpb2NiLVx1MDAzZWtpX3BvcyB8IGlvdl9pdGVyX2FsaWdubWVudChmcm9tKSwgYmxvY2tzaXplKSlcbiYjNDM7XHRcdGZsYWdzIHw9IElPTUFQX0RJT19GT1JDRV9XQUlUO1xuJiM0MztcbiYjNDM7XHRjb25zdCBzdHJ1Y3QgaW9tYXBfb3BzICpvcHMgPSBtaW5peF9pb21hcF9vcHNfdmVyKGlub2RlKTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gaW9tYXBfZGlvX3J3KGlvY2IsIGZyb20sIG9wcyxcbiYjNDM7XHRcdFx1MDAyNm1pbml4X2Rpb193cml0ZV9vcHMsIGZsYWdzLCBOVUxMLCAwKTtcbiYjNDM7XHRpZiAocmV0ID09IC1FTk9UQkxLKVxuJiM0MztcdFx0cmV0ID0gMDsgLyogZmFsbGJhY2sgdG8gYnVmZmVyZWQgKi9cbiYjNDM7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2U9IDAgXHUwMDI2XHUwMDI2IGlvdl9pdGVyX2NvdW50KGZyb20pKSB7XG4mIzQzO1x0XHRsb2ZmX3QgcG9zO1xuJiM0MztcdFx0bG9mZl90IGVuZGJ5dGU7XG4mIzQzO1x0XHRzc2l6ZV90IHN0YXR1cztcbiYjNDM7XG4mIzQzO1x0XHRpb2NiLVx1MDAzZWtpX2ZsYWdzIFx1MDAyNj0gfklPQ0JfRElSRUNUO1xuJiM0MztcdFx0cG9zID0gaW9jYi1cdTAwM2VraV9wb3M7XG4mIzQzO1x0XHRzdGF0dXMgPSBpb21hcF9maWxlX2J1ZmZlcmVkX3dyaXRlKGlvY2IsIGZyb20sIG9wcyxcbiYjNDM7XHRcdFx0TlVMTCwgTlVMTCk7XG4mIzQzO1x0XHRpZiAodW5saWtlbHkoc3RhdHVzIFx1MDAzYyAwKSkge1xuJiM0MztcdFx0XHRyZXQgPSBzdGF0dXM7XG4mIzQzO1x0XHRcdGdvdG8gb3V0X3VubG9jaztcbiYjNDM7XHRcdH1cbiYjNDM7XG4mIzQzO1x0XHRyZXQgJiM0Mzs9IHN0YXR1cztcbiYjNDM7XHRcdGVuZGJ5dGUgPSBwb3MgJiM0Mzsgc3RhdHVzIC0gMTtcbiYjNDM7XHRcdHN0YXR1cyA9IGZpbGVtYXBfd3JpdGVfYW5kX3dhaXRfcmFuZ2UoaW5vZGUtXHUwMDNlaV9tYXBwaW5nLCBwb3MsIGVuZGJ5dGUpO1xuJiM0MztcdFx0aWYgKCFzdGF0dXMpIHtcbiYjNDM7XHRcdFx0aW52YWxpZGF0ZV9tYXBwaW5nX3BhZ2VzKGlub2RlLVx1MDAzZWlfbWFwcGluZyxcbiYjNDM7XHRcdFx0XHRwb3MgXHUwMDNlXHUwMDNlIFBBR0VfU0hJRlQsXG4mIzQzO1x0XHRcdFx0ZW5kYnl0ZSBcdTAwM2VcdTAwM2UgUEFHRV9TSElGVCk7XG4mIzQzO1x0XHRcdGlmIChyZXQgXHUwMDNlIDApXG4mIzQzO1x0XHRcdFx0cmV0ID0gZ2VuZXJpY193cml0ZV9zeW5jKGlvY2IsIHJldCk7XG4mIzQzO1x0XHR9IGVsc2Uge1xuJiM0MztcdFx0XHRyZXQgPSBzdGF0dXM7XG4mIzQzO1x0XHR9XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7b3V0X3VubG9jazpcbiYjNDM7XHRpbm9kZV91bmxvY2soaW5vZGUpO1xuJiM0MztcdHJldHVybiByZXQ7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBzc2l6ZV90IG1pbml4X2ZpbGVfcmVhZF9pdGVyKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICp0bylcbiYjNDM7e1xuJiM0MztcdGlmIChpb2NiLVx1MDAzZWtpX2ZsYWdzIFx1MDAyNiBJT0NCX0RJUkVDVClcbiYjNDM7XHRcdHJldHVybiBtaW5peF9kaW9fcmVhZF9pdGVyKGlvY2IsIHRvKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGdlbmVyaWNfZmlsZV9yZWFkX2l0ZXIoaW9jYiwgdG8pO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgc3NpemVfdCBtaW5peF9maWxlX3dyaXRlX2l0ZXIoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKmZyb20pXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgaW5vZGUgKmlub2RlID0gaW9jYi1cdTAwM2VraV9maWxwLVx1MDAzZWZfbWFwcGluZy1cdTAwM2Vob3N0O1xuJiM0MztcdHNzaXplX3QgcmV0O1xuJiM0MztcbiYjNDM7XHQvKiBtaW5peF9kaW9fd3JpdGVfaXRlciBhbHNvIGxvY2tzIHRoZSBpbm9kZSBhbmQgYXBwZWFycyB0byBkbyB0aGUgc2FtZVxuJiM0MztcdCAqIGdlbmVyYWwgc29ydHMgb2YgY2hlY2tzIGFzIHRoaXMsIHNvIGp1c3QgcmV0dXJuIGRpcmVjdGx5IGZyb20gdGhlcmUuXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKGlvY2ItXHUwMDNla2lfZmxhZ3MgXHUwMDI2IElPQ0JfRElSRUNUKVxuJiM0MztcdFx0cmV0dXJuIG1pbml4X2Rpb193cml0ZV9pdGVyKGlvY2IsIGZyb20pO1xuJiM0MztcbiYjNDM7XHRpbm9kZV9sb2NrKGlub2RlKTtcbiYjNDM7XHRyZXQgPSBnZW5lcmljX3dyaXRlX2NoZWNrcyhpb2NiLCBmcm9tKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYz0gMClcbiYjNDM7XHRcdGdvdG8gdW5sb2NrO1xuJiM0MztcbiYjNDM7XHRyZXQgPSBmaWxlX21vZGlmaWVkKGlvY2ItXHUwMDNla2lfZmlscCk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdGdvdG8gdW5sb2NrO1xuJiM0MztcbiYjNDM7XHRjb25zdCBzdHJ1Y3QgaW9tYXBfb3BzICpvcHMgPSBtaW5peF9pb21hcF9vcHNfdmVyKGlub2RlKTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gaW9tYXBfZmlsZV9idWZmZXJlZF93cml0ZShpb2NiLCBmcm9tLCBvcHMsXG4mIzQzO1x0XHRcdE5VTEwsIE5VTEwpO1xuJiM0MztcbiYjNDM7XHRpZiAocmV0IFx1MDAzZSAwKVxuJiM0MztcdFx0cmV0ID0gZ2VuZXJpY193cml0ZV9zeW5jKGlvY2IsIHJldCk7XG4mIzQzO1xuJiM0Mzt1bmxvY2s6XG4mIzQzO1x0aW5vZGVfdW5sb2NrKGlub2RlKTtcbiYjNDM7XHRyZXR1cm4gcmV0O1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IG1pbml4X2ZpbGVfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlscClcbiYjNDM7e1xuJiM0MztcdGZpbHAtXHUwMDNlZl9tb2RlIHw9IEZNT0RFX0NBTl9PRElSRUNUO1xuJiM0MztcdHJldHVybiBnZW5lcmljX2ZpbGVfb3Blbihpbm9kZSwgZmlscCk7XG4mIzQzO31cbiYjNDM7XG4gLypcbi0gKiBXZSBoYXZlIG1vc3RseSBOVUxMcyBoZXJlOiB0aGUgY3VycmVudCBkZWZhdWx0cyBhcmUgT0sgZm9yXG4tICogdGhlIG1pbml4IGZpbGVzeXN0ZW0uXG4mIzQzOyAqIFdlIHN0aWxsIGhhdmUgc29tZSBOVUxMcyBoZXJlLCBidXQgbm90IGFzIG1hbnkgb2YgdGhlIGN1cnJlbnQgZGVmYXVsdHMgYXJlXG4mIzQzOyAqIHN0aWxsIE9LIGZvciB0aGUgbWluaXggZmlsZXN5c3RlbS5cbiAgKi9cbiYjNDM7XG4gY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBtaW5peF9maWxlX29wZXJhdGlvbnMgPSB7XG4gXHQubGxzZWVrXHRcdD0gZ2VuZXJpY19maWxlX2xsc2Vlayxcbi1cdC5yZWFkX2l0ZXJcdD0gZ2VuZXJpY19maWxlX3JlYWRfaXRlcixcbi1cdC53cml0ZV9pdGVyXHQ9IGdlbmVyaWNfZmlsZV93cml0ZV9pdGVyLFxuJiM0MztcdC5yZWFkX2l0ZXJcdD0gbWluaXhfZmlsZV9yZWFkX2l0ZXIsXG4mIzQzO1x0LndyaXRlX2l0ZXJcdD0gbWluaXhfZmlsZV93cml0ZV9pdGVyLFxuIFx0Lm1tYXBfcHJlcGFyZVx0PSBnZW5lcmljX2ZpbGVfbW1hcF9wcmVwYXJlLFxuJiM0MztcdC5vcGVuXHRcdD0gbWluaXhfZmlsZV9vcGVuLFxuIFx0LmZzeW5jXHRcdD0gbWluaXhfZnN5bmMsXG4gXHQuc3BsaWNlX3JlYWRcdD0gZmlsZW1hcF9zcGxpY2VfcmVhZCxcbiYjNDM7XHQuc3BsaWNlX3dyaXRlXHQ9IGl0ZXJfZmlsZV9zcGxpY2Vfd3JpdGUsXG4gfTtcbiBcbi1zdGF0aWMgaW50IG1pbml4X3NldGF0dHIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXG4tXHRcdFx0IHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGlhdHRyICphdHRyKVxuJiM0MztpbnQgbWluaXhfc2V0YXR0cihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxuJiM0MztcdHN0cnVjdCBpYXR0ciAqYXR0cilcbiB7XG4gXHRzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZF9pbm9kZShkZW50cnkpO1xuIFx0aW50IGVycm9yO1xuZGlmZiAtLWdpdCBhL2ZzL21pbml4L2lub2RlLmMgYi9mcy9taW5peC9pbm9kZS5jXG5pbmRleCBjMzBjYzU5MDY5OGQ2Zi4uYjExM2M0NDc2NGZmOTUgMTAwNjQ0XG4tLS0gYS9mcy9taW5peC9pbm9kZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9taW5peC9pbm9kZS5jXG5AQCAtNDM2LDcgJiM0Mzs0MzYsMzIgQEAgc3RhdGljIGludCBtaW5peF9zdGF0ZnMoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3Qga3N0YXRmcyAqYnVmKVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuLXN0YXRpYyBpbnQgbWluaXhfZ2V0X2Jsb2NrKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHNlY3Rvcl90IGJsb2NrLFxuJiM0MztzdGF0aWMgc3NpemVfdCBtaW5peF93cml0ZWJhY2tfcmFuZ2Uoc3RydWN0IGlvbWFwX3dyaXRlcGFnZV9jdHggKndwYyxcbiYjNDM7XHRzdHJ1Y3QgZm9saW8gKmZvbGlvLCB1NjQgcG9zLCB1bnNpZ25lZCBpbnQgbGVuLCB1NjQgZW5kX3BvcylcbiYjNDM7e1xuJiM0MztcdGludCBlcnJvcjtcbiYjNDM7XG4mIzQzO1x0aWYgKHBvcyBcdTAwM2Mgd3BjLVx1MDAzZWlvbWFwLm9mZnNldCB8fFxuJiM0MztcdFx0XHRwb3MgXHUwMDNlPSB3cGMtXHUwMDNlaW9tYXAub2Zmc2V0ICYjNDM7IHdwYy1cdTAwM2Vpb21hcC5sZW5ndGgpIHtcbiYjNDM7XHRcdGlmIChJTk9ERV9WRVJTSU9OKHdwYy1cdTAwM2Vpbm9kZSkgPT0gTUlOSVhfVjEpXG4mIzQzO1x0XHRcdGVycm9yID0gVjFfbWluaXhfaW9tYXBfYmVnaW4od3BjLVx1MDAzZWlub2RlLCBwb3MsIGxlbiwgSU9NQVBfV1JJVEUsXG4mIzQzO1x0XHRcdFx0XHUwMDI2d3BjLVx1MDAzZWlvbWFwLCBOVUxMKTtcbiYjNDM7XHRcdGVsc2VcbiYjNDM7XHRcdFx0ZXJyb3IgPSBWMl9taW5peF9pb21hcF9iZWdpbih3cGMtXHUwMDNlaW5vZGUsIHBvcywgbGVuLCBJT01BUF9XUklURSxcbiYjNDM7XHRcdFx0XHRcdTAwMjZ3cGMtXHUwMDNlaW9tYXAsIE5VTEwpO1xuJiM0MztcdFx0aWYgKGVycm9yKVxuJiM0MztcdFx0XHRyZXR1cm4gZXJyb3I7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gaW9tYXBfYWRkX3RvX2lvZW5kKHdwYywgZm9saW8sIHBvcywgZW5kX3BvcywgbGVuKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBpb21hcF93cml0ZWJhY2tfb3BzIG1pbml4X3dyaXRlYmFja19vcHMgPSB7XG4mIzQzO1x0LndyaXRlYmFja19yYW5nZSA9IG1pbml4X3dyaXRlYmFja19yYW5nZSxcbiYjNDM7XHQud3JpdGViYWNrX3N1Ym1pdCA9IGlvbWFwX2lvZW5kX3dyaXRlYmFja19zdWJtaXQsXG4mIzQzO307XG4mIzQzO1xuJiM0MztpbnQgbWluaXhfZ2V0X2Jsb2NrKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHNlY3Rvcl90IGJsb2NrLFxuIFx0XHQgICAgc3RydWN0IGJ1ZmZlcl9oZWFkICpiaF9yZXN1bHQsIGludCBjcmVhdGUpXG4ge1xuIFx0aWYgKElOT0RFX1ZFUlNJT04oaW5vZGUpID09IE1JTklYX1YxKVxuQEAgLTQ0NSwxNyAmIzQzOzQ3MCw0NSBAQCBzdGF0aWMgaW50IG1pbml4X2dldF9ibG9jayhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzZWN0b3JfdCBibG9jayxcbiBcdFx0cmV0dXJuIFYyX21pbml4X2dldF9ibG9jayhpbm9kZSwgYmxvY2ssIGJoX3Jlc3VsdCwgY3JlYXRlKTtcbiB9XG4gXG4tc3RhdGljIGludCBtaW5peF93cml0ZXBhZ2VzKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxuJiM0MzsvKiBUaGUgb2xkIG1pbml4X3dyaXRlcGFnZXMsIHByZXNlcnZlZCBmb3IgZGlyZWN0b3J5IG9wZXJhdGlvbnMuICovXG4mIzQzO3N0YXRpYyBpbnQgbWluaXhfYmxvY2tfd3JpdGVwYWdlcyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcbiBcdFx0c3RydWN0IHdyaXRlYmFja19jb250cm9sICp3YmMpXG4ge1xuIFx0cmV0dXJuIG1wYWdlX3dyaXRlcGFnZXMobWFwcGluZywgd2JjLCBtaW5peF9nZXRfYmxvY2spO1xuIH1cbiBcbiYjNDM7c3RhdGljIGludCBtaW5peF93cml0ZXBhZ2VzKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxuJiM0MztcdFx0c3RydWN0IHdyaXRlYmFja19jb250cm9sICp3YmMpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgaW9tYXBfd3JpdGVwYWdlX2N0eCB3cGMgPSB7XG4mIzQzO1x0XHQuaW5vZGUgPSBtYXBwaW5nLVx1MDAzZWhvc3QsXG4mIzQzO1x0XHQud2JjID0gd2JjLFxuJiM0MztcdFx0Lm9wcyA9IFx1MDAyNm1pbml4X3dyaXRlYmFja19vcHMsXG4mIzQzO1x0fTtcbiYjNDM7XHRyZXR1cm4gaW9tYXBfd3JpdGVwYWdlcyhcdTAwMjZ3cGMpO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyBpbnQgbWluaXhfcmVhZF9mb2xpbyhzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IGZvbGlvICpmb2xpbylcbiYjNDM7e1xuJiM0MztcdGNvbnN0IHN0cnVjdCBpb21hcF9vcHMgKm9wcyA9IG1pbml4X2lvbWFwX29wc192ZXIoZm9saW8tXHUwMDNlbWFwcGluZy1cdTAwM2Vob3N0KTtcbiYjNDM7XG4mIzQzO1x0aW9tYXBfYmlvX3JlYWRfZm9saW8oZm9saW8sIG9wcyk7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qIFRoZSBvbGQgbWluaXhfcmVhZF9mb2xpbywgcHJlc2VydmVkIGZvciBkaXJlY3Rvcnkgb3BlcmF0aW9ucy4gKi9cbiYjNDM7c3RhdGljIGludCBtaW5peF9ibG9ja19yZWFkX2ZvbGlvKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIHtcbiBcdHJldHVybiBibG9ja19yZWFkX2Z1bGxfZm9saW8oZm9saW8sIG1pbml4X2dldF9ibG9jayk7XG4gfVxuIFxuJiM0MztzdGF0aWMgdm9pZCBtaW5peF9yZWFkYWhlYWQoc3RydWN0IHJlYWRhaGVhZF9jb250cm9sICpyYWMpXG4mIzQzO3tcbiYjNDM7XHRjb25zdCBzdHJ1Y3QgaW9tYXBfb3BzICpvcHMgPSBtaW5peF9pb21hcF9vcHNfdmVyKHJhYy1cdTAwM2VtYXBwaW5nLVx1MDAzZWhvc3QpO1xuJiM0MztcbiYjNDM7XHRpb21hcF9iaW9fcmVhZGFoZWFkKHJhYywgb3BzKTtcbiYjNDM7fVxuJiM0MztcbiBpbnQgbWluaXhfcHJlcGFyZV9jaHVuayhzdHJ1Y3QgZm9saW8gKmZvbGlvLCBsb2ZmX3QgcG9zLCB1bnNpZ25lZCBsZW4pXG4ge1xuIFx0cmV0dXJuIF9fYmxvY2tfd3JpdGVfYmVnaW4oZm9saW8sIHBvcywgbGVuLCBtaW5peF9nZXRfYmxvY2spO1xuQEAgLTQ4NywyNCAmIzQzOzU0MCw0MiBAQCBzdGF0aWMgaW50IG1pbml4X3dyaXRlX2JlZ2luKGNvbnN0IHN0cnVjdCBraW9jYiAqaW9jYixcbiBcbiBzdGF0aWMgc2VjdG9yX3QgbWluaXhfYm1hcChzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgc2VjdG9yX3QgYmxvY2spXG4ge1xuLVx0cmV0dXJuIGdlbmVyaWNfYmxvY2tfYm1hcChtYXBwaW5nLGJsb2NrLG1pbml4X2dldF9ibG9jayk7XG4mIzQzO1x0Y29uc3Qgc3RydWN0IGlvbWFwX29wcyAqb3BzID0gbWluaXhfaW9tYXBfb3BzX3ZlcihtYXBwaW5nLVx1MDAzZWhvc3QpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gaW9tYXBfYm1hcChtYXBwaW5nLCBibG9jaywgb3BzKTtcbiB9XG4gXG4tc3RhdGljIGNvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgbWluaXhfYW9wcyA9IHtcbi1cdC5kaXJ0eV9mb2xpb1x0PSBibG9ja19kaXJ0eV9mb2xpbyxcbi1cdC5pbnZhbGlkYXRlX2ZvbGlvID0gYmxvY2tfaW52YWxpZGF0ZV9mb2xpbyxcbiYjNDM7Y29uc3Qgc3RydWN0IGFkZHJlc3Nfc3BhY2Vfb3BlcmF0aW9ucyBtaW5peF9hb3BzID0ge1xuJiM0MztcdC5kaXJ0eV9mb2xpb1x0PSBpb21hcF9kaXJ0eV9mb2xpbyxcbiYjNDM7XHQuaW52YWxpZGF0ZV9mb2xpbyA9IGlvbWFwX2ludmFsaWRhdGVfZm9saW8sXG4gXHQucmVhZF9mb2xpbyA9IG1pbml4X3JlYWRfZm9saW8sXG4mIzQzO1x0LnJlYWRhaGVhZCA9IG1pbml4X3JlYWRhaGVhZCxcbiBcdC53cml0ZXBhZ2VzID0gbWluaXhfd3JpdGVwYWdlcyxcbiYjNDM7XHQubWlncmF0ZV9mb2xpbyA9IGZpbGVtYXBfbWlncmF0ZV9mb2xpbyxcbiYjNDM7XHQuYm1hcCA9IG1pbml4X2JtYXAsXG4mIzQzO1x0LmlzX3BhcnRpYWxseV91cHRvZGF0ZSA9IGlvbWFwX2lzX3BhcnRpYWxseV91cHRvZGF0ZSxcbiYjNDM7XHQucmVsZWFzZV9mb2xpbyA9IGlvbWFwX3JlbGVhc2VfZm9saW8sXG4mIzQzO1x0LmVycm9yX3JlbW92ZV9mb2xpbyA9IGdlbmVyaWNfZXJyb3JfcmVtb3ZlX2ZvbGlvLFxuJiM0Mzt9O1xuJiM0MztcbiYjNDM7LyogQSBzcGVjaWFsIGFvcHMgZm9yIGRpcmVjdG9yaWVzIHRoYXQga2VlcHMgdXNpbmcgdGhlIGJ1ZmZlciBoZWFkIGNodW5rcywgYXRcbiYjNDM7ICogbGVhc3QgZm9yIHRoZSB0aW1lIGJlaW5nLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgbWluaXhfZGlyX2FvcHMgPSB7XG4mIzQzO1x0LmRpcnR5X2ZvbGlvID0gYmxvY2tfZGlydHlfZm9saW8sXG4mIzQzO1x0LmludmFsaWRhdGVfZm9saW8gPSBibG9ja19pbnZhbGlkYXRlX2ZvbGlvLFxuJiM0MztcdC5yZWFkX2ZvbGlvID0gbWluaXhfYmxvY2tfcmVhZF9mb2xpbyxcbiBcdC53cml0ZV9iZWdpbiA9IG1pbml4X3dyaXRlX2JlZ2luLFxuIFx0LndyaXRlX2VuZCA9IGdlbmVyaWNfd3JpdGVfZW5kLFxuIFx0Lm1pZ3JhdGVfZm9saW8gPSBidWZmZXJfbWlncmF0ZV9mb2xpbyxcbiBcdC5ibWFwID0gbWluaXhfYm1hcCxcbi1cdC5kaXJlY3RfSU8gPSBub29wX2RpcmVjdF9JT1xuJiM0MztcdC53cml0ZXBhZ2VzID0gbWluaXhfYmxvY2tfd3JpdGVwYWdlcyxcbiB9O1xuIFxuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBtaW5peF9zeW1saW5rX2lub2RlX29wZXJhdGlvbnMgPSB7XG4tXHQuZ2V0X2xpbmtcdD0gcGFnZV9nZXRfbGluayxcbiYjNDM7XHQuZ2V0X2xpbmtcdD0gbWluaXhfZ2V0X2xpbmssXG4gXHQuZ2V0YXR0clx0PSBtaW5peF9nZXRhdHRyLFxuJiM0MztcdC5zZXRhdHRyXHQ9IG1pbml4X3NldGF0dHIsXG4gfTtcbiBcbiB2b2lkIG1pbml4X3NldF9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBkZXZfdCByZGV2KVxuQEAgLTUxNiw3ICYjNDM7NTg3LDcgQEAgdm9pZCBtaW5peF9zZXRfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSwgZGV2X3QgcmRldilcbiBcdH0gZWxzZSBpZiAoU19JU0RJUihpbm9kZS1cdTAwM2VpX21vZGUpKSB7XG4gXHRcdGlub2RlLVx1MDAzZWlfb3AgPSBcdTAwMjZtaW5peF9kaXJfaW5vZGVfb3BlcmF0aW9ucztcbiBcdFx0aW5vZGUtXHUwMDNlaV9mb3AgPSBcdTAwMjZtaW5peF9kaXJfb3BlcmF0aW9ucztcbi1cdFx0aW5vZGUtXHUwMDNlaV9tYXBwaW5nLVx1MDAzZWFfb3BzID0gXHUwMDI2bWluaXhfYW9wcztcbiYjNDM7XHRcdGlub2RlLVx1MDAzZWlfbWFwcGluZy1cdTAwM2VhX29wcyA9IFx1MDAyNm1pbml4X2Rpcl9hb3BzO1xuIFx0fSBlbHNlIGlmIChTX0lTTE5LKGlub2RlLVx1MDAzZWlfbW9kZSkpIHtcbiBcdFx0aW5vZGUtXHUwMDNlaV9vcCA9IFx1MDAyNm1pbml4X3N5bWxpbmtfaW5vZGVfb3BlcmF0aW9ucztcbiBcdFx0aW5vZGVfbm9oaWdobWVtKGlub2RlKTtcbkBAIC03NjgsNCAmIzQzOzgzOSwzIEBAIG1vZHVsZV9pbml0KGluaXRfbWluaXhfZnMpXG4gbW9kdWxlX2V4aXQoZXhpdF9taW5peF9mcylcbiBNT0RVTEVfREVTQ1JJUFRJT04oXCYjMzQ7TWluaXggZmlsZSBzeXN0ZW1cJiMzNDspO1xuIE1PRFVMRV9MSUNFTlNFKFwmIzM0O0dQTFwmIzM0Oyk7XG4tXG5kaWZmIC0tZ2l0IGEvZnMvbWluaXgvaW9tYXAuYyBiL2ZzL21pbml4L2lvbWFwLmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uN2JiMDQzOWUzNjY5OTZcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL21pbml4L2lvbWFwLmNcbkBAIC0wLDAgJiM0MzsxLDExNCBAQFxuJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4mIzQzOy8qXG4mIzQzOyAqIGlvbWFwIGZ1bmN0aW9ucyBmb3IgbWluaXguIEF0IGxlYXN0IHRoZSBmaXJzdCBwYXNzIG9mIHRoaXMgZmlsZSB3YXMgdGFrZW5cbiYjNDM7ICogZnJvbSB0aGUgeGlhZnMgaW9tYXAuYywgd2hpY2ggaXMgZml0dGluZyBzaW5jZSB0aGUgeGlhZnMgbW9kdWxlIGluIHR1cm5cbiYjNDM7ICogYm9ycm93ZWQgaGVhdmlseSBmcm9tIHRoZSBtb2Rlcm5pemVkIG1pbml4IGZzIGtlcm5lbCBtb2R1bGUuXG4mIzQzOyAqL1xuJiM0MztcbiYjNDM7LypcbiYjNDM7ICogbWluaXhfaW9tYXBfYmVnaW4gLSBtYXAgYSBmaWxlIHJhbmdlIHRvIGRpc2sgYmxvY2tzLiBJdCBhY3RzIGFzIGEgcmVwbGFjZW1lbnRcbiYjNDM7ICogZm9yIGdldF9ibG9jayBpbiBpdHJlZV9jb21tb24uYywgYXQgbGVhc3QgaW4gdGhlIGltcG9ydGFudCB3YXlzLCBhbmQgaXNcbiYjNDM7ICogYWRhcHRlZCBmcm9tIGl0LCBidXQgaXQgdXNlcyBpb21hcCBpbnN0ZWFkIG9mIGJ1ZmZlcl9oZWFkLiBUaGlzIGlzIHRha2VuXG4mIzQzOyAqIGRpcmVjdGx5IGZyb20gdGhlIG91dC1vZi10cmVlIHhpYWZzIGlvbWFwIGNoYW5nZXMsIGFuZCB0aGUgZXhmYXQgaW9tYXBcbiYjNDM7ICogY2hhbmdlcyB3ZXJlIGFuIGluc3BpcmF0aW9uIGZvciB0aGF0LlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGludCBtaW5peF9pb21hcF9iZWdpbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb2ZmX3Qgb2Zmc2V0LCBsb2ZmX3QgbGVuZ3RoLFxuJiM0MztcdHVuc2lnbmVkIGludCBmbGFncywgc3RydWN0IGlvbWFwICppb21hcCwgc3RydWN0IGlvbWFwICpzcmNtYXApXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiID0gaW5vZGUtXHUwMDNlaV9zYjtcbiYjNDM7XHR1bnNpZ25lZCBpbnQgYmxrYml0cyA9IHNiLVx1MDAzZXNfYmxvY2tzaXplX2JpdHM7XG4mIzQzO1x0c2VjdG9yX3QgaWJsb2NrID0gb2Zmc2V0IFx1MDAzZVx1MDAzZSBibGtiaXRzO1xuJiM0MztcdGludCBjcmVhdGUgPSBmbGFncyBcdTAwMjYgSU9NQVBfV1JJVEU7XG4mIzQzO1xuJiM0MztcdC8qIE1vc3RseSB0YWtlbiBmcm9tIG1vZGVybi14aWFmcyBpdHJlZS5jIGdldF9ibG9jayB3aXRoIGVsZW1lbnRzIGZyb21cbiYjNDM7XHQgKiBzaW1pbGFyIGV4ZmF0IG9wZXJhdGlvbnMuXG4mIzQzO1x0ICovXG4mIzQzO1x0aW50IG9mZnNldHNbREVQVEhdO1xuJiM0MztcdEluZGlyZWN0IGNoYWluW0RFUFRIXTtcbiYjNDM7XHRJbmRpcmVjdCAqcGFydGlhbDtcbiYjNDM7XHRpbnQgZGVwdGggPSBibG9ja190b19wYXRoKGlub2RlLCBpYmxvY2ssIG9mZnNldHMpO1xuJiM0MztcdGludCBsZWZ0O1xuJiM0MztcdGludCBlcnIgPSAtRUlPO1xuJiM0MztcbiYjNDM7XHRzZWN0b3JfdCBwaHlzO1xuJiM0MztcbiYjNDM7XHQvKiBibG9jayBpcyBiZXlvbmQgbWF4IGZpbGUgc2l6ZSAqL1xuJiM0MztcdGlmIChkZXB0aCA9PSAwKVxuJiM0MztcdFx0Z290byBvdXQ7XG4mIzQzO1xuJiM0MztcdGlvbWFwLVx1MDAzZWJkZXYgPSBpbm9kZS1cdTAwM2VpX3NiLVx1MDAzZXNfYmRldjtcbiYjNDM7XG4mIzQzO3JlcmVhZDpcbiYjNDM7XHRwYXJ0aWFsID0gZ2V0X2JyYW5jaChpbm9kZSwgZGVwdGgsIG9mZnNldHMsIGNoYWluLCBcdTAwMjZlcnIpO1xuJiM0MztcbiYjNDM7XHQvKiBTaW1wbGVzdCBjYXNlIC0gYmxvY2sgZm91bmQsIG5vIGFsbG9jYXRpb24gbmVlZGVkICovXG4mIzQzO1x0aWYgKCFwYXJ0aWFsKSB7XG4mIzQzO1x0XHQvKiBCaXQgb2YgYSB3ZWlyZCBvcmRlciwgYnV0IGl0JiMzOTtsbCBtYWtlIHNlbnNlIHdoZW4geW91IGdldCB0b1xuJiM0MztcdFx0ICogdGhlIGJvdHRvbS5cbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0aW9tYXAtXHUwMDNlZmxhZ3MgPSBJT01BUF9GX01FUkdFRDtcbiYjNDM7Z290X2l0OlxuJiM0MztcdFx0cGh5cyA9IGJsb2NrX3RvX2NwdShjaGFpbltkZXB0aCAtIDFdLmtleSk7XG4mIzQzO1x0XHRwYXJ0aWFsID0gY2hhaW4mIzQzO2RlcHRoLTE7XG4mIzQzO1x0XHQvKiBTZXQgdXAgdGhlIGlvbWFwIHN0cnVjdCBiZWZvcmUgY2xlYW5pbmcgdXAgKi9cbiYjNDM7XHRcdGlvbWFwLVx1MDAzZXR5cGUgPSBJT01BUF9NQVBQRUQ7XG4mIzQzO1x0XHRpb21hcC1cdTAwM2VhZGRyID0gKHU2NClwaHlzIFx1MDAzY1x1MDAzYyBibGtiaXRzO1xuJiM0MztcdFx0aW9tYXAtXHUwMDNlbGVuZ3RoID0gMSBcdTAwM2NcdTAwM2MgYmxrYml0cztcbiYjNDM7XHRcdGlvbWFwLVx1MDAzZW9mZnNldCA9ICh1NjQpaWJsb2NrIFx1MDAzY1x1MDAzYyBibGtiaXRzO1xuJiM0MztcdFx0Z290byBjbGVhbnVwO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0LyogTmV4dCBzaW1wbGUgY2FzZSAtIHBsYWluIGxvb2t1cCBvciBmYWlsZWQgcmVhZCBvZiBpbmRpcmVjdCBibG9jayAqL1xuJiM0MztcdGlmICghY3JlYXRlIHx8IGVyciA9PSAtRUlPKSB7XG4mIzQzO1x0XHRpb21hcC1cdTAwM2V0eXBlID0gSU9NQVBfSE9MRTtcbiYjNDM7XHRcdGlvbWFwLVx1MDAzZWFkZHIgPSBJT01BUF9OVUxMX0FERFI7XG4mIzQzO1x0XHRpb21hcC1cdTAwM2VsZW5ndGggPSAxIFx1MDAzY1x1MDAzYyBibGtiaXRzO1xuJiM0MztcdFx0aW9tYXAtXHUwMDNlb2Zmc2V0ID0gKHU2NClpYmxvY2sgXHUwMDNjXHUwMDNjIGJsa2JpdHM7XG4mIzQzO1x0XHRpb21hcC1cdTAwM2VmbGFncyA9IDA7XG4mIzQzO2NsZWFudXA6XG4mIzQzO1x0XHR3aGlsZSAocGFydGlhbCBcdTAwM2UgY2hhaW4pIHtcbiYjNDM7XHRcdFx0YnJlbHNlKHBhcnRpYWwtXHUwMDNlYmgpO1xuJiM0MztcdFx0XHRwYXJ0aWFsLS07XG4mIzQzO1x0XHR9XG4mIzQzO291dDpcbiYjNDM7XHRcdHJldHVybiBlcnI7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIEluZGlyZWN0IGJsb2NrIG1pZ2h0IGJlIHJlbW92ZWQgYnkgdHJ1bmNhdGUgd2hpbGUgd2Ugd2VyZVxuJiM0MztcdCAqIHJlYWRpbmcgaXQuIEhhbmRsaW5nIG9mIHRoYXQgY2FzZSAoZm9yZ2V0IHdoYXQgd2UmIzM5O3ZlIGdvdCBhbmRcbiYjNDM7XHQgKiByZXJlYWQpIGlzIHRha2VuIG91dCBvZiB0aGUgbWFpbiBwYXRoLlxuJiM0MztcdCAqL1xuJiM0MztcdGlmIChlcnIgPT0gLUVBR0FJTilcbiYjNDM7XHRcdGdvdG8gY2hhbmdlZDtcbiYjNDM7XG4mIzQzO1x0bGVmdCA9IChjaGFpbiAmIzQzOyBkZXB0aCkgLSBwYXJ0aWFsO1xuJiM0MztcdGVyciA9IGFsbG9jX2JyYW5jaChpbm9kZSwgbGVmdCwgb2Zmc2V0cyAmIzQzOyAocGFydGlhbCAtIGNoYWluKSwgcGFydGlhbCk7XG4mIzQzO1x0aWYgKGVycilcbiYjNDM7XHRcdGdvdG8gY2xlYW51cDtcbiYjNDM7XG4mIzQzO1x0aWYgKHNwbGljZV9icmFuY2goaW5vZGUsIGNoYWluLCBwYXJ0aWFsLCBsZWZ0KSBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gY2hhbmdlZDtcbiYjNDM7XG4mIzQzO1x0LyogU3VjY2Vzc2Z1bCBhbGxvY2F0aW9uLCBtYXBwaW5nIGl0LiAqL1xuJiM0MztcdGlvbWFwLVx1MDAzZWZsYWdzID0gSU9NQVBfRl9ORVc7XG4mIzQzO1x0Z290byBnb3RfaXQ7XG4mIzQzO1xuJiM0MztjaGFuZ2VkOlxuJiM0MztcdHdoaWxlIChwYXJ0aWFsIFx1MDAzZSBjaGFpbikge1xuJiM0MztcdFx0YnJlbHNlKHBhcnRpYWwtXHUwMDNlYmgpO1xuJiM0MztcdFx0cGFydGlhbC0tO1xuJiM0MztcdH1cbiYjNDM7XHRnb3RvIHJlcmVhZDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LypcbiYjNDM7ICogbWluaXhfaW9tYXBfZW5kIGVuZHMgdXAgYmVpbmcgYSBub3A7IHNpbmNlIG1pbml4IGRvZXNuJiMzOTt0IGhhdmUgYW55IGV4dGVudHMgb3JcbiYjNDM7ICogdHJhbnNhY3Rpb25zIHRvIHdvcnJ5IGFib3V0LCB0aGVyZSBpc24mIzM5O3QgYW55dGhpbmcgdG8gdXBkYXRlIGhlcmUuIFRoZSBvbi1kaXNrXG4mIzQzOyAqIGluZGlyZWN0IGJsb2NrcyBnZXQgZGlydGllZCBpbiBtaW5peF9pb21hcF9iZWdpbi5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBpbnQgbWluaXhfaW9tYXBfZW5kKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfdCBvZmZzZXQsIGxvZmZfdCBsZW5ndGgsXG4mIzQzO1x0c3NpemVfdCB3cml0dGVuLCB1bnNpZ25lZCBpbnQgZmxhZ3MsIHN0cnVjdCBpb21hcCAqaW9tYXApXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuZGlmZiAtLWdpdCBhL2ZzL21pbml4L2l0cmVlX2NvbW1vbi5jIGIvZnMvbWluaXgvaXRyZWVfY29tbW9uLmNcbmluZGV4IGMzY2QyYzc1YWY5Y2VlLi41YThiNzNhN2JlZGE3OCAxMDA2NDRcbi0tLSBhL2ZzL21pbml4L2l0cmVlX2NvbW1vbi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9taW5peC9pdHJlZV9jb21tb24uY1xuQEAgLTMxMSw3ICYjNDM7MzExLDE2IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCB0cnVuY2F0ZSAoc3RydWN0IGlub2RlICogaW5vZGUpXG4gXHRsb25nIGlibG9jaztcbiBcbiBcdGlibG9jayA9IChpbm9kZS1cdTAwM2VpX3NpemUgJiM0Mzsgc2ItXHUwMDNlc19ibG9ja3NpemUgLTEpIFx1MDAzZVx1MDAzZSBzYi1cdTAwM2VzX2Jsb2Nrc2l6ZV9iaXRzO1xuLVx0YmxvY2tfdHJ1bmNhdGVfcGFnZShpbm9kZS1cdTAwM2VpX21hcHBpbmcsIGlub2RlLVx1MDAzZWlfc2l6ZSwgZ2V0X2Jsb2NrKTtcbiYjNDM7XG4mIzQzO1x0LyogRGVwZW5kaW5nIG9uIHdoYXQgYWRkcmVzcyBzcGFjZSBvcGVyYXRpb25zIGFyZSBiZWluZyB1c2VkIGJ5IHRoZVxuJiM0MztcdCAqIGlub2RlIGJlaW5nIHRydW5jYXRlZCwgd2UgbmVlZCB0byBlaXRoZXIgY2FsbCBpb21hcF90cnVuY2F0ZV9wYWdlIG9yXG4mIzQzO1x0ICogYmxvY2tfdHJ1bmNhdGVfcGFnZS5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAoaW5vZGUtXHUwMDNlaV9tYXBwaW5nLVx1MDAzZWFfb3BzID09IFx1MDAyNm1pbml4X2FvcHMpXG4mIzQzO1x0XHRpb21hcF90cnVuY2F0ZV9wYWdlKGlub2RlLCBpbm9kZS1cdTAwM2VpX3NpemUsIE5VTEwsXG4mIzQzO1x0XHRcdG1pbml4X2lvbWFwX29wc192ZXIoaW5vZGUpLCBOVUxMLCBOVUxMKTtcbiYjNDM7XHRlbHNlXG4mIzQzO1x0XHRibG9ja190cnVuY2F0ZV9wYWdlKGlub2RlLVx1MDAzZWlfbWFwcGluZywgaW5vZGUtXHUwMDNlaV9zaXplLCBnZXRfYmxvY2spO1xuIFxuIFx0biA9IGJsb2NrX3RvX3BhdGgoaW5vZGUsIGlibG9jaywgb2Zmc2V0cyk7XG4gXHRpZiAoIW4pXG5kaWZmIC0tZ2l0IGEvZnMvbWluaXgvaXRyZWVfdjEuYyBiL2ZzL21pbml4L2l0cmVlX3YxLmNcbmluZGV4IDFmZWQ5MDYwNDJhYTg0Li41OGMyOWY0NDQzZDM3MiAxMDA2NDRcbi0tLSBhL2ZzL21pbml4L2l0cmVlX3YxLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL21pbml4L2l0cmVlX3YxLmNcbkBAIC00OSw2ICYjNDM7NDksMTggQEAgc3RhdGljIGludCBibG9ja190b19wYXRoKHN0cnVjdCBpbm9kZSAqIGlub2RlLCBsb25nIGJsb2NrLCBpbnQgb2Zmc2V0c1tERVBUSF0pXG4gfVxuIFxuICNpbmNsdWRlIFwmIzM0O2l0cmVlX2NvbW1vbi5jXCYjMzQ7XG4mIzQzOy8qIE5PVEEgQkVORTpcbiYjNDM7ICpcbiYjNDM7ICogVGhpcyBpcyBpY2t5IHRvIG1lLCBidXQgYXQgdGhlIHNhbWUgdGltZSBoYXZpbmcgaXQgYmUgYSBzdGFuZGFsb25lIEMgZmlsZVxuJiM0MzsgKiB0aGF0JiMzOTtzIGNvbXBpbGVkIHRvIG9iamVjdCBmb3JtIGFuZCBsaW5rZWQgc2VwYXJhdGVseSBsaWtlIGl0IGlzIGluIHhpYWZzIGlzXG4mIzQzOyAqIG11Y2ggbmFzdGllciBpbiBtaW5peCBiZWNhdXNlIG9mIHRoZSBkaWZmZXJlbnQgdmVyc2lvbnMgb2YgdGhlIG1pbml4IGZzIHRoYXRcbiYjNDM7ICogaGF2ZSBzb21lIHZlcnksIHZlcnkgZGlmZmVyZW50IGFzcGVjdHMsIGxpa2UgdGhlIHNpemUgb2YgYmxvY2tfdC4gSSBkb24mIzM5O3RcbiYjNDM7ICogbGlrZSBpdCwgYnV0IHNpbmNlIG1pbml4IGFscmVhZHkgaGFzIHRoaXMgcGF0dGVybiB3aGVyZSBhIGNvbW1vbiBpdHJlZSBmaWxlXG4mIzQzOyAqIGlzIGluY2x1ZGVkIGluIHRoZSBpdHJlZV92MSBhbmQgaXRyZWVfdjIoYW5kIHYzKSBmaWxlcywgSSYjMzk7bSBpbmNsdWRpbmcgaW9tYXAuY1xuJiM0MzsgKiBpbiB0aGVzZSBmaWxlcyBhcyB3ZWxsLiBJdCBkb2VzIGF0IGxlYXN0IGF2b2lkIGV4cG9ydGluZyBzb21lIGN1cnJlbnRseVxuJiM0MzsgKiBzdGF0aWMgZnVuY3Rpb25zIHRoYXQgYXJlbiYjMzk7dCBuZWVkZWQgYW55d2hlcmUgYnV0IGl0cmVlX2NvbW1vbi5jIGFuZCBpb21hcC5jLlxuJiM0MzsgKi9cbiYjNDM7I2luY2x1ZGUgXCYjMzQ7aW9tYXAuY1wmIzM0O1xuIFxuIGludCBWMV9taW5peF9nZXRfYmxvY2soc3RydWN0IGlub2RlICogaW5vZGUsIGxvbmcgYmxvY2ssXG4gXHRcdFx0c3RydWN0IGJ1ZmZlcl9oZWFkICpiaF9yZXN1bHQsIGludCBjcmVhdGUpXG5AQCAtNjEsNyAmIzQzOzczLDE4IEBAIHZvaWQgVjFfbWluaXhfdHJ1bmNhdGUoc3RydWN0IGlub2RlICogaW5vZGUpXG4gXHR0cnVuY2F0ZShpbm9kZSk7XG4gfVxuIFxuLXVuc2lnbmVkIFYxX21pbml4X2Jsb2Nrcyhsb2ZmX3Qgc2l6ZSwgc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcbiYjNDM7dW5zaWduZWQgaW50IFYxX21pbml4X2Jsb2Nrcyhsb2ZmX3Qgc2l6ZSwgc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcbiB7XG4gXHRyZXR1cm4gbmJsb2NrcyhzaXplLCBzYik7XG4gfVxuJiM0MztcbiYjNDM7aW50IFYxX21pbml4X2lvbWFwX2JlZ2luKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfdCBvZmZzZXQsIGxvZmZfdCBsZW5ndGgsXG4mIzQzO1x0dW5zaWduZWQgaW50IGZsYWdzLCBzdHJ1Y3QgaW9tYXAgKmlvbWFwLCBzdHJ1Y3QgaW9tYXAgKnNyY21hcClcbiYjNDM7e1xuJiM0MztcdHJldHVybiBtaW5peF9pb21hcF9iZWdpbihpbm9kZSwgb2Zmc2V0LCBsZW5ndGgsIGZsYWdzLCBpb21hcCwgc3JjbWFwKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7Y29uc3Qgc3RydWN0IGlvbWFwX29wcyBWMV9taW5peF9pb21hcF9vcHMgPSB7XG4mIzQzO1x0LmlvbWFwX2JlZ2luID0gVjFfbWluaXhfaW9tYXBfYmVnaW4sXG4mIzQzO1x0LmlvbWFwX2VuZCAgID0gbWluaXhfaW9tYXBfZW5kLFxuJiM0Mzt9O1xuZGlmZiAtLWdpdCBhL2ZzL21pbml4L2l0cmVlX3YyLmMgYi9mcy9taW5peC9pdHJlZV92Mi5jXG5pbmRleCA5ZDAwZjMxYTJkOWQxNS4uZmM3YTVhZThmYTFjYTMgMTAwNjQ0XG4tLS0gYS9mcy9taW5peC9pdHJlZV92Mi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9taW5peC9pdHJlZV92Mi5jXG5AQCAtNTcsNiAmIzQzOzU3LDEwIEBAIHN0YXRpYyBpbnQgYmxvY2tfdG9fcGF0aChzdHJ1Y3QgaW5vZGUgKiBpbm9kZSwgbG9uZyBibG9jaywgaW50IG9mZnNldHNbREVQVEhdKVxuIH1cbiBcbiAjaW5jbHVkZSBcJiMzNDtpdHJlZV9jb21tb24uY1wmIzM0O1xuJiM0MzsvKiBTZWUgdGhlIG5vdGUgaW4gaXRyZWVfdjEgaW4gYSBjb21tZW50IHRoYXQgc3RhcnRzIFwmIzM0O05PVEEgQkVORVwmIzM0OyBmb3IgYW5cbiYjNDM7ICogZXhwbGFuYXRpb24gZm9yIHdoeSBpb21hcC5jIGlzIGluY2x1ZGVkIGhlcmUuXG4mIzQzOyAqL1xuJiM0MzsjaW5jbHVkZSBcJiMzNDtpb21hcC5jXCYjMzQ7XG4gXG4gaW50IFYyX21pbml4X2dldF9ibG9jayhzdHJ1Y3QgaW5vZGUgKiBpbm9kZSwgbG9uZyBibG9jayxcbiBcdFx0XHRzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoX3Jlc3VsdCwgaW50IGNyZWF0ZSlcbkBAIC02OSw3ICYjNDM7NzMsMTggQEAgdm9pZCBWMl9taW5peF90cnVuY2F0ZShzdHJ1Y3QgaW5vZGUgKiBpbm9kZSlcbiBcdHRydW5jYXRlKGlub2RlKTtcbiB9XG4gXG4tdW5zaWduZWQgVjJfbWluaXhfYmxvY2tzKGxvZmZfdCBzaXplLCBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxuJiM0Mzt1bnNpZ25lZCBpbnQgVjJfbWluaXhfYmxvY2tzKGxvZmZfdCBzaXplLCBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxuIHtcbiBcdHJldHVybiBuYmxvY2tzKHNpemUsIHNiKTtcbiB9XG4mIzQzO1xuJiM0MztpbnQgVjJfbWluaXhfaW9tYXBfYmVnaW4oc3RydWN0IGlub2RlICppbm9kZSwgbG9mZl90IG9mZnNldCwgbG9mZl90IGxlbmd0aCxcbiYjNDM7XHR1bnNpZ25lZCBpbnQgZmxhZ3MsIHN0cnVjdCBpb21hcCAqaW9tYXAsIHN0cnVjdCBpb21hcCAqc3JjbWFwKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIG1pbml4X2lvbWFwX2JlZ2luKGlub2RlLCBvZmZzZXQsIGxlbmd0aCwgZmxhZ3MsIGlvbWFwLCBzcmNtYXApO1xuJiM0Mzt9XG4mIzQzO1xuJiM0Mztjb25zdCBzdHJ1Y3QgaW9tYXBfb3BzIFYyX21pbml4X2lvbWFwX29wcyA9IHtcbiYjNDM7XHQuaW9tYXBfYmVnaW4gPSBWMl9taW5peF9pb21hcF9iZWdpbixcbiYjNDM7XHQuaW9tYXBfZW5kICAgPSBtaW5peF9pb21hcF9lbmQsXG4mIzQzO307XG5kaWZmIC0tZ2l0IGEvZnMvbWluaXgvbWluaXguaCBiL2ZzL21pbml4L21pbml4LmhcbmluZGV4IGYyMDI1YzliNTgyNTJmLi5kMWE4OTBlOTZhYmUyYyAxMDA2NDRcbi0tLSBhL2ZzL21pbml4L21pbml4LmhcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL21pbml4L21pbml4LmhcbkBAIC01LDYgJiM0Mzs1LDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9mcy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcGFnZW1hcC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbWluaXhfZnMuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9pb21hcC5oXHUwMDNlXG4gXG4gI2RlZmluZSBJTk9ERV9WRVJTSU9OKGlub2RlKVx0bWluaXhfc2IoaW5vZGUtXHUwMDNlaV9zYiktXHUwMDNlc192ZXJzaW9uXG4gI2RlZmluZSBNSU5JWF9WMVx0XHQweDAwMDFcdFx0Lyogb3JpZ2luYWwgbWluaXggZnMgKi9cbkBAIC01Niw3ICYjNDM7NTcsOSBAQCBpbnQgbWluaXhfbmV3X2Jsb2NrKHN0cnVjdCBpbm9kZSAqaW5vZGUpO1xuIHZvaWQgbWluaXhfZnJlZV9ibG9jayhzdHJ1Y3QgaW5vZGUgKmlub2RlLCB1bnNpZ25lZCBsb25nIGJsb2NrKTtcbiB1bnNpZ25lZCBsb25nIG1pbml4X2NvdW50X2ZyZWVfYmxvY2tzKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpO1xuIGludCBtaW5peF9nZXRhdHRyKHN0cnVjdCBtbnRfaWRtYXAgKiwgY29uc3Qgc3RydWN0IHBhdGggKixcbi1cdFx0c3RydWN0IGtzdGF0ICosIHUzMiwgdW5zaWduZWQgaW50KTtcbiYjNDM7XHRcdHN0cnVjdCBrc3RhdCAqLCB1MzIsIHVuc2lnbmVkKTtcbiYjNDM7aW50IG1pbml4X3NldGF0dHIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcbiYjNDM7XHRzdHJ1Y3QgaWF0dHIgKmF0dHIpO1xuIGludCBtaW5peF9wcmVwYXJlX2NodW5rKHN0cnVjdCBmb2xpbyAqZm9saW8sIGxvZmZfdCBwb3MsIHVuc2lnbmVkIGxlbik7XG4gc3RydWN0IG1hcHBpbmdfbWV0YWRhdGFfYmhzICptaW5peF9nZXRfbWV0YWRhdGFfYmhzKHN0cnVjdCBpbm9kZSAqaW5vZGUpO1xuIGludCBtaW5peF9mc3luYyhzdHJ1Y3QgZmlsZSAqZmlsZSwgbG9mZl90IHN0YXJ0LCBsb2ZmX3QgZW5kLCBpbnQgZGF0YXN5bmMpO1xuQEAgLTY5LDYgJiM0Mzs3Miw4IEBAIGV4dGVybiBpbnQgVjFfbWluaXhfZ2V0X2Jsb2NrKHN0cnVjdCBpbm9kZSAqLCBsb25nLCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKiwgaW50KTtcbiBleHRlcm4gaW50IFYyX21pbml4X2dldF9ibG9jayhzdHJ1Y3QgaW5vZGUgKiwgbG9uZywgc3RydWN0IGJ1ZmZlcl9oZWFkICosIGludCk7XG4gZXh0ZXJuIHVuc2lnbmVkIFYxX21pbml4X2Jsb2Nrcyhsb2ZmX3QsIHN0cnVjdCBzdXBlcl9ibG9jayAqKTtcbiBleHRlcm4gdW5zaWduZWQgVjJfbWluaXhfYmxvY2tzKGxvZmZfdCwgc3RydWN0IHN1cGVyX2Jsb2NrICopO1xuJiM0MztleHRlcm4gaW50IG1pbml4X2dldF9ibG9jayhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzZWN0b3JfdCBibG9jayxcbiYjNDM7XHRcdCAgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoX3Jlc3VsdCwgaW50IGNyZWF0ZSk7XG4gXG4gc3RydWN0IG1pbml4X2Rpcl9lbnRyeSAqbWluaXhfZmluZF9lbnRyeShzdHJ1Y3QgZGVudHJ5ICosIHN0cnVjdCBmb2xpbyAqKik7XG4gaW50IG1pbml4X2FkZF9saW5rKHN0cnVjdCBkZW50cnkqLCBzdHJ1Y3QgaW5vZGUqKTtcbkBAIC03NywxMyAmIzQzOzgyLDI2IEBAIGludCBtaW5peF9tYWtlX2VtcHR5KHN0cnVjdCBpbm9kZSosIHN0cnVjdCBpbm9kZSopO1xuIGludCBtaW5peF9lbXB0eV9kaXIoc3RydWN0IGlub2RlKik7XG4gaW50IG1pbml4X3NldF9saW5rKHN0cnVjdCBtaW5peF9kaXJfZW50cnkgKmRlLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuIFx0XHRzdHJ1Y3QgaW5vZGUgKmlub2RlKTtcbiYjNDM7ZXh0ZXJuIGNvbnN0IGNoYXIgKm1pbml4X2dldF9saW5rKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGlub2RlICppbm9kZSxcbiYjNDM7XHRcdHN0cnVjdCBkZWxheWVkX2NhbGwgKmNhbGxiYWNrKTtcbiYjNDM7XG4gc3RydWN0IG1pbml4X2Rpcl9lbnRyeSAqbWluaXhfZG90ZG90KHN0cnVjdCBpbm9kZSosIHN0cnVjdCBmb2xpbyAqKik7XG4gaW5vX3QgbWluaXhfaW5vZGVfYnlfbmFtZShzdHJ1Y3QgZGVudHJ5Kik7XG4gXG4mIzQzO2V4dGVybiBpbnQgVjFfbWluaXhfaW9tYXBfYmVnaW4oc3RydWN0IGlub2RlICppbm9kZSwgbG9mZl90IG9mZnNldCxcbiYjNDM7XHRsb2ZmX3QgbGVuZ3RoLCB1bnNpZ25lZCBpbnQgZmxhZ3MsIHN0cnVjdCBpb21hcCAqaW9tYXAsXG4mIzQzO1x0c3RydWN0IGlvbWFwICpzcmNtYXApO1xuJiM0MztleHRlcm4gaW50IFYyX21pbml4X2lvbWFwX2JlZ2luKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfdCBvZmZzZXQsXG4mIzQzO1x0bG9mZl90IGxlbmd0aCwgdW5zaWduZWQgaW50IGZsYWdzLCBzdHJ1Y3QgaW9tYXAgKmlvbWFwLFxuJiM0MztcdHN0cnVjdCBpb21hcCAqc3JjbWFwKTtcbiYjNDM7XG4mIzQzO2V4dGVybiBjb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZV9vcGVyYXRpb25zIG1pbml4X2FvcHM7XG4gZXh0ZXJuIGNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIG1pbml4X2ZpbGVfaW5vZGVfb3BlcmF0aW9ucztcbiBleHRlcm4gY29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgbWluaXhfZGlyX2lub2RlX29wZXJhdGlvbnM7XG4gZXh0ZXJuIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgbWluaXhfZmlsZV9vcGVyYXRpb25zO1xuIGV4dGVybiBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIG1pbml4X2Rpcl9vcGVyYXRpb25zO1xuJiM0MztleHRlcm4gY29uc3Qgc3RydWN0IGlvbWFwX29wcyBWMV9taW5peF9pb21hcF9vcHM7XG4mIzQzO2V4dGVybiBjb25zdCBzdHJ1Y3QgaW9tYXBfb3BzIFYyX21pbml4X2lvbWFwX29wcztcbiBcbiBzdGF0aWMgaW5saW5lIHN0cnVjdCBtaW5peF9zYl9pbmZvICptaW5peF9zYihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxuIHtcbkBAIC05NSwxMSAmIzQzOzExMywxNyBAQCBzdGF0aWMgaW5saW5lIHN0cnVjdCBtaW5peF9pbm9kZV9pbmZvICptaW5peF9pKHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4gXHRyZXR1cm4gY29udGFpbmVyX29mKGlub2RlLCBzdHJ1Y3QgbWluaXhfaW5vZGVfaW5mbywgdmZzX2lub2RlKTtcbiB9XG4gXG4tc3RhdGljIGlubGluZSB1bnNpZ25lZCBtaW5peF9ibG9ja3NfbmVlZGVkKHVuc2lnbmVkIGJpdHMsIHVuc2lnbmVkIGJsb2Nrc2l6ZSlcbiYjNDM7c3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgbWluaXhfYmxvY2tzX25lZWRlZCh1bnNpZ25lZCBpbnQgYml0cywgdW5zaWduZWQgaW50IGJsb2Nrc2l6ZSlcbiB7XG4gXHRyZXR1cm4gRElWX1JPVU5EX1VQKGJpdHMsIGJsb2Nrc2l6ZSAqIDgpO1xuIH1cbiBcbiYjNDM7c3RhdGljIGlubGluZSBjb25zdCBzdHJ1Y3QgaW9tYXBfb3BzICptaW5peF9pb21hcF9vcHNfdmVyKHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gKElOT0RFX1ZFUlNJT04oaW5vZGUpID09IE1JTklYX1YxKSA/XG4mIzQzO1x0XHRcdTAwMjZWMV9taW5peF9pb21hcF9vcHMgOiBcdTAwMjZWMl9taW5peF9pb21hcF9vcHM7XG4mIzQzO31cbiYjNDM7XG4gI2lmIGRlZmluZWQoQ09ORklHX01JTklYX0ZTX05BVElWRV9FTkRJQU4pIFx1MDAyNlx1MDAyNiBcXFxuIFx0ZGVmaW5lZChDT05GSUdfTUlOSVhfRlNfQklHX0VORElBTl8xNkJJVF9JTkRFWEVEKVxuIFxuQEAgLTEyOSw3ICYjNDM7MTUzLDcgQEAgc3RhdGljIGlubGluZSB1bnNpZ25lZCBtaW5peF9ibG9ja3NfbmVlZGVkKHVuc2lnbmVkIGJpdHMsIHVuc2lnbmVkIGJsb2Nrc2l6ZSlcbiAgKiBiaWctZW5kaWFuIDE2Yml0IGluZGV4ZWQgYml0bWFwc1xuICAqL1xuIFxuLXN0YXRpYyBpbmxpbmUgaW50IG1pbml4X2ZpbmRfZmlyc3RfemVyb19iaXQoY29uc3Qgdm9pZCAqdmFkZHIsIHVuc2lnbmVkIHNpemUpXG4mIzQzO3N0YXRpYyBpbmxpbmUgaW50IG1pbml4X2ZpbmRfZmlyc3RfemVyb19iaXQoY29uc3Qgdm9pZCAqdmFkZHIsIHVuc2lnbmVkIGludCBzaXplKVxuIHtcbiBcdGNvbnN0IHVuc2lnbmVkIHNob3J0ICpwID0gdmFkZHIsICphZGRyID0gdmFkZHI7XG4gXHR1bnNpZ25lZCBzaG9ydCBudW07XG5kaWZmIC0tZ2l0IGEvZnMvbWluaXgvbmFtZWkuYyBiL2ZzL21pbml4L25hbWVpLmNcbmluZGV4IDI2M2U0YmE4YjFjODIyLi5lMjQ1ZjU1YTY4ZmY1ZCAxMDA2NDRcbi0tLSBhL2ZzL21pbml4L25hbWVpLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL21pbml4L25hbWVpLmNcbkBAIC02LDYgJiM0Mzs2LDggQEBcbiAgKi9cbiBcbiAjaW5jbHVkZSBcJiMzNDttaW5peC5oXCYjMzQ7XG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2J1ZmZlcl9oZWFkLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvbmFtZWkuaFx1MDAzZVxuIFxuIHN0YXRpYyBpbnQgYWRkX25vbmRpcihzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4ge1xuQEAgLTY5LDYgJiM0Mzs3MSwxMDEgQEAgc3RhdGljIGludCBtaW5peF9jcmVhdGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxuIFx0cmV0dXJuIG1pbml4X21rbm9kKFx1MDAyNm5vcF9tbnRfaWRtYXAsIGRpciwgZGVudHJ5LCBtb2RlLCAwKTtcbiB9XG4gXG4mIzQzO3N0YXRpYyBpbmxpbmUgdTE2ICp2MV9pX2RhdGEoc3RydWN0IGlub2RlICppbm9kZSlcbiYjNDM7e1xuJiM0MztcdHJldHVybiAodTE2ICopbWluaXhfaShpbm9kZSktXHUwMDNldS5pMV9kYXRhO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW5saW5lIHUzMiAqdjJfaV9kYXRhKHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gKHUzMiAqKW1pbml4X2koaW5vZGUpLVx1MDAzZXUuaTJfZGF0YTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGlubGluZSB1MTYgY3B1X3RvX3YxX2Jsb2NrKHNlY3Rvcl90IG4pXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gbjtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGlubGluZSB1MzIgY3B1X3RvX3YyX2Jsb2NrKHNlY3Rvcl90IG4pXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gbjtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGlubGluZSBzZWN0b3JfdCB2MV9ibG9ja190b19jcHUodTE2IG4pXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gbjtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGlubGluZSBzZWN0b3JfdCB2Ml9ibG9ja190b19jcHUodTMyIG4pXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gbjtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyogUmVpbXBsZW1lbnQgcGFnZV9zeW1saW5rJiMzOTtzIGdlbmVyYWwgbG9naWMgd2hpbGUgYXZvaWRpbmcgdXNpbmcgYnVmZmVyIGhlYWRcbiYjNDM7ICogYmFzZWQgYW9wcyBvcGVyYXRpb25zIGxpa2UgYW9wcy1cdTAwM2V3cml0ZV9iZWdpbiBzbyB0aGluZ3MgYmVoYXZlIGJldHRlciB3aXRoXG4mIzQzOyAqIHRoZSBuZXcgcmVnaW1lIG9mIGlvbWFwIGJhc2VkIGFvcHMgb3BlcmF0aW9ucy4gQ3JpYmJpbmcgZnJvbSBwYWdlX3N5bWxpbmsgaW5cbiYjNDM7ICogZnMvbmFtZWkuYyBhbmQgZXh0NCYjMzk7cyBleHQ0X2luaXRfc3ltbGlua19ibG9jay5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBpbnQgX19wYWdlX3N5bWxpbmsoc3RydWN0IGlub2RlICppbm9kZSwgY29uc3QgY2hhciAqc3ltbmFtZSwgaW50IGxlbilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBzdXBlcl9ibG9jayAqc2IgPSBpbm9kZS1cdTAwM2VpX3NiO1xuJiM0MztcdHN0cnVjdCBidWZmZXJfaGVhZCAqYmg7XG4mIzQzO1x0Y2hhciAqa2FkZHI7XG4mIzQzO1x0aW50IGVyciA9IDA7XG4mIzQzO1x0dTE2ICpwMTY7IC8qIHYxIDE2IGJpdCBibG9jayAqL1xuJiM0MztcdHUzMiAqcDMyOyAvKiB2Mi8zIDMyIGJpdCBibG9jayAqL1xuJiM0MztcbiYjNDM7XHRzZWN0b3JfdCBwaHlzO1xuJiM0MztcbiYjNDM7XHRwaHlzID0gbWluaXhfbmV3X2Jsb2NrKGlub2RlKTtcbiYjNDM7XHRpZiAoIXBoeXMpIHtcbiYjNDM7XHRcdGVyciA9IC1FTk9TUEM7XG4mIzQzO1x0XHRnb3RvIHBzX291dDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmIChJTk9ERV9WRVJTSU9OKGlub2RlKSA9PSBNSU5JWF9WMSkge1xuJiM0MztcdFx0cDE2ID0gdjFfaV9kYXRhKGlub2RlKTtcbiYjNDM7XHRcdCpwMTYgPSBjcHVfdG9fdjFfYmxvY2socGh5cyk7XG4mIzQzO1x0fSBlbHNlIHtcbiYjNDM7XHRcdHAzMiA9IHYyX2lfZGF0YShpbm9kZSk7XG4mIzQzO1x0XHQqcDMyID0gY3B1X3RvX3YyX2Jsb2NrKHBoeXMpO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0YmggPSBzYl9nZXRibGsoc2IsIHBoeXMpO1xuJiM0MztcdGlmICghYmgpIHtcbiYjNDM7XHRcdGVyciA9IC1FTk9NRU07XG4mIzQzO1x0XHRnb3RvIHBzX2ZhaWw7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRsb2NrX2J1ZmZlcihiaCk7XG4mIzQzO1x0a2FkZHIgPSAoY2hhciAqKWJoLVx1MDAzZWJfZGF0YTtcbiYjNDM7XHRtZW1zZXQoa2FkZHIsIDAsIHNiLVx1MDAzZXNfYmxvY2tzaXplKTtcbiYjNDM7XHRtZW1jcHkoa2FkZHIsIHN5bW5hbWUsIGxlbik7XG4mIzQzO1x0aW5vZGUtXHUwMDNlaV9zaXplID0gbGVuIC0gMTtcbiYjNDM7XHRzZXRfYnVmZmVyX3VwdG9kYXRlKGJoKTtcbiYjNDM7XHR1bmxvY2tfYnVmZmVyKGJoKTtcbiYjNDM7XG4mIzQzO1x0bW1iX21hcmtfYnVmZmVyX2RpcnR5KGJoLCBcdTAwMjZtaW5peF9pKGlub2RlKS1cdTAwM2VpX21ldGFkYXRhX2Jocyk7XG4mIzQzO1x0aWYgKGlub2RlX25lZWRzX3N5bmMoaW5vZGUpKSB7XG4mIzQzO1x0XHRzeW5jX2RpcnR5X2J1ZmZlcihiaCk7XG4mIzQzO1x0XHRpZiAoYnVmZmVyX3JlcShiaCkgXHUwMDI2XHUwMDI2ICFidWZmZXJfdXB0b2RhdGUoYmgpKSB7XG4mIzQzO1x0XHRcdHByX2VycihcJiMzNDtpL28gZXJyb3Igc3luY2luZyBpdGFibGUgYmxvY2tcJiMzNDspO1xuJiM0MztcdFx0XHRlcnIgPSAtRUlPO1xuJiM0MztcdFx0fVxuJiM0MztcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdG1hcmtfaW5vZGVfZGlydHkoaW5vZGUpO1xuJiM0MztcdGJyZWxzZShiaCk7XG4mIzQzO1xuJiM0Mztwc19vdXQ6XG4mIzQzO1x0cmV0dXJuIGVycjtcbiYjNDM7XG4mIzQzO3BzX2ZhaWw6XG4mIzQzO1x0bWluaXhfZnJlZV9ibG9jayhpbm9kZSwgcGh5cyk7XG4mIzQzO1x0Z290byBwc19vdXQ7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIGludCBtaW5peF9zeW1saW5rKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbiBcdFx0XHQgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBjb25zdCBjaGFyICpzeW1uYW1lKVxuIHtcbkBAIC04NCw3ICYjNDM7MTgxLDcgQEAgc3RhdGljIGludCBtaW5peF9zeW1saW5rKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbiBcdFx0cmV0dXJuIFBUUl9FUlIoaW5vZGUpO1xuIFxuIFx0bWluaXhfc2V0X2lub2RlKGlub2RlLCAwKTtcbi1cdGVyciA9IHBhZ2Vfc3ltbGluayhpbm9kZSwgc3ltbmFtZSwgaSk7XG4mIzQzO1x0ZXJyID0gX19wYWdlX3N5bWxpbmsoaW5vZGUsIHN5bW5hbWUsIGkpO1xuIFx0aWYgKHVubGlrZWx5KGVycikpIHtcbiBcdFx0aW5vZGVfZGVjX2xpbmtfY291bnQoaW5vZGUpO1xuIFx0XHRpcHV0KGlub2RlKTtcbkBAIC0yNzMsNiAmIzQzOzM3MCw0NCBAQCBzdGF0aWMgaW50IG1pbml4X3JlbmFtZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcbiBcdHJldHVybiBlcnI7XG4gfVxuIFxuJiM0MzsvKiBzdHJhaWdodCB1cCB0aGlldmVyeSBoZXJlOyBzdG9sZW4gdmVyYmF0aW0gZnJvbSBleHQ0X2dldF9saW5rICovXG4mIzQzO3N0YXRpYyB2b2lkIG1pbml4X2ZyZWVfbGluayh2b2lkICpiaClcbiYjNDM7e1xuJiM0MztcdGJyZWxzZShiaCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qIEJvcnJvd2luZyBmcm9tIGV4dDRfZ2V0X2xpbmsgdG8gYSBkZWdyZWU7IHNpbmNlIG1pbml4IGlub2RlcyBhbmQgc3ltbGlua3NcbiYjNDM7ICogYXJlIHNpZ25pZmljYW50bHkgc2ltcGxlciwgd2UgZG9uJiMzOTt0IG5lZWQgdG8gZG8gbmVhcmx5IGFzIG11Y2ggYXMgZXh0NFxuJiM0MzsgKiByZXF1aXJlcyBmb3Igb2xkLXRpbWV5IGV4dDQgc2xvdyBsaW5rcy5cbiYjNDM7ICovXG4mIzQzO2NvbnN0IGNoYXIgKm1pbml4X2dldF9saW5rKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGlub2RlICppbm9kZSxcbiYjNDM7XHRcdHN0cnVjdCBkZWxheWVkX2NhbGwgKmNhbGxiYWNrKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHN1cGVyX2Jsb2NrICpzYiA9IGlub2RlLVx1MDAzZWlfc2I7XG4mIzQzO1x0c3RydWN0IGJ1ZmZlcl9oZWFkICpiaDtcbiYjNDM7XHRzZWN0b3JfdCBibGs7XG4mIzQzO1xuJiM0MztcdC8qIEdldCB5b24gYmxvY2ssIGRlcGVuZGluZyBvbiB3aGF0IHZlcnNpb24gb2YgdGhlIG1pbml4IGZzIHRoaXMgaXMuICovXG4mIzQzO1x0aWYgKElOT0RFX1ZFUlNJT04oaW5vZGUpID09IE1JTklYX1YxKVxuJiM0MztcdFx0YmxrID0gdjFfYmxvY2tfdG9fY3B1KCoodjFfaV9kYXRhKGlub2RlKSkpO1xuJiM0MztcdGVsc2VcbiYjNDM7XHRcdGJsayA9IHYyX2Jsb2NrX3RvX2NwdSgqKHYyX2lfZGF0YShpbm9kZSkpKTtcbiYjNDM7XG4mIzQzO1x0YmggPSBzYl9icmVhZChzYiwgYmxrKTtcbiYjNDM7XHRpZiAoSVNfRVJSKGJoKSlcbiYjNDM7XHRcdHJldHVybiBFUlJfQ0FTVChiaCk7XG4mIzQzO1x0aWYgKCFiaCkge1xuJiM0MztcdFx0cHJfZXJyKFwmIzM0O2JhZCBzeW1saW5rIG9uIGlub2RlICVsbHVcJiMzNDssIGlub2RlLVx1MDAzZWlfaW5vKTtcbiYjNDM7XHRcdHJldHVybiBFUlJfUFRSKC1FRlNDT1JSVVBURUQpO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0c2V0X2RlbGF5ZWRfY2FsbChjYWxsYmFjaywgbWluaXhfZnJlZV9saW5rLCBiaCk7XG4mIzQzO1x0bmRfdGVybWluYXRlX2xpbmsoYmgtXHUwMDNlYl9kYXRhLCBpbm9kZS1cdTAwM2VpX3NpemUsXG4mIzQzO1x0XHRcdGlub2RlLVx1MDAzZWlfc2ItXHUwMDNlc19ibG9ja3NpemUgLSAxKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGJoLVx1MDAzZWJfZGF0YTtcbiYjNDM7fVxuJiM0MztcbiAvKlxuICAqIGRpcmVjdG9yaWVzIGNhbiBoYW5kbGUgbW9zdCBvcGVyYXRpb25zLi4uXG4gICovXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjggMDU6MzM8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TUlOSVhfRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDttaW5peF9kaW9fcmVhZF9pdGVyJiMzNDssCiAgICAmIzM0O21pbml4X2Rpb193cml0ZV9pdGVyJiMzNDssCiAgICAmIzM0O21pbml4X2Rpb193cml0ZV9lbmRfaW8mIzM0OywKICAgICYjMzQ7bWluaXhfZmlsZV9yZWFkX2l0ZXImIzM0OywKICAgICYjMzQ7bWluaXhfZmlsZV93cml0ZV9pdGVyJiMzNDssCiAgICAmIzM0O21pbml4X2lvbWFwX2JlZ2luJiMzNDssCiAgICAmIzM0O21pbml4X2lvbWFwX2VuZCYjMzQ7LAogICAgJiMzNDtWMV9taW5peF9pb21hcF9iZWdpbiYjMzQ7LAogICAgJiMzNDtWMl9taW5peF9pb21hcF9iZWdpbiYjMzQ7LAogICAgJiMzNDttaW5peF93cml0ZWJhY2tfcmFuZ2UmIzM0OywKICAgICYjMzQ7bWluaXhfd3JpdGVwYWdlcyYjMzQ7LAogICAgJiMzNDttaW5peF9yZWFkX2ZvbGlvJiMzNDssCiAgICAmIzM0O21pbml4X3JlYWRhaGVhZCYjMzQ7LAogICAgJiMzNDttaW5peF9ibWFwJiMzNDssCiAgICAmIzM0O19fcGFnZV9zeW1saW5rJiMzNDssCiAgICAmIzM0O21pbml4X2dldF9saW5rJiMzNDssCiAgICAmIzM0O21pbml4X2ZyZWVfbGluayYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbXBsZW1lbnRzIGlvbWFwLWJhc2VkIGRpcmVjdCBJL08gYW5kIGJ1ZmZlcmVkIEkvTyBmb3IgdGhlIG1pbml4IGZpbGVzeXN0ZW0sIHdoaWNoIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gdGhlIGNvcmUgZmlsZXN5c3RlbSBsb2dpYy4gSXQgbW9kaWZpZXMgcmVhZC93cml0ZSBwYXRocywgYmxvY2sgbWFwcGluZywgYW5kIHN5bWxpbmsgaGFuZGxpbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0CiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSwKICAgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGE0NGVlZjg2ZmRhNGI3Mzc1NzZjMjgzYWQwNWU0OGQ5MWJiYjIxYTUKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgU3VuIEp1biAyOCAwNTozMzowMiAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2ZzL21pbml4L2ZpbGUuYyBiL2ZzL21pbml4L2ZpbGUuYwppbmRleCA4NmU1OTQzY2QyZmY3NC4uYjA3Yzg1M2ZhNDNhYmMgMTAwNjQ0Ci0tLSBhL2ZzL21pbml4L2ZpbGUuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9taW5peC9maWxlLmMKQEAgLTE3LDIxICYjNDM7MTcsMTY2IEBAIGludCBtaW5peF9mc3luYyhzdHJ1Y3QgZmlsZSAqZmlsZSwgbG9mZl90IHN0YXJ0LCBsb2ZmX3QgZW5kLCBpbnQgZGF0YXN5bmMpCiAJCQlzdGFydCwgZW5kLCBkYXRhc3luYyk7CiB9CiAKJiM0MztzdGF0aWMgc3NpemVfdCBtaW5peF9kaW9fcmVhZF9pdGVyKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICp0bykKJiM0Mzt7CiYjNDM7CXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBpb2NiLSZndDtraV9maWxwLSZndDtmX21hcHBpbmctJmd0O2hvc3Q7CiYjNDM7CXNzaXplX3QgcmV0OwomIzQzOwomIzQzOwlpbm9kZV9sb2NrX3NoYXJlZChpbm9kZSk7CiYjNDM7CiYjNDM7CWNvbnN0IHN0cnVjdCBpb21hcF9vcHMgKm9wcyA9IG1pbml4X2lvbWFwX29wc192ZXIoaW5vZGUpOwomIzQzOwomIzQzOwlyZXQgPSBpb21hcF9kaW9fcncoaW9jYiwgdG8sIG9wcywgTlVMTCwgMCwgTlVMTCwgMCk7CiYjNDM7CWlub2RlX3VubG9ja19zaGFyZWQoaW5vZGUpOwomIzQzOwlyZXR1cm4gcmV0OwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IG1pbml4X2Rpb193cml0ZV9lbmRfaW8oc3RydWN0IGtpb2NiICppb2NiLCBzc2l6ZV90IHNpemUsIGludCBlcnJvciwKJiM0MzsJCXVuc2lnbmVkIGludCBmbGFncykKJiM0Mzt7CiYjNDM7CXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBmaWxlX2lub2RlKGlvY2ItJmd0O2tpX2ZpbHApOwomIzQzOwlsb2ZmX3QgcG9zID0gaW9jYi0mZ3Q7a2lfcG9zOwomIzQzOwomIzQzOwlpZiAoZXJyb3IpCiYjNDM7CQlyZXR1cm4gZXJyb3I7CiYjNDM7CiYjNDM7CXBvcyAmIzQzOz0gc2l6ZTsKJiM0MzsJaWYgKHNpemUgJmFtcDsmYW1wOyBwb3MgJmd0OyBpX3NpemVfcmVhZChpbm9kZSkpIHsKJiM0MzsJCWlfc2l6ZV93cml0ZShpbm9kZSwgcG9zKTsKJiM0MzsJCW1hcmtfaW5vZGVfZGlydHkoaW5vZGUpOwomIzQzOwl9CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IGlvbWFwX2Rpb19vcHMgbWluaXhfZGlvX3dyaXRlX29wcyA9IHsKJiM0MzsJLmVuZF9pbyA9IG1pbml4X2Rpb193cml0ZV9lbmRfaW8sCiYjNDM7fTsKJiM0MzsKJiM0MztzdGF0aWMgc3NpemVfdCBtaW5peF9kaW9fd3JpdGVfaXRlcihzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqZnJvbSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBpb2NiLSZndDtraV9maWxwLSZndDtmX21hcHBpbmctJmd0O2hvc3Q7CiYjNDM7CXNzaXplX3QgcmV0OwomIzQzOwl1bnNpZ25lZCBpbnQgZmxhZ3MgPSAwOwomIzQzOwl1bnNpZ25lZCBsb25nIGJsb2Nrc2l6ZSA9IGlub2RlLSZndDtpX3NiLSZndDtzX2Jsb2Nrc2l6ZTsKJiM0MzsKJiM0MzsJaW5vZGVfbG9jayhpbm9kZSk7CiYjNDM7CXJldCA9IGdlbmVyaWNfd3JpdGVfY2hlY2tzKGlvY2IsIGZyb20pOwomIzQzOwlpZiAocmV0ICZsdDs9IDApCiYjNDM7CQlnb3RvIG91dF91bmxvY2s7CiYjNDM7CiYjNDM7CXJldCA9IGtpb2NiX21vZGlmaWVkKGlvY2IpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJZ290byBvdXRfdW5sb2NrOwomIzQzOwomIzQzOwlpZiAoaW9jYi0mZ3Q7a2lfcG9zICYjNDM7IGlvdl9pdGVyX2NvdW50KGZyb20pICZndDsgaV9zaXplX3JlYWQoaW5vZGUpIHx8CiYjNDM7CQkhSVNfQUxJR05FRChpb2NiLSZndDtraV9wb3MgfCBpb3ZfaXRlcl9hbGlnbm1lbnQoZnJvbSksIGJsb2Nrc2l6ZSkpCiYjNDM7CQlmbGFncyB8PSBJT01BUF9ESU9fRk9SQ0VfV0FJVDsKJiM0MzsKJiM0MzsJY29uc3Qgc3RydWN0IGlvbWFwX29wcyAqb3BzID0gbWluaXhfaW9tYXBfb3BzX3Zlcihpbm9kZSk7CiYjNDM7CiYjNDM7CXJldCA9IGlvbWFwX2Rpb19ydyhpb2NiLCBmcm9tLCBvcHMsCiYjNDM7CQkmYW1wO21pbml4X2Rpb193cml0ZV9vcHMsIGZsYWdzLCBOVUxMLCAwKTsKJiM0MzsJaWYgKHJldCA9PSAtRU5PVEJMSykKJiM0MzsJCXJldCA9IDA7IC8qIGZhbGxiYWNrIHRvIGJ1ZmZlcmVkICovCiYjNDM7CiYjNDM7CWlmIChyZXQgJmd0Oz0gMCAmYW1wOyZhbXA7IGlvdl9pdGVyX2NvdW50KGZyb20pKSB7CiYjNDM7CQlsb2ZmX3QgcG9zOwomIzQzOwkJbG9mZl90IGVuZGJ5dGU7CiYjNDM7CQlzc2l6ZV90IHN0YXR1czsKJiM0MzsKJiM0MzsJCWlvY2ItJmd0O2tpX2ZsYWdzICZhbXA7PSB+SU9DQl9ESVJFQ1Q7CiYjNDM7CQlwb3MgPSBpb2NiLSZndDtraV9wb3M7CiYjNDM7CQlzdGF0dXMgPSBpb21hcF9maWxlX2J1ZmZlcmVkX3dyaXRlKGlvY2IsIGZyb20sIG9wcywKJiM0MzsJCQlOVUxMLCBOVUxMKTsKJiM0MzsJCWlmICh1bmxpa2VseShzdGF0dXMgJmx0OyAwKSkgewomIzQzOwkJCXJldCA9IHN0YXR1czsKJiM0MzsJCQlnb3RvIG91dF91bmxvY2s7CiYjNDM7CQl9CiYjNDM7CiYjNDM7CQlyZXQgJiM0Mzs9IHN0YXR1czsKJiM0MzsJCWVuZGJ5dGUgPSBwb3MgJiM0Mzsgc3RhdHVzIC0gMTsKJiM0MzsJCXN0YXR1cyA9IGZpbGVtYXBfd3JpdGVfYW5kX3dhaXRfcmFuZ2UoaW5vZGUtJmd0O2lfbWFwcGluZywgcG9zLCBlbmRieXRlKTsKJiM0MzsJCWlmICghc3RhdHVzKSB7CiYjNDM7CQkJaW52YWxpZGF0ZV9tYXBwaW5nX3BhZ2VzKGlub2RlLSZndDtpX21hcHBpbmcsCiYjNDM7CQkJCXBvcyAmZ3Q7Jmd0OyBQQUdFX1NISUZULAomIzQzOwkJCQllbmRieXRlICZndDsmZ3Q7IFBBR0VfU0hJRlQpOwomIzQzOwkJCWlmIChyZXQgJmd0OyAwKQomIzQzOwkJCQlyZXQgPSBnZW5lcmljX3dyaXRlX3N5bmMoaW9jYiwgcmV0KTsKJiM0MzsJCX0gZWxzZSB7CiYjNDM7CQkJcmV0ID0gc3RhdHVzOwomIzQzOwkJfQomIzQzOwl9CiYjNDM7CiYjNDM7b3V0X3VubG9jazoKJiM0MzsJaW5vZGVfdW5sb2NrKGlub2RlKTsKJiM0MzsJcmV0dXJuIHJldDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHNzaXplX3QgbWluaXhfZmlsZV9yZWFkX2l0ZXIoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKnRvKQomIzQzO3sKJiM0MzsJaWYgKGlvY2ItJmd0O2tpX2ZsYWdzICZhbXA7IElPQ0JfRElSRUNUKQomIzQzOwkJcmV0dXJuIG1pbml4X2Rpb19yZWFkX2l0ZXIoaW9jYiwgdG8pOwomIzQzOwomIzQzOwlyZXR1cm4gZ2VuZXJpY19maWxlX3JlYWRfaXRlcihpb2NiLCB0byk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBzc2l6ZV90IG1pbml4X2ZpbGVfd3JpdGVfaXRlcihzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqZnJvbSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBpb2NiLSZndDtraV9maWxwLSZndDtmX21hcHBpbmctJmd0O2hvc3Q7CiYjNDM7CXNzaXplX3QgcmV0OwomIzQzOwomIzQzOwkvKiBtaW5peF9kaW9fd3JpdGVfaXRlciBhbHNvIGxvY2tzIHRoZSBpbm9kZSBhbmQgYXBwZWFycyB0byBkbyB0aGUgc2FtZQomIzQzOwkgKiBnZW5lcmFsIHNvcnRzIG9mIGNoZWNrcyBhcyB0aGlzLCBzbyBqdXN0IHJldHVybiBkaXJlY3RseSBmcm9tIHRoZXJlLgomIzQzOwkgKi8KJiM0MzsJaWYgKGlvY2ItJmd0O2tpX2ZsYWdzICZhbXA7IElPQ0JfRElSRUNUKQomIzQzOwkJcmV0dXJuIG1pbml4X2Rpb193cml0ZV9pdGVyKGlvY2IsIGZyb20pOwomIzQzOwomIzQzOwlpbm9kZV9sb2NrKGlub2RlKTsKJiM0MzsJcmV0ID0gZ2VuZXJpY193cml0ZV9jaGVja3MoaW9jYiwgZnJvbSk7CiYjNDM7CWlmIChyZXQgJmx0Oz0gMCkKJiM0MzsJCWdvdG8gdW5sb2NrOwomIzQzOwomIzQzOwlyZXQgPSBmaWxlX21vZGlmaWVkKGlvY2ItJmd0O2tpX2ZpbHApOwomIzQzOwlpZiAocmV0KQomIzQzOwkJZ290byB1bmxvY2s7CiYjNDM7CiYjNDM7CWNvbnN0IHN0cnVjdCBpb21hcF9vcHMgKm9wcyA9IG1pbml4X2lvbWFwX29wc192ZXIoaW5vZGUpOwomIzQzOwomIzQzOwlyZXQgPSBpb21hcF9maWxlX2J1ZmZlcmVkX3dyaXRlKGlvY2IsIGZyb20sIG9wcywKJiM0MzsJCQlOVUxMLCBOVUxMKTsKJiM0MzsKJiM0MzsJaWYgKHJldCAmZ3Q7IDApCiYjNDM7CQlyZXQgPSBnZW5lcmljX3dyaXRlX3N5bmMoaW9jYiwgcmV0KTsKJiM0MzsKJiM0Mzt1bmxvY2s6CiYjNDM7CWlub2RlX3VubG9jayhpbm9kZSk7CiYjNDM7CXJldHVybiByZXQ7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgbWluaXhfZmlsZV9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxwKQomIzQzO3sKJiM0MzsJZmlscC0mZ3Q7Zl9tb2RlIHw9IEZNT0RFX0NBTl9PRElSRUNUOwomIzQzOwlyZXR1cm4gZ2VuZXJpY19maWxlX29wZW4oaW5vZGUsIGZpbHApOwomIzQzO30KJiM0MzsKIC8qCi0gKiBXZSBoYXZlIG1vc3RseSBOVUxMcyBoZXJlOiB0aGUgY3VycmVudCBkZWZhdWx0cyBhcmUgT0sgZm9yCi0gKiB0aGUgbWluaXggZmlsZXN5c3RlbS4KJiM0MzsgKiBXZSBzdGlsbCBoYXZlIHNvbWUgTlVMTHMgaGVyZSwgYnV0IG5vdCBhcyBtYW55IG9mIHRoZSBjdXJyZW50IGRlZmF1bHRzIGFyZQomIzQzOyAqIHN0aWxsIE9LIGZvciB0aGUgbWluaXggZmlsZXN5c3RlbS4KICAqLwomIzQzOwogY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBtaW5peF9maWxlX29wZXJhdGlvbnMgPSB7CiAJLmxsc2VlawkJPSBnZW5lcmljX2ZpbGVfbGxzZWVrLAotCS5yZWFkX2l0ZXIJPSBnZW5lcmljX2ZpbGVfcmVhZF9pdGVyLAotCS53cml0ZV9pdGVyCT0gZ2VuZXJpY19maWxlX3dyaXRlX2l0ZXIsCiYjNDM7CS5yZWFkX2l0ZXIJPSBtaW5peF9maWxlX3JlYWRfaXRlciwKJiM0MzsJLndyaXRlX2l0ZXIJPSBtaW5peF9maWxlX3dyaXRlX2l0ZXIsCiAJLm1tYXBfcHJlcGFyZQk9IGdlbmVyaWNfZmlsZV9tbWFwX3ByZXBhcmUsCiYjNDM7CS5vcGVuCQk9IG1pbml4X2ZpbGVfb3BlbiwKIAkuZnN5bmMJCT0gbWluaXhfZnN5bmMsCiAJLnNwbGljZV9yZWFkCT0gZmlsZW1hcF9zcGxpY2VfcmVhZCwKJiM0MzsJLnNwbGljZV93cml0ZQk9IGl0ZXJfZmlsZV9zcGxpY2Vfd3JpdGUsCiB9OwogCi1zdGF0aWMgaW50IG1pbml4X3NldGF0dHIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsCi0JCQkgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3QgaWF0dHIgKmF0dHIpCiYjNDM7aW50IG1pbml4X3NldGF0dHIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwKJiM0MzsJc3RydWN0IGlhdHRyICphdHRyKQogewogCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBkX2lub2RlKGRlbnRyeSk7CiAJaW50IGVycm9yOwpkaWZmIC0tZ2l0IGEvZnMvbWluaXgvaW5vZGUuYyBiL2ZzL21pbml4L2lub2RlLmMKaW5kZXggYzMwY2M1OTA2OThkNmYuLmIxMTNjNDQ3NjRmZjk1IDEwMDY0NAotLS0gYS9mcy9taW5peC9pbm9kZS5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL21pbml4L2lub2RlLmMKQEAgLTQzNiw3ICYjNDM7NDM2LDMyIEBAIHN0YXRpYyBpbnQgbWluaXhfc3RhdGZzKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGtzdGF0ZnMgKmJ1ZikKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBtaW5peF9nZXRfYmxvY2soc3RydWN0IGlub2RlICppbm9kZSwgc2VjdG9yX3QgYmxvY2ssCiYjNDM7c3RhdGljIHNzaXplX3QgbWluaXhfd3JpdGViYWNrX3JhbmdlKHN0cnVjdCBpb21hcF93cml0ZXBhZ2VfY3R4ICp3cGMsCiYjNDM7CXN0cnVjdCBmb2xpbyAqZm9saW8sIHU2NCBwb3MsIHVuc2lnbmVkIGludCBsZW4sIHU2NCBlbmRfcG9zKQomIzQzO3sKJiM0MzsJaW50IGVycm9yOwomIzQzOwomIzQzOwlpZiAocG9zICZsdDsgd3BjLSZndDtpb21hcC5vZmZzZXQgfHwKJiM0MzsJCQlwb3MgJmd0Oz0gd3BjLSZndDtpb21hcC5vZmZzZXQgJiM0Mzsgd3BjLSZndDtpb21hcC5sZW5ndGgpIHsKJiM0MzsJCWlmIChJTk9ERV9WRVJTSU9OKHdwYy0mZ3Q7aW5vZGUpID09IE1JTklYX1YxKQomIzQzOwkJCWVycm9yID0gVjFfbWluaXhfaW9tYXBfYmVnaW4od3BjLSZndDtpbm9kZSwgcG9zLCBsZW4sIElPTUFQX1dSSVRFLAomIzQzOwkJCQkmYW1wO3dwYy0mZ3Q7aW9tYXAsIE5VTEwpOwomIzQzOwkJZWxzZQomIzQzOwkJCWVycm9yID0gVjJfbWluaXhfaW9tYXBfYmVnaW4od3BjLSZndDtpbm9kZSwgcG9zLCBsZW4sIElPTUFQX1dSSVRFLAomIzQzOwkJCQkmYW1wO3dwYy0mZ3Q7aW9tYXAsIE5VTEwpOwomIzQzOwkJaWYgKGVycm9yKQomIzQzOwkJCXJldHVybiBlcnJvcjsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gaW9tYXBfYWRkX3RvX2lvZW5kKHdwYywgZm9saW8sIHBvcywgZW5kX3BvcywgbGVuKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBpb21hcF93cml0ZWJhY2tfb3BzIG1pbml4X3dyaXRlYmFja19vcHMgPSB7CiYjNDM7CS53cml0ZWJhY2tfcmFuZ2UgPSBtaW5peF93cml0ZWJhY2tfcmFuZ2UsCiYjNDM7CS53cml0ZWJhY2tfc3VibWl0ID0gaW9tYXBfaW9lbmRfd3JpdGViYWNrX3N1Ym1pdCwKJiM0Mzt9OwomIzQzOwomIzQzO2ludCBtaW5peF9nZXRfYmxvY2soc3RydWN0IGlub2RlICppbm9kZSwgc2VjdG9yX3QgYmxvY2ssCiAJCSAgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoX3Jlc3VsdCwgaW50IGNyZWF0ZSkKIHsKIAlpZiAoSU5PREVfVkVSU0lPTihpbm9kZSkgPT0gTUlOSVhfVjEpCkBAIC00NDUsMTcgJiM0Mzs0NzAsNDUgQEAgc3RhdGljIGludCBtaW5peF9nZXRfYmxvY2soc3RydWN0IGlub2RlICppbm9kZSwgc2VjdG9yX3QgYmxvY2ssCiAJCXJldHVybiBWMl9taW5peF9nZXRfYmxvY2soaW5vZGUsIGJsb2NrLCBiaF9yZXN1bHQsIGNyZWF0ZSk7CiB9CiAKLXN0YXRpYyBpbnQgbWluaXhfd3JpdGVwYWdlcyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywKJiM0MzsvKiBUaGUgb2xkIG1pbml4X3dyaXRlcGFnZXMsIHByZXNlcnZlZCBmb3IgZGlyZWN0b3J5IG9wZXJhdGlvbnMuICovCiYjNDM7c3RhdGljIGludCBtaW5peF9ibG9ja193cml0ZXBhZ2VzKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLAogCQlzdHJ1Y3Qgd3JpdGViYWNrX2NvbnRyb2wgKndiYykKIHsKIAlyZXR1cm4gbXBhZ2Vfd3JpdGVwYWdlcyhtYXBwaW5nLCB3YmMsIG1pbml4X2dldF9ibG9jayk7CiB9CiAKJiM0MztzdGF0aWMgaW50IG1pbml4X3dyaXRlcGFnZXMoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsCiYjNDM7CQlzdHJ1Y3Qgd3JpdGViYWNrX2NvbnRyb2wgKndiYykKJiM0Mzt7CiYjNDM7CXN0cnVjdCBpb21hcF93cml0ZXBhZ2VfY3R4IHdwYyA9IHsKJiM0MzsJCS5pbm9kZSA9IG1hcHBpbmctJmd0O2hvc3QsCiYjNDM7CQkud2JjID0gd2JjLAomIzQzOwkJLm9wcyA9ICZhbXA7bWluaXhfd3JpdGViYWNrX29wcywKJiM0MzsJfTsKJiM0MzsJcmV0dXJuIGlvbWFwX3dyaXRlcGFnZXMoJmFtcDt3cGMpOwomIzQzO30KJiM0MzsKIHN0YXRpYyBpbnQgbWluaXhfcmVhZF9mb2xpbyhzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IGZvbGlvICpmb2xpbykKJiM0Mzt7CiYjNDM7CWNvbnN0IHN0cnVjdCBpb21hcF9vcHMgKm9wcyA9IG1pbml4X2lvbWFwX29wc192ZXIoZm9saW8tJmd0O21hcHBpbmctJmd0O2hvc3QpOwomIzQzOwomIzQzOwlpb21hcF9iaW9fcmVhZF9mb2xpbyhmb2xpbywgb3BzKTsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzOy8qIFRoZSBvbGQgbWluaXhfcmVhZF9mb2xpbywgcHJlc2VydmVkIGZvciBkaXJlY3Rvcnkgb3BlcmF0aW9ucy4gKi8KJiM0MztzdGF0aWMgaW50IG1pbml4X2Jsb2NrX3JlYWRfZm9saW8oc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBmb2xpbyAqZm9saW8pCiB7CiAJcmV0dXJuIGJsb2NrX3JlYWRfZnVsbF9mb2xpbyhmb2xpbywgbWluaXhfZ2V0X2Jsb2NrKTsKIH0KIAomIzQzO3N0YXRpYyB2b2lkIG1pbml4X3JlYWRhaGVhZChzdHJ1Y3QgcmVhZGFoZWFkX2NvbnRyb2wgKnJhYykKJiM0Mzt7CiYjNDM7CWNvbnN0IHN0cnVjdCBpb21hcF9vcHMgKm9wcyA9IG1pbml4X2lvbWFwX29wc192ZXIocmFjLSZndDttYXBwaW5nLSZndDtob3N0KTsKJiM0MzsKJiM0MzsJaW9tYXBfYmlvX3JlYWRhaGVhZChyYWMsIG9wcyk7CiYjNDM7fQomIzQzOwogaW50IG1pbml4X3ByZXBhcmVfY2h1bmsoc3RydWN0IGZvbGlvICpmb2xpbywgbG9mZl90IHBvcywgdW5zaWduZWQgbGVuKQogewogCXJldHVybiBfX2Jsb2NrX3dyaXRlX2JlZ2luKGZvbGlvLCBwb3MsIGxlbiwgbWluaXhfZ2V0X2Jsb2NrKTsKQEAgLTQ4NywyNCAmIzQzOzU0MCw0MiBAQCBzdGF0aWMgaW50IG1pbml4X3dyaXRlX2JlZ2luKGNvbnN0IHN0cnVjdCBraW9jYiAqaW9jYiwKIAogc3RhdGljIHNlY3Rvcl90IG1pbml4X2JtYXAoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIHNlY3Rvcl90IGJsb2NrKQogewotCXJldHVybiBnZW5lcmljX2Jsb2NrX2JtYXAobWFwcGluZyxibG9jayxtaW5peF9nZXRfYmxvY2spOwomIzQzOwljb25zdCBzdHJ1Y3QgaW9tYXBfb3BzICpvcHMgPSBtaW5peF9pb21hcF9vcHNfdmVyKG1hcHBpbmctJmd0O2hvc3QpOwomIzQzOwomIzQzOwlyZXR1cm4gaW9tYXBfYm1hcChtYXBwaW5nLCBibG9jaywgb3BzKTsKIH0KIAotc3RhdGljIGNvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgbWluaXhfYW9wcyA9IHsKLQkuZGlydHlfZm9saW8JPSBibG9ja19kaXJ0eV9mb2xpbywKLQkuaW52YWxpZGF0ZV9mb2xpbyA9IGJsb2NrX2ludmFsaWRhdGVfZm9saW8sCiYjNDM7Y29uc3Qgc3RydWN0IGFkZHJlc3Nfc3BhY2Vfb3BlcmF0aW9ucyBtaW5peF9hb3BzID0gewomIzQzOwkuZGlydHlfZm9saW8JPSBpb21hcF9kaXJ0eV9mb2xpbywKJiM0MzsJLmludmFsaWRhdGVfZm9saW8gPSBpb21hcF9pbnZhbGlkYXRlX2ZvbGlvLAogCS5yZWFkX2ZvbGlvID0gbWluaXhfcmVhZF9mb2xpbywKJiM0MzsJLnJlYWRhaGVhZCA9IG1pbml4X3JlYWRhaGVhZCwKIAkud3JpdGVwYWdlcyA9IG1pbml4X3dyaXRlcGFnZXMsCiYjNDM7CS5taWdyYXRlX2ZvbGlvID0gZmlsZW1hcF9taWdyYXRlX2ZvbGlvLAomIzQzOwkuYm1hcCA9IG1pbml4X2JtYXAsCiYjNDM7CS5pc19wYXJ0aWFsbHlfdXB0b2RhdGUgPSBpb21hcF9pc19wYXJ0aWFsbHlfdXB0b2RhdGUsCiYjNDM7CS5yZWxlYXNlX2ZvbGlvID0gaW9tYXBfcmVsZWFzZV9mb2xpbywKJiM0MzsJLmVycm9yX3JlbW92ZV9mb2xpbyA9IGdlbmVyaWNfZXJyb3JfcmVtb3ZlX2ZvbGlvLAomIzQzO307CiYjNDM7CiYjNDM7LyogQSBzcGVjaWFsIGFvcHMgZm9yIGRpcmVjdG9yaWVzIHRoYXQga2VlcHMgdXNpbmcgdGhlIGJ1ZmZlciBoZWFkIGNodW5rcywgYXQKJiM0MzsgKiBsZWFzdCBmb3IgdGhlIHRpbWUgYmVpbmcuCiYjNDM7ICovCiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgbWluaXhfZGlyX2FvcHMgPSB7CiYjNDM7CS5kaXJ0eV9mb2xpbyA9IGJsb2NrX2RpcnR5X2ZvbGlvLAomIzQzOwkuaW52YWxpZGF0ZV9mb2xpbyA9IGJsb2NrX2ludmFsaWRhdGVfZm9saW8sCiYjNDM7CS5yZWFkX2ZvbGlvID0gbWluaXhfYmxvY2tfcmVhZF9mb2xpbywKIAkud3JpdGVfYmVnaW4gPSBtaW5peF93cml0ZV9iZWdpbiwKIAkud3JpdGVfZW5kID0gZ2VuZXJpY193cml0ZV9lbmQsCiAJLm1pZ3JhdGVfZm9saW8gPSBidWZmZXJfbWlncmF0ZV9mb2xpbywKIAkuYm1hcCA9IG1pbml4X2JtYXAsCi0JLmRpcmVjdF9JTyA9IG5vb3BfZGlyZWN0X0lPCiYjNDM7CS53cml0ZXBhZ2VzID0gbWluaXhfYmxvY2tfd3JpdGVwYWdlcywKIH07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBtaW5peF9zeW1saW5rX2lub2RlX29wZXJhdGlvbnMgPSB7Ci0JLmdldF9saW5rCT0gcGFnZV9nZXRfbGluaywKJiM0MzsJLmdldF9saW5rCT0gbWluaXhfZ2V0X2xpbmssCiAJLmdldGF0dHIJPSBtaW5peF9nZXRhdHRyLAomIzQzOwkuc2V0YXR0cgk9IG1pbml4X3NldGF0dHIsCiB9OwogCiB2b2lkIG1pbml4X3NldF9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBkZXZfdCByZGV2KQpAQCAtNTE2LDcgJiM0Mzs1ODcsNyBAQCB2b2lkIG1pbml4X3NldF9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBkZXZfdCByZGV2KQogCX0gZWxzZSBpZiAoU19JU0RJUihpbm9kZS0mZ3Q7aV9tb2RlKSkgewogCQlpbm9kZS0mZ3Q7aV9vcCA9ICZhbXA7bWluaXhfZGlyX2lub2RlX29wZXJhdGlvbnM7CiAJCWlub2RlLSZndDtpX2ZvcCA9ICZhbXA7bWluaXhfZGlyX29wZXJhdGlvbnM7Ci0JCWlub2RlLSZndDtpX21hcHBpbmctJmd0O2Ffb3BzID0gJmFtcDttaW5peF9hb3BzOwomIzQzOwkJaW5vZGUtJmd0O2lfbWFwcGluZy0mZ3Q7YV9vcHMgPSAmYW1wO21pbml4X2Rpcl9hb3BzOwogCX0gZWxzZSBpZiAoU19JU0xOSyhpbm9kZS0mZ3Q7aV9tb2RlKSkgewogCQlpbm9kZS0mZ3Q7aV9vcCA9ICZhbXA7bWluaXhfc3ltbGlua19pbm9kZV9vcGVyYXRpb25zOwogCQlpbm9kZV9ub2hpZ2htZW0oaW5vZGUpOwpAQCAtNzY4LDQgJiM0Mzs4MzksMyBAQCBtb2R1bGVfaW5pdChpbml0X21pbml4X2ZzKQogbW9kdWxlX2V4aXQoZXhpdF9taW5peF9mcykKIE1PRFVMRV9ERVNDUklQVElPTigmIzM0O01pbml4IGZpbGUgc3lzdGVtJiMzNDspOwogTU9EVUxFX0xJQ0VOU0UoJiMzNDtHUEwmIzM0Oyk7Ci0KZGlmZiAtLWdpdCBhL2ZzL21pbml4L2lvbWFwLmMgYi9mcy9taW5peC9pb21hcC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwLi43YmIwNDM5ZTM2Njk5NgotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL21pbml4L2lvbWFwLmMKQEAgLTAsMCAmIzQzOzEsMTE0IEBACiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seQomIzQzOy8qCiYjNDM7ICogaW9tYXAgZnVuY3Rpb25zIGZvciBtaW5peC4gQXQgbGVhc3QgdGhlIGZpcnN0IHBhc3Mgb2YgdGhpcyBmaWxlIHdhcyB0YWtlbgomIzQzOyAqIGZyb20gdGhlIHhpYWZzIGlvbWFwLmMsIHdoaWNoIGlzIGZpdHRpbmcgc2luY2UgdGhlIHhpYWZzIG1vZHVsZSBpbiB0dXJuCiYjNDM7ICogYm9ycm93ZWQgaGVhdmlseSBmcm9tIHRoZSBtb2Rlcm5pemVkIG1pbml4IGZzIGtlcm5lbCBtb2R1bGUuCiYjNDM7ICovCiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBtaW5peF9pb21hcF9iZWdpbiAtIG1hcCBhIGZpbGUgcmFuZ2UgdG8gZGlzayBibG9ja3MuIEl0IGFjdHMgYXMgYSByZXBsYWNlbWVudAomIzQzOyAqIGZvciBnZXRfYmxvY2sgaW4gaXRyZWVfY29tbW9uLmMsIGF0IGxlYXN0IGluIHRoZSBpbXBvcnRhbnQgd2F5cywgYW5kIGlzCiYjNDM7ICogYWRhcHRlZCBmcm9tIGl0LCBidXQgaXQgdXNlcyBpb21hcCBpbnN0ZWFkIG9mIGJ1ZmZlcl9oZWFkLiBUaGlzIGlzIHRha2VuCiYjNDM7ICogZGlyZWN0bHkgZnJvbSB0aGUgb3V0LW9mLXRyZWUgeGlhZnMgaW9tYXAgY2hhbmdlcywgYW5kIHRoZSBleGZhdCBpb21hcAomIzQzOyAqIGNoYW5nZXMgd2VyZSBhbiBpbnNwaXJhdGlvbiBmb3IgdGhhdC4KJiM0MzsgKi8KJiM0MztzdGF0aWMgaW50IG1pbml4X2lvbWFwX2JlZ2luKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfdCBvZmZzZXQsIGxvZmZfdCBsZW5ndGgsCiYjNDM7CXVuc2lnbmVkIGludCBmbGFncywgc3RydWN0IGlvbWFwICppb21hcCwgc3RydWN0IGlvbWFwICpzcmNtYXApCiYjNDM7ewomIzQzOwlzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiID0gaW5vZGUtJmd0O2lfc2I7CiYjNDM7CXVuc2lnbmVkIGludCBibGtiaXRzID0gc2ItJmd0O3NfYmxvY2tzaXplX2JpdHM7CiYjNDM7CXNlY3Rvcl90IGlibG9jayA9IG9mZnNldCAmZ3Q7Jmd0OyBibGtiaXRzOwomIzQzOwlpbnQgY3JlYXRlID0gZmxhZ3MgJmFtcDsgSU9NQVBfV1JJVEU7CiYjNDM7CiYjNDM7CS8qIE1vc3RseSB0YWtlbiBmcm9tIG1vZGVybi14aWFmcyBpdHJlZS5jIGdldF9ibG9jayB3aXRoIGVsZW1lbnRzIGZyb20KJiM0MzsJICogc2ltaWxhciBleGZhdCBvcGVyYXRpb25zLgomIzQzOwkgKi8KJiM0MzsJaW50IG9mZnNldHNbREVQVEhdOwomIzQzOwlJbmRpcmVjdCBjaGFpbltERVBUSF07CiYjNDM7CUluZGlyZWN0ICpwYXJ0aWFsOwomIzQzOwlpbnQgZGVwdGggPSBibG9ja190b19wYXRoKGlub2RlLCBpYmxvY2ssIG9mZnNldHMpOwomIzQzOwlpbnQgbGVmdDsKJiM0MzsJaW50IGVyciA9IC1FSU87CiYjNDM7CiYjNDM7CXNlY3Rvcl90IHBoeXM7CiYjNDM7CiYjNDM7CS8qIGJsb2NrIGlzIGJleW9uZCBtYXggZmlsZSBzaXplICovCiYjNDM7CWlmIChkZXB0aCA9PSAwKQomIzQzOwkJZ290byBvdXQ7CiYjNDM7CiYjNDM7CWlvbWFwLSZndDtiZGV2ID0gaW5vZGUtJmd0O2lfc2ItJmd0O3NfYmRldjsKJiM0MzsKJiM0MztyZXJlYWQ6CiYjNDM7CXBhcnRpYWwgPSBnZXRfYnJhbmNoKGlub2RlLCBkZXB0aCwgb2Zmc2V0cywgY2hhaW4sICZhbXA7ZXJyKTsKJiM0MzsKJiM0MzsJLyogU2ltcGxlc3QgY2FzZSAtIGJsb2NrIGZvdW5kLCBubyBhbGxvY2F0aW9uIG5lZWRlZCAqLwomIzQzOwlpZiAoIXBhcnRpYWwpIHsKJiM0MzsJCS8qIEJpdCBvZiBhIHdlaXJkIG9yZGVyLCBidXQgaXQmIzM5O2xsIG1ha2Ugc2Vuc2Ugd2hlbiB5b3UgZ2V0IHRvCiYjNDM7CQkgKiB0aGUgYm90dG9tLgomIzQzOwkJICovCiYjNDM7CQlpb21hcC0mZ3Q7ZmxhZ3MgPSBJT01BUF9GX01FUkdFRDsKJiM0Mztnb3RfaXQ6CiYjNDM7CQlwaHlzID0gYmxvY2tfdG9fY3B1KGNoYWluW2RlcHRoIC0gMV0ua2V5KTsKJiM0MzsJCXBhcnRpYWwgPSBjaGFpbiYjNDM7ZGVwdGgtMTsKJiM0MzsJCS8qIFNldCB1cCB0aGUgaW9tYXAgc3RydWN0IGJlZm9yZSBjbGVhbmluZyB1cCAqLwomIzQzOwkJaW9tYXAtJmd0O3R5cGUgPSBJT01BUF9NQVBQRUQ7CiYjNDM7CQlpb21hcC0mZ3Q7YWRkciA9ICh1NjQpcGh5cyAmbHQ7Jmx0OyBibGtiaXRzOwomIzQzOwkJaW9tYXAtJmd0O2xlbmd0aCA9IDEgJmx0OyZsdDsgYmxrYml0czsKJiM0MzsJCWlvbWFwLSZndDtvZmZzZXQgPSAodTY0KWlibG9jayAmbHQ7Jmx0OyBibGtiaXRzOwomIzQzOwkJZ290byBjbGVhbnVwOwomIzQzOwl9CiYjNDM7CiYjNDM7CS8qIE5leHQgc2ltcGxlIGNhc2UgLSBwbGFpbiBsb29rdXAgb3IgZmFpbGVkIHJlYWQgb2YgaW5kaXJlY3QgYmxvY2sgKi8KJiM0MzsJaWYgKCFjcmVhdGUgfHwgZXJyID09IC1FSU8pIHsKJiM0MzsJCWlvbWFwLSZndDt0eXBlID0gSU9NQVBfSE9MRTsKJiM0MzsJCWlvbWFwLSZndDthZGRyID0gSU9NQVBfTlVMTF9BRERSOwomIzQzOwkJaW9tYXAtJmd0O2xlbmd0aCA9IDEgJmx0OyZsdDsgYmxrYml0czsKJiM0MzsJCWlvbWFwLSZndDtvZmZzZXQgPSAodTY0KWlibG9jayAmbHQ7Jmx0OyBibGtiaXRzOwomIzQzOwkJaW9tYXAtJmd0O2ZsYWdzID0gMDsKJiM0MztjbGVhbnVwOgomIzQzOwkJd2hpbGUgKHBhcnRpYWwgJmd0OyBjaGFpbikgewomIzQzOwkJCWJyZWxzZShwYXJ0aWFsLSZndDtiaCk7CiYjNDM7CQkJcGFydGlhbC0tOwomIzQzOwkJfQomIzQzO291dDoKJiM0MzsJCXJldHVybiBlcnI7CiYjNDM7CX0KJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogSW5kaXJlY3QgYmxvY2sgbWlnaHQgYmUgcmVtb3ZlZCBieSB0cnVuY2F0ZSB3aGlsZSB3ZSB3ZXJlCiYjNDM7CSAqIHJlYWRpbmcgaXQuIEhhbmRsaW5nIG9mIHRoYXQgY2FzZSAoZm9yZ2V0IHdoYXQgd2UmIzM5O3ZlIGdvdCBhbmQKJiM0MzsJICogcmVyZWFkKSBpcyB0YWtlbiBvdXQgb2YgdGhlIG1haW4gcGF0aC4KJiM0MzsJICovCiYjNDM7CWlmIChlcnIgPT0gLUVBR0FJTikKJiM0MzsJCWdvdG8gY2hhbmdlZDsKJiM0MzsKJiM0MzsJbGVmdCA9IChjaGFpbiAmIzQzOyBkZXB0aCkgLSBwYXJ0aWFsOwomIzQzOwllcnIgPSBhbGxvY19icmFuY2goaW5vZGUsIGxlZnQsIG9mZnNldHMgJiM0MzsgKHBhcnRpYWwgLSBjaGFpbiksIHBhcnRpYWwpOwomIzQzOwlpZiAoZXJyKQomIzQzOwkJZ290byBjbGVhbnVwOwomIzQzOwomIzQzOwlpZiAoc3BsaWNlX2JyYW5jaChpbm9kZSwgY2hhaW4sIHBhcnRpYWwsIGxlZnQpICZsdDsgMCkKJiM0MzsJCWdvdG8gY2hhbmdlZDsKJiM0MzsKJiM0MzsJLyogU3VjY2Vzc2Z1bCBhbGxvY2F0aW9uLCBtYXBwaW5nIGl0LiAqLwomIzQzOwlpb21hcC0mZ3Q7ZmxhZ3MgPSBJT01BUF9GX05FVzsKJiM0MzsJZ290byBnb3RfaXQ7CiYjNDM7CiYjNDM7Y2hhbmdlZDoKJiM0MzsJd2hpbGUgKHBhcnRpYWwgJmd0OyBjaGFpbikgewomIzQzOwkJYnJlbHNlKHBhcnRpYWwtJmd0O2JoKTsKJiM0MzsJCXBhcnRpYWwtLTsKJiM0MzsJfQomIzQzOwlnb3RvIHJlcmVhZDsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBtaW5peF9pb21hcF9lbmQgZW5kcyB1cCBiZWluZyBhIG5vcDsgc2luY2UgbWluaXggZG9lc24mIzM5O3QgaGF2ZSBhbnkgZXh0ZW50cyBvcgomIzQzOyAqIHRyYW5zYWN0aW9ucyB0byB3b3JyeSBhYm91dCwgdGhlcmUgaXNuJiMzOTt0IGFueXRoaW5nIHRvIHVwZGF0ZSBoZXJlLiBUaGUgb24tZGlzawomIzQzOyAqIGluZGlyZWN0IGJsb2NrcyBnZXQgZGlydGllZCBpbiBtaW5peF9pb21hcF9iZWdpbi4KJiM0MzsgKi8KJiM0MztzdGF0aWMgaW50IG1pbml4X2lvbWFwX2VuZChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb2ZmX3Qgb2Zmc2V0LCBsb2ZmX3QgbGVuZ3RoLAomIzQzOwlzc2l6ZV90IHdyaXR0ZW4sIHVuc2lnbmVkIGludCBmbGFncywgc3RydWN0IGlvbWFwICppb21hcCkKJiM0Mzt7CiYjNDM7CXJldHVybiAwOwomIzQzO30KZGlmZiAtLWdpdCBhL2ZzL21pbml4L2l0cmVlX2NvbW1vbi5jIGIvZnMvbWluaXgvaXRyZWVfY29tbW9uLmMKaW5kZXggYzNjZDJjNzVhZjljZWUuLjVhOGI3M2E3YmVkYTc4IDEwMDY0NAotLS0gYS9mcy9taW5peC9pdHJlZV9jb21tb24uYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9taW5peC9pdHJlZV9jb21tb24uYwpAQCAtMzExLDcgJiM0MzszMTEsMTYgQEAgc3RhdGljIGlubGluZSB2b2lkIHRydW5jYXRlIChzdHJ1Y3QgaW5vZGUgKiBpbm9kZSkKIAlsb25nIGlibG9jazsKIAogCWlibG9jayA9IChpbm9kZS0mZ3Q7aV9zaXplICYjNDM7IHNiLSZndDtzX2Jsb2Nrc2l6ZSAtMSkgJmd0OyZndDsgc2ItJmd0O3NfYmxvY2tzaXplX2JpdHM7Ci0JYmxvY2tfdHJ1bmNhdGVfcGFnZShpbm9kZS0mZ3Q7aV9tYXBwaW5nLCBpbm9kZS0mZ3Q7aV9zaXplLCBnZXRfYmxvY2spOwomIzQzOwomIzQzOwkvKiBEZXBlbmRpbmcgb24gd2hhdCBhZGRyZXNzIHNwYWNlIG9wZXJhdGlvbnMgYXJlIGJlaW5nIHVzZWQgYnkgdGhlCiYjNDM7CSAqIGlub2RlIGJlaW5nIHRydW5jYXRlZCwgd2UgbmVlZCB0byBlaXRoZXIgY2FsbCBpb21hcF90cnVuY2F0ZV9wYWdlIG9yCiYjNDM7CSAqIGJsb2NrX3RydW5jYXRlX3BhZ2UuCiYjNDM7CSAqLwomIzQzOwlpZiAoaW5vZGUtJmd0O2lfbWFwcGluZy0mZ3Q7YV9vcHMgPT0gJmFtcDttaW5peF9hb3BzKQomIzQzOwkJaW9tYXBfdHJ1bmNhdGVfcGFnZShpbm9kZSwgaW5vZGUtJmd0O2lfc2l6ZSwgTlVMTCwKJiM0MzsJCQltaW5peF9pb21hcF9vcHNfdmVyKGlub2RlKSwgTlVMTCwgTlVMTCk7CiYjNDM7CWVsc2UKJiM0MzsJCWJsb2NrX3RydW5jYXRlX3BhZ2UoaW5vZGUtJmd0O2lfbWFwcGluZywgaW5vZGUtJmd0O2lfc2l6ZSwgZ2V0X2Jsb2NrKTsKIAogCW4gPSBibG9ja190b19wYXRoKGlub2RlLCBpYmxvY2ssIG9mZnNldHMpOwogCWlmICghbikKZGlmZiAtLWdpdCBhL2ZzL21pbml4L2l0cmVlX3YxLmMgYi9mcy9taW5peC9pdHJlZV92MS5jCmluZGV4IDFmZWQ5MDYwNDJhYTg0Li41OGMyOWY0NDQzZDM3MiAxMDA2NDQKLS0tIGEvZnMvbWluaXgvaXRyZWVfdjEuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9taW5peC9pdHJlZV92MS5jCkBAIC00OSw2ICYjNDM7NDksMTggQEAgc3RhdGljIGludCBibG9ja190b19wYXRoKHN0cnVjdCBpbm9kZSAqIGlub2RlLCBsb25nIGJsb2NrLCBpbnQgb2Zmc2V0c1tERVBUSF0pCiB9CiAKICNpbmNsdWRlICYjMzQ7aXRyZWVfY29tbW9uLmMmIzM0OwomIzQzOy8qIE5PVEEgQkVORToKJiM0MzsgKgomIzQzOyAqIFRoaXMgaXMgaWNreSB0byBtZSwgYnV0IGF0IHRoZSBzYW1lIHRpbWUgaGF2aW5nIGl0IGJlIGEgc3RhbmRhbG9uZSBDIGZpbGUKJiM0MzsgKiB0aGF0JiMzOTtzIGNvbXBpbGVkIHRvIG9iamVjdCBmb3JtIGFuZCBsaW5rZWQgc2VwYXJhdGVseSBsaWtlIGl0IGlzIGluIHhpYWZzIGlzCiYjNDM7ICogbXVjaCBuYXN0aWVyIGluIG1pbml4IGJlY2F1c2Ugb2YgdGhlIGRpZmZlcmVudCB2ZXJzaW9ucyBvZiB0aGUgbWluaXggZnMgdGhhdAomIzQzOyAqIGhhdmUgc29tZSB2ZXJ5LCB2ZXJ5IGRpZmZlcmVudCBhc3BlY3RzLCBsaWtlIHRoZSBzaXplIG9mIGJsb2NrX3QuIEkgZG9uJiMzOTt0CiYjNDM7ICogbGlrZSBpdCwgYnV0IHNpbmNlIG1pbml4IGFscmVhZHkgaGFzIHRoaXMgcGF0dGVybiB3aGVyZSBhIGNvbW1vbiBpdHJlZSBmaWxlCiYjNDM7ICogaXMgaW5jbHVkZWQgaW4gdGhlIGl0cmVlX3YxIGFuZCBpdHJlZV92MihhbmQgdjMpIGZpbGVzLCBJJiMzOTttIGluY2x1ZGluZyBpb21hcC5jCiYjNDM7ICogaW4gdGhlc2UgZmlsZXMgYXMgd2VsbC4gSXQgZG9lcyBhdCBsZWFzdCBhdm9pZCBleHBvcnRpbmcgc29tZSBjdXJyZW50bHkKJiM0MzsgKiBzdGF0aWMgZnVuY3Rpb25zIHRoYXQgYXJlbiYjMzk7dCBuZWVkZWQgYW55d2hlcmUgYnV0IGl0cmVlX2NvbW1vbi5jIGFuZCBpb21hcC5jLgomIzQzOyAqLwomIzQzOyNpbmNsdWRlICYjMzQ7aW9tYXAuYyYjMzQ7CiAKIGludCBWMV9taW5peF9nZXRfYmxvY2soc3RydWN0IGlub2RlICogaW5vZGUsIGxvbmcgYmxvY2ssCiAJCQlzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoX3Jlc3VsdCwgaW50IGNyZWF0ZSkKQEAgLTYxLDcgJiM0Mzs3MywxOCBAQCB2b2lkIFYxX21pbml4X3RydW5jYXRlKHN0cnVjdCBpbm9kZSAqIGlub2RlKQogCXRydW5jYXRlKGlub2RlKTsKIH0KIAotdW5zaWduZWQgVjFfbWluaXhfYmxvY2tzKGxvZmZfdCBzaXplLCBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKQomIzQzO3Vuc2lnbmVkIGludCBWMV9taW5peF9ibG9ja3MobG9mZl90IHNpemUsIHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpCiB7CiAJcmV0dXJuIG5ibG9ja3Moc2l6ZSwgc2IpOwogfQomIzQzOwomIzQzO2ludCBWMV9taW5peF9pb21hcF9iZWdpbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb2ZmX3Qgb2Zmc2V0LCBsb2ZmX3QgbGVuZ3RoLAomIzQzOwl1bnNpZ25lZCBpbnQgZmxhZ3MsIHN0cnVjdCBpb21hcCAqaW9tYXAsIHN0cnVjdCBpb21hcCAqc3JjbWFwKQomIzQzO3sKJiM0MzsJcmV0dXJuIG1pbml4X2lvbWFwX2JlZ2luKGlub2RlLCBvZmZzZXQsIGxlbmd0aCwgZmxhZ3MsIGlvbWFwLCBzcmNtYXApOwomIzQzO30KJiM0MzsKJiM0Mztjb25zdCBzdHJ1Y3QgaW9tYXBfb3BzIFYxX21pbml4X2lvbWFwX29wcyA9IHsKJiM0MzsJLmlvbWFwX2JlZ2luID0gVjFfbWluaXhfaW9tYXBfYmVnaW4sCiYjNDM7CS5pb21hcF9lbmQgICA9IG1pbml4X2lvbWFwX2VuZCwKJiM0Mzt9OwpkaWZmIC0tZ2l0IGEvZnMvbWluaXgvaXRyZWVfdjIuYyBiL2ZzL21pbml4L2l0cmVlX3YyLmMKaW5kZXggOWQwMGYzMWEyZDlkMTUuLmZjN2E1YWU4ZmExY2EzIDEwMDY0NAotLS0gYS9mcy9taW5peC9pdHJlZV92Mi5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL21pbml4L2l0cmVlX3YyLmMKQEAgLTU3LDYgJiM0Mzs1NywxMCBAQCBzdGF0aWMgaW50IGJsb2NrX3RvX3BhdGgoc3RydWN0IGlub2RlICogaW5vZGUsIGxvbmcgYmxvY2ssIGludCBvZmZzZXRzW0RFUFRIXSkKIH0KIAogI2luY2x1ZGUgJiMzNDtpdHJlZV9jb21tb24uYyYjMzQ7CiYjNDM7LyogU2VlIHRoZSBub3RlIGluIGl0cmVlX3YxIGluIGEgY29tbWVudCB0aGF0IHN0YXJ0cyAmIzM0O05PVEEgQkVORSYjMzQ7IGZvciBhbgomIzQzOyAqIGV4cGxhbmF0aW9uIGZvciB3aHkgaW9tYXAuYyBpcyBpbmNsdWRlZCBoZXJlLgomIzQzOyAqLwomIzQzOyNpbmNsdWRlICYjMzQ7aW9tYXAuYyYjMzQ7CiAKIGludCBWMl9taW5peF9nZXRfYmxvY2soc3RydWN0IGlub2RlICogaW5vZGUsIGxvbmcgYmxvY2ssCiAJCQlzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoX3Jlc3VsdCwgaW50IGNyZWF0ZSkKQEAgLTY5LDcgJiM0Mzs3MywxOCBAQCB2b2lkIFYyX21pbml4X3RydW5jYXRlKHN0cnVjdCBpbm9kZSAqIGlub2RlKQogCXRydW5jYXRlKGlub2RlKTsKIH0KIAotdW5zaWduZWQgVjJfbWluaXhfYmxvY2tzKGxvZmZfdCBzaXplLCBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKQomIzQzO3Vuc2lnbmVkIGludCBWMl9taW5peF9ibG9ja3MobG9mZl90IHNpemUsIHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpCiB7CiAJcmV0dXJuIG5ibG9ja3Moc2l6ZSwgc2IpOwogfQomIzQzOwomIzQzO2ludCBWMl9taW5peF9pb21hcF9iZWdpbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb2ZmX3Qgb2Zmc2V0LCBsb2ZmX3QgbGVuZ3RoLAomIzQzOwl1bnNpZ25lZCBpbnQgZmxhZ3MsIHN0cnVjdCBpb21hcCAqaW9tYXAsIHN0cnVjdCBpb21hcCAqc3JjbWFwKQomIzQzO3sKJiM0MzsJcmV0dXJuIG1pbml4X2lvbWFwX2JlZ2luKGlub2RlLCBvZmZzZXQsIGxlbmd0aCwgZmxhZ3MsIGlvbWFwLCBzcmNtYXApOwomIzQzO30KJiM0MzsKJiM0Mztjb25zdCBzdHJ1Y3QgaW9tYXBfb3BzIFYyX21pbml4X2lvbWFwX29wcyA9IHsKJiM0MzsJLmlvbWFwX2JlZ2luID0gVjJfbWluaXhfaW9tYXBfYmVnaW4sCiYjNDM7CS5pb21hcF9lbmQgICA9IG1pbml4X2lvbWFwX2VuZCwKJiM0Mzt9OwpkaWZmIC0tZ2l0IGEvZnMvbWluaXgvbWluaXguaCBiL2ZzL21pbml4L21pbml4LmgKaW5kZXggZjIwMjVjOWI1ODI1MmYuLmQxYTg5MGU5NmFiZTJjIDEwMDY0NAotLS0gYS9mcy9taW5peC9taW5peC5oCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL21pbml4L21pbml4LmgKQEAgLTUsNiAmIzQzOzUsNyBAQAogI2luY2x1ZGUgJmx0O2xpbnV4L2ZzLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvcGFnZW1hcC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L21pbml4X2ZzLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2lvbWFwLmgmZ3Q7CiAKICNkZWZpbmUgSU5PREVfVkVSU0lPTihpbm9kZSkJbWluaXhfc2IoaW5vZGUtJmd0O2lfc2IpLSZndDtzX3ZlcnNpb24KICNkZWZpbmUgTUlOSVhfVjEJCTB4MDAwMQkJLyogb3JpZ2luYWwgbWluaXggZnMgKi8KQEAgLTU2LDcgJiM0Mzs1Nyw5IEBAIGludCBtaW5peF9uZXdfYmxvY2soc3RydWN0IGlub2RlICppbm9kZSk7CiB2b2lkIG1pbml4X2ZyZWVfYmxvY2soc3RydWN0IGlub2RlICppbm9kZSwgdW5zaWduZWQgbG9uZyBibG9jayk7CiB1bnNpZ25lZCBsb25nIG1pbml4X2NvdW50X2ZyZWVfYmxvY2tzKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpOwogaW50IG1pbml4X2dldGF0dHIoc3RydWN0IG1udF9pZG1hcCAqLCBjb25zdCBzdHJ1Y3QgcGF0aCAqLAotCQlzdHJ1Y3Qga3N0YXQgKiwgdTMyLCB1bnNpZ25lZCBpbnQpOwomIzQzOwkJc3RydWN0IGtzdGF0ICosIHUzMiwgdW5zaWduZWQpOwomIzQzO2ludCBtaW5peF9zZXRhdHRyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksCiYjNDM7CXN0cnVjdCBpYXR0ciAqYXR0cik7CiBpbnQgbWluaXhfcHJlcGFyZV9jaHVuayhzdHJ1Y3QgZm9saW8gKmZvbGlvLCBsb2ZmX3QgcG9zLCB1bnNpZ25lZCBsZW4pOwogc3RydWN0IG1hcHBpbmdfbWV0YWRhdGFfYmhzICptaW5peF9nZXRfbWV0YWRhdGFfYmhzKHN0cnVjdCBpbm9kZSAqaW5vZGUpOwogaW50IG1pbml4X2ZzeW5jKHN0cnVjdCBmaWxlICpmaWxlLCBsb2ZmX3Qgc3RhcnQsIGxvZmZfdCBlbmQsIGludCBkYXRhc3luYyk7CkBAIC02OSw2ICYjNDM7NzIsOCBAQCBleHRlcm4gaW50IFYxX21pbml4X2dldF9ibG9jayhzdHJ1Y3QgaW5vZGUgKiwgbG9uZywgc3RydWN0IGJ1ZmZlcl9oZWFkICosIGludCk7CiBleHRlcm4gaW50IFYyX21pbml4X2dldF9ibG9jayhzdHJ1Y3QgaW5vZGUgKiwgbG9uZywgc3RydWN0IGJ1ZmZlcl9oZWFkICosIGludCk7CiBleHRlcm4gdW5zaWduZWQgVjFfbWluaXhfYmxvY2tzKGxvZmZfdCwgc3RydWN0IHN1cGVyX2Jsb2NrICopOwogZXh0ZXJuIHVuc2lnbmVkIFYyX21pbml4X2Jsb2Nrcyhsb2ZmX3QsIHN0cnVjdCBzdXBlcl9ibG9jayAqKTsKJiM0MztleHRlcm4gaW50IG1pbml4X2dldF9ibG9jayhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzZWN0b3JfdCBibG9jaywKJiM0MzsJCSAgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoX3Jlc3VsdCwgaW50IGNyZWF0ZSk7CiAKIHN0cnVjdCBtaW5peF9kaXJfZW50cnkgKm1pbml4X2ZpbmRfZW50cnkoc3RydWN0IGRlbnRyeSAqLCBzdHJ1Y3QgZm9saW8gKiopOwogaW50IG1pbml4X2FkZF9saW5rKHN0cnVjdCBkZW50cnkqLCBzdHJ1Y3QgaW5vZGUqKTsKQEAgLTc3LDEzICYjNDM7ODIsMjYgQEAgaW50IG1pbml4X21ha2VfZW1wdHkoc3RydWN0IGlub2RlKiwgc3RydWN0IGlub2RlKik7CiBpbnQgbWluaXhfZW1wdHlfZGlyKHN0cnVjdCBpbm9kZSopOwogaW50IG1pbml4X3NldF9saW5rKHN0cnVjdCBtaW5peF9kaXJfZW50cnkgKmRlLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLAogCQlzdHJ1Y3QgaW5vZGUgKmlub2RlKTsKJiM0MztleHRlcm4gY29uc3QgY2hhciAqbWluaXhfZ2V0X2xpbmsoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3QgaW5vZGUgKmlub2RlLAomIzQzOwkJc3RydWN0IGRlbGF5ZWRfY2FsbCAqY2FsbGJhY2spOwomIzQzOwogc3RydWN0IG1pbml4X2Rpcl9lbnRyeSAqbWluaXhfZG90ZG90KHN0cnVjdCBpbm9kZSosIHN0cnVjdCBmb2xpbyAqKik7CiBpbm9fdCBtaW5peF9pbm9kZV9ieV9uYW1lKHN0cnVjdCBkZW50cnkqKTsKIAomIzQzO2V4dGVybiBpbnQgVjFfbWluaXhfaW9tYXBfYmVnaW4oc3RydWN0IGlub2RlICppbm9kZSwgbG9mZl90IG9mZnNldCwKJiM0MzsJbG9mZl90IGxlbmd0aCwgdW5zaWduZWQgaW50IGZsYWdzLCBzdHJ1Y3QgaW9tYXAgKmlvbWFwLAomIzQzOwlzdHJ1Y3QgaW9tYXAgKnNyY21hcCk7CiYjNDM7ZXh0ZXJuIGludCBWMl9taW5peF9pb21hcF9iZWdpbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb2ZmX3Qgb2Zmc2V0LAomIzQzOwlsb2ZmX3QgbGVuZ3RoLCB1bnNpZ25lZCBpbnQgZmxhZ3MsIHN0cnVjdCBpb21hcCAqaW9tYXAsCiYjNDM7CXN0cnVjdCBpb21hcCAqc3JjbWFwKTsKJiM0MzsKJiM0MztleHRlcm4gY29uc3Qgc3RydWN0IGFkZHJlc3Nfc3BhY2Vfb3BlcmF0aW9ucyBtaW5peF9hb3BzOwogZXh0ZXJuIGNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIG1pbml4X2ZpbGVfaW5vZGVfb3BlcmF0aW9uczsKIGV4dGVybiBjb25zdCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBtaW5peF9kaXJfaW5vZGVfb3BlcmF0aW9uczsKIGV4dGVybiBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIG1pbml4X2ZpbGVfb3BlcmF0aW9uczsKIGV4dGVybiBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIG1pbml4X2Rpcl9vcGVyYXRpb25zOwomIzQzO2V4dGVybiBjb25zdCBzdHJ1Y3QgaW9tYXBfb3BzIFYxX21pbml4X2lvbWFwX29wczsKJiM0MztleHRlcm4gY29uc3Qgc3RydWN0IGlvbWFwX29wcyBWMl9taW5peF9pb21hcF9vcHM7CiAKIHN0YXRpYyBpbmxpbmUgc3RydWN0IG1pbml4X3NiX2luZm8gKm1pbml4X3NiKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpCiB7CkBAIC05NSwxMSAmIzQzOzExMywxNyBAQCBzdGF0aWMgaW5saW5lIHN0cnVjdCBtaW5peF9pbm9kZV9pbmZvICptaW5peF9pKHN0cnVjdCBpbm9kZSAqaW5vZGUpCiAJcmV0dXJuIGNvbnRhaW5lcl9vZihpbm9kZSwgc3RydWN0IG1pbml4X2lub2RlX2luZm8sIHZmc19pbm9kZSk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbWluaXhfYmxvY2tzX25lZWRlZCh1bnNpZ25lZCBiaXRzLCB1bnNpZ25lZCBibG9ja3NpemUpCiYjNDM7c3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgbWluaXhfYmxvY2tzX25lZWRlZCh1bnNpZ25lZCBpbnQgYml0cywgdW5zaWduZWQgaW50IGJsb2Nrc2l6ZSkKIHsKIAlyZXR1cm4gRElWX1JPVU5EX1VQKGJpdHMsIGJsb2Nrc2l6ZSAqIDgpOwogfQogCiYjNDM7c3RhdGljIGlubGluZSBjb25zdCBzdHJ1Y3QgaW9tYXBfb3BzICptaW5peF9pb21hcF9vcHNfdmVyKHN0cnVjdCBpbm9kZSAqaW5vZGUpCiYjNDM7ewomIzQzOwlyZXR1cm4gKElOT0RFX1ZFUlNJT04oaW5vZGUpID09IE1JTklYX1YxKSA/CiYjNDM7CQkmYW1wO1YxX21pbml4X2lvbWFwX29wcyA6ICZhbXA7VjJfbWluaXhfaW9tYXBfb3BzOwomIzQzO30KJiM0MzsKICNpZiBkZWZpbmVkKENPTkZJR19NSU5JWF9GU19OQVRJVkVfRU5ESUFOKSAmYW1wOyZhbXA7IFwKIAlkZWZpbmVkKENPTkZJR19NSU5JWF9GU19CSUdfRU5ESUFOXzE2QklUX0lOREVYRUQpCiAKQEAgLTEyOSw3ICYjNDM7MTUzLDcgQEAgc3RhdGljIGlubGluZSB1bnNpZ25lZCBtaW5peF9ibG9ja3NfbmVlZGVkKHVuc2lnbmVkIGJpdHMsIHVuc2lnbmVkIGJsb2Nrc2l6ZSkKICAqIGJpZy1lbmRpYW4gMTZiaXQgaW5kZXhlZCBiaXRtYXBzCiAgKi8KIAotc3RhdGljIGlubGluZSBpbnQgbWluaXhfZmluZF9maXJzdF96ZXJvX2JpdChjb25zdCB2b2lkICp2YWRkciwgdW5zaWduZWQgc2l6ZSkKJiM0MztzdGF0aWMgaW5saW5lIGludCBtaW5peF9maW5kX2ZpcnN0X3plcm9fYml0KGNvbnN0IHZvaWQgKnZhZGRyLCB1bnNpZ25lZCBpbnQgc2l6ZSkKIHsKIAljb25zdCB1bnNpZ25lZCBzaG9ydCAqcCA9IHZhZGRyLCAqYWRkciA9IHZhZGRyOwogCXVuc2lnbmVkIHNob3J0IG51bTsKZGlmZiAtLWdpdCBhL2ZzL21pbml4L25hbWVpLmMgYi9mcy9taW5peC9uYW1laS5jCmluZGV4IDI2M2U0YmE4YjFjODIyLi5lMjQ1ZjU1YTY4ZmY1ZCAxMDA2NDQKLS0tIGEvZnMvbWluaXgvbmFtZWkuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9taW5peC9uYW1laS5jCkBAIC02LDYgJiM0Mzs2LDggQEAKICAqLwogCiAjaW5jbHVkZSAmIzM0O21pbml4LmgmIzM0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9idWZmZXJfaGVhZC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9uYW1laS5oJmd0OwogCiBzdGF0aWMgaW50IGFkZF9ub25kaXIoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3QgaW5vZGUgKmlub2RlKQogewpAQCAtNjksNiAmIzQzOzcxLDEwMSBAQCBzdGF0aWMgaW50IG1pbml4X2NyZWF0ZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsCiAJcmV0dXJuIG1pbml4X21rbm9kKCZhbXA7bm9wX21udF9pZG1hcCwgZGlyLCBkZW50cnksIG1vZGUsIDApOwogfQogCiYjNDM7c3RhdGljIGlubGluZSB1MTYgKnYxX2lfZGF0YShzdHJ1Y3QgaW5vZGUgKmlub2RlKQomIzQzO3sKJiM0MzsJcmV0dXJuICh1MTYgKiltaW5peF9pKGlub2RlKS0mZ3Q7dS5pMV9kYXRhOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW5saW5lIHUzMiAqdjJfaV9kYXRhKHN0cnVjdCBpbm9kZSAqaW5vZGUpCiYjNDM7ewomIzQzOwlyZXR1cm4gKHUzMiAqKW1pbml4X2koaW5vZGUpLSZndDt1LmkyX2RhdGE7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbmxpbmUgdTE2IGNwdV90b192MV9ibG9jayhzZWN0b3JfdCBuKQomIzQzO3sKJiM0MzsJcmV0dXJuIG47CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbmxpbmUgdTMyIGNwdV90b192Ml9ibG9jayhzZWN0b3JfdCBuKQomIzQzO3sKJiM0MzsJcmV0dXJuIG47CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbmxpbmUgc2VjdG9yX3QgdjFfYmxvY2tfdG9fY3B1KHUxNiBuKQomIzQzO3sKJiM0MzsJcmV0dXJuIG47CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbmxpbmUgc2VjdG9yX3QgdjJfYmxvY2tfdG9fY3B1KHUzMiBuKQomIzQzO3sKJiM0MzsJcmV0dXJuIG47CiYjNDM7fQomIzQzOwomIzQzOy8qIFJlaW1wbGVtZW50IHBhZ2Vfc3ltbGluayYjMzk7cyBnZW5lcmFsIGxvZ2ljIHdoaWxlIGF2b2lkaW5nIHVzaW5nIGJ1ZmZlciBoZWFkCiYjNDM7ICogYmFzZWQgYW9wcyBvcGVyYXRpb25zIGxpa2UgYW9wcy0mZ3Q7d3JpdGVfYmVnaW4gc28gdGhpbmdzIGJlaGF2ZSBiZXR0ZXIgd2l0aAomIzQzOyAqIHRoZSBuZXcgcmVnaW1lIG9mIGlvbWFwIGJhc2VkIGFvcHMgb3BlcmF0aW9ucy4gQ3JpYmJpbmcgZnJvbSBwYWdlX3N5bWxpbmsgaW4KJiM0MzsgKiBmcy9uYW1laS5jIGFuZCBleHQ0JiMzOTtzIGV4dDRfaW5pdF9zeW1saW5rX2Jsb2NrLgomIzQzOyAqLwomIzQzO3N0YXRpYyBpbnQgX19wYWdlX3N5bWxpbmsoc3RydWN0IGlub2RlICppbm9kZSwgY29uc3QgY2hhciAqc3ltbmFtZSwgaW50IGxlbikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBzdXBlcl9ibG9jayAqc2IgPSBpbm9kZS0mZ3Q7aV9zYjsKJiM0MzsJc3RydWN0IGJ1ZmZlcl9oZWFkICpiaDsKJiM0MzsJY2hhciAqa2FkZHI7CiYjNDM7CWludCBlcnIgPSAwOwomIzQzOwl1MTYgKnAxNjsgLyogdjEgMTYgYml0IGJsb2NrICovCiYjNDM7CXUzMiAqcDMyOyAvKiB2Mi8zIDMyIGJpdCBibG9jayAqLwomIzQzOwomIzQzOwlzZWN0b3JfdCBwaHlzOwomIzQzOwomIzQzOwlwaHlzID0gbWluaXhfbmV3X2Jsb2NrKGlub2RlKTsKJiM0MzsJaWYgKCFwaHlzKSB7CiYjNDM7CQllcnIgPSAtRU5PU1BDOwomIzQzOwkJZ290byBwc19vdXQ7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKElOT0RFX1ZFUlNJT04oaW5vZGUpID09IE1JTklYX1YxKSB7CiYjNDM7CQlwMTYgPSB2MV9pX2RhdGEoaW5vZGUpOwomIzQzOwkJKnAxNiA9IGNwdV90b192MV9ibG9jayhwaHlzKTsKJiM0MzsJfSBlbHNlIHsKJiM0MzsJCXAzMiA9IHYyX2lfZGF0YShpbm9kZSk7CiYjNDM7CQkqcDMyID0gY3B1X3RvX3YyX2Jsb2NrKHBoeXMpOwomIzQzOwl9CiYjNDM7CiYjNDM7CWJoID0gc2JfZ2V0YmxrKHNiLCBwaHlzKTsKJiM0MzsJaWYgKCFiaCkgewomIzQzOwkJZXJyID0gLUVOT01FTTsKJiM0MzsJCWdvdG8gcHNfZmFpbDsKJiM0MzsJfQomIzQzOwomIzQzOwlsb2NrX2J1ZmZlcihiaCk7CiYjNDM7CWthZGRyID0gKGNoYXIgKiliaC0mZ3Q7Yl9kYXRhOwomIzQzOwltZW1zZXQoa2FkZHIsIDAsIHNiLSZndDtzX2Jsb2Nrc2l6ZSk7CiYjNDM7CW1lbWNweShrYWRkciwgc3ltbmFtZSwgbGVuKTsKJiM0MzsJaW5vZGUtJmd0O2lfc2l6ZSA9IGxlbiAtIDE7CiYjNDM7CXNldF9idWZmZXJfdXB0b2RhdGUoYmgpOwomIzQzOwl1bmxvY2tfYnVmZmVyKGJoKTsKJiM0MzsKJiM0MzsJbW1iX21hcmtfYnVmZmVyX2RpcnR5KGJoLCAmYW1wO21pbml4X2koaW5vZGUpLSZndDtpX21ldGFkYXRhX2Jocyk7CiYjNDM7CWlmIChpbm9kZV9uZWVkc19zeW5jKGlub2RlKSkgewomIzQzOwkJc3luY19kaXJ0eV9idWZmZXIoYmgpOwomIzQzOwkJaWYgKGJ1ZmZlcl9yZXEoYmgpICZhbXA7JmFtcDsgIWJ1ZmZlcl91cHRvZGF0ZShiaCkpIHsKJiM0MzsJCQlwcl9lcnIoJiMzNDtpL28gZXJyb3Igc3luY2luZyBpdGFibGUgYmxvY2smIzM0Oyk7CiYjNDM7CQkJZXJyID0gLUVJTzsKJiM0MzsJCX0KJiM0MzsKJiM0MzsJfQomIzQzOwomIzQzOwltYXJrX2lub2RlX2RpcnR5KGlub2RlKTsKJiM0MzsJYnJlbHNlKGJoKTsKJiM0MzsKJiM0Mztwc19vdXQ6CiYjNDM7CXJldHVybiBlcnI7CiYjNDM7CiYjNDM7cHNfZmFpbDoKJiM0MzsJbWluaXhfZnJlZV9ibG9jayhpbm9kZSwgcGh5cyk7CiYjNDM7CWdvdG8gcHNfb3V0OwomIzQzO30KJiM0MzsKIHN0YXRpYyBpbnQgbWluaXhfc3ltbGluayhzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsCiAJCQkgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBjb25zdCBjaGFyICpzeW1uYW1lKQogewpAQCAtODQsNyAmIzQzOzE4MSw3IEBAIHN0YXRpYyBpbnQgbWluaXhfc3ltbGluayhzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsCiAJCXJldHVybiBQVFJfRVJSKGlub2RlKTsKIAogCW1pbml4X3NldF9pbm9kZShpbm9kZSwgMCk7Ci0JZXJyID0gcGFnZV9zeW1saW5rKGlub2RlLCBzeW1uYW1lLCBpKTsKJiM0MzsJZXJyID0gX19wYWdlX3N5bWxpbmsoaW5vZGUsIHN5bW5hbWUsIGkpOwogCWlmICh1bmxpa2VseShlcnIpKSB7CiAJCWlub2RlX2RlY19saW5rX2NvdW50KGlub2RlKTsKIAkJaXB1dChpbm9kZSk7CkBAIC0yNzMsNiAmIzQzOzM3MCw0NCBAQCBzdGF0aWMgaW50IG1pbml4X3JlbmFtZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwKIAlyZXR1cm4gZXJyOwogfQogCiYjNDM7Lyogc3RyYWlnaHQgdXAgdGhpZXZlcnkgaGVyZTsgc3RvbGVuIHZlcmJhdGltIGZyb20gZXh0NF9nZXRfbGluayAqLwomIzQzO3N0YXRpYyB2b2lkIG1pbml4X2ZyZWVfbGluayh2b2lkICpiaCkKJiM0Mzt7CiYjNDM7CWJyZWxzZShiaCk7CiYjNDM7fQomIzQzOwomIzQzOy8qIEJvcnJvd2luZyBmcm9tIGV4dDRfZ2V0X2xpbmsgdG8gYSBkZWdyZWU7IHNpbmNlIG1pbml4IGlub2RlcyBhbmQgc3ltbGlua3MKJiM0MzsgKiBhcmUgc2lnbmlmaWNhbnRseSBzaW1wbGVyLCB3ZSBkb24mIzM5O3QgbmVlZCB0byBkbyBuZWFybHkgYXMgbXVjaCBhcyBleHQ0CiYjNDM7ICogcmVxdWlyZXMgZm9yIG9sZC10aW1leSBleHQ0IHNsb3cgbGlua3MuCiYjNDM7ICovCiYjNDM7Y29uc3QgY2hhciAqbWluaXhfZ2V0X2xpbmsoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3QgaW5vZGUgKmlub2RlLAomIzQzOwkJc3RydWN0IGRlbGF5ZWRfY2FsbCAqY2FsbGJhY2spCiYjNDM7ewomIzQzOwlzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiID0gaW5vZGUtJmd0O2lfc2I7CiYjNDM7CXN0cnVjdCBidWZmZXJfaGVhZCAqYmg7CiYjNDM7CXNlY3Rvcl90IGJsazsKJiM0MzsKJiM0MzsJLyogR2V0IHlvbiBibG9jaywgZGVwZW5kaW5nIG9uIHdoYXQgdmVyc2lvbiBvZiB0aGUgbWluaXggZnMgdGhpcyBpcy4gKi8KJiM0MzsJaWYgKElOT0RFX1ZFUlNJT04oaW5vZGUpID09IE1JTklYX1YxKQomIzQzOwkJYmxrID0gdjFfYmxvY2tfdG9fY3B1KCoodjFfaV9kYXRhKGlub2RlKSkpOwomIzQzOwllbHNlCiYjNDM7CQlibGsgPSB2Ml9ibG9ja190b19jcHUoKih2Ml9pX2RhdGEoaW5vZGUpKSk7CiYjNDM7CiYjNDM7CWJoID0gc2JfYnJlYWQoc2IsIGJsayk7CiYjNDM7CWlmIChJU19FUlIoYmgpKQomIzQzOwkJcmV0dXJuIEVSUl9DQVNUKGJoKTsKJiM0MzsJaWYgKCFiaCkgewomIzQzOwkJcHJfZXJyKCYjMzQ7YmFkIHN5bWxpbmsgb24gaW5vZGUgJWxsdSYjMzQ7LCBpbm9kZS0mZ3Q7aV9pbm8pOwomIzQzOwkJcmV0dXJuIEVSUl9QVFIoLUVGU0NPUlJVUFRFRCk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJc2V0X2RlbGF5ZWRfY2FsbChjYWxsYmFjaywgbWluaXhfZnJlZV9saW5rLCBiaCk7CiYjNDM7CW5kX3Rlcm1pbmF0ZV9saW5rKGJoLSZndDtiX2RhdGEsIGlub2RlLSZndDtpX3NpemUsCiYjNDM7CQkJaW5vZGUtJmd0O2lfc2ItJmd0O3NfYmxvY2tzaXplIC0gMSk7CiYjNDM7CiYjNDM7CXJldHVybiBiaC0mZ3Q7Yl9kYXRhOwomIzQzO30KJiM0MzsKIC8qCiAgKiBkaXJlY3RvcmllcyBjYW4gaGFuZGxlIG1vc3Qgb3BlcmF0aW9ucy4uLgogICovCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI4IDA1OjMzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExNjA4CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogNDQ3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk1pbml4IEkvTyBJbXBsZW1lbnRhdGlvbiBQYXRjaCBBbmFseXNpcyAmYW1wOyBGdXp6aW5nIFN0cmF0ZWd5KioKCk9rYXksIHNvIEkmIzM5O3ZlIGdvdCB0aGlzIHBhdGNoIGhlcmUgdGhhdCYjMzk7cyBkaXZpbmcgZGVlcCBpbnRvIHRoZSBNaW5peCBmaWxlc3lzdGVtIGltcGxlbWVudGF0aW9uLiBJdCYjMzk7cyB0b3VjaGluZyBgZnMvbWluaXgvZmlsZS5jYCwgYGZzL21pbml4L2lub2RlLmNgLCBgZnMvbWluaXgvaW9tYXAuY2AsIHRoZSBgaXRyZWVgIGltcGxlbWVudGF0aW9uLCBhbmQgZXZlbiB0aGUgaGVhZGVyIGFuZCBuYW1lIHJlc29sdXRpb24gY29tcG9uZW50cy4gVGhpcyBpcyBwcmV0dHkgc2lnbmlmaWNhbnQ7IGl0JiMzOTtzIGltcGxlbWVudGluZyBpb21hcC1iYXNlZCBkaXJlY3QgSS9PIGFuZCBidWZmZXJlZCBJL08sIHdoaWNoIGlzIGEgYmlnIGNoYW5nZSB0byBob3cgTWluaXggaGFuZGxlcyBkYXRhLgoKTG9va2luZyBhdCB0aGUgY29kZSBjaGFuZ2VzLCBpdCYjMzk7cyBpbnRyb2R1Y2luZyBhIHdob2xlIHNsZXcgb2YgbmV3IGZ1bmN0aW9uczogYG1pbml4X2Rpb19yZWFkX2l0ZXJgLCBgbWluaXhfZGlvX3dyaXRlX2l0ZXJgLCB0aGUgc3RhbmRhcmQgZmlsZSByZWFkL3dyaXRlIGl0ZXJhdG9ycywgYW5kIHNvbWUgY3J1Y2lhbCBpb21hcCBsaWZlY3ljbGUgZnVuY3Rpb25zIGxpa2UgYG1pbml4X2lvbWFwX2JlZ2luYCBhbmQgYG1pbml4X2lvbWFwX2VuZGAuIFBsdXMsIGl0IGxvb2tzIGxpa2UgdGhleSYjMzk7dmUgdXBkYXRlZCB0aGUgd3JpdGViYWNrIGFuZCByZWFkLWFoZWFkIG1lY2hhbmlzbXMgKGBtaW5peF93cml0ZWJhY2tfcmFuZ2VgLCBgbWluaXhfd3JpdGVwYWdlc2AsIGBtaW5peF9yZWFkX2ZvbGlvYCwgYG1pbml4X3JlYWRhaGVhZGApLiBJIGFsc28gc2VlIGNoYW5nZXMgdG8gYmxvY2sgbWFwcGluZyAoYG1pbml4X2JtYXBgKSBhbmQgc3ltbGluayBoYW5kbGluZywgc3dpdGNoaW5nIGF3YXkgZnJvbSB0aGUgZ2VuZXJpYyBwYWdlIHN5bWxpbmsgZnVuY3Rpb25zIGFuZCB1c2luZyBgX19wYWdlX3N5bWxpbmtgIGFuZCBgbWluaXhfZ2V0X2xpbmtgIGluc3RlYWQuCgpUaGlzIGlzIGEgY2xlYXIgZnVuY3Rpb25hbCBzaGlmdC4gR2l2ZW4gdGhlIGNvbXBsZXhpdHkgYW5kIHRoZSBwb3RlbnRpYWwgZm9yIHN1YnRsZSBpbnRlcmFjdGlvbnMgaW4gYSBmaWxlc3lzdGVtLCB0aGlzIGRlZmluaXRlbHkgd2FycmFudHMgc29tZSBzZXJpb3VzIGZ1enppbmcuIE15IG1haW4gdGFyZ2V0cyBmb3IgZnV6emluZyBzaG91bGQgYmUgYWxsIHRoZSBuZXdseSBpbnRyb2R1Y2VkIGZ1bmN0aW9uczogYG1pbml4X2Rpb19yZWFkX2l0ZXJgLCBgbWluaXhfZGlvX3dyaXRlX2l0ZXJgLCBgbWluaXhfZmlsZV9yZWFkX2l0ZXJgLCBgbWluaXhfZmlsZV93cml0ZV9pdGVyYCwgYG1pbml4X2lvbWFwX2JlZ2luYCwgYG1pbml4X2lvbWFwX2VuZGAsIGBtaW5peF93cml0ZWJhY2tfcmFuZ2VgLCBgbWluaXhfd3JpdGVwYWdlc2AsIGBtaW5peF9yZWFkX2ZvbGlvYCwgYG1pbml4X3JlYWRhaGVhZGAsIGBtaW5peF9ibWFwYCwgYF9fcGFnZV9zeW1saW5rYCwgYW5kIGBtaW5peF9nZXRfbGlua2AuIFRoZXNlIGFyZSB0aGUgY3JpdGljYWwgZW50cnkgcG9pbnRzIGFuZCBkYXRhIG1hbmlwdWxhdGlvbiBmdW5jdGlvbnMgdGhhdCBuZWVkIHRoZSBtb3N0IHNjcnV0aW55LgoKQmVmb3JlIEkgZ28gYW55IGZ1cnRoZXIsIEkmIzM5O2xsIHF1aWNrbHkgY2hlY2sgYGZzL21pbml4L0tjb25maWdgIHRvIGNvbmZpcm0gd2hhdCBjb25maWcgb3B0aW9ucyBhcmUgaW52b2x2ZWQgaW4gZW5hYmxpbmcgdGhlIE1pbml4IGZpbGVzeXN0ZW0uIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBrbm93IGhvdyB0byBhY3R1YWxseSBlbmFibGUgdGhpcyBjb2RlIHBhdGggYW5kIHdoaWNoIGNvbmZpZ3MgYXJlIHJlbGV2YW50IGZvciB0aGUgYnVpbGQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjggMDU6MzM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE1JTklYX0ZTJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvbWluaXgvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9taW5peC9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG5mcy9taW5peC9LY29uZmlnOjI6Y29uZmlnIE1JTklYX0ZTXG5mcy9taW5peC9LY29uZmlnLTMtXHR0cmlzdGF0ZSBcJiMzNDtNaW5peCBmaWxlIHN5c3RlbSBzdXBwb3J0XCYjMzQ7XG4tLVxuZnMvbWluaXgvS2NvbmZpZy0yMC1cbmZzL21pbml4L0tjb25maWc6MjE6Y29uZmlnIE1JTklYX0ZTX05BVElWRV9FTkRJQU5cbmZzL21pbml4L0tjb25maWctMjItXHRkZWZfYm9vbCBNSU5JWF9GU1xuLS1cbmZzL21pbml4L0tjb25maWctMjQtXG5mcy9taW5peC9LY29uZmlnOjI1OmNvbmZpZyBNSU5JWF9GU19CSUdfRU5ESUFOXzE2QklUX0lOREVYRURcbmZzL21pbml4L0tjb25maWctMjYtXHRkZWZfYm9vbCBNSU5JWF9GU1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI4IDA1OjMzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyODEyCgkJCQkJCQlvdXRwdXQ6IDU1CgkJCQkJCQl0aG91Z2h0czogMTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbm5lciBtb25vbG9ndWU6CgoqKkNoZWNraW5nIE15IEFzc3VtcHRpb25zOiBDb25maWcgYW5kIEZvY3VzKioKCkFscmlnaHQsIHRoZSBjb250ZXh0IGlzIHRoZSBgTUlOSVhfRlNgIGNvbmZpZy4gUmlnaHQgYXdheSwgbXkgbWluZCBzdGFydHMgdGlja2luZy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJiMzOTttIGdyb3VuZGVkIGluIHRoZSBzcGVjaWZpY3Mgb2YgKnRoYXQqIHBhcnRpY3VsYXIgY29uZmlndXJhdGlvbi4gQmVmb3JlIEkgZGVsdmUgaW50byBhbnl0aGluZyBlbHNlLCBpdCYjMzk7cyBlc3NlbnRpYWwgdG8gcXVpY2tseSB2ZXJpZnkgdGhhdCBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSByZWxldmFudCBmb2N1cyBzeW1ib2xzIGlzIGFjY3VyYXRlLiBJIGRvbiYjMzk7dCB3YW50IHRvIHdhc3RlIHRpbWUgZG93biBhIHJhYmJpdCBob2xlIGJhc2VkIG9uIGFuIGluY29ycmVjdCBwcmVtaXNlLiBMZXQmIzM5O3MgbWFrZSBzdXJlIEkmIzM5O20gdHJhY2tpbmcgd2l0aCB0aGUgcmlnaHQgdmFyaWFibGVzIGFuZCBkZWZpbml0aW9ucyBmb3IgYE1JTklYX0ZTYC4gVGhpcyBzZWVtcyBsaWtlIGEgc2FuaXR5IGNoZWNrLCBtb3JlIHRoYW4gYW55dGhpbmcgZWxzZSwgYnV0IGVzc2VudGlhbCB0byBlbnN1cmUgZWZmaWNpZW5jeSBpbiB0aGUgbG9uZyBydW4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjggMDU6MzM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7XihzdGF0aWMgKT9bYS16QS1aXzAtOV0mIzQzOyBcXCoqbWluaXhfW2EtekEtWl8wLTldJiM0MztcXCgmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9taW5peC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvbWluaXgvYml0bWFwLmM9Mjc9c3RhdGljIF9fdTMyIGNvdW50X2ZyZWUoc3RydWN0IGJ1ZmZlcl9oZWFkICptYXBbXSwgdW5zaWduZWQgYmxvY2tzaXplLCBfX3UzMiBudW1iaXRzKVxuLS1cbmZzL21pbml4L2JpdG1hcC5jLTQxLVxuZnMvbWluaXgvYml0bWFwLmM6NDI6dm9pZCBtaW5peF9mcmVlX2Jsb2NrKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHVuc2lnbmVkIGxvbmcgYmxvY2spXG5mcy9taW5peC9iaXRtYXAuYy00My17XG4tLVxuZnMvbWluaXgvYml0bWFwLmMtNzAtXG5mcy9taW5peC9iaXRtYXAuYzo3MTppbnQgbWluaXhfbmV3X2Jsb2NrKHN0cnVjdCBpbm9kZSAqIGlub2RlKVxuZnMvbWluaXgvYml0bWFwLmMtNzIte1xuLS1cbmZzL21pbml4L2JpdG1hcC5jPTEzMT1taW5peF9WMl9yYXdfaW5vZGUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgaW5vX3QgaW5vLCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKipiaClcbi0tXG5mcy9taW5peC9iaXRtYXAuYy0xNTctXG5mcy9taW5peC9iaXRtYXAuYzoxNTg6c3RhdGljIHZvaWQgbWluaXhfY2xlYXJfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSlcbmZzL21pbml4L2JpdG1hcC5jLTE1OS17XG4tLVxuZnMvbWluaXgvYml0bWFwLmMtMTgyLVxuZnMvbWluaXgvYml0bWFwLmM6MTgzOnZvaWQgbWluaXhfZnJlZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKiBpbm9kZSlcbmZzL21pbml4L2JpdG1hcC5jLTE4NC17XG4tLVxuZnMvbWluaXgvZGlyLmM9MTg9dHlwZWRlZiBzdHJ1Y3QgbWluaXgzX2Rpcl9lbnRyeSBtaW5peDNfZGlyZW50O1xuZnMvbWluaXgvZGlyLmMtMTktXG5mcy9taW5peC9kaXIuYzoyMDpzdGF0aWMgaW50IG1pbml4X3JlYWRkaXIoc3RydWN0IGZpbGUgKiwgc3RydWN0IGRpcl9jb250ZXh0ICopO1xuZnMvbWluaXgvZGlyLmMtMjEtXG4tLVxuZnMvbWluaXgvZGlyLmM9NDM9c3RhdGljIHZvaWQgZGlyX2NvbW1pdF9jaHVuayhzdHJ1Y3QgZm9saW8gKmZvbGlvLCBsb2ZmX3QgcG9zLCB1bnNpZ25lZCBsZW4pXG4tLVxuZnMvbWluaXgvZGlyLmMtNTYtXG5mcy9taW5peC9kaXIuYzo1NzpzdGF0aWMgaW50IG1pbml4X2hhbmRsZV9kaXJzeW5jKHN0cnVjdCBpbm9kZSAqZGlyKVxuZnMvbWluaXgvZGlyLmMtNTgte1xuLS1cbmZzL21pbml4L2Rpci5jPTc4PXN0YXRpYyBpbmxpbmUgdm9pZCAqbWluaXhfbmV4dF9lbnRyeSh2b2lkICpkZSwgc3RydWN0IG1pbml4X3NiX2luZm8gKnNiaSlcbi0tXG5mcy9taW5peC9kaXIuYy04Mi1cbmZzL21pbml4L2Rpci5jOjgzOnN0YXRpYyBpbnQgbWluaXhfcmVhZGRpcihzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IGRpcl9jb250ZXh0ICpjdHgpXG5mcy9taW5peC9kaXIuYy04NC17XG4tLVxuZnMvbWluaXgvZGlyLmM9MTM3PXN0YXRpYyBpbmxpbmUgaW50IG5hbWVjb21wYXJlKGludCBsZW4sIGludCBtYXhsZW4sXG4tLVxuZnMvbWluaXgvZGlyLmMtMTUzLSAqL1xuZnMvbWluaXgvZGlyLmM6MTU0Om1pbml4X2RpcmVudCAqbWluaXhfZmluZF9lbnRyeShzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBmb2xpbyAqKmZvbGlvcClcbmZzL21pbml4L2Rpci5jLTE1NS17XG4tLVxuZnMvbWluaXgvZGlyLmMtMTk4LVxuZnMvbWluaXgvZGlyLmM6MTk5OmludCBtaW5peF9hZGRfbGluayhzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBpbm9kZSAqaW5vZGUpXG5mcy9taW5peC9kaXIuYy0yMDAte1xuLS1cbmZzL21pbml4L2Rpci5jLTI4NS1cbmZzL21pbml4L2Rpci5jOjI4NjppbnQgbWluaXhfZGVsZXRlX2VudHJ5KHN0cnVjdCBtaW5peF9kaXJfZW50cnkgKmRlLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuZnMvbWluaXgvZGlyLmMtMjg3LXtcbi0tXG5mcy9taW5peC9kaXIuYy0zMDktXG5mcy9taW5peC9kaXIuYzozMTA6aW50IG1pbml4X21ha2VfZW1wdHkoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGlub2RlICpkaXIpXG5mcy9taW5peC9kaXIuYy0zMTEte1xuLS1cbmZzL21pbml4L2Rpci5jLTM1Ni0gKi9cbmZzL21pbml4L2Rpci5jOjM1NzppbnQgbWluaXhfZW1wdHlfZGlyKHN0cnVjdCBpbm9kZSAqIGlub2RlKVxuZnMvbWluaXgvZGlyLmMtMzU4LXtcbi0tXG5mcy9taW5peC9kaXIuYy00MDYtLyogUmVsZWFzZXMgdGhlIHBhZ2UgKi9cbmZzL21pbml4L2Rpci5jOjQwNzppbnQgbWluaXhfc2V0X2xpbmsoc3RydWN0IG1pbml4X2Rpcl9lbnRyeSAqZGUsIHN0cnVjdCBmb2xpbyAqZm9saW8sXG5mcy9taW5peC9kaXIuYy00MDgtXHRcdHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4tLVxuZnMvbWluaXgvZGlyLmM9NDMxPXN0cnVjdCBtaW5peF9kaXJfZW50cnkgKm1pbml4X2RvdGRvdChzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGZvbGlvICoqZm9saW9wKVxuLS1cbmZzL21pbml4L2Rpci5jLTQ0MC1cbmZzL21pbml4L2Rpci5jOjQ0MTppbm9fdCBtaW5peF9pbm9kZV9ieV9uYW1lKHN0cnVjdCBkZW50cnkgKmRlbnRyeSlcbmZzL21pbml4L2Rpci5jLTQ0Mi17XG4tLVxuZnMvbWluaXgvZmlsZS5jLTEyLVxuZnMvbWluaXgvZmlsZS5jOjEzOmludCBtaW5peF9mc3luYyhzdHJ1Y3QgZmlsZSAqZmlsZSwgbG9mZl90IHN0YXJ0LCBsb2ZmX3QgZW5kLCBpbnQgZGF0YXN5bmMpXG5mcy9taW5peC9maWxlLmMtMTQte1xuLS1cbmZzL21pbml4L2ZpbGUuYy0xOS1cbmZzL21pbml4L2ZpbGUuYzoyMDpzdGF0aWMgc3NpemVfdCBtaW5peF9kaW9fcmVhZF9pdGVyKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICp0bylcbmZzL21pbml4L2ZpbGUuYy0yMS17XG4tLVxuZnMvbWluaXgvZmlsZS5jLTMzLVxuZnMvbWluaXgvZmlsZS5jOjM0OnN0YXRpYyBpbnQgbWluaXhfZGlvX3dyaXRlX2VuZF9pbyhzdHJ1Y3Qga2lvY2IgKmlvY2IsIHNzaXplX3Qgc2l6ZSwgaW50IGVycm9yLFxuZnMvbWluaXgvZmlsZS5jLTM1LVx0XHR1bnNpZ25lZCBpbnQgZmxhZ3MpXG4tLVxuZnMvbWluaXgvZmlsZS5jPTUxPXN0YXRpYyBjb25zdCBzdHJ1Y3QgaW9tYXBfZGlvX29wcyBtaW5peF9kaW9fd3JpdGVfb3BzID0ge1xuLS1cbmZzL21pbml4L2ZpbGUuYy01NC1cbmZzL21pbml4L2ZpbGUuYzo1NTpzdGF0aWMgc3NpemVfdCBtaW5peF9kaW9fd3JpdGVfaXRlcihzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqZnJvbSlcbmZzL21pbml4L2ZpbGUuYy01Ni17XG4tLVxuZnMvbWluaXgvZmlsZS5jLTExNC1cbmZzL21pbml4L2ZpbGUuYzoxMTU6c3RhdGljIHNzaXplX3QgbWluaXhfZmlsZV9yZWFkX2l0ZXIoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKnRvKVxuZnMvbWluaXgvZmlsZS5jLTExNi17XG4tLVxuZnMvbWluaXgvZmlsZS5jLTEyMi1cbmZzL21pbml4L2ZpbGUuYzoxMjM6c3RhdGljIHNzaXplX3QgbWluaXhfZmlsZV93cml0ZV9pdGVyKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICpmcm9tKVxuZnMvbWluaXgvZmlsZS5jLTEyNC17XG4tLVxuZnMvbWluaXgvZmlsZS5jLTE1NS1cbmZzL21pbml4L2ZpbGUuYzoxNTY6c3RhdGljIGludCBtaW5peF9maWxlX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbHApXG5mcy9taW5peC9maWxlLmMtMTU3LXtcbi0tXG5mcy9taW5peC9maWxlLmM9MTY3PWNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgbWluaXhfZmlsZV9vcGVyYXRpb25zID0ge1xuLS1cbmZzL21pbml4L2ZpbGUuYy0xNzctXG5mcy9taW5peC9maWxlLmM6MTc4OmludCBtaW5peF9zZXRhdHRyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXG5mcy9taW5peC9maWxlLmMtMTc5LVx0c3RydWN0IGlhdHRyICphdHRyKVxuLS1cbmZzL21pbml4L2lub2RlLmMtMjQtXG5mcy9taW5peC9pbm9kZS5jOjI1OnN0YXRpYyBpbnQgbWluaXhfd3JpdGVfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSxcbmZzL21pbml4L2lub2RlLmMtMjYtXHRcdHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqd2JjKTtcbmZzL21pbml4L2lub2RlLmM6Mjc6c3RhdGljIGludCBtaW5peF9zdGF0ZnMoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3Qga3N0YXRmcyAqYnVmKTtcbmZzL21pbml4L2lub2RlLmMtMjgtXG5mcy9taW5peC9pbm9kZS5jPTI5PXZvaWQgX19taW5peF9lcnJvcl9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBjb25zdCBjaGFyICpmdW5jdGlvbixcbi0tXG5mcy9taW5peC9pbm9kZS5jLTQ0LVxuZnMvbWluaXgvaW5vZGUuYzo0NTpzdGF0aWMgdm9pZCBtaW5peF9ldmljdF9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuZnMvbWluaXgvaW5vZGUuYy00Ni17XG4tLVxuZnMvbWluaXgvaW5vZGUuYy01OS1cbmZzL21pbml4L2lub2RlLmM6NjA6c3RhdGljIHZvaWQgbWluaXhfcHV0X3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXG5mcy9taW5peC9pbm9kZS5jLTYxLXtcbi0tXG5mcy9taW5peC9pbm9kZS5jPTgyPXN0YXRpYyBzdHJ1Y3QgaW5vZGUgKm1pbml4X2FsbG9jX2lub2RlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXG4tLVxuZnMvbWluaXgvaW5vZGUuYy05Mi1cbmZzL21pbml4L2lub2RlLmM6OTM6c3RhdGljIHZvaWQgbWluaXhfZnJlZV9pbl9jb3JlX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpXG5mcy9taW5peC9pbm9kZS5jLTk0LXtcbi0tXG5mcy9taW5peC9pbm9kZS5jPTEyNz1zdGF0aWMgY29uc3Qgc3RydWN0IHN1cGVyX29wZXJhdGlvbnMgbWluaXhfc29wcyA9IHtcbi0tXG5mcy9taW5peC9pbm9kZS5jLTEzNS1cbmZzL21pbml4L2lub2RlLmM6MTM2OnN0YXRpYyBpbnQgbWluaXhfcmVjb25maWd1cmUoc3RydWN0IGZzX2NvbnRleHQgKmZjKVxuZnMvbWluaXgvaW5vZGUuYy0xMzcte1xuLS1cbmZzL21pbml4L2lub2RlLmMtMTczLVxuZnMvbWluaXgvaW5vZGUuYzoxNzQ6c3RhdGljIGJvb2wgbWluaXhfY2hlY2tfc3VwZXJibG9jayhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxuZnMvbWluaXgvaW5vZGUuYy0xNzUte1xuLS1cbmZzL21pbml4L2lub2RlLmMtMjIwLVxuZnMvbWluaXgvaW5vZGUuYzoyMjE6c3RhdGljIGludCBtaW5peF9maWxsX3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqcywgc3RydWN0IGZzX2NvbnRleHQgKmZjKVxuZnMvbWluaXgvaW5vZGUuYy0yMjIte1xuLS1cbmZzL21pbml4L2lub2RlLmMtNDAzLVxuZnMvbWluaXgvaW5vZGUuYzo0MDQ6c3RhdGljIGludCBtaW5peF9nZXRfdHJlZShzdHJ1Y3QgZnNfY29udGV4dCAqZmMpXG5mcy9taW5peC9pbm9kZS5jLTQwNS17XG4tLVxuZnMvbWluaXgvaW5vZGUuYz00MDk9c3RhdGljIGNvbnN0IHN0cnVjdCBmc19jb250ZXh0X29wZXJhdGlvbnMgbWluaXhfY29udGV4dF9vcHMgPSB7XG4tLVxuZnMvbWluaXgvaW5vZGUuYy00MTMtXG5mcy9taW5peC9pbm9kZS5jOjQxNDpzdGF0aWMgaW50IG1pbml4X2luaXRfZnNfY29udGV4dChzdHJ1Y3QgZnNfY29udGV4dCAqZmMpXG5mcy9taW5peC9pbm9kZS5jLTQxNS17XG4tLVxuZnMvbWluaXgvaW5vZGUuYy00MjAtXG5mcy9taW5peC9pbm9kZS5jOjQyMTpzdGF0aWMgaW50IG1pbml4X3N0YXRmcyhzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBrc3RhdGZzICpidWYpXG5mcy9taW5peC9pbm9kZS5jLTQyMi17XG4tLVxuZnMvbWluaXgvaW5vZGUuYy00MzgtXG5mcy9taW5peC9pbm9kZS5jOjQzOTpzdGF0aWMgc3NpemVfdCBtaW5peF93cml0ZWJhY2tfcmFuZ2Uoc3RydWN0IGlvbWFwX3dyaXRlcGFnZV9jdHggKndwYyxcbmZzL21pbml4L2lub2RlLmMtNDQwLVx0c3RydWN0IGZvbGlvICpmb2xpbywgdTY0IHBvcywgdW5zaWduZWQgaW50IGxlbiwgdTY0IGVuZF9wb3MpXG4tLVxuZnMvbWluaXgvaW5vZGUuYz00NTk9c3RhdGljIGNvbnN0IHN0cnVjdCBpb21hcF93cml0ZWJhY2tfb3BzIG1pbml4X3dyaXRlYmFja19vcHMgPSB7XG4tLVxuZnMvbWluaXgvaW5vZGUuYy00NjMtXG5mcy9taW5peC9pbm9kZS5jOjQ2NDppbnQgbWluaXhfZ2V0X2Jsb2NrKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHNlY3Rvcl90IGJsb2NrLFxuZnMvbWluaXgvaW5vZGUuYy00NjUtXHRcdCAgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoX3Jlc3VsdCwgaW50IGNyZWF0ZSlcbi0tXG5mcy9taW5peC9pbm9kZS5jLTQ3My0vKiBUaGUgb2xkIG1pbml4X3dyaXRlcGFnZXMsIHByZXNlcnZlZCBmb3IgZGlyZWN0b3J5IG9wZXJhdGlvbnMuICovXG5mcy9taW5peC9pbm9kZS5jOjQ3NDpzdGF0aWMgaW50IG1pbml4X2Jsb2NrX3dyaXRlcGFnZXMoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXG5mcy9taW5peC9pbm9kZS5jLTQ3NS1cdFx0c3RydWN0IHdyaXRlYmFja19jb250cm9sICp3YmMpXG4tLVxuZnMvbWluaXgvaW5vZGUuYy00NzktXG5mcy9taW5peC9pbm9kZS5jOjQ4MDpzdGF0aWMgaW50IG1pbml4X3dyaXRlcGFnZXMoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXG5mcy9taW5peC9pbm9kZS5jLTQ4MS1cdFx0c3RydWN0IHdyaXRlYmFja19jb250cm9sICp3YmMpXG4tLVxuZnMvbWluaXgvaW5vZGUuYy00OTAtXG5mcy9taW5peC9pbm9kZS5jOjQ5MTpzdGF0aWMgaW50IG1pbml4X3JlYWRfZm9saW8oc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBmb2xpbyAqZm9saW8pXG5mcy9taW5peC9pbm9kZS5jLTQ5Mi17XG4tLVxuZnMvbWluaXgvaW5vZGUuYy00OTktLyogVGhlIG9sZCBtaW5peF9yZWFkX2ZvbGlvLCBwcmVzZXJ2ZWQgZm9yIGRpcmVjdG9yeSBvcGVyYXRpb25zLiAqL1xuZnMvbWluaXgvaW5vZGUuYzo1MDA6c3RhdGljIGludCBtaW5peF9ibG9ja19yZWFkX2ZvbGlvKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuZnMvbWluaXgvaW5vZGUuYy01MDEte1xuLS1cbmZzL21pbml4L2lub2RlLmMtNTA0LVxuZnMvbWluaXgvaW5vZGUuYzo1MDU6c3RhdGljIHZvaWQgbWluaXhfcmVhZGFoZWFkKHN0cnVjdCByZWFkYWhlYWRfY29udHJvbCAqcmFjKVxuZnMvbWluaXgvaW5vZGUuYy01MDYte1xuLS1cbmZzL21pbml4L2lub2RlLmMtNTExLVxuZnMvbWluaXgvaW5vZGUuYzo1MTI6aW50IG1pbml4X3ByZXBhcmVfY2h1bmsoc3RydWN0IGZvbGlvICpmb2xpbywgbG9mZl90IHBvcywgdW5zaWduZWQgbGVuKVxuZnMvbWluaXgvaW5vZGUuYy01MTMte1xuLS1cbmZzL21pbml4L2lub2RlLmMtNTE2LVxuZnMvbWluaXgvaW5vZGUuYzo1MTc6c3RhdGljIHZvaWQgbWluaXhfd3JpdGVfZmFpbGVkKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBsb2ZmX3QgdG8pXG5mcy9taW5peC9pbm9kZS5jLTUxOC17XG4tLVxuZnMvbWluaXgvaW5vZGUuYy01MjYtXG5mcy9taW5peC9pbm9kZS5jOjUyNzpzdGF0aWMgaW50IG1pbml4X3dyaXRlX2JlZ2luKGNvbnN0IHN0cnVjdCBraW9jYiAqaW9jYixcbmZzL21pbml4L2lub2RlLmMtNTI4LVx0XHRcdCAgICAgc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXG4tLVxuZnMvbWluaXgvaW5vZGUuYy01NDAtXG5mcy9taW5peC9pbm9kZS5jOjU0MTpzdGF0aWMgc2VjdG9yX3QgbWluaXhfYm1hcChzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgc2VjdG9yX3QgYmxvY2spXG5mcy9taW5peC9pbm9kZS5jLTU0Mi17XG4tLVxuZnMvbWluaXgvaW5vZGUuYz01NzU9c3RhdGljIGNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIG1pbml4X3N5bWxpbmtfaW5vZGVfb3BlcmF0aW9ucyA9IHtcbi0tXG5mcy9taW5peC9pbm9kZS5jLTU4MC1cbmZzL21pbml4L2lub2RlLmM6NTgxOnZvaWQgbWluaXhfc2V0X2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGRldl90IHJkZXYpXG5mcy9taW5peC9pbm9kZS5jLTU4Mi17XG4tLVxuZnMvbWluaXgvaW5vZGUuYz03MzE9c3RhdGljIHN0cnVjdCBidWZmZXJfaGVhZCAqIFYyX21pbml4X3VwZGF0ZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKiBpbm9kZSlcbi0tXG5mcy9taW5peC9pbm9kZS5jLTc1Ni1cbmZzL21pbml4L2lub2RlLmM6NzU3OnN0YXRpYyBpbnQgbWluaXhfd3JpdGVfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IHdyaXRlYmFja19jb250cm9sICp3YmMpXG5mcy9taW5peC9pbm9kZS5jLTc1OC17XG4tLVxuZnMvbWluaXgvaW5vZGUuYy03NzktXG5mcy9taW5peC9pbm9kZS5jOjc4MDppbnQgbWluaXhfZ2V0YXR0cihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgY29uc3Qgc3RydWN0IHBhdGggKnBhdGgsXG5mcy9taW5peC9pbm9kZS5jLTc4MS1cdFx0ICBzdHJ1Y3Qga3N0YXQgKnN0YXQsIHUzMiByZXF1ZXN0X21hc2ssIHVuc2lnbmVkIGludCBmbGFncylcbi0tXG5mcy9taW5peC9pbm9kZS5jLTc5Ny0gKi9cbmZzL21pbml4L2lub2RlLmM6Nzk4OnZvaWQgbWluaXhfdHJ1bmNhdGUoc3RydWN0IGlub2RlICogaW5vZGUpXG5mcy9taW5peC9pbm9kZS5jLTc5OS17XG4tLVxuZnMvbWluaXgvaW9tYXAuYy0xNC0gKi9cbmZzL21pbml4L2lvbWFwLmM6MTU6c3RhdGljIGludCBtaW5peF9pb21hcF9iZWdpbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb2ZmX3Qgb2Zmc2V0LCBsb2ZmX3QgbGVuZ3RoLFxuZnMvbWluaXgvaW9tYXAuYy0xNi1cdHVuc2lnbmVkIGludCBmbGFncywgc3RydWN0IGlvbWFwICppb21hcCwgc3RydWN0IGlvbWFwICpzcmNtYXApXG4tLVxuZnMvbWluaXgvaW9tYXAuYy0xMDktICovXG5mcy9taW5peC9pb21hcC5jOjExMDpzdGF0aWMgaW50IG1pbml4X2lvbWFwX2VuZChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb2ZmX3Qgb2Zmc2V0LCBsb2ZmX3QgbGVuZ3RoLFxuZnMvbWluaXgvaW9tYXAuYy0xMTEtXHRzc2l6ZV90IHdyaXR0ZW4sIHVuc2lnbmVkIGludCBmbGFncywgc3RydWN0IGlvbWFwICppb21hcClcbi0tXG5mcy9taW5peC9taW5peC5oPTUzPXN0cnVjdCBpbm9kZSAqbWluaXhfbmV3X2lub2RlKGNvbnN0IHN0cnVjdCBpbm9kZSAqLCB1bW9kZV90KTtcbmZzL21pbml4L21pbml4Lmg6NTQ6dm9pZCBtaW5peF9mcmVlX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpO1xuZnMvbWluaXgvbWluaXguaC01NS11bnNpZ25lZCBsb25nIG1pbml4X2NvdW50X2ZyZWVfaW5vZGVzKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpO1xuZnMvbWluaXgvbWluaXguaDo1NjppbnQgbWluaXhfbmV3X2Jsb2NrKHN0cnVjdCBpbm9kZSAqaW5vZGUpO1xuZnMvbWluaXgvbWluaXguaDo1Nzp2b2lkIG1pbml4X2ZyZWVfYmxvY2soc3RydWN0IGlub2RlICppbm9kZSwgdW5zaWduZWQgbG9uZyBibG9jayk7XG5mcy9taW5peC9taW5peC5oLTU4LXVuc2lnbmVkIGxvbmcgbWluaXhfY291bnRfZnJlZV9ibG9ja3Moc3RydWN0IHN1cGVyX2Jsb2NrICpzYik7XG5mcy9taW5peC9taW5peC5oOjU5OmludCBtaW5peF9nZXRhdHRyKHN0cnVjdCBtbnRfaWRtYXAgKiwgY29uc3Qgc3RydWN0IHBhdGggKixcbmZzL21pbml4L21pbml4LmgtNjAtXHRcdHN0cnVjdCBrc3RhdCAqLCB1MzIsIHVuc2lnbmVkKTtcbmZzL21pbml4L21pbml4Lmg6NjE6aW50IG1pbml4X3NldGF0dHIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcbmZzL21pbml4L21pbml4LmgtNjItXHRzdHJ1Y3QgaWF0dHIgKmF0dHIpO1xuZnMvbWluaXgvbWluaXguaDo2MzppbnQgbWluaXhfcHJlcGFyZV9jaHVuayhzdHJ1Y3QgZm9saW8gKmZvbGlvLCBsb2ZmX3QgcG9zLCB1bnNpZ25lZCBsZW4pO1xuZnMvbWluaXgvbWluaXguaC02NC1zdHJ1Y3QgbWFwcGluZ19tZXRhZGF0YV9iaHMgKm1pbml4X2dldF9tZXRhZGF0YV9iaHMoc3RydWN0IGlub2RlICppbm9kZSk7XG5mcy9taW5peC9taW5peC5oOjY1OmludCBtaW5peF9mc3luYyhzdHJ1Y3QgZmlsZSAqZmlsZSwgbG9mZl90IHN0YXJ0LCBsb2ZmX3QgZW5kLCBpbnQgZGF0YXN5bmMpO1xuZnMvbWluaXgvbWluaXguaC02Ni1cbi0tXG5mcy9taW5peC9taW5peC5oPTc4PXN0cnVjdCBtaW5peF9kaXJfZW50cnkgKm1pbml4X2ZpbmRfZW50cnkoc3RydWN0IGRlbnRyeSAqLCBzdHJ1Y3QgZm9saW8gKiopO1xuZnMvbWluaXgvbWluaXguaDo3OTppbnQgbWluaXhfYWRkX2xpbmsoc3RydWN0IGRlbnRyeSosIHN0cnVjdCBpbm9kZSopO1xuZnMvbWluaXgvbWluaXguaDo4MDppbnQgbWluaXhfZGVsZXRlX2VudHJ5KHN0cnVjdCBtaW5peF9kaXJfZW50cnkgKiwgc3RydWN0IGZvbGlvICopO1xuZnMvbWluaXgvbWluaXguaDo4MTppbnQgbWluaXhfbWFrZV9lbXB0eShzdHJ1Y3QgaW5vZGUqLCBzdHJ1Y3QgaW5vZGUqKTtcbmZzL21pbml4L21pbml4Lmg6ODI6aW50IG1pbml4X2VtcHR5X2RpcihzdHJ1Y3QgaW5vZGUqKTtcbmZzL21pbml4L21pbml4Lmg6ODM6aW50IG1pbml4X3NldF9saW5rKHN0cnVjdCBtaW5peF9kaXJfZW50cnkgKmRlLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuZnMvbWluaXgvbWluaXguaC04NC1cdFx0c3RydWN0IGlub2RlICppbm9kZSk7XG4tLVxuZnMvbWluaXgvbWluaXguaD04OD1zdHJ1Y3QgbWluaXhfZGlyX2VudHJ5ICptaW5peF9kb3Rkb3Qoc3RydWN0IGlub2RlKiwgc3RydWN0IGZvbGlvICoqKTtcbmZzL21pbml4L21pbml4Lmg6ODk6aW5vX3QgbWluaXhfaW5vZGVfYnlfbmFtZShzdHJ1Y3QgZGVudHJ5Kik7XG5mcy9taW5peC9taW5peC5oLTkwLVxuLS1cbmZzL21pbml4L25hbWVpLmM9MjQ9c3RhdGljIHN0cnVjdCBkZW50cnkgKm1pbml4X2xvb2t1cChzdHJ1Y3QgaW5vZGUgKiBkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW5zaWduZWQgaW50IGZsYWdzKVxuLS1cbmZzL21pbml4L25hbWVpLmMtMzctXG5mcy9taW5peC9uYW1laS5jOjM4OnN0YXRpYyBpbnQgbWluaXhfbWtub2Qoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxuZnMvbWluaXgvbmFtZWkuYy0zOS1cdFx0ICAgICAgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlLCBkZXZfdCByZGV2KVxuLS1cbmZzL21pbml4L25hbWVpLmMtNTQtXG5mcy9taW5peC9uYW1laS5jOjU1OnN0YXRpYyBpbnQgbWluaXhfdG1wZmlsZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXG5mcy9taW5peC9uYW1laS5jLTU2LVx0XHRcdCBzdHJ1Y3QgZmlsZSAqZmlsZSwgdW1vZGVfdCBtb2RlKVxuLS1cbmZzL21pbml4L25hbWVpLmMtNjctXG5mcy9taW5peC9uYW1laS5jOjY4OnN0YXRpYyBpbnQgbWluaXhfY3JlYXRlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbmZzL21pbml4L25hbWVpLmMtNjktXHRcdFx0c3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUsIGJvb2wgZXhjbClcbi0tXG5mcy9taW5peC9uYW1laS5jPTEwOT1zdGF0aWMgaW50IF9fcGFnZV9zeW1saW5rKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGNvbnN0IGNoYXIgKnN5bW5hbWUsIGludCBsZW4pXG4tLVxuZnMvbWluaXgvbmFtZWkuYy0xNjgtXG5mcy9taW5peC9uYW1laS5jOjE2OTpzdGF0aWMgaW50IG1pbml4X3N5bWxpbmsoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxuZnMvbWluaXgvbmFtZWkuYy0xNzAtXHRcdFx0IHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgY29uc3QgY2hhciAqc3ltbmFtZSlcbi0tXG5mcy9taW5peC9uYW1laS5jLTE5Mi1cbmZzL21pbml4L25hbWVpLmM6MTkzOnN0YXRpYyBpbnQgbWluaXhfbGluayhzdHJ1Y3QgZGVudHJ5ICogb2xkX2RlbnRyeSwgc3RydWN0IGlub2RlICogZGlyLFxuZnMvbWluaXgvbmFtZWkuYy0xOTQtXHRzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpXG4tLVxuZnMvbWluaXgvbmFtZWkuYz0yMDQ9c3RhdGljIHN0cnVjdCBkZW50cnkgKm1pbml4X21rZGlyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbi0tXG5mcy9taW5peC9uYW1laS5jLTIzNy1cbmZzL21pbml4L25hbWVpLmM6MjM4OnN0YXRpYyBpbnQgbWluaXhfdW5saW5rKHN0cnVjdCBpbm9kZSAqIGRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5KVxuZnMvbWluaXgvbmFtZWkuYy0yMzkte1xuLS1cbmZzL21pbml4L25hbWVpLmMtMjYyLVxuZnMvbWluaXgvbmFtZWkuYzoyNjM6c3RhdGljIGludCBtaW5peF9ybWRpcihzdHJ1Y3QgaW5vZGUgKiBkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSlcbmZzL21pbml4L25hbWVpLmMtMjY0LXtcbi0tXG5mcy9taW5peC9uYW1laS5jLTI4Ni1cbmZzL21pbml4L25hbWVpLmM6Mjg3OnN0YXRpYyBpbnQgbWluaXhfcmVuYW1lKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxuZnMvbWluaXgvbmFtZWkuYy0yODgtXHRcdFx0c3RydWN0IGlub2RlICpvbGRfZGlyLCBzdHJ1Y3QgZGVudHJ5ICpvbGRfZGVudHJ5LFxuLS1cbmZzL21pbml4L25hbWVpLmMtMzczLS8qIHN0cmFpZ2h0IHVwIHRoaWV2ZXJ5IGhlcmU7IHN0b2xlbiB2ZXJiYXRpbSBmcm9tIGV4dDRfZ2V0X2xpbmsgKi9cbmZzL21pbml4L25hbWVpLmM6Mzc0OnN0YXRpYyB2b2lkIG1pbml4X2ZyZWVfbGluayh2b2lkICpiaClcbmZzL21pbml4L25hbWVpLmMtMzc1LXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yOCAwNTozMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODUxOQoJCQkJCQkJb3V0cHV0OiAyNjEKCQkJCQkJCXRob3VnaHRzOiAxMTMyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlJlZmluaW5nIHRoZSBNSU5JWCBGaWxlc3lzdGVtIFN5bWJvbCBMaXN0KioKCk9rYXksIGxldCYjMzk7cyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJiMzOTt2ZSBnb3QgdGhlIHJlbGV2YW50IHN5bWJvbHMgbmFpbGVkIGRvd24gZm9yIHRoaXMgTUlOSVggZmlsZXN5c3RlbSBwYXRjaC4gTXkgaW5pdGlhbCBsaXN0IGluY2x1ZGVzOiBgbWluaXhfZGlvX3JlYWRfaXRlcmAsIGBtaW5peF9kaW9fd3JpdGVfaXRlcmAsIGBtaW5peF9kaW9fd3JpdGVfZW5kX2lvYCwgYG1pbml4X2ZpbGVfcmVhZF9pdGVyYCwgYG1pbml4X2ZpbGVfd3JpdGVfaXRlcmAsIGBtaW5peF9pb21hcF9iZWdpbmAsIGBtaW5peF9pb21hcF9lbmRgLCBgbWluaXhfd3JpdGViYWNrX3JhbmdlYCwgYG1pbml4X3dyaXRlcGFnZXNgLCBgbWluaXhfcmVhZF9mb2xpb2AsIGBtaW5peF9yZWFkYWhlYWRgLCBgbWluaXhfYm1hcGAsIGBfX3BhZ2Vfc3ltbGlua2AsIGBtaW5peF9nZXRfbGlua2AsIGFuZCBgbWluaXhfZnJlZV9saW5rYC4KCkZpcnN0LCBJIG5lZWQgdG8gdmVyaWZ5IHdoZXRoZXIgYG1pbml4X2lvbWFwX2JlZ2luYCBhbmQgYG1pbml4X2lvbWFwX2VuZGAgYXJlIGV4cG9ydGVkIG9yIHN0YXRpYy4gVHVybnMgb3V0IHRoZXkgYXJlIHN0YXRpYyB3aXRoaW4gYGZzL21pbml4L2lvbWFwLmNgLCB3aGljaCBpcyBpbmNsdWRlZCBpbiBgaXRyZWVfdjEuY2AgYW5kIGBpdHJlZV92Mi5jYC4gIEFoYSEgVGhhdCBtZWFucyBgVjFfbWluaXhfaW9tYXBfYmVnaW5gIGFuZCBgVjJfbWluaXhfaW9tYXBfYmVnaW5gIGFyZSB0aGUgZXhwb3J0ZWQgdmVyc2lvbnM7IEkgbmVlZCB0byBhZGQgdGhlbSB0byB0aGUgbGlzdCwgd2hpY2ggd2lsbCBnaXZlOiBgVjFfbWluaXhfaW9tYXBfYmVnaW5gIGFuZCBgVjJfbWluaXhfaW9tYXBfYmVnaW5gLgoKTmV4dCwgSSYjMzk7bGwgZ28gdGhyb3VnaCB0aGUgb3RoZXJzIHRvIGNvbmZpcm06CiogICBgbWluaXhfd3JpdGViYWNrX3JhbmdlYCBhbmQgYG1pbml4X3dyaXRlcGFnZXNgIGFyZSBzdGF0aWMgaW4gYGZzL21pbml4L2lub2RlLmNgLgoqICAgYG1pbml4X3JlYWRfZm9saW9gIGFuZCBgbWluaXhfcmVhZGFoZWFkYCBhcmUgc3RhdGljIGluIGBmcy9taW5peC9pbm9kZS5jYC4KKiAgIGBtaW5peF9ibWFwYCBpcyBzdGF0aWMgaW4gYGZzL21pbml4L2lub2RlLmNgLgoqICAgYF9fcGFnZV9zeW1saW5rYCBpcyBzdGF0aWMgaW4gYGZzL21pbml4L25hbWVpLmNgLgoqICAgYG1pbml4X2dldF9saW5rYCBpcyBleHBvcnRlZCBpbiBgZnMvbWluaXgvbmFtZWkuY2AuCiogICBgbWluaXhfZnJlZV9saW5rYCBpcyBzdGF0aWMgaW4gYGZzL21pbml4L25hbWVpLmNgLgoqICAgYG1pbml4X2Rpb19yZWFkX2l0ZXJgLCBgbWluaXhfZGlvX3dyaXRlX2l0ZXJgLCBgbWluaXhfZGlvX3dyaXRlX2VuZF9pb2AsIGBtaW5peF9maWxlX3JlYWRfaXRlcmAsIGFuZCBgbWluaXhfZmlsZV93cml0ZV9pdGVyYCBhcmUgYWxsIHN0YXRpYyBpbiBgZnMvbWluaXgvZmlsZS5jYC4KCldpdGggYWxsIHRoaXMgaW5mb3JtYXRpb24sIEkgY2FuIG5vdyByZWZpbmUgbXkgbGlzdDoKCiogICBgbWluaXhfZGlvX3JlYWRfaXRlcmAKKiAgIGBtaW5peF9kaW9fd3JpdGVfaXRlcmAKKiAgIGBtaW5peF9kaW9fd3JpdGVfZW5kX2lvYAoqICAgYG1pbml4X2ZpbGVfcmVhZF9pdGVyYAoqICAgYG1pbml4X2ZpbGVfd3JpdGVfaXRlcmAKKiAgIGBtaW5peF9pb21hcF9iZWdpbmAKKiAgIGBtaW5peF9pb21hcF9lbmRgCiogICBgVjFfbWluaXhfaW9tYXBfYmVnaW5gCiogICBgVjJfbWluaXhfaW9tYXBfYmVnaW5gCiogICBgbWluaXhfd3JpdGViYWNrX3JhbmdlYAoqICAgYG1pbml4X3dyaXRlcGFnZXNgCiogICBgbWluaXhfcmVhZF9mb2xpb2AKKiAgIGBtaW5peF9yZWFkYWhlYWRgCiogICBgbWluaXhfYm1hcGAKKiAgIGBfX3BhZ2Vfc3ltbGlua2AKKiAgIGBtaW5peF9nZXRfbGlua2AKKiAgIGBtaW5peF9mcmVlX2xpbmtgCgpUaGUgY29uZmlndXJhdGlvbiBpcyBjbGVhcmx5IGBNSU5JWF9GU2AsIHdoaWNoIGlzIHRoZSBjb3JyZWN0IHN5bWJvbC4KClRoZSByYXRpb25hbGUgaXMgdGhpcyBwYXRjaCBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRvIHRoZSBNSU5JWCBmaWxlc3lzdGVtLCBhZGRpbmcgaW9tYXAtYmFzZWQgZGlyZWN0IEkvTyBhbmQgYnVmZmVyZWQgSS9PLiBUaGlzIG1lYW5zIGNoYW5nZXMgdG8gdGhlIGNvcmUgcmVhZC93cml0ZSBwYXRocywgYmxvY2sgbWFwcGluZywgYW5kIHN5bWxpbmsgaGFuZGxpbmcsIHNvIHRoZSBpZGVudGlmaWVkIHN5bWJvbHMgYXJlIGNlbnRyYWwgdG8gdGhpcy4gSSYjMzk7dmUgbm93IGdvdCBhIGdvb2Qgc2V0IG9mIHN5bWJvbHMgdG8gY2hlY2suICBUaW1lIHRvIGNhbGwgc2V0LXJlc3VsdHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjggMDU6MzM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01JTklYX0ZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bWluaXhfZGlvX3JlYWRfaXRlciYjMzQ7LAogICAgJiMzNDttaW5peF9kaW9fd3JpdGVfaXRlciYjMzQ7LAogICAgJiMzNDttaW5peF9kaW9fd3JpdGVfZW5kX2lvJiMzNDssCiAgICAmIzM0O21pbml4X2ZpbGVfcmVhZF9pdGVyJiMzNDssCiAgICAmIzM0O21pbml4X2ZpbGVfd3JpdGVfaXRlciYjMzQ7LAogICAgJiMzNDttaW5peF9pb21hcF9iZWdpbiYjMzQ7LAogICAgJiMzNDttaW5peF9pb21hcF9lbmQmIzM0OywKICAgICYjMzQ7VjFfbWluaXhfaW9tYXBfYmVnaW4mIzM0OywKICAgICYjMzQ7VjJfbWluaXhfaW9tYXBfYmVnaW4mIzM0OywKICAgICYjMzQ7bWluaXhfd3JpdGViYWNrX3JhbmdlJiMzNDssCiAgICAmIzM0O21pbml4X3dyaXRlcGFnZXMmIzM0OywKICAgICYjMzQ7bWluaXhfcmVhZF9mb2xpbyYjMzQ7LAogICAgJiMzNDttaW5peF9yZWFkYWhlYWQmIzM0OywKICAgICYjMzQ7bWluaXhfYm1hcCYjMzQ7LAogICAgJiMzNDtfX3BhZ2Vfc3ltbGluayYjMzQ7LAogICAgJiMzNDttaW5peF9nZXRfbGluayYjMzQ7LAogICAgJiMzNDttaW5peF9mcmVlX2xpbmsmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW1wbGVtZW50cyBpb21hcC1iYXNlZCBkaXJlY3QgSS9PIGFuZCBidWZmZXJlZCBJL08gZm9yIHRoZSBtaW5peCBmaWxlc3lzdGVtLCB3aGljaCBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRvIHRoZSBjb3JlIGZpbGVzeXN0ZW0gbG9naWMuIEl0IG1vZGlmaWVzIHJlYWQvd3JpdGUgcGF0aHMsIGJsb2NrIG1hcHBpbmcsIGFuZCBzeW1saW5rIGhhbmRsaW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtNSU5JWF9GUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O21pbml4X2Rpb19yZWFkX2l0ZXImIzM0OywKICAgICYjMzQ7bWluaXhfZGlvX3dyaXRlX2l0ZXImIzM0OywKICAgICYjMzQ7bWluaXhfZGlvX3dyaXRlX2VuZF9pbyYjMzQ7LAogICAgJiMzNDttaW5peF9maWxlX3JlYWRfaXRlciYjMzQ7LAogICAgJiMzNDttaW5peF9maWxlX3dyaXRlX2l0ZXImIzM0OywKICAgICYjMzQ7bWluaXhfaW9tYXBfYmVnaW4mIzM0OywKICAgICYjMzQ7bWluaXhfaW9tYXBfZW5kJiMzNDssCiAgICAmIzM0O1YxX21pbml4X2lvbWFwX2JlZ2luJiMzNDssCiAgICAmIzM0O1YyX21pbml4X2lvbWFwX2JlZ2luJiMzNDssCiAgICAmIzM0O21pbml4X3dyaXRlYmFja19yYW5nZSYjMzQ7LAogICAgJiMzNDttaW5peF93cml0ZXBhZ2VzJiMzNDssCiAgICAmIzM0O21pbml4X3JlYWRfZm9saW8mIzM0OywKICAgICYjMzQ7bWluaXhfcmVhZGFoZWFkJiMzNDssCiAgICAmIzM0O21pbml4X2JtYXAmIzM0OywKICAgICYjMzQ7X19wYWdlX3N5bWxpbmsmIzM0OywKICAgICYjMzQ7bWluaXhfZ2V0X2xpbmsmIzM0OywKICAgICYjMzQ7bWluaXhfZnJlZV9saW5rJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGltcGxlbWVudHMgaW9tYXAtYmFzZWQgZGlyZWN0IEkvTyBhbmQgYnVmZmVyZWQgSS9PIGZvciB0aGUgbWluaXggZmlsZXN5c3RlbSwgd2hpY2ggaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0byB0aGUgY29yZSBmaWxlc3lzdGVtIGxvZ2ljLiBJdCBtb2RpZmllcyByZWFkL3dyaXRlIHBhdGhzLCBibG9jayBtYXBwaW5nLCBhbmQgc3ltbGluayBoYW5kbGluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI4VDA1OjMzOjAzLjYzNzg0NjA1OVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyNjc5MDIxNDQ0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk1JTklYX0ZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibWluaXhfZGlvX3JlYWRfaXRlclwiLFxuICAgIFwibWluaXhfZGlvX3dyaXRlX2l0ZXJcIixcbiAgICBcIm1pbml4X2Rpb193cml0ZV9lbmRfaW9cIixcbiAgICBcIm1pbml4X2ZpbGVfcmVhZF9pdGVyXCIsXG4gICAgXCJtaW5peF9maWxlX3dyaXRlX2l0ZXJcIixcbiAgICBcIm1pbml4X2lvbWFwX2JlZ2luXCIsXG4gICAgXCJtaW5peF9pb21hcF9lbmRcIixcbiAgICBcIlYxX21pbml4X2lvbWFwX2JlZ2luXCIsXG4gICAgXCJWMl9taW5peF9pb21hcF9iZWdpblwiLFxuICAgIFwibWluaXhfd3JpdGViYWNrX3JhbmdlXCIsXG4gICAgXCJtaW5peF93cml0ZXBhZ2VzXCIsXG4gICAgXCJtaW5peF9yZWFkX2ZvbGlvXCIsXG4gICAgXCJtaW5peF9yZWFkYWhlYWRcIixcbiAgICBcIm1pbml4X2JtYXBcIixcbiAgICBcIl9fcGFnZV9zeW1saW5rXCIsXG4gICAgXCJtaW5peF9nZXRfbGlua1wiLFxuICAgIFwibWluaXhfZnJlZV9saW5rXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW1wbGVtZW50cyBpb21hcC1iYXNlZCBkaXJlY3QgSS9PIGFuZCBidWZmZXJlZCBJL08gZm9yIHRoZSBtaW5peCBmaWxlc3lzdGVtLCB3aGljaCBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRvIHRoZSBjb3JlIGZpbGVzeXN0ZW0gbG9naWMuIEl0IG1vZGlmaWVzIHJlYWQvd3JpdGUgcGF0aHMsIGJsb2NrIG1hcHBpbmcsIGFuZCBzeW1saW5rIGhhbmRsaW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yOFQwNTozMzowMy42Mzc4NTU4MTlaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM3NzI0ODk3NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGE0NGVlZjg2ZmRhNGI3Mzc1NzZjMjgzYWQwNWU0OGQ5MWJiYjIxYTVcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFN1biBKdW4gMjggMDU6MzM6MDIgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZnMvbWluaXgvZmlsZS5jIGIvZnMvbWluaXgvZmlsZS5jXFxuaW5kZXggODZlNTk0M2NkMmZmNzQuLmIwN2M4NTNmYTQzYWJjIDEwMDY0NFxcbi0tLSBhL2ZzL21pbml4L2ZpbGUuY1xcbisrKyBiL2ZzL21pbml4L2ZpbGUuY1xcbkBAIC0xNywyMSArMTcsMTY2IEBAIGludCBtaW5peF9mc3luYyhzdHJ1Y3QgZmlsZSAqZmlsZSwgbG9mZl90IHN0YXJ0LCBsb2ZmX3QgZW5kLCBpbnQgZGF0YXN5bmMpXFxuIFxcdFxcdFxcdHN0YXJ0LCBlbmQsIGRhdGFzeW5jKTtcXG4gfVxcbiBcXG4rc3RhdGljIHNzaXplX3QgbWluaXhfZGlvX3JlYWRfaXRlcihzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqdG8pXFxuK3tcXG4rXFx0c3RydWN0IGlub2RlICppbm9kZSA9IGlvY2ItXFx1MDAzZWtpX2ZpbHAtXFx1MDAzZWZfbWFwcGluZy1cXHUwMDNlaG9zdDtcXG4rXFx0c3NpemVfdCByZXQ7XFxuK1xcbitcXHRpbm9kZV9sb2NrX3NoYXJlZChpbm9kZSk7XFxuK1xcbitcXHRjb25zdCBzdHJ1Y3QgaW9tYXBfb3BzICpvcHMgPSBtaW5peF9pb21hcF9vcHNfdmVyKGlub2RlKTtcXG4rXFxuK1xcdHJldCA9IGlvbWFwX2Rpb19ydyhpb2NiLCB0bywgb3BzLCBOVUxMLCAwLCBOVUxMLCAwKTtcXG4rXFx0aW5vZGVfdW5sb2NrX3NoYXJlZChpbm9kZSk7XFxuK1xcdHJldHVybiByZXQ7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgbWluaXhfZGlvX3dyaXRlX2VuZF9pbyhzdHJ1Y3Qga2lvY2IgKmlvY2IsIHNzaXplX3Qgc2l6ZSwgaW50IGVycm9yLFxcbitcXHRcXHR1bnNpZ25lZCBpbnQgZmxhZ3MpXFxuK3tcXG4rXFx0c3RydWN0IGlub2RlICppbm9kZSA9IGZpbGVfaW5vZGUoaW9jYi1cXHUwMDNla2lfZmlscCk7XFxuK1xcdGxvZmZfdCBwb3MgPSBpb2NiLVxcdTAwM2VraV9wb3M7XFxuK1xcbitcXHRpZiAoZXJyb3IpXFxuK1xcdFxcdHJldHVybiBlcnJvcjtcXG4rXFxuK1xcdHBvcyArPSBzaXplO1xcbitcXHRpZiAoc2l6ZSBcXHUwMDI2XFx1MDAyNiBwb3MgXFx1MDAzZSBpX3NpemVfcmVhZChpbm9kZSkpIHtcXG4rXFx0XFx0aV9zaXplX3dyaXRlKGlub2RlLCBwb3MpO1xcbitcXHRcXHRtYXJrX2lub2RlX2RpcnR5KGlub2RlKTtcXG4rXFx0fVxcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rc3RhdGljIGNvbnN0IHN0cnVjdCBpb21hcF9kaW9fb3BzIG1pbml4X2Rpb193cml0ZV9vcHMgPSB7XFxuK1xcdC5lbmRfaW8gPSBtaW5peF9kaW9fd3JpdGVfZW5kX2lvLFxcbit9O1xcbitcXG4rc3RhdGljIHNzaXplX3QgbWluaXhfZGlvX3dyaXRlX2l0ZXIoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKmZyb20pXFxuK3tcXG4rXFx0c3RydWN0IGlub2RlICppbm9kZSA9IGlvY2ItXFx1MDAzZWtpX2ZpbHAtXFx1MDAzZWZfbWFwcGluZy1cXHUwMDNlaG9zdDtcXG4rXFx0c3NpemVfdCByZXQ7XFxuK1xcdHVuc2lnbmVkIGludCBmbGFncyA9IDA7XFxuK1xcdHVuc2lnbmVkIGxvbmcgYmxvY2tzaXplID0gaW5vZGUtXFx1MDAzZWlfc2ItXFx1MDAzZXNfYmxvY2tzaXplO1xcbitcXG4rXFx0aW5vZGVfbG9jayhpbm9kZSk7XFxuK1xcdHJldCA9IGdlbmVyaWNfd3JpdGVfY2hlY2tzKGlvY2IsIGZyb20pO1xcbitcXHRpZiAocmV0IFxcdTAwM2M9IDApXFxuK1xcdFxcdGdvdG8gb3V0X3VubG9jaztcXG4rXFxuK1xcdHJldCA9IGtpb2NiX21vZGlmaWVkKGlvY2IpO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRnb3RvIG91dF91bmxvY2s7XFxuK1xcbitcXHRpZiAoaW9jYi1cXHUwMDNla2lfcG9zICsgaW92X2l0ZXJfY291bnQoZnJvbSkgXFx1MDAzZSBpX3NpemVfcmVhZChpbm9kZSkgfHxcXG4rXFx0XFx0IUlTX0FMSUdORUQoaW9jYi1cXHUwMDNla2lfcG9zIHwgaW92X2l0ZXJfYWxpZ25tZW50KGZyb20pLCBibG9ja3NpemUpKVxcbitcXHRcXHRmbGFncyB8PSBJT01BUF9ESU9fRk9SQ0VfV0FJVDtcXG4rXFxuK1xcdGNvbnN0IHN0cnVjdCBpb21hcF9vcHMgKm9wcyA9IG1pbml4X2lvbWFwX29wc192ZXIoaW5vZGUpO1xcbitcXG4rXFx0cmV0ID0gaW9tYXBfZGlvX3J3KGlvY2IsIGZyb20sIG9wcyxcXG4rXFx0XFx0XFx1MDAyNm1pbml4X2Rpb193cml0ZV9vcHMsIGZsYWdzLCBOVUxMLCAwKTtcXG4rXFx0aWYgKHJldCA9PSAtRU5PVEJMSylcXG4rXFx0XFx0cmV0ID0gMDsgLyogZmFsbGJhY2sgdG8gYnVmZmVyZWQgKi9cXG4rXFxuK1xcdGlmIChyZXQgXFx1MDAzZT0gMCBcXHUwMDI2XFx1MDAyNiBpb3ZfaXRlcl9jb3VudChmcm9tKSkge1xcbitcXHRcXHRsb2ZmX3QgcG9zO1xcbitcXHRcXHRsb2ZmX3QgZW5kYnl0ZTtcXG4rXFx0XFx0c3NpemVfdCBzdGF0dXM7XFxuK1xcbitcXHRcXHRpb2NiLVxcdTAwM2VraV9mbGFncyBcXHUwMDI2PSB+SU9DQl9ESVJFQ1Q7XFxuK1xcdFxcdHBvcyA9IGlvY2ItXFx1MDAzZWtpX3BvcztcXG4rXFx0XFx0c3RhdHVzID0gaW9tYXBfZmlsZV9idWZmZXJlZF93cml0ZShpb2NiLCBmcm9tLCBvcHMsXFxuK1xcdFxcdFxcdE5VTEwsIE5VTEwpO1xcbitcXHRcXHRpZiAodW5saWtlbHkoc3RhdHVzIFxcdTAwM2MgMCkpIHtcXG4rXFx0XFx0XFx0cmV0ID0gc3RhdHVzO1xcbitcXHRcXHRcXHRnb3RvIG91dF91bmxvY2s7XFxuK1xcdFxcdH1cXG4rXFxuK1xcdFxcdHJldCArPSBzdGF0dXM7XFxuK1xcdFxcdGVuZGJ5dGUgPSBwb3MgKyBzdGF0dXMgLSAxO1xcbitcXHRcXHRzdGF0dXMgPSBmaWxlbWFwX3dyaXRlX2FuZF93YWl0X3JhbmdlKGlub2RlLVxcdTAwM2VpX21hcHBpbmcsIHBvcywgZW5kYnl0ZSk7XFxuK1xcdFxcdGlmICghc3RhdHVzKSB7XFxuK1xcdFxcdFxcdGludmFsaWRhdGVfbWFwcGluZ19wYWdlcyhpbm9kZS1cXHUwMDNlaV9tYXBwaW5nLFxcbitcXHRcXHRcXHRcXHRwb3MgXFx1MDAzZVxcdTAwM2UgUEFHRV9TSElGVCxcXG4rXFx0XFx0XFx0XFx0ZW5kYnl0ZSBcXHUwMDNlXFx1MDAzZSBQQUdFX1NISUZUKTtcXG4rXFx0XFx0XFx0aWYgKHJldCBcXHUwMDNlIDApXFxuK1xcdFxcdFxcdFxcdHJldCA9IGdlbmVyaWNfd3JpdGVfc3luYyhpb2NiLCByZXQpO1xcbitcXHRcXHR9IGVsc2Uge1xcbitcXHRcXHRcXHRyZXQgPSBzdGF0dXM7XFxuK1xcdFxcdH1cXG4rXFx0fVxcbitcXG4rb3V0X3VubG9jazpcXG4rXFx0aW5vZGVfdW5sb2NrKGlub2RlKTtcXG4rXFx0cmV0dXJuIHJldDtcXG4rfVxcbitcXG4rc3RhdGljIHNzaXplX3QgbWluaXhfZmlsZV9yZWFkX2l0ZXIoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKnRvKVxcbit7XFxuK1xcdGlmIChpb2NiLVxcdTAwM2VraV9mbGFncyBcXHUwMDI2IElPQ0JfRElSRUNUKVxcbitcXHRcXHRyZXR1cm4gbWluaXhfZGlvX3JlYWRfaXRlcihpb2NiLCB0byk7XFxuK1xcbitcXHRyZXR1cm4gZ2VuZXJpY19maWxlX3JlYWRfaXRlcihpb2NiLCB0byk7XFxuK31cXG4rXFxuK3N0YXRpYyBzc2l6ZV90IG1pbml4X2ZpbGVfd3JpdGVfaXRlcihzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqZnJvbSlcXG4re1xcbitcXHRzdHJ1Y3QgaW5vZGUgKmlub2RlID0gaW9jYi1cXHUwMDNla2lfZmlscC1cXHUwMDNlZl9tYXBwaW5nLVxcdTAwM2Vob3N0O1xcbitcXHRzc2l6ZV90IHJldDtcXG4rXFxuK1xcdC8qIG1pbml4X2Rpb193cml0ZV9pdGVyIGFsc28gbG9ja3MgdGhlIGlub2RlIGFuZCBhcHBlYXJzIHRvIGRvIHRoZSBzYW1lXFxuK1xcdCAqIGdlbmVyYWwgc29ydHMgb2YgY2hlY2tzIGFzIHRoaXMsIHNvIGp1c3QgcmV0dXJuIGRpcmVjdGx5IGZyb20gdGhlcmUuXFxuK1xcdCAqL1xcbitcXHRpZiAoaW9jYi1cXHUwMDNla2lfZmxhZ3MgXFx1MDAyNiBJT0NCX0RJUkVDVClcXG4rXFx0XFx0cmV0dXJuIG1pbml4X2Rpb193cml0ZV9pdGVyKGlvY2IsIGZyb20pO1xcbitcXG4rXFx0aW5vZGVfbG9jayhpbm9kZSk7XFxuK1xcdHJldCA9IGdlbmVyaWNfd3JpdGVfY2hlY2tzKGlvY2IsIGZyb20pO1xcbitcXHRpZiAocmV0IFxcdTAwM2M9IDApXFxuK1xcdFxcdGdvdG8gdW5sb2NrO1xcbitcXG4rXFx0cmV0ID0gZmlsZV9tb2RpZmllZChpb2NiLVxcdTAwM2VraV9maWxwKTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0Z290byB1bmxvY2s7XFxuK1xcbitcXHRjb25zdCBzdHJ1Y3QgaW9tYXBfb3BzICpvcHMgPSBtaW5peF9pb21hcF9vcHNfdmVyKGlub2RlKTtcXG4rXFxuK1xcdHJldCA9IGlvbWFwX2ZpbGVfYnVmZmVyZWRfd3JpdGUoaW9jYiwgZnJvbSwgb3BzLFxcbitcXHRcXHRcXHROVUxMLCBOVUxMKTtcXG4rXFxuK1xcdGlmIChyZXQgXFx1MDAzZSAwKVxcbitcXHRcXHRyZXQgPSBnZW5lcmljX3dyaXRlX3N5bmMoaW9jYiwgcmV0KTtcXG4rXFxuK3VubG9jazpcXG4rXFx0aW5vZGVfdW5sb2NrKGlub2RlKTtcXG4rXFx0cmV0dXJuIHJldDtcXG4rfVxcbitcXG4rc3RhdGljIGludCBtaW5peF9maWxlX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbHApXFxuK3tcXG4rXFx0ZmlscC1cXHUwMDNlZl9tb2RlIHw9IEZNT0RFX0NBTl9PRElSRUNUO1xcbitcXHRyZXR1cm4gZ2VuZXJpY19maWxlX29wZW4oaW5vZGUsIGZpbHApO1xcbit9XFxuK1xcbiAvKlxcbi0gKiBXZSBoYXZlIG1vc3RseSBOVUxMcyBoZXJlOiB0aGUgY3VycmVudCBkZWZhdWx0cyBhcmUgT0sgZm9yXFxuLSAqIHRoZSBtaW5peCBmaWxlc3lzdGVtLlxcbisgKiBXZSBzdGlsbCBoYXZlIHNvbWUgTlVMTHMgaGVyZSwgYnV0IG5vdCBhcyBtYW55IG9mIHRoZSBjdXJyZW50IGRlZmF1bHRzIGFyZVxcbisgKiBzdGlsbCBPSyBmb3IgdGhlIG1pbml4IGZpbGVzeXN0ZW0uXFxuICAqL1xcbitcXG4gY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBtaW5peF9maWxlX29wZXJhdGlvbnMgPSB7XFxuIFxcdC5sbHNlZWtcXHRcXHQ9IGdlbmVyaWNfZmlsZV9sbHNlZWssXFxuLVxcdC5yZWFkX2l0ZXJcXHQ9IGdlbmVyaWNfZmlsZV9yZWFkX2l0ZXIsXFxuLVxcdC53cml0ZV9pdGVyXFx0PSBnZW5lcmljX2ZpbGVfd3JpdGVfaXRlcixcXG4rXFx0LnJlYWRfaXRlclxcdD0gbWluaXhfZmlsZV9yZWFkX2l0ZXIsXFxuK1xcdC53cml0ZV9pdGVyXFx0PSBtaW5peF9maWxlX3dyaXRlX2l0ZXIsXFxuIFxcdC5tbWFwX3ByZXBhcmVcXHQ9IGdlbmVyaWNfZmlsZV9tbWFwX3ByZXBhcmUsXFxuK1xcdC5vcGVuXFx0XFx0PSBtaW5peF9maWxlX29wZW4sXFxuIFxcdC5mc3luY1xcdFxcdD0gbWluaXhfZnN5bmMsXFxuIFxcdC5zcGxpY2VfcmVhZFxcdD0gZmlsZW1hcF9zcGxpY2VfcmVhZCxcXG4rXFx0LnNwbGljZV93cml0ZVxcdD0gaXRlcl9maWxlX3NwbGljZV93cml0ZSxcXG4gfTtcXG4gXFxuLXN0YXRpYyBpbnQgbWluaXhfc2V0YXR0cihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcXG4tXFx0XFx0XFx0IHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGlhdHRyICphdHRyKVxcbitpbnQgbWluaXhfc2V0YXR0cihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxcbitcXHRzdHJ1Y3QgaWF0dHIgKmF0dHIpXFxuIHtcXG4gXFx0c3RydWN0IGlub2RlICppbm9kZSA9IGRfaW5vZGUoZGVudHJ5KTtcXG4gXFx0aW50IGVycm9yO1xcbmRpZmYgLS1naXQgYS9mcy9taW5peC9pbm9kZS5jIGIvZnMvbWluaXgvaW5vZGUuY1xcbmluZGV4IGMzMGNjNTkwNjk4ZDZmLi5iMTEzYzQ0NzY0ZmY5NSAxMDA2NDRcXG4tLS0gYS9mcy9taW5peC9pbm9kZS5jXFxuKysrIGIvZnMvbWluaXgvaW5vZGUuY1xcbkBAIC00MzYsNyArNDM2LDMyIEBAIHN0YXRpYyBpbnQgbWluaXhfc3RhdGZzKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGtzdGF0ZnMgKmJ1ZilcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuLXN0YXRpYyBpbnQgbWluaXhfZ2V0X2Jsb2NrKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHNlY3Rvcl90IGJsb2NrLFxcbitzdGF0aWMgc3NpemVfdCBtaW5peF93cml0ZWJhY2tfcmFuZ2Uoc3RydWN0IGlvbWFwX3dyaXRlcGFnZV9jdHggKndwYyxcXG4rXFx0c3RydWN0IGZvbGlvICpmb2xpbywgdTY0IHBvcywgdW5zaWduZWQgaW50IGxlbiwgdTY0IGVuZF9wb3MpXFxuK3tcXG4rXFx0aW50IGVycm9yO1xcbitcXG4rXFx0aWYgKHBvcyBcXHUwMDNjIHdwYy1cXHUwMDNlaW9tYXAub2Zmc2V0IHx8XFxuK1xcdFxcdFxcdHBvcyBcXHUwMDNlPSB3cGMtXFx1MDAzZWlvbWFwLm9mZnNldCArIHdwYy1cXHUwMDNlaW9tYXAubGVuZ3RoKSB7XFxuK1xcdFxcdGlmIChJTk9ERV9WRVJTSU9OKHdwYy1cXHUwMDNlaW5vZGUpID09IE1JTklYX1YxKVxcbitcXHRcXHRcXHRlcnJvciA9IFYxX21pbml4X2lvbWFwX2JlZ2luKHdwYy1cXHUwMDNlaW5vZGUsIHBvcywgbGVuLCBJT01BUF9XUklURSxcXG4rXFx0XFx0XFx0XFx0XFx1MDAyNndwYy1cXHUwMDNlaW9tYXAsIE5VTEwpO1xcbitcXHRcXHRlbHNlXFxuK1xcdFxcdFxcdGVycm9yID0gVjJfbWluaXhfaW9tYXBfYmVnaW4od3BjLVxcdTAwM2Vpbm9kZSwgcG9zLCBsZW4sIElPTUFQX1dSSVRFLFxcbitcXHRcXHRcXHRcXHRcXHUwMDI2d3BjLVxcdTAwM2Vpb21hcCwgTlVMTCk7XFxuK1xcdFxcdGlmIChlcnJvcilcXG4rXFx0XFx0XFx0cmV0dXJuIGVycm9yO1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gaW9tYXBfYWRkX3RvX2lvZW5kKHdwYywgZm9saW8sIHBvcywgZW5kX3BvcywgbGVuKTtcXG4rfVxcbitcXG4rc3RhdGljIGNvbnN0IHN0cnVjdCBpb21hcF93cml0ZWJhY2tfb3BzIG1pbml4X3dyaXRlYmFja19vcHMgPSB7XFxuK1xcdC53cml0ZWJhY2tfcmFuZ2UgPSBtaW5peF93cml0ZWJhY2tfcmFuZ2UsXFxuK1xcdC53cml0ZWJhY2tfc3VibWl0ID0gaW9tYXBfaW9lbmRfd3JpdGViYWNrX3N1Ym1pdCxcXG4rfTtcXG4rXFxuK2ludCBtaW5peF9nZXRfYmxvY2soc3RydWN0IGlub2RlICppbm9kZSwgc2VjdG9yX3QgYmxvY2ssXFxuIFxcdFxcdCAgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoX3Jlc3VsdCwgaW50IGNyZWF0ZSlcXG4ge1xcbiBcXHRpZiAoSU5PREVfVkVSU0lPTihpbm9kZSkgPT0gTUlOSVhfVjEpXFxuQEAgLTQ0NSwxNyArNDcwLDQ1IEBAIHN0YXRpYyBpbnQgbWluaXhfZ2V0X2Jsb2NrKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHNlY3Rvcl90IGJsb2NrLFxcbiBcXHRcXHRyZXR1cm4gVjJfbWluaXhfZ2V0X2Jsb2NrKGlub2RlLCBibG9jaywgYmhfcmVzdWx0LCBjcmVhdGUpO1xcbiB9XFxuIFxcbi1zdGF0aWMgaW50IG1pbml4X3dyaXRlcGFnZXMoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXFxuKy8qIFRoZSBvbGQgbWluaXhfd3JpdGVwYWdlcywgcHJlc2VydmVkIGZvciBkaXJlY3Rvcnkgb3BlcmF0aW9ucy4gKi9cXG4rc3RhdGljIGludCBtaW5peF9ibG9ja193cml0ZXBhZ2VzKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxcbiBcXHRcXHRzdHJ1Y3Qgd3JpdGViYWNrX2NvbnRyb2wgKndiYylcXG4ge1xcbiBcXHRyZXR1cm4gbXBhZ2Vfd3JpdGVwYWdlcyhtYXBwaW5nLCB3YmMsIG1pbml4X2dldF9ibG9jayk7XFxuIH1cXG4gXFxuK3N0YXRpYyBpbnQgbWluaXhfd3JpdGVwYWdlcyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcXG4rXFx0XFx0c3RydWN0IHdyaXRlYmFja19jb250cm9sICp3YmMpXFxuK3tcXG4rXFx0c3RydWN0IGlvbWFwX3dyaXRlcGFnZV9jdHggd3BjID0ge1xcbitcXHRcXHQuaW5vZGUgPSBtYXBwaW5nLVxcdTAwM2Vob3N0LFxcbitcXHRcXHQud2JjID0gd2JjLFxcbitcXHRcXHQub3BzID0gXFx1MDAyNm1pbml4X3dyaXRlYmFja19vcHMsXFxuK1xcdH07XFxuK1xcdHJldHVybiBpb21hcF93cml0ZXBhZ2VzKFxcdTAwMjZ3cGMpO1xcbit9XFxuK1xcbiBzdGF0aWMgaW50IG1pbml4X3JlYWRfZm9saW8oc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuK3tcXG4rXFx0Y29uc3Qgc3RydWN0IGlvbWFwX29wcyAqb3BzID0gbWluaXhfaW9tYXBfb3BzX3Zlcihmb2xpby1cXHUwMDNlbWFwcGluZy1cXHUwMDNlaG9zdCk7XFxuK1xcbitcXHRpb21hcF9iaW9fcmVhZF9mb2xpbyhmb2xpbywgb3BzKTtcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuKy8qIFRoZSBvbGQgbWluaXhfcmVhZF9mb2xpbywgcHJlc2VydmVkIGZvciBkaXJlY3Rvcnkgb3BlcmF0aW9ucy4gKi9cXG4rc3RhdGljIGludCBtaW5peF9ibG9ja19yZWFkX2ZvbGlvKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbiB7XFxuIFxcdHJldHVybiBibG9ja19yZWFkX2Z1bGxfZm9saW8oZm9saW8sIG1pbml4X2dldF9ibG9jayk7XFxuIH1cXG4gXFxuK3N0YXRpYyB2b2lkIG1pbml4X3JlYWRhaGVhZChzdHJ1Y3QgcmVhZGFoZWFkX2NvbnRyb2wgKnJhYylcXG4re1xcbitcXHRjb25zdCBzdHJ1Y3QgaW9tYXBfb3BzICpvcHMgPSBtaW5peF9pb21hcF9vcHNfdmVyKHJhYy1cXHUwMDNlbWFwcGluZy1cXHUwMDNlaG9zdCk7XFxuK1xcbitcXHRpb21hcF9iaW9fcmVhZGFoZWFkKHJhYywgb3BzKTtcXG4rfVxcbitcXG4gaW50IG1pbml4X3ByZXBhcmVfY2h1bmsoc3RydWN0IGZvbGlvICpmb2xpbywgbG9mZl90IHBvcywgdW5zaWduZWQgbGVuKVxcbiB7XFxuIFxcdHJldHVybiBfX2Jsb2NrX3dyaXRlX2JlZ2luKGZvbGlvLCBwb3MsIGxlbiwgbWluaXhfZ2V0X2Jsb2NrKTtcXG5AQCAtNDg3LDI0ICs1NDAsNDIgQEAgc3RhdGljIGludCBtaW5peF93cml0ZV9iZWdpbihjb25zdCBzdHJ1Y3Qga2lvY2IgKmlvY2IsXFxuIFxcbiBzdGF0aWMgc2VjdG9yX3QgbWluaXhfYm1hcChzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgc2VjdG9yX3QgYmxvY2spXFxuIHtcXG4tXFx0cmV0dXJuIGdlbmVyaWNfYmxvY2tfYm1hcChtYXBwaW5nLGJsb2NrLG1pbml4X2dldF9ibG9jayk7XFxuK1xcdGNvbnN0IHN0cnVjdCBpb21hcF9vcHMgKm9wcyA9IG1pbml4X2lvbWFwX29wc192ZXIobWFwcGluZy1cXHUwMDNlaG9zdCk7XFxuK1xcbitcXHRyZXR1cm4gaW9tYXBfYm1hcChtYXBwaW5nLCBibG9jaywgb3BzKTtcXG4gfVxcbiBcXG4tc3RhdGljIGNvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgbWluaXhfYW9wcyA9IHtcXG4tXFx0LmRpcnR5X2ZvbGlvXFx0PSBibG9ja19kaXJ0eV9mb2xpbyxcXG4tXFx0LmludmFsaWRhdGVfZm9saW8gPSBibG9ja19pbnZhbGlkYXRlX2ZvbGlvLFxcbitjb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZV9vcGVyYXRpb25zIG1pbml4X2FvcHMgPSB7XFxuK1xcdC5kaXJ0eV9mb2xpb1xcdD0gaW9tYXBfZGlydHlfZm9saW8sXFxuK1xcdC5pbnZhbGlkYXRlX2ZvbGlvID0gaW9tYXBfaW52YWxpZGF0ZV9mb2xpbyxcXG4gXFx0LnJlYWRfZm9saW8gPSBtaW5peF9yZWFkX2ZvbGlvLFxcbitcXHQucmVhZGFoZWFkID0gbWluaXhfcmVhZGFoZWFkLFxcbiBcXHQud3JpdGVwYWdlcyA9IG1pbml4X3dyaXRlcGFnZXMsXFxuK1xcdC5taWdyYXRlX2ZvbGlvID0gZmlsZW1hcF9taWdyYXRlX2ZvbGlvLFxcbitcXHQuYm1hcCA9IG1pbml4X2JtYXAsXFxuK1xcdC5pc19wYXJ0aWFsbHlfdXB0b2RhdGUgPSBpb21hcF9pc19wYXJ0aWFsbHlfdXB0b2RhdGUsXFxuK1xcdC5yZWxlYXNlX2ZvbGlvID0gaW9tYXBfcmVsZWFzZV9mb2xpbyxcXG4rXFx0LmVycm9yX3JlbW92ZV9mb2xpbyA9IGdlbmVyaWNfZXJyb3JfcmVtb3ZlX2ZvbGlvLFxcbit9O1xcbitcXG4rLyogQSBzcGVjaWFsIGFvcHMgZm9yIGRpcmVjdG9yaWVzIHRoYXQga2VlcHMgdXNpbmcgdGhlIGJ1ZmZlciBoZWFkIGNodW5rcywgYXRcXG4rICogbGVhc3QgZm9yIHRoZSB0aW1lIGJlaW5nLlxcbisgKi9cXG4rc3RhdGljIGNvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgbWluaXhfZGlyX2FvcHMgPSB7XFxuK1xcdC5kaXJ0eV9mb2xpbyA9IGJsb2NrX2RpcnR5X2ZvbGlvLFxcbitcXHQuaW52YWxpZGF0ZV9mb2xpbyA9IGJsb2NrX2ludmFsaWRhdGVfZm9saW8sXFxuK1xcdC5yZWFkX2ZvbGlvID0gbWluaXhfYmxvY2tfcmVhZF9mb2xpbyxcXG4gXFx0LndyaXRlX2JlZ2luID0gbWluaXhfd3JpdGVfYmVnaW4sXFxuIFxcdC53cml0ZV9lbmQgPSBnZW5lcmljX3dyaXRlX2VuZCxcXG4gXFx0Lm1pZ3JhdGVfZm9saW8gPSBidWZmZXJfbWlncmF0ZV9mb2xpbyxcXG4gXFx0LmJtYXAgPSBtaW5peF9ibWFwLFxcbi1cXHQuZGlyZWN0X0lPID0gbm9vcF9kaXJlY3RfSU9cXG4rXFx0LndyaXRlcGFnZXMgPSBtaW5peF9ibG9ja193cml0ZXBhZ2VzLFxcbiB9O1xcbiBcXG4gc3RhdGljIGNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIG1pbml4X3N5bWxpbmtfaW5vZGVfb3BlcmF0aW9ucyA9IHtcXG4tXFx0LmdldF9saW5rXFx0PSBwYWdlX2dldF9saW5rLFxcbitcXHQuZ2V0X2xpbmtcXHQ9IG1pbml4X2dldF9saW5rLFxcbiBcXHQuZ2V0YXR0clxcdD0gbWluaXhfZ2V0YXR0cixcXG4rXFx0LnNldGF0dHJcXHQ9IG1pbml4X3NldGF0dHIsXFxuIH07XFxuIFxcbiB2b2lkIG1pbml4X3NldF9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBkZXZfdCByZGV2KVxcbkBAIC01MTYsNyArNTg3LDcgQEAgdm9pZCBtaW5peF9zZXRfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSwgZGV2X3QgcmRldilcXG4gXFx0fSBlbHNlIGlmIChTX0lTRElSKGlub2RlLVxcdTAwM2VpX21vZGUpKSB7XFxuIFxcdFxcdGlub2RlLVxcdTAwM2VpX29wID0gXFx1MDAyNm1pbml4X2Rpcl9pbm9kZV9vcGVyYXRpb25zO1xcbiBcXHRcXHRpbm9kZS1cXHUwMDNlaV9mb3AgPSBcXHUwMDI2bWluaXhfZGlyX29wZXJhdGlvbnM7XFxuLVxcdFxcdGlub2RlLVxcdTAwM2VpX21hcHBpbmctXFx1MDAzZWFfb3BzID0gXFx1MDAyNm1pbml4X2FvcHM7XFxuK1xcdFxcdGlub2RlLVxcdTAwM2VpX21hcHBpbmctXFx1MDAzZWFfb3BzID0gXFx1MDAyNm1pbml4X2Rpcl9hb3BzO1xcbiBcXHR9IGVsc2UgaWYgKFNfSVNMTksoaW5vZGUtXFx1MDAzZWlfbW9kZSkpIHtcXG4gXFx0XFx0aW5vZGUtXFx1MDAzZWlfb3AgPSBcXHUwMDI2bWluaXhfc3ltbGlua19pbm9kZV9vcGVyYXRpb25zO1xcbiBcXHRcXHRpbm9kZV9ub2hpZ2htZW0oaW5vZGUpO1xcbkBAIC03NjgsNCArODM5LDMgQEAgbW9kdWxlX2luaXQoaW5pdF9taW5peF9mcylcXG4gbW9kdWxlX2V4aXQoZXhpdF9taW5peF9mcylcXG4gTU9EVUxFX0RFU0NSSVBUSU9OKFxcXCJNaW5peCBmaWxlIHN5c3RlbVxcXCIpO1xcbiBNT0RVTEVfTElDRU5TRShcXFwiR1BMXFxcIik7XFxuLVxcbmRpZmYgLS1naXQgYS9mcy9taW5peC9pb21hcC5jIGIvZnMvbWluaXgvaW9tYXAuY1xcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLjdiYjA0MzllMzY2OTk2XFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL2ZzL21pbml4L2lvbWFwLmNcXG5AQCAtMCwwICsxLDExNCBAQFxcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuKy8qXFxuKyAqIGlvbWFwIGZ1bmN0aW9ucyBmb3IgbWluaXguIEF0IGxlYXN0IHRoZSBmaXJzdCBwYXNzIG9mIHRoaXMgZmlsZSB3YXMgdGFrZW5cXG4rICogZnJvbSB0aGUgeGlhZnMgaW9tYXAuYywgd2hpY2ggaXMgZml0dGluZyBzaW5jZSB0aGUgeGlhZnMgbW9kdWxlIGluIHR1cm5cXG4rICogYm9ycm93ZWQgaGVhdmlseSBmcm9tIHRoZSBtb2Rlcm5pemVkIG1pbml4IGZzIGtlcm5lbCBtb2R1bGUuXFxuKyAqL1xcbitcXG4rLypcXG4rICogbWluaXhfaW9tYXBfYmVnaW4gLSBtYXAgYSBmaWxlIHJhbmdlIHRvIGRpc2sgYmxvY2tzLiBJdCBhY3RzIGFzIGEgcmVwbGFjZW1lbnRcXG4rICogZm9yIGdldF9ibG9jayBpbiBpdHJlZV9jb21tb24uYywgYXQgbGVhc3QgaW4gdGhlIGltcG9ydGFudCB3YXlzLCBhbmQgaXNcXG4rICogYWRhcHRlZCBmcm9tIGl0LCBidXQgaXQgdXNlcyBpb21hcCBpbnN0ZWFkIG9mIGJ1ZmZlcl9oZWFkLiBUaGlzIGlzIHRha2VuXFxuKyAqIGRpcmVjdGx5IGZyb20gdGhlIG91dC1vZi10cmVlIHhpYWZzIGlvbWFwIGNoYW5nZXMsIGFuZCB0aGUgZXhmYXQgaW9tYXBcXG4rICogY2hhbmdlcyB3ZXJlIGFuIGluc3BpcmF0aW9uIGZvciB0aGF0LlxcbisgKi9cXG4rc3RhdGljIGludCBtaW5peF9pb21hcF9iZWdpbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb2ZmX3Qgb2Zmc2V0LCBsb2ZmX3QgbGVuZ3RoLFxcbitcXHR1bnNpZ25lZCBpbnQgZmxhZ3MsIHN0cnVjdCBpb21hcCAqaW9tYXAsIHN0cnVjdCBpb21hcCAqc3JjbWFwKVxcbit7XFxuK1xcdHN0cnVjdCBzdXBlcl9ibG9jayAqc2IgPSBpbm9kZS1cXHUwMDNlaV9zYjtcXG4rXFx0dW5zaWduZWQgaW50IGJsa2JpdHMgPSBzYi1cXHUwMDNlc19ibG9ja3NpemVfYml0cztcXG4rXFx0c2VjdG9yX3QgaWJsb2NrID0gb2Zmc2V0IFxcdTAwM2VcXHUwMDNlIGJsa2JpdHM7XFxuK1xcdGludCBjcmVhdGUgPSBmbGFncyBcXHUwMDI2IElPTUFQX1dSSVRFO1xcbitcXG4rXFx0LyogTW9zdGx5IHRha2VuIGZyb20gbW9kZXJuLXhpYWZzIGl0cmVlLmMgZ2V0X2Jsb2NrIHdpdGggZWxlbWVudHMgZnJvbVxcbitcXHQgKiBzaW1pbGFyIGV4ZmF0IG9wZXJhdGlvbnMuXFxuK1xcdCAqL1xcbitcXHRpbnQgb2Zmc2V0c1tERVBUSF07XFxuK1xcdEluZGlyZWN0IGNoYWluW0RFUFRIXTtcXG4rXFx0SW5kaXJlY3QgKnBhcnRpYWw7XFxuK1xcdGludCBkZXB0aCA9IGJsb2NrX3RvX3BhdGgoaW5vZGUsIGlibG9jaywgb2Zmc2V0cyk7XFxuK1xcdGludCBsZWZ0O1xcbitcXHRpbnQgZXJyID0gLUVJTztcXG4rXFxuK1xcdHNlY3Rvcl90IHBoeXM7XFxuK1xcbitcXHQvKiBibG9jayBpcyBiZXlvbmQgbWF4IGZpbGUgc2l6ZSAqL1xcbitcXHRpZiAoZGVwdGggPT0gMClcXG4rXFx0XFx0Z290byBvdXQ7XFxuK1xcbitcXHRpb21hcC1cXHUwMDNlYmRldiA9IGlub2RlLVxcdTAwM2VpX3NiLVxcdTAwM2VzX2JkZXY7XFxuK1xcbityZXJlYWQ6XFxuK1xcdHBhcnRpYWwgPSBnZXRfYnJhbmNoKGlub2RlLCBkZXB0aCwgb2Zmc2V0cywgY2hhaW4sIFxcdTAwMjZlcnIpO1xcbitcXG4rXFx0LyogU2ltcGxlc3QgY2FzZSAtIGJsb2NrIGZvdW5kLCBubyBhbGxvY2F0aW9uIG5lZWRlZCAqL1xcbitcXHRpZiAoIXBhcnRpYWwpIHtcXG4rXFx0XFx0LyogQml0IG9mIGEgd2VpcmQgb3JkZXIsIGJ1dCBpdCdsbCBtYWtlIHNlbnNlIHdoZW4geW91IGdldCB0b1xcbitcXHRcXHQgKiB0aGUgYm90dG9tLlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0aW9tYXAtXFx1MDAzZWZsYWdzID0gSU9NQVBfRl9NRVJHRUQ7XFxuK2dvdF9pdDpcXG4rXFx0XFx0cGh5cyA9IGJsb2NrX3RvX2NwdShjaGFpbltkZXB0aCAtIDFdLmtleSk7XFxuK1xcdFxcdHBhcnRpYWwgPSBjaGFpbitkZXB0aC0xO1xcbitcXHRcXHQvKiBTZXQgdXAgdGhlIGlvbWFwIHN0cnVjdCBiZWZvcmUgY2xlYW5pbmcgdXAgKi9cXG4rXFx0XFx0aW9tYXAtXFx1MDAzZXR5cGUgPSBJT01BUF9NQVBQRUQ7XFxuK1xcdFxcdGlvbWFwLVxcdTAwM2VhZGRyID0gKHU2NClwaHlzIFxcdTAwM2NcXHUwMDNjIGJsa2JpdHM7XFxuK1xcdFxcdGlvbWFwLVxcdTAwM2VsZW5ndGggPSAxIFxcdTAwM2NcXHUwMDNjIGJsa2JpdHM7XFxuK1xcdFxcdGlvbWFwLVxcdTAwM2VvZmZzZXQgPSAodTY0KWlibG9jayBcXHUwMDNjXFx1MDAzYyBibGtiaXRzO1xcbitcXHRcXHRnb3RvIGNsZWFudXA7XFxuK1xcdH1cXG4rXFxuK1xcdC8qIE5leHQgc2ltcGxlIGNhc2UgLSBwbGFpbiBsb29rdXAgb3IgZmFpbGVkIHJlYWQgb2YgaW5kaXJlY3QgYmxvY2sgKi9cXG4rXFx0aWYgKCFjcmVhdGUgfHwgZXJyID09IC1FSU8pIHtcXG4rXFx0XFx0aW9tYXAtXFx1MDAzZXR5cGUgPSBJT01BUF9IT0xFO1xcbitcXHRcXHRpb21hcC1cXHUwMDNlYWRkciA9IElPTUFQX05VTExfQUREUjtcXG4rXFx0XFx0aW9tYXAtXFx1MDAzZWxlbmd0aCA9IDEgXFx1MDAzY1xcdTAwM2MgYmxrYml0cztcXG4rXFx0XFx0aW9tYXAtXFx1MDAzZW9mZnNldCA9ICh1NjQpaWJsb2NrIFxcdTAwM2NcXHUwMDNjIGJsa2JpdHM7XFxuK1xcdFxcdGlvbWFwLVxcdTAwM2VmbGFncyA9IDA7XFxuK2NsZWFudXA6XFxuK1xcdFxcdHdoaWxlIChwYXJ0aWFsIFxcdTAwM2UgY2hhaW4pIHtcXG4rXFx0XFx0XFx0YnJlbHNlKHBhcnRpYWwtXFx1MDAzZWJoKTtcXG4rXFx0XFx0XFx0cGFydGlhbC0tO1xcbitcXHRcXHR9XFxuK291dDpcXG4rXFx0XFx0cmV0dXJuIGVycjtcXG4rXFx0fVxcbitcXG4rXFx0LypcXG4rXFx0ICogSW5kaXJlY3QgYmxvY2sgbWlnaHQgYmUgcmVtb3ZlZCBieSB0cnVuY2F0ZSB3aGlsZSB3ZSB3ZXJlXFxuK1xcdCAqIHJlYWRpbmcgaXQuIEhhbmRsaW5nIG9mIHRoYXQgY2FzZSAoZm9yZ2V0IHdoYXQgd2UndmUgZ290IGFuZFxcbitcXHQgKiByZXJlYWQpIGlzIHRha2VuIG91dCBvZiB0aGUgbWFpbiBwYXRoLlxcbitcXHQgKi9cXG4rXFx0aWYgKGVyciA9PSAtRUFHQUlOKVxcbitcXHRcXHRnb3RvIGNoYW5nZWQ7XFxuK1xcbitcXHRsZWZ0ID0gKGNoYWluICsgZGVwdGgpIC0gcGFydGlhbDtcXG4rXFx0ZXJyID0gYWxsb2NfYnJhbmNoKGlub2RlLCBsZWZ0LCBvZmZzZXRzICsgKHBhcnRpYWwgLSBjaGFpbiksIHBhcnRpYWwpO1xcbitcXHRpZiAoZXJyKVxcbitcXHRcXHRnb3RvIGNsZWFudXA7XFxuK1xcbitcXHRpZiAoc3BsaWNlX2JyYW5jaChpbm9kZSwgY2hhaW4sIHBhcnRpYWwsIGxlZnQpIFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBjaGFuZ2VkO1xcbitcXG4rXFx0LyogU3VjY2Vzc2Z1bCBhbGxvY2F0aW9uLCBtYXBwaW5nIGl0LiAqL1xcbitcXHRpb21hcC1cXHUwMDNlZmxhZ3MgPSBJT01BUF9GX05FVztcXG4rXFx0Z290byBnb3RfaXQ7XFxuK1xcbitjaGFuZ2VkOlxcbitcXHR3aGlsZSAocGFydGlhbCBcXHUwMDNlIGNoYWluKSB7XFxuK1xcdFxcdGJyZWxzZShwYXJ0aWFsLVxcdTAwM2ViaCk7XFxuK1xcdFxcdHBhcnRpYWwtLTtcXG4rXFx0fVxcbitcXHRnb3RvIHJlcmVhZDtcXG4rfVxcbitcXG4rLypcXG4rICogbWluaXhfaW9tYXBfZW5kIGVuZHMgdXAgYmVpbmcgYSBub3A7IHNpbmNlIG1pbml4IGRvZXNuJ3QgaGF2ZSBhbnkgZXh0ZW50cyBvclxcbisgKiB0cmFuc2FjdGlvbnMgdG8gd29ycnkgYWJvdXQsIHRoZXJlIGlzbid0IGFueXRoaW5nIHRvIHVwZGF0ZSBoZXJlLiBUaGUgb24tZGlza1xcbisgKiBpbmRpcmVjdCBibG9ja3MgZ2V0IGRpcnRpZWQgaW4gbWluaXhfaW9tYXBfYmVnaW4uXFxuKyAqL1xcbitzdGF0aWMgaW50IG1pbml4X2lvbWFwX2VuZChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb2ZmX3Qgb2Zmc2V0LCBsb2ZmX3QgbGVuZ3RoLFxcbitcXHRzc2l6ZV90IHdyaXR0ZW4sIHVuc2lnbmVkIGludCBmbGFncywgc3RydWN0IGlvbWFwICppb21hcClcXG4re1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbmRpZmYgLS1naXQgYS9mcy9taW5peC9pdHJlZV9jb21tb24uYyBiL2ZzL21pbml4L2l0cmVlX2NvbW1vbi5jXFxuaW5kZXggYzNjZDJjNzVhZjljZWUuLjVhOGI3M2E3YmVkYTc4IDEwMDY0NFxcbi0tLSBhL2ZzL21pbml4L2l0cmVlX2NvbW1vbi5jXFxuKysrIGIvZnMvbWluaXgvaXRyZWVfY29tbW9uLmNcXG5AQCAtMzExLDcgKzMxMSwxNiBAQCBzdGF0aWMgaW5saW5lIHZvaWQgdHJ1bmNhdGUgKHN0cnVjdCBpbm9kZSAqIGlub2RlKVxcbiBcXHRsb25nIGlibG9jaztcXG4gXFxuIFxcdGlibG9jayA9IChpbm9kZS1cXHUwMDNlaV9zaXplICsgc2ItXFx1MDAzZXNfYmxvY2tzaXplIC0xKSBcXHUwMDNlXFx1MDAzZSBzYi1cXHUwMDNlc19ibG9ja3NpemVfYml0cztcXG4tXFx0YmxvY2tfdHJ1bmNhdGVfcGFnZShpbm9kZS1cXHUwMDNlaV9tYXBwaW5nLCBpbm9kZS1cXHUwMDNlaV9zaXplLCBnZXRfYmxvY2spO1xcbitcXG4rXFx0LyogRGVwZW5kaW5nIG9uIHdoYXQgYWRkcmVzcyBzcGFjZSBvcGVyYXRpb25zIGFyZSBiZWluZyB1c2VkIGJ5IHRoZVxcbitcXHQgKiBpbm9kZSBiZWluZyB0cnVuY2F0ZWQsIHdlIG5lZWQgdG8gZWl0aGVyIGNhbGwgaW9tYXBfdHJ1bmNhdGVfcGFnZSBvclxcbitcXHQgKiBibG9ja190cnVuY2F0ZV9wYWdlLlxcbitcXHQgKi9cXG4rXFx0aWYgKGlub2RlLVxcdTAwM2VpX21hcHBpbmctXFx1MDAzZWFfb3BzID09IFxcdTAwMjZtaW5peF9hb3BzKVxcbitcXHRcXHRpb21hcF90cnVuY2F0ZV9wYWdlKGlub2RlLCBpbm9kZS1cXHUwMDNlaV9zaXplLCBOVUxMLFxcbitcXHRcXHRcXHRtaW5peF9pb21hcF9vcHNfdmVyKGlub2RlKSwgTlVMTCwgTlVMTCk7XFxuK1xcdGVsc2VcXG4rXFx0XFx0YmxvY2tfdHJ1bmNhdGVfcGFnZShpbm9kZS1cXHUwMDNlaV9tYXBwaW5nLCBpbm9kZS1cXHUwMDNlaV9zaXplLCBnZXRfYmxvY2spO1xcbiBcXG4gXFx0biA9IGJsb2NrX3RvX3BhdGgoaW5vZGUsIGlibG9jaywgb2Zmc2V0cyk7XFxuIFxcdGlmICghbilcXG5kaWZmIC0tZ2l0IGEvZnMvbWluaXgvaXRyZWVfdjEuYyBiL2ZzL21pbml4L2l0cmVlX3YxLmNcXG5pbmRleCAxZmVkOTA2MDQyYWE4NC4uNThjMjlmNDQ0M2QzNzIgMTAwNjQ0XFxuLS0tIGEvZnMvbWluaXgvaXRyZWVfdjEuY1xcbisrKyBiL2ZzL21pbml4L2l0cmVlX3YxLmNcXG5AQCAtNDksNiArNDksMTggQEAgc3RhdGljIGludCBibG9ja190b19wYXRoKHN0cnVjdCBpbm9kZSAqIGlub2RlLCBsb25nIGJsb2NrLCBpbnQgb2Zmc2V0c1tERVBUSF0pXFxuIH1cXG4gXFxuICNpbmNsdWRlIFxcXCJpdHJlZV9jb21tb24uY1xcXCJcXG4rLyogTk9UQSBCRU5FOlxcbisgKlxcbisgKiBUaGlzIGlzIGlja3kgdG8gbWUsIGJ1dCBhdCB0aGUgc2FtZSB0aW1lIGhhdmluZyBpdCBiZSBhIHN0YW5kYWxvbmUgQyBmaWxlXFxuKyAqIHRoYXQncyBjb21waWxlZCB0byBvYmplY3QgZm9ybSBhbmQgbGlua2VkIHNlcGFyYXRlbHkgbGlrZSBpdCBpcyBpbiB4aWFmcyBpc1xcbisgKiBtdWNoIG5hc3RpZXIgaW4gbWluaXggYmVjYXVzZSBvZiB0aGUgZGlmZmVyZW50IHZlcnNpb25zIG9mIHRoZSBtaW5peCBmcyB0aGF0XFxuKyAqIGhhdmUgc29tZSB2ZXJ5LCB2ZXJ5IGRpZmZlcmVudCBhc3BlY3RzLCBsaWtlIHRoZSBzaXplIG9mIGJsb2NrX3QuIEkgZG9uJ3RcXG4rICogbGlrZSBpdCwgYnV0IHNpbmNlIG1pbml4IGFscmVhZHkgaGFzIHRoaXMgcGF0dGVybiB3aGVyZSBhIGNvbW1vbiBpdHJlZSBmaWxlXFxuKyAqIGlzIGluY2x1ZGVkIGluIHRoZSBpdHJlZV92MSBhbmQgaXRyZWVfdjIoYW5kIHYzKSBmaWxlcywgSSdtIGluY2x1ZGluZyBpb21hcC5jXFxuKyAqIGluIHRoZXNlIGZpbGVzIGFzIHdlbGwuIEl0IGRvZXMgYXQgbGVhc3QgYXZvaWQgZXhwb3J0aW5nIHNvbWUgY3VycmVudGx5XFxuKyAqIHN0YXRpYyBmdW5jdGlvbnMgdGhhdCBhcmVuJ3QgbmVlZGVkIGFueXdoZXJlIGJ1dCBpdHJlZV9jb21tb24uYyBhbmQgaW9tYXAuYy5cXG4rICovXFxuKyNpbmNsdWRlIFxcXCJpb21hcC5jXFxcIlxcbiBcXG4gaW50IFYxX21pbml4X2dldF9ibG9jayhzdHJ1Y3QgaW5vZGUgKiBpbm9kZSwgbG9uZyBibG9jayxcXG4gXFx0XFx0XFx0c3RydWN0IGJ1ZmZlcl9oZWFkICpiaF9yZXN1bHQsIGludCBjcmVhdGUpXFxuQEAgLTYxLDcgKzczLDE4IEBAIHZvaWQgVjFfbWluaXhfdHJ1bmNhdGUoc3RydWN0IGlub2RlICogaW5vZGUpXFxuIFxcdHRydW5jYXRlKGlub2RlKTtcXG4gfVxcbiBcXG4tdW5zaWduZWQgVjFfbWluaXhfYmxvY2tzKGxvZmZfdCBzaXplLCBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxcbit1bnNpZ25lZCBpbnQgVjFfbWluaXhfYmxvY2tzKGxvZmZfdCBzaXplLCBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxcbiB7XFxuIFxcdHJldHVybiBuYmxvY2tzKHNpemUsIHNiKTtcXG4gfVxcbitcXG4raW50IFYxX21pbml4X2lvbWFwX2JlZ2luKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfdCBvZmZzZXQsIGxvZmZfdCBsZW5ndGgsXFxuK1xcdHVuc2lnbmVkIGludCBmbGFncywgc3RydWN0IGlvbWFwICppb21hcCwgc3RydWN0IGlvbWFwICpzcmNtYXApXFxuK3tcXG4rXFx0cmV0dXJuIG1pbml4X2lvbWFwX2JlZ2luKGlub2RlLCBvZmZzZXQsIGxlbmd0aCwgZmxhZ3MsIGlvbWFwLCBzcmNtYXApO1xcbit9XFxuK1xcbitjb25zdCBzdHJ1Y3QgaW9tYXBfb3BzIFYxX21pbml4X2lvbWFwX29wcyA9IHtcXG4rXFx0LmlvbWFwX2JlZ2luID0gVjFfbWluaXhfaW9tYXBfYmVnaW4sXFxuK1xcdC5pb21hcF9lbmQgICA9IG1pbml4X2lvbWFwX2VuZCxcXG4rfTtcXG5kaWZmIC0tZ2l0IGEvZnMvbWluaXgvaXRyZWVfdjIuYyBiL2ZzL21pbml4L2l0cmVlX3YyLmNcXG5pbmRleCA5ZDAwZjMxYTJkOWQxNS4uZmM3YTVhZThmYTFjYTMgMTAwNjQ0XFxuLS0tIGEvZnMvbWluaXgvaXRyZWVfdjIuY1xcbisrKyBiL2ZzL21pbml4L2l0cmVlX3YyLmNcXG5AQCAtNTcsNiArNTcsMTAgQEAgc3RhdGljIGludCBibG9ja190b19wYXRoKHN0cnVjdCBpbm9kZSAqIGlub2RlLCBsb25nIGJsb2NrLCBpbnQgb2Zmc2V0c1tERVBUSF0pXFxuIH1cXG4gXFxuICNpbmNsdWRlIFxcXCJpdHJlZV9jb21tb24uY1xcXCJcXG4rLyogU2VlIHRoZSBub3RlIGluIGl0cmVlX3YxIGluIGEgY29tbWVudCB0aGF0IHN0YXJ0cyBcXFwiTk9UQSBCRU5FXFxcIiBmb3IgYW5cXG4rICogZXhwbGFuYXRpb24gZm9yIHdoeSBpb21hcC5jIGlzIGluY2x1ZGVkIGhlcmUuXFxuKyAqL1xcbisjaW5jbHVkZSBcXFwiaW9tYXAuY1xcXCJcXG4gXFxuIGludCBWMl9taW5peF9nZXRfYmxvY2soc3RydWN0IGlub2RlICogaW5vZGUsIGxvbmcgYmxvY2ssXFxuIFxcdFxcdFxcdHN0cnVjdCBidWZmZXJfaGVhZCAqYmhfcmVzdWx0LCBpbnQgY3JlYXRlKVxcbkBAIC02OSw3ICs3MywxOCBAQCB2b2lkIFYyX21pbml4X3RydW5jYXRlKHN0cnVjdCBpbm9kZSAqIGlub2RlKVxcbiBcXHR0cnVuY2F0ZShpbm9kZSk7XFxuIH1cXG4gXFxuLXVuc2lnbmVkIFYyX21pbml4X2Jsb2Nrcyhsb2ZmX3Qgc2l6ZSwgc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcXG4rdW5zaWduZWQgaW50IFYyX21pbml4X2Jsb2Nrcyhsb2ZmX3Qgc2l6ZSwgc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcXG4ge1xcbiBcXHRyZXR1cm4gbmJsb2NrcyhzaXplLCBzYik7XFxuIH1cXG4rXFxuK2ludCBWMl9taW5peF9pb21hcF9iZWdpbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb2ZmX3Qgb2Zmc2V0LCBsb2ZmX3QgbGVuZ3RoLFxcbitcXHR1bnNpZ25lZCBpbnQgZmxhZ3MsIHN0cnVjdCBpb21hcCAqaW9tYXAsIHN0cnVjdCBpb21hcCAqc3JjbWFwKVxcbit7XFxuK1xcdHJldHVybiBtaW5peF9pb21hcF9iZWdpbihpbm9kZSwgb2Zmc2V0LCBsZW5ndGgsIGZsYWdzLCBpb21hcCwgc3JjbWFwKTtcXG4rfVxcbitcXG4rY29uc3Qgc3RydWN0IGlvbWFwX29wcyBWMl9taW5peF9pb21hcF9vcHMgPSB7XFxuK1xcdC5pb21hcF9iZWdpbiA9IFYyX21pbml4X2lvbWFwX2JlZ2luLFxcbitcXHQuaW9tYXBfZW5kICAgPSBtaW5peF9pb21hcF9lbmQsXFxuK307XFxuZGlmZiAtLWdpdCBhL2ZzL21pbml4L21pbml4LmggYi9mcy9taW5peC9taW5peC5oXFxuaW5kZXggZjIwMjVjOWI1ODI1MmYuLmQxYTg5MGU5NmFiZTJjIDEwMDY0NFxcbi0tLSBhL2ZzL21pbml4L21pbml4LmhcXG4rKysgYi9mcy9taW5peC9taW5peC5oXFxuQEAgLTUsNiArNSw3IEBAXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9mcy5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvcGFnZW1hcC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvbWluaXhfZnMuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2lvbWFwLmhcXHUwMDNlXFxuIFxcbiAjZGVmaW5lIElOT0RFX1ZFUlNJT04oaW5vZGUpXFx0bWluaXhfc2IoaW5vZGUtXFx1MDAzZWlfc2IpLVxcdTAwM2VzX3ZlcnNpb25cXG4gI2RlZmluZSBNSU5JWF9WMVxcdFxcdDB4MDAwMVxcdFxcdC8qIG9yaWdpbmFsIG1pbml4IGZzICovXFxuQEAgLTU2LDcgKzU3LDkgQEAgaW50IG1pbml4X25ld19ibG9jayhzdHJ1Y3QgaW5vZGUgKmlub2RlKTtcXG4gdm9pZCBtaW5peF9mcmVlX2Jsb2NrKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHVuc2lnbmVkIGxvbmcgYmxvY2spO1xcbiB1bnNpZ25lZCBsb25nIG1pbml4X2NvdW50X2ZyZWVfYmxvY2tzKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpO1xcbiBpbnQgbWluaXhfZ2V0YXR0cihzdHJ1Y3QgbW50X2lkbWFwICosIGNvbnN0IHN0cnVjdCBwYXRoICosXFxuLVxcdFxcdHN0cnVjdCBrc3RhdCAqLCB1MzIsIHVuc2lnbmVkIGludCk7XFxuK1xcdFxcdHN0cnVjdCBrc3RhdCAqLCB1MzIsIHVuc2lnbmVkKTtcXG4raW50IG1pbml4X3NldGF0dHIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcXG4rXFx0c3RydWN0IGlhdHRyICphdHRyKTtcXG4gaW50IG1pbml4X3ByZXBhcmVfY2h1bmsoc3RydWN0IGZvbGlvICpmb2xpbywgbG9mZl90IHBvcywgdW5zaWduZWQgbGVuKTtcXG4gc3RydWN0IG1hcHBpbmdfbWV0YWRhdGFfYmhzICptaW5peF9nZXRfbWV0YWRhdGFfYmhzKHN0cnVjdCBpbm9kZSAqaW5vZGUpO1xcbiBpbnQgbWluaXhfZnN5bmMoc3RydWN0IGZpbGUgKmZpbGUsIGxvZmZfdCBzdGFydCwgbG9mZl90IGVuZCwgaW50IGRhdGFzeW5jKTtcXG5AQCAtNjksNiArNzIsOCBAQCBleHRlcm4gaW50IFYxX21pbml4X2dldF9ibG9jayhzdHJ1Y3QgaW5vZGUgKiwgbG9uZywgc3RydWN0IGJ1ZmZlcl9oZWFkICosIGludCk7XFxuIGV4dGVybiBpbnQgVjJfbWluaXhfZ2V0X2Jsb2NrKHN0cnVjdCBpbm9kZSAqLCBsb25nLCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKiwgaW50KTtcXG4gZXh0ZXJuIHVuc2lnbmVkIFYxX21pbml4X2Jsb2Nrcyhsb2ZmX3QsIHN0cnVjdCBzdXBlcl9ibG9jayAqKTtcXG4gZXh0ZXJuIHVuc2lnbmVkIFYyX21pbml4X2Jsb2Nrcyhsb2ZmX3QsIHN0cnVjdCBzdXBlcl9ibG9jayAqKTtcXG4rZXh0ZXJuIGludCBtaW5peF9nZXRfYmxvY2soc3RydWN0IGlub2RlICppbm9kZSwgc2VjdG9yX3QgYmxvY2ssXFxuK1xcdFxcdCAgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoX3Jlc3VsdCwgaW50IGNyZWF0ZSk7XFxuIFxcbiBzdHJ1Y3QgbWluaXhfZGlyX2VudHJ5ICptaW5peF9maW5kX2VudHJ5KHN0cnVjdCBkZW50cnkgKiwgc3RydWN0IGZvbGlvICoqKTtcXG4gaW50IG1pbml4X2FkZF9saW5rKHN0cnVjdCBkZW50cnkqLCBzdHJ1Y3QgaW5vZGUqKTtcXG5AQCAtNzcsMTMgKzgyLDI2IEBAIGludCBtaW5peF9tYWtlX2VtcHR5KHN0cnVjdCBpbm9kZSosIHN0cnVjdCBpbm9kZSopO1xcbiBpbnQgbWluaXhfZW1wdHlfZGlyKHN0cnVjdCBpbm9kZSopO1xcbiBpbnQgbWluaXhfc2V0X2xpbmsoc3RydWN0IG1pbml4X2Rpcl9lbnRyeSAqZGUsIHN0cnVjdCBmb2xpbyAqZm9saW8sXFxuIFxcdFxcdHN0cnVjdCBpbm9kZSAqaW5vZGUpO1xcbitleHRlcm4gY29uc3QgY2hhciAqbWluaXhfZ2V0X2xpbmsoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbitcXHRcXHRzdHJ1Y3QgZGVsYXllZF9jYWxsICpjYWxsYmFjayk7XFxuK1xcbiBzdHJ1Y3QgbWluaXhfZGlyX2VudHJ5ICptaW5peF9kb3Rkb3Qoc3RydWN0IGlub2RlKiwgc3RydWN0IGZvbGlvICoqKTtcXG4gaW5vX3QgbWluaXhfaW5vZGVfYnlfbmFtZShzdHJ1Y3QgZGVudHJ5Kik7XFxuIFxcbitleHRlcm4gaW50IFYxX21pbml4X2lvbWFwX2JlZ2luKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfdCBvZmZzZXQsXFxuK1xcdGxvZmZfdCBsZW5ndGgsIHVuc2lnbmVkIGludCBmbGFncywgc3RydWN0IGlvbWFwICppb21hcCxcXG4rXFx0c3RydWN0IGlvbWFwICpzcmNtYXApO1xcbitleHRlcm4gaW50IFYyX21pbml4X2lvbWFwX2JlZ2luKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfdCBvZmZzZXQsXFxuK1xcdGxvZmZfdCBsZW5ndGgsIHVuc2lnbmVkIGludCBmbGFncywgc3RydWN0IGlvbWFwICppb21hcCxcXG4rXFx0c3RydWN0IGlvbWFwICpzcmNtYXApO1xcbitcXG4rZXh0ZXJuIGNvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgbWluaXhfYW9wcztcXG4gZXh0ZXJuIGNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIG1pbml4X2ZpbGVfaW5vZGVfb3BlcmF0aW9ucztcXG4gZXh0ZXJuIGNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIG1pbml4X2Rpcl9pbm9kZV9vcGVyYXRpb25zO1xcbiBleHRlcm4gY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBtaW5peF9maWxlX29wZXJhdGlvbnM7XFxuIGV4dGVybiBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIG1pbml4X2Rpcl9vcGVyYXRpb25zO1xcbitleHRlcm4gY29uc3Qgc3RydWN0IGlvbWFwX29wcyBWMV9taW5peF9pb21hcF9vcHM7XFxuK2V4dGVybiBjb25zdCBzdHJ1Y3QgaW9tYXBfb3BzIFYyX21pbml4X2lvbWFwX29wcztcXG4gXFxuIHN0YXRpYyBpbmxpbmUgc3RydWN0IG1pbml4X3NiX2luZm8gKm1pbml4X3NiKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXFxuIHtcXG5AQCAtOTUsMTEgKzExMywxNyBAQCBzdGF0aWMgaW5saW5lIHN0cnVjdCBtaW5peF9pbm9kZV9pbmZvICptaW5peF9pKHN0cnVjdCBpbm9kZSAqaW5vZGUpXFxuIFxcdHJldHVybiBjb250YWluZXJfb2YoaW5vZGUsIHN0cnVjdCBtaW5peF9pbm9kZV9pbmZvLCB2ZnNfaW5vZGUpO1xcbiB9XFxuIFxcbi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIG1pbml4X2Jsb2Nrc19uZWVkZWQodW5zaWduZWQgYml0cywgdW5zaWduZWQgYmxvY2tzaXplKVxcbitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBtaW5peF9ibG9ja3NfbmVlZGVkKHVuc2lnbmVkIGludCBiaXRzLCB1bnNpZ25lZCBpbnQgYmxvY2tzaXplKVxcbiB7XFxuIFxcdHJldHVybiBESVZfUk9VTkRfVVAoYml0cywgYmxvY2tzaXplICogOCk7XFxuIH1cXG4gXFxuK3N0YXRpYyBpbmxpbmUgY29uc3Qgc3RydWN0IGlvbWFwX29wcyAqbWluaXhfaW9tYXBfb3BzX3ZlcihzdHJ1Y3QgaW5vZGUgKmlub2RlKVxcbit7XFxuK1xcdHJldHVybiAoSU5PREVfVkVSU0lPTihpbm9kZSkgPT0gTUlOSVhfVjEpID9cXG4rXFx0XFx0XFx1MDAyNlYxX21pbml4X2lvbWFwX29wcyA6IFxcdTAwMjZWMl9taW5peF9pb21hcF9vcHM7XFxuK31cXG4rXFxuICNpZiBkZWZpbmVkKENPTkZJR19NSU5JWF9GU19OQVRJVkVfRU5ESUFOKSBcXHUwMDI2XFx1MDAyNiBcXFxcXFxuIFxcdGRlZmluZWQoQ09ORklHX01JTklYX0ZTX0JJR19FTkRJQU5fMTZCSVRfSU5ERVhFRClcXG4gXFxuQEAgLTEyOSw3ICsxNTMsNyBAQCBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIG1pbml4X2Jsb2Nrc19uZWVkZWQodW5zaWduZWQgYml0cywgdW5zaWduZWQgYmxvY2tzaXplKVxcbiAgKiBiaWctZW5kaWFuIDE2Yml0IGluZGV4ZWQgYml0bWFwc1xcbiAgKi9cXG4gXFxuLXN0YXRpYyBpbmxpbmUgaW50IG1pbml4X2ZpbmRfZmlyc3RfemVyb19iaXQoY29uc3Qgdm9pZCAqdmFkZHIsIHVuc2lnbmVkIHNpemUpXFxuK3N0YXRpYyBpbmxpbmUgaW50IG1pbml4X2ZpbmRfZmlyc3RfemVyb19iaXQoY29uc3Qgdm9pZCAqdmFkZHIsIHVuc2lnbmVkIGludCBzaXplKVxcbiB7XFxuIFxcdGNvbnN0IHVuc2lnbmVkIHNob3J0ICpwID0gdmFkZHIsICphZGRyID0gdmFkZHI7XFxuIFxcdHVuc2lnbmVkIHNob3J0IG51bTtcXG5kaWZmIC0tZ2l0IGEvZnMvbWluaXgvbmFtZWkuYyBiL2ZzL21pbml4L25hbWVpLmNcXG5pbmRleCAyNjNlNGJhOGIxYzgyMi4uZTI0NWY1NWE2OGZmNWQgMTAwNjQ0XFxuLS0tIGEvZnMvbWluaXgvbmFtZWkuY1xcbisrKyBiL2ZzL21pbml4L25hbWVpLmNcXG5AQCAtNiw2ICs2LDggQEBcXG4gICovXFxuIFxcbiAjaW5jbHVkZSBcXFwibWluaXguaFxcXCJcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2J1ZmZlcl9oZWFkLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9uYW1laS5oXFx1MDAzZVxcbiBcXG4gc3RhdGljIGludCBhZGRfbm9uZGlyKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGlub2RlICppbm9kZSlcXG4ge1xcbkBAIC02OSw2ICs3MSwxMDEgQEAgc3RhdGljIGludCBtaW5peF9jcmVhdGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxcbiBcXHRyZXR1cm4gbWluaXhfbWtub2QoXFx1MDAyNm5vcF9tbnRfaWRtYXAsIGRpciwgZGVudHJ5LCBtb2RlLCAwKTtcXG4gfVxcbiBcXG4rc3RhdGljIGlubGluZSB1MTYgKnYxX2lfZGF0YShzdHJ1Y3QgaW5vZGUgKmlub2RlKVxcbit7XFxuK1xcdHJldHVybiAodTE2ICopbWluaXhfaShpbm9kZSktXFx1MDAzZXUuaTFfZGF0YTtcXG4rfVxcbitcXG4rc3RhdGljIGlubGluZSB1MzIgKnYyX2lfZGF0YShzdHJ1Y3QgaW5vZGUgKmlub2RlKVxcbit7XFxuK1xcdHJldHVybiAodTMyICopbWluaXhfaShpbm9kZSktXFx1MDAzZXUuaTJfZGF0YTtcXG4rfVxcbitcXG4rc3RhdGljIGlubGluZSB1MTYgY3B1X3RvX3YxX2Jsb2NrKHNlY3Rvcl90IG4pXFxuK3tcXG4rXFx0cmV0dXJuIG47XFxuK31cXG4rXFxuK3N0YXRpYyBpbmxpbmUgdTMyIGNwdV90b192Ml9ibG9jayhzZWN0b3JfdCBuKVxcbit7XFxuK1xcdHJldHVybiBuO1xcbit9XFxuK1xcbitzdGF0aWMgaW5saW5lIHNlY3Rvcl90IHYxX2Jsb2NrX3RvX2NwdSh1MTYgbilcXG4re1xcbitcXHRyZXR1cm4gbjtcXG4rfVxcbitcXG4rc3RhdGljIGlubGluZSBzZWN0b3JfdCB2Ml9ibG9ja190b19jcHUodTMyIG4pXFxuK3tcXG4rXFx0cmV0dXJuIG47XFxuK31cXG4rXFxuKy8qIFJlaW1wbGVtZW50IHBhZ2Vfc3ltbGluaydzIGdlbmVyYWwgbG9naWMgd2hpbGUgYXZvaWRpbmcgdXNpbmcgYnVmZmVyIGhlYWRcXG4rICogYmFzZWQgYW9wcyBvcGVyYXRpb25zIGxpa2UgYW9wcy1cXHUwMDNld3JpdGVfYmVnaW4gc28gdGhpbmdzIGJlaGF2ZSBiZXR0ZXIgd2l0aFxcbisgKiB0aGUgbmV3IHJlZ2ltZSBvZiBpb21hcCBiYXNlZCBhb3BzIG9wZXJhdGlvbnMuIENyaWJiaW5nIGZyb20gcGFnZV9zeW1saW5rIGluXFxuKyAqIGZzL25hbWVpLmMgYW5kIGV4dDQncyBleHQ0X2luaXRfc3ltbGlua19ibG9jay5cXG4rICovXFxuK3N0YXRpYyBpbnQgX19wYWdlX3N5bWxpbmsoc3RydWN0IGlub2RlICppbm9kZSwgY29uc3QgY2hhciAqc3ltbmFtZSwgaW50IGxlbilcXG4re1xcbitcXHRzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiID0gaW5vZGUtXFx1MDAzZWlfc2I7XFxuK1xcdHN0cnVjdCBidWZmZXJfaGVhZCAqYmg7XFxuK1xcdGNoYXIgKmthZGRyO1xcbitcXHRpbnQgZXJyID0gMDtcXG4rXFx0dTE2ICpwMTY7IC8qIHYxIDE2IGJpdCBibG9jayAqL1xcbitcXHR1MzIgKnAzMjsgLyogdjIvMyAzMiBiaXQgYmxvY2sgKi9cXG4rXFxuK1xcdHNlY3Rvcl90IHBoeXM7XFxuK1xcbitcXHRwaHlzID0gbWluaXhfbmV3X2Jsb2NrKGlub2RlKTtcXG4rXFx0aWYgKCFwaHlzKSB7XFxuK1xcdFxcdGVyciA9IC1FTk9TUEM7XFxuK1xcdFxcdGdvdG8gcHNfb3V0O1xcbitcXHR9XFxuK1xcbitcXHRpZiAoSU5PREVfVkVSU0lPTihpbm9kZSkgPT0gTUlOSVhfVjEpIHtcXG4rXFx0XFx0cDE2ID0gdjFfaV9kYXRhKGlub2RlKTtcXG4rXFx0XFx0KnAxNiA9IGNwdV90b192MV9ibG9jayhwaHlzKTtcXG4rXFx0fSBlbHNlIHtcXG4rXFx0XFx0cDMyID0gdjJfaV9kYXRhKGlub2RlKTtcXG4rXFx0XFx0KnAzMiA9IGNwdV90b192Ml9ibG9jayhwaHlzKTtcXG4rXFx0fVxcbitcXG4rXFx0YmggPSBzYl9nZXRibGsoc2IsIHBoeXMpO1xcbitcXHRpZiAoIWJoKSB7XFxuK1xcdFxcdGVyciA9IC1FTk9NRU07XFxuK1xcdFxcdGdvdG8gcHNfZmFpbDtcXG4rXFx0fVxcbitcXG4rXFx0bG9ja19idWZmZXIoYmgpO1xcbitcXHRrYWRkciA9IChjaGFyICopYmgtXFx1MDAzZWJfZGF0YTtcXG4rXFx0bWVtc2V0KGthZGRyLCAwLCBzYi1cXHUwMDNlc19ibG9ja3NpemUpO1xcbitcXHRtZW1jcHkoa2FkZHIsIHN5bW5hbWUsIGxlbik7XFxuK1xcdGlub2RlLVxcdTAwM2VpX3NpemUgPSBsZW4gLSAxO1xcbitcXHRzZXRfYnVmZmVyX3VwdG9kYXRlKGJoKTtcXG4rXFx0dW5sb2NrX2J1ZmZlcihiaCk7XFxuK1xcbitcXHRtbWJfbWFya19idWZmZXJfZGlydHkoYmgsIFxcdTAwMjZtaW5peF9pKGlub2RlKS1cXHUwMDNlaV9tZXRhZGF0YV9iaHMpO1xcbitcXHRpZiAoaW5vZGVfbmVlZHNfc3luYyhpbm9kZSkpIHtcXG4rXFx0XFx0c3luY19kaXJ0eV9idWZmZXIoYmgpO1xcbitcXHRcXHRpZiAoYnVmZmVyX3JlcShiaCkgXFx1MDAyNlxcdTAwMjYgIWJ1ZmZlcl91cHRvZGF0ZShiaCkpIHtcXG4rXFx0XFx0XFx0cHJfZXJyKFxcXCJpL28gZXJyb3Igc3luY2luZyBpdGFibGUgYmxvY2tcXFwiKTtcXG4rXFx0XFx0XFx0ZXJyID0gLUVJTztcXG4rXFx0XFx0fVxcbitcXG4rXFx0fVxcbitcXG4rXFx0bWFya19pbm9kZV9kaXJ0eShpbm9kZSk7XFxuK1xcdGJyZWxzZShiaCk7XFxuK1xcbitwc19vdXQ6XFxuK1xcdHJldHVybiBlcnI7XFxuK1xcbitwc19mYWlsOlxcbitcXHRtaW5peF9mcmVlX2Jsb2NrKGlub2RlLCBwaHlzKTtcXG4rXFx0Z290byBwc19vdXQ7XFxuK31cXG4rXFxuIHN0YXRpYyBpbnQgbWluaXhfc3ltbGluayhzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXFxuIFxcdFxcdFxcdCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIGNvbnN0IGNoYXIgKnN5bW5hbWUpXFxuIHtcXG5AQCAtODQsNyArMTgxLDcgQEAgc3RhdGljIGludCBtaW5peF9zeW1saW5rKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcXG4gXFx0XFx0cmV0dXJuIFBUUl9FUlIoaW5vZGUpO1xcbiBcXG4gXFx0bWluaXhfc2V0X2lub2RlKGlub2RlLCAwKTtcXG4tXFx0ZXJyID0gcGFnZV9zeW1saW5rKGlub2RlLCBzeW1uYW1lLCBpKTtcXG4rXFx0ZXJyID0gX19wYWdlX3N5bWxpbmsoaW5vZGUsIHN5bW5hbWUsIGkpO1xcbiBcXHRpZiAodW5saWtlbHkoZXJyKSkge1xcbiBcXHRcXHRpbm9kZV9kZWNfbGlua19jb3VudChpbm9kZSk7XFxuIFxcdFxcdGlwdXQoaW5vZGUpO1xcbkBAIC0yNzMsNiArMzcwLDQ0IEBAIHN0YXRpYyBpbnQgbWluaXhfcmVuYW1lKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxcbiBcXHRyZXR1cm4gZXJyO1xcbiB9XFxuIFxcbisvKiBzdHJhaWdodCB1cCB0aGlldmVyeSBoZXJlOyBzdG9sZW4gdmVyYmF0aW0gZnJvbSBleHQ0X2dldF9saW5rICovXFxuK3N0YXRpYyB2b2lkIG1pbml4X2ZyZWVfbGluayh2b2lkICpiaClcXG4re1xcbitcXHRicmVsc2UoYmgpO1xcbit9XFxuK1xcbisvKiBCb3Jyb3dpbmcgZnJvbSBleHQ0X2dldF9saW5rIHRvIGEgZGVncmVlOyBzaW5jZSBtaW5peCBpbm9kZXMgYW5kIHN5bWxpbmtzXFxuKyAqIGFyZSBzaWduaWZpY2FudGx5IHNpbXBsZXIsIHdlIGRvbid0IG5lZWQgdG8gZG8gbmVhcmx5IGFzIG11Y2ggYXMgZXh0NFxcbisgKiByZXF1aXJlcyBmb3Igb2xkLXRpbWV5IGV4dDQgc2xvdyBsaW5rcy5cXG4rICovXFxuK2NvbnN0IGNoYXIgKm1pbml4X2dldF9saW5rKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGlub2RlICppbm9kZSxcXG4rXFx0XFx0c3RydWN0IGRlbGF5ZWRfY2FsbCAqY2FsbGJhY2spXFxuK3tcXG4rXFx0c3RydWN0IHN1cGVyX2Jsb2NrICpzYiA9IGlub2RlLVxcdTAwM2VpX3NiO1xcbitcXHRzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoO1xcbitcXHRzZWN0b3JfdCBibGs7XFxuK1xcbitcXHQvKiBHZXQgeW9uIGJsb2NrLCBkZXBlbmRpbmcgb24gd2hhdCB2ZXJzaW9uIG9mIHRoZSBtaW5peCBmcyB0aGlzIGlzLiAqL1xcbitcXHRpZiAoSU5PREVfVkVSU0lPTihpbm9kZSkgPT0gTUlOSVhfVjEpXFxuK1xcdFxcdGJsayA9IHYxX2Jsb2NrX3RvX2NwdSgqKHYxX2lfZGF0YShpbm9kZSkpKTtcXG4rXFx0ZWxzZVxcbitcXHRcXHRibGsgPSB2Ml9ibG9ja190b19jcHUoKih2Ml9pX2RhdGEoaW5vZGUpKSk7XFxuK1xcbitcXHRiaCA9IHNiX2JyZWFkKHNiLCBibGspO1xcbitcXHRpZiAoSVNfRVJSKGJoKSlcXG4rXFx0XFx0cmV0dXJuIEVSUl9DQVNUKGJoKTtcXG4rXFx0aWYgKCFiaCkge1xcbitcXHRcXHRwcl9lcnIoXFxcImJhZCBzeW1saW5rIG9uIGlub2RlICVsbHVcXFwiLCBpbm9kZS1cXHUwMDNlaV9pbm8pO1xcbitcXHRcXHRyZXR1cm4gRVJSX1BUUigtRUZTQ09SUlVQVEVEKTtcXG4rXFx0fVxcbitcXG4rXFx0c2V0X2RlbGF5ZWRfY2FsbChjYWxsYmFjaywgbWluaXhfZnJlZV9saW5rLCBiaCk7XFxuK1xcdG5kX3Rlcm1pbmF0ZV9saW5rKGJoLVxcdTAwM2ViX2RhdGEsIGlub2RlLVxcdTAwM2VpX3NpemUsXFxuK1xcdFxcdFxcdGlub2RlLVxcdTAwM2VpX3NiLVxcdTAwM2VzX2Jsb2Nrc2l6ZSAtIDEpO1xcbitcXG4rXFx0cmV0dXJuIGJoLVxcdTAwM2ViX2RhdGE7XFxuK31cXG4rXFxuIC8qXFxuICAqIGRpcmVjdG9yaWVzIGNhbiBoYW5kbGUgbW9zdCBvcGVyYXRpb25zLi4uXFxuICAqL1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yOFQwNTozMzowNC4wMTU4NzU0MDJaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjIyMzAwOTc4NjExLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk1JTklYX0ZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibWluaXhfZGlvX3JlYWRfaXRlclwiLFxuICAgIFwibWluaXhfZGlvX3dyaXRlX2l0ZXJcIixcbiAgICBcIm1pbml4X2Rpb193cml0ZV9lbmRfaW9cIixcbiAgICBcIm1pbml4X2ZpbGVfcmVhZF9pdGVyXCIsXG4gICAgXCJtaW5peF9maWxlX3dyaXRlX2l0ZXJcIixcbiAgICBcIm1pbml4X2lvbWFwX2JlZ2luXCIsXG4gICAgXCJtaW5peF9pb21hcF9lbmRcIixcbiAgICBcIlYxX21pbml4X2lvbWFwX2JlZ2luXCIsXG4gICAgXCJWMl9taW5peF9pb21hcF9iZWdpblwiLFxuICAgIFwibWluaXhfd3JpdGViYWNrX3JhbmdlXCIsXG4gICAgXCJtaW5peF93cml0ZXBhZ2VzXCIsXG4gICAgXCJtaW5peF9yZWFkX2ZvbGlvXCIsXG4gICAgXCJtaW5peF9yZWFkYWhlYWRcIixcbiAgICBcIm1pbml4X2JtYXBcIixcbiAgICBcIl9fcGFnZV9zeW1saW5rXCIsXG4gICAgXCJtaW5peF9nZXRfbGlua1wiLFxuICAgIFwibWluaXhfZnJlZV9saW5rXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW1wbGVtZW50cyBpb21hcC1iYXNlZCBkaXJlY3QgSS9PIGFuZCBidWZmZXJlZCBJL08gZm9yIHRoZSBtaW5peCBmaWxlc3lzdGVtLCB3aGljaCBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRvIHRoZSBjb3JlIGZpbGVzeXN0ZW0gbG9naWMuIEl0IG1vZGlmaWVzIHJlYWQvd3JpdGUgcGF0aHMsIGJsb2NrIG1hcHBpbmcsIGFuZCBzeW1saW5rIGhhbmRsaW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG5ldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0XG4gICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksXG4gICBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGE0NGVlZjg2ZmRhNGI3Mzc1NzZjMjgzYWQwNWU0OGQ5MWJiYjIxYTVcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU3VuIEp1biAyOCAwNTozMzowMiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2ZzL21pbml4L2ZpbGUuYyBiL2ZzL21pbml4L2ZpbGUuY1xuaW5kZXggODZlNTk0M2NkMmZmNzQuLmIwN2M4NTNmYTQzYWJjIDEwMDY0NFxuLS0tIGEvZnMvbWluaXgvZmlsZS5jXG4rKysgYi9mcy9taW5peC9maWxlLmNcbkBAIC0xNywyMSArMTcsMTY2IEBAIGludCBtaW5peF9mc3luYyhzdHJ1Y3QgZmlsZSAqZmlsZSwgbG9mZl90IHN0YXJ0LCBsb2ZmX3QgZW5kLCBpbnQgZGF0YXN5bmMpXG4gXHRcdFx0c3RhcnQsIGVuZCwgZGF0YXN5bmMpO1xuIH1cbiBcbitzdGF0aWMgc3NpemVfdCBtaW5peF9kaW9fcmVhZF9pdGVyKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICp0bylcbit7XG4rXHRzdHJ1Y3QgaW5vZGUgKmlub2RlID0gaW9jYi1cdTAwM2VraV9maWxwLVx1MDAzZWZfbWFwcGluZy1cdTAwM2Vob3N0O1xuK1x0c3NpemVfdCByZXQ7XG4rXG4rXHRpbm9kZV9sb2NrX3NoYXJlZChpbm9kZSk7XG4rXG4rXHRjb25zdCBzdHJ1Y3QgaW9tYXBfb3BzICpvcHMgPSBtaW5peF9pb21hcF9vcHNfdmVyKGlub2RlKTtcbitcbitcdHJldCA9IGlvbWFwX2Rpb19ydyhpb2NiLCB0bywgb3BzLCBOVUxMLCAwLCBOVUxMLCAwKTtcbitcdGlub2RlX3VubG9ja19zaGFyZWQoaW5vZGUpO1xuK1x0cmV0dXJuIHJldDtcbit9XG4rXG4rc3RhdGljIGludCBtaW5peF9kaW9fd3JpdGVfZW5kX2lvKHN0cnVjdCBraW9jYiAqaW9jYiwgc3NpemVfdCBzaXplLCBpbnQgZXJyb3IsXG4rXHRcdHVuc2lnbmVkIGludCBmbGFncylcbit7XG4rXHRzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlsZV9pbm9kZShpb2NiLVx1MDAzZWtpX2ZpbHApO1xuK1x0bG9mZl90IHBvcyA9IGlvY2ItXHUwMDNla2lfcG9zO1xuK1xuK1x0aWYgKGVycm9yKVxuK1x0XHRyZXR1cm4gZXJyb3I7XG4rXG4rXHRwb3MgKz0gc2l6ZTtcbitcdGlmIChzaXplIFx1MDAyNlx1MDAyNiBwb3MgXHUwMDNlIGlfc2l6ZV9yZWFkKGlub2RlKSkge1xuK1x0XHRpX3NpemVfd3JpdGUoaW5vZGUsIHBvcyk7XG4rXHRcdG1hcmtfaW5vZGVfZGlydHkoaW5vZGUpO1xuK1x0fVxuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaW9tYXBfZGlvX29wcyBtaW5peF9kaW9fd3JpdGVfb3BzID0ge1xuK1x0LmVuZF9pbyA9IG1pbml4X2Rpb193cml0ZV9lbmRfaW8sXG4rfTtcbitcbitzdGF0aWMgc3NpemVfdCBtaW5peF9kaW9fd3JpdGVfaXRlcihzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqZnJvbSlcbit7XG4rXHRzdHJ1Y3QgaW5vZGUgKmlub2RlID0gaW9jYi1cdTAwM2VraV9maWxwLVx1MDAzZWZfbWFwcGluZy1cdTAwM2Vob3N0O1xuK1x0c3NpemVfdCByZXQ7XG4rXHR1bnNpZ25lZCBpbnQgZmxhZ3MgPSAwO1xuK1x0dW5zaWduZWQgbG9uZyBibG9ja3NpemUgPSBpbm9kZS1cdTAwM2VpX3NiLVx1MDAzZXNfYmxvY2tzaXplO1xuK1xuK1x0aW5vZGVfbG9jayhpbm9kZSk7XG4rXHRyZXQgPSBnZW5lcmljX3dyaXRlX2NoZWNrcyhpb2NiLCBmcm9tKTtcbitcdGlmIChyZXQgXHUwMDNjPSAwKVxuK1x0XHRnb3RvIG91dF91bmxvY2s7XG4rXG4rXHRyZXQgPSBraW9jYl9tb2RpZmllZChpb2NiKTtcbitcdGlmIChyZXQpXG4rXHRcdGdvdG8gb3V0X3VubG9jaztcbitcbitcdGlmIChpb2NiLVx1MDAzZWtpX3BvcyArIGlvdl9pdGVyX2NvdW50KGZyb20pIFx1MDAzZSBpX3NpemVfcmVhZChpbm9kZSkgfHxcbitcdFx0IUlTX0FMSUdORUQoaW9jYi1cdTAwM2VraV9wb3MgfCBpb3ZfaXRlcl9hbGlnbm1lbnQoZnJvbSksIGJsb2Nrc2l6ZSkpXG4rXHRcdGZsYWdzIHw9IElPTUFQX0RJT19GT1JDRV9XQUlUO1xuK1xuK1x0Y29uc3Qgc3RydWN0IGlvbWFwX29wcyAqb3BzID0gbWluaXhfaW9tYXBfb3BzX3Zlcihpbm9kZSk7XG4rXG4rXHRyZXQgPSBpb21hcF9kaW9fcncoaW9jYiwgZnJvbSwgb3BzLFxuK1x0XHRcdTAwMjZtaW5peF9kaW9fd3JpdGVfb3BzLCBmbGFncywgTlVMTCwgMCk7XG4rXHRpZiAocmV0ID09IC1FTk9UQkxLKVxuK1x0XHRyZXQgPSAwOyAvKiBmYWxsYmFjayB0byBidWZmZXJlZCAqL1xuK1xuK1x0aWYgKHJldCBcdTAwM2U9IDAgXHUwMDI2XHUwMDI2IGlvdl9pdGVyX2NvdW50KGZyb20pKSB7XG4rXHRcdGxvZmZfdCBwb3M7XG4rXHRcdGxvZmZfdCBlbmRieXRlO1xuK1x0XHRzc2l6ZV90IHN0YXR1cztcbitcbitcdFx0aW9jYi1cdTAwM2VraV9mbGFncyBcdTAwMjY9IH5JT0NCX0RJUkVDVDtcbitcdFx0cG9zID0gaW9jYi1cdTAwM2VraV9wb3M7XG4rXHRcdHN0YXR1cyA9IGlvbWFwX2ZpbGVfYnVmZmVyZWRfd3JpdGUoaW9jYiwgZnJvbSwgb3BzLFxuK1x0XHRcdE5VTEwsIE5VTEwpO1xuK1x0XHRpZiAodW5saWtlbHkoc3RhdHVzIFx1MDAzYyAwKSkge1xuK1x0XHRcdHJldCA9IHN0YXR1cztcbitcdFx0XHRnb3RvIG91dF91bmxvY2s7XG4rXHRcdH1cbitcbitcdFx0cmV0ICs9IHN0YXR1cztcbitcdFx0ZW5kYnl0ZSA9IHBvcyArIHN0YXR1cyAtIDE7XG4rXHRcdHN0YXR1cyA9IGZpbGVtYXBfd3JpdGVfYW5kX3dhaXRfcmFuZ2UoaW5vZGUtXHUwMDNlaV9tYXBwaW5nLCBwb3MsIGVuZGJ5dGUpO1xuK1x0XHRpZiAoIXN0YXR1cykge1xuK1x0XHRcdGludmFsaWRhdGVfbWFwcGluZ19wYWdlcyhpbm9kZS1cdTAwM2VpX21hcHBpbmcsXG4rXHRcdFx0XHRwb3MgXHUwMDNlXHUwMDNlIFBBR0VfU0hJRlQsXG4rXHRcdFx0XHRlbmRieXRlIFx1MDAzZVx1MDAzZSBQQUdFX1NISUZUKTtcbitcdFx0XHRpZiAocmV0IFx1MDAzZSAwKVxuK1x0XHRcdFx0cmV0ID0gZ2VuZXJpY193cml0ZV9zeW5jKGlvY2IsIHJldCk7XG4rXHRcdH0gZWxzZSB7XG4rXHRcdFx0cmV0ID0gc3RhdHVzO1xuK1x0XHR9XG4rXHR9XG4rXG4rb3V0X3VubG9jazpcbitcdGlub2RlX3VubG9jayhpbm9kZSk7XG4rXHRyZXR1cm4gcmV0O1xuK31cbitcbitzdGF0aWMgc3NpemVfdCBtaW5peF9maWxlX3JlYWRfaXRlcihzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqdG8pXG4re1xuK1x0aWYgKGlvY2ItXHUwMDNla2lfZmxhZ3MgXHUwMDI2IElPQ0JfRElSRUNUKVxuK1x0XHRyZXR1cm4gbWluaXhfZGlvX3JlYWRfaXRlcihpb2NiLCB0byk7XG4rXG4rXHRyZXR1cm4gZ2VuZXJpY19maWxlX3JlYWRfaXRlcihpb2NiLCB0byk7XG4rfVxuK1xuK3N0YXRpYyBzc2l6ZV90IG1pbml4X2ZpbGVfd3JpdGVfaXRlcihzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqZnJvbSlcbit7XG4rXHRzdHJ1Y3QgaW5vZGUgKmlub2RlID0gaW9jYi1cdTAwM2VraV9maWxwLVx1MDAzZWZfbWFwcGluZy1cdTAwM2Vob3N0O1xuK1x0c3NpemVfdCByZXQ7XG4rXG4rXHQvKiBtaW5peF9kaW9fd3JpdGVfaXRlciBhbHNvIGxvY2tzIHRoZSBpbm9kZSBhbmQgYXBwZWFycyB0byBkbyB0aGUgc2FtZVxuK1x0ICogZ2VuZXJhbCBzb3J0cyBvZiBjaGVja3MgYXMgdGhpcywgc28ganVzdCByZXR1cm4gZGlyZWN0bHkgZnJvbSB0aGVyZS5cbitcdCAqL1xuK1x0aWYgKGlvY2ItXHUwMDNla2lfZmxhZ3MgXHUwMDI2IElPQ0JfRElSRUNUKVxuK1x0XHRyZXR1cm4gbWluaXhfZGlvX3dyaXRlX2l0ZXIoaW9jYiwgZnJvbSk7XG4rXG4rXHRpbm9kZV9sb2NrKGlub2RlKTtcbitcdHJldCA9IGdlbmVyaWNfd3JpdGVfY2hlY2tzKGlvY2IsIGZyb20pO1xuK1x0aWYgKHJldCBcdTAwM2M9IDApXG4rXHRcdGdvdG8gdW5sb2NrO1xuK1xuK1x0cmV0ID0gZmlsZV9tb2RpZmllZChpb2NiLVx1MDAzZWtpX2ZpbHApO1xuK1x0aWYgKHJldClcbitcdFx0Z290byB1bmxvY2s7XG4rXG4rXHRjb25zdCBzdHJ1Y3QgaW9tYXBfb3BzICpvcHMgPSBtaW5peF9pb21hcF9vcHNfdmVyKGlub2RlKTtcbitcbitcdHJldCA9IGlvbWFwX2ZpbGVfYnVmZmVyZWRfd3JpdGUoaW9jYiwgZnJvbSwgb3BzLFxuK1x0XHRcdE5VTEwsIE5VTEwpO1xuK1xuK1x0aWYgKHJldCBcdTAwM2UgMClcbitcdFx0cmV0ID0gZ2VuZXJpY193cml0ZV9zeW5jKGlvY2IsIHJldCk7XG4rXG4rdW5sb2NrOlxuK1x0aW5vZGVfdW5sb2NrKGlub2RlKTtcbitcdHJldHVybiByZXQ7XG4rfVxuK1xuK3N0YXRpYyBpbnQgbWluaXhfZmlsZV9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxwKVxuK3tcbitcdGZpbHAtXHUwMDNlZl9tb2RlIHw9IEZNT0RFX0NBTl9PRElSRUNUO1xuK1x0cmV0dXJuIGdlbmVyaWNfZmlsZV9vcGVuKGlub2RlLCBmaWxwKTtcbit9XG4rXG4gLypcbi0gKiBXZSBoYXZlIG1vc3RseSBOVUxMcyBoZXJlOiB0aGUgY3VycmVudCBkZWZhdWx0cyBhcmUgT0sgZm9yXG4tICogdGhlIG1pbml4IGZpbGVzeXN0ZW0uXG4rICogV2Ugc3RpbGwgaGF2ZSBzb21lIE5VTExzIGhlcmUsIGJ1dCBub3QgYXMgbWFueSBvZiB0aGUgY3VycmVudCBkZWZhdWx0cyBhcmVcbisgKiBzdGlsbCBPSyBmb3IgdGhlIG1pbml4IGZpbGVzeXN0ZW0uXG4gICovXG4rXG4gY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBtaW5peF9maWxlX29wZXJhdGlvbnMgPSB7XG4gXHQubGxzZWVrXHRcdD0gZ2VuZXJpY19maWxlX2xsc2Vlayxcbi1cdC5yZWFkX2l0ZXJcdD0gZ2VuZXJpY19maWxlX3JlYWRfaXRlcixcbi1cdC53cml0ZV9pdGVyXHQ9IGdlbmVyaWNfZmlsZV93cml0ZV9pdGVyLFxuK1x0LnJlYWRfaXRlclx0PSBtaW5peF9maWxlX3JlYWRfaXRlcixcbitcdC53cml0ZV9pdGVyXHQ9IG1pbml4X2ZpbGVfd3JpdGVfaXRlcixcbiBcdC5tbWFwX3ByZXBhcmVcdD0gZ2VuZXJpY19maWxlX21tYXBfcHJlcGFyZSxcbitcdC5vcGVuXHRcdD0gbWluaXhfZmlsZV9vcGVuLFxuIFx0LmZzeW5jXHRcdD0gbWluaXhfZnN5bmMsXG4gXHQuc3BsaWNlX3JlYWRcdD0gZmlsZW1hcF9zcGxpY2VfcmVhZCxcbitcdC5zcGxpY2Vfd3JpdGVcdD0gaXRlcl9maWxlX3NwbGljZV93cml0ZSxcbiB9O1xuIFxuLXN0YXRpYyBpbnQgbWluaXhfc2V0YXR0cihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcbi1cdFx0XHQgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3QgaWF0dHIgKmF0dHIpXG4raW50IG1pbml4X3NldGF0dHIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcbitcdHN0cnVjdCBpYXR0ciAqYXR0cilcbiB7XG4gXHRzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZF9pbm9kZShkZW50cnkpO1xuIFx0aW50IGVycm9yO1xuZGlmZiAtLWdpdCBhL2ZzL21pbml4L2lub2RlLmMgYi9mcy9taW5peC9pbm9kZS5jXG5pbmRleCBjMzBjYzU5MDY5OGQ2Zi4uYjExM2M0NDc2NGZmOTUgMTAwNjQ0XG4tLS0gYS9mcy9taW5peC9pbm9kZS5jXG4rKysgYi9mcy9taW5peC9pbm9kZS5jXG5AQCAtNDM2LDcgKzQzNiwzMiBAQCBzdGF0aWMgaW50IG1pbml4X3N0YXRmcyhzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBrc3RhdGZzICpidWYpXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4tc3RhdGljIGludCBtaW5peF9nZXRfYmxvY2soc3RydWN0IGlub2RlICppbm9kZSwgc2VjdG9yX3QgYmxvY2ssXG4rc3RhdGljIHNzaXplX3QgbWluaXhfd3JpdGViYWNrX3JhbmdlKHN0cnVjdCBpb21hcF93cml0ZXBhZ2VfY3R4ICp3cGMsXG4rXHRzdHJ1Y3QgZm9saW8gKmZvbGlvLCB1NjQgcG9zLCB1bnNpZ25lZCBpbnQgbGVuLCB1NjQgZW5kX3Bvcylcbit7XG4rXHRpbnQgZXJyb3I7XG4rXG4rXHRpZiAocG9zIFx1MDAzYyB3cGMtXHUwMDNlaW9tYXAub2Zmc2V0IHx8XG4rXHRcdFx0cG9zIFx1MDAzZT0gd3BjLVx1MDAzZWlvbWFwLm9mZnNldCArIHdwYy1cdTAwM2Vpb21hcC5sZW5ndGgpIHtcbitcdFx0aWYgKElOT0RFX1ZFUlNJT04od3BjLVx1MDAzZWlub2RlKSA9PSBNSU5JWF9WMSlcbitcdFx0XHRlcnJvciA9IFYxX21pbml4X2lvbWFwX2JlZ2luKHdwYy1cdTAwM2Vpbm9kZSwgcG9zLCBsZW4sIElPTUFQX1dSSVRFLFxuK1x0XHRcdFx0XHUwMDI2d3BjLVx1MDAzZWlvbWFwLCBOVUxMKTtcbitcdFx0ZWxzZVxuK1x0XHRcdGVycm9yID0gVjJfbWluaXhfaW9tYXBfYmVnaW4od3BjLVx1MDAzZWlub2RlLCBwb3MsIGxlbiwgSU9NQVBfV1JJVEUsXG4rXHRcdFx0XHRcdTAwMjZ3cGMtXHUwMDNlaW9tYXAsIE5VTEwpO1xuK1x0XHRpZiAoZXJyb3IpXG4rXHRcdFx0cmV0dXJuIGVycm9yO1xuK1x0fVxuK1xuK1x0cmV0dXJuIGlvbWFwX2FkZF90b19pb2VuZCh3cGMsIGZvbGlvLCBwb3MsIGVuZF9wb3MsIGxlbik7XG4rfVxuK1xuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaW9tYXBfd3JpdGViYWNrX29wcyBtaW5peF93cml0ZWJhY2tfb3BzID0ge1xuK1x0LndyaXRlYmFja19yYW5nZSA9IG1pbml4X3dyaXRlYmFja19yYW5nZSxcbitcdC53cml0ZWJhY2tfc3VibWl0ID0gaW9tYXBfaW9lbmRfd3JpdGViYWNrX3N1Ym1pdCxcbit9O1xuK1xuK2ludCBtaW5peF9nZXRfYmxvY2soc3RydWN0IGlub2RlICppbm9kZSwgc2VjdG9yX3QgYmxvY2ssXG4gXHRcdCAgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoX3Jlc3VsdCwgaW50IGNyZWF0ZSlcbiB7XG4gXHRpZiAoSU5PREVfVkVSU0lPTihpbm9kZSkgPT0gTUlOSVhfVjEpXG5AQCAtNDQ1LDE3ICs0NzAsNDUgQEAgc3RhdGljIGludCBtaW5peF9nZXRfYmxvY2soc3RydWN0IGlub2RlICppbm9kZSwgc2VjdG9yX3QgYmxvY2ssXG4gXHRcdHJldHVybiBWMl9taW5peF9nZXRfYmxvY2soaW5vZGUsIGJsb2NrLCBiaF9yZXN1bHQsIGNyZWF0ZSk7XG4gfVxuIFxuLXN0YXRpYyBpbnQgbWluaXhfd3JpdGVwYWdlcyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcbisvKiBUaGUgb2xkIG1pbml4X3dyaXRlcGFnZXMsIHByZXNlcnZlZCBmb3IgZGlyZWN0b3J5IG9wZXJhdGlvbnMuICovXG4rc3RhdGljIGludCBtaW5peF9ibG9ja193cml0ZXBhZ2VzKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxuIFx0XHRzdHJ1Y3Qgd3JpdGViYWNrX2NvbnRyb2wgKndiYylcbiB7XG4gXHRyZXR1cm4gbXBhZ2Vfd3JpdGVwYWdlcyhtYXBwaW5nLCB3YmMsIG1pbml4X2dldF9ibG9jayk7XG4gfVxuIFxuK3N0YXRpYyBpbnQgbWluaXhfd3JpdGVwYWdlcyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcbitcdFx0c3RydWN0IHdyaXRlYmFja19jb250cm9sICp3YmMpXG4re1xuK1x0c3RydWN0IGlvbWFwX3dyaXRlcGFnZV9jdHggd3BjID0ge1xuK1x0XHQuaW5vZGUgPSBtYXBwaW5nLVx1MDAzZWhvc3QsXG4rXHRcdC53YmMgPSB3YmMsXG4rXHRcdC5vcHMgPSBcdTAwMjZtaW5peF93cml0ZWJhY2tfb3BzLFxuK1x0fTtcbitcdHJldHVybiBpb21hcF93cml0ZXBhZ2VzKFx1MDAyNndwYyk7XG4rfVxuK1xuIHN0YXRpYyBpbnQgbWluaXhfcmVhZF9mb2xpbyhzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IGZvbGlvICpmb2xpbylcbit7XG4rXHRjb25zdCBzdHJ1Y3QgaW9tYXBfb3BzICpvcHMgPSBtaW5peF9pb21hcF9vcHNfdmVyKGZvbGlvLVx1MDAzZW1hcHBpbmctXHUwMDNlaG9zdCk7XG4rXG4rXHRpb21hcF9iaW9fcmVhZF9mb2xpbyhmb2xpbywgb3BzKTtcbitcdHJldHVybiAwO1xuK31cbitcbisvKiBUaGUgb2xkIG1pbml4X3JlYWRfZm9saW8sIHByZXNlcnZlZCBmb3IgZGlyZWN0b3J5IG9wZXJhdGlvbnMuICovXG4rc3RhdGljIGludCBtaW5peF9ibG9ja19yZWFkX2ZvbGlvKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIHtcbiBcdHJldHVybiBibG9ja19yZWFkX2Z1bGxfZm9saW8oZm9saW8sIG1pbml4X2dldF9ibG9jayk7XG4gfVxuIFxuK3N0YXRpYyB2b2lkIG1pbml4X3JlYWRhaGVhZChzdHJ1Y3QgcmVhZGFoZWFkX2NvbnRyb2wgKnJhYylcbit7XG4rXHRjb25zdCBzdHJ1Y3QgaW9tYXBfb3BzICpvcHMgPSBtaW5peF9pb21hcF9vcHNfdmVyKHJhYy1cdTAwM2VtYXBwaW5nLVx1MDAzZWhvc3QpO1xuK1xuK1x0aW9tYXBfYmlvX3JlYWRhaGVhZChyYWMsIG9wcyk7XG4rfVxuK1xuIGludCBtaW5peF9wcmVwYXJlX2NodW5rKHN0cnVjdCBmb2xpbyAqZm9saW8sIGxvZmZfdCBwb3MsIHVuc2lnbmVkIGxlbilcbiB7XG4gXHRyZXR1cm4gX19ibG9ja193cml0ZV9iZWdpbihmb2xpbywgcG9zLCBsZW4sIG1pbml4X2dldF9ibG9jayk7XG5AQCAtNDg3LDI0ICs1NDAsNDIgQEAgc3RhdGljIGludCBtaW5peF93cml0ZV9iZWdpbihjb25zdCBzdHJ1Y3Qga2lvY2IgKmlvY2IsXG4gXG4gc3RhdGljIHNlY3Rvcl90IG1pbml4X2JtYXAoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIHNlY3Rvcl90IGJsb2NrKVxuIHtcbi1cdHJldHVybiBnZW5lcmljX2Jsb2NrX2JtYXAobWFwcGluZyxibG9jayxtaW5peF9nZXRfYmxvY2spO1xuK1x0Y29uc3Qgc3RydWN0IGlvbWFwX29wcyAqb3BzID0gbWluaXhfaW9tYXBfb3BzX3ZlcihtYXBwaW5nLVx1MDAzZWhvc3QpO1xuK1xuK1x0cmV0dXJuIGlvbWFwX2JtYXAobWFwcGluZywgYmxvY2ssIG9wcyk7XG4gfVxuIFxuLXN0YXRpYyBjb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZV9vcGVyYXRpb25zIG1pbml4X2FvcHMgPSB7XG4tXHQuZGlydHlfZm9saW9cdD0gYmxvY2tfZGlydHlfZm9saW8sXG4tXHQuaW52YWxpZGF0ZV9mb2xpbyA9IGJsb2NrX2ludmFsaWRhdGVfZm9saW8sXG4rY29uc3Qgc3RydWN0IGFkZHJlc3Nfc3BhY2Vfb3BlcmF0aW9ucyBtaW5peF9hb3BzID0ge1xuK1x0LmRpcnR5X2ZvbGlvXHQ9IGlvbWFwX2RpcnR5X2ZvbGlvLFxuK1x0LmludmFsaWRhdGVfZm9saW8gPSBpb21hcF9pbnZhbGlkYXRlX2ZvbGlvLFxuIFx0LnJlYWRfZm9saW8gPSBtaW5peF9yZWFkX2ZvbGlvLFxuK1x0LnJlYWRhaGVhZCA9IG1pbml4X3JlYWRhaGVhZCxcbiBcdC53cml0ZXBhZ2VzID0gbWluaXhfd3JpdGVwYWdlcyxcbitcdC5taWdyYXRlX2ZvbGlvID0gZmlsZW1hcF9taWdyYXRlX2ZvbGlvLFxuK1x0LmJtYXAgPSBtaW5peF9ibWFwLFxuK1x0LmlzX3BhcnRpYWxseV91cHRvZGF0ZSA9IGlvbWFwX2lzX3BhcnRpYWxseV91cHRvZGF0ZSxcbitcdC5yZWxlYXNlX2ZvbGlvID0gaW9tYXBfcmVsZWFzZV9mb2xpbyxcbitcdC5lcnJvcl9yZW1vdmVfZm9saW8gPSBnZW5lcmljX2Vycm9yX3JlbW92ZV9mb2xpbyxcbit9O1xuK1xuKy8qIEEgc3BlY2lhbCBhb3BzIGZvciBkaXJlY3RvcmllcyB0aGF0IGtlZXBzIHVzaW5nIHRoZSBidWZmZXIgaGVhZCBjaHVua3MsIGF0XG4rICogbGVhc3QgZm9yIHRoZSB0aW1lIGJlaW5nLlxuKyAqL1xuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZV9vcGVyYXRpb25zIG1pbml4X2Rpcl9hb3BzID0ge1xuK1x0LmRpcnR5X2ZvbGlvID0gYmxvY2tfZGlydHlfZm9saW8sXG4rXHQuaW52YWxpZGF0ZV9mb2xpbyA9IGJsb2NrX2ludmFsaWRhdGVfZm9saW8sXG4rXHQucmVhZF9mb2xpbyA9IG1pbml4X2Jsb2NrX3JlYWRfZm9saW8sXG4gXHQud3JpdGVfYmVnaW4gPSBtaW5peF93cml0ZV9iZWdpbixcbiBcdC53cml0ZV9lbmQgPSBnZW5lcmljX3dyaXRlX2VuZCxcbiBcdC5taWdyYXRlX2ZvbGlvID0gYnVmZmVyX21pZ3JhdGVfZm9saW8sXG4gXHQuYm1hcCA9IG1pbml4X2JtYXAsXG4tXHQuZGlyZWN0X0lPID0gbm9vcF9kaXJlY3RfSU9cbitcdC53cml0ZXBhZ2VzID0gbWluaXhfYmxvY2tfd3JpdGVwYWdlcyxcbiB9O1xuIFxuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBtaW5peF9zeW1saW5rX2lub2RlX29wZXJhdGlvbnMgPSB7XG4tXHQuZ2V0X2xpbmtcdD0gcGFnZV9nZXRfbGluayxcbitcdC5nZXRfbGlua1x0PSBtaW5peF9nZXRfbGluayxcbiBcdC5nZXRhdHRyXHQ9IG1pbml4X2dldGF0dHIsXG4rXHQuc2V0YXR0clx0PSBtaW5peF9zZXRhdHRyLFxuIH07XG4gXG4gdm9pZCBtaW5peF9zZXRfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSwgZGV2X3QgcmRldilcbkBAIC01MTYsNyArNTg3LDcgQEAgdm9pZCBtaW5peF9zZXRfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSwgZGV2X3QgcmRldilcbiBcdH0gZWxzZSBpZiAoU19JU0RJUihpbm9kZS1cdTAwM2VpX21vZGUpKSB7XG4gXHRcdGlub2RlLVx1MDAzZWlfb3AgPSBcdTAwMjZtaW5peF9kaXJfaW5vZGVfb3BlcmF0aW9ucztcbiBcdFx0aW5vZGUtXHUwMDNlaV9mb3AgPSBcdTAwMjZtaW5peF9kaXJfb3BlcmF0aW9ucztcbi1cdFx0aW5vZGUtXHUwMDNlaV9tYXBwaW5nLVx1MDAzZWFfb3BzID0gXHUwMDI2bWluaXhfYW9wcztcbitcdFx0aW5vZGUtXHUwMDNlaV9tYXBwaW5nLVx1MDAzZWFfb3BzID0gXHUwMDI2bWluaXhfZGlyX2FvcHM7XG4gXHR9IGVsc2UgaWYgKFNfSVNMTksoaW5vZGUtXHUwMDNlaV9tb2RlKSkge1xuIFx0XHRpbm9kZS1cdTAwM2VpX29wID0gXHUwMDI2bWluaXhfc3ltbGlua19pbm9kZV9vcGVyYXRpb25zO1xuIFx0XHRpbm9kZV9ub2hpZ2htZW0oaW5vZGUpO1xuQEAgLTc2OCw0ICs4MzksMyBAQCBtb2R1bGVfaW5pdChpbml0X21pbml4X2ZzKVxuIG1vZHVsZV9leGl0KGV4aXRfbWluaXhfZnMpXG4gTU9EVUxFX0RFU0NSSVBUSU9OKFwiTWluaXggZmlsZSBzeXN0ZW1cIik7XG4gTU9EVUxFX0xJQ0VOU0UoXCJHUExcIik7XG4tXG5kaWZmIC0tZ2l0IGEvZnMvbWluaXgvaW9tYXAuYyBiL2ZzL21pbml4L2lvbWFwLmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uN2JiMDQzOWUzNjY5OTZcbi0tLSAvZGV2L251bGxcbisrKyBiL2ZzL21pbml4L2lvbWFwLmNcbkBAIC0wLDAgKzEsMTE0IEBAXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuKy8qXG4rICogaW9tYXAgZnVuY3Rpb25zIGZvciBtaW5peC4gQXQgbGVhc3QgdGhlIGZpcnN0IHBhc3Mgb2YgdGhpcyBmaWxlIHdhcyB0YWtlblxuKyAqIGZyb20gdGhlIHhpYWZzIGlvbWFwLmMsIHdoaWNoIGlzIGZpdHRpbmcgc2luY2UgdGhlIHhpYWZzIG1vZHVsZSBpbiB0dXJuXG4rICogYm9ycm93ZWQgaGVhdmlseSBmcm9tIHRoZSBtb2Rlcm5pemVkIG1pbml4IGZzIGtlcm5lbCBtb2R1bGUuXG4rICovXG4rXG4rLypcbisgKiBtaW5peF9pb21hcF9iZWdpbiAtIG1hcCBhIGZpbGUgcmFuZ2UgdG8gZGlzayBibG9ja3MuIEl0IGFjdHMgYXMgYSByZXBsYWNlbWVudFxuKyAqIGZvciBnZXRfYmxvY2sgaW4gaXRyZWVfY29tbW9uLmMsIGF0IGxlYXN0IGluIHRoZSBpbXBvcnRhbnQgd2F5cywgYW5kIGlzXG4rICogYWRhcHRlZCBmcm9tIGl0LCBidXQgaXQgdXNlcyBpb21hcCBpbnN0ZWFkIG9mIGJ1ZmZlcl9oZWFkLiBUaGlzIGlzIHRha2VuXG4rICogZGlyZWN0bHkgZnJvbSB0aGUgb3V0LW9mLXRyZWUgeGlhZnMgaW9tYXAgY2hhbmdlcywgYW5kIHRoZSBleGZhdCBpb21hcFxuKyAqIGNoYW5nZXMgd2VyZSBhbiBpbnNwaXJhdGlvbiBmb3IgdGhhdC5cbisgKi9cbitzdGF0aWMgaW50IG1pbml4X2lvbWFwX2JlZ2luKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfdCBvZmZzZXQsIGxvZmZfdCBsZW5ndGgsXG4rXHR1bnNpZ25lZCBpbnQgZmxhZ3MsIHN0cnVjdCBpb21hcCAqaW9tYXAsIHN0cnVjdCBpb21hcCAqc3JjbWFwKVxuK3tcbitcdHN0cnVjdCBzdXBlcl9ibG9jayAqc2IgPSBpbm9kZS1cdTAwM2VpX3NiO1xuK1x0dW5zaWduZWQgaW50IGJsa2JpdHMgPSBzYi1cdTAwM2VzX2Jsb2Nrc2l6ZV9iaXRzO1xuK1x0c2VjdG9yX3QgaWJsb2NrID0gb2Zmc2V0IFx1MDAzZVx1MDAzZSBibGtiaXRzO1xuK1x0aW50IGNyZWF0ZSA9IGZsYWdzIFx1MDAyNiBJT01BUF9XUklURTtcbitcbitcdC8qIE1vc3RseSB0YWtlbiBmcm9tIG1vZGVybi14aWFmcyBpdHJlZS5jIGdldF9ibG9jayB3aXRoIGVsZW1lbnRzIGZyb21cbitcdCAqIHNpbWlsYXIgZXhmYXQgb3BlcmF0aW9ucy5cbitcdCAqL1xuK1x0aW50IG9mZnNldHNbREVQVEhdO1xuK1x0SW5kaXJlY3QgY2hhaW5bREVQVEhdO1xuK1x0SW5kaXJlY3QgKnBhcnRpYWw7XG4rXHRpbnQgZGVwdGggPSBibG9ja190b19wYXRoKGlub2RlLCBpYmxvY2ssIG9mZnNldHMpO1xuK1x0aW50IGxlZnQ7XG4rXHRpbnQgZXJyID0gLUVJTztcbitcbitcdHNlY3Rvcl90IHBoeXM7XG4rXG4rXHQvKiBibG9jayBpcyBiZXlvbmQgbWF4IGZpbGUgc2l6ZSAqL1xuK1x0aWYgKGRlcHRoID09IDApXG4rXHRcdGdvdG8gb3V0O1xuK1xuK1x0aW9tYXAtXHUwMDNlYmRldiA9IGlub2RlLVx1MDAzZWlfc2ItXHUwMDNlc19iZGV2O1xuK1xuK3JlcmVhZDpcbitcdHBhcnRpYWwgPSBnZXRfYnJhbmNoKGlub2RlLCBkZXB0aCwgb2Zmc2V0cywgY2hhaW4sIFx1MDAyNmVycik7XG4rXG4rXHQvKiBTaW1wbGVzdCBjYXNlIC0gYmxvY2sgZm91bmQsIG5vIGFsbG9jYXRpb24gbmVlZGVkICovXG4rXHRpZiAoIXBhcnRpYWwpIHtcbitcdFx0LyogQml0IG9mIGEgd2VpcmQgb3JkZXIsIGJ1dCBpdCdsbCBtYWtlIHNlbnNlIHdoZW4geW91IGdldCB0b1xuK1x0XHQgKiB0aGUgYm90dG9tLlxuK1x0XHQgKi9cbitcdFx0aW9tYXAtXHUwMDNlZmxhZ3MgPSBJT01BUF9GX01FUkdFRDtcbitnb3RfaXQ6XG4rXHRcdHBoeXMgPSBibG9ja190b19jcHUoY2hhaW5bZGVwdGggLSAxXS5rZXkpO1xuK1x0XHRwYXJ0aWFsID0gY2hhaW4rZGVwdGgtMTtcbitcdFx0LyogU2V0IHVwIHRoZSBpb21hcCBzdHJ1Y3QgYmVmb3JlIGNsZWFuaW5nIHVwICovXG4rXHRcdGlvbWFwLVx1MDAzZXR5cGUgPSBJT01BUF9NQVBQRUQ7XG4rXHRcdGlvbWFwLVx1MDAzZWFkZHIgPSAodTY0KXBoeXMgXHUwMDNjXHUwMDNjIGJsa2JpdHM7XG4rXHRcdGlvbWFwLVx1MDAzZWxlbmd0aCA9IDEgXHUwMDNjXHUwMDNjIGJsa2JpdHM7XG4rXHRcdGlvbWFwLVx1MDAzZW9mZnNldCA9ICh1NjQpaWJsb2NrIFx1MDAzY1x1MDAzYyBibGtiaXRzO1xuK1x0XHRnb3RvIGNsZWFudXA7XG4rXHR9XG4rXG4rXHQvKiBOZXh0IHNpbXBsZSBjYXNlIC0gcGxhaW4gbG9va3VwIG9yIGZhaWxlZCByZWFkIG9mIGluZGlyZWN0IGJsb2NrICovXG4rXHRpZiAoIWNyZWF0ZSB8fCBlcnIgPT0gLUVJTykge1xuK1x0XHRpb21hcC1cdTAwM2V0eXBlID0gSU9NQVBfSE9MRTtcbitcdFx0aW9tYXAtXHUwMDNlYWRkciA9IElPTUFQX05VTExfQUREUjtcbitcdFx0aW9tYXAtXHUwMDNlbGVuZ3RoID0gMSBcdTAwM2NcdTAwM2MgYmxrYml0cztcbitcdFx0aW9tYXAtXHUwMDNlb2Zmc2V0ID0gKHU2NClpYmxvY2sgXHUwMDNjXHUwMDNjIGJsa2JpdHM7XG4rXHRcdGlvbWFwLVx1MDAzZWZsYWdzID0gMDtcbitjbGVhbnVwOlxuK1x0XHR3aGlsZSAocGFydGlhbCBcdTAwM2UgY2hhaW4pIHtcbitcdFx0XHRicmVsc2UocGFydGlhbC1cdTAwM2ViaCk7XG4rXHRcdFx0cGFydGlhbC0tO1xuK1x0XHR9XG4rb3V0OlxuK1x0XHRyZXR1cm4gZXJyO1xuK1x0fVxuK1xuK1x0LypcbitcdCAqIEluZGlyZWN0IGJsb2NrIG1pZ2h0IGJlIHJlbW92ZWQgYnkgdHJ1bmNhdGUgd2hpbGUgd2Ugd2VyZVxuK1x0ICogcmVhZGluZyBpdC4gSGFuZGxpbmcgb2YgdGhhdCBjYXNlIChmb3JnZXQgd2hhdCB3ZSd2ZSBnb3QgYW5kXG4rXHQgKiByZXJlYWQpIGlzIHRha2VuIG91dCBvZiB0aGUgbWFpbiBwYXRoLlxuK1x0ICovXG4rXHRpZiAoZXJyID09IC1FQUdBSU4pXG4rXHRcdGdvdG8gY2hhbmdlZDtcbitcbitcdGxlZnQgPSAoY2hhaW4gKyBkZXB0aCkgLSBwYXJ0aWFsO1xuK1x0ZXJyID0gYWxsb2NfYnJhbmNoKGlub2RlLCBsZWZ0LCBvZmZzZXRzICsgKHBhcnRpYWwgLSBjaGFpbiksIHBhcnRpYWwpO1xuK1x0aWYgKGVycilcbitcdFx0Z290byBjbGVhbnVwO1xuK1xuK1x0aWYgKHNwbGljZV9icmFuY2goaW5vZGUsIGNoYWluLCBwYXJ0aWFsLCBsZWZ0KSBcdTAwM2MgMClcbitcdFx0Z290byBjaGFuZ2VkO1xuK1xuK1x0LyogU3VjY2Vzc2Z1bCBhbGxvY2F0aW9uLCBtYXBwaW5nIGl0LiAqL1xuK1x0aW9tYXAtXHUwMDNlZmxhZ3MgPSBJT01BUF9GX05FVztcbitcdGdvdG8gZ290X2l0O1xuK1xuK2NoYW5nZWQ6XG4rXHR3aGlsZSAocGFydGlhbCBcdTAwM2UgY2hhaW4pIHtcbitcdFx0YnJlbHNlKHBhcnRpYWwtXHUwMDNlYmgpO1xuK1x0XHRwYXJ0aWFsLS07XG4rXHR9XG4rXHRnb3RvIHJlcmVhZDtcbit9XG4rXG4rLypcbisgKiBtaW5peF9pb21hcF9lbmQgZW5kcyB1cCBiZWluZyBhIG5vcDsgc2luY2UgbWluaXggZG9lc24ndCBoYXZlIGFueSBleHRlbnRzIG9yXG4rICogdHJhbnNhY3Rpb25zIHRvIHdvcnJ5IGFib3V0LCB0aGVyZSBpc24ndCBhbnl0aGluZyB0byB1cGRhdGUgaGVyZS4gVGhlIG9uLWRpc2tcbisgKiBpbmRpcmVjdCBibG9ja3MgZ2V0IGRpcnRpZWQgaW4gbWluaXhfaW9tYXBfYmVnaW4uXG4rICovXG4rc3RhdGljIGludCBtaW5peF9pb21hcF9lbmQoc3RydWN0IGlub2RlICppbm9kZSwgbG9mZl90IG9mZnNldCwgbG9mZl90IGxlbmd0aCxcbitcdHNzaXplX3Qgd3JpdHRlbiwgdW5zaWduZWQgaW50IGZsYWdzLCBzdHJ1Y3QgaW9tYXAgKmlvbWFwKVxuK3tcbitcdHJldHVybiAwO1xuK31cbmRpZmYgLS1naXQgYS9mcy9taW5peC9pdHJlZV9jb21tb24uYyBiL2ZzL21pbml4L2l0cmVlX2NvbW1vbi5jXG5pbmRleCBjM2NkMmM3NWFmOWNlZS4uNWE4YjczYTdiZWRhNzggMTAwNjQ0XG4tLS0gYS9mcy9taW5peC9pdHJlZV9jb21tb24uY1xuKysrIGIvZnMvbWluaXgvaXRyZWVfY29tbW9uLmNcbkBAIC0zMTEsNyArMzExLDE2IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCB0cnVuY2F0ZSAoc3RydWN0IGlub2RlICogaW5vZGUpXG4gXHRsb25nIGlibG9jaztcbiBcbiBcdGlibG9jayA9IChpbm9kZS1cdTAwM2VpX3NpemUgKyBzYi1cdTAwM2VzX2Jsb2Nrc2l6ZSAtMSkgXHUwMDNlXHUwMDNlIHNiLVx1MDAzZXNfYmxvY2tzaXplX2JpdHM7XG4tXHRibG9ja190cnVuY2F0ZV9wYWdlKGlub2RlLVx1MDAzZWlfbWFwcGluZywgaW5vZGUtXHUwMDNlaV9zaXplLCBnZXRfYmxvY2spO1xuK1xuK1x0LyogRGVwZW5kaW5nIG9uIHdoYXQgYWRkcmVzcyBzcGFjZSBvcGVyYXRpb25zIGFyZSBiZWluZyB1c2VkIGJ5IHRoZVxuK1x0ICogaW5vZGUgYmVpbmcgdHJ1bmNhdGVkLCB3ZSBuZWVkIHRvIGVpdGhlciBjYWxsIGlvbWFwX3RydW5jYXRlX3BhZ2Ugb3JcbitcdCAqIGJsb2NrX3RydW5jYXRlX3BhZ2UuXG4rXHQgKi9cbitcdGlmIChpbm9kZS1cdTAwM2VpX21hcHBpbmctXHUwMDNlYV9vcHMgPT0gXHUwMDI2bWluaXhfYW9wcylcbitcdFx0aW9tYXBfdHJ1bmNhdGVfcGFnZShpbm9kZSwgaW5vZGUtXHUwMDNlaV9zaXplLCBOVUxMLFxuK1x0XHRcdG1pbml4X2lvbWFwX29wc192ZXIoaW5vZGUpLCBOVUxMLCBOVUxMKTtcbitcdGVsc2VcbitcdFx0YmxvY2tfdHJ1bmNhdGVfcGFnZShpbm9kZS1cdTAwM2VpX21hcHBpbmcsIGlub2RlLVx1MDAzZWlfc2l6ZSwgZ2V0X2Jsb2NrKTtcbiBcbiBcdG4gPSBibG9ja190b19wYXRoKGlub2RlLCBpYmxvY2ssIG9mZnNldHMpO1xuIFx0aWYgKCFuKVxuZGlmZiAtLWdpdCBhL2ZzL21pbml4L2l0cmVlX3YxLmMgYi9mcy9taW5peC9pdHJlZV92MS5jXG5pbmRleCAxZmVkOTA2MDQyYWE4NC4uNThjMjlmNDQ0M2QzNzIgMTAwNjQ0XG4tLS0gYS9mcy9taW5peC9pdHJlZV92MS5jXG4rKysgYi9mcy9taW5peC9pdHJlZV92MS5jXG5AQCAtNDksNiArNDksMTggQEAgc3RhdGljIGludCBibG9ja190b19wYXRoKHN0cnVjdCBpbm9kZSAqIGlub2RlLCBsb25nIGJsb2NrLCBpbnQgb2Zmc2V0c1tERVBUSF0pXG4gfVxuIFxuICNpbmNsdWRlIFwiaXRyZWVfY29tbW9uLmNcIlxuKy8qIE5PVEEgQkVORTpcbisgKlxuKyAqIFRoaXMgaXMgaWNreSB0byBtZSwgYnV0IGF0IHRoZSBzYW1lIHRpbWUgaGF2aW5nIGl0IGJlIGEgc3RhbmRhbG9uZSBDIGZpbGVcbisgKiB0aGF0J3MgY29tcGlsZWQgdG8gb2JqZWN0IGZvcm0gYW5kIGxpbmtlZCBzZXBhcmF0ZWx5IGxpa2UgaXQgaXMgaW4geGlhZnMgaXNcbisgKiBtdWNoIG5hc3RpZXIgaW4gbWluaXggYmVjYXVzZSBvZiB0aGUgZGlmZmVyZW50IHZlcnNpb25zIG9mIHRoZSBtaW5peCBmcyB0aGF0XG4rICogaGF2ZSBzb21lIHZlcnksIHZlcnkgZGlmZmVyZW50IGFzcGVjdHMsIGxpa2UgdGhlIHNpemUgb2YgYmxvY2tfdC4gSSBkb24ndFxuKyAqIGxpa2UgaXQsIGJ1dCBzaW5jZSBtaW5peCBhbHJlYWR5IGhhcyB0aGlzIHBhdHRlcm4gd2hlcmUgYSBjb21tb24gaXRyZWUgZmlsZVxuKyAqIGlzIGluY2x1ZGVkIGluIHRoZSBpdHJlZV92MSBhbmQgaXRyZWVfdjIoYW5kIHYzKSBmaWxlcywgSSdtIGluY2x1ZGluZyBpb21hcC5jXG4rICogaW4gdGhlc2UgZmlsZXMgYXMgd2VsbC4gSXQgZG9lcyBhdCBsZWFzdCBhdm9pZCBleHBvcnRpbmcgc29tZSBjdXJyZW50bHlcbisgKiBzdGF0aWMgZnVuY3Rpb25zIHRoYXQgYXJlbid0IG5lZWRlZCBhbnl3aGVyZSBidXQgaXRyZWVfY29tbW9uLmMgYW5kIGlvbWFwLmMuXG4rICovXG4rI2luY2x1ZGUgXCJpb21hcC5jXCJcbiBcbiBpbnQgVjFfbWluaXhfZ2V0X2Jsb2NrKHN0cnVjdCBpbm9kZSAqIGlub2RlLCBsb25nIGJsb2NrLFxuIFx0XHRcdHN0cnVjdCBidWZmZXJfaGVhZCAqYmhfcmVzdWx0LCBpbnQgY3JlYXRlKVxuQEAgLTYxLDcgKzczLDE4IEBAIHZvaWQgVjFfbWluaXhfdHJ1bmNhdGUoc3RydWN0IGlub2RlICogaW5vZGUpXG4gXHR0cnVuY2F0ZShpbm9kZSk7XG4gfVxuIFxuLXVuc2lnbmVkIFYxX21pbml4X2Jsb2Nrcyhsb2ZmX3Qgc2l6ZSwgc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcbit1bnNpZ25lZCBpbnQgVjFfbWluaXhfYmxvY2tzKGxvZmZfdCBzaXplLCBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxuIHtcbiBcdHJldHVybiBuYmxvY2tzKHNpemUsIHNiKTtcbiB9XG4rXG4raW50IFYxX21pbml4X2lvbWFwX2JlZ2luKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfdCBvZmZzZXQsIGxvZmZfdCBsZW5ndGgsXG4rXHR1bnNpZ25lZCBpbnQgZmxhZ3MsIHN0cnVjdCBpb21hcCAqaW9tYXAsIHN0cnVjdCBpb21hcCAqc3JjbWFwKVxuK3tcbitcdHJldHVybiBtaW5peF9pb21hcF9iZWdpbihpbm9kZSwgb2Zmc2V0LCBsZW5ndGgsIGZsYWdzLCBpb21hcCwgc3JjbWFwKTtcbit9XG4rXG4rY29uc3Qgc3RydWN0IGlvbWFwX29wcyBWMV9taW5peF9pb21hcF9vcHMgPSB7XG4rXHQuaW9tYXBfYmVnaW4gPSBWMV9taW5peF9pb21hcF9iZWdpbixcbitcdC5pb21hcF9lbmQgICA9IG1pbml4X2lvbWFwX2VuZCxcbit9O1xuZGlmZiAtLWdpdCBhL2ZzL21pbml4L2l0cmVlX3YyLmMgYi9mcy9taW5peC9pdHJlZV92Mi5jXG5pbmRleCA5ZDAwZjMxYTJkOWQxNS4uZmM3YTVhZThmYTFjYTMgMTAwNjQ0XG4tLS0gYS9mcy9taW5peC9pdHJlZV92Mi5jXG4rKysgYi9mcy9taW5peC9pdHJlZV92Mi5jXG5AQCAtNTcsNiArNTcsMTAgQEAgc3RhdGljIGludCBibG9ja190b19wYXRoKHN0cnVjdCBpbm9kZSAqIGlub2RlLCBsb25nIGJsb2NrLCBpbnQgb2Zmc2V0c1tERVBUSF0pXG4gfVxuIFxuICNpbmNsdWRlIFwiaXRyZWVfY29tbW9uLmNcIlxuKy8qIFNlZSB0aGUgbm90ZSBpbiBpdHJlZV92MSBpbiBhIGNvbW1lbnQgdGhhdCBzdGFydHMgXCJOT1RBIEJFTkVcIiBmb3IgYW5cbisgKiBleHBsYW5hdGlvbiBmb3Igd2h5IGlvbWFwLmMgaXMgaW5jbHVkZWQgaGVyZS5cbisgKi9cbisjaW5jbHVkZSBcImlvbWFwLmNcIlxuIFxuIGludCBWMl9taW5peF9nZXRfYmxvY2soc3RydWN0IGlub2RlICogaW5vZGUsIGxvbmcgYmxvY2ssXG4gXHRcdFx0c3RydWN0IGJ1ZmZlcl9oZWFkICpiaF9yZXN1bHQsIGludCBjcmVhdGUpXG5AQCAtNjksNyArNzMsMTggQEAgdm9pZCBWMl9taW5peF90cnVuY2F0ZShzdHJ1Y3QgaW5vZGUgKiBpbm9kZSlcbiBcdHRydW5jYXRlKGlub2RlKTtcbiB9XG4gXG4tdW5zaWduZWQgVjJfbWluaXhfYmxvY2tzKGxvZmZfdCBzaXplLCBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxuK3Vuc2lnbmVkIGludCBWMl9taW5peF9ibG9ja3MobG9mZl90IHNpemUsIHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXG4ge1xuIFx0cmV0dXJuIG5ibG9ja3Moc2l6ZSwgc2IpO1xuIH1cbitcbitpbnQgVjJfbWluaXhfaW9tYXBfYmVnaW4oc3RydWN0IGlub2RlICppbm9kZSwgbG9mZl90IG9mZnNldCwgbG9mZl90IGxlbmd0aCxcbitcdHVuc2lnbmVkIGludCBmbGFncywgc3RydWN0IGlvbWFwICppb21hcCwgc3RydWN0IGlvbWFwICpzcmNtYXApXG4re1xuK1x0cmV0dXJuIG1pbml4X2lvbWFwX2JlZ2luKGlub2RlLCBvZmZzZXQsIGxlbmd0aCwgZmxhZ3MsIGlvbWFwLCBzcmNtYXApO1xuK31cbitcbitjb25zdCBzdHJ1Y3QgaW9tYXBfb3BzIFYyX21pbml4X2lvbWFwX29wcyA9IHtcbitcdC5pb21hcF9iZWdpbiA9IFYyX21pbml4X2lvbWFwX2JlZ2luLFxuK1x0LmlvbWFwX2VuZCAgID0gbWluaXhfaW9tYXBfZW5kLFxuK307XG5kaWZmIC0tZ2l0IGEvZnMvbWluaXgvbWluaXguaCBiL2ZzL21pbml4L21pbml4LmhcbmluZGV4IGYyMDI1YzliNTgyNTJmLi5kMWE4OTBlOTZhYmUyYyAxMDA2NDRcbi0tLSBhL2ZzL21pbml4L21pbml4LmhcbisrKyBiL2ZzL21pbml4L21pbml4LmhcbkBAIC01LDYgKzUsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2ZzLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9wYWdlbWFwLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9taW5peF9mcy5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvaW9tYXAuaFx1MDAzZVxuIFxuICNkZWZpbmUgSU5PREVfVkVSU0lPTihpbm9kZSlcdG1pbml4X3NiKGlub2RlLVx1MDAzZWlfc2IpLVx1MDAzZXNfdmVyc2lvblxuICNkZWZpbmUgTUlOSVhfVjFcdFx0MHgwMDAxXHRcdC8qIG9yaWdpbmFsIG1pbml4IGZzICovXG5AQCAtNTYsNyArNTcsOSBAQCBpbnQgbWluaXhfbmV3X2Jsb2NrKHN0cnVjdCBpbm9kZSAqaW5vZGUpO1xuIHZvaWQgbWluaXhfZnJlZV9ibG9jayhzdHJ1Y3QgaW5vZGUgKmlub2RlLCB1bnNpZ25lZCBsb25nIGJsb2NrKTtcbiB1bnNpZ25lZCBsb25nIG1pbml4X2NvdW50X2ZyZWVfYmxvY2tzKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpO1xuIGludCBtaW5peF9nZXRhdHRyKHN0cnVjdCBtbnRfaWRtYXAgKiwgY29uc3Qgc3RydWN0IHBhdGggKixcbi1cdFx0c3RydWN0IGtzdGF0ICosIHUzMiwgdW5zaWduZWQgaW50KTtcbitcdFx0c3RydWN0IGtzdGF0ICosIHUzMiwgdW5zaWduZWQpO1xuK2ludCBtaW5peF9zZXRhdHRyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXG4rXHRzdHJ1Y3QgaWF0dHIgKmF0dHIpO1xuIGludCBtaW5peF9wcmVwYXJlX2NodW5rKHN0cnVjdCBmb2xpbyAqZm9saW8sIGxvZmZfdCBwb3MsIHVuc2lnbmVkIGxlbik7XG4gc3RydWN0IG1hcHBpbmdfbWV0YWRhdGFfYmhzICptaW5peF9nZXRfbWV0YWRhdGFfYmhzKHN0cnVjdCBpbm9kZSAqaW5vZGUpO1xuIGludCBtaW5peF9mc3luYyhzdHJ1Y3QgZmlsZSAqZmlsZSwgbG9mZl90IHN0YXJ0LCBsb2ZmX3QgZW5kLCBpbnQgZGF0YXN5bmMpO1xuQEAgLTY5LDYgKzcyLDggQEAgZXh0ZXJuIGludCBWMV9taW5peF9nZXRfYmxvY2soc3RydWN0IGlub2RlICosIGxvbmcsIHN0cnVjdCBidWZmZXJfaGVhZCAqLCBpbnQpO1xuIGV4dGVybiBpbnQgVjJfbWluaXhfZ2V0X2Jsb2NrKHN0cnVjdCBpbm9kZSAqLCBsb25nLCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKiwgaW50KTtcbiBleHRlcm4gdW5zaWduZWQgVjFfbWluaXhfYmxvY2tzKGxvZmZfdCwgc3RydWN0IHN1cGVyX2Jsb2NrICopO1xuIGV4dGVybiB1bnNpZ25lZCBWMl9taW5peF9ibG9ja3MobG9mZl90LCBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKik7XG4rZXh0ZXJuIGludCBtaW5peF9nZXRfYmxvY2soc3RydWN0IGlub2RlICppbm9kZSwgc2VjdG9yX3QgYmxvY2ssXG4rXHRcdCAgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoX3Jlc3VsdCwgaW50IGNyZWF0ZSk7XG4gXG4gc3RydWN0IG1pbml4X2Rpcl9lbnRyeSAqbWluaXhfZmluZF9lbnRyeShzdHJ1Y3QgZGVudHJ5ICosIHN0cnVjdCBmb2xpbyAqKik7XG4gaW50IG1pbml4X2FkZF9saW5rKHN0cnVjdCBkZW50cnkqLCBzdHJ1Y3QgaW5vZGUqKTtcbkBAIC03NywxMyArODIsMjYgQEAgaW50IG1pbml4X21ha2VfZW1wdHkoc3RydWN0IGlub2RlKiwgc3RydWN0IGlub2RlKik7XG4gaW50IG1pbml4X2VtcHR5X2RpcihzdHJ1Y3QgaW5vZGUqKTtcbiBpbnQgbWluaXhfc2V0X2xpbmsoc3RydWN0IG1pbml4X2Rpcl9lbnRyeSAqZGUsIHN0cnVjdCBmb2xpbyAqZm9saW8sXG4gXHRcdHN0cnVjdCBpbm9kZSAqaW5vZGUpO1xuK2V4dGVybiBjb25zdCBjaGFyICptaW5peF9nZXRfbGluayhzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4rXHRcdHN0cnVjdCBkZWxheWVkX2NhbGwgKmNhbGxiYWNrKTtcbitcbiBzdHJ1Y3QgbWluaXhfZGlyX2VudHJ5ICptaW5peF9kb3Rkb3Qoc3RydWN0IGlub2RlKiwgc3RydWN0IGZvbGlvICoqKTtcbiBpbm9fdCBtaW5peF9pbm9kZV9ieV9uYW1lKHN0cnVjdCBkZW50cnkqKTtcbiBcbitleHRlcm4gaW50IFYxX21pbml4X2lvbWFwX2JlZ2luKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfdCBvZmZzZXQsXG4rXHRsb2ZmX3QgbGVuZ3RoLCB1bnNpZ25lZCBpbnQgZmxhZ3MsIHN0cnVjdCBpb21hcCAqaW9tYXAsXG4rXHRzdHJ1Y3QgaW9tYXAgKnNyY21hcCk7XG4rZXh0ZXJuIGludCBWMl9taW5peF9pb21hcF9iZWdpbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb2ZmX3Qgb2Zmc2V0LFxuK1x0bG9mZl90IGxlbmd0aCwgdW5zaWduZWQgaW50IGZsYWdzLCBzdHJ1Y3QgaW9tYXAgKmlvbWFwLFxuK1x0c3RydWN0IGlvbWFwICpzcmNtYXApO1xuK1xuK2V4dGVybiBjb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZV9vcGVyYXRpb25zIG1pbml4X2FvcHM7XG4gZXh0ZXJuIGNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIG1pbml4X2ZpbGVfaW5vZGVfb3BlcmF0aW9ucztcbiBleHRlcm4gY29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgbWluaXhfZGlyX2lub2RlX29wZXJhdGlvbnM7XG4gZXh0ZXJuIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgbWluaXhfZmlsZV9vcGVyYXRpb25zO1xuIGV4dGVybiBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIG1pbml4X2Rpcl9vcGVyYXRpb25zO1xuK2V4dGVybiBjb25zdCBzdHJ1Y3QgaW9tYXBfb3BzIFYxX21pbml4X2lvbWFwX29wcztcbitleHRlcm4gY29uc3Qgc3RydWN0IGlvbWFwX29wcyBWMl9taW5peF9pb21hcF9vcHM7XG4gXG4gc3RhdGljIGlubGluZSBzdHJ1Y3QgbWluaXhfc2JfaW5mbyAqbWluaXhfc2Ioc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcbiB7XG5AQCAtOTUsMTEgKzExMywxNyBAQCBzdGF0aWMgaW5saW5lIHN0cnVjdCBtaW5peF9pbm9kZV9pbmZvICptaW5peF9pKHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4gXHRyZXR1cm4gY29udGFpbmVyX29mKGlub2RlLCBzdHJ1Y3QgbWluaXhfaW5vZGVfaW5mbywgdmZzX2lub2RlKTtcbiB9XG4gXG4tc3RhdGljIGlubGluZSB1bnNpZ25lZCBtaW5peF9ibG9ja3NfbmVlZGVkKHVuc2lnbmVkIGJpdHMsIHVuc2lnbmVkIGJsb2Nrc2l6ZSlcbitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBtaW5peF9ibG9ja3NfbmVlZGVkKHVuc2lnbmVkIGludCBiaXRzLCB1bnNpZ25lZCBpbnQgYmxvY2tzaXplKVxuIHtcbiBcdHJldHVybiBESVZfUk9VTkRfVVAoYml0cywgYmxvY2tzaXplICogOCk7XG4gfVxuIFxuK3N0YXRpYyBpbmxpbmUgY29uc3Qgc3RydWN0IGlvbWFwX29wcyAqbWluaXhfaW9tYXBfb3BzX3ZlcihzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuK3tcbitcdHJldHVybiAoSU5PREVfVkVSU0lPTihpbm9kZSkgPT0gTUlOSVhfVjEpID9cbitcdFx0XHUwMDI2VjFfbWluaXhfaW9tYXBfb3BzIDogXHUwMDI2VjJfbWluaXhfaW9tYXBfb3BzO1xuK31cbitcbiAjaWYgZGVmaW5lZChDT05GSUdfTUlOSVhfRlNfTkFUSVZFX0VORElBTikgXHUwMDI2XHUwMDI2IFxcXG4gXHRkZWZpbmVkKENPTkZJR19NSU5JWF9GU19CSUdfRU5ESUFOXzE2QklUX0lOREVYRUQpXG4gXG5AQCAtMTI5LDcgKzE1Myw3IEBAIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbWluaXhfYmxvY2tzX25lZWRlZCh1bnNpZ25lZCBiaXRzLCB1bnNpZ25lZCBibG9ja3NpemUpXG4gICogYmlnLWVuZGlhbiAxNmJpdCBpbmRleGVkIGJpdG1hcHNcbiAgKi9cbiBcbi1zdGF0aWMgaW5saW5lIGludCBtaW5peF9maW5kX2ZpcnN0X3plcm9fYml0KGNvbnN0IHZvaWQgKnZhZGRyLCB1bnNpZ25lZCBzaXplKVxuK3N0YXRpYyBpbmxpbmUgaW50IG1pbml4X2ZpbmRfZmlyc3RfemVyb19iaXQoY29uc3Qgdm9pZCAqdmFkZHIsIHVuc2lnbmVkIGludCBzaXplKVxuIHtcbiBcdGNvbnN0IHVuc2lnbmVkIHNob3J0ICpwID0gdmFkZHIsICphZGRyID0gdmFkZHI7XG4gXHR1bnNpZ25lZCBzaG9ydCBudW07XG5kaWZmIC0tZ2l0IGEvZnMvbWluaXgvbmFtZWkuYyBiL2ZzL21pbml4L25hbWVpLmNcbmluZGV4IDI2M2U0YmE4YjFjODIyLi5lMjQ1ZjU1YTY4ZmY1ZCAxMDA2NDRcbi0tLSBhL2ZzL21pbml4L25hbWVpLmNcbisrKyBiL2ZzL21pbml4L25hbWVpLmNcbkBAIC02LDYgKzYsOCBAQFxuICAqL1xuIFxuICNpbmNsdWRlIFwibWluaXguaFwiXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvYnVmZmVyX2hlYWQuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L25hbWVpLmhcdTAwM2VcbiBcbiBzdGF0aWMgaW50IGFkZF9ub25kaXIoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuIHtcbkBAIC02OSw2ICs3MSwxMDEgQEAgc3RhdGljIGludCBtaW5peF9jcmVhdGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxuIFx0cmV0dXJuIG1pbml4X21rbm9kKFx1MDAyNm5vcF9tbnRfaWRtYXAsIGRpciwgZGVudHJ5LCBtb2RlLCAwKTtcbiB9XG4gXG4rc3RhdGljIGlubGluZSB1MTYgKnYxX2lfZGF0YShzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuK3tcbitcdHJldHVybiAodTE2ICopbWluaXhfaShpbm9kZSktXHUwMDNldS5pMV9kYXRhO1xuK31cbitcbitzdGF0aWMgaW5saW5lIHUzMiAqdjJfaV9kYXRhKHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4re1xuK1x0cmV0dXJuICh1MzIgKiltaW5peF9pKGlub2RlKS1cdTAwM2V1LmkyX2RhdGE7XG4rfVxuK1xuK3N0YXRpYyBpbmxpbmUgdTE2IGNwdV90b192MV9ibG9jayhzZWN0b3JfdCBuKVxuK3tcbitcdHJldHVybiBuO1xuK31cbitcbitzdGF0aWMgaW5saW5lIHUzMiBjcHVfdG9fdjJfYmxvY2soc2VjdG9yX3Qgbilcbit7XG4rXHRyZXR1cm4gbjtcbit9XG4rXG4rc3RhdGljIGlubGluZSBzZWN0b3JfdCB2MV9ibG9ja190b19jcHUodTE2IG4pXG4re1xuK1x0cmV0dXJuIG47XG4rfVxuK1xuK3N0YXRpYyBpbmxpbmUgc2VjdG9yX3QgdjJfYmxvY2tfdG9fY3B1KHUzMiBuKVxuK3tcbitcdHJldHVybiBuO1xuK31cbitcbisvKiBSZWltcGxlbWVudCBwYWdlX3N5bWxpbmsncyBnZW5lcmFsIGxvZ2ljIHdoaWxlIGF2b2lkaW5nIHVzaW5nIGJ1ZmZlciBoZWFkXG4rICogYmFzZWQgYW9wcyBvcGVyYXRpb25zIGxpa2UgYW9wcy1cdTAwM2V3cml0ZV9iZWdpbiBzbyB0aGluZ3MgYmVoYXZlIGJldHRlciB3aXRoXG4rICogdGhlIG5ldyByZWdpbWUgb2YgaW9tYXAgYmFzZWQgYW9wcyBvcGVyYXRpb25zLiBDcmliYmluZyBmcm9tIHBhZ2Vfc3ltbGluayBpblxuKyAqIGZzL25hbWVpLmMgYW5kIGV4dDQncyBleHQ0X2luaXRfc3ltbGlua19ibG9jay5cbisgKi9cbitzdGF0aWMgaW50IF9fcGFnZV9zeW1saW5rKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGNvbnN0IGNoYXIgKnN5bW5hbWUsIGludCBsZW4pXG4re1xuK1x0c3RydWN0IHN1cGVyX2Jsb2NrICpzYiA9IGlub2RlLVx1MDAzZWlfc2I7XG4rXHRzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoO1xuK1x0Y2hhciAqa2FkZHI7XG4rXHRpbnQgZXJyID0gMDtcbitcdHUxNiAqcDE2OyAvKiB2MSAxNiBiaXQgYmxvY2sgKi9cbitcdHUzMiAqcDMyOyAvKiB2Mi8zIDMyIGJpdCBibG9jayAqL1xuK1xuK1x0c2VjdG9yX3QgcGh5cztcbitcbitcdHBoeXMgPSBtaW5peF9uZXdfYmxvY2soaW5vZGUpO1xuK1x0aWYgKCFwaHlzKSB7XG4rXHRcdGVyciA9IC1FTk9TUEM7XG4rXHRcdGdvdG8gcHNfb3V0O1xuK1x0fVxuK1xuK1x0aWYgKElOT0RFX1ZFUlNJT04oaW5vZGUpID09IE1JTklYX1YxKSB7XG4rXHRcdHAxNiA9IHYxX2lfZGF0YShpbm9kZSk7XG4rXHRcdCpwMTYgPSBjcHVfdG9fdjFfYmxvY2socGh5cyk7XG4rXHR9IGVsc2Uge1xuK1x0XHRwMzIgPSB2Ml9pX2RhdGEoaW5vZGUpO1xuK1x0XHQqcDMyID0gY3B1X3RvX3YyX2Jsb2NrKHBoeXMpO1xuK1x0fVxuK1xuK1x0YmggPSBzYl9nZXRibGsoc2IsIHBoeXMpO1xuK1x0aWYgKCFiaCkge1xuK1x0XHRlcnIgPSAtRU5PTUVNO1xuK1x0XHRnb3RvIHBzX2ZhaWw7XG4rXHR9XG4rXG4rXHRsb2NrX2J1ZmZlcihiaCk7XG4rXHRrYWRkciA9IChjaGFyICopYmgtXHUwMDNlYl9kYXRhO1xuK1x0bWVtc2V0KGthZGRyLCAwLCBzYi1cdTAwM2VzX2Jsb2Nrc2l6ZSk7XG4rXHRtZW1jcHkoa2FkZHIsIHN5bW5hbWUsIGxlbik7XG4rXHRpbm9kZS1cdTAwM2VpX3NpemUgPSBsZW4gLSAxO1xuK1x0c2V0X2J1ZmZlcl91cHRvZGF0ZShiaCk7XG4rXHR1bmxvY2tfYnVmZmVyKGJoKTtcbitcbitcdG1tYl9tYXJrX2J1ZmZlcl9kaXJ0eShiaCwgXHUwMDI2bWluaXhfaShpbm9kZSktXHUwMDNlaV9tZXRhZGF0YV9iaHMpO1xuK1x0aWYgKGlub2RlX25lZWRzX3N5bmMoaW5vZGUpKSB7XG4rXHRcdHN5bmNfZGlydHlfYnVmZmVyKGJoKTtcbitcdFx0aWYgKGJ1ZmZlcl9yZXEoYmgpIFx1MDAyNlx1MDAyNiAhYnVmZmVyX3VwdG9kYXRlKGJoKSkge1xuK1x0XHRcdHByX2VycihcImkvbyBlcnJvciBzeW5jaW5nIGl0YWJsZSBibG9ja1wiKTtcbitcdFx0XHRlcnIgPSAtRUlPO1xuK1x0XHR9XG4rXG4rXHR9XG4rXG4rXHRtYXJrX2lub2RlX2RpcnR5KGlub2RlKTtcbitcdGJyZWxzZShiaCk7XG4rXG4rcHNfb3V0OlxuK1x0cmV0dXJuIGVycjtcbitcbitwc19mYWlsOlxuK1x0bWluaXhfZnJlZV9ibG9jayhpbm9kZSwgcGh5cyk7XG4rXHRnb3RvIHBzX291dDtcbit9XG4rXG4gc3RhdGljIGludCBtaW5peF9zeW1saW5rKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbiBcdFx0XHQgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBjb25zdCBjaGFyICpzeW1uYW1lKVxuIHtcbkBAIC04NCw3ICsxODEsNyBAQCBzdGF0aWMgaW50IG1pbml4X3N5bWxpbmsoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxuIFx0XHRyZXR1cm4gUFRSX0VSUihpbm9kZSk7XG4gXG4gXHRtaW5peF9zZXRfaW5vZGUoaW5vZGUsIDApO1xuLVx0ZXJyID0gcGFnZV9zeW1saW5rKGlub2RlLCBzeW1uYW1lLCBpKTtcbitcdGVyciA9IF9fcGFnZV9zeW1saW5rKGlub2RlLCBzeW1uYW1lLCBpKTtcbiBcdGlmICh1bmxpa2VseShlcnIpKSB7XG4gXHRcdGlub2RlX2RlY19saW5rX2NvdW50KGlub2RlKTtcbiBcdFx0aXB1dChpbm9kZSk7XG5AQCAtMjczLDYgKzM3MCw0NCBAQCBzdGF0aWMgaW50IG1pbml4X3JlbmFtZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcbiBcdHJldHVybiBlcnI7XG4gfVxuIFxuKy8qIHN0cmFpZ2h0IHVwIHRoaWV2ZXJ5IGhlcmU7IHN0b2xlbiB2ZXJiYXRpbSBmcm9tIGV4dDRfZ2V0X2xpbmsgKi9cbitzdGF0aWMgdm9pZCBtaW5peF9mcmVlX2xpbmsodm9pZCAqYmgpXG4re1xuK1x0YnJlbHNlKGJoKTtcbit9XG4rXG4rLyogQm9ycm93aW5nIGZyb20gZXh0NF9nZXRfbGluayB0byBhIGRlZ3JlZTsgc2luY2UgbWluaXggaW5vZGVzIGFuZCBzeW1saW5rc1xuKyAqIGFyZSBzaWduaWZpY2FudGx5IHNpbXBsZXIsIHdlIGRvbid0IG5lZWQgdG8gZG8gbmVhcmx5IGFzIG11Y2ggYXMgZXh0NFxuKyAqIHJlcXVpcmVzIGZvciBvbGQtdGltZXkgZXh0NCBzbG93IGxpbmtzLlxuKyAqL1xuK2NvbnN0IGNoYXIgKm1pbml4X2dldF9saW5rKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGlub2RlICppbm9kZSxcbitcdFx0c3RydWN0IGRlbGF5ZWRfY2FsbCAqY2FsbGJhY2spXG4re1xuK1x0c3RydWN0IHN1cGVyX2Jsb2NrICpzYiA9IGlub2RlLVx1MDAzZWlfc2I7XG4rXHRzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoO1xuK1x0c2VjdG9yX3QgYmxrO1xuK1xuK1x0LyogR2V0IHlvbiBibG9jaywgZGVwZW5kaW5nIG9uIHdoYXQgdmVyc2lvbiBvZiB0aGUgbWluaXggZnMgdGhpcyBpcy4gKi9cbitcdGlmIChJTk9ERV9WRVJTSU9OKGlub2RlKSA9PSBNSU5JWF9WMSlcbitcdFx0YmxrID0gdjFfYmxvY2tfdG9fY3B1KCoodjFfaV9kYXRhKGlub2RlKSkpO1xuK1x0ZWxzZVxuK1x0XHRibGsgPSB2Ml9ibG9ja190b19jcHUoKih2Ml9pX2RhdGEoaW5vZGUpKSk7XG4rXG4rXHRiaCA9IHNiX2JyZWFkKHNiLCBibGspO1xuK1x0aWYgKElTX0VSUihiaCkpXG4rXHRcdHJldHVybiBFUlJfQ0FTVChiaCk7XG4rXHRpZiAoIWJoKSB7XG4rXHRcdHByX2VycihcImJhZCBzeW1saW5rIG9uIGlub2RlICVsbHVcIiwgaW5vZGUtXHUwMDNlaV9pbm8pO1xuK1x0XHRyZXR1cm4gRVJSX1BUUigtRUZTQ09SUlVQVEVEKTtcbitcdH1cbitcbitcdHNldF9kZWxheWVkX2NhbGwoY2FsbGJhY2ssIG1pbml4X2ZyZWVfbGluaywgYmgpO1xuK1x0bmRfdGVybWluYXRlX2xpbmsoYmgtXHUwMDNlYl9kYXRhLCBpbm9kZS1cdTAwM2VpX3NpemUsXG4rXHRcdFx0aW5vZGUtXHUwMDNlaV9zYi1cdTAwM2VzX2Jsb2Nrc2l6ZSAtIDEpO1xuK1xuK1x0cmV0dXJuIGJoLVx1MDAzZWJfZGF0YTtcbit9XG4rXG4gLypcbiAgKiBkaXJlY3RvcmllcyBjYW4gaGFuZGxlIG1vc3Qgb3BlcmF0aW9ucy4uLlxuICAqL1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjhUMDU6MzM6MDQuMDE1ODc4MjEyWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjYyODUzNjk1NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNaW5peCBJL08gSW1wbGVtZW50YXRpb24gUGF0Y2ggQW5hbHlzaXMgXHUwMDI2IEZ1enppbmcgU3RyYXRlZ3kqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGdvdCB0aGlzIHBhdGNoIGhlcmUgdGhhdCdzIGRpdmluZyBkZWVwIGludG8gdGhlIE1pbml4IGZpbGVzeXN0ZW0gaW1wbGVtZW50YXRpb24uIEl0J3MgdG91Y2hpbmcgYGZzL21pbml4L2ZpbGUuY2AsIGBmcy9taW5peC9pbm9kZS5jYCwgYGZzL21pbml4L2lvbWFwLmNgLCB0aGUgYGl0cmVlYCBpbXBsZW1lbnRhdGlvbiwgYW5kIGV2ZW4gdGhlIGhlYWRlciBhbmQgbmFtZSByZXNvbHV0aW9uIGNvbXBvbmVudHMuIFRoaXMgaXMgcHJldHR5IHNpZ25pZmljYW50OyBpdCdzIGltcGxlbWVudGluZyBpb21hcC1iYXNlZCBkaXJlY3QgSS9PIGFuZCBidWZmZXJlZCBJL08sIHdoaWNoIGlzIGEgYmlnIGNoYW5nZSB0byBob3cgTWluaXggaGFuZGxlcyBkYXRhLlxuXG5Mb29raW5nIGF0IHRoZSBjb2RlIGNoYW5nZXMsIGl0J3MgaW50cm9kdWNpbmcgYSB3aG9sZSBzbGV3IG9mIG5ldyBmdW5jdGlvbnM6IGBtaW5peF9kaW9fcmVhZF9pdGVyYCwgYG1pbml4X2Rpb193cml0ZV9pdGVyYCwgdGhlIHN0YW5kYXJkIGZpbGUgcmVhZC93cml0ZSBpdGVyYXRvcnMsIGFuZCBzb21lIGNydWNpYWwgaW9tYXAgbGlmZWN5Y2xlIGZ1bmN0aW9ucyBsaWtlIGBtaW5peF9pb21hcF9iZWdpbmAgYW5kIGBtaW5peF9pb21hcF9lbmRgLiBQbHVzLCBpdCBsb29rcyBsaWtlIHRoZXkndmUgdXBkYXRlZCB0aGUgd3JpdGViYWNrIGFuZCByZWFkLWFoZWFkIG1lY2hhbmlzbXMgKGBtaW5peF93cml0ZWJhY2tfcmFuZ2VgLCBgbWluaXhfd3JpdGVwYWdlc2AsIGBtaW5peF9yZWFkX2ZvbGlvYCwgYG1pbml4X3JlYWRhaGVhZGApLiBJIGFsc28gc2VlIGNoYW5nZXMgdG8gYmxvY2sgbWFwcGluZyAoYG1pbml4X2JtYXBgKSBhbmQgc3ltbGluayBoYW5kbGluZywgc3dpdGNoaW5nIGF3YXkgZnJvbSB0aGUgZ2VuZXJpYyBwYWdlIHN5bWxpbmsgZnVuY3Rpb25zIGFuZCB1c2luZyBgX19wYWdlX3N5bWxpbmtgIGFuZCBgbWluaXhfZ2V0X2xpbmtgIGluc3RlYWQuXG5cblRoaXMgaXMgYSBjbGVhciBmdW5jdGlvbmFsIHNoaWZ0LiBHaXZlbiB0aGUgY29tcGxleGl0eSBhbmQgdGhlIHBvdGVudGlhbCBmb3Igc3VidGxlIGludGVyYWN0aW9ucyBpbiBhIGZpbGVzeXN0ZW0sIHRoaXMgZGVmaW5pdGVseSB3YXJyYW50cyBzb21lIHNlcmlvdXMgZnV6emluZy4gTXkgbWFpbiB0YXJnZXRzIGZvciBmdXp6aW5nIHNob3VsZCBiZSBhbGwgdGhlIG5ld2x5IGludHJvZHVjZWQgZnVuY3Rpb25zOiBgbWluaXhfZGlvX3JlYWRfaXRlcmAsIGBtaW5peF9kaW9fd3JpdGVfaXRlcmAsIGBtaW5peF9maWxlX3JlYWRfaXRlcmAsIGBtaW5peF9maWxlX3dyaXRlX2l0ZXJgLCBgbWluaXhfaW9tYXBfYmVnaW5gLCBgbWluaXhfaW9tYXBfZW5kYCwgYG1pbml4X3dyaXRlYmFja19yYW5nZWAsIGBtaW5peF93cml0ZXBhZ2VzYCwgYG1pbml4X3JlYWRfZm9saW9gLCBgbWluaXhfcmVhZGFoZWFkYCwgYG1pbml4X2JtYXBgLCBgX19wYWdlX3N5bWxpbmtgLCBhbmQgYG1pbml4X2dldF9saW5rYC4gVGhlc2UgYXJlIHRoZSBjcml0aWNhbCBlbnRyeSBwb2ludHMgYW5kIGRhdGEgbWFuaXB1bGF0aW9uIGZ1bmN0aW9ucyB0aGF0IG5lZWQgdGhlIG1vc3Qgc2NydXRpbnkuXG5cbkJlZm9yZSBJIGdvIGFueSBmdXJ0aGVyLCBJJ2xsIHF1aWNrbHkgY2hlY2sgYGZzL21pbml4L0tjb25maWdgIHRvIGNvbmZpcm0gd2hhdCBjb25maWcgb3B0aW9ucyBhcmUgaW52b2x2ZWQgaW4gZW5hYmxpbmcgdGhlIE1pbml4IGZpbGVzeXN0ZW0uIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBrbm93IGhvdyB0byBhY3R1YWxseSBlbmFibGUgdGhpcyBjb2RlIHBhdGggYW5kIHdoaWNoIGNvbmZpZ3MgYXJlIHJlbGV2YW50IGZvciB0aGUgYnVpbGQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExNjA4LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDQ3LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjhUMDU6MzM6MTAuNjQ0NDE4NzM3WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI3MTQyNjcyMywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTUlOSVhfRlNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvbWluaXgvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9taW5peC9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuZnMvbWluaXgvS2NvbmZpZzoyOmNvbmZpZyBNSU5JWF9GU1xcbmZzL21pbml4L0tjb25maWctMy1cXHR0cmlzdGF0ZSBcXFwiTWluaXggZmlsZSBzeXN0ZW0gc3VwcG9ydFxcXCJcXG4tLVxcbmZzL21pbml4L0tjb25maWctMjAtXFxuZnMvbWluaXgvS2NvbmZpZzoyMTpjb25maWcgTUlOSVhfRlNfTkFUSVZFX0VORElBTlxcbmZzL21pbml4L0tjb25maWctMjItXFx0ZGVmX2Jvb2wgTUlOSVhfRlNcXG4tLVxcbmZzL21pbml4L0tjb25maWctMjQtXFxuZnMvbWluaXgvS2NvbmZpZzoyNTpjb25maWcgTUlOSVhfRlNfQklHX0VORElBTl8xNkJJVF9JTkRFWEVEXFxuZnMvbWluaXgvS2NvbmZpZy0yNi1cXHRkZWZfYm9vbCBNSU5JWF9GU1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yOFQwNTozMzoxMC45MTU4NTMxNloiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMwMTI3OTE0ODEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0J3MgaW5uZXIgbW9ub2xvZ3VlOlxuXG4qKkNoZWNraW5nIE15IEFzc3VtcHRpb25zOiBDb25maWcgYW5kIEZvY3VzKipcblxuQWxyaWdodCwgdGhlIGNvbnRleHQgaXMgdGhlIGBNSU5JWF9GU2AgY29uZmlnLiBSaWdodCBhd2F5LCBteSBtaW5kIHN0YXJ0cyB0aWNraW5nLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEknbSBncm91bmRlZCBpbiB0aGUgc3BlY2lmaWNzIG9mICp0aGF0KiBwYXJ0aWN1bGFyIGNvbmZpZ3VyYXRpb24uIEJlZm9yZSBJIGRlbHZlIGludG8gYW55dGhpbmcgZWxzZSwgaXQncyBlc3NlbnRpYWwgdG8gcXVpY2tseSB2ZXJpZnkgdGhhdCBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSByZWxldmFudCBmb2N1cyBzeW1ib2xzIGlzIGFjY3VyYXRlLiBJIGRvbid0IHdhbnQgdG8gd2FzdGUgdGltZSBkb3duIGEgcmFiYml0IGhvbGUgYmFzZWQgb24gYW4gaW5jb3JyZWN0IHByZW1pc2UuIExldCdzIG1ha2Ugc3VyZSBJJ20gdHJhY2tpbmcgd2l0aCB0aGUgcmlnaHQgdmFyaWFibGVzIGFuZCBkZWZpbml0aW9ucyBmb3IgYE1JTklYX0ZTYC4gVGhpcyBzZWVtcyBsaWtlIGEgc2FuaXR5IGNoZWNrLCBtb3JlIHRoYW4gYW55dGhpbmcgZWxzZSwgYnV0IGVzc2VudGlhbCB0byBlbnN1cmUgZWZmaWNpZW5jeSBpbiB0aGUgbG9uZyBydW4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyODEyLCJPdXRwdXRUb2tlbnMiOjU1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjhUMDU6MzM6MTMuOTI4NjQ5MzQxWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYyNjA3OTI0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl4oc3RhdGljICk/W2EtekEtWl8wLTldKyBcXFxcKiptaW5peF9bYS16QS1aXzAtOV0rXFxcXChcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvbWluaXgvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL21pbml4L2JpdG1hcC5jPTI3PXN0YXRpYyBfX3UzMiBjb3VudF9mcmVlKHN0cnVjdCBidWZmZXJfaGVhZCAqbWFwW10sIHVuc2lnbmVkIGJsb2Nrc2l6ZSwgX191MzIgbnVtYml0cylcXG4tLVxcbmZzL21pbml4L2JpdG1hcC5jLTQxLVxcbmZzL21pbml4L2JpdG1hcC5jOjQyOnZvaWQgbWluaXhfZnJlZV9ibG9jayhzdHJ1Y3QgaW5vZGUgKmlub2RlLCB1bnNpZ25lZCBsb25nIGJsb2NrKVxcbmZzL21pbml4L2JpdG1hcC5jLTQzLXtcXG4tLVxcbmZzL21pbml4L2JpdG1hcC5jLTcwLVxcbmZzL21pbml4L2JpdG1hcC5jOjcxOmludCBtaW5peF9uZXdfYmxvY2soc3RydWN0IGlub2RlICogaW5vZGUpXFxuZnMvbWluaXgvYml0bWFwLmMtNzIte1xcbi0tXFxuZnMvbWluaXgvYml0bWFwLmM9MTMxPW1pbml4X1YyX3Jhd19pbm9kZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBpbm9fdCBpbm8sIHN0cnVjdCBidWZmZXJfaGVhZCAqKmJoKVxcbi0tXFxuZnMvbWluaXgvYml0bWFwLmMtMTU3LVxcbmZzL21pbml4L2JpdG1hcC5jOjE1ODpzdGF0aWMgdm9pZCBtaW5peF9jbGVhcl9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKVxcbmZzL21pbml4L2JpdG1hcC5jLTE1OS17XFxuLS1cXG5mcy9taW5peC9iaXRtYXAuYy0xODItXFxuZnMvbWluaXgvYml0bWFwLmM6MTgzOnZvaWQgbWluaXhfZnJlZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKiBpbm9kZSlcXG5mcy9taW5peC9iaXRtYXAuYy0xODQte1xcbi0tXFxuZnMvbWluaXgvZGlyLmM9MTg9dHlwZWRlZiBzdHJ1Y3QgbWluaXgzX2Rpcl9lbnRyeSBtaW5peDNfZGlyZW50O1xcbmZzL21pbml4L2Rpci5jLTE5LVxcbmZzL21pbml4L2Rpci5jOjIwOnN0YXRpYyBpbnQgbWluaXhfcmVhZGRpcihzdHJ1Y3QgZmlsZSAqLCBzdHJ1Y3QgZGlyX2NvbnRleHQgKik7XFxuZnMvbWluaXgvZGlyLmMtMjEtXFxuLS1cXG5mcy9taW5peC9kaXIuYz00Mz1zdGF0aWMgdm9pZCBkaXJfY29tbWl0X2NodW5rKHN0cnVjdCBmb2xpbyAqZm9saW8sIGxvZmZfdCBwb3MsIHVuc2lnbmVkIGxlbilcXG4tLVxcbmZzL21pbml4L2Rpci5jLTU2LVxcbmZzL21pbml4L2Rpci5jOjU3OnN0YXRpYyBpbnQgbWluaXhfaGFuZGxlX2RpcnN5bmMoc3RydWN0IGlub2RlICpkaXIpXFxuZnMvbWluaXgvZGlyLmMtNTgte1xcbi0tXFxuZnMvbWluaXgvZGlyLmM9Nzg9c3RhdGljIGlubGluZSB2b2lkICptaW5peF9uZXh0X2VudHJ5KHZvaWQgKmRlLCBzdHJ1Y3QgbWluaXhfc2JfaW5mbyAqc2JpKVxcbi0tXFxuZnMvbWluaXgvZGlyLmMtODItXFxuZnMvbWluaXgvZGlyLmM6ODM6c3RhdGljIGludCBtaW5peF9yZWFkZGlyKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgZGlyX2NvbnRleHQgKmN0eClcXG5mcy9taW5peC9kaXIuYy04NC17XFxuLS1cXG5mcy9taW5peC9kaXIuYz0xMzc9c3RhdGljIGlubGluZSBpbnQgbmFtZWNvbXBhcmUoaW50IGxlbiwgaW50IG1heGxlbixcXG4tLVxcbmZzL21pbml4L2Rpci5jLTE1My0gKi9cXG5mcy9taW5peC9kaXIuYzoxNTQ6bWluaXhfZGlyZW50ICptaW5peF9maW5kX2VudHJ5KHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGZvbGlvICoqZm9saW9wKVxcbmZzL21pbml4L2Rpci5jLTE1NS17XFxuLS1cXG5mcy9taW5peC9kaXIuYy0xOTgtXFxuZnMvbWluaXgvZGlyLmM6MTk5OmludCBtaW5peF9hZGRfbGluayhzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBpbm9kZSAqaW5vZGUpXFxuZnMvbWluaXgvZGlyLmMtMjAwLXtcXG4tLVxcbmZzL21pbml4L2Rpci5jLTI4NS1cXG5mcy9taW5peC9kaXIuYzoyODY6aW50IG1pbml4X2RlbGV0ZV9lbnRyeShzdHJ1Y3QgbWluaXhfZGlyX2VudHJ5ICpkZSwgc3RydWN0IGZvbGlvICpmb2xpbylcXG5mcy9taW5peC9kaXIuYy0yODcte1xcbi0tXFxuZnMvbWluaXgvZGlyLmMtMzA5LVxcbmZzL21pbml4L2Rpci5jOjMxMDppbnQgbWluaXhfbWFrZV9lbXB0eShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgaW5vZGUgKmRpcilcXG5mcy9taW5peC9kaXIuYy0zMTEte1xcbi0tXFxuZnMvbWluaXgvZGlyLmMtMzU2LSAqL1xcbmZzL21pbml4L2Rpci5jOjM1NzppbnQgbWluaXhfZW1wdHlfZGlyKHN0cnVjdCBpbm9kZSAqIGlub2RlKVxcbmZzL21pbml4L2Rpci5jLTM1OC17XFxuLS1cXG5mcy9taW5peC9kaXIuYy00MDYtLyogUmVsZWFzZXMgdGhlIHBhZ2UgKi9cXG5mcy9taW5peC9kaXIuYzo0MDc6aW50IG1pbml4X3NldF9saW5rKHN0cnVjdCBtaW5peF9kaXJfZW50cnkgKmRlLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbmZzL21pbml4L2Rpci5jLTQwOC1cXHRcXHRzdHJ1Y3QgaW5vZGUgKmlub2RlKVxcbi0tXFxuZnMvbWluaXgvZGlyLmM9NDMxPXN0cnVjdCBtaW5peF9kaXJfZW50cnkgKm1pbml4X2RvdGRvdChzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGZvbGlvICoqZm9saW9wKVxcbi0tXFxuZnMvbWluaXgvZGlyLmMtNDQwLVxcbmZzL21pbml4L2Rpci5jOjQ0MTppbm9fdCBtaW5peF9pbm9kZV9ieV9uYW1lKHN0cnVjdCBkZW50cnkgKmRlbnRyeSlcXG5mcy9taW5peC9kaXIuYy00NDIte1xcbi0tXFxuZnMvbWluaXgvZmlsZS5jLTEyLVxcbmZzL21pbml4L2ZpbGUuYzoxMzppbnQgbWluaXhfZnN5bmMoc3RydWN0IGZpbGUgKmZpbGUsIGxvZmZfdCBzdGFydCwgbG9mZl90IGVuZCwgaW50IGRhdGFzeW5jKVxcbmZzL21pbml4L2ZpbGUuYy0xNC17XFxuLS1cXG5mcy9taW5peC9maWxlLmMtMTktXFxuZnMvbWluaXgvZmlsZS5jOjIwOnN0YXRpYyBzc2l6ZV90IG1pbml4X2Rpb19yZWFkX2l0ZXIoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKnRvKVxcbmZzL21pbml4L2ZpbGUuYy0yMS17XFxuLS1cXG5mcy9taW5peC9maWxlLmMtMzMtXFxuZnMvbWluaXgvZmlsZS5jOjM0OnN0YXRpYyBpbnQgbWluaXhfZGlvX3dyaXRlX2VuZF9pbyhzdHJ1Y3Qga2lvY2IgKmlvY2IsIHNzaXplX3Qgc2l6ZSwgaW50IGVycm9yLFxcbmZzL21pbml4L2ZpbGUuYy0zNS1cXHRcXHR1bnNpZ25lZCBpbnQgZmxhZ3MpXFxuLS1cXG5mcy9taW5peC9maWxlLmM9NTE9c3RhdGljIGNvbnN0IHN0cnVjdCBpb21hcF9kaW9fb3BzIG1pbml4X2Rpb193cml0ZV9vcHMgPSB7XFxuLS1cXG5mcy9taW5peC9maWxlLmMtNTQtXFxuZnMvbWluaXgvZmlsZS5jOjU1OnN0YXRpYyBzc2l6ZV90IG1pbml4X2Rpb193cml0ZV9pdGVyKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICpmcm9tKVxcbmZzL21pbml4L2ZpbGUuYy01Ni17XFxuLS1cXG5mcy9taW5peC9maWxlLmMtMTE0LVxcbmZzL21pbml4L2ZpbGUuYzoxMTU6c3RhdGljIHNzaXplX3QgbWluaXhfZmlsZV9yZWFkX2l0ZXIoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKnRvKVxcbmZzL21pbml4L2ZpbGUuYy0xMTYte1xcbi0tXFxuZnMvbWluaXgvZmlsZS5jLTEyMi1cXG5mcy9taW5peC9maWxlLmM6MTIzOnN0YXRpYyBzc2l6ZV90IG1pbml4X2ZpbGVfd3JpdGVfaXRlcihzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqZnJvbSlcXG5mcy9taW5peC9maWxlLmMtMTI0LXtcXG4tLVxcbmZzL21pbml4L2ZpbGUuYy0xNTUtXFxuZnMvbWluaXgvZmlsZS5jOjE1NjpzdGF0aWMgaW50IG1pbml4X2ZpbGVfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlscClcXG5mcy9taW5peC9maWxlLmMtMTU3LXtcXG4tLVxcbmZzL21pbml4L2ZpbGUuYz0xNjc9Y29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBtaW5peF9maWxlX29wZXJhdGlvbnMgPSB7XFxuLS1cXG5mcy9taW5peC9maWxlLmMtMTc3LVxcbmZzL21pbml4L2ZpbGUuYzoxNzg6aW50IG1pbml4X3NldGF0dHIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcXG5mcy9taW5peC9maWxlLmMtMTc5LVxcdHN0cnVjdCBpYXR0ciAqYXR0cilcXG4tLVxcbmZzL21pbml4L2lub2RlLmMtMjQtXFxuZnMvbWluaXgvaW5vZGUuYzoyNTpzdGF0aWMgaW50IG1pbml4X3dyaXRlX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuZnMvbWluaXgvaW5vZGUuYy0yNi1cXHRcXHRzdHJ1Y3Qgd3JpdGViYWNrX2NvbnRyb2wgKndiYyk7XFxuZnMvbWluaXgvaW5vZGUuYzoyNzpzdGF0aWMgaW50IG1pbml4X3N0YXRmcyhzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBrc3RhdGZzICpidWYpO1xcbmZzL21pbml4L2lub2RlLmMtMjgtXFxuZnMvbWluaXgvaW5vZGUuYz0yOT12b2lkIF9fbWluaXhfZXJyb3JfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSwgY29uc3QgY2hhciAqZnVuY3Rpb24sXFxuLS1cXG5mcy9taW5peC9pbm9kZS5jLTQ0LVxcbmZzL21pbml4L2lub2RlLmM6NDU6c3RhdGljIHZvaWQgbWluaXhfZXZpY3RfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSlcXG5mcy9taW5peC9pbm9kZS5jLTQ2LXtcXG4tLVxcbmZzL21pbml4L2lub2RlLmMtNTktXFxuZnMvbWluaXgvaW5vZGUuYzo2MDpzdGF0aWMgdm9pZCBtaW5peF9wdXRfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcXG5mcy9taW5peC9pbm9kZS5jLTYxLXtcXG4tLVxcbmZzL21pbml4L2lub2RlLmM9ODI9c3RhdGljIHN0cnVjdCBpbm9kZSAqbWluaXhfYWxsb2NfaW5vZGUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcXG4tLVxcbmZzL21pbml4L2lub2RlLmMtOTItXFxuZnMvbWluaXgvaW5vZGUuYzo5MzpzdGF0aWMgdm9pZCBtaW5peF9mcmVlX2luX2NvcmVfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSlcXG5mcy9taW5peC9pbm9kZS5jLTk0LXtcXG4tLVxcbmZzL21pbml4L2lub2RlLmM9MTI3PXN0YXRpYyBjb25zdCBzdHJ1Y3Qgc3VwZXJfb3BlcmF0aW9ucyBtaW5peF9zb3BzID0ge1xcbi0tXFxuZnMvbWluaXgvaW5vZGUuYy0xMzUtXFxuZnMvbWluaXgvaW5vZGUuYzoxMzY6c3RhdGljIGludCBtaW5peF9yZWNvbmZpZ3VyZShzdHJ1Y3QgZnNfY29udGV4dCAqZmMpXFxuZnMvbWluaXgvaW5vZGUuYy0xMzcte1xcbi0tXFxuZnMvbWluaXgvaW5vZGUuYy0xNzMtXFxuZnMvbWluaXgvaW5vZGUuYzoxNzQ6c3RhdGljIGJvb2wgbWluaXhfY2hlY2tfc3VwZXJibG9jayhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxcbmZzL21pbml4L2lub2RlLmMtMTc1LXtcXG4tLVxcbmZzL21pbml4L2lub2RlLmMtMjIwLVxcbmZzL21pbml4L2lub2RlLmM6MjIxOnN0YXRpYyBpbnQgbWluaXhfZmlsbF9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnMsIHN0cnVjdCBmc19jb250ZXh0ICpmYylcXG5mcy9taW5peC9pbm9kZS5jLTIyMi17XFxuLS1cXG5mcy9taW5peC9pbm9kZS5jLTQwMy1cXG5mcy9taW5peC9pbm9kZS5jOjQwNDpzdGF0aWMgaW50IG1pbml4X2dldF90cmVlKHN0cnVjdCBmc19jb250ZXh0ICpmYylcXG5mcy9taW5peC9pbm9kZS5jLTQwNS17XFxuLS1cXG5mcy9taW5peC9pbm9kZS5jPTQwOT1zdGF0aWMgY29uc3Qgc3RydWN0IGZzX2NvbnRleHRfb3BlcmF0aW9ucyBtaW5peF9jb250ZXh0X29wcyA9IHtcXG4tLVxcbmZzL21pbml4L2lub2RlLmMtNDEzLVxcbmZzL21pbml4L2lub2RlLmM6NDE0OnN0YXRpYyBpbnQgbWluaXhfaW5pdF9mc19jb250ZXh0KHN0cnVjdCBmc19jb250ZXh0ICpmYylcXG5mcy9taW5peC9pbm9kZS5jLTQxNS17XFxuLS1cXG5mcy9taW5peC9pbm9kZS5jLTQyMC1cXG5mcy9taW5peC9pbm9kZS5jOjQyMTpzdGF0aWMgaW50IG1pbml4X3N0YXRmcyhzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBrc3RhdGZzICpidWYpXFxuZnMvbWluaXgvaW5vZGUuYy00MjIte1xcbi0tXFxuZnMvbWluaXgvaW5vZGUuYy00MzgtXFxuZnMvbWluaXgvaW5vZGUuYzo0Mzk6c3RhdGljIHNzaXplX3QgbWluaXhfd3JpdGViYWNrX3JhbmdlKHN0cnVjdCBpb21hcF93cml0ZXBhZ2VfY3R4ICp3cGMsXFxuZnMvbWluaXgvaW5vZGUuYy00NDAtXFx0c3RydWN0IGZvbGlvICpmb2xpbywgdTY0IHBvcywgdW5zaWduZWQgaW50IGxlbiwgdTY0IGVuZF9wb3MpXFxuLS1cXG5mcy9taW5peC9pbm9kZS5jPTQ1OT1zdGF0aWMgY29uc3Qgc3RydWN0IGlvbWFwX3dyaXRlYmFja19vcHMgbWluaXhfd3JpdGViYWNrX29wcyA9IHtcXG4tLVxcbmZzL21pbml4L2lub2RlLmMtNDYzLVxcbmZzL21pbml4L2lub2RlLmM6NDY0OmludCBtaW5peF9nZXRfYmxvY2soc3RydWN0IGlub2RlICppbm9kZSwgc2VjdG9yX3QgYmxvY2ssXFxuZnMvbWluaXgvaW5vZGUuYy00NjUtXFx0XFx0ICAgIHN0cnVjdCBidWZmZXJfaGVhZCAqYmhfcmVzdWx0LCBpbnQgY3JlYXRlKVxcbi0tXFxuZnMvbWluaXgvaW5vZGUuYy00NzMtLyogVGhlIG9sZCBtaW5peF93cml0ZXBhZ2VzLCBwcmVzZXJ2ZWQgZm9yIGRpcmVjdG9yeSBvcGVyYXRpb25zLiAqL1xcbmZzL21pbml4L2lub2RlLmM6NDc0OnN0YXRpYyBpbnQgbWluaXhfYmxvY2tfd3JpdGVwYWdlcyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcXG5mcy9taW5peC9pbm9kZS5jLTQ3NS1cXHRcXHRzdHJ1Y3Qgd3JpdGViYWNrX2NvbnRyb2wgKndiYylcXG4tLVxcbmZzL21pbml4L2lub2RlLmMtNDc5LVxcbmZzL21pbml4L2lub2RlLmM6NDgwOnN0YXRpYyBpbnQgbWluaXhfd3JpdGVwYWdlcyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcXG5mcy9taW5peC9pbm9kZS5jLTQ4MS1cXHRcXHRzdHJ1Y3Qgd3JpdGViYWNrX2NvbnRyb2wgKndiYylcXG4tLVxcbmZzL21pbml4L2lub2RlLmMtNDkwLVxcbmZzL21pbml4L2lub2RlLmM6NDkxOnN0YXRpYyBpbnQgbWluaXhfcmVhZF9mb2xpbyhzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IGZvbGlvICpmb2xpbylcXG5mcy9taW5peC9pbm9kZS5jLTQ5Mi17XFxuLS1cXG5mcy9taW5peC9pbm9kZS5jLTQ5OS0vKiBUaGUgb2xkIG1pbml4X3JlYWRfZm9saW8sIHByZXNlcnZlZCBmb3IgZGlyZWN0b3J5IG9wZXJhdGlvbnMuICovXFxuZnMvbWluaXgvaW5vZGUuYzo1MDA6c3RhdGljIGludCBtaW5peF9ibG9ja19yZWFkX2ZvbGlvKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbmZzL21pbml4L2lub2RlLmMtNTAxLXtcXG4tLVxcbmZzL21pbml4L2lub2RlLmMtNTA0LVxcbmZzL21pbml4L2lub2RlLmM6NTA1OnN0YXRpYyB2b2lkIG1pbml4X3JlYWRhaGVhZChzdHJ1Y3QgcmVhZGFoZWFkX2NvbnRyb2wgKnJhYylcXG5mcy9taW5peC9pbm9kZS5jLTUwNi17XFxuLS1cXG5mcy9taW5peC9pbm9kZS5jLTUxMS1cXG5mcy9taW5peC9pbm9kZS5jOjUxMjppbnQgbWluaXhfcHJlcGFyZV9jaHVuayhzdHJ1Y3QgZm9saW8gKmZvbGlvLCBsb2ZmX3QgcG9zLCB1bnNpZ25lZCBsZW4pXFxuZnMvbWluaXgvaW5vZGUuYy01MTMte1xcbi0tXFxuZnMvbWluaXgvaW5vZGUuYy01MTYtXFxuZnMvbWluaXgvaW5vZGUuYzo1MTc6c3RhdGljIHZvaWQgbWluaXhfd3JpdGVfZmFpbGVkKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBsb2ZmX3QgdG8pXFxuZnMvbWluaXgvaW5vZGUuYy01MTgte1xcbi0tXFxuZnMvbWluaXgvaW5vZGUuYy01MjYtXFxuZnMvbWluaXgvaW5vZGUuYzo1Mjc6c3RhdGljIGludCBtaW5peF93cml0ZV9iZWdpbihjb25zdCBzdHJ1Y3Qga2lvY2IgKmlvY2IsXFxuZnMvbWluaXgvaW5vZGUuYy01MjgtXFx0XFx0XFx0ICAgICBzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcXG4tLVxcbmZzL21pbml4L2lub2RlLmMtNTQwLVxcbmZzL21pbml4L2lub2RlLmM6NTQxOnN0YXRpYyBzZWN0b3JfdCBtaW5peF9ibWFwKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBzZWN0b3JfdCBibG9jaylcXG5mcy9taW5peC9pbm9kZS5jLTU0Mi17XFxuLS1cXG5mcy9taW5peC9pbm9kZS5jPTU3NT1zdGF0aWMgY29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgbWluaXhfc3ltbGlua19pbm9kZV9vcGVyYXRpb25zID0ge1xcbi0tXFxuZnMvbWluaXgvaW5vZGUuYy01ODAtXFxuZnMvbWluaXgvaW5vZGUuYzo1ODE6dm9pZCBtaW5peF9zZXRfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSwgZGV2X3QgcmRldilcXG5mcy9taW5peC9pbm9kZS5jLTU4Mi17XFxuLS1cXG5mcy9taW5peC9pbm9kZS5jPTczMT1zdGF0aWMgc3RydWN0IGJ1ZmZlcl9oZWFkICogVjJfbWluaXhfdXBkYXRlX2lub2RlKHN0cnVjdCBpbm9kZSAqIGlub2RlKVxcbi0tXFxuZnMvbWluaXgvaW5vZGUuYy03NTYtXFxuZnMvbWluaXgvaW5vZGUuYzo3NTc6c3RhdGljIGludCBtaW5peF93cml0ZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3Qgd3JpdGViYWNrX2NvbnRyb2wgKndiYylcXG5mcy9taW5peC9pbm9kZS5jLTc1OC17XFxuLS1cXG5mcy9taW5peC9pbm9kZS5jLTc3OS1cXG5mcy9taW5peC9pbm9kZS5jOjc4MDppbnQgbWluaXhfZ2V0YXR0cihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgY29uc3Qgc3RydWN0IHBhdGggKnBhdGgsXFxuZnMvbWluaXgvaW5vZGUuYy03ODEtXFx0XFx0ICBzdHJ1Y3Qga3N0YXQgKnN0YXQsIHUzMiByZXF1ZXN0X21hc2ssIHVuc2lnbmVkIGludCBmbGFncylcXG4tLVxcbmZzL21pbml4L2lub2RlLmMtNzk3LSAqL1xcbmZzL21pbml4L2lub2RlLmM6Nzk4OnZvaWQgbWluaXhfdHJ1bmNhdGUoc3RydWN0IGlub2RlICogaW5vZGUpXFxuZnMvbWluaXgvaW5vZGUuYy03OTkte1xcbi0tXFxuZnMvbWluaXgvaW9tYXAuYy0xNC0gKi9cXG5mcy9taW5peC9pb21hcC5jOjE1OnN0YXRpYyBpbnQgbWluaXhfaW9tYXBfYmVnaW4oc3RydWN0IGlub2RlICppbm9kZSwgbG9mZl90IG9mZnNldCwgbG9mZl90IGxlbmd0aCxcXG5mcy9taW5peC9pb21hcC5jLTE2LVxcdHVuc2lnbmVkIGludCBmbGFncywgc3RydWN0IGlvbWFwICppb21hcCwgc3RydWN0IGlvbWFwICpzcmNtYXApXFxuLS1cXG5mcy9taW5peC9pb21hcC5jLTEwOS0gKi9cXG5mcy9taW5peC9pb21hcC5jOjExMDpzdGF0aWMgaW50IG1pbml4X2lvbWFwX2VuZChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb2ZmX3Qgb2Zmc2V0LCBsb2ZmX3QgbGVuZ3RoLFxcbmZzL21pbml4L2lvbWFwLmMtMTExLVxcdHNzaXplX3Qgd3JpdHRlbiwgdW5zaWduZWQgaW50IGZsYWdzLCBzdHJ1Y3QgaW9tYXAgKmlvbWFwKVxcbi0tXFxuZnMvbWluaXgvbWluaXguaD01Mz1zdHJ1Y3QgaW5vZGUgKm1pbml4X25ld19pbm9kZShjb25zdCBzdHJ1Y3QgaW5vZGUgKiwgdW1vZGVfdCk7XFxuZnMvbWluaXgvbWluaXguaDo1NDp2b2lkIG1pbml4X2ZyZWVfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSk7XFxuZnMvbWluaXgvbWluaXguaC01NS11bnNpZ25lZCBsb25nIG1pbml4X2NvdW50X2ZyZWVfaW5vZGVzKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpO1xcbmZzL21pbml4L21pbml4Lmg6NTY6aW50IG1pbml4X25ld19ibG9jayhzdHJ1Y3QgaW5vZGUgKmlub2RlKTtcXG5mcy9taW5peC9taW5peC5oOjU3OnZvaWQgbWluaXhfZnJlZV9ibG9jayhzdHJ1Y3QgaW5vZGUgKmlub2RlLCB1bnNpZ25lZCBsb25nIGJsb2NrKTtcXG5mcy9taW5peC9taW5peC5oLTU4LXVuc2lnbmVkIGxvbmcgbWluaXhfY291bnRfZnJlZV9ibG9ja3Moc3RydWN0IHN1cGVyX2Jsb2NrICpzYik7XFxuZnMvbWluaXgvbWluaXguaDo1OTppbnQgbWluaXhfZ2V0YXR0cihzdHJ1Y3QgbW50X2lkbWFwICosIGNvbnN0IHN0cnVjdCBwYXRoICosXFxuZnMvbWluaXgvbWluaXguaC02MC1cXHRcXHRzdHJ1Y3Qga3N0YXQgKiwgdTMyLCB1bnNpZ25lZCk7XFxuZnMvbWluaXgvbWluaXguaDo2MTppbnQgbWluaXhfc2V0YXR0cihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxcbmZzL21pbml4L21pbml4LmgtNjItXFx0c3RydWN0IGlhdHRyICphdHRyKTtcXG5mcy9taW5peC9taW5peC5oOjYzOmludCBtaW5peF9wcmVwYXJlX2NodW5rKHN0cnVjdCBmb2xpbyAqZm9saW8sIGxvZmZfdCBwb3MsIHVuc2lnbmVkIGxlbik7XFxuZnMvbWluaXgvbWluaXguaC02NC1zdHJ1Y3QgbWFwcGluZ19tZXRhZGF0YV9iaHMgKm1pbml4X2dldF9tZXRhZGF0YV9iaHMoc3RydWN0IGlub2RlICppbm9kZSk7XFxuZnMvbWluaXgvbWluaXguaDo2NTppbnQgbWluaXhfZnN5bmMoc3RydWN0IGZpbGUgKmZpbGUsIGxvZmZfdCBzdGFydCwgbG9mZl90IGVuZCwgaW50IGRhdGFzeW5jKTtcXG5mcy9taW5peC9taW5peC5oLTY2LVxcbi0tXFxuZnMvbWluaXgvbWluaXguaD03OD1zdHJ1Y3QgbWluaXhfZGlyX2VudHJ5ICptaW5peF9maW5kX2VudHJ5KHN0cnVjdCBkZW50cnkgKiwgc3RydWN0IGZvbGlvICoqKTtcXG5mcy9taW5peC9taW5peC5oOjc5OmludCBtaW5peF9hZGRfbGluayhzdHJ1Y3QgZGVudHJ5Kiwgc3RydWN0IGlub2RlKik7XFxuZnMvbWluaXgvbWluaXguaDo4MDppbnQgbWluaXhfZGVsZXRlX2VudHJ5KHN0cnVjdCBtaW5peF9kaXJfZW50cnkgKiwgc3RydWN0IGZvbGlvICopO1xcbmZzL21pbml4L21pbml4Lmg6ODE6aW50IG1pbml4X21ha2VfZW1wdHkoc3RydWN0IGlub2RlKiwgc3RydWN0IGlub2RlKik7XFxuZnMvbWluaXgvbWluaXguaDo4MjppbnQgbWluaXhfZW1wdHlfZGlyKHN0cnVjdCBpbm9kZSopO1xcbmZzL21pbml4L21pbml4Lmg6ODM6aW50IG1pbml4X3NldF9saW5rKHN0cnVjdCBtaW5peF9kaXJfZW50cnkgKmRlLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbmZzL21pbml4L21pbml4LmgtODQtXFx0XFx0c3RydWN0IGlub2RlICppbm9kZSk7XFxuLS1cXG5mcy9taW5peC9taW5peC5oPTg4PXN0cnVjdCBtaW5peF9kaXJfZW50cnkgKm1pbml4X2RvdGRvdChzdHJ1Y3QgaW5vZGUqLCBzdHJ1Y3QgZm9saW8gKiopO1xcbmZzL21pbml4L21pbml4Lmg6ODk6aW5vX3QgbWluaXhfaW5vZGVfYnlfbmFtZShzdHJ1Y3QgZGVudHJ5Kik7XFxuZnMvbWluaXgvbWluaXguaC05MC1cXG4tLVxcbmZzL21pbml4L25hbWVpLmM9MjQ9c3RhdGljIHN0cnVjdCBkZW50cnkgKm1pbml4X2xvb2t1cChzdHJ1Y3QgaW5vZGUgKiBkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW5zaWduZWQgaW50IGZsYWdzKVxcbi0tXFxuZnMvbWluaXgvbmFtZWkuYy0zNy1cXG5mcy9taW5peC9uYW1laS5jOjM4OnN0YXRpYyBpbnQgbWluaXhfbWtub2Qoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxcbmZzL21pbml4L25hbWVpLmMtMzktXFx0XFx0ICAgICAgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlLCBkZXZfdCByZGV2KVxcbi0tXFxuZnMvbWluaXgvbmFtZWkuYy01NC1cXG5mcy9taW5peC9uYW1laS5jOjU1OnN0YXRpYyBpbnQgbWluaXhfdG1wZmlsZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXFxuZnMvbWluaXgvbmFtZWkuYy01Ni1cXHRcXHRcXHQgc3RydWN0IGZpbGUgKmZpbGUsIHVtb2RlX3QgbW9kZSlcXG4tLVxcbmZzL21pbml4L25hbWVpLmMtNjctXFxuZnMvbWluaXgvbmFtZWkuYzo2ODpzdGF0aWMgaW50IG1pbml4X2NyZWF0ZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXFxuZnMvbWluaXgvbmFtZWkuYy02OS1cXHRcXHRcXHRzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSwgYm9vbCBleGNsKVxcbi0tXFxuZnMvbWluaXgvbmFtZWkuYz0xMDk9c3RhdGljIGludCBfX3BhZ2Vfc3ltbGluayhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBjb25zdCBjaGFyICpzeW1uYW1lLCBpbnQgbGVuKVxcbi0tXFxuZnMvbWluaXgvbmFtZWkuYy0xNjgtXFxuZnMvbWluaXgvbmFtZWkuYzoxNjk6c3RhdGljIGludCBtaW5peF9zeW1saW5rKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcXG5mcy9taW5peC9uYW1laS5jLTE3MC1cXHRcXHRcXHQgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBjb25zdCBjaGFyICpzeW1uYW1lKVxcbi0tXFxuZnMvbWluaXgvbmFtZWkuYy0xOTItXFxuZnMvbWluaXgvbmFtZWkuYzoxOTM6c3RhdGljIGludCBtaW5peF9saW5rKHN0cnVjdCBkZW50cnkgKiBvbGRfZGVudHJ5LCBzdHJ1Y3QgaW5vZGUgKiBkaXIsXFxuZnMvbWluaXgvbmFtZWkuYy0xOTQtXFx0c3RydWN0IGRlbnRyeSAqZGVudHJ5KVxcbi0tXFxuZnMvbWluaXgvbmFtZWkuYz0yMDQ9c3RhdGljIHN0cnVjdCBkZW50cnkgKm1pbml4X21rZGlyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcXG4tLVxcbmZzL21pbml4L25hbWVpLmMtMjM3LVxcbmZzL21pbml4L25hbWVpLmM6MjM4OnN0YXRpYyBpbnQgbWluaXhfdW5saW5rKHN0cnVjdCBpbm9kZSAqIGRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5KVxcbmZzL21pbml4L25hbWVpLmMtMjM5LXtcXG4tLVxcbmZzL21pbml4L25hbWVpLmMtMjYyLVxcbmZzL21pbml4L25hbWVpLmM6MjYzOnN0YXRpYyBpbnQgbWluaXhfcm1kaXIoc3RydWN0IGlub2RlICogZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpXFxuZnMvbWluaXgvbmFtZWkuYy0yNjQte1xcbi0tXFxuZnMvbWluaXgvbmFtZWkuYy0yODYtXFxuZnMvbWluaXgvbmFtZWkuYzoyODc6c3RhdGljIGludCBtaW5peF9yZW5hbWUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXFxuZnMvbWluaXgvbmFtZWkuYy0yODgtXFx0XFx0XFx0c3RydWN0IGlub2RlICpvbGRfZGlyLCBzdHJ1Y3QgZGVudHJ5ICpvbGRfZGVudHJ5LFxcbi0tXFxuZnMvbWluaXgvbmFtZWkuYy0zNzMtLyogc3RyYWlnaHQgdXAgdGhpZXZlcnkgaGVyZTsgc3RvbGVuIHZlcmJhdGltIGZyb20gZXh0NF9nZXRfbGluayAqL1xcbmZzL21pbml4L25hbWVpLmM6Mzc0OnN0YXRpYyB2b2lkIG1pbml4X2ZyZWVfbGluayh2b2lkICpiaClcXG5mcy9taW5peC9uYW1laS5jLTM3NS17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI4VDA1OjMzOjEzLjk5MTI2NTg4NVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEyMjM3NTE2NDM2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlJlZmluaW5nIHRoZSBNSU5JWCBGaWxlc3lzdGVtIFN5bWJvbCBMaXN0KipcblxuT2theSwgbGV0J3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSd2ZSBnb3QgdGhlIHJlbGV2YW50IHN5bWJvbHMgbmFpbGVkIGRvd24gZm9yIHRoaXMgTUlOSVggZmlsZXN5c3RlbSBwYXRjaC4gTXkgaW5pdGlhbCBsaXN0IGluY2x1ZGVzOiBgbWluaXhfZGlvX3JlYWRfaXRlcmAsIGBtaW5peF9kaW9fd3JpdGVfaXRlcmAsIGBtaW5peF9kaW9fd3JpdGVfZW5kX2lvYCwgYG1pbml4X2ZpbGVfcmVhZF9pdGVyYCwgYG1pbml4X2ZpbGVfd3JpdGVfaXRlcmAsIGBtaW5peF9pb21hcF9iZWdpbmAsIGBtaW5peF9pb21hcF9lbmRgLCBgbWluaXhfd3JpdGViYWNrX3JhbmdlYCwgYG1pbml4X3dyaXRlcGFnZXNgLCBgbWluaXhfcmVhZF9mb2xpb2AsIGBtaW5peF9yZWFkYWhlYWRgLCBgbWluaXhfYm1hcGAsIGBfX3BhZ2Vfc3ltbGlua2AsIGBtaW5peF9nZXRfbGlua2AsIGFuZCBgbWluaXhfZnJlZV9saW5rYC5cblxuRmlyc3QsIEkgbmVlZCB0byB2ZXJpZnkgd2hldGhlciBgbWluaXhfaW9tYXBfYmVnaW5gIGFuZCBgbWluaXhfaW9tYXBfZW5kYCBhcmUgZXhwb3J0ZWQgb3Igc3RhdGljLiBUdXJucyBvdXQgdGhleSBhcmUgc3RhdGljIHdpdGhpbiBgZnMvbWluaXgvaW9tYXAuY2AsIHdoaWNoIGlzIGluY2x1ZGVkIGluIGBpdHJlZV92MS5jYCBhbmQgYGl0cmVlX3YyLmNgLiAgQWhhISBUaGF0IG1lYW5zIGBWMV9taW5peF9pb21hcF9iZWdpbmAgYW5kIGBWMl9taW5peF9pb21hcF9iZWdpbmAgYXJlIHRoZSBleHBvcnRlZCB2ZXJzaW9uczsgSSBuZWVkIHRvIGFkZCB0aGVtIHRvIHRoZSBsaXN0LCB3aGljaCB3aWxsIGdpdmU6IGBWMV9taW5peF9pb21hcF9iZWdpbmAgYW5kIGBWMl9taW5peF9pb21hcF9iZWdpbmAuXG5cbk5leHQsIEknbGwgZ28gdGhyb3VnaCB0aGUgb3RoZXJzIHRvIGNvbmZpcm06XG4qICAgYG1pbml4X3dyaXRlYmFja19yYW5nZWAgYW5kIGBtaW5peF93cml0ZXBhZ2VzYCBhcmUgc3RhdGljIGluIGBmcy9taW5peC9pbm9kZS5jYC5cbiogICBgbWluaXhfcmVhZF9mb2xpb2AgYW5kIGBtaW5peF9yZWFkYWhlYWRgIGFyZSBzdGF0aWMgaW4gYGZzL21pbml4L2lub2RlLmNgLlxuKiAgIGBtaW5peF9ibWFwYCBpcyBzdGF0aWMgaW4gYGZzL21pbml4L2lub2RlLmNgLlxuKiAgIGBfX3BhZ2Vfc3ltbGlua2AgaXMgc3RhdGljIGluIGBmcy9taW5peC9uYW1laS5jYC5cbiogICBgbWluaXhfZ2V0X2xpbmtgIGlzIGV4cG9ydGVkIGluIGBmcy9taW5peC9uYW1laS5jYC5cbiogICBgbWluaXhfZnJlZV9saW5rYCBpcyBzdGF0aWMgaW4gYGZzL21pbml4L25hbWVpLmNgLlxuKiAgIGBtaW5peF9kaW9fcmVhZF9pdGVyYCwgYG1pbml4X2Rpb193cml0ZV9pdGVyYCwgYG1pbml4X2Rpb193cml0ZV9lbmRfaW9gLCBgbWluaXhfZmlsZV9yZWFkX2l0ZXJgLCBhbmQgYG1pbml4X2ZpbGVfd3JpdGVfaXRlcmAgYXJlIGFsbCBzdGF0aWMgaW4gYGZzL21pbml4L2ZpbGUuY2AuXG5cbldpdGggYWxsIHRoaXMgaW5mb3JtYXRpb24sIEkgY2FuIG5vdyByZWZpbmUgbXkgbGlzdDpcblxuKiAgIGBtaW5peF9kaW9fcmVhZF9pdGVyYFxuKiAgIGBtaW5peF9kaW9fd3JpdGVfaXRlcmBcbiogICBgbWluaXhfZGlvX3dyaXRlX2VuZF9pb2BcbiogICBgbWluaXhfZmlsZV9yZWFkX2l0ZXJgXG4qICAgYG1pbml4X2ZpbGVfd3JpdGVfaXRlcmBcbiogICBgbWluaXhfaW9tYXBfYmVnaW5gXG4qICAgYG1pbml4X2lvbWFwX2VuZGBcbiogICBgVjFfbWluaXhfaW9tYXBfYmVnaW5gXG4qICAgYFYyX21pbml4X2lvbWFwX2JlZ2luYFxuKiAgIGBtaW5peF93cml0ZWJhY2tfcmFuZ2VgXG4qICAgYG1pbml4X3dyaXRlcGFnZXNgXG4qICAgYG1pbml4X3JlYWRfZm9saW9gXG4qICAgYG1pbml4X3JlYWRhaGVhZGBcbiogICBgbWluaXhfYm1hcGBcbiogICBgX19wYWdlX3N5bWxpbmtgXG4qICAgYG1pbml4X2dldF9saW5rYFxuKiAgIGBtaW5peF9mcmVlX2xpbmtgXG5cblRoZSBjb25maWd1cmF0aW9uIGlzIGNsZWFybHkgYE1JTklYX0ZTYCwgd2hpY2ggaXMgdGhlIGNvcnJlY3Qgc3ltYm9sLlxuXG5UaGUgcmF0aW9uYWxlIGlzIHRoaXMgcGF0Y2ggaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0byB0aGUgTUlOSVggZmlsZXN5c3RlbSwgYWRkaW5nIGlvbWFwLWJhc2VkIGRpcmVjdCBJL08gYW5kIGJ1ZmZlcmVkIEkvTy4gVGhpcyBtZWFucyBjaGFuZ2VzIHRvIHRoZSBjb3JlIHJlYWQvd3JpdGUgcGF0aHMsIGJsb2NrIG1hcHBpbmcsIGFuZCBzeW1saW5rIGhhbmRsaW5nLCBzbyB0aGUgaWRlbnRpZmllZCBzeW1ib2xzIGFyZSBjZW50cmFsIHRvIHRoaXMuIEkndmUgbm93IGdvdCBhIGdvb2Qgc2V0IG9mIHN5bWJvbHMgdG8gY2hlY2suICBUaW1lIHRvIGNhbGwgc2V0LXJlc3VsdHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4NTE5LCJPdXRwdXRUb2tlbnMiOjI2MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExMzIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjhUMDU6MzM6MjYuMjI4Nzg2NTQxWiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4ODA2MjE1MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTUlOSVhfRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJtaW5peF9kaW9fcmVhZF9pdGVyXCIsXG4gICAgXCJtaW5peF9kaW9fd3JpdGVfaXRlclwiLFxuICAgIFwibWluaXhfZGlvX3dyaXRlX2VuZF9pb1wiLFxuICAgIFwibWluaXhfZmlsZV9yZWFkX2l0ZXJcIixcbiAgICBcIm1pbml4X2ZpbGVfd3JpdGVfaXRlclwiLFxuICAgIFwibWluaXhfaW9tYXBfYmVnaW5cIixcbiAgICBcIm1pbml4X2lvbWFwX2VuZFwiLFxuICAgIFwiVjFfbWluaXhfaW9tYXBfYmVnaW5cIixcbiAgICBcIlYyX21pbml4X2lvbWFwX2JlZ2luXCIsXG4gICAgXCJtaW5peF93cml0ZWJhY2tfcmFuZ2VcIixcbiAgICBcIm1pbml4X3dyaXRlcGFnZXNcIixcbiAgICBcIm1pbml4X3JlYWRfZm9saW9cIixcbiAgICBcIm1pbml4X3JlYWRhaGVhZFwiLFxuICAgIFwibWluaXhfYm1hcFwiLFxuICAgIFwiX19wYWdlX3N5bWxpbmtcIixcbiAgICBcIm1pbml4X2dldF9saW5rXCIsXG4gICAgXCJtaW5peF9mcmVlX2xpbmtcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbXBsZW1lbnRzIGlvbWFwLWJhc2VkIGRpcmVjdCBJL08gYW5kIGJ1ZmZlcmVkIEkvTyBmb3IgdGhlIG1pbml4IGZpbGVzeXN0ZW0sIHdoaWNoIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gdGhlIGNvcmUgZmlsZXN5c3RlbSBsb2dpYy4gSXQgbW9kaWZpZXMgcmVhZC93cml0ZSBwYXRocywgYmxvY2sgbWFwcGluZywgYW5kIHN5bWxpbmsgaGFuZGxpbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTUlOSVhfRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJtaW5peF9kaW9fcmVhZF9pdGVyXCIsXG4gICAgXCJtaW5peF9kaW9fd3JpdGVfaXRlclwiLFxuICAgIFwibWluaXhfZGlvX3dyaXRlX2VuZF9pb1wiLFxuICAgIFwibWluaXhfZmlsZV9yZWFkX2l0ZXJcIixcbiAgICBcIm1pbml4X2ZpbGVfd3JpdGVfaXRlclwiLFxuICAgIFwibWluaXhfaW9tYXBfYmVnaW5cIixcbiAgICBcIm1pbml4X2lvbWFwX2VuZFwiLFxuICAgIFwiVjFfbWluaXhfaW9tYXBfYmVnaW5cIixcbiAgICBcIlYyX21pbml4X2lvbWFwX2JlZ2luXCIsXG4gICAgXCJtaW5peF93cml0ZWJhY2tfcmFuZ2VcIixcbiAgICBcIm1pbml4X3dyaXRlcGFnZXNcIixcbiAgICBcIm1pbml4X3JlYWRfZm9saW9cIixcbiAgICBcIm1pbml4X3JlYWRhaGVhZFwiLFxuICAgIFwibWluaXhfYm1hcFwiLFxuICAgIFwiX19wYWdlX3N5bWxpbmtcIixcbiAgICBcIm1pbml4X2dldF9saW5rXCIsXG4gICAgXCJtaW5peF9mcmVlX2xpbmtcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbXBsZW1lbnRzIGlvbWFwLWJhc2VkIGRpcmVjdCBJL08gYW5kIGJ1ZmZlcmVkIEkvTyBmb3IgdGhlIG1pbml4IGZpbGVzeXN0ZW0sIHdoaWNoIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gdGhlIGNvcmUgZmlsZXN5c3RlbSBsb2dpYy4gSXQgbW9kaWZpZXMgcmVhZC93cml0ZSBwYXRocywgYmxvY2sgbWFwcGluZywgYW5kIHN5bWxpbmsgaGFuZGxpbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workfloww57cg[1] Phase: Succeeded StartedAt: 2026-06-28 05:33:38 +0000 UTC FinishedAt: 2026-06-28 05:33:38 +0000 UTC Input: nil Output: nil --------- Name: series-workfloww57cg[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-06-28 05:33:38 +0000 UTC FinishedAt: 2026-06-28 05:33:38 +0000 UTC Input: nil Output: nil --------- Name: series-workfloww57cg[2] Phase: Succeeded StartedAt: 2026-06-28 05:33:38 +0000 UTC FinishedAt: 2026-06-28 09:26:03 +0000 UTC Input: nil Output: nil --------- Name: series-workfloww57cg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"780d569e6c4b422290f5cba319eb904b355d64be","config_name":"upstream-apparmor-kasan.config","enable_configs":["MINIX_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["minix_dio_read_iter","minix_dio_write_iter","minix_dio_write_end_io","minix_file_read_iter","minix_file_write_iter","minix_iomap_begin","minix_iomap_end","V1_minix_iomap_begin","V2_minix_iomap_begin","minix_writeback_range","minix_writepages","minix_read_folio","minix_readahead","minix_bmap","__page_symlink","minix_get_link","minix_free_link"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"780d569e6c4b422290f5cba319eb904b355d64be","config_name":"upstream-apparmor-kasan.config","enable_configs":["MINIX_FS"],"series_id":"3b663c96-cf07-46e0-9b8d-785fe615029d","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-06-28 05:33:38 +0000 UTC FinishedAt: 2026-06-28 09:26:03 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"780d569e6c4b422290f5cba319eb904b355d64be","config_name":"upstream-apparmor-kasan.config","enable_configs":["MINIX_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["minix_dio_read_iter","minix_dio_write_iter","minix_dio_write_end_io","minix_file_read_iter","minix_file_write_iter","minix_iomap_begin","minix_iomap_end","V1_minix_iomap_begin","V2_minix_iomap_begin","minix_writeback_range","minix_writepages","minix_read_folio","minix_readahead","minix_bmap","__page_symlink","minix_get_link","minix_free_link"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"780d569e6c4b422290f5cba319eb904b355d64be","config_name":"upstream-apparmor-kasan.config","enable_configs":["MINIX_FS"],"series_id":"3b663c96-cf07-46e0-9b8d-785fe615029d","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workfloww57cg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"780d569e6c4b422290f5cba319eb904b355d64be","config_name":"upstream-apparmor-kasan.config","enable_configs":["MINIX_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["minix_dio_read_iter","minix_dio_write_iter","minix_dio_write_end_io","minix_file_read_iter","minix_file_write_iter","minix_iomap_begin","minix_iomap_end","V1_minix_iomap_begin","V2_minix_iomap_begin","minix_writeback_range","minix_writepages","minix_read_folio","minix_readahead","minix_bmap","__page_symlink","minix_get_link","minix_free_link"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"780d569e6c4b422290f5cba319eb904b355d64be","config_name":"upstream-apparmor-kasan.config","enable_configs":["MINIX_FS"],"series_id":"3b663c96-cf07-46e0-9b8d-785fe615029d","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-06-28 05:33:38 +0000 UTC FinishedAt: 2026-06-28 05:33:48 +0000 UTC Input: nil Output: nil --------- Name: series-workfloww57cg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"780d569e6c4b422290f5cba319eb904b355d64be","config_name":"upstream-apparmor-kasan.config","enable_configs":["MINIX_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["minix_dio_read_iter","minix_dio_write_iter","minix_dio_write_end_io","minix_file_read_iter","minix_file_write_iter","minix_iomap_begin","minix_iomap_end","V1_minix_iomap_begin","V2_minix_iomap_begin","minix_writeback_range","minix_writepages","minix_read_folio","minix_readahead","minix_bmap","__page_symlink","minix_get_link","minix_free_link"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"780d569e6c4b422290f5cba319eb904b355d64be","config_name":"upstream-apparmor-kasan.config","enable_configs":["MINIX_FS"],"series_id":"3b663c96-cf07-46e0-9b8d-785fe615029d","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-06-28 05:33:38 +0000 UTC FinishedAt: 2026-06-28 05:33:45 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"780d569e6c4b422290f5cba319eb904b355d64be","config_name":"upstream-apparmor-kasan.config","enable_configs":["MINIX_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},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-workfloww57cg/series-workfloww57cg-convert-artifact-1402896812/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workfloww57cg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"780d569e6c4b422290f5cba319eb904b355d64be","config_name":"upstream-apparmor-kasan.config","enable_configs":["MINIX_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["minix_dio_read_iter","minix_dio_write_iter","minix_dio_write_end_io","minix_file_read_iter","minix_file_write_iter","minix_iomap_begin","minix_iomap_end","V1_minix_iomap_begin","V2_minix_iomap_begin","minix_writeback_range","minix_writepages","minix_read_folio","minix_readahead","minix_bmap","__page_symlink","minix_get_link","minix_free_link"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"780d569e6c4b422290f5cba319eb904b355d64be","config_name":"upstream-apparmor-kasan.config","enable_configs":["MINIX_FS"],"series_id":"3b663c96-cf07-46e0-9b8d-785fe615029d","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-06-28 05:33:48 +0000 UTC FinishedAt: 2026-06-28 05:55:52 +0000 UTC Input: nil Output: nil --------- Name: series-workfloww57cg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"780d569e6c4b422290f5cba319eb904b355d64be","config_name":"upstream-apparmor-kasan.config","enable_configs":["MINIX_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["minix_dio_read_iter","minix_dio_write_iter","minix_dio_write_end_io","minix_file_read_iter","minix_file_write_iter","minix_iomap_begin","minix_iomap_end","V1_minix_iomap_begin","V2_minix_iomap_begin","minix_writeback_range","minix_writepages","minix_read_folio","minix_readahead","minix_bmap","__page_symlink","minix_get_link","minix_free_link"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"780d569e6c4b422290f5cba319eb904b355d64be","config_name":"upstream-apparmor-kasan.config","enable_configs":["MINIX_FS"],"series_id":"3b663c96-cf07-46e0-9b8d-785fe615029d","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-06-28 05:33:48 +0000 UTC FinishedAt: 2026-06-28 05:55:52 +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:*d8a74f25-e4cd-4af5-8025-ea5d893d7d31,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-workfloww57cg/series-workfloww57cg-convert-artifact-1402896812/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": "0ee4d402-afb4-45bb-b3ed-a466ffbc8f6c", "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-workfloww57cg/series-workfloww57cg-build-action-492931034/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workfloww57cg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"780d569e6c4b422290f5cba319eb904b355d64be","config_name":"upstream-apparmor-kasan.config","enable_configs":["MINIX_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["minix_dio_read_iter","minix_dio_write_iter","minix_dio_write_end_io","minix_file_read_iter","minix_file_write_iter","minix_iomap_begin","minix_iomap_end","V1_minix_iomap_begin","V2_minix_iomap_begin","minix_writeback_range","minix_writepages","minix_read_folio","minix_readahead","minix_bmap","__page_symlink","minix_get_link","minix_free_link"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"780d569e6c4b422290f5cba319eb904b355d64be","config_name":"upstream-apparmor-kasan.config","enable_configs":["MINIX_FS"],"series_id":"3b663c96-cf07-46e0-9b8d-785fe615029d","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-06-28 05:33:48 +0000 UTC FinishedAt: 2026-06-28 05:55:42 +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:*d8a74f25-e4cd-4af5-8025-ea5d893d7d31,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-workfloww57cg/series-workfloww57cg-convert-artifact-1402896812/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": "0ee4d402-afb4-45bb-b3ed-a466ffbc8f6c", "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-workfloww57cg/series-workfloww57cg-build-action-492931034/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workfloww57cg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"780d569e6c4b422290f5cba319eb904b355d64be","config_name":"upstream-apparmor-kasan.config","enable_configs":["MINIX_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["minix_dio_read_iter","minix_dio_write_iter","minix_dio_write_end_io","minix_file_read_iter","minix_file_write_iter","minix_iomap_begin","minix_iomap_end","V1_minix_iomap_begin","V2_minix_iomap_begin","minix_writeback_range","minix_writepages","minix_read_folio","minix_readahead","minix_bmap","__page_symlink","minix_get_link","minix_free_link"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"780d569e6c4b422290f5cba319eb904b355d64be","config_name":"upstream-apparmor-kasan.config","enable_configs":["MINIX_FS"],"series_id":"3b663c96-cf07-46e0-9b8d-785fe615029d","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-06-28 05:55:52 +0000 UTC FinishedAt: 2026-06-28 05:55:52 +0000 UTC Input: nil Output: nil --------- Name: series-workfloww57cg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"780d569e6c4b422290f5cba319eb904b355d64be","config_name":"upstream-apparmor-kasan.config","enable_configs":["MINIX_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["minix_dio_read_iter","minix_dio_write_iter","minix_dio_write_end_io","minix_file_read_iter","minix_file_write_iter","minix_iomap_begin","minix_iomap_end","V1_minix_iomap_begin","V2_minix_iomap_begin","minix_writeback_range","minix_writepages","minix_read_folio","minix_readahead","minix_bmap","__page_symlink","minix_get_link","minix_free_link"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"780d569e6c4b422290f5cba319eb904b355d64be","config_name":"upstream-apparmor-kasan.config","enable_configs":["MINIX_FS"],"series_id":"3b663c96-cf07-46e0-9b8d-785fe615029d","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-06-28 05:55:52 +0000 UTC FinishedAt: 2026-06-28 05:55:52 +0000 UTC Input: nil Output: nil --------- Name: series-workfloww57cg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"780d569e6c4b422290f5cba319eb904b355d64be","config_name":"upstream-apparmor-kasan.config","enable_configs":["MINIX_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["minix_dio_read_iter","minix_dio_write_iter","minix_dio_write_end_io","minix_file_read_iter","minix_file_write_iter","minix_iomap_begin","minix_iomap_end","V1_minix_iomap_begin","V2_minix_iomap_begin","minix_writeback_range","minix_writepages","minix_read_folio","minix_readahead","minix_bmap","__page_symlink","minix_get_link","minix_free_link"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"780d569e6c4b422290f5cba319eb904b355d64be","config_name":"upstream-apparmor-kasan.config","enable_configs":["MINIX_FS"],"series_id":"3b663c96-cf07-46e0-9b8d-785fe615029d","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-06-28 05:55:52 +0000 UTC FinishedAt: 2026-06-28 05:56:02 +0000 UTC Input: nil Output: nil --------- Name: series-workfloww57cg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"780d569e6c4b422290f5cba319eb904b355d64be","config_name":"upstream-apparmor-kasan.config","enable_configs":["MINIX_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["minix_dio_read_iter","minix_dio_write_iter","minix_dio_write_end_io","minix_file_read_iter","minix_file_write_iter","minix_iomap_begin","minix_iomap_end","V1_minix_iomap_begin","V2_minix_iomap_begin","minix_writeback_range","minix_writepages","minix_read_folio","minix_readahead","minix_bmap","__page_symlink","minix_get_link","minix_free_link"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"780d569e6c4b422290f5cba319eb904b355d64be","config_name":"upstream-apparmor-kasan.config","enable_configs":["MINIX_FS"],"series_id":"3b663c96-cf07-46e0-9b8d-785fe615029d","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-06-28 05:55:52 +0000 UTC FinishedAt: 2026-06-28 05:55:59 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"780d569e6c4b422290f5cba319eb904b355d64be","config_name":"upstream-apparmor-kasan.config","enable_configs":["MINIX_FS"],"series_id":"3b663c96-cf07-46e0-9b8d-785fe615029d","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},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-workfloww57cg/series-workfloww57cg-convert-artifact-2612104555/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workfloww57cg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"780d569e6c4b422290f5cba319eb904b355d64be","config_name":"upstream-apparmor-kasan.config","enable_configs":["MINIX_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["minix_dio_read_iter","minix_dio_write_iter","minix_dio_write_end_io","minix_file_read_iter","minix_file_write_iter","minix_iomap_begin","minix_iomap_end","V1_minix_iomap_begin","V2_minix_iomap_begin","minix_writeback_range","minix_writepages","minix_read_folio","minix_readahead","minix_bmap","__page_symlink","minix_get_link","minix_free_link"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"780d569e6c4b422290f5cba319eb904b355d64be","config_name":"upstream-apparmor-kasan.config","enable_configs":["MINIX_FS"],"series_id":"3b663c96-cf07-46e0-9b8d-785fe615029d","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-06-28 05:56:02 +0000 UTC FinishedAt: 2026-06-28 05:58:46 +0000 UTC Input: nil Output: nil --------- Name: series-workfloww57cg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"780d569e6c4b422290f5cba319eb904b355d64be","config_name":"upstream-apparmor-kasan.config","enable_configs":["MINIX_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["minix_dio_read_iter","minix_dio_write_iter","minix_dio_write_end_io","minix_file_read_iter","minix_file_write_iter","minix_iomap_begin","minix_iomap_end","V1_minix_iomap_begin","V2_minix_iomap_begin","minix_writeback_range","minix_writepages","minix_read_folio","minix_readahead","minix_bmap","__page_symlink","minix_get_link","minix_free_link"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"780d569e6c4b422290f5cba319eb904b355d64be","config_name":"upstream-apparmor-kasan.config","enable_configs":["MINIX_FS"],"series_id":"3b663c96-cf07-46e0-9b8d-785fe615029d","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-06-28 05:56:02 +0000 UTC FinishedAt: 2026-06-28 05:58:36 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*0ee4d402-afb4-45bb-b3ed-a466ffbc8f6c,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-workfloww57cg/series-workfloww57cg-build-action-492931034/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-workfloww57cg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"780d569e6c4b422290f5cba319eb904b355d64be","config_name":"upstream-apparmor-kasan.config","enable_configs":["MINIX_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["minix_dio_read_iter","minix_dio_write_iter","minix_dio_write_end_io","minix_file_read_iter","minix_file_write_iter","minix_iomap_begin","minix_iomap_end","V1_minix_iomap_begin","V2_minix_iomap_begin","minix_writeback_range","minix_writepages","minix_read_folio","minix_readahead","minix_bmap","__page_symlink","minix_get_link","minix_free_link"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"780d569e6c4b422290f5cba319eb904b355d64be","config_name":"upstream-apparmor-kasan.config","enable_configs":["MINIX_FS"],"series_id":"3b663c96-cf07-46e0-9b8d-785fe615029d","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-06-28 05:58:46 +0000 UTC FinishedAt: 2026-06-28 05:58:46 +0000 UTC Input: nil Output: nil --------- Name: series-workfloww57cg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"780d569e6c4b422290f5cba319eb904b355d64be","config_name":"upstream-apparmor-kasan.config","enable_configs":["MINIX_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["minix_dio_read_iter","minix_dio_write_iter","minix_dio_write_end_io","minix_file_read_iter","minix_file_write_iter","minix_iomap_begin","minix_iomap_end","V1_minix_iomap_begin","V2_minix_iomap_begin","minix_writeback_range","minix_writepages","minix_read_folio","minix_readahead","minix_bmap","__page_symlink","minix_get_link","minix_free_link"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"780d569e6c4b422290f5cba319eb904b355d64be","config_name":"upstream-apparmor-kasan.config","enable_configs":["MINIX_FS"],"series_id":"3b663c96-cf07-46e0-9b8d-785fe615029d","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-06-28 05:58:46 +0000 UTC FinishedAt: 2026-06-28 05:58:46 +0000 UTC Input: nil Output: nil --------- Name: series-workfloww57cg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"780d569e6c4b422290f5cba319eb904b355d64be","config_name":"upstream-apparmor-kasan.config","enable_configs":["MINIX_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["minix_dio_read_iter","minix_dio_write_iter","minix_dio_write_end_io","minix_file_read_iter","minix_file_write_iter","minix_iomap_begin","minix_iomap_end","V1_minix_iomap_begin","V2_minix_iomap_begin","minix_writeback_range","minix_writepages","minix_read_folio","minix_readahead","minix_bmap","__page_symlink","minix_get_link","minix_free_link"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"780d569e6c4b422290f5cba319eb904b355d64be","config_name":"upstream-apparmor-kasan.config","enable_configs":["MINIX_FS"],"series_id":"3b663c96-cf07-46e0-9b8d-785fe615029d","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-06-28 05:58:46 +0000 UTC FinishedAt: 2026-06-28 06:20:44 +0000 UTC Input: nil Output: nil --------- Name: series-workfloww57cg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"780d569e6c4b422290f5cba319eb904b355d64be","config_name":"upstream-apparmor-kasan.config","enable_configs":["MINIX_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["minix_dio_read_iter","minix_dio_write_iter","minix_dio_write_end_io","minix_file_read_iter","minix_file_write_iter","minix_iomap_begin","minix_iomap_end","V1_minix_iomap_begin","V2_minix_iomap_begin","minix_writeback_range","minix_writepages","minix_read_folio","minix_readahead","minix_bmap","__page_symlink","minix_get_link","minix_free_link"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"780d569e6c4b422290f5cba319eb904b355d64be","config_name":"upstream-apparmor-kasan.config","enable_configs":["MINIX_FS"],"series_id":"3b663c96-cf07-46e0-9b8d-785fe615029d","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-06-28 05:58:46 +0000 UTC FinishedAt: 2026-06-28 06:20: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:*d8a74f25-e4cd-4af5-8025-ea5d893d7d31,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-workfloww57cg/series-workfloww57cg-convert-artifact-2612104555/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": "61f38821-60a2-4c7c-a39e-27291869d296", "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-workfloww57cg/series-workfloww57cg-build-action-4192651919/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workfloww57cg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"780d569e6c4b422290f5cba319eb904b355d64be","config_name":"upstream-apparmor-kasan.config","enable_configs":["MINIX_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["minix_dio_read_iter","minix_dio_write_iter","minix_dio_write_end_io","minix_file_read_iter","minix_file_write_iter","minix_iomap_begin","minix_iomap_end","V1_minix_iomap_begin","V2_minix_iomap_begin","minix_writeback_range","minix_writepages","minix_read_folio","minix_readahead","minix_bmap","__page_symlink","minix_get_link","minix_free_link"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"780d569e6c4b422290f5cba319eb904b355d64be","config_name":"upstream-apparmor-kasan.config","enable_configs":["MINIX_FS"],"series_id":"3b663c96-cf07-46e0-9b8d-785fe615029d","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-06-28 05:58:46 +0000 UTC FinishedAt: 2026-06-28 06:20:34 +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:*d8a74f25-e4cd-4af5-8025-ea5d893d7d31,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-workfloww57cg/series-workfloww57cg-convert-artifact-2612104555/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": "61f38821-60a2-4c7c-a39e-27291869d296", "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-workfloww57cg/series-workfloww57cg-build-action-4192651919/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workfloww57cg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"780d569e6c4b422290f5cba319eb904b355d64be","config_name":"upstream-apparmor-kasan.config","enable_configs":["MINIX_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["minix_dio_read_iter","minix_dio_write_iter","minix_dio_write_end_io","minix_file_read_iter","minix_file_write_iter","minix_iomap_begin","minix_iomap_end","V1_minix_iomap_begin","V2_minix_iomap_begin","minix_writeback_range","minix_writepages","minix_read_folio","minix_readahead","minix_bmap","__page_symlink","minix_get_link","minix_free_link"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"780d569e6c4b422290f5cba319eb904b355d64be","config_name":"upstream-apparmor-kasan.config","enable_configs":["MINIX_FS"],"series_id":"3b663c96-cf07-46e0-9b8d-785fe615029d","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-06-28 06:20:44 +0000 UTC FinishedAt: 2026-06-28 06:20:44 +0000 UTC Input: nil Output: nil --------- Name: series-workfloww57cg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"780d569e6c4b422290f5cba319eb904b355d64be","config_name":"upstream-apparmor-kasan.config","enable_configs":["MINIX_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["minix_dio_read_iter","minix_dio_write_iter","minix_dio_write_end_io","minix_file_read_iter","minix_file_write_iter","minix_iomap_begin","minix_iomap_end","V1_minix_iomap_begin","V2_minix_iomap_begin","minix_writeback_range","minix_writepages","minix_read_folio","minix_readahead","minix_bmap","__page_symlink","minix_get_link","minix_free_link"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"780d569e6c4b422290f5cba319eb904b355d64be","config_name":"upstream-apparmor-kasan.config","enable_configs":["MINIX_FS"],"series_id":"3b663c96-cf07-46e0-9b8d-785fe615029d","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-06-28 06:20:44 +0000 UTC FinishedAt: 2026-06-28 06:20:44 +0000 UTC Input: nil Output: nil --------- Name: series-workfloww57cg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"780d569e6c4b422290f5cba319eb904b355d64be","config_name":"upstream-apparmor-kasan.config","enable_configs":["MINIX_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["minix_dio_read_iter","minix_dio_write_iter","minix_dio_write_end_io","minix_file_read_iter","minix_file_write_iter","minix_iomap_begin","minix_iomap_end","V1_minix_iomap_begin","V2_minix_iomap_begin","minix_writeback_range","minix_writepages","minix_read_folio","minix_readahead","minix_bmap","__page_symlink","minix_get_link","minix_free_link"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"780d569e6c4b422290f5cba319eb904b355d64be","config_name":"upstream-apparmor-kasan.config","enable_configs":["MINIX_FS"],"series_id":"3b663c96-cf07-46e0-9b8d-785fe615029d","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-06-28 06:20:44 +0000 UTC FinishedAt: 2026-06-28 06:23:28 +0000 UTC Input: nil Output: nil --------- Name: series-workfloww57cg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"780d569e6c4b422290f5cba319eb904b355d64be","config_name":"upstream-apparmor-kasan.config","enable_configs":["MINIX_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["minix_dio_read_iter","minix_dio_write_iter","minix_dio_write_end_io","minix_file_read_iter","minix_file_write_iter","minix_iomap_begin","minix_iomap_end","V1_minix_iomap_begin","V2_minix_iomap_begin","minix_writeback_range","minix_writepages","minix_read_folio","minix_readahead","minix_bmap","__page_symlink","minix_get_link","minix_free_link"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"780d569e6c4b422290f5cba319eb904b355d64be","config_name":"upstream-apparmor-kasan.config","enable_configs":["MINIX_FS"],"series_id":"3b663c96-cf07-46e0-9b8d-785fe615029d","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-06-28 06:20:44 +0000 UTC FinishedAt: 2026-06-28 06:23:18 +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:*61f38821-60a2-4c7c-a39e-27291869d296,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-workfloww57cg/series-workfloww57cg-build-action-4192651919/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-workfloww57cg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"780d569e6c4b422290f5cba319eb904b355d64be","config_name":"upstream-apparmor-kasan.config","enable_configs":["MINIX_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["minix_dio_read_iter","minix_dio_write_iter","minix_dio_write_end_io","minix_file_read_iter","minix_file_write_iter","minix_iomap_begin","minix_iomap_end","V1_minix_iomap_begin","V2_minix_iomap_begin","minix_writeback_range","minix_writepages","minix_read_folio","minix_readahead","minix_bmap","__page_symlink","minix_get_link","minix_free_link"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"780d569e6c4b422290f5cba319eb904b355d64be","config_name":"upstream-apparmor-kasan.config","enable_configs":["MINIX_FS"],"series_id":"3b663c96-cf07-46e0-9b8d-785fe615029d","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-06-28 06:23:28 +0000 UTC FinishedAt: 2026-06-28 09:26:03 +0000 UTC Input: nil Output: nil --------- Name: series-workfloww57cg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"780d569e6c4b422290f5cba319eb904b355d64be","config_name":"upstream-apparmor-kasan.config","enable_configs":["MINIX_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["minix_dio_read_iter","minix_dio_write_iter","minix_dio_write_end_io","minix_file_read_iter","minix_file_write_iter","minix_iomap_begin","minix_iomap_end","V1_minix_iomap_begin","V2_minix_iomap_begin","minix_writeback_range","minix_writepages","minix_read_folio","minix_readahead","minix_bmap","__page_symlink","minix_get_link","minix_free_link"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"780d569e6c4b422290f5cba319eb904b355d64be","config_name":"upstream-apparmor-kasan.config","enable_configs":["MINIX_FS"],"series_id":"3b663c96-cf07-46e0-9b8d-785fe615029d","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-06-28 06:23:28 +0000 UTC FinishedAt: 2026-06-28 09:26:03 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["minix_dio_read_iter","minix_dio_write_iter","minix_dio_write_end_io","minix_file_read_iter","minix_file_write_iter","minix_iomap_begin","minix_iomap_end","V1_minix_iomap_begin","V2_minix_iomap_begin","minix_writeback_range","minix_writepages","minix_read_folio","minix_readahead","minix_bmap","__page_symlink","minix_get_link","minix_free_link"],"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:*0ee4d402-afb4-45bb-b3ed-a466ffbc8f6c,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*61f38821-60a2-4c7c-a39e-27291869d296,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-workfloww57cg/series-workfloww57cg-build-action-492931034/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-workfloww57cg/series-workfloww57cg-build-action-4192651919/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workfloww57cg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"780d569e6c4b422290f5cba319eb904b355d64be","config_name":"upstream-apparmor-kasan.config","enable_configs":["MINIX_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["minix_dio_read_iter","minix_dio_write_iter","minix_dio_write_end_io","minix_file_read_iter","minix_file_write_iter","minix_iomap_begin","minix_iomap_end","V1_minix_iomap_begin","V2_minix_iomap_begin","minix_writeback_range","minix_writepages","minix_read_folio","minix_readahead","minix_bmap","__page_symlink","minix_get_link","minix_free_link"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"780d569e6c4b422290f5cba319eb904b355d64be","config_name":"upstream-apparmor-kasan.config","enable_configs":["MINIX_FS"],"series_id":"3b663c96-cf07-46e0-9b8d-785fe615029d","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-06-28 06:23:28 +0000 UTC FinishedAt: 2026-06-28 06:23:38 +0000 UTC Input: nil Output: nil --------- Name: series-workfloww57cg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"780d569e6c4b422290f5cba319eb904b355d64be","config_name":"upstream-apparmor-kasan.config","enable_configs":["MINIX_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["minix_dio_read_iter","minix_dio_write_iter","minix_dio_write_end_io","minix_file_read_iter","minix_file_write_iter","minix_iomap_begin","minix_iomap_end","V1_minix_iomap_begin","V2_minix_iomap_begin","minix_writeback_range","minix_writepages","minix_read_folio","minix_readahead","minix_bmap","__page_symlink","minix_get_link","minix_free_link"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"780d569e6c4b422290f5cba319eb904b355d64be","config_name":"upstream-apparmor-kasan.config","enable_configs":["MINIX_FS"],"series_id":"3b663c96-cf07-46e0-9b8d-785fe615029d","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-06-28 06:23:28 +0000 UTC FinishedAt: 2026-06-28 06:23:35 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["minix_dio_read_iter","minix_dio_write_iter","minix_dio_write_end_io","minix_file_read_iter","minix_file_write_iter","minix_iomap_begin","minix_iomap_end","V1_minix_iomap_begin","V2_minix_iomap_begin","minix_writeback_range","minix_writepages","minix_read_folio","minix_readahead","minix_bmap","__page_symlink","minix_get_link","minix_free_link"],"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-workfloww57cg/series-workfloww57cg-convert-artifact-2684782724/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workfloww57cg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"780d569e6c4b422290f5cba319eb904b355d64be","config_name":"upstream-apparmor-kasan.config","enable_configs":["MINIX_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["minix_dio_read_iter","minix_dio_write_iter","minix_dio_write_end_io","minix_file_read_iter","minix_file_write_iter","minix_iomap_begin","minix_iomap_end","V1_minix_iomap_begin","V2_minix_iomap_begin","minix_writeback_range","minix_writepages","minix_read_folio","minix_readahead","minix_bmap","__page_symlink","minix_get_link","minix_free_link"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"780d569e6c4b422290f5cba319eb904b355d64be","config_name":"upstream-apparmor-kasan.config","enable_configs":["MINIX_FS"],"series_id":"3b663c96-cf07-46e0-9b8d-785fe615029d","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-06-28 06:23:28 +0000 UTC FinishedAt: 2026-06-28 06:23:28 +0000 UTC Input: nil Output: nil --------- Name: series-workfloww57cg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"780d569e6c4b422290f5cba319eb904b355d64be","config_name":"upstream-apparmor-kasan.config","enable_configs":["MINIX_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["minix_dio_read_iter","minix_dio_write_iter","minix_dio_write_end_io","minix_file_read_iter","minix_file_write_iter","minix_iomap_begin","minix_iomap_end","V1_minix_iomap_begin","V2_minix_iomap_begin","minix_writeback_range","minix_writepages","minix_read_folio","minix_readahead","minix_bmap","__page_symlink","minix_get_link","minix_free_link"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"780d569e6c4b422290f5cba319eb904b355d64be","config_name":"upstream-apparmor-kasan.config","enable_configs":["MINIX_FS"],"series_id":"3b663c96-cf07-46e0-9b8d-785fe615029d","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-06-28 06:23:28 +0000 UTC FinishedAt: 2026-06-28 06:23:28 +0000 UTC Input: nil Output: nil --------- Name: series-workfloww57cg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"780d569e6c4b422290f5cba319eb904b355d64be","config_name":"upstream-apparmor-kasan.config","enable_configs":["MINIX_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["minix_dio_read_iter","minix_dio_write_iter","minix_dio_write_end_io","minix_file_read_iter","minix_file_write_iter","minix_iomap_begin","minix_iomap_end","V1_minix_iomap_begin","V2_minix_iomap_begin","minix_writeback_range","minix_writepages","minix_read_folio","minix_readahead","minix_bmap","__page_symlink","minix_get_link","minix_free_link"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"780d569e6c4b422290f5cba319eb904b355d64be","config_name":"upstream-apparmor-kasan.config","enable_configs":["MINIX_FS"],"series_id":"3b663c96-cf07-46e0-9b8d-785fe615029d","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-06-28 06:23:28 +0000 UTC FinishedAt: 2026-06-28 06:23:28 +0000 UTC Input: nil Output: nil --------- Name: series-workfloww57cg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"780d569e6c4b422290f5cba319eb904b355d64be","config_name":"upstream-apparmor-kasan.config","enable_configs":["MINIX_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["minix_dio_read_iter","minix_dio_write_iter","minix_dio_write_end_io","minix_file_read_iter","minix_file_write_iter","minix_iomap_begin","minix_iomap_end","V1_minix_iomap_begin","V2_minix_iomap_begin","minix_writeback_range","minix_writepages","minix_read_folio","minix_readahead","minix_bmap","__page_symlink","minix_get_link","minix_free_link"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"780d569e6c4b422290f5cba319eb904b355d64be","config_name":"upstream-apparmor-kasan.config","enable_configs":["MINIX_FS"],"series_id":"3b663c96-cf07-46e0-9b8d-785fe615029d","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-06-28 06:23:38 +0000 UTC FinishedAt: 2026-06-28 09:26:03 +0000 UTC Input: nil Output: nil --------- Name: series-workfloww57cg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"780d569e6c4b422290f5cba319eb904b355d64be","config_name":"upstream-apparmor-kasan.config","enable_configs":["MINIX_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["minix_dio_read_iter","minix_dio_write_iter","minix_dio_write_end_io","minix_file_read_iter","minix_file_write_iter","minix_iomap_begin","minix_iomap_end","V1_minix_iomap_begin","V2_minix_iomap_begin","minix_writeback_range","minix_writepages","minix_read_folio","minix_readahead","minix_bmap","__page_symlink","minix_get_link","minix_free_link"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"780d569e6c4b422290f5cba319eb904b355d64be","config_name":"upstream-apparmor-kasan.config","enable_configs":["MINIX_FS"],"series_id":"3b663c96-cf07-46e0-9b8d-785fe615029d","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-06-28 06:23:38 +0000 UTC FinishedAt: 2026-06-28 09:25:52 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*0ee4d402-afb4-45bb-b3ed-a466ffbc8f6c,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*61f38821-60a2-4c7c-a39e-27291869d296,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-workfloww57cg/series-workfloww57cg-build-action-492931034/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-workfloww57cg/series-workfloww57cg-build-action-4192651919/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-workfloww57cg/series-workfloww57cg-convert-artifact-2684782724/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,}