Name: series-workflow6kfqx Phase: Succeeded StartedAt: 2026-07-05 18:10:22 +0000 UTC FinishedAt: 2026-07-05 22:29:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6kfqx[0] Phase: Succeeded StartedAt: 2026-07-05 18:10:22 +0000 UTC FinishedAt: 2026-07-05 18:24:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6kfqx[0].run-triage Phase: Succeeded StartedAt: 2026-07-05 18:10:22 +0000 UTC FinishedAt: 2026-07-05 18:24:32 +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": "844352111faac98f6f0eabd3ddc0d56af5fdebc8", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MEMORY_FAILURE", "HUGETLBFS", "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": "844352111faac98f6f0eabd3ddc0d56af5fdebc8", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MEMORY_FAILURE", "HUGETLBFS", "TRANSPARENT_HUGEPAGE" ], "series_id": "4111263e-710a-4a67-b476-a54ee5acd4a7" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "__hugepage_handle_poison", "free_has_hwpoisoned" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA1IDE4OjIxPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01FTU9SWV9GQUlMVVJFJiMzNDssCiAgICAmIzM0O0hVR0VUTEJGUyYjMzQ7LAogICAgJiMzNDtUUkFOU1BBUkVOVF9IVUdFUEFHRSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O19faHVnZXBhZ2VfaGFuZGxlX3BvaXNvbiYjMzQ7LAogICAgJiMzNDtmcmVlX2hhc19od3BvaXNvbmVkJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIG1lbW9yeSBmYWlsdXJlIGhhbmRsaW5nIGZvciBIdWdlVExCIHBhZ2VzLCBlbnN1cmluZyB0aGF0IGhlYWx0aHkgc3VicGFnZXMgb2YgYSBjb21wb3VuZCBwYWdlIHdpdGggaGFyZHdhcmUgcG9pc29uZWQgc3VicGFnZXMgYXJlIGNvcnJlY3RseSBmcmVlZCB0byB0aGUgYnVkZHkgYWxsb2NhdG9yLCB3aGlsZSBpc29sYXRpbmcgdGhlIHBvaXNvbmVkIG9uZXMuIFRoaXMgaW52b2x2ZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIGNvcmUgTU0gYW5kIHBhZ2UgYWxsb2NhdG9yIGxvZ2ljLCBzcGVjaWZpY2FsbHkgaW4gbW0vbWVtb3J5LWZhaWx1cmUuYyBhbmQgbW0vcGFnZV9hbGxvYy5jLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA1IDE4OjIxPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgOTc3NTQ1Yzk4OTU2OTEzZTAyNmQzNGY1MjUyOTlhYjk3OTA2Y2NmYlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTdW4gSnVsIDUgMTg6MjE6MjMgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmggYi9pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaFxuaW5kZXggN2E4NjM1NzJhZGNlNzkuLjNjZDUyNGUwNGEzMGJiIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oXG5AQCAtODc5LDcgJiM0Mzs4NzksNyBAQCBGT0xJT19GTEFHX0ZBTFNFKHBhcnRpYWxseV9tYXBwZWQpXG4gXG4gI2RlZmluZSBQR19oZWFkX21hc2sgKCgxVUwgXHUwMDNjXHUwMDNjIFBHX2hlYWQpKVxuIFxuLSNpZiBkZWZpbmVkKENPTkZJR19NRU1PUllfRkFJTFVSRSkgXHUwMDI2XHUwMDI2IGRlZmluZWQoQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFKVxuJiM0MzsjaWYgZGVmaW5lZChDT05GSUdfTUVNT1JZX0ZBSUxVUkUpIFx1MDAyNlx1MDAyNiAoZGVmaW5lZChDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UpIHx8IGRlZmluZWQoQ09ORklHX0hVR0VUTEJfUEFHRSkpXG4gLypcbiAgKiBQYWdlSGFzSFdQb2lzb25lZCBpbmRpY2F0ZXMgdGhhdCBhdCBsZWFzdCBvbmUgc3VicGFnZSBpcyBod3BvaXNvbmVkIGluIHRoZVxuICAqIGNvbXBvdW5kIHBhZ2UuXG5kaWZmIC0tZ2l0IGEvbW0vbWVtb3J5LWZhaWx1cmUuYyBiL21tL21lbW9yeS1mYWlsdXJlLmNcbmluZGV4IDQ5MTZhYjE0NTMyNTczLi5hMzdiNjc1NTA3MTgyNyAxMDA2NDRcbi0tLSBhL21tL21lbW9yeS1mYWlsdXJlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL21lbW9yeS1mYWlsdXJlLmNcbkBAIC0xNzQsNiAmIzQzOzE3NCwzMCBAQCBzdGF0aWMgc3RydWN0IHJiX3Jvb3RfY2FjaGVkIHBmbl9zcGFjZV9pdHJlZSA9IFJCX1JPT1RfQ0FDSEVEO1xuIHN0YXRpYyBERUZJTkVfTVVURVgocGZuX3NwYWNlX2xvY2spO1xuIFxuIC8qXG4mIzQzOyAqIE9ubHkgZm9yIGEgSHVnZVRMQiBwYWdlIGJlaW5nIGhhbmRsZWQgYnkgbWVtb3J5X2ZhaWx1cmUoKS4gVGhlIGtleVxuJiM0MzsgKiBkaWZmZXJlbmNlIHRvIHNvZnRfb2ZmbGluZSgpIGlzIHRoYXQsIG5vIEhXUG9pc29uIHN1YnBhZ2Ugd2lsbCBtYWtlXG4mIzQzOyAqIGludG8gYnVkZHkgYWxsb2NhdG9yIGFmdGVyIGEgc3VjY2Vzc2Z1bCBkaXNzb2x2ZV9mcmVlX2h1Z2V0bGJfZm9saW8oKSxcbiYjNDM7ICogc28gdGFrZV9wYWdlX29mZl9idWRkeSgpIGlzIHVubmVjZXNzYXJ5LlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGludCBfX2h1Z2VwYWdlX2hhbmRsZV9wb2lzb24oc3RydWN0IHBhZ2UgKnBhZ2UpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgZm9saW8gKmZvbGlvID0gcGFnZV9mb2xpbyhwYWdlKTtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBDYW4mIzM5O3QgdXNlIGRpc3NvbHZlX2ZyZWVfaHVnZXRsYl9mb2xpbygpIHdpdGhvdXQgYSByZWxpYWJsZVxuJiM0MztcdCAqIHJhd19od3BfbGlzdCB0ZWxsaW5nIHdoaWNoIHN1YnBhZ2UgaXMgSFdQb2lzb24uIFNvIGRvIG5vdCBmcmVlXG4mIzQzO1x0ICogdGhlbSB0byB0aGUgYnVkZHkgYWxsb2NhdG9yLiBkZXF1ZXVlX2h1Z2V0bGJfZm9saW9fbm9kZV9leGFjdCgpXG4mIzQzO1x0ICogd2lsbCBlbnN1cmUgdG8gbmV2ZXIgcmUtYWxsb2NhdGUgdGhpcyBodWdlcGFnZS5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAoZm9saW9fdGVzdF9odWdldGxiX3Jhd19od3BfdW5yZWxpYWJsZShmb2xpbykpXG4mIzQzO1x0XHQvKiByYXdfaHdwX2xpc3QgYmVjb21lcyB1bnJlbGlhYmxlIHdoZW4ga21hbGxvYygpIGZhaWxzLiAqL1xuJiM0MztcdFx0cmV0dXJuIC1FTk9NRU07XG4mIzQzO1xuJiM0MztcdHJldHVybiBkaXNzb2x2ZV9mcmVlX2h1Z2V0bGJfZm9saW8oZm9saW8pO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKlxuJiM0MzsgKiBPbmx5IGZvciBhIGZyZWUgb3IgSHVnZVRMQiBwYWdlIGJlaW5nIGhhbmRsZWQgYnkgc29mdF9vZmZsaW5lKCkuXG4gICogUmV0dXJuIHZhbHVlczpcbiAgKiAgIDE6ICAgdGhlIHBhZ2UgaXMgZGlzc29sdmVkIChpZiBuZWVkZWQpIGFuZCB0YWtlbiBvZmYgZnJvbSBidWRkeSxcbiAgKiAgIDA6ICAgdGhlIHBhZ2UgaXMgZGlzc29sdmVkIChpZiBuZWVkZWQpIGFuZCBub3QgdGFrZW4gb2ZmIGZyb20gYnVkZHksXG5AQCAtMTE2NiwxMSAmIzQzOzExOTAsMTEgQEAgc3RhdGljIGludCBtZV9odWdlX3BhZ2Uoc3RydWN0IHBhZ2Vfc3RhdGUgKnBzLCBzdHJ1Y3QgcGFnZSAqcClcbiBcdFx0ICogc3VicGFnZXMuXG4gXHRcdCAqL1xuIFx0XHRmb2xpb19wdXQoZm9saW8pO1xuLVx0XHRpZiAoX19wYWdlX2hhbmRsZV9wb2lzb24ocCkgXHUwMDNlIDApIHtcbiYjNDM7XHRcdGlmIChfX2h1Z2VwYWdlX2hhbmRsZV9wb2lzb24ocCkpIHtcbiYjNDM7XHRcdFx0cmVzID0gTUZfRkFJTEVEO1xuJiM0MztcdFx0fSBlbHNlIHtcbiBcdFx0XHRwYWdlX3JlZl9pbmMocCk7XG4gXHRcdFx0cmVzID0gTUZfUkVDT1ZFUkVEO1xuLVx0XHR9IGVsc2Uge1xuLVx0XHRcdHJlcyA9IE1GX0ZBSUxFRDtcbiBcdFx0fVxuIFx0fVxuIFxuQEAgLTIwMDgsNiAmIzQzOzIwMzIsNyBAQCB2b2lkIGZvbGlvX2NsZWFyX2h1Z2V0bGJfaHdwb2lzb24oc3RydWN0IGZvbGlvICpmb2xpbylcbiBcdGlmIChmb2xpb190ZXN0X2h1Z2V0bGJfdm1lbW1hcF9vcHRpbWl6ZWQoZm9saW8pKVxuIFx0XHRyZXR1cm47XG4gXHRmb2xpb19jbGVhcl9od3BvaXNvbihmb2xpbyk7XG4mIzQzO1x0Zm9saW9fc2V0X2hhc19od3BvaXNvbmVkKGZvbGlvKTtcbiBcdGZvbGlvX2ZyZWVfcmF3X2h3cChmb2xpbywgdHJ1ZSk7XG4gfVxuIFxuQEAgLTIxMzIsMTEgJiM0MzsyMTU3LDExIEBAIHN0YXRpYyBpbnQgdHJ5X21lbW9yeV9mYWlsdXJlX2h1Z2V0bGIodW5zaWduZWQgbG9uZyBwZm4sIGludCBmbGFncylcbiBcdCAqL1xuIFx0aWYgKHJlcyA9PSBNRl9IVUdFVExCX0ZSRUVEKSB7XG4gXHRcdGZvbGlvX3VubG9jayhmb2xpbyk7XG4tXHRcdGlmIChfX3BhZ2VfaGFuZGxlX3BvaXNvbihwKSBcdTAwM2UgMCkge1xuJiM0MztcdFx0aWYgKF9faHVnZXBhZ2VfaGFuZGxlX3BvaXNvbihwKSkge1xuJiM0MztcdFx0XHRyZXMgPSBNRl9GQUlMRUQ7XG4mIzQzO1x0XHR9IGVsc2Uge1xuIFx0XHRcdHBhZ2VfcmVmX2luYyhwKTtcbiBcdFx0XHRyZXMgPSBNRl9SRUNPVkVSRUQ7XG4tXHRcdH0gZWxzZSB7XG4tXHRcdFx0cmVzID0gTUZfRkFJTEVEO1xuIFx0XHR9XG4gXHRcdHJldHVybiBhY3Rpb25fcmVzdWx0KHBmbiwgTUZfTVNHX0ZSRUVfSFVHRSwgcmVzKTtcbiBcdH1cbmRpZmYgLS1naXQgYS9tbS9wYWdlX2FsbG9jLmMgYi9tbS9wYWdlX2FsbG9jLmNcbmluZGV4IDc2MmQ5YjZiYzc5MmYxLi42NDE4ODk2YzlkZjY2MCAxMDA2NDRcbi0tLSBhL21tL3BhZ2VfYWxsb2MuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vcGFnZV9hbGxvYy5jXG5AQCAtOTMsNiAmIzQzOzkzLDEzIEBAIHR5cGVkZWYgaW50IF9fYml0d2lzZSBmcGlfdDtcbiAvKiBmcmVlX3BhZ2VzX3ByZXBhcmUoKSBoYXMgYWxyZWFkeSBiZWVuIGNhbGxlZCBmb3IgcGFnZShzKSBiZWluZyBmcmVlZC4gKi9cbiAjZGVmaW5lIEZQSV9QUkVQQVJFRFx0XHQoKF9fZm9yY2UgZnBpX3QpQklUKDMpKVxuIFxuJiM0MzsvKlxuJiM0MzsgKiBQYWdlKHMpIG5lZWRzIHRvIGdvIHRocm91Z2ggZnJlZV9wYWdlc19zYW5pdGl6ZSgpLCBmb3IgZXhhbXBsZSwgYmVjYXVzZVxuJiM0MzsgKiBmcmVlX3BhZ2VzX3ByZXBhcmUoKSBjYW5ub3Qgc2FuaXRpemUgYSBoaWdoLW9yZGVyIHBhZ2UgYmxvY2sgZHVlIHRvXG4mIzQzOyAqIGhhcmR3YXJlIGVycm9yIGluIHNvbWUgcGFnZShzKS5cbiYjNDM7ICovXG4mIzQzOyNkZWZpbmUgRlBJX1NBTklUSVpFXHRcdCgoX19mb3JjZSBmcGlfdClCSVQoNCkpXG4mIzQzO1xuIC8qIHByZXZlbnQgXHUwMDNlMSBfdXBkYXRlcl8gb2Ygem9uZSBwZXJjcHUgcGFnZXNldCAtXHUwMDNlaGlnaCBhbmQgLVx1MDAzZWJhdGNoIGZpZWxkcyAqL1xuIHN0YXRpYyBERUZJTkVfTVVURVgocGNwX2JhdGNoX2hpZ2hfbG9jayk7XG4gI2RlZmluZSBNSU5fUEVSQ1BVX1BBR0VMSVNUX0hJR0hfRlJBQ1RJT04gKDgpXG5AQCAtMjEwLDYgJiM0MzsyMTcsOCBAQCBnZnBfdCBnZnBfYWxsb3dlZF9tYXNrIF9fcmVhZF9tb3N0bHkgPSBHRlBfQk9PVF9NQVNLO1xuIHVuc2lnbmVkIGludCBwYWdlYmxvY2tfb3JkZXIgX19yZWFkX21vc3RseTtcbiAjZW5kaWZcbiBcbiYjNDM7c3RhdGljIHZvaWQgZnJlZV9oYXNfaHdwb2lzb25lZChzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgaW50IG9yZGVyLFxuJiM0MztcdFx0XHRcdGZwaV90IGZwaV9mbGFncyk7XG4gc3RhdGljIHZvaWQgX19mcmVlX3BhZ2VzX29rKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBpbnQgb3JkZXIsXG4gXHRcdFx0ICAgIGZwaV90IGZwaV9mbGFncyk7XG4gc3RhdGljIHZvaWQgcmVzZXJ2ZV9oaWdoYXRvbWljX3BhZ2VibG9jayhzdHJ1Y3QgcGFnZSAqcGFnZSwgaW50IG9yZGVyLFxuQEAgLTEzMTEsMTQgJiM0MzsxMzIwLDczIEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBwZ2FsbG9jX3RhZ19zdWJfcGFnZXMoc3RydWN0IGFsbG9jX3RhZyAqdGFnLCB1bnNpZ25lZCBpbnQgbnIpXG4gXG4gI2VuZGlmIC8qIENPTkZJR19NRU1fQUxMT0NfUFJPRklMSU5HICovXG4gXG4mIzQzOy8qXG4mIzQzOyAqIFNhbml0aXplLCB3aGljaCByZXF1aXJlcyB3cml0aW5nLCBhIGJsb2NrIG9mIHBhZ2VzIGF0IHRoZSBsYXN0IG1vbWVudCBvZlxuJiM0MzsgKiBwcmVwYXJpbmcgdG8gZnJlZWluZyB0aGVtLCBpLmUuIF9fZnJlZV9wYWdlc19wcmVwYXJlKCkuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgdm9pZCBmcmVlX3BhZ2VzX3Nhbml0aXplKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBpbnQgb3JkZXIpXG4mIzQzO3tcbiYjNDM7XHRib29sIGluaXQgPSB3YW50X2luaXRfb25fZnJlZSgpO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogX19rYXNhbl91bnBvaXNvbl9wYWdlcygpIHNldHMga2FzYW4gdGFnIG9uIGV2ZXJ5IHRhaWwgcGFnZSwgc29cbiYjNDM7XHQgKiBpdCBpcyBmaW5lIHRvIHVzZSBzaG91bGRfc2tpcF9rYXNhbl9wb2lzb24oKSB3aGVuIHBhZ2VzIGhlcmVcbiYjNDM7XHQgKiB3ZXJlIGEgc2V0IG9mIHRhaWwgcGFnZXMgZnJvbSBhIGNvbXBvdW5kIGZvbGlvLlxuJiM0MztcdCAqL1xuJiM0MztcdGJvb2wgc2tpcF9rYXNhbl9wb2lzb24gPSBzaG91bGRfc2tpcF9rYXNhbl9wb2lzb24ocGFnZSk7XG4mIzQzO1xuJiM0MztcdGtlcm5lbF9wb2lzb25fcGFnZXMocGFnZSwgMSBcdTAwM2NcdTAwM2Mgb3JkZXIpO1xuJiM0MztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIEFzIG1lbW9yeSBpbml0aWFsaXphdGlvbiBtaWdodCBiZSBpbnRlZ3JhdGVkIGludG8gS0FTQU4sXG4mIzQzO1x0ICogS0FTQU4gcG9pc29uaW5nIGFuZCBtZW1vcnkgaW5pdGlhbGl6YXRpb24gY29kZSBtdXN0IGJlXG4mIzQzO1x0ICoga2VwdCB0b2dldGhlciB0byBhdm9pZCBkaXNjcmVwYW5jaWVzIGluIGJlaGF2aW9yLlxuJiM0MztcdCAqXG4mIzQzO1x0ICogV2l0aCBoYXJkd2FyZSB0YWctYmFzZWQgS0FTQU4sIG1lbW9yeSB0YWdzIG11c3QgYmUgc2V0IGJlZm9yZSB0aGVcbiYjNDM7XHQgKiBwYWdlIGJlY29tZXMgdW5hdmFpbGFibGUgdmlhIGRlYnVnX3BhZ2VhbGxvYyBvciBhcmNoX2ZyZWVfcGFnZS5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAoIXNraXBfa2FzYW5fcG9pc29uKSB7XG4mIzQzO1x0XHRrYXNhbl9wb2lzb25fcGFnZXMocGFnZSwgb3JkZXIsIGluaXQpO1xuJiM0MztcbiYjNDM7XHRcdC8qIE1lbW9yeSBpcyBhbHJlYWR5IGluaXRpYWxpemVkIGlmIEtBU0FOIGRpZCBpdCBpbnRlcm5hbGx5LiAqL1xuJiM0MztcdFx0aWYgKGthc2FuX2hhc19pbnRlZ3JhdGVkX2luaXQoKSlcbiYjNDM7XHRcdFx0aW5pdCA9IGZhbHNlO1xuJiM0MztcdH1cbiYjNDM7XHRpZiAoaW5pdClcbiYjNDM7XHRcdGNsZWFyX2hpZ2hwYWdlc19rYXNhbl90YWdnZWQocGFnZSwgMSBcdTAwM2NcdTAwM2Mgb3JkZXIpO1xuJiM0MztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIGFyY2hfZnJlZV9wYWdlKCkgY2FuIG1ha2UgdGhlIHBhZ2UmIzM5O3MgY29udGVudHMgaW5hY2Nlc3NpYmxlLiAgczM5MFxuJiM0MztcdCAqIGRvZXMgdGhpcy4gIFNvIG5vdGhpbmcgd2hpY2ggY2FuIGFjY2VzcyB0aGUgcGFnZSYjMzk7cyBjb250ZW50cyBzaG91bGRcbiYjNDM7XHQgKiBoYXBwZW4gYWZ0ZXIgdGhpcy5cbiYjNDM7XHQgKi9cbiYjNDM7XHRhcmNoX2ZyZWVfcGFnZShwYWdlLCBvcmRlcik7XG4mIzQzO1xuJiM0MztcdGRlYnVnX3BhZ2VhbGxvY191bm1hcF9wYWdlcyhwYWdlLCAxIFx1MDAzY1x1MDAzYyBvcmRlcik7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qXG4mIzQzOyAqIFJldHVybnNcbiYjNDM7ICogLSB0cnVlOiBjaGVja3MgYW5kIHByZXBhcmF0aW9ucyBhbGwgZ29vZCwgY2FsbGVyIGNhbiBwcm9jZWVkIGZyZWVpbmcuXG4mIzQzOyAqIC0gZmFsc2U6IGRvIG5vdCBwcm9jZWVkIGZyZWVpbmcgZm9yIG9uZSBvZiB0aGUgZm9sbG93aW5nIHJlYXNvbnM6XG4mIzQzOyAqICAgMS4gU29tZSBjaGVjayBmYWlsZWQgc28gaXQgaXMgbm90IHNhZmUgdG8gcHJvY2VlZCBmcmVlaW5nLlxuJiM0MzsgKiAgIDIuIEEgY29tcG91bmQgcGFnZSBoYXMgc29tZSBIV1BvaXNvbiBwYWdlcy4gVGhlIGhlYWx0aHkgcGFnZXNcbiYjNDM7ICogICAgICBhcmUgYWxyZWFkeSBzYWZlbHkgZnJlZWQsIGFuZCB0aGUgSFdQb2lzb24gb25lcyBpc29sYXRlZC5cbiYjNDM7ICovXG4gc3RhdGljIF9fYWx3YXlzX2lubGluZSBib29sIF9fZnJlZV9wYWdlc19wcmVwYXJlKHN0cnVjdCBwYWdlICpwYWdlLFxuIFx0XHR1bnNpZ25lZCBpbnQgb3JkZXIsIGZwaV90IGZwaV9mbGFncylcbiB7XG4gXHRpbnQgYmFkID0gMDtcbi1cdGJvb2wgc2tpcF9rYXNhbl9wb2lzb24gPSBzaG91bGRfc2tpcF9rYXNhbl9wb2lzb24ocGFnZSk7XG4tXHRib29sIGluaXQgPSB3YW50X2luaXRfb25fZnJlZSgpO1xuIFx0Ym9vbCBjb21wb3VuZCA9IFBhZ2VDb21wb3VuZChwYWdlKTtcbiBcdHN0cnVjdCBmb2xpbyAqZm9saW8gPSBwYWdlX2ZvbGlvKHBhZ2UpO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogV2hlbiBkZWFsaW5nIHdpdGggY29tcG91bmQgcGFnZSwgUEdfaGFzX2h3cG9pc29uZWQgaXMgY2xlYXJlZFxuJiM0MztcdCAqIHdpdGggUEFHRV9GTEFHU19TRUNPTkQuIFNvIHRoZSBjaGVjayBtdXN0IGJlIGRvbmUgZmlyc3QuXG4mIzQzO1x0ICpcbiYjNDM7XHQgKiBOb3RlIHdlIGNhbiYjMzk7dCBleGNsdWRlIFBHX2hhc19od3BvaXNvbmVkIGZyb20gUEFHRV9GTEFHU19TRUNPTkQuXG4mIzQzO1x0ICogQmVjYXVzZSBQR19oYXNfaHdwb2lzb25lZCA9PSBQR19hY3RpdmUsIGZyZWVfcGFnZV9pc19iYWQoKSB3aWxsXG4mIzQzO1x0ICogY29uZnVzZSBhbmQgY29tcGxhaW50IHRoYXQgdGhlIGZpcnN0IHRhaWwgcGFnZSBpcyBzdGlsbCBhY3RpdmUuXG4mIzQzO1x0ICovXG4mIzQzO1x0Ym9vbCBzaG91bGRfZmhoID0gY29tcG91bmQgXHUwMDI2XHUwMDI2IGZvbGlvX3Rlc3RfaGFzX2h3cG9pc29uZWQoZm9saW8pO1xuIFxuIFx0aWYgKGZwaV9mbGFncyBcdTAwMjYgRlBJX1BSRVBBUkVEKVxuIFx0XHRyZXR1cm4gdHJ1ZTtcbkBAIC0xNDE2LDM0ICYjNDM7MTQ4NCwxOSBAQCBzdGF0aWMgX19hbHdheXNfaW5saW5lIGJvb2wgX19mcmVlX3BhZ2VzX3ByZXBhcmUoc3RydWN0IHBhZ2UgKnBhZ2UsXG4gXHRcdFx0XHRcdCAgIFBBR0VfU0laRSBcdTAwM2NcdTAwM2Mgb3JkZXIpO1xuIFx0fVxuIFxuLVx0a2VybmVsX3BvaXNvbl9wYWdlcyhwYWdlLCAxIFx1MDAzY1x1MDAzYyBvcmRlcik7XG4tXG4gXHQvKlxuLVx0ICogQXMgbWVtb3J5IGluaXRpYWxpemF0aW9uIG1pZ2h0IGJlIGludGVncmF0ZWQgaW50byBLQVNBTixcbi1cdCAqIEtBU0FOIHBvaXNvbmluZyBhbmQgbWVtb3J5IGluaXRpYWxpemF0aW9uIGNvZGUgbXVzdCBiZVxuLVx0ICoga2VwdCB0b2dldGhlciB0byBhdm9pZCBkaXNjcmVwYW5jaWVzIGluIGJlaGF2aW9yLlxuJiM0MztcdCAqIEFmdGVyIGJyZWFraW5nIGRvd24gY29tcG91bmQgcGFnZSBhbmQgZGVhbGluZyB3aXRoIHBhZ2UgbWV0YWRhdGFcbiYjNDM7XHQgKiAoZS5nLiBwYWdlIG93bmVyIGFuZCBwYWdlIGFsbG9jIHRhZ3MpLCB0YWtlIGEgc2hvcnRjdXQgaWYgdGhpc1xuJiM0MztcdCAqIHdhcyBhIGNvbXBvdW5kIHBhZ2UgY29udGFpbmluZyBjZXJ0YWluIEhXUG9pc29uIHN1YnBhZ2VzLlxuIFx0ICpcbi1cdCAqIFdpdGggaGFyZHdhcmUgdGFnLWJhc2VkIEtBU0FOLCBtZW1vcnkgdGFncyBtdXN0IGJlIHNldCBiZWZvcmUgdGhlXG4tXHQgKiBwYWdlIGJlY29tZXMgdW5hdmFpbGFibGUgdmlhIGRlYnVnX3BhZ2VhbGxvYyBvciBhcmNoX2ZyZWVfcGFnZS5cbiYjNDM7XHQgKiBGUElfU0FOSVRJWkUgdG8gcmVtZW1iZXIgZnJlZV9wYWdlc19zYW5pdGl6ZSgpIGhlYWx0aHkgcGFnZXMuXG4gXHQgKi9cbi1cdGlmICghc2tpcF9rYXNhbl9wb2lzb24pIHtcbi1cdFx0a2FzYW5fcG9pc29uX3BhZ2VzKHBhZ2UsIG9yZGVyLCBpbml0KTtcbi1cbi1cdFx0LyogTWVtb3J5IGlzIGFscmVhZHkgaW5pdGlhbGl6ZWQgaWYgS0FTQU4gZGlkIGl0IGludGVybmFsbHkuICovXG4tXHRcdGlmIChrYXNhbl9oYXNfaW50ZWdyYXRlZF9pbml0KCkpXG4tXHRcdFx0aW5pdCA9IGZhbHNlO1xuJiM0MztcdGlmIChzaG91bGRfZmhoKSB7XG4mIzQzO1x0XHRmcmVlX2hhc19od3BvaXNvbmVkKHBhZ2UsIG9yZGVyLCBmcGlfZmxhZ3MgfCBGUElfU0FOSVRJWkUpO1xuJiM0MztcdFx0cmV0dXJuIGZhbHNlO1xuIFx0fVxuLVx0aWYgKGluaXQpXG4tXHRcdGNsZWFyX2hpZ2hwYWdlc19rYXNhbl90YWdnZWQocGFnZSwgMSBcdTAwM2NcdTAwM2Mgb3JkZXIpO1xuLVxuLVx0Lypcbi1cdCAqIGFyY2hfZnJlZV9wYWdlKCkgY2FuIG1ha2UgdGhlIHBhZ2UmIzM5O3MgY29udGVudHMgaW5hY2Nlc3NpYmxlLiAgczM5MFxuLVx0ICogZG9lcyB0aGlzLiAgU28gbm90aGluZyB3aGljaCBjYW4gYWNjZXNzIHRoZSBwYWdlJiMzOTtzIGNvbnRlbnRzIHNob3VsZFxuLVx0ICogaGFwcGVuIGFmdGVyIHRoaXMuXG4tXHQgKi9cbi1cdGFyY2hfZnJlZV9wYWdlKHBhZ2UsIG9yZGVyKTtcbiBcbi1cdGRlYnVnX3BhZ2VhbGxvY191bm1hcF9wYWdlcyhwYWdlLCAxIFx1MDAzY1x1MDAzYyBvcmRlcik7XG4mIzQzO1x0ZnJlZV9wYWdlc19zYW5pdGl6ZShwYWdlLCBvcmRlcik7XG4gXG4gXHRyZXR1cm4gdHJ1ZTtcbiB9XG5AQCAtNjg1Miw4ICYjNDM7NjkwNSw4IEBAIHZvaWQgX19pbml0IHBhZ2VfYWxsb2Nfc3lzY3RsX2luaXQodm9pZClcbiBcdHJlZ2lzdGVyX3N5c2N0bF9pbml0KFwmIzM0O3ZtXCYjMzQ7LCBwYWdlX2FsbG9jX3N5c2N0bF90YWJsZSk7XG4gfVxuIFxuLXN0YXRpYyB2b2lkIGZyZWVfcHJlcGFyZWRfY29udGlnX3JhbmdlKHN0cnVjdCBwYWdlICpwYWdlLFxuLVx0XHR1bnNpZ25lZCBsb25nIG5yX3BhZ2VzKVxuJiM0MztzdGF0aWMgdm9pZCBfX2ZyZWVfcHJlcGFyZWRfY29udGlnX3JhbmdlKHN0cnVjdCBwYWdlICpwYWdlLFxuJiM0MztcdFx0dW5zaWduZWQgbG9uZyBucl9wYWdlcywgZnBpX3QgZnBpX2ZsYWdzKVxuIHtcbiBcdHVuc2lnbmVkIGxvbmcgcGZuID0gcGFnZV90b19wZm4ocGFnZSk7XG4gXG5AQCAtNjg2OSw4ICYjNDM7NjkyMiwxNSBAQCBzdGF0aWMgdm9pZCBmcmVlX3ByZXBhcmVkX2NvbnRpZ19yYW5nZShzdHJ1Y3QgcGFnZSAqcGFnZSxcbiBcdFx0LypcbiBcdFx0ICogRnJlZSB0aGUgY2h1bmsgYXMgYSBzaW5nbGUgYmxvY2suIE91ciBjYWxsZXIgaGFzIGFscmVhZHlcbiBcdFx0ICogY2FsbGVkIGZyZWVfcGFnZXNfcHJlcGFyZSgpIGZvciBlYWNoIG9yZGVyLTAgcGFnZS5cbiYjNDM7XHRcdCAqXG4mIzQzO1x0XHQgKiBJZiB0aGUgb3JpZ2luYWwgY29tcG91bmQgcGFnZSBoYXMgSFdQb2lzb24gcGFnZSxcbiYjNDM7XHRcdCAqIGZyZWVfcGFnZXNfcHJlcGFyZSgpIGhhcyB0byBza2lwIHNhbml0aXplIGF0IHRoYXQgdGltZSxcbiYjNDM7XHRcdCAqIGJ1dCBub3cgaXQgaXMgZ29vZCB0aW1lIHRvIGRvIHRoYXQuXG4gXHRcdCAqL1xuLVx0XHRfX2ZyZWVfZnJvemVuX3BhZ2VzKHBhZ2UsIG9yZGVyLCBGUElfUFJFUEFSRUQpO1xuJiM0MztcdFx0aWYgKGZwaV9mbGFncyBcdTAwMjYgRlBJX1NBTklUSVpFKVxuJiM0MztcdFx0XHRmcmVlX3BhZ2VzX3Nhbml0aXplKHBhZ2UsIG9yZGVyKTtcbiYjNDM7XG4mIzQzO1x0XHRfX2ZyZWVfZnJvemVuX3BhZ2VzKHBhZ2UsIG9yZGVyLCBmcGlfZmxhZ3MgfCBGUElfUFJFUEFSRUQpO1xuIFxuIFx0XHRwZm4gJiM0Mzs9IDFVTCBcdTAwM2NcdTAwM2Mgb3JkZXI7XG4gXHRcdHBhZ2UgJiM0Mzs9IDFVTCBcdTAwM2NcdTAwM2Mgb3JkZXI7XG5AQCAtNjg3OCw2ICYjNDM7NjkzOCwxMSBAQCBzdGF0aWMgdm9pZCBmcmVlX3ByZXBhcmVkX2NvbnRpZ19yYW5nZShzdHJ1Y3QgcGFnZSAqcGFnZSxcbiBcdH1cbiB9XG4gXG4mIzQzO3N0YXRpYyB2b2lkIGZyZWVfcHJlcGFyZWRfY29udGlnX3JhbmdlKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzKVxuJiM0Mzt7XG4mIzQzO1x0X19mcmVlX3ByZXBhcmVkX2NvbnRpZ19yYW5nZShwYWdlLCBucl9wYWdlcywgRlBJX05PTkUpO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyB2b2lkIF9fZnJlZV9jb250aWdfcmFuZ2VfY29tbW9uKHVuc2lnbmVkIGxvbmcgcGZuLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLFxuIFx0XHRib29sIGlzX2Zyb3plbilcbiB7XG5AQCAtNjk1MSw2ICYjNDM7NzAxNiw2MSBAQCB2b2lkIF9fZnJlZV9jb250aWdfcmFuZ2UodW5zaWduZWQgbG9uZyBwZm4sIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMpXG4gXHRfX2ZyZWVfY29udGlnX3JhbmdlX2NvbW1vbihwZm4sIG5yX3BhZ2VzLCAvKiBpc19mcm96ZW49ICovIGZhbHNlKTtcbiB9XG4gXG4mIzQzOy8qXG4mIzQzOyAqIEdpdmVuIHNvbWUgY29udGlndW91cyBwYWdlcyB0aGF0IGhhdmUgY2VydGFpbiBudW1iZXIgb2YgSFdQb2lzb24gcGFnZShzKSxcbiYjNDM7ICogZnJlZSBvbmx5IHRoZSBoZWFsdGh5IG9uZXMuXG4mIzQzOyAqXG4mIzQzOyAqIFVzZWQgYXQgdGhlIGVuZCBvZiBfX2ZyZWVfcGFnZXNfcHJlcGFyZSgpLiBFdmVuIGlmIGhhdmluZyBIV1BvaXNvbiBwYWdlcyxcbiYjNDM7ICogYnJlYWtpbmcgZG93biBjb21wb3VuZCBwYWdlIGFuZCBjbGVhcmluZyBtZXRhZGF0YSAoZS5nLiBwYWdlIG93bmVyLCBhbGxvY1xuJiM0MzsgKiB0YWcpIGNhbiBiZSBkb25lIHRvZ2V0aGVyIGR1cmluZyBfX2ZyZWVfcGFnZXNfcHJlcGFyZSgpLCB3aGljaCBzaW1wbGlmaWVzXG4mIzQzOyAqIHRoZSBzcGxpdHRpbmcgaGVyZTogdW5saWtlIF9fc3BsaXRfdW5tYXBwZWRfZm9saW8oKSwgdGhlcmUgaXMgbm8gbmVlZCB0b1xuJiM0MzsgKiB0dXJuIHNwbGl0IHBhZ2VzIGludG8gYSBjb21wb3VuZCBwYWdlIG9yIHRvIGNhcnJ5IG1ldGFkYXRhLlxuJiM0MzsgKlxuJiM0MzsgKiBJdCBzY2FucyBldmVyeSByYXcgcGFnZSBvZiB0aGUgY29tcG91bmQgcGFnZSBhbmQgY2F1c2VzIG5vbnRyaXZpYWwgb3ZlcmhlYWQuXG4mIzQzOyAqIFNvIG9ubHkgdXNlIHRoaXMgd2hlbiB0aGUgY29tcG91bmQgcGFnZSBjb250YWlucyBIV1BvaXNvbiBwYWdlKHMpLlxuJiM0MzsgKlxuJiM0MzsgKiBJdCBhbHNvIHdvcmtzIHdoZW4gb3JkZXIgPT0gMCwgcmVnYXJkbGVzcyBvZiBQYWdlSFdQb2lzb24oKSBvciBub3QuXG4mIzQzOyAqXG4mIzQzOyAqIFRoaXMgaW1wbGVtZW50YXRpb24gbmVlZHMgcmV3b3JrIGluIG1lbWRlc2Mgd29ybGQuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgdm9pZCBmcmVlX2hhc19od3BvaXNvbmVkKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBpbnQgb3JkZXIsXG4mIzQzO1x0XHRcdFx0ZnBpX3QgZnBpX2ZsYWdzKVxuJiM0Mzt7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBjdXJyID0gcGFnZV90b19wZm4ocGFnZSk7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBlbmRfcGZuID0gY3VyciAmIzQzOyAoMSBcdTAwM2NcdTAwM2Mgb3JkZXIpO1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgbmV4dDtcbiYjNDM7XHR1bnNpZ25lZCBsb25nIHRvdGFsX2ZyZWVkID0gMDtcbiYjNDM7XHR1bnNpZ25lZCBsb25nIHRvdGFsX2h3cCA9IDA7XG4mIzQzO1xuJiM0MztcdHdoaWxlIChjdXJyIFx1MDAzYyBlbmRfcGZuKSB7XG4mIzQzO1x0XHRuZXh0ID0gY3VycjtcbiYjNDM7XG4mIzQzO1x0XHR3aGlsZSAobmV4dCBcdTAwM2MgZW5kX3BmbiBcdTAwMjZcdTAwMjYgIVBhZ2VIV1BvaXNvbihwZm5fdG9fcGFnZShuZXh0KSkpXG4mIzQzO1x0XHRcdCYjNDM7JiM0MztuZXh0O1xuJiM0MztcbiYjNDM7XHRcdGlmIChuZXh0ICE9IGVuZF9wZm4pIHtcbiYjNDM7XHRcdFx0LypcbiYjNDM7XHRcdFx0ICogQXZvaWQgYWNjb3VudGluZyBlcnJvciB3aGVuIHRoZSBwYWdlIGlzIGZyZWVkXG4mIzQzO1x0XHRcdCAqIGJ5IHVucG9pc29uX21lbW9yeSgpLlxuJiM0MztcdFx0XHQgKi9cbiYjNDM7XHRcdFx0Y2xlYXJfcGFnZV90YWdfcmVmKHBmbl90b19wYWdlKG5leHQpKTtcbiYjNDM7XHRcdFx0JiM0MzsmIzQzO3RvdGFsX2h3cDtcbiYjNDM7XHRcdH1cbiYjNDM7XG4mIzQzO1x0XHRfX2ZyZWVfcHJlcGFyZWRfY29udGlnX3JhbmdlKHBmbl90b19wYWdlKGN1cnIpLCBuZXh0IC0gY3VycixcbiYjNDM7XHRcdFx0XHRcdCAgICAgZnBpX2ZsYWdzKTtcbiYjNDM7XHRcdHRvdGFsX2ZyZWVkICYjNDM7PSBuZXh0IC0gY3VycjtcbiYjNDM7XG4mIzQzO1x0XHRpZiAobmV4dCA9PSBlbmRfcGZuKVxuJiM0MztcdFx0XHRicmVhaztcbiYjNDM7XG4mIzQzO1x0XHRjdXJyID0gbmV4dCAmIzQzOyAxO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cHJfaW5mbyhcJiMzNDtGcmVlZCAlI2x4IHBhZ2VzLCBleGNsdWRlZCAlI2x4IEhXUG9pc29uIHBhZ2VzXFxuXCYjMzQ7LFxuJiM0MztcdFx0dG90YWxfZnJlZWQsIHRvdGFsX2h3cCk7XG4mIzQzO31cbiYjNDM7XG4gI2lmZGVmIENPTkZJR19DT05USUdfQUxMT0NcbiAvKiBVc2FnZTogU2VlIGFkbWluLWd1aWRlL2R5bmFtaWMtZGVidWctaG93dG8ucnN0ICovXG4gc3RhdGljIHZvaWQgYWxsb2NfY29udGlnX2R1bXBfcGFnZXMoc3RydWN0IGxpc3RfaGVhZCAqcGFnZV9saXN0KVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL21lbW9yeS1mYWlsdXJlLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9tZW1vcnktZmFpbHVyZS5jXG5pbmRleCAwMzJlZDk1MjA1N2M2Mi4uNzhjMTA1Y2UyYWYxODUgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9tZW1vcnktZmFpbHVyZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9tZW1vcnktZmFpbHVyZS5jXG5AQCAtMTgsNiAmIzQzOzE4LDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9tYWdpYy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjZXJybm8uaFx1MDAzZVxuIFxuJiM0MzsjaW5jbHVkZSBcJiMzNDtodWdlcGFnZV9zZXR0aW5ncy5oXCYjMzQ7XG4gI2luY2x1ZGUgXCYjMzQ7dm1fdXRpbC5oXCYjMzQ7XG4gXG4gZW51bSBpbmplY3RfdHlwZSB7XG5AQCAtMjcsNiAmIzQzOzI4LDcgQEAgZW51bSBpbmplY3RfdHlwZSB7XG4gXG4gZW51bSByZXN1bHRfdHlwZSB7XG4gXHRNQURWX0hBUkRfQU5PTixcbiYjNDM7XHRNQURWX0hBUkRfQU5PTl9IVUdFVExCLFxuIFx0TUFEVl9IQVJEX0NMRUFOX1BBR0VDQUNIRSxcbiBcdE1BRFZfSEFSRF9ESVJUWV9QQUdFQ0FDSEUsXG4gXHRNQURWX1NPRlRfQU5PTixcbkBAIC00Nyw2ICYjNDM7NDksOCBAQCBGSVhUVVJFKG1lbW9yeV9mYWlsdXJlKVxuIFx0aW50IHBhZ2VtYXBfZmQ7XG4gXHRpbnQga3BhZ2VmbGFnc19mZDtcbiBcdGJvb2wgdHJpZ2dlcmVkO1xuJiM0MztcdC8qIE51bWJlciBvZiBpbml0aWFsIEh1Z2VUTEIgcGFnZXMgd2l0aCBkZWZhdWx0IHBhZ2Ugc2l6ZS4gKi9cbiYjNDM7XHR1bnNpZ25lZCBsb25nIG5yX2h1Z2V0bGJfcGFnZXM7XG4gfTtcbiBcbiBGSVhUVVJFX1ZBUklBTlQobWVtb3J5X2ZhaWx1cmUpXG5AQCAtMTU3LDYgJiM0MzsxNjEsNyBAQCBzdGF0aWMgdm9pZCBjaGVjayhzdHJ1Y3QgX190ZXN0X21ldGFkYXRhICpfbWV0YWRhdGEsIEZJWFRVUkVfREFUQShtZW1vcnlfZmFpbHVyZVxuIFx0XHQgIHZvaWQgKnZhZGRyLCBlbnVtIHJlc3VsdF90eXBlIHR5cGUsIGludCBzZXRqbXApXG4ge1xuIFx0dW5zaWduZWQgbG9uZyBzaXplO1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgbnJfaHVnZXRsYl9wYWdlcztcbiBcdHVpbnQ2NF90IHBmbl9mbGFncztcbiBcbiBcdHN3aXRjaCAodHlwZSkge1xuQEAgLTE3NCw2ICYjNDM7MTc5LDcgQEAgc3RhdGljIHZvaWQgY2hlY2soc3RydWN0IF9fdGVzdF9tZXRhZGF0YSAqX21ldGFkYXRhLCBGSVhUVVJFX0RBVEEobWVtb3J5X2ZhaWx1cmVcbiBcdFx0QVNTRVJUX05FKHBhZ2VtYXBfZ2V0X3BmbihzZWxmLVx1MDAzZXBhZ2VtYXBfZmQsIHZhZGRyKSwgc2VsZi1cdTAwM2VwZm4pO1xuIFx0XHRicmVhaztcbiBcdGNhc2UgTUFEVl9IQVJEX0FOT046XG4mIzQzO1x0Y2FzZSBNQURWX0hBUkRfQU5PTl9IVUdFVExCOlxuIFx0Y2FzZSBNQURWX0hBUkRfRElSVFlfUEFHRUNBQ0hFOlxuIFx0XHQvKiBUaGUgU0lHQlVTIHNpZ25hbCBzaG91bGQgaGF2ZSBiZWVuIHJlY2VpdmVkLiAqL1xuIFx0XHRBU1NFUlRfRVEoc2V0am1wLCAxKTtcbkBAIC0xODQsOCAmIzQzOzE5MCwxNSBAQCBzdGF0aWMgdm9pZCBjaGVjayhzdHJ1Y3QgX190ZXN0X21ldGFkYXRhICpfbWV0YWRhdGEsIEZJWFRVUkVfREFUQShtZW1vcnlfZmFpbHVyZVxuIFx0XHRBU1NFUlRfRVEoMVVMIFx1MDAzY1x1MDAzYyBzaWdpbmZvLnNpX2FkZHJfbHNiLCBzZWxmLVx1MDAzZXBhZ2Vfc2l6ZSk7XG4gXHRcdEFTU0VSVF9FUShzaWdpbmZvLnNpX2FkZHIsIHZhZGRyKTtcbiBcbi1cdFx0LyogWFhYIENoZWNrIGJhY2tpbmcgcHRlIGlzIGh3cG9pc29uIGVudHJ5IHdoZW4gc3VwcG9ydGVkLiAqL1xuLVx0XHRBU1NFUlRfVFJVRShwYWdlbWFwX2lzX3N3YXBwZWQoc2VsZi1cdTAwM2VwYWdlbWFwX2ZkLCB2YWRkcikpO1xuJiM0MztcdFx0aWYgKHR5cGUgIT0gTUFEVl9IQVJEX0FOT05fSFVHRVRMQilcbiYjNDM7XHRcdFx0LypcbiYjNDM7XHRcdFx0ICogQ2hlY2sgYmFja2luZyBwdGUgaXMgaHdwb2lzb24gZW50cnkgd2hlbiBzdXBwb3J0ZWQuXG4mIzQzO1x0XHRcdCAqIEFsdGhvdWdoIHRyeV90b191bm1hcF9vbmUoKSBhbHNvIGluc3RhbGxzIGh3cG9pc29uXG4mIzQzO1x0XHRcdCAqIGVudHJ5IGZvciBIdWdlVExCLCBwYWdlbWFwX2h1Z2V0bGJfcmFuZ2UoKSBkb2VzbiYjMzk7dFxuJiM0MztcdFx0XHQgKiBwYXJzZSBzd2FwIGVudHJpZXMgYXQgYWxsLlxuJiM0MztcdFx0XHQgKi9cbiYjNDM7XHRcdFx0QVNTRVJUX1RSVUUocGFnZW1hcF9pc19zd2FwcGVkKHNlbGYtXHUwMDNlcGFnZW1hcF9mZCwgdmFkZHIpKTtcbiYjNDM7XG4gXHRcdGJyZWFrO1xuIFx0ZGVmYXVsdDpcbiBcdFx0U0tJUChyZXR1cm4sIFwmIzM0O3VuZXhwZWN0ZWQgaW5qZWN0IHR5cGUgJWQuXFxuXCYjMzQ7LCB0eXBlKTtcbkBAIC0xOTMsNyAmIzQzOzIwNiwxOSBAQCBzdGF0aWMgdm9pZCBjaGVjayhzdHJ1Y3QgX190ZXN0X21ldGFkYXRhICpfbWV0YWRhdGEsIEZJWFRVUkVfREFUQShtZW1vcnlfZmFpbHVyZVxuIFxuIFx0LyogQ2hlY2sgaWYgdGhlIHZhbHVlIG9mIEhhcmR3YXJlQ29ycnVwdGVkIGhhcyBpbmNyZWFzZWQuICovXG4gXHRBU1NFUlRfRVEoZ2V0X2hhcmR3YXJlX2NvcnJ1cHRlZF9zaXplKFx1MDAyNnNpemUpLCAwKTtcbi1cdEFTU0VSVF9FUShzaXplLCBzZWxmLVx1MDAzZWNvcnJ1cHRlZF9zaXplICYjNDM7IHNlbGYtXHUwMDNlcGFnZV9zaXplIC8gMTAyNCk7XG4mIzQzO1xuJiM0MztcdGlmICh0eXBlID09IE1BRFZfSEFSRF9BTk9OX0hVR0VUTEIpIHtcbiYjNDM7XHRcdC8qXG4mIzQzO1x0XHQgKiBPbmx5IG9uZSBwYWdlIGlzIGhhcmR3YXJlIGNvcnJ1cHRlZDsgdGhlIHJlc3Qgc2hvdWxkIGFsbCBiZVxuJiM0MztcdFx0ICogcmVsZWFzZWQgdG8gYnVkZHkgYWxsb2NhdG9yLlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRBU1NFUlRfRVEoc2l6ZSwgc2VsZi1cdTAwM2Vjb3JydXB0ZWRfc2l6ZSAmIzQzOyBnZXRwYWdlc2l6ZSgpIC8gMTAyNCk7XG4mIzQzO1x0XHQvKiBIdWdlVExCIHNob3VsZCBoYXZlIGxvc3QgdGhlIEhXUG9pc29uIEh1Z2VUTEIgcGFnZS4gKi9cbiYjNDM7XHRcdG5yX2h1Z2V0bGJfcGFnZXMgPSBodWdldGxiX25yX2RlZmF1bHRfcGFnZXMoKTtcbiYjNDM7XHRcdEFTU0VSVF9FUShucl9odWdldGxiX3BhZ2VzICYjNDM7IDEsIHNlbGYtXHUwMDNlbnJfaHVnZXRsYl9wYWdlcyk7XG4mIzQzO1x0fSBlbHNlIHtcbiYjNDM7XHRcdEFTU0VSVF9FUShzaXplLCBzZWxmLVx1MDAzZWNvcnJ1cHRlZF9zaXplICYjNDM7IHNlbGYtXHUwMDNlcGFnZV9zaXplIC8gMTAyNCk7XG4mIzQzO1x0fVxuIFxuIFx0LyogQ2hlY2sgaWYgSFdQb2lzb24gZmxhZyBpcyBzZXQuICovXG4gXHRBU1NFUlRfRVEocGFnZWZsYWdzX2dldChzZWxmLVx1MDAzZXBmbiwgc2VsZi1cdTAwM2VrcGFnZWZsYWdzX2ZkLCBcdTAwMjZwZm5fZmxhZ3MpLCAwKTtcbkBAIC0yNDcsNiAmIzQzOzI3Miw0NSBAQCBURVNUX0YobWVtb3J5X2ZhaWx1cmUsIGFub24pXG4gXHRBU1NFUlRfRVEobXVubWFwKGFkZHIsIHNlbGYtXHUwMDNlcGFnZV9zaXplKSwgMCk7XG4gfVxuIFxuJiM0MztURVNUX0YobWVtb3J5X2ZhaWx1cmUsIGFub25faHVnZXRsYilcbiYjNDM7e1xuJiM0MztcdGNoYXIgKmFkZHI7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XHRjb25zdCB1bnNpZ25lZCBsb25nIG5yX2FsbG9jX2h1Z2V0bGJfcGFnZXMgPSA0O1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgYWxsb2Nfc2l6ZTtcbiYjNDM7XG4mIzQzO1x0aWYgKHZhcmlhbnQtXHUwMDNldHlwZSA9PSBNQURWX1NPRlQpXG4mIzQzO1x0XHRTS0lQKHJldHVybiwgXCYjMzQ7U29mdCBvZmZsaW5lIHRlc3QgaXMgbm90IGltcGxlbWVudGVkXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO1x0LyogSHVnZVRMQiBzZXR0aW5ncyB3aWxsIGJlIGF1dG9tYXRpY2FsbHkgcmVzdG9yZWQgd2hlbiB0ZXN0IGV4aXRzLiAqL1xuJiM0MztcdGh1Z2V0bGJfc2V0dXBfZGVmYXVsdChucl9hbGxvY19odWdldGxiX3BhZ2VzKTtcbiYjNDM7XG4mIzQzO1x0YWxsb2Nfc2l6ZSA9IGRlZmF1bHRfaHVnZV9wYWdlX3NpemUoKSAqIG5yX2FsbG9jX2h1Z2V0bGJfcGFnZXM7XG4mIzQzO1x0c2VsZi1cdTAwM2VwYWdlX3NpemUgPSBkZWZhdWx0X2h1Z2VfcGFnZV9zaXplKCk7XG4mIzQzO1x0c2VsZi1cdTAwM2Vucl9odWdldGxiX3BhZ2VzID0gaHVnZXRsYl9ucl9kZWZhdWx0X3BhZ2VzKCk7XG4mIzQzO1xuJiM0MztcdGFkZHIgPSBtbWFwKDAsIGFsbG9jX3NpemUsIFBST1RfUkVBRCB8IFBST1RfV1JJVEUsXG4mIzQzO1x0XHQgICAgTUFQX0FOT05ZTU9VUyB8IE1BUF9QUklWQVRFIHwgTUFQX0hVR0VUTEIsIC0xLCAwKTtcbiYjNDM7XHRpZiAoYWRkciA9PSBNQVBfRkFJTEVEKVxuJiM0MztcdFx0U0tJUChyZXR1cm4sIFwmIzM0O21tYXAgZmFpbGVkLCBub3QgZW5vdWdoIG1lbW9yeSBvciBodWdldGxiIG5vdCBzdXBwb3J0ZWQuXFxuXCYjMzQ7KTtcbiYjNDM7XHRtZW1zZXQoYWRkciwgMHhjZSwgYWxsb2Nfc2l6ZSk7XG4mIzQzO1xuJiM0MztcdHByZXBhcmUoX21ldGFkYXRhLCBzZWxmLCBhZGRyKTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gc2lnc2V0am1wKHNpZ25hbF9qbXBfYnVmLCAxKTtcbiYjNDM7XHRpZiAoIXNlbGYtXHUwMDNldHJpZ2dlcmVkKSB7XG4mIzQzO1x0XHRzZWxmLVx1MDAzZXRyaWdnZXJlZCA9IHRydWU7XG4mIzQzO1x0XHRBU1NFUlRfRVEodmFyaWFudC1cdTAwM2VpbmplY3Qoc2VsZiwgYWRkciksIDApO1xuJiM0MztcdFx0Rk9SQ0VfUkVBRCgqYWRkcik7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRjaGVjayhfbWV0YWRhdGEsIHNlbGYsIGFkZHIsIE1BRFZfSEFSRF9BTk9OX0hVR0VUTEIsIHJldCk7XG4mIzQzO1xuJiM0MztcdGNsZWFudXAoX21ldGFkYXRhLCBzZWxmLCBhZGRyKTtcbiYjNDM7XG4mIzQzO1x0QVNTRVJUX0VRKG11bm1hcChhZGRyLCBhbGxvY19zaXplKSwgMCk7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIGludCBwcmVwYXJlX2ZpbGUoY29uc3QgY2hhciAqZm5hbWUsIHVuc2lnbmVkIGxvbmcgc2l6ZSlcbiB7XG4gXHRpbnQgZmQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDUgMTg6MjE8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TUVNT1JZX0ZBSUxVUkUmIzM0OywKICAgICYjMzQ7SFVHRVRMQkZTJiMzNDssCiAgICAmIzM0O1RSQU5TUEFSRU5UX0hVR0VQQUdFJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7X19odWdlcGFnZV9oYW5kbGVfcG9pc29uJiMzNDssCiAgICAmIzM0O2ZyZWVfaGFzX2h3cG9pc29uZWQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgbWVtb3J5IGZhaWx1cmUgaGFuZGxpbmcgZm9yIEh1Z2VUTEIgcGFnZXMsIGVuc3VyaW5nIHRoYXQgaGVhbHRoeSBzdWJwYWdlcyBvZiBhIGNvbXBvdW5kIHBhZ2Ugd2l0aCBoYXJkd2FyZSBwb2lzb25lZCBzdWJwYWdlcyBhcmUgY29ycmVjdGx5IGZyZWVkIHRvIHRoZSBidWRkeSBhbGxvY2F0b3IsIHdoaWxlIGlzb2xhdGluZyB0aGUgcG9pc29uZWQgb25lcy4gVGhpcyBpbnZvbHZlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gY29yZSBNTSBhbmQgcGFnZSBhbGxvY2F0b3IgbG9naWMsIHNwZWNpZmljYWxseSBpbiBtbS9tZW1vcnktZmFpbHVyZS5jIGFuZCBtbS9wYWdlX2FsbG9jLmMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0CiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSwKICAgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDk3NzU0NWM5ODk1NjkxM2UwMjZkMzRmNTI1Mjk5YWI5NzkwNmNjZmIKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgU3VuIEp1bCA1IDE4OjIxOjIzIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmggYi9pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaAppbmRleCA3YTg2MzU3MmFkY2U3OS4uM2NkNTI0ZTA0YTMwYmIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oCkBAIC04NzksNyAmIzQzOzg3OSw3IEBAIEZPTElPX0ZMQUdfRkFMU0UocGFydGlhbGx5X21hcHBlZCkKIAogI2RlZmluZSBQR19oZWFkX21hc2sgKCgxVUwgJmx0OyZsdDsgUEdfaGVhZCkpCiAKLSNpZiBkZWZpbmVkKENPTkZJR19NRU1PUllfRkFJTFVSRSkgJmFtcDsmYW1wOyBkZWZpbmVkKENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSkKJiM0MzsjaWYgZGVmaW5lZChDT05GSUdfTUVNT1JZX0ZBSUxVUkUpICZhbXA7JmFtcDsgKGRlZmluZWQoQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFKSB8fCBkZWZpbmVkKENPTkZJR19IVUdFVExCX1BBR0UpKQogLyoKICAqIFBhZ2VIYXNIV1BvaXNvbmVkIGluZGljYXRlcyB0aGF0IGF0IGxlYXN0IG9uZSBzdWJwYWdlIGlzIGh3cG9pc29uZWQgaW4gdGhlCiAgKiBjb21wb3VuZCBwYWdlLgpkaWZmIC0tZ2l0IGEvbW0vbWVtb3J5LWZhaWx1cmUuYyBiL21tL21lbW9yeS1mYWlsdXJlLmMKaW5kZXggNDkxNmFiMTQ1MzI1NzMuLmEzN2I2NzU1MDcxODI3IDEwMDY0NAotLS0gYS9tbS9tZW1vcnktZmFpbHVyZS5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL21lbW9yeS1mYWlsdXJlLmMKQEAgLTE3NCw2ICYjNDM7MTc0LDMwIEBAIHN0YXRpYyBzdHJ1Y3QgcmJfcm9vdF9jYWNoZWQgcGZuX3NwYWNlX2l0cmVlID0gUkJfUk9PVF9DQUNIRUQ7CiBzdGF0aWMgREVGSU5FX01VVEVYKHBmbl9zcGFjZV9sb2NrKTsKIAogLyoKJiM0MzsgKiBPbmx5IGZvciBhIEh1Z2VUTEIgcGFnZSBiZWluZyBoYW5kbGVkIGJ5IG1lbW9yeV9mYWlsdXJlKCkuIFRoZSBrZXkKJiM0MzsgKiBkaWZmZXJlbmNlIHRvIHNvZnRfb2ZmbGluZSgpIGlzIHRoYXQsIG5vIEhXUG9pc29uIHN1YnBhZ2Ugd2lsbCBtYWtlCiYjNDM7ICogaW50byBidWRkeSBhbGxvY2F0b3IgYWZ0ZXIgYSBzdWNjZXNzZnVsIGRpc3NvbHZlX2ZyZWVfaHVnZXRsYl9mb2xpbygpLAomIzQzOyAqIHNvIHRha2VfcGFnZV9vZmZfYnVkZHkoKSBpcyB1bm5lY2Vzc2FyeS4KJiM0MzsgKi8KJiM0MztzdGF0aWMgaW50IF9faHVnZXBhZ2VfaGFuZGxlX3BvaXNvbihzdHJ1Y3QgcGFnZSAqcGFnZSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBmb2xpbyAqZm9saW8gPSBwYWdlX2ZvbGlvKHBhZ2UpOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBDYW4mIzM5O3QgdXNlIGRpc3NvbHZlX2ZyZWVfaHVnZXRsYl9mb2xpbygpIHdpdGhvdXQgYSByZWxpYWJsZQomIzQzOwkgKiByYXdfaHdwX2xpc3QgdGVsbGluZyB3aGljaCBzdWJwYWdlIGlzIEhXUG9pc29uLiBTbyBkbyBub3QgZnJlZQomIzQzOwkgKiB0aGVtIHRvIHRoZSBidWRkeSBhbGxvY2F0b3IuIGRlcXVldWVfaHVnZXRsYl9mb2xpb19ub2RlX2V4YWN0KCkKJiM0MzsJICogd2lsbCBlbnN1cmUgdG8gbmV2ZXIgcmUtYWxsb2NhdGUgdGhpcyBodWdlcGFnZS4KJiM0MzsJICovCiYjNDM7CWlmIChmb2xpb190ZXN0X2h1Z2V0bGJfcmF3X2h3cF91bnJlbGlhYmxlKGZvbGlvKSkKJiM0MzsJCS8qIHJhd19od3BfbGlzdCBiZWNvbWVzIHVucmVsaWFibGUgd2hlbiBrbWFsbG9jKCkgZmFpbHMuICovCiYjNDM7CQlyZXR1cm4gLUVOT01FTTsKJiM0MzsKJiM0MzsJcmV0dXJuIGRpc3NvbHZlX2ZyZWVfaHVnZXRsYl9mb2xpbyhmb2xpbyk7CiYjNDM7fQomIzQzOwomIzQzOy8qCiYjNDM7ICogT25seSBmb3IgYSBmcmVlIG9yIEh1Z2VUTEIgcGFnZSBiZWluZyBoYW5kbGVkIGJ5IHNvZnRfb2ZmbGluZSgpLgogICogUmV0dXJuIHZhbHVlczoKICAqICAgMTogICB0aGUgcGFnZSBpcyBkaXNzb2x2ZWQgKGlmIG5lZWRlZCkgYW5kIHRha2VuIG9mZiBmcm9tIGJ1ZGR5LAogICogICAwOiAgIHRoZSBwYWdlIGlzIGRpc3NvbHZlZCAoaWYgbmVlZGVkKSBhbmQgbm90IHRha2VuIG9mZiBmcm9tIGJ1ZGR5LApAQCAtMTE2NiwxMSAmIzQzOzExOTAsMTEgQEAgc3RhdGljIGludCBtZV9odWdlX3BhZ2Uoc3RydWN0IHBhZ2Vfc3RhdGUgKnBzLCBzdHJ1Y3QgcGFnZSAqcCkKIAkJICogc3VicGFnZXMuCiAJCSAqLwogCQlmb2xpb19wdXQoZm9saW8pOwotCQlpZiAoX19wYWdlX2hhbmRsZV9wb2lzb24ocCkgJmd0OyAwKSB7CiYjNDM7CQlpZiAoX19odWdlcGFnZV9oYW5kbGVfcG9pc29uKHApKSB7CiYjNDM7CQkJcmVzID0gTUZfRkFJTEVEOwomIzQzOwkJfSBlbHNlIHsKIAkJCXBhZ2VfcmVmX2luYyhwKTsKIAkJCXJlcyA9IE1GX1JFQ09WRVJFRDsKLQkJfSBlbHNlIHsKLQkJCXJlcyA9IE1GX0ZBSUxFRDsKIAkJfQogCX0KIApAQCAtMjAwOCw2ICYjNDM7MjAzMiw3IEBAIHZvaWQgZm9saW9fY2xlYXJfaHVnZXRsYl9od3BvaXNvbihzdHJ1Y3QgZm9saW8gKmZvbGlvKQogCWlmIChmb2xpb190ZXN0X2h1Z2V0bGJfdm1lbW1hcF9vcHRpbWl6ZWQoZm9saW8pKQogCQlyZXR1cm47CiAJZm9saW9fY2xlYXJfaHdwb2lzb24oZm9saW8pOwomIzQzOwlmb2xpb19zZXRfaGFzX2h3cG9pc29uZWQoZm9saW8pOwogCWZvbGlvX2ZyZWVfcmF3X2h3cChmb2xpbywgdHJ1ZSk7CiB9CiAKQEAgLTIxMzIsMTEgJiM0MzsyMTU3LDExIEBAIHN0YXRpYyBpbnQgdHJ5X21lbW9yeV9mYWlsdXJlX2h1Z2V0bGIodW5zaWduZWQgbG9uZyBwZm4sIGludCBmbGFncykKIAkgKi8KIAlpZiAocmVzID09IE1GX0hVR0VUTEJfRlJFRUQpIHsKIAkJZm9saW9fdW5sb2NrKGZvbGlvKTsKLQkJaWYgKF9fcGFnZV9oYW5kbGVfcG9pc29uKHApICZndDsgMCkgewomIzQzOwkJaWYgKF9faHVnZXBhZ2VfaGFuZGxlX3BvaXNvbihwKSkgewomIzQzOwkJCXJlcyA9IE1GX0ZBSUxFRDsKJiM0MzsJCX0gZWxzZSB7CiAJCQlwYWdlX3JlZl9pbmMocCk7CiAJCQlyZXMgPSBNRl9SRUNPVkVSRUQ7Ci0JCX0gZWxzZSB7Ci0JCQlyZXMgPSBNRl9GQUlMRUQ7CiAJCX0KIAkJcmV0dXJuIGFjdGlvbl9yZXN1bHQocGZuLCBNRl9NU0dfRlJFRV9IVUdFLCByZXMpOwogCX0KZGlmZiAtLWdpdCBhL21tL3BhZ2VfYWxsb2MuYyBiL21tL3BhZ2VfYWxsb2MuYwppbmRleCA3NjJkOWI2YmM3OTJmMS4uNjQxODg5NmM5ZGY2NjAgMTAwNjQ0Ci0tLSBhL21tL3BhZ2VfYWxsb2MuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9wYWdlX2FsbG9jLmMKQEAgLTkzLDYgJiM0Mzs5MywxMyBAQCB0eXBlZGVmIGludCBfX2JpdHdpc2UgZnBpX3Q7CiAvKiBmcmVlX3BhZ2VzX3ByZXBhcmUoKSBoYXMgYWxyZWFkeSBiZWVuIGNhbGxlZCBmb3IgcGFnZShzKSBiZWluZyBmcmVlZC4gKi8KICNkZWZpbmUgRlBJX1BSRVBBUkVECQkoKF9fZm9yY2UgZnBpX3QpQklUKDMpKQogCiYjNDM7LyoKJiM0MzsgKiBQYWdlKHMpIG5lZWRzIHRvIGdvIHRocm91Z2ggZnJlZV9wYWdlc19zYW5pdGl6ZSgpLCBmb3IgZXhhbXBsZSwgYmVjYXVzZQomIzQzOyAqIGZyZWVfcGFnZXNfcHJlcGFyZSgpIGNhbm5vdCBzYW5pdGl6ZSBhIGhpZ2gtb3JkZXIgcGFnZSBibG9jayBkdWUgdG8KJiM0MzsgKiBoYXJkd2FyZSBlcnJvciBpbiBzb21lIHBhZ2UocykuCiYjNDM7ICovCiYjNDM7I2RlZmluZSBGUElfU0FOSVRJWkUJCSgoX19mb3JjZSBmcGlfdClCSVQoNCkpCiYjNDM7CiAvKiBwcmV2ZW50ICZndDsxIF91cGRhdGVyXyBvZiB6b25lIHBlcmNwdSBwYWdlc2V0IC0mZ3Q7aGlnaCBhbmQgLSZndDtiYXRjaCBmaWVsZHMgKi8KIHN0YXRpYyBERUZJTkVfTVVURVgocGNwX2JhdGNoX2hpZ2hfbG9jayk7CiAjZGVmaW5lIE1JTl9QRVJDUFVfUEFHRUxJU1RfSElHSF9GUkFDVElPTiAoOCkKQEAgLTIxMCw2ICYjNDM7MjE3LDggQEAgZ2ZwX3QgZ2ZwX2FsbG93ZWRfbWFzayBfX3JlYWRfbW9zdGx5ID0gR0ZQX0JPT1RfTUFTSzsKIHVuc2lnbmVkIGludCBwYWdlYmxvY2tfb3JkZXIgX19yZWFkX21vc3RseTsKICNlbmRpZgogCiYjNDM7c3RhdGljIHZvaWQgZnJlZV9oYXNfaHdwb2lzb25lZChzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgaW50IG9yZGVyLAomIzQzOwkJCQlmcGlfdCBmcGlfZmxhZ3MpOwogc3RhdGljIHZvaWQgX19mcmVlX3BhZ2VzX29rKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBpbnQgb3JkZXIsCiAJCQkgICAgZnBpX3QgZnBpX2ZsYWdzKTsKIHN0YXRpYyB2b2lkIHJlc2VydmVfaGlnaGF0b21pY19wYWdlYmxvY2soc3RydWN0IHBhZ2UgKnBhZ2UsIGludCBvcmRlciwKQEAgLTEzMTEsMTQgJiM0MzsxMzIwLDczIEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBwZ2FsbG9jX3RhZ19zdWJfcGFnZXMoc3RydWN0IGFsbG9jX3RhZyAqdGFnLCB1bnNpZ25lZCBpbnQgbnIpCiAKICNlbmRpZiAvKiBDT05GSUdfTUVNX0FMTE9DX1BST0ZJTElORyAqLwogCiYjNDM7LyoKJiM0MzsgKiBTYW5pdGl6ZSwgd2hpY2ggcmVxdWlyZXMgd3JpdGluZywgYSBibG9jayBvZiBwYWdlcyBhdCB0aGUgbGFzdCBtb21lbnQgb2YKJiM0MzsgKiBwcmVwYXJpbmcgdG8gZnJlZWluZyB0aGVtLCBpLmUuIF9fZnJlZV9wYWdlc19wcmVwYXJlKCkuCiYjNDM7ICovCiYjNDM7c3RhdGljIHZvaWQgZnJlZV9wYWdlc19zYW5pdGl6ZShzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgaW50IG9yZGVyKQomIzQzO3sKJiM0MzsJYm9vbCBpbml0ID0gd2FudF9pbml0X29uX2ZyZWUoKTsKJiM0MzsJLyoKJiM0MzsJICogX19rYXNhbl91bnBvaXNvbl9wYWdlcygpIHNldHMga2FzYW4gdGFnIG9uIGV2ZXJ5IHRhaWwgcGFnZSwgc28KJiM0MzsJICogaXQgaXMgZmluZSB0byB1c2Ugc2hvdWxkX3NraXBfa2FzYW5fcG9pc29uKCkgd2hlbiBwYWdlcyBoZXJlCiYjNDM7CSAqIHdlcmUgYSBzZXQgb2YgdGFpbCBwYWdlcyBmcm9tIGEgY29tcG91bmQgZm9saW8uCiYjNDM7CSAqLwomIzQzOwlib29sIHNraXBfa2FzYW5fcG9pc29uID0gc2hvdWxkX3NraXBfa2FzYW5fcG9pc29uKHBhZ2UpOwomIzQzOwomIzQzOwlrZXJuZWxfcG9pc29uX3BhZ2VzKHBhZ2UsIDEgJmx0OyZsdDsgb3JkZXIpOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBBcyBtZW1vcnkgaW5pdGlhbGl6YXRpb24gbWlnaHQgYmUgaW50ZWdyYXRlZCBpbnRvIEtBU0FOLAomIzQzOwkgKiBLQVNBTiBwb2lzb25pbmcgYW5kIG1lbW9yeSBpbml0aWFsaXphdGlvbiBjb2RlIG11c3QgYmUKJiM0MzsJICoga2VwdCB0b2dldGhlciB0byBhdm9pZCBkaXNjcmVwYW5jaWVzIGluIGJlaGF2aW9yLgomIzQzOwkgKgomIzQzOwkgKiBXaXRoIGhhcmR3YXJlIHRhZy1iYXNlZCBLQVNBTiwgbWVtb3J5IHRhZ3MgbXVzdCBiZSBzZXQgYmVmb3JlIHRoZQomIzQzOwkgKiBwYWdlIGJlY29tZXMgdW5hdmFpbGFibGUgdmlhIGRlYnVnX3BhZ2VhbGxvYyBvciBhcmNoX2ZyZWVfcGFnZS4KJiM0MzsJICovCiYjNDM7CWlmICghc2tpcF9rYXNhbl9wb2lzb24pIHsKJiM0MzsJCWthc2FuX3BvaXNvbl9wYWdlcyhwYWdlLCBvcmRlciwgaW5pdCk7CiYjNDM7CiYjNDM7CQkvKiBNZW1vcnkgaXMgYWxyZWFkeSBpbml0aWFsaXplZCBpZiBLQVNBTiBkaWQgaXQgaW50ZXJuYWxseS4gKi8KJiM0MzsJCWlmIChrYXNhbl9oYXNfaW50ZWdyYXRlZF9pbml0KCkpCiYjNDM7CQkJaW5pdCA9IGZhbHNlOwomIzQzOwl9CiYjNDM7CWlmIChpbml0KQomIzQzOwkJY2xlYXJfaGlnaHBhZ2VzX2thc2FuX3RhZ2dlZChwYWdlLCAxICZsdDsmbHQ7IG9yZGVyKTsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogYXJjaF9mcmVlX3BhZ2UoKSBjYW4gbWFrZSB0aGUgcGFnZSYjMzk7cyBjb250ZW50cyBpbmFjY2Vzc2libGUuICBzMzkwCiYjNDM7CSAqIGRvZXMgdGhpcy4gIFNvIG5vdGhpbmcgd2hpY2ggY2FuIGFjY2VzcyB0aGUgcGFnZSYjMzk7cyBjb250ZW50cyBzaG91bGQKJiM0MzsJICogaGFwcGVuIGFmdGVyIHRoaXMuCiYjNDM7CSAqLwomIzQzOwlhcmNoX2ZyZWVfcGFnZShwYWdlLCBvcmRlcik7CiYjNDM7CiYjNDM7CWRlYnVnX3BhZ2VhbGxvY191bm1hcF9wYWdlcyhwYWdlLCAxICZsdDsmbHQ7IG9yZGVyKTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBSZXR1cm5zCiYjNDM7ICogLSB0cnVlOiBjaGVja3MgYW5kIHByZXBhcmF0aW9ucyBhbGwgZ29vZCwgY2FsbGVyIGNhbiBwcm9jZWVkIGZyZWVpbmcuCiYjNDM7ICogLSBmYWxzZTogZG8gbm90IHByb2NlZWQgZnJlZWluZyBmb3Igb25lIG9mIHRoZSBmb2xsb3dpbmcgcmVhc29uczoKJiM0MzsgKiAgIDEuIFNvbWUgY2hlY2sgZmFpbGVkIHNvIGl0IGlzIG5vdCBzYWZlIHRvIHByb2NlZWQgZnJlZWluZy4KJiM0MzsgKiAgIDIuIEEgY29tcG91bmQgcGFnZSBoYXMgc29tZSBIV1BvaXNvbiBwYWdlcy4gVGhlIGhlYWx0aHkgcGFnZXMKJiM0MzsgKiAgICAgIGFyZSBhbHJlYWR5IHNhZmVseSBmcmVlZCwgYW5kIHRoZSBIV1BvaXNvbiBvbmVzIGlzb2xhdGVkLgomIzQzOyAqLwogc3RhdGljIF9fYWx3YXlzX2lubGluZSBib29sIF9fZnJlZV9wYWdlc19wcmVwYXJlKHN0cnVjdCBwYWdlICpwYWdlLAogCQl1bnNpZ25lZCBpbnQgb3JkZXIsIGZwaV90IGZwaV9mbGFncykKIHsKIAlpbnQgYmFkID0gMDsKLQlib29sIHNraXBfa2FzYW5fcG9pc29uID0gc2hvdWxkX3NraXBfa2FzYW5fcG9pc29uKHBhZ2UpOwotCWJvb2wgaW5pdCA9IHdhbnRfaW5pdF9vbl9mcmVlKCk7CiAJYm9vbCBjb21wb3VuZCA9IFBhZ2VDb21wb3VuZChwYWdlKTsKIAlzdHJ1Y3QgZm9saW8gKmZvbGlvID0gcGFnZV9mb2xpbyhwYWdlKTsKJiM0MzsJLyoKJiM0MzsJICogV2hlbiBkZWFsaW5nIHdpdGggY29tcG91bmQgcGFnZSwgUEdfaGFzX2h3cG9pc29uZWQgaXMgY2xlYXJlZAomIzQzOwkgKiB3aXRoIFBBR0VfRkxBR1NfU0VDT05ELiBTbyB0aGUgY2hlY2sgbXVzdCBiZSBkb25lIGZpcnN0LgomIzQzOwkgKgomIzQzOwkgKiBOb3RlIHdlIGNhbiYjMzk7dCBleGNsdWRlIFBHX2hhc19od3BvaXNvbmVkIGZyb20gUEFHRV9GTEFHU19TRUNPTkQuCiYjNDM7CSAqIEJlY2F1c2UgUEdfaGFzX2h3cG9pc29uZWQgPT0gUEdfYWN0aXZlLCBmcmVlX3BhZ2VfaXNfYmFkKCkgd2lsbAomIzQzOwkgKiBjb25mdXNlIGFuZCBjb21wbGFpbnQgdGhhdCB0aGUgZmlyc3QgdGFpbCBwYWdlIGlzIHN0aWxsIGFjdGl2ZS4KJiM0MzsJICovCiYjNDM7CWJvb2wgc2hvdWxkX2ZoaCA9IGNvbXBvdW5kICZhbXA7JmFtcDsgZm9saW9fdGVzdF9oYXNfaHdwb2lzb25lZChmb2xpbyk7CiAKIAlpZiAoZnBpX2ZsYWdzICZhbXA7IEZQSV9QUkVQQVJFRCkKIAkJcmV0dXJuIHRydWU7CkBAIC0xNDE2LDM0ICYjNDM7MTQ4NCwxOSBAQCBzdGF0aWMgX19hbHdheXNfaW5saW5lIGJvb2wgX19mcmVlX3BhZ2VzX3ByZXBhcmUoc3RydWN0IHBhZ2UgKnBhZ2UsCiAJCQkJCSAgIFBBR0VfU0laRSAmbHQ7Jmx0OyBvcmRlcik7CiAJfQogCi0Ja2VybmVsX3BvaXNvbl9wYWdlcyhwYWdlLCAxICZsdDsmbHQ7IG9yZGVyKTsKLQogCS8qCi0JICogQXMgbWVtb3J5IGluaXRpYWxpemF0aW9uIG1pZ2h0IGJlIGludGVncmF0ZWQgaW50byBLQVNBTiwKLQkgKiBLQVNBTiBwb2lzb25pbmcgYW5kIG1lbW9yeSBpbml0aWFsaXphdGlvbiBjb2RlIG11c3QgYmUKLQkgKiBrZXB0IHRvZ2V0aGVyIHRvIGF2b2lkIGRpc2NyZXBhbmNpZXMgaW4gYmVoYXZpb3IuCiYjNDM7CSAqIEFmdGVyIGJyZWFraW5nIGRvd24gY29tcG91bmQgcGFnZSBhbmQgZGVhbGluZyB3aXRoIHBhZ2UgbWV0YWRhdGEKJiM0MzsJICogKGUuZy4gcGFnZSBvd25lciBhbmQgcGFnZSBhbGxvYyB0YWdzKSwgdGFrZSBhIHNob3J0Y3V0IGlmIHRoaXMKJiM0MzsJICogd2FzIGEgY29tcG91bmQgcGFnZSBjb250YWluaW5nIGNlcnRhaW4gSFdQb2lzb24gc3VicGFnZXMuCiAJICoKLQkgKiBXaXRoIGhhcmR3YXJlIHRhZy1iYXNlZCBLQVNBTiwgbWVtb3J5IHRhZ3MgbXVzdCBiZSBzZXQgYmVmb3JlIHRoZQotCSAqIHBhZ2UgYmVjb21lcyB1bmF2YWlsYWJsZSB2aWEgZGVidWdfcGFnZWFsbG9jIG9yIGFyY2hfZnJlZV9wYWdlLgomIzQzOwkgKiBGUElfU0FOSVRJWkUgdG8gcmVtZW1iZXIgZnJlZV9wYWdlc19zYW5pdGl6ZSgpIGhlYWx0aHkgcGFnZXMuCiAJICovCi0JaWYgKCFza2lwX2thc2FuX3BvaXNvbikgewotCQlrYXNhbl9wb2lzb25fcGFnZXMocGFnZSwgb3JkZXIsIGluaXQpOwotCi0JCS8qIE1lbW9yeSBpcyBhbHJlYWR5IGluaXRpYWxpemVkIGlmIEtBU0FOIGRpZCBpdCBpbnRlcm5hbGx5LiAqLwotCQlpZiAoa2FzYW5faGFzX2ludGVncmF0ZWRfaW5pdCgpKQotCQkJaW5pdCA9IGZhbHNlOwomIzQzOwlpZiAoc2hvdWxkX2ZoaCkgewomIzQzOwkJZnJlZV9oYXNfaHdwb2lzb25lZChwYWdlLCBvcmRlciwgZnBpX2ZsYWdzIHwgRlBJX1NBTklUSVpFKTsKJiM0MzsJCXJldHVybiBmYWxzZTsKIAl9Ci0JaWYgKGluaXQpCi0JCWNsZWFyX2hpZ2hwYWdlc19rYXNhbl90YWdnZWQocGFnZSwgMSAmbHQ7Jmx0OyBvcmRlcik7Ci0KLQkvKgotCSAqIGFyY2hfZnJlZV9wYWdlKCkgY2FuIG1ha2UgdGhlIHBhZ2UmIzM5O3MgY29udGVudHMgaW5hY2Nlc3NpYmxlLiAgczM5MAotCSAqIGRvZXMgdGhpcy4gIFNvIG5vdGhpbmcgd2hpY2ggY2FuIGFjY2VzcyB0aGUgcGFnZSYjMzk7cyBjb250ZW50cyBzaG91bGQKLQkgKiBoYXBwZW4gYWZ0ZXIgdGhpcy4KLQkgKi8KLQlhcmNoX2ZyZWVfcGFnZShwYWdlLCBvcmRlcik7CiAKLQlkZWJ1Z19wYWdlYWxsb2NfdW5tYXBfcGFnZXMocGFnZSwgMSAmbHQ7Jmx0OyBvcmRlcik7CiYjNDM7CWZyZWVfcGFnZXNfc2FuaXRpemUocGFnZSwgb3JkZXIpOwogCiAJcmV0dXJuIHRydWU7CiB9CkBAIC02ODUyLDggJiM0Mzs2OTA1LDggQEAgdm9pZCBfX2luaXQgcGFnZV9hbGxvY19zeXNjdGxfaW5pdCh2b2lkKQogCXJlZ2lzdGVyX3N5c2N0bF9pbml0KCYjMzQ7dm0mIzM0OywgcGFnZV9hbGxvY19zeXNjdGxfdGFibGUpOwogfQogCi1zdGF0aWMgdm9pZCBmcmVlX3ByZXBhcmVkX2NvbnRpZ19yYW5nZShzdHJ1Y3QgcGFnZSAqcGFnZSwKLQkJdW5zaWduZWQgbG9uZyBucl9wYWdlcykKJiM0MztzdGF0aWMgdm9pZCBfX2ZyZWVfcHJlcGFyZWRfY29udGlnX3JhbmdlKHN0cnVjdCBwYWdlICpwYWdlLAomIzQzOwkJdW5zaWduZWQgbG9uZyBucl9wYWdlcywgZnBpX3QgZnBpX2ZsYWdzKQogewogCXVuc2lnbmVkIGxvbmcgcGZuID0gcGFnZV90b19wZm4ocGFnZSk7CiAKQEAgLTY4NjksOCAmIzQzOzY5MjIsMTUgQEAgc3RhdGljIHZvaWQgZnJlZV9wcmVwYXJlZF9jb250aWdfcmFuZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsCiAJCS8qCiAJCSAqIEZyZWUgdGhlIGNodW5rIGFzIGEgc2luZ2xlIGJsb2NrLiBPdXIgY2FsbGVyIGhhcyBhbHJlYWR5CiAJCSAqIGNhbGxlZCBmcmVlX3BhZ2VzX3ByZXBhcmUoKSBmb3IgZWFjaCBvcmRlci0wIHBhZ2UuCiYjNDM7CQkgKgomIzQzOwkJICogSWYgdGhlIG9yaWdpbmFsIGNvbXBvdW5kIHBhZ2UgaGFzIEhXUG9pc29uIHBhZ2UsCiYjNDM7CQkgKiBmcmVlX3BhZ2VzX3ByZXBhcmUoKSBoYXMgdG8gc2tpcCBzYW5pdGl6ZSBhdCB0aGF0IHRpbWUsCiYjNDM7CQkgKiBidXQgbm93IGl0IGlzIGdvb2QgdGltZSB0byBkbyB0aGF0LgogCQkgKi8KLQkJX19mcmVlX2Zyb3plbl9wYWdlcyhwYWdlLCBvcmRlciwgRlBJX1BSRVBBUkVEKTsKJiM0MzsJCWlmIChmcGlfZmxhZ3MgJmFtcDsgRlBJX1NBTklUSVpFKQomIzQzOwkJCWZyZWVfcGFnZXNfc2FuaXRpemUocGFnZSwgb3JkZXIpOwomIzQzOwomIzQzOwkJX19mcmVlX2Zyb3plbl9wYWdlcyhwYWdlLCBvcmRlciwgZnBpX2ZsYWdzIHwgRlBJX1BSRVBBUkVEKTsKIAogCQlwZm4gJiM0Mzs9IDFVTCAmbHQ7Jmx0OyBvcmRlcjsKIAkJcGFnZSAmIzQzOz0gMVVMICZsdDsmbHQ7IG9yZGVyOwpAQCAtNjg3OCw2ICYjNDM7NjkzOCwxMSBAQCBzdGF0aWMgdm9pZCBmcmVlX3ByZXBhcmVkX2NvbnRpZ19yYW5nZShzdHJ1Y3QgcGFnZSAqcGFnZSwKIAl9CiB9CiAKJiM0MztzdGF0aWMgdm9pZCBmcmVlX3ByZXBhcmVkX2NvbnRpZ19yYW5nZShzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgbG9uZyBucl9wYWdlcykKJiM0Mzt7CiYjNDM7CV9fZnJlZV9wcmVwYXJlZF9jb250aWdfcmFuZ2UocGFnZSwgbnJfcGFnZXMsIEZQSV9OT05FKTsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgdm9pZCBfX2ZyZWVfY29udGlnX3JhbmdlX2NvbW1vbih1bnNpZ25lZCBsb25nIHBmbiwgdW5zaWduZWQgbG9uZyBucl9wYWdlcywKIAkJYm9vbCBpc19mcm96ZW4pCiB7CkBAIC02OTUxLDYgJiM0Mzs3MDE2LDYxIEBAIHZvaWQgX19mcmVlX2NvbnRpZ19yYW5nZSh1bnNpZ25lZCBsb25nIHBmbiwgdW5zaWduZWQgbG9uZyBucl9wYWdlcykKIAlfX2ZyZWVfY29udGlnX3JhbmdlX2NvbW1vbihwZm4sIG5yX3BhZ2VzLCAvKiBpc19mcm96ZW49ICovIGZhbHNlKTsKIH0KIAomIzQzOy8qCiYjNDM7ICogR2l2ZW4gc29tZSBjb250aWd1b3VzIHBhZ2VzIHRoYXQgaGF2ZSBjZXJ0YWluIG51bWJlciBvZiBIV1BvaXNvbiBwYWdlKHMpLAomIzQzOyAqIGZyZWUgb25seSB0aGUgaGVhbHRoeSBvbmVzLgomIzQzOyAqCiYjNDM7ICogVXNlZCBhdCB0aGUgZW5kIG9mIF9fZnJlZV9wYWdlc19wcmVwYXJlKCkuIEV2ZW4gaWYgaGF2aW5nIEhXUG9pc29uIHBhZ2VzLAomIzQzOyAqIGJyZWFraW5nIGRvd24gY29tcG91bmQgcGFnZSBhbmQgY2xlYXJpbmcgbWV0YWRhdGEgKGUuZy4gcGFnZSBvd25lciwgYWxsb2MKJiM0MzsgKiB0YWcpIGNhbiBiZSBkb25lIHRvZ2V0aGVyIGR1cmluZyBfX2ZyZWVfcGFnZXNfcHJlcGFyZSgpLCB3aGljaCBzaW1wbGlmaWVzCiYjNDM7ICogdGhlIHNwbGl0dGluZyBoZXJlOiB1bmxpa2UgX19zcGxpdF91bm1hcHBlZF9mb2xpbygpLCB0aGVyZSBpcyBubyBuZWVkIHRvCiYjNDM7ICogdHVybiBzcGxpdCBwYWdlcyBpbnRvIGEgY29tcG91bmQgcGFnZSBvciB0byBjYXJyeSBtZXRhZGF0YS4KJiM0MzsgKgomIzQzOyAqIEl0IHNjYW5zIGV2ZXJ5IHJhdyBwYWdlIG9mIHRoZSBjb21wb3VuZCBwYWdlIGFuZCBjYXVzZXMgbm9udHJpdmlhbCBvdmVyaGVhZC4KJiM0MzsgKiBTbyBvbmx5IHVzZSB0aGlzIHdoZW4gdGhlIGNvbXBvdW5kIHBhZ2UgY29udGFpbnMgSFdQb2lzb24gcGFnZShzKS4KJiM0MzsgKgomIzQzOyAqIEl0IGFsc28gd29ya3Mgd2hlbiBvcmRlciA9PSAwLCByZWdhcmRsZXNzIG9mIFBhZ2VIV1BvaXNvbigpIG9yIG5vdC4KJiM0MzsgKgomIzQzOyAqIFRoaXMgaW1wbGVtZW50YXRpb24gbmVlZHMgcmV3b3JrIGluIG1lbWRlc2Mgd29ybGQuCiYjNDM7ICovCiYjNDM7c3RhdGljIHZvaWQgZnJlZV9oYXNfaHdwb2lzb25lZChzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgaW50IG9yZGVyLAomIzQzOwkJCQlmcGlfdCBmcGlfZmxhZ3MpCiYjNDM7ewomIzQzOwl1bnNpZ25lZCBsb25nIGN1cnIgPSBwYWdlX3RvX3BmbihwYWdlKTsKJiM0MzsJdW5zaWduZWQgbG9uZyBlbmRfcGZuID0gY3VyciAmIzQzOyAoMSAmbHQ7Jmx0OyBvcmRlcik7CiYjNDM7CXVuc2lnbmVkIGxvbmcgbmV4dDsKJiM0MzsJdW5zaWduZWQgbG9uZyB0b3RhbF9mcmVlZCA9IDA7CiYjNDM7CXVuc2lnbmVkIGxvbmcgdG90YWxfaHdwID0gMDsKJiM0MzsKJiM0MzsJd2hpbGUgKGN1cnIgJmx0OyBlbmRfcGZuKSB7CiYjNDM7CQluZXh0ID0gY3VycjsKJiM0MzsKJiM0MzsJCXdoaWxlIChuZXh0ICZsdDsgZW5kX3BmbiAmYW1wOyZhbXA7ICFQYWdlSFdQb2lzb24ocGZuX3RvX3BhZ2UobmV4dCkpKQomIzQzOwkJCSYjNDM7JiM0MztuZXh0OwomIzQzOwomIzQzOwkJaWYgKG5leHQgIT0gZW5kX3BmbikgewomIzQzOwkJCS8qCiYjNDM7CQkJICogQXZvaWQgYWNjb3VudGluZyBlcnJvciB3aGVuIHRoZSBwYWdlIGlzIGZyZWVkCiYjNDM7CQkJICogYnkgdW5wb2lzb25fbWVtb3J5KCkuCiYjNDM7CQkJICovCiYjNDM7CQkJY2xlYXJfcGFnZV90YWdfcmVmKHBmbl90b19wYWdlKG5leHQpKTsKJiM0MzsJCQkmIzQzOyYjNDM7dG90YWxfaHdwOwomIzQzOwkJfQomIzQzOwomIzQzOwkJX19mcmVlX3ByZXBhcmVkX2NvbnRpZ19yYW5nZShwZm5fdG9fcGFnZShjdXJyKSwgbmV4dCAtIGN1cnIsCiYjNDM7CQkJCQkgICAgIGZwaV9mbGFncyk7CiYjNDM7CQl0b3RhbF9mcmVlZCAmIzQzOz0gbmV4dCAtIGN1cnI7CiYjNDM7CiYjNDM7CQlpZiAobmV4dCA9PSBlbmRfcGZuKQomIzQzOwkJCWJyZWFrOwomIzQzOwomIzQzOwkJY3VyciA9IG5leHQgJiM0MzsgMTsKJiM0MzsJfQomIzQzOwomIzQzOwlwcl9pbmZvKCYjMzQ7RnJlZWQgJSNseCBwYWdlcywgZXhjbHVkZWQgJSNseCBIV1BvaXNvbiBwYWdlc1xuJiMzNDssCiYjNDM7CQl0b3RhbF9mcmVlZCwgdG90YWxfaHdwKTsKJiM0Mzt9CiYjNDM7CiAjaWZkZWYgQ09ORklHX0NPTlRJR19BTExPQwogLyogVXNhZ2U6IFNlZSBhZG1pbi1ndWlkZS9keW5hbWljLWRlYnVnLWhvd3RvLnJzdCAqLwogc3RhdGljIHZvaWQgYWxsb2NfY29udGlnX2R1bXBfcGFnZXMoc3RydWN0IGxpc3RfaGVhZCAqcGFnZV9saXN0KQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vbWVtb3J5LWZhaWx1cmUuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL21lbW9yeS1mYWlsdXJlLmMKaW5kZXggMDMyZWQ5NTIwNTdjNjIuLjc4YzEwNWNlMmFmMTg1IDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9tZW1vcnktZmFpbHVyZS5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL21lbW9yeS1mYWlsdXJlLmMKQEAgLTE4LDYgJiM0MzsxOCw3IEBACiAjaW5jbHVkZSAmbHQ7bGludXgvbWFnaWMuaCZndDsKICNpbmNsdWRlICZsdDtlcnJuby5oJmd0OwogCiYjNDM7I2luY2x1ZGUgJiMzNDtodWdlcGFnZV9zZXR0aW5ncy5oJiMzNDsKICNpbmNsdWRlICYjMzQ7dm1fdXRpbC5oJiMzNDsKIAogZW51bSBpbmplY3RfdHlwZSB7CkBAIC0yNyw2ICYjNDM7MjgsNyBAQCBlbnVtIGluamVjdF90eXBlIHsKIAogZW51bSByZXN1bHRfdHlwZSB7CiAJTUFEVl9IQVJEX0FOT04sCiYjNDM7CU1BRFZfSEFSRF9BTk9OX0hVR0VUTEIsCiAJTUFEVl9IQVJEX0NMRUFOX1BBR0VDQUNIRSwKIAlNQURWX0hBUkRfRElSVFlfUEFHRUNBQ0hFLAogCU1BRFZfU09GVF9BTk9OLApAQCAtNDcsNiAmIzQzOzQ5LDggQEAgRklYVFVSRShtZW1vcnlfZmFpbHVyZSkKIAlpbnQgcGFnZW1hcF9mZDsKIAlpbnQga3BhZ2VmbGFnc19mZDsKIAlib29sIHRyaWdnZXJlZDsKJiM0MzsJLyogTnVtYmVyIG9mIGluaXRpYWwgSHVnZVRMQiBwYWdlcyB3aXRoIGRlZmF1bHQgcGFnZSBzaXplLiAqLwomIzQzOwl1bnNpZ25lZCBsb25nIG5yX2h1Z2V0bGJfcGFnZXM7CiB9OwogCiBGSVhUVVJFX1ZBUklBTlQobWVtb3J5X2ZhaWx1cmUpCkBAIC0xNTcsNiAmIzQzOzE2MSw3IEBAIHN0YXRpYyB2b2lkIGNoZWNrKHN0cnVjdCBfX3Rlc3RfbWV0YWRhdGEgKl9tZXRhZGF0YSwgRklYVFVSRV9EQVRBKG1lbW9yeV9mYWlsdXJlCiAJCSAgdm9pZCAqdmFkZHIsIGVudW0gcmVzdWx0X3R5cGUgdHlwZSwgaW50IHNldGptcCkKIHsKIAl1bnNpZ25lZCBsb25nIHNpemU7CiYjNDM7CXVuc2lnbmVkIGxvbmcgbnJfaHVnZXRsYl9wYWdlczsKIAl1aW50NjRfdCBwZm5fZmxhZ3M7CiAKIAlzd2l0Y2ggKHR5cGUpIHsKQEAgLTE3NCw2ICYjNDM7MTc5LDcgQEAgc3RhdGljIHZvaWQgY2hlY2soc3RydWN0IF9fdGVzdF9tZXRhZGF0YSAqX21ldGFkYXRhLCBGSVhUVVJFX0RBVEEobWVtb3J5X2ZhaWx1cmUKIAkJQVNTRVJUX05FKHBhZ2VtYXBfZ2V0X3BmbihzZWxmLSZndDtwYWdlbWFwX2ZkLCB2YWRkciksIHNlbGYtJmd0O3Bmbik7CiAJCWJyZWFrOwogCWNhc2UgTUFEVl9IQVJEX0FOT046CiYjNDM7CWNhc2UgTUFEVl9IQVJEX0FOT05fSFVHRVRMQjoKIAljYXNlIE1BRFZfSEFSRF9ESVJUWV9QQUdFQ0FDSEU6CiAJCS8qIFRoZSBTSUdCVVMgc2lnbmFsIHNob3VsZCBoYXZlIGJlZW4gcmVjZWl2ZWQuICovCiAJCUFTU0VSVF9FUShzZXRqbXAsIDEpOwpAQCAtMTg0LDggJiM0MzsxOTAsMTUgQEAgc3RhdGljIHZvaWQgY2hlY2soc3RydWN0IF9fdGVzdF9tZXRhZGF0YSAqX21ldGFkYXRhLCBGSVhUVVJFX0RBVEEobWVtb3J5X2ZhaWx1cmUKIAkJQVNTRVJUX0VRKDFVTCAmbHQ7Jmx0OyBzaWdpbmZvLnNpX2FkZHJfbHNiLCBzZWxmLSZndDtwYWdlX3NpemUpOwogCQlBU1NFUlRfRVEoc2lnaW5mby5zaV9hZGRyLCB2YWRkcik7CiAKLQkJLyogWFhYIENoZWNrIGJhY2tpbmcgcHRlIGlzIGh3cG9pc29uIGVudHJ5IHdoZW4gc3VwcG9ydGVkLiAqLwotCQlBU1NFUlRfVFJVRShwYWdlbWFwX2lzX3N3YXBwZWQoc2VsZi0mZ3Q7cGFnZW1hcF9mZCwgdmFkZHIpKTsKJiM0MzsJCWlmICh0eXBlICE9IE1BRFZfSEFSRF9BTk9OX0hVR0VUTEIpCiYjNDM7CQkJLyoKJiM0MzsJCQkgKiBDaGVjayBiYWNraW5nIHB0ZSBpcyBod3BvaXNvbiBlbnRyeSB3aGVuIHN1cHBvcnRlZC4KJiM0MzsJCQkgKiBBbHRob3VnaCB0cnlfdG9fdW5tYXBfb25lKCkgYWxzbyBpbnN0YWxscyBod3BvaXNvbgomIzQzOwkJCSAqIGVudHJ5IGZvciBIdWdlVExCLCBwYWdlbWFwX2h1Z2V0bGJfcmFuZ2UoKSBkb2VzbiYjMzk7dAomIzQzOwkJCSAqIHBhcnNlIHN3YXAgZW50cmllcyBhdCBhbGwuCiYjNDM7CQkJICovCiYjNDM7CQkJQVNTRVJUX1RSVUUocGFnZW1hcF9pc19zd2FwcGVkKHNlbGYtJmd0O3BhZ2VtYXBfZmQsIHZhZGRyKSk7CiYjNDM7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCVNLSVAocmV0dXJuLCAmIzM0O3VuZXhwZWN0ZWQgaW5qZWN0IHR5cGUgJWQuXG4mIzM0OywgdHlwZSk7CkBAIC0xOTMsNyAmIzQzOzIwNiwxOSBAQCBzdGF0aWMgdm9pZCBjaGVjayhzdHJ1Y3QgX190ZXN0X21ldGFkYXRhICpfbWV0YWRhdGEsIEZJWFRVUkVfREFUQShtZW1vcnlfZmFpbHVyZQogCiAJLyogQ2hlY2sgaWYgdGhlIHZhbHVlIG9mIEhhcmR3YXJlQ29ycnVwdGVkIGhhcyBpbmNyZWFzZWQuICovCiAJQVNTRVJUX0VRKGdldF9oYXJkd2FyZV9jb3JydXB0ZWRfc2l6ZSgmYW1wO3NpemUpLCAwKTsKLQlBU1NFUlRfRVEoc2l6ZSwgc2VsZi0mZ3Q7Y29ycnVwdGVkX3NpemUgJiM0Mzsgc2VsZi0mZ3Q7cGFnZV9zaXplIC8gMTAyNCk7CiYjNDM7CiYjNDM7CWlmICh0eXBlID09IE1BRFZfSEFSRF9BTk9OX0hVR0VUTEIpIHsKJiM0MzsJCS8qCiYjNDM7CQkgKiBPbmx5IG9uZSBwYWdlIGlzIGhhcmR3YXJlIGNvcnJ1cHRlZDsgdGhlIHJlc3Qgc2hvdWxkIGFsbCBiZQomIzQzOwkJICogcmVsZWFzZWQgdG8gYnVkZHkgYWxsb2NhdG9yLgomIzQzOwkJICovCiYjNDM7CQlBU1NFUlRfRVEoc2l6ZSwgc2VsZi0mZ3Q7Y29ycnVwdGVkX3NpemUgJiM0MzsgZ2V0cGFnZXNpemUoKSAvIDEwMjQpOwomIzQzOwkJLyogSHVnZVRMQiBzaG91bGQgaGF2ZSBsb3N0IHRoZSBIV1BvaXNvbiBIdWdlVExCIHBhZ2UuICovCiYjNDM7CQlucl9odWdldGxiX3BhZ2VzID0gaHVnZXRsYl9ucl9kZWZhdWx0X3BhZ2VzKCk7CiYjNDM7CQlBU1NFUlRfRVEobnJfaHVnZXRsYl9wYWdlcyAmIzQzOyAxLCBzZWxmLSZndDtucl9odWdldGxiX3BhZ2VzKTsKJiM0MzsJfSBlbHNlIHsKJiM0MzsJCUFTU0VSVF9FUShzaXplLCBzZWxmLSZndDtjb3JydXB0ZWRfc2l6ZSAmIzQzOyBzZWxmLSZndDtwYWdlX3NpemUgLyAxMDI0KTsKJiM0MzsJfQogCiAJLyogQ2hlY2sgaWYgSFdQb2lzb24gZmxhZyBpcyBzZXQuICovCiAJQVNTRVJUX0VRKHBhZ2VmbGFnc19nZXQoc2VsZi0mZ3Q7cGZuLCBzZWxmLSZndDtrcGFnZWZsYWdzX2ZkLCAmYW1wO3Bmbl9mbGFncyksIDApOwpAQCAtMjQ3LDYgJiM0MzsyNzIsNDUgQEAgVEVTVF9GKG1lbW9yeV9mYWlsdXJlLCBhbm9uKQogCUFTU0VSVF9FUShtdW5tYXAoYWRkciwgc2VsZi0mZ3Q7cGFnZV9zaXplKSwgMCk7CiB9CiAKJiM0MztURVNUX0YobWVtb3J5X2ZhaWx1cmUsIGFub25faHVnZXRsYikKJiM0Mzt7CiYjNDM7CWNoYXIgKmFkZHI7CiYjNDM7CWludCByZXQ7CiYjNDM7CWNvbnN0IHVuc2lnbmVkIGxvbmcgbnJfYWxsb2NfaHVnZXRsYl9wYWdlcyA9IDQ7CiYjNDM7CXVuc2lnbmVkIGxvbmcgYWxsb2Nfc2l6ZTsKJiM0MzsKJiM0MzsJaWYgKHZhcmlhbnQtJmd0O3R5cGUgPT0gTUFEVl9TT0ZUKQomIzQzOwkJU0tJUChyZXR1cm4sICYjMzQ7U29mdCBvZmZsaW5lIHRlc3QgaXMgbm90IGltcGxlbWVudGVkJiMzNDspOwomIzQzOwomIzQzOwkvKiBIdWdlVExCIHNldHRpbmdzIHdpbGwgYmUgYXV0b21hdGljYWxseSByZXN0b3JlZCB3aGVuIHRlc3QgZXhpdHMuICovCiYjNDM7CWh1Z2V0bGJfc2V0dXBfZGVmYXVsdChucl9hbGxvY19odWdldGxiX3BhZ2VzKTsKJiM0MzsKJiM0MzsJYWxsb2Nfc2l6ZSA9IGRlZmF1bHRfaHVnZV9wYWdlX3NpemUoKSAqIG5yX2FsbG9jX2h1Z2V0bGJfcGFnZXM7CiYjNDM7CXNlbGYtJmd0O3BhZ2Vfc2l6ZSA9IGRlZmF1bHRfaHVnZV9wYWdlX3NpemUoKTsKJiM0MzsJc2VsZi0mZ3Q7bnJfaHVnZXRsYl9wYWdlcyA9IGh1Z2V0bGJfbnJfZGVmYXVsdF9wYWdlcygpOwomIzQzOwomIzQzOwlhZGRyID0gbW1hcCgwLCBhbGxvY19zaXplLCBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFLAomIzQzOwkJICAgIE1BUF9BTk9OWU1PVVMgfCBNQVBfUFJJVkFURSB8IE1BUF9IVUdFVExCLCAtMSwgMCk7CiYjNDM7CWlmIChhZGRyID09IE1BUF9GQUlMRUQpCiYjNDM7CQlTS0lQKHJldHVybiwgJiMzNDttbWFwIGZhaWxlZCwgbm90IGVub3VnaCBtZW1vcnkgb3IgaHVnZXRsYiBub3Qgc3VwcG9ydGVkLlxuJiMzNDspOwomIzQzOwltZW1zZXQoYWRkciwgMHhjZSwgYWxsb2Nfc2l6ZSk7CiYjNDM7CiYjNDM7CXByZXBhcmUoX21ldGFkYXRhLCBzZWxmLCBhZGRyKTsKJiM0MzsKJiM0MzsJcmV0ID0gc2lnc2V0am1wKHNpZ25hbF9qbXBfYnVmLCAxKTsKJiM0MzsJaWYgKCFzZWxmLSZndDt0cmlnZ2VyZWQpIHsKJiM0MzsJCXNlbGYtJmd0O3RyaWdnZXJlZCA9IHRydWU7CiYjNDM7CQlBU1NFUlRfRVEodmFyaWFudC0mZ3Q7aW5qZWN0KHNlbGYsIGFkZHIpLCAwKTsKJiM0MzsJCUZPUkNFX1JFQUQoKmFkZHIpOwomIzQzOwl9CiYjNDM7CiYjNDM7CWNoZWNrKF9tZXRhZGF0YSwgc2VsZiwgYWRkciwgTUFEVl9IQVJEX0FOT05fSFVHRVRMQiwgcmV0KTsKJiM0MzsKJiM0MzsJY2xlYW51cChfbWV0YWRhdGEsIHNlbGYsIGFkZHIpOwomIzQzOwomIzQzOwlBU1NFUlRfRVEobXVubWFwKGFkZHIsIGFsbG9jX3NpemUpLCAwKTsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgaW50IHByZXBhcmVfZmlsZShjb25zdCBjaGFyICpmbmFtZSwgdW5zaWduZWQgbG9uZyBzaXplKQogewogCWludCBmZDsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDUgMTg6MjE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzUzOAoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDYzMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBLZXJuZWwgUGF0Y2ggZm9yIEZ1enppbmcgUmVsZXZhbmNlKioKCk9rYXksIHNvIEkmIzM5O3ZlIGdvdCB0aGlzIHBhdGNoIGluIGZyb250IG9mIG1lLCBhbmQgbXkgaW1tZWRpYXRlIGNvbmNlcm4gaXMgd2hldGhlciBpdCBpbnRyb2R1Y2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyBzaWduaWZpY2FudCBlbm91Z2ggdG8gd2FycmFudCBmdXp6aW5nLiBUaGUgZmlsZXMgdG91Y2hlZCBhcmU6IGBpbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaGAsIGBtbS9tZW1vcnktZmFpbHVyZS5jYCwgYG1tL3BhZ2VfYWxsb2MuY2AsIGFuZCBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vbWVtb3J5LWZhaWx1cmUuY2AuIFRoYXQmIzM5O3MgYWxyZWFkeSB0ZWxsaW5nIC0gdGhlIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtIGlzIGJlaW5nIHR3ZWFrZWQuCgpMb29raW5nIGNsb3NlcjoKCjEuICBJbiBgaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmhgLCBpdCBsb29rcyBsaWtlIGEgY29uZGl0aW9uYWwgcHJlcHJvY2Vzc29yIG1hY3JvLCBgUGFnZUhhc0hXUG9pc29uZWRgLCBoYXMgYmVlbiB1cGRhdGVkIHRvIGFjY291bnQgZm9yIGJvdGggYENPTkZJR19IVUdFVExCX1BBR0VgIGFuZCBgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFYCwgbm90IGp1c3QgdGhlIGxhdHRlci4KCjIuICBgbW0vbWVtb3J5LWZhaWx1cmUuY2AgaXMgc2VlaW5nIHNvbWUgc2lnbmlmaWNhbnQgYWRkaXRpb25zIGFuZCBtb2RpZmljYXRpb25zLiAgVGhlcmUmIzM5O3MgYSBuZXcgZnVuY3Rpb24sIGBfX2h1Z2VwYWdlX2hhbmRsZV9wb2lzb25gLCB3aGljaCBhcHBlYXJzIHRvIGJlIGhhbmRsaW5nIHBvaXNvbmVkIGh1Z2UgcGFnZXMuIEl0IGNhbGxzIGBkaXNzb2x2ZV9mcmVlX2h1Z2V0bGJfZm9saW8oKWAgYW5kIHJlcGxhY2VzIGNhbGxzIHRvIGBfX3BhZ2VfaGFuZGxlX3BvaXNvbigpYC4gIFBsdXMsIGBmb2xpb19jbGVhcl9odWdldGxiX2h3cG9pc29uKClgIG5vdyBjYWxscyBgZm9saW9fc2V0X2hhc19od3BvaXNvbmVkKClgLiBBbGwgb2YgdGhpcyBzY3JlYW1zIEh1Z2VUTEIgYW5kIG1lbW9yeSBmYWlsdXJlIGludGVyYWN0aW9uLgoKMy4gIGBtbS9wYWdlX2FsbG9jLmNgIGlzIGdldHRpbmcgZXZlbiBtb3JlIGludGVyZXN0aW5nLiBJdCYjMzk7cyBhZGRpbmcgYW4gYEZQSV9TQU5JVElaRWAgZmxhZywgYW5kIGEgbmV3IGBmcmVlX3BhZ2VzX3Nhbml0aXplKClgIGZ1bmN0aW9uLiAgVGhlIGV4aXN0aW5nIGBfX2ZyZWVfcGFnZXNfcHJlcGFyZSgpYCBub3cgY2hlY2tzIGZvciBgZm9saW9fdGVzdF9oYXNfaHdwb2lzb25lZCgpYCBhbmQgY2FsbHMgYGZyZWVfaGFzX2h3cG9pc29uZWQoKWAsIHdoaWNoIGxvb2tzIGxpa2UgaXQmIzM5O3Mgc3BlY2lmaWNhbGx5IGRlYWxpbmcgd2l0aCBmcmVlaW5nIHBhZ2VzIHRoYXQgYXJlIG1hcmtlZCBhcyBoYXZpbmcgSFdQb2lzb25lZCBwYWdlcywgc2tpcHBpbmcgdGhlIHBvaXNvbmVkIG9uZXMgYW5kIG9ubHkgZnJlZWluZyBoZWFsdGh5IG9uZXMuIEFkZGl0aW9uYWxseSwgYGZyZWVfcHJlcGFyZWRfY29udGlnX3JhbmdlKClgIG5vdyBjb25kaXRpb25hbGx5IGNhbGxzIGBmcmVlX3BhZ2VzX3Nhbml0aXplKClgLgoKNC4gIEZpbmFsbHksIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9tZW1vcnktZmFpbHVyZS5jYCBhZGRzIGEgbmV3IHRlc3QgY2FsbGVkIGBhbm9uX2h1Z2V0bGJgLgoKVGhpcyBwYXRjaCBpcyB1bmRlbmlhYmx5IGEgZnVuY3Rpb25hbCBjaGFuZ2UsIGRpcmVjdGx5IGltcGFjdGluZyBob3cgdGhlIGtlcm5lbCBoYW5kbGVzIG1lbW9yeSBmYWlsdXJlcywgc3BlY2lmaWNhbGx5IHJlbGF0ZWQgdG8gSFdQb2lzb24gYW5kIEh1Z2VUTEIgcGFnZXMuIEdpdmVuIHRoZSBzY29wZSBvZiBjaGFuZ2VzLCBpdCB3YXJyYW50cyBhIGNsb3NlciBsb29rLCBlc3BlY2lhbGx5IGZvY3VzaW5nIG9uIGBDT05GSUdfTUVNT1JZX0ZBSUxVUkVgLCBgQ09ORklHX0hVR0VUTEJfUEFHRWAsIGFuZCBgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFYC4KCkkmIzM5O20gcGFydGljdWxhcmx5IGludGVyZXN0ZWQgaW4gYF9faHVnZXBhZ2VfaGFuZGxlX3BvaXNvbmAgKGluIGBtbS9tZW1vcnktZmFpbHVyZS5jYCkgYW5kIGBmcmVlX2hhc19od3BvaXNvbmVkYCAoaW4gYG1tL3BhZ2VfYWxsb2MuY2ApLiBJIG5lZWQgdG8gY2hlY2sgaG93IHRoZXNlIGZ1bmN0aW9ucyBhcmUgcmVhY2hhYmxlLCBzbyBJJiMzOTtsbCBiZSB1c2luZyBgZGVmYXVsdF9hcGk6Z3JlcHBlcmAgdG8gc2VlIHdoZXJlIHRoZXkgYXJlIGNhbGxlZCBhbmQgaWYgdGhleSBhcmUgcmVsZXZhbnQgdG8gZnV6emluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNSAxODoyMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtfX2h1Z2VwYWdlX2hhbmRsZV9wb2lzb24mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vbWVtb3J5LWZhaWx1cmUuYz0xNzQ9c3RhdGljIERFRklORV9NVVRFWChwZm5fc3BhY2VfbG9jayk7XG4tLVxubW0vbWVtb3J5LWZhaWx1cmUuYy0xODEtICovXG5tbS9tZW1vcnktZmFpbHVyZS5jOjE4MjpzdGF0aWMgaW50IF9faHVnZXBhZ2VfaGFuZGxlX3BvaXNvbihzdHJ1Y3QgcGFnZSAqcGFnZSlcbm1tL21lbW9yeS1mYWlsdXJlLmMtMTgzLXtcbi0tXG5tbS9tZW1vcnktZmFpbHVyZS5jPTExNzI9c3RhdGljIGludCBtZV9odWdlX3BhZ2Uoc3RydWN0IHBhZ2Vfc3RhdGUgKnBzLCBzdHJ1Y3QgcGFnZSAqcClcbi0tXG5tbS9tZW1vcnktZmFpbHVyZS5jLTExOTItXHRcdGZvbGlvX3B1dChmb2xpbyk7XG5tbS9tZW1vcnktZmFpbHVyZS5jOjExOTM6XHRcdGlmIChfX2h1Z2VwYWdlX2hhbmRsZV9wb2lzb24ocCkpIHtcbm1tL21lbW9yeS1mYWlsdXJlLmMtMTE5NC1cdFx0XHRyZXMgPSBNRl9GQUlMRUQ7XG4tLVxubW0vbWVtb3J5LWZhaWx1cmUuYz0yMTA3PXN0YXRpYyBpbnQgdHJ5X21lbW9yeV9mYWlsdXJlX2h1Z2V0bGIodW5zaWduZWQgbG9uZyBwZm4sIGludCBmbGFncylcbi0tXG5tbS9tZW1vcnktZmFpbHVyZS5jLTIxNTktXHRcdGZvbGlvX3VubG9jayhmb2xpbyk7XG5tbS9tZW1vcnktZmFpbHVyZS5jOjIxNjA6XHRcdGlmIChfX2h1Z2VwYWdlX2hhbmRsZV9wb2lzb24ocCkpIHtcbm1tL21lbW9yeS1mYWlsdXJlLmMtMjE2MS1cdFx0XHRyZXMgPSBNRl9GQUlMRUQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDUgMTg6MjE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTEyOAoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDE0NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgTWVtb3J5IEZhaWx1cmUgSGFuZGxpbmcqKgoKT2theSwgc28gSSYjMzk7bSBkaXZpbmcgaW50byB0aGlzIG1lbW9yeSBmYWlsdXJlIGhhbmRsaW5nIGNvZGUuIEl0IGxvb2tzIGxpa2UgYG1lX2h1Z2VfcGFnZWAgYW5kIGB0cnlfbWVtb3J5X2ZhaWx1cmVfaHVnZXRsYmAgYXJlIGtleSBwbGF5ZXJzIGhlcmUuIEkmIzM5O20gZm9jdXNpbmcgb24gaG93IHRoZSBzeXN0ZW0gcmVzcG9uZHMgd2hlbiBtZW1vcnkgZXJyb3JzIGFyZSBkZXRlY3RlZC4gTm93LCBgZnJlZV9oYXNfaHdwb2lzb25lZGAgaXMgaW50cmlndWluZy4gSXQmIzM5O3MgY2FsbGVkIGZyb20gYF9fZnJlZV9wYWdlc19wcmVwYXJlYCwgd2hpY2ggaXMgYSAqdmVyeSogaG90IHBhdGgg4oCTIHRoYXQmIzM5O3Mgc29tZXRoaW5nIEkgbmVlZCB0byBwYXkgYXR0ZW50aW9uIHRvIGJlY2F1c2UgcGVyZm9ybWFuY2UgbWF0dGVycy4gSG93ZXZlciwgYGZyZWVfaGFzX2h3cG9pc29uZWRgIGl0c2VsZiBpcyBvbmx5IGV4ZWN1dGVkIHdoZW4gYHNob3VsZF9maGhgIGlzIHRydWUuIGBzaG91bGRfZmhoYCBzZWVtcyB0byBiZSBjb25kaXRpb25hbCBvbiBhIGBjb21wb3VuZGAgcGFnZSBhbmQgdGhlIGBmb2xpb190ZXN0X2hhc19od3BvaXNvbmVkKGZvbGlvKWAgcmVzdWx0LiBUaGF0IG1lYW5zIGl0IG9ubHkgZ2V0cyBjYWxsZWQgd2hlbiBkZWFsaW5nIHdpdGggY29tcG91bmRzIHdpdGggaGFyZHdhcmUgcG9pc29uaW5nLiBHaXZlbiBpdHMgY29udGV4dCwgYGZyZWVfaGFzX2h3cG9pc29uZWRgIHNlZW1zIGxpa2UgYSBwcmltZSB0YXJnZXQgZm9yIGRlZXBlciBpbnZlc3RpZ2F0aW9uLCBhIGdvb2QgZm9jdXMgc3ltYm9sLgoKQWxzbywgSSBzaG91bGQgZGVmaW5pdGVseSBjaGVjayBgX19odWdlcGFnZV9oYW5kbGVfcG9pc29uYCBhbG9uZ3NpZGUgaXQuCgpSaWdodCBub3csIEkgd2FudCB0byBzdGFydCBieSBleGFtaW5pbmcgYGZyZWVfaGFzX2h3cG9pc29uZWRgIGNsb3NlbHkuIExldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyBhY3R1YWxseSBnb2luZyBvbiB0aGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNSAxODoyMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtmcmVlX2hhc19od3BvaXNvbmVkJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3BhZ2VfYWxsb2MuYz0yMTc9dW5zaWduZWQgaW50IHBhZ2VibG9ja19vcmRlciBfX3JlYWRfbW9zdGx5O1xuLS1cbm1tL3BhZ2VfYWxsb2MuYy0yMTktXG5tbS9wYWdlX2FsbG9jLmM6MjIwOnN0YXRpYyB2b2lkIGZyZWVfaGFzX2h3cG9pc29uZWQoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGludCBvcmRlcixcbm1tL3BhZ2VfYWxsb2MuYy0yMjEtXHRcdFx0XHRmcGlfdCBmcGlfZmxhZ3MpO1xuLS1cbm1tL3BhZ2VfYWxsb2MuYz0xMzc1PXN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgYm9vbCBfX2ZyZWVfcGFnZXNfcHJlcGFyZShzdHJ1Y3QgcGFnZSAqcGFnZSxcbi0tXG5tbS9wYWdlX2FsbG9jLmMtMTQ5NC1cdGlmIChzaG91bGRfZmhoKSB7XG5tbS9wYWdlX2FsbG9jLmM6MTQ5NTpcdFx0ZnJlZV9oYXNfaHdwb2lzb25lZChwYWdlLCBvcmRlciwgZnBpX2ZsYWdzIHwgRlBJX1NBTklUSVpFKTtcbm1tL3BhZ2VfYWxsb2MuYy0xNDk2LVx0XHRyZXR1cm4gZmFsc2U7XG4tLVxubW0vcGFnZV9hbGxvYy5jPTcwMTQ9dm9pZCBfX2ZyZWVfY29udGlnX3JhbmdlKHVuc2lnbmVkIGxvbmcgcGZuLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzKVxuLS1cbm1tL3BhZ2VfYWxsb2MuYy03MDM1LSAqL1xubW0vcGFnZV9hbGxvYy5jOjcwMzY6c3RhdGljIHZvaWQgZnJlZV9oYXNfaHdwb2lzb25lZChzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgaW50IG9yZGVyLFxubW0vcGFnZV9hbGxvYy5jLTcwMzctXHRcdFx0XHRmcGlfdCBmcGlfZmxhZ3MpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDUgMTg6MjE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTg5MAoJCQkJCQkJb3V0cHV0OiAyNAoJCQkJCQkJdGhvdWdodHM6IDU0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGFuYWx5c2lzIG9mIHRob3NlIGZ1bmN0aW9uIGNhbGxzOgoKKipEaXNzZWN0aW5nIEh1Z2VwYWdlIE1hbmFnZW1lbnQqKgoKT2theSwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gaG93IGh1Z2VwYWdlcyBhcmUgaGFuZGxlZC4gTXkgaW5pdGlhbCBmb2N1cyBpcyBvbiB0aGUgYF9faHVnZXBhZ2VfaGFuZGxlX3BvaXNvbmAgZnVuY3Rpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyByb2xlLCBhbmQgaXQgbG9va3MgbGlrZSBpdCYjMzk7cyBjcnVjaWFsLCBjb25zaWRlcmluZyBpdCYjMzk7cyBjYWxsZWQgZnJvbSB0d28ga2V5IGxvY2F0aW9ucy4gU3BlY2lmaWNhbGx5LCBgbWVfaHVnZV9wYWdlYCBhbmQgYHRyeV9tZW1vcnlfZmFpbHVyZV9odWdldGxiYC4gVGhhdCB0ZWxscyBtZSBpdCYjMzk7cyBsaWtlbHkgaW52b2x2ZWQgaW4gZXJyb3IgaGFuZGxpbmcgb3IgdmFsaWRhdGlvbiByZWxhdGVkIHRvIGh1Z2VwYWdlcywgbWF5YmUgZGVhbGluZyB3aXRoIHBvdGVudGlhbGx5IGNvcnJ1cHRlZCBtZW1vcnkgcmVnaW9ucy4gSSBuZWVkIHRvIGxvb2sgY2xvc2VyIGF0IHdoYXQgdGhvc2UgY2FsbGVycyBkbyB0byBnZXQgdGhlIGZ1bGwgcGljdHVyZS4KCk5leHQsIEkmIzM5O2xsIHR1cm4gbXkgYXR0ZW50aW9uIHRvIGBkaXNzb2x2ZV9mcmVlX2h1Z2V0bGJfZm9saW9gLiBCYXNlZCBvbiB0aGUgbmFtZSwgaXQgc2VlbXMgcmVsYXRlZCB0byByZWxlYXNpbmcgb3IgZGVhbGxvY2F0aW5nIGh1Z2VwYWdlIGZvbGlvcywgd2hpY2ggaXMgdGhlIGhpZ2hlci1sZXZlbCByZXByZXNlbnRhdGlvbiBvZiBhIGh1Z2VwYWdlLiBUaGUgJiMzNDtkaXNzb2x2ZSYjMzQ7IHBhcnQgc3VnZ2VzdHMgaXQgbWlnaHQgYmUgaGFuZGxpbmcgZnJhZ21lbnRhdGlvbiBvciBjb21iaW5pbmcgbXVsdGlwbGUgc21hbGxlciByZWdpb25zLiBJIGV4cGVjdCB0aGlzIGZ1bmN0aW9uIGhhcyBpbnRlcmVzdGluZyBpbnRlcmFjdGlvbiB3aXRoIHRoZSBwYWdlIHJlY2xhaW0gc3Vic3lzdGVtLiBJJiMzOTtsbCBuZWVkIHRvIHNlZSBob3cgaXQgZml0cyBpbnRvIHRoZSBicm9hZGVyIGFsbG9jYXRpb24gYW5kIGRlYWxsb2NhdGlvbiBsaWZlY3ljbGUgb2YgaHVnZXBhZ2VzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA1IDE4OjIxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2Rpc3NvbHZlX2ZyZWVfaHVnZXRsYl9mb2xpbyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaD04ODA9c3RhdGljIGlubGluZSBpbnQgaHN0YXRlX2luZGV4KHN0cnVjdCBoc3RhdGUgKmgpXG4tLVxuaW5jbHVkZS9saW51eC9odWdldGxiLmgtODg0LVxuaW5jbHVkZS9saW51eC9odWdldGxiLmg6ODg1OmludCBkaXNzb2x2ZV9mcmVlX2h1Z2V0bGJfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbyk7XG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaDo4ODY6aW50IGRpc3NvbHZlX2ZyZWVfaHVnZXRsYl9mb2xpb3ModW5zaWduZWQgbG9uZyBzdGFydF9wZm4sXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaC04ODctXHRcdFx0XHQgICAgdW5zaWduZWQgbG9uZyBlbmRfcGZuKTtcbi0tXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaD0xMjE0PXN0YXRpYyBpbmxpbmUgaW50IGhzdGF0ZV9pbmRleChzdHJ1Y3QgaHN0YXRlICpoKVxuLS1cbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oLTEyMTgtXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaDoxMjE5OnN0YXRpYyBpbmxpbmUgaW50IGRpc3NvbHZlX2ZyZWVfaHVnZXRsYl9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuaW5jbHVkZS9saW51eC9odWdldGxiLmgtMTIyMC17XG4tLVxuaW5jbHVkZS9saW51eC9odWdldGxiLmgtMTIyMy1cbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oOjEyMjQ6c3RhdGljIGlubGluZSBpbnQgZGlzc29sdmVfZnJlZV9odWdldGxiX2ZvbGlvcyh1bnNpZ25lZCBsb25nIHN0YXJ0X3BmbixcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oLTEyMjUtXHRcdFx0XHRcdCAgIHVuc2lnbmVkIGxvbmcgZW5kX3Bmbilcbi0tXG5tbS9odWdldGxiLmM9MTkwNj1zdGF0aWMgc3RydWN0IGZvbGlvICpyZW1vdmVfcG9vbF9odWdldGxiX2ZvbGlvKHN0cnVjdCBoc3RhdGUgKmgsXG4tLVxubW0vaHVnZXRsYi5jLTE5NDMtICovXG5tbS9odWdldGxiLmM6MTk0NDppbnQgZGlzc29sdmVfZnJlZV9odWdldGxiX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8pXG5tbS9odWdldGxiLmMtMTk0NS17XG4tLVxubW0vaHVnZXRsYi5jLTIwMjctICogcGFydCBvZiBpdCBsaWVzIHdpdGhpbiB0aGUgZ2l2ZW4gcmFuZ2UuXG5tbS9odWdldGxiLmM6MjAyODogKiBBbHNvIG5vdGUgdGhhdCBpZiBkaXNzb2x2ZV9mcmVlX2h1Z2V0bGJfZm9saW8oKSByZXR1cm5zIHdpdGggYW4gZXJyb3IsIGFsbFxubW0vaHVnZXRsYi5jLTIwMjktICogZnJlZSBodWdldGxiIGZvbGlvcyB0aGF0IHdlcmUgZGlzc29sdmVkIGJlZm9yZSB0aGF0IGVycm9yIGFyZSBsb3N0LlxubW0vaHVnZXRsYi5jLTIwMzAtICovXG5tbS9odWdldGxiLmM6MjAzMTppbnQgZGlzc29sdmVfZnJlZV9odWdldGxiX2ZvbGlvcyh1bnNpZ25lZCBsb25nIHN0YXJ0X3BmbiwgdW5zaWduZWQgbG9uZyBlbmRfcGZuKVxubW0vaHVnZXRsYi5jLTIwMzIte1xuLS1cbm1tL2h1Z2V0bGIuYy0yMDQ3LVx0XHRmb2xpbyA9IHBmbl9mb2xpbyhwZm4pO1xubW0vaHVnZXRsYi5jOjIwNDg6XHRcdHJjID0gZGlzc29sdmVfZnJlZV9odWdldGxiX2ZvbGlvKGZvbGlvKTtcbm1tL2h1Z2V0bGIuYy0yMDQ5LVx0XHRpZiAocmMpXG4tLVxubW0vbWVtb3J5LWZhaWx1cmUuYz0xNzQ9c3RhdGljIERFRklORV9NVVRFWChwZm5fc3BhY2VfbG9jayk7XG4tLVxubW0vbWVtb3J5LWZhaWx1cmUuYy0xNzgtICogZGlmZmVyZW5jZSB0byBzb2Z0X29mZmxpbmUoKSBpcyB0aGF0LCBubyBIV1BvaXNvbiBzdWJwYWdlIHdpbGwgbWFrZVxubW0vbWVtb3J5LWZhaWx1cmUuYzoxNzk6ICogaW50byBidWRkeSBhbGxvY2F0b3IgYWZ0ZXIgYSBzdWNjZXNzZnVsIGRpc3NvbHZlX2ZyZWVfaHVnZXRsYl9mb2xpbygpLFxubW0vbWVtb3J5LWZhaWx1cmUuYy0xODAtICogc28gdGFrZV9wYWdlX29mZl9idWRkeSgpIGlzIHVubmVjZXNzYXJ5LlxuLS1cbm1tL21lbW9yeS1mYWlsdXJlLmM9MTgyPXN0YXRpYyBpbnQgX19odWdlcGFnZV9oYW5kbGVfcG9pc29uKHN0cnVjdCBwYWdlICpwYWdlKVxuLS1cbm1tL21lbW9yeS1mYWlsdXJlLmMtMTg2LVx0Lypcbm1tL21lbW9yeS1mYWlsdXJlLmM6MTg3Olx0ICogQ2FuJiMzOTt0IHVzZSBkaXNzb2x2ZV9mcmVlX2h1Z2V0bGJfZm9saW8oKSB3aXRob3V0IGEgcmVsaWFibGVcbm1tL21lbW9yeS1mYWlsdXJlLmMtMTg4LVx0ICogcmF3X2h3cF9saXN0IHRlbGxpbmcgd2hpY2ggc3VicGFnZSBpcyBIV1BvaXNvbi4gU28gZG8gbm90IGZyZWVcbi0tXG5tbS9tZW1vcnktZmFpbHVyZS5jLTE5NS1cbm1tL21lbW9yeS1mYWlsdXJlLmM6MTk2Olx0cmV0dXJuIGRpc3NvbHZlX2ZyZWVfaHVnZXRsYl9mb2xpbyhmb2xpbyk7XG5tbS9tZW1vcnktZmFpbHVyZS5jLTE5Ny19XG4tLVxubW0vbWVtb3J5LWZhaWx1cmUuYz0yMDY9c3RhdGljIGludCBfX3BhZ2VfaGFuZGxlX3BvaXNvbihzdHJ1Y3QgcGFnZSAqcGFnZSlcbi0tXG5tbS9tZW1vcnktZmFpbHVyZS5jLTIxMC1cdHpvbmVfcGNwX2Rpc2FibGUocGFnZV96b25lKHBhZ2UpKTtcbm1tL21lbW9yeS1mYWlsdXJlLmM6MjExOlx0cmV0ID0gZGlzc29sdmVfZnJlZV9odWdldGxiX2ZvbGlvKHBhZ2VfZm9saW8ocGFnZSkpO1xubW0vbWVtb3J5LWZhaWx1cmUuYy0yMTItXHRpZiAoIXJldClcbi0tXG5tbS9tZW1vcnktZmFpbHVyZS5jPTIxOT1zdGF0aWMgYm9vbCBwYWdlX2hhbmRsZV9wb2lzb24oc3RydWN0IHBhZ2UgKnBhZ2UsIGJvb2wgaHVnZXBhZ2Vfb3JfZnJlZXBhZ2UsIGJvb2wgcmVsZWFzZSlcbi0tXG5tbS9tZW1vcnktZmFpbHVyZS5jLTIyMy1cdFx0ICogRG9pbmcgdGhpcyBjaGVjayBmb3IgZnJlZSBwYWdlcyBpcyBhbHNvIGZpbmUgc2luY2Vcbm1tL21lbW9yeS1mYWlsdXJlLmM6MjI0Olx0XHQgKiBkaXNzb2x2ZV9mcmVlX2h1Z2V0bGJfZm9saW8oKSByZXR1cm5zIDAgZm9yIG5vbi1odWdldGxiIGZvbGlvcyBhcyB3ZWxsLlxubW0vbWVtb3J5LWZhaWx1cmUuYy0yMjUtXHRcdCAqL1xuLS1cbm1tL21lbW9yeV9ob3RwbHVnLmM9MTkwMz1pbnQgb2ZmbGluZV9wYWdlcyh1bnNpZ25lZCBsb25nIHN0YXJ0X3BmbiwgdW5zaWduZWQgbG9uZyBucl9wYWdlcyxcbi0tXG5tbS9tZW1vcnlfaG90cGx1Zy5jLTIwMzQtXHRcdCAqL1xubW0vbWVtb3J5X2hvdHBsdWcuYzoyMDM1Olx0XHRyZXQgPSBkaXNzb2x2ZV9mcmVlX2h1Z2V0bGJfZm9saW9zKHN0YXJ0X3BmbiwgZW5kX3Bmbik7XG5tbS9tZW1vcnlfaG90cGx1Zy5jLTIwMzYtXHRcdGlmIChyZXQpIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNSAxODoyMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTQ5OAoJCQkJCQkJb3V0cHV0OiAxOQoJCQkJCQkJdGhvdWdodHM6IDExNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEltcGFjdCBvZiB0aGUgTWVtb3J5IE1hbmFnZW1lbnQgUGF0Y2gqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyBkZWZpbml0ZWx5IGZ1bmN0aW9uYWwg4oCTIGl0JiMzOTtzIG5vdCBqdXN0IGEgcmVmYWN0b3IuIEl0JiMzOTtzIHRvdWNoaW5nIHNvbWUgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBiaXRzLiBJdCBzZWVtcyB0byBiZSBjaGFuZ2luZyB0aGUgYmVoYXZpb3Igb2YgdGhlIG1lbW9yeSBmYWlsdXJlIGhhbmRsaW5nLCBwYXJ0aWN1bGFybHkgYXJvdW5kIGhvdyB3ZSBkZWFsIHdpdGggaHVnZSBwYWdlcy4gSXQmIzM5O3MgYWxzbyBtYWtpbmcgYWRqdXN0bWVudHMgdG8gdGhlIGJ1ZGR5IGFsbG9jYXRvciBhbmQgaG93IGl0IHByZXBzIHBhZ2VzIGZvciBmcmVlaW5nLCBzcGVjaWZpY2FsbHkgd2hlbiBoYXJkd2FyZS1wb2lzb25lZCBzdWJwYWdlcyBhcmUgaW52b2x2ZWQuIFRoYXQmIzM5O3MgYSBjcml0aWNhbCBhcmVhLCB3ZSBuZWVkIHRvIGJlIHZlcnkgY2FyZWZ1bCB0aGF0IHRoaXMgZG9lc24mIzM5O3QgaW50cm9kdWNlIGFueSByZWdyZXNzaW9ucy4KClRoZSBidWlsZCBkZXBlbmRlbmNpZXMgbG9vayBwcmV0dHkgY2xlYXIuIEl0JiMzOTtzIGV4cGVjdGluZyBgTUVNT1JZX0ZBSUxVUkVgIGVuYWJsZWQsIHdoaWNoIGlzIHN0YW5kYXJkIHdoZW4gd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCB0aGlzIGxldmVsIG9mIGhhcmR3YXJlLXJlbGF0ZWQgaXNzdWVzLiBUaGUgcHJlc2VuY2Ugb2YgYEhVR0VUTEJfUEFHRWAgaXMgYWxzbyBleHBlY3RlZCwgc2luY2Ugd2UmIzM5O3JlIGNsZWFybHkgZGVhbGluZyB3aXRoIGh1Z2UgcGFnZXMsIGFuZCB0aGF0IHdpbGwgbmVlZCB0byBiZSB3ZWxsLWRlZmluZWQuIFRoZW4sIHRoZXJlIGlzIHRoZSBwb3RlbnRpYWxseSBjb25kaXRpb25hbCBkZXBlbmRlbmN5IG9uIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAsIHdoaWNoIHNlZW1zIGxpa2VseSwgZ2l2ZW4gdGhlIGAjaWZgIHN0YXRlbWVudC4gT2YgY291cnNlLCB0aGUgbG9naWMgaXMgaGFuZGxpbmcgdGhlIE9SIGNhc2Ugb2YgZWl0aGVyIG9mIHRob3NlLgoKSSYjMzk7bSBnb2luZyB0byBqdW1wIGludG8gYG1tL21lbW9yeS1mYWlsdXJlLmNgIGFuZCB0YWtlIGEgbG9vayBhdCB0aGUgS2NvbmZpZyBmaWxlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZXhhY3QgZGVwZW5kZW5jaWVzIGFuZCBhbnkgcG90ZW50aWFsIGNvbmZpZ3VyYXRpb24gY29uZmxpY3RzIGJlZm9yZSBJIHN0YXJ0IGxvb2tpbmcgYXQgdGhlIGNvZGUgaXRzZWxmLiBUaGUgS2NvbmZpZyB3aWxsIHRlbGwgdGhlIHN0b3J5IG9mIHRoZSBhcmNoaXRlY3R1cmUmIzM5O3MgY29uZmlndXJhdGlvbiBuZWVkcywgYW5kIGdpdmUgY2x1ZXMgYWJvdXQgdGhlIG92ZXJhbGwgaW1wYWN0IG9mIHRoZSBwYXRjaC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDUgMTg6MjE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE1FTU9SWV9GQUlMVVJFJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL0tjb25maWc9Nzc0PWNvbmZpZyBBUkNIX1NVUFBPUlRTX01FTU9SWV9GQUlMVVJFXG4tLVxubW0vS2NvbmZpZy03NzYtXG5tbS9LY29uZmlnOjc3Nzpjb25maWcgTUVNT1JZX0ZBSUxVUkVcbm1tL0tjb25maWctNzc4LVx0ZGVwZW5kcyBvbiBNTVVcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDUgMTg6MjE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTIwMDkKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiAxNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzOgoKKipEaXZpbmcgaW50byBgSFVHRVRMQl9QQUdFYCoqCgpPa2F5LCB0aW1lIHRvIGRpZyBpbnRvIHRoZSBgSFVHRVRMQl9QQUdFYCBLY29uZmlnIG9wdGlvbi4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgdW5kZXJzdGFuZGluZyBvZiBob3cgdGhpcyBpcyBjb25maWd1cmVkIGFuZCBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIHJlc3Qgb2YgdGhlIHN5c3RlbS4gSSBzaG91bGQgcHJvYmFibHkgc3RhcnQgYnkgcXVpY2tseSB2ZXJpZnlpbmcgaXRzIGRlcGVuZGVuY2llcyBhbmQgd2hhdCBhcmNoaXRlY3R1cmVzIGFyZSBzdXBwb3J0ZWQuIEEgcXVpY2sgZ2xhbmNlIGF0IHRoZSByZWxldmFudCBkb2N1bWVudGF0aW9uIHdvdWxkIGJlIGEgZ29vZCBpZGVhIHRvIGNvbmZpcm0gSSYjMzk7bSBvbiB0aGUgcmlnaHQgdHJhY2sgYmVmb3JlIGdvaW5nIGFueSBmdXJ0aGVyLiBUaGlzIGlzIGEgY3JpdGljYWwgYnVpbGRpbmcgYmxvY2sgZm9yIGxhcmdlIG1lbW9yeSBwYWdlcywgc28gdW5kZXJzdGFuZGluZyB0aGUgc3BlY2lmaWNzIGlzIGltcG9ydGFudCBmb3IgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIHBlcmZvcm1hbmNlIHR1bmluZy4gSSBhbHNvIHNob3VsZCBjb25zaWRlciB0aGUgaW1wbGljYXRpb25zIG9mIGVuYWJsaW5nIG9yIGRpc2FibGluZyB0aGlzIGZlYXR1cmUgaW4gcmVsYXRpb24gdG8gb3RoZXIgc2V0dGluZ3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA1IDE4OjIxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBIVUdFVExCX1BBR0UmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9zaC9tbS9LY29uZmlnPTE1OD1jaG9pY2Vcbi0tXG5hcmNoL3NoL21tL0tjb25maWctMTYzLVxuYXJjaC9zaC9tbS9LY29uZmlnOjE2NDpjb25maWcgSFVHRVRMQl9QQUdFX1NJWkVfNjRLXG5hcmNoL3NoL21tL0tjb25maWctMTY1LVx0Ym9vbCBcJiMzNDs2NGtCXCYjMzQ7XG4tLVxuYXJjaC9zaC9tbS9LY29uZmlnLTE2Ny1cbmFyY2gvc2gvbW0vS2NvbmZpZzoxNjg6Y29uZmlnIEhVR0VUTEJfUEFHRV9TSVpFXzI1NktcbmFyY2gvc2gvbW0vS2NvbmZpZy0xNjktXHRib29sIFwmIzM0OzI1NmtCXCYjMzQ7XG4tLVxuYXJjaC9zaC9tbS9LY29uZmlnLTE3MS1cbmFyY2gvc2gvbW0vS2NvbmZpZzoxNzI6Y29uZmlnIEhVR0VUTEJfUEFHRV9TSVpFXzFNQlxuYXJjaC9zaC9tbS9LY29uZmlnLTE3My1cdGJvb2wgXCYjMzQ7MU1CXCYjMzQ7XG5hcmNoL3NoL21tL0tjb25maWctMTc0LVxuYXJjaC9zaC9tbS9LY29uZmlnOjE3NTpjb25maWcgSFVHRVRMQl9QQUdFX1NJWkVfNE1CXG5hcmNoL3NoL21tL0tjb25maWctMTc2LVx0Ym9vbCBcJiMzNDs0TUJcJiMzNDtcbi0tXG5hcmNoL3NoL21tL0tjb25maWctMTc4LVxuYXJjaC9zaC9tbS9LY29uZmlnOjE3OTpjb25maWcgSFVHRVRMQl9QQUdFX1NJWkVfNjRNQlxuYXJjaC9zaC9tbS9LY29uZmlnLTE4MC1cdGJvb2wgXCYjMzQ7NjRNQlwmIzM0O1xuLS1cbmZzL0tjb25maWc9MjYyPWlmIEhVR0VUTEJGU1xuZnMvS2NvbmZpZzoyNjM6Y29uZmlnIEhVR0VUTEJfUEFHRV9PUFRJTUlaRV9WTUVNTUFQX0RFRkFVTFRfT05cbmZzL0tjb25maWctMjY0LVx0Ym9vbCBcJiMzNDtIdWdlVExCIFZtZW1tYXAgT3B0aW1pemF0aW9uIChIVk8pIGRlZmF1bHRzIHRvIG9uXCYjMzQ7XG4tLVxuZnMvS2NvbmZpZz0yNzE9ZW5kaWYgIyBIVUdFVExCRlNcbmZzL0tjb25maWctMjcyLVxuZnMvS2NvbmZpZzoyNzM6Y29uZmlnIEhVR0VUTEJfUEFHRVxuZnMvS2NvbmZpZy0yNzQtXHRkZWZfYm9vbCBIVUdFVExCRlNcbi0tXG5mcy9LY29uZmlnLTI3Ni1cbmZzL0tjb25maWc6Mjc3OmNvbmZpZyBIVUdFVExCX1BBR0VfT1BUSU1JWkVfVk1FTU1BUFxuZnMvS2NvbmZpZy0yNzgtXHRkZWZfYm9vbCBIVUdFVExCX1BBR0Vcbi0tXG5tbS9LY29uZmlnPTcwNj1jb25maWcgQVJDSF9TVVBQT1JUU19QTURfU09GVExFQUZcbi0tXG5tbS9LY29uZmlnLTcwOC1cbm1tL0tjb25maWc6NzA5OmNvbmZpZyBIVUdFVExCX1BBR0VfU0laRV9WQVJJQUJMRVxubW0vS2NvbmZpZy03MTAtXHRkZWZfYm9vbCBuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA1IDE4OjIxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyNzg4CgkJCQkJCQlvdXRwdXQ6IDE5CgkJCQkJCQl0aG91Z2h0czogMjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgSSBzZWUgaXQ6CgoqKkRpZ2dpbmcgaW50byBIdWdlIFBhZ2VzKioKCk9rYXksIHNvIGBIVUdFVExCX1BBR0VgIGlzIHRoZSBmZWF0dXJlIHdlJiMzOTtyZSBpbnRlcmVzdGVkIGluLCBhbmQgSSBrbm93IGl0IHJlbGllcyBvbiBgSFVHRVRMQkZTYC4gUmlnaHQuIE1ha2VzIHNlbnNlLiBUbyByZWFsbHkgdW5kZXJzdGFuZCB0aGUgd2hvbGUgcGljdHVyZSwgSSBuZWVkIHRvIHZlcmlmeSB0aGF0IGRlcGVuZGVuY3kgYW5kIHRoZW4sIG5hdHVyYWxseSwgZGl2ZSBpbnRvIGBIVUdFVExCRlNgIGl0c2VsZi4gVGltZSB0byBzdGFydCB0aGVyZS4gTGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIHdoYXQgd2l0aCB0aGUgdW5kZXJseWluZyBmaWxlIHN5c3RlbS4gTmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIGlzIGFsbCB0aWVkIHRvZ2V0aGVyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNSAxODoyMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgSFVHRVRMQkZTJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL0tjb25maWc9MjQ3PWNvbmZpZyBBUkNIX1NVUFBPUlRTX0hVR0VUTEJGU1xuLS1cbmZzL0tjb25maWctMjQ5LVxuZnMvS2NvbmZpZzoyNTA6bWVudWNvbmZpZyBIVUdFVExCRlNcbmZzL0tjb25maWctMjUxLVx0Ym9vbCBcJiMzNDtIdWdlVExCIGZpbGUgc3lzdGVtIHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDUgMTg6MjI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTMwMjcKCQkJCQkJCW91dHB1dDogMjIKCQkJCQkJCXRob3VnaHRzOiAzNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIGNvbmZpZyBvcHRpb25zLCB0aGlua2luZyBhYm91dCB0aGVtIGFzIEkgd291bGQgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRoZW06CgoqKk5hdmlnYXRpbmcgdGhlIE5VTUEgTGFuZHNjYXBlOiBDb25maWd1cmluZyBIdWdlIFBhZ2VzIGFuZCBNZW1vcnkgTWFuYWdlbWVudCoqCgpBbHJpZ2h0LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgaG93IG1lbW9yeSBpcyBtYW5hZ2VkLCBhbmQgc3BlY2lmaWNhbGx5IGhvdyB3ZSBjYW4gYmVzdCBsZXZlcmFnZSBodWdlIHBhZ2VzLiBJdCBsb29rcyBsaWtlIHRoZSBrZXkgc3RhcnRpbmcgcG9pbnRzIGFyZSBnb2luZyB0byBiZSBgSFVHRVRMQkZTYCB0byBhY3R1YWxseSBlbmFibGUgdGhlIGh1Z2UgcGFnZSBmaWxlIHN5c3RlbSwgYW5kIHRoZW4gYWxzbyBgTUVNT1JZX0ZBSUxVUkVgIC0gbGlrZWx5IHRvIGhhbmRsZSBjYXNlcyB3aGVyZSBhbGxvY2F0aW9uIGZhaWxzLCB3aGljaCBpcyBpbXBvcnRhbnQgZm9yIGFueSByb2J1c3Qgc3lzdGVtLgoKQnV0IGJlZm9yZSBkaXZpbmcgdG9vIGRlZXAsIEkgbmVlZCB0byBjaGVjayBzb21ldGhpbmcgY3JpdGljYWwgdG8gbW9kZXJuIHBlcmZvcm1hbmNlOiBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGV0aGVyIHdlIGNhbiByZWx5IG9uIHRoZSBzeXN0ZW0gYXV0b21hdGljYWxseSBtYW5hZ2luZyB0aGUgY3JlYXRpb24gYW5kIHVzZSBvZiBodWdlIHBhZ2VzLCBvciBpZiB3ZSBuZWVkIHRvIGJlIG1vcmUgaGFuZHMtb24gd2l0aCB0aGUgY29uZmlndXJhdGlvbiB0byBhY2hpZXZlIG9wdGltYWwgcmVzdWx0cy4gSXQmIzM5O3MgYSB0cmFkZS1vZmYgYmV0d2VlbiBjb252ZW5pZW5jZSBhbmQgY29udHJvbCwgYW5kIGZpZ3VyaW5nIG91dCB3aGF0IHRoZSBpZGVhbCBiYWxhbmNlIGlzIGluICp0aGlzKiBzcGVjaWZpYyBjb250ZXh0IGlzIHRoZSBuZXh0IHN0ZXAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA1IDE4OjIyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9LY29uZmlnPTg0Mz1jb25maWcgTU1fSURcbi0tXG5tbS9LY29uZmlnLTg0NS1cbm1tL0tjb25maWc6ODQ2Om1lbnVjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0Vcbm1tL0tjb25maWctODQ3LVx0Ym9vbCBcJiMzNDtUcmFuc3BhcmVudCBIdWdlcGFnZSBTdXBwb3J0XCYjMzQ7XG4tLVxubW0vS2NvbmZpZz04NjQ9Y2hvaWNlXG4tLVxubW0vS2NvbmZpZy04NjktXG5tbS9LY29uZmlnOjg3MDpcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9BTFdBWVNcbm1tL0tjb25maWctODcxLVx0XHRib29sIFwmIzM0O2Fsd2F5c1wmIzM0O1xuLS1cbm1tL0tjb25maWctODc2LVxubW0vS2NvbmZpZzo4Nzc6XHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfTUFEVklTRVxubW0vS2NvbmZpZy04NzgtXHRcdGJvb2wgXCYjMzQ7bWFkdmlzZVwmIzM0O1xuLS1cbm1tL0tjb25maWctODg1LVxubW0vS2NvbmZpZzo4ODY6XHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfTkVWRVJcbm1tL0tjb25maWctODg3LVx0XHRib29sIFwmIzM0O25ldmVyXCYjMzQ7XG4tLVxubW0vS2NvbmZpZz04OTM9Y2hvaWNlXG4tLVxubW0vS2NvbmZpZy05MDItXG5tbS9LY29uZmlnOjkwMzpcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9TSE1FTV9IVUdFX05FVkVSXG5tbS9LY29uZmlnLTkwNC1cdFx0Ym9vbCBcJiMzNDtuZXZlclwmIzM0O1xuLS1cbm1tL0tjb25maWctOTEyLVxubW0vS2NvbmZpZzo5MTM6XHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfU0hNRU1fSFVHRV9BTFdBWVNcbm1tL0tjb25maWctOTE0LVx0XHRib29sIFwmIzM0O2Fsd2F5c1wmIzM0O1xuLS1cbm1tL0tjb25maWctOTIwLVxubW0vS2NvbmZpZzo5MjE6XHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfU0hNRU1fSFVHRV9XSVRISU5fU0laRVxubW0vS2NvbmZpZy05MjItXHRcdGJvb2wgXCYjMzQ7d2l0aGluX3NpemVcJiMzNDtcbi0tXG5tbS9LY29uZmlnLTkyOC1cbm1tL0tjb25maWc6OTI5Olx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX1NITUVNX0hVR0VfQURWSVNFXG5tbS9LY29uZmlnLTkzMC1cdFx0Ym9vbCBcJiMzNDthZHZpc2VcJiMzNDtcbi0tXG5tbS9LY29uZmlnPTkzOD1jaG9pY2Vcbi0tXG5tbS9LY29uZmlnLTk0Ny1cbm1tL0tjb25maWc6OTQ4Olx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX1RNUEZTX0hVR0VfTkVWRVJcbm1tL0tjb25maWctOTQ5LVx0XHRib29sIFwmIzM0O25ldmVyXCYjMzQ7XG4tLVxubW0vS2NvbmZpZy05NTYtXG5tbS9LY29uZmlnOjk1NzpcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9UTVBGU19IVUdFX0FMV0FZU1xubW0vS2NvbmZpZy05NTgtXHRcdGJvb2wgXCYjMzQ7YWx3YXlzXCYjMzQ7XG4tLVxubW0vS2NvbmZpZy05NjQtXG5tbS9LY29uZmlnOjk2NTpcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9UTVBGU19IVUdFX1dJVEhJTl9TSVpFXG5tbS9LY29uZmlnLTk2Ni1cdFx0Ym9vbCBcJiMzNDt3aXRoaW5fc2l6ZVwmIzM0O1xuLS1cbm1tL0tjb25maWctOTcyLVxubW0vS2NvbmZpZzo5NzM6XHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfVE1QRlNfSFVHRV9BRFZJU0Vcbm1tL0tjb25maWctOTc0LVx0XHRib29sIFwmIzM0O2FkdmlzZVwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNSAxODoyMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDAxMAoJCQkJCQkJb3V0cHV0OiAxNDMKCQkJCQkJCXRob3VnaHRzOiAzNzYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIE1lbW9yeSBGYWlsdXJlIEhhbmRsaW5nIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHJlbGF0ZWQgdG8gbWVtb3J5IGZhaWx1cmUgaGFuZGxpbmcsIHNwZWNpZmljYWxseSBmb3IgSHVnZVRMQiBwYWdlcy4gVGhlIGNvbmZpZ3VyYXRpb25zIGludm9sdmVkIGFyZSBgTUVNT1JZX0ZBSUxVUkVgLCBgSFVHRVRMQkZTYCwgYW5kIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb3JlIGNoYW5nZXMgaGVyZS4KCk15IGZvY3VzIHNob3VsZCBiZSBvbiBob3cgdGhlIHN5c3RlbSBpcyBkZWFsaW5nIHdpdGggaGFyZHdhcmUtcG9pc29uZWQgc3VicGFnZXMgd2l0aGluIGNvbXBvdW5kIHBhZ2VzLiBJIHNlZSB0d28ga2V5IHN5bWJvbHMganVtcGluZyBvdXQgYXQgbWU6IGBfX2h1Z2VwYWdlX2hhbmRsZV9wb2lzb25gIGFuZCBgZnJlZV9oYXNfaHdwb2lzb25lZGAuIFRoZXNlIHNlZW0gdG8gYmUgdGllZCBkaXJlY3RseSB0byB0aGUgZXJyb3IgcGF0aHMsIHdoaWNoIGlzIGV4YWN0bHkgd2hlcmUgbXkgYXR0ZW50aW9uIHNob3VsZCBiZS4KCkkgYWxzbyBzZWUgdGhhdCBgZnJlZV9wYWdlc19zYW5pdGl6ZWAgaGFzIGJlZW4gYWRkZWQuIEhvd2V2ZXIsIHNpbmNlIGl0IGlzIGNhbGxlZCBmcm9tIGBfX2ZyZWVfcGFnZXNfcHJlcGFyZWAgYW5kIGBmcmVlX3ByZXBhcmVkX2NvbnRpZ19yYW5nZWAsIGl04oCZcyBsaWtlbHkgaW4gYSBob3QgcGF0aC4gV2hpbGUgaW1wb3J0YW50LCB0aGUgY2hhbmdlcyBoZXJlIGFyZSBwZXJoYXBzIG5vdCB0aGUgY29yZSBvZiAqdGhpcyogcGF0Y2gsIHRob3VnaCBJJiMzOTtsbCBrZWVwIHRoYXQgaW4gbWluZC4gYGZyZWVfaGFzX2h3cG9pc29uZWRgIHNlZW1zIG1vcmUgdGFyZ2V0ZWQgdG8gdGhlIHNwZWNpZmljIGVycm9yIGhhbmRsaW5nIHNjZW5hcmlvcywgYXMgZG9lcyBgX19odWdlcGFnZV9oYW5kbGVfcG9pc29uYC4KCk5vdywgSSBzaG91bGQgZXhhbWluZSBgbWVfaHVnZV9wYWdlYCwgYHRyeV9tZW1vcnlfZmFpbHVyZV9odWdldGxiYCwgYW5kIGBmb2xpb19jbGVhcl9odWdldGxiX2h3cG9pc29uYC4gVGhleSYjMzk7cmUgZXhpc3RpbmcgZnVuY3Rpb25zLCBidXQgdGhleSYjMzk7dmUgYmVlbiBtb2RpZmllZC4gVGhlIGZhY3QgdGhhdCB0aGV5IGFscmVhZHkgZXhpc3Qgc3VnZ2VzdHMgdGhpcyBpc24mIzM5O3QgZW50aXJlbHkgbmV3IGZ1bmN0aW9uYWxpdHksIGJ1dCBhbiBlbmhhbmNlbWVudCBvciByZWZpbmVtZW50LgoKSW4gZXNzZW5jZSwgdGhlIHBhdGNoIGlzIGFkZHJlc3NpbmcgaG93IHRvIHByb3Blcmx5IG1hbmFnZSBoZWFsdGh5IHZlcnN1cyBwb2lzb25lZCBzdWJwYWdlcyB3aXRoaW4gY29tcG91bmQgSHVnZVRMQiBwYWdlcyB3aGVuIG1lbW9yeSBmYWlsdXJlcyBvY2N1ci4gVGhlIGdvYWwgaXMgdG8gZW5zdXJlIHRoYXQgbm9uLXBvaXNvbmVkIHN1YnBhZ2VzIGFyZSBjb3JyZWN0bHkgZnJlZWQgYmFjayB0byB0aGUgYnVkZHkgYWxsb2NhdG9yLiBUaGlzIGFsc28gbWVhbnMgd2UgbmVlZCB0byBpc29sYXRlIHRoZSBwb2lzb25lZCBvbmVzLiBUaGlzIGlzIGEgY29yZSBNTSBhbmQgcGFnZSBhbGxvY2F0b3IgaXNzdWUsIGFuZCB0aGUgZm9jdXMgc2VlbXMgdG8gYmUgaW4gYG1tL21lbW9yeS1mYWlsdXJlLmNgIGFuZCBgbW0vcGFnZV9hbGxvYy5jYCwgYXMgSSYjMzk7ZCBleHBlY3QuCgpTbywgaW4gc3VtbWFyeSwgSSYjMzk7bSBjb25jZW50cmF0aW5nIG9uIGBfX2h1Z2VwYWdlX2hhbmRsZV9wb2lzb25gIGFuZCBgZnJlZV9oYXNfaHdwb2lzb25lZGAgYXMgdGhlIGJlc3QgcG9pbnRzIHRvIGFuYWx5emUgdGhlIHBhdGNo4oCZcyBjb3JlIGxvZ2ljLCBhcyB3ZWxsIGFzIHRoZSBjaGFuZ2VzIHRvIGBtZV9odWdlX3BhZ2VgLCBgdHJ5X21lbW9yeV9mYWlsdXJlX2h1Z2V0bGJgLCBhbmQgYGZvbGlvX2NsZWFyX2h1Z2V0bGJfaHdwb2lzb25gLiBJIG5lZWQgdG8gc2VlIGV4YWN0bHkgaG93IHRoZXNlIGZ1bmN0aW9ucyBpbnRlcmFjdCB0byBhY2hpZXZlIHRoaXMgbW9yZSBncmFudWxhciBhbmQgcm9idXN0IGhhbmRsaW5nIG9mIGhhcmR3YXJlLXBvaXNvbmVkIHBhZ2VzLgpMZXQmIzM5O3MgY2FsbCBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNSAxODoyMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TUVNT1JZX0ZBSUxVUkUmIzM0OywKICAgICYjMzQ7SFVHRVRMQkZTJiMzNDssCiAgICAmIzM0O1RSQU5TUEFSRU5UX0hVR0VQQUdFJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7X19odWdlcGFnZV9oYW5kbGVfcG9pc29uJiMzNDssCiAgICAmIzM0O2ZyZWVfaGFzX2h3cG9pc29uZWQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgbWVtb3J5IGZhaWx1cmUgaGFuZGxpbmcgZm9yIEh1Z2VUTEIgcGFnZXMsIGVuc3VyaW5nIHRoYXQgaGVhbHRoeSBzdWJwYWdlcyBvZiBhIGNvbXBvdW5kIHBhZ2Ugd2l0aCBoYXJkd2FyZSBwb2lzb25lZCBzdWJwYWdlcyBhcmUgY29ycmVjdGx5IGZyZWVkIHRvIHRoZSBidWRkeSBhbGxvY2F0b3IsIHdoaWxlIGlzb2xhdGluZyB0aGUgcG9pc29uZWQgb25lcy4gVGhpcyBpbnZvbHZlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gY29yZSBNTSBhbmQgcGFnZSBhbGxvY2F0b3IgbG9naWMsIHNwZWNpZmljYWxseSBpbiBtbS9tZW1vcnktZmFpbHVyZS5jIGFuZCBtbS9wYWdlX2FsbG9jLmMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01FTU9SWV9GQUlMVVJFJiMzNDssCiAgICAmIzM0O0hVR0VUTEJGUyYjMzQ7LAogICAgJiMzNDtUUkFOU1BBUkVOVF9IVUdFUEFHRSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O19faHVnZXBhZ2VfaGFuZGxlX3BvaXNvbiYjMzQ7LAogICAgJiMzNDtmcmVlX2hhc19od3BvaXNvbmVkJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIG1lbW9yeSBmYWlsdXJlIGhhbmRsaW5nIGZvciBIdWdlVExCIHBhZ2VzLCBlbnN1cmluZyB0aGF0IGhlYWx0aHkgc3VicGFnZXMgb2YgYSBjb21wb3VuZCBwYWdlIHdpdGggaGFyZHdhcmUgcG9pc29uZWQgc3VicGFnZXMgYXJlIGNvcnJlY3RseSBmcmVlZCB0byB0aGUgYnVkZHkgYWxsb2NhdG9yLCB3aGlsZSBpc29sYXRpbmcgdGhlIHBvaXNvbmVkIG9uZXMuIFRoaXMgaW52b2x2ZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIGNvcmUgTU0gYW5kIHBhZ2UgYWxsb2NhdG9yIGxvZ2ljLCBzcGVjaWZpY2FsbHkgaW4gbW0vbWVtb3J5LWZhaWx1cmUuYyBhbmQgbW0vcGFnZV9hbGxvYy5jLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDctMDVUMTg6MjE6MjQuNDMwNzkyOTEzWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTI2NDI2MDkxNDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTUVNT1JZX0ZBSUxVUkVcIixcbiAgICBcIkhVR0VUTEJGU1wiLFxuICAgIFwiVFJBTlNQQVJFTlRfSFVHRVBBR0VcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJfX2h1Z2VwYWdlX2hhbmRsZV9wb2lzb25cIixcbiAgICBcImZyZWVfaGFzX2h3cG9pc29uZWRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBtZW1vcnkgZmFpbHVyZSBoYW5kbGluZyBmb3IgSHVnZVRMQiBwYWdlcywgZW5zdXJpbmcgdGhhdCBoZWFsdGh5IHN1YnBhZ2VzIG9mIGEgY29tcG91bmQgcGFnZSB3aXRoIGhhcmR3YXJlIHBvaXNvbmVkIHN1YnBhZ2VzIGFyZSBjb3JyZWN0bHkgZnJlZWQgdG8gdGhlIGJ1ZGR5IGFsbG9jYXRvciwgd2hpbGUgaXNvbGF0aW5nIHRoZSBwb2lzb25lZCBvbmVzLiBUaGlzIGludm9sdmVzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byBjb3JlIE1NIGFuZCBwYWdlIGFsbG9jYXRvciBsb2dpYywgc3BlY2lmaWNhbGx5IGluIG1tL21lbW9yeS1mYWlsdXJlLmMgYW5kIG1tL3BhZ2VfYWxsb2MuYy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDVUMTg6MjE6MjQuNDMwODAxMDY0WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODcxMzQ0OTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA5Nzc1NDVjOTg5NTY5MTNlMDI2ZDM0ZjUyNTI5OWFiOTc5MDZjY2ZiXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBTdW4gSnVsIDUgMTg6MjE6MjMgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmggYi9pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaFxcbmluZGV4IDdhODYzNTcyYWRjZTc5Li4zY2Q1MjRlMDRhMzBiYiAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaFxcbisrKyBiL2luY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oXFxuQEAgLTg3OSw3ICs4NzksNyBAQCBGT0xJT19GTEFHX0ZBTFNFKHBhcnRpYWxseV9tYXBwZWQpXFxuIFxcbiAjZGVmaW5lIFBHX2hlYWRfbWFzayAoKDFVTCBcXHUwMDNjXFx1MDAzYyBQR19oZWFkKSlcXG4gXFxuLSNpZiBkZWZpbmVkKENPTkZJR19NRU1PUllfRkFJTFVSRSkgXFx1MDAyNlxcdTAwMjYgZGVmaW5lZChDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UpXFxuKyNpZiBkZWZpbmVkKENPTkZJR19NRU1PUllfRkFJTFVSRSkgXFx1MDAyNlxcdTAwMjYgKGRlZmluZWQoQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFKSB8fCBkZWZpbmVkKENPTkZJR19IVUdFVExCX1BBR0UpKVxcbiAvKlxcbiAgKiBQYWdlSGFzSFdQb2lzb25lZCBpbmRpY2F0ZXMgdGhhdCBhdCBsZWFzdCBvbmUgc3VicGFnZSBpcyBod3BvaXNvbmVkIGluIHRoZVxcbiAgKiBjb21wb3VuZCBwYWdlLlxcbmRpZmYgLS1naXQgYS9tbS9tZW1vcnktZmFpbHVyZS5jIGIvbW0vbWVtb3J5LWZhaWx1cmUuY1xcbmluZGV4IDQ5MTZhYjE0NTMyNTczLi5hMzdiNjc1NTA3MTgyNyAxMDA2NDRcXG4tLS0gYS9tbS9tZW1vcnktZmFpbHVyZS5jXFxuKysrIGIvbW0vbWVtb3J5LWZhaWx1cmUuY1xcbkBAIC0xNzQsNiArMTc0LDMwIEBAIHN0YXRpYyBzdHJ1Y3QgcmJfcm9vdF9jYWNoZWQgcGZuX3NwYWNlX2l0cmVlID0gUkJfUk9PVF9DQUNIRUQ7XFxuIHN0YXRpYyBERUZJTkVfTVVURVgocGZuX3NwYWNlX2xvY2spO1xcbiBcXG4gLypcXG4rICogT25seSBmb3IgYSBIdWdlVExCIHBhZ2UgYmVpbmcgaGFuZGxlZCBieSBtZW1vcnlfZmFpbHVyZSgpLiBUaGUga2V5XFxuKyAqIGRpZmZlcmVuY2UgdG8gc29mdF9vZmZsaW5lKCkgaXMgdGhhdCwgbm8gSFdQb2lzb24gc3VicGFnZSB3aWxsIG1ha2VcXG4rICogaW50byBidWRkeSBhbGxvY2F0b3IgYWZ0ZXIgYSBzdWNjZXNzZnVsIGRpc3NvbHZlX2ZyZWVfaHVnZXRsYl9mb2xpbygpLFxcbisgKiBzbyB0YWtlX3BhZ2Vfb2ZmX2J1ZGR5KCkgaXMgdW5uZWNlc3NhcnkuXFxuKyAqL1xcbitzdGF0aWMgaW50IF9faHVnZXBhZ2VfaGFuZGxlX3BvaXNvbihzdHJ1Y3QgcGFnZSAqcGFnZSlcXG4re1xcbitcXHRzdHJ1Y3QgZm9saW8gKmZvbGlvID0gcGFnZV9mb2xpbyhwYWdlKTtcXG4rXFxuK1xcdC8qXFxuK1xcdCAqIENhbid0IHVzZSBkaXNzb2x2ZV9mcmVlX2h1Z2V0bGJfZm9saW8oKSB3aXRob3V0IGEgcmVsaWFibGVcXG4rXFx0ICogcmF3X2h3cF9saXN0IHRlbGxpbmcgd2hpY2ggc3VicGFnZSBpcyBIV1BvaXNvbi4gU28gZG8gbm90IGZyZWVcXG4rXFx0ICogdGhlbSB0byB0aGUgYnVkZHkgYWxsb2NhdG9yLiBkZXF1ZXVlX2h1Z2V0bGJfZm9saW9fbm9kZV9leGFjdCgpXFxuK1xcdCAqIHdpbGwgZW5zdXJlIHRvIG5ldmVyIHJlLWFsbG9jYXRlIHRoaXMgaHVnZXBhZ2UuXFxuK1xcdCAqL1xcbitcXHRpZiAoZm9saW9fdGVzdF9odWdldGxiX3Jhd19od3BfdW5yZWxpYWJsZShmb2xpbykpXFxuK1xcdFxcdC8qIHJhd19od3BfbGlzdCBiZWNvbWVzIHVucmVsaWFibGUgd2hlbiBrbWFsbG9jKCkgZmFpbHMuICovXFxuK1xcdFxcdHJldHVybiAtRU5PTUVNO1xcbitcXG4rXFx0cmV0dXJuIGRpc3NvbHZlX2ZyZWVfaHVnZXRsYl9mb2xpbyhmb2xpbyk7XFxuK31cXG4rXFxuKy8qXFxuKyAqIE9ubHkgZm9yIGEgZnJlZSBvciBIdWdlVExCIHBhZ2UgYmVpbmcgaGFuZGxlZCBieSBzb2Z0X29mZmxpbmUoKS5cXG4gICogUmV0dXJuIHZhbHVlczpcXG4gICogICAxOiAgIHRoZSBwYWdlIGlzIGRpc3NvbHZlZCAoaWYgbmVlZGVkKSBhbmQgdGFrZW4gb2ZmIGZyb20gYnVkZHksXFxuICAqICAgMDogICB0aGUgcGFnZSBpcyBkaXNzb2x2ZWQgKGlmIG5lZWRlZCkgYW5kIG5vdCB0YWtlbiBvZmYgZnJvbSBidWRkeSxcXG5AQCAtMTE2NiwxMSArMTE5MCwxMSBAQCBzdGF0aWMgaW50IG1lX2h1Z2VfcGFnZShzdHJ1Y3QgcGFnZV9zdGF0ZSAqcHMsIHN0cnVjdCBwYWdlICpwKVxcbiBcXHRcXHQgKiBzdWJwYWdlcy5cXG4gXFx0XFx0ICovXFxuIFxcdFxcdGZvbGlvX3B1dChmb2xpbyk7XFxuLVxcdFxcdGlmIChfX3BhZ2VfaGFuZGxlX3BvaXNvbihwKSBcXHUwMDNlIDApIHtcXG4rXFx0XFx0aWYgKF9faHVnZXBhZ2VfaGFuZGxlX3BvaXNvbihwKSkge1xcbitcXHRcXHRcXHRyZXMgPSBNRl9GQUlMRUQ7XFxuK1xcdFxcdH0gZWxzZSB7XFxuIFxcdFxcdFxcdHBhZ2VfcmVmX2luYyhwKTtcXG4gXFx0XFx0XFx0cmVzID0gTUZfUkVDT1ZFUkVEO1xcbi1cXHRcXHR9IGVsc2Uge1xcbi1cXHRcXHRcXHRyZXMgPSBNRl9GQUlMRUQ7XFxuIFxcdFxcdH1cXG4gXFx0fVxcbiBcXG5AQCAtMjAwOCw2ICsyMDMyLDcgQEAgdm9pZCBmb2xpb19jbGVhcl9odWdldGxiX2h3cG9pc29uKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuIFxcdGlmIChmb2xpb190ZXN0X2h1Z2V0bGJfdm1lbW1hcF9vcHRpbWl6ZWQoZm9saW8pKVxcbiBcXHRcXHRyZXR1cm47XFxuIFxcdGZvbGlvX2NsZWFyX2h3cG9pc29uKGZvbGlvKTtcXG4rXFx0Zm9saW9fc2V0X2hhc19od3BvaXNvbmVkKGZvbGlvKTtcXG4gXFx0Zm9saW9fZnJlZV9yYXdfaHdwKGZvbGlvLCB0cnVlKTtcXG4gfVxcbiBcXG5AQCAtMjEzMiwxMSArMjE1NywxMSBAQCBzdGF0aWMgaW50IHRyeV9tZW1vcnlfZmFpbHVyZV9odWdldGxiKHVuc2lnbmVkIGxvbmcgcGZuLCBpbnQgZmxhZ3MpXFxuIFxcdCAqL1xcbiBcXHRpZiAocmVzID09IE1GX0hVR0VUTEJfRlJFRUQpIHtcXG4gXFx0XFx0Zm9saW9fdW5sb2NrKGZvbGlvKTtcXG4tXFx0XFx0aWYgKF9fcGFnZV9oYW5kbGVfcG9pc29uKHApIFxcdTAwM2UgMCkge1xcbitcXHRcXHRpZiAoX19odWdlcGFnZV9oYW5kbGVfcG9pc29uKHApKSB7XFxuK1xcdFxcdFxcdHJlcyA9IE1GX0ZBSUxFRDtcXG4rXFx0XFx0fSBlbHNlIHtcXG4gXFx0XFx0XFx0cGFnZV9yZWZfaW5jKHApO1xcbiBcXHRcXHRcXHRyZXMgPSBNRl9SRUNPVkVSRUQ7XFxuLVxcdFxcdH0gZWxzZSB7XFxuLVxcdFxcdFxcdHJlcyA9IE1GX0ZBSUxFRDtcXG4gXFx0XFx0fVxcbiBcXHRcXHRyZXR1cm4gYWN0aW9uX3Jlc3VsdChwZm4sIE1GX01TR19GUkVFX0hVR0UsIHJlcyk7XFxuIFxcdH1cXG5kaWZmIC0tZ2l0IGEvbW0vcGFnZV9hbGxvYy5jIGIvbW0vcGFnZV9hbGxvYy5jXFxuaW5kZXggNzYyZDliNmJjNzkyZjEuLjY0MTg4OTZjOWRmNjYwIDEwMDY0NFxcbi0tLSBhL21tL3BhZ2VfYWxsb2MuY1xcbisrKyBiL21tL3BhZ2VfYWxsb2MuY1xcbkBAIC05Myw2ICs5MywxMyBAQCB0eXBlZGVmIGludCBfX2JpdHdpc2UgZnBpX3Q7XFxuIC8qIGZyZWVfcGFnZXNfcHJlcGFyZSgpIGhhcyBhbHJlYWR5IGJlZW4gY2FsbGVkIGZvciBwYWdlKHMpIGJlaW5nIGZyZWVkLiAqL1xcbiAjZGVmaW5lIEZQSV9QUkVQQVJFRFxcdFxcdCgoX19mb3JjZSBmcGlfdClCSVQoMykpXFxuIFxcbisvKlxcbisgKiBQYWdlKHMpIG5lZWRzIHRvIGdvIHRocm91Z2ggZnJlZV9wYWdlc19zYW5pdGl6ZSgpLCBmb3IgZXhhbXBsZSwgYmVjYXVzZVxcbisgKiBmcmVlX3BhZ2VzX3ByZXBhcmUoKSBjYW5ub3Qgc2FuaXRpemUgYSBoaWdoLW9yZGVyIHBhZ2UgYmxvY2sgZHVlIHRvXFxuKyAqIGhhcmR3YXJlIGVycm9yIGluIHNvbWUgcGFnZShzKS5cXG4rICovXFxuKyNkZWZpbmUgRlBJX1NBTklUSVpFXFx0XFx0KChfX2ZvcmNlIGZwaV90KUJJVCg0KSlcXG4rXFxuIC8qIHByZXZlbnQgXFx1MDAzZTEgX3VwZGF0ZXJfIG9mIHpvbmUgcGVyY3B1IHBhZ2VzZXQgLVxcdTAwM2VoaWdoIGFuZCAtXFx1MDAzZWJhdGNoIGZpZWxkcyAqL1xcbiBzdGF0aWMgREVGSU5FX01VVEVYKHBjcF9iYXRjaF9oaWdoX2xvY2spO1xcbiAjZGVmaW5lIE1JTl9QRVJDUFVfUEFHRUxJU1RfSElHSF9GUkFDVElPTiAoOClcXG5AQCAtMjEwLDYgKzIxNyw4IEBAIGdmcF90IGdmcF9hbGxvd2VkX21hc2sgX19yZWFkX21vc3RseSA9IEdGUF9CT09UX01BU0s7XFxuIHVuc2lnbmVkIGludCBwYWdlYmxvY2tfb3JkZXIgX19yZWFkX21vc3RseTtcXG4gI2VuZGlmXFxuIFxcbitzdGF0aWMgdm9pZCBmcmVlX2hhc19od3BvaXNvbmVkKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBpbnQgb3JkZXIsXFxuK1xcdFxcdFxcdFxcdGZwaV90IGZwaV9mbGFncyk7XFxuIHN0YXRpYyB2b2lkIF9fZnJlZV9wYWdlc19vayhzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgaW50IG9yZGVyLFxcbiBcXHRcXHRcXHQgICAgZnBpX3QgZnBpX2ZsYWdzKTtcXG4gc3RhdGljIHZvaWQgcmVzZXJ2ZV9oaWdoYXRvbWljX3BhZ2VibG9jayhzdHJ1Y3QgcGFnZSAqcGFnZSwgaW50IG9yZGVyLFxcbkBAIC0xMzExLDE0ICsxMzIwLDczIEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBwZ2FsbG9jX3RhZ19zdWJfcGFnZXMoc3RydWN0IGFsbG9jX3RhZyAqdGFnLCB1bnNpZ25lZCBpbnQgbnIpXFxuIFxcbiAjZW5kaWYgLyogQ09ORklHX01FTV9BTExPQ19QUk9GSUxJTkcgKi9cXG4gXFxuKy8qXFxuKyAqIFNhbml0aXplLCB3aGljaCByZXF1aXJlcyB3cml0aW5nLCBhIGJsb2NrIG9mIHBhZ2VzIGF0IHRoZSBsYXN0IG1vbWVudCBvZlxcbisgKiBwcmVwYXJpbmcgdG8gZnJlZWluZyB0aGVtLCBpLmUuIF9fZnJlZV9wYWdlc19wcmVwYXJlKCkuXFxuKyAqL1xcbitzdGF0aWMgdm9pZCBmcmVlX3BhZ2VzX3Nhbml0aXplKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBpbnQgb3JkZXIpXFxuK3tcXG4rXFx0Ym9vbCBpbml0ID0gd2FudF9pbml0X29uX2ZyZWUoKTtcXG4rXFx0LypcXG4rXFx0ICogX19rYXNhbl91bnBvaXNvbl9wYWdlcygpIHNldHMga2FzYW4gdGFnIG9uIGV2ZXJ5IHRhaWwgcGFnZSwgc29cXG4rXFx0ICogaXQgaXMgZmluZSB0byB1c2Ugc2hvdWxkX3NraXBfa2FzYW5fcG9pc29uKCkgd2hlbiBwYWdlcyBoZXJlXFxuK1xcdCAqIHdlcmUgYSBzZXQgb2YgdGFpbCBwYWdlcyBmcm9tIGEgY29tcG91bmQgZm9saW8uXFxuK1xcdCAqL1xcbitcXHRib29sIHNraXBfa2FzYW5fcG9pc29uID0gc2hvdWxkX3NraXBfa2FzYW5fcG9pc29uKHBhZ2UpO1xcbitcXG4rXFx0a2VybmVsX3BvaXNvbl9wYWdlcyhwYWdlLCAxIFxcdTAwM2NcXHUwMDNjIG9yZGVyKTtcXG4rXFxuK1xcdC8qXFxuK1xcdCAqIEFzIG1lbW9yeSBpbml0aWFsaXphdGlvbiBtaWdodCBiZSBpbnRlZ3JhdGVkIGludG8gS0FTQU4sXFxuK1xcdCAqIEtBU0FOIHBvaXNvbmluZyBhbmQgbWVtb3J5IGluaXRpYWxpemF0aW9uIGNvZGUgbXVzdCBiZVxcbitcXHQgKiBrZXB0IHRvZ2V0aGVyIHRvIGF2b2lkIGRpc2NyZXBhbmNpZXMgaW4gYmVoYXZpb3IuXFxuK1xcdCAqXFxuK1xcdCAqIFdpdGggaGFyZHdhcmUgdGFnLWJhc2VkIEtBU0FOLCBtZW1vcnkgdGFncyBtdXN0IGJlIHNldCBiZWZvcmUgdGhlXFxuK1xcdCAqIHBhZ2UgYmVjb21lcyB1bmF2YWlsYWJsZSB2aWEgZGVidWdfcGFnZWFsbG9jIG9yIGFyY2hfZnJlZV9wYWdlLlxcbitcXHQgKi9cXG4rXFx0aWYgKCFza2lwX2thc2FuX3BvaXNvbikge1xcbitcXHRcXHRrYXNhbl9wb2lzb25fcGFnZXMocGFnZSwgb3JkZXIsIGluaXQpO1xcbitcXG4rXFx0XFx0LyogTWVtb3J5IGlzIGFscmVhZHkgaW5pdGlhbGl6ZWQgaWYgS0FTQU4gZGlkIGl0IGludGVybmFsbHkuICovXFxuK1xcdFxcdGlmIChrYXNhbl9oYXNfaW50ZWdyYXRlZF9pbml0KCkpXFxuK1xcdFxcdFxcdGluaXQgPSBmYWxzZTtcXG4rXFx0fVxcbitcXHRpZiAoaW5pdClcXG4rXFx0XFx0Y2xlYXJfaGlnaHBhZ2VzX2thc2FuX3RhZ2dlZChwYWdlLCAxIFxcdTAwM2NcXHUwMDNjIG9yZGVyKTtcXG4rXFxuK1xcdC8qXFxuK1xcdCAqIGFyY2hfZnJlZV9wYWdlKCkgY2FuIG1ha2UgdGhlIHBhZ2UncyBjb250ZW50cyBpbmFjY2Vzc2libGUuICBzMzkwXFxuK1xcdCAqIGRvZXMgdGhpcy4gIFNvIG5vdGhpbmcgd2hpY2ggY2FuIGFjY2VzcyB0aGUgcGFnZSdzIGNvbnRlbnRzIHNob3VsZFxcbitcXHQgKiBoYXBwZW4gYWZ0ZXIgdGhpcy5cXG4rXFx0ICovXFxuK1xcdGFyY2hfZnJlZV9wYWdlKHBhZ2UsIG9yZGVyKTtcXG4rXFxuK1xcdGRlYnVnX3BhZ2VhbGxvY191bm1hcF9wYWdlcyhwYWdlLCAxIFxcdTAwM2NcXHUwMDNjIG9yZGVyKTtcXG4rfVxcbitcXG4rLypcXG4rICogUmV0dXJuc1xcbisgKiAtIHRydWU6IGNoZWNrcyBhbmQgcHJlcGFyYXRpb25zIGFsbCBnb29kLCBjYWxsZXIgY2FuIHByb2NlZWQgZnJlZWluZy5cXG4rICogLSBmYWxzZTogZG8gbm90IHByb2NlZWQgZnJlZWluZyBmb3Igb25lIG9mIHRoZSBmb2xsb3dpbmcgcmVhc29uczpcXG4rICogICAxLiBTb21lIGNoZWNrIGZhaWxlZCBzbyBpdCBpcyBub3Qgc2FmZSB0byBwcm9jZWVkIGZyZWVpbmcuXFxuKyAqICAgMi4gQSBjb21wb3VuZCBwYWdlIGhhcyBzb21lIEhXUG9pc29uIHBhZ2VzLiBUaGUgaGVhbHRoeSBwYWdlc1xcbisgKiAgICAgIGFyZSBhbHJlYWR5IHNhZmVseSBmcmVlZCwgYW5kIHRoZSBIV1BvaXNvbiBvbmVzIGlzb2xhdGVkLlxcbisgKi9cXG4gc3RhdGljIF9fYWx3YXlzX2lubGluZSBib29sIF9fZnJlZV9wYWdlc19wcmVwYXJlKHN0cnVjdCBwYWdlICpwYWdlLFxcbiBcXHRcXHR1bnNpZ25lZCBpbnQgb3JkZXIsIGZwaV90IGZwaV9mbGFncylcXG4ge1xcbiBcXHRpbnQgYmFkID0gMDtcXG4tXFx0Ym9vbCBza2lwX2thc2FuX3BvaXNvbiA9IHNob3VsZF9za2lwX2thc2FuX3BvaXNvbihwYWdlKTtcXG4tXFx0Ym9vbCBpbml0ID0gd2FudF9pbml0X29uX2ZyZWUoKTtcXG4gXFx0Ym9vbCBjb21wb3VuZCA9IFBhZ2VDb21wb3VuZChwYWdlKTtcXG4gXFx0c3RydWN0IGZvbGlvICpmb2xpbyA9IHBhZ2VfZm9saW8ocGFnZSk7XFxuK1xcdC8qXFxuK1xcdCAqIFdoZW4gZGVhbGluZyB3aXRoIGNvbXBvdW5kIHBhZ2UsIFBHX2hhc19od3BvaXNvbmVkIGlzIGNsZWFyZWRcXG4rXFx0ICogd2l0aCBQQUdFX0ZMQUdTX1NFQ09ORC4gU28gdGhlIGNoZWNrIG11c3QgYmUgZG9uZSBmaXJzdC5cXG4rXFx0ICpcXG4rXFx0ICogTm90ZSB3ZSBjYW4ndCBleGNsdWRlIFBHX2hhc19od3BvaXNvbmVkIGZyb20gUEFHRV9GTEFHU19TRUNPTkQuXFxuK1xcdCAqIEJlY2F1c2UgUEdfaGFzX2h3cG9pc29uZWQgPT0gUEdfYWN0aXZlLCBmcmVlX3BhZ2VfaXNfYmFkKCkgd2lsbFxcbitcXHQgKiBjb25mdXNlIGFuZCBjb21wbGFpbnQgdGhhdCB0aGUgZmlyc3QgdGFpbCBwYWdlIGlzIHN0aWxsIGFjdGl2ZS5cXG4rXFx0ICovXFxuK1xcdGJvb2wgc2hvdWxkX2ZoaCA9IGNvbXBvdW5kIFxcdTAwMjZcXHUwMDI2IGZvbGlvX3Rlc3RfaGFzX2h3cG9pc29uZWQoZm9saW8pO1xcbiBcXG4gXFx0aWYgKGZwaV9mbGFncyBcXHUwMDI2IEZQSV9QUkVQQVJFRClcXG4gXFx0XFx0cmV0dXJuIHRydWU7XFxuQEAgLTE0MTYsMzQgKzE0ODQsMTkgQEAgc3RhdGljIF9fYWx3YXlzX2lubGluZSBib29sIF9fZnJlZV9wYWdlc19wcmVwYXJlKHN0cnVjdCBwYWdlICpwYWdlLFxcbiBcXHRcXHRcXHRcXHRcXHQgICBQQUdFX1NJWkUgXFx1MDAzY1xcdTAwM2Mgb3JkZXIpO1xcbiBcXHR9XFxuIFxcbi1cXHRrZXJuZWxfcG9pc29uX3BhZ2VzKHBhZ2UsIDEgXFx1MDAzY1xcdTAwM2Mgb3JkZXIpO1xcbi1cXG4gXFx0LypcXG4tXFx0ICogQXMgbWVtb3J5IGluaXRpYWxpemF0aW9uIG1pZ2h0IGJlIGludGVncmF0ZWQgaW50byBLQVNBTixcXG4tXFx0ICogS0FTQU4gcG9pc29uaW5nIGFuZCBtZW1vcnkgaW5pdGlhbGl6YXRpb24gY29kZSBtdXN0IGJlXFxuLVxcdCAqIGtlcHQgdG9nZXRoZXIgdG8gYXZvaWQgZGlzY3JlcGFuY2llcyBpbiBiZWhhdmlvci5cXG4rXFx0ICogQWZ0ZXIgYnJlYWtpbmcgZG93biBjb21wb3VuZCBwYWdlIGFuZCBkZWFsaW5nIHdpdGggcGFnZSBtZXRhZGF0YVxcbitcXHQgKiAoZS5nLiBwYWdlIG93bmVyIGFuZCBwYWdlIGFsbG9jIHRhZ3MpLCB0YWtlIGEgc2hvcnRjdXQgaWYgdGhpc1xcbitcXHQgKiB3YXMgYSBjb21wb3VuZCBwYWdlIGNvbnRhaW5pbmcgY2VydGFpbiBIV1BvaXNvbiBzdWJwYWdlcy5cXG4gXFx0ICpcXG4tXFx0ICogV2l0aCBoYXJkd2FyZSB0YWctYmFzZWQgS0FTQU4sIG1lbW9yeSB0YWdzIG11c3QgYmUgc2V0IGJlZm9yZSB0aGVcXG4tXFx0ICogcGFnZSBiZWNvbWVzIHVuYXZhaWxhYmxlIHZpYSBkZWJ1Z19wYWdlYWxsb2Mgb3IgYXJjaF9mcmVlX3BhZ2UuXFxuK1xcdCAqIEZQSV9TQU5JVElaRSB0byByZW1lbWJlciBmcmVlX3BhZ2VzX3Nhbml0aXplKCkgaGVhbHRoeSBwYWdlcy5cXG4gXFx0ICovXFxuLVxcdGlmICghc2tpcF9rYXNhbl9wb2lzb24pIHtcXG4tXFx0XFx0a2FzYW5fcG9pc29uX3BhZ2VzKHBhZ2UsIG9yZGVyLCBpbml0KTtcXG4tXFxuLVxcdFxcdC8qIE1lbW9yeSBpcyBhbHJlYWR5IGluaXRpYWxpemVkIGlmIEtBU0FOIGRpZCBpdCBpbnRlcm5hbGx5LiAqL1xcbi1cXHRcXHRpZiAoa2FzYW5faGFzX2ludGVncmF0ZWRfaW5pdCgpKVxcbi1cXHRcXHRcXHRpbml0ID0gZmFsc2U7XFxuK1xcdGlmIChzaG91bGRfZmhoKSB7XFxuK1xcdFxcdGZyZWVfaGFzX2h3cG9pc29uZWQocGFnZSwgb3JkZXIsIGZwaV9mbGFncyB8IEZQSV9TQU5JVElaRSk7XFxuK1xcdFxcdHJldHVybiBmYWxzZTtcXG4gXFx0fVxcbi1cXHRpZiAoaW5pdClcXG4tXFx0XFx0Y2xlYXJfaGlnaHBhZ2VzX2thc2FuX3RhZ2dlZChwYWdlLCAxIFxcdTAwM2NcXHUwMDNjIG9yZGVyKTtcXG4tXFxuLVxcdC8qXFxuLVxcdCAqIGFyY2hfZnJlZV9wYWdlKCkgY2FuIG1ha2UgdGhlIHBhZ2UncyBjb250ZW50cyBpbmFjY2Vzc2libGUuICBzMzkwXFxuLVxcdCAqIGRvZXMgdGhpcy4gIFNvIG5vdGhpbmcgd2hpY2ggY2FuIGFjY2VzcyB0aGUgcGFnZSdzIGNvbnRlbnRzIHNob3VsZFxcbi1cXHQgKiBoYXBwZW4gYWZ0ZXIgdGhpcy5cXG4tXFx0ICovXFxuLVxcdGFyY2hfZnJlZV9wYWdlKHBhZ2UsIG9yZGVyKTtcXG4gXFxuLVxcdGRlYnVnX3BhZ2VhbGxvY191bm1hcF9wYWdlcyhwYWdlLCAxIFxcdTAwM2NcXHUwMDNjIG9yZGVyKTtcXG4rXFx0ZnJlZV9wYWdlc19zYW5pdGl6ZShwYWdlLCBvcmRlcik7XFxuIFxcbiBcXHRyZXR1cm4gdHJ1ZTtcXG4gfVxcbkBAIC02ODUyLDggKzY5MDUsOCBAQCB2b2lkIF9faW5pdCBwYWdlX2FsbG9jX3N5c2N0bF9pbml0KHZvaWQpXFxuIFxcdHJlZ2lzdGVyX3N5c2N0bF9pbml0KFxcXCJ2bVxcXCIsIHBhZ2VfYWxsb2Nfc3lzY3RsX3RhYmxlKTtcXG4gfVxcbiBcXG4tc3RhdGljIHZvaWQgZnJlZV9wcmVwYXJlZF9jb250aWdfcmFuZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsXFxuLVxcdFxcdHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMpXFxuK3N0YXRpYyB2b2lkIF9fZnJlZV9wcmVwYXJlZF9jb250aWdfcmFuZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsXFxuK1xcdFxcdHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMsIGZwaV90IGZwaV9mbGFncylcXG4ge1xcbiBcXHR1bnNpZ25lZCBsb25nIHBmbiA9IHBhZ2VfdG9fcGZuKHBhZ2UpO1xcbiBcXG5AQCAtNjg2OSw4ICs2OTIyLDE1IEBAIHN0YXRpYyB2b2lkIGZyZWVfcHJlcGFyZWRfY29udGlnX3JhbmdlKHN0cnVjdCBwYWdlICpwYWdlLFxcbiBcXHRcXHQvKlxcbiBcXHRcXHQgKiBGcmVlIHRoZSBjaHVuayBhcyBhIHNpbmdsZSBibG9jay4gT3VyIGNhbGxlciBoYXMgYWxyZWFkeVxcbiBcXHRcXHQgKiBjYWxsZWQgZnJlZV9wYWdlc19wcmVwYXJlKCkgZm9yIGVhY2ggb3JkZXItMCBwYWdlLlxcbitcXHRcXHQgKlxcbitcXHRcXHQgKiBJZiB0aGUgb3JpZ2luYWwgY29tcG91bmQgcGFnZSBoYXMgSFdQb2lzb24gcGFnZSxcXG4rXFx0XFx0ICogZnJlZV9wYWdlc19wcmVwYXJlKCkgaGFzIHRvIHNraXAgc2FuaXRpemUgYXQgdGhhdCB0aW1lLFxcbitcXHRcXHQgKiBidXQgbm93IGl0IGlzIGdvb2QgdGltZSB0byBkbyB0aGF0LlxcbiBcXHRcXHQgKi9cXG4tXFx0XFx0X19mcmVlX2Zyb3plbl9wYWdlcyhwYWdlLCBvcmRlciwgRlBJX1BSRVBBUkVEKTtcXG4rXFx0XFx0aWYgKGZwaV9mbGFncyBcXHUwMDI2IEZQSV9TQU5JVElaRSlcXG4rXFx0XFx0XFx0ZnJlZV9wYWdlc19zYW5pdGl6ZShwYWdlLCBvcmRlcik7XFxuK1xcbitcXHRcXHRfX2ZyZWVfZnJvemVuX3BhZ2VzKHBhZ2UsIG9yZGVyLCBmcGlfZmxhZ3MgfCBGUElfUFJFUEFSRUQpO1xcbiBcXG4gXFx0XFx0cGZuICs9IDFVTCBcXHUwMDNjXFx1MDAzYyBvcmRlcjtcXG4gXFx0XFx0cGFnZSArPSAxVUwgXFx1MDAzY1xcdTAwM2Mgb3JkZXI7XFxuQEAgLTY4NzgsNiArNjkzOCwxMSBAQCBzdGF0aWMgdm9pZCBmcmVlX3ByZXBhcmVkX2NvbnRpZ19yYW5nZShzdHJ1Y3QgcGFnZSAqcGFnZSxcXG4gXFx0fVxcbiB9XFxuIFxcbitzdGF0aWMgdm9pZCBmcmVlX3ByZXBhcmVkX2NvbnRpZ19yYW5nZShzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgbG9uZyBucl9wYWdlcylcXG4re1xcbitcXHRfX2ZyZWVfcHJlcGFyZWRfY29udGlnX3JhbmdlKHBhZ2UsIG5yX3BhZ2VzLCBGUElfTk9ORSk7XFxuK31cXG4rXFxuIHN0YXRpYyB2b2lkIF9fZnJlZV9jb250aWdfcmFuZ2VfY29tbW9uKHVuc2lnbmVkIGxvbmcgcGZuLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLFxcbiBcXHRcXHRib29sIGlzX2Zyb3plbilcXG4ge1xcbkBAIC02OTUxLDYgKzcwMTYsNjEgQEAgdm9pZCBfX2ZyZWVfY29udGlnX3JhbmdlKHVuc2lnbmVkIGxvbmcgcGZuLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzKVxcbiBcXHRfX2ZyZWVfY29udGlnX3JhbmdlX2NvbW1vbihwZm4sIG5yX3BhZ2VzLCAvKiBpc19mcm96ZW49ICovIGZhbHNlKTtcXG4gfVxcbiBcXG4rLypcXG4rICogR2l2ZW4gc29tZSBjb250aWd1b3VzIHBhZ2VzIHRoYXQgaGF2ZSBjZXJ0YWluIG51bWJlciBvZiBIV1BvaXNvbiBwYWdlKHMpLFxcbisgKiBmcmVlIG9ubHkgdGhlIGhlYWx0aHkgb25lcy5cXG4rICpcXG4rICogVXNlZCBhdCB0aGUgZW5kIG9mIF9fZnJlZV9wYWdlc19wcmVwYXJlKCkuIEV2ZW4gaWYgaGF2aW5nIEhXUG9pc29uIHBhZ2VzLFxcbisgKiBicmVha2luZyBkb3duIGNvbXBvdW5kIHBhZ2UgYW5kIGNsZWFyaW5nIG1ldGFkYXRhIChlLmcuIHBhZ2Ugb3duZXIsIGFsbG9jXFxuKyAqIHRhZykgY2FuIGJlIGRvbmUgdG9nZXRoZXIgZHVyaW5nIF9fZnJlZV9wYWdlc19wcmVwYXJlKCksIHdoaWNoIHNpbXBsaWZpZXNcXG4rICogdGhlIHNwbGl0dGluZyBoZXJlOiB1bmxpa2UgX19zcGxpdF91bm1hcHBlZF9mb2xpbygpLCB0aGVyZSBpcyBubyBuZWVkIHRvXFxuKyAqIHR1cm4gc3BsaXQgcGFnZXMgaW50byBhIGNvbXBvdW5kIHBhZ2Ugb3IgdG8gY2FycnkgbWV0YWRhdGEuXFxuKyAqXFxuKyAqIEl0IHNjYW5zIGV2ZXJ5IHJhdyBwYWdlIG9mIHRoZSBjb21wb3VuZCBwYWdlIGFuZCBjYXVzZXMgbm9udHJpdmlhbCBvdmVyaGVhZC5cXG4rICogU28gb25seSB1c2UgdGhpcyB3aGVuIHRoZSBjb21wb3VuZCBwYWdlIGNvbnRhaW5zIEhXUG9pc29uIHBhZ2UocykuXFxuKyAqXFxuKyAqIEl0IGFsc28gd29ya3Mgd2hlbiBvcmRlciA9PSAwLCByZWdhcmRsZXNzIG9mIFBhZ2VIV1BvaXNvbigpIG9yIG5vdC5cXG4rICpcXG4rICogVGhpcyBpbXBsZW1lbnRhdGlvbiBuZWVkcyByZXdvcmsgaW4gbWVtZGVzYyB3b3JsZC5cXG4rICovXFxuK3N0YXRpYyB2b2lkIGZyZWVfaGFzX2h3cG9pc29uZWQoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGludCBvcmRlcixcXG4rXFx0XFx0XFx0XFx0ZnBpX3QgZnBpX2ZsYWdzKVxcbit7XFxuK1xcdHVuc2lnbmVkIGxvbmcgY3VyciA9IHBhZ2VfdG9fcGZuKHBhZ2UpO1xcbitcXHR1bnNpZ25lZCBsb25nIGVuZF9wZm4gPSBjdXJyICsgKDEgXFx1MDAzY1xcdTAwM2Mgb3JkZXIpO1xcbitcXHR1bnNpZ25lZCBsb25nIG5leHQ7XFxuK1xcdHVuc2lnbmVkIGxvbmcgdG90YWxfZnJlZWQgPSAwO1xcbitcXHR1bnNpZ25lZCBsb25nIHRvdGFsX2h3cCA9IDA7XFxuK1xcbitcXHR3aGlsZSAoY3VyciBcXHUwMDNjIGVuZF9wZm4pIHtcXG4rXFx0XFx0bmV4dCA9IGN1cnI7XFxuK1xcbitcXHRcXHR3aGlsZSAobmV4dCBcXHUwMDNjIGVuZF9wZm4gXFx1MDAyNlxcdTAwMjYgIVBhZ2VIV1BvaXNvbihwZm5fdG9fcGFnZShuZXh0KSkpXFxuK1xcdFxcdFxcdCsrbmV4dDtcXG4rXFxuK1xcdFxcdGlmIChuZXh0ICE9IGVuZF9wZm4pIHtcXG4rXFx0XFx0XFx0LypcXG4rXFx0XFx0XFx0ICogQXZvaWQgYWNjb3VudGluZyBlcnJvciB3aGVuIHRoZSBwYWdlIGlzIGZyZWVkXFxuK1xcdFxcdFxcdCAqIGJ5IHVucG9pc29uX21lbW9yeSgpLlxcbitcXHRcXHRcXHQgKi9cXG4rXFx0XFx0XFx0Y2xlYXJfcGFnZV90YWdfcmVmKHBmbl90b19wYWdlKG5leHQpKTtcXG4rXFx0XFx0XFx0Kyt0b3RhbF9od3A7XFxuK1xcdFxcdH1cXG4rXFxuK1xcdFxcdF9fZnJlZV9wcmVwYXJlZF9jb250aWdfcmFuZ2UocGZuX3RvX3BhZ2UoY3VyciksIG5leHQgLSBjdXJyLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgIGZwaV9mbGFncyk7XFxuK1xcdFxcdHRvdGFsX2ZyZWVkICs9IG5leHQgLSBjdXJyO1xcbitcXG4rXFx0XFx0aWYgKG5leHQgPT0gZW5kX3BmbilcXG4rXFx0XFx0XFx0YnJlYWs7XFxuK1xcbitcXHRcXHRjdXJyID0gbmV4dCArIDE7XFxuK1xcdH1cXG4rXFxuK1xcdHByX2luZm8oXFxcIkZyZWVkICUjbHggcGFnZXMsIGV4Y2x1ZGVkICUjbHggSFdQb2lzb24gcGFnZXNcXFxcblxcXCIsXFxuK1xcdFxcdHRvdGFsX2ZyZWVkLCB0b3RhbF9od3ApO1xcbit9XFxuK1xcbiAjaWZkZWYgQ09ORklHX0NPTlRJR19BTExPQ1xcbiAvKiBVc2FnZTogU2VlIGFkbWluLWd1aWRlL2R5bmFtaWMtZGVidWctaG93dG8ucnN0ICovXFxuIHN0YXRpYyB2b2lkIGFsbG9jX2NvbnRpZ19kdW1wX3BhZ2VzKHN0cnVjdCBsaXN0X2hlYWQgKnBhZ2VfbGlzdClcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vbWVtb3J5LWZhaWx1cmUuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL21lbW9yeS1mYWlsdXJlLmNcXG5pbmRleCAwMzJlZDk1MjA1N2M2Mi4uNzhjMTA1Y2UyYWYxODUgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vbWVtb3J5LWZhaWx1cmUuY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL21lbW9yeS1mYWlsdXJlLmNcXG5AQCAtMTgsNiArMTgsNyBAQFxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvbWFnaWMuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2Vycm5vLmhcXHUwMDNlXFxuIFxcbisjaW5jbHVkZSBcXFwiaHVnZXBhZ2Vfc2V0dGluZ3MuaFxcXCJcXG4gI2luY2x1ZGUgXFxcInZtX3V0aWwuaFxcXCJcXG4gXFxuIGVudW0gaW5qZWN0X3R5cGUge1xcbkBAIC0yNyw2ICsyOCw3IEBAIGVudW0gaW5qZWN0X3R5cGUge1xcbiBcXG4gZW51bSByZXN1bHRfdHlwZSB7XFxuIFxcdE1BRFZfSEFSRF9BTk9OLFxcbitcXHRNQURWX0hBUkRfQU5PTl9IVUdFVExCLFxcbiBcXHRNQURWX0hBUkRfQ0xFQU5fUEFHRUNBQ0hFLFxcbiBcXHRNQURWX0hBUkRfRElSVFlfUEFHRUNBQ0hFLFxcbiBcXHRNQURWX1NPRlRfQU5PTixcXG5AQCAtNDcsNiArNDksOCBAQCBGSVhUVVJFKG1lbW9yeV9mYWlsdXJlKVxcbiBcXHRpbnQgcGFnZW1hcF9mZDtcXG4gXFx0aW50IGtwYWdlZmxhZ3NfZmQ7XFxuIFxcdGJvb2wgdHJpZ2dlcmVkO1xcbitcXHQvKiBOdW1iZXIgb2YgaW5pdGlhbCBIdWdlVExCIHBhZ2VzIHdpdGggZGVmYXVsdCBwYWdlIHNpemUuICovXFxuK1xcdHVuc2lnbmVkIGxvbmcgbnJfaHVnZXRsYl9wYWdlcztcXG4gfTtcXG4gXFxuIEZJWFRVUkVfVkFSSUFOVChtZW1vcnlfZmFpbHVyZSlcXG5AQCAtMTU3LDYgKzE2MSw3IEBAIHN0YXRpYyB2b2lkIGNoZWNrKHN0cnVjdCBfX3Rlc3RfbWV0YWRhdGEgKl9tZXRhZGF0YSwgRklYVFVSRV9EQVRBKG1lbW9yeV9mYWlsdXJlXFxuIFxcdFxcdCAgdm9pZCAqdmFkZHIsIGVudW0gcmVzdWx0X3R5cGUgdHlwZSwgaW50IHNldGptcClcXG4ge1xcbiBcXHR1bnNpZ25lZCBsb25nIHNpemU7XFxuK1xcdHVuc2lnbmVkIGxvbmcgbnJfaHVnZXRsYl9wYWdlcztcXG4gXFx0dWludDY0X3QgcGZuX2ZsYWdzO1xcbiBcXG4gXFx0c3dpdGNoICh0eXBlKSB7XFxuQEAgLTE3NCw2ICsxNzksNyBAQCBzdGF0aWMgdm9pZCBjaGVjayhzdHJ1Y3QgX190ZXN0X21ldGFkYXRhICpfbWV0YWRhdGEsIEZJWFRVUkVfREFUQShtZW1vcnlfZmFpbHVyZVxcbiBcXHRcXHRBU1NFUlRfTkUocGFnZW1hcF9nZXRfcGZuKHNlbGYtXFx1MDAzZXBhZ2VtYXBfZmQsIHZhZGRyKSwgc2VsZi1cXHUwMDNlcGZuKTtcXG4gXFx0XFx0YnJlYWs7XFxuIFxcdGNhc2UgTUFEVl9IQVJEX0FOT046XFxuK1xcdGNhc2UgTUFEVl9IQVJEX0FOT05fSFVHRVRMQjpcXG4gXFx0Y2FzZSBNQURWX0hBUkRfRElSVFlfUEFHRUNBQ0hFOlxcbiBcXHRcXHQvKiBUaGUgU0lHQlVTIHNpZ25hbCBzaG91bGQgaGF2ZSBiZWVuIHJlY2VpdmVkLiAqL1xcbiBcXHRcXHRBU1NFUlRfRVEoc2V0am1wLCAxKTtcXG5AQCAtMTg0LDggKzE5MCwxNSBAQCBzdGF0aWMgdm9pZCBjaGVjayhzdHJ1Y3QgX190ZXN0X21ldGFkYXRhICpfbWV0YWRhdGEsIEZJWFRVUkVfREFUQShtZW1vcnlfZmFpbHVyZVxcbiBcXHRcXHRBU1NFUlRfRVEoMVVMIFxcdTAwM2NcXHUwMDNjIHNpZ2luZm8uc2lfYWRkcl9sc2IsIHNlbGYtXFx1MDAzZXBhZ2Vfc2l6ZSk7XFxuIFxcdFxcdEFTU0VSVF9FUShzaWdpbmZvLnNpX2FkZHIsIHZhZGRyKTtcXG4gXFxuLVxcdFxcdC8qIFhYWCBDaGVjayBiYWNraW5nIHB0ZSBpcyBod3BvaXNvbiBlbnRyeSB3aGVuIHN1cHBvcnRlZC4gKi9cXG4tXFx0XFx0QVNTRVJUX1RSVUUocGFnZW1hcF9pc19zd2FwcGVkKHNlbGYtXFx1MDAzZXBhZ2VtYXBfZmQsIHZhZGRyKSk7XFxuK1xcdFxcdGlmICh0eXBlICE9IE1BRFZfSEFSRF9BTk9OX0hVR0VUTEIpXFxuK1xcdFxcdFxcdC8qXFxuK1xcdFxcdFxcdCAqIENoZWNrIGJhY2tpbmcgcHRlIGlzIGh3cG9pc29uIGVudHJ5IHdoZW4gc3VwcG9ydGVkLlxcbitcXHRcXHRcXHQgKiBBbHRob3VnaCB0cnlfdG9fdW5tYXBfb25lKCkgYWxzbyBpbnN0YWxscyBod3BvaXNvblxcbitcXHRcXHRcXHQgKiBlbnRyeSBmb3IgSHVnZVRMQiwgcGFnZW1hcF9odWdldGxiX3JhbmdlKCkgZG9lc24ndFxcbitcXHRcXHRcXHQgKiBwYXJzZSBzd2FwIGVudHJpZXMgYXQgYWxsLlxcbitcXHRcXHRcXHQgKi9cXG4rXFx0XFx0XFx0QVNTRVJUX1RSVUUocGFnZW1hcF9pc19zd2FwcGVkKHNlbGYtXFx1MDAzZXBhZ2VtYXBfZmQsIHZhZGRyKSk7XFxuK1xcbiBcXHRcXHRicmVhaztcXG4gXFx0ZGVmYXVsdDpcXG4gXFx0XFx0U0tJUChyZXR1cm4sIFxcXCJ1bmV4cGVjdGVkIGluamVjdCB0eXBlICVkLlxcXFxuXFxcIiwgdHlwZSk7XFxuQEAgLTE5Myw3ICsyMDYsMTkgQEAgc3RhdGljIHZvaWQgY2hlY2soc3RydWN0IF9fdGVzdF9tZXRhZGF0YSAqX21ldGFkYXRhLCBGSVhUVVJFX0RBVEEobWVtb3J5X2ZhaWx1cmVcXG4gXFxuIFxcdC8qIENoZWNrIGlmIHRoZSB2YWx1ZSBvZiBIYXJkd2FyZUNvcnJ1cHRlZCBoYXMgaW5jcmVhc2VkLiAqL1xcbiBcXHRBU1NFUlRfRVEoZ2V0X2hhcmR3YXJlX2NvcnJ1cHRlZF9zaXplKFxcdTAwMjZzaXplKSwgMCk7XFxuLVxcdEFTU0VSVF9FUShzaXplLCBzZWxmLVxcdTAwM2Vjb3JydXB0ZWRfc2l6ZSArIHNlbGYtXFx1MDAzZXBhZ2Vfc2l6ZSAvIDEwMjQpO1xcbitcXG4rXFx0aWYgKHR5cGUgPT0gTUFEVl9IQVJEX0FOT05fSFVHRVRMQikge1xcbitcXHRcXHQvKlxcbitcXHRcXHQgKiBPbmx5IG9uZSBwYWdlIGlzIGhhcmR3YXJlIGNvcnJ1cHRlZDsgdGhlIHJlc3Qgc2hvdWxkIGFsbCBiZVxcbitcXHRcXHQgKiByZWxlYXNlZCB0byBidWRkeSBhbGxvY2F0b3IuXFxuK1xcdFxcdCAqL1xcbitcXHRcXHRBU1NFUlRfRVEoc2l6ZSwgc2VsZi1cXHUwMDNlY29ycnVwdGVkX3NpemUgKyBnZXRwYWdlc2l6ZSgpIC8gMTAyNCk7XFxuK1xcdFxcdC8qIEh1Z2VUTEIgc2hvdWxkIGhhdmUgbG9zdCB0aGUgSFdQb2lzb24gSHVnZVRMQiBwYWdlLiAqL1xcbitcXHRcXHRucl9odWdldGxiX3BhZ2VzID0gaHVnZXRsYl9ucl9kZWZhdWx0X3BhZ2VzKCk7XFxuK1xcdFxcdEFTU0VSVF9FUShucl9odWdldGxiX3BhZ2VzICsgMSwgc2VsZi1cXHUwMDNlbnJfaHVnZXRsYl9wYWdlcyk7XFxuK1xcdH0gZWxzZSB7XFxuK1xcdFxcdEFTU0VSVF9FUShzaXplLCBzZWxmLVxcdTAwM2Vjb3JydXB0ZWRfc2l6ZSArIHNlbGYtXFx1MDAzZXBhZ2Vfc2l6ZSAvIDEwMjQpO1xcbitcXHR9XFxuIFxcbiBcXHQvKiBDaGVjayBpZiBIV1BvaXNvbiBmbGFnIGlzIHNldC4gKi9cXG4gXFx0QVNTRVJUX0VRKHBhZ2VmbGFnc19nZXQoc2VsZi1cXHUwMDNlcGZuLCBzZWxmLVxcdTAwM2VrcGFnZWZsYWdzX2ZkLCBcXHUwMDI2cGZuX2ZsYWdzKSwgMCk7XFxuQEAgLTI0Nyw2ICsyNzIsNDUgQEAgVEVTVF9GKG1lbW9yeV9mYWlsdXJlLCBhbm9uKVxcbiBcXHRBU1NFUlRfRVEobXVubWFwKGFkZHIsIHNlbGYtXFx1MDAzZXBhZ2Vfc2l6ZSksIDApO1xcbiB9XFxuIFxcbitURVNUX0YobWVtb3J5X2ZhaWx1cmUsIGFub25faHVnZXRsYilcXG4re1xcbitcXHRjaGFyICphZGRyO1xcbitcXHRpbnQgcmV0O1xcbitcXHRjb25zdCB1bnNpZ25lZCBsb25nIG5yX2FsbG9jX2h1Z2V0bGJfcGFnZXMgPSA0O1xcbitcXHR1bnNpZ25lZCBsb25nIGFsbG9jX3NpemU7XFxuK1xcbitcXHRpZiAodmFyaWFudC1cXHUwMDNldHlwZSA9PSBNQURWX1NPRlQpXFxuK1xcdFxcdFNLSVAocmV0dXJuLCBcXFwiU29mdCBvZmZsaW5lIHRlc3QgaXMgbm90IGltcGxlbWVudGVkXFxcIik7XFxuK1xcbitcXHQvKiBIdWdlVExCIHNldHRpbmdzIHdpbGwgYmUgYXV0b21hdGljYWxseSByZXN0b3JlZCB3aGVuIHRlc3QgZXhpdHMuICovXFxuK1xcdGh1Z2V0bGJfc2V0dXBfZGVmYXVsdChucl9hbGxvY19odWdldGxiX3BhZ2VzKTtcXG4rXFxuK1xcdGFsbG9jX3NpemUgPSBkZWZhdWx0X2h1Z2VfcGFnZV9zaXplKCkgKiBucl9hbGxvY19odWdldGxiX3BhZ2VzO1xcbitcXHRzZWxmLVxcdTAwM2VwYWdlX3NpemUgPSBkZWZhdWx0X2h1Z2VfcGFnZV9zaXplKCk7XFxuK1xcdHNlbGYtXFx1MDAzZW5yX2h1Z2V0bGJfcGFnZXMgPSBodWdldGxiX25yX2RlZmF1bHRfcGFnZXMoKTtcXG4rXFxuK1xcdGFkZHIgPSBtbWFwKDAsIGFsbG9jX3NpemUsIFBST1RfUkVBRCB8IFBST1RfV1JJVEUsXFxuK1xcdFxcdCAgICBNQVBfQU5PTllNT1VTIHwgTUFQX1BSSVZBVEUgfCBNQVBfSFVHRVRMQiwgLTEsIDApO1xcbitcXHRpZiAoYWRkciA9PSBNQVBfRkFJTEVEKVxcbitcXHRcXHRTS0lQKHJldHVybiwgXFxcIm1tYXAgZmFpbGVkLCBub3QgZW5vdWdoIG1lbW9yeSBvciBodWdldGxiIG5vdCBzdXBwb3J0ZWQuXFxcXG5cXFwiKTtcXG4rXFx0bWVtc2V0KGFkZHIsIDB4Y2UsIGFsbG9jX3NpemUpO1xcbitcXG4rXFx0cHJlcGFyZShfbWV0YWRhdGEsIHNlbGYsIGFkZHIpO1xcbitcXG4rXFx0cmV0ID0gc2lnc2V0am1wKHNpZ25hbF9qbXBfYnVmLCAxKTtcXG4rXFx0aWYgKCFzZWxmLVxcdTAwM2V0cmlnZ2VyZWQpIHtcXG4rXFx0XFx0c2VsZi1cXHUwMDNldHJpZ2dlcmVkID0gdHJ1ZTtcXG4rXFx0XFx0QVNTRVJUX0VRKHZhcmlhbnQtXFx1MDAzZWluamVjdChzZWxmLCBhZGRyKSwgMCk7XFxuK1xcdFxcdEZPUkNFX1JFQUQoKmFkZHIpO1xcbitcXHR9XFxuK1xcbitcXHRjaGVjayhfbWV0YWRhdGEsIHNlbGYsIGFkZHIsIE1BRFZfSEFSRF9BTk9OX0hVR0VUTEIsIHJldCk7XFxuK1xcbitcXHRjbGVhbnVwKF9tZXRhZGF0YSwgc2VsZiwgYWRkcik7XFxuK1xcbitcXHRBU1NFUlRfRVEobXVubWFwKGFkZHIsIGFsbG9jX3NpemUpLCAwKTtcXG4rfVxcbitcXG4gc3RhdGljIGludCBwcmVwYXJlX2ZpbGUoY29uc3QgY2hhciAqZm5hbWUsIHVuc2lnbmVkIGxvbmcgc2l6ZSlcXG4ge1xcbiBcXHRpbnQgZmQ7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA1VDE4OjIxOjI0LjkxODg0MjUyNloiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTIxNTQ1NDcyOTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTUVNT1JZX0ZBSUxVUkVcIixcbiAgICBcIkhVR0VUTEJGU1wiLFxuICAgIFwiVFJBTlNQQVJFTlRfSFVHRVBBR0VcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJfX2h1Z2VwYWdlX2hhbmRsZV9wb2lzb25cIixcbiAgICBcImZyZWVfaGFzX2h3cG9pc29uZWRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBtZW1vcnkgZmFpbHVyZSBoYW5kbGluZyBmb3IgSHVnZVRMQiBwYWdlcywgZW5zdXJpbmcgdGhhdCBoZWFsdGh5IHN1YnBhZ2VzIG9mIGEgY29tcG91bmQgcGFnZSB3aXRoIGhhcmR3YXJlIHBvaXNvbmVkIHN1YnBhZ2VzIGFyZSBjb3JyZWN0bHkgZnJlZWQgdG8gdGhlIGJ1ZGR5IGFsbG9jYXRvciwgd2hpbGUgaXNvbGF0aW5nIHRoZSBwb2lzb25lZCBvbmVzLiBUaGlzIGludm9sdmVzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byBjb3JlIE1NIGFuZCBwYWdlIGFsbG9jYXRvciBsb2dpYywgc3BlY2lmaWNhbGx5IGluIG1tL21lbW9yeS1mYWlsdXJlLmMgYW5kIG1tL3BhZ2VfYWxsb2MuYy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdFxuICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LFxuICAgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA5Nzc1NDVjOTg5NTY5MTNlMDI2ZDM0ZjUyNTI5OWFiOTc5MDZjY2ZiXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFN1biBKdWwgNSAxODoyMToyMyAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oIGIvaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmhcbmluZGV4IDdhODYzNTcyYWRjZTc5Li4zY2Q1MjRlMDRhMzBiYiAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaFxuQEAgLTg3OSw3ICs4NzksNyBAQCBGT0xJT19GTEFHX0ZBTFNFKHBhcnRpYWxseV9tYXBwZWQpXG4gXG4gI2RlZmluZSBQR19oZWFkX21hc2sgKCgxVUwgXHUwMDNjXHUwMDNjIFBHX2hlYWQpKVxuIFxuLSNpZiBkZWZpbmVkKENPTkZJR19NRU1PUllfRkFJTFVSRSkgXHUwMDI2XHUwMDI2IGRlZmluZWQoQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFKVxuKyNpZiBkZWZpbmVkKENPTkZJR19NRU1PUllfRkFJTFVSRSkgXHUwMDI2XHUwMDI2IChkZWZpbmVkKENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSkgfHwgZGVmaW5lZChDT05GSUdfSFVHRVRMQl9QQUdFKSlcbiAvKlxuICAqIFBhZ2VIYXNIV1BvaXNvbmVkIGluZGljYXRlcyB0aGF0IGF0IGxlYXN0IG9uZSBzdWJwYWdlIGlzIGh3cG9pc29uZWQgaW4gdGhlXG4gICogY29tcG91bmQgcGFnZS5cbmRpZmYgLS1naXQgYS9tbS9tZW1vcnktZmFpbHVyZS5jIGIvbW0vbWVtb3J5LWZhaWx1cmUuY1xuaW5kZXggNDkxNmFiMTQ1MzI1NzMuLmEzN2I2NzU1MDcxODI3IDEwMDY0NFxuLS0tIGEvbW0vbWVtb3J5LWZhaWx1cmUuY1xuKysrIGIvbW0vbWVtb3J5LWZhaWx1cmUuY1xuQEAgLTE3NCw2ICsxNzQsMzAgQEAgc3RhdGljIHN0cnVjdCByYl9yb290X2NhY2hlZCBwZm5fc3BhY2VfaXRyZWUgPSBSQl9ST09UX0NBQ0hFRDtcbiBzdGF0aWMgREVGSU5FX01VVEVYKHBmbl9zcGFjZV9sb2NrKTtcbiBcbiAvKlxuKyAqIE9ubHkgZm9yIGEgSHVnZVRMQiBwYWdlIGJlaW5nIGhhbmRsZWQgYnkgbWVtb3J5X2ZhaWx1cmUoKS4gVGhlIGtleVxuKyAqIGRpZmZlcmVuY2UgdG8gc29mdF9vZmZsaW5lKCkgaXMgdGhhdCwgbm8gSFdQb2lzb24gc3VicGFnZSB3aWxsIG1ha2VcbisgKiBpbnRvIGJ1ZGR5IGFsbG9jYXRvciBhZnRlciBhIHN1Y2Nlc3NmdWwgZGlzc29sdmVfZnJlZV9odWdldGxiX2ZvbGlvKCksXG4rICogc28gdGFrZV9wYWdlX29mZl9idWRkeSgpIGlzIHVubmVjZXNzYXJ5LlxuKyAqL1xuK3N0YXRpYyBpbnQgX19odWdlcGFnZV9oYW5kbGVfcG9pc29uKHN0cnVjdCBwYWdlICpwYWdlKVxuK3tcbitcdHN0cnVjdCBmb2xpbyAqZm9saW8gPSBwYWdlX2ZvbGlvKHBhZ2UpO1xuK1xuK1x0LypcbitcdCAqIENhbid0IHVzZSBkaXNzb2x2ZV9mcmVlX2h1Z2V0bGJfZm9saW8oKSB3aXRob3V0IGEgcmVsaWFibGVcbitcdCAqIHJhd19od3BfbGlzdCB0ZWxsaW5nIHdoaWNoIHN1YnBhZ2UgaXMgSFdQb2lzb24uIFNvIGRvIG5vdCBmcmVlXG4rXHQgKiB0aGVtIHRvIHRoZSBidWRkeSBhbGxvY2F0b3IuIGRlcXVldWVfaHVnZXRsYl9mb2xpb19ub2RlX2V4YWN0KClcbitcdCAqIHdpbGwgZW5zdXJlIHRvIG5ldmVyIHJlLWFsbG9jYXRlIHRoaXMgaHVnZXBhZ2UuXG4rXHQgKi9cbitcdGlmIChmb2xpb190ZXN0X2h1Z2V0bGJfcmF3X2h3cF91bnJlbGlhYmxlKGZvbGlvKSlcbitcdFx0LyogcmF3X2h3cF9saXN0IGJlY29tZXMgdW5yZWxpYWJsZSB3aGVuIGttYWxsb2MoKSBmYWlscy4gKi9cbitcdFx0cmV0dXJuIC1FTk9NRU07XG4rXG4rXHRyZXR1cm4gZGlzc29sdmVfZnJlZV9odWdldGxiX2ZvbGlvKGZvbGlvKTtcbit9XG4rXG4rLypcbisgKiBPbmx5IGZvciBhIGZyZWUgb3IgSHVnZVRMQiBwYWdlIGJlaW5nIGhhbmRsZWQgYnkgc29mdF9vZmZsaW5lKCkuXG4gICogUmV0dXJuIHZhbHVlczpcbiAgKiAgIDE6ICAgdGhlIHBhZ2UgaXMgZGlzc29sdmVkIChpZiBuZWVkZWQpIGFuZCB0YWtlbiBvZmYgZnJvbSBidWRkeSxcbiAgKiAgIDA6ICAgdGhlIHBhZ2UgaXMgZGlzc29sdmVkIChpZiBuZWVkZWQpIGFuZCBub3QgdGFrZW4gb2ZmIGZyb20gYnVkZHksXG5AQCAtMTE2NiwxMSArMTE5MCwxMSBAQCBzdGF0aWMgaW50IG1lX2h1Z2VfcGFnZShzdHJ1Y3QgcGFnZV9zdGF0ZSAqcHMsIHN0cnVjdCBwYWdlICpwKVxuIFx0XHQgKiBzdWJwYWdlcy5cbiBcdFx0ICovXG4gXHRcdGZvbGlvX3B1dChmb2xpbyk7XG4tXHRcdGlmIChfX3BhZ2VfaGFuZGxlX3BvaXNvbihwKSBcdTAwM2UgMCkge1xuK1x0XHRpZiAoX19odWdlcGFnZV9oYW5kbGVfcG9pc29uKHApKSB7XG4rXHRcdFx0cmVzID0gTUZfRkFJTEVEO1xuK1x0XHR9IGVsc2Uge1xuIFx0XHRcdHBhZ2VfcmVmX2luYyhwKTtcbiBcdFx0XHRyZXMgPSBNRl9SRUNPVkVSRUQ7XG4tXHRcdH0gZWxzZSB7XG4tXHRcdFx0cmVzID0gTUZfRkFJTEVEO1xuIFx0XHR9XG4gXHR9XG4gXG5AQCAtMjAwOCw2ICsyMDMyLDcgQEAgdm9pZCBmb2xpb19jbGVhcl9odWdldGxiX2h3cG9pc29uKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4gXHRpZiAoZm9saW9fdGVzdF9odWdldGxiX3ZtZW1tYXBfb3B0aW1pemVkKGZvbGlvKSlcbiBcdFx0cmV0dXJuO1xuIFx0Zm9saW9fY2xlYXJfaHdwb2lzb24oZm9saW8pO1xuK1x0Zm9saW9fc2V0X2hhc19od3BvaXNvbmVkKGZvbGlvKTtcbiBcdGZvbGlvX2ZyZWVfcmF3X2h3cChmb2xpbywgdHJ1ZSk7XG4gfVxuIFxuQEAgLTIxMzIsMTEgKzIxNTcsMTEgQEAgc3RhdGljIGludCB0cnlfbWVtb3J5X2ZhaWx1cmVfaHVnZXRsYih1bnNpZ25lZCBsb25nIHBmbiwgaW50IGZsYWdzKVxuIFx0ICovXG4gXHRpZiAocmVzID09IE1GX0hVR0VUTEJfRlJFRUQpIHtcbiBcdFx0Zm9saW9fdW5sb2NrKGZvbGlvKTtcbi1cdFx0aWYgKF9fcGFnZV9oYW5kbGVfcG9pc29uKHApIFx1MDAzZSAwKSB7XG4rXHRcdGlmIChfX2h1Z2VwYWdlX2hhbmRsZV9wb2lzb24ocCkpIHtcbitcdFx0XHRyZXMgPSBNRl9GQUlMRUQ7XG4rXHRcdH0gZWxzZSB7XG4gXHRcdFx0cGFnZV9yZWZfaW5jKHApO1xuIFx0XHRcdHJlcyA9IE1GX1JFQ09WRVJFRDtcbi1cdFx0fSBlbHNlIHtcbi1cdFx0XHRyZXMgPSBNRl9GQUlMRUQ7XG4gXHRcdH1cbiBcdFx0cmV0dXJuIGFjdGlvbl9yZXN1bHQocGZuLCBNRl9NU0dfRlJFRV9IVUdFLCByZXMpO1xuIFx0fVxuZGlmZiAtLWdpdCBhL21tL3BhZ2VfYWxsb2MuYyBiL21tL3BhZ2VfYWxsb2MuY1xuaW5kZXggNzYyZDliNmJjNzkyZjEuLjY0MTg4OTZjOWRmNjYwIDEwMDY0NFxuLS0tIGEvbW0vcGFnZV9hbGxvYy5jXG4rKysgYi9tbS9wYWdlX2FsbG9jLmNcbkBAIC05Myw2ICs5MywxMyBAQCB0eXBlZGVmIGludCBfX2JpdHdpc2UgZnBpX3Q7XG4gLyogZnJlZV9wYWdlc19wcmVwYXJlKCkgaGFzIGFscmVhZHkgYmVlbiBjYWxsZWQgZm9yIHBhZ2UocykgYmVpbmcgZnJlZWQuICovXG4gI2RlZmluZSBGUElfUFJFUEFSRURcdFx0KChfX2ZvcmNlIGZwaV90KUJJVCgzKSlcbiBcbisvKlxuKyAqIFBhZ2UocykgbmVlZHMgdG8gZ28gdGhyb3VnaCBmcmVlX3BhZ2VzX3Nhbml0aXplKCksIGZvciBleGFtcGxlLCBiZWNhdXNlXG4rICogZnJlZV9wYWdlc19wcmVwYXJlKCkgY2Fubm90IHNhbml0aXplIGEgaGlnaC1vcmRlciBwYWdlIGJsb2NrIGR1ZSB0b1xuKyAqIGhhcmR3YXJlIGVycm9yIGluIHNvbWUgcGFnZShzKS5cbisgKi9cbisjZGVmaW5lIEZQSV9TQU5JVElaRVx0XHQoKF9fZm9yY2UgZnBpX3QpQklUKDQpKVxuK1xuIC8qIHByZXZlbnQgXHUwMDNlMSBfdXBkYXRlcl8gb2Ygem9uZSBwZXJjcHUgcGFnZXNldCAtXHUwMDNlaGlnaCBhbmQgLVx1MDAzZWJhdGNoIGZpZWxkcyAqL1xuIHN0YXRpYyBERUZJTkVfTVVURVgocGNwX2JhdGNoX2hpZ2hfbG9jayk7XG4gI2RlZmluZSBNSU5fUEVSQ1BVX1BBR0VMSVNUX0hJR0hfRlJBQ1RJT04gKDgpXG5AQCAtMjEwLDYgKzIxNyw4IEBAIGdmcF90IGdmcF9hbGxvd2VkX21hc2sgX19yZWFkX21vc3RseSA9IEdGUF9CT09UX01BU0s7XG4gdW5zaWduZWQgaW50IHBhZ2VibG9ja19vcmRlciBfX3JlYWRfbW9zdGx5O1xuICNlbmRpZlxuIFxuK3N0YXRpYyB2b2lkIGZyZWVfaGFzX2h3cG9pc29uZWQoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGludCBvcmRlcixcbitcdFx0XHRcdGZwaV90IGZwaV9mbGFncyk7XG4gc3RhdGljIHZvaWQgX19mcmVlX3BhZ2VzX29rKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBpbnQgb3JkZXIsXG4gXHRcdFx0ICAgIGZwaV90IGZwaV9mbGFncyk7XG4gc3RhdGljIHZvaWQgcmVzZXJ2ZV9oaWdoYXRvbWljX3BhZ2VibG9jayhzdHJ1Y3QgcGFnZSAqcGFnZSwgaW50IG9yZGVyLFxuQEAgLTEzMTEsMTQgKzEzMjAsNzMgQEAgc3RhdGljIGlubGluZSB2b2lkIHBnYWxsb2NfdGFnX3N1Yl9wYWdlcyhzdHJ1Y3QgYWxsb2NfdGFnICp0YWcsIHVuc2lnbmVkIGludCBucilcbiBcbiAjZW5kaWYgLyogQ09ORklHX01FTV9BTExPQ19QUk9GSUxJTkcgKi9cbiBcbisvKlxuKyAqIFNhbml0aXplLCB3aGljaCByZXF1aXJlcyB3cml0aW5nLCBhIGJsb2NrIG9mIHBhZ2VzIGF0IHRoZSBsYXN0IG1vbWVudCBvZlxuKyAqIHByZXBhcmluZyB0byBmcmVlaW5nIHRoZW0sIGkuZS4gX19mcmVlX3BhZ2VzX3ByZXBhcmUoKS5cbisgKi9cbitzdGF0aWMgdm9pZCBmcmVlX3BhZ2VzX3Nhbml0aXplKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBpbnQgb3JkZXIpXG4re1xuK1x0Ym9vbCBpbml0ID0gd2FudF9pbml0X29uX2ZyZWUoKTtcbitcdC8qXG4rXHQgKiBfX2thc2FuX3VucG9pc29uX3BhZ2VzKCkgc2V0cyBrYXNhbiB0YWcgb24gZXZlcnkgdGFpbCBwYWdlLCBzb1xuK1x0ICogaXQgaXMgZmluZSB0byB1c2Ugc2hvdWxkX3NraXBfa2FzYW5fcG9pc29uKCkgd2hlbiBwYWdlcyBoZXJlXG4rXHQgKiB3ZXJlIGEgc2V0IG9mIHRhaWwgcGFnZXMgZnJvbSBhIGNvbXBvdW5kIGZvbGlvLlxuK1x0ICovXG4rXHRib29sIHNraXBfa2FzYW5fcG9pc29uID0gc2hvdWxkX3NraXBfa2FzYW5fcG9pc29uKHBhZ2UpO1xuK1xuK1x0a2VybmVsX3BvaXNvbl9wYWdlcyhwYWdlLCAxIFx1MDAzY1x1MDAzYyBvcmRlcik7XG4rXG4rXHQvKlxuK1x0ICogQXMgbWVtb3J5IGluaXRpYWxpemF0aW9uIG1pZ2h0IGJlIGludGVncmF0ZWQgaW50byBLQVNBTixcbitcdCAqIEtBU0FOIHBvaXNvbmluZyBhbmQgbWVtb3J5IGluaXRpYWxpemF0aW9uIGNvZGUgbXVzdCBiZVxuK1x0ICoga2VwdCB0b2dldGhlciB0byBhdm9pZCBkaXNjcmVwYW5jaWVzIGluIGJlaGF2aW9yLlxuK1x0ICpcbitcdCAqIFdpdGggaGFyZHdhcmUgdGFnLWJhc2VkIEtBU0FOLCBtZW1vcnkgdGFncyBtdXN0IGJlIHNldCBiZWZvcmUgdGhlXG4rXHQgKiBwYWdlIGJlY29tZXMgdW5hdmFpbGFibGUgdmlhIGRlYnVnX3BhZ2VhbGxvYyBvciBhcmNoX2ZyZWVfcGFnZS5cbitcdCAqL1xuK1x0aWYgKCFza2lwX2thc2FuX3BvaXNvbikge1xuK1x0XHRrYXNhbl9wb2lzb25fcGFnZXMocGFnZSwgb3JkZXIsIGluaXQpO1xuK1xuK1x0XHQvKiBNZW1vcnkgaXMgYWxyZWFkeSBpbml0aWFsaXplZCBpZiBLQVNBTiBkaWQgaXQgaW50ZXJuYWxseS4gKi9cbitcdFx0aWYgKGthc2FuX2hhc19pbnRlZ3JhdGVkX2luaXQoKSlcbitcdFx0XHRpbml0ID0gZmFsc2U7XG4rXHR9XG4rXHRpZiAoaW5pdClcbitcdFx0Y2xlYXJfaGlnaHBhZ2VzX2thc2FuX3RhZ2dlZChwYWdlLCAxIFx1MDAzY1x1MDAzYyBvcmRlcik7XG4rXG4rXHQvKlxuK1x0ICogYXJjaF9mcmVlX3BhZ2UoKSBjYW4gbWFrZSB0aGUgcGFnZSdzIGNvbnRlbnRzIGluYWNjZXNzaWJsZS4gIHMzOTBcbitcdCAqIGRvZXMgdGhpcy4gIFNvIG5vdGhpbmcgd2hpY2ggY2FuIGFjY2VzcyB0aGUgcGFnZSdzIGNvbnRlbnRzIHNob3VsZFxuK1x0ICogaGFwcGVuIGFmdGVyIHRoaXMuXG4rXHQgKi9cbitcdGFyY2hfZnJlZV9wYWdlKHBhZ2UsIG9yZGVyKTtcbitcbitcdGRlYnVnX3BhZ2VhbGxvY191bm1hcF9wYWdlcyhwYWdlLCAxIFx1MDAzY1x1MDAzYyBvcmRlcik7XG4rfVxuK1xuKy8qXG4rICogUmV0dXJuc1xuKyAqIC0gdHJ1ZTogY2hlY2tzIGFuZCBwcmVwYXJhdGlvbnMgYWxsIGdvb2QsIGNhbGxlciBjYW4gcHJvY2VlZCBmcmVlaW5nLlxuKyAqIC0gZmFsc2U6IGRvIG5vdCBwcm9jZWVkIGZyZWVpbmcgZm9yIG9uZSBvZiB0aGUgZm9sbG93aW5nIHJlYXNvbnM6XG4rICogICAxLiBTb21lIGNoZWNrIGZhaWxlZCBzbyBpdCBpcyBub3Qgc2FmZSB0byBwcm9jZWVkIGZyZWVpbmcuXG4rICogICAyLiBBIGNvbXBvdW5kIHBhZ2UgaGFzIHNvbWUgSFdQb2lzb24gcGFnZXMuIFRoZSBoZWFsdGh5IHBhZ2VzXG4rICogICAgICBhcmUgYWxyZWFkeSBzYWZlbHkgZnJlZWQsIGFuZCB0aGUgSFdQb2lzb24gb25lcyBpc29sYXRlZC5cbisgKi9cbiBzdGF0aWMgX19hbHdheXNfaW5saW5lIGJvb2wgX19mcmVlX3BhZ2VzX3ByZXBhcmUoc3RydWN0IHBhZ2UgKnBhZ2UsXG4gXHRcdHVuc2lnbmVkIGludCBvcmRlciwgZnBpX3QgZnBpX2ZsYWdzKVxuIHtcbiBcdGludCBiYWQgPSAwO1xuLVx0Ym9vbCBza2lwX2thc2FuX3BvaXNvbiA9IHNob3VsZF9za2lwX2thc2FuX3BvaXNvbihwYWdlKTtcbi1cdGJvb2wgaW5pdCA9IHdhbnRfaW5pdF9vbl9mcmVlKCk7XG4gXHRib29sIGNvbXBvdW5kID0gUGFnZUNvbXBvdW5kKHBhZ2UpO1xuIFx0c3RydWN0IGZvbGlvICpmb2xpbyA9IHBhZ2VfZm9saW8ocGFnZSk7XG4rXHQvKlxuK1x0ICogV2hlbiBkZWFsaW5nIHdpdGggY29tcG91bmQgcGFnZSwgUEdfaGFzX2h3cG9pc29uZWQgaXMgY2xlYXJlZFxuK1x0ICogd2l0aCBQQUdFX0ZMQUdTX1NFQ09ORC4gU28gdGhlIGNoZWNrIG11c3QgYmUgZG9uZSBmaXJzdC5cbitcdCAqXG4rXHQgKiBOb3RlIHdlIGNhbid0IGV4Y2x1ZGUgUEdfaGFzX2h3cG9pc29uZWQgZnJvbSBQQUdFX0ZMQUdTX1NFQ09ORC5cbitcdCAqIEJlY2F1c2UgUEdfaGFzX2h3cG9pc29uZWQgPT0gUEdfYWN0aXZlLCBmcmVlX3BhZ2VfaXNfYmFkKCkgd2lsbFxuK1x0ICogY29uZnVzZSBhbmQgY29tcGxhaW50IHRoYXQgdGhlIGZpcnN0IHRhaWwgcGFnZSBpcyBzdGlsbCBhY3RpdmUuXG4rXHQgKi9cbitcdGJvb2wgc2hvdWxkX2ZoaCA9IGNvbXBvdW5kIFx1MDAyNlx1MDAyNiBmb2xpb190ZXN0X2hhc19od3BvaXNvbmVkKGZvbGlvKTtcbiBcbiBcdGlmIChmcGlfZmxhZ3MgXHUwMDI2IEZQSV9QUkVQQVJFRClcbiBcdFx0cmV0dXJuIHRydWU7XG5AQCAtMTQxNiwzNCArMTQ4NCwxOSBAQCBzdGF0aWMgX19hbHdheXNfaW5saW5lIGJvb2wgX19mcmVlX3BhZ2VzX3ByZXBhcmUoc3RydWN0IHBhZ2UgKnBhZ2UsXG4gXHRcdFx0XHRcdCAgIFBBR0VfU0laRSBcdTAwM2NcdTAwM2Mgb3JkZXIpO1xuIFx0fVxuIFxuLVx0a2VybmVsX3BvaXNvbl9wYWdlcyhwYWdlLCAxIFx1MDAzY1x1MDAzYyBvcmRlcik7XG4tXG4gXHQvKlxuLVx0ICogQXMgbWVtb3J5IGluaXRpYWxpemF0aW9uIG1pZ2h0IGJlIGludGVncmF0ZWQgaW50byBLQVNBTixcbi1cdCAqIEtBU0FOIHBvaXNvbmluZyBhbmQgbWVtb3J5IGluaXRpYWxpemF0aW9uIGNvZGUgbXVzdCBiZVxuLVx0ICoga2VwdCB0b2dldGhlciB0byBhdm9pZCBkaXNjcmVwYW5jaWVzIGluIGJlaGF2aW9yLlxuK1x0ICogQWZ0ZXIgYnJlYWtpbmcgZG93biBjb21wb3VuZCBwYWdlIGFuZCBkZWFsaW5nIHdpdGggcGFnZSBtZXRhZGF0YVxuK1x0ICogKGUuZy4gcGFnZSBvd25lciBhbmQgcGFnZSBhbGxvYyB0YWdzKSwgdGFrZSBhIHNob3J0Y3V0IGlmIHRoaXNcbitcdCAqIHdhcyBhIGNvbXBvdW5kIHBhZ2UgY29udGFpbmluZyBjZXJ0YWluIEhXUG9pc29uIHN1YnBhZ2VzLlxuIFx0ICpcbi1cdCAqIFdpdGggaGFyZHdhcmUgdGFnLWJhc2VkIEtBU0FOLCBtZW1vcnkgdGFncyBtdXN0IGJlIHNldCBiZWZvcmUgdGhlXG4tXHQgKiBwYWdlIGJlY29tZXMgdW5hdmFpbGFibGUgdmlhIGRlYnVnX3BhZ2VhbGxvYyBvciBhcmNoX2ZyZWVfcGFnZS5cbitcdCAqIEZQSV9TQU5JVElaRSB0byByZW1lbWJlciBmcmVlX3BhZ2VzX3Nhbml0aXplKCkgaGVhbHRoeSBwYWdlcy5cbiBcdCAqL1xuLVx0aWYgKCFza2lwX2thc2FuX3BvaXNvbikge1xuLVx0XHRrYXNhbl9wb2lzb25fcGFnZXMocGFnZSwgb3JkZXIsIGluaXQpO1xuLVxuLVx0XHQvKiBNZW1vcnkgaXMgYWxyZWFkeSBpbml0aWFsaXplZCBpZiBLQVNBTiBkaWQgaXQgaW50ZXJuYWxseS4gKi9cbi1cdFx0aWYgKGthc2FuX2hhc19pbnRlZ3JhdGVkX2luaXQoKSlcbi1cdFx0XHRpbml0ID0gZmFsc2U7XG4rXHRpZiAoc2hvdWxkX2ZoaCkge1xuK1x0XHRmcmVlX2hhc19od3BvaXNvbmVkKHBhZ2UsIG9yZGVyLCBmcGlfZmxhZ3MgfCBGUElfU0FOSVRJWkUpO1xuK1x0XHRyZXR1cm4gZmFsc2U7XG4gXHR9XG4tXHRpZiAoaW5pdClcbi1cdFx0Y2xlYXJfaGlnaHBhZ2VzX2thc2FuX3RhZ2dlZChwYWdlLCAxIFx1MDAzY1x1MDAzYyBvcmRlcik7XG4tXG4tXHQvKlxuLVx0ICogYXJjaF9mcmVlX3BhZ2UoKSBjYW4gbWFrZSB0aGUgcGFnZSdzIGNvbnRlbnRzIGluYWNjZXNzaWJsZS4gIHMzOTBcbi1cdCAqIGRvZXMgdGhpcy4gIFNvIG5vdGhpbmcgd2hpY2ggY2FuIGFjY2VzcyB0aGUgcGFnZSdzIGNvbnRlbnRzIHNob3VsZFxuLVx0ICogaGFwcGVuIGFmdGVyIHRoaXMuXG4tXHQgKi9cbi1cdGFyY2hfZnJlZV9wYWdlKHBhZ2UsIG9yZGVyKTtcbiBcbi1cdGRlYnVnX3BhZ2VhbGxvY191bm1hcF9wYWdlcyhwYWdlLCAxIFx1MDAzY1x1MDAzYyBvcmRlcik7XG4rXHRmcmVlX3BhZ2VzX3Nhbml0aXplKHBhZ2UsIG9yZGVyKTtcbiBcbiBcdHJldHVybiB0cnVlO1xuIH1cbkBAIC02ODUyLDggKzY5MDUsOCBAQCB2b2lkIF9faW5pdCBwYWdlX2FsbG9jX3N5c2N0bF9pbml0KHZvaWQpXG4gXHRyZWdpc3Rlcl9zeXNjdGxfaW5pdChcInZtXCIsIHBhZ2VfYWxsb2Nfc3lzY3RsX3RhYmxlKTtcbiB9XG4gXG4tc3RhdGljIHZvaWQgZnJlZV9wcmVwYXJlZF9jb250aWdfcmFuZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsXG4tXHRcdHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMpXG4rc3RhdGljIHZvaWQgX19mcmVlX3ByZXBhcmVkX2NvbnRpZ19yYW5nZShzdHJ1Y3QgcGFnZSAqcGFnZSxcbitcdFx0dW5zaWduZWQgbG9uZyBucl9wYWdlcywgZnBpX3QgZnBpX2ZsYWdzKVxuIHtcbiBcdHVuc2lnbmVkIGxvbmcgcGZuID0gcGFnZV90b19wZm4ocGFnZSk7XG4gXG5AQCAtNjg2OSw4ICs2OTIyLDE1IEBAIHN0YXRpYyB2b2lkIGZyZWVfcHJlcGFyZWRfY29udGlnX3JhbmdlKHN0cnVjdCBwYWdlICpwYWdlLFxuIFx0XHQvKlxuIFx0XHQgKiBGcmVlIHRoZSBjaHVuayBhcyBhIHNpbmdsZSBibG9jay4gT3VyIGNhbGxlciBoYXMgYWxyZWFkeVxuIFx0XHQgKiBjYWxsZWQgZnJlZV9wYWdlc19wcmVwYXJlKCkgZm9yIGVhY2ggb3JkZXItMCBwYWdlLlxuK1x0XHQgKlxuK1x0XHQgKiBJZiB0aGUgb3JpZ2luYWwgY29tcG91bmQgcGFnZSBoYXMgSFdQb2lzb24gcGFnZSxcbitcdFx0ICogZnJlZV9wYWdlc19wcmVwYXJlKCkgaGFzIHRvIHNraXAgc2FuaXRpemUgYXQgdGhhdCB0aW1lLFxuK1x0XHQgKiBidXQgbm93IGl0IGlzIGdvb2QgdGltZSB0byBkbyB0aGF0LlxuIFx0XHQgKi9cbi1cdFx0X19mcmVlX2Zyb3plbl9wYWdlcyhwYWdlLCBvcmRlciwgRlBJX1BSRVBBUkVEKTtcbitcdFx0aWYgKGZwaV9mbGFncyBcdTAwMjYgRlBJX1NBTklUSVpFKVxuK1x0XHRcdGZyZWVfcGFnZXNfc2FuaXRpemUocGFnZSwgb3JkZXIpO1xuK1xuK1x0XHRfX2ZyZWVfZnJvemVuX3BhZ2VzKHBhZ2UsIG9yZGVyLCBmcGlfZmxhZ3MgfCBGUElfUFJFUEFSRUQpO1xuIFxuIFx0XHRwZm4gKz0gMVVMIFx1MDAzY1x1MDAzYyBvcmRlcjtcbiBcdFx0cGFnZSArPSAxVUwgXHUwMDNjXHUwMDNjIG9yZGVyO1xuQEAgLTY4NzgsNiArNjkzOCwxMSBAQCBzdGF0aWMgdm9pZCBmcmVlX3ByZXBhcmVkX2NvbnRpZ19yYW5nZShzdHJ1Y3QgcGFnZSAqcGFnZSxcbiBcdH1cbiB9XG4gXG4rc3RhdGljIHZvaWQgZnJlZV9wcmVwYXJlZF9jb250aWdfcmFuZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMpXG4re1xuK1x0X19mcmVlX3ByZXBhcmVkX2NvbnRpZ19yYW5nZShwYWdlLCBucl9wYWdlcywgRlBJX05PTkUpO1xuK31cbitcbiBzdGF0aWMgdm9pZCBfX2ZyZWVfY29udGlnX3JhbmdlX2NvbW1vbih1bnNpZ25lZCBsb25nIHBmbiwgdW5zaWduZWQgbG9uZyBucl9wYWdlcyxcbiBcdFx0Ym9vbCBpc19mcm96ZW4pXG4ge1xuQEAgLTY5NTEsNiArNzAxNiw2MSBAQCB2b2lkIF9fZnJlZV9jb250aWdfcmFuZ2UodW5zaWduZWQgbG9uZyBwZm4sIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMpXG4gXHRfX2ZyZWVfY29udGlnX3JhbmdlX2NvbW1vbihwZm4sIG5yX3BhZ2VzLCAvKiBpc19mcm96ZW49ICovIGZhbHNlKTtcbiB9XG4gXG4rLypcbisgKiBHaXZlbiBzb21lIGNvbnRpZ3VvdXMgcGFnZXMgdGhhdCBoYXZlIGNlcnRhaW4gbnVtYmVyIG9mIEhXUG9pc29uIHBhZ2UocyksXG4rICogZnJlZSBvbmx5IHRoZSBoZWFsdGh5IG9uZXMuXG4rICpcbisgKiBVc2VkIGF0IHRoZSBlbmQgb2YgX19mcmVlX3BhZ2VzX3ByZXBhcmUoKS4gRXZlbiBpZiBoYXZpbmcgSFdQb2lzb24gcGFnZXMsXG4rICogYnJlYWtpbmcgZG93biBjb21wb3VuZCBwYWdlIGFuZCBjbGVhcmluZyBtZXRhZGF0YSAoZS5nLiBwYWdlIG93bmVyLCBhbGxvY1xuKyAqIHRhZykgY2FuIGJlIGRvbmUgdG9nZXRoZXIgZHVyaW5nIF9fZnJlZV9wYWdlc19wcmVwYXJlKCksIHdoaWNoIHNpbXBsaWZpZXNcbisgKiB0aGUgc3BsaXR0aW5nIGhlcmU6IHVubGlrZSBfX3NwbGl0X3VubWFwcGVkX2ZvbGlvKCksIHRoZXJlIGlzIG5vIG5lZWQgdG9cbisgKiB0dXJuIHNwbGl0IHBhZ2VzIGludG8gYSBjb21wb3VuZCBwYWdlIG9yIHRvIGNhcnJ5IG1ldGFkYXRhLlxuKyAqXG4rICogSXQgc2NhbnMgZXZlcnkgcmF3IHBhZ2Ugb2YgdGhlIGNvbXBvdW5kIHBhZ2UgYW5kIGNhdXNlcyBub250cml2aWFsIG92ZXJoZWFkLlxuKyAqIFNvIG9ubHkgdXNlIHRoaXMgd2hlbiB0aGUgY29tcG91bmQgcGFnZSBjb250YWlucyBIV1BvaXNvbiBwYWdlKHMpLlxuKyAqXG4rICogSXQgYWxzbyB3b3JrcyB3aGVuIG9yZGVyID09IDAsIHJlZ2FyZGxlc3Mgb2YgUGFnZUhXUG9pc29uKCkgb3Igbm90LlxuKyAqXG4rICogVGhpcyBpbXBsZW1lbnRhdGlvbiBuZWVkcyByZXdvcmsgaW4gbWVtZGVzYyB3b3JsZC5cbisgKi9cbitzdGF0aWMgdm9pZCBmcmVlX2hhc19od3BvaXNvbmVkKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBpbnQgb3JkZXIsXG4rXHRcdFx0XHRmcGlfdCBmcGlfZmxhZ3MpXG4re1xuK1x0dW5zaWduZWQgbG9uZyBjdXJyID0gcGFnZV90b19wZm4ocGFnZSk7XG4rXHR1bnNpZ25lZCBsb25nIGVuZF9wZm4gPSBjdXJyICsgKDEgXHUwMDNjXHUwMDNjIG9yZGVyKTtcbitcdHVuc2lnbmVkIGxvbmcgbmV4dDtcbitcdHVuc2lnbmVkIGxvbmcgdG90YWxfZnJlZWQgPSAwO1xuK1x0dW5zaWduZWQgbG9uZyB0b3RhbF9od3AgPSAwO1xuK1xuK1x0d2hpbGUgKGN1cnIgXHUwMDNjIGVuZF9wZm4pIHtcbitcdFx0bmV4dCA9IGN1cnI7XG4rXG4rXHRcdHdoaWxlIChuZXh0IFx1MDAzYyBlbmRfcGZuIFx1MDAyNlx1MDAyNiAhUGFnZUhXUG9pc29uKHBmbl90b19wYWdlKG5leHQpKSlcbitcdFx0XHQrK25leHQ7XG4rXG4rXHRcdGlmIChuZXh0ICE9IGVuZF9wZm4pIHtcbitcdFx0XHQvKlxuK1x0XHRcdCAqIEF2b2lkIGFjY291bnRpbmcgZXJyb3Igd2hlbiB0aGUgcGFnZSBpcyBmcmVlZFxuK1x0XHRcdCAqIGJ5IHVucG9pc29uX21lbW9yeSgpLlxuK1x0XHRcdCAqL1xuK1x0XHRcdGNsZWFyX3BhZ2VfdGFnX3JlZihwZm5fdG9fcGFnZShuZXh0KSk7XG4rXHRcdFx0Kyt0b3RhbF9od3A7XG4rXHRcdH1cbitcbitcdFx0X19mcmVlX3ByZXBhcmVkX2NvbnRpZ19yYW5nZShwZm5fdG9fcGFnZShjdXJyKSwgbmV4dCAtIGN1cnIsXG4rXHRcdFx0XHRcdCAgICAgZnBpX2ZsYWdzKTtcbitcdFx0dG90YWxfZnJlZWQgKz0gbmV4dCAtIGN1cnI7XG4rXG4rXHRcdGlmIChuZXh0ID09IGVuZF9wZm4pXG4rXHRcdFx0YnJlYWs7XG4rXG4rXHRcdGN1cnIgPSBuZXh0ICsgMTtcbitcdH1cbitcbitcdHByX2luZm8oXCJGcmVlZCAlI2x4IHBhZ2VzLCBleGNsdWRlZCAlI2x4IEhXUG9pc29uIHBhZ2VzXFxuXCIsXG4rXHRcdHRvdGFsX2ZyZWVkLCB0b3RhbF9od3ApO1xuK31cbitcbiAjaWZkZWYgQ09ORklHX0NPTlRJR19BTExPQ1xuIC8qIFVzYWdlOiBTZWUgYWRtaW4tZ3VpZGUvZHluYW1pYy1kZWJ1Zy1ob3d0by5yc3QgKi9cbiBzdGF0aWMgdm9pZCBhbGxvY19jb250aWdfZHVtcF9wYWdlcyhzdHJ1Y3QgbGlzdF9oZWFkICpwYWdlX2xpc3QpXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vbWVtb3J5LWZhaWx1cmUuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL21lbW9yeS1mYWlsdXJlLmNcbmluZGV4IDAzMmVkOTUyMDU3YzYyLi43OGMxMDVjZTJhZjE4NSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL21lbW9yeS1mYWlsdXJlLmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL21lbW9yeS1mYWlsdXJlLmNcbkBAIC0xOCw2ICsxOCw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbWFnaWMuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2Vycm5vLmhcdTAwM2VcbiBcbisjaW5jbHVkZSBcImh1Z2VwYWdlX3NldHRpbmdzLmhcIlxuICNpbmNsdWRlIFwidm1fdXRpbC5oXCJcbiBcbiBlbnVtIGluamVjdF90eXBlIHtcbkBAIC0yNyw2ICsyOCw3IEBAIGVudW0gaW5qZWN0X3R5cGUge1xuIFxuIGVudW0gcmVzdWx0X3R5cGUge1xuIFx0TUFEVl9IQVJEX0FOT04sXG4rXHRNQURWX0hBUkRfQU5PTl9IVUdFVExCLFxuIFx0TUFEVl9IQVJEX0NMRUFOX1BBR0VDQUNIRSxcbiBcdE1BRFZfSEFSRF9ESVJUWV9QQUdFQ0FDSEUsXG4gXHRNQURWX1NPRlRfQU5PTixcbkBAIC00Nyw2ICs0OSw4IEBAIEZJWFRVUkUobWVtb3J5X2ZhaWx1cmUpXG4gXHRpbnQgcGFnZW1hcF9mZDtcbiBcdGludCBrcGFnZWZsYWdzX2ZkO1xuIFx0Ym9vbCB0cmlnZ2VyZWQ7XG4rXHQvKiBOdW1iZXIgb2YgaW5pdGlhbCBIdWdlVExCIHBhZ2VzIHdpdGggZGVmYXVsdCBwYWdlIHNpemUuICovXG4rXHR1bnNpZ25lZCBsb25nIG5yX2h1Z2V0bGJfcGFnZXM7XG4gfTtcbiBcbiBGSVhUVVJFX1ZBUklBTlQobWVtb3J5X2ZhaWx1cmUpXG5AQCAtMTU3LDYgKzE2MSw3IEBAIHN0YXRpYyB2b2lkIGNoZWNrKHN0cnVjdCBfX3Rlc3RfbWV0YWRhdGEgKl9tZXRhZGF0YSwgRklYVFVSRV9EQVRBKG1lbW9yeV9mYWlsdXJlXG4gXHRcdCAgdm9pZCAqdmFkZHIsIGVudW0gcmVzdWx0X3R5cGUgdHlwZSwgaW50IHNldGptcClcbiB7XG4gXHR1bnNpZ25lZCBsb25nIHNpemU7XG4rXHR1bnNpZ25lZCBsb25nIG5yX2h1Z2V0bGJfcGFnZXM7XG4gXHR1aW50NjRfdCBwZm5fZmxhZ3M7XG4gXG4gXHRzd2l0Y2ggKHR5cGUpIHtcbkBAIC0xNzQsNiArMTc5LDcgQEAgc3RhdGljIHZvaWQgY2hlY2soc3RydWN0IF9fdGVzdF9tZXRhZGF0YSAqX21ldGFkYXRhLCBGSVhUVVJFX0RBVEEobWVtb3J5X2ZhaWx1cmVcbiBcdFx0QVNTRVJUX05FKHBhZ2VtYXBfZ2V0X3BmbihzZWxmLVx1MDAzZXBhZ2VtYXBfZmQsIHZhZGRyKSwgc2VsZi1cdTAwM2VwZm4pO1xuIFx0XHRicmVhaztcbiBcdGNhc2UgTUFEVl9IQVJEX0FOT046XG4rXHRjYXNlIE1BRFZfSEFSRF9BTk9OX0hVR0VUTEI6XG4gXHRjYXNlIE1BRFZfSEFSRF9ESVJUWV9QQUdFQ0FDSEU6XG4gXHRcdC8qIFRoZSBTSUdCVVMgc2lnbmFsIHNob3VsZCBoYXZlIGJlZW4gcmVjZWl2ZWQuICovXG4gXHRcdEFTU0VSVF9FUShzZXRqbXAsIDEpO1xuQEAgLTE4NCw4ICsxOTAsMTUgQEAgc3RhdGljIHZvaWQgY2hlY2soc3RydWN0IF9fdGVzdF9tZXRhZGF0YSAqX21ldGFkYXRhLCBGSVhUVVJFX0RBVEEobWVtb3J5X2ZhaWx1cmVcbiBcdFx0QVNTRVJUX0VRKDFVTCBcdTAwM2NcdTAwM2Mgc2lnaW5mby5zaV9hZGRyX2xzYiwgc2VsZi1cdTAwM2VwYWdlX3NpemUpO1xuIFx0XHRBU1NFUlRfRVEoc2lnaW5mby5zaV9hZGRyLCB2YWRkcik7XG4gXG4tXHRcdC8qIFhYWCBDaGVjayBiYWNraW5nIHB0ZSBpcyBod3BvaXNvbiBlbnRyeSB3aGVuIHN1cHBvcnRlZC4gKi9cbi1cdFx0QVNTRVJUX1RSVUUocGFnZW1hcF9pc19zd2FwcGVkKHNlbGYtXHUwMDNlcGFnZW1hcF9mZCwgdmFkZHIpKTtcbitcdFx0aWYgKHR5cGUgIT0gTUFEVl9IQVJEX0FOT05fSFVHRVRMQilcbitcdFx0XHQvKlxuK1x0XHRcdCAqIENoZWNrIGJhY2tpbmcgcHRlIGlzIGh3cG9pc29uIGVudHJ5IHdoZW4gc3VwcG9ydGVkLlxuK1x0XHRcdCAqIEFsdGhvdWdoIHRyeV90b191bm1hcF9vbmUoKSBhbHNvIGluc3RhbGxzIGh3cG9pc29uXG4rXHRcdFx0ICogZW50cnkgZm9yIEh1Z2VUTEIsIHBhZ2VtYXBfaHVnZXRsYl9yYW5nZSgpIGRvZXNuJ3RcbitcdFx0XHQgKiBwYXJzZSBzd2FwIGVudHJpZXMgYXQgYWxsLlxuK1x0XHRcdCAqL1xuK1x0XHRcdEFTU0VSVF9UUlVFKHBhZ2VtYXBfaXNfc3dhcHBlZChzZWxmLVx1MDAzZXBhZ2VtYXBfZmQsIHZhZGRyKSk7XG4rXG4gXHRcdGJyZWFrO1xuIFx0ZGVmYXVsdDpcbiBcdFx0U0tJUChyZXR1cm4sIFwidW5leHBlY3RlZCBpbmplY3QgdHlwZSAlZC5cXG5cIiwgdHlwZSk7XG5AQCAtMTkzLDcgKzIwNiwxOSBAQCBzdGF0aWMgdm9pZCBjaGVjayhzdHJ1Y3QgX190ZXN0X21ldGFkYXRhICpfbWV0YWRhdGEsIEZJWFRVUkVfREFUQShtZW1vcnlfZmFpbHVyZVxuIFxuIFx0LyogQ2hlY2sgaWYgdGhlIHZhbHVlIG9mIEhhcmR3YXJlQ29ycnVwdGVkIGhhcyBpbmNyZWFzZWQuICovXG4gXHRBU1NFUlRfRVEoZ2V0X2hhcmR3YXJlX2NvcnJ1cHRlZF9zaXplKFx1MDAyNnNpemUpLCAwKTtcbi1cdEFTU0VSVF9FUShzaXplLCBzZWxmLVx1MDAzZWNvcnJ1cHRlZF9zaXplICsgc2VsZi1cdTAwM2VwYWdlX3NpemUgLyAxMDI0KTtcbitcbitcdGlmICh0eXBlID09IE1BRFZfSEFSRF9BTk9OX0hVR0VUTEIpIHtcbitcdFx0LypcbitcdFx0ICogT25seSBvbmUgcGFnZSBpcyBoYXJkd2FyZSBjb3JydXB0ZWQ7IHRoZSByZXN0IHNob3VsZCBhbGwgYmVcbitcdFx0ICogcmVsZWFzZWQgdG8gYnVkZHkgYWxsb2NhdG9yLlxuK1x0XHQgKi9cbitcdFx0QVNTRVJUX0VRKHNpemUsIHNlbGYtXHUwMDNlY29ycnVwdGVkX3NpemUgKyBnZXRwYWdlc2l6ZSgpIC8gMTAyNCk7XG4rXHRcdC8qIEh1Z2VUTEIgc2hvdWxkIGhhdmUgbG9zdCB0aGUgSFdQb2lzb24gSHVnZVRMQiBwYWdlLiAqL1xuK1x0XHRucl9odWdldGxiX3BhZ2VzID0gaHVnZXRsYl9ucl9kZWZhdWx0X3BhZ2VzKCk7XG4rXHRcdEFTU0VSVF9FUShucl9odWdldGxiX3BhZ2VzICsgMSwgc2VsZi1cdTAwM2Vucl9odWdldGxiX3BhZ2VzKTtcbitcdH0gZWxzZSB7XG4rXHRcdEFTU0VSVF9FUShzaXplLCBzZWxmLVx1MDAzZWNvcnJ1cHRlZF9zaXplICsgc2VsZi1cdTAwM2VwYWdlX3NpemUgLyAxMDI0KTtcbitcdH1cbiBcbiBcdC8qIENoZWNrIGlmIEhXUG9pc29uIGZsYWcgaXMgc2V0LiAqL1xuIFx0QVNTRVJUX0VRKHBhZ2VmbGFnc19nZXQoc2VsZi1cdTAwM2VwZm4sIHNlbGYtXHUwMDNla3BhZ2VmbGFnc19mZCwgXHUwMDI2cGZuX2ZsYWdzKSwgMCk7XG5AQCAtMjQ3LDYgKzI3Miw0NSBAQCBURVNUX0YobWVtb3J5X2ZhaWx1cmUsIGFub24pXG4gXHRBU1NFUlRfRVEobXVubWFwKGFkZHIsIHNlbGYtXHUwMDNlcGFnZV9zaXplKSwgMCk7XG4gfVxuIFxuK1RFU1RfRihtZW1vcnlfZmFpbHVyZSwgYW5vbl9odWdldGxiKVxuK3tcbitcdGNoYXIgKmFkZHI7XG4rXHRpbnQgcmV0O1xuK1x0Y29uc3QgdW5zaWduZWQgbG9uZyBucl9hbGxvY19odWdldGxiX3BhZ2VzID0gNDtcbitcdHVuc2lnbmVkIGxvbmcgYWxsb2Nfc2l6ZTtcbitcbitcdGlmICh2YXJpYW50LVx1MDAzZXR5cGUgPT0gTUFEVl9TT0ZUKVxuK1x0XHRTS0lQKHJldHVybiwgXCJTb2Z0IG9mZmxpbmUgdGVzdCBpcyBub3QgaW1wbGVtZW50ZWRcIik7XG4rXG4rXHQvKiBIdWdlVExCIHNldHRpbmdzIHdpbGwgYmUgYXV0b21hdGljYWxseSByZXN0b3JlZCB3aGVuIHRlc3QgZXhpdHMuICovXG4rXHRodWdldGxiX3NldHVwX2RlZmF1bHQobnJfYWxsb2NfaHVnZXRsYl9wYWdlcyk7XG4rXG4rXHRhbGxvY19zaXplID0gZGVmYXVsdF9odWdlX3BhZ2Vfc2l6ZSgpICogbnJfYWxsb2NfaHVnZXRsYl9wYWdlcztcbitcdHNlbGYtXHUwMDNlcGFnZV9zaXplID0gZGVmYXVsdF9odWdlX3BhZ2Vfc2l6ZSgpO1xuK1x0c2VsZi1cdTAwM2Vucl9odWdldGxiX3BhZ2VzID0gaHVnZXRsYl9ucl9kZWZhdWx0X3BhZ2VzKCk7XG4rXG4rXHRhZGRyID0gbW1hcCgwLCBhbGxvY19zaXplLCBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFLFxuK1x0XHQgICAgTUFQX0FOT05ZTU9VUyB8IE1BUF9QUklWQVRFIHwgTUFQX0hVR0VUTEIsIC0xLCAwKTtcbitcdGlmIChhZGRyID09IE1BUF9GQUlMRUQpXG4rXHRcdFNLSVAocmV0dXJuLCBcIm1tYXAgZmFpbGVkLCBub3QgZW5vdWdoIG1lbW9yeSBvciBodWdldGxiIG5vdCBzdXBwb3J0ZWQuXFxuXCIpO1xuK1x0bWVtc2V0KGFkZHIsIDB4Y2UsIGFsbG9jX3NpemUpO1xuK1xuK1x0cHJlcGFyZShfbWV0YWRhdGEsIHNlbGYsIGFkZHIpO1xuK1xuK1x0cmV0ID0gc2lnc2V0am1wKHNpZ25hbF9qbXBfYnVmLCAxKTtcbitcdGlmICghc2VsZi1cdTAwM2V0cmlnZ2VyZWQpIHtcbitcdFx0c2VsZi1cdTAwM2V0cmlnZ2VyZWQgPSB0cnVlO1xuK1x0XHRBU1NFUlRfRVEodmFyaWFudC1cdTAwM2VpbmplY3Qoc2VsZiwgYWRkciksIDApO1xuK1x0XHRGT1JDRV9SRUFEKCphZGRyKTtcbitcdH1cbitcbitcdGNoZWNrKF9tZXRhZGF0YSwgc2VsZiwgYWRkciwgTUFEVl9IQVJEX0FOT05fSFVHRVRMQiwgcmV0KTtcbitcbitcdGNsZWFudXAoX21ldGFkYXRhLCBzZWxmLCBhZGRyKTtcbitcbitcdEFTU0VSVF9FUShtdW5tYXAoYWRkciwgYWxsb2Nfc2l6ZSksIDApO1xuK31cbitcbiBzdGF0aWMgaW50IHByZXBhcmVfZmlsZShjb25zdCBjaGFyICpmbmFtZSwgdW5zaWduZWQgbG9uZyBzaXplKVxuIHtcbiBcdGludCBmZDtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA1VDE4OjIxOjI0LjkxODg0NDE3NloiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjgzNzkzNTkyNTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgS2VybmVsIFBhdGNoIGZvciBGdXp6aW5nIFJlbGV2YW5jZSoqXG5cbk9rYXksIHNvIEkndmUgZ290IHRoaXMgcGF0Y2ggaW4gZnJvbnQgb2YgbWUsIGFuZCBteSBpbW1lZGlhdGUgY29uY2VybiBpcyB3aGV0aGVyIGl0IGludHJvZHVjZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHNpZ25pZmljYW50IGVub3VnaCB0byB3YXJyYW50IGZ1enppbmcuIFRoZSBmaWxlcyB0b3VjaGVkIGFyZTogYGluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oYCwgYG1tL21lbW9yeS1mYWlsdXJlLmNgLCBgbW0vcGFnZV9hbGxvYy5jYCwgYW5kIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9tZW1vcnktZmFpbHVyZS5jYC4gVGhhdCdzIGFscmVhZHkgdGVsbGluZyAtIHRoZSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbSBpcyBiZWluZyB0d2Vha2VkLlxuXG5Mb29raW5nIGNsb3NlcjpcblxuMS4gIEluIGBpbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaGAsIGl0IGxvb2tzIGxpa2UgYSBjb25kaXRpb25hbCBwcmVwcm9jZXNzb3IgbWFjcm8sIGBQYWdlSGFzSFdQb2lzb25lZGAsIGhhcyBiZWVuIHVwZGF0ZWQgdG8gYWNjb3VudCBmb3IgYm90aCBgQ09ORklHX0hVR0VUTEJfUEFHRWAgYW5kIGBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VgLCBub3QganVzdCB0aGUgbGF0dGVyLlxuXG4yLiAgYG1tL21lbW9yeS1mYWlsdXJlLmNgIGlzIHNlZWluZyBzb21lIHNpZ25pZmljYW50IGFkZGl0aW9ucyBhbmQgbW9kaWZpY2F0aW9ucy4gIFRoZXJlJ3MgYSBuZXcgZnVuY3Rpb24sIGBfX2h1Z2VwYWdlX2hhbmRsZV9wb2lzb25gLCB3aGljaCBhcHBlYXJzIHRvIGJlIGhhbmRsaW5nIHBvaXNvbmVkIGh1Z2UgcGFnZXMuIEl0IGNhbGxzIGBkaXNzb2x2ZV9mcmVlX2h1Z2V0bGJfZm9saW8oKWAgYW5kIHJlcGxhY2VzIGNhbGxzIHRvIGBfX3BhZ2VfaGFuZGxlX3BvaXNvbigpYC4gIFBsdXMsIGBmb2xpb19jbGVhcl9odWdldGxiX2h3cG9pc29uKClgIG5vdyBjYWxscyBgZm9saW9fc2V0X2hhc19od3BvaXNvbmVkKClgLiBBbGwgb2YgdGhpcyBzY3JlYW1zIEh1Z2VUTEIgYW5kIG1lbW9yeSBmYWlsdXJlIGludGVyYWN0aW9uLlxuXG4zLiAgYG1tL3BhZ2VfYWxsb2MuY2AgaXMgZ2V0dGluZyBldmVuIG1vcmUgaW50ZXJlc3RpbmcuIEl0J3MgYWRkaW5nIGFuIGBGUElfU0FOSVRJWkVgIGZsYWcsIGFuZCBhIG5ldyBgZnJlZV9wYWdlc19zYW5pdGl6ZSgpYCBmdW5jdGlvbi4gIFRoZSBleGlzdGluZyBgX19mcmVlX3BhZ2VzX3ByZXBhcmUoKWAgbm93IGNoZWNrcyBmb3IgYGZvbGlvX3Rlc3RfaGFzX2h3cG9pc29uZWQoKWAgYW5kIGNhbGxzIGBmcmVlX2hhc19od3BvaXNvbmVkKClgLCB3aGljaCBsb29rcyBsaWtlIGl0J3Mgc3BlY2lmaWNhbGx5IGRlYWxpbmcgd2l0aCBmcmVlaW5nIHBhZ2VzIHRoYXQgYXJlIG1hcmtlZCBhcyBoYXZpbmcgSFdQb2lzb25lZCBwYWdlcywgc2tpcHBpbmcgdGhlIHBvaXNvbmVkIG9uZXMgYW5kIG9ubHkgZnJlZWluZyBoZWFsdGh5IG9uZXMuIEFkZGl0aW9uYWxseSwgYGZyZWVfcHJlcGFyZWRfY29udGlnX3JhbmdlKClgIG5vdyBjb25kaXRpb25hbGx5IGNhbGxzIGBmcmVlX3BhZ2VzX3Nhbml0aXplKClgLlxuXG40LiAgRmluYWxseSwgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL21lbW9yeS1mYWlsdXJlLmNgIGFkZHMgYSBuZXcgdGVzdCBjYWxsZWQgYGFub25faHVnZXRsYmAuXG5cblRoaXMgcGF0Y2ggaXMgdW5kZW5pYWJseSBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBkaXJlY3RseSBpbXBhY3RpbmcgaG93IHRoZSBrZXJuZWwgaGFuZGxlcyBtZW1vcnkgZmFpbHVyZXMsIHNwZWNpZmljYWxseSByZWxhdGVkIHRvIEhXUG9pc29uIGFuZCBIdWdlVExCIHBhZ2VzLiBHaXZlbiB0aGUgc2NvcGUgb2YgY2hhbmdlcywgaXQgd2FycmFudHMgYSBjbG9zZXIgbG9vaywgZXNwZWNpYWxseSBmb2N1c2luZyBvbiBgQ09ORklHX01FTU9SWV9GQUlMVVJFYCwgYENPTkZJR19IVUdFVExCX1BBR0VgLCBhbmQgYENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRWAuXG5cbkknbSBwYXJ0aWN1bGFybHkgaW50ZXJlc3RlZCBpbiBgX19odWdlcGFnZV9oYW5kbGVfcG9pc29uYCAoaW4gYG1tL21lbW9yeS1mYWlsdXJlLmNgKSBhbmQgYGZyZWVfaGFzX2h3cG9pc29uZWRgIChpbiBgbW0vcGFnZV9hbGxvYy5jYCkuIEkgbmVlZCB0byBjaGVjayBob3cgdGhlc2UgZnVuY3Rpb25zIGFyZSByZWFjaGFibGUsIHNvIEknbGwgYmUgdXNpbmcgYGRlZmF1bHRfYXBpOmdyZXBwZXJgIHRvIHNlZSB3aGVyZSB0aGV5IGFyZSBjYWxsZWQgYW5kIGlmIHRoZXkgYXJlIHJlbGV2YW50IHRvIGZ1enppbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc1MzgsIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MzAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wNVQxODoyMTozMy4yOTgyMDU2OThaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mjc2NTE3OTc4OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJfX2h1Z2VwYWdlX2hhbmRsZV9wb2lzb25cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vbWVtb3J5LWZhaWx1cmUuYz0xNzQ9c3RhdGljIERFRklORV9NVVRFWChwZm5fc3BhY2VfbG9jayk7XFxuLS1cXG5tbS9tZW1vcnktZmFpbHVyZS5jLTE4MS0gKi9cXG5tbS9tZW1vcnktZmFpbHVyZS5jOjE4MjpzdGF0aWMgaW50IF9faHVnZXBhZ2VfaGFuZGxlX3BvaXNvbihzdHJ1Y3QgcGFnZSAqcGFnZSlcXG5tbS9tZW1vcnktZmFpbHVyZS5jLTE4My17XFxuLS1cXG5tbS9tZW1vcnktZmFpbHVyZS5jPTExNzI9c3RhdGljIGludCBtZV9odWdlX3BhZ2Uoc3RydWN0IHBhZ2Vfc3RhdGUgKnBzLCBzdHJ1Y3QgcGFnZSAqcClcXG4tLVxcbm1tL21lbW9yeS1mYWlsdXJlLmMtMTE5Mi1cXHRcXHRmb2xpb19wdXQoZm9saW8pO1xcbm1tL21lbW9yeS1mYWlsdXJlLmM6MTE5MzpcXHRcXHRpZiAoX19odWdlcGFnZV9oYW5kbGVfcG9pc29uKHApKSB7XFxubW0vbWVtb3J5LWZhaWx1cmUuYy0xMTk0LVxcdFxcdFxcdHJlcyA9IE1GX0ZBSUxFRDtcXG4tLVxcbm1tL21lbW9yeS1mYWlsdXJlLmM9MjEwNz1zdGF0aWMgaW50IHRyeV9tZW1vcnlfZmFpbHVyZV9odWdldGxiKHVuc2lnbmVkIGxvbmcgcGZuLCBpbnQgZmxhZ3MpXFxuLS1cXG5tbS9tZW1vcnktZmFpbHVyZS5jLTIxNTktXFx0XFx0Zm9saW9fdW5sb2NrKGZvbGlvKTtcXG5tbS9tZW1vcnktZmFpbHVyZS5jOjIxNjA6XFx0XFx0aWYgKF9faHVnZXBhZ2VfaGFuZGxlX3BvaXNvbihwKSkge1xcbm1tL21lbW9yeS1mYWlsdXJlLmMtMjE2MS1cXHRcXHRcXHRyZXMgPSBNRl9GQUlMRUQ7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA1VDE4OjIxOjM2LjA2MzM5OTQ5OFoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQwODMzMTQ1NzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIE1lbW9yeSBGYWlsdXJlIEhhbmRsaW5nKipcblxuT2theSwgc28gSSdtIGRpdmluZyBpbnRvIHRoaXMgbWVtb3J5IGZhaWx1cmUgaGFuZGxpbmcgY29kZS4gSXQgbG9va3MgbGlrZSBgbWVfaHVnZV9wYWdlYCBhbmQgYHRyeV9tZW1vcnlfZmFpbHVyZV9odWdldGxiYCBhcmUga2V5IHBsYXllcnMgaGVyZS4gSSdtIGZvY3VzaW5nIG9uIGhvdyB0aGUgc3lzdGVtIHJlc3BvbmRzIHdoZW4gbWVtb3J5IGVycm9ycyBhcmUgZGV0ZWN0ZWQuIE5vdywgYGZyZWVfaGFzX2h3cG9pc29uZWRgIGlzIGludHJpZ3VpbmcuIEl0J3MgY2FsbGVkIGZyb20gYF9fZnJlZV9wYWdlc19wcmVwYXJlYCwgd2hpY2ggaXMgYSAqdmVyeSogaG90IHBhdGgg4oCTIHRoYXQncyBzb21ldGhpbmcgSSBuZWVkIHRvIHBheSBhdHRlbnRpb24gdG8gYmVjYXVzZSBwZXJmb3JtYW5jZSBtYXR0ZXJzLiBIb3dldmVyLCBgZnJlZV9oYXNfaHdwb2lzb25lZGAgaXRzZWxmIGlzIG9ubHkgZXhlY3V0ZWQgd2hlbiBgc2hvdWxkX2ZoaGAgaXMgdHJ1ZS4gYHNob3VsZF9maGhgIHNlZW1zIHRvIGJlIGNvbmRpdGlvbmFsIG9uIGEgYGNvbXBvdW5kYCBwYWdlIGFuZCB0aGUgYGZvbGlvX3Rlc3RfaGFzX2h3cG9pc29uZWQoZm9saW8pYCByZXN1bHQuIFRoYXQgbWVhbnMgaXQgb25seSBnZXRzIGNhbGxlZCB3aGVuIGRlYWxpbmcgd2l0aCBjb21wb3VuZHMgd2l0aCBoYXJkd2FyZSBwb2lzb25pbmcuIEdpdmVuIGl0cyBjb250ZXh0LCBgZnJlZV9oYXNfaHdwb2lzb25lZGAgc2VlbXMgbGlrZSBhIHByaW1lIHRhcmdldCBmb3IgZGVlcGVyIGludmVzdGlnYXRpb24sIGEgZ29vZCBmb2N1cyBzeW1ib2wuXG5cbkFsc28sIEkgc2hvdWxkIGRlZmluaXRlbHkgY2hlY2sgYF9faHVnZXBhZ2VfaGFuZGxlX3BvaXNvbmAgYWxvbmdzaWRlIGl0LlxuXG5SaWdodCBub3csIEkgd2FudCB0byBzdGFydCBieSBleGFtaW5pbmcgYGZyZWVfaGFzX2h3cG9pc29uZWRgIGNsb3NlbHkuIExldCdzIHNlZSB3aGF0J3MgYWN0dWFsbHkgZ29pbmcgb24gdGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjkxMjgsIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNDYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDVUMTg6MjE6NDAuMTQ2NzE2OTY3WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwODQxMTA5NTEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZnJlZV9oYXNfaHdwb2lzb25lZFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9wYWdlX2FsbG9jLmM9MjE3PXVuc2lnbmVkIGludCBwYWdlYmxvY2tfb3JkZXIgX19yZWFkX21vc3RseTtcXG4tLVxcbm1tL3BhZ2VfYWxsb2MuYy0yMTktXFxubW0vcGFnZV9hbGxvYy5jOjIyMDpzdGF0aWMgdm9pZCBmcmVlX2hhc19od3BvaXNvbmVkKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBpbnQgb3JkZXIsXFxubW0vcGFnZV9hbGxvYy5jLTIyMS1cXHRcXHRcXHRcXHRmcGlfdCBmcGlfZmxhZ3MpO1xcbi0tXFxubW0vcGFnZV9hbGxvYy5jPTEzNzU9c3RhdGljIF9fYWx3YXlzX2lubGluZSBib29sIF9fZnJlZV9wYWdlc19wcmVwYXJlKHN0cnVjdCBwYWdlICpwYWdlLFxcbi0tXFxubW0vcGFnZV9hbGxvYy5jLTE0OTQtXFx0aWYgKHNob3VsZF9maGgpIHtcXG5tbS9wYWdlX2FsbG9jLmM6MTQ5NTpcXHRcXHRmcmVlX2hhc19od3BvaXNvbmVkKHBhZ2UsIG9yZGVyLCBmcGlfZmxhZ3MgfCBGUElfU0FOSVRJWkUpO1xcbm1tL3BhZ2VfYWxsb2MuYy0xNDk2LVxcdFxcdHJldHVybiBmYWxzZTtcXG4tLVxcbm1tL3BhZ2VfYWxsb2MuYz03MDE0PXZvaWQgX19mcmVlX2NvbnRpZ19yYW5nZSh1bnNpZ25lZCBsb25nIHBmbiwgdW5zaWduZWQgbG9uZyBucl9wYWdlcylcXG4tLVxcbm1tL3BhZ2VfYWxsb2MuYy03MDM1LSAqL1xcbm1tL3BhZ2VfYWxsb2MuYzo3MDM2OnN0YXRpYyB2b2lkIGZyZWVfaGFzX2h3cG9pc29uZWQoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGludCBvcmRlcixcXG5tbS9wYWdlX2FsbG9jLmMtNzAzNy1cXHRcXHRcXHRcXHRmcGlfdCBmcGlfZmxhZ3MpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA1VDE4OjIxOjQyLjIzMDg0MDAxOFoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMzNjcyMzUyMDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhbmFseXNpcyBvZiB0aG9zZSBmdW5jdGlvbiBjYWxsczpcblxuKipEaXNzZWN0aW5nIEh1Z2VwYWdlIE1hbmFnZW1lbnQqKlxuXG5Pa2F5LCBzbyBJJ20gZGlnZ2luZyBpbnRvIGhvdyBodWdlcGFnZXMgYXJlIGhhbmRsZWQuIE15IGluaXRpYWwgZm9jdXMgaXMgb24gdGhlIGBfX2h1Z2VwYWdlX2hhbmRsZV9wb2lzb25gIGZ1bmN0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgcm9sZSwgYW5kIGl0IGxvb2tzIGxpa2UgaXQncyBjcnVjaWFsLCBjb25zaWRlcmluZyBpdCdzIGNhbGxlZCBmcm9tIHR3byBrZXkgbG9jYXRpb25zLiBTcGVjaWZpY2FsbHksIGBtZV9odWdlX3BhZ2VgIGFuZCBgdHJ5X21lbW9yeV9mYWlsdXJlX2h1Z2V0bGJgLiBUaGF0IHRlbGxzIG1lIGl0J3MgbGlrZWx5IGludm9sdmVkIGluIGVycm9yIGhhbmRsaW5nIG9yIHZhbGlkYXRpb24gcmVsYXRlZCB0byBodWdlcGFnZXMsIG1heWJlIGRlYWxpbmcgd2l0aCBwb3RlbnRpYWxseSBjb3JydXB0ZWQgbWVtb3J5IHJlZ2lvbnMuIEkgbmVlZCB0byBsb29rIGNsb3NlciBhdCB3aGF0IHRob3NlIGNhbGxlcnMgZG8gdG8gZ2V0IHRoZSBmdWxsIHBpY3R1cmUuXG5cbk5leHQsIEknbGwgdHVybiBteSBhdHRlbnRpb24gdG8gYGRpc3NvbHZlX2ZyZWVfaHVnZXRsYl9mb2xpb2AuIEJhc2VkIG9uIHRoZSBuYW1lLCBpdCBzZWVtcyByZWxhdGVkIHRvIHJlbGVhc2luZyBvciBkZWFsbG9jYXRpbmcgaHVnZXBhZ2UgZm9saW9zLCB3aGljaCBpcyB0aGUgaGlnaGVyLWxldmVsIHJlcHJlc2VudGF0aW9uIG9mIGEgaHVnZXBhZ2UuIFRoZSBcImRpc3NvbHZlXCIgcGFydCBzdWdnZXN0cyBpdCBtaWdodCBiZSBoYW5kbGluZyBmcmFnbWVudGF0aW9uIG9yIGNvbWJpbmluZyBtdWx0aXBsZSBzbWFsbGVyIHJlZ2lvbnMuIEkgZXhwZWN0IHRoaXMgZnVuY3Rpb24gaGFzIGludGVyZXN0aW5nIGludGVyYWN0aW9uIHdpdGggdGhlIHBhZ2UgcmVjbGFpbSBzdWJzeXN0ZW0uIEknbGwgbmVlZCB0byBzZWUgaG93IGl0IGZpdHMgaW50byB0aGUgYnJvYWRlciBhbGxvY2F0aW9uIGFuZCBkZWFsbG9jYXRpb24gbGlmZWN5Y2xlIG9mIGh1Z2VwYWdlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6OTg5MCwiT3V0cHV0VG9rZW5zIjoyNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA1VDE4OjIxOjQ1LjU5ODA3ODQxMloiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTQ5MDUzMzkxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRpc3NvbHZlX2ZyZWVfaHVnZXRsYl9mb2xpb1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaD04ODA9c3RhdGljIGlubGluZSBpbnQgaHN0YXRlX2luZGV4KHN0cnVjdCBoc3RhdGUgKmgpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaC04ODQtXFxuaW5jbHVkZS9saW51eC9odWdldGxiLmg6ODg1OmludCBkaXNzb2x2ZV9mcmVlX2h1Z2V0bGJfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbyk7XFxuaW5jbHVkZS9saW51eC9odWdldGxiLmg6ODg2OmludCBkaXNzb2x2ZV9mcmVlX2h1Z2V0bGJfZm9saW9zKHVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuLFxcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oLTg4Ny1cXHRcXHRcXHRcXHQgICAgdW5zaWduZWQgbG9uZyBlbmRfcGZuKTtcXG4tLVxcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oPTEyMTQ9c3RhdGljIGlubGluZSBpbnQgaHN0YXRlX2luZGV4KHN0cnVjdCBoc3RhdGUgKmgpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaC0xMjE4LVxcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oOjEyMTk6c3RhdGljIGlubGluZSBpbnQgZGlzc29sdmVfZnJlZV9odWdldGxiX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuaW5jbHVkZS9saW51eC9odWdldGxiLmgtMTIyMC17XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaC0xMjIzLVxcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oOjEyMjQ6c3RhdGljIGlubGluZSBpbnQgZGlzc29sdmVfZnJlZV9odWdldGxiX2ZvbGlvcyh1bnNpZ25lZCBsb25nIHN0YXJ0X3BmbixcXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaC0xMjI1LVxcdFxcdFxcdFxcdFxcdCAgIHVuc2lnbmVkIGxvbmcgZW5kX3BmbilcXG4tLVxcbm1tL2h1Z2V0bGIuYz0xOTA2PXN0YXRpYyBzdHJ1Y3QgZm9saW8gKnJlbW92ZV9wb29sX2h1Z2V0bGJfZm9saW8oc3RydWN0IGhzdGF0ZSAqaCxcXG4tLVxcbm1tL2h1Z2V0bGIuYy0xOTQzLSAqL1xcbm1tL2h1Z2V0bGIuYzoxOTQ0OmludCBkaXNzb2x2ZV9mcmVlX2h1Z2V0bGJfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbylcXG5tbS9odWdldGxiLmMtMTk0NS17XFxuLS1cXG5tbS9odWdldGxiLmMtMjAyNy0gKiBwYXJ0IG9mIGl0IGxpZXMgd2l0aGluIHRoZSBnaXZlbiByYW5nZS5cXG5tbS9odWdldGxiLmM6MjAyODogKiBBbHNvIG5vdGUgdGhhdCBpZiBkaXNzb2x2ZV9mcmVlX2h1Z2V0bGJfZm9saW8oKSByZXR1cm5zIHdpdGggYW4gZXJyb3IsIGFsbFxcbm1tL2h1Z2V0bGIuYy0yMDI5LSAqIGZyZWUgaHVnZXRsYiBmb2xpb3MgdGhhdCB3ZXJlIGRpc3NvbHZlZCBiZWZvcmUgdGhhdCBlcnJvciBhcmUgbG9zdC5cXG5tbS9odWdldGxiLmMtMjAzMC0gKi9cXG5tbS9odWdldGxiLmM6MjAzMTppbnQgZGlzc29sdmVfZnJlZV9odWdldGxiX2ZvbGlvcyh1bnNpZ25lZCBsb25nIHN0YXJ0X3BmbiwgdW5zaWduZWQgbG9uZyBlbmRfcGZuKVxcbm1tL2h1Z2V0bGIuYy0yMDMyLXtcXG4tLVxcbm1tL2h1Z2V0bGIuYy0yMDQ3LVxcdFxcdGZvbGlvID0gcGZuX2ZvbGlvKHBmbik7XFxubW0vaHVnZXRsYi5jOjIwNDg6XFx0XFx0cmMgPSBkaXNzb2x2ZV9mcmVlX2h1Z2V0bGJfZm9saW8oZm9saW8pO1xcbm1tL2h1Z2V0bGIuYy0yMDQ5LVxcdFxcdGlmIChyYylcXG4tLVxcbm1tL21lbW9yeS1mYWlsdXJlLmM9MTc0PXN0YXRpYyBERUZJTkVfTVVURVgocGZuX3NwYWNlX2xvY2spO1xcbi0tXFxubW0vbWVtb3J5LWZhaWx1cmUuYy0xNzgtICogZGlmZmVyZW5jZSB0byBzb2Z0X29mZmxpbmUoKSBpcyB0aGF0LCBubyBIV1BvaXNvbiBzdWJwYWdlIHdpbGwgbWFrZVxcbm1tL21lbW9yeS1mYWlsdXJlLmM6MTc5OiAqIGludG8gYnVkZHkgYWxsb2NhdG9yIGFmdGVyIGEgc3VjY2Vzc2Z1bCBkaXNzb2x2ZV9mcmVlX2h1Z2V0bGJfZm9saW8oKSxcXG5tbS9tZW1vcnktZmFpbHVyZS5jLTE4MC0gKiBzbyB0YWtlX3BhZ2Vfb2ZmX2J1ZGR5KCkgaXMgdW5uZWNlc3NhcnkuXFxuLS1cXG5tbS9tZW1vcnktZmFpbHVyZS5jPTE4Mj1zdGF0aWMgaW50IF9faHVnZXBhZ2VfaGFuZGxlX3BvaXNvbihzdHJ1Y3QgcGFnZSAqcGFnZSlcXG4tLVxcbm1tL21lbW9yeS1mYWlsdXJlLmMtMTg2LVxcdC8qXFxubW0vbWVtb3J5LWZhaWx1cmUuYzoxODc6XFx0ICogQ2FuJ3QgdXNlIGRpc3NvbHZlX2ZyZWVfaHVnZXRsYl9mb2xpbygpIHdpdGhvdXQgYSByZWxpYWJsZVxcbm1tL21lbW9yeS1mYWlsdXJlLmMtMTg4LVxcdCAqIHJhd19od3BfbGlzdCB0ZWxsaW5nIHdoaWNoIHN1YnBhZ2UgaXMgSFdQb2lzb24uIFNvIGRvIG5vdCBmcmVlXFxuLS1cXG5tbS9tZW1vcnktZmFpbHVyZS5jLTE5NS1cXG5tbS9tZW1vcnktZmFpbHVyZS5jOjE5NjpcXHRyZXR1cm4gZGlzc29sdmVfZnJlZV9odWdldGxiX2ZvbGlvKGZvbGlvKTtcXG5tbS9tZW1vcnktZmFpbHVyZS5jLTE5Ny19XFxuLS1cXG5tbS9tZW1vcnktZmFpbHVyZS5jPTIwNj1zdGF0aWMgaW50IF9fcGFnZV9oYW5kbGVfcG9pc29uKHN0cnVjdCBwYWdlICpwYWdlKVxcbi0tXFxubW0vbWVtb3J5LWZhaWx1cmUuYy0yMTAtXFx0em9uZV9wY3BfZGlzYWJsZShwYWdlX3pvbmUocGFnZSkpO1xcbm1tL21lbW9yeS1mYWlsdXJlLmM6MjExOlxcdHJldCA9IGRpc3NvbHZlX2ZyZWVfaHVnZXRsYl9mb2xpbyhwYWdlX2ZvbGlvKHBhZ2UpKTtcXG5tbS9tZW1vcnktZmFpbHVyZS5jLTIxMi1cXHRpZiAoIXJldClcXG4tLVxcbm1tL21lbW9yeS1mYWlsdXJlLmM9MjE5PXN0YXRpYyBib29sIHBhZ2VfaGFuZGxlX3BvaXNvbihzdHJ1Y3QgcGFnZSAqcGFnZSwgYm9vbCBodWdlcGFnZV9vcl9mcmVlcGFnZSwgYm9vbCByZWxlYXNlKVxcbi0tXFxubW0vbWVtb3J5LWZhaWx1cmUuYy0yMjMtXFx0XFx0ICogRG9pbmcgdGhpcyBjaGVjayBmb3IgZnJlZSBwYWdlcyBpcyBhbHNvIGZpbmUgc2luY2VcXG5tbS9tZW1vcnktZmFpbHVyZS5jOjIyNDpcXHRcXHQgKiBkaXNzb2x2ZV9mcmVlX2h1Z2V0bGJfZm9saW8oKSByZXR1cm5zIDAgZm9yIG5vbi1odWdldGxiIGZvbGlvcyBhcyB3ZWxsLlxcbm1tL21lbW9yeS1mYWlsdXJlLmMtMjI1LVxcdFxcdCAqL1xcbi0tXFxubW0vbWVtb3J5X2hvdHBsdWcuYz0xOTAzPWludCBvZmZsaW5lX3BhZ2VzKHVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLFxcbi0tXFxubW0vbWVtb3J5X2hvdHBsdWcuYy0yMDM0LVxcdFxcdCAqL1xcbm1tL21lbW9yeV9ob3RwbHVnLmM6MjAzNTpcXHRcXHRyZXQgPSBkaXNzb2x2ZV9mcmVlX2h1Z2V0bGJfZm9saW9zKHN0YXJ0X3BmbiwgZW5kX3Bmbik7XFxubW0vbWVtb3J5X2hvdHBsdWcuYy0yMDM2LVxcdFxcdGlmIChyZXQpIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDVUMTg6MjE6NDcuNTQ3MTM3MjQzWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDU2ODcxNjU2MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEltcGFjdCBvZiB0aGUgTWVtb3J5IE1hbmFnZW1lbnQgUGF0Y2gqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGRlZmluaXRlbHkgZnVuY3Rpb25hbCDigJMgaXQncyBub3QganVzdCBhIHJlZmFjdG9yLiBJdCdzIHRvdWNoaW5nIHNvbWUgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBiaXRzLiBJdCBzZWVtcyB0byBiZSBjaGFuZ2luZyB0aGUgYmVoYXZpb3Igb2YgdGhlIG1lbW9yeSBmYWlsdXJlIGhhbmRsaW5nLCBwYXJ0aWN1bGFybHkgYXJvdW5kIGhvdyB3ZSBkZWFsIHdpdGggaHVnZSBwYWdlcy4gSXQncyBhbHNvIG1ha2luZyBhZGp1c3RtZW50cyB0byB0aGUgYnVkZHkgYWxsb2NhdG9yIGFuZCBob3cgaXQgcHJlcHMgcGFnZXMgZm9yIGZyZWVpbmcsIHNwZWNpZmljYWxseSB3aGVuIGhhcmR3YXJlLXBvaXNvbmVkIHN1YnBhZ2VzIGFyZSBpbnZvbHZlZC4gVGhhdCdzIGEgY3JpdGljYWwgYXJlYSwgd2UgbmVlZCB0byBiZSB2ZXJ5IGNhcmVmdWwgdGhhdCB0aGlzIGRvZXNuJ3QgaW50cm9kdWNlIGFueSByZWdyZXNzaW9ucy5cblxuVGhlIGJ1aWxkIGRlcGVuZGVuY2llcyBsb29rIHByZXR0eSBjbGVhci4gSXQncyBleHBlY3RpbmcgYE1FTU9SWV9GQUlMVVJFYCBlbmFibGVkLCB3aGljaCBpcyBzdGFuZGFyZCB3aGVuIHdlJ3JlIGRlYWxpbmcgd2l0aCB0aGlzIGxldmVsIG9mIGhhcmR3YXJlLXJlbGF0ZWQgaXNzdWVzLiBUaGUgcHJlc2VuY2Ugb2YgYEhVR0VUTEJfUEFHRWAgaXMgYWxzbyBleHBlY3RlZCwgc2luY2Ugd2UncmUgY2xlYXJseSBkZWFsaW5nIHdpdGggaHVnZSBwYWdlcywgYW5kIHRoYXQgd2lsbCBuZWVkIHRvIGJlIHdlbGwtZGVmaW5lZC4gVGhlbiwgdGhlcmUgaXMgdGhlIHBvdGVudGlhbGx5IGNvbmRpdGlvbmFsIGRlcGVuZGVuY3kgb24gYFRSQU5TUEFSRU5UX0hVR0VQQUdFYCwgd2hpY2ggc2VlbXMgbGlrZWx5LCBnaXZlbiB0aGUgYCNpZmAgc3RhdGVtZW50LiBPZiBjb3Vyc2UsIHRoZSBsb2dpYyBpcyBoYW5kbGluZyB0aGUgT1IgY2FzZSBvZiBlaXRoZXIgb2YgdGhvc2UuXG5cbkknbSBnb2luZyB0byBqdW1wIGludG8gYG1tL21lbW9yeS1mYWlsdXJlLmNgIGFuZCB0YWtlIGEgbG9vayBhdCB0aGUgS2NvbmZpZyBmaWxlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZXhhY3QgZGVwZW5kZW5jaWVzIGFuZCBhbnkgcG90ZW50aWFsIGNvbmZpZ3VyYXRpb24gY29uZmxpY3RzIGJlZm9yZSBJIHN0YXJ0IGxvb2tpbmcgYXQgdGhlIGNvZGUgaXRzZWxmLiBUaGUgS2NvbmZpZyB3aWxsIHRlbGwgdGhlIHN0b3J5IG9mIHRoZSBhcmNoaXRlY3R1cmUncyBjb25maWd1cmF0aW9uIG5lZWRzLCBhbmQgZ2l2ZSBjbHVlcyBhYm91dCB0aGUgb3ZlcmFsbCBpbXBhY3Qgb2YgdGhlIHBhdGNoLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTQ5OCwiT3V0cHV0VG9rZW5zIjoxOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wNVQxODoyMTo1Mi4xMTU4NTYxMDVaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwMjU4ODEyMDYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE1FTU9SWV9GQUlMVVJFXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL0tjb25maWc9Nzc0PWNvbmZpZyBBUkNIX1NVUFBPUlRTX01FTU9SWV9GQUlMVVJFXFxuLS1cXG5tbS9LY29uZmlnLTc3Ni1cXG5tbS9LY29uZmlnOjc3Nzpjb25maWcgTUVNT1JZX0ZBSUxVUkVcXG5tbS9LY29uZmlnLTc3OC1cXHRkZXBlbmRzIG9uIE1NVVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wNVQxODoyMTo1NC4xNDE3NDQ2MzFaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjU3NzQxOTI0NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gYEhVR0VUTEJfUEFHRWAqKlxuXG5Pa2F5LCB0aW1lIHRvIGRpZyBpbnRvIHRoZSBgSFVHRVRMQl9QQUdFYCBLY29uZmlnIG9wdGlvbi4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgdW5kZXJzdGFuZGluZyBvZiBob3cgdGhpcyBpcyBjb25maWd1cmVkIGFuZCBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIHJlc3Qgb2YgdGhlIHN5c3RlbS4gSSBzaG91bGQgcHJvYmFibHkgc3RhcnQgYnkgcXVpY2tseSB2ZXJpZnlpbmcgaXRzIGRlcGVuZGVuY2llcyBhbmQgd2hhdCBhcmNoaXRlY3R1cmVzIGFyZSBzdXBwb3J0ZWQuIEEgcXVpY2sgZ2xhbmNlIGF0IHRoZSByZWxldmFudCBkb2N1bWVudGF0aW9uIHdvdWxkIGJlIGEgZ29vZCBpZGVhIHRvIGNvbmZpcm0gSSdtIG9uIHRoZSByaWdodCB0cmFjayBiZWZvcmUgZ29pbmcgYW55IGZ1cnRoZXIuIFRoaXMgaXMgYSBjcml0aWNhbCBidWlsZGluZyBibG9jayBmb3IgbGFyZ2UgbWVtb3J5IHBhZ2VzLCBzbyB1bmRlcnN0YW5kaW5nIHRoZSBzcGVjaWZpY3MgaXMgaW1wb3J0YW50IGZvciBtZW1vcnkgbWFuYWdlbWVudCBhbmQgcGVyZm9ybWFuY2UgdHVuaW5nLiBJIGFsc28gc2hvdWxkIGNvbnNpZGVyIHRoZSBpbXBsaWNhdGlvbnMgb2YgZW5hYmxpbmcgb3IgZGlzYWJsaW5nIHRoaXMgZmVhdHVyZSBpbiByZWxhdGlvbiB0byBvdGhlciBzZXR0aW5ncy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTIwMDksIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wNVQxODoyMTo1Ni43MTkxNjY1MTRaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4NDY3MzY0NDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEhVR0VUTEJfUEFHRVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3NoL21tL0tjb25maWc9MTU4PWNob2ljZVxcbi0tXFxuYXJjaC9zaC9tbS9LY29uZmlnLTE2My1cXG5hcmNoL3NoL21tL0tjb25maWc6MTY0OmNvbmZpZyBIVUdFVExCX1BBR0VfU0laRV82NEtcXG5hcmNoL3NoL21tL0tjb25maWctMTY1LVxcdGJvb2wgXFxcIjY0a0JcXFwiXFxuLS1cXG5hcmNoL3NoL21tL0tjb25maWctMTY3LVxcbmFyY2gvc2gvbW0vS2NvbmZpZzoxNjg6Y29uZmlnIEhVR0VUTEJfUEFHRV9TSVpFXzI1NktcXG5hcmNoL3NoL21tL0tjb25maWctMTY5LVxcdGJvb2wgXFxcIjI1NmtCXFxcIlxcbi0tXFxuYXJjaC9zaC9tbS9LY29uZmlnLTE3MS1cXG5hcmNoL3NoL21tL0tjb25maWc6MTcyOmNvbmZpZyBIVUdFVExCX1BBR0VfU0laRV8xTUJcXG5hcmNoL3NoL21tL0tjb25maWctMTczLVxcdGJvb2wgXFxcIjFNQlxcXCJcXG5hcmNoL3NoL21tL0tjb25maWctMTc0LVxcbmFyY2gvc2gvbW0vS2NvbmZpZzoxNzU6Y29uZmlnIEhVR0VUTEJfUEFHRV9TSVpFXzRNQlxcbmFyY2gvc2gvbW0vS2NvbmZpZy0xNzYtXFx0Ym9vbCBcXFwiNE1CXFxcIlxcbi0tXFxuYXJjaC9zaC9tbS9LY29uZmlnLTE3OC1cXG5hcmNoL3NoL21tL0tjb25maWc6MTc5OmNvbmZpZyBIVUdFVExCX1BBR0VfU0laRV82NE1CXFxuYXJjaC9zaC9tbS9LY29uZmlnLTE4MC1cXHRib29sIFxcXCI2NE1CXFxcIlxcbi0tXFxuZnMvS2NvbmZpZz0yNjI9aWYgSFVHRVRMQkZTXFxuZnMvS2NvbmZpZzoyNjM6Y29uZmlnIEhVR0VUTEJfUEFHRV9PUFRJTUlaRV9WTUVNTUFQX0RFRkFVTFRfT05cXG5mcy9LY29uZmlnLTI2NC1cXHRib29sIFxcXCJIdWdlVExCIFZtZW1tYXAgT3B0aW1pemF0aW9uIChIVk8pIGRlZmF1bHRzIHRvIG9uXFxcIlxcbi0tXFxuZnMvS2NvbmZpZz0yNzE9ZW5kaWYgIyBIVUdFVExCRlNcXG5mcy9LY29uZmlnLTI3Mi1cXG5mcy9LY29uZmlnOjI3Mzpjb25maWcgSFVHRVRMQl9QQUdFXFxuZnMvS2NvbmZpZy0yNzQtXFx0ZGVmX2Jvb2wgSFVHRVRMQkZTXFxuLS1cXG5mcy9LY29uZmlnLTI3Ni1cXG5mcy9LY29uZmlnOjI3Nzpjb25maWcgSFVHRVRMQl9QQUdFX09QVElNSVpFX1ZNRU1NQVBcXG5mcy9LY29uZmlnLTI3OC1cXHRkZWZfYm9vbCBIVUdFVExCX1BBR0VcXG4tLVxcbm1tL0tjb25maWc9NzA2PWNvbmZpZyBBUkNIX1NVUFBPUlRTX1BNRF9TT0ZUTEVBRlxcbi0tXFxubW0vS2NvbmZpZy03MDgtXFxubW0vS2NvbmZpZzo3MDk6Y29uZmlnIEhVR0VUTEJfUEFHRV9TSVpFX1ZBUklBQkxFXFxubW0vS2NvbmZpZy03MTAtXFx0ZGVmX2Jvb2wgblxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wNVQxODoyMTo1OC41NjU5MDk4MjRaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzcxOTgxODM5NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIEkgc2VlIGl0OlxuXG4qKkRpZ2dpbmcgaW50byBIdWdlIFBhZ2VzKipcblxuT2theSwgc28gYEhVR0VUTEJfUEFHRWAgaXMgdGhlIGZlYXR1cmUgd2UncmUgaW50ZXJlc3RlZCBpbiwgYW5kIEkga25vdyBpdCByZWxpZXMgb24gYEhVR0VUTEJGU2AuIFJpZ2h0LiBNYWtlcyBzZW5zZS4gVG8gcmVhbGx5IHVuZGVyc3RhbmQgdGhlIHdob2xlIHBpY3R1cmUsIEkgbmVlZCB0byB2ZXJpZnkgdGhhdCBkZXBlbmRlbmN5IGFuZCB0aGVuLCBuYXR1cmFsbHksIGRpdmUgaW50byBgSFVHRVRMQkZTYCBpdHNlbGYuIFRpbWUgdG8gc3RhcnQgdGhlcmUuIExldCdzIHNlZSB3aGF0J3Mgd2hhdCB3aXRoIHRoZSB1bmRlcmx5aW5nIGZpbGUgc3lzdGVtLiBOZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgaXMgYWxsIHRpZWQgdG9nZXRoZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyNzg4LCJPdXRwdXRUb2tlbnMiOjE5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDVUMTg6MjI6MDIuMjg1NzMxMjRaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4ODAwMjQ1MTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEhVR0VUTEJGU1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9LY29uZmlnPTI0Nz1jb25maWcgQVJDSF9TVVBQT1JUU19IVUdFVExCRlNcXG4tLVxcbmZzL0tjb25maWctMjQ5LVxcbmZzL0tjb25maWc6MjUwOm1lbnVjb25maWcgSFVHRVRMQkZTXFxuZnMvS2NvbmZpZy0yNTEtXFx0Ym9vbCBcXFwiSHVnZVRMQiBmaWxlIHN5c3RlbSBzdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wNVQxODoyMjowNC4xNjU3NjE2ODdaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzU2NzkyMjQ4OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgY29uZmlnIG9wdGlvbnMsIHRoaW5raW5nIGFib3V0IHRoZW0gYXMgSSB3b3VsZCBpZiBJIHdlcmUgY29uc2lkZXJpbmcgdGhlbTpcblxuKipOYXZpZ2F0aW5nIHRoZSBOVU1BIExhbmRzY2FwZTogQ29uZmlndXJpbmcgSHVnZSBQYWdlcyBhbmQgTWVtb3J5IE1hbmFnZW1lbnQqKlxuXG5BbHJpZ2h0LCBzbyBJJ20gbG9va2luZyBhdCBob3cgbWVtb3J5IGlzIG1hbmFnZWQsIGFuZCBzcGVjaWZpY2FsbHkgaG93IHdlIGNhbiBiZXN0IGxldmVyYWdlIGh1Z2UgcGFnZXMuIEl0IGxvb2tzIGxpa2UgdGhlIGtleSBzdGFydGluZyBwb2ludHMgYXJlIGdvaW5nIHRvIGJlIGBIVUdFVExCRlNgIHRvIGFjdHVhbGx5IGVuYWJsZSB0aGUgaHVnZSBwYWdlIGZpbGUgc3lzdGVtLCBhbmQgdGhlbiBhbHNvIGBNRU1PUllfRkFJTFVSRWAgLSBsaWtlbHkgdG8gaGFuZGxlIGNhc2VzIHdoZXJlIGFsbG9jYXRpb24gZmFpbHMsIHdoaWNoIGlzIGltcG9ydGFudCBmb3IgYW55IHJvYnVzdCBzeXN0ZW0uXG5cbkJ1dCBiZWZvcmUgZGl2aW5nIHRvbyBkZWVwLCBJIG5lZWQgdG8gY2hlY2sgc29tZXRoaW5nIGNyaXRpY2FsIHRvIG1vZGVybiBwZXJmb3JtYW5jZTogYFRSQU5TUEFSRU5UX0hVR0VQQUdFYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hldGhlciB3ZSBjYW4gcmVseSBvbiB0aGUgc3lzdGVtIGF1dG9tYXRpY2FsbHkgbWFuYWdpbmcgdGhlIGNyZWF0aW9uIGFuZCB1c2Ugb2YgaHVnZSBwYWdlcywgb3IgaWYgd2UgbmVlZCB0byBiZSBtb3JlIGhhbmRzLW9uIHdpdGggdGhlIGNvbmZpZ3VyYXRpb24gdG8gYWNoaWV2ZSBvcHRpbWFsIHJlc3VsdHMuIEl0J3MgYSB0cmFkZS1vZmYgYmV0d2VlbiBjb252ZW5pZW5jZSBhbmQgY29udHJvbCwgYW5kIGZpZ3VyaW5nIG91dCB3aGF0IHRoZSBpZGVhbCBiYWxhbmNlIGlzIGluICp0aGlzKiBzcGVjaWZpYyBjb250ZXh0IGlzIHRoZSBuZXh0IHN0ZXAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzMDI3LCJPdXRwdXRUb2tlbnMiOjIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDVUMTg6MjI6MDcuNzMzNjg3NzY1WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODQyMzc5MDMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9LY29uZmlnPTg0Mz1jb25maWcgTU1fSURcXG4tLVxcbm1tL0tjb25maWctODQ1LVxcbm1tL0tjb25maWc6ODQ2Om1lbnVjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VcXG5tbS9LY29uZmlnLTg0Ny1cXHRib29sIFxcXCJUcmFuc3BhcmVudCBIdWdlcGFnZSBTdXBwb3J0XFxcIlxcbi0tXFxubW0vS2NvbmZpZz04NjQ9Y2hvaWNlXFxuLS1cXG5tbS9LY29uZmlnLTg2OS1cXG5tbS9LY29uZmlnOjg3MDpcXHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfQUxXQVlTXFxubW0vS2NvbmZpZy04NzEtXFx0XFx0Ym9vbCBcXFwiYWx3YXlzXFxcIlxcbi0tXFxubW0vS2NvbmZpZy04NzYtXFxubW0vS2NvbmZpZzo4Nzc6XFx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX01BRFZJU0VcXG5tbS9LY29uZmlnLTg3OC1cXHRcXHRib29sIFxcXCJtYWR2aXNlXFxcIlxcbi0tXFxubW0vS2NvbmZpZy04ODUtXFxubW0vS2NvbmZpZzo4ODY6XFx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX05FVkVSXFxubW0vS2NvbmZpZy04ODctXFx0XFx0Ym9vbCBcXFwibmV2ZXJcXFwiXFxuLS1cXG5tbS9LY29uZmlnPTg5Mz1jaG9pY2VcXG4tLVxcbm1tL0tjb25maWctOTAyLVxcbm1tL0tjb25maWc6OTAzOlxcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9TSE1FTV9IVUdFX05FVkVSXFxubW0vS2NvbmZpZy05MDQtXFx0XFx0Ym9vbCBcXFwibmV2ZXJcXFwiXFxuLS1cXG5tbS9LY29uZmlnLTkxMi1cXG5tbS9LY29uZmlnOjkxMzpcXHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfU0hNRU1fSFVHRV9BTFdBWVNcXG5tbS9LY29uZmlnLTkxNC1cXHRcXHRib29sIFxcXCJhbHdheXNcXFwiXFxuLS1cXG5tbS9LY29uZmlnLTkyMC1cXG5tbS9LY29uZmlnOjkyMTpcXHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfU0hNRU1fSFVHRV9XSVRISU5fU0laRVxcbm1tL0tjb25maWctOTIyLVxcdFxcdGJvb2wgXFxcIndpdGhpbl9zaXplXFxcIlxcbi0tXFxubW0vS2NvbmZpZy05MjgtXFxubW0vS2NvbmZpZzo5Mjk6XFx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX1NITUVNX0hVR0VfQURWSVNFXFxubW0vS2NvbmZpZy05MzAtXFx0XFx0Ym9vbCBcXFwiYWR2aXNlXFxcIlxcbi0tXFxubW0vS2NvbmZpZz05Mzg9Y2hvaWNlXFxuLS1cXG5tbS9LY29uZmlnLTk0Ny1cXG5tbS9LY29uZmlnOjk0ODpcXHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfVE1QRlNfSFVHRV9ORVZFUlxcbm1tL0tjb25maWctOTQ5LVxcdFxcdGJvb2wgXFxcIm5ldmVyXFxcIlxcbi0tXFxubW0vS2NvbmZpZy05NTYtXFxubW0vS2NvbmZpZzo5NTc6XFx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX1RNUEZTX0hVR0VfQUxXQVlTXFxubW0vS2NvbmZpZy05NTgtXFx0XFx0Ym9vbCBcXFwiYWx3YXlzXFxcIlxcbi0tXFxubW0vS2NvbmZpZy05NjQtXFxubW0vS2NvbmZpZzo5NjU6XFx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX1RNUEZTX0hVR0VfV0lUSElOX1NJWkVcXG5tbS9LY29uZmlnLTk2Ni1cXHRcXHRib29sIFxcXCJ3aXRoaW5fc2l6ZVxcXCJcXG4tLVxcbm1tL0tjb25maWctOTcyLVxcbm1tL0tjb25maWc6OTczOlxcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9UTVBGU19IVUdFX0FEVklTRVxcbm1tL0tjb25maWctOTc0LVxcdFxcdGJvb2wgXFxcImFkdmlzZVxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDVUMTg6MjI6MDkuNTc2MDczNjk1WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc0MTE5OTk4MDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIE1lbW9yeSBGYWlsdXJlIEhhbmRsaW5nIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCByZWxhdGVkIHRvIG1lbW9yeSBmYWlsdXJlIGhhbmRsaW5nLCBzcGVjaWZpY2FsbHkgZm9yIEh1Z2VUTEIgcGFnZXMuIFRoZSBjb25maWd1cmF0aW9ucyBpbnZvbHZlZCBhcmUgYE1FTU9SWV9GQUlMVVJFYCwgYEhVR0VUTEJGU2AsIGFuZCBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29yZSBjaGFuZ2VzIGhlcmUuXG5cbk15IGZvY3VzIHNob3VsZCBiZSBvbiBob3cgdGhlIHN5c3RlbSBpcyBkZWFsaW5nIHdpdGggaGFyZHdhcmUtcG9pc29uZWQgc3VicGFnZXMgd2l0aGluIGNvbXBvdW5kIHBhZ2VzLiBJIHNlZSB0d28ga2V5IHN5bWJvbHMganVtcGluZyBvdXQgYXQgbWU6IGBfX2h1Z2VwYWdlX2hhbmRsZV9wb2lzb25gIGFuZCBgZnJlZV9oYXNfaHdwb2lzb25lZGAuIFRoZXNlIHNlZW0gdG8gYmUgdGllZCBkaXJlY3RseSB0byB0aGUgZXJyb3IgcGF0aHMsIHdoaWNoIGlzIGV4YWN0bHkgd2hlcmUgbXkgYXR0ZW50aW9uIHNob3VsZCBiZS5cblxuSSBhbHNvIHNlZSB0aGF0IGBmcmVlX3BhZ2VzX3Nhbml0aXplYCBoYXMgYmVlbiBhZGRlZC4gSG93ZXZlciwgc2luY2UgaXQgaXMgY2FsbGVkIGZyb20gYF9fZnJlZV9wYWdlc19wcmVwYXJlYCBhbmQgYGZyZWVfcHJlcGFyZWRfY29udGlnX3JhbmdlYCwgaXTigJlzIGxpa2VseSBpbiBhIGhvdCBwYXRoLiBXaGlsZSBpbXBvcnRhbnQsIHRoZSBjaGFuZ2VzIGhlcmUgYXJlIHBlcmhhcHMgbm90IHRoZSBjb3JlIG9mICp0aGlzKiBwYXRjaCwgdGhvdWdoIEknbGwga2VlcCB0aGF0IGluIG1pbmQuIGBmcmVlX2hhc19od3BvaXNvbmVkYCBzZWVtcyBtb3JlIHRhcmdldGVkIHRvIHRoZSBzcGVjaWZpYyBlcnJvciBoYW5kbGluZyBzY2VuYXJpb3MsIGFzIGRvZXMgYF9faHVnZXBhZ2VfaGFuZGxlX3BvaXNvbmAuXG5cbk5vdywgSSBzaG91bGQgZXhhbWluZSBgbWVfaHVnZV9wYWdlYCwgYHRyeV9tZW1vcnlfZmFpbHVyZV9odWdldGxiYCwgYW5kIGBmb2xpb19jbGVhcl9odWdldGxiX2h3cG9pc29uYC4gVGhleSdyZSBleGlzdGluZyBmdW5jdGlvbnMsIGJ1dCB0aGV5J3ZlIGJlZW4gbW9kaWZpZWQuIFRoZSBmYWN0IHRoYXQgdGhleSBhbHJlYWR5IGV4aXN0IHN1Z2dlc3RzIHRoaXMgaXNuJ3QgZW50aXJlbHkgbmV3IGZ1bmN0aW9uYWxpdHksIGJ1dCBhbiBlbmhhbmNlbWVudCBvciByZWZpbmVtZW50LlxuXG5JbiBlc3NlbmNlLCB0aGUgcGF0Y2ggaXMgYWRkcmVzc2luZyBob3cgdG8gcHJvcGVybHkgbWFuYWdlIGhlYWx0aHkgdmVyc3VzIHBvaXNvbmVkIHN1YnBhZ2VzIHdpdGhpbiBjb21wb3VuZCBIdWdlVExCIHBhZ2VzIHdoZW4gbWVtb3J5IGZhaWx1cmVzIG9jY3VyLiBUaGUgZ29hbCBpcyB0byBlbnN1cmUgdGhhdCBub24tcG9pc29uZWQgc3VicGFnZXMgYXJlIGNvcnJlY3RseSBmcmVlZCBiYWNrIHRvIHRoZSBidWRkeSBhbGxvY2F0b3IuIFRoaXMgYWxzbyBtZWFucyB3ZSBuZWVkIHRvIGlzb2xhdGUgdGhlIHBvaXNvbmVkIG9uZXMuIFRoaXMgaXMgYSBjb3JlIE1NIGFuZCBwYWdlIGFsbG9jYXRvciBpc3N1ZSwgYW5kIHRoZSBmb2N1cyBzZWVtcyB0byBiZSBpbiBgbW0vbWVtb3J5LWZhaWx1cmUuY2AgYW5kIGBtbS9wYWdlX2FsbG9jLmNgLCBhcyBJJ2QgZXhwZWN0LlxuXG5TbywgaW4gc3VtbWFyeSwgSSdtIGNvbmNlbnRyYXRpbmcgb24gYF9faHVnZXBhZ2VfaGFuZGxlX3BvaXNvbmAgYW5kIGBmcmVlX2hhc19od3BvaXNvbmVkYCBhcyB0aGUgYmVzdCBwb2ludHMgdG8gYW5hbHl6ZSB0aGUgcGF0Y2jigJlzIGNvcmUgbG9naWMsIGFzIHdlbGwgYXMgdGhlIGNoYW5nZXMgdG8gYG1lX2h1Z2VfcGFnZWAsIGB0cnlfbWVtb3J5X2ZhaWx1cmVfaHVnZXRsYmAsIGFuZCBgZm9saW9fY2xlYXJfaHVnZXRsYl9od3BvaXNvbmAuIEkgbmVlZCB0byBzZWUgZXhhY3RseSBob3cgdGhlc2UgZnVuY3Rpb25zIGludGVyYWN0IHRvIGFjaGlldmUgdGhpcyBtb3JlIGdyYW51bGFyIGFuZCByb2J1c3QgaGFuZGxpbmcgb2YgaGFyZHdhcmUtcG9pc29uZWQgcGFnZXMuXG5MZXQncyBjYWxsIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0MDEwLCJPdXRwdXRUb2tlbnMiOjE0MywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM3NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wNVQxODoyMjoxNi45ODgwNzY4NVoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg1MzA2MTY0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJNRU1PUllfRkFJTFVSRVwiLFxuICAgIFwiSFVHRVRMQkZTXCIsXG4gICAgXCJUUkFOU1BBUkVOVF9IVUdFUEFHRVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIl9faHVnZXBhZ2VfaGFuZGxlX3BvaXNvblwiLFxuICAgIFwiZnJlZV9oYXNfaHdwb2lzb25lZFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIG1lbW9yeSBmYWlsdXJlIGhhbmRsaW5nIGZvciBIdWdlVExCIHBhZ2VzLCBlbnN1cmluZyB0aGF0IGhlYWx0aHkgc3VicGFnZXMgb2YgYSBjb21wb3VuZCBwYWdlIHdpdGggaGFyZHdhcmUgcG9pc29uZWQgc3VicGFnZXMgYXJlIGNvcnJlY3RseSBmcmVlZCB0byB0aGUgYnVkZHkgYWxsb2NhdG9yLCB3aGlsZSBpc29sYXRpbmcgdGhlIHBvaXNvbmVkIG9uZXMuIFRoaXMgaW52b2x2ZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIGNvcmUgTU0gYW5kIHBhZ2UgYWxsb2NhdG9yIGxvZ2ljLCBzcGVjaWZpY2FsbHkgaW4gbW0vbWVtb3J5LWZhaWx1cmUuYyBhbmQgbW0vcGFnZV9hbGxvYy5jLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk1FTU9SWV9GQUlMVVJFXCIsXG4gICAgXCJIVUdFVExCRlNcIixcbiAgICBcIlRSQU5TUEFSRU5UX0hVR0VQQUdFXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiX19odWdlcGFnZV9oYW5kbGVfcG9pc29uXCIsXG4gICAgXCJmcmVlX2hhc19od3BvaXNvbmVkXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgbWVtb3J5IGZhaWx1cmUgaGFuZGxpbmcgZm9yIEh1Z2VUTEIgcGFnZXMsIGVuc3VyaW5nIHRoYXQgaGVhbHRoeSBzdWJwYWdlcyBvZiBhIGNvbXBvdW5kIHBhZ2Ugd2l0aCBoYXJkd2FyZSBwb2lzb25lZCBzdWJwYWdlcyBhcmUgY29ycmVjdGx5IGZyZWVkIHRvIHRoZSBidWRkeSBhbGxvY2F0b3IsIHdoaWxlIGlzb2xhdGluZyB0aGUgcG9pc29uZWQgb25lcy4gVGhpcyBpbnZvbHZlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gY29yZSBNTSBhbmQgcGFnZSBhbGxvY2F0b3IgbG9naWMsIHNwZWNpZmljYWxseSBpbiBtbS9tZW1vcnktZmFpbHVyZS5jIGFuZCBtbS9wYWdlX2FsbG9jLmMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow6kfqx[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-05 18:10:22 +0000 UTC FinishedAt: 2026-07-05 18:22:19 +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": "844352111faac98f6f0eabd3ddc0d56af5fdebc8", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MEMORY_FAILURE", "HUGETLBFS", "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": "844352111faac98f6f0eabd3ddc0d56af5fdebc8", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MEMORY_FAILURE", "HUGETLBFS", "TRANSPARENT_HUGEPAGE" ], "series_id": "4111263e-710a-4a67-b476-a54ee5acd4a7" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "__hugepage_handle_poison", "free_has_hwpoisoned" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA1IDE4OjIxPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01FTU9SWV9GQUlMVVJFJiMzNDssCiAgICAmIzM0O0hVR0VUTEJGUyYjMzQ7LAogICAgJiMzNDtUUkFOU1BBUkVOVF9IVUdFUEFHRSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O19faHVnZXBhZ2VfaGFuZGxlX3BvaXNvbiYjMzQ7LAogICAgJiMzNDtmcmVlX2hhc19od3BvaXNvbmVkJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIG1lbW9yeSBmYWlsdXJlIGhhbmRsaW5nIGZvciBIdWdlVExCIHBhZ2VzLCBlbnN1cmluZyB0aGF0IGhlYWx0aHkgc3VicGFnZXMgb2YgYSBjb21wb3VuZCBwYWdlIHdpdGggaGFyZHdhcmUgcG9pc29uZWQgc3VicGFnZXMgYXJlIGNvcnJlY3RseSBmcmVlZCB0byB0aGUgYnVkZHkgYWxsb2NhdG9yLCB3aGlsZSBpc29sYXRpbmcgdGhlIHBvaXNvbmVkIG9uZXMuIFRoaXMgaW52b2x2ZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIGNvcmUgTU0gYW5kIHBhZ2UgYWxsb2NhdG9yIGxvZ2ljLCBzcGVjaWZpY2FsbHkgaW4gbW0vbWVtb3J5LWZhaWx1cmUuYyBhbmQgbW0vcGFnZV9hbGxvYy5jLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA1IDE4OjIxPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgOTc3NTQ1Yzk4OTU2OTEzZTAyNmQzNGY1MjUyOTlhYjk3OTA2Y2NmYlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTdW4gSnVsIDUgMTg6MjE6MjMgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmggYi9pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaFxuaW5kZXggN2E4NjM1NzJhZGNlNzkuLjNjZDUyNGUwNGEzMGJiIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oXG5AQCAtODc5LDcgJiM0Mzs4NzksNyBAQCBGT0xJT19GTEFHX0ZBTFNFKHBhcnRpYWxseV9tYXBwZWQpXG4gXG4gI2RlZmluZSBQR19oZWFkX21hc2sgKCgxVUwgXHUwMDNjXHUwMDNjIFBHX2hlYWQpKVxuIFxuLSNpZiBkZWZpbmVkKENPTkZJR19NRU1PUllfRkFJTFVSRSkgXHUwMDI2XHUwMDI2IGRlZmluZWQoQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFKVxuJiM0MzsjaWYgZGVmaW5lZChDT05GSUdfTUVNT1JZX0ZBSUxVUkUpIFx1MDAyNlx1MDAyNiAoZGVmaW5lZChDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UpIHx8IGRlZmluZWQoQ09ORklHX0hVR0VUTEJfUEFHRSkpXG4gLypcbiAgKiBQYWdlSGFzSFdQb2lzb25lZCBpbmRpY2F0ZXMgdGhhdCBhdCBsZWFzdCBvbmUgc3VicGFnZSBpcyBod3BvaXNvbmVkIGluIHRoZVxuICAqIGNvbXBvdW5kIHBhZ2UuXG5kaWZmIC0tZ2l0IGEvbW0vbWVtb3J5LWZhaWx1cmUuYyBiL21tL21lbW9yeS1mYWlsdXJlLmNcbmluZGV4IDQ5MTZhYjE0NTMyNTczLi5hMzdiNjc1NTA3MTgyNyAxMDA2NDRcbi0tLSBhL21tL21lbW9yeS1mYWlsdXJlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL21lbW9yeS1mYWlsdXJlLmNcbkBAIC0xNzQsNiAmIzQzOzE3NCwzMCBAQCBzdGF0aWMgc3RydWN0IHJiX3Jvb3RfY2FjaGVkIHBmbl9zcGFjZV9pdHJlZSA9IFJCX1JPT1RfQ0FDSEVEO1xuIHN0YXRpYyBERUZJTkVfTVVURVgocGZuX3NwYWNlX2xvY2spO1xuIFxuIC8qXG4mIzQzOyAqIE9ubHkgZm9yIGEgSHVnZVRMQiBwYWdlIGJlaW5nIGhhbmRsZWQgYnkgbWVtb3J5X2ZhaWx1cmUoKS4gVGhlIGtleVxuJiM0MzsgKiBkaWZmZXJlbmNlIHRvIHNvZnRfb2ZmbGluZSgpIGlzIHRoYXQsIG5vIEhXUG9pc29uIHN1YnBhZ2Ugd2lsbCBtYWtlXG4mIzQzOyAqIGludG8gYnVkZHkgYWxsb2NhdG9yIGFmdGVyIGEgc3VjY2Vzc2Z1bCBkaXNzb2x2ZV9mcmVlX2h1Z2V0bGJfZm9saW8oKSxcbiYjNDM7ICogc28gdGFrZV9wYWdlX29mZl9idWRkeSgpIGlzIHVubmVjZXNzYXJ5LlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGludCBfX2h1Z2VwYWdlX2hhbmRsZV9wb2lzb24oc3RydWN0IHBhZ2UgKnBhZ2UpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgZm9saW8gKmZvbGlvID0gcGFnZV9mb2xpbyhwYWdlKTtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBDYW4mIzM5O3QgdXNlIGRpc3NvbHZlX2ZyZWVfaHVnZXRsYl9mb2xpbygpIHdpdGhvdXQgYSByZWxpYWJsZVxuJiM0MztcdCAqIHJhd19od3BfbGlzdCB0ZWxsaW5nIHdoaWNoIHN1YnBhZ2UgaXMgSFdQb2lzb24uIFNvIGRvIG5vdCBmcmVlXG4mIzQzO1x0ICogdGhlbSB0byB0aGUgYnVkZHkgYWxsb2NhdG9yLiBkZXF1ZXVlX2h1Z2V0bGJfZm9saW9fbm9kZV9leGFjdCgpXG4mIzQzO1x0ICogd2lsbCBlbnN1cmUgdG8gbmV2ZXIgcmUtYWxsb2NhdGUgdGhpcyBodWdlcGFnZS5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAoZm9saW9fdGVzdF9odWdldGxiX3Jhd19od3BfdW5yZWxpYWJsZShmb2xpbykpXG4mIzQzO1x0XHQvKiByYXdfaHdwX2xpc3QgYmVjb21lcyB1bnJlbGlhYmxlIHdoZW4ga21hbGxvYygpIGZhaWxzLiAqL1xuJiM0MztcdFx0cmV0dXJuIC1FTk9NRU07XG4mIzQzO1xuJiM0MztcdHJldHVybiBkaXNzb2x2ZV9mcmVlX2h1Z2V0bGJfZm9saW8oZm9saW8pO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKlxuJiM0MzsgKiBPbmx5IGZvciBhIGZyZWUgb3IgSHVnZVRMQiBwYWdlIGJlaW5nIGhhbmRsZWQgYnkgc29mdF9vZmZsaW5lKCkuXG4gICogUmV0dXJuIHZhbHVlczpcbiAgKiAgIDE6ICAgdGhlIHBhZ2UgaXMgZGlzc29sdmVkIChpZiBuZWVkZWQpIGFuZCB0YWtlbiBvZmYgZnJvbSBidWRkeSxcbiAgKiAgIDA6ICAgdGhlIHBhZ2UgaXMgZGlzc29sdmVkIChpZiBuZWVkZWQpIGFuZCBub3QgdGFrZW4gb2ZmIGZyb20gYnVkZHksXG5AQCAtMTE2NiwxMSAmIzQzOzExOTAsMTEgQEAgc3RhdGljIGludCBtZV9odWdlX3BhZ2Uoc3RydWN0IHBhZ2Vfc3RhdGUgKnBzLCBzdHJ1Y3QgcGFnZSAqcClcbiBcdFx0ICogc3VicGFnZXMuXG4gXHRcdCAqL1xuIFx0XHRmb2xpb19wdXQoZm9saW8pO1xuLVx0XHRpZiAoX19wYWdlX2hhbmRsZV9wb2lzb24ocCkgXHUwMDNlIDApIHtcbiYjNDM7XHRcdGlmIChfX2h1Z2VwYWdlX2hhbmRsZV9wb2lzb24ocCkpIHtcbiYjNDM7XHRcdFx0cmVzID0gTUZfRkFJTEVEO1xuJiM0MztcdFx0fSBlbHNlIHtcbiBcdFx0XHRwYWdlX3JlZl9pbmMocCk7XG4gXHRcdFx0cmVzID0gTUZfUkVDT1ZFUkVEO1xuLVx0XHR9IGVsc2Uge1xuLVx0XHRcdHJlcyA9IE1GX0ZBSUxFRDtcbiBcdFx0fVxuIFx0fVxuIFxuQEAgLTIwMDgsNiAmIzQzOzIwMzIsNyBAQCB2b2lkIGZvbGlvX2NsZWFyX2h1Z2V0bGJfaHdwb2lzb24oc3RydWN0IGZvbGlvICpmb2xpbylcbiBcdGlmIChmb2xpb190ZXN0X2h1Z2V0bGJfdm1lbW1hcF9vcHRpbWl6ZWQoZm9saW8pKVxuIFx0XHRyZXR1cm47XG4gXHRmb2xpb19jbGVhcl9od3BvaXNvbihmb2xpbyk7XG4mIzQzO1x0Zm9saW9fc2V0X2hhc19od3BvaXNvbmVkKGZvbGlvKTtcbiBcdGZvbGlvX2ZyZWVfcmF3X2h3cChmb2xpbywgdHJ1ZSk7XG4gfVxuIFxuQEAgLTIxMzIsMTEgJiM0MzsyMTU3LDExIEBAIHN0YXRpYyBpbnQgdHJ5X21lbW9yeV9mYWlsdXJlX2h1Z2V0bGIodW5zaWduZWQgbG9uZyBwZm4sIGludCBmbGFncylcbiBcdCAqL1xuIFx0aWYgKHJlcyA9PSBNRl9IVUdFVExCX0ZSRUVEKSB7XG4gXHRcdGZvbGlvX3VubG9jayhmb2xpbyk7XG4tXHRcdGlmIChfX3BhZ2VfaGFuZGxlX3BvaXNvbihwKSBcdTAwM2UgMCkge1xuJiM0MztcdFx0aWYgKF9faHVnZXBhZ2VfaGFuZGxlX3BvaXNvbihwKSkge1xuJiM0MztcdFx0XHRyZXMgPSBNRl9GQUlMRUQ7XG4mIzQzO1x0XHR9IGVsc2Uge1xuIFx0XHRcdHBhZ2VfcmVmX2luYyhwKTtcbiBcdFx0XHRyZXMgPSBNRl9SRUNPVkVSRUQ7XG4tXHRcdH0gZWxzZSB7XG4tXHRcdFx0cmVzID0gTUZfRkFJTEVEO1xuIFx0XHR9XG4gXHRcdHJldHVybiBhY3Rpb25fcmVzdWx0KHBmbiwgTUZfTVNHX0ZSRUVfSFVHRSwgcmVzKTtcbiBcdH1cbmRpZmYgLS1naXQgYS9tbS9wYWdlX2FsbG9jLmMgYi9tbS9wYWdlX2FsbG9jLmNcbmluZGV4IDc2MmQ5YjZiYzc5MmYxLi42NDE4ODk2YzlkZjY2MCAxMDA2NDRcbi0tLSBhL21tL3BhZ2VfYWxsb2MuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vcGFnZV9hbGxvYy5jXG5AQCAtOTMsNiAmIzQzOzkzLDEzIEBAIHR5cGVkZWYgaW50IF9fYml0d2lzZSBmcGlfdDtcbiAvKiBmcmVlX3BhZ2VzX3ByZXBhcmUoKSBoYXMgYWxyZWFkeSBiZWVuIGNhbGxlZCBmb3IgcGFnZShzKSBiZWluZyBmcmVlZC4gKi9cbiAjZGVmaW5lIEZQSV9QUkVQQVJFRFx0XHQoKF9fZm9yY2UgZnBpX3QpQklUKDMpKVxuIFxuJiM0MzsvKlxuJiM0MzsgKiBQYWdlKHMpIG5lZWRzIHRvIGdvIHRocm91Z2ggZnJlZV9wYWdlc19zYW5pdGl6ZSgpLCBmb3IgZXhhbXBsZSwgYmVjYXVzZVxuJiM0MzsgKiBmcmVlX3BhZ2VzX3ByZXBhcmUoKSBjYW5ub3Qgc2FuaXRpemUgYSBoaWdoLW9yZGVyIHBhZ2UgYmxvY2sgZHVlIHRvXG4mIzQzOyAqIGhhcmR3YXJlIGVycm9yIGluIHNvbWUgcGFnZShzKS5cbiYjNDM7ICovXG4mIzQzOyNkZWZpbmUgRlBJX1NBTklUSVpFXHRcdCgoX19mb3JjZSBmcGlfdClCSVQoNCkpXG4mIzQzO1xuIC8qIHByZXZlbnQgXHUwMDNlMSBfdXBkYXRlcl8gb2Ygem9uZSBwZXJjcHUgcGFnZXNldCAtXHUwMDNlaGlnaCBhbmQgLVx1MDAzZWJhdGNoIGZpZWxkcyAqL1xuIHN0YXRpYyBERUZJTkVfTVVURVgocGNwX2JhdGNoX2hpZ2hfbG9jayk7XG4gI2RlZmluZSBNSU5fUEVSQ1BVX1BBR0VMSVNUX0hJR0hfRlJBQ1RJT04gKDgpXG5AQCAtMjEwLDYgJiM0MzsyMTcsOCBAQCBnZnBfdCBnZnBfYWxsb3dlZF9tYXNrIF9fcmVhZF9tb3N0bHkgPSBHRlBfQk9PVF9NQVNLO1xuIHVuc2lnbmVkIGludCBwYWdlYmxvY2tfb3JkZXIgX19yZWFkX21vc3RseTtcbiAjZW5kaWZcbiBcbiYjNDM7c3RhdGljIHZvaWQgZnJlZV9oYXNfaHdwb2lzb25lZChzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgaW50IG9yZGVyLFxuJiM0MztcdFx0XHRcdGZwaV90IGZwaV9mbGFncyk7XG4gc3RhdGljIHZvaWQgX19mcmVlX3BhZ2VzX29rKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBpbnQgb3JkZXIsXG4gXHRcdFx0ICAgIGZwaV90IGZwaV9mbGFncyk7XG4gc3RhdGljIHZvaWQgcmVzZXJ2ZV9oaWdoYXRvbWljX3BhZ2VibG9jayhzdHJ1Y3QgcGFnZSAqcGFnZSwgaW50IG9yZGVyLFxuQEAgLTEzMTEsMTQgJiM0MzsxMzIwLDczIEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBwZ2FsbG9jX3RhZ19zdWJfcGFnZXMoc3RydWN0IGFsbG9jX3RhZyAqdGFnLCB1bnNpZ25lZCBpbnQgbnIpXG4gXG4gI2VuZGlmIC8qIENPTkZJR19NRU1fQUxMT0NfUFJPRklMSU5HICovXG4gXG4mIzQzOy8qXG4mIzQzOyAqIFNhbml0aXplLCB3aGljaCByZXF1aXJlcyB3cml0aW5nLCBhIGJsb2NrIG9mIHBhZ2VzIGF0IHRoZSBsYXN0IG1vbWVudCBvZlxuJiM0MzsgKiBwcmVwYXJpbmcgdG8gZnJlZWluZyB0aGVtLCBpLmUuIF9fZnJlZV9wYWdlc19wcmVwYXJlKCkuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgdm9pZCBmcmVlX3BhZ2VzX3Nhbml0aXplKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBpbnQgb3JkZXIpXG4mIzQzO3tcbiYjNDM7XHRib29sIGluaXQgPSB3YW50X2luaXRfb25fZnJlZSgpO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogX19rYXNhbl91bnBvaXNvbl9wYWdlcygpIHNldHMga2FzYW4gdGFnIG9uIGV2ZXJ5IHRhaWwgcGFnZSwgc29cbiYjNDM7XHQgKiBpdCBpcyBmaW5lIHRvIHVzZSBzaG91bGRfc2tpcF9rYXNhbl9wb2lzb24oKSB3aGVuIHBhZ2VzIGhlcmVcbiYjNDM7XHQgKiB3ZXJlIGEgc2V0IG9mIHRhaWwgcGFnZXMgZnJvbSBhIGNvbXBvdW5kIGZvbGlvLlxuJiM0MztcdCAqL1xuJiM0MztcdGJvb2wgc2tpcF9rYXNhbl9wb2lzb24gPSBzaG91bGRfc2tpcF9rYXNhbl9wb2lzb24ocGFnZSk7XG4mIzQzO1xuJiM0MztcdGtlcm5lbF9wb2lzb25fcGFnZXMocGFnZSwgMSBcdTAwM2NcdTAwM2Mgb3JkZXIpO1xuJiM0MztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIEFzIG1lbW9yeSBpbml0aWFsaXphdGlvbiBtaWdodCBiZSBpbnRlZ3JhdGVkIGludG8gS0FTQU4sXG4mIzQzO1x0ICogS0FTQU4gcG9pc29uaW5nIGFuZCBtZW1vcnkgaW5pdGlhbGl6YXRpb24gY29kZSBtdXN0IGJlXG4mIzQzO1x0ICoga2VwdCB0b2dldGhlciB0byBhdm9pZCBkaXNjcmVwYW5jaWVzIGluIGJlaGF2aW9yLlxuJiM0MztcdCAqXG4mIzQzO1x0ICogV2l0aCBoYXJkd2FyZSB0YWctYmFzZWQgS0FTQU4sIG1lbW9yeSB0YWdzIG11c3QgYmUgc2V0IGJlZm9yZSB0aGVcbiYjNDM7XHQgKiBwYWdlIGJlY29tZXMgdW5hdmFpbGFibGUgdmlhIGRlYnVnX3BhZ2VhbGxvYyBvciBhcmNoX2ZyZWVfcGFnZS5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAoIXNraXBfa2FzYW5fcG9pc29uKSB7XG4mIzQzO1x0XHRrYXNhbl9wb2lzb25fcGFnZXMocGFnZSwgb3JkZXIsIGluaXQpO1xuJiM0MztcbiYjNDM7XHRcdC8qIE1lbW9yeSBpcyBhbHJlYWR5IGluaXRpYWxpemVkIGlmIEtBU0FOIGRpZCBpdCBpbnRlcm5hbGx5LiAqL1xuJiM0MztcdFx0aWYgKGthc2FuX2hhc19pbnRlZ3JhdGVkX2luaXQoKSlcbiYjNDM7XHRcdFx0aW5pdCA9IGZhbHNlO1xuJiM0MztcdH1cbiYjNDM7XHRpZiAoaW5pdClcbiYjNDM7XHRcdGNsZWFyX2hpZ2hwYWdlc19rYXNhbl90YWdnZWQocGFnZSwgMSBcdTAwM2NcdTAwM2Mgb3JkZXIpO1xuJiM0MztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIGFyY2hfZnJlZV9wYWdlKCkgY2FuIG1ha2UgdGhlIHBhZ2UmIzM5O3MgY29udGVudHMgaW5hY2Nlc3NpYmxlLiAgczM5MFxuJiM0MztcdCAqIGRvZXMgdGhpcy4gIFNvIG5vdGhpbmcgd2hpY2ggY2FuIGFjY2VzcyB0aGUgcGFnZSYjMzk7cyBjb250ZW50cyBzaG91bGRcbiYjNDM7XHQgKiBoYXBwZW4gYWZ0ZXIgdGhpcy5cbiYjNDM7XHQgKi9cbiYjNDM7XHRhcmNoX2ZyZWVfcGFnZShwYWdlLCBvcmRlcik7XG4mIzQzO1xuJiM0MztcdGRlYnVnX3BhZ2VhbGxvY191bm1hcF9wYWdlcyhwYWdlLCAxIFx1MDAzY1x1MDAzYyBvcmRlcik7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qXG4mIzQzOyAqIFJldHVybnNcbiYjNDM7ICogLSB0cnVlOiBjaGVja3MgYW5kIHByZXBhcmF0aW9ucyBhbGwgZ29vZCwgY2FsbGVyIGNhbiBwcm9jZWVkIGZyZWVpbmcuXG4mIzQzOyAqIC0gZmFsc2U6IGRvIG5vdCBwcm9jZWVkIGZyZWVpbmcgZm9yIG9uZSBvZiB0aGUgZm9sbG93aW5nIHJlYXNvbnM6XG4mIzQzOyAqICAgMS4gU29tZSBjaGVjayBmYWlsZWQgc28gaXQgaXMgbm90IHNhZmUgdG8gcHJvY2VlZCBmcmVlaW5nLlxuJiM0MzsgKiAgIDIuIEEgY29tcG91bmQgcGFnZSBoYXMgc29tZSBIV1BvaXNvbiBwYWdlcy4gVGhlIGhlYWx0aHkgcGFnZXNcbiYjNDM7ICogICAgICBhcmUgYWxyZWFkeSBzYWZlbHkgZnJlZWQsIGFuZCB0aGUgSFdQb2lzb24gb25lcyBpc29sYXRlZC5cbiYjNDM7ICovXG4gc3RhdGljIF9fYWx3YXlzX2lubGluZSBib29sIF9fZnJlZV9wYWdlc19wcmVwYXJlKHN0cnVjdCBwYWdlICpwYWdlLFxuIFx0XHR1bnNpZ25lZCBpbnQgb3JkZXIsIGZwaV90IGZwaV9mbGFncylcbiB7XG4gXHRpbnQgYmFkID0gMDtcbi1cdGJvb2wgc2tpcF9rYXNhbl9wb2lzb24gPSBzaG91bGRfc2tpcF9rYXNhbl9wb2lzb24ocGFnZSk7XG4tXHRib29sIGluaXQgPSB3YW50X2luaXRfb25fZnJlZSgpO1xuIFx0Ym9vbCBjb21wb3VuZCA9IFBhZ2VDb21wb3VuZChwYWdlKTtcbiBcdHN0cnVjdCBmb2xpbyAqZm9saW8gPSBwYWdlX2ZvbGlvKHBhZ2UpO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogV2hlbiBkZWFsaW5nIHdpdGggY29tcG91bmQgcGFnZSwgUEdfaGFzX2h3cG9pc29uZWQgaXMgY2xlYXJlZFxuJiM0MztcdCAqIHdpdGggUEFHRV9GTEFHU19TRUNPTkQuIFNvIHRoZSBjaGVjayBtdXN0IGJlIGRvbmUgZmlyc3QuXG4mIzQzO1x0ICpcbiYjNDM7XHQgKiBOb3RlIHdlIGNhbiYjMzk7dCBleGNsdWRlIFBHX2hhc19od3BvaXNvbmVkIGZyb20gUEFHRV9GTEFHU19TRUNPTkQuXG4mIzQzO1x0ICogQmVjYXVzZSBQR19oYXNfaHdwb2lzb25lZCA9PSBQR19hY3RpdmUsIGZyZWVfcGFnZV9pc19iYWQoKSB3aWxsXG4mIzQzO1x0ICogY29uZnVzZSBhbmQgY29tcGxhaW50IHRoYXQgdGhlIGZpcnN0IHRhaWwgcGFnZSBpcyBzdGlsbCBhY3RpdmUuXG4mIzQzO1x0ICovXG4mIzQzO1x0Ym9vbCBzaG91bGRfZmhoID0gY29tcG91bmQgXHUwMDI2XHUwMDI2IGZvbGlvX3Rlc3RfaGFzX2h3cG9pc29uZWQoZm9saW8pO1xuIFxuIFx0aWYgKGZwaV9mbGFncyBcdTAwMjYgRlBJX1BSRVBBUkVEKVxuIFx0XHRyZXR1cm4gdHJ1ZTtcbkBAIC0xNDE2LDM0ICYjNDM7MTQ4NCwxOSBAQCBzdGF0aWMgX19hbHdheXNfaW5saW5lIGJvb2wgX19mcmVlX3BhZ2VzX3ByZXBhcmUoc3RydWN0IHBhZ2UgKnBhZ2UsXG4gXHRcdFx0XHRcdCAgIFBBR0VfU0laRSBcdTAwM2NcdTAwM2Mgb3JkZXIpO1xuIFx0fVxuIFxuLVx0a2VybmVsX3BvaXNvbl9wYWdlcyhwYWdlLCAxIFx1MDAzY1x1MDAzYyBvcmRlcik7XG4tXG4gXHQvKlxuLVx0ICogQXMgbWVtb3J5IGluaXRpYWxpemF0aW9uIG1pZ2h0IGJlIGludGVncmF0ZWQgaW50byBLQVNBTixcbi1cdCAqIEtBU0FOIHBvaXNvbmluZyBhbmQgbWVtb3J5IGluaXRpYWxpemF0aW9uIGNvZGUgbXVzdCBiZVxuLVx0ICoga2VwdCB0b2dldGhlciB0byBhdm9pZCBkaXNjcmVwYW5jaWVzIGluIGJlaGF2aW9yLlxuJiM0MztcdCAqIEFmdGVyIGJyZWFraW5nIGRvd24gY29tcG91bmQgcGFnZSBhbmQgZGVhbGluZyB3aXRoIHBhZ2UgbWV0YWRhdGFcbiYjNDM7XHQgKiAoZS5nLiBwYWdlIG93bmVyIGFuZCBwYWdlIGFsbG9jIHRhZ3MpLCB0YWtlIGEgc2hvcnRjdXQgaWYgdGhpc1xuJiM0MztcdCAqIHdhcyBhIGNvbXBvdW5kIHBhZ2UgY29udGFpbmluZyBjZXJ0YWluIEhXUG9pc29uIHN1YnBhZ2VzLlxuIFx0ICpcbi1cdCAqIFdpdGggaGFyZHdhcmUgdGFnLWJhc2VkIEtBU0FOLCBtZW1vcnkgdGFncyBtdXN0IGJlIHNldCBiZWZvcmUgdGhlXG4tXHQgKiBwYWdlIGJlY29tZXMgdW5hdmFpbGFibGUgdmlhIGRlYnVnX3BhZ2VhbGxvYyBvciBhcmNoX2ZyZWVfcGFnZS5cbiYjNDM7XHQgKiBGUElfU0FOSVRJWkUgdG8gcmVtZW1iZXIgZnJlZV9wYWdlc19zYW5pdGl6ZSgpIGhlYWx0aHkgcGFnZXMuXG4gXHQgKi9cbi1cdGlmICghc2tpcF9rYXNhbl9wb2lzb24pIHtcbi1cdFx0a2FzYW5fcG9pc29uX3BhZ2VzKHBhZ2UsIG9yZGVyLCBpbml0KTtcbi1cbi1cdFx0LyogTWVtb3J5IGlzIGFscmVhZHkgaW5pdGlhbGl6ZWQgaWYgS0FTQU4gZGlkIGl0IGludGVybmFsbHkuICovXG4tXHRcdGlmIChrYXNhbl9oYXNfaW50ZWdyYXRlZF9pbml0KCkpXG4tXHRcdFx0aW5pdCA9IGZhbHNlO1xuJiM0MztcdGlmIChzaG91bGRfZmhoKSB7XG4mIzQzO1x0XHRmcmVlX2hhc19od3BvaXNvbmVkKHBhZ2UsIG9yZGVyLCBmcGlfZmxhZ3MgfCBGUElfU0FOSVRJWkUpO1xuJiM0MztcdFx0cmV0dXJuIGZhbHNlO1xuIFx0fVxuLVx0aWYgKGluaXQpXG4tXHRcdGNsZWFyX2hpZ2hwYWdlc19rYXNhbl90YWdnZWQocGFnZSwgMSBcdTAwM2NcdTAwM2Mgb3JkZXIpO1xuLVxuLVx0Lypcbi1cdCAqIGFyY2hfZnJlZV9wYWdlKCkgY2FuIG1ha2UgdGhlIHBhZ2UmIzM5O3MgY29udGVudHMgaW5hY2Nlc3NpYmxlLiAgczM5MFxuLVx0ICogZG9lcyB0aGlzLiAgU28gbm90aGluZyB3aGljaCBjYW4gYWNjZXNzIHRoZSBwYWdlJiMzOTtzIGNvbnRlbnRzIHNob3VsZFxuLVx0ICogaGFwcGVuIGFmdGVyIHRoaXMuXG4tXHQgKi9cbi1cdGFyY2hfZnJlZV9wYWdlKHBhZ2UsIG9yZGVyKTtcbiBcbi1cdGRlYnVnX3BhZ2VhbGxvY191bm1hcF9wYWdlcyhwYWdlLCAxIFx1MDAzY1x1MDAzYyBvcmRlcik7XG4mIzQzO1x0ZnJlZV9wYWdlc19zYW5pdGl6ZShwYWdlLCBvcmRlcik7XG4gXG4gXHRyZXR1cm4gdHJ1ZTtcbiB9XG5AQCAtNjg1Miw4ICYjNDM7NjkwNSw4IEBAIHZvaWQgX19pbml0IHBhZ2VfYWxsb2Nfc3lzY3RsX2luaXQodm9pZClcbiBcdHJlZ2lzdGVyX3N5c2N0bF9pbml0KFwmIzM0O3ZtXCYjMzQ7LCBwYWdlX2FsbG9jX3N5c2N0bF90YWJsZSk7XG4gfVxuIFxuLXN0YXRpYyB2b2lkIGZyZWVfcHJlcGFyZWRfY29udGlnX3JhbmdlKHN0cnVjdCBwYWdlICpwYWdlLFxuLVx0XHR1bnNpZ25lZCBsb25nIG5yX3BhZ2VzKVxuJiM0MztzdGF0aWMgdm9pZCBfX2ZyZWVfcHJlcGFyZWRfY29udGlnX3JhbmdlKHN0cnVjdCBwYWdlICpwYWdlLFxuJiM0MztcdFx0dW5zaWduZWQgbG9uZyBucl9wYWdlcywgZnBpX3QgZnBpX2ZsYWdzKVxuIHtcbiBcdHVuc2lnbmVkIGxvbmcgcGZuID0gcGFnZV90b19wZm4ocGFnZSk7XG4gXG5AQCAtNjg2OSw4ICYjNDM7NjkyMiwxNSBAQCBzdGF0aWMgdm9pZCBmcmVlX3ByZXBhcmVkX2NvbnRpZ19yYW5nZShzdHJ1Y3QgcGFnZSAqcGFnZSxcbiBcdFx0LypcbiBcdFx0ICogRnJlZSB0aGUgY2h1bmsgYXMgYSBzaW5nbGUgYmxvY2suIE91ciBjYWxsZXIgaGFzIGFscmVhZHlcbiBcdFx0ICogY2FsbGVkIGZyZWVfcGFnZXNfcHJlcGFyZSgpIGZvciBlYWNoIG9yZGVyLTAgcGFnZS5cbiYjNDM7XHRcdCAqXG4mIzQzO1x0XHQgKiBJZiB0aGUgb3JpZ2luYWwgY29tcG91bmQgcGFnZSBoYXMgSFdQb2lzb24gcGFnZSxcbiYjNDM7XHRcdCAqIGZyZWVfcGFnZXNfcHJlcGFyZSgpIGhhcyB0byBza2lwIHNhbml0aXplIGF0IHRoYXQgdGltZSxcbiYjNDM7XHRcdCAqIGJ1dCBub3cgaXQgaXMgZ29vZCB0aW1lIHRvIGRvIHRoYXQuXG4gXHRcdCAqL1xuLVx0XHRfX2ZyZWVfZnJvemVuX3BhZ2VzKHBhZ2UsIG9yZGVyLCBGUElfUFJFUEFSRUQpO1xuJiM0MztcdFx0aWYgKGZwaV9mbGFncyBcdTAwMjYgRlBJX1NBTklUSVpFKVxuJiM0MztcdFx0XHRmcmVlX3BhZ2VzX3Nhbml0aXplKHBhZ2UsIG9yZGVyKTtcbiYjNDM7XG4mIzQzO1x0XHRfX2ZyZWVfZnJvemVuX3BhZ2VzKHBhZ2UsIG9yZGVyLCBmcGlfZmxhZ3MgfCBGUElfUFJFUEFSRUQpO1xuIFxuIFx0XHRwZm4gJiM0Mzs9IDFVTCBcdTAwM2NcdTAwM2Mgb3JkZXI7XG4gXHRcdHBhZ2UgJiM0Mzs9IDFVTCBcdTAwM2NcdTAwM2Mgb3JkZXI7XG5AQCAtNjg3OCw2ICYjNDM7NjkzOCwxMSBAQCBzdGF0aWMgdm9pZCBmcmVlX3ByZXBhcmVkX2NvbnRpZ19yYW5nZShzdHJ1Y3QgcGFnZSAqcGFnZSxcbiBcdH1cbiB9XG4gXG4mIzQzO3N0YXRpYyB2b2lkIGZyZWVfcHJlcGFyZWRfY29udGlnX3JhbmdlKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzKVxuJiM0Mzt7XG4mIzQzO1x0X19mcmVlX3ByZXBhcmVkX2NvbnRpZ19yYW5nZShwYWdlLCBucl9wYWdlcywgRlBJX05PTkUpO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyB2b2lkIF9fZnJlZV9jb250aWdfcmFuZ2VfY29tbW9uKHVuc2lnbmVkIGxvbmcgcGZuLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLFxuIFx0XHRib29sIGlzX2Zyb3plbilcbiB7XG5AQCAtNjk1MSw2ICYjNDM7NzAxNiw2MSBAQCB2b2lkIF9fZnJlZV9jb250aWdfcmFuZ2UodW5zaWduZWQgbG9uZyBwZm4sIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMpXG4gXHRfX2ZyZWVfY29udGlnX3JhbmdlX2NvbW1vbihwZm4sIG5yX3BhZ2VzLCAvKiBpc19mcm96ZW49ICovIGZhbHNlKTtcbiB9XG4gXG4mIzQzOy8qXG4mIzQzOyAqIEdpdmVuIHNvbWUgY29udGlndW91cyBwYWdlcyB0aGF0IGhhdmUgY2VydGFpbiBudW1iZXIgb2YgSFdQb2lzb24gcGFnZShzKSxcbiYjNDM7ICogZnJlZSBvbmx5IHRoZSBoZWFsdGh5IG9uZXMuXG4mIzQzOyAqXG4mIzQzOyAqIFVzZWQgYXQgdGhlIGVuZCBvZiBfX2ZyZWVfcGFnZXNfcHJlcGFyZSgpLiBFdmVuIGlmIGhhdmluZyBIV1BvaXNvbiBwYWdlcyxcbiYjNDM7ICogYnJlYWtpbmcgZG93biBjb21wb3VuZCBwYWdlIGFuZCBjbGVhcmluZyBtZXRhZGF0YSAoZS5nLiBwYWdlIG93bmVyLCBhbGxvY1xuJiM0MzsgKiB0YWcpIGNhbiBiZSBkb25lIHRvZ2V0aGVyIGR1cmluZyBfX2ZyZWVfcGFnZXNfcHJlcGFyZSgpLCB3aGljaCBzaW1wbGlmaWVzXG4mIzQzOyAqIHRoZSBzcGxpdHRpbmcgaGVyZTogdW5saWtlIF9fc3BsaXRfdW5tYXBwZWRfZm9saW8oKSwgdGhlcmUgaXMgbm8gbmVlZCB0b1xuJiM0MzsgKiB0dXJuIHNwbGl0IHBhZ2VzIGludG8gYSBjb21wb3VuZCBwYWdlIG9yIHRvIGNhcnJ5IG1ldGFkYXRhLlxuJiM0MzsgKlxuJiM0MzsgKiBJdCBzY2FucyBldmVyeSByYXcgcGFnZSBvZiB0aGUgY29tcG91bmQgcGFnZSBhbmQgY2F1c2VzIG5vbnRyaXZpYWwgb3ZlcmhlYWQuXG4mIzQzOyAqIFNvIG9ubHkgdXNlIHRoaXMgd2hlbiB0aGUgY29tcG91bmQgcGFnZSBjb250YWlucyBIV1BvaXNvbiBwYWdlKHMpLlxuJiM0MzsgKlxuJiM0MzsgKiBJdCBhbHNvIHdvcmtzIHdoZW4gb3JkZXIgPT0gMCwgcmVnYXJkbGVzcyBvZiBQYWdlSFdQb2lzb24oKSBvciBub3QuXG4mIzQzOyAqXG4mIzQzOyAqIFRoaXMgaW1wbGVtZW50YXRpb24gbmVlZHMgcmV3b3JrIGluIG1lbWRlc2Mgd29ybGQuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgdm9pZCBmcmVlX2hhc19od3BvaXNvbmVkKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBpbnQgb3JkZXIsXG4mIzQzO1x0XHRcdFx0ZnBpX3QgZnBpX2ZsYWdzKVxuJiM0Mzt7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBjdXJyID0gcGFnZV90b19wZm4ocGFnZSk7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBlbmRfcGZuID0gY3VyciAmIzQzOyAoMSBcdTAwM2NcdTAwM2Mgb3JkZXIpO1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgbmV4dDtcbiYjNDM7XHR1bnNpZ25lZCBsb25nIHRvdGFsX2ZyZWVkID0gMDtcbiYjNDM7XHR1bnNpZ25lZCBsb25nIHRvdGFsX2h3cCA9IDA7XG4mIzQzO1xuJiM0MztcdHdoaWxlIChjdXJyIFx1MDAzYyBlbmRfcGZuKSB7XG4mIzQzO1x0XHRuZXh0ID0gY3VycjtcbiYjNDM7XG4mIzQzO1x0XHR3aGlsZSAobmV4dCBcdTAwM2MgZW5kX3BmbiBcdTAwMjZcdTAwMjYgIVBhZ2VIV1BvaXNvbihwZm5fdG9fcGFnZShuZXh0KSkpXG4mIzQzO1x0XHRcdCYjNDM7JiM0MztuZXh0O1xuJiM0MztcbiYjNDM7XHRcdGlmIChuZXh0ICE9IGVuZF9wZm4pIHtcbiYjNDM7XHRcdFx0LypcbiYjNDM7XHRcdFx0ICogQXZvaWQgYWNjb3VudGluZyBlcnJvciB3aGVuIHRoZSBwYWdlIGlzIGZyZWVkXG4mIzQzO1x0XHRcdCAqIGJ5IHVucG9pc29uX21lbW9yeSgpLlxuJiM0MztcdFx0XHQgKi9cbiYjNDM7XHRcdFx0Y2xlYXJfcGFnZV90YWdfcmVmKHBmbl90b19wYWdlKG5leHQpKTtcbiYjNDM7XHRcdFx0JiM0MzsmIzQzO3RvdGFsX2h3cDtcbiYjNDM7XHRcdH1cbiYjNDM7XG4mIzQzO1x0XHRfX2ZyZWVfcHJlcGFyZWRfY29udGlnX3JhbmdlKHBmbl90b19wYWdlKGN1cnIpLCBuZXh0IC0gY3VycixcbiYjNDM7XHRcdFx0XHRcdCAgICAgZnBpX2ZsYWdzKTtcbiYjNDM7XHRcdHRvdGFsX2ZyZWVkICYjNDM7PSBuZXh0IC0gY3VycjtcbiYjNDM7XG4mIzQzO1x0XHRpZiAobmV4dCA9PSBlbmRfcGZuKVxuJiM0MztcdFx0XHRicmVhaztcbiYjNDM7XG4mIzQzO1x0XHRjdXJyID0gbmV4dCAmIzQzOyAxO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cHJfaW5mbyhcJiMzNDtGcmVlZCAlI2x4IHBhZ2VzLCBleGNsdWRlZCAlI2x4IEhXUG9pc29uIHBhZ2VzXFxuXCYjMzQ7LFxuJiM0MztcdFx0dG90YWxfZnJlZWQsIHRvdGFsX2h3cCk7XG4mIzQzO31cbiYjNDM7XG4gI2lmZGVmIENPTkZJR19DT05USUdfQUxMT0NcbiAvKiBVc2FnZTogU2VlIGFkbWluLWd1aWRlL2R5bmFtaWMtZGVidWctaG93dG8ucnN0ICovXG4gc3RhdGljIHZvaWQgYWxsb2NfY29udGlnX2R1bXBfcGFnZXMoc3RydWN0IGxpc3RfaGVhZCAqcGFnZV9saXN0KVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL21lbW9yeS1mYWlsdXJlLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9tZW1vcnktZmFpbHVyZS5jXG5pbmRleCAwMzJlZDk1MjA1N2M2Mi4uNzhjMTA1Y2UyYWYxODUgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9tZW1vcnktZmFpbHVyZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9tZW1vcnktZmFpbHVyZS5jXG5AQCAtMTgsNiAmIzQzOzE4LDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9tYWdpYy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjZXJybm8uaFx1MDAzZVxuIFxuJiM0MzsjaW5jbHVkZSBcJiMzNDtodWdlcGFnZV9zZXR0aW5ncy5oXCYjMzQ7XG4gI2luY2x1ZGUgXCYjMzQ7dm1fdXRpbC5oXCYjMzQ7XG4gXG4gZW51bSBpbmplY3RfdHlwZSB7XG5AQCAtMjcsNiAmIzQzOzI4LDcgQEAgZW51bSBpbmplY3RfdHlwZSB7XG4gXG4gZW51bSByZXN1bHRfdHlwZSB7XG4gXHRNQURWX0hBUkRfQU5PTixcbiYjNDM7XHRNQURWX0hBUkRfQU5PTl9IVUdFVExCLFxuIFx0TUFEVl9IQVJEX0NMRUFOX1BBR0VDQUNIRSxcbiBcdE1BRFZfSEFSRF9ESVJUWV9QQUdFQ0FDSEUsXG4gXHRNQURWX1NPRlRfQU5PTixcbkBAIC00Nyw2ICYjNDM7NDksOCBAQCBGSVhUVVJFKG1lbW9yeV9mYWlsdXJlKVxuIFx0aW50IHBhZ2VtYXBfZmQ7XG4gXHRpbnQga3BhZ2VmbGFnc19mZDtcbiBcdGJvb2wgdHJpZ2dlcmVkO1xuJiM0MztcdC8qIE51bWJlciBvZiBpbml0aWFsIEh1Z2VUTEIgcGFnZXMgd2l0aCBkZWZhdWx0IHBhZ2Ugc2l6ZS4gKi9cbiYjNDM7XHR1bnNpZ25lZCBsb25nIG5yX2h1Z2V0bGJfcGFnZXM7XG4gfTtcbiBcbiBGSVhUVVJFX1ZBUklBTlQobWVtb3J5X2ZhaWx1cmUpXG5AQCAtMTU3LDYgJiM0MzsxNjEsNyBAQCBzdGF0aWMgdm9pZCBjaGVjayhzdHJ1Y3QgX190ZXN0X21ldGFkYXRhICpfbWV0YWRhdGEsIEZJWFRVUkVfREFUQShtZW1vcnlfZmFpbHVyZVxuIFx0XHQgIHZvaWQgKnZhZGRyLCBlbnVtIHJlc3VsdF90eXBlIHR5cGUsIGludCBzZXRqbXApXG4ge1xuIFx0dW5zaWduZWQgbG9uZyBzaXplO1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgbnJfaHVnZXRsYl9wYWdlcztcbiBcdHVpbnQ2NF90IHBmbl9mbGFncztcbiBcbiBcdHN3aXRjaCAodHlwZSkge1xuQEAgLTE3NCw2ICYjNDM7MTc5LDcgQEAgc3RhdGljIHZvaWQgY2hlY2soc3RydWN0IF9fdGVzdF9tZXRhZGF0YSAqX21ldGFkYXRhLCBGSVhUVVJFX0RBVEEobWVtb3J5X2ZhaWx1cmVcbiBcdFx0QVNTRVJUX05FKHBhZ2VtYXBfZ2V0X3BmbihzZWxmLVx1MDAzZXBhZ2VtYXBfZmQsIHZhZGRyKSwgc2VsZi1cdTAwM2VwZm4pO1xuIFx0XHRicmVhaztcbiBcdGNhc2UgTUFEVl9IQVJEX0FOT046XG4mIzQzO1x0Y2FzZSBNQURWX0hBUkRfQU5PTl9IVUdFVExCOlxuIFx0Y2FzZSBNQURWX0hBUkRfRElSVFlfUEFHRUNBQ0hFOlxuIFx0XHQvKiBUaGUgU0lHQlVTIHNpZ25hbCBzaG91bGQgaGF2ZSBiZWVuIHJlY2VpdmVkLiAqL1xuIFx0XHRBU1NFUlRfRVEoc2V0am1wLCAxKTtcbkBAIC0xODQsOCAmIzQzOzE5MCwxNSBAQCBzdGF0aWMgdm9pZCBjaGVjayhzdHJ1Y3QgX190ZXN0X21ldGFkYXRhICpfbWV0YWRhdGEsIEZJWFRVUkVfREFUQShtZW1vcnlfZmFpbHVyZVxuIFx0XHRBU1NFUlRfRVEoMVVMIFx1MDAzY1x1MDAzYyBzaWdpbmZvLnNpX2FkZHJfbHNiLCBzZWxmLVx1MDAzZXBhZ2Vfc2l6ZSk7XG4gXHRcdEFTU0VSVF9FUShzaWdpbmZvLnNpX2FkZHIsIHZhZGRyKTtcbiBcbi1cdFx0LyogWFhYIENoZWNrIGJhY2tpbmcgcHRlIGlzIGh3cG9pc29uIGVudHJ5IHdoZW4gc3VwcG9ydGVkLiAqL1xuLVx0XHRBU1NFUlRfVFJVRShwYWdlbWFwX2lzX3N3YXBwZWQoc2VsZi1cdTAwM2VwYWdlbWFwX2ZkLCB2YWRkcikpO1xuJiM0MztcdFx0aWYgKHR5cGUgIT0gTUFEVl9IQVJEX0FOT05fSFVHRVRMQilcbiYjNDM7XHRcdFx0LypcbiYjNDM7XHRcdFx0ICogQ2hlY2sgYmFja2luZyBwdGUgaXMgaHdwb2lzb24gZW50cnkgd2hlbiBzdXBwb3J0ZWQuXG4mIzQzO1x0XHRcdCAqIEFsdGhvdWdoIHRyeV90b191bm1hcF9vbmUoKSBhbHNvIGluc3RhbGxzIGh3cG9pc29uXG4mIzQzO1x0XHRcdCAqIGVudHJ5IGZvciBIdWdlVExCLCBwYWdlbWFwX2h1Z2V0bGJfcmFuZ2UoKSBkb2VzbiYjMzk7dFxuJiM0MztcdFx0XHQgKiBwYXJzZSBzd2FwIGVudHJpZXMgYXQgYWxsLlxuJiM0MztcdFx0XHQgKi9cbiYjNDM7XHRcdFx0QVNTRVJUX1RSVUUocGFnZW1hcF9pc19zd2FwcGVkKHNlbGYtXHUwMDNlcGFnZW1hcF9mZCwgdmFkZHIpKTtcbiYjNDM7XG4gXHRcdGJyZWFrO1xuIFx0ZGVmYXVsdDpcbiBcdFx0U0tJUChyZXR1cm4sIFwmIzM0O3VuZXhwZWN0ZWQgaW5qZWN0IHR5cGUgJWQuXFxuXCYjMzQ7LCB0eXBlKTtcbkBAIC0xOTMsNyAmIzQzOzIwNiwxOSBAQCBzdGF0aWMgdm9pZCBjaGVjayhzdHJ1Y3QgX190ZXN0X21ldGFkYXRhICpfbWV0YWRhdGEsIEZJWFRVUkVfREFUQShtZW1vcnlfZmFpbHVyZVxuIFxuIFx0LyogQ2hlY2sgaWYgdGhlIHZhbHVlIG9mIEhhcmR3YXJlQ29ycnVwdGVkIGhhcyBpbmNyZWFzZWQuICovXG4gXHRBU1NFUlRfRVEoZ2V0X2hhcmR3YXJlX2NvcnJ1cHRlZF9zaXplKFx1MDAyNnNpemUpLCAwKTtcbi1cdEFTU0VSVF9FUShzaXplLCBzZWxmLVx1MDAzZWNvcnJ1cHRlZF9zaXplICYjNDM7IHNlbGYtXHUwMDNlcGFnZV9zaXplIC8gMTAyNCk7XG4mIzQzO1xuJiM0MztcdGlmICh0eXBlID09IE1BRFZfSEFSRF9BTk9OX0hVR0VUTEIpIHtcbiYjNDM7XHRcdC8qXG4mIzQzO1x0XHQgKiBPbmx5IG9uZSBwYWdlIGlzIGhhcmR3YXJlIGNvcnJ1cHRlZDsgdGhlIHJlc3Qgc2hvdWxkIGFsbCBiZVxuJiM0MztcdFx0ICogcmVsZWFzZWQgdG8gYnVkZHkgYWxsb2NhdG9yLlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRBU1NFUlRfRVEoc2l6ZSwgc2VsZi1cdTAwM2Vjb3JydXB0ZWRfc2l6ZSAmIzQzOyBnZXRwYWdlc2l6ZSgpIC8gMTAyNCk7XG4mIzQzO1x0XHQvKiBIdWdlVExCIHNob3VsZCBoYXZlIGxvc3QgdGhlIEhXUG9pc29uIEh1Z2VUTEIgcGFnZS4gKi9cbiYjNDM7XHRcdG5yX2h1Z2V0bGJfcGFnZXMgPSBodWdldGxiX25yX2RlZmF1bHRfcGFnZXMoKTtcbiYjNDM7XHRcdEFTU0VSVF9FUShucl9odWdldGxiX3BhZ2VzICYjNDM7IDEsIHNlbGYtXHUwMDNlbnJfaHVnZXRsYl9wYWdlcyk7XG4mIzQzO1x0fSBlbHNlIHtcbiYjNDM7XHRcdEFTU0VSVF9FUShzaXplLCBzZWxmLVx1MDAzZWNvcnJ1cHRlZF9zaXplICYjNDM7IHNlbGYtXHUwMDNlcGFnZV9zaXplIC8gMTAyNCk7XG4mIzQzO1x0fVxuIFxuIFx0LyogQ2hlY2sgaWYgSFdQb2lzb24gZmxhZyBpcyBzZXQuICovXG4gXHRBU1NFUlRfRVEocGFnZWZsYWdzX2dldChzZWxmLVx1MDAzZXBmbiwgc2VsZi1cdTAwM2VrcGFnZWZsYWdzX2ZkLCBcdTAwMjZwZm5fZmxhZ3MpLCAwKTtcbkBAIC0yNDcsNiAmIzQzOzI3Miw0NSBAQCBURVNUX0YobWVtb3J5X2ZhaWx1cmUsIGFub24pXG4gXHRBU1NFUlRfRVEobXVubWFwKGFkZHIsIHNlbGYtXHUwMDNlcGFnZV9zaXplKSwgMCk7XG4gfVxuIFxuJiM0MztURVNUX0YobWVtb3J5X2ZhaWx1cmUsIGFub25faHVnZXRsYilcbiYjNDM7e1xuJiM0MztcdGNoYXIgKmFkZHI7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XHRjb25zdCB1bnNpZ25lZCBsb25nIG5yX2FsbG9jX2h1Z2V0bGJfcGFnZXMgPSA0O1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgYWxsb2Nfc2l6ZTtcbiYjNDM7XG4mIzQzO1x0aWYgKHZhcmlhbnQtXHUwMDNldHlwZSA9PSBNQURWX1NPRlQpXG4mIzQzO1x0XHRTS0lQKHJldHVybiwgXCYjMzQ7U29mdCBvZmZsaW5lIHRlc3QgaXMgbm90IGltcGxlbWVudGVkXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO1x0LyogSHVnZVRMQiBzZXR0aW5ncyB3aWxsIGJlIGF1dG9tYXRpY2FsbHkgcmVzdG9yZWQgd2hlbiB0ZXN0IGV4aXRzLiAqL1xuJiM0MztcdGh1Z2V0bGJfc2V0dXBfZGVmYXVsdChucl9hbGxvY19odWdldGxiX3BhZ2VzKTtcbiYjNDM7XG4mIzQzO1x0YWxsb2Nfc2l6ZSA9IGRlZmF1bHRfaHVnZV9wYWdlX3NpemUoKSAqIG5yX2FsbG9jX2h1Z2V0bGJfcGFnZXM7XG4mIzQzO1x0c2VsZi1cdTAwM2VwYWdlX3NpemUgPSBkZWZhdWx0X2h1Z2VfcGFnZV9zaXplKCk7XG4mIzQzO1x0c2VsZi1cdTAwM2Vucl9odWdldGxiX3BhZ2VzID0gaHVnZXRsYl9ucl9kZWZhdWx0X3BhZ2VzKCk7XG4mIzQzO1xuJiM0MztcdGFkZHIgPSBtbWFwKDAsIGFsbG9jX3NpemUsIFBST1RfUkVBRCB8IFBST1RfV1JJVEUsXG4mIzQzO1x0XHQgICAgTUFQX0FOT05ZTU9VUyB8IE1BUF9QUklWQVRFIHwgTUFQX0hVR0VUTEIsIC0xLCAwKTtcbiYjNDM7XHRpZiAoYWRkciA9PSBNQVBfRkFJTEVEKVxuJiM0MztcdFx0U0tJUChyZXR1cm4sIFwmIzM0O21tYXAgZmFpbGVkLCBub3QgZW5vdWdoIG1lbW9yeSBvciBodWdldGxiIG5vdCBzdXBwb3J0ZWQuXFxuXCYjMzQ7KTtcbiYjNDM7XHRtZW1zZXQoYWRkciwgMHhjZSwgYWxsb2Nfc2l6ZSk7XG4mIzQzO1xuJiM0MztcdHByZXBhcmUoX21ldGFkYXRhLCBzZWxmLCBhZGRyKTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gc2lnc2V0am1wKHNpZ25hbF9qbXBfYnVmLCAxKTtcbiYjNDM7XHRpZiAoIXNlbGYtXHUwMDNldHJpZ2dlcmVkKSB7XG4mIzQzO1x0XHRzZWxmLVx1MDAzZXRyaWdnZXJlZCA9IHRydWU7XG4mIzQzO1x0XHRBU1NFUlRfRVEodmFyaWFudC1cdTAwM2VpbmplY3Qoc2VsZiwgYWRkciksIDApO1xuJiM0MztcdFx0Rk9SQ0VfUkVBRCgqYWRkcik7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRjaGVjayhfbWV0YWRhdGEsIHNlbGYsIGFkZHIsIE1BRFZfSEFSRF9BTk9OX0hVR0VUTEIsIHJldCk7XG4mIzQzO1xuJiM0MztcdGNsZWFudXAoX21ldGFkYXRhLCBzZWxmLCBhZGRyKTtcbiYjNDM7XG4mIzQzO1x0QVNTRVJUX0VRKG11bm1hcChhZGRyLCBhbGxvY19zaXplKSwgMCk7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIGludCBwcmVwYXJlX2ZpbGUoY29uc3QgY2hhciAqZm5hbWUsIHVuc2lnbmVkIGxvbmcgc2l6ZSlcbiB7XG4gXHRpbnQgZmQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDUgMTg6MjE8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TUVNT1JZX0ZBSUxVUkUmIzM0OywKICAgICYjMzQ7SFVHRVRMQkZTJiMzNDssCiAgICAmIzM0O1RSQU5TUEFSRU5UX0hVR0VQQUdFJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7X19odWdlcGFnZV9oYW5kbGVfcG9pc29uJiMzNDssCiAgICAmIzM0O2ZyZWVfaGFzX2h3cG9pc29uZWQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgbWVtb3J5IGZhaWx1cmUgaGFuZGxpbmcgZm9yIEh1Z2VUTEIgcGFnZXMsIGVuc3VyaW5nIHRoYXQgaGVhbHRoeSBzdWJwYWdlcyBvZiBhIGNvbXBvdW5kIHBhZ2Ugd2l0aCBoYXJkd2FyZSBwb2lzb25lZCBzdWJwYWdlcyBhcmUgY29ycmVjdGx5IGZyZWVkIHRvIHRoZSBidWRkeSBhbGxvY2F0b3IsIHdoaWxlIGlzb2xhdGluZyB0aGUgcG9pc29uZWQgb25lcy4gVGhpcyBpbnZvbHZlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gY29yZSBNTSBhbmQgcGFnZSBhbGxvY2F0b3IgbG9naWMsIHNwZWNpZmljYWxseSBpbiBtbS9tZW1vcnktZmFpbHVyZS5jIGFuZCBtbS9wYWdlX2FsbG9jLmMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0CiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSwKICAgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDk3NzU0NWM5ODk1NjkxM2UwMjZkMzRmNTI1Mjk5YWI5NzkwNmNjZmIKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgU3VuIEp1bCA1IDE4OjIxOjIzIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmggYi9pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaAppbmRleCA3YTg2MzU3MmFkY2U3OS4uM2NkNTI0ZTA0YTMwYmIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oCkBAIC04NzksNyAmIzQzOzg3OSw3IEBAIEZPTElPX0ZMQUdfRkFMU0UocGFydGlhbGx5X21hcHBlZCkKIAogI2RlZmluZSBQR19oZWFkX21hc2sgKCgxVUwgJmx0OyZsdDsgUEdfaGVhZCkpCiAKLSNpZiBkZWZpbmVkKENPTkZJR19NRU1PUllfRkFJTFVSRSkgJmFtcDsmYW1wOyBkZWZpbmVkKENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSkKJiM0MzsjaWYgZGVmaW5lZChDT05GSUdfTUVNT1JZX0ZBSUxVUkUpICZhbXA7JmFtcDsgKGRlZmluZWQoQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFKSB8fCBkZWZpbmVkKENPTkZJR19IVUdFVExCX1BBR0UpKQogLyoKICAqIFBhZ2VIYXNIV1BvaXNvbmVkIGluZGljYXRlcyB0aGF0IGF0IGxlYXN0IG9uZSBzdWJwYWdlIGlzIGh3cG9pc29uZWQgaW4gdGhlCiAgKiBjb21wb3VuZCBwYWdlLgpkaWZmIC0tZ2l0IGEvbW0vbWVtb3J5LWZhaWx1cmUuYyBiL21tL21lbW9yeS1mYWlsdXJlLmMKaW5kZXggNDkxNmFiMTQ1MzI1NzMuLmEzN2I2NzU1MDcxODI3IDEwMDY0NAotLS0gYS9tbS9tZW1vcnktZmFpbHVyZS5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL21lbW9yeS1mYWlsdXJlLmMKQEAgLTE3NCw2ICYjNDM7MTc0LDMwIEBAIHN0YXRpYyBzdHJ1Y3QgcmJfcm9vdF9jYWNoZWQgcGZuX3NwYWNlX2l0cmVlID0gUkJfUk9PVF9DQUNIRUQ7CiBzdGF0aWMgREVGSU5FX01VVEVYKHBmbl9zcGFjZV9sb2NrKTsKIAogLyoKJiM0MzsgKiBPbmx5IGZvciBhIEh1Z2VUTEIgcGFnZSBiZWluZyBoYW5kbGVkIGJ5IG1lbW9yeV9mYWlsdXJlKCkuIFRoZSBrZXkKJiM0MzsgKiBkaWZmZXJlbmNlIHRvIHNvZnRfb2ZmbGluZSgpIGlzIHRoYXQsIG5vIEhXUG9pc29uIHN1YnBhZ2Ugd2lsbCBtYWtlCiYjNDM7ICogaW50byBidWRkeSBhbGxvY2F0b3IgYWZ0ZXIgYSBzdWNjZXNzZnVsIGRpc3NvbHZlX2ZyZWVfaHVnZXRsYl9mb2xpbygpLAomIzQzOyAqIHNvIHRha2VfcGFnZV9vZmZfYnVkZHkoKSBpcyB1bm5lY2Vzc2FyeS4KJiM0MzsgKi8KJiM0MztzdGF0aWMgaW50IF9faHVnZXBhZ2VfaGFuZGxlX3BvaXNvbihzdHJ1Y3QgcGFnZSAqcGFnZSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBmb2xpbyAqZm9saW8gPSBwYWdlX2ZvbGlvKHBhZ2UpOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBDYW4mIzM5O3QgdXNlIGRpc3NvbHZlX2ZyZWVfaHVnZXRsYl9mb2xpbygpIHdpdGhvdXQgYSByZWxpYWJsZQomIzQzOwkgKiByYXdfaHdwX2xpc3QgdGVsbGluZyB3aGljaCBzdWJwYWdlIGlzIEhXUG9pc29uLiBTbyBkbyBub3QgZnJlZQomIzQzOwkgKiB0aGVtIHRvIHRoZSBidWRkeSBhbGxvY2F0b3IuIGRlcXVldWVfaHVnZXRsYl9mb2xpb19ub2RlX2V4YWN0KCkKJiM0MzsJICogd2lsbCBlbnN1cmUgdG8gbmV2ZXIgcmUtYWxsb2NhdGUgdGhpcyBodWdlcGFnZS4KJiM0MzsJICovCiYjNDM7CWlmIChmb2xpb190ZXN0X2h1Z2V0bGJfcmF3X2h3cF91bnJlbGlhYmxlKGZvbGlvKSkKJiM0MzsJCS8qIHJhd19od3BfbGlzdCBiZWNvbWVzIHVucmVsaWFibGUgd2hlbiBrbWFsbG9jKCkgZmFpbHMuICovCiYjNDM7CQlyZXR1cm4gLUVOT01FTTsKJiM0MzsKJiM0MzsJcmV0dXJuIGRpc3NvbHZlX2ZyZWVfaHVnZXRsYl9mb2xpbyhmb2xpbyk7CiYjNDM7fQomIzQzOwomIzQzOy8qCiYjNDM7ICogT25seSBmb3IgYSBmcmVlIG9yIEh1Z2VUTEIgcGFnZSBiZWluZyBoYW5kbGVkIGJ5IHNvZnRfb2ZmbGluZSgpLgogICogUmV0dXJuIHZhbHVlczoKICAqICAgMTogICB0aGUgcGFnZSBpcyBkaXNzb2x2ZWQgKGlmIG5lZWRlZCkgYW5kIHRha2VuIG9mZiBmcm9tIGJ1ZGR5LAogICogICAwOiAgIHRoZSBwYWdlIGlzIGRpc3NvbHZlZCAoaWYgbmVlZGVkKSBhbmQgbm90IHRha2VuIG9mZiBmcm9tIGJ1ZGR5LApAQCAtMTE2NiwxMSAmIzQzOzExOTAsMTEgQEAgc3RhdGljIGludCBtZV9odWdlX3BhZ2Uoc3RydWN0IHBhZ2Vfc3RhdGUgKnBzLCBzdHJ1Y3QgcGFnZSAqcCkKIAkJICogc3VicGFnZXMuCiAJCSAqLwogCQlmb2xpb19wdXQoZm9saW8pOwotCQlpZiAoX19wYWdlX2hhbmRsZV9wb2lzb24ocCkgJmd0OyAwKSB7CiYjNDM7CQlpZiAoX19odWdlcGFnZV9oYW5kbGVfcG9pc29uKHApKSB7CiYjNDM7CQkJcmVzID0gTUZfRkFJTEVEOwomIzQzOwkJfSBlbHNlIHsKIAkJCXBhZ2VfcmVmX2luYyhwKTsKIAkJCXJlcyA9IE1GX1JFQ09WRVJFRDsKLQkJfSBlbHNlIHsKLQkJCXJlcyA9IE1GX0ZBSUxFRDsKIAkJfQogCX0KIApAQCAtMjAwOCw2ICYjNDM7MjAzMiw3IEBAIHZvaWQgZm9saW9fY2xlYXJfaHVnZXRsYl9od3BvaXNvbihzdHJ1Y3QgZm9saW8gKmZvbGlvKQogCWlmIChmb2xpb190ZXN0X2h1Z2V0bGJfdm1lbW1hcF9vcHRpbWl6ZWQoZm9saW8pKQogCQlyZXR1cm47CiAJZm9saW9fY2xlYXJfaHdwb2lzb24oZm9saW8pOwomIzQzOwlmb2xpb19zZXRfaGFzX2h3cG9pc29uZWQoZm9saW8pOwogCWZvbGlvX2ZyZWVfcmF3X2h3cChmb2xpbywgdHJ1ZSk7CiB9CiAKQEAgLTIxMzIsMTEgJiM0MzsyMTU3LDExIEBAIHN0YXRpYyBpbnQgdHJ5X21lbW9yeV9mYWlsdXJlX2h1Z2V0bGIodW5zaWduZWQgbG9uZyBwZm4sIGludCBmbGFncykKIAkgKi8KIAlpZiAocmVzID09IE1GX0hVR0VUTEJfRlJFRUQpIHsKIAkJZm9saW9fdW5sb2NrKGZvbGlvKTsKLQkJaWYgKF9fcGFnZV9oYW5kbGVfcG9pc29uKHApICZndDsgMCkgewomIzQzOwkJaWYgKF9faHVnZXBhZ2VfaGFuZGxlX3BvaXNvbihwKSkgewomIzQzOwkJCXJlcyA9IE1GX0ZBSUxFRDsKJiM0MzsJCX0gZWxzZSB7CiAJCQlwYWdlX3JlZl9pbmMocCk7CiAJCQlyZXMgPSBNRl9SRUNPVkVSRUQ7Ci0JCX0gZWxzZSB7Ci0JCQlyZXMgPSBNRl9GQUlMRUQ7CiAJCX0KIAkJcmV0dXJuIGFjdGlvbl9yZXN1bHQocGZuLCBNRl9NU0dfRlJFRV9IVUdFLCByZXMpOwogCX0KZGlmZiAtLWdpdCBhL21tL3BhZ2VfYWxsb2MuYyBiL21tL3BhZ2VfYWxsb2MuYwppbmRleCA3NjJkOWI2YmM3OTJmMS4uNjQxODg5NmM5ZGY2NjAgMTAwNjQ0Ci0tLSBhL21tL3BhZ2VfYWxsb2MuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9wYWdlX2FsbG9jLmMKQEAgLTkzLDYgJiM0Mzs5MywxMyBAQCB0eXBlZGVmIGludCBfX2JpdHdpc2UgZnBpX3Q7CiAvKiBmcmVlX3BhZ2VzX3ByZXBhcmUoKSBoYXMgYWxyZWFkeSBiZWVuIGNhbGxlZCBmb3IgcGFnZShzKSBiZWluZyBmcmVlZC4gKi8KICNkZWZpbmUgRlBJX1BSRVBBUkVECQkoKF9fZm9yY2UgZnBpX3QpQklUKDMpKQogCiYjNDM7LyoKJiM0MzsgKiBQYWdlKHMpIG5lZWRzIHRvIGdvIHRocm91Z2ggZnJlZV9wYWdlc19zYW5pdGl6ZSgpLCBmb3IgZXhhbXBsZSwgYmVjYXVzZQomIzQzOyAqIGZyZWVfcGFnZXNfcHJlcGFyZSgpIGNhbm5vdCBzYW5pdGl6ZSBhIGhpZ2gtb3JkZXIgcGFnZSBibG9jayBkdWUgdG8KJiM0MzsgKiBoYXJkd2FyZSBlcnJvciBpbiBzb21lIHBhZ2UocykuCiYjNDM7ICovCiYjNDM7I2RlZmluZSBGUElfU0FOSVRJWkUJCSgoX19mb3JjZSBmcGlfdClCSVQoNCkpCiYjNDM7CiAvKiBwcmV2ZW50ICZndDsxIF91cGRhdGVyXyBvZiB6b25lIHBlcmNwdSBwYWdlc2V0IC0mZ3Q7aGlnaCBhbmQgLSZndDtiYXRjaCBmaWVsZHMgKi8KIHN0YXRpYyBERUZJTkVfTVVURVgocGNwX2JhdGNoX2hpZ2hfbG9jayk7CiAjZGVmaW5lIE1JTl9QRVJDUFVfUEFHRUxJU1RfSElHSF9GUkFDVElPTiAoOCkKQEAgLTIxMCw2ICYjNDM7MjE3LDggQEAgZ2ZwX3QgZ2ZwX2FsbG93ZWRfbWFzayBfX3JlYWRfbW9zdGx5ID0gR0ZQX0JPT1RfTUFTSzsKIHVuc2lnbmVkIGludCBwYWdlYmxvY2tfb3JkZXIgX19yZWFkX21vc3RseTsKICNlbmRpZgogCiYjNDM7c3RhdGljIHZvaWQgZnJlZV9oYXNfaHdwb2lzb25lZChzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgaW50IG9yZGVyLAomIzQzOwkJCQlmcGlfdCBmcGlfZmxhZ3MpOwogc3RhdGljIHZvaWQgX19mcmVlX3BhZ2VzX29rKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBpbnQgb3JkZXIsCiAJCQkgICAgZnBpX3QgZnBpX2ZsYWdzKTsKIHN0YXRpYyB2b2lkIHJlc2VydmVfaGlnaGF0b21pY19wYWdlYmxvY2soc3RydWN0IHBhZ2UgKnBhZ2UsIGludCBvcmRlciwKQEAgLTEzMTEsMTQgJiM0MzsxMzIwLDczIEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBwZ2FsbG9jX3RhZ19zdWJfcGFnZXMoc3RydWN0IGFsbG9jX3RhZyAqdGFnLCB1bnNpZ25lZCBpbnQgbnIpCiAKICNlbmRpZiAvKiBDT05GSUdfTUVNX0FMTE9DX1BST0ZJTElORyAqLwogCiYjNDM7LyoKJiM0MzsgKiBTYW5pdGl6ZSwgd2hpY2ggcmVxdWlyZXMgd3JpdGluZywgYSBibG9jayBvZiBwYWdlcyBhdCB0aGUgbGFzdCBtb21lbnQgb2YKJiM0MzsgKiBwcmVwYXJpbmcgdG8gZnJlZWluZyB0aGVtLCBpLmUuIF9fZnJlZV9wYWdlc19wcmVwYXJlKCkuCiYjNDM7ICovCiYjNDM7c3RhdGljIHZvaWQgZnJlZV9wYWdlc19zYW5pdGl6ZShzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgaW50IG9yZGVyKQomIzQzO3sKJiM0MzsJYm9vbCBpbml0ID0gd2FudF9pbml0X29uX2ZyZWUoKTsKJiM0MzsJLyoKJiM0MzsJICogX19rYXNhbl91bnBvaXNvbl9wYWdlcygpIHNldHMga2FzYW4gdGFnIG9uIGV2ZXJ5IHRhaWwgcGFnZSwgc28KJiM0MzsJICogaXQgaXMgZmluZSB0byB1c2Ugc2hvdWxkX3NraXBfa2FzYW5fcG9pc29uKCkgd2hlbiBwYWdlcyBoZXJlCiYjNDM7CSAqIHdlcmUgYSBzZXQgb2YgdGFpbCBwYWdlcyBmcm9tIGEgY29tcG91bmQgZm9saW8uCiYjNDM7CSAqLwomIzQzOwlib29sIHNraXBfa2FzYW5fcG9pc29uID0gc2hvdWxkX3NraXBfa2FzYW5fcG9pc29uKHBhZ2UpOwomIzQzOwomIzQzOwlrZXJuZWxfcG9pc29uX3BhZ2VzKHBhZ2UsIDEgJmx0OyZsdDsgb3JkZXIpOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBBcyBtZW1vcnkgaW5pdGlhbGl6YXRpb24gbWlnaHQgYmUgaW50ZWdyYXRlZCBpbnRvIEtBU0FOLAomIzQzOwkgKiBLQVNBTiBwb2lzb25pbmcgYW5kIG1lbW9yeSBpbml0aWFsaXphdGlvbiBjb2RlIG11c3QgYmUKJiM0MzsJICoga2VwdCB0b2dldGhlciB0byBhdm9pZCBkaXNjcmVwYW5jaWVzIGluIGJlaGF2aW9yLgomIzQzOwkgKgomIzQzOwkgKiBXaXRoIGhhcmR3YXJlIHRhZy1iYXNlZCBLQVNBTiwgbWVtb3J5IHRhZ3MgbXVzdCBiZSBzZXQgYmVmb3JlIHRoZQomIzQzOwkgKiBwYWdlIGJlY29tZXMgdW5hdmFpbGFibGUgdmlhIGRlYnVnX3BhZ2VhbGxvYyBvciBhcmNoX2ZyZWVfcGFnZS4KJiM0MzsJICovCiYjNDM7CWlmICghc2tpcF9rYXNhbl9wb2lzb24pIHsKJiM0MzsJCWthc2FuX3BvaXNvbl9wYWdlcyhwYWdlLCBvcmRlciwgaW5pdCk7CiYjNDM7CiYjNDM7CQkvKiBNZW1vcnkgaXMgYWxyZWFkeSBpbml0aWFsaXplZCBpZiBLQVNBTiBkaWQgaXQgaW50ZXJuYWxseS4gKi8KJiM0MzsJCWlmIChrYXNhbl9oYXNfaW50ZWdyYXRlZF9pbml0KCkpCiYjNDM7CQkJaW5pdCA9IGZhbHNlOwomIzQzOwl9CiYjNDM7CWlmIChpbml0KQomIzQzOwkJY2xlYXJfaGlnaHBhZ2VzX2thc2FuX3RhZ2dlZChwYWdlLCAxICZsdDsmbHQ7IG9yZGVyKTsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogYXJjaF9mcmVlX3BhZ2UoKSBjYW4gbWFrZSB0aGUgcGFnZSYjMzk7cyBjb250ZW50cyBpbmFjY2Vzc2libGUuICBzMzkwCiYjNDM7CSAqIGRvZXMgdGhpcy4gIFNvIG5vdGhpbmcgd2hpY2ggY2FuIGFjY2VzcyB0aGUgcGFnZSYjMzk7cyBjb250ZW50cyBzaG91bGQKJiM0MzsJICogaGFwcGVuIGFmdGVyIHRoaXMuCiYjNDM7CSAqLwomIzQzOwlhcmNoX2ZyZWVfcGFnZShwYWdlLCBvcmRlcik7CiYjNDM7CiYjNDM7CWRlYnVnX3BhZ2VhbGxvY191bm1hcF9wYWdlcyhwYWdlLCAxICZsdDsmbHQ7IG9yZGVyKTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBSZXR1cm5zCiYjNDM7ICogLSB0cnVlOiBjaGVja3MgYW5kIHByZXBhcmF0aW9ucyBhbGwgZ29vZCwgY2FsbGVyIGNhbiBwcm9jZWVkIGZyZWVpbmcuCiYjNDM7ICogLSBmYWxzZTogZG8gbm90IHByb2NlZWQgZnJlZWluZyBmb3Igb25lIG9mIHRoZSBmb2xsb3dpbmcgcmVhc29uczoKJiM0MzsgKiAgIDEuIFNvbWUgY2hlY2sgZmFpbGVkIHNvIGl0IGlzIG5vdCBzYWZlIHRvIHByb2NlZWQgZnJlZWluZy4KJiM0MzsgKiAgIDIuIEEgY29tcG91bmQgcGFnZSBoYXMgc29tZSBIV1BvaXNvbiBwYWdlcy4gVGhlIGhlYWx0aHkgcGFnZXMKJiM0MzsgKiAgICAgIGFyZSBhbHJlYWR5IHNhZmVseSBmcmVlZCwgYW5kIHRoZSBIV1BvaXNvbiBvbmVzIGlzb2xhdGVkLgomIzQzOyAqLwogc3RhdGljIF9fYWx3YXlzX2lubGluZSBib29sIF9fZnJlZV9wYWdlc19wcmVwYXJlKHN0cnVjdCBwYWdlICpwYWdlLAogCQl1bnNpZ25lZCBpbnQgb3JkZXIsIGZwaV90IGZwaV9mbGFncykKIHsKIAlpbnQgYmFkID0gMDsKLQlib29sIHNraXBfa2FzYW5fcG9pc29uID0gc2hvdWxkX3NraXBfa2FzYW5fcG9pc29uKHBhZ2UpOwotCWJvb2wgaW5pdCA9IHdhbnRfaW5pdF9vbl9mcmVlKCk7CiAJYm9vbCBjb21wb3VuZCA9IFBhZ2VDb21wb3VuZChwYWdlKTsKIAlzdHJ1Y3QgZm9saW8gKmZvbGlvID0gcGFnZV9mb2xpbyhwYWdlKTsKJiM0MzsJLyoKJiM0MzsJICogV2hlbiBkZWFsaW5nIHdpdGggY29tcG91bmQgcGFnZSwgUEdfaGFzX2h3cG9pc29uZWQgaXMgY2xlYXJlZAomIzQzOwkgKiB3aXRoIFBBR0VfRkxBR1NfU0VDT05ELiBTbyB0aGUgY2hlY2sgbXVzdCBiZSBkb25lIGZpcnN0LgomIzQzOwkgKgomIzQzOwkgKiBOb3RlIHdlIGNhbiYjMzk7dCBleGNsdWRlIFBHX2hhc19od3BvaXNvbmVkIGZyb20gUEFHRV9GTEFHU19TRUNPTkQuCiYjNDM7CSAqIEJlY2F1c2UgUEdfaGFzX2h3cG9pc29uZWQgPT0gUEdfYWN0aXZlLCBmcmVlX3BhZ2VfaXNfYmFkKCkgd2lsbAomIzQzOwkgKiBjb25mdXNlIGFuZCBjb21wbGFpbnQgdGhhdCB0aGUgZmlyc3QgdGFpbCBwYWdlIGlzIHN0aWxsIGFjdGl2ZS4KJiM0MzsJICovCiYjNDM7CWJvb2wgc2hvdWxkX2ZoaCA9IGNvbXBvdW5kICZhbXA7JmFtcDsgZm9saW9fdGVzdF9oYXNfaHdwb2lzb25lZChmb2xpbyk7CiAKIAlpZiAoZnBpX2ZsYWdzICZhbXA7IEZQSV9QUkVQQVJFRCkKIAkJcmV0dXJuIHRydWU7CkBAIC0xNDE2LDM0ICYjNDM7MTQ4NCwxOSBAQCBzdGF0aWMgX19hbHdheXNfaW5saW5lIGJvb2wgX19mcmVlX3BhZ2VzX3ByZXBhcmUoc3RydWN0IHBhZ2UgKnBhZ2UsCiAJCQkJCSAgIFBBR0VfU0laRSAmbHQ7Jmx0OyBvcmRlcik7CiAJfQogCi0Ja2VybmVsX3BvaXNvbl9wYWdlcyhwYWdlLCAxICZsdDsmbHQ7IG9yZGVyKTsKLQogCS8qCi0JICogQXMgbWVtb3J5IGluaXRpYWxpemF0aW9uIG1pZ2h0IGJlIGludGVncmF0ZWQgaW50byBLQVNBTiwKLQkgKiBLQVNBTiBwb2lzb25pbmcgYW5kIG1lbW9yeSBpbml0aWFsaXphdGlvbiBjb2RlIG11c3QgYmUKLQkgKiBrZXB0IHRvZ2V0aGVyIHRvIGF2b2lkIGRpc2NyZXBhbmNpZXMgaW4gYmVoYXZpb3IuCiYjNDM7CSAqIEFmdGVyIGJyZWFraW5nIGRvd24gY29tcG91bmQgcGFnZSBhbmQgZGVhbGluZyB3aXRoIHBhZ2UgbWV0YWRhdGEKJiM0MzsJICogKGUuZy4gcGFnZSBvd25lciBhbmQgcGFnZSBhbGxvYyB0YWdzKSwgdGFrZSBhIHNob3J0Y3V0IGlmIHRoaXMKJiM0MzsJICogd2FzIGEgY29tcG91bmQgcGFnZSBjb250YWluaW5nIGNlcnRhaW4gSFdQb2lzb24gc3VicGFnZXMuCiAJICoKLQkgKiBXaXRoIGhhcmR3YXJlIHRhZy1iYXNlZCBLQVNBTiwgbWVtb3J5IHRhZ3MgbXVzdCBiZSBzZXQgYmVmb3JlIHRoZQotCSAqIHBhZ2UgYmVjb21lcyB1bmF2YWlsYWJsZSB2aWEgZGVidWdfcGFnZWFsbG9jIG9yIGFyY2hfZnJlZV9wYWdlLgomIzQzOwkgKiBGUElfU0FOSVRJWkUgdG8gcmVtZW1iZXIgZnJlZV9wYWdlc19zYW5pdGl6ZSgpIGhlYWx0aHkgcGFnZXMuCiAJICovCi0JaWYgKCFza2lwX2thc2FuX3BvaXNvbikgewotCQlrYXNhbl9wb2lzb25fcGFnZXMocGFnZSwgb3JkZXIsIGluaXQpOwotCi0JCS8qIE1lbW9yeSBpcyBhbHJlYWR5IGluaXRpYWxpemVkIGlmIEtBU0FOIGRpZCBpdCBpbnRlcm5hbGx5LiAqLwotCQlpZiAoa2FzYW5faGFzX2ludGVncmF0ZWRfaW5pdCgpKQotCQkJaW5pdCA9IGZhbHNlOwomIzQzOwlpZiAoc2hvdWxkX2ZoaCkgewomIzQzOwkJZnJlZV9oYXNfaHdwb2lzb25lZChwYWdlLCBvcmRlciwgZnBpX2ZsYWdzIHwgRlBJX1NBTklUSVpFKTsKJiM0MzsJCXJldHVybiBmYWxzZTsKIAl9Ci0JaWYgKGluaXQpCi0JCWNsZWFyX2hpZ2hwYWdlc19rYXNhbl90YWdnZWQocGFnZSwgMSAmbHQ7Jmx0OyBvcmRlcik7Ci0KLQkvKgotCSAqIGFyY2hfZnJlZV9wYWdlKCkgY2FuIG1ha2UgdGhlIHBhZ2UmIzM5O3MgY29udGVudHMgaW5hY2Nlc3NpYmxlLiAgczM5MAotCSAqIGRvZXMgdGhpcy4gIFNvIG5vdGhpbmcgd2hpY2ggY2FuIGFjY2VzcyB0aGUgcGFnZSYjMzk7cyBjb250ZW50cyBzaG91bGQKLQkgKiBoYXBwZW4gYWZ0ZXIgdGhpcy4KLQkgKi8KLQlhcmNoX2ZyZWVfcGFnZShwYWdlLCBvcmRlcik7CiAKLQlkZWJ1Z19wYWdlYWxsb2NfdW5tYXBfcGFnZXMocGFnZSwgMSAmbHQ7Jmx0OyBvcmRlcik7CiYjNDM7CWZyZWVfcGFnZXNfc2FuaXRpemUocGFnZSwgb3JkZXIpOwogCiAJcmV0dXJuIHRydWU7CiB9CkBAIC02ODUyLDggJiM0Mzs2OTA1LDggQEAgdm9pZCBfX2luaXQgcGFnZV9hbGxvY19zeXNjdGxfaW5pdCh2b2lkKQogCXJlZ2lzdGVyX3N5c2N0bF9pbml0KCYjMzQ7dm0mIzM0OywgcGFnZV9hbGxvY19zeXNjdGxfdGFibGUpOwogfQogCi1zdGF0aWMgdm9pZCBmcmVlX3ByZXBhcmVkX2NvbnRpZ19yYW5nZShzdHJ1Y3QgcGFnZSAqcGFnZSwKLQkJdW5zaWduZWQgbG9uZyBucl9wYWdlcykKJiM0MztzdGF0aWMgdm9pZCBfX2ZyZWVfcHJlcGFyZWRfY29udGlnX3JhbmdlKHN0cnVjdCBwYWdlICpwYWdlLAomIzQzOwkJdW5zaWduZWQgbG9uZyBucl9wYWdlcywgZnBpX3QgZnBpX2ZsYWdzKQogewogCXVuc2lnbmVkIGxvbmcgcGZuID0gcGFnZV90b19wZm4ocGFnZSk7CiAKQEAgLTY4NjksOCAmIzQzOzY5MjIsMTUgQEAgc3RhdGljIHZvaWQgZnJlZV9wcmVwYXJlZF9jb250aWdfcmFuZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsCiAJCS8qCiAJCSAqIEZyZWUgdGhlIGNodW5rIGFzIGEgc2luZ2xlIGJsb2NrLiBPdXIgY2FsbGVyIGhhcyBhbHJlYWR5CiAJCSAqIGNhbGxlZCBmcmVlX3BhZ2VzX3ByZXBhcmUoKSBmb3IgZWFjaCBvcmRlci0wIHBhZ2UuCiYjNDM7CQkgKgomIzQzOwkJICogSWYgdGhlIG9yaWdpbmFsIGNvbXBvdW5kIHBhZ2UgaGFzIEhXUG9pc29uIHBhZ2UsCiYjNDM7CQkgKiBmcmVlX3BhZ2VzX3ByZXBhcmUoKSBoYXMgdG8gc2tpcCBzYW5pdGl6ZSBhdCB0aGF0IHRpbWUsCiYjNDM7CQkgKiBidXQgbm93IGl0IGlzIGdvb2QgdGltZSB0byBkbyB0aGF0LgogCQkgKi8KLQkJX19mcmVlX2Zyb3plbl9wYWdlcyhwYWdlLCBvcmRlciwgRlBJX1BSRVBBUkVEKTsKJiM0MzsJCWlmIChmcGlfZmxhZ3MgJmFtcDsgRlBJX1NBTklUSVpFKQomIzQzOwkJCWZyZWVfcGFnZXNfc2FuaXRpemUocGFnZSwgb3JkZXIpOwomIzQzOwomIzQzOwkJX19mcmVlX2Zyb3plbl9wYWdlcyhwYWdlLCBvcmRlciwgZnBpX2ZsYWdzIHwgRlBJX1BSRVBBUkVEKTsKIAogCQlwZm4gJiM0Mzs9IDFVTCAmbHQ7Jmx0OyBvcmRlcjsKIAkJcGFnZSAmIzQzOz0gMVVMICZsdDsmbHQ7IG9yZGVyOwpAQCAtNjg3OCw2ICYjNDM7NjkzOCwxMSBAQCBzdGF0aWMgdm9pZCBmcmVlX3ByZXBhcmVkX2NvbnRpZ19yYW5nZShzdHJ1Y3QgcGFnZSAqcGFnZSwKIAl9CiB9CiAKJiM0MztzdGF0aWMgdm9pZCBmcmVlX3ByZXBhcmVkX2NvbnRpZ19yYW5nZShzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgbG9uZyBucl9wYWdlcykKJiM0Mzt7CiYjNDM7CV9fZnJlZV9wcmVwYXJlZF9jb250aWdfcmFuZ2UocGFnZSwgbnJfcGFnZXMsIEZQSV9OT05FKTsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgdm9pZCBfX2ZyZWVfY29udGlnX3JhbmdlX2NvbW1vbih1bnNpZ25lZCBsb25nIHBmbiwgdW5zaWduZWQgbG9uZyBucl9wYWdlcywKIAkJYm9vbCBpc19mcm96ZW4pCiB7CkBAIC02OTUxLDYgJiM0Mzs3MDE2LDYxIEBAIHZvaWQgX19mcmVlX2NvbnRpZ19yYW5nZSh1bnNpZ25lZCBsb25nIHBmbiwgdW5zaWduZWQgbG9uZyBucl9wYWdlcykKIAlfX2ZyZWVfY29udGlnX3JhbmdlX2NvbW1vbihwZm4sIG5yX3BhZ2VzLCAvKiBpc19mcm96ZW49ICovIGZhbHNlKTsKIH0KIAomIzQzOy8qCiYjNDM7ICogR2l2ZW4gc29tZSBjb250aWd1b3VzIHBhZ2VzIHRoYXQgaGF2ZSBjZXJ0YWluIG51bWJlciBvZiBIV1BvaXNvbiBwYWdlKHMpLAomIzQzOyAqIGZyZWUgb25seSB0aGUgaGVhbHRoeSBvbmVzLgomIzQzOyAqCiYjNDM7ICogVXNlZCBhdCB0aGUgZW5kIG9mIF9fZnJlZV9wYWdlc19wcmVwYXJlKCkuIEV2ZW4gaWYgaGF2aW5nIEhXUG9pc29uIHBhZ2VzLAomIzQzOyAqIGJyZWFraW5nIGRvd24gY29tcG91bmQgcGFnZSBhbmQgY2xlYXJpbmcgbWV0YWRhdGEgKGUuZy4gcGFnZSBvd25lciwgYWxsb2MKJiM0MzsgKiB0YWcpIGNhbiBiZSBkb25lIHRvZ2V0aGVyIGR1cmluZyBfX2ZyZWVfcGFnZXNfcHJlcGFyZSgpLCB3aGljaCBzaW1wbGlmaWVzCiYjNDM7ICogdGhlIHNwbGl0dGluZyBoZXJlOiB1bmxpa2UgX19zcGxpdF91bm1hcHBlZF9mb2xpbygpLCB0aGVyZSBpcyBubyBuZWVkIHRvCiYjNDM7ICogdHVybiBzcGxpdCBwYWdlcyBpbnRvIGEgY29tcG91bmQgcGFnZSBvciB0byBjYXJyeSBtZXRhZGF0YS4KJiM0MzsgKgomIzQzOyAqIEl0IHNjYW5zIGV2ZXJ5IHJhdyBwYWdlIG9mIHRoZSBjb21wb3VuZCBwYWdlIGFuZCBjYXVzZXMgbm9udHJpdmlhbCBvdmVyaGVhZC4KJiM0MzsgKiBTbyBvbmx5IHVzZSB0aGlzIHdoZW4gdGhlIGNvbXBvdW5kIHBhZ2UgY29udGFpbnMgSFdQb2lzb24gcGFnZShzKS4KJiM0MzsgKgomIzQzOyAqIEl0IGFsc28gd29ya3Mgd2hlbiBvcmRlciA9PSAwLCByZWdhcmRsZXNzIG9mIFBhZ2VIV1BvaXNvbigpIG9yIG5vdC4KJiM0MzsgKgomIzQzOyAqIFRoaXMgaW1wbGVtZW50YXRpb24gbmVlZHMgcmV3b3JrIGluIG1lbWRlc2Mgd29ybGQuCiYjNDM7ICovCiYjNDM7c3RhdGljIHZvaWQgZnJlZV9oYXNfaHdwb2lzb25lZChzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgaW50IG9yZGVyLAomIzQzOwkJCQlmcGlfdCBmcGlfZmxhZ3MpCiYjNDM7ewomIzQzOwl1bnNpZ25lZCBsb25nIGN1cnIgPSBwYWdlX3RvX3BmbihwYWdlKTsKJiM0MzsJdW5zaWduZWQgbG9uZyBlbmRfcGZuID0gY3VyciAmIzQzOyAoMSAmbHQ7Jmx0OyBvcmRlcik7CiYjNDM7CXVuc2lnbmVkIGxvbmcgbmV4dDsKJiM0MzsJdW5zaWduZWQgbG9uZyB0b3RhbF9mcmVlZCA9IDA7CiYjNDM7CXVuc2lnbmVkIGxvbmcgdG90YWxfaHdwID0gMDsKJiM0MzsKJiM0MzsJd2hpbGUgKGN1cnIgJmx0OyBlbmRfcGZuKSB7CiYjNDM7CQluZXh0ID0gY3VycjsKJiM0MzsKJiM0MzsJCXdoaWxlIChuZXh0ICZsdDsgZW5kX3BmbiAmYW1wOyZhbXA7ICFQYWdlSFdQb2lzb24ocGZuX3RvX3BhZ2UobmV4dCkpKQomIzQzOwkJCSYjNDM7JiM0MztuZXh0OwomIzQzOwomIzQzOwkJaWYgKG5leHQgIT0gZW5kX3BmbikgewomIzQzOwkJCS8qCiYjNDM7CQkJICogQXZvaWQgYWNjb3VudGluZyBlcnJvciB3aGVuIHRoZSBwYWdlIGlzIGZyZWVkCiYjNDM7CQkJICogYnkgdW5wb2lzb25fbWVtb3J5KCkuCiYjNDM7CQkJICovCiYjNDM7CQkJY2xlYXJfcGFnZV90YWdfcmVmKHBmbl90b19wYWdlKG5leHQpKTsKJiM0MzsJCQkmIzQzOyYjNDM7dG90YWxfaHdwOwomIzQzOwkJfQomIzQzOwomIzQzOwkJX19mcmVlX3ByZXBhcmVkX2NvbnRpZ19yYW5nZShwZm5fdG9fcGFnZShjdXJyKSwgbmV4dCAtIGN1cnIsCiYjNDM7CQkJCQkgICAgIGZwaV9mbGFncyk7CiYjNDM7CQl0b3RhbF9mcmVlZCAmIzQzOz0gbmV4dCAtIGN1cnI7CiYjNDM7CiYjNDM7CQlpZiAobmV4dCA9PSBlbmRfcGZuKQomIzQzOwkJCWJyZWFrOwomIzQzOwomIzQzOwkJY3VyciA9IG5leHQgJiM0MzsgMTsKJiM0MzsJfQomIzQzOwomIzQzOwlwcl9pbmZvKCYjMzQ7RnJlZWQgJSNseCBwYWdlcywgZXhjbHVkZWQgJSNseCBIV1BvaXNvbiBwYWdlc1xuJiMzNDssCiYjNDM7CQl0b3RhbF9mcmVlZCwgdG90YWxfaHdwKTsKJiM0Mzt9CiYjNDM7CiAjaWZkZWYgQ09ORklHX0NPTlRJR19BTExPQwogLyogVXNhZ2U6IFNlZSBhZG1pbi1ndWlkZS9keW5hbWljLWRlYnVnLWhvd3RvLnJzdCAqLwogc3RhdGljIHZvaWQgYWxsb2NfY29udGlnX2R1bXBfcGFnZXMoc3RydWN0IGxpc3RfaGVhZCAqcGFnZV9saXN0KQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vbWVtb3J5LWZhaWx1cmUuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL21lbW9yeS1mYWlsdXJlLmMKaW5kZXggMDMyZWQ5NTIwNTdjNjIuLjc4YzEwNWNlMmFmMTg1IDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9tZW1vcnktZmFpbHVyZS5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL21lbW9yeS1mYWlsdXJlLmMKQEAgLTE4LDYgJiM0MzsxOCw3IEBACiAjaW5jbHVkZSAmbHQ7bGludXgvbWFnaWMuaCZndDsKICNpbmNsdWRlICZsdDtlcnJuby5oJmd0OwogCiYjNDM7I2luY2x1ZGUgJiMzNDtodWdlcGFnZV9zZXR0aW5ncy5oJiMzNDsKICNpbmNsdWRlICYjMzQ7dm1fdXRpbC5oJiMzNDsKIAogZW51bSBpbmplY3RfdHlwZSB7CkBAIC0yNyw2ICYjNDM7MjgsNyBAQCBlbnVtIGluamVjdF90eXBlIHsKIAogZW51bSByZXN1bHRfdHlwZSB7CiAJTUFEVl9IQVJEX0FOT04sCiYjNDM7CU1BRFZfSEFSRF9BTk9OX0hVR0VUTEIsCiAJTUFEVl9IQVJEX0NMRUFOX1BBR0VDQUNIRSwKIAlNQURWX0hBUkRfRElSVFlfUEFHRUNBQ0hFLAogCU1BRFZfU09GVF9BTk9OLApAQCAtNDcsNiAmIzQzOzQ5LDggQEAgRklYVFVSRShtZW1vcnlfZmFpbHVyZSkKIAlpbnQgcGFnZW1hcF9mZDsKIAlpbnQga3BhZ2VmbGFnc19mZDsKIAlib29sIHRyaWdnZXJlZDsKJiM0MzsJLyogTnVtYmVyIG9mIGluaXRpYWwgSHVnZVRMQiBwYWdlcyB3aXRoIGRlZmF1bHQgcGFnZSBzaXplLiAqLwomIzQzOwl1bnNpZ25lZCBsb25nIG5yX2h1Z2V0bGJfcGFnZXM7CiB9OwogCiBGSVhUVVJFX1ZBUklBTlQobWVtb3J5X2ZhaWx1cmUpCkBAIC0xNTcsNiAmIzQzOzE2MSw3IEBAIHN0YXRpYyB2b2lkIGNoZWNrKHN0cnVjdCBfX3Rlc3RfbWV0YWRhdGEgKl9tZXRhZGF0YSwgRklYVFVSRV9EQVRBKG1lbW9yeV9mYWlsdXJlCiAJCSAgdm9pZCAqdmFkZHIsIGVudW0gcmVzdWx0X3R5cGUgdHlwZSwgaW50IHNldGptcCkKIHsKIAl1bnNpZ25lZCBsb25nIHNpemU7CiYjNDM7CXVuc2lnbmVkIGxvbmcgbnJfaHVnZXRsYl9wYWdlczsKIAl1aW50NjRfdCBwZm5fZmxhZ3M7CiAKIAlzd2l0Y2ggKHR5cGUpIHsKQEAgLTE3NCw2ICYjNDM7MTc5LDcgQEAgc3RhdGljIHZvaWQgY2hlY2soc3RydWN0IF9fdGVzdF9tZXRhZGF0YSAqX21ldGFkYXRhLCBGSVhUVVJFX0RBVEEobWVtb3J5X2ZhaWx1cmUKIAkJQVNTRVJUX05FKHBhZ2VtYXBfZ2V0X3BmbihzZWxmLSZndDtwYWdlbWFwX2ZkLCB2YWRkciksIHNlbGYtJmd0O3Bmbik7CiAJCWJyZWFrOwogCWNhc2UgTUFEVl9IQVJEX0FOT046CiYjNDM7CWNhc2UgTUFEVl9IQVJEX0FOT05fSFVHRVRMQjoKIAljYXNlIE1BRFZfSEFSRF9ESVJUWV9QQUdFQ0FDSEU6CiAJCS8qIFRoZSBTSUdCVVMgc2lnbmFsIHNob3VsZCBoYXZlIGJlZW4gcmVjZWl2ZWQuICovCiAJCUFTU0VSVF9FUShzZXRqbXAsIDEpOwpAQCAtMTg0LDggJiM0MzsxOTAsMTUgQEAgc3RhdGljIHZvaWQgY2hlY2soc3RydWN0IF9fdGVzdF9tZXRhZGF0YSAqX21ldGFkYXRhLCBGSVhUVVJFX0RBVEEobWVtb3J5X2ZhaWx1cmUKIAkJQVNTRVJUX0VRKDFVTCAmbHQ7Jmx0OyBzaWdpbmZvLnNpX2FkZHJfbHNiLCBzZWxmLSZndDtwYWdlX3NpemUpOwogCQlBU1NFUlRfRVEoc2lnaW5mby5zaV9hZGRyLCB2YWRkcik7CiAKLQkJLyogWFhYIENoZWNrIGJhY2tpbmcgcHRlIGlzIGh3cG9pc29uIGVudHJ5IHdoZW4gc3VwcG9ydGVkLiAqLwotCQlBU1NFUlRfVFJVRShwYWdlbWFwX2lzX3N3YXBwZWQoc2VsZi0mZ3Q7cGFnZW1hcF9mZCwgdmFkZHIpKTsKJiM0MzsJCWlmICh0eXBlICE9IE1BRFZfSEFSRF9BTk9OX0hVR0VUTEIpCiYjNDM7CQkJLyoKJiM0MzsJCQkgKiBDaGVjayBiYWNraW5nIHB0ZSBpcyBod3BvaXNvbiBlbnRyeSB3aGVuIHN1cHBvcnRlZC4KJiM0MzsJCQkgKiBBbHRob3VnaCB0cnlfdG9fdW5tYXBfb25lKCkgYWxzbyBpbnN0YWxscyBod3BvaXNvbgomIzQzOwkJCSAqIGVudHJ5IGZvciBIdWdlVExCLCBwYWdlbWFwX2h1Z2V0bGJfcmFuZ2UoKSBkb2VzbiYjMzk7dAomIzQzOwkJCSAqIHBhcnNlIHN3YXAgZW50cmllcyBhdCBhbGwuCiYjNDM7CQkJICovCiYjNDM7CQkJQVNTRVJUX1RSVUUocGFnZW1hcF9pc19zd2FwcGVkKHNlbGYtJmd0O3BhZ2VtYXBfZmQsIHZhZGRyKSk7CiYjNDM7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCVNLSVAocmV0dXJuLCAmIzM0O3VuZXhwZWN0ZWQgaW5qZWN0IHR5cGUgJWQuXG4mIzM0OywgdHlwZSk7CkBAIC0xOTMsNyAmIzQzOzIwNiwxOSBAQCBzdGF0aWMgdm9pZCBjaGVjayhzdHJ1Y3QgX190ZXN0X21ldGFkYXRhICpfbWV0YWRhdGEsIEZJWFRVUkVfREFUQShtZW1vcnlfZmFpbHVyZQogCiAJLyogQ2hlY2sgaWYgdGhlIHZhbHVlIG9mIEhhcmR3YXJlQ29ycnVwdGVkIGhhcyBpbmNyZWFzZWQuICovCiAJQVNTRVJUX0VRKGdldF9oYXJkd2FyZV9jb3JydXB0ZWRfc2l6ZSgmYW1wO3NpemUpLCAwKTsKLQlBU1NFUlRfRVEoc2l6ZSwgc2VsZi0mZ3Q7Y29ycnVwdGVkX3NpemUgJiM0Mzsgc2VsZi0mZ3Q7cGFnZV9zaXplIC8gMTAyNCk7CiYjNDM7CiYjNDM7CWlmICh0eXBlID09IE1BRFZfSEFSRF9BTk9OX0hVR0VUTEIpIHsKJiM0MzsJCS8qCiYjNDM7CQkgKiBPbmx5IG9uZSBwYWdlIGlzIGhhcmR3YXJlIGNvcnJ1cHRlZDsgdGhlIHJlc3Qgc2hvdWxkIGFsbCBiZQomIzQzOwkJICogcmVsZWFzZWQgdG8gYnVkZHkgYWxsb2NhdG9yLgomIzQzOwkJICovCiYjNDM7CQlBU1NFUlRfRVEoc2l6ZSwgc2VsZi0mZ3Q7Y29ycnVwdGVkX3NpemUgJiM0MzsgZ2V0cGFnZXNpemUoKSAvIDEwMjQpOwomIzQzOwkJLyogSHVnZVRMQiBzaG91bGQgaGF2ZSBsb3N0IHRoZSBIV1BvaXNvbiBIdWdlVExCIHBhZ2UuICovCiYjNDM7CQlucl9odWdldGxiX3BhZ2VzID0gaHVnZXRsYl9ucl9kZWZhdWx0X3BhZ2VzKCk7CiYjNDM7CQlBU1NFUlRfRVEobnJfaHVnZXRsYl9wYWdlcyAmIzQzOyAxLCBzZWxmLSZndDtucl9odWdldGxiX3BhZ2VzKTsKJiM0MzsJfSBlbHNlIHsKJiM0MzsJCUFTU0VSVF9FUShzaXplLCBzZWxmLSZndDtjb3JydXB0ZWRfc2l6ZSAmIzQzOyBzZWxmLSZndDtwYWdlX3NpemUgLyAxMDI0KTsKJiM0MzsJfQogCiAJLyogQ2hlY2sgaWYgSFdQb2lzb24gZmxhZyBpcyBzZXQuICovCiAJQVNTRVJUX0VRKHBhZ2VmbGFnc19nZXQoc2VsZi0mZ3Q7cGZuLCBzZWxmLSZndDtrcGFnZWZsYWdzX2ZkLCAmYW1wO3Bmbl9mbGFncyksIDApOwpAQCAtMjQ3LDYgJiM0MzsyNzIsNDUgQEAgVEVTVF9GKG1lbW9yeV9mYWlsdXJlLCBhbm9uKQogCUFTU0VSVF9FUShtdW5tYXAoYWRkciwgc2VsZi0mZ3Q7cGFnZV9zaXplKSwgMCk7CiB9CiAKJiM0MztURVNUX0YobWVtb3J5X2ZhaWx1cmUsIGFub25faHVnZXRsYikKJiM0Mzt7CiYjNDM7CWNoYXIgKmFkZHI7CiYjNDM7CWludCByZXQ7CiYjNDM7CWNvbnN0IHVuc2lnbmVkIGxvbmcgbnJfYWxsb2NfaHVnZXRsYl9wYWdlcyA9IDQ7CiYjNDM7CXVuc2lnbmVkIGxvbmcgYWxsb2Nfc2l6ZTsKJiM0MzsKJiM0MzsJaWYgKHZhcmlhbnQtJmd0O3R5cGUgPT0gTUFEVl9TT0ZUKQomIzQzOwkJU0tJUChyZXR1cm4sICYjMzQ7U29mdCBvZmZsaW5lIHRlc3QgaXMgbm90IGltcGxlbWVudGVkJiMzNDspOwomIzQzOwomIzQzOwkvKiBIdWdlVExCIHNldHRpbmdzIHdpbGwgYmUgYXV0b21hdGljYWxseSByZXN0b3JlZCB3aGVuIHRlc3QgZXhpdHMuICovCiYjNDM7CWh1Z2V0bGJfc2V0dXBfZGVmYXVsdChucl9hbGxvY19odWdldGxiX3BhZ2VzKTsKJiM0MzsKJiM0MzsJYWxsb2Nfc2l6ZSA9IGRlZmF1bHRfaHVnZV9wYWdlX3NpemUoKSAqIG5yX2FsbG9jX2h1Z2V0bGJfcGFnZXM7CiYjNDM7CXNlbGYtJmd0O3BhZ2Vfc2l6ZSA9IGRlZmF1bHRfaHVnZV9wYWdlX3NpemUoKTsKJiM0MzsJc2VsZi0mZ3Q7bnJfaHVnZXRsYl9wYWdlcyA9IGh1Z2V0bGJfbnJfZGVmYXVsdF9wYWdlcygpOwomIzQzOwomIzQzOwlhZGRyID0gbW1hcCgwLCBhbGxvY19zaXplLCBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFLAomIzQzOwkJICAgIE1BUF9BTk9OWU1PVVMgfCBNQVBfUFJJVkFURSB8IE1BUF9IVUdFVExCLCAtMSwgMCk7CiYjNDM7CWlmIChhZGRyID09IE1BUF9GQUlMRUQpCiYjNDM7CQlTS0lQKHJldHVybiwgJiMzNDttbWFwIGZhaWxlZCwgbm90IGVub3VnaCBtZW1vcnkgb3IgaHVnZXRsYiBub3Qgc3VwcG9ydGVkLlxuJiMzNDspOwomIzQzOwltZW1zZXQoYWRkciwgMHhjZSwgYWxsb2Nfc2l6ZSk7CiYjNDM7CiYjNDM7CXByZXBhcmUoX21ldGFkYXRhLCBzZWxmLCBhZGRyKTsKJiM0MzsKJiM0MzsJcmV0ID0gc2lnc2V0am1wKHNpZ25hbF9qbXBfYnVmLCAxKTsKJiM0MzsJaWYgKCFzZWxmLSZndDt0cmlnZ2VyZWQpIHsKJiM0MzsJCXNlbGYtJmd0O3RyaWdnZXJlZCA9IHRydWU7CiYjNDM7CQlBU1NFUlRfRVEodmFyaWFudC0mZ3Q7aW5qZWN0KHNlbGYsIGFkZHIpLCAwKTsKJiM0MzsJCUZPUkNFX1JFQUQoKmFkZHIpOwomIzQzOwl9CiYjNDM7CiYjNDM7CWNoZWNrKF9tZXRhZGF0YSwgc2VsZiwgYWRkciwgTUFEVl9IQVJEX0FOT05fSFVHRVRMQiwgcmV0KTsKJiM0MzsKJiM0MzsJY2xlYW51cChfbWV0YWRhdGEsIHNlbGYsIGFkZHIpOwomIzQzOwomIzQzOwlBU1NFUlRfRVEobXVubWFwKGFkZHIsIGFsbG9jX3NpemUpLCAwKTsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgaW50IHByZXBhcmVfZmlsZShjb25zdCBjaGFyICpmbmFtZSwgdW5zaWduZWQgbG9uZyBzaXplKQogewogCWludCBmZDsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDUgMTg6MjE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzUzOAoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDYzMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBLZXJuZWwgUGF0Y2ggZm9yIEZ1enppbmcgUmVsZXZhbmNlKioKCk9rYXksIHNvIEkmIzM5O3ZlIGdvdCB0aGlzIHBhdGNoIGluIGZyb250IG9mIG1lLCBhbmQgbXkgaW1tZWRpYXRlIGNvbmNlcm4gaXMgd2hldGhlciBpdCBpbnRyb2R1Y2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyBzaWduaWZpY2FudCBlbm91Z2ggdG8gd2FycmFudCBmdXp6aW5nLiBUaGUgZmlsZXMgdG91Y2hlZCBhcmU6IGBpbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaGAsIGBtbS9tZW1vcnktZmFpbHVyZS5jYCwgYG1tL3BhZ2VfYWxsb2MuY2AsIGFuZCBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vbWVtb3J5LWZhaWx1cmUuY2AuIFRoYXQmIzM5O3MgYWxyZWFkeSB0ZWxsaW5nIC0gdGhlIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtIGlzIGJlaW5nIHR3ZWFrZWQuCgpMb29raW5nIGNsb3NlcjoKCjEuICBJbiBgaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmhgLCBpdCBsb29rcyBsaWtlIGEgY29uZGl0aW9uYWwgcHJlcHJvY2Vzc29yIG1hY3JvLCBgUGFnZUhhc0hXUG9pc29uZWRgLCBoYXMgYmVlbiB1cGRhdGVkIHRvIGFjY291bnQgZm9yIGJvdGggYENPTkZJR19IVUdFVExCX1BBR0VgIGFuZCBgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFYCwgbm90IGp1c3QgdGhlIGxhdHRlci4KCjIuICBgbW0vbWVtb3J5LWZhaWx1cmUuY2AgaXMgc2VlaW5nIHNvbWUgc2lnbmlmaWNhbnQgYWRkaXRpb25zIGFuZCBtb2RpZmljYXRpb25zLiAgVGhlcmUmIzM5O3MgYSBuZXcgZnVuY3Rpb24sIGBfX2h1Z2VwYWdlX2hhbmRsZV9wb2lzb25gLCB3aGljaCBhcHBlYXJzIHRvIGJlIGhhbmRsaW5nIHBvaXNvbmVkIGh1Z2UgcGFnZXMuIEl0IGNhbGxzIGBkaXNzb2x2ZV9mcmVlX2h1Z2V0bGJfZm9saW8oKWAgYW5kIHJlcGxhY2VzIGNhbGxzIHRvIGBfX3BhZ2VfaGFuZGxlX3BvaXNvbigpYC4gIFBsdXMsIGBmb2xpb19jbGVhcl9odWdldGxiX2h3cG9pc29uKClgIG5vdyBjYWxscyBgZm9saW9fc2V0X2hhc19od3BvaXNvbmVkKClgLiBBbGwgb2YgdGhpcyBzY3JlYW1zIEh1Z2VUTEIgYW5kIG1lbW9yeSBmYWlsdXJlIGludGVyYWN0aW9uLgoKMy4gIGBtbS9wYWdlX2FsbG9jLmNgIGlzIGdldHRpbmcgZXZlbiBtb3JlIGludGVyZXN0aW5nLiBJdCYjMzk7cyBhZGRpbmcgYW4gYEZQSV9TQU5JVElaRWAgZmxhZywgYW5kIGEgbmV3IGBmcmVlX3BhZ2VzX3Nhbml0aXplKClgIGZ1bmN0aW9uLiAgVGhlIGV4aXN0aW5nIGBfX2ZyZWVfcGFnZXNfcHJlcGFyZSgpYCBub3cgY2hlY2tzIGZvciBgZm9saW9fdGVzdF9oYXNfaHdwb2lzb25lZCgpYCBhbmQgY2FsbHMgYGZyZWVfaGFzX2h3cG9pc29uZWQoKWAsIHdoaWNoIGxvb2tzIGxpa2UgaXQmIzM5O3Mgc3BlY2lmaWNhbGx5IGRlYWxpbmcgd2l0aCBmcmVlaW5nIHBhZ2VzIHRoYXQgYXJlIG1hcmtlZCBhcyBoYXZpbmcgSFdQb2lzb25lZCBwYWdlcywgc2tpcHBpbmcgdGhlIHBvaXNvbmVkIG9uZXMgYW5kIG9ubHkgZnJlZWluZyBoZWFsdGh5IG9uZXMuIEFkZGl0aW9uYWxseSwgYGZyZWVfcHJlcGFyZWRfY29udGlnX3JhbmdlKClgIG5vdyBjb25kaXRpb25hbGx5IGNhbGxzIGBmcmVlX3BhZ2VzX3Nhbml0aXplKClgLgoKNC4gIEZpbmFsbHksIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9tZW1vcnktZmFpbHVyZS5jYCBhZGRzIGEgbmV3IHRlc3QgY2FsbGVkIGBhbm9uX2h1Z2V0bGJgLgoKVGhpcyBwYXRjaCBpcyB1bmRlbmlhYmx5IGEgZnVuY3Rpb25hbCBjaGFuZ2UsIGRpcmVjdGx5IGltcGFjdGluZyBob3cgdGhlIGtlcm5lbCBoYW5kbGVzIG1lbW9yeSBmYWlsdXJlcywgc3BlY2lmaWNhbGx5IHJlbGF0ZWQgdG8gSFdQb2lzb24gYW5kIEh1Z2VUTEIgcGFnZXMuIEdpdmVuIHRoZSBzY29wZSBvZiBjaGFuZ2VzLCBpdCB3YXJyYW50cyBhIGNsb3NlciBsb29rLCBlc3BlY2lhbGx5IGZvY3VzaW5nIG9uIGBDT05GSUdfTUVNT1JZX0ZBSUxVUkVgLCBgQ09ORklHX0hVR0VUTEJfUEFHRWAsIGFuZCBgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFYC4KCkkmIzM5O20gcGFydGljdWxhcmx5IGludGVyZXN0ZWQgaW4gYF9faHVnZXBhZ2VfaGFuZGxlX3BvaXNvbmAgKGluIGBtbS9tZW1vcnktZmFpbHVyZS5jYCkgYW5kIGBmcmVlX2hhc19od3BvaXNvbmVkYCAoaW4gYG1tL3BhZ2VfYWxsb2MuY2ApLiBJIG5lZWQgdG8gY2hlY2sgaG93IHRoZXNlIGZ1bmN0aW9ucyBhcmUgcmVhY2hhYmxlLCBzbyBJJiMzOTtsbCBiZSB1c2luZyBgZGVmYXVsdF9hcGk6Z3JlcHBlcmAgdG8gc2VlIHdoZXJlIHRoZXkgYXJlIGNhbGxlZCBhbmQgaWYgdGhleSBhcmUgcmVsZXZhbnQgdG8gZnV6emluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNSAxODoyMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtfX2h1Z2VwYWdlX2hhbmRsZV9wb2lzb24mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vbWVtb3J5LWZhaWx1cmUuYz0xNzQ9c3RhdGljIERFRklORV9NVVRFWChwZm5fc3BhY2VfbG9jayk7XG4tLVxubW0vbWVtb3J5LWZhaWx1cmUuYy0xODEtICovXG5tbS9tZW1vcnktZmFpbHVyZS5jOjE4MjpzdGF0aWMgaW50IF9faHVnZXBhZ2VfaGFuZGxlX3BvaXNvbihzdHJ1Y3QgcGFnZSAqcGFnZSlcbm1tL21lbW9yeS1mYWlsdXJlLmMtMTgzLXtcbi0tXG5tbS9tZW1vcnktZmFpbHVyZS5jPTExNzI9c3RhdGljIGludCBtZV9odWdlX3BhZ2Uoc3RydWN0IHBhZ2Vfc3RhdGUgKnBzLCBzdHJ1Y3QgcGFnZSAqcClcbi0tXG5tbS9tZW1vcnktZmFpbHVyZS5jLTExOTItXHRcdGZvbGlvX3B1dChmb2xpbyk7XG5tbS9tZW1vcnktZmFpbHVyZS5jOjExOTM6XHRcdGlmIChfX2h1Z2VwYWdlX2hhbmRsZV9wb2lzb24ocCkpIHtcbm1tL21lbW9yeS1mYWlsdXJlLmMtMTE5NC1cdFx0XHRyZXMgPSBNRl9GQUlMRUQ7XG4tLVxubW0vbWVtb3J5LWZhaWx1cmUuYz0yMTA3PXN0YXRpYyBpbnQgdHJ5X21lbW9yeV9mYWlsdXJlX2h1Z2V0bGIodW5zaWduZWQgbG9uZyBwZm4sIGludCBmbGFncylcbi0tXG5tbS9tZW1vcnktZmFpbHVyZS5jLTIxNTktXHRcdGZvbGlvX3VubG9jayhmb2xpbyk7XG5tbS9tZW1vcnktZmFpbHVyZS5jOjIxNjA6XHRcdGlmIChfX2h1Z2VwYWdlX2hhbmRsZV9wb2lzb24ocCkpIHtcbm1tL21lbW9yeS1mYWlsdXJlLmMtMjE2MS1cdFx0XHRyZXMgPSBNRl9GQUlMRUQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDUgMTg6MjE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTEyOAoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDE0NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgTWVtb3J5IEZhaWx1cmUgSGFuZGxpbmcqKgoKT2theSwgc28gSSYjMzk7bSBkaXZpbmcgaW50byB0aGlzIG1lbW9yeSBmYWlsdXJlIGhhbmRsaW5nIGNvZGUuIEl0IGxvb2tzIGxpa2UgYG1lX2h1Z2VfcGFnZWAgYW5kIGB0cnlfbWVtb3J5X2ZhaWx1cmVfaHVnZXRsYmAgYXJlIGtleSBwbGF5ZXJzIGhlcmUuIEkmIzM5O20gZm9jdXNpbmcgb24gaG93IHRoZSBzeXN0ZW0gcmVzcG9uZHMgd2hlbiBtZW1vcnkgZXJyb3JzIGFyZSBkZXRlY3RlZC4gTm93LCBgZnJlZV9oYXNfaHdwb2lzb25lZGAgaXMgaW50cmlndWluZy4gSXQmIzM5O3MgY2FsbGVkIGZyb20gYF9fZnJlZV9wYWdlc19wcmVwYXJlYCwgd2hpY2ggaXMgYSAqdmVyeSogaG90IHBhdGgg4oCTIHRoYXQmIzM5O3Mgc29tZXRoaW5nIEkgbmVlZCB0byBwYXkgYXR0ZW50aW9uIHRvIGJlY2F1c2UgcGVyZm9ybWFuY2UgbWF0dGVycy4gSG93ZXZlciwgYGZyZWVfaGFzX2h3cG9pc29uZWRgIGl0c2VsZiBpcyBvbmx5IGV4ZWN1dGVkIHdoZW4gYHNob3VsZF9maGhgIGlzIHRydWUuIGBzaG91bGRfZmhoYCBzZWVtcyB0byBiZSBjb25kaXRpb25hbCBvbiBhIGBjb21wb3VuZGAgcGFnZSBhbmQgdGhlIGBmb2xpb190ZXN0X2hhc19od3BvaXNvbmVkKGZvbGlvKWAgcmVzdWx0LiBUaGF0IG1lYW5zIGl0IG9ubHkgZ2V0cyBjYWxsZWQgd2hlbiBkZWFsaW5nIHdpdGggY29tcG91bmRzIHdpdGggaGFyZHdhcmUgcG9pc29uaW5nLiBHaXZlbiBpdHMgY29udGV4dCwgYGZyZWVfaGFzX2h3cG9pc29uZWRgIHNlZW1zIGxpa2UgYSBwcmltZSB0YXJnZXQgZm9yIGRlZXBlciBpbnZlc3RpZ2F0aW9uLCBhIGdvb2QgZm9jdXMgc3ltYm9sLgoKQWxzbywgSSBzaG91bGQgZGVmaW5pdGVseSBjaGVjayBgX19odWdlcGFnZV9oYW5kbGVfcG9pc29uYCBhbG9uZ3NpZGUgaXQuCgpSaWdodCBub3csIEkgd2FudCB0byBzdGFydCBieSBleGFtaW5pbmcgYGZyZWVfaGFzX2h3cG9pc29uZWRgIGNsb3NlbHkuIExldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyBhY3R1YWxseSBnb2luZyBvbiB0aGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNSAxODoyMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtmcmVlX2hhc19od3BvaXNvbmVkJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3BhZ2VfYWxsb2MuYz0yMTc9dW5zaWduZWQgaW50IHBhZ2VibG9ja19vcmRlciBfX3JlYWRfbW9zdGx5O1xuLS1cbm1tL3BhZ2VfYWxsb2MuYy0yMTktXG5tbS9wYWdlX2FsbG9jLmM6MjIwOnN0YXRpYyB2b2lkIGZyZWVfaGFzX2h3cG9pc29uZWQoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGludCBvcmRlcixcbm1tL3BhZ2VfYWxsb2MuYy0yMjEtXHRcdFx0XHRmcGlfdCBmcGlfZmxhZ3MpO1xuLS1cbm1tL3BhZ2VfYWxsb2MuYz0xMzc1PXN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgYm9vbCBfX2ZyZWVfcGFnZXNfcHJlcGFyZShzdHJ1Y3QgcGFnZSAqcGFnZSxcbi0tXG5tbS9wYWdlX2FsbG9jLmMtMTQ5NC1cdGlmIChzaG91bGRfZmhoKSB7XG5tbS9wYWdlX2FsbG9jLmM6MTQ5NTpcdFx0ZnJlZV9oYXNfaHdwb2lzb25lZChwYWdlLCBvcmRlciwgZnBpX2ZsYWdzIHwgRlBJX1NBTklUSVpFKTtcbm1tL3BhZ2VfYWxsb2MuYy0xNDk2LVx0XHRyZXR1cm4gZmFsc2U7XG4tLVxubW0vcGFnZV9hbGxvYy5jPTcwMTQ9dm9pZCBfX2ZyZWVfY29udGlnX3JhbmdlKHVuc2lnbmVkIGxvbmcgcGZuLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzKVxuLS1cbm1tL3BhZ2VfYWxsb2MuYy03MDM1LSAqL1xubW0vcGFnZV9hbGxvYy5jOjcwMzY6c3RhdGljIHZvaWQgZnJlZV9oYXNfaHdwb2lzb25lZChzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgaW50IG9yZGVyLFxubW0vcGFnZV9hbGxvYy5jLTcwMzctXHRcdFx0XHRmcGlfdCBmcGlfZmxhZ3MpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDUgMTg6MjE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTg5MAoJCQkJCQkJb3V0cHV0OiAyNAoJCQkJCQkJdGhvdWdodHM6IDU0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGFuYWx5c2lzIG9mIHRob3NlIGZ1bmN0aW9uIGNhbGxzOgoKKipEaXNzZWN0aW5nIEh1Z2VwYWdlIE1hbmFnZW1lbnQqKgoKT2theSwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gaG93IGh1Z2VwYWdlcyBhcmUgaGFuZGxlZC4gTXkgaW5pdGlhbCBmb2N1cyBpcyBvbiB0aGUgYF9faHVnZXBhZ2VfaGFuZGxlX3BvaXNvbmAgZnVuY3Rpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyByb2xlLCBhbmQgaXQgbG9va3MgbGlrZSBpdCYjMzk7cyBjcnVjaWFsLCBjb25zaWRlcmluZyBpdCYjMzk7cyBjYWxsZWQgZnJvbSB0d28ga2V5IGxvY2F0aW9ucy4gU3BlY2lmaWNhbGx5LCBgbWVfaHVnZV9wYWdlYCBhbmQgYHRyeV9tZW1vcnlfZmFpbHVyZV9odWdldGxiYC4gVGhhdCB0ZWxscyBtZSBpdCYjMzk7cyBsaWtlbHkgaW52b2x2ZWQgaW4gZXJyb3IgaGFuZGxpbmcgb3IgdmFsaWRhdGlvbiByZWxhdGVkIHRvIGh1Z2VwYWdlcywgbWF5YmUgZGVhbGluZyB3aXRoIHBvdGVudGlhbGx5IGNvcnJ1cHRlZCBtZW1vcnkgcmVnaW9ucy4gSSBuZWVkIHRvIGxvb2sgY2xvc2VyIGF0IHdoYXQgdGhvc2UgY2FsbGVycyBkbyB0byBnZXQgdGhlIGZ1bGwgcGljdHVyZS4KCk5leHQsIEkmIzM5O2xsIHR1cm4gbXkgYXR0ZW50aW9uIHRvIGBkaXNzb2x2ZV9mcmVlX2h1Z2V0bGJfZm9saW9gLiBCYXNlZCBvbiB0aGUgbmFtZSwgaXQgc2VlbXMgcmVsYXRlZCB0byByZWxlYXNpbmcgb3IgZGVhbGxvY2F0aW5nIGh1Z2VwYWdlIGZvbGlvcywgd2hpY2ggaXMgdGhlIGhpZ2hlci1sZXZlbCByZXByZXNlbnRhdGlvbiBvZiBhIGh1Z2VwYWdlLiBUaGUgJiMzNDtkaXNzb2x2ZSYjMzQ7IHBhcnQgc3VnZ2VzdHMgaXQgbWlnaHQgYmUgaGFuZGxpbmcgZnJhZ21lbnRhdGlvbiBvciBjb21iaW5pbmcgbXVsdGlwbGUgc21hbGxlciByZWdpb25zLiBJIGV4cGVjdCB0aGlzIGZ1bmN0aW9uIGhhcyBpbnRlcmVzdGluZyBpbnRlcmFjdGlvbiB3aXRoIHRoZSBwYWdlIHJlY2xhaW0gc3Vic3lzdGVtLiBJJiMzOTtsbCBuZWVkIHRvIHNlZSBob3cgaXQgZml0cyBpbnRvIHRoZSBicm9hZGVyIGFsbG9jYXRpb24gYW5kIGRlYWxsb2NhdGlvbiBsaWZlY3ljbGUgb2YgaHVnZXBhZ2VzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA1IDE4OjIxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2Rpc3NvbHZlX2ZyZWVfaHVnZXRsYl9mb2xpbyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaD04ODA9c3RhdGljIGlubGluZSBpbnQgaHN0YXRlX2luZGV4KHN0cnVjdCBoc3RhdGUgKmgpXG4tLVxuaW5jbHVkZS9saW51eC9odWdldGxiLmgtODg0LVxuaW5jbHVkZS9saW51eC9odWdldGxiLmg6ODg1OmludCBkaXNzb2x2ZV9mcmVlX2h1Z2V0bGJfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbyk7XG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaDo4ODY6aW50IGRpc3NvbHZlX2ZyZWVfaHVnZXRsYl9mb2xpb3ModW5zaWduZWQgbG9uZyBzdGFydF9wZm4sXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaC04ODctXHRcdFx0XHQgICAgdW5zaWduZWQgbG9uZyBlbmRfcGZuKTtcbi0tXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaD0xMjE0PXN0YXRpYyBpbmxpbmUgaW50IGhzdGF0ZV9pbmRleChzdHJ1Y3QgaHN0YXRlICpoKVxuLS1cbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oLTEyMTgtXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaDoxMjE5OnN0YXRpYyBpbmxpbmUgaW50IGRpc3NvbHZlX2ZyZWVfaHVnZXRsYl9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuaW5jbHVkZS9saW51eC9odWdldGxiLmgtMTIyMC17XG4tLVxuaW5jbHVkZS9saW51eC9odWdldGxiLmgtMTIyMy1cbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oOjEyMjQ6c3RhdGljIGlubGluZSBpbnQgZGlzc29sdmVfZnJlZV9odWdldGxiX2ZvbGlvcyh1bnNpZ25lZCBsb25nIHN0YXJ0X3BmbixcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oLTEyMjUtXHRcdFx0XHRcdCAgIHVuc2lnbmVkIGxvbmcgZW5kX3Bmbilcbi0tXG5tbS9odWdldGxiLmM9MTkwNj1zdGF0aWMgc3RydWN0IGZvbGlvICpyZW1vdmVfcG9vbF9odWdldGxiX2ZvbGlvKHN0cnVjdCBoc3RhdGUgKmgsXG4tLVxubW0vaHVnZXRsYi5jLTE5NDMtICovXG5tbS9odWdldGxiLmM6MTk0NDppbnQgZGlzc29sdmVfZnJlZV9odWdldGxiX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8pXG5tbS9odWdldGxiLmMtMTk0NS17XG4tLVxubW0vaHVnZXRsYi5jLTIwMjctICogcGFydCBvZiBpdCBsaWVzIHdpdGhpbiB0aGUgZ2l2ZW4gcmFuZ2UuXG5tbS9odWdldGxiLmM6MjAyODogKiBBbHNvIG5vdGUgdGhhdCBpZiBkaXNzb2x2ZV9mcmVlX2h1Z2V0bGJfZm9saW8oKSByZXR1cm5zIHdpdGggYW4gZXJyb3IsIGFsbFxubW0vaHVnZXRsYi5jLTIwMjktICogZnJlZSBodWdldGxiIGZvbGlvcyB0aGF0IHdlcmUgZGlzc29sdmVkIGJlZm9yZSB0aGF0IGVycm9yIGFyZSBsb3N0LlxubW0vaHVnZXRsYi5jLTIwMzAtICovXG5tbS9odWdldGxiLmM6MjAzMTppbnQgZGlzc29sdmVfZnJlZV9odWdldGxiX2ZvbGlvcyh1bnNpZ25lZCBsb25nIHN0YXJ0X3BmbiwgdW5zaWduZWQgbG9uZyBlbmRfcGZuKVxubW0vaHVnZXRsYi5jLTIwMzIte1xuLS1cbm1tL2h1Z2V0bGIuYy0yMDQ3LVx0XHRmb2xpbyA9IHBmbl9mb2xpbyhwZm4pO1xubW0vaHVnZXRsYi5jOjIwNDg6XHRcdHJjID0gZGlzc29sdmVfZnJlZV9odWdldGxiX2ZvbGlvKGZvbGlvKTtcbm1tL2h1Z2V0bGIuYy0yMDQ5LVx0XHRpZiAocmMpXG4tLVxubW0vbWVtb3J5LWZhaWx1cmUuYz0xNzQ9c3RhdGljIERFRklORV9NVVRFWChwZm5fc3BhY2VfbG9jayk7XG4tLVxubW0vbWVtb3J5LWZhaWx1cmUuYy0xNzgtICogZGlmZmVyZW5jZSB0byBzb2Z0X29mZmxpbmUoKSBpcyB0aGF0LCBubyBIV1BvaXNvbiBzdWJwYWdlIHdpbGwgbWFrZVxubW0vbWVtb3J5LWZhaWx1cmUuYzoxNzk6ICogaW50byBidWRkeSBhbGxvY2F0b3IgYWZ0ZXIgYSBzdWNjZXNzZnVsIGRpc3NvbHZlX2ZyZWVfaHVnZXRsYl9mb2xpbygpLFxubW0vbWVtb3J5LWZhaWx1cmUuYy0xODAtICogc28gdGFrZV9wYWdlX29mZl9idWRkeSgpIGlzIHVubmVjZXNzYXJ5LlxuLS1cbm1tL21lbW9yeS1mYWlsdXJlLmM9MTgyPXN0YXRpYyBpbnQgX19odWdlcGFnZV9oYW5kbGVfcG9pc29uKHN0cnVjdCBwYWdlICpwYWdlKVxuLS1cbm1tL21lbW9yeS1mYWlsdXJlLmMtMTg2LVx0Lypcbm1tL21lbW9yeS1mYWlsdXJlLmM6MTg3Olx0ICogQ2FuJiMzOTt0IHVzZSBkaXNzb2x2ZV9mcmVlX2h1Z2V0bGJfZm9saW8oKSB3aXRob3V0IGEgcmVsaWFibGVcbm1tL21lbW9yeS1mYWlsdXJlLmMtMTg4LVx0ICogcmF3X2h3cF9saXN0IHRlbGxpbmcgd2hpY2ggc3VicGFnZSBpcyBIV1BvaXNvbi4gU28gZG8gbm90IGZyZWVcbi0tXG5tbS9tZW1vcnktZmFpbHVyZS5jLTE5NS1cbm1tL21lbW9yeS1mYWlsdXJlLmM6MTk2Olx0cmV0dXJuIGRpc3NvbHZlX2ZyZWVfaHVnZXRsYl9mb2xpbyhmb2xpbyk7XG5tbS9tZW1vcnktZmFpbHVyZS5jLTE5Ny19XG4tLVxubW0vbWVtb3J5LWZhaWx1cmUuYz0yMDY9c3RhdGljIGludCBfX3BhZ2VfaGFuZGxlX3BvaXNvbihzdHJ1Y3QgcGFnZSAqcGFnZSlcbi0tXG5tbS9tZW1vcnktZmFpbHVyZS5jLTIxMC1cdHpvbmVfcGNwX2Rpc2FibGUocGFnZV96b25lKHBhZ2UpKTtcbm1tL21lbW9yeS1mYWlsdXJlLmM6MjExOlx0cmV0ID0gZGlzc29sdmVfZnJlZV9odWdldGxiX2ZvbGlvKHBhZ2VfZm9saW8ocGFnZSkpO1xubW0vbWVtb3J5LWZhaWx1cmUuYy0yMTItXHRpZiAoIXJldClcbi0tXG5tbS9tZW1vcnktZmFpbHVyZS5jPTIxOT1zdGF0aWMgYm9vbCBwYWdlX2hhbmRsZV9wb2lzb24oc3RydWN0IHBhZ2UgKnBhZ2UsIGJvb2wgaHVnZXBhZ2Vfb3JfZnJlZXBhZ2UsIGJvb2wgcmVsZWFzZSlcbi0tXG5tbS9tZW1vcnktZmFpbHVyZS5jLTIyMy1cdFx0ICogRG9pbmcgdGhpcyBjaGVjayBmb3IgZnJlZSBwYWdlcyBpcyBhbHNvIGZpbmUgc2luY2Vcbm1tL21lbW9yeS1mYWlsdXJlLmM6MjI0Olx0XHQgKiBkaXNzb2x2ZV9mcmVlX2h1Z2V0bGJfZm9saW8oKSByZXR1cm5zIDAgZm9yIG5vbi1odWdldGxiIGZvbGlvcyBhcyB3ZWxsLlxubW0vbWVtb3J5LWZhaWx1cmUuYy0yMjUtXHRcdCAqL1xuLS1cbm1tL21lbW9yeV9ob3RwbHVnLmM9MTkwMz1pbnQgb2ZmbGluZV9wYWdlcyh1bnNpZ25lZCBsb25nIHN0YXJ0X3BmbiwgdW5zaWduZWQgbG9uZyBucl9wYWdlcyxcbi0tXG5tbS9tZW1vcnlfaG90cGx1Zy5jLTIwMzQtXHRcdCAqL1xubW0vbWVtb3J5X2hvdHBsdWcuYzoyMDM1Olx0XHRyZXQgPSBkaXNzb2x2ZV9mcmVlX2h1Z2V0bGJfZm9saW9zKHN0YXJ0X3BmbiwgZW5kX3Bmbik7XG5tbS9tZW1vcnlfaG90cGx1Zy5jLTIwMzYtXHRcdGlmIChyZXQpIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNSAxODoyMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTQ5OAoJCQkJCQkJb3V0cHV0OiAxOQoJCQkJCQkJdGhvdWdodHM6IDExNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEltcGFjdCBvZiB0aGUgTWVtb3J5IE1hbmFnZW1lbnQgUGF0Y2gqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyBkZWZpbml0ZWx5IGZ1bmN0aW9uYWwg4oCTIGl0JiMzOTtzIG5vdCBqdXN0IGEgcmVmYWN0b3IuIEl0JiMzOTtzIHRvdWNoaW5nIHNvbWUgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBiaXRzLiBJdCBzZWVtcyB0byBiZSBjaGFuZ2luZyB0aGUgYmVoYXZpb3Igb2YgdGhlIG1lbW9yeSBmYWlsdXJlIGhhbmRsaW5nLCBwYXJ0aWN1bGFybHkgYXJvdW5kIGhvdyB3ZSBkZWFsIHdpdGggaHVnZSBwYWdlcy4gSXQmIzM5O3MgYWxzbyBtYWtpbmcgYWRqdXN0bWVudHMgdG8gdGhlIGJ1ZGR5IGFsbG9jYXRvciBhbmQgaG93IGl0IHByZXBzIHBhZ2VzIGZvciBmcmVlaW5nLCBzcGVjaWZpY2FsbHkgd2hlbiBoYXJkd2FyZS1wb2lzb25lZCBzdWJwYWdlcyBhcmUgaW52b2x2ZWQuIFRoYXQmIzM5O3MgYSBjcml0aWNhbCBhcmVhLCB3ZSBuZWVkIHRvIGJlIHZlcnkgY2FyZWZ1bCB0aGF0IHRoaXMgZG9lc24mIzM5O3QgaW50cm9kdWNlIGFueSByZWdyZXNzaW9ucy4KClRoZSBidWlsZCBkZXBlbmRlbmNpZXMgbG9vayBwcmV0dHkgY2xlYXIuIEl0JiMzOTtzIGV4cGVjdGluZyBgTUVNT1JZX0ZBSUxVUkVgIGVuYWJsZWQsIHdoaWNoIGlzIHN0YW5kYXJkIHdoZW4gd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCB0aGlzIGxldmVsIG9mIGhhcmR3YXJlLXJlbGF0ZWQgaXNzdWVzLiBUaGUgcHJlc2VuY2Ugb2YgYEhVR0VUTEJfUEFHRWAgaXMgYWxzbyBleHBlY3RlZCwgc2luY2Ugd2UmIzM5O3JlIGNsZWFybHkgZGVhbGluZyB3aXRoIGh1Z2UgcGFnZXMsIGFuZCB0aGF0IHdpbGwgbmVlZCB0byBiZSB3ZWxsLWRlZmluZWQuIFRoZW4sIHRoZXJlIGlzIHRoZSBwb3RlbnRpYWxseSBjb25kaXRpb25hbCBkZXBlbmRlbmN5IG9uIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAsIHdoaWNoIHNlZW1zIGxpa2VseSwgZ2l2ZW4gdGhlIGAjaWZgIHN0YXRlbWVudC4gT2YgY291cnNlLCB0aGUgbG9naWMgaXMgaGFuZGxpbmcgdGhlIE9SIGNhc2Ugb2YgZWl0aGVyIG9mIHRob3NlLgoKSSYjMzk7bSBnb2luZyB0byBqdW1wIGludG8gYG1tL21lbW9yeS1mYWlsdXJlLmNgIGFuZCB0YWtlIGEgbG9vayBhdCB0aGUgS2NvbmZpZyBmaWxlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZXhhY3QgZGVwZW5kZW5jaWVzIGFuZCBhbnkgcG90ZW50aWFsIGNvbmZpZ3VyYXRpb24gY29uZmxpY3RzIGJlZm9yZSBJIHN0YXJ0IGxvb2tpbmcgYXQgdGhlIGNvZGUgaXRzZWxmLiBUaGUgS2NvbmZpZyB3aWxsIHRlbGwgdGhlIHN0b3J5IG9mIHRoZSBhcmNoaXRlY3R1cmUmIzM5O3MgY29uZmlndXJhdGlvbiBuZWVkcywgYW5kIGdpdmUgY2x1ZXMgYWJvdXQgdGhlIG92ZXJhbGwgaW1wYWN0IG9mIHRoZSBwYXRjaC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDUgMTg6MjE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE1FTU9SWV9GQUlMVVJFJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL0tjb25maWc9Nzc0PWNvbmZpZyBBUkNIX1NVUFBPUlRTX01FTU9SWV9GQUlMVVJFXG4tLVxubW0vS2NvbmZpZy03NzYtXG5tbS9LY29uZmlnOjc3Nzpjb25maWcgTUVNT1JZX0ZBSUxVUkVcbm1tL0tjb25maWctNzc4LVx0ZGVwZW5kcyBvbiBNTVVcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDUgMTg6MjE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTIwMDkKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiAxNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzOgoKKipEaXZpbmcgaW50byBgSFVHRVRMQl9QQUdFYCoqCgpPa2F5LCB0aW1lIHRvIGRpZyBpbnRvIHRoZSBgSFVHRVRMQl9QQUdFYCBLY29uZmlnIG9wdGlvbi4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgdW5kZXJzdGFuZGluZyBvZiBob3cgdGhpcyBpcyBjb25maWd1cmVkIGFuZCBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIHJlc3Qgb2YgdGhlIHN5c3RlbS4gSSBzaG91bGQgcHJvYmFibHkgc3RhcnQgYnkgcXVpY2tseSB2ZXJpZnlpbmcgaXRzIGRlcGVuZGVuY2llcyBhbmQgd2hhdCBhcmNoaXRlY3R1cmVzIGFyZSBzdXBwb3J0ZWQuIEEgcXVpY2sgZ2xhbmNlIGF0IHRoZSByZWxldmFudCBkb2N1bWVudGF0aW9uIHdvdWxkIGJlIGEgZ29vZCBpZGVhIHRvIGNvbmZpcm0gSSYjMzk7bSBvbiB0aGUgcmlnaHQgdHJhY2sgYmVmb3JlIGdvaW5nIGFueSBmdXJ0aGVyLiBUaGlzIGlzIGEgY3JpdGljYWwgYnVpbGRpbmcgYmxvY2sgZm9yIGxhcmdlIG1lbW9yeSBwYWdlcywgc28gdW5kZXJzdGFuZGluZyB0aGUgc3BlY2lmaWNzIGlzIGltcG9ydGFudCBmb3IgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIHBlcmZvcm1hbmNlIHR1bmluZy4gSSBhbHNvIHNob3VsZCBjb25zaWRlciB0aGUgaW1wbGljYXRpb25zIG9mIGVuYWJsaW5nIG9yIGRpc2FibGluZyB0aGlzIGZlYXR1cmUgaW4gcmVsYXRpb24gdG8gb3RoZXIgc2V0dGluZ3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA1IDE4OjIxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBIVUdFVExCX1BBR0UmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9zaC9tbS9LY29uZmlnPTE1OD1jaG9pY2Vcbi0tXG5hcmNoL3NoL21tL0tjb25maWctMTYzLVxuYXJjaC9zaC9tbS9LY29uZmlnOjE2NDpjb25maWcgSFVHRVRMQl9QQUdFX1NJWkVfNjRLXG5hcmNoL3NoL21tL0tjb25maWctMTY1LVx0Ym9vbCBcJiMzNDs2NGtCXCYjMzQ7XG4tLVxuYXJjaC9zaC9tbS9LY29uZmlnLTE2Ny1cbmFyY2gvc2gvbW0vS2NvbmZpZzoxNjg6Y29uZmlnIEhVR0VUTEJfUEFHRV9TSVpFXzI1NktcbmFyY2gvc2gvbW0vS2NvbmZpZy0xNjktXHRib29sIFwmIzM0OzI1NmtCXCYjMzQ7XG4tLVxuYXJjaC9zaC9tbS9LY29uZmlnLTE3MS1cbmFyY2gvc2gvbW0vS2NvbmZpZzoxNzI6Y29uZmlnIEhVR0VUTEJfUEFHRV9TSVpFXzFNQlxuYXJjaC9zaC9tbS9LY29uZmlnLTE3My1cdGJvb2wgXCYjMzQ7MU1CXCYjMzQ7XG5hcmNoL3NoL21tL0tjb25maWctMTc0LVxuYXJjaC9zaC9tbS9LY29uZmlnOjE3NTpjb25maWcgSFVHRVRMQl9QQUdFX1NJWkVfNE1CXG5hcmNoL3NoL21tL0tjb25maWctMTc2LVx0Ym9vbCBcJiMzNDs0TUJcJiMzNDtcbi0tXG5hcmNoL3NoL21tL0tjb25maWctMTc4LVxuYXJjaC9zaC9tbS9LY29uZmlnOjE3OTpjb25maWcgSFVHRVRMQl9QQUdFX1NJWkVfNjRNQlxuYXJjaC9zaC9tbS9LY29uZmlnLTE4MC1cdGJvb2wgXCYjMzQ7NjRNQlwmIzM0O1xuLS1cbmZzL0tjb25maWc9MjYyPWlmIEhVR0VUTEJGU1xuZnMvS2NvbmZpZzoyNjM6Y29uZmlnIEhVR0VUTEJfUEFHRV9PUFRJTUlaRV9WTUVNTUFQX0RFRkFVTFRfT05cbmZzL0tjb25maWctMjY0LVx0Ym9vbCBcJiMzNDtIdWdlVExCIFZtZW1tYXAgT3B0aW1pemF0aW9uIChIVk8pIGRlZmF1bHRzIHRvIG9uXCYjMzQ7XG4tLVxuZnMvS2NvbmZpZz0yNzE9ZW5kaWYgIyBIVUdFVExCRlNcbmZzL0tjb25maWctMjcyLVxuZnMvS2NvbmZpZzoyNzM6Y29uZmlnIEhVR0VUTEJfUEFHRVxuZnMvS2NvbmZpZy0yNzQtXHRkZWZfYm9vbCBIVUdFVExCRlNcbi0tXG5mcy9LY29uZmlnLTI3Ni1cbmZzL0tjb25maWc6Mjc3OmNvbmZpZyBIVUdFVExCX1BBR0VfT1BUSU1JWkVfVk1FTU1BUFxuZnMvS2NvbmZpZy0yNzgtXHRkZWZfYm9vbCBIVUdFVExCX1BBR0Vcbi0tXG5tbS9LY29uZmlnPTcwNj1jb25maWcgQVJDSF9TVVBQT1JUU19QTURfU09GVExFQUZcbi0tXG5tbS9LY29uZmlnLTcwOC1cbm1tL0tjb25maWc6NzA5OmNvbmZpZyBIVUdFVExCX1BBR0VfU0laRV9WQVJJQUJMRVxubW0vS2NvbmZpZy03MTAtXHRkZWZfYm9vbCBuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA1IDE4OjIxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyNzg4CgkJCQkJCQlvdXRwdXQ6IDE5CgkJCQkJCQl0aG91Z2h0czogMjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgSSBzZWUgaXQ6CgoqKkRpZ2dpbmcgaW50byBIdWdlIFBhZ2VzKioKCk9rYXksIHNvIGBIVUdFVExCX1BBR0VgIGlzIHRoZSBmZWF0dXJlIHdlJiMzOTtyZSBpbnRlcmVzdGVkIGluLCBhbmQgSSBrbm93IGl0IHJlbGllcyBvbiBgSFVHRVRMQkZTYC4gUmlnaHQuIE1ha2VzIHNlbnNlLiBUbyByZWFsbHkgdW5kZXJzdGFuZCB0aGUgd2hvbGUgcGljdHVyZSwgSSBuZWVkIHRvIHZlcmlmeSB0aGF0IGRlcGVuZGVuY3kgYW5kIHRoZW4sIG5hdHVyYWxseSwgZGl2ZSBpbnRvIGBIVUdFVExCRlNgIGl0c2VsZi4gVGltZSB0byBzdGFydCB0aGVyZS4gTGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIHdoYXQgd2l0aCB0aGUgdW5kZXJseWluZyBmaWxlIHN5c3RlbS4gTmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIGlzIGFsbCB0aWVkIHRvZ2V0aGVyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNSAxODoyMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgSFVHRVRMQkZTJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL0tjb25maWc9MjQ3PWNvbmZpZyBBUkNIX1NVUFBPUlRTX0hVR0VUTEJGU1xuLS1cbmZzL0tjb25maWctMjQ5LVxuZnMvS2NvbmZpZzoyNTA6bWVudWNvbmZpZyBIVUdFVExCRlNcbmZzL0tjb25maWctMjUxLVx0Ym9vbCBcJiMzNDtIdWdlVExCIGZpbGUgc3lzdGVtIHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDUgMTg6MjI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTMwMjcKCQkJCQkJCW91dHB1dDogMjIKCQkJCQkJCXRob3VnaHRzOiAzNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIGNvbmZpZyBvcHRpb25zLCB0aGlua2luZyBhYm91dCB0aGVtIGFzIEkgd291bGQgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRoZW06CgoqKk5hdmlnYXRpbmcgdGhlIE5VTUEgTGFuZHNjYXBlOiBDb25maWd1cmluZyBIdWdlIFBhZ2VzIGFuZCBNZW1vcnkgTWFuYWdlbWVudCoqCgpBbHJpZ2h0LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgaG93IG1lbW9yeSBpcyBtYW5hZ2VkLCBhbmQgc3BlY2lmaWNhbGx5IGhvdyB3ZSBjYW4gYmVzdCBsZXZlcmFnZSBodWdlIHBhZ2VzLiBJdCBsb29rcyBsaWtlIHRoZSBrZXkgc3RhcnRpbmcgcG9pbnRzIGFyZSBnb2luZyB0byBiZSBgSFVHRVRMQkZTYCB0byBhY3R1YWxseSBlbmFibGUgdGhlIGh1Z2UgcGFnZSBmaWxlIHN5c3RlbSwgYW5kIHRoZW4gYWxzbyBgTUVNT1JZX0ZBSUxVUkVgIC0gbGlrZWx5IHRvIGhhbmRsZSBjYXNlcyB3aGVyZSBhbGxvY2F0aW9uIGZhaWxzLCB3aGljaCBpcyBpbXBvcnRhbnQgZm9yIGFueSByb2J1c3Qgc3lzdGVtLgoKQnV0IGJlZm9yZSBkaXZpbmcgdG9vIGRlZXAsIEkgbmVlZCB0byBjaGVjayBzb21ldGhpbmcgY3JpdGljYWwgdG8gbW9kZXJuIHBlcmZvcm1hbmNlOiBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGV0aGVyIHdlIGNhbiByZWx5IG9uIHRoZSBzeXN0ZW0gYXV0b21hdGljYWxseSBtYW5hZ2luZyB0aGUgY3JlYXRpb24gYW5kIHVzZSBvZiBodWdlIHBhZ2VzLCBvciBpZiB3ZSBuZWVkIHRvIGJlIG1vcmUgaGFuZHMtb24gd2l0aCB0aGUgY29uZmlndXJhdGlvbiB0byBhY2hpZXZlIG9wdGltYWwgcmVzdWx0cy4gSXQmIzM5O3MgYSB0cmFkZS1vZmYgYmV0d2VlbiBjb252ZW5pZW5jZSBhbmQgY29udHJvbCwgYW5kIGZpZ3VyaW5nIG91dCB3aGF0IHRoZSBpZGVhbCBiYWxhbmNlIGlzIGluICp0aGlzKiBzcGVjaWZpYyBjb250ZXh0IGlzIHRoZSBuZXh0IHN0ZXAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA1IDE4OjIyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9LY29uZmlnPTg0Mz1jb25maWcgTU1fSURcbi0tXG5tbS9LY29uZmlnLTg0NS1cbm1tL0tjb25maWc6ODQ2Om1lbnVjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0Vcbm1tL0tjb25maWctODQ3LVx0Ym9vbCBcJiMzNDtUcmFuc3BhcmVudCBIdWdlcGFnZSBTdXBwb3J0XCYjMzQ7XG4tLVxubW0vS2NvbmZpZz04NjQ9Y2hvaWNlXG4tLVxubW0vS2NvbmZpZy04NjktXG5tbS9LY29uZmlnOjg3MDpcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9BTFdBWVNcbm1tL0tjb25maWctODcxLVx0XHRib29sIFwmIzM0O2Fsd2F5c1wmIzM0O1xuLS1cbm1tL0tjb25maWctODc2LVxubW0vS2NvbmZpZzo4Nzc6XHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfTUFEVklTRVxubW0vS2NvbmZpZy04NzgtXHRcdGJvb2wgXCYjMzQ7bWFkdmlzZVwmIzM0O1xuLS1cbm1tL0tjb25maWctODg1LVxubW0vS2NvbmZpZzo4ODY6XHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfTkVWRVJcbm1tL0tjb25maWctODg3LVx0XHRib29sIFwmIzM0O25ldmVyXCYjMzQ7XG4tLVxubW0vS2NvbmZpZz04OTM9Y2hvaWNlXG4tLVxubW0vS2NvbmZpZy05MDItXG5tbS9LY29uZmlnOjkwMzpcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9TSE1FTV9IVUdFX05FVkVSXG5tbS9LY29uZmlnLTkwNC1cdFx0Ym9vbCBcJiMzNDtuZXZlclwmIzM0O1xuLS1cbm1tL0tjb25maWctOTEyLVxubW0vS2NvbmZpZzo5MTM6XHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfU0hNRU1fSFVHRV9BTFdBWVNcbm1tL0tjb25maWctOTE0LVx0XHRib29sIFwmIzM0O2Fsd2F5c1wmIzM0O1xuLS1cbm1tL0tjb25maWctOTIwLVxubW0vS2NvbmZpZzo5MjE6XHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfU0hNRU1fSFVHRV9XSVRISU5fU0laRVxubW0vS2NvbmZpZy05MjItXHRcdGJvb2wgXCYjMzQ7d2l0aGluX3NpemVcJiMzNDtcbi0tXG5tbS9LY29uZmlnLTkyOC1cbm1tL0tjb25maWc6OTI5Olx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX1NITUVNX0hVR0VfQURWSVNFXG5tbS9LY29uZmlnLTkzMC1cdFx0Ym9vbCBcJiMzNDthZHZpc2VcJiMzNDtcbi0tXG5tbS9LY29uZmlnPTkzOD1jaG9pY2Vcbi0tXG5tbS9LY29uZmlnLTk0Ny1cbm1tL0tjb25maWc6OTQ4Olx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX1RNUEZTX0hVR0VfTkVWRVJcbm1tL0tjb25maWctOTQ5LVx0XHRib29sIFwmIzM0O25ldmVyXCYjMzQ7XG4tLVxubW0vS2NvbmZpZy05NTYtXG5tbS9LY29uZmlnOjk1NzpcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9UTVBGU19IVUdFX0FMV0FZU1xubW0vS2NvbmZpZy05NTgtXHRcdGJvb2wgXCYjMzQ7YWx3YXlzXCYjMzQ7XG4tLVxubW0vS2NvbmZpZy05NjQtXG5tbS9LY29uZmlnOjk2NTpcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9UTVBGU19IVUdFX1dJVEhJTl9TSVpFXG5tbS9LY29uZmlnLTk2Ni1cdFx0Ym9vbCBcJiMzNDt3aXRoaW5fc2l6ZVwmIzM0O1xuLS1cbm1tL0tjb25maWctOTcyLVxubW0vS2NvbmZpZzo5NzM6XHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfVE1QRlNfSFVHRV9BRFZJU0Vcbm1tL0tjb25maWctOTc0LVx0XHRib29sIFwmIzM0O2FkdmlzZVwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNSAxODoyMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDAxMAoJCQkJCQkJb3V0cHV0OiAxNDMKCQkJCQkJCXRob3VnaHRzOiAzNzYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIE1lbW9yeSBGYWlsdXJlIEhhbmRsaW5nIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHJlbGF0ZWQgdG8gbWVtb3J5IGZhaWx1cmUgaGFuZGxpbmcsIHNwZWNpZmljYWxseSBmb3IgSHVnZVRMQiBwYWdlcy4gVGhlIGNvbmZpZ3VyYXRpb25zIGludm9sdmVkIGFyZSBgTUVNT1JZX0ZBSUxVUkVgLCBgSFVHRVRMQkZTYCwgYW5kIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb3JlIGNoYW5nZXMgaGVyZS4KCk15IGZvY3VzIHNob3VsZCBiZSBvbiBob3cgdGhlIHN5c3RlbSBpcyBkZWFsaW5nIHdpdGggaGFyZHdhcmUtcG9pc29uZWQgc3VicGFnZXMgd2l0aGluIGNvbXBvdW5kIHBhZ2VzLiBJIHNlZSB0d28ga2V5IHN5bWJvbHMganVtcGluZyBvdXQgYXQgbWU6IGBfX2h1Z2VwYWdlX2hhbmRsZV9wb2lzb25gIGFuZCBgZnJlZV9oYXNfaHdwb2lzb25lZGAuIFRoZXNlIHNlZW0gdG8gYmUgdGllZCBkaXJlY3RseSB0byB0aGUgZXJyb3IgcGF0aHMsIHdoaWNoIGlzIGV4YWN0bHkgd2hlcmUgbXkgYXR0ZW50aW9uIHNob3VsZCBiZS4KCkkgYWxzbyBzZWUgdGhhdCBgZnJlZV9wYWdlc19zYW5pdGl6ZWAgaGFzIGJlZW4gYWRkZWQuIEhvd2V2ZXIsIHNpbmNlIGl0IGlzIGNhbGxlZCBmcm9tIGBfX2ZyZWVfcGFnZXNfcHJlcGFyZWAgYW5kIGBmcmVlX3ByZXBhcmVkX2NvbnRpZ19yYW5nZWAsIGl04oCZcyBsaWtlbHkgaW4gYSBob3QgcGF0aC4gV2hpbGUgaW1wb3J0YW50LCB0aGUgY2hhbmdlcyBoZXJlIGFyZSBwZXJoYXBzIG5vdCB0aGUgY29yZSBvZiAqdGhpcyogcGF0Y2gsIHRob3VnaCBJJiMzOTtsbCBrZWVwIHRoYXQgaW4gbWluZC4gYGZyZWVfaGFzX2h3cG9pc29uZWRgIHNlZW1zIG1vcmUgdGFyZ2V0ZWQgdG8gdGhlIHNwZWNpZmljIGVycm9yIGhhbmRsaW5nIHNjZW5hcmlvcywgYXMgZG9lcyBgX19odWdlcGFnZV9oYW5kbGVfcG9pc29uYC4KCk5vdywgSSBzaG91bGQgZXhhbWluZSBgbWVfaHVnZV9wYWdlYCwgYHRyeV9tZW1vcnlfZmFpbHVyZV9odWdldGxiYCwgYW5kIGBmb2xpb19jbGVhcl9odWdldGxiX2h3cG9pc29uYC4gVGhleSYjMzk7cmUgZXhpc3RpbmcgZnVuY3Rpb25zLCBidXQgdGhleSYjMzk7dmUgYmVlbiBtb2RpZmllZC4gVGhlIGZhY3QgdGhhdCB0aGV5IGFscmVhZHkgZXhpc3Qgc3VnZ2VzdHMgdGhpcyBpc24mIzM5O3QgZW50aXJlbHkgbmV3IGZ1bmN0aW9uYWxpdHksIGJ1dCBhbiBlbmhhbmNlbWVudCBvciByZWZpbmVtZW50LgoKSW4gZXNzZW5jZSwgdGhlIHBhdGNoIGlzIGFkZHJlc3NpbmcgaG93IHRvIHByb3Blcmx5IG1hbmFnZSBoZWFsdGh5IHZlcnN1cyBwb2lzb25lZCBzdWJwYWdlcyB3aXRoaW4gY29tcG91bmQgSHVnZVRMQiBwYWdlcyB3aGVuIG1lbW9yeSBmYWlsdXJlcyBvY2N1ci4gVGhlIGdvYWwgaXMgdG8gZW5zdXJlIHRoYXQgbm9uLXBvaXNvbmVkIHN1YnBhZ2VzIGFyZSBjb3JyZWN0bHkgZnJlZWQgYmFjayB0byB0aGUgYnVkZHkgYWxsb2NhdG9yLiBUaGlzIGFsc28gbWVhbnMgd2UgbmVlZCB0byBpc29sYXRlIHRoZSBwb2lzb25lZCBvbmVzLiBUaGlzIGlzIGEgY29yZSBNTSBhbmQgcGFnZSBhbGxvY2F0b3IgaXNzdWUsIGFuZCB0aGUgZm9jdXMgc2VlbXMgdG8gYmUgaW4gYG1tL21lbW9yeS1mYWlsdXJlLmNgIGFuZCBgbW0vcGFnZV9hbGxvYy5jYCwgYXMgSSYjMzk7ZCBleHBlY3QuCgpTbywgaW4gc3VtbWFyeSwgSSYjMzk7bSBjb25jZW50cmF0aW5nIG9uIGBfX2h1Z2VwYWdlX2hhbmRsZV9wb2lzb25gIGFuZCBgZnJlZV9oYXNfaHdwb2lzb25lZGAgYXMgdGhlIGJlc3QgcG9pbnRzIHRvIGFuYWx5emUgdGhlIHBhdGNo4oCZcyBjb3JlIGxvZ2ljLCBhcyB3ZWxsIGFzIHRoZSBjaGFuZ2VzIHRvIGBtZV9odWdlX3BhZ2VgLCBgdHJ5X21lbW9yeV9mYWlsdXJlX2h1Z2V0bGJgLCBhbmQgYGZvbGlvX2NsZWFyX2h1Z2V0bGJfaHdwb2lzb25gLiBJIG5lZWQgdG8gc2VlIGV4YWN0bHkgaG93IHRoZXNlIGZ1bmN0aW9ucyBpbnRlcmFjdCB0byBhY2hpZXZlIHRoaXMgbW9yZSBncmFudWxhciBhbmQgcm9idXN0IGhhbmRsaW5nIG9mIGhhcmR3YXJlLXBvaXNvbmVkIHBhZ2VzLgpMZXQmIzM5O3MgY2FsbCBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNSAxODoyMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TUVNT1JZX0ZBSUxVUkUmIzM0OywKICAgICYjMzQ7SFVHRVRMQkZTJiMzNDssCiAgICAmIzM0O1RSQU5TUEFSRU5UX0hVR0VQQUdFJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7X19odWdlcGFnZV9oYW5kbGVfcG9pc29uJiMzNDssCiAgICAmIzM0O2ZyZWVfaGFzX2h3cG9pc29uZWQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgbWVtb3J5IGZhaWx1cmUgaGFuZGxpbmcgZm9yIEh1Z2VUTEIgcGFnZXMsIGVuc3VyaW5nIHRoYXQgaGVhbHRoeSBzdWJwYWdlcyBvZiBhIGNvbXBvdW5kIHBhZ2Ugd2l0aCBoYXJkd2FyZSBwb2lzb25lZCBzdWJwYWdlcyBhcmUgY29ycmVjdGx5IGZyZWVkIHRvIHRoZSBidWRkeSBhbGxvY2F0b3IsIHdoaWxlIGlzb2xhdGluZyB0aGUgcG9pc29uZWQgb25lcy4gVGhpcyBpbnZvbHZlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gY29yZSBNTSBhbmQgcGFnZSBhbGxvY2F0b3IgbG9naWMsIHNwZWNpZmljYWxseSBpbiBtbS9tZW1vcnktZmFpbHVyZS5jIGFuZCBtbS9wYWdlX2FsbG9jLmMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01FTU9SWV9GQUlMVVJFJiMzNDssCiAgICAmIzM0O0hVR0VUTEJGUyYjMzQ7LAogICAgJiMzNDtUUkFOU1BBUkVOVF9IVUdFUEFHRSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O19faHVnZXBhZ2VfaGFuZGxlX3BvaXNvbiYjMzQ7LAogICAgJiMzNDtmcmVlX2hhc19od3BvaXNvbmVkJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIG1lbW9yeSBmYWlsdXJlIGhhbmRsaW5nIGZvciBIdWdlVExCIHBhZ2VzLCBlbnN1cmluZyB0aGF0IGhlYWx0aHkgc3VicGFnZXMgb2YgYSBjb21wb3VuZCBwYWdlIHdpdGggaGFyZHdhcmUgcG9pc29uZWQgc3VicGFnZXMgYXJlIGNvcnJlY3RseSBmcmVlZCB0byB0aGUgYnVkZHkgYWxsb2NhdG9yLCB3aGlsZSBpc29sYXRpbmcgdGhlIHBvaXNvbmVkIG9uZXMuIFRoaXMgaW52b2x2ZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIGNvcmUgTU0gYW5kIHBhZ2UgYWxsb2NhdG9yIGxvZ2ljLCBzcGVjaWZpY2FsbHkgaW4gbW0vbWVtb3J5LWZhaWx1cmUuYyBhbmQgbW0vcGFnZV9hbGxvYy5jLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDctMDVUMTg6MjE6MjQuNDMwNzkyOTEzWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTI2NDI2MDkxNDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTUVNT1JZX0ZBSUxVUkVcIixcbiAgICBcIkhVR0VUTEJGU1wiLFxuICAgIFwiVFJBTlNQQVJFTlRfSFVHRVBBR0VcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJfX2h1Z2VwYWdlX2hhbmRsZV9wb2lzb25cIixcbiAgICBcImZyZWVfaGFzX2h3cG9pc29uZWRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBtZW1vcnkgZmFpbHVyZSBoYW5kbGluZyBmb3IgSHVnZVRMQiBwYWdlcywgZW5zdXJpbmcgdGhhdCBoZWFsdGh5IHN1YnBhZ2VzIG9mIGEgY29tcG91bmQgcGFnZSB3aXRoIGhhcmR3YXJlIHBvaXNvbmVkIHN1YnBhZ2VzIGFyZSBjb3JyZWN0bHkgZnJlZWQgdG8gdGhlIGJ1ZGR5IGFsbG9jYXRvciwgd2hpbGUgaXNvbGF0aW5nIHRoZSBwb2lzb25lZCBvbmVzLiBUaGlzIGludm9sdmVzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byBjb3JlIE1NIGFuZCBwYWdlIGFsbG9jYXRvciBsb2dpYywgc3BlY2lmaWNhbGx5IGluIG1tL21lbW9yeS1mYWlsdXJlLmMgYW5kIG1tL3BhZ2VfYWxsb2MuYy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDVUMTg6MjE6MjQuNDMwODAxMDY0WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODcxMzQ0OTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA5Nzc1NDVjOTg5NTY5MTNlMDI2ZDM0ZjUyNTI5OWFiOTc5MDZjY2ZiXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBTdW4gSnVsIDUgMTg6MjE6MjMgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmggYi9pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaFxcbmluZGV4IDdhODYzNTcyYWRjZTc5Li4zY2Q1MjRlMDRhMzBiYiAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaFxcbisrKyBiL2luY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oXFxuQEAgLTg3OSw3ICs4NzksNyBAQCBGT0xJT19GTEFHX0ZBTFNFKHBhcnRpYWxseV9tYXBwZWQpXFxuIFxcbiAjZGVmaW5lIFBHX2hlYWRfbWFzayAoKDFVTCBcXHUwMDNjXFx1MDAzYyBQR19oZWFkKSlcXG4gXFxuLSNpZiBkZWZpbmVkKENPTkZJR19NRU1PUllfRkFJTFVSRSkgXFx1MDAyNlxcdTAwMjYgZGVmaW5lZChDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UpXFxuKyNpZiBkZWZpbmVkKENPTkZJR19NRU1PUllfRkFJTFVSRSkgXFx1MDAyNlxcdTAwMjYgKGRlZmluZWQoQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFKSB8fCBkZWZpbmVkKENPTkZJR19IVUdFVExCX1BBR0UpKVxcbiAvKlxcbiAgKiBQYWdlSGFzSFdQb2lzb25lZCBpbmRpY2F0ZXMgdGhhdCBhdCBsZWFzdCBvbmUgc3VicGFnZSBpcyBod3BvaXNvbmVkIGluIHRoZVxcbiAgKiBjb21wb3VuZCBwYWdlLlxcbmRpZmYgLS1naXQgYS9tbS9tZW1vcnktZmFpbHVyZS5jIGIvbW0vbWVtb3J5LWZhaWx1cmUuY1xcbmluZGV4IDQ5MTZhYjE0NTMyNTczLi5hMzdiNjc1NTA3MTgyNyAxMDA2NDRcXG4tLS0gYS9tbS9tZW1vcnktZmFpbHVyZS5jXFxuKysrIGIvbW0vbWVtb3J5LWZhaWx1cmUuY1xcbkBAIC0xNzQsNiArMTc0LDMwIEBAIHN0YXRpYyBzdHJ1Y3QgcmJfcm9vdF9jYWNoZWQgcGZuX3NwYWNlX2l0cmVlID0gUkJfUk9PVF9DQUNIRUQ7XFxuIHN0YXRpYyBERUZJTkVfTVVURVgocGZuX3NwYWNlX2xvY2spO1xcbiBcXG4gLypcXG4rICogT25seSBmb3IgYSBIdWdlVExCIHBhZ2UgYmVpbmcgaGFuZGxlZCBieSBtZW1vcnlfZmFpbHVyZSgpLiBUaGUga2V5XFxuKyAqIGRpZmZlcmVuY2UgdG8gc29mdF9vZmZsaW5lKCkgaXMgdGhhdCwgbm8gSFdQb2lzb24gc3VicGFnZSB3aWxsIG1ha2VcXG4rICogaW50byBidWRkeSBhbGxvY2F0b3IgYWZ0ZXIgYSBzdWNjZXNzZnVsIGRpc3NvbHZlX2ZyZWVfaHVnZXRsYl9mb2xpbygpLFxcbisgKiBzbyB0YWtlX3BhZ2Vfb2ZmX2J1ZGR5KCkgaXMgdW5uZWNlc3NhcnkuXFxuKyAqL1xcbitzdGF0aWMgaW50IF9faHVnZXBhZ2VfaGFuZGxlX3BvaXNvbihzdHJ1Y3QgcGFnZSAqcGFnZSlcXG4re1xcbitcXHRzdHJ1Y3QgZm9saW8gKmZvbGlvID0gcGFnZV9mb2xpbyhwYWdlKTtcXG4rXFxuK1xcdC8qXFxuK1xcdCAqIENhbid0IHVzZSBkaXNzb2x2ZV9mcmVlX2h1Z2V0bGJfZm9saW8oKSB3aXRob3V0IGEgcmVsaWFibGVcXG4rXFx0ICogcmF3X2h3cF9saXN0IHRlbGxpbmcgd2hpY2ggc3VicGFnZSBpcyBIV1BvaXNvbi4gU28gZG8gbm90IGZyZWVcXG4rXFx0ICogdGhlbSB0byB0aGUgYnVkZHkgYWxsb2NhdG9yLiBkZXF1ZXVlX2h1Z2V0bGJfZm9saW9fbm9kZV9leGFjdCgpXFxuK1xcdCAqIHdpbGwgZW5zdXJlIHRvIG5ldmVyIHJlLWFsbG9jYXRlIHRoaXMgaHVnZXBhZ2UuXFxuK1xcdCAqL1xcbitcXHRpZiAoZm9saW9fdGVzdF9odWdldGxiX3Jhd19od3BfdW5yZWxpYWJsZShmb2xpbykpXFxuK1xcdFxcdC8qIHJhd19od3BfbGlzdCBiZWNvbWVzIHVucmVsaWFibGUgd2hlbiBrbWFsbG9jKCkgZmFpbHMuICovXFxuK1xcdFxcdHJldHVybiAtRU5PTUVNO1xcbitcXG4rXFx0cmV0dXJuIGRpc3NvbHZlX2ZyZWVfaHVnZXRsYl9mb2xpbyhmb2xpbyk7XFxuK31cXG4rXFxuKy8qXFxuKyAqIE9ubHkgZm9yIGEgZnJlZSBvciBIdWdlVExCIHBhZ2UgYmVpbmcgaGFuZGxlZCBieSBzb2Z0X29mZmxpbmUoKS5cXG4gICogUmV0dXJuIHZhbHVlczpcXG4gICogICAxOiAgIHRoZSBwYWdlIGlzIGRpc3NvbHZlZCAoaWYgbmVlZGVkKSBhbmQgdGFrZW4gb2ZmIGZyb20gYnVkZHksXFxuICAqICAgMDogICB0aGUgcGFnZSBpcyBkaXNzb2x2ZWQgKGlmIG5lZWRlZCkgYW5kIG5vdCB0YWtlbiBvZmYgZnJvbSBidWRkeSxcXG5AQCAtMTE2NiwxMSArMTE5MCwxMSBAQCBzdGF0aWMgaW50IG1lX2h1Z2VfcGFnZShzdHJ1Y3QgcGFnZV9zdGF0ZSAqcHMsIHN0cnVjdCBwYWdlICpwKVxcbiBcXHRcXHQgKiBzdWJwYWdlcy5cXG4gXFx0XFx0ICovXFxuIFxcdFxcdGZvbGlvX3B1dChmb2xpbyk7XFxuLVxcdFxcdGlmIChfX3BhZ2VfaGFuZGxlX3BvaXNvbihwKSBcXHUwMDNlIDApIHtcXG4rXFx0XFx0aWYgKF9faHVnZXBhZ2VfaGFuZGxlX3BvaXNvbihwKSkge1xcbitcXHRcXHRcXHRyZXMgPSBNRl9GQUlMRUQ7XFxuK1xcdFxcdH0gZWxzZSB7XFxuIFxcdFxcdFxcdHBhZ2VfcmVmX2luYyhwKTtcXG4gXFx0XFx0XFx0cmVzID0gTUZfUkVDT1ZFUkVEO1xcbi1cXHRcXHR9IGVsc2Uge1xcbi1cXHRcXHRcXHRyZXMgPSBNRl9GQUlMRUQ7XFxuIFxcdFxcdH1cXG4gXFx0fVxcbiBcXG5AQCAtMjAwOCw2ICsyMDMyLDcgQEAgdm9pZCBmb2xpb19jbGVhcl9odWdldGxiX2h3cG9pc29uKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuIFxcdGlmIChmb2xpb190ZXN0X2h1Z2V0bGJfdm1lbW1hcF9vcHRpbWl6ZWQoZm9saW8pKVxcbiBcXHRcXHRyZXR1cm47XFxuIFxcdGZvbGlvX2NsZWFyX2h3cG9pc29uKGZvbGlvKTtcXG4rXFx0Zm9saW9fc2V0X2hhc19od3BvaXNvbmVkKGZvbGlvKTtcXG4gXFx0Zm9saW9fZnJlZV9yYXdfaHdwKGZvbGlvLCB0cnVlKTtcXG4gfVxcbiBcXG5AQCAtMjEzMiwxMSArMjE1NywxMSBAQCBzdGF0aWMgaW50IHRyeV9tZW1vcnlfZmFpbHVyZV9odWdldGxiKHVuc2lnbmVkIGxvbmcgcGZuLCBpbnQgZmxhZ3MpXFxuIFxcdCAqL1xcbiBcXHRpZiAocmVzID09IE1GX0hVR0VUTEJfRlJFRUQpIHtcXG4gXFx0XFx0Zm9saW9fdW5sb2NrKGZvbGlvKTtcXG4tXFx0XFx0aWYgKF9fcGFnZV9oYW5kbGVfcG9pc29uKHApIFxcdTAwM2UgMCkge1xcbitcXHRcXHRpZiAoX19odWdlcGFnZV9oYW5kbGVfcG9pc29uKHApKSB7XFxuK1xcdFxcdFxcdHJlcyA9IE1GX0ZBSUxFRDtcXG4rXFx0XFx0fSBlbHNlIHtcXG4gXFx0XFx0XFx0cGFnZV9yZWZfaW5jKHApO1xcbiBcXHRcXHRcXHRyZXMgPSBNRl9SRUNPVkVSRUQ7XFxuLVxcdFxcdH0gZWxzZSB7XFxuLVxcdFxcdFxcdHJlcyA9IE1GX0ZBSUxFRDtcXG4gXFx0XFx0fVxcbiBcXHRcXHRyZXR1cm4gYWN0aW9uX3Jlc3VsdChwZm4sIE1GX01TR19GUkVFX0hVR0UsIHJlcyk7XFxuIFxcdH1cXG5kaWZmIC0tZ2l0IGEvbW0vcGFnZV9hbGxvYy5jIGIvbW0vcGFnZV9hbGxvYy5jXFxuaW5kZXggNzYyZDliNmJjNzkyZjEuLjY0MTg4OTZjOWRmNjYwIDEwMDY0NFxcbi0tLSBhL21tL3BhZ2VfYWxsb2MuY1xcbisrKyBiL21tL3BhZ2VfYWxsb2MuY1xcbkBAIC05Myw2ICs5MywxMyBAQCB0eXBlZGVmIGludCBfX2JpdHdpc2UgZnBpX3Q7XFxuIC8qIGZyZWVfcGFnZXNfcHJlcGFyZSgpIGhhcyBhbHJlYWR5IGJlZW4gY2FsbGVkIGZvciBwYWdlKHMpIGJlaW5nIGZyZWVkLiAqL1xcbiAjZGVmaW5lIEZQSV9QUkVQQVJFRFxcdFxcdCgoX19mb3JjZSBmcGlfdClCSVQoMykpXFxuIFxcbisvKlxcbisgKiBQYWdlKHMpIG5lZWRzIHRvIGdvIHRocm91Z2ggZnJlZV9wYWdlc19zYW5pdGl6ZSgpLCBmb3IgZXhhbXBsZSwgYmVjYXVzZVxcbisgKiBmcmVlX3BhZ2VzX3ByZXBhcmUoKSBjYW5ub3Qgc2FuaXRpemUgYSBoaWdoLW9yZGVyIHBhZ2UgYmxvY2sgZHVlIHRvXFxuKyAqIGhhcmR3YXJlIGVycm9yIGluIHNvbWUgcGFnZShzKS5cXG4rICovXFxuKyNkZWZpbmUgRlBJX1NBTklUSVpFXFx0XFx0KChfX2ZvcmNlIGZwaV90KUJJVCg0KSlcXG4rXFxuIC8qIHByZXZlbnQgXFx1MDAzZTEgX3VwZGF0ZXJfIG9mIHpvbmUgcGVyY3B1IHBhZ2VzZXQgLVxcdTAwM2VoaWdoIGFuZCAtXFx1MDAzZWJhdGNoIGZpZWxkcyAqL1xcbiBzdGF0aWMgREVGSU5FX01VVEVYKHBjcF9iYXRjaF9oaWdoX2xvY2spO1xcbiAjZGVmaW5lIE1JTl9QRVJDUFVfUEFHRUxJU1RfSElHSF9GUkFDVElPTiAoOClcXG5AQCAtMjEwLDYgKzIxNyw4IEBAIGdmcF90IGdmcF9hbGxvd2VkX21hc2sgX19yZWFkX21vc3RseSA9IEdGUF9CT09UX01BU0s7XFxuIHVuc2lnbmVkIGludCBwYWdlYmxvY2tfb3JkZXIgX19yZWFkX21vc3RseTtcXG4gI2VuZGlmXFxuIFxcbitzdGF0aWMgdm9pZCBmcmVlX2hhc19od3BvaXNvbmVkKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBpbnQgb3JkZXIsXFxuK1xcdFxcdFxcdFxcdGZwaV90IGZwaV9mbGFncyk7XFxuIHN0YXRpYyB2b2lkIF9fZnJlZV9wYWdlc19vayhzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgaW50IG9yZGVyLFxcbiBcXHRcXHRcXHQgICAgZnBpX3QgZnBpX2ZsYWdzKTtcXG4gc3RhdGljIHZvaWQgcmVzZXJ2ZV9oaWdoYXRvbWljX3BhZ2VibG9jayhzdHJ1Y3QgcGFnZSAqcGFnZSwgaW50IG9yZGVyLFxcbkBAIC0xMzExLDE0ICsxMzIwLDczIEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBwZ2FsbG9jX3RhZ19zdWJfcGFnZXMoc3RydWN0IGFsbG9jX3RhZyAqdGFnLCB1bnNpZ25lZCBpbnQgbnIpXFxuIFxcbiAjZW5kaWYgLyogQ09ORklHX01FTV9BTExPQ19QUk9GSUxJTkcgKi9cXG4gXFxuKy8qXFxuKyAqIFNhbml0aXplLCB3aGljaCByZXF1aXJlcyB3cml0aW5nLCBhIGJsb2NrIG9mIHBhZ2VzIGF0IHRoZSBsYXN0IG1vbWVudCBvZlxcbisgKiBwcmVwYXJpbmcgdG8gZnJlZWluZyB0aGVtLCBpLmUuIF9fZnJlZV9wYWdlc19wcmVwYXJlKCkuXFxuKyAqL1xcbitzdGF0aWMgdm9pZCBmcmVlX3BhZ2VzX3Nhbml0aXplKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBpbnQgb3JkZXIpXFxuK3tcXG4rXFx0Ym9vbCBpbml0ID0gd2FudF9pbml0X29uX2ZyZWUoKTtcXG4rXFx0LypcXG4rXFx0ICogX19rYXNhbl91bnBvaXNvbl9wYWdlcygpIHNldHMga2FzYW4gdGFnIG9uIGV2ZXJ5IHRhaWwgcGFnZSwgc29cXG4rXFx0ICogaXQgaXMgZmluZSB0byB1c2Ugc2hvdWxkX3NraXBfa2FzYW5fcG9pc29uKCkgd2hlbiBwYWdlcyBoZXJlXFxuK1xcdCAqIHdlcmUgYSBzZXQgb2YgdGFpbCBwYWdlcyBmcm9tIGEgY29tcG91bmQgZm9saW8uXFxuK1xcdCAqL1xcbitcXHRib29sIHNraXBfa2FzYW5fcG9pc29uID0gc2hvdWxkX3NraXBfa2FzYW5fcG9pc29uKHBhZ2UpO1xcbitcXG4rXFx0a2VybmVsX3BvaXNvbl9wYWdlcyhwYWdlLCAxIFxcdTAwM2NcXHUwMDNjIG9yZGVyKTtcXG4rXFxuK1xcdC8qXFxuK1xcdCAqIEFzIG1lbW9yeSBpbml0aWFsaXphdGlvbiBtaWdodCBiZSBpbnRlZ3JhdGVkIGludG8gS0FTQU4sXFxuK1xcdCAqIEtBU0FOIHBvaXNvbmluZyBhbmQgbWVtb3J5IGluaXRpYWxpemF0aW9uIGNvZGUgbXVzdCBiZVxcbitcXHQgKiBrZXB0IHRvZ2V0aGVyIHRvIGF2b2lkIGRpc2NyZXBhbmNpZXMgaW4gYmVoYXZpb3IuXFxuK1xcdCAqXFxuK1xcdCAqIFdpdGggaGFyZHdhcmUgdGFnLWJhc2VkIEtBU0FOLCBtZW1vcnkgdGFncyBtdXN0IGJlIHNldCBiZWZvcmUgdGhlXFxuK1xcdCAqIHBhZ2UgYmVjb21lcyB1bmF2YWlsYWJsZSB2aWEgZGVidWdfcGFnZWFsbG9jIG9yIGFyY2hfZnJlZV9wYWdlLlxcbitcXHQgKi9cXG4rXFx0aWYgKCFza2lwX2thc2FuX3BvaXNvbikge1xcbitcXHRcXHRrYXNhbl9wb2lzb25fcGFnZXMocGFnZSwgb3JkZXIsIGluaXQpO1xcbitcXG4rXFx0XFx0LyogTWVtb3J5IGlzIGFscmVhZHkgaW5pdGlhbGl6ZWQgaWYgS0FTQU4gZGlkIGl0IGludGVybmFsbHkuICovXFxuK1xcdFxcdGlmIChrYXNhbl9oYXNfaW50ZWdyYXRlZF9pbml0KCkpXFxuK1xcdFxcdFxcdGluaXQgPSBmYWxzZTtcXG4rXFx0fVxcbitcXHRpZiAoaW5pdClcXG4rXFx0XFx0Y2xlYXJfaGlnaHBhZ2VzX2thc2FuX3RhZ2dlZChwYWdlLCAxIFxcdTAwM2NcXHUwMDNjIG9yZGVyKTtcXG4rXFxuK1xcdC8qXFxuK1xcdCAqIGFyY2hfZnJlZV9wYWdlKCkgY2FuIG1ha2UgdGhlIHBhZ2UncyBjb250ZW50cyBpbmFjY2Vzc2libGUuICBzMzkwXFxuK1xcdCAqIGRvZXMgdGhpcy4gIFNvIG5vdGhpbmcgd2hpY2ggY2FuIGFjY2VzcyB0aGUgcGFnZSdzIGNvbnRlbnRzIHNob3VsZFxcbitcXHQgKiBoYXBwZW4gYWZ0ZXIgdGhpcy5cXG4rXFx0ICovXFxuK1xcdGFyY2hfZnJlZV9wYWdlKHBhZ2UsIG9yZGVyKTtcXG4rXFxuK1xcdGRlYnVnX3BhZ2VhbGxvY191bm1hcF9wYWdlcyhwYWdlLCAxIFxcdTAwM2NcXHUwMDNjIG9yZGVyKTtcXG4rfVxcbitcXG4rLypcXG4rICogUmV0dXJuc1xcbisgKiAtIHRydWU6IGNoZWNrcyBhbmQgcHJlcGFyYXRpb25zIGFsbCBnb29kLCBjYWxsZXIgY2FuIHByb2NlZWQgZnJlZWluZy5cXG4rICogLSBmYWxzZTogZG8gbm90IHByb2NlZWQgZnJlZWluZyBmb3Igb25lIG9mIHRoZSBmb2xsb3dpbmcgcmVhc29uczpcXG4rICogICAxLiBTb21lIGNoZWNrIGZhaWxlZCBzbyBpdCBpcyBub3Qgc2FmZSB0byBwcm9jZWVkIGZyZWVpbmcuXFxuKyAqICAgMi4gQSBjb21wb3VuZCBwYWdlIGhhcyBzb21lIEhXUG9pc29uIHBhZ2VzLiBUaGUgaGVhbHRoeSBwYWdlc1xcbisgKiAgICAgIGFyZSBhbHJlYWR5IHNhZmVseSBmcmVlZCwgYW5kIHRoZSBIV1BvaXNvbiBvbmVzIGlzb2xhdGVkLlxcbisgKi9cXG4gc3RhdGljIF9fYWx3YXlzX2lubGluZSBib29sIF9fZnJlZV9wYWdlc19wcmVwYXJlKHN0cnVjdCBwYWdlICpwYWdlLFxcbiBcXHRcXHR1bnNpZ25lZCBpbnQgb3JkZXIsIGZwaV90IGZwaV9mbGFncylcXG4ge1xcbiBcXHRpbnQgYmFkID0gMDtcXG4tXFx0Ym9vbCBza2lwX2thc2FuX3BvaXNvbiA9IHNob3VsZF9za2lwX2thc2FuX3BvaXNvbihwYWdlKTtcXG4tXFx0Ym9vbCBpbml0ID0gd2FudF9pbml0X29uX2ZyZWUoKTtcXG4gXFx0Ym9vbCBjb21wb3VuZCA9IFBhZ2VDb21wb3VuZChwYWdlKTtcXG4gXFx0c3RydWN0IGZvbGlvICpmb2xpbyA9IHBhZ2VfZm9saW8ocGFnZSk7XFxuK1xcdC8qXFxuK1xcdCAqIFdoZW4gZGVhbGluZyB3aXRoIGNvbXBvdW5kIHBhZ2UsIFBHX2hhc19od3BvaXNvbmVkIGlzIGNsZWFyZWRcXG4rXFx0ICogd2l0aCBQQUdFX0ZMQUdTX1NFQ09ORC4gU28gdGhlIGNoZWNrIG11c3QgYmUgZG9uZSBmaXJzdC5cXG4rXFx0ICpcXG4rXFx0ICogTm90ZSB3ZSBjYW4ndCBleGNsdWRlIFBHX2hhc19od3BvaXNvbmVkIGZyb20gUEFHRV9GTEFHU19TRUNPTkQuXFxuK1xcdCAqIEJlY2F1c2UgUEdfaGFzX2h3cG9pc29uZWQgPT0gUEdfYWN0aXZlLCBmcmVlX3BhZ2VfaXNfYmFkKCkgd2lsbFxcbitcXHQgKiBjb25mdXNlIGFuZCBjb21wbGFpbnQgdGhhdCB0aGUgZmlyc3QgdGFpbCBwYWdlIGlzIHN0aWxsIGFjdGl2ZS5cXG4rXFx0ICovXFxuK1xcdGJvb2wgc2hvdWxkX2ZoaCA9IGNvbXBvdW5kIFxcdTAwMjZcXHUwMDI2IGZvbGlvX3Rlc3RfaGFzX2h3cG9pc29uZWQoZm9saW8pO1xcbiBcXG4gXFx0aWYgKGZwaV9mbGFncyBcXHUwMDI2IEZQSV9QUkVQQVJFRClcXG4gXFx0XFx0cmV0dXJuIHRydWU7XFxuQEAgLTE0MTYsMzQgKzE0ODQsMTkgQEAgc3RhdGljIF9fYWx3YXlzX2lubGluZSBib29sIF9fZnJlZV9wYWdlc19wcmVwYXJlKHN0cnVjdCBwYWdlICpwYWdlLFxcbiBcXHRcXHRcXHRcXHRcXHQgICBQQUdFX1NJWkUgXFx1MDAzY1xcdTAwM2Mgb3JkZXIpO1xcbiBcXHR9XFxuIFxcbi1cXHRrZXJuZWxfcG9pc29uX3BhZ2VzKHBhZ2UsIDEgXFx1MDAzY1xcdTAwM2Mgb3JkZXIpO1xcbi1cXG4gXFx0LypcXG4tXFx0ICogQXMgbWVtb3J5IGluaXRpYWxpemF0aW9uIG1pZ2h0IGJlIGludGVncmF0ZWQgaW50byBLQVNBTixcXG4tXFx0ICogS0FTQU4gcG9pc29uaW5nIGFuZCBtZW1vcnkgaW5pdGlhbGl6YXRpb24gY29kZSBtdXN0IGJlXFxuLVxcdCAqIGtlcHQgdG9nZXRoZXIgdG8gYXZvaWQgZGlzY3JlcGFuY2llcyBpbiBiZWhhdmlvci5cXG4rXFx0ICogQWZ0ZXIgYnJlYWtpbmcgZG93biBjb21wb3VuZCBwYWdlIGFuZCBkZWFsaW5nIHdpdGggcGFnZSBtZXRhZGF0YVxcbitcXHQgKiAoZS5nLiBwYWdlIG93bmVyIGFuZCBwYWdlIGFsbG9jIHRhZ3MpLCB0YWtlIGEgc2hvcnRjdXQgaWYgdGhpc1xcbitcXHQgKiB3YXMgYSBjb21wb3VuZCBwYWdlIGNvbnRhaW5pbmcgY2VydGFpbiBIV1BvaXNvbiBzdWJwYWdlcy5cXG4gXFx0ICpcXG4tXFx0ICogV2l0aCBoYXJkd2FyZSB0YWctYmFzZWQgS0FTQU4sIG1lbW9yeSB0YWdzIG11c3QgYmUgc2V0IGJlZm9yZSB0aGVcXG4tXFx0ICogcGFnZSBiZWNvbWVzIHVuYXZhaWxhYmxlIHZpYSBkZWJ1Z19wYWdlYWxsb2Mgb3IgYXJjaF9mcmVlX3BhZ2UuXFxuK1xcdCAqIEZQSV9TQU5JVElaRSB0byByZW1lbWJlciBmcmVlX3BhZ2VzX3Nhbml0aXplKCkgaGVhbHRoeSBwYWdlcy5cXG4gXFx0ICovXFxuLVxcdGlmICghc2tpcF9rYXNhbl9wb2lzb24pIHtcXG4tXFx0XFx0a2FzYW5fcG9pc29uX3BhZ2VzKHBhZ2UsIG9yZGVyLCBpbml0KTtcXG4tXFxuLVxcdFxcdC8qIE1lbW9yeSBpcyBhbHJlYWR5IGluaXRpYWxpemVkIGlmIEtBU0FOIGRpZCBpdCBpbnRlcm5hbGx5LiAqL1xcbi1cXHRcXHRpZiAoa2FzYW5faGFzX2ludGVncmF0ZWRfaW5pdCgpKVxcbi1cXHRcXHRcXHRpbml0ID0gZmFsc2U7XFxuK1xcdGlmIChzaG91bGRfZmhoKSB7XFxuK1xcdFxcdGZyZWVfaGFzX2h3cG9pc29uZWQocGFnZSwgb3JkZXIsIGZwaV9mbGFncyB8IEZQSV9TQU5JVElaRSk7XFxuK1xcdFxcdHJldHVybiBmYWxzZTtcXG4gXFx0fVxcbi1cXHRpZiAoaW5pdClcXG4tXFx0XFx0Y2xlYXJfaGlnaHBhZ2VzX2thc2FuX3RhZ2dlZChwYWdlLCAxIFxcdTAwM2NcXHUwMDNjIG9yZGVyKTtcXG4tXFxuLVxcdC8qXFxuLVxcdCAqIGFyY2hfZnJlZV9wYWdlKCkgY2FuIG1ha2UgdGhlIHBhZ2UncyBjb250ZW50cyBpbmFjY2Vzc2libGUuICBzMzkwXFxuLVxcdCAqIGRvZXMgdGhpcy4gIFNvIG5vdGhpbmcgd2hpY2ggY2FuIGFjY2VzcyB0aGUgcGFnZSdzIGNvbnRlbnRzIHNob3VsZFxcbi1cXHQgKiBoYXBwZW4gYWZ0ZXIgdGhpcy5cXG4tXFx0ICovXFxuLVxcdGFyY2hfZnJlZV9wYWdlKHBhZ2UsIG9yZGVyKTtcXG4gXFxuLVxcdGRlYnVnX3BhZ2VhbGxvY191bm1hcF9wYWdlcyhwYWdlLCAxIFxcdTAwM2NcXHUwMDNjIG9yZGVyKTtcXG4rXFx0ZnJlZV9wYWdlc19zYW5pdGl6ZShwYWdlLCBvcmRlcik7XFxuIFxcbiBcXHRyZXR1cm4gdHJ1ZTtcXG4gfVxcbkBAIC02ODUyLDggKzY5MDUsOCBAQCB2b2lkIF9faW5pdCBwYWdlX2FsbG9jX3N5c2N0bF9pbml0KHZvaWQpXFxuIFxcdHJlZ2lzdGVyX3N5c2N0bF9pbml0KFxcXCJ2bVxcXCIsIHBhZ2VfYWxsb2Nfc3lzY3RsX3RhYmxlKTtcXG4gfVxcbiBcXG4tc3RhdGljIHZvaWQgZnJlZV9wcmVwYXJlZF9jb250aWdfcmFuZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsXFxuLVxcdFxcdHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMpXFxuK3N0YXRpYyB2b2lkIF9fZnJlZV9wcmVwYXJlZF9jb250aWdfcmFuZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsXFxuK1xcdFxcdHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMsIGZwaV90IGZwaV9mbGFncylcXG4ge1xcbiBcXHR1bnNpZ25lZCBsb25nIHBmbiA9IHBhZ2VfdG9fcGZuKHBhZ2UpO1xcbiBcXG5AQCAtNjg2OSw4ICs2OTIyLDE1IEBAIHN0YXRpYyB2b2lkIGZyZWVfcHJlcGFyZWRfY29udGlnX3JhbmdlKHN0cnVjdCBwYWdlICpwYWdlLFxcbiBcXHRcXHQvKlxcbiBcXHRcXHQgKiBGcmVlIHRoZSBjaHVuayBhcyBhIHNpbmdsZSBibG9jay4gT3VyIGNhbGxlciBoYXMgYWxyZWFkeVxcbiBcXHRcXHQgKiBjYWxsZWQgZnJlZV9wYWdlc19wcmVwYXJlKCkgZm9yIGVhY2ggb3JkZXItMCBwYWdlLlxcbitcXHRcXHQgKlxcbitcXHRcXHQgKiBJZiB0aGUgb3JpZ2luYWwgY29tcG91bmQgcGFnZSBoYXMgSFdQb2lzb24gcGFnZSxcXG4rXFx0XFx0ICogZnJlZV9wYWdlc19wcmVwYXJlKCkgaGFzIHRvIHNraXAgc2FuaXRpemUgYXQgdGhhdCB0aW1lLFxcbitcXHRcXHQgKiBidXQgbm93IGl0IGlzIGdvb2QgdGltZSB0byBkbyB0aGF0LlxcbiBcXHRcXHQgKi9cXG4tXFx0XFx0X19mcmVlX2Zyb3plbl9wYWdlcyhwYWdlLCBvcmRlciwgRlBJX1BSRVBBUkVEKTtcXG4rXFx0XFx0aWYgKGZwaV9mbGFncyBcXHUwMDI2IEZQSV9TQU5JVElaRSlcXG4rXFx0XFx0XFx0ZnJlZV9wYWdlc19zYW5pdGl6ZShwYWdlLCBvcmRlcik7XFxuK1xcbitcXHRcXHRfX2ZyZWVfZnJvemVuX3BhZ2VzKHBhZ2UsIG9yZGVyLCBmcGlfZmxhZ3MgfCBGUElfUFJFUEFSRUQpO1xcbiBcXG4gXFx0XFx0cGZuICs9IDFVTCBcXHUwMDNjXFx1MDAzYyBvcmRlcjtcXG4gXFx0XFx0cGFnZSArPSAxVUwgXFx1MDAzY1xcdTAwM2Mgb3JkZXI7XFxuQEAgLTY4NzgsNiArNjkzOCwxMSBAQCBzdGF0aWMgdm9pZCBmcmVlX3ByZXBhcmVkX2NvbnRpZ19yYW5nZShzdHJ1Y3QgcGFnZSAqcGFnZSxcXG4gXFx0fVxcbiB9XFxuIFxcbitzdGF0aWMgdm9pZCBmcmVlX3ByZXBhcmVkX2NvbnRpZ19yYW5nZShzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgbG9uZyBucl9wYWdlcylcXG4re1xcbitcXHRfX2ZyZWVfcHJlcGFyZWRfY29udGlnX3JhbmdlKHBhZ2UsIG5yX3BhZ2VzLCBGUElfTk9ORSk7XFxuK31cXG4rXFxuIHN0YXRpYyB2b2lkIF9fZnJlZV9jb250aWdfcmFuZ2VfY29tbW9uKHVuc2lnbmVkIGxvbmcgcGZuLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLFxcbiBcXHRcXHRib29sIGlzX2Zyb3plbilcXG4ge1xcbkBAIC02OTUxLDYgKzcwMTYsNjEgQEAgdm9pZCBfX2ZyZWVfY29udGlnX3JhbmdlKHVuc2lnbmVkIGxvbmcgcGZuLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzKVxcbiBcXHRfX2ZyZWVfY29udGlnX3JhbmdlX2NvbW1vbihwZm4sIG5yX3BhZ2VzLCAvKiBpc19mcm96ZW49ICovIGZhbHNlKTtcXG4gfVxcbiBcXG4rLypcXG4rICogR2l2ZW4gc29tZSBjb250aWd1b3VzIHBhZ2VzIHRoYXQgaGF2ZSBjZXJ0YWluIG51bWJlciBvZiBIV1BvaXNvbiBwYWdlKHMpLFxcbisgKiBmcmVlIG9ubHkgdGhlIGhlYWx0aHkgb25lcy5cXG4rICpcXG4rICogVXNlZCBhdCB0aGUgZW5kIG9mIF9fZnJlZV9wYWdlc19wcmVwYXJlKCkuIEV2ZW4gaWYgaGF2aW5nIEhXUG9pc29uIHBhZ2VzLFxcbisgKiBicmVha2luZyBkb3duIGNvbXBvdW5kIHBhZ2UgYW5kIGNsZWFyaW5nIG1ldGFkYXRhIChlLmcuIHBhZ2Ugb3duZXIsIGFsbG9jXFxuKyAqIHRhZykgY2FuIGJlIGRvbmUgdG9nZXRoZXIgZHVyaW5nIF9fZnJlZV9wYWdlc19wcmVwYXJlKCksIHdoaWNoIHNpbXBsaWZpZXNcXG4rICogdGhlIHNwbGl0dGluZyBoZXJlOiB1bmxpa2UgX19zcGxpdF91bm1hcHBlZF9mb2xpbygpLCB0aGVyZSBpcyBubyBuZWVkIHRvXFxuKyAqIHR1cm4gc3BsaXQgcGFnZXMgaW50byBhIGNvbXBvdW5kIHBhZ2Ugb3IgdG8gY2FycnkgbWV0YWRhdGEuXFxuKyAqXFxuKyAqIEl0IHNjYW5zIGV2ZXJ5IHJhdyBwYWdlIG9mIHRoZSBjb21wb3VuZCBwYWdlIGFuZCBjYXVzZXMgbm9udHJpdmlhbCBvdmVyaGVhZC5cXG4rICogU28gb25seSB1c2UgdGhpcyB3aGVuIHRoZSBjb21wb3VuZCBwYWdlIGNvbnRhaW5zIEhXUG9pc29uIHBhZ2UocykuXFxuKyAqXFxuKyAqIEl0IGFsc28gd29ya3Mgd2hlbiBvcmRlciA9PSAwLCByZWdhcmRsZXNzIG9mIFBhZ2VIV1BvaXNvbigpIG9yIG5vdC5cXG4rICpcXG4rICogVGhpcyBpbXBsZW1lbnRhdGlvbiBuZWVkcyByZXdvcmsgaW4gbWVtZGVzYyB3b3JsZC5cXG4rICovXFxuK3N0YXRpYyB2b2lkIGZyZWVfaGFzX2h3cG9pc29uZWQoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGludCBvcmRlcixcXG4rXFx0XFx0XFx0XFx0ZnBpX3QgZnBpX2ZsYWdzKVxcbit7XFxuK1xcdHVuc2lnbmVkIGxvbmcgY3VyciA9IHBhZ2VfdG9fcGZuKHBhZ2UpO1xcbitcXHR1bnNpZ25lZCBsb25nIGVuZF9wZm4gPSBjdXJyICsgKDEgXFx1MDAzY1xcdTAwM2Mgb3JkZXIpO1xcbitcXHR1bnNpZ25lZCBsb25nIG5leHQ7XFxuK1xcdHVuc2lnbmVkIGxvbmcgdG90YWxfZnJlZWQgPSAwO1xcbitcXHR1bnNpZ25lZCBsb25nIHRvdGFsX2h3cCA9IDA7XFxuK1xcbitcXHR3aGlsZSAoY3VyciBcXHUwMDNjIGVuZF9wZm4pIHtcXG4rXFx0XFx0bmV4dCA9IGN1cnI7XFxuK1xcbitcXHRcXHR3aGlsZSAobmV4dCBcXHUwMDNjIGVuZF9wZm4gXFx1MDAyNlxcdTAwMjYgIVBhZ2VIV1BvaXNvbihwZm5fdG9fcGFnZShuZXh0KSkpXFxuK1xcdFxcdFxcdCsrbmV4dDtcXG4rXFxuK1xcdFxcdGlmIChuZXh0ICE9IGVuZF9wZm4pIHtcXG4rXFx0XFx0XFx0LypcXG4rXFx0XFx0XFx0ICogQXZvaWQgYWNjb3VudGluZyBlcnJvciB3aGVuIHRoZSBwYWdlIGlzIGZyZWVkXFxuK1xcdFxcdFxcdCAqIGJ5IHVucG9pc29uX21lbW9yeSgpLlxcbitcXHRcXHRcXHQgKi9cXG4rXFx0XFx0XFx0Y2xlYXJfcGFnZV90YWdfcmVmKHBmbl90b19wYWdlKG5leHQpKTtcXG4rXFx0XFx0XFx0Kyt0b3RhbF9od3A7XFxuK1xcdFxcdH1cXG4rXFxuK1xcdFxcdF9fZnJlZV9wcmVwYXJlZF9jb250aWdfcmFuZ2UocGZuX3RvX3BhZ2UoY3VyciksIG5leHQgLSBjdXJyLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgIGZwaV9mbGFncyk7XFxuK1xcdFxcdHRvdGFsX2ZyZWVkICs9IG5leHQgLSBjdXJyO1xcbitcXG4rXFx0XFx0aWYgKG5leHQgPT0gZW5kX3BmbilcXG4rXFx0XFx0XFx0YnJlYWs7XFxuK1xcbitcXHRcXHRjdXJyID0gbmV4dCArIDE7XFxuK1xcdH1cXG4rXFxuK1xcdHByX2luZm8oXFxcIkZyZWVkICUjbHggcGFnZXMsIGV4Y2x1ZGVkICUjbHggSFdQb2lzb24gcGFnZXNcXFxcblxcXCIsXFxuK1xcdFxcdHRvdGFsX2ZyZWVkLCB0b3RhbF9od3ApO1xcbit9XFxuK1xcbiAjaWZkZWYgQ09ORklHX0NPTlRJR19BTExPQ1xcbiAvKiBVc2FnZTogU2VlIGFkbWluLWd1aWRlL2R5bmFtaWMtZGVidWctaG93dG8ucnN0ICovXFxuIHN0YXRpYyB2b2lkIGFsbG9jX2NvbnRpZ19kdW1wX3BhZ2VzKHN0cnVjdCBsaXN0X2hlYWQgKnBhZ2VfbGlzdClcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vbWVtb3J5LWZhaWx1cmUuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL21lbW9yeS1mYWlsdXJlLmNcXG5pbmRleCAwMzJlZDk1MjA1N2M2Mi4uNzhjMTA1Y2UyYWYxODUgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vbWVtb3J5LWZhaWx1cmUuY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL21lbW9yeS1mYWlsdXJlLmNcXG5AQCAtMTgsNiArMTgsNyBAQFxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvbWFnaWMuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2Vycm5vLmhcXHUwMDNlXFxuIFxcbisjaW5jbHVkZSBcXFwiaHVnZXBhZ2Vfc2V0dGluZ3MuaFxcXCJcXG4gI2luY2x1ZGUgXFxcInZtX3V0aWwuaFxcXCJcXG4gXFxuIGVudW0gaW5qZWN0X3R5cGUge1xcbkBAIC0yNyw2ICsyOCw3IEBAIGVudW0gaW5qZWN0X3R5cGUge1xcbiBcXG4gZW51bSByZXN1bHRfdHlwZSB7XFxuIFxcdE1BRFZfSEFSRF9BTk9OLFxcbitcXHRNQURWX0hBUkRfQU5PTl9IVUdFVExCLFxcbiBcXHRNQURWX0hBUkRfQ0xFQU5fUEFHRUNBQ0hFLFxcbiBcXHRNQURWX0hBUkRfRElSVFlfUEFHRUNBQ0hFLFxcbiBcXHRNQURWX1NPRlRfQU5PTixcXG5AQCAtNDcsNiArNDksOCBAQCBGSVhUVVJFKG1lbW9yeV9mYWlsdXJlKVxcbiBcXHRpbnQgcGFnZW1hcF9mZDtcXG4gXFx0aW50IGtwYWdlZmxhZ3NfZmQ7XFxuIFxcdGJvb2wgdHJpZ2dlcmVkO1xcbitcXHQvKiBOdW1iZXIgb2YgaW5pdGlhbCBIdWdlVExCIHBhZ2VzIHdpdGggZGVmYXVsdCBwYWdlIHNpemUuICovXFxuK1xcdHVuc2lnbmVkIGxvbmcgbnJfaHVnZXRsYl9wYWdlcztcXG4gfTtcXG4gXFxuIEZJWFRVUkVfVkFSSUFOVChtZW1vcnlfZmFpbHVyZSlcXG5AQCAtMTU3LDYgKzE2MSw3IEBAIHN0YXRpYyB2b2lkIGNoZWNrKHN0cnVjdCBfX3Rlc3RfbWV0YWRhdGEgKl9tZXRhZGF0YSwgRklYVFVSRV9EQVRBKG1lbW9yeV9mYWlsdXJlXFxuIFxcdFxcdCAgdm9pZCAqdmFkZHIsIGVudW0gcmVzdWx0X3R5cGUgdHlwZSwgaW50IHNldGptcClcXG4ge1xcbiBcXHR1bnNpZ25lZCBsb25nIHNpemU7XFxuK1xcdHVuc2lnbmVkIGxvbmcgbnJfaHVnZXRsYl9wYWdlcztcXG4gXFx0dWludDY0X3QgcGZuX2ZsYWdzO1xcbiBcXG4gXFx0c3dpdGNoICh0eXBlKSB7XFxuQEAgLTE3NCw2ICsxNzksNyBAQCBzdGF0aWMgdm9pZCBjaGVjayhzdHJ1Y3QgX190ZXN0X21ldGFkYXRhICpfbWV0YWRhdGEsIEZJWFRVUkVfREFUQShtZW1vcnlfZmFpbHVyZVxcbiBcXHRcXHRBU1NFUlRfTkUocGFnZW1hcF9nZXRfcGZuKHNlbGYtXFx1MDAzZXBhZ2VtYXBfZmQsIHZhZGRyKSwgc2VsZi1cXHUwMDNlcGZuKTtcXG4gXFx0XFx0YnJlYWs7XFxuIFxcdGNhc2UgTUFEVl9IQVJEX0FOT046XFxuK1xcdGNhc2UgTUFEVl9IQVJEX0FOT05fSFVHRVRMQjpcXG4gXFx0Y2FzZSBNQURWX0hBUkRfRElSVFlfUEFHRUNBQ0hFOlxcbiBcXHRcXHQvKiBUaGUgU0lHQlVTIHNpZ25hbCBzaG91bGQgaGF2ZSBiZWVuIHJlY2VpdmVkLiAqL1xcbiBcXHRcXHRBU1NFUlRfRVEoc2V0am1wLCAxKTtcXG5AQCAtMTg0LDggKzE5MCwxNSBAQCBzdGF0aWMgdm9pZCBjaGVjayhzdHJ1Y3QgX190ZXN0X21ldGFkYXRhICpfbWV0YWRhdGEsIEZJWFRVUkVfREFUQShtZW1vcnlfZmFpbHVyZVxcbiBcXHRcXHRBU1NFUlRfRVEoMVVMIFxcdTAwM2NcXHUwMDNjIHNpZ2luZm8uc2lfYWRkcl9sc2IsIHNlbGYtXFx1MDAzZXBhZ2Vfc2l6ZSk7XFxuIFxcdFxcdEFTU0VSVF9FUShzaWdpbmZvLnNpX2FkZHIsIHZhZGRyKTtcXG4gXFxuLVxcdFxcdC8qIFhYWCBDaGVjayBiYWNraW5nIHB0ZSBpcyBod3BvaXNvbiBlbnRyeSB3aGVuIHN1cHBvcnRlZC4gKi9cXG4tXFx0XFx0QVNTRVJUX1RSVUUocGFnZW1hcF9pc19zd2FwcGVkKHNlbGYtXFx1MDAzZXBhZ2VtYXBfZmQsIHZhZGRyKSk7XFxuK1xcdFxcdGlmICh0eXBlICE9IE1BRFZfSEFSRF9BTk9OX0hVR0VUTEIpXFxuK1xcdFxcdFxcdC8qXFxuK1xcdFxcdFxcdCAqIENoZWNrIGJhY2tpbmcgcHRlIGlzIGh3cG9pc29uIGVudHJ5IHdoZW4gc3VwcG9ydGVkLlxcbitcXHRcXHRcXHQgKiBBbHRob3VnaCB0cnlfdG9fdW5tYXBfb25lKCkgYWxzbyBpbnN0YWxscyBod3BvaXNvblxcbitcXHRcXHRcXHQgKiBlbnRyeSBmb3IgSHVnZVRMQiwgcGFnZW1hcF9odWdldGxiX3JhbmdlKCkgZG9lc24ndFxcbitcXHRcXHRcXHQgKiBwYXJzZSBzd2FwIGVudHJpZXMgYXQgYWxsLlxcbitcXHRcXHRcXHQgKi9cXG4rXFx0XFx0XFx0QVNTRVJUX1RSVUUocGFnZW1hcF9pc19zd2FwcGVkKHNlbGYtXFx1MDAzZXBhZ2VtYXBfZmQsIHZhZGRyKSk7XFxuK1xcbiBcXHRcXHRicmVhaztcXG4gXFx0ZGVmYXVsdDpcXG4gXFx0XFx0U0tJUChyZXR1cm4sIFxcXCJ1bmV4cGVjdGVkIGluamVjdCB0eXBlICVkLlxcXFxuXFxcIiwgdHlwZSk7XFxuQEAgLTE5Myw3ICsyMDYsMTkgQEAgc3RhdGljIHZvaWQgY2hlY2soc3RydWN0IF9fdGVzdF9tZXRhZGF0YSAqX21ldGFkYXRhLCBGSVhUVVJFX0RBVEEobWVtb3J5X2ZhaWx1cmVcXG4gXFxuIFxcdC8qIENoZWNrIGlmIHRoZSB2YWx1ZSBvZiBIYXJkd2FyZUNvcnJ1cHRlZCBoYXMgaW5jcmVhc2VkLiAqL1xcbiBcXHRBU1NFUlRfRVEoZ2V0X2hhcmR3YXJlX2NvcnJ1cHRlZF9zaXplKFxcdTAwMjZzaXplKSwgMCk7XFxuLVxcdEFTU0VSVF9FUShzaXplLCBzZWxmLVxcdTAwM2Vjb3JydXB0ZWRfc2l6ZSArIHNlbGYtXFx1MDAzZXBhZ2Vfc2l6ZSAvIDEwMjQpO1xcbitcXG4rXFx0aWYgKHR5cGUgPT0gTUFEVl9IQVJEX0FOT05fSFVHRVRMQikge1xcbitcXHRcXHQvKlxcbitcXHRcXHQgKiBPbmx5IG9uZSBwYWdlIGlzIGhhcmR3YXJlIGNvcnJ1cHRlZDsgdGhlIHJlc3Qgc2hvdWxkIGFsbCBiZVxcbitcXHRcXHQgKiByZWxlYXNlZCB0byBidWRkeSBhbGxvY2F0b3IuXFxuK1xcdFxcdCAqL1xcbitcXHRcXHRBU1NFUlRfRVEoc2l6ZSwgc2VsZi1cXHUwMDNlY29ycnVwdGVkX3NpemUgKyBnZXRwYWdlc2l6ZSgpIC8gMTAyNCk7XFxuK1xcdFxcdC8qIEh1Z2VUTEIgc2hvdWxkIGhhdmUgbG9zdCB0aGUgSFdQb2lzb24gSHVnZVRMQiBwYWdlLiAqL1xcbitcXHRcXHRucl9odWdldGxiX3BhZ2VzID0gaHVnZXRsYl9ucl9kZWZhdWx0X3BhZ2VzKCk7XFxuK1xcdFxcdEFTU0VSVF9FUShucl9odWdldGxiX3BhZ2VzICsgMSwgc2VsZi1cXHUwMDNlbnJfaHVnZXRsYl9wYWdlcyk7XFxuK1xcdH0gZWxzZSB7XFxuK1xcdFxcdEFTU0VSVF9FUShzaXplLCBzZWxmLVxcdTAwM2Vjb3JydXB0ZWRfc2l6ZSArIHNlbGYtXFx1MDAzZXBhZ2Vfc2l6ZSAvIDEwMjQpO1xcbitcXHR9XFxuIFxcbiBcXHQvKiBDaGVjayBpZiBIV1BvaXNvbiBmbGFnIGlzIHNldC4gKi9cXG4gXFx0QVNTRVJUX0VRKHBhZ2VmbGFnc19nZXQoc2VsZi1cXHUwMDNlcGZuLCBzZWxmLVxcdTAwM2VrcGFnZWZsYWdzX2ZkLCBcXHUwMDI2cGZuX2ZsYWdzKSwgMCk7XFxuQEAgLTI0Nyw2ICsyNzIsNDUgQEAgVEVTVF9GKG1lbW9yeV9mYWlsdXJlLCBhbm9uKVxcbiBcXHRBU1NFUlRfRVEobXVubWFwKGFkZHIsIHNlbGYtXFx1MDAzZXBhZ2Vfc2l6ZSksIDApO1xcbiB9XFxuIFxcbitURVNUX0YobWVtb3J5X2ZhaWx1cmUsIGFub25faHVnZXRsYilcXG4re1xcbitcXHRjaGFyICphZGRyO1xcbitcXHRpbnQgcmV0O1xcbitcXHRjb25zdCB1bnNpZ25lZCBsb25nIG5yX2FsbG9jX2h1Z2V0bGJfcGFnZXMgPSA0O1xcbitcXHR1bnNpZ25lZCBsb25nIGFsbG9jX3NpemU7XFxuK1xcbitcXHRpZiAodmFyaWFudC1cXHUwMDNldHlwZSA9PSBNQURWX1NPRlQpXFxuK1xcdFxcdFNLSVAocmV0dXJuLCBcXFwiU29mdCBvZmZsaW5lIHRlc3QgaXMgbm90IGltcGxlbWVudGVkXFxcIik7XFxuK1xcbitcXHQvKiBIdWdlVExCIHNldHRpbmdzIHdpbGwgYmUgYXV0b21hdGljYWxseSByZXN0b3JlZCB3aGVuIHRlc3QgZXhpdHMuICovXFxuK1xcdGh1Z2V0bGJfc2V0dXBfZGVmYXVsdChucl9hbGxvY19odWdldGxiX3BhZ2VzKTtcXG4rXFxuK1xcdGFsbG9jX3NpemUgPSBkZWZhdWx0X2h1Z2VfcGFnZV9zaXplKCkgKiBucl9hbGxvY19odWdldGxiX3BhZ2VzO1xcbitcXHRzZWxmLVxcdTAwM2VwYWdlX3NpemUgPSBkZWZhdWx0X2h1Z2VfcGFnZV9zaXplKCk7XFxuK1xcdHNlbGYtXFx1MDAzZW5yX2h1Z2V0bGJfcGFnZXMgPSBodWdldGxiX25yX2RlZmF1bHRfcGFnZXMoKTtcXG4rXFxuK1xcdGFkZHIgPSBtbWFwKDAsIGFsbG9jX3NpemUsIFBST1RfUkVBRCB8IFBST1RfV1JJVEUsXFxuK1xcdFxcdCAgICBNQVBfQU5PTllNT1VTIHwgTUFQX1BSSVZBVEUgfCBNQVBfSFVHRVRMQiwgLTEsIDApO1xcbitcXHRpZiAoYWRkciA9PSBNQVBfRkFJTEVEKVxcbitcXHRcXHRTS0lQKHJldHVybiwgXFxcIm1tYXAgZmFpbGVkLCBub3QgZW5vdWdoIG1lbW9yeSBvciBodWdldGxiIG5vdCBzdXBwb3J0ZWQuXFxcXG5cXFwiKTtcXG4rXFx0bWVtc2V0KGFkZHIsIDB4Y2UsIGFsbG9jX3NpemUpO1xcbitcXG4rXFx0cHJlcGFyZShfbWV0YWRhdGEsIHNlbGYsIGFkZHIpO1xcbitcXG4rXFx0cmV0ID0gc2lnc2V0am1wKHNpZ25hbF9qbXBfYnVmLCAxKTtcXG4rXFx0aWYgKCFzZWxmLVxcdTAwM2V0cmlnZ2VyZWQpIHtcXG4rXFx0XFx0c2VsZi1cXHUwMDNldHJpZ2dlcmVkID0gdHJ1ZTtcXG4rXFx0XFx0QVNTRVJUX0VRKHZhcmlhbnQtXFx1MDAzZWluamVjdChzZWxmLCBhZGRyKSwgMCk7XFxuK1xcdFxcdEZPUkNFX1JFQUQoKmFkZHIpO1xcbitcXHR9XFxuK1xcbitcXHRjaGVjayhfbWV0YWRhdGEsIHNlbGYsIGFkZHIsIE1BRFZfSEFSRF9BTk9OX0hVR0VUTEIsIHJldCk7XFxuK1xcbitcXHRjbGVhbnVwKF9tZXRhZGF0YSwgc2VsZiwgYWRkcik7XFxuK1xcbitcXHRBU1NFUlRfRVEobXVubWFwKGFkZHIsIGFsbG9jX3NpemUpLCAwKTtcXG4rfVxcbitcXG4gc3RhdGljIGludCBwcmVwYXJlX2ZpbGUoY29uc3QgY2hhciAqZm5hbWUsIHVuc2lnbmVkIGxvbmcgc2l6ZSlcXG4ge1xcbiBcXHRpbnQgZmQ7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA1VDE4OjIxOjI0LjkxODg0MjUyNloiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTIxNTQ1NDcyOTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTUVNT1JZX0ZBSUxVUkVcIixcbiAgICBcIkhVR0VUTEJGU1wiLFxuICAgIFwiVFJBTlNQQVJFTlRfSFVHRVBBR0VcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJfX2h1Z2VwYWdlX2hhbmRsZV9wb2lzb25cIixcbiAgICBcImZyZWVfaGFzX2h3cG9pc29uZWRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBtZW1vcnkgZmFpbHVyZSBoYW5kbGluZyBmb3IgSHVnZVRMQiBwYWdlcywgZW5zdXJpbmcgdGhhdCBoZWFsdGh5IHN1YnBhZ2VzIG9mIGEgY29tcG91bmQgcGFnZSB3aXRoIGhhcmR3YXJlIHBvaXNvbmVkIHN1YnBhZ2VzIGFyZSBjb3JyZWN0bHkgZnJlZWQgdG8gdGhlIGJ1ZGR5IGFsbG9jYXRvciwgd2hpbGUgaXNvbGF0aW5nIHRoZSBwb2lzb25lZCBvbmVzLiBUaGlzIGludm9sdmVzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byBjb3JlIE1NIGFuZCBwYWdlIGFsbG9jYXRvciBsb2dpYywgc3BlY2lmaWNhbGx5IGluIG1tL21lbW9yeS1mYWlsdXJlLmMgYW5kIG1tL3BhZ2VfYWxsb2MuYy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdFxuICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LFxuICAgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA5Nzc1NDVjOTg5NTY5MTNlMDI2ZDM0ZjUyNTI5OWFiOTc5MDZjY2ZiXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFN1biBKdWwgNSAxODoyMToyMyAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oIGIvaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmhcbmluZGV4IDdhODYzNTcyYWRjZTc5Li4zY2Q1MjRlMDRhMzBiYiAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaFxuQEAgLTg3OSw3ICs4NzksNyBAQCBGT0xJT19GTEFHX0ZBTFNFKHBhcnRpYWxseV9tYXBwZWQpXG4gXG4gI2RlZmluZSBQR19oZWFkX21hc2sgKCgxVUwgXHUwMDNjXHUwMDNjIFBHX2hlYWQpKVxuIFxuLSNpZiBkZWZpbmVkKENPTkZJR19NRU1PUllfRkFJTFVSRSkgXHUwMDI2XHUwMDI2IGRlZmluZWQoQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFKVxuKyNpZiBkZWZpbmVkKENPTkZJR19NRU1PUllfRkFJTFVSRSkgXHUwMDI2XHUwMDI2IChkZWZpbmVkKENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSkgfHwgZGVmaW5lZChDT05GSUdfSFVHRVRMQl9QQUdFKSlcbiAvKlxuICAqIFBhZ2VIYXNIV1BvaXNvbmVkIGluZGljYXRlcyB0aGF0IGF0IGxlYXN0IG9uZSBzdWJwYWdlIGlzIGh3cG9pc29uZWQgaW4gdGhlXG4gICogY29tcG91bmQgcGFnZS5cbmRpZmYgLS1naXQgYS9tbS9tZW1vcnktZmFpbHVyZS5jIGIvbW0vbWVtb3J5LWZhaWx1cmUuY1xuaW5kZXggNDkxNmFiMTQ1MzI1NzMuLmEzN2I2NzU1MDcxODI3IDEwMDY0NFxuLS0tIGEvbW0vbWVtb3J5LWZhaWx1cmUuY1xuKysrIGIvbW0vbWVtb3J5LWZhaWx1cmUuY1xuQEAgLTE3NCw2ICsxNzQsMzAgQEAgc3RhdGljIHN0cnVjdCByYl9yb290X2NhY2hlZCBwZm5fc3BhY2VfaXRyZWUgPSBSQl9ST09UX0NBQ0hFRDtcbiBzdGF0aWMgREVGSU5FX01VVEVYKHBmbl9zcGFjZV9sb2NrKTtcbiBcbiAvKlxuKyAqIE9ubHkgZm9yIGEgSHVnZVRMQiBwYWdlIGJlaW5nIGhhbmRsZWQgYnkgbWVtb3J5X2ZhaWx1cmUoKS4gVGhlIGtleVxuKyAqIGRpZmZlcmVuY2UgdG8gc29mdF9vZmZsaW5lKCkgaXMgdGhhdCwgbm8gSFdQb2lzb24gc3VicGFnZSB3aWxsIG1ha2VcbisgKiBpbnRvIGJ1ZGR5IGFsbG9jYXRvciBhZnRlciBhIHN1Y2Nlc3NmdWwgZGlzc29sdmVfZnJlZV9odWdldGxiX2ZvbGlvKCksXG4rICogc28gdGFrZV9wYWdlX29mZl9idWRkeSgpIGlzIHVubmVjZXNzYXJ5LlxuKyAqL1xuK3N0YXRpYyBpbnQgX19odWdlcGFnZV9oYW5kbGVfcG9pc29uKHN0cnVjdCBwYWdlICpwYWdlKVxuK3tcbitcdHN0cnVjdCBmb2xpbyAqZm9saW8gPSBwYWdlX2ZvbGlvKHBhZ2UpO1xuK1xuK1x0LypcbitcdCAqIENhbid0IHVzZSBkaXNzb2x2ZV9mcmVlX2h1Z2V0bGJfZm9saW8oKSB3aXRob3V0IGEgcmVsaWFibGVcbitcdCAqIHJhd19od3BfbGlzdCB0ZWxsaW5nIHdoaWNoIHN1YnBhZ2UgaXMgSFdQb2lzb24uIFNvIGRvIG5vdCBmcmVlXG4rXHQgKiB0aGVtIHRvIHRoZSBidWRkeSBhbGxvY2F0b3IuIGRlcXVldWVfaHVnZXRsYl9mb2xpb19ub2RlX2V4YWN0KClcbitcdCAqIHdpbGwgZW5zdXJlIHRvIG5ldmVyIHJlLWFsbG9jYXRlIHRoaXMgaHVnZXBhZ2UuXG4rXHQgKi9cbitcdGlmIChmb2xpb190ZXN0X2h1Z2V0bGJfcmF3X2h3cF91bnJlbGlhYmxlKGZvbGlvKSlcbitcdFx0LyogcmF3X2h3cF9saXN0IGJlY29tZXMgdW5yZWxpYWJsZSB3aGVuIGttYWxsb2MoKSBmYWlscy4gKi9cbitcdFx0cmV0dXJuIC1FTk9NRU07XG4rXG4rXHRyZXR1cm4gZGlzc29sdmVfZnJlZV9odWdldGxiX2ZvbGlvKGZvbGlvKTtcbit9XG4rXG4rLypcbisgKiBPbmx5IGZvciBhIGZyZWUgb3IgSHVnZVRMQiBwYWdlIGJlaW5nIGhhbmRsZWQgYnkgc29mdF9vZmZsaW5lKCkuXG4gICogUmV0dXJuIHZhbHVlczpcbiAgKiAgIDE6ICAgdGhlIHBhZ2UgaXMgZGlzc29sdmVkIChpZiBuZWVkZWQpIGFuZCB0YWtlbiBvZmYgZnJvbSBidWRkeSxcbiAgKiAgIDA6ICAgdGhlIHBhZ2UgaXMgZGlzc29sdmVkIChpZiBuZWVkZWQpIGFuZCBub3QgdGFrZW4gb2ZmIGZyb20gYnVkZHksXG5AQCAtMTE2NiwxMSArMTE5MCwxMSBAQCBzdGF0aWMgaW50IG1lX2h1Z2VfcGFnZShzdHJ1Y3QgcGFnZV9zdGF0ZSAqcHMsIHN0cnVjdCBwYWdlICpwKVxuIFx0XHQgKiBzdWJwYWdlcy5cbiBcdFx0ICovXG4gXHRcdGZvbGlvX3B1dChmb2xpbyk7XG4tXHRcdGlmIChfX3BhZ2VfaGFuZGxlX3BvaXNvbihwKSBcdTAwM2UgMCkge1xuK1x0XHRpZiAoX19odWdlcGFnZV9oYW5kbGVfcG9pc29uKHApKSB7XG4rXHRcdFx0cmVzID0gTUZfRkFJTEVEO1xuK1x0XHR9IGVsc2Uge1xuIFx0XHRcdHBhZ2VfcmVmX2luYyhwKTtcbiBcdFx0XHRyZXMgPSBNRl9SRUNPVkVSRUQ7XG4tXHRcdH0gZWxzZSB7XG4tXHRcdFx0cmVzID0gTUZfRkFJTEVEO1xuIFx0XHR9XG4gXHR9XG4gXG5AQCAtMjAwOCw2ICsyMDMyLDcgQEAgdm9pZCBmb2xpb19jbGVhcl9odWdldGxiX2h3cG9pc29uKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4gXHRpZiAoZm9saW9fdGVzdF9odWdldGxiX3ZtZW1tYXBfb3B0aW1pemVkKGZvbGlvKSlcbiBcdFx0cmV0dXJuO1xuIFx0Zm9saW9fY2xlYXJfaHdwb2lzb24oZm9saW8pO1xuK1x0Zm9saW9fc2V0X2hhc19od3BvaXNvbmVkKGZvbGlvKTtcbiBcdGZvbGlvX2ZyZWVfcmF3X2h3cChmb2xpbywgdHJ1ZSk7XG4gfVxuIFxuQEAgLTIxMzIsMTEgKzIxNTcsMTEgQEAgc3RhdGljIGludCB0cnlfbWVtb3J5X2ZhaWx1cmVfaHVnZXRsYih1bnNpZ25lZCBsb25nIHBmbiwgaW50IGZsYWdzKVxuIFx0ICovXG4gXHRpZiAocmVzID09IE1GX0hVR0VUTEJfRlJFRUQpIHtcbiBcdFx0Zm9saW9fdW5sb2NrKGZvbGlvKTtcbi1cdFx0aWYgKF9fcGFnZV9oYW5kbGVfcG9pc29uKHApIFx1MDAzZSAwKSB7XG4rXHRcdGlmIChfX2h1Z2VwYWdlX2hhbmRsZV9wb2lzb24ocCkpIHtcbitcdFx0XHRyZXMgPSBNRl9GQUlMRUQ7XG4rXHRcdH0gZWxzZSB7XG4gXHRcdFx0cGFnZV9yZWZfaW5jKHApO1xuIFx0XHRcdHJlcyA9IE1GX1JFQ09WRVJFRDtcbi1cdFx0fSBlbHNlIHtcbi1cdFx0XHRyZXMgPSBNRl9GQUlMRUQ7XG4gXHRcdH1cbiBcdFx0cmV0dXJuIGFjdGlvbl9yZXN1bHQocGZuLCBNRl9NU0dfRlJFRV9IVUdFLCByZXMpO1xuIFx0fVxuZGlmZiAtLWdpdCBhL21tL3BhZ2VfYWxsb2MuYyBiL21tL3BhZ2VfYWxsb2MuY1xuaW5kZXggNzYyZDliNmJjNzkyZjEuLjY0MTg4OTZjOWRmNjYwIDEwMDY0NFxuLS0tIGEvbW0vcGFnZV9hbGxvYy5jXG4rKysgYi9tbS9wYWdlX2FsbG9jLmNcbkBAIC05Myw2ICs5MywxMyBAQCB0eXBlZGVmIGludCBfX2JpdHdpc2UgZnBpX3Q7XG4gLyogZnJlZV9wYWdlc19wcmVwYXJlKCkgaGFzIGFscmVhZHkgYmVlbiBjYWxsZWQgZm9yIHBhZ2UocykgYmVpbmcgZnJlZWQuICovXG4gI2RlZmluZSBGUElfUFJFUEFSRURcdFx0KChfX2ZvcmNlIGZwaV90KUJJVCgzKSlcbiBcbisvKlxuKyAqIFBhZ2UocykgbmVlZHMgdG8gZ28gdGhyb3VnaCBmcmVlX3BhZ2VzX3Nhbml0aXplKCksIGZvciBleGFtcGxlLCBiZWNhdXNlXG4rICogZnJlZV9wYWdlc19wcmVwYXJlKCkgY2Fubm90IHNhbml0aXplIGEgaGlnaC1vcmRlciBwYWdlIGJsb2NrIGR1ZSB0b1xuKyAqIGhhcmR3YXJlIGVycm9yIGluIHNvbWUgcGFnZShzKS5cbisgKi9cbisjZGVmaW5lIEZQSV9TQU5JVElaRVx0XHQoKF9fZm9yY2UgZnBpX3QpQklUKDQpKVxuK1xuIC8qIHByZXZlbnQgXHUwMDNlMSBfdXBkYXRlcl8gb2Ygem9uZSBwZXJjcHUgcGFnZXNldCAtXHUwMDNlaGlnaCBhbmQgLVx1MDAzZWJhdGNoIGZpZWxkcyAqL1xuIHN0YXRpYyBERUZJTkVfTVVURVgocGNwX2JhdGNoX2hpZ2hfbG9jayk7XG4gI2RlZmluZSBNSU5fUEVSQ1BVX1BBR0VMSVNUX0hJR0hfRlJBQ1RJT04gKDgpXG5AQCAtMjEwLDYgKzIxNyw4IEBAIGdmcF90IGdmcF9hbGxvd2VkX21hc2sgX19yZWFkX21vc3RseSA9IEdGUF9CT09UX01BU0s7XG4gdW5zaWduZWQgaW50IHBhZ2VibG9ja19vcmRlciBfX3JlYWRfbW9zdGx5O1xuICNlbmRpZlxuIFxuK3N0YXRpYyB2b2lkIGZyZWVfaGFzX2h3cG9pc29uZWQoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGludCBvcmRlcixcbitcdFx0XHRcdGZwaV90IGZwaV9mbGFncyk7XG4gc3RhdGljIHZvaWQgX19mcmVlX3BhZ2VzX29rKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBpbnQgb3JkZXIsXG4gXHRcdFx0ICAgIGZwaV90IGZwaV9mbGFncyk7XG4gc3RhdGljIHZvaWQgcmVzZXJ2ZV9oaWdoYXRvbWljX3BhZ2VibG9jayhzdHJ1Y3QgcGFnZSAqcGFnZSwgaW50IG9yZGVyLFxuQEAgLTEzMTEsMTQgKzEzMjAsNzMgQEAgc3RhdGljIGlubGluZSB2b2lkIHBnYWxsb2NfdGFnX3N1Yl9wYWdlcyhzdHJ1Y3QgYWxsb2NfdGFnICp0YWcsIHVuc2lnbmVkIGludCBucilcbiBcbiAjZW5kaWYgLyogQ09ORklHX01FTV9BTExPQ19QUk9GSUxJTkcgKi9cbiBcbisvKlxuKyAqIFNhbml0aXplLCB3aGljaCByZXF1aXJlcyB3cml0aW5nLCBhIGJsb2NrIG9mIHBhZ2VzIGF0IHRoZSBsYXN0IG1vbWVudCBvZlxuKyAqIHByZXBhcmluZyB0byBmcmVlaW5nIHRoZW0sIGkuZS4gX19mcmVlX3BhZ2VzX3ByZXBhcmUoKS5cbisgKi9cbitzdGF0aWMgdm9pZCBmcmVlX3BhZ2VzX3Nhbml0aXplKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBpbnQgb3JkZXIpXG4re1xuK1x0Ym9vbCBpbml0ID0gd2FudF9pbml0X29uX2ZyZWUoKTtcbitcdC8qXG4rXHQgKiBfX2thc2FuX3VucG9pc29uX3BhZ2VzKCkgc2V0cyBrYXNhbiB0YWcgb24gZXZlcnkgdGFpbCBwYWdlLCBzb1xuK1x0ICogaXQgaXMgZmluZSB0byB1c2Ugc2hvdWxkX3NraXBfa2FzYW5fcG9pc29uKCkgd2hlbiBwYWdlcyBoZXJlXG4rXHQgKiB3ZXJlIGEgc2V0IG9mIHRhaWwgcGFnZXMgZnJvbSBhIGNvbXBvdW5kIGZvbGlvLlxuK1x0ICovXG4rXHRib29sIHNraXBfa2FzYW5fcG9pc29uID0gc2hvdWxkX3NraXBfa2FzYW5fcG9pc29uKHBhZ2UpO1xuK1xuK1x0a2VybmVsX3BvaXNvbl9wYWdlcyhwYWdlLCAxIFx1MDAzY1x1MDAzYyBvcmRlcik7XG4rXG4rXHQvKlxuK1x0ICogQXMgbWVtb3J5IGluaXRpYWxpemF0aW9uIG1pZ2h0IGJlIGludGVncmF0ZWQgaW50byBLQVNBTixcbitcdCAqIEtBU0FOIHBvaXNvbmluZyBhbmQgbWVtb3J5IGluaXRpYWxpemF0aW9uIGNvZGUgbXVzdCBiZVxuK1x0ICoga2VwdCB0b2dldGhlciB0byBhdm9pZCBkaXNjcmVwYW5jaWVzIGluIGJlaGF2aW9yLlxuK1x0ICpcbitcdCAqIFdpdGggaGFyZHdhcmUgdGFnLWJhc2VkIEtBU0FOLCBtZW1vcnkgdGFncyBtdXN0IGJlIHNldCBiZWZvcmUgdGhlXG4rXHQgKiBwYWdlIGJlY29tZXMgdW5hdmFpbGFibGUgdmlhIGRlYnVnX3BhZ2VhbGxvYyBvciBhcmNoX2ZyZWVfcGFnZS5cbitcdCAqL1xuK1x0aWYgKCFza2lwX2thc2FuX3BvaXNvbikge1xuK1x0XHRrYXNhbl9wb2lzb25fcGFnZXMocGFnZSwgb3JkZXIsIGluaXQpO1xuK1xuK1x0XHQvKiBNZW1vcnkgaXMgYWxyZWFkeSBpbml0aWFsaXplZCBpZiBLQVNBTiBkaWQgaXQgaW50ZXJuYWxseS4gKi9cbitcdFx0aWYgKGthc2FuX2hhc19pbnRlZ3JhdGVkX2luaXQoKSlcbitcdFx0XHRpbml0ID0gZmFsc2U7XG4rXHR9XG4rXHRpZiAoaW5pdClcbitcdFx0Y2xlYXJfaGlnaHBhZ2VzX2thc2FuX3RhZ2dlZChwYWdlLCAxIFx1MDAzY1x1MDAzYyBvcmRlcik7XG4rXG4rXHQvKlxuK1x0ICogYXJjaF9mcmVlX3BhZ2UoKSBjYW4gbWFrZSB0aGUgcGFnZSdzIGNvbnRlbnRzIGluYWNjZXNzaWJsZS4gIHMzOTBcbitcdCAqIGRvZXMgdGhpcy4gIFNvIG5vdGhpbmcgd2hpY2ggY2FuIGFjY2VzcyB0aGUgcGFnZSdzIGNvbnRlbnRzIHNob3VsZFxuK1x0ICogaGFwcGVuIGFmdGVyIHRoaXMuXG4rXHQgKi9cbitcdGFyY2hfZnJlZV9wYWdlKHBhZ2UsIG9yZGVyKTtcbitcbitcdGRlYnVnX3BhZ2VhbGxvY191bm1hcF9wYWdlcyhwYWdlLCAxIFx1MDAzY1x1MDAzYyBvcmRlcik7XG4rfVxuK1xuKy8qXG4rICogUmV0dXJuc1xuKyAqIC0gdHJ1ZTogY2hlY2tzIGFuZCBwcmVwYXJhdGlvbnMgYWxsIGdvb2QsIGNhbGxlciBjYW4gcHJvY2VlZCBmcmVlaW5nLlxuKyAqIC0gZmFsc2U6IGRvIG5vdCBwcm9jZWVkIGZyZWVpbmcgZm9yIG9uZSBvZiB0aGUgZm9sbG93aW5nIHJlYXNvbnM6XG4rICogICAxLiBTb21lIGNoZWNrIGZhaWxlZCBzbyBpdCBpcyBub3Qgc2FmZSB0byBwcm9jZWVkIGZyZWVpbmcuXG4rICogICAyLiBBIGNvbXBvdW5kIHBhZ2UgaGFzIHNvbWUgSFdQb2lzb24gcGFnZXMuIFRoZSBoZWFsdGh5IHBhZ2VzXG4rICogICAgICBhcmUgYWxyZWFkeSBzYWZlbHkgZnJlZWQsIGFuZCB0aGUgSFdQb2lzb24gb25lcyBpc29sYXRlZC5cbisgKi9cbiBzdGF0aWMgX19hbHdheXNfaW5saW5lIGJvb2wgX19mcmVlX3BhZ2VzX3ByZXBhcmUoc3RydWN0IHBhZ2UgKnBhZ2UsXG4gXHRcdHVuc2lnbmVkIGludCBvcmRlciwgZnBpX3QgZnBpX2ZsYWdzKVxuIHtcbiBcdGludCBiYWQgPSAwO1xuLVx0Ym9vbCBza2lwX2thc2FuX3BvaXNvbiA9IHNob3VsZF9za2lwX2thc2FuX3BvaXNvbihwYWdlKTtcbi1cdGJvb2wgaW5pdCA9IHdhbnRfaW5pdF9vbl9mcmVlKCk7XG4gXHRib29sIGNvbXBvdW5kID0gUGFnZUNvbXBvdW5kKHBhZ2UpO1xuIFx0c3RydWN0IGZvbGlvICpmb2xpbyA9IHBhZ2VfZm9saW8ocGFnZSk7XG4rXHQvKlxuK1x0ICogV2hlbiBkZWFsaW5nIHdpdGggY29tcG91bmQgcGFnZSwgUEdfaGFzX2h3cG9pc29uZWQgaXMgY2xlYXJlZFxuK1x0ICogd2l0aCBQQUdFX0ZMQUdTX1NFQ09ORC4gU28gdGhlIGNoZWNrIG11c3QgYmUgZG9uZSBmaXJzdC5cbitcdCAqXG4rXHQgKiBOb3RlIHdlIGNhbid0IGV4Y2x1ZGUgUEdfaGFzX2h3cG9pc29uZWQgZnJvbSBQQUdFX0ZMQUdTX1NFQ09ORC5cbitcdCAqIEJlY2F1c2UgUEdfaGFzX2h3cG9pc29uZWQgPT0gUEdfYWN0aXZlLCBmcmVlX3BhZ2VfaXNfYmFkKCkgd2lsbFxuK1x0ICogY29uZnVzZSBhbmQgY29tcGxhaW50IHRoYXQgdGhlIGZpcnN0IHRhaWwgcGFnZSBpcyBzdGlsbCBhY3RpdmUuXG4rXHQgKi9cbitcdGJvb2wgc2hvdWxkX2ZoaCA9IGNvbXBvdW5kIFx1MDAyNlx1MDAyNiBmb2xpb190ZXN0X2hhc19od3BvaXNvbmVkKGZvbGlvKTtcbiBcbiBcdGlmIChmcGlfZmxhZ3MgXHUwMDI2IEZQSV9QUkVQQVJFRClcbiBcdFx0cmV0dXJuIHRydWU7XG5AQCAtMTQxNiwzNCArMTQ4NCwxOSBAQCBzdGF0aWMgX19hbHdheXNfaW5saW5lIGJvb2wgX19mcmVlX3BhZ2VzX3ByZXBhcmUoc3RydWN0IHBhZ2UgKnBhZ2UsXG4gXHRcdFx0XHRcdCAgIFBBR0VfU0laRSBcdTAwM2NcdTAwM2Mgb3JkZXIpO1xuIFx0fVxuIFxuLVx0a2VybmVsX3BvaXNvbl9wYWdlcyhwYWdlLCAxIFx1MDAzY1x1MDAzYyBvcmRlcik7XG4tXG4gXHQvKlxuLVx0ICogQXMgbWVtb3J5IGluaXRpYWxpemF0aW9uIG1pZ2h0IGJlIGludGVncmF0ZWQgaW50byBLQVNBTixcbi1cdCAqIEtBU0FOIHBvaXNvbmluZyBhbmQgbWVtb3J5IGluaXRpYWxpemF0aW9uIGNvZGUgbXVzdCBiZVxuLVx0ICoga2VwdCB0b2dldGhlciB0byBhdm9pZCBkaXNjcmVwYW5jaWVzIGluIGJlaGF2aW9yLlxuK1x0ICogQWZ0ZXIgYnJlYWtpbmcgZG93biBjb21wb3VuZCBwYWdlIGFuZCBkZWFsaW5nIHdpdGggcGFnZSBtZXRhZGF0YVxuK1x0ICogKGUuZy4gcGFnZSBvd25lciBhbmQgcGFnZSBhbGxvYyB0YWdzKSwgdGFrZSBhIHNob3J0Y3V0IGlmIHRoaXNcbitcdCAqIHdhcyBhIGNvbXBvdW5kIHBhZ2UgY29udGFpbmluZyBjZXJ0YWluIEhXUG9pc29uIHN1YnBhZ2VzLlxuIFx0ICpcbi1cdCAqIFdpdGggaGFyZHdhcmUgdGFnLWJhc2VkIEtBU0FOLCBtZW1vcnkgdGFncyBtdXN0IGJlIHNldCBiZWZvcmUgdGhlXG4tXHQgKiBwYWdlIGJlY29tZXMgdW5hdmFpbGFibGUgdmlhIGRlYnVnX3BhZ2VhbGxvYyBvciBhcmNoX2ZyZWVfcGFnZS5cbitcdCAqIEZQSV9TQU5JVElaRSB0byByZW1lbWJlciBmcmVlX3BhZ2VzX3Nhbml0aXplKCkgaGVhbHRoeSBwYWdlcy5cbiBcdCAqL1xuLVx0aWYgKCFza2lwX2thc2FuX3BvaXNvbikge1xuLVx0XHRrYXNhbl9wb2lzb25fcGFnZXMocGFnZSwgb3JkZXIsIGluaXQpO1xuLVxuLVx0XHQvKiBNZW1vcnkgaXMgYWxyZWFkeSBpbml0aWFsaXplZCBpZiBLQVNBTiBkaWQgaXQgaW50ZXJuYWxseS4gKi9cbi1cdFx0aWYgKGthc2FuX2hhc19pbnRlZ3JhdGVkX2luaXQoKSlcbi1cdFx0XHRpbml0ID0gZmFsc2U7XG4rXHRpZiAoc2hvdWxkX2ZoaCkge1xuK1x0XHRmcmVlX2hhc19od3BvaXNvbmVkKHBhZ2UsIG9yZGVyLCBmcGlfZmxhZ3MgfCBGUElfU0FOSVRJWkUpO1xuK1x0XHRyZXR1cm4gZmFsc2U7XG4gXHR9XG4tXHRpZiAoaW5pdClcbi1cdFx0Y2xlYXJfaGlnaHBhZ2VzX2thc2FuX3RhZ2dlZChwYWdlLCAxIFx1MDAzY1x1MDAzYyBvcmRlcik7XG4tXG4tXHQvKlxuLVx0ICogYXJjaF9mcmVlX3BhZ2UoKSBjYW4gbWFrZSB0aGUgcGFnZSdzIGNvbnRlbnRzIGluYWNjZXNzaWJsZS4gIHMzOTBcbi1cdCAqIGRvZXMgdGhpcy4gIFNvIG5vdGhpbmcgd2hpY2ggY2FuIGFjY2VzcyB0aGUgcGFnZSdzIGNvbnRlbnRzIHNob3VsZFxuLVx0ICogaGFwcGVuIGFmdGVyIHRoaXMuXG4tXHQgKi9cbi1cdGFyY2hfZnJlZV9wYWdlKHBhZ2UsIG9yZGVyKTtcbiBcbi1cdGRlYnVnX3BhZ2VhbGxvY191bm1hcF9wYWdlcyhwYWdlLCAxIFx1MDAzY1x1MDAzYyBvcmRlcik7XG4rXHRmcmVlX3BhZ2VzX3Nhbml0aXplKHBhZ2UsIG9yZGVyKTtcbiBcbiBcdHJldHVybiB0cnVlO1xuIH1cbkBAIC02ODUyLDggKzY5MDUsOCBAQCB2b2lkIF9faW5pdCBwYWdlX2FsbG9jX3N5c2N0bF9pbml0KHZvaWQpXG4gXHRyZWdpc3Rlcl9zeXNjdGxfaW5pdChcInZtXCIsIHBhZ2VfYWxsb2Nfc3lzY3RsX3RhYmxlKTtcbiB9XG4gXG4tc3RhdGljIHZvaWQgZnJlZV9wcmVwYXJlZF9jb250aWdfcmFuZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsXG4tXHRcdHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMpXG4rc3RhdGljIHZvaWQgX19mcmVlX3ByZXBhcmVkX2NvbnRpZ19yYW5nZShzdHJ1Y3QgcGFnZSAqcGFnZSxcbitcdFx0dW5zaWduZWQgbG9uZyBucl9wYWdlcywgZnBpX3QgZnBpX2ZsYWdzKVxuIHtcbiBcdHVuc2lnbmVkIGxvbmcgcGZuID0gcGFnZV90b19wZm4ocGFnZSk7XG4gXG5AQCAtNjg2OSw4ICs2OTIyLDE1IEBAIHN0YXRpYyB2b2lkIGZyZWVfcHJlcGFyZWRfY29udGlnX3JhbmdlKHN0cnVjdCBwYWdlICpwYWdlLFxuIFx0XHQvKlxuIFx0XHQgKiBGcmVlIHRoZSBjaHVuayBhcyBhIHNpbmdsZSBibG9jay4gT3VyIGNhbGxlciBoYXMgYWxyZWFkeVxuIFx0XHQgKiBjYWxsZWQgZnJlZV9wYWdlc19wcmVwYXJlKCkgZm9yIGVhY2ggb3JkZXItMCBwYWdlLlxuK1x0XHQgKlxuK1x0XHQgKiBJZiB0aGUgb3JpZ2luYWwgY29tcG91bmQgcGFnZSBoYXMgSFdQb2lzb24gcGFnZSxcbitcdFx0ICogZnJlZV9wYWdlc19wcmVwYXJlKCkgaGFzIHRvIHNraXAgc2FuaXRpemUgYXQgdGhhdCB0aW1lLFxuK1x0XHQgKiBidXQgbm93IGl0IGlzIGdvb2QgdGltZSB0byBkbyB0aGF0LlxuIFx0XHQgKi9cbi1cdFx0X19mcmVlX2Zyb3plbl9wYWdlcyhwYWdlLCBvcmRlciwgRlBJX1BSRVBBUkVEKTtcbitcdFx0aWYgKGZwaV9mbGFncyBcdTAwMjYgRlBJX1NBTklUSVpFKVxuK1x0XHRcdGZyZWVfcGFnZXNfc2FuaXRpemUocGFnZSwgb3JkZXIpO1xuK1xuK1x0XHRfX2ZyZWVfZnJvemVuX3BhZ2VzKHBhZ2UsIG9yZGVyLCBmcGlfZmxhZ3MgfCBGUElfUFJFUEFSRUQpO1xuIFxuIFx0XHRwZm4gKz0gMVVMIFx1MDAzY1x1MDAzYyBvcmRlcjtcbiBcdFx0cGFnZSArPSAxVUwgXHUwMDNjXHUwMDNjIG9yZGVyO1xuQEAgLTY4NzgsNiArNjkzOCwxMSBAQCBzdGF0aWMgdm9pZCBmcmVlX3ByZXBhcmVkX2NvbnRpZ19yYW5nZShzdHJ1Y3QgcGFnZSAqcGFnZSxcbiBcdH1cbiB9XG4gXG4rc3RhdGljIHZvaWQgZnJlZV9wcmVwYXJlZF9jb250aWdfcmFuZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMpXG4re1xuK1x0X19mcmVlX3ByZXBhcmVkX2NvbnRpZ19yYW5nZShwYWdlLCBucl9wYWdlcywgRlBJX05PTkUpO1xuK31cbitcbiBzdGF0aWMgdm9pZCBfX2ZyZWVfY29udGlnX3JhbmdlX2NvbW1vbih1bnNpZ25lZCBsb25nIHBmbiwgdW5zaWduZWQgbG9uZyBucl9wYWdlcyxcbiBcdFx0Ym9vbCBpc19mcm96ZW4pXG4ge1xuQEAgLTY5NTEsNiArNzAxNiw2MSBAQCB2b2lkIF9fZnJlZV9jb250aWdfcmFuZ2UodW5zaWduZWQgbG9uZyBwZm4sIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMpXG4gXHRfX2ZyZWVfY29udGlnX3JhbmdlX2NvbW1vbihwZm4sIG5yX3BhZ2VzLCAvKiBpc19mcm96ZW49ICovIGZhbHNlKTtcbiB9XG4gXG4rLypcbisgKiBHaXZlbiBzb21lIGNvbnRpZ3VvdXMgcGFnZXMgdGhhdCBoYXZlIGNlcnRhaW4gbnVtYmVyIG9mIEhXUG9pc29uIHBhZ2UocyksXG4rICogZnJlZSBvbmx5IHRoZSBoZWFsdGh5IG9uZXMuXG4rICpcbisgKiBVc2VkIGF0IHRoZSBlbmQgb2YgX19mcmVlX3BhZ2VzX3ByZXBhcmUoKS4gRXZlbiBpZiBoYXZpbmcgSFdQb2lzb24gcGFnZXMsXG4rICogYnJlYWtpbmcgZG93biBjb21wb3VuZCBwYWdlIGFuZCBjbGVhcmluZyBtZXRhZGF0YSAoZS5nLiBwYWdlIG93bmVyLCBhbGxvY1xuKyAqIHRhZykgY2FuIGJlIGRvbmUgdG9nZXRoZXIgZHVyaW5nIF9fZnJlZV9wYWdlc19wcmVwYXJlKCksIHdoaWNoIHNpbXBsaWZpZXNcbisgKiB0aGUgc3BsaXR0aW5nIGhlcmU6IHVubGlrZSBfX3NwbGl0X3VubWFwcGVkX2ZvbGlvKCksIHRoZXJlIGlzIG5vIG5lZWQgdG9cbisgKiB0dXJuIHNwbGl0IHBhZ2VzIGludG8gYSBjb21wb3VuZCBwYWdlIG9yIHRvIGNhcnJ5IG1ldGFkYXRhLlxuKyAqXG4rICogSXQgc2NhbnMgZXZlcnkgcmF3IHBhZ2Ugb2YgdGhlIGNvbXBvdW5kIHBhZ2UgYW5kIGNhdXNlcyBub250cml2aWFsIG92ZXJoZWFkLlxuKyAqIFNvIG9ubHkgdXNlIHRoaXMgd2hlbiB0aGUgY29tcG91bmQgcGFnZSBjb250YWlucyBIV1BvaXNvbiBwYWdlKHMpLlxuKyAqXG4rICogSXQgYWxzbyB3b3JrcyB3aGVuIG9yZGVyID09IDAsIHJlZ2FyZGxlc3Mgb2YgUGFnZUhXUG9pc29uKCkgb3Igbm90LlxuKyAqXG4rICogVGhpcyBpbXBsZW1lbnRhdGlvbiBuZWVkcyByZXdvcmsgaW4gbWVtZGVzYyB3b3JsZC5cbisgKi9cbitzdGF0aWMgdm9pZCBmcmVlX2hhc19od3BvaXNvbmVkKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBpbnQgb3JkZXIsXG4rXHRcdFx0XHRmcGlfdCBmcGlfZmxhZ3MpXG4re1xuK1x0dW5zaWduZWQgbG9uZyBjdXJyID0gcGFnZV90b19wZm4ocGFnZSk7XG4rXHR1bnNpZ25lZCBsb25nIGVuZF9wZm4gPSBjdXJyICsgKDEgXHUwMDNjXHUwMDNjIG9yZGVyKTtcbitcdHVuc2lnbmVkIGxvbmcgbmV4dDtcbitcdHVuc2lnbmVkIGxvbmcgdG90YWxfZnJlZWQgPSAwO1xuK1x0dW5zaWduZWQgbG9uZyB0b3RhbF9od3AgPSAwO1xuK1xuK1x0d2hpbGUgKGN1cnIgXHUwMDNjIGVuZF9wZm4pIHtcbitcdFx0bmV4dCA9IGN1cnI7XG4rXG4rXHRcdHdoaWxlIChuZXh0IFx1MDAzYyBlbmRfcGZuIFx1MDAyNlx1MDAyNiAhUGFnZUhXUG9pc29uKHBmbl90b19wYWdlKG5leHQpKSlcbitcdFx0XHQrK25leHQ7XG4rXG4rXHRcdGlmIChuZXh0ICE9IGVuZF9wZm4pIHtcbitcdFx0XHQvKlxuK1x0XHRcdCAqIEF2b2lkIGFjY291bnRpbmcgZXJyb3Igd2hlbiB0aGUgcGFnZSBpcyBmcmVlZFxuK1x0XHRcdCAqIGJ5IHVucG9pc29uX21lbW9yeSgpLlxuK1x0XHRcdCAqL1xuK1x0XHRcdGNsZWFyX3BhZ2VfdGFnX3JlZihwZm5fdG9fcGFnZShuZXh0KSk7XG4rXHRcdFx0Kyt0b3RhbF9od3A7XG4rXHRcdH1cbitcbitcdFx0X19mcmVlX3ByZXBhcmVkX2NvbnRpZ19yYW5nZShwZm5fdG9fcGFnZShjdXJyKSwgbmV4dCAtIGN1cnIsXG4rXHRcdFx0XHRcdCAgICAgZnBpX2ZsYWdzKTtcbitcdFx0dG90YWxfZnJlZWQgKz0gbmV4dCAtIGN1cnI7XG4rXG4rXHRcdGlmIChuZXh0ID09IGVuZF9wZm4pXG4rXHRcdFx0YnJlYWs7XG4rXG4rXHRcdGN1cnIgPSBuZXh0ICsgMTtcbitcdH1cbitcbitcdHByX2luZm8oXCJGcmVlZCAlI2x4IHBhZ2VzLCBleGNsdWRlZCAlI2x4IEhXUG9pc29uIHBhZ2VzXFxuXCIsXG4rXHRcdHRvdGFsX2ZyZWVkLCB0b3RhbF9od3ApO1xuK31cbitcbiAjaWZkZWYgQ09ORklHX0NPTlRJR19BTExPQ1xuIC8qIFVzYWdlOiBTZWUgYWRtaW4tZ3VpZGUvZHluYW1pYy1kZWJ1Zy1ob3d0by5yc3QgKi9cbiBzdGF0aWMgdm9pZCBhbGxvY19jb250aWdfZHVtcF9wYWdlcyhzdHJ1Y3QgbGlzdF9oZWFkICpwYWdlX2xpc3QpXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vbWVtb3J5LWZhaWx1cmUuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL21lbW9yeS1mYWlsdXJlLmNcbmluZGV4IDAzMmVkOTUyMDU3YzYyLi43OGMxMDVjZTJhZjE4NSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL21lbW9yeS1mYWlsdXJlLmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL21lbW9yeS1mYWlsdXJlLmNcbkBAIC0xOCw2ICsxOCw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbWFnaWMuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2Vycm5vLmhcdTAwM2VcbiBcbisjaW5jbHVkZSBcImh1Z2VwYWdlX3NldHRpbmdzLmhcIlxuICNpbmNsdWRlIFwidm1fdXRpbC5oXCJcbiBcbiBlbnVtIGluamVjdF90eXBlIHtcbkBAIC0yNyw2ICsyOCw3IEBAIGVudW0gaW5qZWN0X3R5cGUge1xuIFxuIGVudW0gcmVzdWx0X3R5cGUge1xuIFx0TUFEVl9IQVJEX0FOT04sXG4rXHRNQURWX0hBUkRfQU5PTl9IVUdFVExCLFxuIFx0TUFEVl9IQVJEX0NMRUFOX1BBR0VDQUNIRSxcbiBcdE1BRFZfSEFSRF9ESVJUWV9QQUdFQ0FDSEUsXG4gXHRNQURWX1NPRlRfQU5PTixcbkBAIC00Nyw2ICs0OSw4IEBAIEZJWFRVUkUobWVtb3J5X2ZhaWx1cmUpXG4gXHRpbnQgcGFnZW1hcF9mZDtcbiBcdGludCBrcGFnZWZsYWdzX2ZkO1xuIFx0Ym9vbCB0cmlnZ2VyZWQ7XG4rXHQvKiBOdW1iZXIgb2YgaW5pdGlhbCBIdWdlVExCIHBhZ2VzIHdpdGggZGVmYXVsdCBwYWdlIHNpemUuICovXG4rXHR1bnNpZ25lZCBsb25nIG5yX2h1Z2V0bGJfcGFnZXM7XG4gfTtcbiBcbiBGSVhUVVJFX1ZBUklBTlQobWVtb3J5X2ZhaWx1cmUpXG5AQCAtMTU3LDYgKzE2MSw3IEBAIHN0YXRpYyB2b2lkIGNoZWNrKHN0cnVjdCBfX3Rlc3RfbWV0YWRhdGEgKl9tZXRhZGF0YSwgRklYVFVSRV9EQVRBKG1lbW9yeV9mYWlsdXJlXG4gXHRcdCAgdm9pZCAqdmFkZHIsIGVudW0gcmVzdWx0X3R5cGUgdHlwZSwgaW50IHNldGptcClcbiB7XG4gXHR1bnNpZ25lZCBsb25nIHNpemU7XG4rXHR1bnNpZ25lZCBsb25nIG5yX2h1Z2V0bGJfcGFnZXM7XG4gXHR1aW50NjRfdCBwZm5fZmxhZ3M7XG4gXG4gXHRzd2l0Y2ggKHR5cGUpIHtcbkBAIC0xNzQsNiArMTc5LDcgQEAgc3RhdGljIHZvaWQgY2hlY2soc3RydWN0IF9fdGVzdF9tZXRhZGF0YSAqX21ldGFkYXRhLCBGSVhUVVJFX0RBVEEobWVtb3J5X2ZhaWx1cmVcbiBcdFx0QVNTRVJUX05FKHBhZ2VtYXBfZ2V0X3BmbihzZWxmLVx1MDAzZXBhZ2VtYXBfZmQsIHZhZGRyKSwgc2VsZi1cdTAwM2VwZm4pO1xuIFx0XHRicmVhaztcbiBcdGNhc2UgTUFEVl9IQVJEX0FOT046XG4rXHRjYXNlIE1BRFZfSEFSRF9BTk9OX0hVR0VUTEI6XG4gXHRjYXNlIE1BRFZfSEFSRF9ESVJUWV9QQUdFQ0FDSEU6XG4gXHRcdC8qIFRoZSBTSUdCVVMgc2lnbmFsIHNob3VsZCBoYXZlIGJlZW4gcmVjZWl2ZWQuICovXG4gXHRcdEFTU0VSVF9FUShzZXRqbXAsIDEpO1xuQEAgLTE4NCw4ICsxOTAsMTUgQEAgc3RhdGljIHZvaWQgY2hlY2soc3RydWN0IF9fdGVzdF9tZXRhZGF0YSAqX21ldGFkYXRhLCBGSVhUVVJFX0RBVEEobWVtb3J5X2ZhaWx1cmVcbiBcdFx0QVNTRVJUX0VRKDFVTCBcdTAwM2NcdTAwM2Mgc2lnaW5mby5zaV9hZGRyX2xzYiwgc2VsZi1cdTAwM2VwYWdlX3NpemUpO1xuIFx0XHRBU1NFUlRfRVEoc2lnaW5mby5zaV9hZGRyLCB2YWRkcik7XG4gXG4tXHRcdC8qIFhYWCBDaGVjayBiYWNraW5nIHB0ZSBpcyBod3BvaXNvbiBlbnRyeSB3aGVuIHN1cHBvcnRlZC4gKi9cbi1cdFx0QVNTRVJUX1RSVUUocGFnZW1hcF9pc19zd2FwcGVkKHNlbGYtXHUwMDNlcGFnZW1hcF9mZCwgdmFkZHIpKTtcbitcdFx0aWYgKHR5cGUgIT0gTUFEVl9IQVJEX0FOT05fSFVHRVRMQilcbitcdFx0XHQvKlxuK1x0XHRcdCAqIENoZWNrIGJhY2tpbmcgcHRlIGlzIGh3cG9pc29uIGVudHJ5IHdoZW4gc3VwcG9ydGVkLlxuK1x0XHRcdCAqIEFsdGhvdWdoIHRyeV90b191bm1hcF9vbmUoKSBhbHNvIGluc3RhbGxzIGh3cG9pc29uXG4rXHRcdFx0ICogZW50cnkgZm9yIEh1Z2VUTEIsIHBhZ2VtYXBfaHVnZXRsYl9yYW5nZSgpIGRvZXNuJ3RcbitcdFx0XHQgKiBwYXJzZSBzd2FwIGVudHJpZXMgYXQgYWxsLlxuK1x0XHRcdCAqL1xuK1x0XHRcdEFTU0VSVF9UUlVFKHBhZ2VtYXBfaXNfc3dhcHBlZChzZWxmLVx1MDAzZXBhZ2VtYXBfZmQsIHZhZGRyKSk7XG4rXG4gXHRcdGJyZWFrO1xuIFx0ZGVmYXVsdDpcbiBcdFx0U0tJUChyZXR1cm4sIFwidW5leHBlY3RlZCBpbmplY3QgdHlwZSAlZC5cXG5cIiwgdHlwZSk7XG5AQCAtMTkzLDcgKzIwNiwxOSBAQCBzdGF0aWMgdm9pZCBjaGVjayhzdHJ1Y3QgX190ZXN0X21ldGFkYXRhICpfbWV0YWRhdGEsIEZJWFRVUkVfREFUQShtZW1vcnlfZmFpbHVyZVxuIFxuIFx0LyogQ2hlY2sgaWYgdGhlIHZhbHVlIG9mIEhhcmR3YXJlQ29ycnVwdGVkIGhhcyBpbmNyZWFzZWQuICovXG4gXHRBU1NFUlRfRVEoZ2V0X2hhcmR3YXJlX2NvcnJ1cHRlZF9zaXplKFx1MDAyNnNpemUpLCAwKTtcbi1cdEFTU0VSVF9FUShzaXplLCBzZWxmLVx1MDAzZWNvcnJ1cHRlZF9zaXplICsgc2VsZi1cdTAwM2VwYWdlX3NpemUgLyAxMDI0KTtcbitcbitcdGlmICh0eXBlID09IE1BRFZfSEFSRF9BTk9OX0hVR0VUTEIpIHtcbitcdFx0LypcbitcdFx0ICogT25seSBvbmUgcGFnZSBpcyBoYXJkd2FyZSBjb3JydXB0ZWQ7IHRoZSByZXN0IHNob3VsZCBhbGwgYmVcbitcdFx0ICogcmVsZWFzZWQgdG8gYnVkZHkgYWxsb2NhdG9yLlxuK1x0XHQgKi9cbitcdFx0QVNTRVJUX0VRKHNpemUsIHNlbGYtXHUwMDNlY29ycnVwdGVkX3NpemUgKyBnZXRwYWdlc2l6ZSgpIC8gMTAyNCk7XG4rXHRcdC8qIEh1Z2VUTEIgc2hvdWxkIGhhdmUgbG9zdCB0aGUgSFdQb2lzb24gSHVnZVRMQiBwYWdlLiAqL1xuK1x0XHRucl9odWdldGxiX3BhZ2VzID0gaHVnZXRsYl9ucl9kZWZhdWx0X3BhZ2VzKCk7XG4rXHRcdEFTU0VSVF9FUShucl9odWdldGxiX3BhZ2VzICsgMSwgc2VsZi1cdTAwM2Vucl9odWdldGxiX3BhZ2VzKTtcbitcdH0gZWxzZSB7XG4rXHRcdEFTU0VSVF9FUShzaXplLCBzZWxmLVx1MDAzZWNvcnJ1cHRlZF9zaXplICsgc2VsZi1cdTAwM2VwYWdlX3NpemUgLyAxMDI0KTtcbitcdH1cbiBcbiBcdC8qIENoZWNrIGlmIEhXUG9pc29uIGZsYWcgaXMgc2V0LiAqL1xuIFx0QVNTRVJUX0VRKHBhZ2VmbGFnc19nZXQoc2VsZi1cdTAwM2VwZm4sIHNlbGYtXHUwMDNla3BhZ2VmbGFnc19mZCwgXHUwMDI2cGZuX2ZsYWdzKSwgMCk7XG5AQCAtMjQ3LDYgKzI3Miw0NSBAQCBURVNUX0YobWVtb3J5X2ZhaWx1cmUsIGFub24pXG4gXHRBU1NFUlRfRVEobXVubWFwKGFkZHIsIHNlbGYtXHUwMDNlcGFnZV9zaXplKSwgMCk7XG4gfVxuIFxuK1RFU1RfRihtZW1vcnlfZmFpbHVyZSwgYW5vbl9odWdldGxiKVxuK3tcbitcdGNoYXIgKmFkZHI7XG4rXHRpbnQgcmV0O1xuK1x0Y29uc3QgdW5zaWduZWQgbG9uZyBucl9hbGxvY19odWdldGxiX3BhZ2VzID0gNDtcbitcdHVuc2lnbmVkIGxvbmcgYWxsb2Nfc2l6ZTtcbitcbitcdGlmICh2YXJpYW50LVx1MDAzZXR5cGUgPT0gTUFEVl9TT0ZUKVxuK1x0XHRTS0lQKHJldHVybiwgXCJTb2Z0IG9mZmxpbmUgdGVzdCBpcyBub3QgaW1wbGVtZW50ZWRcIik7XG4rXG4rXHQvKiBIdWdlVExCIHNldHRpbmdzIHdpbGwgYmUgYXV0b21hdGljYWxseSByZXN0b3JlZCB3aGVuIHRlc3QgZXhpdHMuICovXG4rXHRodWdldGxiX3NldHVwX2RlZmF1bHQobnJfYWxsb2NfaHVnZXRsYl9wYWdlcyk7XG4rXG4rXHRhbGxvY19zaXplID0gZGVmYXVsdF9odWdlX3BhZ2Vfc2l6ZSgpICogbnJfYWxsb2NfaHVnZXRsYl9wYWdlcztcbitcdHNlbGYtXHUwMDNlcGFnZV9zaXplID0gZGVmYXVsdF9odWdlX3BhZ2Vfc2l6ZSgpO1xuK1x0c2VsZi1cdTAwM2Vucl9odWdldGxiX3BhZ2VzID0gaHVnZXRsYl9ucl9kZWZhdWx0X3BhZ2VzKCk7XG4rXG4rXHRhZGRyID0gbW1hcCgwLCBhbGxvY19zaXplLCBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFLFxuK1x0XHQgICAgTUFQX0FOT05ZTU9VUyB8IE1BUF9QUklWQVRFIHwgTUFQX0hVR0VUTEIsIC0xLCAwKTtcbitcdGlmIChhZGRyID09IE1BUF9GQUlMRUQpXG4rXHRcdFNLSVAocmV0dXJuLCBcIm1tYXAgZmFpbGVkLCBub3QgZW5vdWdoIG1lbW9yeSBvciBodWdldGxiIG5vdCBzdXBwb3J0ZWQuXFxuXCIpO1xuK1x0bWVtc2V0KGFkZHIsIDB4Y2UsIGFsbG9jX3NpemUpO1xuK1xuK1x0cHJlcGFyZShfbWV0YWRhdGEsIHNlbGYsIGFkZHIpO1xuK1xuK1x0cmV0ID0gc2lnc2V0am1wKHNpZ25hbF9qbXBfYnVmLCAxKTtcbitcdGlmICghc2VsZi1cdTAwM2V0cmlnZ2VyZWQpIHtcbitcdFx0c2VsZi1cdTAwM2V0cmlnZ2VyZWQgPSB0cnVlO1xuK1x0XHRBU1NFUlRfRVEodmFyaWFudC1cdTAwM2VpbmplY3Qoc2VsZiwgYWRkciksIDApO1xuK1x0XHRGT1JDRV9SRUFEKCphZGRyKTtcbitcdH1cbitcbitcdGNoZWNrKF9tZXRhZGF0YSwgc2VsZiwgYWRkciwgTUFEVl9IQVJEX0FOT05fSFVHRVRMQiwgcmV0KTtcbitcbitcdGNsZWFudXAoX21ldGFkYXRhLCBzZWxmLCBhZGRyKTtcbitcbitcdEFTU0VSVF9FUShtdW5tYXAoYWRkciwgYWxsb2Nfc2l6ZSksIDApO1xuK31cbitcbiBzdGF0aWMgaW50IHByZXBhcmVfZmlsZShjb25zdCBjaGFyICpmbmFtZSwgdW5zaWduZWQgbG9uZyBzaXplKVxuIHtcbiBcdGludCBmZDtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA1VDE4OjIxOjI0LjkxODg0NDE3NloiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjgzNzkzNTkyNTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgS2VybmVsIFBhdGNoIGZvciBGdXp6aW5nIFJlbGV2YW5jZSoqXG5cbk9rYXksIHNvIEkndmUgZ290IHRoaXMgcGF0Y2ggaW4gZnJvbnQgb2YgbWUsIGFuZCBteSBpbW1lZGlhdGUgY29uY2VybiBpcyB3aGV0aGVyIGl0IGludHJvZHVjZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHNpZ25pZmljYW50IGVub3VnaCB0byB3YXJyYW50IGZ1enppbmcuIFRoZSBmaWxlcyB0b3VjaGVkIGFyZTogYGluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oYCwgYG1tL21lbW9yeS1mYWlsdXJlLmNgLCBgbW0vcGFnZV9hbGxvYy5jYCwgYW5kIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9tZW1vcnktZmFpbHVyZS5jYC4gVGhhdCdzIGFscmVhZHkgdGVsbGluZyAtIHRoZSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbSBpcyBiZWluZyB0d2Vha2VkLlxuXG5Mb29raW5nIGNsb3NlcjpcblxuMS4gIEluIGBpbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaGAsIGl0IGxvb2tzIGxpa2UgYSBjb25kaXRpb25hbCBwcmVwcm9jZXNzb3IgbWFjcm8sIGBQYWdlSGFzSFdQb2lzb25lZGAsIGhhcyBiZWVuIHVwZGF0ZWQgdG8gYWNjb3VudCBmb3IgYm90aCBgQ09ORklHX0hVR0VUTEJfUEFHRWAgYW5kIGBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VgLCBub3QganVzdCB0aGUgbGF0dGVyLlxuXG4yLiAgYG1tL21lbW9yeS1mYWlsdXJlLmNgIGlzIHNlZWluZyBzb21lIHNpZ25pZmljYW50IGFkZGl0aW9ucyBhbmQgbW9kaWZpY2F0aW9ucy4gIFRoZXJlJ3MgYSBuZXcgZnVuY3Rpb24sIGBfX2h1Z2VwYWdlX2hhbmRsZV9wb2lzb25gLCB3aGljaCBhcHBlYXJzIHRvIGJlIGhhbmRsaW5nIHBvaXNvbmVkIGh1Z2UgcGFnZXMuIEl0IGNhbGxzIGBkaXNzb2x2ZV9mcmVlX2h1Z2V0bGJfZm9saW8oKWAgYW5kIHJlcGxhY2VzIGNhbGxzIHRvIGBfX3BhZ2VfaGFuZGxlX3BvaXNvbigpYC4gIFBsdXMsIGBmb2xpb19jbGVhcl9odWdldGxiX2h3cG9pc29uKClgIG5vdyBjYWxscyBgZm9saW9fc2V0X2hhc19od3BvaXNvbmVkKClgLiBBbGwgb2YgdGhpcyBzY3JlYW1zIEh1Z2VUTEIgYW5kIG1lbW9yeSBmYWlsdXJlIGludGVyYWN0aW9uLlxuXG4zLiAgYG1tL3BhZ2VfYWxsb2MuY2AgaXMgZ2V0dGluZyBldmVuIG1vcmUgaW50ZXJlc3RpbmcuIEl0J3MgYWRkaW5nIGFuIGBGUElfU0FOSVRJWkVgIGZsYWcsIGFuZCBhIG5ldyBgZnJlZV9wYWdlc19zYW5pdGl6ZSgpYCBmdW5jdGlvbi4gIFRoZSBleGlzdGluZyBgX19mcmVlX3BhZ2VzX3ByZXBhcmUoKWAgbm93IGNoZWNrcyBmb3IgYGZvbGlvX3Rlc3RfaGFzX2h3cG9pc29uZWQoKWAgYW5kIGNhbGxzIGBmcmVlX2hhc19od3BvaXNvbmVkKClgLCB3aGljaCBsb29rcyBsaWtlIGl0J3Mgc3BlY2lmaWNhbGx5IGRlYWxpbmcgd2l0aCBmcmVlaW5nIHBhZ2VzIHRoYXQgYXJlIG1hcmtlZCBhcyBoYXZpbmcgSFdQb2lzb25lZCBwYWdlcywgc2tpcHBpbmcgdGhlIHBvaXNvbmVkIG9uZXMgYW5kIG9ubHkgZnJlZWluZyBoZWFsdGh5IG9uZXMuIEFkZGl0aW9uYWxseSwgYGZyZWVfcHJlcGFyZWRfY29udGlnX3JhbmdlKClgIG5vdyBjb25kaXRpb25hbGx5IGNhbGxzIGBmcmVlX3BhZ2VzX3Nhbml0aXplKClgLlxuXG40LiAgRmluYWxseSwgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL21lbW9yeS1mYWlsdXJlLmNgIGFkZHMgYSBuZXcgdGVzdCBjYWxsZWQgYGFub25faHVnZXRsYmAuXG5cblRoaXMgcGF0Y2ggaXMgdW5kZW5pYWJseSBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBkaXJlY3RseSBpbXBhY3RpbmcgaG93IHRoZSBrZXJuZWwgaGFuZGxlcyBtZW1vcnkgZmFpbHVyZXMsIHNwZWNpZmljYWxseSByZWxhdGVkIHRvIEhXUG9pc29uIGFuZCBIdWdlVExCIHBhZ2VzLiBHaXZlbiB0aGUgc2NvcGUgb2YgY2hhbmdlcywgaXQgd2FycmFudHMgYSBjbG9zZXIgbG9vaywgZXNwZWNpYWxseSBmb2N1c2luZyBvbiBgQ09ORklHX01FTU9SWV9GQUlMVVJFYCwgYENPTkZJR19IVUdFVExCX1BBR0VgLCBhbmQgYENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRWAuXG5cbkknbSBwYXJ0aWN1bGFybHkgaW50ZXJlc3RlZCBpbiBgX19odWdlcGFnZV9oYW5kbGVfcG9pc29uYCAoaW4gYG1tL21lbW9yeS1mYWlsdXJlLmNgKSBhbmQgYGZyZWVfaGFzX2h3cG9pc29uZWRgIChpbiBgbW0vcGFnZV9hbGxvYy5jYCkuIEkgbmVlZCB0byBjaGVjayBob3cgdGhlc2UgZnVuY3Rpb25zIGFyZSByZWFjaGFibGUsIHNvIEknbGwgYmUgdXNpbmcgYGRlZmF1bHRfYXBpOmdyZXBwZXJgIHRvIHNlZSB3aGVyZSB0aGV5IGFyZSBjYWxsZWQgYW5kIGlmIHRoZXkgYXJlIHJlbGV2YW50IHRvIGZ1enppbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc1MzgsIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MzAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wNVQxODoyMTozMy4yOTgyMDU2OThaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mjc2NTE3OTc4OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJfX2h1Z2VwYWdlX2hhbmRsZV9wb2lzb25cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vbWVtb3J5LWZhaWx1cmUuYz0xNzQ9c3RhdGljIERFRklORV9NVVRFWChwZm5fc3BhY2VfbG9jayk7XFxuLS1cXG5tbS9tZW1vcnktZmFpbHVyZS5jLTE4MS0gKi9cXG5tbS9tZW1vcnktZmFpbHVyZS5jOjE4MjpzdGF0aWMgaW50IF9faHVnZXBhZ2VfaGFuZGxlX3BvaXNvbihzdHJ1Y3QgcGFnZSAqcGFnZSlcXG5tbS9tZW1vcnktZmFpbHVyZS5jLTE4My17XFxuLS1cXG5tbS9tZW1vcnktZmFpbHVyZS5jPTExNzI9c3RhdGljIGludCBtZV9odWdlX3BhZ2Uoc3RydWN0IHBhZ2Vfc3RhdGUgKnBzLCBzdHJ1Y3QgcGFnZSAqcClcXG4tLVxcbm1tL21lbW9yeS1mYWlsdXJlLmMtMTE5Mi1cXHRcXHRmb2xpb19wdXQoZm9saW8pO1xcbm1tL21lbW9yeS1mYWlsdXJlLmM6MTE5MzpcXHRcXHRpZiAoX19odWdlcGFnZV9oYW5kbGVfcG9pc29uKHApKSB7XFxubW0vbWVtb3J5LWZhaWx1cmUuYy0xMTk0LVxcdFxcdFxcdHJlcyA9IE1GX0ZBSUxFRDtcXG4tLVxcbm1tL21lbW9yeS1mYWlsdXJlLmM9MjEwNz1zdGF0aWMgaW50IHRyeV9tZW1vcnlfZmFpbHVyZV9odWdldGxiKHVuc2lnbmVkIGxvbmcgcGZuLCBpbnQgZmxhZ3MpXFxuLS1cXG5tbS9tZW1vcnktZmFpbHVyZS5jLTIxNTktXFx0XFx0Zm9saW9fdW5sb2NrKGZvbGlvKTtcXG5tbS9tZW1vcnktZmFpbHVyZS5jOjIxNjA6XFx0XFx0aWYgKF9faHVnZXBhZ2VfaGFuZGxlX3BvaXNvbihwKSkge1xcbm1tL21lbW9yeS1mYWlsdXJlLmMtMjE2MS1cXHRcXHRcXHRyZXMgPSBNRl9GQUlMRUQ7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA1VDE4OjIxOjM2LjA2MzM5OTQ5OFoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQwODMzMTQ1NzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIE1lbW9yeSBGYWlsdXJlIEhhbmRsaW5nKipcblxuT2theSwgc28gSSdtIGRpdmluZyBpbnRvIHRoaXMgbWVtb3J5IGZhaWx1cmUgaGFuZGxpbmcgY29kZS4gSXQgbG9va3MgbGlrZSBgbWVfaHVnZV9wYWdlYCBhbmQgYHRyeV9tZW1vcnlfZmFpbHVyZV9odWdldGxiYCBhcmUga2V5IHBsYXllcnMgaGVyZS4gSSdtIGZvY3VzaW5nIG9uIGhvdyB0aGUgc3lzdGVtIHJlc3BvbmRzIHdoZW4gbWVtb3J5IGVycm9ycyBhcmUgZGV0ZWN0ZWQuIE5vdywgYGZyZWVfaGFzX2h3cG9pc29uZWRgIGlzIGludHJpZ3VpbmcuIEl0J3MgY2FsbGVkIGZyb20gYF9fZnJlZV9wYWdlc19wcmVwYXJlYCwgd2hpY2ggaXMgYSAqdmVyeSogaG90IHBhdGgg4oCTIHRoYXQncyBzb21ldGhpbmcgSSBuZWVkIHRvIHBheSBhdHRlbnRpb24gdG8gYmVjYXVzZSBwZXJmb3JtYW5jZSBtYXR0ZXJzLiBIb3dldmVyLCBgZnJlZV9oYXNfaHdwb2lzb25lZGAgaXRzZWxmIGlzIG9ubHkgZXhlY3V0ZWQgd2hlbiBgc2hvdWxkX2ZoaGAgaXMgdHJ1ZS4gYHNob3VsZF9maGhgIHNlZW1zIHRvIGJlIGNvbmRpdGlvbmFsIG9uIGEgYGNvbXBvdW5kYCBwYWdlIGFuZCB0aGUgYGZvbGlvX3Rlc3RfaGFzX2h3cG9pc29uZWQoZm9saW8pYCByZXN1bHQuIFRoYXQgbWVhbnMgaXQgb25seSBnZXRzIGNhbGxlZCB3aGVuIGRlYWxpbmcgd2l0aCBjb21wb3VuZHMgd2l0aCBoYXJkd2FyZSBwb2lzb25pbmcuIEdpdmVuIGl0cyBjb250ZXh0LCBgZnJlZV9oYXNfaHdwb2lzb25lZGAgc2VlbXMgbGlrZSBhIHByaW1lIHRhcmdldCBmb3IgZGVlcGVyIGludmVzdGlnYXRpb24sIGEgZ29vZCBmb2N1cyBzeW1ib2wuXG5cbkFsc28sIEkgc2hvdWxkIGRlZmluaXRlbHkgY2hlY2sgYF9faHVnZXBhZ2VfaGFuZGxlX3BvaXNvbmAgYWxvbmdzaWRlIGl0LlxuXG5SaWdodCBub3csIEkgd2FudCB0byBzdGFydCBieSBleGFtaW5pbmcgYGZyZWVfaGFzX2h3cG9pc29uZWRgIGNsb3NlbHkuIExldCdzIHNlZSB3aGF0J3MgYWN0dWFsbHkgZ29pbmcgb24gdGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjkxMjgsIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNDYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDVUMTg6MjE6NDAuMTQ2NzE2OTY3WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwODQxMTA5NTEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZnJlZV9oYXNfaHdwb2lzb25lZFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9wYWdlX2FsbG9jLmM9MjE3PXVuc2lnbmVkIGludCBwYWdlYmxvY2tfb3JkZXIgX19yZWFkX21vc3RseTtcXG4tLVxcbm1tL3BhZ2VfYWxsb2MuYy0yMTktXFxubW0vcGFnZV9hbGxvYy5jOjIyMDpzdGF0aWMgdm9pZCBmcmVlX2hhc19od3BvaXNvbmVkKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBpbnQgb3JkZXIsXFxubW0vcGFnZV9hbGxvYy5jLTIyMS1cXHRcXHRcXHRcXHRmcGlfdCBmcGlfZmxhZ3MpO1xcbi0tXFxubW0vcGFnZV9hbGxvYy5jPTEzNzU9c3RhdGljIF9fYWx3YXlzX2lubGluZSBib29sIF9fZnJlZV9wYWdlc19wcmVwYXJlKHN0cnVjdCBwYWdlICpwYWdlLFxcbi0tXFxubW0vcGFnZV9hbGxvYy5jLTE0OTQtXFx0aWYgKHNob3VsZF9maGgpIHtcXG5tbS9wYWdlX2FsbG9jLmM6MTQ5NTpcXHRcXHRmcmVlX2hhc19od3BvaXNvbmVkKHBhZ2UsIG9yZGVyLCBmcGlfZmxhZ3MgfCBGUElfU0FOSVRJWkUpO1xcbm1tL3BhZ2VfYWxsb2MuYy0xNDk2LVxcdFxcdHJldHVybiBmYWxzZTtcXG4tLVxcbm1tL3BhZ2VfYWxsb2MuYz03MDE0PXZvaWQgX19mcmVlX2NvbnRpZ19yYW5nZSh1bnNpZ25lZCBsb25nIHBmbiwgdW5zaWduZWQgbG9uZyBucl9wYWdlcylcXG4tLVxcbm1tL3BhZ2VfYWxsb2MuYy03MDM1LSAqL1xcbm1tL3BhZ2VfYWxsb2MuYzo3MDM2OnN0YXRpYyB2b2lkIGZyZWVfaGFzX2h3cG9pc29uZWQoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGludCBvcmRlcixcXG5tbS9wYWdlX2FsbG9jLmMtNzAzNy1cXHRcXHRcXHRcXHRmcGlfdCBmcGlfZmxhZ3MpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA1VDE4OjIxOjQyLjIzMDg0MDAxOFoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMzNjcyMzUyMDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhbmFseXNpcyBvZiB0aG9zZSBmdW5jdGlvbiBjYWxsczpcblxuKipEaXNzZWN0aW5nIEh1Z2VwYWdlIE1hbmFnZW1lbnQqKlxuXG5Pa2F5LCBzbyBJJ20gZGlnZ2luZyBpbnRvIGhvdyBodWdlcGFnZXMgYXJlIGhhbmRsZWQuIE15IGluaXRpYWwgZm9jdXMgaXMgb24gdGhlIGBfX2h1Z2VwYWdlX2hhbmRsZV9wb2lzb25gIGZ1bmN0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgcm9sZSwgYW5kIGl0IGxvb2tzIGxpa2UgaXQncyBjcnVjaWFsLCBjb25zaWRlcmluZyBpdCdzIGNhbGxlZCBmcm9tIHR3byBrZXkgbG9jYXRpb25zLiBTcGVjaWZpY2FsbHksIGBtZV9odWdlX3BhZ2VgIGFuZCBgdHJ5X21lbW9yeV9mYWlsdXJlX2h1Z2V0bGJgLiBUaGF0IHRlbGxzIG1lIGl0J3MgbGlrZWx5IGludm9sdmVkIGluIGVycm9yIGhhbmRsaW5nIG9yIHZhbGlkYXRpb24gcmVsYXRlZCB0byBodWdlcGFnZXMsIG1heWJlIGRlYWxpbmcgd2l0aCBwb3RlbnRpYWxseSBjb3JydXB0ZWQgbWVtb3J5IHJlZ2lvbnMuIEkgbmVlZCB0byBsb29rIGNsb3NlciBhdCB3aGF0IHRob3NlIGNhbGxlcnMgZG8gdG8gZ2V0IHRoZSBmdWxsIHBpY3R1cmUuXG5cbk5leHQsIEknbGwgdHVybiBteSBhdHRlbnRpb24gdG8gYGRpc3NvbHZlX2ZyZWVfaHVnZXRsYl9mb2xpb2AuIEJhc2VkIG9uIHRoZSBuYW1lLCBpdCBzZWVtcyByZWxhdGVkIHRvIHJlbGVhc2luZyBvciBkZWFsbG9jYXRpbmcgaHVnZXBhZ2UgZm9saW9zLCB3aGljaCBpcyB0aGUgaGlnaGVyLWxldmVsIHJlcHJlc2VudGF0aW9uIG9mIGEgaHVnZXBhZ2UuIFRoZSBcImRpc3NvbHZlXCIgcGFydCBzdWdnZXN0cyBpdCBtaWdodCBiZSBoYW5kbGluZyBmcmFnbWVudGF0aW9uIG9yIGNvbWJpbmluZyBtdWx0aXBsZSBzbWFsbGVyIHJlZ2lvbnMuIEkgZXhwZWN0IHRoaXMgZnVuY3Rpb24gaGFzIGludGVyZXN0aW5nIGludGVyYWN0aW9uIHdpdGggdGhlIHBhZ2UgcmVjbGFpbSBzdWJzeXN0ZW0uIEknbGwgbmVlZCB0byBzZWUgaG93IGl0IGZpdHMgaW50byB0aGUgYnJvYWRlciBhbGxvY2F0aW9uIGFuZCBkZWFsbG9jYXRpb24gbGlmZWN5Y2xlIG9mIGh1Z2VwYWdlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6OTg5MCwiT3V0cHV0VG9rZW5zIjoyNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA1VDE4OjIxOjQ1LjU5ODA3ODQxMloiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTQ5MDUzMzkxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRpc3NvbHZlX2ZyZWVfaHVnZXRsYl9mb2xpb1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaD04ODA9c3RhdGljIGlubGluZSBpbnQgaHN0YXRlX2luZGV4KHN0cnVjdCBoc3RhdGUgKmgpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaC04ODQtXFxuaW5jbHVkZS9saW51eC9odWdldGxiLmg6ODg1OmludCBkaXNzb2x2ZV9mcmVlX2h1Z2V0bGJfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbyk7XFxuaW5jbHVkZS9saW51eC9odWdldGxiLmg6ODg2OmludCBkaXNzb2x2ZV9mcmVlX2h1Z2V0bGJfZm9saW9zKHVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuLFxcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oLTg4Ny1cXHRcXHRcXHRcXHQgICAgdW5zaWduZWQgbG9uZyBlbmRfcGZuKTtcXG4tLVxcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oPTEyMTQ9c3RhdGljIGlubGluZSBpbnQgaHN0YXRlX2luZGV4KHN0cnVjdCBoc3RhdGUgKmgpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaC0xMjE4LVxcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oOjEyMTk6c3RhdGljIGlubGluZSBpbnQgZGlzc29sdmVfZnJlZV9odWdldGxiX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuaW5jbHVkZS9saW51eC9odWdldGxiLmgtMTIyMC17XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaC0xMjIzLVxcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oOjEyMjQ6c3RhdGljIGlubGluZSBpbnQgZGlzc29sdmVfZnJlZV9odWdldGxiX2ZvbGlvcyh1bnNpZ25lZCBsb25nIHN0YXJ0X3BmbixcXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaC0xMjI1LVxcdFxcdFxcdFxcdFxcdCAgIHVuc2lnbmVkIGxvbmcgZW5kX3BmbilcXG4tLVxcbm1tL2h1Z2V0bGIuYz0xOTA2PXN0YXRpYyBzdHJ1Y3QgZm9saW8gKnJlbW92ZV9wb29sX2h1Z2V0bGJfZm9saW8oc3RydWN0IGhzdGF0ZSAqaCxcXG4tLVxcbm1tL2h1Z2V0bGIuYy0xOTQzLSAqL1xcbm1tL2h1Z2V0bGIuYzoxOTQ0OmludCBkaXNzb2x2ZV9mcmVlX2h1Z2V0bGJfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbylcXG5tbS9odWdldGxiLmMtMTk0NS17XFxuLS1cXG5tbS9odWdldGxiLmMtMjAyNy0gKiBwYXJ0IG9mIGl0IGxpZXMgd2l0aGluIHRoZSBnaXZlbiByYW5nZS5cXG5tbS9odWdldGxiLmM6MjAyODogKiBBbHNvIG5vdGUgdGhhdCBpZiBkaXNzb2x2ZV9mcmVlX2h1Z2V0bGJfZm9saW8oKSByZXR1cm5zIHdpdGggYW4gZXJyb3IsIGFsbFxcbm1tL2h1Z2V0bGIuYy0yMDI5LSAqIGZyZWUgaHVnZXRsYiBmb2xpb3MgdGhhdCB3ZXJlIGRpc3NvbHZlZCBiZWZvcmUgdGhhdCBlcnJvciBhcmUgbG9zdC5cXG5tbS9odWdldGxiLmMtMjAzMC0gKi9cXG5tbS9odWdldGxiLmM6MjAzMTppbnQgZGlzc29sdmVfZnJlZV9odWdldGxiX2ZvbGlvcyh1bnNpZ25lZCBsb25nIHN0YXJ0X3BmbiwgdW5zaWduZWQgbG9uZyBlbmRfcGZuKVxcbm1tL2h1Z2V0bGIuYy0yMDMyLXtcXG4tLVxcbm1tL2h1Z2V0bGIuYy0yMDQ3LVxcdFxcdGZvbGlvID0gcGZuX2ZvbGlvKHBmbik7XFxubW0vaHVnZXRsYi5jOjIwNDg6XFx0XFx0cmMgPSBkaXNzb2x2ZV9mcmVlX2h1Z2V0bGJfZm9saW8oZm9saW8pO1xcbm1tL2h1Z2V0bGIuYy0yMDQ5LVxcdFxcdGlmIChyYylcXG4tLVxcbm1tL21lbW9yeS1mYWlsdXJlLmM9MTc0PXN0YXRpYyBERUZJTkVfTVVURVgocGZuX3NwYWNlX2xvY2spO1xcbi0tXFxubW0vbWVtb3J5LWZhaWx1cmUuYy0xNzgtICogZGlmZmVyZW5jZSB0byBzb2Z0X29mZmxpbmUoKSBpcyB0aGF0LCBubyBIV1BvaXNvbiBzdWJwYWdlIHdpbGwgbWFrZVxcbm1tL21lbW9yeS1mYWlsdXJlLmM6MTc5OiAqIGludG8gYnVkZHkgYWxsb2NhdG9yIGFmdGVyIGEgc3VjY2Vzc2Z1bCBkaXNzb2x2ZV9mcmVlX2h1Z2V0bGJfZm9saW8oKSxcXG5tbS9tZW1vcnktZmFpbHVyZS5jLTE4MC0gKiBzbyB0YWtlX3BhZ2Vfb2ZmX2J1ZGR5KCkgaXMgdW5uZWNlc3NhcnkuXFxuLS1cXG5tbS9tZW1vcnktZmFpbHVyZS5jPTE4Mj1zdGF0aWMgaW50IF9faHVnZXBhZ2VfaGFuZGxlX3BvaXNvbihzdHJ1Y3QgcGFnZSAqcGFnZSlcXG4tLVxcbm1tL21lbW9yeS1mYWlsdXJlLmMtMTg2LVxcdC8qXFxubW0vbWVtb3J5LWZhaWx1cmUuYzoxODc6XFx0ICogQ2FuJ3QgdXNlIGRpc3NvbHZlX2ZyZWVfaHVnZXRsYl9mb2xpbygpIHdpdGhvdXQgYSByZWxpYWJsZVxcbm1tL21lbW9yeS1mYWlsdXJlLmMtMTg4LVxcdCAqIHJhd19od3BfbGlzdCB0ZWxsaW5nIHdoaWNoIHN1YnBhZ2UgaXMgSFdQb2lzb24uIFNvIGRvIG5vdCBmcmVlXFxuLS1cXG5tbS9tZW1vcnktZmFpbHVyZS5jLTE5NS1cXG5tbS9tZW1vcnktZmFpbHVyZS5jOjE5NjpcXHRyZXR1cm4gZGlzc29sdmVfZnJlZV9odWdldGxiX2ZvbGlvKGZvbGlvKTtcXG5tbS9tZW1vcnktZmFpbHVyZS5jLTE5Ny19XFxuLS1cXG5tbS9tZW1vcnktZmFpbHVyZS5jPTIwNj1zdGF0aWMgaW50IF9fcGFnZV9oYW5kbGVfcG9pc29uKHN0cnVjdCBwYWdlICpwYWdlKVxcbi0tXFxubW0vbWVtb3J5LWZhaWx1cmUuYy0yMTAtXFx0em9uZV9wY3BfZGlzYWJsZShwYWdlX3pvbmUocGFnZSkpO1xcbm1tL21lbW9yeS1mYWlsdXJlLmM6MjExOlxcdHJldCA9IGRpc3NvbHZlX2ZyZWVfaHVnZXRsYl9mb2xpbyhwYWdlX2ZvbGlvKHBhZ2UpKTtcXG5tbS9tZW1vcnktZmFpbHVyZS5jLTIxMi1cXHRpZiAoIXJldClcXG4tLVxcbm1tL21lbW9yeS1mYWlsdXJlLmM9MjE5PXN0YXRpYyBib29sIHBhZ2VfaGFuZGxlX3BvaXNvbihzdHJ1Y3QgcGFnZSAqcGFnZSwgYm9vbCBodWdlcGFnZV9vcl9mcmVlcGFnZSwgYm9vbCByZWxlYXNlKVxcbi0tXFxubW0vbWVtb3J5LWZhaWx1cmUuYy0yMjMtXFx0XFx0ICogRG9pbmcgdGhpcyBjaGVjayBmb3IgZnJlZSBwYWdlcyBpcyBhbHNvIGZpbmUgc2luY2VcXG5tbS9tZW1vcnktZmFpbHVyZS5jOjIyNDpcXHRcXHQgKiBkaXNzb2x2ZV9mcmVlX2h1Z2V0bGJfZm9saW8oKSByZXR1cm5zIDAgZm9yIG5vbi1odWdldGxiIGZvbGlvcyBhcyB3ZWxsLlxcbm1tL21lbW9yeS1mYWlsdXJlLmMtMjI1LVxcdFxcdCAqL1xcbi0tXFxubW0vbWVtb3J5X2hvdHBsdWcuYz0xOTAzPWludCBvZmZsaW5lX3BhZ2VzKHVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLFxcbi0tXFxubW0vbWVtb3J5X2hvdHBsdWcuYy0yMDM0LVxcdFxcdCAqL1xcbm1tL21lbW9yeV9ob3RwbHVnLmM6MjAzNTpcXHRcXHRyZXQgPSBkaXNzb2x2ZV9mcmVlX2h1Z2V0bGJfZm9saW9zKHN0YXJ0X3BmbiwgZW5kX3Bmbik7XFxubW0vbWVtb3J5X2hvdHBsdWcuYy0yMDM2LVxcdFxcdGlmIChyZXQpIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDVUMTg6MjE6NDcuNTQ3MTM3MjQzWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDU2ODcxNjU2MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEltcGFjdCBvZiB0aGUgTWVtb3J5IE1hbmFnZW1lbnQgUGF0Y2gqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGRlZmluaXRlbHkgZnVuY3Rpb25hbCDigJMgaXQncyBub3QganVzdCBhIHJlZmFjdG9yLiBJdCdzIHRvdWNoaW5nIHNvbWUgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBiaXRzLiBJdCBzZWVtcyB0byBiZSBjaGFuZ2luZyB0aGUgYmVoYXZpb3Igb2YgdGhlIG1lbW9yeSBmYWlsdXJlIGhhbmRsaW5nLCBwYXJ0aWN1bGFybHkgYXJvdW5kIGhvdyB3ZSBkZWFsIHdpdGggaHVnZSBwYWdlcy4gSXQncyBhbHNvIG1ha2luZyBhZGp1c3RtZW50cyB0byB0aGUgYnVkZHkgYWxsb2NhdG9yIGFuZCBob3cgaXQgcHJlcHMgcGFnZXMgZm9yIGZyZWVpbmcsIHNwZWNpZmljYWxseSB3aGVuIGhhcmR3YXJlLXBvaXNvbmVkIHN1YnBhZ2VzIGFyZSBpbnZvbHZlZC4gVGhhdCdzIGEgY3JpdGljYWwgYXJlYSwgd2UgbmVlZCB0byBiZSB2ZXJ5IGNhcmVmdWwgdGhhdCB0aGlzIGRvZXNuJ3QgaW50cm9kdWNlIGFueSByZWdyZXNzaW9ucy5cblxuVGhlIGJ1aWxkIGRlcGVuZGVuY2llcyBsb29rIHByZXR0eSBjbGVhci4gSXQncyBleHBlY3RpbmcgYE1FTU9SWV9GQUlMVVJFYCBlbmFibGVkLCB3aGljaCBpcyBzdGFuZGFyZCB3aGVuIHdlJ3JlIGRlYWxpbmcgd2l0aCB0aGlzIGxldmVsIG9mIGhhcmR3YXJlLXJlbGF0ZWQgaXNzdWVzLiBUaGUgcHJlc2VuY2Ugb2YgYEhVR0VUTEJfUEFHRWAgaXMgYWxzbyBleHBlY3RlZCwgc2luY2Ugd2UncmUgY2xlYXJseSBkZWFsaW5nIHdpdGggaHVnZSBwYWdlcywgYW5kIHRoYXQgd2lsbCBuZWVkIHRvIGJlIHdlbGwtZGVmaW5lZC4gVGhlbiwgdGhlcmUgaXMgdGhlIHBvdGVudGlhbGx5IGNvbmRpdGlvbmFsIGRlcGVuZGVuY3kgb24gYFRSQU5TUEFSRU5UX0hVR0VQQUdFYCwgd2hpY2ggc2VlbXMgbGlrZWx5LCBnaXZlbiB0aGUgYCNpZmAgc3RhdGVtZW50LiBPZiBjb3Vyc2UsIHRoZSBsb2dpYyBpcyBoYW5kbGluZyB0aGUgT1IgY2FzZSBvZiBlaXRoZXIgb2YgdGhvc2UuXG5cbkknbSBnb2luZyB0byBqdW1wIGludG8gYG1tL21lbW9yeS1mYWlsdXJlLmNgIGFuZCB0YWtlIGEgbG9vayBhdCB0aGUgS2NvbmZpZyBmaWxlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZXhhY3QgZGVwZW5kZW5jaWVzIGFuZCBhbnkgcG90ZW50aWFsIGNvbmZpZ3VyYXRpb24gY29uZmxpY3RzIGJlZm9yZSBJIHN0YXJ0IGxvb2tpbmcgYXQgdGhlIGNvZGUgaXRzZWxmLiBUaGUgS2NvbmZpZyB3aWxsIHRlbGwgdGhlIHN0b3J5IG9mIHRoZSBhcmNoaXRlY3R1cmUncyBjb25maWd1cmF0aW9uIG5lZWRzLCBhbmQgZ2l2ZSBjbHVlcyBhYm91dCB0aGUgb3ZlcmFsbCBpbXBhY3Qgb2YgdGhlIHBhdGNoLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTQ5OCwiT3V0cHV0VG9rZW5zIjoxOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wNVQxODoyMTo1Mi4xMTU4NTYxMDVaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwMjU4ODEyMDYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE1FTU9SWV9GQUlMVVJFXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL0tjb25maWc9Nzc0PWNvbmZpZyBBUkNIX1NVUFBPUlRTX01FTU9SWV9GQUlMVVJFXFxuLS1cXG5tbS9LY29uZmlnLTc3Ni1cXG5tbS9LY29uZmlnOjc3Nzpjb25maWcgTUVNT1JZX0ZBSUxVUkVcXG5tbS9LY29uZmlnLTc3OC1cXHRkZXBlbmRzIG9uIE1NVVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wNVQxODoyMTo1NC4xNDE3NDQ2MzFaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjU3NzQxOTI0NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gYEhVR0VUTEJfUEFHRWAqKlxuXG5Pa2F5LCB0aW1lIHRvIGRpZyBpbnRvIHRoZSBgSFVHRVRMQl9QQUdFYCBLY29uZmlnIG9wdGlvbi4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgdW5kZXJzdGFuZGluZyBvZiBob3cgdGhpcyBpcyBjb25maWd1cmVkIGFuZCBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIHJlc3Qgb2YgdGhlIHN5c3RlbS4gSSBzaG91bGQgcHJvYmFibHkgc3RhcnQgYnkgcXVpY2tseSB2ZXJpZnlpbmcgaXRzIGRlcGVuZGVuY2llcyBhbmQgd2hhdCBhcmNoaXRlY3R1cmVzIGFyZSBzdXBwb3J0ZWQuIEEgcXVpY2sgZ2xhbmNlIGF0IHRoZSByZWxldmFudCBkb2N1bWVudGF0aW9uIHdvdWxkIGJlIGEgZ29vZCBpZGVhIHRvIGNvbmZpcm0gSSdtIG9uIHRoZSByaWdodCB0cmFjayBiZWZvcmUgZ29pbmcgYW55IGZ1cnRoZXIuIFRoaXMgaXMgYSBjcml0aWNhbCBidWlsZGluZyBibG9jayBmb3IgbGFyZ2UgbWVtb3J5IHBhZ2VzLCBzbyB1bmRlcnN0YW5kaW5nIHRoZSBzcGVjaWZpY3MgaXMgaW1wb3J0YW50IGZvciBtZW1vcnkgbWFuYWdlbWVudCBhbmQgcGVyZm9ybWFuY2UgdHVuaW5nLiBJIGFsc28gc2hvdWxkIGNvbnNpZGVyIHRoZSBpbXBsaWNhdGlvbnMgb2YgZW5hYmxpbmcgb3IgZGlzYWJsaW5nIHRoaXMgZmVhdHVyZSBpbiByZWxhdGlvbiB0byBvdGhlciBzZXR0aW5ncy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTIwMDksIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wNVQxODoyMTo1Ni43MTkxNjY1MTRaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4NDY3MzY0NDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEhVR0VUTEJfUEFHRVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3NoL21tL0tjb25maWc9MTU4PWNob2ljZVxcbi0tXFxuYXJjaC9zaC9tbS9LY29uZmlnLTE2My1cXG5hcmNoL3NoL21tL0tjb25maWc6MTY0OmNvbmZpZyBIVUdFVExCX1BBR0VfU0laRV82NEtcXG5hcmNoL3NoL21tL0tjb25maWctMTY1LVxcdGJvb2wgXFxcIjY0a0JcXFwiXFxuLS1cXG5hcmNoL3NoL21tL0tjb25maWctMTY3LVxcbmFyY2gvc2gvbW0vS2NvbmZpZzoxNjg6Y29uZmlnIEhVR0VUTEJfUEFHRV9TSVpFXzI1NktcXG5hcmNoL3NoL21tL0tjb25maWctMTY5LVxcdGJvb2wgXFxcIjI1NmtCXFxcIlxcbi0tXFxuYXJjaC9zaC9tbS9LY29uZmlnLTE3MS1cXG5hcmNoL3NoL21tL0tjb25maWc6MTcyOmNvbmZpZyBIVUdFVExCX1BBR0VfU0laRV8xTUJcXG5hcmNoL3NoL21tL0tjb25maWctMTczLVxcdGJvb2wgXFxcIjFNQlxcXCJcXG5hcmNoL3NoL21tL0tjb25maWctMTc0LVxcbmFyY2gvc2gvbW0vS2NvbmZpZzoxNzU6Y29uZmlnIEhVR0VUTEJfUEFHRV9TSVpFXzRNQlxcbmFyY2gvc2gvbW0vS2NvbmZpZy0xNzYtXFx0Ym9vbCBcXFwiNE1CXFxcIlxcbi0tXFxuYXJjaC9zaC9tbS9LY29uZmlnLTE3OC1cXG5hcmNoL3NoL21tL0tjb25maWc6MTc5OmNvbmZpZyBIVUdFVExCX1BBR0VfU0laRV82NE1CXFxuYXJjaC9zaC9tbS9LY29uZmlnLTE4MC1cXHRib29sIFxcXCI2NE1CXFxcIlxcbi0tXFxuZnMvS2NvbmZpZz0yNjI9aWYgSFVHRVRMQkZTXFxuZnMvS2NvbmZpZzoyNjM6Y29uZmlnIEhVR0VUTEJfUEFHRV9PUFRJTUlaRV9WTUVNTUFQX0RFRkFVTFRfT05cXG5mcy9LY29uZmlnLTI2NC1cXHRib29sIFxcXCJIdWdlVExCIFZtZW1tYXAgT3B0aW1pemF0aW9uIChIVk8pIGRlZmF1bHRzIHRvIG9uXFxcIlxcbi0tXFxuZnMvS2NvbmZpZz0yNzE9ZW5kaWYgIyBIVUdFVExCRlNcXG5mcy9LY29uZmlnLTI3Mi1cXG5mcy9LY29uZmlnOjI3Mzpjb25maWcgSFVHRVRMQl9QQUdFXFxuZnMvS2NvbmZpZy0yNzQtXFx0ZGVmX2Jvb2wgSFVHRVRMQkZTXFxuLS1cXG5mcy9LY29uZmlnLTI3Ni1cXG5mcy9LY29uZmlnOjI3Nzpjb25maWcgSFVHRVRMQl9QQUdFX09QVElNSVpFX1ZNRU1NQVBcXG5mcy9LY29uZmlnLTI3OC1cXHRkZWZfYm9vbCBIVUdFVExCX1BBR0VcXG4tLVxcbm1tL0tjb25maWc9NzA2PWNvbmZpZyBBUkNIX1NVUFBPUlRTX1BNRF9TT0ZUTEVBRlxcbi0tXFxubW0vS2NvbmZpZy03MDgtXFxubW0vS2NvbmZpZzo3MDk6Y29uZmlnIEhVR0VUTEJfUEFHRV9TSVpFX1ZBUklBQkxFXFxubW0vS2NvbmZpZy03MTAtXFx0ZGVmX2Jvb2wgblxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wNVQxODoyMTo1OC41NjU5MDk4MjRaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzcxOTgxODM5NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIEkgc2VlIGl0OlxuXG4qKkRpZ2dpbmcgaW50byBIdWdlIFBhZ2VzKipcblxuT2theSwgc28gYEhVR0VUTEJfUEFHRWAgaXMgdGhlIGZlYXR1cmUgd2UncmUgaW50ZXJlc3RlZCBpbiwgYW5kIEkga25vdyBpdCByZWxpZXMgb24gYEhVR0VUTEJGU2AuIFJpZ2h0LiBNYWtlcyBzZW5zZS4gVG8gcmVhbGx5IHVuZGVyc3RhbmQgdGhlIHdob2xlIHBpY3R1cmUsIEkgbmVlZCB0byB2ZXJpZnkgdGhhdCBkZXBlbmRlbmN5IGFuZCB0aGVuLCBuYXR1cmFsbHksIGRpdmUgaW50byBgSFVHRVRMQkZTYCBpdHNlbGYuIFRpbWUgdG8gc3RhcnQgdGhlcmUuIExldCdzIHNlZSB3aGF0J3Mgd2hhdCB3aXRoIHRoZSB1bmRlcmx5aW5nIGZpbGUgc3lzdGVtLiBOZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgaXMgYWxsIHRpZWQgdG9nZXRoZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyNzg4LCJPdXRwdXRUb2tlbnMiOjE5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDVUMTg6MjI6MDIuMjg1NzMxMjRaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4ODAwMjQ1MTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEhVR0VUTEJGU1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9LY29uZmlnPTI0Nz1jb25maWcgQVJDSF9TVVBQT1JUU19IVUdFVExCRlNcXG4tLVxcbmZzL0tjb25maWctMjQ5LVxcbmZzL0tjb25maWc6MjUwOm1lbnVjb25maWcgSFVHRVRMQkZTXFxuZnMvS2NvbmZpZy0yNTEtXFx0Ym9vbCBcXFwiSHVnZVRMQiBmaWxlIHN5c3RlbSBzdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wNVQxODoyMjowNC4xNjU3NjE2ODdaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzU2NzkyMjQ4OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgY29uZmlnIG9wdGlvbnMsIHRoaW5raW5nIGFib3V0IHRoZW0gYXMgSSB3b3VsZCBpZiBJIHdlcmUgY29uc2lkZXJpbmcgdGhlbTpcblxuKipOYXZpZ2F0aW5nIHRoZSBOVU1BIExhbmRzY2FwZTogQ29uZmlndXJpbmcgSHVnZSBQYWdlcyBhbmQgTWVtb3J5IE1hbmFnZW1lbnQqKlxuXG5BbHJpZ2h0LCBzbyBJJ20gbG9va2luZyBhdCBob3cgbWVtb3J5IGlzIG1hbmFnZWQsIGFuZCBzcGVjaWZpY2FsbHkgaG93IHdlIGNhbiBiZXN0IGxldmVyYWdlIGh1Z2UgcGFnZXMuIEl0IGxvb2tzIGxpa2UgdGhlIGtleSBzdGFydGluZyBwb2ludHMgYXJlIGdvaW5nIHRvIGJlIGBIVUdFVExCRlNgIHRvIGFjdHVhbGx5IGVuYWJsZSB0aGUgaHVnZSBwYWdlIGZpbGUgc3lzdGVtLCBhbmQgdGhlbiBhbHNvIGBNRU1PUllfRkFJTFVSRWAgLSBsaWtlbHkgdG8gaGFuZGxlIGNhc2VzIHdoZXJlIGFsbG9jYXRpb24gZmFpbHMsIHdoaWNoIGlzIGltcG9ydGFudCBmb3IgYW55IHJvYnVzdCBzeXN0ZW0uXG5cbkJ1dCBiZWZvcmUgZGl2aW5nIHRvbyBkZWVwLCBJIG5lZWQgdG8gY2hlY2sgc29tZXRoaW5nIGNyaXRpY2FsIHRvIG1vZGVybiBwZXJmb3JtYW5jZTogYFRSQU5TUEFSRU5UX0hVR0VQQUdFYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hldGhlciB3ZSBjYW4gcmVseSBvbiB0aGUgc3lzdGVtIGF1dG9tYXRpY2FsbHkgbWFuYWdpbmcgdGhlIGNyZWF0aW9uIGFuZCB1c2Ugb2YgaHVnZSBwYWdlcywgb3IgaWYgd2UgbmVlZCB0byBiZSBtb3JlIGhhbmRzLW9uIHdpdGggdGhlIGNvbmZpZ3VyYXRpb24gdG8gYWNoaWV2ZSBvcHRpbWFsIHJlc3VsdHMuIEl0J3MgYSB0cmFkZS1vZmYgYmV0d2VlbiBjb252ZW5pZW5jZSBhbmQgY29udHJvbCwgYW5kIGZpZ3VyaW5nIG91dCB3aGF0IHRoZSBpZGVhbCBiYWxhbmNlIGlzIGluICp0aGlzKiBzcGVjaWZpYyBjb250ZXh0IGlzIHRoZSBuZXh0IHN0ZXAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzMDI3LCJPdXRwdXRUb2tlbnMiOjIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDVUMTg6MjI6MDcuNzMzNjg3NzY1WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODQyMzc5MDMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9LY29uZmlnPTg0Mz1jb25maWcgTU1fSURcXG4tLVxcbm1tL0tjb25maWctODQ1LVxcbm1tL0tjb25maWc6ODQ2Om1lbnVjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VcXG5tbS9LY29uZmlnLTg0Ny1cXHRib29sIFxcXCJUcmFuc3BhcmVudCBIdWdlcGFnZSBTdXBwb3J0XFxcIlxcbi0tXFxubW0vS2NvbmZpZz04NjQ9Y2hvaWNlXFxuLS1cXG5tbS9LY29uZmlnLTg2OS1cXG5tbS9LY29uZmlnOjg3MDpcXHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfQUxXQVlTXFxubW0vS2NvbmZpZy04NzEtXFx0XFx0Ym9vbCBcXFwiYWx3YXlzXFxcIlxcbi0tXFxubW0vS2NvbmZpZy04NzYtXFxubW0vS2NvbmZpZzo4Nzc6XFx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX01BRFZJU0VcXG5tbS9LY29uZmlnLTg3OC1cXHRcXHRib29sIFxcXCJtYWR2aXNlXFxcIlxcbi0tXFxubW0vS2NvbmZpZy04ODUtXFxubW0vS2NvbmZpZzo4ODY6XFx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX05FVkVSXFxubW0vS2NvbmZpZy04ODctXFx0XFx0Ym9vbCBcXFwibmV2ZXJcXFwiXFxuLS1cXG5tbS9LY29uZmlnPTg5Mz1jaG9pY2VcXG4tLVxcbm1tL0tjb25maWctOTAyLVxcbm1tL0tjb25maWc6OTAzOlxcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9TSE1FTV9IVUdFX05FVkVSXFxubW0vS2NvbmZpZy05MDQtXFx0XFx0Ym9vbCBcXFwibmV2ZXJcXFwiXFxuLS1cXG5tbS9LY29uZmlnLTkxMi1cXG5tbS9LY29uZmlnOjkxMzpcXHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfU0hNRU1fSFVHRV9BTFdBWVNcXG5tbS9LY29uZmlnLTkxNC1cXHRcXHRib29sIFxcXCJhbHdheXNcXFwiXFxuLS1cXG5tbS9LY29uZmlnLTkyMC1cXG5tbS9LY29uZmlnOjkyMTpcXHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfU0hNRU1fSFVHRV9XSVRISU5fU0laRVxcbm1tL0tjb25maWctOTIyLVxcdFxcdGJvb2wgXFxcIndpdGhpbl9zaXplXFxcIlxcbi0tXFxubW0vS2NvbmZpZy05MjgtXFxubW0vS2NvbmZpZzo5Mjk6XFx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX1NITUVNX0hVR0VfQURWSVNFXFxubW0vS2NvbmZpZy05MzAtXFx0XFx0Ym9vbCBcXFwiYWR2aXNlXFxcIlxcbi0tXFxubW0vS2NvbmZpZz05Mzg9Y2hvaWNlXFxuLS1cXG5tbS9LY29uZmlnLTk0Ny1cXG5tbS9LY29uZmlnOjk0ODpcXHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfVE1QRlNfSFVHRV9ORVZFUlxcbm1tL0tjb25maWctOTQ5LVxcdFxcdGJvb2wgXFxcIm5ldmVyXFxcIlxcbi0tXFxubW0vS2NvbmZpZy05NTYtXFxubW0vS2NvbmZpZzo5NTc6XFx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX1RNUEZTX0hVR0VfQUxXQVlTXFxubW0vS2NvbmZpZy05NTgtXFx0XFx0Ym9vbCBcXFwiYWx3YXlzXFxcIlxcbi0tXFxubW0vS2NvbmZpZy05NjQtXFxubW0vS2NvbmZpZzo5NjU6XFx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX1RNUEZTX0hVR0VfV0lUSElOX1NJWkVcXG5tbS9LY29uZmlnLTk2Ni1cXHRcXHRib29sIFxcXCJ3aXRoaW5fc2l6ZVxcXCJcXG4tLVxcbm1tL0tjb25maWctOTcyLVxcbm1tL0tjb25maWc6OTczOlxcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9UTVBGU19IVUdFX0FEVklTRVxcbm1tL0tjb25maWctOTc0LVxcdFxcdGJvb2wgXFxcImFkdmlzZVxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDVUMTg6MjI6MDkuNTc2MDczNjk1WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc0MTE5OTk4MDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIE1lbW9yeSBGYWlsdXJlIEhhbmRsaW5nIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCByZWxhdGVkIHRvIG1lbW9yeSBmYWlsdXJlIGhhbmRsaW5nLCBzcGVjaWZpY2FsbHkgZm9yIEh1Z2VUTEIgcGFnZXMuIFRoZSBjb25maWd1cmF0aW9ucyBpbnZvbHZlZCBhcmUgYE1FTU9SWV9GQUlMVVJFYCwgYEhVR0VUTEJGU2AsIGFuZCBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29yZSBjaGFuZ2VzIGhlcmUuXG5cbk15IGZvY3VzIHNob3VsZCBiZSBvbiBob3cgdGhlIHN5c3RlbSBpcyBkZWFsaW5nIHdpdGggaGFyZHdhcmUtcG9pc29uZWQgc3VicGFnZXMgd2l0aGluIGNvbXBvdW5kIHBhZ2VzLiBJIHNlZSB0d28ga2V5IHN5bWJvbHMganVtcGluZyBvdXQgYXQgbWU6IGBfX2h1Z2VwYWdlX2hhbmRsZV9wb2lzb25gIGFuZCBgZnJlZV9oYXNfaHdwb2lzb25lZGAuIFRoZXNlIHNlZW0gdG8gYmUgdGllZCBkaXJlY3RseSB0byB0aGUgZXJyb3IgcGF0aHMsIHdoaWNoIGlzIGV4YWN0bHkgd2hlcmUgbXkgYXR0ZW50aW9uIHNob3VsZCBiZS5cblxuSSBhbHNvIHNlZSB0aGF0IGBmcmVlX3BhZ2VzX3Nhbml0aXplYCBoYXMgYmVlbiBhZGRlZC4gSG93ZXZlciwgc2luY2UgaXQgaXMgY2FsbGVkIGZyb20gYF9fZnJlZV9wYWdlc19wcmVwYXJlYCBhbmQgYGZyZWVfcHJlcGFyZWRfY29udGlnX3JhbmdlYCwgaXTigJlzIGxpa2VseSBpbiBhIGhvdCBwYXRoLiBXaGlsZSBpbXBvcnRhbnQsIHRoZSBjaGFuZ2VzIGhlcmUgYXJlIHBlcmhhcHMgbm90IHRoZSBjb3JlIG9mICp0aGlzKiBwYXRjaCwgdGhvdWdoIEknbGwga2VlcCB0aGF0IGluIG1pbmQuIGBmcmVlX2hhc19od3BvaXNvbmVkYCBzZWVtcyBtb3JlIHRhcmdldGVkIHRvIHRoZSBzcGVjaWZpYyBlcnJvciBoYW5kbGluZyBzY2VuYXJpb3MsIGFzIGRvZXMgYF9faHVnZXBhZ2VfaGFuZGxlX3BvaXNvbmAuXG5cbk5vdywgSSBzaG91bGQgZXhhbWluZSBgbWVfaHVnZV9wYWdlYCwgYHRyeV9tZW1vcnlfZmFpbHVyZV9odWdldGxiYCwgYW5kIGBmb2xpb19jbGVhcl9odWdldGxiX2h3cG9pc29uYC4gVGhleSdyZSBleGlzdGluZyBmdW5jdGlvbnMsIGJ1dCB0aGV5J3ZlIGJlZW4gbW9kaWZpZWQuIFRoZSBmYWN0IHRoYXQgdGhleSBhbHJlYWR5IGV4aXN0IHN1Z2dlc3RzIHRoaXMgaXNuJ3QgZW50aXJlbHkgbmV3IGZ1bmN0aW9uYWxpdHksIGJ1dCBhbiBlbmhhbmNlbWVudCBvciByZWZpbmVtZW50LlxuXG5JbiBlc3NlbmNlLCB0aGUgcGF0Y2ggaXMgYWRkcmVzc2luZyBob3cgdG8gcHJvcGVybHkgbWFuYWdlIGhlYWx0aHkgdmVyc3VzIHBvaXNvbmVkIHN1YnBhZ2VzIHdpdGhpbiBjb21wb3VuZCBIdWdlVExCIHBhZ2VzIHdoZW4gbWVtb3J5IGZhaWx1cmVzIG9jY3VyLiBUaGUgZ29hbCBpcyB0byBlbnN1cmUgdGhhdCBub24tcG9pc29uZWQgc3VicGFnZXMgYXJlIGNvcnJlY3RseSBmcmVlZCBiYWNrIHRvIHRoZSBidWRkeSBhbGxvY2F0b3IuIFRoaXMgYWxzbyBtZWFucyB3ZSBuZWVkIHRvIGlzb2xhdGUgdGhlIHBvaXNvbmVkIG9uZXMuIFRoaXMgaXMgYSBjb3JlIE1NIGFuZCBwYWdlIGFsbG9jYXRvciBpc3N1ZSwgYW5kIHRoZSBmb2N1cyBzZWVtcyB0byBiZSBpbiBgbW0vbWVtb3J5LWZhaWx1cmUuY2AgYW5kIGBtbS9wYWdlX2FsbG9jLmNgLCBhcyBJJ2QgZXhwZWN0LlxuXG5TbywgaW4gc3VtbWFyeSwgSSdtIGNvbmNlbnRyYXRpbmcgb24gYF9faHVnZXBhZ2VfaGFuZGxlX3BvaXNvbmAgYW5kIGBmcmVlX2hhc19od3BvaXNvbmVkYCBhcyB0aGUgYmVzdCBwb2ludHMgdG8gYW5hbHl6ZSB0aGUgcGF0Y2jigJlzIGNvcmUgbG9naWMsIGFzIHdlbGwgYXMgdGhlIGNoYW5nZXMgdG8gYG1lX2h1Z2VfcGFnZWAsIGB0cnlfbWVtb3J5X2ZhaWx1cmVfaHVnZXRsYmAsIGFuZCBgZm9saW9fY2xlYXJfaHVnZXRsYl9od3BvaXNvbmAuIEkgbmVlZCB0byBzZWUgZXhhY3RseSBob3cgdGhlc2UgZnVuY3Rpb25zIGludGVyYWN0IHRvIGFjaGlldmUgdGhpcyBtb3JlIGdyYW51bGFyIGFuZCByb2J1c3QgaGFuZGxpbmcgb2YgaGFyZHdhcmUtcG9pc29uZWQgcGFnZXMuXG5MZXQncyBjYWxsIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0MDEwLCJPdXRwdXRUb2tlbnMiOjE0MywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM3NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wNVQxODoyMjoxNi45ODgwNzY4NVoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg1MzA2MTY0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJNRU1PUllfRkFJTFVSRVwiLFxuICAgIFwiSFVHRVRMQkZTXCIsXG4gICAgXCJUUkFOU1BBUkVOVF9IVUdFUEFHRVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIl9faHVnZXBhZ2VfaGFuZGxlX3BvaXNvblwiLFxuICAgIFwiZnJlZV9oYXNfaHdwb2lzb25lZFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIG1lbW9yeSBmYWlsdXJlIGhhbmRsaW5nIGZvciBIdWdlVExCIHBhZ2VzLCBlbnN1cmluZyB0aGF0IGhlYWx0aHkgc3VicGFnZXMgb2YgYSBjb21wb3VuZCBwYWdlIHdpdGggaGFyZHdhcmUgcG9pc29uZWQgc3VicGFnZXMgYXJlIGNvcnJlY3RseSBmcmVlZCB0byB0aGUgYnVkZHkgYWxsb2NhdG9yLCB3aGlsZSBpc29sYXRpbmcgdGhlIHBvaXNvbmVkIG9uZXMuIFRoaXMgaW52b2x2ZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIGNvcmUgTU0gYW5kIHBhZ2UgYWxsb2NhdG9yIGxvZ2ljLCBzcGVjaWZpY2FsbHkgaW4gbW0vbWVtb3J5LWZhaWx1cmUuYyBhbmQgbW0vcGFnZV9hbGxvYy5jLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk1FTU9SWV9GQUlMVVJFXCIsXG4gICAgXCJIVUdFVExCRlNcIixcbiAgICBcIlRSQU5TUEFSRU5UX0hVR0VQQUdFXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiX19odWdlcGFnZV9oYW5kbGVfcG9pc29uXCIsXG4gICAgXCJmcmVlX2hhc19od3BvaXNvbmVkXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgbWVtb3J5IGZhaWx1cmUgaGFuZGxpbmcgZm9yIEh1Z2VUTEIgcGFnZXMsIGVuc3VyaW5nIHRoYXQgaGVhbHRoeSBzdWJwYWdlcyBvZiBhIGNvbXBvdW5kIHBhZ2Ugd2l0aCBoYXJkd2FyZSBwb2lzb25lZCBzdWJwYWdlcyBhcmUgY29ycmVjdGx5IGZyZWVkIHRvIHRoZSBidWRkeSBhbGxvY2F0b3IsIHdoaWxlIGlzb2xhdGluZyB0aGUgcG9pc29uZWQgb25lcy4gVGhpcyBpbnZvbHZlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gY29yZSBNTSBhbmQgcGFnZSBhbGxvY2F0b3IgbG9naWMsIHNwZWNpZmljYWxseSBpbiBtbS9tZW1vcnktZmFpbHVyZS5jIGFuZCBtbS9wYWdlX2FsbG9jLmMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow6kfqx[1] Phase: Succeeded StartedAt: 2026-07-05 18:24:32 +0000 UTC FinishedAt: 2026-07-05 18:24:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6kfqx[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-05 18:24:32 +0000 UTC FinishedAt: 2026-07-05 18:24:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6kfqx[2] Phase: Succeeded StartedAt: 2026-07-05 18:24:32 +0000 UTC FinishedAt: 2026-07-05 22:29:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6kfqx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"844352111faac98f6f0eabd3ddc0d56af5fdebc8","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","HUGETLBFS","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"],"focus":null,"focus_symbols":["__hugepage_handle_poison","free_has_hwpoisoned"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"844352111faac98f6f0eabd3ddc0d56af5fdebc8","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","HUGETLBFS","TRANSPARENT_HUGEPAGE"],"series_id":"4111263e-710a-4a67-b476-a54ee5acd4a7","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-07-05 18:24:32 +0000 UTC FinishedAt: 2026-07-05 22:29:28 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"844352111faac98f6f0eabd3ddc0d56af5fdebc8","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","HUGETLBFS","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"],"focus":null,"focus_symbols":["__hugepage_handle_poison","free_has_hwpoisoned"],"skip_cover_check":true},"patched":{"arch":"amd64","commit_hash":"844352111faac98f6f0eabd3ddc0d56af5fdebc8","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","HUGETLBFS","TRANSPARENT_HUGEPAGE"],"series_id":"4111263e-710a-4a67-b476-a54ee5acd4a7","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflow6kfqx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"844352111faac98f6f0eabd3ddc0d56af5fdebc8","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","HUGETLBFS","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"],"focus":null,"focus_symbols":["__hugepage_handle_poison","free_has_hwpoisoned"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"844352111faac98f6f0eabd3ddc0d56af5fdebc8","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","HUGETLBFS","TRANSPARENT_HUGEPAGE"],"series_id":"4111263e-710a-4a67-b476-a54ee5acd4a7","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-07-05 18:24:32 +0000 UTC FinishedAt: 2026-07-05 18:24:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6kfqx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"844352111faac98f6f0eabd3ddc0d56af5fdebc8","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","HUGETLBFS","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"],"focus":null,"focus_symbols":["__hugepage_handle_poison","free_has_hwpoisoned"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"844352111faac98f6f0eabd3ddc0d56af5fdebc8","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","HUGETLBFS","TRANSPARENT_HUGEPAGE"],"series_id":"4111263e-710a-4a67-b476-a54ee5acd4a7","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-07-05 18:24:32 +0000 UTC FinishedAt: 2026-07-05 18:24:37 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"844352111faac98f6f0eabd3ddc0d56af5fdebc8","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","HUGETLBFS","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-workflow6kfqx/series-workflow6kfqx-convert-artifact-2466691975/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow6kfqx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"844352111faac98f6f0eabd3ddc0d56af5fdebc8","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","HUGETLBFS","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"],"focus":null,"focus_symbols":["__hugepage_handle_poison","free_has_hwpoisoned"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"844352111faac98f6f0eabd3ddc0d56af5fdebc8","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","HUGETLBFS","TRANSPARENT_HUGEPAGE"],"series_id":"4111263e-710a-4a67-b476-a54ee5acd4a7","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-07-05 18:24:42 +0000 UTC FinishedAt: 2026-07-05 18:54:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6kfqx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"844352111faac98f6f0eabd3ddc0d56af5fdebc8","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","HUGETLBFS","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"],"focus":null,"focus_symbols":["__hugepage_handle_poison","free_has_hwpoisoned"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"844352111faac98f6f0eabd3ddc0d56af5fdebc8","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","HUGETLBFS","TRANSPARENT_HUGEPAGE"],"series_id":"4111263e-710a-4a67-b476-a54ee5acd4a7","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-07-05 18:24:42 +0000 UTC FinishedAt: 2026-07-05 18:54:24 +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:*5cec8c41-1ed9-48cc-a1cd-50b88e601bc8,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-workflow6kfqx/series-workflow6kfqx-convert-artifact-2466691975/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": "e0af31bc-29c5-4776-ba42-15ade00254e9", "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-workflow6kfqx/series-workflow6kfqx-build-action-1526204957/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow6kfqx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"844352111faac98f6f0eabd3ddc0d56af5fdebc8","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","HUGETLBFS","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"],"focus":null,"focus_symbols":["__hugepage_handle_poison","free_has_hwpoisoned"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"844352111faac98f6f0eabd3ddc0d56af5fdebc8","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","HUGETLBFS","TRANSPARENT_HUGEPAGE"],"series_id":"4111263e-710a-4a67-b476-a54ee5acd4a7","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-07-05 18:24:42 +0000 UTC FinishedAt: 2026-07-05 18:53:49 +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:*5cec8c41-1ed9-48cc-a1cd-50b88e601bc8,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-workflow6kfqx/series-workflow6kfqx-convert-artifact-2466691975/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": "e0af31bc-29c5-4776-ba42-15ade00254e9", "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-workflow6kfqx/series-workflow6kfqx-build-action-1526204957/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow6kfqx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"844352111faac98f6f0eabd3ddc0d56af5fdebc8","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","HUGETLBFS","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"],"focus":null,"focus_symbols":["__hugepage_handle_poison","free_has_hwpoisoned"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"844352111faac98f6f0eabd3ddc0d56af5fdebc8","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","HUGETLBFS","TRANSPARENT_HUGEPAGE"],"series_id":"4111263e-710a-4a67-b476-a54ee5acd4a7","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-07-05 18:54:24 +0000 UTC FinishedAt: 2026-07-05 18:54:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6kfqx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"844352111faac98f6f0eabd3ddc0d56af5fdebc8","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","HUGETLBFS","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"],"focus":null,"focus_symbols":["__hugepage_handle_poison","free_has_hwpoisoned"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"844352111faac98f6f0eabd3ddc0d56af5fdebc8","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","HUGETLBFS","TRANSPARENT_HUGEPAGE"],"series_id":"4111263e-710a-4a67-b476-a54ee5acd4a7","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-07-05 18:54:24 +0000 UTC FinishedAt: 2026-07-05 18:54:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6kfqx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"844352111faac98f6f0eabd3ddc0d56af5fdebc8","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","HUGETLBFS","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"],"focus":null,"focus_symbols":["__hugepage_handle_poison","free_has_hwpoisoned"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"844352111faac98f6f0eabd3ddc0d56af5fdebc8","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","HUGETLBFS","TRANSPARENT_HUGEPAGE"],"series_id":"4111263e-710a-4a67-b476-a54ee5acd4a7","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-07-05 18:54:24 +0000 UTC FinishedAt: 2026-07-05 18:55:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6kfqx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"844352111faac98f6f0eabd3ddc0d56af5fdebc8","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","HUGETLBFS","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"],"focus":null,"focus_symbols":["__hugepage_handle_poison","free_has_hwpoisoned"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"844352111faac98f6f0eabd3ddc0d56af5fdebc8","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","HUGETLBFS","TRANSPARENT_HUGEPAGE"],"series_id":"4111263e-710a-4a67-b476-a54ee5acd4a7","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-07-05 18:54:24 +0000 UTC FinishedAt: 2026-07-05 18:54:49 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"844352111faac98f6f0eabd3ddc0d56af5fdebc8","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","HUGETLBFS","TRANSPARENT_HUGEPAGE"],"series_id":"4111263e-710a-4a67-b476-a54ee5acd4a7","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-workflow6kfqx/series-workflow6kfqx-convert-artifact-121390262/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow6kfqx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"844352111faac98f6f0eabd3ddc0d56af5fdebc8","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","HUGETLBFS","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"],"focus":null,"focus_symbols":["__hugepage_handle_poison","free_has_hwpoisoned"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"844352111faac98f6f0eabd3ddc0d56af5fdebc8","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","HUGETLBFS","TRANSPARENT_HUGEPAGE"],"series_id":"4111263e-710a-4a67-b476-a54ee5acd4a7","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-07-05 18:55:02 +0000 UTC FinishedAt: 2026-07-05 18:57:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6kfqx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"844352111faac98f6f0eabd3ddc0d56af5fdebc8","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","HUGETLBFS","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"],"focus":null,"focus_symbols":["__hugepage_handle_poison","free_has_hwpoisoned"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"844352111faac98f6f0eabd3ddc0d56af5fdebc8","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","HUGETLBFS","TRANSPARENT_HUGEPAGE"],"series_id":"4111263e-710a-4a67-b476-a54ee5acd4a7","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-07-05 18:55:02 +0000 UTC FinishedAt: 2026-07-05 18:57:01 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*e0af31bc-29c5-4776-ba42-15ade00254e9,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-workflow6kfqx/series-workflow6kfqx-build-action-1526204957/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-workflow6kfqx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"844352111faac98f6f0eabd3ddc0d56af5fdebc8","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","HUGETLBFS","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"],"focus":null,"focus_symbols":["__hugepage_handle_poison","free_has_hwpoisoned"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"844352111faac98f6f0eabd3ddc0d56af5fdebc8","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","HUGETLBFS","TRANSPARENT_HUGEPAGE"],"series_id":"4111263e-710a-4a67-b476-a54ee5acd4a7","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-07-05 18:57:11 +0000 UTC FinishedAt: 2026-07-05 18:57:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6kfqx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"844352111faac98f6f0eabd3ddc0d56af5fdebc8","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","HUGETLBFS","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"],"focus":null,"focus_symbols":["__hugepage_handle_poison","free_has_hwpoisoned"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"844352111faac98f6f0eabd3ddc0d56af5fdebc8","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","HUGETLBFS","TRANSPARENT_HUGEPAGE"],"series_id":"4111263e-710a-4a67-b476-a54ee5acd4a7","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-07-05 18:57:11 +0000 UTC FinishedAt: 2026-07-05 18:57:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6kfqx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"844352111faac98f6f0eabd3ddc0d56af5fdebc8","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","HUGETLBFS","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"],"focus":null,"focus_symbols":["__hugepage_handle_poison","free_has_hwpoisoned"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"844352111faac98f6f0eabd3ddc0d56af5fdebc8","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","HUGETLBFS","TRANSPARENT_HUGEPAGE"],"series_id":"4111263e-710a-4a67-b476-a54ee5acd4a7","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-07-05 18:57:11 +0000 UTC FinishedAt: 2026-07-05 19:24:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6kfqx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"844352111faac98f6f0eabd3ddc0d56af5fdebc8","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","HUGETLBFS","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"],"focus":null,"focus_symbols":["__hugepage_handle_poison","free_has_hwpoisoned"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"844352111faac98f6f0eabd3ddc0d56af5fdebc8","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","HUGETLBFS","TRANSPARENT_HUGEPAGE"],"series_id":"4111263e-710a-4a67-b476-a54ee5acd4a7","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-07-05 18:57:11 +0000 UTC FinishedAt: 2026-07-05 19:24:44 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*5cec8c41-1ed9-48cc-a1cd-50b88e601bc8,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-workflow6kfqx/series-workflow6kfqx-convert-artifact-121390262/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": "cf8e99c8-4856-485d-a6f0-21e73d9ac8c3", "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-workflow6kfqx/series-workflow6kfqx-build-action-1765050810/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow6kfqx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"844352111faac98f6f0eabd3ddc0d56af5fdebc8","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","HUGETLBFS","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"],"focus":null,"focus_symbols":["__hugepage_handle_poison","free_has_hwpoisoned"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"844352111faac98f6f0eabd3ddc0d56af5fdebc8","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","HUGETLBFS","TRANSPARENT_HUGEPAGE"],"series_id":"4111263e-710a-4a67-b476-a54ee5acd4a7","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-07-05 18:57:11 +0000 UTC FinishedAt: 2026-07-05 19:24:34 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*5cec8c41-1ed9-48cc-a1cd-50b88e601bc8,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-workflow6kfqx/series-workflow6kfqx-convert-artifact-121390262/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": "cf8e99c8-4856-485d-a6f0-21e73d9ac8c3", "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-workflow6kfqx/series-workflow6kfqx-build-action-1765050810/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow6kfqx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"844352111faac98f6f0eabd3ddc0d56af5fdebc8","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","HUGETLBFS","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"],"focus":null,"focus_symbols":["__hugepage_handle_poison","free_has_hwpoisoned"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"844352111faac98f6f0eabd3ddc0d56af5fdebc8","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","HUGETLBFS","TRANSPARENT_HUGEPAGE"],"series_id":"4111263e-710a-4a67-b476-a54ee5acd4a7","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-07-05 19:24:44 +0000 UTC FinishedAt: 2026-07-05 19:24:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6kfqx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"844352111faac98f6f0eabd3ddc0d56af5fdebc8","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","HUGETLBFS","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"],"focus":null,"focus_symbols":["__hugepage_handle_poison","free_has_hwpoisoned"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"844352111faac98f6f0eabd3ddc0d56af5fdebc8","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","HUGETLBFS","TRANSPARENT_HUGEPAGE"],"series_id":"4111263e-710a-4a67-b476-a54ee5acd4a7","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-07-05 19:24:44 +0000 UTC FinishedAt: 2026-07-05 19:24:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6kfqx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"844352111faac98f6f0eabd3ddc0d56af5fdebc8","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","HUGETLBFS","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"],"focus":null,"focus_symbols":["__hugepage_handle_poison","free_has_hwpoisoned"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"844352111faac98f6f0eabd3ddc0d56af5fdebc8","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","HUGETLBFS","TRANSPARENT_HUGEPAGE"],"series_id":"4111263e-710a-4a67-b476-a54ee5acd4a7","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-07-05 19:24:44 +0000 UTC FinishedAt: 2026-07-05 19:26:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6kfqx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"844352111faac98f6f0eabd3ddc0d56af5fdebc8","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","HUGETLBFS","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"],"focus":null,"focus_symbols":["__hugepage_handle_poison","free_has_hwpoisoned"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"844352111faac98f6f0eabd3ddc0d56af5fdebc8","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","HUGETLBFS","TRANSPARENT_HUGEPAGE"],"series_id":"4111263e-710a-4a67-b476-a54ee5acd4a7","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-07-05 19:24:44 +0000 UTC FinishedAt: 2026-07-05 19:26:37 +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:*cf8e99c8-4856-485d-a6f0-21e73d9ac8c3,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-workflow6kfqx/series-workflow6kfqx-build-action-1765050810/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-workflow6kfqx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"844352111faac98f6f0eabd3ddc0d56af5fdebc8","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","HUGETLBFS","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"],"focus":null,"focus_symbols":["__hugepage_handle_poison","free_has_hwpoisoned"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"844352111faac98f6f0eabd3ddc0d56af5fdebc8","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","HUGETLBFS","TRANSPARENT_HUGEPAGE"],"series_id":"4111263e-710a-4a67-b476-a54ee5acd4a7","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-07-05 19:26:47 +0000 UTC FinishedAt: 2026-07-05 22:29:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6kfqx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"844352111faac98f6f0eabd3ddc0d56af5fdebc8","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","HUGETLBFS","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"],"focus":null,"focus_symbols":["__hugepage_handle_poison","free_has_hwpoisoned"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"844352111faac98f6f0eabd3ddc0d56af5fdebc8","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","HUGETLBFS","TRANSPARENT_HUGEPAGE"],"series_id":"4111263e-710a-4a67-b476-a54ee5acd4a7","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-07-05 19:26:47 +0000 UTC FinishedAt: 2026-07-05 22:29:28 +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"],"focus":null,"focus_symbols":["__hugepage_handle_poison","free_has_hwpoisoned"],"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:*e0af31bc-29c5-4776-ba42-15ade00254e9,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*cf8e99c8-4856-485d-a6f0-21e73d9ac8c3,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-workflow6kfqx/series-workflow6kfqx-build-action-1526204957/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-workflow6kfqx/series-workflow6kfqx-build-action-1765050810/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow6kfqx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"844352111faac98f6f0eabd3ddc0d56af5fdebc8","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","HUGETLBFS","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"],"focus":null,"focus_symbols":["__hugepage_handle_poison","free_has_hwpoisoned"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"844352111faac98f6f0eabd3ddc0d56af5fdebc8","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","HUGETLBFS","TRANSPARENT_HUGEPAGE"],"series_id":"4111263e-710a-4a67-b476-a54ee5acd4a7","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-07-05 19:26:47 +0000 UTC FinishedAt: 2026-07-05 19:27:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6kfqx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"844352111faac98f6f0eabd3ddc0d56af5fdebc8","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","HUGETLBFS","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"],"focus":null,"focus_symbols":["__hugepage_handle_poison","free_has_hwpoisoned"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"844352111faac98f6f0eabd3ddc0d56af5fdebc8","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","HUGETLBFS","TRANSPARENT_HUGEPAGE"],"series_id":"4111263e-710a-4a67-b476-a54ee5acd4a7","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-07-05 19:26:47 +0000 UTC FinishedAt: 2026-07-05 19:26:59 +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"],"focus":null,"focus_symbols":["__hugepage_handle_poison","free_has_hwpoisoned"],"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-workflow6kfqx/series-workflow6kfqx-convert-artifact-633437659/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow6kfqx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"844352111faac98f6f0eabd3ddc0d56af5fdebc8","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","HUGETLBFS","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"],"focus":null,"focus_symbols":["__hugepage_handle_poison","free_has_hwpoisoned"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"844352111faac98f6f0eabd3ddc0d56af5fdebc8","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","HUGETLBFS","TRANSPARENT_HUGEPAGE"],"series_id":"4111263e-710a-4a67-b476-a54ee5acd4a7","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-07-05 19:26:47 +0000 UTC FinishedAt: 2026-07-05 19:26:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6kfqx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"844352111faac98f6f0eabd3ddc0d56af5fdebc8","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","HUGETLBFS","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"],"focus":null,"focus_symbols":["__hugepage_handle_poison","free_has_hwpoisoned"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"844352111faac98f6f0eabd3ddc0d56af5fdebc8","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","HUGETLBFS","TRANSPARENT_HUGEPAGE"],"series_id":"4111263e-710a-4a67-b476-a54ee5acd4a7","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-07-05 19:26:47 +0000 UTC FinishedAt: 2026-07-05 19:26:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6kfqx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"844352111faac98f6f0eabd3ddc0d56af5fdebc8","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","HUGETLBFS","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"],"focus":null,"focus_symbols":["__hugepage_handle_poison","free_has_hwpoisoned"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"844352111faac98f6f0eabd3ddc0d56af5fdebc8","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","HUGETLBFS","TRANSPARENT_HUGEPAGE"],"series_id":"4111263e-710a-4a67-b476-a54ee5acd4a7","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-07-05 19:26:47 +0000 UTC FinishedAt: 2026-07-05 19:26:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6kfqx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"844352111faac98f6f0eabd3ddc0d56af5fdebc8","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","HUGETLBFS","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"],"focus":null,"focus_symbols":["__hugepage_handle_poison","free_has_hwpoisoned"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"844352111faac98f6f0eabd3ddc0d56af5fdebc8","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","HUGETLBFS","TRANSPARENT_HUGEPAGE"],"series_id":"4111263e-710a-4a67-b476-a54ee5acd4a7","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-07-05 19:27:08 +0000 UTC FinishedAt: 2026-07-05 22:29:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6kfqx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"844352111faac98f6f0eabd3ddc0d56af5fdebc8","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","HUGETLBFS","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"],"focus":null,"focus_symbols":["__hugepage_handle_poison","free_has_hwpoisoned"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"844352111faac98f6f0eabd3ddc0d56af5fdebc8","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","HUGETLBFS","TRANSPARENT_HUGEPAGE"],"series_id":"4111263e-710a-4a67-b476-a54ee5acd4a7","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-07-05 19:27:08 +0000 UTC FinishedAt: 2026-07-05 22:29:18 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*e0af31bc-29c5-4776-ba42-15ade00254e9,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*cf8e99c8-4856-485d-a6f0-21e73d9ac8c3,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-workflow6kfqx/series-workflow6kfqx-build-action-1526204957/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-workflow6kfqx/series-workflow6kfqx-build-action-1765050810/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-workflow6kfqx/series-workflow6kfqx-convert-artifact-633437659/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,}