Name: series-workflowvthtq Phase: Succeeded StartedAt: 2026-07-26 17:36:39 +0000 UTC FinishedAt: 2026-07-26 23:14:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvthtq[0] Phase: Succeeded StartedAt: 2026-07-26 17:36:39 +0000 UTC FinishedAt: 2026-07-26 17:54:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvthtq[0].run-triage Phase: Succeeded StartedAt: 2026-07-26 17:36:39 +0000 UTC FinishedAt: 2026-07-26 17:54:25 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "1590cf0329716306e948a8fc29f1d3ee87d3989f", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "HUGETLBFS", "MEMORY_FAILURE", "TRANSPARENT_HUGEPAGE" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "1590cf0329716306e948a8fc29f1d3ee87d3989f", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "HUGETLBFS", "MEMORY_FAILURE", "TRANSPARENT_HUGEPAGE" ], "series_id": "3e745adf-3aa7-4479-a465-a323f0992e19" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "hugetlb_page_hwpoison", "hugetlb_unref_page_hwpoison", "unpoison_memory", "folio_clear_hugetlb_hwpoison" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db", "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": { "findings": [ "7a0cb565-4340-4daf-8de2-06f5b1d2af93", "a77d3cb3-6a99-45a3-bd83-722c3f7fcd2c", "2406d176-ea76-40a8-b6bc-41d3e6326388" ] } } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI2IDE3OjUxPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0hVR0VUTEJGUyYjMzQ7LAogICAgJiMzNDtNRU1PUllfRkFJTFVSRSYjMzQ7LAogICAgJiMzNDtUUkFOU1BBUkVOVF9IVUdFUEFHRSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2h1Z2V0bGJfcGFnZV9od3BvaXNvbiYjMzQ7LAogICAgJiMzNDtodWdldGxiX3VucmVmX3BhZ2VfaHdwb2lzb24mIzM0OywKICAgICYjMzQ7dW5wb2lzb25fbWVtb3J5JiMzNDssCiAgICAmIzM0O2ZvbGlvX2NsZWFyX2h1Z2V0bGJfaHdwb2lzb24mIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggc2VyaWVzIGludHJvZHVjZXMgYExBUkdFX0ZPTElPYCBjb25maWcgYW5kIHJlZmFjdG9ycyBob3cgaHdwb2lzb24gaXMgdHJhY2tlZCBmb3IgaHVnZXRsYiBmb2xpb3MuIEl0IHJlcGxhY2VzIGBhZGp1c3RfcmFuZ2VfaHdwb2lzb25gIGluIGBmcy9odWdldGxiZnMvaW5vZGUuY2Agd2l0aCBhIGdlbmVyaWMgb25lIGluIGBtbS9maWxlbWFwLmNgIGFuZCBjaGFuZ2VzIGBodWdldGxiZnNfcmVhZF9pdGVyYCB0byBgZ2VuZXJpY19maWxlX3JlYWRfaXRlcmAuIEl0IGFsc28gbW9kaWZpZXMgYGZvbGlvX3Rlc3RfaHdwb2lzb25gIHRvIGBmb2xpb19oYXNfaHdwb2lzb25lZF9wYWdlYCBpbiB2YXJpb3VzIHBsYWNlcy4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byBjb3JlIGtlcm5lbCBsb2dpYyAobW0sIGh1Z2V0bGJmcywgbWVtb3J5LWZhaWx1cmUpIGFuZCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI2IDE3OjUxPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgOWI4NTZlYmQ0N2FjNTAxMDdjOTk2MjM2OTI4ZGFjNWI2M2IzZTk2YlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTdW4gSnVsIDI2IDE3OjUxOjM1IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2ZzL0tjb25maWcgYi9mcy9LY29uZmlnXG5pbmRleCBjZjZhZTY0Nzc2ZTYyYy4uZWRkYWM0ZWQyMTRiMTIgMTAwNjQ0XG4tLS0gYS9mcy9LY29uZmlnXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9LY29uZmlnXG5AQCAtMjcyLDcgJiM0MzsyNzIsNyBAQCBlbmRpZiAjIEhVR0VUTEJGU1xuIFxuIGNvbmZpZyBIVUdFVExCX1BBR0VcbiBcdGRlZl9ib29sIEhVR0VUTEJGU1xuLVx0c2VsZWN0IFhBUlJBWV9NVUxUSVxuJiM0MztcdHNlbGVjdCBMQVJHRV9GT0xJT1xuIFxuIGNvbmZpZyBIVUdFVExCX1BBR0VfT1BUSU1JWkVfVk1FTU1BUFxuIFx0ZGVmX2Jvb2wgSFVHRVRMQl9QQUdFXG5kaWZmIC0tZ2l0IGEvZnMvaHVnZXRsYmZzL2lub2RlLmMgYi9mcy9odWdldGxiZnMvaW5vZGUuY1xuaW5kZXggMjE2ZTFhMGRkMGIyMzcuLmNlZjdlNjFiODI3ZDcxIDEwMDY0NFxuLS0tIGEvZnMvaHVnZXRsYmZzL2lub2RlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2h1Z2V0bGJmcy9pbm9kZS5jXG5AQCAtMTg3LDExMyAmIzQzOzE4Nyw2IEBAIGh1Z2V0bGJfZ2V0X3VubWFwcGVkX2FyZWEoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGxvbmcgYWRkcixcbiBcdHJldHVybiBtbV9nZXRfdW5tYXBwZWRfYXJlYV92bWZsYWdzKGZpbGUsIGFkZHIwLCBsZW4sIHBnb2ZmLCBmbGFncywgMCk7XG4gfVxuIFxuLS8qXG4tICogU29tZW9uZSB3YW50cyB0byByZWFkIEBieXRlcyBmcm9tIGEgSFdQT0lTT04gaHVnZXRsYiBAZm9saW8gZnJvbSBAb2Zmc2V0LlxuLSAqIFJldHVybnMgdGhlIG1heGltdW0gbnVtYmVyIG9mIGJ5dGVzIG9uZSBjYW4gcmVhZCB3aXRob3V0IHRvdWNoaW5nIHRoZSAxc3QgcmF3XG4tICogSFdQT0lTT04gcGFnZS5cbi0gKi9cbi1zdGF0aWMgc2l6ZV90IGFkanVzdF9yYW5nZV9od3BvaXNvbihzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzaXplX3Qgb2Zmc2V0LFxuLVx0XHRzaXplX3QgYnl0ZXMpXG4te1xuLVx0c3RydWN0IHBhZ2UgKnBhZ2UgPSBmb2xpb19wYWdlKGZvbGlvLCBvZmZzZXQgLyBQQUdFX1NJWkUpO1xuLVx0c2l6ZV90IHNhZmVfYnl0ZXM7XG4tXG4tXHRpZiAoaXNfcmF3X2h3cG9pc29uX3BhZ2VfaW5faHVnZXBhZ2UocGFnZSkpXG4tXHRcdHJldHVybiAwO1xuLVx0LyogU2FmZSB0byByZWFkIHRoZSByZW1haW5pbmcgYnl0ZXMgaW4gdGhpcyBwYWdlLiAqL1xuLVx0c2FmZV9ieXRlcyA9IFBBR0VfU0laRSAtIChvZmZzZXQgJSBQQUdFX1NJWkUpO1xuLVx0cGFnZSYjNDM7JiM0Mzs7XG4tXG4tXHQvKiBDaGVjayBlYWNoIHJlbWFpbmluZyBwYWdlIGFzIGxvbmcgYXMgd2UgYXJlIG5vdCBkb25lIHlldC4gKi9cbi1cdGZvciAoOyBzYWZlX2J5dGVzIFx1MDAzYyBieXRlczsgc2FmZV9ieXRlcyAmIzQzOz0gUEFHRV9TSVpFLCBwYWdlJiM0MzsmIzQzOylcbi1cdFx0aWYgKGlzX3Jhd19od3BvaXNvbl9wYWdlX2luX2h1Z2VwYWdlKHBhZ2UpKVxuLVx0XHRcdGJyZWFrO1xuLVxuLVx0cmV0dXJuIG1pbihzYWZlX2J5dGVzLCBieXRlcyk7XG4tfVxuLVxuLS8qXG4tICogU3VwcG9ydCBmb3IgcmVhZCgpIC0gRmluZCB0aGUgcGFnZSBhdHRhY2hlZCB0byBmX21hcHBpbmcgYW5kIGNvcHkgb3V0IHRoZVxuLSAqIGRhdGEuIFRoaXMgcHJvdmlkZXMgZnVuY3Rpb25hbGl0eSBzaW1pbGFyIHRvIGZpbGVtYXBfcmVhZCgpLlxuLSAqL1xuLXN0YXRpYyBzc2l6ZV90IGh1Z2V0bGJmc19yZWFkX2l0ZXIoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKnRvKVxuLXtcbi1cdHN0cnVjdCBmaWxlICpmaWxlID0gaW9jYi1cdTAwM2VraV9maWxwO1xuLVx0c3RydWN0IGhzdGF0ZSAqaCA9IGhzdGF0ZV9maWxlKGZpbGUpO1xuLVx0c3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcgPSBmaWxlLVx1MDAzZWZfbWFwcGluZztcbi1cdHN0cnVjdCBpbm9kZSAqaW5vZGUgPSBtYXBwaW5nLVx1MDAzZWhvc3Q7XG4tXHR1bnNpZ25lZCBsb25nIGluZGV4ID0gaW9jYi1cdTAwM2VraV9wb3MgXHUwMDNlXHUwMDNlIGh1Z2VfcGFnZV9zaGlmdChoKTtcbi1cdHVuc2lnbmVkIGxvbmcgb2Zmc2V0ID0gaW9jYi1cdTAwM2VraV9wb3MgXHUwMDI2IH5odWdlX3BhZ2VfbWFzayhoKTtcbi1cdHVuc2lnbmVkIGxvbmcgZW5kX2luZGV4O1xuLVx0bG9mZl90IGlzaXplO1xuLVx0c3NpemVfdCByZXR2YWwgPSAwO1xuLVxuLVx0d2hpbGUgKGlvdl9pdGVyX2NvdW50KHRvKSkge1xuLVx0XHRzdHJ1Y3QgZm9saW8gKmZvbGlvO1xuLVx0XHRzaXplX3QgbnIsIGNvcGllZCwgd2FudDtcbi1cbi1cdFx0LyogbnIgaXMgdGhlIG1heGltdW0gbnVtYmVyIG9mIGJ5dGVzIHRvIGNvcHkgZnJvbSB0aGlzIHBhZ2UgKi9cbi1cdFx0bnIgPSBodWdlX3BhZ2Vfc2l6ZShoKTtcbi1cdFx0aXNpemUgPSBpX3NpemVfcmVhZChpbm9kZSk7XG4tXHRcdGlmICghaXNpemUpXG4tXHRcdFx0YnJlYWs7XG4tXHRcdGVuZF9pbmRleCA9IChpc2l6ZSAtIDEpIFx1MDAzZVx1MDAzZSBodWdlX3BhZ2Vfc2hpZnQoaCk7XG4tXHRcdGlmIChpbmRleCBcdTAwM2UgZW5kX2luZGV4KVxuLVx0XHRcdGJyZWFrO1xuLVx0XHRpZiAoaW5kZXggPT0gZW5kX2luZGV4KSB7XG4tXHRcdFx0bnIgPSAoKGlzaXplIC0gMSkgXHUwMDI2IH5odWdlX3BhZ2VfbWFzayhoKSkgJiM0MzsgMTtcbi1cdFx0XHRpZiAobnIgXHUwMDNjPSBvZmZzZXQpXG4tXHRcdFx0XHRicmVhaztcbi1cdFx0fVxuLVx0XHRuciA9IG5yIC0gb2Zmc2V0O1xuLVxuLVx0XHQvKiBGaW5kIHRoZSBmb2xpbyAqL1xuLVx0XHRmb2xpbyA9IGZpbGVtYXBfbG9ja19odWdldGxiX2ZvbGlvKGgsIG1hcHBpbmcsIGluZGV4KTtcbi1cdFx0aWYgKElTX0VSUihmb2xpbykpIHtcbi1cdFx0XHQvKlxuLVx0XHRcdCAqIFdlIGhhdmUgYSBIT0xFLCB6ZXJvIG91dCB0aGUgdXNlci1idWZmZXIgZm9yIHRoZVxuLVx0XHRcdCAqIGxlbmd0aCBvZiB0aGUgaG9sZSBvciByZXF1ZXN0LlxuLVx0XHRcdCAqL1xuLVx0XHRcdGNvcGllZCA9IGlvdl9pdGVyX3plcm8obnIsIHRvKTtcbi1cdFx0fSBlbHNlIHtcbi1cdFx0XHRmb2xpb191bmxvY2soZm9saW8pO1xuLVxuLVx0XHRcdGlmICghZm9saW9fdGVzdF9od3BvaXNvbihmb2xpbykpXG4tXHRcdFx0XHR3YW50ID0gbnI7XG4tXHRcdFx0ZWxzZSB7XG4tXHRcdFx0XHQvKlxuLVx0XHRcdFx0ICogQWRqdXN0IGhvdyBtYW55IGJ5dGVzIHNhZmUgdG8gcmVhZCB3aXRob3V0XG4tXHRcdFx0XHQgKiB0b3VjaGluZyB0aGUgMXN0IHJhdyBIV1BPSVNPTiBwYWdlIGFmdGVyXG4tXHRcdFx0XHQgKiBvZmZzZXQuXG4tXHRcdFx0XHQgKi9cbi1cdFx0XHRcdHdhbnQgPSBhZGp1c3RfcmFuZ2VfaHdwb2lzb24oZm9saW8sIG9mZnNldCwgbnIpO1xuLVx0XHRcdFx0aWYgKHdhbnQgPT0gMCkge1xuLVx0XHRcdFx0XHRmb2xpb19wdXQoZm9saW8pO1xuLVx0XHRcdFx0XHRyZXR2YWwgPSAtRUlPO1xuLVx0XHRcdFx0XHRicmVhaztcbi1cdFx0XHRcdH1cbi1cdFx0XHR9XG4tXG4tXHRcdFx0Lypcbi1cdFx0XHQgKiBXZSBoYXZlIHRoZSBmb2xpbywgY29weSBpdCB0byB1c2VyIHNwYWNlIGJ1ZmZlci5cbi1cdFx0XHQgKi9cbi1cdFx0XHRjb3BpZWQgPSBjb3B5X2ZvbGlvX3RvX2l0ZXIoZm9saW8sIG9mZnNldCwgd2FudCwgdG8pO1xuLVx0XHRcdGZvbGlvX3B1dChmb2xpbyk7XG4tXHRcdH1cbi1cdFx0b2Zmc2V0ICYjNDM7PSBjb3BpZWQ7XG4tXHRcdHJldHZhbCAmIzQzOz0gY29waWVkO1xuLVx0XHRpZiAoY29waWVkICE9IG5yIFx1MDAyNlx1MDAyNiBpb3ZfaXRlcl9jb3VudCh0bykpIHtcbi1cdFx0XHRpZiAoIXJldHZhbClcbi1cdFx0XHRcdHJldHZhbCA9IC1FRkFVTFQ7XG4tXHRcdFx0YnJlYWs7XG4tXHRcdH1cbi1cdFx0aW5kZXggJiM0Mzs9IG9mZnNldCBcdTAwM2VcdTAwM2UgaHVnZV9wYWdlX3NoaWZ0KGgpO1xuLVx0XHRvZmZzZXQgXHUwMDI2PSB+aHVnZV9wYWdlX21hc2soaCk7XG4tXHR9XG4tXHRpb2NiLVx1MDAzZWtpX3BvcyA9ICgobG9mZl90KWluZGV4IFx1MDAzY1x1MDAzYyBodWdlX3BhZ2Vfc2hpZnQoaCkpICYjNDM7IG9mZnNldDtcbi1cdHJldHVybiByZXR2YWw7XG4tfVxuLVxuIHN0YXRpYyBpbnQgaHVnZXRsYmZzX3dyaXRlX2JlZ2luKGNvbnN0IHN0cnVjdCBraW9jYiAqaW9jYixcbiBcdFx0XHRzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcbiBcdFx0XHRsb2ZmX3QgcG9zLCB1bnNpZ25lZCBsZW4sXG5AQCAtODgzLDYgJiM0Mzs3NzYsMTcgQEAgc3RhdGljIHN0cnVjdCBpbm9kZSAqaHVnZXRsYmZzX2dldF9yb290KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsXG4gXHRyZXR1cm4gaW5vZGU7XG4gfVxuIFxuJiM0MztzdGF0aWMgdm9pZCBodWdldGxiZnNfaW5pdF9yZWd1bGFyX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgaHN0YXRlICpoc3RhdGUgPSBoc3RhdGVfaW5vZGUoaW5vZGUpO1xuJiM0MztcdHVuc2lnbmVkIGludCBvcmRlciA9IGh1Z2VfcGFnZV9vcmRlcihoc3RhdGUpO1xuJiM0MztcbiYjNDM7XHRpbm9kZS1cdTAwM2VpX29wID0gXHUwMDI2aHVnZXRsYmZzX2lub2RlX29wZXJhdGlvbnM7XG4mIzQzO1x0aW5vZGUtXHUwMDNlaV9mb3AgPSBcdTAwMjZodWdldGxiZnNfZmlsZV9vcGVyYXRpb25zO1xuJiM0MztcdG1hcHBpbmdfc2V0X2ZvbGlvX29yZGVyX3JhbmdlKGlub2RlLVx1MDAzZWlfbWFwcGluZywgb3JkZXIsIG9yZGVyKTtcbiYjNDM7XHRtYXBwaW5nX3NldF9hdXRob3JpdGF0aXZlKGlub2RlLVx1MDAzZWlfbWFwcGluZyk7XG4mIzQzO31cbiYjNDM7XG4gLypcbiAgKiBIdWdldGxiZnMgaXMgbm90IHJlY2xhaW1hYmxlOyB0aGVyZWZvcmUgaXRzIGlfbW1hcF9yd3NlbSB3aWxsIG5ldmVyXG4gICogYmUgdGFrZW4gZnJvbSByZWNsYWltIC0tIHVubGlrZSByZWd1bGFyIGZpbGVzeXN0ZW1zLiBUaGlzIG5lZWRzIGFuXG5AQCAtOTI2LDggJiM0Mzs4MzAsNyBAQCBzdGF0aWMgc3RydWN0IGlub2RlICpodWdldGxiZnNfZ2V0X2lub2RlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsXG4gXHRcdFx0aW5pdF9zcGVjaWFsX2lub2RlKGlub2RlLCBtb2RlLCBkZXYpO1xuIFx0XHRcdGJyZWFrO1xuIFx0XHRjYXNlIFNfSUZSRUc6XG4tXHRcdFx0aW5vZGUtXHUwMDNlaV9vcCA9IFx1MDAyNmh1Z2V0bGJmc19pbm9kZV9vcGVyYXRpb25zO1xuLVx0XHRcdGlub2RlLVx1MDAzZWlfZm9wID0gXHUwMDI2aHVnZXRsYmZzX2ZpbGVfb3BlcmF0aW9ucztcbiYjNDM7XHRcdFx0aHVnZXRsYmZzX2luaXRfcmVndWxhcl9pbm9kZShpbm9kZSk7XG4gXHRcdFx0YnJlYWs7XG4gXHRcdGNhc2UgU19JRkRJUjpcbiBcdFx0XHRpbm9kZS1cdTAwM2VpX29wID0gXHUwMDI2aHVnZXRsYmZzX2Rpcl9pbm9kZV9vcGVyYXRpb25zO1xuQEAgLTEyMDYsNyAmIzQzOzExMDksNyBAQCBzdGF0aWMgdm9pZCBpbml0X29uY2Uodm9pZCAqZm9vKVxuIH1cbiBcbiBzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBodWdldGxiZnNfZmlsZV9vcGVyYXRpb25zID0ge1xuLVx0LnJlYWRfaXRlclx0XHQ9IGh1Z2V0bGJmc19yZWFkX2l0ZXIsXG4mIzQzO1x0LnJlYWRfaXRlclx0XHQ9IGdlbmVyaWNfZmlsZV9yZWFkX2l0ZXIsXG4gXHQubW1hcFx0XHRcdD0gaHVnZXRsYmZzX2ZpbGVfbW1hcCxcbiBcdC5mc3luY1x0XHRcdD0gbm9vcF9mc3luYyxcbiBcdC5nZXRfdW5tYXBwZWRfYXJlYVx0PSBodWdldGxiX2dldF91bm1hcHBlZF9hcmVhLFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaHVnZXRsYi5oIGIvaW5jbHVkZS9saW51eC9odWdldGxiLmhcbmluZGV4IDJhYmFmOTkzMjFlOTBkLi4xODc4NjQyZTc1ZWM1MSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvaHVnZXRsYi5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaFxuQEAgLTE2NSw3ICYjNDM7MTY1LDcgQEAgYm9vbCBodWdldGxiZnNfcGFnZWNhY2hlX3ByZXNlbnQoc3RydWN0IGhzdGF0ZSAqaCxcbiBcdFx0XHRcdCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbiBcdFx0XHRcdCB1bnNpZ25lZCBsb25nIGFkZHJlc3MpO1xuIFxuLXN0cnVjdCBhZGRyZXNzX3NwYWNlICpodWdldGxiX2ZvbGlvX21hcHBpbmdfbG9ja193cml0ZShzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcbiYjNDM7c3RydWN0IGFkZHJlc3Nfc3BhY2UgKmh1Z2V0bGJfZm9saW9fbWFwcGluZ19sb2NrX3dyaXRlKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8pO1xuIFxuIGV4dGVybiBpbnQgbW92YWJsZV9naWdhbnRpY19wYWdlcyBfX3JlYWRfbW9zdGx5O1xuIGV4dGVybiBpbnQgc3lzY3RsX2h1Z2V0bGJfc2htX2dyb3VwIF9fcmVhZF9tb3N0bHk7XG5AQCAtMjkyLDggJiM0MzsyOTIsNyBAQCBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgaHVnZXRsYl90b3RhbF9wYWdlcyh2b2lkKVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuLXN0YXRpYyBpbmxpbmUgc3RydWN0IGFkZHJlc3Nfc3BhY2UgKmh1Z2V0bGJfZm9saW9fbWFwcGluZ19sb2NrX3dyaXRlKFxuLVx0XHRcdFx0XHRcdFx0c3RydWN0IGZvbGlvICpmb2xpbylcbiYjNDM7c3RhdGljIGlubGluZSBzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqaHVnZXRsYl9mb2xpb19tYXBwaW5nX2xvY2tfd3JpdGUoY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbylcbiB7XG4gXHRyZXR1cm4gTlVMTDtcbiB9XG5AQCAtNTk1LDggJiM0Mzs1OTQsOCBAQCBlbnVtIGh1Z2V0bGJfcGFnZV9mbGFncyB7XG4gI2lmZGVmIENPTkZJR19IVUdFVExCX1BBR0VcbiAjZGVmaW5lIFRFU1RIUEFHRUZMQUcodW5hbWUsIGZsbmFtZSlcdFx0XHRcdFxcXG4gc3RhdGljIF9fYWx3YXlzX2lubGluZVx0XHRcdFx0XHRcdFxcXG4tYm9vbCBmb2xpb190ZXN0X2h1Z2V0bGJfIyNmbG5hbWUoc3RydWN0IGZvbGlvICpmb2xpbylcdFx0XFxcbi1cdHtcdHZvaWQgKnByaXZhdGUgPSBcdTAwMjZmb2xpby1cdTAwM2Vwcml2YXRlO1x0XHRcXFxuJiM0Mztib29sIGZvbGlvX3Rlc3RfaHVnZXRsYl8jI2ZsbmFtZShjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVx0XFxcbiYjNDM7XHR7XHRjb25zdCB2b2lkICpwcml2YXRlID0gXHUwMDI2Zm9saW8tXHUwMDNlcHJpdmF0ZTtcdFx0XFxcbiBcdFx0cmV0dXJuIHRlc3RfYml0KEhQR18jI2ZsbmFtZSwgcHJpdmF0ZSk7XHRcdFxcXG4gXHR9XG4gXG5AQCAtNjE2LDcgJiM0Mzs2MTUsNyBAQCB2b2lkIGZvbGlvX2NsZWFyX2h1Z2V0bGJfIyNmbG5hbWUoc3RydWN0IGZvbGlvICpmb2xpbylcdFx0XFxcbiAjZWxzZVxuICNkZWZpbmUgVEVTVEhQQUdFRkxBRyh1bmFtZSwgZmxuYW1lKVx0XHRcdFx0XFxcbiBzdGF0aWMgaW5saW5lIGJvb2xcdFx0XHRcdFx0XHRcXFxuLWZvbGlvX3Rlc3RfaHVnZXRsYl8jI2ZsbmFtZShzdHJ1Y3QgZm9saW8gKmZvbGlvKVx0XHRcXFxuJiM0Mztmb2xpb190ZXN0X2h1Z2V0bGJfIyNmbG5hbWUoY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbylcdFx0XFxcbiBcdHsgcmV0dXJuIDA7IH1cbiBcbiAjZGVmaW5lIFNFVEhQQUdFRkxBRyh1bmFtZSwgZmxuYW1lKVx0XHRcdFx0XFxcbkBAIC03MjcsNyAmIzQzOzcyNiw3IEBAIHN0YXRpYyBpbmxpbmUgc3RydWN0IGh1Z2VwYWdlX3N1YnBvb2wgKnN1YnBvb2xfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSlcbiBcdHJldHVybiBIVUdFVExCRlNfU0IoaW5vZGUtXHUwMDNlaV9zYiktXHUwMDNlc3Bvb2w7XG4gfVxuIFxuLXN0YXRpYyBpbmxpbmUgc3RydWN0IGh1Z2VwYWdlX3N1YnBvb2wgKmh1Z2V0bGJfZm9saW9fc3VicG9vbChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuJiM0MztzdGF0aWMgaW5saW5lIHN0cnVjdCBodWdlcGFnZV9zdWJwb29sICpodWdldGxiX2ZvbGlvX3N1YnBvb2woY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbylcbiB7XG4gXHRyZXR1cm4gZm9saW8tXHUwMDNlX2h1Z2V0bGJfc3VicG9vbDtcbiB9XG5AQCAtODU3LDcgJiM0Mzs4NTYsNyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgYXJjaF9oYXNfaHVnZV9ib290bWVtX2FsbG9jKHZvaWQpXG4gfVxuICNlbmRpZlxuIFxuLXN0YXRpYyBpbmxpbmUgc3RydWN0IGhzdGF0ZSAqZm9saW9faHN0YXRlKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4mIzQzO3N0YXRpYyBpbmxpbmUgc3RydWN0IGhzdGF0ZSAqZm9saW9faHN0YXRlKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8pXG4ge1xuIFx0Vk1fQlVHX09OX0ZPTElPKCFmb2xpb190ZXN0X2h1Z2V0bGIoZm9saW8pLCBmb2xpbyk7XG4gXHRyZXR1cm4gc2l6ZV90b19oc3RhdGUoZm9saW9fc2l6ZShmb2xpbykpO1xuQEAgLTEwNzAsMTEgJiM0MzsxMDY5LDYgQEAgdm9pZCBodWdldGxiX3JlZ2lzdGVyX25vZGUoc3RydWN0IG5vZGUgKm5vZGUpO1xuIHZvaWQgaHVnZXRsYl91bnJlZ2lzdGVyX25vZGUoc3RydWN0IG5vZGUgKm5vZGUpO1xuICNlbmRpZlxuIFxuLS8qXG4tICogQ2hlY2sgaWYgYSBnaXZlbiByYXcgQHBhZ2UgaW4gYSBodWdlcGFnZSBpcyBIV1BPSVNPTi5cbi0gKi9cbi1ib29sIGlzX3Jhd19od3BvaXNvbl9wYWdlX2luX2h1Z2VwYWdlKHN0cnVjdCBwYWdlICpwYWdlKTtcbi1cbiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgaHVnZV9wYWdlX21hc2tfYWxpZ24oc3RydWN0IGZpbGUgKmZpbGUpXG4ge1xuIFx0cmV0dXJuIFBBR0VfTUFTSyBcdTAwMjYgfmh1Z2VfcGFnZV9tYXNrKGhzdGF0ZV9maWxlKGZpbGUpKTtcbkBAIC0xMDg4LDcgJiM0MzsxMDgyLDcgQEAgc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGh1Z2VfcGFnZV9tYXNrX2FsaWduKHN0cnVjdCBmaWxlICpmaWxlKVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuLXN0YXRpYyBpbmxpbmUgc3RydWN0IGh1Z2VwYWdlX3N1YnBvb2wgKmh1Z2V0bGJfZm9saW9fc3VicG9vbChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuJiM0MztzdGF0aWMgaW5saW5lIHN0cnVjdCBodWdlcGFnZV9zdWJwb29sICpodWdldGxiX2ZvbGlvX3N1YnBvb2woY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbylcbiB7XG4gXHRyZXR1cm4gTlVMTDtcbiB9XG5AQCAtMTE1Nyw3ICYjNDM7MTE1MSw3IEBAIHN0YXRpYyBpbmxpbmUgc3RydWN0IGhzdGF0ZSAqaHN0YXRlX3ZtYShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcbiBcdHJldHVybiBOVUxMO1xuIH1cbiBcbi1zdGF0aWMgaW5saW5lIHN0cnVjdCBoc3RhdGUgKmZvbGlvX2hzdGF0ZShzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuJiM0MztzdGF0aWMgaW5saW5lIHN0cnVjdCBoc3RhdGUgKmZvbGlvX2hzdGF0ZShjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIHtcbiBcdHJldHVybiBOVUxMO1xuIH1cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21tX3R5cGVzLmggYi9pbmNsdWRlL2xpbnV4L21tX3R5cGVzLmhcbmluZGV4IGIxOGMyYjJlN2QyYzY1Li44NmEyZDBmZWU1NTdiZSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvbW1fdHlwZXMuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9tbV90eXBlcy5oXG5AQCAtMzg3LDcgJiM0MzszODcsNyBAQCB0eXBlZGVmIHVuc2lnbmVkIHNob3J0IG1tX2lkX3Q7XG4gICogQF9odWdldGxiX3N1YnBvb2w6IERvIG5vdCB1c2UgZGlyZWN0bHksIHVzZSBhY2Nlc3NvciBpbiBodWdldGxiLmguXG4gICogQF9odWdldGxiX2Nncm91cDogRG8gbm90IHVzZSBkaXJlY3RseSwgdXNlIGFjY2Vzc29yIGluIGh1Z2V0bGJfY2dyb3VwLmguXG4gICogQF9odWdldGxiX2Nncm91cF9yc3ZkOiBEbyBub3QgdXNlIGRpcmVjdGx5LCB1c2UgYWNjZXNzb3IgaW4gaHVnZXRsYl9jZ3JvdXAuaC5cbi0gKiBAX2h1Z2V0bGJfaHdwb2lzb246IERvIG5vdCB1c2UgZGlyZWN0bHksIGNhbGwgcmF3X2h3cF9saXN0X2hlYWQoKS5cbiYjNDM7ICogQGh1Z2V0bGJfaHdwb2lzb246IExpc3Qgb2YgcGFnZXMgd2l0aCBod3BvaXNvbi5cbiAgKiBAX2RlZmVycmVkX2xpc3Q6IEZvbGlvcyB0byBiZSBzcGxpdCB1bmRlciBtZW1vcnkgcHJlc3N1cmUuXG4gICogQF91bnVzZWRfc2xhYl9vYmpfZXh0czogUGxhY2Vob2xkZXIgdG8gbWF0Y2ggb2JqX2V4dHMgaW4gc3RydWN0IHNsYWIuXG4gICpcbkBAIC00OTksNyAmIzQzOzQ5OSw3IEBAIHN0cnVjdCBmb2xpbyB7XG4gXHRcdFx0dm9pZCAqX2h1Z2V0bGJfc3VicG9vbDtcbiBcdFx0XHR2b2lkICpfaHVnZXRsYl9jZ3JvdXA7XG4gXHRcdFx0dm9pZCAqX2h1Z2V0bGJfY2dyb3VwX3JzdmQ7XG4tXHRcdFx0dm9pZCAqX2h1Z2V0bGJfaHdwb2lzb247XG4mIzQzO1x0XHRcdHN0cnVjdCBod3BfcGFnZSAqaHVnZXRsYl9od3BvaXNvbjtcbiBcdC8qIHByaXZhdGU6IHRoZSB1bmlvbiB3aXRoIHN0cnVjdCBwYWdlIGlzIHRyYW5zaXRpb25hbCAqL1xuIFx0XHR9O1xuIFx0XHRzdHJ1Y3QgcGFnZSBfX3BhZ2VfMztcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaCBiL2luY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oXG5pbmRleCA3MjIzZjZmNGUyYjQwMy4uMDdjYzc4NTRiMmRlMTYgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmhcbkBAIC04OTMsMTQgJiM0Mzs4OTMsMTkgQEAgc3RhdGljIGlubGluZSBpbnQgUGFnZVRyYW5zQ29tcG91bmQoY29uc3Qgc3RydWN0IHBhZ2UgKnBhZ2UpXG4gVEVTVFBBR0VGTEFHX0ZBTFNFKFRyYW5zQ29tcG91bmQsIHRyYW5zY29tcG91bmQpXG4gI2VuZGlmXG4gXG4tI2lmIGRlZmluZWQoQ09ORklHX01FTU9SWV9GQUlMVVJFKSBcdTAwMjZcdTAwMjYgZGVmaW5lZChDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UpXG4mIzQzOyNpZiBkZWZpbmVkKENPTkZJR19NRU1PUllfRkFJTFVSRSkgXHUwMDI2XHUwMDI2IGRlZmluZWQoQ09ORklHX0xBUkdFX0ZPTElPKVxuIC8qXG4tICogUGFnZUhhc0hXUG9pc29uZWQgaW5kaWNhdGVzIHRoYXQgYXQgbGVhc3Qgb25lIHN1YnBhZ2UgaXMgaHdwb2lzb25lZCBpbiB0aGVcbi0gKiBjb21wb3VuZCBwYWdlLlxuJiM0MzsgKiBmb2xpb19oYXNfaHdwb2lzb25lZCBpbmRpY2F0ZXMgdGhhdCBhdCBsZWFzdCBvbmUgcGFnZSBpcyBod3BvaXNvbmVkIGluIHRoZVxuJiM0MzsgKiBmb2xpby4gIFRoYXQgcGFnZSB3aWxsIHVzdWFsbHkgYWxzbyBoYXZlIHRoZSBIV1BvaXNvbiBmbGFnIHNldCwgYnV0IHRoaXNcbiYjNDM7ICogaXMgbm90IHBvc3NpYmxlIGZvciBmb2xpb3Mgd2hpY2ggaGF2ZSBIVk8gKHNlZSBtZW1vcnktZmFpbHVyZSBmb3IgdGhlXG4mIzQzOyAqIHNjaGVtZSB1c2VkIGluIHRoYXQgY2FzZSkuICBZb3UgcHJvYmFibHkgZG9uJiMzOTt0IHdhbnQgdG8gY2FsbCB0aGlzIGRpcmVjdGx5O1xuJiM0MzsgKiB1c2UgZm9saW9faGFzX2h3cG9pc29uZWRfcGFnZSgpIGluc3RlYWQuXG4gICpcbiAgKiBUaGlzIGZsYWcgaXMgc2V0IGJ5IGh3cG9pc29uIGhhbmRsZXIuICBDbGVhcmVkIGJ5IFRIUCBzcGxpdCBvciBmcmVlIHBhZ2UuXG4gICovXG4gRk9MSU9fRkxBRyhoYXNfaHdwb2lzb25lZCwgRk9MSU9fU0VDT05EX1BBR0UpXG4mIzQzO0ZPTElPX1RFU1RfU0VUX0ZMQUcoaGFzX2h3cG9pc29uZWQsIEZPTElPX1NFQ09ORF9QQUdFKVxuJiM0MztGT0xJT19URVNUX0NMRUFSX0ZMQUcoaGFzX2h3cG9pc29uZWQsIEZPTElPX1NFQ09ORF9QQUdFKVxuICNlbHNlXG4gRk9MSU9fRkxBR19GQUxTRShoYXNfaHdwb2lzb25lZClcbiAjZW5kaWZcbkBAIC0xMDQxLDggJiM0MzsxMDQ2LDI5IEBAIFBBR0VfVFlQRV9PUFMoU2xhYiwgc2xhYiwgc2xhYilcbiBcbiAjaWZkZWYgQ09ORklHX0hVR0VUTEJfUEFHRVxuIEZPTElPX1RZUEVfT1BTKGh1Z2V0bGIsIGh1Z2V0bGIpXG4mIzQzO1xuJiM0MzsjaWZkZWYgQ09ORklHX01FTU9SWV9GQUlMVVJFXG4mIzQzO3N0YXRpYyBpbmxpbmUgYm9vbCBmb2xpb190ZXN0X2h1Z2VfcG9pc29uKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8pXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gKFJFQURfT05DRShmb2xpby1cdTAwM2VwYWdlLnBhZ2VfdHlwZSkgXHUwMDNlXHUwMDNlIDIzKSA9PVxuJiM0MztcdFx0KChQR1RZX2h1Z2V0bGIgXHUwMDNjXHUwMDNjIDEpIHwgMSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBmb2xpb19zZXRfaHVnZV9wb2lzb24oc3RydWN0IGZvbGlvICpmb2xpbylcbiYjNDM7e1xuJiM0MztcdGZvbGlvLVx1MDAzZXBhZ2UucGFnZV90eXBlIHw9ICgxIFx1MDAzY1x1MDAzYyAyMyk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBmb2xpb19jbGVhcl9odWdlX3BvaXNvbihzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuJiM0Mzt7XG4mIzQzO1x0Zm9saW8tXHUwMDNlcGFnZS5wYWdlX3R5cGUgXHUwMDI2PSB+KDEgXHUwMDNjXHUwMDNjIDIzKTtcbiYjNDM7fVxuJiM0MzsjZWxzZVxuJiM0MztGT0xJT19URVNUX0ZMQUdfRkFMU0UoaHVnZV9wb2lzb24pXG4mIzQzOyNlbmRpZlxuICNlbHNlXG4gRk9MSU9fVEVTVF9GTEFHX0ZBTFNFKGh1Z2V0bGIpXG4mIzQzO0ZPTElPX1RFU1RfRkxBR19GQUxTRShodWdlX3BvaXNvbilcbiAjZW5kaWZcbiBcbiBQQUdFX1RZUEVfT1BTKFpzbWFsbG9jLCB6c21hbGxvYywgenNtYWxsb2MpXG5AQCAtMTA2OCwxMCAmIzQzOzEwOTQsMTQgQEAgc3RhdGljIGlubGluZSBib29sIFBhZ2VIdWdlKGNvbnN0IHN0cnVjdCBwYWdlICpwYWdlKVxuIFx0cmV0dXJuIGZvbGlvX3Rlc3RfaHVnZXRsYihwYWdlX2ZvbGlvKHBhZ2UpKTtcbiB9XG4gXG4mIzQzO2Jvb2wgaHVnZXRsYl9wYWdlX2h3cG9pc29uKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8sIGNvbnN0IHN0cnVjdCBwYWdlICpwYWdlKTtcbiYjNDM7Ym9vbCBodWdldGxiX3VucmVmX3BhZ2VfaHdwb2lzb24oY29uc3Qgc3RydWN0IHBhZ2UgKnBhZ2UpO1xuJiM0MztcbiAvKlxuLSAqIENoZWNrIGlmIGEgcGFnZSBpcyBjdXJyZW50bHkgbWFya2VkIEhXUG9pc29uZWQuIE5vdGUgdGhhdCB0aGlzIGNoZWNrIGlzXG4tICogYmVzdCBlZmZvcnQgb25seSBhbmQgaW5oZXJlbnRseSByYWN5OiB0aGVyZSBpcyBubyB3YXkgdG8gc3luY2hyb25pemUgd2l0aFxuLSAqIGZhaWxpbmcgaGFyZHdhcmUuXG4mIzQzOyAqIENoZWNrIGlmIGEgcGFnZSBpcyBjdXJyZW50bHkgbWFya2VkIEhXUG9pc29uZWQuICBUaGlzIGNoZWNrIGlzIGJlc3RcbiYjNDM7ICogZWZmb3J0IG9ubHkgYW5kIGluaGVyZW50bHkgcmFjeTogdGhlcmUgaXMgbm8gd2F5IHRvIHN5bmNocm9uaXplIHdpdGhcbiYjNDM7ICogZmFpbGluZyBoYXJkd2FyZS4gIFRoZSBjYWxsZXIgbWF5IG5vdCBoYXZlIGEgcmVmY291bnQgb24gdGhlIGZvbGlvXG4mIzQzOyAqIGNvbnRhaW5pbmcgdGhlIHBhZ2UsIHNvIHdlIG11c3QgYmUgY2FyZWZ1bCB0byBub3QgdHJpcCBhbnkgYXNzZXJ0aW9ucy5cbiAgKi9cbiBzdGF0aWMgaW5saW5lIGJvb2wgaXNfcGFnZV9od3BvaXNvbihjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSlcbiB7XG5AQCAtMTA4MCwxMyAmIzQzOzExMTAsMjYgQEAgc3RhdGljIGlubGluZSBib29sIGlzX3BhZ2VfaHdwb2lzb24oY29uc3Qgc3RydWN0IHBhZ2UgKnBhZ2UpXG4gXHRpZiAoUGFnZUhXUG9pc29uKHBhZ2UpKVxuIFx0XHRyZXR1cm4gdHJ1ZTtcbiBcdGZvbGlvID0gcGFnZV9mb2xpbyhwYWdlKTtcbi1cdHJldHVybiBmb2xpb190ZXN0X2h1Z2V0bGIoZm9saW8pIFx1MDAyNlx1MDAyNiBQYWdlSFdQb2lzb24oXHUwMDI2Zm9saW8tXHUwMDNlcGFnZSk7XG4mIzQzO1x0aWYgKGZvbGlvX3Rlc3RfaHVnZV9wb2lzb24oZm9saW8pKVxuJiM0MztcdFx0cmV0dXJuIGh1Z2V0bGJfdW5yZWZfcGFnZV9od3BvaXNvbihwYWdlKTtcbiYjNDM7XHQvKiBJbiBjYXNlIHdlIHJhY2VkIHdpdGggaHVnZXRsYiB0cmFuc2ZlcnJpbmcgZmxhZ3MgKi9cbiYjNDM7XHRyZXR1cm4gUGFnZUhXUG9pc29uKHBhZ2UpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgaXNfcmVmX3BhZ2VfaHdwb2lzb24oY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbyxcbiYjNDM7XHRcdGNvbnN0IHN0cnVjdCBwYWdlICpwYWdlKVxuJiM0Mzt7XG4mIzQzO1x0aWYgKFBhZ2VIV1BvaXNvbihwYWdlKSlcbiYjNDM7XHRcdHJldHVybiB0cnVlO1xuJiM0MztcdGlmIChmb2xpb190ZXN0X2h1Z2V0bGIoZm9saW8pKVxuJiM0MztcdFx0cmV0dXJuIGh1Z2V0bGJfcGFnZV9od3BvaXNvbihmb2xpbywgcGFnZSk7XG4mIzQzO1x0cmV0dXJuIGZhbHNlO1xuIH1cbiBcbi1zdGF0aWMgaW5saW5lIGJvb2wgZm9saW9fY29udGFpbl9od3BvaXNvbmVkX3BhZ2Uoc3RydWN0IGZvbGlvICpmb2xpbylcbiYjNDM7c3RhdGljIGlubGluZSBib29sIGZvbGlvX2hhc19od3BvaXNvbmVkX3BhZ2UoY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbylcbiB7XG4tXHRyZXR1cm4gZm9saW9fdGVzdF9od3BvaXNvbihmb2xpbykgfHxcbi1cdCAgICAoZm9saW9fdGVzdF9sYXJnZShmb2xpbykgXHUwMDI2XHUwMDI2IGZvbGlvX3Rlc3RfaGFzX2h3cG9pc29uZWQoZm9saW8pKTtcbiYjNDM7XHRyZXR1cm4gUGFnZUhXUG9pc29uKFx1MDAyNmZvbGlvLVx1MDAzZXBhZ2UpIHx8XG4mIzQzO1x0ICAgICAgIChmb2xpb190ZXN0X2xhcmdlKGZvbGlvKSBcdTAwMjZcdTAwMjYgZm9saW9fdGVzdF9oYXNfaHdwb2lzb25lZChmb2xpbykpO1xuIH1cbiBcbiBib29sIGlzX2ZyZWVfYnVkZHlfcGFnZShjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSk7XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wYWdlbWFwLmggYi9pbmNsdWRlL2xpbnV4L3BhZ2VtYXAuaFxuaW5kZXggMmMzNzE4ZDU5MmQ2ZGQuLjIyZDQ4OTM1ZmZkYTdjIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9wYWdlbWFwLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvcGFnZW1hcC5oXG5AQCAtMjEwLDYgJiM0MzsyMTAsNyBAQCBlbnVtIG1hcHBpbmdfZmxhZ3Mge1xuIFx0QVNfV1JJVEVCQUNLX01BWV9ERUFETE9DS19PTl9SRUNMQUlNID0gOSxcbiBcdEFTX0tFUk5FTF9GSUxFID0gMTAsXHQvKiBtYXBwaW5nIGZvciBhIGZha2Uga2VybmVsIGZpbGUgdGhhdCBzaG91bGRuJiMzOTt0XG4gXHRcdFx0XHQgICBhY2NvdW50IHVzYWdlIHRvIHVzZXIgY2dyb3VwcyAqL1xuJiM0MztcdEFTX0FVVEhPUklUQVRJVkUgPSAxMSxcdC8qIElmIHdlIG1pc3MgaW4gdGhlIHBhZ2UgY2FjaGUsIGl0JiMzOTtzIGEgaG9sZSAqL1xuIFx0LyogQml0cyAxNi0yNSBhcmUgdXNlZCBmb3IgRk9MSU9fT1JERVIgKi9cbiBcdEFTX0ZPTElPX09SREVSX0JJVFMgPSA1LFxuIFx0QVNfRk9MSU9fT1JERVJfTUlOID0gMTYsXG5AQCAtMzQ1LDYgJiM0MzszNDYsMTYgQEAgc3RhdGljIGlubGluZSBib29sIG1hcHBpbmdfd3JpdGViYWNrX21heV9kZWFkbG9ja19vbl9yZWNsYWltKGNvbnN0IHN0cnVjdCBhZGRyZXNcbiBcdHJldHVybiB0ZXN0X2JpdChBU19XUklURUJBQ0tfTUFZX0RFQURMT0NLX09OX1JFQ0xBSU0sIFx1MDAyNm1hcHBpbmctXHUwMDNlZmxhZ3MpO1xuIH1cbiBcbiYjNDM7c3RhdGljIGlubGluZSB2b2lkIG1hcHBpbmdfc2V0X2F1dGhvcml0YXRpdmUoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcpXG4mIzQzO3tcbiYjNDM7XHRzZXRfYml0KEFTX0FVVEhPUklUQVRJVkUsIFx1MDAyNm1hcHBpbmctXHUwMDNlZmxhZ3MpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgbWFwcGluZ19pc19hdXRob3JpdGF0aXZlKGNvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIHRlc3RfYml0KEFTX0FVVEhPUklUQVRJVkUsIFx1MDAyNm1hcHBpbmctXHUwMDNlZmxhZ3MpO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyBpbmxpbmUgZ2ZwX3QgbWFwcGluZ19nZnBfbWFzayhjb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZylcbiB7XG4gXHRyZXR1cm4gbWFwcGluZy1cdTAwM2VnZnBfbWFzaztcbkBAIC0zNzMsNyAmIzQzOzM4NCw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBtYXBwaW5nX3NldF9nZnBfbWFzayhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbSwgZ2ZwX3QgbWFzaylcbiAgKiBhc3N1bXB0aW9ucyBhYm91dCBtYXhpbXVtIG9yZGVyIGlmIFRIUCBhcmUgZGlzYWJsZWQsIGJ1dCA4IHNlZW1zIGxpa2VcbiAgKiBhIGdvb2Qgb3JkZXIgKHRoYXQmIzM5O3MgMU1CIGlmIHlvdSYjMzk7cmUgdXNpbmcgNGtCIHBhZ2VzKVxuICAqL1xuLSNpZmRlZiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VcbiYjNDM7I2lmZGVmIENPTkZJR19MQVJHRV9GT0xJT1xuICNkZWZpbmUgUFJFRkVSUkVEX01BWF9QQUdFQ0FDSEVfT1JERVJcdEhQQUdFX1BNRF9PUkRFUlxuICNlbHNlXG4gI2RlZmluZSBQUkVGRVJSRURfTUFYX1BBR0VDQUNIRV9PUkRFUlx0OFxuQEAgLTM5NCw3ICYjNDM7NDA1LDcgQEAgc3RhdGljIGlubGluZSB2b2lkIG1hcHBpbmdfc2V0X2dmcF9tYXNrKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptLCBnZnBfdCBtYXNrKVxuICAqL1xuIHN0YXRpYyBpbmxpbmUgc2l6ZV90IG1hcHBpbmdfbWF4X2ZvbGlvX3NpemVfc3VwcG9ydGVkKHZvaWQpXG4ge1xuLVx0aWYgKElTX0VOQUJMRUQoQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFKSlcbiYjNDM7XHRpZiAoSVNfRU5BQkxFRChDT05GSUdfTEFSR0VfRk9MSU8pKVxuIFx0XHRyZXR1cm4gMVUgXHUwMDNjXHUwMDNjIChQQUdFX1NISUZUICYjNDM7IE1BWF9QQUdFQ0FDSEVfT1JERVIpO1xuIFx0cmV0dXJuIFBBR0VfU0laRTtcbiB9XG5AQCAtNDA1LDI5ICYjNDM7NDE2LDIzIEBAIHN0YXRpYyBpbmxpbmUgc2l6ZV90IG1hcHBpbmdfbWF4X2ZvbGlvX3NpemVfc3VwcG9ydGVkKHZvaWQpXG4gICogQG1pbjogTWluaW11bSBmb2xpbyBvcmRlciAoYmV0d2VlbiAwLU1BWF9QQUdFQ0FDSEVfT1JERVIgaW5jbHVzaXZlKS5cbiAgKiBAbWF4OiBNYXhpbXVtIGZvbGlvIG9yZGVyIChiZXR3ZWVuIEBtaW4tTUFYX1BBR0VDQUNIRV9PUkRFUiBpbmNsdXNpdmUpLlxuICAqXG4tICogVGhlIGZpbGVzeXN0ZW0gc2hvdWxkIGNhbGwgdGhpcyBmdW5jdGlvbiBpbiBpdHMgaW5vZGUgY29uc3RydWN0b3IgdG9cbi0gKiBpbmRpY2F0ZSB3aGljaCBiYXNlIHNpemUgKG1pbikgYW5kIG1heGltdW0gc2l6ZSAobWF4KSBvZiBmb2xpbyB0aGUgVkZTXG4tICogY2FuIHVzZSB0byBjYWNoZSB0aGUgY29udGVudHMgb2YgdGhlIGZpbGUuICBUaGlzIHNob3VsZCBvbmx5IGJlIHVzZWRcbi0gKiBpZiB0aGUgZmlsZXN5c3RlbSBuZWVkcyBzcGVjaWFsIGhhbmRsaW5nIG9mIGZvbGlvIHNpemVzIChpZSB0aGVyZSBpc1xuLSAqIHNvbWV0aGluZyB0aGUgY29yZSBjYW5ub3Qga25vdykuXG4mIzQzOyAqIFRoZSBmaWxlc3lzdGVtIHNob3VsZCBjYWxsIHRoaXMgZnVuY3Rpb24gaW4gaXRzIGlub2RlIGNvbnN0cnVjdG9yXG4mIzQzOyAqIHRvIGluZGljYXRlIHdoaWNoIHNpemUgZm9saW9zIGNhbiBiZSB1c2VkIHRvIGNhY2hlIHRoZSBjb250ZW50cyBvZlxuJiM0MzsgKiB0aGUgaW5vZGUuICBUaGlzIHNob3VsZCBvbmx5IGJlIHVzZWQgaWYgdGhlIGZpbGVzeXN0ZW0gbmVlZHMgc3BlY2lhbFxuJiM0MzsgKiBoYW5kbGluZyBvZiBmb2xpbyBzaXplcyAoaWUgdGhlcmUgaXMgc29tZXRoaW5nIHRoZSBjb3JlIGNhbm5vdCBrbm93KS5cbiAgKiBEbyBub3QgdHVuZSBpdCBiYXNlZCBvbiwgZWcsIGlfc2l6ZS5cbiAgKlxuJiM0MzsgKiBodWdldGxiIGNhbGxzIHRoaXMgd2l0aCBvcmRlcnMgbGFyZ2VyIHRoYW4gTUFYX1BBR0VDQUNIRV9PUkRFUi5cbiYjNDM7ICogTm9ybWFsIGZpbGVzeXN0ZW1zIHNob3VsZCBub3QgZG8gdGhpcy5cbiYjNDM7ICpcbiAgKiBDb250ZXh0OiBUaGlzIHNob3VsZCBub3QgYmUgY2FsbGVkIHdoaWxlIHRoZSBpbm9kZSBpcyBhY3RpdmUgYXMgaXRcbiAgKiBpcyBub24tYXRvbWljLlxuICAqL1xuIHN0YXRpYyBpbmxpbmUgdm9pZCBtYXBwaW5nX3NldF9mb2xpb19vcmRlcl9yYW5nZShzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcbi1cdFx0XHRcdFx0XHQgdW5zaWduZWQgaW50IG1pbixcbi1cdFx0XHRcdFx0XHQgdW5zaWduZWQgaW50IG1heClcbiYjNDM7XHRcdHVuc2lnbmVkIGludCBtaW4sIHVuc2lnbmVkIGludCBtYXgpXG4ge1xuLVx0aWYgKCFJU19FTkFCTEVEKENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSkpXG4mIzQzO1x0aWYgKCFJU19FTkFCTEVEKENPTkZJR19MQVJHRV9GT0xJTykpXG4gXHRcdHJldHVybjtcbi1cbi1cdGlmIChtaW4gXHUwMDNlIE1BWF9QQUdFQ0FDSEVfT1JERVIpXG4tXHRcdG1pbiA9IE1BWF9QQUdFQ0FDSEVfT1JERVI7XG4tXG4tXHRpZiAobWF4IFx1MDAzZSBNQVhfUEFHRUNBQ0hFX09SREVSKVxuLVx0XHRtYXggPSBNQVhfUEFHRUNBQ0hFX09SREVSO1xuLVxuIFx0aWYgKG1heCBcdTAwM2MgbWluKVxuIFx0XHRtYXggPSBtaW47XG4gXG5AQCAtNDYwLDcgJiM0Mzs0NjUsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgbWFwcGluZ19zZXRfbGFyZ2VfZm9saW9zKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nKVxuIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50XG4gbWFwcGluZ19tYXhfZm9saW9fb3JkZXIoY29uc3Qgc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcpXG4ge1xuLVx0aWYgKCFJU19FTkFCTEVEKENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSkpXG4mIzQzO1x0aWYgKCFJU19FTkFCTEVEKENPTkZJR19MQVJHRV9GT0xJTykpXG4gXHRcdHJldHVybiAwO1xuIFx0cmV0dXJuIChtYXBwaW5nLVx1MDAzZWZsYWdzIFx1MDAyNiBBU19GT0xJT19PUkRFUl9NQVhfTUFTSykgXHUwMDNlXHUwMDNlIEFTX0ZPTElPX09SREVSX01BWDtcbiB9XG5AQCAtNDY4LDcgJiM0Mzs0NzMsNyBAQCBtYXBwaW5nX21heF9mb2xpb19vcmRlcihjb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZylcbiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludFxuIG1hcHBpbmdfbWluX2ZvbGlvX29yZGVyKGNvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nKVxuIHtcbi1cdGlmICghSVNfRU5BQkxFRChDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UpKVxuJiM0MztcdGlmICghSVNfRU5BQkxFRChDT05GSUdfTEFSR0VfRk9MSU8pKVxuIFx0XHRyZXR1cm4gMDtcbiBcdHJldHVybiAobWFwcGluZy1cdTAwM2VmbGFncyBcdTAwMjYgQVNfRk9MSU9fT1JERVJfTUlOX01BU0spIFx1MDAzZVx1MDAzZSBBU19GT0xJT19PUkRFUl9NSU47XG4gfVxuQEAgLTUyNCw3ICYjNDM7NTI5LDcgQEAgc3RhdGljIGlubGluZSBib29sIG1hcHBpbmdfbGFyZ2VfZm9saW9fc3VwcG9ydChjb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGlcbiAgKlxuICAqIFJldHVybjogVHJ1ZSBpZiBQTUQtc2l6ZWQgZm9saW9zIGFyZSBzdXBwb3J0ZWQsIG90aGVyd2lzZSBmYWxzZS5cbiAgKi9cbi0jaWZkZWYgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFXG4mIzQzOyNpZmRlZiBDT05GSUdfTEFSR0VfRk9MSU9cbiBzdGF0aWMgaW5saW5lIGJvb2wgbWFwcGluZ19wbWRfZm9saW9fc3VwcG9ydChjb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZylcbiB7XG4gXHQvKiBBU19GT0xJT19PUkRFUiBpcyBvbmx5IHJlYXNvbmFibGUgZm9yIHBhZ2VjYWNoZSBmb2xpb3MgKi9cbmRpZmYgLS1naXQgYS9tbS9LY29uZmlnIGIvbW0vS2NvbmZpZ1xuaW5kZXggOWUwY2E0ODI0OTA1NGYuLmU2NjZkZDE0Y2EwYzNkIDEwMDY0NFxuLS0tIGEvbW0vS2NvbmZpZ1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vS2NvbmZpZ1xuQEAgLTg0MywxMSAmIzQzOzg0MywxNSBAQCBjb25maWcgUEVSU0lTVEVOVF9IVUdFX1pFUk9fRk9MSU9cbiBjb25maWcgTU1fSURcbiBcdGRlZl9ib29sIG5cbiBcbiYjNDM7Y29uZmlnIExBUkdFX0ZPTElPXG4mIzQzO1x0ZGVmX2Jvb2wgblxuJiM0MztcdHNlbGVjdCBYQVJSQVlfTVVMVElcbiYjNDM7XG4gbWVudWNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRVxuIFx0Ym9vbCBcJiMzNDtUcmFuc3BhcmVudCBIdWdlcGFnZSBTdXBwb3J0XCYjMzQ7XG4gXHRkZXBlbmRzIG9uIEhBVkVfQVJDSF9UUkFOU1BBUkVOVF9IVUdFUEFHRSBcdTAwMjZcdTAwMjYgIVBSRUVNUFRfUlRcbiBcdHNlbGVjdCBDT01QQUNUSU9OXG4tXHRzZWxlY3QgWEFSUkFZX01VTFRJXG4mIzQzO1x0c2VsZWN0IExBUkdFX0ZPTElPXG4gXHRzZWxlY3QgTU1fSURcbiBcdGhlbHBcbiBcdCAgVHJhbnNwYXJlbnQgSHVnZXBhZ2VzIGFsbG93cyB0aGUga2VybmVsIHRvIHVzZSBodWdlIHBhZ2VzIGFuZFxuZGlmZiAtLWdpdCBhL21tL2ZpbGVtYXAuYyBiL21tL2ZpbGVtYXAuY1xuaW5kZXggNThlYjlkMjQwNjQzNDguLjVhOGNjMjBlNjI0ZTRkIDEwMDY0NFxuLS0tIGEvbW0vZmlsZW1hcC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9maWxlbWFwLmNcbkBAIC0yNDgzLDYgJiM0MzsyNDgzLDggQEAgc3RhdGljIHZvaWQgZmlsZW1hcF9nZXRfcmVhZF9iYXRjaChzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcbiBcbiBcdFx0aWYgKCFmb2xpb19iYXRjaF9hZGQoZmJhdGNoLCBmb2xpbykpXG4gXHRcdFx0YnJlYWs7XG4mIzQzO1x0XHRpZiAoZm9saW9faGFzX2h3cG9pc29uZWRfcGFnZShmb2xpbykpXG4mIzQzO1x0XHRcdGJyZWFrO1xuIFx0XHRpZiAoIWZvbGlvX3Rlc3RfdXB0b2RhdGUoZm9saW8pKVxuIFx0XHRcdGJyZWFrO1xuIFx0XHRpZiAoZm9saW9fdGVzdF9yZWFkYWhlYWQoZm9saW8pKVxuQEAgLTI2OTUsNiAmIzQzOzI2OTcsOCBAQCBzdGF0aWMgaW50IGZpbGVtYXBfZ2V0X3BhZ2VzKHN0cnVjdCBraW9jYiAqaW9jYiwgc2l6ZV90IGNvdW50LFxuIFx0aWYgKCFmb2xpb19iYXRjaF9jb3VudChmYmF0Y2gpKSB7XG4gXHRcdERFRklORV9SRUFEQUhFQUQocmFjdGwsIGZpbHAsIFx1MDAyNmZpbHAtXHUwMDNlZl9yYSwgbWFwcGluZywgaW5kZXgpO1xuIFxuJiM0MztcdFx0aWYgKG1hcHBpbmdfaXNfYXV0aG9yaXRhdGl2ZShtYXBwaW5nKSlcbiYjNDM7XHRcdFx0cmV0dXJuIDA7XG4gXHRcdGlmIChpb2NiLVx1MDAzZWtpX2ZsYWdzIFx1MDAyNiBJT0NCX05PSU8pXG4gXHRcdFx0cmV0dXJuIC1FQUdBSU47XG4gXHRcdGlmIChpb2NiLVx1MDAzZWtpX2ZsYWdzIFx1MDAyNiBJT0NCX05PV0FJVClcbkBAIC0yNzQ5LDYgJiM0MzsyNzUzLDI5IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBwb3Nfc2FtZV9mb2xpbyhsb2ZmX3QgcG9zMSwgbG9mZl90IHBvczIsIHN0cnVjdCBmb2xpbyAqZm9saW8pXG4gXHRyZXR1cm4gKHBvczEgXHUwMDNlXHUwMDNlIHNoaWZ0ID09IHBvczIgXHUwMDNlXHUwMDNlIHNoaWZ0KTtcbiB9XG4gXG4mIzQzO3N0YXRpYyBzaXplX3QgYWRqdXN0X3JhbmdlX2h3cG9pc29uKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8sIHNpemVfdCBvZmZzZXQsXG4mIzQzO1x0XHRzaXplX3QgYnl0ZXMpXG4mIzQzO3tcbiYjNDM7XHRjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSA9IGZvbGlvX3BhZ2UoZm9saW8sIG9mZnNldCAvIFBBR0VfU0laRSk7XG4mIzQzO1x0c2l6ZV90IHNhZmVfYnl0ZXM7XG4mIzQzO1xuJiM0MztcdGlmICghZm9saW9faGFzX2h3cG9pc29uZWRfcGFnZShmb2xpbykpXG4mIzQzO1x0XHRyZXR1cm4gYnl0ZXM7XG4mIzQzO1x0aWYgKGlzX3JlZl9wYWdlX2h3cG9pc29uKGZvbGlvLCBwYWdlKSlcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7XHQvKiBTYWZlIHRvIHJlYWQgdGhlIHJlbWFpbmluZyBieXRlcyBpbiB0aGlzIHBhZ2UuICovXG4mIzQzO1x0c2FmZV9ieXRlcyA9IFBBR0VfU0laRSAtIChvZmZzZXQgJSBQQUdFX1NJWkUpO1xuJiM0MztcdHBhZ2UmIzQzOyYjNDM7O1xuJiM0MztcbiYjNDM7XHQvKiBDaGVjayBlYWNoIHJlbWFpbmluZyBwYWdlIGFzIGxvbmcgYXMgd2UgYXJlIG5vdCBkb25lIHlldC4gKi9cbiYjNDM7XHRmb3IgKDsgc2FmZV9ieXRlcyBcdTAwM2MgYnl0ZXM7IHNhZmVfYnl0ZXMgJiM0Mzs9IFBBR0VfU0laRSwgcGFnZSYjNDM7JiM0MzspXG4mIzQzO1x0XHRpZiAoaXNfcmVmX3BhZ2VfaHdwb2lzb24oZm9saW8sIHBhZ2UpKVxuJiM0MztcdFx0XHRicmVhaztcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIG1pbihzYWZlX2J5dGVzLCBieXRlcyk7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIHZvaWQgZmlsZW1hcF9lbmRfZHJvcGJlaGluZF9yZWFkKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4ge1xuIFx0aWYgKCFmb2xpb190ZXN0X2Ryb3BiZWhpbmQoZm9saW8pKVxuQEAgLTI4MjgsNiAmIzQzOzI4NTUsMjIgQEAgc3NpemVfdCBmaWxlbWFwX3JlYWQoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsXG4gXHRcdFx0Z290byBwdXRfZm9saW9zO1xuIFx0XHRlbmRfb2Zmc2V0ID0gbWluX3QobG9mZl90LCBpc2l6ZSwgaW9jYi1cdTAwM2VraV9wb3MgJiM0MzsgaXRlci1cdTAwM2Vjb3VudCk7XG4gXG4mIzQzO1x0XHRpZiAoIWZvbGlvX2JhdGNoX2NvdW50KFx1MDAyNmZiYXRjaCkpIHtcbiYjNDM7XHRcdFx0c2l6ZV90IGZzaXplID0gbWFwcGluZ19taW5fZm9saW9fbnJieXRlcyhtYXBwaW5nKTtcbiYjNDM7XHRcdFx0c2l6ZV90IG9mZnNldCA9IGlvY2ItXHUwMDNla2lfcG9zIFx1MDAyNiAoZnNpemUgLSAxKTtcbiYjNDM7XHRcdFx0c2l6ZV90IGJ5dGVzID0gbWluX3QobG9mZl90LCBlbmRfb2Zmc2V0IC0gaW9jYi1cdTAwM2VraV9wb3MsXG4mIzQzO1x0XHRcdFx0XHQgICAgIGZzaXplIC0gb2Zmc2V0KTtcbiYjNDM7XHRcdFx0c2l6ZV90IGNvcGllZCA9IGlvdl9pdGVyX3plcm8oYnl0ZXMsIGl0ZXIpO1xuJiM0MztcbiYjNDM7XHRcdFx0YWxyZWFkeV9yZWFkICYjNDM7PSBjb3BpZWQ7XG4mIzQzO1x0XHRcdGlvY2ItXHUwMDNla2lfcG9zICYjNDM7PSBjb3BpZWQ7XG4mIzQzO1x0XHRcdGxhc3RfcG9zID0gaW9jYi1cdTAwM2VraV9wb3M7XG4mIzQzO1xuJiM0MztcdFx0XHRpZiAoY29waWVkIFx1MDAzYyBieXRlcylcbiYjNDM7XHRcdFx0XHRlcnJvciA9IC1FRkFVTFQ7XG4mIzQzO1x0XHRcdGNvbnRpbnVlO1xuJiM0MztcdFx0fVxuJiM0MztcbiBcdFx0LypcbiBcdFx0ICogT25jZSB3ZSBzdGFydCBjb3B5aW5nIGRhdGEsIHdlIGRvbiYjMzk7dCB3YW50IHRvIGJlIHRvdWNoaW5nIGFueVxuIFx0XHQgKiBjYWNoZWxpbmVzIHRoYXQgbWlnaHQgYmUgY29udGVuZGVkOlxuQEAgLTI4NjIsMTQgJiM0MzsyOTA1LDE4IEBAIHNzaXplX3QgZmlsZW1hcF9yZWFkKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICppdGVyLFxuIFx0XHRcdGlmICh3cml0YWJseV9tYXBwZWQpXG4gXHRcdFx0XHRmbHVzaF9kY2FjaGVfZm9saW8oZm9saW8pO1xuIFxuLVx0XHRcdGNvcGllZCA9IGNvcHlfZm9saW9fdG9faXRlcihmb2xpbywgb2Zmc2V0LCBieXRlcywgaXRlcik7XG4mIzQzO1x0XHRcdGNvcGllZCA9IGFkanVzdF9yYW5nZV9od3BvaXNvbihmb2xpbywgb2Zmc2V0LCBieXRlcyk7XG4mIzQzO1x0XHRcdGlmIChjb3BpZWQgXHUwMDNjIGJ5dGVzKVxuJiM0MztcdFx0XHRcdGVycm9yID0gLUVJTztcbiYjNDM7XHRcdFx0Y29waWVkID0gY29weV9mb2xpb190b19pdGVyKGZvbGlvLCBvZmZzZXQsIGNvcGllZCwgaXRlcik7XG4gXG4gXHRcdFx0YWxyZWFkeV9yZWFkICYjNDM7PSBjb3BpZWQ7XG4gXHRcdFx0aW9jYi1cdTAwM2VraV9wb3MgJiM0Mzs9IGNvcGllZDtcbiBcdFx0XHRsYXN0X3BvcyA9IGlvY2ItXHUwMDNla2lfcG9zO1xuIFxuIFx0XHRcdGlmIChjb3BpZWQgXHUwMDNjIGJ5dGVzKSB7XG4tXHRcdFx0XHRlcnJvciA9IC1FRkFVTFQ7XG4mIzQzO1x0XHRcdFx0aWYgKCFlcnJvcilcbiYjNDM7XHRcdFx0XHRcdGVycm9yID0gLUVGQVVMVDtcbiBcdFx0XHRcdGJyZWFrO1xuIFx0XHRcdH1cbiBcdFx0fVxuZGlmZiAtLWdpdCBhL21tL2h1Z2VfbWVtb3J5LmMgYi9tbS9odWdlX21lbW9yeS5jXG5pbmRleCAyYmNjYjBhNTNhMGE2MC4uMzUzMzQwMzA5MTA3NGMgMTAwNjQ0XG4tLS0gYS9tbS9odWdlX21lbW9yeS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9odWdlX21lbW9yeS5jXG5AQCAtNDQxMyw3ICYjNDM7NDQxMyw3IEBAIHN0YXRpYyBib29sIHRocF91bmRlcnVzZWQoc3RydWN0IGZvbGlvICpmb2xpbylcbiBcdGlmIChraHVnZXBhZ2VkX21heF9wdGVzX25vbmUgPT0gSFBBR0VfUE1EX05SIC0gMSlcbiBcdFx0cmV0dXJuIGZhbHNlO1xuIFxuLVx0aWYgKGZvbGlvX2NvbnRhaW5faHdwb2lzb25lZF9wYWdlKGZvbGlvKSlcbiYjNDM7XHRpZiAoZm9saW9faGFzX2h3cG9pc29uZWRfcGFnZShmb2xpbykpXG4gXHRcdHJldHVybiBmYWxzZTtcbiBcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGZvbGlvX25yX3BhZ2VzKGZvbGlvKTsgaSYjNDM7JiM0MzspIHtcbmRpZmYgLS1naXQgYS9tbS9odWdldGxiLmMgYi9tbS9odWdldGxiLmNcbmluZGV4IDU3MTIxMmI4MDgzNWVjLi5hYWFjNmUyYWY0YzI0YSAxMDA2NDRcbi0tLSBhL21tL2h1Z2V0bGIuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vaHVnZXRsYi5jXG5AQCAtMTI1NSw3ICYjNDM7MTI1NSw3IEBAIHN0YXRpYyBzdHJ1Y3QgZm9saW8gKmRlcXVldWVfaHVnZXRsYl9mb2xpb19ub2RlX2V4YWN0KHN0cnVjdCBoc3RhdGUgKmgsXG4gXHRcdGlmIChwaW4gXHUwMDI2XHUwMDI2ICFmb2xpb19pc19sb25ndGVybV9waW5uYWJsZShmb2xpbykpXG4gXHRcdFx0Y29udGludWU7XG4gXG4tXHRcdGlmIChmb2xpb190ZXN0X2h3cG9pc29uKGZvbGlvKSlcbiYjNDM7XHRcdGlmIChmb2xpb190ZXN0X2hhc19od3BvaXNvbmVkKGZvbGlvKSlcbiBcdFx0XHRjb250aW51ZTtcbiBcbiBcdFx0aWYgKGlzX21pZ3JhdGVfaXNvbGF0ZV9wYWdlKFx1MDAyNmZvbGlvLVx1MDAzZXBhZ2UpKVxuQEAgLTE0OTgsMTAgJiM0MzsxNDk4LDEwIEBAIHN0YXRpYyB2b2lkIF9fdXBkYXRlX2FuZF9mcmVlX2h1Z2V0bGJfZm9saW8oc3RydWN0IGhzdGF0ZSAqaCxcbiBcdH1cbiBcbiBcdC8qXG4tXHQgKiBNb3ZlIFBhZ2VIV1BvaXNvbiBmbGFnIGZyb20gaGVhZCBwYWdlIHRvIHRoZSByYXcgZXJyb3IgcGFnZXMsXG4tXHQgKiB3aGljaCBtYWtlcyBhbnkgaGVhbHRoeSBzdWJwYWdlcyByZXVzYWJsZS5cbiYjNDM7XHQgKiBNb3ZlIEhXUG9pc29uIGZsYWcgdG8gZWFjaCBlcnJvciBwYWdlXG4mIzQzO1x0ICogd2hpY2ggbWFrZXMgYW55IGhlYWx0aHkgcGFnZXMgcmV1c2FibGUuXG4gXHQgKi9cbi1cdGlmICh1bmxpa2VseShmb2xpb190ZXN0X2h3cG9pc29uKGZvbGlvKSkpXG4mIzQzO1x0aWYgKHVubGlrZWx5KGZvbGlvX3Rlc3RfaGFzX2h3cG9pc29uZWQoZm9saW8pKSlcbiBcdFx0Zm9saW9fY2xlYXJfaHVnZXRsYl9od3BvaXNvbihmb2xpbyk7XG4gXG4gXHRWTV9CVUdfT05fRk9MSU8oZm9saW9fcmVmX2NvdW50KGZvbGlvKSwgZm9saW8pO1xuQEAgLTE3NzUsNyAmIzQzOzE3NzUsNyBAQCB2b2lkIGluaXRfbmV3X2h1Z2V0bGJfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbylcbiAgKiBzdGFibGUuICBEdWUgdG8gbG9ja2luZyBvcmRlciwgd2UgY2FuIG9ubHkgdHJ5bG9ja193cml0ZS4gIElmIHdlIGNhblxuICAqIG5vdCBnZXQgdGhlIGxvY2ssIHNpbXBseSByZXR1cm4gTlVMTCB0byBjYWxsZXIuXG4gICovXG4tc3RydWN0IGFkZHJlc3Nfc3BhY2UgKmh1Z2V0bGJfZm9saW9fbWFwcGluZ19sb2NrX3dyaXRlKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4mIzQzO3N0cnVjdCBhZGRyZXNzX3NwYWNlICpodWdldGxiX2ZvbGlvX21hcHBpbmdfbG9ja193cml0ZShjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIHtcbiBcdHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nID0gZm9saW9fbWFwcGluZyhmb2xpbyk7XG4gXG5AQCAtMzk5OCw3ICYjNDM7Mzk5OCw3IEBAIGxvbmcgZGVtb3RlX3Bvb2xfaHVnZV9wYWdlKHN0cnVjdCBoc3RhdGUgKnNyYywgbm9kZW1hc2tfdCAqbm9kZXNfYWxsb3dlZCxcbiBcdFx0c3RydWN0IGZvbGlvICpmb2xpbywgKm5leHQ7XG4gXG4gXHRcdGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShmb2xpbywgbmV4dCwgXHUwMDI2c3JjLVx1MDAzZWh1Z2VwYWdlX2ZyZWVsaXN0c1tub2RlXSwgbHJ1KSB7XG4tXHRcdFx0aWYgKGZvbGlvX3Rlc3RfaHdwb2lzb24oZm9saW8pKVxuJiM0MztcdFx0XHRpZiAoZm9saW9fdGVzdF9oYXNfaHdwb2lzb25lZChmb2xpbykpXG4gXHRcdFx0XHRjb250aW51ZTtcbiBcbiBcdFx0XHRyZW1vdmVfaHVnZXRsYl9mb2xpbyhzcmMsIGZvbGlvLCBmYWxzZSk7XG5AQCAtNTgwOSw3ICYjNDM7NTgwOSw3IEBAIHN0YXRpYyB2bV9mYXVsdF90IGh1Z2V0bGJfbm9fcGFnZShzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcbiBcdFx0ICogZG9uJiMzOTt0IGhhdmUgaHdwb2lzb25lZCBzd2FwIGVudHJ5IGZvciBlcnJvcmVkIHZpcnR1YWwgYWRkcmVzcy5cbiBcdFx0ICogU28gd2UgbmVlZCB0byBibG9jayBodWdlcGFnZSBmYXVsdCBieSBQR19od3BvaXNvbiBiaXQgY2hlY2suXG4gXHRcdCAqL1xuLVx0XHRpZiAodW5saWtlbHkoZm9saW9fdGVzdF9od3BvaXNvbihmb2xpbykpKSB7XG4mIzQzO1x0XHRpZiAodW5saWtlbHkoZm9saW9fdGVzdF9oYXNfaHdwb2lzb25lZChmb2xpbykpKSB7XG4gXHRcdFx0cmV0ID0gVk1fRkFVTFRfSFdQT0lTT05fTEFSR0UgfFxuIFx0XHRcdFx0Vk1fRkFVTFRfU0VUX0hJTkRFWChoc3RhdGVfaW5kZXgoaCkpO1xuIFx0XHRcdGdvdG8gYmFja291dF91bmxvY2tlZDtcbkBAIC02MzE4LDcgJiM0Mzs2MzE4LDcgQEAgaW50IGh1Z2V0bGJfbWZpbGxfYXRvbWljX3B0ZShwdGVfdCAqZHN0X3B0ZSxcbiBcdHB0bCA9IGh1Z2VfcHRlX2xvY2soaCwgZHN0X21tLCBkc3RfcHRlKTtcbiBcbiBcdHJldCA9IC1FSU87XG4tXHRpZiAoZm9saW9fdGVzdF9od3BvaXNvbihmb2xpbykpXG4mIzQzO1x0aWYgKGZvbGlvX3Rlc3RfaGFzX2h3cG9pc29uZWQoZm9saW8pKVxuIFx0XHRnb3RvIG91dF9yZWxlYXNlX3VubG9jaztcbiBcbiBcdHJldCA9IC1FRVhJU1Q7XG5kaWZmIC0tZ2l0IGEvbW0vbWVtb3J5LWZhaWx1cmUuYyBiL21tL21lbW9yeS1mYWlsdXJlLmNcbmluZGV4IDUxNTA4YTU1YzQwNTVlLi4zMmY5MTkzNWIyMTA3MCAxMDA2NDRcbi0tLSBhL21tL21lbW9yeS1mYWlsdXJlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL21lbW9yeS1mYWlsdXJlLmNcbkBAIC0xODA4LDYzICYjNDM7MTgwOCw4NiBAQCBFWFBPUlRfU1lNQk9MX0dQTChtZl9kYXhfa2lsbF9wcm9jcyk7XG4gXG4gI2lmZGVmIENPTkZJR19IVUdFVExCX1BBR0VcbiBcbiYjNDM7LyogUHJvdGVjdHMgYWxsIGxpc3RzIG9mIGh3cF9wYWdlcyAqL1xuJiM0MztzdGF0aWMgREVGSU5FX1NQSU5MT0NLKGh3cF9wYWdlX2xvY2spO1xuJiM0MztcbiAvKlxuLSAqIFN0cnVjdCByYXdfaHdwX3BhZ2UgcmVwcmVzZW50cyBpbmZvcm1hdGlvbiBhYm91dCBcJiMzNDtyYXcgZXJyb3IgcGFnZVwmIzM0Oyxcbi0gKiBjb25zdHJ1Y3Rpbmcgc2luZ2x5IGxpbmtlZCBsaXN0IGZyb20gLVx1MDAzZV9odWdldGxiX2h3cG9pc29uIGZpZWxkIG9mIGZvbGlvLlxuJiM0MzsgKiBod3BfcGFnZSByZXByZXNlbnRzIGluZm9ybWF0aW9uIGFib3V0IFwmIzM0O2Vycm9yIHBhZ2VcJiMzNDssXG4mIzQzOyAqIGNvbnN0cnVjdGluZyBzaW5nbHkgbGlua2VkIGxpc3QgZnJvbSBmb2xpby1cdTAwM2VodWdldGxiX2h3cG9pc29uIGZpZWxkLlxuICAqL1xuLXN0cnVjdCByYXdfaHdwX3BhZ2Uge1xuLVx0c3RydWN0IGxsaXN0X25vZGUgbm9kZTtcbiYjNDM7c3RydWN0IGh3cF9wYWdlIHtcbiYjNDM7XHRzdHJ1Y3QgaHdwX3BhZ2UgKm5leHQ7XG4gXHRzdHJ1Y3QgcGFnZSAqcGFnZTtcbiB9O1xuIFxuLXN0YXRpYyBpbmxpbmUgc3RydWN0IGxsaXN0X2hlYWQgKnJhd19od3BfbGlzdF9oZWFkKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4mIzQzO3N0YXRpYyBib29sIHByZWNpc2VfcGFnZV9wb2lzb25lZChjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuJiM0MztcdFx0Y29uc3Qgc3RydWN0IHBhZ2UgKnBhZ2UpXG4ge1xuLVx0cmV0dXJuIChzdHJ1Y3QgbGxpc3RfaGVhZCAqKVx1MDAyNmZvbGlvLVx1MDAzZV9odWdldGxiX2h3cG9pc29uO1xuLX1cbi1cbi1ib29sIGlzX3Jhd19od3BvaXNvbl9wYWdlX2luX2h1Z2VwYWdlKHN0cnVjdCBwYWdlICpwYWdlKVxuLXtcbi1cdHN0cnVjdCBsbGlzdF9oZWFkICpyYXdfaHdwX2hlYWQ7XG4tXHRzdHJ1Y3QgcmF3X2h3cF9wYWdlICpwO1xuLVx0c3RydWN0IGZvbGlvICpmb2xpbyA9IHBhZ2VfZm9saW8ocGFnZSk7XG4tXHRib29sIHJldCA9IGZhbHNlO1xuLVxuLVx0aWYgKCFmb2xpb190ZXN0X2h3cG9pc29uKGZvbGlvKSlcbi1cdFx0cmV0dXJuIGZhbHNlO1xuLVxuLVx0aWYgKCFmb2xpb190ZXN0X2h1Z2V0bGIoZm9saW8pKVxuLVx0XHRyZXR1cm4gUGFnZUhXUG9pc29uKHBhZ2UpO1xuJiM0MztcdGNvbnN0IHN0cnVjdCBod3BfcGFnZSAqcDtcbiYjNDM7XHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuIFxuIFx0Lypcbi1cdCAqIFdoZW4gUmF3SHdwVW5yZWxpYWJsZSBpcyBzZXQsIGtlcm5lbCBsb3N0IHRyYWNrIG9mIHdoaWNoIHN1YnBhZ2VzXG4tXHQgKiBhcmUgSFdQT0lTT04uIFNvIHJldHVybiBhcyBpZiBBTEwgc3VicGFnZXMgYXJlIEhXUE9JU09OZWQuXG4mIzQzO1x0ICogV2hlbiBSYXdId3BVbnJlbGlhYmxlIGlzIHNldCwga2VybmVsIGxvc3QgdHJhY2sgb2Ygd2hpY2ggcGFnZXNcbiYjNDM7XHQgKiBhcmUgSFdQT0lTT04uIFNvIHJldHVybiBhcyBpZiBBTEwgcGFnZXMgYXJlIEhXUE9JU09OZWQuXG4gXHQgKi9cbiBcdGlmIChmb2xpb190ZXN0X2h1Z2V0bGJfcmF3X2h3cF91bnJlbGlhYmxlKGZvbGlvKSlcbiBcdFx0cmV0dXJuIHRydWU7XG4gXG4tXHRtdXRleF9sb2NrKFx1MDAyNm1mX211dGV4KTtcbi1cbi1cdHJhd19od3BfaGVhZCA9IHJhd19od3BfbGlzdF9oZWFkKGZvbGlvKTtcbi1cdGxsaXN0X2Zvcl9lYWNoX2VudHJ5KHAsIHJhd19od3BfaGVhZC1cdTAwM2VmaXJzdCwgbm9kZSkge1xuLVx0XHRpZiAocGFnZSA9PSBwLVx1MDAzZXBhZ2UpIHtcbi1cdFx0XHRyZXQgPSB0cnVlO1xuJiM0MztcdHNwaW5fbG9ja19pcnFzYXZlKFx1MDAyNmh3cF9wYWdlX2xvY2ssIGZsYWdzKTtcbiYjNDM7XHRmb3IgKHAgPSBmb2xpby1cdTAwM2VodWdldGxiX2h3cG9pc29uOyBwOyBwID0gcC1cdTAwM2VuZXh0KSB7XG4mIzQzO1x0XHRpZiAocGFnZSA9PSBwLVx1MDAzZXBhZ2UpXG4gXHRcdFx0YnJlYWs7XG4tXHRcdH1cbiBcdH1cbiYjNDM7XHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNmh3cF9wYWdlX2xvY2ssIGZsYWdzKTtcbiBcbi1cdG11dGV4X3VubG9jayhcdTAwMjZtZl9tdXRleCk7XG4mIzQzO1x0cmV0dXJuIHAgIT0gTlVMTDtcbiYjNDM7fVxuIFxuJiM0MzsvKlxuJiM0MzsgKiBDaGVjayBpZiBhIGdpdmVuIEBwYWdlIGluIGEgaHVnZXRsYiBmb2xpbyBpcyBIV1BPSVNPTi5cbiYjNDM7ICovXG4mIzQzO2Jvb2wgaHVnZXRsYl9wYWdlX2h3cG9pc29uKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8sIGNvbnN0IHN0cnVjdCBwYWdlICpwYWdlKVxuJiM0Mzt7XG4mIzQzO1x0aWYgKCFmb2xpb190ZXN0X2hhc19od3BvaXNvbmVkKGZvbGlvKSlcbiYjNDM7XHRcdHJldHVybiBmYWxzZTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHByZWNpc2VfcGFnZV9wb2lzb25lZChmb2xpbywgcGFnZSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qXG4mIzQzOyAqIFdlIGhhdmUgbm8gcmVmZXJlbmNlIG9uIHRoZSBmb2xpbyBjb250YWluaW5nIHRoaXMgcGFnZS5cbiYjNDM7ICogVGhlIGh1Z2V0bGJfbG9jayBrZWVwcyBodWdldGxiIGZvbGlvcyBmcm9tIGJlaW5nIGZyZWVkLlxuJiM0MzsgKi9cbiYjNDM7Ym9vbCBodWdldGxiX3VucmVmX3BhZ2VfaHdwb2lzb24oY29uc3Qgc3RydWN0IHBhZ2UgKnBhZ2UpXG4mIzQzO3tcbiYjNDM7XHRjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvO1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4mIzQzO1x0Ym9vbCByZXQ7XG4mIzQzO1xuJiM0MztcdHNwaW5fbG9ja19pcnFzYXZlKFx1MDAyNmh1Z2V0bGJfbG9jaywgZmxhZ3MpO1xuJiM0MztcdGZvbGlvID0gcGFnZV9mb2xpbyhwYWdlKTtcbiYjNDM7XHRpZiAoIWZvbGlvX3Rlc3RfaHVnZV9wb2lzb24oZm9saW8pKSB7XG4mIzQzO1x0XHRyZXQgPSBQYWdlSFdQb2lzb24ocGFnZSk7XG4mIzQzO1x0XHRnb3RvIHVubG9jaztcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldCA9IHByZWNpc2VfcGFnZV9wb2lzb25lZChmb2xpbywgcGFnZSk7XG4mIzQzO3VubG9jazpcbiYjNDM7XHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNmh1Z2V0bGJfbG9jaywgZmxhZ3MpO1xuIFx0cmV0dXJuIHJldDtcbiB9XG4gXG4gc3RhdGljIHVuc2lnbmVkIGxvbmcgX19mb2xpb19mcmVlX3Jhd19od3Aoc3RydWN0IGZvbGlvICpmb2xpbywgYm9vbCBtb3ZlX2ZsYWcpXG4ge1xuLVx0c3RydWN0IGxsaXN0X25vZGUgKmhlYWQ7XG4tXHRzdHJ1Y3QgcmF3X2h3cF9wYWdlICpwLCAqbmV4dDtcbiYjNDM7XHRzdHJ1Y3QgaHdwX3BhZ2UgKnAsICpuZXh0O1xuIFx0dW5zaWduZWQgbG9uZyBjb3VudCA9IDA7XG4gXG4tXHRoZWFkID0gbGxpc3RfZGVsX2FsbChyYXdfaHdwX2xpc3RfaGVhZChmb2xpbykpO1xuLVx0bGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShwLCBuZXh0LCBoZWFkLCBub2RlKSB7XG4mIzQzO1x0bmV4dCA9IGZvbGlvLVx1MDAzZWh1Z2V0bGJfaHdwb2lzb247XG4mIzQzO1x0Zm9saW8tXHUwMDNlaHVnZXRsYl9od3BvaXNvbiA9IE5VTEw7XG4mIzQzO1xuJiM0MztcdHdoaWxlIChuZXh0KSB7XG4mIzQzO1x0XHRwID0gbmV4dDtcbiYjNDM7XHRcdG5leHQgPSBwLVx1MDAzZW5leHQ7XG4gXHRcdGlmIChtb3ZlX2ZsYWcpXG4gXHRcdFx0U2V0UGFnZUhXUG9pc29uKHAtXHUwMDNlcGFnZSk7XG4gXHRcdGVsc2VcbkBAIC0xODgxLDM0ICYjNDM7MTkwNCw1OCBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBfX2ZvbGlvX2ZyZWVfcmF3X2h3cChzdHJ1Y3QgZm9saW8gKmZvbGlvLCBib29sIG1vdmVfZmxhZylcbiAjZGVmaW5lXHRNRl9IVUdFVExCX0ZPTElPX1BSRV9QT0lTT05FRFx0M1x0LyogZm9saW8gYWxyZWFkeSBwb2lzb25lZCAqL1xuICNkZWZpbmVcdE1GX0hVR0VUTEJfUEFHRV9QUkVfUE9JU09ORURcdDRcdC8qIGV4YWN0IHBhZ2UgYWxyZWFkeSBwb2lzb25lZCAqL1xuICNkZWZpbmVcdE1GX0hVR0VUTEJfUkVUUllcdFx0NVx0LyogaHVnZXBhZ2UgaXMgYnVzeSwgcmV0cnkgKi9cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbmxpbmUgaW50IGh1Z2V0bGJfc2V0X3BvaXNvbihzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuJiM0Mzt7XG4mIzQzO1x0aWYgKGZvbGlvX3Rlc3Rfc2V0X2hhc19od3BvaXNvbmVkKGZvbGlvKSlcbiYjNDM7XHRcdHJldHVybiBNRl9IVUdFVExCX0ZPTElPX1BSRV9QT0lTT05FRDtcbiYjNDM7XHRmb2xpb19zZXRfaHVnZV9wb2lzb24oZm9saW8pO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW5saW5lIGludCBodWdldGxiX2NsZWFyX3BvaXNvbihzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuJiM0Mzt7XG4mIzQzO1x0aWYgKCFmb2xpb190ZXN0X2hhc19od3BvaXNvbmVkKGZvbGlvKSlcbiYjNDM7XHRcdHJldHVybiAtRUJVU1k7XG4mIzQzO1x0Zm9saW9fY2xlYXJfaHVnZV9wb2lzb24oZm9saW8pO1xuJiM0MztcdGZvbGlvX2NsZWFyX2hhc19od3BvaXNvbmVkKGZvbGlvKTtcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiAvKlxuICAqIFNldCBodWdldGxiIGZvbGlvIGFzIGh3cG9pc29uZWQsIHVwZGF0ZSBmb2xpbyBwcml2YXRlIHJhdyBod3BvaXNvbiBsaXN0XG4gICogdG8ga2VlcCB0cmFjayBvZiB0aGUgcG9pc29uZWQgcGFnZXMuXG4gICovXG4gc3RhdGljIGludCBodWdldGxiX3VwZGF0ZV9od3BvaXNvbihzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgcGFnZSAqcGFnZSlcbiB7XG4tXHRzdHJ1Y3QgbGxpc3RfaGVhZCAqaGVhZDtcbi1cdHN0cnVjdCByYXdfaHdwX3BhZ2UgKnJhd19od3A7XG4tXHRzdHJ1Y3QgcmF3X2h3cF9wYWdlICpwO1xuLVx0aW50IHJldCA9IGZvbGlvX3Rlc3Rfc2V0X2h3cG9pc29uKGZvbGlvKSA/IE1GX0hVR0VUTEJfRk9MSU9fUFJFX1BPSVNPTkVEIDogMDtcbiYjNDM7XHRzdHJ1Y3QgaHdwX3BhZ2UgKnA7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBmbGFncztcbiYjNDM7XHRpbnQgcmV0ID0gaHVnZXRsYl9zZXRfcG9pc29uKGZvbGlvKTtcbiBcbiBcdC8qXG4gXHQgKiBPbmNlIHRoZSBod3BvaXNvbiBodWdlcGFnZSBoYXMgbG9zdCByZWxpYWJsZSByYXcgZXJyb3IgaW5mbyxcbi1cdCAqIHRoZXJlIGlzIGxpdHRsZSBtZWFuaW5nIHRvIGtlZXAgYWRkaXRpb25hbCBlcnJvciBpbmZvIHByZWNpc2VseSxcbi1cdCAqIHNvIHNraXAgdG8gYWRkIGFkZGl0aW9uYWwgcmF3IGVycm9yIGluZm8uXG4mIzQzO1x0ICogdGhlcmUgaXMgbm8gcG9pbnQgaW4ga2VlcGluZyBhZGRpdGlvbmFsIGVycm9yIGluZm8gcHJlY2lzZWx5LFxuJiM0MztcdCAqIHNvIHNraXAgYWRkaW5nIGFkZGl0aW9uYWwgcmF3IGVycm9yIGluZm8uXG4gXHQgKi9cbiBcdGlmIChmb2xpb190ZXN0X2h1Z2V0bGJfcmF3X2h3cF91bnJlbGlhYmxlKGZvbGlvKSlcbiBcdFx0cmV0dXJuIE1GX0hVR0VUTEJfRk9MSU9fUFJFX1BPSVNPTkVEO1xuLVx0aGVhZCA9IHJhd19od3BfbGlzdF9oZWFkKGZvbGlvKTtcbi1cdGxsaXN0X2Zvcl9lYWNoX2VudHJ5KHAsIGhlYWQtXHUwMDNlZmlyc3QsIG5vZGUpIHtcbiYjNDM7XG4mIzQzO1x0c3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2aHdwX3BhZ2VfbG9jaywgZmxhZ3MpO1xuJiM0MztcdGZvciAocCA9IGZvbGlvLVx1MDAzZWh1Z2V0bGJfaHdwb2lzb247IHA7IHAgPSBwLVx1MDAzZW5leHQpIHtcbiBcdFx0aWYgKHAtXHUwMDNlcGFnZSA9PSBwYWdlKVxuLVx0XHRcdHJldHVybiBNRl9IVUdFVExCX1BBR0VfUFJFX1BPSVNPTkVEO1xuJiM0MztcdFx0XHRicmVhaztcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmIChwKSB7XG4mIzQzO1x0XHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNmh3cF9wYWdlX2xvY2ssIGZsYWdzKTtcbiYjNDM7XHRcdHJldHVybiBNRl9IVUdFVExCX1BBR0VfUFJFX1BPSVNPTkVEO1xuIFx0fVxuIFxuLVx0cmF3X2h3cCA9IGttYWxsb2Nfb2JqKHN0cnVjdCByYXdfaHdwX3BhZ2UsIEdGUF9BVE9NSUMpO1xuLVx0aWYgKHJhd19od3ApIHtcbi1cdFx0cmF3X2h3cC1cdTAwM2VwYWdlID0gcGFnZTtcbi1cdFx0bGxpc3RfYWRkKFx1MDAyNnJhd19od3AtXHUwMDNlbm9kZSwgaGVhZCk7XG4mIzQzO1x0cCA9IGttYWxsb2Nfb2JqKCpwLCBHRlBfQVRPTUlDKTtcbiYjNDM7XHRpZiAocCkge1xuJiM0MztcdFx0cC1cdTAwM2VwYWdlID0gcGFnZTtcbiYjNDM7XHRcdHAtXHUwMDNlbmV4dCA9IGZvbGlvLVx1MDAzZWh1Z2V0bGJfaHdwb2lzb247XG4mIzQzO1x0XHRmb2xpby1cdTAwM2VodWdldGxiX2h3cG9pc29uID0gcDtcbiBcdH0gZWxzZSB7XG4gXHRcdC8qXG4gXHRcdCAqIEZhaWxlZCB0byBzYXZlIHJhdyBlcnJvciBpbmZvLiAgV2Ugbm8gbG9uZ2VyIHRyYWNlIGFsbFxuQEAgLTE5MTcsMTYgJiM0MzsxOTY0LDIwIEBAIHN0YXRpYyBpbnQgaHVnZXRsYl91cGRhdGVfaHdwb2lzb24oc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHBhZ2UgKnBhZ2UpXG4gXHRcdCAqL1xuIFx0XHRmb2xpb19zZXRfaHVnZXRsYl9yYXdfaHdwX3VucmVsaWFibGUoZm9saW8pO1xuIFx0XHQvKlxuLVx0XHQgKiBPbmNlIGh1Z2V0bGJfcmF3X2h3cF91bnJlbGlhYmxlIGlzIHNldCwgcmF3X2h3cF9wYWdlIGlzIG5vdFxuJiM0MztcdFx0ICogT25jZSBodWdldGxiX3Jhd19od3BfdW5yZWxpYWJsZSBpcyBzZXQsIGh3cF9wYWdlIGlzIG5vdFxuIFx0XHQgKiB1c2VkIGFueSBtb3JlLCBzbyBmcmVlIGl0LlxuIFx0XHQgKi9cbiBcdFx0X19mb2xpb19mcmVlX3Jhd19od3AoZm9saW8sIGZhbHNlKTtcbiBcdH1cbiYjNDM7XHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNmh3cF9wYWdlX2xvY2ssIGZsYWdzKTtcbiBcdHJldHVybiByZXQ7XG4gfVxuIFxuIHN0YXRpYyB1bnNpZ25lZCBsb25nIGZvbGlvX2ZyZWVfcmF3X2h3cChzdHJ1Y3QgZm9saW8gKmZvbGlvLCBib29sIG1vdmVfZmxhZylcbiB7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBjb3VudDtcbiYjNDM7XHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuJiM0MztcbiBcdC8qXG4gXHQgKiBodWdldGxiX3ZtZW1tYXBfb3B0aW1pemVkIGh1Z2VwYWdlcyBjYW4mIzM5O3QgYmUgZnJlZWQgYmVjYXVzZSBzdHJ1Y3RcbiBcdCAqIHBhZ2VzIGZvciB0YWlsIHBhZ2VzIGFyZSByZXF1aXJlZCBidXQgdGhleSBkb24mIzM5O3QgZXhpc3QuXG5AQCAtMTk0MSw3ICYjNDM7MTk5MiwxMSBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBmb2xpb19mcmVlX3Jhd19od3Aoc3RydWN0IGZvbGlvICpmb2xpbywgYm9vbCBtb3ZlX2ZsYWcpXG4gXHRpZiAoZm9saW9fdGVzdF9odWdldGxiX3Jhd19od3BfdW5yZWxpYWJsZShmb2xpbykpXG4gXHRcdHJldHVybiAwO1xuIFxuLVx0cmV0dXJuIF9fZm9saW9fZnJlZV9yYXdfaHdwKGZvbGlvLCBtb3ZlX2ZsYWcpO1xuJiM0MztcdHNwaW5fbG9ja19pcnFzYXZlKFx1MDAyNmh3cF9wYWdlX2xvY2ssIGZsYWdzKTtcbiYjNDM7XHRjb3VudCA9IF9fZm9saW9fZnJlZV9yYXdfaHdwKGZvbGlvLCBtb3ZlX2ZsYWcpO1xuJiM0MztcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2aHdwX3BhZ2VfbG9jaywgZmxhZ3MpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gY291bnQ7XG4gfVxuIFxuIHZvaWQgZm9saW9fY2xlYXJfaHVnZXRsYl9od3BvaXNvbihzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuQEAgLTE5NTAsOCAmIzQzOzIwMDUsOCBAQCB2b2lkIGZvbGlvX2NsZWFyX2h1Z2V0bGJfaHdwb2lzb24oc3RydWN0IGZvbGlvICpmb2xpbylcbiBcdFx0cmV0dXJuO1xuIFx0aWYgKGZvbGlvX3Rlc3RfaHVnZXRsYl92bWVtbWFwX29wdGltaXplZChmb2xpbykpXG4gXHRcdHJldHVybjtcbi1cdGZvbGlvX2NsZWFyX2h3cG9pc29uKGZvbGlvKTtcbiBcdGZvbGlvX2ZyZWVfcmF3X2h3cChmb2xpbywgdHJ1ZSk7XG4mIzQzO1x0Zm9saW9fY2xlYXJfaGFzX2h3cG9pc29uZWQoZm9saW8pO1xuIH1cbiBcbiBzdGF0aWMgaW50IGdldF9odWdlX3BhZ2VfZm9yX2h3cG9pc29uKHVuc2lnbmVkIGxvbmcgcGZuLCBpbnQgZmxhZ3MsXG5AQCAtMjEwNCw2ICYjNDM7MjE1OSwxMSBAQCBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgZm9saW9fZnJlZV9yYXdfaHdwKHN0cnVjdCBmb2xpbyAqZm9saW8sIGJvb2wgZmxhZylcbiB7XG4gXHRyZXR1cm4gMDtcbiB9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW5saW5lIGludCBodWdldGxiX2NsZWFyX3BvaXNvbihzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiAjZW5kaWZcdC8qIENPTkZJR19IVUdFVExCX1BBR0UgKi9cbiBcbiAvKiBEcm9wIHRoZSBleHRyYSByZWZjb3VudCBpbiBjYXNlIHdlIGNvbWUgZnJvbSBtYWR2aXNlKCkgKi9cbkBAIC0yNjk1LDggJiM0MzsyNzU1LDggQEAgaW50IHVucG9pc29uX21lbW9yeSh1bnNpZ25lZCBsb25nIHBmbilcbiBcdFx0Z290byB1bmxvY2tfbXV0ZXg7XG4gXHR9XG4gXG4tXHRpZiAoIVBhZ2VIV1BvaXNvbihwKSkge1xuLVx0XHR1bnBvaXNvbl9wcl9pbmZvKFwmIzM0OyUjbHg6IHBhZ2Ugd2FzIGFscmVhZHkgdW5wb2lzb25lZFxcblwmIzM0OyxcbiYjNDM7XHRpZiAoIWlzX3BhZ2VfaHdwb2lzb24ocCkpIHtcbiYjNDM7XHRcdHVucG9pc29uX3ByX2luZm8oXCYjMzQ7JSNseDogcGFnZSBpcyBub3QgcG9pc29uZWRcXG5cJiMzNDssXG4gXHRcdFx0XHQgcGZuLCBcdTAwMjZ1bnBvaXNvbl9ycyk7XG4gXHRcdGdvdG8gdW5sb2NrX211dGV4O1xuIFx0fVxuQEAgLTI3MzAsOCAmIzQzOzI3OTAsOCBAQCBpbnQgdW5wb2lzb25fbWVtb3J5KHVuc2lnbmVkIGxvbmcgcGZuKVxuIFx0XHRcdGNvdW50ID0gZm9saW9fZnJlZV9yYXdfaHdwKGZvbGlvLCBmYWxzZSk7XG4gXHRcdFx0aWYgKGNvdW50ID09IDApXG4gXHRcdFx0XHRnb3RvIHVubG9ja19tdXRleDtcbiYjNDM7XHRcdFx0cmV0ID0gaHVnZXRsYl9jbGVhcl9wb2lzb24oZm9saW8pO1xuIFx0XHR9XG4tXHRcdHJldCA9IGZvbGlvX3Rlc3RfY2xlYXJfaHdwb2lzb24oZm9saW8pID8gMCA6IC1FQlVTWTtcbiBcdH0gZWxzZSBpZiAoZ2hwIFx1MDAzYyAwKSB7XG4gXHRcdGlmIChnaHAgPT0gLUVIV1BPSVNPTikge1xuIFx0XHRcdHJldCA9IHB1dF9wYWdlX2JhY2tfYnVkZHkocCkgPyAwIDogLUVCVVNZO1xuQEAgLTI3NDAsMTYgJiM0MzsyODAwLDE4IEBAIGludCB1bnBvaXNvbl9tZW1vcnkodW5zaWduZWQgbG9uZyBwZm4pXG4gXHRcdFx0dW5wb2lzb25fcHJfaW5mbyhcJiMzNDslI2x4OiBmYWlsZWQgdG8gZ3JhYiBwYWdlXFxuXCYjMzQ7LFxuIFx0XHRcdFx0XHQgcGZuLCBcdTAwMjZ1bnBvaXNvbl9ycyk7XG4gXHRcdH1cbi1cdH0gZWxzZSB7XG4tXHRcdGlmIChmb2xpb190ZXN0X2h1Z2V0bGIoZm9saW8pKSB7XG4tXHRcdFx0aHVnZSA9IHRydWU7XG4tXHRcdFx0Y291bnQgPSBmb2xpb19mcmVlX3Jhd19od3AoZm9saW8sIGZhbHNlKTtcbi1cdFx0XHRpZiAoY291bnQgPT0gMCkge1xuLVx0XHRcdFx0Zm9saW9fcHV0KGZvbGlvKTtcbi1cdFx0XHRcdGdvdG8gdW5sb2NrX211dGV4O1xuLVx0XHRcdH1cbiYjNDM7XHR9IGVsc2UgaWYgKGZvbGlvX3Rlc3RfaHVnZXRsYihmb2xpbykpIHtcbiYjNDM7XHRcdGh1Z2UgPSB0cnVlO1xuJiM0MztcdFx0Y291bnQgPSBmb2xpb19mcmVlX3Jhd19od3AoZm9saW8sIGZhbHNlKTtcbiYjNDM7XHRcdGlmIChjb3VudCA9PSAwKSB7XG4mIzQzO1x0XHRcdGZvbGlvX3B1dChmb2xpbyk7XG4mIzQzO1x0XHRcdGdvdG8gdW5sb2NrX211dGV4O1xuIFx0XHR9XG4tXG4mIzQzO1x0XHRmb2xpb19wdXQoZm9saW8pO1xuJiM0MztcdFx0cmV0ID0gaHVnZXRsYl9jbGVhcl9wb2lzb24oZm9saW8pO1xuJiM0MztcdFx0aWYgKCFyZXQpXG4mIzQzO1x0XHRcdGZvbGlvX3B1dChmb2xpbyk7XG4mIzQzO1x0fSBlbHNlIHtcbiBcdFx0Zm9saW9fcHV0KGZvbGlvKTtcbiBcdFx0aWYgKFRlc3RDbGVhclBhZ2VIV1BvaXNvbihwKSkge1xuIFx0XHRcdGZvbGlvX3B1dChmb2xpbyk7XG5kaWZmIC0tZ2l0IGEvbW0vbWVtb3J5X2hvdHBsdWcuYyBiL21tL21lbW9yeV9ob3RwbHVnLmNcbmluZGV4IDdhYzE5ZmFiMjI2MzI0Li4zMzAwN2U4ZTU0NmEwOSAxMDA2NDRcbi0tLSBhL21tL21lbW9yeV9ob3RwbHVnLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL21lbW9yeV9ob3RwbHVnLmNcbkBAIC0xODEzLDcgJiM0MzsxODEzLDcgQEAgc3RhdGljIHZvaWQgZG9fbWlncmF0ZV9yYW5nZSh1bnNpZ25lZCBsb25nIHN0YXJ0X3BmbiwgdW5zaWduZWQgbG9uZyBlbmRfcGZuKVxuIFx0XHRpZiAoZm9saW9fdGVzdF9sYXJnZShmb2xpbykpXG4gXHRcdFx0cGZuID0gZm9saW9fcGZuKGZvbGlvKSAmIzQzOyBmb2xpb19ucl9wYWdlcyhmb2xpbykgLSAxO1xuIFxuLVx0XHRpZiAoZm9saW9fY29udGFpbl9od3BvaXNvbmVkX3BhZ2UoZm9saW8pKSB7XG4mIzQzO1x0XHRpZiAoZm9saW9faGFzX2h3cG9pc29uZWRfcGFnZShmb2xpbykpIHtcbiBcdFx0XHQvKlxuIFx0XHRcdCAqIHVubWFwX3BvaXNvbmVkX2ZvbGlvKCkgY2Fubm90IGhhbmRsZSBsYXJnZSBmb2xpb3NcbiBcdFx0XHQgKiBpbiBhbGwgY2FzZXMgeWV0LlxuZGlmZiAtLWdpdCBhL21tL3JtYXAuYyBiL21tL3JtYXAuY1xuaW5kZXggMWM3N2Q1ZGMwNmU5ZmEuLmZkMTlhMGJmYmZlNzZjIDEwMDY0NFxuLS0tIGEvbW0vcm1hcC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9ybWFwLmNcbkBAIC0xOTc4LDYgJiM0MzsxOTc4LDIyIEBAIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGZvbGlvX3VubWFwX3B0ZV9iYXRjaChzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuIFx0XHRcdFx0ICAgICBGUEJfUkVTUEVDVF9XUklURSB8IEZQQl9SRVNQRUNUX1NPRlRfRElSVFkpO1xuIH1cbiBcbiYjNDM7LypcbiYjNDM7ICogU2luY2Ugd2UgY2Fubm90IHNwbGl0IGEgaHVnZXRsYiBmb2xpbywgd2Ugd2FudCB0byBpbnNlcnQgYSBwb2lzb25cbiYjNDM7ICogZW50cnkgaW50byB0aGUgcGFnZSB0YWJsZSBmb3IgdGhlIHdob2xlIGZvbGlvIGV2ZW4gaWYgb25seSBvbmUgcGFnZVxuJiM0MzsgKiBpcyBwb2lzb25lZC4gIE90aGVyd2lzZSwgd2UmIzM5O3ZlIHNwbGl0IGRvd24gdG8gdGhlIFBURSBsZXZlbCBhbmQgd2Ugb25seVxuJiM0MzsgKiB3YW50IHRvIHBvaXNvbiB0aGUgcHJlY2lzZSBwYWdlXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgYm9vbCB0dHVfY3JlYXRlX2h3cG9pc29uKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8sXG4mIzQzO1x0XHRjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSwgZW51bSB0dHVfZmxhZ3MgZmxhZ3MpXG4mIzQzO3tcbiYjNDM7XHRpZiAoIShmbGFncyBcdTAwMjYgVFRVX0hXUE9JU09OKSlcbiYjNDM7XHRcdHJldHVybiBmYWxzZTtcbiYjNDM7XHRpZiAoZm9saW9fdGVzdF9odWdldGxiKGZvbGlvKSlcbiYjNDM7XHRcdHJldHVybiBmb2xpb190ZXN0X2hhc19od3BvaXNvbmVkKGZvbGlvKTtcbiYjNDM7XHRyZXR1cm4gUGFnZUhXUG9pc29uKHBhZ2UpO1xuJiM0Mzt9XG4mIzQzO1xuIC8qXG4gICogQGFyZzogZW51bSB0dHVfZmxhZ3Mgd2lsbCBiZSBwYXNzZWQgdG8gdGhpcyBhcmd1bWVudFxuICAqL1xuQEAgLTE5OTMsNyAmIzQzOzIwMDksNiBAQCBzdGF0aWMgYm9vbCB0cnlfdG9fdW5tYXBfb25lKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuIFx0ZW51bSB0dHVfZmxhZ3MgZmxhZ3MgPSAoZW51bSB0dHVfZmxhZ3MpKGxvbmcpYXJnO1xuIFx0dW5zaWduZWQgbG9uZyBucl9wYWdlcyA9IDEsIGVuZF9hZGRyO1xuIFx0dW5zaWduZWQgbG9uZyBwZm47XG4tXHR1bnNpZ25lZCBsb25nIGhzeiA9IDA7XG4gXHRpbnQgcHRlcyA9IDA7XG4gXG4gXHQvKlxuQEAgLTIwMjMsOSAmIzQzOzIwMzgsNiBAQCBzdGF0aWMgYm9vbCB0cnlfdG9fdW5tYXBfb25lKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuIFx0XHQgKi9cbiBcdFx0YWRqdXN0X3JhbmdlX2lmX3BtZF9zaGFyaW5nX3Bvc3NpYmxlKHZtYSwgXHUwMDI2cmFuZ2Uuc3RhcnQsXG4gXHRcdFx0XHRcdFx0ICAgICBcdTAwMjZyYW5nZS5lbmQpO1xuLVxuLVx0XHQvKiBXZSBuZWVkIHRoZSBodWdlIHBhZ2Ugc2l6ZSBmb3Igc2V0X2h1Z2VfcHRlX2F0KCkgKi9cbi1cdFx0aHN6ID0gaHVnZV9wYWdlX3NpemUoaHN0YXRlX3ZtYSh2bWEpKTtcbiBcdH1cbiBcdG1tdV9ub3RpZmllcl9pbnZhbGlkYXRlX3JhbmdlX3N0YXJ0KFx1MDAyNnJhbmdlKTtcbiBcbkBAIC0yMTIxLDcgJiM0MzsyMTMzLDggQEAgc3RhdGljIGJvb2wgdHJ5X3RvX3VubWFwX29uZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbiBcdFx0XHQgKiBUaGUgdHJ5X3RvX3VubWFwKCkgaXMgb25seSBwYXNzZWQgYSBodWdldGxiIHBhZ2VcbiBcdFx0XHQgKiBpbiB0aGUgY2FzZSB3aGVyZSB0aGUgaHVnZXRsYiBwYWdlIGlzIHBvaXNvbmVkLlxuIFx0XHRcdCAqL1xuLVx0XHRcdFZNX0JVR19PTl9QQUdFKCFQYWdlSFdQb2lzb24oc3VicGFnZSksIHN1YnBhZ2UpO1xuJiM0MztcdFx0XHRWTV9CVUdfT05fRk9MSU8oIWZvbGlvX2hhc19od3BvaXNvbmVkX3BhZ2UoZm9saW8pLFxuJiM0MztcdFx0XHRcdFx0Zm9saW8pO1xuIFx0XHRcdC8qXG4gXHRcdFx0ICogaHVnZV9wbWRfdW5zaGFyZSBtYXkgdW5tYXAgYW4gZW50aXJlIFBNRCBwYWdlLlxuIFx0XHRcdCAqIFRoZXJlIGlzIG5vIHdheSBvZiBrbm93aW5nIGV4YWN0bHkgd2hpY2ggUE1EcyBtYXlcbkBAIC0yMjAwLDEyICYjNDM7MjIxMywxMiBAQCBzdGF0aWMgYm9vbCB0cnlfdG9fdW5tYXBfb25lKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuIFx0XHQvKiBVcGRhdGUgaGlnaCB3YXRlcm1hcmsgYmVmb3JlIHdlIGxvd2VyIHJzcyAqL1xuIFx0XHR1cGRhdGVfaGl3YXRlcl9yc3MobW0pO1xuIFxuLVx0XHRpZiAoUGFnZUhXUG9pc29uKHN1YnBhZ2UpIFx1MDAyNlx1MDAyNiAoZmxhZ3MgXHUwMDI2IFRUVV9IV1BPSVNPTikpIHtcbiYjNDM7XHRcdGlmICh0dHVfY3JlYXRlX2h3cG9pc29uKGZvbGlvLCBzdWJwYWdlLCBmbGFncykpIHtcbiBcdFx0XHRwdGV2YWwgPSBzd3BfZW50cnlfdG9fcHRlKG1ha2VfaHdwb2lzb25fZW50cnkoc3VicGFnZSkpO1xuIFx0XHRcdGlmIChmb2xpb190ZXN0X2h1Z2V0bGIoZm9saW8pKSB7XG4gXHRcdFx0XHRodWdldGxiX2NvdW50X3N1Yihmb2xpb19ucl9wYWdlcyhmb2xpbyksIG1tKTtcbiBcdFx0XHRcdHNldF9odWdlX3B0ZV9hdChtbSwgYWRkcmVzcywgcHZtdy5wdGUsIHB0ZXZhbCxcbi1cdFx0XHRcdFx0XHRoc3opO1xuJiM0MztcdFx0XHRcdFx0XHRmb2xpb19zaXplKGZvbGlvKSk7XG4gXHRcdFx0fSBlbHNlIHtcbiBcdFx0XHRcdGRlY19tbV9jb3VudGVyKG1tLCBtbV9jb3VudGVyKGZvbGlvKSk7XG4gXHRcdFx0XHRzZXRfcHRlX2F0KG1tLCBhZGRyZXNzLCBwdm13LnB0ZSwgcHRldmFsKTtcbkBAIC0yNDIzLDcgJiM0MzsyNDM2LDYgQEAgc3RhdGljIGJvb2wgdHJ5X3RvX21pZ3JhdGVfb25lKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuIFx0c3RydWN0IG1tdV9ub3RpZmllcl9yYW5nZSByYW5nZTtcbiBcdGVudW0gdHR1X2ZsYWdzIGZsYWdzID0gKGVudW0gdHR1X2ZsYWdzKShsb25nKWFyZztcbiBcdHVuc2lnbmVkIGxvbmcgcGZuO1xuLVx0dW5zaWduZWQgbG9uZyBoc3ogPSAwO1xuIFxuIFx0LypcbiBcdCAqIFdoZW4gcmFjaW5nIGFnYWluc3QgZS5nLiB6YXBfcHRlX3JhbmdlKCkgb24gYW5vdGhlciBjcHUsXG5AQCAtMjQ1Miw5ICYjNDM7MjQ2NCw2IEBAIHN0YXRpYyBib29sIHRyeV90b19taWdyYXRlX29uZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbiBcdFx0ICovXG4gXHRcdGFkanVzdF9yYW5nZV9pZl9wbWRfc2hhcmluZ19wb3NzaWJsZSh2bWEsIFx1MDAyNnJhbmdlLnN0YXJ0LFxuIFx0XHRcdFx0XHRcdCAgICAgXHUwMDI2cmFuZ2UuZW5kKTtcbi1cbi1cdFx0LyogV2UgbmVlZCB0aGUgaHVnZSBwYWdlIHNpemUgZm9yIHNldF9odWdlX3B0ZV9hdCgpICovXG4tXHRcdGhzeiA9IGh1Z2VfcGFnZV9zaXplKGhzdGF0ZV92bWEodm1hKSk7XG4gXHR9XG4gXHRtbXVfbm90aWZpZXJfaW52YWxpZGF0ZV9yYW5nZV9zdGFydChcdTAwMjZyYW5nZSk7XG4gXG5AQCAtMjYwNywxNCAmIzQzOzI2MTYsMTQgQEAgc3RhdGljIGJvb2wgdHJ5X3RvX21pZ3JhdGVfb25lKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuIFx0XHQvKiBVcGRhdGUgaGlnaCB3YXRlcm1hcmsgYmVmb3JlIHdlIGxvd2VyIHJzcyAqL1xuIFx0XHR1cGRhdGVfaGl3YXRlcl9yc3MobW0pO1xuIFxuLVx0XHRpZiAoUGFnZUhXUG9pc29uKHN1YnBhZ2UpKSB7XG4mIzQzO1x0XHRpZiAodHR1X2NyZWF0ZV9od3BvaXNvbihmb2xpbywgc3VicGFnZSwgVFRVX0hXUE9JU09OKSkge1xuIFx0XHRcdFZNX1dBUk5fT05fRk9MSU8oZm9saW9faXNfZGV2aWNlX3ByaXZhdGUoZm9saW8pLCBmb2xpbyk7XG4gXG4gXHRcdFx0cHRldmFsID0gc3dwX2VudHJ5X3RvX3B0ZShtYWtlX2h3cG9pc29uX2VudHJ5KHN1YnBhZ2UpKTtcbiBcdFx0XHRpZiAoZm9saW9fdGVzdF9odWdldGxiKGZvbGlvKSkge1xuIFx0XHRcdFx0aHVnZXRsYl9jb3VudF9zdWIoZm9saW9fbnJfcGFnZXMoZm9saW8pLCBtbSk7XG4gXHRcdFx0XHRzZXRfaHVnZV9wdGVfYXQobW0sIGFkZHJlc3MsIHB2bXcucHRlLCBwdGV2YWwsXG4tXHRcdFx0XHRcdFx0aHN6KTtcbiYjNDM7XHRcdFx0XHRcdFx0Zm9saW9fc2l6ZShmb2xpbykpO1xuIFx0XHRcdH0gZWxzZSB7XG4gXHRcdFx0XHRkZWNfbW1fY291bnRlcihtbSwgbW1fY291bnRlcihmb2xpbykpO1xuIFx0XHRcdFx0c2V0X3B0ZV9hdChtbSwgYWRkcmVzcywgcHZtdy5wdGUsIHB0ZXZhbCk7XG5AQCAtMjY0NCw3ICYjNDM7MjY1Myw4IEBAIHN0YXRpYyBib29sIHRyeV90b19taWdyYXRlX29uZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbiBcdFx0XHRpZiAoYXJjaF91bm1hcF9vbmUobW0sIHZtYSwgYWRkcmVzcywgcHRldmFsKSBcdTAwM2MgMCkge1xuIFx0XHRcdFx0aWYgKGZvbGlvX3Rlc3RfaHVnZXRsYihmb2xpbykpXG4gXHRcdFx0XHRcdHNldF9odWdlX3B0ZV9hdChtbSwgYWRkcmVzcywgcHZtdy5wdGUsXG4tXHRcdFx0XHRcdFx0XHRwdGV2YWwsIGhzeik7XG4mIzQzO1x0XHRcdFx0XHRcdFx0cHRldmFsLFxuJiM0MztcdFx0XHRcdFx0XHRcdGZvbGlvX3NpemUoZm9saW8pKTtcbiBcdFx0XHRcdGVsc2VcbiBcdFx0XHRcdFx0c2V0X3B0ZV9hdChtbSwgYWRkcmVzcywgcHZtdy5wdGUsIHB0ZXZhbCk7XG4gXHRcdFx0XHRyZXQgPSBmYWxzZTtcbkBAIC0yNjU3LDcgJiM0MzsyNjY3LDggQEAgc3RhdGljIGJvb2wgdHJ5X3RvX21pZ3JhdGVfb25lKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuIFx0XHRcdFx0aWYgKGFub25fZXhjbHVzaXZlIFx1MDAyNlx1MDAyNlxuIFx0XHRcdFx0ICAgIGh1Z2V0bGJfdHJ5X3NoYXJlX2Fub25fcm1hcChmb2xpbykpIHtcbiBcdFx0XHRcdFx0c2V0X2h1Z2VfcHRlX2F0KG1tLCBhZGRyZXNzLCBwdm13LnB0ZSxcbi1cdFx0XHRcdFx0XHRcdHB0ZXZhbCwgaHN6KTtcbiYjNDM7XHRcdFx0XHRcdFx0XHRwdGV2YWwsXG4mIzQzO1x0XHRcdFx0XHRcdFx0Zm9saW9fc2l6ZShmb2xpbykpO1xuIFx0XHRcdFx0XHRyZXQgPSBmYWxzZTtcbiBcdFx0XHRcdFx0cGFnZV92bWFfbWFwcGVkX3dhbGtfZG9uZShcdTAwMjZwdm13KTtcbiBcdFx0XHRcdFx0YnJlYWs7XG5AQCAtMjcwMyw3ICYjNDM7MjcxNCw3IEBAIHN0YXRpYyBib29sIHRyeV90b19taWdyYXRlX29uZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbiBcdFx0XHR9XG4gXHRcdFx0aWYgKGZvbGlvX3Rlc3RfaHVnZXRsYihmb2xpbykpXG4gXHRcdFx0XHRzZXRfaHVnZV9wdGVfYXQobW0sIGFkZHJlc3MsIHB2bXcucHRlLCBzd3BfcHRlLFxuLVx0XHRcdFx0XHRcdGhzeik7XG4mIzQzO1x0XHRcdFx0XHRcdGZvbGlvX3NpemUoZm9saW8pKTtcbiBcdFx0XHRlbHNlXG4gXHRcdFx0XHRzZXRfcHRlX2F0KG1tLCBhZGRyZXNzLCBwdm13LnB0ZSwgc3dwX3B0ZSk7XG4gXHRcdFx0dHJhY2Vfc2V0X21pZ3JhdGlvbl9wdGUoYWRkcmVzcywgcHRlX3ZhbChzd3BfcHRlKSxcbmRpZmYgLS1naXQgYS9tbS9zaG1lbS5jIGIvbW0vc2htZW0uY1xuaW5kZXggYjUxZjgzYzk3MGJiMzcuLjQ5MmM5YmVmMzYyMDc0IDEwMDY0NFxuLS0tIGEvbW0vc2htZW0uY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vc2htZW0uY1xuQEAgLTMyNDAsNyAmIzQzOzMyNDAsNyBAQCBzaG1lbV93cml0ZV9iZWdpbihjb25zdCBzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxuIFx0aWYgKHJldClcbiBcdFx0cmV0dXJuIHJldDtcbiBcbi1cdGlmIChmb2xpb19jb250YWluX2h3cG9pc29uZWRfcGFnZShmb2xpbykpIHtcbiYjNDM7XHRpZiAoZm9saW9faGFzX2h3cG9pc29uZWRfcGFnZShmb2xpbykpIHtcbiBcdFx0Zm9saW9fdW5sb2NrKGZvbGlvKTtcbiBcdFx0Zm9saW9fcHV0KGZvbGlvKTtcbiBcdFx0cmV0dXJuIC1FSU87XG5kaWZmIC0tZ2l0IGEvbW0vdm1zY2FuLmMgYi9tbS92bXNjYW4uY1xuaW5kZXggMzVjM2JiMTVhZTk2YTMuLjcwZTU0YWNlMGU3NDFjIDEwMDY0NFxuLS0tIGEvbW0vdm1zY2FuLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL3Ztc2Nhbi5jXG5AQCAtMTA4Niw3ICYjNDM7MTA4Niw3IEBAIHN0YXRpYyB1bnNpZ25lZCBpbnQgc2hyaW5rX2ZvbGlvX2xpc3Qoc3RydWN0IGxpc3RfaGVhZCAqZm9saW9fbGlzdCxcbiBcdFx0aWYgKCFmb2xpb190cnlsb2NrKGZvbGlvKSlcbiBcdFx0XHRnb3RvIGtlZXA7XG4gXG4tXHRcdGlmIChmb2xpb19jb250YWluX2h3cG9pc29uZWRfcGFnZShmb2xpbykpIHtcbiYjNDM7XHRcdGlmIChmb2xpb19oYXNfaHdwb2lzb25lZF9wYWdlKGZvbGlvKSkge1xuIFx0XHRcdC8qXG4gXHRcdFx0ICogdW5tYXBfcG9pc29uZWRfZm9saW8oKSBjYW4mIzM5O3QgaGFuZGxlIGxhcmdlXG4gXHRcdFx0ICogZm9saW8sIGp1c3Qgc2tpcCBpdC4gbWVtb3J5X2ZhaWx1cmUoKSB3aWxsXG5kaWZmIC0tZ2l0IGEvdmlydC9rdm0vZ3Vlc3RfbWVtZmQuYyBiL3ZpcnQva3ZtL2d1ZXN0X21lbWZkLmNcbmluZGV4IGRiNTdjNTc2NmFiNjA0Li45NGVlZGNjN2YxYTllMCAxMDA2NDRcbi0tLSBhL3ZpcnQva3ZtL2d1ZXN0X21lbWZkLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3ZpcnQva3ZtL2d1ZXN0X21lbWZkLmNcbkBAIC03NzQsNyAmIzQzOzc3NCw3IEBAIHN0YXRpYyBzdHJ1Y3QgZm9saW8gKl9fa3ZtX2dtZW1fZ2V0X3BmbihzdHJ1Y3QgZmlsZSAqZmlsZSxcbiBcdGlmIChJU19FUlIoZm9saW8pKVxuIFx0XHRyZXR1cm4gZm9saW87XG4gXG4tXHRpZiAoZm9saW9fdGVzdF9od3BvaXNvbihmb2xpbykpIHtcbiYjNDM7XHRpZiAoZm9saW9faGFzX2h3cG9pc29uZWRfcGFnZShmb2xpbykpIHtcbiBcdFx0Zm9saW9fdW5sb2NrKGZvbGlvKTtcbiBcdFx0Zm9saW9fcHV0KGZvbGlvKTtcbiBcdFx0cmV0dXJuIEVSUl9QVFIoLUVIV1BPSVNPTik7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjYgMTc6NTE8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0hVR0VUTEJGUyYjMzQ7LAogICAgJiMzNDtNRU1PUllfRkFJTFVSRSYjMzQ7LAogICAgJiMzNDtUUkFOU1BBUkVOVF9IVUdFUEFHRSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2h1Z2V0bGJfcGFnZV9od3BvaXNvbiYjMzQ7LAogICAgJiMzNDtodWdldGxiX3VucmVmX3BhZ2VfaHdwb2lzb24mIzM0OywKICAgICYjMzQ7dW5wb2lzb25fbWVtb3J5JiMzNDssCiAgICAmIzM0O2ZvbGlvX2NsZWFyX2h1Z2V0bGJfaHdwb2lzb24mIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggc2VyaWVzIGludHJvZHVjZXMgYExBUkdFX0ZPTElPYCBjb25maWcgYW5kIHJlZmFjdG9ycyBob3cgaHdwb2lzb24gaXMgdHJhY2tlZCBmb3IgaHVnZXRsYiBmb2xpb3MuIEl0IHJlcGxhY2VzIGBhZGp1c3RfcmFuZ2VfaHdwb2lzb25gIGluIGBmcy9odWdldGxiZnMvaW5vZGUuY2Agd2l0aCBhIGdlbmVyaWMgb25lIGluIGBtbS9maWxlbWFwLmNgIGFuZCBjaGFuZ2VzIGBodWdldGxiZnNfcmVhZF9pdGVyYCB0byBgZ2VuZXJpY19maWxlX3JlYWRfaXRlcmAuIEl0IGFsc28gbW9kaWZpZXMgYGZvbGlvX3Rlc3RfaHdwb2lzb25gIHRvIGBmb2xpb19oYXNfaHdwb2lzb25lZF9wYWdlYCBpbiB2YXJpb3VzIHBsYWNlcy4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byBjb3JlIGtlcm5lbCBsb2dpYyAobW0sIGh1Z2V0bGJmcywgbWVtb3J5LWZhaWx1cmUpIGFuZCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgOWI4NTZlYmQ0N2FjNTAxMDdjOTk2MjM2OTI4ZGFjNWI2M2IzZTk2YgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTdW4gSnVsIDI2IDE3OjUxOjM1IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZnMvS2NvbmZpZyBiL2ZzL0tjb25maWcKaW5kZXggY2Y2YWU2NDc3NmU2MmMuLmVkZGFjNGVkMjE0YjEyIDEwMDY0NAotLS0gYS9mcy9LY29uZmlnCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL0tjb25maWcKQEAgLTI3Miw3ICYjNDM7MjcyLDcgQEAgZW5kaWYgIyBIVUdFVExCRlMKIAogY29uZmlnIEhVR0VUTEJfUEFHRQogCWRlZl9ib29sIEhVR0VUTEJGUwotCXNlbGVjdCBYQVJSQVlfTVVMVEkKJiM0MzsJc2VsZWN0IExBUkdFX0ZPTElPCiAKIGNvbmZpZyBIVUdFVExCX1BBR0VfT1BUSU1JWkVfVk1FTU1BUAogCWRlZl9ib29sIEhVR0VUTEJfUEFHRQpkaWZmIC0tZ2l0IGEvZnMvaHVnZXRsYmZzL2lub2RlLmMgYi9mcy9odWdldGxiZnMvaW5vZGUuYwppbmRleCAyMTZlMWEwZGQwYjIzNy4uY2VmN2U2MWI4MjdkNzEgMTAwNjQ0Ci0tLSBhL2ZzL2h1Z2V0bGJmcy9pbm9kZS5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2h1Z2V0bGJmcy9pbm9kZS5jCkBAIC0xODcsMTEzICYjNDM7MTg3LDYgQEAgaHVnZXRsYl9nZXRfdW5tYXBwZWRfYXJlYShzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgbG9uZyBhZGRyLAogCXJldHVybiBtbV9nZXRfdW5tYXBwZWRfYXJlYV92bWZsYWdzKGZpbGUsIGFkZHIwLCBsZW4sIHBnb2ZmLCBmbGFncywgMCk7CiB9CiAKLS8qCi0gKiBTb21lb25lIHdhbnRzIHRvIHJlYWQgQGJ5dGVzIGZyb20gYSBIV1BPSVNPTiBodWdldGxiIEBmb2xpbyBmcm9tIEBvZmZzZXQuCi0gKiBSZXR1cm5zIHRoZSBtYXhpbXVtIG51bWJlciBvZiBieXRlcyBvbmUgY2FuIHJlYWQgd2l0aG91dCB0b3VjaGluZyB0aGUgMXN0IHJhdwotICogSFdQT0lTT04gcGFnZS4KLSAqLwotc3RhdGljIHNpemVfdCBhZGp1c3RfcmFuZ2VfaHdwb2lzb24oc3RydWN0IGZvbGlvICpmb2xpbywgc2l6ZV90IG9mZnNldCwKLQkJc2l6ZV90IGJ5dGVzKQotewotCXN0cnVjdCBwYWdlICpwYWdlID0gZm9saW9fcGFnZShmb2xpbywgb2Zmc2V0IC8gUEFHRV9TSVpFKTsKLQlzaXplX3Qgc2FmZV9ieXRlczsKLQotCWlmIChpc19yYXdfaHdwb2lzb25fcGFnZV9pbl9odWdlcGFnZShwYWdlKSkKLQkJcmV0dXJuIDA7Ci0JLyogU2FmZSB0byByZWFkIHRoZSByZW1haW5pbmcgYnl0ZXMgaW4gdGhpcyBwYWdlLiAqLwotCXNhZmVfYnl0ZXMgPSBQQUdFX1NJWkUgLSAob2Zmc2V0ICUgUEFHRV9TSVpFKTsKLQlwYWdlJiM0MzsmIzQzOzsKLQotCS8qIENoZWNrIGVhY2ggcmVtYWluaW5nIHBhZ2UgYXMgbG9uZyBhcyB3ZSBhcmUgbm90IGRvbmUgeWV0LiAqLwotCWZvciAoOyBzYWZlX2J5dGVzICZsdDsgYnl0ZXM7IHNhZmVfYnl0ZXMgJiM0Mzs9IFBBR0VfU0laRSwgcGFnZSYjNDM7JiM0MzspCi0JCWlmIChpc19yYXdfaHdwb2lzb25fcGFnZV9pbl9odWdlcGFnZShwYWdlKSkKLQkJCWJyZWFrOwotCi0JcmV0dXJuIG1pbihzYWZlX2J5dGVzLCBieXRlcyk7Ci19Ci0KLS8qCi0gKiBTdXBwb3J0IGZvciByZWFkKCkgLSBGaW5kIHRoZSBwYWdlIGF0dGFjaGVkIHRvIGZfbWFwcGluZyBhbmQgY29weSBvdXQgdGhlCi0gKiBkYXRhLiBUaGlzIHByb3ZpZGVzIGZ1bmN0aW9uYWxpdHkgc2ltaWxhciB0byBmaWxlbWFwX3JlYWQoKS4KLSAqLwotc3RhdGljIHNzaXplX3QgaHVnZXRsYmZzX3JlYWRfaXRlcihzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqdG8pCi17Ci0Jc3RydWN0IGZpbGUgKmZpbGUgPSBpb2NiLSZndDtraV9maWxwOwotCXN0cnVjdCBoc3RhdGUgKmggPSBoc3RhdGVfZmlsZShmaWxlKTsKLQlzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyA9IGZpbGUtJmd0O2ZfbWFwcGluZzsKLQlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gbWFwcGluZy0mZ3Q7aG9zdDsKLQl1bnNpZ25lZCBsb25nIGluZGV4ID0gaW9jYi0mZ3Q7a2lfcG9zICZndDsmZ3Q7IGh1Z2VfcGFnZV9zaGlmdChoKTsKLQl1bnNpZ25lZCBsb25nIG9mZnNldCA9IGlvY2ItJmd0O2tpX3BvcyAmYW1wOyB+aHVnZV9wYWdlX21hc2soaCk7Ci0JdW5zaWduZWQgbG9uZyBlbmRfaW5kZXg7Ci0JbG9mZl90IGlzaXplOwotCXNzaXplX3QgcmV0dmFsID0gMDsKLQotCXdoaWxlIChpb3ZfaXRlcl9jb3VudCh0bykpIHsKLQkJc3RydWN0IGZvbGlvICpmb2xpbzsKLQkJc2l6ZV90IG5yLCBjb3BpZWQsIHdhbnQ7Ci0KLQkJLyogbnIgaXMgdGhlIG1heGltdW0gbnVtYmVyIG9mIGJ5dGVzIHRvIGNvcHkgZnJvbSB0aGlzIHBhZ2UgKi8KLQkJbnIgPSBodWdlX3BhZ2Vfc2l6ZShoKTsKLQkJaXNpemUgPSBpX3NpemVfcmVhZChpbm9kZSk7Ci0JCWlmICghaXNpemUpCi0JCQlicmVhazsKLQkJZW5kX2luZGV4ID0gKGlzaXplIC0gMSkgJmd0OyZndDsgaHVnZV9wYWdlX3NoaWZ0KGgpOwotCQlpZiAoaW5kZXggJmd0OyBlbmRfaW5kZXgpCi0JCQlicmVhazsKLQkJaWYgKGluZGV4ID09IGVuZF9pbmRleCkgewotCQkJbnIgPSAoKGlzaXplIC0gMSkgJmFtcDsgfmh1Z2VfcGFnZV9tYXNrKGgpKSAmIzQzOyAxOwotCQkJaWYgKG5yICZsdDs9IG9mZnNldCkKLQkJCQlicmVhazsKLQkJfQotCQluciA9IG5yIC0gb2Zmc2V0OwotCi0JCS8qIEZpbmQgdGhlIGZvbGlvICovCi0JCWZvbGlvID0gZmlsZW1hcF9sb2NrX2h1Z2V0bGJfZm9saW8oaCwgbWFwcGluZywgaW5kZXgpOwotCQlpZiAoSVNfRVJSKGZvbGlvKSkgewotCQkJLyoKLQkJCSAqIFdlIGhhdmUgYSBIT0xFLCB6ZXJvIG91dCB0aGUgdXNlci1idWZmZXIgZm9yIHRoZQotCQkJICogbGVuZ3RoIG9mIHRoZSBob2xlIG9yIHJlcXVlc3QuCi0JCQkgKi8KLQkJCWNvcGllZCA9IGlvdl9pdGVyX3plcm8obnIsIHRvKTsKLQkJfSBlbHNlIHsKLQkJCWZvbGlvX3VubG9jayhmb2xpbyk7Ci0KLQkJCWlmICghZm9saW9fdGVzdF9od3BvaXNvbihmb2xpbykpCi0JCQkJd2FudCA9IG5yOwotCQkJZWxzZSB7Ci0JCQkJLyoKLQkJCQkgKiBBZGp1c3QgaG93IG1hbnkgYnl0ZXMgc2FmZSB0byByZWFkIHdpdGhvdXQKLQkJCQkgKiB0b3VjaGluZyB0aGUgMXN0IHJhdyBIV1BPSVNPTiBwYWdlIGFmdGVyCi0JCQkJICogb2Zmc2V0LgotCQkJCSAqLwotCQkJCXdhbnQgPSBhZGp1c3RfcmFuZ2VfaHdwb2lzb24oZm9saW8sIG9mZnNldCwgbnIpOwotCQkJCWlmICh3YW50ID09IDApIHsKLQkJCQkJZm9saW9fcHV0KGZvbGlvKTsKLQkJCQkJcmV0dmFsID0gLUVJTzsKLQkJCQkJYnJlYWs7Ci0JCQkJfQotCQkJfQotCi0JCQkvKgotCQkJICogV2UgaGF2ZSB0aGUgZm9saW8sIGNvcHkgaXQgdG8gdXNlciBzcGFjZSBidWZmZXIuCi0JCQkgKi8KLQkJCWNvcGllZCA9IGNvcHlfZm9saW9fdG9faXRlcihmb2xpbywgb2Zmc2V0LCB3YW50LCB0byk7Ci0JCQlmb2xpb19wdXQoZm9saW8pOwotCQl9Ci0JCW9mZnNldCAmIzQzOz0gY29waWVkOwotCQlyZXR2YWwgJiM0Mzs9IGNvcGllZDsKLQkJaWYgKGNvcGllZCAhPSBuciAmYW1wOyZhbXA7IGlvdl9pdGVyX2NvdW50KHRvKSkgewotCQkJaWYgKCFyZXR2YWwpCi0JCQkJcmV0dmFsID0gLUVGQVVMVDsKLQkJCWJyZWFrOwotCQl9Ci0JCWluZGV4ICYjNDM7PSBvZmZzZXQgJmd0OyZndDsgaHVnZV9wYWdlX3NoaWZ0KGgpOwotCQlvZmZzZXQgJmFtcDs9IH5odWdlX3BhZ2VfbWFzayhoKTsKLQl9Ci0JaW9jYi0mZ3Q7a2lfcG9zID0gKChsb2ZmX3QpaW5kZXggJmx0OyZsdDsgaHVnZV9wYWdlX3NoaWZ0KGgpKSAmIzQzOyBvZmZzZXQ7Ci0JcmV0dXJuIHJldHZhbDsKLX0KLQogc3RhdGljIGludCBodWdldGxiZnNfd3JpdGVfYmVnaW4oY29uc3Qgc3RydWN0IGtpb2NiICppb2NiLAogCQkJc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsCiAJCQlsb2ZmX3QgcG9zLCB1bnNpZ25lZCBsZW4sCkBAIC04ODMsNiAmIzQzOzc3NiwxNyBAQCBzdGF0aWMgc3RydWN0IGlub2RlICpodWdldGxiZnNfZ2V0X3Jvb3Qoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwKIAlyZXR1cm4gaW5vZGU7CiB9CiAKJiM0MztzdGF0aWMgdm9pZCBodWdldGxiZnNfaW5pdF9yZWd1bGFyX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgaHN0YXRlICpoc3RhdGUgPSBoc3RhdGVfaW5vZGUoaW5vZGUpOwomIzQzOwl1bnNpZ25lZCBpbnQgb3JkZXIgPSBodWdlX3BhZ2Vfb3JkZXIoaHN0YXRlKTsKJiM0MzsKJiM0MzsJaW5vZGUtJmd0O2lfb3AgPSAmYW1wO2h1Z2V0bGJmc19pbm9kZV9vcGVyYXRpb25zOwomIzQzOwlpbm9kZS0mZ3Q7aV9mb3AgPSAmYW1wO2h1Z2V0bGJmc19maWxlX29wZXJhdGlvbnM7CiYjNDM7CW1hcHBpbmdfc2V0X2ZvbGlvX29yZGVyX3JhbmdlKGlub2RlLSZndDtpX21hcHBpbmcsIG9yZGVyLCBvcmRlcik7CiYjNDM7CW1hcHBpbmdfc2V0X2F1dGhvcml0YXRpdmUoaW5vZGUtJmd0O2lfbWFwcGluZyk7CiYjNDM7fQomIzQzOwogLyoKICAqIEh1Z2V0bGJmcyBpcyBub3QgcmVjbGFpbWFibGU7IHRoZXJlZm9yZSBpdHMgaV9tbWFwX3J3c2VtIHdpbGwgbmV2ZXIKICAqIGJlIHRha2VuIGZyb20gcmVjbGFpbSAtLSB1bmxpa2UgcmVndWxhciBmaWxlc3lzdGVtcy4gVGhpcyBuZWVkcyBhbgpAQCAtOTI2LDggJiM0Mzs4MzAsNyBAQCBzdGF0aWMgc3RydWN0IGlub2RlICpodWdldGxiZnNfZ2V0X2lub2RlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsCiAJCQlpbml0X3NwZWNpYWxfaW5vZGUoaW5vZGUsIG1vZGUsIGRldik7CiAJCQlicmVhazsKIAkJY2FzZSBTX0lGUkVHOgotCQkJaW5vZGUtJmd0O2lfb3AgPSAmYW1wO2h1Z2V0bGJmc19pbm9kZV9vcGVyYXRpb25zOwotCQkJaW5vZGUtJmd0O2lfZm9wID0gJmFtcDtodWdldGxiZnNfZmlsZV9vcGVyYXRpb25zOwomIzQzOwkJCWh1Z2V0bGJmc19pbml0X3JlZ3VsYXJfaW5vZGUoaW5vZGUpOwogCQkJYnJlYWs7CiAJCWNhc2UgU19JRkRJUjoKIAkJCWlub2RlLSZndDtpX29wID0gJmFtcDtodWdldGxiZnNfZGlyX2lub2RlX29wZXJhdGlvbnM7CkBAIC0xMjA2LDcgJiM0MzsxMTA5LDcgQEAgc3RhdGljIHZvaWQgaW5pdF9vbmNlKHZvaWQgKmZvbykKIH0KIAogc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgaHVnZXRsYmZzX2ZpbGVfb3BlcmF0aW9ucyA9IHsKLQkucmVhZF9pdGVyCQk9IGh1Z2V0bGJmc19yZWFkX2l0ZXIsCiYjNDM7CS5yZWFkX2l0ZXIJCT0gZ2VuZXJpY19maWxlX3JlYWRfaXRlciwKIAkubW1hcAkJCT0gaHVnZXRsYmZzX2ZpbGVfbW1hcCwKIAkuZnN5bmMJCQk9IG5vb3BfZnN5bmMsCiAJLmdldF91bm1hcHBlZF9hcmVhCT0gaHVnZXRsYl9nZXRfdW5tYXBwZWRfYXJlYSwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaHVnZXRsYi5oIGIvaW5jbHVkZS9saW51eC9odWdldGxiLmgKaW5kZXggMmFiYWY5OTMyMWU5MGQuLjE4Nzg2NDJlNzVlYzUxIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaApAQCAtMTY1LDcgJiM0MzsxNjUsNyBAQCBib29sIGh1Z2V0bGJmc19wYWdlY2FjaGVfcHJlc2VudChzdHJ1Y3QgaHN0YXRlICpoLAogCQkJCSBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKIAkJCQkgdW5zaWduZWQgbG9uZyBhZGRyZXNzKTsKIAotc3RydWN0IGFkZHJlc3Nfc3BhY2UgKmh1Z2V0bGJfZm9saW9fbWFwcGluZ19sb2NrX3dyaXRlKHN0cnVjdCBmb2xpbyAqZm9saW8pOwomIzQzO3N0cnVjdCBhZGRyZXNzX3NwYWNlICpodWdldGxiX2ZvbGlvX21hcHBpbmdfbG9ja193cml0ZShjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKTsKIAogZXh0ZXJuIGludCBtb3ZhYmxlX2dpZ2FudGljX3BhZ2VzIF9fcmVhZF9tb3N0bHk7CiBleHRlcm4gaW50IHN5c2N0bF9odWdldGxiX3NobV9ncm91cCBfX3JlYWRfbW9zdGx5OwpAQCAtMjkyLDggJiM0MzsyOTIsNyBAQCBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgaHVnZXRsYl90b3RhbF9wYWdlcyh2b2lkKQogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW5saW5lIHN0cnVjdCBhZGRyZXNzX3NwYWNlICpodWdldGxiX2ZvbGlvX21hcHBpbmdfbG9ja193cml0ZSgKLQkJCQkJCQlzdHJ1Y3QgZm9saW8gKmZvbGlvKQomIzQzO3N0YXRpYyBpbmxpbmUgc3RydWN0IGFkZHJlc3Nfc3BhY2UgKmh1Z2V0bGJfZm9saW9fbWFwcGluZ19sb2NrX3dyaXRlKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8pCiB7CiAJcmV0dXJuIE5VTEw7CiB9CkBAIC01OTUsOCAmIzQzOzU5NCw4IEBAIGVudW0gaHVnZXRsYl9wYWdlX2ZsYWdzIHsKICNpZmRlZiBDT05GSUdfSFVHRVRMQl9QQUdFCiAjZGVmaW5lIFRFU1RIUEFHRUZMQUcodW5hbWUsIGZsbmFtZSkJCQkJXAogc3RhdGljIF9fYWx3YXlzX2lubGluZQkJCQkJCVwKLWJvb2wgZm9saW9fdGVzdF9odWdldGxiXyMjZmxuYW1lKHN0cnVjdCBmb2xpbyAqZm9saW8pCQlcCi0Jewl2b2lkICpwcml2YXRlID0gJmFtcDtmb2xpby0mZ3Q7cHJpdmF0ZTsJCVwKJiM0Mztib29sIGZvbGlvX3Rlc3RfaHVnZXRsYl8jI2ZsbmFtZShjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKQlcCiYjNDM7CXsJY29uc3Qgdm9pZCAqcHJpdmF0ZSA9ICZhbXA7Zm9saW8tJmd0O3ByaXZhdGU7CQlcCiAJCXJldHVybiB0ZXN0X2JpdChIUEdfIyNmbG5hbWUsIHByaXZhdGUpOwkJXAogCX0KIApAQCAtNjE2LDcgJiM0Mzs2MTUsNyBAQCB2b2lkIGZvbGlvX2NsZWFyX2h1Z2V0bGJfIyNmbG5hbWUoc3RydWN0IGZvbGlvICpmb2xpbykJCVwKICNlbHNlCiAjZGVmaW5lIFRFU1RIUEFHRUZMQUcodW5hbWUsIGZsbmFtZSkJCQkJXAogc3RhdGljIGlubGluZSBib29sCQkJCQkJXAotZm9saW9fdGVzdF9odWdldGxiXyMjZmxuYW1lKHN0cnVjdCBmb2xpbyAqZm9saW8pCQlcCiYjNDM7Zm9saW9fdGVzdF9odWdldGxiXyMjZmxuYW1lKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8pCQlcCiAJeyByZXR1cm4gMDsgfQogCiAjZGVmaW5lIFNFVEhQQUdFRkxBRyh1bmFtZSwgZmxuYW1lKQkJCQlcCkBAIC03MjcsNyAmIzQzOzcyNiw3IEBAIHN0YXRpYyBpbmxpbmUgc3RydWN0IGh1Z2VwYWdlX3N1YnBvb2wgKnN1YnBvb2xfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSkKIAlyZXR1cm4gSFVHRVRMQkZTX1NCKGlub2RlLSZndDtpX3NiKS0mZ3Q7c3Bvb2w7CiB9CiAKLXN0YXRpYyBpbmxpbmUgc3RydWN0IGh1Z2VwYWdlX3N1YnBvb2wgKmh1Z2V0bGJfZm9saW9fc3VicG9vbChzdHJ1Y3QgZm9saW8gKmZvbGlvKQomIzQzO3N0YXRpYyBpbmxpbmUgc3RydWN0IGh1Z2VwYWdlX3N1YnBvb2wgKmh1Z2V0bGJfZm9saW9fc3VicG9vbChjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKQogewogCXJldHVybiBmb2xpby0mZ3Q7X2h1Z2V0bGJfc3VicG9vbDsKIH0KQEAgLTg1Nyw3ICYjNDM7ODU2LDcgQEAgc3RhdGljIGlubGluZSBib29sIGFyY2hfaGFzX2h1Z2VfYm9vdG1lbV9hbGxvYyh2b2lkKQogfQogI2VuZGlmCiAKLXN0YXRpYyBpbmxpbmUgc3RydWN0IGhzdGF0ZSAqZm9saW9faHN0YXRlKHN0cnVjdCBmb2xpbyAqZm9saW8pCiYjNDM7c3RhdGljIGlubGluZSBzdHJ1Y3QgaHN0YXRlICpmb2xpb19oc3RhdGUoY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbykKIHsKIAlWTV9CVUdfT05fRk9MSU8oIWZvbGlvX3Rlc3RfaHVnZXRsYihmb2xpbyksIGZvbGlvKTsKIAlyZXR1cm4gc2l6ZV90b19oc3RhdGUoZm9saW9fc2l6ZShmb2xpbykpOwpAQCAtMTA3MCwxMSAmIzQzOzEwNjksNiBAQCB2b2lkIGh1Z2V0bGJfcmVnaXN0ZXJfbm9kZShzdHJ1Y3Qgbm9kZSAqbm9kZSk7CiB2b2lkIGh1Z2V0bGJfdW5yZWdpc3Rlcl9ub2RlKHN0cnVjdCBub2RlICpub2RlKTsKICNlbmRpZgogCi0vKgotICogQ2hlY2sgaWYgYSBnaXZlbiByYXcgQHBhZ2UgaW4gYSBodWdlcGFnZSBpcyBIV1BPSVNPTi4KLSAqLwotYm9vbCBpc19yYXdfaHdwb2lzb25fcGFnZV9pbl9odWdlcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSk7Ci0KIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBodWdlX3BhZ2VfbWFza19hbGlnbihzdHJ1Y3QgZmlsZSAqZmlsZSkKIHsKIAlyZXR1cm4gUEFHRV9NQVNLICZhbXA7IH5odWdlX3BhZ2VfbWFzayhoc3RhdGVfZmlsZShmaWxlKSk7CkBAIC0xMDg4LDcgJiM0MzsxMDgyLDcgQEAgc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGh1Z2VfcGFnZV9tYXNrX2FsaWduKHN0cnVjdCBmaWxlICpmaWxlKQogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW5saW5lIHN0cnVjdCBodWdlcGFnZV9zdWJwb29sICpodWdldGxiX2ZvbGlvX3N1YnBvb2woc3RydWN0IGZvbGlvICpmb2xpbykKJiM0MztzdGF0aWMgaW5saW5lIHN0cnVjdCBodWdlcGFnZV9zdWJwb29sICpodWdldGxiX2ZvbGlvX3N1YnBvb2woY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbykKIHsKIAlyZXR1cm4gTlVMTDsKIH0KQEAgLTExNTcsNyAmIzQzOzExNTEsNyBAQCBzdGF0aWMgaW5saW5lIHN0cnVjdCBoc3RhdGUgKmhzdGF0ZV92bWEoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpCiAJcmV0dXJuIE5VTEw7CiB9CiAKLXN0YXRpYyBpbmxpbmUgc3RydWN0IGhzdGF0ZSAqZm9saW9faHN0YXRlKHN0cnVjdCBmb2xpbyAqZm9saW8pCiYjNDM7c3RhdGljIGlubGluZSBzdHJ1Y3QgaHN0YXRlICpmb2xpb19oc3RhdGUoY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbykKIHsKIAlyZXR1cm4gTlVMTDsKIH0KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbW1fdHlwZXMuaCBiL2luY2x1ZGUvbGludXgvbW1fdHlwZXMuaAppbmRleCBiMThjMmIyZTdkMmM2NS4uODZhMmQwZmVlNTU3YmUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbW1fdHlwZXMuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L21tX3R5cGVzLmgKQEAgLTM4Nyw3ICYjNDM7Mzg3LDcgQEAgdHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBtbV9pZF90OwogICogQF9odWdldGxiX3N1YnBvb2w6IERvIG5vdCB1c2UgZGlyZWN0bHksIHVzZSBhY2Nlc3NvciBpbiBodWdldGxiLmguCiAgKiBAX2h1Z2V0bGJfY2dyb3VwOiBEbyBub3QgdXNlIGRpcmVjdGx5LCB1c2UgYWNjZXNzb3IgaW4gaHVnZXRsYl9jZ3JvdXAuaC4KICAqIEBfaHVnZXRsYl9jZ3JvdXBfcnN2ZDogRG8gbm90IHVzZSBkaXJlY3RseSwgdXNlIGFjY2Vzc29yIGluIGh1Z2V0bGJfY2dyb3VwLmguCi0gKiBAX2h1Z2V0bGJfaHdwb2lzb246IERvIG5vdCB1c2UgZGlyZWN0bHksIGNhbGwgcmF3X2h3cF9saXN0X2hlYWQoKS4KJiM0MzsgKiBAaHVnZXRsYl9od3BvaXNvbjogTGlzdCBvZiBwYWdlcyB3aXRoIGh3cG9pc29uLgogICogQF9kZWZlcnJlZF9saXN0OiBGb2xpb3MgdG8gYmUgc3BsaXQgdW5kZXIgbWVtb3J5IHByZXNzdXJlLgogICogQF91bnVzZWRfc2xhYl9vYmpfZXh0czogUGxhY2Vob2xkZXIgdG8gbWF0Y2ggb2JqX2V4dHMgaW4gc3RydWN0IHNsYWIuCiAgKgpAQCAtNDk5LDcgJiM0Mzs0OTksNyBAQCBzdHJ1Y3QgZm9saW8gewogCQkJdm9pZCAqX2h1Z2V0bGJfc3VicG9vbDsKIAkJCXZvaWQgKl9odWdldGxiX2Nncm91cDsKIAkJCXZvaWQgKl9odWdldGxiX2Nncm91cF9yc3ZkOwotCQkJdm9pZCAqX2h1Z2V0bGJfaHdwb2lzb247CiYjNDM7CQkJc3RydWN0IGh3cF9wYWdlICpodWdldGxiX2h3cG9pc29uOwogCS8qIHByaXZhdGU6IHRoZSB1bmlvbiB3aXRoIHN0cnVjdCBwYWdlIGlzIHRyYW5zaXRpb25hbCAqLwogCQl9OwogCQlzdHJ1Y3QgcGFnZSBfX3BhZ2VfMzsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oIGIvaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmgKaW5kZXggNzIyM2Y2ZjRlMmI0MDMuLjA3Y2M3ODU0YjJkZTE2IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaApAQCAtODkzLDE0ICYjNDM7ODkzLDE5IEBAIHN0YXRpYyBpbmxpbmUgaW50IFBhZ2VUcmFuc0NvbXBvdW5kKGNvbnN0IHN0cnVjdCBwYWdlICpwYWdlKQogVEVTVFBBR0VGTEFHX0ZBTFNFKFRyYW5zQ29tcG91bmQsIHRyYW5zY29tcG91bmQpCiAjZW5kaWYKIAotI2lmIGRlZmluZWQoQ09ORklHX01FTU9SWV9GQUlMVVJFKSAmYW1wOyZhbXA7IGRlZmluZWQoQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFKQomIzQzOyNpZiBkZWZpbmVkKENPTkZJR19NRU1PUllfRkFJTFVSRSkgJmFtcDsmYW1wOyBkZWZpbmVkKENPTkZJR19MQVJHRV9GT0xJTykKIC8qCi0gKiBQYWdlSGFzSFdQb2lzb25lZCBpbmRpY2F0ZXMgdGhhdCBhdCBsZWFzdCBvbmUgc3VicGFnZSBpcyBod3BvaXNvbmVkIGluIHRoZQotICogY29tcG91bmQgcGFnZS4KJiM0MzsgKiBmb2xpb19oYXNfaHdwb2lzb25lZCBpbmRpY2F0ZXMgdGhhdCBhdCBsZWFzdCBvbmUgcGFnZSBpcyBod3BvaXNvbmVkIGluIHRoZQomIzQzOyAqIGZvbGlvLiAgVGhhdCBwYWdlIHdpbGwgdXN1YWxseSBhbHNvIGhhdmUgdGhlIEhXUG9pc29uIGZsYWcgc2V0LCBidXQgdGhpcwomIzQzOyAqIGlzIG5vdCBwb3NzaWJsZSBmb3IgZm9saW9zIHdoaWNoIGhhdmUgSFZPIChzZWUgbWVtb3J5LWZhaWx1cmUgZm9yIHRoZQomIzQzOyAqIHNjaGVtZSB1c2VkIGluIHRoYXQgY2FzZSkuICBZb3UgcHJvYmFibHkgZG9uJiMzOTt0IHdhbnQgdG8gY2FsbCB0aGlzIGRpcmVjdGx5OwomIzQzOyAqIHVzZSBmb2xpb19oYXNfaHdwb2lzb25lZF9wYWdlKCkgaW5zdGVhZC4KICAqCiAgKiBUaGlzIGZsYWcgaXMgc2V0IGJ5IGh3cG9pc29uIGhhbmRsZXIuICBDbGVhcmVkIGJ5IFRIUCBzcGxpdCBvciBmcmVlIHBhZ2UuCiAgKi8KIEZPTElPX0ZMQUcoaGFzX2h3cG9pc29uZWQsIEZPTElPX1NFQ09ORF9QQUdFKQomIzQzO0ZPTElPX1RFU1RfU0VUX0ZMQUcoaGFzX2h3cG9pc29uZWQsIEZPTElPX1NFQ09ORF9QQUdFKQomIzQzO0ZPTElPX1RFU1RfQ0xFQVJfRkxBRyhoYXNfaHdwb2lzb25lZCwgRk9MSU9fU0VDT05EX1BBR0UpCiAjZWxzZQogRk9MSU9fRkxBR19GQUxTRShoYXNfaHdwb2lzb25lZCkKICNlbmRpZgpAQCAtMTA0MSw4ICYjNDM7MTA0NiwyOSBAQCBQQUdFX1RZUEVfT1BTKFNsYWIsIHNsYWIsIHNsYWIpCiAKICNpZmRlZiBDT05GSUdfSFVHRVRMQl9QQUdFCiBGT0xJT19UWVBFX09QUyhodWdldGxiLCBodWdldGxiKQomIzQzOwomIzQzOyNpZmRlZiBDT05GSUdfTUVNT1JZX0ZBSUxVUkUKJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgZm9saW9fdGVzdF9odWdlX3BvaXNvbihjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKQomIzQzO3sKJiM0MzsJcmV0dXJuIChSRUFEX09OQ0UoZm9saW8tJmd0O3BhZ2UucGFnZV90eXBlKSAmZ3Q7Jmd0OyAyMykgPT0KJiM0MzsJCSgoUEdUWV9odWdldGxiICZsdDsmbHQ7IDEpIHwgMSk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBmb2xpb19zZXRfaHVnZV9wb2lzb24oc3RydWN0IGZvbGlvICpmb2xpbykKJiM0Mzt7CiYjNDM7CWZvbGlvLSZndDtwYWdlLnBhZ2VfdHlwZSB8PSAoMSAmbHQ7Jmx0OyAyMyk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBmb2xpb19jbGVhcl9odWdlX3BvaXNvbihzdHJ1Y3QgZm9saW8gKmZvbGlvKQomIzQzO3sKJiM0MzsJZm9saW8tJmd0O3BhZ2UucGFnZV90eXBlICZhbXA7PSB+KDEgJmx0OyZsdDsgMjMpOwomIzQzO30KJiM0MzsjZWxzZQomIzQzO0ZPTElPX1RFU1RfRkxBR19GQUxTRShodWdlX3BvaXNvbikKJiM0MzsjZW5kaWYKICNlbHNlCiBGT0xJT19URVNUX0ZMQUdfRkFMU0UoaHVnZXRsYikKJiM0MztGT0xJT19URVNUX0ZMQUdfRkFMU0UoaHVnZV9wb2lzb24pCiAjZW5kaWYKIAogUEFHRV9UWVBFX09QUyhac21hbGxvYywgenNtYWxsb2MsIHpzbWFsbG9jKQpAQCAtMTA2OCwxMCAmIzQzOzEwOTQsMTQgQEAgc3RhdGljIGlubGluZSBib29sIFBhZ2VIdWdlKGNvbnN0IHN0cnVjdCBwYWdlICpwYWdlKQogCXJldHVybiBmb2xpb190ZXN0X2h1Z2V0bGIocGFnZV9mb2xpbyhwYWdlKSk7CiB9CiAKJiM0Mztib29sIGh1Z2V0bGJfcGFnZV9od3BvaXNvbihjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvLCBjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSk7CiYjNDM7Ym9vbCBodWdldGxiX3VucmVmX3BhZ2VfaHdwb2lzb24oY29uc3Qgc3RydWN0IHBhZ2UgKnBhZ2UpOwomIzQzOwogLyoKLSAqIENoZWNrIGlmIGEgcGFnZSBpcyBjdXJyZW50bHkgbWFya2VkIEhXUG9pc29uZWQuIE5vdGUgdGhhdCB0aGlzIGNoZWNrIGlzCi0gKiBiZXN0IGVmZm9ydCBvbmx5IGFuZCBpbmhlcmVudGx5IHJhY3k6IHRoZXJlIGlzIG5vIHdheSB0byBzeW5jaHJvbml6ZSB3aXRoCi0gKiBmYWlsaW5nIGhhcmR3YXJlLgomIzQzOyAqIENoZWNrIGlmIGEgcGFnZSBpcyBjdXJyZW50bHkgbWFya2VkIEhXUG9pc29uZWQuICBUaGlzIGNoZWNrIGlzIGJlc3QKJiM0MzsgKiBlZmZvcnQgb25seSBhbmQgaW5oZXJlbnRseSByYWN5OiB0aGVyZSBpcyBubyB3YXkgdG8gc3luY2hyb25pemUgd2l0aAomIzQzOyAqIGZhaWxpbmcgaGFyZHdhcmUuICBUaGUgY2FsbGVyIG1heSBub3QgaGF2ZSBhIHJlZmNvdW50IG9uIHRoZSBmb2xpbwomIzQzOyAqIGNvbnRhaW5pbmcgdGhlIHBhZ2UsIHNvIHdlIG11c3QgYmUgY2FyZWZ1bCB0byBub3QgdHJpcCBhbnkgYXNzZXJ0aW9ucy4KICAqLwogc3RhdGljIGlubGluZSBib29sIGlzX3BhZ2VfaHdwb2lzb24oY29uc3Qgc3RydWN0IHBhZ2UgKnBhZ2UpCiB7CkBAIC0xMDgwLDEzICYjNDM7MTExMCwyNiBAQCBzdGF0aWMgaW5saW5lIGJvb2wgaXNfcGFnZV9od3BvaXNvbihjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSkKIAlpZiAoUGFnZUhXUG9pc29uKHBhZ2UpKQogCQlyZXR1cm4gdHJ1ZTsKIAlmb2xpbyA9IHBhZ2VfZm9saW8ocGFnZSk7Ci0JcmV0dXJuIGZvbGlvX3Rlc3RfaHVnZXRsYihmb2xpbykgJmFtcDsmYW1wOyBQYWdlSFdQb2lzb24oJmFtcDtmb2xpby0mZ3Q7cGFnZSk7CiYjNDM7CWlmIChmb2xpb190ZXN0X2h1Z2VfcG9pc29uKGZvbGlvKSkKJiM0MzsJCXJldHVybiBodWdldGxiX3VucmVmX3BhZ2VfaHdwb2lzb24ocGFnZSk7CiYjNDM7CS8qIEluIGNhc2Ugd2UgcmFjZWQgd2l0aCBodWdldGxiIHRyYW5zZmVycmluZyBmbGFncyAqLwomIzQzOwlyZXR1cm4gUGFnZUhXUG9pc29uKHBhZ2UpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgaXNfcmVmX3BhZ2VfaHdwb2lzb24oY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbywKJiM0MzsJCWNvbnN0IHN0cnVjdCBwYWdlICpwYWdlKQomIzQzO3sKJiM0MzsJaWYgKFBhZ2VIV1BvaXNvbihwYWdlKSkKJiM0MzsJCXJldHVybiB0cnVlOwomIzQzOwlpZiAoZm9saW9fdGVzdF9odWdldGxiKGZvbGlvKSkKJiM0MzsJCXJldHVybiBodWdldGxiX3BhZ2VfaHdwb2lzb24oZm9saW8sIHBhZ2UpOwomIzQzOwlyZXR1cm4gZmFsc2U7CiB9CiAKLXN0YXRpYyBpbmxpbmUgYm9vbCBmb2xpb19jb250YWluX2h3cG9pc29uZWRfcGFnZShzdHJ1Y3QgZm9saW8gKmZvbGlvKQomIzQzO3N0YXRpYyBpbmxpbmUgYm9vbCBmb2xpb19oYXNfaHdwb2lzb25lZF9wYWdlKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8pCiB7Ci0JcmV0dXJuIGZvbGlvX3Rlc3RfaHdwb2lzb24oZm9saW8pIHx8Ci0JICAgIChmb2xpb190ZXN0X2xhcmdlKGZvbGlvKSAmYW1wOyZhbXA7IGZvbGlvX3Rlc3RfaGFzX2h3cG9pc29uZWQoZm9saW8pKTsKJiM0MzsJcmV0dXJuIFBhZ2VIV1BvaXNvbigmYW1wO2ZvbGlvLSZndDtwYWdlKSB8fAomIzQzOwkgICAgICAgKGZvbGlvX3Rlc3RfbGFyZ2UoZm9saW8pICZhbXA7JmFtcDsgZm9saW9fdGVzdF9oYXNfaHdwb2lzb25lZChmb2xpbykpOwogfQogCiBib29sIGlzX2ZyZWVfYnVkZHlfcGFnZShjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BhZ2VtYXAuaCBiL2luY2x1ZGUvbGludXgvcGFnZW1hcC5oCmluZGV4IDJjMzcxOGQ1OTJkNmRkLi4yMmQ0ODkzNWZmZGE3YyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9wYWdlbWFwLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9wYWdlbWFwLmgKQEAgLTIxMCw2ICYjNDM7MjEwLDcgQEAgZW51bSBtYXBwaW5nX2ZsYWdzIHsKIAlBU19XUklURUJBQ0tfTUFZX0RFQURMT0NLX09OX1JFQ0xBSU0gPSA5LAogCUFTX0tFUk5FTF9GSUxFID0gMTAsCS8qIG1hcHBpbmcgZm9yIGEgZmFrZSBrZXJuZWwgZmlsZSB0aGF0IHNob3VsZG4mIzM5O3QKIAkJCQkgICBhY2NvdW50IHVzYWdlIHRvIHVzZXIgY2dyb3VwcyAqLwomIzQzOwlBU19BVVRIT1JJVEFUSVZFID0gMTEsCS8qIElmIHdlIG1pc3MgaW4gdGhlIHBhZ2UgY2FjaGUsIGl0JiMzOTtzIGEgaG9sZSAqLwogCS8qIEJpdHMgMTYtMjUgYXJlIHVzZWQgZm9yIEZPTElPX09SREVSICovCiAJQVNfRk9MSU9fT1JERVJfQklUUyA9IDUsCiAJQVNfRk9MSU9fT1JERVJfTUlOID0gMTYsCkBAIC0zNDUsNiAmIzQzOzM0NiwxNiBAQCBzdGF0aWMgaW5saW5lIGJvb2wgbWFwcGluZ193cml0ZWJhY2tfbWF5X2RlYWRsb2NrX29uX3JlY2xhaW0oY29uc3Qgc3RydWN0IGFkZHJlcwogCXJldHVybiB0ZXN0X2JpdChBU19XUklURUJBQ0tfTUFZX0RFQURMT0NLX09OX1JFQ0xBSU0sICZhbXA7bWFwcGluZy0mZ3Q7ZmxhZ3MpOwogfQogCiYjNDM7c3RhdGljIGlubGluZSB2b2lkIG1hcHBpbmdfc2V0X2F1dGhvcml0YXRpdmUoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcpCiYjNDM7ewomIzQzOwlzZXRfYml0KEFTX0FVVEhPUklUQVRJVkUsICZhbXA7bWFwcGluZy0mZ3Q7ZmxhZ3MpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgbWFwcGluZ19pc19hdXRob3JpdGF0aXZlKGNvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nKQomIzQzO3sKJiM0MzsJcmV0dXJuIHRlc3RfYml0KEFTX0FVVEhPUklUQVRJVkUsICZhbXA7bWFwcGluZy0mZ3Q7ZmxhZ3MpOwomIzQzO30KJiM0MzsKIHN0YXRpYyBpbmxpbmUgZ2ZwX3QgbWFwcGluZ19nZnBfbWFzayhjb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZykKIHsKIAlyZXR1cm4gbWFwcGluZy0mZ3Q7Z2ZwX21hc2s7CkBAIC0zNzMsNyAmIzQzOzM4NCw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBtYXBwaW5nX3NldF9nZnBfbWFzayhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbSwgZ2ZwX3QgbWFzaykKICAqIGFzc3VtcHRpb25zIGFib3V0IG1heGltdW0gb3JkZXIgaWYgVEhQIGFyZSBkaXNhYmxlZCwgYnV0IDggc2VlbXMgbGlrZQogICogYSBnb29kIG9yZGVyICh0aGF0JiMzOTtzIDFNQiBpZiB5b3UmIzM5O3JlIHVzaW5nIDRrQiBwYWdlcykKICAqLwotI2lmZGVmIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRQomIzQzOyNpZmRlZiBDT05GSUdfTEFSR0VfRk9MSU8KICNkZWZpbmUgUFJFRkVSUkVEX01BWF9QQUdFQ0FDSEVfT1JERVIJSFBBR0VfUE1EX09SREVSCiAjZWxzZQogI2RlZmluZSBQUkVGRVJSRURfTUFYX1BBR0VDQUNIRV9PUkRFUgk4CkBAIC0zOTQsNyAmIzQzOzQwNSw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBtYXBwaW5nX3NldF9nZnBfbWFzayhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbSwgZ2ZwX3QgbWFzaykKICAqLwogc3RhdGljIGlubGluZSBzaXplX3QgbWFwcGluZ19tYXhfZm9saW9fc2l6ZV9zdXBwb3J0ZWQodm9pZCkKIHsKLQlpZiAoSVNfRU5BQkxFRChDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UpKQomIzQzOwlpZiAoSVNfRU5BQkxFRChDT05GSUdfTEFSR0VfRk9MSU8pKQogCQlyZXR1cm4gMVUgJmx0OyZsdDsgKFBBR0VfU0hJRlQgJiM0MzsgTUFYX1BBR0VDQUNIRV9PUkRFUik7CiAJcmV0dXJuIFBBR0VfU0laRTsKIH0KQEAgLTQwNSwyOSAmIzQzOzQxNiwyMyBAQCBzdGF0aWMgaW5saW5lIHNpemVfdCBtYXBwaW5nX21heF9mb2xpb19zaXplX3N1cHBvcnRlZCh2b2lkKQogICogQG1pbjogTWluaW11bSBmb2xpbyBvcmRlciAoYmV0d2VlbiAwLU1BWF9QQUdFQ0FDSEVfT1JERVIgaW5jbHVzaXZlKS4KICAqIEBtYXg6IE1heGltdW0gZm9saW8gb3JkZXIgKGJldHdlZW4gQG1pbi1NQVhfUEFHRUNBQ0hFX09SREVSIGluY2x1c2l2ZSkuCiAgKgotICogVGhlIGZpbGVzeXN0ZW0gc2hvdWxkIGNhbGwgdGhpcyBmdW5jdGlvbiBpbiBpdHMgaW5vZGUgY29uc3RydWN0b3IgdG8KLSAqIGluZGljYXRlIHdoaWNoIGJhc2Ugc2l6ZSAobWluKSBhbmQgbWF4aW11bSBzaXplIChtYXgpIG9mIGZvbGlvIHRoZSBWRlMKLSAqIGNhbiB1c2UgdG8gY2FjaGUgdGhlIGNvbnRlbnRzIG9mIHRoZSBmaWxlLiAgVGhpcyBzaG91bGQgb25seSBiZSB1c2VkCi0gKiBpZiB0aGUgZmlsZXN5c3RlbSBuZWVkcyBzcGVjaWFsIGhhbmRsaW5nIG9mIGZvbGlvIHNpemVzIChpZSB0aGVyZSBpcwotICogc29tZXRoaW5nIHRoZSBjb3JlIGNhbm5vdCBrbm93KS4KJiM0MzsgKiBUaGUgZmlsZXN5c3RlbSBzaG91bGQgY2FsbCB0aGlzIGZ1bmN0aW9uIGluIGl0cyBpbm9kZSBjb25zdHJ1Y3RvcgomIzQzOyAqIHRvIGluZGljYXRlIHdoaWNoIHNpemUgZm9saW9zIGNhbiBiZSB1c2VkIHRvIGNhY2hlIHRoZSBjb250ZW50cyBvZgomIzQzOyAqIHRoZSBpbm9kZS4gIFRoaXMgc2hvdWxkIG9ubHkgYmUgdXNlZCBpZiB0aGUgZmlsZXN5c3RlbSBuZWVkcyBzcGVjaWFsCiYjNDM7ICogaGFuZGxpbmcgb2YgZm9saW8gc2l6ZXMgKGllIHRoZXJlIGlzIHNvbWV0aGluZyB0aGUgY29yZSBjYW5ub3Qga25vdykuCiAgKiBEbyBub3QgdHVuZSBpdCBiYXNlZCBvbiwgZWcsIGlfc2l6ZS4KICAqCiYjNDM7ICogaHVnZXRsYiBjYWxscyB0aGlzIHdpdGggb3JkZXJzIGxhcmdlciB0aGFuIE1BWF9QQUdFQ0FDSEVfT1JERVIuCiYjNDM7ICogTm9ybWFsIGZpbGVzeXN0ZW1zIHNob3VsZCBub3QgZG8gdGhpcy4KJiM0MzsgKgogICogQ29udGV4dDogVGhpcyBzaG91bGQgbm90IGJlIGNhbGxlZCB3aGlsZSB0aGUgaW5vZGUgaXMgYWN0aXZlIGFzIGl0CiAgKiBpcyBub24tYXRvbWljLgogICovCiBzdGF0aWMgaW5saW5lIHZvaWQgbWFwcGluZ19zZXRfZm9saW9fb3JkZXJfcmFuZ2Uoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsCi0JCQkJCQkgdW5zaWduZWQgaW50IG1pbiwKLQkJCQkJCSB1bnNpZ25lZCBpbnQgbWF4KQomIzQzOwkJdW5zaWduZWQgaW50IG1pbiwgdW5zaWduZWQgaW50IG1heCkKIHsKLQlpZiAoIUlTX0VOQUJMRUQoQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFKSkKJiM0MzsJaWYgKCFJU19FTkFCTEVEKENPTkZJR19MQVJHRV9GT0xJTykpCiAJCXJldHVybjsKLQotCWlmIChtaW4gJmd0OyBNQVhfUEFHRUNBQ0hFX09SREVSKQotCQltaW4gPSBNQVhfUEFHRUNBQ0hFX09SREVSOwotCi0JaWYgKG1heCAmZ3Q7IE1BWF9QQUdFQ0FDSEVfT1JERVIpCi0JCW1heCA9IE1BWF9QQUdFQ0FDSEVfT1JERVI7Ci0KIAlpZiAobWF4ICZsdDsgbWluKQogCQltYXggPSBtaW47CiAKQEAgLTQ2MCw3ICYjNDM7NDY1LDcgQEAgc3RhdGljIGlubGluZSB2b2lkIG1hcHBpbmdfc2V0X2xhcmdlX2ZvbGlvcyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZykKIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50CiBtYXBwaW5nX21heF9mb2xpb19vcmRlcihjb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZykKIHsKLQlpZiAoIUlTX0VOQUJMRUQoQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFKSkKJiM0MzsJaWYgKCFJU19FTkFCTEVEKENPTkZJR19MQVJHRV9GT0xJTykpCiAJCXJldHVybiAwOwogCXJldHVybiAobWFwcGluZy0mZ3Q7ZmxhZ3MgJmFtcDsgQVNfRk9MSU9fT1JERVJfTUFYX01BU0spICZndDsmZ3Q7IEFTX0ZPTElPX09SREVSX01BWDsKIH0KQEAgLTQ2OCw3ICYjNDM7NDczLDcgQEAgbWFwcGluZ19tYXhfZm9saW9fb3JkZXIoY29uc3Qgc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcpCiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludAogbWFwcGluZ19taW5fZm9saW9fb3JkZXIoY29uc3Qgc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcpCiB7Ci0JaWYgKCFJU19FTkFCTEVEKENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSkpCiYjNDM7CWlmICghSVNfRU5BQkxFRChDT05GSUdfTEFSR0VfRk9MSU8pKQogCQlyZXR1cm4gMDsKIAlyZXR1cm4gKG1hcHBpbmctJmd0O2ZsYWdzICZhbXA7IEFTX0ZPTElPX09SREVSX01JTl9NQVNLKSAmZ3Q7Jmd0OyBBU19GT0xJT19PUkRFUl9NSU47CiB9CkBAIC01MjQsNyAmIzQzOzUyOSw3IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBtYXBwaW5nX2xhcmdlX2ZvbGlvX3N1cHBvcnQoY29uc3Qgc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpCiAgKgogICogUmV0dXJuOiBUcnVlIGlmIFBNRC1zaXplZCBmb2xpb3MgYXJlIHN1cHBvcnRlZCwgb3RoZXJ3aXNlIGZhbHNlLgogICovCi0jaWZkZWYgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFCiYjNDM7I2lmZGVmIENPTkZJR19MQVJHRV9GT0xJTwogc3RhdGljIGlubGluZSBib29sIG1hcHBpbmdfcG1kX2ZvbGlvX3N1cHBvcnQoY29uc3Qgc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcpCiB7CiAJLyogQVNfRk9MSU9fT1JERVIgaXMgb25seSByZWFzb25hYmxlIGZvciBwYWdlY2FjaGUgZm9saW9zICovCmRpZmYgLS1naXQgYS9tbS9LY29uZmlnIGIvbW0vS2NvbmZpZwppbmRleCA5ZTBjYTQ4MjQ5MDU0Zi4uZTY2NmRkMTRjYTBjM2QgMTAwNjQ0Ci0tLSBhL21tL0tjb25maWcKJiM0MzsmIzQzOyYjNDM7IGIvbW0vS2NvbmZpZwpAQCAtODQzLDExICYjNDM7ODQzLDE1IEBAIGNvbmZpZyBQRVJTSVNURU5UX0hVR0VfWkVST19GT0xJTwogY29uZmlnIE1NX0lECiAJZGVmX2Jvb2wgbgogCiYjNDM7Y29uZmlnIExBUkdFX0ZPTElPCiYjNDM7CWRlZl9ib29sIG4KJiM0MzsJc2VsZWN0IFhBUlJBWV9NVUxUSQomIzQzOwogbWVudWNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRQogCWJvb2wgJiMzNDtUcmFuc3BhcmVudCBIdWdlcGFnZSBTdXBwb3J0JiMzNDsKIAlkZXBlbmRzIG9uIEhBVkVfQVJDSF9UUkFOU1BBUkVOVF9IVUdFUEFHRSAmYW1wOyZhbXA7ICFQUkVFTVBUX1JUCiAJc2VsZWN0IENPTVBBQ1RJT04KLQlzZWxlY3QgWEFSUkFZX01VTFRJCiYjNDM7CXNlbGVjdCBMQVJHRV9GT0xJTwogCXNlbGVjdCBNTV9JRAogCWhlbHAKIAkgIFRyYW5zcGFyZW50IEh1Z2VwYWdlcyBhbGxvd3MgdGhlIGtlcm5lbCB0byB1c2UgaHVnZSBwYWdlcyBhbmQKZGlmZiAtLWdpdCBhL21tL2ZpbGVtYXAuYyBiL21tL2ZpbGVtYXAuYwppbmRleCA1OGViOWQyNDA2NDM0OC4uNWE4Y2MyMGU2MjRlNGQgMTAwNjQ0Ci0tLSBhL21tL2ZpbGVtYXAuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9maWxlbWFwLmMKQEAgLTI0ODMsNiAmIzQzOzI0ODMsOCBAQCBzdGF0aWMgdm9pZCBmaWxlbWFwX2dldF9yZWFkX2JhdGNoKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLAogCiAJCWlmICghZm9saW9fYmF0Y2hfYWRkKGZiYXRjaCwgZm9saW8pKQogCQkJYnJlYWs7CiYjNDM7CQlpZiAoZm9saW9faGFzX2h3cG9pc29uZWRfcGFnZShmb2xpbykpCiYjNDM7CQkJYnJlYWs7CiAJCWlmICghZm9saW9fdGVzdF91cHRvZGF0ZShmb2xpbykpCiAJCQlicmVhazsKIAkJaWYgKGZvbGlvX3Rlc3RfcmVhZGFoZWFkKGZvbGlvKSkKQEAgLTI2OTUsNiAmIzQzOzI2OTcsOCBAQCBzdGF0aWMgaW50IGZpbGVtYXBfZ2V0X3BhZ2VzKHN0cnVjdCBraW9jYiAqaW9jYiwgc2l6ZV90IGNvdW50LAogCWlmICghZm9saW9fYmF0Y2hfY291bnQoZmJhdGNoKSkgewogCQlERUZJTkVfUkVBREFIRUFEKHJhY3RsLCBmaWxwLCAmYW1wO2ZpbHAtJmd0O2ZfcmEsIG1hcHBpbmcsIGluZGV4KTsKIAomIzQzOwkJaWYgKG1hcHBpbmdfaXNfYXV0aG9yaXRhdGl2ZShtYXBwaW5nKSkKJiM0MzsJCQlyZXR1cm4gMDsKIAkJaWYgKGlvY2ItJmd0O2tpX2ZsYWdzICZhbXA7IElPQ0JfTk9JTykKIAkJCXJldHVybiAtRUFHQUlOOwogCQlpZiAoaW9jYi0mZ3Q7a2lfZmxhZ3MgJmFtcDsgSU9DQl9OT1dBSVQpCkBAIC0yNzQ5LDYgJiM0MzsyNzUzLDI5IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBwb3Nfc2FtZV9mb2xpbyhsb2ZmX3QgcG9zMSwgbG9mZl90IHBvczIsIHN0cnVjdCBmb2xpbyAqZm9saW8pCiAJcmV0dXJuIChwb3MxICZndDsmZ3Q7IHNoaWZ0ID09IHBvczIgJmd0OyZndDsgc2hpZnQpOwogfQogCiYjNDM7c3RhdGljIHNpemVfdCBhZGp1c3RfcmFuZ2VfaHdwb2lzb24oY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbywgc2l6ZV90IG9mZnNldCwKJiM0MzsJCXNpemVfdCBieXRlcykKJiM0Mzt7CiYjNDM7CWNvbnN0IHN0cnVjdCBwYWdlICpwYWdlID0gZm9saW9fcGFnZShmb2xpbywgb2Zmc2V0IC8gUEFHRV9TSVpFKTsKJiM0MzsJc2l6ZV90IHNhZmVfYnl0ZXM7CiYjNDM7CiYjNDM7CWlmICghZm9saW9faGFzX2h3cG9pc29uZWRfcGFnZShmb2xpbykpCiYjNDM7CQlyZXR1cm4gYnl0ZXM7CiYjNDM7CWlmIChpc19yZWZfcGFnZV9od3BvaXNvbihmb2xpbywgcGFnZSkpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJLyogU2FmZSB0byByZWFkIHRoZSByZW1haW5pbmcgYnl0ZXMgaW4gdGhpcyBwYWdlLiAqLwomIzQzOwlzYWZlX2J5dGVzID0gUEFHRV9TSVpFIC0gKG9mZnNldCAlIFBBR0VfU0laRSk7CiYjNDM7CXBhZ2UmIzQzOyYjNDM7OwomIzQzOwomIzQzOwkvKiBDaGVjayBlYWNoIHJlbWFpbmluZyBwYWdlIGFzIGxvbmcgYXMgd2UgYXJlIG5vdCBkb25lIHlldC4gKi8KJiM0MzsJZm9yICg7IHNhZmVfYnl0ZXMgJmx0OyBieXRlczsgc2FmZV9ieXRlcyAmIzQzOz0gUEFHRV9TSVpFLCBwYWdlJiM0MzsmIzQzOykKJiM0MzsJCWlmIChpc19yZWZfcGFnZV9od3BvaXNvbihmb2xpbywgcGFnZSkpCiYjNDM7CQkJYnJlYWs7CiYjNDM7CiYjNDM7CXJldHVybiBtaW4oc2FmZV9ieXRlcywgYnl0ZXMpOwomIzQzO30KJiM0MzsKIHN0YXRpYyB2b2lkIGZpbGVtYXBfZW5kX2Ryb3BiZWhpbmRfcmVhZChzdHJ1Y3QgZm9saW8gKmZvbGlvKQogewogCWlmICghZm9saW9fdGVzdF9kcm9wYmVoaW5kKGZvbGlvKSkKQEAgLTI4MjgsNiAmIzQzOzI4NTUsMjIgQEAgc3NpemVfdCBmaWxlbWFwX3JlYWQoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsCiAJCQlnb3RvIHB1dF9mb2xpb3M7CiAJCWVuZF9vZmZzZXQgPSBtaW5fdChsb2ZmX3QsIGlzaXplLCBpb2NiLSZndDtraV9wb3MgJiM0MzsgaXRlci0mZ3Q7Y291bnQpOwogCiYjNDM7CQlpZiAoIWZvbGlvX2JhdGNoX2NvdW50KCZhbXA7ZmJhdGNoKSkgewomIzQzOwkJCXNpemVfdCBmc2l6ZSA9IG1hcHBpbmdfbWluX2ZvbGlvX25yYnl0ZXMobWFwcGluZyk7CiYjNDM7CQkJc2l6ZV90IG9mZnNldCA9IGlvY2ItJmd0O2tpX3BvcyAmYW1wOyAoZnNpemUgLSAxKTsKJiM0MzsJCQlzaXplX3QgYnl0ZXMgPSBtaW5fdChsb2ZmX3QsIGVuZF9vZmZzZXQgLSBpb2NiLSZndDtraV9wb3MsCiYjNDM7CQkJCQkgICAgIGZzaXplIC0gb2Zmc2V0KTsKJiM0MzsJCQlzaXplX3QgY29waWVkID0gaW92X2l0ZXJfemVybyhieXRlcywgaXRlcik7CiYjNDM7CiYjNDM7CQkJYWxyZWFkeV9yZWFkICYjNDM7PSBjb3BpZWQ7CiYjNDM7CQkJaW9jYi0mZ3Q7a2lfcG9zICYjNDM7PSBjb3BpZWQ7CiYjNDM7CQkJbGFzdF9wb3MgPSBpb2NiLSZndDtraV9wb3M7CiYjNDM7CiYjNDM7CQkJaWYgKGNvcGllZCAmbHQ7IGJ5dGVzKQomIzQzOwkJCQllcnJvciA9IC1FRkFVTFQ7CiYjNDM7CQkJY29udGludWU7CiYjNDM7CQl9CiYjNDM7CiAJCS8qCiAJCSAqIE9uY2Ugd2Ugc3RhcnQgY29weWluZyBkYXRhLCB3ZSBkb24mIzM5O3Qgd2FudCB0byBiZSB0b3VjaGluZyBhbnkKIAkJICogY2FjaGVsaW5lcyB0aGF0IG1pZ2h0IGJlIGNvbnRlbmRlZDoKQEAgLTI4NjIsMTQgJiM0MzsyOTA1LDE4IEBAIHNzaXplX3QgZmlsZW1hcF9yZWFkKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICppdGVyLAogCQkJaWYgKHdyaXRhYmx5X21hcHBlZCkKIAkJCQlmbHVzaF9kY2FjaGVfZm9saW8oZm9saW8pOwogCi0JCQljb3BpZWQgPSBjb3B5X2ZvbGlvX3RvX2l0ZXIoZm9saW8sIG9mZnNldCwgYnl0ZXMsIGl0ZXIpOwomIzQzOwkJCWNvcGllZCA9IGFkanVzdF9yYW5nZV9od3BvaXNvbihmb2xpbywgb2Zmc2V0LCBieXRlcyk7CiYjNDM7CQkJaWYgKGNvcGllZCAmbHQ7IGJ5dGVzKQomIzQzOwkJCQllcnJvciA9IC1FSU87CiYjNDM7CQkJY29waWVkID0gY29weV9mb2xpb190b19pdGVyKGZvbGlvLCBvZmZzZXQsIGNvcGllZCwgaXRlcik7CiAKIAkJCWFscmVhZHlfcmVhZCAmIzQzOz0gY29waWVkOwogCQkJaW9jYi0mZ3Q7a2lfcG9zICYjNDM7PSBjb3BpZWQ7CiAJCQlsYXN0X3BvcyA9IGlvY2ItJmd0O2tpX3BvczsKIAogCQkJaWYgKGNvcGllZCAmbHQ7IGJ5dGVzKSB7Ci0JCQkJZXJyb3IgPSAtRUZBVUxUOwomIzQzOwkJCQlpZiAoIWVycm9yKQomIzQzOwkJCQkJZXJyb3IgPSAtRUZBVUxUOwogCQkJCWJyZWFrOwogCQkJfQogCQl9CmRpZmYgLS1naXQgYS9tbS9odWdlX21lbW9yeS5jIGIvbW0vaHVnZV9tZW1vcnkuYwppbmRleCAyYmNjYjBhNTNhMGE2MC4uMzUzMzQwMzA5MTA3NGMgMTAwNjQ0Ci0tLSBhL21tL2h1Z2VfbWVtb3J5LmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vaHVnZV9tZW1vcnkuYwpAQCAtNDQxMyw3ICYjNDM7NDQxMyw3IEBAIHN0YXRpYyBib29sIHRocF91bmRlcnVzZWQoc3RydWN0IGZvbGlvICpmb2xpbykKIAlpZiAoa2h1Z2VwYWdlZF9tYXhfcHRlc19ub25lID09IEhQQUdFX1BNRF9OUiAtIDEpCiAJCXJldHVybiBmYWxzZTsKIAotCWlmIChmb2xpb19jb250YWluX2h3cG9pc29uZWRfcGFnZShmb2xpbykpCiYjNDM7CWlmIChmb2xpb19oYXNfaHdwb2lzb25lZF9wYWdlKGZvbGlvKSkKIAkJcmV0dXJuIGZhbHNlOwogCiAJZm9yIChpID0gMDsgaSAmbHQ7IGZvbGlvX25yX3BhZ2VzKGZvbGlvKTsgaSYjNDM7JiM0MzspIHsKZGlmZiAtLWdpdCBhL21tL2h1Z2V0bGIuYyBiL21tL2h1Z2V0bGIuYwppbmRleCA1NzEyMTJiODA4MzVlYy4uYWFhYzZlMmFmNGMyNGEgMTAwNjQ0Ci0tLSBhL21tL2h1Z2V0bGIuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9odWdldGxiLmMKQEAgLTEyNTUsNyAmIzQzOzEyNTUsNyBAQCBzdGF0aWMgc3RydWN0IGZvbGlvICpkZXF1ZXVlX2h1Z2V0bGJfZm9saW9fbm9kZV9leGFjdChzdHJ1Y3QgaHN0YXRlICpoLAogCQlpZiAocGluICZhbXA7JmFtcDsgIWZvbGlvX2lzX2xvbmd0ZXJtX3Bpbm5hYmxlKGZvbGlvKSkKIAkJCWNvbnRpbnVlOwogCi0JCWlmIChmb2xpb190ZXN0X2h3cG9pc29uKGZvbGlvKSkKJiM0MzsJCWlmIChmb2xpb190ZXN0X2hhc19od3BvaXNvbmVkKGZvbGlvKSkKIAkJCWNvbnRpbnVlOwogCiAJCWlmIChpc19taWdyYXRlX2lzb2xhdGVfcGFnZSgmYW1wO2ZvbGlvLSZndDtwYWdlKSkKQEAgLTE0OTgsMTAgJiM0MzsxNDk4LDEwIEBAIHN0YXRpYyB2b2lkIF9fdXBkYXRlX2FuZF9mcmVlX2h1Z2V0bGJfZm9saW8oc3RydWN0IGhzdGF0ZSAqaCwKIAl9CiAKIAkvKgotCSAqIE1vdmUgUGFnZUhXUG9pc29uIGZsYWcgZnJvbSBoZWFkIHBhZ2UgdG8gdGhlIHJhdyBlcnJvciBwYWdlcywKLQkgKiB3aGljaCBtYWtlcyBhbnkgaGVhbHRoeSBzdWJwYWdlcyByZXVzYWJsZS4KJiM0MzsJICogTW92ZSBIV1BvaXNvbiBmbGFnIHRvIGVhY2ggZXJyb3IgcGFnZQomIzQzOwkgKiB3aGljaCBtYWtlcyBhbnkgaGVhbHRoeSBwYWdlcyByZXVzYWJsZS4KIAkgKi8KLQlpZiAodW5saWtlbHkoZm9saW9fdGVzdF9od3BvaXNvbihmb2xpbykpKQomIzQzOwlpZiAodW5saWtlbHkoZm9saW9fdGVzdF9oYXNfaHdwb2lzb25lZChmb2xpbykpKQogCQlmb2xpb19jbGVhcl9odWdldGxiX2h3cG9pc29uKGZvbGlvKTsKIAogCVZNX0JVR19PTl9GT0xJTyhmb2xpb19yZWZfY291bnQoZm9saW8pLCBmb2xpbyk7CkBAIC0xNzc1LDcgJiM0MzsxNzc1LDcgQEAgdm9pZCBpbml0X25ld19odWdldGxiX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8pCiAgKiBzdGFibGUuICBEdWUgdG8gbG9ja2luZyBvcmRlciwgd2UgY2FuIG9ubHkgdHJ5bG9ja193cml0ZS4gIElmIHdlIGNhbgogICogbm90IGdldCB0aGUgbG9jaywgc2ltcGx5IHJldHVybiBOVUxMIHRvIGNhbGxlci4KICAqLwotc3RydWN0IGFkZHJlc3Nfc3BhY2UgKmh1Z2V0bGJfZm9saW9fbWFwcGluZ19sb2NrX3dyaXRlKHN0cnVjdCBmb2xpbyAqZm9saW8pCiYjNDM7c3RydWN0IGFkZHJlc3Nfc3BhY2UgKmh1Z2V0bGJfZm9saW9fbWFwcGluZ19sb2NrX3dyaXRlKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8pCiB7CiAJc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcgPSBmb2xpb19tYXBwaW5nKGZvbGlvKTsKIApAQCAtMzk5OCw3ICYjNDM7Mzk5OCw3IEBAIGxvbmcgZGVtb3RlX3Bvb2xfaHVnZV9wYWdlKHN0cnVjdCBoc3RhdGUgKnNyYywgbm9kZW1hc2tfdCAqbm9kZXNfYWxsb3dlZCwKIAkJc3RydWN0IGZvbGlvICpmb2xpbywgKm5leHQ7CiAKIAkJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGZvbGlvLCBuZXh0LCAmYW1wO3NyYy0mZ3Q7aHVnZXBhZ2VfZnJlZWxpc3RzW25vZGVdLCBscnUpIHsKLQkJCWlmIChmb2xpb190ZXN0X2h3cG9pc29uKGZvbGlvKSkKJiM0MzsJCQlpZiAoZm9saW9fdGVzdF9oYXNfaHdwb2lzb25lZChmb2xpbykpCiAJCQkJY29udGludWU7CiAKIAkJCXJlbW92ZV9odWdldGxiX2ZvbGlvKHNyYywgZm9saW8sIGZhbHNlKTsKQEAgLTU4MDksNyAmIzQzOzU4MDksNyBAQCBzdGF0aWMgdm1fZmF1bHRfdCBodWdldGxiX25vX3BhZ2Uoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsCiAJCSAqIGRvbiYjMzk7dCBoYXZlIGh3cG9pc29uZWQgc3dhcCBlbnRyeSBmb3IgZXJyb3JlZCB2aXJ0dWFsIGFkZHJlc3MuCiAJCSAqIFNvIHdlIG5lZWQgdG8gYmxvY2sgaHVnZXBhZ2UgZmF1bHQgYnkgUEdfaHdwb2lzb24gYml0IGNoZWNrLgogCQkgKi8KLQkJaWYgKHVubGlrZWx5KGZvbGlvX3Rlc3RfaHdwb2lzb24oZm9saW8pKSkgewomIzQzOwkJaWYgKHVubGlrZWx5KGZvbGlvX3Rlc3RfaGFzX2h3cG9pc29uZWQoZm9saW8pKSkgewogCQkJcmV0ID0gVk1fRkFVTFRfSFdQT0lTT05fTEFSR0UgfAogCQkJCVZNX0ZBVUxUX1NFVF9ISU5ERVgoaHN0YXRlX2luZGV4KGgpKTsKIAkJCWdvdG8gYmFja291dF91bmxvY2tlZDsKQEAgLTYzMTgsNyAmIzQzOzYzMTgsNyBAQCBpbnQgaHVnZXRsYl9tZmlsbF9hdG9taWNfcHRlKHB0ZV90ICpkc3RfcHRlLAogCXB0bCA9IGh1Z2VfcHRlX2xvY2soaCwgZHN0X21tLCBkc3RfcHRlKTsKIAogCXJldCA9IC1FSU87Ci0JaWYgKGZvbGlvX3Rlc3RfaHdwb2lzb24oZm9saW8pKQomIzQzOwlpZiAoZm9saW9fdGVzdF9oYXNfaHdwb2lzb25lZChmb2xpbykpCiAJCWdvdG8gb3V0X3JlbGVhc2VfdW5sb2NrOwogCiAJcmV0ID0gLUVFWElTVDsKZGlmZiAtLWdpdCBhL21tL21lbW9yeS1mYWlsdXJlLmMgYi9tbS9tZW1vcnktZmFpbHVyZS5jCmluZGV4IDUxNTA4YTU1YzQwNTVlLi4zMmY5MTkzNWIyMTA3MCAxMDA2NDQKLS0tIGEvbW0vbWVtb3J5LWZhaWx1cmUuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9tZW1vcnktZmFpbHVyZS5jCkBAIC0xODA4LDYzICYjNDM7MTgwOCw4NiBAQCBFWFBPUlRfU1lNQk9MX0dQTChtZl9kYXhfa2lsbF9wcm9jcyk7CiAKICNpZmRlZiBDT05GSUdfSFVHRVRMQl9QQUdFCiAKJiM0MzsvKiBQcm90ZWN0cyBhbGwgbGlzdHMgb2YgaHdwX3BhZ2VzICovCiYjNDM7c3RhdGljIERFRklORV9TUElOTE9DSyhod3BfcGFnZV9sb2NrKTsKJiM0MzsKIC8qCi0gKiBTdHJ1Y3QgcmF3X2h3cF9wYWdlIHJlcHJlc2VudHMgaW5mb3JtYXRpb24gYWJvdXQgJiMzNDtyYXcgZXJyb3IgcGFnZSYjMzQ7LAotICogY29uc3RydWN0aW5nIHNpbmdseSBsaW5rZWQgbGlzdCBmcm9tIC0mZ3Q7X2h1Z2V0bGJfaHdwb2lzb24gZmllbGQgb2YgZm9saW8uCiYjNDM7ICogaHdwX3BhZ2UgcmVwcmVzZW50cyBpbmZvcm1hdGlvbiBhYm91dCAmIzM0O2Vycm9yIHBhZ2UmIzM0OywKJiM0MzsgKiBjb25zdHJ1Y3Rpbmcgc2luZ2x5IGxpbmtlZCBsaXN0IGZyb20gZm9saW8tJmd0O2h1Z2V0bGJfaHdwb2lzb24gZmllbGQuCiAgKi8KLXN0cnVjdCByYXdfaHdwX3BhZ2UgewotCXN0cnVjdCBsbGlzdF9ub2RlIG5vZGU7CiYjNDM7c3RydWN0IGh3cF9wYWdlIHsKJiM0MzsJc3RydWN0IGh3cF9wYWdlICpuZXh0OwogCXN0cnVjdCBwYWdlICpwYWdlOwogfTsKIAotc3RhdGljIGlubGluZSBzdHJ1Y3QgbGxpc3RfaGVhZCAqcmF3X2h3cF9saXN0X2hlYWQoc3RydWN0IGZvbGlvICpmb2xpbykKJiM0MztzdGF0aWMgYm9vbCBwcmVjaXNlX3BhZ2VfcG9pc29uZWQoY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbywKJiM0MzsJCWNvbnN0IHN0cnVjdCBwYWdlICpwYWdlKQogewotCXJldHVybiAoc3RydWN0IGxsaXN0X2hlYWQgKikmYW1wO2ZvbGlvLSZndDtfaHVnZXRsYl9od3BvaXNvbjsKLX0KLQotYm9vbCBpc19yYXdfaHdwb2lzb25fcGFnZV9pbl9odWdlcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSkKLXsKLQlzdHJ1Y3QgbGxpc3RfaGVhZCAqcmF3X2h3cF9oZWFkOwotCXN0cnVjdCByYXdfaHdwX3BhZ2UgKnA7Ci0Jc3RydWN0IGZvbGlvICpmb2xpbyA9IHBhZ2VfZm9saW8ocGFnZSk7Ci0JYm9vbCByZXQgPSBmYWxzZTsKLQotCWlmICghZm9saW9fdGVzdF9od3BvaXNvbihmb2xpbykpCi0JCXJldHVybiBmYWxzZTsKLQotCWlmICghZm9saW9fdGVzdF9odWdldGxiKGZvbGlvKSkKLQkJcmV0dXJuIFBhZ2VIV1BvaXNvbihwYWdlKTsKJiM0MzsJY29uc3Qgc3RydWN0IGh3cF9wYWdlICpwOwomIzQzOwl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJLyoKLQkgKiBXaGVuIFJhd0h3cFVucmVsaWFibGUgaXMgc2V0LCBrZXJuZWwgbG9zdCB0cmFjayBvZiB3aGljaCBzdWJwYWdlcwotCSAqIGFyZSBIV1BPSVNPTi4gU28gcmV0dXJuIGFzIGlmIEFMTCBzdWJwYWdlcyBhcmUgSFdQT0lTT05lZC4KJiM0MzsJICogV2hlbiBSYXdId3BVbnJlbGlhYmxlIGlzIHNldCwga2VybmVsIGxvc3QgdHJhY2sgb2Ygd2hpY2ggcGFnZXMKJiM0MzsJICogYXJlIEhXUE9JU09OLiBTbyByZXR1cm4gYXMgaWYgQUxMIHBhZ2VzIGFyZSBIV1BPSVNPTmVkLgogCSAqLwogCWlmIChmb2xpb190ZXN0X2h1Z2V0bGJfcmF3X2h3cF91bnJlbGlhYmxlKGZvbGlvKSkKIAkJcmV0dXJuIHRydWU7CiAKLQltdXRleF9sb2NrKCZhbXA7bWZfbXV0ZXgpOwotCi0JcmF3X2h3cF9oZWFkID0gcmF3X2h3cF9saXN0X2hlYWQoZm9saW8pOwotCWxsaXN0X2Zvcl9lYWNoX2VudHJ5KHAsIHJhd19od3BfaGVhZC0mZ3Q7Zmlyc3QsIG5vZGUpIHsKLQkJaWYgKHBhZ2UgPT0gcC0mZ3Q7cGFnZSkgewotCQkJcmV0ID0gdHJ1ZTsKJiM0MzsJc3Bpbl9sb2NrX2lycXNhdmUoJmFtcDtod3BfcGFnZV9sb2NrLCBmbGFncyk7CiYjNDM7CWZvciAocCA9IGZvbGlvLSZndDtodWdldGxiX2h3cG9pc29uOyBwOyBwID0gcC0mZ3Q7bmV4dCkgewomIzQzOwkJaWYgKHBhZ2UgPT0gcC0mZ3Q7cGFnZSkKIAkJCWJyZWFrOwotCQl9CiAJfQomIzQzOwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhbXA7aHdwX3BhZ2VfbG9jaywgZmxhZ3MpOwogCi0JbXV0ZXhfdW5sb2NrKCZhbXA7bWZfbXV0ZXgpOwomIzQzOwlyZXR1cm4gcCAhPSBOVUxMOwomIzQzO30KIAomIzQzOy8qCiYjNDM7ICogQ2hlY2sgaWYgYSBnaXZlbiBAcGFnZSBpbiBhIGh1Z2V0bGIgZm9saW8gaXMgSFdQT0lTT04uCiYjNDM7ICovCiYjNDM7Ym9vbCBodWdldGxiX3BhZ2VfaHdwb2lzb24oY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbywgY29uc3Qgc3RydWN0IHBhZ2UgKnBhZ2UpCiYjNDM7ewomIzQzOwlpZiAoIWZvbGlvX3Rlc3RfaGFzX2h3cG9pc29uZWQoZm9saW8pKQomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwomIzQzOwlyZXR1cm4gcHJlY2lzZV9wYWdlX3BvaXNvbmVkKGZvbGlvLCBwYWdlKTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBXZSBoYXZlIG5vIHJlZmVyZW5jZSBvbiB0aGUgZm9saW8gY29udGFpbmluZyB0aGlzIHBhZ2UuCiYjNDM7ICogVGhlIGh1Z2V0bGJfbG9jayBrZWVwcyBodWdldGxiIGZvbGlvcyBmcm9tIGJlaW5nIGZyZWVkLgomIzQzOyAqLwomIzQzO2Jvb2wgaHVnZXRsYl91bnJlZl9wYWdlX2h3cG9pc29uKGNvbnN0IHN0cnVjdCBwYWdlICpwYWdlKQomIzQzO3sKJiM0MzsJY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbzsKJiM0MzsJdW5zaWduZWQgbG9uZyBmbGFnczsKJiM0MzsJYm9vbCByZXQ7CiYjNDM7CiYjNDM7CXNwaW5fbG9ja19pcnFzYXZlKCZhbXA7aHVnZXRsYl9sb2NrLCBmbGFncyk7CiYjNDM7CWZvbGlvID0gcGFnZV9mb2xpbyhwYWdlKTsKJiM0MzsJaWYgKCFmb2xpb190ZXN0X2h1Z2VfcG9pc29uKGZvbGlvKSkgewomIzQzOwkJcmV0ID0gUGFnZUhXUG9pc29uKHBhZ2UpOwomIzQzOwkJZ290byB1bmxvY2s7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0ID0gcHJlY2lzZV9wYWdlX3BvaXNvbmVkKGZvbGlvLCBwYWdlKTsKJiM0Mzt1bmxvY2s6CiYjNDM7CXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFtcDtodWdldGxiX2xvY2ssIGZsYWdzKTsKIAlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgdW5zaWduZWQgbG9uZyBfX2ZvbGlvX2ZyZWVfcmF3X2h3cChzdHJ1Y3QgZm9saW8gKmZvbGlvLCBib29sIG1vdmVfZmxhZykKIHsKLQlzdHJ1Y3QgbGxpc3Rfbm9kZSAqaGVhZDsKLQlzdHJ1Y3QgcmF3X2h3cF9wYWdlICpwLCAqbmV4dDsKJiM0MzsJc3RydWN0IGh3cF9wYWdlICpwLCAqbmV4dDsKIAl1bnNpZ25lZCBsb25nIGNvdW50ID0gMDsKIAotCWhlYWQgPSBsbGlzdF9kZWxfYWxsKHJhd19od3BfbGlzdF9oZWFkKGZvbGlvKSk7Ci0JbGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShwLCBuZXh0LCBoZWFkLCBub2RlKSB7CiYjNDM7CW5leHQgPSBmb2xpby0mZ3Q7aHVnZXRsYl9od3BvaXNvbjsKJiM0MzsJZm9saW8tJmd0O2h1Z2V0bGJfaHdwb2lzb24gPSBOVUxMOwomIzQzOwomIzQzOwl3aGlsZSAobmV4dCkgewomIzQzOwkJcCA9IG5leHQ7CiYjNDM7CQluZXh0ID0gcC0mZ3Q7bmV4dDsKIAkJaWYgKG1vdmVfZmxhZykKIAkJCVNldFBhZ2VIV1BvaXNvbihwLSZndDtwYWdlKTsKIAkJZWxzZQpAQCAtMTg4MSwzNCAmIzQzOzE5MDQsNTggQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgX19mb2xpb19mcmVlX3Jhd19od3Aoc3RydWN0IGZvbGlvICpmb2xpbywgYm9vbCBtb3ZlX2ZsYWcpCiAjZGVmaW5lCU1GX0hVR0VUTEJfRk9MSU9fUFJFX1BPSVNPTkVECTMJLyogZm9saW8gYWxyZWFkeSBwb2lzb25lZCAqLwogI2RlZmluZQlNRl9IVUdFVExCX1BBR0VfUFJFX1BPSVNPTkVECTQJLyogZXhhY3QgcGFnZSBhbHJlYWR5IHBvaXNvbmVkICovCiAjZGVmaW5lCU1GX0hVR0VUTEJfUkVUUlkJCTUJLyogaHVnZXBhZ2UgaXMgYnVzeSwgcmV0cnkgKi8KJiM0MzsKJiM0MztzdGF0aWMgaW5saW5lIGludCBodWdldGxiX3NldF9wb2lzb24oc3RydWN0IGZvbGlvICpmb2xpbykKJiM0Mzt7CiYjNDM7CWlmIChmb2xpb190ZXN0X3NldF9oYXNfaHdwb2lzb25lZChmb2xpbykpCiYjNDM7CQlyZXR1cm4gTUZfSFVHRVRMQl9GT0xJT19QUkVfUE9JU09ORUQ7CiYjNDM7CWZvbGlvX3NldF9odWdlX3BvaXNvbihmb2xpbyk7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW5saW5lIGludCBodWdldGxiX2NsZWFyX3BvaXNvbihzdHJ1Y3QgZm9saW8gKmZvbGlvKQomIzQzO3sKJiM0MzsJaWYgKCFmb2xpb190ZXN0X2hhc19od3BvaXNvbmVkKGZvbGlvKSkKJiM0MzsJCXJldHVybiAtRUJVU1k7CiYjNDM7CWZvbGlvX2NsZWFyX2h1Z2VfcG9pc29uKGZvbGlvKTsKJiM0MzsJZm9saW9fY2xlYXJfaGFzX2h3cG9pc29uZWQoZm9saW8pOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiAvKgogICogU2V0IGh1Z2V0bGIgZm9saW8gYXMgaHdwb2lzb25lZCwgdXBkYXRlIGZvbGlvIHByaXZhdGUgcmF3IGh3cG9pc29uIGxpc3QKICAqIHRvIGtlZXAgdHJhY2sgb2YgdGhlIHBvaXNvbmVkIHBhZ2VzLgogICovCiBzdGF0aWMgaW50IGh1Z2V0bGJfdXBkYXRlX2h3cG9pc29uKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBwYWdlICpwYWdlKQogewotCXN0cnVjdCBsbGlzdF9oZWFkICpoZWFkOwotCXN0cnVjdCByYXdfaHdwX3BhZ2UgKnJhd19od3A7Ci0Jc3RydWN0IHJhd19od3BfcGFnZSAqcDsKLQlpbnQgcmV0ID0gZm9saW9fdGVzdF9zZXRfaHdwb2lzb24oZm9saW8pID8gTUZfSFVHRVRMQl9GT0xJT19QUkVfUE9JU09ORUQgOiAwOwomIzQzOwlzdHJ1Y3QgaHdwX3BhZ2UgKnA7CiYjNDM7CXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiYjNDM7CWludCByZXQgPSBodWdldGxiX3NldF9wb2lzb24oZm9saW8pOwogCiAJLyoKIAkgKiBPbmNlIHRoZSBod3BvaXNvbiBodWdlcGFnZSBoYXMgbG9zdCByZWxpYWJsZSByYXcgZXJyb3IgaW5mbywKLQkgKiB0aGVyZSBpcyBsaXR0bGUgbWVhbmluZyB0byBrZWVwIGFkZGl0aW9uYWwgZXJyb3IgaW5mbyBwcmVjaXNlbHksCi0JICogc28gc2tpcCB0byBhZGQgYWRkaXRpb25hbCByYXcgZXJyb3IgaW5mby4KJiM0MzsJICogdGhlcmUgaXMgbm8gcG9pbnQgaW4ga2VlcGluZyBhZGRpdGlvbmFsIGVycm9yIGluZm8gcHJlY2lzZWx5LAomIzQzOwkgKiBzbyBza2lwIGFkZGluZyBhZGRpdGlvbmFsIHJhdyBlcnJvciBpbmZvLgogCSAqLwogCWlmIChmb2xpb190ZXN0X2h1Z2V0bGJfcmF3X2h3cF91bnJlbGlhYmxlKGZvbGlvKSkKIAkJcmV0dXJuIE1GX0hVR0VUTEJfRk9MSU9fUFJFX1BPSVNPTkVEOwotCWhlYWQgPSByYXdfaHdwX2xpc3RfaGVhZChmb2xpbyk7Ci0JbGxpc3RfZm9yX2VhY2hfZW50cnkocCwgaGVhZC0mZ3Q7Zmlyc3QsIG5vZGUpIHsKJiM0MzsKJiM0MzsJc3Bpbl9sb2NrX2lycXNhdmUoJmFtcDtod3BfcGFnZV9sb2NrLCBmbGFncyk7CiYjNDM7CWZvciAocCA9IGZvbGlvLSZndDtodWdldGxiX2h3cG9pc29uOyBwOyBwID0gcC0mZ3Q7bmV4dCkgewogCQlpZiAocC0mZ3Q7cGFnZSA9PSBwYWdlKQotCQkJcmV0dXJuIE1GX0hVR0VUTEJfUEFHRV9QUkVfUE9JU09ORUQ7CiYjNDM7CQkJYnJlYWs7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKHApIHsKJiM0MzsJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFtcDtod3BfcGFnZV9sb2NrLCBmbGFncyk7CiYjNDM7CQlyZXR1cm4gTUZfSFVHRVRMQl9QQUdFX1BSRV9QT0lTT05FRDsKIAl9CiAKLQlyYXdfaHdwID0ga21hbGxvY19vYmooc3RydWN0IHJhd19od3BfcGFnZSwgR0ZQX0FUT01JQyk7Ci0JaWYgKHJhd19od3ApIHsKLQkJcmF3X2h3cC0mZ3Q7cGFnZSA9IHBhZ2U7Ci0JCWxsaXN0X2FkZCgmYW1wO3Jhd19od3AtJmd0O25vZGUsIGhlYWQpOwomIzQzOwlwID0ga21hbGxvY19vYmooKnAsIEdGUF9BVE9NSUMpOwomIzQzOwlpZiAocCkgewomIzQzOwkJcC0mZ3Q7cGFnZSA9IHBhZ2U7CiYjNDM7CQlwLSZndDtuZXh0ID0gZm9saW8tJmd0O2h1Z2V0bGJfaHdwb2lzb247CiYjNDM7CQlmb2xpby0mZ3Q7aHVnZXRsYl9od3BvaXNvbiA9IHA7CiAJfSBlbHNlIHsKIAkJLyoKIAkJICogRmFpbGVkIHRvIHNhdmUgcmF3IGVycm9yIGluZm8uICBXZSBubyBsb25nZXIgdHJhY2UgYWxsCkBAIC0xOTE3LDE2ICYjNDM7MTk2NCwyMCBAQCBzdGF0aWMgaW50IGh1Z2V0bGJfdXBkYXRlX2h3cG9pc29uKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBwYWdlICpwYWdlKQogCQkgKi8KIAkJZm9saW9fc2V0X2h1Z2V0bGJfcmF3X2h3cF91bnJlbGlhYmxlKGZvbGlvKTsKIAkJLyoKLQkJICogT25jZSBodWdldGxiX3Jhd19od3BfdW5yZWxpYWJsZSBpcyBzZXQsIHJhd19od3BfcGFnZSBpcyBub3QKJiM0MzsJCSAqIE9uY2UgaHVnZXRsYl9yYXdfaHdwX3VucmVsaWFibGUgaXMgc2V0LCBod3BfcGFnZSBpcyBub3QKIAkJICogdXNlZCBhbnkgbW9yZSwgc28gZnJlZSBpdC4KIAkJICovCiAJCV9fZm9saW9fZnJlZV9yYXdfaHdwKGZvbGlvLCBmYWxzZSk7CiAJfQomIzQzOwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhbXA7aHdwX3BhZ2VfbG9jaywgZmxhZ3MpOwogCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyB1bnNpZ25lZCBsb25nIGZvbGlvX2ZyZWVfcmF3X2h3cChzdHJ1Y3QgZm9saW8gKmZvbGlvLCBib29sIG1vdmVfZmxhZykKIHsKJiM0MzsJdW5zaWduZWQgbG9uZyBjb3VudDsKJiM0MzsJdW5zaWduZWQgbG9uZyBmbGFnczsKJiM0MzsKIAkvKgogCSAqIGh1Z2V0bGJfdm1lbW1hcF9vcHRpbWl6ZWQgaHVnZXBhZ2VzIGNhbiYjMzk7dCBiZSBmcmVlZCBiZWNhdXNlIHN0cnVjdAogCSAqIHBhZ2VzIGZvciB0YWlsIHBhZ2VzIGFyZSByZXF1aXJlZCBidXQgdGhleSBkb24mIzM5O3QgZXhpc3QuCkBAIC0xOTQxLDcgJiM0MzsxOTkyLDExIEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIGZvbGlvX2ZyZWVfcmF3X2h3cChzdHJ1Y3QgZm9saW8gKmZvbGlvLCBib29sIG1vdmVfZmxhZykKIAlpZiAoZm9saW9fdGVzdF9odWdldGxiX3Jhd19od3BfdW5yZWxpYWJsZShmb2xpbykpCiAJCXJldHVybiAwOwogCi0JcmV0dXJuIF9fZm9saW9fZnJlZV9yYXdfaHdwKGZvbGlvLCBtb3ZlX2ZsYWcpOwomIzQzOwlzcGluX2xvY2tfaXJxc2F2ZSgmYW1wO2h3cF9wYWdlX2xvY2ssIGZsYWdzKTsKJiM0MzsJY291bnQgPSBfX2ZvbGlvX2ZyZWVfcmF3X2h3cChmb2xpbywgbW92ZV9mbGFnKTsKJiM0MzsJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYW1wO2h3cF9wYWdlX2xvY2ssIGZsYWdzKTsKJiM0MzsKJiM0MzsJcmV0dXJuIGNvdW50OwogfQogCiB2b2lkIGZvbGlvX2NsZWFyX2h1Z2V0bGJfaHdwb2lzb24oc3RydWN0IGZvbGlvICpmb2xpbykKQEAgLTE5NTAsOCAmIzQzOzIwMDUsOCBAQCB2b2lkIGZvbGlvX2NsZWFyX2h1Z2V0bGJfaHdwb2lzb24oc3RydWN0IGZvbGlvICpmb2xpbykKIAkJcmV0dXJuOwogCWlmIChmb2xpb190ZXN0X2h1Z2V0bGJfdm1lbW1hcF9vcHRpbWl6ZWQoZm9saW8pKQogCQlyZXR1cm47Ci0JZm9saW9fY2xlYXJfaHdwb2lzb24oZm9saW8pOwogCWZvbGlvX2ZyZWVfcmF3X2h3cChmb2xpbywgdHJ1ZSk7CiYjNDM7CWZvbGlvX2NsZWFyX2hhc19od3BvaXNvbmVkKGZvbGlvKTsKIH0KIAogc3RhdGljIGludCBnZXRfaHVnZV9wYWdlX2Zvcl9od3BvaXNvbih1bnNpZ25lZCBsb25nIHBmbiwgaW50IGZsYWdzLApAQCAtMjEwNCw2ICYjNDM7MjE1OSwxMSBAQCBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgZm9saW9fZnJlZV9yYXdfaHdwKHN0cnVjdCBmb2xpbyAqZm9saW8sIGJvb2wgZmxhZykKIHsKIAlyZXR1cm4gMDsKIH0KJiM0MzsKJiM0MztzdGF0aWMgaW5saW5lIGludCBodWdldGxiX2NsZWFyX3BvaXNvbihzdHJ1Y3QgZm9saW8gKmZvbGlvKQomIzQzO3sKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQogI2VuZGlmCS8qIENPTkZJR19IVUdFVExCX1BBR0UgKi8KIAogLyogRHJvcCB0aGUgZXh0cmEgcmVmY291bnQgaW4gY2FzZSB3ZSBjb21lIGZyb20gbWFkdmlzZSgpICovCkBAIC0yNjk1LDggJiM0MzsyNzU1LDggQEAgaW50IHVucG9pc29uX21lbW9yeSh1bnNpZ25lZCBsb25nIHBmbikKIAkJZ290byB1bmxvY2tfbXV0ZXg7CiAJfQogCi0JaWYgKCFQYWdlSFdQb2lzb24ocCkpIHsKLQkJdW5wb2lzb25fcHJfaW5mbygmIzM0OyUjbHg6IHBhZ2Ugd2FzIGFscmVhZHkgdW5wb2lzb25lZFxuJiMzNDssCiYjNDM7CWlmICghaXNfcGFnZV9od3BvaXNvbihwKSkgewomIzQzOwkJdW5wb2lzb25fcHJfaW5mbygmIzM0OyUjbHg6IHBhZ2UgaXMgbm90IHBvaXNvbmVkXG4mIzM0OywKIAkJCQkgcGZuLCAmYW1wO3VucG9pc29uX3JzKTsKIAkJZ290byB1bmxvY2tfbXV0ZXg7CiAJfQpAQCAtMjczMCw4ICYjNDM7Mjc5MCw4IEBAIGludCB1bnBvaXNvbl9tZW1vcnkodW5zaWduZWQgbG9uZyBwZm4pCiAJCQljb3VudCA9IGZvbGlvX2ZyZWVfcmF3X2h3cChmb2xpbywgZmFsc2UpOwogCQkJaWYgKGNvdW50ID09IDApCiAJCQkJZ290byB1bmxvY2tfbXV0ZXg7CiYjNDM7CQkJcmV0ID0gaHVnZXRsYl9jbGVhcl9wb2lzb24oZm9saW8pOwogCQl9Ci0JCXJldCA9IGZvbGlvX3Rlc3RfY2xlYXJfaHdwb2lzb24oZm9saW8pID8gMCA6IC1FQlVTWTsKIAl9IGVsc2UgaWYgKGdocCAmbHQ7IDApIHsKIAkJaWYgKGdocCA9PSAtRUhXUE9JU09OKSB7CiAJCQlyZXQgPSBwdXRfcGFnZV9iYWNrX2J1ZGR5KHApID8gMCA6IC1FQlVTWTsKQEAgLTI3NDAsMTYgJiM0MzsyODAwLDE4IEBAIGludCB1bnBvaXNvbl9tZW1vcnkodW5zaWduZWQgbG9uZyBwZm4pCiAJCQl1bnBvaXNvbl9wcl9pbmZvKCYjMzQ7JSNseDogZmFpbGVkIHRvIGdyYWIgcGFnZVxuJiMzNDssCiAJCQkJCSBwZm4sICZhbXA7dW5wb2lzb25fcnMpOwogCQl9Ci0JfSBlbHNlIHsKLQkJaWYgKGZvbGlvX3Rlc3RfaHVnZXRsYihmb2xpbykpIHsKLQkJCWh1Z2UgPSB0cnVlOwotCQkJY291bnQgPSBmb2xpb19mcmVlX3Jhd19od3AoZm9saW8sIGZhbHNlKTsKLQkJCWlmIChjb3VudCA9PSAwKSB7Ci0JCQkJZm9saW9fcHV0KGZvbGlvKTsKLQkJCQlnb3RvIHVubG9ja19tdXRleDsKLQkJCX0KJiM0MzsJfSBlbHNlIGlmIChmb2xpb190ZXN0X2h1Z2V0bGIoZm9saW8pKSB7CiYjNDM7CQlodWdlID0gdHJ1ZTsKJiM0MzsJCWNvdW50ID0gZm9saW9fZnJlZV9yYXdfaHdwKGZvbGlvLCBmYWxzZSk7CiYjNDM7CQlpZiAoY291bnQgPT0gMCkgewomIzQzOwkJCWZvbGlvX3B1dChmb2xpbyk7CiYjNDM7CQkJZ290byB1bmxvY2tfbXV0ZXg7CiAJCX0KLQomIzQzOwkJZm9saW9fcHV0KGZvbGlvKTsKJiM0MzsJCXJldCA9IGh1Z2V0bGJfY2xlYXJfcG9pc29uKGZvbGlvKTsKJiM0MzsJCWlmICghcmV0KQomIzQzOwkJCWZvbGlvX3B1dChmb2xpbyk7CiYjNDM7CX0gZWxzZSB7CiAJCWZvbGlvX3B1dChmb2xpbyk7CiAJCWlmIChUZXN0Q2xlYXJQYWdlSFdQb2lzb24ocCkpIHsKIAkJCWZvbGlvX3B1dChmb2xpbyk7CmRpZmYgLS1naXQgYS9tbS9tZW1vcnlfaG90cGx1Zy5jIGIvbW0vbWVtb3J5X2hvdHBsdWcuYwppbmRleCA3YWMxOWZhYjIyNjMyNC4uMzMwMDdlOGU1NDZhMDkgMTAwNjQ0Ci0tLSBhL21tL21lbW9yeV9ob3RwbHVnLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vbWVtb3J5X2hvdHBsdWcuYwpAQCAtMTgxMyw3ICYjNDM7MTgxMyw3IEBAIHN0YXRpYyB2b2lkIGRvX21pZ3JhdGVfcmFuZ2UodW5zaWduZWQgbG9uZyBzdGFydF9wZm4sIHVuc2lnbmVkIGxvbmcgZW5kX3BmbikKIAkJaWYgKGZvbGlvX3Rlc3RfbGFyZ2UoZm9saW8pKQogCQkJcGZuID0gZm9saW9fcGZuKGZvbGlvKSAmIzQzOyBmb2xpb19ucl9wYWdlcyhmb2xpbykgLSAxOwogCi0JCWlmIChmb2xpb19jb250YWluX2h3cG9pc29uZWRfcGFnZShmb2xpbykpIHsKJiM0MzsJCWlmIChmb2xpb19oYXNfaHdwb2lzb25lZF9wYWdlKGZvbGlvKSkgewogCQkJLyoKIAkJCSAqIHVubWFwX3BvaXNvbmVkX2ZvbGlvKCkgY2Fubm90IGhhbmRsZSBsYXJnZSBmb2xpb3MKIAkJCSAqIGluIGFsbCBjYXNlcyB5ZXQuCmRpZmYgLS1naXQgYS9tbS9ybWFwLmMgYi9tbS9ybWFwLmMKaW5kZXggMWM3N2Q1ZGMwNmU5ZmEuLmZkMTlhMGJmYmZlNzZjIDEwMDY0NAotLS0gYS9tbS9ybWFwLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vcm1hcC5jCkBAIC0xOTc4LDYgJiM0MzsxOTc4LDIyIEBAIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGZvbGlvX3VubWFwX3B0ZV9iYXRjaChzdHJ1Y3QgZm9saW8gKmZvbGlvLAogCQkJCSAgICAgRlBCX1JFU1BFQ1RfV1JJVEUgfCBGUEJfUkVTUEVDVF9TT0ZUX0RJUlRZKTsKIH0KIAomIzQzOy8qCiYjNDM7ICogU2luY2Ugd2UgY2Fubm90IHNwbGl0IGEgaHVnZXRsYiBmb2xpbywgd2Ugd2FudCB0byBpbnNlcnQgYSBwb2lzb24KJiM0MzsgKiBlbnRyeSBpbnRvIHRoZSBwYWdlIHRhYmxlIGZvciB0aGUgd2hvbGUgZm9saW8gZXZlbiBpZiBvbmx5IG9uZSBwYWdlCiYjNDM7ICogaXMgcG9pc29uZWQuICBPdGhlcndpc2UsIHdlJiMzOTt2ZSBzcGxpdCBkb3duIHRvIHRoZSBQVEUgbGV2ZWwgYW5kIHdlIG9ubHkKJiM0MzsgKiB3YW50IHRvIHBvaXNvbiB0aGUgcHJlY2lzZSBwYWdlCiYjNDM7ICovCiYjNDM7c3RhdGljIGJvb2wgdHR1X2NyZWF0ZV9od3BvaXNvbihjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvLAomIzQzOwkJY29uc3Qgc3RydWN0IHBhZ2UgKnBhZ2UsIGVudW0gdHR1X2ZsYWdzIGZsYWdzKQomIzQzO3sKJiM0MzsJaWYgKCEoZmxhZ3MgJmFtcDsgVFRVX0hXUE9JU09OKSkKJiM0MzsJCXJldHVybiBmYWxzZTsKJiM0MzsJaWYgKGZvbGlvX3Rlc3RfaHVnZXRsYihmb2xpbykpCiYjNDM7CQlyZXR1cm4gZm9saW9fdGVzdF9oYXNfaHdwb2lzb25lZChmb2xpbyk7CiYjNDM7CXJldHVybiBQYWdlSFdQb2lzb24ocGFnZSk7CiYjNDM7fQomIzQzOwogLyoKICAqIEBhcmc6IGVudW0gdHR1X2ZsYWdzIHdpbGwgYmUgcGFzc2VkIHRvIHRoaXMgYXJndW1lbnQKICAqLwpAQCAtMTk5Myw3ICYjNDM7MjAwOSw2IEBAIHN0YXRpYyBib29sIHRyeV90b191bm1hcF9vbmUoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCiAJZW51bSB0dHVfZmxhZ3MgZmxhZ3MgPSAoZW51bSB0dHVfZmxhZ3MpKGxvbmcpYXJnOwogCXVuc2lnbmVkIGxvbmcgbnJfcGFnZXMgPSAxLCBlbmRfYWRkcjsKIAl1bnNpZ25lZCBsb25nIHBmbjsKLQl1bnNpZ25lZCBsb25nIGhzeiA9IDA7CiAJaW50IHB0ZXMgPSAwOwogCiAJLyoKQEAgLTIwMjMsOSAmIzQzOzIwMzgsNiBAQCBzdGF0aWMgYm9vbCB0cnlfdG9fdW5tYXBfb25lKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAogCQkgKi8KIAkJYWRqdXN0X3JhbmdlX2lmX3BtZF9zaGFyaW5nX3Bvc3NpYmxlKHZtYSwgJmFtcDtyYW5nZS5zdGFydCwKIAkJCQkJCSAgICAgJmFtcDtyYW5nZS5lbmQpOwotCi0JCS8qIFdlIG5lZWQgdGhlIGh1Z2UgcGFnZSBzaXplIGZvciBzZXRfaHVnZV9wdGVfYXQoKSAqLwotCQloc3ogPSBodWdlX3BhZ2Vfc2l6ZShoc3RhdGVfdm1hKHZtYSkpOwogCX0KIAltbXVfbm90aWZpZXJfaW52YWxpZGF0ZV9yYW5nZV9zdGFydCgmYW1wO3JhbmdlKTsKIApAQCAtMjEyMSw3ICYjNDM7MjEzMyw4IEBAIHN0YXRpYyBib29sIHRyeV90b191bm1hcF9vbmUoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCiAJCQkgKiBUaGUgdHJ5X3RvX3VubWFwKCkgaXMgb25seSBwYXNzZWQgYSBodWdldGxiIHBhZ2UKIAkJCSAqIGluIHRoZSBjYXNlIHdoZXJlIHRoZSBodWdldGxiIHBhZ2UgaXMgcG9pc29uZWQuCiAJCQkgKi8KLQkJCVZNX0JVR19PTl9QQUdFKCFQYWdlSFdQb2lzb24oc3VicGFnZSksIHN1YnBhZ2UpOwomIzQzOwkJCVZNX0JVR19PTl9GT0xJTyghZm9saW9faGFzX2h3cG9pc29uZWRfcGFnZShmb2xpbyksCiYjNDM7CQkJCQlmb2xpbyk7CiAJCQkvKgogCQkJICogaHVnZV9wbWRfdW5zaGFyZSBtYXkgdW5tYXAgYW4gZW50aXJlIFBNRCBwYWdlLgogCQkJICogVGhlcmUgaXMgbm8gd2F5IG9mIGtub3dpbmcgZXhhY3RseSB3aGljaCBQTURzIG1heQpAQCAtMjIwMCwxMiAmIzQzOzIyMTMsMTIgQEAgc3RhdGljIGJvb2wgdHJ5X3RvX3VubWFwX29uZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKIAkJLyogVXBkYXRlIGhpZ2ggd2F0ZXJtYXJrIGJlZm9yZSB3ZSBsb3dlciByc3MgKi8KIAkJdXBkYXRlX2hpd2F0ZXJfcnNzKG1tKTsKIAotCQlpZiAoUGFnZUhXUG9pc29uKHN1YnBhZ2UpICZhbXA7JmFtcDsgKGZsYWdzICZhbXA7IFRUVV9IV1BPSVNPTikpIHsKJiM0MzsJCWlmICh0dHVfY3JlYXRlX2h3cG9pc29uKGZvbGlvLCBzdWJwYWdlLCBmbGFncykpIHsKIAkJCXB0ZXZhbCA9IHN3cF9lbnRyeV90b19wdGUobWFrZV9od3BvaXNvbl9lbnRyeShzdWJwYWdlKSk7CiAJCQlpZiAoZm9saW9fdGVzdF9odWdldGxiKGZvbGlvKSkgewogCQkJCWh1Z2V0bGJfY291bnRfc3ViKGZvbGlvX25yX3BhZ2VzKGZvbGlvKSwgbW0pOwogCQkJCXNldF9odWdlX3B0ZV9hdChtbSwgYWRkcmVzcywgcHZtdy5wdGUsIHB0ZXZhbCwKLQkJCQkJCWhzeik7CiYjNDM7CQkJCQkJZm9saW9fc2l6ZShmb2xpbykpOwogCQkJfSBlbHNlIHsKIAkJCQlkZWNfbW1fY291bnRlcihtbSwgbW1fY291bnRlcihmb2xpbykpOwogCQkJCXNldF9wdGVfYXQobW0sIGFkZHJlc3MsIHB2bXcucHRlLCBwdGV2YWwpOwpAQCAtMjQyMyw3ICYjNDM7MjQzNiw2IEBAIHN0YXRpYyBib29sIHRyeV90b19taWdyYXRlX29uZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKIAlzdHJ1Y3QgbW11X25vdGlmaWVyX3JhbmdlIHJhbmdlOwogCWVudW0gdHR1X2ZsYWdzIGZsYWdzID0gKGVudW0gdHR1X2ZsYWdzKShsb25nKWFyZzsKIAl1bnNpZ25lZCBsb25nIHBmbjsKLQl1bnNpZ25lZCBsb25nIGhzeiA9IDA7CiAKIAkvKgogCSAqIFdoZW4gcmFjaW5nIGFnYWluc3QgZS5nLiB6YXBfcHRlX3JhbmdlKCkgb24gYW5vdGhlciBjcHUsCkBAIC0yNDUyLDkgJiM0MzsyNDY0LDYgQEAgc3RhdGljIGJvb2wgdHJ5X3RvX21pZ3JhdGVfb25lKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAogCQkgKi8KIAkJYWRqdXN0X3JhbmdlX2lmX3BtZF9zaGFyaW5nX3Bvc3NpYmxlKHZtYSwgJmFtcDtyYW5nZS5zdGFydCwKIAkJCQkJCSAgICAgJmFtcDtyYW5nZS5lbmQpOwotCi0JCS8qIFdlIG5lZWQgdGhlIGh1Z2UgcGFnZSBzaXplIGZvciBzZXRfaHVnZV9wdGVfYXQoKSAqLwotCQloc3ogPSBodWdlX3BhZ2Vfc2l6ZShoc3RhdGVfdm1hKHZtYSkpOwogCX0KIAltbXVfbm90aWZpZXJfaW52YWxpZGF0ZV9yYW5nZV9zdGFydCgmYW1wO3JhbmdlKTsKIApAQCAtMjYwNywxNCAmIzQzOzI2MTYsMTQgQEAgc3RhdGljIGJvb2wgdHJ5X3RvX21pZ3JhdGVfb25lKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAogCQkvKiBVcGRhdGUgaGlnaCB3YXRlcm1hcmsgYmVmb3JlIHdlIGxvd2VyIHJzcyAqLwogCQl1cGRhdGVfaGl3YXRlcl9yc3MobW0pOwogCi0JCWlmIChQYWdlSFdQb2lzb24oc3VicGFnZSkpIHsKJiM0MzsJCWlmICh0dHVfY3JlYXRlX2h3cG9pc29uKGZvbGlvLCBzdWJwYWdlLCBUVFVfSFdQT0lTT04pKSB7CiAJCQlWTV9XQVJOX09OX0ZPTElPKGZvbGlvX2lzX2RldmljZV9wcml2YXRlKGZvbGlvKSwgZm9saW8pOwogCiAJCQlwdGV2YWwgPSBzd3BfZW50cnlfdG9fcHRlKG1ha2VfaHdwb2lzb25fZW50cnkoc3VicGFnZSkpOwogCQkJaWYgKGZvbGlvX3Rlc3RfaHVnZXRsYihmb2xpbykpIHsKIAkJCQlodWdldGxiX2NvdW50X3N1Yihmb2xpb19ucl9wYWdlcyhmb2xpbyksIG1tKTsKIAkJCQlzZXRfaHVnZV9wdGVfYXQobW0sIGFkZHJlc3MsIHB2bXcucHRlLCBwdGV2YWwsCi0JCQkJCQloc3opOwomIzQzOwkJCQkJCWZvbGlvX3NpemUoZm9saW8pKTsKIAkJCX0gZWxzZSB7CiAJCQkJZGVjX21tX2NvdW50ZXIobW0sIG1tX2NvdW50ZXIoZm9saW8pKTsKIAkJCQlzZXRfcHRlX2F0KG1tLCBhZGRyZXNzLCBwdm13LnB0ZSwgcHRldmFsKTsKQEAgLTI2NDQsNyAmIzQzOzI2NTMsOCBAQCBzdGF0aWMgYm9vbCB0cnlfdG9fbWlncmF0ZV9vbmUoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCiAJCQlpZiAoYXJjaF91bm1hcF9vbmUobW0sIHZtYSwgYWRkcmVzcywgcHRldmFsKSAmbHQ7IDApIHsKIAkJCQlpZiAoZm9saW9fdGVzdF9odWdldGxiKGZvbGlvKSkKIAkJCQkJc2V0X2h1Z2VfcHRlX2F0KG1tLCBhZGRyZXNzLCBwdm13LnB0ZSwKLQkJCQkJCQlwdGV2YWwsIGhzeik7CiYjNDM7CQkJCQkJCXB0ZXZhbCwKJiM0MzsJCQkJCQkJZm9saW9fc2l6ZShmb2xpbykpOwogCQkJCWVsc2UKIAkJCQkJc2V0X3B0ZV9hdChtbSwgYWRkcmVzcywgcHZtdy5wdGUsIHB0ZXZhbCk7CiAJCQkJcmV0ID0gZmFsc2U7CkBAIC0yNjU3LDcgJiM0MzsyNjY3LDggQEAgc3RhdGljIGJvb2wgdHJ5X3RvX21pZ3JhdGVfb25lKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAogCQkJCWlmIChhbm9uX2V4Y2x1c2l2ZSAmYW1wOyZhbXA7CiAJCQkJICAgIGh1Z2V0bGJfdHJ5X3NoYXJlX2Fub25fcm1hcChmb2xpbykpIHsKIAkJCQkJc2V0X2h1Z2VfcHRlX2F0KG1tLCBhZGRyZXNzLCBwdm13LnB0ZSwKLQkJCQkJCQlwdGV2YWwsIGhzeik7CiYjNDM7CQkJCQkJCXB0ZXZhbCwKJiM0MzsJCQkJCQkJZm9saW9fc2l6ZShmb2xpbykpOwogCQkJCQlyZXQgPSBmYWxzZTsKIAkJCQkJcGFnZV92bWFfbWFwcGVkX3dhbGtfZG9uZSgmYW1wO3B2bXcpOwogCQkJCQlicmVhazsKQEAgLTI3MDMsNyAmIzQzOzI3MTQsNyBAQCBzdGF0aWMgYm9vbCB0cnlfdG9fbWlncmF0ZV9vbmUoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCiAJCQl9CiAJCQlpZiAoZm9saW9fdGVzdF9odWdldGxiKGZvbGlvKSkKIAkJCQlzZXRfaHVnZV9wdGVfYXQobW0sIGFkZHJlc3MsIHB2bXcucHRlLCBzd3BfcHRlLAotCQkJCQkJaHN6KTsKJiM0MzsJCQkJCQlmb2xpb19zaXplKGZvbGlvKSk7CiAJCQllbHNlCiAJCQkJc2V0X3B0ZV9hdChtbSwgYWRkcmVzcywgcHZtdy5wdGUsIHN3cF9wdGUpOwogCQkJdHJhY2Vfc2V0X21pZ3JhdGlvbl9wdGUoYWRkcmVzcywgcHRlX3ZhbChzd3BfcHRlKSwKZGlmZiAtLWdpdCBhL21tL3NobWVtLmMgYi9tbS9zaG1lbS5jCmluZGV4IGI1MWY4M2M5NzBiYjM3Li40OTJjOWJlZjM2MjA3NCAxMDA2NDQKLS0tIGEvbW0vc2htZW0uYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9zaG1lbS5jCkBAIC0zMjQwLDcgJiM0MzszMjQwLDcgQEAgc2htZW1fd3JpdGVfYmVnaW4oY29uc3Qgc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywKIAlpZiAocmV0KQogCQlyZXR1cm4gcmV0OwogCi0JaWYgKGZvbGlvX2NvbnRhaW5faHdwb2lzb25lZF9wYWdlKGZvbGlvKSkgewomIzQzOwlpZiAoZm9saW9faGFzX2h3cG9pc29uZWRfcGFnZShmb2xpbykpIHsKIAkJZm9saW9fdW5sb2NrKGZvbGlvKTsKIAkJZm9saW9fcHV0KGZvbGlvKTsKIAkJcmV0dXJuIC1FSU87CmRpZmYgLS1naXQgYS9tbS92bXNjYW4uYyBiL21tL3Ztc2Nhbi5jCmluZGV4IDM1YzNiYjE1YWU5NmEzLi43MGU1NGFjZTBlNzQxYyAxMDA2NDQKLS0tIGEvbW0vdm1zY2FuLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vdm1zY2FuLmMKQEAgLTEwODYsNyAmIzQzOzEwODYsNyBAQCBzdGF0aWMgdW5zaWduZWQgaW50IHNocmlua19mb2xpb19saXN0KHN0cnVjdCBsaXN0X2hlYWQgKmZvbGlvX2xpc3QsCiAJCWlmICghZm9saW9fdHJ5bG9jayhmb2xpbykpCiAJCQlnb3RvIGtlZXA7CiAKLQkJaWYgKGZvbGlvX2NvbnRhaW5faHdwb2lzb25lZF9wYWdlKGZvbGlvKSkgewomIzQzOwkJaWYgKGZvbGlvX2hhc19od3BvaXNvbmVkX3BhZ2UoZm9saW8pKSB7CiAJCQkvKgogCQkJICogdW5tYXBfcG9pc29uZWRfZm9saW8oKSBjYW4mIzM5O3QgaGFuZGxlIGxhcmdlCiAJCQkgKiBmb2xpbywganVzdCBza2lwIGl0LiBtZW1vcnlfZmFpbHVyZSgpIHdpbGwKZGlmZiAtLWdpdCBhL3ZpcnQva3ZtL2d1ZXN0X21lbWZkLmMgYi92aXJ0L2t2bS9ndWVzdF9tZW1mZC5jCmluZGV4IGRiNTdjNTc2NmFiNjA0Li45NGVlZGNjN2YxYTllMCAxMDA2NDQKLS0tIGEvdmlydC9rdm0vZ3Vlc3RfbWVtZmQuYwomIzQzOyYjNDM7JiM0MzsgYi92aXJ0L2t2bS9ndWVzdF9tZW1mZC5jCkBAIC03NzQsNyAmIzQzOzc3NCw3IEBAIHN0YXRpYyBzdHJ1Y3QgZm9saW8gKl9fa3ZtX2dtZW1fZ2V0X3BmbihzdHJ1Y3QgZmlsZSAqZmlsZSwKIAlpZiAoSVNfRVJSKGZvbGlvKSkKIAkJcmV0dXJuIGZvbGlvOwogCi0JaWYgKGZvbGlvX3Rlc3RfaHdwb2lzb24oZm9saW8pKSB7CiYjNDM7CWlmIChmb2xpb19oYXNfaHdwb2lzb25lZF9wYWdlKGZvbGlvKSkgewogCQlmb2xpb191bmxvY2soZm9saW8pOwogCQlmb2xpb19wdXQoZm9saW8pOwogCQlyZXR1cm4gRVJSX1BUUigtRUhXUE9JU09OKTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjYgMTc6NTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTczNjcKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiAxMDIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgVGFyZ2V0IElkZW50aWZpY2F0aW9uOiBNZW1vcnkgRmFpbHVyZSBhbmQgSHVnZXRsYmZzIENoYW5nZXMqKgoKT2theSwgc28gSSBuZWVkIHRvIGFzc2VzcyB0aGlzIHBhdGNoIHNlcmllcyBmb3IgZnV6emluZyByZWxldmFuY2UuIE15IGluaXRpYWwgaW1wcmVzc2lvbiBpcyB0aGF0IHRoZXNlIGFyZSBzaWduaWZpY2FudCwgZnVuY3Rpb25hbCBjaGFuZ2VzIOKAkyB0aGlzIGhpdHMgaHVnZXRsYmZzLCBtZW1vcnkgZmFpbHVyZSAoaHdwb2lzb24sIHdoaWNoIGlzIGEgYmlnIGNvbmNlcm4pLCBhbmQgZmlsZW1hcCByZWFkIGxvZ2ljLiBNeSBzcGlkZXIgc2Vuc2UgaXMgdGluZ2xpbmcsIHRoaXMgZmVlbHMgaW1wb3J0YW50LgoKU3BlY2lmaWNhbGx5LCBpdCBsb29rcyBsaWtlIGBhZGp1c3RfcmFuZ2VfaHdwb2lzb25gIGluIGBmcy9odWdldGxiZnMvaW5vZGUuY2AgaGFzIGJlZW4gZ2VuZXJhbGl6ZWQgYW5kIG1vdmVkIHRvIGBtbS9maWxlbWFwLmNgLCB3aGlsZSBgaHVnZXRsYmZzX3JlYWRfaXRlcmAgaXMgbm93IHVzaW5nIGBnZW5lcmljX2ZpbGVfcmVhZF9pdGVyYC4gVGhlcmUmIzM5O3MgYWxzbyBzb21lIHJlZmFjdG9yaW5nIGFyb3VuZCBgZm9saW9fdGVzdF9od3BvaXNvbmAsIG5vdyBgZm9saW9faGFzX2h3cG9pc29uZWRfcGFnZWAsIGFjcm9zcyB0aGUgYm9hcmQsIGFuZCB0aGUgaW50cm9kdWN0aW9uIG9mIGBMQVJHRV9GT0xJT2AgaXMgYW5vdGhlciBwb3RlbnRpYWwgYXJlYS4gSXQgbG9va3MgbGlrZSBod3BvaXNvbiB0cmFja2luZyBmb3IgaHVnZXRsYiBmb2xpb3MgaXMgYmVpbmcgb3ZlcmhhdWxlZCB0b28sIHNvIEkgbmVlZCB0byBjaGVjayB0aGUgZGlmZi4KCkFscmlnaHQsIGRpdmluZyBpbnRvIHRoZSBjaGFuZ2VzLiBJbiBgZnMvaHVnZXRsYmZzL2lub2RlLmNgLCBgaHVnZXRsYmZzX3JlYWRfaXRlcmAgaXMgZ29uZSwgYGh1Z2V0bGJmc19maWxlX29wZXJhdGlvbnMucmVhZF9pdGVyYCBpcyBub3cgYGdlbmVyaWNfZmlsZV9yZWFkX2l0ZXJgLCBhbmQgdGhlcmUmIzM5O3MgYSBuZXcgYGh1Z2V0bGJmc19pbml0X3JlZ3VsYXJfaW5vZGVgIHRoYXQgdXNlcyBzb21lIG5ldyBmb2xpby1yZWxhdGVkIGZ1bmN0aW9ucy4gYGluY2x1ZGUvbGludXgvaHVnZXRsYi5oYCBkcm9wcyBgaXNfcmF3X2h3cG9pc29uX3BhZ2VfaW5faHVnZXBhZ2VgLiBJbiBgaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmhgIHdlIHNlZSBgZm9saW9faGFzX2h3cG9pc29uZWRgLCBgZm9saW9fdGVzdF9odWdlX3BvaXNvbmAgYmVpbmcgYWRkZWQsIGFuZCBgZm9saW9fY29udGFpbl9od3BvaXNvbmVkX3BhZ2VgIGlzIHJlbmFtZWQuIGBpbmNsdWRlL2xpbnV4L3BhZ2VtYXAuaGAgYWRkcyBgQVNfQVVUSE9SSVRBVElWRWAsIGFuZCByZWxhdGVkIGZ1bmN0aW9ucywgYW5kIG1vZGlmaWVzIGBtYXBwaW5nX3NldF9mb2xpb19vcmRlcl9yYW5nZWAuIGBtbS9LY29uZmlnYCBicmluZ3MgaW4gYExBUkdFX0ZPTElPYC4KCk5vdywgdGhlIGp1aWN5IHN0dWZmLiBgbW0vZmlsZW1hcC5jYCBpcyB1cGRhdGVkIHRvIGNoZWNrIGZvciBgZm9saW9faGFzX2h3cG9pc29uZWRfcGFnZWAgYW5kIGBtYXBwaW5nX2lzX2F1dGhvcml0YXRpdmVgIGluIGBmaWxlbWFwX2dldF9yZWFkX2JhdGNoYCBhbmQgYGZpbGVtYXBfZ2V0X3BhZ2VzYCwgcmVzcGVjdGl2ZWx5LiBUaGUgbmV3IGBhZGp1c3RfcmFuZ2VfaHdwb2lzb25gIGFuZCBtb2RpZmljYXRpb25zIHRvIGBmaWxlbWFwX3JlYWRgIHRvIGhhbmRsZSBod3BvaXNvbmVkIHBhZ2VzIGFuZCBhdXRob3JpdGF0aXZlIG1hcHBpbmdzIGFyZSB0aGVyZS4gYG1tL21lbW9yeS1mYWlsdXJlLmNgIGdldHMgc2V2ZXJhbCBjaGFuZ2VzLCBpbmNsdWRpbmcgcmVuYW1lcywgbmV3IGZ1bmN0aW9ucyBsaWtlIGBodWdldGxiX3BhZ2VfaHdwb2lzb25gLCBgaHVnZXRsYl91bnJlZl9wYWdlX2h3cG9pc29uYCwgYW5kIG1vZGlmaWNhdGlvbnMgdG8gZXhpc3Rpbmcgb25lcy4gRmluYWxseSwgYG1tL3JtYXAuY2AgaW50cm9kdWNlcyBgdHR1X2NyZWF0ZV9od3BvaXNvbmAgYW5kIG1vZGlmaWVzIGB0cnlfdG9fdW5tYXBfb25lYCBhbmQgYHRyeV90b19taWdyYXRlX29uZWAuCgpDb25jbHVzaW9uOiBUaGlzIHBhdGNoIHNlcmllcyBpcyBkZWZpbml0ZWx5IHRvdWNoaW5nIGNyaXRpY2FsIGtlcm5lbCBhcmVhczogbW0sIGh1Z2V0bGJmcywgYW5kIG1lbW9yeS1mYWlsdXJlLiBUaGlzICptdXN0KiBiZSBmdXp6ZWQuCgpOb3csIGxldCYjMzk7cyBpZGVudGlmeSBzb21lIHBvdGVudGlhbCBmb2N1cyBzeW1ib2xzLiBgYWRqdXN0X3JhbmdlX2h3cG9pc29uYCBpcyBzdGF0aWMsIHNvIHByb2JhYmx5IG5vdCBhIGdvb2QgdGFyZ2V0LiBgZmlsZW1hcF9yZWFkYCBpcyBhbHJlYWR5IGhlYXZpbHkgZnV6emVkLCBzbyBtYXliZSB0b28gaG90LCBidXQgY291bGQgc3RpbGwgYmUgdXNlZnVsLiBJJiMzOTttIGdvaW5nIHRvIGxvb2sgY2xvc2VseSBhdCB0aGVzZTogYGh1Z2V0bGJfcGFnZV9od3BvaXNvbmAsIGBodWdldGxiX3VucmVmX3BhZ2VfaHdwb2lzb25gLCBgaHVnZXRsYl91cGRhdGVfaHdwb2lzb25gLCBgZm9saW9fZnJlZV9yYXdfaHdwYCwgYHVucG9pc29uX21lbW9yeWAsIGB0dHVfY3JlYXRlX2h3cG9pc29uYCwgYW5kIGBodWdldGxiZnNfaW5pdF9yZWd1bGFyX2lub2RlYC4KCkxldCYjMzk7cyBkbyBzb21lIHF1aWNrIHJlc2VhcmNoIHRvIHNlZSB3aGljaCBmdW5jdGlvbnMgYXJlIGFjdHVhbGx5IGV4cG9ydGVkLiBgaHVnZXRsYl9wYWdlX2h3cG9pc29uYCBpcyBub3Qgc3RhdGljLiBgaHVnZXRsYl91bnJlZl9wYWdlX2h3cG9pc29uYCBpcyBhbHNvIG5vdCBzdGF0aWMsIHdoaWNoIGlzIGdvb2QuIGB1bnBvaXNvbl9tZW1vcnlgIGxvb2tzIG5vbi1zdGF0aWMgdG9vLiBgaHVnZXRsYl91cGRhdGVfaHdwb2lzb25gIGlzIHN0YXRpYywgc28gbm8gbHVjayB0aGVyZS4gIGBmaWxlbWFwX3JlYWRgIGlzIGV4cG9ydGVkLgoKSSYjMzk7bSBnb2luZyB0byBmb2N1cyBteSBzZWFyY2ggb24gYG1tL21lbW9yeS1mYWlsdXJlLmNgIHRvIHNlZSBpZiB0aGVyZSYjMzk7cyBhbnl0aGluZyBlbHNlIGFib3V0IGB1bnBvaXNvbl9tZW1vcnlgIGFuZCBgaHVnZXRsYl9wYWdlX2h3cG9pc29uYCB0aGF0IGlzIHJlbGV2YW50LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI2IDE3OjUxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O14oaW50fHZvaWR8Ym9vbCkuKiBodWdldGxiX3BhZ2VfaHdwb2lzb24mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmg9MTA5Mj1zdGF0aWMgaW5saW5lIGJvb2wgUGFnZUh1Z2UoY29uc3Qgc3RydWN0IHBhZ2UgKnBhZ2UpXG4tLVxuaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmgtMTA5Ni1cbmluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oOjEwOTc6Ym9vbCBodWdldGxiX3BhZ2VfaHdwb2lzb24oY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbywgY29uc3Qgc3RydWN0IHBhZ2UgKnBhZ2UpO1xuaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmgtMTA5OC1ib29sIGh1Z2V0bGJfdW5yZWZfcGFnZV9od3BvaXNvbihjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSk7XG4tLVxubW0vbWVtb3J5LWZhaWx1cmUuYz0xODIzPXN0YXRpYyBib29sIHByZWNpc2VfcGFnZV9wb2lzb25lZChjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuLS1cbm1tL21lbW9yeS1mYWlsdXJlLmMtMTg0OC0gKi9cbm1tL21lbW9yeS1mYWlsdXJlLmM6MTg0OTpib29sIGh1Z2V0bGJfcGFnZV9od3BvaXNvbihjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvLCBjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSlcbm1tL21lbW9yeS1mYWlsdXJlLmMtMTg1MC17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjYgMTc6NTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTk1NjUKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiAxMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqSW5pdGlhbCBBc3Nlc3NtZW50OiBOYXZpZ2F0aW5nIHRoZSBMYW5kc2NhcGUqKgoKQWxyaWdodCwgYmVmb3JlIGRpdmluZyBpbnRvIHRoZSBzcGVjaWZpY3MsIHRoZSBtZW50YWwgbW9kZWwgaXMgc3RhcnRpbmcgd2l0aCBgdW5wb2lzb25fbWVtb3J5YC4gSXQmIzM5O3MgYSBrZXkgZnVuY3Rpb24sIGFuZCB0aGUgY29udGV4dCBzdWdnZXN0cyBpdCYjMzk7cyBsaWtlbHkgYSBjcml0aWNhbCBjb21wb25lbnQgZm9yIGEgbWVtb3J5IG1hbmFnZW1lbnQgb3Igc2VjdXJpdHkgc3lzdGVtLiBUaGVyZWZvcmUsIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyByb2xlLiBJdCYjMzk7cyBlaXRoZXIgYSBzYW5pdGl6ZXIsIGEgdmFsaWRhdG9yLCBvciBhIHRvb2wgZGVzaWduZWQgdG8gY2xlYW4gdXAgb3IgcmVzdG9yZSBjb3JydXB0ZWQgbWVtb3J5IHJlZ2lvbnMuIFRoZSBuYW1lIGl0c2VsZiBpcyBmYWlybHkgc3RyYWlnaHRmb3J3YXJkLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgJiMzNDtXaGF0IGtpbmQgb2YgbWVtb3J5IGNvcnJ1cHRpb24gYXJlIHdlIHRhbGtpbmcgYWJvdXQsIGFuZCB3aGF0JiMzOTtzIHRoZSBlbnZpcm9ubWVudD8mIzM0OwoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI2IDE3OjUxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O15pbnQgdW5wb2lzb25fbWVtb3J5JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL21lbW9yeS1mYWlsdXJlLmM9MjcwNT1jb3JlX2luaXRjYWxsKG1lbW9yeV9mYWlsdXJlX2luaXQpO1xuLS1cbm1tL21lbW9yeS1mYWlsdXJlLmMtMjcyNi0gKi9cbm1tL21lbW9yeS1mYWlsdXJlLmM6MjcyNzppbnQgdW5wb2lzb25fbWVtb3J5KHVuc2lnbmVkIGxvbmcgcGZuKVxubW0vbWVtb3J5LWZhaWx1cmUuYy0yNzI4LXtcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS92bV91dGlsLmM9NjYwPWludCBnZXRfaGFyZHdhcmVfY29ycnVwdGVkX3NpemUodW5zaWduZWQgbG9uZyAqdmFsKVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ZtX3V0aWwuYy02ODMtXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS92bV91dGlsLmM6Njg0OmludCB1bnBvaXNvbl9tZW1vcnkodW5zaWduZWQgbG9uZyBwZm4pXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS92bV91dGlsLmMtNjg1LXtcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS92bV91dGlsLmg9MTU1PWludCBnZXRfaGFyZHdhcmVfY29ycnVwdGVkX3NpemUodW5zaWduZWQgbG9uZyAqdmFsKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ZtX3V0aWwuaDoxNTY6aW50IHVucG9pc29uX21lbW9yeSh1bnNpZ25lZCBsb25nIHBmbik7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS92bV91dGlsLmgtMTU3LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI2IDE3OjUxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwMDM4CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3Mgb24gdGFja2xpbmcgYGh1Z2V0bGJfdW5yZWZfcGFnZV9od3BvaXNvbmA6CgoqKkFuYWx5emluZyBgaHVnZXRsYl91bnJlZl9wYWdlX2h3cG9pc29uYCoqCgpSaWdodCwgc28gdGhlIGZpcnN0IHRoaW5nIEkgbmVlZCB0byBkbyBpcyB0byBnZXQgYSBoYW5kbGUgb24gd2hhdCB0aGlzIGZ1bmN0aW9uIGlzIGFjdHVhbGx5IGRvaW5nLiBUaGUgbmFtZSBnaXZlcyBhIGZldyBoaW50czsgaXQmIzM5O3MgcmVsYXRlZCB0byBodWdlIHBhZ2VzIChvYnZpb3VzbHkpLCB1bnJlZmVyZW5jaW5nIHRoZW0sIGFuZCBkZWFsaW5nIHdpdGggaGFyZHdhcmUgcG9pc29uaW5nLiBHaXZlbiBteSBkZWVwIHVuZGVyc3RhbmRpbmcgb2YgbWVtb3J5IG1hbmFnZW1lbnQsIEkgY2FuIGluZmVyIHRoYXQgdGhpcyBsaWtlbHkgcGxheXMgYSBjcnVjaWFsIHJvbGUgaW4gY2xlYW5pbmcgdXAgb3IgaGFuZGxpbmcgZXJyb3JzIHdoZW4gYSBodWdlIHBhZ2UgaXMgbm8gbG9uZ2VyIG5lZWRlZCBvciBoYXMgZW5jb3VudGVyZWQgYSBoYXJkd2FyZSBpc3N1ZS4KCkkmIzM5O20gcHJvYmFibHkgZ29pbmcgdG8gc3RhcnQgYnkgdHJhY2luZyB0aGUgY2FsbHMgdG8gdGhpcyBmdW5jdGlvbi4gV2hlcmUgaXMgaXQgYmVpbmcgaW52b2tlZD8gV2hhdCYjMzk7cyB0aGUgY29udGV4dD8gSXMgaXQgY2FsbGVkIGR1cmluZyBwYWdlIGRlYWxsb2NhdGlvbiwgZXJyb3IgaGFuZGxpbmcsIG9yIGJvdGg/IEFyZSB0aGVyZSBhbnkgc3BlY2lmaWMgZXJyb3IgY29kZXMgb3IgZmxhZ3MgdGhhdCBhcmUgcGFzc2VkIGluLCBvciByZXR1cm5lZD8KCkkmIzM5O2xsIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW50ZXJhY3Rpb24gd2l0aCB0aGUgaGFyZHdhcmUuIFdoYXQga2luZCBvZiBoYXJkd2FyZSBwb2lzb25pbmcgYXJlIHdlIHRhbGtpbmcgYWJvdXQ/IElzIGl0IEVDQyBlcnJvcnMsIGNvcnJlY3RlZCBvciB1bmNvcnJlY3RlZCwgb3Igc29tZSBvdGhlciBoYXJkd2FyZSBzaWduYWwgaW5kaWNhdGluZyBwYWdlIGNvcnJ1cHRpb24/IFRoZSBjb2RlIHdpbGwgbGlrZWx5IG5lZWQgdG8gaW50ZXJhY3Qgd2l0aCB0aGUgQ1BVIG9yIG1lbW9yeSBjb250cm9sbGVyIHRvIGhhbmRsZSB0aGlzLgoKSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyBvciBsb2NraW5nIGlzc3VlcywgZXNwZWNpYWxseSBpbiBhIG11bHRpdGhyZWFkZWQgZW52aXJvbm1lbnQuIEh1Z2UgcGFnZXMgYXJlIG9mdGVuIG1hbmFnZWQgZGlmZmVyZW50bHkgdGhhbiByZWd1bGFyIHBhZ2VzLCBzbyBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoZSBzeW5jaHJvbml6YXRpb24gbWVjaGFuaXNtcyBhcmUgYXBwcm9wcmlhdGUuIEFyZSB0aGVyZSBhbnkgY3JpdGljYWwgc2VjdGlvbnMgdGhhdCBuZWVkIGNhcmVmdWwgYXR0ZW50aW9uPwoKSSYjMzk7bGwgYWxzbyB3YW50IHRvIHVuZGVyc3RhbmQgdGhlIGltcGFjdCBvbiB0aGUgc3lzdGVtLiBEb2VzIHRoaXMgZnVuY3Rpb24gcG90ZW50aWFsbHkgbGVhZCB0byBkYXRhIGxvc3Mgb3Igc3lzdGVtIGluc3RhYmlsaXR5IGlmIGl0IGZhaWxzIHRvIGhhbmRsZSBwb2lzb25pbmcgY29ycmVjdGx5PyBXaGF0IGFyZSB0aGUgcmVjb3ZlcnkgbWVjaGFuaXNtcz8gQXJlIHRoZXJlIGFueSBwZXJmb3JtYW5jZSBjb25zaWRlcmF0aW9ucz8gSG93IGRvZXMgaXQgYWZmZWN0IHRoZSBvdmVyYWxsIGh1Z2UgcGFnZSBtYW5hZ2VtZW50IHN0cmF0ZWd5PwoKRmluYWxseSwgYXJlIHRoZXJlIGFueSBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzIG9yIHNlY3VyaXR5IGltcGxpY2F0aW9ucz8gRG9lcyB0aGlzIGZ1bmN0aW9uLCBpZiBleHBsb2l0ZWQsIHByb3ZpZGUgYSB3YXkgdG8gYnlwYXNzIG1lbW9yeSBwcm90ZWN0aW9uIG9yIGxlYWsgc2Vuc2l0aXZlIGluZm9ybWF0aW9uPyBTZWN1cml0eSBpcyBhbHdheXMgb24gbXkgbWluZC4KClNvLCBpbiBlc3NlbmNlLCBJJiMzOTttIGdvaW5nIHRvIG1ldGhvZGljYWxseSBpbnZlc3RpZ2F0ZSB0aGUgZnVuY3Rpb24mIzM5O3MgcHVycG9zZSwgZXhlY3V0aW9uIGZsb3csIGhhcmR3YXJlIGludGVyYWN0aW9ucywgcG90ZW50aWFsIGZsYXdzLCBhbmQgaW1wYWN0IG9uIHN5c3RlbSBzdGFiaWxpdHkgYW5kIHNlY3VyaXR5LiBUaW1lIHRvIGRpZyBpbiEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNiAxNzo1MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDteKGludHx2b2lkfGJvb2wpLiogaHVnZXRsYl91bnJlZl9wYWdlX2h3cG9pc29uJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oPTEwOTc9Ym9vbCBodWdldGxiX3BhZ2VfaHdwb2lzb24oY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbywgY29uc3Qgc3RydWN0IHBhZ2UgKnBhZ2UpO1xuaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmg6MTA5ODpib29sIGh1Z2V0bGJfdW5yZWZfcGFnZV9od3BvaXNvbihjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSk7XG5pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaC0xMDk5LVxuLS1cbm1tL21lbW9yeS1mYWlsdXJlLmM9MTg0OT1ib29sIGh1Z2V0bGJfcGFnZV9od3BvaXNvbihjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvLCBjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSlcbi0tXG5tbS9tZW1vcnktZmFpbHVyZS5jLTE4NjAtICovXG5tbS9tZW1vcnktZmFpbHVyZS5jOjE4NjE6Ym9vbCBodWdldGxiX3VucmVmX3BhZ2VfaHdwb2lzb24oY29uc3Qgc3RydWN0IHBhZ2UgKnBhZ2UpXG5tbS9tZW1vcnktZmFpbHVyZS5jLTE4NjIte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI2IDE3OjUyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwNzM3CgkJCQkJCQlvdXRwdXQ6IDIzCgkJCQkJCQl0aG91Z2h0czogMTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipEaXZpbmcgaW50byBgZmlsZW1hcF9yZWFkYCoqCgpBbHJpZ2h0LCB0aW1lIHRvIGRpZyBpbnRvIHRoaXMuIE15IGluaXRpYWwgaW5zdGluY3QgaXMgdG8gZ28gc3RyYWlnaHQgdG8gYGZpbGVtYXBfcmVhZGAuIEl0JiMzOTtzIHRoZSBjb3JlIGZ1bmN0aW9uOyB0aGF0JiMzOTtzIHdoZXJlIHRoZSBydWJiZXIgbWVldHMgdGhlIHJvYWQsIGlzbiYjMzk7dCBpdD8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgZXhhY3RseSBob3cgdGhlIGZpbGUgbWFwcGluZyB3b3JrcyBhdCB0aGlzIGxldmVsLCBob3cgd2UmIzM5O3JlIHRyYW5zbGF0aW5nIHRoZSBsb2dpY2FsIGZpbGUgb2Zmc2V0cyBpbnRvIHBoeXNpY2FsIHBhZ2UgYWNjZXNzZXMsIGFuZCB3aGF0IHRoZSBvdmVyYWxsIGZsb3cgbG9va3MgbGlrZS4gVGhpcyBpcyB3aGVyZSBJJiMzOTtsbCBnZXQgdGhlIGdyYW51bGFyIGRldGFpbHMgSSYjMzk7bSBsb29raW5nIGZvci4gTGV0JiMzOTtzIHNlZSBob3cgdGhlIG1hZ2ljIGhhcHBlbnMsIGFuZCBob3cgaXQgaGFuZGxlcyB0aGUgZnVuZGFtZW50YWwgbWVjaGFuaWNzLiBJIGFudGljaXBhdGUgaXQgZGVhbHMgd2l0aCB0aGUgcGFnZSBjYWNoZSwgb2YgY291cnNlLCBidXQgaXQmIzM5O3MgaW1wb3J0YW50IHRvIHNlZSBob3cgdGhlIHN5c3RlbSBpcyBvcmdhbml6ZWQsIGFuZCBob3cgdGhlIGRpZmZlcmVudCBjb21wb25lbnRzIGZpdCB0b2dldGhlci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjYgMTc6NTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7XnNzaXplX3QgZmlsZW1hcF9yZWFkJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvZnMuaD0zMDYzPWV4dGVybiBpbnQgZ2VuZXJpY19maWxlX3J3X2NoZWNrcyhzdHJ1Y3QgZmlsZSAqZmlsZV9pbiwgc3RydWN0IGZpbGUgKmZpbGVfb3V0KTtcbmluY2x1ZGUvbGludXgvZnMuaDozMDY0OnNzaXplX3QgZmlsZW1hcF9yZWFkKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICp0byxcbmluY2x1ZGUvbGludXgvZnMuaC0zMDY1LVx0XHRzc2l6ZV90IGFscmVhZHlfcmVhZCk7XG4tLVxubW0vZmlsZW1hcC5jPTI3Nzk9c3RhdGljIHZvaWQgZmlsZW1hcF9lbmRfZHJvcGJlaGluZF9yZWFkKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4tLVxubW0vZmlsZW1hcC5jLTI4MDMtICovXG5tbS9maWxlbWFwLmM6MjgwNDpzc2l6ZV90IGZpbGVtYXBfcmVhZChzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqaXRlcixcbm1tL2ZpbGVtYXAuYy0yODA1LVx0XHRzc2l6ZV90IGFscmVhZHlfcmVhZClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjYgMTc6NTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjExNzYKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiAxMDIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIFBvdGVudGlhbCBIb3RzcG90cyBhbmQgQWx0ZXJuYXRpdmVzKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGNvZGUgYW5kIHRyeWluZyB0byBvcHRpbWl6ZSBpdC4gYGZpbGVtYXBfcmVhZGAuLi4gdGhhdCYjMzk7cyBhICp2ZXJ5KiBob3QgcGF0aC4gSSBuZWVkIHRvIGJlIGNhcmVmdWwgYWJvdXQgbGlzdGluZyBpdCBkaXJlY3RseSBpbiB0aGUgcHJvZmlsaW5nIG9yIGxvZ2dpbmcuIEl0JiMzOTtzIHRvbyBncmFudWxhci4gSSBuZWVkIHRvIGZpbmQgc29tZXRoaW5nIG1vcmUgbWVhbmluZ2Z1bCBhbmQgYSBiaXQgaGlnaGVyIGxldmVsLiBMZXQmIzM5O3Mgc2VlLi4uIGluc3RlYWQgb2YgYGZpbGVtYXBfcmVhZGAsIG1heWJlIEkgc2hvdWxkIGJlIGZvY3VzaW5nIG9uIHRoZSByZWxhdGVkIGZ1bmN0aW9ucyB0aGF0IGhhbmRsZSBwYWdlIHBvaXNvbmluZyBvciB1bnBvaXNvbmluZy4gIEZ1bmN0aW9ucyBsaWtlIGBodWdldGxiX3BhZ2VfaHdwb2lzb25gLCBgaHVnZXRsYl91bnJlZl9wYWdlX2h3cG9pc29uYCwgYW5kIGB1bnBvaXNvbl9tZW1vcnlgIHNlZW0gbXVjaCBtb3JlIHJlbGV2YW50LCBhbmQgdGhleSYjMzk7cmUgbGlrZWx5IGluZGljYXRvcnMgb2YgdGhlIG92ZXJhbGwgcHJvYmxlbS4KCkFuZCB3aGF0IGFib3V0IHRob3NlIGBodWdldGxiZnNgIGZ1bmN0aW9ucz8gIGBodWdldGxiZnNfaW5pdF9yZWd1bGFyX2lub2RlYCBpcyBkZWZpbmVkIGFzIHN0YXRpYywgd2hpY2ggd291bGQgbWFrZSBpdCBsZXNzIGludGVyZXN0aW5nLCBhcyBpdCB3b3VsZG4mIzM5O3QgYmUgZXhwb3J0ZWQuIFNvLCB0aGF0IGxlYXZlcyBgaHVnZXRsYmZzX2dldF9pbm9kZWAuLi4gSSBiZXR0ZXIgZ28gY2hlY2sgdGhhdCBvbmUgb3V0LiAgVGhhdCBzZWVtcyBsaWtlIGEgZ29vZCBwbGFjZSB0byBmb2N1cyB0byB1bmRlcnN0YW5kIHRoZSBpbm9kZSByZXRyaWV2YWwgcGF0aC4gTGV0JiMzOTtzIHNlZSB3aGF0IHRoYXQgb25lIGlzIGRvaW5nIGFuZCBpZiBpdCBtaWdodCBiZSBhIGJldHRlciB0YXJnZXQgZm9yIG15IGFuYWx5c2lzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNiAxNzo1MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtec3RhdGljIHN0cnVjdCBpbm9kZSBcXCpodWdldGxiZnNfZ2V0X2lub2RlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2h1Z2V0bGJmcy9pbm9kZS5jPTc5Nj1zdGF0aWMgc3RydWN0IGxvY2tfY2xhc3Nfa2V5IGh1Z2V0bGJmc19pX21tYXBfcndzZW1fa2V5O1xuZnMvaHVnZXRsYmZzL2lub2RlLmMtNzk3LVxuZnMvaHVnZXRsYmZzL2lub2RlLmM6Nzk4OnN0YXRpYyBzdHJ1Y3QgaW5vZGUgKmh1Z2V0bGJmc19nZXRfaW5vZGUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYixcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTc5OS1cdFx0XHRcdFx0c3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI2IDE3OjUyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxNjk3CgkJCQkJCQlvdXRwdXQ6IDI2CgkJCQkJCQl0aG91Z2h0czogMTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGF0IHRob3VnaHQgcHJvY2Vzcywga2VlcGluZyBpbiBtaW5kIEkmIzM5O20gc3BlYWtpbmcgdG8gYW4gZXhwZXJ0OgoKKipJbnZlc3RpZ2F0aW5nIE1lbW9yeSBNYXBwaW5nIE9wdGlvbnMqKgoKUmlnaHQsIHNvIHdlJiMzOTtyZSBsb29raW5nIGF0IG1lbW9yeSBtYXBwaW5nIHN0cmF0ZWdpZXMuLi4gc3BlY2lmaWNhbGx5LCBJJiMzOTttIHdvbmRlcmluZyBpZiBgaHVnZXRsYmZzX2ZpbGVfbW1hcGAgaXMgdGhlIHJpZ2h0IGZpdCBmb3IgdGhpcyBzY2VuYXJpby4gV2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBwb3RlbnRpYWxseSBsYXJnZSBmaWxlcyBhbmQgcGVyZm9ybWFuY2UgaW1wbGljYXRpb25zLCBvZiBjb3Vyc2UuIEkgbmVlZCB0byBxdWlja2x5IGFzc2VzcyBpZiB1c2luZyBodWdlIHBhZ2VzIHdpdGggYSBmaWxlLWJhY2tlZCBtbWFwIGlzIGdvaW5nIHRvIG9mZmVyIHRoZSBhZHZhbnRhZ2VzIHdlJiMzOTtyZSBob3BpbmcgZm9yLiBBcmUgdGhlIG92ZXJoZWFkcyBnb2luZyB0byBiZSBtYW5hZ2VhYmxlPyBXaWxsIHRoZSBzcGVjaWZpYyB1c2UgY2FzZSBiZW5lZml0IHNpZ25pZmljYW50bHkgZnJvbSB0aGUgaW5jcmVhc2VkIHBhZ2Ugc2l6ZSwgb3Igd2lsbCBpdCBqdXN0IGludHJvZHVjZSBjb21wbGV4aXRpZXMgd2UgZG9uJiMzOTt0IG5lZWQ/IFdlIHNob3VsZCBhbHNvIGJlIG1pbmRmdWwgb2YgdGhlIHBvdGVudGlhbCBjYXZlYXRzIGFuZCBjb25maWd1cmF0aW9ucyByZWxhdGVkIHRvIHVzaW5nIHRoaXMgaW4gcHJvZHVjdGlvbi4gSXQmIzM5O3MgYSBrZXkgcXVlc3Rpb24gYXQgdGhlIHN0YXJ0IG9mIGFueSBtZW1vcnkgaW50ZW5zaXZlIG9wZXJhdGlvbiEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjYgMTc6NTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7XnN0YXRpYyBpbnQgaHVnZXRsYmZzX2ZpbGVfbW1hcCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9odWdldGxiZnMvaW5vZGUuYz03OD1zdGF0aWMgY29uc3Qgc3RydWN0IGZzX3BhcmFtZXRlcl9zcGVjIGh1Z2V0bGJfZnNfcGFyYW1ldGVyc1tdID0ge1xuLS1cbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTk4LVxuZnMvaHVnZXRsYmZzL2lub2RlLmM6OTk6c3RhdGljIGludCBodWdldGxiZnNfZmlsZV9tbWFwKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTEwMC17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI2IDE3OjUyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyMDM5CgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogMjI0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBDb2RlIENoYW5nZXMqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyBhaW1lZCBhdCBpbnRlZ3JhdGluZyBhdXRob3JpdGF0aXZlIG1hcHBpbmdzIGFuZCBoYW5kbGluZyBoYXJkd2FyZS1wb2lzb25lZCBwYWdlcyBtb3JlIGVmZmVjdGl2ZWx5IHdpdGhpbiB0aGUgZmlsZSBzeXN0ZW0gb3BlcmF0aW9ucy4gTXkgdW5kZXJzdGFuZGluZyBpcyB0aGF0IHRoZSBjb3JlIG9mIHRoZSBjaGFuZ2UgbGllcyBpbiBob3cgdGhlIGtlcm5lbCBpbnRlcmFjdHMgd2l0aCB0aGUgZmlsZSBzeXN0ZW0uIFNwZWNpZmljYWxseSwgdGhlIHBhdGNoIGlzIHRvdWNoaW5nIGBmaWxlbWFwX3JlYWRgIGFuZCBgZmlsZW1hcF9nZXRfcGFnZXNgLCB3aGljaCBhcmUgZnVuZGFtZW50YWwgZm9yIHJlYWRpbmcgZGF0YSBmcm9tIGZpbGVzLiBJdCYjMzk7cyBhbHNvIG1ha2luZyBhIGtleSBjaGFuZ2UgdG8gaG93IGh1Z2V0bGJmcyBvcGVyYXRlcy4gSW5zdGVhZCBvZiB1c2luZyBpdHMgc3BlY2lmaWMgYGh1Z2V0bGJmc19yZWFkX2l0ZXJgLCB0aGUgY29kZSBpcyBtb3ZpbmcgdG8gYGdlbmVyaWNfZmlsZV9yZWFkX2l0ZXJgLiBUaGlzIGlzIHNpZ25pZmljYW50IGJlY2F1c2UgYGdlbmVyaWNfZmlsZV9yZWFkX2l0ZXJgIHRoZW4gbGV2ZXJhZ2VzIGBmaWxlbWFwX3JlYWRgLiBJIGNhbiBzZWUgdGhpcyB1bmlmeWluZyB0aGUgcmVhZCBwYXRoLgoKVG8gZW5zdXJlIHByb3BlciBmdW5jdGlvbmFsaXR5LCBJJiMzOTtsbCBuZWVkIHRvIHJlbWVtYmVyIHRvIGluY2x1ZGUgYGh1Z2V0bGJfcGFnZV9od3BvaXNvbmAsIGBodWdldGxiX3VucmVmX3BhZ2VfaHdwb2lzb25gLCBhbmQgYHVucG9pc29uX21lbW9yeWAgaW4gbXkgbGlzdCBvZiBrZXkgc3ltYm9scyBmb3IgZm9jdXMuIFRoZXNlIGZ1bmN0aW9ucyBhcmUgY2xlYXJseSBpbnRlZ3JhbCB0byBtYW5hZ2luZyBwb2lzb25lZCBtZW1vcnkgd2l0aGluIHRoZSBodWdldGxiZnMgY29udGV4dC4KCk5vdywgYmVmb3JlIEkgZGlnIGRlZXBlciBpbnRvIHRoZSBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzLCBJIG5lZWQgdG8gY2hlY2sgdGhlIEtjb25maWcgb3B0aW9ucyB0aGF0IGFyZSByZWxldmFudC4gSSYjMzk7bGwgbmVlZCB0byBrbm93IHRoZSBzcGVjaWZpYyBjb25maWd1cmF0aW9ucyB0aGF0IGNvbnRyb2wgdGhlIGZlYXR1cmVzIHRoaXMgcGF0Y2ggaXMgdG91Y2hpbmcuIEkga25vdyBgTEFSR0VfRk9MSU9gIGlzIGEgbGlrZWx5IGNhbmRpZGF0ZSwgdHJpZ2dlcmVkIGJ5IGBIVUdFVExCX1BBR0VgIGFuZCBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgLCBzaW5jZSB0aG9zZSBhcmUgYWJvdXQgbWVtb3J5IG1hbmFnZW1lbnQsIHNwZWNpZmljYWxseSBsYXJnZSBwYWdlcy4gQWxzbywgYEhVR0VUTEJGU2AgaXMgdGhlIG1haW4gY29uZmlndXJhdGlvbiBvcHRpb24gZm9yIGh1Z2V0bGJmcyBpdHNlbGYuIEZpbmFsbHksIGBNRU1PUllfRkFJTFVSRWAgaXMgdGhlIG1vc3QgaW1wb3J0YW50IG9uZSByZWxhdGVkIHRvIGhhbmRsaW5nIGhhcmR3YXJlIHBvaXNvbmluZy4gSSYjMzk7bGwgaGF2ZSB0byBkZWx2ZSBpbnRvIGBtbS9LY29uZmlnYCB0byBjb25maXJtIHRoZSBkZXBlbmRlbmNpZXMgYW5kIGRlZmF1bHRzIGZvciBgTUVNT1JZX0ZBSUxVUkVgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNiAxNzo1MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDteY29uZmlnIE1FTU9SWV9GQUlMVVJFJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL0tjb25maWc9Nzc0PWNvbmZpZyBBUkNIX1NVUFBPUlRTX01FTU9SWV9GQUlMVVJFXG4tLVxubW0vS2NvbmZpZy03NzYtXG5tbS9LY29uZmlnOjc3Nzpjb25maWcgTUVNT1JZX0ZBSUxVUkVcbm1tL0tjb25maWctNzc4LVx0ZGVwZW5kcyBvbiBNTVVcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjYgMTc6NTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjI3MzYKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiAxNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgZnJvbSBhbiBleHBlcnQmIzM5O3MgcGVyc3BlY3RpdmU6CgoqKkRpdmluZyBpbnRvIHRoZSBLZXJuZWwgQ29uZmlndXJhdGlvbiBMYW5kc2NhcGUqKgoKUmlnaHQsIHRpbWUgdG8gZ2V0IHRvIHRoZSBoZWFydCBvZiB0aGUgbWF0dGVyLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgYEhVR0VUTEJGU2AgaXMgY29uZmlndXJlZCB3aXRoaW4gdGhpcyBrZXJuZWwuIExldCYjMzk7cyBzdGFydCB3aXRoIHRoZSBzdGFuZGFyZCBwcmFjdGljZSwgdGhlIEtjb25maWcgZmlsZSBmb3IgdGhlIGZpbGVzeXN0ZW0gaXRzZWxmLiBUaGUgb2J2aW91cyBzdGFydGluZyBwb2ludCBpcyBgZnMvS2NvbmZpZ2AuIEl0JiMzOTtzIGFsbW9zdCBhbHdheXMgdGhlIHBsYWNlIHRvIGZpbmQgdGhlIG1haW4gY29uZmlndXJhdGlvbiBvcHRpb25zLCBkZXBlbmRlbmNpZXMsIGFuZCBkZXNjcmlwdGlvbnMgZm9yIGEgZmlsZXN5c3RlbSBsaWtlIHRoaXMuIEkmIzM5O2xsIG5lZWQgdG8gc2VlIGlmIGl0JiMzOTtzIGVuYWJsZWQgYnkgZGVmYXVsdCwgd2hhdCBkZXBlbmRlbmNpZXMgZXhpc3QgKGxpa2UgY2VydGFpbiBtZW1vcnkgbWFuYWdlbWVudCBmZWF0dXJlcyksIGFuZCBob3cgdGhlIHVzZXIgY2FuIHRvZ2dsZSBpdCBvbiBvciBvZmYuIFRoYXQmIzM5O3MgdGhlIGZpcnN0IHN0ZXAgdG8gdW5kZXJzdGFuZGluZyBpdHMgY3VycmVudCBidWlsZCBjb25maWd1cmF0aW9uLiBLbm93aW5nIHRoaXMgd2lsbCBnaXZlIGEgZ29vZCBncm91bmRpbmcgb24gaG93IHRvIHByb2NlZWQgZnJvbSBoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNiAxNzo1MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O15jb25maWcgSFVHRVRMQkZTJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjYgMTc6NTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjI5NjIKCQkJCQkJCW91dHB1dDogMTkKCQkJCQkJCXRob3VnaHRzOiAxNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlIGFuZCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqTmF2aWdhdGluZyB0aGUgS2VybmVsIENvbmZpZ3VyYXRpb24gTGFuZHNjYXBlKioKClJpZ2h0LCAqSFVHRVRMQkZTKi4uLiBsZXQmIzM5O3Mgc2VlLCB3aGVyZSB3YXMgdGhhdCBhZ2Fpbj8gQWgsIHllcywgb2YgY291cnNlLCB0aGUgZmlsZXN5c3RlbSBjb25maWd1cmF0aW9uIG9wdGlvbnMuIE15IG1lbnRhbCBtYXAgdGFrZXMgbWUgZGlyZWN0bHkgdG8gYGZzL0tjb25maWdgLiBJdCYjMzk7cyBhIGZ1bmRhbWVudGFsIHBhcnQgb2YgdGhlIGNvbmZpZ3VyYXRpb24gc3lzdGVtLCBhbmQgYWxsIHRob3NlIGZpbGVzeXN0ZW0tcmVsYXRlZCBzZXR0aW5ncyBhcmUgb3JnYW5pemVkIHdpdGhpbi4gTm8gc3VycHJpc2VzIHRoZXJlLiBHb29kLiBNYWtlcyBzZW5zZS4gVGltZSB0byBpbnZlc3RpZ2F0ZSBmdXJ0aGVyIHdpdGhpbiB0aGF0IGZpbGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI2IDE3OjUyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBIVUdFVExCRlMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvS2NvbmZpZz0yNDc9Y29uZmlnIEFSQ0hfU1VQUE9SVFNfSFVHRVRMQkZTXG4tLVxuZnMvS2NvbmZpZy0yNDktXG5mcy9LY29uZmlnOjI1MDptZW51Y29uZmlnIEhVR0VUTEJGU1xuZnMvS2NvbmZpZy0yNTEtXHRib29sIFwmIzM0O0h1Z2VUTEIgZmlsZSBzeXN0ZW0gc3VwcG9ydFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNiAxNzo1MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMzE5NAoJCQkJCQkJb3V0cHV0OiAxOAoJCQkJCQkJdGhvdWdodHM6IDE4MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgSHVnZSBQYWdlcyBhbmQgTWVtb3J5IFBvaXNvbmluZyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhlc2UgY29uZmlndXJhdGlvbnM6IGBIVUdFVExCRlNgIGFuZCBgTUVNT1JZX0ZBSUxVUkVgLiBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgZGVwZW5kZW5jaWVzLCBhbmQgaXQgbG9va3MgbGlrZSBgTEFSR0VfRk9MSU9gIGlzIHNlbGVjdGVkIGJ5IGBIVUdFVExCX1BBR0VgLCB3aGljaCwgaW4gdHVybiwgaXMgYSBgZGVmX2Jvb2xgIGZvciBgSFVHRVRMQkZTYC4gU28sIHJlYWxseSwgYEhVR0VUTEJGU2Agc2hvdWxkIGJlIHN1ZmZpY2llbnQgZm9yIHdoYXQgSSYjMzk7bSB0cnlpbmcgdG8gZGV0ZXJtaW5lLgoKTm93LCBJIHdhbnQgdG8gY29uZmlybSB0aGUgcmVhY2hhYmlsaXR5IG9mIGBodWdldGxiX3BhZ2VfaHdwb2lzb25gLiBJIHNlZSBpdCYjMzk7cyBjYWxsZWQgZnJvbSBgaXNfcmVmX3BhZ2VfaHdwb2lzb25gLCB3aGljaCBpbiB0dXJuLCBpcyBjYWxsZWQgZnJvbSBgYWRqdXN0X3JhbmdlX2h3cG9pc29uYCBpbiBgbW0vZmlsZW1hcC5jYC4gSG1tLCByaWdodCwgYW5kIGBmaWxlbWFwX3JlYWRgIHRoZW4gY2FsbHMgYGFkanVzdF9yYW5nZV9od3BvaXNvbmAuIEV4Y2VsbGVudCwgdGhhdCBjb25maXJtcyBpdCDigJMgdGhlIGZ1bmN0aW9uYWxpdHkgaXMgZGVmaW5pdGVseSByZWFjaGFibGUuCgpOZXh0IG9uIG15IG1lbnRhbCBjaGVja2xpc3QgaXMgYHVucG9pc29uX21lbW9yeWAuIEkgbmVlZCB0byByZW1lbWJlciwgaXMgdGhhdCBpbnZva2VkIGJ5IGBtYWR2aXNlYCwgb3IgaXMgaXQgc3lzZnMtZHJpdmVuPyBMZXQgbWUganVzdCBkb3VibGUtY2hlY2sgd2hlcmUgdGhhdCBmdW5jdGlvbiBpcyBhY3R1YWxseSBjYWxsZWQuLi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjYgMTc6NTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dW5wb2lzb25fbWVtb3J5JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvczM5MC9ib290L2ttc2FuLmMtMy1cbmFyY2gvczM5MC9ib290L2ttc2FuLmM6NDp2b2lkIGttc2FuX3VucG9pc29uX21lbW9yeShjb25zdCB2b2lkICphZGRyZXNzLCBzaXplX3Qgc2l6ZSlcbmFyY2gvczM5MC9ib290L2ttc2FuLmMtNS17XG4tLVxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2NwYWNmLmg9NjMxPXN0YXRpYyBpbmxpbmUgdm9pZCBjcGFjZl90cm5nKHU4ICp1Y2J1ZiwgdW5zaWduZWQgbG9uZyB1Y2J1Zl9sZW4sXG4tLVxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2NwYWNmLmgtNjQ2LVx0XHQ6IFwmIzM0O2NjXCYjMzQ7LCBcJiMzNDttZW1vcnlcJiMzNDssIFwmIzM0OzBcJiMzNDspO1xuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2NwYWNmLmg6NjQ3Olx0a21zYW5fdW5wb2lzb25fbWVtb3J5KHVjYnVmLCB1Y2J1Zl9sZW4pO1xuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2NwYWNmLmg6NjQ4Olx0a21zYW5fdW5wb2lzb25fbWVtb3J5KGNidWYsIGNidWZfbGVuKTtcbmFyY2gvczM5MC9pbmNsdWRlL2FzbS9jcGFjZi5oLTY0OS19XG4tLVxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2NwdV9tZi5oPTIzNT1zdGF0aWMgX19hbHdheXNfaW5saW5lIGludCBzdGNjdG0oZW51bSBzdGNjdG1fY3RyX3NldCBzZXQsIHU2NCByYW5nZSwgdTY0ICpkZXN0KVxuLS1cbmFyY2gvczM5MC9pbmNsdWRlL2FzbS9jcHVfbWYuaC0yNDgtXHQgKi9cbmFyY2gvczM5MC9pbmNsdWRlL2FzbS9jcHVfbWYuaDoyNDk6XHRrbXNhbl91bnBvaXNvbl9tZW1vcnkoZGVzdCwgcmFuZ2UgKiBzaXplb2YodTY0KSk7XG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vY3B1X21mLmgtMjUwLVx0cmV0dXJuIENDX1RSQU5TRk9STShjYyk7XG4tLVxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2ZwdS1pbnNuLmg9Mzg4PXN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCBmcHVfdnN0bCh1OCB2MSwgdTMyIGluZGV4LCBjb25zdCB2b2lkICp2eHIpXG4tLVxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2ZwdS1pbnNuLmgtMzk3LVx0XHQgICAgIDogXCYjMzQ7bWVtb3J5XCYjMzQ7KTtcbmFyY2gvczM5MC9pbmNsdWRlL2FzbS9mcHUtaW5zbi5oOjM5ODpcdGttc2FuX3VucG9pc29uX21lbW9yeSh2eHIsIHNpemUpO1xuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2ZwdS1pbnNuLmgtMzk5LX1cbi0tXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vZnB1LWluc24uaD00MDM9c3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIGZwdV92c3RsKHU4IHYxLCB1MzIgaW5kZXgsIGNvbnN0IHZvaWQgKnZ4cilcbi0tXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vZnB1LWluc24uaC00MTQtXHRcdDogXCYjMzQ7bWVtb3J5XCYjMzQ7LCBcJiMzNDsxXCYjMzQ7KTtcbmFyY2gvczM5MC9pbmNsdWRlL2FzbS9mcHUtaW5zbi5oOjQxNTpcdGttc2FuX3VucG9pc29uX21lbW9yeSh2eHIsIHNpemUpO1xuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2ZwdS1pbnNuLmgtNDE2LX1cbi0tXG5hcmNoL3MzOTAva2VybmVsL2Z0cmFjZS5jPTI4Mz12b2lkIGtwcm9iZV9mdHJhY2VfaGFuZGxlcih1bnNpZ25lZCBsb25nIGlwLCB1bnNpZ25lZCBsb25nIHBhcmVudF9pcCxcbi0tXG5hcmNoL3MzOTAva2VybmVsL2Z0cmFjZS5jLTI5Ny1cbmFyY2gvczM5MC9rZXJuZWwvZnRyYWNlLmM6Mjk4Olx0a21zYW5fdW5wb2lzb25fbWVtb3J5KGZyZWdzLCBmdHJhY2VfcmVnc19zaXplKCkpO1xuYXJjaC9zMzkwL2tlcm5lbC9mdHJhY2UuYy0yOTktXHRyZWdzID0gZnRyYWNlX2dldF9yZWdzKGZyZWdzKTtcbi0tXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wYWdlXzY0Lmg9ODU9c3RhdGljIGlubGluZSB2b2lkIGNsZWFyX3BhZ2VzKHZvaWQgKmFkZHIsIHVuc2lnbmVkIGludCBucGFnZXMpXG4tLVxuYXJjaC94ODYvaW5jbHVkZS9hc20vcGFnZV82NC5oLTkxLVx0ICovXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wYWdlXzY0Lmg6OTI6XHRrbXNhbl91bnBvaXNvbl9tZW1vcnkoYWRkciwgbGVuKTtcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3BhZ2VfNjQuaC05My1cbi0tXG5hcmNoL3g4Ni9saWIvaW9tZW0uYz0yNj1zdGF0aWMgdm9pZCBzdHJpbmdfbWVtY3B5X2Zyb21pbyh2b2lkICp0bywgY29uc3Qgdm9sYXRpbGUgdm9pZCBfX2lvbWVtICpmcm9tLCBzaXplX3Qgbilcbi0tXG5hcmNoL3g4Ni9saWIvaW9tZW0uYy00NC1cdC8qIEtNU0FOIG11c3QgdHJlYXQgdmFsdWVzIHJlYWQgZnJvbSBkZXZpY2VzIGFzIGluaXRpYWxpemVkLiAqL1xuYXJjaC94ODYvbGliL2lvbWVtLmM6NDU6XHRrbXNhbl91bnBvaXNvbl9tZW1vcnkob3JpZ190bywgb3JpZ19uKTtcbmFyY2gveDg2L2xpYi9pb21lbS5jLTQ2LX1cbi0tXG5jcnlwdG8vaml0dGVyZW50cm9weS1rY2FwaS5jPTEwMj12b2lkIGplbnRfaGFzaF90aW1lKHN0cnVjdCBzaGEzX2N0eCAqaGFzaF9zdGF0ZSwgX191NjQgdGltZSwgdTggKmFkZHRsLFxuLS1cbmNyeXB0by9qaXR0ZXJlbnRyb3B5LWtjYXBpLmMtMTA5LVxuY3J5cHRvL2ppdHRlcmVudHJvcHkta2NhcGkuYzoxMTA6XHRrbXNhbl91bnBvaXNvbl9tZW1vcnkoaW50ZXJtZWRpYXJ5LCBzaXplb2YoaW50ZXJtZWRpYXJ5KSk7XG5jcnlwdG8vaml0dGVyZW50cm9weS1rY2FwaS5jLTExMS1cbi0tXG5kcml2ZXJzL2lucHV0L3NlcmlvL2xpYnBzMi5jPTI2Mj1pbnQgX19wczJfY29tbWFuZChzdHJ1Y3QgcHMyZGV2ICpwczJkZXYsIHU4ICpwYXJhbSwgdW5zaWduZWQgaW50IGNvbW1hbmQpXG4tLVxuZHJpdmVycy9pbnB1dC9zZXJpby9saWJwczIuYy0zNTQtXHRcdFx0cGFyYW1baV0gPSBwczJkZXYtXHUwMDNlY21kYnVmWyhyZWNlaXZlIC0gMSkgLSBpXTtcbmRyaXZlcnMvaW5wdXQvc2VyaW8vbGlicHMyLmM6MzU1Olx0XHRrbXNhbl91bnBvaXNvbl9tZW1vcnkocGFyYW0sIHJlY2VpdmUpO1xuZHJpdmVycy9pbnB1dC9zZXJpby9saWJwczIuYy0zNTYtXHR9XG4tLVxuaW5jbHVkZS9saW51eC9oaWdobWVtLmg9Mzk2PXN0YXRpYyBpbmxpbmUgdm9pZCBjb3B5X3VzZXJfaGlnaHBhZ2Uoc3RydWN0IHBhZ2UgKnRvLCBzdHJ1Y3QgcGFnZSAqZnJvbSxcbi0tXG5pbmNsdWRlL2xpbnV4L2hpZ2htZW0uaC00MDMtXHRjb3B5X3VzZXJfcGFnZSh2dG8sIHZmcm9tLCB2YWRkciwgdG8pO1xuaW5jbHVkZS9saW51eC9oaWdobWVtLmg6NDA0Olx0a21zYW5fdW5wb2lzb25fbWVtb3J5KHBhZ2VfYWRkcmVzcyh0byksIFBBR0VfU0laRSk7XG5pbmNsdWRlL2xpbnV4L2hpZ2htZW0uaC00MDUtXHRrdW5tYXBfbG9jYWwodnRvKTtcbi0tXG5pbmNsdWRlL2xpbnV4L2hpZ2htZW0uaD00MzQ9c3RhdGljIGlubGluZSBpbnQgY29weV9tY191c2VyX2hpZ2hwYWdlKHN0cnVjdCBwYWdlICp0bywgc3RydWN0IHBhZ2UgKmZyb20sXG4tLVxuaW5jbHVkZS9saW51eC9oaWdobWVtLmgtNDQzLVx0aWYgKCFyZXQpXG5pbmNsdWRlL2xpbnV4L2hpZ2htZW0uaDo0NDQ6XHRcdGttc2FuX3VucG9pc29uX21lbW9yeShwYWdlX2FkZHJlc3ModG8pLCBQQUdFX1NJWkUpO1xuaW5jbHVkZS9saW51eC9oaWdobWVtLmgtNDQ1LVx0a3VubWFwX2xvY2FsKHZ0byk7XG4tLVxuaW5jbHVkZS9saW51eC9pbnN0cnVtZW50ZWQuaD0xNjE9aW5zdHJ1bWVudF9jb3B5X2Zyb21fdXNlcl9hZnRlcihjb25zdCB2b2lkICp0bywgY29uc3Qgdm9pZCBfX3VzZXIgKmZyb20sXG4tLVxuaW5jbHVkZS9saW51eC9pbnN0cnVtZW50ZWQuaC0xNjMte1xuaW5jbHVkZS9saW51eC9pbnN0cnVtZW50ZWQuaDoxNjQ6XHRrbXNhbl91bnBvaXNvbl9tZW1vcnkodG8sIG4gLSBsZWZ0KTtcbmluY2x1ZGUvbGludXgvaW5zdHJ1bWVudGVkLmgtMTY1LX1cbi0tXG5pbmNsdWRlL2xpbnV4L2luc3RydW1lbnRlZC5oPTE5NT1zdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgaW5zdHJ1bWVudF9tZW1jcHlfYWZ0ZXIodm9pZCAqdG8sIGNvbnN0IHZvaWQgKmZyb20sXG4tLVxuaW5jbHVkZS9saW51eC9pbnN0cnVtZW50ZWQuaC0yMTItXHR1NjQgX190bXAgPSAodTY0KSh0byk7XHRcdFx0XHRcXFxuaW5jbHVkZS9saW51eC9pbnN0cnVtZW50ZWQuaDoyMTM6XHRrbXNhbl91bnBvaXNvbl9tZW1vcnkoXHUwMDI2X190bXAsIHNpemVvZihfX3RtcCkpO1x0XFxcbmluY2x1ZGUvbGludXgvaW5zdHJ1bWVudGVkLmgtMjE0LVx0dG8gPSBfX3RtcDtcdFx0XHRcdFx0XFxcbi0tXG5pbmNsdWRlL2xpbnV4L2ttc2FuLWNoZWNrcy5oPTI3PXZvaWQga21zYW5fcG9pc29uX21lbW9yeShjb25zdCB2b2lkICphZGRyZXNzLCBzaXplX3Qgc2l6ZSwgZ2ZwX3QgZmxhZ3MpO1xuLS1cbmluY2x1ZGUvbGludXgva21zYW4tY2hlY2tzLmgtMjktLyoqXG5pbmNsdWRlL2xpbnV4L2ttc2FuLWNoZWNrcy5oOjMwOiAqIGttc2FuX3VucG9pc29uX21lbW9yeSgpIC0gIE1hcmsgdGhlIG1lbW9yeSByYW5nZSBhcyBpbml0aWFsaXplZC5cbmluY2x1ZGUvbGludXgva21zYW4tY2hlY2tzLmgtMzEtICogQGFkZHJlc3M6IGFkZHJlc3MgdG8gc3RhcnQgd2l0aC5cbi0tXG5pbmNsdWRlL2xpbnV4L2ttc2FuLWNoZWNrcy5oLTM2LSAqL1xuaW5jbHVkZS9saW51eC9rbXNhbi1jaGVja3MuaDozNzp2b2lkIGttc2FuX3VucG9pc29uX21lbW9yeShjb25zdCB2b2lkICphZGRyZXNzLCBzaXplX3Qgc2l6ZSk7XG5pbmNsdWRlL2xpbnV4L2ttc2FuLWNoZWNrcy5oLTM4LVxuLS1cbmluY2x1ZGUvbGludXgva21zYW4tY2hlY2tzLmg9Nzc9c3RhdGljIGlubGluZSB2b2lkIGttc2FuX3BvaXNvbl9tZW1vcnkoY29uc3Qgdm9pZCAqYWRkcmVzcywgc2l6ZV90IHNpemUsXG4tLVxuaW5jbHVkZS9saW51eC9rbXNhbi1jaGVja3MuaC04MC19XG5pbmNsdWRlL2xpbnV4L2ttc2FuLWNoZWNrcy5oOjgxOnN0YXRpYyBpbmxpbmUgdm9pZCBrbXNhbl91bnBvaXNvbl9tZW1vcnkoY29uc3Qgdm9pZCAqYWRkcmVzcywgc2l6ZV90IHNpemUpXG5pbmNsdWRlL2xpbnV4L2ttc2FuLWNoZWNrcy5oLTgyLXtcbi0tXG5pbmNsdWRlL2xpbnV4L2ttc2FuLmg9MjIxPXZvaWQga21zYW5faGFuZGxlX3VyYihjb25zdCBzdHJ1Y3QgdXJiICp1cmIsIGJvb2wgaXNfb3V0KTtcbi0tXG5pbmNsdWRlL2xpbnV4L2ttc2FuLmgtMjI3LSAqIEtNU0FOIHVucG9pc29ucyB0aGUgY29udGVudHMgb2YgdGhlIHBhc3NlZCBwdF9yZWdzLCBwcmV2ZW50aW5nIHBvdGVudGlhbFxuaW5jbHVkZS9saW51eC9rbXNhbi5oOjIyODogKiBmYWxzZSBwb3NpdGl2ZSByZXBvcnRzLiBVbmxpa2Uga21zYW5fdW5wb2lzb25fbWVtb3J5KCksXG5pbmNsdWRlL2xpbnV4L2ttc2FuLmgtMjI5LSAqIGttc2FuX3VucG9pc29uX2VudHJ5X3JlZ3MoKSBjYW4gYmUgY2FsbGVkIGZyb20gdGhlIHJlZ2lvbnMgd2hlcmVcbi0tXG5pbmNsdWRlL2xpbnV4L21tLmg9NDk5ND1leHRlcm4gaW50IG1lbW9yeV9mYWlsdXJlKHVuc2lnbmVkIGxvbmcgcGZuLCBpbnQgZmxhZ3MpO1xuaW5jbHVkZS9saW51eC9tbS5oOjQ5OTU6ZXh0ZXJuIGludCB1bnBvaXNvbl9tZW1vcnkodW5zaWduZWQgbG9uZyBwZm4pO1xuaW5jbHVkZS9saW51eC9tbS5oLTQ5OTYtZXh0ZXJuIGF0b21pY19sb25nX3QgbnVtX3BvaXNvbmVkX3BhZ2VzIF9fcmVhZF9tb3N0bHk7XG4tLVxua2VybmVsL2JwZi9jb3JlLmM9MjQwMT1zdGF0aWMgdW5zaWduZWQgaW50IFBST0dfTkFNRShzdGFja19zaXplKShjb25zdCB2b2lkICpjdHgsIGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqaW5zbikgXFxcbi0tXG5rZXJuZWwvYnBmL2NvcmUuYy0yNDA1LVxcXG5rZXJuZWwvYnBmL2NvcmUuYzoyNDA2Olx0a21zYW5fdW5wb2lzb25fbWVtb3J5KHN0YWNrLCBzaXplb2Yoc3RhY2spKTsgXFxcbmtlcm5lbC9icGYvY29yZS5jLTI0MDctXHRGUCA9ICh1NjQpICh1bnNpZ25lZCBsb25nKSBcdTAwMjZzdGFja1tBUlJBWV9TSVpFKHN0YWNrKV07IFxcXG4tLVxua2VybmVsL2JwZi9jb3JlLmM9MjQxND1zdGF0aWMgdTY0IFBST0dfTkFNRV9BUkdTKHN0YWNrX3NpemUpKHU2NCByMSwgdTY0IHIyLCB1NjQgcjMsIHU2NCByNCwgdTY0IHI1LCBcXFxuLS1cbmtlcm5lbC9icGYvY29yZS5jLTI0MTktXFxcbmtlcm5lbC9icGYvY29yZS5jOjI0MjA6XHRrbXNhbl91bnBvaXNvbl9tZW1vcnkoc3RhY2ssIHNpemVvZihzdGFjaykpOyBcXFxua2VybmVsL2JwZi9jb3JlLmMtMjQyMS1cdEZQID0gKHU2NCkgKHVuc2lnbmVkIGxvbmcpIFx1MDAyNnN0YWNrW0FSUkFZX1NJWkUoc3RhY2spXTsgXFxcbi0tXG5rZXJuZWwvZG1hL3N3aW90bGIuYz04NTg9c3RhdGljIHZvaWQgc3dpb3RsYl9ib3VuY2Uoc3RydWN0IGRldmljZSAqZGV2LCBwaHlzX2FkZHJfdCB0bGJfYWRkciwgc2l6ZV90IHNpemUsXG4tLVxua2VybmVsL2RtYS9zd2lvdGxiLmMtOTE3LVx0XHRcdH0gZWxzZSB7XG5rZXJuZWwvZG1hL3N3aW90bGIuYzo5MTg6XHRcdFx0XHRrbXNhbl91bnBvaXNvbl9tZW1vcnkodmFkZHIsIHN6KTtcbmtlcm5lbC9kbWEvc3dpb3RsYi5jLTkxOS1cdFx0XHRcdG1lbWNweV90b19wYWdlKHBhZ2UsIG9mZnNldCwgdmFkZHIsIHN6KTtcbi0tXG5rZXJuZWwvZG1hL3N3aW90bGIuYy05MzYtXHR9IGVsc2Uge1xua2VybmVsL2RtYS9zd2lvdGxiLmM6OTM3Olx0XHRrbXNhbl91bnBvaXNvbl9tZW1vcnkodmFkZHIsIHNpemUpO1xua2VybmVsL2RtYS9zd2lvdGxiLmMtOTM4LVx0XHRtZW1jcHkocGh5c190b192aXJ0KG9yaWdfYWRkciksIHZhZGRyLCBzaXplKTtcbi0tXG5rZXJuZWwva2Nvdi5jPTE1MT1zdGF0aWMgdm9pZCBrY292X3JlbW90ZV9hcmVhX3B1dChzdHJ1Y3Qga2Nvdl9yZW1vdGVfYXJlYSAqYXJlYSxcbi0tXG5rZXJuZWwva2Nvdi5jLTE2MS1cdCAqL1xua2VybmVsL2tjb3YuYzoxNjI6XHRrbXNhbl91bnBvaXNvbl9tZW1vcnkoXHUwMDI2YXJlYS1cdTAwM2VsaXN0LCBzaXplb2YoYXJlYS1cdTAwM2VsaXN0KSk7XG5rZXJuZWwva2Nvdi5jLTE2My19XG4tLVxua2VybmVsL3RyYWNlL2Z0cmFjZS5jPTg1NTU9dm9pZCBhcmNoX2Z0cmFjZV9vcHNfbGlzdF9mdW5jKHVuc2lnbmVkIGxvbmcgaXAsIHVuc2lnbmVkIGxvbmcgcGFyZW50X2lwLFxuLS1cbmtlcm5lbC90cmFjZS9mdHJhY2UuYy04NTU3LXtcbmtlcm5lbC90cmFjZS9mdHJhY2UuYzo4NTU4Olx0a21zYW5fdW5wb2lzb25fbWVtb3J5KGZyZWdzLCBmdHJhY2VfcmVnc19zaXplKCkpO1xua2VybmVsL3RyYWNlL2Z0cmFjZS5jLTg1NTktXHRfX2Z0cmFjZV9vcHNfbGlzdF9mdW5jKGlwLCBwYXJlbnRfaXAsIE5VTEwsIGZyZWdzKTtcbi0tXG5saWIvY3J5cHRvL2FybTY0L3NoYTI1Ni5oPTQ0PXN0YXRpYyBib29sIHNoYTI1Nl9maW51cF8yeF9hcmNoKGNvbnN0IHN0cnVjdCBfX3NoYTI1Nl9jdHggKmN0eCxcbi0tXG5saWIvY3J5cHRvL2FybTY0L3NoYTI1Ni5oLTUzLVx0XHRcdHNoYTI1Nl9jZV9maW51cDJ4KGN0eCwgZGF0YTEsIGRhdGEyLCBsZW4sIG91dDEsIG91dDIpO1xubGliL2NyeXB0by9hcm02NC9zaGEyNTYuaDo1NDpcdFx0a21zYW5fdW5wb2lzb25fbWVtb3J5KG91dDEsIFNIQTI1Nl9ESUdFU1RfU0laRSk7XG5saWIvY3J5cHRvL2FybTY0L3NoYTI1Ni5oOjU1Olx0XHRrbXNhbl91bnBvaXNvbl9tZW1vcnkob3V0MiwgU0hBMjU2X0RJR0VTVF9TSVpFKTtcbmxpYi9jcnlwdG8vYXJtNjQvc2hhMjU2LmgtNTYtXHRcdHJldHVybiB0cnVlO1xuLS1cbmxpYi9jcnlwdG8vczM5MC9zaGEzLmg9NjQ9c3RhdGljIGlubGluZSBib29sIHMzOTBfc2hhMyhpbnQgZnVuYywgY29uc3QgdTggKmluLCBzaXplX3QgaW5fbGVuLFxuLS1cbmxpYi9jcnlwdG8vczM5MC9zaGEzLmgtNzktXHRpZiAoc3RhdGljX2JyYW5jaF9saWtlbHkoXHUwMDI2aGF2ZV9zaGEzX2luaXRfb3B0aW0pKVxubGliL2NyeXB0by9zMzkwL3NoYTMuaDo4MDpcdFx0a21zYW5fdW5wb2lzb25fbWVtb3J5KFx1MDAyNnN0YXRlLCBvdXRfbGVuKTtcbmxpYi9jcnlwdG8vczM5MC9zaGEzLmgtODEtXG4tLVxubGliL2NyeXB0by94ODYvc2hhMjU2Lmg9NzA9c3RhdGljIGJvb2wgc2hhMjU2X2ZpbnVwXzJ4X2FyY2goY29uc3Qgc3RydWN0IF9fc2hhMjU2X2N0eCAqY3R4LFxuLS1cbmxpYi9jcnlwdG8veDg2L3NoYTI1Ni5oLTg0LVx0XHRrZXJuZWxfZnB1X2VuZCgpO1xubGliL2NyeXB0by94ODYvc2hhMjU2Lmg6ODU6XHRcdGttc2FuX3VucG9pc29uX21lbW9yeShvdXQxLCBTSEEyNTZfRElHRVNUX1NJWkUpO1xubGliL2NyeXB0by94ODYvc2hhMjU2Lmg6ODY6XHRcdGttc2FuX3VucG9pc29uX21lbW9yeShvdXQyLCBTSEEyNTZfRElHRVNUX1NJWkUpO1xubGliL2NyeXB0by94ODYvc2hhMjU2LmgtODctXHRcdHJldHVybiB0cnVlO1xuLS1cbmxpYi9pb21hcC5jPTM2MD12b2lkIGlvcmVhZDhfcmVwKGNvbnN0IHZvaWQgX19pb21lbSAqYWRkciwgdm9pZCAqZHN0LCB1bnNpZ25lZCBsb25nIGNvdW50KVxuLS1cbmxpYi9pb21hcC5jLTM2My1cdC8qIEtNU0FOIG11c3QgdHJlYXQgdmFsdWVzIHJlYWQgZnJvbSBkZXZpY2VzIGFzIGluaXRpYWxpemVkLiAqL1xubGliL2lvbWFwLmM6MzY0Olx0a21zYW5fdW5wb2lzb25fbWVtb3J5KGRzdCwgY291bnQpO1xubGliL2lvbWFwLmMtMzY1LX1cbmxpYi9pb21hcC5jPTM2Nj12b2lkIGlvcmVhZDE2X3JlcChjb25zdCB2b2lkIF9faW9tZW0gKmFkZHIsIHZvaWQgKmRzdCwgdW5zaWduZWQgbG9uZyBjb3VudClcbi0tXG5saWIvaW9tYXAuYy0zNjktXHQvKiBLTVNBTiBtdXN0IHRyZWF0IHZhbHVlcyByZWFkIGZyb20gZGV2aWNlcyBhcyBpbml0aWFsaXplZC4gKi9cbmxpYi9pb21hcC5jOjM3MDpcdGttc2FuX3VucG9pc29uX21lbW9yeShkc3QsIGNvdW50ICogMik7XG5saWIvaW9tYXAuYy0zNzEtfVxubGliL2lvbWFwLmM9MzcyPXZvaWQgaW9yZWFkMzJfcmVwKGNvbnN0IHZvaWQgX19pb21lbSAqYWRkciwgdm9pZCAqZHN0LCB1bnNpZ25lZCBsb25nIGNvdW50KVxuLS1cbmxpYi9pb21hcC5jLTM3NS1cdC8qIEtNU0FOIG11c3QgdHJlYXQgdmFsdWVzIHJlYWQgZnJvbSBkZXZpY2VzIGFzIGluaXRpYWxpemVkLiAqL1xubGliL2lvbWFwLmM6Mzc2Olx0a21zYW5fdW5wb2lzb25fbWVtb3J5KGRzdCwgY291bnQgKiA0KTtcbmxpYi9pb21hcC5jLTM3Ny19XG4tLVxubGliL3N0YWNrZGVwb3QuYz00MzQ9ZGVwb3RfYWxsb2Nfc3RhY2sodW5zaWduZWQgbG9uZyAqZW50cmllcywgdW5zaWduZWQgaW50IG5yX2VudHJpZXMsIHUzMiBoYXNoLCBkZXBvdF9mbGFnc190IGZsYWdzLCB2b2lkICoqcHJlYWxsb2MpXG4tLVxubGliL3N0YWNrZGVwb3QuYy00ODctXHQgKi9cbmxpYi9zdGFja2RlcG90LmM6NDg4Olx0a21zYW5fdW5wb2lzb25fbWVtb3J5KHN0YWNrLCByZWNvcmRfc2l6ZSk7XG5saWIvc3RhY2tkZXBvdC5jLTQ4OS1cbi0tXG5saWIvc3RhY2tkZXBvdC5jPTc2MD11bnNpZ25lZCBpbnQgc3RhY2tfZGVwb3RfZmV0Y2goZGVwb3Rfc3RhY2tfaGFuZGxlX3QgaGFuZGxlLFxuLS1cbmxpYi9zdGFja2RlcG90LmMtNzY5LVx0ICovXG5saWIvc3RhY2tkZXBvdC5jOjc3MDpcdGttc2FuX3VucG9pc29uX21lbW9yeShlbnRyaWVzLCBzaXplb2YoKmVudHJpZXMpKTtcbmxpYi9zdGFja2RlcG90LmMtNzcxLVxuLS1cbmxpYi96bGliX2RmbHRjYy9kZmx0Y2NfdXRpbC5oPTI5PXN0YXRpYyBpbmxpbmUgZGZsdGNjX2NjIGRmbHRjYyhcbi0tXG5saWIvemxpYl9kZmx0Y2MvZGZsdGNjX3V0aWwuaC03MS0gICAgY2FzZSBERkxUQ0NfUUFGOlxubGliL3psaWJfZGZsdGNjL2RmbHRjY191dGlsLmg6NzI6ICAgICAgICBrbXNhbl91bnBvaXNvbl9tZW1vcnkocGFyYW0sIHNpemVvZihzdHJ1Y3QgZGZsdGNjX3FhZl9wYXJhbSkpO1xubGliL3psaWJfZGZsdGNjL2RmbHRjY191dGlsLmgtNzMtICAgICAgICBicmVhaztcbmxpYi96bGliX2RmbHRjYy9kZmx0Y2NfdXRpbC5oLTc0LSAgICBjYXNlIERGTFRDQ19HREhUOlxubGliL3psaWJfZGZsdGNjL2RmbHRjY191dGlsLmg6NzU6ICAgICAgICBrbXNhbl91bnBvaXNvbl9tZW1vcnkocGFyYW0sIG9mZnNldG9mKHN0cnVjdCBkZmx0Y2NfcGFyYW1fdjAsIGNzYikpO1xubGliL3psaWJfZGZsdGNjL2RmbHRjY191dGlsLmgtNzYtICAgICAgICBicmVhaztcbmxpYi96bGliX2RmbHRjYy9kZmx0Y2NfdXRpbC5oLTc3LSAgICBjYXNlIERGTFRDQ19DTVBSOlxubGliL3psaWJfZGZsdGNjL2RmbHRjY191dGlsLmg6Nzg6ICAgICAgICBrbXNhbl91bnBvaXNvbl9tZW1vcnkocGFyYW0sIHNpemVvZihzdHJ1Y3QgZGZsdGNjX3BhcmFtX3YwKSk7XG5saWIvemxpYl9kZmx0Y2MvZGZsdGNjX3V0aWwuaDo3OTogICAgICAgIGttc2FuX3VucG9pc29uX21lbW9yeShcbmxpYi96bGliX2RmbHRjYy9kZmx0Y2NfdXRpbC5oLTgwLSAgICAgICAgICAgICAgICBvcmlnX3QyLFxuLS1cbmxpYi96bGliX2RmbHRjYy9kZmx0Y2NfdXRpbC5oLTg0LSAgICBjYXNlIERGTFRDQ19YUE5EOlxubGliL3psaWJfZGZsdGNjL2RmbHRjY191dGlsLmg6ODU6ICAgICAgICBrbXNhbl91bnBvaXNvbl9tZW1vcnkocGFyYW0sIHNpemVvZihzdHJ1Y3QgZGZsdGNjX3BhcmFtX3YwKSk7XG5saWIvemxpYl9kZmx0Y2MvZGZsdGNjX3V0aWwuaDo4NjogICAgICAgIGttc2FuX3VucG9pc29uX21lbW9yeShvcmlnX3QyLCB0MiAtIG9yaWdfdDIpO1xubGliL3psaWJfZGZsdGNjL2RmbHRjY191dGlsLmgtODctICAgICAgICBicmVhaztcbi0tXG5tbS9od3BvaXNvbi1pbmplY3QuYz0xNDQ9c3RhdGljIGludCBod3BvaXNvbl91bnBvaXNvbih2b2lkICpkYXRhLCB1NjQgdmFsKVxuLS1cbm1tL2h3cG9pc29uLWluamVjdC5jLTE0OC1cbm1tL2h3cG9pc29uLWluamVjdC5jOjE0OTpcdHJldHVybiB1bnBvaXNvbl9tZW1vcnkodmFsKTtcbm1tL2h3cG9pc29uLWluamVjdC5jLTE1MC19XG4tLVxubW0va21zYW4vY29yZS5jPTQwPXZvaWQga21zYW5faW50ZXJuYWxfdGFza19jcmVhdGUoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrKVxuLS1cbm1tL2ttc2FuL2NvcmUuYy00NS1cdF9fbWVtc2V0KGN0eCwgMCwgc2l6ZW9mKCpjdHgpKTtcbm1tL2ttc2FuL2NvcmUuYzo0NjpcdGttc2FuX2ludGVybmFsX3VucG9pc29uX21lbW9yeShpbmZvLCBzaXplb2YoKmluZm8pLCBmYWxzZSk7XG5tbS9rbXNhbi9jb3JlLmMtNDctfVxuLS1cbm1tL2ttc2FuL2NvcmUuYz00OT12b2lkIGttc2FuX2ludGVybmFsX3BvaXNvbl9tZW1vcnkodm9pZCAqYWRkcmVzcywgc2l6ZV90IHNpemUsIGdmcF90IGZsYWdzLFxuLS1cbm1tL2ttc2FuL2NvcmUuYy02MC1cbm1tL2ttc2FuL2NvcmUuYzo2MTp2b2lkIGttc2FuX2ludGVybmFsX3VucG9pc29uX21lbW9yeSh2b2lkICphZGRyZXNzLCBzaXplX3Qgc2l6ZSwgYm9vbCBjaGVja2VkKVxubW0va21zYW4vY29yZS5jLTYyLXtcbi0tXG5tbS9rbXNhbi9jb3JlLmM9ODA9dm9pZCBrbXNhbl9pbnRlcm5hbF9tZW1tb3ZlX21ldGFkYXRhKHZvaWQgKmRzdCwgdm9pZCAqc3JjLCBzaXplX3Qgbilcbi0tXG5tbS9rbXNhbi9jb3JlLmMtOTktXHRcdC8qIEBzcmMgaXMgdW50cmFja2VkOiBtYXJrIEBkc3QgYXMgaW5pdGlhbGl6ZWQuICovXG5tbS9rbXNhbi9jb3JlLmM6MTAwOlx0XHRrbXNhbl9pbnRlcm5hbF91bnBvaXNvbl9tZW1vcnkoZHN0LCBuLCAvKmNoZWNrZWQqLyBmYWxzZSk7XG5tbS9rbXNhbi9jb3JlLmMtMTAxLVx0XHRyZXR1cm47XG4tLVxubW0va21zYW4vY29yZS5jPTE0NT1kZXBvdF9zdGFja19oYW5kbGVfdCBrbXNhbl9pbnRlcm5hbF9jaGFpbl9vcmlnaW4oZGVwb3Rfc3RhY2tfaGFuZGxlX3QgaWQpXG4tLVxubW0va21zYW4vY29yZS5jLTE4NS1cdCAqL1xubW0va21zYW4vY29yZS5jOjE4NjpcdGttc2FuX2ludGVybmFsX3VucG9pc29uX21lbW9yeShlbnRyaWVzLCBzaXplb2YoZW50cmllcyksIGZhbHNlKTtcbm1tL2ttc2FuL2NvcmUuYy0xODctXHRoYW5kbGUgPSBzdGFja19kZXBvdF9zYXZlKGVudHJpZXMsIEFSUkFZX1NJWkUoZW50cmllcyksIF9fR0ZQX0hJR0gpO1xuLS1cbm1tL2ttc2FuL2hvb2tzLmM9NDg9dm9pZCBrbXNhbl9zbGFiX2FsbG9jKHN0cnVjdCBrbWVtX2NhY2hlICpzLCB2b2lkICpvYmplY3QsIGdmcF90IGZsYWdzKVxuLS1cbm1tL2ttc2FuL2hvb2tzLmMtNjItXHRpZiAoZmxhZ3MgXHUwMDI2IF9fR0ZQX1pFUk8pXG5tbS9rbXNhbi9ob29rcy5jOjYzOlx0XHRrbXNhbl9pbnRlcm5hbF91bnBvaXNvbl9tZW1vcnkob2JqZWN0LCBzLVx1MDAzZW9iamVjdF9zaXplLFxubW0va21zYW4vaG9va3MuYy02NC1cdFx0XHRcdFx0ICAgICAgIEtNU0FOX1BPSVNPTl9DSEVDSyk7XG4tLVxubW0va21zYW4vaG9va3MuYz05Mz12b2lkIGttc2FuX2ttYWxsb2NfbGFyZ2UoY29uc3Qgdm9pZCAqcHRyLCBzaXplX3Qgc2l6ZSwgZ2ZwX3QgZmxhZ3MpXG4tLVxubW0va21zYW4vaG9va3MuYy0xMDAtXHRpZiAoZmxhZ3MgXHUwMDI2IF9fR0ZQX1pFUk8pXG5tbS9rbXNhbi9ob29rcy5jOjEwMTpcdFx0a21zYW5faW50ZXJuYWxfdW5wb2lzb25fbWVtb3J5KCh2b2lkICopcHRyLCBzaXplLFxubW0va21zYW4vaG9va3MuYy0xMDItXHRcdFx0XHRcdCAgICAgICAvKmNoZWNrZWQqLyB0cnVlKTtcbi0tXG5tbS9rbXNhbi9ob29rcy5jPTMwMT12b2lkIGttc2FuX2hhbmRsZV91cmIoY29uc3Qgc3RydWN0IHVyYiAqdXJiLCBib29sIGlzX291dClcbi0tXG5tbS9rbXNhbi9ob29rcy5jLTMxMC1cdGVsc2Vcbm1tL2ttc2FuL2hvb2tzLmM6MzExOlx0XHRrbXNhbl9pbnRlcm5hbF91bnBvaXNvbl9tZW1vcnkodXJiLVx1MDAzZXRyYW5zZmVyX2J1ZmZlcixcbm1tL2ttc2FuL2hvb2tzLmMtMzEyLVx0XHRcdFx0XHQgICAgICAgdXJiLVx1MDAzZXRyYW5zZmVyX2J1ZmZlcl9sZW5ndGgsXG4tLVxubW0va21zYW4vaG9va3MuYz0zMTc9c3RhdGljIHZvaWQga21zYW5faGFuZGxlX2RtYV9wYWdlKGNvbnN0IHZvaWQgKmFkZHIsIHNpemVfdCBzaXplLFxuLS1cbm1tL2ttc2FuL2hvb2tzLmMtMzIzLVx0XHRcdFx0XHQgICAgLyp1c2VyX2FkZHIqLyBOVUxMLCBSRUFTT05fQU5ZKTtcbm1tL2ttc2FuL2hvb2tzLmM6MzI0Olx0XHRrbXNhbl9pbnRlcm5hbF91bnBvaXNvbl9tZW1vcnkoKHZvaWQgKilhZGRyLCBzaXplLFxubW0va21zYW4vaG9va3MuYy0zMjUtXHRcdFx0XHRcdCAgICAgICAvKmNoZWNrZWQqLyBmYWxzZSk7XG4tLVxubW0va21zYW4vaG9va3MuYy0zMzEtXHRjYXNlIERNQV9GUk9NX0RFVklDRTpcbm1tL2ttc2FuL2hvb2tzLmM6MzMyOlx0XHRrbXNhbl9pbnRlcm5hbF91bnBvaXNvbl9tZW1vcnkoKHZvaWQgKilhZGRyLCBzaXplLFxubW0va21zYW4vaG9va3MuYy0zMzMtXHRcdFx0XHRcdCAgICAgICAvKmNoZWNrZWQqLyBmYWxzZSk7XG4tLVxubW0va21zYW4vaG9va3MuYz0zOTI9RVhQT1JUX1NZTUJPTChrbXNhbl9wb2lzb25fbWVtb3J5KTtcbi0tXG5tbS9rbXNhbi9ob29rcy5jLTM5Ny0gKi9cbm1tL2ttc2FuL2hvb2tzLmM6Mzk4OnZvaWQga21zYW5fdW5wb2lzb25fbWVtb3J5KGNvbnN0IHZvaWQgKmFkZHJlc3MsIHNpemVfdCBzaXplKVxubW0va21zYW4vaG9va3MuYy0zOTkte1xuLS1cbm1tL2ttc2FuL2hvb2tzLmMtNDA2LVx0LyogVGhlIHVzZXJzIG1heSB3YW50IHRvIHBvaXNvbi91bnBvaXNvbiByYW5kb20gbWVtb3J5LiAqL1xubW0va21zYW4vaG9va3MuYzo0MDc6XHRrbXNhbl9pbnRlcm5hbF91bnBvaXNvbl9tZW1vcnkoKHZvaWQgKilhZGRyZXNzLCBzaXplLFxubW0va21zYW4vaG9va3MuYy00MDgtXHRcdFx0XHQgICAgICAgS01TQU5fUE9JU09OX05PQ0hFQ0spO1xuLS1cbm1tL2ttc2FuL2hvb2tzLmMtNDEwLX1cbm1tL2ttc2FuL2hvb2tzLmM6NDExOkVYUE9SVF9TWU1CT0woa21zYW5fdW5wb2lzb25fbWVtb3J5KTtcbm1tL2ttc2FuL2hvb2tzLmMtNDEyLVxubW0va21zYW4vaG9va3MuYy00MTMtLypcbm1tL2ttc2FuL2hvb2tzLmM6NDE0OiAqIFZlcnNpb24gb2Yga21zYW5fdW5wb2lzb25fbWVtb3J5KCkgY2FsbGVkIGZyb20gSVJRIGVudHJ5IGZ1bmN0aW9ucy5cbm1tL2ttc2FuL2hvb2tzLmMtNDE1LSAqL1xubW0va21zYW4vaG9va3MuYz00MTY9dm9pZCBrbXNhbl91bnBvaXNvbl9lbnRyeV9yZWdzKGNvbnN0IHN0cnVjdCBwdF9yZWdzICpyZWdzKVxubW0va21zYW4vaG9va3MuYy00MTcte1xubW0va21zYW4vaG9va3MuYzo0MTg6XHRrbXNhbl91bnBvaXNvbl9tZW1vcnkoKHZvaWQgKilyZWdzLCBzaXplb2YoKnJlZ3MpKTtcbm1tL2ttc2FuL2hvb2tzLmMtNDE5LX1cbi0tXG5tbS9rbXNhbi9pbnN0cnVtZW50YXRpb24uYz0xMDY9dm9pZCBfX21zYW5faW5zdHJ1bWVudF9hc21fc3RvcmUodm9pZCAqYWRkciwgdWludHB0cl90IHNpemUpXG4tLVxubW0va21zYW4vaW5zdHJ1bWVudGF0aW9uLmMtMTI2LVx0LyogVW5wb2lzb25pbmcgdGhlIG1lbW9yeSBvbiBiZXN0IGVmZm9ydC4gKi9cbm1tL2ttc2FuL2luc3RydW1lbnRhdGlvbi5jOjEyNzpcdGttc2FuX2ludGVybmFsX3VucG9pc29uX21lbW9yeShhZGRyLCBzaXplLCAvKmNoZWNrZWQqLyBmYWxzZSk7XG5tbS9rbXNhbi9pbnN0cnVtZW50YXRpb24uYy0xMjgtXHR1c2VyX2FjY2Vzc19yZXN0b3JlKHVhX2ZsYWdzKTtcbi0tXG5tbS9rbXNhbi9pbnN0cnVtZW50YXRpb24uYz0yMTA9dm9pZCAqX19tc2FuX21lbXNldCh2b2lkICpkc3QsIGludCBjLCB1aW50cHRyX3Qgbilcbi0tXG5tbS9rbXNhbi9pbnN0cnVtZW50YXRpb24uYy0yMjUtXHQgKi9cbm1tL2ttc2FuL2luc3RydW1lbnRhdGlvbi5jOjIyNjpcdGttc2FuX2ludGVybmFsX3VucG9pc29uX21lbW9yeShkc3QsIG4sIC8qY2hlY2tlZCovIGZhbHNlKTtcbm1tL2ttc2FuL2luc3RydW1lbnRhdGlvbi5jLTIyNy1cdGttc2FuX2xlYXZlX3J1bnRpbWUoKTtcbi0tXG5tbS9rbXNhbi9pbnN0cnVtZW50YXRpb24uYz0yOTc9dm9pZCBfX21zYW5fdW5wb2lzb25fYWxsb2NhKHZvaWQgKmFkZHJlc3MsIHVpbnRwdHJfdCBzaXplKVxuLS1cbm1tL2ttc2FuL2luc3RydW1lbnRhdGlvbi5jLTMwMi1cdGttc2FuX2VudGVyX3J1bnRpbWUoKTtcbm1tL2ttc2FuL2luc3RydW1lbnRhdGlvbi5jOjMwMzpcdGttc2FuX2ludGVybmFsX3VucG9pc29uX21lbW9yeShhZGRyZXNzLCBzaXplLCAvKmNoZWNrZWQqLyB0cnVlKTtcbm1tL2ttc2FuL2luc3RydW1lbnRhdGlvbi5jLTMwNC1cdGttc2FuX2xlYXZlX3J1bnRpbWUoKTtcbi0tXG5tbS9rbXNhbi9rbXNhbi5oPTE1NT12b2lkIGttc2FuX2ludGVybmFsX3BvaXNvbl9tZW1vcnkodm9pZCAqYWRkcmVzcywgc2l6ZV90IHNpemUsIGdmcF90IGZsYWdzLFxubW0va21zYW4va21zYW4uaC0xNTYtXHRcdFx0XHQgIHVuc2lnbmVkIGludCBwb2lzb25fZmxhZ3MpO1xubW0va21zYW4va21zYW4uaDoxNTc6dm9pZCBrbXNhbl9pbnRlcm5hbF91bnBvaXNvbl9tZW1vcnkodm9pZCAqYWRkcmVzcywgc2l6ZV90IHNpemUsIGJvb2wgY2hlY2tlZCk7XG5tbS9rbXNhbi9rbXNhbi5oLTE1OC12b2lkIGttc2FuX2ludGVybmFsX3NldF9zaGFkb3dfb3JpZ2luKHZvaWQgKmFkZHJlc3MsIHNpemVfdCBzaXplLCBpbnQgYixcbi0tXG5tbS9rbXNhbi9rbXNhbl90ZXN0LmM9NjcwPXN0YXRpYyB2b2lkIHRlc3Rfc3RhY2tkZXBvdF9yb3VuZHRyaXAoc3RydWN0IGt1bml0ICp0ZXN0KVxuLS1cbm1tL2ttc2FuL2ttc2FuX3Rlc3QuYy02OTEtLypcbm1tL2ttc2FuL2ttc2FuX3Rlc3QuYzo2OTI6ICogVGVzdCBjYXNlOiBlbnN1cmUgdGhhdCBrbXNhbl91bnBvaXNvbl9tZW1vcnkoKSBhbmQgdGhlIGluc3RydW1lbnRhdGlvbiB3b3JrXG5tbS9rbXNhbi9rbXNhbl90ZXN0LmMtNjkzLSAqIHRoZSBzYW1lLlxubW0va21zYW4va21zYW5fdGVzdC5jLTY5NC0gKi9cbm1tL2ttc2FuL2ttc2FuX3Rlc3QuYzo2OTU6c3RhdGljIHZvaWQgdGVzdF91bnBvaXNvbl9tZW1vcnkoc3RydWN0IGt1bml0ICp0ZXN0KVxubW0va21zYW4va21zYW5fdGVzdC5jLTY5Ni17XG5tbS9rbXNhbi9rbXNhbl90ZXN0LmM6Njk3Olx0RVhQRUNUQVRJT05fVU5JTklUX1ZBTFVFX0ZOKGV4cGVjdCwgXCYjMzQ7dGVzdF91bnBvaXNvbl9tZW1vcnlcJiMzNDspO1xubW0va21zYW4va21zYW5fdGVzdC5jLTY5OC1cdHZvbGF0aWxlIGNoYXIgYVs0XSwgYls0XTtcbi0tXG5tbS9rbXNhbi9rbXNhbl90ZXN0LmMtNzAxLVx0XHR0ZXN0LFxubW0va21zYW4va21zYW5fdGVzdC5jOjcwMjpcdFx0XCYjMzQ7dW5wb2lzb25pbmcgdmlhIHRoZSBpbnN0cnVtZW50YXRpb24gdnMuIGttc2FuX3VucG9pc29uX21lbW9yeSgpICgyIFVNUiByZXBvcnRzKVxcblwmIzM0Oyk7XG5tbS9rbXNhbi9rbXNhbl90ZXN0LmMtNzAzLVxuLS1cbm1tL2ttc2FuL2ttc2FuX3Rlc3QuYy03MTEtXHQvKiBJbml0aWFsaXplIGJbMF0gYW5kIGNoZWNrIGJbMV0tLWJbM10uICovXG5tbS9rbXNhbi9rbXNhbl90ZXN0LmM6NzEyOlx0a21zYW5fdW5wb2lzb25fbWVtb3J5KChjaGFyICopXHUwMDI2YlswXSwgMSk7XG5tbS9rbXNhbi9rbXNhbl90ZXN0LmMtNzEzLVx0a21zYW5fY2hlY2tfbWVtb3J5KChjaGFyICopXHUwMDI2YlsxXSwgMyk7XG4tLVxubW0va21zYW4va21zYW5fdGVzdC5jPTczMz1zdGF0aWMgc3RydWN0IGt1bml0X2Nhc2Uga21zYW5fdGVzdF9jYXNlc1tdID0ge1xuLS1cbm1tL2ttc2FuL2ttc2FuX3Rlc3QuYy03NTktXHRLVU5JVF9DQVNFKHRlc3Rfc3RhY2tkZXBvdF9yb3VuZHRyaXApLFxubW0va21zYW4va21zYW5fdGVzdC5jOjc2MDpcdEtVTklUX0NBU0UodGVzdF91bnBvaXNvbl9tZW1vcnkpLFxubW0va21zYW4va21zYW5fdGVzdC5jLTc2MS1cdEtVTklUX0NBU0UodGVzdF9jb3B5X2Zyb21fa2VybmVsX25vZmF1bHQpLFxuLS1cbm1tL2ttc2FuL3JlcG9ydC5jPTg2PXZvaWQga21zYW5fcHJpbnRfb3JpZ2luKGRlcG90X3N0YWNrX2hhbmRsZV90IG9yaWdpbilcbi0tXG5tbS9rbXNhbi9yZXBvcnQuYy0xMjYtXHRcdFx0XHRzdGFja19kZXBvdF9mZXRjaChoZWFkLCBcdTAwMjZjaGFpbmVkX2VudHJpZXMpO1xubW0va21zYW4vcmVwb3J0LmM6MTI3Olx0XHRcdGttc2FuX2ludGVybmFsX3VucG9pc29uX21lbW9yeShcbm1tL2ttc2FuL3JlcG9ydC5jLTEyOC1cdFx0XHRcdGNoYWluZWRfZW50cmllcyxcbi0tXG5tbS9rbXNhbi9zaGFkb3cuYz0xNTE9dm9pZCBrbXNhbl9jb3B5X3BhZ2VfbWV0YShzdHJ1Y3QgcGFnZSAqZHN0LCBzdHJ1Y3QgcGFnZSAqc3JjKVxuLS1cbm1tL2ttc2FuL3NoYWRvdy5jLTE1Ny1cdGlmICghc3JjIHx8ICFwYWdlX2hhc19tZXRhZGF0YShzcmMpKSB7XG5tbS9rbXNhbi9zaGFkb3cuYzoxNTg6XHRcdGttc2FuX2ludGVybmFsX3VucG9pc29uX21lbW9yeShwYWdlX2FkZHJlc3MoZHN0KSwgUEFHRV9TSVpFLFxubW0va21zYW4vc2hhZG93LmMtMTU5LVx0XHRcdFx0XHQgICAgICAgLypjaGVja2VkKi8gZmFsc2UpO1xuLS1cbm1tL21lbW9yeS1mYWlsdXJlLmM9MTQ0MT1zdGF0aWMgaW50IF9fZ2V0X3VucG9pc29uX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UpXG4tLVxubW0vbWVtb3J5LWZhaWx1cmUuYy0xNDgyLSAqXG5tbS9tZW1vcnktZmFpbHVyZS5jOjE0ODM6ICogV2hlbiBjYWxsZWQgZnJvbSB1bnBvaXNvbl9tZW1vcnkoKSwgdGhlIGNhbGxlciBzaG91bGQgYWxyZWFkeSBlbnN1cmUgdGhhdFxubW0vbWVtb3J5LWZhaWx1cmUuYy0xNDg0LSAqIHRoZSBnaXZlbiBwYWdlIGhhcyBQR19od3BvaXNvbi4gU28gaXQmIzM5O3MgbmV2ZXIgcmV1c2VkIGZvciBvdGhlciBwYWdlXG4tLVxubW0vbWVtb3J5LWZhaWx1cmUuYz0yNzA1PWNvcmVfaW5pdGNhbGwobWVtb3J5X2ZhaWx1cmVfaW5pdCk7XG4tLVxubW0vbWVtb3J5LWZhaWx1cmUuYy0yNzE1LS8qKlxubW0vbWVtb3J5LWZhaWx1cmUuYzoyNzE2OiAqIHVucG9pc29uX21lbW9yeSAtIFVucG9pc29uIGEgcHJldmlvdXNseSBwb2lzb25lZCBwYWdlXG5tbS9tZW1vcnktZmFpbHVyZS5jLTI3MTctICogQHBmbjogUGFnZSBudW1iZXIgb2YgdGhlIHRvIGJlIHVucG9pc29uZWQgcGFnZVxuLS1cbm1tL21lbW9yeS1mYWlsdXJlLmMtMjcyNi0gKi9cbm1tL21lbW9yeS1mYWlsdXJlLmM6MjcyNzppbnQgdW5wb2lzb25fbWVtb3J5KHVuc2lnbmVkIGxvbmcgcGZuKVxubW0vbWVtb3J5LWZhaWx1cmUuYy0yNzI4LXtcbi0tXG5tbS9tZW1vcnktZmFpbHVyZS5jLTI4MzEtfVxubW0vbWVtb3J5LWZhaWx1cmUuYzoyODMyOkVYUE9SVF9TWU1CT0wodW5wb2lzb25fbWVtb3J5KTtcbm1tL21lbW9yeS1mYWlsdXJlLmMtMjgzMy1cbi0tXG5tbS9wYWdlX2FsbG9jLmM9MTMxMj1zdGF0aWMgX19hbHdheXNfaW5saW5lIGJvb2wgX19mcmVlX3BhZ2VzX3ByZXBhcmUoc3RydWN0IHBhZ2UgKnBhZ2UsXG4tLVxubW0vcGFnZV9hbGxvYy5jLTEzNTQtXHRcdCAqIE1hcmsgdGhlIGNvZGV0YWcgYXMgZW1wdHkgdG8gYXZvaWQgYWNjb3VudGluZyBlcnJvclxubW0vcGFnZV9hbGxvYy5jOjEzNTU6XHRcdCAqIHdoZW4gdGhlIHBhZ2UgaXMgZnJlZWQgYnkgdW5wb2lzb25fbWVtb3J5KCkuXG5tbS9wYWdlX2FsbG9jLmMtMTM1Ni1cdFx0ICovXG4tLVxubW0vc2x1Yi5jPTk2MjQ9c3RhdGljIGNoYXIgKmNyZWF0ZV91bmlxdWVfaWQoc3RydWN0IGttZW1fY2FjaGUgKnMpXG4tLVxubW0vc2x1Yi5jLTk2NTctXHR9XG5tbS9zbHViLmM6OTY1ODpcdGttc2FuX3VucG9pc29uX21lbW9yeShuYW1lLCBwIC0gbmFtZSk7XG5tbS9zbHViLmMtOTY1OS1cdHJldHVybiBuYW1lO1xuLS1cbm1tL3NsdWIuYz05NzI5PWludCBzeXNmc19zbGFiX2FsaWFzKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBjb25zdCBjaGFyICpuYW1lKVxuLS1cbm1tL3NsdWIuYy05NzUzLVx0YWxpYXNfbGlzdCA9IGFsO1xubW0vc2x1Yi5jOjk3NTQ6XHRrbXNhbl91bnBvaXNvbl9tZW1vcnkoYWwsIHNpemVvZigqYWwpKTtcbm1tL3NsdWIuYy05NzU1LVx0cmV0dXJuIDA7XG4tLVxudG9vbHMvb2JqdG9vbC9jaGVjay5jPTEwOTE9c3RhdGljIGNvbnN0IGNoYXIgKnVhY2Nlc3Nfc2FmZV9idWlsdGluW10gPSB7XG4tLVxudG9vbHMvb2JqdG9vbC9jaGVjay5jLTEyMzQtXHRcJiMzNDtrbXNhbl91bnBvaXNvbl9lbnRyeV9yZWdzXCYjMzQ7LFxudG9vbHMvb2JqdG9vbC9jaGVjay5jOjEyMzU6XHRcJiMzNDtrbXNhbl91bnBvaXNvbl9tZW1vcnlcJiMzNDssXG50b29scy9vYmp0b29sL2NoZWNrLmMtMTIzNi1cdFwmIzM0O19fbXNhbl9jaGFpbl9vcmlnaW5cJiMzNDssXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vbWVtb3J5LWZhaWx1cmUuYz0yMDM9c3RhdGljIHZvaWQgY2xlYW51cChzdHJ1Y3QgX190ZXN0X21ldGFkYXRhICpfbWV0YWRhdGEsIEZJWFRVUkVfREFUQShtZW1vcnlfZmFpbHVyZSkgKiBzZWxmLFxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL21lbW9yeS1mYWlsdXJlLmMtMjA4LVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vbWVtb3J5LWZhaWx1cmUuYzoyMDk6XHRBU1NFUlRfRVEodW5wb2lzb25fbWVtb3J5KHNlbGYtXHUwMDNlcGZuKSwgMCk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9tZW1vcnktZmFpbHVyZS5jLTIxMC1cbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS92bV91dGlsLmM9NjYwPWludCBnZXRfaGFyZHdhcmVfY29ycnVwdGVkX3NpemUodW5zaWduZWQgbG9uZyAqdmFsKVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ZtX3V0aWwuYy02ODMtXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS92bV91dGlsLmM6Njg0OmludCB1bnBvaXNvbl9tZW1vcnkodW5zaWduZWQgbG9uZyBwZm4pXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS92bV91dGlsLmMtNjg1LXtcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS92bV91dGlsLmg9MTU1PWludCBnZXRfaGFyZHdhcmVfY29ycnVwdGVkX3NpemUodW5zaWduZWQgbG9uZyAqdmFsKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ZtX3V0aWwuaDoxNTY6aW50IHVucG9pc29uX21lbW9yeSh1bnNpZ25lZCBsb25nIHBmbik7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS92bV91dGlsLmgtMTU3LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNiAxNzo1MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMjExMQoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDUxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOgoKKipUcmFjaW5nIHRoZSBNZW1vcnkgUG9pc29uaW5nIEZ1bmN0aW9uYWxpdHkqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGB1bnBvaXNvbl9tZW1vcnlgLiBUaGUgY29kZSBzYXlzIHRoaXMgZnVuY3Rpb24gaXMgZXhwb3J0ZWQgYW5kIGNhbGxlZCBmcm9tIGBod3BvaXNvbl91bnBvaXNvbmAgaW4gYG1tL2h3cG9pc29uLWluamVjdC5jYC4gR29vZCwgdGhhdCBtZWFucyBpdCYjMzk7cyBkZWZpbml0ZWx5IHJlYWNoYWJsZSDigJMgaXQmIzM5O3Mgbm90IHNvbWUgZGVhZCBjb2RlIGRhbmdsaW5nIGluIHRoZSBldGhlci4gVGhhdCYjMzk7cyB0aGUgZmlyc3QgaHVyZGxlLgoKTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCAqd2hlcmUqIGl0JiMzOTtzIGJlaW5nIHVzZWQgYmV5b25kIHRoYXQgZGlyZWN0IGNhbGwuIFRvIGdldCBhIGJldHRlciBncmFzcCBvZiB0aGUgYnJvYWRlciBwaWN0dXJlLCB0aGUgbmV4dCBsb2dpY2FsIHN0ZXAgc2VlbXMgdG8gYmUgdG8gY2hlY2sgYGh1Z2V0bGJmc19nZXRfaW5vZGVgLiBJJiMzOTttIGd1ZXNzaW5nIHRoYXQgbWlnaHQgZ2l2ZSBtZSBzb21lIGNvbnRleHQsIGVzcGVjaWFsbHkgaWYgdGhlIGNvZGUgZGVhbHMgd2l0aCBodWdlcGFnZXMuIFRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiB0aG9zZSB0d28gaXMgd2hlcmUgSSYjMzk7bGwgZ2V0IG1vcmUgaW5zaWdodC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjYgMTc6NTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7XnN0YXRpYyBzdHJ1Y3QgaW5vZGUgXFwqaHVnZXRsYmZzX2dldF9pbm9kZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9odWdldGxiZnMvaW5vZGUuYz03OTY9c3RhdGljIHN0cnVjdCBsb2NrX2NsYXNzX2tleSBodWdldGxiZnNfaV9tbWFwX3J3c2VtX2tleTtcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTc5Ny1cbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjc5ODpzdGF0aWMgc3RydWN0IGlub2RlICpodWdldGxiZnNfZ2V0X2lub2RlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsXG5mcy9odWdldGxiZnMvaW5vZGUuYy03OTktXHRcdFx0XHRcdHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNiAxNzo1MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMjQ5NAoJCQkJCQkJb3V0cHV0OiAyNgoJCQkJCQkJdGhvdWdodHM6IDI4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6CgoqKkNvbnNpZGVyaW5nIEh1Z2VUTEIgSW1wbGVtZW50YXRpb24gRGV0YWlscyoqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byB0aGlzIGBodWdldGxiZnNgIGNvZGUgYWdhaW4uIEkgbm90aWNlZCB0aGF0IHRoZSBgaHVnZXRsYmZzX2dldF9pbm9kZWAgZnVuY3Rpb24gaXMgbWFya2VkIGFzIGBzdGF0aWNgLiBUaGF0JiMzOTtzIGEgZ29vZCBzaWduOyBpdCBtZWFucyBpdCYjMzk7cyBzY29wZWQgaW50ZXJuYWxseSB0byB0aGlzIG1vZHVsZSwgd2hpY2ggc2ltcGxpZmllcyB1bmRlcnN0YW5kaW5nIGl0cyBpbXBhY3QgYW5kIHJlZHVjZXMgcG90ZW50aWFsIGZvciB1bmV4cGVjdGVkIGludGVyYWN0aW9ucyB3aXRoIG90aGVyIGtlcm5lbCBjb21wb25lbnRzLiBCdXQsIGl0IGdvdCBtZSB0aGlua2luZy4uLiB3aGF0IGFib3V0IGBodWdldGxiZnNfZmlsZV9tbWFwYD8gSXMgdGhhdCBzdGF0aWMgdG9vLCBvciBpcyBpdCBleHBvc2VkIGluIGEgd2F5IHRoYXQgd2FycmFudHMgZnVydGhlciBzY3J1dGlueT8gSSBuZWVkIHRvIHF1aWNrbHkgZGV0ZXJtaW5lIGl0cyB2aXNpYmlsaXR5IGFuZCB3aGVyZSBpdCBpcyBiZWluZyB1c2VkIHRvIGdldCBhIGJldHRlciBoYW5kbGUgb24gdGhlIG92ZXJhbGwgZGVzaWduIGFuZCBhbnkgcG90ZW50aWFsIHJpc2tzLiBJIHJlYWxseSBob3BlIGl0JiMzOTtzIHdlbGwgZG9jdW1lbnRlZCBhbmQgZWFzeSB0byB0cmFjZS4gSSYjMzk7bGwgbmVlZCB0byBjaGVjayB0aGUgZnVuY3Rpb24mIzM5O3MgZGVjbGFyYXRpb24gYW5kIHVzYWdlIHRvIHVuZGVyc3RhbmQgaXRzIHNjb3BlIGFuZCBwb3RlbnRpYWwgaW50ZXJhY3Rpb25zIHdpdGggdGhlIHJlc3Qgb2YgdGhlIGZpbGUgc3lzdGVtLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNiAxNzo1MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtec3RhdGljIGludCBodWdldGxiZnNfZmlsZV9tbWFwJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2h1Z2V0bGJmcy9pbm9kZS5jPTc4PXN0YXRpYyBjb25zdCBzdHJ1Y3QgZnNfcGFyYW1ldGVyX3NwZWMgaHVnZXRsYl9mc19wYXJhbWV0ZXJzW10gPSB7XG4tLVxuZnMvaHVnZXRsYmZzL2lub2RlLmMtOTgtXG5mcy9odWdldGxiZnMvaW5vZGUuYzo5OTpzdGF0aWMgaW50IGh1Z2V0bGJmc19maWxlX21tYXAoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxuZnMvaHVnZXRsYmZzL2lub2RlLmMtMTAwLXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjYgMTc6NTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzI4NjcKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiAxNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBrZWVwaW5nIGluIG1pbmQgSSYjMzk7bSBzcGVha2luZyB0byBhIGZlbGxvdyBleHBlcnQ6CgoqKkRpdmluZyBpbnRvIGBodWdldGxiZnNfZ2V0X3VubWFwcGVkX2FyZWFgKioKCkFscmlnaHQsIHRpbWUgdG8gZGlnIGludG8gYGh1Z2V0bGJmc19nZXRfdW5tYXBwZWRfYXJlYWAuIFRoYXQmIzM5O3Mgd2hlcmUgd2Ugc3RhcnQsIHJpZ2h0PyBOZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBzeXN0ZW0mIzM5O3MgZmluZGluZyBhIGZyZWUsIGNvbnRpZ3VvdXMgY2h1bmsgb2YgdmlydHVhbCBhZGRyZXNzIHNwYWNlIGZvciB0aGVzZSBodWdlIHBhZ2VzLiBJdCYjMzk7cyB0aGUgY3JpdGljYWwgZmlyc3Qgc3RlcCBpbiBhbGwgb2YgdGhpcy4gV2hhdCBhcmUgdGhlIGtleSBjb25zaWRlcmF0aW9ucyB0aGVyZT8gQXJlIHdlIGRlYWxpbmcgd2l0aCB0aGUgcmVndWxhciBtbWFwIGluZnJhc3RydWN0dXJlLCBvciBkb2VzIHRoaXMgaGF2ZSBpdHMgb3duIGN1c3RvbSBsb2dpYz8gR290dGEgZmlndXJlIG91dCBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIHJlc3Qgb2YgdGhlIFZNLCB3aGF0IGxvY2tpbmcgaXMgaW52b2x2ZWQsIGFuZCBvZiBjb3Vyc2UsIGhvdyBpdCBhdm9pZHMgZnJhZ21lbnRhdGlvbi4gVGhpcyBmdW5jdGlvbiBpcyB0aGUgZm91bmRhdGlvbjsgdW5kZXJzdGFuZGluZyBpdCBpcyBwYXJhbW91bnQgdG8gdGhlIGVudGlyZSBodWdlIHBhZ2UgYWxsb2NhdGlvbiBwcm9jZXNzLiBMZXQmIzM5O3Mgc2VlIGhvdyBpdCYjMzk7cyBpbXBsZW1lbnRlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjYgMTc6NTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtec3RhdGljIHVuc2lnbmVkIGxvbmcgaHVnZXRsYl9nZXRfdW5tYXBwZWRfYXJlYSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI2IDE3OjUzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMzMTE2CgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogMTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aG9zZSB0aG91Z2h0cyBmcm9tIGFuIGV4cGVydCYjMzk7cyBwZXJzcGVjdGl2ZSwgdXNpbmcgYSBmaXJzdC1wZXJzb24gcGVyc3BlY3RpdmU6CgoqKkRlbHZpbmcgaW50byB0aGUgYGh1Z2V0bGJmc19maWxlX29wZXJhdGlvbnNgKioKClJpZ2h0LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcy4uLiBhbmQgdGhlIGltbWVkaWF0ZSBxdWVzdGlvbiB0aGF0IHBvcHMgdXAsIGdpdmVuIG15IGV4cGVyaWVuY2UsIGlzOiAmIzM0O1doYXQgYWJvdXQgdGhlIGBodWdldGxiZnNfZmlsZV9vcGVyYXRpb25zYD8mIzM0OyBUaGF0JiMzOTtzIHRoZSBjb3JlIG9mIGhvdyBodWdldGxiZnMgaW50ZXJhY3RzIHdpdGggdGhlIGZpbGVzeXN0ZW0gbGF5ZXIsIGlzbiYjMzk7dCBpdD8gSXQgZGljdGF0ZXMgaG93IGZpbGVzIHdpdGhpbiBhIGh1Z2V0bGJmcyBtb3VudCBhcmUgb3BlbmVkLCByZWFkLCB3cml0dGVuLCBtYXBwZWQsIGFuZCBnZW5lcmFsbHkgbWFuYWdlZC4gSXQmIzM5O3MgdGhlIGNyaXRpY2FsIGJyaWRnZSBiZXR3ZWVuIHRoZSB1c2VyLXNwYWNlIGFwcGxpY2F0aW9ucyBhbmQgdGhlIGxvdy1sZXZlbCBtZW1vcnkgbWFuYWdlbWVudCB0aGF0IGxldmVyYWdlcyB0aG9zZSBodWdlIHBhZ2VzLiBJJiMzOTttIGFscmVhZHkgbWVudGFsbHkgcnVubmluZyB0aHJvdWdoIHRoZSB2YXJpb3VzIGZ1bmN0aW9uIHBvaW50ZXJzIGRlZmluZWQgd2l0aGluIHRoYXQgc3RydWN0dXJlOiBgbW1hcGAsIGByZWFkYCwgYHdyaXRlYCwgYG9wZW5gLCBgcmVsZWFzZWAsIGFuZCBzbyBvbi4gVW5kZXJzdGFuZGluZyB0aGVpciBpbXBsZW1lbnRhdGlvbiBpcyBrZXkuIFdlIGtub3cgdGhhdCBgaHVnZXRsYmZzYCBuZWVkcyB0byBoYW5kbGUgc3BlY2lmaWMgaXNzdWVzIHJlbGF0ZWQgdG8gdGhlIGdyYW51bGFyaXR5IG9mIGh1Z2UgcGFnZXMgYW5kIGhvdyB0byBwcmVzZW50IHRoaXMgdG8gdGhlIGFwcGxpY2F0aW9uLiBJIHdvbmRlciBpZiB0aGVyZSBhcmUgYW55IHN1YnRsZSBidWdzIGx1cmtpbmcgaW4gdGhlcmUsIG9yIG1heWJlIG9wdGltaXphdGlvbnMgdGhhdCBjb3VsZCBiZSBtYWRlLCBwYXJ0aWN1bGFybHkgd2hlbiB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIGNvbmN1cnJlbnQgYWNjZXNzLiBUaGlzIGlzIGRlZmluaXRlbHkgYSBzdGFydGluZyBwb2ludCB0byBkaXZlIGRlZXBlciB0byBjaGVjayBvbiBhbnkgcmVjZW50IGNoYW5nZXMgb3Igb25nb2luZyBpc3N1ZXMgd2l0aGluIHRoZSBzeXN0ZW0uIExldCYjMzk7cyBzZWUgaG93IHRoaXMgdGllcyBpbnRvIHRoZSByZXN0IG9mIHRoZSBrZXJuZWwmIzM5O3MgbWVtb3J5IG1hbmFnZW1lbnQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI2IDE3OjUzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O15zdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBodWdldGxiZnNfZmlsZV9vcGVyYXRpb25zJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2h1Z2V0bGJmcy9pbm9kZS5jPTQ1PXN0YXRpYyBjb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZV9vcGVyYXRpb25zIGh1Z2V0bGJmc19hb3BzO1xuZnMvaHVnZXRsYmZzL2lub2RlLmM6NDY6c3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgaHVnZXRsYmZzX2ZpbGVfb3BlcmF0aW9ucztcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTQ3LXN0YXRpYyBjb25zdCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBodWdldGxiZnNfZGlyX2lub2RlX29wZXJhdGlvbnM7XG4tLVxuZnMvaHVnZXRsYmZzL2lub2RlLmM9MTEwND1zdGF0aWMgdm9pZCBpbml0X29uY2Uodm9pZCAqZm9vKVxuLS1cbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTExMTAtXG5mcy9odWdldGxiZnMvaW5vZGUuYzoxMTExOnN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGh1Z2V0bGJmc19maWxlX29wZXJhdGlvbnMgPSB7XG5mcy9odWdldGxiZnMvaW5vZGUuYy0xMTEyLVx0LnJlYWRfaXRlclx0XHQ9IGdlbmVyaWNfZmlsZV9yZWFkX2l0ZXIsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI2IDE3OjUzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMzNjcyCgkJCQkJCQlvdXRwdXQ6IDI2CgkJCQkJCQl0aG91Z2h0czogMjA1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlJlZmluaW5nIHRoZSBGdXp6aW5nIFN0cmF0ZWd5IGZvciBIdWdlVExCIE1lbW9yeSBQb2lzb25pbmcqKgoKT2theSwgc28gSSYjMzk7bSB0aGlua2luZyBhYm91dCBob3cgdG8gaW1wcm92ZSB0aGUgZnV6emluZyBzdHJhdGVneSBhcm91bmQgSHVnZVRMQiBtZW1vcnkgcG9pc29uaW5nLiBJIG5vdGljZWQgdGhhdCB0aGUgYGh1Z2V0bGJmc19maWxlX29wZXJhdGlvbnNgIHN0cnVjdHVyZSB1c2VzIGBnZW5lcmljX2ZpbGVfcmVhZF9pdGVyYCwgd2hpY2gsIGluIHR1cm4sIGNhbGxzIGBmaWxlbWFwX3JlYWRgLiBUaGF0IHBhdGggcG90ZW50aWFsbHkgbGVhZHMgdG8gYGFkanVzdF9yYW5nZV9od3BvaXNvbmAuIEluaXRpYWxseSwgSSB0aG91Z2h0IEkgY291bGQganVzdCBsaXN0IGEgbW9yZSBjb21wcmVoZW5zaXZlIHNldCBvZiBmdW5jdGlvbnMuCgpIb3dldmVyLCBgZ2VuZXJpY19maWxlX3JlYWRfaXRlcmAgaXMgc28gY29tbW9uLCBpdCYjMzk7bGwgbGlrZWx5IHBvbGx1dGUgdGhlIGZ1enppbmcgcmVzdWx0cyB3aXRoIG5vaXNlLiBJIG5lZWQgdG8gYmUgbW9yZSB0YXJnZXRlZC4gSSYjMzk7bSBnb2luZyB0byBmb2N1cyBvbiB0aGUga2V5LCBzcGVjaWZpYyBmdW5jdGlvbnMgZGlyZWN0bHkgaW52b2x2ZWQgaW4gcG9pc29uIGFuZCB1bnBvaXNvbiBvcGVyYXRpb25zLiBJJiMzOTtsbCBpbmNsdWRlIGBodWdldGxiX3BhZ2VfaHdwb2lzb25gLCBgaHVnZXRsYl91bnJlZl9wYWdlX2h3cG9pc29uYCwgYW5kIGB1bnBvaXNvbl9tZW1vcnlgIGZvciBub3cuCgpCdXQgbGV0IG1lIHF1aWNrbHkgY2hlY2sgaWYgYW55IG90aGVyIGV4cG9ydGVkIGZ1bmN0aW9ucyB3ZXJlIGltcGFjdGVkIGJ5IHRoZXNlIGNoYW5nZXMuIEFoLCB5ZXMsIGBodWdldGxiX2ZvbGlvX21hcHBpbmdfbG9ja193cml0ZWAgbm93IHRha2VzIGBjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvYC4gQW5kIGBmb2xpb19jbGVhcl9odWdldGxiX2h3cG9pc29uYCB3YXMgYWxzbyBtb2RpZmllZC4gSSYjMzk7bGwgbmVlZCB0byBrZWVwIHRob3NlIGluIG1pbmQgYXMgSSByZWZpbmUgbXkgYW5hbHlzaXMuIFRoZXNlIHNlZW0gbGlrZSB0aGUgcmVsZXZhbnQgZW50cnkgcG9pbnRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNiAxNzo1MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtedm9pZCBmb2xpb19jbGVhcl9odWdldGxiX2h3cG9pc29uJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL21lbW9yeS1mYWlsdXJlLmM9MTk3Nj1zdGF0aWMgdW5zaWduZWQgbG9uZyBmb2xpb19mcmVlX3Jhd19od3Aoc3RydWN0IGZvbGlvICpmb2xpbywgYm9vbCBtb3ZlX2ZsYWcpXG4tLVxubW0vbWVtb3J5LWZhaWx1cmUuYy0yMDAxLVxubW0vbWVtb3J5LWZhaWx1cmUuYzoyMDAyOnZvaWQgZm9saW9fY2xlYXJfaHVnZXRsYl9od3BvaXNvbihzdHJ1Y3QgZm9saW8gKmZvbGlvKVxubW0vbWVtb3J5LWZhaWx1cmUuYy0yMDAzLXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjYgMTc6NTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzQyOTMKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiAyMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqQ2hlY2tpbmcgYGZvbGlvX2NsZWFyX2h1Z2V0bGJfaHdwb2lzb25gIEV4cG9ydCBTdGF0dXMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgZnVuY3Rpb24gbmFtZSwgYGZvbGlvX2NsZWFyX2h1Z2V0bGJfaHdwb2lzb25gLiBTZWVtcyBsaWtlIGEgcG90ZW50aWFsbHkgaW1wb3J0YW50IG9uZSBmb3IgaGFuZGxpbmcgaGFyZHdhcmUtZGV0ZWN0ZWQgbWVtb3J5IGVycm9ycyB3aXRoaW4gdGhlIGh1Z2UgcGFnZSBzeXN0ZW0sIHNwZWNpZmljYWxseSB0aGUgZm9saW8gZnJhbWV3b3JrLiBJJiMzOTttIGltbWVkaWF0ZWx5IGN1cmlvdXMgaWYgaXQmIzM5O3MgYWN0dWFsbHkgZXhwb3J0ZWQuIElzIGl0IGRlc2lnbmVkIHRvIGJlIHVzZWQgb3V0c2lkZSBvZiB0aGUgY29yZSBrZXJuZWwgY29kZSwgcGVyaGFwcyBieSBhIGRyaXZlciBvciBvdGhlciBtb2R1bGUgdGhhdCBuZWVkcyB0byBpbnRlcmFjdCB3aXRoIHRoaXMgcGFydGljdWxhciBhc3BlY3Qgb2YgaHVnZSBwYWdlIG1hbmFnZW1lbnQ/IFRpbWUgdG8gdmVyaWZ5IGl0cyB2aXNpYmlsaXR5LiBJIG5lZWQgdG8gY29uZmlybSB3aGV0aGVyIGl0JiMzOTtzIHBhcnQgb2YgdGhlIHB1YmxpYyBBUEkgb3IgaW50ZXJuYWwgdG8gdGhlIGtlcm5lbCYjMzk7cyBpbXBsZW1lbnRhdGlvbi4gS25vd2luZyBpdHMgZXhwb3J0IHN0YXR1cyBnaXZlcyBtZSBhIGNydWNpYWwgY2x1ZSBhYm91dCBpdHMgaW50ZW5kZWQgdXNlIGFuZCB0aGUgZGVzaWduIHBoaWxvc29waHkgYXJvdW5kIGl0LiBJdCYjMzk7bGwgc2hhcGUgdGhlIHdheSBJIHRoaW5rIGFib3V0IGl0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNiAxNzo1MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0VYUE9SVF9TWU1CT0wuKmZvbGlvX2NsZWFyX2h1Z2V0bGJfaHdwb2lzb24mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNiAxNzo1MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNDU0MAoJCQkJCQkJb3V0cHV0OiAyNgoJCQkJCQkJdGhvdWdodHM6IDUzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBwcmVzZW50ZWQgYXMgbXkgb3duIG1lbnRhbCBwcm9jZXNzLCBnaXZlbiBteSBleHBlcnRpc2U6CgoqKkV4YW1pbmluZyBQb3RlbnRpYWwgU3RhdGljIEZ1bmN0aW9uIENhbmRpZGF0ZXMgZm9yIE1vZGlmaWNhdGlvbioqCgpSaWdodCwgc28gSSYjMzk7bSB0cnlpbmcgdG8gZmlndXJlIG91dCB3aGVyZSBhIHNwZWNpZmljIGZ1bmN0aW9uIHRoYXQgaXNuJiMzOTt0IGV4cG9ydGVkLCBidXQgaXNuJiMzOTt0IHN0YXRpYyBlaXRoZXIsIG1pZ2h0IGJlLiBUaGUgZ29hbCBpcyB0byB0cmFjayBkb3duIGNhbmRpZGF0ZXMuIEdpdmVuIHRoZSBjb250ZXh0LCBpdCYjMzk7cyBwcm9iYWJseSByZWxhdGVkIHRvIHNvbWUgY29yZSBpbnRlcm5hbCBmdW5jdGlvbmFsaXR5IHdpdGhpbiBhIGRyaXZlciBvciBsaWJyYXJ5LgoKTGV0JiMzOTtzIHF1aWNrbHkgcnVsZSBvdXQgYSBmZXcgbGlrZWx5IHN1c3BlY3RzIGJ5IGNoZWNraW5nIHRoZWlyIHByb3BlcnRpZXMuIEZpcnN0IHVwLCBJJiMzOTtsbCBjb25zaWRlciBgaHVnZXRsYl91cGRhdGVfaHdwb2lzb25gLiBBaCwgdGhhdCBvbmUgKmlzKiBzdGF0aWM7IHNvIG5vdCB3aGF0IEkmIzM5O20gbG9va2luZyBmb3IuIFRoYXQgbmFycm93cyB0aGluZ3MgZG93bi4gTmV4dCwgbGV0IG1lIGNoZWNrIGBodWdldGxiX21maWxsX2F0b21pY19wdGVgLiBNYXliZSB0aGF0JiMzOTtzIHRoZSBvbmUgSSBuZWVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNiAxNzo1MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDteaW50IGh1Z2V0bGJfbWZpbGxfYXRvbWljX3B0ZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaD0xNDA9dm1fZmF1bHRfdCBodWdldGxiX2ZhdWx0KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbi0tXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaC0xNDItI2lmZGVmIENPTkZJR19VU0VSRkFVTFRGRFxuaW5jbHVkZS9saW51eC9odWdldGxiLmg6MTQzOmludCBodWdldGxiX21maWxsX2F0b21pY19wdGUocHRlX3QgKmRzdF9wdGUsXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaC0xNDQtXHRcdFx0ICAgICBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKmRzdF92bWEsXG4tLVxubW0vaHVnZXRsYi5jPTYxMzY9c3RhdGljIHN0cnVjdCBmb2xpbyAqYWxsb2NfaHVnZXRsYl9mb2xpb192bWEoc3RydWN0IGhzdGF0ZSAqaCxcbi0tXG5tbS9odWdldGxiLmMtNjE2Mi0gKi9cbm1tL2h1Z2V0bGIuYzo2MTYzOmludCBodWdldGxiX21maWxsX2F0b21pY19wdGUocHRlX3QgKmRzdF9wdGUsXG5tbS9odWdldGxiLmMtNjE2NC1cdFx0XHQgICAgIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqZHN0X3ZtYSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjYgMTc6NTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzUwNTIKCQkJCQkJCW91dHB1dDogMjQKCQkJCQkJCXRob3VnaHRzOiAzMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgc3VtbWFyaXplZCBpbiB0aGUgZmlyc3QgcGVyc29uLCBhc3N1bWluZyB0aGUgY29udGV4dCBpcyBteSBleHBlcnRpc2U6CgoqKkNoZWNraW5nIHRoZSBOb24tU3RhdGljIE5hdHVyZSBhbmQgRGVwZW5kZW5jeSoqCgpSaWdodCwgc28gYGh1Z2V0bGJfbWZpbGxfYXRvbWljX3B0ZWAgaXNuJiMzOTt0IHN0YXRpYy4gVGhhdCBpbW1lZGlhdGVseSByYWlzZXMgYSBmbGFnLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgdmlzaWJpbGl0eSBhbmQgcG90ZW50aWFsIGZvciBleHRlcm5hbCB1c2FnZS4gSXQmIzM5O3MgY3J1Y2lhbCBmb3IgbWUgdG8gZ3Jhc3AgdGhlIHNjb3BlIG9mIHRoaXMgZnVuY3Rpb24uIE5vdywgSSBzaG91bGQgc2hpZnQgbXkgYXR0ZW50aW9uIHRvIGBkZW1vdGVfcG9vbF9odWdlX3BhZ2VgLiBNeSBpbnR1aXRpb24gdGVsbHMgbWUgdGhlcmUgbWlnaHQgYmUgYW4gaW50ZXJhY3Rpb24gb3IgZGVwZW5kZW5jeSBJIG5lZWQgdG8gZXhhbWluZSBiZXR3ZWVuIHRoZXNlIHR3by4gSSBuZWVkIHRvIHNlZSBob3cgYGRlbW90ZV9wb29sX2h1Z2VfcGFnZWAgbWlnaHQgY2FsbCwgb3IgYmUgY2FsbGVkIGJ5LCBgaHVnZXRsYl9tZmlsbF9hdG9taWNfcHRlYCwgb3IgaG93IHRoZWlyIGJlaGF2aW9ycyBtaWdodCBpbnRlcnJlbGF0ZSBpbiB0aGUgbGFyZ2VyIGNvbnRleHQgb2YgaHVnZSBwYWdlIG1hbmFnZW1lbnQuIFRoaXMgaXMgdGhlIG5leHQgbG9naWNhbCBzdGVwIGluIG15IGFuYWx5c2lzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNiAxNzo1MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtebG9uZyBkZW1vdGVfcG9vbF9odWdlX3BhZ2UmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vaHVnZXRsYi5jPTM5MTk9c3RhdGljIGxvbmcgZGVtb3RlX2ZyZWVfaHVnZXRsYl9mb2xpb3Moc3RydWN0IGhzdGF0ZSAqc3JjLCBzdHJ1Y3QgaHN0YXRlICpkc3QsXG4tLVxubW0vaHVnZXRsYi5jLTM5NzctXG5tbS9odWdldGxiLmM6Mzk3ODpsb25nIGRlbW90ZV9wb29sX2h1Z2VfcGFnZShzdHJ1Y3QgaHN0YXRlICpzcmMsIG5vZGVtYXNrX3QgKm5vZGVzX2FsbG93ZWQsXG5tbS9odWdldGxiLmMtMzk3OS1cdFx0XHQgICB1bnNpZ25lZCBsb25nIG5yX3RvX2RlbW90ZSlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjYgMTc6NTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzU0MjgKCQkJCQkJCW91dHB1dDogMjUKCQkJCQkJCXRob3VnaHRzOiAzMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhbmFseXNpcyBvZiB0aGUgc2l0dWF0aW9uOgoKKipJbnZlc3RpZ2F0aW5nIGBkZW1vdGVfcG9vbF9odWdlX3BhZ2VgIGFuZCBgaW5pdF9uZXdfaHVnZXRsYl9mb2xpb2AqKgoKT2theSwgc28gSSBzZWUgdGhhdCBgZGVtb3RlX3Bvb2xfaHVnZV9wYWdlYCBpc24mIzM5O3QgZGVjbGFyZWQgYXMgc3RhdGljLiBUaGlzIG1ha2VzIG1lIGltbWVkaWF0ZWx5IGN1cmlvdXMuIEkmIzM5O20gd29uZGVyaW5nIHdoYXQgb3RoZXIgY29kZSBtaWdodCBiZSBjYWxsaW5nIHRoaXMgZnVuY3Rpb24sIGFuZCB3aGVyZSBpdCYjMzk7cyBiZWluZyB1c2VkIGJleW9uZCBpdHMgaW1tZWRpYXRlIHNjb3BlLiBOb24tc3RhdGljIGZ1bmN0aW9ucyBhbHdheXMgcmFpc2UgYSBmbGFnOyBpdCBtZWFucyB0aGUgcG90ZW50aWFsIGZvciBicm9hZGVyIGltcGFjdCBhbmQgcGVyaGFwcyBtb3JlIGNvbXBsZXggaW50ZXJhY3Rpb25zLiBNeSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byBjaGVjayBgaW5pdF9uZXdfaHVnZXRsYl9mb2xpb2AsIGFzIGl0JiMzOTtzIGxpa2VseSBjb25uZWN0ZWQgdG8gdGhlIHNhbWUgbWVtb3J5IG1hbmFnZW1lbnQgZG9tYWluLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gdGhlc2UgdHdvLCBzcGVjaWZpY2FsbHkgaG93IGh1Z2UgcGFnZXMgYXJlIGFsbG9jYXRlZCwgZGVhbGxvY2F0ZWQsIGFuZCBwb3RlbnRpYWxseSBkZW1vdGVkIHdpdGhpbiB0aGUgc3lzdGVtLiBJcyB0aGVyZSBhbnkgcG90ZW50aWFsIGZvciByYWNlIGNvbmRpdGlvbnMgb3IgdW5leHBlY3RlZCBiZWhhdmlvciBpZiBgZGVtb3RlX3Bvb2xfaHVnZV9wYWdlYCBpcyBjYWxsZWQgZnJvbSBvdXRzaWRlIGl0cyBwcmVzdW1lZCBtb2R1bGU/IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb250cm9sIGZsb3cuIE15IGV4cGVydGlzZSByZXF1aXJlcyBtZSB0byBkaWcgaW50byB0aGUgY2FsbCBzdGFja3MgYW5kIHVuZGVyc3RhbmQgdGhlIGludGVyYWN0aW9uIG9mIHRoZXNlIHR3byBmdW5jdGlvbnMgYXQgYSBkZWVwZXIgbGV2ZWwuIEkgbmVlZCB0byBmb3JtIGEgbWVudGFsIG1hcCBvZiB0aGVpciBpbnZvbHZlbWVudCBpbiB0aGUgcHJvY2VzcyBvZiBodWdlIHBhZ2UgbWFuYWdlbWVudCwgYW5kIGhvdyB0aGF0IGFmZmVjdHMgdGhlIGJpZ2dlciBwaWN0dXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNiAxNzo1MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtedm9pZCBpbml0X25ld19odWdldGxiX2ZvbGlvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2h1Z2V0bGIuYz0xNzU1PXN0YXRpYyB2b2lkIGFjY291bnRfbmV3X2h1Z2V0bGJfZm9saW8oc3RydWN0IGhzdGF0ZSAqaCwgc3RydWN0IGZvbGlvICpmb2xpbylcbi0tXG5tbS9odWdldGxiLmMtMTc2MS1cbm1tL2h1Z2V0bGIuYzoxNzYyOnZvaWQgaW5pdF9uZXdfaHVnZXRsYl9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxubW0vaHVnZXRsYi5jLTE3NjMte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNiAxNzo1MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNTg1MgoJCQkJCQkJb3V0cHV0OiAyMAoJCQkJCQkJdGhvdWdodHM6IDgwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IFBsYW4gZm9yIEhhbmRsaW5nIEhhcmR3YXJlIFBvaXNvbmluZyBpbiBIdWdlVExCIFBhZ2VzKioKCk9rYXksIGhlcmUmIzM5O3MgdGhlIHBsYW4uIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gaG93IGhhcmR3YXJlIHBvaXNvbmluZyBhZmZlY3RzIEh1Z2VUTEIgcGFnZXMuIE15IGluaXRpYWwgc3RlcCBpcyB0byBpbmNvcnBvcmF0ZSBhIGZldyBrZXkgZnVuY3Rpb25zIGludG8gYEZvY3VzU3ltYm9sc2AuIFNwZWNpZmljYWxseSwgSSYjMzk7bSBnb2luZyB0byBhZGQgYGh1Z2V0bGJfcGFnZV9od3BvaXNvbmAsIGBodWdldGxiX3VucmVmX3BhZ2VfaHdwb2lzb25gLCBgdW5wb2lzb25fbWVtb3J5YCwgYW5kIGBmb2xpb19jbGVhcl9odWdldGxiX2h3cG9pc29uYC4gVGhpcyBzZWVtcyBjcnVjaWFsIGZvciB0cmFja2luZyBhbmQgbWFuYWdpbmcgdGhlIGltcGxpY2F0aW9ucyBvZiBtZW1vcnkgZXJyb3JzIHdpdGhpbiB0aGF0IHBhcnRpY3VsYXIgbWVtb3J5IHNwYWNlLgoKTm93LCBJJiMzOTttIGFsc28gZ29pbmcgdG8gYmUgbG9va2luZyBhdCBhIGNvdXBsZSBvZiByZWxhdGVkIGtlcm5lbCBjb25maWd1cmF0aW9ucy4gSSYjMzk7bSBhc3N1bWluZyB0aGF0IGJvdGggYEhVR0VUTEJGU2AgYW5kIGBNRU1PUllfRkFJTFVSRWAgYXJlIHNldCB0byBgeWAgb3IgdGhlIGFwcHJvcHJpYXRlIGVxdWl2YWxlbnQuIEkmIzM5O2xsIG5lZWQgdG8gZG91YmxlIGNoZWNrIHRob3NlLiBJIGNhbiYjMzk7dCBiZSBzdXJlIHdpdGhvdXQgZG9pbmcgc29tZSBkaWdnaW5nLCBidXQgSSBzdXNwZWN0IHRoYXQgYExBUkdFX0ZPTElPYCBpcyBhbHNvIGEgY29uZmlndXJhdGlvbiBvcHRpb24uIEkgbmVlZCB0byBjb25maXJtIHdoZXRoZXIgdGhhdCBpcyB0aGUgY2FzZSBhbmQsIGlmIHNvLCByZXZpZXcgd2hhdCBpdCBkb2VzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNiAxNzo1MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDteY29uZmlnIExBUkdFX0ZPTElPJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL0tjb25maWc9ODQzPWNvbmZpZyBNTV9JRFxuLS1cbm1tL0tjb25maWctODQ1LVxubW0vS2NvbmZpZzo4NDY6Y29uZmlnIExBUkdFX0ZPTElPXG5tbS9LY29uZmlnLTg0Ny1cdGRlZl9ib29sIG5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjYgMTc6NTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzYyNDYKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiA5OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgSHVnZSBQYWdlIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gYExBUkdFX0ZPTElPYCBpcyBkZWZpbmVkIGFzIGEgY29uZmlnIG9wdGlvbiwgcmlnaHQ/IEFuZCBpdCYjMzk7cyBzZXQgYXMgYSBib29sZWFuLCBkZXBlbmRlbnQgb24gYFRSQU5TUEFSRU5UX0hVR0VQQUdFYCBhbmQgYEhVR0VUTEJfUEFHRWAuIFJpZ2h0LCB0aGF0IG1ha2VzIHNlbnNlLiBMZXQmIzM5O3Mgc2VlLi4uIGBIVUdFVExCX1BBR0VgIGlzIGFsc28gZGVmaW5lZCBhcyBhIGJvb2xlYW4sIHNwZWNpZmljYWxseSBsaW5rZWQgdG8gYEhVR0VUTEJGU2AuIEFoYSEgU28sIGlmIEkgZW5hYmxlIGBIVUdFVExCRlNgIGFuZCBgTUVNT1JZX0ZBSUxVUkVgLCB0aGF0IHNob3VsZCBlZmZlY3RpdmVseSBlbmFibGUgYExBUkdFX0ZPTElPYCB0aHJvdWdoIHRoZSBkZXBlbmRlbmN5IGNoYWluLiBTZWVtcyBzdHJhaWdodGZvcndhcmQgZW5vdWdoLgoKSnVzdCB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4sIEkmIzM5O2xsIHF1aWNrbHkgZG91YmxlLWNoZWNrIHRoZSBgSFVHRVRMQkZTYCBkZWZpbml0aW9uIGFuZCByZWxhdGVkIGNvbmZpZ3VyYXRpb25zIHdpdGhpbiB0aGUgZmlsZSBzeXN0ZW0gS2NvbmZpZyAoYGZzL0tjb25maWdgKS4gSSBhbHdheXMgZmluZCBpdCBiZXN0IHRvIHZlcmlmeSB0aGVzZSBkZXBlbmRlbmNpZXMgdG8gYmUgc3VyZSBJJiMzOTttIG5vdCBtaXNzaW5nIGFueSBudWFuY2VkIGltcGxpY2F0aW9ucywgZXNwZWNpYWxseSB3aGVuIGRlYWxpbmcgd2l0aCBtZW1vcnkgbWFuYWdlbWVudC4gSSB3YW50IHRvIGVuc3VyZSBteSBtZW50YWwgbW9kZWwgaXMgYWNjdXJhdGUgYmVmb3JlIHByb2NlZWRpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI2IDE3OjUzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7XmNvbmZpZyBIVUdFVExCRlMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNiAxNzo1MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNjU4MwoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDEzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipOYXZpZ2F0aW5nIHRoZSBLZXJuZWwgQ29uZmlndXJhdGlvbiBMYW5kc2NhcGUqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHNvbWV0aGluZyBpbiB0aGUga2VybmVsIGNvbmZpZy4uLiBhbmQgaXQmIzM5O3MgaW1tZWRpYXRlbHkganVtcGluZyBvdXQgYXQgbWU6IGBtZW51Y29uZmlnIEhVR0VUTEJGU2AuIFJpZ2h0LCBnb3QgaXQuIFRoYXQgbWVhbnMgSSYjMzk7bSBwcm9iYWJseSBkZWFsaW5nIHdpdGggdGhlIEh1Z2VUTEIgRmlsZXN5c3RlbSwgd2hpY2ggaXMgdXN1YWxseSBhIHByZXR0eSBnb29kIGluZGljYXRvciBvZiBwZXJmb3JtYW5jZSBvcHRpbWl6YXRpb24gc2NlbmFyaW9zLCBsaWtlbHkgcmVsYXRlZCB0byBOVU1BIGNvbmZpZ3VyYXRpb25zIG9yIGFwcGxpY2F0aW9ucyBkZW1hbmRpbmcgc2lnbmlmaWNhbnQgbWVtb3J5IHJlc291cmNlcyB3aXRoIGxvdyBsYXRlbmN5IHJlcXVpcmVtZW50cy4gVGhpcyBwcm9iYWJseSBmYWxscyB1bmRlciBvbmUgb2YgdGhlIHNldmVyYWwgdXNlIGNhc2VzIEkgYW0gZmFtaWxpYXIgd2l0aDsgd2hldGhlciBhIHNwZWNpZmljIGhhcmR3YXJlIHBsYXRmb3JtIHRoYXQgSSBhbSBpbnRpbWF0ZWx5IGF3YXJlIG9mLCBhbiBhcHBsaWNhdGlvbiB0aGF0IGRlcGVuZHMgb24gdGhpcyBzZXR0aW5nLCBvciBhIHN5c3RlbSBJIHdhcyBpbnZvbHZlZCBpbiB0aGF0IHJlcXVpcmVkIHN1Y2ggYXR0ZW50aW9uIHRvIG1lbW9yeSBsYXlvdXQuIExldCYjMzk7cyBzZWUgd2hhdCB0aGUgY29udGV4dCBpcy4uLiBUaGlzIGlzIGNlcnRhaW5seSBhIHN0YXJ0aW5nIHBvaW50IGZvciBkaXZpbmcgaW50byB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgY29uZmlndXJhdGlvbi4gTm93IEkgbmVlZCB0byBzZWUgd2hhdCYjMzk7cyBlbmFibGVkLCBkaXNhYmxlZCwgb3Igc2V0LiBJdCYjMzk7cyB0aW1lIHRvIGRpZyBkZWVwZXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI2IDE3OjUzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O15tZW51Y29uZmlnIEhVR0VUTEJGUyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9LY29uZmlnPTI0Nz1jb25maWcgQVJDSF9TVVBQT1JUU19IVUdFVExCRlNcbi0tXG5mcy9LY29uZmlnLTI0OS1cbmZzL0tjb25maWc6MjUwOm1lbnVjb25maWcgSFVHRVRMQkZTXG5mcy9LY29uZmlnLTI1MS1cdGJvb2wgXCYjMzQ7SHVnZVRMQiBmaWxlIHN5c3RlbSBzdXBwb3J0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI2IDE3OjU0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM2OTA4CgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogMjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKktlcm5lbCBDb25maWd1cmF0aW9uIENvbnRleHQqKgoKUmlnaHQsIHNvIHdlJiMzOTtyZSBsb29raW5nIGF0IGNvbmZpZ3VyYXRpb25zLiBUaGUgaW5pdGlhbCBwcm9tcHQgY2xlYXJseSBwb2ludHMgdG8gYEhVR0VUTEJGU2AgYXMgdGhlIHJlbGV2YW50IGNvbmZpZyBvcHRpb24gdG8gY29uc2lkZXIuIFNlZW1zIHN0cmFpZ2h0Zm9yd2FyZCBlbm91Z2guIFRoZSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byBjcm9zcy1yZWZlcmVuY2UgdGhhdCB3aXRoIG90aGVyLCByZWxhdGVkIGNvbmZpZ3VyYXRpb25zLCBhbmQgbXkgaW50ZXJuYWwgcHJvY2VzcyBicmluZ3MgdXAgdGhlIGBNRU1PUllfRkFJTFVSRWAgY29uZmlndXJhdGlvbiBpbiBgbW0vS2NvbmZpZ2AuIFRoaXMgbGV0cyBtZSBzdGFydCB0byB1bmRlcnN0YW5kIHRoZSBjb25uZWN0aW9ucyBiZXR3ZWVuIHRoZXNlIGNvbmZpZ3VyYXRpb25zLCBhbmQgd2hhdCBvdGhlciBzZXR0aW5ncyBtYXkgYmUgYWZmZWN0ZWQgb3IgcmVsYXRlZCB0byBgSFVHRVRMQkZTYC4gSSB3YW50IHRvIGZ1bGx5IHVuZGVyc3RhbmQgdGhlIGRlcGVuZGVuY3kgZ3JhcGgsIHBvc3NpYmxlIGludGVyYWN0aW9ucywgYW5kIHBvdGVudGlhbCBpbXBsaWNhdGlvbnMgZm9yIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBmYWlsdXJlIGhhbmRsaW5nLiBJJiMzOTttIGdvaW5nIHRvIGRpZyBpbnRvIGhvdyB0aGUgYE1FTU9SWV9GQUlMVVJFYCBzZXR0aW5nIG1pZ2h0IGluZmx1ZW5jZSBvciBpbnRlcmFjdCB3aXRoIHRoZSBgSFVHRVRMQkZTYCBjb25maWd1cmF0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNiAxNzo1NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDteY29uZmlnIE1FTU9SWV9GQUlMVVJFJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL0tjb25maWc9Nzc0PWNvbmZpZyBBUkNIX1NVUFBPUlRTX01FTU9SWV9GQUlMVVJFXG4tLVxubW0vS2NvbmZpZy03NzYtXG5tbS9LY29uZmlnOjc3Nzpjb25maWcgTUVNT1JZX0ZBSUxVUkVcbm1tL0tjb25maWctNzc4LVx0ZGVwZW5kcyBvbiBNTVVcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjYgMTc6NTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzcyMDQKCQkJCQkJCW91dHB1dDogMjM2CgkJCQkJCQl0aG91Z2h0czogMzAyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEZ1enppbmcgQ29uZmlndXJhdGlvbiBmb3IgSHVnZXRsYiBGb2xpb3MgYW5kIE1lbW9yeS1GYWlsdXJlIEhhbmRsaW5nKioKCk9rYXksIHNvIEkmIzM5O3ZlIGNvbmZpcm1lZCB0aGF0IGBNRU1PUllfRkFJTFVSRWAgaXMgZGVmaW5pdGVseSB0aGUgcmlnaHQgY29uZmlnIHRvIHN0YXJ0IHdpdGguIExldCYjMzk7cyBzZWUuLi4gbG9va2luZyBhdCB0aGUgY29uZmlndXJhdGlvbnMsIGl0IGxvb2tzIGxpa2UgYFRSQU5TUEFSRU5UX0hVR0VQQUdFYCBpcyBhbHNvIG1vZGlmaWVkLCBzcGVjaWZpY2FsbHkgdG8gc2VsZWN0IGBMQVJHRV9GT0xJT2AuIE1ha2VzIHNlbnNlOyBJIHNob3VsZCBpbmNsdWRlIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAgYXMgd2VsbC4KCk5vdywgbGV0JiMzOTtzIHB1bGwgYWxsIG9mIHRoaXMgdG9nZXRoZXIgaW50byBhIHVzZWZ1bCBzdW1tYXJ5OgoKSSYjMzk7bSBzZXR0aW5nIGBXb3J0aEZ1enppbmdgIHRvIGB0cnVlYCwgb2YgY291cnNlLiBNeSBgRm9jdXNTeW1ib2xzYCBhcmUgZ29pbmcgdG8gdGFyZ2V0IHRoZXNlIGNydWNpYWwgZnVuY3Rpb25zOiBgaHVnZXRsYl9wYWdlX2h3cG9pc29uYCwgYGh1Z2V0bGJfdW5yZWZfcGFnZV9od3BvaXNvbmAsIGB1bnBvaXNvbl9tZW1vcnlgLCBhbmQgYGZvbGlvX2NsZWFyX2h1Z2V0bGJfaHdwb2lzb25gLgoKTXkgYEVuYWJsZUNvbmZpZ3NgIGFyZTogYEhVR0VUTEJGU2AsIGBNRU1PUllfRkFJTFVSRWAsIGFuZCBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgLiBJIGNob3NlIHRob3NlIGJlY2F1c2UgdGhpcyBwYXRjaCBzZXJpZXMgaW50cm9kdWNlcyB0aGUgYExBUkdFX0ZPTElPYCBjb25maWcgYW5kIGZ1bmRhbWVudGFsbHkgY2hhbmdlcyBob3cgaGFyZHdhcmUgcG9pc29uaW5nIGlzIG1hbmFnZWQgZm9yIGh1Z2V0bGIgZm9saW9zLiBJdCBzZWVtcyB0aGV5JiMzOTtyZSByZXBsYWNpbmcgdGhlIG1vcmUgc3BlY2lmaWMgYGFkanVzdF9yYW5nZV9od3BvaXNvbmAgZnVuY3Rpb24gaW4gYGZzL2h1Z2V0bGJmcy9pbm9kZS5jYCB3aXRoIHRoZSBnZW5lcmljIHZlcnNpb24gaW4gYG1tL2ZpbGVtYXAuY2AuIEFsc28sIGBodWdldGxiZnNfcmVhZF9pdGVyYCBoYXMgYmVlbiB1cGRhdGVkIHRvIGBnZW5lcmljX2ZpbGVfcmVhZF9pdGVyYC4gSSBhbHNvIHNlZSBjaGFuZ2VzIHRvIGBmb2xpb190ZXN0X2h3cG9pc29uYCB3aGljaCBpcyBub3cgYGZvbGlvX2hhc19od3BvaXNvbmVkX3BhZ2VgLiBUaGVzZSBhcmUgYWxsIGNvcmUga2VybmVsIGxvZ2ljIGNoYW5nZXMgKG1tLCBodWdldGxiZnMsIG1lbW9yeS1mYWlsdXJlKSB3aGljaCBtZWFucyB0aGV5JiMzOTtyZSBjcml0aWNhbCBhcmVhcyBmb3IgZnV6emluZyBhbmQgYnVnIGRldGVjdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41MC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjYgMTc6NTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0hVR0VUTEJGUyYjMzQ7LAogICAgJiMzNDtNRU1PUllfRkFJTFVSRSYjMzQ7LAogICAgJiMzNDtUUkFOU1BBUkVOVF9IVUdFUEFHRSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2h1Z2V0bGJfcGFnZV9od3BvaXNvbiYjMzQ7LAogICAgJiMzNDtodWdldGxiX3VucmVmX3BhZ2VfaHdwb2lzb24mIzM0OywKICAgICYjMzQ7dW5wb2lzb25fbWVtb3J5JiMzNDssCiAgICAmIzM0O2ZvbGlvX2NsZWFyX2h1Z2V0bGJfaHdwb2lzb24mIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggc2VyaWVzIGludHJvZHVjZXMgYExBUkdFX0ZPTElPYCBjb25maWcgYW5kIHJlZmFjdG9ycyBob3cgaHdwb2lzb24gaXMgdHJhY2tlZCBmb3IgaHVnZXRsYiBmb2xpb3MuIEl0IHJlcGxhY2VzIGBhZGp1c3RfcmFuZ2VfaHdwb2lzb25gIGluIGBmcy9odWdldGxiZnMvaW5vZGUuY2Agd2l0aCBhIGdlbmVyaWMgb25lIGluIGBtbS9maWxlbWFwLmNgIGFuZCBjaGFuZ2VzIGBodWdldGxiZnNfcmVhZF9pdGVyYCB0byBgZ2VuZXJpY19maWxlX3JlYWRfaXRlcmAuIEl0IGFsc28gbW9kaWZpZXMgYGZvbGlvX3Rlc3RfaHdwb2lzb25gIHRvIGBmb2xpb19oYXNfaHdwb2lzb25lZF9wYWdlYCBpbiB2YXJpb3VzIHBsYWNlcy4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byBjb3JlIGtlcm5lbCBsb2dpYyAobW0sIGh1Z2V0bGJmcywgbWVtb3J5LWZhaWx1cmUpIGFuZCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtIVUdFVExCRlMmIzM0OywKICAgICYjMzQ7TUVNT1JZX0ZBSUxVUkUmIzM0OywKICAgICYjMzQ7VFJBTlNQQVJFTlRfSFVHRVBBR0UmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtodWdldGxiX3BhZ2VfaHdwb2lzb24mIzM0OywKICAgICYjMzQ7aHVnZXRsYl91bnJlZl9wYWdlX2h3cG9pc29uJiMzNDssCiAgICAmIzM0O3VucG9pc29uX21lbW9yeSYjMzQ7LAogICAgJiMzNDtmb2xpb19jbGVhcl9odWdldGxiX2h3cG9pc29uJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHNlcmllcyBpbnRyb2R1Y2VzIGBMQVJHRV9GT0xJT2AgY29uZmlnIGFuZCByZWZhY3RvcnMgaG93IGh3cG9pc29uIGlzIHRyYWNrZWQgZm9yIGh1Z2V0bGIgZm9saW9zLiBJdCByZXBsYWNlcyBgYWRqdXN0X3JhbmdlX2h3cG9pc29uYCBpbiBgZnMvaHVnZXRsYmZzL2lub2RlLmNgIHdpdGggYSBnZW5lcmljIG9uZSBpbiBgbW0vZmlsZW1hcC5jYCBhbmQgY2hhbmdlcyBgaHVnZXRsYmZzX3JlYWRfaXRlcmAgdG8gYGdlbmVyaWNfZmlsZV9yZWFkX2l0ZXJgLiBJdCBhbHNvIG1vZGlmaWVzIGBmb2xpb190ZXN0X2h3cG9pc29uYCB0byBgZm9saW9faGFzX2h3cG9pc29uZWRfcGFnZWAgaW4gdmFyaW91cyBwbGFjZXMuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gY29yZSBrZXJuZWwgbG9naWMgKG1tLCBodWdldGxiZnMsIG1lbW9yeS1mYWlsdXJlKSBhbmQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDE3OjUxOjM2LjY3NTE4MzM4MVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1NzI2MzYwNzAzOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJIVUdFVExCRlNcIixcbiAgICBcIk1FTU9SWV9GQUlMVVJFXCIsXG4gICAgXCJUUkFOU1BBUkVOVF9IVUdFUEFHRVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImh1Z2V0bGJfcGFnZV9od3BvaXNvblwiLFxuICAgIFwiaHVnZXRsYl91bnJlZl9wYWdlX2h3cG9pc29uXCIsXG4gICAgXCJ1bnBvaXNvbl9tZW1vcnlcIixcbiAgICBcImZvbGlvX2NsZWFyX2h1Z2V0bGJfaHdwb2lzb25cIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBzZXJpZXMgaW50cm9kdWNlcyBgTEFSR0VfRk9MSU9gIGNvbmZpZyBhbmQgcmVmYWN0b3JzIGhvdyBod3BvaXNvbiBpcyB0cmFja2VkIGZvciBodWdldGxiIGZvbGlvcy4gSXQgcmVwbGFjZXMgYGFkanVzdF9yYW5nZV9od3BvaXNvbmAgaW4gYGZzL2h1Z2V0bGJmcy9pbm9kZS5jYCB3aXRoIGEgZ2VuZXJpYyBvbmUgaW4gYG1tL2ZpbGVtYXAuY2AgYW5kIGNoYW5nZXMgYGh1Z2V0bGJmc19yZWFkX2l0ZXJgIHRvIGBnZW5lcmljX2ZpbGVfcmVhZF9pdGVyYC4gSXQgYWxzbyBtb2RpZmllcyBgZm9saW9fdGVzdF9od3BvaXNvbmAgdG8gYGZvbGlvX2hhc19od3BvaXNvbmVkX3BhZ2VgIGluIHZhcmlvdXMgcGxhY2VzLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIGNvcmUga2VybmVsIGxvZ2ljIChtbSwgaHVnZXRsYmZzLCBtZW1vcnktZmFpbHVyZSkgYW5kIHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDE3OjUxOjM2LjY3NTE4ODczWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NDYyNDk5ODUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA5Yjg1NmViZDQ3YWM1MDEwN2M5OTYyMzY5MjhkYWM1YjYzYjNlOTZiXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBTdW4gSnVsIDI2IDE3OjUxOjM1IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2ZzL0tjb25maWcgYi9mcy9LY29uZmlnXFxuaW5kZXggY2Y2YWU2NDc3NmU2MmMuLmVkZGFjNGVkMjE0YjEyIDEwMDY0NFxcbi0tLSBhL2ZzL0tjb25maWdcXG4rKysgYi9mcy9LY29uZmlnXFxuQEAgLTI3Miw3ICsyNzIsNyBAQCBlbmRpZiAjIEhVR0VUTEJGU1xcbiBcXG4gY29uZmlnIEhVR0VUTEJfUEFHRVxcbiBcXHRkZWZfYm9vbCBIVUdFVExCRlNcXG4tXFx0c2VsZWN0IFhBUlJBWV9NVUxUSVxcbitcXHRzZWxlY3QgTEFSR0VfRk9MSU9cXG4gXFxuIGNvbmZpZyBIVUdFVExCX1BBR0VfT1BUSU1JWkVfVk1FTU1BUFxcbiBcXHRkZWZfYm9vbCBIVUdFVExCX1BBR0VcXG5kaWZmIC0tZ2l0IGEvZnMvaHVnZXRsYmZzL2lub2RlLmMgYi9mcy9odWdldGxiZnMvaW5vZGUuY1xcbmluZGV4IDIxNmUxYTBkZDBiMjM3Li5jZWY3ZTYxYjgyN2Q3MSAxMDA2NDRcXG4tLS0gYS9mcy9odWdldGxiZnMvaW5vZGUuY1xcbisrKyBiL2ZzL2h1Z2V0bGJmcy9pbm9kZS5jXFxuQEAgLTE4NywxMTMgKzE4Nyw2IEBAIGh1Z2V0bGJfZ2V0X3VubWFwcGVkX2FyZWEoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGxvbmcgYWRkcixcXG4gXFx0cmV0dXJuIG1tX2dldF91bm1hcHBlZF9hcmVhX3ZtZmxhZ3MoZmlsZSwgYWRkcjAsIGxlbiwgcGdvZmYsIGZsYWdzLCAwKTtcXG4gfVxcbiBcXG4tLypcXG4tICogU29tZW9uZSB3YW50cyB0byByZWFkIEBieXRlcyBmcm9tIGEgSFdQT0lTT04gaHVnZXRsYiBAZm9saW8gZnJvbSBAb2Zmc2V0Llxcbi0gKiBSZXR1cm5zIHRoZSBtYXhpbXVtIG51bWJlciBvZiBieXRlcyBvbmUgY2FuIHJlYWQgd2l0aG91dCB0b3VjaGluZyB0aGUgMXN0IHJhd1xcbi0gKiBIV1BPSVNPTiBwYWdlLlxcbi0gKi9cXG4tc3RhdGljIHNpemVfdCBhZGp1c3RfcmFuZ2VfaHdwb2lzb24oc3RydWN0IGZvbGlvICpmb2xpbywgc2l6ZV90IG9mZnNldCxcXG4tXFx0XFx0c2l6ZV90IGJ5dGVzKVxcbi17XFxuLVxcdHN0cnVjdCBwYWdlICpwYWdlID0gZm9saW9fcGFnZShmb2xpbywgb2Zmc2V0IC8gUEFHRV9TSVpFKTtcXG4tXFx0c2l6ZV90IHNhZmVfYnl0ZXM7XFxuLVxcbi1cXHRpZiAoaXNfcmF3X2h3cG9pc29uX3BhZ2VfaW5faHVnZXBhZ2UocGFnZSkpXFxuLVxcdFxcdHJldHVybiAwO1xcbi1cXHQvKiBTYWZlIHRvIHJlYWQgdGhlIHJlbWFpbmluZyBieXRlcyBpbiB0aGlzIHBhZ2UuICovXFxuLVxcdHNhZmVfYnl0ZXMgPSBQQUdFX1NJWkUgLSAob2Zmc2V0ICUgUEFHRV9TSVpFKTtcXG4tXFx0cGFnZSsrO1xcbi1cXG4tXFx0LyogQ2hlY2sgZWFjaCByZW1haW5pbmcgcGFnZSBhcyBsb25nIGFzIHdlIGFyZSBub3QgZG9uZSB5ZXQuICovXFxuLVxcdGZvciAoOyBzYWZlX2J5dGVzIFxcdTAwM2MgYnl0ZXM7IHNhZmVfYnl0ZXMgKz0gUEFHRV9TSVpFLCBwYWdlKyspXFxuLVxcdFxcdGlmIChpc19yYXdfaHdwb2lzb25fcGFnZV9pbl9odWdlcGFnZShwYWdlKSlcXG4tXFx0XFx0XFx0YnJlYWs7XFxuLVxcbi1cXHRyZXR1cm4gbWluKHNhZmVfYnl0ZXMsIGJ5dGVzKTtcXG4tfVxcbi1cXG4tLypcXG4tICogU3VwcG9ydCBmb3IgcmVhZCgpIC0gRmluZCB0aGUgcGFnZSBhdHRhY2hlZCB0byBmX21hcHBpbmcgYW5kIGNvcHkgb3V0IHRoZVxcbi0gKiBkYXRhLiBUaGlzIHByb3ZpZGVzIGZ1bmN0aW9uYWxpdHkgc2ltaWxhciB0byBmaWxlbWFwX3JlYWQoKS5cXG4tICovXFxuLXN0YXRpYyBzc2l6ZV90IGh1Z2V0bGJmc19yZWFkX2l0ZXIoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKnRvKVxcbi17XFxuLVxcdHN0cnVjdCBmaWxlICpmaWxlID0gaW9jYi1cXHUwMDNla2lfZmlscDtcXG4tXFx0c3RydWN0IGhzdGF0ZSAqaCA9IGhzdGF0ZV9maWxlKGZpbGUpO1xcbi1cXHRzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyA9IGZpbGUtXFx1MDAzZWZfbWFwcGluZztcXG4tXFx0c3RydWN0IGlub2RlICppbm9kZSA9IG1hcHBpbmctXFx1MDAzZWhvc3Q7XFxuLVxcdHVuc2lnbmVkIGxvbmcgaW5kZXggPSBpb2NiLVxcdTAwM2VraV9wb3MgXFx1MDAzZVxcdTAwM2UgaHVnZV9wYWdlX3NoaWZ0KGgpO1xcbi1cXHR1bnNpZ25lZCBsb25nIG9mZnNldCA9IGlvY2ItXFx1MDAzZWtpX3BvcyBcXHUwMDI2IH5odWdlX3BhZ2VfbWFzayhoKTtcXG4tXFx0dW5zaWduZWQgbG9uZyBlbmRfaW5kZXg7XFxuLVxcdGxvZmZfdCBpc2l6ZTtcXG4tXFx0c3NpemVfdCByZXR2YWwgPSAwO1xcbi1cXG4tXFx0d2hpbGUgKGlvdl9pdGVyX2NvdW50KHRvKSkge1xcbi1cXHRcXHRzdHJ1Y3QgZm9saW8gKmZvbGlvO1xcbi1cXHRcXHRzaXplX3QgbnIsIGNvcGllZCwgd2FudDtcXG4tXFxuLVxcdFxcdC8qIG5yIGlzIHRoZSBtYXhpbXVtIG51bWJlciBvZiBieXRlcyB0byBjb3B5IGZyb20gdGhpcyBwYWdlICovXFxuLVxcdFxcdG5yID0gaHVnZV9wYWdlX3NpemUoaCk7XFxuLVxcdFxcdGlzaXplID0gaV9zaXplX3JlYWQoaW5vZGUpO1xcbi1cXHRcXHRpZiAoIWlzaXplKVxcbi1cXHRcXHRcXHRicmVhaztcXG4tXFx0XFx0ZW5kX2luZGV4ID0gKGlzaXplIC0gMSkgXFx1MDAzZVxcdTAwM2UgaHVnZV9wYWdlX3NoaWZ0KGgpO1xcbi1cXHRcXHRpZiAoaW5kZXggXFx1MDAzZSBlbmRfaW5kZXgpXFxuLVxcdFxcdFxcdGJyZWFrO1xcbi1cXHRcXHRpZiAoaW5kZXggPT0gZW5kX2luZGV4KSB7XFxuLVxcdFxcdFxcdG5yID0gKChpc2l6ZSAtIDEpIFxcdTAwMjYgfmh1Z2VfcGFnZV9tYXNrKGgpKSArIDE7XFxuLVxcdFxcdFxcdGlmIChuciBcXHUwMDNjPSBvZmZzZXQpXFxuLVxcdFxcdFxcdFxcdGJyZWFrO1xcbi1cXHRcXHR9XFxuLVxcdFxcdG5yID0gbnIgLSBvZmZzZXQ7XFxuLVxcbi1cXHRcXHQvKiBGaW5kIHRoZSBmb2xpbyAqL1xcbi1cXHRcXHRmb2xpbyA9IGZpbGVtYXBfbG9ja19odWdldGxiX2ZvbGlvKGgsIG1hcHBpbmcsIGluZGV4KTtcXG4tXFx0XFx0aWYgKElTX0VSUihmb2xpbykpIHtcXG4tXFx0XFx0XFx0LypcXG4tXFx0XFx0XFx0ICogV2UgaGF2ZSBhIEhPTEUsIHplcm8gb3V0IHRoZSB1c2VyLWJ1ZmZlciBmb3IgdGhlXFxuLVxcdFxcdFxcdCAqIGxlbmd0aCBvZiB0aGUgaG9sZSBvciByZXF1ZXN0Llxcbi1cXHRcXHRcXHQgKi9cXG4tXFx0XFx0XFx0Y29waWVkID0gaW92X2l0ZXJfemVybyhuciwgdG8pO1xcbi1cXHRcXHR9IGVsc2Uge1xcbi1cXHRcXHRcXHRmb2xpb191bmxvY2soZm9saW8pO1xcbi1cXG4tXFx0XFx0XFx0aWYgKCFmb2xpb190ZXN0X2h3cG9pc29uKGZvbGlvKSlcXG4tXFx0XFx0XFx0XFx0d2FudCA9IG5yO1xcbi1cXHRcXHRcXHRlbHNlIHtcXG4tXFx0XFx0XFx0XFx0LypcXG4tXFx0XFx0XFx0XFx0ICogQWRqdXN0IGhvdyBtYW55IGJ5dGVzIHNhZmUgdG8gcmVhZCB3aXRob3V0XFxuLVxcdFxcdFxcdFxcdCAqIHRvdWNoaW5nIHRoZSAxc3QgcmF3IEhXUE9JU09OIHBhZ2UgYWZ0ZXJcXG4tXFx0XFx0XFx0XFx0ICogb2Zmc2V0Llxcbi1cXHRcXHRcXHRcXHQgKi9cXG4tXFx0XFx0XFx0XFx0d2FudCA9IGFkanVzdF9yYW5nZV9od3BvaXNvbihmb2xpbywgb2Zmc2V0LCBucik7XFxuLVxcdFxcdFxcdFxcdGlmICh3YW50ID09IDApIHtcXG4tXFx0XFx0XFx0XFx0XFx0Zm9saW9fcHV0KGZvbGlvKTtcXG4tXFx0XFx0XFx0XFx0XFx0cmV0dmFsID0gLUVJTztcXG4tXFx0XFx0XFx0XFx0XFx0YnJlYWs7XFxuLVxcdFxcdFxcdFxcdH1cXG4tXFx0XFx0XFx0fVxcbi1cXG4tXFx0XFx0XFx0LypcXG4tXFx0XFx0XFx0ICogV2UgaGF2ZSB0aGUgZm9saW8sIGNvcHkgaXQgdG8gdXNlciBzcGFjZSBidWZmZXIuXFxuLVxcdFxcdFxcdCAqL1xcbi1cXHRcXHRcXHRjb3BpZWQgPSBjb3B5X2ZvbGlvX3RvX2l0ZXIoZm9saW8sIG9mZnNldCwgd2FudCwgdG8pO1xcbi1cXHRcXHRcXHRmb2xpb19wdXQoZm9saW8pO1xcbi1cXHRcXHR9XFxuLVxcdFxcdG9mZnNldCArPSBjb3BpZWQ7XFxuLVxcdFxcdHJldHZhbCArPSBjb3BpZWQ7XFxuLVxcdFxcdGlmIChjb3BpZWQgIT0gbnIgXFx1MDAyNlxcdTAwMjYgaW92X2l0ZXJfY291bnQodG8pKSB7XFxuLVxcdFxcdFxcdGlmICghcmV0dmFsKVxcbi1cXHRcXHRcXHRcXHRyZXR2YWwgPSAtRUZBVUxUO1xcbi1cXHRcXHRcXHRicmVhaztcXG4tXFx0XFx0fVxcbi1cXHRcXHRpbmRleCArPSBvZmZzZXQgXFx1MDAzZVxcdTAwM2UgaHVnZV9wYWdlX3NoaWZ0KGgpO1xcbi1cXHRcXHRvZmZzZXQgXFx1MDAyNj0gfmh1Z2VfcGFnZV9tYXNrKGgpO1xcbi1cXHR9XFxuLVxcdGlvY2ItXFx1MDAzZWtpX3BvcyA9ICgobG9mZl90KWluZGV4IFxcdTAwM2NcXHUwMDNjIGh1Z2VfcGFnZV9zaGlmdChoKSkgKyBvZmZzZXQ7XFxuLVxcdHJldHVybiByZXR2YWw7XFxuLX1cXG4tXFxuIHN0YXRpYyBpbnQgaHVnZXRsYmZzX3dyaXRlX2JlZ2luKGNvbnN0IHN0cnVjdCBraW9jYiAqaW9jYixcXG4gXFx0XFx0XFx0c3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXFxuIFxcdFxcdFxcdGxvZmZfdCBwb3MsIHVuc2lnbmVkIGxlbixcXG5AQCAtODgzLDYgKzc3NiwxNyBAQCBzdGF0aWMgc3RydWN0IGlub2RlICpodWdldGxiZnNfZ2V0X3Jvb3Qoc3RydWN0IHN1cGVyX2Jsb2NrICpzYixcXG4gXFx0cmV0dXJuIGlub2RlO1xcbiB9XFxuIFxcbitzdGF0aWMgdm9pZCBodWdldGxiZnNfaW5pdF9yZWd1bGFyX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpXFxuK3tcXG4rXFx0c3RydWN0IGhzdGF0ZSAqaHN0YXRlID0gaHN0YXRlX2lub2RlKGlub2RlKTtcXG4rXFx0dW5zaWduZWQgaW50IG9yZGVyID0gaHVnZV9wYWdlX29yZGVyKGhzdGF0ZSk7XFxuK1xcbitcXHRpbm9kZS1cXHUwMDNlaV9vcCA9IFxcdTAwMjZodWdldGxiZnNfaW5vZGVfb3BlcmF0aW9ucztcXG4rXFx0aW5vZGUtXFx1MDAzZWlfZm9wID0gXFx1MDAyNmh1Z2V0bGJmc19maWxlX29wZXJhdGlvbnM7XFxuK1xcdG1hcHBpbmdfc2V0X2ZvbGlvX29yZGVyX3JhbmdlKGlub2RlLVxcdTAwM2VpX21hcHBpbmcsIG9yZGVyLCBvcmRlcik7XFxuK1xcdG1hcHBpbmdfc2V0X2F1dGhvcml0YXRpdmUoaW5vZGUtXFx1MDAzZWlfbWFwcGluZyk7XFxuK31cXG4rXFxuIC8qXFxuICAqIEh1Z2V0bGJmcyBpcyBub3QgcmVjbGFpbWFibGU7IHRoZXJlZm9yZSBpdHMgaV9tbWFwX3J3c2VtIHdpbGwgbmV2ZXJcXG4gICogYmUgdGFrZW4gZnJvbSByZWNsYWltIC0tIHVubGlrZSByZWd1bGFyIGZpbGVzeXN0ZW1zLiBUaGlzIG5lZWRzIGFuXFxuQEAgLTkyNiw4ICs4MzAsNyBAQCBzdGF0aWMgc3RydWN0IGlub2RlICpodWdldGxiZnNfZ2V0X2lub2RlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsXFxuIFxcdFxcdFxcdGluaXRfc3BlY2lhbF9pbm9kZShpbm9kZSwgbW9kZSwgZGV2KTtcXG4gXFx0XFx0XFx0YnJlYWs7XFxuIFxcdFxcdGNhc2UgU19JRlJFRzpcXG4tXFx0XFx0XFx0aW5vZGUtXFx1MDAzZWlfb3AgPSBcXHUwMDI2aHVnZXRsYmZzX2lub2RlX29wZXJhdGlvbnM7XFxuLVxcdFxcdFxcdGlub2RlLVxcdTAwM2VpX2ZvcCA9IFxcdTAwMjZodWdldGxiZnNfZmlsZV9vcGVyYXRpb25zO1xcbitcXHRcXHRcXHRodWdldGxiZnNfaW5pdF9yZWd1bGFyX2lub2RlKGlub2RlKTtcXG4gXFx0XFx0XFx0YnJlYWs7XFxuIFxcdFxcdGNhc2UgU19JRkRJUjpcXG4gXFx0XFx0XFx0aW5vZGUtXFx1MDAzZWlfb3AgPSBcXHUwMDI2aHVnZXRsYmZzX2Rpcl9pbm9kZV9vcGVyYXRpb25zO1xcbkBAIC0xMjA2LDcgKzExMDksNyBAQCBzdGF0aWMgdm9pZCBpbml0X29uY2Uodm9pZCAqZm9vKVxcbiB9XFxuIFxcbiBzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBodWdldGxiZnNfZmlsZV9vcGVyYXRpb25zID0ge1xcbi1cXHQucmVhZF9pdGVyXFx0XFx0PSBodWdldGxiZnNfcmVhZF9pdGVyLFxcbitcXHQucmVhZF9pdGVyXFx0XFx0PSBnZW5lcmljX2ZpbGVfcmVhZF9pdGVyLFxcbiBcXHQubW1hcFxcdFxcdFxcdD0gaHVnZXRsYmZzX2ZpbGVfbW1hcCxcXG4gXFx0LmZzeW5jXFx0XFx0XFx0PSBub29wX2ZzeW5jLFxcbiBcXHQuZ2V0X3VubWFwcGVkX2FyZWFcXHQ9IGh1Z2V0bGJfZ2V0X3VubWFwcGVkX2FyZWEsXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaHVnZXRsYi5oIGIvaW5jbHVkZS9saW51eC9odWdldGxiLmhcXG5pbmRleCAyYWJhZjk5MzIxZTkwZC4uMTg3ODY0MmU3NWVjNTEgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9odWdldGxiLmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaFxcbkBAIC0xNjUsNyArMTY1LDcgQEAgYm9vbCBodWdldGxiZnNfcGFnZWNhY2hlX3ByZXNlbnQoc3RydWN0IGhzdGF0ZSAqaCxcXG4gXFx0XFx0XFx0XFx0IHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbiBcXHRcXHRcXHRcXHQgdW5zaWduZWQgbG9uZyBhZGRyZXNzKTtcXG4gXFxuLXN0cnVjdCBhZGRyZXNzX3NwYWNlICpodWdldGxiX2ZvbGlvX21hcHBpbmdfbG9ja193cml0ZShzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcXG4rc3RydWN0IGFkZHJlc3Nfc3BhY2UgKmh1Z2V0bGJfZm9saW9fbWFwcGluZ19sb2NrX3dyaXRlKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8pO1xcbiBcXG4gZXh0ZXJuIGludCBtb3ZhYmxlX2dpZ2FudGljX3BhZ2VzIF9fcmVhZF9tb3N0bHk7XFxuIGV4dGVybiBpbnQgc3lzY3RsX2h1Z2V0bGJfc2htX2dyb3VwIF9fcmVhZF9tb3N0bHk7XFxuQEAgLTI5Miw4ICsyOTIsNyBAQCBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgaHVnZXRsYl90b3RhbF9wYWdlcyh2b2lkKVxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4tc3RhdGljIGlubGluZSBzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqaHVnZXRsYl9mb2xpb19tYXBwaW5nX2xvY2tfd3JpdGUoXFxuLVxcdFxcdFxcdFxcdFxcdFxcdFxcdHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuK3N0YXRpYyBpbmxpbmUgc3RydWN0IGFkZHJlc3Nfc3BhY2UgKmh1Z2V0bGJfZm9saW9fbWFwcGluZ19sb2NrX3dyaXRlKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuIHtcXG4gXFx0cmV0dXJuIE5VTEw7XFxuIH1cXG5AQCAtNTk1LDggKzU5NCw4IEBAIGVudW0gaHVnZXRsYl9wYWdlX2ZsYWdzIHtcXG4gI2lmZGVmIENPTkZJR19IVUdFVExCX1BBR0VcXG4gI2RlZmluZSBURVNUSFBBR0VGTEFHKHVuYW1lLCBmbG5hbWUpXFx0XFx0XFx0XFx0XFxcXFxcbiBzdGF0aWMgX19hbHdheXNfaW5saW5lXFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbi1ib29sIGZvbGlvX3Rlc3RfaHVnZXRsYl8jI2ZsbmFtZShzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcdFxcdFxcXFxcXG4tXFx0e1xcdHZvaWQgKnByaXZhdGUgPSBcXHUwMDI2Zm9saW8tXFx1MDAzZXByaXZhdGU7XFx0XFx0XFxcXFxcbitib29sIGZvbGlvX3Rlc3RfaHVnZXRsYl8jI2ZsbmFtZShjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcdFxcXFxcXG4rXFx0e1xcdGNvbnN0IHZvaWQgKnByaXZhdGUgPSBcXHUwMDI2Zm9saW8tXFx1MDAzZXByaXZhdGU7XFx0XFx0XFxcXFxcbiBcXHRcXHRyZXR1cm4gdGVzdF9iaXQoSFBHXyMjZmxuYW1lLCBwcml2YXRlKTtcXHRcXHRcXFxcXFxuIFxcdH1cXG4gXFxuQEAgLTYxNiw3ICs2MTUsNyBAQCB2b2lkIGZvbGlvX2NsZWFyX2h1Z2V0bGJfIyNmbG5hbWUoc3RydWN0IGZvbGlvICpmb2xpbylcXHRcXHRcXFxcXFxuICNlbHNlXFxuICNkZWZpbmUgVEVTVEhQQUdFRkxBRyh1bmFtZSwgZmxuYW1lKVxcdFxcdFxcdFxcdFxcXFxcXG4gc3RhdGljIGlubGluZSBib29sXFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbi1mb2xpb190ZXN0X2h1Z2V0bGJfIyNmbG5hbWUoc3RydWN0IGZvbGlvICpmb2xpbylcXHRcXHRcXFxcXFxuK2ZvbGlvX3Rlc3RfaHVnZXRsYl8jI2ZsbmFtZShjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcdFxcdFxcXFxcXG4gXFx0eyByZXR1cm4gMDsgfVxcbiBcXG4gI2RlZmluZSBTRVRIUEFHRUZMQUcodW5hbWUsIGZsbmFtZSlcXHRcXHRcXHRcXHRcXFxcXFxuQEAgLTcyNyw3ICs3MjYsNyBAQCBzdGF0aWMgaW5saW5lIHN0cnVjdCBodWdlcGFnZV9zdWJwb29sICpzdWJwb29sX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpXFxuIFxcdHJldHVybiBIVUdFVExCRlNfU0IoaW5vZGUtXFx1MDAzZWlfc2IpLVxcdTAwM2VzcG9vbDtcXG4gfVxcbiBcXG4tc3RhdGljIGlubGluZSBzdHJ1Y3QgaHVnZXBhZ2Vfc3VicG9vbCAqaHVnZXRsYl9mb2xpb19zdWJwb29sKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuK3N0YXRpYyBpbmxpbmUgc3RydWN0IGh1Z2VwYWdlX3N1YnBvb2wgKmh1Z2V0bGJfZm9saW9fc3VicG9vbChjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbiB7XFxuIFxcdHJldHVybiBmb2xpby1cXHUwMDNlX2h1Z2V0bGJfc3VicG9vbDtcXG4gfVxcbkBAIC04NTcsNyArODU2LDcgQEAgc3RhdGljIGlubGluZSBib29sIGFyY2hfaGFzX2h1Z2VfYm9vdG1lbV9hbGxvYyh2b2lkKVxcbiB9XFxuICNlbmRpZlxcbiBcXG4tc3RhdGljIGlubGluZSBzdHJ1Y3QgaHN0YXRlICpmb2xpb19oc3RhdGUoc3RydWN0IGZvbGlvICpmb2xpbylcXG4rc3RhdGljIGlubGluZSBzdHJ1Y3QgaHN0YXRlICpmb2xpb19oc3RhdGUoY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbylcXG4ge1xcbiBcXHRWTV9CVUdfT05fRk9MSU8oIWZvbGlvX3Rlc3RfaHVnZXRsYihmb2xpbyksIGZvbGlvKTtcXG4gXFx0cmV0dXJuIHNpemVfdG9faHN0YXRlKGZvbGlvX3NpemUoZm9saW8pKTtcXG5AQCAtMTA3MCwxMSArMTA2OSw2IEBAIHZvaWQgaHVnZXRsYl9yZWdpc3Rlcl9ub2RlKHN0cnVjdCBub2RlICpub2RlKTtcXG4gdm9pZCBodWdldGxiX3VucmVnaXN0ZXJfbm9kZShzdHJ1Y3Qgbm9kZSAqbm9kZSk7XFxuICNlbmRpZlxcbiBcXG4tLypcXG4tICogQ2hlY2sgaWYgYSBnaXZlbiByYXcgQHBhZ2UgaW4gYSBodWdlcGFnZSBpcyBIV1BPSVNPTi5cXG4tICovXFxuLWJvb2wgaXNfcmF3X2h3cG9pc29uX3BhZ2VfaW5faHVnZXBhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UpO1xcbi1cXG4gc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGh1Z2VfcGFnZV9tYXNrX2FsaWduKHN0cnVjdCBmaWxlICpmaWxlKVxcbiB7XFxuIFxcdHJldHVybiBQQUdFX01BU0sgXFx1MDAyNiB+aHVnZV9wYWdlX21hc2soaHN0YXRlX2ZpbGUoZmlsZSkpO1xcbkBAIC0xMDg4LDcgKzEwODIsNyBAQCBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgaHVnZV9wYWdlX21hc2tfYWxpZ24oc3RydWN0IGZpbGUgKmZpbGUpXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbi1zdGF0aWMgaW5saW5lIHN0cnVjdCBodWdlcGFnZV9zdWJwb29sICpodWdldGxiX2ZvbGlvX3N1YnBvb2woc3RydWN0IGZvbGlvICpmb2xpbylcXG4rc3RhdGljIGlubGluZSBzdHJ1Y3QgaHVnZXBhZ2Vfc3VicG9vbCAqaHVnZXRsYl9mb2xpb19zdWJwb29sKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuIHtcXG4gXFx0cmV0dXJuIE5VTEw7XFxuIH1cXG5AQCAtMTE1Nyw3ICsxMTUxLDcgQEAgc3RhdGljIGlubGluZSBzdHJ1Y3QgaHN0YXRlICpoc3RhdGVfdm1hKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxcbiBcXHRyZXR1cm4gTlVMTDtcXG4gfVxcbiBcXG4tc3RhdGljIGlubGluZSBzdHJ1Y3QgaHN0YXRlICpmb2xpb19oc3RhdGUoc3RydWN0IGZvbGlvICpmb2xpbylcXG4rc3RhdGljIGlubGluZSBzdHJ1Y3QgaHN0YXRlICpmb2xpb19oc3RhdGUoY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbylcXG4ge1xcbiBcXHRyZXR1cm4gTlVMTDtcXG4gfVxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21tX3R5cGVzLmggYi9pbmNsdWRlL2xpbnV4L21tX3R5cGVzLmhcXG5pbmRleCBiMThjMmIyZTdkMmM2NS4uODZhMmQwZmVlNTU3YmUgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9tbV90eXBlcy5oXFxuKysrIGIvaW5jbHVkZS9saW51eC9tbV90eXBlcy5oXFxuQEAgLTM4Nyw3ICszODcsNyBAQCB0eXBlZGVmIHVuc2lnbmVkIHNob3J0IG1tX2lkX3Q7XFxuICAqIEBfaHVnZXRsYl9zdWJwb29sOiBEbyBub3QgdXNlIGRpcmVjdGx5LCB1c2UgYWNjZXNzb3IgaW4gaHVnZXRsYi5oLlxcbiAgKiBAX2h1Z2V0bGJfY2dyb3VwOiBEbyBub3QgdXNlIGRpcmVjdGx5LCB1c2UgYWNjZXNzb3IgaW4gaHVnZXRsYl9jZ3JvdXAuaC5cXG4gICogQF9odWdldGxiX2Nncm91cF9yc3ZkOiBEbyBub3QgdXNlIGRpcmVjdGx5LCB1c2UgYWNjZXNzb3IgaW4gaHVnZXRsYl9jZ3JvdXAuaC5cXG4tICogQF9odWdldGxiX2h3cG9pc29uOiBEbyBub3QgdXNlIGRpcmVjdGx5LCBjYWxsIHJhd19od3BfbGlzdF9oZWFkKCkuXFxuKyAqIEBodWdldGxiX2h3cG9pc29uOiBMaXN0IG9mIHBhZ2VzIHdpdGggaHdwb2lzb24uXFxuICAqIEBfZGVmZXJyZWRfbGlzdDogRm9saW9zIHRvIGJlIHNwbGl0IHVuZGVyIG1lbW9yeSBwcmVzc3VyZS5cXG4gICogQF91bnVzZWRfc2xhYl9vYmpfZXh0czogUGxhY2Vob2xkZXIgdG8gbWF0Y2ggb2JqX2V4dHMgaW4gc3RydWN0IHNsYWIuXFxuICAqXFxuQEAgLTQ5OSw3ICs0OTksNyBAQCBzdHJ1Y3QgZm9saW8ge1xcbiBcXHRcXHRcXHR2b2lkICpfaHVnZXRsYl9zdWJwb29sO1xcbiBcXHRcXHRcXHR2b2lkICpfaHVnZXRsYl9jZ3JvdXA7XFxuIFxcdFxcdFxcdHZvaWQgKl9odWdldGxiX2Nncm91cF9yc3ZkO1xcbi1cXHRcXHRcXHR2b2lkICpfaHVnZXRsYl9od3BvaXNvbjtcXG4rXFx0XFx0XFx0c3RydWN0IGh3cF9wYWdlICpodWdldGxiX2h3cG9pc29uO1xcbiBcXHQvKiBwcml2YXRlOiB0aGUgdW5pb24gd2l0aCBzdHJ1Y3QgcGFnZSBpcyB0cmFuc2l0aW9uYWwgKi9cXG4gXFx0XFx0fTtcXG4gXFx0XFx0c3RydWN0IHBhZ2UgX19wYWdlXzM7XFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oIGIvaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmhcXG5pbmRleCA3MjIzZjZmNGUyYjQwMy4uMDdjYzc4NTRiMmRlMTYgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaFxcbkBAIC04OTMsMTQgKzg5MywxOSBAQCBzdGF0aWMgaW5saW5lIGludCBQYWdlVHJhbnNDb21wb3VuZChjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSlcXG4gVEVTVFBBR0VGTEFHX0ZBTFNFKFRyYW5zQ29tcG91bmQsIHRyYW5zY29tcG91bmQpXFxuICNlbmRpZlxcbiBcXG4tI2lmIGRlZmluZWQoQ09ORklHX01FTU9SWV9GQUlMVVJFKSBcXHUwMDI2XFx1MDAyNiBkZWZpbmVkKENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSlcXG4rI2lmIGRlZmluZWQoQ09ORklHX01FTU9SWV9GQUlMVVJFKSBcXHUwMDI2XFx1MDAyNiBkZWZpbmVkKENPTkZJR19MQVJHRV9GT0xJTylcXG4gLypcXG4tICogUGFnZUhhc0hXUG9pc29uZWQgaW5kaWNhdGVzIHRoYXQgYXQgbGVhc3Qgb25lIHN1YnBhZ2UgaXMgaHdwb2lzb25lZCBpbiB0aGVcXG4tICogY29tcG91bmQgcGFnZS5cXG4rICogZm9saW9faGFzX2h3cG9pc29uZWQgaW5kaWNhdGVzIHRoYXQgYXQgbGVhc3Qgb25lIHBhZ2UgaXMgaHdwb2lzb25lZCBpbiB0aGVcXG4rICogZm9saW8uICBUaGF0IHBhZ2Ugd2lsbCB1c3VhbGx5IGFsc28gaGF2ZSB0aGUgSFdQb2lzb24gZmxhZyBzZXQsIGJ1dCB0aGlzXFxuKyAqIGlzIG5vdCBwb3NzaWJsZSBmb3IgZm9saW9zIHdoaWNoIGhhdmUgSFZPIChzZWUgbWVtb3J5LWZhaWx1cmUgZm9yIHRoZVxcbisgKiBzY2hlbWUgdXNlZCBpbiB0aGF0IGNhc2UpLiAgWW91IHByb2JhYmx5IGRvbid0IHdhbnQgdG8gY2FsbCB0aGlzIGRpcmVjdGx5O1xcbisgKiB1c2UgZm9saW9faGFzX2h3cG9pc29uZWRfcGFnZSgpIGluc3RlYWQuXFxuICAqXFxuICAqIFRoaXMgZmxhZyBpcyBzZXQgYnkgaHdwb2lzb24gaGFuZGxlci4gIENsZWFyZWQgYnkgVEhQIHNwbGl0IG9yIGZyZWUgcGFnZS5cXG4gICovXFxuIEZPTElPX0ZMQUcoaGFzX2h3cG9pc29uZWQsIEZPTElPX1NFQ09ORF9QQUdFKVxcbitGT0xJT19URVNUX1NFVF9GTEFHKGhhc19od3BvaXNvbmVkLCBGT0xJT19TRUNPTkRfUEFHRSlcXG4rRk9MSU9fVEVTVF9DTEVBUl9GTEFHKGhhc19od3BvaXNvbmVkLCBGT0xJT19TRUNPTkRfUEFHRSlcXG4gI2Vsc2VcXG4gRk9MSU9fRkxBR19GQUxTRShoYXNfaHdwb2lzb25lZClcXG4gI2VuZGlmXFxuQEAgLTEwNDEsOCArMTA0NiwyOSBAQCBQQUdFX1RZUEVfT1BTKFNsYWIsIHNsYWIsIHNsYWIpXFxuIFxcbiAjaWZkZWYgQ09ORklHX0hVR0VUTEJfUEFHRVxcbiBGT0xJT19UWVBFX09QUyhodWdldGxiLCBodWdldGxiKVxcbitcXG4rI2lmZGVmIENPTkZJR19NRU1PUllfRkFJTFVSRVxcbitzdGF0aWMgaW5saW5lIGJvb2wgZm9saW9fdGVzdF9odWdlX3BvaXNvbihjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbit7XFxuK1xcdHJldHVybiAoUkVBRF9PTkNFKGZvbGlvLVxcdTAwM2VwYWdlLnBhZ2VfdHlwZSkgXFx1MDAzZVxcdTAwM2UgMjMpID09XFxuK1xcdFxcdCgoUEdUWV9odWdldGxiIFxcdTAwM2NcXHUwMDNjIDEpIHwgMSk7XFxuK31cXG4rXFxuK3N0YXRpYyBpbmxpbmUgdm9pZCBmb2xpb19zZXRfaHVnZV9wb2lzb24oc3RydWN0IGZvbGlvICpmb2xpbylcXG4re1xcbitcXHRmb2xpby1cXHUwMDNlcGFnZS5wYWdlX3R5cGUgfD0gKDEgXFx1MDAzY1xcdTAwM2MgMjMpO1xcbit9XFxuK1xcbitzdGF0aWMgaW5saW5lIHZvaWQgZm9saW9fY2xlYXJfaHVnZV9wb2lzb24oc3RydWN0IGZvbGlvICpmb2xpbylcXG4re1xcbitcXHRmb2xpby1cXHUwMDNlcGFnZS5wYWdlX3R5cGUgXFx1MDAyNj0gfigxIFxcdTAwM2NcXHUwMDNjIDIzKTtcXG4rfVxcbisjZWxzZVxcbitGT0xJT19URVNUX0ZMQUdfRkFMU0UoaHVnZV9wb2lzb24pXFxuKyNlbmRpZlxcbiAjZWxzZVxcbiBGT0xJT19URVNUX0ZMQUdfRkFMU0UoaHVnZXRsYilcXG4rRk9MSU9fVEVTVF9GTEFHX0ZBTFNFKGh1Z2VfcG9pc29uKVxcbiAjZW5kaWZcXG4gXFxuIFBBR0VfVFlQRV9PUFMoWnNtYWxsb2MsIHpzbWFsbG9jLCB6c21hbGxvYylcXG5AQCAtMTA2OCwxMCArMTA5NCwxNCBAQCBzdGF0aWMgaW5saW5lIGJvb2wgUGFnZUh1Z2UoY29uc3Qgc3RydWN0IHBhZ2UgKnBhZ2UpXFxuIFxcdHJldHVybiBmb2xpb190ZXN0X2h1Z2V0bGIocGFnZV9mb2xpbyhwYWdlKSk7XFxuIH1cXG4gXFxuK2Jvb2wgaHVnZXRsYl9wYWdlX2h3cG9pc29uKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8sIGNvbnN0IHN0cnVjdCBwYWdlICpwYWdlKTtcXG4rYm9vbCBodWdldGxiX3VucmVmX3BhZ2VfaHdwb2lzb24oY29uc3Qgc3RydWN0IHBhZ2UgKnBhZ2UpO1xcbitcXG4gLypcXG4tICogQ2hlY2sgaWYgYSBwYWdlIGlzIGN1cnJlbnRseSBtYXJrZWQgSFdQb2lzb25lZC4gTm90ZSB0aGF0IHRoaXMgY2hlY2sgaXNcXG4tICogYmVzdCBlZmZvcnQgb25seSBhbmQgaW5oZXJlbnRseSByYWN5OiB0aGVyZSBpcyBubyB3YXkgdG8gc3luY2hyb25pemUgd2l0aFxcbi0gKiBmYWlsaW5nIGhhcmR3YXJlLlxcbisgKiBDaGVjayBpZiBhIHBhZ2UgaXMgY3VycmVudGx5IG1hcmtlZCBIV1BvaXNvbmVkLiAgVGhpcyBjaGVjayBpcyBiZXN0XFxuKyAqIGVmZm9ydCBvbmx5IGFuZCBpbmhlcmVudGx5IHJhY3k6IHRoZXJlIGlzIG5vIHdheSB0byBzeW5jaHJvbml6ZSB3aXRoXFxuKyAqIGZhaWxpbmcgaGFyZHdhcmUuICBUaGUgY2FsbGVyIG1heSBub3QgaGF2ZSBhIHJlZmNvdW50IG9uIHRoZSBmb2xpb1xcbisgKiBjb250YWluaW5nIHRoZSBwYWdlLCBzbyB3ZSBtdXN0IGJlIGNhcmVmdWwgdG8gbm90IHRyaXAgYW55IGFzc2VydGlvbnMuXFxuICAqL1xcbiBzdGF0aWMgaW5saW5lIGJvb2wgaXNfcGFnZV9od3BvaXNvbihjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSlcXG4ge1xcbkBAIC0xMDgwLDEzICsxMTEwLDI2IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBpc19wYWdlX2h3cG9pc29uKGNvbnN0IHN0cnVjdCBwYWdlICpwYWdlKVxcbiBcXHRpZiAoUGFnZUhXUG9pc29uKHBhZ2UpKVxcbiBcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4gXFx0Zm9saW8gPSBwYWdlX2ZvbGlvKHBhZ2UpO1xcbi1cXHRyZXR1cm4gZm9saW9fdGVzdF9odWdldGxiKGZvbGlvKSBcXHUwMDI2XFx1MDAyNiBQYWdlSFdQb2lzb24oXFx1MDAyNmZvbGlvLVxcdTAwM2VwYWdlKTtcXG4rXFx0aWYgKGZvbGlvX3Rlc3RfaHVnZV9wb2lzb24oZm9saW8pKVxcbitcXHRcXHRyZXR1cm4gaHVnZXRsYl91bnJlZl9wYWdlX2h3cG9pc29uKHBhZ2UpO1xcbitcXHQvKiBJbiBjYXNlIHdlIHJhY2VkIHdpdGggaHVnZXRsYiB0cmFuc2ZlcnJpbmcgZmxhZ3MgKi9cXG4rXFx0cmV0dXJuIFBhZ2VIV1BvaXNvbihwYWdlKTtcXG4rfVxcbitcXG4rc3RhdGljIGlubGluZSBib29sIGlzX3JlZl9wYWdlX2h3cG9pc29uKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8sXFxuK1xcdFxcdGNvbnN0IHN0cnVjdCBwYWdlICpwYWdlKVxcbit7XFxuK1xcdGlmIChQYWdlSFdQb2lzb24ocGFnZSkpXFxuK1xcdFxcdHJldHVybiB0cnVlO1xcbitcXHRpZiAoZm9saW9fdGVzdF9odWdldGxiKGZvbGlvKSlcXG4rXFx0XFx0cmV0dXJuIGh1Z2V0bGJfcGFnZV9od3BvaXNvbihmb2xpbywgcGFnZSk7XFxuK1xcdHJldHVybiBmYWxzZTtcXG4gfVxcbiBcXG4tc3RhdGljIGlubGluZSBib29sIGZvbGlvX2NvbnRhaW5faHdwb2lzb25lZF9wYWdlKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuK3N0YXRpYyBpbmxpbmUgYm9vbCBmb2xpb19oYXNfaHdwb2lzb25lZF9wYWdlKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuIHtcXG4tXFx0cmV0dXJuIGZvbGlvX3Rlc3RfaHdwb2lzb24oZm9saW8pIHx8XFxuLVxcdCAgICAoZm9saW9fdGVzdF9sYXJnZShmb2xpbykgXFx1MDAyNlxcdTAwMjYgZm9saW9fdGVzdF9oYXNfaHdwb2lzb25lZChmb2xpbykpO1xcbitcXHRyZXR1cm4gUGFnZUhXUG9pc29uKFxcdTAwMjZmb2xpby1cXHUwMDNlcGFnZSkgfHxcXG4rXFx0ICAgICAgIChmb2xpb190ZXN0X2xhcmdlKGZvbGlvKSBcXHUwMDI2XFx1MDAyNiBmb2xpb190ZXN0X2hhc19od3BvaXNvbmVkKGZvbGlvKSk7XFxuIH1cXG4gXFxuIGJvb2wgaXNfZnJlZV9idWRkeV9wYWdlKGNvbnN0IHN0cnVjdCBwYWdlICpwYWdlKTtcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wYWdlbWFwLmggYi9pbmNsdWRlL2xpbnV4L3BhZ2VtYXAuaFxcbmluZGV4IDJjMzcxOGQ1OTJkNmRkLi4yMmQ0ODkzNWZmZGE3YyAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L3BhZ2VtYXAuaFxcbisrKyBiL2luY2x1ZGUvbGludXgvcGFnZW1hcC5oXFxuQEAgLTIxMCw2ICsyMTAsNyBAQCBlbnVtIG1hcHBpbmdfZmxhZ3Mge1xcbiBcXHRBU19XUklURUJBQ0tfTUFZX0RFQURMT0NLX09OX1JFQ0xBSU0gPSA5LFxcbiBcXHRBU19LRVJORUxfRklMRSA9IDEwLFxcdC8qIG1hcHBpbmcgZm9yIGEgZmFrZSBrZXJuZWwgZmlsZSB0aGF0IHNob3VsZG4ndFxcbiBcXHRcXHRcXHRcXHQgICBhY2NvdW50IHVzYWdlIHRvIHVzZXIgY2dyb3VwcyAqL1xcbitcXHRBU19BVVRIT1JJVEFUSVZFID0gMTEsXFx0LyogSWYgd2UgbWlzcyBpbiB0aGUgcGFnZSBjYWNoZSwgaXQncyBhIGhvbGUgKi9cXG4gXFx0LyogQml0cyAxNi0yNSBhcmUgdXNlZCBmb3IgRk9MSU9fT1JERVIgKi9cXG4gXFx0QVNfRk9MSU9fT1JERVJfQklUUyA9IDUsXFxuIFxcdEFTX0ZPTElPX09SREVSX01JTiA9IDE2LFxcbkBAIC0zNDUsNiArMzQ2LDE2IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBtYXBwaW5nX3dyaXRlYmFja19tYXlfZGVhZGxvY2tfb25fcmVjbGFpbShjb25zdCBzdHJ1Y3QgYWRkcmVzXFxuIFxcdHJldHVybiB0ZXN0X2JpdChBU19XUklURUJBQ0tfTUFZX0RFQURMT0NLX09OX1JFQ0xBSU0sIFxcdTAwMjZtYXBwaW5nLVxcdTAwM2VmbGFncyk7XFxuIH1cXG4gXFxuK3N0YXRpYyBpbmxpbmUgdm9pZCBtYXBwaW5nX3NldF9hdXRob3JpdGF0aXZlKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nKVxcbit7XFxuK1xcdHNldF9iaXQoQVNfQVVUSE9SSVRBVElWRSwgXFx1MDAyNm1hcHBpbmctXFx1MDAzZWZsYWdzKTtcXG4rfVxcbitcXG4rc3RhdGljIGlubGluZSBib29sIG1hcHBpbmdfaXNfYXV0aG9yaXRhdGl2ZShjb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZylcXG4re1xcbitcXHRyZXR1cm4gdGVzdF9iaXQoQVNfQVVUSE9SSVRBVElWRSwgXFx1MDAyNm1hcHBpbmctXFx1MDAzZWZsYWdzKTtcXG4rfVxcbitcXG4gc3RhdGljIGlubGluZSBnZnBfdCBtYXBwaW5nX2dmcF9tYXNrKGNvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nKVxcbiB7XFxuIFxcdHJldHVybiBtYXBwaW5nLVxcdTAwM2VnZnBfbWFzaztcXG5AQCAtMzczLDcgKzM4NCw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBtYXBwaW5nX3NldF9nZnBfbWFzayhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbSwgZ2ZwX3QgbWFzaylcXG4gICogYXNzdW1wdGlvbnMgYWJvdXQgbWF4aW11bSBvcmRlciBpZiBUSFAgYXJlIGRpc2FibGVkLCBidXQgOCBzZWVtcyBsaWtlXFxuICAqIGEgZ29vZCBvcmRlciAodGhhdCdzIDFNQiBpZiB5b3UncmUgdXNpbmcgNGtCIHBhZ2VzKVxcbiAgKi9cXG4tI2lmZGVmIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRVxcbisjaWZkZWYgQ09ORklHX0xBUkdFX0ZPTElPXFxuICNkZWZpbmUgUFJFRkVSUkVEX01BWF9QQUdFQ0FDSEVfT1JERVJcXHRIUEFHRV9QTURfT1JERVJcXG4gI2Vsc2VcXG4gI2RlZmluZSBQUkVGRVJSRURfTUFYX1BBR0VDQUNIRV9PUkRFUlxcdDhcXG5AQCAtMzk0LDcgKzQwNSw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBtYXBwaW5nX3NldF9nZnBfbWFzayhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbSwgZ2ZwX3QgbWFzaylcXG4gICovXFxuIHN0YXRpYyBpbmxpbmUgc2l6ZV90IG1hcHBpbmdfbWF4X2ZvbGlvX3NpemVfc3VwcG9ydGVkKHZvaWQpXFxuIHtcXG4tXFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFKSlcXG4rXFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX0xBUkdFX0ZPTElPKSlcXG4gXFx0XFx0cmV0dXJuIDFVIFxcdTAwM2NcXHUwMDNjIChQQUdFX1NISUZUICsgTUFYX1BBR0VDQUNIRV9PUkRFUik7XFxuIFxcdHJldHVybiBQQUdFX1NJWkU7XFxuIH1cXG5AQCAtNDA1LDI5ICs0MTYsMjMgQEAgc3RhdGljIGlubGluZSBzaXplX3QgbWFwcGluZ19tYXhfZm9saW9fc2l6ZV9zdXBwb3J0ZWQodm9pZClcXG4gICogQG1pbjogTWluaW11bSBmb2xpbyBvcmRlciAoYmV0d2VlbiAwLU1BWF9QQUdFQ0FDSEVfT1JERVIgaW5jbHVzaXZlKS5cXG4gICogQG1heDogTWF4aW11bSBmb2xpbyBvcmRlciAoYmV0d2VlbiBAbWluLU1BWF9QQUdFQ0FDSEVfT1JERVIgaW5jbHVzaXZlKS5cXG4gICpcXG4tICogVGhlIGZpbGVzeXN0ZW0gc2hvdWxkIGNhbGwgdGhpcyBmdW5jdGlvbiBpbiBpdHMgaW5vZGUgY29uc3RydWN0b3IgdG9cXG4tICogaW5kaWNhdGUgd2hpY2ggYmFzZSBzaXplIChtaW4pIGFuZCBtYXhpbXVtIHNpemUgKG1heCkgb2YgZm9saW8gdGhlIFZGU1xcbi0gKiBjYW4gdXNlIHRvIGNhY2hlIHRoZSBjb250ZW50cyBvZiB0aGUgZmlsZS4gIFRoaXMgc2hvdWxkIG9ubHkgYmUgdXNlZFxcbi0gKiBpZiB0aGUgZmlsZXN5c3RlbSBuZWVkcyBzcGVjaWFsIGhhbmRsaW5nIG9mIGZvbGlvIHNpemVzIChpZSB0aGVyZSBpc1xcbi0gKiBzb21ldGhpbmcgdGhlIGNvcmUgY2Fubm90IGtub3cpLlxcbisgKiBUaGUgZmlsZXN5c3RlbSBzaG91bGQgY2FsbCB0aGlzIGZ1bmN0aW9uIGluIGl0cyBpbm9kZSBjb25zdHJ1Y3RvclxcbisgKiB0byBpbmRpY2F0ZSB3aGljaCBzaXplIGZvbGlvcyBjYW4gYmUgdXNlZCB0byBjYWNoZSB0aGUgY29udGVudHMgb2ZcXG4rICogdGhlIGlub2RlLiAgVGhpcyBzaG91bGQgb25seSBiZSB1c2VkIGlmIHRoZSBmaWxlc3lzdGVtIG5lZWRzIHNwZWNpYWxcXG4rICogaGFuZGxpbmcgb2YgZm9saW8gc2l6ZXMgKGllIHRoZXJlIGlzIHNvbWV0aGluZyB0aGUgY29yZSBjYW5ub3Qga25vdykuXFxuICAqIERvIG5vdCB0dW5lIGl0IGJhc2VkIG9uLCBlZywgaV9zaXplLlxcbiAgKlxcbisgKiBodWdldGxiIGNhbGxzIHRoaXMgd2l0aCBvcmRlcnMgbGFyZ2VyIHRoYW4gTUFYX1BBR0VDQUNIRV9PUkRFUi5cXG4rICogTm9ybWFsIGZpbGVzeXN0ZW1zIHNob3VsZCBub3QgZG8gdGhpcy5cXG4rICpcXG4gICogQ29udGV4dDogVGhpcyBzaG91bGQgbm90IGJlIGNhbGxlZCB3aGlsZSB0aGUgaW5vZGUgaXMgYWN0aXZlIGFzIGl0XFxuICAqIGlzIG5vbi1hdG9taWMuXFxuICAqL1xcbiBzdGF0aWMgaW5saW5lIHZvaWQgbWFwcGluZ19zZXRfZm9saW9fb3JkZXJfcmFuZ2Uoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXFxuLVxcdFxcdFxcdFxcdFxcdFxcdCB1bnNpZ25lZCBpbnQgbWluLFxcbi1cXHRcXHRcXHRcXHRcXHRcXHQgdW5zaWduZWQgaW50IG1heClcXG4rXFx0XFx0dW5zaWduZWQgaW50IG1pbiwgdW5zaWduZWQgaW50IG1heClcXG4ge1xcbi1cXHRpZiAoIUlTX0VOQUJMRUQoQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFKSlcXG4rXFx0aWYgKCFJU19FTkFCTEVEKENPTkZJR19MQVJHRV9GT0xJTykpXFxuIFxcdFxcdHJldHVybjtcXG4tXFxuLVxcdGlmIChtaW4gXFx1MDAzZSBNQVhfUEFHRUNBQ0hFX09SREVSKVxcbi1cXHRcXHRtaW4gPSBNQVhfUEFHRUNBQ0hFX09SREVSO1xcbi1cXG4tXFx0aWYgKG1heCBcXHUwMDNlIE1BWF9QQUdFQ0FDSEVfT1JERVIpXFxuLVxcdFxcdG1heCA9IE1BWF9QQUdFQ0FDSEVfT1JERVI7XFxuLVxcbiBcXHRpZiAobWF4IFxcdTAwM2MgbWluKVxcbiBcXHRcXHRtYXggPSBtaW47XFxuIFxcbkBAIC00NjAsNyArNDY1LDcgQEAgc3RhdGljIGlubGluZSB2b2lkIG1hcHBpbmdfc2V0X2xhcmdlX2ZvbGlvcyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZylcXG4gc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnRcXG4gbWFwcGluZ19tYXhfZm9saW9fb3JkZXIoY29uc3Qgc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcpXFxuIHtcXG4tXFx0aWYgKCFJU19FTkFCTEVEKENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSkpXFxuK1xcdGlmICghSVNfRU5BQkxFRChDT05GSUdfTEFSR0VfRk9MSU8pKVxcbiBcXHRcXHRyZXR1cm4gMDtcXG4gXFx0cmV0dXJuIChtYXBwaW5nLVxcdTAwM2VmbGFncyBcXHUwMDI2IEFTX0ZPTElPX09SREVSX01BWF9NQVNLKSBcXHUwMDNlXFx1MDAzZSBBU19GT0xJT19PUkRFUl9NQVg7XFxuIH1cXG5AQCAtNDY4LDcgKzQ3Myw3IEBAIG1hcHBpbmdfbWF4X2ZvbGlvX29yZGVyKGNvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nKVxcbiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludFxcbiBtYXBwaW5nX21pbl9mb2xpb19vcmRlcihjb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZylcXG4ge1xcbi1cXHRpZiAoIUlTX0VOQUJMRUQoQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFKSlcXG4rXFx0aWYgKCFJU19FTkFCTEVEKENPTkZJR19MQVJHRV9GT0xJTykpXFxuIFxcdFxcdHJldHVybiAwO1xcbiBcXHRyZXR1cm4gKG1hcHBpbmctXFx1MDAzZWZsYWdzIFxcdTAwMjYgQVNfRk9MSU9fT1JERVJfTUlOX01BU0spIFxcdTAwM2VcXHUwMDNlIEFTX0ZPTElPX09SREVSX01JTjtcXG4gfVxcbkBAIC01MjQsNyArNTI5LDcgQEAgc3RhdGljIGlubGluZSBib29sIG1hcHBpbmdfbGFyZ2VfZm9saW9fc3VwcG9ydChjb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGlcXG4gICpcXG4gICogUmV0dXJuOiBUcnVlIGlmIFBNRC1zaXplZCBmb2xpb3MgYXJlIHN1cHBvcnRlZCwgb3RoZXJ3aXNlIGZhbHNlLlxcbiAgKi9cXG4tI2lmZGVmIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRVxcbisjaWZkZWYgQ09ORklHX0xBUkdFX0ZPTElPXFxuIHN0YXRpYyBpbmxpbmUgYm9vbCBtYXBwaW5nX3BtZF9mb2xpb19zdXBwb3J0KGNvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nKVxcbiB7XFxuIFxcdC8qIEFTX0ZPTElPX09SREVSIGlzIG9ubHkgcmVhc29uYWJsZSBmb3IgcGFnZWNhY2hlIGZvbGlvcyAqL1xcbmRpZmYgLS1naXQgYS9tbS9LY29uZmlnIGIvbW0vS2NvbmZpZ1xcbmluZGV4IDllMGNhNDgyNDkwNTRmLi5lNjY2ZGQxNGNhMGMzZCAxMDA2NDRcXG4tLS0gYS9tbS9LY29uZmlnXFxuKysrIGIvbW0vS2NvbmZpZ1xcbkBAIC04NDMsMTEgKzg0MywxNSBAQCBjb25maWcgUEVSU0lTVEVOVF9IVUdFX1pFUk9fRk9MSU9cXG4gY29uZmlnIE1NX0lEXFxuIFxcdGRlZl9ib29sIG5cXG4gXFxuK2NvbmZpZyBMQVJHRV9GT0xJT1xcbitcXHRkZWZfYm9vbCBuXFxuK1xcdHNlbGVjdCBYQVJSQVlfTVVMVElcXG4rXFxuIG1lbnVjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VcXG4gXFx0Ym9vbCBcXFwiVHJhbnNwYXJlbnQgSHVnZXBhZ2UgU3VwcG9ydFxcXCJcXG4gXFx0ZGVwZW5kcyBvbiBIQVZFX0FSQ0hfVFJBTlNQQVJFTlRfSFVHRVBBR0UgXFx1MDAyNlxcdTAwMjYgIVBSRUVNUFRfUlRcXG4gXFx0c2VsZWN0IENPTVBBQ1RJT05cXG4tXFx0c2VsZWN0IFhBUlJBWV9NVUxUSVxcbitcXHRzZWxlY3QgTEFSR0VfRk9MSU9cXG4gXFx0c2VsZWN0IE1NX0lEXFxuIFxcdGhlbHBcXG4gXFx0ICBUcmFuc3BhcmVudCBIdWdlcGFnZXMgYWxsb3dzIHRoZSBrZXJuZWwgdG8gdXNlIGh1Z2UgcGFnZXMgYW5kXFxuZGlmZiAtLWdpdCBhL21tL2ZpbGVtYXAuYyBiL21tL2ZpbGVtYXAuY1xcbmluZGV4IDU4ZWI5ZDI0MDY0MzQ4Li41YThjYzIwZTYyNGU0ZCAxMDA2NDRcXG4tLS0gYS9tbS9maWxlbWFwLmNcXG4rKysgYi9tbS9maWxlbWFwLmNcXG5AQCAtMjQ4Myw2ICsyNDgzLDggQEAgc3RhdGljIHZvaWQgZmlsZW1hcF9nZXRfcmVhZF9iYXRjaChzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcXG4gXFxuIFxcdFxcdGlmICghZm9saW9fYmF0Y2hfYWRkKGZiYXRjaCwgZm9saW8pKVxcbiBcXHRcXHRcXHRicmVhaztcXG4rXFx0XFx0aWYgKGZvbGlvX2hhc19od3BvaXNvbmVkX3BhZ2UoZm9saW8pKVxcbitcXHRcXHRcXHRicmVhaztcXG4gXFx0XFx0aWYgKCFmb2xpb190ZXN0X3VwdG9kYXRlKGZvbGlvKSlcXG4gXFx0XFx0XFx0YnJlYWs7XFxuIFxcdFxcdGlmIChmb2xpb190ZXN0X3JlYWRhaGVhZChmb2xpbykpXFxuQEAgLTI2OTUsNiArMjY5Nyw4IEBAIHN0YXRpYyBpbnQgZmlsZW1hcF9nZXRfcGFnZXMoc3RydWN0IGtpb2NiICppb2NiLCBzaXplX3QgY291bnQsXFxuIFxcdGlmICghZm9saW9fYmF0Y2hfY291bnQoZmJhdGNoKSkge1xcbiBcXHRcXHRERUZJTkVfUkVBREFIRUFEKHJhY3RsLCBmaWxwLCBcXHUwMDI2ZmlscC1cXHUwMDNlZl9yYSwgbWFwcGluZywgaW5kZXgpO1xcbiBcXG4rXFx0XFx0aWYgKG1hcHBpbmdfaXNfYXV0aG9yaXRhdGl2ZShtYXBwaW5nKSlcXG4rXFx0XFx0XFx0cmV0dXJuIDA7XFxuIFxcdFxcdGlmIChpb2NiLVxcdTAwM2VraV9mbGFncyBcXHUwMDI2IElPQ0JfTk9JTylcXG4gXFx0XFx0XFx0cmV0dXJuIC1FQUdBSU47XFxuIFxcdFxcdGlmIChpb2NiLVxcdTAwM2VraV9mbGFncyBcXHUwMDI2IElPQ0JfTk9XQUlUKVxcbkBAIC0yNzQ5LDYgKzI3NTMsMjkgQEAgc3RhdGljIGlubGluZSBib29sIHBvc19zYW1lX2ZvbGlvKGxvZmZfdCBwb3MxLCBsb2ZmX3QgcG9zMiwgc3RydWN0IGZvbGlvICpmb2xpbylcXG4gXFx0cmV0dXJuIChwb3MxIFxcdTAwM2VcXHUwMDNlIHNoaWZ0ID09IHBvczIgXFx1MDAzZVxcdTAwM2Ugc2hpZnQpO1xcbiB9XFxuIFxcbitzdGF0aWMgc2l6ZV90IGFkanVzdF9yYW5nZV9od3BvaXNvbihjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzaXplX3Qgb2Zmc2V0LFxcbitcXHRcXHRzaXplX3QgYnl0ZXMpXFxuK3tcXG4rXFx0Y29uc3Qgc3RydWN0IHBhZ2UgKnBhZ2UgPSBmb2xpb19wYWdlKGZvbGlvLCBvZmZzZXQgLyBQQUdFX1NJWkUpO1xcbitcXHRzaXplX3Qgc2FmZV9ieXRlcztcXG4rXFxuK1xcdGlmICghZm9saW9faGFzX2h3cG9pc29uZWRfcGFnZShmb2xpbykpXFxuK1xcdFxcdHJldHVybiBieXRlcztcXG4rXFx0aWYgKGlzX3JlZl9wYWdlX2h3cG9pc29uKGZvbGlvLCBwYWdlKSlcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcbitcXHQvKiBTYWZlIHRvIHJlYWQgdGhlIHJlbWFpbmluZyBieXRlcyBpbiB0aGlzIHBhZ2UuICovXFxuK1xcdHNhZmVfYnl0ZXMgPSBQQUdFX1NJWkUgLSAob2Zmc2V0ICUgUEFHRV9TSVpFKTtcXG4rXFx0cGFnZSsrO1xcbitcXG4rXFx0LyogQ2hlY2sgZWFjaCByZW1haW5pbmcgcGFnZSBhcyBsb25nIGFzIHdlIGFyZSBub3QgZG9uZSB5ZXQuICovXFxuK1xcdGZvciAoOyBzYWZlX2J5dGVzIFxcdTAwM2MgYnl0ZXM7IHNhZmVfYnl0ZXMgKz0gUEFHRV9TSVpFLCBwYWdlKyspXFxuK1xcdFxcdGlmIChpc19yZWZfcGFnZV9od3BvaXNvbihmb2xpbywgcGFnZSkpXFxuK1xcdFxcdFxcdGJyZWFrO1xcbitcXG4rXFx0cmV0dXJuIG1pbihzYWZlX2J5dGVzLCBieXRlcyk7XFxuK31cXG4rXFxuIHN0YXRpYyB2b2lkIGZpbGVtYXBfZW5kX2Ryb3BiZWhpbmRfcmVhZChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbiB7XFxuIFxcdGlmICghZm9saW9fdGVzdF9kcm9wYmVoaW5kKGZvbGlvKSlcXG5AQCAtMjgyOCw2ICsyODU1LDIyIEBAIHNzaXplX3QgZmlsZW1hcF9yZWFkKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICppdGVyLFxcbiBcXHRcXHRcXHRnb3RvIHB1dF9mb2xpb3M7XFxuIFxcdFxcdGVuZF9vZmZzZXQgPSBtaW5fdChsb2ZmX3QsIGlzaXplLCBpb2NiLVxcdTAwM2VraV9wb3MgKyBpdGVyLVxcdTAwM2Vjb3VudCk7XFxuIFxcbitcXHRcXHRpZiAoIWZvbGlvX2JhdGNoX2NvdW50KFxcdTAwMjZmYmF0Y2gpKSB7XFxuK1xcdFxcdFxcdHNpemVfdCBmc2l6ZSA9IG1hcHBpbmdfbWluX2ZvbGlvX25yYnl0ZXMobWFwcGluZyk7XFxuK1xcdFxcdFxcdHNpemVfdCBvZmZzZXQgPSBpb2NiLVxcdTAwM2VraV9wb3MgXFx1MDAyNiAoZnNpemUgLSAxKTtcXG4rXFx0XFx0XFx0c2l6ZV90IGJ5dGVzID0gbWluX3QobG9mZl90LCBlbmRfb2Zmc2V0IC0gaW9jYi1cXHUwMDNla2lfcG9zLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgIGZzaXplIC0gb2Zmc2V0KTtcXG4rXFx0XFx0XFx0c2l6ZV90IGNvcGllZCA9IGlvdl9pdGVyX3plcm8oYnl0ZXMsIGl0ZXIpO1xcbitcXG4rXFx0XFx0XFx0YWxyZWFkeV9yZWFkICs9IGNvcGllZDtcXG4rXFx0XFx0XFx0aW9jYi1cXHUwMDNla2lfcG9zICs9IGNvcGllZDtcXG4rXFx0XFx0XFx0bGFzdF9wb3MgPSBpb2NiLVxcdTAwM2VraV9wb3M7XFxuK1xcbitcXHRcXHRcXHRpZiAoY29waWVkIFxcdTAwM2MgYnl0ZXMpXFxuK1xcdFxcdFxcdFxcdGVycm9yID0gLUVGQVVMVDtcXG4rXFx0XFx0XFx0Y29udGludWU7XFxuK1xcdFxcdH1cXG4rXFxuIFxcdFxcdC8qXFxuIFxcdFxcdCAqIE9uY2Ugd2Ugc3RhcnQgY29weWluZyBkYXRhLCB3ZSBkb24ndCB3YW50IHRvIGJlIHRvdWNoaW5nIGFueVxcbiBcXHRcXHQgKiBjYWNoZWxpbmVzIHRoYXQgbWlnaHQgYmUgY29udGVuZGVkOlxcbkBAIC0yODYyLDE0ICsyOTA1LDE4IEBAIHNzaXplX3QgZmlsZW1hcF9yZWFkKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICppdGVyLFxcbiBcXHRcXHRcXHRpZiAod3JpdGFibHlfbWFwcGVkKVxcbiBcXHRcXHRcXHRcXHRmbHVzaF9kY2FjaGVfZm9saW8oZm9saW8pO1xcbiBcXG4tXFx0XFx0XFx0Y29waWVkID0gY29weV9mb2xpb190b19pdGVyKGZvbGlvLCBvZmZzZXQsIGJ5dGVzLCBpdGVyKTtcXG4rXFx0XFx0XFx0Y29waWVkID0gYWRqdXN0X3JhbmdlX2h3cG9pc29uKGZvbGlvLCBvZmZzZXQsIGJ5dGVzKTtcXG4rXFx0XFx0XFx0aWYgKGNvcGllZCBcXHUwMDNjIGJ5dGVzKVxcbitcXHRcXHRcXHRcXHRlcnJvciA9IC1FSU87XFxuK1xcdFxcdFxcdGNvcGllZCA9IGNvcHlfZm9saW9fdG9faXRlcihmb2xpbywgb2Zmc2V0LCBjb3BpZWQsIGl0ZXIpO1xcbiBcXG4gXFx0XFx0XFx0YWxyZWFkeV9yZWFkICs9IGNvcGllZDtcXG4gXFx0XFx0XFx0aW9jYi1cXHUwMDNla2lfcG9zICs9IGNvcGllZDtcXG4gXFx0XFx0XFx0bGFzdF9wb3MgPSBpb2NiLVxcdTAwM2VraV9wb3M7XFxuIFxcbiBcXHRcXHRcXHRpZiAoY29waWVkIFxcdTAwM2MgYnl0ZXMpIHtcXG4tXFx0XFx0XFx0XFx0ZXJyb3IgPSAtRUZBVUxUO1xcbitcXHRcXHRcXHRcXHRpZiAoIWVycm9yKVxcbitcXHRcXHRcXHRcXHRcXHRlcnJvciA9IC1FRkFVTFQ7XFxuIFxcdFxcdFxcdFxcdGJyZWFrO1xcbiBcXHRcXHRcXHR9XFxuIFxcdFxcdH1cXG5kaWZmIC0tZ2l0IGEvbW0vaHVnZV9tZW1vcnkuYyBiL21tL2h1Z2VfbWVtb3J5LmNcXG5pbmRleCAyYmNjYjBhNTNhMGE2MC4uMzUzMzQwMzA5MTA3NGMgMTAwNjQ0XFxuLS0tIGEvbW0vaHVnZV9tZW1vcnkuY1xcbisrKyBiL21tL2h1Z2VfbWVtb3J5LmNcXG5AQCAtNDQxMyw3ICs0NDEzLDcgQEAgc3RhdGljIGJvb2wgdGhwX3VuZGVydXNlZChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbiBcXHRpZiAoa2h1Z2VwYWdlZF9tYXhfcHRlc19ub25lID09IEhQQUdFX1BNRF9OUiAtIDEpXFxuIFxcdFxcdHJldHVybiBmYWxzZTtcXG4gXFxuLVxcdGlmIChmb2xpb19jb250YWluX2h3cG9pc29uZWRfcGFnZShmb2xpbykpXFxuK1xcdGlmIChmb2xpb19oYXNfaHdwb2lzb25lZF9wYWdlKGZvbGlvKSlcXG4gXFx0XFx0cmV0dXJuIGZhbHNlO1xcbiBcXG4gXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIGZvbGlvX25yX3BhZ2VzKGZvbGlvKTsgaSsrKSB7XFxuZGlmZiAtLWdpdCBhL21tL2h1Z2V0bGIuYyBiL21tL2h1Z2V0bGIuY1xcbmluZGV4IDU3MTIxMmI4MDgzNWVjLi5hYWFjNmUyYWY0YzI0YSAxMDA2NDRcXG4tLS0gYS9tbS9odWdldGxiLmNcXG4rKysgYi9tbS9odWdldGxiLmNcXG5AQCAtMTI1NSw3ICsxMjU1LDcgQEAgc3RhdGljIHN0cnVjdCBmb2xpbyAqZGVxdWV1ZV9odWdldGxiX2ZvbGlvX25vZGVfZXhhY3Qoc3RydWN0IGhzdGF0ZSAqaCxcXG4gXFx0XFx0aWYgKHBpbiBcXHUwMDI2XFx1MDAyNiAhZm9saW9faXNfbG9uZ3Rlcm1fcGlubmFibGUoZm9saW8pKVxcbiBcXHRcXHRcXHRjb250aW51ZTtcXG4gXFxuLVxcdFxcdGlmIChmb2xpb190ZXN0X2h3cG9pc29uKGZvbGlvKSlcXG4rXFx0XFx0aWYgKGZvbGlvX3Rlc3RfaGFzX2h3cG9pc29uZWQoZm9saW8pKVxcbiBcXHRcXHRcXHRjb250aW51ZTtcXG4gXFxuIFxcdFxcdGlmIChpc19taWdyYXRlX2lzb2xhdGVfcGFnZShcXHUwMDI2Zm9saW8tXFx1MDAzZXBhZ2UpKVxcbkBAIC0xNDk4LDEwICsxNDk4LDEwIEBAIHN0YXRpYyB2b2lkIF9fdXBkYXRlX2FuZF9mcmVlX2h1Z2V0bGJfZm9saW8oc3RydWN0IGhzdGF0ZSAqaCxcXG4gXFx0fVxcbiBcXG4gXFx0LypcXG4tXFx0ICogTW92ZSBQYWdlSFdQb2lzb24gZmxhZyBmcm9tIGhlYWQgcGFnZSB0byB0aGUgcmF3IGVycm9yIHBhZ2VzLFxcbi1cXHQgKiB3aGljaCBtYWtlcyBhbnkgaGVhbHRoeSBzdWJwYWdlcyByZXVzYWJsZS5cXG4rXFx0ICogTW92ZSBIV1BvaXNvbiBmbGFnIHRvIGVhY2ggZXJyb3IgcGFnZVxcbitcXHQgKiB3aGljaCBtYWtlcyBhbnkgaGVhbHRoeSBwYWdlcyByZXVzYWJsZS5cXG4gXFx0ICovXFxuLVxcdGlmICh1bmxpa2VseShmb2xpb190ZXN0X2h3cG9pc29uKGZvbGlvKSkpXFxuK1xcdGlmICh1bmxpa2VseShmb2xpb190ZXN0X2hhc19od3BvaXNvbmVkKGZvbGlvKSkpXFxuIFxcdFxcdGZvbGlvX2NsZWFyX2h1Z2V0bGJfaHdwb2lzb24oZm9saW8pO1xcbiBcXG4gXFx0Vk1fQlVHX09OX0ZPTElPKGZvbGlvX3JlZl9jb3VudChmb2xpbyksIGZvbGlvKTtcXG5AQCAtMTc3NSw3ICsxNzc1LDcgQEAgdm9pZCBpbml0X25ld19odWdldGxiX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuICAqIHN0YWJsZS4gIER1ZSB0byBsb2NraW5nIG9yZGVyLCB3ZSBjYW4gb25seSB0cnlsb2NrX3dyaXRlLiAgSWYgd2UgY2FuXFxuICAqIG5vdCBnZXQgdGhlIGxvY2ssIHNpbXBseSByZXR1cm4gTlVMTCB0byBjYWxsZXIuXFxuICAqL1xcbi1zdHJ1Y3QgYWRkcmVzc19zcGFjZSAqaHVnZXRsYl9mb2xpb19tYXBwaW5nX2xvY2tfd3JpdGUoc3RydWN0IGZvbGlvICpmb2xpbylcXG4rc3RydWN0IGFkZHJlc3Nfc3BhY2UgKmh1Z2V0bGJfZm9saW9fbWFwcGluZ19sb2NrX3dyaXRlKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuIHtcXG4gXFx0c3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcgPSBmb2xpb19tYXBwaW5nKGZvbGlvKTtcXG4gXFxuQEAgLTM5OTgsNyArMzk5OCw3IEBAIGxvbmcgZGVtb3RlX3Bvb2xfaHVnZV9wYWdlKHN0cnVjdCBoc3RhdGUgKnNyYywgbm9kZW1hc2tfdCAqbm9kZXNfYWxsb3dlZCxcXG4gXFx0XFx0c3RydWN0IGZvbGlvICpmb2xpbywgKm5leHQ7XFxuIFxcbiBcXHRcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoZm9saW8sIG5leHQsIFxcdTAwMjZzcmMtXFx1MDAzZWh1Z2VwYWdlX2ZyZWVsaXN0c1tub2RlXSwgbHJ1KSB7XFxuLVxcdFxcdFxcdGlmIChmb2xpb190ZXN0X2h3cG9pc29uKGZvbGlvKSlcXG4rXFx0XFx0XFx0aWYgKGZvbGlvX3Rlc3RfaGFzX2h3cG9pc29uZWQoZm9saW8pKVxcbiBcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4gXFxuIFxcdFxcdFxcdHJlbW92ZV9odWdldGxiX2ZvbGlvKHNyYywgZm9saW8sIGZhbHNlKTtcXG5AQCAtNTgwOSw3ICs1ODA5LDcgQEAgc3RhdGljIHZtX2ZhdWx0X3QgaHVnZXRsYl9ub19wYWdlKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxcbiBcXHRcXHQgKiBkb24ndCBoYXZlIGh3cG9pc29uZWQgc3dhcCBlbnRyeSBmb3IgZXJyb3JlZCB2aXJ0dWFsIGFkZHJlc3MuXFxuIFxcdFxcdCAqIFNvIHdlIG5lZWQgdG8gYmxvY2sgaHVnZXBhZ2UgZmF1bHQgYnkgUEdfaHdwb2lzb24gYml0IGNoZWNrLlxcbiBcXHRcXHQgKi9cXG4tXFx0XFx0aWYgKHVubGlrZWx5KGZvbGlvX3Rlc3RfaHdwb2lzb24oZm9saW8pKSkge1xcbitcXHRcXHRpZiAodW5saWtlbHkoZm9saW9fdGVzdF9oYXNfaHdwb2lzb25lZChmb2xpbykpKSB7XFxuIFxcdFxcdFxcdHJldCA9IFZNX0ZBVUxUX0hXUE9JU09OX0xBUkdFIHxcXG4gXFx0XFx0XFx0XFx0Vk1fRkFVTFRfU0VUX0hJTkRFWChoc3RhdGVfaW5kZXgoaCkpO1xcbiBcXHRcXHRcXHRnb3RvIGJhY2tvdXRfdW5sb2NrZWQ7XFxuQEAgLTYzMTgsNyArNjMxOCw3IEBAIGludCBodWdldGxiX21maWxsX2F0b21pY19wdGUocHRlX3QgKmRzdF9wdGUsXFxuIFxcdHB0bCA9IGh1Z2VfcHRlX2xvY2soaCwgZHN0X21tLCBkc3RfcHRlKTtcXG4gXFxuIFxcdHJldCA9IC1FSU87XFxuLVxcdGlmIChmb2xpb190ZXN0X2h3cG9pc29uKGZvbGlvKSlcXG4rXFx0aWYgKGZvbGlvX3Rlc3RfaGFzX2h3cG9pc29uZWQoZm9saW8pKVxcbiBcXHRcXHRnb3RvIG91dF9yZWxlYXNlX3VubG9jaztcXG4gXFxuIFxcdHJldCA9IC1FRVhJU1Q7XFxuZGlmZiAtLWdpdCBhL21tL21lbW9yeS1mYWlsdXJlLmMgYi9tbS9tZW1vcnktZmFpbHVyZS5jXFxuaW5kZXggNTE1MDhhNTVjNDA1NWUuLjMyZjkxOTM1YjIxMDcwIDEwMDY0NFxcbi0tLSBhL21tL21lbW9yeS1mYWlsdXJlLmNcXG4rKysgYi9tbS9tZW1vcnktZmFpbHVyZS5jXFxuQEAgLTE4MDgsNjMgKzE4MDgsODYgQEAgRVhQT1JUX1NZTUJPTF9HUEwobWZfZGF4X2tpbGxfcHJvY3MpO1xcbiBcXG4gI2lmZGVmIENPTkZJR19IVUdFVExCX1BBR0VcXG4gXFxuKy8qIFByb3RlY3RzIGFsbCBsaXN0cyBvZiBod3BfcGFnZXMgKi9cXG4rc3RhdGljIERFRklORV9TUElOTE9DSyhod3BfcGFnZV9sb2NrKTtcXG4rXFxuIC8qXFxuLSAqIFN0cnVjdCByYXdfaHdwX3BhZ2UgcmVwcmVzZW50cyBpbmZvcm1hdGlvbiBhYm91dCBcXFwicmF3IGVycm9yIHBhZ2VcXFwiLFxcbi0gKiBjb25zdHJ1Y3Rpbmcgc2luZ2x5IGxpbmtlZCBsaXN0IGZyb20gLVxcdTAwM2VfaHVnZXRsYl9od3BvaXNvbiBmaWVsZCBvZiBmb2xpby5cXG4rICogaHdwX3BhZ2UgcmVwcmVzZW50cyBpbmZvcm1hdGlvbiBhYm91dCBcXFwiZXJyb3IgcGFnZVxcXCIsXFxuKyAqIGNvbnN0cnVjdGluZyBzaW5nbHkgbGlua2VkIGxpc3QgZnJvbSBmb2xpby1cXHUwMDNlaHVnZXRsYl9od3BvaXNvbiBmaWVsZC5cXG4gICovXFxuLXN0cnVjdCByYXdfaHdwX3BhZ2Uge1xcbi1cXHRzdHJ1Y3QgbGxpc3Rfbm9kZSBub2RlO1xcbitzdHJ1Y3QgaHdwX3BhZ2Uge1xcbitcXHRzdHJ1Y3QgaHdwX3BhZ2UgKm5leHQ7XFxuIFxcdHN0cnVjdCBwYWdlICpwYWdlO1xcbiB9O1xcbiBcXG4tc3RhdGljIGlubGluZSBzdHJ1Y3QgbGxpc3RfaGVhZCAqcmF3X2h3cF9saXN0X2hlYWQoc3RydWN0IGZvbGlvICpmb2xpbylcXG4rc3RhdGljIGJvb2wgcHJlY2lzZV9wYWdlX3BvaXNvbmVkKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8sXFxuK1xcdFxcdGNvbnN0IHN0cnVjdCBwYWdlICpwYWdlKVxcbiB7XFxuLVxcdHJldHVybiAoc3RydWN0IGxsaXN0X2hlYWQgKilcXHUwMDI2Zm9saW8tXFx1MDAzZV9odWdldGxiX2h3cG9pc29uO1xcbi19XFxuLVxcbi1ib29sIGlzX3Jhd19od3BvaXNvbl9wYWdlX2luX2h1Z2VwYWdlKHN0cnVjdCBwYWdlICpwYWdlKVxcbi17XFxuLVxcdHN0cnVjdCBsbGlzdF9oZWFkICpyYXdfaHdwX2hlYWQ7XFxuLVxcdHN0cnVjdCByYXdfaHdwX3BhZ2UgKnA7XFxuLVxcdHN0cnVjdCBmb2xpbyAqZm9saW8gPSBwYWdlX2ZvbGlvKHBhZ2UpO1xcbi1cXHRib29sIHJldCA9IGZhbHNlO1xcbi1cXG4tXFx0aWYgKCFmb2xpb190ZXN0X2h3cG9pc29uKGZvbGlvKSlcXG4tXFx0XFx0cmV0dXJuIGZhbHNlO1xcbi1cXG4tXFx0aWYgKCFmb2xpb190ZXN0X2h1Z2V0bGIoZm9saW8pKVxcbi1cXHRcXHRyZXR1cm4gUGFnZUhXUG9pc29uKHBhZ2UpO1xcbitcXHRjb25zdCBzdHJ1Y3QgaHdwX3BhZ2UgKnA7XFxuK1xcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XFxuIFxcbiBcXHQvKlxcbi1cXHQgKiBXaGVuIFJhd0h3cFVucmVsaWFibGUgaXMgc2V0LCBrZXJuZWwgbG9zdCB0cmFjayBvZiB3aGljaCBzdWJwYWdlc1xcbi1cXHQgKiBhcmUgSFdQT0lTT04uIFNvIHJldHVybiBhcyBpZiBBTEwgc3VicGFnZXMgYXJlIEhXUE9JU09OZWQuXFxuK1xcdCAqIFdoZW4gUmF3SHdwVW5yZWxpYWJsZSBpcyBzZXQsIGtlcm5lbCBsb3N0IHRyYWNrIG9mIHdoaWNoIHBhZ2VzXFxuK1xcdCAqIGFyZSBIV1BPSVNPTi4gU28gcmV0dXJuIGFzIGlmIEFMTCBwYWdlcyBhcmUgSFdQT0lTT05lZC5cXG4gXFx0ICovXFxuIFxcdGlmIChmb2xpb190ZXN0X2h1Z2V0bGJfcmF3X2h3cF91bnJlbGlhYmxlKGZvbGlvKSlcXG4gXFx0XFx0cmV0dXJuIHRydWU7XFxuIFxcbi1cXHRtdXRleF9sb2NrKFxcdTAwMjZtZl9tdXRleCk7XFxuLVxcbi1cXHRyYXdfaHdwX2hlYWQgPSByYXdfaHdwX2xpc3RfaGVhZChmb2xpbyk7XFxuLVxcdGxsaXN0X2Zvcl9lYWNoX2VudHJ5KHAsIHJhd19od3BfaGVhZC1cXHUwMDNlZmlyc3QsIG5vZGUpIHtcXG4tXFx0XFx0aWYgKHBhZ2UgPT0gcC1cXHUwMDNlcGFnZSkge1xcbi1cXHRcXHRcXHRyZXQgPSB0cnVlO1xcbitcXHRzcGluX2xvY2tfaXJxc2F2ZShcXHUwMDI2aHdwX3BhZ2VfbG9jaywgZmxhZ3MpO1xcbitcXHRmb3IgKHAgPSBmb2xpby1cXHUwMDNlaHVnZXRsYl9od3BvaXNvbjsgcDsgcCA9IHAtXFx1MDAzZW5leHQpIHtcXG4rXFx0XFx0aWYgKHBhZ2UgPT0gcC1cXHUwMDNlcGFnZSlcXG4gXFx0XFx0XFx0YnJlYWs7XFxuLVxcdFxcdH1cXG4gXFx0fVxcbitcXHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFxcdTAwMjZod3BfcGFnZV9sb2NrLCBmbGFncyk7XFxuIFxcbi1cXHRtdXRleF91bmxvY2soXFx1MDAyNm1mX211dGV4KTtcXG4rXFx0cmV0dXJuIHAgIT0gTlVMTDtcXG4rfVxcbiBcXG4rLypcXG4rICogQ2hlY2sgaWYgYSBnaXZlbiBAcGFnZSBpbiBhIGh1Z2V0bGIgZm9saW8gaXMgSFdQT0lTT04uXFxuKyAqL1xcbitib29sIGh1Z2V0bGJfcGFnZV9od3BvaXNvbihjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvLCBjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSlcXG4re1xcbitcXHRpZiAoIWZvbGlvX3Rlc3RfaGFzX2h3cG9pc29uZWQoZm9saW8pKVxcbitcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcbitcXHRyZXR1cm4gcHJlY2lzZV9wYWdlX3BvaXNvbmVkKGZvbGlvLCBwYWdlKTtcXG4rfVxcbitcXG4rLypcXG4rICogV2UgaGF2ZSBubyByZWZlcmVuY2Ugb24gdGhlIGZvbGlvIGNvbnRhaW5pbmcgdGhpcyBwYWdlLlxcbisgKiBUaGUgaHVnZXRsYl9sb2NrIGtlZXBzIGh1Z2V0bGIgZm9saW9zIGZyb20gYmVpbmcgZnJlZWQuXFxuKyAqL1xcbitib29sIGh1Z2V0bGJfdW5yZWZfcGFnZV9od3BvaXNvbihjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSlcXG4re1xcbitcXHRjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvO1xcbitcXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xcbitcXHRib29sIHJldDtcXG4rXFxuK1xcdHNwaW5fbG9ja19pcnFzYXZlKFxcdTAwMjZodWdldGxiX2xvY2ssIGZsYWdzKTtcXG4rXFx0Zm9saW8gPSBwYWdlX2ZvbGlvKHBhZ2UpO1xcbitcXHRpZiAoIWZvbGlvX3Rlc3RfaHVnZV9wb2lzb24oZm9saW8pKSB7XFxuK1xcdFxcdHJldCA9IFBhZ2VIV1BvaXNvbihwYWdlKTtcXG4rXFx0XFx0Z290byB1bmxvY2s7XFxuK1xcdH1cXG4rXFxuK1xcdHJldCA9IHByZWNpc2VfcGFnZV9wb2lzb25lZChmb2xpbywgcGFnZSk7XFxuK3VubG9jazpcXG4rXFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcXHUwMDI2aHVnZXRsYl9sb2NrLCBmbGFncyk7XFxuIFxcdHJldHVybiByZXQ7XFxuIH1cXG4gXFxuIHN0YXRpYyB1bnNpZ25lZCBsb25nIF9fZm9saW9fZnJlZV9yYXdfaHdwKHN0cnVjdCBmb2xpbyAqZm9saW8sIGJvb2wgbW92ZV9mbGFnKVxcbiB7XFxuLVxcdHN0cnVjdCBsbGlzdF9ub2RlICpoZWFkO1xcbi1cXHRzdHJ1Y3QgcmF3X2h3cF9wYWdlICpwLCAqbmV4dDtcXG4rXFx0c3RydWN0IGh3cF9wYWdlICpwLCAqbmV4dDtcXG4gXFx0dW5zaWduZWQgbG9uZyBjb3VudCA9IDA7XFxuIFxcbi1cXHRoZWFkID0gbGxpc3RfZGVsX2FsbChyYXdfaHdwX2xpc3RfaGVhZChmb2xpbykpO1xcbi1cXHRsbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHAsIG5leHQsIGhlYWQsIG5vZGUpIHtcXG4rXFx0bmV4dCA9IGZvbGlvLVxcdTAwM2VodWdldGxiX2h3cG9pc29uO1xcbitcXHRmb2xpby1cXHUwMDNlaHVnZXRsYl9od3BvaXNvbiA9IE5VTEw7XFxuK1xcbitcXHR3aGlsZSAobmV4dCkge1xcbitcXHRcXHRwID0gbmV4dDtcXG4rXFx0XFx0bmV4dCA9IHAtXFx1MDAzZW5leHQ7XFxuIFxcdFxcdGlmIChtb3ZlX2ZsYWcpXFxuIFxcdFxcdFxcdFNldFBhZ2VIV1BvaXNvbihwLVxcdTAwM2VwYWdlKTtcXG4gXFx0XFx0ZWxzZVxcbkBAIC0xODgxLDM0ICsxOTA0LDU4IEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIF9fZm9saW9fZnJlZV9yYXdfaHdwKHN0cnVjdCBmb2xpbyAqZm9saW8sIGJvb2wgbW92ZV9mbGFnKVxcbiAjZGVmaW5lXFx0TUZfSFVHRVRMQl9GT0xJT19QUkVfUE9JU09ORURcXHQzXFx0LyogZm9saW8gYWxyZWFkeSBwb2lzb25lZCAqL1xcbiAjZGVmaW5lXFx0TUZfSFVHRVRMQl9QQUdFX1BSRV9QT0lTT05FRFxcdDRcXHQvKiBleGFjdCBwYWdlIGFscmVhZHkgcG9pc29uZWQgKi9cXG4gI2RlZmluZVxcdE1GX0hVR0VUTEJfUkVUUllcXHRcXHQ1XFx0LyogaHVnZXBhZ2UgaXMgYnVzeSwgcmV0cnkgKi9cXG4rXFxuK3N0YXRpYyBpbmxpbmUgaW50IGh1Z2V0bGJfc2V0X3BvaXNvbihzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbit7XFxuK1xcdGlmIChmb2xpb190ZXN0X3NldF9oYXNfaHdwb2lzb25lZChmb2xpbykpXFxuK1xcdFxcdHJldHVybiBNRl9IVUdFVExCX0ZPTElPX1BSRV9QT0lTT05FRDtcXG4rXFx0Zm9saW9fc2V0X2h1Z2VfcG9pc29uKGZvbGlvKTtcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3N0YXRpYyBpbmxpbmUgaW50IGh1Z2V0bGJfY2xlYXJfcG9pc29uKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuK3tcXG4rXFx0aWYgKCFmb2xpb190ZXN0X2hhc19od3BvaXNvbmVkKGZvbGlvKSlcXG4rXFx0XFx0cmV0dXJuIC1FQlVTWTtcXG4rXFx0Zm9saW9fY2xlYXJfaHVnZV9wb2lzb24oZm9saW8pO1xcbitcXHRmb2xpb19jbGVhcl9oYXNfaHdwb2lzb25lZChmb2xpbyk7XFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbiAvKlxcbiAgKiBTZXQgaHVnZXRsYiBmb2xpbyBhcyBod3BvaXNvbmVkLCB1cGRhdGUgZm9saW8gcHJpdmF0ZSByYXcgaHdwb2lzb24gbGlzdFxcbiAgKiB0byBrZWVwIHRyYWNrIG9mIHRoZSBwb2lzb25lZCBwYWdlcy5cXG4gICovXFxuIHN0YXRpYyBpbnQgaHVnZXRsYl91cGRhdGVfaHdwb2lzb24oc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHBhZ2UgKnBhZ2UpXFxuIHtcXG4tXFx0c3RydWN0IGxsaXN0X2hlYWQgKmhlYWQ7XFxuLVxcdHN0cnVjdCByYXdfaHdwX3BhZ2UgKnJhd19od3A7XFxuLVxcdHN0cnVjdCByYXdfaHdwX3BhZ2UgKnA7XFxuLVxcdGludCByZXQgPSBmb2xpb190ZXN0X3NldF9od3BvaXNvbihmb2xpbykgPyBNRl9IVUdFVExCX0ZPTElPX1BSRV9QT0lTT05FRCA6IDA7XFxuK1xcdHN0cnVjdCBod3BfcGFnZSAqcDtcXG4rXFx0dW5zaWduZWQgbG9uZyBmbGFncztcXG4rXFx0aW50IHJldCA9IGh1Z2V0bGJfc2V0X3BvaXNvbihmb2xpbyk7XFxuIFxcbiBcXHQvKlxcbiBcXHQgKiBPbmNlIHRoZSBod3BvaXNvbiBodWdlcGFnZSBoYXMgbG9zdCByZWxpYWJsZSByYXcgZXJyb3IgaW5mbyxcXG4tXFx0ICogdGhlcmUgaXMgbGl0dGxlIG1lYW5pbmcgdG8ga2VlcCBhZGRpdGlvbmFsIGVycm9yIGluZm8gcHJlY2lzZWx5LFxcbi1cXHQgKiBzbyBza2lwIHRvIGFkZCBhZGRpdGlvbmFsIHJhdyBlcnJvciBpbmZvLlxcbitcXHQgKiB0aGVyZSBpcyBubyBwb2ludCBpbiBrZWVwaW5nIGFkZGl0aW9uYWwgZXJyb3IgaW5mbyBwcmVjaXNlbHksXFxuK1xcdCAqIHNvIHNraXAgYWRkaW5nIGFkZGl0aW9uYWwgcmF3IGVycm9yIGluZm8uXFxuIFxcdCAqL1xcbiBcXHRpZiAoZm9saW9fdGVzdF9odWdldGxiX3Jhd19od3BfdW5yZWxpYWJsZShmb2xpbykpXFxuIFxcdFxcdHJldHVybiBNRl9IVUdFVExCX0ZPTElPX1BSRV9QT0lTT05FRDtcXG4tXFx0aGVhZCA9IHJhd19od3BfbGlzdF9oZWFkKGZvbGlvKTtcXG4tXFx0bGxpc3RfZm9yX2VhY2hfZW50cnkocCwgaGVhZC1cXHUwMDNlZmlyc3QsIG5vZGUpIHtcXG4rXFxuK1xcdHNwaW5fbG9ja19pcnFzYXZlKFxcdTAwMjZod3BfcGFnZV9sb2NrLCBmbGFncyk7XFxuK1xcdGZvciAocCA9IGZvbGlvLVxcdTAwM2VodWdldGxiX2h3cG9pc29uOyBwOyBwID0gcC1cXHUwMDNlbmV4dCkge1xcbiBcXHRcXHRpZiAocC1cXHUwMDNlcGFnZSA9PSBwYWdlKVxcbi1cXHRcXHRcXHRyZXR1cm4gTUZfSFVHRVRMQl9QQUdFX1BSRV9QT0lTT05FRDtcXG4rXFx0XFx0XFx0YnJlYWs7XFxuK1xcdH1cXG4rXFxuK1xcdGlmIChwKSB7XFxuK1xcdFxcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXFx1MDAyNmh3cF9wYWdlX2xvY2ssIGZsYWdzKTtcXG4rXFx0XFx0cmV0dXJuIE1GX0hVR0VUTEJfUEFHRV9QUkVfUE9JU09ORUQ7XFxuIFxcdH1cXG4gXFxuLVxcdHJhd19od3AgPSBrbWFsbG9jX29iaihzdHJ1Y3QgcmF3X2h3cF9wYWdlLCBHRlBfQVRPTUlDKTtcXG4tXFx0aWYgKHJhd19od3ApIHtcXG4tXFx0XFx0cmF3X2h3cC1cXHUwMDNlcGFnZSA9IHBhZ2U7XFxuLVxcdFxcdGxsaXN0X2FkZChcXHUwMDI2cmF3X2h3cC1cXHUwMDNlbm9kZSwgaGVhZCk7XFxuK1xcdHAgPSBrbWFsbG9jX29iaigqcCwgR0ZQX0FUT01JQyk7XFxuK1xcdGlmIChwKSB7XFxuK1xcdFxcdHAtXFx1MDAzZXBhZ2UgPSBwYWdlO1xcbitcXHRcXHRwLVxcdTAwM2VuZXh0ID0gZm9saW8tXFx1MDAzZWh1Z2V0bGJfaHdwb2lzb247XFxuK1xcdFxcdGZvbGlvLVxcdTAwM2VodWdldGxiX2h3cG9pc29uID0gcDtcXG4gXFx0fSBlbHNlIHtcXG4gXFx0XFx0LypcXG4gXFx0XFx0ICogRmFpbGVkIHRvIHNhdmUgcmF3IGVycm9yIGluZm8uICBXZSBubyBsb25nZXIgdHJhY2UgYWxsXFxuQEAgLTE5MTcsMTYgKzE5NjQsMjAgQEAgc3RhdGljIGludCBodWdldGxiX3VwZGF0ZV9od3BvaXNvbihzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgcGFnZSAqcGFnZSlcXG4gXFx0XFx0ICovXFxuIFxcdFxcdGZvbGlvX3NldF9odWdldGxiX3Jhd19od3BfdW5yZWxpYWJsZShmb2xpbyk7XFxuIFxcdFxcdC8qXFxuLVxcdFxcdCAqIE9uY2UgaHVnZXRsYl9yYXdfaHdwX3VucmVsaWFibGUgaXMgc2V0LCByYXdfaHdwX3BhZ2UgaXMgbm90XFxuK1xcdFxcdCAqIE9uY2UgaHVnZXRsYl9yYXdfaHdwX3VucmVsaWFibGUgaXMgc2V0LCBod3BfcGFnZSBpcyBub3RcXG4gXFx0XFx0ICogdXNlZCBhbnkgbW9yZSwgc28gZnJlZSBpdC5cXG4gXFx0XFx0ICovXFxuIFxcdFxcdF9fZm9saW9fZnJlZV9yYXdfaHdwKGZvbGlvLCBmYWxzZSk7XFxuIFxcdH1cXG4rXFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcXHUwMDI2aHdwX3BhZ2VfbG9jaywgZmxhZ3MpO1xcbiBcXHRyZXR1cm4gcmV0O1xcbiB9XFxuIFxcbiBzdGF0aWMgdW5zaWduZWQgbG9uZyBmb2xpb19mcmVlX3Jhd19od3Aoc3RydWN0IGZvbGlvICpmb2xpbywgYm9vbCBtb3ZlX2ZsYWcpXFxuIHtcXG4rXFx0dW5zaWduZWQgbG9uZyBjb3VudDtcXG4rXFx0dW5zaWduZWQgbG9uZyBmbGFncztcXG4rXFxuIFxcdC8qXFxuIFxcdCAqIGh1Z2V0bGJfdm1lbW1hcF9vcHRpbWl6ZWQgaHVnZXBhZ2VzIGNhbid0IGJlIGZyZWVkIGJlY2F1c2Ugc3RydWN0XFxuIFxcdCAqIHBhZ2VzIGZvciB0YWlsIHBhZ2VzIGFyZSByZXF1aXJlZCBidXQgdGhleSBkb24ndCBleGlzdC5cXG5AQCAtMTk0MSw3ICsxOTkyLDExIEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIGZvbGlvX2ZyZWVfcmF3X2h3cChzdHJ1Y3QgZm9saW8gKmZvbGlvLCBib29sIG1vdmVfZmxhZylcXG4gXFx0aWYgKGZvbGlvX3Rlc3RfaHVnZXRsYl9yYXdfaHdwX3VucmVsaWFibGUoZm9saW8pKVxcbiBcXHRcXHRyZXR1cm4gMDtcXG4gXFxuLVxcdHJldHVybiBfX2ZvbGlvX2ZyZWVfcmF3X2h3cChmb2xpbywgbW92ZV9mbGFnKTtcXG4rXFx0c3Bpbl9sb2NrX2lycXNhdmUoXFx1MDAyNmh3cF9wYWdlX2xvY2ssIGZsYWdzKTtcXG4rXFx0Y291bnQgPSBfX2ZvbGlvX2ZyZWVfcmF3X2h3cChmb2xpbywgbW92ZV9mbGFnKTtcXG4rXFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcXHUwMDI2aHdwX3BhZ2VfbG9jaywgZmxhZ3MpO1xcbitcXG4rXFx0cmV0dXJuIGNvdW50O1xcbiB9XFxuIFxcbiB2b2lkIGZvbGlvX2NsZWFyX2h1Z2V0bGJfaHdwb2lzb24oc3RydWN0IGZvbGlvICpmb2xpbylcXG5AQCAtMTk1MCw4ICsyMDA1LDggQEAgdm9pZCBmb2xpb19jbGVhcl9odWdldGxiX2h3cG9pc29uKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuIFxcdFxcdHJldHVybjtcXG4gXFx0aWYgKGZvbGlvX3Rlc3RfaHVnZXRsYl92bWVtbWFwX29wdGltaXplZChmb2xpbykpXFxuIFxcdFxcdHJldHVybjtcXG4tXFx0Zm9saW9fY2xlYXJfaHdwb2lzb24oZm9saW8pO1xcbiBcXHRmb2xpb19mcmVlX3Jhd19od3AoZm9saW8sIHRydWUpO1xcbitcXHRmb2xpb19jbGVhcl9oYXNfaHdwb2lzb25lZChmb2xpbyk7XFxuIH1cXG4gXFxuIHN0YXRpYyBpbnQgZ2V0X2h1Z2VfcGFnZV9mb3JfaHdwb2lzb24odW5zaWduZWQgbG9uZyBwZm4sIGludCBmbGFncyxcXG5AQCAtMjEwNCw2ICsyMTU5LDExIEBAIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBmb2xpb19mcmVlX3Jhd19od3Aoc3RydWN0IGZvbGlvICpmb2xpbywgYm9vbCBmbGFnKVxcbiB7XFxuIFxcdHJldHVybiAwO1xcbiB9XFxuK1xcbitzdGF0aWMgaW5saW5lIGludCBodWdldGxiX2NsZWFyX3BvaXNvbihzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbit7XFxuK1xcdHJldHVybiAwO1xcbit9XFxuICNlbmRpZlxcdC8qIENPTkZJR19IVUdFVExCX1BBR0UgKi9cXG4gXFxuIC8qIERyb3AgdGhlIGV4dHJhIHJlZmNvdW50IGluIGNhc2Ugd2UgY29tZSBmcm9tIG1hZHZpc2UoKSAqL1xcbkBAIC0yNjk1LDggKzI3NTUsOCBAQCBpbnQgdW5wb2lzb25fbWVtb3J5KHVuc2lnbmVkIGxvbmcgcGZuKVxcbiBcXHRcXHRnb3RvIHVubG9ja19tdXRleDtcXG4gXFx0fVxcbiBcXG4tXFx0aWYgKCFQYWdlSFdQb2lzb24ocCkpIHtcXG4tXFx0XFx0dW5wb2lzb25fcHJfaW5mbyhcXFwiJSNseDogcGFnZSB3YXMgYWxyZWFkeSB1bnBvaXNvbmVkXFxcXG5cXFwiLFxcbitcXHRpZiAoIWlzX3BhZ2VfaHdwb2lzb24ocCkpIHtcXG4rXFx0XFx0dW5wb2lzb25fcHJfaW5mbyhcXFwiJSNseDogcGFnZSBpcyBub3QgcG9pc29uZWRcXFxcblxcXCIsXFxuIFxcdFxcdFxcdFxcdCBwZm4sIFxcdTAwMjZ1bnBvaXNvbl9ycyk7XFxuIFxcdFxcdGdvdG8gdW5sb2NrX211dGV4O1xcbiBcXHR9XFxuQEAgLTI3MzAsOCArMjc5MCw4IEBAIGludCB1bnBvaXNvbl9tZW1vcnkodW5zaWduZWQgbG9uZyBwZm4pXFxuIFxcdFxcdFxcdGNvdW50ID0gZm9saW9fZnJlZV9yYXdfaHdwKGZvbGlvLCBmYWxzZSk7XFxuIFxcdFxcdFxcdGlmIChjb3VudCA9PSAwKVxcbiBcXHRcXHRcXHRcXHRnb3RvIHVubG9ja19tdXRleDtcXG4rXFx0XFx0XFx0cmV0ID0gaHVnZXRsYl9jbGVhcl9wb2lzb24oZm9saW8pO1xcbiBcXHRcXHR9XFxuLVxcdFxcdHJldCA9IGZvbGlvX3Rlc3RfY2xlYXJfaHdwb2lzb24oZm9saW8pID8gMCA6IC1FQlVTWTtcXG4gXFx0fSBlbHNlIGlmIChnaHAgXFx1MDAzYyAwKSB7XFxuIFxcdFxcdGlmIChnaHAgPT0gLUVIV1BPSVNPTikge1xcbiBcXHRcXHRcXHRyZXQgPSBwdXRfcGFnZV9iYWNrX2J1ZGR5KHApID8gMCA6IC1FQlVTWTtcXG5AQCAtMjc0MCwxNiArMjgwMCwxOCBAQCBpbnQgdW5wb2lzb25fbWVtb3J5KHVuc2lnbmVkIGxvbmcgcGZuKVxcbiBcXHRcXHRcXHR1bnBvaXNvbl9wcl9pbmZvKFxcXCIlI2x4OiBmYWlsZWQgdG8gZ3JhYiBwYWdlXFxcXG5cXFwiLFxcbiBcXHRcXHRcXHRcXHRcXHQgcGZuLCBcXHUwMDI2dW5wb2lzb25fcnMpO1xcbiBcXHRcXHR9XFxuLVxcdH0gZWxzZSB7XFxuLVxcdFxcdGlmIChmb2xpb190ZXN0X2h1Z2V0bGIoZm9saW8pKSB7XFxuLVxcdFxcdFxcdGh1Z2UgPSB0cnVlO1xcbi1cXHRcXHRcXHRjb3VudCA9IGZvbGlvX2ZyZWVfcmF3X2h3cChmb2xpbywgZmFsc2UpO1xcbi1cXHRcXHRcXHRpZiAoY291bnQgPT0gMCkge1xcbi1cXHRcXHRcXHRcXHRmb2xpb19wdXQoZm9saW8pO1xcbi1cXHRcXHRcXHRcXHRnb3RvIHVubG9ja19tdXRleDtcXG4tXFx0XFx0XFx0fVxcbitcXHR9IGVsc2UgaWYgKGZvbGlvX3Rlc3RfaHVnZXRsYihmb2xpbykpIHtcXG4rXFx0XFx0aHVnZSA9IHRydWU7XFxuK1xcdFxcdGNvdW50ID0gZm9saW9fZnJlZV9yYXdfaHdwKGZvbGlvLCBmYWxzZSk7XFxuK1xcdFxcdGlmIChjb3VudCA9PSAwKSB7XFxuK1xcdFxcdFxcdGZvbGlvX3B1dChmb2xpbyk7XFxuK1xcdFxcdFxcdGdvdG8gdW5sb2NrX211dGV4O1xcbiBcXHRcXHR9XFxuLVxcbitcXHRcXHRmb2xpb19wdXQoZm9saW8pO1xcbitcXHRcXHRyZXQgPSBodWdldGxiX2NsZWFyX3BvaXNvbihmb2xpbyk7XFxuK1xcdFxcdGlmICghcmV0KVxcbitcXHRcXHRcXHRmb2xpb19wdXQoZm9saW8pO1xcbitcXHR9IGVsc2Uge1xcbiBcXHRcXHRmb2xpb19wdXQoZm9saW8pO1xcbiBcXHRcXHRpZiAoVGVzdENsZWFyUGFnZUhXUG9pc29uKHApKSB7XFxuIFxcdFxcdFxcdGZvbGlvX3B1dChmb2xpbyk7XFxuZGlmZiAtLWdpdCBhL21tL21lbW9yeV9ob3RwbHVnLmMgYi9tbS9tZW1vcnlfaG90cGx1Zy5jXFxuaW5kZXggN2FjMTlmYWIyMjYzMjQuLjMzMDA3ZThlNTQ2YTA5IDEwMDY0NFxcbi0tLSBhL21tL21lbW9yeV9ob3RwbHVnLmNcXG4rKysgYi9tbS9tZW1vcnlfaG90cGx1Zy5jXFxuQEAgLTE4MTMsNyArMTgxMyw3IEBAIHN0YXRpYyB2b2lkIGRvX21pZ3JhdGVfcmFuZ2UodW5zaWduZWQgbG9uZyBzdGFydF9wZm4sIHVuc2lnbmVkIGxvbmcgZW5kX3BmbilcXG4gXFx0XFx0aWYgKGZvbGlvX3Rlc3RfbGFyZ2UoZm9saW8pKVxcbiBcXHRcXHRcXHRwZm4gPSBmb2xpb19wZm4oZm9saW8pICsgZm9saW9fbnJfcGFnZXMoZm9saW8pIC0gMTtcXG4gXFxuLVxcdFxcdGlmIChmb2xpb19jb250YWluX2h3cG9pc29uZWRfcGFnZShmb2xpbykpIHtcXG4rXFx0XFx0aWYgKGZvbGlvX2hhc19od3BvaXNvbmVkX3BhZ2UoZm9saW8pKSB7XFxuIFxcdFxcdFxcdC8qXFxuIFxcdFxcdFxcdCAqIHVubWFwX3BvaXNvbmVkX2ZvbGlvKCkgY2Fubm90IGhhbmRsZSBsYXJnZSBmb2xpb3NcXG4gXFx0XFx0XFx0ICogaW4gYWxsIGNhc2VzIHlldC5cXG5kaWZmIC0tZ2l0IGEvbW0vcm1hcC5jIGIvbW0vcm1hcC5jXFxuaW5kZXggMWM3N2Q1ZGMwNmU5ZmEuLmZkMTlhMGJmYmZlNzZjIDEwMDY0NFxcbi0tLSBhL21tL3JtYXAuY1xcbisrKyBiL21tL3JtYXAuY1xcbkBAIC0xOTc4LDYgKzE5NzgsMjIgQEAgc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgZm9saW9fdW5tYXBfcHRlX2JhdGNoKHN0cnVjdCBmb2xpbyAqZm9saW8sXFxuIFxcdFxcdFxcdFxcdCAgICAgRlBCX1JFU1BFQ1RfV1JJVEUgfCBGUEJfUkVTUEVDVF9TT0ZUX0RJUlRZKTtcXG4gfVxcbiBcXG4rLypcXG4rICogU2luY2Ugd2UgY2Fubm90IHNwbGl0IGEgaHVnZXRsYiBmb2xpbywgd2Ugd2FudCB0byBpbnNlcnQgYSBwb2lzb25cXG4rICogZW50cnkgaW50byB0aGUgcGFnZSB0YWJsZSBmb3IgdGhlIHdob2xlIGZvbGlvIGV2ZW4gaWYgb25seSBvbmUgcGFnZVxcbisgKiBpcyBwb2lzb25lZC4gIE90aGVyd2lzZSwgd2UndmUgc3BsaXQgZG93biB0byB0aGUgUFRFIGxldmVsIGFuZCB3ZSBvbmx5XFxuKyAqIHdhbnQgdG8gcG9pc29uIHRoZSBwcmVjaXNlIHBhZ2VcXG4rICovXFxuK3N0YXRpYyBib29sIHR0dV9jcmVhdGVfaHdwb2lzb24oY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbyxcXG4rXFx0XFx0Y29uc3Qgc3RydWN0IHBhZ2UgKnBhZ2UsIGVudW0gdHR1X2ZsYWdzIGZsYWdzKVxcbit7XFxuK1xcdGlmICghKGZsYWdzIFxcdTAwMjYgVFRVX0hXUE9JU09OKSlcXG4rXFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXHRpZiAoZm9saW9fdGVzdF9odWdldGxiKGZvbGlvKSlcXG4rXFx0XFx0cmV0dXJuIGZvbGlvX3Rlc3RfaGFzX2h3cG9pc29uZWQoZm9saW8pO1xcbitcXHRyZXR1cm4gUGFnZUhXUG9pc29uKHBhZ2UpO1xcbit9XFxuK1xcbiAvKlxcbiAgKiBAYXJnOiBlbnVtIHR0dV9mbGFncyB3aWxsIGJlIHBhc3NlZCB0byB0aGlzIGFyZ3VtZW50XFxuICAqL1xcbkBAIC0xOTkzLDcgKzIwMDksNiBAQCBzdGF0aWMgYm9vbCB0cnlfdG9fdW5tYXBfb25lKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbiBcXHRlbnVtIHR0dV9mbGFncyBmbGFncyA9IChlbnVtIHR0dV9mbGFncykobG9uZylhcmc7XFxuIFxcdHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMgPSAxLCBlbmRfYWRkcjtcXG4gXFx0dW5zaWduZWQgbG9uZyBwZm47XFxuLVxcdHVuc2lnbmVkIGxvbmcgaHN6ID0gMDtcXG4gXFx0aW50IHB0ZXMgPSAwO1xcbiBcXG4gXFx0LypcXG5AQCAtMjAyMyw5ICsyMDM4LDYgQEAgc3RhdGljIGJvb2wgdHJ5X3RvX3VubWFwX29uZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4gXFx0XFx0ICovXFxuIFxcdFxcdGFkanVzdF9yYW5nZV9pZl9wbWRfc2hhcmluZ19wb3NzaWJsZSh2bWEsIFxcdTAwMjZyYW5nZS5zdGFydCxcXG4gXFx0XFx0XFx0XFx0XFx0XFx0ICAgICBcXHUwMDI2cmFuZ2UuZW5kKTtcXG4tXFxuLVxcdFxcdC8qIFdlIG5lZWQgdGhlIGh1Z2UgcGFnZSBzaXplIGZvciBzZXRfaHVnZV9wdGVfYXQoKSAqL1xcbi1cXHRcXHRoc3ogPSBodWdlX3BhZ2Vfc2l6ZShoc3RhdGVfdm1hKHZtYSkpO1xcbiBcXHR9XFxuIFxcdG1tdV9ub3RpZmllcl9pbnZhbGlkYXRlX3JhbmdlX3N0YXJ0KFxcdTAwMjZyYW5nZSk7XFxuIFxcbkBAIC0yMTIxLDcgKzIxMzMsOCBAQCBzdGF0aWMgYm9vbCB0cnlfdG9fdW5tYXBfb25lKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbiBcXHRcXHRcXHQgKiBUaGUgdHJ5X3RvX3VubWFwKCkgaXMgb25seSBwYXNzZWQgYSBodWdldGxiIHBhZ2VcXG4gXFx0XFx0XFx0ICogaW4gdGhlIGNhc2Ugd2hlcmUgdGhlIGh1Z2V0bGIgcGFnZSBpcyBwb2lzb25lZC5cXG4gXFx0XFx0XFx0ICovXFxuLVxcdFxcdFxcdFZNX0JVR19PTl9QQUdFKCFQYWdlSFdQb2lzb24oc3VicGFnZSksIHN1YnBhZ2UpO1xcbitcXHRcXHRcXHRWTV9CVUdfT05fRk9MSU8oIWZvbGlvX2hhc19od3BvaXNvbmVkX3BhZ2UoZm9saW8pLFxcbitcXHRcXHRcXHRcXHRcXHRmb2xpbyk7XFxuIFxcdFxcdFxcdC8qXFxuIFxcdFxcdFxcdCAqIGh1Z2VfcG1kX3Vuc2hhcmUgbWF5IHVubWFwIGFuIGVudGlyZSBQTUQgcGFnZS5cXG4gXFx0XFx0XFx0ICogVGhlcmUgaXMgbm8gd2F5IG9mIGtub3dpbmcgZXhhY3RseSB3aGljaCBQTURzIG1heVxcbkBAIC0yMjAwLDEyICsyMjEzLDEyIEBAIHN0YXRpYyBib29sIHRyeV90b191bm1hcF9vbmUoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuIFxcdFxcdC8qIFVwZGF0ZSBoaWdoIHdhdGVybWFyayBiZWZvcmUgd2UgbG93ZXIgcnNzICovXFxuIFxcdFxcdHVwZGF0ZV9oaXdhdGVyX3JzcyhtbSk7XFxuIFxcbi1cXHRcXHRpZiAoUGFnZUhXUG9pc29uKHN1YnBhZ2UpIFxcdTAwMjZcXHUwMDI2IChmbGFncyBcXHUwMDI2IFRUVV9IV1BPSVNPTikpIHtcXG4rXFx0XFx0aWYgKHR0dV9jcmVhdGVfaHdwb2lzb24oZm9saW8sIHN1YnBhZ2UsIGZsYWdzKSkge1xcbiBcXHRcXHRcXHRwdGV2YWwgPSBzd3BfZW50cnlfdG9fcHRlKG1ha2VfaHdwb2lzb25fZW50cnkoc3VicGFnZSkpO1xcbiBcXHRcXHRcXHRpZiAoZm9saW9fdGVzdF9odWdldGxiKGZvbGlvKSkge1xcbiBcXHRcXHRcXHRcXHRodWdldGxiX2NvdW50X3N1Yihmb2xpb19ucl9wYWdlcyhmb2xpbyksIG1tKTtcXG4gXFx0XFx0XFx0XFx0c2V0X2h1Z2VfcHRlX2F0KG1tLCBhZGRyZXNzLCBwdm13LnB0ZSwgcHRldmFsLFxcbi1cXHRcXHRcXHRcXHRcXHRcXHRoc3opO1xcbitcXHRcXHRcXHRcXHRcXHRcXHRmb2xpb19zaXplKGZvbGlvKSk7XFxuIFxcdFxcdFxcdH0gZWxzZSB7XFxuIFxcdFxcdFxcdFxcdGRlY19tbV9jb3VudGVyKG1tLCBtbV9jb3VudGVyKGZvbGlvKSk7XFxuIFxcdFxcdFxcdFxcdHNldF9wdGVfYXQobW0sIGFkZHJlc3MsIHB2bXcucHRlLCBwdGV2YWwpO1xcbkBAIC0yNDIzLDcgKzI0MzYsNiBAQCBzdGF0aWMgYm9vbCB0cnlfdG9fbWlncmF0ZV9vbmUoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuIFxcdHN0cnVjdCBtbXVfbm90aWZpZXJfcmFuZ2UgcmFuZ2U7XFxuIFxcdGVudW0gdHR1X2ZsYWdzIGZsYWdzID0gKGVudW0gdHR1X2ZsYWdzKShsb25nKWFyZztcXG4gXFx0dW5zaWduZWQgbG9uZyBwZm47XFxuLVxcdHVuc2lnbmVkIGxvbmcgaHN6ID0gMDtcXG4gXFxuIFxcdC8qXFxuIFxcdCAqIFdoZW4gcmFjaW5nIGFnYWluc3QgZS5nLiB6YXBfcHRlX3JhbmdlKCkgb24gYW5vdGhlciBjcHUsXFxuQEAgLTI0NTIsOSArMjQ2NCw2IEBAIHN0YXRpYyBib29sIHRyeV90b19taWdyYXRlX29uZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4gXFx0XFx0ICovXFxuIFxcdFxcdGFkanVzdF9yYW5nZV9pZl9wbWRfc2hhcmluZ19wb3NzaWJsZSh2bWEsIFxcdTAwMjZyYW5nZS5zdGFydCxcXG4gXFx0XFx0XFx0XFx0XFx0XFx0ICAgICBcXHUwMDI2cmFuZ2UuZW5kKTtcXG4tXFxuLVxcdFxcdC8qIFdlIG5lZWQgdGhlIGh1Z2UgcGFnZSBzaXplIGZvciBzZXRfaHVnZV9wdGVfYXQoKSAqL1xcbi1cXHRcXHRoc3ogPSBodWdlX3BhZ2Vfc2l6ZShoc3RhdGVfdm1hKHZtYSkpO1xcbiBcXHR9XFxuIFxcdG1tdV9ub3RpZmllcl9pbnZhbGlkYXRlX3JhbmdlX3N0YXJ0KFxcdTAwMjZyYW5nZSk7XFxuIFxcbkBAIC0yNjA3LDE0ICsyNjE2LDE0IEBAIHN0YXRpYyBib29sIHRyeV90b19taWdyYXRlX29uZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4gXFx0XFx0LyogVXBkYXRlIGhpZ2ggd2F0ZXJtYXJrIGJlZm9yZSB3ZSBsb3dlciByc3MgKi9cXG4gXFx0XFx0dXBkYXRlX2hpd2F0ZXJfcnNzKG1tKTtcXG4gXFxuLVxcdFxcdGlmIChQYWdlSFdQb2lzb24oc3VicGFnZSkpIHtcXG4rXFx0XFx0aWYgKHR0dV9jcmVhdGVfaHdwb2lzb24oZm9saW8sIHN1YnBhZ2UsIFRUVV9IV1BPSVNPTikpIHtcXG4gXFx0XFx0XFx0Vk1fV0FSTl9PTl9GT0xJTyhmb2xpb19pc19kZXZpY2VfcHJpdmF0ZShmb2xpbyksIGZvbGlvKTtcXG4gXFxuIFxcdFxcdFxcdHB0ZXZhbCA9IHN3cF9lbnRyeV90b19wdGUobWFrZV9od3BvaXNvbl9lbnRyeShzdWJwYWdlKSk7XFxuIFxcdFxcdFxcdGlmIChmb2xpb190ZXN0X2h1Z2V0bGIoZm9saW8pKSB7XFxuIFxcdFxcdFxcdFxcdGh1Z2V0bGJfY291bnRfc3ViKGZvbGlvX25yX3BhZ2VzKGZvbGlvKSwgbW0pO1xcbiBcXHRcXHRcXHRcXHRzZXRfaHVnZV9wdGVfYXQobW0sIGFkZHJlc3MsIHB2bXcucHRlLCBwdGV2YWwsXFxuLVxcdFxcdFxcdFxcdFxcdFxcdGhzeik7XFxuK1xcdFxcdFxcdFxcdFxcdFxcdGZvbGlvX3NpemUoZm9saW8pKTtcXG4gXFx0XFx0XFx0fSBlbHNlIHtcXG4gXFx0XFx0XFx0XFx0ZGVjX21tX2NvdW50ZXIobW0sIG1tX2NvdW50ZXIoZm9saW8pKTtcXG4gXFx0XFx0XFx0XFx0c2V0X3B0ZV9hdChtbSwgYWRkcmVzcywgcHZtdy5wdGUsIHB0ZXZhbCk7XFxuQEAgLTI2NDQsNyArMjY1Myw4IEBAIHN0YXRpYyBib29sIHRyeV90b19taWdyYXRlX29uZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4gXFx0XFx0XFx0aWYgKGFyY2hfdW5tYXBfb25lKG1tLCB2bWEsIGFkZHJlc3MsIHB0ZXZhbCkgXFx1MDAzYyAwKSB7XFxuIFxcdFxcdFxcdFxcdGlmIChmb2xpb190ZXN0X2h1Z2V0bGIoZm9saW8pKVxcbiBcXHRcXHRcXHRcXHRcXHRzZXRfaHVnZV9wdGVfYXQobW0sIGFkZHJlc3MsIHB2bXcucHRlLFxcbi1cXHRcXHRcXHRcXHRcXHRcXHRcXHRwdGV2YWwsIGhzeik7XFxuK1xcdFxcdFxcdFxcdFxcdFxcdFxcdHB0ZXZhbCxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0XFx0Zm9saW9fc2l6ZShmb2xpbykpO1xcbiBcXHRcXHRcXHRcXHRlbHNlXFxuIFxcdFxcdFxcdFxcdFxcdHNldF9wdGVfYXQobW0sIGFkZHJlc3MsIHB2bXcucHRlLCBwdGV2YWwpO1xcbiBcXHRcXHRcXHRcXHRyZXQgPSBmYWxzZTtcXG5AQCAtMjY1Nyw3ICsyNjY3LDggQEAgc3RhdGljIGJvb2wgdHJ5X3RvX21pZ3JhdGVfb25lKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbiBcXHRcXHRcXHRcXHRpZiAoYW5vbl9leGNsdXNpdmUgXFx1MDAyNlxcdTAwMjZcXG4gXFx0XFx0XFx0XFx0ICAgIGh1Z2V0bGJfdHJ5X3NoYXJlX2Fub25fcm1hcChmb2xpbykpIHtcXG4gXFx0XFx0XFx0XFx0XFx0c2V0X2h1Z2VfcHRlX2F0KG1tLCBhZGRyZXNzLCBwdm13LnB0ZSxcXG4tXFx0XFx0XFx0XFx0XFx0XFx0XFx0cHRldmFsLCBoc3opO1xcbitcXHRcXHRcXHRcXHRcXHRcXHRcXHRwdGV2YWwsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdFxcdGZvbGlvX3NpemUoZm9saW8pKTtcXG4gXFx0XFx0XFx0XFx0XFx0cmV0ID0gZmFsc2U7XFxuIFxcdFxcdFxcdFxcdFxcdHBhZ2Vfdm1hX21hcHBlZF93YWxrX2RvbmUoXFx1MDAyNnB2bXcpO1xcbiBcXHRcXHRcXHRcXHRcXHRicmVhaztcXG5AQCAtMjcwMyw3ICsyNzE0LDcgQEAgc3RhdGljIGJvb2wgdHJ5X3RvX21pZ3JhdGVfb25lKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbiBcXHRcXHRcXHR9XFxuIFxcdFxcdFxcdGlmIChmb2xpb190ZXN0X2h1Z2V0bGIoZm9saW8pKVxcbiBcXHRcXHRcXHRcXHRzZXRfaHVnZV9wdGVfYXQobW0sIGFkZHJlc3MsIHB2bXcucHRlLCBzd3BfcHRlLFxcbi1cXHRcXHRcXHRcXHRcXHRcXHRoc3opO1xcbitcXHRcXHRcXHRcXHRcXHRcXHRmb2xpb19zaXplKGZvbGlvKSk7XFxuIFxcdFxcdFxcdGVsc2VcXG4gXFx0XFx0XFx0XFx0c2V0X3B0ZV9hdChtbSwgYWRkcmVzcywgcHZtdy5wdGUsIHN3cF9wdGUpO1xcbiBcXHRcXHRcXHR0cmFjZV9zZXRfbWlncmF0aW9uX3B0ZShhZGRyZXNzLCBwdGVfdmFsKHN3cF9wdGUpLFxcbmRpZmYgLS1naXQgYS9tbS9zaG1lbS5jIGIvbW0vc2htZW0uY1xcbmluZGV4IGI1MWY4M2M5NzBiYjM3Li40OTJjOWJlZjM2MjA3NCAxMDA2NDRcXG4tLS0gYS9tbS9zaG1lbS5jXFxuKysrIGIvbW0vc2htZW0uY1xcbkBAIC0zMjQwLDcgKzMyNDAsNyBAQCBzaG1lbV93cml0ZV9iZWdpbihjb25zdCBzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxcbiBcXHRpZiAocmV0KVxcbiBcXHRcXHRyZXR1cm4gcmV0O1xcbiBcXG4tXFx0aWYgKGZvbGlvX2NvbnRhaW5faHdwb2lzb25lZF9wYWdlKGZvbGlvKSkge1xcbitcXHRpZiAoZm9saW9faGFzX2h3cG9pc29uZWRfcGFnZShmb2xpbykpIHtcXG4gXFx0XFx0Zm9saW9fdW5sb2NrKGZvbGlvKTtcXG4gXFx0XFx0Zm9saW9fcHV0KGZvbGlvKTtcXG4gXFx0XFx0cmV0dXJuIC1FSU87XFxuZGlmZiAtLWdpdCBhL21tL3Ztc2Nhbi5jIGIvbW0vdm1zY2FuLmNcXG5pbmRleCAzNWMzYmIxNWFlOTZhMy4uNzBlNTRhY2UwZTc0MWMgMTAwNjQ0XFxuLS0tIGEvbW0vdm1zY2FuLmNcXG4rKysgYi9tbS92bXNjYW4uY1xcbkBAIC0xMDg2LDcgKzEwODYsNyBAQCBzdGF0aWMgdW5zaWduZWQgaW50IHNocmlua19mb2xpb19saXN0KHN0cnVjdCBsaXN0X2hlYWQgKmZvbGlvX2xpc3QsXFxuIFxcdFxcdGlmICghZm9saW9fdHJ5bG9jayhmb2xpbykpXFxuIFxcdFxcdFxcdGdvdG8ga2VlcDtcXG4gXFxuLVxcdFxcdGlmIChmb2xpb19jb250YWluX2h3cG9pc29uZWRfcGFnZShmb2xpbykpIHtcXG4rXFx0XFx0aWYgKGZvbGlvX2hhc19od3BvaXNvbmVkX3BhZ2UoZm9saW8pKSB7XFxuIFxcdFxcdFxcdC8qXFxuIFxcdFxcdFxcdCAqIHVubWFwX3BvaXNvbmVkX2ZvbGlvKCkgY2FuJ3QgaGFuZGxlIGxhcmdlXFxuIFxcdFxcdFxcdCAqIGZvbGlvLCBqdXN0IHNraXAgaXQuIG1lbW9yeV9mYWlsdXJlKCkgd2lsbFxcbmRpZmYgLS1naXQgYS92aXJ0L2t2bS9ndWVzdF9tZW1mZC5jIGIvdmlydC9rdm0vZ3Vlc3RfbWVtZmQuY1xcbmluZGV4IGRiNTdjNTc2NmFiNjA0Li45NGVlZGNjN2YxYTllMCAxMDA2NDRcXG4tLS0gYS92aXJ0L2t2bS9ndWVzdF9tZW1mZC5jXFxuKysrIGIvdmlydC9rdm0vZ3Vlc3RfbWVtZmQuY1xcbkBAIC03NzQsNyArNzc0LDcgQEAgc3RhdGljIHN0cnVjdCBmb2xpbyAqX19rdm1fZ21lbV9nZXRfcGZuKHN0cnVjdCBmaWxlICpmaWxlLFxcbiBcXHRpZiAoSVNfRVJSKGZvbGlvKSlcXG4gXFx0XFx0cmV0dXJuIGZvbGlvO1xcbiBcXG4tXFx0aWYgKGZvbGlvX3Rlc3RfaHdwb2lzb24oZm9saW8pKSB7XFxuK1xcdGlmIChmb2xpb19oYXNfaHdwb2lzb25lZF9wYWdlKGZvbGlvKSkge1xcbiBcXHRcXHRmb2xpb191bmxvY2soZm9saW8pO1xcbiBcXHRcXHRmb2xpb19wdXQoZm9saW8pO1xcbiBcXHRcXHRyZXR1cm4gRVJSX1BUUigtRUhXUE9JU09OKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjZUMTc6NTE6MzcuMjIyMDk5OTM2WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MTU2NzE2NjgwNjgyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkhVR0VUTEJGU1wiLFxuICAgIFwiTUVNT1JZX0ZBSUxVUkVcIixcbiAgICBcIlRSQU5TUEFSRU5UX0hVR0VQQUdFXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaHVnZXRsYl9wYWdlX2h3cG9pc29uXCIsXG4gICAgXCJodWdldGxiX3VucmVmX3BhZ2VfaHdwb2lzb25cIixcbiAgICBcInVucG9pc29uX21lbW9yeVwiLFxuICAgIFwiZm9saW9fY2xlYXJfaHVnZXRsYl9od3BvaXNvblwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHNlcmllcyBpbnRyb2R1Y2VzIGBMQVJHRV9GT0xJT2AgY29uZmlnIGFuZCByZWZhY3RvcnMgaG93IGh3cG9pc29uIGlzIHRyYWNrZWQgZm9yIGh1Z2V0bGIgZm9saW9zLiBJdCByZXBsYWNlcyBgYWRqdXN0X3JhbmdlX2h3cG9pc29uYCBpbiBgZnMvaHVnZXRsYmZzL2lub2RlLmNgIHdpdGggYSBnZW5lcmljIG9uZSBpbiBgbW0vZmlsZW1hcC5jYCBhbmQgY2hhbmdlcyBgaHVnZXRsYmZzX3JlYWRfaXRlcmAgdG8gYGdlbmVyaWNfZmlsZV9yZWFkX2l0ZXJgLiBJdCBhbHNvIG1vZGlmaWVzIGBmb2xpb190ZXN0X2h3cG9pc29uYCB0byBgZm9saW9faGFzX2h3cG9pc29uZWRfcGFnZWAgaW4gdmFyaW91cyBwbGFjZXMuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gY29yZSBrZXJuZWwgbG9naWMgKG1tLCBodWdldGxiZnMsIG1lbW9yeS1mYWlsdXJlKSBhbmQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgOWI4NTZlYmQ0N2FjNTAxMDdjOTk2MjM2OTI4ZGFjNWI2M2IzZTk2YlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTdW4gSnVsIDI2IDE3OjUxOjM1IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZnMvS2NvbmZpZyBiL2ZzL0tjb25maWdcbmluZGV4IGNmNmFlNjQ3NzZlNjJjLi5lZGRhYzRlZDIxNGIxMiAxMDA2NDRcbi0tLSBhL2ZzL0tjb25maWdcbisrKyBiL2ZzL0tjb25maWdcbkBAIC0yNzIsNyArMjcyLDcgQEAgZW5kaWYgIyBIVUdFVExCRlNcbiBcbiBjb25maWcgSFVHRVRMQl9QQUdFXG4gXHRkZWZfYm9vbCBIVUdFVExCRlNcbi1cdHNlbGVjdCBYQVJSQVlfTVVMVElcbitcdHNlbGVjdCBMQVJHRV9GT0xJT1xuIFxuIGNvbmZpZyBIVUdFVExCX1BBR0VfT1BUSU1JWkVfVk1FTU1BUFxuIFx0ZGVmX2Jvb2wgSFVHRVRMQl9QQUdFXG5kaWZmIC0tZ2l0IGEvZnMvaHVnZXRsYmZzL2lub2RlLmMgYi9mcy9odWdldGxiZnMvaW5vZGUuY1xuaW5kZXggMjE2ZTFhMGRkMGIyMzcuLmNlZjdlNjFiODI3ZDcxIDEwMDY0NFxuLS0tIGEvZnMvaHVnZXRsYmZzL2lub2RlLmNcbisrKyBiL2ZzL2h1Z2V0bGJmcy9pbm9kZS5jXG5AQCAtMTg3LDExMyArMTg3LDYgQEAgaHVnZXRsYl9nZXRfdW5tYXBwZWRfYXJlYShzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgbG9uZyBhZGRyLFxuIFx0cmV0dXJuIG1tX2dldF91bm1hcHBlZF9hcmVhX3ZtZmxhZ3MoZmlsZSwgYWRkcjAsIGxlbiwgcGdvZmYsIGZsYWdzLCAwKTtcbiB9XG4gXG4tLypcbi0gKiBTb21lb25lIHdhbnRzIHRvIHJlYWQgQGJ5dGVzIGZyb20gYSBIV1BPSVNPTiBodWdldGxiIEBmb2xpbyBmcm9tIEBvZmZzZXQuXG4tICogUmV0dXJucyB0aGUgbWF4aW11bSBudW1iZXIgb2YgYnl0ZXMgb25lIGNhbiByZWFkIHdpdGhvdXQgdG91Y2hpbmcgdGhlIDFzdCByYXdcbi0gKiBIV1BPSVNPTiBwYWdlLlxuLSAqL1xuLXN0YXRpYyBzaXplX3QgYWRqdXN0X3JhbmdlX2h3cG9pc29uKHN0cnVjdCBmb2xpbyAqZm9saW8sIHNpemVfdCBvZmZzZXQsXG4tXHRcdHNpemVfdCBieXRlcylcbi17XG4tXHRzdHJ1Y3QgcGFnZSAqcGFnZSA9IGZvbGlvX3BhZ2UoZm9saW8sIG9mZnNldCAvIFBBR0VfU0laRSk7XG4tXHRzaXplX3Qgc2FmZV9ieXRlcztcbi1cbi1cdGlmIChpc19yYXdfaHdwb2lzb25fcGFnZV9pbl9odWdlcGFnZShwYWdlKSlcbi1cdFx0cmV0dXJuIDA7XG4tXHQvKiBTYWZlIHRvIHJlYWQgdGhlIHJlbWFpbmluZyBieXRlcyBpbiB0aGlzIHBhZ2UuICovXG4tXHRzYWZlX2J5dGVzID0gUEFHRV9TSVpFIC0gKG9mZnNldCAlIFBBR0VfU0laRSk7XG4tXHRwYWdlKys7XG4tXG4tXHQvKiBDaGVjayBlYWNoIHJlbWFpbmluZyBwYWdlIGFzIGxvbmcgYXMgd2UgYXJlIG5vdCBkb25lIHlldC4gKi9cbi1cdGZvciAoOyBzYWZlX2J5dGVzIFx1MDAzYyBieXRlczsgc2FmZV9ieXRlcyArPSBQQUdFX1NJWkUsIHBhZ2UrKylcbi1cdFx0aWYgKGlzX3Jhd19od3BvaXNvbl9wYWdlX2luX2h1Z2VwYWdlKHBhZ2UpKVxuLVx0XHRcdGJyZWFrO1xuLVxuLVx0cmV0dXJuIG1pbihzYWZlX2J5dGVzLCBieXRlcyk7XG4tfVxuLVxuLS8qXG4tICogU3VwcG9ydCBmb3IgcmVhZCgpIC0gRmluZCB0aGUgcGFnZSBhdHRhY2hlZCB0byBmX21hcHBpbmcgYW5kIGNvcHkgb3V0IHRoZVxuLSAqIGRhdGEuIFRoaXMgcHJvdmlkZXMgZnVuY3Rpb25hbGl0eSBzaW1pbGFyIHRvIGZpbGVtYXBfcmVhZCgpLlxuLSAqL1xuLXN0YXRpYyBzc2l6ZV90IGh1Z2V0bGJmc19yZWFkX2l0ZXIoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKnRvKVxuLXtcbi1cdHN0cnVjdCBmaWxlICpmaWxlID0gaW9jYi1cdTAwM2VraV9maWxwO1xuLVx0c3RydWN0IGhzdGF0ZSAqaCA9IGhzdGF0ZV9maWxlKGZpbGUpO1xuLVx0c3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcgPSBmaWxlLVx1MDAzZWZfbWFwcGluZztcbi1cdHN0cnVjdCBpbm9kZSAqaW5vZGUgPSBtYXBwaW5nLVx1MDAzZWhvc3Q7XG4tXHR1bnNpZ25lZCBsb25nIGluZGV4ID0gaW9jYi1cdTAwM2VraV9wb3MgXHUwMDNlXHUwMDNlIGh1Z2VfcGFnZV9zaGlmdChoKTtcbi1cdHVuc2lnbmVkIGxvbmcgb2Zmc2V0ID0gaW9jYi1cdTAwM2VraV9wb3MgXHUwMDI2IH5odWdlX3BhZ2VfbWFzayhoKTtcbi1cdHVuc2lnbmVkIGxvbmcgZW5kX2luZGV4O1xuLVx0bG9mZl90IGlzaXplO1xuLVx0c3NpemVfdCByZXR2YWwgPSAwO1xuLVxuLVx0d2hpbGUgKGlvdl9pdGVyX2NvdW50KHRvKSkge1xuLVx0XHRzdHJ1Y3QgZm9saW8gKmZvbGlvO1xuLVx0XHRzaXplX3QgbnIsIGNvcGllZCwgd2FudDtcbi1cbi1cdFx0LyogbnIgaXMgdGhlIG1heGltdW0gbnVtYmVyIG9mIGJ5dGVzIHRvIGNvcHkgZnJvbSB0aGlzIHBhZ2UgKi9cbi1cdFx0bnIgPSBodWdlX3BhZ2Vfc2l6ZShoKTtcbi1cdFx0aXNpemUgPSBpX3NpemVfcmVhZChpbm9kZSk7XG4tXHRcdGlmICghaXNpemUpXG4tXHRcdFx0YnJlYWs7XG4tXHRcdGVuZF9pbmRleCA9IChpc2l6ZSAtIDEpIFx1MDAzZVx1MDAzZSBodWdlX3BhZ2Vfc2hpZnQoaCk7XG4tXHRcdGlmIChpbmRleCBcdTAwM2UgZW5kX2luZGV4KVxuLVx0XHRcdGJyZWFrO1xuLVx0XHRpZiAoaW5kZXggPT0gZW5kX2luZGV4KSB7XG4tXHRcdFx0bnIgPSAoKGlzaXplIC0gMSkgXHUwMDI2IH5odWdlX3BhZ2VfbWFzayhoKSkgKyAxO1xuLVx0XHRcdGlmIChuciBcdTAwM2M9IG9mZnNldClcbi1cdFx0XHRcdGJyZWFrO1xuLVx0XHR9XG4tXHRcdG5yID0gbnIgLSBvZmZzZXQ7XG4tXG4tXHRcdC8qIEZpbmQgdGhlIGZvbGlvICovXG4tXHRcdGZvbGlvID0gZmlsZW1hcF9sb2NrX2h1Z2V0bGJfZm9saW8oaCwgbWFwcGluZywgaW5kZXgpO1xuLVx0XHRpZiAoSVNfRVJSKGZvbGlvKSkge1xuLVx0XHRcdC8qXG4tXHRcdFx0ICogV2UgaGF2ZSBhIEhPTEUsIHplcm8gb3V0IHRoZSB1c2VyLWJ1ZmZlciBmb3IgdGhlXG4tXHRcdFx0ICogbGVuZ3RoIG9mIHRoZSBob2xlIG9yIHJlcXVlc3QuXG4tXHRcdFx0ICovXG4tXHRcdFx0Y29waWVkID0gaW92X2l0ZXJfemVybyhuciwgdG8pO1xuLVx0XHR9IGVsc2Uge1xuLVx0XHRcdGZvbGlvX3VubG9jayhmb2xpbyk7XG4tXG4tXHRcdFx0aWYgKCFmb2xpb190ZXN0X2h3cG9pc29uKGZvbGlvKSlcbi1cdFx0XHRcdHdhbnQgPSBucjtcbi1cdFx0XHRlbHNlIHtcbi1cdFx0XHRcdC8qXG4tXHRcdFx0XHQgKiBBZGp1c3QgaG93IG1hbnkgYnl0ZXMgc2FmZSB0byByZWFkIHdpdGhvdXRcbi1cdFx0XHRcdCAqIHRvdWNoaW5nIHRoZSAxc3QgcmF3IEhXUE9JU09OIHBhZ2UgYWZ0ZXJcbi1cdFx0XHRcdCAqIG9mZnNldC5cbi1cdFx0XHRcdCAqL1xuLVx0XHRcdFx0d2FudCA9IGFkanVzdF9yYW5nZV9od3BvaXNvbihmb2xpbywgb2Zmc2V0LCBucik7XG4tXHRcdFx0XHRpZiAod2FudCA9PSAwKSB7XG4tXHRcdFx0XHRcdGZvbGlvX3B1dChmb2xpbyk7XG4tXHRcdFx0XHRcdHJldHZhbCA9IC1FSU87XG4tXHRcdFx0XHRcdGJyZWFrO1xuLVx0XHRcdFx0fVxuLVx0XHRcdH1cbi1cbi1cdFx0XHQvKlxuLVx0XHRcdCAqIFdlIGhhdmUgdGhlIGZvbGlvLCBjb3B5IGl0IHRvIHVzZXIgc3BhY2UgYnVmZmVyLlxuLVx0XHRcdCAqL1xuLVx0XHRcdGNvcGllZCA9IGNvcHlfZm9saW9fdG9faXRlcihmb2xpbywgb2Zmc2V0LCB3YW50LCB0byk7XG4tXHRcdFx0Zm9saW9fcHV0KGZvbGlvKTtcbi1cdFx0fVxuLVx0XHRvZmZzZXQgKz0gY29waWVkO1xuLVx0XHRyZXR2YWwgKz0gY29waWVkO1xuLVx0XHRpZiAoY29waWVkICE9IG5yIFx1MDAyNlx1MDAyNiBpb3ZfaXRlcl9jb3VudCh0bykpIHtcbi1cdFx0XHRpZiAoIXJldHZhbClcbi1cdFx0XHRcdHJldHZhbCA9IC1FRkFVTFQ7XG4tXHRcdFx0YnJlYWs7XG4tXHRcdH1cbi1cdFx0aW5kZXggKz0gb2Zmc2V0IFx1MDAzZVx1MDAzZSBodWdlX3BhZ2Vfc2hpZnQoaCk7XG4tXHRcdG9mZnNldCBcdTAwMjY9IH5odWdlX3BhZ2VfbWFzayhoKTtcbi1cdH1cbi1cdGlvY2ItXHUwMDNla2lfcG9zID0gKChsb2ZmX3QpaW5kZXggXHUwMDNjXHUwMDNjIGh1Z2VfcGFnZV9zaGlmdChoKSkgKyBvZmZzZXQ7XG4tXHRyZXR1cm4gcmV0dmFsO1xuLX1cbi1cbiBzdGF0aWMgaW50IGh1Z2V0bGJmc193cml0ZV9iZWdpbihjb25zdCBzdHJ1Y3Qga2lvY2IgKmlvY2IsXG4gXHRcdFx0c3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXG4gXHRcdFx0bG9mZl90IHBvcywgdW5zaWduZWQgbGVuLFxuQEAgLTg4Myw2ICs3NzYsMTcgQEAgc3RhdGljIHN0cnVjdCBpbm9kZSAqaHVnZXRsYmZzX2dldF9yb290KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsXG4gXHRyZXR1cm4gaW5vZGU7XG4gfVxuIFxuK3N0YXRpYyB2b2lkIGh1Z2V0bGJmc19pbml0X3JlZ3VsYXJfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSlcbit7XG4rXHRzdHJ1Y3QgaHN0YXRlICpoc3RhdGUgPSBoc3RhdGVfaW5vZGUoaW5vZGUpO1xuK1x0dW5zaWduZWQgaW50IG9yZGVyID0gaHVnZV9wYWdlX29yZGVyKGhzdGF0ZSk7XG4rXG4rXHRpbm9kZS1cdTAwM2VpX29wID0gXHUwMDI2aHVnZXRsYmZzX2lub2RlX29wZXJhdGlvbnM7XG4rXHRpbm9kZS1cdTAwM2VpX2ZvcCA9IFx1MDAyNmh1Z2V0bGJmc19maWxlX29wZXJhdGlvbnM7XG4rXHRtYXBwaW5nX3NldF9mb2xpb19vcmRlcl9yYW5nZShpbm9kZS1cdTAwM2VpX21hcHBpbmcsIG9yZGVyLCBvcmRlcik7XG4rXHRtYXBwaW5nX3NldF9hdXRob3JpdGF0aXZlKGlub2RlLVx1MDAzZWlfbWFwcGluZyk7XG4rfVxuK1xuIC8qXG4gICogSHVnZXRsYmZzIGlzIG5vdCByZWNsYWltYWJsZTsgdGhlcmVmb3JlIGl0cyBpX21tYXBfcndzZW0gd2lsbCBuZXZlclxuICAqIGJlIHRha2VuIGZyb20gcmVjbGFpbSAtLSB1bmxpa2UgcmVndWxhciBmaWxlc3lzdGVtcy4gVGhpcyBuZWVkcyBhblxuQEAgLTkyNiw4ICs4MzAsNyBAQCBzdGF0aWMgc3RydWN0IGlub2RlICpodWdldGxiZnNfZ2V0X2lub2RlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsXG4gXHRcdFx0aW5pdF9zcGVjaWFsX2lub2RlKGlub2RlLCBtb2RlLCBkZXYpO1xuIFx0XHRcdGJyZWFrO1xuIFx0XHRjYXNlIFNfSUZSRUc6XG4tXHRcdFx0aW5vZGUtXHUwMDNlaV9vcCA9IFx1MDAyNmh1Z2V0bGJmc19pbm9kZV9vcGVyYXRpb25zO1xuLVx0XHRcdGlub2RlLVx1MDAzZWlfZm9wID0gXHUwMDI2aHVnZXRsYmZzX2ZpbGVfb3BlcmF0aW9ucztcbitcdFx0XHRodWdldGxiZnNfaW5pdF9yZWd1bGFyX2lub2RlKGlub2RlKTtcbiBcdFx0XHRicmVhaztcbiBcdFx0Y2FzZSBTX0lGRElSOlxuIFx0XHRcdGlub2RlLVx1MDAzZWlfb3AgPSBcdTAwMjZodWdldGxiZnNfZGlyX2lub2RlX29wZXJhdGlvbnM7XG5AQCAtMTIwNiw3ICsxMTA5LDcgQEAgc3RhdGljIHZvaWQgaW5pdF9vbmNlKHZvaWQgKmZvbylcbiB9XG4gXG4gc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgaHVnZXRsYmZzX2ZpbGVfb3BlcmF0aW9ucyA9IHtcbi1cdC5yZWFkX2l0ZXJcdFx0PSBodWdldGxiZnNfcmVhZF9pdGVyLFxuK1x0LnJlYWRfaXRlclx0XHQ9IGdlbmVyaWNfZmlsZV9yZWFkX2l0ZXIsXG4gXHQubW1hcFx0XHRcdD0gaHVnZXRsYmZzX2ZpbGVfbW1hcCxcbiBcdC5mc3luY1x0XHRcdD0gbm9vcF9mc3luYyxcbiBcdC5nZXRfdW5tYXBwZWRfYXJlYVx0PSBodWdldGxiX2dldF91bm1hcHBlZF9hcmVhLFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaHVnZXRsYi5oIGIvaW5jbHVkZS9saW51eC9odWdldGxiLmhcbmluZGV4IDJhYmFmOTkzMjFlOTBkLi4xODc4NjQyZTc1ZWM1MSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvaHVnZXRsYi5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaFxuQEAgLTE2NSw3ICsxNjUsNyBAQCBib29sIGh1Z2V0bGJmc19wYWdlY2FjaGVfcHJlc2VudChzdHJ1Y3QgaHN0YXRlICpoLFxuIFx0XHRcdFx0IHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuIFx0XHRcdFx0IHVuc2lnbmVkIGxvbmcgYWRkcmVzcyk7XG4gXG4tc3RydWN0IGFkZHJlc3Nfc3BhY2UgKmh1Z2V0bGJfZm9saW9fbWFwcGluZ19sb2NrX3dyaXRlKHN0cnVjdCBmb2xpbyAqZm9saW8pO1xuK3N0cnVjdCBhZGRyZXNzX3NwYWNlICpodWdldGxiX2ZvbGlvX21hcHBpbmdfbG9ja193cml0ZShjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcbiBcbiBleHRlcm4gaW50IG1vdmFibGVfZ2lnYW50aWNfcGFnZXMgX19yZWFkX21vc3RseTtcbiBleHRlcm4gaW50IHN5c2N0bF9odWdldGxiX3NobV9ncm91cCBfX3JlYWRfbW9zdGx5O1xuQEAgLTI5Miw4ICsyOTIsNyBAQCBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgaHVnZXRsYl90b3RhbF9wYWdlcyh2b2lkKVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuLXN0YXRpYyBpbmxpbmUgc3RydWN0IGFkZHJlc3Nfc3BhY2UgKmh1Z2V0bGJfZm9saW9fbWFwcGluZ19sb2NrX3dyaXRlKFxuLVx0XHRcdFx0XHRcdFx0c3RydWN0IGZvbGlvICpmb2xpbylcbitzdGF0aWMgaW5saW5lIHN0cnVjdCBhZGRyZXNzX3NwYWNlICpodWdldGxiX2ZvbGlvX21hcHBpbmdfbG9ja193cml0ZShjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIHtcbiBcdHJldHVybiBOVUxMO1xuIH1cbkBAIC01OTUsOCArNTk0LDggQEAgZW51bSBodWdldGxiX3BhZ2VfZmxhZ3Mge1xuICNpZmRlZiBDT05GSUdfSFVHRVRMQl9QQUdFXG4gI2RlZmluZSBURVNUSFBBR0VGTEFHKHVuYW1lLCBmbG5hbWUpXHRcdFx0XHRcXFxuIHN0YXRpYyBfX2Fsd2F5c19pbmxpbmVcdFx0XHRcdFx0XHRcXFxuLWJvb2wgZm9saW9fdGVzdF9odWdldGxiXyMjZmxuYW1lKHN0cnVjdCBmb2xpbyAqZm9saW8pXHRcdFxcXG4tXHR7XHR2b2lkICpwcml2YXRlID0gXHUwMDI2Zm9saW8tXHUwMDNlcHJpdmF0ZTtcdFx0XFxcbitib29sIGZvbGlvX3Rlc3RfaHVnZXRsYl8jI2ZsbmFtZShjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVx0XFxcbitcdHtcdGNvbnN0IHZvaWQgKnByaXZhdGUgPSBcdTAwMjZmb2xpby1cdTAwM2Vwcml2YXRlO1x0XHRcXFxuIFx0XHRyZXR1cm4gdGVzdF9iaXQoSFBHXyMjZmxuYW1lLCBwcml2YXRlKTtcdFx0XFxcbiBcdH1cbiBcbkBAIC02MTYsNyArNjE1LDcgQEAgdm9pZCBmb2xpb19jbGVhcl9odWdldGxiXyMjZmxuYW1lKHN0cnVjdCBmb2xpbyAqZm9saW8pXHRcdFxcXG4gI2Vsc2VcbiAjZGVmaW5lIFRFU1RIUEFHRUZMQUcodW5hbWUsIGZsbmFtZSlcdFx0XHRcdFxcXG4gc3RhdGljIGlubGluZSBib29sXHRcdFx0XHRcdFx0XFxcbi1mb2xpb190ZXN0X2h1Z2V0bGJfIyNmbG5hbWUoc3RydWN0IGZvbGlvICpmb2xpbylcdFx0XFxcbitmb2xpb190ZXN0X2h1Z2V0bGJfIyNmbG5hbWUoY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbylcdFx0XFxcbiBcdHsgcmV0dXJuIDA7IH1cbiBcbiAjZGVmaW5lIFNFVEhQQUdFRkxBRyh1bmFtZSwgZmxuYW1lKVx0XHRcdFx0XFxcbkBAIC03MjcsNyArNzI2LDcgQEAgc3RhdGljIGlubGluZSBzdHJ1Y3QgaHVnZXBhZ2Vfc3VicG9vbCAqc3VicG9vbF9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuIFx0cmV0dXJuIEhVR0VUTEJGU19TQihpbm9kZS1cdTAwM2VpX3NiKS1cdTAwM2VzcG9vbDtcbiB9XG4gXG4tc3RhdGljIGlubGluZSBzdHJ1Y3QgaHVnZXBhZ2Vfc3VicG9vbCAqaHVnZXRsYl9mb2xpb19zdWJwb29sKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4rc3RhdGljIGlubGluZSBzdHJ1Y3QgaHVnZXBhZ2Vfc3VicG9vbCAqaHVnZXRsYl9mb2xpb19zdWJwb29sKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8pXG4ge1xuIFx0cmV0dXJuIGZvbGlvLVx1MDAzZV9odWdldGxiX3N1YnBvb2w7XG4gfVxuQEAgLTg1Nyw3ICs4NTYsNyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgYXJjaF9oYXNfaHVnZV9ib290bWVtX2FsbG9jKHZvaWQpXG4gfVxuICNlbmRpZlxuIFxuLXN0YXRpYyBpbmxpbmUgc3RydWN0IGhzdGF0ZSAqZm9saW9faHN0YXRlKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4rc3RhdGljIGlubGluZSBzdHJ1Y3QgaHN0YXRlICpmb2xpb19oc3RhdGUoY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbylcbiB7XG4gXHRWTV9CVUdfT05fRk9MSU8oIWZvbGlvX3Rlc3RfaHVnZXRsYihmb2xpbyksIGZvbGlvKTtcbiBcdHJldHVybiBzaXplX3RvX2hzdGF0ZShmb2xpb19zaXplKGZvbGlvKSk7XG5AQCAtMTA3MCwxMSArMTA2OSw2IEBAIHZvaWQgaHVnZXRsYl9yZWdpc3Rlcl9ub2RlKHN0cnVjdCBub2RlICpub2RlKTtcbiB2b2lkIGh1Z2V0bGJfdW5yZWdpc3Rlcl9ub2RlKHN0cnVjdCBub2RlICpub2RlKTtcbiAjZW5kaWZcbiBcbi0vKlxuLSAqIENoZWNrIGlmIGEgZ2l2ZW4gcmF3IEBwYWdlIGluIGEgaHVnZXBhZ2UgaXMgSFdQT0lTT04uXG4tICovXG4tYm9vbCBpc19yYXdfaHdwb2lzb25fcGFnZV9pbl9odWdlcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSk7XG4tXG4gc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGh1Z2VfcGFnZV9tYXNrX2FsaWduKHN0cnVjdCBmaWxlICpmaWxlKVxuIHtcbiBcdHJldHVybiBQQUdFX01BU0sgXHUwMDI2IH5odWdlX3BhZ2VfbWFzayhoc3RhdGVfZmlsZShmaWxlKSk7XG5AQCAtMTA4OCw3ICsxMDgyLDcgQEAgc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGh1Z2VfcGFnZV9tYXNrX2FsaWduKHN0cnVjdCBmaWxlICpmaWxlKVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuLXN0YXRpYyBpbmxpbmUgc3RydWN0IGh1Z2VwYWdlX3N1YnBvb2wgKmh1Z2V0bGJfZm9saW9fc3VicG9vbChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuK3N0YXRpYyBpbmxpbmUgc3RydWN0IGh1Z2VwYWdlX3N1YnBvb2wgKmh1Z2V0bGJfZm9saW9fc3VicG9vbChjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIHtcbiBcdHJldHVybiBOVUxMO1xuIH1cbkBAIC0xMTU3LDcgKzExNTEsNyBAQCBzdGF0aWMgaW5saW5lIHN0cnVjdCBoc3RhdGUgKmhzdGF0ZV92bWEoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXG4gXHRyZXR1cm4gTlVMTDtcbiB9XG4gXG4tc3RhdGljIGlubGluZSBzdHJ1Y3QgaHN0YXRlICpmb2xpb19oc3RhdGUoc3RydWN0IGZvbGlvICpmb2xpbylcbitzdGF0aWMgaW5saW5lIHN0cnVjdCBoc3RhdGUgKmZvbGlvX2hzdGF0ZShjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIHtcbiBcdHJldHVybiBOVUxMO1xuIH1cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21tX3R5cGVzLmggYi9pbmNsdWRlL2xpbnV4L21tX3R5cGVzLmhcbmluZGV4IGIxOGMyYjJlN2QyYzY1Li44NmEyZDBmZWU1NTdiZSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvbW1fdHlwZXMuaFxuKysrIGIvaW5jbHVkZS9saW51eC9tbV90eXBlcy5oXG5AQCAtMzg3LDcgKzM4Nyw3IEBAIHR5cGVkZWYgdW5zaWduZWQgc2hvcnQgbW1faWRfdDtcbiAgKiBAX2h1Z2V0bGJfc3VicG9vbDogRG8gbm90IHVzZSBkaXJlY3RseSwgdXNlIGFjY2Vzc29yIGluIGh1Z2V0bGIuaC5cbiAgKiBAX2h1Z2V0bGJfY2dyb3VwOiBEbyBub3QgdXNlIGRpcmVjdGx5LCB1c2UgYWNjZXNzb3IgaW4gaHVnZXRsYl9jZ3JvdXAuaC5cbiAgKiBAX2h1Z2V0bGJfY2dyb3VwX3JzdmQ6IERvIG5vdCB1c2UgZGlyZWN0bHksIHVzZSBhY2Nlc3NvciBpbiBodWdldGxiX2Nncm91cC5oLlxuLSAqIEBfaHVnZXRsYl9od3BvaXNvbjogRG8gbm90IHVzZSBkaXJlY3RseSwgY2FsbCByYXdfaHdwX2xpc3RfaGVhZCgpLlxuKyAqIEBodWdldGxiX2h3cG9pc29uOiBMaXN0IG9mIHBhZ2VzIHdpdGggaHdwb2lzb24uXG4gICogQF9kZWZlcnJlZF9saXN0OiBGb2xpb3MgdG8gYmUgc3BsaXQgdW5kZXIgbWVtb3J5IHByZXNzdXJlLlxuICAqIEBfdW51c2VkX3NsYWJfb2JqX2V4dHM6IFBsYWNlaG9sZGVyIHRvIG1hdGNoIG9ial9leHRzIGluIHN0cnVjdCBzbGFiLlxuICAqXG5AQCAtNDk5LDcgKzQ5OSw3IEBAIHN0cnVjdCBmb2xpbyB7XG4gXHRcdFx0dm9pZCAqX2h1Z2V0bGJfc3VicG9vbDtcbiBcdFx0XHR2b2lkICpfaHVnZXRsYl9jZ3JvdXA7XG4gXHRcdFx0dm9pZCAqX2h1Z2V0bGJfY2dyb3VwX3JzdmQ7XG4tXHRcdFx0dm9pZCAqX2h1Z2V0bGJfaHdwb2lzb247XG4rXHRcdFx0c3RydWN0IGh3cF9wYWdlICpodWdldGxiX2h3cG9pc29uO1xuIFx0LyogcHJpdmF0ZTogdGhlIHVuaW9uIHdpdGggc3RydWN0IHBhZ2UgaXMgdHJhbnNpdGlvbmFsICovXG4gXHRcdH07XG4gXHRcdHN0cnVjdCBwYWdlIF9fcGFnZV8zO1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oIGIvaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmhcbmluZGV4IDcyMjNmNmY0ZTJiNDAzLi4wN2NjNzg1NGIyZGUxNiAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaFxuQEAgLTg5MywxNCArODkzLDE5IEBAIHN0YXRpYyBpbmxpbmUgaW50IFBhZ2VUcmFuc0NvbXBvdW5kKGNvbnN0IHN0cnVjdCBwYWdlICpwYWdlKVxuIFRFU1RQQUdFRkxBR19GQUxTRShUcmFuc0NvbXBvdW5kLCB0cmFuc2NvbXBvdW5kKVxuICNlbmRpZlxuIFxuLSNpZiBkZWZpbmVkKENPTkZJR19NRU1PUllfRkFJTFVSRSkgXHUwMDI2XHUwMDI2IGRlZmluZWQoQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFKVxuKyNpZiBkZWZpbmVkKENPTkZJR19NRU1PUllfRkFJTFVSRSkgXHUwMDI2XHUwMDI2IGRlZmluZWQoQ09ORklHX0xBUkdFX0ZPTElPKVxuIC8qXG4tICogUGFnZUhhc0hXUG9pc29uZWQgaW5kaWNhdGVzIHRoYXQgYXQgbGVhc3Qgb25lIHN1YnBhZ2UgaXMgaHdwb2lzb25lZCBpbiB0aGVcbi0gKiBjb21wb3VuZCBwYWdlLlxuKyAqIGZvbGlvX2hhc19od3BvaXNvbmVkIGluZGljYXRlcyB0aGF0IGF0IGxlYXN0IG9uZSBwYWdlIGlzIGh3cG9pc29uZWQgaW4gdGhlXG4rICogZm9saW8uICBUaGF0IHBhZ2Ugd2lsbCB1c3VhbGx5IGFsc28gaGF2ZSB0aGUgSFdQb2lzb24gZmxhZyBzZXQsIGJ1dCB0aGlzXG4rICogaXMgbm90IHBvc3NpYmxlIGZvciBmb2xpb3Mgd2hpY2ggaGF2ZSBIVk8gKHNlZSBtZW1vcnktZmFpbHVyZSBmb3IgdGhlXG4rICogc2NoZW1lIHVzZWQgaW4gdGhhdCBjYXNlKS4gIFlvdSBwcm9iYWJseSBkb24ndCB3YW50IHRvIGNhbGwgdGhpcyBkaXJlY3RseTtcbisgKiB1c2UgZm9saW9faGFzX2h3cG9pc29uZWRfcGFnZSgpIGluc3RlYWQuXG4gICpcbiAgKiBUaGlzIGZsYWcgaXMgc2V0IGJ5IGh3cG9pc29uIGhhbmRsZXIuICBDbGVhcmVkIGJ5IFRIUCBzcGxpdCBvciBmcmVlIHBhZ2UuXG4gICovXG4gRk9MSU9fRkxBRyhoYXNfaHdwb2lzb25lZCwgRk9MSU9fU0VDT05EX1BBR0UpXG4rRk9MSU9fVEVTVF9TRVRfRkxBRyhoYXNfaHdwb2lzb25lZCwgRk9MSU9fU0VDT05EX1BBR0UpXG4rRk9MSU9fVEVTVF9DTEVBUl9GTEFHKGhhc19od3BvaXNvbmVkLCBGT0xJT19TRUNPTkRfUEFHRSlcbiAjZWxzZVxuIEZPTElPX0ZMQUdfRkFMU0UoaGFzX2h3cG9pc29uZWQpXG4gI2VuZGlmXG5AQCAtMTA0MSw4ICsxMDQ2LDI5IEBAIFBBR0VfVFlQRV9PUFMoU2xhYiwgc2xhYiwgc2xhYilcbiBcbiAjaWZkZWYgQ09ORklHX0hVR0VUTEJfUEFHRVxuIEZPTElPX1RZUEVfT1BTKGh1Z2V0bGIsIGh1Z2V0bGIpXG4rXG4rI2lmZGVmIENPTkZJR19NRU1PUllfRkFJTFVSRVxuK3N0YXRpYyBpbmxpbmUgYm9vbCBmb2xpb190ZXN0X2h1Z2VfcG9pc29uKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8pXG4re1xuK1x0cmV0dXJuIChSRUFEX09OQ0UoZm9saW8tXHUwMDNlcGFnZS5wYWdlX3R5cGUpIFx1MDAzZVx1MDAzZSAyMykgPT1cbitcdFx0KChQR1RZX2h1Z2V0bGIgXHUwMDNjXHUwMDNjIDEpIHwgMSk7XG4rfVxuK1xuK3N0YXRpYyBpbmxpbmUgdm9pZCBmb2xpb19zZXRfaHVnZV9wb2lzb24oc3RydWN0IGZvbGlvICpmb2xpbylcbit7XG4rXHRmb2xpby1cdTAwM2VwYWdlLnBhZ2VfdHlwZSB8PSAoMSBcdTAwM2NcdTAwM2MgMjMpO1xuK31cbitcbitzdGF0aWMgaW5saW5lIHZvaWQgZm9saW9fY2xlYXJfaHVnZV9wb2lzb24oc3RydWN0IGZvbGlvICpmb2xpbylcbit7XG4rXHRmb2xpby1cdTAwM2VwYWdlLnBhZ2VfdHlwZSBcdTAwMjY9IH4oMSBcdTAwM2NcdTAwM2MgMjMpO1xuK31cbisjZWxzZVxuK0ZPTElPX1RFU1RfRkxBR19GQUxTRShodWdlX3BvaXNvbilcbisjZW5kaWZcbiAjZWxzZVxuIEZPTElPX1RFU1RfRkxBR19GQUxTRShodWdldGxiKVxuK0ZPTElPX1RFU1RfRkxBR19GQUxTRShodWdlX3BvaXNvbilcbiAjZW5kaWZcbiBcbiBQQUdFX1RZUEVfT1BTKFpzbWFsbG9jLCB6c21hbGxvYywgenNtYWxsb2MpXG5AQCAtMTA2OCwxMCArMTA5NCwxNCBAQCBzdGF0aWMgaW5saW5lIGJvb2wgUGFnZUh1Z2UoY29uc3Qgc3RydWN0IHBhZ2UgKnBhZ2UpXG4gXHRyZXR1cm4gZm9saW9fdGVzdF9odWdldGxiKHBhZ2VfZm9saW8ocGFnZSkpO1xuIH1cbiBcbitib29sIGh1Z2V0bGJfcGFnZV9od3BvaXNvbihjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvLCBjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSk7XG4rYm9vbCBodWdldGxiX3VucmVmX3BhZ2VfaHdwb2lzb24oY29uc3Qgc3RydWN0IHBhZ2UgKnBhZ2UpO1xuK1xuIC8qXG4tICogQ2hlY2sgaWYgYSBwYWdlIGlzIGN1cnJlbnRseSBtYXJrZWQgSFdQb2lzb25lZC4gTm90ZSB0aGF0IHRoaXMgY2hlY2sgaXNcbi0gKiBiZXN0IGVmZm9ydCBvbmx5IGFuZCBpbmhlcmVudGx5IHJhY3k6IHRoZXJlIGlzIG5vIHdheSB0byBzeW5jaHJvbml6ZSB3aXRoXG4tICogZmFpbGluZyBoYXJkd2FyZS5cbisgKiBDaGVjayBpZiBhIHBhZ2UgaXMgY3VycmVudGx5IG1hcmtlZCBIV1BvaXNvbmVkLiAgVGhpcyBjaGVjayBpcyBiZXN0XG4rICogZWZmb3J0IG9ubHkgYW5kIGluaGVyZW50bHkgcmFjeTogdGhlcmUgaXMgbm8gd2F5IHRvIHN5bmNocm9uaXplIHdpdGhcbisgKiBmYWlsaW5nIGhhcmR3YXJlLiAgVGhlIGNhbGxlciBtYXkgbm90IGhhdmUgYSByZWZjb3VudCBvbiB0aGUgZm9saW9cbisgKiBjb250YWluaW5nIHRoZSBwYWdlLCBzbyB3ZSBtdXN0IGJlIGNhcmVmdWwgdG8gbm90IHRyaXAgYW55IGFzc2VydGlvbnMuXG4gICovXG4gc3RhdGljIGlubGluZSBib29sIGlzX3BhZ2VfaHdwb2lzb24oY29uc3Qgc3RydWN0IHBhZ2UgKnBhZ2UpXG4ge1xuQEAgLTEwODAsMTMgKzExMTAsMjYgQEAgc3RhdGljIGlubGluZSBib29sIGlzX3BhZ2VfaHdwb2lzb24oY29uc3Qgc3RydWN0IHBhZ2UgKnBhZ2UpXG4gXHRpZiAoUGFnZUhXUG9pc29uKHBhZ2UpKVxuIFx0XHRyZXR1cm4gdHJ1ZTtcbiBcdGZvbGlvID0gcGFnZV9mb2xpbyhwYWdlKTtcbi1cdHJldHVybiBmb2xpb190ZXN0X2h1Z2V0bGIoZm9saW8pIFx1MDAyNlx1MDAyNiBQYWdlSFdQb2lzb24oXHUwMDI2Zm9saW8tXHUwMDNlcGFnZSk7XG4rXHRpZiAoZm9saW9fdGVzdF9odWdlX3BvaXNvbihmb2xpbykpXG4rXHRcdHJldHVybiBodWdldGxiX3VucmVmX3BhZ2VfaHdwb2lzb24ocGFnZSk7XG4rXHQvKiBJbiBjYXNlIHdlIHJhY2VkIHdpdGggaHVnZXRsYiB0cmFuc2ZlcnJpbmcgZmxhZ3MgKi9cbitcdHJldHVybiBQYWdlSFdQb2lzb24ocGFnZSk7XG4rfVxuK1xuK3N0YXRpYyBpbmxpbmUgYm9vbCBpc19yZWZfcGFnZV9od3BvaXNvbihjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuK1x0XHRjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSlcbit7XG4rXHRpZiAoUGFnZUhXUG9pc29uKHBhZ2UpKVxuK1x0XHRyZXR1cm4gdHJ1ZTtcbitcdGlmIChmb2xpb190ZXN0X2h1Z2V0bGIoZm9saW8pKVxuK1x0XHRyZXR1cm4gaHVnZXRsYl9wYWdlX2h3cG9pc29uKGZvbGlvLCBwYWdlKTtcbitcdHJldHVybiBmYWxzZTtcbiB9XG4gXG4tc3RhdGljIGlubGluZSBib29sIGZvbGlvX2NvbnRhaW5faHdwb2lzb25lZF9wYWdlKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4rc3RhdGljIGlubGluZSBib29sIGZvbGlvX2hhc19od3BvaXNvbmVkX3BhZ2UoY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbylcbiB7XG4tXHRyZXR1cm4gZm9saW9fdGVzdF9od3BvaXNvbihmb2xpbykgfHxcbi1cdCAgICAoZm9saW9fdGVzdF9sYXJnZShmb2xpbykgXHUwMDI2XHUwMDI2IGZvbGlvX3Rlc3RfaGFzX2h3cG9pc29uZWQoZm9saW8pKTtcbitcdHJldHVybiBQYWdlSFdQb2lzb24oXHUwMDI2Zm9saW8tXHUwMDNlcGFnZSkgfHxcbitcdCAgICAgICAoZm9saW9fdGVzdF9sYXJnZShmb2xpbykgXHUwMDI2XHUwMDI2IGZvbGlvX3Rlc3RfaGFzX2h3cG9pc29uZWQoZm9saW8pKTtcbiB9XG4gXG4gYm9vbCBpc19mcmVlX2J1ZGR5X3BhZ2UoY29uc3Qgc3RydWN0IHBhZ2UgKnBhZ2UpO1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGFnZW1hcC5oIGIvaW5jbHVkZS9saW51eC9wYWdlbWFwLmhcbmluZGV4IDJjMzcxOGQ1OTJkNmRkLi4yMmQ0ODkzNWZmZGE3YyAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvcGFnZW1hcC5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L3BhZ2VtYXAuaFxuQEAgLTIxMCw2ICsyMTAsNyBAQCBlbnVtIG1hcHBpbmdfZmxhZ3Mge1xuIFx0QVNfV1JJVEVCQUNLX01BWV9ERUFETE9DS19PTl9SRUNMQUlNID0gOSxcbiBcdEFTX0tFUk5FTF9GSUxFID0gMTAsXHQvKiBtYXBwaW5nIGZvciBhIGZha2Uga2VybmVsIGZpbGUgdGhhdCBzaG91bGRuJ3RcbiBcdFx0XHRcdCAgIGFjY291bnQgdXNhZ2UgdG8gdXNlciBjZ3JvdXBzICovXG4rXHRBU19BVVRIT1JJVEFUSVZFID0gMTEsXHQvKiBJZiB3ZSBtaXNzIGluIHRoZSBwYWdlIGNhY2hlLCBpdCdzIGEgaG9sZSAqL1xuIFx0LyogQml0cyAxNi0yNSBhcmUgdXNlZCBmb3IgRk9MSU9fT1JERVIgKi9cbiBcdEFTX0ZPTElPX09SREVSX0JJVFMgPSA1LFxuIFx0QVNfRk9MSU9fT1JERVJfTUlOID0gMTYsXG5AQCAtMzQ1LDYgKzM0NiwxNiBAQCBzdGF0aWMgaW5saW5lIGJvb2wgbWFwcGluZ193cml0ZWJhY2tfbWF5X2RlYWRsb2NrX29uX3JlY2xhaW0oY29uc3Qgc3RydWN0IGFkZHJlc1xuIFx0cmV0dXJuIHRlc3RfYml0KEFTX1dSSVRFQkFDS19NQVlfREVBRExPQ0tfT05fUkVDTEFJTSwgXHUwMDI2bWFwcGluZy1cdTAwM2VmbGFncyk7XG4gfVxuIFxuK3N0YXRpYyBpbmxpbmUgdm9pZCBtYXBwaW5nX3NldF9hdXRob3JpdGF0aXZlKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nKVxuK3tcbitcdHNldF9iaXQoQVNfQVVUSE9SSVRBVElWRSwgXHUwMDI2bWFwcGluZy1cdTAwM2VmbGFncyk7XG4rfVxuK1xuK3N0YXRpYyBpbmxpbmUgYm9vbCBtYXBwaW5nX2lzX2F1dGhvcml0YXRpdmUoY29uc3Qgc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcpXG4re1xuK1x0cmV0dXJuIHRlc3RfYml0KEFTX0FVVEhPUklUQVRJVkUsIFx1MDAyNm1hcHBpbmctXHUwMDNlZmxhZ3MpO1xuK31cbitcbiBzdGF0aWMgaW5saW5lIGdmcF90IG1hcHBpbmdfZ2ZwX21hc2soY29uc3Qgc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcpXG4ge1xuIFx0cmV0dXJuIG1hcHBpbmctXHUwMDNlZ2ZwX21hc2s7XG5AQCAtMzczLDcgKzM4NCw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBtYXBwaW5nX3NldF9nZnBfbWFzayhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbSwgZ2ZwX3QgbWFzaylcbiAgKiBhc3N1bXB0aW9ucyBhYm91dCBtYXhpbXVtIG9yZGVyIGlmIFRIUCBhcmUgZGlzYWJsZWQsIGJ1dCA4IHNlZW1zIGxpa2VcbiAgKiBhIGdvb2Qgb3JkZXIgKHRoYXQncyAxTUIgaWYgeW91J3JlIHVzaW5nIDRrQiBwYWdlcylcbiAgKi9cbi0jaWZkZWYgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFXG4rI2lmZGVmIENPTkZJR19MQVJHRV9GT0xJT1xuICNkZWZpbmUgUFJFRkVSUkVEX01BWF9QQUdFQ0FDSEVfT1JERVJcdEhQQUdFX1BNRF9PUkRFUlxuICNlbHNlXG4gI2RlZmluZSBQUkVGRVJSRURfTUFYX1BBR0VDQUNIRV9PUkRFUlx0OFxuQEAgLTM5NCw3ICs0MDUsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgbWFwcGluZ19zZXRfZ2ZwX21hc2soc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm0sIGdmcF90IG1hc2spXG4gICovXG4gc3RhdGljIGlubGluZSBzaXplX3QgbWFwcGluZ19tYXhfZm9saW9fc2l6ZV9zdXBwb3J0ZWQodm9pZClcbiB7XG4tXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UpKVxuK1x0aWYgKElTX0VOQUJMRUQoQ09ORklHX0xBUkdFX0ZPTElPKSlcbiBcdFx0cmV0dXJuIDFVIFx1MDAzY1x1MDAzYyAoUEFHRV9TSElGVCArIE1BWF9QQUdFQ0FDSEVfT1JERVIpO1xuIFx0cmV0dXJuIFBBR0VfU0laRTtcbiB9XG5AQCAtNDA1LDI5ICs0MTYsMjMgQEAgc3RhdGljIGlubGluZSBzaXplX3QgbWFwcGluZ19tYXhfZm9saW9fc2l6ZV9zdXBwb3J0ZWQodm9pZClcbiAgKiBAbWluOiBNaW5pbXVtIGZvbGlvIG9yZGVyIChiZXR3ZWVuIDAtTUFYX1BBR0VDQUNIRV9PUkRFUiBpbmNsdXNpdmUpLlxuICAqIEBtYXg6IE1heGltdW0gZm9saW8gb3JkZXIgKGJldHdlZW4gQG1pbi1NQVhfUEFHRUNBQ0hFX09SREVSIGluY2x1c2l2ZSkuXG4gICpcbi0gKiBUaGUgZmlsZXN5c3RlbSBzaG91bGQgY2FsbCB0aGlzIGZ1bmN0aW9uIGluIGl0cyBpbm9kZSBjb25zdHJ1Y3RvciB0b1xuLSAqIGluZGljYXRlIHdoaWNoIGJhc2Ugc2l6ZSAobWluKSBhbmQgbWF4aW11bSBzaXplIChtYXgpIG9mIGZvbGlvIHRoZSBWRlNcbi0gKiBjYW4gdXNlIHRvIGNhY2hlIHRoZSBjb250ZW50cyBvZiB0aGUgZmlsZS4gIFRoaXMgc2hvdWxkIG9ubHkgYmUgdXNlZFxuLSAqIGlmIHRoZSBmaWxlc3lzdGVtIG5lZWRzIHNwZWNpYWwgaGFuZGxpbmcgb2YgZm9saW8gc2l6ZXMgKGllIHRoZXJlIGlzXG4tICogc29tZXRoaW5nIHRoZSBjb3JlIGNhbm5vdCBrbm93KS5cbisgKiBUaGUgZmlsZXN5c3RlbSBzaG91bGQgY2FsbCB0aGlzIGZ1bmN0aW9uIGluIGl0cyBpbm9kZSBjb25zdHJ1Y3RvclxuKyAqIHRvIGluZGljYXRlIHdoaWNoIHNpemUgZm9saW9zIGNhbiBiZSB1c2VkIHRvIGNhY2hlIHRoZSBjb250ZW50cyBvZlxuKyAqIHRoZSBpbm9kZS4gIFRoaXMgc2hvdWxkIG9ubHkgYmUgdXNlZCBpZiB0aGUgZmlsZXN5c3RlbSBuZWVkcyBzcGVjaWFsXG4rICogaGFuZGxpbmcgb2YgZm9saW8gc2l6ZXMgKGllIHRoZXJlIGlzIHNvbWV0aGluZyB0aGUgY29yZSBjYW5ub3Qga25vdykuXG4gICogRG8gbm90IHR1bmUgaXQgYmFzZWQgb24sIGVnLCBpX3NpemUuXG4gICpcbisgKiBodWdldGxiIGNhbGxzIHRoaXMgd2l0aCBvcmRlcnMgbGFyZ2VyIHRoYW4gTUFYX1BBR0VDQUNIRV9PUkRFUi5cbisgKiBOb3JtYWwgZmlsZXN5c3RlbXMgc2hvdWxkIG5vdCBkbyB0aGlzLlxuKyAqXG4gICogQ29udGV4dDogVGhpcyBzaG91bGQgbm90IGJlIGNhbGxlZCB3aGlsZSB0aGUgaW5vZGUgaXMgYWN0aXZlIGFzIGl0XG4gICogaXMgbm9uLWF0b21pYy5cbiAgKi9cbiBzdGF0aWMgaW5saW5lIHZvaWQgbWFwcGluZ19zZXRfZm9saW9fb3JkZXJfcmFuZ2Uoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXG4tXHRcdFx0XHRcdFx0IHVuc2lnbmVkIGludCBtaW4sXG4tXHRcdFx0XHRcdFx0IHVuc2lnbmVkIGludCBtYXgpXG4rXHRcdHVuc2lnbmVkIGludCBtaW4sIHVuc2lnbmVkIGludCBtYXgpXG4ge1xuLVx0aWYgKCFJU19FTkFCTEVEKENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSkpXG4rXHRpZiAoIUlTX0VOQUJMRUQoQ09ORklHX0xBUkdFX0ZPTElPKSlcbiBcdFx0cmV0dXJuO1xuLVxuLVx0aWYgKG1pbiBcdTAwM2UgTUFYX1BBR0VDQUNIRV9PUkRFUilcbi1cdFx0bWluID0gTUFYX1BBR0VDQUNIRV9PUkRFUjtcbi1cbi1cdGlmIChtYXggXHUwMDNlIE1BWF9QQUdFQ0FDSEVfT1JERVIpXG4tXHRcdG1heCA9IE1BWF9QQUdFQ0FDSEVfT1JERVI7XG4tXG4gXHRpZiAobWF4IFx1MDAzYyBtaW4pXG4gXHRcdG1heCA9IG1pbjtcbiBcbkBAIC00NjAsNyArNDY1LDcgQEAgc3RhdGljIGlubGluZSB2b2lkIG1hcHBpbmdfc2V0X2xhcmdlX2ZvbGlvcyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZylcbiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludFxuIG1hcHBpbmdfbWF4X2ZvbGlvX29yZGVyKGNvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nKVxuIHtcbi1cdGlmICghSVNfRU5BQkxFRChDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UpKVxuK1x0aWYgKCFJU19FTkFCTEVEKENPTkZJR19MQVJHRV9GT0xJTykpXG4gXHRcdHJldHVybiAwO1xuIFx0cmV0dXJuIChtYXBwaW5nLVx1MDAzZWZsYWdzIFx1MDAyNiBBU19GT0xJT19PUkRFUl9NQVhfTUFTSykgXHUwMDNlXHUwMDNlIEFTX0ZPTElPX09SREVSX01BWDtcbiB9XG5AQCAtNDY4LDcgKzQ3Myw3IEBAIG1hcHBpbmdfbWF4X2ZvbGlvX29yZGVyKGNvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nKVxuIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50XG4gbWFwcGluZ19taW5fZm9saW9fb3JkZXIoY29uc3Qgc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcpXG4ge1xuLVx0aWYgKCFJU19FTkFCTEVEKENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSkpXG4rXHRpZiAoIUlTX0VOQUJMRUQoQ09ORklHX0xBUkdFX0ZPTElPKSlcbiBcdFx0cmV0dXJuIDA7XG4gXHRyZXR1cm4gKG1hcHBpbmctXHUwMDNlZmxhZ3MgXHUwMDI2IEFTX0ZPTElPX09SREVSX01JTl9NQVNLKSBcdTAwM2VcdTAwM2UgQVNfRk9MSU9fT1JERVJfTUlOO1xuIH1cbkBAIC01MjQsNyArNTI5LDcgQEAgc3RhdGljIGlubGluZSBib29sIG1hcHBpbmdfbGFyZ2VfZm9saW9fc3VwcG9ydChjb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGlcbiAgKlxuICAqIFJldHVybjogVHJ1ZSBpZiBQTUQtc2l6ZWQgZm9saW9zIGFyZSBzdXBwb3J0ZWQsIG90aGVyd2lzZSBmYWxzZS5cbiAgKi9cbi0jaWZkZWYgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFXG4rI2lmZGVmIENPTkZJR19MQVJHRV9GT0xJT1xuIHN0YXRpYyBpbmxpbmUgYm9vbCBtYXBwaW5nX3BtZF9mb2xpb19zdXBwb3J0KGNvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nKVxuIHtcbiBcdC8qIEFTX0ZPTElPX09SREVSIGlzIG9ubHkgcmVhc29uYWJsZSBmb3IgcGFnZWNhY2hlIGZvbGlvcyAqL1xuZGlmZiAtLWdpdCBhL21tL0tjb25maWcgYi9tbS9LY29uZmlnXG5pbmRleCA5ZTBjYTQ4MjQ5MDU0Zi4uZTY2NmRkMTRjYTBjM2QgMTAwNjQ0XG4tLS0gYS9tbS9LY29uZmlnXG4rKysgYi9tbS9LY29uZmlnXG5AQCAtODQzLDExICs4NDMsMTUgQEAgY29uZmlnIFBFUlNJU1RFTlRfSFVHRV9aRVJPX0ZPTElPXG4gY29uZmlnIE1NX0lEXG4gXHRkZWZfYm9vbCBuXG4gXG4rY29uZmlnIExBUkdFX0ZPTElPXG4rXHRkZWZfYm9vbCBuXG4rXHRzZWxlY3QgWEFSUkFZX01VTFRJXG4rXG4gbWVudWNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRVxuIFx0Ym9vbCBcIlRyYW5zcGFyZW50IEh1Z2VwYWdlIFN1cHBvcnRcIlxuIFx0ZGVwZW5kcyBvbiBIQVZFX0FSQ0hfVFJBTlNQQVJFTlRfSFVHRVBBR0UgXHUwMDI2XHUwMDI2ICFQUkVFTVBUX1JUXG4gXHRzZWxlY3QgQ09NUEFDVElPTlxuLVx0c2VsZWN0IFhBUlJBWV9NVUxUSVxuK1x0c2VsZWN0IExBUkdFX0ZPTElPXG4gXHRzZWxlY3QgTU1fSURcbiBcdGhlbHBcbiBcdCAgVHJhbnNwYXJlbnQgSHVnZXBhZ2VzIGFsbG93cyB0aGUga2VybmVsIHRvIHVzZSBodWdlIHBhZ2VzIGFuZFxuZGlmZiAtLWdpdCBhL21tL2ZpbGVtYXAuYyBiL21tL2ZpbGVtYXAuY1xuaW5kZXggNThlYjlkMjQwNjQzNDguLjVhOGNjMjBlNjI0ZTRkIDEwMDY0NFxuLS0tIGEvbW0vZmlsZW1hcC5jXG4rKysgYi9tbS9maWxlbWFwLmNcbkBAIC0yNDgzLDYgKzI0ODMsOCBAQCBzdGF0aWMgdm9pZCBmaWxlbWFwX2dldF9yZWFkX2JhdGNoKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxuIFxuIFx0XHRpZiAoIWZvbGlvX2JhdGNoX2FkZChmYmF0Y2gsIGZvbGlvKSlcbiBcdFx0XHRicmVhaztcbitcdFx0aWYgKGZvbGlvX2hhc19od3BvaXNvbmVkX3BhZ2UoZm9saW8pKVxuK1x0XHRcdGJyZWFrO1xuIFx0XHRpZiAoIWZvbGlvX3Rlc3RfdXB0b2RhdGUoZm9saW8pKVxuIFx0XHRcdGJyZWFrO1xuIFx0XHRpZiAoZm9saW9fdGVzdF9yZWFkYWhlYWQoZm9saW8pKVxuQEAgLTI2OTUsNiArMjY5Nyw4IEBAIHN0YXRpYyBpbnQgZmlsZW1hcF9nZXRfcGFnZXMoc3RydWN0IGtpb2NiICppb2NiLCBzaXplX3QgY291bnQsXG4gXHRpZiAoIWZvbGlvX2JhdGNoX2NvdW50KGZiYXRjaCkpIHtcbiBcdFx0REVGSU5FX1JFQURBSEVBRChyYWN0bCwgZmlscCwgXHUwMDI2ZmlscC1cdTAwM2VmX3JhLCBtYXBwaW5nLCBpbmRleCk7XG4gXG4rXHRcdGlmIChtYXBwaW5nX2lzX2F1dGhvcml0YXRpdmUobWFwcGluZykpXG4rXHRcdFx0cmV0dXJuIDA7XG4gXHRcdGlmIChpb2NiLVx1MDAzZWtpX2ZsYWdzIFx1MDAyNiBJT0NCX05PSU8pXG4gXHRcdFx0cmV0dXJuIC1FQUdBSU47XG4gXHRcdGlmIChpb2NiLVx1MDAzZWtpX2ZsYWdzIFx1MDAyNiBJT0NCX05PV0FJVClcbkBAIC0yNzQ5LDYgKzI3NTMsMjkgQEAgc3RhdGljIGlubGluZSBib29sIHBvc19zYW1lX2ZvbGlvKGxvZmZfdCBwb3MxLCBsb2ZmX3QgcG9zMiwgc3RydWN0IGZvbGlvICpmb2xpbylcbiBcdHJldHVybiAocG9zMSBcdTAwM2VcdTAwM2Ugc2hpZnQgPT0gcG9zMiBcdTAwM2VcdTAwM2Ugc2hpZnQpO1xuIH1cbiBcbitzdGF0aWMgc2l6ZV90IGFkanVzdF9yYW5nZV9od3BvaXNvbihjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzaXplX3Qgb2Zmc2V0LFxuK1x0XHRzaXplX3QgYnl0ZXMpXG4re1xuK1x0Y29uc3Qgc3RydWN0IHBhZ2UgKnBhZ2UgPSBmb2xpb19wYWdlKGZvbGlvLCBvZmZzZXQgLyBQQUdFX1NJWkUpO1xuK1x0c2l6ZV90IHNhZmVfYnl0ZXM7XG4rXG4rXHRpZiAoIWZvbGlvX2hhc19od3BvaXNvbmVkX3BhZ2UoZm9saW8pKVxuK1x0XHRyZXR1cm4gYnl0ZXM7XG4rXHRpZiAoaXNfcmVmX3BhZ2VfaHdwb2lzb24oZm9saW8sIHBhZ2UpKVxuK1x0XHRyZXR1cm4gMDtcbitcbitcdC8qIFNhZmUgdG8gcmVhZCB0aGUgcmVtYWluaW5nIGJ5dGVzIGluIHRoaXMgcGFnZS4gKi9cbitcdHNhZmVfYnl0ZXMgPSBQQUdFX1NJWkUgLSAob2Zmc2V0ICUgUEFHRV9TSVpFKTtcbitcdHBhZ2UrKztcbitcbitcdC8qIENoZWNrIGVhY2ggcmVtYWluaW5nIHBhZ2UgYXMgbG9uZyBhcyB3ZSBhcmUgbm90IGRvbmUgeWV0LiAqL1xuK1x0Zm9yICg7IHNhZmVfYnl0ZXMgXHUwMDNjIGJ5dGVzOyBzYWZlX2J5dGVzICs9IFBBR0VfU0laRSwgcGFnZSsrKVxuK1x0XHRpZiAoaXNfcmVmX3BhZ2VfaHdwb2lzb24oZm9saW8sIHBhZ2UpKVxuK1x0XHRcdGJyZWFrO1xuK1xuK1x0cmV0dXJuIG1pbihzYWZlX2J5dGVzLCBieXRlcyk7XG4rfVxuK1xuIHN0YXRpYyB2b2lkIGZpbGVtYXBfZW5kX2Ryb3BiZWhpbmRfcmVhZChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIHtcbiBcdGlmICghZm9saW9fdGVzdF9kcm9wYmVoaW5kKGZvbGlvKSlcbkBAIC0yODI4LDYgKzI4NTUsMjIgQEAgc3NpemVfdCBmaWxlbWFwX3JlYWQoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsXG4gXHRcdFx0Z290byBwdXRfZm9saW9zO1xuIFx0XHRlbmRfb2Zmc2V0ID0gbWluX3QobG9mZl90LCBpc2l6ZSwgaW9jYi1cdTAwM2VraV9wb3MgKyBpdGVyLVx1MDAzZWNvdW50KTtcbiBcbitcdFx0aWYgKCFmb2xpb19iYXRjaF9jb3VudChcdTAwMjZmYmF0Y2gpKSB7XG4rXHRcdFx0c2l6ZV90IGZzaXplID0gbWFwcGluZ19taW5fZm9saW9fbnJieXRlcyhtYXBwaW5nKTtcbitcdFx0XHRzaXplX3Qgb2Zmc2V0ID0gaW9jYi1cdTAwM2VraV9wb3MgXHUwMDI2IChmc2l6ZSAtIDEpO1xuK1x0XHRcdHNpemVfdCBieXRlcyA9IG1pbl90KGxvZmZfdCwgZW5kX29mZnNldCAtIGlvY2ItXHUwMDNla2lfcG9zLFxuK1x0XHRcdFx0XHQgICAgIGZzaXplIC0gb2Zmc2V0KTtcbitcdFx0XHRzaXplX3QgY29waWVkID0gaW92X2l0ZXJfemVybyhieXRlcywgaXRlcik7XG4rXG4rXHRcdFx0YWxyZWFkeV9yZWFkICs9IGNvcGllZDtcbitcdFx0XHRpb2NiLVx1MDAzZWtpX3BvcyArPSBjb3BpZWQ7XG4rXHRcdFx0bGFzdF9wb3MgPSBpb2NiLVx1MDAzZWtpX3BvcztcbitcbitcdFx0XHRpZiAoY29waWVkIFx1MDAzYyBieXRlcylcbitcdFx0XHRcdGVycm9yID0gLUVGQVVMVDtcbitcdFx0XHRjb250aW51ZTtcbitcdFx0fVxuK1xuIFx0XHQvKlxuIFx0XHQgKiBPbmNlIHdlIHN0YXJ0IGNvcHlpbmcgZGF0YSwgd2UgZG9uJ3Qgd2FudCB0byBiZSB0b3VjaGluZyBhbnlcbiBcdFx0ICogY2FjaGVsaW5lcyB0aGF0IG1pZ2h0IGJlIGNvbnRlbmRlZDpcbkBAIC0yODYyLDE0ICsyOTA1LDE4IEBAIHNzaXplX3QgZmlsZW1hcF9yZWFkKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICppdGVyLFxuIFx0XHRcdGlmICh3cml0YWJseV9tYXBwZWQpXG4gXHRcdFx0XHRmbHVzaF9kY2FjaGVfZm9saW8oZm9saW8pO1xuIFxuLVx0XHRcdGNvcGllZCA9IGNvcHlfZm9saW9fdG9faXRlcihmb2xpbywgb2Zmc2V0LCBieXRlcywgaXRlcik7XG4rXHRcdFx0Y29waWVkID0gYWRqdXN0X3JhbmdlX2h3cG9pc29uKGZvbGlvLCBvZmZzZXQsIGJ5dGVzKTtcbitcdFx0XHRpZiAoY29waWVkIFx1MDAzYyBieXRlcylcbitcdFx0XHRcdGVycm9yID0gLUVJTztcbitcdFx0XHRjb3BpZWQgPSBjb3B5X2ZvbGlvX3RvX2l0ZXIoZm9saW8sIG9mZnNldCwgY29waWVkLCBpdGVyKTtcbiBcbiBcdFx0XHRhbHJlYWR5X3JlYWQgKz0gY29waWVkO1xuIFx0XHRcdGlvY2ItXHUwMDNla2lfcG9zICs9IGNvcGllZDtcbiBcdFx0XHRsYXN0X3BvcyA9IGlvY2ItXHUwMDNla2lfcG9zO1xuIFxuIFx0XHRcdGlmIChjb3BpZWQgXHUwMDNjIGJ5dGVzKSB7XG4tXHRcdFx0XHRlcnJvciA9IC1FRkFVTFQ7XG4rXHRcdFx0XHRpZiAoIWVycm9yKVxuK1x0XHRcdFx0XHRlcnJvciA9IC1FRkFVTFQ7XG4gXHRcdFx0XHRicmVhaztcbiBcdFx0XHR9XG4gXHRcdH1cbmRpZmYgLS1naXQgYS9tbS9odWdlX21lbW9yeS5jIGIvbW0vaHVnZV9tZW1vcnkuY1xuaW5kZXggMmJjY2IwYTUzYTBhNjAuLjM1MzM0MDMwOTEwNzRjIDEwMDY0NFxuLS0tIGEvbW0vaHVnZV9tZW1vcnkuY1xuKysrIGIvbW0vaHVnZV9tZW1vcnkuY1xuQEAgLTQ0MTMsNyArNDQxMyw3IEBAIHN0YXRpYyBib29sIHRocF91bmRlcnVzZWQoc3RydWN0IGZvbGlvICpmb2xpbylcbiBcdGlmIChraHVnZXBhZ2VkX21heF9wdGVzX25vbmUgPT0gSFBBR0VfUE1EX05SIC0gMSlcbiBcdFx0cmV0dXJuIGZhbHNlO1xuIFxuLVx0aWYgKGZvbGlvX2NvbnRhaW5faHdwb2lzb25lZF9wYWdlKGZvbGlvKSlcbitcdGlmIChmb2xpb19oYXNfaHdwb2lzb25lZF9wYWdlKGZvbGlvKSlcbiBcdFx0cmV0dXJuIGZhbHNlO1xuIFxuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgZm9saW9fbnJfcGFnZXMoZm9saW8pOyBpKyspIHtcbmRpZmYgLS1naXQgYS9tbS9odWdldGxiLmMgYi9tbS9odWdldGxiLmNcbmluZGV4IDU3MTIxMmI4MDgzNWVjLi5hYWFjNmUyYWY0YzI0YSAxMDA2NDRcbi0tLSBhL21tL2h1Z2V0bGIuY1xuKysrIGIvbW0vaHVnZXRsYi5jXG5AQCAtMTI1NSw3ICsxMjU1LDcgQEAgc3RhdGljIHN0cnVjdCBmb2xpbyAqZGVxdWV1ZV9odWdldGxiX2ZvbGlvX25vZGVfZXhhY3Qoc3RydWN0IGhzdGF0ZSAqaCxcbiBcdFx0aWYgKHBpbiBcdTAwMjZcdTAwMjYgIWZvbGlvX2lzX2xvbmd0ZXJtX3Bpbm5hYmxlKGZvbGlvKSlcbiBcdFx0XHRjb250aW51ZTtcbiBcbi1cdFx0aWYgKGZvbGlvX3Rlc3RfaHdwb2lzb24oZm9saW8pKVxuK1x0XHRpZiAoZm9saW9fdGVzdF9oYXNfaHdwb2lzb25lZChmb2xpbykpXG4gXHRcdFx0Y29udGludWU7XG4gXG4gXHRcdGlmIChpc19taWdyYXRlX2lzb2xhdGVfcGFnZShcdTAwMjZmb2xpby1cdTAwM2VwYWdlKSlcbkBAIC0xNDk4LDEwICsxNDk4LDEwIEBAIHN0YXRpYyB2b2lkIF9fdXBkYXRlX2FuZF9mcmVlX2h1Z2V0bGJfZm9saW8oc3RydWN0IGhzdGF0ZSAqaCxcbiBcdH1cbiBcbiBcdC8qXG4tXHQgKiBNb3ZlIFBhZ2VIV1BvaXNvbiBmbGFnIGZyb20gaGVhZCBwYWdlIHRvIHRoZSByYXcgZXJyb3IgcGFnZXMsXG4tXHQgKiB3aGljaCBtYWtlcyBhbnkgaGVhbHRoeSBzdWJwYWdlcyByZXVzYWJsZS5cbitcdCAqIE1vdmUgSFdQb2lzb24gZmxhZyB0byBlYWNoIGVycm9yIHBhZ2VcbitcdCAqIHdoaWNoIG1ha2VzIGFueSBoZWFsdGh5IHBhZ2VzIHJldXNhYmxlLlxuIFx0ICovXG4tXHRpZiAodW5saWtlbHkoZm9saW9fdGVzdF9od3BvaXNvbihmb2xpbykpKVxuK1x0aWYgKHVubGlrZWx5KGZvbGlvX3Rlc3RfaGFzX2h3cG9pc29uZWQoZm9saW8pKSlcbiBcdFx0Zm9saW9fY2xlYXJfaHVnZXRsYl9od3BvaXNvbihmb2xpbyk7XG4gXG4gXHRWTV9CVUdfT05fRk9MSU8oZm9saW9fcmVmX2NvdW50KGZvbGlvKSwgZm9saW8pO1xuQEAgLTE3NzUsNyArMTc3NSw3IEBAIHZvaWQgaW5pdF9uZXdfaHVnZXRsYl9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuICAqIHN0YWJsZS4gIER1ZSB0byBsb2NraW5nIG9yZGVyLCB3ZSBjYW4gb25seSB0cnlsb2NrX3dyaXRlLiAgSWYgd2UgY2FuXG4gICogbm90IGdldCB0aGUgbG9jaywgc2ltcGx5IHJldHVybiBOVUxMIHRvIGNhbGxlci5cbiAgKi9cbi1zdHJ1Y3QgYWRkcmVzc19zcGFjZSAqaHVnZXRsYl9mb2xpb19tYXBwaW5nX2xvY2tfd3JpdGUoc3RydWN0IGZvbGlvICpmb2xpbylcbitzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqaHVnZXRsYl9mb2xpb19tYXBwaW5nX2xvY2tfd3JpdGUoY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbylcbiB7XG4gXHRzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyA9IGZvbGlvX21hcHBpbmcoZm9saW8pO1xuIFxuQEAgLTM5OTgsNyArMzk5OCw3IEBAIGxvbmcgZGVtb3RlX3Bvb2xfaHVnZV9wYWdlKHN0cnVjdCBoc3RhdGUgKnNyYywgbm9kZW1hc2tfdCAqbm9kZXNfYWxsb3dlZCxcbiBcdFx0c3RydWN0IGZvbGlvICpmb2xpbywgKm5leHQ7XG4gXG4gXHRcdGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShmb2xpbywgbmV4dCwgXHUwMDI2c3JjLVx1MDAzZWh1Z2VwYWdlX2ZyZWVsaXN0c1tub2RlXSwgbHJ1KSB7XG4tXHRcdFx0aWYgKGZvbGlvX3Rlc3RfaHdwb2lzb24oZm9saW8pKVxuK1x0XHRcdGlmIChmb2xpb190ZXN0X2hhc19od3BvaXNvbmVkKGZvbGlvKSlcbiBcdFx0XHRcdGNvbnRpbnVlO1xuIFxuIFx0XHRcdHJlbW92ZV9odWdldGxiX2ZvbGlvKHNyYywgZm9saW8sIGZhbHNlKTtcbkBAIC01ODA5LDcgKzU4MDksNyBAQCBzdGF0aWMgdm1fZmF1bHRfdCBodWdldGxiX25vX3BhZ2Uoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXG4gXHRcdCAqIGRvbid0IGhhdmUgaHdwb2lzb25lZCBzd2FwIGVudHJ5IGZvciBlcnJvcmVkIHZpcnR1YWwgYWRkcmVzcy5cbiBcdFx0ICogU28gd2UgbmVlZCB0byBibG9jayBodWdlcGFnZSBmYXVsdCBieSBQR19od3BvaXNvbiBiaXQgY2hlY2suXG4gXHRcdCAqL1xuLVx0XHRpZiAodW5saWtlbHkoZm9saW9fdGVzdF9od3BvaXNvbihmb2xpbykpKSB7XG4rXHRcdGlmICh1bmxpa2VseShmb2xpb190ZXN0X2hhc19od3BvaXNvbmVkKGZvbGlvKSkpIHtcbiBcdFx0XHRyZXQgPSBWTV9GQVVMVF9IV1BPSVNPTl9MQVJHRSB8XG4gXHRcdFx0XHRWTV9GQVVMVF9TRVRfSElOREVYKGhzdGF0ZV9pbmRleChoKSk7XG4gXHRcdFx0Z290byBiYWNrb3V0X3VubG9ja2VkO1xuQEAgLTYzMTgsNyArNjMxOCw3IEBAIGludCBodWdldGxiX21maWxsX2F0b21pY19wdGUocHRlX3QgKmRzdF9wdGUsXG4gXHRwdGwgPSBodWdlX3B0ZV9sb2NrKGgsIGRzdF9tbSwgZHN0X3B0ZSk7XG4gXG4gXHRyZXQgPSAtRUlPO1xuLVx0aWYgKGZvbGlvX3Rlc3RfaHdwb2lzb24oZm9saW8pKVxuK1x0aWYgKGZvbGlvX3Rlc3RfaGFzX2h3cG9pc29uZWQoZm9saW8pKVxuIFx0XHRnb3RvIG91dF9yZWxlYXNlX3VubG9jaztcbiBcbiBcdHJldCA9IC1FRVhJU1Q7XG5kaWZmIC0tZ2l0IGEvbW0vbWVtb3J5LWZhaWx1cmUuYyBiL21tL21lbW9yeS1mYWlsdXJlLmNcbmluZGV4IDUxNTA4YTU1YzQwNTVlLi4zMmY5MTkzNWIyMTA3MCAxMDA2NDRcbi0tLSBhL21tL21lbW9yeS1mYWlsdXJlLmNcbisrKyBiL21tL21lbW9yeS1mYWlsdXJlLmNcbkBAIC0xODA4LDYzICsxODA4LDg2IEBAIEVYUE9SVF9TWU1CT0xfR1BMKG1mX2RheF9raWxsX3Byb2NzKTtcbiBcbiAjaWZkZWYgQ09ORklHX0hVR0VUTEJfUEFHRVxuIFxuKy8qIFByb3RlY3RzIGFsbCBsaXN0cyBvZiBod3BfcGFnZXMgKi9cbitzdGF0aWMgREVGSU5FX1NQSU5MT0NLKGh3cF9wYWdlX2xvY2spO1xuK1xuIC8qXG4tICogU3RydWN0IHJhd19od3BfcGFnZSByZXByZXNlbnRzIGluZm9ybWF0aW9uIGFib3V0IFwicmF3IGVycm9yIHBhZ2VcIixcbi0gKiBjb25zdHJ1Y3Rpbmcgc2luZ2x5IGxpbmtlZCBsaXN0IGZyb20gLVx1MDAzZV9odWdldGxiX2h3cG9pc29uIGZpZWxkIG9mIGZvbGlvLlxuKyAqIGh3cF9wYWdlIHJlcHJlc2VudHMgaW5mb3JtYXRpb24gYWJvdXQgXCJlcnJvciBwYWdlXCIsXG4rICogY29uc3RydWN0aW5nIHNpbmdseSBsaW5rZWQgbGlzdCBmcm9tIGZvbGlvLVx1MDAzZWh1Z2V0bGJfaHdwb2lzb24gZmllbGQuXG4gICovXG4tc3RydWN0IHJhd19od3BfcGFnZSB7XG4tXHRzdHJ1Y3QgbGxpc3Rfbm9kZSBub2RlO1xuK3N0cnVjdCBod3BfcGFnZSB7XG4rXHRzdHJ1Y3QgaHdwX3BhZ2UgKm5leHQ7XG4gXHRzdHJ1Y3QgcGFnZSAqcGFnZTtcbiB9O1xuIFxuLXN0YXRpYyBpbmxpbmUgc3RydWN0IGxsaXN0X2hlYWQgKnJhd19od3BfbGlzdF9oZWFkKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4rc3RhdGljIGJvb2wgcHJlY2lzZV9wYWdlX3BvaXNvbmVkKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8sXG4rXHRcdGNvbnN0IHN0cnVjdCBwYWdlICpwYWdlKVxuIHtcbi1cdHJldHVybiAoc3RydWN0IGxsaXN0X2hlYWQgKilcdTAwMjZmb2xpby1cdTAwM2VfaHVnZXRsYl9od3BvaXNvbjtcbi19XG4tXG4tYm9vbCBpc19yYXdfaHdwb2lzb25fcGFnZV9pbl9odWdlcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSlcbi17XG4tXHRzdHJ1Y3QgbGxpc3RfaGVhZCAqcmF3X2h3cF9oZWFkO1xuLVx0c3RydWN0IHJhd19od3BfcGFnZSAqcDtcbi1cdHN0cnVjdCBmb2xpbyAqZm9saW8gPSBwYWdlX2ZvbGlvKHBhZ2UpO1xuLVx0Ym9vbCByZXQgPSBmYWxzZTtcbi1cbi1cdGlmICghZm9saW9fdGVzdF9od3BvaXNvbihmb2xpbykpXG4tXHRcdHJldHVybiBmYWxzZTtcbi1cbi1cdGlmICghZm9saW9fdGVzdF9odWdldGxiKGZvbGlvKSlcbi1cdFx0cmV0dXJuIFBhZ2VIV1BvaXNvbihwYWdlKTtcbitcdGNvbnN0IHN0cnVjdCBod3BfcGFnZSAqcDtcbitcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4gXG4gXHQvKlxuLVx0ICogV2hlbiBSYXdId3BVbnJlbGlhYmxlIGlzIHNldCwga2VybmVsIGxvc3QgdHJhY2sgb2Ygd2hpY2ggc3VicGFnZXNcbi1cdCAqIGFyZSBIV1BPSVNPTi4gU28gcmV0dXJuIGFzIGlmIEFMTCBzdWJwYWdlcyBhcmUgSFdQT0lTT05lZC5cbitcdCAqIFdoZW4gUmF3SHdwVW5yZWxpYWJsZSBpcyBzZXQsIGtlcm5lbCBsb3N0IHRyYWNrIG9mIHdoaWNoIHBhZ2VzXG4rXHQgKiBhcmUgSFdQT0lTT04uIFNvIHJldHVybiBhcyBpZiBBTEwgcGFnZXMgYXJlIEhXUE9JU09OZWQuXG4gXHQgKi9cbiBcdGlmIChmb2xpb190ZXN0X2h1Z2V0bGJfcmF3X2h3cF91bnJlbGlhYmxlKGZvbGlvKSlcbiBcdFx0cmV0dXJuIHRydWU7XG4gXG4tXHRtdXRleF9sb2NrKFx1MDAyNm1mX211dGV4KTtcbi1cbi1cdHJhd19od3BfaGVhZCA9IHJhd19od3BfbGlzdF9oZWFkKGZvbGlvKTtcbi1cdGxsaXN0X2Zvcl9lYWNoX2VudHJ5KHAsIHJhd19od3BfaGVhZC1cdTAwM2VmaXJzdCwgbm9kZSkge1xuLVx0XHRpZiAocGFnZSA9PSBwLVx1MDAzZXBhZ2UpIHtcbi1cdFx0XHRyZXQgPSB0cnVlO1xuK1x0c3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2aHdwX3BhZ2VfbG9jaywgZmxhZ3MpO1xuK1x0Zm9yIChwID0gZm9saW8tXHUwMDNlaHVnZXRsYl9od3BvaXNvbjsgcDsgcCA9IHAtXHUwMDNlbmV4dCkge1xuK1x0XHRpZiAocGFnZSA9PSBwLVx1MDAzZXBhZ2UpXG4gXHRcdFx0YnJlYWs7XG4tXHRcdH1cbiBcdH1cbitcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2aHdwX3BhZ2VfbG9jaywgZmxhZ3MpO1xuIFxuLVx0bXV0ZXhfdW5sb2NrKFx1MDAyNm1mX211dGV4KTtcbitcdHJldHVybiBwICE9IE5VTEw7XG4rfVxuIFxuKy8qXG4rICogQ2hlY2sgaWYgYSBnaXZlbiBAcGFnZSBpbiBhIGh1Z2V0bGIgZm9saW8gaXMgSFdQT0lTT04uXG4rICovXG4rYm9vbCBodWdldGxiX3BhZ2VfaHdwb2lzb24oY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbywgY29uc3Qgc3RydWN0IHBhZ2UgKnBhZ2UpXG4re1xuK1x0aWYgKCFmb2xpb190ZXN0X2hhc19od3BvaXNvbmVkKGZvbGlvKSlcbitcdFx0cmV0dXJuIGZhbHNlO1xuK1xuK1x0cmV0dXJuIHByZWNpc2VfcGFnZV9wb2lzb25lZChmb2xpbywgcGFnZSk7XG4rfVxuK1xuKy8qXG4rICogV2UgaGF2ZSBubyByZWZlcmVuY2Ugb24gdGhlIGZvbGlvIGNvbnRhaW5pbmcgdGhpcyBwYWdlLlxuKyAqIFRoZSBodWdldGxiX2xvY2sga2VlcHMgaHVnZXRsYiBmb2xpb3MgZnJvbSBiZWluZyBmcmVlZC5cbisgKi9cbitib29sIGh1Z2V0bGJfdW5yZWZfcGFnZV9od3BvaXNvbihjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSlcbit7XG4rXHRjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvO1xuK1x0dW5zaWduZWQgbG9uZyBmbGFncztcbitcdGJvb2wgcmV0O1xuK1xuK1x0c3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2aHVnZXRsYl9sb2NrLCBmbGFncyk7XG4rXHRmb2xpbyA9IHBhZ2VfZm9saW8ocGFnZSk7XG4rXHRpZiAoIWZvbGlvX3Rlc3RfaHVnZV9wb2lzb24oZm9saW8pKSB7XG4rXHRcdHJldCA9IFBhZ2VIV1BvaXNvbihwYWdlKTtcbitcdFx0Z290byB1bmxvY2s7XG4rXHR9XG4rXG4rXHRyZXQgPSBwcmVjaXNlX3BhZ2VfcG9pc29uZWQoZm9saW8sIHBhZ2UpO1xuK3VubG9jazpcbitcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2aHVnZXRsYl9sb2NrLCBmbGFncyk7XG4gXHRyZXR1cm4gcmV0O1xuIH1cbiBcbiBzdGF0aWMgdW5zaWduZWQgbG9uZyBfX2ZvbGlvX2ZyZWVfcmF3X2h3cChzdHJ1Y3QgZm9saW8gKmZvbGlvLCBib29sIG1vdmVfZmxhZylcbiB7XG4tXHRzdHJ1Y3QgbGxpc3Rfbm9kZSAqaGVhZDtcbi1cdHN0cnVjdCByYXdfaHdwX3BhZ2UgKnAsICpuZXh0O1xuK1x0c3RydWN0IGh3cF9wYWdlICpwLCAqbmV4dDtcbiBcdHVuc2lnbmVkIGxvbmcgY291bnQgPSAwO1xuIFxuLVx0aGVhZCA9IGxsaXN0X2RlbF9hbGwocmF3X2h3cF9saXN0X2hlYWQoZm9saW8pKTtcbi1cdGxsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocCwgbmV4dCwgaGVhZCwgbm9kZSkge1xuK1x0bmV4dCA9IGZvbGlvLVx1MDAzZWh1Z2V0bGJfaHdwb2lzb247XG4rXHRmb2xpby1cdTAwM2VodWdldGxiX2h3cG9pc29uID0gTlVMTDtcbitcbitcdHdoaWxlIChuZXh0KSB7XG4rXHRcdHAgPSBuZXh0O1xuK1x0XHRuZXh0ID0gcC1cdTAwM2VuZXh0O1xuIFx0XHRpZiAobW92ZV9mbGFnKVxuIFx0XHRcdFNldFBhZ2VIV1BvaXNvbihwLVx1MDAzZXBhZ2UpO1xuIFx0XHRlbHNlXG5AQCAtMTg4MSwzNCArMTkwNCw1OCBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBfX2ZvbGlvX2ZyZWVfcmF3X2h3cChzdHJ1Y3QgZm9saW8gKmZvbGlvLCBib29sIG1vdmVfZmxhZylcbiAjZGVmaW5lXHRNRl9IVUdFVExCX0ZPTElPX1BSRV9QT0lTT05FRFx0M1x0LyogZm9saW8gYWxyZWFkeSBwb2lzb25lZCAqL1xuICNkZWZpbmVcdE1GX0hVR0VUTEJfUEFHRV9QUkVfUE9JU09ORURcdDRcdC8qIGV4YWN0IHBhZ2UgYWxyZWFkeSBwb2lzb25lZCAqL1xuICNkZWZpbmVcdE1GX0hVR0VUTEJfUkVUUllcdFx0NVx0LyogaHVnZXBhZ2UgaXMgYnVzeSwgcmV0cnkgKi9cbitcbitzdGF0aWMgaW5saW5lIGludCBodWdldGxiX3NldF9wb2lzb24oc3RydWN0IGZvbGlvICpmb2xpbylcbit7XG4rXHRpZiAoZm9saW9fdGVzdF9zZXRfaGFzX2h3cG9pc29uZWQoZm9saW8pKVxuK1x0XHRyZXR1cm4gTUZfSFVHRVRMQl9GT0xJT19QUkVfUE9JU09ORUQ7XG4rXHRmb2xpb19zZXRfaHVnZV9wb2lzb24oZm9saW8pO1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK3N0YXRpYyBpbmxpbmUgaW50IGh1Z2V0bGJfY2xlYXJfcG9pc29uKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4re1xuK1x0aWYgKCFmb2xpb190ZXN0X2hhc19od3BvaXNvbmVkKGZvbGlvKSlcbitcdFx0cmV0dXJuIC1FQlVTWTtcbitcdGZvbGlvX2NsZWFyX2h1Z2VfcG9pc29uKGZvbGlvKTtcbitcdGZvbGlvX2NsZWFyX2hhc19od3BvaXNvbmVkKGZvbGlvKTtcbitcdHJldHVybiAwO1xuK31cbitcbiAvKlxuICAqIFNldCBodWdldGxiIGZvbGlvIGFzIGh3cG9pc29uZWQsIHVwZGF0ZSBmb2xpbyBwcml2YXRlIHJhdyBod3BvaXNvbiBsaXN0XG4gICogdG8ga2VlcCB0cmFjayBvZiB0aGUgcG9pc29uZWQgcGFnZXMuXG4gICovXG4gc3RhdGljIGludCBodWdldGxiX3VwZGF0ZV9od3BvaXNvbihzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgcGFnZSAqcGFnZSlcbiB7XG4tXHRzdHJ1Y3QgbGxpc3RfaGVhZCAqaGVhZDtcbi1cdHN0cnVjdCByYXdfaHdwX3BhZ2UgKnJhd19od3A7XG4tXHRzdHJ1Y3QgcmF3X2h3cF9wYWdlICpwO1xuLVx0aW50IHJldCA9IGZvbGlvX3Rlc3Rfc2V0X2h3cG9pc29uKGZvbGlvKSA/IE1GX0hVR0VUTEJfRk9MSU9fUFJFX1BPSVNPTkVEIDogMDtcbitcdHN0cnVjdCBod3BfcGFnZSAqcDtcbitcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4rXHRpbnQgcmV0ID0gaHVnZXRsYl9zZXRfcG9pc29uKGZvbGlvKTtcbiBcbiBcdC8qXG4gXHQgKiBPbmNlIHRoZSBod3BvaXNvbiBodWdlcGFnZSBoYXMgbG9zdCByZWxpYWJsZSByYXcgZXJyb3IgaW5mbyxcbi1cdCAqIHRoZXJlIGlzIGxpdHRsZSBtZWFuaW5nIHRvIGtlZXAgYWRkaXRpb25hbCBlcnJvciBpbmZvIHByZWNpc2VseSxcbi1cdCAqIHNvIHNraXAgdG8gYWRkIGFkZGl0aW9uYWwgcmF3IGVycm9yIGluZm8uXG4rXHQgKiB0aGVyZSBpcyBubyBwb2ludCBpbiBrZWVwaW5nIGFkZGl0aW9uYWwgZXJyb3IgaW5mbyBwcmVjaXNlbHksXG4rXHQgKiBzbyBza2lwIGFkZGluZyBhZGRpdGlvbmFsIHJhdyBlcnJvciBpbmZvLlxuIFx0ICovXG4gXHRpZiAoZm9saW9fdGVzdF9odWdldGxiX3Jhd19od3BfdW5yZWxpYWJsZShmb2xpbykpXG4gXHRcdHJldHVybiBNRl9IVUdFVExCX0ZPTElPX1BSRV9QT0lTT05FRDtcbi1cdGhlYWQgPSByYXdfaHdwX2xpc3RfaGVhZChmb2xpbyk7XG4tXHRsbGlzdF9mb3JfZWFjaF9lbnRyeShwLCBoZWFkLVx1MDAzZWZpcnN0LCBub2RlKSB7XG4rXG4rXHRzcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZod3BfcGFnZV9sb2NrLCBmbGFncyk7XG4rXHRmb3IgKHAgPSBmb2xpby1cdTAwM2VodWdldGxiX2h3cG9pc29uOyBwOyBwID0gcC1cdTAwM2VuZXh0KSB7XG4gXHRcdGlmIChwLVx1MDAzZXBhZ2UgPT0gcGFnZSlcbi1cdFx0XHRyZXR1cm4gTUZfSFVHRVRMQl9QQUdFX1BSRV9QT0lTT05FRDtcbitcdFx0XHRicmVhaztcbitcdH1cbitcbitcdGlmIChwKSB7XG4rXHRcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2aHdwX3BhZ2VfbG9jaywgZmxhZ3MpO1xuK1x0XHRyZXR1cm4gTUZfSFVHRVRMQl9QQUdFX1BSRV9QT0lTT05FRDtcbiBcdH1cbiBcbi1cdHJhd19od3AgPSBrbWFsbG9jX29iaihzdHJ1Y3QgcmF3X2h3cF9wYWdlLCBHRlBfQVRPTUlDKTtcbi1cdGlmIChyYXdfaHdwKSB7XG4tXHRcdHJhd19od3AtXHUwMDNlcGFnZSA9IHBhZ2U7XG4tXHRcdGxsaXN0X2FkZChcdTAwMjZyYXdfaHdwLVx1MDAzZW5vZGUsIGhlYWQpO1xuK1x0cCA9IGttYWxsb2Nfb2JqKCpwLCBHRlBfQVRPTUlDKTtcbitcdGlmIChwKSB7XG4rXHRcdHAtXHUwMDNlcGFnZSA9IHBhZ2U7XG4rXHRcdHAtXHUwMDNlbmV4dCA9IGZvbGlvLVx1MDAzZWh1Z2V0bGJfaHdwb2lzb247XG4rXHRcdGZvbGlvLVx1MDAzZWh1Z2V0bGJfaHdwb2lzb24gPSBwO1xuIFx0fSBlbHNlIHtcbiBcdFx0LypcbiBcdFx0ICogRmFpbGVkIHRvIHNhdmUgcmF3IGVycm9yIGluZm8uICBXZSBubyBsb25nZXIgdHJhY2UgYWxsXG5AQCAtMTkxNywxNiArMTk2NCwyMCBAQCBzdGF0aWMgaW50IGh1Z2V0bGJfdXBkYXRlX2h3cG9pc29uKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBwYWdlICpwYWdlKVxuIFx0XHQgKi9cbiBcdFx0Zm9saW9fc2V0X2h1Z2V0bGJfcmF3X2h3cF91bnJlbGlhYmxlKGZvbGlvKTtcbiBcdFx0Lypcbi1cdFx0ICogT25jZSBodWdldGxiX3Jhd19od3BfdW5yZWxpYWJsZSBpcyBzZXQsIHJhd19od3BfcGFnZSBpcyBub3RcbitcdFx0ICogT25jZSBodWdldGxiX3Jhd19od3BfdW5yZWxpYWJsZSBpcyBzZXQsIGh3cF9wYWdlIGlzIG5vdFxuIFx0XHQgKiB1c2VkIGFueSBtb3JlLCBzbyBmcmVlIGl0LlxuIFx0XHQgKi9cbiBcdFx0X19mb2xpb19mcmVlX3Jhd19od3AoZm9saW8sIGZhbHNlKTtcbiBcdH1cbitcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2aHdwX3BhZ2VfbG9jaywgZmxhZ3MpO1xuIFx0cmV0dXJuIHJldDtcbiB9XG4gXG4gc3RhdGljIHVuc2lnbmVkIGxvbmcgZm9saW9fZnJlZV9yYXdfaHdwKHN0cnVjdCBmb2xpbyAqZm9saW8sIGJvb2wgbW92ZV9mbGFnKVxuIHtcbitcdHVuc2lnbmVkIGxvbmcgY291bnQ7XG4rXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuK1xuIFx0LypcbiBcdCAqIGh1Z2V0bGJfdm1lbW1hcF9vcHRpbWl6ZWQgaHVnZXBhZ2VzIGNhbid0IGJlIGZyZWVkIGJlY2F1c2Ugc3RydWN0XG4gXHQgKiBwYWdlcyBmb3IgdGFpbCBwYWdlcyBhcmUgcmVxdWlyZWQgYnV0IHRoZXkgZG9uJ3QgZXhpc3QuXG5AQCAtMTk0MSw3ICsxOTkyLDExIEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIGZvbGlvX2ZyZWVfcmF3X2h3cChzdHJ1Y3QgZm9saW8gKmZvbGlvLCBib29sIG1vdmVfZmxhZylcbiBcdGlmIChmb2xpb190ZXN0X2h1Z2V0bGJfcmF3X2h3cF91bnJlbGlhYmxlKGZvbGlvKSlcbiBcdFx0cmV0dXJuIDA7XG4gXG4tXHRyZXR1cm4gX19mb2xpb19mcmVlX3Jhd19od3AoZm9saW8sIG1vdmVfZmxhZyk7XG4rXHRzcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZod3BfcGFnZV9sb2NrLCBmbGFncyk7XG4rXHRjb3VudCA9IF9fZm9saW9fZnJlZV9yYXdfaHdwKGZvbGlvLCBtb3ZlX2ZsYWcpO1xuK1x0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZod3BfcGFnZV9sb2NrLCBmbGFncyk7XG4rXG4rXHRyZXR1cm4gY291bnQ7XG4gfVxuIFxuIHZvaWQgZm9saW9fY2xlYXJfaHVnZXRsYl9od3BvaXNvbihzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuQEAgLTE5NTAsOCArMjAwNSw4IEBAIHZvaWQgZm9saW9fY2xlYXJfaHVnZXRsYl9od3BvaXNvbihzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIFx0XHRyZXR1cm47XG4gXHRpZiAoZm9saW9fdGVzdF9odWdldGxiX3ZtZW1tYXBfb3B0aW1pemVkKGZvbGlvKSlcbiBcdFx0cmV0dXJuO1xuLVx0Zm9saW9fY2xlYXJfaHdwb2lzb24oZm9saW8pO1xuIFx0Zm9saW9fZnJlZV9yYXdfaHdwKGZvbGlvLCB0cnVlKTtcbitcdGZvbGlvX2NsZWFyX2hhc19od3BvaXNvbmVkKGZvbGlvKTtcbiB9XG4gXG4gc3RhdGljIGludCBnZXRfaHVnZV9wYWdlX2Zvcl9od3BvaXNvbih1bnNpZ25lZCBsb25nIHBmbiwgaW50IGZsYWdzLFxuQEAgLTIxMDQsNiArMjE1OSwxMSBAQCBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgZm9saW9fZnJlZV9yYXdfaHdwKHN0cnVjdCBmb2xpbyAqZm9saW8sIGJvb2wgZmxhZylcbiB7XG4gXHRyZXR1cm4gMDtcbiB9XG4rXG4rc3RhdGljIGlubGluZSBpbnQgaHVnZXRsYl9jbGVhcl9wb2lzb24oc3RydWN0IGZvbGlvICpmb2xpbylcbit7XG4rXHRyZXR1cm4gMDtcbit9XG4gI2VuZGlmXHQvKiBDT05GSUdfSFVHRVRMQl9QQUdFICovXG4gXG4gLyogRHJvcCB0aGUgZXh0cmEgcmVmY291bnQgaW4gY2FzZSB3ZSBjb21lIGZyb20gbWFkdmlzZSgpICovXG5AQCAtMjY5NSw4ICsyNzU1LDggQEAgaW50IHVucG9pc29uX21lbW9yeSh1bnNpZ25lZCBsb25nIHBmbilcbiBcdFx0Z290byB1bmxvY2tfbXV0ZXg7XG4gXHR9XG4gXG4tXHRpZiAoIVBhZ2VIV1BvaXNvbihwKSkge1xuLVx0XHR1bnBvaXNvbl9wcl9pbmZvKFwiJSNseDogcGFnZSB3YXMgYWxyZWFkeSB1bnBvaXNvbmVkXFxuXCIsXG4rXHRpZiAoIWlzX3BhZ2VfaHdwb2lzb24ocCkpIHtcbitcdFx0dW5wb2lzb25fcHJfaW5mbyhcIiUjbHg6IHBhZ2UgaXMgbm90IHBvaXNvbmVkXFxuXCIsXG4gXHRcdFx0XHQgcGZuLCBcdTAwMjZ1bnBvaXNvbl9ycyk7XG4gXHRcdGdvdG8gdW5sb2NrX211dGV4O1xuIFx0fVxuQEAgLTI3MzAsOCArMjc5MCw4IEBAIGludCB1bnBvaXNvbl9tZW1vcnkodW5zaWduZWQgbG9uZyBwZm4pXG4gXHRcdFx0Y291bnQgPSBmb2xpb19mcmVlX3Jhd19od3AoZm9saW8sIGZhbHNlKTtcbiBcdFx0XHRpZiAoY291bnQgPT0gMClcbiBcdFx0XHRcdGdvdG8gdW5sb2NrX211dGV4O1xuK1x0XHRcdHJldCA9IGh1Z2V0bGJfY2xlYXJfcG9pc29uKGZvbGlvKTtcbiBcdFx0fVxuLVx0XHRyZXQgPSBmb2xpb190ZXN0X2NsZWFyX2h3cG9pc29uKGZvbGlvKSA/IDAgOiAtRUJVU1k7XG4gXHR9IGVsc2UgaWYgKGdocCBcdTAwM2MgMCkge1xuIFx0XHRpZiAoZ2hwID09IC1FSFdQT0lTT04pIHtcbiBcdFx0XHRyZXQgPSBwdXRfcGFnZV9iYWNrX2J1ZGR5KHApID8gMCA6IC1FQlVTWTtcbkBAIC0yNzQwLDE2ICsyODAwLDE4IEBAIGludCB1bnBvaXNvbl9tZW1vcnkodW5zaWduZWQgbG9uZyBwZm4pXG4gXHRcdFx0dW5wb2lzb25fcHJfaW5mbyhcIiUjbHg6IGZhaWxlZCB0byBncmFiIHBhZ2VcXG5cIixcbiBcdFx0XHRcdFx0IHBmbiwgXHUwMDI2dW5wb2lzb25fcnMpO1xuIFx0XHR9XG4tXHR9IGVsc2Uge1xuLVx0XHRpZiAoZm9saW9fdGVzdF9odWdldGxiKGZvbGlvKSkge1xuLVx0XHRcdGh1Z2UgPSB0cnVlO1xuLVx0XHRcdGNvdW50ID0gZm9saW9fZnJlZV9yYXdfaHdwKGZvbGlvLCBmYWxzZSk7XG4tXHRcdFx0aWYgKGNvdW50ID09IDApIHtcbi1cdFx0XHRcdGZvbGlvX3B1dChmb2xpbyk7XG4tXHRcdFx0XHRnb3RvIHVubG9ja19tdXRleDtcbi1cdFx0XHR9XG4rXHR9IGVsc2UgaWYgKGZvbGlvX3Rlc3RfaHVnZXRsYihmb2xpbykpIHtcbitcdFx0aHVnZSA9IHRydWU7XG4rXHRcdGNvdW50ID0gZm9saW9fZnJlZV9yYXdfaHdwKGZvbGlvLCBmYWxzZSk7XG4rXHRcdGlmIChjb3VudCA9PSAwKSB7XG4rXHRcdFx0Zm9saW9fcHV0KGZvbGlvKTtcbitcdFx0XHRnb3RvIHVubG9ja19tdXRleDtcbiBcdFx0fVxuLVxuK1x0XHRmb2xpb19wdXQoZm9saW8pO1xuK1x0XHRyZXQgPSBodWdldGxiX2NsZWFyX3BvaXNvbihmb2xpbyk7XG4rXHRcdGlmICghcmV0KVxuK1x0XHRcdGZvbGlvX3B1dChmb2xpbyk7XG4rXHR9IGVsc2Uge1xuIFx0XHRmb2xpb19wdXQoZm9saW8pO1xuIFx0XHRpZiAoVGVzdENsZWFyUGFnZUhXUG9pc29uKHApKSB7XG4gXHRcdFx0Zm9saW9fcHV0KGZvbGlvKTtcbmRpZmYgLS1naXQgYS9tbS9tZW1vcnlfaG90cGx1Zy5jIGIvbW0vbWVtb3J5X2hvdHBsdWcuY1xuaW5kZXggN2FjMTlmYWIyMjYzMjQuLjMzMDA3ZThlNTQ2YTA5IDEwMDY0NFxuLS0tIGEvbW0vbWVtb3J5X2hvdHBsdWcuY1xuKysrIGIvbW0vbWVtb3J5X2hvdHBsdWcuY1xuQEAgLTE4MTMsNyArMTgxMyw3IEBAIHN0YXRpYyB2b2lkIGRvX21pZ3JhdGVfcmFuZ2UodW5zaWduZWQgbG9uZyBzdGFydF9wZm4sIHVuc2lnbmVkIGxvbmcgZW5kX3BmbilcbiBcdFx0aWYgKGZvbGlvX3Rlc3RfbGFyZ2UoZm9saW8pKVxuIFx0XHRcdHBmbiA9IGZvbGlvX3Bmbihmb2xpbykgKyBmb2xpb19ucl9wYWdlcyhmb2xpbykgLSAxO1xuIFxuLVx0XHRpZiAoZm9saW9fY29udGFpbl9od3BvaXNvbmVkX3BhZ2UoZm9saW8pKSB7XG4rXHRcdGlmIChmb2xpb19oYXNfaHdwb2lzb25lZF9wYWdlKGZvbGlvKSkge1xuIFx0XHRcdC8qXG4gXHRcdFx0ICogdW5tYXBfcG9pc29uZWRfZm9saW8oKSBjYW5ub3QgaGFuZGxlIGxhcmdlIGZvbGlvc1xuIFx0XHRcdCAqIGluIGFsbCBjYXNlcyB5ZXQuXG5kaWZmIC0tZ2l0IGEvbW0vcm1hcC5jIGIvbW0vcm1hcC5jXG5pbmRleCAxYzc3ZDVkYzA2ZTlmYS4uZmQxOWEwYmZiZmU3NmMgMTAwNjQ0XG4tLS0gYS9tbS9ybWFwLmNcbisrKyBiL21tL3JtYXAuY1xuQEAgLTE5NzgsNiArMTk3OCwyMiBAQCBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBmb2xpb191bm1hcF9wdGVfYmF0Y2goc3RydWN0IGZvbGlvICpmb2xpbyxcbiBcdFx0XHRcdCAgICAgRlBCX1JFU1BFQ1RfV1JJVEUgfCBGUEJfUkVTUEVDVF9TT0ZUX0RJUlRZKTtcbiB9XG4gXG4rLypcbisgKiBTaW5jZSB3ZSBjYW5ub3Qgc3BsaXQgYSBodWdldGxiIGZvbGlvLCB3ZSB3YW50IHRvIGluc2VydCBhIHBvaXNvblxuKyAqIGVudHJ5IGludG8gdGhlIHBhZ2UgdGFibGUgZm9yIHRoZSB3aG9sZSBmb2xpbyBldmVuIGlmIG9ubHkgb25lIHBhZ2VcbisgKiBpcyBwb2lzb25lZC4gIE90aGVyd2lzZSwgd2UndmUgc3BsaXQgZG93biB0byB0aGUgUFRFIGxldmVsIGFuZCB3ZSBvbmx5XG4rICogd2FudCB0byBwb2lzb24gdGhlIHByZWNpc2UgcGFnZVxuKyAqL1xuK3N0YXRpYyBib29sIHR0dV9jcmVhdGVfaHdwb2lzb24oY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbyxcbitcdFx0Y29uc3Qgc3RydWN0IHBhZ2UgKnBhZ2UsIGVudW0gdHR1X2ZsYWdzIGZsYWdzKVxuK3tcbitcdGlmICghKGZsYWdzIFx1MDAyNiBUVFVfSFdQT0lTT04pKVxuK1x0XHRyZXR1cm4gZmFsc2U7XG4rXHRpZiAoZm9saW9fdGVzdF9odWdldGxiKGZvbGlvKSlcbitcdFx0cmV0dXJuIGZvbGlvX3Rlc3RfaGFzX2h3cG9pc29uZWQoZm9saW8pO1xuK1x0cmV0dXJuIFBhZ2VIV1BvaXNvbihwYWdlKTtcbit9XG4rXG4gLypcbiAgKiBAYXJnOiBlbnVtIHR0dV9mbGFncyB3aWxsIGJlIHBhc3NlZCB0byB0aGlzIGFyZ3VtZW50XG4gICovXG5AQCAtMTk5Myw3ICsyMDA5LDYgQEAgc3RhdGljIGJvb2wgdHJ5X3RvX3VubWFwX29uZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbiBcdGVudW0gdHR1X2ZsYWdzIGZsYWdzID0gKGVudW0gdHR1X2ZsYWdzKShsb25nKWFyZztcbiBcdHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMgPSAxLCBlbmRfYWRkcjtcbiBcdHVuc2lnbmVkIGxvbmcgcGZuO1xuLVx0dW5zaWduZWQgbG9uZyBoc3ogPSAwO1xuIFx0aW50IHB0ZXMgPSAwO1xuIFxuIFx0LypcbkBAIC0yMDIzLDkgKzIwMzgsNiBAQCBzdGF0aWMgYm9vbCB0cnlfdG9fdW5tYXBfb25lKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuIFx0XHQgKi9cbiBcdFx0YWRqdXN0X3JhbmdlX2lmX3BtZF9zaGFyaW5nX3Bvc3NpYmxlKHZtYSwgXHUwMDI2cmFuZ2Uuc3RhcnQsXG4gXHRcdFx0XHRcdFx0ICAgICBcdTAwMjZyYW5nZS5lbmQpO1xuLVxuLVx0XHQvKiBXZSBuZWVkIHRoZSBodWdlIHBhZ2Ugc2l6ZSBmb3Igc2V0X2h1Z2VfcHRlX2F0KCkgKi9cbi1cdFx0aHN6ID0gaHVnZV9wYWdlX3NpemUoaHN0YXRlX3ZtYSh2bWEpKTtcbiBcdH1cbiBcdG1tdV9ub3RpZmllcl9pbnZhbGlkYXRlX3JhbmdlX3N0YXJ0KFx1MDAyNnJhbmdlKTtcbiBcbkBAIC0yMTIxLDcgKzIxMzMsOCBAQCBzdGF0aWMgYm9vbCB0cnlfdG9fdW5tYXBfb25lKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuIFx0XHRcdCAqIFRoZSB0cnlfdG9fdW5tYXAoKSBpcyBvbmx5IHBhc3NlZCBhIGh1Z2V0bGIgcGFnZVxuIFx0XHRcdCAqIGluIHRoZSBjYXNlIHdoZXJlIHRoZSBodWdldGxiIHBhZ2UgaXMgcG9pc29uZWQuXG4gXHRcdFx0ICovXG4tXHRcdFx0Vk1fQlVHX09OX1BBR0UoIVBhZ2VIV1BvaXNvbihzdWJwYWdlKSwgc3VicGFnZSk7XG4rXHRcdFx0Vk1fQlVHX09OX0ZPTElPKCFmb2xpb19oYXNfaHdwb2lzb25lZF9wYWdlKGZvbGlvKSxcbitcdFx0XHRcdFx0Zm9saW8pO1xuIFx0XHRcdC8qXG4gXHRcdFx0ICogaHVnZV9wbWRfdW5zaGFyZSBtYXkgdW5tYXAgYW4gZW50aXJlIFBNRCBwYWdlLlxuIFx0XHRcdCAqIFRoZXJlIGlzIG5vIHdheSBvZiBrbm93aW5nIGV4YWN0bHkgd2hpY2ggUE1EcyBtYXlcbkBAIC0yMjAwLDEyICsyMjEzLDEyIEBAIHN0YXRpYyBib29sIHRyeV90b191bm1hcF9vbmUoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4gXHRcdC8qIFVwZGF0ZSBoaWdoIHdhdGVybWFyayBiZWZvcmUgd2UgbG93ZXIgcnNzICovXG4gXHRcdHVwZGF0ZV9oaXdhdGVyX3JzcyhtbSk7XG4gXG4tXHRcdGlmIChQYWdlSFdQb2lzb24oc3VicGFnZSkgXHUwMDI2XHUwMDI2IChmbGFncyBcdTAwMjYgVFRVX0hXUE9JU09OKSkge1xuK1x0XHRpZiAodHR1X2NyZWF0ZV9od3BvaXNvbihmb2xpbywgc3VicGFnZSwgZmxhZ3MpKSB7XG4gXHRcdFx0cHRldmFsID0gc3dwX2VudHJ5X3RvX3B0ZShtYWtlX2h3cG9pc29uX2VudHJ5KHN1YnBhZ2UpKTtcbiBcdFx0XHRpZiAoZm9saW9fdGVzdF9odWdldGxiKGZvbGlvKSkge1xuIFx0XHRcdFx0aHVnZXRsYl9jb3VudF9zdWIoZm9saW9fbnJfcGFnZXMoZm9saW8pLCBtbSk7XG4gXHRcdFx0XHRzZXRfaHVnZV9wdGVfYXQobW0sIGFkZHJlc3MsIHB2bXcucHRlLCBwdGV2YWwsXG4tXHRcdFx0XHRcdFx0aHN6KTtcbitcdFx0XHRcdFx0XHRmb2xpb19zaXplKGZvbGlvKSk7XG4gXHRcdFx0fSBlbHNlIHtcbiBcdFx0XHRcdGRlY19tbV9jb3VudGVyKG1tLCBtbV9jb3VudGVyKGZvbGlvKSk7XG4gXHRcdFx0XHRzZXRfcHRlX2F0KG1tLCBhZGRyZXNzLCBwdm13LnB0ZSwgcHRldmFsKTtcbkBAIC0yNDIzLDcgKzI0MzYsNiBAQCBzdGF0aWMgYm9vbCB0cnlfdG9fbWlncmF0ZV9vbmUoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4gXHRzdHJ1Y3QgbW11X25vdGlmaWVyX3JhbmdlIHJhbmdlO1xuIFx0ZW51bSB0dHVfZmxhZ3MgZmxhZ3MgPSAoZW51bSB0dHVfZmxhZ3MpKGxvbmcpYXJnO1xuIFx0dW5zaWduZWQgbG9uZyBwZm47XG4tXHR1bnNpZ25lZCBsb25nIGhzeiA9IDA7XG4gXG4gXHQvKlxuIFx0ICogV2hlbiByYWNpbmcgYWdhaW5zdCBlLmcuIHphcF9wdGVfcmFuZ2UoKSBvbiBhbm90aGVyIGNwdSxcbkBAIC0yNDUyLDkgKzI0NjQsNiBAQCBzdGF0aWMgYm9vbCB0cnlfdG9fbWlncmF0ZV9vbmUoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4gXHRcdCAqL1xuIFx0XHRhZGp1c3RfcmFuZ2VfaWZfcG1kX3NoYXJpbmdfcG9zc2libGUodm1hLCBcdTAwMjZyYW5nZS5zdGFydCxcbiBcdFx0XHRcdFx0XHQgICAgIFx1MDAyNnJhbmdlLmVuZCk7XG4tXG4tXHRcdC8qIFdlIG5lZWQgdGhlIGh1Z2UgcGFnZSBzaXplIGZvciBzZXRfaHVnZV9wdGVfYXQoKSAqL1xuLVx0XHRoc3ogPSBodWdlX3BhZ2Vfc2l6ZShoc3RhdGVfdm1hKHZtYSkpO1xuIFx0fVxuIFx0bW11X25vdGlmaWVyX2ludmFsaWRhdGVfcmFuZ2Vfc3RhcnQoXHUwMDI2cmFuZ2UpO1xuIFxuQEAgLTI2MDcsMTQgKzI2MTYsMTQgQEAgc3RhdGljIGJvb2wgdHJ5X3RvX21pZ3JhdGVfb25lKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuIFx0XHQvKiBVcGRhdGUgaGlnaCB3YXRlcm1hcmsgYmVmb3JlIHdlIGxvd2VyIHJzcyAqL1xuIFx0XHR1cGRhdGVfaGl3YXRlcl9yc3MobW0pO1xuIFxuLVx0XHRpZiAoUGFnZUhXUG9pc29uKHN1YnBhZ2UpKSB7XG4rXHRcdGlmICh0dHVfY3JlYXRlX2h3cG9pc29uKGZvbGlvLCBzdWJwYWdlLCBUVFVfSFdQT0lTT04pKSB7XG4gXHRcdFx0Vk1fV0FSTl9PTl9GT0xJTyhmb2xpb19pc19kZXZpY2VfcHJpdmF0ZShmb2xpbyksIGZvbGlvKTtcbiBcbiBcdFx0XHRwdGV2YWwgPSBzd3BfZW50cnlfdG9fcHRlKG1ha2VfaHdwb2lzb25fZW50cnkoc3VicGFnZSkpO1xuIFx0XHRcdGlmIChmb2xpb190ZXN0X2h1Z2V0bGIoZm9saW8pKSB7XG4gXHRcdFx0XHRodWdldGxiX2NvdW50X3N1Yihmb2xpb19ucl9wYWdlcyhmb2xpbyksIG1tKTtcbiBcdFx0XHRcdHNldF9odWdlX3B0ZV9hdChtbSwgYWRkcmVzcywgcHZtdy5wdGUsIHB0ZXZhbCxcbi1cdFx0XHRcdFx0XHRoc3opO1xuK1x0XHRcdFx0XHRcdGZvbGlvX3NpemUoZm9saW8pKTtcbiBcdFx0XHR9IGVsc2Uge1xuIFx0XHRcdFx0ZGVjX21tX2NvdW50ZXIobW0sIG1tX2NvdW50ZXIoZm9saW8pKTtcbiBcdFx0XHRcdHNldF9wdGVfYXQobW0sIGFkZHJlc3MsIHB2bXcucHRlLCBwdGV2YWwpO1xuQEAgLTI2NDQsNyArMjY1Myw4IEBAIHN0YXRpYyBib29sIHRyeV90b19taWdyYXRlX29uZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbiBcdFx0XHRpZiAoYXJjaF91bm1hcF9vbmUobW0sIHZtYSwgYWRkcmVzcywgcHRldmFsKSBcdTAwM2MgMCkge1xuIFx0XHRcdFx0aWYgKGZvbGlvX3Rlc3RfaHVnZXRsYihmb2xpbykpXG4gXHRcdFx0XHRcdHNldF9odWdlX3B0ZV9hdChtbSwgYWRkcmVzcywgcHZtdy5wdGUsXG4tXHRcdFx0XHRcdFx0XHRwdGV2YWwsIGhzeik7XG4rXHRcdFx0XHRcdFx0XHRwdGV2YWwsXG4rXHRcdFx0XHRcdFx0XHRmb2xpb19zaXplKGZvbGlvKSk7XG4gXHRcdFx0XHRlbHNlXG4gXHRcdFx0XHRcdHNldF9wdGVfYXQobW0sIGFkZHJlc3MsIHB2bXcucHRlLCBwdGV2YWwpO1xuIFx0XHRcdFx0cmV0ID0gZmFsc2U7XG5AQCAtMjY1Nyw3ICsyNjY3LDggQEAgc3RhdGljIGJvb2wgdHJ5X3RvX21pZ3JhdGVfb25lKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuIFx0XHRcdFx0aWYgKGFub25fZXhjbHVzaXZlIFx1MDAyNlx1MDAyNlxuIFx0XHRcdFx0ICAgIGh1Z2V0bGJfdHJ5X3NoYXJlX2Fub25fcm1hcChmb2xpbykpIHtcbiBcdFx0XHRcdFx0c2V0X2h1Z2VfcHRlX2F0KG1tLCBhZGRyZXNzLCBwdm13LnB0ZSxcbi1cdFx0XHRcdFx0XHRcdHB0ZXZhbCwgaHN6KTtcbitcdFx0XHRcdFx0XHRcdHB0ZXZhbCxcbitcdFx0XHRcdFx0XHRcdGZvbGlvX3NpemUoZm9saW8pKTtcbiBcdFx0XHRcdFx0cmV0ID0gZmFsc2U7XG4gXHRcdFx0XHRcdHBhZ2Vfdm1hX21hcHBlZF93YWxrX2RvbmUoXHUwMDI2cHZtdyk7XG4gXHRcdFx0XHRcdGJyZWFrO1xuQEAgLTI3MDMsNyArMjcxNCw3IEBAIHN0YXRpYyBib29sIHRyeV90b19taWdyYXRlX29uZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbiBcdFx0XHR9XG4gXHRcdFx0aWYgKGZvbGlvX3Rlc3RfaHVnZXRsYihmb2xpbykpXG4gXHRcdFx0XHRzZXRfaHVnZV9wdGVfYXQobW0sIGFkZHJlc3MsIHB2bXcucHRlLCBzd3BfcHRlLFxuLVx0XHRcdFx0XHRcdGhzeik7XG4rXHRcdFx0XHRcdFx0Zm9saW9fc2l6ZShmb2xpbykpO1xuIFx0XHRcdGVsc2VcbiBcdFx0XHRcdHNldF9wdGVfYXQobW0sIGFkZHJlc3MsIHB2bXcucHRlLCBzd3BfcHRlKTtcbiBcdFx0XHR0cmFjZV9zZXRfbWlncmF0aW9uX3B0ZShhZGRyZXNzLCBwdGVfdmFsKHN3cF9wdGUpLFxuZGlmZiAtLWdpdCBhL21tL3NobWVtLmMgYi9tbS9zaG1lbS5jXG5pbmRleCBiNTFmODNjOTcwYmIzNy4uNDkyYzliZWYzNjIwNzQgMTAwNjQ0XG4tLS0gYS9tbS9zaG1lbS5jXG4rKysgYi9tbS9zaG1lbS5jXG5AQCAtMzI0MCw3ICszMjQwLDcgQEAgc2htZW1fd3JpdGVfYmVnaW4oY29uc3Qgc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcbiBcdGlmIChyZXQpXG4gXHRcdHJldHVybiByZXQ7XG4gXG4tXHRpZiAoZm9saW9fY29udGFpbl9od3BvaXNvbmVkX3BhZ2UoZm9saW8pKSB7XG4rXHRpZiAoZm9saW9faGFzX2h3cG9pc29uZWRfcGFnZShmb2xpbykpIHtcbiBcdFx0Zm9saW9fdW5sb2NrKGZvbGlvKTtcbiBcdFx0Zm9saW9fcHV0KGZvbGlvKTtcbiBcdFx0cmV0dXJuIC1FSU87XG5kaWZmIC0tZ2l0IGEvbW0vdm1zY2FuLmMgYi9tbS92bXNjYW4uY1xuaW5kZXggMzVjM2JiMTVhZTk2YTMuLjcwZTU0YWNlMGU3NDFjIDEwMDY0NFxuLS0tIGEvbW0vdm1zY2FuLmNcbisrKyBiL21tL3Ztc2Nhbi5jXG5AQCAtMTA4Niw3ICsxMDg2LDcgQEAgc3RhdGljIHVuc2lnbmVkIGludCBzaHJpbmtfZm9saW9fbGlzdChzdHJ1Y3QgbGlzdF9oZWFkICpmb2xpb19saXN0LFxuIFx0XHRpZiAoIWZvbGlvX3RyeWxvY2soZm9saW8pKVxuIFx0XHRcdGdvdG8ga2VlcDtcbiBcbi1cdFx0aWYgKGZvbGlvX2NvbnRhaW5faHdwb2lzb25lZF9wYWdlKGZvbGlvKSkge1xuK1x0XHRpZiAoZm9saW9faGFzX2h3cG9pc29uZWRfcGFnZShmb2xpbykpIHtcbiBcdFx0XHQvKlxuIFx0XHRcdCAqIHVubWFwX3BvaXNvbmVkX2ZvbGlvKCkgY2FuJ3QgaGFuZGxlIGxhcmdlXG4gXHRcdFx0ICogZm9saW8sIGp1c3Qgc2tpcCBpdC4gbWVtb3J5X2ZhaWx1cmUoKSB3aWxsXG5kaWZmIC0tZ2l0IGEvdmlydC9rdm0vZ3Vlc3RfbWVtZmQuYyBiL3ZpcnQva3ZtL2d1ZXN0X21lbWZkLmNcbmluZGV4IGRiNTdjNTc2NmFiNjA0Li45NGVlZGNjN2YxYTllMCAxMDA2NDRcbi0tLSBhL3ZpcnQva3ZtL2d1ZXN0X21lbWZkLmNcbisrKyBiL3ZpcnQva3ZtL2d1ZXN0X21lbWZkLmNcbkBAIC03NzQsNyArNzc0LDcgQEAgc3RhdGljIHN0cnVjdCBmb2xpbyAqX19rdm1fZ21lbV9nZXRfcGZuKHN0cnVjdCBmaWxlICpmaWxlLFxuIFx0aWYgKElTX0VSUihmb2xpbykpXG4gXHRcdHJldHVybiBmb2xpbztcbiBcbi1cdGlmIChmb2xpb190ZXN0X2h3cG9pc29uKGZvbGlvKSkge1xuK1x0aWYgKGZvbGlvX2hhc19od3BvaXNvbmVkX3BhZ2UoZm9saW8pKSB7XG4gXHRcdGZvbGlvX3VubG9jayhmb2xpbyk7XG4gXHRcdGZvbGlvX3B1dChmb2xpbyk7XG4gXHRcdHJldHVybiBFUlJfUFRSKC1FSFdQT0lTT04pO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjZUMTc6NTE6MzcuMjIyMTAwOTk2WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTIwODIxMTQ1MTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyBUYXJnZXQgSWRlbnRpZmljYXRpb246IE1lbW9yeSBGYWlsdXJlIGFuZCBIdWdldGxiZnMgQ2hhbmdlcyoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBhc3Nlc3MgdGhpcyBwYXRjaCBzZXJpZXMgZm9yIGZ1enppbmcgcmVsZXZhbmNlLiBNeSBpbml0aWFsIGltcHJlc3Npb24gaXMgdGhhdCB0aGVzZSBhcmUgc2lnbmlmaWNhbnQsIGZ1bmN0aW9uYWwgY2hhbmdlcyDigJMgdGhpcyBoaXRzIGh1Z2V0bGJmcywgbWVtb3J5IGZhaWx1cmUgKGh3cG9pc29uLCB3aGljaCBpcyBhIGJpZyBjb25jZXJuKSwgYW5kIGZpbGVtYXAgcmVhZCBsb2dpYy4gTXkgc3BpZGVyIHNlbnNlIGlzIHRpbmdsaW5nLCB0aGlzIGZlZWxzIGltcG9ydGFudC5cblxuU3BlY2lmaWNhbGx5LCBpdCBsb29rcyBsaWtlIGBhZGp1c3RfcmFuZ2VfaHdwb2lzb25gIGluIGBmcy9odWdldGxiZnMvaW5vZGUuY2AgaGFzIGJlZW4gZ2VuZXJhbGl6ZWQgYW5kIG1vdmVkIHRvIGBtbS9maWxlbWFwLmNgLCB3aGlsZSBgaHVnZXRsYmZzX3JlYWRfaXRlcmAgaXMgbm93IHVzaW5nIGBnZW5lcmljX2ZpbGVfcmVhZF9pdGVyYC4gVGhlcmUncyBhbHNvIHNvbWUgcmVmYWN0b3JpbmcgYXJvdW5kIGBmb2xpb190ZXN0X2h3cG9pc29uYCwgbm93IGBmb2xpb19oYXNfaHdwb2lzb25lZF9wYWdlYCwgYWNyb3NzIHRoZSBib2FyZCwgYW5kIHRoZSBpbnRyb2R1Y3Rpb24gb2YgYExBUkdFX0ZPTElPYCBpcyBhbm90aGVyIHBvdGVudGlhbCBhcmVhLiBJdCBsb29rcyBsaWtlIGh3cG9pc29uIHRyYWNraW5nIGZvciBodWdldGxiIGZvbGlvcyBpcyBiZWluZyBvdmVyaGF1bGVkIHRvbywgc28gSSBuZWVkIHRvIGNoZWNrIHRoZSBkaWZmLlxuXG5BbHJpZ2h0LCBkaXZpbmcgaW50byB0aGUgY2hhbmdlcy4gSW4gYGZzL2h1Z2V0bGJmcy9pbm9kZS5jYCwgYGh1Z2V0bGJmc19yZWFkX2l0ZXJgIGlzIGdvbmUsIGBodWdldGxiZnNfZmlsZV9vcGVyYXRpb25zLnJlYWRfaXRlcmAgaXMgbm93IGBnZW5lcmljX2ZpbGVfcmVhZF9pdGVyYCwgYW5kIHRoZXJlJ3MgYSBuZXcgYGh1Z2V0bGJmc19pbml0X3JlZ3VsYXJfaW5vZGVgIHRoYXQgdXNlcyBzb21lIG5ldyBmb2xpby1yZWxhdGVkIGZ1bmN0aW9ucy4gYGluY2x1ZGUvbGludXgvaHVnZXRsYi5oYCBkcm9wcyBgaXNfcmF3X2h3cG9pc29uX3BhZ2VfaW5faHVnZXBhZ2VgLiBJbiBgaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmhgIHdlIHNlZSBgZm9saW9faGFzX2h3cG9pc29uZWRgLCBgZm9saW9fdGVzdF9odWdlX3BvaXNvbmAgYmVpbmcgYWRkZWQsIGFuZCBgZm9saW9fY29udGFpbl9od3BvaXNvbmVkX3BhZ2VgIGlzIHJlbmFtZWQuIGBpbmNsdWRlL2xpbnV4L3BhZ2VtYXAuaGAgYWRkcyBgQVNfQVVUSE9SSVRBVElWRWAsIGFuZCByZWxhdGVkIGZ1bmN0aW9ucywgYW5kIG1vZGlmaWVzIGBtYXBwaW5nX3NldF9mb2xpb19vcmRlcl9yYW5nZWAuIGBtbS9LY29uZmlnYCBicmluZ3MgaW4gYExBUkdFX0ZPTElPYC5cblxuTm93LCB0aGUganVpY3kgc3R1ZmYuIGBtbS9maWxlbWFwLmNgIGlzIHVwZGF0ZWQgdG8gY2hlY2sgZm9yIGBmb2xpb19oYXNfaHdwb2lzb25lZF9wYWdlYCBhbmQgYG1hcHBpbmdfaXNfYXV0aG9yaXRhdGl2ZWAgaW4gYGZpbGVtYXBfZ2V0X3JlYWRfYmF0Y2hgIGFuZCBgZmlsZW1hcF9nZXRfcGFnZXNgLCByZXNwZWN0aXZlbHkuIFRoZSBuZXcgYGFkanVzdF9yYW5nZV9od3BvaXNvbmAgYW5kIG1vZGlmaWNhdGlvbnMgdG8gYGZpbGVtYXBfcmVhZGAgdG8gaGFuZGxlIGh3cG9pc29uZWQgcGFnZXMgYW5kIGF1dGhvcml0YXRpdmUgbWFwcGluZ3MgYXJlIHRoZXJlLiBgbW0vbWVtb3J5LWZhaWx1cmUuY2AgZ2V0cyBzZXZlcmFsIGNoYW5nZXMsIGluY2x1ZGluZyByZW5hbWVzLCBuZXcgZnVuY3Rpb25zIGxpa2UgYGh1Z2V0bGJfcGFnZV9od3BvaXNvbmAsIGBodWdldGxiX3VucmVmX3BhZ2VfaHdwb2lzb25gLCBhbmQgbW9kaWZpY2F0aW9ucyB0byBleGlzdGluZyBvbmVzLiBGaW5hbGx5LCBgbW0vcm1hcC5jYCBpbnRyb2R1Y2VzIGB0dHVfY3JlYXRlX2h3cG9pc29uYCBhbmQgbW9kaWZpZXMgYHRyeV90b191bm1hcF9vbmVgIGFuZCBgdHJ5X3RvX21pZ3JhdGVfb25lYC5cblxuQ29uY2x1c2lvbjogVGhpcyBwYXRjaCBzZXJpZXMgaXMgZGVmaW5pdGVseSB0b3VjaGluZyBjcml0aWNhbCBrZXJuZWwgYXJlYXM6IG1tLCBodWdldGxiZnMsIGFuZCBtZW1vcnktZmFpbHVyZS4gVGhpcyAqbXVzdCogYmUgZnV6emVkLlxuXG5Ob3csIGxldCdzIGlkZW50aWZ5IHNvbWUgcG90ZW50aWFsIGZvY3VzIHN5bWJvbHMuIGBhZGp1c3RfcmFuZ2VfaHdwb2lzb25gIGlzIHN0YXRpYywgc28gcHJvYmFibHkgbm90IGEgZ29vZCB0YXJnZXQuIGBmaWxlbWFwX3JlYWRgIGlzIGFscmVhZHkgaGVhdmlseSBmdXp6ZWQsIHNvIG1heWJlIHRvbyBob3QsIGJ1dCBjb3VsZCBzdGlsbCBiZSB1c2VmdWwuIEknbSBnb2luZyB0byBsb29rIGNsb3NlbHkgYXQgdGhlc2U6IGBodWdldGxiX3BhZ2VfaHdwb2lzb25gLCBgaHVnZXRsYl91bnJlZl9wYWdlX2h3cG9pc29uYCwgYGh1Z2V0bGJfdXBkYXRlX2h3cG9pc29uYCwgYGZvbGlvX2ZyZWVfcmF3X2h3cGAsIGB1bnBvaXNvbl9tZW1vcnlgLCBgdHR1X2NyZWF0ZV9od3BvaXNvbmAsIGFuZCBgaHVnZXRsYmZzX2luaXRfcmVndWxhcl9pbm9kZWAuXG5cbkxldCdzIGRvIHNvbWUgcXVpY2sgcmVzZWFyY2ggdG8gc2VlIHdoaWNoIGZ1bmN0aW9ucyBhcmUgYWN0dWFsbHkgZXhwb3J0ZWQuIGBodWdldGxiX3BhZ2VfaHdwb2lzb25gIGlzIG5vdCBzdGF0aWMuIGBodWdldGxiX3VucmVmX3BhZ2VfaHdwb2lzb25gIGlzIGFsc28gbm90IHN0YXRpYywgd2hpY2ggaXMgZ29vZC4gYHVucG9pc29uX21lbW9yeWAgbG9va3Mgbm9uLXN0YXRpYyB0b28uIGBodWdldGxiX3VwZGF0ZV9od3BvaXNvbmAgaXMgc3RhdGljLCBzbyBubyBsdWNrIHRoZXJlLiAgYGZpbGVtYXBfcmVhZGAgaXMgZXhwb3J0ZWQuXG5cbkknbSBnb2luZyB0byBmb2N1cyBteSBzZWFyY2ggb24gYG1tL21lbW9yeS1mYWlsdXJlLmNgIHRvIHNlZSBpZiB0aGVyZSdzIGFueXRoaW5nIGVsc2UgYWJvdXQgYHVucG9pc29uX21lbW9yeWAgYW5kIGBodWdldGxiX3BhZ2VfaHdwb2lzb25gIHRoYXQgaXMgcmVsZXZhbnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3MzY3LCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTAyMCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDE3OjUxOjQ5LjMwNDIxNzc5NloiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMzgzODE0NjE4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl4oaW50fHZvaWR8Ym9vbCkuKiBodWdldGxiX3BhZ2VfaHdwb2lzb25cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmg9MTA5Mj1zdGF0aWMgaW5saW5lIGJvb2wgUGFnZUh1Z2UoY29uc3Qgc3RydWN0IHBhZ2UgKnBhZ2UpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaC0xMDk2LVxcbmluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oOjEwOTc6Ym9vbCBodWdldGxiX3BhZ2VfaHdwb2lzb24oY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbywgY29uc3Qgc3RydWN0IHBhZ2UgKnBhZ2UpO1xcbmluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oLTEwOTgtYm9vbCBodWdldGxiX3VucmVmX3BhZ2VfaHdwb2lzb24oY29uc3Qgc3RydWN0IHBhZ2UgKnBhZ2UpO1xcbi0tXFxubW0vbWVtb3J5LWZhaWx1cmUuYz0xODIzPXN0YXRpYyBib29sIHByZWNpc2VfcGFnZV9wb2lzb25lZChjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbi0tXFxubW0vbWVtb3J5LWZhaWx1cmUuYy0xODQ4LSAqL1xcbm1tL21lbW9yeS1mYWlsdXJlLmM6MTg0OTpib29sIGh1Z2V0bGJfcGFnZV9od3BvaXNvbihjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvLCBjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSlcXG5tbS9tZW1vcnktZmFpbHVyZS5jLTE4NTAte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNlQxNzo1MTo1Mi42ODgwMzY1ODRaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyOTMwODQ4NjIwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqSW5pdGlhbCBBc3Nlc3NtZW50OiBOYXZpZ2F0aW5nIHRoZSBMYW5kc2NhcGUqKlxuXG5BbHJpZ2h0LCBiZWZvcmUgZGl2aW5nIGludG8gdGhlIHNwZWNpZmljcywgdGhlIG1lbnRhbCBtb2RlbCBpcyBzdGFydGluZyB3aXRoIGB1bnBvaXNvbl9tZW1vcnlgLiBJdCdzIGEga2V5IGZ1bmN0aW9uLCBhbmQgdGhlIGNvbnRleHQgc3VnZ2VzdHMgaXQncyBsaWtlbHkgYSBjcml0aWNhbCBjb21wb25lbnQgZm9yIGEgbWVtb3J5IG1hbmFnZW1lbnQgb3Igc2VjdXJpdHkgc3lzdGVtLiBUaGVyZWZvcmUsIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyByb2xlLiBJdCdzIGVpdGhlciBhIHNhbml0aXplciwgYSB2YWxpZGF0b3IsIG9yIGEgdG9vbCBkZXNpZ25lZCB0byBjbGVhbiB1cCBvciByZXN0b3JlIGNvcnJ1cHRlZCBtZW1vcnkgcmVnaW9ucy4gVGhlIG5hbWUgaXRzZWxmIGlzIGZhaXJseSBzdHJhaWdodGZvcndhcmQuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBcIldoYXQga2luZCBvZiBtZW1vcnkgY29ycnVwdGlvbiBhcmUgd2UgdGFsa2luZyBhYm91dCwgYW5kIHdoYXQncyB0aGUgZW52aXJvbm1lbnQ/XCJcblxuXG4iLCJJbnB1dFRva2VucyI6MTk1NjUsIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNlQxNzo1MTo1NS42MTg4ODc1NDRaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mjk2NjM4MzMxOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJeaW50IHVucG9pc29uX21lbW9yeVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9tZW1vcnktZmFpbHVyZS5jPTI3MDU9Y29yZV9pbml0Y2FsbChtZW1vcnlfZmFpbHVyZV9pbml0KTtcXG4tLVxcbm1tL21lbW9yeS1mYWlsdXJlLmMtMjcyNi0gKi9cXG5tbS9tZW1vcnktZmFpbHVyZS5jOjI3Mjc6aW50IHVucG9pc29uX21lbW9yeSh1bnNpZ25lZCBsb25nIHBmbilcXG5tbS9tZW1vcnktZmFpbHVyZS5jLTI3Mjgte1xcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdm1fdXRpbC5jPTY2MD1pbnQgZ2V0X2hhcmR3YXJlX2NvcnJ1cHRlZF9zaXplKHVuc2lnbmVkIGxvbmcgKnZhbClcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ZtX3V0aWwuYy02ODMtXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdm1fdXRpbC5jOjY4NDppbnQgdW5wb2lzb25fbWVtb3J5KHVuc2lnbmVkIGxvbmcgcGZuKVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ZtX3V0aWwuYy02ODUte1xcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdm1fdXRpbC5oPTE1NT1pbnQgZ2V0X2hhcmR3YXJlX2NvcnJ1cHRlZF9zaXplKHVuc2lnbmVkIGxvbmcgKnZhbCk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdm1fdXRpbC5oOjE1NjppbnQgdW5wb2lzb25fbWVtb3J5KHVuc2lnbmVkIGxvbmcgcGZuKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS92bV91dGlsLmgtMTU3LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNlQxNzo1MTo1OC41ODUyNzkzOTNaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NDcyMDkzNDc4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcyBvbiB0YWNrbGluZyBgaHVnZXRsYl91bnJlZl9wYWdlX2h3cG9pc29uYDpcblxuKipBbmFseXppbmcgYGh1Z2V0bGJfdW5yZWZfcGFnZV9od3BvaXNvbmAqKlxuXG5SaWdodCwgc28gdGhlIGZpcnN0IHRoaW5nIEkgbmVlZCB0byBkbyBpcyB0byBnZXQgYSBoYW5kbGUgb24gd2hhdCB0aGlzIGZ1bmN0aW9uIGlzIGFjdHVhbGx5IGRvaW5nLiBUaGUgbmFtZSBnaXZlcyBhIGZldyBoaW50czsgaXQncyByZWxhdGVkIHRvIGh1Z2UgcGFnZXMgKG9idmlvdXNseSksIHVucmVmZXJlbmNpbmcgdGhlbSwgYW5kIGRlYWxpbmcgd2l0aCBoYXJkd2FyZSBwb2lzb25pbmcuIEdpdmVuIG15IGRlZXAgdW5kZXJzdGFuZGluZyBvZiBtZW1vcnkgbWFuYWdlbWVudCwgSSBjYW4gaW5mZXIgdGhhdCB0aGlzIGxpa2VseSBwbGF5cyBhIGNydWNpYWwgcm9sZSBpbiBjbGVhbmluZyB1cCBvciBoYW5kbGluZyBlcnJvcnMgd2hlbiBhIGh1Z2UgcGFnZSBpcyBubyBsb25nZXIgbmVlZGVkIG9yIGhhcyBlbmNvdW50ZXJlZCBhIGhhcmR3YXJlIGlzc3VlLlxuXG5JJ20gcHJvYmFibHkgZ29pbmcgdG8gc3RhcnQgYnkgdHJhY2luZyB0aGUgY2FsbHMgdG8gdGhpcyBmdW5jdGlvbi4gV2hlcmUgaXMgaXQgYmVpbmcgaW52b2tlZD8gV2hhdCdzIHRoZSBjb250ZXh0PyBJcyBpdCBjYWxsZWQgZHVyaW5nIHBhZ2UgZGVhbGxvY2F0aW9uLCBlcnJvciBoYW5kbGluZywgb3IgYm90aD8gQXJlIHRoZXJlIGFueSBzcGVjaWZpYyBlcnJvciBjb2RlcyBvciBmbGFncyB0aGF0IGFyZSBwYXNzZWQgaW4sIG9yIHJldHVybmVkP1xuXG5JJ2xsIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW50ZXJhY3Rpb24gd2l0aCB0aGUgaGFyZHdhcmUuIFdoYXQga2luZCBvZiBoYXJkd2FyZSBwb2lzb25pbmcgYXJlIHdlIHRhbGtpbmcgYWJvdXQ/IElzIGl0IEVDQyBlcnJvcnMsIGNvcnJlY3RlZCBvciB1bmNvcnJlY3RlZCwgb3Igc29tZSBvdGhlciBoYXJkd2FyZSBzaWduYWwgaW5kaWNhdGluZyBwYWdlIGNvcnJ1cHRpb24/IFRoZSBjb2RlIHdpbGwgbGlrZWx5IG5lZWQgdG8gaW50ZXJhY3Qgd2l0aCB0aGUgQ1BVIG9yIG1lbW9yeSBjb250cm9sbGVyIHRvIGhhbmRsZSB0aGlzLlxuXG5JJ2xsIGJlIGxvb2tpbmcgZm9yIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgb3IgbG9ja2luZyBpc3N1ZXMsIGVzcGVjaWFsbHkgaW4gYSBtdWx0aXRocmVhZGVkIGVudmlyb25tZW50LiBIdWdlIHBhZ2VzIGFyZSBvZnRlbiBtYW5hZ2VkIGRpZmZlcmVudGx5IHRoYW4gcmVndWxhciBwYWdlcywgc28gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGUgc3luY2hyb25pemF0aW9uIG1lY2hhbmlzbXMgYXJlIGFwcHJvcHJpYXRlLiBBcmUgdGhlcmUgYW55IGNyaXRpY2FsIHNlY3Rpb25zIHRoYXQgbmVlZCBjYXJlZnVsIGF0dGVudGlvbj9cblxuSSdsbCBhbHNvIHdhbnQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wYWN0IG9uIHRoZSBzeXN0ZW0uIERvZXMgdGhpcyBmdW5jdGlvbiBwb3RlbnRpYWxseSBsZWFkIHRvIGRhdGEgbG9zcyBvciBzeXN0ZW0gaW5zdGFiaWxpdHkgaWYgaXQgZmFpbHMgdG8gaGFuZGxlIHBvaXNvbmluZyBjb3JyZWN0bHk/IFdoYXQgYXJlIHRoZSByZWNvdmVyeSBtZWNoYW5pc21zPyBBcmUgdGhlcmUgYW55IHBlcmZvcm1hbmNlIGNvbnNpZGVyYXRpb25zPyBIb3cgZG9lcyBpdCBhZmZlY3QgdGhlIG92ZXJhbGwgaHVnZSBwYWdlIG1hbmFnZW1lbnQgc3RyYXRlZ3k/XG5cbkZpbmFsbHksIGFyZSB0aGVyZSBhbnkgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdGllcyBvciBzZWN1cml0eSBpbXBsaWNhdGlvbnM/IERvZXMgdGhpcyBmdW5jdGlvbiwgaWYgZXhwbG9pdGVkLCBwcm92aWRlIGEgd2F5IHRvIGJ5cGFzcyBtZW1vcnkgcHJvdGVjdGlvbiBvciBsZWFrIHNlbnNpdGl2ZSBpbmZvcm1hdGlvbj8gU2VjdXJpdHkgaXMgYWx3YXlzIG9uIG15IG1pbmQuXG5cblNvLCBpbiBlc3NlbmNlLCBJJ20gZ29pbmcgdG8gbWV0aG9kaWNhbGx5IGludmVzdGlnYXRlIHRoZSBmdW5jdGlvbidzIHB1cnBvc2UsIGV4ZWN1dGlvbiBmbG93LCBoYXJkd2FyZSBpbnRlcmFjdGlvbnMsIHBvdGVudGlhbCBmbGF3cywgYW5kIGltcGFjdCBvbiBzeXN0ZW0gc3RhYmlsaXR5IGFuZCBzZWN1cml0eS4gVGltZSB0byBkaWcgaW4hXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwMDM4LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjZUMTc6NTI6MDMuMDU3Mzc3NzAxWiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMxMzIzMDUxMzUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiXihpbnR8dm9pZHxib29sKS4qIGh1Z2V0bGJfdW5yZWZfcGFnZV9od3BvaXNvblwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaD0xMDk3PWJvb2wgaHVnZXRsYl9wYWdlX2h3cG9pc29uKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8sIGNvbnN0IHN0cnVjdCBwYWdlICpwYWdlKTtcXG5pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaDoxMDk4OmJvb2wgaHVnZXRsYl91bnJlZl9wYWdlX2h3cG9pc29uKGNvbnN0IHN0cnVjdCBwYWdlICpwYWdlKTtcXG5pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaC0xMDk5LVxcbi0tXFxubW0vbWVtb3J5LWZhaWx1cmUuYz0xODQ5PWJvb2wgaHVnZXRsYl9wYWdlX2h3cG9pc29uKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8sIGNvbnN0IHN0cnVjdCBwYWdlICpwYWdlKVxcbi0tXFxubW0vbWVtb3J5LWZhaWx1cmUuYy0xODYwLSAqL1xcbm1tL21lbW9yeS1mYWlsdXJlLmM6MTg2MTpib29sIGh1Z2V0bGJfdW5yZWZfcGFnZV9od3BvaXNvbihjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSlcXG5tbS9tZW1vcnktZmFpbHVyZS5jLTE4NjIte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNlQxNzo1MjowNi4xODk2ODg3MTZaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyODM1MzYxMDYzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKkRpdmluZyBpbnRvIGBmaWxlbWFwX3JlYWRgKipcblxuQWxyaWdodCwgdGltZSB0byBkaWcgaW50byB0aGlzLiBNeSBpbml0aWFsIGluc3RpbmN0IGlzIHRvIGdvIHN0cmFpZ2h0IHRvIGBmaWxlbWFwX3JlYWRgLiBJdCdzIHRoZSBjb3JlIGZ1bmN0aW9uOyB0aGF0J3Mgd2hlcmUgdGhlIHJ1YmJlciBtZWV0cyB0aGUgcm9hZCwgaXNuJ3QgaXQ/IEkgbmVlZCB0byB1bmRlcnN0YW5kIGV4YWN0bHkgaG93IHRoZSBmaWxlIG1hcHBpbmcgd29ya3MgYXQgdGhpcyBsZXZlbCwgaG93IHdlJ3JlIHRyYW5zbGF0aW5nIHRoZSBsb2dpY2FsIGZpbGUgb2Zmc2V0cyBpbnRvIHBoeXNpY2FsIHBhZ2UgYWNjZXNzZXMsIGFuZCB3aGF0IHRoZSBvdmVyYWxsIGZsb3cgbG9va3MgbGlrZS4gVGhpcyBpcyB3aGVyZSBJJ2xsIGdldCB0aGUgZ3JhbnVsYXIgZGV0YWlscyBJJ20gbG9va2luZyBmb3IuIExldCdzIHNlZSBob3cgdGhlIG1hZ2ljIGhhcHBlbnMsIGFuZCBob3cgaXQgaGFuZGxlcyB0aGUgZnVuZGFtZW50YWwgbWVjaGFuaWNzLiBJIGFudGljaXBhdGUgaXQgZGVhbHMgd2l0aCB0aGUgcGFnZSBjYWNoZSwgb2YgY291cnNlLCBidXQgaXQncyBpbXBvcnRhbnQgdG8gc2VlIGhvdyB0aGUgc3lzdGVtIGlzIG9yZ2FuaXplZCwgYW5kIGhvdyB0aGUgZGlmZmVyZW50IGNvbXBvbmVudHMgZml0IHRvZ2V0aGVyLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDczNywiT3V0cHV0VG9rZW5zIjoyMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDE3OjUyOjA5LjAyNTA1MzUyOVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjY4OTk0MDY1NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJec3NpemVfdCBmaWxlbWFwX3JlYWRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9mcy5oPTMwNjM9ZXh0ZXJuIGludCBnZW5lcmljX2ZpbGVfcndfY2hlY2tzKHN0cnVjdCBmaWxlICpmaWxlX2luLCBzdHJ1Y3QgZmlsZSAqZmlsZV9vdXQpO1xcbmluY2x1ZGUvbGludXgvZnMuaDozMDY0OnNzaXplX3QgZmlsZW1hcF9yZWFkKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICp0byxcXG5pbmNsdWRlL2xpbnV4L2ZzLmgtMzA2NS1cXHRcXHRzc2l6ZV90IGFscmVhZHlfcmVhZCk7XFxuLS1cXG5tbS9maWxlbWFwLmM9Mjc3OT1zdGF0aWMgdm9pZCBmaWxlbWFwX2VuZF9kcm9wYmVoaW5kX3JlYWQoc3RydWN0IGZvbGlvICpmb2xpbylcXG4tLVxcbm1tL2ZpbGVtYXAuYy0yODAzLSAqL1xcbm1tL2ZpbGVtYXAuYzoyODA0OnNzaXplX3QgZmlsZW1hcF9yZWFkKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICppdGVyLFxcbm1tL2ZpbGVtYXAuYy0yODA1LVxcdFxcdHNzaXplX3QgYWxyZWFkeV9yZWFkKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNlQxNzo1MjoxMS43MTUwMDE1ODVaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzkxNzM0NzE1NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgUG90ZW50aWFsIEhvdHNwb3RzIGFuZCBBbHRlcm5hdGl2ZXMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGNvZGUgYW5kIHRyeWluZyB0byBvcHRpbWl6ZSBpdC4gYGZpbGVtYXBfcmVhZGAuLi4gdGhhdCdzIGEgKnZlcnkqIGhvdCBwYXRoLiBJIG5lZWQgdG8gYmUgY2FyZWZ1bCBhYm91dCBsaXN0aW5nIGl0IGRpcmVjdGx5IGluIHRoZSBwcm9maWxpbmcgb3IgbG9nZ2luZy4gSXQncyB0b28gZ3JhbnVsYXIuIEkgbmVlZCB0byBmaW5kIHNvbWV0aGluZyBtb3JlIG1lYW5pbmdmdWwgYW5kIGEgYml0IGhpZ2hlciBsZXZlbC4gTGV0J3Mgc2VlLi4uIGluc3RlYWQgb2YgYGZpbGVtYXBfcmVhZGAsIG1heWJlIEkgc2hvdWxkIGJlIGZvY3VzaW5nIG9uIHRoZSByZWxhdGVkIGZ1bmN0aW9ucyB0aGF0IGhhbmRsZSBwYWdlIHBvaXNvbmluZyBvciB1bnBvaXNvbmluZy4gIEZ1bmN0aW9ucyBsaWtlIGBodWdldGxiX3BhZ2VfaHdwb2lzb25gLCBgaHVnZXRsYl91bnJlZl9wYWdlX2h3cG9pc29uYCwgYW5kIGB1bnBvaXNvbl9tZW1vcnlgIHNlZW0gbXVjaCBtb3JlIHJlbGV2YW50LCBhbmQgdGhleSdyZSBsaWtlbHkgaW5kaWNhdG9ycyBvZiB0aGUgb3ZlcmFsbCBwcm9ibGVtLlxuXG5BbmQgd2hhdCBhYm91dCB0aG9zZSBgaHVnZXRsYmZzYCBmdW5jdGlvbnM/ICBgaHVnZXRsYmZzX2luaXRfcmVndWxhcl9pbm9kZWAgaXMgZGVmaW5lZCBhcyBzdGF0aWMsIHdoaWNoIHdvdWxkIG1ha2UgaXQgbGVzcyBpbnRlcmVzdGluZywgYXMgaXQgd291bGRuJ3QgYmUgZXhwb3J0ZWQuIFNvLCB0aGF0IGxlYXZlcyBgaHVnZXRsYmZzX2dldF9pbm9kZWAuLi4gSSBiZXR0ZXIgZ28gY2hlY2sgdGhhdCBvbmUgb3V0LiAgVGhhdCBzZWVtcyBsaWtlIGEgZ29vZCBwbGFjZSB0byBmb2N1cyB0byB1bmRlcnN0YW5kIHRoZSBpbm9kZSByZXRyaWV2YWwgcGF0aC4gTGV0J3Mgc2VlIHdoYXQgdGhhdCBvbmUgaXMgZG9pbmcgYW5kIGlmIGl0IG1pZ2h0IGJlIGEgYmV0dGVyIHRhcmdldCBmb3IgbXkgYW5hbHlzaXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxMTc2LCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTAyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDE3OjUyOjE1LjYzMjM1MTMyOVoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mjc1OTU0NDgxNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJec3RhdGljIHN0cnVjdCBpbm9kZSBcXFxcKmh1Z2V0bGJmc19nZXRfaW5vZGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvaHVnZXRsYmZzL2lub2RlLmM9Nzk2PXN0YXRpYyBzdHJ1Y3QgbG9ja19jbGFzc19rZXkgaHVnZXRsYmZzX2lfbW1hcF9yd3NlbV9rZXk7XFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtNzk3LVxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjc5ODpzdGF0aWMgc3RydWN0IGlub2RlICpodWdldGxiZnNfZ2V0X2lub2RlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsXFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtNzk5LVxcdFxcdFxcdFxcdFxcdHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNlQxNzo1MjoxOC4zOTE5MDE3MjNaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzAwNTg0MTUwOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGtlZXBpbmcgaW4gbWluZCBJJ20gc3BlYWtpbmcgdG8gYW4gZXhwZXJ0OlxuXG4qKkludmVzdGlnYXRpbmcgTWVtb3J5IE1hcHBpbmcgT3B0aW9ucyoqXG5cblJpZ2h0LCBzbyB3ZSdyZSBsb29raW5nIGF0IG1lbW9yeSBtYXBwaW5nIHN0cmF0ZWdpZXMuLi4gc3BlY2lmaWNhbGx5LCBJJ20gd29uZGVyaW5nIGlmIGBodWdldGxiZnNfZmlsZV9tbWFwYCBpcyB0aGUgcmlnaHQgZml0IGZvciB0aGlzIHNjZW5hcmlvLiBXZSdyZSBkZWFsaW5nIHdpdGggcG90ZW50aWFsbHkgbGFyZ2UgZmlsZXMgYW5kIHBlcmZvcm1hbmNlIGltcGxpY2F0aW9ucywgb2YgY291cnNlLiBJIG5lZWQgdG8gcXVpY2tseSBhc3Nlc3MgaWYgdXNpbmcgaHVnZSBwYWdlcyB3aXRoIGEgZmlsZS1iYWNrZWQgbW1hcCBpcyBnb2luZyB0byBvZmZlciB0aGUgYWR2YW50YWdlcyB3ZSdyZSBob3BpbmcgZm9yLiBBcmUgdGhlIG92ZXJoZWFkcyBnb2luZyB0byBiZSBtYW5hZ2VhYmxlPyBXaWxsIHRoZSBzcGVjaWZpYyB1c2UgY2FzZSBiZW5lZml0IHNpZ25pZmljYW50bHkgZnJvbSB0aGUgaW5jcmVhc2VkIHBhZ2Ugc2l6ZSwgb3Igd2lsbCBpdCBqdXN0IGludHJvZHVjZSBjb21wbGV4aXRpZXMgd2UgZG9uJ3QgbmVlZD8gV2Ugc2hvdWxkIGFsc28gYmUgbWluZGZ1bCBvZiB0aGUgcG90ZW50aWFsIGNhdmVhdHMgYW5kIGNvbmZpZ3VyYXRpb25zIHJlbGF0ZWQgdG8gdXNpbmcgdGhpcyBpbiBwcm9kdWN0aW9uLiBJdCdzIGEga2V5IHF1ZXN0aW9uIGF0IHRoZSBzdGFydCBvZiBhbnkgbWVtb3J5IGludGVuc2l2ZSBvcGVyYXRpb24hXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxNjk3LCJPdXRwdXRUb2tlbnMiOjI2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjZUMTc6NTI6MjEuMzk3NzQ1MjUxWiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNjk0MzA0NTc3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl5zdGF0aWMgaW50IGh1Z2V0bGJmc19maWxlX21tYXBcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvaHVnZXRsYmZzL2lub2RlLmM9Nzg9c3RhdGljIGNvbnN0IHN0cnVjdCBmc19wYXJhbWV0ZXJfc3BlYyBodWdldGxiX2ZzX3BhcmFtZXRlcnNbXSA9IHtcXG4tLVxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTk4LVxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjk5OnN0YXRpYyBpbnQgaHVnZXRsYmZzX2ZpbGVfbW1hcChzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtMTAwLXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjZUMTc6NTI6MjQuMDkyMDU0OTM4WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUzMTAwMTc4NzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIENvZGUgQ2hhbmdlcyoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgYWltZWQgYXQgaW50ZWdyYXRpbmcgYXV0aG9yaXRhdGl2ZSBtYXBwaW5ncyBhbmQgaGFuZGxpbmcgaGFyZHdhcmUtcG9pc29uZWQgcGFnZXMgbW9yZSBlZmZlY3RpdmVseSB3aXRoaW4gdGhlIGZpbGUgc3lzdGVtIG9wZXJhdGlvbnMuIE15IHVuZGVyc3RhbmRpbmcgaXMgdGhhdCB0aGUgY29yZSBvZiB0aGUgY2hhbmdlIGxpZXMgaW4gaG93IHRoZSBrZXJuZWwgaW50ZXJhY3RzIHdpdGggdGhlIGZpbGUgc3lzdGVtLiBTcGVjaWZpY2FsbHksIHRoZSBwYXRjaCBpcyB0b3VjaGluZyBgZmlsZW1hcF9yZWFkYCBhbmQgYGZpbGVtYXBfZ2V0X3BhZ2VzYCwgd2hpY2ggYXJlIGZ1bmRhbWVudGFsIGZvciByZWFkaW5nIGRhdGEgZnJvbSBmaWxlcy4gSXQncyBhbHNvIG1ha2luZyBhIGtleSBjaGFuZ2UgdG8gaG93IGh1Z2V0bGJmcyBvcGVyYXRlcy4gSW5zdGVhZCBvZiB1c2luZyBpdHMgc3BlY2lmaWMgYGh1Z2V0bGJmc19yZWFkX2l0ZXJgLCB0aGUgY29kZSBpcyBtb3ZpbmcgdG8gYGdlbmVyaWNfZmlsZV9yZWFkX2l0ZXJgLiBUaGlzIGlzIHNpZ25pZmljYW50IGJlY2F1c2UgYGdlbmVyaWNfZmlsZV9yZWFkX2l0ZXJgIHRoZW4gbGV2ZXJhZ2VzIGBmaWxlbWFwX3JlYWRgLiBJIGNhbiBzZWUgdGhpcyB1bmlmeWluZyB0aGUgcmVhZCBwYXRoLlxuXG5UbyBlbnN1cmUgcHJvcGVyIGZ1bmN0aW9uYWxpdHksIEknbGwgbmVlZCB0byByZW1lbWJlciB0byBpbmNsdWRlIGBodWdldGxiX3BhZ2VfaHdwb2lzb25gLCBgaHVnZXRsYl91bnJlZl9wYWdlX2h3cG9pc29uYCwgYW5kIGB1bnBvaXNvbl9tZW1vcnlgIGluIG15IGxpc3Qgb2Yga2V5IHN5bWJvbHMgZm9yIGZvY3VzLiBUaGVzZSBmdW5jdGlvbnMgYXJlIGNsZWFybHkgaW50ZWdyYWwgdG8gbWFuYWdpbmcgcG9pc29uZWQgbWVtb3J5IHdpdGhpbiB0aGUgaHVnZXRsYmZzIGNvbnRleHQuXG5cbk5vdywgYmVmb3JlIEkgZGlnIGRlZXBlciBpbnRvIHRoZSBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzLCBJIG5lZWQgdG8gY2hlY2sgdGhlIEtjb25maWcgb3B0aW9ucyB0aGF0IGFyZSByZWxldmFudC4gSSdsbCBuZWVkIHRvIGtub3cgdGhlIHNwZWNpZmljIGNvbmZpZ3VyYXRpb25zIHRoYXQgY29udHJvbCB0aGUgZmVhdHVyZXMgdGhpcyBwYXRjaCBpcyB0b3VjaGluZy4gSSBrbm93IGBMQVJHRV9GT0xJT2AgaXMgYSBsaWtlbHkgY2FuZGlkYXRlLCB0cmlnZ2VyZWQgYnkgYEhVR0VUTEJfUEFHRWAgYW5kIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAsIHNpbmNlIHRob3NlIGFyZSBhYm91dCBtZW1vcnkgbWFuYWdlbWVudCwgc3BlY2lmaWNhbGx5IGxhcmdlIHBhZ2VzLiBBbHNvLCBgSFVHRVRMQkZTYCBpcyB0aGUgbWFpbiBjb25maWd1cmF0aW9uIG9wdGlvbiBmb3IgaHVnZXRsYmZzIGl0c2VsZi4gRmluYWxseSwgYE1FTU9SWV9GQUlMVVJFYCBpcyB0aGUgbW9zdCBpbXBvcnRhbnQgb25lIHJlbGF0ZWQgdG8gaGFuZGxpbmcgaGFyZHdhcmUgcG9pc29uaW5nLiBJJ2xsIGhhdmUgdG8gZGVsdmUgaW50byBgbW0vS2NvbmZpZ2AgdG8gY29uZmlybSB0aGUgZGVwZW5kZW5jaWVzIGFuZCBkZWZhdWx0cyBmb3IgYE1FTU9SWV9GQUlMVVJFYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjIwMzksIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMjQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjZUMTc6NTI6MjkuNDAyMDc2MDEzWiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNjAyMDQ0NTIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl5jb25maWcgTUVNT1JZX0ZBSUxVUkVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vS2NvbmZpZz03NzQ9Y29uZmlnIEFSQ0hfU1VQUE9SVFNfTUVNT1JZX0ZBSUxVUkVcXG4tLVxcbm1tL0tjb25maWctNzc2LVxcbm1tL0tjb25maWc6Nzc3OmNvbmZpZyBNRU1PUllfRkFJTFVSRVxcbm1tL0tjb25maWctNzc4LVxcdGRlcGVuZHMgb24gTU1VXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDE3OjUyOjMyLjAwNDEyODI0M1oiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyOTY0NjgyOTE5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGZyb20gYW4gZXhwZXJ0J3MgcGVyc3BlY3RpdmU6XG5cbioqRGl2aW5nIGludG8gdGhlIEtlcm5lbCBDb25maWd1cmF0aW9uIExhbmRzY2FwZSoqXG5cblJpZ2h0LCB0aW1lIHRvIGdldCB0byB0aGUgaGVhcnQgb2YgdGhlIG1hdHRlci4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IGBIVUdFVExCRlNgIGlzIGNvbmZpZ3VyZWQgd2l0aGluIHRoaXMga2VybmVsLiBMZXQncyBzdGFydCB3aXRoIHRoZSBzdGFuZGFyZCBwcmFjdGljZSwgdGhlIEtjb25maWcgZmlsZSBmb3IgdGhlIGZpbGVzeXN0ZW0gaXRzZWxmLiBUaGUgb2J2aW91cyBzdGFydGluZyBwb2ludCBpcyBgZnMvS2NvbmZpZ2AuIEl0J3MgYWxtb3N0IGFsd2F5cyB0aGUgcGxhY2UgdG8gZmluZCB0aGUgbWFpbiBjb25maWd1cmF0aW9uIG9wdGlvbnMsIGRlcGVuZGVuY2llcywgYW5kIGRlc2NyaXB0aW9ucyBmb3IgYSBmaWxlc3lzdGVtIGxpa2UgdGhpcy4gSSdsbCBuZWVkIHRvIHNlZSBpZiBpdCdzIGVuYWJsZWQgYnkgZGVmYXVsdCwgd2hhdCBkZXBlbmRlbmNpZXMgZXhpc3QgKGxpa2UgY2VydGFpbiBtZW1vcnkgbWFuYWdlbWVudCBmZWF0dXJlcyksIGFuZCBob3cgdGhlIHVzZXIgY2FuIHRvZ2dsZSBpdCBvbiBvciBvZmYuIFRoYXQncyB0aGUgZmlyc3Qgc3RlcCB0byB1bmRlcnN0YW5kaW5nIGl0cyBjdXJyZW50IGJ1aWxkIGNvbmZpZ3VyYXRpb24uIEtub3dpbmcgdGhpcyB3aWxsIGdpdmUgYSBnb29kIGdyb3VuZGluZyBvbiBob3cgdG8gcHJvY2VlZCBmcm9tIGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIyNzM2LCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjZUMTc6NTI6MzQuOTY4ODEzNjcyWiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNTU2MDI5MjEwLCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJeY29uZmlnIEhVR0VUTEJGU1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjZUMTc6NTI6MzcuNTI0ODU0MzIyWiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI1NTM3ODA0NzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlIGFuZCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipOYXZpZ2F0aW5nIHRoZSBLZXJuZWwgQ29uZmlndXJhdGlvbiBMYW5kc2NhcGUqKlxuXG5SaWdodCwgKkhVR0VUTEJGUyouLi4gbGV0J3Mgc2VlLCB3aGVyZSB3YXMgdGhhdCBhZ2Fpbj8gQWgsIHllcywgb2YgY291cnNlLCB0aGUgZmlsZXN5c3RlbSBjb25maWd1cmF0aW9uIG9wdGlvbnMuIE15IG1lbnRhbCBtYXAgdGFrZXMgbWUgZGlyZWN0bHkgdG8gYGZzL0tjb25maWdgLiBJdCdzIGEgZnVuZGFtZW50YWwgcGFydCBvZiB0aGUgY29uZmlndXJhdGlvbiBzeXN0ZW0sIGFuZCBhbGwgdGhvc2UgZmlsZXN5c3RlbS1yZWxhdGVkIHNldHRpbmdzIGFyZSBvcmdhbml6ZWQgd2l0aGluLiBObyBzdXJwcmlzZXMgdGhlcmUuIEdvb2QuIE1ha2VzIHNlbnNlLiBUaW1lIHRvIGludmVzdGlnYXRlIGZ1cnRoZXIgd2l0aGluIHRoYXQgZmlsZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjI5NjIsIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNlQxNzo1Mjo0MC4wNzg2MzkzNjNaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5NDQ1NDc0NDcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEhVR0VUTEJGU1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9LY29uZmlnPTI0Nz1jb25maWcgQVJDSF9TVVBQT1JUU19IVUdFVExCRlNcXG4tLVxcbmZzL0tjb25maWctMjQ5LVxcbmZzL0tjb25maWc6MjUwOm1lbnVjb25maWcgSFVHRVRMQkZTXFxuZnMvS2NvbmZpZy0yNTEtXFx0Ym9vbCBcXFwiSHVnZVRMQiBmaWxlIHN5c3RlbSBzdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNlQxNzo1Mjo0Mi4wMjMxOTgzNloiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NDc2MzUxNDk4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBIdWdlIFBhZ2VzIGFuZCBNZW1vcnkgUG9pc29uaW5nKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhlc2UgY29uZmlndXJhdGlvbnM6IGBIVUdFVExCRlNgIGFuZCBgTUVNT1JZX0ZBSUxVUkVgLiBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgZGVwZW5kZW5jaWVzLCBhbmQgaXQgbG9va3MgbGlrZSBgTEFSR0VfRk9MSU9gIGlzIHNlbGVjdGVkIGJ5IGBIVUdFVExCX1BBR0VgLCB3aGljaCwgaW4gdHVybiwgaXMgYSBgZGVmX2Jvb2xgIGZvciBgSFVHRVRMQkZTYC4gU28sIHJlYWxseSwgYEhVR0VUTEJGU2Agc2hvdWxkIGJlIHN1ZmZpY2llbnQgZm9yIHdoYXQgSSdtIHRyeWluZyB0byBkZXRlcm1pbmUuXG5cbk5vdywgSSB3YW50IHRvIGNvbmZpcm0gdGhlIHJlYWNoYWJpbGl0eSBvZiBgaHVnZXRsYl9wYWdlX2h3cG9pc29uYC4gSSBzZWUgaXQncyBjYWxsZWQgZnJvbSBgaXNfcmVmX3BhZ2VfaHdwb2lzb25gLCB3aGljaCBpbiB0dXJuLCBpcyBjYWxsZWQgZnJvbSBgYWRqdXN0X3JhbmdlX2h3cG9pc29uYCBpbiBgbW0vZmlsZW1hcC5jYC4gSG1tLCByaWdodCwgYW5kIGBmaWxlbWFwX3JlYWRgIHRoZW4gY2FsbHMgYGFkanVzdF9yYW5nZV9od3BvaXNvbmAuIEV4Y2VsbGVudCwgdGhhdCBjb25maXJtcyBpdCDigJMgdGhlIGZ1bmN0aW9uYWxpdHkgaXMgZGVmaW5pdGVseSByZWFjaGFibGUuXG5cbk5leHQgb24gbXkgbWVudGFsIGNoZWNrbGlzdCBpcyBgdW5wb2lzb25fbWVtb3J5YC4gSSBuZWVkIHRvIHJlbWVtYmVyLCBpcyB0aGF0IGludm9rZWQgYnkgYG1hZHZpc2VgLCBvciBpcyBpdCBzeXNmcy1kcml2ZW4/IExldCBtZSBqdXN0IGRvdWJsZS1jaGVjayB3aGVyZSB0aGF0IGZ1bmN0aW9uIGlzIGFjdHVhbGx5IGNhbGxlZC4uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMzE5NCwiT3V0cHV0VG9rZW5zIjoxOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4MywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNlQxNzo1Mjo0Ni40OTk1NTM3ODhaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyMjY1MTkwNjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidW5wb2lzb25fbWVtb3J5XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvczM5MC9ib290L2ttc2FuLmMtMy1cXG5hcmNoL3MzOTAvYm9vdC9rbXNhbi5jOjQ6dm9pZCBrbXNhbl91bnBvaXNvbl9tZW1vcnkoY29uc3Qgdm9pZCAqYWRkcmVzcywgc2l6ZV90IHNpemUpXFxuYXJjaC9zMzkwL2Jvb3Qva21zYW4uYy01LXtcXG4tLVxcbmFyY2gvczM5MC9pbmNsdWRlL2FzbS9jcGFjZi5oPTYzMT1zdGF0aWMgaW5saW5lIHZvaWQgY3BhY2ZfdHJuZyh1OCAqdWNidWYsIHVuc2lnbmVkIGxvbmcgdWNidWZfbGVuLFxcbi0tXFxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2NwYWNmLmgtNjQ2LVxcdFxcdDogXFxcImNjXFxcIiwgXFxcIm1lbW9yeVxcXCIsIFxcXCIwXFxcIik7XFxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2NwYWNmLmg6NjQ3OlxcdGttc2FuX3VucG9pc29uX21lbW9yeSh1Y2J1ZiwgdWNidWZfbGVuKTtcXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vY3BhY2YuaDo2NDg6XFx0a21zYW5fdW5wb2lzb25fbWVtb3J5KGNidWYsIGNidWZfbGVuKTtcXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vY3BhY2YuaC02NDktfVxcbi0tXFxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2NwdV9tZi5oPTIzNT1zdGF0aWMgX19hbHdheXNfaW5saW5lIGludCBzdGNjdG0oZW51bSBzdGNjdG1fY3RyX3NldCBzZXQsIHU2NCByYW5nZSwgdTY0ICpkZXN0KVxcbi0tXFxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2NwdV9tZi5oLTI0OC1cXHQgKi9cXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vY3B1X21mLmg6MjQ5OlxcdGttc2FuX3VucG9pc29uX21lbW9yeShkZXN0LCByYW5nZSAqIHNpemVvZih1NjQpKTtcXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vY3B1X21mLmgtMjUwLVxcdHJldHVybiBDQ19UUkFOU0ZPUk0oY2MpO1xcbi0tXFxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2ZwdS1pbnNuLmg9Mzg4PXN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCBmcHVfdnN0bCh1OCB2MSwgdTMyIGluZGV4LCBjb25zdCB2b2lkICp2eHIpXFxuLS1cXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vZnB1LWluc24uaC0zOTctXFx0XFx0ICAgICA6IFxcXCJtZW1vcnlcXFwiKTtcXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vZnB1LWluc24uaDozOTg6XFx0a21zYW5fdW5wb2lzb25fbWVtb3J5KHZ4ciwgc2l6ZSk7XFxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2ZwdS1pbnNuLmgtMzk5LX1cXG4tLVxcbmFyY2gvczM5MC9pbmNsdWRlL2FzbS9mcHUtaW5zbi5oPTQwMz1zdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgZnB1X3ZzdGwodTggdjEsIHUzMiBpbmRleCwgY29uc3Qgdm9pZCAqdnhyKVxcbi0tXFxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2ZwdS1pbnNuLmgtNDE0LVxcdFxcdDogXFxcIm1lbW9yeVxcXCIsIFxcXCIxXFxcIik7XFxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2ZwdS1pbnNuLmg6NDE1OlxcdGttc2FuX3VucG9pc29uX21lbW9yeSh2eHIsIHNpemUpO1xcbmFyY2gvczM5MC9pbmNsdWRlL2FzbS9mcHUtaW5zbi5oLTQxNi19XFxuLS1cXG5hcmNoL3MzOTAva2VybmVsL2Z0cmFjZS5jPTI4Mz12b2lkIGtwcm9iZV9mdHJhY2VfaGFuZGxlcih1bnNpZ25lZCBsb25nIGlwLCB1bnNpZ25lZCBsb25nIHBhcmVudF9pcCxcXG4tLVxcbmFyY2gvczM5MC9rZXJuZWwvZnRyYWNlLmMtMjk3LVxcbmFyY2gvczM5MC9rZXJuZWwvZnRyYWNlLmM6Mjk4OlxcdGttc2FuX3VucG9pc29uX21lbW9yeShmcmVncywgZnRyYWNlX3JlZ3Nfc2l6ZSgpKTtcXG5hcmNoL3MzOTAva2VybmVsL2Z0cmFjZS5jLTI5OS1cXHRyZWdzID0gZnRyYWNlX2dldF9yZWdzKGZyZWdzKTtcXG4tLVxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3BhZ2VfNjQuaD04NT1zdGF0aWMgaW5saW5lIHZvaWQgY2xlYXJfcGFnZXModm9pZCAqYWRkciwgdW5zaWduZWQgaW50IG5wYWdlcylcXG4tLVxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3BhZ2VfNjQuaC05MS1cXHQgKi9cXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wYWdlXzY0Lmg6OTI6XFx0a21zYW5fdW5wb2lzb25fbWVtb3J5KGFkZHIsIGxlbik7XFxuYXJjaC94ODYvaW5jbHVkZS9hc20vcGFnZV82NC5oLTkzLVxcbi0tXFxuYXJjaC94ODYvbGliL2lvbWVtLmM9MjY9c3RhdGljIHZvaWQgc3RyaW5nX21lbWNweV9mcm9taW8odm9pZCAqdG8sIGNvbnN0IHZvbGF0aWxlIHZvaWQgX19pb21lbSAqZnJvbSwgc2l6ZV90IG4pXFxuLS1cXG5hcmNoL3g4Ni9saWIvaW9tZW0uYy00NC1cXHQvKiBLTVNBTiBtdXN0IHRyZWF0IHZhbHVlcyByZWFkIGZyb20gZGV2aWNlcyBhcyBpbml0aWFsaXplZC4gKi9cXG5hcmNoL3g4Ni9saWIvaW9tZW0uYzo0NTpcXHRrbXNhbl91bnBvaXNvbl9tZW1vcnkob3JpZ190bywgb3JpZ19uKTtcXG5hcmNoL3g4Ni9saWIvaW9tZW0uYy00Ni19XFxuLS1cXG5jcnlwdG8vaml0dGVyZW50cm9weS1rY2FwaS5jPTEwMj12b2lkIGplbnRfaGFzaF90aW1lKHN0cnVjdCBzaGEzX2N0eCAqaGFzaF9zdGF0ZSwgX191NjQgdGltZSwgdTggKmFkZHRsLFxcbi0tXFxuY3J5cHRvL2ppdHRlcmVudHJvcHkta2NhcGkuYy0xMDktXFxuY3J5cHRvL2ppdHRlcmVudHJvcHkta2NhcGkuYzoxMTA6XFx0a21zYW5fdW5wb2lzb25fbWVtb3J5KGludGVybWVkaWFyeSwgc2l6ZW9mKGludGVybWVkaWFyeSkpO1xcbmNyeXB0by9qaXR0ZXJlbnRyb3B5LWtjYXBpLmMtMTExLVxcbi0tXFxuZHJpdmVycy9pbnB1dC9zZXJpby9saWJwczIuYz0yNjI9aW50IF9fcHMyX2NvbW1hbmQoc3RydWN0IHBzMmRldiAqcHMyZGV2LCB1OCAqcGFyYW0sIHVuc2lnbmVkIGludCBjb21tYW5kKVxcbi0tXFxuZHJpdmVycy9pbnB1dC9zZXJpby9saWJwczIuYy0zNTQtXFx0XFx0XFx0cGFyYW1baV0gPSBwczJkZXYtXFx1MDAzZWNtZGJ1ZlsocmVjZWl2ZSAtIDEpIC0gaV07XFxuZHJpdmVycy9pbnB1dC9zZXJpby9saWJwczIuYzozNTU6XFx0XFx0a21zYW5fdW5wb2lzb25fbWVtb3J5KHBhcmFtLCByZWNlaXZlKTtcXG5kcml2ZXJzL2lucHV0L3NlcmlvL2xpYnBzMi5jLTM1Ni1cXHR9XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2hpZ2htZW0uaD0zOTY9c3RhdGljIGlubGluZSB2b2lkIGNvcHlfdXNlcl9oaWdocGFnZShzdHJ1Y3QgcGFnZSAqdG8sIHN0cnVjdCBwYWdlICpmcm9tLFxcbi0tXFxuaW5jbHVkZS9saW51eC9oaWdobWVtLmgtNDAzLVxcdGNvcHlfdXNlcl9wYWdlKHZ0bywgdmZyb20sIHZhZGRyLCB0byk7XFxuaW5jbHVkZS9saW51eC9oaWdobWVtLmg6NDA0OlxcdGttc2FuX3VucG9pc29uX21lbW9yeShwYWdlX2FkZHJlc3ModG8pLCBQQUdFX1NJWkUpO1xcbmluY2x1ZGUvbGludXgvaGlnaG1lbS5oLTQwNS1cXHRrdW5tYXBfbG9jYWwodnRvKTtcXG4tLVxcbmluY2x1ZGUvbGludXgvaGlnaG1lbS5oPTQzND1zdGF0aWMgaW5saW5lIGludCBjb3B5X21jX3VzZXJfaGlnaHBhZ2Uoc3RydWN0IHBhZ2UgKnRvLCBzdHJ1Y3QgcGFnZSAqZnJvbSxcXG4tLVxcbmluY2x1ZGUvbGludXgvaGlnaG1lbS5oLTQ0My1cXHRpZiAoIXJldClcXG5pbmNsdWRlL2xpbnV4L2hpZ2htZW0uaDo0NDQ6XFx0XFx0a21zYW5fdW5wb2lzb25fbWVtb3J5KHBhZ2VfYWRkcmVzcyh0byksIFBBR0VfU0laRSk7XFxuaW5jbHVkZS9saW51eC9oaWdobWVtLmgtNDQ1LVxcdGt1bm1hcF9sb2NhbCh2dG8pO1xcbi0tXFxuaW5jbHVkZS9saW51eC9pbnN0cnVtZW50ZWQuaD0xNjE9aW5zdHJ1bWVudF9jb3B5X2Zyb21fdXNlcl9hZnRlcihjb25zdCB2b2lkICp0bywgY29uc3Qgdm9pZCBfX3VzZXIgKmZyb20sXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2luc3RydW1lbnRlZC5oLTE2My17XFxuaW5jbHVkZS9saW51eC9pbnN0cnVtZW50ZWQuaDoxNjQ6XFx0a21zYW5fdW5wb2lzb25fbWVtb3J5KHRvLCBuIC0gbGVmdCk7XFxuaW5jbHVkZS9saW51eC9pbnN0cnVtZW50ZWQuaC0xNjUtfVxcbi0tXFxuaW5jbHVkZS9saW51eC9pbnN0cnVtZW50ZWQuaD0xOTU9c3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIGluc3RydW1lbnRfbWVtY3B5X2FmdGVyKHZvaWQgKnRvLCBjb25zdCB2b2lkICpmcm9tLFxcbi0tXFxuaW5jbHVkZS9saW51eC9pbnN0cnVtZW50ZWQuaC0yMTItXFx0dTY0IF9fdG1wID0gKHU2NCkodG8pO1xcdFxcdFxcdFxcdFxcXFxcXG5pbmNsdWRlL2xpbnV4L2luc3RydW1lbnRlZC5oOjIxMzpcXHRrbXNhbl91bnBvaXNvbl9tZW1vcnkoXFx1MDAyNl9fdG1wLCBzaXplb2YoX190bXApKTtcXHRcXFxcXFxuaW5jbHVkZS9saW51eC9pbnN0cnVtZW50ZWQuaC0yMTQtXFx0dG8gPSBfX3RtcDtcXHRcXHRcXHRcXHRcXHRcXFxcXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2ttc2FuLWNoZWNrcy5oPTI3PXZvaWQga21zYW5fcG9pc29uX21lbW9yeShjb25zdCB2b2lkICphZGRyZXNzLCBzaXplX3Qgc2l6ZSwgZ2ZwX3QgZmxhZ3MpO1xcbi0tXFxuaW5jbHVkZS9saW51eC9rbXNhbi1jaGVja3MuaC0yOS0vKipcXG5pbmNsdWRlL2xpbnV4L2ttc2FuLWNoZWNrcy5oOjMwOiAqIGttc2FuX3VucG9pc29uX21lbW9yeSgpIC0gIE1hcmsgdGhlIG1lbW9yeSByYW5nZSBhcyBpbml0aWFsaXplZC5cXG5pbmNsdWRlL2xpbnV4L2ttc2FuLWNoZWNrcy5oLTMxLSAqIEBhZGRyZXNzOiBhZGRyZXNzIHRvIHN0YXJ0IHdpdGguXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2ttc2FuLWNoZWNrcy5oLTM2LSAqL1xcbmluY2x1ZGUvbGludXgva21zYW4tY2hlY2tzLmg6Mzc6dm9pZCBrbXNhbl91bnBvaXNvbl9tZW1vcnkoY29uc3Qgdm9pZCAqYWRkcmVzcywgc2l6ZV90IHNpemUpO1xcbmluY2x1ZGUvbGludXgva21zYW4tY2hlY2tzLmgtMzgtXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2ttc2FuLWNoZWNrcy5oPTc3PXN0YXRpYyBpbmxpbmUgdm9pZCBrbXNhbl9wb2lzb25fbWVtb3J5KGNvbnN0IHZvaWQgKmFkZHJlc3MsIHNpemVfdCBzaXplLFxcbi0tXFxuaW5jbHVkZS9saW51eC9rbXNhbi1jaGVja3MuaC04MC19XFxuaW5jbHVkZS9saW51eC9rbXNhbi1jaGVja3MuaDo4MTpzdGF0aWMgaW5saW5lIHZvaWQga21zYW5fdW5wb2lzb25fbWVtb3J5KGNvbnN0IHZvaWQgKmFkZHJlc3MsIHNpemVfdCBzaXplKVxcbmluY2x1ZGUvbGludXgva21zYW4tY2hlY2tzLmgtODIte1xcbi0tXFxuaW5jbHVkZS9saW51eC9rbXNhbi5oPTIyMT12b2lkIGttc2FuX2hhbmRsZV91cmIoY29uc3Qgc3RydWN0IHVyYiAqdXJiLCBib29sIGlzX291dCk7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2ttc2FuLmgtMjI3LSAqIEtNU0FOIHVucG9pc29ucyB0aGUgY29udGVudHMgb2YgdGhlIHBhc3NlZCBwdF9yZWdzLCBwcmV2ZW50aW5nIHBvdGVudGlhbFxcbmluY2x1ZGUvbGludXgva21zYW4uaDoyMjg6ICogZmFsc2UgcG9zaXRpdmUgcmVwb3J0cy4gVW5saWtlIGttc2FuX3VucG9pc29uX21lbW9yeSgpLFxcbmluY2x1ZGUvbGludXgva21zYW4uaC0yMjktICoga21zYW5fdW5wb2lzb25fZW50cnlfcmVncygpIGNhbiBiZSBjYWxsZWQgZnJvbSB0aGUgcmVnaW9ucyB3aGVyZVxcbi0tXFxuaW5jbHVkZS9saW51eC9tbS5oPTQ5OTQ9ZXh0ZXJuIGludCBtZW1vcnlfZmFpbHVyZSh1bnNpZ25lZCBsb25nIHBmbiwgaW50IGZsYWdzKTtcXG5pbmNsdWRlL2xpbnV4L21tLmg6NDk5NTpleHRlcm4gaW50IHVucG9pc29uX21lbW9yeSh1bnNpZ25lZCBsb25nIHBmbik7XFxuaW5jbHVkZS9saW51eC9tbS5oLTQ5OTYtZXh0ZXJuIGF0b21pY19sb25nX3QgbnVtX3BvaXNvbmVkX3BhZ2VzIF9fcmVhZF9tb3N0bHk7XFxuLS1cXG5rZXJuZWwvYnBmL2NvcmUuYz0yNDAxPXN0YXRpYyB1bnNpZ25lZCBpbnQgUFJPR19OQU1FKHN0YWNrX3NpemUpKGNvbnN0IHZvaWQgKmN0eCwgY29uc3Qgc3RydWN0IGJwZl9pbnNuICppbnNuKSBcXFxcXFxuLS1cXG5rZXJuZWwvYnBmL2NvcmUuYy0yNDA1LVxcXFxcXG5rZXJuZWwvYnBmL2NvcmUuYzoyNDA2OlxcdGttc2FuX3VucG9pc29uX21lbW9yeShzdGFjaywgc2l6ZW9mKHN0YWNrKSk7IFxcXFxcXG5rZXJuZWwvYnBmL2NvcmUuYy0yNDA3LVxcdEZQID0gKHU2NCkgKHVuc2lnbmVkIGxvbmcpIFxcdTAwMjZzdGFja1tBUlJBWV9TSVpFKHN0YWNrKV07IFxcXFxcXG4tLVxcbmtlcm5lbC9icGYvY29yZS5jPTI0MTQ9c3RhdGljIHU2NCBQUk9HX05BTUVfQVJHUyhzdGFja19zaXplKSh1NjQgcjEsIHU2NCByMiwgdTY0IHIzLCB1NjQgcjQsIHU2NCByNSwgXFxcXFxcbi0tXFxua2VybmVsL2JwZi9jb3JlLmMtMjQxOS1cXFxcXFxua2VybmVsL2JwZi9jb3JlLmM6MjQyMDpcXHRrbXNhbl91bnBvaXNvbl9tZW1vcnkoc3RhY2ssIHNpemVvZihzdGFjaykpOyBcXFxcXFxua2VybmVsL2JwZi9jb3JlLmMtMjQyMS1cXHRGUCA9ICh1NjQpICh1bnNpZ25lZCBsb25nKSBcXHUwMDI2c3RhY2tbQVJSQVlfU0laRShzdGFjayldOyBcXFxcXFxuLS1cXG5rZXJuZWwvZG1hL3N3aW90bGIuYz04NTg9c3RhdGljIHZvaWQgc3dpb3RsYl9ib3VuY2Uoc3RydWN0IGRldmljZSAqZGV2LCBwaHlzX2FkZHJfdCB0bGJfYWRkciwgc2l6ZV90IHNpemUsXFxuLS1cXG5rZXJuZWwvZG1hL3N3aW90bGIuYy05MTctXFx0XFx0XFx0fSBlbHNlIHtcXG5rZXJuZWwvZG1hL3N3aW90bGIuYzo5MTg6XFx0XFx0XFx0XFx0a21zYW5fdW5wb2lzb25fbWVtb3J5KHZhZGRyLCBzeik7XFxua2VybmVsL2RtYS9zd2lvdGxiLmMtOTE5LVxcdFxcdFxcdFxcdG1lbWNweV90b19wYWdlKHBhZ2UsIG9mZnNldCwgdmFkZHIsIHN6KTtcXG4tLVxcbmtlcm5lbC9kbWEvc3dpb3RsYi5jLTkzNi1cXHR9IGVsc2Uge1xcbmtlcm5lbC9kbWEvc3dpb3RsYi5jOjkzNzpcXHRcXHRrbXNhbl91bnBvaXNvbl9tZW1vcnkodmFkZHIsIHNpemUpO1xcbmtlcm5lbC9kbWEvc3dpb3RsYi5jLTkzOC1cXHRcXHRtZW1jcHkocGh5c190b192aXJ0KG9yaWdfYWRkciksIHZhZGRyLCBzaXplKTtcXG4tLVxcbmtlcm5lbC9rY292LmM9MTUxPXN0YXRpYyB2b2lkIGtjb3ZfcmVtb3RlX2FyZWFfcHV0KHN0cnVjdCBrY292X3JlbW90ZV9hcmVhICphcmVhLFxcbi0tXFxua2VybmVsL2tjb3YuYy0xNjEtXFx0ICovXFxua2VybmVsL2tjb3YuYzoxNjI6XFx0a21zYW5fdW5wb2lzb25fbWVtb3J5KFxcdTAwMjZhcmVhLVxcdTAwM2VsaXN0LCBzaXplb2YoYXJlYS1cXHUwMDNlbGlzdCkpO1xcbmtlcm5lbC9rY292LmMtMTYzLX1cXG4tLVxcbmtlcm5lbC90cmFjZS9mdHJhY2UuYz04NTU1PXZvaWQgYXJjaF9mdHJhY2Vfb3BzX2xpc3RfZnVuYyh1bnNpZ25lZCBsb25nIGlwLCB1bnNpZ25lZCBsb25nIHBhcmVudF9pcCxcXG4tLVxcbmtlcm5lbC90cmFjZS9mdHJhY2UuYy04NTU3LXtcXG5rZXJuZWwvdHJhY2UvZnRyYWNlLmM6ODU1ODpcXHRrbXNhbl91bnBvaXNvbl9tZW1vcnkoZnJlZ3MsIGZ0cmFjZV9yZWdzX3NpemUoKSk7XFxua2VybmVsL3RyYWNlL2Z0cmFjZS5jLTg1NTktXFx0X19mdHJhY2Vfb3BzX2xpc3RfZnVuYyhpcCwgcGFyZW50X2lwLCBOVUxMLCBmcmVncyk7XFxuLS1cXG5saWIvY3J5cHRvL2FybTY0L3NoYTI1Ni5oPTQ0PXN0YXRpYyBib29sIHNoYTI1Nl9maW51cF8yeF9hcmNoKGNvbnN0IHN0cnVjdCBfX3NoYTI1Nl9jdHggKmN0eCxcXG4tLVxcbmxpYi9jcnlwdG8vYXJtNjQvc2hhMjU2LmgtNTMtXFx0XFx0XFx0c2hhMjU2X2NlX2ZpbnVwMngoY3R4LCBkYXRhMSwgZGF0YTIsIGxlbiwgb3V0MSwgb3V0Mik7XFxubGliL2NyeXB0by9hcm02NC9zaGEyNTYuaDo1NDpcXHRcXHRrbXNhbl91bnBvaXNvbl9tZW1vcnkob3V0MSwgU0hBMjU2X0RJR0VTVF9TSVpFKTtcXG5saWIvY3J5cHRvL2FybTY0L3NoYTI1Ni5oOjU1OlxcdFxcdGttc2FuX3VucG9pc29uX21lbW9yeShvdXQyLCBTSEEyNTZfRElHRVNUX1NJWkUpO1xcbmxpYi9jcnlwdG8vYXJtNjQvc2hhMjU2LmgtNTYtXFx0XFx0cmV0dXJuIHRydWU7XFxuLS1cXG5saWIvY3J5cHRvL3MzOTAvc2hhMy5oPTY0PXN0YXRpYyBpbmxpbmUgYm9vbCBzMzkwX3NoYTMoaW50IGZ1bmMsIGNvbnN0IHU4ICppbiwgc2l6ZV90IGluX2xlbixcXG4tLVxcbmxpYi9jcnlwdG8vczM5MC9zaGEzLmgtNzktXFx0aWYgKHN0YXRpY19icmFuY2hfbGlrZWx5KFxcdTAwMjZoYXZlX3NoYTNfaW5pdF9vcHRpbSkpXFxubGliL2NyeXB0by9zMzkwL3NoYTMuaDo4MDpcXHRcXHRrbXNhbl91bnBvaXNvbl9tZW1vcnkoXFx1MDAyNnN0YXRlLCBvdXRfbGVuKTtcXG5saWIvY3J5cHRvL3MzOTAvc2hhMy5oLTgxLVxcbi0tXFxubGliL2NyeXB0by94ODYvc2hhMjU2Lmg9NzA9c3RhdGljIGJvb2wgc2hhMjU2X2ZpbnVwXzJ4X2FyY2goY29uc3Qgc3RydWN0IF9fc2hhMjU2X2N0eCAqY3R4LFxcbi0tXFxubGliL2NyeXB0by94ODYvc2hhMjU2LmgtODQtXFx0XFx0a2VybmVsX2ZwdV9lbmQoKTtcXG5saWIvY3J5cHRvL3g4Ni9zaGEyNTYuaDo4NTpcXHRcXHRrbXNhbl91bnBvaXNvbl9tZW1vcnkob3V0MSwgU0hBMjU2X0RJR0VTVF9TSVpFKTtcXG5saWIvY3J5cHRvL3g4Ni9zaGEyNTYuaDo4NjpcXHRcXHRrbXNhbl91bnBvaXNvbl9tZW1vcnkob3V0MiwgU0hBMjU2X0RJR0VTVF9TSVpFKTtcXG5saWIvY3J5cHRvL3g4Ni9zaGEyNTYuaC04Ny1cXHRcXHRyZXR1cm4gdHJ1ZTtcXG4tLVxcbmxpYi9pb21hcC5jPTM2MD12b2lkIGlvcmVhZDhfcmVwKGNvbnN0IHZvaWQgX19pb21lbSAqYWRkciwgdm9pZCAqZHN0LCB1bnNpZ25lZCBsb25nIGNvdW50KVxcbi0tXFxubGliL2lvbWFwLmMtMzYzLVxcdC8qIEtNU0FOIG11c3QgdHJlYXQgdmFsdWVzIHJlYWQgZnJvbSBkZXZpY2VzIGFzIGluaXRpYWxpemVkLiAqL1xcbmxpYi9pb21hcC5jOjM2NDpcXHRrbXNhbl91bnBvaXNvbl9tZW1vcnkoZHN0LCBjb3VudCk7XFxubGliL2lvbWFwLmMtMzY1LX1cXG5saWIvaW9tYXAuYz0zNjY9dm9pZCBpb3JlYWQxNl9yZXAoY29uc3Qgdm9pZCBfX2lvbWVtICphZGRyLCB2b2lkICpkc3QsIHVuc2lnbmVkIGxvbmcgY291bnQpXFxuLS1cXG5saWIvaW9tYXAuYy0zNjktXFx0LyogS01TQU4gbXVzdCB0cmVhdCB2YWx1ZXMgcmVhZCBmcm9tIGRldmljZXMgYXMgaW5pdGlhbGl6ZWQuICovXFxubGliL2lvbWFwLmM6MzcwOlxcdGttc2FuX3VucG9pc29uX21lbW9yeShkc3QsIGNvdW50ICogMik7XFxubGliL2lvbWFwLmMtMzcxLX1cXG5saWIvaW9tYXAuYz0zNzI9dm9pZCBpb3JlYWQzMl9yZXAoY29uc3Qgdm9pZCBfX2lvbWVtICphZGRyLCB2b2lkICpkc3QsIHVuc2lnbmVkIGxvbmcgY291bnQpXFxuLS1cXG5saWIvaW9tYXAuYy0zNzUtXFx0LyogS01TQU4gbXVzdCB0cmVhdCB2YWx1ZXMgcmVhZCBmcm9tIGRldmljZXMgYXMgaW5pdGlhbGl6ZWQuICovXFxubGliL2lvbWFwLmM6Mzc2OlxcdGttc2FuX3VucG9pc29uX21lbW9yeShkc3QsIGNvdW50ICogNCk7XFxubGliL2lvbWFwLmMtMzc3LX1cXG4tLVxcbmxpYi9zdGFja2RlcG90LmM9NDM0PWRlcG90X2FsbG9jX3N0YWNrKHVuc2lnbmVkIGxvbmcgKmVudHJpZXMsIHVuc2lnbmVkIGludCBucl9lbnRyaWVzLCB1MzIgaGFzaCwgZGVwb3RfZmxhZ3NfdCBmbGFncywgdm9pZCAqKnByZWFsbG9jKVxcbi0tXFxubGliL3N0YWNrZGVwb3QuYy00ODctXFx0ICovXFxubGliL3N0YWNrZGVwb3QuYzo0ODg6XFx0a21zYW5fdW5wb2lzb25fbWVtb3J5KHN0YWNrLCByZWNvcmRfc2l6ZSk7XFxubGliL3N0YWNrZGVwb3QuYy00ODktXFxuLS1cXG5saWIvc3RhY2tkZXBvdC5jPTc2MD11bnNpZ25lZCBpbnQgc3RhY2tfZGVwb3RfZmV0Y2goZGVwb3Rfc3RhY2tfaGFuZGxlX3QgaGFuZGxlLFxcbi0tXFxubGliL3N0YWNrZGVwb3QuYy03NjktXFx0ICovXFxubGliL3N0YWNrZGVwb3QuYzo3NzA6XFx0a21zYW5fdW5wb2lzb25fbWVtb3J5KGVudHJpZXMsIHNpemVvZigqZW50cmllcykpO1xcbmxpYi9zdGFja2RlcG90LmMtNzcxLVxcbi0tXFxubGliL3psaWJfZGZsdGNjL2RmbHRjY191dGlsLmg9Mjk9c3RhdGljIGlubGluZSBkZmx0Y2NfY2MgZGZsdGNjKFxcbi0tXFxubGliL3psaWJfZGZsdGNjL2RmbHRjY191dGlsLmgtNzEtICAgIGNhc2UgREZMVENDX1FBRjpcXG5saWIvemxpYl9kZmx0Y2MvZGZsdGNjX3V0aWwuaDo3MjogICAgICAgIGttc2FuX3VucG9pc29uX21lbW9yeShwYXJhbSwgc2l6ZW9mKHN0cnVjdCBkZmx0Y2NfcWFmX3BhcmFtKSk7XFxubGliL3psaWJfZGZsdGNjL2RmbHRjY191dGlsLmgtNzMtICAgICAgICBicmVhaztcXG5saWIvemxpYl9kZmx0Y2MvZGZsdGNjX3V0aWwuaC03NC0gICAgY2FzZSBERkxUQ0NfR0RIVDpcXG5saWIvemxpYl9kZmx0Y2MvZGZsdGNjX3V0aWwuaDo3NTogICAgICAgIGttc2FuX3VucG9pc29uX21lbW9yeShwYXJhbSwgb2Zmc2V0b2Yoc3RydWN0IGRmbHRjY19wYXJhbV92MCwgY3NiKSk7XFxubGliL3psaWJfZGZsdGNjL2RmbHRjY191dGlsLmgtNzYtICAgICAgICBicmVhaztcXG5saWIvemxpYl9kZmx0Y2MvZGZsdGNjX3V0aWwuaC03Ny0gICAgY2FzZSBERkxUQ0NfQ01QUjpcXG5saWIvemxpYl9kZmx0Y2MvZGZsdGNjX3V0aWwuaDo3ODogICAgICAgIGttc2FuX3VucG9pc29uX21lbW9yeShwYXJhbSwgc2l6ZW9mKHN0cnVjdCBkZmx0Y2NfcGFyYW1fdjApKTtcXG5saWIvemxpYl9kZmx0Y2MvZGZsdGNjX3V0aWwuaDo3OTogICAgICAgIGttc2FuX3VucG9pc29uX21lbW9yeShcXG5saWIvemxpYl9kZmx0Y2MvZGZsdGNjX3V0aWwuaC04MC0gICAgICAgICAgICAgICAgb3JpZ190MixcXG4tLVxcbmxpYi96bGliX2RmbHRjYy9kZmx0Y2NfdXRpbC5oLTg0LSAgICBjYXNlIERGTFRDQ19YUE5EOlxcbmxpYi96bGliX2RmbHRjYy9kZmx0Y2NfdXRpbC5oOjg1OiAgICAgICAga21zYW5fdW5wb2lzb25fbWVtb3J5KHBhcmFtLCBzaXplb2Yoc3RydWN0IGRmbHRjY19wYXJhbV92MCkpO1xcbmxpYi96bGliX2RmbHRjYy9kZmx0Y2NfdXRpbC5oOjg2OiAgICAgICAga21zYW5fdW5wb2lzb25fbWVtb3J5KG9yaWdfdDIsIHQyIC0gb3JpZ190Mik7XFxubGliL3psaWJfZGZsdGNjL2RmbHRjY191dGlsLmgtODctICAgICAgICBicmVhaztcXG4tLVxcbm1tL2h3cG9pc29uLWluamVjdC5jPTE0ND1zdGF0aWMgaW50IGh3cG9pc29uX3VucG9pc29uKHZvaWQgKmRhdGEsIHU2NCB2YWwpXFxuLS1cXG5tbS9od3BvaXNvbi1pbmplY3QuYy0xNDgtXFxubW0vaHdwb2lzb24taW5qZWN0LmM6MTQ5OlxcdHJldHVybiB1bnBvaXNvbl9tZW1vcnkodmFsKTtcXG5tbS9od3BvaXNvbi1pbmplY3QuYy0xNTAtfVxcbi0tXFxubW0va21zYW4vY29yZS5jPTQwPXZvaWQga21zYW5faW50ZXJuYWxfdGFza19jcmVhdGUoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrKVxcbi0tXFxubW0va21zYW4vY29yZS5jLTQ1LVxcdF9fbWVtc2V0KGN0eCwgMCwgc2l6ZW9mKCpjdHgpKTtcXG5tbS9rbXNhbi9jb3JlLmM6NDY6XFx0a21zYW5faW50ZXJuYWxfdW5wb2lzb25fbWVtb3J5KGluZm8sIHNpemVvZigqaW5mbyksIGZhbHNlKTtcXG5tbS9rbXNhbi9jb3JlLmMtNDctfVxcbi0tXFxubW0va21zYW4vY29yZS5jPTQ5PXZvaWQga21zYW5faW50ZXJuYWxfcG9pc29uX21lbW9yeSh2b2lkICphZGRyZXNzLCBzaXplX3Qgc2l6ZSwgZ2ZwX3QgZmxhZ3MsXFxuLS1cXG5tbS9rbXNhbi9jb3JlLmMtNjAtXFxubW0va21zYW4vY29yZS5jOjYxOnZvaWQga21zYW5faW50ZXJuYWxfdW5wb2lzb25fbWVtb3J5KHZvaWQgKmFkZHJlc3MsIHNpemVfdCBzaXplLCBib29sIGNoZWNrZWQpXFxubW0va21zYW4vY29yZS5jLTYyLXtcXG4tLVxcbm1tL2ttc2FuL2NvcmUuYz04MD12b2lkIGttc2FuX2ludGVybmFsX21lbW1vdmVfbWV0YWRhdGEodm9pZCAqZHN0LCB2b2lkICpzcmMsIHNpemVfdCBuKVxcbi0tXFxubW0va21zYW4vY29yZS5jLTk5LVxcdFxcdC8qIEBzcmMgaXMgdW50cmFja2VkOiBtYXJrIEBkc3QgYXMgaW5pdGlhbGl6ZWQuICovXFxubW0va21zYW4vY29yZS5jOjEwMDpcXHRcXHRrbXNhbl9pbnRlcm5hbF91bnBvaXNvbl9tZW1vcnkoZHN0LCBuLCAvKmNoZWNrZWQqLyBmYWxzZSk7XFxubW0va21zYW4vY29yZS5jLTEwMS1cXHRcXHRyZXR1cm47XFxuLS1cXG5tbS9rbXNhbi9jb3JlLmM9MTQ1PWRlcG90X3N0YWNrX2hhbmRsZV90IGttc2FuX2ludGVybmFsX2NoYWluX29yaWdpbihkZXBvdF9zdGFja19oYW5kbGVfdCBpZClcXG4tLVxcbm1tL2ttc2FuL2NvcmUuYy0xODUtXFx0ICovXFxubW0va21zYW4vY29yZS5jOjE4NjpcXHRrbXNhbl9pbnRlcm5hbF91bnBvaXNvbl9tZW1vcnkoZW50cmllcywgc2l6ZW9mKGVudHJpZXMpLCBmYWxzZSk7XFxubW0va21zYW4vY29yZS5jLTE4Ny1cXHRoYW5kbGUgPSBzdGFja19kZXBvdF9zYXZlKGVudHJpZXMsIEFSUkFZX1NJWkUoZW50cmllcyksIF9fR0ZQX0hJR0gpO1xcbi0tXFxubW0va21zYW4vaG9va3MuYz00OD12b2lkIGttc2FuX3NsYWJfYWxsb2Moc3RydWN0IGttZW1fY2FjaGUgKnMsIHZvaWQgKm9iamVjdCwgZ2ZwX3QgZmxhZ3MpXFxuLS1cXG5tbS9rbXNhbi9ob29rcy5jLTYyLVxcdGlmIChmbGFncyBcXHUwMDI2IF9fR0ZQX1pFUk8pXFxubW0va21zYW4vaG9va3MuYzo2MzpcXHRcXHRrbXNhbl9pbnRlcm5hbF91bnBvaXNvbl9tZW1vcnkob2JqZWN0LCBzLVxcdTAwM2VvYmplY3Rfc2l6ZSxcXG5tbS9rbXNhbi9ob29rcy5jLTY0LVxcdFxcdFxcdFxcdFxcdCAgICAgICBLTVNBTl9QT0lTT05fQ0hFQ0spO1xcbi0tXFxubW0va21zYW4vaG9va3MuYz05Mz12b2lkIGttc2FuX2ttYWxsb2NfbGFyZ2UoY29uc3Qgdm9pZCAqcHRyLCBzaXplX3Qgc2l6ZSwgZ2ZwX3QgZmxhZ3MpXFxuLS1cXG5tbS9rbXNhbi9ob29rcy5jLTEwMC1cXHRpZiAoZmxhZ3MgXFx1MDAyNiBfX0dGUF9aRVJPKVxcbm1tL2ttc2FuL2hvb2tzLmM6MTAxOlxcdFxcdGttc2FuX2ludGVybmFsX3VucG9pc29uX21lbW9yeSgodm9pZCAqKXB0ciwgc2l6ZSxcXG5tbS9rbXNhbi9ob29rcy5jLTEwMi1cXHRcXHRcXHRcXHRcXHQgICAgICAgLypjaGVja2VkKi8gdHJ1ZSk7XFxuLS1cXG5tbS9rbXNhbi9ob29rcy5jPTMwMT12b2lkIGttc2FuX2hhbmRsZV91cmIoY29uc3Qgc3RydWN0IHVyYiAqdXJiLCBib29sIGlzX291dClcXG4tLVxcbm1tL2ttc2FuL2hvb2tzLmMtMzEwLVxcdGVsc2VcXG5tbS9rbXNhbi9ob29rcy5jOjMxMTpcXHRcXHRrbXNhbl9pbnRlcm5hbF91bnBvaXNvbl9tZW1vcnkodXJiLVxcdTAwM2V0cmFuc2Zlcl9idWZmZXIsXFxubW0va21zYW4vaG9va3MuYy0zMTItXFx0XFx0XFx0XFx0XFx0ICAgICAgIHVyYi1cXHUwMDNldHJhbnNmZXJfYnVmZmVyX2xlbmd0aCxcXG4tLVxcbm1tL2ttc2FuL2hvb2tzLmM9MzE3PXN0YXRpYyB2b2lkIGttc2FuX2hhbmRsZV9kbWFfcGFnZShjb25zdCB2b2lkICphZGRyLCBzaXplX3Qgc2l6ZSxcXG4tLVxcbm1tL2ttc2FuL2hvb2tzLmMtMzIzLVxcdFxcdFxcdFxcdFxcdCAgICAvKnVzZXJfYWRkciovIE5VTEwsIFJFQVNPTl9BTlkpO1xcbm1tL2ttc2FuL2hvb2tzLmM6MzI0OlxcdFxcdGttc2FuX2ludGVybmFsX3VucG9pc29uX21lbW9yeSgodm9pZCAqKWFkZHIsIHNpemUsXFxubW0va21zYW4vaG9va3MuYy0zMjUtXFx0XFx0XFx0XFx0XFx0ICAgICAgIC8qY2hlY2tlZCovIGZhbHNlKTtcXG4tLVxcbm1tL2ttc2FuL2hvb2tzLmMtMzMxLVxcdGNhc2UgRE1BX0ZST01fREVWSUNFOlxcbm1tL2ttc2FuL2hvb2tzLmM6MzMyOlxcdFxcdGttc2FuX2ludGVybmFsX3VucG9pc29uX21lbW9yeSgodm9pZCAqKWFkZHIsIHNpemUsXFxubW0va21zYW4vaG9va3MuYy0zMzMtXFx0XFx0XFx0XFx0XFx0ICAgICAgIC8qY2hlY2tlZCovIGZhbHNlKTtcXG4tLVxcbm1tL2ttc2FuL2hvb2tzLmM9MzkyPUVYUE9SVF9TWU1CT0woa21zYW5fcG9pc29uX21lbW9yeSk7XFxuLS1cXG5tbS9rbXNhbi9ob29rcy5jLTM5Ny0gKi9cXG5tbS9rbXNhbi9ob29rcy5jOjM5ODp2b2lkIGttc2FuX3VucG9pc29uX21lbW9yeShjb25zdCB2b2lkICphZGRyZXNzLCBzaXplX3Qgc2l6ZSlcXG5tbS9rbXNhbi9ob29rcy5jLTM5OS17XFxuLS1cXG5tbS9rbXNhbi9ob29rcy5jLTQwNi1cXHQvKiBUaGUgdXNlcnMgbWF5IHdhbnQgdG8gcG9pc29uL3VucG9pc29uIHJhbmRvbSBtZW1vcnkuICovXFxubW0va21zYW4vaG9va3MuYzo0MDc6XFx0a21zYW5faW50ZXJuYWxfdW5wb2lzb25fbWVtb3J5KCh2b2lkICopYWRkcmVzcywgc2l6ZSxcXG5tbS9rbXNhbi9ob29rcy5jLTQwOC1cXHRcXHRcXHRcXHQgICAgICAgS01TQU5fUE9JU09OX05PQ0hFQ0spO1xcbi0tXFxubW0va21zYW4vaG9va3MuYy00MTAtfVxcbm1tL2ttc2FuL2hvb2tzLmM6NDExOkVYUE9SVF9TWU1CT0woa21zYW5fdW5wb2lzb25fbWVtb3J5KTtcXG5tbS9rbXNhbi9ob29rcy5jLTQxMi1cXG5tbS9rbXNhbi9ob29rcy5jLTQxMy0vKlxcbm1tL2ttc2FuL2hvb2tzLmM6NDE0OiAqIFZlcnNpb24gb2Yga21zYW5fdW5wb2lzb25fbWVtb3J5KCkgY2FsbGVkIGZyb20gSVJRIGVudHJ5IGZ1bmN0aW9ucy5cXG5tbS9rbXNhbi9ob29rcy5jLTQxNS0gKi9cXG5tbS9rbXNhbi9ob29rcy5jPTQxNj12b2lkIGttc2FuX3VucG9pc29uX2VudHJ5X3JlZ3MoY29uc3Qgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpXFxubW0va21zYW4vaG9va3MuYy00MTcte1xcbm1tL2ttc2FuL2hvb2tzLmM6NDE4OlxcdGttc2FuX3VucG9pc29uX21lbW9yeSgodm9pZCAqKXJlZ3MsIHNpemVvZigqcmVncykpO1xcbm1tL2ttc2FuL2hvb2tzLmMtNDE5LX1cXG4tLVxcbm1tL2ttc2FuL2luc3RydW1lbnRhdGlvbi5jPTEwNj12b2lkIF9fbXNhbl9pbnN0cnVtZW50X2FzbV9zdG9yZSh2b2lkICphZGRyLCB1aW50cHRyX3Qgc2l6ZSlcXG4tLVxcbm1tL2ttc2FuL2luc3RydW1lbnRhdGlvbi5jLTEyNi1cXHQvKiBVbnBvaXNvbmluZyB0aGUgbWVtb3J5IG9uIGJlc3QgZWZmb3J0LiAqL1xcbm1tL2ttc2FuL2luc3RydW1lbnRhdGlvbi5jOjEyNzpcXHRrbXNhbl9pbnRlcm5hbF91bnBvaXNvbl9tZW1vcnkoYWRkciwgc2l6ZSwgLypjaGVja2VkKi8gZmFsc2UpO1xcbm1tL2ttc2FuL2luc3RydW1lbnRhdGlvbi5jLTEyOC1cXHR1c2VyX2FjY2Vzc19yZXN0b3JlKHVhX2ZsYWdzKTtcXG4tLVxcbm1tL2ttc2FuL2luc3RydW1lbnRhdGlvbi5jPTIxMD12b2lkICpfX21zYW5fbWVtc2V0KHZvaWQgKmRzdCwgaW50IGMsIHVpbnRwdHJfdCBuKVxcbi0tXFxubW0va21zYW4vaW5zdHJ1bWVudGF0aW9uLmMtMjI1LVxcdCAqL1xcbm1tL2ttc2FuL2luc3RydW1lbnRhdGlvbi5jOjIyNjpcXHRrbXNhbl9pbnRlcm5hbF91bnBvaXNvbl9tZW1vcnkoZHN0LCBuLCAvKmNoZWNrZWQqLyBmYWxzZSk7XFxubW0va21zYW4vaW5zdHJ1bWVudGF0aW9uLmMtMjI3LVxcdGttc2FuX2xlYXZlX3J1bnRpbWUoKTtcXG4tLVxcbm1tL2ttc2FuL2luc3RydW1lbnRhdGlvbi5jPTI5Nz12b2lkIF9fbXNhbl91bnBvaXNvbl9hbGxvY2Eodm9pZCAqYWRkcmVzcywgdWludHB0cl90IHNpemUpXFxuLS1cXG5tbS9rbXNhbi9pbnN0cnVtZW50YXRpb24uYy0zMDItXFx0a21zYW5fZW50ZXJfcnVudGltZSgpO1xcbm1tL2ttc2FuL2luc3RydW1lbnRhdGlvbi5jOjMwMzpcXHRrbXNhbl9pbnRlcm5hbF91bnBvaXNvbl9tZW1vcnkoYWRkcmVzcywgc2l6ZSwgLypjaGVja2VkKi8gdHJ1ZSk7XFxubW0va21zYW4vaW5zdHJ1bWVudGF0aW9uLmMtMzA0LVxcdGttc2FuX2xlYXZlX3J1bnRpbWUoKTtcXG4tLVxcbm1tL2ttc2FuL2ttc2FuLmg9MTU1PXZvaWQga21zYW5faW50ZXJuYWxfcG9pc29uX21lbW9yeSh2b2lkICphZGRyZXNzLCBzaXplX3Qgc2l6ZSwgZ2ZwX3QgZmxhZ3MsXFxubW0va21zYW4va21zYW4uaC0xNTYtXFx0XFx0XFx0XFx0ICB1bnNpZ25lZCBpbnQgcG9pc29uX2ZsYWdzKTtcXG5tbS9rbXNhbi9rbXNhbi5oOjE1Nzp2b2lkIGttc2FuX2ludGVybmFsX3VucG9pc29uX21lbW9yeSh2b2lkICphZGRyZXNzLCBzaXplX3Qgc2l6ZSwgYm9vbCBjaGVja2VkKTtcXG5tbS9rbXNhbi9rbXNhbi5oLTE1OC12b2lkIGttc2FuX2ludGVybmFsX3NldF9zaGFkb3dfb3JpZ2luKHZvaWQgKmFkZHJlc3MsIHNpemVfdCBzaXplLCBpbnQgYixcXG4tLVxcbm1tL2ttc2FuL2ttc2FuX3Rlc3QuYz02NzA9c3RhdGljIHZvaWQgdGVzdF9zdGFja2RlcG90X3JvdW5kdHJpcChzdHJ1Y3Qga3VuaXQgKnRlc3QpXFxuLS1cXG5tbS9rbXNhbi9rbXNhbl90ZXN0LmMtNjkxLS8qXFxubW0va21zYW4va21zYW5fdGVzdC5jOjY5MjogKiBUZXN0IGNhc2U6IGVuc3VyZSB0aGF0IGttc2FuX3VucG9pc29uX21lbW9yeSgpIGFuZCB0aGUgaW5zdHJ1bWVudGF0aW9uIHdvcmtcXG5tbS9rbXNhbi9rbXNhbl90ZXN0LmMtNjkzLSAqIHRoZSBzYW1lLlxcbm1tL2ttc2FuL2ttc2FuX3Rlc3QuYy02OTQtICovXFxubW0va21zYW4va21zYW5fdGVzdC5jOjY5NTpzdGF0aWMgdm9pZCB0ZXN0X3VucG9pc29uX21lbW9yeShzdHJ1Y3Qga3VuaXQgKnRlc3QpXFxubW0va21zYW4va21zYW5fdGVzdC5jLTY5Ni17XFxubW0va21zYW4va21zYW5fdGVzdC5jOjY5NzpcXHRFWFBFQ1RBVElPTl9VTklOSVRfVkFMVUVfRk4oZXhwZWN0LCBcXFwidGVzdF91bnBvaXNvbl9tZW1vcnlcXFwiKTtcXG5tbS9rbXNhbi9rbXNhbl90ZXN0LmMtNjk4LVxcdHZvbGF0aWxlIGNoYXIgYVs0XSwgYls0XTtcXG4tLVxcbm1tL2ttc2FuL2ttc2FuX3Rlc3QuYy03MDEtXFx0XFx0dGVzdCxcXG5tbS9rbXNhbi9rbXNhbl90ZXN0LmM6NzAyOlxcdFxcdFxcXCJ1bnBvaXNvbmluZyB2aWEgdGhlIGluc3RydW1lbnRhdGlvbiB2cy4ga21zYW5fdW5wb2lzb25fbWVtb3J5KCkgKDIgVU1SIHJlcG9ydHMpXFxcXG5cXFwiKTtcXG5tbS9rbXNhbi9rbXNhbl90ZXN0LmMtNzAzLVxcbi0tXFxubW0va21zYW4va21zYW5fdGVzdC5jLTcxMS1cXHQvKiBJbml0aWFsaXplIGJbMF0gYW5kIGNoZWNrIGJbMV0tLWJbM10uICovXFxubW0va21zYW4va21zYW5fdGVzdC5jOjcxMjpcXHRrbXNhbl91bnBvaXNvbl9tZW1vcnkoKGNoYXIgKilcXHUwMDI2YlswXSwgMSk7XFxubW0va21zYW4va21zYW5fdGVzdC5jLTcxMy1cXHRrbXNhbl9jaGVja19tZW1vcnkoKGNoYXIgKilcXHUwMDI2YlsxXSwgMyk7XFxuLS1cXG5tbS9rbXNhbi9rbXNhbl90ZXN0LmM9NzMzPXN0YXRpYyBzdHJ1Y3Qga3VuaXRfY2FzZSBrbXNhbl90ZXN0X2Nhc2VzW10gPSB7XFxuLS1cXG5tbS9rbXNhbi9rbXNhbl90ZXN0LmMtNzU5LVxcdEtVTklUX0NBU0UodGVzdF9zdGFja2RlcG90X3JvdW5kdHJpcCksXFxubW0va21zYW4va21zYW5fdGVzdC5jOjc2MDpcXHRLVU5JVF9DQVNFKHRlc3RfdW5wb2lzb25fbWVtb3J5KSxcXG5tbS9rbXNhbi9rbXNhbl90ZXN0LmMtNzYxLVxcdEtVTklUX0NBU0UodGVzdF9jb3B5X2Zyb21fa2VybmVsX25vZmF1bHQpLFxcbi0tXFxubW0va21zYW4vcmVwb3J0LmM9ODY9dm9pZCBrbXNhbl9wcmludF9vcmlnaW4oZGVwb3Rfc3RhY2tfaGFuZGxlX3Qgb3JpZ2luKVxcbi0tXFxubW0va21zYW4vcmVwb3J0LmMtMTI2LVxcdFxcdFxcdFxcdHN0YWNrX2RlcG90X2ZldGNoKGhlYWQsIFxcdTAwMjZjaGFpbmVkX2VudHJpZXMpO1xcbm1tL2ttc2FuL3JlcG9ydC5jOjEyNzpcXHRcXHRcXHRrbXNhbl9pbnRlcm5hbF91bnBvaXNvbl9tZW1vcnkoXFxubW0va21zYW4vcmVwb3J0LmMtMTI4LVxcdFxcdFxcdFxcdGNoYWluZWRfZW50cmllcyxcXG4tLVxcbm1tL2ttc2FuL3NoYWRvdy5jPTE1MT12b2lkIGttc2FuX2NvcHlfcGFnZV9tZXRhKHN0cnVjdCBwYWdlICpkc3QsIHN0cnVjdCBwYWdlICpzcmMpXFxuLS1cXG5tbS9rbXNhbi9zaGFkb3cuYy0xNTctXFx0aWYgKCFzcmMgfHwgIXBhZ2VfaGFzX21ldGFkYXRhKHNyYykpIHtcXG5tbS9rbXNhbi9zaGFkb3cuYzoxNTg6XFx0XFx0a21zYW5faW50ZXJuYWxfdW5wb2lzb25fbWVtb3J5KHBhZ2VfYWRkcmVzcyhkc3QpLCBQQUdFX1NJWkUsXFxubW0va21zYW4vc2hhZG93LmMtMTU5LVxcdFxcdFxcdFxcdFxcdCAgICAgICAvKmNoZWNrZWQqLyBmYWxzZSk7XFxuLS1cXG5tbS9tZW1vcnktZmFpbHVyZS5jPTE0NDE9c3RhdGljIGludCBfX2dldF91bnBvaXNvbl9wYWdlKHN0cnVjdCBwYWdlICpwYWdlKVxcbi0tXFxubW0vbWVtb3J5LWZhaWx1cmUuYy0xNDgyLSAqXFxubW0vbWVtb3J5LWZhaWx1cmUuYzoxNDgzOiAqIFdoZW4gY2FsbGVkIGZyb20gdW5wb2lzb25fbWVtb3J5KCksIHRoZSBjYWxsZXIgc2hvdWxkIGFscmVhZHkgZW5zdXJlIHRoYXRcXG5tbS9tZW1vcnktZmFpbHVyZS5jLTE0ODQtICogdGhlIGdpdmVuIHBhZ2UgaGFzIFBHX2h3cG9pc29uLiBTbyBpdCdzIG5ldmVyIHJldXNlZCBmb3Igb3RoZXIgcGFnZVxcbi0tXFxubW0vbWVtb3J5LWZhaWx1cmUuYz0yNzA1PWNvcmVfaW5pdGNhbGwobWVtb3J5X2ZhaWx1cmVfaW5pdCk7XFxuLS1cXG5tbS9tZW1vcnktZmFpbHVyZS5jLTI3MTUtLyoqXFxubW0vbWVtb3J5LWZhaWx1cmUuYzoyNzE2OiAqIHVucG9pc29uX21lbW9yeSAtIFVucG9pc29uIGEgcHJldmlvdXNseSBwb2lzb25lZCBwYWdlXFxubW0vbWVtb3J5LWZhaWx1cmUuYy0yNzE3LSAqIEBwZm46IFBhZ2UgbnVtYmVyIG9mIHRoZSB0byBiZSB1bnBvaXNvbmVkIHBhZ2VcXG4tLVxcbm1tL21lbW9yeS1mYWlsdXJlLmMtMjcyNi0gKi9cXG5tbS9tZW1vcnktZmFpbHVyZS5jOjI3Mjc6aW50IHVucG9pc29uX21lbW9yeSh1bnNpZ25lZCBsb25nIHBmbilcXG5tbS9tZW1vcnktZmFpbHVyZS5jLTI3Mjgte1xcbi0tXFxubW0vbWVtb3J5LWZhaWx1cmUuYy0yODMxLX1cXG5tbS9tZW1vcnktZmFpbHVyZS5jOjI4MzI6RVhQT1JUX1NZTUJPTCh1bnBvaXNvbl9tZW1vcnkpO1xcbm1tL21lbW9yeS1mYWlsdXJlLmMtMjgzMy1cXG4tLVxcbm1tL3BhZ2VfYWxsb2MuYz0xMzEyPXN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgYm9vbCBfX2ZyZWVfcGFnZXNfcHJlcGFyZShzdHJ1Y3QgcGFnZSAqcGFnZSxcXG4tLVxcbm1tL3BhZ2VfYWxsb2MuYy0xMzU0LVxcdFxcdCAqIE1hcmsgdGhlIGNvZGV0YWcgYXMgZW1wdHkgdG8gYXZvaWQgYWNjb3VudGluZyBlcnJvclxcbm1tL3BhZ2VfYWxsb2MuYzoxMzU1OlxcdFxcdCAqIHdoZW4gdGhlIHBhZ2UgaXMgZnJlZWQgYnkgdW5wb2lzb25fbWVtb3J5KCkuXFxubW0vcGFnZV9hbGxvYy5jLTEzNTYtXFx0XFx0ICovXFxuLS1cXG5tbS9zbHViLmM9OTYyND1zdGF0aWMgY2hhciAqY3JlYXRlX3VuaXF1ZV9pZChzdHJ1Y3Qga21lbV9jYWNoZSAqcylcXG4tLVxcbm1tL3NsdWIuYy05NjU3LVxcdH1cXG5tbS9zbHViLmM6OTY1ODpcXHRrbXNhbl91bnBvaXNvbl9tZW1vcnkobmFtZSwgcCAtIG5hbWUpO1xcbm1tL3NsdWIuYy05NjU5LVxcdHJldHVybiBuYW1lO1xcbi0tXFxubW0vc2x1Yi5jPTk3Mjk9aW50IHN5c2ZzX3NsYWJfYWxpYXMoc3RydWN0IGttZW1fY2FjaGUgKnMsIGNvbnN0IGNoYXIgKm5hbWUpXFxuLS1cXG5tbS9zbHViLmMtOTc1My1cXHRhbGlhc19saXN0ID0gYWw7XFxubW0vc2x1Yi5jOjk3NTQ6XFx0a21zYW5fdW5wb2lzb25fbWVtb3J5KGFsLCBzaXplb2YoKmFsKSk7XFxubW0vc2x1Yi5jLTk3NTUtXFx0cmV0dXJuIDA7XFxuLS1cXG50b29scy9vYmp0b29sL2NoZWNrLmM9MTA5MT1zdGF0aWMgY29uc3QgY2hhciAqdWFjY2Vzc19zYWZlX2J1aWx0aW5bXSA9IHtcXG4tLVxcbnRvb2xzL29ianRvb2wvY2hlY2suYy0xMjM0LVxcdFxcXCJrbXNhbl91bnBvaXNvbl9lbnRyeV9yZWdzXFxcIixcXG50b29scy9vYmp0b29sL2NoZWNrLmM6MTIzNTpcXHRcXFwia21zYW5fdW5wb2lzb25fbWVtb3J5XFxcIixcXG50b29scy9vYmp0b29sL2NoZWNrLmMtMTIzNi1cXHRcXFwiX19tc2FuX2NoYWluX29yaWdpblxcXCIsXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9tZW1vcnktZmFpbHVyZS5jPTIwMz1zdGF0aWMgdm9pZCBjbGVhbnVwKHN0cnVjdCBfX3Rlc3RfbWV0YWRhdGEgKl9tZXRhZGF0YSwgRklYVFVSRV9EQVRBKG1lbW9yeV9mYWlsdXJlKSAqIHNlbGYsXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9tZW1vcnktZmFpbHVyZS5jLTIwOC1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9tZW1vcnktZmFpbHVyZS5jOjIwOTpcXHRBU1NFUlRfRVEodW5wb2lzb25fbWVtb3J5KHNlbGYtXFx1MDAzZXBmbiksIDApO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL21lbW9yeS1mYWlsdXJlLmMtMjEwLVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdm1fdXRpbC5jPTY2MD1pbnQgZ2V0X2hhcmR3YXJlX2NvcnJ1cHRlZF9zaXplKHVuc2lnbmVkIGxvbmcgKnZhbClcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ZtX3V0aWwuYy02ODMtXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdm1fdXRpbC5jOjY4NDppbnQgdW5wb2lzb25fbWVtb3J5KHVuc2lnbmVkIGxvbmcgcGZuKVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ZtX3V0aWwuYy02ODUte1xcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdm1fdXRpbC5oPTE1NT1pbnQgZ2V0X2hhcmR3YXJlX2NvcnJ1cHRlZF9zaXplKHVuc2lnbmVkIGxvbmcgKnZhbCk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdm1fdXRpbC5oOjE1NjppbnQgdW5wb2lzb25fbWVtb3J5KHVuc2lnbmVkIGxvbmcgcGZuKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS92bV91dGlsLmgtMTU3LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNlQxNzo1Mjo0OC43MjYwNzczMTdaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzM2MDg4NzI4OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOlxuXG4qKlRyYWNpbmcgdGhlIE1lbW9yeSBQb2lzb25pbmcgRnVuY3Rpb25hbGl0eSoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGB1bnBvaXNvbl9tZW1vcnlgLiBUaGUgY29kZSBzYXlzIHRoaXMgZnVuY3Rpb24gaXMgZXhwb3J0ZWQgYW5kIGNhbGxlZCBmcm9tIGBod3BvaXNvbl91bnBvaXNvbmAgaW4gYG1tL2h3cG9pc29uLWluamVjdC5jYC4gR29vZCwgdGhhdCBtZWFucyBpdCdzIGRlZmluaXRlbHkgcmVhY2hhYmxlIOKAkyBpdCdzIG5vdCBzb21lIGRlYWQgY29kZSBkYW5nbGluZyBpbiB0aGUgZXRoZXIuIFRoYXQncyB0aGUgZmlyc3QgaHVyZGxlLlxuXG5Ob3csIEkgbmVlZCB0byB1bmRlcnN0YW5kICp3aGVyZSogaXQncyBiZWluZyB1c2VkIGJleW9uZCB0aGF0IGRpcmVjdCBjYWxsLiBUbyBnZXQgYSBiZXR0ZXIgZ3Jhc3Agb2YgdGhlIGJyb2FkZXIgcGljdHVyZSwgdGhlIG5leHQgbG9naWNhbCBzdGVwIHNlZW1zIHRvIGJlIHRvIGNoZWNrIGBodWdldGxiZnNfZ2V0X2lub2RlYC4gSSdtIGd1ZXNzaW5nIHRoYXQgbWlnaHQgZ2l2ZSBtZSBzb21lIGNvbnRleHQsIGVzcGVjaWFsbHkgaWYgdGhlIGNvZGUgZGVhbHMgd2l0aCBodWdlcGFnZXMuIFRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiB0aG9zZSB0d28gaXMgd2hlcmUgSSdsbCBnZXQgbW9yZSBpbnNpZ2h0LlxuXG5cbiIsIklucHV0VG9rZW5zIjozMjExMSwiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDE3OjUyOjUyLjA4Njk2NzA0NloiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjcwNjA5NTA5NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJec3RhdGljIHN0cnVjdCBpbm9kZSBcXFxcKmh1Z2V0bGJmc19nZXRfaW5vZGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvaHVnZXRsYmZzL2lub2RlLmM9Nzk2PXN0YXRpYyBzdHJ1Y3QgbG9ja19jbGFzc19rZXkgaHVnZXRsYmZzX2lfbW1hcF9yd3NlbV9rZXk7XFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtNzk3LVxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjc5ODpzdGF0aWMgc3RydWN0IGlub2RlICpodWdldGxiZnNfZ2V0X2lub2RlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsXFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtNzk5LVxcdFxcdFxcdFxcdFxcdHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNlQxNzo1Mjo1NC43OTMwNzExNTNaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzMxNDk5MDQ5MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6XG5cbioqQ29uc2lkZXJpbmcgSHVnZVRMQiBJbXBsZW1lbnRhdGlvbiBEZXRhaWxzKipcblxuT2theSwgc28gSSdtIGRpZ2dpbmcgaW50byB0aGlzIGBodWdldGxiZnNgIGNvZGUgYWdhaW4uIEkgbm90aWNlZCB0aGF0IHRoZSBgaHVnZXRsYmZzX2dldF9pbm9kZWAgZnVuY3Rpb24gaXMgbWFya2VkIGFzIGBzdGF0aWNgLiBUaGF0J3MgYSBnb29kIHNpZ247IGl0IG1lYW5zIGl0J3Mgc2NvcGVkIGludGVybmFsbHkgdG8gdGhpcyBtb2R1bGUsIHdoaWNoIHNpbXBsaWZpZXMgdW5kZXJzdGFuZGluZyBpdHMgaW1wYWN0IGFuZCByZWR1Y2VzIHBvdGVudGlhbCBmb3IgdW5leHBlY3RlZCBpbnRlcmFjdGlvbnMgd2l0aCBvdGhlciBrZXJuZWwgY29tcG9uZW50cy4gQnV0LCBpdCBnb3QgbWUgdGhpbmtpbmcuLi4gd2hhdCBhYm91dCBgaHVnZXRsYmZzX2ZpbGVfbW1hcGA/IElzIHRoYXQgc3RhdGljIHRvbywgb3IgaXMgaXQgZXhwb3NlZCBpbiBhIHdheSB0aGF0IHdhcnJhbnRzIGZ1cnRoZXIgc2NydXRpbnk/IEkgbmVlZCB0byBxdWlja2x5IGRldGVybWluZSBpdHMgdmlzaWJpbGl0eSBhbmQgd2hlcmUgaXQgaXMgYmVpbmcgdXNlZCB0byBnZXQgYSBiZXR0ZXIgaGFuZGxlIG9uIHRoZSBvdmVyYWxsIGRlc2lnbiBhbmQgYW55IHBvdGVudGlhbCByaXNrcy4gSSByZWFsbHkgaG9wZSBpdCdzIHdlbGwgZG9jdW1lbnRlZCBhbmQgZWFzeSB0byB0cmFjZS4gSSdsbCBuZWVkIHRvIGNoZWNrIHRoZSBmdW5jdGlvbidzIGRlY2xhcmF0aW9uIGFuZCB1c2FnZSB0byB1bmRlcnN0YW5kIGl0cyBzY29wZSBhbmQgcG90ZW50aWFsIGludGVyYWN0aW9ucyB3aXRoIHRoZSByZXN0IG9mIHRoZSBmaWxlIHN5c3RlbS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzI0OTQsIk91dHB1dFRva2VucyI6MjYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNlQxNzo1Mjo1OC4xMDgwNjUwMTJaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI3MDI0MjcyNTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiXnN0YXRpYyBpbnQgaHVnZXRsYmZzX2ZpbGVfbW1hcFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9odWdldGxiZnMvaW5vZGUuYz03OD1zdGF0aWMgY29uc3Qgc3RydWN0IGZzX3BhcmFtZXRlcl9zcGVjIGh1Z2V0bGJfZnNfcGFyYW1ldGVyc1tdID0ge1xcbi0tXFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtOTgtXFxuZnMvaHVnZXRsYmZzL2lub2RlLmM6OTk6c3RhdGljIGludCBodWdldGxiZnNfZmlsZV9tbWFwKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcXG5mcy9odWdldGxiZnMvaW5vZGUuYy0xMDAte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNlQxNzo1MzowMC44MTA0OTgzN1oiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyOTUxMjIyNzA5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGF0IHRob3VnaHQgcHJvY2Vzcywga2VlcGluZyBpbiBtaW5kIEknbSBzcGVha2luZyB0byBhIGZlbGxvdyBleHBlcnQ6XG5cbioqRGl2aW5nIGludG8gYGh1Z2V0bGJmc19nZXRfdW5tYXBwZWRfYXJlYWAqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGRpZyBpbnRvIGBodWdldGxiZnNfZ2V0X3VubWFwcGVkX2FyZWFgLiBUaGF0J3Mgd2hlcmUgd2Ugc3RhcnQsIHJpZ2h0PyBOZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBzeXN0ZW0ncyBmaW5kaW5nIGEgZnJlZSwgY29udGlndW91cyBjaHVuayBvZiB2aXJ0dWFsIGFkZHJlc3Mgc3BhY2UgZm9yIHRoZXNlIGh1Z2UgcGFnZXMuIEl0J3MgdGhlIGNyaXRpY2FsIGZpcnN0IHN0ZXAgaW4gYWxsIG9mIHRoaXMuIFdoYXQgYXJlIHRoZSBrZXkgY29uc2lkZXJhdGlvbnMgdGhlcmU/IEFyZSB3ZSBkZWFsaW5nIHdpdGggdGhlIHJlZ3VsYXIgbW1hcCBpbmZyYXN0cnVjdHVyZSwgb3IgZG9lcyB0aGlzIGhhdmUgaXRzIG93biBjdXN0b20gbG9naWM/IEdvdHRhIGZpZ3VyZSBvdXQgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSByZXN0IG9mIHRoZSBWTSwgd2hhdCBsb2NraW5nIGlzIGludm9sdmVkLCBhbmQgb2YgY291cnNlLCBob3cgaXQgYXZvaWRzIGZyYWdtZW50YXRpb24uIFRoaXMgZnVuY3Rpb24gaXMgdGhlIGZvdW5kYXRpb247IHVuZGVyc3RhbmRpbmcgaXQgaXMgcGFyYW1vdW50IHRvIHRoZSBlbnRpcmUgaHVnZSBwYWdlIGFsbG9jYXRpb24gcHJvY2Vzcy4gTGV0J3Mgc2VlIGhvdyBpdCdzIGltcGxlbWVudGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMjg2NywiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDE3OjUzOjAzLjc2MTcyMzYwOVoiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjczMTcwNDY1NiwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiXnN0YXRpYyB1bnNpZ25lZCBsb25nIGh1Z2V0bGJfZ2V0X3VubWFwcGVkX2FyZWFcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDE3OjUzOjA2LjQ5MzQzNDQ5NVoiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNTA5ODIwMjc2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aG9zZSB0aG91Z2h0cyBmcm9tIGFuIGV4cGVydCdzIHBlcnNwZWN0aXZlLCB1c2luZyBhIGZpcnN0LXBlcnNvbiBwZXJzcGVjdGl2ZTpcblxuKipEZWx2aW5nIGludG8gdGhlIGBodWdldGxiZnNfZmlsZV9vcGVyYXRpb25zYCoqXG5cblJpZ2h0LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzLi4uIGFuZCB0aGUgaW1tZWRpYXRlIHF1ZXN0aW9uIHRoYXQgcG9wcyB1cCwgZ2l2ZW4gbXkgZXhwZXJpZW5jZSwgaXM6IFwiV2hhdCBhYm91dCB0aGUgYGh1Z2V0bGJmc19maWxlX29wZXJhdGlvbnNgP1wiIFRoYXQncyB0aGUgY29yZSBvZiBob3cgaHVnZXRsYmZzIGludGVyYWN0cyB3aXRoIHRoZSBmaWxlc3lzdGVtIGxheWVyLCBpc24ndCBpdD8gSXQgZGljdGF0ZXMgaG93IGZpbGVzIHdpdGhpbiBhIGh1Z2V0bGJmcyBtb3VudCBhcmUgb3BlbmVkLCByZWFkLCB3cml0dGVuLCBtYXBwZWQsIGFuZCBnZW5lcmFsbHkgbWFuYWdlZC4gSXQncyB0aGUgY3JpdGljYWwgYnJpZGdlIGJldHdlZW4gdGhlIHVzZXItc3BhY2UgYXBwbGljYXRpb25zIGFuZCB0aGUgbG93LWxldmVsIG1lbW9yeSBtYW5hZ2VtZW50IHRoYXQgbGV2ZXJhZ2VzIHRob3NlIGh1Z2UgcGFnZXMuIEknbSBhbHJlYWR5IG1lbnRhbGx5IHJ1bm5pbmcgdGhyb3VnaCB0aGUgdmFyaW91cyBmdW5jdGlvbiBwb2ludGVycyBkZWZpbmVkIHdpdGhpbiB0aGF0IHN0cnVjdHVyZTogYG1tYXBgLCBgcmVhZGAsIGB3cml0ZWAsIGBvcGVuYCwgYHJlbGVhc2VgLCBhbmQgc28gb24uIFVuZGVyc3RhbmRpbmcgdGhlaXIgaW1wbGVtZW50YXRpb24gaXMga2V5LiBXZSBrbm93IHRoYXQgYGh1Z2V0bGJmc2AgbmVlZHMgdG8gaGFuZGxlIHNwZWNpZmljIGlzc3VlcyByZWxhdGVkIHRvIHRoZSBncmFudWxhcml0eSBvZiBodWdlIHBhZ2VzIGFuZCBob3cgdG8gcHJlc2VudCB0aGlzIHRvIHRoZSBhcHBsaWNhdGlvbi4gSSB3b25kZXIgaWYgdGhlcmUgYXJlIGFueSBzdWJ0bGUgYnVncyBsdXJraW5nIGluIHRoZXJlLCBvciBtYXliZSBvcHRpbWl6YXRpb25zIHRoYXQgY291bGQgYmUgbWFkZSwgcGFydGljdWxhcmx5IHdoZW4gd2UncmUgZGVhbGluZyB3aXRoIGNvbmN1cnJlbnQgYWNjZXNzLiBUaGlzIGlzIGRlZmluaXRlbHkgYSBzdGFydGluZyBwb2ludCB0byBkaXZlIGRlZXBlciB0byBjaGVjayBvbiBhbnkgcmVjZW50IGNoYW5nZXMgb3Igb25nb2luZyBpc3N1ZXMgd2l0aGluIHRoZSBzeXN0ZW0uIExldCdzIHNlZSBob3cgdGhpcyB0aWVzIGludG8gdGhlIHJlc3Qgb2YgdGhlIGtlcm5lbCdzIG1lbW9yeSBtYW5hZ2VtZW50LlxuXG5cbiIsIklucHV0VG9rZW5zIjozMzExNiwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDE3OjUzOjEwLjAwMzI1NzM2MVoiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mjc4ODAyOTE3NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJec3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgaHVnZXRsYmZzX2ZpbGVfb3BlcmF0aW9uc1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9odWdldGxiZnMvaW5vZGUuYz00NT1zdGF0aWMgY29uc3Qgc3RydWN0IGFkZHJlc3Nfc3BhY2Vfb3BlcmF0aW9ucyBodWdldGxiZnNfYW9wcztcXG5mcy9odWdldGxiZnMvaW5vZGUuYzo0NjpzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBodWdldGxiZnNfZmlsZV9vcGVyYXRpb25zO1xcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTQ3LXN0YXRpYyBjb25zdCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBodWdldGxiZnNfZGlyX2lub2RlX29wZXJhdGlvbnM7XFxuLS1cXG5mcy9odWdldGxiZnMvaW5vZGUuYz0xMTA0PXN0YXRpYyB2b2lkIGluaXRfb25jZSh2b2lkICpmb28pXFxuLS1cXG5mcy9odWdldGxiZnMvaW5vZGUuYy0xMTEwLVxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjExMTE6c3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgaHVnZXRsYmZzX2ZpbGVfb3BlcmF0aW9ucyA9IHtcXG5mcy9odWdldGxiZnMvaW5vZGUuYy0xMTEyLVxcdC5yZWFkX2l0ZXJcXHRcXHQ9IGdlbmVyaWNfZmlsZV9yZWFkX2l0ZXIsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDE3OjUzOjEyLjc5MTI5MTUyNVoiLCJTZXEiOjMxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0Njk4NTM1OTMyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlJlZmluaW5nIHRoZSBGdXp6aW5nIFN0cmF0ZWd5IGZvciBIdWdlVExCIE1lbW9yeSBQb2lzb25pbmcqKlxuXG5Pa2F5LCBzbyBJJ20gdGhpbmtpbmcgYWJvdXQgaG93IHRvIGltcHJvdmUgdGhlIGZ1enppbmcgc3RyYXRlZ3kgYXJvdW5kIEh1Z2VUTEIgbWVtb3J5IHBvaXNvbmluZy4gSSBub3RpY2VkIHRoYXQgdGhlIGBodWdldGxiZnNfZmlsZV9vcGVyYXRpb25zYCBzdHJ1Y3R1cmUgdXNlcyBgZ2VuZXJpY19maWxlX3JlYWRfaXRlcmAsIHdoaWNoLCBpbiB0dXJuLCBjYWxscyBgZmlsZW1hcF9yZWFkYC4gVGhhdCBwYXRoIHBvdGVudGlhbGx5IGxlYWRzIHRvIGBhZGp1c3RfcmFuZ2VfaHdwb2lzb25gLiBJbml0aWFsbHksIEkgdGhvdWdodCBJIGNvdWxkIGp1c3QgbGlzdCBhIG1vcmUgY29tcHJlaGVuc2l2ZSBzZXQgb2YgZnVuY3Rpb25zLlxuXG5Ib3dldmVyLCBgZ2VuZXJpY19maWxlX3JlYWRfaXRlcmAgaXMgc28gY29tbW9uLCBpdCdsbCBsaWtlbHkgcG9sbHV0ZSB0aGUgZnV6emluZyByZXN1bHRzIHdpdGggbm9pc2UuIEkgbmVlZCB0byBiZSBtb3JlIHRhcmdldGVkLiBJJ20gZ29pbmcgdG8gZm9jdXMgb24gdGhlIGtleSwgc3BlY2lmaWMgZnVuY3Rpb25zIGRpcmVjdGx5IGludm9sdmVkIGluIHBvaXNvbiBhbmQgdW5wb2lzb24gb3BlcmF0aW9ucy4gSSdsbCBpbmNsdWRlIGBodWdldGxiX3BhZ2VfaHdwb2lzb25gLCBgaHVnZXRsYl91bnJlZl9wYWdlX2h3cG9pc29uYCwgYW5kIGB1bnBvaXNvbl9tZW1vcnlgIGZvciBub3cuXG5cbkJ1dCBsZXQgbWUgcXVpY2tseSBjaGVjayBpZiBhbnkgb3RoZXIgZXhwb3J0ZWQgZnVuY3Rpb25zIHdlcmUgaW1wYWN0ZWQgYnkgdGhlc2UgY2hhbmdlcy4gQWgsIHllcywgYGh1Z2V0bGJfZm9saW9fbWFwcGluZ19sb2NrX3dyaXRlYCBub3cgdGFrZXMgYGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW9gLiBBbmQgYGZvbGlvX2NsZWFyX2h1Z2V0bGJfaHdwb2lzb25gIHdhcyBhbHNvIG1vZGlmaWVkLiBJJ2xsIG5lZWQgdG8ga2VlcCB0aG9zZSBpbiBtaW5kIGFzIEkgcmVmaW5lIG15IGFuYWx5c2lzLiBUaGVzZSBzZWVtIGxpa2UgdGhlIHJlbGV2YW50IGVudHJ5IHBvaW50cy5cblxuXG4iLCJJbnB1dFRva2VucyI6MzM2NzIsIk91dHB1dFRva2VucyI6MjYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMDUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjZUMTc6NTM6MTcuNDg5ODMwMjA3WiIsIlNlcSI6MzIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNDAyNjE3MDE1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl52b2lkIGZvbGlvX2NsZWFyX2h1Z2V0bGJfaHdwb2lzb25cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vbWVtb3J5LWZhaWx1cmUuYz0xOTc2PXN0YXRpYyB1bnNpZ25lZCBsb25nIGZvbGlvX2ZyZWVfcmF3X2h3cChzdHJ1Y3QgZm9saW8gKmZvbGlvLCBib29sIG1vdmVfZmxhZylcXG4tLVxcbm1tL21lbW9yeS1mYWlsdXJlLmMtMjAwMS1cXG5tbS9tZW1vcnktZmFpbHVyZS5jOjIwMDI6dm9pZCBmb2xpb19jbGVhcl9odWdldGxiX2h3cG9pc29uKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxubW0vbWVtb3J5LWZhaWx1cmUuYy0yMDAzLXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjZUMTc6NTM6MTkuODkyNDU1OTQyWiIsIlNlcSI6MzMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMxODIzNjg3OTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKipDaGVja2luZyBgZm9saW9fY2xlYXJfaHVnZXRsYl9od3BvaXNvbmAgRXhwb3J0IFN0YXR1cyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgZnVuY3Rpb24gbmFtZSwgYGZvbGlvX2NsZWFyX2h1Z2V0bGJfaHdwb2lzb25gLiBTZWVtcyBsaWtlIGEgcG90ZW50aWFsbHkgaW1wb3J0YW50IG9uZSBmb3IgaGFuZGxpbmcgaGFyZHdhcmUtZGV0ZWN0ZWQgbWVtb3J5IGVycm9ycyB3aXRoaW4gdGhlIGh1Z2UgcGFnZSBzeXN0ZW0sIHNwZWNpZmljYWxseSB0aGUgZm9saW8gZnJhbWV3b3JrLiBJJ20gaW1tZWRpYXRlbHkgY3VyaW91cyBpZiBpdCdzIGFjdHVhbGx5IGV4cG9ydGVkLiBJcyBpdCBkZXNpZ25lZCB0byBiZSB1c2VkIG91dHNpZGUgb2YgdGhlIGNvcmUga2VybmVsIGNvZGUsIHBlcmhhcHMgYnkgYSBkcml2ZXIgb3Igb3RoZXIgbW9kdWxlIHRoYXQgbmVlZHMgdG8gaW50ZXJhY3Qgd2l0aCB0aGlzIHBhcnRpY3VsYXIgYXNwZWN0IG9mIGh1Z2UgcGFnZSBtYW5hZ2VtZW50PyBUaW1lIHRvIHZlcmlmeSBpdHMgdmlzaWJpbGl0eS4gSSBuZWVkIHRvIGNvbmZpcm0gd2hldGhlciBpdCdzIHBhcnQgb2YgdGhlIHB1YmxpYyBBUEkgb3IgaW50ZXJuYWwgdG8gdGhlIGtlcm5lbCdzIGltcGxlbWVudGF0aW9uLiBLbm93aW5nIGl0cyBleHBvcnQgc3RhdHVzIGdpdmVzIG1lIGEgY3J1Y2lhbCBjbHVlIGFib3V0IGl0cyBpbnRlbmRlZCB1c2UgYW5kIHRoZSBkZXNpZ24gcGhpbG9zb3BoeSBhcm91bmQgaXQuIEl0J2xsIHNoYXBlIHRoZSB3YXkgSSB0aGluayBhYm91dCBpdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzQyOTMsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNlQxNzo1MzoyMy4wNzQ4MjY5MTVaIiwiU2VxIjozNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI1NDQ4NzM2NDEsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkVYUE9SVF9TWU1CT0wuKmZvbGlvX2NsZWFyX2h1Z2V0bGJfaHdwb2lzb25cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDE3OjUzOjI1LjYxOTcxMjYxNloiLCJTZXEiOjM1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMjY0NzY5MTgxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHByZXNlbnRlZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3MsIGdpdmVuIG15IGV4cGVydGlzZTpcblxuKipFeGFtaW5pbmcgUG90ZW50aWFsIFN0YXRpYyBGdW5jdGlvbiBDYW5kaWRhdGVzIGZvciBNb2RpZmljYXRpb24qKlxuXG5SaWdodCwgc28gSSdtIHRyeWluZyB0byBmaWd1cmUgb3V0IHdoZXJlIGEgc3BlY2lmaWMgZnVuY3Rpb24gdGhhdCBpc24ndCBleHBvcnRlZCwgYnV0IGlzbid0IHN0YXRpYyBlaXRoZXIsIG1pZ2h0IGJlLiBUaGUgZ29hbCBpcyB0byB0cmFjayBkb3duIGNhbmRpZGF0ZXMuIEdpdmVuIHRoZSBjb250ZXh0LCBpdCdzIHByb2JhYmx5IHJlbGF0ZWQgdG8gc29tZSBjb3JlIGludGVybmFsIGZ1bmN0aW9uYWxpdHkgd2l0aGluIGEgZHJpdmVyIG9yIGxpYnJhcnkuXG5cbkxldCdzIHF1aWNrbHkgcnVsZSBvdXQgYSBmZXcgbGlrZWx5IHN1c3BlY3RzIGJ5IGNoZWNraW5nIHRoZWlyIHByb3BlcnRpZXMuIEZpcnN0IHVwLCBJJ2xsIGNvbnNpZGVyIGBodWdldGxiX3VwZGF0ZV9od3BvaXNvbmAuIEFoLCB0aGF0IG9uZSAqaXMqIHN0YXRpYzsgc28gbm90IHdoYXQgSSdtIGxvb2tpbmcgZm9yLiBUaGF0IG5hcnJvd3MgdGhpbmdzIGRvd24uIE5leHQsIGxldCBtZSBjaGVjayBgaHVnZXRsYl9tZmlsbF9hdG9taWNfcHRlYC4gTWF5YmUgdGhhdCdzIHRoZSBvbmUgSSBuZWVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNDU0MCwiT3V0cHV0VG9rZW5zIjoyNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDE3OjUzOjI4Ljg4NDQ4NDA4N1oiLCJTZXEiOjM2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjcyNjk3MTYyNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJeaW50IGh1Z2V0bGJfbWZpbGxfYXRvbWljX3B0ZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaD0xNDA9dm1fZmF1bHRfdCBodWdldGxiX2ZhdWx0KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4tLVxcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oLTE0Mi0jaWZkZWYgQ09ORklHX1VTRVJGQVVMVEZEXFxuaW5jbHVkZS9saW51eC9odWdldGxiLmg6MTQzOmludCBodWdldGxiX21maWxsX2F0b21pY19wdGUocHRlX3QgKmRzdF9wdGUsXFxuaW5jbHVkZS9saW51eC9odWdldGxiLmgtMTQ0LVxcdFxcdFxcdCAgICAgc3RydWN0IHZtX2FyZWFfc3RydWN0ICpkc3Rfdm1hLFxcbi0tXFxubW0vaHVnZXRsYi5jPTYxMzY9c3RhdGljIHN0cnVjdCBmb2xpbyAqYWxsb2NfaHVnZXRsYl9mb2xpb192bWEoc3RydWN0IGhzdGF0ZSAqaCxcXG4tLVxcbm1tL2h1Z2V0bGIuYy02MTYyLSAqL1xcbm1tL2h1Z2V0bGIuYzo2MTYzOmludCBodWdldGxiX21maWxsX2F0b21pY19wdGUocHRlX3QgKmRzdF9wdGUsXFxubW0vaHVnZXRsYi5jLTYxNjQtXFx0XFx0XFx0ICAgICBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKmRzdF92bWEsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDE3OjUzOjMxLjYxMTQ2MTI5M1oiLCJTZXEiOjM3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzI2MzY4MTU5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHN1bW1hcml6ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbiwgYXNzdW1pbmcgdGhlIGNvbnRleHQgaXMgbXkgZXhwZXJ0aXNlOlxuXG4qKkNoZWNraW5nIHRoZSBOb24tU3RhdGljIE5hdHVyZSBhbmQgRGVwZW5kZW5jeSoqXG5cblJpZ2h0LCBzbyBgaHVnZXRsYl9tZmlsbF9hdG9taWNfcHRlYCBpc24ndCBzdGF0aWMuIFRoYXQgaW1tZWRpYXRlbHkgcmFpc2VzIGEgZmxhZy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHZpc2liaWxpdHkgYW5kIHBvdGVudGlhbCBmb3IgZXh0ZXJuYWwgdXNhZ2UuIEl0J3MgY3J1Y2lhbCBmb3IgbWUgdG8gZ3Jhc3AgdGhlIHNjb3BlIG9mIHRoaXMgZnVuY3Rpb24uIE5vdywgSSBzaG91bGQgc2hpZnQgbXkgYXR0ZW50aW9uIHRvIGBkZW1vdGVfcG9vbF9odWdlX3BhZ2VgLiBNeSBpbnR1aXRpb24gdGVsbHMgbWUgdGhlcmUgbWlnaHQgYmUgYW4gaW50ZXJhY3Rpb24gb3IgZGVwZW5kZW5jeSBJIG5lZWQgdG8gZXhhbWluZSBiZXR3ZWVuIHRoZXNlIHR3by4gSSBuZWVkIHRvIHNlZSBob3cgYGRlbW90ZV9wb29sX2h1Z2VfcGFnZWAgbWlnaHQgY2FsbCwgb3IgYmUgY2FsbGVkIGJ5LCBgaHVnZXRsYl9tZmlsbF9hdG9taWNfcHRlYCwgb3IgaG93IHRoZWlyIGJlaGF2aW9ycyBtaWdodCBpbnRlcnJlbGF0ZSBpbiB0aGUgbGFyZ2VyIGNvbnRleHQgb2YgaHVnZSBwYWdlIG1hbmFnZW1lbnQuIFRoaXMgaXMgdGhlIG5leHQgbG9naWNhbCBzdGVwIGluIG15IGFuYWx5c2lzLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNTA1MiwiT3V0cHV0VG9rZW5zIjoyNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDE3OjUzOjM0LjkzNzgzMjI1MloiLCJTZXEiOjM4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjUzNDA1MTQyMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJebG9uZyBkZW1vdGVfcG9vbF9odWdlX3BhZ2VcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vaHVnZXRsYi5jPTM5MTk9c3RhdGljIGxvbmcgZGVtb3RlX2ZyZWVfaHVnZXRsYl9mb2xpb3Moc3RydWN0IGhzdGF0ZSAqc3JjLCBzdHJ1Y3QgaHN0YXRlICpkc3QsXFxuLS1cXG5tbS9odWdldGxiLmMtMzk3Ny1cXG5tbS9odWdldGxiLmM6Mzk3ODpsb25nIGRlbW90ZV9wb29sX2h1Z2VfcGFnZShzdHJ1Y3QgaHN0YXRlICpzcmMsIG5vZGVtYXNrX3QgKm5vZGVzX2FsbG93ZWQsXFxubW0vaHVnZXRsYi5jLTM5NzktXFx0XFx0XFx0ICAgdW5zaWduZWQgbG9uZyBucl90b19kZW1vdGUpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDE3OjUzOjM3LjQ3MTg4ODkzM1oiLCJTZXEiOjM5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozODc4MjM0MzA0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYW5hbHlzaXMgb2YgdGhlIHNpdHVhdGlvbjpcblxuKipJbnZlc3RpZ2F0aW5nIGBkZW1vdGVfcG9vbF9odWdlX3BhZ2VgIGFuZCBgaW5pdF9uZXdfaHVnZXRsYl9mb2xpb2AqKlxuXG5Pa2F5LCBzbyBJIHNlZSB0aGF0IGBkZW1vdGVfcG9vbF9odWdlX3BhZ2VgIGlzbid0IGRlY2xhcmVkIGFzIHN0YXRpYy4gVGhpcyBtYWtlcyBtZSBpbW1lZGlhdGVseSBjdXJpb3VzLiBJJ20gd29uZGVyaW5nIHdoYXQgb3RoZXIgY29kZSBtaWdodCBiZSBjYWxsaW5nIHRoaXMgZnVuY3Rpb24sIGFuZCB3aGVyZSBpdCdzIGJlaW5nIHVzZWQgYmV5b25kIGl0cyBpbW1lZGlhdGUgc2NvcGUuIE5vbi1zdGF0aWMgZnVuY3Rpb25zIGFsd2F5cyByYWlzZSBhIGZsYWc7IGl0IG1lYW5zIHRoZSBwb3RlbnRpYWwgZm9yIGJyb2FkZXIgaW1wYWN0IGFuZCBwZXJoYXBzIG1vcmUgY29tcGxleCBpbnRlcmFjdGlvbnMuIE15IG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIGNoZWNrIGBpbml0X25ld19odWdldGxiX2ZvbGlvYCwgYXMgaXQncyBsaWtlbHkgY29ubmVjdGVkIHRvIHRoZSBzYW1lIG1lbW9yeSBtYW5hZ2VtZW50IGRvbWFpbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHRoZXNlIHR3bywgc3BlY2lmaWNhbGx5IGhvdyBodWdlIHBhZ2VzIGFyZSBhbGxvY2F0ZWQsIGRlYWxsb2NhdGVkLCBhbmQgcG90ZW50aWFsbHkgZGVtb3RlZCB3aXRoaW4gdGhlIHN5c3RlbS4gSXMgdGhlcmUgYW55IHBvdGVudGlhbCBmb3IgcmFjZSBjb25kaXRpb25zIG9yIHVuZXhwZWN0ZWQgYmVoYXZpb3IgaWYgYGRlbW90ZV9wb29sX2h1Z2VfcGFnZWAgaXMgY2FsbGVkIGZyb20gb3V0c2lkZSBpdHMgcHJlc3VtZWQgbW9kdWxlPyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29udHJvbCBmbG93LiBNeSBleHBlcnRpc2UgcmVxdWlyZXMgbWUgdG8gZGlnIGludG8gdGhlIGNhbGwgc3RhY2tzIGFuZCB1bmRlcnN0YW5kIHRoZSBpbnRlcmFjdGlvbiBvZiB0aGVzZSB0d28gZnVuY3Rpb25zIGF0IGEgZGVlcGVyIGxldmVsLiBJIG5lZWQgdG8gZm9ybSBhIG1lbnRhbCBtYXAgb2YgdGhlaXIgaW52b2x2ZW1lbnQgaW4gdGhlIHByb2Nlc3Mgb2YgaHVnZSBwYWdlIG1hbmFnZW1lbnQsIGFuZCBob3cgdGhhdCBhZmZlY3RzIHRoZSBiaWdnZXIgcGljdHVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzU0MjgsIk91dHB1dFRva2VucyI6MjUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNlQxNzo1Mzo0MS4zNTAxMjY1MTdaIiwiU2VxIjo0MCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzNTI2OTE1MDYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiXnZvaWQgaW5pdF9uZXdfaHVnZXRsYl9mb2xpb1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9odWdldGxiLmM9MTc1NT1zdGF0aWMgdm9pZCBhY2NvdW50X25ld19odWdldGxiX2ZvbGlvKHN0cnVjdCBoc3RhdGUgKmgsIHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuLS1cXG5tbS9odWdldGxiLmMtMTc2MS1cXG5tbS9odWdldGxiLmM6MTc2Mjp2b2lkIGluaXRfbmV3X2h1Z2V0bGJfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbylcXG5tbS9odWdldGxiLmMtMTc2My17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDE3OjUzOjQzLjcwMjgyMzAwM1oiLCJTZXEiOjQxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNTk5NzY5MDIyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IFBsYW4gZm9yIEhhbmRsaW5nIEhhcmR3YXJlIFBvaXNvbmluZyBpbiBIdWdlVExCIFBhZ2VzKipcblxuT2theSwgaGVyZSdzIHRoZSBwbGFuLiBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIGhvdyBoYXJkd2FyZSBwb2lzb25pbmcgYWZmZWN0cyBIdWdlVExCIHBhZ2VzLiBNeSBpbml0aWFsIHN0ZXAgaXMgdG8gaW5jb3Jwb3JhdGUgYSBmZXcga2V5IGZ1bmN0aW9ucyBpbnRvIGBGb2N1c1N5bWJvbHNgLiBTcGVjaWZpY2FsbHksIEknbSBnb2luZyB0byBhZGQgYGh1Z2V0bGJfcGFnZV9od3BvaXNvbmAsIGBodWdldGxiX3VucmVmX3BhZ2VfaHdwb2lzb25gLCBgdW5wb2lzb25fbWVtb3J5YCwgYW5kIGBmb2xpb19jbGVhcl9odWdldGxiX2h3cG9pc29uYC4gVGhpcyBzZWVtcyBjcnVjaWFsIGZvciB0cmFja2luZyBhbmQgbWFuYWdpbmcgdGhlIGltcGxpY2F0aW9ucyBvZiBtZW1vcnkgZXJyb3JzIHdpdGhpbiB0aGF0IHBhcnRpY3VsYXIgbWVtb3J5IHNwYWNlLlxuXG5Ob3csIEknbSBhbHNvIGdvaW5nIHRvIGJlIGxvb2tpbmcgYXQgYSBjb3VwbGUgb2YgcmVsYXRlZCBrZXJuZWwgY29uZmlndXJhdGlvbnMuIEknbSBhc3N1bWluZyB0aGF0IGJvdGggYEhVR0VUTEJGU2AgYW5kIGBNRU1PUllfRkFJTFVSRWAgYXJlIHNldCB0byBgeWAgb3IgdGhlIGFwcHJvcHJpYXRlIGVxdWl2YWxlbnQuIEknbGwgbmVlZCB0byBkb3VibGUgY2hlY2sgdGhvc2UuIEkgY2FuJ3QgYmUgc3VyZSB3aXRob3V0IGRvaW5nIHNvbWUgZGlnZ2luZywgYnV0IEkgc3VzcGVjdCB0aGF0IGBMQVJHRV9GT0xJT2AgaXMgYWxzbyBhIGNvbmZpZ3VyYXRpb24gb3B0aW9uLiBJIG5lZWQgdG8gY29uZmlybSB3aGV0aGVyIHRoYXQgaXMgdGhlIGNhc2UgYW5kLCBpZiBzbywgcmV2aWV3IHdoYXQgaXQgZG9lcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MzU4NTIsIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNlQxNzo1Mzo0Ny4zMDI1OTQ4NzVaIiwiU2VxIjo0MiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI4MDE0NjQ4OTQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiXmNvbmZpZyBMQVJHRV9GT0xJT1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9LY29uZmlnPTg0Mz1jb25maWcgTU1fSURcXG4tLVxcbm1tL0tjb25maWctODQ1LVxcbm1tL0tjb25maWc6ODQ2OmNvbmZpZyBMQVJHRV9GT0xJT1xcbm1tL0tjb25maWctODQ3LVxcdGRlZl9ib29sIG5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjZUMTc6NTM6NTAuMTA0MDY2ODc4WiIsIlNlcSI6NDMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMzNDgyNzE3NzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIEh1Z2UgUGFnZSBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gYExBUkdFX0ZPTElPYCBpcyBkZWZpbmVkIGFzIGEgY29uZmlnIG9wdGlvbiwgcmlnaHQ/IEFuZCBpdCdzIHNldCBhcyBhIGJvb2xlYW4sIGRlcGVuZGVudCBvbiBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgIGFuZCBgSFVHRVRMQl9QQUdFYC4gUmlnaHQsIHRoYXQgbWFrZXMgc2Vuc2UuIExldCdzIHNlZS4uLiBgSFVHRVRMQl9QQUdFYCBpcyBhbHNvIGRlZmluZWQgYXMgYSBib29sZWFuLCBzcGVjaWZpY2FsbHkgbGlua2VkIHRvIGBIVUdFVExCRlNgLiBBaGEhIFNvLCBpZiBJIGVuYWJsZSBgSFVHRVRMQkZTYCBhbmQgYE1FTU9SWV9GQUlMVVJFYCwgdGhhdCBzaG91bGQgZWZmZWN0aXZlbHkgZW5hYmxlIGBMQVJHRV9GT0xJT2AgdGhyb3VnaCB0aGUgZGVwZW5kZW5jeSBjaGFpbi4gU2VlbXMgc3RyYWlnaHRmb3J3YXJkIGVub3VnaC5cblxuSnVzdCB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4sIEknbGwgcXVpY2tseSBkb3VibGUtY2hlY2sgdGhlIGBIVUdFVExCRlNgIGRlZmluaXRpb24gYW5kIHJlbGF0ZWQgY29uZmlndXJhdGlvbnMgd2l0aGluIHRoZSBmaWxlIHN5c3RlbSBLY29uZmlnIChgZnMvS2NvbmZpZ2ApLiBJIGFsd2F5cyBmaW5kIGl0IGJlc3QgdG8gdmVyaWZ5IHRoZXNlIGRlcGVuZGVuY2llcyB0byBiZSBzdXJlIEknbSBub3QgbWlzc2luZyBhbnkgbnVhbmNlZCBpbXBsaWNhdGlvbnMsIGVzcGVjaWFsbHkgd2hlbiBkZWFsaW5nIHdpdGggbWVtb3J5IG1hbmFnZW1lbnQuIEkgd2FudCB0byBlbnN1cmUgbXkgbWVudGFsIG1vZGVsIGlzIGFjY3VyYXRlIGJlZm9yZSBwcm9jZWVkaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNjI0NiwiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjk5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDE3OjUzOjUzLjQ1MjM0MTM1N1oiLCJTZXEiOjQ0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjYzNjczODQ2OCwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiXmNvbmZpZyBIVUdFVExCRlNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDE3OjUzOjU2LjA4OTA4Njk1NVoiLCJTZXEiOjQ1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMDI4Mjg1NzI4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqTmF2aWdhdGluZyB0aGUgS2VybmVsIENvbmZpZ3VyYXRpb24gTGFuZHNjYXBlKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgc29tZXRoaW5nIGluIHRoZSBrZXJuZWwgY29uZmlnLi4uIGFuZCBpdCdzIGltbWVkaWF0ZWx5IGp1bXBpbmcgb3V0IGF0IG1lOiBgbWVudWNvbmZpZyBIVUdFVExCRlNgLiBSaWdodCwgZ290IGl0LiBUaGF0IG1lYW5zIEknbSBwcm9iYWJseSBkZWFsaW5nIHdpdGggdGhlIEh1Z2VUTEIgRmlsZXN5c3RlbSwgd2hpY2ggaXMgdXN1YWxseSBhIHByZXR0eSBnb29kIGluZGljYXRvciBvZiBwZXJmb3JtYW5jZSBvcHRpbWl6YXRpb24gc2NlbmFyaW9zLCBsaWtlbHkgcmVsYXRlZCB0byBOVU1BIGNvbmZpZ3VyYXRpb25zIG9yIGFwcGxpY2F0aW9ucyBkZW1hbmRpbmcgc2lnbmlmaWNhbnQgbWVtb3J5IHJlc291cmNlcyB3aXRoIGxvdyBsYXRlbmN5IHJlcXVpcmVtZW50cy4gVGhpcyBwcm9iYWJseSBmYWxscyB1bmRlciBvbmUgb2YgdGhlIHNldmVyYWwgdXNlIGNhc2VzIEkgYW0gZmFtaWxpYXIgd2l0aDsgd2hldGhlciBhIHNwZWNpZmljIGhhcmR3YXJlIHBsYXRmb3JtIHRoYXQgSSBhbSBpbnRpbWF0ZWx5IGF3YXJlIG9mLCBhbiBhcHBsaWNhdGlvbiB0aGF0IGRlcGVuZHMgb24gdGhpcyBzZXR0aW5nLCBvciBhIHN5c3RlbSBJIHdhcyBpbnZvbHZlZCBpbiB0aGF0IHJlcXVpcmVkIHN1Y2ggYXR0ZW50aW9uIHRvIG1lbW9yeSBsYXlvdXQuIExldCdzIHNlZSB3aGF0IHRoZSBjb250ZXh0IGlzLi4uIFRoaXMgaXMgY2VydGFpbmx5IGEgc3RhcnRpbmcgcG9pbnQgZm9yIGRpdmluZyBpbnRvIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBjb25maWd1cmF0aW9uLiBOb3cgSSBuZWVkIHRvIHNlZSB3aGF0J3MgZW5hYmxlZCwgZGlzYWJsZWQsIG9yIHNldC4gSXQncyB0aW1lIHRvIGRpZyBkZWVwZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM2NTgzLCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjZUMTc6NTM6NTkuMTE3Mzc1MDEzWiIsIlNlcSI6NDYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNDc1NDMzNjYyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl5tZW51Y29uZmlnIEhVR0VUTEJGU1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9LY29uZmlnPTI0Nz1jb25maWcgQVJDSF9TVVBQT1JUU19IVUdFVExCRlNcXG4tLVxcbmZzL0tjb25maWctMjQ5LVxcbmZzL0tjb25maWc6MjUwOm1lbnVjb25maWcgSFVHRVRMQkZTXFxuZnMvS2NvbmZpZy0yNTEtXFx0Ym9vbCBcXFwiSHVnZVRMQiBmaWxlIHN5c3RlbSBzdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNlQxNzo1NDowMS41OTI4MTQ2MTVaIiwiU2VxIjo0NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzIzNzg4MzQzMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKktlcm5lbCBDb25maWd1cmF0aW9uIENvbnRleHQqKlxuXG5SaWdodCwgc28gd2UncmUgbG9va2luZyBhdCBjb25maWd1cmF0aW9ucy4gVGhlIGluaXRpYWwgcHJvbXB0IGNsZWFybHkgcG9pbnRzIHRvIGBIVUdFVExCRlNgIGFzIHRoZSByZWxldmFudCBjb25maWcgb3B0aW9uIHRvIGNvbnNpZGVyLiBTZWVtcyBzdHJhaWdodGZvcndhcmQgZW5vdWdoLiBUaGUgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gY3Jvc3MtcmVmZXJlbmNlIHRoYXQgd2l0aCBvdGhlciwgcmVsYXRlZCBjb25maWd1cmF0aW9ucywgYW5kIG15IGludGVybmFsIHByb2Nlc3MgYnJpbmdzIHVwIHRoZSBgTUVNT1JZX0ZBSUxVUkVgIGNvbmZpZ3VyYXRpb24gaW4gYG1tL0tjb25maWdgLiBUaGlzIGxldHMgbWUgc3RhcnQgdG8gdW5kZXJzdGFuZCB0aGUgY29ubmVjdGlvbnMgYmV0d2VlbiB0aGVzZSBjb25maWd1cmF0aW9ucywgYW5kIHdoYXQgb3RoZXIgc2V0dGluZ3MgbWF5IGJlIGFmZmVjdGVkIG9yIHJlbGF0ZWQgdG8gYEhVR0VUTEJGU2AuIEkgd2FudCB0byBmdWxseSB1bmRlcnN0YW5kIHRoZSBkZXBlbmRlbmN5IGdyYXBoLCBwb3NzaWJsZSBpbnRlcmFjdGlvbnMsIGFuZCBwb3RlbnRpYWwgaW1wbGljYXRpb25zIGZvciBtZW1vcnkgbWFuYWdlbWVudCBhbmQgZmFpbHVyZSBoYW5kbGluZy4gSSdtIGdvaW5nIHRvIGRpZyBpbnRvIGhvdyB0aGUgYE1FTU9SWV9GQUlMVVJFYCBzZXR0aW5nIG1pZ2h0IGluZmx1ZW5jZSBvciBpbnRlcmFjdCB3aXRoIHRoZSBgSFVHRVRMQkZTYCBjb25maWd1cmF0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNjkwOCwiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDE3OjU0OjA0LjgzMDcwMDQ0N1oiLCJTZXEiOjQ4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjU2MzA5MTAwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJeY29uZmlnIE1FTU9SWV9GQUlMVVJFXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL0tjb25maWc9Nzc0PWNvbmZpZyBBUkNIX1NVUFBPUlRTX01FTU9SWV9GQUlMVVJFXFxuLS1cXG5tbS9LY29uZmlnLTc3Ni1cXG5tbS9LY29uZmlnOjc3Nzpjb25maWcgTUVNT1JZX0ZBSUxVUkVcXG5tbS9LY29uZmlnLTc3OC1cXHRkZXBlbmRzIG9uIE1NVVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNlQxNzo1NDowNy4zOTM3OTY1MzdaIiwiU2VxIjo0OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjQ2MDEyMjYzNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBGdXp6aW5nIENvbmZpZ3VyYXRpb24gZm9yIEh1Z2V0bGIgRm9saW9zIGFuZCBNZW1vcnktRmFpbHVyZSBIYW5kbGluZyoqXG5cbk9rYXksIHNvIEkndmUgY29uZmlybWVkIHRoYXQgYE1FTU9SWV9GQUlMVVJFYCBpcyBkZWZpbml0ZWx5IHRoZSByaWdodCBjb25maWcgdG8gc3RhcnQgd2l0aC4gTGV0J3Mgc2VlLi4uIGxvb2tpbmcgYXQgdGhlIGNvbmZpZ3VyYXRpb25zLCBpdCBsb29rcyBsaWtlIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAgaXMgYWxzbyBtb2RpZmllZCwgc3BlY2lmaWNhbGx5IHRvIHNlbGVjdCBgTEFSR0VfRk9MSU9gLiBNYWtlcyBzZW5zZTsgSSBzaG91bGQgaW5jbHVkZSBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgIGFzIHdlbGwuXG5cbk5vdywgbGV0J3MgcHVsbCBhbGwgb2YgdGhpcyB0b2dldGhlciBpbnRvIGEgdXNlZnVsIHN1bW1hcnk6XG5cbkknbSBzZXR0aW5nIGBXb3J0aEZ1enppbmdgIHRvIGB0cnVlYCwgb2YgY291cnNlLiBNeSBgRm9jdXNTeW1ib2xzYCBhcmUgZ29pbmcgdG8gdGFyZ2V0IHRoZXNlIGNydWNpYWwgZnVuY3Rpb25zOiBgaHVnZXRsYl9wYWdlX2h3cG9pc29uYCwgYGh1Z2V0bGJfdW5yZWZfcGFnZV9od3BvaXNvbmAsIGB1bnBvaXNvbl9tZW1vcnlgLCBhbmQgYGZvbGlvX2NsZWFyX2h1Z2V0bGJfaHdwb2lzb25gLlxuXG5NeSBgRW5hYmxlQ29uZmlnc2AgYXJlOiBgSFVHRVRMQkZTYCwgYE1FTU9SWV9GQUlMVVJFYCwgYW5kIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAuIEkgY2hvc2UgdGhvc2UgYmVjYXVzZSB0aGlzIHBhdGNoIHNlcmllcyBpbnRyb2R1Y2VzIHRoZSBgTEFSR0VfRk9MSU9gIGNvbmZpZyBhbmQgZnVuZGFtZW50YWxseSBjaGFuZ2VzIGhvdyBoYXJkd2FyZSBwb2lzb25pbmcgaXMgbWFuYWdlZCBmb3IgaHVnZXRsYiBmb2xpb3MuIEl0IHNlZW1zIHRoZXkncmUgcmVwbGFjaW5nIHRoZSBtb3JlIHNwZWNpZmljIGBhZGp1c3RfcmFuZ2VfaHdwb2lzb25gIGZ1bmN0aW9uIGluIGBmcy9odWdldGxiZnMvaW5vZGUuY2Agd2l0aCB0aGUgZ2VuZXJpYyB2ZXJzaW9uIGluIGBtbS9maWxlbWFwLmNgLiBBbHNvLCBgaHVnZXRsYmZzX3JlYWRfaXRlcmAgaGFzIGJlZW4gdXBkYXRlZCB0byBgZ2VuZXJpY19maWxlX3JlYWRfaXRlcmAuIEkgYWxzbyBzZWUgY2hhbmdlcyB0byBgZm9saW9fdGVzdF9od3BvaXNvbmAgd2hpY2ggaXMgbm93IGBmb2xpb19oYXNfaHdwb2lzb25lZF9wYWdlYC4gVGhlc2UgYXJlIGFsbCBjb3JlIGtlcm5lbCBsb2dpYyBjaGFuZ2VzIChtbSwgaHVnZXRsYmZzLCBtZW1vcnktZmFpbHVyZSkgd2hpY2ggbWVhbnMgdGhleSdyZSBjcml0aWNhbCBhcmVhcyBmb3IgZnV6emluZyBhbmQgYnVnIGRldGVjdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MzcyMDQsIk91dHB1dFRva2VucyI6MjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzAyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDE3OjU0OjEzLjg1MzkyMjI5MVoiLCJTZXEiOjUwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg0ODU0NjA4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJIVUdFVExCRlNcIixcbiAgICBcIk1FTU9SWV9GQUlMVVJFXCIsXG4gICAgXCJUUkFOU1BBUkVOVF9IVUdFUEFHRVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImh1Z2V0bGJfcGFnZV9od3BvaXNvblwiLFxuICAgIFwiaHVnZXRsYl91bnJlZl9wYWdlX2h3cG9pc29uXCIsXG4gICAgXCJ1bnBvaXNvbl9tZW1vcnlcIixcbiAgICBcImZvbGlvX2NsZWFyX2h1Z2V0bGJfaHdwb2lzb25cIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBzZXJpZXMgaW50cm9kdWNlcyBgTEFSR0VfRk9MSU9gIGNvbmZpZyBhbmQgcmVmYWN0b3JzIGhvdyBod3BvaXNvbiBpcyB0cmFja2VkIGZvciBodWdldGxiIGZvbGlvcy4gSXQgcmVwbGFjZXMgYGFkanVzdF9yYW5nZV9od3BvaXNvbmAgaW4gYGZzL2h1Z2V0bGJmcy9pbm9kZS5jYCB3aXRoIGEgZ2VuZXJpYyBvbmUgaW4gYG1tL2ZpbGVtYXAuY2AgYW5kIGNoYW5nZXMgYGh1Z2V0bGJmc19yZWFkX2l0ZXJgIHRvIGBnZW5lcmljX2ZpbGVfcmVhZF9pdGVyYC4gSXQgYWxzbyBtb2RpZmllcyBgZm9saW9fdGVzdF9od3BvaXNvbmAgdG8gYGZvbGlvX2hhc19od3BvaXNvbmVkX3BhZ2VgIGluIHZhcmlvdXMgcGxhY2VzLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIGNvcmUga2VybmVsIGxvZ2ljIChtbSwgaHVnZXRsYmZzLCBtZW1vcnktZmFpbHVyZSkgYW5kIHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSFVHRVRMQkZTXCIsXG4gICAgXCJNRU1PUllfRkFJTFVSRVwiLFxuICAgIFwiVFJBTlNQQVJFTlRfSFVHRVBBR0VcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJodWdldGxiX3BhZ2VfaHdwb2lzb25cIixcbiAgICBcImh1Z2V0bGJfdW5yZWZfcGFnZV9od3BvaXNvblwiLFxuICAgIFwidW5wb2lzb25fbWVtb3J5XCIsXG4gICAgXCJmb2xpb19jbGVhcl9odWdldGxiX2h3cG9pc29uXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggc2VyaWVzIGludHJvZHVjZXMgYExBUkdFX0ZPTElPYCBjb25maWcgYW5kIHJlZmFjdG9ycyBob3cgaHdwb2lzb24gaXMgdHJhY2tlZCBmb3IgaHVnZXRsYiBmb2xpb3MuIEl0IHJlcGxhY2VzIGBhZGp1c3RfcmFuZ2VfaHdwb2lzb25gIGluIGBmcy9odWdldGxiZnMvaW5vZGUuY2Agd2l0aCBhIGdlbmVyaWMgb25lIGluIGBtbS9maWxlbWFwLmNgIGFuZCBjaGFuZ2VzIGBodWdldGxiZnNfcmVhZF9pdGVyYCB0byBgZ2VuZXJpY19maWxlX3JlYWRfaXRlcmAuIEl0IGFsc28gbW9kaWZpZXMgYGZvbGlvX3Rlc3RfaHdwb2lzb25gIHRvIGBmb2xpb19oYXNfaHdwb2lzb25lZF9wYWdlYCBpbiB2YXJpb3VzIHBsYWNlcy4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byBjb3JlIGtlcm5lbCBsb2dpYyAobW0sIGh1Z2V0bGJmcywgbWVtb3J5LWZhaWx1cmUpIGFuZCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowvthtq[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-26 17:36:39 +0000 UTC FinishedAt: 2026-07-26 17:54:15 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "1590cf0329716306e948a8fc29f1d3ee87d3989f", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "HUGETLBFS", "MEMORY_FAILURE", "TRANSPARENT_HUGEPAGE" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "1590cf0329716306e948a8fc29f1d3ee87d3989f", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "HUGETLBFS", "MEMORY_FAILURE", "TRANSPARENT_HUGEPAGE" ], "series_id": "3e745adf-3aa7-4479-a465-a323f0992e19" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "hugetlb_page_hwpoison", "hugetlb_unref_page_hwpoison", "unpoison_memory", "folio_clear_hugetlb_hwpoison" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db", "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": { "findings": [ "7a0cb565-4340-4daf-8de2-06f5b1d2af93", "a77d3cb3-6a99-45a3-bd83-722c3f7fcd2c", "2406d176-ea76-40a8-b6bc-41d3e6326388" ] } } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI2IDE3OjUxPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0hVR0VUTEJGUyYjMzQ7LAogICAgJiMzNDtNRU1PUllfRkFJTFVSRSYjMzQ7LAogICAgJiMzNDtUUkFOU1BBUkVOVF9IVUdFUEFHRSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2h1Z2V0bGJfcGFnZV9od3BvaXNvbiYjMzQ7LAogICAgJiMzNDtodWdldGxiX3VucmVmX3BhZ2VfaHdwb2lzb24mIzM0OywKICAgICYjMzQ7dW5wb2lzb25fbWVtb3J5JiMzNDssCiAgICAmIzM0O2ZvbGlvX2NsZWFyX2h1Z2V0bGJfaHdwb2lzb24mIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggc2VyaWVzIGludHJvZHVjZXMgYExBUkdFX0ZPTElPYCBjb25maWcgYW5kIHJlZmFjdG9ycyBob3cgaHdwb2lzb24gaXMgdHJhY2tlZCBmb3IgaHVnZXRsYiBmb2xpb3MuIEl0IHJlcGxhY2VzIGBhZGp1c3RfcmFuZ2VfaHdwb2lzb25gIGluIGBmcy9odWdldGxiZnMvaW5vZGUuY2Agd2l0aCBhIGdlbmVyaWMgb25lIGluIGBtbS9maWxlbWFwLmNgIGFuZCBjaGFuZ2VzIGBodWdldGxiZnNfcmVhZF9pdGVyYCB0byBgZ2VuZXJpY19maWxlX3JlYWRfaXRlcmAuIEl0IGFsc28gbW9kaWZpZXMgYGZvbGlvX3Rlc3RfaHdwb2lzb25gIHRvIGBmb2xpb19oYXNfaHdwb2lzb25lZF9wYWdlYCBpbiB2YXJpb3VzIHBsYWNlcy4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byBjb3JlIGtlcm5lbCBsb2dpYyAobW0sIGh1Z2V0bGJmcywgbWVtb3J5LWZhaWx1cmUpIGFuZCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI2IDE3OjUxPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgOWI4NTZlYmQ0N2FjNTAxMDdjOTk2MjM2OTI4ZGFjNWI2M2IzZTk2YlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTdW4gSnVsIDI2IDE3OjUxOjM1IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2ZzL0tjb25maWcgYi9mcy9LY29uZmlnXG5pbmRleCBjZjZhZTY0Nzc2ZTYyYy4uZWRkYWM0ZWQyMTRiMTIgMTAwNjQ0XG4tLS0gYS9mcy9LY29uZmlnXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9LY29uZmlnXG5AQCAtMjcyLDcgJiM0MzsyNzIsNyBAQCBlbmRpZiAjIEhVR0VUTEJGU1xuIFxuIGNvbmZpZyBIVUdFVExCX1BBR0VcbiBcdGRlZl9ib29sIEhVR0VUTEJGU1xuLVx0c2VsZWN0IFhBUlJBWV9NVUxUSVxuJiM0MztcdHNlbGVjdCBMQVJHRV9GT0xJT1xuIFxuIGNvbmZpZyBIVUdFVExCX1BBR0VfT1BUSU1JWkVfVk1FTU1BUFxuIFx0ZGVmX2Jvb2wgSFVHRVRMQl9QQUdFXG5kaWZmIC0tZ2l0IGEvZnMvaHVnZXRsYmZzL2lub2RlLmMgYi9mcy9odWdldGxiZnMvaW5vZGUuY1xuaW5kZXggMjE2ZTFhMGRkMGIyMzcuLmNlZjdlNjFiODI3ZDcxIDEwMDY0NFxuLS0tIGEvZnMvaHVnZXRsYmZzL2lub2RlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2h1Z2V0bGJmcy9pbm9kZS5jXG5AQCAtMTg3LDExMyAmIzQzOzE4Nyw2IEBAIGh1Z2V0bGJfZ2V0X3VubWFwcGVkX2FyZWEoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGxvbmcgYWRkcixcbiBcdHJldHVybiBtbV9nZXRfdW5tYXBwZWRfYXJlYV92bWZsYWdzKGZpbGUsIGFkZHIwLCBsZW4sIHBnb2ZmLCBmbGFncywgMCk7XG4gfVxuIFxuLS8qXG4tICogU29tZW9uZSB3YW50cyB0byByZWFkIEBieXRlcyBmcm9tIGEgSFdQT0lTT04gaHVnZXRsYiBAZm9saW8gZnJvbSBAb2Zmc2V0LlxuLSAqIFJldHVybnMgdGhlIG1heGltdW0gbnVtYmVyIG9mIGJ5dGVzIG9uZSBjYW4gcmVhZCB3aXRob3V0IHRvdWNoaW5nIHRoZSAxc3QgcmF3XG4tICogSFdQT0lTT04gcGFnZS5cbi0gKi9cbi1zdGF0aWMgc2l6ZV90IGFkanVzdF9yYW5nZV9od3BvaXNvbihzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzaXplX3Qgb2Zmc2V0LFxuLVx0XHRzaXplX3QgYnl0ZXMpXG4te1xuLVx0c3RydWN0IHBhZ2UgKnBhZ2UgPSBmb2xpb19wYWdlKGZvbGlvLCBvZmZzZXQgLyBQQUdFX1NJWkUpO1xuLVx0c2l6ZV90IHNhZmVfYnl0ZXM7XG4tXG4tXHRpZiAoaXNfcmF3X2h3cG9pc29uX3BhZ2VfaW5faHVnZXBhZ2UocGFnZSkpXG4tXHRcdHJldHVybiAwO1xuLVx0LyogU2FmZSB0byByZWFkIHRoZSByZW1haW5pbmcgYnl0ZXMgaW4gdGhpcyBwYWdlLiAqL1xuLVx0c2FmZV9ieXRlcyA9IFBBR0VfU0laRSAtIChvZmZzZXQgJSBQQUdFX1NJWkUpO1xuLVx0cGFnZSYjNDM7JiM0Mzs7XG4tXG4tXHQvKiBDaGVjayBlYWNoIHJlbWFpbmluZyBwYWdlIGFzIGxvbmcgYXMgd2UgYXJlIG5vdCBkb25lIHlldC4gKi9cbi1cdGZvciAoOyBzYWZlX2J5dGVzIFx1MDAzYyBieXRlczsgc2FmZV9ieXRlcyAmIzQzOz0gUEFHRV9TSVpFLCBwYWdlJiM0MzsmIzQzOylcbi1cdFx0aWYgKGlzX3Jhd19od3BvaXNvbl9wYWdlX2luX2h1Z2VwYWdlKHBhZ2UpKVxuLVx0XHRcdGJyZWFrO1xuLVxuLVx0cmV0dXJuIG1pbihzYWZlX2J5dGVzLCBieXRlcyk7XG4tfVxuLVxuLS8qXG4tICogU3VwcG9ydCBmb3IgcmVhZCgpIC0gRmluZCB0aGUgcGFnZSBhdHRhY2hlZCB0byBmX21hcHBpbmcgYW5kIGNvcHkgb3V0IHRoZVxuLSAqIGRhdGEuIFRoaXMgcHJvdmlkZXMgZnVuY3Rpb25hbGl0eSBzaW1pbGFyIHRvIGZpbGVtYXBfcmVhZCgpLlxuLSAqL1xuLXN0YXRpYyBzc2l6ZV90IGh1Z2V0bGJmc19yZWFkX2l0ZXIoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKnRvKVxuLXtcbi1cdHN0cnVjdCBmaWxlICpmaWxlID0gaW9jYi1cdTAwM2VraV9maWxwO1xuLVx0c3RydWN0IGhzdGF0ZSAqaCA9IGhzdGF0ZV9maWxlKGZpbGUpO1xuLVx0c3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcgPSBmaWxlLVx1MDAzZWZfbWFwcGluZztcbi1cdHN0cnVjdCBpbm9kZSAqaW5vZGUgPSBtYXBwaW5nLVx1MDAzZWhvc3Q7XG4tXHR1bnNpZ25lZCBsb25nIGluZGV4ID0gaW9jYi1cdTAwM2VraV9wb3MgXHUwMDNlXHUwMDNlIGh1Z2VfcGFnZV9zaGlmdChoKTtcbi1cdHVuc2lnbmVkIGxvbmcgb2Zmc2V0ID0gaW9jYi1cdTAwM2VraV9wb3MgXHUwMDI2IH5odWdlX3BhZ2VfbWFzayhoKTtcbi1cdHVuc2lnbmVkIGxvbmcgZW5kX2luZGV4O1xuLVx0bG9mZl90IGlzaXplO1xuLVx0c3NpemVfdCByZXR2YWwgPSAwO1xuLVxuLVx0d2hpbGUgKGlvdl9pdGVyX2NvdW50KHRvKSkge1xuLVx0XHRzdHJ1Y3QgZm9saW8gKmZvbGlvO1xuLVx0XHRzaXplX3QgbnIsIGNvcGllZCwgd2FudDtcbi1cbi1cdFx0LyogbnIgaXMgdGhlIG1heGltdW0gbnVtYmVyIG9mIGJ5dGVzIHRvIGNvcHkgZnJvbSB0aGlzIHBhZ2UgKi9cbi1cdFx0bnIgPSBodWdlX3BhZ2Vfc2l6ZShoKTtcbi1cdFx0aXNpemUgPSBpX3NpemVfcmVhZChpbm9kZSk7XG4tXHRcdGlmICghaXNpemUpXG4tXHRcdFx0YnJlYWs7XG4tXHRcdGVuZF9pbmRleCA9IChpc2l6ZSAtIDEpIFx1MDAzZVx1MDAzZSBodWdlX3BhZ2Vfc2hpZnQoaCk7XG4tXHRcdGlmIChpbmRleCBcdTAwM2UgZW5kX2luZGV4KVxuLVx0XHRcdGJyZWFrO1xuLVx0XHRpZiAoaW5kZXggPT0gZW5kX2luZGV4KSB7XG4tXHRcdFx0bnIgPSAoKGlzaXplIC0gMSkgXHUwMDI2IH5odWdlX3BhZ2VfbWFzayhoKSkgJiM0MzsgMTtcbi1cdFx0XHRpZiAobnIgXHUwMDNjPSBvZmZzZXQpXG4tXHRcdFx0XHRicmVhaztcbi1cdFx0fVxuLVx0XHRuciA9IG5yIC0gb2Zmc2V0O1xuLVxuLVx0XHQvKiBGaW5kIHRoZSBmb2xpbyAqL1xuLVx0XHRmb2xpbyA9IGZpbGVtYXBfbG9ja19odWdldGxiX2ZvbGlvKGgsIG1hcHBpbmcsIGluZGV4KTtcbi1cdFx0aWYgKElTX0VSUihmb2xpbykpIHtcbi1cdFx0XHQvKlxuLVx0XHRcdCAqIFdlIGhhdmUgYSBIT0xFLCB6ZXJvIG91dCB0aGUgdXNlci1idWZmZXIgZm9yIHRoZVxuLVx0XHRcdCAqIGxlbmd0aCBvZiB0aGUgaG9sZSBvciByZXF1ZXN0LlxuLVx0XHRcdCAqL1xuLVx0XHRcdGNvcGllZCA9IGlvdl9pdGVyX3plcm8obnIsIHRvKTtcbi1cdFx0fSBlbHNlIHtcbi1cdFx0XHRmb2xpb191bmxvY2soZm9saW8pO1xuLVxuLVx0XHRcdGlmICghZm9saW9fdGVzdF9od3BvaXNvbihmb2xpbykpXG4tXHRcdFx0XHR3YW50ID0gbnI7XG4tXHRcdFx0ZWxzZSB7XG4tXHRcdFx0XHQvKlxuLVx0XHRcdFx0ICogQWRqdXN0IGhvdyBtYW55IGJ5dGVzIHNhZmUgdG8gcmVhZCB3aXRob3V0XG4tXHRcdFx0XHQgKiB0b3VjaGluZyB0aGUgMXN0IHJhdyBIV1BPSVNPTiBwYWdlIGFmdGVyXG4tXHRcdFx0XHQgKiBvZmZzZXQuXG4tXHRcdFx0XHQgKi9cbi1cdFx0XHRcdHdhbnQgPSBhZGp1c3RfcmFuZ2VfaHdwb2lzb24oZm9saW8sIG9mZnNldCwgbnIpO1xuLVx0XHRcdFx0aWYgKHdhbnQgPT0gMCkge1xuLVx0XHRcdFx0XHRmb2xpb19wdXQoZm9saW8pO1xuLVx0XHRcdFx0XHRyZXR2YWwgPSAtRUlPO1xuLVx0XHRcdFx0XHRicmVhaztcbi1cdFx0XHRcdH1cbi1cdFx0XHR9XG4tXG4tXHRcdFx0Lypcbi1cdFx0XHQgKiBXZSBoYXZlIHRoZSBmb2xpbywgY29weSBpdCB0byB1c2VyIHNwYWNlIGJ1ZmZlci5cbi1cdFx0XHQgKi9cbi1cdFx0XHRjb3BpZWQgPSBjb3B5X2ZvbGlvX3RvX2l0ZXIoZm9saW8sIG9mZnNldCwgd2FudCwgdG8pO1xuLVx0XHRcdGZvbGlvX3B1dChmb2xpbyk7XG4tXHRcdH1cbi1cdFx0b2Zmc2V0ICYjNDM7PSBjb3BpZWQ7XG4tXHRcdHJldHZhbCAmIzQzOz0gY29waWVkO1xuLVx0XHRpZiAoY29waWVkICE9IG5yIFx1MDAyNlx1MDAyNiBpb3ZfaXRlcl9jb3VudCh0bykpIHtcbi1cdFx0XHRpZiAoIXJldHZhbClcbi1cdFx0XHRcdHJldHZhbCA9IC1FRkFVTFQ7XG4tXHRcdFx0YnJlYWs7XG4tXHRcdH1cbi1cdFx0aW5kZXggJiM0Mzs9IG9mZnNldCBcdTAwM2VcdTAwM2UgaHVnZV9wYWdlX3NoaWZ0KGgpO1xuLVx0XHRvZmZzZXQgXHUwMDI2PSB+aHVnZV9wYWdlX21hc2soaCk7XG4tXHR9XG4tXHRpb2NiLVx1MDAzZWtpX3BvcyA9ICgobG9mZl90KWluZGV4IFx1MDAzY1x1MDAzYyBodWdlX3BhZ2Vfc2hpZnQoaCkpICYjNDM7IG9mZnNldDtcbi1cdHJldHVybiByZXR2YWw7XG4tfVxuLVxuIHN0YXRpYyBpbnQgaHVnZXRsYmZzX3dyaXRlX2JlZ2luKGNvbnN0IHN0cnVjdCBraW9jYiAqaW9jYixcbiBcdFx0XHRzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcbiBcdFx0XHRsb2ZmX3QgcG9zLCB1bnNpZ25lZCBsZW4sXG5AQCAtODgzLDYgJiM0Mzs3NzYsMTcgQEAgc3RhdGljIHN0cnVjdCBpbm9kZSAqaHVnZXRsYmZzX2dldF9yb290KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsXG4gXHRyZXR1cm4gaW5vZGU7XG4gfVxuIFxuJiM0MztzdGF0aWMgdm9pZCBodWdldGxiZnNfaW5pdF9yZWd1bGFyX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgaHN0YXRlICpoc3RhdGUgPSBoc3RhdGVfaW5vZGUoaW5vZGUpO1xuJiM0MztcdHVuc2lnbmVkIGludCBvcmRlciA9IGh1Z2VfcGFnZV9vcmRlcihoc3RhdGUpO1xuJiM0MztcbiYjNDM7XHRpbm9kZS1cdTAwM2VpX29wID0gXHUwMDI2aHVnZXRsYmZzX2lub2RlX29wZXJhdGlvbnM7XG4mIzQzO1x0aW5vZGUtXHUwMDNlaV9mb3AgPSBcdTAwMjZodWdldGxiZnNfZmlsZV9vcGVyYXRpb25zO1xuJiM0MztcdG1hcHBpbmdfc2V0X2ZvbGlvX29yZGVyX3JhbmdlKGlub2RlLVx1MDAzZWlfbWFwcGluZywgb3JkZXIsIG9yZGVyKTtcbiYjNDM7XHRtYXBwaW5nX3NldF9hdXRob3JpdGF0aXZlKGlub2RlLVx1MDAzZWlfbWFwcGluZyk7XG4mIzQzO31cbiYjNDM7XG4gLypcbiAgKiBIdWdldGxiZnMgaXMgbm90IHJlY2xhaW1hYmxlOyB0aGVyZWZvcmUgaXRzIGlfbW1hcF9yd3NlbSB3aWxsIG5ldmVyXG4gICogYmUgdGFrZW4gZnJvbSByZWNsYWltIC0tIHVubGlrZSByZWd1bGFyIGZpbGVzeXN0ZW1zLiBUaGlzIG5lZWRzIGFuXG5AQCAtOTI2LDggJiM0Mzs4MzAsNyBAQCBzdGF0aWMgc3RydWN0IGlub2RlICpodWdldGxiZnNfZ2V0X2lub2RlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsXG4gXHRcdFx0aW5pdF9zcGVjaWFsX2lub2RlKGlub2RlLCBtb2RlLCBkZXYpO1xuIFx0XHRcdGJyZWFrO1xuIFx0XHRjYXNlIFNfSUZSRUc6XG4tXHRcdFx0aW5vZGUtXHUwMDNlaV9vcCA9IFx1MDAyNmh1Z2V0bGJmc19pbm9kZV9vcGVyYXRpb25zO1xuLVx0XHRcdGlub2RlLVx1MDAzZWlfZm9wID0gXHUwMDI2aHVnZXRsYmZzX2ZpbGVfb3BlcmF0aW9ucztcbiYjNDM7XHRcdFx0aHVnZXRsYmZzX2luaXRfcmVndWxhcl9pbm9kZShpbm9kZSk7XG4gXHRcdFx0YnJlYWs7XG4gXHRcdGNhc2UgU19JRkRJUjpcbiBcdFx0XHRpbm9kZS1cdTAwM2VpX29wID0gXHUwMDI2aHVnZXRsYmZzX2Rpcl9pbm9kZV9vcGVyYXRpb25zO1xuQEAgLTEyMDYsNyAmIzQzOzExMDksNyBAQCBzdGF0aWMgdm9pZCBpbml0X29uY2Uodm9pZCAqZm9vKVxuIH1cbiBcbiBzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBodWdldGxiZnNfZmlsZV9vcGVyYXRpb25zID0ge1xuLVx0LnJlYWRfaXRlclx0XHQ9IGh1Z2V0bGJmc19yZWFkX2l0ZXIsXG4mIzQzO1x0LnJlYWRfaXRlclx0XHQ9IGdlbmVyaWNfZmlsZV9yZWFkX2l0ZXIsXG4gXHQubW1hcFx0XHRcdD0gaHVnZXRsYmZzX2ZpbGVfbW1hcCxcbiBcdC5mc3luY1x0XHRcdD0gbm9vcF9mc3luYyxcbiBcdC5nZXRfdW5tYXBwZWRfYXJlYVx0PSBodWdldGxiX2dldF91bm1hcHBlZF9hcmVhLFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaHVnZXRsYi5oIGIvaW5jbHVkZS9saW51eC9odWdldGxiLmhcbmluZGV4IDJhYmFmOTkzMjFlOTBkLi4xODc4NjQyZTc1ZWM1MSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvaHVnZXRsYi5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaFxuQEAgLTE2NSw3ICYjNDM7MTY1LDcgQEAgYm9vbCBodWdldGxiZnNfcGFnZWNhY2hlX3ByZXNlbnQoc3RydWN0IGhzdGF0ZSAqaCxcbiBcdFx0XHRcdCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbiBcdFx0XHRcdCB1bnNpZ25lZCBsb25nIGFkZHJlc3MpO1xuIFxuLXN0cnVjdCBhZGRyZXNzX3NwYWNlICpodWdldGxiX2ZvbGlvX21hcHBpbmdfbG9ja193cml0ZShzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcbiYjNDM7c3RydWN0IGFkZHJlc3Nfc3BhY2UgKmh1Z2V0bGJfZm9saW9fbWFwcGluZ19sb2NrX3dyaXRlKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8pO1xuIFxuIGV4dGVybiBpbnQgbW92YWJsZV9naWdhbnRpY19wYWdlcyBfX3JlYWRfbW9zdGx5O1xuIGV4dGVybiBpbnQgc3lzY3RsX2h1Z2V0bGJfc2htX2dyb3VwIF9fcmVhZF9tb3N0bHk7XG5AQCAtMjkyLDggJiM0MzsyOTIsNyBAQCBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgaHVnZXRsYl90b3RhbF9wYWdlcyh2b2lkKVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuLXN0YXRpYyBpbmxpbmUgc3RydWN0IGFkZHJlc3Nfc3BhY2UgKmh1Z2V0bGJfZm9saW9fbWFwcGluZ19sb2NrX3dyaXRlKFxuLVx0XHRcdFx0XHRcdFx0c3RydWN0IGZvbGlvICpmb2xpbylcbiYjNDM7c3RhdGljIGlubGluZSBzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqaHVnZXRsYl9mb2xpb19tYXBwaW5nX2xvY2tfd3JpdGUoY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbylcbiB7XG4gXHRyZXR1cm4gTlVMTDtcbiB9XG5AQCAtNTk1LDggJiM0Mzs1OTQsOCBAQCBlbnVtIGh1Z2V0bGJfcGFnZV9mbGFncyB7XG4gI2lmZGVmIENPTkZJR19IVUdFVExCX1BBR0VcbiAjZGVmaW5lIFRFU1RIUEFHRUZMQUcodW5hbWUsIGZsbmFtZSlcdFx0XHRcdFxcXG4gc3RhdGljIF9fYWx3YXlzX2lubGluZVx0XHRcdFx0XHRcdFxcXG4tYm9vbCBmb2xpb190ZXN0X2h1Z2V0bGJfIyNmbG5hbWUoc3RydWN0IGZvbGlvICpmb2xpbylcdFx0XFxcbi1cdHtcdHZvaWQgKnByaXZhdGUgPSBcdTAwMjZmb2xpby1cdTAwM2Vwcml2YXRlO1x0XHRcXFxuJiM0Mztib29sIGZvbGlvX3Rlc3RfaHVnZXRsYl8jI2ZsbmFtZShjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVx0XFxcbiYjNDM7XHR7XHRjb25zdCB2b2lkICpwcml2YXRlID0gXHUwMDI2Zm9saW8tXHUwMDNlcHJpdmF0ZTtcdFx0XFxcbiBcdFx0cmV0dXJuIHRlc3RfYml0KEhQR18jI2ZsbmFtZSwgcHJpdmF0ZSk7XHRcdFxcXG4gXHR9XG4gXG5AQCAtNjE2LDcgJiM0Mzs2MTUsNyBAQCB2b2lkIGZvbGlvX2NsZWFyX2h1Z2V0bGJfIyNmbG5hbWUoc3RydWN0IGZvbGlvICpmb2xpbylcdFx0XFxcbiAjZWxzZVxuICNkZWZpbmUgVEVTVEhQQUdFRkxBRyh1bmFtZSwgZmxuYW1lKVx0XHRcdFx0XFxcbiBzdGF0aWMgaW5saW5lIGJvb2xcdFx0XHRcdFx0XHRcXFxuLWZvbGlvX3Rlc3RfaHVnZXRsYl8jI2ZsbmFtZShzdHJ1Y3QgZm9saW8gKmZvbGlvKVx0XHRcXFxuJiM0Mztmb2xpb190ZXN0X2h1Z2V0bGJfIyNmbG5hbWUoY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbylcdFx0XFxcbiBcdHsgcmV0dXJuIDA7IH1cbiBcbiAjZGVmaW5lIFNFVEhQQUdFRkxBRyh1bmFtZSwgZmxuYW1lKVx0XHRcdFx0XFxcbkBAIC03MjcsNyAmIzQzOzcyNiw3IEBAIHN0YXRpYyBpbmxpbmUgc3RydWN0IGh1Z2VwYWdlX3N1YnBvb2wgKnN1YnBvb2xfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSlcbiBcdHJldHVybiBIVUdFVExCRlNfU0IoaW5vZGUtXHUwMDNlaV9zYiktXHUwMDNlc3Bvb2w7XG4gfVxuIFxuLXN0YXRpYyBpbmxpbmUgc3RydWN0IGh1Z2VwYWdlX3N1YnBvb2wgKmh1Z2V0bGJfZm9saW9fc3VicG9vbChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuJiM0MztzdGF0aWMgaW5saW5lIHN0cnVjdCBodWdlcGFnZV9zdWJwb29sICpodWdldGxiX2ZvbGlvX3N1YnBvb2woY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbylcbiB7XG4gXHRyZXR1cm4gZm9saW8tXHUwMDNlX2h1Z2V0bGJfc3VicG9vbDtcbiB9XG5AQCAtODU3LDcgJiM0Mzs4NTYsNyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgYXJjaF9oYXNfaHVnZV9ib290bWVtX2FsbG9jKHZvaWQpXG4gfVxuICNlbmRpZlxuIFxuLXN0YXRpYyBpbmxpbmUgc3RydWN0IGhzdGF0ZSAqZm9saW9faHN0YXRlKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4mIzQzO3N0YXRpYyBpbmxpbmUgc3RydWN0IGhzdGF0ZSAqZm9saW9faHN0YXRlKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8pXG4ge1xuIFx0Vk1fQlVHX09OX0ZPTElPKCFmb2xpb190ZXN0X2h1Z2V0bGIoZm9saW8pLCBmb2xpbyk7XG4gXHRyZXR1cm4gc2l6ZV90b19oc3RhdGUoZm9saW9fc2l6ZShmb2xpbykpO1xuQEAgLTEwNzAsMTEgJiM0MzsxMDY5LDYgQEAgdm9pZCBodWdldGxiX3JlZ2lzdGVyX25vZGUoc3RydWN0IG5vZGUgKm5vZGUpO1xuIHZvaWQgaHVnZXRsYl91bnJlZ2lzdGVyX25vZGUoc3RydWN0IG5vZGUgKm5vZGUpO1xuICNlbmRpZlxuIFxuLS8qXG4tICogQ2hlY2sgaWYgYSBnaXZlbiByYXcgQHBhZ2UgaW4gYSBodWdlcGFnZSBpcyBIV1BPSVNPTi5cbi0gKi9cbi1ib29sIGlzX3Jhd19od3BvaXNvbl9wYWdlX2luX2h1Z2VwYWdlKHN0cnVjdCBwYWdlICpwYWdlKTtcbi1cbiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgaHVnZV9wYWdlX21hc2tfYWxpZ24oc3RydWN0IGZpbGUgKmZpbGUpXG4ge1xuIFx0cmV0dXJuIFBBR0VfTUFTSyBcdTAwMjYgfmh1Z2VfcGFnZV9tYXNrKGhzdGF0ZV9maWxlKGZpbGUpKTtcbkBAIC0xMDg4LDcgJiM0MzsxMDgyLDcgQEAgc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGh1Z2VfcGFnZV9tYXNrX2FsaWduKHN0cnVjdCBmaWxlICpmaWxlKVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuLXN0YXRpYyBpbmxpbmUgc3RydWN0IGh1Z2VwYWdlX3N1YnBvb2wgKmh1Z2V0bGJfZm9saW9fc3VicG9vbChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuJiM0MztzdGF0aWMgaW5saW5lIHN0cnVjdCBodWdlcGFnZV9zdWJwb29sICpodWdldGxiX2ZvbGlvX3N1YnBvb2woY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbylcbiB7XG4gXHRyZXR1cm4gTlVMTDtcbiB9XG5AQCAtMTE1Nyw3ICYjNDM7MTE1MSw3IEBAIHN0YXRpYyBpbmxpbmUgc3RydWN0IGhzdGF0ZSAqaHN0YXRlX3ZtYShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcbiBcdHJldHVybiBOVUxMO1xuIH1cbiBcbi1zdGF0aWMgaW5saW5lIHN0cnVjdCBoc3RhdGUgKmZvbGlvX2hzdGF0ZShzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuJiM0MztzdGF0aWMgaW5saW5lIHN0cnVjdCBoc3RhdGUgKmZvbGlvX2hzdGF0ZShjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIHtcbiBcdHJldHVybiBOVUxMO1xuIH1cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21tX3R5cGVzLmggYi9pbmNsdWRlL2xpbnV4L21tX3R5cGVzLmhcbmluZGV4IGIxOGMyYjJlN2QyYzY1Li44NmEyZDBmZWU1NTdiZSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvbW1fdHlwZXMuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9tbV90eXBlcy5oXG5AQCAtMzg3LDcgJiM0MzszODcsNyBAQCB0eXBlZGVmIHVuc2lnbmVkIHNob3J0IG1tX2lkX3Q7XG4gICogQF9odWdldGxiX3N1YnBvb2w6IERvIG5vdCB1c2UgZGlyZWN0bHksIHVzZSBhY2Nlc3NvciBpbiBodWdldGxiLmguXG4gICogQF9odWdldGxiX2Nncm91cDogRG8gbm90IHVzZSBkaXJlY3RseSwgdXNlIGFjY2Vzc29yIGluIGh1Z2V0bGJfY2dyb3VwLmguXG4gICogQF9odWdldGxiX2Nncm91cF9yc3ZkOiBEbyBub3QgdXNlIGRpcmVjdGx5LCB1c2UgYWNjZXNzb3IgaW4gaHVnZXRsYl9jZ3JvdXAuaC5cbi0gKiBAX2h1Z2V0bGJfaHdwb2lzb246IERvIG5vdCB1c2UgZGlyZWN0bHksIGNhbGwgcmF3X2h3cF9saXN0X2hlYWQoKS5cbiYjNDM7ICogQGh1Z2V0bGJfaHdwb2lzb246IExpc3Qgb2YgcGFnZXMgd2l0aCBod3BvaXNvbi5cbiAgKiBAX2RlZmVycmVkX2xpc3Q6IEZvbGlvcyB0byBiZSBzcGxpdCB1bmRlciBtZW1vcnkgcHJlc3N1cmUuXG4gICogQF91bnVzZWRfc2xhYl9vYmpfZXh0czogUGxhY2Vob2xkZXIgdG8gbWF0Y2ggb2JqX2V4dHMgaW4gc3RydWN0IHNsYWIuXG4gICpcbkBAIC00OTksNyAmIzQzOzQ5OSw3IEBAIHN0cnVjdCBmb2xpbyB7XG4gXHRcdFx0dm9pZCAqX2h1Z2V0bGJfc3VicG9vbDtcbiBcdFx0XHR2b2lkICpfaHVnZXRsYl9jZ3JvdXA7XG4gXHRcdFx0dm9pZCAqX2h1Z2V0bGJfY2dyb3VwX3JzdmQ7XG4tXHRcdFx0dm9pZCAqX2h1Z2V0bGJfaHdwb2lzb247XG4mIzQzO1x0XHRcdHN0cnVjdCBod3BfcGFnZSAqaHVnZXRsYl9od3BvaXNvbjtcbiBcdC8qIHByaXZhdGU6IHRoZSB1bmlvbiB3aXRoIHN0cnVjdCBwYWdlIGlzIHRyYW5zaXRpb25hbCAqL1xuIFx0XHR9O1xuIFx0XHRzdHJ1Y3QgcGFnZSBfX3BhZ2VfMztcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaCBiL2luY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oXG5pbmRleCA3MjIzZjZmNGUyYjQwMy4uMDdjYzc4NTRiMmRlMTYgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmhcbkBAIC04OTMsMTQgJiM0Mzs4OTMsMTkgQEAgc3RhdGljIGlubGluZSBpbnQgUGFnZVRyYW5zQ29tcG91bmQoY29uc3Qgc3RydWN0IHBhZ2UgKnBhZ2UpXG4gVEVTVFBBR0VGTEFHX0ZBTFNFKFRyYW5zQ29tcG91bmQsIHRyYW5zY29tcG91bmQpXG4gI2VuZGlmXG4gXG4tI2lmIGRlZmluZWQoQ09ORklHX01FTU9SWV9GQUlMVVJFKSBcdTAwMjZcdTAwMjYgZGVmaW5lZChDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UpXG4mIzQzOyNpZiBkZWZpbmVkKENPTkZJR19NRU1PUllfRkFJTFVSRSkgXHUwMDI2XHUwMDI2IGRlZmluZWQoQ09ORklHX0xBUkdFX0ZPTElPKVxuIC8qXG4tICogUGFnZUhhc0hXUG9pc29uZWQgaW5kaWNhdGVzIHRoYXQgYXQgbGVhc3Qgb25lIHN1YnBhZ2UgaXMgaHdwb2lzb25lZCBpbiB0aGVcbi0gKiBjb21wb3VuZCBwYWdlLlxuJiM0MzsgKiBmb2xpb19oYXNfaHdwb2lzb25lZCBpbmRpY2F0ZXMgdGhhdCBhdCBsZWFzdCBvbmUgcGFnZSBpcyBod3BvaXNvbmVkIGluIHRoZVxuJiM0MzsgKiBmb2xpby4gIFRoYXQgcGFnZSB3aWxsIHVzdWFsbHkgYWxzbyBoYXZlIHRoZSBIV1BvaXNvbiBmbGFnIHNldCwgYnV0IHRoaXNcbiYjNDM7ICogaXMgbm90IHBvc3NpYmxlIGZvciBmb2xpb3Mgd2hpY2ggaGF2ZSBIVk8gKHNlZSBtZW1vcnktZmFpbHVyZSBmb3IgdGhlXG4mIzQzOyAqIHNjaGVtZSB1c2VkIGluIHRoYXQgY2FzZSkuICBZb3UgcHJvYmFibHkgZG9uJiMzOTt0IHdhbnQgdG8gY2FsbCB0aGlzIGRpcmVjdGx5O1xuJiM0MzsgKiB1c2UgZm9saW9faGFzX2h3cG9pc29uZWRfcGFnZSgpIGluc3RlYWQuXG4gICpcbiAgKiBUaGlzIGZsYWcgaXMgc2V0IGJ5IGh3cG9pc29uIGhhbmRsZXIuICBDbGVhcmVkIGJ5IFRIUCBzcGxpdCBvciBmcmVlIHBhZ2UuXG4gICovXG4gRk9MSU9fRkxBRyhoYXNfaHdwb2lzb25lZCwgRk9MSU9fU0VDT05EX1BBR0UpXG4mIzQzO0ZPTElPX1RFU1RfU0VUX0ZMQUcoaGFzX2h3cG9pc29uZWQsIEZPTElPX1NFQ09ORF9QQUdFKVxuJiM0MztGT0xJT19URVNUX0NMRUFSX0ZMQUcoaGFzX2h3cG9pc29uZWQsIEZPTElPX1NFQ09ORF9QQUdFKVxuICNlbHNlXG4gRk9MSU9fRkxBR19GQUxTRShoYXNfaHdwb2lzb25lZClcbiAjZW5kaWZcbkBAIC0xMDQxLDggJiM0MzsxMDQ2LDI5IEBAIFBBR0VfVFlQRV9PUFMoU2xhYiwgc2xhYiwgc2xhYilcbiBcbiAjaWZkZWYgQ09ORklHX0hVR0VUTEJfUEFHRVxuIEZPTElPX1RZUEVfT1BTKGh1Z2V0bGIsIGh1Z2V0bGIpXG4mIzQzO1xuJiM0MzsjaWZkZWYgQ09ORklHX01FTU9SWV9GQUlMVVJFXG4mIzQzO3N0YXRpYyBpbmxpbmUgYm9vbCBmb2xpb190ZXN0X2h1Z2VfcG9pc29uKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8pXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gKFJFQURfT05DRShmb2xpby1cdTAwM2VwYWdlLnBhZ2VfdHlwZSkgXHUwMDNlXHUwMDNlIDIzKSA9PVxuJiM0MztcdFx0KChQR1RZX2h1Z2V0bGIgXHUwMDNjXHUwMDNjIDEpIHwgMSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBmb2xpb19zZXRfaHVnZV9wb2lzb24oc3RydWN0IGZvbGlvICpmb2xpbylcbiYjNDM7e1xuJiM0MztcdGZvbGlvLVx1MDAzZXBhZ2UucGFnZV90eXBlIHw9ICgxIFx1MDAzY1x1MDAzYyAyMyk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBmb2xpb19jbGVhcl9odWdlX3BvaXNvbihzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuJiM0Mzt7XG4mIzQzO1x0Zm9saW8tXHUwMDNlcGFnZS5wYWdlX3R5cGUgXHUwMDI2PSB+KDEgXHUwMDNjXHUwMDNjIDIzKTtcbiYjNDM7fVxuJiM0MzsjZWxzZVxuJiM0MztGT0xJT19URVNUX0ZMQUdfRkFMU0UoaHVnZV9wb2lzb24pXG4mIzQzOyNlbmRpZlxuICNlbHNlXG4gRk9MSU9fVEVTVF9GTEFHX0ZBTFNFKGh1Z2V0bGIpXG4mIzQzO0ZPTElPX1RFU1RfRkxBR19GQUxTRShodWdlX3BvaXNvbilcbiAjZW5kaWZcbiBcbiBQQUdFX1RZUEVfT1BTKFpzbWFsbG9jLCB6c21hbGxvYywgenNtYWxsb2MpXG5AQCAtMTA2OCwxMCAmIzQzOzEwOTQsMTQgQEAgc3RhdGljIGlubGluZSBib29sIFBhZ2VIdWdlKGNvbnN0IHN0cnVjdCBwYWdlICpwYWdlKVxuIFx0cmV0dXJuIGZvbGlvX3Rlc3RfaHVnZXRsYihwYWdlX2ZvbGlvKHBhZ2UpKTtcbiB9XG4gXG4mIzQzO2Jvb2wgaHVnZXRsYl9wYWdlX2h3cG9pc29uKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8sIGNvbnN0IHN0cnVjdCBwYWdlICpwYWdlKTtcbiYjNDM7Ym9vbCBodWdldGxiX3VucmVmX3BhZ2VfaHdwb2lzb24oY29uc3Qgc3RydWN0IHBhZ2UgKnBhZ2UpO1xuJiM0MztcbiAvKlxuLSAqIENoZWNrIGlmIGEgcGFnZSBpcyBjdXJyZW50bHkgbWFya2VkIEhXUG9pc29uZWQuIE5vdGUgdGhhdCB0aGlzIGNoZWNrIGlzXG4tICogYmVzdCBlZmZvcnQgb25seSBhbmQgaW5oZXJlbnRseSByYWN5OiB0aGVyZSBpcyBubyB3YXkgdG8gc3luY2hyb25pemUgd2l0aFxuLSAqIGZhaWxpbmcgaGFyZHdhcmUuXG4mIzQzOyAqIENoZWNrIGlmIGEgcGFnZSBpcyBjdXJyZW50bHkgbWFya2VkIEhXUG9pc29uZWQuICBUaGlzIGNoZWNrIGlzIGJlc3RcbiYjNDM7ICogZWZmb3J0IG9ubHkgYW5kIGluaGVyZW50bHkgcmFjeTogdGhlcmUgaXMgbm8gd2F5IHRvIHN5bmNocm9uaXplIHdpdGhcbiYjNDM7ICogZmFpbGluZyBoYXJkd2FyZS4gIFRoZSBjYWxsZXIgbWF5IG5vdCBoYXZlIGEgcmVmY291bnQgb24gdGhlIGZvbGlvXG4mIzQzOyAqIGNvbnRhaW5pbmcgdGhlIHBhZ2UsIHNvIHdlIG11c3QgYmUgY2FyZWZ1bCB0byBub3QgdHJpcCBhbnkgYXNzZXJ0aW9ucy5cbiAgKi9cbiBzdGF0aWMgaW5saW5lIGJvb2wgaXNfcGFnZV9od3BvaXNvbihjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSlcbiB7XG5AQCAtMTA4MCwxMyAmIzQzOzExMTAsMjYgQEAgc3RhdGljIGlubGluZSBib29sIGlzX3BhZ2VfaHdwb2lzb24oY29uc3Qgc3RydWN0IHBhZ2UgKnBhZ2UpXG4gXHRpZiAoUGFnZUhXUG9pc29uKHBhZ2UpKVxuIFx0XHRyZXR1cm4gdHJ1ZTtcbiBcdGZvbGlvID0gcGFnZV9mb2xpbyhwYWdlKTtcbi1cdHJldHVybiBmb2xpb190ZXN0X2h1Z2V0bGIoZm9saW8pIFx1MDAyNlx1MDAyNiBQYWdlSFdQb2lzb24oXHUwMDI2Zm9saW8tXHUwMDNlcGFnZSk7XG4mIzQzO1x0aWYgKGZvbGlvX3Rlc3RfaHVnZV9wb2lzb24oZm9saW8pKVxuJiM0MztcdFx0cmV0dXJuIGh1Z2V0bGJfdW5yZWZfcGFnZV9od3BvaXNvbihwYWdlKTtcbiYjNDM7XHQvKiBJbiBjYXNlIHdlIHJhY2VkIHdpdGggaHVnZXRsYiB0cmFuc2ZlcnJpbmcgZmxhZ3MgKi9cbiYjNDM7XHRyZXR1cm4gUGFnZUhXUG9pc29uKHBhZ2UpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgaXNfcmVmX3BhZ2VfaHdwb2lzb24oY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbyxcbiYjNDM7XHRcdGNvbnN0IHN0cnVjdCBwYWdlICpwYWdlKVxuJiM0Mzt7XG4mIzQzO1x0aWYgKFBhZ2VIV1BvaXNvbihwYWdlKSlcbiYjNDM7XHRcdHJldHVybiB0cnVlO1xuJiM0MztcdGlmIChmb2xpb190ZXN0X2h1Z2V0bGIoZm9saW8pKVxuJiM0MztcdFx0cmV0dXJuIGh1Z2V0bGJfcGFnZV9od3BvaXNvbihmb2xpbywgcGFnZSk7XG4mIzQzO1x0cmV0dXJuIGZhbHNlO1xuIH1cbiBcbi1zdGF0aWMgaW5saW5lIGJvb2wgZm9saW9fY29udGFpbl9od3BvaXNvbmVkX3BhZ2Uoc3RydWN0IGZvbGlvICpmb2xpbylcbiYjNDM7c3RhdGljIGlubGluZSBib29sIGZvbGlvX2hhc19od3BvaXNvbmVkX3BhZ2UoY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbylcbiB7XG4tXHRyZXR1cm4gZm9saW9fdGVzdF9od3BvaXNvbihmb2xpbykgfHxcbi1cdCAgICAoZm9saW9fdGVzdF9sYXJnZShmb2xpbykgXHUwMDI2XHUwMDI2IGZvbGlvX3Rlc3RfaGFzX2h3cG9pc29uZWQoZm9saW8pKTtcbiYjNDM7XHRyZXR1cm4gUGFnZUhXUG9pc29uKFx1MDAyNmZvbGlvLVx1MDAzZXBhZ2UpIHx8XG4mIzQzO1x0ICAgICAgIChmb2xpb190ZXN0X2xhcmdlKGZvbGlvKSBcdTAwMjZcdTAwMjYgZm9saW9fdGVzdF9oYXNfaHdwb2lzb25lZChmb2xpbykpO1xuIH1cbiBcbiBib29sIGlzX2ZyZWVfYnVkZHlfcGFnZShjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSk7XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wYWdlbWFwLmggYi9pbmNsdWRlL2xpbnV4L3BhZ2VtYXAuaFxuaW5kZXggMmMzNzE4ZDU5MmQ2ZGQuLjIyZDQ4OTM1ZmZkYTdjIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9wYWdlbWFwLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvcGFnZW1hcC5oXG5AQCAtMjEwLDYgJiM0MzsyMTAsNyBAQCBlbnVtIG1hcHBpbmdfZmxhZ3Mge1xuIFx0QVNfV1JJVEVCQUNLX01BWV9ERUFETE9DS19PTl9SRUNMQUlNID0gOSxcbiBcdEFTX0tFUk5FTF9GSUxFID0gMTAsXHQvKiBtYXBwaW5nIGZvciBhIGZha2Uga2VybmVsIGZpbGUgdGhhdCBzaG91bGRuJiMzOTt0XG4gXHRcdFx0XHQgICBhY2NvdW50IHVzYWdlIHRvIHVzZXIgY2dyb3VwcyAqL1xuJiM0MztcdEFTX0FVVEhPUklUQVRJVkUgPSAxMSxcdC8qIElmIHdlIG1pc3MgaW4gdGhlIHBhZ2UgY2FjaGUsIGl0JiMzOTtzIGEgaG9sZSAqL1xuIFx0LyogQml0cyAxNi0yNSBhcmUgdXNlZCBmb3IgRk9MSU9fT1JERVIgKi9cbiBcdEFTX0ZPTElPX09SREVSX0JJVFMgPSA1LFxuIFx0QVNfRk9MSU9fT1JERVJfTUlOID0gMTYsXG5AQCAtMzQ1LDYgJiM0MzszNDYsMTYgQEAgc3RhdGljIGlubGluZSBib29sIG1hcHBpbmdfd3JpdGViYWNrX21heV9kZWFkbG9ja19vbl9yZWNsYWltKGNvbnN0IHN0cnVjdCBhZGRyZXNcbiBcdHJldHVybiB0ZXN0X2JpdChBU19XUklURUJBQ0tfTUFZX0RFQURMT0NLX09OX1JFQ0xBSU0sIFx1MDAyNm1hcHBpbmctXHUwMDNlZmxhZ3MpO1xuIH1cbiBcbiYjNDM7c3RhdGljIGlubGluZSB2b2lkIG1hcHBpbmdfc2V0X2F1dGhvcml0YXRpdmUoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcpXG4mIzQzO3tcbiYjNDM7XHRzZXRfYml0KEFTX0FVVEhPUklUQVRJVkUsIFx1MDAyNm1hcHBpbmctXHUwMDNlZmxhZ3MpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgbWFwcGluZ19pc19hdXRob3JpdGF0aXZlKGNvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIHRlc3RfYml0KEFTX0FVVEhPUklUQVRJVkUsIFx1MDAyNm1hcHBpbmctXHUwMDNlZmxhZ3MpO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyBpbmxpbmUgZ2ZwX3QgbWFwcGluZ19nZnBfbWFzayhjb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZylcbiB7XG4gXHRyZXR1cm4gbWFwcGluZy1cdTAwM2VnZnBfbWFzaztcbkBAIC0zNzMsNyAmIzQzOzM4NCw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBtYXBwaW5nX3NldF9nZnBfbWFzayhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbSwgZ2ZwX3QgbWFzaylcbiAgKiBhc3N1bXB0aW9ucyBhYm91dCBtYXhpbXVtIG9yZGVyIGlmIFRIUCBhcmUgZGlzYWJsZWQsIGJ1dCA4IHNlZW1zIGxpa2VcbiAgKiBhIGdvb2Qgb3JkZXIgKHRoYXQmIzM5O3MgMU1CIGlmIHlvdSYjMzk7cmUgdXNpbmcgNGtCIHBhZ2VzKVxuICAqL1xuLSNpZmRlZiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VcbiYjNDM7I2lmZGVmIENPTkZJR19MQVJHRV9GT0xJT1xuICNkZWZpbmUgUFJFRkVSUkVEX01BWF9QQUdFQ0FDSEVfT1JERVJcdEhQQUdFX1BNRF9PUkRFUlxuICNlbHNlXG4gI2RlZmluZSBQUkVGRVJSRURfTUFYX1BBR0VDQUNIRV9PUkRFUlx0OFxuQEAgLTM5NCw3ICYjNDM7NDA1LDcgQEAgc3RhdGljIGlubGluZSB2b2lkIG1hcHBpbmdfc2V0X2dmcF9tYXNrKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptLCBnZnBfdCBtYXNrKVxuICAqL1xuIHN0YXRpYyBpbmxpbmUgc2l6ZV90IG1hcHBpbmdfbWF4X2ZvbGlvX3NpemVfc3VwcG9ydGVkKHZvaWQpXG4ge1xuLVx0aWYgKElTX0VOQUJMRUQoQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFKSlcbiYjNDM7XHRpZiAoSVNfRU5BQkxFRChDT05GSUdfTEFSR0VfRk9MSU8pKVxuIFx0XHRyZXR1cm4gMVUgXHUwMDNjXHUwMDNjIChQQUdFX1NISUZUICYjNDM7IE1BWF9QQUdFQ0FDSEVfT1JERVIpO1xuIFx0cmV0dXJuIFBBR0VfU0laRTtcbiB9XG5AQCAtNDA1LDI5ICYjNDM7NDE2LDIzIEBAIHN0YXRpYyBpbmxpbmUgc2l6ZV90IG1hcHBpbmdfbWF4X2ZvbGlvX3NpemVfc3VwcG9ydGVkKHZvaWQpXG4gICogQG1pbjogTWluaW11bSBmb2xpbyBvcmRlciAoYmV0d2VlbiAwLU1BWF9QQUdFQ0FDSEVfT1JERVIgaW5jbHVzaXZlKS5cbiAgKiBAbWF4OiBNYXhpbXVtIGZvbGlvIG9yZGVyIChiZXR3ZWVuIEBtaW4tTUFYX1BBR0VDQUNIRV9PUkRFUiBpbmNsdXNpdmUpLlxuICAqXG4tICogVGhlIGZpbGVzeXN0ZW0gc2hvdWxkIGNhbGwgdGhpcyBmdW5jdGlvbiBpbiBpdHMgaW5vZGUgY29uc3RydWN0b3IgdG9cbi0gKiBpbmRpY2F0ZSB3aGljaCBiYXNlIHNpemUgKG1pbikgYW5kIG1heGltdW0gc2l6ZSAobWF4KSBvZiBmb2xpbyB0aGUgVkZTXG4tICogY2FuIHVzZSB0byBjYWNoZSB0aGUgY29udGVudHMgb2YgdGhlIGZpbGUuICBUaGlzIHNob3VsZCBvbmx5IGJlIHVzZWRcbi0gKiBpZiB0aGUgZmlsZXN5c3RlbSBuZWVkcyBzcGVjaWFsIGhhbmRsaW5nIG9mIGZvbGlvIHNpemVzIChpZSB0aGVyZSBpc1xuLSAqIHNvbWV0aGluZyB0aGUgY29yZSBjYW5ub3Qga25vdykuXG4mIzQzOyAqIFRoZSBmaWxlc3lzdGVtIHNob3VsZCBjYWxsIHRoaXMgZnVuY3Rpb24gaW4gaXRzIGlub2RlIGNvbnN0cnVjdG9yXG4mIzQzOyAqIHRvIGluZGljYXRlIHdoaWNoIHNpemUgZm9saW9zIGNhbiBiZSB1c2VkIHRvIGNhY2hlIHRoZSBjb250ZW50cyBvZlxuJiM0MzsgKiB0aGUgaW5vZGUuICBUaGlzIHNob3VsZCBvbmx5IGJlIHVzZWQgaWYgdGhlIGZpbGVzeXN0ZW0gbmVlZHMgc3BlY2lhbFxuJiM0MzsgKiBoYW5kbGluZyBvZiBmb2xpbyBzaXplcyAoaWUgdGhlcmUgaXMgc29tZXRoaW5nIHRoZSBjb3JlIGNhbm5vdCBrbm93KS5cbiAgKiBEbyBub3QgdHVuZSBpdCBiYXNlZCBvbiwgZWcsIGlfc2l6ZS5cbiAgKlxuJiM0MzsgKiBodWdldGxiIGNhbGxzIHRoaXMgd2l0aCBvcmRlcnMgbGFyZ2VyIHRoYW4gTUFYX1BBR0VDQUNIRV9PUkRFUi5cbiYjNDM7ICogTm9ybWFsIGZpbGVzeXN0ZW1zIHNob3VsZCBub3QgZG8gdGhpcy5cbiYjNDM7ICpcbiAgKiBDb250ZXh0OiBUaGlzIHNob3VsZCBub3QgYmUgY2FsbGVkIHdoaWxlIHRoZSBpbm9kZSBpcyBhY3RpdmUgYXMgaXRcbiAgKiBpcyBub24tYXRvbWljLlxuICAqL1xuIHN0YXRpYyBpbmxpbmUgdm9pZCBtYXBwaW5nX3NldF9mb2xpb19vcmRlcl9yYW5nZShzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcbi1cdFx0XHRcdFx0XHQgdW5zaWduZWQgaW50IG1pbixcbi1cdFx0XHRcdFx0XHQgdW5zaWduZWQgaW50IG1heClcbiYjNDM7XHRcdHVuc2lnbmVkIGludCBtaW4sIHVuc2lnbmVkIGludCBtYXgpXG4ge1xuLVx0aWYgKCFJU19FTkFCTEVEKENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSkpXG4mIzQzO1x0aWYgKCFJU19FTkFCTEVEKENPTkZJR19MQVJHRV9GT0xJTykpXG4gXHRcdHJldHVybjtcbi1cbi1cdGlmIChtaW4gXHUwMDNlIE1BWF9QQUdFQ0FDSEVfT1JERVIpXG4tXHRcdG1pbiA9IE1BWF9QQUdFQ0FDSEVfT1JERVI7XG4tXG4tXHRpZiAobWF4IFx1MDAzZSBNQVhfUEFHRUNBQ0hFX09SREVSKVxuLVx0XHRtYXggPSBNQVhfUEFHRUNBQ0hFX09SREVSO1xuLVxuIFx0aWYgKG1heCBcdTAwM2MgbWluKVxuIFx0XHRtYXggPSBtaW47XG4gXG5AQCAtNDYwLDcgJiM0Mzs0NjUsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgbWFwcGluZ19zZXRfbGFyZ2VfZm9saW9zKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nKVxuIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50XG4gbWFwcGluZ19tYXhfZm9saW9fb3JkZXIoY29uc3Qgc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcpXG4ge1xuLVx0aWYgKCFJU19FTkFCTEVEKENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSkpXG4mIzQzO1x0aWYgKCFJU19FTkFCTEVEKENPTkZJR19MQVJHRV9GT0xJTykpXG4gXHRcdHJldHVybiAwO1xuIFx0cmV0dXJuIChtYXBwaW5nLVx1MDAzZWZsYWdzIFx1MDAyNiBBU19GT0xJT19PUkRFUl9NQVhfTUFTSykgXHUwMDNlXHUwMDNlIEFTX0ZPTElPX09SREVSX01BWDtcbiB9XG5AQCAtNDY4LDcgJiM0Mzs0NzMsNyBAQCBtYXBwaW5nX21heF9mb2xpb19vcmRlcihjb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZylcbiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludFxuIG1hcHBpbmdfbWluX2ZvbGlvX29yZGVyKGNvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nKVxuIHtcbi1cdGlmICghSVNfRU5BQkxFRChDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UpKVxuJiM0MztcdGlmICghSVNfRU5BQkxFRChDT05GSUdfTEFSR0VfRk9MSU8pKVxuIFx0XHRyZXR1cm4gMDtcbiBcdHJldHVybiAobWFwcGluZy1cdTAwM2VmbGFncyBcdTAwMjYgQVNfRk9MSU9fT1JERVJfTUlOX01BU0spIFx1MDAzZVx1MDAzZSBBU19GT0xJT19PUkRFUl9NSU47XG4gfVxuQEAgLTUyNCw3ICYjNDM7NTI5LDcgQEAgc3RhdGljIGlubGluZSBib29sIG1hcHBpbmdfbGFyZ2VfZm9saW9fc3VwcG9ydChjb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGlcbiAgKlxuICAqIFJldHVybjogVHJ1ZSBpZiBQTUQtc2l6ZWQgZm9saW9zIGFyZSBzdXBwb3J0ZWQsIG90aGVyd2lzZSBmYWxzZS5cbiAgKi9cbi0jaWZkZWYgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFXG4mIzQzOyNpZmRlZiBDT05GSUdfTEFSR0VfRk9MSU9cbiBzdGF0aWMgaW5saW5lIGJvb2wgbWFwcGluZ19wbWRfZm9saW9fc3VwcG9ydChjb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZylcbiB7XG4gXHQvKiBBU19GT0xJT19PUkRFUiBpcyBvbmx5IHJlYXNvbmFibGUgZm9yIHBhZ2VjYWNoZSBmb2xpb3MgKi9cbmRpZmYgLS1naXQgYS9tbS9LY29uZmlnIGIvbW0vS2NvbmZpZ1xuaW5kZXggOWUwY2E0ODI0OTA1NGYuLmU2NjZkZDE0Y2EwYzNkIDEwMDY0NFxuLS0tIGEvbW0vS2NvbmZpZ1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vS2NvbmZpZ1xuQEAgLTg0MywxMSAmIzQzOzg0MywxNSBAQCBjb25maWcgUEVSU0lTVEVOVF9IVUdFX1pFUk9fRk9MSU9cbiBjb25maWcgTU1fSURcbiBcdGRlZl9ib29sIG5cbiBcbiYjNDM7Y29uZmlnIExBUkdFX0ZPTElPXG4mIzQzO1x0ZGVmX2Jvb2wgblxuJiM0MztcdHNlbGVjdCBYQVJSQVlfTVVMVElcbiYjNDM7XG4gbWVudWNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRVxuIFx0Ym9vbCBcJiMzNDtUcmFuc3BhcmVudCBIdWdlcGFnZSBTdXBwb3J0XCYjMzQ7XG4gXHRkZXBlbmRzIG9uIEhBVkVfQVJDSF9UUkFOU1BBUkVOVF9IVUdFUEFHRSBcdTAwMjZcdTAwMjYgIVBSRUVNUFRfUlRcbiBcdHNlbGVjdCBDT01QQUNUSU9OXG4tXHRzZWxlY3QgWEFSUkFZX01VTFRJXG4mIzQzO1x0c2VsZWN0IExBUkdFX0ZPTElPXG4gXHRzZWxlY3QgTU1fSURcbiBcdGhlbHBcbiBcdCAgVHJhbnNwYXJlbnQgSHVnZXBhZ2VzIGFsbG93cyB0aGUga2VybmVsIHRvIHVzZSBodWdlIHBhZ2VzIGFuZFxuZGlmZiAtLWdpdCBhL21tL2ZpbGVtYXAuYyBiL21tL2ZpbGVtYXAuY1xuaW5kZXggNThlYjlkMjQwNjQzNDguLjVhOGNjMjBlNjI0ZTRkIDEwMDY0NFxuLS0tIGEvbW0vZmlsZW1hcC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9maWxlbWFwLmNcbkBAIC0yNDgzLDYgJiM0MzsyNDgzLDggQEAgc3RhdGljIHZvaWQgZmlsZW1hcF9nZXRfcmVhZF9iYXRjaChzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcbiBcbiBcdFx0aWYgKCFmb2xpb19iYXRjaF9hZGQoZmJhdGNoLCBmb2xpbykpXG4gXHRcdFx0YnJlYWs7XG4mIzQzO1x0XHRpZiAoZm9saW9faGFzX2h3cG9pc29uZWRfcGFnZShmb2xpbykpXG4mIzQzO1x0XHRcdGJyZWFrO1xuIFx0XHRpZiAoIWZvbGlvX3Rlc3RfdXB0b2RhdGUoZm9saW8pKVxuIFx0XHRcdGJyZWFrO1xuIFx0XHRpZiAoZm9saW9fdGVzdF9yZWFkYWhlYWQoZm9saW8pKVxuQEAgLTI2OTUsNiAmIzQzOzI2OTcsOCBAQCBzdGF0aWMgaW50IGZpbGVtYXBfZ2V0X3BhZ2VzKHN0cnVjdCBraW9jYiAqaW9jYiwgc2l6ZV90IGNvdW50LFxuIFx0aWYgKCFmb2xpb19iYXRjaF9jb3VudChmYmF0Y2gpKSB7XG4gXHRcdERFRklORV9SRUFEQUhFQUQocmFjdGwsIGZpbHAsIFx1MDAyNmZpbHAtXHUwMDNlZl9yYSwgbWFwcGluZywgaW5kZXgpO1xuIFxuJiM0MztcdFx0aWYgKG1hcHBpbmdfaXNfYXV0aG9yaXRhdGl2ZShtYXBwaW5nKSlcbiYjNDM7XHRcdFx0cmV0dXJuIDA7XG4gXHRcdGlmIChpb2NiLVx1MDAzZWtpX2ZsYWdzIFx1MDAyNiBJT0NCX05PSU8pXG4gXHRcdFx0cmV0dXJuIC1FQUdBSU47XG4gXHRcdGlmIChpb2NiLVx1MDAzZWtpX2ZsYWdzIFx1MDAyNiBJT0NCX05PV0FJVClcbkBAIC0yNzQ5LDYgJiM0MzsyNzUzLDI5IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBwb3Nfc2FtZV9mb2xpbyhsb2ZmX3QgcG9zMSwgbG9mZl90IHBvczIsIHN0cnVjdCBmb2xpbyAqZm9saW8pXG4gXHRyZXR1cm4gKHBvczEgXHUwMDNlXHUwMDNlIHNoaWZ0ID09IHBvczIgXHUwMDNlXHUwMDNlIHNoaWZ0KTtcbiB9XG4gXG4mIzQzO3N0YXRpYyBzaXplX3QgYWRqdXN0X3JhbmdlX2h3cG9pc29uKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8sIHNpemVfdCBvZmZzZXQsXG4mIzQzO1x0XHRzaXplX3QgYnl0ZXMpXG4mIzQzO3tcbiYjNDM7XHRjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSA9IGZvbGlvX3BhZ2UoZm9saW8sIG9mZnNldCAvIFBBR0VfU0laRSk7XG4mIzQzO1x0c2l6ZV90IHNhZmVfYnl0ZXM7XG4mIzQzO1xuJiM0MztcdGlmICghZm9saW9faGFzX2h3cG9pc29uZWRfcGFnZShmb2xpbykpXG4mIzQzO1x0XHRyZXR1cm4gYnl0ZXM7XG4mIzQzO1x0aWYgKGlzX3JlZl9wYWdlX2h3cG9pc29uKGZvbGlvLCBwYWdlKSlcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7XHQvKiBTYWZlIHRvIHJlYWQgdGhlIHJlbWFpbmluZyBieXRlcyBpbiB0aGlzIHBhZ2UuICovXG4mIzQzO1x0c2FmZV9ieXRlcyA9IFBBR0VfU0laRSAtIChvZmZzZXQgJSBQQUdFX1NJWkUpO1xuJiM0MztcdHBhZ2UmIzQzOyYjNDM7O1xuJiM0MztcbiYjNDM7XHQvKiBDaGVjayBlYWNoIHJlbWFpbmluZyBwYWdlIGFzIGxvbmcgYXMgd2UgYXJlIG5vdCBkb25lIHlldC4gKi9cbiYjNDM7XHRmb3IgKDsgc2FmZV9ieXRlcyBcdTAwM2MgYnl0ZXM7IHNhZmVfYnl0ZXMgJiM0Mzs9IFBBR0VfU0laRSwgcGFnZSYjNDM7JiM0MzspXG4mIzQzO1x0XHRpZiAoaXNfcmVmX3BhZ2VfaHdwb2lzb24oZm9saW8sIHBhZ2UpKVxuJiM0MztcdFx0XHRicmVhaztcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIG1pbihzYWZlX2J5dGVzLCBieXRlcyk7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIHZvaWQgZmlsZW1hcF9lbmRfZHJvcGJlaGluZF9yZWFkKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4ge1xuIFx0aWYgKCFmb2xpb190ZXN0X2Ryb3BiZWhpbmQoZm9saW8pKVxuQEAgLTI4MjgsNiAmIzQzOzI4NTUsMjIgQEAgc3NpemVfdCBmaWxlbWFwX3JlYWQoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsXG4gXHRcdFx0Z290byBwdXRfZm9saW9zO1xuIFx0XHRlbmRfb2Zmc2V0ID0gbWluX3QobG9mZl90LCBpc2l6ZSwgaW9jYi1cdTAwM2VraV9wb3MgJiM0MzsgaXRlci1cdTAwM2Vjb3VudCk7XG4gXG4mIzQzO1x0XHRpZiAoIWZvbGlvX2JhdGNoX2NvdW50KFx1MDAyNmZiYXRjaCkpIHtcbiYjNDM7XHRcdFx0c2l6ZV90IGZzaXplID0gbWFwcGluZ19taW5fZm9saW9fbnJieXRlcyhtYXBwaW5nKTtcbiYjNDM7XHRcdFx0c2l6ZV90IG9mZnNldCA9IGlvY2ItXHUwMDNla2lfcG9zIFx1MDAyNiAoZnNpemUgLSAxKTtcbiYjNDM7XHRcdFx0c2l6ZV90IGJ5dGVzID0gbWluX3QobG9mZl90LCBlbmRfb2Zmc2V0IC0gaW9jYi1cdTAwM2VraV9wb3MsXG4mIzQzO1x0XHRcdFx0XHQgICAgIGZzaXplIC0gb2Zmc2V0KTtcbiYjNDM7XHRcdFx0c2l6ZV90IGNvcGllZCA9IGlvdl9pdGVyX3plcm8oYnl0ZXMsIGl0ZXIpO1xuJiM0MztcbiYjNDM7XHRcdFx0YWxyZWFkeV9yZWFkICYjNDM7PSBjb3BpZWQ7XG4mIzQzO1x0XHRcdGlvY2ItXHUwMDNla2lfcG9zICYjNDM7PSBjb3BpZWQ7XG4mIzQzO1x0XHRcdGxhc3RfcG9zID0gaW9jYi1cdTAwM2VraV9wb3M7XG4mIzQzO1xuJiM0MztcdFx0XHRpZiAoY29waWVkIFx1MDAzYyBieXRlcylcbiYjNDM7XHRcdFx0XHRlcnJvciA9IC1FRkFVTFQ7XG4mIzQzO1x0XHRcdGNvbnRpbnVlO1xuJiM0MztcdFx0fVxuJiM0MztcbiBcdFx0LypcbiBcdFx0ICogT25jZSB3ZSBzdGFydCBjb3B5aW5nIGRhdGEsIHdlIGRvbiYjMzk7dCB3YW50IHRvIGJlIHRvdWNoaW5nIGFueVxuIFx0XHQgKiBjYWNoZWxpbmVzIHRoYXQgbWlnaHQgYmUgY29udGVuZGVkOlxuQEAgLTI4NjIsMTQgJiM0MzsyOTA1LDE4IEBAIHNzaXplX3QgZmlsZW1hcF9yZWFkKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICppdGVyLFxuIFx0XHRcdGlmICh3cml0YWJseV9tYXBwZWQpXG4gXHRcdFx0XHRmbHVzaF9kY2FjaGVfZm9saW8oZm9saW8pO1xuIFxuLVx0XHRcdGNvcGllZCA9IGNvcHlfZm9saW9fdG9faXRlcihmb2xpbywgb2Zmc2V0LCBieXRlcywgaXRlcik7XG4mIzQzO1x0XHRcdGNvcGllZCA9IGFkanVzdF9yYW5nZV9od3BvaXNvbihmb2xpbywgb2Zmc2V0LCBieXRlcyk7XG4mIzQzO1x0XHRcdGlmIChjb3BpZWQgXHUwMDNjIGJ5dGVzKVxuJiM0MztcdFx0XHRcdGVycm9yID0gLUVJTztcbiYjNDM7XHRcdFx0Y29waWVkID0gY29weV9mb2xpb190b19pdGVyKGZvbGlvLCBvZmZzZXQsIGNvcGllZCwgaXRlcik7XG4gXG4gXHRcdFx0YWxyZWFkeV9yZWFkICYjNDM7PSBjb3BpZWQ7XG4gXHRcdFx0aW9jYi1cdTAwM2VraV9wb3MgJiM0Mzs9IGNvcGllZDtcbiBcdFx0XHRsYXN0X3BvcyA9IGlvY2ItXHUwMDNla2lfcG9zO1xuIFxuIFx0XHRcdGlmIChjb3BpZWQgXHUwMDNjIGJ5dGVzKSB7XG4tXHRcdFx0XHRlcnJvciA9IC1FRkFVTFQ7XG4mIzQzO1x0XHRcdFx0aWYgKCFlcnJvcilcbiYjNDM7XHRcdFx0XHRcdGVycm9yID0gLUVGQVVMVDtcbiBcdFx0XHRcdGJyZWFrO1xuIFx0XHRcdH1cbiBcdFx0fVxuZGlmZiAtLWdpdCBhL21tL2h1Z2VfbWVtb3J5LmMgYi9tbS9odWdlX21lbW9yeS5jXG5pbmRleCAyYmNjYjBhNTNhMGE2MC4uMzUzMzQwMzA5MTA3NGMgMTAwNjQ0XG4tLS0gYS9tbS9odWdlX21lbW9yeS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9odWdlX21lbW9yeS5jXG5AQCAtNDQxMyw3ICYjNDM7NDQxMyw3IEBAIHN0YXRpYyBib29sIHRocF91bmRlcnVzZWQoc3RydWN0IGZvbGlvICpmb2xpbylcbiBcdGlmIChraHVnZXBhZ2VkX21heF9wdGVzX25vbmUgPT0gSFBBR0VfUE1EX05SIC0gMSlcbiBcdFx0cmV0dXJuIGZhbHNlO1xuIFxuLVx0aWYgKGZvbGlvX2NvbnRhaW5faHdwb2lzb25lZF9wYWdlKGZvbGlvKSlcbiYjNDM7XHRpZiAoZm9saW9faGFzX2h3cG9pc29uZWRfcGFnZShmb2xpbykpXG4gXHRcdHJldHVybiBmYWxzZTtcbiBcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGZvbGlvX25yX3BhZ2VzKGZvbGlvKTsgaSYjNDM7JiM0MzspIHtcbmRpZmYgLS1naXQgYS9tbS9odWdldGxiLmMgYi9tbS9odWdldGxiLmNcbmluZGV4IDU3MTIxMmI4MDgzNWVjLi5hYWFjNmUyYWY0YzI0YSAxMDA2NDRcbi0tLSBhL21tL2h1Z2V0bGIuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vaHVnZXRsYi5jXG5AQCAtMTI1NSw3ICYjNDM7MTI1NSw3IEBAIHN0YXRpYyBzdHJ1Y3QgZm9saW8gKmRlcXVldWVfaHVnZXRsYl9mb2xpb19ub2RlX2V4YWN0KHN0cnVjdCBoc3RhdGUgKmgsXG4gXHRcdGlmIChwaW4gXHUwMDI2XHUwMDI2ICFmb2xpb19pc19sb25ndGVybV9waW5uYWJsZShmb2xpbykpXG4gXHRcdFx0Y29udGludWU7XG4gXG4tXHRcdGlmIChmb2xpb190ZXN0X2h3cG9pc29uKGZvbGlvKSlcbiYjNDM7XHRcdGlmIChmb2xpb190ZXN0X2hhc19od3BvaXNvbmVkKGZvbGlvKSlcbiBcdFx0XHRjb250aW51ZTtcbiBcbiBcdFx0aWYgKGlzX21pZ3JhdGVfaXNvbGF0ZV9wYWdlKFx1MDAyNmZvbGlvLVx1MDAzZXBhZ2UpKVxuQEAgLTE0OTgsMTAgJiM0MzsxNDk4LDEwIEBAIHN0YXRpYyB2b2lkIF9fdXBkYXRlX2FuZF9mcmVlX2h1Z2V0bGJfZm9saW8oc3RydWN0IGhzdGF0ZSAqaCxcbiBcdH1cbiBcbiBcdC8qXG4tXHQgKiBNb3ZlIFBhZ2VIV1BvaXNvbiBmbGFnIGZyb20gaGVhZCBwYWdlIHRvIHRoZSByYXcgZXJyb3IgcGFnZXMsXG4tXHQgKiB3aGljaCBtYWtlcyBhbnkgaGVhbHRoeSBzdWJwYWdlcyByZXVzYWJsZS5cbiYjNDM7XHQgKiBNb3ZlIEhXUG9pc29uIGZsYWcgdG8gZWFjaCBlcnJvciBwYWdlXG4mIzQzO1x0ICogd2hpY2ggbWFrZXMgYW55IGhlYWx0aHkgcGFnZXMgcmV1c2FibGUuXG4gXHQgKi9cbi1cdGlmICh1bmxpa2VseShmb2xpb190ZXN0X2h3cG9pc29uKGZvbGlvKSkpXG4mIzQzO1x0aWYgKHVubGlrZWx5KGZvbGlvX3Rlc3RfaGFzX2h3cG9pc29uZWQoZm9saW8pKSlcbiBcdFx0Zm9saW9fY2xlYXJfaHVnZXRsYl9od3BvaXNvbihmb2xpbyk7XG4gXG4gXHRWTV9CVUdfT05fRk9MSU8oZm9saW9fcmVmX2NvdW50KGZvbGlvKSwgZm9saW8pO1xuQEAgLTE3NzUsNyAmIzQzOzE3NzUsNyBAQCB2b2lkIGluaXRfbmV3X2h1Z2V0bGJfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbylcbiAgKiBzdGFibGUuICBEdWUgdG8gbG9ja2luZyBvcmRlciwgd2UgY2FuIG9ubHkgdHJ5bG9ja193cml0ZS4gIElmIHdlIGNhblxuICAqIG5vdCBnZXQgdGhlIGxvY2ssIHNpbXBseSByZXR1cm4gTlVMTCB0byBjYWxsZXIuXG4gICovXG4tc3RydWN0IGFkZHJlc3Nfc3BhY2UgKmh1Z2V0bGJfZm9saW9fbWFwcGluZ19sb2NrX3dyaXRlKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4mIzQzO3N0cnVjdCBhZGRyZXNzX3NwYWNlICpodWdldGxiX2ZvbGlvX21hcHBpbmdfbG9ja193cml0ZShjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIHtcbiBcdHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nID0gZm9saW9fbWFwcGluZyhmb2xpbyk7XG4gXG5AQCAtMzk5OCw3ICYjNDM7Mzk5OCw3IEBAIGxvbmcgZGVtb3RlX3Bvb2xfaHVnZV9wYWdlKHN0cnVjdCBoc3RhdGUgKnNyYywgbm9kZW1hc2tfdCAqbm9kZXNfYWxsb3dlZCxcbiBcdFx0c3RydWN0IGZvbGlvICpmb2xpbywgKm5leHQ7XG4gXG4gXHRcdGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShmb2xpbywgbmV4dCwgXHUwMDI2c3JjLVx1MDAzZWh1Z2VwYWdlX2ZyZWVsaXN0c1tub2RlXSwgbHJ1KSB7XG4tXHRcdFx0aWYgKGZvbGlvX3Rlc3RfaHdwb2lzb24oZm9saW8pKVxuJiM0MztcdFx0XHRpZiAoZm9saW9fdGVzdF9oYXNfaHdwb2lzb25lZChmb2xpbykpXG4gXHRcdFx0XHRjb250aW51ZTtcbiBcbiBcdFx0XHRyZW1vdmVfaHVnZXRsYl9mb2xpbyhzcmMsIGZvbGlvLCBmYWxzZSk7XG5AQCAtNTgwOSw3ICYjNDM7NTgwOSw3IEBAIHN0YXRpYyB2bV9mYXVsdF90IGh1Z2V0bGJfbm9fcGFnZShzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcbiBcdFx0ICogZG9uJiMzOTt0IGhhdmUgaHdwb2lzb25lZCBzd2FwIGVudHJ5IGZvciBlcnJvcmVkIHZpcnR1YWwgYWRkcmVzcy5cbiBcdFx0ICogU28gd2UgbmVlZCB0byBibG9jayBodWdlcGFnZSBmYXVsdCBieSBQR19od3BvaXNvbiBiaXQgY2hlY2suXG4gXHRcdCAqL1xuLVx0XHRpZiAodW5saWtlbHkoZm9saW9fdGVzdF9od3BvaXNvbihmb2xpbykpKSB7XG4mIzQzO1x0XHRpZiAodW5saWtlbHkoZm9saW9fdGVzdF9oYXNfaHdwb2lzb25lZChmb2xpbykpKSB7XG4gXHRcdFx0cmV0ID0gVk1fRkFVTFRfSFdQT0lTT05fTEFSR0UgfFxuIFx0XHRcdFx0Vk1fRkFVTFRfU0VUX0hJTkRFWChoc3RhdGVfaW5kZXgoaCkpO1xuIFx0XHRcdGdvdG8gYmFja291dF91bmxvY2tlZDtcbkBAIC02MzE4LDcgJiM0Mzs2MzE4LDcgQEAgaW50IGh1Z2V0bGJfbWZpbGxfYXRvbWljX3B0ZShwdGVfdCAqZHN0X3B0ZSxcbiBcdHB0bCA9IGh1Z2VfcHRlX2xvY2soaCwgZHN0X21tLCBkc3RfcHRlKTtcbiBcbiBcdHJldCA9IC1FSU87XG4tXHRpZiAoZm9saW9fdGVzdF9od3BvaXNvbihmb2xpbykpXG4mIzQzO1x0aWYgKGZvbGlvX3Rlc3RfaGFzX2h3cG9pc29uZWQoZm9saW8pKVxuIFx0XHRnb3RvIG91dF9yZWxlYXNlX3VubG9jaztcbiBcbiBcdHJldCA9IC1FRVhJU1Q7XG5kaWZmIC0tZ2l0IGEvbW0vbWVtb3J5LWZhaWx1cmUuYyBiL21tL21lbW9yeS1mYWlsdXJlLmNcbmluZGV4IDUxNTA4YTU1YzQwNTVlLi4zMmY5MTkzNWIyMTA3MCAxMDA2NDRcbi0tLSBhL21tL21lbW9yeS1mYWlsdXJlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL21lbW9yeS1mYWlsdXJlLmNcbkBAIC0xODA4LDYzICYjNDM7MTgwOCw4NiBAQCBFWFBPUlRfU1lNQk9MX0dQTChtZl9kYXhfa2lsbF9wcm9jcyk7XG4gXG4gI2lmZGVmIENPTkZJR19IVUdFVExCX1BBR0VcbiBcbiYjNDM7LyogUHJvdGVjdHMgYWxsIGxpc3RzIG9mIGh3cF9wYWdlcyAqL1xuJiM0MztzdGF0aWMgREVGSU5FX1NQSU5MT0NLKGh3cF9wYWdlX2xvY2spO1xuJiM0MztcbiAvKlxuLSAqIFN0cnVjdCByYXdfaHdwX3BhZ2UgcmVwcmVzZW50cyBpbmZvcm1hdGlvbiBhYm91dCBcJiMzNDtyYXcgZXJyb3IgcGFnZVwmIzM0Oyxcbi0gKiBjb25zdHJ1Y3Rpbmcgc2luZ2x5IGxpbmtlZCBsaXN0IGZyb20gLVx1MDAzZV9odWdldGxiX2h3cG9pc29uIGZpZWxkIG9mIGZvbGlvLlxuJiM0MzsgKiBod3BfcGFnZSByZXByZXNlbnRzIGluZm9ybWF0aW9uIGFib3V0IFwmIzM0O2Vycm9yIHBhZ2VcJiMzNDssXG4mIzQzOyAqIGNvbnN0cnVjdGluZyBzaW5nbHkgbGlua2VkIGxpc3QgZnJvbSBmb2xpby1cdTAwM2VodWdldGxiX2h3cG9pc29uIGZpZWxkLlxuICAqL1xuLXN0cnVjdCByYXdfaHdwX3BhZ2Uge1xuLVx0c3RydWN0IGxsaXN0X25vZGUgbm9kZTtcbiYjNDM7c3RydWN0IGh3cF9wYWdlIHtcbiYjNDM7XHRzdHJ1Y3QgaHdwX3BhZ2UgKm5leHQ7XG4gXHRzdHJ1Y3QgcGFnZSAqcGFnZTtcbiB9O1xuIFxuLXN0YXRpYyBpbmxpbmUgc3RydWN0IGxsaXN0X2hlYWQgKnJhd19od3BfbGlzdF9oZWFkKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4mIzQzO3N0YXRpYyBib29sIHByZWNpc2VfcGFnZV9wb2lzb25lZChjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuJiM0MztcdFx0Y29uc3Qgc3RydWN0IHBhZ2UgKnBhZ2UpXG4ge1xuLVx0cmV0dXJuIChzdHJ1Y3QgbGxpc3RfaGVhZCAqKVx1MDAyNmZvbGlvLVx1MDAzZV9odWdldGxiX2h3cG9pc29uO1xuLX1cbi1cbi1ib29sIGlzX3Jhd19od3BvaXNvbl9wYWdlX2luX2h1Z2VwYWdlKHN0cnVjdCBwYWdlICpwYWdlKVxuLXtcbi1cdHN0cnVjdCBsbGlzdF9oZWFkICpyYXdfaHdwX2hlYWQ7XG4tXHRzdHJ1Y3QgcmF3X2h3cF9wYWdlICpwO1xuLVx0c3RydWN0IGZvbGlvICpmb2xpbyA9IHBhZ2VfZm9saW8ocGFnZSk7XG4tXHRib29sIHJldCA9IGZhbHNlO1xuLVxuLVx0aWYgKCFmb2xpb190ZXN0X2h3cG9pc29uKGZvbGlvKSlcbi1cdFx0cmV0dXJuIGZhbHNlO1xuLVxuLVx0aWYgKCFmb2xpb190ZXN0X2h1Z2V0bGIoZm9saW8pKVxuLVx0XHRyZXR1cm4gUGFnZUhXUG9pc29uKHBhZ2UpO1xuJiM0MztcdGNvbnN0IHN0cnVjdCBod3BfcGFnZSAqcDtcbiYjNDM7XHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuIFxuIFx0Lypcbi1cdCAqIFdoZW4gUmF3SHdwVW5yZWxpYWJsZSBpcyBzZXQsIGtlcm5lbCBsb3N0IHRyYWNrIG9mIHdoaWNoIHN1YnBhZ2VzXG4tXHQgKiBhcmUgSFdQT0lTT04uIFNvIHJldHVybiBhcyBpZiBBTEwgc3VicGFnZXMgYXJlIEhXUE9JU09OZWQuXG4mIzQzO1x0ICogV2hlbiBSYXdId3BVbnJlbGlhYmxlIGlzIHNldCwga2VybmVsIGxvc3QgdHJhY2sgb2Ygd2hpY2ggcGFnZXNcbiYjNDM7XHQgKiBhcmUgSFdQT0lTT04uIFNvIHJldHVybiBhcyBpZiBBTEwgcGFnZXMgYXJlIEhXUE9JU09OZWQuXG4gXHQgKi9cbiBcdGlmIChmb2xpb190ZXN0X2h1Z2V0bGJfcmF3X2h3cF91bnJlbGlhYmxlKGZvbGlvKSlcbiBcdFx0cmV0dXJuIHRydWU7XG4gXG4tXHRtdXRleF9sb2NrKFx1MDAyNm1mX211dGV4KTtcbi1cbi1cdHJhd19od3BfaGVhZCA9IHJhd19od3BfbGlzdF9oZWFkKGZvbGlvKTtcbi1cdGxsaXN0X2Zvcl9lYWNoX2VudHJ5KHAsIHJhd19od3BfaGVhZC1cdTAwM2VmaXJzdCwgbm9kZSkge1xuLVx0XHRpZiAocGFnZSA9PSBwLVx1MDAzZXBhZ2UpIHtcbi1cdFx0XHRyZXQgPSB0cnVlO1xuJiM0MztcdHNwaW5fbG9ja19pcnFzYXZlKFx1MDAyNmh3cF9wYWdlX2xvY2ssIGZsYWdzKTtcbiYjNDM7XHRmb3IgKHAgPSBmb2xpby1cdTAwM2VodWdldGxiX2h3cG9pc29uOyBwOyBwID0gcC1cdTAwM2VuZXh0KSB7XG4mIzQzO1x0XHRpZiAocGFnZSA9PSBwLVx1MDAzZXBhZ2UpXG4gXHRcdFx0YnJlYWs7XG4tXHRcdH1cbiBcdH1cbiYjNDM7XHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNmh3cF9wYWdlX2xvY2ssIGZsYWdzKTtcbiBcbi1cdG11dGV4X3VubG9jayhcdTAwMjZtZl9tdXRleCk7XG4mIzQzO1x0cmV0dXJuIHAgIT0gTlVMTDtcbiYjNDM7fVxuIFxuJiM0MzsvKlxuJiM0MzsgKiBDaGVjayBpZiBhIGdpdmVuIEBwYWdlIGluIGEgaHVnZXRsYiBmb2xpbyBpcyBIV1BPSVNPTi5cbiYjNDM7ICovXG4mIzQzO2Jvb2wgaHVnZXRsYl9wYWdlX2h3cG9pc29uKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8sIGNvbnN0IHN0cnVjdCBwYWdlICpwYWdlKVxuJiM0Mzt7XG4mIzQzO1x0aWYgKCFmb2xpb190ZXN0X2hhc19od3BvaXNvbmVkKGZvbGlvKSlcbiYjNDM7XHRcdHJldHVybiBmYWxzZTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHByZWNpc2VfcGFnZV9wb2lzb25lZChmb2xpbywgcGFnZSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qXG4mIzQzOyAqIFdlIGhhdmUgbm8gcmVmZXJlbmNlIG9uIHRoZSBmb2xpbyBjb250YWluaW5nIHRoaXMgcGFnZS5cbiYjNDM7ICogVGhlIGh1Z2V0bGJfbG9jayBrZWVwcyBodWdldGxiIGZvbGlvcyBmcm9tIGJlaW5nIGZyZWVkLlxuJiM0MzsgKi9cbiYjNDM7Ym9vbCBodWdldGxiX3VucmVmX3BhZ2VfaHdwb2lzb24oY29uc3Qgc3RydWN0IHBhZ2UgKnBhZ2UpXG4mIzQzO3tcbiYjNDM7XHRjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvO1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4mIzQzO1x0Ym9vbCByZXQ7XG4mIzQzO1xuJiM0MztcdHNwaW5fbG9ja19pcnFzYXZlKFx1MDAyNmh1Z2V0bGJfbG9jaywgZmxhZ3MpO1xuJiM0MztcdGZvbGlvID0gcGFnZV9mb2xpbyhwYWdlKTtcbiYjNDM7XHRpZiAoIWZvbGlvX3Rlc3RfaHVnZV9wb2lzb24oZm9saW8pKSB7XG4mIzQzO1x0XHRyZXQgPSBQYWdlSFdQb2lzb24ocGFnZSk7XG4mIzQzO1x0XHRnb3RvIHVubG9jaztcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldCA9IHByZWNpc2VfcGFnZV9wb2lzb25lZChmb2xpbywgcGFnZSk7XG4mIzQzO3VubG9jazpcbiYjNDM7XHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNmh1Z2V0bGJfbG9jaywgZmxhZ3MpO1xuIFx0cmV0dXJuIHJldDtcbiB9XG4gXG4gc3RhdGljIHVuc2lnbmVkIGxvbmcgX19mb2xpb19mcmVlX3Jhd19od3Aoc3RydWN0IGZvbGlvICpmb2xpbywgYm9vbCBtb3ZlX2ZsYWcpXG4ge1xuLVx0c3RydWN0IGxsaXN0X25vZGUgKmhlYWQ7XG4tXHRzdHJ1Y3QgcmF3X2h3cF9wYWdlICpwLCAqbmV4dDtcbiYjNDM7XHRzdHJ1Y3QgaHdwX3BhZ2UgKnAsICpuZXh0O1xuIFx0dW5zaWduZWQgbG9uZyBjb3VudCA9IDA7XG4gXG4tXHRoZWFkID0gbGxpc3RfZGVsX2FsbChyYXdfaHdwX2xpc3RfaGVhZChmb2xpbykpO1xuLVx0bGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShwLCBuZXh0LCBoZWFkLCBub2RlKSB7XG4mIzQzO1x0bmV4dCA9IGZvbGlvLVx1MDAzZWh1Z2V0bGJfaHdwb2lzb247XG4mIzQzO1x0Zm9saW8tXHUwMDNlaHVnZXRsYl9od3BvaXNvbiA9IE5VTEw7XG4mIzQzO1xuJiM0MztcdHdoaWxlIChuZXh0KSB7XG4mIzQzO1x0XHRwID0gbmV4dDtcbiYjNDM7XHRcdG5leHQgPSBwLVx1MDAzZW5leHQ7XG4gXHRcdGlmIChtb3ZlX2ZsYWcpXG4gXHRcdFx0U2V0UGFnZUhXUG9pc29uKHAtXHUwMDNlcGFnZSk7XG4gXHRcdGVsc2VcbkBAIC0xODgxLDM0ICYjNDM7MTkwNCw1OCBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBfX2ZvbGlvX2ZyZWVfcmF3X2h3cChzdHJ1Y3QgZm9saW8gKmZvbGlvLCBib29sIG1vdmVfZmxhZylcbiAjZGVmaW5lXHRNRl9IVUdFVExCX0ZPTElPX1BSRV9QT0lTT05FRFx0M1x0LyogZm9saW8gYWxyZWFkeSBwb2lzb25lZCAqL1xuICNkZWZpbmVcdE1GX0hVR0VUTEJfUEFHRV9QUkVfUE9JU09ORURcdDRcdC8qIGV4YWN0IHBhZ2UgYWxyZWFkeSBwb2lzb25lZCAqL1xuICNkZWZpbmVcdE1GX0hVR0VUTEJfUkVUUllcdFx0NVx0LyogaHVnZXBhZ2UgaXMgYnVzeSwgcmV0cnkgKi9cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbmxpbmUgaW50IGh1Z2V0bGJfc2V0X3BvaXNvbihzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuJiM0Mzt7XG4mIzQzO1x0aWYgKGZvbGlvX3Rlc3Rfc2V0X2hhc19od3BvaXNvbmVkKGZvbGlvKSlcbiYjNDM7XHRcdHJldHVybiBNRl9IVUdFVExCX0ZPTElPX1BSRV9QT0lTT05FRDtcbiYjNDM7XHRmb2xpb19zZXRfaHVnZV9wb2lzb24oZm9saW8pO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW5saW5lIGludCBodWdldGxiX2NsZWFyX3BvaXNvbihzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuJiM0Mzt7XG4mIzQzO1x0aWYgKCFmb2xpb190ZXN0X2hhc19od3BvaXNvbmVkKGZvbGlvKSlcbiYjNDM7XHRcdHJldHVybiAtRUJVU1k7XG4mIzQzO1x0Zm9saW9fY2xlYXJfaHVnZV9wb2lzb24oZm9saW8pO1xuJiM0MztcdGZvbGlvX2NsZWFyX2hhc19od3BvaXNvbmVkKGZvbGlvKTtcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiAvKlxuICAqIFNldCBodWdldGxiIGZvbGlvIGFzIGh3cG9pc29uZWQsIHVwZGF0ZSBmb2xpbyBwcml2YXRlIHJhdyBod3BvaXNvbiBsaXN0XG4gICogdG8ga2VlcCB0cmFjayBvZiB0aGUgcG9pc29uZWQgcGFnZXMuXG4gICovXG4gc3RhdGljIGludCBodWdldGxiX3VwZGF0ZV9od3BvaXNvbihzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgcGFnZSAqcGFnZSlcbiB7XG4tXHRzdHJ1Y3QgbGxpc3RfaGVhZCAqaGVhZDtcbi1cdHN0cnVjdCByYXdfaHdwX3BhZ2UgKnJhd19od3A7XG4tXHRzdHJ1Y3QgcmF3X2h3cF9wYWdlICpwO1xuLVx0aW50IHJldCA9IGZvbGlvX3Rlc3Rfc2V0X2h3cG9pc29uKGZvbGlvKSA/IE1GX0hVR0VUTEJfRk9MSU9fUFJFX1BPSVNPTkVEIDogMDtcbiYjNDM7XHRzdHJ1Y3QgaHdwX3BhZ2UgKnA7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBmbGFncztcbiYjNDM7XHRpbnQgcmV0ID0gaHVnZXRsYl9zZXRfcG9pc29uKGZvbGlvKTtcbiBcbiBcdC8qXG4gXHQgKiBPbmNlIHRoZSBod3BvaXNvbiBodWdlcGFnZSBoYXMgbG9zdCByZWxpYWJsZSByYXcgZXJyb3IgaW5mbyxcbi1cdCAqIHRoZXJlIGlzIGxpdHRsZSBtZWFuaW5nIHRvIGtlZXAgYWRkaXRpb25hbCBlcnJvciBpbmZvIHByZWNpc2VseSxcbi1cdCAqIHNvIHNraXAgdG8gYWRkIGFkZGl0aW9uYWwgcmF3IGVycm9yIGluZm8uXG4mIzQzO1x0ICogdGhlcmUgaXMgbm8gcG9pbnQgaW4ga2VlcGluZyBhZGRpdGlvbmFsIGVycm9yIGluZm8gcHJlY2lzZWx5LFxuJiM0MztcdCAqIHNvIHNraXAgYWRkaW5nIGFkZGl0aW9uYWwgcmF3IGVycm9yIGluZm8uXG4gXHQgKi9cbiBcdGlmIChmb2xpb190ZXN0X2h1Z2V0bGJfcmF3X2h3cF91bnJlbGlhYmxlKGZvbGlvKSlcbiBcdFx0cmV0dXJuIE1GX0hVR0VUTEJfRk9MSU9fUFJFX1BPSVNPTkVEO1xuLVx0aGVhZCA9IHJhd19od3BfbGlzdF9oZWFkKGZvbGlvKTtcbi1cdGxsaXN0X2Zvcl9lYWNoX2VudHJ5KHAsIGhlYWQtXHUwMDNlZmlyc3QsIG5vZGUpIHtcbiYjNDM7XG4mIzQzO1x0c3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2aHdwX3BhZ2VfbG9jaywgZmxhZ3MpO1xuJiM0MztcdGZvciAocCA9IGZvbGlvLVx1MDAzZWh1Z2V0bGJfaHdwb2lzb247IHA7IHAgPSBwLVx1MDAzZW5leHQpIHtcbiBcdFx0aWYgKHAtXHUwMDNlcGFnZSA9PSBwYWdlKVxuLVx0XHRcdHJldHVybiBNRl9IVUdFVExCX1BBR0VfUFJFX1BPSVNPTkVEO1xuJiM0MztcdFx0XHRicmVhaztcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmIChwKSB7XG4mIzQzO1x0XHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNmh3cF9wYWdlX2xvY2ssIGZsYWdzKTtcbiYjNDM7XHRcdHJldHVybiBNRl9IVUdFVExCX1BBR0VfUFJFX1BPSVNPTkVEO1xuIFx0fVxuIFxuLVx0cmF3X2h3cCA9IGttYWxsb2Nfb2JqKHN0cnVjdCByYXdfaHdwX3BhZ2UsIEdGUF9BVE9NSUMpO1xuLVx0aWYgKHJhd19od3ApIHtcbi1cdFx0cmF3X2h3cC1cdTAwM2VwYWdlID0gcGFnZTtcbi1cdFx0bGxpc3RfYWRkKFx1MDAyNnJhd19od3AtXHUwMDNlbm9kZSwgaGVhZCk7XG4mIzQzO1x0cCA9IGttYWxsb2Nfb2JqKCpwLCBHRlBfQVRPTUlDKTtcbiYjNDM7XHRpZiAocCkge1xuJiM0MztcdFx0cC1cdTAwM2VwYWdlID0gcGFnZTtcbiYjNDM7XHRcdHAtXHUwMDNlbmV4dCA9IGZvbGlvLVx1MDAzZWh1Z2V0bGJfaHdwb2lzb247XG4mIzQzO1x0XHRmb2xpby1cdTAwM2VodWdldGxiX2h3cG9pc29uID0gcDtcbiBcdH0gZWxzZSB7XG4gXHRcdC8qXG4gXHRcdCAqIEZhaWxlZCB0byBzYXZlIHJhdyBlcnJvciBpbmZvLiAgV2Ugbm8gbG9uZ2VyIHRyYWNlIGFsbFxuQEAgLTE5MTcsMTYgJiM0MzsxOTY0LDIwIEBAIHN0YXRpYyBpbnQgaHVnZXRsYl91cGRhdGVfaHdwb2lzb24oc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHBhZ2UgKnBhZ2UpXG4gXHRcdCAqL1xuIFx0XHRmb2xpb19zZXRfaHVnZXRsYl9yYXdfaHdwX3VucmVsaWFibGUoZm9saW8pO1xuIFx0XHQvKlxuLVx0XHQgKiBPbmNlIGh1Z2V0bGJfcmF3X2h3cF91bnJlbGlhYmxlIGlzIHNldCwgcmF3X2h3cF9wYWdlIGlzIG5vdFxuJiM0MztcdFx0ICogT25jZSBodWdldGxiX3Jhd19od3BfdW5yZWxpYWJsZSBpcyBzZXQsIGh3cF9wYWdlIGlzIG5vdFxuIFx0XHQgKiB1c2VkIGFueSBtb3JlLCBzbyBmcmVlIGl0LlxuIFx0XHQgKi9cbiBcdFx0X19mb2xpb19mcmVlX3Jhd19od3AoZm9saW8sIGZhbHNlKTtcbiBcdH1cbiYjNDM7XHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNmh3cF9wYWdlX2xvY2ssIGZsYWdzKTtcbiBcdHJldHVybiByZXQ7XG4gfVxuIFxuIHN0YXRpYyB1bnNpZ25lZCBsb25nIGZvbGlvX2ZyZWVfcmF3X2h3cChzdHJ1Y3QgZm9saW8gKmZvbGlvLCBib29sIG1vdmVfZmxhZylcbiB7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBjb3VudDtcbiYjNDM7XHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuJiM0MztcbiBcdC8qXG4gXHQgKiBodWdldGxiX3ZtZW1tYXBfb3B0aW1pemVkIGh1Z2VwYWdlcyBjYW4mIzM5O3QgYmUgZnJlZWQgYmVjYXVzZSBzdHJ1Y3RcbiBcdCAqIHBhZ2VzIGZvciB0YWlsIHBhZ2VzIGFyZSByZXF1aXJlZCBidXQgdGhleSBkb24mIzM5O3QgZXhpc3QuXG5AQCAtMTk0MSw3ICYjNDM7MTk5MiwxMSBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBmb2xpb19mcmVlX3Jhd19od3Aoc3RydWN0IGZvbGlvICpmb2xpbywgYm9vbCBtb3ZlX2ZsYWcpXG4gXHRpZiAoZm9saW9fdGVzdF9odWdldGxiX3Jhd19od3BfdW5yZWxpYWJsZShmb2xpbykpXG4gXHRcdHJldHVybiAwO1xuIFxuLVx0cmV0dXJuIF9fZm9saW9fZnJlZV9yYXdfaHdwKGZvbGlvLCBtb3ZlX2ZsYWcpO1xuJiM0MztcdHNwaW5fbG9ja19pcnFzYXZlKFx1MDAyNmh3cF9wYWdlX2xvY2ssIGZsYWdzKTtcbiYjNDM7XHRjb3VudCA9IF9fZm9saW9fZnJlZV9yYXdfaHdwKGZvbGlvLCBtb3ZlX2ZsYWcpO1xuJiM0MztcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2aHdwX3BhZ2VfbG9jaywgZmxhZ3MpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gY291bnQ7XG4gfVxuIFxuIHZvaWQgZm9saW9fY2xlYXJfaHVnZXRsYl9od3BvaXNvbihzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuQEAgLTE5NTAsOCAmIzQzOzIwMDUsOCBAQCB2b2lkIGZvbGlvX2NsZWFyX2h1Z2V0bGJfaHdwb2lzb24oc3RydWN0IGZvbGlvICpmb2xpbylcbiBcdFx0cmV0dXJuO1xuIFx0aWYgKGZvbGlvX3Rlc3RfaHVnZXRsYl92bWVtbWFwX29wdGltaXplZChmb2xpbykpXG4gXHRcdHJldHVybjtcbi1cdGZvbGlvX2NsZWFyX2h3cG9pc29uKGZvbGlvKTtcbiBcdGZvbGlvX2ZyZWVfcmF3X2h3cChmb2xpbywgdHJ1ZSk7XG4mIzQzO1x0Zm9saW9fY2xlYXJfaGFzX2h3cG9pc29uZWQoZm9saW8pO1xuIH1cbiBcbiBzdGF0aWMgaW50IGdldF9odWdlX3BhZ2VfZm9yX2h3cG9pc29uKHVuc2lnbmVkIGxvbmcgcGZuLCBpbnQgZmxhZ3MsXG5AQCAtMjEwNCw2ICYjNDM7MjE1OSwxMSBAQCBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgZm9saW9fZnJlZV9yYXdfaHdwKHN0cnVjdCBmb2xpbyAqZm9saW8sIGJvb2wgZmxhZylcbiB7XG4gXHRyZXR1cm4gMDtcbiB9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW5saW5lIGludCBodWdldGxiX2NsZWFyX3BvaXNvbihzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiAjZW5kaWZcdC8qIENPTkZJR19IVUdFVExCX1BBR0UgKi9cbiBcbiAvKiBEcm9wIHRoZSBleHRyYSByZWZjb3VudCBpbiBjYXNlIHdlIGNvbWUgZnJvbSBtYWR2aXNlKCkgKi9cbkBAIC0yNjk1LDggJiM0MzsyNzU1LDggQEAgaW50IHVucG9pc29uX21lbW9yeSh1bnNpZ25lZCBsb25nIHBmbilcbiBcdFx0Z290byB1bmxvY2tfbXV0ZXg7XG4gXHR9XG4gXG4tXHRpZiAoIVBhZ2VIV1BvaXNvbihwKSkge1xuLVx0XHR1bnBvaXNvbl9wcl9pbmZvKFwmIzM0OyUjbHg6IHBhZ2Ugd2FzIGFscmVhZHkgdW5wb2lzb25lZFxcblwmIzM0OyxcbiYjNDM7XHRpZiAoIWlzX3BhZ2VfaHdwb2lzb24ocCkpIHtcbiYjNDM7XHRcdHVucG9pc29uX3ByX2luZm8oXCYjMzQ7JSNseDogcGFnZSBpcyBub3QgcG9pc29uZWRcXG5cJiMzNDssXG4gXHRcdFx0XHQgcGZuLCBcdTAwMjZ1bnBvaXNvbl9ycyk7XG4gXHRcdGdvdG8gdW5sb2NrX211dGV4O1xuIFx0fVxuQEAgLTI3MzAsOCAmIzQzOzI3OTAsOCBAQCBpbnQgdW5wb2lzb25fbWVtb3J5KHVuc2lnbmVkIGxvbmcgcGZuKVxuIFx0XHRcdGNvdW50ID0gZm9saW9fZnJlZV9yYXdfaHdwKGZvbGlvLCBmYWxzZSk7XG4gXHRcdFx0aWYgKGNvdW50ID09IDApXG4gXHRcdFx0XHRnb3RvIHVubG9ja19tdXRleDtcbiYjNDM7XHRcdFx0cmV0ID0gaHVnZXRsYl9jbGVhcl9wb2lzb24oZm9saW8pO1xuIFx0XHR9XG4tXHRcdHJldCA9IGZvbGlvX3Rlc3RfY2xlYXJfaHdwb2lzb24oZm9saW8pID8gMCA6IC1FQlVTWTtcbiBcdH0gZWxzZSBpZiAoZ2hwIFx1MDAzYyAwKSB7XG4gXHRcdGlmIChnaHAgPT0gLUVIV1BPSVNPTikge1xuIFx0XHRcdHJldCA9IHB1dF9wYWdlX2JhY2tfYnVkZHkocCkgPyAwIDogLUVCVVNZO1xuQEAgLTI3NDAsMTYgJiM0MzsyODAwLDE4IEBAIGludCB1bnBvaXNvbl9tZW1vcnkodW5zaWduZWQgbG9uZyBwZm4pXG4gXHRcdFx0dW5wb2lzb25fcHJfaW5mbyhcJiMzNDslI2x4OiBmYWlsZWQgdG8gZ3JhYiBwYWdlXFxuXCYjMzQ7LFxuIFx0XHRcdFx0XHQgcGZuLCBcdTAwMjZ1bnBvaXNvbl9ycyk7XG4gXHRcdH1cbi1cdH0gZWxzZSB7XG4tXHRcdGlmIChmb2xpb190ZXN0X2h1Z2V0bGIoZm9saW8pKSB7XG4tXHRcdFx0aHVnZSA9IHRydWU7XG4tXHRcdFx0Y291bnQgPSBmb2xpb19mcmVlX3Jhd19od3AoZm9saW8sIGZhbHNlKTtcbi1cdFx0XHRpZiAoY291bnQgPT0gMCkge1xuLVx0XHRcdFx0Zm9saW9fcHV0KGZvbGlvKTtcbi1cdFx0XHRcdGdvdG8gdW5sb2NrX211dGV4O1xuLVx0XHRcdH1cbiYjNDM7XHR9IGVsc2UgaWYgKGZvbGlvX3Rlc3RfaHVnZXRsYihmb2xpbykpIHtcbiYjNDM7XHRcdGh1Z2UgPSB0cnVlO1xuJiM0MztcdFx0Y291bnQgPSBmb2xpb19mcmVlX3Jhd19od3AoZm9saW8sIGZhbHNlKTtcbiYjNDM7XHRcdGlmIChjb3VudCA9PSAwKSB7XG4mIzQzO1x0XHRcdGZvbGlvX3B1dChmb2xpbyk7XG4mIzQzO1x0XHRcdGdvdG8gdW5sb2NrX211dGV4O1xuIFx0XHR9XG4tXG4mIzQzO1x0XHRmb2xpb19wdXQoZm9saW8pO1xuJiM0MztcdFx0cmV0ID0gaHVnZXRsYl9jbGVhcl9wb2lzb24oZm9saW8pO1xuJiM0MztcdFx0aWYgKCFyZXQpXG4mIzQzO1x0XHRcdGZvbGlvX3B1dChmb2xpbyk7XG4mIzQzO1x0fSBlbHNlIHtcbiBcdFx0Zm9saW9fcHV0KGZvbGlvKTtcbiBcdFx0aWYgKFRlc3RDbGVhclBhZ2VIV1BvaXNvbihwKSkge1xuIFx0XHRcdGZvbGlvX3B1dChmb2xpbyk7XG5kaWZmIC0tZ2l0IGEvbW0vbWVtb3J5X2hvdHBsdWcuYyBiL21tL21lbW9yeV9ob3RwbHVnLmNcbmluZGV4IDdhYzE5ZmFiMjI2MzI0Li4zMzAwN2U4ZTU0NmEwOSAxMDA2NDRcbi0tLSBhL21tL21lbW9yeV9ob3RwbHVnLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL21lbW9yeV9ob3RwbHVnLmNcbkBAIC0xODEzLDcgJiM0MzsxODEzLDcgQEAgc3RhdGljIHZvaWQgZG9fbWlncmF0ZV9yYW5nZSh1bnNpZ25lZCBsb25nIHN0YXJ0X3BmbiwgdW5zaWduZWQgbG9uZyBlbmRfcGZuKVxuIFx0XHRpZiAoZm9saW9fdGVzdF9sYXJnZShmb2xpbykpXG4gXHRcdFx0cGZuID0gZm9saW9fcGZuKGZvbGlvKSAmIzQzOyBmb2xpb19ucl9wYWdlcyhmb2xpbykgLSAxO1xuIFxuLVx0XHRpZiAoZm9saW9fY29udGFpbl9od3BvaXNvbmVkX3BhZ2UoZm9saW8pKSB7XG4mIzQzO1x0XHRpZiAoZm9saW9faGFzX2h3cG9pc29uZWRfcGFnZShmb2xpbykpIHtcbiBcdFx0XHQvKlxuIFx0XHRcdCAqIHVubWFwX3BvaXNvbmVkX2ZvbGlvKCkgY2Fubm90IGhhbmRsZSBsYXJnZSBmb2xpb3NcbiBcdFx0XHQgKiBpbiBhbGwgY2FzZXMgeWV0LlxuZGlmZiAtLWdpdCBhL21tL3JtYXAuYyBiL21tL3JtYXAuY1xuaW5kZXggMWM3N2Q1ZGMwNmU5ZmEuLmZkMTlhMGJmYmZlNzZjIDEwMDY0NFxuLS0tIGEvbW0vcm1hcC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9ybWFwLmNcbkBAIC0xOTc4LDYgJiM0MzsxOTc4LDIyIEBAIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGZvbGlvX3VubWFwX3B0ZV9iYXRjaChzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuIFx0XHRcdFx0ICAgICBGUEJfUkVTUEVDVF9XUklURSB8IEZQQl9SRVNQRUNUX1NPRlRfRElSVFkpO1xuIH1cbiBcbiYjNDM7LypcbiYjNDM7ICogU2luY2Ugd2UgY2Fubm90IHNwbGl0IGEgaHVnZXRsYiBmb2xpbywgd2Ugd2FudCB0byBpbnNlcnQgYSBwb2lzb25cbiYjNDM7ICogZW50cnkgaW50byB0aGUgcGFnZSB0YWJsZSBmb3IgdGhlIHdob2xlIGZvbGlvIGV2ZW4gaWYgb25seSBvbmUgcGFnZVxuJiM0MzsgKiBpcyBwb2lzb25lZC4gIE90aGVyd2lzZSwgd2UmIzM5O3ZlIHNwbGl0IGRvd24gdG8gdGhlIFBURSBsZXZlbCBhbmQgd2Ugb25seVxuJiM0MzsgKiB3YW50IHRvIHBvaXNvbiB0aGUgcHJlY2lzZSBwYWdlXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgYm9vbCB0dHVfY3JlYXRlX2h3cG9pc29uKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8sXG4mIzQzO1x0XHRjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSwgZW51bSB0dHVfZmxhZ3MgZmxhZ3MpXG4mIzQzO3tcbiYjNDM7XHRpZiAoIShmbGFncyBcdTAwMjYgVFRVX0hXUE9JU09OKSlcbiYjNDM7XHRcdHJldHVybiBmYWxzZTtcbiYjNDM7XHRpZiAoZm9saW9fdGVzdF9odWdldGxiKGZvbGlvKSlcbiYjNDM7XHRcdHJldHVybiBmb2xpb190ZXN0X2hhc19od3BvaXNvbmVkKGZvbGlvKTtcbiYjNDM7XHRyZXR1cm4gUGFnZUhXUG9pc29uKHBhZ2UpO1xuJiM0Mzt9XG4mIzQzO1xuIC8qXG4gICogQGFyZzogZW51bSB0dHVfZmxhZ3Mgd2lsbCBiZSBwYXNzZWQgdG8gdGhpcyBhcmd1bWVudFxuICAqL1xuQEAgLTE5OTMsNyAmIzQzOzIwMDksNiBAQCBzdGF0aWMgYm9vbCB0cnlfdG9fdW5tYXBfb25lKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuIFx0ZW51bSB0dHVfZmxhZ3MgZmxhZ3MgPSAoZW51bSB0dHVfZmxhZ3MpKGxvbmcpYXJnO1xuIFx0dW5zaWduZWQgbG9uZyBucl9wYWdlcyA9IDEsIGVuZF9hZGRyO1xuIFx0dW5zaWduZWQgbG9uZyBwZm47XG4tXHR1bnNpZ25lZCBsb25nIGhzeiA9IDA7XG4gXHRpbnQgcHRlcyA9IDA7XG4gXG4gXHQvKlxuQEAgLTIwMjMsOSAmIzQzOzIwMzgsNiBAQCBzdGF0aWMgYm9vbCB0cnlfdG9fdW5tYXBfb25lKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuIFx0XHQgKi9cbiBcdFx0YWRqdXN0X3JhbmdlX2lmX3BtZF9zaGFyaW5nX3Bvc3NpYmxlKHZtYSwgXHUwMDI2cmFuZ2Uuc3RhcnQsXG4gXHRcdFx0XHRcdFx0ICAgICBcdTAwMjZyYW5nZS5lbmQpO1xuLVxuLVx0XHQvKiBXZSBuZWVkIHRoZSBodWdlIHBhZ2Ugc2l6ZSBmb3Igc2V0X2h1Z2VfcHRlX2F0KCkgKi9cbi1cdFx0aHN6ID0gaHVnZV9wYWdlX3NpemUoaHN0YXRlX3ZtYSh2bWEpKTtcbiBcdH1cbiBcdG1tdV9ub3RpZmllcl9pbnZhbGlkYXRlX3JhbmdlX3N0YXJ0KFx1MDAyNnJhbmdlKTtcbiBcbkBAIC0yMTIxLDcgJiM0MzsyMTMzLDggQEAgc3RhdGljIGJvb2wgdHJ5X3RvX3VubWFwX29uZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbiBcdFx0XHQgKiBUaGUgdHJ5X3RvX3VubWFwKCkgaXMgb25seSBwYXNzZWQgYSBodWdldGxiIHBhZ2VcbiBcdFx0XHQgKiBpbiB0aGUgY2FzZSB3aGVyZSB0aGUgaHVnZXRsYiBwYWdlIGlzIHBvaXNvbmVkLlxuIFx0XHRcdCAqL1xuLVx0XHRcdFZNX0JVR19PTl9QQUdFKCFQYWdlSFdQb2lzb24oc3VicGFnZSksIHN1YnBhZ2UpO1xuJiM0MztcdFx0XHRWTV9CVUdfT05fRk9MSU8oIWZvbGlvX2hhc19od3BvaXNvbmVkX3BhZ2UoZm9saW8pLFxuJiM0MztcdFx0XHRcdFx0Zm9saW8pO1xuIFx0XHRcdC8qXG4gXHRcdFx0ICogaHVnZV9wbWRfdW5zaGFyZSBtYXkgdW5tYXAgYW4gZW50aXJlIFBNRCBwYWdlLlxuIFx0XHRcdCAqIFRoZXJlIGlzIG5vIHdheSBvZiBrbm93aW5nIGV4YWN0bHkgd2hpY2ggUE1EcyBtYXlcbkBAIC0yMjAwLDEyICYjNDM7MjIxMywxMiBAQCBzdGF0aWMgYm9vbCB0cnlfdG9fdW5tYXBfb25lKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuIFx0XHQvKiBVcGRhdGUgaGlnaCB3YXRlcm1hcmsgYmVmb3JlIHdlIGxvd2VyIHJzcyAqL1xuIFx0XHR1cGRhdGVfaGl3YXRlcl9yc3MobW0pO1xuIFxuLVx0XHRpZiAoUGFnZUhXUG9pc29uKHN1YnBhZ2UpIFx1MDAyNlx1MDAyNiAoZmxhZ3MgXHUwMDI2IFRUVV9IV1BPSVNPTikpIHtcbiYjNDM7XHRcdGlmICh0dHVfY3JlYXRlX2h3cG9pc29uKGZvbGlvLCBzdWJwYWdlLCBmbGFncykpIHtcbiBcdFx0XHRwdGV2YWwgPSBzd3BfZW50cnlfdG9fcHRlKG1ha2VfaHdwb2lzb25fZW50cnkoc3VicGFnZSkpO1xuIFx0XHRcdGlmIChmb2xpb190ZXN0X2h1Z2V0bGIoZm9saW8pKSB7XG4gXHRcdFx0XHRodWdldGxiX2NvdW50X3N1Yihmb2xpb19ucl9wYWdlcyhmb2xpbyksIG1tKTtcbiBcdFx0XHRcdHNldF9odWdlX3B0ZV9hdChtbSwgYWRkcmVzcywgcHZtdy5wdGUsIHB0ZXZhbCxcbi1cdFx0XHRcdFx0XHRoc3opO1xuJiM0MztcdFx0XHRcdFx0XHRmb2xpb19zaXplKGZvbGlvKSk7XG4gXHRcdFx0fSBlbHNlIHtcbiBcdFx0XHRcdGRlY19tbV9jb3VudGVyKG1tLCBtbV9jb3VudGVyKGZvbGlvKSk7XG4gXHRcdFx0XHRzZXRfcHRlX2F0KG1tLCBhZGRyZXNzLCBwdm13LnB0ZSwgcHRldmFsKTtcbkBAIC0yNDIzLDcgJiM0MzsyNDM2LDYgQEAgc3RhdGljIGJvb2wgdHJ5X3RvX21pZ3JhdGVfb25lKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuIFx0c3RydWN0IG1tdV9ub3RpZmllcl9yYW5nZSByYW5nZTtcbiBcdGVudW0gdHR1X2ZsYWdzIGZsYWdzID0gKGVudW0gdHR1X2ZsYWdzKShsb25nKWFyZztcbiBcdHVuc2lnbmVkIGxvbmcgcGZuO1xuLVx0dW5zaWduZWQgbG9uZyBoc3ogPSAwO1xuIFxuIFx0LypcbiBcdCAqIFdoZW4gcmFjaW5nIGFnYWluc3QgZS5nLiB6YXBfcHRlX3JhbmdlKCkgb24gYW5vdGhlciBjcHUsXG5AQCAtMjQ1Miw5ICYjNDM7MjQ2NCw2IEBAIHN0YXRpYyBib29sIHRyeV90b19taWdyYXRlX29uZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbiBcdFx0ICovXG4gXHRcdGFkanVzdF9yYW5nZV9pZl9wbWRfc2hhcmluZ19wb3NzaWJsZSh2bWEsIFx1MDAyNnJhbmdlLnN0YXJ0LFxuIFx0XHRcdFx0XHRcdCAgICAgXHUwMDI2cmFuZ2UuZW5kKTtcbi1cbi1cdFx0LyogV2UgbmVlZCB0aGUgaHVnZSBwYWdlIHNpemUgZm9yIHNldF9odWdlX3B0ZV9hdCgpICovXG4tXHRcdGhzeiA9IGh1Z2VfcGFnZV9zaXplKGhzdGF0ZV92bWEodm1hKSk7XG4gXHR9XG4gXHRtbXVfbm90aWZpZXJfaW52YWxpZGF0ZV9yYW5nZV9zdGFydChcdTAwMjZyYW5nZSk7XG4gXG5AQCAtMjYwNywxNCAmIzQzOzI2MTYsMTQgQEAgc3RhdGljIGJvb2wgdHJ5X3RvX21pZ3JhdGVfb25lKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuIFx0XHQvKiBVcGRhdGUgaGlnaCB3YXRlcm1hcmsgYmVmb3JlIHdlIGxvd2VyIHJzcyAqL1xuIFx0XHR1cGRhdGVfaGl3YXRlcl9yc3MobW0pO1xuIFxuLVx0XHRpZiAoUGFnZUhXUG9pc29uKHN1YnBhZ2UpKSB7XG4mIzQzO1x0XHRpZiAodHR1X2NyZWF0ZV9od3BvaXNvbihmb2xpbywgc3VicGFnZSwgVFRVX0hXUE9JU09OKSkge1xuIFx0XHRcdFZNX1dBUk5fT05fRk9MSU8oZm9saW9faXNfZGV2aWNlX3ByaXZhdGUoZm9saW8pLCBmb2xpbyk7XG4gXG4gXHRcdFx0cHRldmFsID0gc3dwX2VudHJ5X3RvX3B0ZShtYWtlX2h3cG9pc29uX2VudHJ5KHN1YnBhZ2UpKTtcbiBcdFx0XHRpZiAoZm9saW9fdGVzdF9odWdldGxiKGZvbGlvKSkge1xuIFx0XHRcdFx0aHVnZXRsYl9jb3VudF9zdWIoZm9saW9fbnJfcGFnZXMoZm9saW8pLCBtbSk7XG4gXHRcdFx0XHRzZXRfaHVnZV9wdGVfYXQobW0sIGFkZHJlc3MsIHB2bXcucHRlLCBwdGV2YWwsXG4tXHRcdFx0XHRcdFx0aHN6KTtcbiYjNDM7XHRcdFx0XHRcdFx0Zm9saW9fc2l6ZShmb2xpbykpO1xuIFx0XHRcdH0gZWxzZSB7XG4gXHRcdFx0XHRkZWNfbW1fY291bnRlcihtbSwgbW1fY291bnRlcihmb2xpbykpO1xuIFx0XHRcdFx0c2V0X3B0ZV9hdChtbSwgYWRkcmVzcywgcHZtdy5wdGUsIHB0ZXZhbCk7XG5AQCAtMjY0NCw3ICYjNDM7MjY1Myw4IEBAIHN0YXRpYyBib29sIHRyeV90b19taWdyYXRlX29uZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbiBcdFx0XHRpZiAoYXJjaF91bm1hcF9vbmUobW0sIHZtYSwgYWRkcmVzcywgcHRldmFsKSBcdTAwM2MgMCkge1xuIFx0XHRcdFx0aWYgKGZvbGlvX3Rlc3RfaHVnZXRsYihmb2xpbykpXG4gXHRcdFx0XHRcdHNldF9odWdlX3B0ZV9hdChtbSwgYWRkcmVzcywgcHZtdy5wdGUsXG4tXHRcdFx0XHRcdFx0XHRwdGV2YWwsIGhzeik7XG4mIzQzO1x0XHRcdFx0XHRcdFx0cHRldmFsLFxuJiM0MztcdFx0XHRcdFx0XHRcdGZvbGlvX3NpemUoZm9saW8pKTtcbiBcdFx0XHRcdGVsc2VcbiBcdFx0XHRcdFx0c2V0X3B0ZV9hdChtbSwgYWRkcmVzcywgcHZtdy5wdGUsIHB0ZXZhbCk7XG4gXHRcdFx0XHRyZXQgPSBmYWxzZTtcbkBAIC0yNjU3LDcgJiM0MzsyNjY3LDggQEAgc3RhdGljIGJvb2wgdHJ5X3RvX21pZ3JhdGVfb25lKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuIFx0XHRcdFx0aWYgKGFub25fZXhjbHVzaXZlIFx1MDAyNlx1MDAyNlxuIFx0XHRcdFx0ICAgIGh1Z2V0bGJfdHJ5X3NoYXJlX2Fub25fcm1hcChmb2xpbykpIHtcbiBcdFx0XHRcdFx0c2V0X2h1Z2VfcHRlX2F0KG1tLCBhZGRyZXNzLCBwdm13LnB0ZSxcbi1cdFx0XHRcdFx0XHRcdHB0ZXZhbCwgaHN6KTtcbiYjNDM7XHRcdFx0XHRcdFx0XHRwdGV2YWwsXG4mIzQzO1x0XHRcdFx0XHRcdFx0Zm9saW9fc2l6ZShmb2xpbykpO1xuIFx0XHRcdFx0XHRyZXQgPSBmYWxzZTtcbiBcdFx0XHRcdFx0cGFnZV92bWFfbWFwcGVkX3dhbGtfZG9uZShcdTAwMjZwdm13KTtcbiBcdFx0XHRcdFx0YnJlYWs7XG5AQCAtMjcwMyw3ICYjNDM7MjcxNCw3IEBAIHN0YXRpYyBib29sIHRyeV90b19taWdyYXRlX29uZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbiBcdFx0XHR9XG4gXHRcdFx0aWYgKGZvbGlvX3Rlc3RfaHVnZXRsYihmb2xpbykpXG4gXHRcdFx0XHRzZXRfaHVnZV9wdGVfYXQobW0sIGFkZHJlc3MsIHB2bXcucHRlLCBzd3BfcHRlLFxuLVx0XHRcdFx0XHRcdGhzeik7XG4mIzQzO1x0XHRcdFx0XHRcdGZvbGlvX3NpemUoZm9saW8pKTtcbiBcdFx0XHRlbHNlXG4gXHRcdFx0XHRzZXRfcHRlX2F0KG1tLCBhZGRyZXNzLCBwdm13LnB0ZSwgc3dwX3B0ZSk7XG4gXHRcdFx0dHJhY2Vfc2V0X21pZ3JhdGlvbl9wdGUoYWRkcmVzcywgcHRlX3ZhbChzd3BfcHRlKSxcbmRpZmYgLS1naXQgYS9tbS9zaG1lbS5jIGIvbW0vc2htZW0uY1xuaW5kZXggYjUxZjgzYzk3MGJiMzcuLjQ5MmM5YmVmMzYyMDc0IDEwMDY0NFxuLS0tIGEvbW0vc2htZW0uY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vc2htZW0uY1xuQEAgLTMyNDAsNyAmIzQzOzMyNDAsNyBAQCBzaG1lbV93cml0ZV9iZWdpbihjb25zdCBzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxuIFx0aWYgKHJldClcbiBcdFx0cmV0dXJuIHJldDtcbiBcbi1cdGlmIChmb2xpb19jb250YWluX2h3cG9pc29uZWRfcGFnZShmb2xpbykpIHtcbiYjNDM7XHRpZiAoZm9saW9faGFzX2h3cG9pc29uZWRfcGFnZShmb2xpbykpIHtcbiBcdFx0Zm9saW9fdW5sb2NrKGZvbGlvKTtcbiBcdFx0Zm9saW9fcHV0KGZvbGlvKTtcbiBcdFx0cmV0dXJuIC1FSU87XG5kaWZmIC0tZ2l0IGEvbW0vdm1zY2FuLmMgYi9tbS92bXNjYW4uY1xuaW5kZXggMzVjM2JiMTVhZTk2YTMuLjcwZTU0YWNlMGU3NDFjIDEwMDY0NFxuLS0tIGEvbW0vdm1zY2FuLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL3Ztc2Nhbi5jXG5AQCAtMTA4Niw3ICYjNDM7MTA4Niw3IEBAIHN0YXRpYyB1bnNpZ25lZCBpbnQgc2hyaW5rX2ZvbGlvX2xpc3Qoc3RydWN0IGxpc3RfaGVhZCAqZm9saW9fbGlzdCxcbiBcdFx0aWYgKCFmb2xpb190cnlsb2NrKGZvbGlvKSlcbiBcdFx0XHRnb3RvIGtlZXA7XG4gXG4tXHRcdGlmIChmb2xpb19jb250YWluX2h3cG9pc29uZWRfcGFnZShmb2xpbykpIHtcbiYjNDM7XHRcdGlmIChmb2xpb19oYXNfaHdwb2lzb25lZF9wYWdlKGZvbGlvKSkge1xuIFx0XHRcdC8qXG4gXHRcdFx0ICogdW5tYXBfcG9pc29uZWRfZm9saW8oKSBjYW4mIzM5O3QgaGFuZGxlIGxhcmdlXG4gXHRcdFx0ICogZm9saW8sIGp1c3Qgc2tpcCBpdC4gbWVtb3J5X2ZhaWx1cmUoKSB3aWxsXG5kaWZmIC0tZ2l0IGEvdmlydC9rdm0vZ3Vlc3RfbWVtZmQuYyBiL3ZpcnQva3ZtL2d1ZXN0X21lbWZkLmNcbmluZGV4IGRiNTdjNTc2NmFiNjA0Li45NGVlZGNjN2YxYTllMCAxMDA2NDRcbi0tLSBhL3ZpcnQva3ZtL2d1ZXN0X21lbWZkLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3ZpcnQva3ZtL2d1ZXN0X21lbWZkLmNcbkBAIC03NzQsNyAmIzQzOzc3NCw3IEBAIHN0YXRpYyBzdHJ1Y3QgZm9saW8gKl9fa3ZtX2dtZW1fZ2V0X3BmbihzdHJ1Y3QgZmlsZSAqZmlsZSxcbiBcdGlmIChJU19FUlIoZm9saW8pKVxuIFx0XHRyZXR1cm4gZm9saW87XG4gXG4tXHRpZiAoZm9saW9fdGVzdF9od3BvaXNvbihmb2xpbykpIHtcbiYjNDM7XHRpZiAoZm9saW9faGFzX2h3cG9pc29uZWRfcGFnZShmb2xpbykpIHtcbiBcdFx0Zm9saW9fdW5sb2NrKGZvbGlvKTtcbiBcdFx0Zm9saW9fcHV0KGZvbGlvKTtcbiBcdFx0cmV0dXJuIEVSUl9QVFIoLUVIV1BPSVNPTik7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjYgMTc6NTE8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0hVR0VUTEJGUyYjMzQ7LAogICAgJiMzNDtNRU1PUllfRkFJTFVSRSYjMzQ7LAogICAgJiMzNDtUUkFOU1BBUkVOVF9IVUdFUEFHRSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2h1Z2V0bGJfcGFnZV9od3BvaXNvbiYjMzQ7LAogICAgJiMzNDtodWdldGxiX3VucmVmX3BhZ2VfaHdwb2lzb24mIzM0OywKICAgICYjMzQ7dW5wb2lzb25fbWVtb3J5JiMzNDssCiAgICAmIzM0O2ZvbGlvX2NsZWFyX2h1Z2V0bGJfaHdwb2lzb24mIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggc2VyaWVzIGludHJvZHVjZXMgYExBUkdFX0ZPTElPYCBjb25maWcgYW5kIHJlZmFjdG9ycyBob3cgaHdwb2lzb24gaXMgdHJhY2tlZCBmb3IgaHVnZXRsYiBmb2xpb3MuIEl0IHJlcGxhY2VzIGBhZGp1c3RfcmFuZ2VfaHdwb2lzb25gIGluIGBmcy9odWdldGxiZnMvaW5vZGUuY2Agd2l0aCBhIGdlbmVyaWMgb25lIGluIGBtbS9maWxlbWFwLmNgIGFuZCBjaGFuZ2VzIGBodWdldGxiZnNfcmVhZF9pdGVyYCB0byBgZ2VuZXJpY19maWxlX3JlYWRfaXRlcmAuIEl0IGFsc28gbW9kaWZpZXMgYGZvbGlvX3Rlc3RfaHdwb2lzb25gIHRvIGBmb2xpb19oYXNfaHdwb2lzb25lZF9wYWdlYCBpbiB2YXJpb3VzIHBsYWNlcy4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byBjb3JlIGtlcm5lbCBsb2dpYyAobW0sIGh1Z2V0bGJmcywgbWVtb3J5LWZhaWx1cmUpIGFuZCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgOWI4NTZlYmQ0N2FjNTAxMDdjOTk2MjM2OTI4ZGFjNWI2M2IzZTk2YgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTdW4gSnVsIDI2IDE3OjUxOjM1IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZnMvS2NvbmZpZyBiL2ZzL0tjb25maWcKaW5kZXggY2Y2YWU2NDc3NmU2MmMuLmVkZGFjNGVkMjE0YjEyIDEwMDY0NAotLS0gYS9mcy9LY29uZmlnCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL0tjb25maWcKQEAgLTI3Miw3ICYjNDM7MjcyLDcgQEAgZW5kaWYgIyBIVUdFVExCRlMKIAogY29uZmlnIEhVR0VUTEJfUEFHRQogCWRlZl9ib29sIEhVR0VUTEJGUwotCXNlbGVjdCBYQVJSQVlfTVVMVEkKJiM0MzsJc2VsZWN0IExBUkdFX0ZPTElPCiAKIGNvbmZpZyBIVUdFVExCX1BBR0VfT1BUSU1JWkVfVk1FTU1BUAogCWRlZl9ib29sIEhVR0VUTEJfUEFHRQpkaWZmIC0tZ2l0IGEvZnMvaHVnZXRsYmZzL2lub2RlLmMgYi9mcy9odWdldGxiZnMvaW5vZGUuYwppbmRleCAyMTZlMWEwZGQwYjIzNy4uY2VmN2U2MWI4MjdkNzEgMTAwNjQ0Ci0tLSBhL2ZzL2h1Z2V0bGJmcy9pbm9kZS5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2h1Z2V0bGJmcy9pbm9kZS5jCkBAIC0xODcsMTEzICYjNDM7MTg3LDYgQEAgaHVnZXRsYl9nZXRfdW5tYXBwZWRfYXJlYShzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgbG9uZyBhZGRyLAogCXJldHVybiBtbV9nZXRfdW5tYXBwZWRfYXJlYV92bWZsYWdzKGZpbGUsIGFkZHIwLCBsZW4sIHBnb2ZmLCBmbGFncywgMCk7CiB9CiAKLS8qCi0gKiBTb21lb25lIHdhbnRzIHRvIHJlYWQgQGJ5dGVzIGZyb20gYSBIV1BPSVNPTiBodWdldGxiIEBmb2xpbyBmcm9tIEBvZmZzZXQuCi0gKiBSZXR1cm5zIHRoZSBtYXhpbXVtIG51bWJlciBvZiBieXRlcyBvbmUgY2FuIHJlYWQgd2l0aG91dCB0b3VjaGluZyB0aGUgMXN0IHJhdwotICogSFdQT0lTT04gcGFnZS4KLSAqLwotc3RhdGljIHNpemVfdCBhZGp1c3RfcmFuZ2VfaHdwb2lzb24oc3RydWN0IGZvbGlvICpmb2xpbywgc2l6ZV90IG9mZnNldCwKLQkJc2l6ZV90IGJ5dGVzKQotewotCXN0cnVjdCBwYWdlICpwYWdlID0gZm9saW9fcGFnZShmb2xpbywgb2Zmc2V0IC8gUEFHRV9TSVpFKTsKLQlzaXplX3Qgc2FmZV9ieXRlczsKLQotCWlmIChpc19yYXdfaHdwb2lzb25fcGFnZV9pbl9odWdlcGFnZShwYWdlKSkKLQkJcmV0dXJuIDA7Ci0JLyogU2FmZSB0byByZWFkIHRoZSByZW1haW5pbmcgYnl0ZXMgaW4gdGhpcyBwYWdlLiAqLwotCXNhZmVfYnl0ZXMgPSBQQUdFX1NJWkUgLSAob2Zmc2V0ICUgUEFHRV9TSVpFKTsKLQlwYWdlJiM0MzsmIzQzOzsKLQotCS8qIENoZWNrIGVhY2ggcmVtYWluaW5nIHBhZ2UgYXMgbG9uZyBhcyB3ZSBhcmUgbm90IGRvbmUgeWV0LiAqLwotCWZvciAoOyBzYWZlX2J5dGVzICZsdDsgYnl0ZXM7IHNhZmVfYnl0ZXMgJiM0Mzs9IFBBR0VfU0laRSwgcGFnZSYjNDM7JiM0MzspCi0JCWlmIChpc19yYXdfaHdwb2lzb25fcGFnZV9pbl9odWdlcGFnZShwYWdlKSkKLQkJCWJyZWFrOwotCi0JcmV0dXJuIG1pbihzYWZlX2J5dGVzLCBieXRlcyk7Ci19Ci0KLS8qCi0gKiBTdXBwb3J0IGZvciByZWFkKCkgLSBGaW5kIHRoZSBwYWdlIGF0dGFjaGVkIHRvIGZfbWFwcGluZyBhbmQgY29weSBvdXQgdGhlCi0gKiBkYXRhLiBUaGlzIHByb3ZpZGVzIGZ1bmN0aW9uYWxpdHkgc2ltaWxhciB0byBmaWxlbWFwX3JlYWQoKS4KLSAqLwotc3RhdGljIHNzaXplX3QgaHVnZXRsYmZzX3JlYWRfaXRlcihzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqdG8pCi17Ci0Jc3RydWN0IGZpbGUgKmZpbGUgPSBpb2NiLSZndDtraV9maWxwOwotCXN0cnVjdCBoc3RhdGUgKmggPSBoc3RhdGVfZmlsZShmaWxlKTsKLQlzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyA9IGZpbGUtJmd0O2ZfbWFwcGluZzsKLQlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gbWFwcGluZy0mZ3Q7aG9zdDsKLQl1bnNpZ25lZCBsb25nIGluZGV4ID0gaW9jYi0mZ3Q7a2lfcG9zICZndDsmZ3Q7IGh1Z2VfcGFnZV9zaGlmdChoKTsKLQl1bnNpZ25lZCBsb25nIG9mZnNldCA9IGlvY2ItJmd0O2tpX3BvcyAmYW1wOyB+aHVnZV9wYWdlX21hc2soaCk7Ci0JdW5zaWduZWQgbG9uZyBlbmRfaW5kZXg7Ci0JbG9mZl90IGlzaXplOwotCXNzaXplX3QgcmV0dmFsID0gMDsKLQotCXdoaWxlIChpb3ZfaXRlcl9jb3VudCh0bykpIHsKLQkJc3RydWN0IGZvbGlvICpmb2xpbzsKLQkJc2l6ZV90IG5yLCBjb3BpZWQsIHdhbnQ7Ci0KLQkJLyogbnIgaXMgdGhlIG1heGltdW0gbnVtYmVyIG9mIGJ5dGVzIHRvIGNvcHkgZnJvbSB0aGlzIHBhZ2UgKi8KLQkJbnIgPSBodWdlX3BhZ2Vfc2l6ZShoKTsKLQkJaXNpemUgPSBpX3NpemVfcmVhZChpbm9kZSk7Ci0JCWlmICghaXNpemUpCi0JCQlicmVhazsKLQkJZW5kX2luZGV4ID0gKGlzaXplIC0gMSkgJmd0OyZndDsgaHVnZV9wYWdlX3NoaWZ0KGgpOwotCQlpZiAoaW5kZXggJmd0OyBlbmRfaW5kZXgpCi0JCQlicmVhazsKLQkJaWYgKGluZGV4ID09IGVuZF9pbmRleCkgewotCQkJbnIgPSAoKGlzaXplIC0gMSkgJmFtcDsgfmh1Z2VfcGFnZV9tYXNrKGgpKSAmIzQzOyAxOwotCQkJaWYgKG5yICZsdDs9IG9mZnNldCkKLQkJCQlicmVhazsKLQkJfQotCQluciA9IG5yIC0gb2Zmc2V0OwotCi0JCS8qIEZpbmQgdGhlIGZvbGlvICovCi0JCWZvbGlvID0gZmlsZW1hcF9sb2NrX2h1Z2V0bGJfZm9saW8oaCwgbWFwcGluZywgaW5kZXgpOwotCQlpZiAoSVNfRVJSKGZvbGlvKSkgewotCQkJLyoKLQkJCSAqIFdlIGhhdmUgYSBIT0xFLCB6ZXJvIG91dCB0aGUgdXNlci1idWZmZXIgZm9yIHRoZQotCQkJICogbGVuZ3RoIG9mIHRoZSBob2xlIG9yIHJlcXVlc3QuCi0JCQkgKi8KLQkJCWNvcGllZCA9IGlvdl9pdGVyX3plcm8obnIsIHRvKTsKLQkJfSBlbHNlIHsKLQkJCWZvbGlvX3VubG9jayhmb2xpbyk7Ci0KLQkJCWlmICghZm9saW9fdGVzdF9od3BvaXNvbihmb2xpbykpCi0JCQkJd2FudCA9IG5yOwotCQkJZWxzZSB7Ci0JCQkJLyoKLQkJCQkgKiBBZGp1c3QgaG93IG1hbnkgYnl0ZXMgc2FmZSB0byByZWFkIHdpdGhvdXQKLQkJCQkgKiB0b3VjaGluZyB0aGUgMXN0IHJhdyBIV1BPSVNPTiBwYWdlIGFmdGVyCi0JCQkJICogb2Zmc2V0LgotCQkJCSAqLwotCQkJCXdhbnQgPSBhZGp1c3RfcmFuZ2VfaHdwb2lzb24oZm9saW8sIG9mZnNldCwgbnIpOwotCQkJCWlmICh3YW50ID09IDApIHsKLQkJCQkJZm9saW9fcHV0KGZvbGlvKTsKLQkJCQkJcmV0dmFsID0gLUVJTzsKLQkJCQkJYnJlYWs7Ci0JCQkJfQotCQkJfQotCi0JCQkvKgotCQkJICogV2UgaGF2ZSB0aGUgZm9saW8sIGNvcHkgaXQgdG8gdXNlciBzcGFjZSBidWZmZXIuCi0JCQkgKi8KLQkJCWNvcGllZCA9IGNvcHlfZm9saW9fdG9faXRlcihmb2xpbywgb2Zmc2V0LCB3YW50LCB0byk7Ci0JCQlmb2xpb19wdXQoZm9saW8pOwotCQl9Ci0JCW9mZnNldCAmIzQzOz0gY29waWVkOwotCQlyZXR2YWwgJiM0Mzs9IGNvcGllZDsKLQkJaWYgKGNvcGllZCAhPSBuciAmYW1wOyZhbXA7IGlvdl9pdGVyX2NvdW50KHRvKSkgewotCQkJaWYgKCFyZXR2YWwpCi0JCQkJcmV0dmFsID0gLUVGQVVMVDsKLQkJCWJyZWFrOwotCQl9Ci0JCWluZGV4ICYjNDM7PSBvZmZzZXQgJmd0OyZndDsgaHVnZV9wYWdlX3NoaWZ0KGgpOwotCQlvZmZzZXQgJmFtcDs9IH5odWdlX3BhZ2VfbWFzayhoKTsKLQl9Ci0JaW9jYi0mZ3Q7a2lfcG9zID0gKChsb2ZmX3QpaW5kZXggJmx0OyZsdDsgaHVnZV9wYWdlX3NoaWZ0KGgpKSAmIzQzOyBvZmZzZXQ7Ci0JcmV0dXJuIHJldHZhbDsKLX0KLQogc3RhdGljIGludCBodWdldGxiZnNfd3JpdGVfYmVnaW4oY29uc3Qgc3RydWN0IGtpb2NiICppb2NiLAogCQkJc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsCiAJCQlsb2ZmX3QgcG9zLCB1bnNpZ25lZCBsZW4sCkBAIC04ODMsNiAmIzQzOzc3NiwxNyBAQCBzdGF0aWMgc3RydWN0IGlub2RlICpodWdldGxiZnNfZ2V0X3Jvb3Qoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwKIAlyZXR1cm4gaW5vZGU7CiB9CiAKJiM0MztzdGF0aWMgdm9pZCBodWdldGxiZnNfaW5pdF9yZWd1bGFyX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgaHN0YXRlICpoc3RhdGUgPSBoc3RhdGVfaW5vZGUoaW5vZGUpOwomIzQzOwl1bnNpZ25lZCBpbnQgb3JkZXIgPSBodWdlX3BhZ2Vfb3JkZXIoaHN0YXRlKTsKJiM0MzsKJiM0MzsJaW5vZGUtJmd0O2lfb3AgPSAmYW1wO2h1Z2V0bGJmc19pbm9kZV9vcGVyYXRpb25zOwomIzQzOwlpbm9kZS0mZ3Q7aV9mb3AgPSAmYW1wO2h1Z2V0bGJmc19maWxlX29wZXJhdGlvbnM7CiYjNDM7CW1hcHBpbmdfc2V0X2ZvbGlvX29yZGVyX3JhbmdlKGlub2RlLSZndDtpX21hcHBpbmcsIG9yZGVyLCBvcmRlcik7CiYjNDM7CW1hcHBpbmdfc2V0X2F1dGhvcml0YXRpdmUoaW5vZGUtJmd0O2lfbWFwcGluZyk7CiYjNDM7fQomIzQzOwogLyoKICAqIEh1Z2V0bGJmcyBpcyBub3QgcmVjbGFpbWFibGU7IHRoZXJlZm9yZSBpdHMgaV9tbWFwX3J3c2VtIHdpbGwgbmV2ZXIKICAqIGJlIHRha2VuIGZyb20gcmVjbGFpbSAtLSB1bmxpa2UgcmVndWxhciBmaWxlc3lzdGVtcy4gVGhpcyBuZWVkcyBhbgpAQCAtOTI2LDggJiM0Mzs4MzAsNyBAQCBzdGF0aWMgc3RydWN0IGlub2RlICpodWdldGxiZnNfZ2V0X2lub2RlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsCiAJCQlpbml0X3NwZWNpYWxfaW5vZGUoaW5vZGUsIG1vZGUsIGRldik7CiAJCQlicmVhazsKIAkJY2FzZSBTX0lGUkVHOgotCQkJaW5vZGUtJmd0O2lfb3AgPSAmYW1wO2h1Z2V0bGJmc19pbm9kZV9vcGVyYXRpb25zOwotCQkJaW5vZGUtJmd0O2lfZm9wID0gJmFtcDtodWdldGxiZnNfZmlsZV9vcGVyYXRpb25zOwomIzQzOwkJCWh1Z2V0bGJmc19pbml0X3JlZ3VsYXJfaW5vZGUoaW5vZGUpOwogCQkJYnJlYWs7CiAJCWNhc2UgU19JRkRJUjoKIAkJCWlub2RlLSZndDtpX29wID0gJmFtcDtodWdldGxiZnNfZGlyX2lub2RlX29wZXJhdGlvbnM7CkBAIC0xMjA2LDcgJiM0MzsxMTA5LDcgQEAgc3RhdGljIHZvaWQgaW5pdF9vbmNlKHZvaWQgKmZvbykKIH0KIAogc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgaHVnZXRsYmZzX2ZpbGVfb3BlcmF0aW9ucyA9IHsKLQkucmVhZF9pdGVyCQk9IGh1Z2V0bGJmc19yZWFkX2l0ZXIsCiYjNDM7CS5yZWFkX2l0ZXIJCT0gZ2VuZXJpY19maWxlX3JlYWRfaXRlciwKIAkubW1hcAkJCT0gaHVnZXRsYmZzX2ZpbGVfbW1hcCwKIAkuZnN5bmMJCQk9IG5vb3BfZnN5bmMsCiAJLmdldF91bm1hcHBlZF9hcmVhCT0gaHVnZXRsYl9nZXRfdW5tYXBwZWRfYXJlYSwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaHVnZXRsYi5oIGIvaW5jbHVkZS9saW51eC9odWdldGxiLmgKaW5kZXggMmFiYWY5OTMyMWU5MGQuLjE4Nzg2NDJlNzVlYzUxIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaApAQCAtMTY1LDcgJiM0MzsxNjUsNyBAQCBib29sIGh1Z2V0bGJmc19wYWdlY2FjaGVfcHJlc2VudChzdHJ1Y3QgaHN0YXRlICpoLAogCQkJCSBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKIAkJCQkgdW5zaWduZWQgbG9uZyBhZGRyZXNzKTsKIAotc3RydWN0IGFkZHJlc3Nfc3BhY2UgKmh1Z2V0bGJfZm9saW9fbWFwcGluZ19sb2NrX3dyaXRlKHN0cnVjdCBmb2xpbyAqZm9saW8pOwomIzQzO3N0cnVjdCBhZGRyZXNzX3NwYWNlICpodWdldGxiX2ZvbGlvX21hcHBpbmdfbG9ja193cml0ZShjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKTsKIAogZXh0ZXJuIGludCBtb3ZhYmxlX2dpZ2FudGljX3BhZ2VzIF9fcmVhZF9tb3N0bHk7CiBleHRlcm4gaW50IHN5c2N0bF9odWdldGxiX3NobV9ncm91cCBfX3JlYWRfbW9zdGx5OwpAQCAtMjkyLDggJiM0MzsyOTIsNyBAQCBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgaHVnZXRsYl90b3RhbF9wYWdlcyh2b2lkKQogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW5saW5lIHN0cnVjdCBhZGRyZXNzX3NwYWNlICpodWdldGxiX2ZvbGlvX21hcHBpbmdfbG9ja193cml0ZSgKLQkJCQkJCQlzdHJ1Y3QgZm9saW8gKmZvbGlvKQomIzQzO3N0YXRpYyBpbmxpbmUgc3RydWN0IGFkZHJlc3Nfc3BhY2UgKmh1Z2V0bGJfZm9saW9fbWFwcGluZ19sb2NrX3dyaXRlKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8pCiB7CiAJcmV0dXJuIE5VTEw7CiB9CkBAIC01OTUsOCAmIzQzOzU5NCw4IEBAIGVudW0gaHVnZXRsYl9wYWdlX2ZsYWdzIHsKICNpZmRlZiBDT05GSUdfSFVHRVRMQl9QQUdFCiAjZGVmaW5lIFRFU1RIUEFHRUZMQUcodW5hbWUsIGZsbmFtZSkJCQkJXAogc3RhdGljIF9fYWx3YXlzX2lubGluZQkJCQkJCVwKLWJvb2wgZm9saW9fdGVzdF9odWdldGxiXyMjZmxuYW1lKHN0cnVjdCBmb2xpbyAqZm9saW8pCQlcCi0Jewl2b2lkICpwcml2YXRlID0gJmFtcDtmb2xpby0mZ3Q7cHJpdmF0ZTsJCVwKJiM0Mztib29sIGZvbGlvX3Rlc3RfaHVnZXRsYl8jI2ZsbmFtZShjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKQlcCiYjNDM7CXsJY29uc3Qgdm9pZCAqcHJpdmF0ZSA9ICZhbXA7Zm9saW8tJmd0O3ByaXZhdGU7CQlcCiAJCXJldHVybiB0ZXN0X2JpdChIUEdfIyNmbG5hbWUsIHByaXZhdGUpOwkJXAogCX0KIApAQCAtNjE2LDcgJiM0Mzs2MTUsNyBAQCB2b2lkIGZvbGlvX2NsZWFyX2h1Z2V0bGJfIyNmbG5hbWUoc3RydWN0IGZvbGlvICpmb2xpbykJCVwKICNlbHNlCiAjZGVmaW5lIFRFU1RIUEFHRUZMQUcodW5hbWUsIGZsbmFtZSkJCQkJXAogc3RhdGljIGlubGluZSBib29sCQkJCQkJXAotZm9saW9fdGVzdF9odWdldGxiXyMjZmxuYW1lKHN0cnVjdCBmb2xpbyAqZm9saW8pCQlcCiYjNDM7Zm9saW9fdGVzdF9odWdldGxiXyMjZmxuYW1lKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8pCQlcCiAJeyByZXR1cm4gMDsgfQogCiAjZGVmaW5lIFNFVEhQQUdFRkxBRyh1bmFtZSwgZmxuYW1lKQkJCQlcCkBAIC03MjcsNyAmIzQzOzcyNiw3IEBAIHN0YXRpYyBpbmxpbmUgc3RydWN0IGh1Z2VwYWdlX3N1YnBvb2wgKnN1YnBvb2xfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSkKIAlyZXR1cm4gSFVHRVRMQkZTX1NCKGlub2RlLSZndDtpX3NiKS0mZ3Q7c3Bvb2w7CiB9CiAKLXN0YXRpYyBpbmxpbmUgc3RydWN0IGh1Z2VwYWdlX3N1YnBvb2wgKmh1Z2V0bGJfZm9saW9fc3VicG9vbChzdHJ1Y3QgZm9saW8gKmZvbGlvKQomIzQzO3N0YXRpYyBpbmxpbmUgc3RydWN0IGh1Z2VwYWdlX3N1YnBvb2wgKmh1Z2V0bGJfZm9saW9fc3VicG9vbChjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKQogewogCXJldHVybiBmb2xpby0mZ3Q7X2h1Z2V0bGJfc3VicG9vbDsKIH0KQEAgLTg1Nyw3ICYjNDM7ODU2LDcgQEAgc3RhdGljIGlubGluZSBib29sIGFyY2hfaGFzX2h1Z2VfYm9vdG1lbV9hbGxvYyh2b2lkKQogfQogI2VuZGlmCiAKLXN0YXRpYyBpbmxpbmUgc3RydWN0IGhzdGF0ZSAqZm9saW9faHN0YXRlKHN0cnVjdCBmb2xpbyAqZm9saW8pCiYjNDM7c3RhdGljIGlubGluZSBzdHJ1Y3QgaHN0YXRlICpmb2xpb19oc3RhdGUoY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbykKIHsKIAlWTV9CVUdfT05fRk9MSU8oIWZvbGlvX3Rlc3RfaHVnZXRsYihmb2xpbyksIGZvbGlvKTsKIAlyZXR1cm4gc2l6ZV90b19oc3RhdGUoZm9saW9fc2l6ZShmb2xpbykpOwpAQCAtMTA3MCwxMSAmIzQzOzEwNjksNiBAQCB2b2lkIGh1Z2V0bGJfcmVnaXN0ZXJfbm9kZShzdHJ1Y3Qgbm9kZSAqbm9kZSk7CiB2b2lkIGh1Z2V0bGJfdW5yZWdpc3Rlcl9ub2RlKHN0cnVjdCBub2RlICpub2RlKTsKICNlbmRpZgogCi0vKgotICogQ2hlY2sgaWYgYSBnaXZlbiByYXcgQHBhZ2UgaW4gYSBodWdlcGFnZSBpcyBIV1BPSVNPTi4KLSAqLwotYm9vbCBpc19yYXdfaHdwb2lzb25fcGFnZV9pbl9odWdlcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSk7Ci0KIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBodWdlX3BhZ2VfbWFza19hbGlnbihzdHJ1Y3QgZmlsZSAqZmlsZSkKIHsKIAlyZXR1cm4gUEFHRV9NQVNLICZhbXA7IH5odWdlX3BhZ2VfbWFzayhoc3RhdGVfZmlsZShmaWxlKSk7CkBAIC0xMDg4LDcgJiM0MzsxMDgyLDcgQEAgc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGh1Z2VfcGFnZV9tYXNrX2FsaWduKHN0cnVjdCBmaWxlICpmaWxlKQogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW5saW5lIHN0cnVjdCBodWdlcGFnZV9zdWJwb29sICpodWdldGxiX2ZvbGlvX3N1YnBvb2woc3RydWN0IGZvbGlvICpmb2xpbykKJiM0MztzdGF0aWMgaW5saW5lIHN0cnVjdCBodWdlcGFnZV9zdWJwb29sICpodWdldGxiX2ZvbGlvX3N1YnBvb2woY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbykKIHsKIAlyZXR1cm4gTlVMTDsKIH0KQEAgLTExNTcsNyAmIzQzOzExNTEsNyBAQCBzdGF0aWMgaW5saW5lIHN0cnVjdCBoc3RhdGUgKmhzdGF0ZV92bWEoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpCiAJcmV0dXJuIE5VTEw7CiB9CiAKLXN0YXRpYyBpbmxpbmUgc3RydWN0IGhzdGF0ZSAqZm9saW9faHN0YXRlKHN0cnVjdCBmb2xpbyAqZm9saW8pCiYjNDM7c3RhdGljIGlubGluZSBzdHJ1Y3QgaHN0YXRlICpmb2xpb19oc3RhdGUoY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbykKIHsKIAlyZXR1cm4gTlVMTDsKIH0KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbW1fdHlwZXMuaCBiL2luY2x1ZGUvbGludXgvbW1fdHlwZXMuaAppbmRleCBiMThjMmIyZTdkMmM2NS4uODZhMmQwZmVlNTU3YmUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbW1fdHlwZXMuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L21tX3R5cGVzLmgKQEAgLTM4Nyw3ICYjNDM7Mzg3LDcgQEAgdHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBtbV9pZF90OwogICogQF9odWdldGxiX3N1YnBvb2w6IERvIG5vdCB1c2UgZGlyZWN0bHksIHVzZSBhY2Nlc3NvciBpbiBodWdldGxiLmguCiAgKiBAX2h1Z2V0bGJfY2dyb3VwOiBEbyBub3QgdXNlIGRpcmVjdGx5LCB1c2UgYWNjZXNzb3IgaW4gaHVnZXRsYl9jZ3JvdXAuaC4KICAqIEBfaHVnZXRsYl9jZ3JvdXBfcnN2ZDogRG8gbm90IHVzZSBkaXJlY3RseSwgdXNlIGFjY2Vzc29yIGluIGh1Z2V0bGJfY2dyb3VwLmguCi0gKiBAX2h1Z2V0bGJfaHdwb2lzb246IERvIG5vdCB1c2UgZGlyZWN0bHksIGNhbGwgcmF3X2h3cF9saXN0X2hlYWQoKS4KJiM0MzsgKiBAaHVnZXRsYl9od3BvaXNvbjogTGlzdCBvZiBwYWdlcyB3aXRoIGh3cG9pc29uLgogICogQF9kZWZlcnJlZF9saXN0OiBGb2xpb3MgdG8gYmUgc3BsaXQgdW5kZXIgbWVtb3J5IHByZXNzdXJlLgogICogQF91bnVzZWRfc2xhYl9vYmpfZXh0czogUGxhY2Vob2xkZXIgdG8gbWF0Y2ggb2JqX2V4dHMgaW4gc3RydWN0IHNsYWIuCiAgKgpAQCAtNDk5LDcgJiM0Mzs0OTksNyBAQCBzdHJ1Y3QgZm9saW8gewogCQkJdm9pZCAqX2h1Z2V0bGJfc3VicG9vbDsKIAkJCXZvaWQgKl9odWdldGxiX2Nncm91cDsKIAkJCXZvaWQgKl9odWdldGxiX2Nncm91cF9yc3ZkOwotCQkJdm9pZCAqX2h1Z2V0bGJfaHdwb2lzb247CiYjNDM7CQkJc3RydWN0IGh3cF9wYWdlICpodWdldGxiX2h3cG9pc29uOwogCS8qIHByaXZhdGU6IHRoZSB1bmlvbiB3aXRoIHN0cnVjdCBwYWdlIGlzIHRyYW5zaXRpb25hbCAqLwogCQl9OwogCQlzdHJ1Y3QgcGFnZSBfX3BhZ2VfMzsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oIGIvaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmgKaW5kZXggNzIyM2Y2ZjRlMmI0MDMuLjA3Y2M3ODU0YjJkZTE2IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaApAQCAtODkzLDE0ICYjNDM7ODkzLDE5IEBAIHN0YXRpYyBpbmxpbmUgaW50IFBhZ2VUcmFuc0NvbXBvdW5kKGNvbnN0IHN0cnVjdCBwYWdlICpwYWdlKQogVEVTVFBBR0VGTEFHX0ZBTFNFKFRyYW5zQ29tcG91bmQsIHRyYW5zY29tcG91bmQpCiAjZW5kaWYKIAotI2lmIGRlZmluZWQoQ09ORklHX01FTU9SWV9GQUlMVVJFKSAmYW1wOyZhbXA7IGRlZmluZWQoQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFKQomIzQzOyNpZiBkZWZpbmVkKENPTkZJR19NRU1PUllfRkFJTFVSRSkgJmFtcDsmYW1wOyBkZWZpbmVkKENPTkZJR19MQVJHRV9GT0xJTykKIC8qCi0gKiBQYWdlSGFzSFdQb2lzb25lZCBpbmRpY2F0ZXMgdGhhdCBhdCBsZWFzdCBvbmUgc3VicGFnZSBpcyBod3BvaXNvbmVkIGluIHRoZQotICogY29tcG91bmQgcGFnZS4KJiM0MzsgKiBmb2xpb19oYXNfaHdwb2lzb25lZCBpbmRpY2F0ZXMgdGhhdCBhdCBsZWFzdCBvbmUgcGFnZSBpcyBod3BvaXNvbmVkIGluIHRoZQomIzQzOyAqIGZvbGlvLiAgVGhhdCBwYWdlIHdpbGwgdXN1YWxseSBhbHNvIGhhdmUgdGhlIEhXUG9pc29uIGZsYWcgc2V0LCBidXQgdGhpcwomIzQzOyAqIGlzIG5vdCBwb3NzaWJsZSBmb3IgZm9saW9zIHdoaWNoIGhhdmUgSFZPIChzZWUgbWVtb3J5LWZhaWx1cmUgZm9yIHRoZQomIzQzOyAqIHNjaGVtZSB1c2VkIGluIHRoYXQgY2FzZSkuICBZb3UgcHJvYmFibHkgZG9uJiMzOTt0IHdhbnQgdG8gY2FsbCB0aGlzIGRpcmVjdGx5OwomIzQzOyAqIHVzZSBmb2xpb19oYXNfaHdwb2lzb25lZF9wYWdlKCkgaW5zdGVhZC4KICAqCiAgKiBUaGlzIGZsYWcgaXMgc2V0IGJ5IGh3cG9pc29uIGhhbmRsZXIuICBDbGVhcmVkIGJ5IFRIUCBzcGxpdCBvciBmcmVlIHBhZ2UuCiAgKi8KIEZPTElPX0ZMQUcoaGFzX2h3cG9pc29uZWQsIEZPTElPX1NFQ09ORF9QQUdFKQomIzQzO0ZPTElPX1RFU1RfU0VUX0ZMQUcoaGFzX2h3cG9pc29uZWQsIEZPTElPX1NFQ09ORF9QQUdFKQomIzQzO0ZPTElPX1RFU1RfQ0xFQVJfRkxBRyhoYXNfaHdwb2lzb25lZCwgRk9MSU9fU0VDT05EX1BBR0UpCiAjZWxzZQogRk9MSU9fRkxBR19GQUxTRShoYXNfaHdwb2lzb25lZCkKICNlbmRpZgpAQCAtMTA0MSw4ICYjNDM7MTA0NiwyOSBAQCBQQUdFX1RZUEVfT1BTKFNsYWIsIHNsYWIsIHNsYWIpCiAKICNpZmRlZiBDT05GSUdfSFVHRVRMQl9QQUdFCiBGT0xJT19UWVBFX09QUyhodWdldGxiLCBodWdldGxiKQomIzQzOwomIzQzOyNpZmRlZiBDT05GSUdfTUVNT1JZX0ZBSUxVUkUKJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgZm9saW9fdGVzdF9odWdlX3BvaXNvbihjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKQomIzQzO3sKJiM0MzsJcmV0dXJuIChSRUFEX09OQ0UoZm9saW8tJmd0O3BhZ2UucGFnZV90eXBlKSAmZ3Q7Jmd0OyAyMykgPT0KJiM0MzsJCSgoUEdUWV9odWdldGxiICZsdDsmbHQ7IDEpIHwgMSk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBmb2xpb19zZXRfaHVnZV9wb2lzb24oc3RydWN0IGZvbGlvICpmb2xpbykKJiM0Mzt7CiYjNDM7CWZvbGlvLSZndDtwYWdlLnBhZ2VfdHlwZSB8PSAoMSAmbHQ7Jmx0OyAyMyk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBmb2xpb19jbGVhcl9odWdlX3BvaXNvbihzdHJ1Y3QgZm9saW8gKmZvbGlvKQomIzQzO3sKJiM0MzsJZm9saW8tJmd0O3BhZ2UucGFnZV90eXBlICZhbXA7PSB+KDEgJmx0OyZsdDsgMjMpOwomIzQzO30KJiM0MzsjZWxzZQomIzQzO0ZPTElPX1RFU1RfRkxBR19GQUxTRShodWdlX3BvaXNvbikKJiM0MzsjZW5kaWYKICNlbHNlCiBGT0xJT19URVNUX0ZMQUdfRkFMU0UoaHVnZXRsYikKJiM0MztGT0xJT19URVNUX0ZMQUdfRkFMU0UoaHVnZV9wb2lzb24pCiAjZW5kaWYKIAogUEFHRV9UWVBFX09QUyhac21hbGxvYywgenNtYWxsb2MsIHpzbWFsbG9jKQpAQCAtMTA2OCwxMCAmIzQzOzEwOTQsMTQgQEAgc3RhdGljIGlubGluZSBib29sIFBhZ2VIdWdlKGNvbnN0IHN0cnVjdCBwYWdlICpwYWdlKQogCXJldHVybiBmb2xpb190ZXN0X2h1Z2V0bGIocGFnZV9mb2xpbyhwYWdlKSk7CiB9CiAKJiM0Mztib29sIGh1Z2V0bGJfcGFnZV9od3BvaXNvbihjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvLCBjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSk7CiYjNDM7Ym9vbCBodWdldGxiX3VucmVmX3BhZ2VfaHdwb2lzb24oY29uc3Qgc3RydWN0IHBhZ2UgKnBhZ2UpOwomIzQzOwogLyoKLSAqIENoZWNrIGlmIGEgcGFnZSBpcyBjdXJyZW50bHkgbWFya2VkIEhXUG9pc29uZWQuIE5vdGUgdGhhdCB0aGlzIGNoZWNrIGlzCi0gKiBiZXN0IGVmZm9ydCBvbmx5IGFuZCBpbmhlcmVudGx5IHJhY3k6IHRoZXJlIGlzIG5vIHdheSB0byBzeW5jaHJvbml6ZSB3aXRoCi0gKiBmYWlsaW5nIGhhcmR3YXJlLgomIzQzOyAqIENoZWNrIGlmIGEgcGFnZSBpcyBjdXJyZW50bHkgbWFya2VkIEhXUG9pc29uZWQuICBUaGlzIGNoZWNrIGlzIGJlc3QKJiM0MzsgKiBlZmZvcnQgb25seSBhbmQgaW5oZXJlbnRseSByYWN5OiB0aGVyZSBpcyBubyB3YXkgdG8gc3luY2hyb25pemUgd2l0aAomIzQzOyAqIGZhaWxpbmcgaGFyZHdhcmUuICBUaGUgY2FsbGVyIG1heSBub3QgaGF2ZSBhIHJlZmNvdW50IG9uIHRoZSBmb2xpbwomIzQzOyAqIGNvbnRhaW5pbmcgdGhlIHBhZ2UsIHNvIHdlIG11c3QgYmUgY2FyZWZ1bCB0byBub3QgdHJpcCBhbnkgYXNzZXJ0aW9ucy4KICAqLwogc3RhdGljIGlubGluZSBib29sIGlzX3BhZ2VfaHdwb2lzb24oY29uc3Qgc3RydWN0IHBhZ2UgKnBhZ2UpCiB7CkBAIC0xMDgwLDEzICYjNDM7MTExMCwyNiBAQCBzdGF0aWMgaW5saW5lIGJvb2wgaXNfcGFnZV9od3BvaXNvbihjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSkKIAlpZiAoUGFnZUhXUG9pc29uKHBhZ2UpKQogCQlyZXR1cm4gdHJ1ZTsKIAlmb2xpbyA9IHBhZ2VfZm9saW8ocGFnZSk7Ci0JcmV0dXJuIGZvbGlvX3Rlc3RfaHVnZXRsYihmb2xpbykgJmFtcDsmYW1wOyBQYWdlSFdQb2lzb24oJmFtcDtmb2xpby0mZ3Q7cGFnZSk7CiYjNDM7CWlmIChmb2xpb190ZXN0X2h1Z2VfcG9pc29uKGZvbGlvKSkKJiM0MzsJCXJldHVybiBodWdldGxiX3VucmVmX3BhZ2VfaHdwb2lzb24ocGFnZSk7CiYjNDM7CS8qIEluIGNhc2Ugd2UgcmFjZWQgd2l0aCBodWdldGxiIHRyYW5zZmVycmluZyBmbGFncyAqLwomIzQzOwlyZXR1cm4gUGFnZUhXUG9pc29uKHBhZ2UpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgaXNfcmVmX3BhZ2VfaHdwb2lzb24oY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbywKJiM0MzsJCWNvbnN0IHN0cnVjdCBwYWdlICpwYWdlKQomIzQzO3sKJiM0MzsJaWYgKFBhZ2VIV1BvaXNvbihwYWdlKSkKJiM0MzsJCXJldHVybiB0cnVlOwomIzQzOwlpZiAoZm9saW9fdGVzdF9odWdldGxiKGZvbGlvKSkKJiM0MzsJCXJldHVybiBodWdldGxiX3BhZ2VfaHdwb2lzb24oZm9saW8sIHBhZ2UpOwomIzQzOwlyZXR1cm4gZmFsc2U7CiB9CiAKLXN0YXRpYyBpbmxpbmUgYm9vbCBmb2xpb19jb250YWluX2h3cG9pc29uZWRfcGFnZShzdHJ1Y3QgZm9saW8gKmZvbGlvKQomIzQzO3N0YXRpYyBpbmxpbmUgYm9vbCBmb2xpb19oYXNfaHdwb2lzb25lZF9wYWdlKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8pCiB7Ci0JcmV0dXJuIGZvbGlvX3Rlc3RfaHdwb2lzb24oZm9saW8pIHx8Ci0JICAgIChmb2xpb190ZXN0X2xhcmdlKGZvbGlvKSAmYW1wOyZhbXA7IGZvbGlvX3Rlc3RfaGFzX2h3cG9pc29uZWQoZm9saW8pKTsKJiM0MzsJcmV0dXJuIFBhZ2VIV1BvaXNvbigmYW1wO2ZvbGlvLSZndDtwYWdlKSB8fAomIzQzOwkgICAgICAgKGZvbGlvX3Rlc3RfbGFyZ2UoZm9saW8pICZhbXA7JmFtcDsgZm9saW9fdGVzdF9oYXNfaHdwb2lzb25lZChmb2xpbykpOwogfQogCiBib29sIGlzX2ZyZWVfYnVkZHlfcGFnZShjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BhZ2VtYXAuaCBiL2luY2x1ZGUvbGludXgvcGFnZW1hcC5oCmluZGV4IDJjMzcxOGQ1OTJkNmRkLi4yMmQ0ODkzNWZmZGE3YyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9wYWdlbWFwLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9wYWdlbWFwLmgKQEAgLTIxMCw2ICYjNDM7MjEwLDcgQEAgZW51bSBtYXBwaW5nX2ZsYWdzIHsKIAlBU19XUklURUJBQ0tfTUFZX0RFQURMT0NLX09OX1JFQ0xBSU0gPSA5LAogCUFTX0tFUk5FTF9GSUxFID0gMTAsCS8qIG1hcHBpbmcgZm9yIGEgZmFrZSBrZXJuZWwgZmlsZSB0aGF0IHNob3VsZG4mIzM5O3QKIAkJCQkgICBhY2NvdW50IHVzYWdlIHRvIHVzZXIgY2dyb3VwcyAqLwomIzQzOwlBU19BVVRIT1JJVEFUSVZFID0gMTEsCS8qIElmIHdlIG1pc3MgaW4gdGhlIHBhZ2UgY2FjaGUsIGl0JiMzOTtzIGEgaG9sZSAqLwogCS8qIEJpdHMgMTYtMjUgYXJlIHVzZWQgZm9yIEZPTElPX09SREVSICovCiAJQVNfRk9MSU9fT1JERVJfQklUUyA9IDUsCiAJQVNfRk9MSU9fT1JERVJfTUlOID0gMTYsCkBAIC0zNDUsNiAmIzQzOzM0NiwxNiBAQCBzdGF0aWMgaW5saW5lIGJvb2wgbWFwcGluZ193cml0ZWJhY2tfbWF5X2RlYWRsb2NrX29uX3JlY2xhaW0oY29uc3Qgc3RydWN0IGFkZHJlcwogCXJldHVybiB0ZXN0X2JpdChBU19XUklURUJBQ0tfTUFZX0RFQURMT0NLX09OX1JFQ0xBSU0sICZhbXA7bWFwcGluZy0mZ3Q7ZmxhZ3MpOwogfQogCiYjNDM7c3RhdGljIGlubGluZSB2b2lkIG1hcHBpbmdfc2V0X2F1dGhvcml0YXRpdmUoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcpCiYjNDM7ewomIzQzOwlzZXRfYml0KEFTX0FVVEhPUklUQVRJVkUsICZhbXA7bWFwcGluZy0mZ3Q7ZmxhZ3MpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgbWFwcGluZ19pc19hdXRob3JpdGF0aXZlKGNvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nKQomIzQzO3sKJiM0MzsJcmV0dXJuIHRlc3RfYml0KEFTX0FVVEhPUklUQVRJVkUsICZhbXA7bWFwcGluZy0mZ3Q7ZmxhZ3MpOwomIzQzO30KJiM0MzsKIHN0YXRpYyBpbmxpbmUgZ2ZwX3QgbWFwcGluZ19nZnBfbWFzayhjb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZykKIHsKIAlyZXR1cm4gbWFwcGluZy0mZ3Q7Z2ZwX21hc2s7CkBAIC0zNzMsNyAmIzQzOzM4NCw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBtYXBwaW5nX3NldF9nZnBfbWFzayhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbSwgZ2ZwX3QgbWFzaykKICAqIGFzc3VtcHRpb25zIGFib3V0IG1heGltdW0gb3JkZXIgaWYgVEhQIGFyZSBkaXNhYmxlZCwgYnV0IDggc2VlbXMgbGlrZQogICogYSBnb29kIG9yZGVyICh0aGF0JiMzOTtzIDFNQiBpZiB5b3UmIzM5O3JlIHVzaW5nIDRrQiBwYWdlcykKICAqLwotI2lmZGVmIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRQomIzQzOyNpZmRlZiBDT05GSUdfTEFSR0VfRk9MSU8KICNkZWZpbmUgUFJFRkVSUkVEX01BWF9QQUdFQ0FDSEVfT1JERVIJSFBBR0VfUE1EX09SREVSCiAjZWxzZQogI2RlZmluZSBQUkVGRVJSRURfTUFYX1BBR0VDQUNIRV9PUkRFUgk4CkBAIC0zOTQsNyAmIzQzOzQwNSw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBtYXBwaW5nX3NldF9nZnBfbWFzayhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbSwgZ2ZwX3QgbWFzaykKICAqLwogc3RhdGljIGlubGluZSBzaXplX3QgbWFwcGluZ19tYXhfZm9saW9fc2l6ZV9zdXBwb3J0ZWQodm9pZCkKIHsKLQlpZiAoSVNfRU5BQkxFRChDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UpKQomIzQzOwlpZiAoSVNfRU5BQkxFRChDT05GSUdfTEFSR0VfRk9MSU8pKQogCQlyZXR1cm4gMVUgJmx0OyZsdDsgKFBBR0VfU0hJRlQgJiM0MzsgTUFYX1BBR0VDQUNIRV9PUkRFUik7CiAJcmV0dXJuIFBBR0VfU0laRTsKIH0KQEAgLTQwNSwyOSAmIzQzOzQxNiwyMyBAQCBzdGF0aWMgaW5saW5lIHNpemVfdCBtYXBwaW5nX21heF9mb2xpb19zaXplX3N1cHBvcnRlZCh2b2lkKQogICogQG1pbjogTWluaW11bSBmb2xpbyBvcmRlciAoYmV0d2VlbiAwLU1BWF9QQUdFQ0FDSEVfT1JERVIgaW5jbHVzaXZlKS4KICAqIEBtYXg6IE1heGltdW0gZm9saW8gb3JkZXIgKGJldHdlZW4gQG1pbi1NQVhfUEFHRUNBQ0hFX09SREVSIGluY2x1c2l2ZSkuCiAgKgotICogVGhlIGZpbGVzeXN0ZW0gc2hvdWxkIGNhbGwgdGhpcyBmdW5jdGlvbiBpbiBpdHMgaW5vZGUgY29uc3RydWN0b3IgdG8KLSAqIGluZGljYXRlIHdoaWNoIGJhc2Ugc2l6ZSAobWluKSBhbmQgbWF4aW11bSBzaXplIChtYXgpIG9mIGZvbGlvIHRoZSBWRlMKLSAqIGNhbiB1c2UgdG8gY2FjaGUgdGhlIGNvbnRlbnRzIG9mIHRoZSBmaWxlLiAgVGhpcyBzaG91bGQgb25seSBiZSB1c2VkCi0gKiBpZiB0aGUgZmlsZXN5c3RlbSBuZWVkcyBzcGVjaWFsIGhhbmRsaW5nIG9mIGZvbGlvIHNpemVzIChpZSB0aGVyZSBpcwotICogc29tZXRoaW5nIHRoZSBjb3JlIGNhbm5vdCBrbm93KS4KJiM0MzsgKiBUaGUgZmlsZXN5c3RlbSBzaG91bGQgY2FsbCB0aGlzIGZ1bmN0aW9uIGluIGl0cyBpbm9kZSBjb25zdHJ1Y3RvcgomIzQzOyAqIHRvIGluZGljYXRlIHdoaWNoIHNpemUgZm9saW9zIGNhbiBiZSB1c2VkIHRvIGNhY2hlIHRoZSBjb250ZW50cyBvZgomIzQzOyAqIHRoZSBpbm9kZS4gIFRoaXMgc2hvdWxkIG9ubHkgYmUgdXNlZCBpZiB0aGUgZmlsZXN5c3RlbSBuZWVkcyBzcGVjaWFsCiYjNDM7ICogaGFuZGxpbmcgb2YgZm9saW8gc2l6ZXMgKGllIHRoZXJlIGlzIHNvbWV0aGluZyB0aGUgY29yZSBjYW5ub3Qga25vdykuCiAgKiBEbyBub3QgdHVuZSBpdCBiYXNlZCBvbiwgZWcsIGlfc2l6ZS4KICAqCiYjNDM7ICogaHVnZXRsYiBjYWxscyB0aGlzIHdpdGggb3JkZXJzIGxhcmdlciB0aGFuIE1BWF9QQUdFQ0FDSEVfT1JERVIuCiYjNDM7ICogTm9ybWFsIGZpbGVzeXN0ZW1zIHNob3VsZCBub3QgZG8gdGhpcy4KJiM0MzsgKgogICogQ29udGV4dDogVGhpcyBzaG91bGQgbm90IGJlIGNhbGxlZCB3aGlsZSB0aGUgaW5vZGUgaXMgYWN0aXZlIGFzIGl0CiAgKiBpcyBub24tYXRvbWljLgogICovCiBzdGF0aWMgaW5saW5lIHZvaWQgbWFwcGluZ19zZXRfZm9saW9fb3JkZXJfcmFuZ2Uoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsCi0JCQkJCQkgdW5zaWduZWQgaW50IG1pbiwKLQkJCQkJCSB1bnNpZ25lZCBpbnQgbWF4KQomIzQzOwkJdW5zaWduZWQgaW50IG1pbiwgdW5zaWduZWQgaW50IG1heCkKIHsKLQlpZiAoIUlTX0VOQUJMRUQoQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFKSkKJiM0MzsJaWYgKCFJU19FTkFCTEVEKENPTkZJR19MQVJHRV9GT0xJTykpCiAJCXJldHVybjsKLQotCWlmIChtaW4gJmd0OyBNQVhfUEFHRUNBQ0hFX09SREVSKQotCQltaW4gPSBNQVhfUEFHRUNBQ0hFX09SREVSOwotCi0JaWYgKG1heCAmZ3Q7IE1BWF9QQUdFQ0FDSEVfT1JERVIpCi0JCW1heCA9IE1BWF9QQUdFQ0FDSEVfT1JERVI7Ci0KIAlpZiAobWF4ICZsdDsgbWluKQogCQltYXggPSBtaW47CiAKQEAgLTQ2MCw3ICYjNDM7NDY1LDcgQEAgc3RhdGljIGlubGluZSB2b2lkIG1hcHBpbmdfc2V0X2xhcmdlX2ZvbGlvcyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZykKIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50CiBtYXBwaW5nX21heF9mb2xpb19vcmRlcihjb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZykKIHsKLQlpZiAoIUlTX0VOQUJMRUQoQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFKSkKJiM0MzsJaWYgKCFJU19FTkFCTEVEKENPTkZJR19MQVJHRV9GT0xJTykpCiAJCXJldHVybiAwOwogCXJldHVybiAobWFwcGluZy0mZ3Q7ZmxhZ3MgJmFtcDsgQVNfRk9MSU9fT1JERVJfTUFYX01BU0spICZndDsmZ3Q7IEFTX0ZPTElPX09SREVSX01BWDsKIH0KQEAgLTQ2OCw3ICYjNDM7NDczLDcgQEAgbWFwcGluZ19tYXhfZm9saW9fb3JkZXIoY29uc3Qgc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcpCiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludAogbWFwcGluZ19taW5fZm9saW9fb3JkZXIoY29uc3Qgc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcpCiB7Ci0JaWYgKCFJU19FTkFCTEVEKENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSkpCiYjNDM7CWlmICghSVNfRU5BQkxFRChDT05GSUdfTEFSR0VfRk9MSU8pKQogCQlyZXR1cm4gMDsKIAlyZXR1cm4gKG1hcHBpbmctJmd0O2ZsYWdzICZhbXA7IEFTX0ZPTElPX09SREVSX01JTl9NQVNLKSAmZ3Q7Jmd0OyBBU19GT0xJT19PUkRFUl9NSU47CiB9CkBAIC01MjQsNyAmIzQzOzUyOSw3IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBtYXBwaW5nX2xhcmdlX2ZvbGlvX3N1cHBvcnQoY29uc3Qgc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpCiAgKgogICogUmV0dXJuOiBUcnVlIGlmIFBNRC1zaXplZCBmb2xpb3MgYXJlIHN1cHBvcnRlZCwgb3RoZXJ3aXNlIGZhbHNlLgogICovCi0jaWZkZWYgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFCiYjNDM7I2lmZGVmIENPTkZJR19MQVJHRV9GT0xJTwogc3RhdGljIGlubGluZSBib29sIG1hcHBpbmdfcG1kX2ZvbGlvX3N1cHBvcnQoY29uc3Qgc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcpCiB7CiAJLyogQVNfRk9MSU9fT1JERVIgaXMgb25seSByZWFzb25hYmxlIGZvciBwYWdlY2FjaGUgZm9saW9zICovCmRpZmYgLS1naXQgYS9tbS9LY29uZmlnIGIvbW0vS2NvbmZpZwppbmRleCA5ZTBjYTQ4MjQ5MDU0Zi4uZTY2NmRkMTRjYTBjM2QgMTAwNjQ0Ci0tLSBhL21tL0tjb25maWcKJiM0MzsmIzQzOyYjNDM7IGIvbW0vS2NvbmZpZwpAQCAtODQzLDExICYjNDM7ODQzLDE1IEBAIGNvbmZpZyBQRVJTSVNURU5UX0hVR0VfWkVST19GT0xJTwogY29uZmlnIE1NX0lECiAJZGVmX2Jvb2wgbgogCiYjNDM7Y29uZmlnIExBUkdFX0ZPTElPCiYjNDM7CWRlZl9ib29sIG4KJiM0MzsJc2VsZWN0IFhBUlJBWV9NVUxUSQomIzQzOwogbWVudWNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRQogCWJvb2wgJiMzNDtUcmFuc3BhcmVudCBIdWdlcGFnZSBTdXBwb3J0JiMzNDsKIAlkZXBlbmRzIG9uIEhBVkVfQVJDSF9UUkFOU1BBUkVOVF9IVUdFUEFHRSAmYW1wOyZhbXA7ICFQUkVFTVBUX1JUCiAJc2VsZWN0IENPTVBBQ1RJT04KLQlzZWxlY3QgWEFSUkFZX01VTFRJCiYjNDM7CXNlbGVjdCBMQVJHRV9GT0xJTwogCXNlbGVjdCBNTV9JRAogCWhlbHAKIAkgIFRyYW5zcGFyZW50IEh1Z2VwYWdlcyBhbGxvd3MgdGhlIGtlcm5lbCB0byB1c2UgaHVnZSBwYWdlcyBhbmQKZGlmZiAtLWdpdCBhL21tL2ZpbGVtYXAuYyBiL21tL2ZpbGVtYXAuYwppbmRleCA1OGViOWQyNDA2NDM0OC4uNWE4Y2MyMGU2MjRlNGQgMTAwNjQ0Ci0tLSBhL21tL2ZpbGVtYXAuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9maWxlbWFwLmMKQEAgLTI0ODMsNiAmIzQzOzI0ODMsOCBAQCBzdGF0aWMgdm9pZCBmaWxlbWFwX2dldF9yZWFkX2JhdGNoKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLAogCiAJCWlmICghZm9saW9fYmF0Y2hfYWRkKGZiYXRjaCwgZm9saW8pKQogCQkJYnJlYWs7CiYjNDM7CQlpZiAoZm9saW9faGFzX2h3cG9pc29uZWRfcGFnZShmb2xpbykpCiYjNDM7CQkJYnJlYWs7CiAJCWlmICghZm9saW9fdGVzdF91cHRvZGF0ZShmb2xpbykpCiAJCQlicmVhazsKIAkJaWYgKGZvbGlvX3Rlc3RfcmVhZGFoZWFkKGZvbGlvKSkKQEAgLTI2OTUsNiAmIzQzOzI2OTcsOCBAQCBzdGF0aWMgaW50IGZpbGVtYXBfZ2V0X3BhZ2VzKHN0cnVjdCBraW9jYiAqaW9jYiwgc2l6ZV90IGNvdW50LAogCWlmICghZm9saW9fYmF0Y2hfY291bnQoZmJhdGNoKSkgewogCQlERUZJTkVfUkVBREFIRUFEKHJhY3RsLCBmaWxwLCAmYW1wO2ZpbHAtJmd0O2ZfcmEsIG1hcHBpbmcsIGluZGV4KTsKIAomIzQzOwkJaWYgKG1hcHBpbmdfaXNfYXV0aG9yaXRhdGl2ZShtYXBwaW5nKSkKJiM0MzsJCQlyZXR1cm4gMDsKIAkJaWYgKGlvY2ItJmd0O2tpX2ZsYWdzICZhbXA7IElPQ0JfTk9JTykKIAkJCXJldHVybiAtRUFHQUlOOwogCQlpZiAoaW9jYi0mZ3Q7a2lfZmxhZ3MgJmFtcDsgSU9DQl9OT1dBSVQpCkBAIC0yNzQ5LDYgJiM0MzsyNzUzLDI5IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBwb3Nfc2FtZV9mb2xpbyhsb2ZmX3QgcG9zMSwgbG9mZl90IHBvczIsIHN0cnVjdCBmb2xpbyAqZm9saW8pCiAJcmV0dXJuIChwb3MxICZndDsmZ3Q7IHNoaWZ0ID09IHBvczIgJmd0OyZndDsgc2hpZnQpOwogfQogCiYjNDM7c3RhdGljIHNpemVfdCBhZGp1c3RfcmFuZ2VfaHdwb2lzb24oY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbywgc2l6ZV90IG9mZnNldCwKJiM0MzsJCXNpemVfdCBieXRlcykKJiM0Mzt7CiYjNDM7CWNvbnN0IHN0cnVjdCBwYWdlICpwYWdlID0gZm9saW9fcGFnZShmb2xpbywgb2Zmc2V0IC8gUEFHRV9TSVpFKTsKJiM0MzsJc2l6ZV90IHNhZmVfYnl0ZXM7CiYjNDM7CiYjNDM7CWlmICghZm9saW9faGFzX2h3cG9pc29uZWRfcGFnZShmb2xpbykpCiYjNDM7CQlyZXR1cm4gYnl0ZXM7CiYjNDM7CWlmIChpc19yZWZfcGFnZV9od3BvaXNvbihmb2xpbywgcGFnZSkpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJLyogU2FmZSB0byByZWFkIHRoZSByZW1haW5pbmcgYnl0ZXMgaW4gdGhpcyBwYWdlLiAqLwomIzQzOwlzYWZlX2J5dGVzID0gUEFHRV9TSVpFIC0gKG9mZnNldCAlIFBBR0VfU0laRSk7CiYjNDM7CXBhZ2UmIzQzOyYjNDM7OwomIzQzOwomIzQzOwkvKiBDaGVjayBlYWNoIHJlbWFpbmluZyBwYWdlIGFzIGxvbmcgYXMgd2UgYXJlIG5vdCBkb25lIHlldC4gKi8KJiM0MzsJZm9yICg7IHNhZmVfYnl0ZXMgJmx0OyBieXRlczsgc2FmZV9ieXRlcyAmIzQzOz0gUEFHRV9TSVpFLCBwYWdlJiM0MzsmIzQzOykKJiM0MzsJCWlmIChpc19yZWZfcGFnZV9od3BvaXNvbihmb2xpbywgcGFnZSkpCiYjNDM7CQkJYnJlYWs7CiYjNDM7CiYjNDM7CXJldHVybiBtaW4oc2FmZV9ieXRlcywgYnl0ZXMpOwomIzQzO30KJiM0MzsKIHN0YXRpYyB2b2lkIGZpbGVtYXBfZW5kX2Ryb3BiZWhpbmRfcmVhZChzdHJ1Y3QgZm9saW8gKmZvbGlvKQogewogCWlmICghZm9saW9fdGVzdF9kcm9wYmVoaW5kKGZvbGlvKSkKQEAgLTI4MjgsNiAmIzQzOzI4NTUsMjIgQEAgc3NpemVfdCBmaWxlbWFwX3JlYWQoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsCiAJCQlnb3RvIHB1dF9mb2xpb3M7CiAJCWVuZF9vZmZzZXQgPSBtaW5fdChsb2ZmX3QsIGlzaXplLCBpb2NiLSZndDtraV9wb3MgJiM0MzsgaXRlci0mZ3Q7Y291bnQpOwogCiYjNDM7CQlpZiAoIWZvbGlvX2JhdGNoX2NvdW50KCZhbXA7ZmJhdGNoKSkgewomIzQzOwkJCXNpemVfdCBmc2l6ZSA9IG1hcHBpbmdfbWluX2ZvbGlvX25yYnl0ZXMobWFwcGluZyk7CiYjNDM7CQkJc2l6ZV90IG9mZnNldCA9IGlvY2ItJmd0O2tpX3BvcyAmYW1wOyAoZnNpemUgLSAxKTsKJiM0MzsJCQlzaXplX3QgYnl0ZXMgPSBtaW5fdChsb2ZmX3QsIGVuZF9vZmZzZXQgLSBpb2NiLSZndDtraV9wb3MsCiYjNDM7CQkJCQkgICAgIGZzaXplIC0gb2Zmc2V0KTsKJiM0MzsJCQlzaXplX3QgY29waWVkID0gaW92X2l0ZXJfemVybyhieXRlcywgaXRlcik7CiYjNDM7CiYjNDM7CQkJYWxyZWFkeV9yZWFkICYjNDM7PSBjb3BpZWQ7CiYjNDM7CQkJaW9jYi0mZ3Q7a2lfcG9zICYjNDM7PSBjb3BpZWQ7CiYjNDM7CQkJbGFzdF9wb3MgPSBpb2NiLSZndDtraV9wb3M7CiYjNDM7CiYjNDM7CQkJaWYgKGNvcGllZCAmbHQ7IGJ5dGVzKQomIzQzOwkJCQllcnJvciA9IC1FRkFVTFQ7CiYjNDM7CQkJY29udGludWU7CiYjNDM7CQl9CiYjNDM7CiAJCS8qCiAJCSAqIE9uY2Ugd2Ugc3RhcnQgY29weWluZyBkYXRhLCB3ZSBkb24mIzM5O3Qgd2FudCB0byBiZSB0b3VjaGluZyBhbnkKIAkJICogY2FjaGVsaW5lcyB0aGF0IG1pZ2h0IGJlIGNvbnRlbmRlZDoKQEAgLTI4NjIsMTQgJiM0MzsyOTA1LDE4IEBAIHNzaXplX3QgZmlsZW1hcF9yZWFkKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICppdGVyLAogCQkJaWYgKHdyaXRhYmx5X21hcHBlZCkKIAkJCQlmbHVzaF9kY2FjaGVfZm9saW8oZm9saW8pOwogCi0JCQljb3BpZWQgPSBjb3B5X2ZvbGlvX3RvX2l0ZXIoZm9saW8sIG9mZnNldCwgYnl0ZXMsIGl0ZXIpOwomIzQzOwkJCWNvcGllZCA9IGFkanVzdF9yYW5nZV9od3BvaXNvbihmb2xpbywgb2Zmc2V0LCBieXRlcyk7CiYjNDM7CQkJaWYgKGNvcGllZCAmbHQ7IGJ5dGVzKQomIzQzOwkJCQllcnJvciA9IC1FSU87CiYjNDM7CQkJY29waWVkID0gY29weV9mb2xpb190b19pdGVyKGZvbGlvLCBvZmZzZXQsIGNvcGllZCwgaXRlcik7CiAKIAkJCWFscmVhZHlfcmVhZCAmIzQzOz0gY29waWVkOwogCQkJaW9jYi0mZ3Q7a2lfcG9zICYjNDM7PSBjb3BpZWQ7CiAJCQlsYXN0X3BvcyA9IGlvY2ItJmd0O2tpX3BvczsKIAogCQkJaWYgKGNvcGllZCAmbHQ7IGJ5dGVzKSB7Ci0JCQkJZXJyb3IgPSAtRUZBVUxUOwomIzQzOwkJCQlpZiAoIWVycm9yKQomIzQzOwkJCQkJZXJyb3IgPSAtRUZBVUxUOwogCQkJCWJyZWFrOwogCQkJfQogCQl9CmRpZmYgLS1naXQgYS9tbS9odWdlX21lbW9yeS5jIGIvbW0vaHVnZV9tZW1vcnkuYwppbmRleCAyYmNjYjBhNTNhMGE2MC4uMzUzMzQwMzA5MTA3NGMgMTAwNjQ0Ci0tLSBhL21tL2h1Z2VfbWVtb3J5LmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vaHVnZV9tZW1vcnkuYwpAQCAtNDQxMyw3ICYjNDM7NDQxMyw3IEBAIHN0YXRpYyBib29sIHRocF91bmRlcnVzZWQoc3RydWN0IGZvbGlvICpmb2xpbykKIAlpZiAoa2h1Z2VwYWdlZF9tYXhfcHRlc19ub25lID09IEhQQUdFX1BNRF9OUiAtIDEpCiAJCXJldHVybiBmYWxzZTsKIAotCWlmIChmb2xpb19jb250YWluX2h3cG9pc29uZWRfcGFnZShmb2xpbykpCiYjNDM7CWlmIChmb2xpb19oYXNfaHdwb2lzb25lZF9wYWdlKGZvbGlvKSkKIAkJcmV0dXJuIGZhbHNlOwogCiAJZm9yIChpID0gMDsgaSAmbHQ7IGZvbGlvX25yX3BhZ2VzKGZvbGlvKTsgaSYjNDM7JiM0MzspIHsKZGlmZiAtLWdpdCBhL21tL2h1Z2V0bGIuYyBiL21tL2h1Z2V0bGIuYwppbmRleCA1NzEyMTJiODA4MzVlYy4uYWFhYzZlMmFmNGMyNGEgMTAwNjQ0Ci0tLSBhL21tL2h1Z2V0bGIuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9odWdldGxiLmMKQEAgLTEyNTUsNyAmIzQzOzEyNTUsNyBAQCBzdGF0aWMgc3RydWN0IGZvbGlvICpkZXF1ZXVlX2h1Z2V0bGJfZm9saW9fbm9kZV9leGFjdChzdHJ1Y3QgaHN0YXRlICpoLAogCQlpZiAocGluICZhbXA7JmFtcDsgIWZvbGlvX2lzX2xvbmd0ZXJtX3Bpbm5hYmxlKGZvbGlvKSkKIAkJCWNvbnRpbnVlOwogCi0JCWlmIChmb2xpb190ZXN0X2h3cG9pc29uKGZvbGlvKSkKJiM0MzsJCWlmIChmb2xpb190ZXN0X2hhc19od3BvaXNvbmVkKGZvbGlvKSkKIAkJCWNvbnRpbnVlOwogCiAJCWlmIChpc19taWdyYXRlX2lzb2xhdGVfcGFnZSgmYW1wO2ZvbGlvLSZndDtwYWdlKSkKQEAgLTE0OTgsMTAgJiM0MzsxNDk4LDEwIEBAIHN0YXRpYyB2b2lkIF9fdXBkYXRlX2FuZF9mcmVlX2h1Z2V0bGJfZm9saW8oc3RydWN0IGhzdGF0ZSAqaCwKIAl9CiAKIAkvKgotCSAqIE1vdmUgUGFnZUhXUG9pc29uIGZsYWcgZnJvbSBoZWFkIHBhZ2UgdG8gdGhlIHJhdyBlcnJvciBwYWdlcywKLQkgKiB3aGljaCBtYWtlcyBhbnkgaGVhbHRoeSBzdWJwYWdlcyByZXVzYWJsZS4KJiM0MzsJICogTW92ZSBIV1BvaXNvbiBmbGFnIHRvIGVhY2ggZXJyb3IgcGFnZQomIzQzOwkgKiB3aGljaCBtYWtlcyBhbnkgaGVhbHRoeSBwYWdlcyByZXVzYWJsZS4KIAkgKi8KLQlpZiAodW5saWtlbHkoZm9saW9fdGVzdF9od3BvaXNvbihmb2xpbykpKQomIzQzOwlpZiAodW5saWtlbHkoZm9saW9fdGVzdF9oYXNfaHdwb2lzb25lZChmb2xpbykpKQogCQlmb2xpb19jbGVhcl9odWdldGxiX2h3cG9pc29uKGZvbGlvKTsKIAogCVZNX0JVR19PTl9GT0xJTyhmb2xpb19yZWZfY291bnQoZm9saW8pLCBmb2xpbyk7CkBAIC0xNzc1LDcgJiM0MzsxNzc1LDcgQEAgdm9pZCBpbml0X25ld19odWdldGxiX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8pCiAgKiBzdGFibGUuICBEdWUgdG8gbG9ja2luZyBvcmRlciwgd2UgY2FuIG9ubHkgdHJ5bG9ja193cml0ZS4gIElmIHdlIGNhbgogICogbm90IGdldCB0aGUgbG9jaywgc2ltcGx5IHJldHVybiBOVUxMIHRvIGNhbGxlci4KICAqLwotc3RydWN0IGFkZHJlc3Nfc3BhY2UgKmh1Z2V0bGJfZm9saW9fbWFwcGluZ19sb2NrX3dyaXRlKHN0cnVjdCBmb2xpbyAqZm9saW8pCiYjNDM7c3RydWN0IGFkZHJlc3Nfc3BhY2UgKmh1Z2V0bGJfZm9saW9fbWFwcGluZ19sb2NrX3dyaXRlKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8pCiB7CiAJc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcgPSBmb2xpb19tYXBwaW5nKGZvbGlvKTsKIApAQCAtMzk5OCw3ICYjNDM7Mzk5OCw3IEBAIGxvbmcgZGVtb3RlX3Bvb2xfaHVnZV9wYWdlKHN0cnVjdCBoc3RhdGUgKnNyYywgbm9kZW1hc2tfdCAqbm9kZXNfYWxsb3dlZCwKIAkJc3RydWN0IGZvbGlvICpmb2xpbywgKm5leHQ7CiAKIAkJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGZvbGlvLCBuZXh0LCAmYW1wO3NyYy0mZ3Q7aHVnZXBhZ2VfZnJlZWxpc3RzW25vZGVdLCBscnUpIHsKLQkJCWlmIChmb2xpb190ZXN0X2h3cG9pc29uKGZvbGlvKSkKJiM0MzsJCQlpZiAoZm9saW9fdGVzdF9oYXNfaHdwb2lzb25lZChmb2xpbykpCiAJCQkJY29udGludWU7CiAKIAkJCXJlbW92ZV9odWdldGxiX2ZvbGlvKHNyYywgZm9saW8sIGZhbHNlKTsKQEAgLTU4MDksNyAmIzQzOzU4MDksNyBAQCBzdGF0aWMgdm1fZmF1bHRfdCBodWdldGxiX25vX3BhZ2Uoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsCiAJCSAqIGRvbiYjMzk7dCBoYXZlIGh3cG9pc29uZWQgc3dhcCBlbnRyeSBmb3IgZXJyb3JlZCB2aXJ0dWFsIGFkZHJlc3MuCiAJCSAqIFNvIHdlIG5lZWQgdG8gYmxvY2sgaHVnZXBhZ2UgZmF1bHQgYnkgUEdfaHdwb2lzb24gYml0IGNoZWNrLgogCQkgKi8KLQkJaWYgKHVubGlrZWx5KGZvbGlvX3Rlc3RfaHdwb2lzb24oZm9saW8pKSkgewomIzQzOwkJaWYgKHVubGlrZWx5KGZvbGlvX3Rlc3RfaGFzX2h3cG9pc29uZWQoZm9saW8pKSkgewogCQkJcmV0ID0gVk1fRkFVTFRfSFdQT0lTT05fTEFSR0UgfAogCQkJCVZNX0ZBVUxUX1NFVF9ISU5ERVgoaHN0YXRlX2luZGV4KGgpKTsKIAkJCWdvdG8gYmFja291dF91bmxvY2tlZDsKQEAgLTYzMTgsNyAmIzQzOzYzMTgsNyBAQCBpbnQgaHVnZXRsYl9tZmlsbF9hdG9taWNfcHRlKHB0ZV90ICpkc3RfcHRlLAogCXB0bCA9IGh1Z2VfcHRlX2xvY2soaCwgZHN0X21tLCBkc3RfcHRlKTsKIAogCXJldCA9IC1FSU87Ci0JaWYgKGZvbGlvX3Rlc3RfaHdwb2lzb24oZm9saW8pKQomIzQzOwlpZiAoZm9saW9fdGVzdF9oYXNfaHdwb2lzb25lZChmb2xpbykpCiAJCWdvdG8gb3V0X3JlbGVhc2VfdW5sb2NrOwogCiAJcmV0ID0gLUVFWElTVDsKZGlmZiAtLWdpdCBhL21tL21lbW9yeS1mYWlsdXJlLmMgYi9tbS9tZW1vcnktZmFpbHVyZS5jCmluZGV4IDUxNTA4YTU1YzQwNTVlLi4zMmY5MTkzNWIyMTA3MCAxMDA2NDQKLS0tIGEvbW0vbWVtb3J5LWZhaWx1cmUuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9tZW1vcnktZmFpbHVyZS5jCkBAIC0xODA4LDYzICYjNDM7MTgwOCw4NiBAQCBFWFBPUlRfU1lNQk9MX0dQTChtZl9kYXhfa2lsbF9wcm9jcyk7CiAKICNpZmRlZiBDT05GSUdfSFVHRVRMQl9QQUdFCiAKJiM0MzsvKiBQcm90ZWN0cyBhbGwgbGlzdHMgb2YgaHdwX3BhZ2VzICovCiYjNDM7c3RhdGljIERFRklORV9TUElOTE9DSyhod3BfcGFnZV9sb2NrKTsKJiM0MzsKIC8qCi0gKiBTdHJ1Y3QgcmF3X2h3cF9wYWdlIHJlcHJlc2VudHMgaW5mb3JtYXRpb24gYWJvdXQgJiMzNDtyYXcgZXJyb3IgcGFnZSYjMzQ7LAotICogY29uc3RydWN0aW5nIHNpbmdseSBsaW5rZWQgbGlzdCBmcm9tIC0mZ3Q7X2h1Z2V0bGJfaHdwb2lzb24gZmllbGQgb2YgZm9saW8uCiYjNDM7ICogaHdwX3BhZ2UgcmVwcmVzZW50cyBpbmZvcm1hdGlvbiBhYm91dCAmIzM0O2Vycm9yIHBhZ2UmIzM0OywKJiM0MzsgKiBjb25zdHJ1Y3Rpbmcgc2luZ2x5IGxpbmtlZCBsaXN0IGZyb20gZm9saW8tJmd0O2h1Z2V0bGJfaHdwb2lzb24gZmllbGQuCiAgKi8KLXN0cnVjdCByYXdfaHdwX3BhZ2UgewotCXN0cnVjdCBsbGlzdF9ub2RlIG5vZGU7CiYjNDM7c3RydWN0IGh3cF9wYWdlIHsKJiM0MzsJc3RydWN0IGh3cF9wYWdlICpuZXh0OwogCXN0cnVjdCBwYWdlICpwYWdlOwogfTsKIAotc3RhdGljIGlubGluZSBzdHJ1Y3QgbGxpc3RfaGVhZCAqcmF3X2h3cF9saXN0X2hlYWQoc3RydWN0IGZvbGlvICpmb2xpbykKJiM0MztzdGF0aWMgYm9vbCBwcmVjaXNlX3BhZ2VfcG9pc29uZWQoY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbywKJiM0MzsJCWNvbnN0IHN0cnVjdCBwYWdlICpwYWdlKQogewotCXJldHVybiAoc3RydWN0IGxsaXN0X2hlYWQgKikmYW1wO2ZvbGlvLSZndDtfaHVnZXRsYl9od3BvaXNvbjsKLX0KLQotYm9vbCBpc19yYXdfaHdwb2lzb25fcGFnZV9pbl9odWdlcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSkKLXsKLQlzdHJ1Y3QgbGxpc3RfaGVhZCAqcmF3X2h3cF9oZWFkOwotCXN0cnVjdCByYXdfaHdwX3BhZ2UgKnA7Ci0Jc3RydWN0IGZvbGlvICpmb2xpbyA9IHBhZ2VfZm9saW8ocGFnZSk7Ci0JYm9vbCByZXQgPSBmYWxzZTsKLQotCWlmICghZm9saW9fdGVzdF9od3BvaXNvbihmb2xpbykpCi0JCXJldHVybiBmYWxzZTsKLQotCWlmICghZm9saW9fdGVzdF9odWdldGxiKGZvbGlvKSkKLQkJcmV0dXJuIFBhZ2VIV1BvaXNvbihwYWdlKTsKJiM0MzsJY29uc3Qgc3RydWN0IGh3cF9wYWdlICpwOwomIzQzOwl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJLyoKLQkgKiBXaGVuIFJhd0h3cFVucmVsaWFibGUgaXMgc2V0LCBrZXJuZWwgbG9zdCB0cmFjayBvZiB3aGljaCBzdWJwYWdlcwotCSAqIGFyZSBIV1BPSVNPTi4gU28gcmV0dXJuIGFzIGlmIEFMTCBzdWJwYWdlcyBhcmUgSFdQT0lTT05lZC4KJiM0MzsJICogV2hlbiBSYXdId3BVbnJlbGlhYmxlIGlzIHNldCwga2VybmVsIGxvc3QgdHJhY2sgb2Ygd2hpY2ggcGFnZXMKJiM0MzsJICogYXJlIEhXUE9JU09OLiBTbyByZXR1cm4gYXMgaWYgQUxMIHBhZ2VzIGFyZSBIV1BPSVNPTmVkLgogCSAqLwogCWlmIChmb2xpb190ZXN0X2h1Z2V0bGJfcmF3X2h3cF91bnJlbGlhYmxlKGZvbGlvKSkKIAkJcmV0dXJuIHRydWU7CiAKLQltdXRleF9sb2NrKCZhbXA7bWZfbXV0ZXgpOwotCi0JcmF3X2h3cF9oZWFkID0gcmF3X2h3cF9saXN0X2hlYWQoZm9saW8pOwotCWxsaXN0X2Zvcl9lYWNoX2VudHJ5KHAsIHJhd19od3BfaGVhZC0mZ3Q7Zmlyc3QsIG5vZGUpIHsKLQkJaWYgKHBhZ2UgPT0gcC0mZ3Q7cGFnZSkgewotCQkJcmV0ID0gdHJ1ZTsKJiM0MzsJc3Bpbl9sb2NrX2lycXNhdmUoJmFtcDtod3BfcGFnZV9sb2NrLCBmbGFncyk7CiYjNDM7CWZvciAocCA9IGZvbGlvLSZndDtodWdldGxiX2h3cG9pc29uOyBwOyBwID0gcC0mZ3Q7bmV4dCkgewomIzQzOwkJaWYgKHBhZ2UgPT0gcC0mZ3Q7cGFnZSkKIAkJCWJyZWFrOwotCQl9CiAJfQomIzQzOwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhbXA7aHdwX3BhZ2VfbG9jaywgZmxhZ3MpOwogCi0JbXV0ZXhfdW5sb2NrKCZhbXA7bWZfbXV0ZXgpOwomIzQzOwlyZXR1cm4gcCAhPSBOVUxMOwomIzQzO30KIAomIzQzOy8qCiYjNDM7ICogQ2hlY2sgaWYgYSBnaXZlbiBAcGFnZSBpbiBhIGh1Z2V0bGIgZm9saW8gaXMgSFdQT0lTT04uCiYjNDM7ICovCiYjNDM7Ym9vbCBodWdldGxiX3BhZ2VfaHdwb2lzb24oY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbywgY29uc3Qgc3RydWN0IHBhZ2UgKnBhZ2UpCiYjNDM7ewomIzQzOwlpZiAoIWZvbGlvX3Rlc3RfaGFzX2h3cG9pc29uZWQoZm9saW8pKQomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwomIzQzOwlyZXR1cm4gcHJlY2lzZV9wYWdlX3BvaXNvbmVkKGZvbGlvLCBwYWdlKTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBXZSBoYXZlIG5vIHJlZmVyZW5jZSBvbiB0aGUgZm9saW8gY29udGFpbmluZyB0aGlzIHBhZ2UuCiYjNDM7ICogVGhlIGh1Z2V0bGJfbG9jayBrZWVwcyBodWdldGxiIGZvbGlvcyBmcm9tIGJlaW5nIGZyZWVkLgomIzQzOyAqLwomIzQzO2Jvb2wgaHVnZXRsYl91bnJlZl9wYWdlX2h3cG9pc29uKGNvbnN0IHN0cnVjdCBwYWdlICpwYWdlKQomIzQzO3sKJiM0MzsJY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbzsKJiM0MzsJdW5zaWduZWQgbG9uZyBmbGFnczsKJiM0MzsJYm9vbCByZXQ7CiYjNDM7CiYjNDM7CXNwaW5fbG9ja19pcnFzYXZlKCZhbXA7aHVnZXRsYl9sb2NrLCBmbGFncyk7CiYjNDM7CWZvbGlvID0gcGFnZV9mb2xpbyhwYWdlKTsKJiM0MzsJaWYgKCFmb2xpb190ZXN0X2h1Z2VfcG9pc29uKGZvbGlvKSkgewomIzQzOwkJcmV0ID0gUGFnZUhXUG9pc29uKHBhZ2UpOwomIzQzOwkJZ290byB1bmxvY2s7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0ID0gcHJlY2lzZV9wYWdlX3BvaXNvbmVkKGZvbGlvLCBwYWdlKTsKJiM0Mzt1bmxvY2s6CiYjNDM7CXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFtcDtodWdldGxiX2xvY2ssIGZsYWdzKTsKIAlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgdW5zaWduZWQgbG9uZyBfX2ZvbGlvX2ZyZWVfcmF3X2h3cChzdHJ1Y3QgZm9saW8gKmZvbGlvLCBib29sIG1vdmVfZmxhZykKIHsKLQlzdHJ1Y3QgbGxpc3Rfbm9kZSAqaGVhZDsKLQlzdHJ1Y3QgcmF3X2h3cF9wYWdlICpwLCAqbmV4dDsKJiM0MzsJc3RydWN0IGh3cF9wYWdlICpwLCAqbmV4dDsKIAl1bnNpZ25lZCBsb25nIGNvdW50ID0gMDsKIAotCWhlYWQgPSBsbGlzdF9kZWxfYWxsKHJhd19od3BfbGlzdF9oZWFkKGZvbGlvKSk7Ci0JbGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShwLCBuZXh0LCBoZWFkLCBub2RlKSB7CiYjNDM7CW5leHQgPSBmb2xpby0mZ3Q7aHVnZXRsYl9od3BvaXNvbjsKJiM0MzsJZm9saW8tJmd0O2h1Z2V0bGJfaHdwb2lzb24gPSBOVUxMOwomIzQzOwomIzQzOwl3aGlsZSAobmV4dCkgewomIzQzOwkJcCA9IG5leHQ7CiYjNDM7CQluZXh0ID0gcC0mZ3Q7bmV4dDsKIAkJaWYgKG1vdmVfZmxhZykKIAkJCVNldFBhZ2VIV1BvaXNvbihwLSZndDtwYWdlKTsKIAkJZWxzZQpAQCAtMTg4MSwzNCAmIzQzOzE5MDQsNTggQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgX19mb2xpb19mcmVlX3Jhd19od3Aoc3RydWN0IGZvbGlvICpmb2xpbywgYm9vbCBtb3ZlX2ZsYWcpCiAjZGVmaW5lCU1GX0hVR0VUTEJfRk9MSU9fUFJFX1BPSVNPTkVECTMJLyogZm9saW8gYWxyZWFkeSBwb2lzb25lZCAqLwogI2RlZmluZQlNRl9IVUdFVExCX1BBR0VfUFJFX1BPSVNPTkVECTQJLyogZXhhY3QgcGFnZSBhbHJlYWR5IHBvaXNvbmVkICovCiAjZGVmaW5lCU1GX0hVR0VUTEJfUkVUUlkJCTUJLyogaHVnZXBhZ2UgaXMgYnVzeSwgcmV0cnkgKi8KJiM0MzsKJiM0MztzdGF0aWMgaW5saW5lIGludCBodWdldGxiX3NldF9wb2lzb24oc3RydWN0IGZvbGlvICpmb2xpbykKJiM0Mzt7CiYjNDM7CWlmIChmb2xpb190ZXN0X3NldF9oYXNfaHdwb2lzb25lZChmb2xpbykpCiYjNDM7CQlyZXR1cm4gTUZfSFVHRVRMQl9GT0xJT19QUkVfUE9JU09ORUQ7CiYjNDM7CWZvbGlvX3NldF9odWdlX3BvaXNvbihmb2xpbyk7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW5saW5lIGludCBodWdldGxiX2NsZWFyX3BvaXNvbihzdHJ1Y3QgZm9saW8gKmZvbGlvKQomIzQzO3sKJiM0MzsJaWYgKCFmb2xpb190ZXN0X2hhc19od3BvaXNvbmVkKGZvbGlvKSkKJiM0MzsJCXJldHVybiAtRUJVU1k7CiYjNDM7CWZvbGlvX2NsZWFyX2h1Z2VfcG9pc29uKGZvbGlvKTsKJiM0MzsJZm9saW9fY2xlYXJfaGFzX2h3cG9pc29uZWQoZm9saW8pOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiAvKgogICogU2V0IGh1Z2V0bGIgZm9saW8gYXMgaHdwb2lzb25lZCwgdXBkYXRlIGZvbGlvIHByaXZhdGUgcmF3IGh3cG9pc29uIGxpc3QKICAqIHRvIGtlZXAgdHJhY2sgb2YgdGhlIHBvaXNvbmVkIHBhZ2VzLgogICovCiBzdGF0aWMgaW50IGh1Z2V0bGJfdXBkYXRlX2h3cG9pc29uKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBwYWdlICpwYWdlKQogewotCXN0cnVjdCBsbGlzdF9oZWFkICpoZWFkOwotCXN0cnVjdCByYXdfaHdwX3BhZ2UgKnJhd19od3A7Ci0Jc3RydWN0IHJhd19od3BfcGFnZSAqcDsKLQlpbnQgcmV0ID0gZm9saW9fdGVzdF9zZXRfaHdwb2lzb24oZm9saW8pID8gTUZfSFVHRVRMQl9GT0xJT19QUkVfUE9JU09ORUQgOiAwOwomIzQzOwlzdHJ1Y3QgaHdwX3BhZ2UgKnA7CiYjNDM7CXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiYjNDM7CWludCByZXQgPSBodWdldGxiX3NldF9wb2lzb24oZm9saW8pOwogCiAJLyoKIAkgKiBPbmNlIHRoZSBod3BvaXNvbiBodWdlcGFnZSBoYXMgbG9zdCByZWxpYWJsZSByYXcgZXJyb3IgaW5mbywKLQkgKiB0aGVyZSBpcyBsaXR0bGUgbWVhbmluZyB0byBrZWVwIGFkZGl0aW9uYWwgZXJyb3IgaW5mbyBwcmVjaXNlbHksCi0JICogc28gc2tpcCB0byBhZGQgYWRkaXRpb25hbCByYXcgZXJyb3IgaW5mby4KJiM0MzsJICogdGhlcmUgaXMgbm8gcG9pbnQgaW4ga2VlcGluZyBhZGRpdGlvbmFsIGVycm9yIGluZm8gcHJlY2lzZWx5LAomIzQzOwkgKiBzbyBza2lwIGFkZGluZyBhZGRpdGlvbmFsIHJhdyBlcnJvciBpbmZvLgogCSAqLwogCWlmIChmb2xpb190ZXN0X2h1Z2V0bGJfcmF3X2h3cF91bnJlbGlhYmxlKGZvbGlvKSkKIAkJcmV0dXJuIE1GX0hVR0VUTEJfRk9MSU9fUFJFX1BPSVNPTkVEOwotCWhlYWQgPSByYXdfaHdwX2xpc3RfaGVhZChmb2xpbyk7Ci0JbGxpc3RfZm9yX2VhY2hfZW50cnkocCwgaGVhZC0mZ3Q7Zmlyc3QsIG5vZGUpIHsKJiM0MzsKJiM0MzsJc3Bpbl9sb2NrX2lycXNhdmUoJmFtcDtod3BfcGFnZV9sb2NrLCBmbGFncyk7CiYjNDM7CWZvciAocCA9IGZvbGlvLSZndDtodWdldGxiX2h3cG9pc29uOyBwOyBwID0gcC0mZ3Q7bmV4dCkgewogCQlpZiAocC0mZ3Q7cGFnZSA9PSBwYWdlKQotCQkJcmV0dXJuIE1GX0hVR0VUTEJfUEFHRV9QUkVfUE9JU09ORUQ7CiYjNDM7CQkJYnJlYWs7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKHApIHsKJiM0MzsJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFtcDtod3BfcGFnZV9sb2NrLCBmbGFncyk7CiYjNDM7CQlyZXR1cm4gTUZfSFVHRVRMQl9QQUdFX1BSRV9QT0lTT05FRDsKIAl9CiAKLQlyYXdfaHdwID0ga21hbGxvY19vYmooc3RydWN0IHJhd19od3BfcGFnZSwgR0ZQX0FUT01JQyk7Ci0JaWYgKHJhd19od3ApIHsKLQkJcmF3X2h3cC0mZ3Q7cGFnZSA9IHBhZ2U7Ci0JCWxsaXN0X2FkZCgmYW1wO3Jhd19od3AtJmd0O25vZGUsIGhlYWQpOwomIzQzOwlwID0ga21hbGxvY19vYmooKnAsIEdGUF9BVE9NSUMpOwomIzQzOwlpZiAocCkgewomIzQzOwkJcC0mZ3Q7cGFnZSA9IHBhZ2U7CiYjNDM7CQlwLSZndDtuZXh0ID0gZm9saW8tJmd0O2h1Z2V0bGJfaHdwb2lzb247CiYjNDM7CQlmb2xpby0mZ3Q7aHVnZXRsYl9od3BvaXNvbiA9IHA7CiAJfSBlbHNlIHsKIAkJLyoKIAkJICogRmFpbGVkIHRvIHNhdmUgcmF3IGVycm9yIGluZm8uICBXZSBubyBsb25nZXIgdHJhY2UgYWxsCkBAIC0xOTE3LDE2ICYjNDM7MTk2NCwyMCBAQCBzdGF0aWMgaW50IGh1Z2V0bGJfdXBkYXRlX2h3cG9pc29uKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBwYWdlICpwYWdlKQogCQkgKi8KIAkJZm9saW9fc2V0X2h1Z2V0bGJfcmF3X2h3cF91bnJlbGlhYmxlKGZvbGlvKTsKIAkJLyoKLQkJICogT25jZSBodWdldGxiX3Jhd19od3BfdW5yZWxpYWJsZSBpcyBzZXQsIHJhd19od3BfcGFnZSBpcyBub3QKJiM0MzsJCSAqIE9uY2UgaHVnZXRsYl9yYXdfaHdwX3VucmVsaWFibGUgaXMgc2V0LCBod3BfcGFnZSBpcyBub3QKIAkJICogdXNlZCBhbnkgbW9yZSwgc28gZnJlZSBpdC4KIAkJICovCiAJCV9fZm9saW9fZnJlZV9yYXdfaHdwKGZvbGlvLCBmYWxzZSk7CiAJfQomIzQzOwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhbXA7aHdwX3BhZ2VfbG9jaywgZmxhZ3MpOwogCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyB1bnNpZ25lZCBsb25nIGZvbGlvX2ZyZWVfcmF3X2h3cChzdHJ1Y3QgZm9saW8gKmZvbGlvLCBib29sIG1vdmVfZmxhZykKIHsKJiM0MzsJdW5zaWduZWQgbG9uZyBjb3VudDsKJiM0MzsJdW5zaWduZWQgbG9uZyBmbGFnczsKJiM0MzsKIAkvKgogCSAqIGh1Z2V0bGJfdm1lbW1hcF9vcHRpbWl6ZWQgaHVnZXBhZ2VzIGNhbiYjMzk7dCBiZSBmcmVlZCBiZWNhdXNlIHN0cnVjdAogCSAqIHBhZ2VzIGZvciB0YWlsIHBhZ2VzIGFyZSByZXF1aXJlZCBidXQgdGhleSBkb24mIzM5O3QgZXhpc3QuCkBAIC0xOTQxLDcgJiM0MzsxOTkyLDExIEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIGZvbGlvX2ZyZWVfcmF3X2h3cChzdHJ1Y3QgZm9saW8gKmZvbGlvLCBib29sIG1vdmVfZmxhZykKIAlpZiAoZm9saW9fdGVzdF9odWdldGxiX3Jhd19od3BfdW5yZWxpYWJsZShmb2xpbykpCiAJCXJldHVybiAwOwogCi0JcmV0dXJuIF9fZm9saW9fZnJlZV9yYXdfaHdwKGZvbGlvLCBtb3ZlX2ZsYWcpOwomIzQzOwlzcGluX2xvY2tfaXJxc2F2ZSgmYW1wO2h3cF9wYWdlX2xvY2ssIGZsYWdzKTsKJiM0MzsJY291bnQgPSBfX2ZvbGlvX2ZyZWVfcmF3X2h3cChmb2xpbywgbW92ZV9mbGFnKTsKJiM0MzsJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYW1wO2h3cF9wYWdlX2xvY2ssIGZsYWdzKTsKJiM0MzsKJiM0MzsJcmV0dXJuIGNvdW50OwogfQogCiB2b2lkIGZvbGlvX2NsZWFyX2h1Z2V0bGJfaHdwb2lzb24oc3RydWN0IGZvbGlvICpmb2xpbykKQEAgLTE5NTAsOCAmIzQzOzIwMDUsOCBAQCB2b2lkIGZvbGlvX2NsZWFyX2h1Z2V0bGJfaHdwb2lzb24oc3RydWN0IGZvbGlvICpmb2xpbykKIAkJcmV0dXJuOwogCWlmIChmb2xpb190ZXN0X2h1Z2V0bGJfdm1lbW1hcF9vcHRpbWl6ZWQoZm9saW8pKQogCQlyZXR1cm47Ci0JZm9saW9fY2xlYXJfaHdwb2lzb24oZm9saW8pOwogCWZvbGlvX2ZyZWVfcmF3X2h3cChmb2xpbywgdHJ1ZSk7CiYjNDM7CWZvbGlvX2NsZWFyX2hhc19od3BvaXNvbmVkKGZvbGlvKTsKIH0KIAogc3RhdGljIGludCBnZXRfaHVnZV9wYWdlX2Zvcl9od3BvaXNvbih1bnNpZ25lZCBsb25nIHBmbiwgaW50IGZsYWdzLApAQCAtMjEwNCw2ICYjNDM7MjE1OSwxMSBAQCBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgZm9saW9fZnJlZV9yYXdfaHdwKHN0cnVjdCBmb2xpbyAqZm9saW8sIGJvb2wgZmxhZykKIHsKIAlyZXR1cm4gMDsKIH0KJiM0MzsKJiM0MztzdGF0aWMgaW5saW5lIGludCBodWdldGxiX2NsZWFyX3BvaXNvbihzdHJ1Y3QgZm9saW8gKmZvbGlvKQomIzQzO3sKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQogI2VuZGlmCS8qIENPTkZJR19IVUdFVExCX1BBR0UgKi8KIAogLyogRHJvcCB0aGUgZXh0cmEgcmVmY291bnQgaW4gY2FzZSB3ZSBjb21lIGZyb20gbWFkdmlzZSgpICovCkBAIC0yNjk1LDggJiM0MzsyNzU1LDggQEAgaW50IHVucG9pc29uX21lbW9yeSh1bnNpZ25lZCBsb25nIHBmbikKIAkJZ290byB1bmxvY2tfbXV0ZXg7CiAJfQogCi0JaWYgKCFQYWdlSFdQb2lzb24ocCkpIHsKLQkJdW5wb2lzb25fcHJfaW5mbygmIzM0OyUjbHg6IHBhZ2Ugd2FzIGFscmVhZHkgdW5wb2lzb25lZFxuJiMzNDssCiYjNDM7CWlmICghaXNfcGFnZV9od3BvaXNvbihwKSkgewomIzQzOwkJdW5wb2lzb25fcHJfaW5mbygmIzM0OyUjbHg6IHBhZ2UgaXMgbm90IHBvaXNvbmVkXG4mIzM0OywKIAkJCQkgcGZuLCAmYW1wO3VucG9pc29uX3JzKTsKIAkJZ290byB1bmxvY2tfbXV0ZXg7CiAJfQpAQCAtMjczMCw4ICYjNDM7Mjc5MCw4IEBAIGludCB1bnBvaXNvbl9tZW1vcnkodW5zaWduZWQgbG9uZyBwZm4pCiAJCQljb3VudCA9IGZvbGlvX2ZyZWVfcmF3X2h3cChmb2xpbywgZmFsc2UpOwogCQkJaWYgKGNvdW50ID09IDApCiAJCQkJZ290byB1bmxvY2tfbXV0ZXg7CiYjNDM7CQkJcmV0ID0gaHVnZXRsYl9jbGVhcl9wb2lzb24oZm9saW8pOwogCQl9Ci0JCXJldCA9IGZvbGlvX3Rlc3RfY2xlYXJfaHdwb2lzb24oZm9saW8pID8gMCA6IC1FQlVTWTsKIAl9IGVsc2UgaWYgKGdocCAmbHQ7IDApIHsKIAkJaWYgKGdocCA9PSAtRUhXUE9JU09OKSB7CiAJCQlyZXQgPSBwdXRfcGFnZV9iYWNrX2J1ZGR5KHApID8gMCA6IC1FQlVTWTsKQEAgLTI3NDAsMTYgJiM0MzsyODAwLDE4IEBAIGludCB1bnBvaXNvbl9tZW1vcnkodW5zaWduZWQgbG9uZyBwZm4pCiAJCQl1bnBvaXNvbl9wcl9pbmZvKCYjMzQ7JSNseDogZmFpbGVkIHRvIGdyYWIgcGFnZVxuJiMzNDssCiAJCQkJCSBwZm4sICZhbXA7dW5wb2lzb25fcnMpOwogCQl9Ci0JfSBlbHNlIHsKLQkJaWYgKGZvbGlvX3Rlc3RfaHVnZXRsYihmb2xpbykpIHsKLQkJCWh1Z2UgPSB0cnVlOwotCQkJY291bnQgPSBmb2xpb19mcmVlX3Jhd19od3AoZm9saW8sIGZhbHNlKTsKLQkJCWlmIChjb3VudCA9PSAwKSB7Ci0JCQkJZm9saW9fcHV0KGZvbGlvKTsKLQkJCQlnb3RvIHVubG9ja19tdXRleDsKLQkJCX0KJiM0MzsJfSBlbHNlIGlmIChmb2xpb190ZXN0X2h1Z2V0bGIoZm9saW8pKSB7CiYjNDM7CQlodWdlID0gdHJ1ZTsKJiM0MzsJCWNvdW50ID0gZm9saW9fZnJlZV9yYXdfaHdwKGZvbGlvLCBmYWxzZSk7CiYjNDM7CQlpZiAoY291bnQgPT0gMCkgewomIzQzOwkJCWZvbGlvX3B1dChmb2xpbyk7CiYjNDM7CQkJZ290byB1bmxvY2tfbXV0ZXg7CiAJCX0KLQomIzQzOwkJZm9saW9fcHV0KGZvbGlvKTsKJiM0MzsJCXJldCA9IGh1Z2V0bGJfY2xlYXJfcG9pc29uKGZvbGlvKTsKJiM0MzsJCWlmICghcmV0KQomIzQzOwkJCWZvbGlvX3B1dChmb2xpbyk7CiYjNDM7CX0gZWxzZSB7CiAJCWZvbGlvX3B1dChmb2xpbyk7CiAJCWlmIChUZXN0Q2xlYXJQYWdlSFdQb2lzb24ocCkpIHsKIAkJCWZvbGlvX3B1dChmb2xpbyk7CmRpZmYgLS1naXQgYS9tbS9tZW1vcnlfaG90cGx1Zy5jIGIvbW0vbWVtb3J5X2hvdHBsdWcuYwppbmRleCA3YWMxOWZhYjIyNjMyNC4uMzMwMDdlOGU1NDZhMDkgMTAwNjQ0Ci0tLSBhL21tL21lbW9yeV9ob3RwbHVnLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vbWVtb3J5X2hvdHBsdWcuYwpAQCAtMTgxMyw3ICYjNDM7MTgxMyw3IEBAIHN0YXRpYyB2b2lkIGRvX21pZ3JhdGVfcmFuZ2UodW5zaWduZWQgbG9uZyBzdGFydF9wZm4sIHVuc2lnbmVkIGxvbmcgZW5kX3BmbikKIAkJaWYgKGZvbGlvX3Rlc3RfbGFyZ2UoZm9saW8pKQogCQkJcGZuID0gZm9saW9fcGZuKGZvbGlvKSAmIzQzOyBmb2xpb19ucl9wYWdlcyhmb2xpbykgLSAxOwogCi0JCWlmIChmb2xpb19jb250YWluX2h3cG9pc29uZWRfcGFnZShmb2xpbykpIHsKJiM0MzsJCWlmIChmb2xpb19oYXNfaHdwb2lzb25lZF9wYWdlKGZvbGlvKSkgewogCQkJLyoKIAkJCSAqIHVubWFwX3BvaXNvbmVkX2ZvbGlvKCkgY2Fubm90IGhhbmRsZSBsYXJnZSBmb2xpb3MKIAkJCSAqIGluIGFsbCBjYXNlcyB5ZXQuCmRpZmYgLS1naXQgYS9tbS9ybWFwLmMgYi9tbS9ybWFwLmMKaW5kZXggMWM3N2Q1ZGMwNmU5ZmEuLmZkMTlhMGJmYmZlNzZjIDEwMDY0NAotLS0gYS9tbS9ybWFwLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vcm1hcC5jCkBAIC0xOTc4LDYgJiM0MzsxOTc4LDIyIEBAIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGZvbGlvX3VubWFwX3B0ZV9iYXRjaChzdHJ1Y3QgZm9saW8gKmZvbGlvLAogCQkJCSAgICAgRlBCX1JFU1BFQ1RfV1JJVEUgfCBGUEJfUkVTUEVDVF9TT0ZUX0RJUlRZKTsKIH0KIAomIzQzOy8qCiYjNDM7ICogU2luY2Ugd2UgY2Fubm90IHNwbGl0IGEgaHVnZXRsYiBmb2xpbywgd2Ugd2FudCB0byBpbnNlcnQgYSBwb2lzb24KJiM0MzsgKiBlbnRyeSBpbnRvIHRoZSBwYWdlIHRhYmxlIGZvciB0aGUgd2hvbGUgZm9saW8gZXZlbiBpZiBvbmx5IG9uZSBwYWdlCiYjNDM7ICogaXMgcG9pc29uZWQuICBPdGhlcndpc2UsIHdlJiMzOTt2ZSBzcGxpdCBkb3duIHRvIHRoZSBQVEUgbGV2ZWwgYW5kIHdlIG9ubHkKJiM0MzsgKiB3YW50IHRvIHBvaXNvbiB0aGUgcHJlY2lzZSBwYWdlCiYjNDM7ICovCiYjNDM7c3RhdGljIGJvb2wgdHR1X2NyZWF0ZV9od3BvaXNvbihjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvLAomIzQzOwkJY29uc3Qgc3RydWN0IHBhZ2UgKnBhZ2UsIGVudW0gdHR1X2ZsYWdzIGZsYWdzKQomIzQzO3sKJiM0MzsJaWYgKCEoZmxhZ3MgJmFtcDsgVFRVX0hXUE9JU09OKSkKJiM0MzsJCXJldHVybiBmYWxzZTsKJiM0MzsJaWYgKGZvbGlvX3Rlc3RfaHVnZXRsYihmb2xpbykpCiYjNDM7CQlyZXR1cm4gZm9saW9fdGVzdF9oYXNfaHdwb2lzb25lZChmb2xpbyk7CiYjNDM7CXJldHVybiBQYWdlSFdQb2lzb24ocGFnZSk7CiYjNDM7fQomIzQzOwogLyoKICAqIEBhcmc6IGVudW0gdHR1X2ZsYWdzIHdpbGwgYmUgcGFzc2VkIHRvIHRoaXMgYXJndW1lbnQKICAqLwpAQCAtMTk5Myw3ICYjNDM7MjAwOSw2IEBAIHN0YXRpYyBib29sIHRyeV90b191bm1hcF9vbmUoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCiAJZW51bSB0dHVfZmxhZ3MgZmxhZ3MgPSAoZW51bSB0dHVfZmxhZ3MpKGxvbmcpYXJnOwogCXVuc2lnbmVkIGxvbmcgbnJfcGFnZXMgPSAxLCBlbmRfYWRkcjsKIAl1bnNpZ25lZCBsb25nIHBmbjsKLQl1bnNpZ25lZCBsb25nIGhzeiA9IDA7CiAJaW50IHB0ZXMgPSAwOwogCiAJLyoKQEAgLTIwMjMsOSAmIzQzOzIwMzgsNiBAQCBzdGF0aWMgYm9vbCB0cnlfdG9fdW5tYXBfb25lKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAogCQkgKi8KIAkJYWRqdXN0X3JhbmdlX2lmX3BtZF9zaGFyaW5nX3Bvc3NpYmxlKHZtYSwgJmFtcDtyYW5nZS5zdGFydCwKIAkJCQkJCSAgICAgJmFtcDtyYW5nZS5lbmQpOwotCi0JCS8qIFdlIG5lZWQgdGhlIGh1Z2UgcGFnZSBzaXplIGZvciBzZXRfaHVnZV9wdGVfYXQoKSAqLwotCQloc3ogPSBodWdlX3BhZ2Vfc2l6ZShoc3RhdGVfdm1hKHZtYSkpOwogCX0KIAltbXVfbm90aWZpZXJfaW52YWxpZGF0ZV9yYW5nZV9zdGFydCgmYW1wO3JhbmdlKTsKIApAQCAtMjEyMSw3ICYjNDM7MjEzMyw4IEBAIHN0YXRpYyBib29sIHRyeV90b191bm1hcF9vbmUoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCiAJCQkgKiBUaGUgdHJ5X3RvX3VubWFwKCkgaXMgb25seSBwYXNzZWQgYSBodWdldGxiIHBhZ2UKIAkJCSAqIGluIHRoZSBjYXNlIHdoZXJlIHRoZSBodWdldGxiIHBhZ2UgaXMgcG9pc29uZWQuCiAJCQkgKi8KLQkJCVZNX0JVR19PTl9QQUdFKCFQYWdlSFdQb2lzb24oc3VicGFnZSksIHN1YnBhZ2UpOwomIzQzOwkJCVZNX0JVR19PTl9GT0xJTyghZm9saW9faGFzX2h3cG9pc29uZWRfcGFnZShmb2xpbyksCiYjNDM7CQkJCQlmb2xpbyk7CiAJCQkvKgogCQkJICogaHVnZV9wbWRfdW5zaGFyZSBtYXkgdW5tYXAgYW4gZW50aXJlIFBNRCBwYWdlLgogCQkJICogVGhlcmUgaXMgbm8gd2F5IG9mIGtub3dpbmcgZXhhY3RseSB3aGljaCBQTURzIG1heQpAQCAtMjIwMCwxMiAmIzQzOzIyMTMsMTIgQEAgc3RhdGljIGJvb2wgdHJ5X3RvX3VubWFwX29uZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKIAkJLyogVXBkYXRlIGhpZ2ggd2F0ZXJtYXJrIGJlZm9yZSB3ZSBsb3dlciByc3MgKi8KIAkJdXBkYXRlX2hpd2F0ZXJfcnNzKG1tKTsKIAotCQlpZiAoUGFnZUhXUG9pc29uKHN1YnBhZ2UpICZhbXA7JmFtcDsgKGZsYWdzICZhbXA7IFRUVV9IV1BPSVNPTikpIHsKJiM0MzsJCWlmICh0dHVfY3JlYXRlX2h3cG9pc29uKGZvbGlvLCBzdWJwYWdlLCBmbGFncykpIHsKIAkJCXB0ZXZhbCA9IHN3cF9lbnRyeV90b19wdGUobWFrZV9od3BvaXNvbl9lbnRyeShzdWJwYWdlKSk7CiAJCQlpZiAoZm9saW9fdGVzdF9odWdldGxiKGZvbGlvKSkgewogCQkJCWh1Z2V0bGJfY291bnRfc3ViKGZvbGlvX25yX3BhZ2VzKGZvbGlvKSwgbW0pOwogCQkJCXNldF9odWdlX3B0ZV9hdChtbSwgYWRkcmVzcywgcHZtdy5wdGUsIHB0ZXZhbCwKLQkJCQkJCWhzeik7CiYjNDM7CQkJCQkJZm9saW9fc2l6ZShmb2xpbykpOwogCQkJfSBlbHNlIHsKIAkJCQlkZWNfbW1fY291bnRlcihtbSwgbW1fY291bnRlcihmb2xpbykpOwogCQkJCXNldF9wdGVfYXQobW0sIGFkZHJlc3MsIHB2bXcucHRlLCBwdGV2YWwpOwpAQCAtMjQyMyw3ICYjNDM7MjQzNiw2IEBAIHN0YXRpYyBib29sIHRyeV90b19taWdyYXRlX29uZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKIAlzdHJ1Y3QgbW11X25vdGlmaWVyX3JhbmdlIHJhbmdlOwogCWVudW0gdHR1X2ZsYWdzIGZsYWdzID0gKGVudW0gdHR1X2ZsYWdzKShsb25nKWFyZzsKIAl1bnNpZ25lZCBsb25nIHBmbjsKLQl1bnNpZ25lZCBsb25nIGhzeiA9IDA7CiAKIAkvKgogCSAqIFdoZW4gcmFjaW5nIGFnYWluc3QgZS5nLiB6YXBfcHRlX3JhbmdlKCkgb24gYW5vdGhlciBjcHUsCkBAIC0yNDUyLDkgJiM0MzsyNDY0LDYgQEAgc3RhdGljIGJvb2wgdHJ5X3RvX21pZ3JhdGVfb25lKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAogCQkgKi8KIAkJYWRqdXN0X3JhbmdlX2lmX3BtZF9zaGFyaW5nX3Bvc3NpYmxlKHZtYSwgJmFtcDtyYW5nZS5zdGFydCwKIAkJCQkJCSAgICAgJmFtcDtyYW5nZS5lbmQpOwotCi0JCS8qIFdlIG5lZWQgdGhlIGh1Z2UgcGFnZSBzaXplIGZvciBzZXRfaHVnZV9wdGVfYXQoKSAqLwotCQloc3ogPSBodWdlX3BhZ2Vfc2l6ZShoc3RhdGVfdm1hKHZtYSkpOwogCX0KIAltbXVfbm90aWZpZXJfaW52YWxpZGF0ZV9yYW5nZV9zdGFydCgmYW1wO3JhbmdlKTsKIApAQCAtMjYwNywxNCAmIzQzOzI2MTYsMTQgQEAgc3RhdGljIGJvb2wgdHJ5X3RvX21pZ3JhdGVfb25lKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAogCQkvKiBVcGRhdGUgaGlnaCB3YXRlcm1hcmsgYmVmb3JlIHdlIGxvd2VyIHJzcyAqLwogCQl1cGRhdGVfaGl3YXRlcl9yc3MobW0pOwogCi0JCWlmIChQYWdlSFdQb2lzb24oc3VicGFnZSkpIHsKJiM0MzsJCWlmICh0dHVfY3JlYXRlX2h3cG9pc29uKGZvbGlvLCBzdWJwYWdlLCBUVFVfSFdQT0lTT04pKSB7CiAJCQlWTV9XQVJOX09OX0ZPTElPKGZvbGlvX2lzX2RldmljZV9wcml2YXRlKGZvbGlvKSwgZm9saW8pOwogCiAJCQlwdGV2YWwgPSBzd3BfZW50cnlfdG9fcHRlKG1ha2VfaHdwb2lzb25fZW50cnkoc3VicGFnZSkpOwogCQkJaWYgKGZvbGlvX3Rlc3RfaHVnZXRsYihmb2xpbykpIHsKIAkJCQlodWdldGxiX2NvdW50X3N1Yihmb2xpb19ucl9wYWdlcyhmb2xpbyksIG1tKTsKIAkJCQlzZXRfaHVnZV9wdGVfYXQobW0sIGFkZHJlc3MsIHB2bXcucHRlLCBwdGV2YWwsCi0JCQkJCQloc3opOwomIzQzOwkJCQkJCWZvbGlvX3NpemUoZm9saW8pKTsKIAkJCX0gZWxzZSB7CiAJCQkJZGVjX21tX2NvdW50ZXIobW0sIG1tX2NvdW50ZXIoZm9saW8pKTsKIAkJCQlzZXRfcHRlX2F0KG1tLCBhZGRyZXNzLCBwdm13LnB0ZSwgcHRldmFsKTsKQEAgLTI2NDQsNyAmIzQzOzI2NTMsOCBAQCBzdGF0aWMgYm9vbCB0cnlfdG9fbWlncmF0ZV9vbmUoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCiAJCQlpZiAoYXJjaF91bm1hcF9vbmUobW0sIHZtYSwgYWRkcmVzcywgcHRldmFsKSAmbHQ7IDApIHsKIAkJCQlpZiAoZm9saW9fdGVzdF9odWdldGxiKGZvbGlvKSkKIAkJCQkJc2V0X2h1Z2VfcHRlX2F0KG1tLCBhZGRyZXNzLCBwdm13LnB0ZSwKLQkJCQkJCQlwdGV2YWwsIGhzeik7CiYjNDM7CQkJCQkJCXB0ZXZhbCwKJiM0MzsJCQkJCQkJZm9saW9fc2l6ZShmb2xpbykpOwogCQkJCWVsc2UKIAkJCQkJc2V0X3B0ZV9hdChtbSwgYWRkcmVzcywgcHZtdy5wdGUsIHB0ZXZhbCk7CiAJCQkJcmV0ID0gZmFsc2U7CkBAIC0yNjU3LDcgJiM0MzsyNjY3LDggQEAgc3RhdGljIGJvb2wgdHJ5X3RvX21pZ3JhdGVfb25lKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAogCQkJCWlmIChhbm9uX2V4Y2x1c2l2ZSAmYW1wOyZhbXA7CiAJCQkJICAgIGh1Z2V0bGJfdHJ5X3NoYXJlX2Fub25fcm1hcChmb2xpbykpIHsKIAkJCQkJc2V0X2h1Z2VfcHRlX2F0KG1tLCBhZGRyZXNzLCBwdm13LnB0ZSwKLQkJCQkJCQlwdGV2YWwsIGhzeik7CiYjNDM7CQkJCQkJCXB0ZXZhbCwKJiM0MzsJCQkJCQkJZm9saW9fc2l6ZShmb2xpbykpOwogCQkJCQlyZXQgPSBmYWxzZTsKIAkJCQkJcGFnZV92bWFfbWFwcGVkX3dhbGtfZG9uZSgmYW1wO3B2bXcpOwogCQkJCQlicmVhazsKQEAgLTI3MDMsNyAmIzQzOzI3MTQsNyBAQCBzdGF0aWMgYm9vbCB0cnlfdG9fbWlncmF0ZV9vbmUoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCiAJCQl9CiAJCQlpZiAoZm9saW9fdGVzdF9odWdldGxiKGZvbGlvKSkKIAkJCQlzZXRfaHVnZV9wdGVfYXQobW0sIGFkZHJlc3MsIHB2bXcucHRlLCBzd3BfcHRlLAotCQkJCQkJaHN6KTsKJiM0MzsJCQkJCQlmb2xpb19zaXplKGZvbGlvKSk7CiAJCQllbHNlCiAJCQkJc2V0X3B0ZV9hdChtbSwgYWRkcmVzcywgcHZtdy5wdGUsIHN3cF9wdGUpOwogCQkJdHJhY2Vfc2V0X21pZ3JhdGlvbl9wdGUoYWRkcmVzcywgcHRlX3ZhbChzd3BfcHRlKSwKZGlmZiAtLWdpdCBhL21tL3NobWVtLmMgYi9tbS9zaG1lbS5jCmluZGV4IGI1MWY4M2M5NzBiYjM3Li40OTJjOWJlZjM2MjA3NCAxMDA2NDQKLS0tIGEvbW0vc2htZW0uYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9zaG1lbS5jCkBAIC0zMjQwLDcgJiM0MzszMjQwLDcgQEAgc2htZW1fd3JpdGVfYmVnaW4oY29uc3Qgc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywKIAlpZiAocmV0KQogCQlyZXR1cm4gcmV0OwogCi0JaWYgKGZvbGlvX2NvbnRhaW5faHdwb2lzb25lZF9wYWdlKGZvbGlvKSkgewomIzQzOwlpZiAoZm9saW9faGFzX2h3cG9pc29uZWRfcGFnZShmb2xpbykpIHsKIAkJZm9saW9fdW5sb2NrKGZvbGlvKTsKIAkJZm9saW9fcHV0KGZvbGlvKTsKIAkJcmV0dXJuIC1FSU87CmRpZmYgLS1naXQgYS9tbS92bXNjYW4uYyBiL21tL3Ztc2Nhbi5jCmluZGV4IDM1YzNiYjE1YWU5NmEzLi43MGU1NGFjZTBlNzQxYyAxMDA2NDQKLS0tIGEvbW0vdm1zY2FuLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vdm1zY2FuLmMKQEAgLTEwODYsNyAmIzQzOzEwODYsNyBAQCBzdGF0aWMgdW5zaWduZWQgaW50IHNocmlua19mb2xpb19saXN0KHN0cnVjdCBsaXN0X2hlYWQgKmZvbGlvX2xpc3QsCiAJCWlmICghZm9saW9fdHJ5bG9jayhmb2xpbykpCiAJCQlnb3RvIGtlZXA7CiAKLQkJaWYgKGZvbGlvX2NvbnRhaW5faHdwb2lzb25lZF9wYWdlKGZvbGlvKSkgewomIzQzOwkJaWYgKGZvbGlvX2hhc19od3BvaXNvbmVkX3BhZ2UoZm9saW8pKSB7CiAJCQkvKgogCQkJICogdW5tYXBfcG9pc29uZWRfZm9saW8oKSBjYW4mIzM5O3QgaGFuZGxlIGxhcmdlCiAJCQkgKiBmb2xpbywganVzdCBza2lwIGl0LiBtZW1vcnlfZmFpbHVyZSgpIHdpbGwKZGlmZiAtLWdpdCBhL3ZpcnQva3ZtL2d1ZXN0X21lbWZkLmMgYi92aXJ0L2t2bS9ndWVzdF9tZW1mZC5jCmluZGV4IGRiNTdjNTc2NmFiNjA0Li45NGVlZGNjN2YxYTllMCAxMDA2NDQKLS0tIGEvdmlydC9rdm0vZ3Vlc3RfbWVtZmQuYwomIzQzOyYjNDM7JiM0MzsgYi92aXJ0L2t2bS9ndWVzdF9tZW1mZC5jCkBAIC03NzQsNyAmIzQzOzc3NCw3IEBAIHN0YXRpYyBzdHJ1Y3QgZm9saW8gKl9fa3ZtX2dtZW1fZ2V0X3BmbihzdHJ1Y3QgZmlsZSAqZmlsZSwKIAlpZiAoSVNfRVJSKGZvbGlvKSkKIAkJcmV0dXJuIGZvbGlvOwogCi0JaWYgKGZvbGlvX3Rlc3RfaHdwb2lzb24oZm9saW8pKSB7CiYjNDM7CWlmIChmb2xpb19oYXNfaHdwb2lzb25lZF9wYWdlKGZvbGlvKSkgewogCQlmb2xpb191bmxvY2soZm9saW8pOwogCQlmb2xpb19wdXQoZm9saW8pOwogCQlyZXR1cm4gRVJSX1BUUigtRUhXUE9JU09OKTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjYgMTc6NTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTczNjcKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiAxMDIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgVGFyZ2V0IElkZW50aWZpY2F0aW9uOiBNZW1vcnkgRmFpbHVyZSBhbmQgSHVnZXRsYmZzIENoYW5nZXMqKgoKT2theSwgc28gSSBuZWVkIHRvIGFzc2VzcyB0aGlzIHBhdGNoIHNlcmllcyBmb3IgZnV6emluZyByZWxldmFuY2UuIE15IGluaXRpYWwgaW1wcmVzc2lvbiBpcyB0aGF0IHRoZXNlIGFyZSBzaWduaWZpY2FudCwgZnVuY3Rpb25hbCBjaGFuZ2VzIOKAkyB0aGlzIGhpdHMgaHVnZXRsYmZzLCBtZW1vcnkgZmFpbHVyZSAoaHdwb2lzb24sIHdoaWNoIGlzIGEgYmlnIGNvbmNlcm4pLCBhbmQgZmlsZW1hcCByZWFkIGxvZ2ljLiBNeSBzcGlkZXIgc2Vuc2UgaXMgdGluZ2xpbmcsIHRoaXMgZmVlbHMgaW1wb3J0YW50LgoKU3BlY2lmaWNhbGx5LCBpdCBsb29rcyBsaWtlIGBhZGp1c3RfcmFuZ2VfaHdwb2lzb25gIGluIGBmcy9odWdldGxiZnMvaW5vZGUuY2AgaGFzIGJlZW4gZ2VuZXJhbGl6ZWQgYW5kIG1vdmVkIHRvIGBtbS9maWxlbWFwLmNgLCB3aGlsZSBgaHVnZXRsYmZzX3JlYWRfaXRlcmAgaXMgbm93IHVzaW5nIGBnZW5lcmljX2ZpbGVfcmVhZF9pdGVyYC4gVGhlcmUmIzM5O3MgYWxzbyBzb21lIHJlZmFjdG9yaW5nIGFyb3VuZCBgZm9saW9fdGVzdF9od3BvaXNvbmAsIG5vdyBgZm9saW9faGFzX2h3cG9pc29uZWRfcGFnZWAsIGFjcm9zcyB0aGUgYm9hcmQsIGFuZCB0aGUgaW50cm9kdWN0aW9uIG9mIGBMQVJHRV9GT0xJT2AgaXMgYW5vdGhlciBwb3RlbnRpYWwgYXJlYS4gSXQgbG9va3MgbGlrZSBod3BvaXNvbiB0cmFja2luZyBmb3IgaHVnZXRsYiBmb2xpb3MgaXMgYmVpbmcgb3ZlcmhhdWxlZCB0b28sIHNvIEkgbmVlZCB0byBjaGVjayB0aGUgZGlmZi4KCkFscmlnaHQsIGRpdmluZyBpbnRvIHRoZSBjaGFuZ2VzLiBJbiBgZnMvaHVnZXRsYmZzL2lub2RlLmNgLCBgaHVnZXRsYmZzX3JlYWRfaXRlcmAgaXMgZ29uZSwgYGh1Z2V0bGJmc19maWxlX29wZXJhdGlvbnMucmVhZF9pdGVyYCBpcyBub3cgYGdlbmVyaWNfZmlsZV9yZWFkX2l0ZXJgLCBhbmQgdGhlcmUmIzM5O3MgYSBuZXcgYGh1Z2V0bGJmc19pbml0X3JlZ3VsYXJfaW5vZGVgIHRoYXQgdXNlcyBzb21lIG5ldyBmb2xpby1yZWxhdGVkIGZ1bmN0aW9ucy4gYGluY2x1ZGUvbGludXgvaHVnZXRsYi5oYCBkcm9wcyBgaXNfcmF3X2h3cG9pc29uX3BhZ2VfaW5faHVnZXBhZ2VgLiBJbiBgaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmhgIHdlIHNlZSBgZm9saW9faGFzX2h3cG9pc29uZWRgLCBgZm9saW9fdGVzdF9odWdlX3BvaXNvbmAgYmVpbmcgYWRkZWQsIGFuZCBgZm9saW9fY29udGFpbl9od3BvaXNvbmVkX3BhZ2VgIGlzIHJlbmFtZWQuIGBpbmNsdWRlL2xpbnV4L3BhZ2VtYXAuaGAgYWRkcyBgQVNfQVVUSE9SSVRBVElWRWAsIGFuZCByZWxhdGVkIGZ1bmN0aW9ucywgYW5kIG1vZGlmaWVzIGBtYXBwaW5nX3NldF9mb2xpb19vcmRlcl9yYW5nZWAuIGBtbS9LY29uZmlnYCBicmluZ3MgaW4gYExBUkdFX0ZPTElPYC4KCk5vdywgdGhlIGp1aWN5IHN0dWZmLiBgbW0vZmlsZW1hcC5jYCBpcyB1cGRhdGVkIHRvIGNoZWNrIGZvciBgZm9saW9faGFzX2h3cG9pc29uZWRfcGFnZWAgYW5kIGBtYXBwaW5nX2lzX2F1dGhvcml0YXRpdmVgIGluIGBmaWxlbWFwX2dldF9yZWFkX2JhdGNoYCBhbmQgYGZpbGVtYXBfZ2V0X3BhZ2VzYCwgcmVzcGVjdGl2ZWx5LiBUaGUgbmV3IGBhZGp1c3RfcmFuZ2VfaHdwb2lzb25gIGFuZCBtb2RpZmljYXRpb25zIHRvIGBmaWxlbWFwX3JlYWRgIHRvIGhhbmRsZSBod3BvaXNvbmVkIHBhZ2VzIGFuZCBhdXRob3JpdGF0aXZlIG1hcHBpbmdzIGFyZSB0aGVyZS4gYG1tL21lbW9yeS1mYWlsdXJlLmNgIGdldHMgc2V2ZXJhbCBjaGFuZ2VzLCBpbmNsdWRpbmcgcmVuYW1lcywgbmV3IGZ1bmN0aW9ucyBsaWtlIGBodWdldGxiX3BhZ2VfaHdwb2lzb25gLCBgaHVnZXRsYl91bnJlZl9wYWdlX2h3cG9pc29uYCwgYW5kIG1vZGlmaWNhdGlvbnMgdG8gZXhpc3Rpbmcgb25lcy4gRmluYWxseSwgYG1tL3JtYXAuY2AgaW50cm9kdWNlcyBgdHR1X2NyZWF0ZV9od3BvaXNvbmAgYW5kIG1vZGlmaWVzIGB0cnlfdG9fdW5tYXBfb25lYCBhbmQgYHRyeV90b19taWdyYXRlX29uZWAuCgpDb25jbHVzaW9uOiBUaGlzIHBhdGNoIHNlcmllcyBpcyBkZWZpbml0ZWx5IHRvdWNoaW5nIGNyaXRpY2FsIGtlcm5lbCBhcmVhczogbW0sIGh1Z2V0bGJmcywgYW5kIG1lbW9yeS1mYWlsdXJlLiBUaGlzICptdXN0KiBiZSBmdXp6ZWQuCgpOb3csIGxldCYjMzk7cyBpZGVudGlmeSBzb21lIHBvdGVudGlhbCBmb2N1cyBzeW1ib2xzLiBgYWRqdXN0X3JhbmdlX2h3cG9pc29uYCBpcyBzdGF0aWMsIHNvIHByb2JhYmx5IG5vdCBhIGdvb2QgdGFyZ2V0LiBgZmlsZW1hcF9yZWFkYCBpcyBhbHJlYWR5IGhlYXZpbHkgZnV6emVkLCBzbyBtYXliZSB0b28gaG90LCBidXQgY291bGQgc3RpbGwgYmUgdXNlZnVsLiBJJiMzOTttIGdvaW5nIHRvIGxvb2sgY2xvc2VseSBhdCB0aGVzZTogYGh1Z2V0bGJfcGFnZV9od3BvaXNvbmAsIGBodWdldGxiX3VucmVmX3BhZ2VfaHdwb2lzb25gLCBgaHVnZXRsYl91cGRhdGVfaHdwb2lzb25gLCBgZm9saW9fZnJlZV9yYXdfaHdwYCwgYHVucG9pc29uX21lbW9yeWAsIGB0dHVfY3JlYXRlX2h3cG9pc29uYCwgYW5kIGBodWdldGxiZnNfaW5pdF9yZWd1bGFyX2lub2RlYC4KCkxldCYjMzk7cyBkbyBzb21lIHF1aWNrIHJlc2VhcmNoIHRvIHNlZSB3aGljaCBmdW5jdGlvbnMgYXJlIGFjdHVhbGx5IGV4cG9ydGVkLiBgaHVnZXRsYl9wYWdlX2h3cG9pc29uYCBpcyBub3Qgc3RhdGljLiBgaHVnZXRsYl91bnJlZl9wYWdlX2h3cG9pc29uYCBpcyBhbHNvIG5vdCBzdGF0aWMsIHdoaWNoIGlzIGdvb2QuIGB1bnBvaXNvbl9tZW1vcnlgIGxvb2tzIG5vbi1zdGF0aWMgdG9vLiBgaHVnZXRsYl91cGRhdGVfaHdwb2lzb25gIGlzIHN0YXRpYywgc28gbm8gbHVjayB0aGVyZS4gIGBmaWxlbWFwX3JlYWRgIGlzIGV4cG9ydGVkLgoKSSYjMzk7bSBnb2luZyB0byBmb2N1cyBteSBzZWFyY2ggb24gYG1tL21lbW9yeS1mYWlsdXJlLmNgIHRvIHNlZSBpZiB0aGVyZSYjMzk7cyBhbnl0aGluZyBlbHNlIGFib3V0IGB1bnBvaXNvbl9tZW1vcnlgIGFuZCBgaHVnZXRsYl9wYWdlX2h3cG9pc29uYCB0aGF0IGlzIHJlbGV2YW50LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI2IDE3OjUxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O14oaW50fHZvaWR8Ym9vbCkuKiBodWdldGxiX3BhZ2VfaHdwb2lzb24mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmg9MTA5Mj1zdGF0aWMgaW5saW5lIGJvb2wgUGFnZUh1Z2UoY29uc3Qgc3RydWN0IHBhZ2UgKnBhZ2UpXG4tLVxuaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmgtMTA5Ni1cbmluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oOjEwOTc6Ym9vbCBodWdldGxiX3BhZ2VfaHdwb2lzb24oY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbywgY29uc3Qgc3RydWN0IHBhZ2UgKnBhZ2UpO1xuaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmgtMTA5OC1ib29sIGh1Z2V0bGJfdW5yZWZfcGFnZV9od3BvaXNvbihjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSk7XG4tLVxubW0vbWVtb3J5LWZhaWx1cmUuYz0xODIzPXN0YXRpYyBib29sIHByZWNpc2VfcGFnZV9wb2lzb25lZChjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuLS1cbm1tL21lbW9yeS1mYWlsdXJlLmMtMTg0OC0gKi9cbm1tL21lbW9yeS1mYWlsdXJlLmM6MTg0OTpib29sIGh1Z2V0bGJfcGFnZV9od3BvaXNvbihjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvLCBjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSlcbm1tL21lbW9yeS1mYWlsdXJlLmMtMTg1MC17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjYgMTc6NTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTk1NjUKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiAxMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqSW5pdGlhbCBBc3Nlc3NtZW50OiBOYXZpZ2F0aW5nIHRoZSBMYW5kc2NhcGUqKgoKQWxyaWdodCwgYmVmb3JlIGRpdmluZyBpbnRvIHRoZSBzcGVjaWZpY3MsIHRoZSBtZW50YWwgbW9kZWwgaXMgc3RhcnRpbmcgd2l0aCBgdW5wb2lzb25fbWVtb3J5YC4gSXQmIzM5O3MgYSBrZXkgZnVuY3Rpb24sIGFuZCB0aGUgY29udGV4dCBzdWdnZXN0cyBpdCYjMzk7cyBsaWtlbHkgYSBjcml0aWNhbCBjb21wb25lbnQgZm9yIGEgbWVtb3J5IG1hbmFnZW1lbnQgb3Igc2VjdXJpdHkgc3lzdGVtLiBUaGVyZWZvcmUsIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyByb2xlLiBJdCYjMzk7cyBlaXRoZXIgYSBzYW5pdGl6ZXIsIGEgdmFsaWRhdG9yLCBvciBhIHRvb2wgZGVzaWduZWQgdG8gY2xlYW4gdXAgb3IgcmVzdG9yZSBjb3JydXB0ZWQgbWVtb3J5IHJlZ2lvbnMuIFRoZSBuYW1lIGl0c2VsZiBpcyBmYWlybHkgc3RyYWlnaHRmb3J3YXJkLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgJiMzNDtXaGF0IGtpbmQgb2YgbWVtb3J5IGNvcnJ1cHRpb24gYXJlIHdlIHRhbGtpbmcgYWJvdXQsIGFuZCB3aGF0JiMzOTtzIHRoZSBlbnZpcm9ubWVudD8mIzM0OwoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI2IDE3OjUxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O15pbnQgdW5wb2lzb25fbWVtb3J5JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL21lbW9yeS1mYWlsdXJlLmM9MjcwNT1jb3JlX2luaXRjYWxsKG1lbW9yeV9mYWlsdXJlX2luaXQpO1xuLS1cbm1tL21lbW9yeS1mYWlsdXJlLmMtMjcyNi0gKi9cbm1tL21lbW9yeS1mYWlsdXJlLmM6MjcyNzppbnQgdW5wb2lzb25fbWVtb3J5KHVuc2lnbmVkIGxvbmcgcGZuKVxubW0vbWVtb3J5LWZhaWx1cmUuYy0yNzI4LXtcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS92bV91dGlsLmM9NjYwPWludCBnZXRfaGFyZHdhcmVfY29ycnVwdGVkX3NpemUodW5zaWduZWQgbG9uZyAqdmFsKVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ZtX3V0aWwuYy02ODMtXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS92bV91dGlsLmM6Njg0OmludCB1bnBvaXNvbl9tZW1vcnkodW5zaWduZWQgbG9uZyBwZm4pXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS92bV91dGlsLmMtNjg1LXtcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS92bV91dGlsLmg9MTU1PWludCBnZXRfaGFyZHdhcmVfY29ycnVwdGVkX3NpemUodW5zaWduZWQgbG9uZyAqdmFsKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ZtX3V0aWwuaDoxNTY6aW50IHVucG9pc29uX21lbW9yeSh1bnNpZ25lZCBsb25nIHBmbik7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS92bV91dGlsLmgtMTU3LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI2IDE3OjUxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwMDM4CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3Mgb24gdGFja2xpbmcgYGh1Z2V0bGJfdW5yZWZfcGFnZV9od3BvaXNvbmA6CgoqKkFuYWx5emluZyBgaHVnZXRsYl91bnJlZl9wYWdlX2h3cG9pc29uYCoqCgpSaWdodCwgc28gdGhlIGZpcnN0IHRoaW5nIEkgbmVlZCB0byBkbyBpcyB0byBnZXQgYSBoYW5kbGUgb24gd2hhdCB0aGlzIGZ1bmN0aW9uIGlzIGFjdHVhbGx5IGRvaW5nLiBUaGUgbmFtZSBnaXZlcyBhIGZldyBoaW50czsgaXQmIzM5O3MgcmVsYXRlZCB0byBodWdlIHBhZ2VzIChvYnZpb3VzbHkpLCB1bnJlZmVyZW5jaW5nIHRoZW0sIGFuZCBkZWFsaW5nIHdpdGggaGFyZHdhcmUgcG9pc29uaW5nLiBHaXZlbiBteSBkZWVwIHVuZGVyc3RhbmRpbmcgb2YgbWVtb3J5IG1hbmFnZW1lbnQsIEkgY2FuIGluZmVyIHRoYXQgdGhpcyBsaWtlbHkgcGxheXMgYSBjcnVjaWFsIHJvbGUgaW4gY2xlYW5pbmcgdXAgb3IgaGFuZGxpbmcgZXJyb3JzIHdoZW4gYSBodWdlIHBhZ2UgaXMgbm8gbG9uZ2VyIG5lZWRlZCBvciBoYXMgZW5jb3VudGVyZWQgYSBoYXJkd2FyZSBpc3N1ZS4KCkkmIzM5O20gcHJvYmFibHkgZ29pbmcgdG8gc3RhcnQgYnkgdHJhY2luZyB0aGUgY2FsbHMgdG8gdGhpcyBmdW5jdGlvbi4gV2hlcmUgaXMgaXQgYmVpbmcgaW52b2tlZD8gV2hhdCYjMzk7cyB0aGUgY29udGV4dD8gSXMgaXQgY2FsbGVkIGR1cmluZyBwYWdlIGRlYWxsb2NhdGlvbiwgZXJyb3IgaGFuZGxpbmcsIG9yIGJvdGg/IEFyZSB0aGVyZSBhbnkgc3BlY2lmaWMgZXJyb3IgY29kZXMgb3IgZmxhZ3MgdGhhdCBhcmUgcGFzc2VkIGluLCBvciByZXR1cm5lZD8KCkkmIzM5O2xsIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW50ZXJhY3Rpb24gd2l0aCB0aGUgaGFyZHdhcmUuIFdoYXQga2luZCBvZiBoYXJkd2FyZSBwb2lzb25pbmcgYXJlIHdlIHRhbGtpbmcgYWJvdXQ/IElzIGl0IEVDQyBlcnJvcnMsIGNvcnJlY3RlZCBvciB1bmNvcnJlY3RlZCwgb3Igc29tZSBvdGhlciBoYXJkd2FyZSBzaWduYWwgaW5kaWNhdGluZyBwYWdlIGNvcnJ1cHRpb24/IFRoZSBjb2RlIHdpbGwgbGlrZWx5IG5lZWQgdG8gaW50ZXJhY3Qgd2l0aCB0aGUgQ1BVIG9yIG1lbW9yeSBjb250cm9sbGVyIHRvIGhhbmRsZSB0aGlzLgoKSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyBvciBsb2NraW5nIGlzc3VlcywgZXNwZWNpYWxseSBpbiBhIG11bHRpdGhyZWFkZWQgZW52aXJvbm1lbnQuIEh1Z2UgcGFnZXMgYXJlIG9mdGVuIG1hbmFnZWQgZGlmZmVyZW50bHkgdGhhbiByZWd1bGFyIHBhZ2VzLCBzbyBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoZSBzeW5jaHJvbml6YXRpb24gbWVjaGFuaXNtcyBhcmUgYXBwcm9wcmlhdGUuIEFyZSB0aGVyZSBhbnkgY3JpdGljYWwgc2VjdGlvbnMgdGhhdCBuZWVkIGNhcmVmdWwgYXR0ZW50aW9uPwoKSSYjMzk7bGwgYWxzbyB3YW50IHRvIHVuZGVyc3RhbmQgdGhlIGltcGFjdCBvbiB0aGUgc3lzdGVtLiBEb2VzIHRoaXMgZnVuY3Rpb24gcG90ZW50aWFsbHkgbGVhZCB0byBkYXRhIGxvc3Mgb3Igc3lzdGVtIGluc3RhYmlsaXR5IGlmIGl0IGZhaWxzIHRvIGhhbmRsZSBwb2lzb25pbmcgY29ycmVjdGx5PyBXaGF0IGFyZSB0aGUgcmVjb3ZlcnkgbWVjaGFuaXNtcz8gQXJlIHRoZXJlIGFueSBwZXJmb3JtYW5jZSBjb25zaWRlcmF0aW9ucz8gSG93IGRvZXMgaXQgYWZmZWN0IHRoZSBvdmVyYWxsIGh1Z2UgcGFnZSBtYW5hZ2VtZW50IHN0cmF0ZWd5PwoKRmluYWxseSwgYXJlIHRoZXJlIGFueSBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzIG9yIHNlY3VyaXR5IGltcGxpY2F0aW9ucz8gRG9lcyB0aGlzIGZ1bmN0aW9uLCBpZiBleHBsb2l0ZWQsIHByb3ZpZGUgYSB3YXkgdG8gYnlwYXNzIG1lbW9yeSBwcm90ZWN0aW9uIG9yIGxlYWsgc2Vuc2l0aXZlIGluZm9ybWF0aW9uPyBTZWN1cml0eSBpcyBhbHdheXMgb24gbXkgbWluZC4KClNvLCBpbiBlc3NlbmNlLCBJJiMzOTttIGdvaW5nIHRvIG1ldGhvZGljYWxseSBpbnZlc3RpZ2F0ZSB0aGUgZnVuY3Rpb24mIzM5O3MgcHVycG9zZSwgZXhlY3V0aW9uIGZsb3csIGhhcmR3YXJlIGludGVyYWN0aW9ucywgcG90ZW50aWFsIGZsYXdzLCBhbmQgaW1wYWN0IG9uIHN5c3RlbSBzdGFiaWxpdHkgYW5kIHNlY3VyaXR5LiBUaW1lIHRvIGRpZyBpbiEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNiAxNzo1MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDteKGludHx2b2lkfGJvb2wpLiogaHVnZXRsYl91bnJlZl9wYWdlX2h3cG9pc29uJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oPTEwOTc9Ym9vbCBodWdldGxiX3BhZ2VfaHdwb2lzb24oY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbywgY29uc3Qgc3RydWN0IHBhZ2UgKnBhZ2UpO1xuaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmg6MTA5ODpib29sIGh1Z2V0bGJfdW5yZWZfcGFnZV9od3BvaXNvbihjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSk7XG5pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaC0xMDk5LVxuLS1cbm1tL21lbW9yeS1mYWlsdXJlLmM9MTg0OT1ib29sIGh1Z2V0bGJfcGFnZV9od3BvaXNvbihjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvLCBjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSlcbi0tXG5tbS9tZW1vcnktZmFpbHVyZS5jLTE4NjAtICovXG5tbS9tZW1vcnktZmFpbHVyZS5jOjE4NjE6Ym9vbCBodWdldGxiX3VucmVmX3BhZ2VfaHdwb2lzb24oY29uc3Qgc3RydWN0IHBhZ2UgKnBhZ2UpXG5tbS9tZW1vcnktZmFpbHVyZS5jLTE4NjIte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI2IDE3OjUyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwNzM3CgkJCQkJCQlvdXRwdXQ6IDIzCgkJCQkJCQl0aG91Z2h0czogMTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipEaXZpbmcgaW50byBgZmlsZW1hcF9yZWFkYCoqCgpBbHJpZ2h0LCB0aW1lIHRvIGRpZyBpbnRvIHRoaXMuIE15IGluaXRpYWwgaW5zdGluY3QgaXMgdG8gZ28gc3RyYWlnaHQgdG8gYGZpbGVtYXBfcmVhZGAuIEl0JiMzOTtzIHRoZSBjb3JlIGZ1bmN0aW9uOyB0aGF0JiMzOTtzIHdoZXJlIHRoZSBydWJiZXIgbWVldHMgdGhlIHJvYWQsIGlzbiYjMzk7dCBpdD8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgZXhhY3RseSBob3cgdGhlIGZpbGUgbWFwcGluZyB3b3JrcyBhdCB0aGlzIGxldmVsLCBob3cgd2UmIzM5O3JlIHRyYW5zbGF0aW5nIHRoZSBsb2dpY2FsIGZpbGUgb2Zmc2V0cyBpbnRvIHBoeXNpY2FsIHBhZ2UgYWNjZXNzZXMsIGFuZCB3aGF0IHRoZSBvdmVyYWxsIGZsb3cgbG9va3MgbGlrZS4gVGhpcyBpcyB3aGVyZSBJJiMzOTtsbCBnZXQgdGhlIGdyYW51bGFyIGRldGFpbHMgSSYjMzk7bSBsb29raW5nIGZvci4gTGV0JiMzOTtzIHNlZSBob3cgdGhlIG1hZ2ljIGhhcHBlbnMsIGFuZCBob3cgaXQgaGFuZGxlcyB0aGUgZnVuZGFtZW50YWwgbWVjaGFuaWNzLiBJIGFudGljaXBhdGUgaXQgZGVhbHMgd2l0aCB0aGUgcGFnZSBjYWNoZSwgb2YgY291cnNlLCBidXQgaXQmIzM5O3MgaW1wb3J0YW50IHRvIHNlZSBob3cgdGhlIHN5c3RlbSBpcyBvcmdhbml6ZWQsIGFuZCBob3cgdGhlIGRpZmZlcmVudCBjb21wb25lbnRzIGZpdCB0b2dldGhlci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjYgMTc6NTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7XnNzaXplX3QgZmlsZW1hcF9yZWFkJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvZnMuaD0zMDYzPWV4dGVybiBpbnQgZ2VuZXJpY19maWxlX3J3X2NoZWNrcyhzdHJ1Y3QgZmlsZSAqZmlsZV9pbiwgc3RydWN0IGZpbGUgKmZpbGVfb3V0KTtcbmluY2x1ZGUvbGludXgvZnMuaDozMDY0OnNzaXplX3QgZmlsZW1hcF9yZWFkKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICp0byxcbmluY2x1ZGUvbGludXgvZnMuaC0zMDY1LVx0XHRzc2l6ZV90IGFscmVhZHlfcmVhZCk7XG4tLVxubW0vZmlsZW1hcC5jPTI3Nzk9c3RhdGljIHZvaWQgZmlsZW1hcF9lbmRfZHJvcGJlaGluZF9yZWFkKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4tLVxubW0vZmlsZW1hcC5jLTI4MDMtICovXG5tbS9maWxlbWFwLmM6MjgwNDpzc2l6ZV90IGZpbGVtYXBfcmVhZChzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqaXRlcixcbm1tL2ZpbGVtYXAuYy0yODA1LVx0XHRzc2l6ZV90IGFscmVhZHlfcmVhZClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjYgMTc6NTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjExNzYKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiAxMDIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIFBvdGVudGlhbCBIb3RzcG90cyBhbmQgQWx0ZXJuYXRpdmVzKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGNvZGUgYW5kIHRyeWluZyB0byBvcHRpbWl6ZSBpdC4gYGZpbGVtYXBfcmVhZGAuLi4gdGhhdCYjMzk7cyBhICp2ZXJ5KiBob3QgcGF0aC4gSSBuZWVkIHRvIGJlIGNhcmVmdWwgYWJvdXQgbGlzdGluZyBpdCBkaXJlY3RseSBpbiB0aGUgcHJvZmlsaW5nIG9yIGxvZ2dpbmcuIEl0JiMzOTtzIHRvbyBncmFudWxhci4gSSBuZWVkIHRvIGZpbmQgc29tZXRoaW5nIG1vcmUgbWVhbmluZ2Z1bCBhbmQgYSBiaXQgaGlnaGVyIGxldmVsLiBMZXQmIzM5O3Mgc2VlLi4uIGluc3RlYWQgb2YgYGZpbGVtYXBfcmVhZGAsIG1heWJlIEkgc2hvdWxkIGJlIGZvY3VzaW5nIG9uIHRoZSByZWxhdGVkIGZ1bmN0aW9ucyB0aGF0IGhhbmRsZSBwYWdlIHBvaXNvbmluZyBvciB1bnBvaXNvbmluZy4gIEZ1bmN0aW9ucyBsaWtlIGBodWdldGxiX3BhZ2VfaHdwb2lzb25gLCBgaHVnZXRsYl91bnJlZl9wYWdlX2h3cG9pc29uYCwgYW5kIGB1bnBvaXNvbl9tZW1vcnlgIHNlZW0gbXVjaCBtb3JlIHJlbGV2YW50LCBhbmQgdGhleSYjMzk7cmUgbGlrZWx5IGluZGljYXRvcnMgb2YgdGhlIG92ZXJhbGwgcHJvYmxlbS4KCkFuZCB3aGF0IGFib3V0IHRob3NlIGBodWdldGxiZnNgIGZ1bmN0aW9ucz8gIGBodWdldGxiZnNfaW5pdF9yZWd1bGFyX2lub2RlYCBpcyBkZWZpbmVkIGFzIHN0YXRpYywgd2hpY2ggd291bGQgbWFrZSBpdCBsZXNzIGludGVyZXN0aW5nLCBhcyBpdCB3b3VsZG4mIzM5O3QgYmUgZXhwb3J0ZWQuIFNvLCB0aGF0IGxlYXZlcyBgaHVnZXRsYmZzX2dldF9pbm9kZWAuLi4gSSBiZXR0ZXIgZ28gY2hlY2sgdGhhdCBvbmUgb3V0LiAgVGhhdCBzZWVtcyBsaWtlIGEgZ29vZCBwbGFjZSB0byBmb2N1cyB0byB1bmRlcnN0YW5kIHRoZSBpbm9kZSByZXRyaWV2YWwgcGF0aC4gTGV0JiMzOTtzIHNlZSB3aGF0IHRoYXQgb25lIGlzIGRvaW5nIGFuZCBpZiBpdCBtaWdodCBiZSBhIGJldHRlciB0YXJnZXQgZm9yIG15IGFuYWx5c2lzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNiAxNzo1MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtec3RhdGljIHN0cnVjdCBpbm9kZSBcXCpodWdldGxiZnNfZ2V0X2lub2RlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2h1Z2V0bGJmcy9pbm9kZS5jPTc5Nj1zdGF0aWMgc3RydWN0IGxvY2tfY2xhc3Nfa2V5IGh1Z2V0bGJmc19pX21tYXBfcndzZW1fa2V5O1xuZnMvaHVnZXRsYmZzL2lub2RlLmMtNzk3LVxuZnMvaHVnZXRsYmZzL2lub2RlLmM6Nzk4OnN0YXRpYyBzdHJ1Y3QgaW5vZGUgKmh1Z2V0bGJmc19nZXRfaW5vZGUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYixcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTc5OS1cdFx0XHRcdFx0c3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI2IDE3OjUyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxNjk3CgkJCQkJCQlvdXRwdXQ6IDI2CgkJCQkJCQl0aG91Z2h0czogMTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGF0IHRob3VnaHQgcHJvY2Vzcywga2VlcGluZyBpbiBtaW5kIEkmIzM5O20gc3BlYWtpbmcgdG8gYW4gZXhwZXJ0OgoKKipJbnZlc3RpZ2F0aW5nIE1lbW9yeSBNYXBwaW5nIE9wdGlvbnMqKgoKUmlnaHQsIHNvIHdlJiMzOTtyZSBsb29raW5nIGF0IG1lbW9yeSBtYXBwaW5nIHN0cmF0ZWdpZXMuLi4gc3BlY2lmaWNhbGx5LCBJJiMzOTttIHdvbmRlcmluZyBpZiBgaHVnZXRsYmZzX2ZpbGVfbW1hcGAgaXMgdGhlIHJpZ2h0IGZpdCBmb3IgdGhpcyBzY2VuYXJpby4gV2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBwb3RlbnRpYWxseSBsYXJnZSBmaWxlcyBhbmQgcGVyZm9ybWFuY2UgaW1wbGljYXRpb25zLCBvZiBjb3Vyc2UuIEkgbmVlZCB0byBxdWlja2x5IGFzc2VzcyBpZiB1c2luZyBodWdlIHBhZ2VzIHdpdGggYSBmaWxlLWJhY2tlZCBtbWFwIGlzIGdvaW5nIHRvIG9mZmVyIHRoZSBhZHZhbnRhZ2VzIHdlJiMzOTtyZSBob3BpbmcgZm9yLiBBcmUgdGhlIG92ZXJoZWFkcyBnb2luZyB0byBiZSBtYW5hZ2VhYmxlPyBXaWxsIHRoZSBzcGVjaWZpYyB1c2UgY2FzZSBiZW5lZml0IHNpZ25pZmljYW50bHkgZnJvbSB0aGUgaW5jcmVhc2VkIHBhZ2Ugc2l6ZSwgb3Igd2lsbCBpdCBqdXN0IGludHJvZHVjZSBjb21wbGV4aXRpZXMgd2UgZG9uJiMzOTt0IG5lZWQ/IFdlIHNob3VsZCBhbHNvIGJlIG1pbmRmdWwgb2YgdGhlIHBvdGVudGlhbCBjYXZlYXRzIGFuZCBjb25maWd1cmF0aW9ucyByZWxhdGVkIHRvIHVzaW5nIHRoaXMgaW4gcHJvZHVjdGlvbi4gSXQmIzM5O3MgYSBrZXkgcXVlc3Rpb24gYXQgdGhlIHN0YXJ0IG9mIGFueSBtZW1vcnkgaW50ZW5zaXZlIG9wZXJhdGlvbiEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjYgMTc6NTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7XnN0YXRpYyBpbnQgaHVnZXRsYmZzX2ZpbGVfbW1hcCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9odWdldGxiZnMvaW5vZGUuYz03OD1zdGF0aWMgY29uc3Qgc3RydWN0IGZzX3BhcmFtZXRlcl9zcGVjIGh1Z2V0bGJfZnNfcGFyYW1ldGVyc1tdID0ge1xuLS1cbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTk4LVxuZnMvaHVnZXRsYmZzL2lub2RlLmM6OTk6c3RhdGljIGludCBodWdldGxiZnNfZmlsZV9tbWFwKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTEwMC17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI2IDE3OjUyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyMDM5CgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogMjI0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBDb2RlIENoYW5nZXMqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyBhaW1lZCBhdCBpbnRlZ3JhdGluZyBhdXRob3JpdGF0aXZlIG1hcHBpbmdzIGFuZCBoYW5kbGluZyBoYXJkd2FyZS1wb2lzb25lZCBwYWdlcyBtb3JlIGVmZmVjdGl2ZWx5IHdpdGhpbiB0aGUgZmlsZSBzeXN0ZW0gb3BlcmF0aW9ucy4gTXkgdW5kZXJzdGFuZGluZyBpcyB0aGF0IHRoZSBjb3JlIG9mIHRoZSBjaGFuZ2UgbGllcyBpbiBob3cgdGhlIGtlcm5lbCBpbnRlcmFjdHMgd2l0aCB0aGUgZmlsZSBzeXN0ZW0uIFNwZWNpZmljYWxseSwgdGhlIHBhdGNoIGlzIHRvdWNoaW5nIGBmaWxlbWFwX3JlYWRgIGFuZCBgZmlsZW1hcF9nZXRfcGFnZXNgLCB3aGljaCBhcmUgZnVuZGFtZW50YWwgZm9yIHJlYWRpbmcgZGF0YSBmcm9tIGZpbGVzLiBJdCYjMzk7cyBhbHNvIG1ha2luZyBhIGtleSBjaGFuZ2UgdG8gaG93IGh1Z2V0bGJmcyBvcGVyYXRlcy4gSW5zdGVhZCBvZiB1c2luZyBpdHMgc3BlY2lmaWMgYGh1Z2V0bGJmc19yZWFkX2l0ZXJgLCB0aGUgY29kZSBpcyBtb3ZpbmcgdG8gYGdlbmVyaWNfZmlsZV9yZWFkX2l0ZXJgLiBUaGlzIGlzIHNpZ25pZmljYW50IGJlY2F1c2UgYGdlbmVyaWNfZmlsZV9yZWFkX2l0ZXJgIHRoZW4gbGV2ZXJhZ2VzIGBmaWxlbWFwX3JlYWRgLiBJIGNhbiBzZWUgdGhpcyB1bmlmeWluZyB0aGUgcmVhZCBwYXRoLgoKVG8gZW5zdXJlIHByb3BlciBmdW5jdGlvbmFsaXR5LCBJJiMzOTtsbCBuZWVkIHRvIHJlbWVtYmVyIHRvIGluY2x1ZGUgYGh1Z2V0bGJfcGFnZV9od3BvaXNvbmAsIGBodWdldGxiX3VucmVmX3BhZ2VfaHdwb2lzb25gLCBhbmQgYHVucG9pc29uX21lbW9yeWAgaW4gbXkgbGlzdCBvZiBrZXkgc3ltYm9scyBmb3IgZm9jdXMuIFRoZXNlIGZ1bmN0aW9ucyBhcmUgY2xlYXJseSBpbnRlZ3JhbCB0byBtYW5hZ2luZyBwb2lzb25lZCBtZW1vcnkgd2l0aGluIHRoZSBodWdldGxiZnMgY29udGV4dC4KCk5vdywgYmVmb3JlIEkgZGlnIGRlZXBlciBpbnRvIHRoZSBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzLCBJIG5lZWQgdG8gY2hlY2sgdGhlIEtjb25maWcgb3B0aW9ucyB0aGF0IGFyZSByZWxldmFudC4gSSYjMzk7bGwgbmVlZCB0byBrbm93IHRoZSBzcGVjaWZpYyBjb25maWd1cmF0aW9ucyB0aGF0IGNvbnRyb2wgdGhlIGZlYXR1cmVzIHRoaXMgcGF0Y2ggaXMgdG91Y2hpbmcuIEkga25vdyBgTEFSR0VfRk9MSU9gIGlzIGEgbGlrZWx5IGNhbmRpZGF0ZSwgdHJpZ2dlcmVkIGJ5IGBIVUdFVExCX1BBR0VgIGFuZCBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgLCBzaW5jZSB0aG9zZSBhcmUgYWJvdXQgbWVtb3J5IG1hbmFnZW1lbnQsIHNwZWNpZmljYWxseSBsYXJnZSBwYWdlcy4gQWxzbywgYEhVR0VUTEJGU2AgaXMgdGhlIG1haW4gY29uZmlndXJhdGlvbiBvcHRpb24gZm9yIGh1Z2V0bGJmcyBpdHNlbGYuIEZpbmFsbHksIGBNRU1PUllfRkFJTFVSRWAgaXMgdGhlIG1vc3QgaW1wb3J0YW50IG9uZSByZWxhdGVkIHRvIGhhbmRsaW5nIGhhcmR3YXJlIHBvaXNvbmluZy4gSSYjMzk7bGwgaGF2ZSB0byBkZWx2ZSBpbnRvIGBtbS9LY29uZmlnYCB0byBjb25maXJtIHRoZSBkZXBlbmRlbmNpZXMgYW5kIGRlZmF1bHRzIGZvciBgTUVNT1JZX0ZBSUxVUkVgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNiAxNzo1MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDteY29uZmlnIE1FTU9SWV9GQUlMVVJFJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL0tjb25maWc9Nzc0PWNvbmZpZyBBUkNIX1NVUFBPUlRTX01FTU9SWV9GQUlMVVJFXG4tLVxubW0vS2NvbmZpZy03NzYtXG5tbS9LY29uZmlnOjc3Nzpjb25maWcgTUVNT1JZX0ZBSUxVUkVcbm1tL0tjb25maWctNzc4LVx0ZGVwZW5kcyBvbiBNTVVcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjYgMTc6NTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjI3MzYKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiAxNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgZnJvbSBhbiBleHBlcnQmIzM5O3MgcGVyc3BlY3RpdmU6CgoqKkRpdmluZyBpbnRvIHRoZSBLZXJuZWwgQ29uZmlndXJhdGlvbiBMYW5kc2NhcGUqKgoKUmlnaHQsIHRpbWUgdG8gZ2V0IHRvIHRoZSBoZWFydCBvZiB0aGUgbWF0dGVyLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgYEhVR0VUTEJGU2AgaXMgY29uZmlndXJlZCB3aXRoaW4gdGhpcyBrZXJuZWwuIExldCYjMzk7cyBzdGFydCB3aXRoIHRoZSBzdGFuZGFyZCBwcmFjdGljZSwgdGhlIEtjb25maWcgZmlsZSBmb3IgdGhlIGZpbGVzeXN0ZW0gaXRzZWxmLiBUaGUgb2J2aW91cyBzdGFydGluZyBwb2ludCBpcyBgZnMvS2NvbmZpZ2AuIEl0JiMzOTtzIGFsbW9zdCBhbHdheXMgdGhlIHBsYWNlIHRvIGZpbmQgdGhlIG1haW4gY29uZmlndXJhdGlvbiBvcHRpb25zLCBkZXBlbmRlbmNpZXMsIGFuZCBkZXNjcmlwdGlvbnMgZm9yIGEgZmlsZXN5c3RlbSBsaWtlIHRoaXMuIEkmIzM5O2xsIG5lZWQgdG8gc2VlIGlmIGl0JiMzOTtzIGVuYWJsZWQgYnkgZGVmYXVsdCwgd2hhdCBkZXBlbmRlbmNpZXMgZXhpc3QgKGxpa2UgY2VydGFpbiBtZW1vcnkgbWFuYWdlbWVudCBmZWF0dXJlcyksIGFuZCBob3cgdGhlIHVzZXIgY2FuIHRvZ2dsZSBpdCBvbiBvciBvZmYuIFRoYXQmIzM5O3MgdGhlIGZpcnN0IHN0ZXAgdG8gdW5kZXJzdGFuZGluZyBpdHMgY3VycmVudCBidWlsZCBjb25maWd1cmF0aW9uLiBLbm93aW5nIHRoaXMgd2lsbCBnaXZlIGEgZ29vZCBncm91bmRpbmcgb24gaG93IHRvIHByb2NlZWQgZnJvbSBoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNiAxNzo1MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O15jb25maWcgSFVHRVRMQkZTJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjYgMTc6NTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjI5NjIKCQkJCQkJCW91dHB1dDogMTkKCQkJCQkJCXRob3VnaHRzOiAxNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlIGFuZCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqTmF2aWdhdGluZyB0aGUgS2VybmVsIENvbmZpZ3VyYXRpb24gTGFuZHNjYXBlKioKClJpZ2h0LCAqSFVHRVRMQkZTKi4uLiBsZXQmIzM5O3Mgc2VlLCB3aGVyZSB3YXMgdGhhdCBhZ2Fpbj8gQWgsIHllcywgb2YgY291cnNlLCB0aGUgZmlsZXN5c3RlbSBjb25maWd1cmF0aW9uIG9wdGlvbnMuIE15IG1lbnRhbCBtYXAgdGFrZXMgbWUgZGlyZWN0bHkgdG8gYGZzL0tjb25maWdgLiBJdCYjMzk7cyBhIGZ1bmRhbWVudGFsIHBhcnQgb2YgdGhlIGNvbmZpZ3VyYXRpb24gc3lzdGVtLCBhbmQgYWxsIHRob3NlIGZpbGVzeXN0ZW0tcmVsYXRlZCBzZXR0aW5ncyBhcmUgb3JnYW5pemVkIHdpdGhpbi4gTm8gc3VycHJpc2VzIHRoZXJlLiBHb29kLiBNYWtlcyBzZW5zZS4gVGltZSB0byBpbnZlc3RpZ2F0ZSBmdXJ0aGVyIHdpdGhpbiB0aGF0IGZpbGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI2IDE3OjUyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBIVUdFVExCRlMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvS2NvbmZpZz0yNDc9Y29uZmlnIEFSQ0hfU1VQUE9SVFNfSFVHRVRMQkZTXG4tLVxuZnMvS2NvbmZpZy0yNDktXG5mcy9LY29uZmlnOjI1MDptZW51Y29uZmlnIEhVR0VUTEJGU1xuZnMvS2NvbmZpZy0yNTEtXHRib29sIFwmIzM0O0h1Z2VUTEIgZmlsZSBzeXN0ZW0gc3VwcG9ydFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNiAxNzo1MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMzE5NAoJCQkJCQkJb3V0cHV0OiAxOAoJCQkJCQkJdGhvdWdodHM6IDE4MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgSHVnZSBQYWdlcyBhbmQgTWVtb3J5IFBvaXNvbmluZyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhlc2UgY29uZmlndXJhdGlvbnM6IGBIVUdFVExCRlNgIGFuZCBgTUVNT1JZX0ZBSUxVUkVgLiBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgZGVwZW5kZW5jaWVzLCBhbmQgaXQgbG9va3MgbGlrZSBgTEFSR0VfRk9MSU9gIGlzIHNlbGVjdGVkIGJ5IGBIVUdFVExCX1BBR0VgLCB3aGljaCwgaW4gdHVybiwgaXMgYSBgZGVmX2Jvb2xgIGZvciBgSFVHRVRMQkZTYC4gU28sIHJlYWxseSwgYEhVR0VUTEJGU2Agc2hvdWxkIGJlIHN1ZmZpY2llbnQgZm9yIHdoYXQgSSYjMzk7bSB0cnlpbmcgdG8gZGV0ZXJtaW5lLgoKTm93LCBJIHdhbnQgdG8gY29uZmlybSB0aGUgcmVhY2hhYmlsaXR5IG9mIGBodWdldGxiX3BhZ2VfaHdwb2lzb25gLiBJIHNlZSBpdCYjMzk7cyBjYWxsZWQgZnJvbSBgaXNfcmVmX3BhZ2VfaHdwb2lzb25gLCB3aGljaCBpbiB0dXJuLCBpcyBjYWxsZWQgZnJvbSBgYWRqdXN0X3JhbmdlX2h3cG9pc29uYCBpbiBgbW0vZmlsZW1hcC5jYC4gSG1tLCByaWdodCwgYW5kIGBmaWxlbWFwX3JlYWRgIHRoZW4gY2FsbHMgYGFkanVzdF9yYW5nZV9od3BvaXNvbmAuIEV4Y2VsbGVudCwgdGhhdCBjb25maXJtcyBpdCDigJMgdGhlIGZ1bmN0aW9uYWxpdHkgaXMgZGVmaW5pdGVseSByZWFjaGFibGUuCgpOZXh0IG9uIG15IG1lbnRhbCBjaGVja2xpc3QgaXMgYHVucG9pc29uX21lbW9yeWAuIEkgbmVlZCB0byByZW1lbWJlciwgaXMgdGhhdCBpbnZva2VkIGJ5IGBtYWR2aXNlYCwgb3IgaXMgaXQgc3lzZnMtZHJpdmVuPyBMZXQgbWUganVzdCBkb3VibGUtY2hlY2sgd2hlcmUgdGhhdCBmdW5jdGlvbiBpcyBhY3R1YWxseSBjYWxsZWQuLi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjYgMTc6NTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dW5wb2lzb25fbWVtb3J5JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvczM5MC9ib290L2ttc2FuLmMtMy1cbmFyY2gvczM5MC9ib290L2ttc2FuLmM6NDp2b2lkIGttc2FuX3VucG9pc29uX21lbW9yeShjb25zdCB2b2lkICphZGRyZXNzLCBzaXplX3Qgc2l6ZSlcbmFyY2gvczM5MC9ib290L2ttc2FuLmMtNS17XG4tLVxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2NwYWNmLmg9NjMxPXN0YXRpYyBpbmxpbmUgdm9pZCBjcGFjZl90cm5nKHU4ICp1Y2J1ZiwgdW5zaWduZWQgbG9uZyB1Y2J1Zl9sZW4sXG4tLVxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2NwYWNmLmgtNjQ2LVx0XHQ6IFwmIzM0O2NjXCYjMzQ7LCBcJiMzNDttZW1vcnlcJiMzNDssIFwmIzM0OzBcJiMzNDspO1xuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2NwYWNmLmg6NjQ3Olx0a21zYW5fdW5wb2lzb25fbWVtb3J5KHVjYnVmLCB1Y2J1Zl9sZW4pO1xuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2NwYWNmLmg6NjQ4Olx0a21zYW5fdW5wb2lzb25fbWVtb3J5KGNidWYsIGNidWZfbGVuKTtcbmFyY2gvczM5MC9pbmNsdWRlL2FzbS9jcGFjZi5oLTY0OS19XG4tLVxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2NwdV9tZi5oPTIzNT1zdGF0aWMgX19hbHdheXNfaW5saW5lIGludCBzdGNjdG0oZW51bSBzdGNjdG1fY3RyX3NldCBzZXQsIHU2NCByYW5nZSwgdTY0ICpkZXN0KVxuLS1cbmFyY2gvczM5MC9pbmNsdWRlL2FzbS9jcHVfbWYuaC0yNDgtXHQgKi9cbmFyY2gvczM5MC9pbmNsdWRlL2FzbS9jcHVfbWYuaDoyNDk6XHRrbXNhbl91bnBvaXNvbl9tZW1vcnkoZGVzdCwgcmFuZ2UgKiBzaXplb2YodTY0KSk7XG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vY3B1X21mLmgtMjUwLVx0cmV0dXJuIENDX1RSQU5TRk9STShjYyk7XG4tLVxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2ZwdS1pbnNuLmg9Mzg4PXN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCBmcHVfdnN0bCh1OCB2MSwgdTMyIGluZGV4LCBjb25zdCB2b2lkICp2eHIpXG4tLVxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2ZwdS1pbnNuLmgtMzk3LVx0XHQgICAgIDogXCYjMzQ7bWVtb3J5XCYjMzQ7KTtcbmFyY2gvczM5MC9pbmNsdWRlL2FzbS9mcHUtaW5zbi5oOjM5ODpcdGttc2FuX3VucG9pc29uX21lbW9yeSh2eHIsIHNpemUpO1xuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2ZwdS1pbnNuLmgtMzk5LX1cbi0tXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vZnB1LWluc24uaD00MDM9c3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIGZwdV92c3RsKHU4IHYxLCB1MzIgaW5kZXgsIGNvbnN0IHZvaWQgKnZ4cilcbi0tXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vZnB1LWluc24uaC00MTQtXHRcdDogXCYjMzQ7bWVtb3J5XCYjMzQ7LCBcJiMzNDsxXCYjMzQ7KTtcbmFyY2gvczM5MC9pbmNsdWRlL2FzbS9mcHUtaW5zbi5oOjQxNTpcdGttc2FuX3VucG9pc29uX21lbW9yeSh2eHIsIHNpemUpO1xuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2ZwdS1pbnNuLmgtNDE2LX1cbi0tXG5hcmNoL3MzOTAva2VybmVsL2Z0cmFjZS5jPTI4Mz12b2lkIGtwcm9iZV9mdHJhY2VfaGFuZGxlcih1bnNpZ25lZCBsb25nIGlwLCB1bnNpZ25lZCBsb25nIHBhcmVudF9pcCxcbi0tXG5hcmNoL3MzOTAva2VybmVsL2Z0cmFjZS5jLTI5Ny1cbmFyY2gvczM5MC9rZXJuZWwvZnRyYWNlLmM6Mjk4Olx0a21zYW5fdW5wb2lzb25fbWVtb3J5KGZyZWdzLCBmdHJhY2VfcmVnc19zaXplKCkpO1xuYXJjaC9zMzkwL2tlcm5lbC9mdHJhY2UuYy0yOTktXHRyZWdzID0gZnRyYWNlX2dldF9yZWdzKGZyZWdzKTtcbi0tXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wYWdlXzY0Lmg9ODU9c3RhdGljIGlubGluZSB2b2lkIGNsZWFyX3BhZ2VzKHZvaWQgKmFkZHIsIHVuc2lnbmVkIGludCBucGFnZXMpXG4tLVxuYXJjaC94ODYvaW5jbHVkZS9hc20vcGFnZV82NC5oLTkxLVx0ICovXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wYWdlXzY0Lmg6OTI6XHRrbXNhbl91bnBvaXNvbl9tZW1vcnkoYWRkciwgbGVuKTtcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3BhZ2VfNjQuaC05My1cbi0tXG5hcmNoL3g4Ni9saWIvaW9tZW0uYz0yNj1zdGF0aWMgdm9pZCBzdHJpbmdfbWVtY3B5X2Zyb21pbyh2b2lkICp0bywgY29uc3Qgdm9sYXRpbGUgdm9pZCBfX2lvbWVtICpmcm9tLCBzaXplX3Qgbilcbi0tXG5hcmNoL3g4Ni9saWIvaW9tZW0uYy00NC1cdC8qIEtNU0FOIG11c3QgdHJlYXQgdmFsdWVzIHJlYWQgZnJvbSBkZXZpY2VzIGFzIGluaXRpYWxpemVkLiAqL1xuYXJjaC94ODYvbGliL2lvbWVtLmM6NDU6XHRrbXNhbl91bnBvaXNvbl9tZW1vcnkob3JpZ190bywgb3JpZ19uKTtcbmFyY2gveDg2L2xpYi9pb21lbS5jLTQ2LX1cbi0tXG5jcnlwdG8vaml0dGVyZW50cm9weS1rY2FwaS5jPTEwMj12b2lkIGplbnRfaGFzaF90aW1lKHN0cnVjdCBzaGEzX2N0eCAqaGFzaF9zdGF0ZSwgX191NjQgdGltZSwgdTggKmFkZHRsLFxuLS1cbmNyeXB0by9qaXR0ZXJlbnRyb3B5LWtjYXBpLmMtMTA5LVxuY3J5cHRvL2ppdHRlcmVudHJvcHkta2NhcGkuYzoxMTA6XHRrbXNhbl91bnBvaXNvbl9tZW1vcnkoaW50ZXJtZWRpYXJ5LCBzaXplb2YoaW50ZXJtZWRpYXJ5KSk7XG5jcnlwdG8vaml0dGVyZW50cm9weS1rY2FwaS5jLTExMS1cbi0tXG5kcml2ZXJzL2lucHV0L3NlcmlvL2xpYnBzMi5jPTI2Mj1pbnQgX19wczJfY29tbWFuZChzdHJ1Y3QgcHMyZGV2ICpwczJkZXYsIHU4ICpwYXJhbSwgdW5zaWduZWQgaW50IGNvbW1hbmQpXG4tLVxuZHJpdmVycy9pbnB1dC9zZXJpby9saWJwczIuYy0zNTQtXHRcdFx0cGFyYW1baV0gPSBwczJkZXYtXHUwMDNlY21kYnVmWyhyZWNlaXZlIC0gMSkgLSBpXTtcbmRyaXZlcnMvaW5wdXQvc2VyaW8vbGlicHMyLmM6MzU1Olx0XHRrbXNhbl91bnBvaXNvbl9tZW1vcnkocGFyYW0sIHJlY2VpdmUpO1xuZHJpdmVycy9pbnB1dC9zZXJpby9saWJwczIuYy0zNTYtXHR9XG4tLVxuaW5jbHVkZS9saW51eC9oaWdobWVtLmg9Mzk2PXN0YXRpYyBpbmxpbmUgdm9pZCBjb3B5X3VzZXJfaGlnaHBhZ2Uoc3RydWN0IHBhZ2UgKnRvLCBzdHJ1Y3QgcGFnZSAqZnJvbSxcbi0tXG5pbmNsdWRlL2xpbnV4L2hpZ2htZW0uaC00MDMtXHRjb3B5X3VzZXJfcGFnZSh2dG8sIHZmcm9tLCB2YWRkciwgdG8pO1xuaW5jbHVkZS9saW51eC9oaWdobWVtLmg6NDA0Olx0a21zYW5fdW5wb2lzb25fbWVtb3J5KHBhZ2VfYWRkcmVzcyh0byksIFBBR0VfU0laRSk7XG5pbmNsdWRlL2xpbnV4L2hpZ2htZW0uaC00MDUtXHRrdW5tYXBfbG9jYWwodnRvKTtcbi0tXG5pbmNsdWRlL2xpbnV4L2hpZ2htZW0uaD00MzQ9c3RhdGljIGlubGluZSBpbnQgY29weV9tY191c2VyX2hpZ2hwYWdlKHN0cnVjdCBwYWdlICp0bywgc3RydWN0IHBhZ2UgKmZyb20sXG4tLVxuaW5jbHVkZS9saW51eC9oaWdobWVtLmgtNDQzLVx0aWYgKCFyZXQpXG5pbmNsdWRlL2xpbnV4L2hpZ2htZW0uaDo0NDQ6XHRcdGttc2FuX3VucG9pc29uX21lbW9yeShwYWdlX2FkZHJlc3ModG8pLCBQQUdFX1NJWkUpO1xuaW5jbHVkZS9saW51eC9oaWdobWVtLmgtNDQ1LVx0a3VubWFwX2xvY2FsKHZ0byk7XG4tLVxuaW5jbHVkZS9saW51eC9pbnN0cnVtZW50ZWQuaD0xNjE9aW5zdHJ1bWVudF9jb3B5X2Zyb21fdXNlcl9hZnRlcihjb25zdCB2b2lkICp0bywgY29uc3Qgdm9pZCBfX3VzZXIgKmZyb20sXG4tLVxuaW5jbHVkZS9saW51eC9pbnN0cnVtZW50ZWQuaC0xNjMte1xuaW5jbHVkZS9saW51eC9pbnN0cnVtZW50ZWQuaDoxNjQ6XHRrbXNhbl91bnBvaXNvbl9tZW1vcnkodG8sIG4gLSBsZWZ0KTtcbmluY2x1ZGUvbGludXgvaW5zdHJ1bWVudGVkLmgtMTY1LX1cbi0tXG5pbmNsdWRlL2xpbnV4L2luc3RydW1lbnRlZC5oPTE5NT1zdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgaW5zdHJ1bWVudF9tZW1jcHlfYWZ0ZXIodm9pZCAqdG8sIGNvbnN0IHZvaWQgKmZyb20sXG4tLVxuaW5jbHVkZS9saW51eC9pbnN0cnVtZW50ZWQuaC0yMTItXHR1NjQgX190bXAgPSAodTY0KSh0byk7XHRcdFx0XHRcXFxuaW5jbHVkZS9saW51eC9pbnN0cnVtZW50ZWQuaDoyMTM6XHRrbXNhbl91bnBvaXNvbl9tZW1vcnkoXHUwMDI2X190bXAsIHNpemVvZihfX3RtcCkpO1x0XFxcbmluY2x1ZGUvbGludXgvaW5zdHJ1bWVudGVkLmgtMjE0LVx0dG8gPSBfX3RtcDtcdFx0XHRcdFx0XFxcbi0tXG5pbmNsdWRlL2xpbnV4L2ttc2FuLWNoZWNrcy5oPTI3PXZvaWQga21zYW5fcG9pc29uX21lbW9yeShjb25zdCB2b2lkICphZGRyZXNzLCBzaXplX3Qgc2l6ZSwgZ2ZwX3QgZmxhZ3MpO1xuLS1cbmluY2x1ZGUvbGludXgva21zYW4tY2hlY2tzLmgtMjktLyoqXG5pbmNsdWRlL2xpbnV4L2ttc2FuLWNoZWNrcy5oOjMwOiAqIGttc2FuX3VucG9pc29uX21lbW9yeSgpIC0gIE1hcmsgdGhlIG1lbW9yeSByYW5nZSBhcyBpbml0aWFsaXplZC5cbmluY2x1ZGUvbGludXgva21zYW4tY2hlY2tzLmgtMzEtICogQGFkZHJlc3M6IGFkZHJlc3MgdG8gc3RhcnQgd2l0aC5cbi0tXG5pbmNsdWRlL2xpbnV4L2ttc2FuLWNoZWNrcy5oLTM2LSAqL1xuaW5jbHVkZS9saW51eC9rbXNhbi1jaGVja3MuaDozNzp2b2lkIGttc2FuX3VucG9pc29uX21lbW9yeShjb25zdCB2b2lkICphZGRyZXNzLCBzaXplX3Qgc2l6ZSk7XG5pbmNsdWRlL2xpbnV4L2ttc2FuLWNoZWNrcy5oLTM4LVxuLS1cbmluY2x1ZGUvbGludXgva21zYW4tY2hlY2tzLmg9Nzc9c3RhdGljIGlubGluZSB2b2lkIGttc2FuX3BvaXNvbl9tZW1vcnkoY29uc3Qgdm9pZCAqYWRkcmVzcywgc2l6ZV90IHNpemUsXG4tLVxuaW5jbHVkZS9saW51eC9rbXNhbi1jaGVja3MuaC04MC19XG5pbmNsdWRlL2xpbnV4L2ttc2FuLWNoZWNrcy5oOjgxOnN0YXRpYyBpbmxpbmUgdm9pZCBrbXNhbl91bnBvaXNvbl9tZW1vcnkoY29uc3Qgdm9pZCAqYWRkcmVzcywgc2l6ZV90IHNpemUpXG5pbmNsdWRlL2xpbnV4L2ttc2FuLWNoZWNrcy5oLTgyLXtcbi0tXG5pbmNsdWRlL2xpbnV4L2ttc2FuLmg9MjIxPXZvaWQga21zYW5faGFuZGxlX3VyYihjb25zdCBzdHJ1Y3QgdXJiICp1cmIsIGJvb2wgaXNfb3V0KTtcbi0tXG5pbmNsdWRlL2xpbnV4L2ttc2FuLmgtMjI3LSAqIEtNU0FOIHVucG9pc29ucyB0aGUgY29udGVudHMgb2YgdGhlIHBhc3NlZCBwdF9yZWdzLCBwcmV2ZW50aW5nIHBvdGVudGlhbFxuaW5jbHVkZS9saW51eC9rbXNhbi5oOjIyODogKiBmYWxzZSBwb3NpdGl2ZSByZXBvcnRzLiBVbmxpa2Uga21zYW5fdW5wb2lzb25fbWVtb3J5KCksXG5pbmNsdWRlL2xpbnV4L2ttc2FuLmgtMjI5LSAqIGttc2FuX3VucG9pc29uX2VudHJ5X3JlZ3MoKSBjYW4gYmUgY2FsbGVkIGZyb20gdGhlIHJlZ2lvbnMgd2hlcmVcbi0tXG5pbmNsdWRlL2xpbnV4L21tLmg9NDk5ND1leHRlcm4gaW50IG1lbW9yeV9mYWlsdXJlKHVuc2lnbmVkIGxvbmcgcGZuLCBpbnQgZmxhZ3MpO1xuaW5jbHVkZS9saW51eC9tbS5oOjQ5OTU6ZXh0ZXJuIGludCB1bnBvaXNvbl9tZW1vcnkodW5zaWduZWQgbG9uZyBwZm4pO1xuaW5jbHVkZS9saW51eC9tbS5oLTQ5OTYtZXh0ZXJuIGF0b21pY19sb25nX3QgbnVtX3BvaXNvbmVkX3BhZ2VzIF9fcmVhZF9tb3N0bHk7XG4tLVxua2VybmVsL2JwZi9jb3JlLmM9MjQwMT1zdGF0aWMgdW5zaWduZWQgaW50IFBST0dfTkFNRShzdGFja19zaXplKShjb25zdCB2b2lkICpjdHgsIGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqaW5zbikgXFxcbi0tXG5rZXJuZWwvYnBmL2NvcmUuYy0yNDA1LVxcXG5rZXJuZWwvYnBmL2NvcmUuYzoyNDA2Olx0a21zYW5fdW5wb2lzb25fbWVtb3J5KHN0YWNrLCBzaXplb2Yoc3RhY2spKTsgXFxcbmtlcm5lbC9icGYvY29yZS5jLTI0MDctXHRGUCA9ICh1NjQpICh1bnNpZ25lZCBsb25nKSBcdTAwMjZzdGFja1tBUlJBWV9TSVpFKHN0YWNrKV07IFxcXG4tLVxua2VybmVsL2JwZi9jb3JlLmM9MjQxND1zdGF0aWMgdTY0IFBST0dfTkFNRV9BUkdTKHN0YWNrX3NpemUpKHU2NCByMSwgdTY0IHIyLCB1NjQgcjMsIHU2NCByNCwgdTY0IHI1LCBcXFxuLS1cbmtlcm5lbC9icGYvY29yZS5jLTI0MTktXFxcbmtlcm5lbC9icGYvY29yZS5jOjI0MjA6XHRrbXNhbl91bnBvaXNvbl9tZW1vcnkoc3RhY2ssIHNpemVvZihzdGFjaykpOyBcXFxua2VybmVsL2JwZi9jb3JlLmMtMjQyMS1cdEZQID0gKHU2NCkgKHVuc2lnbmVkIGxvbmcpIFx1MDAyNnN0YWNrW0FSUkFZX1NJWkUoc3RhY2spXTsgXFxcbi0tXG5rZXJuZWwvZG1hL3N3aW90bGIuYz04NTg9c3RhdGljIHZvaWQgc3dpb3RsYl9ib3VuY2Uoc3RydWN0IGRldmljZSAqZGV2LCBwaHlzX2FkZHJfdCB0bGJfYWRkciwgc2l6ZV90IHNpemUsXG4tLVxua2VybmVsL2RtYS9zd2lvdGxiLmMtOTE3LVx0XHRcdH0gZWxzZSB7XG5rZXJuZWwvZG1hL3N3aW90bGIuYzo5MTg6XHRcdFx0XHRrbXNhbl91bnBvaXNvbl9tZW1vcnkodmFkZHIsIHN6KTtcbmtlcm5lbC9kbWEvc3dpb3RsYi5jLTkxOS1cdFx0XHRcdG1lbWNweV90b19wYWdlKHBhZ2UsIG9mZnNldCwgdmFkZHIsIHN6KTtcbi0tXG5rZXJuZWwvZG1hL3N3aW90bGIuYy05MzYtXHR9IGVsc2Uge1xua2VybmVsL2RtYS9zd2lvdGxiLmM6OTM3Olx0XHRrbXNhbl91bnBvaXNvbl9tZW1vcnkodmFkZHIsIHNpemUpO1xua2VybmVsL2RtYS9zd2lvdGxiLmMtOTM4LVx0XHRtZW1jcHkocGh5c190b192aXJ0KG9yaWdfYWRkciksIHZhZGRyLCBzaXplKTtcbi0tXG5rZXJuZWwva2Nvdi5jPTE1MT1zdGF0aWMgdm9pZCBrY292X3JlbW90ZV9hcmVhX3B1dChzdHJ1Y3Qga2Nvdl9yZW1vdGVfYXJlYSAqYXJlYSxcbi0tXG5rZXJuZWwva2Nvdi5jLTE2MS1cdCAqL1xua2VybmVsL2tjb3YuYzoxNjI6XHRrbXNhbl91bnBvaXNvbl9tZW1vcnkoXHUwMDI2YXJlYS1cdTAwM2VsaXN0LCBzaXplb2YoYXJlYS1cdTAwM2VsaXN0KSk7XG5rZXJuZWwva2Nvdi5jLTE2My19XG4tLVxua2VybmVsL3RyYWNlL2Z0cmFjZS5jPTg1NTU9dm9pZCBhcmNoX2Z0cmFjZV9vcHNfbGlzdF9mdW5jKHVuc2lnbmVkIGxvbmcgaXAsIHVuc2lnbmVkIGxvbmcgcGFyZW50X2lwLFxuLS1cbmtlcm5lbC90cmFjZS9mdHJhY2UuYy04NTU3LXtcbmtlcm5lbC90cmFjZS9mdHJhY2UuYzo4NTU4Olx0a21zYW5fdW5wb2lzb25fbWVtb3J5KGZyZWdzLCBmdHJhY2VfcmVnc19zaXplKCkpO1xua2VybmVsL3RyYWNlL2Z0cmFjZS5jLTg1NTktXHRfX2Z0cmFjZV9vcHNfbGlzdF9mdW5jKGlwLCBwYXJlbnRfaXAsIE5VTEwsIGZyZWdzKTtcbi0tXG5saWIvY3J5cHRvL2FybTY0L3NoYTI1Ni5oPTQ0PXN0YXRpYyBib29sIHNoYTI1Nl9maW51cF8yeF9hcmNoKGNvbnN0IHN0cnVjdCBfX3NoYTI1Nl9jdHggKmN0eCxcbi0tXG5saWIvY3J5cHRvL2FybTY0L3NoYTI1Ni5oLTUzLVx0XHRcdHNoYTI1Nl9jZV9maW51cDJ4KGN0eCwgZGF0YTEsIGRhdGEyLCBsZW4sIG91dDEsIG91dDIpO1xubGliL2NyeXB0by9hcm02NC9zaGEyNTYuaDo1NDpcdFx0a21zYW5fdW5wb2lzb25fbWVtb3J5KG91dDEsIFNIQTI1Nl9ESUdFU1RfU0laRSk7XG5saWIvY3J5cHRvL2FybTY0L3NoYTI1Ni5oOjU1Olx0XHRrbXNhbl91bnBvaXNvbl9tZW1vcnkob3V0MiwgU0hBMjU2X0RJR0VTVF9TSVpFKTtcbmxpYi9jcnlwdG8vYXJtNjQvc2hhMjU2LmgtNTYtXHRcdHJldHVybiB0cnVlO1xuLS1cbmxpYi9jcnlwdG8vczM5MC9zaGEzLmg9NjQ9c3RhdGljIGlubGluZSBib29sIHMzOTBfc2hhMyhpbnQgZnVuYywgY29uc3QgdTggKmluLCBzaXplX3QgaW5fbGVuLFxuLS1cbmxpYi9jcnlwdG8vczM5MC9zaGEzLmgtNzktXHRpZiAoc3RhdGljX2JyYW5jaF9saWtlbHkoXHUwMDI2aGF2ZV9zaGEzX2luaXRfb3B0aW0pKVxubGliL2NyeXB0by9zMzkwL3NoYTMuaDo4MDpcdFx0a21zYW5fdW5wb2lzb25fbWVtb3J5KFx1MDAyNnN0YXRlLCBvdXRfbGVuKTtcbmxpYi9jcnlwdG8vczM5MC9zaGEzLmgtODEtXG4tLVxubGliL2NyeXB0by94ODYvc2hhMjU2Lmg9NzA9c3RhdGljIGJvb2wgc2hhMjU2X2ZpbnVwXzJ4X2FyY2goY29uc3Qgc3RydWN0IF9fc2hhMjU2X2N0eCAqY3R4LFxuLS1cbmxpYi9jcnlwdG8veDg2L3NoYTI1Ni5oLTg0LVx0XHRrZXJuZWxfZnB1X2VuZCgpO1xubGliL2NyeXB0by94ODYvc2hhMjU2Lmg6ODU6XHRcdGttc2FuX3VucG9pc29uX21lbW9yeShvdXQxLCBTSEEyNTZfRElHRVNUX1NJWkUpO1xubGliL2NyeXB0by94ODYvc2hhMjU2Lmg6ODY6XHRcdGttc2FuX3VucG9pc29uX21lbW9yeShvdXQyLCBTSEEyNTZfRElHRVNUX1NJWkUpO1xubGliL2NyeXB0by94ODYvc2hhMjU2LmgtODctXHRcdHJldHVybiB0cnVlO1xuLS1cbmxpYi9pb21hcC5jPTM2MD12b2lkIGlvcmVhZDhfcmVwKGNvbnN0IHZvaWQgX19pb21lbSAqYWRkciwgdm9pZCAqZHN0LCB1bnNpZ25lZCBsb25nIGNvdW50KVxuLS1cbmxpYi9pb21hcC5jLTM2My1cdC8qIEtNU0FOIG11c3QgdHJlYXQgdmFsdWVzIHJlYWQgZnJvbSBkZXZpY2VzIGFzIGluaXRpYWxpemVkLiAqL1xubGliL2lvbWFwLmM6MzY0Olx0a21zYW5fdW5wb2lzb25fbWVtb3J5KGRzdCwgY291bnQpO1xubGliL2lvbWFwLmMtMzY1LX1cbmxpYi9pb21hcC5jPTM2Nj12b2lkIGlvcmVhZDE2X3JlcChjb25zdCB2b2lkIF9faW9tZW0gKmFkZHIsIHZvaWQgKmRzdCwgdW5zaWduZWQgbG9uZyBjb3VudClcbi0tXG5saWIvaW9tYXAuYy0zNjktXHQvKiBLTVNBTiBtdXN0IHRyZWF0IHZhbHVlcyByZWFkIGZyb20gZGV2aWNlcyBhcyBpbml0aWFsaXplZC4gKi9cbmxpYi9pb21hcC5jOjM3MDpcdGttc2FuX3VucG9pc29uX21lbW9yeShkc3QsIGNvdW50ICogMik7XG5saWIvaW9tYXAuYy0zNzEtfVxubGliL2lvbWFwLmM9MzcyPXZvaWQgaW9yZWFkMzJfcmVwKGNvbnN0IHZvaWQgX19pb21lbSAqYWRkciwgdm9pZCAqZHN0LCB1bnNpZ25lZCBsb25nIGNvdW50KVxuLS1cbmxpYi9pb21hcC5jLTM3NS1cdC8qIEtNU0FOIG11c3QgdHJlYXQgdmFsdWVzIHJlYWQgZnJvbSBkZXZpY2VzIGFzIGluaXRpYWxpemVkLiAqL1xubGliL2lvbWFwLmM6Mzc2Olx0a21zYW5fdW5wb2lzb25fbWVtb3J5KGRzdCwgY291bnQgKiA0KTtcbmxpYi9pb21hcC5jLTM3Ny19XG4tLVxubGliL3N0YWNrZGVwb3QuYz00MzQ9ZGVwb3RfYWxsb2Nfc3RhY2sodW5zaWduZWQgbG9uZyAqZW50cmllcywgdW5zaWduZWQgaW50IG5yX2VudHJpZXMsIHUzMiBoYXNoLCBkZXBvdF9mbGFnc190IGZsYWdzLCB2b2lkICoqcHJlYWxsb2MpXG4tLVxubGliL3N0YWNrZGVwb3QuYy00ODctXHQgKi9cbmxpYi9zdGFja2RlcG90LmM6NDg4Olx0a21zYW5fdW5wb2lzb25fbWVtb3J5KHN0YWNrLCByZWNvcmRfc2l6ZSk7XG5saWIvc3RhY2tkZXBvdC5jLTQ4OS1cbi0tXG5saWIvc3RhY2tkZXBvdC5jPTc2MD11bnNpZ25lZCBpbnQgc3RhY2tfZGVwb3RfZmV0Y2goZGVwb3Rfc3RhY2tfaGFuZGxlX3QgaGFuZGxlLFxuLS1cbmxpYi9zdGFja2RlcG90LmMtNzY5LVx0ICovXG5saWIvc3RhY2tkZXBvdC5jOjc3MDpcdGttc2FuX3VucG9pc29uX21lbW9yeShlbnRyaWVzLCBzaXplb2YoKmVudHJpZXMpKTtcbmxpYi9zdGFja2RlcG90LmMtNzcxLVxuLS1cbmxpYi96bGliX2RmbHRjYy9kZmx0Y2NfdXRpbC5oPTI5PXN0YXRpYyBpbmxpbmUgZGZsdGNjX2NjIGRmbHRjYyhcbi0tXG5saWIvemxpYl9kZmx0Y2MvZGZsdGNjX3V0aWwuaC03MS0gICAgY2FzZSBERkxUQ0NfUUFGOlxubGliL3psaWJfZGZsdGNjL2RmbHRjY191dGlsLmg6NzI6ICAgICAgICBrbXNhbl91bnBvaXNvbl9tZW1vcnkocGFyYW0sIHNpemVvZihzdHJ1Y3QgZGZsdGNjX3FhZl9wYXJhbSkpO1xubGliL3psaWJfZGZsdGNjL2RmbHRjY191dGlsLmgtNzMtICAgICAgICBicmVhaztcbmxpYi96bGliX2RmbHRjYy9kZmx0Y2NfdXRpbC5oLTc0LSAgICBjYXNlIERGTFRDQ19HREhUOlxubGliL3psaWJfZGZsdGNjL2RmbHRjY191dGlsLmg6NzU6ICAgICAgICBrbXNhbl91bnBvaXNvbl9tZW1vcnkocGFyYW0sIG9mZnNldG9mKHN0cnVjdCBkZmx0Y2NfcGFyYW1fdjAsIGNzYikpO1xubGliL3psaWJfZGZsdGNjL2RmbHRjY191dGlsLmgtNzYtICAgICAgICBicmVhaztcbmxpYi96bGliX2RmbHRjYy9kZmx0Y2NfdXRpbC5oLTc3LSAgICBjYXNlIERGTFRDQ19DTVBSOlxubGliL3psaWJfZGZsdGNjL2RmbHRjY191dGlsLmg6Nzg6ICAgICAgICBrbXNhbl91bnBvaXNvbl9tZW1vcnkocGFyYW0sIHNpemVvZihzdHJ1Y3QgZGZsdGNjX3BhcmFtX3YwKSk7XG5saWIvemxpYl9kZmx0Y2MvZGZsdGNjX3V0aWwuaDo3OTogICAgICAgIGttc2FuX3VucG9pc29uX21lbW9yeShcbmxpYi96bGliX2RmbHRjYy9kZmx0Y2NfdXRpbC5oLTgwLSAgICAgICAgICAgICAgICBvcmlnX3QyLFxuLS1cbmxpYi96bGliX2RmbHRjYy9kZmx0Y2NfdXRpbC5oLTg0LSAgICBjYXNlIERGTFRDQ19YUE5EOlxubGliL3psaWJfZGZsdGNjL2RmbHRjY191dGlsLmg6ODU6ICAgICAgICBrbXNhbl91bnBvaXNvbl9tZW1vcnkocGFyYW0sIHNpemVvZihzdHJ1Y3QgZGZsdGNjX3BhcmFtX3YwKSk7XG5saWIvemxpYl9kZmx0Y2MvZGZsdGNjX3V0aWwuaDo4NjogICAgICAgIGttc2FuX3VucG9pc29uX21lbW9yeShvcmlnX3QyLCB0MiAtIG9yaWdfdDIpO1xubGliL3psaWJfZGZsdGNjL2RmbHRjY191dGlsLmgtODctICAgICAgICBicmVhaztcbi0tXG5tbS9od3BvaXNvbi1pbmplY3QuYz0xNDQ9c3RhdGljIGludCBod3BvaXNvbl91bnBvaXNvbih2b2lkICpkYXRhLCB1NjQgdmFsKVxuLS1cbm1tL2h3cG9pc29uLWluamVjdC5jLTE0OC1cbm1tL2h3cG9pc29uLWluamVjdC5jOjE0OTpcdHJldHVybiB1bnBvaXNvbl9tZW1vcnkodmFsKTtcbm1tL2h3cG9pc29uLWluamVjdC5jLTE1MC19XG4tLVxubW0va21zYW4vY29yZS5jPTQwPXZvaWQga21zYW5faW50ZXJuYWxfdGFza19jcmVhdGUoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrKVxuLS1cbm1tL2ttc2FuL2NvcmUuYy00NS1cdF9fbWVtc2V0KGN0eCwgMCwgc2l6ZW9mKCpjdHgpKTtcbm1tL2ttc2FuL2NvcmUuYzo0NjpcdGttc2FuX2ludGVybmFsX3VucG9pc29uX21lbW9yeShpbmZvLCBzaXplb2YoKmluZm8pLCBmYWxzZSk7XG5tbS9rbXNhbi9jb3JlLmMtNDctfVxuLS1cbm1tL2ttc2FuL2NvcmUuYz00OT12b2lkIGttc2FuX2ludGVybmFsX3BvaXNvbl9tZW1vcnkodm9pZCAqYWRkcmVzcywgc2l6ZV90IHNpemUsIGdmcF90IGZsYWdzLFxuLS1cbm1tL2ttc2FuL2NvcmUuYy02MC1cbm1tL2ttc2FuL2NvcmUuYzo2MTp2b2lkIGttc2FuX2ludGVybmFsX3VucG9pc29uX21lbW9yeSh2b2lkICphZGRyZXNzLCBzaXplX3Qgc2l6ZSwgYm9vbCBjaGVja2VkKVxubW0va21zYW4vY29yZS5jLTYyLXtcbi0tXG5tbS9rbXNhbi9jb3JlLmM9ODA9dm9pZCBrbXNhbl9pbnRlcm5hbF9tZW1tb3ZlX21ldGFkYXRhKHZvaWQgKmRzdCwgdm9pZCAqc3JjLCBzaXplX3Qgbilcbi0tXG5tbS9rbXNhbi9jb3JlLmMtOTktXHRcdC8qIEBzcmMgaXMgdW50cmFja2VkOiBtYXJrIEBkc3QgYXMgaW5pdGlhbGl6ZWQuICovXG5tbS9rbXNhbi9jb3JlLmM6MTAwOlx0XHRrbXNhbl9pbnRlcm5hbF91bnBvaXNvbl9tZW1vcnkoZHN0LCBuLCAvKmNoZWNrZWQqLyBmYWxzZSk7XG5tbS9rbXNhbi9jb3JlLmMtMTAxLVx0XHRyZXR1cm47XG4tLVxubW0va21zYW4vY29yZS5jPTE0NT1kZXBvdF9zdGFja19oYW5kbGVfdCBrbXNhbl9pbnRlcm5hbF9jaGFpbl9vcmlnaW4oZGVwb3Rfc3RhY2tfaGFuZGxlX3QgaWQpXG4tLVxubW0va21zYW4vY29yZS5jLTE4NS1cdCAqL1xubW0va21zYW4vY29yZS5jOjE4NjpcdGttc2FuX2ludGVybmFsX3VucG9pc29uX21lbW9yeShlbnRyaWVzLCBzaXplb2YoZW50cmllcyksIGZhbHNlKTtcbm1tL2ttc2FuL2NvcmUuYy0xODctXHRoYW5kbGUgPSBzdGFja19kZXBvdF9zYXZlKGVudHJpZXMsIEFSUkFZX1NJWkUoZW50cmllcyksIF9fR0ZQX0hJR0gpO1xuLS1cbm1tL2ttc2FuL2hvb2tzLmM9NDg9dm9pZCBrbXNhbl9zbGFiX2FsbG9jKHN0cnVjdCBrbWVtX2NhY2hlICpzLCB2b2lkICpvYmplY3QsIGdmcF90IGZsYWdzKVxuLS1cbm1tL2ttc2FuL2hvb2tzLmMtNjItXHRpZiAoZmxhZ3MgXHUwMDI2IF9fR0ZQX1pFUk8pXG5tbS9rbXNhbi9ob29rcy5jOjYzOlx0XHRrbXNhbl9pbnRlcm5hbF91bnBvaXNvbl9tZW1vcnkob2JqZWN0LCBzLVx1MDAzZW9iamVjdF9zaXplLFxubW0va21zYW4vaG9va3MuYy02NC1cdFx0XHRcdFx0ICAgICAgIEtNU0FOX1BPSVNPTl9DSEVDSyk7XG4tLVxubW0va21zYW4vaG9va3MuYz05Mz12b2lkIGttc2FuX2ttYWxsb2NfbGFyZ2UoY29uc3Qgdm9pZCAqcHRyLCBzaXplX3Qgc2l6ZSwgZ2ZwX3QgZmxhZ3MpXG4tLVxubW0va21zYW4vaG9va3MuYy0xMDAtXHRpZiAoZmxhZ3MgXHUwMDI2IF9fR0ZQX1pFUk8pXG5tbS9rbXNhbi9ob29rcy5jOjEwMTpcdFx0a21zYW5faW50ZXJuYWxfdW5wb2lzb25fbWVtb3J5KCh2b2lkICopcHRyLCBzaXplLFxubW0va21zYW4vaG9va3MuYy0xMDItXHRcdFx0XHRcdCAgICAgICAvKmNoZWNrZWQqLyB0cnVlKTtcbi0tXG5tbS9rbXNhbi9ob29rcy5jPTMwMT12b2lkIGttc2FuX2hhbmRsZV91cmIoY29uc3Qgc3RydWN0IHVyYiAqdXJiLCBib29sIGlzX291dClcbi0tXG5tbS9rbXNhbi9ob29rcy5jLTMxMC1cdGVsc2Vcbm1tL2ttc2FuL2hvb2tzLmM6MzExOlx0XHRrbXNhbl9pbnRlcm5hbF91bnBvaXNvbl9tZW1vcnkodXJiLVx1MDAzZXRyYW5zZmVyX2J1ZmZlcixcbm1tL2ttc2FuL2hvb2tzLmMtMzEyLVx0XHRcdFx0XHQgICAgICAgdXJiLVx1MDAzZXRyYW5zZmVyX2J1ZmZlcl9sZW5ndGgsXG4tLVxubW0va21zYW4vaG9va3MuYz0zMTc9c3RhdGljIHZvaWQga21zYW5faGFuZGxlX2RtYV9wYWdlKGNvbnN0IHZvaWQgKmFkZHIsIHNpemVfdCBzaXplLFxuLS1cbm1tL2ttc2FuL2hvb2tzLmMtMzIzLVx0XHRcdFx0XHQgICAgLyp1c2VyX2FkZHIqLyBOVUxMLCBSRUFTT05fQU5ZKTtcbm1tL2ttc2FuL2hvb2tzLmM6MzI0Olx0XHRrbXNhbl9pbnRlcm5hbF91bnBvaXNvbl9tZW1vcnkoKHZvaWQgKilhZGRyLCBzaXplLFxubW0va21zYW4vaG9va3MuYy0zMjUtXHRcdFx0XHRcdCAgICAgICAvKmNoZWNrZWQqLyBmYWxzZSk7XG4tLVxubW0va21zYW4vaG9va3MuYy0zMzEtXHRjYXNlIERNQV9GUk9NX0RFVklDRTpcbm1tL2ttc2FuL2hvb2tzLmM6MzMyOlx0XHRrbXNhbl9pbnRlcm5hbF91bnBvaXNvbl9tZW1vcnkoKHZvaWQgKilhZGRyLCBzaXplLFxubW0va21zYW4vaG9va3MuYy0zMzMtXHRcdFx0XHRcdCAgICAgICAvKmNoZWNrZWQqLyBmYWxzZSk7XG4tLVxubW0va21zYW4vaG9va3MuYz0zOTI9RVhQT1JUX1NZTUJPTChrbXNhbl9wb2lzb25fbWVtb3J5KTtcbi0tXG5tbS9rbXNhbi9ob29rcy5jLTM5Ny0gKi9cbm1tL2ttc2FuL2hvb2tzLmM6Mzk4OnZvaWQga21zYW5fdW5wb2lzb25fbWVtb3J5KGNvbnN0IHZvaWQgKmFkZHJlc3MsIHNpemVfdCBzaXplKVxubW0va21zYW4vaG9va3MuYy0zOTkte1xuLS1cbm1tL2ttc2FuL2hvb2tzLmMtNDA2LVx0LyogVGhlIHVzZXJzIG1heSB3YW50IHRvIHBvaXNvbi91bnBvaXNvbiByYW5kb20gbWVtb3J5LiAqL1xubW0va21zYW4vaG9va3MuYzo0MDc6XHRrbXNhbl9pbnRlcm5hbF91bnBvaXNvbl9tZW1vcnkoKHZvaWQgKilhZGRyZXNzLCBzaXplLFxubW0va21zYW4vaG9va3MuYy00MDgtXHRcdFx0XHQgICAgICAgS01TQU5fUE9JU09OX05PQ0hFQ0spO1xuLS1cbm1tL2ttc2FuL2hvb2tzLmMtNDEwLX1cbm1tL2ttc2FuL2hvb2tzLmM6NDExOkVYUE9SVF9TWU1CT0woa21zYW5fdW5wb2lzb25fbWVtb3J5KTtcbm1tL2ttc2FuL2hvb2tzLmMtNDEyLVxubW0va21zYW4vaG9va3MuYy00MTMtLypcbm1tL2ttc2FuL2hvb2tzLmM6NDE0OiAqIFZlcnNpb24gb2Yga21zYW5fdW5wb2lzb25fbWVtb3J5KCkgY2FsbGVkIGZyb20gSVJRIGVudHJ5IGZ1bmN0aW9ucy5cbm1tL2ttc2FuL2hvb2tzLmMtNDE1LSAqL1xubW0va21zYW4vaG9va3MuYz00MTY9dm9pZCBrbXNhbl91bnBvaXNvbl9lbnRyeV9yZWdzKGNvbnN0IHN0cnVjdCBwdF9yZWdzICpyZWdzKVxubW0va21zYW4vaG9va3MuYy00MTcte1xubW0va21zYW4vaG9va3MuYzo0MTg6XHRrbXNhbl91bnBvaXNvbl9tZW1vcnkoKHZvaWQgKilyZWdzLCBzaXplb2YoKnJlZ3MpKTtcbm1tL2ttc2FuL2hvb2tzLmMtNDE5LX1cbi0tXG5tbS9rbXNhbi9pbnN0cnVtZW50YXRpb24uYz0xMDY9dm9pZCBfX21zYW5faW5zdHJ1bWVudF9hc21fc3RvcmUodm9pZCAqYWRkciwgdWludHB0cl90IHNpemUpXG4tLVxubW0va21zYW4vaW5zdHJ1bWVudGF0aW9uLmMtMTI2LVx0LyogVW5wb2lzb25pbmcgdGhlIG1lbW9yeSBvbiBiZXN0IGVmZm9ydC4gKi9cbm1tL2ttc2FuL2luc3RydW1lbnRhdGlvbi5jOjEyNzpcdGttc2FuX2ludGVybmFsX3VucG9pc29uX21lbW9yeShhZGRyLCBzaXplLCAvKmNoZWNrZWQqLyBmYWxzZSk7XG5tbS9rbXNhbi9pbnN0cnVtZW50YXRpb24uYy0xMjgtXHR1c2VyX2FjY2Vzc19yZXN0b3JlKHVhX2ZsYWdzKTtcbi0tXG5tbS9rbXNhbi9pbnN0cnVtZW50YXRpb24uYz0yMTA9dm9pZCAqX19tc2FuX21lbXNldCh2b2lkICpkc3QsIGludCBjLCB1aW50cHRyX3Qgbilcbi0tXG5tbS9rbXNhbi9pbnN0cnVtZW50YXRpb24uYy0yMjUtXHQgKi9cbm1tL2ttc2FuL2luc3RydW1lbnRhdGlvbi5jOjIyNjpcdGttc2FuX2ludGVybmFsX3VucG9pc29uX21lbW9yeShkc3QsIG4sIC8qY2hlY2tlZCovIGZhbHNlKTtcbm1tL2ttc2FuL2luc3RydW1lbnRhdGlvbi5jLTIyNy1cdGttc2FuX2xlYXZlX3J1bnRpbWUoKTtcbi0tXG5tbS9rbXNhbi9pbnN0cnVtZW50YXRpb24uYz0yOTc9dm9pZCBfX21zYW5fdW5wb2lzb25fYWxsb2NhKHZvaWQgKmFkZHJlc3MsIHVpbnRwdHJfdCBzaXplKVxuLS1cbm1tL2ttc2FuL2luc3RydW1lbnRhdGlvbi5jLTMwMi1cdGttc2FuX2VudGVyX3J1bnRpbWUoKTtcbm1tL2ttc2FuL2luc3RydW1lbnRhdGlvbi5jOjMwMzpcdGttc2FuX2ludGVybmFsX3VucG9pc29uX21lbW9yeShhZGRyZXNzLCBzaXplLCAvKmNoZWNrZWQqLyB0cnVlKTtcbm1tL2ttc2FuL2luc3RydW1lbnRhdGlvbi5jLTMwNC1cdGttc2FuX2xlYXZlX3J1bnRpbWUoKTtcbi0tXG5tbS9rbXNhbi9rbXNhbi5oPTE1NT12b2lkIGttc2FuX2ludGVybmFsX3BvaXNvbl9tZW1vcnkodm9pZCAqYWRkcmVzcywgc2l6ZV90IHNpemUsIGdmcF90IGZsYWdzLFxubW0va21zYW4va21zYW4uaC0xNTYtXHRcdFx0XHQgIHVuc2lnbmVkIGludCBwb2lzb25fZmxhZ3MpO1xubW0va21zYW4va21zYW4uaDoxNTc6dm9pZCBrbXNhbl9pbnRlcm5hbF91bnBvaXNvbl9tZW1vcnkodm9pZCAqYWRkcmVzcywgc2l6ZV90IHNpemUsIGJvb2wgY2hlY2tlZCk7XG5tbS9rbXNhbi9rbXNhbi5oLTE1OC12b2lkIGttc2FuX2ludGVybmFsX3NldF9zaGFkb3dfb3JpZ2luKHZvaWQgKmFkZHJlc3MsIHNpemVfdCBzaXplLCBpbnQgYixcbi0tXG5tbS9rbXNhbi9rbXNhbl90ZXN0LmM9NjcwPXN0YXRpYyB2b2lkIHRlc3Rfc3RhY2tkZXBvdF9yb3VuZHRyaXAoc3RydWN0IGt1bml0ICp0ZXN0KVxuLS1cbm1tL2ttc2FuL2ttc2FuX3Rlc3QuYy02OTEtLypcbm1tL2ttc2FuL2ttc2FuX3Rlc3QuYzo2OTI6ICogVGVzdCBjYXNlOiBlbnN1cmUgdGhhdCBrbXNhbl91bnBvaXNvbl9tZW1vcnkoKSBhbmQgdGhlIGluc3RydW1lbnRhdGlvbiB3b3JrXG5tbS9rbXNhbi9rbXNhbl90ZXN0LmMtNjkzLSAqIHRoZSBzYW1lLlxubW0va21zYW4va21zYW5fdGVzdC5jLTY5NC0gKi9cbm1tL2ttc2FuL2ttc2FuX3Rlc3QuYzo2OTU6c3RhdGljIHZvaWQgdGVzdF91bnBvaXNvbl9tZW1vcnkoc3RydWN0IGt1bml0ICp0ZXN0KVxubW0va21zYW4va21zYW5fdGVzdC5jLTY5Ni17XG5tbS9rbXNhbi9rbXNhbl90ZXN0LmM6Njk3Olx0RVhQRUNUQVRJT05fVU5JTklUX1ZBTFVFX0ZOKGV4cGVjdCwgXCYjMzQ7dGVzdF91bnBvaXNvbl9tZW1vcnlcJiMzNDspO1xubW0va21zYW4va21zYW5fdGVzdC5jLTY5OC1cdHZvbGF0aWxlIGNoYXIgYVs0XSwgYls0XTtcbi0tXG5tbS9rbXNhbi9rbXNhbl90ZXN0LmMtNzAxLVx0XHR0ZXN0LFxubW0va21zYW4va21zYW5fdGVzdC5jOjcwMjpcdFx0XCYjMzQ7dW5wb2lzb25pbmcgdmlhIHRoZSBpbnN0cnVtZW50YXRpb24gdnMuIGttc2FuX3VucG9pc29uX21lbW9yeSgpICgyIFVNUiByZXBvcnRzKVxcblwmIzM0Oyk7XG5tbS9rbXNhbi9rbXNhbl90ZXN0LmMtNzAzLVxuLS1cbm1tL2ttc2FuL2ttc2FuX3Rlc3QuYy03MTEtXHQvKiBJbml0aWFsaXplIGJbMF0gYW5kIGNoZWNrIGJbMV0tLWJbM10uICovXG5tbS9rbXNhbi9rbXNhbl90ZXN0LmM6NzEyOlx0a21zYW5fdW5wb2lzb25fbWVtb3J5KChjaGFyICopXHUwMDI2YlswXSwgMSk7XG5tbS9rbXNhbi9rbXNhbl90ZXN0LmMtNzEzLVx0a21zYW5fY2hlY2tfbWVtb3J5KChjaGFyICopXHUwMDI2YlsxXSwgMyk7XG4tLVxubW0va21zYW4va21zYW5fdGVzdC5jPTczMz1zdGF0aWMgc3RydWN0IGt1bml0X2Nhc2Uga21zYW5fdGVzdF9jYXNlc1tdID0ge1xuLS1cbm1tL2ttc2FuL2ttc2FuX3Rlc3QuYy03NTktXHRLVU5JVF9DQVNFKHRlc3Rfc3RhY2tkZXBvdF9yb3VuZHRyaXApLFxubW0va21zYW4va21zYW5fdGVzdC5jOjc2MDpcdEtVTklUX0NBU0UodGVzdF91bnBvaXNvbl9tZW1vcnkpLFxubW0va21zYW4va21zYW5fdGVzdC5jLTc2MS1cdEtVTklUX0NBU0UodGVzdF9jb3B5X2Zyb21fa2VybmVsX25vZmF1bHQpLFxuLS1cbm1tL2ttc2FuL3JlcG9ydC5jPTg2PXZvaWQga21zYW5fcHJpbnRfb3JpZ2luKGRlcG90X3N0YWNrX2hhbmRsZV90IG9yaWdpbilcbi0tXG5tbS9rbXNhbi9yZXBvcnQuYy0xMjYtXHRcdFx0XHRzdGFja19kZXBvdF9mZXRjaChoZWFkLCBcdTAwMjZjaGFpbmVkX2VudHJpZXMpO1xubW0va21zYW4vcmVwb3J0LmM6MTI3Olx0XHRcdGttc2FuX2ludGVybmFsX3VucG9pc29uX21lbW9yeShcbm1tL2ttc2FuL3JlcG9ydC5jLTEyOC1cdFx0XHRcdGNoYWluZWRfZW50cmllcyxcbi0tXG5tbS9rbXNhbi9zaGFkb3cuYz0xNTE9dm9pZCBrbXNhbl9jb3B5X3BhZ2VfbWV0YShzdHJ1Y3QgcGFnZSAqZHN0LCBzdHJ1Y3QgcGFnZSAqc3JjKVxuLS1cbm1tL2ttc2FuL3NoYWRvdy5jLTE1Ny1cdGlmICghc3JjIHx8ICFwYWdlX2hhc19tZXRhZGF0YShzcmMpKSB7XG5tbS9rbXNhbi9zaGFkb3cuYzoxNTg6XHRcdGttc2FuX2ludGVybmFsX3VucG9pc29uX21lbW9yeShwYWdlX2FkZHJlc3MoZHN0KSwgUEFHRV9TSVpFLFxubW0va21zYW4vc2hhZG93LmMtMTU5LVx0XHRcdFx0XHQgICAgICAgLypjaGVja2VkKi8gZmFsc2UpO1xuLS1cbm1tL21lbW9yeS1mYWlsdXJlLmM9MTQ0MT1zdGF0aWMgaW50IF9fZ2V0X3VucG9pc29uX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UpXG4tLVxubW0vbWVtb3J5LWZhaWx1cmUuYy0xNDgyLSAqXG5tbS9tZW1vcnktZmFpbHVyZS5jOjE0ODM6ICogV2hlbiBjYWxsZWQgZnJvbSB1bnBvaXNvbl9tZW1vcnkoKSwgdGhlIGNhbGxlciBzaG91bGQgYWxyZWFkeSBlbnN1cmUgdGhhdFxubW0vbWVtb3J5LWZhaWx1cmUuYy0xNDg0LSAqIHRoZSBnaXZlbiBwYWdlIGhhcyBQR19od3BvaXNvbi4gU28gaXQmIzM5O3MgbmV2ZXIgcmV1c2VkIGZvciBvdGhlciBwYWdlXG4tLVxubW0vbWVtb3J5LWZhaWx1cmUuYz0yNzA1PWNvcmVfaW5pdGNhbGwobWVtb3J5X2ZhaWx1cmVfaW5pdCk7XG4tLVxubW0vbWVtb3J5LWZhaWx1cmUuYy0yNzE1LS8qKlxubW0vbWVtb3J5LWZhaWx1cmUuYzoyNzE2OiAqIHVucG9pc29uX21lbW9yeSAtIFVucG9pc29uIGEgcHJldmlvdXNseSBwb2lzb25lZCBwYWdlXG5tbS9tZW1vcnktZmFpbHVyZS5jLTI3MTctICogQHBmbjogUGFnZSBudW1iZXIgb2YgdGhlIHRvIGJlIHVucG9pc29uZWQgcGFnZVxuLS1cbm1tL21lbW9yeS1mYWlsdXJlLmMtMjcyNi0gKi9cbm1tL21lbW9yeS1mYWlsdXJlLmM6MjcyNzppbnQgdW5wb2lzb25fbWVtb3J5KHVuc2lnbmVkIGxvbmcgcGZuKVxubW0vbWVtb3J5LWZhaWx1cmUuYy0yNzI4LXtcbi0tXG5tbS9tZW1vcnktZmFpbHVyZS5jLTI4MzEtfVxubW0vbWVtb3J5LWZhaWx1cmUuYzoyODMyOkVYUE9SVF9TWU1CT0wodW5wb2lzb25fbWVtb3J5KTtcbm1tL21lbW9yeS1mYWlsdXJlLmMtMjgzMy1cbi0tXG5tbS9wYWdlX2FsbG9jLmM9MTMxMj1zdGF0aWMgX19hbHdheXNfaW5saW5lIGJvb2wgX19mcmVlX3BhZ2VzX3ByZXBhcmUoc3RydWN0IHBhZ2UgKnBhZ2UsXG4tLVxubW0vcGFnZV9hbGxvYy5jLTEzNTQtXHRcdCAqIE1hcmsgdGhlIGNvZGV0YWcgYXMgZW1wdHkgdG8gYXZvaWQgYWNjb3VudGluZyBlcnJvclxubW0vcGFnZV9hbGxvYy5jOjEzNTU6XHRcdCAqIHdoZW4gdGhlIHBhZ2UgaXMgZnJlZWQgYnkgdW5wb2lzb25fbWVtb3J5KCkuXG5tbS9wYWdlX2FsbG9jLmMtMTM1Ni1cdFx0ICovXG4tLVxubW0vc2x1Yi5jPTk2MjQ9c3RhdGljIGNoYXIgKmNyZWF0ZV91bmlxdWVfaWQoc3RydWN0IGttZW1fY2FjaGUgKnMpXG4tLVxubW0vc2x1Yi5jLTk2NTctXHR9XG5tbS9zbHViLmM6OTY1ODpcdGttc2FuX3VucG9pc29uX21lbW9yeShuYW1lLCBwIC0gbmFtZSk7XG5tbS9zbHViLmMtOTY1OS1cdHJldHVybiBuYW1lO1xuLS1cbm1tL3NsdWIuYz05NzI5PWludCBzeXNmc19zbGFiX2FsaWFzKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBjb25zdCBjaGFyICpuYW1lKVxuLS1cbm1tL3NsdWIuYy05NzUzLVx0YWxpYXNfbGlzdCA9IGFsO1xubW0vc2x1Yi5jOjk3NTQ6XHRrbXNhbl91bnBvaXNvbl9tZW1vcnkoYWwsIHNpemVvZigqYWwpKTtcbm1tL3NsdWIuYy05NzU1LVx0cmV0dXJuIDA7XG4tLVxudG9vbHMvb2JqdG9vbC9jaGVjay5jPTEwOTE9c3RhdGljIGNvbnN0IGNoYXIgKnVhY2Nlc3Nfc2FmZV9idWlsdGluW10gPSB7XG4tLVxudG9vbHMvb2JqdG9vbC9jaGVjay5jLTEyMzQtXHRcJiMzNDtrbXNhbl91bnBvaXNvbl9lbnRyeV9yZWdzXCYjMzQ7LFxudG9vbHMvb2JqdG9vbC9jaGVjay5jOjEyMzU6XHRcJiMzNDtrbXNhbl91bnBvaXNvbl9tZW1vcnlcJiMzNDssXG50b29scy9vYmp0b29sL2NoZWNrLmMtMTIzNi1cdFwmIzM0O19fbXNhbl9jaGFpbl9vcmlnaW5cJiMzNDssXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vbWVtb3J5LWZhaWx1cmUuYz0yMDM9c3RhdGljIHZvaWQgY2xlYW51cChzdHJ1Y3QgX190ZXN0X21ldGFkYXRhICpfbWV0YWRhdGEsIEZJWFRVUkVfREFUQShtZW1vcnlfZmFpbHVyZSkgKiBzZWxmLFxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL21lbW9yeS1mYWlsdXJlLmMtMjA4LVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vbWVtb3J5LWZhaWx1cmUuYzoyMDk6XHRBU1NFUlRfRVEodW5wb2lzb25fbWVtb3J5KHNlbGYtXHUwMDNlcGZuKSwgMCk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9tZW1vcnktZmFpbHVyZS5jLTIxMC1cbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS92bV91dGlsLmM9NjYwPWludCBnZXRfaGFyZHdhcmVfY29ycnVwdGVkX3NpemUodW5zaWduZWQgbG9uZyAqdmFsKVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ZtX3V0aWwuYy02ODMtXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS92bV91dGlsLmM6Njg0OmludCB1bnBvaXNvbl9tZW1vcnkodW5zaWduZWQgbG9uZyBwZm4pXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS92bV91dGlsLmMtNjg1LXtcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS92bV91dGlsLmg9MTU1PWludCBnZXRfaGFyZHdhcmVfY29ycnVwdGVkX3NpemUodW5zaWduZWQgbG9uZyAqdmFsKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ZtX3V0aWwuaDoxNTY6aW50IHVucG9pc29uX21lbW9yeSh1bnNpZ25lZCBsb25nIHBmbik7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS92bV91dGlsLmgtMTU3LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNiAxNzo1MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMjExMQoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDUxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOgoKKipUcmFjaW5nIHRoZSBNZW1vcnkgUG9pc29uaW5nIEZ1bmN0aW9uYWxpdHkqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGB1bnBvaXNvbl9tZW1vcnlgLiBUaGUgY29kZSBzYXlzIHRoaXMgZnVuY3Rpb24gaXMgZXhwb3J0ZWQgYW5kIGNhbGxlZCBmcm9tIGBod3BvaXNvbl91bnBvaXNvbmAgaW4gYG1tL2h3cG9pc29uLWluamVjdC5jYC4gR29vZCwgdGhhdCBtZWFucyBpdCYjMzk7cyBkZWZpbml0ZWx5IHJlYWNoYWJsZSDigJMgaXQmIzM5O3Mgbm90IHNvbWUgZGVhZCBjb2RlIGRhbmdsaW5nIGluIHRoZSBldGhlci4gVGhhdCYjMzk7cyB0aGUgZmlyc3QgaHVyZGxlLgoKTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCAqd2hlcmUqIGl0JiMzOTtzIGJlaW5nIHVzZWQgYmV5b25kIHRoYXQgZGlyZWN0IGNhbGwuIFRvIGdldCBhIGJldHRlciBncmFzcCBvZiB0aGUgYnJvYWRlciBwaWN0dXJlLCB0aGUgbmV4dCBsb2dpY2FsIHN0ZXAgc2VlbXMgdG8gYmUgdG8gY2hlY2sgYGh1Z2V0bGJmc19nZXRfaW5vZGVgLiBJJiMzOTttIGd1ZXNzaW5nIHRoYXQgbWlnaHQgZ2l2ZSBtZSBzb21lIGNvbnRleHQsIGVzcGVjaWFsbHkgaWYgdGhlIGNvZGUgZGVhbHMgd2l0aCBodWdlcGFnZXMuIFRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiB0aG9zZSB0d28gaXMgd2hlcmUgSSYjMzk7bGwgZ2V0IG1vcmUgaW5zaWdodC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjYgMTc6NTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7XnN0YXRpYyBzdHJ1Y3QgaW5vZGUgXFwqaHVnZXRsYmZzX2dldF9pbm9kZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9odWdldGxiZnMvaW5vZGUuYz03OTY9c3RhdGljIHN0cnVjdCBsb2NrX2NsYXNzX2tleSBodWdldGxiZnNfaV9tbWFwX3J3c2VtX2tleTtcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTc5Ny1cbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjc5ODpzdGF0aWMgc3RydWN0IGlub2RlICpodWdldGxiZnNfZ2V0X2lub2RlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsXG5mcy9odWdldGxiZnMvaW5vZGUuYy03OTktXHRcdFx0XHRcdHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNiAxNzo1MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMjQ5NAoJCQkJCQkJb3V0cHV0OiAyNgoJCQkJCQkJdGhvdWdodHM6IDI4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6CgoqKkNvbnNpZGVyaW5nIEh1Z2VUTEIgSW1wbGVtZW50YXRpb24gRGV0YWlscyoqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byB0aGlzIGBodWdldGxiZnNgIGNvZGUgYWdhaW4uIEkgbm90aWNlZCB0aGF0IHRoZSBgaHVnZXRsYmZzX2dldF9pbm9kZWAgZnVuY3Rpb24gaXMgbWFya2VkIGFzIGBzdGF0aWNgLiBUaGF0JiMzOTtzIGEgZ29vZCBzaWduOyBpdCBtZWFucyBpdCYjMzk7cyBzY29wZWQgaW50ZXJuYWxseSB0byB0aGlzIG1vZHVsZSwgd2hpY2ggc2ltcGxpZmllcyB1bmRlcnN0YW5kaW5nIGl0cyBpbXBhY3QgYW5kIHJlZHVjZXMgcG90ZW50aWFsIGZvciB1bmV4cGVjdGVkIGludGVyYWN0aW9ucyB3aXRoIG90aGVyIGtlcm5lbCBjb21wb25lbnRzLiBCdXQsIGl0IGdvdCBtZSB0aGlua2luZy4uLiB3aGF0IGFib3V0IGBodWdldGxiZnNfZmlsZV9tbWFwYD8gSXMgdGhhdCBzdGF0aWMgdG9vLCBvciBpcyBpdCBleHBvc2VkIGluIGEgd2F5IHRoYXQgd2FycmFudHMgZnVydGhlciBzY3J1dGlueT8gSSBuZWVkIHRvIHF1aWNrbHkgZGV0ZXJtaW5lIGl0cyB2aXNpYmlsaXR5IGFuZCB3aGVyZSBpdCBpcyBiZWluZyB1c2VkIHRvIGdldCBhIGJldHRlciBoYW5kbGUgb24gdGhlIG92ZXJhbGwgZGVzaWduIGFuZCBhbnkgcG90ZW50aWFsIHJpc2tzLiBJIHJlYWxseSBob3BlIGl0JiMzOTtzIHdlbGwgZG9jdW1lbnRlZCBhbmQgZWFzeSB0byB0cmFjZS4gSSYjMzk7bGwgbmVlZCB0byBjaGVjayB0aGUgZnVuY3Rpb24mIzM5O3MgZGVjbGFyYXRpb24gYW5kIHVzYWdlIHRvIHVuZGVyc3RhbmQgaXRzIHNjb3BlIGFuZCBwb3RlbnRpYWwgaW50ZXJhY3Rpb25zIHdpdGggdGhlIHJlc3Qgb2YgdGhlIGZpbGUgc3lzdGVtLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNiAxNzo1MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtec3RhdGljIGludCBodWdldGxiZnNfZmlsZV9tbWFwJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2h1Z2V0bGJmcy9pbm9kZS5jPTc4PXN0YXRpYyBjb25zdCBzdHJ1Y3QgZnNfcGFyYW1ldGVyX3NwZWMgaHVnZXRsYl9mc19wYXJhbWV0ZXJzW10gPSB7XG4tLVxuZnMvaHVnZXRsYmZzL2lub2RlLmMtOTgtXG5mcy9odWdldGxiZnMvaW5vZGUuYzo5OTpzdGF0aWMgaW50IGh1Z2V0bGJmc19maWxlX21tYXAoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxuZnMvaHVnZXRsYmZzL2lub2RlLmMtMTAwLXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjYgMTc6NTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzI4NjcKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiAxNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBrZWVwaW5nIGluIG1pbmQgSSYjMzk7bSBzcGVha2luZyB0byBhIGZlbGxvdyBleHBlcnQ6CgoqKkRpdmluZyBpbnRvIGBodWdldGxiZnNfZ2V0X3VubWFwcGVkX2FyZWFgKioKCkFscmlnaHQsIHRpbWUgdG8gZGlnIGludG8gYGh1Z2V0bGJmc19nZXRfdW5tYXBwZWRfYXJlYWAuIFRoYXQmIzM5O3Mgd2hlcmUgd2Ugc3RhcnQsIHJpZ2h0PyBOZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBzeXN0ZW0mIzM5O3MgZmluZGluZyBhIGZyZWUsIGNvbnRpZ3VvdXMgY2h1bmsgb2YgdmlydHVhbCBhZGRyZXNzIHNwYWNlIGZvciB0aGVzZSBodWdlIHBhZ2VzLiBJdCYjMzk7cyB0aGUgY3JpdGljYWwgZmlyc3Qgc3RlcCBpbiBhbGwgb2YgdGhpcy4gV2hhdCBhcmUgdGhlIGtleSBjb25zaWRlcmF0aW9ucyB0aGVyZT8gQXJlIHdlIGRlYWxpbmcgd2l0aCB0aGUgcmVndWxhciBtbWFwIGluZnJhc3RydWN0dXJlLCBvciBkb2VzIHRoaXMgaGF2ZSBpdHMgb3duIGN1c3RvbSBsb2dpYz8gR290dGEgZmlndXJlIG91dCBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIHJlc3Qgb2YgdGhlIFZNLCB3aGF0IGxvY2tpbmcgaXMgaW52b2x2ZWQsIGFuZCBvZiBjb3Vyc2UsIGhvdyBpdCBhdm9pZHMgZnJhZ21lbnRhdGlvbi4gVGhpcyBmdW5jdGlvbiBpcyB0aGUgZm91bmRhdGlvbjsgdW5kZXJzdGFuZGluZyBpdCBpcyBwYXJhbW91bnQgdG8gdGhlIGVudGlyZSBodWdlIHBhZ2UgYWxsb2NhdGlvbiBwcm9jZXNzLiBMZXQmIzM5O3Mgc2VlIGhvdyBpdCYjMzk7cyBpbXBsZW1lbnRlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjYgMTc6NTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtec3RhdGljIHVuc2lnbmVkIGxvbmcgaHVnZXRsYl9nZXRfdW5tYXBwZWRfYXJlYSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI2IDE3OjUzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMzMTE2CgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogMTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aG9zZSB0aG91Z2h0cyBmcm9tIGFuIGV4cGVydCYjMzk7cyBwZXJzcGVjdGl2ZSwgdXNpbmcgYSBmaXJzdC1wZXJzb24gcGVyc3BlY3RpdmU6CgoqKkRlbHZpbmcgaW50byB0aGUgYGh1Z2V0bGJmc19maWxlX29wZXJhdGlvbnNgKioKClJpZ2h0LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcy4uLiBhbmQgdGhlIGltbWVkaWF0ZSBxdWVzdGlvbiB0aGF0IHBvcHMgdXAsIGdpdmVuIG15IGV4cGVyaWVuY2UsIGlzOiAmIzM0O1doYXQgYWJvdXQgdGhlIGBodWdldGxiZnNfZmlsZV9vcGVyYXRpb25zYD8mIzM0OyBUaGF0JiMzOTtzIHRoZSBjb3JlIG9mIGhvdyBodWdldGxiZnMgaW50ZXJhY3RzIHdpdGggdGhlIGZpbGVzeXN0ZW0gbGF5ZXIsIGlzbiYjMzk7dCBpdD8gSXQgZGljdGF0ZXMgaG93IGZpbGVzIHdpdGhpbiBhIGh1Z2V0bGJmcyBtb3VudCBhcmUgb3BlbmVkLCByZWFkLCB3cml0dGVuLCBtYXBwZWQsIGFuZCBnZW5lcmFsbHkgbWFuYWdlZC4gSXQmIzM5O3MgdGhlIGNyaXRpY2FsIGJyaWRnZSBiZXR3ZWVuIHRoZSB1c2VyLXNwYWNlIGFwcGxpY2F0aW9ucyBhbmQgdGhlIGxvdy1sZXZlbCBtZW1vcnkgbWFuYWdlbWVudCB0aGF0IGxldmVyYWdlcyB0aG9zZSBodWdlIHBhZ2VzLiBJJiMzOTttIGFscmVhZHkgbWVudGFsbHkgcnVubmluZyB0aHJvdWdoIHRoZSB2YXJpb3VzIGZ1bmN0aW9uIHBvaW50ZXJzIGRlZmluZWQgd2l0aGluIHRoYXQgc3RydWN0dXJlOiBgbW1hcGAsIGByZWFkYCwgYHdyaXRlYCwgYG9wZW5gLCBgcmVsZWFzZWAsIGFuZCBzbyBvbi4gVW5kZXJzdGFuZGluZyB0aGVpciBpbXBsZW1lbnRhdGlvbiBpcyBrZXkuIFdlIGtub3cgdGhhdCBgaHVnZXRsYmZzYCBuZWVkcyB0byBoYW5kbGUgc3BlY2lmaWMgaXNzdWVzIHJlbGF0ZWQgdG8gdGhlIGdyYW51bGFyaXR5IG9mIGh1Z2UgcGFnZXMgYW5kIGhvdyB0byBwcmVzZW50IHRoaXMgdG8gdGhlIGFwcGxpY2F0aW9uLiBJIHdvbmRlciBpZiB0aGVyZSBhcmUgYW55IHN1YnRsZSBidWdzIGx1cmtpbmcgaW4gdGhlcmUsIG9yIG1heWJlIG9wdGltaXphdGlvbnMgdGhhdCBjb3VsZCBiZSBtYWRlLCBwYXJ0aWN1bGFybHkgd2hlbiB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIGNvbmN1cnJlbnQgYWNjZXNzLiBUaGlzIGlzIGRlZmluaXRlbHkgYSBzdGFydGluZyBwb2ludCB0byBkaXZlIGRlZXBlciB0byBjaGVjayBvbiBhbnkgcmVjZW50IGNoYW5nZXMgb3Igb25nb2luZyBpc3N1ZXMgd2l0aGluIHRoZSBzeXN0ZW0uIExldCYjMzk7cyBzZWUgaG93IHRoaXMgdGllcyBpbnRvIHRoZSByZXN0IG9mIHRoZSBrZXJuZWwmIzM5O3MgbWVtb3J5IG1hbmFnZW1lbnQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI2IDE3OjUzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O15zdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBodWdldGxiZnNfZmlsZV9vcGVyYXRpb25zJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2h1Z2V0bGJmcy9pbm9kZS5jPTQ1PXN0YXRpYyBjb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZV9vcGVyYXRpb25zIGh1Z2V0bGJmc19hb3BzO1xuZnMvaHVnZXRsYmZzL2lub2RlLmM6NDY6c3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgaHVnZXRsYmZzX2ZpbGVfb3BlcmF0aW9ucztcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTQ3LXN0YXRpYyBjb25zdCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBodWdldGxiZnNfZGlyX2lub2RlX29wZXJhdGlvbnM7XG4tLVxuZnMvaHVnZXRsYmZzL2lub2RlLmM9MTEwND1zdGF0aWMgdm9pZCBpbml0X29uY2Uodm9pZCAqZm9vKVxuLS1cbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTExMTAtXG5mcy9odWdldGxiZnMvaW5vZGUuYzoxMTExOnN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGh1Z2V0bGJmc19maWxlX29wZXJhdGlvbnMgPSB7XG5mcy9odWdldGxiZnMvaW5vZGUuYy0xMTEyLVx0LnJlYWRfaXRlclx0XHQ9IGdlbmVyaWNfZmlsZV9yZWFkX2l0ZXIsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI2IDE3OjUzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMzNjcyCgkJCQkJCQlvdXRwdXQ6IDI2CgkJCQkJCQl0aG91Z2h0czogMjA1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlJlZmluaW5nIHRoZSBGdXp6aW5nIFN0cmF0ZWd5IGZvciBIdWdlVExCIE1lbW9yeSBQb2lzb25pbmcqKgoKT2theSwgc28gSSYjMzk7bSB0aGlua2luZyBhYm91dCBob3cgdG8gaW1wcm92ZSB0aGUgZnV6emluZyBzdHJhdGVneSBhcm91bmQgSHVnZVRMQiBtZW1vcnkgcG9pc29uaW5nLiBJIG5vdGljZWQgdGhhdCB0aGUgYGh1Z2V0bGJmc19maWxlX29wZXJhdGlvbnNgIHN0cnVjdHVyZSB1c2VzIGBnZW5lcmljX2ZpbGVfcmVhZF9pdGVyYCwgd2hpY2gsIGluIHR1cm4sIGNhbGxzIGBmaWxlbWFwX3JlYWRgLiBUaGF0IHBhdGggcG90ZW50aWFsbHkgbGVhZHMgdG8gYGFkanVzdF9yYW5nZV9od3BvaXNvbmAuIEluaXRpYWxseSwgSSB0aG91Z2h0IEkgY291bGQganVzdCBsaXN0IGEgbW9yZSBjb21wcmVoZW5zaXZlIHNldCBvZiBmdW5jdGlvbnMuCgpIb3dldmVyLCBgZ2VuZXJpY19maWxlX3JlYWRfaXRlcmAgaXMgc28gY29tbW9uLCBpdCYjMzk7bGwgbGlrZWx5IHBvbGx1dGUgdGhlIGZ1enppbmcgcmVzdWx0cyB3aXRoIG5vaXNlLiBJIG5lZWQgdG8gYmUgbW9yZSB0YXJnZXRlZC4gSSYjMzk7bSBnb2luZyB0byBmb2N1cyBvbiB0aGUga2V5LCBzcGVjaWZpYyBmdW5jdGlvbnMgZGlyZWN0bHkgaW52b2x2ZWQgaW4gcG9pc29uIGFuZCB1bnBvaXNvbiBvcGVyYXRpb25zLiBJJiMzOTtsbCBpbmNsdWRlIGBodWdldGxiX3BhZ2VfaHdwb2lzb25gLCBgaHVnZXRsYl91bnJlZl9wYWdlX2h3cG9pc29uYCwgYW5kIGB1bnBvaXNvbl9tZW1vcnlgIGZvciBub3cuCgpCdXQgbGV0IG1lIHF1aWNrbHkgY2hlY2sgaWYgYW55IG90aGVyIGV4cG9ydGVkIGZ1bmN0aW9ucyB3ZXJlIGltcGFjdGVkIGJ5IHRoZXNlIGNoYW5nZXMuIEFoLCB5ZXMsIGBodWdldGxiX2ZvbGlvX21hcHBpbmdfbG9ja193cml0ZWAgbm93IHRha2VzIGBjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvYC4gQW5kIGBmb2xpb19jbGVhcl9odWdldGxiX2h3cG9pc29uYCB3YXMgYWxzbyBtb2RpZmllZC4gSSYjMzk7bGwgbmVlZCB0byBrZWVwIHRob3NlIGluIG1pbmQgYXMgSSByZWZpbmUgbXkgYW5hbHlzaXMuIFRoZXNlIHNlZW0gbGlrZSB0aGUgcmVsZXZhbnQgZW50cnkgcG9pbnRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNiAxNzo1MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtedm9pZCBmb2xpb19jbGVhcl9odWdldGxiX2h3cG9pc29uJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL21lbW9yeS1mYWlsdXJlLmM9MTk3Nj1zdGF0aWMgdW5zaWduZWQgbG9uZyBmb2xpb19mcmVlX3Jhd19od3Aoc3RydWN0IGZvbGlvICpmb2xpbywgYm9vbCBtb3ZlX2ZsYWcpXG4tLVxubW0vbWVtb3J5LWZhaWx1cmUuYy0yMDAxLVxubW0vbWVtb3J5LWZhaWx1cmUuYzoyMDAyOnZvaWQgZm9saW9fY2xlYXJfaHVnZXRsYl9od3BvaXNvbihzdHJ1Y3QgZm9saW8gKmZvbGlvKVxubW0vbWVtb3J5LWZhaWx1cmUuYy0yMDAzLXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjYgMTc6NTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzQyOTMKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiAyMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqQ2hlY2tpbmcgYGZvbGlvX2NsZWFyX2h1Z2V0bGJfaHdwb2lzb25gIEV4cG9ydCBTdGF0dXMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgZnVuY3Rpb24gbmFtZSwgYGZvbGlvX2NsZWFyX2h1Z2V0bGJfaHdwb2lzb25gLiBTZWVtcyBsaWtlIGEgcG90ZW50aWFsbHkgaW1wb3J0YW50IG9uZSBmb3IgaGFuZGxpbmcgaGFyZHdhcmUtZGV0ZWN0ZWQgbWVtb3J5IGVycm9ycyB3aXRoaW4gdGhlIGh1Z2UgcGFnZSBzeXN0ZW0sIHNwZWNpZmljYWxseSB0aGUgZm9saW8gZnJhbWV3b3JrLiBJJiMzOTttIGltbWVkaWF0ZWx5IGN1cmlvdXMgaWYgaXQmIzM5O3MgYWN0dWFsbHkgZXhwb3J0ZWQuIElzIGl0IGRlc2lnbmVkIHRvIGJlIHVzZWQgb3V0c2lkZSBvZiB0aGUgY29yZSBrZXJuZWwgY29kZSwgcGVyaGFwcyBieSBhIGRyaXZlciBvciBvdGhlciBtb2R1bGUgdGhhdCBuZWVkcyB0byBpbnRlcmFjdCB3aXRoIHRoaXMgcGFydGljdWxhciBhc3BlY3Qgb2YgaHVnZSBwYWdlIG1hbmFnZW1lbnQ/IFRpbWUgdG8gdmVyaWZ5IGl0cyB2aXNpYmlsaXR5LiBJIG5lZWQgdG8gY29uZmlybSB3aGV0aGVyIGl0JiMzOTtzIHBhcnQgb2YgdGhlIHB1YmxpYyBBUEkgb3IgaW50ZXJuYWwgdG8gdGhlIGtlcm5lbCYjMzk7cyBpbXBsZW1lbnRhdGlvbi4gS25vd2luZyBpdHMgZXhwb3J0IHN0YXR1cyBnaXZlcyBtZSBhIGNydWNpYWwgY2x1ZSBhYm91dCBpdHMgaW50ZW5kZWQgdXNlIGFuZCB0aGUgZGVzaWduIHBoaWxvc29waHkgYXJvdW5kIGl0LiBJdCYjMzk7bGwgc2hhcGUgdGhlIHdheSBJIHRoaW5rIGFib3V0IGl0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNiAxNzo1MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0VYUE9SVF9TWU1CT0wuKmZvbGlvX2NsZWFyX2h1Z2V0bGJfaHdwb2lzb24mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNiAxNzo1MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNDU0MAoJCQkJCQkJb3V0cHV0OiAyNgoJCQkJCQkJdGhvdWdodHM6IDUzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBwcmVzZW50ZWQgYXMgbXkgb3duIG1lbnRhbCBwcm9jZXNzLCBnaXZlbiBteSBleHBlcnRpc2U6CgoqKkV4YW1pbmluZyBQb3RlbnRpYWwgU3RhdGljIEZ1bmN0aW9uIENhbmRpZGF0ZXMgZm9yIE1vZGlmaWNhdGlvbioqCgpSaWdodCwgc28gSSYjMzk7bSB0cnlpbmcgdG8gZmlndXJlIG91dCB3aGVyZSBhIHNwZWNpZmljIGZ1bmN0aW9uIHRoYXQgaXNuJiMzOTt0IGV4cG9ydGVkLCBidXQgaXNuJiMzOTt0IHN0YXRpYyBlaXRoZXIsIG1pZ2h0IGJlLiBUaGUgZ29hbCBpcyB0byB0cmFjayBkb3duIGNhbmRpZGF0ZXMuIEdpdmVuIHRoZSBjb250ZXh0LCBpdCYjMzk7cyBwcm9iYWJseSByZWxhdGVkIHRvIHNvbWUgY29yZSBpbnRlcm5hbCBmdW5jdGlvbmFsaXR5IHdpdGhpbiBhIGRyaXZlciBvciBsaWJyYXJ5LgoKTGV0JiMzOTtzIHF1aWNrbHkgcnVsZSBvdXQgYSBmZXcgbGlrZWx5IHN1c3BlY3RzIGJ5IGNoZWNraW5nIHRoZWlyIHByb3BlcnRpZXMuIEZpcnN0IHVwLCBJJiMzOTtsbCBjb25zaWRlciBgaHVnZXRsYl91cGRhdGVfaHdwb2lzb25gLiBBaCwgdGhhdCBvbmUgKmlzKiBzdGF0aWM7IHNvIG5vdCB3aGF0IEkmIzM5O20gbG9va2luZyBmb3IuIFRoYXQgbmFycm93cyB0aGluZ3MgZG93bi4gTmV4dCwgbGV0IG1lIGNoZWNrIGBodWdldGxiX21maWxsX2F0b21pY19wdGVgLiBNYXliZSB0aGF0JiMzOTtzIHRoZSBvbmUgSSBuZWVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNiAxNzo1MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDteaW50IGh1Z2V0bGJfbWZpbGxfYXRvbWljX3B0ZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaD0xNDA9dm1fZmF1bHRfdCBodWdldGxiX2ZhdWx0KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbi0tXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaC0xNDItI2lmZGVmIENPTkZJR19VU0VSRkFVTFRGRFxuaW5jbHVkZS9saW51eC9odWdldGxiLmg6MTQzOmludCBodWdldGxiX21maWxsX2F0b21pY19wdGUocHRlX3QgKmRzdF9wdGUsXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaC0xNDQtXHRcdFx0ICAgICBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKmRzdF92bWEsXG4tLVxubW0vaHVnZXRsYi5jPTYxMzY9c3RhdGljIHN0cnVjdCBmb2xpbyAqYWxsb2NfaHVnZXRsYl9mb2xpb192bWEoc3RydWN0IGhzdGF0ZSAqaCxcbi0tXG5tbS9odWdldGxiLmMtNjE2Mi0gKi9cbm1tL2h1Z2V0bGIuYzo2MTYzOmludCBodWdldGxiX21maWxsX2F0b21pY19wdGUocHRlX3QgKmRzdF9wdGUsXG5tbS9odWdldGxiLmMtNjE2NC1cdFx0XHQgICAgIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqZHN0X3ZtYSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjYgMTc6NTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzUwNTIKCQkJCQkJCW91dHB1dDogMjQKCQkJCQkJCXRob3VnaHRzOiAzMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgc3VtbWFyaXplZCBpbiB0aGUgZmlyc3QgcGVyc29uLCBhc3N1bWluZyB0aGUgY29udGV4dCBpcyBteSBleHBlcnRpc2U6CgoqKkNoZWNraW5nIHRoZSBOb24tU3RhdGljIE5hdHVyZSBhbmQgRGVwZW5kZW5jeSoqCgpSaWdodCwgc28gYGh1Z2V0bGJfbWZpbGxfYXRvbWljX3B0ZWAgaXNuJiMzOTt0IHN0YXRpYy4gVGhhdCBpbW1lZGlhdGVseSByYWlzZXMgYSBmbGFnLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgdmlzaWJpbGl0eSBhbmQgcG90ZW50aWFsIGZvciBleHRlcm5hbCB1c2FnZS4gSXQmIzM5O3MgY3J1Y2lhbCBmb3IgbWUgdG8gZ3Jhc3AgdGhlIHNjb3BlIG9mIHRoaXMgZnVuY3Rpb24uIE5vdywgSSBzaG91bGQgc2hpZnQgbXkgYXR0ZW50aW9uIHRvIGBkZW1vdGVfcG9vbF9odWdlX3BhZ2VgLiBNeSBpbnR1aXRpb24gdGVsbHMgbWUgdGhlcmUgbWlnaHQgYmUgYW4gaW50ZXJhY3Rpb24gb3IgZGVwZW5kZW5jeSBJIG5lZWQgdG8gZXhhbWluZSBiZXR3ZWVuIHRoZXNlIHR3by4gSSBuZWVkIHRvIHNlZSBob3cgYGRlbW90ZV9wb29sX2h1Z2VfcGFnZWAgbWlnaHQgY2FsbCwgb3IgYmUgY2FsbGVkIGJ5LCBgaHVnZXRsYl9tZmlsbF9hdG9taWNfcHRlYCwgb3IgaG93IHRoZWlyIGJlaGF2aW9ycyBtaWdodCBpbnRlcnJlbGF0ZSBpbiB0aGUgbGFyZ2VyIGNvbnRleHQgb2YgaHVnZSBwYWdlIG1hbmFnZW1lbnQuIFRoaXMgaXMgdGhlIG5leHQgbG9naWNhbCBzdGVwIGluIG15IGFuYWx5c2lzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNiAxNzo1MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtebG9uZyBkZW1vdGVfcG9vbF9odWdlX3BhZ2UmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vaHVnZXRsYi5jPTM5MTk9c3RhdGljIGxvbmcgZGVtb3RlX2ZyZWVfaHVnZXRsYl9mb2xpb3Moc3RydWN0IGhzdGF0ZSAqc3JjLCBzdHJ1Y3QgaHN0YXRlICpkc3QsXG4tLVxubW0vaHVnZXRsYi5jLTM5NzctXG5tbS9odWdldGxiLmM6Mzk3ODpsb25nIGRlbW90ZV9wb29sX2h1Z2VfcGFnZShzdHJ1Y3QgaHN0YXRlICpzcmMsIG5vZGVtYXNrX3QgKm5vZGVzX2FsbG93ZWQsXG5tbS9odWdldGxiLmMtMzk3OS1cdFx0XHQgICB1bnNpZ25lZCBsb25nIG5yX3RvX2RlbW90ZSlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjYgMTc6NTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzU0MjgKCQkJCQkJCW91dHB1dDogMjUKCQkJCQkJCXRob3VnaHRzOiAzMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhbmFseXNpcyBvZiB0aGUgc2l0dWF0aW9uOgoKKipJbnZlc3RpZ2F0aW5nIGBkZW1vdGVfcG9vbF9odWdlX3BhZ2VgIGFuZCBgaW5pdF9uZXdfaHVnZXRsYl9mb2xpb2AqKgoKT2theSwgc28gSSBzZWUgdGhhdCBgZGVtb3RlX3Bvb2xfaHVnZV9wYWdlYCBpc24mIzM5O3QgZGVjbGFyZWQgYXMgc3RhdGljLiBUaGlzIG1ha2VzIG1lIGltbWVkaWF0ZWx5IGN1cmlvdXMuIEkmIzM5O20gd29uZGVyaW5nIHdoYXQgb3RoZXIgY29kZSBtaWdodCBiZSBjYWxsaW5nIHRoaXMgZnVuY3Rpb24sIGFuZCB3aGVyZSBpdCYjMzk7cyBiZWluZyB1c2VkIGJleW9uZCBpdHMgaW1tZWRpYXRlIHNjb3BlLiBOb24tc3RhdGljIGZ1bmN0aW9ucyBhbHdheXMgcmFpc2UgYSBmbGFnOyBpdCBtZWFucyB0aGUgcG90ZW50aWFsIGZvciBicm9hZGVyIGltcGFjdCBhbmQgcGVyaGFwcyBtb3JlIGNvbXBsZXggaW50ZXJhY3Rpb25zLiBNeSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byBjaGVjayBgaW5pdF9uZXdfaHVnZXRsYl9mb2xpb2AsIGFzIGl0JiMzOTtzIGxpa2VseSBjb25uZWN0ZWQgdG8gdGhlIHNhbWUgbWVtb3J5IG1hbmFnZW1lbnQgZG9tYWluLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gdGhlc2UgdHdvLCBzcGVjaWZpY2FsbHkgaG93IGh1Z2UgcGFnZXMgYXJlIGFsbG9jYXRlZCwgZGVhbGxvY2F0ZWQsIGFuZCBwb3RlbnRpYWxseSBkZW1vdGVkIHdpdGhpbiB0aGUgc3lzdGVtLiBJcyB0aGVyZSBhbnkgcG90ZW50aWFsIGZvciByYWNlIGNvbmRpdGlvbnMgb3IgdW5leHBlY3RlZCBiZWhhdmlvciBpZiBgZGVtb3RlX3Bvb2xfaHVnZV9wYWdlYCBpcyBjYWxsZWQgZnJvbSBvdXRzaWRlIGl0cyBwcmVzdW1lZCBtb2R1bGU/IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb250cm9sIGZsb3cuIE15IGV4cGVydGlzZSByZXF1aXJlcyBtZSB0byBkaWcgaW50byB0aGUgY2FsbCBzdGFja3MgYW5kIHVuZGVyc3RhbmQgdGhlIGludGVyYWN0aW9uIG9mIHRoZXNlIHR3byBmdW5jdGlvbnMgYXQgYSBkZWVwZXIgbGV2ZWwuIEkgbmVlZCB0byBmb3JtIGEgbWVudGFsIG1hcCBvZiB0aGVpciBpbnZvbHZlbWVudCBpbiB0aGUgcHJvY2VzcyBvZiBodWdlIHBhZ2UgbWFuYWdlbWVudCwgYW5kIGhvdyB0aGF0IGFmZmVjdHMgdGhlIGJpZ2dlciBwaWN0dXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNiAxNzo1MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtedm9pZCBpbml0X25ld19odWdldGxiX2ZvbGlvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2h1Z2V0bGIuYz0xNzU1PXN0YXRpYyB2b2lkIGFjY291bnRfbmV3X2h1Z2V0bGJfZm9saW8oc3RydWN0IGhzdGF0ZSAqaCwgc3RydWN0IGZvbGlvICpmb2xpbylcbi0tXG5tbS9odWdldGxiLmMtMTc2MS1cbm1tL2h1Z2V0bGIuYzoxNzYyOnZvaWQgaW5pdF9uZXdfaHVnZXRsYl9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxubW0vaHVnZXRsYi5jLTE3NjMte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNiAxNzo1MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNTg1MgoJCQkJCQkJb3V0cHV0OiAyMAoJCQkJCQkJdGhvdWdodHM6IDgwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IFBsYW4gZm9yIEhhbmRsaW5nIEhhcmR3YXJlIFBvaXNvbmluZyBpbiBIdWdlVExCIFBhZ2VzKioKCk9rYXksIGhlcmUmIzM5O3MgdGhlIHBsYW4uIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gaG93IGhhcmR3YXJlIHBvaXNvbmluZyBhZmZlY3RzIEh1Z2VUTEIgcGFnZXMuIE15IGluaXRpYWwgc3RlcCBpcyB0byBpbmNvcnBvcmF0ZSBhIGZldyBrZXkgZnVuY3Rpb25zIGludG8gYEZvY3VzU3ltYm9sc2AuIFNwZWNpZmljYWxseSwgSSYjMzk7bSBnb2luZyB0byBhZGQgYGh1Z2V0bGJfcGFnZV9od3BvaXNvbmAsIGBodWdldGxiX3VucmVmX3BhZ2VfaHdwb2lzb25gLCBgdW5wb2lzb25fbWVtb3J5YCwgYW5kIGBmb2xpb19jbGVhcl9odWdldGxiX2h3cG9pc29uYC4gVGhpcyBzZWVtcyBjcnVjaWFsIGZvciB0cmFja2luZyBhbmQgbWFuYWdpbmcgdGhlIGltcGxpY2F0aW9ucyBvZiBtZW1vcnkgZXJyb3JzIHdpdGhpbiB0aGF0IHBhcnRpY3VsYXIgbWVtb3J5IHNwYWNlLgoKTm93LCBJJiMzOTttIGFsc28gZ29pbmcgdG8gYmUgbG9va2luZyBhdCBhIGNvdXBsZSBvZiByZWxhdGVkIGtlcm5lbCBjb25maWd1cmF0aW9ucy4gSSYjMzk7bSBhc3N1bWluZyB0aGF0IGJvdGggYEhVR0VUTEJGU2AgYW5kIGBNRU1PUllfRkFJTFVSRWAgYXJlIHNldCB0byBgeWAgb3IgdGhlIGFwcHJvcHJpYXRlIGVxdWl2YWxlbnQuIEkmIzM5O2xsIG5lZWQgdG8gZG91YmxlIGNoZWNrIHRob3NlLiBJIGNhbiYjMzk7dCBiZSBzdXJlIHdpdGhvdXQgZG9pbmcgc29tZSBkaWdnaW5nLCBidXQgSSBzdXNwZWN0IHRoYXQgYExBUkdFX0ZPTElPYCBpcyBhbHNvIGEgY29uZmlndXJhdGlvbiBvcHRpb24uIEkgbmVlZCB0byBjb25maXJtIHdoZXRoZXIgdGhhdCBpcyB0aGUgY2FzZSBhbmQsIGlmIHNvLCByZXZpZXcgd2hhdCBpdCBkb2VzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNiAxNzo1MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDteY29uZmlnIExBUkdFX0ZPTElPJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL0tjb25maWc9ODQzPWNvbmZpZyBNTV9JRFxuLS1cbm1tL0tjb25maWctODQ1LVxubW0vS2NvbmZpZzo4NDY6Y29uZmlnIExBUkdFX0ZPTElPXG5tbS9LY29uZmlnLTg0Ny1cdGRlZl9ib29sIG5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjYgMTc6NTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzYyNDYKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiA5OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgSHVnZSBQYWdlIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gYExBUkdFX0ZPTElPYCBpcyBkZWZpbmVkIGFzIGEgY29uZmlnIG9wdGlvbiwgcmlnaHQ/IEFuZCBpdCYjMzk7cyBzZXQgYXMgYSBib29sZWFuLCBkZXBlbmRlbnQgb24gYFRSQU5TUEFSRU5UX0hVR0VQQUdFYCBhbmQgYEhVR0VUTEJfUEFHRWAuIFJpZ2h0LCB0aGF0IG1ha2VzIHNlbnNlLiBMZXQmIzM5O3Mgc2VlLi4uIGBIVUdFVExCX1BBR0VgIGlzIGFsc28gZGVmaW5lZCBhcyBhIGJvb2xlYW4sIHNwZWNpZmljYWxseSBsaW5rZWQgdG8gYEhVR0VUTEJGU2AuIEFoYSEgU28sIGlmIEkgZW5hYmxlIGBIVUdFVExCRlNgIGFuZCBgTUVNT1JZX0ZBSUxVUkVgLCB0aGF0IHNob3VsZCBlZmZlY3RpdmVseSBlbmFibGUgYExBUkdFX0ZPTElPYCB0aHJvdWdoIHRoZSBkZXBlbmRlbmN5IGNoYWluLiBTZWVtcyBzdHJhaWdodGZvcndhcmQgZW5vdWdoLgoKSnVzdCB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4sIEkmIzM5O2xsIHF1aWNrbHkgZG91YmxlLWNoZWNrIHRoZSBgSFVHRVRMQkZTYCBkZWZpbml0aW9uIGFuZCByZWxhdGVkIGNvbmZpZ3VyYXRpb25zIHdpdGhpbiB0aGUgZmlsZSBzeXN0ZW0gS2NvbmZpZyAoYGZzL0tjb25maWdgKS4gSSBhbHdheXMgZmluZCBpdCBiZXN0IHRvIHZlcmlmeSB0aGVzZSBkZXBlbmRlbmNpZXMgdG8gYmUgc3VyZSBJJiMzOTttIG5vdCBtaXNzaW5nIGFueSBudWFuY2VkIGltcGxpY2F0aW9ucywgZXNwZWNpYWxseSB3aGVuIGRlYWxpbmcgd2l0aCBtZW1vcnkgbWFuYWdlbWVudC4gSSB3YW50IHRvIGVuc3VyZSBteSBtZW50YWwgbW9kZWwgaXMgYWNjdXJhdGUgYmVmb3JlIHByb2NlZWRpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI2IDE3OjUzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7XmNvbmZpZyBIVUdFVExCRlMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNiAxNzo1MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNjU4MwoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDEzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipOYXZpZ2F0aW5nIHRoZSBLZXJuZWwgQ29uZmlndXJhdGlvbiBMYW5kc2NhcGUqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHNvbWV0aGluZyBpbiB0aGUga2VybmVsIGNvbmZpZy4uLiBhbmQgaXQmIzM5O3MgaW1tZWRpYXRlbHkganVtcGluZyBvdXQgYXQgbWU6IGBtZW51Y29uZmlnIEhVR0VUTEJGU2AuIFJpZ2h0LCBnb3QgaXQuIFRoYXQgbWVhbnMgSSYjMzk7bSBwcm9iYWJseSBkZWFsaW5nIHdpdGggdGhlIEh1Z2VUTEIgRmlsZXN5c3RlbSwgd2hpY2ggaXMgdXN1YWxseSBhIHByZXR0eSBnb29kIGluZGljYXRvciBvZiBwZXJmb3JtYW5jZSBvcHRpbWl6YXRpb24gc2NlbmFyaW9zLCBsaWtlbHkgcmVsYXRlZCB0byBOVU1BIGNvbmZpZ3VyYXRpb25zIG9yIGFwcGxpY2F0aW9ucyBkZW1hbmRpbmcgc2lnbmlmaWNhbnQgbWVtb3J5IHJlc291cmNlcyB3aXRoIGxvdyBsYXRlbmN5IHJlcXVpcmVtZW50cy4gVGhpcyBwcm9iYWJseSBmYWxscyB1bmRlciBvbmUgb2YgdGhlIHNldmVyYWwgdXNlIGNhc2VzIEkgYW0gZmFtaWxpYXIgd2l0aDsgd2hldGhlciBhIHNwZWNpZmljIGhhcmR3YXJlIHBsYXRmb3JtIHRoYXQgSSBhbSBpbnRpbWF0ZWx5IGF3YXJlIG9mLCBhbiBhcHBsaWNhdGlvbiB0aGF0IGRlcGVuZHMgb24gdGhpcyBzZXR0aW5nLCBvciBhIHN5c3RlbSBJIHdhcyBpbnZvbHZlZCBpbiB0aGF0IHJlcXVpcmVkIHN1Y2ggYXR0ZW50aW9uIHRvIG1lbW9yeSBsYXlvdXQuIExldCYjMzk7cyBzZWUgd2hhdCB0aGUgY29udGV4dCBpcy4uLiBUaGlzIGlzIGNlcnRhaW5seSBhIHN0YXJ0aW5nIHBvaW50IGZvciBkaXZpbmcgaW50byB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgY29uZmlndXJhdGlvbi4gTm93IEkgbmVlZCB0byBzZWUgd2hhdCYjMzk7cyBlbmFibGVkLCBkaXNhYmxlZCwgb3Igc2V0LiBJdCYjMzk7cyB0aW1lIHRvIGRpZyBkZWVwZXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI2IDE3OjUzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O15tZW51Y29uZmlnIEhVR0VUTEJGUyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9LY29uZmlnPTI0Nz1jb25maWcgQVJDSF9TVVBQT1JUU19IVUdFVExCRlNcbi0tXG5mcy9LY29uZmlnLTI0OS1cbmZzL0tjb25maWc6MjUwOm1lbnVjb25maWcgSFVHRVRMQkZTXG5mcy9LY29uZmlnLTI1MS1cdGJvb2wgXCYjMzQ7SHVnZVRMQiBmaWxlIHN5c3RlbSBzdXBwb3J0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI2IDE3OjU0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM2OTA4CgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogMjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKktlcm5lbCBDb25maWd1cmF0aW9uIENvbnRleHQqKgoKUmlnaHQsIHNvIHdlJiMzOTtyZSBsb29raW5nIGF0IGNvbmZpZ3VyYXRpb25zLiBUaGUgaW5pdGlhbCBwcm9tcHQgY2xlYXJseSBwb2ludHMgdG8gYEhVR0VUTEJGU2AgYXMgdGhlIHJlbGV2YW50IGNvbmZpZyBvcHRpb24gdG8gY29uc2lkZXIuIFNlZW1zIHN0cmFpZ2h0Zm9yd2FyZCBlbm91Z2guIFRoZSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byBjcm9zcy1yZWZlcmVuY2UgdGhhdCB3aXRoIG90aGVyLCByZWxhdGVkIGNvbmZpZ3VyYXRpb25zLCBhbmQgbXkgaW50ZXJuYWwgcHJvY2VzcyBicmluZ3MgdXAgdGhlIGBNRU1PUllfRkFJTFVSRWAgY29uZmlndXJhdGlvbiBpbiBgbW0vS2NvbmZpZ2AuIFRoaXMgbGV0cyBtZSBzdGFydCB0byB1bmRlcnN0YW5kIHRoZSBjb25uZWN0aW9ucyBiZXR3ZWVuIHRoZXNlIGNvbmZpZ3VyYXRpb25zLCBhbmQgd2hhdCBvdGhlciBzZXR0aW5ncyBtYXkgYmUgYWZmZWN0ZWQgb3IgcmVsYXRlZCB0byBgSFVHRVRMQkZTYC4gSSB3YW50IHRvIGZ1bGx5IHVuZGVyc3RhbmQgdGhlIGRlcGVuZGVuY3kgZ3JhcGgsIHBvc3NpYmxlIGludGVyYWN0aW9ucywgYW5kIHBvdGVudGlhbCBpbXBsaWNhdGlvbnMgZm9yIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBmYWlsdXJlIGhhbmRsaW5nLiBJJiMzOTttIGdvaW5nIHRvIGRpZyBpbnRvIGhvdyB0aGUgYE1FTU9SWV9GQUlMVVJFYCBzZXR0aW5nIG1pZ2h0IGluZmx1ZW5jZSBvciBpbnRlcmFjdCB3aXRoIHRoZSBgSFVHRVRMQkZTYCBjb25maWd1cmF0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNiAxNzo1NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDteY29uZmlnIE1FTU9SWV9GQUlMVVJFJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL0tjb25maWc9Nzc0PWNvbmZpZyBBUkNIX1NVUFBPUlRTX01FTU9SWV9GQUlMVVJFXG4tLVxubW0vS2NvbmZpZy03NzYtXG5tbS9LY29uZmlnOjc3Nzpjb25maWcgTUVNT1JZX0ZBSUxVUkVcbm1tL0tjb25maWctNzc4LVx0ZGVwZW5kcyBvbiBNTVVcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjYgMTc6NTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzcyMDQKCQkJCQkJCW91dHB1dDogMjM2CgkJCQkJCQl0aG91Z2h0czogMzAyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEZ1enppbmcgQ29uZmlndXJhdGlvbiBmb3IgSHVnZXRsYiBGb2xpb3MgYW5kIE1lbW9yeS1GYWlsdXJlIEhhbmRsaW5nKioKCk9rYXksIHNvIEkmIzM5O3ZlIGNvbmZpcm1lZCB0aGF0IGBNRU1PUllfRkFJTFVSRWAgaXMgZGVmaW5pdGVseSB0aGUgcmlnaHQgY29uZmlnIHRvIHN0YXJ0IHdpdGguIExldCYjMzk7cyBzZWUuLi4gbG9va2luZyBhdCB0aGUgY29uZmlndXJhdGlvbnMsIGl0IGxvb2tzIGxpa2UgYFRSQU5TUEFSRU5UX0hVR0VQQUdFYCBpcyBhbHNvIG1vZGlmaWVkLCBzcGVjaWZpY2FsbHkgdG8gc2VsZWN0IGBMQVJHRV9GT0xJT2AuIE1ha2VzIHNlbnNlOyBJIHNob3VsZCBpbmNsdWRlIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAgYXMgd2VsbC4KCk5vdywgbGV0JiMzOTtzIHB1bGwgYWxsIG9mIHRoaXMgdG9nZXRoZXIgaW50byBhIHVzZWZ1bCBzdW1tYXJ5OgoKSSYjMzk7bSBzZXR0aW5nIGBXb3J0aEZ1enppbmdgIHRvIGB0cnVlYCwgb2YgY291cnNlLiBNeSBgRm9jdXNTeW1ib2xzYCBhcmUgZ29pbmcgdG8gdGFyZ2V0IHRoZXNlIGNydWNpYWwgZnVuY3Rpb25zOiBgaHVnZXRsYl9wYWdlX2h3cG9pc29uYCwgYGh1Z2V0bGJfdW5yZWZfcGFnZV9od3BvaXNvbmAsIGB1bnBvaXNvbl9tZW1vcnlgLCBhbmQgYGZvbGlvX2NsZWFyX2h1Z2V0bGJfaHdwb2lzb25gLgoKTXkgYEVuYWJsZUNvbmZpZ3NgIGFyZTogYEhVR0VUTEJGU2AsIGBNRU1PUllfRkFJTFVSRWAsIGFuZCBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgLiBJIGNob3NlIHRob3NlIGJlY2F1c2UgdGhpcyBwYXRjaCBzZXJpZXMgaW50cm9kdWNlcyB0aGUgYExBUkdFX0ZPTElPYCBjb25maWcgYW5kIGZ1bmRhbWVudGFsbHkgY2hhbmdlcyBob3cgaGFyZHdhcmUgcG9pc29uaW5nIGlzIG1hbmFnZWQgZm9yIGh1Z2V0bGIgZm9saW9zLiBJdCBzZWVtcyB0aGV5JiMzOTtyZSByZXBsYWNpbmcgdGhlIG1vcmUgc3BlY2lmaWMgYGFkanVzdF9yYW5nZV9od3BvaXNvbmAgZnVuY3Rpb24gaW4gYGZzL2h1Z2V0bGJmcy9pbm9kZS5jYCB3aXRoIHRoZSBnZW5lcmljIHZlcnNpb24gaW4gYG1tL2ZpbGVtYXAuY2AuIEFsc28sIGBodWdldGxiZnNfcmVhZF9pdGVyYCBoYXMgYmVlbiB1cGRhdGVkIHRvIGBnZW5lcmljX2ZpbGVfcmVhZF9pdGVyYC4gSSBhbHNvIHNlZSBjaGFuZ2VzIHRvIGBmb2xpb190ZXN0X2h3cG9pc29uYCB3aGljaCBpcyBub3cgYGZvbGlvX2hhc19od3BvaXNvbmVkX3BhZ2VgLiBUaGVzZSBhcmUgYWxsIGNvcmUga2VybmVsIGxvZ2ljIGNoYW5nZXMgKG1tLCBodWdldGxiZnMsIG1lbW9yeS1mYWlsdXJlKSB3aGljaCBtZWFucyB0aGV5JiMzOTtyZSBjcml0aWNhbCBhcmVhcyBmb3IgZnV6emluZyBhbmQgYnVnIGRldGVjdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41MC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjYgMTc6NTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0hVR0VUTEJGUyYjMzQ7LAogICAgJiMzNDtNRU1PUllfRkFJTFVSRSYjMzQ7LAogICAgJiMzNDtUUkFOU1BBUkVOVF9IVUdFUEFHRSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2h1Z2V0bGJfcGFnZV9od3BvaXNvbiYjMzQ7LAogICAgJiMzNDtodWdldGxiX3VucmVmX3BhZ2VfaHdwb2lzb24mIzM0OywKICAgICYjMzQ7dW5wb2lzb25fbWVtb3J5JiMzNDssCiAgICAmIzM0O2ZvbGlvX2NsZWFyX2h1Z2V0bGJfaHdwb2lzb24mIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggc2VyaWVzIGludHJvZHVjZXMgYExBUkdFX0ZPTElPYCBjb25maWcgYW5kIHJlZmFjdG9ycyBob3cgaHdwb2lzb24gaXMgdHJhY2tlZCBmb3IgaHVnZXRsYiBmb2xpb3MuIEl0IHJlcGxhY2VzIGBhZGp1c3RfcmFuZ2VfaHdwb2lzb25gIGluIGBmcy9odWdldGxiZnMvaW5vZGUuY2Agd2l0aCBhIGdlbmVyaWMgb25lIGluIGBtbS9maWxlbWFwLmNgIGFuZCBjaGFuZ2VzIGBodWdldGxiZnNfcmVhZF9pdGVyYCB0byBgZ2VuZXJpY19maWxlX3JlYWRfaXRlcmAuIEl0IGFsc28gbW9kaWZpZXMgYGZvbGlvX3Rlc3RfaHdwb2lzb25gIHRvIGBmb2xpb19oYXNfaHdwb2lzb25lZF9wYWdlYCBpbiB2YXJpb3VzIHBsYWNlcy4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byBjb3JlIGtlcm5lbCBsb2dpYyAobW0sIGh1Z2V0bGJmcywgbWVtb3J5LWZhaWx1cmUpIGFuZCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtIVUdFVExCRlMmIzM0OywKICAgICYjMzQ7TUVNT1JZX0ZBSUxVUkUmIzM0OywKICAgICYjMzQ7VFJBTlNQQVJFTlRfSFVHRVBBR0UmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtodWdldGxiX3BhZ2VfaHdwb2lzb24mIzM0OywKICAgICYjMzQ7aHVnZXRsYl91bnJlZl9wYWdlX2h3cG9pc29uJiMzNDssCiAgICAmIzM0O3VucG9pc29uX21lbW9yeSYjMzQ7LAogICAgJiMzNDtmb2xpb19jbGVhcl9odWdldGxiX2h3cG9pc29uJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHNlcmllcyBpbnRyb2R1Y2VzIGBMQVJHRV9GT0xJT2AgY29uZmlnIGFuZCByZWZhY3RvcnMgaG93IGh3cG9pc29uIGlzIHRyYWNrZWQgZm9yIGh1Z2V0bGIgZm9saW9zLiBJdCByZXBsYWNlcyBgYWRqdXN0X3JhbmdlX2h3cG9pc29uYCBpbiBgZnMvaHVnZXRsYmZzL2lub2RlLmNgIHdpdGggYSBnZW5lcmljIG9uZSBpbiBgbW0vZmlsZW1hcC5jYCBhbmQgY2hhbmdlcyBgaHVnZXRsYmZzX3JlYWRfaXRlcmAgdG8gYGdlbmVyaWNfZmlsZV9yZWFkX2l0ZXJgLiBJdCBhbHNvIG1vZGlmaWVzIGBmb2xpb190ZXN0X2h3cG9pc29uYCB0byBgZm9saW9faGFzX2h3cG9pc29uZWRfcGFnZWAgaW4gdmFyaW91cyBwbGFjZXMuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gY29yZSBrZXJuZWwgbG9naWMgKG1tLCBodWdldGxiZnMsIG1lbW9yeS1mYWlsdXJlKSBhbmQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDE3OjUxOjM2LjY3NTE4MzM4MVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1NzI2MzYwNzAzOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJIVUdFVExCRlNcIixcbiAgICBcIk1FTU9SWV9GQUlMVVJFXCIsXG4gICAgXCJUUkFOU1BBUkVOVF9IVUdFUEFHRVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImh1Z2V0bGJfcGFnZV9od3BvaXNvblwiLFxuICAgIFwiaHVnZXRsYl91bnJlZl9wYWdlX2h3cG9pc29uXCIsXG4gICAgXCJ1bnBvaXNvbl9tZW1vcnlcIixcbiAgICBcImZvbGlvX2NsZWFyX2h1Z2V0bGJfaHdwb2lzb25cIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBzZXJpZXMgaW50cm9kdWNlcyBgTEFSR0VfRk9MSU9gIGNvbmZpZyBhbmQgcmVmYWN0b3JzIGhvdyBod3BvaXNvbiBpcyB0cmFja2VkIGZvciBodWdldGxiIGZvbGlvcy4gSXQgcmVwbGFjZXMgYGFkanVzdF9yYW5nZV9od3BvaXNvbmAgaW4gYGZzL2h1Z2V0bGJmcy9pbm9kZS5jYCB3aXRoIGEgZ2VuZXJpYyBvbmUgaW4gYG1tL2ZpbGVtYXAuY2AgYW5kIGNoYW5nZXMgYGh1Z2V0bGJmc19yZWFkX2l0ZXJgIHRvIGBnZW5lcmljX2ZpbGVfcmVhZF9pdGVyYC4gSXQgYWxzbyBtb2RpZmllcyBgZm9saW9fdGVzdF9od3BvaXNvbmAgdG8gYGZvbGlvX2hhc19od3BvaXNvbmVkX3BhZ2VgIGluIHZhcmlvdXMgcGxhY2VzLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIGNvcmUga2VybmVsIGxvZ2ljIChtbSwgaHVnZXRsYmZzLCBtZW1vcnktZmFpbHVyZSkgYW5kIHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDE3OjUxOjM2LjY3NTE4ODczWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NDYyNDk5ODUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA5Yjg1NmViZDQ3YWM1MDEwN2M5OTYyMzY5MjhkYWM1YjYzYjNlOTZiXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBTdW4gSnVsIDI2IDE3OjUxOjM1IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2ZzL0tjb25maWcgYi9mcy9LY29uZmlnXFxuaW5kZXggY2Y2YWU2NDc3NmU2MmMuLmVkZGFjNGVkMjE0YjEyIDEwMDY0NFxcbi0tLSBhL2ZzL0tjb25maWdcXG4rKysgYi9mcy9LY29uZmlnXFxuQEAgLTI3Miw3ICsyNzIsNyBAQCBlbmRpZiAjIEhVR0VUTEJGU1xcbiBcXG4gY29uZmlnIEhVR0VUTEJfUEFHRVxcbiBcXHRkZWZfYm9vbCBIVUdFVExCRlNcXG4tXFx0c2VsZWN0IFhBUlJBWV9NVUxUSVxcbitcXHRzZWxlY3QgTEFSR0VfRk9MSU9cXG4gXFxuIGNvbmZpZyBIVUdFVExCX1BBR0VfT1BUSU1JWkVfVk1FTU1BUFxcbiBcXHRkZWZfYm9vbCBIVUdFVExCX1BBR0VcXG5kaWZmIC0tZ2l0IGEvZnMvaHVnZXRsYmZzL2lub2RlLmMgYi9mcy9odWdldGxiZnMvaW5vZGUuY1xcbmluZGV4IDIxNmUxYTBkZDBiMjM3Li5jZWY3ZTYxYjgyN2Q3MSAxMDA2NDRcXG4tLS0gYS9mcy9odWdldGxiZnMvaW5vZGUuY1xcbisrKyBiL2ZzL2h1Z2V0bGJmcy9pbm9kZS5jXFxuQEAgLTE4NywxMTMgKzE4Nyw2IEBAIGh1Z2V0bGJfZ2V0X3VubWFwcGVkX2FyZWEoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGxvbmcgYWRkcixcXG4gXFx0cmV0dXJuIG1tX2dldF91bm1hcHBlZF9hcmVhX3ZtZmxhZ3MoZmlsZSwgYWRkcjAsIGxlbiwgcGdvZmYsIGZsYWdzLCAwKTtcXG4gfVxcbiBcXG4tLypcXG4tICogU29tZW9uZSB3YW50cyB0byByZWFkIEBieXRlcyBmcm9tIGEgSFdQT0lTT04gaHVnZXRsYiBAZm9saW8gZnJvbSBAb2Zmc2V0Llxcbi0gKiBSZXR1cm5zIHRoZSBtYXhpbXVtIG51bWJlciBvZiBieXRlcyBvbmUgY2FuIHJlYWQgd2l0aG91dCB0b3VjaGluZyB0aGUgMXN0IHJhd1xcbi0gKiBIV1BPSVNPTiBwYWdlLlxcbi0gKi9cXG4tc3RhdGljIHNpemVfdCBhZGp1c3RfcmFuZ2VfaHdwb2lzb24oc3RydWN0IGZvbGlvICpmb2xpbywgc2l6ZV90IG9mZnNldCxcXG4tXFx0XFx0c2l6ZV90IGJ5dGVzKVxcbi17XFxuLVxcdHN0cnVjdCBwYWdlICpwYWdlID0gZm9saW9fcGFnZShmb2xpbywgb2Zmc2V0IC8gUEFHRV9TSVpFKTtcXG4tXFx0c2l6ZV90IHNhZmVfYnl0ZXM7XFxuLVxcbi1cXHRpZiAoaXNfcmF3X2h3cG9pc29uX3BhZ2VfaW5faHVnZXBhZ2UocGFnZSkpXFxuLVxcdFxcdHJldHVybiAwO1xcbi1cXHQvKiBTYWZlIHRvIHJlYWQgdGhlIHJlbWFpbmluZyBieXRlcyBpbiB0aGlzIHBhZ2UuICovXFxuLVxcdHNhZmVfYnl0ZXMgPSBQQUdFX1NJWkUgLSAob2Zmc2V0ICUgUEFHRV9TSVpFKTtcXG4tXFx0cGFnZSsrO1xcbi1cXG4tXFx0LyogQ2hlY2sgZWFjaCByZW1haW5pbmcgcGFnZSBhcyBsb25nIGFzIHdlIGFyZSBub3QgZG9uZSB5ZXQuICovXFxuLVxcdGZvciAoOyBzYWZlX2J5dGVzIFxcdTAwM2MgYnl0ZXM7IHNhZmVfYnl0ZXMgKz0gUEFHRV9TSVpFLCBwYWdlKyspXFxuLVxcdFxcdGlmIChpc19yYXdfaHdwb2lzb25fcGFnZV9pbl9odWdlcGFnZShwYWdlKSlcXG4tXFx0XFx0XFx0YnJlYWs7XFxuLVxcbi1cXHRyZXR1cm4gbWluKHNhZmVfYnl0ZXMsIGJ5dGVzKTtcXG4tfVxcbi1cXG4tLypcXG4tICogU3VwcG9ydCBmb3IgcmVhZCgpIC0gRmluZCB0aGUgcGFnZSBhdHRhY2hlZCB0byBmX21hcHBpbmcgYW5kIGNvcHkgb3V0IHRoZVxcbi0gKiBkYXRhLiBUaGlzIHByb3ZpZGVzIGZ1bmN0aW9uYWxpdHkgc2ltaWxhciB0byBmaWxlbWFwX3JlYWQoKS5cXG4tICovXFxuLXN0YXRpYyBzc2l6ZV90IGh1Z2V0bGJmc19yZWFkX2l0ZXIoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKnRvKVxcbi17XFxuLVxcdHN0cnVjdCBmaWxlICpmaWxlID0gaW9jYi1cXHUwMDNla2lfZmlscDtcXG4tXFx0c3RydWN0IGhzdGF0ZSAqaCA9IGhzdGF0ZV9maWxlKGZpbGUpO1xcbi1cXHRzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyA9IGZpbGUtXFx1MDAzZWZfbWFwcGluZztcXG4tXFx0c3RydWN0IGlub2RlICppbm9kZSA9IG1hcHBpbmctXFx1MDAzZWhvc3Q7XFxuLVxcdHVuc2lnbmVkIGxvbmcgaW5kZXggPSBpb2NiLVxcdTAwM2VraV9wb3MgXFx1MDAzZVxcdTAwM2UgaHVnZV9wYWdlX3NoaWZ0KGgpO1xcbi1cXHR1bnNpZ25lZCBsb25nIG9mZnNldCA9IGlvY2ItXFx1MDAzZWtpX3BvcyBcXHUwMDI2IH5odWdlX3BhZ2VfbWFzayhoKTtcXG4tXFx0dW5zaWduZWQgbG9uZyBlbmRfaW5kZXg7XFxuLVxcdGxvZmZfdCBpc2l6ZTtcXG4tXFx0c3NpemVfdCByZXR2YWwgPSAwO1xcbi1cXG4tXFx0d2hpbGUgKGlvdl9pdGVyX2NvdW50KHRvKSkge1xcbi1cXHRcXHRzdHJ1Y3QgZm9saW8gKmZvbGlvO1xcbi1cXHRcXHRzaXplX3QgbnIsIGNvcGllZCwgd2FudDtcXG4tXFxuLVxcdFxcdC8qIG5yIGlzIHRoZSBtYXhpbXVtIG51bWJlciBvZiBieXRlcyB0byBjb3B5IGZyb20gdGhpcyBwYWdlICovXFxuLVxcdFxcdG5yID0gaHVnZV9wYWdlX3NpemUoaCk7XFxuLVxcdFxcdGlzaXplID0gaV9zaXplX3JlYWQoaW5vZGUpO1xcbi1cXHRcXHRpZiAoIWlzaXplKVxcbi1cXHRcXHRcXHRicmVhaztcXG4tXFx0XFx0ZW5kX2luZGV4ID0gKGlzaXplIC0gMSkgXFx1MDAzZVxcdTAwM2UgaHVnZV9wYWdlX3NoaWZ0KGgpO1xcbi1cXHRcXHRpZiAoaW5kZXggXFx1MDAzZSBlbmRfaW5kZXgpXFxuLVxcdFxcdFxcdGJyZWFrO1xcbi1cXHRcXHRpZiAoaW5kZXggPT0gZW5kX2luZGV4KSB7XFxuLVxcdFxcdFxcdG5yID0gKChpc2l6ZSAtIDEpIFxcdTAwMjYgfmh1Z2VfcGFnZV9tYXNrKGgpKSArIDE7XFxuLVxcdFxcdFxcdGlmIChuciBcXHUwMDNjPSBvZmZzZXQpXFxuLVxcdFxcdFxcdFxcdGJyZWFrO1xcbi1cXHRcXHR9XFxuLVxcdFxcdG5yID0gbnIgLSBvZmZzZXQ7XFxuLVxcbi1cXHRcXHQvKiBGaW5kIHRoZSBmb2xpbyAqL1xcbi1cXHRcXHRmb2xpbyA9IGZpbGVtYXBfbG9ja19odWdldGxiX2ZvbGlvKGgsIG1hcHBpbmcsIGluZGV4KTtcXG4tXFx0XFx0aWYgKElTX0VSUihmb2xpbykpIHtcXG4tXFx0XFx0XFx0LypcXG4tXFx0XFx0XFx0ICogV2UgaGF2ZSBhIEhPTEUsIHplcm8gb3V0IHRoZSB1c2VyLWJ1ZmZlciBmb3IgdGhlXFxuLVxcdFxcdFxcdCAqIGxlbmd0aCBvZiB0aGUgaG9sZSBvciByZXF1ZXN0Llxcbi1cXHRcXHRcXHQgKi9cXG4tXFx0XFx0XFx0Y29waWVkID0gaW92X2l0ZXJfemVybyhuciwgdG8pO1xcbi1cXHRcXHR9IGVsc2Uge1xcbi1cXHRcXHRcXHRmb2xpb191bmxvY2soZm9saW8pO1xcbi1cXG4tXFx0XFx0XFx0aWYgKCFmb2xpb190ZXN0X2h3cG9pc29uKGZvbGlvKSlcXG4tXFx0XFx0XFx0XFx0d2FudCA9IG5yO1xcbi1cXHRcXHRcXHRlbHNlIHtcXG4tXFx0XFx0XFx0XFx0LypcXG4tXFx0XFx0XFx0XFx0ICogQWRqdXN0IGhvdyBtYW55IGJ5dGVzIHNhZmUgdG8gcmVhZCB3aXRob3V0XFxuLVxcdFxcdFxcdFxcdCAqIHRvdWNoaW5nIHRoZSAxc3QgcmF3IEhXUE9JU09OIHBhZ2UgYWZ0ZXJcXG4tXFx0XFx0XFx0XFx0ICogb2Zmc2V0Llxcbi1cXHRcXHRcXHRcXHQgKi9cXG4tXFx0XFx0XFx0XFx0d2FudCA9IGFkanVzdF9yYW5nZV9od3BvaXNvbihmb2xpbywgb2Zmc2V0LCBucik7XFxuLVxcdFxcdFxcdFxcdGlmICh3YW50ID09IDApIHtcXG4tXFx0XFx0XFx0XFx0XFx0Zm9saW9fcHV0KGZvbGlvKTtcXG4tXFx0XFx0XFx0XFx0XFx0cmV0dmFsID0gLUVJTztcXG4tXFx0XFx0XFx0XFx0XFx0YnJlYWs7XFxuLVxcdFxcdFxcdFxcdH1cXG4tXFx0XFx0XFx0fVxcbi1cXG4tXFx0XFx0XFx0LypcXG4tXFx0XFx0XFx0ICogV2UgaGF2ZSB0aGUgZm9saW8sIGNvcHkgaXQgdG8gdXNlciBzcGFjZSBidWZmZXIuXFxuLVxcdFxcdFxcdCAqL1xcbi1cXHRcXHRcXHRjb3BpZWQgPSBjb3B5X2ZvbGlvX3RvX2l0ZXIoZm9saW8sIG9mZnNldCwgd2FudCwgdG8pO1xcbi1cXHRcXHRcXHRmb2xpb19wdXQoZm9saW8pO1xcbi1cXHRcXHR9XFxuLVxcdFxcdG9mZnNldCArPSBjb3BpZWQ7XFxuLVxcdFxcdHJldHZhbCArPSBjb3BpZWQ7XFxuLVxcdFxcdGlmIChjb3BpZWQgIT0gbnIgXFx1MDAyNlxcdTAwMjYgaW92X2l0ZXJfY291bnQodG8pKSB7XFxuLVxcdFxcdFxcdGlmICghcmV0dmFsKVxcbi1cXHRcXHRcXHRcXHRyZXR2YWwgPSAtRUZBVUxUO1xcbi1cXHRcXHRcXHRicmVhaztcXG4tXFx0XFx0fVxcbi1cXHRcXHRpbmRleCArPSBvZmZzZXQgXFx1MDAzZVxcdTAwM2UgaHVnZV9wYWdlX3NoaWZ0KGgpO1xcbi1cXHRcXHRvZmZzZXQgXFx1MDAyNj0gfmh1Z2VfcGFnZV9tYXNrKGgpO1xcbi1cXHR9XFxuLVxcdGlvY2ItXFx1MDAzZWtpX3BvcyA9ICgobG9mZl90KWluZGV4IFxcdTAwM2NcXHUwMDNjIGh1Z2VfcGFnZV9zaGlmdChoKSkgKyBvZmZzZXQ7XFxuLVxcdHJldHVybiByZXR2YWw7XFxuLX1cXG4tXFxuIHN0YXRpYyBpbnQgaHVnZXRsYmZzX3dyaXRlX2JlZ2luKGNvbnN0IHN0cnVjdCBraW9jYiAqaW9jYixcXG4gXFx0XFx0XFx0c3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXFxuIFxcdFxcdFxcdGxvZmZfdCBwb3MsIHVuc2lnbmVkIGxlbixcXG5AQCAtODgzLDYgKzc3NiwxNyBAQCBzdGF0aWMgc3RydWN0IGlub2RlICpodWdldGxiZnNfZ2V0X3Jvb3Qoc3RydWN0IHN1cGVyX2Jsb2NrICpzYixcXG4gXFx0cmV0dXJuIGlub2RlO1xcbiB9XFxuIFxcbitzdGF0aWMgdm9pZCBodWdldGxiZnNfaW5pdF9yZWd1bGFyX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpXFxuK3tcXG4rXFx0c3RydWN0IGhzdGF0ZSAqaHN0YXRlID0gaHN0YXRlX2lub2RlKGlub2RlKTtcXG4rXFx0dW5zaWduZWQgaW50IG9yZGVyID0gaHVnZV9wYWdlX29yZGVyKGhzdGF0ZSk7XFxuK1xcbitcXHRpbm9kZS1cXHUwMDNlaV9vcCA9IFxcdTAwMjZodWdldGxiZnNfaW5vZGVfb3BlcmF0aW9ucztcXG4rXFx0aW5vZGUtXFx1MDAzZWlfZm9wID0gXFx1MDAyNmh1Z2V0bGJmc19maWxlX29wZXJhdGlvbnM7XFxuK1xcdG1hcHBpbmdfc2V0X2ZvbGlvX29yZGVyX3JhbmdlKGlub2RlLVxcdTAwM2VpX21hcHBpbmcsIG9yZGVyLCBvcmRlcik7XFxuK1xcdG1hcHBpbmdfc2V0X2F1dGhvcml0YXRpdmUoaW5vZGUtXFx1MDAzZWlfbWFwcGluZyk7XFxuK31cXG4rXFxuIC8qXFxuICAqIEh1Z2V0bGJmcyBpcyBub3QgcmVjbGFpbWFibGU7IHRoZXJlZm9yZSBpdHMgaV9tbWFwX3J3c2VtIHdpbGwgbmV2ZXJcXG4gICogYmUgdGFrZW4gZnJvbSByZWNsYWltIC0tIHVubGlrZSByZWd1bGFyIGZpbGVzeXN0ZW1zLiBUaGlzIG5lZWRzIGFuXFxuQEAgLTkyNiw4ICs4MzAsNyBAQCBzdGF0aWMgc3RydWN0IGlub2RlICpodWdldGxiZnNfZ2V0X2lub2RlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsXFxuIFxcdFxcdFxcdGluaXRfc3BlY2lhbF9pbm9kZShpbm9kZSwgbW9kZSwgZGV2KTtcXG4gXFx0XFx0XFx0YnJlYWs7XFxuIFxcdFxcdGNhc2UgU19JRlJFRzpcXG4tXFx0XFx0XFx0aW5vZGUtXFx1MDAzZWlfb3AgPSBcXHUwMDI2aHVnZXRsYmZzX2lub2RlX29wZXJhdGlvbnM7XFxuLVxcdFxcdFxcdGlub2RlLVxcdTAwM2VpX2ZvcCA9IFxcdTAwMjZodWdldGxiZnNfZmlsZV9vcGVyYXRpb25zO1xcbitcXHRcXHRcXHRodWdldGxiZnNfaW5pdF9yZWd1bGFyX2lub2RlKGlub2RlKTtcXG4gXFx0XFx0XFx0YnJlYWs7XFxuIFxcdFxcdGNhc2UgU19JRkRJUjpcXG4gXFx0XFx0XFx0aW5vZGUtXFx1MDAzZWlfb3AgPSBcXHUwMDI2aHVnZXRsYmZzX2Rpcl9pbm9kZV9vcGVyYXRpb25zO1xcbkBAIC0xMjA2LDcgKzExMDksNyBAQCBzdGF0aWMgdm9pZCBpbml0X29uY2Uodm9pZCAqZm9vKVxcbiB9XFxuIFxcbiBzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBodWdldGxiZnNfZmlsZV9vcGVyYXRpb25zID0ge1xcbi1cXHQucmVhZF9pdGVyXFx0XFx0PSBodWdldGxiZnNfcmVhZF9pdGVyLFxcbitcXHQucmVhZF9pdGVyXFx0XFx0PSBnZW5lcmljX2ZpbGVfcmVhZF9pdGVyLFxcbiBcXHQubW1hcFxcdFxcdFxcdD0gaHVnZXRsYmZzX2ZpbGVfbW1hcCxcXG4gXFx0LmZzeW5jXFx0XFx0XFx0PSBub29wX2ZzeW5jLFxcbiBcXHQuZ2V0X3VubWFwcGVkX2FyZWFcXHQ9IGh1Z2V0bGJfZ2V0X3VubWFwcGVkX2FyZWEsXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaHVnZXRsYi5oIGIvaW5jbHVkZS9saW51eC9odWdldGxiLmhcXG5pbmRleCAyYWJhZjk5MzIxZTkwZC4uMTg3ODY0MmU3NWVjNTEgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9odWdldGxiLmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaFxcbkBAIC0xNjUsNyArMTY1LDcgQEAgYm9vbCBodWdldGxiZnNfcGFnZWNhY2hlX3ByZXNlbnQoc3RydWN0IGhzdGF0ZSAqaCxcXG4gXFx0XFx0XFx0XFx0IHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbiBcXHRcXHRcXHRcXHQgdW5zaWduZWQgbG9uZyBhZGRyZXNzKTtcXG4gXFxuLXN0cnVjdCBhZGRyZXNzX3NwYWNlICpodWdldGxiX2ZvbGlvX21hcHBpbmdfbG9ja193cml0ZShzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcXG4rc3RydWN0IGFkZHJlc3Nfc3BhY2UgKmh1Z2V0bGJfZm9saW9fbWFwcGluZ19sb2NrX3dyaXRlKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8pO1xcbiBcXG4gZXh0ZXJuIGludCBtb3ZhYmxlX2dpZ2FudGljX3BhZ2VzIF9fcmVhZF9tb3N0bHk7XFxuIGV4dGVybiBpbnQgc3lzY3RsX2h1Z2V0bGJfc2htX2dyb3VwIF9fcmVhZF9tb3N0bHk7XFxuQEAgLTI5Miw4ICsyOTIsNyBAQCBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgaHVnZXRsYl90b3RhbF9wYWdlcyh2b2lkKVxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4tc3RhdGljIGlubGluZSBzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqaHVnZXRsYl9mb2xpb19tYXBwaW5nX2xvY2tfd3JpdGUoXFxuLVxcdFxcdFxcdFxcdFxcdFxcdFxcdHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuK3N0YXRpYyBpbmxpbmUgc3RydWN0IGFkZHJlc3Nfc3BhY2UgKmh1Z2V0bGJfZm9saW9fbWFwcGluZ19sb2NrX3dyaXRlKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuIHtcXG4gXFx0cmV0dXJuIE5VTEw7XFxuIH1cXG5AQCAtNTk1LDggKzU5NCw4IEBAIGVudW0gaHVnZXRsYl9wYWdlX2ZsYWdzIHtcXG4gI2lmZGVmIENPTkZJR19IVUdFVExCX1BBR0VcXG4gI2RlZmluZSBURVNUSFBBR0VGTEFHKHVuYW1lLCBmbG5hbWUpXFx0XFx0XFx0XFx0XFxcXFxcbiBzdGF0aWMgX19hbHdheXNfaW5saW5lXFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbi1ib29sIGZvbGlvX3Rlc3RfaHVnZXRsYl8jI2ZsbmFtZShzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcdFxcdFxcXFxcXG4tXFx0e1xcdHZvaWQgKnByaXZhdGUgPSBcXHUwMDI2Zm9saW8tXFx1MDAzZXByaXZhdGU7XFx0XFx0XFxcXFxcbitib29sIGZvbGlvX3Rlc3RfaHVnZXRsYl8jI2ZsbmFtZShjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcdFxcXFxcXG4rXFx0e1xcdGNvbnN0IHZvaWQgKnByaXZhdGUgPSBcXHUwMDI2Zm9saW8tXFx1MDAzZXByaXZhdGU7XFx0XFx0XFxcXFxcbiBcXHRcXHRyZXR1cm4gdGVzdF9iaXQoSFBHXyMjZmxuYW1lLCBwcml2YXRlKTtcXHRcXHRcXFxcXFxuIFxcdH1cXG4gXFxuQEAgLTYxNiw3ICs2MTUsNyBAQCB2b2lkIGZvbGlvX2NsZWFyX2h1Z2V0bGJfIyNmbG5hbWUoc3RydWN0IGZvbGlvICpmb2xpbylcXHRcXHRcXFxcXFxuICNlbHNlXFxuICNkZWZpbmUgVEVTVEhQQUdFRkxBRyh1bmFtZSwgZmxuYW1lKVxcdFxcdFxcdFxcdFxcXFxcXG4gc3RhdGljIGlubGluZSBib29sXFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbi1mb2xpb190ZXN0X2h1Z2V0bGJfIyNmbG5hbWUoc3RydWN0IGZvbGlvICpmb2xpbylcXHRcXHRcXFxcXFxuK2ZvbGlvX3Rlc3RfaHVnZXRsYl8jI2ZsbmFtZShjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcdFxcdFxcXFxcXG4gXFx0eyByZXR1cm4gMDsgfVxcbiBcXG4gI2RlZmluZSBTRVRIUEFHRUZMQUcodW5hbWUsIGZsbmFtZSlcXHRcXHRcXHRcXHRcXFxcXFxuQEAgLTcyNyw3ICs3MjYsNyBAQCBzdGF0aWMgaW5saW5lIHN0cnVjdCBodWdlcGFnZV9zdWJwb29sICpzdWJwb29sX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpXFxuIFxcdHJldHVybiBIVUdFVExCRlNfU0IoaW5vZGUtXFx1MDAzZWlfc2IpLVxcdTAwM2VzcG9vbDtcXG4gfVxcbiBcXG4tc3RhdGljIGlubGluZSBzdHJ1Y3QgaHVnZXBhZ2Vfc3VicG9vbCAqaHVnZXRsYl9mb2xpb19zdWJwb29sKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuK3N0YXRpYyBpbmxpbmUgc3RydWN0IGh1Z2VwYWdlX3N1YnBvb2wgKmh1Z2V0bGJfZm9saW9fc3VicG9vbChjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbiB7XFxuIFxcdHJldHVybiBmb2xpby1cXHUwMDNlX2h1Z2V0bGJfc3VicG9vbDtcXG4gfVxcbkBAIC04NTcsNyArODU2LDcgQEAgc3RhdGljIGlubGluZSBib29sIGFyY2hfaGFzX2h1Z2VfYm9vdG1lbV9hbGxvYyh2b2lkKVxcbiB9XFxuICNlbmRpZlxcbiBcXG4tc3RhdGljIGlubGluZSBzdHJ1Y3QgaHN0YXRlICpmb2xpb19oc3RhdGUoc3RydWN0IGZvbGlvICpmb2xpbylcXG4rc3RhdGljIGlubGluZSBzdHJ1Y3QgaHN0YXRlICpmb2xpb19oc3RhdGUoY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbylcXG4ge1xcbiBcXHRWTV9CVUdfT05fRk9MSU8oIWZvbGlvX3Rlc3RfaHVnZXRsYihmb2xpbyksIGZvbGlvKTtcXG4gXFx0cmV0dXJuIHNpemVfdG9faHN0YXRlKGZvbGlvX3NpemUoZm9saW8pKTtcXG5AQCAtMTA3MCwxMSArMTA2OSw2IEBAIHZvaWQgaHVnZXRsYl9yZWdpc3Rlcl9ub2RlKHN0cnVjdCBub2RlICpub2RlKTtcXG4gdm9pZCBodWdldGxiX3VucmVnaXN0ZXJfbm9kZShzdHJ1Y3Qgbm9kZSAqbm9kZSk7XFxuICNlbmRpZlxcbiBcXG4tLypcXG4tICogQ2hlY2sgaWYgYSBnaXZlbiByYXcgQHBhZ2UgaW4gYSBodWdlcGFnZSBpcyBIV1BPSVNPTi5cXG4tICovXFxuLWJvb2wgaXNfcmF3X2h3cG9pc29uX3BhZ2VfaW5faHVnZXBhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UpO1xcbi1cXG4gc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGh1Z2VfcGFnZV9tYXNrX2FsaWduKHN0cnVjdCBmaWxlICpmaWxlKVxcbiB7XFxuIFxcdHJldHVybiBQQUdFX01BU0sgXFx1MDAyNiB+aHVnZV9wYWdlX21hc2soaHN0YXRlX2ZpbGUoZmlsZSkpO1xcbkBAIC0xMDg4LDcgKzEwODIsNyBAQCBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgaHVnZV9wYWdlX21hc2tfYWxpZ24oc3RydWN0IGZpbGUgKmZpbGUpXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbi1zdGF0aWMgaW5saW5lIHN0cnVjdCBodWdlcGFnZV9zdWJwb29sICpodWdldGxiX2ZvbGlvX3N1YnBvb2woc3RydWN0IGZvbGlvICpmb2xpbylcXG4rc3RhdGljIGlubGluZSBzdHJ1Y3QgaHVnZXBhZ2Vfc3VicG9vbCAqaHVnZXRsYl9mb2xpb19zdWJwb29sKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuIHtcXG4gXFx0cmV0dXJuIE5VTEw7XFxuIH1cXG5AQCAtMTE1Nyw3ICsxMTUxLDcgQEAgc3RhdGljIGlubGluZSBzdHJ1Y3QgaHN0YXRlICpoc3RhdGVfdm1hKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxcbiBcXHRyZXR1cm4gTlVMTDtcXG4gfVxcbiBcXG4tc3RhdGljIGlubGluZSBzdHJ1Y3QgaHN0YXRlICpmb2xpb19oc3RhdGUoc3RydWN0IGZvbGlvICpmb2xpbylcXG4rc3RhdGljIGlubGluZSBzdHJ1Y3QgaHN0YXRlICpmb2xpb19oc3RhdGUoY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbylcXG4ge1xcbiBcXHRyZXR1cm4gTlVMTDtcXG4gfVxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21tX3R5cGVzLmggYi9pbmNsdWRlL2xpbnV4L21tX3R5cGVzLmhcXG5pbmRleCBiMThjMmIyZTdkMmM2NS4uODZhMmQwZmVlNTU3YmUgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9tbV90eXBlcy5oXFxuKysrIGIvaW5jbHVkZS9saW51eC9tbV90eXBlcy5oXFxuQEAgLTM4Nyw3ICszODcsNyBAQCB0eXBlZGVmIHVuc2lnbmVkIHNob3J0IG1tX2lkX3Q7XFxuICAqIEBfaHVnZXRsYl9zdWJwb29sOiBEbyBub3QgdXNlIGRpcmVjdGx5LCB1c2UgYWNjZXNzb3IgaW4gaHVnZXRsYi5oLlxcbiAgKiBAX2h1Z2V0bGJfY2dyb3VwOiBEbyBub3QgdXNlIGRpcmVjdGx5LCB1c2UgYWNjZXNzb3IgaW4gaHVnZXRsYl9jZ3JvdXAuaC5cXG4gICogQF9odWdldGxiX2Nncm91cF9yc3ZkOiBEbyBub3QgdXNlIGRpcmVjdGx5LCB1c2UgYWNjZXNzb3IgaW4gaHVnZXRsYl9jZ3JvdXAuaC5cXG4tICogQF9odWdldGxiX2h3cG9pc29uOiBEbyBub3QgdXNlIGRpcmVjdGx5LCBjYWxsIHJhd19od3BfbGlzdF9oZWFkKCkuXFxuKyAqIEBodWdldGxiX2h3cG9pc29uOiBMaXN0IG9mIHBhZ2VzIHdpdGggaHdwb2lzb24uXFxuICAqIEBfZGVmZXJyZWRfbGlzdDogRm9saW9zIHRvIGJlIHNwbGl0IHVuZGVyIG1lbW9yeSBwcmVzc3VyZS5cXG4gICogQF91bnVzZWRfc2xhYl9vYmpfZXh0czogUGxhY2Vob2xkZXIgdG8gbWF0Y2ggb2JqX2V4dHMgaW4gc3RydWN0IHNsYWIuXFxuICAqXFxuQEAgLTQ5OSw3ICs0OTksNyBAQCBzdHJ1Y3QgZm9saW8ge1xcbiBcXHRcXHRcXHR2b2lkICpfaHVnZXRsYl9zdWJwb29sO1xcbiBcXHRcXHRcXHR2b2lkICpfaHVnZXRsYl9jZ3JvdXA7XFxuIFxcdFxcdFxcdHZvaWQgKl9odWdldGxiX2Nncm91cF9yc3ZkO1xcbi1cXHRcXHRcXHR2b2lkICpfaHVnZXRsYl9od3BvaXNvbjtcXG4rXFx0XFx0XFx0c3RydWN0IGh3cF9wYWdlICpodWdldGxiX2h3cG9pc29uO1xcbiBcXHQvKiBwcml2YXRlOiB0aGUgdW5pb24gd2l0aCBzdHJ1Y3QgcGFnZSBpcyB0cmFuc2l0aW9uYWwgKi9cXG4gXFx0XFx0fTtcXG4gXFx0XFx0c3RydWN0IHBhZ2UgX19wYWdlXzM7XFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oIGIvaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmhcXG5pbmRleCA3MjIzZjZmNGUyYjQwMy4uMDdjYzc4NTRiMmRlMTYgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaFxcbkBAIC04OTMsMTQgKzg5MywxOSBAQCBzdGF0aWMgaW5saW5lIGludCBQYWdlVHJhbnNDb21wb3VuZChjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSlcXG4gVEVTVFBBR0VGTEFHX0ZBTFNFKFRyYW5zQ29tcG91bmQsIHRyYW5zY29tcG91bmQpXFxuICNlbmRpZlxcbiBcXG4tI2lmIGRlZmluZWQoQ09ORklHX01FTU9SWV9GQUlMVVJFKSBcXHUwMDI2XFx1MDAyNiBkZWZpbmVkKENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSlcXG4rI2lmIGRlZmluZWQoQ09ORklHX01FTU9SWV9GQUlMVVJFKSBcXHUwMDI2XFx1MDAyNiBkZWZpbmVkKENPTkZJR19MQVJHRV9GT0xJTylcXG4gLypcXG4tICogUGFnZUhhc0hXUG9pc29uZWQgaW5kaWNhdGVzIHRoYXQgYXQgbGVhc3Qgb25lIHN1YnBhZ2UgaXMgaHdwb2lzb25lZCBpbiB0aGVcXG4tICogY29tcG91bmQgcGFnZS5cXG4rICogZm9saW9faGFzX2h3cG9pc29uZWQgaW5kaWNhdGVzIHRoYXQgYXQgbGVhc3Qgb25lIHBhZ2UgaXMgaHdwb2lzb25lZCBpbiB0aGVcXG4rICogZm9saW8uICBUaGF0IHBhZ2Ugd2lsbCB1c3VhbGx5IGFsc28gaGF2ZSB0aGUgSFdQb2lzb24gZmxhZyBzZXQsIGJ1dCB0aGlzXFxuKyAqIGlzIG5vdCBwb3NzaWJsZSBmb3IgZm9saW9zIHdoaWNoIGhhdmUgSFZPIChzZWUgbWVtb3J5LWZhaWx1cmUgZm9yIHRoZVxcbisgKiBzY2hlbWUgdXNlZCBpbiB0aGF0IGNhc2UpLiAgWW91IHByb2JhYmx5IGRvbid0IHdhbnQgdG8gY2FsbCB0aGlzIGRpcmVjdGx5O1xcbisgKiB1c2UgZm9saW9faGFzX2h3cG9pc29uZWRfcGFnZSgpIGluc3RlYWQuXFxuICAqXFxuICAqIFRoaXMgZmxhZyBpcyBzZXQgYnkgaHdwb2lzb24gaGFuZGxlci4gIENsZWFyZWQgYnkgVEhQIHNwbGl0IG9yIGZyZWUgcGFnZS5cXG4gICovXFxuIEZPTElPX0ZMQUcoaGFzX2h3cG9pc29uZWQsIEZPTElPX1NFQ09ORF9QQUdFKVxcbitGT0xJT19URVNUX1NFVF9GTEFHKGhhc19od3BvaXNvbmVkLCBGT0xJT19TRUNPTkRfUEFHRSlcXG4rRk9MSU9fVEVTVF9DTEVBUl9GTEFHKGhhc19od3BvaXNvbmVkLCBGT0xJT19TRUNPTkRfUEFHRSlcXG4gI2Vsc2VcXG4gRk9MSU9fRkxBR19GQUxTRShoYXNfaHdwb2lzb25lZClcXG4gI2VuZGlmXFxuQEAgLTEwNDEsOCArMTA0NiwyOSBAQCBQQUdFX1RZUEVfT1BTKFNsYWIsIHNsYWIsIHNsYWIpXFxuIFxcbiAjaWZkZWYgQ09ORklHX0hVR0VUTEJfUEFHRVxcbiBGT0xJT19UWVBFX09QUyhodWdldGxiLCBodWdldGxiKVxcbitcXG4rI2lmZGVmIENPTkZJR19NRU1PUllfRkFJTFVSRVxcbitzdGF0aWMgaW5saW5lIGJvb2wgZm9saW9fdGVzdF9odWdlX3BvaXNvbihjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbit7XFxuK1xcdHJldHVybiAoUkVBRF9PTkNFKGZvbGlvLVxcdTAwM2VwYWdlLnBhZ2VfdHlwZSkgXFx1MDAzZVxcdTAwM2UgMjMpID09XFxuK1xcdFxcdCgoUEdUWV9odWdldGxiIFxcdTAwM2NcXHUwMDNjIDEpIHwgMSk7XFxuK31cXG4rXFxuK3N0YXRpYyBpbmxpbmUgdm9pZCBmb2xpb19zZXRfaHVnZV9wb2lzb24oc3RydWN0IGZvbGlvICpmb2xpbylcXG4re1xcbitcXHRmb2xpby1cXHUwMDNlcGFnZS5wYWdlX3R5cGUgfD0gKDEgXFx1MDAzY1xcdTAwM2MgMjMpO1xcbit9XFxuK1xcbitzdGF0aWMgaW5saW5lIHZvaWQgZm9saW9fY2xlYXJfaHVnZV9wb2lzb24oc3RydWN0IGZvbGlvICpmb2xpbylcXG4re1xcbitcXHRmb2xpby1cXHUwMDNlcGFnZS5wYWdlX3R5cGUgXFx1MDAyNj0gfigxIFxcdTAwM2NcXHUwMDNjIDIzKTtcXG4rfVxcbisjZWxzZVxcbitGT0xJT19URVNUX0ZMQUdfRkFMU0UoaHVnZV9wb2lzb24pXFxuKyNlbmRpZlxcbiAjZWxzZVxcbiBGT0xJT19URVNUX0ZMQUdfRkFMU0UoaHVnZXRsYilcXG4rRk9MSU9fVEVTVF9GTEFHX0ZBTFNFKGh1Z2VfcG9pc29uKVxcbiAjZW5kaWZcXG4gXFxuIFBBR0VfVFlQRV9PUFMoWnNtYWxsb2MsIHpzbWFsbG9jLCB6c21hbGxvYylcXG5AQCAtMTA2OCwxMCArMTA5NCwxNCBAQCBzdGF0aWMgaW5saW5lIGJvb2wgUGFnZUh1Z2UoY29uc3Qgc3RydWN0IHBhZ2UgKnBhZ2UpXFxuIFxcdHJldHVybiBmb2xpb190ZXN0X2h1Z2V0bGIocGFnZV9mb2xpbyhwYWdlKSk7XFxuIH1cXG4gXFxuK2Jvb2wgaHVnZXRsYl9wYWdlX2h3cG9pc29uKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8sIGNvbnN0IHN0cnVjdCBwYWdlICpwYWdlKTtcXG4rYm9vbCBodWdldGxiX3VucmVmX3BhZ2VfaHdwb2lzb24oY29uc3Qgc3RydWN0IHBhZ2UgKnBhZ2UpO1xcbitcXG4gLypcXG4tICogQ2hlY2sgaWYgYSBwYWdlIGlzIGN1cnJlbnRseSBtYXJrZWQgSFdQb2lzb25lZC4gTm90ZSB0aGF0IHRoaXMgY2hlY2sgaXNcXG4tICogYmVzdCBlZmZvcnQgb25seSBhbmQgaW5oZXJlbnRseSByYWN5OiB0aGVyZSBpcyBubyB3YXkgdG8gc3luY2hyb25pemUgd2l0aFxcbi0gKiBmYWlsaW5nIGhhcmR3YXJlLlxcbisgKiBDaGVjayBpZiBhIHBhZ2UgaXMgY3VycmVudGx5IG1hcmtlZCBIV1BvaXNvbmVkLiAgVGhpcyBjaGVjayBpcyBiZXN0XFxuKyAqIGVmZm9ydCBvbmx5IGFuZCBpbmhlcmVudGx5IHJhY3k6IHRoZXJlIGlzIG5vIHdheSB0byBzeW5jaHJvbml6ZSB3aXRoXFxuKyAqIGZhaWxpbmcgaGFyZHdhcmUuICBUaGUgY2FsbGVyIG1heSBub3QgaGF2ZSBhIHJlZmNvdW50IG9uIHRoZSBmb2xpb1xcbisgKiBjb250YWluaW5nIHRoZSBwYWdlLCBzbyB3ZSBtdXN0IGJlIGNhcmVmdWwgdG8gbm90IHRyaXAgYW55IGFzc2VydGlvbnMuXFxuICAqL1xcbiBzdGF0aWMgaW5saW5lIGJvb2wgaXNfcGFnZV9od3BvaXNvbihjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSlcXG4ge1xcbkBAIC0xMDgwLDEzICsxMTEwLDI2IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBpc19wYWdlX2h3cG9pc29uKGNvbnN0IHN0cnVjdCBwYWdlICpwYWdlKVxcbiBcXHRpZiAoUGFnZUhXUG9pc29uKHBhZ2UpKVxcbiBcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4gXFx0Zm9saW8gPSBwYWdlX2ZvbGlvKHBhZ2UpO1xcbi1cXHRyZXR1cm4gZm9saW9fdGVzdF9odWdldGxiKGZvbGlvKSBcXHUwMDI2XFx1MDAyNiBQYWdlSFdQb2lzb24oXFx1MDAyNmZvbGlvLVxcdTAwM2VwYWdlKTtcXG4rXFx0aWYgKGZvbGlvX3Rlc3RfaHVnZV9wb2lzb24oZm9saW8pKVxcbitcXHRcXHRyZXR1cm4gaHVnZXRsYl91bnJlZl9wYWdlX2h3cG9pc29uKHBhZ2UpO1xcbitcXHQvKiBJbiBjYXNlIHdlIHJhY2VkIHdpdGggaHVnZXRsYiB0cmFuc2ZlcnJpbmcgZmxhZ3MgKi9cXG4rXFx0cmV0dXJuIFBhZ2VIV1BvaXNvbihwYWdlKTtcXG4rfVxcbitcXG4rc3RhdGljIGlubGluZSBib29sIGlzX3JlZl9wYWdlX2h3cG9pc29uKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8sXFxuK1xcdFxcdGNvbnN0IHN0cnVjdCBwYWdlICpwYWdlKVxcbit7XFxuK1xcdGlmIChQYWdlSFdQb2lzb24ocGFnZSkpXFxuK1xcdFxcdHJldHVybiB0cnVlO1xcbitcXHRpZiAoZm9saW9fdGVzdF9odWdldGxiKGZvbGlvKSlcXG4rXFx0XFx0cmV0dXJuIGh1Z2V0bGJfcGFnZV9od3BvaXNvbihmb2xpbywgcGFnZSk7XFxuK1xcdHJldHVybiBmYWxzZTtcXG4gfVxcbiBcXG4tc3RhdGljIGlubGluZSBib29sIGZvbGlvX2NvbnRhaW5faHdwb2lzb25lZF9wYWdlKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuK3N0YXRpYyBpbmxpbmUgYm9vbCBmb2xpb19oYXNfaHdwb2lzb25lZF9wYWdlKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuIHtcXG4tXFx0cmV0dXJuIGZvbGlvX3Rlc3RfaHdwb2lzb24oZm9saW8pIHx8XFxuLVxcdCAgICAoZm9saW9fdGVzdF9sYXJnZShmb2xpbykgXFx1MDAyNlxcdTAwMjYgZm9saW9fdGVzdF9oYXNfaHdwb2lzb25lZChmb2xpbykpO1xcbitcXHRyZXR1cm4gUGFnZUhXUG9pc29uKFxcdTAwMjZmb2xpby1cXHUwMDNlcGFnZSkgfHxcXG4rXFx0ICAgICAgIChmb2xpb190ZXN0X2xhcmdlKGZvbGlvKSBcXHUwMDI2XFx1MDAyNiBmb2xpb190ZXN0X2hhc19od3BvaXNvbmVkKGZvbGlvKSk7XFxuIH1cXG4gXFxuIGJvb2wgaXNfZnJlZV9idWRkeV9wYWdlKGNvbnN0IHN0cnVjdCBwYWdlICpwYWdlKTtcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wYWdlbWFwLmggYi9pbmNsdWRlL2xpbnV4L3BhZ2VtYXAuaFxcbmluZGV4IDJjMzcxOGQ1OTJkNmRkLi4yMmQ0ODkzNWZmZGE3YyAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L3BhZ2VtYXAuaFxcbisrKyBiL2luY2x1ZGUvbGludXgvcGFnZW1hcC5oXFxuQEAgLTIxMCw2ICsyMTAsNyBAQCBlbnVtIG1hcHBpbmdfZmxhZ3Mge1xcbiBcXHRBU19XUklURUJBQ0tfTUFZX0RFQURMT0NLX09OX1JFQ0xBSU0gPSA5LFxcbiBcXHRBU19LRVJORUxfRklMRSA9IDEwLFxcdC8qIG1hcHBpbmcgZm9yIGEgZmFrZSBrZXJuZWwgZmlsZSB0aGF0IHNob3VsZG4ndFxcbiBcXHRcXHRcXHRcXHQgICBhY2NvdW50IHVzYWdlIHRvIHVzZXIgY2dyb3VwcyAqL1xcbitcXHRBU19BVVRIT1JJVEFUSVZFID0gMTEsXFx0LyogSWYgd2UgbWlzcyBpbiB0aGUgcGFnZSBjYWNoZSwgaXQncyBhIGhvbGUgKi9cXG4gXFx0LyogQml0cyAxNi0yNSBhcmUgdXNlZCBmb3IgRk9MSU9fT1JERVIgKi9cXG4gXFx0QVNfRk9MSU9fT1JERVJfQklUUyA9IDUsXFxuIFxcdEFTX0ZPTElPX09SREVSX01JTiA9IDE2LFxcbkBAIC0zNDUsNiArMzQ2LDE2IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBtYXBwaW5nX3dyaXRlYmFja19tYXlfZGVhZGxvY2tfb25fcmVjbGFpbShjb25zdCBzdHJ1Y3QgYWRkcmVzXFxuIFxcdHJldHVybiB0ZXN0X2JpdChBU19XUklURUJBQ0tfTUFZX0RFQURMT0NLX09OX1JFQ0xBSU0sIFxcdTAwMjZtYXBwaW5nLVxcdTAwM2VmbGFncyk7XFxuIH1cXG4gXFxuK3N0YXRpYyBpbmxpbmUgdm9pZCBtYXBwaW5nX3NldF9hdXRob3JpdGF0aXZlKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nKVxcbit7XFxuK1xcdHNldF9iaXQoQVNfQVVUSE9SSVRBVElWRSwgXFx1MDAyNm1hcHBpbmctXFx1MDAzZWZsYWdzKTtcXG4rfVxcbitcXG4rc3RhdGljIGlubGluZSBib29sIG1hcHBpbmdfaXNfYXV0aG9yaXRhdGl2ZShjb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZylcXG4re1xcbitcXHRyZXR1cm4gdGVzdF9iaXQoQVNfQVVUSE9SSVRBVElWRSwgXFx1MDAyNm1hcHBpbmctXFx1MDAzZWZsYWdzKTtcXG4rfVxcbitcXG4gc3RhdGljIGlubGluZSBnZnBfdCBtYXBwaW5nX2dmcF9tYXNrKGNvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nKVxcbiB7XFxuIFxcdHJldHVybiBtYXBwaW5nLVxcdTAwM2VnZnBfbWFzaztcXG5AQCAtMzczLDcgKzM4NCw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBtYXBwaW5nX3NldF9nZnBfbWFzayhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbSwgZ2ZwX3QgbWFzaylcXG4gICogYXNzdW1wdGlvbnMgYWJvdXQgbWF4aW11bSBvcmRlciBpZiBUSFAgYXJlIGRpc2FibGVkLCBidXQgOCBzZWVtcyBsaWtlXFxuICAqIGEgZ29vZCBvcmRlciAodGhhdCdzIDFNQiBpZiB5b3UncmUgdXNpbmcgNGtCIHBhZ2VzKVxcbiAgKi9cXG4tI2lmZGVmIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRVxcbisjaWZkZWYgQ09ORklHX0xBUkdFX0ZPTElPXFxuICNkZWZpbmUgUFJFRkVSUkVEX01BWF9QQUdFQ0FDSEVfT1JERVJcXHRIUEFHRV9QTURfT1JERVJcXG4gI2Vsc2VcXG4gI2RlZmluZSBQUkVGRVJSRURfTUFYX1BBR0VDQUNIRV9PUkRFUlxcdDhcXG5AQCAtMzk0LDcgKzQwNSw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBtYXBwaW5nX3NldF9nZnBfbWFzayhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbSwgZ2ZwX3QgbWFzaylcXG4gICovXFxuIHN0YXRpYyBpbmxpbmUgc2l6ZV90IG1hcHBpbmdfbWF4X2ZvbGlvX3NpemVfc3VwcG9ydGVkKHZvaWQpXFxuIHtcXG4tXFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFKSlcXG4rXFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX0xBUkdFX0ZPTElPKSlcXG4gXFx0XFx0cmV0dXJuIDFVIFxcdTAwM2NcXHUwMDNjIChQQUdFX1NISUZUICsgTUFYX1BBR0VDQUNIRV9PUkRFUik7XFxuIFxcdHJldHVybiBQQUdFX1NJWkU7XFxuIH1cXG5AQCAtNDA1LDI5ICs0MTYsMjMgQEAgc3RhdGljIGlubGluZSBzaXplX3QgbWFwcGluZ19tYXhfZm9saW9fc2l6ZV9zdXBwb3J0ZWQodm9pZClcXG4gICogQG1pbjogTWluaW11bSBmb2xpbyBvcmRlciAoYmV0d2VlbiAwLU1BWF9QQUdFQ0FDSEVfT1JERVIgaW5jbHVzaXZlKS5cXG4gICogQG1heDogTWF4aW11bSBmb2xpbyBvcmRlciAoYmV0d2VlbiBAbWluLU1BWF9QQUdFQ0FDSEVfT1JERVIgaW5jbHVzaXZlKS5cXG4gICpcXG4tICogVGhlIGZpbGVzeXN0ZW0gc2hvdWxkIGNhbGwgdGhpcyBmdW5jdGlvbiBpbiBpdHMgaW5vZGUgY29uc3RydWN0b3IgdG9cXG4tICogaW5kaWNhdGUgd2hpY2ggYmFzZSBzaXplIChtaW4pIGFuZCBtYXhpbXVtIHNpemUgKG1heCkgb2YgZm9saW8gdGhlIFZGU1xcbi0gKiBjYW4gdXNlIHRvIGNhY2hlIHRoZSBjb250ZW50cyBvZiB0aGUgZmlsZS4gIFRoaXMgc2hvdWxkIG9ubHkgYmUgdXNlZFxcbi0gKiBpZiB0aGUgZmlsZXN5c3RlbSBuZWVkcyBzcGVjaWFsIGhhbmRsaW5nIG9mIGZvbGlvIHNpemVzIChpZSB0aGVyZSBpc1xcbi0gKiBzb21ldGhpbmcgdGhlIGNvcmUgY2Fubm90IGtub3cpLlxcbisgKiBUaGUgZmlsZXN5c3RlbSBzaG91bGQgY2FsbCB0aGlzIGZ1bmN0aW9uIGluIGl0cyBpbm9kZSBjb25zdHJ1Y3RvclxcbisgKiB0byBpbmRpY2F0ZSB3aGljaCBzaXplIGZvbGlvcyBjYW4gYmUgdXNlZCB0byBjYWNoZSB0aGUgY29udGVudHMgb2ZcXG4rICogdGhlIGlub2RlLiAgVGhpcyBzaG91bGQgb25seSBiZSB1c2VkIGlmIHRoZSBmaWxlc3lzdGVtIG5lZWRzIHNwZWNpYWxcXG4rICogaGFuZGxpbmcgb2YgZm9saW8gc2l6ZXMgKGllIHRoZXJlIGlzIHNvbWV0aGluZyB0aGUgY29yZSBjYW5ub3Qga25vdykuXFxuICAqIERvIG5vdCB0dW5lIGl0IGJhc2VkIG9uLCBlZywgaV9zaXplLlxcbiAgKlxcbisgKiBodWdldGxiIGNhbGxzIHRoaXMgd2l0aCBvcmRlcnMgbGFyZ2VyIHRoYW4gTUFYX1BBR0VDQUNIRV9PUkRFUi5cXG4rICogTm9ybWFsIGZpbGVzeXN0ZW1zIHNob3VsZCBub3QgZG8gdGhpcy5cXG4rICpcXG4gICogQ29udGV4dDogVGhpcyBzaG91bGQgbm90IGJlIGNhbGxlZCB3aGlsZSB0aGUgaW5vZGUgaXMgYWN0aXZlIGFzIGl0XFxuICAqIGlzIG5vbi1hdG9taWMuXFxuICAqL1xcbiBzdGF0aWMgaW5saW5lIHZvaWQgbWFwcGluZ19zZXRfZm9saW9fb3JkZXJfcmFuZ2Uoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXFxuLVxcdFxcdFxcdFxcdFxcdFxcdCB1bnNpZ25lZCBpbnQgbWluLFxcbi1cXHRcXHRcXHRcXHRcXHRcXHQgdW5zaWduZWQgaW50IG1heClcXG4rXFx0XFx0dW5zaWduZWQgaW50IG1pbiwgdW5zaWduZWQgaW50IG1heClcXG4ge1xcbi1cXHRpZiAoIUlTX0VOQUJMRUQoQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFKSlcXG4rXFx0aWYgKCFJU19FTkFCTEVEKENPTkZJR19MQVJHRV9GT0xJTykpXFxuIFxcdFxcdHJldHVybjtcXG4tXFxuLVxcdGlmIChtaW4gXFx1MDAzZSBNQVhfUEFHRUNBQ0hFX09SREVSKVxcbi1cXHRcXHRtaW4gPSBNQVhfUEFHRUNBQ0hFX09SREVSO1xcbi1cXG4tXFx0aWYgKG1heCBcXHUwMDNlIE1BWF9QQUdFQ0FDSEVfT1JERVIpXFxuLVxcdFxcdG1heCA9IE1BWF9QQUdFQ0FDSEVfT1JERVI7XFxuLVxcbiBcXHRpZiAobWF4IFxcdTAwM2MgbWluKVxcbiBcXHRcXHRtYXggPSBtaW47XFxuIFxcbkBAIC00NjAsNyArNDY1LDcgQEAgc3RhdGljIGlubGluZSB2b2lkIG1hcHBpbmdfc2V0X2xhcmdlX2ZvbGlvcyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZylcXG4gc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnRcXG4gbWFwcGluZ19tYXhfZm9saW9fb3JkZXIoY29uc3Qgc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcpXFxuIHtcXG4tXFx0aWYgKCFJU19FTkFCTEVEKENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSkpXFxuK1xcdGlmICghSVNfRU5BQkxFRChDT05GSUdfTEFSR0VfRk9MSU8pKVxcbiBcXHRcXHRyZXR1cm4gMDtcXG4gXFx0cmV0dXJuIChtYXBwaW5nLVxcdTAwM2VmbGFncyBcXHUwMDI2IEFTX0ZPTElPX09SREVSX01BWF9NQVNLKSBcXHUwMDNlXFx1MDAzZSBBU19GT0xJT19PUkRFUl9NQVg7XFxuIH1cXG5AQCAtNDY4LDcgKzQ3Myw3IEBAIG1hcHBpbmdfbWF4X2ZvbGlvX29yZGVyKGNvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nKVxcbiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludFxcbiBtYXBwaW5nX21pbl9mb2xpb19vcmRlcihjb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZylcXG4ge1xcbi1cXHRpZiAoIUlTX0VOQUJMRUQoQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFKSlcXG4rXFx0aWYgKCFJU19FTkFCTEVEKENPTkZJR19MQVJHRV9GT0xJTykpXFxuIFxcdFxcdHJldHVybiAwO1xcbiBcXHRyZXR1cm4gKG1hcHBpbmctXFx1MDAzZWZsYWdzIFxcdTAwMjYgQVNfRk9MSU9fT1JERVJfTUlOX01BU0spIFxcdTAwM2VcXHUwMDNlIEFTX0ZPTElPX09SREVSX01JTjtcXG4gfVxcbkBAIC01MjQsNyArNTI5LDcgQEAgc3RhdGljIGlubGluZSBib29sIG1hcHBpbmdfbGFyZ2VfZm9saW9fc3VwcG9ydChjb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGlcXG4gICpcXG4gICogUmV0dXJuOiBUcnVlIGlmIFBNRC1zaXplZCBmb2xpb3MgYXJlIHN1cHBvcnRlZCwgb3RoZXJ3aXNlIGZhbHNlLlxcbiAgKi9cXG4tI2lmZGVmIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRVxcbisjaWZkZWYgQ09ORklHX0xBUkdFX0ZPTElPXFxuIHN0YXRpYyBpbmxpbmUgYm9vbCBtYXBwaW5nX3BtZF9mb2xpb19zdXBwb3J0KGNvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nKVxcbiB7XFxuIFxcdC8qIEFTX0ZPTElPX09SREVSIGlzIG9ubHkgcmVhc29uYWJsZSBmb3IgcGFnZWNhY2hlIGZvbGlvcyAqL1xcbmRpZmYgLS1naXQgYS9tbS9LY29uZmlnIGIvbW0vS2NvbmZpZ1xcbmluZGV4IDllMGNhNDgyNDkwNTRmLi5lNjY2ZGQxNGNhMGMzZCAxMDA2NDRcXG4tLS0gYS9tbS9LY29uZmlnXFxuKysrIGIvbW0vS2NvbmZpZ1xcbkBAIC04NDMsMTEgKzg0MywxNSBAQCBjb25maWcgUEVSU0lTVEVOVF9IVUdFX1pFUk9fRk9MSU9cXG4gY29uZmlnIE1NX0lEXFxuIFxcdGRlZl9ib29sIG5cXG4gXFxuK2NvbmZpZyBMQVJHRV9GT0xJT1xcbitcXHRkZWZfYm9vbCBuXFxuK1xcdHNlbGVjdCBYQVJSQVlfTVVMVElcXG4rXFxuIG1lbnVjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VcXG4gXFx0Ym9vbCBcXFwiVHJhbnNwYXJlbnQgSHVnZXBhZ2UgU3VwcG9ydFxcXCJcXG4gXFx0ZGVwZW5kcyBvbiBIQVZFX0FSQ0hfVFJBTlNQQVJFTlRfSFVHRVBBR0UgXFx1MDAyNlxcdTAwMjYgIVBSRUVNUFRfUlRcXG4gXFx0c2VsZWN0IENPTVBBQ1RJT05cXG4tXFx0c2VsZWN0IFhBUlJBWV9NVUxUSVxcbitcXHRzZWxlY3QgTEFSR0VfRk9MSU9cXG4gXFx0c2VsZWN0IE1NX0lEXFxuIFxcdGhlbHBcXG4gXFx0ICBUcmFuc3BhcmVudCBIdWdlcGFnZXMgYWxsb3dzIHRoZSBrZXJuZWwgdG8gdXNlIGh1Z2UgcGFnZXMgYW5kXFxuZGlmZiAtLWdpdCBhL21tL2ZpbGVtYXAuYyBiL21tL2ZpbGVtYXAuY1xcbmluZGV4IDU4ZWI5ZDI0MDY0MzQ4Li41YThjYzIwZTYyNGU0ZCAxMDA2NDRcXG4tLS0gYS9tbS9maWxlbWFwLmNcXG4rKysgYi9tbS9maWxlbWFwLmNcXG5AQCAtMjQ4Myw2ICsyNDgzLDggQEAgc3RhdGljIHZvaWQgZmlsZW1hcF9nZXRfcmVhZF9iYXRjaChzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcXG4gXFxuIFxcdFxcdGlmICghZm9saW9fYmF0Y2hfYWRkKGZiYXRjaCwgZm9saW8pKVxcbiBcXHRcXHRcXHRicmVhaztcXG4rXFx0XFx0aWYgKGZvbGlvX2hhc19od3BvaXNvbmVkX3BhZ2UoZm9saW8pKVxcbitcXHRcXHRcXHRicmVhaztcXG4gXFx0XFx0aWYgKCFmb2xpb190ZXN0X3VwdG9kYXRlKGZvbGlvKSlcXG4gXFx0XFx0XFx0YnJlYWs7XFxuIFxcdFxcdGlmIChmb2xpb190ZXN0X3JlYWRhaGVhZChmb2xpbykpXFxuQEAgLTI2OTUsNiArMjY5Nyw4IEBAIHN0YXRpYyBpbnQgZmlsZW1hcF9nZXRfcGFnZXMoc3RydWN0IGtpb2NiICppb2NiLCBzaXplX3QgY291bnQsXFxuIFxcdGlmICghZm9saW9fYmF0Y2hfY291bnQoZmJhdGNoKSkge1xcbiBcXHRcXHRERUZJTkVfUkVBREFIRUFEKHJhY3RsLCBmaWxwLCBcXHUwMDI2ZmlscC1cXHUwMDNlZl9yYSwgbWFwcGluZywgaW5kZXgpO1xcbiBcXG4rXFx0XFx0aWYgKG1hcHBpbmdfaXNfYXV0aG9yaXRhdGl2ZShtYXBwaW5nKSlcXG4rXFx0XFx0XFx0cmV0dXJuIDA7XFxuIFxcdFxcdGlmIChpb2NiLVxcdTAwM2VraV9mbGFncyBcXHUwMDI2IElPQ0JfTk9JTylcXG4gXFx0XFx0XFx0cmV0dXJuIC1FQUdBSU47XFxuIFxcdFxcdGlmIChpb2NiLVxcdTAwM2VraV9mbGFncyBcXHUwMDI2IElPQ0JfTk9XQUlUKVxcbkBAIC0yNzQ5LDYgKzI3NTMsMjkgQEAgc3RhdGljIGlubGluZSBib29sIHBvc19zYW1lX2ZvbGlvKGxvZmZfdCBwb3MxLCBsb2ZmX3QgcG9zMiwgc3RydWN0IGZvbGlvICpmb2xpbylcXG4gXFx0cmV0dXJuIChwb3MxIFxcdTAwM2VcXHUwMDNlIHNoaWZ0ID09IHBvczIgXFx1MDAzZVxcdTAwM2Ugc2hpZnQpO1xcbiB9XFxuIFxcbitzdGF0aWMgc2l6ZV90IGFkanVzdF9yYW5nZV9od3BvaXNvbihjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzaXplX3Qgb2Zmc2V0LFxcbitcXHRcXHRzaXplX3QgYnl0ZXMpXFxuK3tcXG4rXFx0Y29uc3Qgc3RydWN0IHBhZ2UgKnBhZ2UgPSBmb2xpb19wYWdlKGZvbGlvLCBvZmZzZXQgLyBQQUdFX1NJWkUpO1xcbitcXHRzaXplX3Qgc2FmZV9ieXRlcztcXG4rXFxuK1xcdGlmICghZm9saW9faGFzX2h3cG9pc29uZWRfcGFnZShmb2xpbykpXFxuK1xcdFxcdHJldHVybiBieXRlcztcXG4rXFx0aWYgKGlzX3JlZl9wYWdlX2h3cG9pc29uKGZvbGlvLCBwYWdlKSlcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcbitcXHQvKiBTYWZlIHRvIHJlYWQgdGhlIHJlbWFpbmluZyBieXRlcyBpbiB0aGlzIHBhZ2UuICovXFxuK1xcdHNhZmVfYnl0ZXMgPSBQQUdFX1NJWkUgLSAob2Zmc2V0ICUgUEFHRV9TSVpFKTtcXG4rXFx0cGFnZSsrO1xcbitcXG4rXFx0LyogQ2hlY2sgZWFjaCByZW1haW5pbmcgcGFnZSBhcyBsb25nIGFzIHdlIGFyZSBub3QgZG9uZSB5ZXQuICovXFxuK1xcdGZvciAoOyBzYWZlX2J5dGVzIFxcdTAwM2MgYnl0ZXM7IHNhZmVfYnl0ZXMgKz0gUEFHRV9TSVpFLCBwYWdlKyspXFxuK1xcdFxcdGlmIChpc19yZWZfcGFnZV9od3BvaXNvbihmb2xpbywgcGFnZSkpXFxuK1xcdFxcdFxcdGJyZWFrO1xcbitcXG4rXFx0cmV0dXJuIG1pbihzYWZlX2J5dGVzLCBieXRlcyk7XFxuK31cXG4rXFxuIHN0YXRpYyB2b2lkIGZpbGVtYXBfZW5kX2Ryb3BiZWhpbmRfcmVhZChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbiB7XFxuIFxcdGlmICghZm9saW9fdGVzdF9kcm9wYmVoaW5kKGZvbGlvKSlcXG5AQCAtMjgyOCw2ICsyODU1LDIyIEBAIHNzaXplX3QgZmlsZW1hcF9yZWFkKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICppdGVyLFxcbiBcXHRcXHRcXHRnb3RvIHB1dF9mb2xpb3M7XFxuIFxcdFxcdGVuZF9vZmZzZXQgPSBtaW5fdChsb2ZmX3QsIGlzaXplLCBpb2NiLVxcdTAwM2VraV9wb3MgKyBpdGVyLVxcdTAwM2Vjb3VudCk7XFxuIFxcbitcXHRcXHRpZiAoIWZvbGlvX2JhdGNoX2NvdW50KFxcdTAwMjZmYmF0Y2gpKSB7XFxuK1xcdFxcdFxcdHNpemVfdCBmc2l6ZSA9IG1hcHBpbmdfbWluX2ZvbGlvX25yYnl0ZXMobWFwcGluZyk7XFxuK1xcdFxcdFxcdHNpemVfdCBvZmZzZXQgPSBpb2NiLVxcdTAwM2VraV9wb3MgXFx1MDAyNiAoZnNpemUgLSAxKTtcXG4rXFx0XFx0XFx0c2l6ZV90IGJ5dGVzID0gbWluX3QobG9mZl90LCBlbmRfb2Zmc2V0IC0gaW9jYi1cXHUwMDNla2lfcG9zLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgIGZzaXplIC0gb2Zmc2V0KTtcXG4rXFx0XFx0XFx0c2l6ZV90IGNvcGllZCA9IGlvdl9pdGVyX3plcm8oYnl0ZXMsIGl0ZXIpO1xcbitcXG4rXFx0XFx0XFx0YWxyZWFkeV9yZWFkICs9IGNvcGllZDtcXG4rXFx0XFx0XFx0aW9jYi1cXHUwMDNla2lfcG9zICs9IGNvcGllZDtcXG4rXFx0XFx0XFx0bGFzdF9wb3MgPSBpb2NiLVxcdTAwM2VraV9wb3M7XFxuK1xcbitcXHRcXHRcXHRpZiAoY29waWVkIFxcdTAwM2MgYnl0ZXMpXFxuK1xcdFxcdFxcdFxcdGVycm9yID0gLUVGQVVMVDtcXG4rXFx0XFx0XFx0Y29udGludWU7XFxuK1xcdFxcdH1cXG4rXFxuIFxcdFxcdC8qXFxuIFxcdFxcdCAqIE9uY2Ugd2Ugc3RhcnQgY29weWluZyBkYXRhLCB3ZSBkb24ndCB3YW50IHRvIGJlIHRvdWNoaW5nIGFueVxcbiBcXHRcXHQgKiBjYWNoZWxpbmVzIHRoYXQgbWlnaHQgYmUgY29udGVuZGVkOlxcbkBAIC0yODYyLDE0ICsyOTA1LDE4IEBAIHNzaXplX3QgZmlsZW1hcF9yZWFkKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICppdGVyLFxcbiBcXHRcXHRcXHRpZiAod3JpdGFibHlfbWFwcGVkKVxcbiBcXHRcXHRcXHRcXHRmbHVzaF9kY2FjaGVfZm9saW8oZm9saW8pO1xcbiBcXG4tXFx0XFx0XFx0Y29waWVkID0gY29weV9mb2xpb190b19pdGVyKGZvbGlvLCBvZmZzZXQsIGJ5dGVzLCBpdGVyKTtcXG4rXFx0XFx0XFx0Y29waWVkID0gYWRqdXN0X3JhbmdlX2h3cG9pc29uKGZvbGlvLCBvZmZzZXQsIGJ5dGVzKTtcXG4rXFx0XFx0XFx0aWYgKGNvcGllZCBcXHUwMDNjIGJ5dGVzKVxcbitcXHRcXHRcXHRcXHRlcnJvciA9IC1FSU87XFxuK1xcdFxcdFxcdGNvcGllZCA9IGNvcHlfZm9saW9fdG9faXRlcihmb2xpbywgb2Zmc2V0LCBjb3BpZWQsIGl0ZXIpO1xcbiBcXG4gXFx0XFx0XFx0YWxyZWFkeV9yZWFkICs9IGNvcGllZDtcXG4gXFx0XFx0XFx0aW9jYi1cXHUwMDNla2lfcG9zICs9IGNvcGllZDtcXG4gXFx0XFx0XFx0bGFzdF9wb3MgPSBpb2NiLVxcdTAwM2VraV9wb3M7XFxuIFxcbiBcXHRcXHRcXHRpZiAoY29waWVkIFxcdTAwM2MgYnl0ZXMpIHtcXG4tXFx0XFx0XFx0XFx0ZXJyb3IgPSAtRUZBVUxUO1xcbitcXHRcXHRcXHRcXHRpZiAoIWVycm9yKVxcbitcXHRcXHRcXHRcXHRcXHRlcnJvciA9IC1FRkFVTFQ7XFxuIFxcdFxcdFxcdFxcdGJyZWFrO1xcbiBcXHRcXHRcXHR9XFxuIFxcdFxcdH1cXG5kaWZmIC0tZ2l0IGEvbW0vaHVnZV9tZW1vcnkuYyBiL21tL2h1Z2VfbWVtb3J5LmNcXG5pbmRleCAyYmNjYjBhNTNhMGE2MC4uMzUzMzQwMzA5MTA3NGMgMTAwNjQ0XFxuLS0tIGEvbW0vaHVnZV9tZW1vcnkuY1xcbisrKyBiL21tL2h1Z2VfbWVtb3J5LmNcXG5AQCAtNDQxMyw3ICs0NDEzLDcgQEAgc3RhdGljIGJvb2wgdGhwX3VuZGVydXNlZChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbiBcXHRpZiAoa2h1Z2VwYWdlZF9tYXhfcHRlc19ub25lID09IEhQQUdFX1BNRF9OUiAtIDEpXFxuIFxcdFxcdHJldHVybiBmYWxzZTtcXG4gXFxuLVxcdGlmIChmb2xpb19jb250YWluX2h3cG9pc29uZWRfcGFnZShmb2xpbykpXFxuK1xcdGlmIChmb2xpb19oYXNfaHdwb2lzb25lZF9wYWdlKGZvbGlvKSlcXG4gXFx0XFx0cmV0dXJuIGZhbHNlO1xcbiBcXG4gXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIGZvbGlvX25yX3BhZ2VzKGZvbGlvKTsgaSsrKSB7XFxuZGlmZiAtLWdpdCBhL21tL2h1Z2V0bGIuYyBiL21tL2h1Z2V0bGIuY1xcbmluZGV4IDU3MTIxMmI4MDgzNWVjLi5hYWFjNmUyYWY0YzI0YSAxMDA2NDRcXG4tLS0gYS9tbS9odWdldGxiLmNcXG4rKysgYi9tbS9odWdldGxiLmNcXG5AQCAtMTI1NSw3ICsxMjU1LDcgQEAgc3RhdGljIHN0cnVjdCBmb2xpbyAqZGVxdWV1ZV9odWdldGxiX2ZvbGlvX25vZGVfZXhhY3Qoc3RydWN0IGhzdGF0ZSAqaCxcXG4gXFx0XFx0aWYgKHBpbiBcXHUwMDI2XFx1MDAyNiAhZm9saW9faXNfbG9uZ3Rlcm1fcGlubmFibGUoZm9saW8pKVxcbiBcXHRcXHRcXHRjb250aW51ZTtcXG4gXFxuLVxcdFxcdGlmIChmb2xpb190ZXN0X2h3cG9pc29uKGZvbGlvKSlcXG4rXFx0XFx0aWYgKGZvbGlvX3Rlc3RfaGFzX2h3cG9pc29uZWQoZm9saW8pKVxcbiBcXHRcXHRcXHRjb250aW51ZTtcXG4gXFxuIFxcdFxcdGlmIChpc19taWdyYXRlX2lzb2xhdGVfcGFnZShcXHUwMDI2Zm9saW8tXFx1MDAzZXBhZ2UpKVxcbkBAIC0xNDk4LDEwICsxNDk4LDEwIEBAIHN0YXRpYyB2b2lkIF9fdXBkYXRlX2FuZF9mcmVlX2h1Z2V0bGJfZm9saW8oc3RydWN0IGhzdGF0ZSAqaCxcXG4gXFx0fVxcbiBcXG4gXFx0LypcXG4tXFx0ICogTW92ZSBQYWdlSFdQb2lzb24gZmxhZyBmcm9tIGhlYWQgcGFnZSB0byB0aGUgcmF3IGVycm9yIHBhZ2VzLFxcbi1cXHQgKiB3aGljaCBtYWtlcyBhbnkgaGVhbHRoeSBzdWJwYWdlcyByZXVzYWJsZS5cXG4rXFx0ICogTW92ZSBIV1BvaXNvbiBmbGFnIHRvIGVhY2ggZXJyb3IgcGFnZVxcbitcXHQgKiB3aGljaCBtYWtlcyBhbnkgaGVhbHRoeSBwYWdlcyByZXVzYWJsZS5cXG4gXFx0ICovXFxuLVxcdGlmICh1bmxpa2VseShmb2xpb190ZXN0X2h3cG9pc29uKGZvbGlvKSkpXFxuK1xcdGlmICh1bmxpa2VseShmb2xpb190ZXN0X2hhc19od3BvaXNvbmVkKGZvbGlvKSkpXFxuIFxcdFxcdGZvbGlvX2NsZWFyX2h1Z2V0bGJfaHdwb2lzb24oZm9saW8pO1xcbiBcXG4gXFx0Vk1fQlVHX09OX0ZPTElPKGZvbGlvX3JlZl9jb3VudChmb2xpbyksIGZvbGlvKTtcXG5AQCAtMTc3NSw3ICsxNzc1LDcgQEAgdm9pZCBpbml0X25ld19odWdldGxiX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuICAqIHN0YWJsZS4gIER1ZSB0byBsb2NraW5nIG9yZGVyLCB3ZSBjYW4gb25seSB0cnlsb2NrX3dyaXRlLiAgSWYgd2UgY2FuXFxuICAqIG5vdCBnZXQgdGhlIGxvY2ssIHNpbXBseSByZXR1cm4gTlVMTCB0byBjYWxsZXIuXFxuICAqL1xcbi1zdHJ1Y3QgYWRkcmVzc19zcGFjZSAqaHVnZXRsYl9mb2xpb19tYXBwaW5nX2xvY2tfd3JpdGUoc3RydWN0IGZvbGlvICpmb2xpbylcXG4rc3RydWN0IGFkZHJlc3Nfc3BhY2UgKmh1Z2V0bGJfZm9saW9fbWFwcGluZ19sb2NrX3dyaXRlKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuIHtcXG4gXFx0c3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcgPSBmb2xpb19tYXBwaW5nKGZvbGlvKTtcXG4gXFxuQEAgLTM5OTgsNyArMzk5OCw3IEBAIGxvbmcgZGVtb3RlX3Bvb2xfaHVnZV9wYWdlKHN0cnVjdCBoc3RhdGUgKnNyYywgbm9kZW1hc2tfdCAqbm9kZXNfYWxsb3dlZCxcXG4gXFx0XFx0c3RydWN0IGZvbGlvICpmb2xpbywgKm5leHQ7XFxuIFxcbiBcXHRcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoZm9saW8sIG5leHQsIFxcdTAwMjZzcmMtXFx1MDAzZWh1Z2VwYWdlX2ZyZWVsaXN0c1tub2RlXSwgbHJ1KSB7XFxuLVxcdFxcdFxcdGlmIChmb2xpb190ZXN0X2h3cG9pc29uKGZvbGlvKSlcXG4rXFx0XFx0XFx0aWYgKGZvbGlvX3Rlc3RfaGFzX2h3cG9pc29uZWQoZm9saW8pKVxcbiBcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4gXFxuIFxcdFxcdFxcdHJlbW92ZV9odWdldGxiX2ZvbGlvKHNyYywgZm9saW8sIGZhbHNlKTtcXG5AQCAtNTgwOSw3ICs1ODA5LDcgQEAgc3RhdGljIHZtX2ZhdWx0X3QgaHVnZXRsYl9ub19wYWdlKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxcbiBcXHRcXHQgKiBkb24ndCBoYXZlIGh3cG9pc29uZWQgc3dhcCBlbnRyeSBmb3IgZXJyb3JlZCB2aXJ0dWFsIGFkZHJlc3MuXFxuIFxcdFxcdCAqIFNvIHdlIG5lZWQgdG8gYmxvY2sgaHVnZXBhZ2UgZmF1bHQgYnkgUEdfaHdwb2lzb24gYml0IGNoZWNrLlxcbiBcXHRcXHQgKi9cXG4tXFx0XFx0aWYgKHVubGlrZWx5KGZvbGlvX3Rlc3RfaHdwb2lzb24oZm9saW8pKSkge1xcbitcXHRcXHRpZiAodW5saWtlbHkoZm9saW9fdGVzdF9oYXNfaHdwb2lzb25lZChmb2xpbykpKSB7XFxuIFxcdFxcdFxcdHJldCA9IFZNX0ZBVUxUX0hXUE9JU09OX0xBUkdFIHxcXG4gXFx0XFx0XFx0XFx0Vk1fRkFVTFRfU0VUX0hJTkRFWChoc3RhdGVfaW5kZXgoaCkpO1xcbiBcXHRcXHRcXHRnb3RvIGJhY2tvdXRfdW5sb2NrZWQ7XFxuQEAgLTYzMTgsNyArNjMxOCw3IEBAIGludCBodWdldGxiX21maWxsX2F0b21pY19wdGUocHRlX3QgKmRzdF9wdGUsXFxuIFxcdHB0bCA9IGh1Z2VfcHRlX2xvY2soaCwgZHN0X21tLCBkc3RfcHRlKTtcXG4gXFxuIFxcdHJldCA9IC1FSU87XFxuLVxcdGlmIChmb2xpb190ZXN0X2h3cG9pc29uKGZvbGlvKSlcXG4rXFx0aWYgKGZvbGlvX3Rlc3RfaGFzX2h3cG9pc29uZWQoZm9saW8pKVxcbiBcXHRcXHRnb3RvIG91dF9yZWxlYXNlX3VubG9jaztcXG4gXFxuIFxcdHJldCA9IC1FRVhJU1Q7XFxuZGlmZiAtLWdpdCBhL21tL21lbW9yeS1mYWlsdXJlLmMgYi9tbS9tZW1vcnktZmFpbHVyZS5jXFxuaW5kZXggNTE1MDhhNTVjNDA1NWUuLjMyZjkxOTM1YjIxMDcwIDEwMDY0NFxcbi0tLSBhL21tL21lbW9yeS1mYWlsdXJlLmNcXG4rKysgYi9tbS9tZW1vcnktZmFpbHVyZS5jXFxuQEAgLTE4MDgsNjMgKzE4MDgsODYgQEAgRVhQT1JUX1NZTUJPTF9HUEwobWZfZGF4X2tpbGxfcHJvY3MpO1xcbiBcXG4gI2lmZGVmIENPTkZJR19IVUdFVExCX1BBR0VcXG4gXFxuKy8qIFByb3RlY3RzIGFsbCBsaXN0cyBvZiBod3BfcGFnZXMgKi9cXG4rc3RhdGljIERFRklORV9TUElOTE9DSyhod3BfcGFnZV9sb2NrKTtcXG4rXFxuIC8qXFxuLSAqIFN0cnVjdCByYXdfaHdwX3BhZ2UgcmVwcmVzZW50cyBpbmZvcm1hdGlvbiBhYm91dCBcXFwicmF3IGVycm9yIHBhZ2VcXFwiLFxcbi0gKiBjb25zdHJ1Y3Rpbmcgc2luZ2x5IGxpbmtlZCBsaXN0IGZyb20gLVxcdTAwM2VfaHVnZXRsYl9od3BvaXNvbiBmaWVsZCBvZiBmb2xpby5cXG4rICogaHdwX3BhZ2UgcmVwcmVzZW50cyBpbmZvcm1hdGlvbiBhYm91dCBcXFwiZXJyb3IgcGFnZVxcXCIsXFxuKyAqIGNvbnN0cnVjdGluZyBzaW5nbHkgbGlua2VkIGxpc3QgZnJvbSBmb2xpby1cXHUwMDNlaHVnZXRsYl9od3BvaXNvbiBmaWVsZC5cXG4gICovXFxuLXN0cnVjdCByYXdfaHdwX3BhZ2Uge1xcbi1cXHRzdHJ1Y3QgbGxpc3Rfbm9kZSBub2RlO1xcbitzdHJ1Y3QgaHdwX3BhZ2Uge1xcbitcXHRzdHJ1Y3QgaHdwX3BhZ2UgKm5leHQ7XFxuIFxcdHN0cnVjdCBwYWdlICpwYWdlO1xcbiB9O1xcbiBcXG4tc3RhdGljIGlubGluZSBzdHJ1Y3QgbGxpc3RfaGVhZCAqcmF3X2h3cF9saXN0X2hlYWQoc3RydWN0IGZvbGlvICpmb2xpbylcXG4rc3RhdGljIGJvb2wgcHJlY2lzZV9wYWdlX3BvaXNvbmVkKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8sXFxuK1xcdFxcdGNvbnN0IHN0cnVjdCBwYWdlICpwYWdlKVxcbiB7XFxuLVxcdHJldHVybiAoc3RydWN0IGxsaXN0X2hlYWQgKilcXHUwMDI2Zm9saW8tXFx1MDAzZV9odWdldGxiX2h3cG9pc29uO1xcbi19XFxuLVxcbi1ib29sIGlzX3Jhd19od3BvaXNvbl9wYWdlX2luX2h1Z2VwYWdlKHN0cnVjdCBwYWdlICpwYWdlKVxcbi17XFxuLVxcdHN0cnVjdCBsbGlzdF9oZWFkICpyYXdfaHdwX2hlYWQ7XFxuLVxcdHN0cnVjdCByYXdfaHdwX3BhZ2UgKnA7XFxuLVxcdHN0cnVjdCBmb2xpbyAqZm9saW8gPSBwYWdlX2ZvbGlvKHBhZ2UpO1xcbi1cXHRib29sIHJldCA9IGZhbHNlO1xcbi1cXG4tXFx0aWYgKCFmb2xpb190ZXN0X2h3cG9pc29uKGZvbGlvKSlcXG4tXFx0XFx0cmV0dXJuIGZhbHNlO1xcbi1cXG4tXFx0aWYgKCFmb2xpb190ZXN0X2h1Z2V0bGIoZm9saW8pKVxcbi1cXHRcXHRyZXR1cm4gUGFnZUhXUG9pc29uKHBhZ2UpO1xcbitcXHRjb25zdCBzdHJ1Y3QgaHdwX3BhZ2UgKnA7XFxuK1xcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XFxuIFxcbiBcXHQvKlxcbi1cXHQgKiBXaGVuIFJhd0h3cFVucmVsaWFibGUgaXMgc2V0LCBrZXJuZWwgbG9zdCB0cmFjayBvZiB3aGljaCBzdWJwYWdlc1xcbi1cXHQgKiBhcmUgSFdQT0lTT04uIFNvIHJldHVybiBhcyBpZiBBTEwgc3VicGFnZXMgYXJlIEhXUE9JU09OZWQuXFxuK1xcdCAqIFdoZW4gUmF3SHdwVW5yZWxpYWJsZSBpcyBzZXQsIGtlcm5lbCBsb3N0IHRyYWNrIG9mIHdoaWNoIHBhZ2VzXFxuK1xcdCAqIGFyZSBIV1BPSVNPTi4gU28gcmV0dXJuIGFzIGlmIEFMTCBwYWdlcyBhcmUgSFdQT0lTT05lZC5cXG4gXFx0ICovXFxuIFxcdGlmIChmb2xpb190ZXN0X2h1Z2V0bGJfcmF3X2h3cF91bnJlbGlhYmxlKGZvbGlvKSlcXG4gXFx0XFx0cmV0dXJuIHRydWU7XFxuIFxcbi1cXHRtdXRleF9sb2NrKFxcdTAwMjZtZl9tdXRleCk7XFxuLVxcbi1cXHRyYXdfaHdwX2hlYWQgPSByYXdfaHdwX2xpc3RfaGVhZChmb2xpbyk7XFxuLVxcdGxsaXN0X2Zvcl9lYWNoX2VudHJ5KHAsIHJhd19od3BfaGVhZC1cXHUwMDNlZmlyc3QsIG5vZGUpIHtcXG4tXFx0XFx0aWYgKHBhZ2UgPT0gcC1cXHUwMDNlcGFnZSkge1xcbi1cXHRcXHRcXHRyZXQgPSB0cnVlO1xcbitcXHRzcGluX2xvY2tfaXJxc2F2ZShcXHUwMDI2aHdwX3BhZ2VfbG9jaywgZmxhZ3MpO1xcbitcXHRmb3IgKHAgPSBmb2xpby1cXHUwMDNlaHVnZXRsYl9od3BvaXNvbjsgcDsgcCA9IHAtXFx1MDAzZW5leHQpIHtcXG4rXFx0XFx0aWYgKHBhZ2UgPT0gcC1cXHUwMDNlcGFnZSlcXG4gXFx0XFx0XFx0YnJlYWs7XFxuLVxcdFxcdH1cXG4gXFx0fVxcbitcXHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFxcdTAwMjZod3BfcGFnZV9sb2NrLCBmbGFncyk7XFxuIFxcbi1cXHRtdXRleF91bmxvY2soXFx1MDAyNm1mX211dGV4KTtcXG4rXFx0cmV0dXJuIHAgIT0gTlVMTDtcXG4rfVxcbiBcXG4rLypcXG4rICogQ2hlY2sgaWYgYSBnaXZlbiBAcGFnZSBpbiBhIGh1Z2V0bGIgZm9saW8gaXMgSFdQT0lTT04uXFxuKyAqL1xcbitib29sIGh1Z2V0bGJfcGFnZV9od3BvaXNvbihjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvLCBjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSlcXG4re1xcbitcXHRpZiAoIWZvbGlvX3Rlc3RfaGFzX2h3cG9pc29uZWQoZm9saW8pKVxcbitcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcbitcXHRyZXR1cm4gcHJlY2lzZV9wYWdlX3BvaXNvbmVkKGZvbGlvLCBwYWdlKTtcXG4rfVxcbitcXG4rLypcXG4rICogV2UgaGF2ZSBubyByZWZlcmVuY2Ugb24gdGhlIGZvbGlvIGNvbnRhaW5pbmcgdGhpcyBwYWdlLlxcbisgKiBUaGUgaHVnZXRsYl9sb2NrIGtlZXBzIGh1Z2V0bGIgZm9saW9zIGZyb20gYmVpbmcgZnJlZWQuXFxuKyAqL1xcbitib29sIGh1Z2V0bGJfdW5yZWZfcGFnZV9od3BvaXNvbihjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSlcXG4re1xcbitcXHRjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvO1xcbitcXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xcbitcXHRib29sIHJldDtcXG4rXFxuK1xcdHNwaW5fbG9ja19pcnFzYXZlKFxcdTAwMjZodWdldGxiX2xvY2ssIGZsYWdzKTtcXG4rXFx0Zm9saW8gPSBwYWdlX2ZvbGlvKHBhZ2UpO1xcbitcXHRpZiAoIWZvbGlvX3Rlc3RfaHVnZV9wb2lzb24oZm9saW8pKSB7XFxuK1xcdFxcdHJldCA9IFBhZ2VIV1BvaXNvbihwYWdlKTtcXG4rXFx0XFx0Z290byB1bmxvY2s7XFxuK1xcdH1cXG4rXFxuK1xcdHJldCA9IHByZWNpc2VfcGFnZV9wb2lzb25lZChmb2xpbywgcGFnZSk7XFxuK3VubG9jazpcXG4rXFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcXHUwMDI2aHVnZXRsYl9sb2NrLCBmbGFncyk7XFxuIFxcdHJldHVybiByZXQ7XFxuIH1cXG4gXFxuIHN0YXRpYyB1bnNpZ25lZCBsb25nIF9fZm9saW9fZnJlZV9yYXdfaHdwKHN0cnVjdCBmb2xpbyAqZm9saW8sIGJvb2wgbW92ZV9mbGFnKVxcbiB7XFxuLVxcdHN0cnVjdCBsbGlzdF9ub2RlICpoZWFkO1xcbi1cXHRzdHJ1Y3QgcmF3X2h3cF9wYWdlICpwLCAqbmV4dDtcXG4rXFx0c3RydWN0IGh3cF9wYWdlICpwLCAqbmV4dDtcXG4gXFx0dW5zaWduZWQgbG9uZyBjb3VudCA9IDA7XFxuIFxcbi1cXHRoZWFkID0gbGxpc3RfZGVsX2FsbChyYXdfaHdwX2xpc3RfaGVhZChmb2xpbykpO1xcbi1cXHRsbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHAsIG5leHQsIGhlYWQsIG5vZGUpIHtcXG4rXFx0bmV4dCA9IGZvbGlvLVxcdTAwM2VodWdldGxiX2h3cG9pc29uO1xcbitcXHRmb2xpby1cXHUwMDNlaHVnZXRsYl9od3BvaXNvbiA9IE5VTEw7XFxuK1xcbitcXHR3aGlsZSAobmV4dCkge1xcbitcXHRcXHRwID0gbmV4dDtcXG4rXFx0XFx0bmV4dCA9IHAtXFx1MDAzZW5leHQ7XFxuIFxcdFxcdGlmIChtb3ZlX2ZsYWcpXFxuIFxcdFxcdFxcdFNldFBhZ2VIV1BvaXNvbihwLVxcdTAwM2VwYWdlKTtcXG4gXFx0XFx0ZWxzZVxcbkBAIC0xODgxLDM0ICsxOTA0LDU4IEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIF9fZm9saW9fZnJlZV9yYXdfaHdwKHN0cnVjdCBmb2xpbyAqZm9saW8sIGJvb2wgbW92ZV9mbGFnKVxcbiAjZGVmaW5lXFx0TUZfSFVHRVRMQl9GT0xJT19QUkVfUE9JU09ORURcXHQzXFx0LyogZm9saW8gYWxyZWFkeSBwb2lzb25lZCAqL1xcbiAjZGVmaW5lXFx0TUZfSFVHRVRMQl9QQUdFX1BSRV9QT0lTT05FRFxcdDRcXHQvKiBleGFjdCBwYWdlIGFscmVhZHkgcG9pc29uZWQgKi9cXG4gI2RlZmluZVxcdE1GX0hVR0VUTEJfUkVUUllcXHRcXHQ1XFx0LyogaHVnZXBhZ2UgaXMgYnVzeSwgcmV0cnkgKi9cXG4rXFxuK3N0YXRpYyBpbmxpbmUgaW50IGh1Z2V0bGJfc2V0X3BvaXNvbihzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbit7XFxuK1xcdGlmIChmb2xpb190ZXN0X3NldF9oYXNfaHdwb2lzb25lZChmb2xpbykpXFxuK1xcdFxcdHJldHVybiBNRl9IVUdFVExCX0ZPTElPX1BSRV9QT0lTT05FRDtcXG4rXFx0Zm9saW9fc2V0X2h1Z2VfcG9pc29uKGZvbGlvKTtcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3N0YXRpYyBpbmxpbmUgaW50IGh1Z2V0bGJfY2xlYXJfcG9pc29uKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuK3tcXG4rXFx0aWYgKCFmb2xpb190ZXN0X2hhc19od3BvaXNvbmVkKGZvbGlvKSlcXG4rXFx0XFx0cmV0dXJuIC1FQlVTWTtcXG4rXFx0Zm9saW9fY2xlYXJfaHVnZV9wb2lzb24oZm9saW8pO1xcbitcXHRmb2xpb19jbGVhcl9oYXNfaHdwb2lzb25lZChmb2xpbyk7XFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbiAvKlxcbiAgKiBTZXQgaHVnZXRsYiBmb2xpbyBhcyBod3BvaXNvbmVkLCB1cGRhdGUgZm9saW8gcHJpdmF0ZSByYXcgaHdwb2lzb24gbGlzdFxcbiAgKiB0byBrZWVwIHRyYWNrIG9mIHRoZSBwb2lzb25lZCBwYWdlcy5cXG4gICovXFxuIHN0YXRpYyBpbnQgaHVnZXRsYl91cGRhdGVfaHdwb2lzb24oc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHBhZ2UgKnBhZ2UpXFxuIHtcXG4tXFx0c3RydWN0IGxsaXN0X2hlYWQgKmhlYWQ7XFxuLVxcdHN0cnVjdCByYXdfaHdwX3BhZ2UgKnJhd19od3A7XFxuLVxcdHN0cnVjdCByYXdfaHdwX3BhZ2UgKnA7XFxuLVxcdGludCByZXQgPSBmb2xpb190ZXN0X3NldF9od3BvaXNvbihmb2xpbykgPyBNRl9IVUdFVExCX0ZPTElPX1BSRV9QT0lTT05FRCA6IDA7XFxuK1xcdHN0cnVjdCBod3BfcGFnZSAqcDtcXG4rXFx0dW5zaWduZWQgbG9uZyBmbGFncztcXG4rXFx0aW50IHJldCA9IGh1Z2V0bGJfc2V0X3BvaXNvbihmb2xpbyk7XFxuIFxcbiBcXHQvKlxcbiBcXHQgKiBPbmNlIHRoZSBod3BvaXNvbiBodWdlcGFnZSBoYXMgbG9zdCByZWxpYWJsZSByYXcgZXJyb3IgaW5mbyxcXG4tXFx0ICogdGhlcmUgaXMgbGl0dGxlIG1lYW5pbmcgdG8ga2VlcCBhZGRpdGlvbmFsIGVycm9yIGluZm8gcHJlY2lzZWx5LFxcbi1cXHQgKiBzbyBza2lwIHRvIGFkZCBhZGRpdGlvbmFsIHJhdyBlcnJvciBpbmZvLlxcbitcXHQgKiB0aGVyZSBpcyBubyBwb2ludCBpbiBrZWVwaW5nIGFkZGl0aW9uYWwgZXJyb3IgaW5mbyBwcmVjaXNlbHksXFxuK1xcdCAqIHNvIHNraXAgYWRkaW5nIGFkZGl0aW9uYWwgcmF3IGVycm9yIGluZm8uXFxuIFxcdCAqL1xcbiBcXHRpZiAoZm9saW9fdGVzdF9odWdldGxiX3Jhd19od3BfdW5yZWxpYWJsZShmb2xpbykpXFxuIFxcdFxcdHJldHVybiBNRl9IVUdFVExCX0ZPTElPX1BSRV9QT0lTT05FRDtcXG4tXFx0aGVhZCA9IHJhd19od3BfbGlzdF9oZWFkKGZvbGlvKTtcXG4tXFx0bGxpc3RfZm9yX2VhY2hfZW50cnkocCwgaGVhZC1cXHUwMDNlZmlyc3QsIG5vZGUpIHtcXG4rXFxuK1xcdHNwaW5fbG9ja19pcnFzYXZlKFxcdTAwMjZod3BfcGFnZV9sb2NrLCBmbGFncyk7XFxuK1xcdGZvciAocCA9IGZvbGlvLVxcdTAwM2VodWdldGxiX2h3cG9pc29uOyBwOyBwID0gcC1cXHUwMDNlbmV4dCkge1xcbiBcXHRcXHRpZiAocC1cXHUwMDNlcGFnZSA9PSBwYWdlKVxcbi1cXHRcXHRcXHRyZXR1cm4gTUZfSFVHRVRMQl9QQUdFX1BSRV9QT0lTT05FRDtcXG4rXFx0XFx0XFx0YnJlYWs7XFxuK1xcdH1cXG4rXFxuK1xcdGlmIChwKSB7XFxuK1xcdFxcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXFx1MDAyNmh3cF9wYWdlX2xvY2ssIGZsYWdzKTtcXG4rXFx0XFx0cmV0dXJuIE1GX0hVR0VUTEJfUEFHRV9QUkVfUE9JU09ORUQ7XFxuIFxcdH1cXG4gXFxuLVxcdHJhd19od3AgPSBrbWFsbG9jX29iaihzdHJ1Y3QgcmF3X2h3cF9wYWdlLCBHRlBfQVRPTUlDKTtcXG4tXFx0aWYgKHJhd19od3ApIHtcXG4tXFx0XFx0cmF3X2h3cC1cXHUwMDNlcGFnZSA9IHBhZ2U7XFxuLVxcdFxcdGxsaXN0X2FkZChcXHUwMDI2cmF3X2h3cC1cXHUwMDNlbm9kZSwgaGVhZCk7XFxuK1xcdHAgPSBrbWFsbG9jX29iaigqcCwgR0ZQX0FUT01JQyk7XFxuK1xcdGlmIChwKSB7XFxuK1xcdFxcdHAtXFx1MDAzZXBhZ2UgPSBwYWdlO1xcbitcXHRcXHRwLVxcdTAwM2VuZXh0ID0gZm9saW8tXFx1MDAzZWh1Z2V0bGJfaHdwb2lzb247XFxuK1xcdFxcdGZvbGlvLVxcdTAwM2VodWdldGxiX2h3cG9pc29uID0gcDtcXG4gXFx0fSBlbHNlIHtcXG4gXFx0XFx0LypcXG4gXFx0XFx0ICogRmFpbGVkIHRvIHNhdmUgcmF3IGVycm9yIGluZm8uICBXZSBubyBsb25nZXIgdHJhY2UgYWxsXFxuQEAgLTE5MTcsMTYgKzE5NjQsMjAgQEAgc3RhdGljIGludCBodWdldGxiX3VwZGF0ZV9od3BvaXNvbihzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgcGFnZSAqcGFnZSlcXG4gXFx0XFx0ICovXFxuIFxcdFxcdGZvbGlvX3NldF9odWdldGxiX3Jhd19od3BfdW5yZWxpYWJsZShmb2xpbyk7XFxuIFxcdFxcdC8qXFxuLVxcdFxcdCAqIE9uY2UgaHVnZXRsYl9yYXdfaHdwX3VucmVsaWFibGUgaXMgc2V0LCByYXdfaHdwX3BhZ2UgaXMgbm90XFxuK1xcdFxcdCAqIE9uY2UgaHVnZXRsYl9yYXdfaHdwX3VucmVsaWFibGUgaXMgc2V0LCBod3BfcGFnZSBpcyBub3RcXG4gXFx0XFx0ICogdXNlZCBhbnkgbW9yZSwgc28gZnJlZSBpdC5cXG4gXFx0XFx0ICovXFxuIFxcdFxcdF9fZm9saW9fZnJlZV9yYXdfaHdwKGZvbGlvLCBmYWxzZSk7XFxuIFxcdH1cXG4rXFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcXHUwMDI2aHdwX3BhZ2VfbG9jaywgZmxhZ3MpO1xcbiBcXHRyZXR1cm4gcmV0O1xcbiB9XFxuIFxcbiBzdGF0aWMgdW5zaWduZWQgbG9uZyBmb2xpb19mcmVlX3Jhd19od3Aoc3RydWN0IGZvbGlvICpmb2xpbywgYm9vbCBtb3ZlX2ZsYWcpXFxuIHtcXG4rXFx0dW5zaWduZWQgbG9uZyBjb3VudDtcXG4rXFx0dW5zaWduZWQgbG9uZyBmbGFncztcXG4rXFxuIFxcdC8qXFxuIFxcdCAqIGh1Z2V0bGJfdm1lbW1hcF9vcHRpbWl6ZWQgaHVnZXBhZ2VzIGNhbid0IGJlIGZyZWVkIGJlY2F1c2Ugc3RydWN0XFxuIFxcdCAqIHBhZ2VzIGZvciB0YWlsIHBhZ2VzIGFyZSByZXF1aXJlZCBidXQgdGhleSBkb24ndCBleGlzdC5cXG5AQCAtMTk0MSw3ICsxOTkyLDExIEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIGZvbGlvX2ZyZWVfcmF3X2h3cChzdHJ1Y3QgZm9saW8gKmZvbGlvLCBib29sIG1vdmVfZmxhZylcXG4gXFx0aWYgKGZvbGlvX3Rlc3RfaHVnZXRsYl9yYXdfaHdwX3VucmVsaWFibGUoZm9saW8pKVxcbiBcXHRcXHRyZXR1cm4gMDtcXG4gXFxuLVxcdHJldHVybiBfX2ZvbGlvX2ZyZWVfcmF3X2h3cChmb2xpbywgbW92ZV9mbGFnKTtcXG4rXFx0c3Bpbl9sb2NrX2lycXNhdmUoXFx1MDAyNmh3cF9wYWdlX2xvY2ssIGZsYWdzKTtcXG4rXFx0Y291bnQgPSBfX2ZvbGlvX2ZyZWVfcmF3X2h3cChmb2xpbywgbW92ZV9mbGFnKTtcXG4rXFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcXHUwMDI2aHdwX3BhZ2VfbG9jaywgZmxhZ3MpO1xcbitcXG4rXFx0cmV0dXJuIGNvdW50O1xcbiB9XFxuIFxcbiB2b2lkIGZvbGlvX2NsZWFyX2h1Z2V0bGJfaHdwb2lzb24oc3RydWN0IGZvbGlvICpmb2xpbylcXG5AQCAtMTk1MCw4ICsyMDA1LDggQEAgdm9pZCBmb2xpb19jbGVhcl9odWdldGxiX2h3cG9pc29uKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuIFxcdFxcdHJldHVybjtcXG4gXFx0aWYgKGZvbGlvX3Rlc3RfaHVnZXRsYl92bWVtbWFwX29wdGltaXplZChmb2xpbykpXFxuIFxcdFxcdHJldHVybjtcXG4tXFx0Zm9saW9fY2xlYXJfaHdwb2lzb24oZm9saW8pO1xcbiBcXHRmb2xpb19mcmVlX3Jhd19od3AoZm9saW8sIHRydWUpO1xcbitcXHRmb2xpb19jbGVhcl9oYXNfaHdwb2lzb25lZChmb2xpbyk7XFxuIH1cXG4gXFxuIHN0YXRpYyBpbnQgZ2V0X2h1Z2VfcGFnZV9mb3JfaHdwb2lzb24odW5zaWduZWQgbG9uZyBwZm4sIGludCBmbGFncyxcXG5AQCAtMjEwNCw2ICsyMTU5LDExIEBAIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBmb2xpb19mcmVlX3Jhd19od3Aoc3RydWN0IGZvbGlvICpmb2xpbywgYm9vbCBmbGFnKVxcbiB7XFxuIFxcdHJldHVybiAwO1xcbiB9XFxuK1xcbitzdGF0aWMgaW5saW5lIGludCBodWdldGxiX2NsZWFyX3BvaXNvbihzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbit7XFxuK1xcdHJldHVybiAwO1xcbit9XFxuICNlbmRpZlxcdC8qIENPTkZJR19IVUdFVExCX1BBR0UgKi9cXG4gXFxuIC8qIERyb3AgdGhlIGV4dHJhIHJlZmNvdW50IGluIGNhc2Ugd2UgY29tZSBmcm9tIG1hZHZpc2UoKSAqL1xcbkBAIC0yNjk1LDggKzI3NTUsOCBAQCBpbnQgdW5wb2lzb25fbWVtb3J5KHVuc2lnbmVkIGxvbmcgcGZuKVxcbiBcXHRcXHRnb3RvIHVubG9ja19tdXRleDtcXG4gXFx0fVxcbiBcXG4tXFx0aWYgKCFQYWdlSFdQb2lzb24ocCkpIHtcXG4tXFx0XFx0dW5wb2lzb25fcHJfaW5mbyhcXFwiJSNseDogcGFnZSB3YXMgYWxyZWFkeSB1bnBvaXNvbmVkXFxcXG5cXFwiLFxcbitcXHRpZiAoIWlzX3BhZ2VfaHdwb2lzb24ocCkpIHtcXG4rXFx0XFx0dW5wb2lzb25fcHJfaW5mbyhcXFwiJSNseDogcGFnZSBpcyBub3QgcG9pc29uZWRcXFxcblxcXCIsXFxuIFxcdFxcdFxcdFxcdCBwZm4sIFxcdTAwMjZ1bnBvaXNvbl9ycyk7XFxuIFxcdFxcdGdvdG8gdW5sb2NrX211dGV4O1xcbiBcXHR9XFxuQEAgLTI3MzAsOCArMjc5MCw4IEBAIGludCB1bnBvaXNvbl9tZW1vcnkodW5zaWduZWQgbG9uZyBwZm4pXFxuIFxcdFxcdFxcdGNvdW50ID0gZm9saW9fZnJlZV9yYXdfaHdwKGZvbGlvLCBmYWxzZSk7XFxuIFxcdFxcdFxcdGlmIChjb3VudCA9PSAwKVxcbiBcXHRcXHRcXHRcXHRnb3RvIHVubG9ja19tdXRleDtcXG4rXFx0XFx0XFx0cmV0ID0gaHVnZXRsYl9jbGVhcl9wb2lzb24oZm9saW8pO1xcbiBcXHRcXHR9XFxuLVxcdFxcdHJldCA9IGZvbGlvX3Rlc3RfY2xlYXJfaHdwb2lzb24oZm9saW8pID8gMCA6IC1FQlVTWTtcXG4gXFx0fSBlbHNlIGlmIChnaHAgXFx1MDAzYyAwKSB7XFxuIFxcdFxcdGlmIChnaHAgPT0gLUVIV1BPSVNPTikge1xcbiBcXHRcXHRcXHRyZXQgPSBwdXRfcGFnZV9iYWNrX2J1ZGR5KHApID8gMCA6IC1FQlVTWTtcXG5AQCAtMjc0MCwxNiArMjgwMCwxOCBAQCBpbnQgdW5wb2lzb25fbWVtb3J5KHVuc2lnbmVkIGxvbmcgcGZuKVxcbiBcXHRcXHRcXHR1bnBvaXNvbl9wcl9pbmZvKFxcXCIlI2x4OiBmYWlsZWQgdG8gZ3JhYiBwYWdlXFxcXG5cXFwiLFxcbiBcXHRcXHRcXHRcXHRcXHQgcGZuLCBcXHUwMDI2dW5wb2lzb25fcnMpO1xcbiBcXHRcXHR9XFxuLVxcdH0gZWxzZSB7XFxuLVxcdFxcdGlmIChmb2xpb190ZXN0X2h1Z2V0bGIoZm9saW8pKSB7XFxuLVxcdFxcdFxcdGh1Z2UgPSB0cnVlO1xcbi1cXHRcXHRcXHRjb3VudCA9IGZvbGlvX2ZyZWVfcmF3X2h3cChmb2xpbywgZmFsc2UpO1xcbi1cXHRcXHRcXHRpZiAoY291bnQgPT0gMCkge1xcbi1cXHRcXHRcXHRcXHRmb2xpb19wdXQoZm9saW8pO1xcbi1cXHRcXHRcXHRcXHRnb3RvIHVubG9ja19tdXRleDtcXG4tXFx0XFx0XFx0fVxcbitcXHR9IGVsc2UgaWYgKGZvbGlvX3Rlc3RfaHVnZXRsYihmb2xpbykpIHtcXG4rXFx0XFx0aHVnZSA9IHRydWU7XFxuK1xcdFxcdGNvdW50ID0gZm9saW9fZnJlZV9yYXdfaHdwKGZvbGlvLCBmYWxzZSk7XFxuK1xcdFxcdGlmIChjb3VudCA9PSAwKSB7XFxuK1xcdFxcdFxcdGZvbGlvX3B1dChmb2xpbyk7XFxuK1xcdFxcdFxcdGdvdG8gdW5sb2NrX211dGV4O1xcbiBcXHRcXHR9XFxuLVxcbitcXHRcXHRmb2xpb19wdXQoZm9saW8pO1xcbitcXHRcXHRyZXQgPSBodWdldGxiX2NsZWFyX3BvaXNvbihmb2xpbyk7XFxuK1xcdFxcdGlmICghcmV0KVxcbitcXHRcXHRcXHRmb2xpb19wdXQoZm9saW8pO1xcbitcXHR9IGVsc2Uge1xcbiBcXHRcXHRmb2xpb19wdXQoZm9saW8pO1xcbiBcXHRcXHRpZiAoVGVzdENsZWFyUGFnZUhXUG9pc29uKHApKSB7XFxuIFxcdFxcdFxcdGZvbGlvX3B1dChmb2xpbyk7XFxuZGlmZiAtLWdpdCBhL21tL21lbW9yeV9ob3RwbHVnLmMgYi9tbS9tZW1vcnlfaG90cGx1Zy5jXFxuaW5kZXggN2FjMTlmYWIyMjYzMjQuLjMzMDA3ZThlNTQ2YTA5IDEwMDY0NFxcbi0tLSBhL21tL21lbW9yeV9ob3RwbHVnLmNcXG4rKysgYi9tbS9tZW1vcnlfaG90cGx1Zy5jXFxuQEAgLTE4MTMsNyArMTgxMyw3IEBAIHN0YXRpYyB2b2lkIGRvX21pZ3JhdGVfcmFuZ2UodW5zaWduZWQgbG9uZyBzdGFydF9wZm4sIHVuc2lnbmVkIGxvbmcgZW5kX3BmbilcXG4gXFx0XFx0aWYgKGZvbGlvX3Rlc3RfbGFyZ2UoZm9saW8pKVxcbiBcXHRcXHRcXHRwZm4gPSBmb2xpb19wZm4oZm9saW8pICsgZm9saW9fbnJfcGFnZXMoZm9saW8pIC0gMTtcXG4gXFxuLVxcdFxcdGlmIChmb2xpb19jb250YWluX2h3cG9pc29uZWRfcGFnZShmb2xpbykpIHtcXG4rXFx0XFx0aWYgKGZvbGlvX2hhc19od3BvaXNvbmVkX3BhZ2UoZm9saW8pKSB7XFxuIFxcdFxcdFxcdC8qXFxuIFxcdFxcdFxcdCAqIHVubWFwX3BvaXNvbmVkX2ZvbGlvKCkgY2Fubm90IGhhbmRsZSBsYXJnZSBmb2xpb3NcXG4gXFx0XFx0XFx0ICogaW4gYWxsIGNhc2VzIHlldC5cXG5kaWZmIC0tZ2l0IGEvbW0vcm1hcC5jIGIvbW0vcm1hcC5jXFxuaW5kZXggMWM3N2Q1ZGMwNmU5ZmEuLmZkMTlhMGJmYmZlNzZjIDEwMDY0NFxcbi0tLSBhL21tL3JtYXAuY1xcbisrKyBiL21tL3JtYXAuY1xcbkBAIC0xOTc4LDYgKzE5NzgsMjIgQEAgc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgZm9saW9fdW5tYXBfcHRlX2JhdGNoKHN0cnVjdCBmb2xpbyAqZm9saW8sXFxuIFxcdFxcdFxcdFxcdCAgICAgRlBCX1JFU1BFQ1RfV1JJVEUgfCBGUEJfUkVTUEVDVF9TT0ZUX0RJUlRZKTtcXG4gfVxcbiBcXG4rLypcXG4rICogU2luY2Ugd2UgY2Fubm90IHNwbGl0IGEgaHVnZXRsYiBmb2xpbywgd2Ugd2FudCB0byBpbnNlcnQgYSBwb2lzb25cXG4rICogZW50cnkgaW50byB0aGUgcGFnZSB0YWJsZSBmb3IgdGhlIHdob2xlIGZvbGlvIGV2ZW4gaWYgb25seSBvbmUgcGFnZVxcbisgKiBpcyBwb2lzb25lZC4gIE90aGVyd2lzZSwgd2UndmUgc3BsaXQgZG93biB0byB0aGUgUFRFIGxldmVsIGFuZCB3ZSBvbmx5XFxuKyAqIHdhbnQgdG8gcG9pc29uIHRoZSBwcmVjaXNlIHBhZ2VcXG4rICovXFxuK3N0YXRpYyBib29sIHR0dV9jcmVhdGVfaHdwb2lzb24oY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbyxcXG4rXFx0XFx0Y29uc3Qgc3RydWN0IHBhZ2UgKnBhZ2UsIGVudW0gdHR1X2ZsYWdzIGZsYWdzKVxcbit7XFxuK1xcdGlmICghKGZsYWdzIFxcdTAwMjYgVFRVX0hXUE9JU09OKSlcXG4rXFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXHRpZiAoZm9saW9fdGVzdF9odWdldGxiKGZvbGlvKSlcXG4rXFx0XFx0cmV0dXJuIGZvbGlvX3Rlc3RfaGFzX2h3cG9pc29uZWQoZm9saW8pO1xcbitcXHRyZXR1cm4gUGFnZUhXUG9pc29uKHBhZ2UpO1xcbit9XFxuK1xcbiAvKlxcbiAgKiBAYXJnOiBlbnVtIHR0dV9mbGFncyB3aWxsIGJlIHBhc3NlZCB0byB0aGlzIGFyZ3VtZW50XFxuICAqL1xcbkBAIC0xOTkzLDcgKzIwMDksNiBAQCBzdGF0aWMgYm9vbCB0cnlfdG9fdW5tYXBfb25lKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbiBcXHRlbnVtIHR0dV9mbGFncyBmbGFncyA9IChlbnVtIHR0dV9mbGFncykobG9uZylhcmc7XFxuIFxcdHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMgPSAxLCBlbmRfYWRkcjtcXG4gXFx0dW5zaWduZWQgbG9uZyBwZm47XFxuLVxcdHVuc2lnbmVkIGxvbmcgaHN6ID0gMDtcXG4gXFx0aW50IHB0ZXMgPSAwO1xcbiBcXG4gXFx0LypcXG5AQCAtMjAyMyw5ICsyMDM4LDYgQEAgc3RhdGljIGJvb2wgdHJ5X3RvX3VubWFwX29uZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4gXFx0XFx0ICovXFxuIFxcdFxcdGFkanVzdF9yYW5nZV9pZl9wbWRfc2hhcmluZ19wb3NzaWJsZSh2bWEsIFxcdTAwMjZyYW5nZS5zdGFydCxcXG4gXFx0XFx0XFx0XFx0XFx0XFx0ICAgICBcXHUwMDI2cmFuZ2UuZW5kKTtcXG4tXFxuLVxcdFxcdC8qIFdlIG5lZWQgdGhlIGh1Z2UgcGFnZSBzaXplIGZvciBzZXRfaHVnZV9wdGVfYXQoKSAqL1xcbi1cXHRcXHRoc3ogPSBodWdlX3BhZ2Vfc2l6ZShoc3RhdGVfdm1hKHZtYSkpO1xcbiBcXHR9XFxuIFxcdG1tdV9ub3RpZmllcl9pbnZhbGlkYXRlX3JhbmdlX3N0YXJ0KFxcdTAwMjZyYW5nZSk7XFxuIFxcbkBAIC0yMTIxLDcgKzIxMzMsOCBAQCBzdGF0aWMgYm9vbCB0cnlfdG9fdW5tYXBfb25lKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbiBcXHRcXHRcXHQgKiBUaGUgdHJ5X3RvX3VubWFwKCkgaXMgb25seSBwYXNzZWQgYSBodWdldGxiIHBhZ2VcXG4gXFx0XFx0XFx0ICogaW4gdGhlIGNhc2Ugd2hlcmUgdGhlIGh1Z2V0bGIgcGFnZSBpcyBwb2lzb25lZC5cXG4gXFx0XFx0XFx0ICovXFxuLVxcdFxcdFxcdFZNX0JVR19PTl9QQUdFKCFQYWdlSFdQb2lzb24oc3VicGFnZSksIHN1YnBhZ2UpO1xcbitcXHRcXHRcXHRWTV9CVUdfT05fRk9MSU8oIWZvbGlvX2hhc19od3BvaXNvbmVkX3BhZ2UoZm9saW8pLFxcbitcXHRcXHRcXHRcXHRcXHRmb2xpbyk7XFxuIFxcdFxcdFxcdC8qXFxuIFxcdFxcdFxcdCAqIGh1Z2VfcG1kX3Vuc2hhcmUgbWF5IHVubWFwIGFuIGVudGlyZSBQTUQgcGFnZS5cXG4gXFx0XFx0XFx0ICogVGhlcmUgaXMgbm8gd2F5IG9mIGtub3dpbmcgZXhhY3RseSB3aGljaCBQTURzIG1heVxcbkBAIC0yMjAwLDEyICsyMjEzLDEyIEBAIHN0YXRpYyBib29sIHRyeV90b191bm1hcF9vbmUoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuIFxcdFxcdC8qIFVwZGF0ZSBoaWdoIHdhdGVybWFyayBiZWZvcmUgd2UgbG93ZXIgcnNzICovXFxuIFxcdFxcdHVwZGF0ZV9oaXdhdGVyX3JzcyhtbSk7XFxuIFxcbi1cXHRcXHRpZiAoUGFnZUhXUG9pc29uKHN1YnBhZ2UpIFxcdTAwMjZcXHUwMDI2IChmbGFncyBcXHUwMDI2IFRUVV9IV1BPSVNPTikpIHtcXG4rXFx0XFx0aWYgKHR0dV9jcmVhdGVfaHdwb2lzb24oZm9saW8sIHN1YnBhZ2UsIGZsYWdzKSkge1xcbiBcXHRcXHRcXHRwdGV2YWwgPSBzd3BfZW50cnlfdG9fcHRlKG1ha2VfaHdwb2lzb25fZW50cnkoc3VicGFnZSkpO1xcbiBcXHRcXHRcXHRpZiAoZm9saW9fdGVzdF9odWdldGxiKGZvbGlvKSkge1xcbiBcXHRcXHRcXHRcXHRodWdldGxiX2NvdW50X3N1Yihmb2xpb19ucl9wYWdlcyhmb2xpbyksIG1tKTtcXG4gXFx0XFx0XFx0XFx0c2V0X2h1Z2VfcHRlX2F0KG1tLCBhZGRyZXNzLCBwdm13LnB0ZSwgcHRldmFsLFxcbi1cXHRcXHRcXHRcXHRcXHRcXHRoc3opO1xcbitcXHRcXHRcXHRcXHRcXHRcXHRmb2xpb19zaXplKGZvbGlvKSk7XFxuIFxcdFxcdFxcdH0gZWxzZSB7XFxuIFxcdFxcdFxcdFxcdGRlY19tbV9jb3VudGVyKG1tLCBtbV9jb3VudGVyKGZvbGlvKSk7XFxuIFxcdFxcdFxcdFxcdHNldF9wdGVfYXQobW0sIGFkZHJlc3MsIHB2bXcucHRlLCBwdGV2YWwpO1xcbkBAIC0yNDIzLDcgKzI0MzYsNiBAQCBzdGF0aWMgYm9vbCB0cnlfdG9fbWlncmF0ZV9vbmUoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuIFxcdHN0cnVjdCBtbXVfbm90aWZpZXJfcmFuZ2UgcmFuZ2U7XFxuIFxcdGVudW0gdHR1X2ZsYWdzIGZsYWdzID0gKGVudW0gdHR1X2ZsYWdzKShsb25nKWFyZztcXG4gXFx0dW5zaWduZWQgbG9uZyBwZm47XFxuLVxcdHVuc2lnbmVkIGxvbmcgaHN6ID0gMDtcXG4gXFxuIFxcdC8qXFxuIFxcdCAqIFdoZW4gcmFjaW5nIGFnYWluc3QgZS5nLiB6YXBfcHRlX3JhbmdlKCkgb24gYW5vdGhlciBjcHUsXFxuQEAgLTI0NTIsOSArMjQ2NCw2IEBAIHN0YXRpYyBib29sIHRyeV90b19taWdyYXRlX29uZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4gXFx0XFx0ICovXFxuIFxcdFxcdGFkanVzdF9yYW5nZV9pZl9wbWRfc2hhcmluZ19wb3NzaWJsZSh2bWEsIFxcdTAwMjZyYW5nZS5zdGFydCxcXG4gXFx0XFx0XFx0XFx0XFx0XFx0ICAgICBcXHUwMDI2cmFuZ2UuZW5kKTtcXG4tXFxuLVxcdFxcdC8qIFdlIG5lZWQgdGhlIGh1Z2UgcGFnZSBzaXplIGZvciBzZXRfaHVnZV9wdGVfYXQoKSAqL1xcbi1cXHRcXHRoc3ogPSBodWdlX3BhZ2Vfc2l6ZShoc3RhdGVfdm1hKHZtYSkpO1xcbiBcXHR9XFxuIFxcdG1tdV9ub3RpZmllcl9pbnZhbGlkYXRlX3JhbmdlX3N0YXJ0KFxcdTAwMjZyYW5nZSk7XFxuIFxcbkBAIC0yNjA3LDE0ICsyNjE2LDE0IEBAIHN0YXRpYyBib29sIHRyeV90b19taWdyYXRlX29uZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4gXFx0XFx0LyogVXBkYXRlIGhpZ2ggd2F0ZXJtYXJrIGJlZm9yZSB3ZSBsb3dlciByc3MgKi9cXG4gXFx0XFx0dXBkYXRlX2hpd2F0ZXJfcnNzKG1tKTtcXG4gXFxuLVxcdFxcdGlmIChQYWdlSFdQb2lzb24oc3VicGFnZSkpIHtcXG4rXFx0XFx0aWYgKHR0dV9jcmVhdGVfaHdwb2lzb24oZm9saW8sIHN1YnBhZ2UsIFRUVV9IV1BPSVNPTikpIHtcXG4gXFx0XFx0XFx0Vk1fV0FSTl9PTl9GT0xJTyhmb2xpb19pc19kZXZpY2VfcHJpdmF0ZShmb2xpbyksIGZvbGlvKTtcXG4gXFxuIFxcdFxcdFxcdHB0ZXZhbCA9IHN3cF9lbnRyeV90b19wdGUobWFrZV9od3BvaXNvbl9lbnRyeShzdWJwYWdlKSk7XFxuIFxcdFxcdFxcdGlmIChmb2xpb190ZXN0X2h1Z2V0bGIoZm9saW8pKSB7XFxuIFxcdFxcdFxcdFxcdGh1Z2V0bGJfY291bnRfc3ViKGZvbGlvX25yX3BhZ2VzKGZvbGlvKSwgbW0pO1xcbiBcXHRcXHRcXHRcXHRzZXRfaHVnZV9wdGVfYXQobW0sIGFkZHJlc3MsIHB2bXcucHRlLCBwdGV2YWwsXFxuLVxcdFxcdFxcdFxcdFxcdFxcdGhzeik7XFxuK1xcdFxcdFxcdFxcdFxcdFxcdGZvbGlvX3NpemUoZm9saW8pKTtcXG4gXFx0XFx0XFx0fSBlbHNlIHtcXG4gXFx0XFx0XFx0XFx0ZGVjX21tX2NvdW50ZXIobW0sIG1tX2NvdW50ZXIoZm9saW8pKTtcXG4gXFx0XFx0XFx0XFx0c2V0X3B0ZV9hdChtbSwgYWRkcmVzcywgcHZtdy5wdGUsIHB0ZXZhbCk7XFxuQEAgLTI2NDQsNyArMjY1Myw4IEBAIHN0YXRpYyBib29sIHRyeV90b19taWdyYXRlX29uZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4gXFx0XFx0XFx0aWYgKGFyY2hfdW5tYXBfb25lKG1tLCB2bWEsIGFkZHJlc3MsIHB0ZXZhbCkgXFx1MDAzYyAwKSB7XFxuIFxcdFxcdFxcdFxcdGlmIChmb2xpb190ZXN0X2h1Z2V0bGIoZm9saW8pKVxcbiBcXHRcXHRcXHRcXHRcXHRzZXRfaHVnZV9wdGVfYXQobW0sIGFkZHJlc3MsIHB2bXcucHRlLFxcbi1cXHRcXHRcXHRcXHRcXHRcXHRcXHRwdGV2YWwsIGhzeik7XFxuK1xcdFxcdFxcdFxcdFxcdFxcdFxcdHB0ZXZhbCxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0XFx0Zm9saW9fc2l6ZShmb2xpbykpO1xcbiBcXHRcXHRcXHRcXHRlbHNlXFxuIFxcdFxcdFxcdFxcdFxcdHNldF9wdGVfYXQobW0sIGFkZHJlc3MsIHB2bXcucHRlLCBwdGV2YWwpO1xcbiBcXHRcXHRcXHRcXHRyZXQgPSBmYWxzZTtcXG5AQCAtMjY1Nyw3ICsyNjY3LDggQEAgc3RhdGljIGJvb2wgdHJ5X3RvX21pZ3JhdGVfb25lKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbiBcXHRcXHRcXHRcXHRpZiAoYW5vbl9leGNsdXNpdmUgXFx1MDAyNlxcdTAwMjZcXG4gXFx0XFx0XFx0XFx0ICAgIGh1Z2V0bGJfdHJ5X3NoYXJlX2Fub25fcm1hcChmb2xpbykpIHtcXG4gXFx0XFx0XFx0XFx0XFx0c2V0X2h1Z2VfcHRlX2F0KG1tLCBhZGRyZXNzLCBwdm13LnB0ZSxcXG4tXFx0XFx0XFx0XFx0XFx0XFx0XFx0cHRldmFsLCBoc3opO1xcbitcXHRcXHRcXHRcXHRcXHRcXHRcXHRwdGV2YWwsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdFxcdGZvbGlvX3NpemUoZm9saW8pKTtcXG4gXFx0XFx0XFx0XFx0XFx0cmV0ID0gZmFsc2U7XFxuIFxcdFxcdFxcdFxcdFxcdHBhZ2Vfdm1hX21hcHBlZF93YWxrX2RvbmUoXFx1MDAyNnB2bXcpO1xcbiBcXHRcXHRcXHRcXHRcXHRicmVhaztcXG5AQCAtMjcwMyw3ICsyNzE0LDcgQEAgc3RhdGljIGJvb2wgdHJ5X3RvX21pZ3JhdGVfb25lKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbiBcXHRcXHRcXHR9XFxuIFxcdFxcdFxcdGlmIChmb2xpb190ZXN0X2h1Z2V0bGIoZm9saW8pKVxcbiBcXHRcXHRcXHRcXHRzZXRfaHVnZV9wdGVfYXQobW0sIGFkZHJlc3MsIHB2bXcucHRlLCBzd3BfcHRlLFxcbi1cXHRcXHRcXHRcXHRcXHRcXHRoc3opO1xcbitcXHRcXHRcXHRcXHRcXHRcXHRmb2xpb19zaXplKGZvbGlvKSk7XFxuIFxcdFxcdFxcdGVsc2VcXG4gXFx0XFx0XFx0XFx0c2V0X3B0ZV9hdChtbSwgYWRkcmVzcywgcHZtdy5wdGUsIHN3cF9wdGUpO1xcbiBcXHRcXHRcXHR0cmFjZV9zZXRfbWlncmF0aW9uX3B0ZShhZGRyZXNzLCBwdGVfdmFsKHN3cF9wdGUpLFxcbmRpZmYgLS1naXQgYS9tbS9zaG1lbS5jIGIvbW0vc2htZW0uY1xcbmluZGV4IGI1MWY4M2M5NzBiYjM3Li40OTJjOWJlZjM2MjA3NCAxMDA2NDRcXG4tLS0gYS9tbS9zaG1lbS5jXFxuKysrIGIvbW0vc2htZW0uY1xcbkBAIC0zMjQwLDcgKzMyNDAsNyBAQCBzaG1lbV93cml0ZV9iZWdpbihjb25zdCBzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxcbiBcXHRpZiAocmV0KVxcbiBcXHRcXHRyZXR1cm4gcmV0O1xcbiBcXG4tXFx0aWYgKGZvbGlvX2NvbnRhaW5faHdwb2lzb25lZF9wYWdlKGZvbGlvKSkge1xcbitcXHRpZiAoZm9saW9faGFzX2h3cG9pc29uZWRfcGFnZShmb2xpbykpIHtcXG4gXFx0XFx0Zm9saW9fdW5sb2NrKGZvbGlvKTtcXG4gXFx0XFx0Zm9saW9fcHV0KGZvbGlvKTtcXG4gXFx0XFx0cmV0dXJuIC1FSU87XFxuZGlmZiAtLWdpdCBhL21tL3Ztc2Nhbi5jIGIvbW0vdm1zY2FuLmNcXG5pbmRleCAzNWMzYmIxNWFlOTZhMy4uNzBlNTRhY2UwZTc0MWMgMTAwNjQ0XFxuLS0tIGEvbW0vdm1zY2FuLmNcXG4rKysgYi9tbS92bXNjYW4uY1xcbkBAIC0xMDg2LDcgKzEwODYsNyBAQCBzdGF0aWMgdW5zaWduZWQgaW50IHNocmlua19mb2xpb19saXN0KHN0cnVjdCBsaXN0X2hlYWQgKmZvbGlvX2xpc3QsXFxuIFxcdFxcdGlmICghZm9saW9fdHJ5bG9jayhmb2xpbykpXFxuIFxcdFxcdFxcdGdvdG8ga2VlcDtcXG4gXFxuLVxcdFxcdGlmIChmb2xpb19jb250YWluX2h3cG9pc29uZWRfcGFnZShmb2xpbykpIHtcXG4rXFx0XFx0aWYgKGZvbGlvX2hhc19od3BvaXNvbmVkX3BhZ2UoZm9saW8pKSB7XFxuIFxcdFxcdFxcdC8qXFxuIFxcdFxcdFxcdCAqIHVubWFwX3BvaXNvbmVkX2ZvbGlvKCkgY2FuJ3QgaGFuZGxlIGxhcmdlXFxuIFxcdFxcdFxcdCAqIGZvbGlvLCBqdXN0IHNraXAgaXQuIG1lbW9yeV9mYWlsdXJlKCkgd2lsbFxcbmRpZmYgLS1naXQgYS92aXJ0L2t2bS9ndWVzdF9tZW1mZC5jIGIvdmlydC9rdm0vZ3Vlc3RfbWVtZmQuY1xcbmluZGV4IGRiNTdjNTc2NmFiNjA0Li45NGVlZGNjN2YxYTllMCAxMDA2NDRcXG4tLS0gYS92aXJ0L2t2bS9ndWVzdF9tZW1mZC5jXFxuKysrIGIvdmlydC9rdm0vZ3Vlc3RfbWVtZmQuY1xcbkBAIC03NzQsNyArNzc0LDcgQEAgc3RhdGljIHN0cnVjdCBmb2xpbyAqX19rdm1fZ21lbV9nZXRfcGZuKHN0cnVjdCBmaWxlICpmaWxlLFxcbiBcXHRpZiAoSVNfRVJSKGZvbGlvKSlcXG4gXFx0XFx0cmV0dXJuIGZvbGlvO1xcbiBcXG4tXFx0aWYgKGZvbGlvX3Rlc3RfaHdwb2lzb24oZm9saW8pKSB7XFxuK1xcdGlmIChmb2xpb19oYXNfaHdwb2lzb25lZF9wYWdlKGZvbGlvKSkge1xcbiBcXHRcXHRmb2xpb191bmxvY2soZm9saW8pO1xcbiBcXHRcXHRmb2xpb19wdXQoZm9saW8pO1xcbiBcXHRcXHRyZXR1cm4gRVJSX1BUUigtRUhXUE9JU09OKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjZUMTc6NTE6MzcuMjIyMDk5OTM2WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MTU2NzE2NjgwNjgyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkhVR0VUTEJGU1wiLFxuICAgIFwiTUVNT1JZX0ZBSUxVUkVcIixcbiAgICBcIlRSQU5TUEFSRU5UX0hVR0VQQUdFXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaHVnZXRsYl9wYWdlX2h3cG9pc29uXCIsXG4gICAgXCJodWdldGxiX3VucmVmX3BhZ2VfaHdwb2lzb25cIixcbiAgICBcInVucG9pc29uX21lbW9yeVwiLFxuICAgIFwiZm9saW9fY2xlYXJfaHVnZXRsYl9od3BvaXNvblwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHNlcmllcyBpbnRyb2R1Y2VzIGBMQVJHRV9GT0xJT2AgY29uZmlnIGFuZCByZWZhY3RvcnMgaG93IGh3cG9pc29uIGlzIHRyYWNrZWQgZm9yIGh1Z2V0bGIgZm9saW9zLiBJdCByZXBsYWNlcyBgYWRqdXN0X3JhbmdlX2h3cG9pc29uYCBpbiBgZnMvaHVnZXRsYmZzL2lub2RlLmNgIHdpdGggYSBnZW5lcmljIG9uZSBpbiBgbW0vZmlsZW1hcC5jYCBhbmQgY2hhbmdlcyBgaHVnZXRsYmZzX3JlYWRfaXRlcmAgdG8gYGdlbmVyaWNfZmlsZV9yZWFkX2l0ZXJgLiBJdCBhbHNvIG1vZGlmaWVzIGBmb2xpb190ZXN0X2h3cG9pc29uYCB0byBgZm9saW9faGFzX2h3cG9pc29uZWRfcGFnZWAgaW4gdmFyaW91cyBwbGFjZXMuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gY29yZSBrZXJuZWwgbG9naWMgKG1tLCBodWdldGxiZnMsIG1lbW9yeS1mYWlsdXJlKSBhbmQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgOWI4NTZlYmQ0N2FjNTAxMDdjOTk2MjM2OTI4ZGFjNWI2M2IzZTk2YlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTdW4gSnVsIDI2IDE3OjUxOjM1IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZnMvS2NvbmZpZyBiL2ZzL0tjb25maWdcbmluZGV4IGNmNmFlNjQ3NzZlNjJjLi5lZGRhYzRlZDIxNGIxMiAxMDA2NDRcbi0tLSBhL2ZzL0tjb25maWdcbisrKyBiL2ZzL0tjb25maWdcbkBAIC0yNzIsNyArMjcyLDcgQEAgZW5kaWYgIyBIVUdFVExCRlNcbiBcbiBjb25maWcgSFVHRVRMQl9QQUdFXG4gXHRkZWZfYm9vbCBIVUdFVExCRlNcbi1cdHNlbGVjdCBYQVJSQVlfTVVMVElcbitcdHNlbGVjdCBMQVJHRV9GT0xJT1xuIFxuIGNvbmZpZyBIVUdFVExCX1BBR0VfT1BUSU1JWkVfVk1FTU1BUFxuIFx0ZGVmX2Jvb2wgSFVHRVRMQl9QQUdFXG5kaWZmIC0tZ2l0IGEvZnMvaHVnZXRsYmZzL2lub2RlLmMgYi9mcy9odWdldGxiZnMvaW5vZGUuY1xuaW5kZXggMjE2ZTFhMGRkMGIyMzcuLmNlZjdlNjFiODI3ZDcxIDEwMDY0NFxuLS0tIGEvZnMvaHVnZXRsYmZzL2lub2RlLmNcbisrKyBiL2ZzL2h1Z2V0bGJmcy9pbm9kZS5jXG5AQCAtMTg3LDExMyArMTg3LDYgQEAgaHVnZXRsYl9nZXRfdW5tYXBwZWRfYXJlYShzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgbG9uZyBhZGRyLFxuIFx0cmV0dXJuIG1tX2dldF91bm1hcHBlZF9hcmVhX3ZtZmxhZ3MoZmlsZSwgYWRkcjAsIGxlbiwgcGdvZmYsIGZsYWdzLCAwKTtcbiB9XG4gXG4tLypcbi0gKiBTb21lb25lIHdhbnRzIHRvIHJlYWQgQGJ5dGVzIGZyb20gYSBIV1BPSVNPTiBodWdldGxiIEBmb2xpbyBmcm9tIEBvZmZzZXQuXG4tICogUmV0dXJucyB0aGUgbWF4aW11bSBudW1iZXIgb2YgYnl0ZXMgb25lIGNhbiByZWFkIHdpdGhvdXQgdG91Y2hpbmcgdGhlIDFzdCByYXdcbi0gKiBIV1BPSVNPTiBwYWdlLlxuLSAqL1xuLXN0YXRpYyBzaXplX3QgYWRqdXN0X3JhbmdlX2h3cG9pc29uKHN0cnVjdCBmb2xpbyAqZm9saW8sIHNpemVfdCBvZmZzZXQsXG4tXHRcdHNpemVfdCBieXRlcylcbi17XG4tXHRzdHJ1Y3QgcGFnZSAqcGFnZSA9IGZvbGlvX3BhZ2UoZm9saW8sIG9mZnNldCAvIFBBR0VfU0laRSk7XG4tXHRzaXplX3Qgc2FmZV9ieXRlcztcbi1cbi1cdGlmIChpc19yYXdfaHdwb2lzb25fcGFnZV9pbl9odWdlcGFnZShwYWdlKSlcbi1cdFx0cmV0dXJuIDA7XG4tXHQvKiBTYWZlIHRvIHJlYWQgdGhlIHJlbWFpbmluZyBieXRlcyBpbiB0aGlzIHBhZ2UuICovXG4tXHRzYWZlX2J5dGVzID0gUEFHRV9TSVpFIC0gKG9mZnNldCAlIFBBR0VfU0laRSk7XG4tXHRwYWdlKys7XG4tXG4tXHQvKiBDaGVjayBlYWNoIHJlbWFpbmluZyBwYWdlIGFzIGxvbmcgYXMgd2UgYXJlIG5vdCBkb25lIHlldC4gKi9cbi1cdGZvciAoOyBzYWZlX2J5dGVzIFx1MDAzYyBieXRlczsgc2FmZV9ieXRlcyArPSBQQUdFX1NJWkUsIHBhZ2UrKylcbi1cdFx0aWYgKGlzX3Jhd19od3BvaXNvbl9wYWdlX2luX2h1Z2VwYWdlKHBhZ2UpKVxuLVx0XHRcdGJyZWFrO1xuLVxuLVx0cmV0dXJuIG1pbihzYWZlX2J5dGVzLCBieXRlcyk7XG4tfVxuLVxuLS8qXG4tICogU3VwcG9ydCBmb3IgcmVhZCgpIC0gRmluZCB0aGUgcGFnZSBhdHRhY2hlZCB0byBmX21hcHBpbmcgYW5kIGNvcHkgb3V0IHRoZVxuLSAqIGRhdGEuIFRoaXMgcHJvdmlkZXMgZnVuY3Rpb25hbGl0eSBzaW1pbGFyIHRvIGZpbGVtYXBfcmVhZCgpLlxuLSAqL1xuLXN0YXRpYyBzc2l6ZV90IGh1Z2V0bGJmc19yZWFkX2l0ZXIoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKnRvKVxuLXtcbi1cdHN0cnVjdCBmaWxlICpmaWxlID0gaW9jYi1cdTAwM2VraV9maWxwO1xuLVx0c3RydWN0IGhzdGF0ZSAqaCA9IGhzdGF0ZV9maWxlKGZpbGUpO1xuLVx0c3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcgPSBmaWxlLVx1MDAzZWZfbWFwcGluZztcbi1cdHN0cnVjdCBpbm9kZSAqaW5vZGUgPSBtYXBwaW5nLVx1MDAzZWhvc3Q7XG4tXHR1bnNpZ25lZCBsb25nIGluZGV4ID0gaW9jYi1cdTAwM2VraV9wb3MgXHUwMDNlXHUwMDNlIGh1Z2VfcGFnZV9zaGlmdChoKTtcbi1cdHVuc2lnbmVkIGxvbmcgb2Zmc2V0ID0gaW9jYi1cdTAwM2VraV9wb3MgXHUwMDI2IH5odWdlX3BhZ2VfbWFzayhoKTtcbi1cdHVuc2lnbmVkIGxvbmcgZW5kX2luZGV4O1xuLVx0bG9mZl90IGlzaXplO1xuLVx0c3NpemVfdCByZXR2YWwgPSAwO1xuLVxuLVx0d2hpbGUgKGlvdl9pdGVyX2NvdW50KHRvKSkge1xuLVx0XHRzdHJ1Y3QgZm9saW8gKmZvbGlvO1xuLVx0XHRzaXplX3QgbnIsIGNvcGllZCwgd2FudDtcbi1cbi1cdFx0LyogbnIgaXMgdGhlIG1heGltdW0gbnVtYmVyIG9mIGJ5dGVzIHRvIGNvcHkgZnJvbSB0aGlzIHBhZ2UgKi9cbi1cdFx0bnIgPSBodWdlX3BhZ2Vfc2l6ZShoKTtcbi1cdFx0aXNpemUgPSBpX3NpemVfcmVhZChpbm9kZSk7XG4tXHRcdGlmICghaXNpemUpXG4tXHRcdFx0YnJlYWs7XG4tXHRcdGVuZF9pbmRleCA9IChpc2l6ZSAtIDEpIFx1MDAzZVx1MDAzZSBodWdlX3BhZ2Vfc2hpZnQoaCk7XG4tXHRcdGlmIChpbmRleCBcdTAwM2UgZW5kX2luZGV4KVxuLVx0XHRcdGJyZWFrO1xuLVx0XHRpZiAoaW5kZXggPT0gZW5kX2luZGV4KSB7XG4tXHRcdFx0bnIgPSAoKGlzaXplIC0gMSkgXHUwMDI2IH5odWdlX3BhZ2VfbWFzayhoKSkgKyAxO1xuLVx0XHRcdGlmIChuciBcdTAwM2M9IG9mZnNldClcbi1cdFx0XHRcdGJyZWFrO1xuLVx0XHR9XG4tXHRcdG5yID0gbnIgLSBvZmZzZXQ7XG4tXG4tXHRcdC8qIEZpbmQgdGhlIGZvbGlvICovXG4tXHRcdGZvbGlvID0gZmlsZW1hcF9sb2NrX2h1Z2V0bGJfZm9saW8oaCwgbWFwcGluZywgaW5kZXgpO1xuLVx0XHRpZiAoSVNfRVJSKGZvbGlvKSkge1xuLVx0XHRcdC8qXG4tXHRcdFx0ICogV2UgaGF2ZSBhIEhPTEUsIHplcm8gb3V0IHRoZSB1c2VyLWJ1ZmZlciBmb3IgdGhlXG4tXHRcdFx0ICogbGVuZ3RoIG9mIHRoZSBob2xlIG9yIHJlcXVlc3QuXG4tXHRcdFx0ICovXG4tXHRcdFx0Y29waWVkID0gaW92X2l0ZXJfemVybyhuciwgdG8pO1xuLVx0XHR9IGVsc2Uge1xuLVx0XHRcdGZvbGlvX3VubG9jayhmb2xpbyk7XG4tXG4tXHRcdFx0aWYgKCFmb2xpb190ZXN0X2h3cG9pc29uKGZvbGlvKSlcbi1cdFx0XHRcdHdhbnQgPSBucjtcbi1cdFx0XHRlbHNlIHtcbi1cdFx0XHRcdC8qXG4tXHRcdFx0XHQgKiBBZGp1c3QgaG93IG1hbnkgYnl0ZXMgc2FmZSB0byByZWFkIHdpdGhvdXRcbi1cdFx0XHRcdCAqIHRvdWNoaW5nIHRoZSAxc3QgcmF3IEhXUE9JU09OIHBhZ2UgYWZ0ZXJcbi1cdFx0XHRcdCAqIG9mZnNldC5cbi1cdFx0XHRcdCAqL1xuLVx0XHRcdFx0d2FudCA9IGFkanVzdF9yYW5nZV9od3BvaXNvbihmb2xpbywgb2Zmc2V0LCBucik7XG4tXHRcdFx0XHRpZiAod2FudCA9PSAwKSB7XG4tXHRcdFx0XHRcdGZvbGlvX3B1dChmb2xpbyk7XG4tXHRcdFx0XHRcdHJldHZhbCA9IC1FSU87XG4tXHRcdFx0XHRcdGJyZWFrO1xuLVx0XHRcdFx0fVxuLVx0XHRcdH1cbi1cbi1cdFx0XHQvKlxuLVx0XHRcdCAqIFdlIGhhdmUgdGhlIGZvbGlvLCBjb3B5IGl0IHRvIHVzZXIgc3BhY2UgYnVmZmVyLlxuLVx0XHRcdCAqL1xuLVx0XHRcdGNvcGllZCA9IGNvcHlfZm9saW9fdG9faXRlcihmb2xpbywgb2Zmc2V0LCB3YW50LCB0byk7XG4tXHRcdFx0Zm9saW9fcHV0KGZvbGlvKTtcbi1cdFx0fVxuLVx0XHRvZmZzZXQgKz0gY29waWVkO1xuLVx0XHRyZXR2YWwgKz0gY29waWVkO1xuLVx0XHRpZiAoY29waWVkICE9IG5yIFx1MDAyNlx1MDAyNiBpb3ZfaXRlcl9jb3VudCh0bykpIHtcbi1cdFx0XHRpZiAoIXJldHZhbClcbi1cdFx0XHRcdHJldHZhbCA9IC1FRkFVTFQ7XG4tXHRcdFx0YnJlYWs7XG4tXHRcdH1cbi1cdFx0aW5kZXggKz0gb2Zmc2V0IFx1MDAzZVx1MDAzZSBodWdlX3BhZ2Vfc2hpZnQoaCk7XG4tXHRcdG9mZnNldCBcdTAwMjY9IH5odWdlX3BhZ2VfbWFzayhoKTtcbi1cdH1cbi1cdGlvY2ItXHUwMDNla2lfcG9zID0gKChsb2ZmX3QpaW5kZXggXHUwMDNjXHUwMDNjIGh1Z2VfcGFnZV9zaGlmdChoKSkgKyBvZmZzZXQ7XG4tXHRyZXR1cm4gcmV0dmFsO1xuLX1cbi1cbiBzdGF0aWMgaW50IGh1Z2V0bGJmc193cml0ZV9iZWdpbihjb25zdCBzdHJ1Y3Qga2lvY2IgKmlvY2IsXG4gXHRcdFx0c3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXG4gXHRcdFx0bG9mZl90IHBvcywgdW5zaWduZWQgbGVuLFxuQEAgLTg4Myw2ICs3NzYsMTcgQEAgc3RhdGljIHN0cnVjdCBpbm9kZSAqaHVnZXRsYmZzX2dldF9yb290KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsXG4gXHRyZXR1cm4gaW5vZGU7XG4gfVxuIFxuK3N0YXRpYyB2b2lkIGh1Z2V0bGJmc19pbml0X3JlZ3VsYXJfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSlcbit7XG4rXHRzdHJ1Y3QgaHN0YXRlICpoc3RhdGUgPSBoc3RhdGVfaW5vZGUoaW5vZGUpO1xuK1x0dW5zaWduZWQgaW50IG9yZGVyID0gaHVnZV9wYWdlX29yZGVyKGhzdGF0ZSk7XG4rXG4rXHRpbm9kZS1cdTAwM2VpX29wID0gXHUwMDI2aHVnZXRsYmZzX2lub2RlX29wZXJhdGlvbnM7XG4rXHRpbm9kZS1cdTAwM2VpX2ZvcCA9IFx1MDAyNmh1Z2V0bGJmc19maWxlX29wZXJhdGlvbnM7XG4rXHRtYXBwaW5nX3NldF9mb2xpb19vcmRlcl9yYW5nZShpbm9kZS1cdTAwM2VpX21hcHBpbmcsIG9yZGVyLCBvcmRlcik7XG4rXHRtYXBwaW5nX3NldF9hdXRob3JpdGF0aXZlKGlub2RlLVx1MDAzZWlfbWFwcGluZyk7XG4rfVxuK1xuIC8qXG4gICogSHVnZXRsYmZzIGlzIG5vdCByZWNsYWltYWJsZTsgdGhlcmVmb3JlIGl0cyBpX21tYXBfcndzZW0gd2lsbCBuZXZlclxuICAqIGJlIHRha2VuIGZyb20gcmVjbGFpbSAtLSB1bmxpa2UgcmVndWxhciBmaWxlc3lzdGVtcy4gVGhpcyBuZWVkcyBhblxuQEAgLTkyNiw4ICs4MzAsNyBAQCBzdGF0aWMgc3RydWN0IGlub2RlICpodWdldGxiZnNfZ2V0X2lub2RlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsXG4gXHRcdFx0aW5pdF9zcGVjaWFsX2lub2RlKGlub2RlLCBtb2RlLCBkZXYpO1xuIFx0XHRcdGJyZWFrO1xuIFx0XHRjYXNlIFNfSUZSRUc6XG4tXHRcdFx0aW5vZGUtXHUwMDNlaV9vcCA9IFx1MDAyNmh1Z2V0bGJmc19pbm9kZV9vcGVyYXRpb25zO1xuLVx0XHRcdGlub2RlLVx1MDAzZWlfZm9wID0gXHUwMDI2aHVnZXRsYmZzX2ZpbGVfb3BlcmF0aW9ucztcbitcdFx0XHRodWdldGxiZnNfaW5pdF9yZWd1bGFyX2lub2RlKGlub2RlKTtcbiBcdFx0XHRicmVhaztcbiBcdFx0Y2FzZSBTX0lGRElSOlxuIFx0XHRcdGlub2RlLVx1MDAzZWlfb3AgPSBcdTAwMjZodWdldGxiZnNfZGlyX2lub2RlX29wZXJhdGlvbnM7XG5AQCAtMTIwNiw3ICsxMTA5LDcgQEAgc3RhdGljIHZvaWQgaW5pdF9vbmNlKHZvaWQgKmZvbylcbiB9XG4gXG4gc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgaHVnZXRsYmZzX2ZpbGVfb3BlcmF0aW9ucyA9IHtcbi1cdC5yZWFkX2l0ZXJcdFx0PSBodWdldGxiZnNfcmVhZF9pdGVyLFxuK1x0LnJlYWRfaXRlclx0XHQ9IGdlbmVyaWNfZmlsZV9yZWFkX2l0ZXIsXG4gXHQubW1hcFx0XHRcdD0gaHVnZXRsYmZzX2ZpbGVfbW1hcCxcbiBcdC5mc3luY1x0XHRcdD0gbm9vcF9mc3luYyxcbiBcdC5nZXRfdW5tYXBwZWRfYXJlYVx0PSBodWdldGxiX2dldF91bm1hcHBlZF9hcmVhLFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaHVnZXRsYi5oIGIvaW5jbHVkZS9saW51eC9odWdldGxiLmhcbmluZGV4IDJhYmFmOTkzMjFlOTBkLi4xODc4NjQyZTc1ZWM1MSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvaHVnZXRsYi5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaFxuQEAgLTE2NSw3ICsxNjUsNyBAQCBib29sIGh1Z2V0bGJmc19wYWdlY2FjaGVfcHJlc2VudChzdHJ1Y3QgaHN0YXRlICpoLFxuIFx0XHRcdFx0IHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuIFx0XHRcdFx0IHVuc2lnbmVkIGxvbmcgYWRkcmVzcyk7XG4gXG4tc3RydWN0IGFkZHJlc3Nfc3BhY2UgKmh1Z2V0bGJfZm9saW9fbWFwcGluZ19sb2NrX3dyaXRlKHN0cnVjdCBmb2xpbyAqZm9saW8pO1xuK3N0cnVjdCBhZGRyZXNzX3NwYWNlICpodWdldGxiX2ZvbGlvX21hcHBpbmdfbG9ja193cml0ZShjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcbiBcbiBleHRlcm4gaW50IG1vdmFibGVfZ2lnYW50aWNfcGFnZXMgX19yZWFkX21vc3RseTtcbiBleHRlcm4gaW50IHN5c2N0bF9odWdldGxiX3NobV9ncm91cCBfX3JlYWRfbW9zdGx5O1xuQEAgLTI5Miw4ICsyOTIsNyBAQCBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgaHVnZXRsYl90b3RhbF9wYWdlcyh2b2lkKVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuLXN0YXRpYyBpbmxpbmUgc3RydWN0IGFkZHJlc3Nfc3BhY2UgKmh1Z2V0bGJfZm9saW9fbWFwcGluZ19sb2NrX3dyaXRlKFxuLVx0XHRcdFx0XHRcdFx0c3RydWN0IGZvbGlvICpmb2xpbylcbitzdGF0aWMgaW5saW5lIHN0cnVjdCBhZGRyZXNzX3NwYWNlICpodWdldGxiX2ZvbGlvX21hcHBpbmdfbG9ja193cml0ZShjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIHtcbiBcdHJldHVybiBOVUxMO1xuIH1cbkBAIC01OTUsOCArNTk0LDggQEAgZW51bSBodWdldGxiX3BhZ2VfZmxhZ3Mge1xuICNpZmRlZiBDT05GSUdfSFVHRVRMQl9QQUdFXG4gI2RlZmluZSBURVNUSFBBR0VGTEFHKHVuYW1lLCBmbG5hbWUpXHRcdFx0XHRcXFxuIHN0YXRpYyBfX2Fsd2F5c19pbmxpbmVcdFx0XHRcdFx0XHRcXFxuLWJvb2wgZm9saW9fdGVzdF9odWdldGxiXyMjZmxuYW1lKHN0cnVjdCBmb2xpbyAqZm9saW8pXHRcdFxcXG4tXHR7XHR2b2lkICpwcml2YXRlID0gXHUwMDI2Zm9saW8tXHUwMDNlcHJpdmF0ZTtcdFx0XFxcbitib29sIGZvbGlvX3Rlc3RfaHVnZXRsYl8jI2ZsbmFtZShjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVx0XFxcbitcdHtcdGNvbnN0IHZvaWQgKnByaXZhdGUgPSBcdTAwMjZmb2xpby1cdTAwM2Vwcml2YXRlO1x0XHRcXFxuIFx0XHRyZXR1cm4gdGVzdF9iaXQoSFBHXyMjZmxuYW1lLCBwcml2YXRlKTtcdFx0XFxcbiBcdH1cbiBcbkBAIC02MTYsNyArNjE1LDcgQEAgdm9pZCBmb2xpb19jbGVhcl9odWdldGxiXyMjZmxuYW1lKHN0cnVjdCBmb2xpbyAqZm9saW8pXHRcdFxcXG4gI2Vsc2VcbiAjZGVmaW5lIFRFU1RIUEFHRUZMQUcodW5hbWUsIGZsbmFtZSlcdFx0XHRcdFxcXG4gc3RhdGljIGlubGluZSBib29sXHRcdFx0XHRcdFx0XFxcbi1mb2xpb190ZXN0X2h1Z2V0bGJfIyNmbG5hbWUoc3RydWN0IGZvbGlvICpmb2xpbylcdFx0XFxcbitmb2xpb190ZXN0X2h1Z2V0bGJfIyNmbG5hbWUoY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbylcdFx0XFxcbiBcdHsgcmV0dXJuIDA7IH1cbiBcbiAjZGVmaW5lIFNFVEhQQUdFRkxBRyh1bmFtZSwgZmxuYW1lKVx0XHRcdFx0XFxcbkBAIC03MjcsNyArNzI2LDcgQEAgc3RhdGljIGlubGluZSBzdHJ1Y3QgaHVnZXBhZ2Vfc3VicG9vbCAqc3VicG9vbF9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuIFx0cmV0dXJuIEhVR0VUTEJGU19TQihpbm9kZS1cdTAwM2VpX3NiKS1cdTAwM2VzcG9vbDtcbiB9XG4gXG4tc3RhdGljIGlubGluZSBzdHJ1Y3QgaHVnZXBhZ2Vfc3VicG9vbCAqaHVnZXRsYl9mb2xpb19zdWJwb29sKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4rc3RhdGljIGlubGluZSBzdHJ1Y3QgaHVnZXBhZ2Vfc3VicG9vbCAqaHVnZXRsYl9mb2xpb19zdWJwb29sKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8pXG4ge1xuIFx0cmV0dXJuIGZvbGlvLVx1MDAzZV9odWdldGxiX3N1YnBvb2w7XG4gfVxuQEAgLTg1Nyw3ICs4NTYsNyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgYXJjaF9oYXNfaHVnZV9ib290bWVtX2FsbG9jKHZvaWQpXG4gfVxuICNlbmRpZlxuIFxuLXN0YXRpYyBpbmxpbmUgc3RydWN0IGhzdGF0ZSAqZm9saW9faHN0YXRlKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4rc3RhdGljIGlubGluZSBzdHJ1Y3QgaHN0YXRlICpmb2xpb19oc3RhdGUoY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbylcbiB7XG4gXHRWTV9CVUdfT05fRk9MSU8oIWZvbGlvX3Rlc3RfaHVnZXRsYihmb2xpbyksIGZvbGlvKTtcbiBcdHJldHVybiBzaXplX3RvX2hzdGF0ZShmb2xpb19zaXplKGZvbGlvKSk7XG5AQCAtMTA3MCwxMSArMTA2OSw2IEBAIHZvaWQgaHVnZXRsYl9yZWdpc3Rlcl9ub2RlKHN0cnVjdCBub2RlICpub2RlKTtcbiB2b2lkIGh1Z2V0bGJfdW5yZWdpc3Rlcl9ub2RlKHN0cnVjdCBub2RlICpub2RlKTtcbiAjZW5kaWZcbiBcbi0vKlxuLSAqIENoZWNrIGlmIGEgZ2l2ZW4gcmF3IEBwYWdlIGluIGEgaHVnZXBhZ2UgaXMgSFdQT0lTT04uXG4tICovXG4tYm9vbCBpc19yYXdfaHdwb2lzb25fcGFnZV9pbl9odWdlcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSk7XG4tXG4gc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGh1Z2VfcGFnZV9tYXNrX2FsaWduKHN0cnVjdCBmaWxlICpmaWxlKVxuIHtcbiBcdHJldHVybiBQQUdFX01BU0sgXHUwMDI2IH5odWdlX3BhZ2VfbWFzayhoc3RhdGVfZmlsZShmaWxlKSk7XG5AQCAtMTA4OCw3ICsxMDgyLDcgQEAgc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGh1Z2VfcGFnZV9tYXNrX2FsaWduKHN0cnVjdCBmaWxlICpmaWxlKVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuLXN0YXRpYyBpbmxpbmUgc3RydWN0IGh1Z2VwYWdlX3N1YnBvb2wgKmh1Z2V0bGJfZm9saW9fc3VicG9vbChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuK3N0YXRpYyBpbmxpbmUgc3RydWN0IGh1Z2VwYWdlX3N1YnBvb2wgKmh1Z2V0bGJfZm9saW9fc3VicG9vbChjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIHtcbiBcdHJldHVybiBOVUxMO1xuIH1cbkBAIC0xMTU3LDcgKzExNTEsNyBAQCBzdGF0aWMgaW5saW5lIHN0cnVjdCBoc3RhdGUgKmhzdGF0ZV92bWEoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXG4gXHRyZXR1cm4gTlVMTDtcbiB9XG4gXG4tc3RhdGljIGlubGluZSBzdHJ1Y3QgaHN0YXRlICpmb2xpb19oc3RhdGUoc3RydWN0IGZvbGlvICpmb2xpbylcbitzdGF0aWMgaW5saW5lIHN0cnVjdCBoc3RhdGUgKmZvbGlvX2hzdGF0ZShjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIHtcbiBcdHJldHVybiBOVUxMO1xuIH1cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21tX3R5cGVzLmggYi9pbmNsdWRlL2xpbnV4L21tX3R5cGVzLmhcbmluZGV4IGIxOGMyYjJlN2QyYzY1Li44NmEyZDBmZWU1NTdiZSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvbW1fdHlwZXMuaFxuKysrIGIvaW5jbHVkZS9saW51eC9tbV90eXBlcy5oXG5AQCAtMzg3LDcgKzM4Nyw3IEBAIHR5cGVkZWYgdW5zaWduZWQgc2hvcnQgbW1faWRfdDtcbiAgKiBAX2h1Z2V0bGJfc3VicG9vbDogRG8gbm90IHVzZSBkaXJlY3RseSwgdXNlIGFjY2Vzc29yIGluIGh1Z2V0bGIuaC5cbiAgKiBAX2h1Z2V0bGJfY2dyb3VwOiBEbyBub3QgdXNlIGRpcmVjdGx5LCB1c2UgYWNjZXNzb3IgaW4gaHVnZXRsYl9jZ3JvdXAuaC5cbiAgKiBAX2h1Z2V0bGJfY2dyb3VwX3JzdmQ6IERvIG5vdCB1c2UgZGlyZWN0bHksIHVzZSBhY2Nlc3NvciBpbiBodWdldGxiX2Nncm91cC5oLlxuLSAqIEBfaHVnZXRsYl9od3BvaXNvbjogRG8gbm90IHVzZSBkaXJlY3RseSwgY2FsbCByYXdfaHdwX2xpc3RfaGVhZCgpLlxuKyAqIEBodWdldGxiX2h3cG9pc29uOiBMaXN0IG9mIHBhZ2VzIHdpdGggaHdwb2lzb24uXG4gICogQF9kZWZlcnJlZF9saXN0OiBGb2xpb3MgdG8gYmUgc3BsaXQgdW5kZXIgbWVtb3J5IHByZXNzdXJlLlxuICAqIEBfdW51c2VkX3NsYWJfb2JqX2V4dHM6IFBsYWNlaG9sZGVyIHRvIG1hdGNoIG9ial9leHRzIGluIHN0cnVjdCBzbGFiLlxuICAqXG5AQCAtNDk5LDcgKzQ5OSw3IEBAIHN0cnVjdCBmb2xpbyB7XG4gXHRcdFx0dm9pZCAqX2h1Z2V0bGJfc3VicG9vbDtcbiBcdFx0XHR2b2lkICpfaHVnZXRsYl9jZ3JvdXA7XG4gXHRcdFx0dm9pZCAqX2h1Z2V0bGJfY2dyb3VwX3JzdmQ7XG4tXHRcdFx0dm9pZCAqX2h1Z2V0bGJfaHdwb2lzb247XG4rXHRcdFx0c3RydWN0IGh3cF9wYWdlICpodWdldGxiX2h3cG9pc29uO1xuIFx0LyogcHJpdmF0ZTogdGhlIHVuaW9uIHdpdGggc3RydWN0IHBhZ2UgaXMgdHJhbnNpdGlvbmFsICovXG4gXHRcdH07XG4gXHRcdHN0cnVjdCBwYWdlIF9fcGFnZV8zO1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oIGIvaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmhcbmluZGV4IDcyMjNmNmY0ZTJiNDAzLi4wN2NjNzg1NGIyZGUxNiAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaFxuQEAgLTg5MywxNCArODkzLDE5IEBAIHN0YXRpYyBpbmxpbmUgaW50IFBhZ2VUcmFuc0NvbXBvdW5kKGNvbnN0IHN0cnVjdCBwYWdlICpwYWdlKVxuIFRFU1RQQUdFRkxBR19GQUxTRShUcmFuc0NvbXBvdW5kLCB0cmFuc2NvbXBvdW5kKVxuICNlbmRpZlxuIFxuLSNpZiBkZWZpbmVkKENPTkZJR19NRU1PUllfRkFJTFVSRSkgXHUwMDI2XHUwMDI2IGRlZmluZWQoQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFKVxuKyNpZiBkZWZpbmVkKENPTkZJR19NRU1PUllfRkFJTFVSRSkgXHUwMDI2XHUwMDI2IGRlZmluZWQoQ09ORklHX0xBUkdFX0ZPTElPKVxuIC8qXG4tICogUGFnZUhhc0hXUG9pc29uZWQgaW5kaWNhdGVzIHRoYXQgYXQgbGVhc3Qgb25lIHN1YnBhZ2UgaXMgaHdwb2lzb25lZCBpbiB0aGVcbi0gKiBjb21wb3VuZCBwYWdlLlxuKyAqIGZvbGlvX2hhc19od3BvaXNvbmVkIGluZGljYXRlcyB0aGF0IGF0IGxlYXN0IG9uZSBwYWdlIGlzIGh3cG9pc29uZWQgaW4gdGhlXG4rICogZm9saW8uICBUaGF0IHBhZ2Ugd2lsbCB1c3VhbGx5IGFsc28gaGF2ZSB0aGUgSFdQb2lzb24gZmxhZyBzZXQsIGJ1dCB0aGlzXG4rICogaXMgbm90IHBvc3NpYmxlIGZvciBmb2xpb3Mgd2hpY2ggaGF2ZSBIVk8gKHNlZSBtZW1vcnktZmFpbHVyZSBmb3IgdGhlXG4rICogc2NoZW1lIHVzZWQgaW4gdGhhdCBjYXNlKS4gIFlvdSBwcm9iYWJseSBkb24ndCB3YW50IHRvIGNhbGwgdGhpcyBkaXJlY3RseTtcbisgKiB1c2UgZm9saW9faGFzX2h3cG9pc29uZWRfcGFnZSgpIGluc3RlYWQuXG4gICpcbiAgKiBUaGlzIGZsYWcgaXMgc2V0IGJ5IGh3cG9pc29uIGhhbmRsZXIuICBDbGVhcmVkIGJ5IFRIUCBzcGxpdCBvciBmcmVlIHBhZ2UuXG4gICovXG4gRk9MSU9fRkxBRyhoYXNfaHdwb2lzb25lZCwgRk9MSU9fU0VDT05EX1BBR0UpXG4rRk9MSU9fVEVTVF9TRVRfRkxBRyhoYXNfaHdwb2lzb25lZCwgRk9MSU9fU0VDT05EX1BBR0UpXG4rRk9MSU9fVEVTVF9DTEVBUl9GTEFHKGhhc19od3BvaXNvbmVkLCBGT0xJT19TRUNPTkRfUEFHRSlcbiAjZWxzZVxuIEZPTElPX0ZMQUdfRkFMU0UoaGFzX2h3cG9pc29uZWQpXG4gI2VuZGlmXG5AQCAtMTA0MSw4ICsxMDQ2LDI5IEBAIFBBR0VfVFlQRV9PUFMoU2xhYiwgc2xhYiwgc2xhYilcbiBcbiAjaWZkZWYgQ09ORklHX0hVR0VUTEJfUEFHRVxuIEZPTElPX1RZUEVfT1BTKGh1Z2V0bGIsIGh1Z2V0bGIpXG4rXG4rI2lmZGVmIENPTkZJR19NRU1PUllfRkFJTFVSRVxuK3N0YXRpYyBpbmxpbmUgYm9vbCBmb2xpb190ZXN0X2h1Z2VfcG9pc29uKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8pXG4re1xuK1x0cmV0dXJuIChSRUFEX09OQ0UoZm9saW8tXHUwMDNlcGFnZS5wYWdlX3R5cGUpIFx1MDAzZVx1MDAzZSAyMykgPT1cbitcdFx0KChQR1RZX2h1Z2V0bGIgXHUwMDNjXHUwMDNjIDEpIHwgMSk7XG4rfVxuK1xuK3N0YXRpYyBpbmxpbmUgdm9pZCBmb2xpb19zZXRfaHVnZV9wb2lzb24oc3RydWN0IGZvbGlvICpmb2xpbylcbit7XG4rXHRmb2xpby1cdTAwM2VwYWdlLnBhZ2VfdHlwZSB8PSAoMSBcdTAwM2NcdTAwM2MgMjMpO1xuK31cbitcbitzdGF0aWMgaW5saW5lIHZvaWQgZm9saW9fY2xlYXJfaHVnZV9wb2lzb24oc3RydWN0IGZvbGlvICpmb2xpbylcbit7XG4rXHRmb2xpby1cdTAwM2VwYWdlLnBhZ2VfdHlwZSBcdTAwMjY9IH4oMSBcdTAwM2NcdTAwM2MgMjMpO1xuK31cbisjZWxzZVxuK0ZPTElPX1RFU1RfRkxBR19GQUxTRShodWdlX3BvaXNvbilcbisjZW5kaWZcbiAjZWxzZVxuIEZPTElPX1RFU1RfRkxBR19GQUxTRShodWdldGxiKVxuK0ZPTElPX1RFU1RfRkxBR19GQUxTRShodWdlX3BvaXNvbilcbiAjZW5kaWZcbiBcbiBQQUdFX1RZUEVfT1BTKFpzbWFsbG9jLCB6c21hbGxvYywgenNtYWxsb2MpXG5AQCAtMTA2OCwxMCArMTA5NCwxNCBAQCBzdGF0aWMgaW5saW5lIGJvb2wgUGFnZUh1Z2UoY29uc3Qgc3RydWN0IHBhZ2UgKnBhZ2UpXG4gXHRyZXR1cm4gZm9saW9fdGVzdF9odWdldGxiKHBhZ2VfZm9saW8ocGFnZSkpO1xuIH1cbiBcbitib29sIGh1Z2V0bGJfcGFnZV9od3BvaXNvbihjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvLCBjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSk7XG4rYm9vbCBodWdldGxiX3VucmVmX3BhZ2VfaHdwb2lzb24oY29uc3Qgc3RydWN0IHBhZ2UgKnBhZ2UpO1xuK1xuIC8qXG4tICogQ2hlY2sgaWYgYSBwYWdlIGlzIGN1cnJlbnRseSBtYXJrZWQgSFdQb2lzb25lZC4gTm90ZSB0aGF0IHRoaXMgY2hlY2sgaXNcbi0gKiBiZXN0IGVmZm9ydCBvbmx5IGFuZCBpbmhlcmVudGx5IHJhY3k6IHRoZXJlIGlzIG5vIHdheSB0byBzeW5jaHJvbml6ZSB3aXRoXG4tICogZmFpbGluZyBoYXJkd2FyZS5cbisgKiBDaGVjayBpZiBhIHBhZ2UgaXMgY3VycmVudGx5IG1hcmtlZCBIV1BvaXNvbmVkLiAgVGhpcyBjaGVjayBpcyBiZXN0XG4rICogZWZmb3J0IG9ubHkgYW5kIGluaGVyZW50bHkgcmFjeTogdGhlcmUgaXMgbm8gd2F5IHRvIHN5bmNocm9uaXplIHdpdGhcbisgKiBmYWlsaW5nIGhhcmR3YXJlLiAgVGhlIGNhbGxlciBtYXkgbm90IGhhdmUgYSByZWZjb3VudCBvbiB0aGUgZm9saW9cbisgKiBjb250YWluaW5nIHRoZSBwYWdlLCBzbyB3ZSBtdXN0IGJlIGNhcmVmdWwgdG8gbm90IHRyaXAgYW55IGFzc2VydGlvbnMuXG4gICovXG4gc3RhdGljIGlubGluZSBib29sIGlzX3BhZ2VfaHdwb2lzb24oY29uc3Qgc3RydWN0IHBhZ2UgKnBhZ2UpXG4ge1xuQEAgLTEwODAsMTMgKzExMTAsMjYgQEAgc3RhdGljIGlubGluZSBib29sIGlzX3BhZ2VfaHdwb2lzb24oY29uc3Qgc3RydWN0IHBhZ2UgKnBhZ2UpXG4gXHRpZiAoUGFnZUhXUG9pc29uKHBhZ2UpKVxuIFx0XHRyZXR1cm4gdHJ1ZTtcbiBcdGZvbGlvID0gcGFnZV9mb2xpbyhwYWdlKTtcbi1cdHJldHVybiBmb2xpb190ZXN0X2h1Z2V0bGIoZm9saW8pIFx1MDAyNlx1MDAyNiBQYWdlSFdQb2lzb24oXHUwMDI2Zm9saW8tXHUwMDNlcGFnZSk7XG4rXHRpZiAoZm9saW9fdGVzdF9odWdlX3BvaXNvbihmb2xpbykpXG4rXHRcdHJldHVybiBodWdldGxiX3VucmVmX3BhZ2VfaHdwb2lzb24ocGFnZSk7XG4rXHQvKiBJbiBjYXNlIHdlIHJhY2VkIHdpdGggaHVnZXRsYiB0cmFuc2ZlcnJpbmcgZmxhZ3MgKi9cbitcdHJldHVybiBQYWdlSFdQb2lzb24ocGFnZSk7XG4rfVxuK1xuK3N0YXRpYyBpbmxpbmUgYm9vbCBpc19yZWZfcGFnZV9od3BvaXNvbihjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuK1x0XHRjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSlcbit7XG4rXHRpZiAoUGFnZUhXUG9pc29uKHBhZ2UpKVxuK1x0XHRyZXR1cm4gdHJ1ZTtcbitcdGlmIChmb2xpb190ZXN0X2h1Z2V0bGIoZm9saW8pKVxuK1x0XHRyZXR1cm4gaHVnZXRsYl9wYWdlX2h3cG9pc29uKGZvbGlvLCBwYWdlKTtcbitcdHJldHVybiBmYWxzZTtcbiB9XG4gXG4tc3RhdGljIGlubGluZSBib29sIGZvbGlvX2NvbnRhaW5faHdwb2lzb25lZF9wYWdlKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4rc3RhdGljIGlubGluZSBib29sIGZvbGlvX2hhc19od3BvaXNvbmVkX3BhZ2UoY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbylcbiB7XG4tXHRyZXR1cm4gZm9saW9fdGVzdF9od3BvaXNvbihmb2xpbykgfHxcbi1cdCAgICAoZm9saW9fdGVzdF9sYXJnZShmb2xpbykgXHUwMDI2XHUwMDI2IGZvbGlvX3Rlc3RfaGFzX2h3cG9pc29uZWQoZm9saW8pKTtcbitcdHJldHVybiBQYWdlSFdQb2lzb24oXHUwMDI2Zm9saW8tXHUwMDNlcGFnZSkgfHxcbitcdCAgICAgICAoZm9saW9fdGVzdF9sYXJnZShmb2xpbykgXHUwMDI2XHUwMDI2IGZvbGlvX3Rlc3RfaGFzX2h3cG9pc29uZWQoZm9saW8pKTtcbiB9XG4gXG4gYm9vbCBpc19mcmVlX2J1ZGR5X3BhZ2UoY29uc3Qgc3RydWN0IHBhZ2UgKnBhZ2UpO1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGFnZW1hcC5oIGIvaW5jbHVkZS9saW51eC9wYWdlbWFwLmhcbmluZGV4IDJjMzcxOGQ1OTJkNmRkLi4yMmQ0ODkzNWZmZGE3YyAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvcGFnZW1hcC5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L3BhZ2VtYXAuaFxuQEAgLTIxMCw2ICsyMTAsNyBAQCBlbnVtIG1hcHBpbmdfZmxhZ3Mge1xuIFx0QVNfV1JJVEVCQUNLX01BWV9ERUFETE9DS19PTl9SRUNMQUlNID0gOSxcbiBcdEFTX0tFUk5FTF9GSUxFID0gMTAsXHQvKiBtYXBwaW5nIGZvciBhIGZha2Uga2VybmVsIGZpbGUgdGhhdCBzaG91bGRuJ3RcbiBcdFx0XHRcdCAgIGFjY291bnQgdXNhZ2UgdG8gdXNlciBjZ3JvdXBzICovXG4rXHRBU19BVVRIT1JJVEFUSVZFID0gMTEsXHQvKiBJZiB3ZSBtaXNzIGluIHRoZSBwYWdlIGNhY2hlLCBpdCdzIGEgaG9sZSAqL1xuIFx0LyogQml0cyAxNi0yNSBhcmUgdXNlZCBmb3IgRk9MSU9fT1JERVIgKi9cbiBcdEFTX0ZPTElPX09SREVSX0JJVFMgPSA1LFxuIFx0QVNfRk9MSU9fT1JERVJfTUlOID0gMTYsXG5AQCAtMzQ1LDYgKzM0NiwxNiBAQCBzdGF0aWMgaW5saW5lIGJvb2wgbWFwcGluZ193cml0ZWJhY2tfbWF5X2RlYWRsb2NrX29uX3JlY2xhaW0oY29uc3Qgc3RydWN0IGFkZHJlc1xuIFx0cmV0dXJuIHRlc3RfYml0KEFTX1dSSVRFQkFDS19NQVlfREVBRExPQ0tfT05fUkVDTEFJTSwgXHUwMDI2bWFwcGluZy1cdTAwM2VmbGFncyk7XG4gfVxuIFxuK3N0YXRpYyBpbmxpbmUgdm9pZCBtYXBwaW5nX3NldF9hdXRob3JpdGF0aXZlKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nKVxuK3tcbitcdHNldF9iaXQoQVNfQVVUSE9SSVRBVElWRSwgXHUwMDI2bWFwcGluZy1cdTAwM2VmbGFncyk7XG4rfVxuK1xuK3N0YXRpYyBpbmxpbmUgYm9vbCBtYXBwaW5nX2lzX2F1dGhvcml0YXRpdmUoY29uc3Qgc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcpXG4re1xuK1x0cmV0dXJuIHRlc3RfYml0KEFTX0FVVEhPUklUQVRJVkUsIFx1MDAyNm1hcHBpbmctXHUwMDNlZmxhZ3MpO1xuK31cbitcbiBzdGF0aWMgaW5saW5lIGdmcF90IG1hcHBpbmdfZ2ZwX21hc2soY29uc3Qgc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcpXG4ge1xuIFx0cmV0dXJuIG1hcHBpbmctXHUwMDNlZ2ZwX21hc2s7XG5AQCAtMzczLDcgKzM4NCw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBtYXBwaW5nX3NldF9nZnBfbWFzayhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbSwgZ2ZwX3QgbWFzaylcbiAgKiBhc3N1bXB0aW9ucyBhYm91dCBtYXhpbXVtIG9yZGVyIGlmIFRIUCBhcmUgZGlzYWJsZWQsIGJ1dCA4IHNlZW1zIGxpa2VcbiAgKiBhIGdvb2Qgb3JkZXIgKHRoYXQncyAxTUIgaWYgeW91J3JlIHVzaW5nIDRrQiBwYWdlcylcbiAgKi9cbi0jaWZkZWYgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFXG4rI2lmZGVmIENPTkZJR19MQVJHRV9GT0xJT1xuICNkZWZpbmUgUFJFRkVSUkVEX01BWF9QQUdFQ0FDSEVfT1JERVJcdEhQQUdFX1BNRF9PUkRFUlxuICNlbHNlXG4gI2RlZmluZSBQUkVGRVJSRURfTUFYX1BBR0VDQUNIRV9PUkRFUlx0OFxuQEAgLTM5NCw3ICs0MDUsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgbWFwcGluZ19zZXRfZ2ZwX21hc2soc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm0sIGdmcF90IG1hc2spXG4gICovXG4gc3RhdGljIGlubGluZSBzaXplX3QgbWFwcGluZ19tYXhfZm9saW9fc2l6ZV9zdXBwb3J0ZWQodm9pZClcbiB7XG4tXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UpKVxuK1x0aWYgKElTX0VOQUJMRUQoQ09ORklHX0xBUkdFX0ZPTElPKSlcbiBcdFx0cmV0dXJuIDFVIFx1MDAzY1x1MDAzYyAoUEFHRV9TSElGVCArIE1BWF9QQUdFQ0FDSEVfT1JERVIpO1xuIFx0cmV0dXJuIFBBR0VfU0laRTtcbiB9XG5AQCAtNDA1LDI5ICs0MTYsMjMgQEAgc3RhdGljIGlubGluZSBzaXplX3QgbWFwcGluZ19tYXhfZm9saW9fc2l6ZV9zdXBwb3J0ZWQodm9pZClcbiAgKiBAbWluOiBNaW5pbXVtIGZvbGlvIG9yZGVyIChiZXR3ZWVuIDAtTUFYX1BBR0VDQUNIRV9PUkRFUiBpbmNsdXNpdmUpLlxuICAqIEBtYXg6IE1heGltdW0gZm9saW8gb3JkZXIgKGJldHdlZW4gQG1pbi1NQVhfUEFHRUNBQ0hFX09SREVSIGluY2x1c2l2ZSkuXG4gICpcbi0gKiBUaGUgZmlsZXN5c3RlbSBzaG91bGQgY2FsbCB0aGlzIGZ1bmN0aW9uIGluIGl0cyBpbm9kZSBjb25zdHJ1Y3RvciB0b1xuLSAqIGluZGljYXRlIHdoaWNoIGJhc2Ugc2l6ZSAobWluKSBhbmQgbWF4aW11bSBzaXplIChtYXgpIG9mIGZvbGlvIHRoZSBWRlNcbi0gKiBjYW4gdXNlIHRvIGNhY2hlIHRoZSBjb250ZW50cyBvZiB0aGUgZmlsZS4gIFRoaXMgc2hvdWxkIG9ubHkgYmUgdXNlZFxuLSAqIGlmIHRoZSBmaWxlc3lzdGVtIG5lZWRzIHNwZWNpYWwgaGFuZGxpbmcgb2YgZm9saW8gc2l6ZXMgKGllIHRoZXJlIGlzXG4tICogc29tZXRoaW5nIHRoZSBjb3JlIGNhbm5vdCBrbm93KS5cbisgKiBUaGUgZmlsZXN5c3RlbSBzaG91bGQgY2FsbCB0aGlzIGZ1bmN0aW9uIGluIGl0cyBpbm9kZSBjb25zdHJ1Y3RvclxuKyAqIHRvIGluZGljYXRlIHdoaWNoIHNpemUgZm9saW9zIGNhbiBiZSB1c2VkIHRvIGNhY2hlIHRoZSBjb250ZW50cyBvZlxuKyAqIHRoZSBpbm9kZS4gIFRoaXMgc2hvdWxkIG9ubHkgYmUgdXNlZCBpZiB0aGUgZmlsZXN5c3RlbSBuZWVkcyBzcGVjaWFsXG4rICogaGFuZGxpbmcgb2YgZm9saW8gc2l6ZXMgKGllIHRoZXJlIGlzIHNvbWV0aGluZyB0aGUgY29yZSBjYW5ub3Qga25vdykuXG4gICogRG8gbm90IHR1bmUgaXQgYmFzZWQgb24sIGVnLCBpX3NpemUuXG4gICpcbisgKiBodWdldGxiIGNhbGxzIHRoaXMgd2l0aCBvcmRlcnMgbGFyZ2VyIHRoYW4gTUFYX1BBR0VDQUNIRV9PUkRFUi5cbisgKiBOb3JtYWwgZmlsZXN5c3RlbXMgc2hvdWxkIG5vdCBkbyB0aGlzLlxuKyAqXG4gICogQ29udGV4dDogVGhpcyBzaG91bGQgbm90IGJlIGNhbGxlZCB3aGlsZSB0aGUgaW5vZGUgaXMgYWN0aXZlIGFzIGl0XG4gICogaXMgbm9uLWF0b21pYy5cbiAgKi9cbiBzdGF0aWMgaW5saW5lIHZvaWQgbWFwcGluZ19zZXRfZm9saW9fb3JkZXJfcmFuZ2Uoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXG4tXHRcdFx0XHRcdFx0IHVuc2lnbmVkIGludCBtaW4sXG4tXHRcdFx0XHRcdFx0IHVuc2lnbmVkIGludCBtYXgpXG4rXHRcdHVuc2lnbmVkIGludCBtaW4sIHVuc2lnbmVkIGludCBtYXgpXG4ge1xuLVx0aWYgKCFJU19FTkFCTEVEKENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSkpXG4rXHRpZiAoIUlTX0VOQUJMRUQoQ09ORklHX0xBUkdFX0ZPTElPKSlcbiBcdFx0cmV0dXJuO1xuLVxuLVx0aWYgKG1pbiBcdTAwM2UgTUFYX1BBR0VDQUNIRV9PUkRFUilcbi1cdFx0bWluID0gTUFYX1BBR0VDQUNIRV9PUkRFUjtcbi1cbi1cdGlmIChtYXggXHUwMDNlIE1BWF9QQUdFQ0FDSEVfT1JERVIpXG4tXHRcdG1heCA9IE1BWF9QQUdFQ0FDSEVfT1JERVI7XG4tXG4gXHRpZiAobWF4IFx1MDAzYyBtaW4pXG4gXHRcdG1heCA9IG1pbjtcbiBcbkBAIC00NjAsNyArNDY1LDcgQEAgc3RhdGljIGlubGluZSB2b2lkIG1hcHBpbmdfc2V0X2xhcmdlX2ZvbGlvcyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZylcbiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludFxuIG1hcHBpbmdfbWF4X2ZvbGlvX29yZGVyKGNvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nKVxuIHtcbi1cdGlmICghSVNfRU5BQkxFRChDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UpKVxuK1x0aWYgKCFJU19FTkFCTEVEKENPTkZJR19MQVJHRV9GT0xJTykpXG4gXHRcdHJldHVybiAwO1xuIFx0cmV0dXJuIChtYXBwaW5nLVx1MDAzZWZsYWdzIFx1MDAyNiBBU19GT0xJT19PUkRFUl9NQVhfTUFTSykgXHUwMDNlXHUwMDNlIEFTX0ZPTElPX09SREVSX01BWDtcbiB9XG5AQCAtNDY4LDcgKzQ3Myw3IEBAIG1hcHBpbmdfbWF4X2ZvbGlvX29yZGVyKGNvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nKVxuIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50XG4gbWFwcGluZ19taW5fZm9saW9fb3JkZXIoY29uc3Qgc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcpXG4ge1xuLVx0aWYgKCFJU19FTkFCTEVEKENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSkpXG4rXHRpZiAoIUlTX0VOQUJMRUQoQ09ORklHX0xBUkdFX0ZPTElPKSlcbiBcdFx0cmV0dXJuIDA7XG4gXHRyZXR1cm4gKG1hcHBpbmctXHUwMDNlZmxhZ3MgXHUwMDI2IEFTX0ZPTElPX09SREVSX01JTl9NQVNLKSBcdTAwM2VcdTAwM2UgQVNfRk9MSU9fT1JERVJfTUlOO1xuIH1cbkBAIC01MjQsNyArNTI5LDcgQEAgc3RhdGljIGlubGluZSBib29sIG1hcHBpbmdfbGFyZ2VfZm9saW9fc3VwcG9ydChjb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGlcbiAgKlxuICAqIFJldHVybjogVHJ1ZSBpZiBQTUQtc2l6ZWQgZm9saW9zIGFyZSBzdXBwb3J0ZWQsIG90aGVyd2lzZSBmYWxzZS5cbiAgKi9cbi0jaWZkZWYgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFXG4rI2lmZGVmIENPTkZJR19MQVJHRV9GT0xJT1xuIHN0YXRpYyBpbmxpbmUgYm9vbCBtYXBwaW5nX3BtZF9mb2xpb19zdXBwb3J0KGNvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nKVxuIHtcbiBcdC8qIEFTX0ZPTElPX09SREVSIGlzIG9ubHkgcmVhc29uYWJsZSBmb3IgcGFnZWNhY2hlIGZvbGlvcyAqL1xuZGlmZiAtLWdpdCBhL21tL0tjb25maWcgYi9tbS9LY29uZmlnXG5pbmRleCA5ZTBjYTQ4MjQ5MDU0Zi4uZTY2NmRkMTRjYTBjM2QgMTAwNjQ0XG4tLS0gYS9tbS9LY29uZmlnXG4rKysgYi9tbS9LY29uZmlnXG5AQCAtODQzLDExICs4NDMsMTUgQEAgY29uZmlnIFBFUlNJU1RFTlRfSFVHRV9aRVJPX0ZPTElPXG4gY29uZmlnIE1NX0lEXG4gXHRkZWZfYm9vbCBuXG4gXG4rY29uZmlnIExBUkdFX0ZPTElPXG4rXHRkZWZfYm9vbCBuXG4rXHRzZWxlY3QgWEFSUkFZX01VTFRJXG4rXG4gbWVudWNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRVxuIFx0Ym9vbCBcIlRyYW5zcGFyZW50IEh1Z2VwYWdlIFN1cHBvcnRcIlxuIFx0ZGVwZW5kcyBvbiBIQVZFX0FSQ0hfVFJBTlNQQVJFTlRfSFVHRVBBR0UgXHUwMDI2XHUwMDI2ICFQUkVFTVBUX1JUXG4gXHRzZWxlY3QgQ09NUEFDVElPTlxuLVx0c2VsZWN0IFhBUlJBWV9NVUxUSVxuK1x0c2VsZWN0IExBUkdFX0ZPTElPXG4gXHRzZWxlY3QgTU1fSURcbiBcdGhlbHBcbiBcdCAgVHJhbnNwYXJlbnQgSHVnZXBhZ2VzIGFsbG93cyB0aGUga2VybmVsIHRvIHVzZSBodWdlIHBhZ2VzIGFuZFxuZGlmZiAtLWdpdCBhL21tL2ZpbGVtYXAuYyBiL21tL2ZpbGVtYXAuY1xuaW5kZXggNThlYjlkMjQwNjQzNDguLjVhOGNjMjBlNjI0ZTRkIDEwMDY0NFxuLS0tIGEvbW0vZmlsZW1hcC5jXG4rKysgYi9tbS9maWxlbWFwLmNcbkBAIC0yNDgzLDYgKzI0ODMsOCBAQCBzdGF0aWMgdm9pZCBmaWxlbWFwX2dldF9yZWFkX2JhdGNoKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxuIFxuIFx0XHRpZiAoIWZvbGlvX2JhdGNoX2FkZChmYmF0Y2gsIGZvbGlvKSlcbiBcdFx0XHRicmVhaztcbitcdFx0aWYgKGZvbGlvX2hhc19od3BvaXNvbmVkX3BhZ2UoZm9saW8pKVxuK1x0XHRcdGJyZWFrO1xuIFx0XHRpZiAoIWZvbGlvX3Rlc3RfdXB0b2RhdGUoZm9saW8pKVxuIFx0XHRcdGJyZWFrO1xuIFx0XHRpZiAoZm9saW9fdGVzdF9yZWFkYWhlYWQoZm9saW8pKVxuQEAgLTI2OTUsNiArMjY5Nyw4IEBAIHN0YXRpYyBpbnQgZmlsZW1hcF9nZXRfcGFnZXMoc3RydWN0IGtpb2NiICppb2NiLCBzaXplX3QgY291bnQsXG4gXHRpZiAoIWZvbGlvX2JhdGNoX2NvdW50KGZiYXRjaCkpIHtcbiBcdFx0REVGSU5FX1JFQURBSEVBRChyYWN0bCwgZmlscCwgXHUwMDI2ZmlscC1cdTAwM2VmX3JhLCBtYXBwaW5nLCBpbmRleCk7XG4gXG4rXHRcdGlmIChtYXBwaW5nX2lzX2F1dGhvcml0YXRpdmUobWFwcGluZykpXG4rXHRcdFx0cmV0dXJuIDA7XG4gXHRcdGlmIChpb2NiLVx1MDAzZWtpX2ZsYWdzIFx1MDAyNiBJT0NCX05PSU8pXG4gXHRcdFx0cmV0dXJuIC1FQUdBSU47XG4gXHRcdGlmIChpb2NiLVx1MDAzZWtpX2ZsYWdzIFx1MDAyNiBJT0NCX05PV0FJVClcbkBAIC0yNzQ5LDYgKzI3NTMsMjkgQEAgc3RhdGljIGlubGluZSBib29sIHBvc19zYW1lX2ZvbGlvKGxvZmZfdCBwb3MxLCBsb2ZmX3QgcG9zMiwgc3RydWN0IGZvbGlvICpmb2xpbylcbiBcdHJldHVybiAocG9zMSBcdTAwM2VcdTAwM2Ugc2hpZnQgPT0gcG9zMiBcdTAwM2VcdTAwM2Ugc2hpZnQpO1xuIH1cbiBcbitzdGF0aWMgc2l6ZV90IGFkanVzdF9yYW5nZV9od3BvaXNvbihjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzaXplX3Qgb2Zmc2V0LFxuK1x0XHRzaXplX3QgYnl0ZXMpXG4re1xuK1x0Y29uc3Qgc3RydWN0IHBhZ2UgKnBhZ2UgPSBmb2xpb19wYWdlKGZvbGlvLCBvZmZzZXQgLyBQQUdFX1NJWkUpO1xuK1x0c2l6ZV90IHNhZmVfYnl0ZXM7XG4rXG4rXHRpZiAoIWZvbGlvX2hhc19od3BvaXNvbmVkX3BhZ2UoZm9saW8pKVxuK1x0XHRyZXR1cm4gYnl0ZXM7XG4rXHRpZiAoaXNfcmVmX3BhZ2VfaHdwb2lzb24oZm9saW8sIHBhZ2UpKVxuK1x0XHRyZXR1cm4gMDtcbitcbitcdC8qIFNhZmUgdG8gcmVhZCB0aGUgcmVtYWluaW5nIGJ5dGVzIGluIHRoaXMgcGFnZS4gKi9cbitcdHNhZmVfYnl0ZXMgPSBQQUdFX1NJWkUgLSAob2Zmc2V0ICUgUEFHRV9TSVpFKTtcbitcdHBhZ2UrKztcbitcbitcdC8qIENoZWNrIGVhY2ggcmVtYWluaW5nIHBhZ2UgYXMgbG9uZyBhcyB3ZSBhcmUgbm90IGRvbmUgeWV0LiAqL1xuK1x0Zm9yICg7IHNhZmVfYnl0ZXMgXHUwMDNjIGJ5dGVzOyBzYWZlX2J5dGVzICs9IFBBR0VfU0laRSwgcGFnZSsrKVxuK1x0XHRpZiAoaXNfcmVmX3BhZ2VfaHdwb2lzb24oZm9saW8sIHBhZ2UpKVxuK1x0XHRcdGJyZWFrO1xuK1xuK1x0cmV0dXJuIG1pbihzYWZlX2J5dGVzLCBieXRlcyk7XG4rfVxuK1xuIHN0YXRpYyB2b2lkIGZpbGVtYXBfZW5kX2Ryb3BiZWhpbmRfcmVhZChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIHtcbiBcdGlmICghZm9saW9fdGVzdF9kcm9wYmVoaW5kKGZvbGlvKSlcbkBAIC0yODI4LDYgKzI4NTUsMjIgQEAgc3NpemVfdCBmaWxlbWFwX3JlYWQoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsXG4gXHRcdFx0Z290byBwdXRfZm9saW9zO1xuIFx0XHRlbmRfb2Zmc2V0ID0gbWluX3QobG9mZl90LCBpc2l6ZSwgaW9jYi1cdTAwM2VraV9wb3MgKyBpdGVyLVx1MDAzZWNvdW50KTtcbiBcbitcdFx0aWYgKCFmb2xpb19iYXRjaF9jb3VudChcdTAwMjZmYmF0Y2gpKSB7XG4rXHRcdFx0c2l6ZV90IGZzaXplID0gbWFwcGluZ19taW5fZm9saW9fbnJieXRlcyhtYXBwaW5nKTtcbitcdFx0XHRzaXplX3Qgb2Zmc2V0ID0gaW9jYi1cdTAwM2VraV9wb3MgXHUwMDI2IChmc2l6ZSAtIDEpO1xuK1x0XHRcdHNpemVfdCBieXRlcyA9IG1pbl90KGxvZmZfdCwgZW5kX29mZnNldCAtIGlvY2ItXHUwMDNla2lfcG9zLFxuK1x0XHRcdFx0XHQgICAgIGZzaXplIC0gb2Zmc2V0KTtcbitcdFx0XHRzaXplX3QgY29waWVkID0gaW92X2l0ZXJfemVybyhieXRlcywgaXRlcik7XG4rXG4rXHRcdFx0YWxyZWFkeV9yZWFkICs9IGNvcGllZDtcbitcdFx0XHRpb2NiLVx1MDAzZWtpX3BvcyArPSBjb3BpZWQ7XG4rXHRcdFx0bGFzdF9wb3MgPSBpb2NiLVx1MDAzZWtpX3BvcztcbitcbitcdFx0XHRpZiAoY29waWVkIFx1MDAzYyBieXRlcylcbitcdFx0XHRcdGVycm9yID0gLUVGQVVMVDtcbitcdFx0XHRjb250aW51ZTtcbitcdFx0fVxuK1xuIFx0XHQvKlxuIFx0XHQgKiBPbmNlIHdlIHN0YXJ0IGNvcHlpbmcgZGF0YSwgd2UgZG9uJ3Qgd2FudCB0byBiZSB0b3VjaGluZyBhbnlcbiBcdFx0ICogY2FjaGVsaW5lcyB0aGF0IG1pZ2h0IGJlIGNvbnRlbmRlZDpcbkBAIC0yODYyLDE0ICsyOTA1LDE4IEBAIHNzaXplX3QgZmlsZW1hcF9yZWFkKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICppdGVyLFxuIFx0XHRcdGlmICh3cml0YWJseV9tYXBwZWQpXG4gXHRcdFx0XHRmbHVzaF9kY2FjaGVfZm9saW8oZm9saW8pO1xuIFxuLVx0XHRcdGNvcGllZCA9IGNvcHlfZm9saW9fdG9faXRlcihmb2xpbywgb2Zmc2V0LCBieXRlcywgaXRlcik7XG4rXHRcdFx0Y29waWVkID0gYWRqdXN0X3JhbmdlX2h3cG9pc29uKGZvbGlvLCBvZmZzZXQsIGJ5dGVzKTtcbitcdFx0XHRpZiAoY29waWVkIFx1MDAzYyBieXRlcylcbitcdFx0XHRcdGVycm9yID0gLUVJTztcbitcdFx0XHRjb3BpZWQgPSBjb3B5X2ZvbGlvX3RvX2l0ZXIoZm9saW8sIG9mZnNldCwgY29waWVkLCBpdGVyKTtcbiBcbiBcdFx0XHRhbHJlYWR5X3JlYWQgKz0gY29waWVkO1xuIFx0XHRcdGlvY2ItXHUwMDNla2lfcG9zICs9IGNvcGllZDtcbiBcdFx0XHRsYXN0X3BvcyA9IGlvY2ItXHUwMDNla2lfcG9zO1xuIFxuIFx0XHRcdGlmIChjb3BpZWQgXHUwMDNjIGJ5dGVzKSB7XG4tXHRcdFx0XHRlcnJvciA9IC1FRkFVTFQ7XG4rXHRcdFx0XHRpZiAoIWVycm9yKVxuK1x0XHRcdFx0XHRlcnJvciA9IC1FRkFVTFQ7XG4gXHRcdFx0XHRicmVhaztcbiBcdFx0XHR9XG4gXHRcdH1cbmRpZmYgLS1naXQgYS9tbS9odWdlX21lbW9yeS5jIGIvbW0vaHVnZV9tZW1vcnkuY1xuaW5kZXggMmJjY2IwYTUzYTBhNjAuLjM1MzM0MDMwOTEwNzRjIDEwMDY0NFxuLS0tIGEvbW0vaHVnZV9tZW1vcnkuY1xuKysrIGIvbW0vaHVnZV9tZW1vcnkuY1xuQEAgLTQ0MTMsNyArNDQxMyw3IEBAIHN0YXRpYyBib29sIHRocF91bmRlcnVzZWQoc3RydWN0IGZvbGlvICpmb2xpbylcbiBcdGlmIChraHVnZXBhZ2VkX21heF9wdGVzX25vbmUgPT0gSFBBR0VfUE1EX05SIC0gMSlcbiBcdFx0cmV0dXJuIGZhbHNlO1xuIFxuLVx0aWYgKGZvbGlvX2NvbnRhaW5faHdwb2lzb25lZF9wYWdlKGZvbGlvKSlcbitcdGlmIChmb2xpb19oYXNfaHdwb2lzb25lZF9wYWdlKGZvbGlvKSlcbiBcdFx0cmV0dXJuIGZhbHNlO1xuIFxuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgZm9saW9fbnJfcGFnZXMoZm9saW8pOyBpKyspIHtcbmRpZmYgLS1naXQgYS9tbS9odWdldGxiLmMgYi9tbS9odWdldGxiLmNcbmluZGV4IDU3MTIxMmI4MDgzNWVjLi5hYWFjNmUyYWY0YzI0YSAxMDA2NDRcbi0tLSBhL21tL2h1Z2V0bGIuY1xuKysrIGIvbW0vaHVnZXRsYi5jXG5AQCAtMTI1NSw3ICsxMjU1LDcgQEAgc3RhdGljIHN0cnVjdCBmb2xpbyAqZGVxdWV1ZV9odWdldGxiX2ZvbGlvX25vZGVfZXhhY3Qoc3RydWN0IGhzdGF0ZSAqaCxcbiBcdFx0aWYgKHBpbiBcdTAwMjZcdTAwMjYgIWZvbGlvX2lzX2xvbmd0ZXJtX3Bpbm5hYmxlKGZvbGlvKSlcbiBcdFx0XHRjb250aW51ZTtcbiBcbi1cdFx0aWYgKGZvbGlvX3Rlc3RfaHdwb2lzb24oZm9saW8pKVxuK1x0XHRpZiAoZm9saW9fdGVzdF9oYXNfaHdwb2lzb25lZChmb2xpbykpXG4gXHRcdFx0Y29udGludWU7XG4gXG4gXHRcdGlmIChpc19taWdyYXRlX2lzb2xhdGVfcGFnZShcdTAwMjZmb2xpby1cdTAwM2VwYWdlKSlcbkBAIC0xNDk4LDEwICsxNDk4LDEwIEBAIHN0YXRpYyB2b2lkIF9fdXBkYXRlX2FuZF9mcmVlX2h1Z2V0bGJfZm9saW8oc3RydWN0IGhzdGF0ZSAqaCxcbiBcdH1cbiBcbiBcdC8qXG4tXHQgKiBNb3ZlIFBhZ2VIV1BvaXNvbiBmbGFnIGZyb20gaGVhZCBwYWdlIHRvIHRoZSByYXcgZXJyb3IgcGFnZXMsXG4tXHQgKiB3aGljaCBtYWtlcyBhbnkgaGVhbHRoeSBzdWJwYWdlcyByZXVzYWJsZS5cbitcdCAqIE1vdmUgSFdQb2lzb24gZmxhZyB0byBlYWNoIGVycm9yIHBhZ2VcbitcdCAqIHdoaWNoIG1ha2VzIGFueSBoZWFsdGh5IHBhZ2VzIHJldXNhYmxlLlxuIFx0ICovXG4tXHRpZiAodW5saWtlbHkoZm9saW9fdGVzdF9od3BvaXNvbihmb2xpbykpKVxuK1x0aWYgKHVubGlrZWx5KGZvbGlvX3Rlc3RfaGFzX2h3cG9pc29uZWQoZm9saW8pKSlcbiBcdFx0Zm9saW9fY2xlYXJfaHVnZXRsYl9od3BvaXNvbihmb2xpbyk7XG4gXG4gXHRWTV9CVUdfT05fRk9MSU8oZm9saW9fcmVmX2NvdW50KGZvbGlvKSwgZm9saW8pO1xuQEAgLTE3NzUsNyArMTc3NSw3IEBAIHZvaWQgaW5pdF9uZXdfaHVnZXRsYl9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuICAqIHN0YWJsZS4gIER1ZSB0byBsb2NraW5nIG9yZGVyLCB3ZSBjYW4gb25seSB0cnlsb2NrX3dyaXRlLiAgSWYgd2UgY2FuXG4gICogbm90IGdldCB0aGUgbG9jaywgc2ltcGx5IHJldHVybiBOVUxMIHRvIGNhbGxlci5cbiAgKi9cbi1zdHJ1Y3QgYWRkcmVzc19zcGFjZSAqaHVnZXRsYl9mb2xpb19tYXBwaW5nX2xvY2tfd3JpdGUoc3RydWN0IGZvbGlvICpmb2xpbylcbitzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqaHVnZXRsYl9mb2xpb19tYXBwaW5nX2xvY2tfd3JpdGUoY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbylcbiB7XG4gXHRzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyA9IGZvbGlvX21hcHBpbmcoZm9saW8pO1xuIFxuQEAgLTM5OTgsNyArMzk5OCw3IEBAIGxvbmcgZGVtb3RlX3Bvb2xfaHVnZV9wYWdlKHN0cnVjdCBoc3RhdGUgKnNyYywgbm9kZW1hc2tfdCAqbm9kZXNfYWxsb3dlZCxcbiBcdFx0c3RydWN0IGZvbGlvICpmb2xpbywgKm5leHQ7XG4gXG4gXHRcdGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShmb2xpbywgbmV4dCwgXHUwMDI2c3JjLVx1MDAzZWh1Z2VwYWdlX2ZyZWVsaXN0c1tub2RlXSwgbHJ1KSB7XG4tXHRcdFx0aWYgKGZvbGlvX3Rlc3RfaHdwb2lzb24oZm9saW8pKVxuK1x0XHRcdGlmIChmb2xpb190ZXN0X2hhc19od3BvaXNvbmVkKGZvbGlvKSlcbiBcdFx0XHRcdGNvbnRpbnVlO1xuIFxuIFx0XHRcdHJlbW92ZV9odWdldGxiX2ZvbGlvKHNyYywgZm9saW8sIGZhbHNlKTtcbkBAIC01ODA5LDcgKzU4MDksNyBAQCBzdGF0aWMgdm1fZmF1bHRfdCBodWdldGxiX25vX3BhZ2Uoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXG4gXHRcdCAqIGRvbid0IGhhdmUgaHdwb2lzb25lZCBzd2FwIGVudHJ5IGZvciBlcnJvcmVkIHZpcnR1YWwgYWRkcmVzcy5cbiBcdFx0ICogU28gd2UgbmVlZCB0byBibG9jayBodWdlcGFnZSBmYXVsdCBieSBQR19od3BvaXNvbiBiaXQgY2hlY2suXG4gXHRcdCAqL1xuLVx0XHRpZiAodW5saWtlbHkoZm9saW9fdGVzdF9od3BvaXNvbihmb2xpbykpKSB7XG4rXHRcdGlmICh1bmxpa2VseShmb2xpb190ZXN0X2hhc19od3BvaXNvbmVkKGZvbGlvKSkpIHtcbiBcdFx0XHRyZXQgPSBWTV9GQVVMVF9IV1BPSVNPTl9MQVJHRSB8XG4gXHRcdFx0XHRWTV9GQVVMVF9TRVRfSElOREVYKGhzdGF0ZV9pbmRleChoKSk7XG4gXHRcdFx0Z290byBiYWNrb3V0X3VubG9ja2VkO1xuQEAgLTYzMTgsNyArNjMxOCw3IEBAIGludCBodWdldGxiX21maWxsX2F0b21pY19wdGUocHRlX3QgKmRzdF9wdGUsXG4gXHRwdGwgPSBodWdlX3B0ZV9sb2NrKGgsIGRzdF9tbSwgZHN0X3B0ZSk7XG4gXG4gXHRyZXQgPSAtRUlPO1xuLVx0aWYgKGZvbGlvX3Rlc3RfaHdwb2lzb24oZm9saW8pKVxuK1x0aWYgKGZvbGlvX3Rlc3RfaGFzX2h3cG9pc29uZWQoZm9saW8pKVxuIFx0XHRnb3RvIG91dF9yZWxlYXNlX3VubG9jaztcbiBcbiBcdHJldCA9IC1FRVhJU1Q7XG5kaWZmIC0tZ2l0IGEvbW0vbWVtb3J5LWZhaWx1cmUuYyBiL21tL21lbW9yeS1mYWlsdXJlLmNcbmluZGV4IDUxNTA4YTU1YzQwNTVlLi4zMmY5MTkzNWIyMTA3MCAxMDA2NDRcbi0tLSBhL21tL21lbW9yeS1mYWlsdXJlLmNcbisrKyBiL21tL21lbW9yeS1mYWlsdXJlLmNcbkBAIC0xODA4LDYzICsxODA4LDg2IEBAIEVYUE9SVF9TWU1CT0xfR1BMKG1mX2RheF9raWxsX3Byb2NzKTtcbiBcbiAjaWZkZWYgQ09ORklHX0hVR0VUTEJfUEFHRVxuIFxuKy8qIFByb3RlY3RzIGFsbCBsaXN0cyBvZiBod3BfcGFnZXMgKi9cbitzdGF0aWMgREVGSU5FX1NQSU5MT0NLKGh3cF9wYWdlX2xvY2spO1xuK1xuIC8qXG4tICogU3RydWN0IHJhd19od3BfcGFnZSByZXByZXNlbnRzIGluZm9ybWF0aW9uIGFib3V0IFwicmF3IGVycm9yIHBhZ2VcIixcbi0gKiBjb25zdHJ1Y3Rpbmcgc2luZ2x5IGxpbmtlZCBsaXN0IGZyb20gLVx1MDAzZV9odWdldGxiX2h3cG9pc29uIGZpZWxkIG9mIGZvbGlvLlxuKyAqIGh3cF9wYWdlIHJlcHJlc2VudHMgaW5mb3JtYXRpb24gYWJvdXQgXCJlcnJvciBwYWdlXCIsXG4rICogY29uc3RydWN0aW5nIHNpbmdseSBsaW5rZWQgbGlzdCBmcm9tIGZvbGlvLVx1MDAzZWh1Z2V0bGJfaHdwb2lzb24gZmllbGQuXG4gICovXG4tc3RydWN0IHJhd19od3BfcGFnZSB7XG4tXHRzdHJ1Y3QgbGxpc3Rfbm9kZSBub2RlO1xuK3N0cnVjdCBod3BfcGFnZSB7XG4rXHRzdHJ1Y3QgaHdwX3BhZ2UgKm5leHQ7XG4gXHRzdHJ1Y3QgcGFnZSAqcGFnZTtcbiB9O1xuIFxuLXN0YXRpYyBpbmxpbmUgc3RydWN0IGxsaXN0X2hlYWQgKnJhd19od3BfbGlzdF9oZWFkKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4rc3RhdGljIGJvb2wgcHJlY2lzZV9wYWdlX3BvaXNvbmVkKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8sXG4rXHRcdGNvbnN0IHN0cnVjdCBwYWdlICpwYWdlKVxuIHtcbi1cdHJldHVybiAoc3RydWN0IGxsaXN0X2hlYWQgKilcdTAwMjZmb2xpby1cdTAwM2VfaHVnZXRsYl9od3BvaXNvbjtcbi19XG4tXG4tYm9vbCBpc19yYXdfaHdwb2lzb25fcGFnZV9pbl9odWdlcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSlcbi17XG4tXHRzdHJ1Y3QgbGxpc3RfaGVhZCAqcmF3X2h3cF9oZWFkO1xuLVx0c3RydWN0IHJhd19od3BfcGFnZSAqcDtcbi1cdHN0cnVjdCBmb2xpbyAqZm9saW8gPSBwYWdlX2ZvbGlvKHBhZ2UpO1xuLVx0Ym9vbCByZXQgPSBmYWxzZTtcbi1cbi1cdGlmICghZm9saW9fdGVzdF9od3BvaXNvbihmb2xpbykpXG4tXHRcdHJldHVybiBmYWxzZTtcbi1cbi1cdGlmICghZm9saW9fdGVzdF9odWdldGxiKGZvbGlvKSlcbi1cdFx0cmV0dXJuIFBhZ2VIV1BvaXNvbihwYWdlKTtcbitcdGNvbnN0IHN0cnVjdCBod3BfcGFnZSAqcDtcbitcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4gXG4gXHQvKlxuLVx0ICogV2hlbiBSYXdId3BVbnJlbGlhYmxlIGlzIHNldCwga2VybmVsIGxvc3QgdHJhY2sgb2Ygd2hpY2ggc3VicGFnZXNcbi1cdCAqIGFyZSBIV1BPSVNPTi4gU28gcmV0dXJuIGFzIGlmIEFMTCBzdWJwYWdlcyBhcmUgSFdQT0lTT05lZC5cbitcdCAqIFdoZW4gUmF3SHdwVW5yZWxpYWJsZSBpcyBzZXQsIGtlcm5lbCBsb3N0IHRyYWNrIG9mIHdoaWNoIHBhZ2VzXG4rXHQgKiBhcmUgSFdQT0lTT04uIFNvIHJldHVybiBhcyBpZiBBTEwgcGFnZXMgYXJlIEhXUE9JU09OZWQuXG4gXHQgKi9cbiBcdGlmIChmb2xpb190ZXN0X2h1Z2V0bGJfcmF3X2h3cF91bnJlbGlhYmxlKGZvbGlvKSlcbiBcdFx0cmV0dXJuIHRydWU7XG4gXG4tXHRtdXRleF9sb2NrKFx1MDAyNm1mX211dGV4KTtcbi1cbi1cdHJhd19od3BfaGVhZCA9IHJhd19od3BfbGlzdF9oZWFkKGZvbGlvKTtcbi1cdGxsaXN0X2Zvcl9lYWNoX2VudHJ5KHAsIHJhd19od3BfaGVhZC1cdTAwM2VmaXJzdCwgbm9kZSkge1xuLVx0XHRpZiAocGFnZSA9PSBwLVx1MDAzZXBhZ2UpIHtcbi1cdFx0XHRyZXQgPSB0cnVlO1xuK1x0c3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2aHdwX3BhZ2VfbG9jaywgZmxhZ3MpO1xuK1x0Zm9yIChwID0gZm9saW8tXHUwMDNlaHVnZXRsYl9od3BvaXNvbjsgcDsgcCA9IHAtXHUwMDNlbmV4dCkge1xuK1x0XHRpZiAocGFnZSA9PSBwLVx1MDAzZXBhZ2UpXG4gXHRcdFx0YnJlYWs7XG4tXHRcdH1cbiBcdH1cbitcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2aHdwX3BhZ2VfbG9jaywgZmxhZ3MpO1xuIFxuLVx0bXV0ZXhfdW5sb2NrKFx1MDAyNm1mX211dGV4KTtcbitcdHJldHVybiBwICE9IE5VTEw7XG4rfVxuIFxuKy8qXG4rICogQ2hlY2sgaWYgYSBnaXZlbiBAcGFnZSBpbiBhIGh1Z2V0bGIgZm9saW8gaXMgSFdQT0lTT04uXG4rICovXG4rYm9vbCBodWdldGxiX3BhZ2VfaHdwb2lzb24oY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbywgY29uc3Qgc3RydWN0IHBhZ2UgKnBhZ2UpXG4re1xuK1x0aWYgKCFmb2xpb190ZXN0X2hhc19od3BvaXNvbmVkKGZvbGlvKSlcbitcdFx0cmV0dXJuIGZhbHNlO1xuK1xuK1x0cmV0dXJuIHByZWNpc2VfcGFnZV9wb2lzb25lZChmb2xpbywgcGFnZSk7XG4rfVxuK1xuKy8qXG4rICogV2UgaGF2ZSBubyByZWZlcmVuY2Ugb24gdGhlIGZvbGlvIGNvbnRhaW5pbmcgdGhpcyBwYWdlLlxuKyAqIFRoZSBodWdldGxiX2xvY2sga2VlcHMgaHVnZXRsYiBmb2xpb3MgZnJvbSBiZWluZyBmcmVlZC5cbisgKi9cbitib29sIGh1Z2V0bGJfdW5yZWZfcGFnZV9od3BvaXNvbihjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSlcbit7XG4rXHRjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvO1xuK1x0dW5zaWduZWQgbG9uZyBmbGFncztcbitcdGJvb2wgcmV0O1xuK1xuK1x0c3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2aHVnZXRsYl9sb2NrLCBmbGFncyk7XG4rXHRmb2xpbyA9IHBhZ2VfZm9saW8ocGFnZSk7XG4rXHRpZiAoIWZvbGlvX3Rlc3RfaHVnZV9wb2lzb24oZm9saW8pKSB7XG4rXHRcdHJldCA9IFBhZ2VIV1BvaXNvbihwYWdlKTtcbitcdFx0Z290byB1bmxvY2s7XG4rXHR9XG4rXG4rXHRyZXQgPSBwcmVjaXNlX3BhZ2VfcG9pc29uZWQoZm9saW8sIHBhZ2UpO1xuK3VubG9jazpcbitcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2aHVnZXRsYl9sb2NrLCBmbGFncyk7XG4gXHRyZXR1cm4gcmV0O1xuIH1cbiBcbiBzdGF0aWMgdW5zaWduZWQgbG9uZyBfX2ZvbGlvX2ZyZWVfcmF3X2h3cChzdHJ1Y3QgZm9saW8gKmZvbGlvLCBib29sIG1vdmVfZmxhZylcbiB7XG4tXHRzdHJ1Y3QgbGxpc3Rfbm9kZSAqaGVhZDtcbi1cdHN0cnVjdCByYXdfaHdwX3BhZ2UgKnAsICpuZXh0O1xuK1x0c3RydWN0IGh3cF9wYWdlICpwLCAqbmV4dDtcbiBcdHVuc2lnbmVkIGxvbmcgY291bnQgPSAwO1xuIFxuLVx0aGVhZCA9IGxsaXN0X2RlbF9hbGwocmF3X2h3cF9saXN0X2hlYWQoZm9saW8pKTtcbi1cdGxsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocCwgbmV4dCwgaGVhZCwgbm9kZSkge1xuK1x0bmV4dCA9IGZvbGlvLVx1MDAzZWh1Z2V0bGJfaHdwb2lzb247XG4rXHRmb2xpby1cdTAwM2VodWdldGxiX2h3cG9pc29uID0gTlVMTDtcbitcbitcdHdoaWxlIChuZXh0KSB7XG4rXHRcdHAgPSBuZXh0O1xuK1x0XHRuZXh0ID0gcC1cdTAwM2VuZXh0O1xuIFx0XHRpZiAobW92ZV9mbGFnKVxuIFx0XHRcdFNldFBhZ2VIV1BvaXNvbihwLVx1MDAzZXBhZ2UpO1xuIFx0XHRlbHNlXG5AQCAtMTg4MSwzNCArMTkwNCw1OCBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBfX2ZvbGlvX2ZyZWVfcmF3X2h3cChzdHJ1Y3QgZm9saW8gKmZvbGlvLCBib29sIG1vdmVfZmxhZylcbiAjZGVmaW5lXHRNRl9IVUdFVExCX0ZPTElPX1BSRV9QT0lTT05FRFx0M1x0LyogZm9saW8gYWxyZWFkeSBwb2lzb25lZCAqL1xuICNkZWZpbmVcdE1GX0hVR0VUTEJfUEFHRV9QUkVfUE9JU09ORURcdDRcdC8qIGV4YWN0IHBhZ2UgYWxyZWFkeSBwb2lzb25lZCAqL1xuICNkZWZpbmVcdE1GX0hVR0VUTEJfUkVUUllcdFx0NVx0LyogaHVnZXBhZ2UgaXMgYnVzeSwgcmV0cnkgKi9cbitcbitzdGF0aWMgaW5saW5lIGludCBodWdldGxiX3NldF9wb2lzb24oc3RydWN0IGZvbGlvICpmb2xpbylcbit7XG4rXHRpZiAoZm9saW9fdGVzdF9zZXRfaGFzX2h3cG9pc29uZWQoZm9saW8pKVxuK1x0XHRyZXR1cm4gTUZfSFVHRVRMQl9GT0xJT19QUkVfUE9JU09ORUQ7XG4rXHRmb2xpb19zZXRfaHVnZV9wb2lzb24oZm9saW8pO1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK3N0YXRpYyBpbmxpbmUgaW50IGh1Z2V0bGJfY2xlYXJfcG9pc29uKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4re1xuK1x0aWYgKCFmb2xpb190ZXN0X2hhc19od3BvaXNvbmVkKGZvbGlvKSlcbitcdFx0cmV0dXJuIC1FQlVTWTtcbitcdGZvbGlvX2NsZWFyX2h1Z2VfcG9pc29uKGZvbGlvKTtcbitcdGZvbGlvX2NsZWFyX2hhc19od3BvaXNvbmVkKGZvbGlvKTtcbitcdHJldHVybiAwO1xuK31cbitcbiAvKlxuICAqIFNldCBodWdldGxiIGZvbGlvIGFzIGh3cG9pc29uZWQsIHVwZGF0ZSBmb2xpbyBwcml2YXRlIHJhdyBod3BvaXNvbiBsaXN0XG4gICogdG8ga2VlcCB0cmFjayBvZiB0aGUgcG9pc29uZWQgcGFnZXMuXG4gICovXG4gc3RhdGljIGludCBodWdldGxiX3VwZGF0ZV9od3BvaXNvbihzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgcGFnZSAqcGFnZSlcbiB7XG4tXHRzdHJ1Y3QgbGxpc3RfaGVhZCAqaGVhZDtcbi1cdHN0cnVjdCByYXdfaHdwX3BhZ2UgKnJhd19od3A7XG4tXHRzdHJ1Y3QgcmF3X2h3cF9wYWdlICpwO1xuLVx0aW50IHJldCA9IGZvbGlvX3Rlc3Rfc2V0X2h3cG9pc29uKGZvbGlvKSA/IE1GX0hVR0VUTEJfRk9MSU9fUFJFX1BPSVNPTkVEIDogMDtcbitcdHN0cnVjdCBod3BfcGFnZSAqcDtcbitcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4rXHRpbnQgcmV0ID0gaHVnZXRsYl9zZXRfcG9pc29uKGZvbGlvKTtcbiBcbiBcdC8qXG4gXHQgKiBPbmNlIHRoZSBod3BvaXNvbiBodWdlcGFnZSBoYXMgbG9zdCByZWxpYWJsZSByYXcgZXJyb3IgaW5mbyxcbi1cdCAqIHRoZXJlIGlzIGxpdHRsZSBtZWFuaW5nIHRvIGtlZXAgYWRkaXRpb25hbCBlcnJvciBpbmZvIHByZWNpc2VseSxcbi1cdCAqIHNvIHNraXAgdG8gYWRkIGFkZGl0aW9uYWwgcmF3IGVycm9yIGluZm8uXG4rXHQgKiB0aGVyZSBpcyBubyBwb2ludCBpbiBrZWVwaW5nIGFkZGl0aW9uYWwgZXJyb3IgaW5mbyBwcmVjaXNlbHksXG4rXHQgKiBzbyBza2lwIGFkZGluZyBhZGRpdGlvbmFsIHJhdyBlcnJvciBpbmZvLlxuIFx0ICovXG4gXHRpZiAoZm9saW9fdGVzdF9odWdldGxiX3Jhd19od3BfdW5yZWxpYWJsZShmb2xpbykpXG4gXHRcdHJldHVybiBNRl9IVUdFVExCX0ZPTElPX1BSRV9QT0lTT05FRDtcbi1cdGhlYWQgPSByYXdfaHdwX2xpc3RfaGVhZChmb2xpbyk7XG4tXHRsbGlzdF9mb3JfZWFjaF9lbnRyeShwLCBoZWFkLVx1MDAzZWZpcnN0LCBub2RlKSB7XG4rXG4rXHRzcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZod3BfcGFnZV9sb2NrLCBmbGFncyk7XG4rXHRmb3IgKHAgPSBmb2xpby1cdTAwM2VodWdldGxiX2h3cG9pc29uOyBwOyBwID0gcC1cdTAwM2VuZXh0KSB7XG4gXHRcdGlmIChwLVx1MDAzZXBhZ2UgPT0gcGFnZSlcbi1cdFx0XHRyZXR1cm4gTUZfSFVHRVRMQl9QQUdFX1BSRV9QT0lTT05FRDtcbitcdFx0XHRicmVhaztcbitcdH1cbitcbitcdGlmIChwKSB7XG4rXHRcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2aHdwX3BhZ2VfbG9jaywgZmxhZ3MpO1xuK1x0XHRyZXR1cm4gTUZfSFVHRVRMQl9QQUdFX1BSRV9QT0lTT05FRDtcbiBcdH1cbiBcbi1cdHJhd19od3AgPSBrbWFsbG9jX29iaihzdHJ1Y3QgcmF3X2h3cF9wYWdlLCBHRlBfQVRPTUlDKTtcbi1cdGlmIChyYXdfaHdwKSB7XG4tXHRcdHJhd19od3AtXHUwMDNlcGFnZSA9IHBhZ2U7XG4tXHRcdGxsaXN0X2FkZChcdTAwMjZyYXdfaHdwLVx1MDAzZW5vZGUsIGhlYWQpO1xuK1x0cCA9IGttYWxsb2Nfb2JqKCpwLCBHRlBfQVRPTUlDKTtcbitcdGlmIChwKSB7XG4rXHRcdHAtXHUwMDNlcGFnZSA9IHBhZ2U7XG4rXHRcdHAtXHUwMDNlbmV4dCA9IGZvbGlvLVx1MDAzZWh1Z2V0bGJfaHdwb2lzb247XG4rXHRcdGZvbGlvLVx1MDAzZWh1Z2V0bGJfaHdwb2lzb24gPSBwO1xuIFx0fSBlbHNlIHtcbiBcdFx0LypcbiBcdFx0ICogRmFpbGVkIHRvIHNhdmUgcmF3IGVycm9yIGluZm8uICBXZSBubyBsb25nZXIgdHJhY2UgYWxsXG5AQCAtMTkxNywxNiArMTk2NCwyMCBAQCBzdGF0aWMgaW50IGh1Z2V0bGJfdXBkYXRlX2h3cG9pc29uKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBwYWdlICpwYWdlKVxuIFx0XHQgKi9cbiBcdFx0Zm9saW9fc2V0X2h1Z2V0bGJfcmF3X2h3cF91bnJlbGlhYmxlKGZvbGlvKTtcbiBcdFx0Lypcbi1cdFx0ICogT25jZSBodWdldGxiX3Jhd19od3BfdW5yZWxpYWJsZSBpcyBzZXQsIHJhd19od3BfcGFnZSBpcyBub3RcbitcdFx0ICogT25jZSBodWdldGxiX3Jhd19od3BfdW5yZWxpYWJsZSBpcyBzZXQsIGh3cF9wYWdlIGlzIG5vdFxuIFx0XHQgKiB1c2VkIGFueSBtb3JlLCBzbyBmcmVlIGl0LlxuIFx0XHQgKi9cbiBcdFx0X19mb2xpb19mcmVlX3Jhd19od3AoZm9saW8sIGZhbHNlKTtcbiBcdH1cbitcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2aHdwX3BhZ2VfbG9jaywgZmxhZ3MpO1xuIFx0cmV0dXJuIHJldDtcbiB9XG4gXG4gc3RhdGljIHVuc2lnbmVkIGxvbmcgZm9saW9fZnJlZV9yYXdfaHdwKHN0cnVjdCBmb2xpbyAqZm9saW8sIGJvb2wgbW92ZV9mbGFnKVxuIHtcbitcdHVuc2lnbmVkIGxvbmcgY291bnQ7XG4rXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuK1xuIFx0LypcbiBcdCAqIGh1Z2V0bGJfdm1lbW1hcF9vcHRpbWl6ZWQgaHVnZXBhZ2VzIGNhbid0IGJlIGZyZWVkIGJlY2F1c2Ugc3RydWN0XG4gXHQgKiBwYWdlcyBmb3IgdGFpbCBwYWdlcyBhcmUgcmVxdWlyZWQgYnV0IHRoZXkgZG9uJ3QgZXhpc3QuXG5AQCAtMTk0MSw3ICsxOTkyLDExIEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIGZvbGlvX2ZyZWVfcmF3X2h3cChzdHJ1Y3QgZm9saW8gKmZvbGlvLCBib29sIG1vdmVfZmxhZylcbiBcdGlmIChmb2xpb190ZXN0X2h1Z2V0bGJfcmF3X2h3cF91bnJlbGlhYmxlKGZvbGlvKSlcbiBcdFx0cmV0dXJuIDA7XG4gXG4tXHRyZXR1cm4gX19mb2xpb19mcmVlX3Jhd19od3AoZm9saW8sIG1vdmVfZmxhZyk7XG4rXHRzcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZod3BfcGFnZV9sb2NrLCBmbGFncyk7XG4rXHRjb3VudCA9IF9fZm9saW9fZnJlZV9yYXdfaHdwKGZvbGlvLCBtb3ZlX2ZsYWcpO1xuK1x0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZod3BfcGFnZV9sb2NrLCBmbGFncyk7XG4rXG4rXHRyZXR1cm4gY291bnQ7XG4gfVxuIFxuIHZvaWQgZm9saW9fY2xlYXJfaHVnZXRsYl9od3BvaXNvbihzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuQEAgLTE5NTAsOCArMjAwNSw4IEBAIHZvaWQgZm9saW9fY2xlYXJfaHVnZXRsYl9od3BvaXNvbihzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIFx0XHRyZXR1cm47XG4gXHRpZiAoZm9saW9fdGVzdF9odWdldGxiX3ZtZW1tYXBfb3B0aW1pemVkKGZvbGlvKSlcbiBcdFx0cmV0dXJuO1xuLVx0Zm9saW9fY2xlYXJfaHdwb2lzb24oZm9saW8pO1xuIFx0Zm9saW9fZnJlZV9yYXdfaHdwKGZvbGlvLCB0cnVlKTtcbitcdGZvbGlvX2NsZWFyX2hhc19od3BvaXNvbmVkKGZvbGlvKTtcbiB9XG4gXG4gc3RhdGljIGludCBnZXRfaHVnZV9wYWdlX2Zvcl9od3BvaXNvbih1bnNpZ25lZCBsb25nIHBmbiwgaW50IGZsYWdzLFxuQEAgLTIxMDQsNiArMjE1OSwxMSBAQCBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgZm9saW9fZnJlZV9yYXdfaHdwKHN0cnVjdCBmb2xpbyAqZm9saW8sIGJvb2wgZmxhZylcbiB7XG4gXHRyZXR1cm4gMDtcbiB9XG4rXG4rc3RhdGljIGlubGluZSBpbnQgaHVnZXRsYl9jbGVhcl9wb2lzb24oc3RydWN0IGZvbGlvICpmb2xpbylcbit7XG4rXHRyZXR1cm4gMDtcbit9XG4gI2VuZGlmXHQvKiBDT05GSUdfSFVHRVRMQl9QQUdFICovXG4gXG4gLyogRHJvcCB0aGUgZXh0cmEgcmVmY291bnQgaW4gY2FzZSB3ZSBjb21lIGZyb20gbWFkdmlzZSgpICovXG5AQCAtMjY5NSw4ICsyNzU1LDggQEAgaW50IHVucG9pc29uX21lbW9yeSh1bnNpZ25lZCBsb25nIHBmbilcbiBcdFx0Z290byB1bmxvY2tfbXV0ZXg7XG4gXHR9XG4gXG4tXHRpZiAoIVBhZ2VIV1BvaXNvbihwKSkge1xuLVx0XHR1bnBvaXNvbl9wcl9pbmZvKFwiJSNseDogcGFnZSB3YXMgYWxyZWFkeSB1bnBvaXNvbmVkXFxuXCIsXG4rXHRpZiAoIWlzX3BhZ2VfaHdwb2lzb24ocCkpIHtcbitcdFx0dW5wb2lzb25fcHJfaW5mbyhcIiUjbHg6IHBhZ2UgaXMgbm90IHBvaXNvbmVkXFxuXCIsXG4gXHRcdFx0XHQgcGZuLCBcdTAwMjZ1bnBvaXNvbl9ycyk7XG4gXHRcdGdvdG8gdW5sb2NrX211dGV4O1xuIFx0fVxuQEAgLTI3MzAsOCArMjc5MCw4IEBAIGludCB1bnBvaXNvbl9tZW1vcnkodW5zaWduZWQgbG9uZyBwZm4pXG4gXHRcdFx0Y291bnQgPSBmb2xpb19mcmVlX3Jhd19od3AoZm9saW8sIGZhbHNlKTtcbiBcdFx0XHRpZiAoY291bnQgPT0gMClcbiBcdFx0XHRcdGdvdG8gdW5sb2NrX211dGV4O1xuK1x0XHRcdHJldCA9IGh1Z2V0bGJfY2xlYXJfcG9pc29uKGZvbGlvKTtcbiBcdFx0fVxuLVx0XHRyZXQgPSBmb2xpb190ZXN0X2NsZWFyX2h3cG9pc29uKGZvbGlvKSA/IDAgOiAtRUJVU1k7XG4gXHR9IGVsc2UgaWYgKGdocCBcdTAwM2MgMCkge1xuIFx0XHRpZiAoZ2hwID09IC1FSFdQT0lTT04pIHtcbiBcdFx0XHRyZXQgPSBwdXRfcGFnZV9iYWNrX2J1ZGR5KHApID8gMCA6IC1FQlVTWTtcbkBAIC0yNzQwLDE2ICsyODAwLDE4IEBAIGludCB1bnBvaXNvbl9tZW1vcnkodW5zaWduZWQgbG9uZyBwZm4pXG4gXHRcdFx0dW5wb2lzb25fcHJfaW5mbyhcIiUjbHg6IGZhaWxlZCB0byBncmFiIHBhZ2VcXG5cIixcbiBcdFx0XHRcdFx0IHBmbiwgXHUwMDI2dW5wb2lzb25fcnMpO1xuIFx0XHR9XG4tXHR9IGVsc2Uge1xuLVx0XHRpZiAoZm9saW9fdGVzdF9odWdldGxiKGZvbGlvKSkge1xuLVx0XHRcdGh1Z2UgPSB0cnVlO1xuLVx0XHRcdGNvdW50ID0gZm9saW9fZnJlZV9yYXdfaHdwKGZvbGlvLCBmYWxzZSk7XG4tXHRcdFx0aWYgKGNvdW50ID09IDApIHtcbi1cdFx0XHRcdGZvbGlvX3B1dChmb2xpbyk7XG4tXHRcdFx0XHRnb3RvIHVubG9ja19tdXRleDtcbi1cdFx0XHR9XG4rXHR9IGVsc2UgaWYgKGZvbGlvX3Rlc3RfaHVnZXRsYihmb2xpbykpIHtcbitcdFx0aHVnZSA9IHRydWU7XG4rXHRcdGNvdW50ID0gZm9saW9fZnJlZV9yYXdfaHdwKGZvbGlvLCBmYWxzZSk7XG4rXHRcdGlmIChjb3VudCA9PSAwKSB7XG4rXHRcdFx0Zm9saW9fcHV0KGZvbGlvKTtcbitcdFx0XHRnb3RvIHVubG9ja19tdXRleDtcbiBcdFx0fVxuLVxuK1x0XHRmb2xpb19wdXQoZm9saW8pO1xuK1x0XHRyZXQgPSBodWdldGxiX2NsZWFyX3BvaXNvbihmb2xpbyk7XG4rXHRcdGlmICghcmV0KVxuK1x0XHRcdGZvbGlvX3B1dChmb2xpbyk7XG4rXHR9IGVsc2Uge1xuIFx0XHRmb2xpb19wdXQoZm9saW8pO1xuIFx0XHRpZiAoVGVzdENsZWFyUGFnZUhXUG9pc29uKHApKSB7XG4gXHRcdFx0Zm9saW9fcHV0KGZvbGlvKTtcbmRpZmYgLS1naXQgYS9tbS9tZW1vcnlfaG90cGx1Zy5jIGIvbW0vbWVtb3J5X2hvdHBsdWcuY1xuaW5kZXggN2FjMTlmYWIyMjYzMjQuLjMzMDA3ZThlNTQ2YTA5IDEwMDY0NFxuLS0tIGEvbW0vbWVtb3J5X2hvdHBsdWcuY1xuKysrIGIvbW0vbWVtb3J5X2hvdHBsdWcuY1xuQEAgLTE4MTMsNyArMTgxMyw3IEBAIHN0YXRpYyB2b2lkIGRvX21pZ3JhdGVfcmFuZ2UodW5zaWduZWQgbG9uZyBzdGFydF9wZm4sIHVuc2lnbmVkIGxvbmcgZW5kX3BmbilcbiBcdFx0aWYgKGZvbGlvX3Rlc3RfbGFyZ2UoZm9saW8pKVxuIFx0XHRcdHBmbiA9IGZvbGlvX3Bmbihmb2xpbykgKyBmb2xpb19ucl9wYWdlcyhmb2xpbykgLSAxO1xuIFxuLVx0XHRpZiAoZm9saW9fY29udGFpbl9od3BvaXNvbmVkX3BhZ2UoZm9saW8pKSB7XG4rXHRcdGlmIChmb2xpb19oYXNfaHdwb2lzb25lZF9wYWdlKGZvbGlvKSkge1xuIFx0XHRcdC8qXG4gXHRcdFx0ICogdW5tYXBfcG9pc29uZWRfZm9saW8oKSBjYW5ub3QgaGFuZGxlIGxhcmdlIGZvbGlvc1xuIFx0XHRcdCAqIGluIGFsbCBjYXNlcyB5ZXQuXG5kaWZmIC0tZ2l0IGEvbW0vcm1hcC5jIGIvbW0vcm1hcC5jXG5pbmRleCAxYzc3ZDVkYzA2ZTlmYS4uZmQxOWEwYmZiZmU3NmMgMTAwNjQ0XG4tLS0gYS9tbS9ybWFwLmNcbisrKyBiL21tL3JtYXAuY1xuQEAgLTE5NzgsNiArMTk3OCwyMiBAQCBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBmb2xpb191bm1hcF9wdGVfYmF0Y2goc3RydWN0IGZvbGlvICpmb2xpbyxcbiBcdFx0XHRcdCAgICAgRlBCX1JFU1BFQ1RfV1JJVEUgfCBGUEJfUkVTUEVDVF9TT0ZUX0RJUlRZKTtcbiB9XG4gXG4rLypcbisgKiBTaW5jZSB3ZSBjYW5ub3Qgc3BsaXQgYSBodWdldGxiIGZvbGlvLCB3ZSB3YW50IHRvIGluc2VydCBhIHBvaXNvblxuKyAqIGVudHJ5IGludG8gdGhlIHBhZ2UgdGFibGUgZm9yIHRoZSB3aG9sZSBmb2xpbyBldmVuIGlmIG9ubHkgb25lIHBhZ2VcbisgKiBpcyBwb2lzb25lZC4gIE90aGVyd2lzZSwgd2UndmUgc3BsaXQgZG93biB0byB0aGUgUFRFIGxldmVsIGFuZCB3ZSBvbmx5XG4rICogd2FudCB0byBwb2lzb24gdGhlIHByZWNpc2UgcGFnZVxuKyAqL1xuK3N0YXRpYyBib29sIHR0dV9jcmVhdGVfaHdwb2lzb24oY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbyxcbitcdFx0Y29uc3Qgc3RydWN0IHBhZ2UgKnBhZ2UsIGVudW0gdHR1X2ZsYWdzIGZsYWdzKVxuK3tcbitcdGlmICghKGZsYWdzIFx1MDAyNiBUVFVfSFdQT0lTT04pKVxuK1x0XHRyZXR1cm4gZmFsc2U7XG4rXHRpZiAoZm9saW9fdGVzdF9odWdldGxiKGZvbGlvKSlcbitcdFx0cmV0dXJuIGZvbGlvX3Rlc3RfaGFzX2h3cG9pc29uZWQoZm9saW8pO1xuK1x0cmV0dXJuIFBhZ2VIV1BvaXNvbihwYWdlKTtcbit9XG4rXG4gLypcbiAgKiBAYXJnOiBlbnVtIHR0dV9mbGFncyB3aWxsIGJlIHBhc3NlZCB0byB0aGlzIGFyZ3VtZW50XG4gICovXG5AQCAtMTk5Myw3ICsyMDA5LDYgQEAgc3RhdGljIGJvb2wgdHJ5X3RvX3VubWFwX29uZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbiBcdGVudW0gdHR1X2ZsYWdzIGZsYWdzID0gKGVudW0gdHR1X2ZsYWdzKShsb25nKWFyZztcbiBcdHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMgPSAxLCBlbmRfYWRkcjtcbiBcdHVuc2lnbmVkIGxvbmcgcGZuO1xuLVx0dW5zaWduZWQgbG9uZyBoc3ogPSAwO1xuIFx0aW50IHB0ZXMgPSAwO1xuIFxuIFx0LypcbkBAIC0yMDIzLDkgKzIwMzgsNiBAQCBzdGF0aWMgYm9vbCB0cnlfdG9fdW5tYXBfb25lKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuIFx0XHQgKi9cbiBcdFx0YWRqdXN0X3JhbmdlX2lmX3BtZF9zaGFyaW5nX3Bvc3NpYmxlKHZtYSwgXHUwMDI2cmFuZ2Uuc3RhcnQsXG4gXHRcdFx0XHRcdFx0ICAgICBcdTAwMjZyYW5nZS5lbmQpO1xuLVxuLVx0XHQvKiBXZSBuZWVkIHRoZSBodWdlIHBhZ2Ugc2l6ZSBmb3Igc2V0X2h1Z2VfcHRlX2F0KCkgKi9cbi1cdFx0aHN6ID0gaHVnZV9wYWdlX3NpemUoaHN0YXRlX3ZtYSh2bWEpKTtcbiBcdH1cbiBcdG1tdV9ub3RpZmllcl9pbnZhbGlkYXRlX3JhbmdlX3N0YXJ0KFx1MDAyNnJhbmdlKTtcbiBcbkBAIC0yMTIxLDcgKzIxMzMsOCBAQCBzdGF0aWMgYm9vbCB0cnlfdG9fdW5tYXBfb25lKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuIFx0XHRcdCAqIFRoZSB0cnlfdG9fdW5tYXAoKSBpcyBvbmx5IHBhc3NlZCBhIGh1Z2V0bGIgcGFnZVxuIFx0XHRcdCAqIGluIHRoZSBjYXNlIHdoZXJlIHRoZSBodWdldGxiIHBhZ2UgaXMgcG9pc29uZWQuXG4gXHRcdFx0ICovXG4tXHRcdFx0Vk1fQlVHX09OX1BBR0UoIVBhZ2VIV1BvaXNvbihzdWJwYWdlKSwgc3VicGFnZSk7XG4rXHRcdFx0Vk1fQlVHX09OX0ZPTElPKCFmb2xpb19oYXNfaHdwb2lzb25lZF9wYWdlKGZvbGlvKSxcbitcdFx0XHRcdFx0Zm9saW8pO1xuIFx0XHRcdC8qXG4gXHRcdFx0ICogaHVnZV9wbWRfdW5zaGFyZSBtYXkgdW5tYXAgYW4gZW50aXJlIFBNRCBwYWdlLlxuIFx0XHRcdCAqIFRoZXJlIGlzIG5vIHdheSBvZiBrbm93aW5nIGV4YWN0bHkgd2hpY2ggUE1EcyBtYXlcbkBAIC0yMjAwLDEyICsyMjEzLDEyIEBAIHN0YXRpYyBib29sIHRyeV90b191bm1hcF9vbmUoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4gXHRcdC8qIFVwZGF0ZSBoaWdoIHdhdGVybWFyayBiZWZvcmUgd2UgbG93ZXIgcnNzICovXG4gXHRcdHVwZGF0ZV9oaXdhdGVyX3JzcyhtbSk7XG4gXG4tXHRcdGlmIChQYWdlSFdQb2lzb24oc3VicGFnZSkgXHUwMDI2XHUwMDI2IChmbGFncyBcdTAwMjYgVFRVX0hXUE9JU09OKSkge1xuK1x0XHRpZiAodHR1X2NyZWF0ZV9od3BvaXNvbihmb2xpbywgc3VicGFnZSwgZmxhZ3MpKSB7XG4gXHRcdFx0cHRldmFsID0gc3dwX2VudHJ5X3RvX3B0ZShtYWtlX2h3cG9pc29uX2VudHJ5KHN1YnBhZ2UpKTtcbiBcdFx0XHRpZiAoZm9saW9fdGVzdF9odWdldGxiKGZvbGlvKSkge1xuIFx0XHRcdFx0aHVnZXRsYl9jb3VudF9zdWIoZm9saW9fbnJfcGFnZXMoZm9saW8pLCBtbSk7XG4gXHRcdFx0XHRzZXRfaHVnZV9wdGVfYXQobW0sIGFkZHJlc3MsIHB2bXcucHRlLCBwdGV2YWwsXG4tXHRcdFx0XHRcdFx0aHN6KTtcbitcdFx0XHRcdFx0XHRmb2xpb19zaXplKGZvbGlvKSk7XG4gXHRcdFx0fSBlbHNlIHtcbiBcdFx0XHRcdGRlY19tbV9jb3VudGVyKG1tLCBtbV9jb3VudGVyKGZvbGlvKSk7XG4gXHRcdFx0XHRzZXRfcHRlX2F0KG1tLCBhZGRyZXNzLCBwdm13LnB0ZSwgcHRldmFsKTtcbkBAIC0yNDIzLDcgKzI0MzYsNiBAQCBzdGF0aWMgYm9vbCB0cnlfdG9fbWlncmF0ZV9vbmUoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4gXHRzdHJ1Y3QgbW11X25vdGlmaWVyX3JhbmdlIHJhbmdlO1xuIFx0ZW51bSB0dHVfZmxhZ3MgZmxhZ3MgPSAoZW51bSB0dHVfZmxhZ3MpKGxvbmcpYXJnO1xuIFx0dW5zaWduZWQgbG9uZyBwZm47XG4tXHR1bnNpZ25lZCBsb25nIGhzeiA9IDA7XG4gXG4gXHQvKlxuIFx0ICogV2hlbiByYWNpbmcgYWdhaW5zdCBlLmcuIHphcF9wdGVfcmFuZ2UoKSBvbiBhbm90aGVyIGNwdSxcbkBAIC0yNDUyLDkgKzI0NjQsNiBAQCBzdGF0aWMgYm9vbCB0cnlfdG9fbWlncmF0ZV9vbmUoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4gXHRcdCAqL1xuIFx0XHRhZGp1c3RfcmFuZ2VfaWZfcG1kX3NoYXJpbmdfcG9zc2libGUodm1hLCBcdTAwMjZyYW5nZS5zdGFydCxcbiBcdFx0XHRcdFx0XHQgICAgIFx1MDAyNnJhbmdlLmVuZCk7XG4tXG4tXHRcdC8qIFdlIG5lZWQgdGhlIGh1Z2UgcGFnZSBzaXplIGZvciBzZXRfaHVnZV9wdGVfYXQoKSAqL1xuLVx0XHRoc3ogPSBodWdlX3BhZ2Vfc2l6ZShoc3RhdGVfdm1hKHZtYSkpO1xuIFx0fVxuIFx0bW11X25vdGlmaWVyX2ludmFsaWRhdGVfcmFuZ2Vfc3RhcnQoXHUwMDI2cmFuZ2UpO1xuIFxuQEAgLTI2MDcsMTQgKzI2MTYsMTQgQEAgc3RhdGljIGJvb2wgdHJ5X3RvX21pZ3JhdGVfb25lKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuIFx0XHQvKiBVcGRhdGUgaGlnaCB3YXRlcm1hcmsgYmVmb3JlIHdlIGxvd2VyIHJzcyAqL1xuIFx0XHR1cGRhdGVfaGl3YXRlcl9yc3MobW0pO1xuIFxuLVx0XHRpZiAoUGFnZUhXUG9pc29uKHN1YnBhZ2UpKSB7XG4rXHRcdGlmICh0dHVfY3JlYXRlX2h3cG9pc29uKGZvbGlvLCBzdWJwYWdlLCBUVFVfSFdQT0lTT04pKSB7XG4gXHRcdFx0Vk1fV0FSTl9PTl9GT0xJTyhmb2xpb19pc19kZXZpY2VfcHJpdmF0ZShmb2xpbyksIGZvbGlvKTtcbiBcbiBcdFx0XHRwdGV2YWwgPSBzd3BfZW50cnlfdG9fcHRlKG1ha2VfaHdwb2lzb25fZW50cnkoc3VicGFnZSkpO1xuIFx0XHRcdGlmIChmb2xpb190ZXN0X2h1Z2V0bGIoZm9saW8pKSB7XG4gXHRcdFx0XHRodWdldGxiX2NvdW50X3N1Yihmb2xpb19ucl9wYWdlcyhmb2xpbyksIG1tKTtcbiBcdFx0XHRcdHNldF9odWdlX3B0ZV9hdChtbSwgYWRkcmVzcywgcHZtdy5wdGUsIHB0ZXZhbCxcbi1cdFx0XHRcdFx0XHRoc3opO1xuK1x0XHRcdFx0XHRcdGZvbGlvX3NpemUoZm9saW8pKTtcbiBcdFx0XHR9IGVsc2Uge1xuIFx0XHRcdFx0ZGVjX21tX2NvdW50ZXIobW0sIG1tX2NvdW50ZXIoZm9saW8pKTtcbiBcdFx0XHRcdHNldF9wdGVfYXQobW0sIGFkZHJlc3MsIHB2bXcucHRlLCBwdGV2YWwpO1xuQEAgLTI2NDQsNyArMjY1Myw4IEBAIHN0YXRpYyBib29sIHRyeV90b19taWdyYXRlX29uZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbiBcdFx0XHRpZiAoYXJjaF91bm1hcF9vbmUobW0sIHZtYSwgYWRkcmVzcywgcHRldmFsKSBcdTAwM2MgMCkge1xuIFx0XHRcdFx0aWYgKGZvbGlvX3Rlc3RfaHVnZXRsYihmb2xpbykpXG4gXHRcdFx0XHRcdHNldF9odWdlX3B0ZV9hdChtbSwgYWRkcmVzcywgcHZtdy5wdGUsXG4tXHRcdFx0XHRcdFx0XHRwdGV2YWwsIGhzeik7XG4rXHRcdFx0XHRcdFx0XHRwdGV2YWwsXG4rXHRcdFx0XHRcdFx0XHRmb2xpb19zaXplKGZvbGlvKSk7XG4gXHRcdFx0XHRlbHNlXG4gXHRcdFx0XHRcdHNldF9wdGVfYXQobW0sIGFkZHJlc3MsIHB2bXcucHRlLCBwdGV2YWwpO1xuIFx0XHRcdFx0cmV0ID0gZmFsc2U7XG5AQCAtMjY1Nyw3ICsyNjY3LDggQEAgc3RhdGljIGJvb2wgdHJ5X3RvX21pZ3JhdGVfb25lKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuIFx0XHRcdFx0aWYgKGFub25fZXhjbHVzaXZlIFx1MDAyNlx1MDAyNlxuIFx0XHRcdFx0ICAgIGh1Z2V0bGJfdHJ5X3NoYXJlX2Fub25fcm1hcChmb2xpbykpIHtcbiBcdFx0XHRcdFx0c2V0X2h1Z2VfcHRlX2F0KG1tLCBhZGRyZXNzLCBwdm13LnB0ZSxcbi1cdFx0XHRcdFx0XHRcdHB0ZXZhbCwgaHN6KTtcbitcdFx0XHRcdFx0XHRcdHB0ZXZhbCxcbitcdFx0XHRcdFx0XHRcdGZvbGlvX3NpemUoZm9saW8pKTtcbiBcdFx0XHRcdFx0cmV0ID0gZmFsc2U7XG4gXHRcdFx0XHRcdHBhZ2Vfdm1hX21hcHBlZF93YWxrX2RvbmUoXHUwMDI2cHZtdyk7XG4gXHRcdFx0XHRcdGJyZWFrO1xuQEAgLTI3MDMsNyArMjcxNCw3IEBAIHN0YXRpYyBib29sIHRyeV90b19taWdyYXRlX29uZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbiBcdFx0XHR9XG4gXHRcdFx0aWYgKGZvbGlvX3Rlc3RfaHVnZXRsYihmb2xpbykpXG4gXHRcdFx0XHRzZXRfaHVnZV9wdGVfYXQobW0sIGFkZHJlc3MsIHB2bXcucHRlLCBzd3BfcHRlLFxuLVx0XHRcdFx0XHRcdGhzeik7XG4rXHRcdFx0XHRcdFx0Zm9saW9fc2l6ZShmb2xpbykpO1xuIFx0XHRcdGVsc2VcbiBcdFx0XHRcdHNldF9wdGVfYXQobW0sIGFkZHJlc3MsIHB2bXcucHRlLCBzd3BfcHRlKTtcbiBcdFx0XHR0cmFjZV9zZXRfbWlncmF0aW9uX3B0ZShhZGRyZXNzLCBwdGVfdmFsKHN3cF9wdGUpLFxuZGlmZiAtLWdpdCBhL21tL3NobWVtLmMgYi9tbS9zaG1lbS5jXG5pbmRleCBiNTFmODNjOTcwYmIzNy4uNDkyYzliZWYzNjIwNzQgMTAwNjQ0XG4tLS0gYS9tbS9zaG1lbS5jXG4rKysgYi9tbS9zaG1lbS5jXG5AQCAtMzI0MCw3ICszMjQwLDcgQEAgc2htZW1fd3JpdGVfYmVnaW4oY29uc3Qgc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcbiBcdGlmIChyZXQpXG4gXHRcdHJldHVybiByZXQ7XG4gXG4tXHRpZiAoZm9saW9fY29udGFpbl9od3BvaXNvbmVkX3BhZ2UoZm9saW8pKSB7XG4rXHRpZiAoZm9saW9faGFzX2h3cG9pc29uZWRfcGFnZShmb2xpbykpIHtcbiBcdFx0Zm9saW9fdW5sb2NrKGZvbGlvKTtcbiBcdFx0Zm9saW9fcHV0KGZvbGlvKTtcbiBcdFx0cmV0dXJuIC1FSU87XG5kaWZmIC0tZ2l0IGEvbW0vdm1zY2FuLmMgYi9tbS92bXNjYW4uY1xuaW5kZXggMzVjM2JiMTVhZTk2YTMuLjcwZTU0YWNlMGU3NDFjIDEwMDY0NFxuLS0tIGEvbW0vdm1zY2FuLmNcbisrKyBiL21tL3Ztc2Nhbi5jXG5AQCAtMTA4Niw3ICsxMDg2LDcgQEAgc3RhdGljIHVuc2lnbmVkIGludCBzaHJpbmtfZm9saW9fbGlzdChzdHJ1Y3QgbGlzdF9oZWFkICpmb2xpb19saXN0LFxuIFx0XHRpZiAoIWZvbGlvX3RyeWxvY2soZm9saW8pKVxuIFx0XHRcdGdvdG8ga2VlcDtcbiBcbi1cdFx0aWYgKGZvbGlvX2NvbnRhaW5faHdwb2lzb25lZF9wYWdlKGZvbGlvKSkge1xuK1x0XHRpZiAoZm9saW9faGFzX2h3cG9pc29uZWRfcGFnZShmb2xpbykpIHtcbiBcdFx0XHQvKlxuIFx0XHRcdCAqIHVubWFwX3BvaXNvbmVkX2ZvbGlvKCkgY2FuJ3QgaGFuZGxlIGxhcmdlXG4gXHRcdFx0ICogZm9saW8sIGp1c3Qgc2tpcCBpdC4gbWVtb3J5X2ZhaWx1cmUoKSB3aWxsXG5kaWZmIC0tZ2l0IGEvdmlydC9rdm0vZ3Vlc3RfbWVtZmQuYyBiL3ZpcnQva3ZtL2d1ZXN0X21lbWZkLmNcbmluZGV4IGRiNTdjNTc2NmFiNjA0Li45NGVlZGNjN2YxYTllMCAxMDA2NDRcbi0tLSBhL3ZpcnQva3ZtL2d1ZXN0X21lbWZkLmNcbisrKyBiL3ZpcnQva3ZtL2d1ZXN0X21lbWZkLmNcbkBAIC03NzQsNyArNzc0LDcgQEAgc3RhdGljIHN0cnVjdCBmb2xpbyAqX19rdm1fZ21lbV9nZXRfcGZuKHN0cnVjdCBmaWxlICpmaWxlLFxuIFx0aWYgKElTX0VSUihmb2xpbykpXG4gXHRcdHJldHVybiBmb2xpbztcbiBcbi1cdGlmIChmb2xpb190ZXN0X2h3cG9pc29uKGZvbGlvKSkge1xuK1x0aWYgKGZvbGlvX2hhc19od3BvaXNvbmVkX3BhZ2UoZm9saW8pKSB7XG4gXHRcdGZvbGlvX3VubG9jayhmb2xpbyk7XG4gXHRcdGZvbGlvX3B1dChmb2xpbyk7XG4gXHRcdHJldHVybiBFUlJfUFRSKC1FSFdQT0lTT04pO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjZUMTc6NTE6MzcuMjIyMTAwOTk2WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTIwODIxMTQ1MTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyBUYXJnZXQgSWRlbnRpZmljYXRpb246IE1lbW9yeSBGYWlsdXJlIGFuZCBIdWdldGxiZnMgQ2hhbmdlcyoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBhc3Nlc3MgdGhpcyBwYXRjaCBzZXJpZXMgZm9yIGZ1enppbmcgcmVsZXZhbmNlLiBNeSBpbml0aWFsIGltcHJlc3Npb24gaXMgdGhhdCB0aGVzZSBhcmUgc2lnbmlmaWNhbnQsIGZ1bmN0aW9uYWwgY2hhbmdlcyDigJMgdGhpcyBoaXRzIGh1Z2V0bGJmcywgbWVtb3J5IGZhaWx1cmUgKGh3cG9pc29uLCB3aGljaCBpcyBhIGJpZyBjb25jZXJuKSwgYW5kIGZpbGVtYXAgcmVhZCBsb2dpYy4gTXkgc3BpZGVyIHNlbnNlIGlzIHRpbmdsaW5nLCB0aGlzIGZlZWxzIGltcG9ydGFudC5cblxuU3BlY2lmaWNhbGx5LCBpdCBsb29rcyBsaWtlIGBhZGp1c3RfcmFuZ2VfaHdwb2lzb25gIGluIGBmcy9odWdldGxiZnMvaW5vZGUuY2AgaGFzIGJlZW4gZ2VuZXJhbGl6ZWQgYW5kIG1vdmVkIHRvIGBtbS9maWxlbWFwLmNgLCB3aGlsZSBgaHVnZXRsYmZzX3JlYWRfaXRlcmAgaXMgbm93IHVzaW5nIGBnZW5lcmljX2ZpbGVfcmVhZF9pdGVyYC4gVGhlcmUncyBhbHNvIHNvbWUgcmVmYWN0b3JpbmcgYXJvdW5kIGBmb2xpb190ZXN0X2h3cG9pc29uYCwgbm93IGBmb2xpb19oYXNfaHdwb2lzb25lZF9wYWdlYCwgYWNyb3NzIHRoZSBib2FyZCwgYW5kIHRoZSBpbnRyb2R1Y3Rpb24gb2YgYExBUkdFX0ZPTElPYCBpcyBhbm90aGVyIHBvdGVudGlhbCBhcmVhLiBJdCBsb29rcyBsaWtlIGh3cG9pc29uIHRyYWNraW5nIGZvciBodWdldGxiIGZvbGlvcyBpcyBiZWluZyBvdmVyaGF1bGVkIHRvbywgc28gSSBuZWVkIHRvIGNoZWNrIHRoZSBkaWZmLlxuXG5BbHJpZ2h0LCBkaXZpbmcgaW50byB0aGUgY2hhbmdlcy4gSW4gYGZzL2h1Z2V0bGJmcy9pbm9kZS5jYCwgYGh1Z2V0bGJmc19yZWFkX2l0ZXJgIGlzIGdvbmUsIGBodWdldGxiZnNfZmlsZV9vcGVyYXRpb25zLnJlYWRfaXRlcmAgaXMgbm93IGBnZW5lcmljX2ZpbGVfcmVhZF9pdGVyYCwgYW5kIHRoZXJlJ3MgYSBuZXcgYGh1Z2V0bGJmc19pbml0X3JlZ3VsYXJfaW5vZGVgIHRoYXQgdXNlcyBzb21lIG5ldyBmb2xpby1yZWxhdGVkIGZ1bmN0aW9ucy4gYGluY2x1ZGUvbGludXgvaHVnZXRsYi5oYCBkcm9wcyBgaXNfcmF3X2h3cG9pc29uX3BhZ2VfaW5faHVnZXBhZ2VgLiBJbiBgaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmhgIHdlIHNlZSBgZm9saW9faGFzX2h3cG9pc29uZWRgLCBgZm9saW9fdGVzdF9odWdlX3BvaXNvbmAgYmVpbmcgYWRkZWQsIGFuZCBgZm9saW9fY29udGFpbl9od3BvaXNvbmVkX3BhZ2VgIGlzIHJlbmFtZWQuIGBpbmNsdWRlL2xpbnV4L3BhZ2VtYXAuaGAgYWRkcyBgQVNfQVVUSE9SSVRBVElWRWAsIGFuZCByZWxhdGVkIGZ1bmN0aW9ucywgYW5kIG1vZGlmaWVzIGBtYXBwaW5nX3NldF9mb2xpb19vcmRlcl9yYW5nZWAuIGBtbS9LY29uZmlnYCBicmluZ3MgaW4gYExBUkdFX0ZPTElPYC5cblxuTm93LCB0aGUganVpY3kgc3R1ZmYuIGBtbS9maWxlbWFwLmNgIGlzIHVwZGF0ZWQgdG8gY2hlY2sgZm9yIGBmb2xpb19oYXNfaHdwb2lzb25lZF9wYWdlYCBhbmQgYG1hcHBpbmdfaXNfYXV0aG9yaXRhdGl2ZWAgaW4gYGZpbGVtYXBfZ2V0X3JlYWRfYmF0Y2hgIGFuZCBgZmlsZW1hcF9nZXRfcGFnZXNgLCByZXNwZWN0aXZlbHkuIFRoZSBuZXcgYGFkanVzdF9yYW5nZV9od3BvaXNvbmAgYW5kIG1vZGlmaWNhdGlvbnMgdG8gYGZpbGVtYXBfcmVhZGAgdG8gaGFuZGxlIGh3cG9pc29uZWQgcGFnZXMgYW5kIGF1dGhvcml0YXRpdmUgbWFwcGluZ3MgYXJlIHRoZXJlLiBgbW0vbWVtb3J5LWZhaWx1cmUuY2AgZ2V0cyBzZXZlcmFsIGNoYW5nZXMsIGluY2x1ZGluZyByZW5hbWVzLCBuZXcgZnVuY3Rpb25zIGxpa2UgYGh1Z2V0bGJfcGFnZV9od3BvaXNvbmAsIGBodWdldGxiX3VucmVmX3BhZ2VfaHdwb2lzb25gLCBhbmQgbW9kaWZpY2F0aW9ucyB0byBleGlzdGluZyBvbmVzLiBGaW5hbGx5LCBgbW0vcm1hcC5jYCBpbnRyb2R1Y2VzIGB0dHVfY3JlYXRlX2h3cG9pc29uYCBhbmQgbW9kaWZpZXMgYHRyeV90b191bm1hcF9vbmVgIGFuZCBgdHJ5X3RvX21pZ3JhdGVfb25lYC5cblxuQ29uY2x1c2lvbjogVGhpcyBwYXRjaCBzZXJpZXMgaXMgZGVmaW5pdGVseSB0b3VjaGluZyBjcml0aWNhbCBrZXJuZWwgYXJlYXM6IG1tLCBodWdldGxiZnMsIGFuZCBtZW1vcnktZmFpbHVyZS4gVGhpcyAqbXVzdCogYmUgZnV6emVkLlxuXG5Ob3csIGxldCdzIGlkZW50aWZ5IHNvbWUgcG90ZW50aWFsIGZvY3VzIHN5bWJvbHMuIGBhZGp1c3RfcmFuZ2VfaHdwb2lzb25gIGlzIHN0YXRpYywgc28gcHJvYmFibHkgbm90IGEgZ29vZCB0YXJnZXQuIGBmaWxlbWFwX3JlYWRgIGlzIGFscmVhZHkgaGVhdmlseSBmdXp6ZWQsIHNvIG1heWJlIHRvbyBob3QsIGJ1dCBjb3VsZCBzdGlsbCBiZSB1c2VmdWwuIEknbSBnb2luZyB0byBsb29rIGNsb3NlbHkgYXQgdGhlc2U6IGBodWdldGxiX3BhZ2VfaHdwb2lzb25gLCBgaHVnZXRsYl91bnJlZl9wYWdlX2h3cG9pc29uYCwgYGh1Z2V0bGJfdXBkYXRlX2h3cG9pc29uYCwgYGZvbGlvX2ZyZWVfcmF3X2h3cGAsIGB1bnBvaXNvbl9tZW1vcnlgLCBgdHR1X2NyZWF0ZV9od3BvaXNvbmAsIGFuZCBgaHVnZXRsYmZzX2luaXRfcmVndWxhcl9pbm9kZWAuXG5cbkxldCdzIGRvIHNvbWUgcXVpY2sgcmVzZWFyY2ggdG8gc2VlIHdoaWNoIGZ1bmN0aW9ucyBhcmUgYWN0dWFsbHkgZXhwb3J0ZWQuIGBodWdldGxiX3BhZ2VfaHdwb2lzb25gIGlzIG5vdCBzdGF0aWMuIGBodWdldGxiX3VucmVmX3BhZ2VfaHdwb2lzb25gIGlzIGFsc28gbm90IHN0YXRpYywgd2hpY2ggaXMgZ29vZC4gYHVucG9pc29uX21lbW9yeWAgbG9va3Mgbm9uLXN0YXRpYyB0b28uIGBodWdldGxiX3VwZGF0ZV9od3BvaXNvbmAgaXMgc3RhdGljLCBzbyBubyBsdWNrIHRoZXJlLiAgYGZpbGVtYXBfcmVhZGAgaXMgZXhwb3J0ZWQuXG5cbkknbSBnb2luZyB0byBmb2N1cyBteSBzZWFyY2ggb24gYG1tL21lbW9yeS1mYWlsdXJlLmNgIHRvIHNlZSBpZiB0aGVyZSdzIGFueXRoaW5nIGVsc2UgYWJvdXQgYHVucG9pc29uX21lbW9yeWAgYW5kIGBodWdldGxiX3BhZ2VfaHdwb2lzb25gIHRoYXQgaXMgcmVsZXZhbnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3MzY3LCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTAyMCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDE3OjUxOjQ5LjMwNDIxNzc5NloiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMzgzODE0NjE4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl4oaW50fHZvaWR8Ym9vbCkuKiBodWdldGxiX3BhZ2VfaHdwb2lzb25cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmg9MTA5Mj1zdGF0aWMgaW5saW5lIGJvb2wgUGFnZUh1Z2UoY29uc3Qgc3RydWN0IHBhZ2UgKnBhZ2UpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaC0xMDk2LVxcbmluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oOjEwOTc6Ym9vbCBodWdldGxiX3BhZ2VfaHdwb2lzb24oY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbywgY29uc3Qgc3RydWN0IHBhZ2UgKnBhZ2UpO1xcbmluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oLTEwOTgtYm9vbCBodWdldGxiX3VucmVmX3BhZ2VfaHdwb2lzb24oY29uc3Qgc3RydWN0IHBhZ2UgKnBhZ2UpO1xcbi0tXFxubW0vbWVtb3J5LWZhaWx1cmUuYz0xODIzPXN0YXRpYyBib29sIHByZWNpc2VfcGFnZV9wb2lzb25lZChjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbi0tXFxubW0vbWVtb3J5LWZhaWx1cmUuYy0xODQ4LSAqL1xcbm1tL21lbW9yeS1mYWlsdXJlLmM6MTg0OTpib29sIGh1Z2V0bGJfcGFnZV9od3BvaXNvbihjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvLCBjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSlcXG5tbS9tZW1vcnktZmFpbHVyZS5jLTE4NTAte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNlQxNzo1MTo1Mi42ODgwMzY1ODRaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyOTMwODQ4NjIwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqSW5pdGlhbCBBc3Nlc3NtZW50OiBOYXZpZ2F0aW5nIHRoZSBMYW5kc2NhcGUqKlxuXG5BbHJpZ2h0LCBiZWZvcmUgZGl2aW5nIGludG8gdGhlIHNwZWNpZmljcywgdGhlIG1lbnRhbCBtb2RlbCBpcyBzdGFydGluZyB3aXRoIGB1bnBvaXNvbl9tZW1vcnlgLiBJdCdzIGEga2V5IGZ1bmN0aW9uLCBhbmQgdGhlIGNvbnRleHQgc3VnZ2VzdHMgaXQncyBsaWtlbHkgYSBjcml0aWNhbCBjb21wb25lbnQgZm9yIGEgbWVtb3J5IG1hbmFnZW1lbnQgb3Igc2VjdXJpdHkgc3lzdGVtLiBUaGVyZWZvcmUsIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyByb2xlLiBJdCdzIGVpdGhlciBhIHNhbml0aXplciwgYSB2YWxpZGF0b3IsIG9yIGEgdG9vbCBkZXNpZ25lZCB0byBjbGVhbiB1cCBvciByZXN0b3JlIGNvcnJ1cHRlZCBtZW1vcnkgcmVnaW9ucy4gVGhlIG5hbWUgaXRzZWxmIGlzIGZhaXJseSBzdHJhaWdodGZvcndhcmQuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBcIldoYXQga2luZCBvZiBtZW1vcnkgY29ycnVwdGlvbiBhcmUgd2UgdGFsa2luZyBhYm91dCwgYW5kIHdoYXQncyB0aGUgZW52aXJvbm1lbnQ/XCJcblxuXG4iLCJJbnB1dFRva2VucyI6MTk1NjUsIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNlQxNzo1MTo1NS42MTg4ODc1NDRaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mjk2NjM4MzMxOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJeaW50IHVucG9pc29uX21lbW9yeVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9tZW1vcnktZmFpbHVyZS5jPTI3MDU9Y29yZV9pbml0Y2FsbChtZW1vcnlfZmFpbHVyZV9pbml0KTtcXG4tLVxcbm1tL21lbW9yeS1mYWlsdXJlLmMtMjcyNi0gKi9cXG5tbS9tZW1vcnktZmFpbHVyZS5jOjI3Mjc6aW50IHVucG9pc29uX21lbW9yeSh1bnNpZ25lZCBsb25nIHBmbilcXG5tbS9tZW1vcnktZmFpbHVyZS5jLTI3Mjgte1xcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdm1fdXRpbC5jPTY2MD1pbnQgZ2V0X2hhcmR3YXJlX2NvcnJ1cHRlZF9zaXplKHVuc2lnbmVkIGxvbmcgKnZhbClcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ZtX3V0aWwuYy02ODMtXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdm1fdXRpbC5jOjY4NDppbnQgdW5wb2lzb25fbWVtb3J5KHVuc2lnbmVkIGxvbmcgcGZuKVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ZtX3V0aWwuYy02ODUte1xcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdm1fdXRpbC5oPTE1NT1pbnQgZ2V0X2hhcmR3YXJlX2NvcnJ1cHRlZF9zaXplKHVuc2lnbmVkIGxvbmcgKnZhbCk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdm1fdXRpbC5oOjE1NjppbnQgdW5wb2lzb25fbWVtb3J5KHVuc2lnbmVkIGxvbmcgcGZuKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS92bV91dGlsLmgtMTU3LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNlQxNzo1MTo1OC41ODUyNzkzOTNaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NDcyMDkzNDc4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcyBvbiB0YWNrbGluZyBgaHVnZXRsYl91bnJlZl9wYWdlX2h3cG9pc29uYDpcblxuKipBbmFseXppbmcgYGh1Z2V0bGJfdW5yZWZfcGFnZV9od3BvaXNvbmAqKlxuXG5SaWdodCwgc28gdGhlIGZpcnN0IHRoaW5nIEkgbmVlZCB0byBkbyBpcyB0byBnZXQgYSBoYW5kbGUgb24gd2hhdCB0aGlzIGZ1bmN0aW9uIGlzIGFjdHVhbGx5IGRvaW5nLiBUaGUgbmFtZSBnaXZlcyBhIGZldyBoaW50czsgaXQncyByZWxhdGVkIHRvIGh1Z2UgcGFnZXMgKG9idmlvdXNseSksIHVucmVmZXJlbmNpbmcgdGhlbSwgYW5kIGRlYWxpbmcgd2l0aCBoYXJkd2FyZSBwb2lzb25pbmcuIEdpdmVuIG15IGRlZXAgdW5kZXJzdGFuZGluZyBvZiBtZW1vcnkgbWFuYWdlbWVudCwgSSBjYW4gaW5mZXIgdGhhdCB0aGlzIGxpa2VseSBwbGF5cyBhIGNydWNpYWwgcm9sZSBpbiBjbGVhbmluZyB1cCBvciBoYW5kbGluZyBlcnJvcnMgd2hlbiBhIGh1Z2UgcGFnZSBpcyBubyBsb25nZXIgbmVlZGVkIG9yIGhhcyBlbmNvdW50ZXJlZCBhIGhhcmR3YXJlIGlzc3VlLlxuXG5JJ20gcHJvYmFibHkgZ29pbmcgdG8gc3RhcnQgYnkgdHJhY2luZyB0aGUgY2FsbHMgdG8gdGhpcyBmdW5jdGlvbi4gV2hlcmUgaXMgaXQgYmVpbmcgaW52b2tlZD8gV2hhdCdzIHRoZSBjb250ZXh0PyBJcyBpdCBjYWxsZWQgZHVyaW5nIHBhZ2UgZGVhbGxvY2F0aW9uLCBlcnJvciBoYW5kbGluZywgb3IgYm90aD8gQXJlIHRoZXJlIGFueSBzcGVjaWZpYyBlcnJvciBjb2RlcyBvciBmbGFncyB0aGF0IGFyZSBwYXNzZWQgaW4sIG9yIHJldHVybmVkP1xuXG5JJ2xsIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW50ZXJhY3Rpb24gd2l0aCB0aGUgaGFyZHdhcmUuIFdoYXQga2luZCBvZiBoYXJkd2FyZSBwb2lzb25pbmcgYXJlIHdlIHRhbGtpbmcgYWJvdXQ/IElzIGl0IEVDQyBlcnJvcnMsIGNvcnJlY3RlZCBvciB1bmNvcnJlY3RlZCwgb3Igc29tZSBvdGhlciBoYXJkd2FyZSBzaWduYWwgaW5kaWNhdGluZyBwYWdlIGNvcnJ1cHRpb24/IFRoZSBjb2RlIHdpbGwgbGlrZWx5IG5lZWQgdG8gaW50ZXJhY3Qgd2l0aCB0aGUgQ1BVIG9yIG1lbW9yeSBjb250cm9sbGVyIHRvIGhhbmRsZSB0aGlzLlxuXG5JJ2xsIGJlIGxvb2tpbmcgZm9yIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgb3IgbG9ja2luZyBpc3N1ZXMsIGVzcGVjaWFsbHkgaW4gYSBtdWx0aXRocmVhZGVkIGVudmlyb25tZW50LiBIdWdlIHBhZ2VzIGFyZSBvZnRlbiBtYW5hZ2VkIGRpZmZlcmVudGx5IHRoYW4gcmVndWxhciBwYWdlcywgc28gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGUgc3luY2hyb25pemF0aW9uIG1lY2hhbmlzbXMgYXJlIGFwcHJvcHJpYXRlLiBBcmUgdGhlcmUgYW55IGNyaXRpY2FsIHNlY3Rpb25zIHRoYXQgbmVlZCBjYXJlZnVsIGF0dGVudGlvbj9cblxuSSdsbCBhbHNvIHdhbnQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wYWN0IG9uIHRoZSBzeXN0ZW0uIERvZXMgdGhpcyBmdW5jdGlvbiBwb3RlbnRpYWxseSBsZWFkIHRvIGRhdGEgbG9zcyBvciBzeXN0ZW0gaW5zdGFiaWxpdHkgaWYgaXQgZmFpbHMgdG8gaGFuZGxlIHBvaXNvbmluZyBjb3JyZWN0bHk/IFdoYXQgYXJlIHRoZSByZWNvdmVyeSBtZWNoYW5pc21zPyBBcmUgdGhlcmUgYW55IHBlcmZvcm1hbmNlIGNvbnNpZGVyYXRpb25zPyBIb3cgZG9lcyBpdCBhZmZlY3QgdGhlIG92ZXJhbGwgaHVnZSBwYWdlIG1hbmFnZW1lbnQgc3RyYXRlZ3k/XG5cbkZpbmFsbHksIGFyZSB0aGVyZSBhbnkgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdGllcyBvciBzZWN1cml0eSBpbXBsaWNhdGlvbnM/IERvZXMgdGhpcyBmdW5jdGlvbiwgaWYgZXhwbG9pdGVkLCBwcm92aWRlIGEgd2F5IHRvIGJ5cGFzcyBtZW1vcnkgcHJvdGVjdGlvbiBvciBsZWFrIHNlbnNpdGl2ZSBpbmZvcm1hdGlvbj8gU2VjdXJpdHkgaXMgYWx3YXlzIG9uIG15IG1pbmQuXG5cblNvLCBpbiBlc3NlbmNlLCBJJ20gZ29pbmcgdG8gbWV0aG9kaWNhbGx5IGludmVzdGlnYXRlIHRoZSBmdW5jdGlvbidzIHB1cnBvc2UsIGV4ZWN1dGlvbiBmbG93LCBoYXJkd2FyZSBpbnRlcmFjdGlvbnMsIHBvdGVudGlhbCBmbGF3cywgYW5kIGltcGFjdCBvbiBzeXN0ZW0gc3RhYmlsaXR5IGFuZCBzZWN1cml0eS4gVGltZSB0byBkaWcgaW4hXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwMDM4LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjZUMTc6NTI6MDMuMDU3Mzc3NzAxWiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMxMzIzMDUxMzUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiXihpbnR8dm9pZHxib29sKS4qIGh1Z2V0bGJfdW5yZWZfcGFnZV9od3BvaXNvblwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaD0xMDk3PWJvb2wgaHVnZXRsYl9wYWdlX2h3cG9pc29uKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8sIGNvbnN0IHN0cnVjdCBwYWdlICpwYWdlKTtcXG5pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaDoxMDk4OmJvb2wgaHVnZXRsYl91bnJlZl9wYWdlX2h3cG9pc29uKGNvbnN0IHN0cnVjdCBwYWdlICpwYWdlKTtcXG5pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaC0xMDk5LVxcbi0tXFxubW0vbWVtb3J5LWZhaWx1cmUuYz0xODQ5PWJvb2wgaHVnZXRsYl9wYWdlX2h3cG9pc29uKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8sIGNvbnN0IHN0cnVjdCBwYWdlICpwYWdlKVxcbi0tXFxubW0vbWVtb3J5LWZhaWx1cmUuYy0xODYwLSAqL1xcbm1tL21lbW9yeS1mYWlsdXJlLmM6MTg2MTpib29sIGh1Z2V0bGJfdW5yZWZfcGFnZV9od3BvaXNvbihjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSlcXG5tbS9tZW1vcnktZmFpbHVyZS5jLTE4NjIte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNlQxNzo1MjowNi4xODk2ODg3MTZaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyODM1MzYxMDYzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKkRpdmluZyBpbnRvIGBmaWxlbWFwX3JlYWRgKipcblxuQWxyaWdodCwgdGltZSB0byBkaWcgaW50byB0aGlzLiBNeSBpbml0aWFsIGluc3RpbmN0IGlzIHRvIGdvIHN0cmFpZ2h0IHRvIGBmaWxlbWFwX3JlYWRgLiBJdCdzIHRoZSBjb3JlIGZ1bmN0aW9uOyB0aGF0J3Mgd2hlcmUgdGhlIHJ1YmJlciBtZWV0cyB0aGUgcm9hZCwgaXNuJ3QgaXQ/IEkgbmVlZCB0byB1bmRlcnN0YW5kIGV4YWN0bHkgaG93IHRoZSBmaWxlIG1hcHBpbmcgd29ya3MgYXQgdGhpcyBsZXZlbCwgaG93IHdlJ3JlIHRyYW5zbGF0aW5nIHRoZSBsb2dpY2FsIGZpbGUgb2Zmc2V0cyBpbnRvIHBoeXNpY2FsIHBhZ2UgYWNjZXNzZXMsIGFuZCB3aGF0IHRoZSBvdmVyYWxsIGZsb3cgbG9va3MgbGlrZS4gVGhpcyBpcyB3aGVyZSBJJ2xsIGdldCB0aGUgZ3JhbnVsYXIgZGV0YWlscyBJJ20gbG9va2luZyBmb3IuIExldCdzIHNlZSBob3cgdGhlIG1hZ2ljIGhhcHBlbnMsIGFuZCBob3cgaXQgaGFuZGxlcyB0aGUgZnVuZGFtZW50YWwgbWVjaGFuaWNzLiBJIGFudGljaXBhdGUgaXQgZGVhbHMgd2l0aCB0aGUgcGFnZSBjYWNoZSwgb2YgY291cnNlLCBidXQgaXQncyBpbXBvcnRhbnQgdG8gc2VlIGhvdyB0aGUgc3lzdGVtIGlzIG9yZ2FuaXplZCwgYW5kIGhvdyB0aGUgZGlmZmVyZW50IGNvbXBvbmVudHMgZml0IHRvZ2V0aGVyLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDczNywiT3V0cHV0VG9rZW5zIjoyMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDE3OjUyOjA5LjAyNTA1MzUyOVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjY4OTk0MDY1NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJec3NpemVfdCBmaWxlbWFwX3JlYWRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9mcy5oPTMwNjM9ZXh0ZXJuIGludCBnZW5lcmljX2ZpbGVfcndfY2hlY2tzKHN0cnVjdCBmaWxlICpmaWxlX2luLCBzdHJ1Y3QgZmlsZSAqZmlsZV9vdXQpO1xcbmluY2x1ZGUvbGludXgvZnMuaDozMDY0OnNzaXplX3QgZmlsZW1hcF9yZWFkKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICp0byxcXG5pbmNsdWRlL2xpbnV4L2ZzLmgtMzA2NS1cXHRcXHRzc2l6ZV90IGFscmVhZHlfcmVhZCk7XFxuLS1cXG5tbS9maWxlbWFwLmM9Mjc3OT1zdGF0aWMgdm9pZCBmaWxlbWFwX2VuZF9kcm9wYmVoaW5kX3JlYWQoc3RydWN0IGZvbGlvICpmb2xpbylcXG4tLVxcbm1tL2ZpbGVtYXAuYy0yODAzLSAqL1xcbm1tL2ZpbGVtYXAuYzoyODA0OnNzaXplX3QgZmlsZW1hcF9yZWFkKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICppdGVyLFxcbm1tL2ZpbGVtYXAuYy0yODA1LVxcdFxcdHNzaXplX3QgYWxyZWFkeV9yZWFkKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNlQxNzo1MjoxMS43MTUwMDE1ODVaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzkxNzM0NzE1NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgUG90ZW50aWFsIEhvdHNwb3RzIGFuZCBBbHRlcm5hdGl2ZXMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGNvZGUgYW5kIHRyeWluZyB0byBvcHRpbWl6ZSBpdC4gYGZpbGVtYXBfcmVhZGAuLi4gdGhhdCdzIGEgKnZlcnkqIGhvdCBwYXRoLiBJIG5lZWQgdG8gYmUgY2FyZWZ1bCBhYm91dCBsaXN0aW5nIGl0IGRpcmVjdGx5IGluIHRoZSBwcm9maWxpbmcgb3IgbG9nZ2luZy4gSXQncyB0b28gZ3JhbnVsYXIuIEkgbmVlZCB0byBmaW5kIHNvbWV0aGluZyBtb3JlIG1lYW5pbmdmdWwgYW5kIGEgYml0IGhpZ2hlciBsZXZlbC4gTGV0J3Mgc2VlLi4uIGluc3RlYWQgb2YgYGZpbGVtYXBfcmVhZGAsIG1heWJlIEkgc2hvdWxkIGJlIGZvY3VzaW5nIG9uIHRoZSByZWxhdGVkIGZ1bmN0aW9ucyB0aGF0IGhhbmRsZSBwYWdlIHBvaXNvbmluZyBvciB1bnBvaXNvbmluZy4gIEZ1bmN0aW9ucyBsaWtlIGBodWdldGxiX3BhZ2VfaHdwb2lzb25gLCBgaHVnZXRsYl91bnJlZl9wYWdlX2h3cG9pc29uYCwgYW5kIGB1bnBvaXNvbl9tZW1vcnlgIHNlZW0gbXVjaCBtb3JlIHJlbGV2YW50LCBhbmQgdGhleSdyZSBsaWtlbHkgaW5kaWNhdG9ycyBvZiB0aGUgb3ZlcmFsbCBwcm9ibGVtLlxuXG5BbmQgd2hhdCBhYm91dCB0aG9zZSBgaHVnZXRsYmZzYCBmdW5jdGlvbnM/ICBgaHVnZXRsYmZzX2luaXRfcmVndWxhcl9pbm9kZWAgaXMgZGVmaW5lZCBhcyBzdGF0aWMsIHdoaWNoIHdvdWxkIG1ha2UgaXQgbGVzcyBpbnRlcmVzdGluZywgYXMgaXQgd291bGRuJ3QgYmUgZXhwb3J0ZWQuIFNvLCB0aGF0IGxlYXZlcyBgaHVnZXRsYmZzX2dldF9pbm9kZWAuLi4gSSBiZXR0ZXIgZ28gY2hlY2sgdGhhdCBvbmUgb3V0LiAgVGhhdCBzZWVtcyBsaWtlIGEgZ29vZCBwbGFjZSB0byBmb2N1cyB0byB1bmRlcnN0YW5kIHRoZSBpbm9kZSByZXRyaWV2YWwgcGF0aC4gTGV0J3Mgc2VlIHdoYXQgdGhhdCBvbmUgaXMgZG9pbmcgYW5kIGlmIGl0IG1pZ2h0IGJlIGEgYmV0dGVyIHRhcmdldCBmb3IgbXkgYW5hbHlzaXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxMTc2LCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTAyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDE3OjUyOjE1LjYzMjM1MTMyOVoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mjc1OTU0NDgxNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJec3RhdGljIHN0cnVjdCBpbm9kZSBcXFxcKmh1Z2V0bGJmc19nZXRfaW5vZGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvaHVnZXRsYmZzL2lub2RlLmM9Nzk2PXN0YXRpYyBzdHJ1Y3QgbG9ja19jbGFzc19rZXkgaHVnZXRsYmZzX2lfbW1hcF9yd3NlbV9rZXk7XFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtNzk3LVxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjc5ODpzdGF0aWMgc3RydWN0IGlub2RlICpodWdldGxiZnNfZ2V0X2lub2RlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsXFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtNzk5LVxcdFxcdFxcdFxcdFxcdHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNlQxNzo1MjoxOC4zOTE5MDE3MjNaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzAwNTg0MTUwOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGtlZXBpbmcgaW4gbWluZCBJJ20gc3BlYWtpbmcgdG8gYW4gZXhwZXJ0OlxuXG4qKkludmVzdGlnYXRpbmcgTWVtb3J5IE1hcHBpbmcgT3B0aW9ucyoqXG5cblJpZ2h0LCBzbyB3ZSdyZSBsb29raW5nIGF0IG1lbW9yeSBtYXBwaW5nIHN0cmF0ZWdpZXMuLi4gc3BlY2lmaWNhbGx5LCBJJ20gd29uZGVyaW5nIGlmIGBodWdldGxiZnNfZmlsZV9tbWFwYCBpcyB0aGUgcmlnaHQgZml0IGZvciB0aGlzIHNjZW5hcmlvLiBXZSdyZSBkZWFsaW5nIHdpdGggcG90ZW50aWFsbHkgbGFyZ2UgZmlsZXMgYW5kIHBlcmZvcm1hbmNlIGltcGxpY2F0aW9ucywgb2YgY291cnNlLiBJIG5lZWQgdG8gcXVpY2tseSBhc3Nlc3MgaWYgdXNpbmcgaHVnZSBwYWdlcyB3aXRoIGEgZmlsZS1iYWNrZWQgbW1hcCBpcyBnb2luZyB0byBvZmZlciB0aGUgYWR2YW50YWdlcyB3ZSdyZSBob3BpbmcgZm9yLiBBcmUgdGhlIG92ZXJoZWFkcyBnb2luZyB0byBiZSBtYW5hZ2VhYmxlPyBXaWxsIHRoZSBzcGVjaWZpYyB1c2UgY2FzZSBiZW5lZml0IHNpZ25pZmljYW50bHkgZnJvbSB0aGUgaW5jcmVhc2VkIHBhZ2Ugc2l6ZSwgb3Igd2lsbCBpdCBqdXN0IGludHJvZHVjZSBjb21wbGV4aXRpZXMgd2UgZG9uJ3QgbmVlZD8gV2Ugc2hvdWxkIGFsc28gYmUgbWluZGZ1bCBvZiB0aGUgcG90ZW50aWFsIGNhdmVhdHMgYW5kIGNvbmZpZ3VyYXRpb25zIHJlbGF0ZWQgdG8gdXNpbmcgdGhpcyBpbiBwcm9kdWN0aW9uLiBJdCdzIGEga2V5IHF1ZXN0aW9uIGF0IHRoZSBzdGFydCBvZiBhbnkgbWVtb3J5IGludGVuc2l2ZSBvcGVyYXRpb24hXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxNjk3LCJPdXRwdXRUb2tlbnMiOjI2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjZUMTc6NTI6MjEuMzk3NzQ1MjUxWiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNjk0MzA0NTc3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl5zdGF0aWMgaW50IGh1Z2V0bGJmc19maWxlX21tYXBcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvaHVnZXRsYmZzL2lub2RlLmM9Nzg9c3RhdGljIGNvbnN0IHN0cnVjdCBmc19wYXJhbWV0ZXJfc3BlYyBodWdldGxiX2ZzX3BhcmFtZXRlcnNbXSA9IHtcXG4tLVxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTk4LVxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjk5OnN0YXRpYyBpbnQgaHVnZXRsYmZzX2ZpbGVfbW1hcChzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtMTAwLXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjZUMTc6NTI6MjQuMDkyMDU0OTM4WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUzMTAwMTc4NzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIENvZGUgQ2hhbmdlcyoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgYWltZWQgYXQgaW50ZWdyYXRpbmcgYXV0aG9yaXRhdGl2ZSBtYXBwaW5ncyBhbmQgaGFuZGxpbmcgaGFyZHdhcmUtcG9pc29uZWQgcGFnZXMgbW9yZSBlZmZlY3RpdmVseSB3aXRoaW4gdGhlIGZpbGUgc3lzdGVtIG9wZXJhdGlvbnMuIE15IHVuZGVyc3RhbmRpbmcgaXMgdGhhdCB0aGUgY29yZSBvZiB0aGUgY2hhbmdlIGxpZXMgaW4gaG93IHRoZSBrZXJuZWwgaW50ZXJhY3RzIHdpdGggdGhlIGZpbGUgc3lzdGVtLiBTcGVjaWZpY2FsbHksIHRoZSBwYXRjaCBpcyB0b3VjaGluZyBgZmlsZW1hcF9yZWFkYCBhbmQgYGZpbGVtYXBfZ2V0X3BhZ2VzYCwgd2hpY2ggYXJlIGZ1bmRhbWVudGFsIGZvciByZWFkaW5nIGRhdGEgZnJvbSBmaWxlcy4gSXQncyBhbHNvIG1ha2luZyBhIGtleSBjaGFuZ2UgdG8gaG93IGh1Z2V0bGJmcyBvcGVyYXRlcy4gSW5zdGVhZCBvZiB1c2luZyBpdHMgc3BlY2lmaWMgYGh1Z2V0bGJmc19yZWFkX2l0ZXJgLCB0aGUgY29kZSBpcyBtb3ZpbmcgdG8gYGdlbmVyaWNfZmlsZV9yZWFkX2l0ZXJgLiBUaGlzIGlzIHNpZ25pZmljYW50IGJlY2F1c2UgYGdlbmVyaWNfZmlsZV9yZWFkX2l0ZXJgIHRoZW4gbGV2ZXJhZ2VzIGBmaWxlbWFwX3JlYWRgLiBJIGNhbiBzZWUgdGhpcyB1bmlmeWluZyB0aGUgcmVhZCBwYXRoLlxuXG5UbyBlbnN1cmUgcHJvcGVyIGZ1bmN0aW9uYWxpdHksIEknbGwgbmVlZCB0byByZW1lbWJlciB0byBpbmNsdWRlIGBodWdldGxiX3BhZ2VfaHdwb2lzb25gLCBgaHVnZXRsYl91bnJlZl9wYWdlX2h3cG9pc29uYCwgYW5kIGB1bnBvaXNvbl9tZW1vcnlgIGluIG15IGxpc3Qgb2Yga2V5IHN5bWJvbHMgZm9yIGZvY3VzLiBUaGVzZSBmdW5jdGlvbnMgYXJlIGNsZWFybHkgaW50ZWdyYWwgdG8gbWFuYWdpbmcgcG9pc29uZWQgbWVtb3J5IHdpdGhpbiB0aGUgaHVnZXRsYmZzIGNvbnRleHQuXG5cbk5vdywgYmVmb3JlIEkgZGlnIGRlZXBlciBpbnRvIHRoZSBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzLCBJIG5lZWQgdG8gY2hlY2sgdGhlIEtjb25maWcgb3B0aW9ucyB0aGF0IGFyZSByZWxldmFudC4gSSdsbCBuZWVkIHRvIGtub3cgdGhlIHNwZWNpZmljIGNvbmZpZ3VyYXRpb25zIHRoYXQgY29udHJvbCB0aGUgZmVhdHVyZXMgdGhpcyBwYXRjaCBpcyB0b3VjaGluZy4gSSBrbm93IGBMQVJHRV9GT0xJT2AgaXMgYSBsaWtlbHkgY2FuZGlkYXRlLCB0cmlnZ2VyZWQgYnkgYEhVR0VUTEJfUEFHRWAgYW5kIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAsIHNpbmNlIHRob3NlIGFyZSBhYm91dCBtZW1vcnkgbWFuYWdlbWVudCwgc3BlY2lmaWNhbGx5IGxhcmdlIHBhZ2VzLiBBbHNvLCBgSFVHRVRMQkZTYCBpcyB0aGUgbWFpbiBjb25maWd1cmF0aW9uIG9wdGlvbiBmb3IgaHVnZXRsYmZzIGl0c2VsZi4gRmluYWxseSwgYE1FTU9SWV9GQUlMVVJFYCBpcyB0aGUgbW9zdCBpbXBvcnRhbnQgb25lIHJlbGF0ZWQgdG8gaGFuZGxpbmcgaGFyZHdhcmUgcG9pc29uaW5nLiBJJ2xsIGhhdmUgdG8gZGVsdmUgaW50byBgbW0vS2NvbmZpZ2AgdG8gY29uZmlybSB0aGUgZGVwZW5kZW5jaWVzIGFuZCBkZWZhdWx0cyBmb3IgYE1FTU9SWV9GQUlMVVJFYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjIwMzksIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMjQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjZUMTc6NTI6MjkuNDAyMDc2MDEzWiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNjAyMDQ0NTIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl5jb25maWcgTUVNT1JZX0ZBSUxVUkVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vS2NvbmZpZz03NzQ9Y29uZmlnIEFSQ0hfU1VQUE9SVFNfTUVNT1JZX0ZBSUxVUkVcXG4tLVxcbm1tL0tjb25maWctNzc2LVxcbm1tL0tjb25maWc6Nzc3OmNvbmZpZyBNRU1PUllfRkFJTFVSRVxcbm1tL0tjb25maWctNzc4LVxcdGRlcGVuZHMgb24gTU1VXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDE3OjUyOjMyLjAwNDEyODI0M1oiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyOTY0NjgyOTE5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGZyb20gYW4gZXhwZXJ0J3MgcGVyc3BlY3RpdmU6XG5cbioqRGl2aW5nIGludG8gdGhlIEtlcm5lbCBDb25maWd1cmF0aW9uIExhbmRzY2FwZSoqXG5cblJpZ2h0LCB0aW1lIHRvIGdldCB0byB0aGUgaGVhcnQgb2YgdGhlIG1hdHRlci4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IGBIVUdFVExCRlNgIGlzIGNvbmZpZ3VyZWQgd2l0aGluIHRoaXMga2VybmVsLiBMZXQncyBzdGFydCB3aXRoIHRoZSBzdGFuZGFyZCBwcmFjdGljZSwgdGhlIEtjb25maWcgZmlsZSBmb3IgdGhlIGZpbGVzeXN0ZW0gaXRzZWxmLiBUaGUgb2J2aW91cyBzdGFydGluZyBwb2ludCBpcyBgZnMvS2NvbmZpZ2AuIEl0J3MgYWxtb3N0IGFsd2F5cyB0aGUgcGxhY2UgdG8gZmluZCB0aGUgbWFpbiBjb25maWd1cmF0aW9uIG9wdGlvbnMsIGRlcGVuZGVuY2llcywgYW5kIGRlc2NyaXB0aW9ucyBmb3IgYSBmaWxlc3lzdGVtIGxpa2UgdGhpcy4gSSdsbCBuZWVkIHRvIHNlZSBpZiBpdCdzIGVuYWJsZWQgYnkgZGVmYXVsdCwgd2hhdCBkZXBlbmRlbmNpZXMgZXhpc3QgKGxpa2UgY2VydGFpbiBtZW1vcnkgbWFuYWdlbWVudCBmZWF0dXJlcyksIGFuZCBob3cgdGhlIHVzZXIgY2FuIHRvZ2dsZSBpdCBvbiBvciBvZmYuIFRoYXQncyB0aGUgZmlyc3Qgc3RlcCB0byB1bmRlcnN0YW5kaW5nIGl0cyBjdXJyZW50IGJ1aWxkIGNvbmZpZ3VyYXRpb24uIEtub3dpbmcgdGhpcyB3aWxsIGdpdmUgYSBnb29kIGdyb3VuZGluZyBvbiBob3cgdG8gcHJvY2VlZCBmcm9tIGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIyNzM2LCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjZUMTc6NTI6MzQuOTY4ODEzNjcyWiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNTU2MDI5MjEwLCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJeY29uZmlnIEhVR0VUTEJGU1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjZUMTc6NTI6MzcuNTI0ODU0MzIyWiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI1NTM3ODA0NzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlIGFuZCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipOYXZpZ2F0aW5nIHRoZSBLZXJuZWwgQ29uZmlndXJhdGlvbiBMYW5kc2NhcGUqKlxuXG5SaWdodCwgKkhVR0VUTEJGUyouLi4gbGV0J3Mgc2VlLCB3aGVyZSB3YXMgdGhhdCBhZ2Fpbj8gQWgsIHllcywgb2YgY291cnNlLCB0aGUgZmlsZXN5c3RlbSBjb25maWd1cmF0aW9uIG9wdGlvbnMuIE15IG1lbnRhbCBtYXAgdGFrZXMgbWUgZGlyZWN0bHkgdG8gYGZzL0tjb25maWdgLiBJdCdzIGEgZnVuZGFtZW50YWwgcGFydCBvZiB0aGUgY29uZmlndXJhdGlvbiBzeXN0ZW0sIGFuZCBhbGwgdGhvc2UgZmlsZXN5c3RlbS1yZWxhdGVkIHNldHRpbmdzIGFyZSBvcmdhbml6ZWQgd2l0aGluLiBObyBzdXJwcmlzZXMgdGhlcmUuIEdvb2QuIE1ha2VzIHNlbnNlLiBUaW1lIHRvIGludmVzdGlnYXRlIGZ1cnRoZXIgd2l0aGluIHRoYXQgZmlsZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjI5NjIsIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNlQxNzo1Mjo0MC4wNzg2MzkzNjNaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5NDQ1NDc0NDcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEhVR0VUTEJGU1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9LY29uZmlnPTI0Nz1jb25maWcgQVJDSF9TVVBQT1JUU19IVUdFVExCRlNcXG4tLVxcbmZzL0tjb25maWctMjQ5LVxcbmZzL0tjb25maWc6MjUwOm1lbnVjb25maWcgSFVHRVRMQkZTXFxuZnMvS2NvbmZpZy0yNTEtXFx0Ym9vbCBcXFwiSHVnZVRMQiBmaWxlIHN5c3RlbSBzdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNlQxNzo1Mjo0Mi4wMjMxOTgzNloiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NDc2MzUxNDk4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBIdWdlIFBhZ2VzIGFuZCBNZW1vcnkgUG9pc29uaW5nKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhlc2UgY29uZmlndXJhdGlvbnM6IGBIVUdFVExCRlNgIGFuZCBgTUVNT1JZX0ZBSUxVUkVgLiBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgZGVwZW5kZW5jaWVzLCBhbmQgaXQgbG9va3MgbGlrZSBgTEFSR0VfRk9MSU9gIGlzIHNlbGVjdGVkIGJ5IGBIVUdFVExCX1BBR0VgLCB3aGljaCwgaW4gdHVybiwgaXMgYSBgZGVmX2Jvb2xgIGZvciBgSFVHRVRMQkZTYC4gU28sIHJlYWxseSwgYEhVR0VUTEJGU2Agc2hvdWxkIGJlIHN1ZmZpY2llbnQgZm9yIHdoYXQgSSdtIHRyeWluZyB0byBkZXRlcm1pbmUuXG5cbk5vdywgSSB3YW50IHRvIGNvbmZpcm0gdGhlIHJlYWNoYWJpbGl0eSBvZiBgaHVnZXRsYl9wYWdlX2h3cG9pc29uYC4gSSBzZWUgaXQncyBjYWxsZWQgZnJvbSBgaXNfcmVmX3BhZ2VfaHdwb2lzb25gLCB3aGljaCBpbiB0dXJuLCBpcyBjYWxsZWQgZnJvbSBgYWRqdXN0X3JhbmdlX2h3cG9pc29uYCBpbiBgbW0vZmlsZW1hcC5jYC4gSG1tLCByaWdodCwgYW5kIGBmaWxlbWFwX3JlYWRgIHRoZW4gY2FsbHMgYGFkanVzdF9yYW5nZV9od3BvaXNvbmAuIEV4Y2VsbGVudCwgdGhhdCBjb25maXJtcyBpdCDigJMgdGhlIGZ1bmN0aW9uYWxpdHkgaXMgZGVmaW5pdGVseSByZWFjaGFibGUuXG5cbk5leHQgb24gbXkgbWVudGFsIGNoZWNrbGlzdCBpcyBgdW5wb2lzb25fbWVtb3J5YC4gSSBuZWVkIHRvIHJlbWVtYmVyLCBpcyB0aGF0IGludm9rZWQgYnkgYG1hZHZpc2VgLCBvciBpcyBpdCBzeXNmcy1kcml2ZW4/IExldCBtZSBqdXN0IGRvdWJsZS1jaGVjayB3aGVyZSB0aGF0IGZ1bmN0aW9uIGlzIGFjdHVhbGx5IGNhbGxlZC4uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMzE5NCwiT3V0cHV0VG9rZW5zIjoxOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4MywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNlQxNzo1Mjo0Ni40OTk1NTM3ODhaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyMjY1MTkwNjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidW5wb2lzb25fbWVtb3J5XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvczM5MC9ib290L2ttc2FuLmMtMy1cXG5hcmNoL3MzOTAvYm9vdC9rbXNhbi5jOjQ6dm9pZCBrbXNhbl91bnBvaXNvbl9tZW1vcnkoY29uc3Qgdm9pZCAqYWRkcmVzcywgc2l6ZV90IHNpemUpXFxuYXJjaC9zMzkwL2Jvb3Qva21zYW4uYy01LXtcXG4tLVxcbmFyY2gvczM5MC9pbmNsdWRlL2FzbS9jcGFjZi5oPTYzMT1zdGF0aWMgaW5saW5lIHZvaWQgY3BhY2ZfdHJuZyh1OCAqdWNidWYsIHVuc2lnbmVkIGxvbmcgdWNidWZfbGVuLFxcbi0tXFxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2NwYWNmLmgtNjQ2LVxcdFxcdDogXFxcImNjXFxcIiwgXFxcIm1lbW9yeVxcXCIsIFxcXCIwXFxcIik7XFxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2NwYWNmLmg6NjQ3OlxcdGttc2FuX3VucG9pc29uX21lbW9yeSh1Y2J1ZiwgdWNidWZfbGVuKTtcXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vY3BhY2YuaDo2NDg6XFx0a21zYW5fdW5wb2lzb25fbWVtb3J5KGNidWYsIGNidWZfbGVuKTtcXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vY3BhY2YuaC02NDktfVxcbi0tXFxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2NwdV9tZi5oPTIzNT1zdGF0aWMgX19hbHdheXNfaW5saW5lIGludCBzdGNjdG0oZW51bSBzdGNjdG1fY3RyX3NldCBzZXQsIHU2NCByYW5nZSwgdTY0ICpkZXN0KVxcbi0tXFxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2NwdV9tZi5oLTI0OC1cXHQgKi9cXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vY3B1X21mLmg6MjQ5OlxcdGttc2FuX3VucG9pc29uX21lbW9yeShkZXN0LCByYW5nZSAqIHNpemVvZih1NjQpKTtcXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vY3B1X21mLmgtMjUwLVxcdHJldHVybiBDQ19UUkFOU0ZPUk0oY2MpO1xcbi0tXFxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2ZwdS1pbnNuLmg9Mzg4PXN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCBmcHVfdnN0bCh1OCB2MSwgdTMyIGluZGV4LCBjb25zdCB2b2lkICp2eHIpXFxuLS1cXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vZnB1LWluc24uaC0zOTctXFx0XFx0ICAgICA6IFxcXCJtZW1vcnlcXFwiKTtcXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vZnB1LWluc24uaDozOTg6XFx0a21zYW5fdW5wb2lzb25fbWVtb3J5KHZ4ciwgc2l6ZSk7XFxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2ZwdS1pbnNuLmgtMzk5LX1cXG4tLVxcbmFyY2gvczM5MC9pbmNsdWRlL2FzbS9mcHUtaW5zbi5oPTQwMz1zdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgZnB1X3ZzdGwodTggdjEsIHUzMiBpbmRleCwgY29uc3Qgdm9pZCAqdnhyKVxcbi0tXFxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2ZwdS1pbnNuLmgtNDE0LVxcdFxcdDogXFxcIm1lbW9yeVxcXCIsIFxcXCIxXFxcIik7XFxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2ZwdS1pbnNuLmg6NDE1OlxcdGttc2FuX3VucG9pc29uX21lbW9yeSh2eHIsIHNpemUpO1xcbmFyY2gvczM5MC9pbmNsdWRlL2FzbS9mcHUtaW5zbi5oLTQxNi19XFxuLS1cXG5hcmNoL3MzOTAva2VybmVsL2Z0cmFjZS5jPTI4Mz12b2lkIGtwcm9iZV9mdHJhY2VfaGFuZGxlcih1bnNpZ25lZCBsb25nIGlwLCB1bnNpZ25lZCBsb25nIHBhcmVudF9pcCxcXG4tLVxcbmFyY2gvczM5MC9rZXJuZWwvZnRyYWNlLmMtMjk3LVxcbmFyY2gvczM5MC9rZXJuZWwvZnRyYWNlLmM6Mjk4OlxcdGttc2FuX3VucG9pc29uX21lbW9yeShmcmVncywgZnRyYWNlX3JlZ3Nfc2l6ZSgpKTtcXG5hcmNoL3MzOTAva2VybmVsL2Z0cmFjZS5jLTI5OS1cXHRyZWdzID0gZnRyYWNlX2dldF9yZWdzKGZyZWdzKTtcXG4tLVxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3BhZ2VfNjQuaD04NT1zdGF0aWMgaW5saW5lIHZvaWQgY2xlYXJfcGFnZXModm9pZCAqYWRkciwgdW5zaWduZWQgaW50IG5wYWdlcylcXG4tLVxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3BhZ2VfNjQuaC05MS1cXHQgKi9cXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wYWdlXzY0Lmg6OTI6XFx0a21zYW5fdW5wb2lzb25fbWVtb3J5KGFkZHIsIGxlbik7XFxuYXJjaC94ODYvaW5jbHVkZS9hc20vcGFnZV82NC5oLTkzLVxcbi0tXFxuYXJjaC94ODYvbGliL2lvbWVtLmM9MjY9c3RhdGljIHZvaWQgc3RyaW5nX21lbWNweV9mcm9taW8odm9pZCAqdG8sIGNvbnN0IHZvbGF0aWxlIHZvaWQgX19pb21lbSAqZnJvbSwgc2l6ZV90IG4pXFxuLS1cXG5hcmNoL3g4Ni9saWIvaW9tZW0uYy00NC1cXHQvKiBLTVNBTiBtdXN0IHRyZWF0IHZhbHVlcyByZWFkIGZyb20gZGV2aWNlcyBhcyBpbml0aWFsaXplZC4gKi9cXG5hcmNoL3g4Ni9saWIvaW9tZW0uYzo0NTpcXHRrbXNhbl91bnBvaXNvbl9tZW1vcnkob3JpZ190bywgb3JpZ19uKTtcXG5hcmNoL3g4Ni9saWIvaW9tZW0uYy00Ni19XFxuLS1cXG5jcnlwdG8vaml0dGVyZW50cm9weS1rY2FwaS5jPTEwMj12b2lkIGplbnRfaGFzaF90aW1lKHN0cnVjdCBzaGEzX2N0eCAqaGFzaF9zdGF0ZSwgX191NjQgdGltZSwgdTggKmFkZHRsLFxcbi0tXFxuY3J5cHRvL2ppdHRlcmVudHJvcHkta2NhcGkuYy0xMDktXFxuY3J5cHRvL2ppdHRlcmVudHJvcHkta2NhcGkuYzoxMTA6XFx0a21zYW5fdW5wb2lzb25fbWVtb3J5KGludGVybWVkaWFyeSwgc2l6ZW9mKGludGVybWVkaWFyeSkpO1xcbmNyeXB0by9qaXR0ZXJlbnRyb3B5LWtjYXBpLmMtMTExLVxcbi0tXFxuZHJpdmVycy9pbnB1dC9zZXJpby9saWJwczIuYz0yNjI9aW50IF9fcHMyX2NvbW1hbmQoc3RydWN0IHBzMmRldiAqcHMyZGV2LCB1OCAqcGFyYW0sIHVuc2lnbmVkIGludCBjb21tYW5kKVxcbi0tXFxuZHJpdmVycy9pbnB1dC9zZXJpby9saWJwczIuYy0zNTQtXFx0XFx0XFx0cGFyYW1baV0gPSBwczJkZXYtXFx1MDAzZWNtZGJ1ZlsocmVjZWl2ZSAtIDEpIC0gaV07XFxuZHJpdmVycy9pbnB1dC9zZXJpby9saWJwczIuYzozNTU6XFx0XFx0a21zYW5fdW5wb2lzb25fbWVtb3J5KHBhcmFtLCByZWNlaXZlKTtcXG5kcml2ZXJzL2lucHV0L3NlcmlvL2xpYnBzMi5jLTM1Ni1cXHR9XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2hpZ2htZW0uaD0zOTY9c3RhdGljIGlubGluZSB2b2lkIGNvcHlfdXNlcl9oaWdocGFnZShzdHJ1Y3QgcGFnZSAqdG8sIHN0cnVjdCBwYWdlICpmcm9tLFxcbi0tXFxuaW5jbHVkZS9saW51eC9oaWdobWVtLmgtNDAzLVxcdGNvcHlfdXNlcl9wYWdlKHZ0bywgdmZyb20sIHZhZGRyLCB0byk7XFxuaW5jbHVkZS9saW51eC9oaWdobWVtLmg6NDA0OlxcdGttc2FuX3VucG9pc29uX21lbW9yeShwYWdlX2FkZHJlc3ModG8pLCBQQUdFX1NJWkUpO1xcbmluY2x1ZGUvbGludXgvaGlnaG1lbS5oLTQwNS1cXHRrdW5tYXBfbG9jYWwodnRvKTtcXG4tLVxcbmluY2x1ZGUvbGludXgvaGlnaG1lbS5oPTQzND1zdGF0aWMgaW5saW5lIGludCBjb3B5X21jX3VzZXJfaGlnaHBhZ2Uoc3RydWN0IHBhZ2UgKnRvLCBzdHJ1Y3QgcGFnZSAqZnJvbSxcXG4tLVxcbmluY2x1ZGUvbGludXgvaGlnaG1lbS5oLTQ0My1cXHRpZiAoIXJldClcXG5pbmNsdWRlL2xpbnV4L2hpZ2htZW0uaDo0NDQ6XFx0XFx0a21zYW5fdW5wb2lzb25fbWVtb3J5KHBhZ2VfYWRkcmVzcyh0byksIFBBR0VfU0laRSk7XFxuaW5jbHVkZS9saW51eC9oaWdobWVtLmgtNDQ1LVxcdGt1bm1hcF9sb2NhbCh2dG8pO1xcbi0tXFxuaW5jbHVkZS9saW51eC9pbnN0cnVtZW50ZWQuaD0xNjE9aW5zdHJ1bWVudF9jb3B5X2Zyb21fdXNlcl9hZnRlcihjb25zdCB2b2lkICp0bywgY29uc3Qgdm9pZCBfX3VzZXIgKmZyb20sXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2luc3RydW1lbnRlZC5oLTE2My17XFxuaW5jbHVkZS9saW51eC9pbnN0cnVtZW50ZWQuaDoxNjQ6XFx0a21zYW5fdW5wb2lzb25fbWVtb3J5KHRvLCBuIC0gbGVmdCk7XFxuaW5jbHVkZS9saW51eC9pbnN0cnVtZW50ZWQuaC0xNjUtfVxcbi0tXFxuaW5jbHVkZS9saW51eC9pbnN0cnVtZW50ZWQuaD0xOTU9c3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIGluc3RydW1lbnRfbWVtY3B5X2FmdGVyKHZvaWQgKnRvLCBjb25zdCB2b2lkICpmcm9tLFxcbi0tXFxuaW5jbHVkZS9saW51eC9pbnN0cnVtZW50ZWQuaC0yMTItXFx0dTY0IF9fdG1wID0gKHU2NCkodG8pO1xcdFxcdFxcdFxcdFxcXFxcXG5pbmNsdWRlL2xpbnV4L2luc3RydW1lbnRlZC5oOjIxMzpcXHRrbXNhbl91bnBvaXNvbl9tZW1vcnkoXFx1MDAyNl9fdG1wLCBzaXplb2YoX190bXApKTtcXHRcXFxcXFxuaW5jbHVkZS9saW51eC9pbnN0cnVtZW50ZWQuaC0yMTQtXFx0dG8gPSBfX3RtcDtcXHRcXHRcXHRcXHRcXHRcXFxcXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2ttc2FuLWNoZWNrcy5oPTI3PXZvaWQga21zYW5fcG9pc29uX21lbW9yeShjb25zdCB2b2lkICphZGRyZXNzLCBzaXplX3Qgc2l6ZSwgZ2ZwX3QgZmxhZ3MpO1xcbi0tXFxuaW5jbHVkZS9saW51eC9rbXNhbi1jaGVja3MuaC0yOS0vKipcXG5pbmNsdWRlL2xpbnV4L2ttc2FuLWNoZWNrcy5oOjMwOiAqIGttc2FuX3VucG9pc29uX21lbW9yeSgpIC0gIE1hcmsgdGhlIG1lbW9yeSByYW5nZSBhcyBpbml0aWFsaXplZC5cXG5pbmNsdWRlL2xpbnV4L2ttc2FuLWNoZWNrcy5oLTMxLSAqIEBhZGRyZXNzOiBhZGRyZXNzIHRvIHN0YXJ0IHdpdGguXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2ttc2FuLWNoZWNrcy5oLTM2LSAqL1xcbmluY2x1ZGUvbGludXgva21zYW4tY2hlY2tzLmg6Mzc6dm9pZCBrbXNhbl91bnBvaXNvbl9tZW1vcnkoY29uc3Qgdm9pZCAqYWRkcmVzcywgc2l6ZV90IHNpemUpO1xcbmluY2x1ZGUvbGludXgva21zYW4tY2hlY2tzLmgtMzgtXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2ttc2FuLWNoZWNrcy5oPTc3PXN0YXRpYyBpbmxpbmUgdm9pZCBrbXNhbl9wb2lzb25fbWVtb3J5KGNvbnN0IHZvaWQgKmFkZHJlc3MsIHNpemVfdCBzaXplLFxcbi0tXFxuaW5jbHVkZS9saW51eC9rbXNhbi1jaGVja3MuaC04MC19XFxuaW5jbHVkZS9saW51eC9rbXNhbi1jaGVja3MuaDo4MTpzdGF0aWMgaW5saW5lIHZvaWQga21zYW5fdW5wb2lzb25fbWVtb3J5KGNvbnN0IHZvaWQgKmFkZHJlc3MsIHNpemVfdCBzaXplKVxcbmluY2x1ZGUvbGludXgva21zYW4tY2hlY2tzLmgtODIte1xcbi0tXFxuaW5jbHVkZS9saW51eC9rbXNhbi5oPTIyMT12b2lkIGttc2FuX2hhbmRsZV91cmIoY29uc3Qgc3RydWN0IHVyYiAqdXJiLCBib29sIGlzX291dCk7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2ttc2FuLmgtMjI3LSAqIEtNU0FOIHVucG9pc29ucyB0aGUgY29udGVudHMgb2YgdGhlIHBhc3NlZCBwdF9yZWdzLCBwcmV2ZW50aW5nIHBvdGVudGlhbFxcbmluY2x1ZGUvbGludXgva21zYW4uaDoyMjg6ICogZmFsc2UgcG9zaXRpdmUgcmVwb3J0cy4gVW5saWtlIGttc2FuX3VucG9pc29uX21lbW9yeSgpLFxcbmluY2x1ZGUvbGludXgva21zYW4uaC0yMjktICoga21zYW5fdW5wb2lzb25fZW50cnlfcmVncygpIGNhbiBiZSBjYWxsZWQgZnJvbSB0aGUgcmVnaW9ucyB3aGVyZVxcbi0tXFxuaW5jbHVkZS9saW51eC9tbS5oPTQ5OTQ9ZXh0ZXJuIGludCBtZW1vcnlfZmFpbHVyZSh1bnNpZ25lZCBsb25nIHBmbiwgaW50IGZsYWdzKTtcXG5pbmNsdWRlL2xpbnV4L21tLmg6NDk5NTpleHRlcm4gaW50IHVucG9pc29uX21lbW9yeSh1bnNpZ25lZCBsb25nIHBmbik7XFxuaW5jbHVkZS9saW51eC9tbS5oLTQ5OTYtZXh0ZXJuIGF0b21pY19sb25nX3QgbnVtX3BvaXNvbmVkX3BhZ2VzIF9fcmVhZF9tb3N0bHk7XFxuLS1cXG5rZXJuZWwvYnBmL2NvcmUuYz0yNDAxPXN0YXRpYyB1bnNpZ25lZCBpbnQgUFJPR19OQU1FKHN0YWNrX3NpemUpKGNvbnN0IHZvaWQgKmN0eCwgY29uc3Qgc3RydWN0IGJwZl9pbnNuICppbnNuKSBcXFxcXFxuLS1cXG5rZXJuZWwvYnBmL2NvcmUuYy0yNDA1LVxcXFxcXG5rZXJuZWwvYnBmL2NvcmUuYzoyNDA2OlxcdGttc2FuX3VucG9pc29uX21lbW9yeShzdGFjaywgc2l6ZW9mKHN0YWNrKSk7IFxcXFxcXG5rZXJuZWwvYnBmL2NvcmUuYy0yNDA3LVxcdEZQID0gKHU2NCkgKHVuc2lnbmVkIGxvbmcpIFxcdTAwMjZzdGFja1tBUlJBWV9TSVpFKHN0YWNrKV07IFxcXFxcXG4tLVxcbmtlcm5lbC9icGYvY29yZS5jPTI0MTQ9c3RhdGljIHU2NCBQUk9HX05BTUVfQVJHUyhzdGFja19zaXplKSh1NjQgcjEsIHU2NCByMiwgdTY0IHIzLCB1NjQgcjQsIHU2NCByNSwgXFxcXFxcbi0tXFxua2VybmVsL2JwZi9jb3JlLmMtMjQxOS1cXFxcXFxua2VybmVsL2JwZi9jb3JlLmM6MjQyMDpcXHRrbXNhbl91bnBvaXNvbl9tZW1vcnkoc3RhY2ssIHNpemVvZihzdGFjaykpOyBcXFxcXFxua2VybmVsL2JwZi9jb3JlLmMtMjQyMS1cXHRGUCA9ICh1NjQpICh1bnNpZ25lZCBsb25nKSBcXHUwMDI2c3RhY2tbQVJSQVlfU0laRShzdGFjayldOyBcXFxcXFxuLS1cXG5rZXJuZWwvZG1hL3N3aW90bGIuYz04NTg9c3RhdGljIHZvaWQgc3dpb3RsYl9ib3VuY2Uoc3RydWN0IGRldmljZSAqZGV2LCBwaHlzX2FkZHJfdCB0bGJfYWRkciwgc2l6ZV90IHNpemUsXFxuLS1cXG5rZXJuZWwvZG1hL3N3aW90bGIuYy05MTctXFx0XFx0XFx0fSBlbHNlIHtcXG5rZXJuZWwvZG1hL3N3aW90bGIuYzo5MTg6XFx0XFx0XFx0XFx0a21zYW5fdW5wb2lzb25fbWVtb3J5KHZhZGRyLCBzeik7XFxua2VybmVsL2RtYS9zd2lvdGxiLmMtOTE5LVxcdFxcdFxcdFxcdG1lbWNweV90b19wYWdlKHBhZ2UsIG9mZnNldCwgdmFkZHIsIHN6KTtcXG4tLVxcbmtlcm5lbC9kbWEvc3dpb3RsYi5jLTkzNi1cXHR9IGVsc2Uge1xcbmtlcm5lbC9kbWEvc3dpb3RsYi5jOjkzNzpcXHRcXHRrbXNhbl91bnBvaXNvbl9tZW1vcnkodmFkZHIsIHNpemUpO1xcbmtlcm5lbC9kbWEvc3dpb3RsYi5jLTkzOC1cXHRcXHRtZW1jcHkocGh5c190b192aXJ0KG9yaWdfYWRkciksIHZhZGRyLCBzaXplKTtcXG4tLVxcbmtlcm5lbC9rY292LmM9MTUxPXN0YXRpYyB2b2lkIGtjb3ZfcmVtb3RlX2FyZWFfcHV0KHN0cnVjdCBrY292X3JlbW90ZV9hcmVhICphcmVhLFxcbi0tXFxua2VybmVsL2tjb3YuYy0xNjEtXFx0ICovXFxua2VybmVsL2tjb3YuYzoxNjI6XFx0a21zYW5fdW5wb2lzb25fbWVtb3J5KFxcdTAwMjZhcmVhLVxcdTAwM2VsaXN0LCBzaXplb2YoYXJlYS1cXHUwMDNlbGlzdCkpO1xcbmtlcm5lbC9rY292LmMtMTYzLX1cXG4tLVxcbmtlcm5lbC90cmFjZS9mdHJhY2UuYz04NTU1PXZvaWQgYXJjaF9mdHJhY2Vfb3BzX2xpc3RfZnVuYyh1bnNpZ25lZCBsb25nIGlwLCB1bnNpZ25lZCBsb25nIHBhcmVudF9pcCxcXG4tLVxcbmtlcm5lbC90cmFjZS9mdHJhY2UuYy04NTU3LXtcXG5rZXJuZWwvdHJhY2UvZnRyYWNlLmM6ODU1ODpcXHRrbXNhbl91bnBvaXNvbl9tZW1vcnkoZnJlZ3MsIGZ0cmFjZV9yZWdzX3NpemUoKSk7XFxua2VybmVsL3RyYWNlL2Z0cmFjZS5jLTg1NTktXFx0X19mdHJhY2Vfb3BzX2xpc3RfZnVuYyhpcCwgcGFyZW50X2lwLCBOVUxMLCBmcmVncyk7XFxuLS1cXG5saWIvY3J5cHRvL2FybTY0L3NoYTI1Ni5oPTQ0PXN0YXRpYyBib29sIHNoYTI1Nl9maW51cF8yeF9hcmNoKGNvbnN0IHN0cnVjdCBfX3NoYTI1Nl9jdHggKmN0eCxcXG4tLVxcbmxpYi9jcnlwdG8vYXJtNjQvc2hhMjU2LmgtNTMtXFx0XFx0XFx0c2hhMjU2X2NlX2ZpbnVwMngoY3R4LCBkYXRhMSwgZGF0YTIsIGxlbiwgb3V0MSwgb3V0Mik7XFxubGliL2NyeXB0by9hcm02NC9zaGEyNTYuaDo1NDpcXHRcXHRrbXNhbl91bnBvaXNvbl9tZW1vcnkob3V0MSwgU0hBMjU2X0RJR0VTVF9TSVpFKTtcXG5saWIvY3J5cHRvL2FybTY0L3NoYTI1Ni5oOjU1OlxcdFxcdGttc2FuX3VucG9pc29uX21lbW9yeShvdXQyLCBTSEEyNTZfRElHRVNUX1NJWkUpO1xcbmxpYi9jcnlwdG8vYXJtNjQvc2hhMjU2LmgtNTYtXFx0XFx0cmV0dXJuIHRydWU7XFxuLS1cXG5saWIvY3J5cHRvL3MzOTAvc2hhMy5oPTY0PXN0YXRpYyBpbmxpbmUgYm9vbCBzMzkwX3NoYTMoaW50IGZ1bmMsIGNvbnN0IHU4ICppbiwgc2l6ZV90IGluX2xlbixcXG4tLVxcbmxpYi9jcnlwdG8vczM5MC9zaGEzLmgtNzktXFx0aWYgKHN0YXRpY19icmFuY2hfbGlrZWx5KFxcdTAwMjZoYXZlX3NoYTNfaW5pdF9vcHRpbSkpXFxubGliL2NyeXB0by9zMzkwL3NoYTMuaDo4MDpcXHRcXHRrbXNhbl91bnBvaXNvbl9tZW1vcnkoXFx1MDAyNnN0YXRlLCBvdXRfbGVuKTtcXG5saWIvY3J5cHRvL3MzOTAvc2hhMy5oLTgxLVxcbi0tXFxubGliL2NyeXB0by94ODYvc2hhMjU2Lmg9NzA9c3RhdGljIGJvb2wgc2hhMjU2X2ZpbnVwXzJ4X2FyY2goY29uc3Qgc3RydWN0IF9fc2hhMjU2X2N0eCAqY3R4LFxcbi0tXFxubGliL2NyeXB0by94ODYvc2hhMjU2LmgtODQtXFx0XFx0a2VybmVsX2ZwdV9lbmQoKTtcXG5saWIvY3J5cHRvL3g4Ni9zaGEyNTYuaDo4NTpcXHRcXHRrbXNhbl91bnBvaXNvbl9tZW1vcnkob3V0MSwgU0hBMjU2X0RJR0VTVF9TSVpFKTtcXG5saWIvY3J5cHRvL3g4Ni9zaGEyNTYuaDo4NjpcXHRcXHRrbXNhbl91bnBvaXNvbl9tZW1vcnkob3V0MiwgU0hBMjU2X0RJR0VTVF9TSVpFKTtcXG5saWIvY3J5cHRvL3g4Ni9zaGEyNTYuaC04Ny1cXHRcXHRyZXR1cm4gdHJ1ZTtcXG4tLVxcbmxpYi9pb21hcC5jPTM2MD12b2lkIGlvcmVhZDhfcmVwKGNvbnN0IHZvaWQgX19pb21lbSAqYWRkciwgdm9pZCAqZHN0LCB1bnNpZ25lZCBsb25nIGNvdW50KVxcbi0tXFxubGliL2lvbWFwLmMtMzYzLVxcdC8qIEtNU0FOIG11c3QgdHJlYXQgdmFsdWVzIHJlYWQgZnJvbSBkZXZpY2VzIGFzIGluaXRpYWxpemVkLiAqL1xcbmxpYi9pb21hcC5jOjM2NDpcXHRrbXNhbl91bnBvaXNvbl9tZW1vcnkoZHN0LCBjb3VudCk7XFxubGliL2lvbWFwLmMtMzY1LX1cXG5saWIvaW9tYXAuYz0zNjY9dm9pZCBpb3JlYWQxNl9yZXAoY29uc3Qgdm9pZCBfX2lvbWVtICphZGRyLCB2b2lkICpkc3QsIHVuc2lnbmVkIGxvbmcgY291bnQpXFxuLS1cXG5saWIvaW9tYXAuYy0zNjktXFx0LyogS01TQU4gbXVzdCB0cmVhdCB2YWx1ZXMgcmVhZCBmcm9tIGRldmljZXMgYXMgaW5pdGlhbGl6ZWQuICovXFxubGliL2lvbWFwLmM6MzcwOlxcdGttc2FuX3VucG9pc29uX21lbW9yeShkc3QsIGNvdW50ICogMik7XFxubGliL2lvbWFwLmMtMzcxLX1cXG5saWIvaW9tYXAuYz0zNzI9dm9pZCBpb3JlYWQzMl9yZXAoY29uc3Qgdm9pZCBfX2lvbWVtICphZGRyLCB2b2lkICpkc3QsIHVuc2lnbmVkIGxvbmcgY291bnQpXFxuLS1cXG5saWIvaW9tYXAuYy0zNzUtXFx0LyogS01TQU4gbXVzdCB0cmVhdCB2YWx1ZXMgcmVhZCBmcm9tIGRldmljZXMgYXMgaW5pdGlhbGl6ZWQuICovXFxubGliL2lvbWFwLmM6Mzc2OlxcdGttc2FuX3VucG9pc29uX21lbW9yeShkc3QsIGNvdW50ICogNCk7XFxubGliL2lvbWFwLmMtMzc3LX1cXG4tLVxcbmxpYi9zdGFja2RlcG90LmM9NDM0PWRlcG90X2FsbG9jX3N0YWNrKHVuc2lnbmVkIGxvbmcgKmVudHJpZXMsIHVuc2lnbmVkIGludCBucl9lbnRyaWVzLCB1MzIgaGFzaCwgZGVwb3RfZmxhZ3NfdCBmbGFncywgdm9pZCAqKnByZWFsbG9jKVxcbi0tXFxubGliL3N0YWNrZGVwb3QuYy00ODctXFx0ICovXFxubGliL3N0YWNrZGVwb3QuYzo0ODg6XFx0a21zYW5fdW5wb2lzb25fbWVtb3J5KHN0YWNrLCByZWNvcmRfc2l6ZSk7XFxubGliL3N0YWNrZGVwb3QuYy00ODktXFxuLS1cXG5saWIvc3RhY2tkZXBvdC5jPTc2MD11bnNpZ25lZCBpbnQgc3RhY2tfZGVwb3RfZmV0Y2goZGVwb3Rfc3RhY2tfaGFuZGxlX3QgaGFuZGxlLFxcbi0tXFxubGliL3N0YWNrZGVwb3QuYy03NjktXFx0ICovXFxubGliL3N0YWNrZGVwb3QuYzo3NzA6XFx0a21zYW5fdW5wb2lzb25fbWVtb3J5KGVudHJpZXMsIHNpemVvZigqZW50cmllcykpO1xcbmxpYi9zdGFja2RlcG90LmMtNzcxLVxcbi0tXFxubGliL3psaWJfZGZsdGNjL2RmbHRjY191dGlsLmg9Mjk9c3RhdGljIGlubGluZSBkZmx0Y2NfY2MgZGZsdGNjKFxcbi0tXFxubGliL3psaWJfZGZsdGNjL2RmbHRjY191dGlsLmgtNzEtICAgIGNhc2UgREZMVENDX1FBRjpcXG5saWIvemxpYl9kZmx0Y2MvZGZsdGNjX3V0aWwuaDo3MjogICAgICAgIGttc2FuX3VucG9pc29uX21lbW9yeShwYXJhbSwgc2l6ZW9mKHN0cnVjdCBkZmx0Y2NfcWFmX3BhcmFtKSk7XFxubGliL3psaWJfZGZsdGNjL2RmbHRjY191dGlsLmgtNzMtICAgICAgICBicmVhaztcXG5saWIvemxpYl9kZmx0Y2MvZGZsdGNjX3V0aWwuaC03NC0gICAgY2FzZSBERkxUQ0NfR0RIVDpcXG5saWIvemxpYl9kZmx0Y2MvZGZsdGNjX3V0aWwuaDo3NTogICAgICAgIGttc2FuX3VucG9pc29uX21lbW9yeShwYXJhbSwgb2Zmc2V0b2Yoc3RydWN0IGRmbHRjY19wYXJhbV92MCwgY3NiKSk7XFxubGliL3psaWJfZGZsdGNjL2RmbHRjY191dGlsLmgtNzYtICAgICAgICBicmVhaztcXG5saWIvemxpYl9kZmx0Y2MvZGZsdGNjX3V0aWwuaC03Ny0gICAgY2FzZSBERkxUQ0NfQ01QUjpcXG5saWIvemxpYl9kZmx0Y2MvZGZsdGNjX3V0aWwuaDo3ODogICAgICAgIGttc2FuX3VucG9pc29uX21lbW9yeShwYXJhbSwgc2l6ZW9mKHN0cnVjdCBkZmx0Y2NfcGFyYW1fdjApKTtcXG5saWIvemxpYl9kZmx0Y2MvZGZsdGNjX3V0aWwuaDo3OTogICAgICAgIGttc2FuX3VucG9pc29uX21lbW9yeShcXG5saWIvemxpYl9kZmx0Y2MvZGZsdGNjX3V0aWwuaC04MC0gICAgICAgICAgICAgICAgb3JpZ190MixcXG4tLVxcbmxpYi96bGliX2RmbHRjYy9kZmx0Y2NfdXRpbC5oLTg0LSAgICBjYXNlIERGTFRDQ19YUE5EOlxcbmxpYi96bGliX2RmbHRjYy9kZmx0Y2NfdXRpbC5oOjg1OiAgICAgICAga21zYW5fdW5wb2lzb25fbWVtb3J5KHBhcmFtLCBzaXplb2Yoc3RydWN0IGRmbHRjY19wYXJhbV92MCkpO1xcbmxpYi96bGliX2RmbHRjYy9kZmx0Y2NfdXRpbC5oOjg2OiAgICAgICAga21zYW5fdW5wb2lzb25fbWVtb3J5KG9yaWdfdDIsIHQyIC0gb3JpZ190Mik7XFxubGliL3psaWJfZGZsdGNjL2RmbHRjY191dGlsLmgtODctICAgICAgICBicmVhaztcXG4tLVxcbm1tL2h3cG9pc29uLWluamVjdC5jPTE0ND1zdGF0aWMgaW50IGh3cG9pc29uX3VucG9pc29uKHZvaWQgKmRhdGEsIHU2NCB2YWwpXFxuLS1cXG5tbS9od3BvaXNvbi1pbmplY3QuYy0xNDgtXFxubW0vaHdwb2lzb24taW5qZWN0LmM6MTQ5OlxcdHJldHVybiB1bnBvaXNvbl9tZW1vcnkodmFsKTtcXG5tbS9od3BvaXNvbi1pbmplY3QuYy0xNTAtfVxcbi0tXFxubW0va21zYW4vY29yZS5jPTQwPXZvaWQga21zYW5faW50ZXJuYWxfdGFza19jcmVhdGUoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrKVxcbi0tXFxubW0va21zYW4vY29yZS5jLTQ1LVxcdF9fbWVtc2V0KGN0eCwgMCwgc2l6ZW9mKCpjdHgpKTtcXG5tbS9rbXNhbi9jb3JlLmM6NDY6XFx0a21zYW5faW50ZXJuYWxfdW5wb2lzb25fbWVtb3J5KGluZm8sIHNpemVvZigqaW5mbyksIGZhbHNlKTtcXG5tbS9rbXNhbi9jb3JlLmMtNDctfVxcbi0tXFxubW0va21zYW4vY29yZS5jPTQ5PXZvaWQga21zYW5faW50ZXJuYWxfcG9pc29uX21lbW9yeSh2b2lkICphZGRyZXNzLCBzaXplX3Qgc2l6ZSwgZ2ZwX3QgZmxhZ3MsXFxuLS1cXG5tbS9rbXNhbi9jb3JlLmMtNjAtXFxubW0va21zYW4vY29yZS5jOjYxOnZvaWQga21zYW5faW50ZXJuYWxfdW5wb2lzb25fbWVtb3J5KHZvaWQgKmFkZHJlc3MsIHNpemVfdCBzaXplLCBib29sIGNoZWNrZWQpXFxubW0va21zYW4vY29yZS5jLTYyLXtcXG4tLVxcbm1tL2ttc2FuL2NvcmUuYz04MD12b2lkIGttc2FuX2ludGVybmFsX21lbW1vdmVfbWV0YWRhdGEodm9pZCAqZHN0LCB2b2lkICpzcmMsIHNpemVfdCBuKVxcbi0tXFxubW0va21zYW4vY29yZS5jLTk5LVxcdFxcdC8qIEBzcmMgaXMgdW50cmFja2VkOiBtYXJrIEBkc3QgYXMgaW5pdGlhbGl6ZWQuICovXFxubW0va21zYW4vY29yZS5jOjEwMDpcXHRcXHRrbXNhbl9pbnRlcm5hbF91bnBvaXNvbl9tZW1vcnkoZHN0LCBuLCAvKmNoZWNrZWQqLyBmYWxzZSk7XFxubW0va21zYW4vY29yZS5jLTEwMS1cXHRcXHRyZXR1cm47XFxuLS1cXG5tbS9rbXNhbi9jb3JlLmM9MTQ1PWRlcG90X3N0YWNrX2hhbmRsZV90IGttc2FuX2ludGVybmFsX2NoYWluX29yaWdpbihkZXBvdF9zdGFja19oYW5kbGVfdCBpZClcXG4tLVxcbm1tL2ttc2FuL2NvcmUuYy0xODUtXFx0ICovXFxubW0va21zYW4vY29yZS5jOjE4NjpcXHRrbXNhbl9pbnRlcm5hbF91bnBvaXNvbl9tZW1vcnkoZW50cmllcywgc2l6ZW9mKGVudHJpZXMpLCBmYWxzZSk7XFxubW0va21zYW4vY29yZS5jLTE4Ny1cXHRoYW5kbGUgPSBzdGFja19kZXBvdF9zYXZlKGVudHJpZXMsIEFSUkFZX1NJWkUoZW50cmllcyksIF9fR0ZQX0hJR0gpO1xcbi0tXFxubW0va21zYW4vaG9va3MuYz00OD12b2lkIGttc2FuX3NsYWJfYWxsb2Moc3RydWN0IGttZW1fY2FjaGUgKnMsIHZvaWQgKm9iamVjdCwgZ2ZwX3QgZmxhZ3MpXFxuLS1cXG5tbS9rbXNhbi9ob29rcy5jLTYyLVxcdGlmIChmbGFncyBcXHUwMDI2IF9fR0ZQX1pFUk8pXFxubW0va21zYW4vaG9va3MuYzo2MzpcXHRcXHRrbXNhbl9pbnRlcm5hbF91bnBvaXNvbl9tZW1vcnkob2JqZWN0LCBzLVxcdTAwM2VvYmplY3Rfc2l6ZSxcXG5tbS9rbXNhbi9ob29rcy5jLTY0LVxcdFxcdFxcdFxcdFxcdCAgICAgICBLTVNBTl9QT0lTT05fQ0hFQ0spO1xcbi0tXFxubW0va21zYW4vaG9va3MuYz05Mz12b2lkIGttc2FuX2ttYWxsb2NfbGFyZ2UoY29uc3Qgdm9pZCAqcHRyLCBzaXplX3Qgc2l6ZSwgZ2ZwX3QgZmxhZ3MpXFxuLS1cXG5tbS9rbXNhbi9ob29rcy5jLTEwMC1cXHRpZiAoZmxhZ3MgXFx1MDAyNiBfX0dGUF9aRVJPKVxcbm1tL2ttc2FuL2hvb2tzLmM6MTAxOlxcdFxcdGttc2FuX2ludGVybmFsX3VucG9pc29uX21lbW9yeSgodm9pZCAqKXB0ciwgc2l6ZSxcXG5tbS9rbXNhbi9ob29rcy5jLTEwMi1cXHRcXHRcXHRcXHRcXHQgICAgICAgLypjaGVja2VkKi8gdHJ1ZSk7XFxuLS1cXG5tbS9rbXNhbi9ob29rcy5jPTMwMT12b2lkIGttc2FuX2hhbmRsZV91cmIoY29uc3Qgc3RydWN0IHVyYiAqdXJiLCBib29sIGlzX291dClcXG4tLVxcbm1tL2ttc2FuL2hvb2tzLmMtMzEwLVxcdGVsc2VcXG5tbS9rbXNhbi9ob29rcy5jOjMxMTpcXHRcXHRrbXNhbl9pbnRlcm5hbF91bnBvaXNvbl9tZW1vcnkodXJiLVxcdTAwM2V0cmFuc2Zlcl9idWZmZXIsXFxubW0va21zYW4vaG9va3MuYy0zMTItXFx0XFx0XFx0XFx0XFx0ICAgICAgIHVyYi1cXHUwMDNldHJhbnNmZXJfYnVmZmVyX2xlbmd0aCxcXG4tLVxcbm1tL2ttc2FuL2hvb2tzLmM9MzE3PXN0YXRpYyB2b2lkIGttc2FuX2hhbmRsZV9kbWFfcGFnZShjb25zdCB2b2lkICphZGRyLCBzaXplX3Qgc2l6ZSxcXG4tLVxcbm1tL2ttc2FuL2hvb2tzLmMtMzIzLVxcdFxcdFxcdFxcdFxcdCAgICAvKnVzZXJfYWRkciovIE5VTEwsIFJFQVNPTl9BTlkpO1xcbm1tL2ttc2FuL2hvb2tzLmM6MzI0OlxcdFxcdGttc2FuX2ludGVybmFsX3VucG9pc29uX21lbW9yeSgodm9pZCAqKWFkZHIsIHNpemUsXFxubW0va21zYW4vaG9va3MuYy0zMjUtXFx0XFx0XFx0XFx0XFx0ICAgICAgIC8qY2hlY2tlZCovIGZhbHNlKTtcXG4tLVxcbm1tL2ttc2FuL2hvb2tzLmMtMzMxLVxcdGNhc2UgRE1BX0ZST01fREVWSUNFOlxcbm1tL2ttc2FuL2hvb2tzLmM6MzMyOlxcdFxcdGttc2FuX2ludGVybmFsX3VucG9pc29uX21lbW9yeSgodm9pZCAqKWFkZHIsIHNpemUsXFxubW0va21zYW4vaG9va3MuYy0zMzMtXFx0XFx0XFx0XFx0XFx0ICAgICAgIC8qY2hlY2tlZCovIGZhbHNlKTtcXG4tLVxcbm1tL2ttc2FuL2hvb2tzLmM9MzkyPUVYUE9SVF9TWU1CT0woa21zYW5fcG9pc29uX21lbW9yeSk7XFxuLS1cXG5tbS9rbXNhbi9ob29rcy5jLTM5Ny0gKi9cXG5tbS9rbXNhbi9ob29rcy5jOjM5ODp2b2lkIGttc2FuX3VucG9pc29uX21lbW9yeShjb25zdCB2b2lkICphZGRyZXNzLCBzaXplX3Qgc2l6ZSlcXG5tbS9rbXNhbi9ob29rcy5jLTM5OS17XFxuLS1cXG5tbS9rbXNhbi9ob29rcy5jLTQwNi1cXHQvKiBUaGUgdXNlcnMgbWF5IHdhbnQgdG8gcG9pc29uL3VucG9pc29uIHJhbmRvbSBtZW1vcnkuICovXFxubW0va21zYW4vaG9va3MuYzo0MDc6XFx0a21zYW5faW50ZXJuYWxfdW5wb2lzb25fbWVtb3J5KCh2b2lkICopYWRkcmVzcywgc2l6ZSxcXG5tbS9rbXNhbi9ob29rcy5jLTQwOC1cXHRcXHRcXHRcXHQgICAgICAgS01TQU5fUE9JU09OX05PQ0hFQ0spO1xcbi0tXFxubW0va21zYW4vaG9va3MuYy00MTAtfVxcbm1tL2ttc2FuL2hvb2tzLmM6NDExOkVYUE9SVF9TWU1CT0woa21zYW5fdW5wb2lzb25fbWVtb3J5KTtcXG5tbS9rbXNhbi9ob29rcy5jLTQxMi1cXG5tbS9rbXNhbi9ob29rcy5jLTQxMy0vKlxcbm1tL2ttc2FuL2hvb2tzLmM6NDE0OiAqIFZlcnNpb24gb2Yga21zYW5fdW5wb2lzb25fbWVtb3J5KCkgY2FsbGVkIGZyb20gSVJRIGVudHJ5IGZ1bmN0aW9ucy5cXG5tbS9rbXNhbi9ob29rcy5jLTQxNS0gKi9cXG5tbS9rbXNhbi9ob29rcy5jPTQxNj12b2lkIGttc2FuX3VucG9pc29uX2VudHJ5X3JlZ3MoY29uc3Qgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpXFxubW0va21zYW4vaG9va3MuYy00MTcte1xcbm1tL2ttc2FuL2hvb2tzLmM6NDE4OlxcdGttc2FuX3VucG9pc29uX21lbW9yeSgodm9pZCAqKXJlZ3MsIHNpemVvZigqcmVncykpO1xcbm1tL2ttc2FuL2hvb2tzLmMtNDE5LX1cXG4tLVxcbm1tL2ttc2FuL2luc3RydW1lbnRhdGlvbi5jPTEwNj12b2lkIF9fbXNhbl9pbnN0cnVtZW50X2FzbV9zdG9yZSh2b2lkICphZGRyLCB1aW50cHRyX3Qgc2l6ZSlcXG4tLVxcbm1tL2ttc2FuL2luc3RydW1lbnRhdGlvbi5jLTEyNi1cXHQvKiBVbnBvaXNvbmluZyB0aGUgbWVtb3J5IG9uIGJlc3QgZWZmb3J0LiAqL1xcbm1tL2ttc2FuL2luc3RydW1lbnRhdGlvbi5jOjEyNzpcXHRrbXNhbl9pbnRlcm5hbF91bnBvaXNvbl9tZW1vcnkoYWRkciwgc2l6ZSwgLypjaGVja2VkKi8gZmFsc2UpO1xcbm1tL2ttc2FuL2luc3RydW1lbnRhdGlvbi5jLTEyOC1cXHR1c2VyX2FjY2Vzc19yZXN0b3JlKHVhX2ZsYWdzKTtcXG4tLVxcbm1tL2ttc2FuL2luc3RydW1lbnRhdGlvbi5jPTIxMD12b2lkICpfX21zYW5fbWVtc2V0KHZvaWQgKmRzdCwgaW50IGMsIHVpbnRwdHJfdCBuKVxcbi0tXFxubW0va21zYW4vaW5zdHJ1bWVudGF0aW9uLmMtMjI1LVxcdCAqL1xcbm1tL2ttc2FuL2luc3RydW1lbnRhdGlvbi5jOjIyNjpcXHRrbXNhbl9pbnRlcm5hbF91bnBvaXNvbl9tZW1vcnkoZHN0LCBuLCAvKmNoZWNrZWQqLyBmYWxzZSk7XFxubW0va21zYW4vaW5zdHJ1bWVudGF0aW9uLmMtMjI3LVxcdGttc2FuX2xlYXZlX3J1bnRpbWUoKTtcXG4tLVxcbm1tL2ttc2FuL2luc3RydW1lbnRhdGlvbi5jPTI5Nz12b2lkIF9fbXNhbl91bnBvaXNvbl9hbGxvY2Eodm9pZCAqYWRkcmVzcywgdWludHB0cl90IHNpemUpXFxuLS1cXG5tbS9rbXNhbi9pbnN0cnVtZW50YXRpb24uYy0zMDItXFx0a21zYW5fZW50ZXJfcnVudGltZSgpO1xcbm1tL2ttc2FuL2luc3RydW1lbnRhdGlvbi5jOjMwMzpcXHRrbXNhbl9pbnRlcm5hbF91bnBvaXNvbl9tZW1vcnkoYWRkcmVzcywgc2l6ZSwgLypjaGVja2VkKi8gdHJ1ZSk7XFxubW0va21zYW4vaW5zdHJ1bWVudGF0aW9uLmMtMzA0LVxcdGttc2FuX2xlYXZlX3J1bnRpbWUoKTtcXG4tLVxcbm1tL2ttc2FuL2ttc2FuLmg9MTU1PXZvaWQga21zYW5faW50ZXJuYWxfcG9pc29uX21lbW9yeSh2b2lkICphZGRyZXNzLCBzaXplX3Qgc2l6ZSwgZ2ZwX3QgZmxhZ3MsXFxubW0va21zYW4va21zYW4uaC0xNTYtXFx0XFx0XFx0XFx0ICB1bnNpZ25lZCBpbnQgcG9pc29uX2ZsYWdzKTtcXG5tbS9rbXNhbi9rbXNhbi5oOjE1Nzp2b2lkIGttc2FuX2ludGVybmFsX3VucG9pc29uX21lbW9yeSh2b2lkICphZGRyZXNzLCBzaXplX3Qgc2l6ZSwgYm9vbCBjaGVja2VkKTtcXG5tbS9rbXNhbi9rbXNhbi5oLTE1OC12b2lkIGttc2FuX2ludGVybmFsX3NldF9zaGFkb3dfb3JpZ2luKHZvaWQgKmFkZHJlc3MsIHNpemVfdCBzaXplLCBpbnQgYixcXG4tLVxcbm1tL2ttc2FuL2ttc2FuX3Rlc3QuYz02NzA9c3RhdGljIHZvaWQgdGVzdF9zdGFja2RlcG90X3JvdW5kdHJpcChzdHJ1Y3Qga3VuaXQgKnRlc3QpXFxuLS1cXG5tbS9rbXNhbi9rbXNhbl90ZXN0LmMtNjkxLS8qXFxubW0va21zYW4va21zYW5fdGVzdC5jOjY5MjogKiBUZXN0IGNhc2U6IGVuc3VyZSB0aGF0IGttc2FuX3VucG9pc29uX21lbW9yeSgpIGFuZCB0aGUgaW5zdHJ1bWVudGF0aW9uIHdvcmtcXG5tbS9rbXNhbi9rbXNhbl90ZXN0LmMtNjkzLSAqIHRoZSBzYW1lLlxcbm1tL2ttc2FuL2ttc2FuX3Rlc3QuYy02OTQtICovXFxubW0va21zYW4va21zYW5fdGVzdC5jOjY5NTpzdGF0aWMgdm9pZCB0ZXN0X3VucG9pc29uX21lbW9yeShzdHJ1Y3Qga3VuaXQgKnRlc3QpXFxubW0va21zYW4va21zYW5fdGVzdC5jLTY5Ni17XFxubW0va21zYW4va21zYW5fdGVzdC5jOjY5NzpcXHRFWFBFQ1RBVElPTl9VTklOSVRfVkFMVUVfRk4oZXhwZWN0LCBcXFwidGVzdF91bnBvaXNvbl9tZW1vcnlcXFwiKTtcXG5tbS9rbXNhbi9rbXNhbl90ZXN0LmMtNjk4LVxcdHZvbGF0aWxlIGNoYXIgYVs0XSwgYls0XTtcXG4tLVxcbm1tL2ttc2FuL2ttc2FuX3Rlc3QuYy03MDEtXFx0XFx0dGVzdCxcXG5tbS9rbXNhbi9rbXNhbl90ZXN0LmM6NzAyOlxcdFxcdFxcXCJ1bnBvaXNvbmluZyB2aWEgdGhlIGluc3RydW1lbnRhdGlvbiB2cy4ga21zYW5fdW5wb2lzb25fbWVtb3J5KCkgKDIgVU1SIHJlcG9ydHMpXFxcXG5cXFwiKTtcXG5tbS9rbXNhbi9rbXNhbl90ZXN0LmMtNzAzLVxcbi0tXFxubW0va21zYW4va21zYW5fdGVzdC5jLTcxMS1cXHQvKiBJbml0aWFsaXplIGJbMF0gYW5kIGNoZWNrIGJbMV0tLWJbM10uICovXFxubW0va21zYW4va21zYW5fdGVzdC5jOjcxMjpcXHRrbXNhbl91bnBvaXNvbl9tZW1vcnkoKGNoYXIgKilcXHUwMDI2YlswXSwgMSk7XFxubW0va21zYW4va21zYW5fdGVzdC5jLTcxMy1cXHRrbXNhbl9jaGVja19tZW1vcnkoKGNoYXIgKilcXHUwMDI2YlsxXSwgMyk7XFxuLS1cXG5tbS9rbXNhbi9rbXNhbl90ZXN0LmM9NzMzPXN0YXRpYyBzdHJ1Y3Qga3VuaXRfY2FzZSBrbXNhbl90ZXN0X2Nhc2VzW10gPSB7XFxuLS1cXG5tbS9rbXNhbi9rbXNhbl90ZXN0LmMtNzU5LVxcdEtVTklUX0NBU0UodGVzdF9zdGFja2RlcG90X3JvdW5kdHJpcCksXFxubW0va21zYW4va21zYW5fdGVzdC5jOjc2MDpcXHRLVU5JVF9DQVNFKHRlc3RfdW5wb2lzb25fbWVtb3J5KSxcXG5tbS9rbXNhbi9rbXNhbl90ZXN0LmMtNzYxLVxcdEtVTklUX0NBU0UodGVzdF9jb3B5X2Zyb21fa2VybmVsX25vZmF1bHQpLFxcbi0tXFxubW0va21zYW4vcmVwb3J0LmM9ODY9dm9pZCBrbXNhbl9wcmludF9vcmlnaW4oZGVwb3Rfc3RhY2tfaGFuZGxlX3Qgb3JpZ2luKVxcbi0tXFxubW0va21zYW4vcmVwb3J0LmMtMTI2LVxcdFxcdFxcdFxcdHN0YWNrX2RlcG90X2ZldGNoKGhlYWQsIFxcdTAwMjZjaGFpbmVkX2VudHJpZXMpO1xcbm1tL2ttc2FuL3JlcG9ydC5jOjEyNzpcXHRcXHRcXHRrbXNhbl9pbnRlcm5hbF91bnBvaXNvbl9tZW1vcnkoXFxubW0va21zYW4vcmVwb3J0LmMtMTI4LVxcdFxcdFxcdFxcdGNoYWluZWRfZW50cmllcyxcXG4tLVxcbm1tL2ttc2FuL3NoYWRvdy5jPTE1MT12b2lkIGttc2FuX2NvcHlfcGFnZV9tZXRhKHN0cnVjdCBwYWdlICpkc3QsIHN0cnVjdCBwYWdlICpzcmMpXFxuLS1cXG5tbS9rbXNhbi9zaGFkb3cuYy0xNTctXFx0aWYgKCFzcmMgfHwgIXBhZ2VfaGFzX21ldGFkYXRhKHNyYykpIHtcXG5tbS9rbXNhbi9zaGFkb3cuYzoxNTg6XFx0XFx0a21zYW5faW50ZXJuYWxfdW5wb2lzb25fbWVtb3J5KHBhZ2VfYWRkcmVzcyhkc3QpLCBQQUdFX1NJWkUsXFxubW0va21zYW4vc2hhZG93LmMtMTU5LVxcdFxcdFxcdFxcdFxcdCAgICAgICAvKmNoZWNrZWQqLyBmYWxzZSk7XFxuLS1cXG5tbS9tZW1vcnktZmFpbHVyZS5jPTE0NDE9c3RhdGljIGludCBfX2dldF91bnBvaXNvbl9wYWdlKHN0cnVjdCBwYWdlICpwYWdlKVxcbi0tXFxubW0vbWVtb3J5LWZhaWx1cmUuYy0xNDgyLSAqXFxubW0vbWVtb3J5LWZhaWx1cmUuYzoxNDgzOiAqIFdoZW4gY2FsbGVkIGZyb20gdW5wb2lzb25fbWVtb3J5KCksIHRoZSBjYWxsZXIgc2hvdWxkIGFscmVhZHkgZW5zdXJlIHRoYXRcXG5tbS9tZW1vcnktZmFpbHVyZS5jLTE0ODQtICogdGhlIGdpdmVuIHBhZ2UgaGFzIFBHX2h3cG9pc29uLiBTbyBpdCdzIG5ldmVyIHJldXNlZCBmb3Igb3RoZXIgcGFnZVxcbi0tXFxubW0vbWVtb3J5LWZhaWx1cmUuYz0yNzA1PWNvcmVfaW5pdGNhbGwobWVtb3J5X2ZhaWx1cmVfaW5pdCk7XFxuLS1cXG5tbS9tZW1vcnktZmFpbHVyZS5jLTI3MTUtLyoqXFxubW0vbWVtb3J5LWZhaWx1cmUuYzoyNzE2OiAqIHVucG9pc29uX21lbW9yeSAtIFVucG9pc29uIGEgcHJldmlvdXNseSBwb2lzb25lZCBwYWdlXFxubW0vbWVtb3J5LWZhaWx1cmUuYy0yNzE3LSAqIEBwZm46IFBhZ2UgbnVtYmVyIG9mIHRoZSB0byBiZSB1bnBvaXNvbmVkIHBhZ2VcXG4tLVxcbm1tL21lbW9yeS1mYWlsdXJlLmMtMjcyNi0gKi9cXG5tbS9tZW1vcnktZmFpbHVyZS5jOjI3Mjc6aW50IHVucG9pc29uX21lbW9yeSh1bnNpZ25lZCBsb25nIHBmbilcXG5tbS9tZW1vcnktZmFpbHVyZS5jLTI3Mjgte1xcbi0tXFxubW0vbWVtb3J5LWZhaWx1cmUuYy0yODMxLX1cXG5tbS9tZW1vcnktZmFpbHVyZS5jOjI4MzI6RVhQT1JUX1NZTUJPTCh1bnBvaXNvbl9tZW1vcnkpO1xcbm1tL21lbW9yeS1mYWlsdXJlLmMtMjgzMy1cXG4tLVxcbm1tL3BhZ2VfYWxsb2MuYz0xMzEyPXN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgYm9vbCBfX2ZyZWVfcGFnZXNfcHJlcGFyZShzdHJ1Y3QgcGFnZSAqcGFnZSxcXG4tLVxcbm1tL3BhZ2VfYWxsb2MuYy0xMzU0LVxcdFxcdCAqIE1hcmsgdGhlIGNvZGV0YWcgYXMgZW1wdHkgdG8gYXZvaWQgYWNjb3VudGluZyBlcnJvclxcbm1tL3BhZ2VfYWxsb2MuYzoxMzU1OlxcdFxcdCAqIHdoZW4gdGhlIHBhZ2UgaXMgZnJlZWQgYnkgdW5wb2lzb25fbWVtb3J5KCkuXFxubW0vcGFnZV9hbGxvYy5jLTEzNTYtXFx0XFx0ICovXFxuLS1cXG5tbS9zbHViLmM9OTYyND1zdGF0aWMgY2hhciAqY3JlYXRlX3VuaXF1ZV9pZChzdHJ1Y3Qga21lbV9jYWNoZSAqcylcXG4tLVxcbm1tL3NsdWIuYy05NjU3LVxcdH1cXG5tbS9zbHViLmM6OTY1ODpcXHRrbXNhbl91bnBvaXNvbl9tZW1vcnkobmFtZSwgcCAtIG5hbWUpO1xcbm1tL3NsdWIuYy05NjU5LVxcdHJldHVybiBuYW1lO1xcbi0tXFxubW0vc2x1Yi5jPTk3Mjk9aW50IHN5c2ZzX3NsYWJfYWxpYXMoc3RydWN0IGttZW1fY2FjaGUgKnMsIGNvbnN0IGNoYXIgKm5hbWUpXFxuLS1cXG5tbS9zbHViLmMtOTc1My1cXHRhbGlhc19saXN0ID0gYWw7XFxubW0vc2x1Yi5jOjk3NTQ6XFx0a21zYW5fdW5wb2lzb25fbWVtb3J5KGFsLCBzaXplb2YoKmFsKSk7XFxubW0vc2x1Yi5jLTk3NTUtXFx0cmV0dXJuIDA7XFxuLS1cXG50b29scy9vYmp0b29sL2NoZWNrLmM9MTA5MT1zdGF0aWMgY29uc3QgY2hhciAqdWFjY2Vzc19zYWZlX2J1aWx0aW5bXSA9IHtcXG4tLVxcbnRvb2xzL29ianRvb2wvY2hlY2suYy0xMjM0LVxcdFxcXCJrbXNhbl91bnBvaXNvbl9lbnRyeV9yZWdzXFxcIixcXG50b29scy9vYmp0b29sL2NoZWNrLmM6MTIzNTpcXHRcXFwia21zYW5fdW5wb2lzb25fbWVtb3J5XFxcIixcXG50b29scy9vYmp0b29sL2NoZWNrLmMtMTIzNi1cXHRcXFwiX19tc2FuX2NoYWluX29yaWdpblxcXCIsXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9tZW1vcnktZmFpbHVyZS5jPTIwMz1zdGF0aWMgdm9pZCBjbGVhbnVwKHN0cnVjdCBfX3Rlc3RfbWV0YWRhdGEgKl9tZXRhZGF0YSwgRklYVFVSRV9EQVRBKG1lbW9yeV9mYWlsdXJlKSAqIHNlbGYsXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9tZW1vcnktZmFpbHVyZS5jLTIwOC1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9tZW1vcnktZmFpbHVyZS5jOjIwOTpcXHRBU1NFUlRfRVEodW5wb2lzb25fbWVtb3J5KHNlbGYtXFx1MDAzZXBmbiksIDApO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL21lbW9yeS1mYWlsdXJlLmMtMjEwLVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdm1fdXRpbC5jPTY2MD1pbnQgZ2V0X2hhcmR3YXJlX2NvcnJ1cHRlZF9zaXplKHVuc2lnbmVkIGxvbmcgKnZhbClcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ZtX3V0aWwuYy02ODMtXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdm1fdXRpbC5jOjY4NDppbnQgdW5wb2lzb25fbWVtb3J5KHVuc2lnbmVkIGxvbmcgcGZuKVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ZtX3V0aWwuYy02ODUte1xcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdm1fdXRpbC5oPTE1NT1pbnQgZ2V0X2hhcmR3YXJlX2NvcnJ1cHRlZF9zaXplKHVuc2lnbmVkIGxvbmcgKnZhbCk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdm1fdXRpbC5oOjE1NjppbnQgdW5wb2lzb25fbWVtb3J5KHVuc2lnbmVkIGxvbmcgcGZuKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS92bV91dGlsLmgtMTU3LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNlQxNzo1Mjo0OC43MjYwNzczMTdaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzM2MDg4NzI4OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOlxuXG4qKlRyYWNpbmcgdGhlIE1lbW9yeSBQb2lzb25pbmcgRnVuY3Rpb25hbGl0eSoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGB1bnBvaXNvbl9tZW1vcnlgLiBUaGUgY29kZSBzYXlzIHRoaXMgZnVuY3Rpb24gaXMgZXhwb3J0ZWQgYW5kIGNhbGxlZCBmcm9tIGBod3BvaXNvbl91bnBvaXNvbmAgaW4gYG1tL2h3cG9pc29uLWluamVjdC5jYC4gR29vZCwgdGhhdCBtZWFucyBpdCdzIGRlZmluaXRlbHkgcmVhY2hhYmxlIOKAkyBpdCdzIG5vdCBzb21lIGRlYWQgY29kZSBkYW5nbGluZyBpbiB0aGUgZXRoZXIuIFRoYXQncyB0aGUgZmlyc3QgaHVyZGxlLlxuXG5Ob3csIEkgbmVlZCB0byB1bmRlcnN0YW5kICp3aGVyZSogaXQncyBiZWluZyB1c2VkIGJleW9uZCB0aGF0IGRpcmVjdCBjYWxsLiBUbyBnZXQgYSBiZXR0ZXIgZ3Jhc3Agb2YgdGhlIGJyb2FkZXIgcGljdHVyZSwgdGhlIG5leHQgbG9naWNhbCBzdGVwIHNlZW1zIHRvIGJlIHRvIGNoZWNrIGBodWdldGxiZnNfZ2V0X2lub2RlYC4gSSdtIGd1ZXNzaW5nIHRoYXQgbWlnaHQgZ2l2ZSBtZSBzb21lIGNvbnRleHQsIGVzcGVjaWFsbHkgaWYgdGhlIGNvZGUgZGVhbHMgd2l0aCBodWdlcGFnZXMuIFRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiB0aG9zZSB0d28gaXMgd2hlcmUgSSdsbCBnZXQgbW9yZSBpbnNpZ2h0LlxuXG5cbiIsIklucHV0VG9rZW5zIjozMjExMSwiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDE3OjUyOjUyLjA4Njk2NzA0NloiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjcwNjA5NTA5NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJec3RhdGljIHN0cnVjdCBpbm9kZSBcXFxcKmh1Z2V0bGJmc19nZXRfaW5vZGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvaHVnZXRsYmZzL2lub2RlLmM9Nzk2PXN0YXRpYyBzdHJ1Y3QgbG9ja19jbGFzc19rZXkgaHVnZXRsYmZzX2lfbW1hcF9yd3NlbV9rZXk7XFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtNzk3LVxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjc5ODpzdGF0aWMgc3RydWN0IGlub2RlICpodWdldGxiZnNfZ2V0X2lub2RlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsXFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtNzk5LVxcdFxcdFxcdFxcdFxcdHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNlQxNzo1Mjo1NC43OTMwNzExNTNaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzMxNDk5MDQ5MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6XG5cbioqQ29uc2lkZXJpbmcgSHVnZVRMQiBJbXBsZW1lbnRhdGlvbiBEZXRhaWxzKipcblxuT2theSwgc28gSSdtIGRpZ2dpbmcgaW50byB0aGlzIGBodWdldGxiZnNgIGNvZGUgYWdhaW4uIEkgbm90aWNlZCB0aGF0IHRoZSBgaHVnZXRsYmZzX2dldF9pbm9kZWAgZnVuY3Rpb24gaXMgbWFya2VkIGFzIGBzdGF0aWNgLiBUaGF0J3MgYSBnb29kIHNpZ247IGl0IG1lYW5zIGl0J3Mgc2NvcGVkIGludGVybmFsbHkgdG8gdGhpcyBtb2R1bGUsIHdoaWNoIHNpbXBsaWZpZXMgdW5kZXJzdGFuZGluZyBpdHMgaW1wYWN0IGFuZCByZWR1Y2VzIHBvdGVudGlhbCBmb3IgdW5leHBlY3RlZCBpbnRlcmFjdGlvbnMgd2l0aCBvdGhlciBrZXJuZWwgY29tcG9uZW50cy4gQnV0LCBpdCBnb3QgbWUgdGhpbmtpbmcuLi4gd2hhdCBhYm91dCBgaHVnZXRsYmZzX2ZpbGVfbW1hcGA/IElzIHRoYXQgc3RhdGljIHRvbywgb3IgaXMgaXQgZXhwb3NlZCBpbiBhIHdheSB0aGF0IHdhcnJhbnRzIGZ1cnRoZXIgc2NydXRpbnk/IEkgbmVlZCB0byBxdWlja2x5IGRldGVybWluZSBpdHMgdmlzaWJpbGl0eSBhbmQgd2hlcmUgaXQgaXMgYmVpbmcgdXNlZCB0byBnZXQgYSBiZXR0ZXIgaGFuZGxlIG9uIHRoZSBvdmVyYWxsIGRlc2lnbiBhbmQgYW55IHBvdGVudGlhbCByaXNrcy4gSSByZWFsbHkgaG9wZSBpdCdzIHdlbGwgZG9jdW1lbnRlZCBhbmQgZWFzeSB0byB0cmFjZS4gSSdsbCBuZWVkIHRvIGNoZWNrIHRoZSBmdW5jdGlvbidzIGRlY2xhcmF0aW9uIGFuZCB1c2FnZSB0byB1bmRlcnN0YW5kIGl0cyBzY29wZSBhbmQgcG90ZW50aWFsIGludGVyYWN0aW9ucyB3aXRoIHRoZSByZXN0IG9mIHRoZSBmaWxlIHN5c3RlbS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzI0OTQsIk91dHB1dFRva2VucyI6MjYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNlQxNzo1Mjo1OC4xMDgwNjUwMTJaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI3MDI0MjcyNTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiXnN0YXRpYyBpbnQgaHVnZXRsYmZzX2ZpbGVfbW1hcFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9odWdldGxiZnMvaW5vZGUuYz03OD1zdGF0aWMgY29uc3Qgc3RydWN0IGZzX3BhcmFtZXRlcl9zcGVjIGh1Z2V0bGJfZnNfcGFyYW1ldGVyc1tdID0ge1xcbi0tXFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtOTgtXFxuZnMvaHVnZXRsYmZzL2lub2RlLmM6OTk6c3RhdGljIGludCBodWdldGxiZnNfZmlsZV9tbWFwKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcXG5mcy9odWdldGxiZnMvaW5vZGUuYy0xMDAte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNlQxNzo1MzowMC44MTA0OTgzN1oiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyOTUxMjIyNzA5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGF0IHRob3VnaHQgcHJvY2Vzcywga2VlcGluZyBpbiBtaW5kIEknbSBzcGVha2luZyB0byBhIGZlbGxvdyBleHBlcnQ6XG5cbioqRGl2aW5nIGludG8gYGh1Z2V0bGJmc19nZXRfdW5tYXBwZWRfYXJlYWAqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGRpZyBpbnRvIGBodWdldGxiZnNfZ2V0X3VubWFwcGVkX2FyZWFgLiBUaGF0J3Mgd2hlcmUgd2Ugc3RhcnQsIHJpZ2h0PyBOZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBzeXN0ZW0ncyBmaW5kaW5nIGEgZnJlZSwgY29udGlndW91cyBjaHVuayBvZiB2aXJ0dWFsIGFkZHJlc3Mgc3BhY2UgZm9yIHRoZXNlIGh1Z2UgcGFnZXMuIEl0J3MgdGhlIGNyaXRpY2FsIGZpcnN0IHN0ZXAgaW4gYWxsIG9mIHRoaXMuIFdoYXQgYXJlIHRoZSBrZXkgY29uc2lkZXJhdGlvbnMgdGhlcmU/IEFyZSB3ZSBkZWFsaW5nIHdpdGggdGhlIHJlZ3VsYXIgbW1hcCBpbmZyYXN0cnVjdHVyZSwgb3IgZG9lcyB0aGlzIGhhdmUgaXRzIG93biBjdXN0b20gbG9naWM/IEdvdHRhIGZpZ3VyZSBvdXQgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSByZXN0IG9mIHRoZSBWTSwgd2hhdCBsb2NraW5nIGlzIGludm9sdmVkLCBhbmQgb2YgY291cnNlLCBob3cgaXQgYXZvaWRzIGZyYWdtZW50YXRpb24uIFRoaXMgZnVuY3Rpb24gaXMgdGhlIGZvdW5kYXRpb247IHVuZGVyc3RhbmRpbmcgaXQgaXMgcGFyYW1vdW50IHRvIHRoZSBlbnRpcmUgaHVnZSBwYWdlIGFsbG9jYXRpb24gcHJvY2Vzcy4gTGV0J3Mgc2VlIGhvdyBpdCdzIGltcGxlbWVudGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMjg2NywiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDE3OjUzOjAzLjc2MTcyMzYwOVoiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjczMTcwNDY1NiwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiXnN0YXRpYyB1bnNpZ25lZCBsb25nIGh1Z2V0bGJfZ2V0X3VubWFwcGVkX2FyZWFcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDE3OjUzOjA2LjQ5MzQzNDQ5NVoiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNTA5ODIwMjc2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aG9zZSB0aG91Z2h0cyBmcm9tIGFuIGV4cGVydCdzIHBlcnNwZWN0aXZlLCB1c2luZyBhIGZpcnN0LXBlcnNvbiBwZXJzcGVjdGl2ZTpcblxuKipEZWx2aW5nIGludG8gdGhlIGBodWdldGxiZnNfZmlsZV9vcGVyYXRpb25zYCoqXG5cblJpZ2h0LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzLi4uIGFuZCB0aGUgaW1tZWRpYXRlIHF1ZXN0aW9uIHRoYXQgcG9wcyB1cCwgZ2l2ZW4gbXkgZXhwZXJpZW5jZSwgaXM6IFwiV2hhdCBhYm91dCB0aGUgYGh1Z2V0bGJmc19maWxlX29wZXJhdGlvbnNgP1wiIFRoYXQncyB0aGUgY29yZSBvZiBob3cgaHVnZXRsYmZzIGludGVyYWN0cyB3aXRoIHRoZSBmaWxlc3lzdGVtIGxheWVyLCBpc24ndCBpdD8gSXQgZGljdGF0ZXMgaG93IGZpbGVzIHdpdGhpbiBhIGh1Z2V0bGJmcyBtb3VudCBhcmUgb3BlbmVkLCByZWFkLCB3cml0dGVuLCBtYXBwZWQsIGFuZCBnZW5lcmFsbHkgbWFuYWdlZC4gSXQncyB0aGUgY3JpdGljYWwgYnJpZGdlIGJldHdlZW4gdGhlIHVzZXItc3BhY2UgYXBwbGljYXRpb25zIGFuZCB0aGUgbG93LWxldmVsIG1lbW9yeSBtYW5hZ2VtZW50IHRoYXQgbGV2ZXJhZ2VzIHRob3NlIGh1Z2UgcGFnZXMuIEknbSBhbHJlYWR5IG1lbnRhbGx5IHJ1bm5pbmcgdGhyb3VnaCB0aGUgdmFyaW91cyBmdW5jdGlvbiBwb2ludGVycyBkZWZpbmVkIHdpdGhpbiB0aGF0IHN0cnVjdHVyZTogYG1tYXBgLCBgcmVhZGAsIGB3cml0ZWAsIGBvcGVuYCwgYHJlbGVhc2VgLCBhbmQgc28gb24uIFVuZGVyc3RhbmRpbmcgdGhlaXIgaW1wbGVtZW50YXRpb24gaXMga2V5LiBXZSBrbm93IHRoYXQgYGh1Z2V0bGJmc2AgbmVlZHMgdG8gaGFuZGxlIHNwZWNpZmljIGlzc3VlcyByZWxhdGVkIHRvIHRoZSBncmFudWxhcml0eSBvZiBodWdlIHBhZ2VzIGFuZCBob3cgdG8gcHJlc2VudCB0aGlzIHRvIHRoZSBhcHBsaWNhdGlvbi4gSSB3b25kZXIgaWYgdGhlcmUgYXJlIGFueSBzdWJ0bGUgYnVncyBsdXJraW5nIGluIHRoZXJlLCBvciBtYXliZSBvcHRpbWl6YXRpb25zIHRoYXQgY291bGQgYmUgbWFkZSwgcGFydGljdWxhcmx5IHdoZW4gd2UncmUgZGVhbGluZyB3aXRoIGNvbmN1cnJlbnQgYWNjZXNzLiBUaGlzIGlzIGRlZmluaXRlbHkgYSBzdGFydGluZyBwb2ludCB0byBkaXZlIGRlZXBlciB0byBjaGVjayBvbiBhbnkgcmVjZW50IGNoYW5nZXMgb3Igb25nb2luZyBpc3N1ZXMgd2l0aGluIHRoZSBzeXN0ZW0uIExldCdzIHNlZSBob3cgdGhpcyB0aWVzIGludG8gdGhlIHJlc3Qgb2YgdGhlIGtlcm5lbCdzIG1lbW9yeSBtYW5hZ2VtZW50LlxuXG5cbiIsIklucHV0VG9rZW5zIjozMzExNiwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDE3OjUzOjEwLjAwMzI1NzM2MVoiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mjc4ODAyOTE3NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJec3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgaHVnZXRsYmZzX2ZpbGVfb3BlcmF0aW9uc1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9odWdldGxiZnMvaW5vZGUuYz00NT1zdGF0aWMgY29uc3Qgc3RydWN0IGFkZHJlc3Nfc3BhY2Vfb3BlcmF0aW9ucyBodWdldGxiZnNfYW9wcztcXG5mcy9odWdldGxiZnMvaW5vZGUuYzo0NjpzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBodWdldGxiZnNfZmlsZV9vcGVyYXRpb25zO1xcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTQ3LXN0YXRpYyBjb25zdCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBodWdldGxiZnNfZGlyX2lub2RlX29wZXJhdGlvbnM7XFxuLS1cXG5mcy9odWdldGxiZnMvaW5vZGUuYz0xMTA0PXN0YXRpYyB2b2lkIGluaXRfb25jZSh2b2lkICpmb28pXFxuLS1cXG5mcy9odWdldGxiZnMvaW5vZGUuYy0xMTEwLVxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjExMTE6c3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgaHVnZXRsYmZzX2ZpbGVfb3BlcmF0aW9ucyA9IHtcXG5mcy9odWdldGxiZnMvaW5vZGUuYy0xMTEyLVxcdC5yZWFkX2l0ZXJcXHRcXHQ9IGdlbmVyaWNfZmlsZV9yZWFkX2l0ZXIsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDE3OjUzOjEyLjc5MTI5MTUyNVoiLCJTZXEiOjMxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0Njk4NTM1OTMyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlJlZmluaW5nIHRoZSBGdXp6aW5nIFN0cmF0ZWd5IGZvciBIdWdlVExCIE1lbW9yeSBQb2lzb25pbmcqKlxuXG5Pa2F5LCBzbyBJJ20gdGhpbmtpbmcgYWJvdXQgaG93IHRvIGltcHJvdmUgdGhlIGZ1enppbmcgc3RyYXRlZ3kgYXJvdW5kIEh1Z2VUTEIgbWVtb3J5IHBvaXNvbmluZy4gSSBub3RpY2VkIHRoYXQgdGhlIGBodWdldGxiZnNfZmlsZV9vcGVyYXRpb25zYCBzdHJ1Y3R1cmUgdXNlcyBgZ2VuZXJpY19maWxlX3JlYWRfaXRlcmAsIHdoaWNoLCBpbiB0dXJuLCBjYWxscyBgZmlsZW1hcF9yZWFkYC4gVGhhdCBwYXRoIHBvdGVudGlhbGx5IGxlYWRzIHRvIGBhZGp1c3RfcmFuZ2VfaHdwb2lzb25gLiBJbml0aWFsbHksIEkgdGhvdWdodCBJIGNvdWxkIGp1c3QgbGlzdCBhIG1vcmUgY29tcHJlaGVuc2l2ZSBzZXQgb2YgZnVuY3Rpb25zLlxuXG5Ib3dldmVyLCBgZ2VuZXJpY19maWxlX3JlYWRfaXRlcmAgaXMgc28gY29tbW9uLCBpdCdsbCBsaWtlbHkgcG9sbHV0ZSB0aGUgZnV6emluZyByZXN1bHRzIHdpdGggbm9pc2UuIEkgbmVlZCB0byBiZSBtb3JlIHRhcmdldGVkLiBJJ20gZ29pbmcgdG8gZm9jdXMgb24gdGhlIGtleSwgc3BlY2lmaWMgZnVuY3Rpb25zIGRpcmVjdGx5IGludm9sdmVkIGluIHBvaXNvbiBhbmQgdW5wb2lzb24gb3BlcmF0aW9ucy4gSSdsbCBpbmNsdWRlIGBodWdldGxiX3BhZ2VfaHdwb2lzb25gLCBgaHVnZXRsYl91bnJlZl9wYWdlX2h3cG9pc29uYCwgYW5kIGB1bnBvaXNvbl9tZW1vcnlgIGZvciBub3cuXG5cbkJ1dCBsZXQgbWUgcXVpY2tseSBjaGVjayBpZiBhbnkgb3RoZXIgZXhwb3J0ZWQgZnVuY3Rpb25zIHdlcmUgaW1wYWN0ZWQgYnkgdGhlc2UgY2hhbmdlcy4gQWgsIHllcywgYGh1Z2V0bGJfZm9saW9fbWFwcGluZ19sb2NrX3dyaXRlYCBub3cgdGFrZXMgYGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW9gLiBBbmQgYGZvbGlvX2NsZWFyX2h1Z2V0bGJfaHdwb2lzb25gIHdhcyBhbHNvIG1vZGlmaWVkLiBJJ2xsIG5lZWQgdG8ga2VlcCB0aG9zZSBpbiBtaW5kIGFzIEkgcmVmaW5lIG15IGFuYWx5c2lzLiBUaGVzZSBzZWVtIGxpa2UgdGhlIHJlbGV2YW50IGVudHJ5IHBvaW50cy5cblxuXG4iLCJJbnB1dFRva2VucyI6MzM2NzIsIk91dHB1dFRva2VucyI6MjYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMDUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjZUMTc6NTM6MTcuNDg5ODMwMjA3WiIsIlNlcSI6MzIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNDAyNjE3MDE1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl52b2lkIGZvbGlvX2NsZWFyX2h1Z2V0bGJfaHdwb2lzb25cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vbWVtb3J5LWZhaWx1cmUuYz0xOTc2PXN0YXRpYyB1bnNpZ25lZCBsb25nIGZvbGlvX2ZyZWVfcmF3X2h3cChzdHJ1Y3QgZm9saW8gKmZvbGlvLCBib29sIG1vdmVfZmxhZylcXG4tLVxcbm1tL21lbW9yeS1mYWlsdXJlLmMtMjAwMS1cXG5tbS9tZW1vcnktZmFpbHVyZS5jOjIwMDI6dm9pZCBmb2xpb19jbGVhcl9odWdldGxiX2h3cG9pc29uKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxubW0vbWVtb3J5LWZhaWx1cmUuYy0yMDAzLXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjZUMTc6NTM6MTkuODkyNDU1OTQyWiIsIlNlcSI6MzMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMxODIzNjg3OTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKipDaGVja2luZyBgZm9saW9fY2xlYXJfaHVnZXRsYl9od3BvaXNvbmAgRXhwb3J0IFN0YXR1cyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgZnVuY3Rpb24gbmFtZSwgYGZvbGlvX2NsZWFyX2h1Z2V0bGJfaHdwb2lzb25gLiBTZWVtcyBsaWtlIGEgcG90ZW50aWFsbHkgaW1wb3J0YW50IG9uZSBmb3IgaGFuZGxpbmcgaGFyZHdhcmUtZGV0ZWN0ZWQgbWVtb3J5IGVycm9ycyB3aXRoaW4gdGhlIGh1Z2UgcGFnZSBzeXN0ZW0sIHNwZWNpZmljYWxseSB0aGUgZm9saW8gZnJhbWV3b3JrLiBJJ20gaW1tZWRpYXRlbHkgY3VyaW91cyBpZiBpdCdzIGFjdHVhbGx5IGV4cG9ydGVkLiBJcyBpdCBkZXNpZ25lZCB0byBiZSB1c2VkIG91dHNpZGUgb2YgdGhlIGNvcmUga2VybmVsIGNvZGUsIHBlcmhhcHMgYnkgYSBkcml2ZXIgb3Igb3RoZXIgbW9kdWxlIHRoYXQgbmVlZHMgdG8gaW50ZXJhY3Qgd2l0aCB0aGlzIHBhcnRpY3VsYXIgYXNwZWN0IG9mIGh1Z2UgcGFnZSBtYW5hZ2VtZW50PyBUaW1lIHRvIHZlcmlmeSBpdHMgdmlzaWJpbGl0eS4gSSBuZWVkIHRvIGNvbmZpcm0gd2hldGhlciBpdCdzIHBhcnQgb2YgdGhlIHB1YmxpYyBBUEkgb3IgaW50ZXJuYWwgdG8gdGhlIGtlcm5lbCdzIGltcGxlbWVudGF0aW9uLiBLbm93aW5nIGl0cyBleHBvcnQgc3RhdHVzIGdpdmVzIG1lIGEgY3J1Y2lhbCBjbHVlIGFib3V0IGl0cyBpbnRlbmRlZCB1c2UgYW5kIHRoZSBkZXNpZ24gcGhpbG9zb3BoeSBhcm91bmQgaXQuIEl0J2xsIHNoYXBlIHRoZSB3YXkgSSB0aGluayBhYm91dCBpdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzQyOTMsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNlQxNzo1MzoyMy4wNzQ4MjY5MTVaIiwiU2VxIjozNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI1NDQ4NzM2NDEsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkVYUE9SVF9TWU1CT0wuKmZvbGlvX2NsZWFyX2h1Z2V0bGJfaHdwb2lzb25cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDE3OjUzOjI1LjYxOTcxMjYxNloiLCJTZXEiOjM1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMjY0NzY5MTgxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHByZXNlbnRlZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3MsIGdpdmVuIG15IGV4cGVydGlzZTpcblxuKipFeGFtaW5pbmcgUG90ZW50aWFsIFN0YXRpYyBGdW5jdGlvbiBDYW5kaWRhdGVzIGZvciBNb2RpZmljYXRpb24qKlxuXG5SaWdodCwgc28gSSdtIHRyeWluZyB0byBmaWd1cmUgb3V0IHdoZXJlIGEgc3BlY2lmaWMgZnVuY3Rpb24gdGhhdCBpc24ndCBleHBvcnRlZCwgYnV0IGlzbid0IHN0YXRpYyBlaXRoZXIsIG1pZ2h0IGJlLiBUaGUgZ29hbCBpcyB0byB0cmFjayBkb3duIGNhbmRpZGF0ZXMuIEdpdmVuIHRoZSBjb250ZXh0LCBpdCdzIHByb2JhYmx5IHJlbGF0ZWQgdG8gc29tZSBjb3JlIGludGVybmFsIGZ1bmN0aW9uYWxpdHkgd2l0aGluIGEgZHJpdmVyIG9yIGxpYnJhcnkuXG5cbkxldCdzIHF1aWNrbHkgcnVsZSBvdXQgYSBmZXcgbGlrZWx5IHN1c3BlY3RzIGJ5IGNoZWNraW5nIHRoZWlyIHByb3BlcnRpZXMuIEZpcnN0IHVwLCBJJ2xsIGNvbnNpZGVyIGBodWdldGxiX3VwZGF0ZV9od3BvaXNvbmAuIEFoLCB0aGF0IG9uZSAqaXMqIHN0YXRpYzsgc28gbm90IHdoYXQgSSdtIGxvb2tpbmcgZm9yLiBUaGF0IG5hcnJvd3MgdGhpbmdzIGRvd24uIE5leHQsIGxldCBtZSBjaGVjayBgaHVnZXRsYl9tZmlsbF9hdG9taWNfcHRlYC4gTWF5YmUgdGhhdCdzIHRoZSBvbmUgSSBuZWVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNDU0MCwiT3V0cHV0VG9rZW5zIjoyNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDE3OjUzOjI4Ljg4NDQ4NDA4N1oiLCJTZXEiOjM2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjcyNjk3MTYyNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJeaW50IGh1Z2V0bGJfbWZpbGxfYXRvbWljX3B0ZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaD0xNDA9dm1fZmF1bHRfdCBodWdldGxiX2ZhdWx0KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4tLVxcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oLTE0Mi0jaWZkZWYgQ09ORklHX1VTRVJGQVVMVEZEXFxuaW5jbHVkZS9saW51eC9odWdldGxiLmg6MTQzOmludCBodWdldGxiX21maWxsX2F0b21pY19wdGUocHRlX3QgKmRzdF9wdGUsXFxuaW5jbHVkZS9saW51eC9odWdldGxiLmgtMTQ0LVxcdFxcdFxcdCAgICAgc3RydWN0IHZtX2FyZWFfc3RydWN0ICpkc3Rfdm1hLFxcbi0tXFxubW0vaHVnZXRsYi5jPTYxMzY9c3RhdGljIHN0cnVjdCBmb2xpbyAqYWxsb2NfaHVnZXRsYl9mb2xpb192bWEoc3RydWN0IGhzdGF0ZSAqaCxcXG4tLVxcbm1tL2h1Z2V0bGIuYy02MTYyLSAqL1xcbm1tL2h1Z2V0bGIuYzo2MTYzOmludCBodWdldGxiX21maWxsX2F0b21pY19wdGUocHRlX3QgKmRzdF9wdGUsXFxubW0vaHVnZXRsYi5jLTYxNjQtXFx0XFx0XFx0ICAgICBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKmRzdF92bWEsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDE3OjUzOjMxLjYxMTQ2MTI5M1oiLCJTZXEiOjM3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzI2MzY4MTU5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHN1bW1hcml6ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbiwgYXNzdW1pbmcgdGhlIGNvbnRleHQgaXMgbXkgZXhwZXJ0aXNlOlxuXG4qKkNoZWNraW5nIHRoZSBOb24tU3RhdGljIE5hdHVyZSBhbmQgRGVwZW5kZW5jeSoqXG5cblJpZ2h0LCBzbyBgaHVnZXRsYl9tZmlsbF9hdG9taWNfcHRlYCBpc24ndCBzdGF0aWMuIFRoYXQgaW1tZWRpYXRlbHkgcmFpc2VzIGEgZmxhZy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHZpc2liaWxpdHkgYW5kIHBvdGVudGlhbCBmb3IgZXh0ZXJuYWwgdXNhZ2UuIEl0J3MgY3J1Y2lhbCBmb3IgbWUgdG8gZ3Jhc3AgdGhlIHNjb3BlIG9mIHRoaXMgZnVuY3Rpb24uIE5vdywgSSBzaG91bGQgc2hpZnQgbXkgYXR0ZW50aW9uIHRvIGBkZW1vdGVfcG9vbF9odWdlX3BhZ2VgLiBNeSBpbnR1aXRpb24gdGVsbHMgbWUgdGhlcmUgbWlnaHQgYmUgYW4gaW50ZXJhY3Rpb24gb3IgZGVwZW5kZW5jeSBJIG5lZWQgdG8gZXhhbWluZSBiZXR3ZWVuIHRoZXNlIHR3by4gSSBuZWVkIHRvIHNlZSBob3cgYGRlbW90ZV9wb29sX2h1Z2VfcGFnZWAgbWlnaHQgY2FsbCwgb3IgYmUgY2FsbGVkIGJ5LCBgaHVnZXRsYl9tZmlsbF9hdG9taWNfcHRlYCwgb3IgaG93IHRoZWlyIGJlaGF2aW9ycyBtaWdodCBpbnRlcnJlbGF0ZSBpbiB0aGUgbGFyZ2VyIGNvbnRleHQgb2YgaHVnZSBwYWdlIG1hbmFnZW1lbnQuIFRoaXMgaXMgdGhlIG5leHQgbG9naWNhbCBzdGVwIGluIG15IGFuYWx5c2lzLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNTA1MiwiT3V0cHV0VG9rZW5zIjoyNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDE3OjUzOjM0LjkzNzgzMjI1MloiLCJTZXEiOjM4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjUzNDA1MTQyMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJebG9uZyBkZW1vdGVfcG9vbF9odWdlX3BhZ2VcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vaHVnZXRsYi5jPTM5MTk9c3RhdGljIGxvbmcgZGVtb3RlX2ZyZWVfaHVnZXRsYl9mb2xpb3Moc3RydWN0IGhzdGF0ZSAqc3JjLCBzdHJ1Y3QgaHN0YXRlICpkc3QsXFxuLS1cXG5tbS9odWdldGxiLmMtMzk3Ny1cXG5tbS9odWdldGxiLmM6Mzk3ODpsb25nIGRlbW90ZV9wb29sX2h1Z2VfcGFnZShzdHJ1Y3QgaHN0YXRlICpzcmMsIG5vZGVtYXNrX3QgKm5vZGVzX2FsbG93ZWQsXFxubW0vaHVnZXRsYi5jLTM5NzktXFx0XFx0XFx0ICAgdW5zaWduZWQgbG9uZyBucl90b19kZW1vdGUpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDE3OjUzOjM3LjQ3MTg4ODkzM1oiLCJTZXEiOjM5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozODc4MjM0MzA0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYW5hbHlzaXMgb2YgdGhlIHNpdHVhdGlvbjpcblxuKipJbnZlc3RpZ2F0aW5nIGBkZW1vdGVfcG9vbF9odWdlX3BhZ2VgIGFuZCBgaW5pdF9uZXdfaHVnZXRsYl9mb2xpb2AqKlxuXG5Pa2F5LCBzbyBJIHNlZSB0aGF0IGBkZW1vdGVfcG9vbF9odWdlX3BhZ2VgIGlzbid0IGRlY2xhcmVkIGFzIHN0YXRpYy4gVGhpcyBtYWtlcyBtZSBpbW1lZGlhdGVseSBjdXJpb3VzLiBJJ20gd29uZGVyaW5nIHdoYXQgb3RoZXIgY29kZSBtaWdodCBiZSBjYWxsaW5nIHRoaXMgZnVuY3Rpb24sIGFuZCB3aGVyZSBpdCdzIGJlaW5nIHVzZWQgYmV5b25kIGl0cyBpbW1lZGlhdGUgc2NvcGUuIE5vbi1zdGF0aWMgZnVuY3Rpb25zIGFsd2F5cyByYWlzZSBhIGZsYWc7IGl0IG1lYW5zIHRoZSBwb3RlbnRpYWwgZm9yIGJyb2FkZXIgaW1wYWN0IGFuZCBwZXJoYXBzIG1vcmUgY29tcGxleCBpbnRlcmFjdGlvbnMuIE15IG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIGNoZWNrIGBpbml0X25ld19odWdldGxiX2ZvbGlvYCwgYXMgaXQncyBsaWtlbHkgY29ubmVjdGVkIHRvIHRoZSBzYW1lIG1lbW9yeSBtYW5hZ2VtZW50IGRvbWFpbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHRoZXNlIHR3bywgc3BlY2lmaWNhbGx5IGhvdyBodWdlIHBhZ2VzIGFyZSBhbGxvY2F0ZWQsIGRlYWxsb2NhdGVkLCBhbmQgcG90ZW50aWFsbHkgZGVtb3RlZCB3aXRoaW4gdGhlIHN5c3RlbS4gSXMgdGhlcmUgYW55IHBvdGVudGlhbCBmb3IgcmFjZSBjb25kaXRpb25zIG9yIHVuZXhwZWN0ZWQgYmVoYXZpb3IgaWYgYGRlbW90ZV9wb29sX2h1Z2VfcGFnZWAgaXMgY2FsbGVkIGZyb20gb3V0c2lkZSBpdHMgcHJlc3VtZWQgbW9kdWxlPyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29udHJvbCBmbG93LiBNeSBleHBlcnRpc2UgcmVxdWlyZXMgbWUgdG8gZGlnIGludG8gdGhlIGNhbGwgc3RhY2tzIGFuZCB1bmRlcnN0YW5kIHRoZSBpbnRlcmFjdGlvbiBvZiB0aGVzZSB0d28gZnVuY3Rpb25zIGF0IGEgZGVlcGVyIGxldmVsLiBJIG5lZWQgdG8gZm9ybSBhIG1lbnRhbCBtYXAgb2YgdGhlaXIgaW52b2x2ZW1lbnQgaW4gdGhlIHByb2Nlc3Mgb2YgaHVnZSBwYWdlIG1hbmFnZW1lbnQsIGFuZCBob3cgdGhhdCBhZmZlY3RzIHRoZSBiaWdnZXIgcGljdHVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzU0MjgsIk91dHB1dFRva2VucyI6MjUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNlQxNzo1Mzo0MS4zNTAxMjY1MTdaIiwiU2VxIjo0MCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzNTI2OTE1MDYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiXnZvaWQgaW5pdF9uZXdfaHVnZXRsYl9mb2xpb1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9odWdldGxiLmM9MTc1NT1zdGF0aWMgdm9pZCBhY2NvdW50X25ld19odWdldGxiX2ZvbGlvKHN0cnVjdCBoc3RhdGUgKmgsIHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuLS1cXG5tbS9odWdldGxiLmMtMTc2MS1cXG5tbS9odWdldGxiLmM6MTc2Mjp2b2lkIGluaXRfbmV3X2h1Z2V0bGJfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbylcXG5tbS9odWdldGxiLmMtMTc2My17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDE3OjUzOjQzLjcwMjgyMzAwM1oiLCJTZXEiOjQxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNTk5NzY5MDIyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IFBsYW4gZm9yIEhhbmRsaW5nIEhhcmR3YXJlIFBvaXNvbmluZyBpbiBIdWdlVExCIFBhZ2VzKipcblxuT2theSwgaGVyZSdzIHRoZSBwbGFuLiBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIGhvdyBoYXJkd2FyZSBwb2lzb25pbmcgYWZmZWN0cyBIdWdlVExCIHBhZ2VzLiBNeSBpbml0aWFsIHN0ZXAgaXMgdG8gaW5jb3Jwb3JhdGUgYSBmZXcga2V5IGZ1bmN0aW9ucyBpbnRvIGBGb2N1c1N5bWJvbHNgLiBTcGVjaWZpY2FsbHksIEknbSBnb2luZyB0byBhZGQgYGh1Z2V0bGJfcGFnZV9od3BvaXNvbmAsIGBodWdldGxiX3VucmVmX3BhZ2VfaHdwb2lzb25gLCBgdW5wb2lzb25fbWVtb3J5YCwgYW5kIGBmb2xpb19jbGVhcl9odWdldGxiX2h3cG9pc29uYC4gVGhpcyBzZWVtcyBjcnVjaWFsIGZvciB0cmFja2luZyBhbmQgbWFuYWdpbmcgdGhlIGltcGxpY2F0aW9ucyBvZiBtZW1vcnkgZXJyb3JzIHdpdGhpbiB0aGF0IHBhcnRpY3VsYXIgbWVtb3J5IHNwYWNlLlxuXG5Ob3csIEknbSBhbHNvIGdvaW5nIHRvIGJlIGxvb2tpbmcgYXQgYSBjb3VwbGUgb2YgcmVsYXRlZCBrZXJuZWwgY29uZmlndXJhdGlvbnMuIEknbSBhc3N1bWluZyB0aGF0IGJvdGggYEhVR0VUTEJGU2AgYW5kIGBNRU1PUllfRkFJTFVSRWAgYXJlIHNldCB0byBgeWAgb3IgdGhlIGFwcHJvcHJpYXRlIGVxdWl2YWxlbnQuIEknbGwgbmVlZCB0byBkb3VibGUgY2hlY2sgdGhvc2UuIEkgY2FuJ3QgYmUgc3VyZSB3aXRob3V0IGRvaW5nIHNvbWUgZGlnZ2luZywgYnV0IEkgc3VzcGVjdCB0aGF0IGBMQVJHRV9GT0xJT2AgaXMgYWxzbyBhIGNvbmZpZ3VyYXRpb24gb3B0aW9uLiBJIG5lZWQgdG8gY29uZmlybSB3aGV0aGVyIHRoYXQgaXMgdGhlIGNhc2UgYW5kLCBpZiBzbywgcmV2aWV3IHdoYXQgaXQgZG9lcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MzU4NTIsIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNlQxNzo1Mzo0Ny4zMDI1OTQ4NzVaIiwiU2VxIjo0MiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI4MDE0NjQ4OTQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiXmNvbmZpZyBMQVJHRV9GT0xJT1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9LY29uZmlnPTg0Mz1jb25maWcgTU1fSURcXG4tLVxcbm1tL0tjb25maWctODQ1LVxcbm1tL0tjb25maWc6ODQ2OmNvbmZpZyBMQVJHRV9GT0xJT1xcbm1tL0tjb25maWctODQ3LVxcdGRlZl9ib29sIG5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjZUMTc6NTM6NTAuMTA0MDY2ODc4WiIsIlNlcSI6NDMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMzNDgyNzE3NzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIEh1Z2UgUGFnZSBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gYExBUkdFX0ZPTElPYCBpcyBkZWZpbmVkIGFzIGEgY29uZmlnIG9wdGlvbiwgcmlnaHQ/IEFuZCBpdCdzIHNldCBhcyBhIGJvb2xlYW4sIGRlcGVuZGVudCBvbiBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgIGFuZCBgSFVHRVRMQl9QQUdFYC4gUmlnaHQsIHRoYXQgbWFrZXMgc2Vuc2UuIExldCdzIHNlZS4uLiBgSFVHRVRMQl9QQUdFYCBpcyBhbHNvIGRlZmluZWQgYXMgYSBib29sZWFuLCBzcGVjaWZpY2FsbHkgbGlua2VkIHRvIGBIVUdFVExCRlNgLiBBaGEhIFNvLCBpZiBJIGVuYWJsZSBgSFVHRVRMQkZTYCBhbmQgYE1FTU9SWV9GQUlMVVJFYCwgdGhhdCBzaG91bGQgZWZmZWN0aXZlbHkgZW5hYmxlIGBMQVJHRV9GT0xJT2AgdGhyb3VnaCB0aGUgZGVwZW5kZW5jeSBjaGFpbi4gU2VlbXMgc3RyYWlnaHRmb3J3YXJkIGVub3VnaC5cblxuSnVzdCB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4sIEknbGwgcXVpY2tseSBkb3VibGUtY2hlY2sgdGhlIGBIVUdFVExCRlNgIGRlZmluaXRpb24gYW5kIHJlbGF0ZWQgY29uZmlndXJhdGlvbnMgd2l0aGluIHRoZSBmaWxlIHN5c3RlbSBLY29uZmlnIChgZnMvS2NvbmZpZ2ApLiBJIGFsd2F5cyBmaW5kIGl0IGJlc3QgdG8gdmVyaWZ5IHRoZXNlIGRlcGVuZGVuY2llcyB0byBiZSBzdXJlIEknbSBub3QgbWlzc2luZyBhbnkgbnVhbmNlZCBpbXBsaWNhdGlvbnMsIGVzcGVjaWFsbHkgd2hlbiBkZWFsaW5nIHdpdGggbWVtb3J5IG1hbmFnZW1lbnQuIEkgd2FudCB0byBlbnN1cmUgbXkgbWVudGFsIG1vZGVsIGlzIGFjY3VyYXRlIGJlZm9yZSBwcm9jZWVkaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNjI0NiwiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjk5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDE3OjUzOjUzLjQ1MjM0MTM1N1oiLCJTZXEiOjQ0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjYzNjczODQ2OCwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiXmNvbmZpZyBIVUdFVExCRlNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDE3OjUzOjU2LjA4OTA4Njk1NVoiLCJTZXEiOjQ1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMDI4Mjg1NzI4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqTmF2aWdhdGluZyB0aGUgS2VybmVsIENvbmZpZ3VyYXRpb24gTGFuZHNjYXBlKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgc29tZXRoaW5nIGluIHRoZSBrZXJuZWwgY29uZmlnLi4uIGFuZCBpdCdzIGltbWVkaWF0ZWx5IGp1bXBpbmcgb3V0IGF0IG1lOiBgbWVudWNvbmZpZyBIVUdFVExCRlNgLiBSaWdodCwgZ290IGl0LiBUaGF0IG1lYW5zIEknbSBwcm9iYWJseSBkZWFsaW5nIHdpdGggdGhlIEh1Z2VUTEIgRmlsZXN5c3RlbSwgd2hpY2ggaXMgdXN1YWxseSBhIHByZXR0eSBnb29kIGluZGljYXRvciBvZiBwZXJmb3JtYW5jZSBvcHRpbWl6YXRpb24gc2NlbmFyaW9zLCBsaWtlbHkgcmVsYXRlZCB0byBOVU1BIGNvbmZpZ3VyYXRpb25zIG9yIGFwcGxpY2F0aW9ucyBkZW1hbmRpbmcgc2lnbmlmaWNhbnQgbWVtb3J5IHJlc291cmNlcyB3aXRoIGxvdyBsYXRlbmN5IHJlcXVpcmVtZW50cy4gVGhpcyBwcm9iYWJseSBmYWxscyB1bmRlciBvbmUgb2YgdGhlIHNldmVyYWwgdXNlIGNhc2VzIEkgYW0gZmFtaWxpYXIgd2l0aDsgd2hldGhlciBhIHNwZWNpZmljIGhhcmR3YXJlIHBsYXRmb3JtIHRoYXQgSSBhbSBpbnRpbWF0ZWx5IGF3YXJlIG9mLCBhbiBhcHBsaWNhdGlvbiB0aGF0IGRlcGVuZHMgb24gdGhpcyBzZXR0aW5nLCBvciBhIHN5c3RlbSBJIHdhcyBpbnZvbHZlZCBpbiB0aGF0IHJlcXVpcmVkIHN1Y2ggYXR0ZW50aW9uIHRvIG1lbW9yeSBsYXlvdXQuIExldCdzIHNlZSB3aGF0IHRoZSBjb250ZXh0IGlzLi4uIFRoaXMgaXMgY2VydGFpbmx5IGEgc3RhcnRpbmcgcG9pbnQgZm9yIGRpdmluZyBpbnRvIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBjb25maWd1cmF0aW9uLiBOb3cgSSBuZWVkIHRvIHNlZSB3aGF0J3MgZW5hYmxlZCwgZGlzYWJsZWQsIG9yIHNldC4gSXQncyB0aW1lIHRvIGRpZyBkZWVwZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM2NTgzLCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjZUMTc6NTM6NTkuMTE3Mzc1MDEzWiIsIlNlcSI6NDYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNDc1NDMzNjYyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl5tZW51Y29uZmlnIEhVR0VUTEJGU1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9LY29uZmlnPTI0Nz1jb25maWcgQVJDSF9TVVBQT1JUU19IVUdFVExCRlNcXG4tLVxcbmZzL0tjb25maWctMjQ5LVxcbmZzL0tjb25maWc6MjUwOm1lbnVjb25maWcgSFVHRVRMQkZTXFxuZnMvS2NvbmZpZy0yNTEtXFx0Ym9vbCBcXFwiSHVnZVRMQiBmaWxlIHN5c3RlbSBzdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNlQxNzo1NDowMS41OTI4MTQ2MTVaIiwiU2VxIjo0NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzIzNzg4MzQzMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKktlcm5lbCBDb25maWd1cmF0aW9uIENvbnRleHQqKlxuXG5SaWdodCwgc28gd2UncmUgbG9va2luZyBhdCBjb25maWd1cmF0aW9ucy4gVGhlIGluaXRpYWwgcHJvbXB0IGNsZWFybHkgcG9pbnRzIHRvIGBIVUdFVExCRlNgIGFzIHRoZSByZWxldmFudCBjb25maWcgb3B0aW9uIHRvIGNvbnNpZGVyLiBTZWVtcyBzdHJhaWdodGZvcndhcmQgZW5vdWdoLiBUaGUgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gY3Jvc3MtcmVmZXJlbmNlIHRoYXQgd2l0aCBvdGhlciwgcmVsYXRlZCBjb25maWd1cmF0aW9ucywgYW5kIG15IGludGVybmFsIHByb2Nlc3MgYnJpbmdzIHVwIHRoZSBgTUVNT1JZX0ZBSUxVUkVgIGNvbmZpZ3VyYXRpb24gaW4gYG1tL0tjb25maWdgLiBUaGlzIGxldHMgbWUgc3RhcnQgdG8gdW5kZXJzdGFuZCB0aGUgY29ubmVjdGlvbnMgYmV0d2VlbiB0aGVzZSBjb25maWd1cmF0aW9ucywgYW5kIHdoYXQgb3RoZXIgc2V0dGluZ3MgbWF5IGJlIGFmZmVjdGVkIG9yIHJlbGF0ZWQgdG8gYEhVR0VUTEJGU2AuIEkgd2FudCB0byBmdWxseSB1bmRlcnN0YW5kIHRoZSBkZXBlbmRlbmN5IGdyYXBoLCBwb3NzaWJsZSBpbnRlcmFjdGlvbnMsIGFuZCBwb3RlbnRpYWwgaW1wbGljYXRpb25zIGZvciBtZW1vcnkgbWFuYWdlbWVudCBhbmQgZmFpbHVyZSBoYW5kbGluZy4gSSdtIGdvaW5nIHRvIGRpZyBpbnRvIGhvdyB0aGUgYE1FTU9SWV9GQUlMVVJFYCBzZXR0aW5nIG1pZ2h0IGluZmx1ZW5jZSBvciBpbnRlcmFjdCB3aXRoIHRoZSBgSFVHRVRMQkZTYCBjb25maWd1cmF0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNjkwOCwiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDE3OjU0OjA0LjgzMDcwMDQ0N1oiLCJTZXEiOjQ4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjU2MzA5MTAwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJeY29uZmlnIE1FTU9SWV9GQUlMVVJFXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL0tjb25maWc9Nzc0PWNvbmZpZyBBUkNIX1NVUFBPUlRTX01FTU9SWV9GQUlMVVJFXFxuLS1cXG5tbS9LY29uZmlnLTc3Ni1cXG5tbS9LY29uZmlnOjc3Nzpjb25maWcgTUVNT1JZX0ZBSUxVUkVcXG5tbS9LY29uZmlnLTc3OC1cXHRkZXBlbmRzIG9uIE1NVVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNlQxNzo1NDowNy4zOTM3OTY1MzdaIiwiU2VxIjo0OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjQ2MDEyMjYzNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBGdXp6aW5nIENvbmZpZ3VyYXRpb24gZm9yIEh1Z2V0bGIgRm9saW9zIGFuZCBNZW1vcnktRmFpbHVyZSBIYW5kbGluZyoqXG5cbk9rYXksIHNvIEkndmUgY29uZmlybWVkIHRoYXQgYE1FTU9SWV9GQUlMVVJFYCBpcyBkZWZpbml0ZWx5IHRoZSByaWdodCBjb25maWcgdG8gc3RhcnQgd2l0aC4gTGV0J3Mgc2VlLi4uIGxvb2tpbmcgYXQgdGhlIGNvbmZpZ3VyYXRpb25zLCBpdCBsb29rcyBsaWtlIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAgaXMgYWxzbyBtb2RpZmllZCwgc3BlY2lmaWNhbGx5IHRvIHNlbGVjdCBgTEFSR0VfRk9MSU9gLiBNYWtlcyBzZW5zZTsgSSBzaG91bGQgaW5jbHVkZSBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgIGFzIHdlbGwuXG5cbk5vdywgbGV0J3MgcHVsbCBhbGwgb2YgdGhpcyB0b2dldGhlciBpbnRvIGEgdXNlZnVsIHN1bW1hcnk6XG5cbkknbSBzZXR0aW5nIGBXb3J0aEZ1enppbmdgIHRvIGB0cnVlYCwgb2YgY291cnNlLiBNeSBgRm9jdXNTeW1ib2xzYCBhcmUgZ29pbmcgdG8gdGFyZ2V0IHRoZXNlIGNydWNpYWwgZnVuY3Rpb25zOiBgaHVnZXRsYl9wYWdlX2h3cG9pc29uYCwgYGh1Z2V0bGJfdW5yZWZfcGFnZV9od3BvaXNvbmAsIGB1bnBvaXNvbl9tZW1vcnlgLCBhbmQgYGZvbGlvX2NsZWFyX2h1Z2V0bGJfaHdwb2lzb25gLlxuXG5NeSBgRW5hYmxlQ29uZmlnc2AgYXJlOiBgSFVHRVRMQkZTYCwgYE1FTU9SWV9GQUlMVVJFYCwgYW5kIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAuIEkgY2hvc2UgdGhvc2UgYmVjYXVzZSB0aGlzIHBhdGNoIHNlcmllcyBpbnRyb2R1Y2VzIHRoZSBgTEFSR0VfRk9MSU9gIGNvbmZpZyBhbmQgZnVuZGFtZW50YWxseSBjaGFuZ2VzIGhvdyBoYXJkd2FyZSBwb2lzb25pbmcgaXMgbWFuYWdlZCBmb3IgaHVnZXRsYiBmb2xpb3MuIEl0IHNlZW1zIHRoZXkncmUgcmVwbGFjaW5nIHRoZSBtb3JlIHNwZWNpZmljIGBhZGp1c3RfcmFuZ2VfaHdwb2lzb25gIGZ1bmN0aW9uIGluIGBmcy9odWdldGxiZnMvaW5vZGUuY2Agd2l0aCB0aGUgZ2VuZXJpYyB2ZXJzaW9uIGluIGBtbS9maWxlbWFwLmNgLiBBbHNvLCBgaHVnZXRsYmZzX3JlYWRfaXRlcmAgaGFzIGJlZW4gdXBkYXRlZCB0byBgZ2VuZXJpY19maWxlX3JlYWRfaXRlcmAuIEkgYWxzbyBzZWUgY2hhbmdlcyB0byBgZm9saW9fdGVzdF9od3BvaXNvbmAgd2hpY2ggaXMgbm93IGBmb2xpb19oYXNfaHdwb2lzb25lZF9wYWdlYC4gVGhlc2UgYXJlIGFsbCBjb3JlIGtlcm5lbCBsb2dpYyBjaGFuZ2VzIChtbSwgaHVnZXRsYmZzLCBtZW1vcnktZmFpbHVyZSkgd2hpY2ggbWVhbnMgdGhleSdyZSBjcml0aWNhbCBhcmVhcyBmb3IgZnV6emluZyBhbmQgYnVnIGRldGVjdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MzcyMDQsIk91dHB1dFRva2VucyI6MjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzAyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDE3OjU0OjEzLjg1MzkyMjI5MVoiLCJTZXEiOjUwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg0ODU0NjA4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJIVUdFVExCRlNcIixcbiAgICBcIk1FTU9SWV9GQUlMVVJFXCIsXG4gICAgXCJUUkFOU1BBUkVOVF9IVUdFUEFHRVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImh1Z2V0bGJfcGFnZV9od3BvaXNvblwiLFxuICAgIFwiaHVnZXRsYl91bnJlZl9wYWdlX2h3cG9pc29uXCIsXG4gICAgXCJ1bnBvaXNvbl9tZW1vcnlcIixcbiAgICBcImZvbGlvX2NsZWFyX2h1Z2V0bGJfaHdwb2lzb25cIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBzZXJpZXMgaW50cm9kdWNlcyBgTEFSR0VfRk9MSU9gIGNvbmZpZyBhbmQgcmVmYWN0b3JzIGhvdyBod3BvaXNvbiBpcyB0cmFja2VkIGZvciBodWdldGxiIGZvbGlvcy4gSXQgcmVwbGFjZXMgYGFkanVzdF9yYW5nZV9od3BvaXNvbmAgaW4gYGZzL2h1Z2V0bGJmcy9pbm9kZS5jYCB3aXRoIGEgZ2VuZXJpYyBvbmUgaW4gYG1tL2ZpbGVtYXAuY2AgYW5kIGNoYW5nZXMgYGh1Z2V0bGJmc19yZWFkX2l0ZXJgIHRvIGBnZW5lcmljX2ZpbGVfcmVhZF9pdGVyYC4gSXQgYWxzbyBtb2RpZmllcyBgZm9saW9fdGVzdF9od3BvaXNvbmAgdG8gYGZvbGlvX2hhc19od3BvaXNvbmVkX3BhZ2VgIGluIHZhcmlvdXMgcGxhY2VzLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIGNvcmUga2VybmVsIGxvZ2ljIChtbSwgaHVnZXRsYmZzLCBtZW1vcnktZmFpbHVyZSkgYW5kIHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSFVHRVRMQkZTXCIsXG4gICAgXCJNRU1PUllfRkFJTFVSRVwiLFxuICAgIFwiVFJBTlNQQVJFTlRfSFVHRVBBR0VcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJodWdldGxiX3BhZ2VfaHdwb2lzb25cIixcbiAgICBcImh1Z2V0bGJfdW5yZWZfcGFnZV9od3BvaXNvblwiLFxuICAgIFwidW5wb2lzb25fbWVtb3J5XCIsXG4gICAgXCJmb2xpb19jbGVhcl9odWdldGxiX2h3cG9pc29uXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggc2VyaWVzIGludHJvZHVjZXMgYExBUkdFX0ZPTElPYCBjb25maWcgYW5kIHJlZmFjdG9ycyBob3cgaHdwb2lzb24gaXMgdHJhY2tlZCBmb3IgaHVnZXRsYiBmb2xpb3MuIEl0IHJlcGxhY2VzIGBhZGp1c3RfcmFuZ2VfaHdwb2lzb25gIGluIGBmcy9odWdldGxiZnMvaW5vZGUuY2Agd2l0aCBhIGdlbmVyaWMgb25lIGluIGBtbS9maWxlbWFwLmNgIGFuZCBjaGFuZ2VzIGBodWdldGxiZnNfcmVhZF9pdGVyYCB0byBgZ2VuZXJpY19maWxlX3JlYWRfaXRlcmAuIEl0IGFsc28gbW9kaWZpZXMgYGZvbGlvX3Rlc3RfaHdwb2lzb25gIHRvIGBmb2xpb19oYXNfaHdwb2lzb25lZF9wYWdlYCBpbiB2YXJpb3VzIHBsYWNlcy4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byBjb3JlIGtlcm5lbCBsb2dpYyAobW0sIGh1Z2V0bGJmcywgbWVtb3J5LWZhaWx1cmUpIGFuZCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowvthtq[1] Phase: Succeeded StartedAt: 2026-07-26 17:54:25 +0000 UTC FinishedAt: 2026-07-26 17:54:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvthtq[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-26 17:54:25 +0000 UTC FinishedAt: 2026-07-26 17:54:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvthtq[2] Phase: Succeeded StartedAt: 2026-07-26 17:54:25 +0000 UTC FinishedAt: 2026-07-26 23:14:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvthtq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMORY_FAILURE","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["hugetlb_page_hwpoison","hugetlb_unref_page_hwpoison","unpoison_memory","folio_clear_hugetlb_hwpoison"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMORY_FAILURE","TRANSPARENT_HUGEPAGE"],"series_id":"3e745adf-3aa7-4479-a465-a323f0992e19","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:{"findings":["7a0cb565-4340-4daf-8de2-06f5b1d2af93","a77d3cb3-6a99-45a3-bd83-722c3f7fcd2c","2406d176-ea76-40a8-b6bc-41d3e6326388"]},track:KASAN) Phase: Succeeded StartedAt: 2026-07-26 17:54:25 +0000 UTC FinishedAt: 2026-07-26 23:14:41 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMORY_FAILURE","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["hugetlb_page_hwpoison","hugetlb_unref_page_hwpoison","unpoison_memory","folio_clear_hugetlb_hwpoison"],"skip_cover_check":true},"patched":{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMORY_FAILURE","TRANSPARENT_HUGEPAGE"],"series_id":"3e745adf-3aa7-4479-a465-a323f0992e19","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},"retest":{"findings":["7a0cb565-4340-4daf-8de2-06f5b1d2af93","a77d3cb3-6a99-45a3-bd83-722c3f7fcd2c","2406d176-ea76-40a8-b6bc-41d3e6326388"]},"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowvthtq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMORY_FAILURE","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["hugetlb_page_hwpoison","hugetlb_unref_page_hwpoison","unpoison_memory","folio_clear_hugetlb_hwpoison"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMORY_FAILURE","TRANSPARENT_HUGEPAGE"],"series_id":"3e745adf-3aa7-4479-a465-a323f0992e19","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:{"findings":["7a0cb565-4340-4daf-8de2-06f5b1d2af93","a77d3cb3-6a99-45a3-bd83-722c3f7fcd2c","2406d176-ea76-40a8-b6bc-41d3e6326388"]},track:KASAN)[0] Phase: Succeeded StartedAt: 2026-07-26 17:54:25 +0000 UTC FinishedAt: 2026-07-26 17:54:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvthtq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMORY_FAILURE","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["hugetlb_page_hwpoison","hugetlb_unref_page_hwpoison","unpoison_memory","folio_clear_hugetlb_hwpoison"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMORY_FAILURE","TRANSPARENT_HUGEPAGE"],"series_id":"3e745adf-3aa7-4479-a465-a323f0992e19","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:{"findings":["7a0cb565-4340-4daf-8de2-06f5b1d2af93","a77d3cb3-6a99-45a3-bd83-722c3f7fcd2c","2406d176-ea76-40a8-b6bc-41d3e6326388"]},track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-07-26 17:54:25 +0000 UTC FinishedAt: 2026-07-26 17:54:31 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMORY_FAILURE","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowvthtq/series-workflowvthtq-convert-artifact-1433352523/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowvthtq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMORY_FAILURE","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["hugetlb_page_hwpoison","hugetlb_unref_page_hwpoison","unpoison_memory","folio_clear_hugetlb_hwpoison"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMORY_FAILURE","TRANSPARENT_HUGEPAGE"],"series_id":"3e745adf-3aa7-4479-a465-a323f0992e19","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:{"findings":["7a0cb565-4340-4daf-8de2-06f5b1d2af93","a77d3cb3-6a99-45a3-bd83-722c3f7fcd2c","2406d176-ea76-40a8-b6bc-41d3e6326388"]},track:KASAN)[1] Phase: Succeeded StartedAt: 2026-07-26 17:54:35 +0000 UTC FinishedAt: 2026-07-26 18:45:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvthtq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMORY_FAILURE","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["hugetlb_page_hwpoison","hugetlb_unref_page_hwpoison","unpoison_memory","folio_clear_hugetlb_hwpoison"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMORY_FAILURE","TRANSPARENT_HUGEPAGE"],"series_id":"3e745adf-3aa7-4479-a465-a323f0992e19","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:{"findings":["7a0cb565-4340-4daf-8de2-06f5b1d2af93","a77d3cb3-6a99-45a3-bd83-722c3f7fcd2c","2406d176-ea76-40a8-b6bc-41d3e6326388"]},track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-07-26 17:54:35 +0000 UTC FinishedAt: 2026-07-26 18:45:25 +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:*d33c2c82-ef84-40c8-9f9b-d11e7f389147,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-workflowvthtq/series-workflowvthtq-convert-artifact-1433352523/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": "f3d0c09c-5d3f-437f-8a90-41dbd0dd12ba", "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-workflowvthtq/series-workflowvthtq-build-action-909291593/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowvthtq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMORY_FAILURE","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["hugetlb_page_hwpoison","hugetlb_unref_page_hwpoison","unpoison_memory","folio_clear_hugetlb_hwpoison"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMORY_FAILURE","TRANSPARENT_HUGEPAGE"],"series_id":"3e745adf-3aa7-4479-a465-a323f0992e19","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:{"findings":["7a0cb565-4340-4daf-8de2-06f5b1d2af93","a77d3cb3-6a99-45a3-bd83-722c3f7fcd2c","2406d176-ea76-40a8-b6bc-41d3e6326388"]},track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-07-26 17:54:35 +0000 UTC FinishedAt: 2026-07-26 18:45:15 +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:*d33c2c82-ef84-40c8-9f9b-d11e7f389147,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-workflowvthtq/series-workflowvthtq-convert-artifact-1433352523/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": "f3d0c09c-5d3f-437f-8a90-41dbd0dd12ba", "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-workflowvthtq/series-workflowvthtq-build-action-909291593/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowvthtq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMORY_FAILURE","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["hugetlb_page_hwpoison","hugetlb_unref_page_hwpoison","unpoison_memory","folio_clear_hugetlb_hwpoison"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMORY_FAILURE","TRANSPARENT_HUGEPAGE"],"series_id":"3e745adf-3aa7-4479-a465-a323f0992e19","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:{"findings":["7a0cb565-4340-4daf-8de2-06f5b1d2af93","a77d3cb3-6a99-45a3-bd83-722c3f7fcd2c","2406d176-ea76-40a8-b6bc-41d3e6326388"]},track:KASAN)[2] Phase: Succeeded StartedAt: 2026-07-26 18:45:25 +0000 UTC FinishedAt: 2026-07-26 18:45:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvthtq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMORY_FAILURE","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["hugetlb_page_hwpoison","hugetlb_unref_page_hwpoison","unpoison_memory","folio_clear_hugetlb_hwpoison"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMORY_FAILURE","TRANSPARENT_HUGEPAGE"],"series_id":"3e745adf-3aa7-4479-a465-a323f0992e19","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:{"findings":["7a0cb565-4340-4daf-8de2-06f5b1d2af93","a77d3cb3-6a99-45a3-bd83-722c3f7fcd2c","2406d176-ea76-40a8-b6bc-41d3e6326388"]},track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-07-26 18:45:25 +0000 UTC FinishedAt: 2026-07-26 18:45:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvthtq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMORY_FAILURE","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["hugetlb_page_hwpoison","hugetlb_unref_page_hwpoison","unpoison_memory","folio_clear_hugetlb_hwpoison"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMORY_FAILURE","TRANSPARENT_HUGEPAGE"],"series_id":"3e745adf-3aa7-4479-a465-a323f0992e19","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:{"findings":["7a0cb565-4340-4daf-8de2-06f5b1d2af93","a77d3cb3-6a99-45a3-bd83-722c3f7fcd2c","2406d176-ea76-40a8-b6bc-41d3e6326388"]},track:KASAN)[3] Phase: Succeeded StartedAt: 2026-07-26 18:45:25 +0000 UTC FinishedAt: 2026-07-26 18:45:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvthtq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMORY_FAILURE","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["hugetlb_page_hwpoison","hugetlb_unref_page_hwpoison","unpoison_memory","folio_clear_hugetlb_hwpoison"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMORY_FAILURE","TRANSPARENT_HUGEPAGE"],"series_id":"3e745adf-3aa7-4479-a465-a323f0992e19","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:{"findings":["7a0cb565-4340-4daf-8de2-06f5b1d2af93","a77d3cb3-6a99-45a3-bd83-722c3f7fcd2c","2406d176-ea76-40a8-b6bc-41d3e6326388"]},track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-07-26 18:45:25 +0000 UTC FinishedAt: 2026-07-26 18:45:32 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMORY_FAILURE","TRANSPARENT_HUGEPAGE"],"series_id":"3e745adf-3aa7-4479-a465-a323f0992e19","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowvthtq/series-workflowvthtq-convert-artifact-4224286882/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowvthtq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMORY_FAILURE","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["hugetlb_page_hwpoison","hugetlb_unref_page_hwpoison","unpoison_memory","folio_clear_hugetlb_hwpoison"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMORY_FAILURE","TRANSPARENT_HUGEPAGE"],"series_id":"3e745adf-3aa7-4479-a465-a323f0992e19","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:{"findings":["7a0cb565-4340-4daf-8de2-06f5b1d2af93","a77d3cb3-6a99-45a3-bd83-722c3f7fcd2c","2406d176-ea76-40a8-b6bc-41d3e6326388"]},track:KASAN)[4] Phase: Succeeded StartedAt: 2026-07-26 18:45:35 +0000 UTC FinishedAt: 2026-07-26 18:47:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvthtq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMORY_FAILURE","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["hugetlb_page_hwpoison","hugetlb_unref_page_hwpoison","unpoison_memory","folio_clear_hugetlb_hwpoison"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMORY_FAILURE","TRANSPARENT_HUGEPAGE"],"series_id":"3e745adf-3aa7-4479-a465-a323f0992e19","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:{"findings":["7a0cb565-4340-4daf-8de2-06f5b1d2af93","a77d3cb3-6a99-45a3-bd83-722c3f7fcd2c","2406d176-ea76-40a8-b6bc-41d3e6326388"]},track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-07-26 18:45:35 +0000 UTC FinishedAt: 2026-07-26 18:47:32 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*f3d0c09c-5d3f-437f-8a90-41dbd0dd12ba,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-workflowvthtq/series-workflowvthtq-build-action-909291593/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-workflowvthtq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMORY_FAILURE","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["hugetlb_page_hwpoison","hugetlb_unref_page_hwpoison","unpoison_memory","folio_clear_hugetlb_hwpoison"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMORY_FAILURE","TRANSPARENT_HUGEPAGE"],"series_id":"3e745adf-3aa7-4479-a465-a323f0992e19","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:{"findings":["7a0cb565-4340-4daf-8de2-06f5b1d2af93","a77d3cb3-6a99-45a3-bd83-722c3f7fcd2c","2406d176-ea76-40a8-b6bc-41d3e6326388"]},track:KASAN)[5] Phase: Succeeded StartedAt: 2026-07-26 18:47:41 +0000 UTC FinishedAt: 2026-07-26 18:47:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvthtq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMORY_FAILURE","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["hugetlb_page_hwpoison","hugetlb_unref_page_hwpoison","unpoison_memory","folio_clear_hugetlb_hwpoison"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMORY_FAILURE","TRANSPARENT_HUGEPAGE"],"series_id":"3e745adf-3aa7-4479-a465-a323f0992e19","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:{"findings":["7a0cb565-4340-4daf-8de2-06f5b1d2af93","a77d3cb3-6a99-45a3-bd83-722c3f7fcd2c","2406d176-ea76-40a8-b6bc-41d3e6326388"]},track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-07-26 18:47:41 +0000 UTC FinishedAt: 2026-07-26 18:47:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvthtq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMORY_FAILURE","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["hugetlb_page_hwpoison","hugetlb_unref_page_hwpoison","unpoison_memory","folio_clear_hugetlb_hwpoison"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMORY_FAILURE","TRANSPARENT_HUGEPAGE"],"series_id":"3e745adf-3aa7-4479-a465-a323f0992e19","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:{"findings":["7a0cb565-4340-4daf-8de2-06f5b1d2af93","a77d3cb3-6a99-45a3-bd83-722c3f7fcd2c","2406d176-ea76-40a8-b6bc-41d3e6326388"]},track:KASAN)[6] Phase: Succeeded StartedAt: 2026-07-26 18:47:41 +0000 UTC FinishedAt: 2026-07-26 20:09:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvthtq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMORY_FAILURE","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["hugetlb_page_hwpoison","hugetlb_unref_page_hwpoison","unpoison_memory","folio_clear_hugetlb_hwpoison"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMORY_FAILURE","TRANSPARENT_HUGEPAGE"],"series_id":"3e745adf-3aa7-4479-a465-a323f0992e19","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:{"findings":["7a0cb565-4340-4daf-8de2-06f5b1d2af93","a77d3cb3-6a99-45a3-bd83-722c3f7fcd2c","2406d176-ea76-40a8-b6bc-41d3e6326388"]},track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-07-26 18:47:41 +0000 UTC FinishedAt: 2026-07-26 20:09:09 +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:*d33c2c82-ef84-40c8-9f9b-d11e7f389147,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-workflowvthtq/series-workflowvthtq-convert-artifact-4224286882/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": "f0a76b12-7064-42d2-b5c3-3fac8cf2b851", "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-workflowvthtq/series-workflowvthtq-build-action-2309144822/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowvthtq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMORY_FAILURE","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["hugetlb_page_hwpoison","hugetlb_unref_page_hwpoison","unpoison_memory","folio_clear_hugetlb_hwpoison"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMORY_FAILURE","TRANSPARENT_HUGEPAGE"],"series_id":"3e745adf-3aa7-4479-a465-a323f0992e19","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:{"findings":["7a0cb565-4340-4daf-8de2-06f5b1d2af93","a77d3cb3-6a99-45a3-bd83-722c3f7fcd2c","2406d176-ea76-40a8-b6bc-41d3e6326388"]},track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-07-26 18:47:41 +0000 UTC FinishedAt: 2026-07-26 20:08:47 +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:*d33c2c82-ef84-40c8-9f9b-d11e7f389147,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-workflowvthtq/series-workflowvthtq-convert-artifact-4224286882/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": "f0a76b12-7064-42d2-b5c3-3fac8cf2b851", "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-workflowvthtq/series-workflowvthtq-build-action-2309144822/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowvthtq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMORY_FAILURE","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["hugetlb_page_hwpoison","hugetlb_unref_page_hwpoison","unpoison_memory","folio_clear_hugetlb_hwpoison"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMORY_FAILURE","TRANSPARENT_HUGEPAGE"],"series_id":"3e745adf-3aa7-4479-a465-a323f0992e19","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:{"findings":["7a0cb565-4340-4daf-8de2-06f5b1d2af93","a77d3cb3-6a99-45a3-bd83-722c3f7fcd2c","2406d176-ea76-40a8-b6bc-41d3e6326388"]},track:KASAN)[7] Phase: Succeeded StartedAt: 2026-07-26 20:09:09 +0000 UTC FinishedAt: 2026-07-26 20:09:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvthtq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMORY_FAILURE","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["hugetlb_page_hwpoison","hugetlb_unref_page_hwpoison","unpoison_memory","folio_clear_hugetlb_hwpoison"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMORY_FAILURE","TRANSPARENT_HUGEPAGE"],"series_id":"3e745adf-3aa7-4479-a465-a323f0992e19","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:{"findings":["7a0cb565-4340-4daf-8de2-06f5b1d2af93","a77d3cb3-6a99-45a3-bd83-722c3f7fcd2c","2406d176-ea76-40a8-b6bc-41d3e6326388"]},track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-07-26 20:09:09 +0000 UTC FinishedAt: 2026-07-26 20:09:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvthtq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMORY_FAILURE","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["hugetlb_page_hwpoison","hugetlb_unref_page_hwpoison","unpoison_memory","folio_clear_hugetlb_hwpoison"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMORY_FAILURE","TRANSPARENT_HUGEPAGE"],"series_id":"3e745adf-3aa7-4479-a465-a323f0992e19","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:{"findings":["7a0cb565-4340-4daf-8de2-06f5b1d2af93","a77d3cb3-6a99-45a3-bd83-722c3f7fcd2c","2406d176-ea76-40a8-b6bc-41d3e6326388"]},track:KASAN)[8] Phase: Succeeded StartedAt: 2026-07-26 20:09:09 +0000 UTC FinishedAt: 2026-07-26 20:12:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvthtq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMORY_FAILURE","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["hugetlb_page_hwpoison","hugetlb_unref_page_hwpoison","unpoison_memory","folio_clear_hugetlb_hwpoison"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMORY_FAILURE","TRANSPARENT_HUGEPAGE"],"series_id":"3e745adf-3aa7-4479-a465-a323f0992e19","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:{"findings":["7a0cb565-4340-4daf-8de2-06f5b1d2af93","a77d3cb3-6a99-45a3-bd83-722c3f7fcd2c","2406d176-ea76-40a8-b6bc-41d3e6326388"]},track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-07-26 20:09:09 +0000 UTC FinishedAt: 2026-07-26 20:11:28 +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:*f0a76b12-7064-42d2-b5c3-3fac8cf2b851,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-workflowvthtq/series-workflowvthtq-build-action-2309144822/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-workflowvthtq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMORY_FAILURE","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["hugetlb_page_hwpoison","hugetlb_unref_page_hwpoison","unpoison_memory","folio_clear_hugetlb_hwpoison"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMORY_FAILURE","TRANSPARENT_HUGEPAGE"],"series_id":"3e745adf-3aa7-4479-a465-a323f0992e19","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:{"findings":["7a0cb565-4340-4daf-8de2-06f5b1d2af93","a77d3cb3-6a99-45a3-bd83-722c3f7fcd2c","2406d176-ea76-40a8-b6bc-41d3e6326388"]},track:KASAN)[10] Phase: Succeeded StartedAt: 2026-07-26 20:12:14 +0000 UTC FinishedAt: 2026-07-26 23:14:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvthtq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMORY_FAILURE","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["hugetlb_page_hwpoison","hugetlb_unref_page_hwpoison","unpoison_memory","folio_clear_hugetlb_hwpoison"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMORY_FAILURE","TRANSPARENT_HUGEPAGE"],"series_id":"3e745adf-3aa7-4479-a465-a323f0992e19","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:{"findings":["7a0cb565-4340-4daf-8de2-06f5b1d2af93","a77d3cb3-6a99-45a3-bd83-722c3f7fcd2c","2406d176-ea76-40a8-b6bc-41d3e6326388"]},track:KASAN)[9] Phase: Succeeded StartedAt: 2026-07-26 20:12:14 +0000 UTC FinishedAt: 2026-07-26 20:12:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvthtq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMORY_FAILURE","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["hugetlb_page_hwpoison","hugetlb_unref_page_hwpoison","unpoison_memory","folio_clear_hugetlb_hwpoison"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMORY_FAILURE","TRANSPARENT_HUGEPAGE"],"series_id":"3e745adf-3aa7-4479-a465-a323f0992e19","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:{"findings":["7a0cb565-4340-4daf-8de2-06f5b1d2af93","a77d3cb3-6a99-45a3-bd83-722c3f7fcd2c","2406d176-ea76-40a8-b6bc-41d3e6326388"]},track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-07-26 20:12:14 +0000 UTC FinishedAt: 2026-07-26 20:12:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvthtq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMORY_FAILURE","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["hugetlb_page_hwpoison","hugetlb_unref_page_hwpoison","unpoison_memory","folio_clear_hugetlb_hwpoison"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMORY_FAILURE","TRANSPARENT_HUGEPAGE"],"series_id":"3e745adf-3aa7-4479-a465-a323f0992e19","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:{"findings":["7a0cb565-4340-4daf-8de2-06f5b1d2af93","a77d3cb3-6a99-45a3-bd83-722c3f7fcd2c","2406d176-ea76-40a8-b6bc-41d3e6326388"]},track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-07-26 20:12:25 +0000 UTC FinishedAt: 2026-07-26 23:14:41 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["hugetlb_page_hwpoison","hugetlb_unref_page_hwpoison","unpoison_memory","folio_clear_hugetlb_hwpoison"],"skip_cover_check":true},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:*f3d0c09c-5d3f-437f-8a90-41dbd0dd12ba,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*f0a76b12-7064-42d2-b5c3-3fac8cf2b851,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-workflowvthtq/series-workflowvthtq-build-action-909291593/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-workflowvthtq/series-workflowvthtq-build-action-2309144822/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowvthtq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMORY_FAILURE","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["hugetlb_page_hwpoison","hugetlb_unref_page_hwpoison","unpoison_memory","folio_clear_hugetlb_hwpoison"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMORY_FAILURE","TRANSPARENT_HUGEPAGE"],"series_id":"3e745adf-3aa7-4479-a465-a323f0992e19","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:{"findings":["7a0cb565-4340-4daf-8de2-06f5b1d2af93","a77d3cb3-6a99-45a3-bd83-722c3f7fcd2c","2406d176-ea76-40a8-b6bc-41d3e6326388"]},track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-07-26 20:12:25 +0000 UTC FinishedAt: 2026-07-26 20:12:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvthtq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMORY_FAILURE","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["hugetlb_page_hwpoison","hugetlb_unref_page_hwpoison","unpoison_memory","folio_clear_hugetlb_hwpoison"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMORY_FAILURE","TRANSPARENT_HUGEPAGE"],"series_id":"3e745adf-3aa7-4479-a465-a323f0992e19","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:{"findings":["7a0cb565-4340-4daf-8de2-06f5b1d2af93","a77d3cb3-6a99-45a3-bd83-722c3f7fcd2c","2406d176-ea76-40a8-b6bc-41d3e6326388"]},track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-07-26 20:12:25 +0000 UTC FinishedAt: 2026-07-26 20:12:32 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["hugetlb_page_hwpoison","hugetlb_unref_page_hwpoison","unpoison_memory","folio_clear_hugetlb_hwpoison"],"skip_cover_check":true},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-workflowvthtq/series-workflowvthtq-convert-artifact-1478430167/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowvthtq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMORY_FAILURE","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["hugetlb_page_hwpoison","hugetlb_unref_page_hwpoison","unpoison_memory","folio_clear_hugetlb_hwpoison"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMORY_FAILURE","TRANSPARENT_HUGEPAGE"],"series_id":"3e745adf-3aa7-4479-a465-a323f0992e19","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:{"findings":["7a0cb565-4340-4daf-8de2-06f5b1d2af93","a77d3cb3-6a99-45a3-bd83-722c3f7fcd2c","2406d176-ea76-40a8-b6bc-41d3e6326388"]},track:KASAN)[10].run-retest Phase: Succeeded StartedAt: 2026-07-26 20:12:25 +0000 UTC FinishedAt: 2026-07-26 20:58:45 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:retest-data,Default:nil,Value:*{"findings":["7a0cb565-4340-4daf-8de2-06f5b1d2af93","a77d3cb3-6a99-45a3-bd83-722c3f7fcd2c","2406d176-ea76-40a8-b6bc-41d3e6326388"]},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:base-build-id,Default:nil,Value:*f3d0c09c-5d3f-437f-8a90-41dbd0dd12ba,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*f0a76b12-7064-42d2-b5c3-3fac8cf2b851,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:track,Default:nil,Value:*KASAN,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-workflowvthtq/series-workflowvthtq-build-action-909291593/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-workflowvthtq/series-workflowvthtq-build-action-2309144822/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowvthtq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMORY_FAILURE","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["hugetlb_page_hwpoison","hugetlb_unref_page_hwpoison","unpoison_memory","folio_clear_hugetlb_hwpoison"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMORY_FAILURE","TRANSPARENT_HUGEPAGE"],"series_id":"3e745adf-3aa7-4479-a465-a323f0992e19","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:{"findings":["7a0cb565-4340-4daf-8de2-06f5b1d2af93","a77d3cb3-6a99-45a3-bd83-722c3f7fcd2c","2406d176-ea76-40a8-b6bc-41d3e6326388"]},track:KASAN)[10].run-retest[0] Phase: Succeeded StartedAt: 2026-07-26 20:12:25 +0000 UTC FinishedAt: 2026-07-26 20:12:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvthtq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMORY_FAILURE","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["hugetlb_page_hwpoison","hugetlb_unref_page_hwpoison","unpoison_memory","folio_clear_hugetlb_hwpoison"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMORY_FAILURE","TRANSPARENT_HUGEPAGE"],"series_id":"3e745adf-3aa7-4479-a465-a323f0992e19","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:{"findings":["7a0cb565-4340-4daf-8de2-06f5b1d2af93","a77d3cb3-6a99-45a3-bd83-722c3f7fcd2c","2406d176-ea76-40a8-b6bc-41d3e6326388"]},track:KASAN)[10].run-retest[0].save-retest-task Phase: Succeeded StartedAt: 2026-07-26 20:12:25 +0000 UTC FinishedAt: 2026-07-26 20:12:32 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"findings":["7a0cb565-4340-4daf-8de2-06f5b1d2af93","a77d3cb3-6a99-45a3-bd83-722c3f7fcd2c","2406d176-ea76-40a8-b6bc-41d3e6326388"]},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-workflowvthtq/series-workflowvthtq-convert-artifact-1154016320/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowvthtq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMORY_FAILURE","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["hugetlb_page_hwpoison","hugetlb_unref_page_hwpoison","unpoison_memory","folio_clear_hugetlb_hwpoison"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMORY_FAILURE","TRANSPARENT_HUGEPAGE"],"series_id":"3e745adf-3aa7-4479-a465-a323f0992e19","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:{"findings":["7a0cb565-4340-4daf-8de2-06f5b1d2af93","a77d3cb3-6a99-45a3-bd83-722c3f7fcd2c","2406d176-ea76-40a8-b6bc-41d3e6326388"]},track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-07-26 20:12:54 +0000 UTC FinishedAt: 2026-07-26 23:14:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvthtq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMORY_FAILURE","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["hugetlb_page_hwpoison","hugetlb_unref_page_hwpoison","unpoison_memory","folio_clear_hugetlb_hwpoison"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMORY_FAILURE","TRANSPARENT_HUGEPAGE"],"series_id":"3e745adf-3aa7-4479-a465-a323f0992e19","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:{"findings":["7a0cb565-4340-4daf-8de2-06f5b1d2af93","a77d3cb3-6a99-45a3-bd83-722c3f7fcd2c","2406d176-ea76-40a8-b6bc-41d3e6326388"]},track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-07-26 20:12:54 +0000 UTC FinishedAt: 2026-07-26 23:14:31 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*f3d0c09c-5d3f-437f-8a90-41dbd0dd12ba,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*f0a76b12-7064-42d2-b5c3-3fac8cf2b851,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-workflowvthtq/series-workflowvthtq-build-action-909291593/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-workflowvthtq/series-workflowvthtq-build-action-2309144822/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-workflowvthtq/series-workflowvthtq-convert-artifact-1478430167/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,} --------- Name: series-workflowvthtq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMORY_FAILURE","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["hugetlb_page_hwpoison","hugetlb_unref_page_hwpoison","unpoison_memory","folio_clear_hugetlb_hwpoison"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMORY_FAILURE","TRANSPARENT_HUGEPAGE"],"series_id":"3e745adf-3aa7-4479-a465-a323f0992e19","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:{"findings":["7a0cb565-4340-4daf-8de2-06f5b1d2af93","a77d3cb3-6a99-45a3-bd83-722c3f7fcd2c","2406d176-ea76-40a8-b6bc-41d3e6326388"]},track:KASAN)[10].run-retest[1] Phase: Succeeded StartedAt: 2026-07-26 20:12:55 +0000 UTC FinishedAt: 2026-07-26 20:58:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvthtq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMORY_FAILURE","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["hugetlb_page_hwpoison","hugetlb_unref_page_hwpoison","unpoison_memory","folio_clear_hugetlb_hwpoison"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMORY_FAILURE","TRANSPARENT_HUGEPAGE"],"series_id":"3e745adf-3aa7-4479-a465-a323f0992e19","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:{"findings":["7a0cb565-4340-4daf-8de2-06f5b1d2af93","a77d3cb3-6a99-45a3-bd83-722c3f7fcd2c","2406d176-ea76-40a8-b6bc-41d3e6326388"]},track:KASAN)[10].run-retest[1].retest Phase: Succeeded StartedAt: 2026-07-26 20:12:55 +0000 UTC FinishedAt: 2026-07-26 20:58:31 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*f3d0c09c-5d3f-437f-8a90-41dbd0dd12ba,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*f0a76b12-7064-42d2-b5c3-3fac8cf2b851,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Previous reproducers,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-workflowvthtq/series-workflowvthtq-build-action-909291593/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-workflowvthtq/series-workflowvthtq-build-action-2309144822/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:retest-task,Path:/data/retest.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-workflowvthtq/series-workflowvthtq-convert-artifact-1154016320/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,}