Name: series-workflowsdptw Phase: Succeeded StartedAt: 2026-07-24 18:19:23 +0000 UTC FinishedAt: 2026-07-24 23:34:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsdptw[0] Phase: Succeeded StartedAt: 2026-07-24 18:19:23 +0000 UTC FinishedAt: 2026-07-24 18:48:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsdptw[0].run-triage Phase: Succeeded StartedAt: 2026-07-24 18:19:23 +0000 UTC FinishedAt: 2026-07-24 18:48:39 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "1590cf0329716306e948a8fc29f1d3ee87d3989f", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MEMORY_FAILURE", "HWPOISON_INJECT", "HUGETLBFS", "HUGETLB_PAGE", "TRANSPARENT_HUGEPAGE" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "1590cf0329716306e948a8fc29f1d3ee87d3989f", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MEMORY_FAILURE", "HWPOISON_INJECT", "HUGETLBFS", "HUGETLB_PAGE", "TRANSPARENT_HUGEPAGE" ], "series_id": "4b3a4f52-06f4-4a41-872f-dde0771be8ef" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "hugetlb_page_hwpoison", "hugetlb_unref_page_hwpoison", "unpoison_memory", "folio_clear_hugetlb_hwpoison" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db", "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": { "findings": [ "7a0cb565-4340-4daf-8de2-06f5b1d2af93", "a77d3cb3-6a99-45a3-bd83-722c3f7fcd2c" ] } } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI0IDE4OjQ2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01FTU9SWV9GQUlMVVJFJiMzNDssCiAgICAmIzM0O0hXUE9JU09OX0lOSkVDVCYjMzQ7LAogICAgJiMzNDtIVUdFVExCRlMmIzM0OywKICAgICYjMzQ7SFVHRVRMQl9QQUdFJiMzNDssCiAgICAmIzM0O1RSQU5TUEFSRU5UX0hVR0VQQUdFJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aHVnZXRsYl9wYWdlX2h3cG9pc29uJiMzNDssCiAgICAmIzM0O2h1Z2V0bGJfdW5yZWZfcGFnZV9od3BvaXNvbiYjMzQ7LAogICAgJiMzNDt1bnBvaXNvbl9tZW1vcnkmIzM0OywKICAgICYjMzQ7Zm9saW9fY2xlYXJfaHVnZXRsYl9od3BvaXNvbiYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBob3cgaGFyZHdhcmUgcG9pc29uZWQgKEhXUE9JU09OKSBwYWdlcyBhcmUgdHJhY2tlZCBhbmQgaGFuZGxlZCB3aXRoaW4gbGFyZ2UgZm9saW9zLCBzcGVjaWZpY2FsbHkgYWZmZWN0aW5nIGh1Z2V0bGJmcyBhbmQgZmlsZW1hcCByZWFkIG9wZXJhdGlvbnMuIEl0IGludHJvZHVjZXMgbmV3IGxvZ2ljIHRvIHRyYWNrIHBvaXNvbmVkIHBhZ2VzIHVzaW5nIGBmb2xpby1cdTAwM2VodWdldGxiX2h3cG9pc29uYCBhbmQgcmVwbGFjZXMgdGhlIGN1c3RvbSBgaHVnZXRsYmZzX3JlYWRfaXRlcmAgd2l0aCBgZ2VuZXJpY19maWxlX3JlYWRfaXRlcmAsIGhhbmRsaW5nIGh3cG9pc29uIGRpcmVjdGx5IGluIGBmaWxlbWFwX3JlYWRgLiBUaGVzZSBhcmUgcmVhY2hhYmxlLCBmdW5jdGlvbmFsIGNoYW5nZXMgaW4gY29yZSBtZW1vcnkgbWFuYWdlbWVudCBhbmQgaHVnZXRsYmZzLiBGdXp6aW5nIHNob3VsZCBmb2N1cyBvbiB0aGUgbmV3IGh3cG9pc29uIHRyYWNraW5nIGZ1bmN0aW9ucyBhbmQgdW5wb2lzb25pbmcgbG9naWMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjQgMTg6NDY8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCAwZmU2ZGU2YzJmMDU3NjY0MjE3ZDk2YTNkYTc3MmE0ODY2N2U1NTY3XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBKdWwgMjQgMTg6NDY6MTYgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZnMvS2NvbmZpZyBiL2ZzL0tjb25maWdcbmluZGV4IGNmNmFlNjQ3NzZlNjJjLi5lZGRhYzRlZDIxNGIxMiAxMDA2NDRcbi0tLSBhL2ZzL0tjb25maWdcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL0tjb25maWdcbkBAIC0yNzIsNyAmIzQzOzI3Miw3IEBAIGVuZGlmICMgSFVHRVRMQkZTXG4gXG4gY29uZmlnIEhVR0VUTEJfUEFHRVxuIFx0ZGVmX2Jvb2wgSFVHRVRMQkZTXG4tXHRzZWxlY3QgWEFSUkFZX01VTFRJXG4mIzQzO1x0c2VsZWN0IExBUkdFX0ZPTElPXG4gXG4gY29uZmlnIEhVR0VUTEJfUEFHRV9PUFRJTUlaRV9WTUVNTUFQXG4gXHRkZWZfYm9vbCBIVUdFVExCX1BBR0VcbmRpZmYgLS1naXQgYS9mcy9odWdldGxiZnMvaW5vZGUuYyBiL2ZzL2h1Z2V0bGJmcy9pbm9kZS5jXG5pbmRleCAyMTZlMWEwZGQwYjIzNy4uY2VmN2U2MWI4MjdkNzEgMTAwNjQ0XG4tLS0gYS9mcy9odWdldGxiZnMvaW5vZGUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMvaHVnZXRsYmZzL2lub2RlLmNcbkBAIC0xODcsMTEzICYjNDM7MTg3LDYgQEAgaHVnZXRsYl9nZXRfdW5tYXBwZWRfYXJlYShzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgbG9uZyBhZGRyLFxuIFx0cmV0dXJuIG1tX2dldF91bm1hcHBlZF9hcmVhX3ZtZmxhZ3MoZmlsZSwgYWRkcjAsIGxlbiwgcGdvZmYsIGZsYWdzLCAwKTtcbiB9XG4gXG4tLypcbi0gKiBTb21lb25lIHdhbnRzIHRvIHJlYWQgQGJ5dGVzIGZyb20gYSBIV1BPSVNPTiBodWdldGxiIEBmb2xpbyBmcm9tIEBvZmZzZXQuXG4tICogUmV0dXJucyB0aGUgbWF4aW11bSBudW1iZXIgb2YgYnl0ZXMgb25lIGNhbiByZWFkIHdpdGhvdXQgdG91Y2hpbmcgdGhlIDFzdCByYXdcbi0gKiBIV1BPSVNPTiBwYWdlLlxuLSAqL1xuLXN0YXRpYyBzaXplX3QgYWRqdXN0X3JhbmdlX2h3cG9pc29uKHN0cnVjdCBmb2xpbyAqZm9saW8sIHNpemVfdCBvZmZzZXQsXG4tXHRcdHNpemVfdCBieXRlcylcbi17XG4tXHRzdHJ1Y3QgcGFnZSAqcGFnZSA9IGZvbGlvX3BhZ2UoZm9saW8sIG9mZnNldCAvIFBBR0VfU0laRSk7XG4tXHRzaXplX3Qgc2FmZV9ieXRlcztcbi1cbi1cdGlmIChpc19yYXdfaHdwb2lzb25fcGFnZV9pbl9odWdlcGFnZShwYWdlKSlcbi1cdFx0cmV0dXJuIDA7XG4tXHQvKiBTYWZlIHRvIHJlYWQgdGhlIHJlbWFpbmluZyBieXRlcyBpbiB0aGlzIHBhZ2UuICovXG4tXHRzYWZlX2J5dGVzID0gUEFHRV9TSVpFIC0gKG9mZnNldCAlIFBBR0VfU0laRSk7XG4tXHRwYWdlJiM0MzsmIzQzOztcbi1cbi1cdC8qIENoZWNrIGVhY2ggcmVtYWluaW5nIHBhZ2UgYXMgbG9uZyBhcyB3ZSBhcmUgbm90IGRvbmUgeWV0LiAqL1xuLVx0Zm9yICg7IHNhZmVfYnl0ZXMgXHUwMDNjIGJ5dGVzOyBzYWZlX2J5dGVzICYjNDM7PSBQQUdFX1NJWkUsIHBhZ2UmIzQzOyYjNDM7KVxuLVx0XHRpZiAoaXNfcmF3X2h3cG9pc29uX3BhZ2VfaW5faHVnZXBhZ2UocGFnZSkpXG4tXHRcdFx0YnJlYWs7XG4tXG4tXHRyZXR1cm4gbWluKHNhZmVfYnl0ZXMsIGJ5dGVzKTtcbi19XG4tXG4tLypcbi0gKiBTdXBwb3J0IGZvciByZWFkKCkgLSBGaW5kIHRoZSBwYWdlIGF0dGFjaGVkIHRvIGZfbWFwcGluZyBhbmQgY29weSBvdXQgdGhlXG4tICogZGF0YS4gVGhpcyBwcm92aWRlcyBmdW5jdGlvbmFsaXR5IHNpbWlsYXIgdG8gZmlsZW1hcF9yZWFkKCkuXG4tICovXG4tc3RhdGljIHNzaXplX3QgaHVnZXRsYmZzX3JlYWRfaXRlcihzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqdG8pXG4te1xuLVx0c3RydWN0IGZpbGUgKmZpbGUgPSBpb2NiLVx1MDAzZWtpX2ZpbHA7XG4tXHRzdHJ1Y3QgaHN0YXRlICpoID0gaHN0YXRlX2ZpbGUoZmlsZSk7XG4tXHRzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyA9IGZpbGUtXHUwMDNlZl9tYXBwaW5nO1xuLVx0c3RydWN0IGlub2RlICppbm9kZSA9IG1hcHBpbmctXHUwMDNlaG9zdDtcbi1cdHVuc2lnbmVkIGxvbmcgaW5kZXggPSBpb2NiLVx1MDAzZWtpX3BvcyBcdTAwM2VcdTAwM2UgaHVnZV9wYWdlX3NoaWZ0KGgpO1xuLVx0dW5zaWduZWQgbG9uZyBvZmZzZXQgPSBpb2NiLVx1MDAzZWtpX3BvcyBcdTAwMjYgfmh1Z2VfcGFnZV9tYXNrKGgpO1xuLVx0dW5zaWduZWQgbG9uZyBlbmRfaW5kZXg7XG4tXHRsb2ZmX3QgaXNpemU7XG4tXHRzc2l6ZV90IHJldHZhbCA9IDA7XG4tXG4tXHR3aGlsZSAoaW92X2l0ZXJfY291bnQodG8pKSB7XG4tXHRcdHN0cnVjdCBmb2xpbyAqZm9saW87XG4tXHRcdHNpemVfdCBuciwgY29waWVkLCB3YW50O1xuLVxuLVx0XHQvKiBuciBpcyB0aGUgbWF4aW11bSBudW1iZXIgb2YgYnl0ZXMgdG8gY29weSBmcm9tIHRoaXMgcGFnZSAqL1xuLVx0XHRuciA9IGh1Z2VfcGFnZV9zaXplKGgpO1xuLVx0XHRpc2l6ZSA9IGlfc2l6ZV9yZWFkKGlub2RlKTtcbi1cdFx0aWYgKCFpc2l6ZSlcbi1cdFx0XHRicmVhaztcbi1cdFx0ZW5kX2luZGV4ID0gKGlzaXplIC0gMSkgXHUwMDNlXHUwMDNlIGh1Z2VfcGFnZV9zaGlmdChoKTtcbi1cdFx0aWYgKGluZGV4IFx1MDAzZSBlbmRfaW5kZXgpXG4tXHRcdFx0YnJlYWs7XG4tXHRcdGlmIChpbmRleCA9PSBlbmRfaW5kZXgpIHtcbi1cdFx0XHRuciA9ICgoaXNpemUgLSAxKSBcdTAwMjYgfmh1Z2VfcGFnZV9tYXNrKGgpKSAmIzQzOyAxO1xuLVx0XHRcdGlmIChuciBcdTAwM2M9IG9mZnNldClcbi1cdFx0XHRcdGJyZWFrO1xuLVx0XHR9XG4tXHRcdG5yID0gbnIgLSBvZmZzZXQ7XG4tXG4tXHRcdC8qIEZpbmQgdGhlIGZvbGlvICovXG4tXHRcdGZvbGlvID0gZmlsZW1hcF9sb2NrX2h1Z2V0bGJfZm9saW8oaCwgbWFwcGluZywgaW5kZXgpO1xuLVx0XHRpZiAoSVNfRVJSKGZvbGlvKSkge1xuLVx0XHRcdC8qXG4tXHRcdFx0ICogV2UgaGF2ZSBhIEhPTEUsIHplcm8gb3V0IHRoZSB1c2VyLWJ1ZmZlciBmb3IgdGhlXG4tXHRcdFx0ICogbGVuZ3RoIG9mIHRoZSBob2xlIG9yIHJlcXVlc3QuXG4tXHRcdFx0ICovXG4tXHRcdFx0Y29waWVkID0gaW92X2l0ZXJfemVybyhuciwgdG8pO1xuLVx0XHR9IGVsc2Uge1xuLVx0XHRcdGZvbGlvX3VubG9jayhmb2xpbyk7XG4tXG4tXHRcdFx0aWYgKCFmb2xpb190ZXN0X2h3cG9pc29uKGZvbGlvKSlcbi1cdFx0XHRcdHdhbnQgPSBucjtcbi1cdFx0XHRlbHNlIHtcbi1cdFx0XHRcdC8qXG4tXHRcdFx0XHQgKiBBZGp1c3QgaG93IG1hbnkgYnl0ZXMgc2FmZSB0byByZWFkIHdpdGhvdXRcbi1cdFx0XHRcdCAqIHRvdWNoaW5nIHRoZSAxc3QgcmF3IEhXUE9JU09OIHBhZ2UgYWZ0ZXJcbi1cdFx0XHRcdCAqIG9mZnNldC5cbi1cdFx0XHRcdCAqL1xuLVx0XHRcdFx0d2FudCA9IGFkanVzdF9yYW5nZV9od3BvaXNvbihmb2xpbywgb2Zmc2V0LCBucik7XG4tXHRcdFx0XHRpZiAod2FudCA9PSAwKSB7XG4tXHRcdFx0XHRcdGZvbGlvX3B1dChmb2xpbyk7XG4tXHRcdFx0XHRcdHJldHZhbCA9IC1FSU87XG4tXHRcdFx0XHRcdGJyZWFrO1xuLVx0XHRcdFx0fVxuLVx0XHRcdH1cbi1cbi1cdFx0XHQvKlxuLVx0XHRcdCAqIFdlIGhhdmUgdGhlIGZvbGlvLCBjb3B5IGl0IHRvIHVzZXIgc3BhY2UgYnVmZmVyLlxuLVx0XHRcdCAqL1xuLVx0XHRcdGNvcGllZCA9IGNvcHlfZm9saW9fdG9faXRlcihmb2xpbywgb2Zmc2V0LCB3YW50LCB0byk7XG4tXHRcdFx0Zm9saW9fcHV0KGZvbGlvKTtcbi1cdFx0fVxuLVx0XHRvZmZzZXQgJiM0Mzs9IGNvcGllZDtcbi1cdFx0cmV0dmFsICYjNDM7PSBjb3BpZWQ7XG4tXHRcdGlmIChjb3BpZWQgIT0gbnIgXHUwMDI2XHUwMDI2IGlvdl9pdGVyX2NvdW50KHRvKSkge1xuLVx0XHRcdGlmICghcmV0dmFsKVxuLVx0XHRcdFx0cmV0dmFsID0gLUVGQVVMVDtcbi1cdFx0XHRicmVhaztcbi1cdFx0fVxuLVx0XHRpbmRleCAmIzQzOz0gb2Zmc2V0IFx1MDAzZVx1MDAzZSBodWdlX3BhZ2Vfc2hpZnQoaCk7XG4tXHRcdG9mZnNldCBcdTAwMjY9IH5odWdlX3BhZ2VfbWFzayhoKTtcbi1cdH1cbi1cdGlvY2ItXHUwMDNla2lfcG9zID0gKChsb2ZmX3QpaW5kZXggXHUwMDNjXHUwMDNjIGh1Z2VfcGFnZV9zaGlmdChoKSkgJiM0Mzsgb2Zmc2V0O1xuLVx0cmV0dXJuIHJldHZhbDtcbi19XG4tXG4gc3RhdGljIGludCBodWdldGxiZnNfd3JpdGVfYmVnaW4oY29uc3Qgc3RydWN0IGtpb2NiICppb2NiLFxuIFx0XHRcdHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxuIFx0XHRcdGxvZmZfdCBwb3MsIHVuc2lnbmVkIGxlbixcbkBAIC04ODMsNiAmIzQzOzc3NiwxNyBAQCBzdGF0aWMgc3RydWN0IGlub2RlICpodWdldGxiZnNfZ2V0X3Jvb3Qoc3RydWN0IHN1cGVyX2Jsb2NrICpzYixcbiBcdHJldHVybiBpbm9kZTtcbiB9XG4gXG4mIzQzO3N0YXRpYyB2b2lkIGh1Z2V0bGJmc19pbml0X3JlZ3VsYXJfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBoc3RhdGUgKmhzdGF0ZSA9IGhzdGF0ZV9pbm9kZShpbm9kZSk7XG4mIzQzO1x0dW5zaWduZWQgaW50IG9yZGVyID0gaHVnZV9wYWdlX29yZGVyKGhzdGF0ZSk7XG4mIzQzO1xuJiM0MztcdGlub2RlLVx1MDAzZWlfb3AgPSBcdTAwMjZodWdldGxiZnNfaW5vZGVfb3BlcmF0aW9ucztcbiYjNDM7XHRpbm9kZS1cdTAwM2VpX2ZvcCA9IFx1MDAyNmh1Z2V0bGJmc19maWxlX29wZXJhdGlvbnM7XG4mIzQzO1x0bWFwcGluZ19zZXRfZm9saW9fb3JkZXJfcmFuZ2UoaW5vZGUtXHUwMDNlaV9tYXBwaW5nLCBvcmRlciwgb3JkZXIpO1xuJiM0MztcdG1hcHBpbmdfc2V0X2F1dGhvcml0YXRpdmUoaW5vZGUtXHUwMDNlaV9tYXBwaW5nKTtcbiYjNDM7fVxuJiM0MztcbiAvKlxuICAqIEh1Z2V0bGJmcyBpcyBub3QgcmVjbGFpbWFibGU7IHRoZXJlZm9yZSBpdHMgaV9tbWFwX3J3c2VtIHdpbGwgbmV2ZXJcbiAgKiBiZSB0YWtlbiBmcm9tIHJlY2xhaW0gLS0gdW5saWtlIHJlZ3VsYXIgZmlsZXN5c3RlbXMuIFRoaXMgbmVlZHMgYW5cbkBAIC05MjYsOCAmIzQzOzgzMCw3IEBAIHN0YXRpYyBzdHJ1Y3QgaW5vZGUgKmh1Z2V0bGJmc19nZXRfaW5vZGUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYixcbiBcdFx0XHRpbml0X3NwZWNpYWxfaW5vZGUoaW5vZGUsIG1vZGUsIGRldik7XG4gXHRcdFx0YnJlYWs7XG4gXHRcdGNhc2UgU19JRlJFRzpcbi1cdFx0XHRpbm9kZS1cdTAwM2VpX29wID0gXHUwMDI2aHVnZXRsYmZzX2lub2RlX29wZXJhdGlvbnM7XG4tXHRcdFx0aW5vZGUtXHUwMDNlaV9mb3AgPSBcdTAwMjZodWdldGxiZnNfZmlsZV9vcGVyYXRpb25zO1xuJiM0MztcdFx0XHRodWdldGxiZnNfaW5pdF9yZWd1bGFyX2lub2RlKGlub2RlKTtcbiBcdFx0XHRicmVhaztcbiBcdFx0Y2FzZSBTX0lGRElSOlxuIFx0XHRcdGlub2RlLVx1MDAzZWlfb3AgPSBcdTAwMjZodWdldGxiZnNfZGlyX2lub2RlX29wZXJhdGlvbnM7XG5AQCAtMTIwNiw3ICYjNDM7MTEwOSw3IEBAIHN0YXRpYyB2b2lkIGluaXRfb25jZSh2b2lkICpmb28pXG4gfVxuIFxuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGh1Z2V0bGJmc19maWxlX29wZXJhdGlvbnMgPSB7XG4tXHQucmVhZF9pdGVyXHRcdD0gaHVnZXRsYmZzX3JlYWRfaXRlcixcbiYjNDM7XHQucmVhZF9pdGVyXHRcdD0gZ2VuZXJpY19maWxlX3JlYWRfaXRlcixcbiBcdC5tbWFwXHRcdFx0PSBodWdldGxiZnNfZmlsZV9tbWFwLFxuIFx0LmZzeW5jXHRcdFx0PSBub29wX2ZzeW5jLFxuIFx0LmdldF91bm1hcHBlZF9hcmVhXHQ9IGh1Z2V0bGJfZ2V0X3VubWFwcGVkX2FyZWEsXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9odWdldGxiLmggYi9pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaFxuaW5kZXggMmFiYWY5OTMyMWU5MGQuLjE4Nzg2NDJlNzVlYzUxIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9odWdldGxiLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvaHVnZXRsYi5oXG5AQCAtMTY1LDcgJiM0MzsxNjUsNyBAQCBib29sIGh1Z2V0bGJmc19wYWdlY2FjaGVfcHJlc2VudChzdHJ1Y3QgaHN0YXRlICpoLFxuIFx0XHRcdFx0IHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuIFx0XHRcdFx0IHVuc2lnbmVkIGxvbmcgYWRkcmVzcyk7XG4gXG4tc3RydWN0IGFkZHJlc3Nfc3BhY2UgKmh1Z2V0bGJfZm9saW9fbWFwcGluZ19sb2NrX3dyaXRlKHN0cnVjdCBmb2xpbyAqZm9saW8pO1xuJiM0MztzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqaHVnZXRsYl9mb2xpb19tYXBwaW5nX2xvY2tfd3JpdGUoY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbyk7XG4gXG4gZXh0ZXJuIGludCBtb3ZhYmxlX2dpZ2FudGljX3BhZ2VzIF9fcmVhZF9tb3N0bHk7XG4gZXh0ZXJuIGludCBzeXNjdGxfaHVnZXRsYl9zaG1fZ3JvdXAgX19yZWFkX21vc3RseTtcbkBAIC0yOTIsOCAmIzQzOzI5Miw3IEBAIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBodWdldGxiX3RvdGFsX3BhZ2VzKHZvaWQpXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4tc3RhdGljIGlubGluZSBzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqaHVnZXRsYl9mb2xpb19tYXBwaW5nX2xvY2tfd3JpdGUoXG4tXHRcdFx0XHRcdFx0XHRzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuJiM0MztzdGF0aWMgaW5saW5lIHN0cnVjdCBhZGRyZXNzX3NwYWNlICpodWdldGxiX2ZvbGlvX21hcHBpbmdfbG9ja193cml0ZShjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIHtcbiBcdHJldHVybiBOVUxMO1xuIH1cbkBAIC01OTUsOCAmIzQzOzU5NCw4IEBAIGVudW0gaHVnZXRsYl9wYWdlX2ZsYWdzIHtcbiAjaWZkZWYgQ09ORklHX0hVR0VUTEJfUEFHRVxuICNkZWZpbmUgVEVTVEhQQUdFRkxBRyh1bmFtZSwgZmxuYW1lKVx0XHRcdFx0XFxcbiBzdGF0aWMgX19hbHdheXNfaW5saW5lXHRcdFx0XHRcdFx0XFxcbi1ib29sIGZvbGlvX3Rlc3RfaHVnZXRsYl8jI2ZsbmFtZShzdHJ1Y3QgZm9saW8gKmZvbGlvKVx0XHRcXFxuLVx0e1x0dm9pZCAqcHJpdmF0ZSA9IFx1MDAyNmZvbGlvLVx1MDAzZXByaXZhdGU7XHRcdFxcXG4mIzQzO2Jvb2wgZm9saW9fdGVzdF9odWdldGxiXyMjZmxuYW1lKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8pXHRcXFxuJiM0MztcdHtcdGNvbnN0IHZvaWQgKnByaXZhdGUgPSBcdTAwMjZmb2xpby1cdTAwM2Vwcml2YXRlO1x0XHRcXFxuIFx0XHRyZXR1cm4gdGVzdF9iaXQoSFBHXyMjZmxuYW1lLCBwcml2YXRlKTtcdFx0XFxcbiBcdH1cbiBcbkBAIC02MTYsNyAmIzQzOzYxNSw3IEBAIHZvaWQgZm9saW9fY2xlYXJfaHVnZXRsYl8jI2ZsbmFtZShzdHJ1Y3QgZm9saW8gKmZvbGlvKVx0XHRcXFxuICNlbHNlXG4gI2RlZmluZSBURVNUSFBBR0VGTEFHKHVuYW1lLCBmbG5hbWUpXHRcdFx0XHRcXFxuIHN0YXRpYyBpbmxpbmUgYm9vbFx0XHRcdFx0XHRcdFxcXG4tZm9saW9fdGVzdF9odWdldGxiXyMjZmxuYW1lKHN0cnVjdCBmb2xpbyAqZm9saW8pXHRcdFxcXG4mIzQzO2ZvbGlvX3Rlc3RfaHVnZXRsYl8jI2ZsbmFtZShjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVx0XHRcXFxuIFx0eyByZXR1cm4gMDsgfVxuIFxuICNkZWZpbmUgU0VUSFBBR0VGTEFHKHVuYW1lLCBmbG5hbWUpXHRcdFx0XHRcXFxuQEAgLTcyNyw3ICYjNDM7NzI2LDcgQEAgc3RhdGljIGlubGluZSBzdHJ1Y3QgaHVnZXBhZ2Vfc3VicG9vbCAqc3VicG9vbF9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuIFx0cmV0dXJuIEhVR0VUTEJGU19TQihpbm9kZS1cdTAwM2VpX3NiKS1cdTAwM2VzcG9vbDtcbiB9XG4gXG4tc3RhdGljIGlubGluZSBzdHJ1Y3QgaHVnZXBhZ2Vfc3VicG9vbCAqaHVnZXRsYl9mb2xpb19zdWJwb29sKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4mIzQzO3N0YXRpYyBpbmxpbmUgc3RydWN0IGh1Z2VwYWdlX3N1YnBvb2wgKmh1Z2V0bGJfZm9saW9fc3VicG9vbChjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIHtcbiBcdHJldHVybiBmb2xpby1cdTAwM2VfaHVnZXRsYl9zdWJwb29sO1xuIH1cbkBAIC04NTcsNyAmIzQzOzg1Niw3IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBhcmNoX2hhc19odWdlX2Jvb3RtZW1fYWxsb2Modm9pZClcbiB9XG4gI2VuZGlmXG4gXG4tc3RhdGljIGlubGluZSBzdHJ1Y3QgaHN0YXRlICpmb2xpb19oc3RhdGUoc3RydWN0IGZvbGlvICpmb2xpbylcbiYjNDM7c3RhdGljIGlubGluZSBzdHJ1Y3QgaHN0YXRlICpmb2xpb19oc3RhdGUoY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbylcbiB7XG4gXHRWTV9CVUdfT05fRk9MSU8oIWZvbGlvX3Rlc3RfaHVnZXRsYihmb2xpbyksIGZvbGlvKTtcbiBcdHJldHVybiBzaXplX3RvX2hzdGF0ZShmb2xpb19zaXplKGZvbGlvKSk7XG5AQCAtMTA3MCwxMSAmIzQzOzEwNjksNiBAQCB2b2lkIGh1Z2V0bGJfcmVnaXN0ZXJfbm9kZShzdHJ1Y3Qgbm9kZSAqbm9kZSk7XG4gdm9pZCBodWdldGxiX3VucmVnaXN0ZXJfbm9kZShzdHJ1Y3Qgbm9kZSAqbm9kZSk7XG4gI2VuZGlmXG4gXG4tLypcbi0gKiBDaGVjayBpZiBhIGdpdmVuIHJhdyBAcGFnZSBpbiBhIGh1Z2VwYWdlIGlzIEhXUE9JU09OLlxuLSAqL1xuLWJvb2wgaXNfcmF3X2h3cG9pc29uX3BhZ2VfaW5faHVnZXBhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UpO1xuLVxuIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBodWdlX3BhZ2VfbWFza19hbGlnbihzdHJ1Y3QgZmlsZSAqZmlsZSlcbiB7XG4gXHRyZXR1cm4gUEFHRV9NQVNLIFx1MDAyNiB+aHVnZV9wYWdlX21hc2soaHN0YXRlX2ZpbGUoZmlsZSkpO1xuQEAgLTEwODgsNyAmIzQzOzEwODIsNyBAQCBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgaHVnZV9wYWdlX21hc2tfYWxpZ24oc3RydWN0IGZpbGUgKmZpbGUpXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4tc3RhdGljIGlubGluZSBzdHJ1Y3QgaHVnZXBhZ2Vfc3VicG9vbCAqaHVnZXRsYl9mb2xpb19zdWJwb29sKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4mIzQzO3N0YXRpYyBpbmxpbmUgc3RydWN0IGh1Z2VwYWdlX3N1YnBvb2wgKmh1Z2V0bGJfZm9saW9fc3VicG9vbChjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIHtcbiBcdHJldHVybiBOVUxMO1xuIH1cbkBAIC0xMTU3LDcgJiM0MzsxMTUxLDcgQEAgc3RhdGljIGlubGluZSBzdHJ1Y3QgaHN0YXRlICpoc3RhdGVfdm1hKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxuIFx0cmV0dXJuIE5VTEw7XG4gfVxuIFxuLXN0YXRpYyBpbmxpbmUgc3RydWN0IGhzdGF0ZSAqZm9saW9faHN0YXRlKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4mIzQzO3N0YXRpYyBpbmxpbmUgc3RydWN0IGhzdGF0ZSAqZm9saW9faHN0YXRlKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8pXG4ge1xuIFx0cmV0dXJuIE5VTEw7XG4gfVxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbW1fdHlwZXMuaCBiL2luY2x1ZGUvbGludXgvbW1fdHlwZXMuaFxuaW5kZXggYjE4YzJiMmU3ZDJjNjUuLmQ3YTliMGQ4YmJkZmIxIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9tbV90eXBlcy5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L21tX3R5cGVzLmhcbkBAIC0zODcsNyAmIzQzOzM4Nyw3IEBAIHR5cGVkZWYgdW5zaWduZWQgc2hvcnQgbW1faWRfdDtcbiAgKiBAX2h1Z2V0bGJfc3VicG9vbDogRG8gbm90IHVzZSBkaXJlY3RseSwgdXNlIGFjY2Vzc29yIGluIGh1Z2V0bGIuaC5cbiAgKiBAX2h1Z2V0bGJfY2dyb3VwOiBEbyBub3QgdXNlIGRpcmVjdGx5LCB1c2UgYWNjZXNzb3IgaW4gaHVnZXRsYl9jZ3JvdXAuaC5cbiAgKiBAX2h1Z2V0bGJfY2dyb3VwX3JzdmQ6IERvIG5vdCB1c2UgZGlyZWN0bHksIHVzZSBhY2Nlc3NvciBpbiBodWdldGxiX2Nncm91cC5oLlxuLSAqIEBfaHVnZXRsYl9od3BvaXNvbjogRG8gbm90IHVzZSBkaXJlY3RseSwgY2FsbCByYXdfaHdwX2xpc3RfaGVhZCgpLlxuJiM0MzsgKiBAaHVnZXRsYl9od3BvaXNvbjogTGlzdCBvZiBwYWdlcyB3aXRoIGh3cG9pc29uLlxuICAqIEBfZGVmZXJyZWRfbGlzdDogRm9saW9zIHRvIGJlIHNwbGl0IHVuZGVyIG1lbW9yeSBwcmVzc3VyZS5cbiAgKiBAX3VudXNlZF9zbGFiX29ial9leHRzOiBQbGFjZWhvbGRlciB0byBtYXRjaCBvYmpfZXh0cyBpbiBzdHJ1Y3Qgc2xhYi5cbiAgKlxuQEAgLTQ5OSw3ICYjNDM7NDk5LDcgQEAgc3RydWN0IGZvbGlvIHtcbiBcdFx0XHR2b2lkICpfaHVnZXRsYl9zdWJwb29sO1xuIFx0XHRcdHZvaWQgKl9odWdldGxiX2Nncm91cDtcbiBcdFx0XHR2b2lkICpfaHVnZXRsYl9jZ3JvdXBfcnN2ZDtcbi1cdFx0XHR2b2lkICpfaHVnZXRsYl9od3BvaXNvbjtcbiYjNDM7XHRcdFx0c3RydWN0IGxsaXN0X2hlYWQgaHVnZXRsYl9od3BvaXNvbjtcbiBcdC8qIHByaXZhdGU6IHRoZSB1bmlvbiB3aXRoIHN0cnVjdCBwYWdlIGlzIHRyYW5zaXRpb25hbCAqL1xuIFx0XHR9O1xuIFx0XHRzdHJ1Y3QgcGFnZSBfX3BhZ2VfMztcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaCBiL2luY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oXG5pbmRleCA3MjIzZjZmNGUyYjQwMy4uYjE0NmM1MjI4NzQxYzAgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmhcbkBAIC04OTMsMTQgJiM0Mzs4OTMsMTkgQEAgc3RhdGljIGlubGluZSBpbnQgUGFnZVRyYW5zQ29tcG91bmQoY29uc3Qgc3RydWN0IHBhZ2UgKnBhZ2UpXG4gVEVTVFBBR0VGTEFHX0ZBTFNFKFRyYW5zQ29tcG91bmQsIHRyYW5zY29tcG91bmQpXG4gI2VuZGlmXG4gXG4tI2lmIGRlZmluZWQoQ09ORklHX01FTU9SWV9GQUlMVVJFKSBcdTAwMjZcdTAwMjYgZGVmaW5lZChDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UpXG4mIzQzOyNpZiBkZWZpbmVkKENPTkZJR19NRU1PUllfRkFJTFVSRSkgXHUwMDI2XHUwMDI2IGRlZmluZWQoQ09ORklHX0xBUkdFX0ZPTElPKVxuIC8qXG4tICogUGFnZUhhc0hXUG9pc29uZWQgaW5kaWNhdGVzIHRoYXQgYXQgbGVhc3Qgb25lIHN1YnBhZ2UgaXMgaHdwb2lzb25lZCBpbiB0aGVcbi0gKiBjb21wb3VuZCBwYWdlLlxuJiM0MzsgKiBmb2xpb19oYXNfaHdwb2lzb25lZCBpbmRpY2F0ZXMgdGhhdCBhdCBsZWFzdCBvbmUgcGFnZSBpcyBod3BvaXNvbmVkIGluIHRoZVxuJiM0MzsgKiBmb2xpby4gIFRoYXQgcGFnZSB3aWxsIHVzdWFsbHkgYWxzbyBoYXZlIHRoZSBIV1BvaXNvbiBmbGFnIHNldCwgYnV0IHRoaXNcbiYjNDM7ICogaXMgbm90IHBvc3NpYmxlIGZvciBmb2xpb3Mgd2hpY2ggaGF2ZSBIVk8gKHNlZSBtZW1vcnktZmFpbHVyZSBmb3IgdGhlXG4mIzQzOyAqIHNjaGVtZSB1c2VkIGluIHRoYXQgY2FzZSkuICBZb3UgcHJvYmFibHkgZG9uJiMzOTt0IHdhbnQgdG8gY2FsbCB0aGlzIGRpcmVjdGx5O1xuJiM0MzsgKiB1c2UgZm9saW9faGFzX2h3cG9pc29uZWRfcGFnZSgpIGluc3RlYWQuXG4gICpcbiAgKiBUaGlzIGZsYWcgaXMgc2V0IGJ5IGh3cG9pc29uIGhhbmRsZXIuICBDbGVhcmVkIGJ5IFRIUCBzcGxpdCBvciBmcmVlIHBhZ2UuXG4gICovXG4gRk9MSU9fRkxBRyhoYXNfaHdwb2lzb25lZCwgRk9MSU9fU0VDT05EX1BBR0UpXG4mIzQzO0ZPTElPX1RFU1RfU0VUX0ZMQUcoaGFzX2h3cG9pc29uZWQsIEZPTElPX1NFQ09ORF9QQUdFKVxuJiM0MztGT0xJT19URVNUX0NMRUFSX0ZMQUcoaGFzX2h3cG9pc29uZWQsIEZPTElPX1NFQ09ORF9QQUdFKVxuICNlbHNlXG4gRk9MSU9fRkxBR19GQUxTRShoYXNfaHdwb2lzb25lZClcbiAjZW5kaWZcbkBAIC0xMDQxLDggJiM0MzsxMDQ2LDI1IEBAIFBBR0VfVFlQRV9PUFMoU2xhYiwgc2xhYiwgc2xhYilcbiBcbiAjaWZkZWYgQ09ORklHX0hVR0VUTEJfUEFHRVxuIEZPTElPX1RZUEVfT1BTKGh1Z2V0bGIsIGh1Z2V0bGIpXG4mIzQzO1xuJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgZm9saW9fdGVzdF9odWdlX3BvaXNvbihjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIChSRUFEX09OQ0UoZm9saW8tXHUwMDNlcGFnZS5wYWdlX3R5cGUpIFx1MDAzZVx1MDAzZSAyMykgPT1cbiYjNDM7XHRcdCgoUEdUWV9odWdldGxiIFx1MDAzY1x1MDAzYyAxKSB8IDEpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgZm9saW9fc2V0X2h1Z2VfcG9pc29uKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4mIzQzO3tcbiYjNDM7XHRmb2xpby1cdTAwM2VwYWdlLnBhZ2VfdHlwZSB8PSAoMSBcdTAwM2NcdTAwM2MgMjMpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgZm9saW9fY2xlYXJfaHVnZV9wb2lzb24oc3RydWN0IGZvbGlvICpmb2xpbylcbiYjNDM7e1xuJiM0MztcdGZvbGlvLVx1MDAzZXBhZ2UucGFnZV90eXBlIFx1MDAyNj0gfigxIFx1MDAzY1x1MDAzYyAyMyk7XG4mIzQzO31cbiAjZWxzZVxuIEZPTElPX1RFU1RfRkxBR19GQUxTRShodWdldGxiKVxuJiM0MztGT0xJT19URVNUX0ZMQUdfRkFMU0UoaHVnZV9wb2lzb24pXG4gI2VuZGlmXG4gXG4gUEFHRV9UWVBFX09QUyhac21hbGxvYywgenNtYWxsb2MsIHpzbWFsbG9jKVxuQEAgLTEwNjgsMTAgJiM0MzsxMDkwLDE0IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBQYWdlSHVnZShjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSlcbiBcdHJldHVybiBmb2xpb190ZXN0X2h1Z2V0bGIocGFnZV9mb2xpbyhwYWdlKSk7XG4gfVxuIFxuJiM0Mztib29sIGh1Z2V0bGJfcGFnZV9od3BvaXNvbihjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvLCBjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSk7XG4mIzQzO2Jvb2wgaHVnZXRsYl91bnJlZl9wYWdlX2h3cG9pc29uKGNvbnN0IHN0cnVjdCBwYWdlICpwYWdlKTtcbiYjNDM7XG4gLypcbi0gKiBDaGVjayBpZiBhIHBhZ2UgaXMgY3VycmVudGx5IG1hcmtlZCBIV1BvaXNvbmVkLiBOb3RlIHRoYXQgdGhpcyBjaGVjayBpc1xuLSAqIGJlc3QgZWZmb3J0IG9ubHkgYW5kIGluaGVyZW50bHkgcmFjeTogdGhlcmUgaXMgbm8gd2F5IHRvIHN5bmNocm9uaXplIHdpdGhcbi0gKiBmYWlsaW5nIGhhcmR3YXJlLlxuJiM0MzsgKiBDaGVjayBpZiBhIHBhZ2UgaXMgY3VycmVudGx5IG1hcmtlZCBIV1BvaXNvbmVkLiAgVGhpcyBjaGVjayBpcyBiZXN0XG4mIzQzOyAqIGVmZm9ydCBvbmx5IGFuZCBpbmhlcmVudGx5IHJhY3k6IHRoZXJlIGlzIG5vIHdheSB0byBzeW5jaHJvbml6ZSB3aXRoXG4mIzQzOyAqIGZhaWxpbmcgaGFyZHdhcmUuICBUaGUgY2FsbGVyIG1heSBub3QgaGF2ZSBhIHJlZmNvdW50IG9uIHRoZSBmb2xpb1xuJiM0MzsgKiBjb250YWluaW5nIHRoZSBwYWdlLCBzbyB3ZSBtdXN0IGJlIGNhcmVmdWwgdG8gbm90IHRyaXAgYW55IGFzc2VydGlvbnMuXG4gICovXG4gc3RhdGljIGlubGluZSBib29sIGlzX3BhZ2VfaHdwb2lzb24oY29uc3Qgc3RydWN0IHBhZ2UgKnBhZ2UpXG4ge1xuQEAgLTEwODAsMTMgJiM0MzsxMTA2LDI2IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBpc19wYWdlX2h3cG9pc29uKGNvbnN0IHN0cnVjdCBwYWdlICpwYWdlKVxuIFx0aWYgKFBhZ2VIV1BvaXNvbihwYWdlKSlcbiBcdFx0cmV0dXJuIHRydWU7XG4gXHRmb2xpbyA9IHBhZ2VfZm9saW8ocGFnZSk7XG4tXHRyZXR1cm4gZm9saW9fdGVzdF9odWdldGxiKGZvbGlvKSBcdTAwMjZcdTAwMjYgUGFnZUhXUG9pc29uKFx1MDAyNmZvbGlvLVx1MDAzZXBhZ2UpO1xuJiM0MztcdGlmIChmb2xpb190ZXN0X2h1Z2VfcG9pc29uKGZvbGlvKSlcbiYjNDM7XHRcdHJldHVybiBodWdldGxiX3VucmVmX3BhZ2VfaHdwb2lzb24ocGFnZSk7XG4mIzQzO1x0LyogSW4gY2FzZSB3ZSByYWNlZCB3aXRoIGh1Z2V0bGIgdHJhbnNmZXJyaW5nIGZsYWdzICovXG4mIzQzO1x0cmV0dXJuIFBhZ2VIV1BvaXNvbihwYWdlKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGlubGluZSBib29sIGlzX3JlZl9wYWdlX2h3cG9pc29uKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8sXG4mIzQzO1x0XHRjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSlcbiYjNDM7e1xuJiM0MztcdGlmIChQYWdlSFdQb2lzb24ocGFnZSkpXG4mIzQzO1x0XHRyZXR1cm4gdHJ1ZTtcbiYjNDM7XHRpZiAoZm9saW9fdGVzdF9odWdldGxiKGZvbGlvKSlcbiYjNDM7XHRcdHJldHVybiBodWdldGxiX3BhZ2VfaHdwb2lzb24oZm9saW8sIHBhZ2UpO1xuJiM0MztcdHJldHVybiBmYWxzZTtcbiB9XG4gXG4tc3RhdGljIGlubGluZSBib29sIGZvbGlvX2NvbnRhaW5faHdwb2lzb25lZF9wYWdlKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4mIzQzO3N0YXRpYyBpbmxpbmUgYm9vbCBmb2xpb19oYXNfaHdwb2lzb25lZF9wYWdlKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8pXG4ge1xuLVx0cmV0dXJuIGZvbGlvX3Rlc3RfaHdwb2lzb24oZm9saW8pIHx8XG4tXHQgICAgKGZvbGlvX3Rlc3RfbGFyZ2UoZm9saW8pIFx1MDAyNlx1MDAyNiBmb2xpb190ZXN0X2hhc19od3BvaXNvbmVkKGZvbGlvKSk7XG4mIzQzO1x0cmV0dXJuIFBhZ2VIV1BvaXNvbihcdTAwMjZmb2xpby1cdTAwM2VwYWdlKSB8fFxuJiM0MztcdCAgICAgICAoZm9saW9fdGVzdF9sYXJnZShmb2xpbykgXHUwMDI2XHUwMDI2IGZvbGlvX3Rlc3RfaGFzX2h3cG9pc29uZWQoZm9saW8pKTtcbiB9XG4gXG4gYm9vbCBpc19mcmVlX2J1ZGR5X3BhZ2UoY29uc3Qgc3RydWN0IHBhZ2UgKnBhZ2UpO1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGFnZW1hcC5oIGIvaW5jbHVkZS9saW51eC9wYWdlbWFwLmhcbmluZGV4IDJjMzcxOGQ1OTJkNmRkLi42ZmRlZTViMDM2MjFiOSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvcGFnZW1hcC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L3BhZ2VtYXAuaFxuQEAgLTIxMCw2ICYjNDM7MjEwLDcgQEAgZW51bSBtYXBwaW5nX2ZsYWdzIHtcbiBcdEFTX1dSSVRFQkFDS19NQVlfREVBRExPQ0tfT05fUkVDTEFJTSA9IDksXG4gXHRBU19LRVJORUxfRklMRSA9IDEwLFx0LyogbWFwcGluZyBmb3IgYSBmYWtlIGtlcm5lbCBmaWxlIHRoYXQgc2hvdWxkbiYjMzk7dFxuIFx0XHRcdFx0ICAgYWNjb3VudCB1c2FnZSB0byB1c2VyIGNncm91cHMgKi9cbiYjNDM7XHRBU19BVVRIT1JJVEFUSVZFID0gMTEsXHQvKiBJZiB3ZSBtaXNzIGluIHRoZSBwYWdlIGNhY2hlLCBpdCYjMzk7cyBhIGhvbGUgKi9cbiBcdC8qIEJpdHMgMTYtMjUgYXJlIHVzZWQgZm9yIEZPTElPX09SREVSICovXG4gXHRBU19GT0xJT19PUkRFUl9CSVRTID0gNSxcbiBcdEFTX0ZPTElPX09SREVSX01JTiA9IDE2LFxuQEAgLTM0NSw2ICYjNDM7MzQ2LDE2IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBtYXBwaW5nX3dyaXRlYmFja19tYXlfZGVhZGxvY2tfb25fcmVjbGFpbShjb25zdCBzdHJ1Y3QgYWRkcmVzXG4gXHRyZXR1cm4gdGVzdF9iaXQoQVNfV1JJVEVCQUNLX01BWV9ERUFETE9DS19PTl9SRUNMQUlNLCBcdTAwMjZtYXBwaW5nLVx1MDAzZWZsYWdzKTtcbiB9XG4gXG4mIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBtYXBwaW5nX3NldF9hdXRob3JpdGF0aXZlKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nKVxuJiM0Mzt7XG4mIzQzO1x0c2V0X2JpdChBU19BVVRIT1JJVEFUSVZFLCBcdTAwMjZtYXBwaW5nLVx1MDAzZWZsYWdzKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGlubGluZSBib29sIG1hcHBpbmdfaXNfYXV0aG9yaXRhdGl2ZShjb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZylcbiYjNDM7e1xuJiM0MztcdHJldHVybiB0ZXN0X2JpdChBU19BVVRIT1JJVEFUSVZFLCBcdTAwMjZtYXBwaW5nLVx1MDAzZWZsYWdzKTtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgaW5saW5lIGdmcF90IG1hcHBpbmdfZ2ZwX21hc2soY29uc3Qgc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcpXG4ge1xuIFx0cmV0dXJuIG1hcHBpbmctXHUwMDNlZ2ZwX21hc2s7XG5AQCAtMzczLDcgJiM0MzszODQsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgbWFwcGluZ19zZXRfZ2ZwX21hc2soc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm0sIGdmcF90IG1hc2spXG4gICogYXNzdW1wdGlvbnMgYWJvdXQgbWF4aW11bSBvcmRlciBpZiBUSFAgYXJlIGRpc2FibGVkLCBidXQgOCBzZWVtcyBsaWtlXG4gICogYSBnb29kIG9yZGVyICh0aGF0JiMzOTtzIDFNQiBpZiB5b3UmIzM5O3JlIHVzaW5nIDRrQiBwYWdlcylcbiAgKi9cbi0jaWZkZWYgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFXG4mIzQzOyNpZmRlZiBDT05GSUdfRklMRU1BUF9MQVJHRV9GT0xJT1xuICNkZWZpbmUgUFJFRkVSUkVEX01BWF9QQUdFQ0FDSEVfT1JERVJcdEhQQUdFX1BNRF9PUkRFUlxuICNlbHNlXG4gI2RlZmluZSBQUkVGRVJSRURfTUFYX1BBR0VDQUNIRV9PUkRFUlx0OFxuQEAgLTM5NCw3ICYjNDM7NDA1LDcgQEAgc3RhdGljIGlubGluZSB2b2lkIG1hcHBpbmdfc2V0X2dmcF9tYXNrKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptLCBnZnBfdCBtYXNrKVxuICAqL1xuIHN0YXRpYyBpbmxpbmUgc2l6ZV90IG1hcHBpbmdfbWF4X2ZvbGlvX3NpemVfc3VwcG9ydGVkKHZvaWQpXG4ge1xuLVx0aWYgKElTX0VOQUJMRUQoQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFKSlcbiYjNDM7XHRpZiAoSVNfRU5BQkxFRChDT05GSUdfRklMRU1BUF9MQVJHRV9GT0xJTykpXG4gXHRcdHJldHVybiAxVSBcdTAwM2NcdTAwM2MgKFBBR0VfU0hJRlQgJiM0MzsgTUFYX1BBR0VDQUNIRV9PUkRFUik7XG4gXHRyZXR1cm4gUEFHRV9TSVpFO1xuIH1cbkBAIC00MDUsMjkgJiM0Mzs0MTYsMjMgQEAgc3RhdGljIGlubGluZSBzaXplX3QgbWFwcGluZ19tYXhfZm9saW9fc2l6ZV9zdXBwb3J0ZWQodm9pZClcbiAgKiBAbWluOiBNaW5pbXVtIGZvbGlvIG9yZGVyIChiZXR3ZWVuIDAtTUFYX1BBR0VDQUNIRV9PUkRFUiBpbmNsdXNpdmUpLlxuICAqIEBtYXg6IE1heGltdW0gZm9saW8gb3JkZXIgKGJldHdlZW4gQG1pbi1NQVhfUEFHRUNBQ0hFX09SREVSIGluY2x1c2l2ZSkuXG4gICpcbi0gKiBUaGUgZmlsZXN5c3RlbSBzaG91bGQgY2FsbCB0aGlzIGZ1bmN0aW9uIGluIGl0cyBpbm9kZSBjb25zdHJ1Y3RvciB0b1xuLSAqIGluZGljYXRlIHdoaWNoIGJhc2Ugc2l6ZSAobWluKSBhbmQgbWF4aW11bSBzaXplIChtYXgpIG9mIGZvbGlvIHRoZSBWRlNcbi0gKiBjYW4gdXNlIHRvIGNhY2hlIHRoZSBjb250ZW50cyBvZiB0aGUgZmlsZS4gIFRoaXMgc2hvdWxkIG9ubHkgYmUgdXNlZFxuLSAqIGlmIHRoZSBmaWxlc3lzdGVtIG5lZWRzIHNwZWNpYWwgaGFuZGxpbmcgb2YgZm9saW8gc2l6ZXMgKGllIHRoZXJlIGlzXG4tICogc29tZXRoaW5nIHRoZSBjb3JlIGNhbm5vdCBrbm93KS5cbiYjNDM7ICogVGhlIGZpbGVzeXN0ZW0gc2hvdWxkIGNhbGwgdGhpcyBmdW5jdGlvbiBpbiBpdHMgaW5vZGUgY29uc3RydWN0b3JcbiYjNDM7ICogdG8gaW5kaWNhdGUgd2hpY2ggc2l6ZSBmb2xpb3MgY2FuIGJlIHVzZWQgdG8gY2FjaGUgdGhlIGNvbnRlbnRzIG9mXG4mIzQzOyAqIHRoZSBpbm9kZS4gIFRoaXMgc2hvdWxkIG9ubHkgYmUgdXNlZCBpZiB0aGUgZmlsZXN5c3RlbSBuZWVkcyBzcGVjaWFsXG4mIzQzOyAqIGhhbmRsaW5nIG9mIGZvbGlvIHNpemVzIChpZSB0aGVyZSBpcyBzb21ldGhpbmcgdGhlIGNvcmUgY2Fubm90IGtub3cpLlxuICAqIERvIG5vdCB0dW5lIGl0IGJhc2VkIG9uLCBlZywgaV9zaXplLlxuICAqXG4mIzQzOyAqIGh1Z2V0bGIgY2FsbHMgdGhpcyB3aXRoIG9yZGVycyBsYXJnZXIgdGhhbiBNQVhfUEFHRUNBQ0hFX09SREVSLlxuJiM0MzsgKiBOb3JtYWwgZmlsZXN5c3RlbXMgc2hvdWxkIG5vdCBkbyB0aGlzLlxuJiM0MzsgKlxuICAqIENvbnRleHQ6IFRoaXMgc2hvdWxkIG5vdCBiZSBjYWxsZWQgd2hpbGUgdGhlIGlub2RlIGlzIGFjdGl2ZSBhcyBpdFxuICAqIGlzIG5vbi1hdG9taWMuXG4gICovXG4gc3RhdGljIGlubGluZSB2b2lkIG1hcHBpbmdfc2V0X2ZvbGlvX29yZGVyX3JhbmdlKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxuLVx0XHRcdFx0XHRcdCB1bnNpZ25lZCBpbnQgbWluLFxuLVx0XHRcdFx0XHRcdCB1bnNpZ25lZCBpbnQgbWF4KVxuJiM0MztcdFx0dW5zaWduZWQgaW50IG1pbiwgdW5zaWduZWQgaW50IG1heClcbiB7XG4tXHRpZiAoIUlTX0VOQUJMRUQoQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFKSlcbiYjNDM7XHRpZiAoIUlTX0VOQUJMRUQoQ09ORklHX0ZJTEVNQVBfTEFSR0VfRk9MSU8pKVxuIFx0XHRyZXR1cm47XG4tXG4tXHRpZiAobWluIFx1MDAzZSBNQVhfUEFHRUNBQ0hFX09SREVSKVxuLVx0XHRtaW4gPSBNQVhfUEFHRUNBQ0hFX09SREVSO1xuLVxuLVx0aWYgKG1heCBcdTAwM2UgTUFYX1BBR0VDQUNIRV9PUkRFUilcbi1cdFx0bWF4ID0gTUFYX1BBR0VDQUNIRV9PUkRFUjtcbi1cbiBcdGlmIChtYXggXHUwMDNjIG1pbilcbiBcdFx0bWF4ID0gbWluO1xuIFxuQEAgLTQ2MCw3ICYjNDM7NDY1LDcgQEAgc3RhdGljIGlubGluZSB2b2lkIG1hcHBpbmdfc2V0X2xhcmdlX2ZvbGlvcyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZylcbiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludFxuIG1hcHBpbmdfbWF4X2ZvbGlvX29yZGVyKGNvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nKVxuIHtcbi1cdGlmICghSVNfRU5BQkxFRChDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UpKVxuJiM0MztcdGlmICghSVNfRU5BQkxFRChDT05GSUdfRklMRU1BUF9MQVJHRV9GT0xJTykpXG4gXHRcdHJldHVybiAwO1xuIFx0cmV0dXJuIChtYXBwaW5nLVx1MDAzZWZsYWdzIFx1MDAyNiBBU19GT0xJT19PUkRFUl9NQVhfTUFTSykgXHUwMDNlXHUwMDNlIEFTX0ZPTElPX09SREVSX01BWDtcbiB9XG5AQCAtNDY4LDcgJiM0Mzs0NzMsNyBAQCBtYXBwaW5nX21heF9mb2xpb19vcmRlcihjb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZylcbiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludFxuIG1hcHBpbmdfbWluX2ZvbGlvX29yZGVyKGNvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nKVxuIHtcbi1cdGlmICghSVNfRU5BQkxFRChDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UpKVxuJiM0MztcdGlmICghSVNfRU5BQkxFRChDT05GSUdfRklMRU1BUF9MQVJHRV9GT0xJTykpXG4gXHRcdHJldHVybiAwO1xuIFx0cmV0dXJuIChtYXBwaW5nLVx1MDAzZWZsYWdzIFx1MDAyNiBBU19GT0xJT19PUkRFUl9NSU5fTUFTSykgXHUwMDNlXHUwMDNlIEFTX0ZPTElPX09SREVSX01JTjtcbiB9XG5AQCAtNTI0LDcgJiM0Mzs1MjksNyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgbWFwcGluZ19sYXJnZV9mb2xpb19zdXBwb3J0KGNvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaVxuICAqXG4gICogUmV0dXJuOiBUcnVlIGlmIFBNRC1zaXplZCBmb2xpb3MgYXJlIHN1cHBvcnRlZCwgb3RoZXJ3aXNlIGZhbHNlLlxuICAqL1xuLSNpZmRlZiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VcbiYjNDM7I2lmZGVmIENPTkZJR19GSUxFTUFQX0xBUkdFX0ZPTElPXG4gc3RhdGljIGlubGluZSBib29sIG1hcHBpbmdfcG1kX2ZvbGlvX3N1cHBvcnQoY29uc3Qgc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcpXG4ge1xuIFx0LyogQVNfRk9MSU9fT1JERVIgaXMgb25seSByZWFzb25hYmxlIGZvciBwYWdlY2FjaGUgZm9saW9zICovXG5kaWZmIC0tZ2l0IGEvbW0vS2NvbmZpZyBiL21tL0tjb25maWdcbmluZGV4IDllMGNhNDgyNDkwNTRmLi5lNjY2ZGQxNGNhMGMzZCAxMDA2NDRcbi0tLSBhL21tL0tjb25maWdcbiYjNDM7JiM0MzsmIzQzOyBiL21tL0tjb25maWdcbkBAIC04NDMsMTEgJiM0Mzs4NDMsMTUgQEAgY29uZmlnIFBFUlNJU1RFTlRfSFVHRV9aRVJPX0ZPTElPXG4gY29uZmlnIE1NX0lEXG4gXHRkZWZfYm9vbCBuXG4gXG4mIzQzO2NvbmZpZyBMQVJHRV9GT0xJT1xuJiM0MztcdGRlZl9ib29sIG5cbiYjNDM7XHRzZWxlY3QgWEFSUkFZX01VTFRJXG4mIzQzO1xuIG1lbnVjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VcbiBcdGJvb2wgXCYjMzQ7VHJhbnNwYXJlbnQgSHVnZXBhZ2UgU3VwcG9ydFwmIzM0O1xuIFx0ZGVwZW5kcyBvbiBIQVZFX0FSQ0hfVFJBTlNQQVJFTlRfSFVHRVBBR0UgXHUwMDI2XHUwMDI2ICFQUkVFTVBUX1JUXG4gXHRzZWxlY3QgQ09NUEFDVElPTlxuLVx0c2VsZWN0IFhBUlJBWV9NVUxUSVxuJiM0MztcdHNlbGVjdCBMQVJHRV9GT0xJT1xuIFx0c2VsZWN0IE1NX0lEXG4gXHRoZWxwXG4gXHQgIFRyYW5zcGFyZW50IEh1Z2VwYWdlcyBhbGxvd3MgdGhlIGtlcm5lbCB0byB1c2UgaHVnZSBwYWdlcyBhbmRcbmRpZmYgLS1naXQgYS9tbS9maWxlbWFwLmMgYi9tbS9maWxlbWFwLmNcbmluZGV4IDU4ZWI5ZDI0MDY0MzQ4Li41YThjYzIwZTYyNGU0ZCAxMDA2NDRcbi0tLSBhL21tL2ZpbGVtYXAuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vZmlsZW1hcC5jXG5AQCAtMjQ4Myw2ICYjNDM7MjQ4Myw4IEBAIHN0YXRpYyB2b2lkIGZpbGVtYXBfZ2V0X3JlYWRfYmF0Y2goc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXG4gXG4gXHRcdGlmICghZm9saW9fYmF0Y2hfYWRkKGZiYXRjaCwgZm9saW8pKVxuIFx0XHRcdGJyZWFrO1xuJiM0MztcdFx0aWYgKGZvbGlvX2hhc19od3BvaXNvbmVkX3BhZ2UoZm9saW8pKVxuJiM0MztcdFx0XHRicmVhaztcbiBcdFx0aWYgKCFmb2xpb190ZXN0X3VwdG9kYXRlKGZvbGlvKSlcbiBcdFx0XHRicmVhaztcbiBcdFx0aWYgKGZvbGlvX3Rlc3RfcmVhZGFoZWFkKGZvbGlvKSlcbkBAIC0yNjk1LDYgJiM0MzsyNjk3LDggQEAgc3RhdGljIGludCBmaWxlbWFwX2dldF9wYWdlcyhzdHJ1Y3Qga2lvY2IgKmlvY2IsIHNpemVfdCBjb3VudCxcbiBcdGlmICghZm9saW9fYmF0Y2hfY291bnQoZmJhdGNoKSkge1xuIFx0XHRERUZJTkVfUkVBREFIRUFEKHJhY3RsLCBmaWxwLCBcdTAwMjZmaWxwLVx1MDAzZWZfcmEsIG1hcHBpbmcsIGluZGV4KTtcbiBcbiYjNDM7XHRcdGlmIChtYXBwaW5nX2lzX2F1dGhvcml0YXRpdmUobWFwcGluZykpXG4mIzQzO1x0XHRcdHJldHVybiAwO1xuIFx0XHRpZiAoaW9jYi1cdTAwM2VraV9mbGFncyBcdTAwMjYgSU9DQl9OT0lPKVxuIFx0XHRcdHJldHVybiAtRUFHQUlOO1xuIFx0XHRpZiAoaW9jYi1cdTAwM2VraV9mbGFncyBcdTAwMjYgSU9DQl9OT1dBSVQpXG5AQCAtMjc0OSw2ICYjNDM7Mjc1MywyOSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgcG9zX3NhbWVfZm9saW8obG9mZl90IHBvczEsIGxvZmZfdCBwb3MyLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIFx0cmV0dXJuIChwb3MxIFx1MDAzZVx1MDAzZSBzaGlmdCA9PSBwb3MyIFx1MDAzZVx1MDAzZSBzaGlmdCk7XG4gfVxuIFxuJiM0MztzdGF0aWMgc2l6ZV90IGFkanVzdF9yYW5nZV9od3BvaXNvbihjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzaXplX3Qgb2Zmc2V0LFxuJiM0MztcdFx0c2l6ZV90IGJ5dGVzKVxuJiM0Mzt7XG4mIzQzO1x0Y29uc3Qgc3RydWN0IHBhZ2UgKnBhZ2UgPSBmb2xpb19wYWdlKGZvbGlvLCBvZmZzZXQgLyBQQUdFX1NJWkUpO1xuJiM0MztcdHNpemVfdCBzYWZlX2J5dGVzO1xuJiM0MztcbiYjNDM7XHRpZiAoIWZvbGlvX2hhc19od3BvaXNvbmVkX3BhZ2UoZm9saW8pKVxuJiM0MztcdFx0cmV0dXJuIGJ5dGVzO1xuJiM0MztcdGlmIChpc19yZWZfcGFnZV9od3BvaXNvbihmb2xpbywgcGFnZSkpXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO1x0LyogU2FmZSB0byByZWFkIHRoZSByZW1haW5pbmcgYnl0ZXMgaW4gdGhpcyBwYWdlLiAqL1xuJiM0MztcdHNhZmVfYnl0ZXMgPSBQQUdFX1NJWkUgLSAob2Zmc2V0ICUgUEFHRV9TSVpFKTtcbiYjNDM7XHRwYWdlJiM0MzsmIzQzOztcbiYjNDM7XG4mIzQzO1x0LyogQ2hlY2sgZWFjaCByZW1haW5pbmcgcGFnZSBhcyBsb25nIGFzIHdlIGFyZSBub3QgZG9uZSB5ZXQuICovXG4mIzQzO1x0Zm9yICg7IHNhZmVfYnl0ZXMgXHUwMDNjIGJ5dGVzOyBzYWZlX2J5dGVzICYjNDM7PSBQQUdFX1NJWkUsIHBhZ2UmIzQzOyYjNDM7KVxuJiM0MztcdFx0aWYgKGlzX3JlZl9wYWdlX2h3cG9pc29uKGZvbGlvLCBwYWdlKSlcbiYjNDM7XHRcdFx0YnJlYWs7XG4mIzQzO1xuJiM0MztcdHJldHVybiBtaW4oc2FmZV9ieXRlcywgYnl0ZXMpO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyB2b2lkIGZpbGVtYXBfZW5kX2Ryb3BiZWhpbmRfcmVhZChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIHtcbiBcdGlmICghZm9saW9fdGVzdF9kcm9wYmVoaW5kKGZvbGlvKSlcbkBAIC0yODI4LDYgJiM0MzsyODU1LDIyIEBAIHNzaXplX3QgZmlsZW1hcF9yZWFkKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICppdGVyLFxuIFx0XHRcdGdvdG8gcHV0X2ZvbGlvcztcbiBcdFx0ZW5kX29mZnNldCA9IG1pbl90KGxvZmZfdCwgaXNpemUsIGlvY2ItXHUwMDNla2lfcG9zICYjNDM7IGl0ZXItXHUwMDNlY291bnQpO1xuIFxuJiM0MztcdFx0aWYgKCFmb2xpb19iYXRjaF9jb3VudChcdTAwMjZmYmF0Y2gpKSB7XG4mIzQzO1x0XHRcdHNpemVfdCBmc2l6ZSA9IG1hcHBpbmdfbWluX2ZvbGlvX25yYnl0ZXMobWFwcGluZyk7XG4mIzQzO1x0XHRcdHNpemVfdCBvZmZzZXQgPSBpb2NiLVx1MDAzZWtpX3BvcyBcdTAwMjYgKGZzaXplIC0gMSk7XG4mIzQzO1x0XHRcdHNpemVfdCBieXRlcyA9IG1pbl90KGxvZmZfdCwgZW5kX29mZnNldCAtIGlvY2ItXHUwMDNla2lfcG9zLFxuJiM0MztcdFx0XHRcdFx0ICAgICBmc2l6ZSAtIG9mZnNldCk7XG4mIzQzO1x0XHRcdHNpemVfdCBjb3BpZWQgPSBpb3ZfaXRlcl96ZXJvKGJ5dGVzLCBpdGVyKTtcbiYjNDM7XG4mIzQzO1x0XHRcdGFscmVhZHlfcmVhZCAmIzQzOz0gY29waWVkO1xuJiM0MztcdFx0XHRpb2NiLVx1MDAzZWtpX3BvcyAmIzQzOz0gY29waWVkO1xuJiM0MztcdFx0XHRsYXN0X3BvcyA9IGlvY2ItXHUwMDNla2lfcG9zO1xuJiM0MztcbiYjNDM7XHRcdFx0aWYgKGNvcGllZCBcdTAwM2MgYnl0ZXMpXG4mIzQzO1x0XHRcdFx0ZXJyb3IgPSAtRUZBVUxUO1xuJiM0MztcdFx0XHRjb250aW51ZTtcbiYjNDM7XHRcdH1cbiYjNDM7XG4gXHRcdC8qXG4gXHRcdCAqIE9uY2Ugd2Ugc3RhcnQgY29weWluZyBkYXRhLCB3ZSBkb24mIzM5O3Qgd2FudCB0byBiZSB0b3VjaGluZyBhbnlcbiBcdFx0ICogY2FjaGVsaW5lcyB0aGF0IG1pZ2h0IGJlIGNvbnRlbmRlZDpcbkBAIC0yODYyLDE0ICYjNDM7MjkwNSwxOCBAQCBzc2l6ZV90IGZpbGVtYXBfcmVhZChzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqaXRlcixcbiBcdFx0XHRpZiAod3JpdGFibHlfbWFwcGVkKVxuIFx0XHRcdFx0Zmx1c2hfZGNhY2hlX2ZvbGlvKGZvbGlvKTtcbiBcbi1cdFx0XHRjb3BpZWQgPSBjb3B5X2ZvbGlvX3RvX2l0ZXIoZm9saW8sIG9mZnNldCwgYnl0ZXMsIGl0ZXIpO1xuJiM0MztcdFx0XHRjb3BpZWQgPSBhZGp1c3RfcmFuZ2VfaHdwb2lzb24oZm9saW8sIG9mZnNldCwgYnl0ZXMpO1xuJiM0MztcdFx0XHRpZiAoY29waWVkIFx1MDAzYyBieXRlcylcbiYjNDM7XHRcdFx0XHRlcnJvciA9IC1FSU87XG4mIzQzO1x0XHRcdGNvcGllZCA9IGNvcHlfZm9saW9fdG9faXRlcihmb2xpbywgb2Zmc2V0LCBjb3BpZWQsIGl0ZXIpO1xuIFxuIFx0XHRcdGFscmVhZHlfcmVhZCAmIzQzOz0gY29waWVkO1xuIFx0XHRcdGlvY2ItXHUwMDNla2lfcG9zICYjNDM7PSBjb3BpZWQ7XG4gXHRcdFx0bGFzdF9wb3MgPSBpb2NiLVx1MDAzZWtpX3BvcztcbiBcbiBcdFx0XHRpZiAoY29waWVkIFx1MDAzYyBieXRlcykge1xuLVx0XHRcdFx0ZXJyb3IgPSAtRUZBVUxUO1xuJiM0MztcdFx0XHRcdGlmICghZXJyb3IpXG4mIzQzO1x0XHRcdFx0XHRlcnJvciA9IC1FRkFVTFQ7XG4gXHRcdFx0XHRicmVhaztcbiBcdFx0XHR9XG4gXHRcdH1cbmRpZmYgLS1naXQgYS9tbS9odWdlX21lbW9yeS5jIGIvbW0vaHVnZV9tZW1vcnkuY1xuaW5kZXggMmJjY2IwYTUzYTBhNjAuLjM1MzM0MDMwOTEwNzRjIDEwMDY0NFxuLS0tIGEvbW0vaHVnZV9tZW1vcnkuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vaHVnZV9tZW1vcnkuY1xuQEAgLTQ0MTMsNyAmIzQzOzQ0MTMsNyBAQCBzdGF0aWMgYm9vbCB0aHBfdW5kZXJ1c2VkKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4gXHRpZiAoa2h1Z2VwYWdlZF9tYXhfcHRlc19ub25lID09IEhQQUdFX1BNRF9OUiAtIDEpXG4gXHRcdHJldHVybiBmYWxzZTtcbiBcbi1cdGlmIChmb2xpb19jb250YWluX2h3cG9pc29uZWRfcGFnZShmb2xpbykpXG4mIzQzO1x0aWYgKGZvbGlvX2hhc19od3BvaXNvbmVkX3BhZ2UoZm9saW8pKVxuIFx0XHRyZXR1cm4gZmFsc2U7XG4gXG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBmb2xpb19ucl9wYWdlcyhmb2xpbyk7IGkmIzQzOyYjNDM7KSB7XG5kaWZmIC0tZ2l0IGEvbW0vaHVnZXRsYi5jIGIvbW0vaHVnZXRsYi5jXG5pbmRleCA1NzEyMTJiODA4MzVlYy4uYWFhYzZlMmFmNGMyNGEgMTAwNjQ0XG4tLS0gYS9tbS9odWdldGxiLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL2h1Z2V0bGIuY1xuQEAgLTEyNTUsNyAmIzQzOzEyNTUsNyBAQCBzdGF0aWMgc3RydWN0IGZvbGlvICpkZXF1ZXVlX2h1Z2V0bGJfZm9saW9fbm9kZV9leGFjdChzdHJ1Y3QgaHN0YXRlICpoLFxuIFx0XHRpZiAocGluIFx1MDAyNlx1MDAyNiAhZm9saW9faXNfbG9uZ3Rlcm1fcGlubmFibGUoZm9saW8pKVxuIFx0XHRcdGNvbnRpbnVlO1xuIFxuLVx0XHRpZiAoZm9saW9fdGVzdF9od3BvaXNvbihmb2xpbykpXG4mIzQzO1x0XHRpZiAoZm9saW9fdGVzdF9oYXNfaHdwb2lzb25lZChmb2xpbykpXG4gXHRcdFx0Y29udGludWU7XG4gXG4gXHRcdGlmIChpc19taWdyYXRlX2lzb2xhdGVfcGFnZShcdTAwMjZmb2xpby1cdTAwM2VwYWdlKSlcbkBAIC0xNDk4LDEwICYjNDM7MTQ5OCwxMCBAQCBzdGF0aWMgdm9pZCBfX3VwZGF0ZV9hbmRfZnJlZV9odWdldGxiX2ZvbGlvKHN0cnVjdCBoc3RhdGUgKmgsXG4gXHR9XG4gXG4gXHQvKlxuLVx0ICogTW92ZSBQYWdlSFdQb2lzb24gZmxhZyBmcm9tIGhlYWQgcGFnZSB0byB0aGUgcmF3IGVycm9yIHBhZ2VzLFxuLVx0ICogd2hpY2ggbWFrZXMgYW55IGhlYWx0aHkgc3VicGFnZXMgcmV1c2FibGUuXG4mIzQzO1x0ICogTW92ZSBIV1BvaXNvbiBmbGFnIHRvIGVhY2ggZXJyb3IgcGFnZVxuJiM0MztcdCAqIHdoaWNoIG1ha2VzIGFueSBoZWFsdGh5IHBhZ2VzIHJldXNhYmxlLlxuIFx0ICovXG4tXHRpZiAodW5saWtlbHkoZm9saW9fdGVzdF9od3BvaXNvbihmb2xpbykpKVxuJiM0MztcdGlmICh1bmxpa2VseShmb2xpb190ZXN0X2hhc19od3BvaXNvbmVkKGZvbGlvKSkpXG4gXHRcdGZvbGlvX2NsZWFyX2h1Z2V0bGJfaHdwb2lzb24oZm9saW8pO1xuIFxuIFx0Vk1fQlVHX09OX0ZPTElPKGZvbGlvX3JlZl9jb3VudChmb2xpbyksIGZvbGlvKTtcbkBAIC0xNzc1LDcgJiM0MzsxNzc1LDcgQEAgdm9pZCBpbml0X25ld19odWdldGxiX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4gICogc3RhYmxlLiAgRHVlIHRvIGxvY2tpbmcgb3JkZXIsIHdlIGNhbiBvbmx5IHRyeWxvY2tfd3JpdGUuICBJZiB3ZSBjYW5cbiAgKiBub3QgZ2V0IHRoZSBsb2NrLCBzaW1wbHkgcmV0dXJuIE5VTEwgdG8gY2FsbGVyLlxuICAqL1xuLXN0cnVjdCBhZGRyZXNzX3NwYWNlICpodWdldGxiX2ZvbGlvX21hcHBpbmdfbG9ja193cml0ZShzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuJiM0MztzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqaHVnZXRsYl9mb2xpb19tYXBwaW5nX2xvY2tfd3JpdGUoY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbylcbiB7XG4gXHRzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyA9IGZvbGlvX21hcHBpbmcoZm9saW8pO1xuIFxuQEAgLTM5OTgsNyAmIzQzOzM5OTgsNyBAQCBsb25nIGRlbW90ZV9wb29sX2h1Z2VfcGFnZShzdHJ1Y3QgaHN0YXRlICpzcmMsIG5vZGVtYXNrX3QgKm5vZGVzX2FsbG93ZWQsXG4gXHRcdHN0cnVjdCBmb2xpbyAqZm9saW8sICpuZXh0O1xuIFxuIFx0XHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoZm9saW8sIG5leHQsIFx1MDAyNnNyYy1cdTAwM2VodWdlcGFnZV9mcmVlbGlzdHNbbm9kZV0sIGxydSkge1xuLVx0XHRcdGlmIChmb2xpb190ZXN0X2h3cG9pc29uKGZvbGlvKSlcbiYjNDM7XHRcdFx0aWYgKGZvbGlvX3Rlc3RfaGFzX2h3cG9pc29uZWQoZm9saW8pKVxuIFx0XHRcdFx0Y29udGludWU7XG4gXG4gXHRcdFx0cmVtb3ZlX2h1Z2V0bGJfZm9saW8oc3JjLCBmb2xpbywgZmFsc2UpO1xuQEAgLTU4MDksNyAmIzQzOzU4MDksNyBAQCBzdGF0aWMgdm1fZmF1bHRfdCBodWdldGxiX25vX3BhZ2Uoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXG4gXHRcdCAqIGRvbiYjMzk7dCBoYXZlIGh3cG9pc29uZWQgc3dhcCBlbnRyeSBmb3IgZXJyb3JlZCB2aXJ0dWFsIGFkZHJlc3MuXG4gXHRcdCAqIFNvIHdlIG5lZWQgdG8gYmxvY2sgaHVnZXBhZ2UgZmF1bHQgYnkgUEdfaHdwb2lzb24gYml0IGNoZWNrLlxuIFx0XHQgKi9cbi1cdFx0aWYgKHVubGlrZWx5KGZvbGlvX3Rlc3RfaHdwb2lzb24oZm9saW8pKSkge1xuJiM0MztcdFx0aWYgKHVubGlrZWx5KGZvbGlvX3Rlc3RfaGFzX2h3cG9pc29uZWQoZm9saW8pKSkge1xuIFx0XHRcdHJldCA9IFZNX0ZBVUxUX0hXUE9JU09OX0xBUkdFIHxcbiBcdFx0XHRcdFZNX0ZBVUxUX1NFVF9ISU5ERVgoaHN0YXRlX2luZGV4KGgpKTtcbiBcdFx0XHRnb3RvIGJhY2tvdXRfdW5sb2NrZWQ7XG5AQCAtNjMxOCw3ICYjNDM7NjMxOCw3IEBAIGludCBodWdldGxiX21maWxsX2F0b21pY19wdGUocHRlX3QgKmRzdF9wdGUsXG4gXHRwdGwgPSBodWdlX3B0ZV9sb2NrKGgsIGRzdF9tbSwgZHN0X3B0ZSk7XG4gXG4gXHRyZXQgPSAtRUlPO1xuLVx0aWYgKGZvbGlvX3Rlc3RfaHdwb2lzb24oZm9saW8pKVxuJiM0MztcdGlmIChmb2xpb190ZXN0X2hhc19od3BvaXNvbmVkKGZvbGlvKSlcbiBcdFx0Z290byBvdXRfcmVsZWFzZV91bmxvY2s7XG4gXG4gXHRyZXQgPSAtRUVYSVNUO1xuZGlmZiAtLWdpdCBhL21tL21lbW9yeS1mYWlsdXJlLmMgYi9tbS9tZW1vcnktZmFpbHVyZS5jXG5pbmRleCA1MTUwOGE1NWM0MDU1ZS4uNzNlYmJjOTM1NjYxODIgMTAwNjQ0XG4tLS0gYS9tbS9tZW1vcnktZmFpbHVyZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9tZW1vcnktZmFpbHVyZS5jXG5AQCAtMTgxMCw1MCAmIzQzOzE4MTAsNjUgQEAgRVhQT1JUX1NZTUJPTF9HUEwobWZfZGF4X2tpbGxfcHJvY3MpO1xuIFxuIC8qXG4gICogU3RydWN0IHJhd19od3BfcGFnZSByZXByZXNlbnRzIGluZm9ybWF0aW9uIGFib3V0IFwmIzM0O3JhdyBlcnJvciBwYWdlXCYjMzQ7LFxuLSAqIGNvbnN0cnVjdGluZyBzaW5nbHkgbGlua2VkIGxpc3QgZnJvbSAtXHUwMDNlX2h1Z2V0bGJfaHdwb2lzb24gZmllbGQgb2YgZm9saW8uXG4mIzQzOyAqIGNvbnN0cnVjdGluZyBzaW5nbHkgbGlua2VkIGxpc3QgZnJvbSBmb2xpby1cdTAwM2VodWdldGxiX2h3cG9pc29uIGZpZWxkLlxuICAqL1xuIHN0cnVjdCByYXdfaHdwX3BhZ2Uge1xuIFx0c3RydWN0IGxsaXN0X25vZGUgbm9kZTtcbiBcdHN0cnVjdCBwYWdlICpwYWdlO1xuIH07XG4gXG4tc3RhdGljIGlubGluZSBzdHJ1Y3QgbGxpc3RfaGVhZCAqcmF3X2h3cF9saXN0X2hlYWQoc3RydWN0IGZvbGlvICpmb2xpbylcbiYjNDM7c3RhdGljIGJvb2wgcHJlY2lzZV9wYWdlX3BvaXNvbmVkKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8sXG4mIzQzO1x0XHRjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSlcbiB7XG4tXHRyZXR1cm4gKHN0cnVjdCBsbGlzdF9oZWFkICopXHUwMDI2Zm9saW8tXHUwMDNlX2h1Z2V0bGJfaHdwb2lzb247XG4tfVxuLVxuLWJvb2wgaXNfcmF3X2h3cG9pc29uX3BhZ2VfaW5faHVnZXBhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UpXG4te1xuLVx0c3RydWN0IGxsaXN0X2hlYWQgKnJhd19od3BfaGVhZDtcbi1cdHN0cnVjdCByYXdfaHdwX3BhZ2UgKnA7XG4tXHRzdHJ1Y3QgZm9saW8gKmZvbGlvID0gcGFnZV9mb2xpbyhwYWdlKTtcbi1cdGJvb2wgcmV0ID0gZmFsc2U7XG4tXG4tXHRpZiAoIWZvbGlvX3Rlc3RfaHdwb2lzb24oZm9saW8pKVxuLVx0XHRyZXR1cm4gZmFsc2U7XG4tXG4tXHRpZiAoIWZvbGlvX3Rlc3RfaHVnZXRsYihmb2xpbykpXG4tXHRcdHJldHVybiBQYWdlSFdQb2lzb24ocGFnZSk7XG4mIzQzO1x0Y29uc3Qgc3RydWN0IGxsaXN0X2hlYWQgKmxpc3QgPSBcdTAwMjZmb2xpby1cdTAwM2VodWdldGxiX2h3cG9pc29uO1xuJiM0MztcdGNvbnN0IHN0cnVjdCByYXdfaHdwX3BhZ2UgKnA7XG4gXG4gXHQvKlxuLVx0ICogV2hlbiBSYXdId3BVbnJlbGlhYmxlIGlzIHNldCwga2VybmVsIGxvc3QgdHJhY2sgb2Ygd2hpY2ggc3VicGFnZXNcbi1cdCAqIGFyZSBIV1BPSVNPTi4gU28gcmV0dXJuIGFzIGlmIEFMTCBzdWJwYWdlcyBhcmUgSFdQT0lTT05lZC5cbiYjNDM7XHQgKiBXaGVuIFJhd0h3cFVucmVsaWFibGUgaXMgc2V0LCBrZXJuZWwgbG9zdCB0cmFjayBvZiB3aGljaCBwYWdlc1xuJiM0MztcdCAqIGFyZSBIV1BPSVNPTi4gU28gcmV0dXJuIGFzIGlmIEFMTCBwYWdlcyBhcmUgSFdQT0lTT05lZC5cbiBcdCAqL1xuIFx0aWYgKGZvbGlvX3Rlc3RfaHVnZXRsYl9yYXdfaHdwX3VucmVsaWFibGUoZm9saW8pKVxuIFx0XHRyZXR1cm4gdHJ1ZTtcbiBcbi1cdG11dGV4X2xvY2soXHUwMDI2bWZfbXV0ZXgpO1xuLVxuLVx0cmF3X2h3cF9oZWFkID0gcmF3X2h3cF9saXN0X2hlYWQoZm9saW8pO1xuLVx0bGxpc3RfZm9yX2VhY2hfZW50cnkocCwgcmF3X2h3cF9oZWFkLVx1MDAzZWZpcnN0LCBub2RlKSB7XG4tXHRcdGlmIChwYWdlID09IHAtXHUwMDNlcGFnZSkge1xuLVx0XHRcdHJldCA9IHRydWU7XG4tXHRcdFx0YnJlYWs7XG4tXHRcdH1cbiYjNDM7XHRsbGlzdF9mb3JfZWFjaF9lbnRyeShwLCBSRUFEX09OQ0UobGlzdC1cdTAwM2VmaXJzdCksIG5vZGUpIHtcbiYjNDM7XHRcdGlmIChwYWdlID09IHAtXHUwMDNlcGFnZSlcbiYjNDM7XHRcdFx0cmV0dXJuIHRydWU7XG4gXHR9XG4gXG4tXHRtdXRleF91bmxvY2soXHUwMDI2bWZfbXV0ZXgpO1xuJiM0MztcdHJldHVybiBmYWxzZTtcbiYjNDM7fVxuIFxuJiM0MzsvKlxuJiM0MzsgKiBDaGVjayBpZiBhIGdpdmVuIEBwYWdlIGluIGEgaHVnZXRsYiBmb2xpbyBpcyBIV1BPSVNPTi5cbiYjNDM7ICovXG4mIzQzO2Jvb2wgaHVnZXRsYl9wYWdlX2h3cG9pc29uKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8sIGNvbnN0IHN0cnVjdCBwYWdlICpwYWdlKVxuJiM0Mzt7XG4mIzQzO1x0aWYgKCFmb2xpb190ZXN0X2hhc19od3BvaXNvbmVkKGZvbGlvKSlcbiYjNDM7XHRcdHJldHVybiBmYWxzZTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHByZWNpc2VfcGFnZV9wb2lzb25lZChmb2xpbywgcGFnZSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qXG4mIzQzOyAqIFdlIGhhdmUgbm8gcmVmZXJlbmNlIG9uIHRoZSBmb2xpbyBjb250YWluaW5nIHRoaXMgcGFnZS5cbiYjNDM7ICogVGhlIGh1Z2V0bGJfbG9jayBrZWVwcyBodWdldGxiIGZvbGlvcyBmcm9tIGJlaW5nIGZyZWVkLlxuJiM0MzsgKi9cbiYjNDM7Ym9vbCBodWdldGxiX3VucmVmX3BhZ2VfaHdwb2lzb24oY29uc3Qgc3RydWN0IHBhZ2UgKnBhZ2UpXG4mIzQzO3tcbiYjNDM7XHRjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvO1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4mIzQzO1x0Ym9vbCByZXQ7XG4mIzQzO1xuJiM0MztcdHNwaW5fbG9ja19pcnFzYXZlKFx1MDAyNmh1Z2V0bGJfbG9jaywgZmxhZ3MpO1xuJiM0MztcdGZvbGlvID0gcGFnZV9mb2xpbyhwYWdlKTtcbiYjNDM7XHRpZiAoIWZvbGlvX3Rlc3RfaHVnZV9wb2lzb24oZm9saW8pKSB7XG4mIzQzO1x0XHRyZXQgPSBQYWdlSFdQb2lzb24ocGFnZSk7XG4mIzQzO1x0XHRnb3RvIHVubG9jaztcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldCA9IHByZWNpc2VfcGFnZV9wb2lzb25lZChmb2xpbywgcGFnZSk7XG4mIzQzO3VubG9jazpcbiYjNDM7XHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNmh1Z2V0bGJfbG9jaywgZmxhZ3MpO1xuIFx0cmV0dXJuIHJldDtcbiB9XG4gXG5AQCAtMTg2Myw3ICYjNDM7MTg3OCw3IEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIF9fZm9saW9fZnJlZV9yYXdfaHdwKHN0cnVjdCBmb2xpbyAqZm9saW8sIGJvb2wgbW92ZV9mbGFnKVxuIFx0c3RydWN0IHJhd19od3BfcGFnZSAqcCwgKm5leHQ7XG4gXHR1bnNpZ25lZCBsb25nIGNvdW50ID0gMDtcbiBcbi1cdGhlYWQgPSBsbGlzdF9kZWxfYWxsKHJhd19od3BfbGlzdF9oZWFkKGZvbGlvKSk7XG4mIzQzO1x0aGVhZCA9IGxsaXN0X2RlbF9hbGwoXHUwMDI2Zm9saW8tXHUwMDNlaHVnZXRsYl9od3BvaXNvbik7XG4gXHRsbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHAsIG5leHQsIGhlYWQsIG5vZGUpIHtcbiBcdFx0aWYgKG1vdmVfZmxhZylcbiBcdFx0XHRTZXRQYWdlSFdQb2lzb24ocC1cdTAwM2VwYWdlKTtcbkBAIC0xODgxLDI2ICYjNDM7MTg5Niw0MSBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBfX2ZvbGlvX2ZyZWVfcmF3X2h3cChzdHJ1Y3QgZm9saW8gKmZvbGlvLCBib29sIG1vdmVfZmxhZylcbiAjZGVmaW5lXHRNRl9IVUdFVExCX0ZPTElPX1BSRV9QT0lTT05FRFx0M1x0LyogZm9saW8gYWxyZWFkeSBwb2lzb25lZCAqL1xuICNkZWZpbmVcdE1GX0hVR0VUTEJfUEFHRV9QUkVfUE9JU09ORURcdDRcdC8qIGV4YWN0IHBhZ2UgYWxyZWFkeSBwb2lzb25lZCAqL1xuICNkZWZpbmVcdE1GX0hVR0VUTEJfUkVUUllcdFx0NVx0LyogaHVnZXBhZ2UgaXMgYnVzeSwgcmV0cnkgKi9cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbmxpbmUgaW50IGh1Z2V0bGJfc2V0X3BvaXNvbihzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuJiM0Mzt7XG4mIzQzO1x0aWYgKGZvbGlvX3Rlc3Rfc2V0X2hhc19od3BvaXNvbmVkKGZvbGlvKSlcbiYjNDM7XHRcdHJldHVybiBNRl9IVUdFVExCX0ZPTElPX1BSRV9QT0lTT05FRDtcbiYjNDM7XHRmb2xpb19zZXRfaHVnZV9wb2lzb24oZm9saW8pO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW5saW5lIGludCBodWdldGxiX2NsZWFyX3BvaXNvbihzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuJiM0Mzt7XG4mIzQzO1x0aWYgKCFmb2xpb190ZXN0X2NsZWFyX2hhc19od3BvaXNvbmVkKGZvbGlvKSlcbiYjNDM7XHRcdHJldHVybiAtRUJVU1k7XG4mIzQzO1x0Zm9saW9fY2xlYXJfaHVnZV9wb2lzb24oZm9saW8pO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuIC8qXG4gICogU2V0IGh1Z2V0bGIgZm9saW8gYXMgaHdwb2lzb25lZCwgdXBkYXRlIGZvbGlvIHByaXZhdGUgcmF3IGh3cG9pc29uIGxpc3RcbiAgKiB0byBrZWVwIHRyYWNrIG9mIHRoZSBwb2lzb25lZCBwYWdlcy5cbiAgKi9cbiBzdGF0aWMgaW50IGh1Z2V0bGJfdXBkYXRlX2h3cG9pc29uKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBwYWdlICpwYWdlKVxuIHtcbi1cdHN0cnVjdCBsbGlzdF9oZWFkICpoZWFkO1xuIFx0c3RydWN0IHJhd19od3BfcGFnZSAqcmF3X2h3cDtcbiBcdHN0cnVjdCByYXdfaHdwX3BhZ2UgKnA7XG4tXHRpbnQgcmV0ID0gZm9saW9fdGVzdF9zZXRfaHdwb2lzb24oZm9saW8pID8gTUZfSFVHRVRMQl9GT0xJT19QUkVfUE9JU09ORUQgOiAwO1xuJiM0MztcdGludCByZXQgPSBodWdldGxiX3NldF9wb2lzb24oZm9saW8pO1xuIFxuIFx0LypcbiBcdCAqIE9uY2UgdGhlIGh3cG9pc29uIGh1Z2VwYWdlIGhhcyBsb3N0IHJlbGlhYmxlIHJhdyBlcnJvciBpbmZvLFxuLVx0ICogdGhlcmUgaXMgbGl0dGxlIG1lYW5pbmcgdG8ga2VlcCBhZGRpdGlvbmFsIGVycm9yIGluZm8gcHJlY2lzZWx5LFxuLVx0ICogc28gc2tpcCB0byBhZGQgYWRkaXRpb25hbCByYXcgZXJyb3IgaW5mby5cbiYjNDM7XHQgKiB0aGVyZSBpcyBubyBwb2ludCBpbiBrZWVwaW5nIGFkZGl0aW9uYWwgZXJyb3IgaW5mbyBwcmVjaXNlbHksXG4mIzQzO1x0ICogc28gc2tpcCBhZGRpbmcgYWRkaXRpb25hbCByYXcgZXJyb3IgaW5mby5cbiBcdCAqL1xuIFx0aWYgKGZvbGlvX3Rlc3RfaHVnZXRsYl9yYXdfaHdwX3VucmVsaWFibGUoZm9saW8pKVxuIFx0XHRyZXR1cm4gTUZfSFVHRVRMQl9GT0xJT19QUkVfUE9JU09ORUQ7XG4tXHRoZWFkID0gcmF3X2h3cF9saXN0X2hlYWQoZm9saW8pO1xuLVx0bGxpc3RfZm9yX2VhY2hfZW50cnkocCwgaGVhZC1cdTAwM2VmaXJzdCwgbm9kZSkge1xuJiM0MztcdGxsaXN0X2Zvcl9lYWNoX2VudHJ5KHAsIGZvbGlvLVx1MDAzZWh1Z2V0bGJfaHdwb2lzb24uZmlyc3QsIG5vZGUpIHtcbiBcdFx0aWYgKHAtXHUwMDNlcGFnZSA9PSBwYWdlKVxuIFx0XHRcdHJldHVybiBNRl9IVUdFVExCX1BBR0VfUFJFX1BPSVNPTkVEO1xuIFx0fVxuQEAgLTE5MDgsNyAmIzQzOzE5MzgsNyBAQCBzdGF0aWMgaW50IGh1Z2V0bGJfdXBkYXRlX2h3cG9pc29uKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBwYWdlICpwYWdlKVxuIFx0cmF3X2h3cCA9IGttYWxsb2Nfb2JqKHN0cnVjdCByYXdfaHdwX3BhZ2UsIEdGUF9BVE9NSUMpO1xuIFx0aWYgKHJhd19od3ApIHtcbiBcdFx0cmF3X2h3cC1cdTAwM2VwYWdlID0gcGFnZTtcbi1cdFx0bGxpc3RfYWRkKFx1MDAyNnJhd19od3AtXHUwMDNlbm9kZSwgaGVhZCk7XG4mIzQzO1x0XHRsbGlzdF9hZGQoXHUwMDI2cmF3X2h3cC1cdTAwM2Vub2RlLCBcdTAwMjZmb2xpby1cdTAwM2VodWdldGxiX2h3cG9pc29uKTtcbiBcdH0gZWxzZSB7XG4gXHRcdC8qXG4gXHRcdCAqIEZhaWxlZCB0byBzYXZlIHJhdyBlcnJvciBpbmZvLiAgV2Ugbm8gbG9uZ2VyIHRyYWNlIGFsbFxuQEAgLTE5NTAsOCAmIzQzOzE5ODAsOCBAQCB2b2lkIGZvbGlvX2NsZWFyX2h1Z2V0bGJfaHdwb2lzb24oc3RydWN0IGZvbGlvICpmb2xpbylcbiBcdFx0cmV0dXJuO1xuIFx0aWYgKGZvbGlvX3Rlc3RfaHVnZXRsYl92bWVtbWFwX29wdGltaXplZChmb2xpbykpXG4gXHRcdHJldHVybjtcbi1cdGZvbGlvX2NsZWFyX2h3cG9pc29uKGZvbGlvKTtcbiBcdGZvbGlvX2ZyZWVfcmF3X2h3cChmb2xpbywgdHJ1ZSk7XG4mIzQzO1x0Zm9saW9fY2xlYXJfaGFzX2h3cG9pc29uZWQoZm9saW8pO1xuIH1cbiBcbiBzdGF0aWMgaW50IGdldF9odWdlX3BhZ2VfZm9yX2h3cG9pc29uKHVuc2lnbmVkIGxvbmcgcGZuLCBpbnQgZmxhZ3MsXG5AQCAtMjEwNCw2ICYjNDM7MjEzNCwxMSBAQCBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgZm9saW9fZnJlZV9yYXdfaHdwKHN0cnVjdCBmb2xpbyAqZm9saW8sIGJvb2wgZmxhZylcbiB7XG4gXHRyZXR1cm4gMDtcbiB9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW5saW5lIGludCBodWdldGxiX2NsZWFyX3BvaXNvbihzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiAjZW5kaWZcdC8qIENPTkZJR19IVUdFVExCX1BBR0UgKi9cbiBcbiAvKiBEcm9wIHRoZSBleHRyYSByZWZjb3VudCBpbiBjYXNlIHdlIGNvbWUgZnJvbSBtYWR2aXNlKCkgKi9cbkBAIC0yNjc3LDcgJiM0MzsyNzEyLDEyIEBAIGludCB1bnBvaXNvbl9tZW1vcnkodW5zaWduZWQgbG9uZyBwZm4pXG4gXHRwID0gcGZuX3RvX29ubGluZV9wYWdlKHBmbik7XG4gXHRpZiAoIXApXG4gXHRcdHJldHVybiAtRUlPO1xuLVx0Zm9saW8gPSBwYWdlX2ZvbGlvKHApO1xuJiM0MztcbiYjNDM7XHRpZiAoIWlzX3BhZ2VfaHdwb2lzb24ocCkpIHtcbiYjNDM7XHRcdHVucG9pc29uX3ByX2luZm8oXCYjMzQ7JSNseDogcGFnZSBpcyBub3QgcG9pc29uZWRcXG5cJiMzNDssXG4mIzQzO1x0XHRcdFx0IHBmbiwgXHUwMDI2dW5wb2lzb25fcnMpO1xuJiM0MztcdFx0cmV0dXJuIC1FQlVTWTtcbiYjNDM7XHR9XG4gXG4gXHRtdXRleF9sb2NrKFx1MDAyNm1mX211dGV4KTtcbiBcbkBAIC0yNjg4LDYgJiM0MzsyNzI4LDggQEAgaW50IHVucG9pc29uX21lbW9yeSh1bnNpZ25lZCBsb25nIHBmbilcbiBcdFx0Z290byB1bmxvY2tfbXV0ZXg7XG4gXHR9XG4gXG4mIzQzO1x0Zm9saW8gPSBwYWdlX2ZvbGlvKHApO1xuJiM0MztcbiBcdGlmIChpc19odWdlX3plcm9fZm9saW8oZm9saW8pKSB7XG4gXHRcdHVucG9pc29uX3ByX2luZm8oXCYjMzQ7JSNseDogaHVnZSB6ZXJvIHBhZ2UgaXMgbm90IHN1cHBvcnRlZFxcblwmIzM0OyxcbiBcdFx0XHRcdCBwZm4sIFx1MDAyNnVucG9pc29uX3JzKTtcbkBAIC0yNjk1LDEyICYjNDM7MjczNyw2IEBAIGludCB1bnBvaXNvbl9tZW1vcnkodW5zaWduZWQgbG9uZyBwZm4pXG4gXHRcdGdvdG8gdW5sb2NrX211dGV4O1xuIFx0fVxuIFxuLVx0aWYgKCFQYWdlSFdQb2lzb24ocCkpIHtcbi1cdFx0dW5wb2lzb25fcHJfaW5mbyhcJiMzNDslI2x4OiBwYWdlIHdhcyBhbHJlYWR5IHVucG9pc29uZWRcXG5cJiMzNDssXG4tXHRcdFx0XHQgcGZuLCBcdTAwMjZ1bnBvaXNvbl9ycyk7XG4tXHRcdGdvdG8gdW5sb2NrX211dGV4O1xuLVx0fVxuLVxuIFx0aWYgKGZvbGlvX3JlZl9jb3VudChmb2xpbykgXHUwMDNlIDEpIHtcbiBcdFx0dW5wb2lzb25fcHJfaW5mbyhcJiMzNDslI2x4OiBzb21lb25lIGdyYWJzIHRoZSBod3BvaXNvbiBwYWdlXFxuXCYjMzQ7LFxuIFx0XHRcdFx0IHBmbiwgXHUwMDI2dW5wb2lzb25fcnMpO1xuQEAgLTI3MzAsOCAmIzQzOzI3NjYsOCBAQCBpbnQgdW5wb2lzb25fbWVtb3J5KHVuc2lnbmVkIGxvbmcgcGZuKVxuIFx0XHRcdGNvdW50ID0gZm9saW9fZnJlZV9yYXdfaHdwKGZvbGlvLCBmYWxzZSk7XG4gXHRcdFx0aWYgKGNvdW50ID09IDApXG4gXHRcdFx0XHRnb3RvIHVubG9ja19tdXRleDtcbiYjNDM7XHRcdFx0cmV0ID0gaHVnZXRsYl9jbGVhcl9wb2lzb24oZm9saW8pO1xuIFx0XHR9XG4tXHRcdHJldCA9IGZvbGlvX3Rlc3RfY2xlYXJfaHdwb2lzb24oZm9saW8pID8gMCA6IC1FQlVTWTtcbiBcdH0gZWxzZSBpZiAoZ2hwIFx1MDAzYyAwKSB7XG4gXHRcdGlmIChnaHAgPT0gLUVIV1BPSVNPTikge1xuIFx0XHRcdHJldCA9IHB1dF9wYWdlX2JhY2tfYnVkZHkocCkgPyAwIDogLUVCVVNZO1xuQEAgLTI3NDAsMTYgJiM0MzsyNzc2LDE4IEBAIGludCB1bnBvaXNvbl9tZW1vcnkodW5zaWduZWQgbG9uZyBwZm4pXG4gXHRcdFx0dW5wb2lzb25fcHJfaW5mbyhcJiMzNDslI2x4OiBmYWlsZWQgdG8gZ3JhYiBwYWdlXFxuXCYjMzQ7LFxuIFx0XHRcdFx0XHQgcGZuLCBcdTAwMjZ1bnBvaXNvbl9ycyk7XG4gXHRcdH1cbi1cdH0gZWxzZSB7XG4tXHRcdGlmIChmb2xpb190ZXN0X2h1Z2V0bGIoZm9saW8pKSB7XG4tXHRcdFx0aHVnZSA9IHRydWU7XG4tXHRcdFx0Y291bnQgPSBmb2xpb19mcmVlX3Jhd19od3AoZm9saW8sIGZhbHNlKTtcbi1cdFx0XHRpZiAoY291bnQgPT0gMCkge1xuLVx0XHRcdFx0Zm9saW9fcHV0KGZvbGlvKTtcbi1cdFx0XHRcdGdvdG8gdW5sb2NrX211dGV4O1xuLVx0XHRcdH1cbiYjNDM7XHR9IGVsc2UgaWYgKGZvbGlvX3Rlc3RfaHVnZXRsYihmb2xpbykpIHtcbiYjNDM7XHRcdGh1Z2UgPSB0cnVlO1xuJiM0MztcdFx0Y291bnQgPSBmb2xpb19mcmVlX3Jhd19od3AoZm9saW8sIGZhbHNlKTtcbiYjNDM7XHRcdGlmIChjb3VudCA9PSAwKSB7XG4mIzQzO1x0XHRcdGZvbGlvX3B1dChmb2xpbyk7XG4mIzQzO1x0XHRcdGdvdG8gdW5sb2NrX211dGV4O1xuIFx0XHR9XG4tXG4mIzQzO1x0XHRmb2xpb19wdXQoZm9saW8pO1xuJiM0MztcdFx0cmV0ID0gaHVnZXRsYl9jbGVhcl9wb2lzb24oZm9saW8pO1xuJiM0MztcdFx0aWYgKCFyZXQpXG4mIzQzO1x0XHRcdGZvbGlvX3B1dChmb2xpbyk7XG4mIzQzO1x0fSBlbHNlIHtcbiBcdFx0Zm9saW9fcHV0KGZvbGlvKTtcbiBcdFx0aWYgKFRlc3RDbGVhclBhZ2VIV1BvaXNvbihwKSkge1xuIFx0XHRcdGZvbGlvX3B1dChmb2xpbyk7XG5kaWZmIC0tZ2l0IGEvbW0vbWVtb3J5X2hvdHBsdWcuYyBiL21tL21lbW9yeV9ob3RwbHVnLmNcbmluZGV4IDdhYzE5ZmFiMjI2MzI0Li4zMzAwN2U4ZTU0NmEwOSAxMDA2NDRcbi0tLSBhL21tL21lbW9yeV9ob3RwbHVnLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL21lbW9yeV9ob3RwbHVnLmNcbkBAIC0xODEzLDcgJiM0MzsxODEzLDcgQEAgc3RhdGljIHZvaWQgZG9fbWlncmF0ZV9yYW5nZSh1bnNpZ25lZCBsb25nIHN0YXJ0X3BmbiwgdW5zaWduZWQgbG9uZyBlbmRfcGZuKVxuIFx0XHRpZiAoZm9saW9fdGVzdF9sYXJnZShmb2xpbykpXG4gXHRcdFx0cGZuID0gZm9saW9fcGZuKGZvbGlvKSAmIzQzOyBmb2xpb19ucl9wYWdlcyhmb2xpbykgLSAxO1xuIFxuLVx0XHRpZiAoZm9saW9fY29udGFpbl9od3BvaXNvbmVkX3BhZ2UoZm9saW8pKSB7XG4mIzQzO1x0XHRpZiAoZm9saW9faGFzX2h3cG9pc29uZWRfcGFnZShmb2xpbykpIHtcbiBcdFx0XHQvKlxuIFx0XHRcdCAqIHVubWFwX3BvaXNvbmVkX2ZvbGlvKCkgY2Fubm90IGhhbmRsZSBsYXJnZSBmb2xpb3NcbiBcdFx0XHQgKiBpbiBhbGwgY2FzZXMgeWV0LlxuZGlmZiAtLWdpdCBhL21tL3NobWVtLmMgYi9tbS9zaG1lbS5jXG5pbmRleCBiNTFmODNjOTcwYmIzNy4uNDkyYzliZWYzNjIwNzQgMTAwNjQ0XG4tLS0gYS9tbS9zaG1lbS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9zaG1lbS5jXG5AQCAtMzI0MCw3ICYjNDM7MzI0MCw3IEBAIHNobWVtX3dyaXRlX2JlZ2luKGNvbnN0IHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXG4gXHRpZiAocmV0KVxuIFx0XHRyZXR1cm4gcmV0O1xuIFxuLVx0aWYgKGZvbGlvX2NvbnRhaW5faHdwb2lzb25lZF9wYWdlKGZvbGlvKSkge1xuJiM0MztcdGlmIChmb2xpb19oYXNfaHdwb2lzb25lZF9wYWdlKGZvbGlvKSkge1xuIFx0XHRmb2xpb191bmxvY2soZm9saW8pO1xuIFx0XHRmb2xpb19wdXQoZm9saW8pO1xuIFx0XHRyZXR1cm4gLUVJTztcbmRpZmYgLS1naXQgYS9tbS92bXNjYW4uYyBiL21tL3Ztc2Nhbi5jXG5pbmRleCAzNWMzYmIxNWFlOTZhMy4uNzBlNTRhY2UwZTc0MWMgMTAwNjQ0XG4tLS0gYS9tbS92bXNjYW4uY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vdm1zY2FuLmNcbkBAIC0xMDg2LDcgJiM0MzsxMDg2LDcgQEAgc3RhdGljIHVuc2lnbmVkIGludCBzaHJpbmtfZm9saW9fbGlzdChzdHJ1Y3QgbGlzdF9oZWFkICpmb2xpb19saXN0LFxuIFx0XHRpZiAoIWZvbGlvX3RyeWxvY2soZm9saW8pKVxuIFx0XHRcdGdvdG8ga2VlcDtcbiBcbi1cdFx0aWYgKGZvbGlvX2NvbnRhaW5faHdwb2lzb25lZF9wYWdlKGZvbGlvKSkge1xuJiM0MztcdFx0aWYgKGZvbGlvX2hhc19od3BvaXNvbmVkX3BhZ2UoZm9saW8pKSB7XG4gXHRcdFx0LypcbiBcdFx0XHQgKiB1bm1hcF9wb2lzb25lZF9mb2xpbygpIGNhbiYjMzk7dCBoYW5kbGUgbGFyZ2VcbiBcdFx0XHQgKiBmb2xpbywganVzdCBza2lwIGl0LiBtZW1vcnlfZmFpbHVyZSgpIHdpbGxcbmRpZmYgLS1naXQgYS92aXJ0L2t2bS9ndWVzdF9tZW1mZC5jIGIvdmlydC9rdm0vZ3Vlc3RfbWVtZmQuY1xuaW5kZXggZGI1N2M1NzY2YWI2MDQuLjk0ZWVkY2M3ZjFhOWUwIDEwMDY0NFxuLS0tIGEvdmlydC9rdm0vZ3Vlc3RfbWVtZmQuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdmlydC9rdm0vZ3Vlc3RfbWVtZmQuY1xuQEAgLTc3NCw3ICYjNDM7Nzc0LDcgQEAgc3RhdGljIHN0cnVjdCBmb2xpbyAqX19rdm1fZ21lbV9nZXRfcGZuKHN0cnVjdCBmaWxlICpmaWxlLFxuIFx0aWYgKElTX0VSUihmb2xpbykpXG4gXHRcdHJldHVybiBmb2xpbztcbiBcbi1cdGlmIChmb2xpb190ZXN0X2h3cG9pc29uKGZvbGlvKSkge1xuJiM0MztcdGlmIChmb2xpb19oYXNfaHdwb2lzb25lZF9wYWdlKGZvbGlvKSkge1xuIFx0XHRmb2xpb191bmxvY2soZm9saW8pO1xuIFx0XHRmb2xpb19wdXQoZm9saW8pO1xuIFx0XHRyZXR1cm4gRVJSX1BUUigtRUhXUE9JU09OKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNCAxODo0NjwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TUVNT1JZX0ZBSUxVUkUmIzM0OywKICAgICYjMzQ7SFdQT0lTT05fSU5KRUNUJiMzNDssCiAgICAmIzM0O0hVR0VUTEJGUyYjMzQ7LAogICAgJiMzNDtIVUdFVExCX1BBR0UmIzM0OywKICAgICYjMzQ7VFJBTlNQQVJFTlRfSFVHRVBBR0UmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtodWdldGxiX3BhZ2VfaHdwb2lzb24mIzM0OywKICAgICYjMzQ7aHVnZXRsYl91bnJlZl9wYWdlX2h3cG9pc29uJiMzNDssCiAgICAmIzM0O3VucG9pc29uX21lbW9yeSYjMzQ7LAogICAgJiMzNDtmb2xpb19jbGVhcl9odWdldGxiX2h3cG9pc29uJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGhvdyBoYXJkd2FyZSBwb2lzb25lZCAoSFdQT0lTT04pIHBhZ2VzIGFyZSB0cmFja2VkIGFuZCBoYW5kbGVkIHdpdGhpbiBsYXJnZSBmb2xpb3MsIHNwZWNpZmljYWxseSBhZmZlY3RpbmcgaHVnZXRsYmZzIGFuZCBmaWxlbWFwIHJlYWQgb3BlcmF0aW9ucy4gSXQgaW50cm9kdWNlcyBuZXcgbG9naWMgdG8gdHJhY2sgcG9pc29uZWQgcGFnZXMgdXNpbmcgYGZvbGlvLVx1MDAzZWh1Z2V0bGJfaHdwb2lzb25gIGFuZCByZXBsYWNlcyB0aGUgY3VzdG9tIGBodWdldGxiZnNfcmVhZF9pdGVyYCB3aXRoIGBnZW5lcmljX2ZpbGVfcmVhZF9pdGVyYCwgaGFuZGxpbmcgaHdwb2lzb24gZGlyZWN0bHkgaW4gYGZpbGVtYXBfcmVhZGAuIFRoZXNlIGFyZSByZWFjaGFibGUsIGZ1bmN0aW9uYWwgY2hhbmdlcyBpbiBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBodWdldGxiZnMuIEZ1enppbmcgc2hvdWxkIGZvY3VzIG9uIHRoZSBuZXcgaHdwb2lzb24gdHJhY2tpbmcgZnVuY3Rpb25zIGFuZCB1bnBvaXNvbmluZyBsb2dpYy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLApldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXQKICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LAogICBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMGZlNmRlNmMyZjA1NzY2NDIxN2Q5NmEzZGE3NzJhNDg2NjdlNTU2NwpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBGcmkgSnVsIDI0IDE4OjQ2OjE2IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZnMvS2NvbmZpZyBiL2ZzL0tjb25maWcKaW5kZXggY2Y2YWU2NDc3NmU2MmMuLmVkZGFjNGVkMjE0YjEyIDEwMDY0NAotLS0gYS9mcy9LY29uZmlnCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL0tjb25maWcKQEAgLTI3Miw3ICYjNDM7MjcyLDcgQEAgZW5kaWYgIyBIVUdFVExCRlMKIAogY29uZmlnIEhVR0VUTEJfUEFHRQogCWRlZl9ib29sIEhVR0VUTEJGUwotCXNlbGVjdCBYQVJSQVlfTVVMVEkKJiM0MzsJc2VsZWN0IExBUkdFX0ZPTElPCiAKIGNvbmZpZyBIVUdFVExCX1BBR0VfT1BUSU1JWkVfVk1FTU1BUAogCWRlZl9ib29sIEhVR0VUTEJfUEFHRQpkaWZmIC0tZ2l0IGEvZnMvaHVnZXRsYmZzL2lub2RlLmMgYi9mcy9odWdldGxiZnMvaW5vZGUuYwppbmRleCAyMTZlMWEwZGQwYjIzNy4uY2VmN2U2MWI4MjdkNzEgMTAwNjQ0Ci0tLSBhL2ZzL2h1Z2V0bGJmcy9pbm9kZS5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2h1Z2V0bGJmcy9pbm9kZS5jCkBAIC0xODcsMTEzICYjNDM7MTg3LDYgQEAgaHVnZXRsYl9nZXRfdW5tYXBwZWRfYXJlYShzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgbG9uZyBhZGRyLAogCXJldHVybiBtbV9nZXRfdW5tYXBwZWRfYXJlYV92bWZsYWdzKGZpbGUsIGFkZHIwLCBsZW4sIHBnb2ZmLCBmbGFncywgMCk7CiB9CiAKLS8qCi0gKiBTb21lb25lIHdhbnRzIHRvIHJlYWQgQGJ5dGVzIGZyb20gYSBIV1BPSVNPTiBodWdldGxiIEBmb2xpbyBmcm9tIEBvZmZzZXQuCi0gKiBSZXR1cm5zIHRoZSBtYXhpbXVtIG51bWJlciBvZiBieXRlcyBvbmUgY2FuIHJlYWQgd2l0aG91dCB0b3VjaGluZyB0aGUgMXN0IHJhdwotICogSFdQT0lTT04gcGFnZS4KLSAqLwotc3RhdGljIHNpemVfdCBhZGp1c3RfcmFuZ2VfaHdwb2lzb24oc3RydWN0IGZvbGlvICpmb2xpbywgc2l6ZV90IG9mZnNldCwKLQkJc2l6ZV90IGJ5dGVzKQotewotCXN0cnVjdCBwYWdlICpwYWdlID0gZm9saW9fcGFnZShmb2xpbywgb2Zmc2V0IC8gUEFHRV9TSVpFKTsKLQlzaXplX3Qgc2FmZV9ieXRlczsKLQotCWlmIChpc19yYXdfaHdwb2lzb25fcGFnZV9pbl9odWdlcGFnZShwYWdlKSkKLQkJcmV0dXJuIDA7Ci0JLyogU2FmZSB0byByZWFkIHRoZSByZW1haW5pbmcgYnl0ZXMgaW4gdGhpcyBwYWdlLiAqLwotCXNhZmVfYnl0ZXMgPSBQQUdFX1NJWkUgLSAob2Zmc2V0ICUgUEFHRV9TSVpFKTsKLQlwYWdlJiM0MzsmIzQzOzsKLQotCS8qIENoZWNrIGVhY2ggcmVtYWluaW5nIHBhZ2UgYXMgbG9uZyBhcyB3ZSBhcmUgbm90IGRvbmUgeWV0LiAqLwotCWZvciAoOyBzYWZlX2J5dGVzICZsdDsgYnl0ZXM7IHNhZmVfYnl0ZXMgJiM0Mzs9IFBBR0VfU0laRSwgcGFnZSYjNDM7JiM0MzspCi0JCWlmIChpc19yYXdfaHdwb2lzb25fcGFnZV9pbl9odWdlcGFnZShwYWdlKSkKLQkJCWJyZWFrOwotCi0JcmV0dXJuIG1pbihzYWZlX2J5dGVzLCBieXRlcyk7Ci19Ci0KLS8qCi0gKiBTdXBwb3J0IGZvciByZWFkKCkgLSBGaW5kIHRoZSBwYWdlIGF0dGFjaGVkIHRvIGZfbWFwcGluZyBhbmQgY29weSBvdXQgdGhlCi0gKiBkYXRhLiBUaGlzIHByb3ZpZGVzIGZ1bmN0aW9uYWxpdHkgc2ltaWxhciB0byBmaWxlbWFwX3JlYWQoKS4KLSAqLwotc3RhdGljIHNzaXplX3QgaHVnZXRsYmZzX3JlYWRfaXRlcihzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqdG8pCi17Ci0Jc3RydWN0IGZpbGUgKmZpbGUgPSBpb2NiLSZndDtraV9maWxwOwotCXN0cnVjdCBoc3RhdGUgKmggPSBoc3RhdGVfZmlsZShmaWxlKTsKLQlzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyA9IGZpbGUtJmd0O2ZfbWFwcGluZzsKLQlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gbWFwcGluZy0mZ3Q7aG9zdDsKLQl1bnNpZ25lZCBsb25nIGluZGV4ID0gaW9jYi0mZ3Q7a2lfcG9zICZndDsmZ3Q7IGh1Z2VfcGFnZV9zaGlmdChoKTsKLQl1bnNpZ25lZCBsb25nIG9mZnNldCA9IGlvY2ItJmd0O2tpX3BvcyAmYW1wOyB+aHVnZV9wYWdlX21hc2soaCk7Ci0JdW5zaWduZWQgbG9uZyBlbmRfaW5kZXg7Ci0JbG9mZl90IGlzaXplOwotCXNzaXplX3QgcmV0dmFsID0gMDsKLQotCXdoaWxlIChpb3ZfaXRlcl9jb3VudCh0bykpIHsKLQkJc3RydWN0IGZvbGlvICpmb2xpbzsKLQkJc2l6ZV90IG5yLCBjb3BpZWQsIHdhbnQ7Ci0KLQkJLyogbnIgaXMgdGhlIG1heGltdW0gbnVtYmVyIG9mIGJ5dGVzIHRvIGNvcHkgZnJvbSB0aGlzIHBhZ2UgKi8KLQkJbnIgPSBodWdlX3BhZ2Vfc2l6ZShoKTsKLQkJaXNpemUgPSBpX3NpemVfcmVhZChpbm9kZSk7Ci0JCWlmICghaXNpemUpCi0JCQlicmVhazsKLQkJZW5kX2luZGV4ID0gKGlzaXplIC0gMSkgJmd0OyZndDsgaHVnZV9wYWdlX3NoaWZ0KGgpOwotCQlpZiAoaW5kZXggJmd0OyBlbmRfaW5kZXgpCi0JCQlicmVhazsKLQkJaWYgKGluZGV4ID09IGVuZF9pbmRleCkgewotCQkJbnIgPSAoKGlzaXplIC0gMSkgJmFtcDsgfmh1Z2VfcGFnZV9tYXNrKGgpKSAmIzQzOyAxOwotCQkJaWYgKG5yICZsdDs9IG9mZnNldCkKLQkJCQlicmVhazsKLQkJfQotCQluciA9IG5yIC0gb2Zmc2V0OwotCi0JCS8qIEZpbmQgdGhlIGZvbGlvICovCi0JCWZvbGlvID0gZmlsZW1hcF9sb2NrX2h1Z2V0bGJfZm9saW8oaCwgbWFwcGluZywgaW5kZXgpOwotCQlpZiAoSVNfRVJSKGZvbGlvKSkgewotCQkJLyoKLQkJCSAqIFdlIGhhdmUgYSBIT0xFLCB6ZXJvIG91dCB0aGUgdXNlci1idWZmZXIgZm9yIHRoZQotCQkJICogbGVuZ3RoIG9mIHRoZSBob2xlIG9yIHJlcXVlc3QuCi0JCQkgKi8KLQkJCWNvcGllZCA9IGlvdl9pdGVyX3plcm8obnIsIHRvKTsKLQkJfSBlbHNlIHsKLQkJCWZvbGlvX3VubG9jayhmb2xpbyk7Ci0KLQkJCWlmICghZm9saW9fdGVzdF9od3BvaXNvbihmb2xpbykpCi0JCQkJd2FudCA9IG5yOwotCQkJZWxzZSB7Ci0JCQkJLyoKLQkJCQkgKiBBZGp1c3QgaG93IG1hbnkgYnl0ZXMgc2FmZSB0byByZWFkIHdpdGhvdXQKLQkJCQkgKiB0b3VjaGluZyB0aGUgMXN0IHJhdyBIV1BPSVNPTiBwYWdlIGFmdGVyCi0JCQkJICogb2Zmc2V0LgotCQkJCSAqLwotCQkJCXdhbnQgPSBhZGp1c3RfcmFuZ2VfaHdwb2lzb24oZm9saW8sIG9mZnNldCwgbnIpOwotCQkJCWlmICh3YW50ID09IDApIHsKLQkJCQkJZm9saW9fcHV0KGZvbGlvKTsKLQkJCQkJcmV0dmFsID0gLUVJTzsKLQkJCQkJYnJlYWs7Ci0JCQkJfQotCQkJfQotCi0JCQkvKgotCQkJICogV2UgaGF2ZSB0aGUgZm9saW8sIGNvcHkgaXQgdG8gdXNlciBzcGFjZSBidWZmZXIuCi0JCQkgKi8KLQkJCWNvcGllZCA9IGNvcHlfZm9saW9fdG9faXRlcihmb2xpbywgb2Zmc2V0LCB3YW50LCB0byk7Ci0JCQlmb2xpb19wdXQoZm9saW8pOwotCQl9Ci0JCW9mZnNldCAmIzQzOz0gY29waWVkOwotCQlyZXR2YWwgJiM0Mzs9IGNvcGllZDsKLQkJaWYgKGNvcGllZCAhPSBuciAmYW1wOyZhbXA7IGlvdl9pdGVyX2NvdW50KHRvKSkgewotCQkJaWYgKCFyZXR2YWwpCi0JCQkJcmV0dmFsID0gLUVGQVVMVDsKLQkJCWJyZWFrOwotCQl9Ci0JCWluZGV4ICYjNDM7PSBvZmZzZXQgJmd0OyZndDsgaHVnZV9wYWdlX3NoaWZ0KGgpOwotCQlvZmZzZXQgJmFtcDs9IH5odWdlX3BhZ2VfbWFzayhoKTsKLQl9Ci0JaW9jYi0mZ3Q7a2lfcG9zID0gKChsb2ZmX3QpaW5kZXggJmx0OyZsdDsgaHVnZV9wYWdlX3NoaWZ0KGgpKSAmIzQzOyBvZmZzZXQ7Ci0JcmV0dXJuIHJldHZhbDsKLX0KLQogc3RhdGljIGludCBodWdldGxiZnNfd3JpdGVfYmVnaW4oY29uc3Qgc3RydWN0IGtpb2NiICppb2NiLAogCQkJc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsCiAJCQlsb2ZmX3QgcG9zLCB1bnNpZ25lZCBsZW4sCkBAIC04ODMsNiAmIzQzOzc3NiwxNyBAQCBzdGF0aWMgc3RydWN0IGlub2RlICpodWdldGxiZnNfZ2V0X3Jvb3Qoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwKIAlyZXR1cm4gaW5vZGU7CiB9CiAKJiM0MztzdGF0aWMgdm9pZCBodWdldGxiZnNfaW5pdF9yZWd1bGFyX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgaHN0YXRlICpoc3RhdGUgPSBoc3RhdGVfaW5vZGUoaW5vZGUpOwomIzQzOwl1bnNpZ25lZCBpbnQgb3JkZXIgPSBodWdlX3BhZ2Vfb3JkZXIoaHN0YXRlKTsKJiM0MzsKJiM0MzsJaW5vZGUtJmd0O2lfb3AgPSAmYW1wO2h1Z2V0bGJmc19pbm9kZV9vcGVyYXRpb25zOwomIzQzOwlpbm9kZS0mZ3Q7aV9mb3AgPSAmYW1wO2h1Z2V0bGJmc19maWxlX29wZXJhdGlvbnM7CiYjNDM7CW1hcHBpbmdfc2V0X2ZvbGlvX29yZGVyX3JhbmdlKGlub2RlLSZndDtpX21hcHBpbmcsIG9yZGVyLCBvcmRlcik7CiYjNDM7CW1hcHBpbmdfc2V0X2F1dGhvcml0YXRpdmUoaW5vZGUtJmd0O2lfbWFwcGluZyk7CiYjNDM7fQomIzQzOwogLyoKICAqIEh1Z2V0bGJmcyBpcyBub3QgcmVjbGFpbWFibGU7IHRoZXJlZm9yZSBpdHMgaV9tbWFwX3J3c2VtIHdpbGwgbmV2ZXIKICAqIGJlIHRha2VuIGZyb20gcmVjbGFpbSAtLSB1bmxpa2UgcmVndWxhciBmaWxlc3lzdGVtcy4gVGhpcyBuZWVkcyBhbgpAQCAtOTI2LDggJiM0Mzs4MzAsNyBAQCBzdGF0aWMgc3RydWN0IGlub2RlICpodWdldGxiZnNfZ2V0X2lub2RlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsCiAJCQlpbml0X3NwZWNpYWxfaW5vZGUoaW5vZGUsIG1vZGUsIGRldik7CiAJCQlicmVhazsKIAkJY2FzZSBTX0lGUkVHOgotCQkJaW5vZGUtJmd0O2lfb3AgPSAmYW1wO2h1Z2V0bGJmc19pbm9kZV9vcGVyYXRpb25zOwotCQkJaW5vZGUtJmd0O2lfZm9wID0gJmFtcDtodWdldGxiZnNfZmlsZV9vcGVyYXRpb25zOwomIzQzOwkJCWh1Z2V0bGJmc19pbml0X3JlZ3VsYXJfaW5vZGUoaW5vZGUpOwogCQkJYnJlYWs7CiAJCWNhc2UgU19JRkRJUjoKIAkJCWlub2RlLSZndDtpX29wID0gJmFtcDtodWdldGxiZnNfZGlyX2lub2RlX29wZXJhdGlvbnM7CkBAIC0xMjA2LDcgJiM0MzsxMTA5LDcgQEAgc3RhdGljIHZvaWQgaW5pdF9vbmNlKHZvaWQgKmZvbykKIH0KIAogc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgaHVnZXRsYmZzX2ZpbGVfb3BlcmF0aW9ucyA9IHsKLQkucmVhZF9pdGVyCQk9IGh1Z2V0bGJmc19yZWFkX2l0ZXIsCiYjNDM7CS5yZWFkX2l0ZXIJCT0gZ2VuZXJpY19maWxlX3JlYWRfaXRlciwKIAkubW1hcAkJCT0gaHVnZXRsYmZzX2ZpbGVfbW1hcCwKIAkuZnN5bmMJCQk9IG5vb3BfZnN5bmMsCiAJLmdldF91bm1hcHBlZF9hcmVhCT0gaHVnZXRsYl9nZXRfdW5tYXBwZWRfYXJlYSwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaHVnZXRsYi5oIGIvaW5jbHVkZS9saW51eC9odWdldGxiLmgKaW5kZXggMmFiYWY5OTMyMWU5MGQuLjE4Nzg2NDJlNzVlYzUxIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaApAQCAtMTY1LDcgJiM0MzsxNjUsNyBAQCBib29sIGh1Z2V0bGJmc19wYWdlY2FjaGVfcHJlc2VudChzdHJ1Y3QgaHN0YXRlICpoLAogCQkJCSBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKIAkJCQkgdW5zaWduZWQgbG9uZyBhZGRyZXNzKTsKIAotc3RydWN0IGFkZHJlc3Nfc3BhY2UgKmh1Z2V0bGJfZm9saW9fbWFwcGluZ19sb2NrX3dyaXRlKHN0cnVjdCBmb2xpbyAqZm9saW8pOwomIzQzO3N0cnVjdCBhZGRyZXNzX3NwYWNlICpodWdldGxiX2ZvbGlvX21hcHBpbmdfbG9ja193cml0ZShjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKTsKIAogZXh0ZXJuIGludCBtb3ZhYmxlX2dpZ2FudGljX3BhZ2VzIF9fcmVhZF9tb3N0bHk7CiBleHRlcm4gaW50IHN5c2N0bF9odWdldGxiX3NobV9ncm91cCBfX3JlYWRfbW9zdGx5OwpAQCAtMjkyLDggJiM0MzsyOTIsNyBAQCBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgaHVnZXRsYl90b3RhbF9wYWdlcyh2b2lkKQogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW5saW5lIHN0cnVjdCBhZGRyZXNzX3NwYWNlICpodWdldGxiX2ZvbGlvX21hcHBpbmdfbG9ja193cml0ZSgKLQkJCQkJCQlzdHJ1Y3QgZm9saW8gKmZvbGlvKQomIzQzO3N0YXRpYyBpbmxpbmUgc3RydWN0IGFkZHJlc3Nfc3BhY2UgKmh1Z2V0bGJfZm9saW9fbWFwcGluZ19sb2NrX3dyaXRlKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8pCiB7CiAJcmV0dXJuIE5VTEw7CiB9CkBAIC01OTUsOCAmIzQzOzU5NCw4IEBAIGVudW0gaHVnZXRsYl9wYWdlX2ZsYWdzIHsKICNpZmRlZiBDT05GSUdfSFVHRVRMQl9QQUdFCiAjZGVmaW5lIFRFU1RIUEFHRUZMQUcodW5hbWUsIGZsbmFtZSkJCQkJXAogc3RhdGljIF9fYWx3YXlzX2lubGluZQkJCQkJCVwKLWJvb2wgZm9saW9fdGVzdF9odWdldGxiXyMjZmxuYW1lKHN0cnVjdCBmb2xpbyAqZm9saW8pCQlcCi0Jewl2b2lkICpwcml2YXRlID0gJmFtcDtmb2xpby0mZ3Q7cHJpdmF0ZTsJCVwKJiM0Mztib29sIGZvbGlvX3Rlc3RfaHVnZXRsYl8jI2ZsbmFtZShjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKQlcCiYjNDM7CXsJY29uc3Qgdm9pZCAqcHJpdmF0ZSA9ICZhbXA7Zm9saW8tJmd0O3ByaXZhdGU7CQlcCiAJCXJldHVybiB0ZXN0X2JpdChIUEdfIyNmbG5hbWUsIHByaXZhdGUpOwkJXAogCX0KIApAQCAtNjE2LDcgJiM0Mzs2MTUsNyBAQCB2b2lkIGZvbGlvX2NsZWFyX2h1Z2V0bGJfIyNmbG5hbWUoc3RydWN0IGZvbGlvICpmb2xpbykJCVwKICNlbHNlCiAjZGVmaW5lIFRFU1RIUEFHRUZMQUcodW5hbWUsIGZsbmFtZSkJCQkJXAogc3RhdGljIGlubGluZSBib29sCQkJCQkJXAotZm9saW9fdGVzdF9odWdldGxiXyMjZmxuYW1lKHN0cnVjdCBmb2xpbyAqZm9saW8pCQlcCiYjNDM7Zm9saW9fdGVzdF9odWdldGxiXyMjZmxuYW1lKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8pCQlcCiAJeyByZXR1cm4gMDsgfQogCiAjZGVmaW5lIFNFVEhQQUdFRkxBRyh1bmFtZSwgZmxuYW1lKQkJCQlcCkBAIC03MjcsNyAmIzQzOzcyNiw3IEBAIHN0YXRpYyBpbmxpbmUgc3RydWN0IGh1Z2VwYWdlX3N1YnBvb2wgKnN1YnBvb2xfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSkKIAlyZXR1cm4gSFVHRVRMQkZTX1NCKGlub2RlLSZndDtpX3NiKS0mZ3Q7c3Bvb2w7CiB9CiAKLXN0YXRpYyBpbmxpbmUgc3RydWN0IGh1Z2VwYWdlX3N1YnBvb2wgKmh1Z2V0bGJfZm9saW9fc3VicG9vbChzdHJ1Y3QgZm9saW8gKmZvbGlvKQomIzQzO3N0YXRpYyBpbmxpbmUgc3RydWN0IGh1Z2VwYWdlX3N1YnBvb2wgKmh1Z2V0bGJfZm9saW9fc3VicG9vbChjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKQogewogCXJldHVybiBmb2xpby0mZ3Q7X2h1Z2V0bGJfc3VicG9vbDsKIH0KQEAgLTg1Nyw3ICYjNDM7ODU2LDcgQEAgc3RhdGljIGlubGluZSBib29sIGFyY2hfaGFzX2h1Z2VfYm9vdG1lbV9hbGxvYyh2b2lkKQogfQogI2VuZGlmCiAKLXN0YXRpYyBpbmxpbmUgc3RydWN0IGhzdGF0ZSAqZm9saW9faHN0YXRlKHN0cnVjdCBmb2xpbyAqZm9saW8pCiYjNDM7c3RhdGljIGlubGluZSBzdHJ1Y3QgaHN0YXRlICpmb2xpb19oc3RhdGUoY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbykKIHsKIAlWTV9CVUdfT05fRk9MSU8oIWZvbGlvX3Rlc3RfaHVnZXRsYihmb2xpbyksIGZvbGlvKTsKIAlyZXR1cm4gc2l6ZV90b19oc3RhdGUoZm9saW9fc2l6ZShmb2xpbykpOwpAQCAtMTA3MCwxMSAmIzQzOzEwNjksNiBAQCB2b2lkIGh1Z2V0bGJfcmVnaXN0ZXJfbm9kZShzdHJ1Y3Qgbm9kZSAqbm9kZSk7CiB2b2lkIGh1Z2V0bGJfdW5yZWdpc3Rlcl9ub2RlKHN0cnVjdCBub2RlICpub2RlKTsKICNlbmRpZgogCi0vKgotICogQ2hlY2sgaWYgYSBnaXZlbiByYXcgQHBhZ2UgaW4gYSBodWdlcGFnZSBpcyBIV1BPSVNPTi4KLSAqLwotYm9vbCBpc19yYXdfaHdwb2lzb25fcGFnZV9pbl9odWdlcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSk7Ci0KIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBodWdlX3BhZ2VfbWFza19hbGlnbihzdHJ1Y3QgZmlsZSAqZmlsZSkKIHsKIAlyZXR1cm4gUEFHRV9NQVNLICZhbXA7IH5odWdlX3BhZ2VfbWFzayhoc3RhdGVfZmlsZShmaWxlKSk7CkBAIC0xMDg4LDcgJiM0MzsxMDgyLDcgQEAgc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGh1Z2VfcGFnZV9tYXNrX2FsaWduKHN0cnVjdCBmaWxlICpmaWxlKQogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW5saW5lIHN0cnVjdCBodWdlcGFnZV9zdWJwb29sICpodWdldGxiX2ZvbGlvX3N1YnBvb2woc3RydWN0IGZvbGlvICpmb2xpbykKJiM0MztzdGF0aWMgaW5saW5lIHN0cnVjdCBodWdlcGFnZV9zdWJwb29sICpodWdldGxiX2ZvbGlvX3N1YnBvb2woY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbykKIHsKIAlyZXR1cm4gTlVMTDsKIH0KQEAgLTExNTcsNyAmIzQzOzExNTEsNyBAQCBzdGF0aWMgaW5saW5lIHN0cnVjdCBoc3RhdGUgKmhzdGF0ZV92bWEoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpCiAJcmV0dXJuIE5VTEw7CiB9CiAKLXN0YXRpYyBpbmxpbmUgc3RydWN0IGhzdGF0ZSAqZm9saW9faHN0YXRlKHN0cnVjdCBmb2xpbyAqZm9saW8pCiYjNDM7c3RhdGljIGlubGluZSBzdHJ1Y3QgaHN0YXRlICpmb2xpb19oc3RhdGUoY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbykKIHsKIAlyZXR1cm4gTlVMTDsKIH0KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbW1fdHlwZXMuaCBiL2luY2x1ZGUvbGludXgvbW1fdHlwZXMuaAppbmRleCBiMThjMmIyZTdkMmM2NS4uZDdhOWIwZDhiYmRmYjEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbW1fdHlwZXMuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L21tX3R5cGVzLmgKQEAgLTM4Nyw3ICYjNDM7Mzg3LDcgQEAgdHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBtbV9pZF90OwogICogQF9odWdldGxiX3N1YnBvb2w6IERvIG5vdCB1c2UgZGlyZWN0bHksIHVzZSBhY2Nlc3NvciBpbiBodWdldGxiLmguCiAgKiBAX2h1Z2V0bGJfY2dyb3VwOiBEbyBub3QgdXNlIGRpcmVjdGx5LCB1c2UgYWNjZXNzb3IgaW4gaHVnZXRsYl9jZ3JvdXAuaC4KICAqIEBfaHVnZXRsYl9jZ3JvdXBfcnN2ZDogRG8gbm90IHVzZSBkaXJlY3RseSwgdXNlIGFjY2Vzc29yIGluIGh1Z2V0bGJfY2dyb3VwLmguCi0gKiBAX2h1Z2V0bGJfaHdwb2lzb246IERvIG5vdCB1c2UgZGlyZWN0bHksIGNhbGwgcmF3X2h3cF9saXN0X2hlYWQoKS4KJiM0MzsgKiBAaHVnZXRsYl9od3BvaXNvbjogTGlzdCBvZiBwYWdlcyB3aXRoIGh3cG9pc29uLgogICogQF9kZWZlcnJlZF9saXN0OiBGb2xpb3MgdG8gYmUgc3BsaXQgdW5kZXIgbWVtb3J5IHByZXNzdXJlLgogICogQF91bnVzZWRfc2xhYl9vYmpfZXh0czogUGxhY2Vob2xkZXIgdG8gbWF0Y2ggb2JqX2V4dHMgaW4gc3RydWN0IHNsYWIuCiAgKgpAQCAtNDk5LDcgJiM0Mzs0OTksNyBAQCBzdHJ1Y3QgZm9saW8gewogCQkJdm9pZCAqX2h1Z2V0bGJfc3VicG9vbDsKIAkJCXZvaWQgKl9odWdldGxiX2Nncm91cDsKIAkJCXZvaWQgKl9odWdldGxiX2Nncm91cF9yc3ZkOwotCQkJdm9pZCAqX2h1Z2V0bGJfaHdwb2lzb247CiYjNDM7CQkJc3RydWN0IGxsaXN0X2hlYWQgaHVnZXRsYl9od3BvaXNvbjsKIAkvKiBwcml2YXRlOiB0aGUgdW5pb24gd2l0aCBzdHJ1Y3QgcGFnZSBpcyB0cmFuc2l0aW9uYWwgKi8KIAkJfTsKIAkJc3RydWN0IHBhZ2UgX19wYWdlXzM7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaCBiL2luY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oCmluZGV4IDcyMjNmNmY0ZTJiNDAzLi5iMTQ2YzUyMjg3NDFjMCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmgKQEAgLTg5MywxNCAmIzQzOzg5MywxOSBAQCBzdGF0aWMgaW5saW5lIGludCBQYWdlVHJhbnNDb21wb3VuZChjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSkKIFRFU1RQQUdFRkxBR19GQUxTRShUcmFuc0NvbXBvdW5kLCB0cmFuc2NvbXBvdW5kKQogI2VuZGlmCiAKLSNpZiBkZWZpbmVkKENPTkZJR19NRU1PUllfRkFJTFVSRSkgJmFtcDsmYW1wOyBkZWZpbmVkKENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSkKJiM0MzsjaWYgZGVmaW5lZChDT05GSUdfTUVNT1JZX0ZBSUxVUkUpICZhbXA7JmFtcDsgZGVmaW5lZChDT05GSUdfTEFSR0VfRk9MSU8pCiAvKgotICogUGFnZUhhc0hXUG9pc29uZWQgaW5kaWNhdGVzIHRoYXQgYXQgbGVhc3Qgb25lIHN1YnBhZ2UgaXMgaHdwb2lzb25lZCBpbiB0aGUKLSAqIGNvbXBvdW5kIHBhZ2UuCiYjNDM7ICogZm9saW9faGFzX2h3cG9pc29uZWQgaW5kaWNhdGVzIHRoYXQgYXQgbGVhc3Qgb25lIHBhZ2UgaXMgaHdwb2lzb25lZCBpbiB0aGUKJiM0MzsgKiBmb2xpby4gIFRoYXQgcGFnZSB3aWxsIHVzdWFsbHkgYWxzbyBoYXZlIHRoZSBIV1BvaXNvbiBmbGFnIHNldCwgYnV0IHRoaXMKJiM0MzsgKiBpcyBub3QgcG9zc2libGUgZm9yIGZvbGlvcyB3aGljaCBoYXZlIEhWTyAoc2VlIG1lbW9yeS1mYWlsdXJlIGZvciB0aGUKJiM0MzsgKiBzY2hlbWUgdXNlZCBpbiB0aGF0IGNhc2UpLiAgWW91IHByb2JhYmx5IGRvbiYjMzk7dCB3YW50IHRvIGNhbGwgdGhpcyBkaXJlY3RseTsKJiM0MzsgKiB1c2UgZm9saW9faGFzX2h3cG9pc29uZWRfcGFnZSgpIGluc3RlYWQuCiAgKgogICogVGhpcyBmbGFnIGlzIHNldCBieSBod3BvaXNvbiBoYW5kbGVyLiAgQ2xlYXJlZCBieSBUSFAgc3BsaXQgb3IgZnJlZSBwYWdlLgogICovCiBGT0xJT19GTEFHKGhhc19od3BvaXNvbmVkLCBGT0xJT19TRUNPTkRfUEFHRSkKJiM0MztGT0xJT19URVNUX1NFVF9GTEFHKGhhc19od3BvaXNvbmVkLCBGT0xJT19TRUNPTkRfUEFHRSkKJiM0MztGT0xJT19URVNUX0NMRUFSX0ZMQUcoaGFzX2h3cG9pc29uZWQsIEZPTElPX1NFQ09ORF9QQUdFKQogI2Vsc2UKIEZPTElPX0ZMQUdfRkFMU0UoaGFzX2h3cG9pc29uZWQpCiAjZW5kaWYKQEAgLTEwNDEsOCAmIzQzOzEwNDYsMjUgQEAgUEFHRV9UWVBFX09QUyhTbGFiLCBzbGFiLCBzbGFiKQogCiAjaWZkZWYgQ09ORklHX0hVR0VUTEJfUEFHRQogRk9MSU9fVFlQRV9PUFMoaHVnZXRsYiwgaHVnZXRsYikKJiM0MzsKJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgZm9saW9fdGVzdF9odWdlX3BvaXNvbihjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKQomIzQzO3sKJiM0MzsJcmV0dXJuIChSRUFEX09OQ0UoZm9saW8tJmd0O3BhZ2UucGFnZV90eXBlKSAmZ3Q7Jmd0OyAyMykgPT0KJiM0MzsJCSgoUEdUWV9odWdldGxiICZsdDsmbHQ7IDEpIHwgMSk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBmb2xpb19zZXRfaHVnZV9wb2lzb24oc3RydWN0IGZvbGlvICpmb2xpbykKJiM0Mzt7CiYjNDM7CWZvbGlvLSZndDtwYWdlLnBhZ2VfdHlwZSB8PSAoMSAmbHQ7Jmx0OyAyMyk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBmb2xpb19jbGVhcl9odWdlX3BvaXNvbihzdHJ1Y3QgZm9saW8gKmZvbGlvKQomIzQzO3sKJiM0MzsJZm9saW8tJmd0O3BhZ2UucGFnZV90eXBlICZhbXA7PSB+KDEgJmx0OyZsdDsgMjMpOwomIzQzO30KICNlbHNlCiBGT0xJT19URVNUX0ZMQUdfRkFMU0UoaHVnZXRsYikKJiM0MztGT0xJT19URVNUX0ZMQUdfRkFMU0UoaHVnZV9wb2lzb24pCiAjZW5kaWYKIAogUEFHRV9UWVBFX09QUyhac21hbGxvYywgenNtYWxsb2MsIHpzbWFsbG9jKQpAQCAtMTA2OCwxMCAmIzQzOzEwOTAsMTQgQEAgc3RhdGljIGlubGluZSBib29sIFBhZ2VIdWdlKGNvbnN0IHN0cnVjdCBwYWdlICpwYWdlKQogCXJldHVybiBmb2xpb190ZXN0X2h1Z2V0bGIocGFnZV9mb2xpbyhwYWdlKSk7CiB9CiAKJiM0Mztib29sIGh1Z2V0bGJfcGFnZV9od3BvaXNvbihjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvLCBjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSk7CiYjNDM7Ym9vbCBodWdldGxiX3VucmVmX3BhZ2VfaHdwb2lzb24oY29uc3Qgc3RydWN0IHBhZ2UgKnBhZ2UpOwomIzQzOwogLyoKLSAqIENoZWNrIGlmIGEgcGFnZSBpcyBjdXJyZW50bHkgbWFya2VkIEhXUG9pc29uZWQuIE5vdGUgdGhhdCB0aGlzIGNoZWNrIGlzCi0gKiBiZXN0IGVmZm9ydCBvbmx5IGFuZCBpbmhlcmVudGx5IHJhY3k6IHRoZXJlIGlzIG5vIHdheSB0byBzeW5jaHJvbml6ZSB3aXRoCi0gKiBmYWlsaW5nIGhhcmR3YXJlLgomIzQzOyAqIENoZWNrIGlmIGEgcGFnZSBpcyBjdXJyZW50bHkgbWFya2VkIEhXUG9pc29uZWQuICBUaGlzIGNoZWNrIGlzIGJlc3QKJiM0MzsgKiBlZmZvcnQgb25seSBhbmQgaW5oZXJlbnRseSByYWN5OiB0aGVyZSBpcyBubyB3YXkgdG8gc3luY2hyb25pemUgd2l0aAomIzQzOyAqIGZhaWxpbmcgaGFyZHdhcmUuICBUaGUgY2FsbGVyIG1heSBub3QgaGF2ZSBhIHJlZmNvdW50IG9uIHRoZSBmb2xpbwomIzQzOyAqIGNvbnRhaW5pbmcgdGhlIHBhZ2UsIHNvIHdlIG11c3QgYmUgY2FyZWZ1bCB0byBub3QgdHJpcCBhbnkgYXNzZXJ0aW9ucy4KICAqLwogc3RhdGljIGlubGluZSBib29sIGlzX3BhZ2VfaHdwb2lzb24oY29uc3Qgc3RydWN0IHBhZ2UgKnBhZ2UpCiB7CkBAIC0xMDgwLDEzICYjNDM7MTEwNiwyNiBAQCBzdGF0aWMgaW5saW5lIGJvb2wgaXNfcGFnZV9od3BvaXNvbihjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSkKIAlpZiAoUGFnZUhXUG9pc29uKHBhZ2UpKQogCQlyZXR1cm4gdHJ1ZTsKIAlmb2xpbyA9IHBhZ2VfZm9saW8ocGFnZSk7Ci0JcmV0dXJuIGZvbGlvX3Rlc3RfaHVnZXRsYihmb2xpbykgJmFtcDsmYW1wOyBQYWdlSFdQb2lzb24oJmFtcDtmb2xpby0mZ3Q7cGFnZSk7CiYjNDM7CWlmIChmb2xpb190ZXN0X2h1Z2VfcG9pc29uKGZvbGlvKSkKJiM0MzsJCXJldHVybiBodWdldGxiX3VucmVmX3BhZ2VfaHdwb2lzb24ocGFnZSk7CiYjNDM7CS8qIEluIGNhc2Ugd2UgcmFjZWQgd2l0aCBodWdldGxiIHRyYW5zZmVycmluZyBmbGFncyAqLwomIzQzOwlyZXR1cm4gUGFnZUhXUG9pc29uKHBhZ2UpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgaXNfcmVmX3BhZ2VfaHdwb2lzb24oY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbywKJiM0MzsJCWNvbnN0IHN0cnVjdCBwYWdlICpwYWdlKQomIzQzO3sKJiM0MzsJaWYgKFBhZ2VIV1BvaXNvbihwYWdlKSkKJiM0MzsJCXJldHVybiB0cnVlOwomIzQzOwlpZiAoZm9saW9fdGVzdF9odWdldGxiKGZvbGlvKSkKJiM0MzsJCXJldHVybiBodWdldGxiX3BhZ2VfaHdwb2lzb24oZm9saW8sIHBhZ2UpOwomIzQzOwlyZXR1cm4gZmFsc2U7CiB9CiAKLXN0YXRpYyBpbmxpbmUgYm9vbCBmb2xpb19jb250YWluX2h3cG9pc29uZWRfcGFnZShzdHJ1Y3QgZm9saW8gKmZvbGlvKQomIzQzO3N0YXRpYyBpbmxpbmUgYm9vbCBmb2xpb19oYXNfaHdwb2lzb25lZF9wYWdlKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8pCiB7Ci0JcmV0dXJuIGZvbGlvX3Rlc3RfaHdwb2lzb24oZm9saW8pIHx8Ci0JICAgIChmb2xpb190ZXN0X2xhcmdlKGZvbGlvKSAmYW1wOyZhbXA7IGZvbGlvX3Rlc3RfaGFzX2h3cG9pc29uZWQoZm9saW8pKTsKJiM0MzsJcmV0dXJuIFBhZ2VIV1BvaXNvbigmYW1wO2ZvbGlvLSZndDtwYWdlKSB8fAomIzQzOwkgICAgICAgKGZvbGlvX3Rlc3RfbGFyZ2UoZm9saW8pICZhbXA7JmFtcDsgZm9saW9fdGVzdF9oYXNfaHdwb2lzb25lZChmb2xpbykpOwogfQogCiBib29sIGlzX2ZyZWVfYnVkZHlfcGFnZShjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BhZ2VtYXAuaCBiL2luY2x1ZGUvbGludXgvcGFnZW1hcC5oCmluZGV4IDJjMzcxOGQ1OTJkNmRkLi42ZmRlZTViMDM2MjFiOSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9wYWdlbWFwLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9wYWdlbWFwLmgKQEAgLTIxMCw2ICYjNDM7MjEwLDcgQEAgZW51bSBtYXBwaW5nX2ZsYWdzIHsKIAlBU19XUklURUJBQ0tfTUFZX0RFQURMT0NLX09OX1JFQ0xBSU0gPSA5LAogCUFTX0tFUk5FTF9GSUxFID0gMTAsCS8qIG1hcHBpbmcgZm9yIGEgZmFrZSBrZXJuZWwgZmlsZSB0aGF0IHNob3VsZG4mIzM5O3QKIAkJCQkgICBhY2NvdW50IHVzYWdlIHRvIHVzZXIgY2dyb3VwcyAqLwomIzQzOwlBU19BVVRIT1JJVEFUSVZFID0gMTEsCS8qIElmIHdlIG1pc3MgaW4gdGhlIHBhZ2UgY2FjaGUsIGl0JiMzOTtzIGEgaG9sZSAqLwogCS8qIEJpdHMgMTYtMjUgYXJlIHVzZWQgZm9yIEZPTElPX09SREVSICovCiAJQVNfRk9MSU9fT1JERVJfQklUUyA9IDUsCiAJQVNfRk9MSU9fT1JERVJfTUlOID0gMTYsCkBAIC0zNDUsNiAmIzQzOzM0NiwxNiBAQCBzdGF0aWMgaW5saW5lIGJvb2wgbWFwcGluZ193cml0ZWJhY2tfbWF5X2RlYWRsb2NrX29uX3JlY2xhaW0oY29uc3Qgc3RydWN0IGFkZHJlcwogCXJldHVybiB0ZXN0X2JpdChBU19XUklURUJBQ0tfTUFZX0RFQURMT0NLX09OX1JFQ0xBSU0sICZhbXA7bWFwcGluZy0mZ3Q7ZmxhZ3MpOwogfQogCiYjNDM7c3RhdGljIGlubGluZSB2b2lkIG1hcHBpbmdfc2V0X2F1dGhvcml0YXRpdmUoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcpCiYjNDM7ewomIzQzOwlzZXRfYml0KEFTX0FVVEhPUklUQVRJVkUsICZhbXA7bWFwcGluZy0mZ3Q7ZmxhZ3MpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgbWFwcGluZ19pc19hdXRob3JpdGF0aXZlKGNvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nKQomIzQzO3sKJiM0MzsJcmV0dXJuIHRlc3RfYml0KEFTX0FVVEhPUklUQVRJVkUsICZhbXA7bWFwcGluZy0mZ3Q7ZmxhZ3MpOwomIzQzO30KJiM0MzsKIHN0YXRpYyBpbmxpbmUgZ2ZwX3QgbWFwcGluZ19nZnBfbWFzayhjb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZykKIHsKIAlyZXR1cm4gbWFwcGluZy0mZ3Q7Z2ZwX21hc2s7CkBAIC0zNzMsNyAmIzQzOzM4NCw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBtYXBwaW5nX3NldF9nZnBfbWFzayhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbSwgZ2ZwX3QgbWFzaykKICAqIGFzc3VtcHRpb25zIGFib3V0IG1heGltdW0gb3JkZXIgaWYgVEhQIGFyZSBkaXNhYmxlZCwgYnV0IDggc2VlbXMgbGlrZQogICogYSBnb29kIG9yZGVyICh0aGF0JiMzOTtzIDFNQiBpZiB5b3UmIzM5O3JlIHVzaW5nIDRrQiBwYWdlcykKICAqLwotI2lmZGVmIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRQomIzQzOyNpZmRlZiBDT05GSUdfRklMRU1BUF9MQVJHRV9GT0xJTwogI2RlZmluZSBQUkVGRVJSRURfTUFYX1BBR0VDQUNIRV9PUkRFUglIUEFHRV9QTURfT1JERVIKICNlbHNlCiAjZGVmaW5lIFBSRUZFUlJFRF9NQVhfUEFHRUNBQ0hFX09SREVSCTgKQEAgLTM5NCw3ICYjNDM7NDA1LDcgQEAgc3RhdGljIGlubGluZSB2b2lkIG1hcHBpbmdfc2V0X2dmcF9tYXNrKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptLCBnZnBfdCBtYXNrKQogICovCiBzdGF0aWMgaW5saW5lIHNpemVfdCBtYXBwaW5nX21heF9mb2xpb19zaXplX3N1cHBvcnRlZCh2b2lkKQogewotCWlmIChJU19FTkFCTEVEKENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSkpCiYjNDM7CWlmIChJU19FTkFCTEVEKENPTkZJR19GSUxFTUFQX0xBUkdFX0ZPTElPKSkKIAkJcmV0dXJuIDFVICZsdDsmbHQ7IChQQUdFX1NISUZUICYjNDM7IE1BWF9QQUdFQ0FDSEVfT1JERVIpOwogCXJldHVybiBQQUdFX1NJWkU7CiB9CkBAIC00MDUsMjkgJiM0Mzs0MTYsMjMgQEAgc3RhdGljIGlubGluZSBzaXplX3QgbWFwcGluZ19tYXhfZm9saW9fc2l6ZV9zdXBwb3J0ZWQodm9pZCkKICAqIEBtaW46IE1pbmltdW0gZm9saW8gb3JkZXIgKGJldHdlZW4gMC1NQVhfUEFHRUNBQ0hFX09SREVSIGluY2x1c2l2ZSkuCiAgKiBAbWF4OiBNYXhpbXVtIGZvbGlvIG9yZGVyIChiZXR3ZWVuIEBtaW4tTUFYX1BBR0VDQUNIRV9PUkRFUiBpbmNsdXNpdmUpLgogICoKLSAqIFRoZSBmaWxlc3lzdGVtIHNob3VsZCBjYWxsIHRoaXMgZnVuY3Rpb24gaW4gaXRzIGlub2RlIGNvbnN0cnVjdG9yIHRvCi0gKiBpbmRpY2F0ZSB3aGljaCBiYXNlIHNpemUgKG1pbikgYW5kIG1heGltdW0gc2l6ZSAobWF4KSBvZiBmb2xpbyB0aGUgVkZTCi0gKiBjYW4gdXNlIHRvIGNhY2hlIHRoZSBjb250ZW50cyBvZiB0aGUgZmlsZS4gIFRoaXMgc2hvdWxkIG9ubHkgYmUgdXNlZAotICogaWYgdGhlIGZpbGVzeXN0ZW0gbmVlZHMgc3BlY2lhbCBoYW5kbGluZyBvZiBmb2xpbyBzaXplcyAoaWUgdGhlcmUgaXMKLSAqIHNvbWV0aGluZyB0aGUgY29yZSBjYW5ub3Qga25vdykuCiYjNDM7ICogVGhlIGZpbGVzeXN0ZW0gc2hvdWxkIGNhbGwgdGhpcyBmdW5jdGlvbiBpbiBpdHMgaW5vZGUgY29uc3RydWN0b3IKJiM0MzsgKiB0byBpbmRpY2F0ZSB3aGljaCBzaXplIGZvbGlvcyBjYW4gYmUgdXNlZCB0byBjYWNoZSB0aGUgY29udGVudHMgb2YKJiM0MzsgKiB0aGUgaW5vZGUuICBUaGlzIHNob3VsZCBvbmx5IGJlIHVzZWQgaWYgdGhlIGZpbGVzeXN0ZW0gbmVlZHMgc3BlY2lhbAomIzQzOyAqIGhhbmRsaW5nIG9mIGZvbGlvIHNpemVzIChpZSB0aGVyZSBpcyBzb21ldGhpbmcgdGhlIGNvcmUgY2Fubm90IGtub3cpLgogICogRG8gbm90IHR1bmUgaXQgYmFzZWQgb24sIGVnLCBpX3NpemUuCiAgKgomIzQzOyAqIGh1Z2V0bGIgY2FsbHMgdGhpcyB3aXRoIG9yZGVycyBsYXJnZXIgdGhhbiBNQVhfUEFHRUNBQ0hFX09SREVSLgomIzQzOyAqIE5vcm1hbCBmaWxlc3lzdGVtcyBzaG91bGQgbm90IGRvIHRoaXMuCiYjNDM7ICoKICAqIENvbnRleHQ6IFRoaXMgc2hvdWxkIG5vdCBiZSBjYWxsZWQgd2hpbGUgdGhlIGlub2RlIGlzIGFjdGl2ZSBhcyBpdAogICogaXMgbm9uLWF0b21pYy4KICAqLwogc3RhdGljIGlubGluZSB2b2lkIG1hcHBpbmdfc2V0X2ZvbGlvX29yZGVyX3JhbmdlKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLAotCQkJCQkJIHVuc2lnbmVkIGludCBtaW4sCi0JCQkJCQkgdW5zaWduZWQgaW50IG1heCkKJiM0MzsJCXVuc2lnbmVkIGludCBtaW4sIHVuc2lnbmVkIGludCBtYXgpCiB7Ci0JaWYgKCFJU19FTkFCTEVEKENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSkpCiYjNDM7CWlmICghSVNfRU5BQkxFRChDT05GSUdfRklMRU1BUF9MQVJHRV9GT0xJTykpCiAJCXJldHVybjsKLQotCWlmIChtaW4gJmd0OyBNQVhfUEFHRUNBQ0hFX09SREVSKQotCQltaW4gPSBNQVhfUEFHRUNBQ0hFX09SREVSOwotCi0JaWYgKG1heCAmZ3Q7IE1BWF9QQUdFQ0FDSEVfT1JERVIpCi0JCW1heCA9IE1BWF9QQUdFQ0FDSEVfT1JERVI7Ci0KIAlpZiAobWF4ICZsdDsgbWluKQogCQltYXggPSBtaW47CiAKQEAgLTQ2MCw3ICYjNDM7NDY1LDcgQEAgc3RhdGljIGlubGluZSB2b2lkIG1hcHBpbmdfc2V0X2xhcmdlX2ZvbGlvcyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZykKIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50CiBtYXBwaW5nX21heF9mb2xpb19vcmRlcihjb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZykKIHsKLQlpZiAoIUlTX0VOQUJMRUQoQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFKSkKJiM0MzsJaWYgKCFJU19FTkFCTEVEKENPTkZJR19GSUxFTUFQX0xBUkdFX0ZPTElPKSkKIAkJcmV0dXJuIDA7CiAJcmV0dXJuIChtYXBwaW5nLSZndDtmbGFncyAmYW1wOyBBU19GT0xJT19PUkRFUl9NQVhfTUFTSykgJmd0OyZndDsgQVNfRk9MSU9fT1JERVJfTUFYOwogfQpAQCAtNDY4LDcgJiM0Mzs0NzMsNyBAQCBtYXBwaW5nX21heF9mb2xpb19vcmRlcihjb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZykKIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50CiBtYXBwaW5nX21pbl9mb2xpb19vcmRlcihjb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZykKIHsKLQlpZiAoIUlTX0VOQUJMRUQoQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFKSkKJiM0MzsJaWYgKCFJU19FTkFCTEVEKENPTkZJR19GSUxFTUFQX0xBUkdFX0ZPTElPKSkKIAkJcmV0dXJuIDA7CiAJcmV0dXJuIChtYXBwaW5nLSZndDtmbGFncyAmYW1wOyBBU19GT0xJT19PUkRFUl9NSU5fTUFTSykgJmd0OyZndDsgQVNfRk9MSU9fT1JERVJfTUlOOwogfQpAQCAtNTI0LDcgJiM0Mzs1MjksNyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgbWFwcGluZ19sYXJnZV9mb2xpb19zdXBwb3J0KGNvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaQogICoKICAqIFJldHVybjogVHJ1ZSBpZiBQTUQtc2l6ZWQgZm9saW9zIGFyZSBzdXBwb3J0ZWQsIG90aGVyd2lzZSBmYWxzZS4KICAqLwotI2lmZGVmIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRQomIzQzOyNpZmRlZiBDT05GSUdfRklMRU1BUF9MQVJHRV9GT0xJTwogc3RhdGljIGlubGluZSBib29sIG1hcHBpbmdfcG1kX2ZvbGlvX3N1cHBvcnQoY29uc3Qgc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcpCiB7CiAJLyogQVNfRk9MSU9fT1JERVIgaXMgb25seSByZWFzb25hYmxlIGZvciBwYWdlY2FjaGUgZm9saW9zICovCmRpZmYgLS1naXQgYS9tbS9LY29uZmlnIGIvbW0vS2NvbmZpZwppbmRleCA5ZTBjYTQ4MjQ5MDU0Zi4uZTY2NmRkMTRjYTBjM2QgMTAwNjQ0Ci0tLSBhL21tL0tjb25maWcKJiM0MzsmIzQzOyYjNDM7IGIvbW0vS2NvbmZpZwpAQCAtODQzLDExICYjNDM7ODQzLDE1IEBAIGNvbmZpZyBQRVJTSVNURU5UX0hVR0VfWkVST19GT0xJTwogY29uZmlnIE1NX0lECiAJZGVmX2Jvb2wgbgogCiYjNDM7Y29uZmlnIExBUkdFX0ZPTElPCiYjNDM7CWRlZl9ib29sIG4KJiM0MzsJc2VsZWN0IFhBUlJBWV9NVUxUSQomIzQzOwogbWVudWNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRQogCWJvb2wgJiMzNDtUcmFuc3BhcmVudCBIdWdlcGFnZSBTdXBwb3J0JiMzNDsKIAlkZXBlbmRzIG9uIEhBVkVfQVJDSF9UUkFOU1BBUkVOVF9IVUdFUEFHRSAmYW1wOyZhbXA7ICFQUkVFTVBUX1JUCiAJc2VsZWN0IENPTVBBQ1RJT04KLQlzZWxlY3QgWEFSUkFZX01VTFRJCiYjNDM7CXNlbGVjdCBMQVJHRV9GT0xJTwogCXNlbGVjdCBNTV9JRAogCWhlbHAKIAkgIFRyYW5zcGFyZW50IEh1Z2VwYWdlcyBhbGxvd3MgdGhlIGtlcm5lbCB0byB1c2UgaHVnZSBwYWdlcyBhbmQKZGlmZiAtLWdpdCBhL21tL2ZpbGVtYXAuYyBiL21tL2ZpbGVtYXAuYwppbmRleCA1OGViOWQyNDA2NDM0OC4uNWE4Y2MyMGU2MjRlNGQgMTAwNjQ0Ci0tLSBhL21tL2ZpbGVtYXAuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9maWxlbWFwLmMKQEAgLTI0ODMsNiAmIzQzOzI0ODMsOCBAQCBzdGF0aWMgdm9pZCBmaWxlbWFwX2dldF9yZWFkX2JhdGNoKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLAogCiAJCWlmICghZm9saW9fYmF0Y2hfYWRkKGZiYXRjaCwgZm9saW8pKQogCQkJYnJlYWs7CiYjNDM7CQlpZiAoZm9saW9faGFzX2h3cG9pc29uZWRfcGFnZShmb2xpbykpCiYjNDM7CQkJYnJlYWs7CiAJCWlmICghZm9saW9fdGVzdF91cHRvZGF0ZShmb2xpbykpCiAJCQlicmVhazsKIAkJaWYgKGZvbGlvX3Rlc3RfcmVhZGFoZWFkKGZvbGlvKSkKQEAgLTI2OTUsNiAmIzQzOzI2OTcsOCBAQCBzdGF0aWMgaW50IGZpbGVtYXBfZ2V0X3BhZ2VzKHN0cnVjdCBraW9jYiAqaW9jYiwgc2l6ZV90IGNvdW50LAogCWlmICghZm9saW9fYmF0Y2hfY291bnQoZmJhdGNoKSkgewogCQlERUZJTkVfUkVBREFIRUFEKHJhY3RsLCBmaWxwLCAmYW1wO2ZpbHAtJmd0O2ZfcmEsIG1hcHBpbmcsIGluZGV4KTsKIAomIzQzOwkJaWYgKG1hcHBpbmdfaXNfYXV0aG9yaXRhdGl2ZShtYXBwaW5nKSkKJiM0MzsJCQlyZXR1cm4gMDsKIAkJaWYgKGlvY2ItJmd0O2tpX2ZsYWdzICZhbXA7IElPQ0JfTk9JTykKIAkJCXJldHVybiAtRUFHQUlOOwogCQlpZiAoaW9jYi0mZ3Q7a2lfZmxhZ3MgJmFtcDsgSU9DQl9OT1dBSVQpCkBAIC0yNzQ5LDYgJiM0MzsyNzUzLDI5IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBwb3Nfc2FtZV9mb2xpbyhsb2ZmX3QgcG9zMSwgbG9mZl90IHBvczIsIHN0cnVjdCBmb2xpbyAqZm9saW8pCiAJcmV0dXJuIChwb3MxICZndDsmZ3Q7IHNoaWZ0ID09IHBvczIgJmd0OyZndDsgc2hpZnQpOwogfQogCiYjNDM7c3RhdGljIHNpemVfdCBhZGp1c3RfcmFuZ2VfaHdwb2lzb24oY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbywgc2l6ZV90IG9mZnNldCwKJiM0MzsJCXNpemVfdCBieXRlcykKJiM0Mzt7CiYjNDM7CWNvbnN0IHN0cnVjdCBwYWdlICpwYWdlID0gZm9saW9fcGFnZShmb2xpbywgb2Zmc2V0IC8gUEFHRV9TSVpFKTsKJiM0MzsJc2l6ZV90IHNhZmVfYnl0ZXM7CiYjNDM7CiYjNDM7CWlmICghZm9saW9faGFzX2h3cG9pc29uZWRfcGFnZShmb2xpbykpCiYjNDM7CQlyZXR1cm4gYnl0ZXM7CiYjNDM7CWlmIChpc19yZWZfcGFnZV9od3BvaXNvbihmb2xpbywgcGFnZSkpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJLyogU2FmZSB0byByZWFkIHRoZSByZW1haW5pbmcgYnl0ZXMgaW4gdGhpcyBwYWdlLiAqLwomIzQzOwlzYWZlX2J5dGVzID0gUEFHRV9TSVpFIC0gKG9mZnNldCAlIFBBR0VfU0laRSk7CiYjNDM7CXBhZ2UmIzQzOyYjNDM7OwomIzQzOwomIzQzOwkvKiBDaGVjayBlYWNoIHJlbWFpbmluZyBwYWdlIGFzIGxvbmcgYXMgd2UgYXJlIG5vdCBkb25lIHlldC4gKi8KJiM0MzsJZm9yICg7IHNhZmVfYnl0ZXMgJmx0OyBieXRlczsgc2FmZV9ieXRlcyAmIzQzOz0gUEFHRV9TSVpFLCBwYWdlJiM0MzsmIzQzOykKJiM0MzsJCWlmIChpc19yZWZfcGFnZV9od3BvaXNvbihmb2xpbywgcGFnZSkpCiYjNDM7CQkJYnJlYWs7CiYjNDM7CiYjNDM7CXJldHVybiBtaW4oc2FmZV9ieXRlcywgYnl0ZXMpOwomIzQzO30KJiM0MzsKIHN0YXRpYyB2b2lkIGZpbGVtYXBfZW5kX2Ryb3BiZWhpbmRfcmVhZChzdHJ1Y3QgZm9saW8gKmZvbGlvKQogewogCWlmICghZm9saW9fdGVzdF9kcm9wYmVoaW5kKGZvbGlvKSkKQEAgLTI4MjgsNiAmIzQzOzI4NTUsMjIgQEAgc3NpemVfdCBmaWxlbWFwX3JlYWQoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsCiAJCQlnb3RvIHB1dF9mb2xpb3M7CiAJCWVuZF9vZmZzZXQgPSBtaW5fdChsb2ZmX3QsIGlzaXplLCBpb2NiLSZndDtraV9wb3MgJiM0MzsgaXRlci0mZ3Q7Y291bnQpOwogCiYjNDM7CQlpZiAoIWZvbGlvX2JhdGNoX2NvdW50KCZhbXA7ZmJhdGNoKSkgewomIzQzOwkJCXNpemVfdCBmc2l6ZSA9IG1hcHBpbmdfbWluX2ZvbGlvX25yYnl0ZXMobWFwcGluZyk7CiYjNDM7CQkJc2l6ZV90IG9mZnNldCA9IGlvY2ItJmd0O2tpX3BvcyAmYW1wOyAoZnNpemUgLSAxKTsKJiM0MzsJCQlzaXplX3QgYnl0ZXMgPSBtaW5fdChsb2ZmX3QsIGVuZF9vZmZzZXQgLSBpb2NiLSZndDtraV9wb3MsCiYjNDM7CQkJCQkgICAgIGZzaXplIC0gb2Zmc2V0KTsKJiM0MzsJCQlzaXplX3QgY29waWVkID0gaW92X2l0ZXJfemVybyhieXRlcywgaXRlcik7CiYjNDM7CiYjNDM7CQkJYWxyZWFkeV9yZWFkICYjNDM7PSBjb3BpZWQ7CiYjNDM7CQkJaW9jYi0mZ3Q7a2lfcG9zICYjNDM7PSBjb3BpZWQ7CiYjNDM7CQkJbGFzdF9wb3MgPSBpb2NiLSZndDtraV9wb3M7CiYjNDM7CiYjNDM7CQkJaWYgKGNvcGllZCAmbHQ7IGJ5dGVzKQomIzQzOwkJCQllcnJvciA9IC1FRkFVTFQ7CiYjNDM7CQkJY29udGludWU7CiYjNDM7CQl9CiYjNDM7CiAJCS8qCiAJCSAqIE9uY2Ugd2Ugc3RhcnQgY29weWluZyBkYXRhLCB3ZSBkb24mIzM5O3Qgd2FudCB0byBiZSB0b3VjaGluZyBhbnkKIAkJICogY2FjaGVsaW5lcyB0aGF0IG1pZ2h0IGJlIGNvbnRlbmRlZDoKQEAgLTI4NjIsMTQgJiM0MzsyOTA1LDE4IEBAIHNzaXplX3QgZmlsZW1hcF9yZWFkKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICppdGVyLAogCQkJaWYgKHdyaXRhYmx5X21hcHBlZCkKIAkJCQlmbHVzaF9kY2FjaGVfZm9saW8oZm9saW8pOwogCi0JCQljb3BpZWQgPSBjb3B5X2ZvbGlvX3RvX2l0ZXIoZm9saW8sIG9mZnNldCwgYnl0ZXMsIGl0ZXIpOwomIzQzOwkJCWNvcGllZCA9IGFkanVzdF9yYW5nZV9od3BvaXNvbihmb2xpbywgb2Zmc2V0LCBieXRlcyk7CiYjNDM7CQkJaWYgKGNvcGllZCAmbHQ7IGJ5dGVzKQomIzQzOwkJCQllcnJvciA9IC1FSU87CiYjNDM7CQkJY29waWVkID0gY29weV9mb2xpb190b19pdGVyKGZvbGlvLCBvZmZzZXQsIGNvcGllZCwgaXRlcik7CiAKIAkJCWFscmVhZHlfcmVhZCAmIzQzOz0gY29waWVkOwogCQkJaW9jYi0mZ3Q7a2lfcG9zICYjNDM7PSBjb3BpZWQ7CiAJCQlsYXN0X3BvcyA9IGlvY2ItJmd0O2tpX3BvczsKIAogCQkJaWYgKGNvcGllZCAmbHQ7IGJ5dGVzKSB7Ci0JCQkJZXJyb3IgPSAtRUZBVUxUOwomIzQzOwkJCQlpZiAoIWVycm9yKQomIzQzOwkJCQkJZXJyb3IgPSAtRUZBVUxUOwogCQkJCWJyZWFrOwogCQkJfQogCQl9CmRpZmYgLS1naXQgYS9tbS9odWdlX21lbW9yeS5jIGIvbW0vaHVnZV9tZW1vcnkuYwppbmRleCAyYmNjYjBhNTNhMGE2MC4uMzUzMzQwMzA5MTA3NGMgMTAwNjQ0Ci0tLSBhL21tL2h1Z2VfbWVtb3J5LmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vaHVnZV9tZW1vcnkuYwpAQCAtNDQxMyw3ICYjNDM7NDQxMyw3IEBAIHN0YXRpYyBib29sIHRocF91bmRlcnVzZWQoc3RydWN0IGZvbGlvICpmb2xpbykKIAlpZiAoa2h1Z2VwYWdlZF9tYXhfcHRlc19ub25lID09IEhQQUdFX1BNRF9OUiAtIDEpCiAJCXJldHVybiBmYWxzZTsKIAotCWlmIChmb2xpb19jb250YWluX2h3cG9pc29uZWRfcGFnZShmb2xpbykpCiYjNDM7CWlmIChmb2xpb19oYXNfaHdwb2lzb25lZF9wYWdlKGZvbGlvKSkKIAkJcmV0dXJuIGZhbHNlOwogCiAJZm9yIChpID0gMDsgaSAmbHQ7IGZvbGlvX25yX3BhZ2VzKGZvbGlvKTsgaSYjNDM7JiM0MzspIHsKZGlmZiAtLWdpdCBhL21tL2h1Z2V0bGIuYyBiL21tL2h1Z2V0bGIuYwppbmRleCA1NzEyMTJiODA4MzVlYy4uYWFhYzZlMmFmNGMyNGEgMTAwNjQ0Ci0tLSBhL21tL2h1Z2V0bGIuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9odWdldGxiLmMKQEAgLTEyNTUsNyAmIzQzOzEyNTUsNyBAQCBzdGF0aWMgc3RydWN0IGZvbGlvICpkZXF1ZXVlX2h1Z2V0bGJfZm9saW9fbm9kZV9leGFjdChzdHJ1Y3QgaHN0YXRlICpoLAogCQlpZiAocGluICZhbXA7JmFtcDsgIWZvbGlvX2lzX2xvbmd0ZXJtX3Bpbm5hYmxlKGZvbGlvKSkKIAkJCWNvbnRpbnVlOwogCi0JCWlmIChmb2xpb190ZXN0X2h3cG9pc29uKGZvbGlvKSkKJiM0MzsJCWlmIChmb2xpb190ZXN0X2hhc19od3BvaXNvbmVkKGZvbGlvKSkKIAkJCWNvbnRpbnVlOwogCiAJCWlmIChpc19taWdyYXRlX2lzb2xhdGVfcGFnZSgmYW1wO2ZvbGlvLSZndDtwYWdlKSkKQEAgLTE0OTgsMTAgJiM0MzsxNDk4LDEwIEBAIHN0YXRpYyB2b2lkIF9fdXBkYXRlX2FuZF9mcmVlX2h1Z2V0bGJfZm9saW8oc3RydWN0IGhzdGF0ZSAqaCwKIAl9CiAKIAkvKgotCSAqIE1vdmUgUGFnZUhXUG9pc29uIGZsYWcgZnJvbSBoZWFkIHBhZ2UgdG8gdGhlIHJhdyBlcnJvciBwYWdlcywKLQkgKiB3aGljaCBtYWtlcyBhbnkgaGVhbHRoeSBzdWJwYWdlcyByZXVzYWJsZS4KJiM0MzsJICogTW92ZSBIV1BvaXNvbiBmbGFnIHRvIGVhY2ggZXJyb3IgcGFnZQomIzQzOwkgKiB3aGljaCBtYWtlcyBhbnkgaGVhbHRoeSBwYWdlcyByZXVzYWJsZS4KIAkgKi8KLQlpZiAodW5saWtlbHkoZm9saW9fdGVzdF9od3BvaXNvbihmb2xpbykpKQomIzQzOwlpZiAodW5saWtlbHkoZm9saW9fdGVzdF9oYXNfaHdwb2lzb25lZChmb2xpbykpKQogCQlmb2xpb19jbGVhcl9odWdldGxiX2h3cG9pc29uKGZvbGlvKTsKIAogCVZNX0JVR19PTl9GT0xJTyhmb2xpb19yZWZfY291bnQoZm9saW8pLCBmb2xpbyk7CkBAIC0xNzc1LDcgJiM0MzsxNzc1LDcgQEAgdm9pZCBpbml0X25ld19odWdldGxiX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8pCiAgKiBzdGFibGUuICBEdWUgdG8gbG9ja2luZyBvcmRlciwgd2UgY2FuIG9ubHkgdHJ5bG9ja193cml0ZS4gIElmIHdlIGNhbgogICogbm90IGdldCB0aGUgbG9jaywgc2ltcGx5IHJldHVybiBOVUxMIHRvIGNhbGxlci4KICAqLwotc3RydWN0IGFkZHJlc3Nfc3BhY2UgKmh1Z2V0bGJfZm9saW9fbWFwcGluZ19sb2NrX3dyaXRlKHN0cnVjdCBmb2xpbyAqZm9saW8pCiYjNDM7c3RydWN0IGFkZHJlc3Nfc3BhY2UgKmh1Z2V0bGJfZm9saW9fbWFwcGluZ19sb2NrX3dyaXRlKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8pCiB7CiAJc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcgPSBmb2xpb19tYXBwaW5nKGZvbGlvKTsKIApAQCAtMzk5OCw3ICYjNDM7Mzk5OCw3IEBAIGxvbmcgZGVtb3RlX3Bvb2xfaHVnZV9wYWdlKHN0cnVjdCBoc3RhdGUgKnNyYywgbm9kZW1hc2tfdCAqbm9kZXNfYWxsb3dlZCwKIAkJc3RydWN0IGZvbGlvICpmb2xpbywgKm5leHQ7CiAKIAkJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGZvbGlvLCBuZXh0LCAmYW1wO3NyYy0mZ3Q7aHVnZXBhZ2VfZnJlZWxpc3RzW25vZGVdLCBscnUpIHsKLQkJCWlmIChmb2xpb190ZXN0X2h3cG9pc29uKGZvbGlvKSkKJiM0MzsJCQlpZiAoZm9saW9fdGVzdF9oYXNfaHdwb2lzb25lZChmb2xpbykpCiAJCQkJY29udGludWU7CiAKIAkJCXJlbW92ZV9odWdldGxiX2ZvbGlvKHNyYywgZm9saW8sIGZhbHNlKTsKQEAgLTU4MDksNyAmIzQzOzU4MDksNyBAQCBzdGF0aWMgdm1fZmF1bHRfdCBodWdldGxiX25vX3BhZ2Uoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsCiAJCSAqIGRvbiYjMzk7dCBoYXZlIGh3cG9pc29uZWQgc3dhcCBlbnRyeSBmb3IgZXJyb3JlZCB2aXJ0dWFsIGFkZHJlc3MuCiAJCSAqIFNvIHdlIG5lZWQgdG8gYmxvY2sgaHVnZXBhZ2UgZmF1bHQgYnkgUEdfaHdwb2lzb24gYml0IGNoZWNrLgogCQkgKi8KLQkJaWYgKHVubGlrZWx5KGZvbGlvX3Rlc3RfaHdwb2lzb24oZm9saW8pKSkgewomIzQzOwkJaWYgKHVubGlrZWx5KGZvbGlvX3Rlc3RfaGFzX2h3cG9pc29uZWQoZm9saW8pKSkgewogCQkJcmV0ID0gVk1fRkFVTFRfSFdQT0lTT05fTEFSR0UgfAogCQkJCVZNX0ZBVUxUX1NFVF9ISU5ERVgoaHN0YXRlX2luZGV4KGgpKTsKIAkJCWdvdG8gYmFja291dF91bmxvY2tlZDsKQEAgLTYzMTgsNyAmIzQzOzYzMTgsNyBAQCBpbnQgaHVnZXRsYl9tZmlsbF9hdG9taWNfcHRlKHB0ZV90ICpkc3RfcHRlLAogCXB0bCA9IGh1Z2VfcHRlX2xvY2soaCwgZHN0X21tLCBkc3RfcHRlKTsKIAogCXJldCA9IC1FSU87Ci0JaWYgKGZvbGlvX3Rlc3RfaHdwb2lzb24oZm9saW8pKQomIzQzOwlpZiAoZm9saW9fdGVzdF9oYXNfaHdwb2lzb25lZChmb2xpbykpCiAJCWdvdG8gb3V0X3JlbGVhc2VfdW5sb2NrOwogCiAJcmV0ID0gLUVFWElTVDsKZGlmZiAtLWdpdCBhL21tL21lbW9yeS1mYWlsdXJlLmMgYi9tbS9tZW1vcnktZmFpbHVyZS5jCmluZGV4IDUxNTA4YTU1YzQwNTVlLi43M2ViYmM5MzU2NjE4MiAxMDA2NDQKLS0tIGEvbW0vbWVtb3J5LWZhaWx1cmUuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9tZW1vcnktZmFpbHVyZS5jCkBAIC0xODEwLDUwICYjNDM7MTgxMCw2NSBAQCBFWFBPUlRfU1lNQk9MX0dQTChtZl9kYXhfa2lsbF9wcm9jcyk7CiAKIC8qCiAgKiBTdHJ1Y3QgcmF3X2h3cF9wYWdlIHJlcHJlc2VudHMgaW5mb3JtYXRpb24gYWJvdXQgJiMzNDtyYXcgZXJyb3IgcGFnZSYjMzQ7LAotICogY29uc3RydWN0aW5nIHNpbmdseSBsaW5rZWQgbGlzdCBmcm9tIC0mZ3Q7X2h1Z2V0bGJfaHdwb2lzb24gZmllbGQgb2YgZm9saW8uCiYjNDM7ICogY29uc3RydWN0aW5nIHNpbmdseSBsaW5rZWQgbGlzdCBmcm9tIGZvbGlvLSZndDtodWdldGxiX2h3cG9pc29uIGZpZWxkLgogICovCiBzdHJ1Y3QgcmF3X2h3cF9wYWdlIHsKIAlzdHJ1Y3QgbGxpc3Rfbm9kZSBub2RlOwogCXN0cnVjdCBwYWdlICpwYWdlOwogfTsKIAotc3RhdGljIGlubGluZSBzdHJ1Y3QgbGxpc3RfaGVhZCAqcmF3X2h3cF9saXN0X2hlYWQoc3RydWN0IGZvbGlvICpmb2xpbykKJiM0MztzdGF0aWMgYm9vbCBwcmVjaXNlX3BhZ2VfcG9pc29uZWQoY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbywKJiM0MzsJCWNvbnN0IHN0cnVjdCBwYWdlICpwYWdlKQogewotCXJldHVybiAoc3RydWN0IGxsaXN0X2hlYWQgKikmYW1wO2ZvbGlvLSZndDtfaHVnZXRsYl9od3BvaXNvbjsKLX0KLQotYm9vbCBpc19yYXdfaHdwb2lzb25fcGFnZV9pbl9odWdlcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSkKLXsKLQlzdHJ1Y3QgbGxpc3RfaGVhZCAqcmF3X2h3cF9oZWFkOwotCXN0cnVjdCByYXdfaHdwX3BhZ2UgKnA7Ci0Jc3RydWN0IGZvbGlvICpmb2xpbyA9IHBhZ2VfZm9saW8ocGFnZSk7Ci0JYm9vbCByZXQgPSBmYWxzZTsKLQotCWlmICghZm9saW9fdGVzdF9od3BvaXNvbihmb2xpbykpCi0JCXJldHVybiBmYWxzZTsKLQotCWlmICghZm9saW9fdGVzdF9odWdldGxiKGZvbGlvKSkKLQkJcmV0dXJuIFBhZ2VIV1BvaXNvbihwYWdlKTsKJiM0MzsJY29uc3Qgc3RydWN0IGxsaXN0X2hlYWQgKmxpc3QgPSAmYW1wO2ZvbGlvLSZndDtodWdldGxiX2h3cG9pc29uOwomIzQzOwljb25zdCBzdHJ1Y3QgcmF3X2h3cF9wYWdlICpwOwogCiAJLyoKLQkgKiBXaGVuIFJhd0h3cFVucmVsaWFibGUgaXMgc2V0LCBrZXJuZWwgbG9zdCB0cmFjayBvZiB3aGljaCBzdWJwYWdlcwotCSAqIGFyZSBIV1BPSVNPTi4gU28gcmV0dXJuIGFzIGlmIEFMTCBzdWJwYWdlcyBhcmUgSFdQT0lTT05lZC4KJiM0MzsJICogV2hlbiBSYXdId3BVbnJlbGlhYmxlIGlzIHNldCwga2VybmVsIGxvc3QgdHJhY2sgb2Ygd2hpY2ggcGFnZXMKJiM0MzsJICogYXJlIEhXUE9JU09OLiBTbyByZXR1cm4gYXMgaWYgQUxMIHBhZ2VzIGFyZSBIV1BPSVNPTmVkLgogCSAqLwogCWlmIChmb2xpb190ZXN0X2h1Z2V0bGJfcmF3X2h3cF91bnJlbGlhYmxlKGZvbGlvKSkKIAkJcmV0dXJuIHRydWU7CiAKLQltdXRleF9sb2NrKCZhbXA7bWZfbXV0ZXgpOwotCi0JcmF3X2h3cF9oZWFkID0gcmF3X2h3cF9saXN0X2hlYWQoZm9saW8pOwotCWxsaXN0X2Zvcl9lYWNoX2VudHJ5KHAsIHJhd19od3BfaGVhZC0mZ3Q7Zmlyc3QsIG5vZGUpIHsKLQkJaWYgKHBhZ2UgPT0gcC0mZ3Q7cGFnZSkgewotCQkJcmV0ID0gdHJ1ZTsKLQkJCWJyZWFrOwotCQl9CiYjNDM7CWxsaXN0X2Zvcl9lYWNoX2VudHJ5KHAsIFJFQURfT05DRShsaXN0LSZndDtmaXJzdCksIG5vZGUpIHsKJiM0MzsJCWlmIChwYWdlID09IHAtJmd0O3BhZ2UpCiYjNDM7CQkJcmV0dXJuIHRydWU7CiAJfQogCi0JbXV0ZXhfdW5sb2NrKCZhbXA7bWZfbXV0ZXgpOwomIzQzOwlyZXR1cm4gZmFsc2U7CiYjNDM7fQogCiYjNDM7LyoKJiM0MzsgKiBDaGVjayBpZiBhIGdpdmVuIEBwYWdlIGluIGEgaHVnZXRsYiBmb2xpbyBpcyBIV1BPSVNPTi4KJiM0MzsgKi8KJiM0Mztib29sIGh1Z2V0bGJfcGFnZV9od3BvaXNvbihjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvLCBjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSkKJiM0Mzt7CiYjNDM7CWlmICghZm9saW9fdGVzdF9oYXNfaHdwb2lzb25lZChmb2xpbykpCiYjNDM7CQlyZXR1cm4gZmFsc2U7CiYjNDM7CiYjNDM7CXJldHVybiBwcmVjaXNlX3BhZ2VfcG9pc29uZWQoZm9saW8sIHBhZ2UpOwomIzQzO30KJiM0MzsKJiM0MzsvKgomIzQzOyAqIFdlIGhhdmUgbm8gcmVmZXJlbmNlIG9uIHRoZSBmb2xpbyBjb250YWluaW5nIHRoaXMgcGFnZS4KJiM0MzsgKiBUaGUgaHVnZXRsYl9sb2NrIGtlZXBzIGh1Z2V0bGIgZm9saW9zIGZyb20gYmVpbmcgZnJlZWQuCiYjNDM7ICovCiYjNDM7Ym9vbCBodWdldGxiX3VucmVmX3BhZ2VfaHdwb2lzb24oY29uc3Qgc3RydWN0IHBhZ2UgKnBhZ2UpCiYjNDM7ewomIzQzOwljb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvOwomIzQzOwl1bnNpZ25lZCBsb25nIGZsYWdzOwomIzQzOwlib29sIHJldDsKJiM0MzsKJiM0MzsJc3Bpbl9sb2NrX2lycXNhdmUoJmFtcDtodWdldGxiX2xvY2ssIGZsYWdzKTsKJiM0MzsJZm9saW8gPSBwYWdlX2ZvbGlvKHBhZ2UpOwomIzQzOwlpZiAoIWZvbGlvX3Rlc3RfaHVnZV9wb2lzb24oZm9saW8pKSB7CiYjNDM7CQlyZXQgPSBQYWdlSFdQb2lzb24ocGFnZSk7CiYjNDM7CQlnb3RvIHVubG9jazsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXQgPSBwcmVjaXNlX3BhZ2VfcG9pc29uZWQoZm9saW8sIHBhZ2UpOwomIzQzO3VubG9jazoKJiM0MzsJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYW1wO2h1Z2V0bGJfbG9jaywgZmxhZ3MpOwogCXJldHVybiByZXQ7CiB9CiAKQEAgLTE4NjMsNyAmIzQzOzE4NzgsNyBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBfX2ZvbGlvX2ZyZWVfcmF3X2h3cChzdHJ1Y3QgZm9saW8gKmZvbGlvLCBib29sIG1vdmVfZmxhZykKIAlzdHJ1Y3QgcmF3X2h3cF9wYWdlICpwLCAqbmV4dDsKIAl1bnNpZ25lZCBsb25nIGNvdW50ID0gMDsKIAotCWhlYWQgPSBsbGlzdF9kZWxfYWxsKHJhd19od3BfbGlzdF9oZWFkKGZvbGlvKSk7CiYjNDM7CWhlYWQgPSBsbGlzdF9kZWxfYWxsKCZhbXA7Zm9saW8tJmd0O2h1Z2V0bGJfaHdwb2lzb24pOwogCWxsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocCwgbmV4dCwgaGVhZCwgbm9kZSkgewogCQlpZiAobW92ZV9mbGFnKQogCQkJU2V0UGFnZUhXUG9pc29uKHAtJmd0O3BhZ2UpOwpAQCAtMTg4MSwyNiAmIzQzOzE4OTYsNDEgQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgX19mb2xpb19mcmVlX3Jhd19od3Aoc3RydWN0IGZvbGlvICpmb2xpbywgYm9vbCBtb3ZlX2ZsYWcpCiAjZGVmaW5lCU1GX0hVR0VUTEJfRk9MSU9fUFJFX1BPSVNPTkVECTMJLyogZm9saW8gYWxyZWFkeSBwb2lzb25lZCAqLwogI2RlZmluZQlNRl9IVUdFVExCX1BBR0VfUFJFX1BPSVNPTkVECTQJLyogZXhhY3QgcGFnZSBhbHJlYWR5IHBvaXNvbmVkICovCiAjZGVmaW5lCU1GX0hVR0VUTEJfUkVUUlkJCTUJLyogaHVnZXBhZ2UgaXMgYnVzeSwgcmV0cnkgKi8KJiM0MzsKJiM0MztzdGF0aWMgaW5saW5lIGludCBodWdldGxiX3NldF9wb2lzb24oc3RydWN0IGZvbGlvICpmb2xpbykKJiM0Mzt7CiYjNDM7CWlmIChmb2xpb190ZXN0X3NldF9oYXNfaHdwb2lzb25lZChmb2xpbykpCiYjNDM7CQlyZXR1cm4gTUZfSFVHRVRMQl9GT0xJT19QUkVfUE9JU09ORUQ7CiYjNDM7CWZvbGlvX3NldF9odWdlX3BvaXNvbihmb2xpbyk7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW5saW5lIGludCBodWdldGxiX2NsZWFyX3BvaXNvbihzdHJ1Y3QgZm9saW8gKmZvbGlvKQomIzQzO3sKJiM0MzsJaWYgKCFmb2xpb190ZXN0X2NsZWFyX2hhc19od3BvaXNvbmVkKGZvbGlvKSkKJiM0MzsJCXJldHVybiAtRUJVU1k7CiYjNDM7CWZvbGlvX2NsZWFyX2h1Z2VfcG9pc29uKGZvbGlvKTsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwogLyoKICAqIFNldCBodWdldGxiIGZvbGlvIGFzIGh3cG9pc29uZWQsIHVwZGF0ZSBmb2xpbyBwcml2YXRlIHJhdyBod3BvaXNvbiBsaXN0CiAgKiB0byBrZWVwIHRyYWNrIG9mIHRoZSBwb2lzb25lZCBwYWdlcy4KICAqLwogc3RhdGljIGludCBodWdldGxiX3VwZGF0ZV9od3BvaXNvbihzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgcGFnZSAqcGFnZSkKIHsKLQlzdHJ1Y3QgbGxpc3RfaGVhZCAqaGVhZDsKIAlzdHJ1Y3QgcmF3X2h3cF9wYWdlICpyYXdfaHdwOwogCXN0cnVjdCByYXdfaHdwX3BhZ2UgKnA7Ci0JaW50IHJldCA9IGZvbGlvX3Rlc3Rfc2V0X2h3cG9pc29uKGZvbGlvKSA/IE1GX0hVR0VUTEJfRk9MSU9fUFJFX1BPSVNPTkVEIDogMDsKJiM0MzsJaW50IHJldCA9IGh1Z2V0bGJfc2V0X3BvaXNvbihmb2xpbyk7CiAKIAkvKgogCSAqIE9uY2UgdGhlIGh3cG9pc29uIGh1Z2VwYWdlIGhhcyBsb3N0IHJlbGlhYmxlIHJhdyBlcnJvciBpbmZvLAotCSAqIHRoZXJlIGlzIGxpdHRsZSBtZWFuaW5nIHRvIGtlZXAgYWRkaXRpb25hbCBlcnJvciBpbmZvIHByZWNpc2VseSwKLQkgKiBzbyBza2lwIHRvIGFkZCBhZGRpdGlvbmFsIHJhdyBlcnJvciBpbmZvLgomIzQzOwkgKiB0aGVyZSBpcyBubyBwb2ludCBpbiBrZWVwaW5nIGFkZGl0aW9uYWwgZXJyb3IgaW5mbyBwcmVjaXNlbHksCiYjNDM7CSAqIHNvIHNraXAgYWRkaW5nIGFkZGl0aW9uYWwgcmF3IGVycm9yIGluZm8uCiAJICovCiAJaWYgKGZvbGlvX3Rlc3RfaHVnZXRsYl9yYXdfaHdwX3VucmVsaWFibGUoZm9saW8pKQogCQlyZXR1cm4gTUZfSFVHRVRMQl9GT0xJT19QUkVfUE9JU09ORUQ7Ci0JaGVhZCA9IHJhd19od3BfbGlzdF9oZWFkKGZvbGlvKTsKLQlsbGlzdF9mb3JfZWFjaF9lbnRyeShwLCBoZWFkLSZndDtmaXJzdCwgbm9kZSkgewomIzQzOwlsbGlzdF9mb3JfZWFjaF9lbnRyeShwLCBmb2xpby0mZ3Q7aHVnZXRsYl9od3BvaXNvbi5maXJzdCwgbm9kZSkgewogCQlpZiAocC0mZ3Q7cGFnZSA9PSBwYWdlKQogCQkJcmV0dXJuIE1GX0hVR0VUTEJfUEFHRV9QUkVfUE9JU09ORUQ7CiAJfQpAQCAtMTkwOCw3ICYjNDM7MTkzOCw3IEBAIHN0YXRpYyBpbnQgaHVnZXRsYl91cGRhdGVfaHdwb2lzb24oc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHBhZ2UgKnBhZ2UpCiAJcmF3X2h3cCA9IGttYWxsb2Nfb2JqKHN0cnVjdCByYXdfaHdwX3BhZ2UsIEdGUF9BVE9NSUMpOwogCWlmIChyYXdfaHdwKSB7CiAJCXJhd19od3AtJmd0O3BhZ2UgPSBwYWdlOwotCQlsbGlzdF9hZGQoJmFtcDtyYXdfaHdwLSZndDtub2RlLCBoZWFkKTsKJiM0MzsJCWxsaXN0X2FkZCgmYW1wO3Jhd19od3AtJmd0O25vZGUsICZhbXA7Zm9saW8tJmd0O2h1Z2V0bGJfaHdwb2lzb24pOwogCX0gZWxzZSB7CiAJCS8qCiAJCSAqIEZhaWxlZCB0byBzYXZlIHJhdyBlcnJvciBpbmZvLiAgV2Ugbm8gbG9uZ2VyIHRyYWNlIGFsbApAQCAtMTk1MCw4ICYjNDM7MTk4MCw4IEBAIHZvaWQgZm9saW9fY2xlYXJfaHVnZXRsYl9od3BvaXNvbihzdHJ1Y3QgZm9saW8gKmZvbGlvKQogCQlyZXR1cm47CiAJaWYgKGZvbGlvX3Rlc3RfaHVnZXRsYl92bWVtbWFwX29wdGltaXplZChmb2xpbykpCiAJCXJldHVybjsKLQlmb2xpb19jbGVhcl9od3BvaXNvbihmb2xpbyk7CiAJZm9saW9fZnJlZV9yYXdfaHdwKGZvbGlvLCB0cnVlKTsKJiM0MzsJZm9saW9fY2xlYXJfaGFzX2h3cG9pc29uZWQoZm9saW8pOwogfQogCiBzdGF0aWMgaW50IGdldF9odWdlX3BhZ2VfZm9yX2h3cG9pc29uKHVuc2lnbmVkIGxvbmcgcGZuLCBpbnQgZmxhZ3MsCkBAIC0yMTA0LDYgJiM0MzsyMTM0LDExIEBAIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBmb2xpb19mcmVlX3Jhd19od3Aoc3RydWN0IGZvbGlvICpmb2xpbywgYm9vbCBmbGFnKQogewogCXJldHVybiAwOwogfQomIzQzOwomIzQzO3N0YXRpYyBpbmxpbmUgaW50IGh1Z2V0bGJfY2xlYXJfcG9pc29uKHN0cnVjdCBmb2xpbyAqZm9saW8pCiYjNDM7ewomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiAjZW5kaWYJLyogQ09ORklHX0hVR0VUTEJfUEFHRSAqLwogCiAvKiBEcm9wIHRoZSBleHRyYSByZWZjb3VudCBpbiBjYXNlIHdlIGNvbWUgZnJvbSBtYWR2aXNlKCkgKi8KQEAgLTI2NzcsNyAmIzQzOzI3MTIsMTIgQEAgaW50IHVucG9pc29uX21lbW9yeSh1bnNpZ25lZCBsb25nIHBmbikKIAlwID0gcGZuX3RvX29ubGluZV9wYWdlKHBmbik7CiAJaWYgKCFwKQogCQlyZXR1cm4gLUVJTzsKLQlmb2xpbyA9IHBhZ2VfZm9saW8ocCk7CiYjNDM7CiYjNDM7CWlmICghaXNfcGFnZV9od3BvaXNvbihwKSkgewomIzQzOwkJdW5wb2lzb25fcHJfaW5mbygmIzM0OyUjbHg6IHBhZ2UgaXMgbm90IHBvaXNvbmVkXG4mIzM0OywKJiM0MzsJCQkJIHBmbiwgJmFtcDt1bnBvaXNvbl9ycyk7CiYjNDM7CQlyZXR1cm4gLUVCVVNZOwomIzQzOwl9CiAKIAltdXRleF9sb2NrKCZhbXA7bWZfbXV0ZXgpOwogCkBAIC0yNjg4LDYgJiM0MzsyNzI4LDggQEAgaW50IHVucG9pc29uX21lbW9yeSh1bnNpZ25lZCBsb25nIHBmbikKIAkJZ290byB1bmxvY2tfbXV0ZXg7CiAJfQogCiYjNDM7CWZvbGlvID0gcGFnZV9mb2xpbyhwKTsKJiM0MzsKIAlpZiAoaXNfaHVnZV96ZXJvX2ZvbGlvKGZvbGlvKSkgewogCQl1bnBvaXNvbl9wcl9pbmZvKCYjMzQ7JSNseDogaHVnZSB6ZXJvIHBhZ2UgaXMgbm90IHN1cHBvcnRlZFxuJiMzNDssCiAJCQkJIHBmbiwgJmFtcDt1bnBvaXNvbl9ycyk7CkBAIC0yNjk1LDEyICYjNDM7MjczNyw2IEBAIGludCB1bnBvaXNvbl9tZW1vcnkodW5zaWduZWQgbG9uZyBwZm4pCiAJCWdvdG8gdW5sb2NrX211dGV4OwogCX0KIAotCWlmICghUGFnZUhXUG9pc29uKHApKSB7Ci0JCXVucG9pc29uX3ByX2luZm8oJiMzNDslI2x4OiBwYWdlIHdhcyBhbHJlYWR5IHVucG9pc29uZWRcbiYjMzQ7LAotCQkJCSBwZm4sICZhbXA7dW5wb2lzb25fcnMpOwotCQlnb3RvIHVubG9ja19tdXRleDsKLQl9Ci0KIAlpZiAoZm9saW9fcmVmX2NvdW50KGZvbGlvKSAmZ3Q7IDEpIHsKIAkJdW5wb2lzb25fcHJfaW5mbygmIzM0OyUjbHg6IHNvbWVvbmUgZ3JhYnMgdGhlIGh3cG9pc29uIHBhZ2VcbiYjMzQ7LAogCQkJCSBwZm4sICZhbXA7dW5wb2lzb25fcnMpOwpAQCAtMjczMCw4ICYjNDM7Mjc2Niw4IEBAIGludCB1bnBvaXNvbl9tZW1vcnkodW5zaWduZWQgbG9uZyBwZm4pCiAJCQljb3VudCA9IGZvbGlvX2ZyZWVfcmF3X2h3cChmb2xpbywgZmFsc2UpOwogCQkJaWYgKGNvdW50ID09IDApCiAJCQkJZ290byB1bmxvY2tfbXV0ZXg7CiYjNDM7CQkJcmV0ID0gaHVnZXRsYl9jbGVhcl9wb2lzb24oZm9saW8pOwogCQl9Ci0JCXJldCA9IGZvbGlvX3Rlc3RfY2xlYXJfaHdwb2lzb24oZm9saW8pID8gMCA6IC1FQlVTWTsKIAl9IGVsc2UgaWYgKGdocCAmbHQ7IDApIHsKIAkJaWYgKGdocCA9PSAtRUhXUE9JU09OKSB7CiAJCQlyZXQgPSBwdXRfcGFnZV9iYWNrX2J1ZGR5KHApID8gMCA6IC1FQlVTWTsKQEAgLTI3NDAsMTYgJiM0MzsyNzc2LDE4IEBAIGludCB1bnBvaXNvbl9tZW1vcnkodW5zaWduZWQgbG9uZyBwZm4pCiAJCQl1bnBvaXNvbl9wcl9pbmZvKCYjMzQ7JSNseDogZmFpbGVkIHRvIGdyYWIgcGFnZVxuJiMzNDssCiAJCQkJCSBwZm4sICZhbXA7dW5wb2lzb25fcnMpOwogCQl9Ci0JfSBlbHNlIHsKLQkJaWYgKGZvbGlvX3Rlc3RfaHVnZXRsYihmb2xpbykpIHsKLQkJCWh1Z2UgPSB0cnVlOwotCQkJY291bnQgPSBmb2xpb19mcmVlX3Jhd19od3AoZm9saW8sIGZhbHNlKTsKLQkJCWlmIChjb3VudCA9PSAwKSB7Ci0JCQkJZm9saW9fcHV0KGZvbGlvKTsKLQkJCQlnb3RvIHVubG9ja19tdXRleDsKLQkJCX0KJiM0MzsJfSBlbHNlIGlmIChmb2xpb190ZXN0X2h1Z2V0bGIoZm9saW8pKSB7CiYjNDM7CQlodWdlID0gdHJ1ZTsKJiM0MzsJCWNvdW50ID0gZm9saW9fZnJlZV9yYXdfaHdwKGZvbGlvLCBmYWxzZSk7CiYjNDM7CQlpZiAoY291bnQgPT0gMCkgewomIzQzOwkJCWZvbGlvX3B1dChmb2xpbyk7CiYjNDM7CQkJZ290byB1bmxvY2tfbXV0ZXg7CiAJCX0KLQomIzQzOwkJZm9saW9fcHV0KGZvbGlvKTsKJiM0MzsJCXJldCA9IGh1Z2V0bGJfY2xlYXJfcG9pc29uKGZvbGlvKTsKJiM0MzsJCWlmICghcmV0KQomIzQzOwkJCWZvbGlvX3B1dChmb2xpbyk7CiYjNDM7CX0gZWxzZSB7CiAJCWZvbGlvX3B1dChmb2xpbyk7CiAJCWlmIChUZXN0Q2xlYXJQYWdlSFdQb2lzb24ocCkpIHsKIAkJCWZvbGlvX3B1dChmb2xpbyk7CmRpZmYgLS1naXQgYS9tbS9tZW1vcnlfaG90cGx1Zy5jIGIvbW0vbWVtb3J5X2hvdHBsdWcuYwppbmRleCA3YWMxOWZhYjIyNjMyNC4uMzMwMDdlOGU1NDZhMDkgMTAwNjQ0Ci0tLSBhL21tL21lbW9yeV9ob3RwbHVnLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vbWVtb3J5X2hvdHBsdWcuYwpAQCAtMTgxMyw3ICYjNDM7MTgxMyw3IEBAIHN0YXRpYyB2b2lkIGRvX21pZ3JhdGVfcmFuZ2UodW5zaWduZWQgbG9uZyBzdGFydF9wZm4sIHVuc2lnbmVkIGxvbmcgZW5kX3BmbikKIAkJaWYgKGZvbGlvX3Rlc3RfbGFyZ2UoZm9saW8pKQogCQkJcGZuID0gZm9saW9fcGZuKGZvbGlvKSAmIzQzOyBmb2xpb19ucl9wYWdlcyhmb2xpbykgLSAxOwogCi0JCWlmIChmb2xpb19jb250YWluX2h3cG9pc29uZWRfcGFnZShmb2xpbykpIHsKJiM0MzsJCWlmIChmb2xpb19oYXNfaHdwb2lzb25lZF9wYWdlKGZvbGlvKSkgewogCQkJLyoKIAkJCSAqIHVubWFwX3BvaXNvbmVkX2ZvbGlvKCkgY2Fubm90IGhhbmRsZSBsYXJnZSBmb2xpb3MKIAkJCSAqIGluIGFsbCBjYXNlcyB5ZXQuCmRpZmYgLS1naXQgYS9tbS9zaG1lbS5jIGIvbW0vc2htZW0uYwppbmRleCBiNTFmODNjOTcwYmIzNy4uNDkyYzliZWYzNjIwNzQgMTAwNjQ0Ci0tLSBhL21tL3NobWVtLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vc2htZW0uYwpAQCAtMzI0MCw3ICYjNDM7MzI0MCw3IEBAIHNobWVtX3dyaXRlX2JlZ2luKGNvbnN0IHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsCiAJaWYgKHJldCkKIAkJcmV0dXJuIHJldDsKIAotCWlmIChmb2xpb19jb250YWluX2h3cG9pc29uZWRfcGFnZShmb2xpbykpIHsKJiM0MzsJaWYgKGZvbGlvX2hhc19od3BvaXNvbmVkX3BhZ2UoZm9saW8pKSB7CiAJCWZvbGlvX3VubG9jayhmb2xpbyk7CiAJCWZvbGlvX3B1dChmb2xpbyk7CiAJCXJldHVybiAtRUlPOwpkaWZmIC0tZ2l0IGEvbW0vdm1zY2FuLmMgYi9tbS92bXNjYW4uYwppbmRleCAzNWMzYmIxNWFlOTZhMy4uNzBlNTRhY2UwZTc0MWMgMTAwNjQ0Ci0tLSBhL21tL3Ztc2Nhbi5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL3Ztc2Nhbi5jCkBAIC0xMDg2LDcgJiM0MzsxMDg2LDcgQEAgc3RhdGljIHVuc2lnbmVkIGludCBzaHJpbmtfZm9saW9fbGlzdChzdHJ1Y3QgbGlzdF9oZWFkICpmb2xpb19saXN0LAogCQlpZiAoIWZvbGlvX3RyeWxvY2soZm9saW8pKQogCQkJZ290byBrZWVwOwogCi0JCWlmIChmb2xpb19jb250YWluX2h3cG9pc29uZWRfcGFnZShmb2xpbykpIHsKJiM0MzsJCWlmIChmb2xpb19oYXNfaHdwb2lzb25lZF9wYWdlKGZvbGlvKSkgewogCQkJLyoKIAkJCSAqIHVubWFwX3BvaXNvbmVkX2ZvbGlvKCkgY2FuJiMzOTt0IGhhbmRsZSBsYXJnZQogCQkJICogZm9saW8sIGp1c3Qgc2tpcCBpdC4gbWVtb3J5X2ZhaWx1cmUoKSB3aWxsCmRpZmYgLS1naXQgYS92aXJ0L2t2bS9ndWVzdF9tZW1mZC5jIGIvdmlydC9rdm0vZ3Vlc3RfbWVtZmQuYwppbmRleCBkYjU3YzU3NjZhYjYwNC4uOTRlZWRjYzdmMWE5ZTAgMTAwNjQ0Ci0tLSBhL3ZpcnQva3ZtL2d1ZXN0X21lbWZkLmMKJiM0MzsmIzQzOyYjNDM7IGIvdmlydC9rdm0vZ3Vlc3RfbWVtZmQuYwpAQCAtNzc0LDcgJiM0Mzs3NzQsNyBAQCBzdGF0aWMgc3RydWN0IGZvbGlvICpfX2t2bV9nbWVtX2dldF9wZm4oc3RydWN0IGZpbGUgKmZpbGUsCiAJaWYgKElTX0VSUihmb2xpbykpCiAJCXJldHVybiBmb2xpbzsKIAotCWlmIChmb2xpb190ZXN0X2h3cG9pc29uKGZvbGlvKSkgewomIzQzOwlpZiAoZm9saW9faGFzX2h3cG9pc29uZWRfcGFnZShmb2xpbykpIHsKIAkJZm9saW9fdW5sb2NrKGZvbGlvKTsKIAkJZm9saW9fcHV0KGZvbGlvKTsKIAkJcmV0dXJuIEVSUl9QVFIoLUVIV1BPSVNPTik7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI0IDE4OjQ2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0NzM0CgkJCQkJCQlvdXRwdXQ6IDIxCgkJCQkJCQl0aG91Z2h0czogODAwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgU3RyYXRlZ3kgZm9yIFRoaXMgS2VybmVsIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O3ZlIGdvdCB0aGlzIHBhdGNoIHNlcmllcyBpbiBmcm9udCBvZiBtZSwgYW5kIG15IGltbWVkaWF0ZSBjb25jZXJuIGlzIHdoZXRoZXIgaXQgaW50cm9kdWNlcyBuZXcgZnVuY3Rpb25hbGl0eSBvciBtb2RpZmllcyBleGlzdGluZyBjb2RlIGluIGEgd2F5IHRoYXQgd2FycmFudHMgdGFyZ2V0ZWQgZnV6emluZy4gSXQmIzM5O3MgY2xlYXJseSB0b3VjaGluZyBhIHNpZ25pZmljYW50IGNodW5rIG9mIHRoZSBrZXJuZWw6IGBmcy9odWdldGxiZnMvaW5vZGUuY2AsIHZhcmlvdXMgaW5jbHVkZSBmaWxlcyByZWxhdGVkIHRvIG1lbW9yeSBtYW5hZ2VtZW50LCBhbmQgc2V2ZXJhbCBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGZpbGVzIChgbW0vS2NvbmZpZ2AsIGBtbS9maWxlbWFwLmNgLCBldGMuKS4gTG9va3MgbGlrZSB0aGUgbWFpbiBmb2N1cyBpcyBhcm91bmQgaGFuZGxpbmcgSFdQT0lTT04gKGhhcmR3YXJlLWluamVjdGVkIHBvaXNvbikgd2l0aGluIGxhcmdlIGZvbGlvcywgc3BlY2lmaWNhbGx5IGluIGh1Z2V0bGJmcyBhbmQgZmlsZW1hcC4KClRoZSBtYWpvciBjaGFuZ2VzIGFyZSByZXBsYWNpbmcgYGh1Z2V0bGJmc19yZWFkX2l0ZXJgIHdpdGggYGdlbmVyaWNfZmlsZV9yZWFkX2l0ZXJgLCBtb2RpZnlpbmcgYGZpbGVtYXBfcmVhZGAgdG8gYWNjb3VudCBmb3IgaHdwb2lzb25lZCBwYWdlcyBieSBhZGRpbmcgYGFkanVzdF9yYW5nZV9od3BvaXNvbmAsIGFuZCBjaGFuZ2luZyBob3cgSFdQT0lTT04gaXMgdHJhY2tlZCB3aXRoaW4gZm9saW9zIHVzaW5nIGBmb2xpby0mZ3Q7aHVnZXRsYl9od3BvaXNvbmAuIFRoZXJlIGFyZSBhbHNvIHNvbWUgbmV3IGZ1bmN0aW9ucyBpbnRyb2R1Y2VkOiBgZm9saW9faGFzX2h3cG9pc29uZWRfcGFnZWAgYW5kIGBpc19yZWZfcGFnZV9od3BvaXNvbmAuCgpOb3csIHRoZSBjcnVjaWFsIHF1ZXN0aW9uIGlzLCBpcyB0aGlzIGNvZGUgcmVhY2hhYmxlIGFuZCBmdW5jdGlvbmFsPyBZZXMsIGl0JiMzOTtzIG1vZGlmeWluZyBmdW5kYW1lbnRhbCBtZW1vcnkgbWFuYWdlbWVudCBhbmQgaG93IGh1Z2V0bGJmcyByZWFkIG9wZXJhdGlvbnMgd29yaywgc28gd2UgbmVlZCB0byB0ZXN0IHRoaXMuIEFuZCB3aGF0IGFib3V0IHZpcnR1YWxpemF0aW9uPyBXZSBjYW4gdHJpZ2dlciBIV1BPSVNPTiB2aWEgYG1hZHZpc2UoTUFEVl9IV1BPSVNPTilgIG9yIHRocm91Z2ggZGVidWdmcywgc28gd2UgY2FuIHRlc3QgaXQgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudC4KCk5vdywgbGV0JiMzOTtzIG5haWwgZG93biB3aGF0IGZ1bmN0aW9ucyB0byBmb2N1cyBvbiBmb3IgZnV6emluZy4gYGZpbGVtYXBfcmVhZGAgaXMgYSBob3QtcGF0aCBmdW5jdGlvbiwgc28gaXQmIzM5O3MgYSBnb29kIGNhbmRpZGF0ZSwgYnV0IGBhZGp1c3RfcmFuZ2VfaHdwb2lzb25gIGlzIG5ldyBhbmQgc3BlY2lmaWMgdG8gdGhpcyBwYXRjaC4gV2FpdCBhIHNlY29uZCwgaXQmIzM5O3MgYSBzdGF0aWMgZnVuY3Rpb24gaW4gYG1tL2ZpbGVtYXAuY2AuIFRoYXQgbGltaXRzIGl0cyBkaXJlY3QgY2FsbCBzaXRlcy4gU28sIHdlJiMzOTtyZSBiZXR0ZXIgb2ZmIGZvY3VzaW5nIG9uIHRoZSBlbnRyeSBwb2ludHM6IGBodWdldGxiX3VwZGF0ZV9od3BvaXNvbmAsIGBodWdldGxiX3BhZ2VfaHdwb2lzb25gLCBgaHVnZXRsYl91bnJlZl9wYWdlX2h3cG9pc29uYCwgYHVucG9pc29uX21lbW9yeWAsIGFuZCBgZm9saW9fY2xlYXJfaHVnZXRsYl9od3BvaXNvbmAuIEFsdGhvdWdoIGBmaWxlbWFwX2dldF9yZWFkX2JhdGNoYCBhbmQgYGZpbGVtYXBfZ2V0X3BhZ2VzYCBhcmUgYWxzbyBtb2RpZmllZCwgdGhlc2UgYXJlIGhvdCBwYXRocywgc28gbm90IGhpZ2ggcHJpb3JpdHkuCgpTaW5jZSBgYWRqdXN0X3JhbmdlX2h3cG9pc29uYCBpcyBzdGF0aWMsIGxldCYjMzk7cyBjb25maXJtIHRoaXMgYnkgY2hlY2tpbmcgdGhlIGNvZGUuIFllcywgaXQgaXMgc3RhdGljLiBPa2F5LCBsZXQmIzM5O3MgbW92ZSBiYWNrIHRvIHRoZSBwcmV2aW91c2x5IG1lbnRpb25lZCBmdW5jdGlvbnM6IGBodWdldGxiX3VwZGF0ZV9od3BvaXNvbmAsIGBodWdldGxiX3BhZ2VfaHdwb2lzb25gLCBgaHVnZXRsYl91bnJlZl9wYWdlX2h3cG9pc29uYCwgYW5kIGB1bnBvaXNvbl9tZW1vcnlgLiBXZSBzaG91bGQgYWxzbyBpbmNsdWRlIHRoZSBgZm9saW9fY2xlYXJfaHVnZXRsYl9od3BvaXNvbmAgZnVuY3Rpb24uCgpGaW5hbGx5LCB3ZSBuZWVkIHRvIHRoaW5rIGFib3V0IGNvbmZpZ3VyYXRpb25zLiBgQ09ORklHX01FTU9SWV9GQUlMVVJFYCBpcyBjbGVhcmx5IHJlcXVpcmVkIGZvciBIV1BPSVNPTi4gYENPTkZJR19IVUdFVExCRlNgIGFuZCBgQ09ORklHX0hVR0VUTEJfUEFHRWAgYXJlIG5lY2Vzc2FyeSBmb3IgdGhlIGh1Z2V0bGJmcyBiaXRzLiBgQ09ORklHX0xBUkdFX0ZPTElPYCBpcyBhIGdpdmVuLCBhcyBpdCYjMzk7cyBzZWxlY3RlZCBieSBgSFVHRVRMQl9QQUdFYCBhbmQgYFRSQU5TUEFSRU5UX0hVR0VQQUdFYC4gQWgsIGJ1dCBJIG5lZWQgdG8gYmUgc3VyZSBhYm91dCBgQ09ORklHX0ZJTEVNQVBfTEFSR0VfRk9MSU9gLiBJdCYjMzk7cyB1c2VkIGluc3RlYWQgb2YgYENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRWAsIGFuZCB0aGF0JiMzOTtzIGNyaXRpY2FsLiBMZXQgbWUgY2hlY2sgdGhlIGtlcm5lbCBjb25maWcgZm9yIGBDT05GSUdfRklMRU1BUF9MQVJHRV9GT0xJT2AuIEkmIzM5O2xsIGdyZXAgZm9yIHRoYXQgcXVpY2tseSB0byBtYWtlIHN1cmUgaXQgZXhpc3RzIGFuZCB0aGF0IEkgdW5kZXJzdGFuZCB3aGVyZSBpdCYjMzk7cyBkZWZpbmVkLgoKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNCAxODo0NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtGSUxFTUFQX0xBUkdFX0ZPTElPJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvcGFnZW1hcC5oPTM3NT1zdGF0aWMgaW5saW5lIHZvaWQgbWFwcGluZ19zZXRfZ2ZwX21hc2soc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm0sIGdmcF90IG1hc2spXG4tLVxuaW5jbHVkZS9saW51eC9wYWdlbWFwLmgtMzg2LSAqL1xuaW5jbHVkZS9saW51eC9wYWdlbWFwLmg6Mzg3OiNpZmRlZiBDT05GSUdfRklMRU1BUF9MQVJHRV9GT0xJT1xuaW5jbHVkZS9saW51eC9wYWdlbWFwLmgtMzg4LSNkZWZpbmUgUFJFRkVSUkVEX01BWF9QQUdFQ0FDSEVfT1JERVJcdEhQQUdFX1BNRF9PUkRFUlxuLS1cbmluY2x1ZGUvbGludXgvcGFnZW1hcC5oPTQwNj1zdGF0aWMgaW5saW5lIHNpemVfdCBtYXBwaW5nX21heF9mb2xpb19zaXplX3N1cHBvcnRlZCh2b2lkKVxuaW5jbHVkZS9saW51eC9wYWdlbWFwLmgtNDA3LXtcbmluY2x1ZGUvbGludXgvcGFnZW1hcC5oOjQwODpcdGlmIChJU19FTkFCTEVEKENPTkZJR19GSUxFTUFQX0xBUkdFX0ZPTElPKSlcbmluY2x1ZGUvbGludXgvcGFnZW1hcC5oLTQwOS1cdFx0cmV0dXJuIDFVIFx1MDAzY1x1MDAzYyAoUEFHRV9TSElGVCAmIzQzOyBNQVhfUEFHRUNBQ0hFX09SREVSKTtcbi0tXG5pbmNsdWRlL2xpbnV4L3BhZ2VtYXAuaD00MzE9c3RhdGljIGlubGluZSB2b2lkIG1hcHBpbmdfc2V0X2ZvbGlvX29yZGVyX3JhbmdlKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxuLS1cbmluY2x1ZGUvbGludXgvcGFnZW1hcC5oLTQzMy17XG5pbmNsdWRlL2xpbnV4L3BhZ2VtYXAuaDo0MzQ6XHRpZiAoIUlTX0VOQUJMRUQoQ09ORklHX0ZJTEVNQVBfTEFSR0VfRk9MSU8pKVxuaW5jbHVkZS9saW51eC9wYWdlbWFwLmgtNDM1LVx0XHRyZXR1cm47XG4tLVxuaW5jbHVkZS9saW51eC9wYWdlbWFwLmg9NDY2PW1hcHBpbmdfbWF4X2ZvbGlvX29yZGVyKGNvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nKVxuaW5jbHVkZS9saW51eC9wYWdlbWFwLmgtNDY3LXtcbmluY2x1ZGUvbGludXgvcGFnZW1hcC5oOjQ2ODpcdGlmICghSVNfRU5BQkxFRChDT05GSUdfRklMRU1BUF9MQVJHRV9GT0xJTykpXG5pbmNsdWRlL2xpbnV4L3BhZ2VtYXAuaC00NjktXHRcdHJldHVybiAwO1xuLS1cbmluY2x1ZGUvbGludXgvcGFnZW1hcC5oPTQ3ND1tYXBwaW5nX21pbl9mb2xpb19vcmRlcihjb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZylcbmluY2x1ZGUvbGludXgvcGFnZW1hcC5oLTQ3NS17XG5pbmNsdWRlL2xpbnV4L3BhZ2VtYXAuaDo0NzY6XHRpZiAoIUlTX0VOQUJMRUQoQ09ORklHX0ZJTEVNQVBfTEFSR0VfRk9MSU8pKVxuaW5jbHVkZS9saW51eC9wYWdlbWFwLmgtNDc3LVx0XHRyZXR1cm4gMDtcbi0tXG5pbmNsdWRlL2xpbnV4L3BhZ2VtYXAuaD01MTI9c3RhdGljIGlubGluZSBib29sIG1hcHBpbmdfbGFyZ2VfZm9saW9fc3VwcG9ydChjb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZylcbi0tXG5pbmNsdWRlL2xpbnV4L3BhZ2VtYXAuaC01MzEtICovXG5pbmNsdWRlL2xpbnV4L3BhZ2VtYXAuaDo1MzI6I2lmZGVmIENPTkZJR19GSUxFTUFQX0xBUkdFX0ZPTElPXG5pbmNsdWRlL2xpbnV4L3BhZ2VtYXAuaC01MzMtc3RhdGljIGlubGluZSBib29sIG1hcHBpbmdfcG1kX2ZvbGlvX3N1cHBvcnQoY29uc3Qgc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjQgMTg6NDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTY5ODkKCQkJCQkJCW91dHB1dDogMjIKCQkJCQkJCXRob3VnaHRzOiA1NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duIG1lbnRhbCBwcm9jZXNzOgoKKipJbnZlc3RpZ2F0aW5nIHRoZSBNaXNzaW5nIERlZmluaXRpb24qKgoKSG1tLCBgQ09ORklHX0ZJTEVNQVBfTEFSR0VfRk9MSU9gLi4uIEl0JiMzOTtzIGxvb2tpbmcgbGlrZSB0aGlzIHN5bWJvbCBpc24mIzM5O3QgZGVmaW5lZCB3aGVyZSBJIGV4cGVjdGVkIGl0IHRvIGJlLCBvciBwZXJoYXBzIGl0JiMzOTtzIHNpbXBseSBub3QgcHJlc2VudCBpbiB0aGlzIHBhcnRpY3VsYXIgcGF0Y2guIEJlZm9yZSBJIGp1bXAgdG8gY29uY2x1c2lvbnMsIEkgbmVlZCB0byB2ZXJpZnkgaXRzIGF2YWlsYWJpbGl0eS4gUmlnaHQsIHRoZSBzdGFuZGFyZCBwbGFjZXMgdG8gY2hlY2sgZm9yIHRoZXNlIHNvcnRzIG9mIGNvbmZpZ3VyYXRpb25zIGFyZSB0aGUga2VybmVsJiMzOTtzIEtjb25maWcgZmlsZXMuIFNwZWNpZmljYWxseSwgSSBzaG91bGQgbG9vayBpbiBgbW0vS2NvbmZpZ2AsIGFzIGl0IHNlZW1zIG1lbW9yeSBtYW5hZ2VtZW50IHJlbGF0ZWQsIGFuZCBhbHNvIGNvbnNpZGVyIGBmcy9LY29uZmlnYCBzaW5jZSBpdCYjMzk7cyBhYm91dCBmaWxlIHN5c3RlbXMuIExldCYjMzk7cyBzdGFydCB0aGVyZSBhbmQgc2VlIGlmIEkgY2FuIGZpbmQgd2hlcmUgYEZJTEVNQVBfTEFSR0VfRk9MSU9gIGlzIGNvbnRyb2xsZWQuIEkgbmVlZCB0byBrbm93ICp3aHkqIGl0IGlzIG9yIGlzbiYjMzk7dCBhdmFpbGFibGUgYmVmb3JlIEkgY2FuIHByb2NlZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjQgMTg6NDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgRklMRU1BUF9MQVJHRV9GT0xJTyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjQgMTg6NDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTcyNjYKCQkJCQkJCW91dHB1dDogMTkKCQkJCQkJCXRob3VnaHRzOiAxNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIHNlZS4uLgoKKipDaGVja2luZyB0aGUgS2NvbmZpZyBmb3IgYExBUkdFX0ZPTElPYCoqCgpBbHJpZ2h0LCBteSBmaXJzdCB0aG91Z2h0IGlzIHRvIGRpZyBpbnRvIHRoZSBgbW0vS2NvbmZpZ2AgZmlsZS4gSSYjMzk7bSBnb2luZyB0byBxdWlja2x5IGNoZWNrIGlmIGBMQVJHRV9GT0xJT2AgaXMgZGVmaW5lZCB0aGVyZS4gVGhhdCYjMzk7cyB0aGUgbG9naWNhbCBzdGFydGluZyBwb2ludCBmb3IgdW5kZXJzdGFuZGluZyBob3cgdGhpcyBmZWF0dXJlIGlzIGNvbmZpZ3VyZWQgd2l0aGluIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0uIEkgbmVlZCB0byBzZWUgdGhlIGRlcGVuZGVuY2llcywgaGVscCB0ZXh0LCBhbmQgZGVmYXVsdCBzZXR0aW5ncyAtIGFsbCB0aGUgdXN1YWwgS2NvbmZpZyBnb29kaWVzLiBUaGlzIGluaXRpYWwgY2hlY2sgd2lsbCBnaXZlIG1lIGEgZ29vZCBsYXkgb2YgdGhlIGxhbmQgYW5kIHBvaW50IG1lIGluIHRoZSByaWdodCBkaXJlY3Rpb24uIE5vIHBvaW50IGluIHdhbmRlcmluZyBhaW1sZXNzbHk7IGxldCYjMzk7cyBnZXQgYSBiYXNlbGluZSB1bmRlcnN0YW5kaW5nIG9mIGBMQVJHRV9GT0xJT2AgZnJvbSB0aGUgc291cmNlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI0IDE4OjQ2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBMQVJHRV9GT0xJTyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9LY29uZmlnPTg0Mz1jb25maWcgTU1fSURcbi0tXG5tbS9LY29uZmlnLTg0NS1cbm1tL0tjb25maWc6ODQ2OmNvbmZpZyBMQVJHRV9GT0xJT1xubW0vS2NvbmZpZy04NDctXHRkZWZfYm9vbCBuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjQgMTg6NDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTc1MTUKCQkJCQkJCW91dHB1dDogMTkKCQkJCQkJCXRob3VnaHRzOiAyOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIGRlbGl2ZXJlZCBhcyBhIGZpcnN0LXBlcnNvbiBzdW1tYXJ5OgoKKipLZXJuZWwgTWVtb3J5IE1hbmFnZW1lbnQgQ29uc2lkZXJhdGlvbnMqKgoKT2theSwgc28gSSBzZWUgdGhhdCB0aGUgYExBUkdFX0ZPTElPYCBvcHRpb24gaGFzIGJlZW4gaW50cm9kdWNlZCB3aXRoaW4gdGhlIGBtbS9LY29uZmlnYCBmaWxlLiBUaGF0JiMzOTtzIGdvb2QsIHRoYXQmIzM5O3Mgd2hhdCBJIHdhcyBleHBlY3RpbmcgdG8gZmluZC4gQnV0IHdhaXQsIGEgbGl0dGxlIGZsYWcganVzdCB3ZW50IG9mZiBpbiBteSBoZWFkLiBXaGVuZXZlciBJIHNlZSB0aGVzZSBtZW1vcnkgbWFuYWdlbWVudCBhZGRpdGlvbnMsIG15IGltbWVkaWF0ZSB0aG91Z2h0IGlzICphbHdheXMqIGFib3V0IGhvdyBpdCBpbnRlcmFjdHMgd2l0aCBlcnJvciBoYW5kbGluZy4gU3BlY2lmaWNhbGx5LCBob3cgZG9lcyB0aGlzIGludGVycGxheSB3aXRoIGBNRU1PUllfRkFJTFVSRWA/IEl0JiMzOTtzIGEgY3JpdGljYWwgY29tcG9uZW50IGluIGVuc3VyaW5nIHN5c3RlbSBzdGFiaWxpdHkgd2hlbiB0aGluZ3MgZ28gc2lkZXdheXMgd2l0aCBtZW1vcnkgYWxsb2NhdGlvbiwgYW5kIEkgbmVlZCB0byBjb25zaWRlciBob3cgdGhpcyBuZXcgZmVhdHVyZSBpbnRlZ3JhdGVzIHdpdGggdGhvc2UgZXhpc3Rpbmcgc2FmZWd1YXJkcy4gSXMgdGhlcmUgZXhwbGljaXQgaGFuZGxpbmcgb2YgYExBUkdFX0ZPTElPYCBhbGxvY2F0aW9uIGZhaWx1cmVzLCBvciBkb2VzIGl0IGZhbGwgYmFjayB0byBzb21lIGdlbmVyaWMgc3RyYXRlZ3k/IEkgbmVlZCB0byBjaGVjayB0aGUgS2NvbmZpZyYjMzk7cyBzdXJyb3VuZGluZyBjb2RlIGFuZCB0aGUgdXNhZ2UgcGF0dGVybnMgdG8gbWFrZSBzdXJlIHRoaXMgZG9lc24mIzM5O3QgaW50cm9kdWNlIGFueSBzdWJ0bGUgcmVncmVzc2lvbnMgb3IgYmxpbmQgc3BvdHMgaW4gdGhlIG1lbW9yeSBmYWlsdXJlIGhhbmRsaW5nIHBhdGguCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI0IDE4OjQ2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBNRU1PUllfRkFJTFVSRSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9LY29uZmlnPTc3ND1jb25maWcgQVJDSF9TVVBQT1JUU19NRU1PUllfRkFJTFVSRVxuLS1cbm1tL0tjb25maWctNzc2LVxubW0vS2NvbmZpZzo3Nzc6Y29uZmlnIE1FTU9SWV9GQUlMVVJFXG5tbS9LY29uZmlnLTc3OC1cdGRlcGVuZHMgb24gTU1VXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI0IDE4OjQ2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3ODU0CgkJCQkJCQlvdXRwdXQ6IDE5CgkJCQkJCQl0aG91Z2h0czogMzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHByZXNlbnRlZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3MsIGdpdmVuIG15IGV4cGVydGlzZToKCioqQ2hlY2tpbmcgSGFyZHdhcmUgUG9pc29uIENvbmZpZ3VyYXRpb24qKgoKQWxyaWdodCwgbGV0IG1lIHF1aWNrbHkgcGFyc2UgdGhpcy4gYE1FTU9SWV9GQUlMVVJFYCAtIGFoIHllcywgdGhhdCYjMzk7cyB0aGUgY29uZmlndXJhdGlvbiBvcHRpb24gd2UgdXNlIHRvIGVuYWJsZSBoYXJkd2FyZSBwb2lzb24gaGFuZGxpbmcuIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhlIHN5c3RlbSBpcyBiZWhhdmluZyBhcyBleHBlY3RlZCB3aXRoIHJlc3BlY3QgdG8gdGhhdC4gTXkgbmV4dCBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byBjaGVjayByZWxhdGVkIG1lbW9yeSBmZWF0dXJlcy4gTXkgZXhwZXJ0aXNlIGlzIHRoYXQgdGhlIHN5c3RlbSYjMzk7cyByZWFjdGlvbiB0byBoYXJkd2FyZSBlcnJvcnMgaXMgaW1wYWN0ZWQgYnkgc2V2ZXJhbCBjb25maWd1cmF0aW9uIGFuZCBydW50aW1lIG9wdGlvbnMuIFRodXMgSSYjMzk7bGwgbm93IHF1aWNrbHkgZHJpbGwgZG93biBvbiBgSFVHRVRMQkZTYCBhbmQgYEhVR0VUTEJfUEFHRWAuIEkgd2FudCB0byBpbW1lZGlhdGVseSB1bmRlcnN0YW5kIHRoZSBpbnRlcmFjdGlvbiBiZXR3ZWVuIHRob3NlIHNldHRpbmdzIGFuZCBob3cgaGFyZHdhcmUgZXJyb3JzIGFyZSBoYW5kbGVkIGluIHRoaXMgcGFydGljdWxhciBjb25maWd1cmF0aW9uLiBFc3NlbnRpYWxseSwgSSYjMzk7bSB0cnlpbmcgdG8gcXVpY2tseSBlc3RhYmxpc2ggYSBiYXNlbGluZSBvciBwaW5wb2ludCBhbnkgcG90ZW50aWFsIGNvbmZsaWN0cyBvciBhcmVhcyB0aGF0IHJlcXVpcmUgc3BlY2lhbCBhdHRlbnRpb24gcmVsYXRlZCB0byBob3cgbGFyZ2UgcGFnZXMsIGFuZCB0aGUgbGFyZ2UgcGFnZSBmaWxlIHN5c3RlbSwgYXJlIGludm9sdmVkIGluIG1lbW9yeSBlcnJvciBoYW5kbGluZy4gVGhlIGZpcnN0IHN0ZXAgd2lsbCBiZSBjaGVja2luZyB0aGVpciBzdGF0ZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI0IDE4OjQ2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBIVUdFVExCRlMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvS2NvbmZpZz0yNDc9Y29uZmlnIEFSQ0hfU1VQUE9SVFNfSFVHRVRMQkZTXG4tLVxuZnMvS2NvbmZpZy0yNDktXG5mcy9LY29uZmlnOjI1MDptZW51Y29uZmlnIEhVR0VUTEJGU1xuZnMvS2NvbmZpZy0yNTEtXHRib29sIFwmIzM0O0h1Z2VUTEIgZmlsZSBzeXN0ZW0gc3VwcG9ydFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNCAxODo0NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODE5MAoJCQkJCQkJb3V0cHV0OiA0NgoJCQkJCQkJdGhvdWdodHM6IDIxOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgSHVnZSBQYWdlIFBvaXNvbmluZyBpbiB0aGUgS2VybmVsKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBtZW1vcnkgZmFpbHVyZSBzY2VuYXJpb3MgcmVsYXRlZCB0byBodWdlIHBhZ2VzLiBNeSBpbml0aWFsIGZvY3VzIGlzIG9uIHRoZSBjb25maWd1cmF0aW9uczogYE1FTU9SWV9GQUlMVVJFYCwgYEhVR0VUTEJGU2AsIGFuZCBgSFVHRVRMQl9QQUdFYC4gUmlnaHQsIGFuZCBJIHNlZSBgTEFSR0VfRk9MSU9gIGlzIGJlaW5nIHNlbGVjdGVkIGJ5IGJvdGggYEhVR0VUTEJfUEFHRWAgYW5kIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAsIHdoaWNoIHNlZW1zIGNvcnJlY3QuCgpOb3csIEkgbmVlZCB0byBwaW5wb2ludCB0aGUgcmVsZXZhbnQgc3ltYm9scy4gTGV0JiMzOTtzIHNlZS4uLiBJIGhhdmUgYGh1Z2V0bGJfdXBkYXRlX2h3cG9pc29uYCwgYGh1Z2V0bGJfcGFnZV9od3BvaXNvbmAsIGBodWdldGxiX3VucmVmX3BhZ2VfaHdwb2lzb25gLCBgdW5wb2lzb25fbWVtb3J5YCwgYW5kIGBmb2xpb19jbGVhcl9odWdldGxiX2h3cG9pc29uYC4gVGhvc2Ugc2VlbSBsaWtlIHRoZXkmIzM5O3JlIGRpcmVjdGx5IHJlbGF0ZWQgdG8gdGhlIGhhcmR3YXJlIHBvaXNvbmluZyBhc3BlY3Qgb2YgaHVnZSBwYWdlcy4gSSYjMzk7bSBhbHNvIG5vdGluZyBgYWRqdXN0X3JhbmdlX2h3cG9pc29uYCwgd2hpY2ggaXMgc3RhdGljLCBzbyB0aGF0JiMzOTtzIHByb2JhYmx5IG5vdCBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQsIGFsdGhvdWdoIGl0JiMzOTtzIHJlbGF0ZWQuIEkgY29uc2lkZXJlZCBgZmlsZW1hcF9yZWFkYCwgc2luY2UgdGhhdCYjMzk7cyBhIGhvdCBwYXRoLCBidXQgaXQmIzM5O3MgcHJvYmFibHkgdG9vIGdlbmVyYWwuIE1heWJlIGBodWdldGxiZnNfaW5pdF9yZWd1bGFyX2lub2RlYD8gVGhhdCYjMzk7cyBhbHNvIHN0YXRpYywgc28gcHJvYmFibHkgbm90IHRoZSBiZXN0IHNwb3QgdG8gc3RhcnQgZWl0aGVyLiBMZXQgbWUgY29uc2lkZXIgYGh1Z2V0bGJfZm9saW9fbWFwcGluZ19sb2NrX3dyaXRlYC4gVGhhdCBzb3VuZHMgbGlrZSBpdCBjb3VsZCBiZSByZWxldmFudCwgc2luY2Ugd2UgYXJlIHRhbGtpbmcgYWJvdXQgbWVtb3J5IGZhaWx1cmVzLgoKQWxyaWdodCwgdGhlIG5leHQgdGhpbmcgaXMgdG8gZGl2ZSBpbnRvIGBtbS9tZW1vcnktZmFpbHVyZS5jYCB0byBzZWUgaWYgdGhlcmUgYXJlIGFueSB1c2VmdWwgZXhwb3J0ZWQgb3Igbm9uLXN0YXRpYyBmdW5jdGlvbnMgd2l0aGluIHRoYXQgZmlsZS4gVGhhdCBzaG91bGQgZ2l2ZSBtZSBhIGJldHRlciB2aWV3IG9mIHdoZXJlIEkgY2FuIG1ha2UgYW4gaW1wYWN0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNCAxODo0NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDteKFthLXpfXSYjNDM7ICkmIzQzO2h1Z2V0bGJfW2Etel9dJiM0MztcXCgmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9tZW1vcnktZmFpbHVyZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL21lbW9yeS1mYWlsdXJlLmM9MTgyMD1zdGF0aWMgYm9vbCBwcmVjaXNlX3BhZ2VfcG9pc29uZWQoY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbyxcbi0tXG5tbS9tZW1vcnktZmFpbHVyZS5jLTE4NDMtICovXG5tbS9tZW1vcnktZmFpbHVyZS5jOjE4NDQ6Ym9vbCBodWdldGxiX3BhZ2VfaHdwb2lzb24oY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbywgY29uc3Qgc3RydWN0IHBhZ2UgKnBhZ2UpXG5tbS9tZW1vcnktZmFpbHVyZS5jLTE4NDUte1xuLS1cbm1tL21lbW9yeS1mYWlsdXJlLmMtMTg1NS0gKi9cbm1tL21lbW9yeS1mYWlsdXJlLmM6MTg1Njpib29sIGh1Z2V0bGJfdW5yZWZfcGFnZV9od3BvaXNvbihjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSlcbm1tL21lbW9yeS1mYWlsdXJlLmMtMTg1Ny17XG4tLVxubW0vbWVtb3J5LWZhaWx1cmUuYz0xODc1PXN0YXRpYyB1bnNpZ25lZCBsb25nIF9fZm9saW9fZnJlZV9yYXdfaHdwKHN0cnVjdCBmb2xpbyAqZm9saW8sIGJvb2wgbW92ZV9mbGFnKVxuLS1cbm1tL21lbW9yeS1mYWlsdXJlLmMtMTg5OS1cbm1tL21lbW9yeS1mYWlsdXJlLmM6MTkwMDpzdGF0aWMgaW5saW5lIGludCBodWdldGxiX3NldF9wb2lzb24oc3RydWN0IGZvbGlvICpmb2xpbylcbm1tL21lbW9yeS1mYWlsdXJlLmMtMTkwMS17XG4tLVxubW0vbWVtb3J5LWZhaWx1cmUuYy0xOTA3LVxubW0vbWVtb3J5LWZhaWx1cmUuYzoxOTA4OnN0YXRpYyBpbmxpbmUgaW50IGh1Z2V0bGJfY2xlYXJfcG9pc29uKHN0cnVjdCBmb2xpbyAqZm9saW8pXG5tbS9tZW1vcnktZmFpbHVyZS5jLTE5MDkte1xuLS1cbm1tL21lbW9yeS1mYWlsdXJlLmMtMTkxOS0gKi9cbm1tL21lbW9yeS1mYWlsdXJlLmM6MTkyMDpzdGF0aWMgaW50IGh1Z2V0bGJfdXBkYXRlX2h3cG9pc29uKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBwYWdlICpwYWdlKVxubW0vbWVtb3J5LWZhaWx1cmUuYy0xOTIxLXtcbi0tXG5tbS9tZW1vcnktZmFpbHVyZS5jPTIxMzM9c3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGZvbGlvX2ZyZWVfcmF3X2h3cChzdHJ1Y3QgZm9saW8gKmZvbGlvLCBib29sIGZsYWcpXG4tLVxubW0vbWVtb3J5LWZhaWx1cmUuYy0yMTM3LVxubW0vbWVtb3J5LWZhaWx1cmUuYzoyMTM4OnN0YXRpYyBpbmxpbmUgaW50IGh1Z2V0bGJfY2xlYXJfcG9pc29uKHN0cnVjdCBmb2xpbyAqZm9saW8pXG5tbS9tZW1vcnktZmFpbHVyZS5jLTIxMzkte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNCAxODo0NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTI5OQoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDQwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIGNoYW5nZXMgSSYjMzk7bSBzZWVpbmc6CgoqKkFuYWx5emluZyBSZWNlbnQgQ29kZSBNb2RpZmljYXRpb25zIGluIHRoZSBIdWdlVExCIFN1YnN5c3RlbSoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgYnJlYWsgZG93biB0aGVzZSBjb2RlIGNoYW5nZXMuIEZpcnN0LCBpdCBsb29rcyBsaWtlIGBodWdldGxiX3BhZ2VfaHdwb2lzb25gIGFuZCBgaHVnZXRsYl91bnJlZl9wYWdlX2h3cG9pc29uYCBhcmUgbm93IGV4cG9zZWQgYmV5b25kIHRoZWlyIHByZXZpb3VzIHNjb3BlIOKAkyB0aGV5JiMzOTtyZSBub3Qgc3RhdGljIGFueW1vcmUuIFRoYXQmIzM5O3MgYSBzaWduaWZpY2FudCBzaGlmdC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIHdoYXQgYXJlIHRoZSBpbXBsaWNhdGlvbnMgZm9yIGhvdyBvdGhlciBtb2R1bGVzIG9yIGZ1bmN0aW9ucyB3aWxsIGludGVyYWN0IHdpdGggdGhlbT8gQXJlIHdlIHNlZWluZyBhIG1vdmUgdG93YXJkcyBhIG1vcmUgZ2VuZXJhbCBoYXJkd2FyZSBwb2lzb24gaGFuZGxpbmcgc3RyYXRlZ3ksIG9yIGFyZSB0aGVzZSBmdW5jdGlvbnMgYmVpbmcgcmVwdXJwb3NlZCBmb3Igc29tZXRoaW5nIHNwZWNpZmljIHdpdGhpbiB0aGUgTlVNQSBhcmNoaXRlY3R1cmUgb2YgdGhlIEh1Z2VUTEIgc3lzdGVtPyBJIG5lZWQgdG8gZGlnIGludG8gdGhlIGNhbGwgc2l0ZXMgdG8gdW5kZXJzdGFuZCB0aGUgbmV3IGRlcGVuZGVuY2llcyB0aGF0IGFyZSBiZWluZyBpbnRyb2R1Y2VkLgoKQWxzbywgYHVucG9pc29uX21lbW9yeWAgaGFzIGFsc28gYmVlbiB0b3VjaGVkLiBUaGlzIGlzIGludGVyZXN0aW5nLiBXaGF0JiMzOTtzIHRoZSBuYXR1cmUgb2YgdGhlIG1vZGlmaWNhdGlvbj8gSXMgaXQgYSBjaGFuZ2UgdG8gdGhlIHVucG9pc29uaW5nIGFsZ29yaXRobSBpdHNlbGYsIGFuIGV4cGFuc2lvbiBvZiBpdHMgY2FwYWJpbGl0aWVzLCBvciBwZXJoYXBzIGEgbW9kaWZpY2F0aW9uIG9mIHRoZSBlcnJvciByZXBvcnRpbmcgb3IgbG9nZ2luZz8gSSYjMzk7bGwgbmVlZCB0byBjYXJlZnVsbHkgcmV2aWV3IHRoZSBkaWZmIHRvIHVuZGVyc3RhbmQgd2hhdCB0aGUgaW50ZW50IG9mIHRoZSBjaGFuZ2UgaXMuIEkgbmVlZCB0byBrZWVwIGluIG1pbmQsIHNwZWNpZmljYWxseSwgdGhhdCB1bnBvaXNvbmluZyBpcyBhIHBlcmZvcm1hbmNlLWNyaXRpY2FsIGZ1bmN0aW9uIGFuZCBhbnkgY2hhbmdlcyB0byBpdCBjb3VsZCBoYXZlIHNpZ25pZmljYW50IHJhbWlmaWNhdGlvbnMgb24gdGhlIG92ZXJhbGwgc3lzdGVtJiMzOTtzIHN0YWJpbGl0eSwgZXNwZWNpYWxseSBpZiBpdCBpcyBjaGFuZ2VkIGluIGEgbm9uLW9idmlvdXMgd2F5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNCAxODo0NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDteaW50IHVucG9pc29uX21lbW9yeVxcKCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL21lbW9yeS1mYWlsdXJlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vbWVtb3J5LWZhaWx1cmUuYz0yNjgwPWNvcmVfaW5pdGNhbGwobWVtb3J5X2ZhaWx1cmVfaW5pdCk7XG4tLVxubW0vbWVtb3J5LWZhaWx1cmUuYy0yNzAxLSAqL1xubW0vbWVtb3J5LWZhaWx1cmUuYzoyNzAyOmludCB1bnBvaXNvbl9tZW1vcnkodW5zaWduZWQgbG9uZyBwZm4pXG5tbS9tZW1vcnktZmFpbHVyZS5jLTI3MDMte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNCAxODo0NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTc1NAoJCQkJCQkJb3V0cHV0OiA0NgoJCQkJCQkJdGhvdWdodHM6IDE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIG1tL2h1Z2V0bGIuYyBmb3IgQ2x1ZXMqKgoKT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCYjMzk7cyBiZWVuIGNoYW5nZWQgaW4gdGhlIGh1Z2UgcGFnZXMgY29kZS4gTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gZGl2ZSBkaXJlY3RseSBpbnRvIGBtbS9odWdldGxiLmNgLiBJdCYjMzk7cyB0aGUgY2VudHJhbCBodWIgZm9yIGhhbmRsaW5nIGh1Z2UgcGFnZSBtYW5hZ2VtZW50LCBzbyBhbnkgbW9kaWZpY2F0aW9ucyByZWxhdGVkIHRvIHBlcmZvcm1hbmNlIG9yIG5ldyBmZWF0dXJlcyBhcmUgbGlrZWx5IHRvIGJlIHJlZmxlY3RlZCB0aGVyZS4gSSYjMzk7bSBnb2luZyB0byBsb29rIGZvciB0aGUga2V5IGZ1bmN0aW9ucyB0aGF0IGhhdmUgYmVlbiB0b3VjaGVkIHNpbmNlIHdoYXRldmVyIHRoZSBiYXNlbGluZSBpcyDigJMgcHJvYmFibHkgYSBwcmV2aW91cyBrZXJuZWwgdmVyc2lvbiBvciBhIHNwZWNpZmljIGNvbW1pdC4gVGhpcyB3aWxsIGxldCBtZSBxdWlja2x5IHBpbnBvaW50IHRoZSBjb2RlIHJlc3BvbnNpYmxlIGZvciB0aGUgYmVoYXZpb3IgSSYjMzk7bSBpbnZlc3RpZ2F0aW5nLiBJIGV4cGVjdCB0byBiZSBsb29raW5nIGF0IHRoaW5ncyBsaWtlIHBhZ2UgYWxsb2NhdGlvbiwgZGVhbGxvY2F0aW9uLCBtYXBwaW5nLCB1bm1hcHBpbmcsIGFuZCBhbnkgcmVsYXRlZCBsb2NraW5nIG9yIE5VTUEtYXdhcmVuZXNzIG1lY2hhbmlzbXMuIFRoZSBkaWZmcyB3aWxsIGJlIHRoZSBjcnVjaWFsIHBhcnQsIG9mIGNvdXJzZS4gTGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIGNoYW5nZWQgYW5kIHdoYXQgaXQgdGVsbHMgdXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI0IDE4OjQ3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O14oW2Etel9dJiM0MzsgKSYjNDM7aHVnZXRsYl9bYS16X10mIzQzO1xcKCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL2h1Z2V0bGIuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9odWdldGxiLmM9OTI9c3RhdGljIGludCBodWdldGxiX3BhcmFtX2luZGV4IF9faW5pdGRhdGE7XG5tbS9odWdldGxiLmM6OTM6c3RhdGljIF9faW5pdCBpbnQgaHVnZXRsYl9hZGRfcGFyYW0oY2hhciAqcywgaW50ICgqc2V0dXApKGNoYXIgKnZhbCkpO1xubW0vaHVnZXRsYi5jOjk0OnN0YXRpYyBfX2luaXQgdm9pZCBodWdldGxiX3BhcnNlX3BhcmFtcyh2b2lkKTtcbm1tL2h1Z2V0bGIuYy05NS1cbi0tXG5tbS9odWdldGxiLmM9MTE0PXN0cnVjdCBtdXRleCAqaHVnZXRsYl9mYXVsdF9tdXRleF90YWJsZSBfX3JvX2FmdGVyX2luaXQ7XG4tLVxubW0vaHVnZXRsYi5jLTExNi0vKiBGb3J3YXJkIGRlY2xhcmF0aW9uICovXG5tbS9odWdldGxiLmM6MTE3OnN0YXRpYyBpbnQgaHVnZXRsYl9hY2N0X21lbW9yeShzdHJ1Y3QgaHN0YXRlICpoLCBsb25nIGRlbHRhKTtcbm1tL2h1Z2V0bGIuYzoxMTg6c3RhdGljIHZvaWQgaHVnZXRsYl92bWFfbG9ja19mcmVlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKTtcbm1tL2h1Z2V0bGIuYzoxMTk6c3RhdGljIHZvaWQgaHVnZXRsYl92bWFfbG9ja19hbGxvYyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSk7XG5tbS9odWdldGxiLmMtMTIwLXN0YXRpYyB2b2lkIF9faHVnZXRsYl92bWFfdW5sb2NrX3dyaXRlX2ZyZWUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpO1xubW0vaHVnZXRsYi5jPTEyMT1zdGF0aWMgaW50IF9faHVnZV9wbWRfdW5zaGFyZShzdHJ1Y3QgbW11X2dhdGhlciAqdGxiLFxuLS1cbm1tL2h1Z2V0bGIuYy0xMjMtXHRcdGJvb2wgY2hlY2tfbG9ja3MpO1xubW0vaHVnZXRsYi5jOjEyNDpzdGF0aWMgdm9pZCBodWdldGxiX3Vuc2hhcmVfcG1kcyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbm1tL2h1Z2V0bGIuYy0xMjUtXHRcdHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLCBib29sIHRha2VfbG9ja3MpO1xuLS1cbm1tL2h1Z2V0bGIuYz0yNzg9c3RhdGljIGlubGluZSBzdHJ1Y3QgaHVnZXBhZ2Vfc3VicG9vbCAqc3VicG9vbF92bWEoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXG4tLVxubW0vaHVnZXRsYi5jLTI4NS0gKi9cbm1tL2h1Z2V0bGIuYzoyODY6dm9pZCBodWdldGxiX3ZtYV9sb2NrX3JlYWQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXG5tbS9odWdldGxiLmMtMjg3LXtcbi0tXG5tbS9odWdldGxiLmMtMjk4LVxubW0vaHVnZXRsYi5jOjI5OTp2b2lkIGh1Z2V0bGJfdm1hX3VubG9ja19yZWFkKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxubW0vaHVnZXRsYi5jLTMwMC17XG4tLVxubW0vaHVnZXRsYi5jLTMxMS1cbm1tL2h1Z2V0bGIuYzozMTI6dm9pZCBodWdldGxiX3ZtYV9sb2NrX3dyaXRlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxubW0vaHVnZXRsYi5jLTMxMy17XG4tLVxubW0vaHVnZXRsYi5jLTMyNC1cbm1tL2h1Z2V0bGIuYzozMjU6dm9pZCBodWdldGxiX3ZtYV91bmxvY2tfd3JpdGUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXG5tbS9odWdldGxiLmMtMzI2LXtcbi0tXG5tbS9odWdldGxiLmMtMzM3LVxubW0vaHVnZXRsYi5jOjMzODppbnQgaHVnZXRsYl92bWFfdHJ5bG9ja193cml0ZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcbm1tL2h1Z2V0bGIuYy0zMzkte1xuLS1cbm1tL2h1Z2V0bGIuYy0zNTMtXG5tbS9odWdldGxiLmM6MzU0OnZvaWQgaHVnZXRsYl92bWFfYXNzZXJ0X2xvY2tlZChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcbm1tL2h1Z2V0bGIuYy0zNTUte1xuLS1cbm1tL2h1Z2V0bGIuYy0zNjYtXG5tbS9odWdldGxiLmM6MzY3OnZvaWQgaHVnZXRsYl92bWFfbG9ja19yZWxlYXNlKHN0cnVjdCBrcmVmICprcmVmKVxubW0vaHVnZXRsYi5jLTM2OC17XG4tLVxubW0vaHVnZXRsYi5jPTM5MD1zdGF0aWMgdm9pZCBfX2h1Z2V0bGJfdm1hX3VubG9ja193cml0ZV9mcmVlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxuLS1cbm1tL2h1Z2V0bGIuYy00MDMtXG5tbS9odWdldGxiLmM6NDA0OnN0YXRpYyB2b2lkIGh1Z2V0bGJfdm1hX2xvY2tfZnJlZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcbm1tL2h1Z2V0bGIuYy00MDUte1xuLS1cbm1tL2h1Z2V0bGIuYy00MTktXG5tbS9odWdldGxiLmM6NDIwOnN0YXRpYyB2b2lkIGh1Z2V0bGJfdm1hX2xvY2tfYWxsb2Moc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXG5tbS9odWdldGxiLmMtNDIxLXtcbi0tXG5tbS9odWdldGxiLmM9ODUzPXN0YXRpYyBsb25nIHJlZ2lvbl9kZWwoc3RydWN0IHJlc3ZfbWFwICpyZXN2LCBsb25nIGYsIGxvbmcgdClcbi0tXG5tbS9odWdldGxiLmMtOTU1LSAqL1xubW0vaHVnZXRsYi5jOjk1Njp2b2lkIGh1Z2V0bGJfZml4X3Jlc2VydmVfY291bnRzKHN0cnVjdCBpbm9kZSAqaW5vZGUpXG5tbS9odWdldGxiLmMtOTU3LXtcbi0tXG5tbS9odWdldGxiLmM9MTE3MT1ib29sIF9fdm1hX3ByaXZhdGVfbG9jayhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcbi0tXG5tbS9odWdldGxiLmMtMTE3Ny1cbm1tL2h1Z2V0bGIuYzoxMTc4OnZvaWQgaHVnZXRsYl9kdXBfdm1hX3ByaXZhdGUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXG5tbS9odWdldGxiLmMtMTE3OS17XG4tLVxubW0vaHVnZXRsYi5jPTMwODA9aW50IF9fYWxsb2NfYm9vdG1lbV9odWdlX3BhZ2Uoc3RydWN0IGhzdGF0ZSAqaCwgaW50IG5pZClcbi0tXG5tbS9odWdldGxiLmMtMzExNy0vKiBJbml0aWFsaXplIFtzdGFydF9wYWdlOmVuZF9wYWdlX251bWJlcl0gdGFpbCBzdHJ1Y3QgcGFnZXMgb2YgYSBodWdlcGFnZSAqL1xubW0vaHVnZXRsYi5jOjMxMTg6c3RhdGljIHZvaWQgX19pbml0IGh1Z2V0bGJfZm9saW9faW5pdF90YWlsX3ZtZW1tYXAoc3RydWN0IGZvbGlvICpmb2xpbyxcbm1tL2h1Z2V0bGIuYy0zMTE5LVx0XHRcdFx0XHRzdHJ1Y3QgaHN0YXRlICpoLFxuLS1cbm1tL2h1Z2V0bGIuYy0zMTQwLVxubW0vaHVnZXRsYi5jOjMxNDE6c3RhdGljIHZvaWQgX19pbml0IGh1Z2V0bGJfZm9saW9faW5pdF92bWVtbWFwKHN0cnVjdCBmb2xpbyAqZm9saW8sXG5tbS9odWdldGxiLmMtMzE0Mi1cdFx0XHRcdFx0ICAgICAgc3RydWN0IGhzdGF0ZSAqaCxcbi0tXG5tbS9odWdldGxiLmMtMzE1OS1cbm1tL2h1Z2V0bGIuYzozMTYwOnN0YXRpYyBib29sIF9faW5pdCBodWdldGxiX2Jvb3RtZW1fcGFnZV9wcmVodm8oc3RydWN0IGh1Z2VfYm9vdG1lbV9wYWdlICptKVxubW0vaHVnZXRsYi5jLTMxNjEte1xuLS1cbm1tL2h1Z2V0bGIuYy0zMTY0LVxubW0vaHVnZXRsYi5jOjMxNjU6c3RhdGljIGJvb2wgX19pbml0IGh1Z2V0bGJfYm9vdG1lbV9wYWdlX2Vhcmx5Y21hKHN0cnVjdCBodWdlX2Jvb3RtZW1fcGFnZSAqbSlcbm1tL2h1Z2V0bGIuYy0zMTY2LXtcbi0tXG5tbS9odWdldGxiLmMtMzE3OS0gKi9cbm1tL2h1Z2V0bGIuYzozMTgwOnN0YXRpYyB2b2lkIF9faW5pdCBodWdldGxiX2Jvb3RtZW1faW5pdF9taWdyYXRldHlwZShzdHJ1Y3QgZm9saW8gKmZvbGlvLFxubW0vaHVnZXRsYi5jLTMxODEtXHRcdFx0XHRcdFx0XHQgIHN0cnVjdCBoc3RhdGUgKmgpXG4tLVxubW0vaHVnZXRsYi5jPTMxOTY9c3RhdGljIHZvaWQgX19pbml0IHByZXBfYW5kX2FkZF9ib290bWVtX2ZvbGlvcyhzdHJ1Y3QgaHN0YXRlICpoLFxuLS1cbm1tL2h1Z2V0bGIuYy0zMjI1LVxubW0vaHVnZXRsYi5jOjMyMjY6Ym9vbCBfX2luaXQgaHVnZXRsYl9ib290bWVtX3BhZ2Vfem9uZXNfdmFsaWQoaW50IG5pZCxcbm1tL2h1Z2V0bGIuYy0zMjI3LVx0XHRcdFx0XHQgICAgIHN0cnVjdCBodWdlX2Jvb3RtZW1fcGFnZSAqbSlcbi0tXG5tbS9odWdldGxiLmMtMzI2Mi0gKi9cbm1tL2h1Z2V0bGIuYzozMjYzOnN0YXRpYyB2b2lkIF9faW5pdCBodWdldGxiX2Jvb3RtZW1fZnJlZV9pbnZhbGlkX3BhZ2UoaW50IG5pZCwgc3RydWN0IHBhZ2UgKnBhZ2UsXG5tbS9odWdldGxiLmMtMzI2NC1cdFx0XHRcdFx0ICAgICBzdHJ1Y3QgaHN0YXRlICpoKVxuLS1cbm1tL2h1Z2V0bGIuYz0zMzU2PXN0YXRpYyB2b2lkIF9faW5pdCBnYXRoZXJfYm9vdG1lbV9wcmVhbGxvYyh2b2lkKVxuLS1cbm1tL2h1Z2V0bGIuYy0zMzcxLVxubW0vaHVnZXRsYi5jOjMzNzI6c3RhdGljIHZvaWQgX19pbml0IGh1Z2V0bGJfaHN0YXRlX2FsbG9jX3BhZ2VzX29uZW5vZGUoc3RydWN0IGhzdGF0ZSAqaCwgaW50IG5pZClcbm1tL2h1Z2V0bGIuYy0zMzczLXtcbi0tXG5tbS9odWdldGxiLmMtMzQxNC1cbm1tL2h1Z2V0bGIuYzozNDE1OnN0YXRpYyBib29sIF9faW5pdCBodWdldGxiX2hzdGF0ZV9hbGxvY19wYWdlc19zcGVjaWZpY19ub2RlcyhzdHJ1Y3QgaHN0YXRlICpoKVxubW0vaHVnZXRsYi5jLTM0MTYte1xuLS1cbm1tL2h1Z2V0bGIuYy0zNDI5LVxubW0vaHVnZXRsYi5jOjM0MzA6c3RhdGljIHZvaWQgX19pbml0IGh1Z2V0bGJfaHN0YXRlX2FsbG9jX3BhZ2VzX2VycmNoZWNrKHVuc2lnbmVkIGxvbmcgYWxsb2NhdGVkLCBzdHJ1Y3QgaHN0YXRlICpoKVxubW0vaHVnZXRsYi5jLTM0MzEte1xuLS1cbm1tL2h1Z2V0bGIuYy0zNDQxLVxubW0vaHVnZXRsYi5jOjM0NDI6c3RhdGljIHZvaWQgX19pbml0IGh1Z2V0bGJfcGFnZXNfYWxsb2NfYm9vdF9ub2RlKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLCB2b2lkICphcmcpXG5tbS9odWdldGxiLmMtMzQ0My17XG4tLVxubW0vaHVnZXRsYi5jLTM0NzItXG5tbS9odWdldGxiLmM6MzQ3MzpzdGF0aWMgdW5zaWduZWQgbG9uZyBfX2luaXQgaHVnZXRsYl9naWdhbnRpY19wYWdlc19hbGxvY19ib290KHN0cnVjdCBoc3RhdGUgKmgpXG5tbS9odWdldGxiLmMtMzQ3NC17XG4tLVxubW0vaHVnZXRsYi5jLTM0ODUtXG5tbS9odWdldGxiLmM6MzQ4NjpzdGF0aWMgdW5zaWduZWQgbG9uZyBfX2luaXQgaHVnZXRsYl9wYWdlc19hbGxvY19ib290KHN0cnVjdCBoc3RhdGUgKmgpXG5tbS9odWdldGxiLmMtMzQ4Ny17XG4tLVxubW0vaHVnZXRsYi5jLTM1NjQtICovXG5tbS9odWdldGxiLmM6MzU2NTpzdGF0aWMgdm9pZCBfX2luaXQgaHVnZXRsYl9oc3RhdGVfYWxsb2NfcGFnZXMoc3RydWN0IGhzdGF0ZSAqaClcbm1tL2h1Z2V0bGIuYy0zNTY2LXtcbi0tXG5tbS9odWdldGxiLmMtMzU5NC1cbm1tL2h1Z2V0bGIuYzozNTk1OnN0YXRpYyB2b2lkIF9faW5pdCBodWdldGxiX2luaXRfaHN0YXRlcyh2b2lkKVxubW0vaHVnZXRsYi5jLTM1OTYte1xuLS1cbm1tL2h1Z2V0bGIuYz00MDQ3PXNzaXplX3QgX19ucl9odWdlcGFnZXNfc3RvcmVfY29tbW9uKGJvb2wgb2JleV9tZW1wb2xpY3ksXG4tLVxubW0vaHVnZXRsYi5jLTQwNzktXG5tbS9odWdldGxiLmM6NDA4MDpzdGF0aWMgaW50IF9faW5pdCBodWdldGxiX2luaXQodm9pZClcbm1tL2h1Z2V0bGIuYy00MDgxLXtcbi0tXG5tbS9odWdldGxiLmM9NDE1Mz1ib29sIF9faW5pdCBfX2F0dHJpYnV0ZSgod2VhaykpIGFyY2hfaHVnZXRsYl92YWxpZF9zaXplKHVuc2lnbmVkIGxvbmcgc2l6ZSlcbi0tXG5tbS9odWdldGxiLmMtNDE1Ny1cbm1tL2h1Z2V0bGIuYzo0MTU4OnZvaWQgX19pbml0IGh1Z2V0bGJfYWRkX2hzdGF0ZSh1bnNpZ25lZCBpbnQgb3JkZXIpXG5tbS9odWdldGxiLmMtNDE1OS17XG4tLVxubW0vaHVnZXRsYi5jLTQxODEtXG5tbS9odWdldGxiLmM6NDE4Mjpib29sIF9faW5pdCBfX3dlYWsgaHVnZXRsYl9ub2RlX2FsbG9jX3N1cHBvcnRlZCh2b2lkKVxubW0vaHVnZXRsYi5jLTQxODMte1xuLS1cbm1tL2h1Z2V0bGIuYz00MTg3PXN0YXRpYyB2b2lkIF9faW5pdCBodWdlcGFnZXNfY2xlYXJfcGFnZXNfaW5fbm9kZSh2b2lkKVxuLS1cbm1tL2h1Z2V0bGIuYy00MTk5LVxubW0vaHVnZXRsYi5jOjQyMDA6c3RhdGljIF9faW5pdCBpbnQgaHVnZXRsYl9hZGRfcGFyYW0oY2hhciAqcywgaW50ICgqc2V0dXApKGNoYXIgKikpXG5tbS9odWdldGxiLmMtNDIwMS17XG4tLVxubW0vaHVnZXRsYi5jLTQyMjYtXG5tbS9odWdldGxiLmM6NDIyNzpzdGF0aWMgX19pbml0IHZvaWQgaHVnZXRsYl9wYXJzZV9wYXJhbXModm9pZClcbm1tL2h1Z2V0bGIuYy00MjI4LXtcbi0tXG5tbS9odWdldGxiLmM9NDQ0Mj1odWdldGxiX2Vhcmx5X3BhcmFtKFwmIzM0O2RlZmF1bHRfaHVnZXBhZ2VzelwmIzM0OywgZGVmYXVsdF9odWdlcGFnZXN6X3NldHVwKTtcbm1tL2h1Z2V0bGIuYy00NDQzLVxubW0vaHVnZXRsYi5jOjQ0NDQ6dm9pZCBfX2luaXQgaHVnZXRsYl9ib290bWVtX3NldF9ub2Rlcyh2b2lkKVxubW0vaHVnZXRsYi5jLTQ0NDUte1xuLS1cbm1tL2h1Z2V0bGIuYy00NDU3LVxubW0vaHVnZXRsYi5jOjQ0NTg6dm9pZCBfX2luaXQgaHVnZXRsYl9ib290bWVtX2FsbG9jKHZvaWQpXG5tbS9odWdldGxiLmMtNDQ1OS17XG4tLVxubW0vaHVnZXRsYi5jPTQ1MDA9c3RhdGljIHVuc2lnbmVkIGludCBhbGxvd2VkX21lbXNfbnIoc3RydWN0IGhzdGF0ZSAqaClcbi0tXG5tbS9odWdldGxiLmMtNDUxNi1cbm1tL2h1Z2V0bGIuYzo0NTE3OnZvaWQgaHVnZXRsYl9yZXBvcnRfbWVtaW5mbyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0pXG5tbS9odWdldGxiLmMtNDUxOC17XG4tLVxubW0vaHVnZXRsYi5jLTQ1NDYtXG5tbS9odWdldGxiLmM6NDU0NzppbnQgaHVnZXRsYl9yZXBvcnRfbm9kZV9tZW1pbmZvKGNoYXIgKmJ1ZiwgaW50IGxlbiwgaW50IG5pZClcbm1tL2h1Z2V0bGIuYy00NTQ4LXtcbi0tXG5tbS9odWdldGxiLmMtNDU2Mi1cbm1tL2h1Z2V0bGIuYzo0NTYzOnZvaWQgaHVnZXRsYl9zaG93X21lbWluZm9fbm9kZShpbnQgbmlkKVxubW0vaHVnZXRsYi5jLTQ1NjQte1xuLS1cbm1tL2h1Z2V0bGIuYy00NTc4LVxubW0vaHVnZXRsYi5jOjQ1Nzk6dm9pZCBodWdldGxiX3JlcG9ydF91c2FnZShzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxubW0vaHVnZXRsYi5jLTQ1ODAte1xuLS1cbm1tL2h1Z2V0bGIuYy00NTg1LS8qIFJldHVybiB0aGUgbnVtYmVyIHBhZ2VzIG9mIG1lbW9yeSB3ZSBwaHlzaWNhbGx5IGhhdmUsIGluIFBBR0VfU0laRSB1bml0cy4gKi9cbm1tL2h1Z2V0bGIuYzo0NTg2OnVuc2lnbmVkIGxvbmcgaHVnZXRsYl90b3RhbF9wYWdlcyh2b2lkKVxubW0vaHVnZXRsYi5jLTQ1ODcte1xuLS1cbm1tL2h1Z2V0bGIuYy00NTk1LVxubW0vaHVnZXRsYi5jOjQ1OTY6c3RhdGljIGludCBodWdldGxiX2FjY3RfbWVtb3J5KHN0cnVjdCBoc3RhdGUgKmgsIGxvbmcgZGVsdGEpXG5tbS9odWdldGxiLmMtNDU5Ny17XG4tLVxubW0vaHVnZXRsYi5jLTQ2NDUtXG5tbS9odWdldGxiLmM6NDY0NjpzdGF0aWMgdm9pZCBodWdldGxiX3ZtX29wX29wZW4oc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXG5tbS9odWdldGxiLmMtNDY0Ny17XG4tLVxubW0vaHVnZXRsYi5jLTQ2ODUtXG5tbS9odWdldGxiLmM6NDY4NjpzdGF0aWMgdm9pZCBodWdldGxiX3ZtX29wX2Nsb3NlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxubW0vaHVnZXRsYi5jLTQ2ODcte1xuLS1cbm1tL2h1Z2V0bGIuYy00NzE2LVxubW0vaHVnZXRsYi5jOjQ3MTc6c3RhdGljIGludCBodWdldGxiX3ZtX29wX3NwbGl0KHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIpXG5tbS9odWdldGxiLmMtNDcxOC17XG4tLVxubW0vaHVnZXRsYi5jLTQ3MjMtXG5tbS9odWdldGxiLmM6NDcyNDp2b2lkIGh1Z2V0bGJfc3BsaXQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcilcbm1tL2h1Z2V0bGIuYy00NzI1LXtcbi0tXG5tbS9odWdldGxiLmMtNDc1Ni1cbm1tL2h1Z2V0bGIuYzo0NzU3OnN0YXRpYyB1bnNpZ25lZCBsb25nIGh1Z2V0bGJfdm1fb3BfcGFnZXNpemUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXG5tbS9odWdldGxiLmMtNDc1OC17XG4tLVxubW0vaHVnZXRsYi5jLTQ3NjctICovXG5tbS9odWdldGxiLmM6NDc2ODpzdGF0aWMgdm1fZmF1bHRfdCBodWdldGxiX3ZtX29wX2ZhdWx0KHN0cnVjdCB2bV9mYXVsdCAqdm1mKVxubW0vaHVnZXRsYi5jLTQ3Njkte1xuLS1cbm1tL2h1Z2V0bGIuYy00Nzc0LSNpZmRlZiBDT05GSUdfVVNFUkZBVUxURkRcbm1tL2h1Z2V0bGIuYzo0Nzc1OnN0YXRpYyBib29sIGh1Z2V0bGJfY2FuX3VzZXJmYXVsdChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbm1tL2h1Z2V0bGIuYy00Nzc2LVx0XHRcdFx0ICB2bV9mbGFnc190IHZtX2ZsYWdzKVxuLS1cbm1tL2h1Z2V0bGIuYz01MzYyPXN0YXRpYyB2b2lkIHVubWFwX3JlZl9wcml2YXRlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbi0tXG5tbS9odWdldGxiLmMtNTQxOC0gKi9cbm1tL2h1Z2V0bGIuYzo1NDE5OnN0YXRpYyB2bV9mYXVsdF90IGh1Z2V0bGJfd3Aoc3RydWN0IHZtX2ZhdWx0ICp2bWYpXG5tbS9odWdldGxiLmMtNTQyMC17XG4tLVxubW0vaHVnZXRsYi5jPTU2MTQ9Ym9vbCBodWdldGxiZnNfcGFnZWNhY2hlX3ByZXNlbnQoc3RydWN0IGhzdGF0ZSAqaCxcbi0tXG5tbS9odWdldGxiLmMtNTYyNy1cbm1tL2h1Z2V0bGIuYzo1NjI4OmludCBodWdldGxiX2FkZF90b19wYWdlX2NhY2hlKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxubW0vaHVnZXRsYi5jLTU2MjktXHRcdFx0ICAgcGdvZmZfdCBpZHgpXG4tLVxubW0vaHVnZXRsYi5jLTU2NTYtXG5tbS9odWdldGxiLmM6NTY1NzpzdGF0aWMgaW5saW5lIHZtX2ZhdWx0X3QgaHVnZXRsYl9oYW5kbGVfdXNlcmZhdWx0KHN0cnVjdCB2bV9mYXVsdCAqdm1mLFxubW0vaHVnZXRsYi5jLTU2NTgtXHRcdFx0XHRcdFx0ICBzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcbi0tXG5tbS9odWdldGxiLmMtNTY3Ny0gKi9cbm1tL2h1Z2V0bGIuYzo1Njc4OnN0YXRpYyBib29sIGh1Z2V0bGJfcHRlX3N0YWJsZShzdHJ1Y3QgaHN0YXRlICpoLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLFxubW0vaHVnZXRsYi5jLTU2NzktXHRcdFx0ICAgICAgIHB0ZV90ICpwdGVwLCBwdGVfdCBvbGRfcHRlKVxuLS1cbm1tL2h1Z2V0bGIuYy01NjkwLVxubW0vaHVnZXRsYi5jOjU2OTE6c3RhdGljIHZtX2ZhdWx0X3QgaHVnZXRsYl9ub19wYWdlKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxubW0vaHVnZXRsYi5jLTU2OTItXHRcdFx0c3RydWN0IHZtX2ZhdWx0ICp2bWYpXG4tLVxubW0vaHVnZXRsYi5jPTU5MzU9dTMyIGh1Z2V0bGJfZmF1bHRfbXV0ZXhfaGFzaChzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgcGdvZmZfdCBpZHgpXG4tLVxubW0vaHVnZXRsYi5jLTU5NDAtXG5tbS9odWdldGxiLmM6NTk0MTp2bV9mYXVsdF90IGh1Z2V0bGJfZmF1bHQoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxubW0vaHVnZXRsYi5jLTU5NDItXHRcdFx0dW5zaWduZWQgbG9uZyBhZGRyZXNzLCB1bnNpZ25lZCBpbnQgZmxhZ3MpXG4tLVxubW0vaHVnZXRsYi5jPTYxMzY9c3RhdGljIHN0cnVjdCBmb2xpbyAqYWxsb2NfaHVnZXRsYl9mb2xpb192bWEoc3RydWN0IGhzdGF0ZSAqaCxcbi0tXG5tbS9odWdldGxiLmMtNjE2Mi0gKi9cbm1tL2h1Z2V0bGIuYzo2MTYzOmludCBodWdldGxiX21maWxsX2F0b21pY19wdGUocHRlX3QgKmRzdF9wdGUsXG5tbS9odWdldGxiLmMtNjE2NC1cdFx0XHQgICAgIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqZHN0X3ZtYSxcbi0tXG5tbS9odWdldGxiLmMtNjM4My1cbm1tL2h1Z2V0bGIuYzo2Mzg0OmxvbmcgaHVnZXRsYl9jaGFuZ2VfcHJvdGVjdGlvbihzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbm1tL2h1Z2V0bGIuYy02Mzg1LVx0XHR1bnNpZ25lZCBsb25nIGFkZHJlc3MsIHVuc2lnbmVkIGxvbmcgZW5kLFxuLS1cbm1tL2h1Z2V0bGIuYy02NTM5LVxubW0vaHVnZXRsYi5jOjY1NDA6bG9uZyBodWdldGxiX3Jlc2VydmVfcGFnZXMoc3RydWN0IGlub2RlICppbm9kZSxcbm1tL2h1Z2V0bGIuYy02NTQxLVx0XHRsb25nIGZyb20sIGxvbmcgdG8sXG4tLVxubW0vaHVnZXRsYi5jLTY3MjctXG5tbS9odWdldGxiLmM6NjcyODpsb25nIGh1Z2V0bGJfdW5yZXNlcnZlX3BhZ2VzKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvbmcgc3RhcnQsIGxvbmcgZW5kLFxubW0vaHVnZXRsYi5jLTY3MjktXHRcdFx0XHRcdFx0XHRcdGxvbmcgZnJlZWQpXG4tLVxubW0vaHVnZXRsYi5jPTcwNTA9cHRlX3QgKmh1Z2VfcHRlX29mZnNldChzdHJ1Y3QgbW1fc3RydWN0ICptbSxcbi0tXG5tbS9odWdldGxiLmMtNzA4NC0gKi9cbm1tL2h1Z2V0bGIuYzo3MDg1OnVuc2lnbmVkIGxvbmcgaHVnZXRsYl9tYXNrX2xhc3RfcGFnZShzdHJ1Y3QgaHN0YXRlICpoKVxubW0vaHVnZXRsYi5jLTcwODYte1xuLS1cbm1tL2h1Z2V0bGIuYy03MDk5LS8qIFNlZSBkZXNjcmlwdGlvbiBhYm92ZS4gIEFyY2hpdGVjdHVyZXMgY2FuIHByb3ZpZGUgdGhlaXIgb3duIHZlcnNpb24uICovXG5tbS9odWdldGxiLmM6NzEwMDpfX3dlYWsgdW5zaWduZWQgbG9uZyBodWdldGxiX21hc2tfbGFzdF9wYWdlKHN0cnVjdCBoc3RhdGUgKmgpXG5tbS9odWdldGxiLmMtNzEwMS17XG4tLVxubW0vaHVnZXRsYi5jPTcxODU9dm9pZCBtb3ZlX2h1Z2V0bGJfc3RhdGUoc3RydWN0IGZvbGlvICpvbGRfZm9saW8sIHN0cnVjdCBmb2xpbyAqbmV3X2ZvbGlvLCBpbnQgcmVhc29uKVxuLS1cbm1tL2h1Z2V0bGIuYy03MjQwLSAqL1xubW0vaHVnZXRsYi5jOjcyNDE6c3RhdGljIHZvaWQgaHVnZXRsYl91bnNoYXJlX3BtZHMoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG5tbS9odWdldGxiLmMtNzI0Mi1cdFx0XHRcdCAgIHVuc2lnbmVkIGxvbmcgc3RhcnQsXG4tLVxubW0vaHVnZXRsYi5jLTczMDEtICovXG5tbS9odWdldGxiLmM6NzMwMjp2b2lkIGh1Z2V0bGJfdW5zaGFyZV9hbGxfcG1kcyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcbm1tL2h1Z2V0bGIuYy03MzAzLXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjQgMTg6NDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjUxOTYKCQkJCQkJCW91dHB1dDogNDQKCQkJCQkJCXRob3VnaHRzOiAyOTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIE1lbW9yeSBQb2lzb25pbmcgaW4gdGhlIEh1Z2VUTEIgYW5kIEZpbGUgU3lzdGVtcyoqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byBob3cgbWVtb3J5IHBvaXNvbmluZyBpcyBoYW5kbGVkLCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBjb250ZXh0IG9mIEh1Z2VUTEIgYW5kIGZpbGUgc3lzdGVtcy4gVGhlIGZ1bmN0aW9ucyBvZiBpbnRlcmVzdCDigJMgYGh1Z2V0bGJfdXBkYXRlX2h3cG9pc29uYCwgYGh1Z2V0bGJfcGFnZV9od3BvaXNvbmAsIGBodWdldGxiX3VucmVmX3BhZ2VfaHdwb2lzb25gLCBhbmQgYHVucG9pc29uX21lbW9yeWAg4oCTIHJlc2lkZSBpbiBgbW0vbWVtb3J5LWZhaWx1cmUuY2AuIEludGVyZXN0aW5n4oCmIEkgc2VlIHRoYXQgYGh1Z2V0bGJfdXBkYXRlX2h3cG9pc29uYCBpcyBzdGF0aWMsIHdoaWNoIGxpbWl0cyBpdHMgZGlyZWN0IGFjY2Vzc2liaWxpdHkgZnJvbSBlbHNld2hlcmUuIFRoZSBvdGhlcnMsIGBodWdldGxiX3BhZ2VfaHdwb2lzb25gLCBgaHVnZXRsYl91bnJlZl9wYWdlX2h3cG9pc29uYCwgYW5kIGB1bnBvaXNvbl9tZW1vcnlgLCBhcmUsIGZvcnR1bmF0ZWx5LCBub24tc3RhdGljIChleHBvcnRlZCksIG1ha2luZyB0aGVtIGF2YWlsYWJsZSBmb3IgZXh0ZXJuYWwgdXNlLgoKTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2UgYXJlICp1c2VkKi4gSSYjMzk7ZCBub3JtYWxseSBjaGVjayBgbW0vZmlsZW1hcC5jYCBmb3IgY2FsbHMgcmVsYXRlZCB0byBmaWxlIEkvTywgcGVyaGFwcyBgZmlsZW1hcF9yZWFkYCwgYGZpbGVtYXBfZ2V0X3JlYWRfYmF0Y2hgLCBvciBgZmlsZW1hcF9nZXRfcGFnZXNgLiBIb2xkIG9uLCBgZmlsZW1hcF9yZWFkYCBpcyBhIGtub3duIGhvdCBwYXRoOyB3ZSB3YW50IHRvIGF2b2lkIHBvdGVudGlhbGx5IGRpc3J1cHRpbmcgdGhhdCBpZiBwb3NzaWJsZS4gTGV0JiMzOTtzIHN0ZXAgYmFjay4uLiBobW0sIHdhc24mIzM5O3QgdGhlcmUgc29tZXRoaW5nIGFib3V0IGBodWdldGxiZnNfcmVhZF9pdGVyYD8gQWggeWVzLCB0aGF0IHdhcyByZW1vdmVkIOKAkyBzbyBubyBqb3kgdGhlcmUuIFdoYXQgYWJvdXQgYGFkanVzdF9yYW5nZV9od3BvaXNvbmA/IE5vcGUsIGl0JiMzOTtzIHN0YXRpYyBhZ2Fpbiwgc28gYWxzbyBub3QgdGhlIGRpcmVjdCBhbnN3ZXIgSSYjMzk7bSBzZWVraW5nLgoKT2theSwgbGV0JiMzOTtzIGNhc3QgYSB3aWRlciBuZXQuIFdoYXQgYWJvdXQgYGh1Z2V0bGJfZm9saW9fbWFwcGluZ19sb2NrX3dyaXRlYCBpbiBgbW0vaHVnZXRsYi5jYD8gVGhhdCBtaWdodCBiZSByZWxldmFudCBhcyB3ZSBhcmUgZGVhbGluZyB3aXRoIEh1Z2VUTEIgc3BlY2lmaWNhbGx5LiBBbmQgYWxzbywgcGVyaGFwcywgYGh1Z2V0bGJmc19pbml0X3JlZ3VsYXJfaW5vZGVgIGluIGBmcy9odWdldGxiZnMvaW5vZGUuY2AuLi4gSXQgbG9va3MgbGlrZSBhIGdvb2QgcGxhY2UgdG8gc3RhcnQsIHNvIEkmIzM5O2xsIGRpdmUgaW50byBgZnMvaHVnZXRsYmZzL2lub2RlLmNgIG5vdyB0byBpbnZlc3RpZ2F0ZSB0aGF0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNCAxODo0NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtec3RhdGljIHZvaWQgaHVnZXRsYmZzX2luaXRfcmVndWxhcl9pbm9kZVxcKCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL2h1Z2V0bGJmcy9pbm9kZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2h1Z2V0bGJmcy9pbm9kZS5jPTc1Nz1zdGF0aWMgc3RydWN0IGlub2RlICpodWdldGxiZnNfZ2V0X3Jvb3Qoc3RydWN0IHN1cGVyX2Jsb2NrICpzYixcbi0tXG5mcy9odWdldGxiZnMvaW5vZGUuYy03NzgtXG5mcy9odWdldGxiZnMvaW5vZGUuYzo3Nzk6c3RhdGljIHZvaWQgaHVnZXRsYmZzX2luaXRfcmVndWxhcl9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuZnMvaHVnZXRsYmZzL2lub2RlLmMtNzgwLXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjQgMTg6NDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjYwODkKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiAxMTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRm9jdXNpbmcgb24gSGFyZHdhcmUgUG9pc29uaW5nIGluIEh1Z2VUTEIgUGFnZXMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGBodWdldGxiZnNfaW5pdF9yZWd1bGFyX2lub2RlYCBhbmQgaW1tZWRpYXRlbHkgbm90aWNlIGl0JiMzOTtzIHN0YXRpYywgd2hpY2gsIHdoaWxlIHBvdGVudGlhbGx5IHJlbGV2YW50LCBpc24mIzM5O3Qgd2hlcmUgSSBuZWVkIHRvIGZvY3VzIHJpZ2h0IG5vdy4gTGV0JiMzOTtzIGRyaWxsIGRvd24gb24gdGhlIGNvcmUgaGFyZHdhcmUgcG9pc29uaW5nIGZ1bmN0aW9ucy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBwb2lzb24gaGFuZGxpbmcgd29ya3MgaW4gdGhlIGNvbnRleHQgb2YgSHVnZVRMQiBwYWdlcy4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIHRoaW5raW5nIGFib3V0IGBodWdldGxiX3BhZ2VfaHdwb2lzb25gLCBgaHVnZXRsYl91bnJlZl9wYWdlX2h3cG9pc29uYCwgYW5kIGB1bnBvaXNvbl9tZW1vcnlgLiBUaG9zZSBzZWVtIHRvIGJlIHRoZSBrZXkgcGxheWVycyBpbiBkZXRlY3RpbmcsIHJlcG9ydGluZywgYW5kIGhvcGVmdWxseSwgcmVjb3ZlcmluZyBmcm9tIGhhcmR3YXJlIGVycm9ycy4KCkkmIzM5O20gYWxzbyBzZWVpbmcgYGh1Z2V0bGJfc2V0X3BvaXNvbmAgYW5kIGBodWdldGxiX2NsZWFyX3BvaXNvbmAsIHdoaWNoIGFyZSBzdGF0aWMgaW5saW5lIGZ1bmN0aW9ucy4gVGhhdCYjMzk7cyBnb29kLCB0aGV5JiMzOTtyZSBwcm9iYWJseSBvcHRpbWl6ZWQgZm9yIHRoZWlyIHNwZWNpZmljIHVzZSB3aXRoaW4gdGhlIEh1Z2VUTEIgY29udGV4dC4KCldhaXQgYSBtaW51dGUsIHdoYXQmIzM5O3MgdGhpcz8gYGZvbGlvX2NsZWFyX2h1Z2V0bGJfaHdwb2lzb25gIGluIGBtbS9tZW1vcnktZmFpbHVyZS5jYCBpcyBub24tc3RhdGljLiBUaGF0JiMzOTtzIGludGVyZXN0aW5nLCBpdCBvcGVucyB1cCB0aGUgcG9zc2liaWxpdHkgb2YgZXh0ZXJuYWwgdXNlLCB3aGljaCB3YXJyYW50cyBmdXJ0aGVyIGludmVzdGlnYXRpb24uIEkmIzM5O2xsIG5lZWQgdG8gcmVtZW1iZXIgdGhhdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjQgMTg6NDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7XnZvaWQgZm9saW9fY2xlYXJfaHVnZXRsYl9od3BvaXNvblxcKCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL21lbW9yeS1mYWlsdXJlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vbWVtb3J5LWZhaWx1cmUuYz0xOTU4PXN0YXRpYyB1bnNpZ25lZCBsb25nIGZvbGlvX2ZyZWVfcmF3X2h3cChzdHJ1Y3QgZm9saW8gKmZvbGlvLCBib29sIG1vdmVfZmxhZylcbi0tXG5tbS9tZW1vcnktZmFpbHVyZS5jLTE5NzYtXG5tbS9tZW1vcnktZmFpbHVyZS5jOjE5Nzc6dm9pZCBmb2xpb19jbGVhcl9odWdldGxiX2h3cG9pc29uKHN0cnVjdCBmb2xpbyAqZm9saW8pXG5tbS9tZW1vcnktZmFpbHVyZS5jLTE5Nzgte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNCAxODo0NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNjYxMgoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDc1MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgUGF0Y2ggZm9yIEhXUG9pc29uIFRyYWNraW5nIGluIExhcmdlIEZvbGlvcyoqCgpPa2F5LCBmaXJzdCB0aGluZ3MgZmlyc3QsIGBmb2xpb19jbGVhcl9odWdldGxiX2h3cG9pc29uYCBpcyBjb25maXJtZWQgdG8gYmUgbm9uLXN0YXRpYy4gR29vZC4gTm93LCBsZXQmIzM5O3Mgc2VlIHdoYXQgZWxzZSB0aGlzIHBhdGNoIHRvdWNoZXMuIFNjYW5uaW5nIHRoZSBjb2RlLCBJIHNlZSBtb2RpZmljYXRpb25zIGluIGBtbS9maWxlbWFwLmNgIChzcGVjaWZpY2FsbHkgYGZpbGVtYXBfcmVhZGApLCBgbW0vaHVnZV9tZW1vcnkuY2AgKHNwZWNpZmljYWxseSBgdGhwX3VuZGVydXNlZGApLCBgbW0vc2htZW0uY2AgKHNwZWNpZmljYWxseSBgc2htZW1fd3JpdGVfYmVnaW5gKSwgYG1tL3Ztc2Nhbi5jYCAoc3BlY2lmaWNhbGx5IGBzaHJpbmtfZm9saW9fbGlzdGApLCBhbmQgYHZpcnQva3ZtL2d1ZXN0X21lbWZkLmNgIChzcGVjaWZpY2FsbHkgYF9fa3ZtX2dtZW1fZ2V0X3BmbmApLiBUaGlzIG1lYW5zIGl0JiMzOTtzIHByZXR0eSB3aWRlc3ByZWFkLgoKRXNzZW50aWFsbHksIHRoaXMgcGF0Y2ggaXMgYSBmdW5jdGlvbmFsIHNoaWZ0IGluIGhvdyBod3BvaXNvbiBpcyBoYW5kbGVkIGZvciBsYXJnZSBmb2xpb3MuIFdlJiMzOTtyZSBtb3ZpbmcgZnJvbSBhIGN1c3RvbSBsaXN0IChgZm9saW8tJmd0O19odWdldGxiX2h3cG9pc29uYCkgdG8gYSBzaW5nbGUgZmxhZyAoYGZvbGlvLSZndDtodWdldGxiX2h3cG9pc29uYCkgYW5kIHVzaW5nIGBmb2xpb19oYXNfaHdwb2lzb25lZF9wYWdlYCBpbnN0ZWFkIG9mIHRoZSBvbGQgYGZvbGlvX2NvbnRhaW5faHdwb2lzb25lZF9wYWdlYC4gSXQgYWxzbyByZW1vdmVzIHRoZSBjdXN0b20gYGh1Z2V0bGJmc19yZWFkX2l0ZXJgIGFuZCB1c2VzIGBnZW5lcmljX2ZpbGVfcmVhZF9pdGVyYCwgaW50ZWdyYXRpbmcgaHdwb2lzb24gaGFuZGxpbmcgd2l0aGluIGBmaWxlbWFwX3JlYWRgLiBUaGlzIGlzIHNpZ25pZmljYW50OyB0aGUgY2hhbmdlIGluIHRoZSByZWFkIHBhdGggaXMgYSBnb29kIGluZGljYXRvciBvZiB3aGVyZSB3ZSBzaG91bGQgZm9jdXMuCgpHaXZlbiB0aGUgZnVuY3Rpb25hbCBuYXR1cmUgb2YgdGhpcyBjaGFuZ2UsIGZ1enppbmcgaXMgZGVmaW5pdGVseSB3YXJyYW50ZWQuIE15IHByaW1hcnkgZm9jdXMgc3ltYm9scyB3aWxsIGJlOgoKKiAgIGBodWdldGxiX3BhZ2VfaHdwb2lzb25gCiogICBgaHVnZXRsYl91bnJlZl9wYWdlX2h3cG9pc29uYAoqICAgYHVucG9pc29uX21lbW9yeWAKKiAgIGBmb2xpb19jbGVhcl9odWdldGxiX2h3cG9pc29uYAoKTm93LCBsZXQmIzM5O3MgY29uc2lkZXIgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zLiBUaGUgY3JpdGljYWwgb25lcyBmb3IgdGhpcyBhcmVhIGFyZToKCiogICBgTUVNT1JZX0ZBSUxVUkVgIC0gVGhpcyBpcyBub24tbmVnb3RpYWJsZSBmb3IgaHdwb2lzb24uCiogICBgSFVHRVRMQkZTYCAtIFByZXR0eSBvYnZpb3VzLCBnaXZlbiB0aGUgbmFtZXMuCiogICBgSFVHRVRMQl9QQUdFYCAtIEFsc28gZXhwZWN0ZWQuCiogICBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgIC0gQWxzbywgYWRkZWQuCiogICBgS1ZNYCAtIFRoaXMgb25lIGlzIGltcG9ydGFudCBmb3IgYHZpcnQva3ZtL2d1ZXN0X21lbWZkLmNgLgoKQUhBISBUaGUgYExBUkdFX0ZPTElPYCBjb25maWcgKmlzKiBuZXcsIGJ1dCBpdCYjMzk7cyBzZWxlY3RlZCBieSBgSFVHRVRMQl9QQUdFYCBhbmQgYFRSQU5TUEFSRU5UX0hVR0VQQUdFYC4gU28sIGluY2x1ZGluZyBpdCBpcyBpbXBvcnRhbnQgdG8gaW5jbHVkZS4KCkRvdWJsZS1jaGVja2luZyBteSBjb25maWcgYXNzdW1wdGlvbnMsIGBNRU1PUllfRkFJTFVSRWAgc2VlbXMgdG8gYmUgdGhlIG9ubHkgKnJlcXVpcmVkKiBvbmUgZm9yIHRoZSBjb3JlIGh3cG9pc29uIGxvZ2ljLgoKUXVpY2sgc2lkZS1ub3RlLiBFdmVuIHRob3VnaCBgc2htZW1fd3JpdGVfYmVnaW5gIGFuZCBgc2hyaW5rX2ZvbGlvX2xpc3RgIGFyZSBtb2RpZmllZCwgdGhleSBhcmUgaG90IHBhdGhzLiBXZSBzaG91bGQgZGUtcHJpb3JpdGl6ZSB0aGVtIGZvciBub3cuCgpXYWl0Li4uIGB1bnBvaXNvbl9tZW1vcnlgIGlzIGV4cG9ydGVkLiBUaGF0JiMzOTtzIGludGVyZXN0aW5nLiBJIGtub3cgaXQgY2FuIGJlIGNhbGxlZCB0aHJvdWdoIGRlYnVnZnMgb3IgbWFkdmlzZS4gQnV0LCBhaC1oYSEgSXQmIzM5O3MgY2FsbGVkIGZyb20gYGh3cG9pc29uX3VucG9pc29uYCBpbiBgbW0vaHdwb2lzb24taW5qZWN0LmNgLiBJIG5lZWQgdG8gZW5zdXJlIHRoYXQgYEhXUE9JU09OX0lOSkVDVGAgaXMgZW5hYmxlZCBmb3IgdGhpcyBmdXp6aW5nIGVmZm9ydCB0byBjb3ZlciB0aGF0IGNvZGUgcGF0aC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjQgMTg6NDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEhXUE9JU09OX0lOSkVDVCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9LY29uZmlnPTc3Nz1jb25maWcgTUVNT1JZX0ZBSUxVUkVcbi0tXG5tbS9LY29uZmlnLTc4Ny1cbm1tL0tjb25maWc6Nzg4OmNvbmZpZyBIV1BPSVNPTl9JTkpFQ1Rcbm1tL0tjb25maWctNzg5LVx0dHJpc3RhdGUgXCYjMzQ7SFdQb2lzb24gcGFnZXMgaW5qZWN0b3JcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjQgMTg6NDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjgxNjMKCQkJCQkJCW91dHB1dDogMjM2CgkJCQkJCQl0aG91Z2h0czogMjg4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIEhXUE9JU09OIEZ1enppbmcgUG90ZW50aWFsKioKCk9rYXksIHNvIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgaG93IHRvIGJlc3QgZnV6eiB0aGUgYGh3cG9pc29uYCBmdW5jdGlvbmFsaXR5LiBZZXMsIHVzaW5nIGBIV1BPSVNPTl9JTkpFQ1RgIGlzIGRlZmluaXRlbHkgYSBnb29kIHN0YXJ0aW5nIHBvaW50IGZvciB0aGF0LiAKClRoZSBmaXJzdCB0aGluZyBJIG5lZWQgdG8gY29uZmlybSBpcyB0aGF0IGBNQURWX0hXUE9JU09OYCBpcyBldmVuIGF2YWlsYWJsZSBpbiB0aGUgY3VycmVudCBjb25maWd1cmF0aW9uLiBBaCwgeWVzLCBpdCYjMzk7cyB0aWVkIHRvIGBDT05GSUdfTUVNT1JZX0ZBSUxVUkVgLCBzbyB0aGF0JiMzOTtzIHRoZSBrZXkuICBOb3csIHdoYXQgb3RoZXIgY29uZmlnIG9wdGlvbnMgYXJlIGxpa2VseSByZWxldmFudCBoZXJlPyAgTGV0IG1lIHNlZToKCiogICBgTUVNT1JZX0ZBSUxVUkVgIC0gb2J2aW91c2x5LgoqICAgYEhXUE9JU09OX0lOSkVDVGAgLSBmb3IgaW5qZWN0aW9uLCBvZiBjb3Vyc2UuCiogICBgSFVHRVRMQkZTYCAtIGJlY2F1c2Ugd2UgYXJlIHRoaW5raW5nIGFib3V0IGh1Z2V0bGIgcGFnZXMuCiogICBgSFVHRVRMQl9QQUdFYCAtIGFnYWluLCBmb3IgdGhlIHBhZ2VzIHRoZW1zZWx2ZXMuCiogICBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgIC0gbWlnaHQgb3BlbiB1cCBzb21lIGludGVyZXN0aW5nIGZ1enppbmcgdmVjdG9ycy4KCk5vdywgbGV0JiMzOTtzIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBjcml0aWNhbCBzeW1ib2xzIEkgc2hvdWxkIGJlIGZvY3VzaW5nIG9uLiBXZSBoYXZlOgoKKiAgIGBodWdldGxiX3BhZ2VfaHdwb2lzb25gCiogICBgaHVnZXRsYl91bnJlZl9wYWdlX2h3cG9pc29uYAoqICAgYHVucG9pc29uX21lbW9yeWAKKiAgIGBmb2xpb19jbGVhcl9odWdldGxiX2h3cG9pc29uYAoKQXJlIHRoZXJlIGFueSBvdGhlciBmdW5jdGlvbnMgdGhhdCBtaWdodCBiZSB1c2VmdWwgdGFyZ2V0cz8gTGV0JiMzOTtzIGRpZyBkZWVwZXIuIE9rLCBsb29raW5nIGludG8gYG1tL2h1Z2V0bGIuY2AsIEkgc2VlIGBodWdldGxiX2ZvbGlvX21hcHBpbmdfbG9ja193cml0ZWAgaGFzIGJlZW4gbW9kaWZpZWQgaW4gdGhlIGNvbW1pdC4gQW5kIGluIGBtbS9tZW1vcnktZmFpbHVyZS5jYCwgdGhlcmUgYXJlIHF1aXRlIGEgZmV3IHN0YXRpYyBmdW5jdGlvbnMgdGhhdCB3aWxsIG5vdCBiZSB1c2VmdWwgZm9yIHVzOgoKKiAgIGBwcmVjaXNlX3BhZ2VfcG9pc29uZWRgIChzdGF0aWMpCiogICBgaHVnZXRsYl9zZXRfcG9pc29uYCAoc3RhdGljKQoqICAgYGh1Z2V0bGJfY2xlYXJfcG9pc29uYCAoc3RhdGljKQoqICAgYGh1Z2V0bGJfdXBkYXRlX2h3cG9pc29uYCAoc3RhdGljKQoKU2luY2Ugd2UgYXJlIGxvb2tpbmcgZm9yIGZ1bmN0aW9ucyB3ZSBjYW4gZGlyZWN0bHkgdGFyZ2V0IGZvciBmdXp6aW5nLCBJIHNob3VsZCBvbmx5IGNvbmNlcm4gbXlzZWxmIHdpdGggZnVuY3Rpb25zIHRoYXQgYXJlIGV4cG9ydGVkIG9yIGFyZSBub24tc3RhdGljLiBUaG9zZSA0IGZ1bmN0aW9ucyBJIG1lbnRpb25lZCBpbml0aWFsbHkgYXJlIHRoZSBvbmVzLgoKQWxyaWdodCwgdGhhdCYjMzk7cyBhIGdvb2Qgb3ZlcnZpZXcuIExldCYjMzk7cyBjYWxsIHRoZSBgc2V0LXJlc3VsdHNgIGZ1bmN0aW9uIHRvIHN1bW1hcml6ZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjQgMTg6NDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01FTU9SWV9GQUlMVVJFJiMzNDssCiAgICAmIzM0O0hXUE9JU09OX0lOSkVDVCYjMzQ7LAogICAgJiMzNDtIVUdFVExCRlMmIzM0OywKICAgICYjMzQ7SFVHRVRMQl9QQUdFJiMzNDssCiAgICAmIzM0O1RSQU5TUEFSRU5UX0hVR0VQQUdFJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aHVnZXRsYl9wYWdlX2h3cG9pc29uJiMzNDssCiAgICAmIzM0O2h1Z2V0bGJfdW5yZWZfcGFnZV9od3BvaXNvbiYjMzQ7LAogICAgJiMzNDt1bnBvaXNvbl9tZW1vcnkmIzM0OywKICAgICYjMzQ7Zm9saW9fY2xlYXJfaHVnZXRsYl9od3BvaXNvbiYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBob3cgaGFyZHdhcmUgcG9pc29uZWQgKEhXUE9JU09OKSBwYWdlcyBhcmUgdHJhY2tlZCBhbmQgaGFuZGxlZCB3aXRoaW4gbGFyZ2UgZm9saW9zLCBzcGVjaWZpY2FsbHkgYWZmZWN0aW5nIGh1Z2V0bGJmcyBhbmQgZmlsZW1hcCByZWFkIG9wZXJhdGlvbnMuIEl0IGludHJvZHVjZXMgbmV3IGxvZ2ljIHRvIHRyYWNrIHBvaXNvbmVkIHBhZ2VzIHVzaW5nIGBmb2xpby1cdTAwM2VodWdldGxiX2h3cG9pc29uYCBhbmQgcmVwbGFjZXMgdGhlIGN1c3RvbSBgaHVnZXRsYmZzX3JlYWRfaXRlcmAgd2l0aCBgZ2VuZXJpY19maWxlX3JlYWRfaXRlcmAsIGhhbmRsaW5nIGh3cG9pc29uIGRpcmVjdGx5IGluIGBmaWxlbWFwX3JlYWRgLiBUaGVzZSBhcmUgcmVhY2hhYmxlLCBmdW5jdGlvbmFsIGNoYW5nZXMgaW4gY29yZSBtZW1vcnkgbWFuYWdlbWVudCBhbmQgaHVnZXRsYmZzLiBGdXp6aW5nIHNob3VsZCBmb2N1cyBvbiB0aGUgbmV3IGh3cG9pc29uIHRyYWNraW5nIGZ1bmN0aW9ucyBhbmQgdW5wb2lzb25pbmcgbG9naWMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01FTU9SWV9GQUlMVVJFJiMzNDssCiAgICAmIzM0O0hXUE9JU09OX0lOSkVDVCYjMzQ7LAogICAgJiMzNDtIVUdFVExCRlMmIzM0OywKICAgICYjMzQ7SFVHRVRMQl9QQUdFJiMzNDssCiAgICAmIzM0O1RSQU5TUEFSRU5UX0hVR0VQQUdFJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aHVnZXRsYl9wYWdlX2h3cG9pc29uJiMzNDssCiAgICAmIzM0O2h1Z2V0bGJfdW5yZWZfcGFnZV9od3BvaXNvbiYjMzQ7LAogICAgJiMzNDt1bnBvaXNvbl9tZW1vcnkmIzM0OywKICAgICYjMzQ7Zm9saW9fY2xlYXJfaHVnZXRsYl9od3BvaXNvbiYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBob3cgaGFyZHdhcmUgcG9pc29uZWQgKEhXUE9JU09OKSBwYWdlcyBhcmUgdHJhY2tlZCBhbmQgaGFuZGxlZCB3aXRoaW4gbGFyZ2UgZm9saW9zLCBzcGVjaWZpY2FsbHkgYWZmZWN0aW5nIGh1Z2V0bGJmcyBhbmQgZmlsZW1hcCByZWFkIG9wZXJhdGlvbnMuIEl0IGludHJvZHVjZXMgbmV3IGxvZ2ljIHRvIHRyYWNrIHBvaXNvbmVkIHBhZ2VzIHVzaW5nIGBmb2xpby1cdTAwM2VodWdldGxiX2h3cG9pc29uYCBhbmQgcmVwbGFjZXMgdGhlIGN1c3RvbSBgaHVnZXRsYmZzX3JlYWRfaXRlcmAgd2l0aCBgZ2VuZXJpY19maWxlX3JlYWRfaXRlcmAsIGhhbmRsaW5nIGh3cG9pc29uIGRpcmVjdGx5IGluIGBmaWxlbWFwX3JlYWRgLiBUaGVzZSBhcmUgcmVhY2hhYmxlLCBmdW5jdGlvbmFsIGNoYW5nZXMgaW4gY29yZSBtZW1vcnkgbWFuYWdlbWVudCBhbmQgaHVnZXRsYmZzLiBGdXp6aW5nIHNob3VsZCBmb2N1cyBvbiB0aGUgbmV3IGh3cG9pc29uIHRyYWNraW5nIGZ1bmN0aW9ucyBhbmQgdW5wb2lzb25pbmcgbG9naWMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNy0yNFQxODo0NjoxOC40MjU0ODg1MTVaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5MTQ0MjMyOTMzMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJNRU1PUllfRkFJTFVSRVwiLFxuICAgIFwiSFdQT0lTT05fSU5KRUNUXCIsXG4gICAgXCJIVUdFVExCRlNcIixcbiAgICBcIkhVR0VUTEJfUEFHRVwiLFxuICAgIFwiVFJBTlNQQVJFTlRfSFVHRVBBR0VcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJodWdldGxiX3BhZ2VfaHdwb2lzb25cIixcbiAgICBcImh1Z2V0bGJfdW5yZWZfcGFnZV9od3BvaXNvblwiLFxuICAgIFwidW5wb2lzb25fbWVtb3J5XCIsXG4gICAgXCJmb2xpb19jbGVhcl9odWdldGxiX2h3cG9pc29uXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgaG93IGhhcmR3YXJlIHBvaXNvbmVkIChIV1BPSVNPTikgcGFnZXMgYXJlIHRyYWNrZWQgYW5kIGhhbmRsZWQgd2l0aGluIGxhcmdlIGZvbGlvcywgc3BlY2lmaWNhbGx5IGFmZmVjdGluZyBodWdldGxiZnMgYW5kIGZpbGVtYXAgcmVhZCBvcGVyYXRpb25zLiBJdCBpbnRyb2R1Y2VzIG5ldyBsb2dpYyB0byB0cmFjayBwb2lzb25lZCBwYWdlcyB1c2luZyBgZm9saW8tXFx1MDAzZWh1Z2V0bGJfaHdwb2lzb25gIGFuZCByZXBsYWNlcyB0aGUgY3VzdG9tIGBodWdldGxiZnNfcmVhZF9pdGVyYCB3aXRoIGBnZW5lcmljX2ZpbGVfcmVhZF9pdGVyYCwgaGFuZGxpbmcgaHdwb2lzb24gZGlyZWN0bHkgaW4gYGZpbGVtYXBfcmVhZGAuIFRoZXNlIGFyZSByZWFjaGFibGUsIGZ1bmN0aW9uYWwgY2hhbmdlcyBpbiBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBodWdldGxiZnMuIEZ1enppbmcgc2hvdWxkIGZvY3VzIG9uIHRoZSBuZXcgaHdwb2lzb24gdHJhY2tpbmcgZnVuY3Rpb25zIGFuZCB1bnBvaXNvbmluZyBsb2dpYy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjRUMTg6NDY6MTguNDI1NDk4MzM1WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzIyMTg1MjUwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgMGZlNmRlNmMyZjA1NzY2NDIxN2Q5NmEzZGE3NzJhNDg2NjdlNTU2N1xcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgRnJpIEp1bCAyNCAxODo0NjoxNiAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9mcy9LY29uZmlnIGIvZnMvS2NvbmZpZ1xcbmluZGV4IGNmNmFlNjQ3NzZlNjJjLi5lZGRhYzRlZDIxNGIxMiAxMDA2NDRcXG4tLS0gYS9mcy9LY29uZmlnXFxuKysrIGIvZnMvS2NvbmZpZ1xcbkBAIC0yNzIsNyArMjcyLDcgQEAgZW5kaWYgIyBIVUdFVExCRlNcXG4gXFxuIGNvbmZpZyBIVUdFVExCX1BBR0VcXG4gXFx0ZGVmX2Jvb2wgSFVHRVRMQkZTXFxuLVxcdHNlbGVjdCBYQVJSQVlfTVVMVElcXG4rXFx0c2VsZWN0IExBUkdFX0ZPTElPXFxuIFxcbiBjb25maWcgSFVHRVRMQl9QQUdFX09QVElNSVpFX1ZNRU1NQVBcXG4gXFx0ZGVmX2Jvb2wgSFVHRVRMQl9QQUdFXFxuZGlmZiAtLWdpdCBhL2ZzL2h1Z2V0bGJmcy9pbm9kZS5jIGIvZnMvaHVnZXRsYmZzL2lub2RlLmNcXG5pbmRleCAyMTZlMWEwZGQwYjIzNy4uY2VmN2U2MWI4MjdkNzEgMTAwNjQ0XFxuLS0tIGEvZnMvaHVnZXRsYmZzL2lub2RlLmNcXG4rKysgYi9mcy9odWdldGxiZnMvaW5vZGUuY1xcbkBAIC0xODcsMTEzICsxODcsNiBAQCBodWdldGxiX2dldF91bm1hcHBlZF9hcmVhKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBsb25nIGFkZHIsXFxuIFxcdHJldHVybiBtbV9nZXRfdW5tYXBwZWRfYXJlYV92bWZsYWdzKGZpbGUsIGFkZHIwLCBsZW4sIHBnb2ZmLCBmbGFncywgMCk7XFxuIH1cXG4gXFxuLS8qXFxuLSAqIFNvbWVvbmUgd2FudHMgdG8gcmVhZCBAYnl0ZXMgZnJvbSBhIEhXUE9JU09OIGh1Z2V0bGIgQGZvbGlvIGZyb20gQG9mZnNldC5cXG4tICogUmV0dXJucyB0aGUgbWF4aW11bSBudW1iZXIgb2YgYnl0ZXMgb25lIGNhbiByZWFkIHdpdGhvdXQgdG91Y2hpbmcgdGhlIDFzdCByYXdcXG4tICogSFdQT0lTT04gcGFnZS5cXG4tICovXFxuLXN0YXRpYyBzaXplX3QgYWRqdXN0X3JhbmdlX2h3cG9pc29uKHN0cnVjdCBmb2xpbyAqZm9saW8sIHNpemVfdCBvZmZzZXQsXFxuLVxcdFxcdHNpemVfdCBieXRlcylcXG4te1xcbi1cXHRzdHJ1Y3QgcGFnZSAqcGFnZSA9IGZvbGlvX3BhZ2UoZm9saW8sIG9mZnNldCAvIFBBR0VfU0laRSk7XFxuLVxcdHNpemVfdCBzYWZlX2J5dGVzO1xcbi1cXG4tXFx0aWYgKGlzX3Jhd19od3BvaXNvbl9wYWdlX2luX2h1Z2VwYWdlKHBhZ2UpKVxcbi1cXHRcXHRyZXR1cm4gMDtcXG4tXFx0LyogU2FmZSB0byByZWFkIHRoZSByZW1haW5pbmcgYnl0ZXMgaW4gdGhpcyBwYWdlLiAqL1xcbi1cXHRzYWZlX2J5dGVzID0gUEFHRV9TSVpFIC0gKG9mZnNldCAlIFBBR0VfU0laRSk7XFxuLVxcdHBhZ2UrKztcXG4tXFxuLVxcdC8qIENoZWNrIGVhY2ggcmVtYWluaW5nIHBhZ2UgYXMgbG9uZyBhcyB3ZSBhcmUgbm90IGRvbmUgeWV0LiAqL1xcbi1cXHRmb3IgKDsgc2FmZV9ieXRlcyBcXHUwMDNjIGJ5dGVzOyBzYWZlX2J5dGVzICs9IFBBR0VfU0laRSwgcGFnZSsrKVxcbi1cXHRcXHRpZiAoaXNfcmF3X2h3cG9pc29uX3BhZ2VfaW5faHVnZXBhZ2UocGFnZSkpXFxuLVxcdFxcdFxcdGJyZWFrO1xcbi1cXG4tXFx0cmV0dXJuIG1pbihzYWZlX2J5dGVzLCBieXRlcyk7XFxuLX1cXG4tXFxuLS8qXFxuLSAqIFN1cHBvcnQgZm9yIHJlYWQoKSAtIEZpbmQgdGhlIHBhZ2UgYXR0YWNoZWQgdG8gZl9tYXBwaW5nIGFuZCBjb3B5IG91dCB0aGVcXG4tICogZGF0YS4gVGhpcyBwcm92aWRlcyBmdW5jdGlvbmFsaXR5IHNpbWlsYXIgdG8gZmlsZW1hcF9yZWFkKCkuXFxuLSAqL1xcbi1zdGF0aWMgc3NpemVfdCBodWdldGxiZnNfcmVhZF9pdGVyKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICp0bylcXG4te1xcbi1cXHRzdHJ1Y3QgZmlsZSAqZmlsZSA9IGlvY2ItXFx1MDAzZWtpX2ZpbHA7XFxuLVxcdHN0cnVjdCBoc3RhdGUgKmggPSBoc3RhdGVfZmlsZShmaWxlKTtcXG4tXFx0c3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcgPSBmaWxlLVxcdTAwM2VmX21hcHBpbmc7XFxuLVxcdHN0cnVjdCBpbm9kZSAqaW5vZGUgPSBtYXBwaW5nLVxcdTAwM2Vob3N0O1xcbi1cXHR1bnNpZ25lZCBsb25nIGluZGV4ID0gaW9jYi1cXHUwMDNla2lfcG9zIFxcdTAwM2VcXHUwMDNlIGh1Z2VfcGFnZV9zaGlmdChoKTtcXG4tXFx0dW5zaWduZWQgbG9uZyBvZmZzZXQgPSBpb2NiLVxcdTAwM2VraV9wb3MgXFx1MDAyNiB+aHVnZV9wYWdlX21hc2soaCk7XFxuLVxcdHVuc2lnbmVkIGxvbmcgZW5kX2luZGV4O1xcbi1cXHRsb2ZmX3QgaXNpemU7XFxuLVxcdHNzaXplX3QgcmV0dmFsID0gMDtcXG4tXFxuLVxcdHdoaWxlIChpb3ZfaXRlcl9jb3VudCh0bykpIHtcXG4tXFx0XFx0c3RydWN0IGZvbGlvICpmb2xpbztcXG4tXFx0XFx0c2l6ZV90IG5yLCBjb3BpZWQsIHdhbnQ7XFxuLVxcbi1cXHRcXHQvKiBuciBpcyB0aGUgbWF4aW11bSBudW1iZXIgb2YgYnl0ZXMgdG8gY29weSBmcm9tIHRoaXMgcGFnZSAqL1xcbi1cXHRcXHRuciA9IGh1Z2VfcGFnZV9zaXplKGgpO1xcbi1cXHRcXHRpc2l6ZSA9IGlfc2l6ZV9yZWFkKGlub2RlKTtcXG4tXFx0XFx0aWYgKCFpc2l6ZSlcXG4tXFx0XFx0XFx0YnJlYWs7XFxuLVxcdFxcdGVuZF9pbmRleCA9IChpc2l6ZSAtIDEpIFxcdTAwM2VcXHUwMDNlIGh1Z2VfcGFnZV9zaGlmdChoKTtcXG4tXFx0XFx0aWYgKGluZGV4IFxcdTAwM2UgZW5kX2luZGV4KVxcbi1cXHRcXHRcXHRicmVhaztcXG4tXFx0XFx0aWYgKGluZGV4ID09IGVuZF9pbmRleCkge1xcbi1cXHRcXHRcXHRuciA9ICgoaXNpemUgLSAxKSBcXHUwMDI2IH5odWdlX3BhZ2VfbWFzayhoKSkgKyAxO1xcbi1cXHRcXHRcXHRpZiAobnIgXFx1MDAzYz0gb2Zmc2V0KVxcbi1cXHRcXHRcXHRcXHRicmVhaztcXG4tXFx0XFx0fVxcbi1cXHRcXHRuciA9IG5yIC0gb2Zmc2V0O1xcbi1cXG4tXFx0XFx0LyogRmluZCB0aGUgZm9saW8gKi9cXG4tXFx0XFx0Zm9saW8gPSBmaWxlbWFwX2xvY2tfaHVnZXRsYl9mb2xpbyhoLCBtYXBwaW5nLCBpbmRleCk7XFxuLVxcdFxcdGlmIChJU19FUlIoZm9saW8pKSB7XFxuLVxcdFxcdFxcdC8qXFxuLVxcdFxcdFxcdCAqIFdlIGhhdmUgYSBIT0xFLCB6ZXJvIG91dCB0aGUgdXNlci1idWZmZXIgZm9yIHRoZVxcbi1cXHRcXHRcXHQgKiBsZW5ndGggb2YgdGhlIGhvbGUgb3IgcmVxdWVzdC5cXG4tXFx0XFx0XFx0ICovXFxuLVxcdFxcdFxcdGNvcGllZCA9IGlvdl9pdGVyX3plcm8obnIsIHRvKTtcXG4tXFx0XFx0fSBlbHNlIHtcXG4tXFx0XFx0XFx0Zm9saW9fdW5sb2NrKGZvbGlvKTtcXG4tXFxuLVxcdFxcdFxcdGlmICghZm9saW9fdGVzdF9od3BvaXNvbihmb2xpbykpXFxuLVxcdFxcdFxcdFxcdHdhbnQgPSBucjtcXG4tXFx0XFx0XFx0ZWxzZSB7XFxuLVxcdFxcdFxcdFxcdC8qXFxuLVxcdFxcdFxcdFxcdCAqIEFkanVzdCBob3cgbWFueSBieXRlcyBzYWZlIHRvIHJlYWQgd2l0aG91dFxcbi1cXHRcXHRcXHRcXHQgKiB0b3VjaGluZyB0aGUgMXN0IHJhdyBIV1BPSVNPTiBwYWdlIGFmdGVyXFxuLVxcdFxcdFxcdFxcdCAqIG9mZnNldC5cXG4tXFx0XFx0XFx0XFx0ICovXFxuLVxcdFxcdFxcdFxcdHdhbnQgPSBhZGp1c3RfcmFuZ2VfaHdwb2lzb24oZm9saW8sIG9mZnNldCwgbnIpO1xcbi1cXHRcXHRcXHRcXHRpZiAod2FudCA9PSAwKSB7XFxuLVxcdFxcdFxcdFxcdFxcdGZvbGlvX3B1dChmb2xpbyk7XFxuLVxcdFxcdFxcdFxcdFxcdHJldHZhbCA9IC1FSU87XFxuLVxcdFxcdFxcdFxcdFxcdGJyZWFrO1xcbi1cXHRcXHRcXHRcXHR9XFxuLVxcdFxcdFxcdH1cXG4tXFxuLVxcdFxcdFxcdC8qXFxuLVxcdFxcdFxcdCAqIFdlIGhhdmUgdGhlIGZvbGlvLCBjb3B5IGl0IHRvIHVzZXIgc3BhY2UgYnVmZmVyLlxcbi1cXHRcXHRcXHQgKi9cXG4tXFx0XFx0XFx0Y29waWVkID0gY29weV9mb2xpb190b19pdGVyKGZvbGlvLCBvZmZzZXQsIHdhbnQsIHRvKTtcXG4tXFx0XFx0XFx0Zm9saW9fcHV0KGZvbGlvKTtcXG4tXFx0XFx0fVxcbi1cXHRcXHRvZmZzZXQgKz0gY29waWVkO1xcbi1cXHRcXHRyZXR2YWwgKz0gY29waWVkO1xcbi1cXHRcXHRpZiAoY29waWVkICE9IG5yIFxcdTAwMjZcXHUwMDI2IGlvdl9pdGVyX2NvdW50KHRvKSkge1xcbi1cXHRcXHRcXHRpZiAoIXJldHZhbClcXG4tXFx0XFx0XFx0XFx0cmV0dmFsID0gLUVGQVVMVDtcXG4tXFx0XFx0XFx0YnJlYWs7XFxuLVxcdFxcdH1cXG4tXFx0XFx0aW5kZXggKz0gb2Zmc2V0IFxcdTAwM2VcXHUwMDNlIGh1Z2VfcGFnZV9zaGlmdChoKTtcXG4tXFx0XFx0b2Zmc2V0IFxcdTAwMjY9IH5odWdlX3BhZ2VfbWFzayhoKTtcXG4tXFx0fVxcbi1cXHRpb2NiLVxcdTAwM2VraV9wb3MgPSAoKGxvZmZfdClpbmRleCBcXHUwMDNjXFx1MDAzYyBodWdlX3BhZ2Vfc2hpZnQoaCkpICsgb2Zmc2V0O1xcbi1cXHRyZXR1cm4gcmV0dmFsO1xcbi19XFxuLVxcbiBzdGF0aWMgaW50IGh1Z2V0bGJmc193cml0ZV9iZWdpbihjb25zdCBzdHJ1Y3Qga2lvY2IgKmlvY2IsXFxuIFxcdFxcdFxcdHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxcbiBcXHRcXHRcXHRsb2ZmX3QgcG9zLCB1bnNpZ25lZCBsZW4sXFxuQEAgLTg4Myw2ICs3NzYsMTcgQEAgc3RhdGljIHN0cnVjdCBpbm9kZSAqaHVnZXRsYmZzX2dldF9yb290KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsXFxuIFxcdHJldHVybiBpbm9kZTtcXG4gfVxcbiBcXG4rc3RhdGljIHZvaWQgaHVnZXRsYmZzX2luaXRfcmVndWxhcl9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKVxcbit7XFxuK1xcdHN0cnVjdCBoc3RhdGUgKmhzdGF0ZSA9IGhzdGF0ZV9pbm9kZShpbm9kZSk7XFxuK1xcdHVuc2lnbmVkIGludCBvcmRlciA9IGh1Z2VfcGFnZV9vcmRlcihoc3RhdGUpO1xcbitcXG4rXFx0aW5vZGUtXFx1MDAzZWlfb3AgPSBcXHUwMDI2aHVnZXRsYmZzX2lub2RlX29wZXJhdGlvbnM7XFxuK1xcdGlub2RlLVxcdTAwM2VpX2ZvcCA9IFxcdTAwMjZodWdldGxiZnNfZmlsZV9vcGVyYXRpb25zO1xcbitcXHRtYXBwaW5nX3NldF9mb2xpb19vcmRlcl9yYW5nZShpbm9kZS1cXHUwMDNlaV9tYXBwaW5nLCBvcmRlciwgb3JkZXIpO1xcbitcXHRtYXBwaW5nX3NldF9hdXRob3JpdGF0aXZlKGlub2RlLVxcdTAwM2VpX21hcHBpbmcpO1xcbit9XFxuK1xcbiAvKlxcbiAgKiBIdWdldGxiZnMgaXMgbm90IHJlY2xhaW1hYmxlOyB0aGVyZWZvcmUgaXRzIGlfbW1hcF9yd3NlbSB3aWxsIG5ldmVyXFxuICAqIGJlIHRha2VuIGZyb20gcmVjbGFpbSAtLSB1bmxpa2UgcmVndWxhciBmaWxlc3lzdGVtcy4gVGhpcyBuZWVkcyBhblxcbkBAIC05MjYsOCArODMwLDcgQEAgc3RhdGljIHN0cnVjdCBpbm9kZSAqaHVnZXRsYmZzX2dldF9pbm9kZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxcbiBcXHRcXHRcXHRpbml0X3NwZWNpYWxfaW5vZGUoaW5vZGUsIG1vZGUsIGRldik7XFxuIFxcdFxcdFxcdGJyZWFrO1xcbiBcXHRcXHRjYXNlIFNfSUZSRUc6XFxuLVxcdFxcdFxcdGlub2RlLVxcdTAwM2VpX29wID0gXFx1MDAyNmh1Z2V0bGJmc19pbm9kZV9vcGVyYXRpb25zO1xcbi1cXHRcXHRcXHRpbm9kZS1cXHUwMDNlaV9mb3AgPSBcXHUwMDI2aHVnZXRsYmZzX2ZpbGVfb3BlcmF0aW9ucztcXG4rXFx0XFx0XFx0aHVnZXRsYmZzX2luaXRfcmVndWxhcl9pbm9kZShpbm9kZSk7XFxuIFxcdFxcdFxcdGJyZWFrO1xcbiBcXHRcXHRjYXNlIFNfSUZESVI6XFxuIFxcdFxcdFxcdGlub2RlLVxcdTAwM2VpX29wID0gXFx1MDAyNmh1Z2V0bGJmc19kaXJfaW5vZGVfb3BlcmF0aW9ucztcXG5AQCAtMTIwNiw3ICsxMTA5LDcgQEAgc3RhdGljIHZvaWQgaW5pdF9vbmNlKHZvaWQgKmZvbylcXG4gfVxcbiBcXG4gc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgaHVnZXRsYmZzX2ZpbGVfb3BlcmF0aW9ucyA9IHtcXG4tXFx0LnJlYWRfaXRlclxcdFxcdD0gaHVnZXRsYmZzX3JlYWRfaXRlcixcXG4rXFx0LnJlYWRfaXRlclxcdFxcdD0gZ2VuZXJpY19maWxlX3JlYWRfaXRlcixcXG4gXFx0Lm1tYXBcXHRcXHRcXHQ9IGh1Z2V0bGJmc19maWxlX21tYXAsXFxuIFxcdC5mc3luY1xcdFxcdFxcdD0gbm9vcF9mc3luYyxcXG4gXFx0LmdldF91bm1hcHBlZF9hcmVhXFx0PSBodWdldGxiX2dldF91bm1hcHBlZF9hcmVhLFxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaCBiL2luY2x1ZGUvbGludXgvaHVnZXRsYi5oXFxuaW5kZXggMmFiYWY5OTMyMWU5MGQuLjE4Nzg2NDJlNzVlYzUxIDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgvaHVnZXRsYi5oXFxuKysrIGIvaW5jbHVkZS9saW51eC9odWdldGxiLmhcXG5AQCAtMTY1LDcgKzE2NSw3IEBAIGJvb2wgaHVnZXRsYmZzX3BhZ2VjYWNoZV9wcmVzZW50KHN0cnVjdCBoc3RhdGUgKmgsXFxuIFxcdFxcdFxcdFxcdCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4gXFx0XFx0XFx0XFx0IHVuc2lnbmVkIGxvbmcgYWRkcmVzcyk7XFxuIFxcbi1zdHJ1Y3QgYWRkcmVzc19zcGFjZSAqaHVnZXRsYl9mb2xpb19tYXBwaW5nX2xvY2tfd3JpdGUoc3RydWN0IGZvbGlvICpmb2xpbyk7XFxuK3N0cnVjdCBhZGRyZXNzX3NwYWNlICpodWdldGxiX2ZvbGlvX21hcHBpbmdfbG9ja193cml0ZShjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcXG4gXFxuIGV4dGVybiBpbnQgbW92YWJsZV9naWdhbnRpY19wYWdlcyBfX3JlYWRfbW9zdGx5O1xcbiBleHRlcm4gaW50IHN5c2N0bF9odWdldGxiX3NobV9ncm91cCBfX3JlYWRfbW9zdGx5O1xcbkBAIC0yOTIsOCArMjkyLDcgQEAgc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGh1Z2V0bGJfdG90YWxfcGFnZXModm9pZClcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuLXN0YXRpYyBpbmxpbmUgc3RydWN0IGFkZHJlc3Nfc3BhY2UgKmh1Z2V0bGJfZm9saW9fbWFwcGluZ19sb2NrX3dyaXRlKFxcbi1cXHRcXHRcXHRcXHRcXHRcXHRcXHRzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbitzdGF0aWMgaW5saW5lIHN0cnVjdCBhZGRyZXNzX3NwYWNlICpodWdldGxiX2ZvbGlvX21hcHBpbmdfbG9ja193cml0ZShjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbiB7XFxuIFxcdHJldHVybiBOVUxMO1xcbiB9XFxuQEAgLTU5NSw4ICs1OTQsOCBAQCBlbnVtIGh1Z2V0bGJfcGFnZV9mbGFncyB7XFxuICNpZmRlZiBDT05GSUdfSFVHRVRMQl9QQUdFXFxuICNkZWZpbmUgVEVTVEhQQUdFRkxBRyh1bmFtZSwgZmxuYW1lKVxcdFxcdFxcdFxcdFxcXFxcXG4gc3RhdGljIF9fYWx3YXlzX2lubGluZVxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4tYm9vbCBmb2xpb190ZXN0X2h1Z2V0bGJfIyNmbG5hbWUoc3RydWN0IGZvbGlvICpmb2xpbylcXHRcXHRcXFxcXFxuLVxcdHtcXHR2b2lkICpwcml2YXRlID0gXFx1MDAyNmZvbGlvLVxcdTAwM2Vwcml2YXRlO1xcdFxcdFxcXFxcXG4rYm9vbCBmb2xpb190ZXN0X2h1Z2V0bGJfIyNmbG5hbWUoY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbylcXHRcXFxcXFxuK1xcdHtcXHRjb25zdCB2b2lkICpwcml2YXRlID0gXFx1MDAyNmZvbGlvLVxcdTAwM2Vwcml2YXRlO1xcdFxcdFxcXFxcXG4gXFx0XFx0cmV0dXJuIHRlc3RfYml0KEhQR18jI2ZsbmFtZSwgcHJpdmF0ZSk7XFx0XFx0XFxcXFxcbiBcXHR9XFxuIFxcbkBAIC02MTYsNyArNjE1LDcgQEAgdm9pZCBmb2xpb19jbGVhcl9odWdldGxiXyMjZmxuYW1lKHN0cnVjdCBmb2xpbyAqZm9saW8pXFx0XFx0XFxcXFxcbiAjZWxzZVxcbiAjZGVmaW5lIFRFU1RIUEFHRUZMQUcodW5hbWUsIGZsbmFtZSlcXHRcXHRcXHRcXHRcXFxcXFxuIHN0YXRpYyBpbmxpbmUgYm9vbFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4tZm9saW9fdGVzdF9odWdldGxiXyMjZmxuYW1lKHN0cnVjdCBmb2xpbyAqZm9saW8pXFx0XFx0XFxcXFxcbitmb2xpb190ZXN0X2h1Z2V0bGJfIyNmbG5hbWUoY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbylcXHRcXHRcXFxcXFxuIFxcdHsgcmV0dXJuIDA7IH1cXG4gXFxuICNkZWZpbmUgU0VUSFBBR0VGTEFHKHVuYW1lLCBmbG5hbWUpXFx0XFx0XFx0XFx0XFxcXFxcbkBAIC03MjcsNyArNzI2LDcgQEAgc3RhdGljIGlubGluZSBzdHJ1Y3QgaHVnZXBhZ2Vfc3VicG9vbCAqc3VicG9vbF9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKVxcbiBcXHRyZXR1cm4gSFVHRVRMQkZTX1NCKGlub2RlLVxcdTAwM2VpX3NiKS1cXHUwMDNlc3Bvb2w7XFxuIH1cXG4gXFxuLXN0YXRpYyBpbmxpbmUgc3RydWN0IGh1Z2VwYWdlX3N1YnBvb2wgKmh1Z2V0bGJfZm9saW9fc3VicG9vbChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbitzdGF0aWMgaW5saW5lIHN0cnVjdCBodWdlcGFnZV9zdWJwb29sICpodWdldGxiX2ZvbGlvX3N1YnBvb2woY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbylcXG4ge1xcbiBcXHRyZXR1cm4gZm9saW8tXFx1MDAzZV9odWdldGxiX3N1YnBvb2w7XFxuIH1cXG5AQCAtODU3LDcgKzg1Niw3IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBhcmNoX2hhc19odWdlX2Jvb3RtZW1fYWxsb2Modm9pZClcXG4gfVxcbiAjZW5kaWZcXG4gXFxuLXN0YXRpYyBpbmxpbmUgc3RydWN0IGhzdGF0ZSAqZm9saW9faHN0YXRlKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuK3N0YXRpYyBpbmxpbmUgc3RydWN0IGhzdGF0ZSAqZm9saW9faHN0YXRlKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuIHtcXG4gXFx0Vk1fQlVHX09OX0ZPTElPKCFmb2xpb190ZXN0X2h1Z2V0bGIoZm9saW8pLCBmb2xpbyk7XFxuIFxcdHJldHVybiBzaXplX3RvX2hzdGF0ZShmb2xpb19zaXplKGZvbGlvKSk7XFxuQEAgLTEwNzAsMTEgKzEwNjksNiBAQCB2b2lkIGh1Z2V0bGJfcmVnaXN0ZXJfbm9kZShzdHJ1Y3Qgbm9kZSAqbm9kZSk7XFxuIHZvaWQgaHVnZXRsYl91bnJlZ2lzdGVyX25vZGUoc3RydWN0IG5vZGUgKm5vZGUpO1xcbiAjZW5kaWZcXG4gXFxuLS8qXFxuLSAqIENoZWNrIGlmIGEgZ2l2ZW4gcmF3IEBwYWdlIGluIGEgaHVnZXBhZ2UgaXMgSFdQT0lTT04uXFxuLSAqL1xcbi1ib29sIGlzX3Jhd19od3BvaXNvbl9wYWdlX2luX2h1Z2VwYWdlKHN0cnVjdCBwYWdlICpwYWdlKTtcXG4tXFxuIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBodWdlX3BhZ2VfbWFza19hbGlnbihzdHJ1Y3QgZmlsZSAqZmlsZSlcXG4ge1xcbiBcXHRyZXR1cm4gUEFHRV9NQVNLIFxcdTAwMjYgfmh1Z2VfcGFnZV9tYXNrKGhzdGF0ZV9maWxlKGZpbGUpKTtcXG5AQCAtMTA4OCw3ICsxMDgyLDcgQEAgc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGh1Z2VfcGFnZV9tYXNrX2FsaWduKHN0cnVjdCBmaWxlICpmaWxlKVxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4tc3RhdGljIGlubGluZSBzdHJ1Y3QgaHVnZXBhZ2Vfc3VicG9vbCAqaHVnZXRsYl9mb2xpb19zdWJwb29sKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuK3N0YXRpYyBpbmxpbmUgc3RydWN0IGh1Z2VwYWdlX3N1YnBvb2wgKmh1Z2V0bGJfZm9saW9fc3VicG9vbChjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbiB7XFxuIFxcdHJldHVybiBOVUxMO1xcbiB9XFxuQEAgLTExNTcsNyArMTE1MSw3IEBAIHN0YXRpYyBpbmxpbmUgc3RydWN0IGhzdGF0ZSAqaHN0YXRlX3ZtYShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcXG4gXFx0cmV0dXJuIE5VTEw7XFxuIH1cXG4gXFxuLXN0YXRpYyBpbmxpbmUgc3RydWN0IGhzdGF0ZSAqZm9saW9faHN0YXRlKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuK3N0YXRpYyBpbmxpbmUgc3RydWN0IGhzdGF0ZSAqZm9saW9faHN0YXRlKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuIHtcXG4gXFx0cmV0dXJuIE5VTEw7XFxuIH1cXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tbV90eXBlcy5oIGIvaW5jbHVkZS9saW51eC9tbV90eXBlcy5oXFxuaW5kZXggYjE4YzJiMmU3ZDJjNjUuLmQ3YTliMGQ4YmJkZmIxIDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgvbW1fdHlwZXMuaFxcbisrKyBiL2luY2x1ZGUvbGludXgvbW1fdHlwZXMuaFxcbkBAIC0zODcsNyArMzg3LDcgQEAgdHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBtbV9pZF90O1xcbiAgKiBAX2h1Z2V0bGJfc3VicG9vbDogRG8gbm90IHVzZSBkaXJlY3RseSwgdXNlIGFjY2Vzc29yIGluIGh1Z2V0bGIuaC5cXG4gICogQF9odWdldGxiX2Nncm91cDogRG8gbm90IHVzZSBkaXJlY3RseSwgdXNlIGFjY2Vzc29yIGluIGh1Z2V0bGJfY2dyb3VwLmguXFxuICAqIEBfaHVnZXRsYl9jZ3JvdXBfcnN2ZDogRG8gbm90IHVzZSBkaXJlY3RseSwgdXNlIGFjY2Vzc29yIGluIGh1Z2V0bGJfY2dyb3VwLmguXFxuLSAqIEBfaHVnZXRsYl9od3BvaXNvbjogRG8gbm90IHVzZSBkaXJlY3RseSwgY2FsbCByYXdfaHdwX2xpc3RfaGVhZCgpLlxcbisgKiBAaHVnZXRsYl9od3BvaXNvbjogTGlzdCBvZiBwYWdlcyB3aXRoIGh3cG9pc29uLlxcbiAgKiBAX2RlZmVycmVkX2xpc3Q6IEZvbGlvcyB0byBiZSBzcGxpdCB1bmRlciBtZW1vcnkgcHJlc3N1cmUuXFxuICAqIEBfdW51c2VkX3NsYWJfb2JqX2V4dHM6IFBsYWNlaG9sZGVyIHRvIG1hdGNoIG9ial9leHRzIGluIHN0cnVjdCBzbGFiLlxcbiAgKlxcbkBAIC00OTksNyArNDk5LDcgQEAgc3RydWN0IGZvbGlvIHtcXG4gXFx0XFx0XFx0dm9pZCAqX2h1Z2V0bGJfc3VicG9vbDtcXG4gXFx0XFx0XFx0dm9pZCAqX2h1Z2V0bGJfY2dyb3VwO1xcbiBcXHRcXHRcXHR2b2lkICpfaHVnZXRsYl9jZ3JvdXBfcnN2ZDtcXG4tXFx0XFx0XFx0dm9pZCAqX2h1Z2V0bGJfaHdwb2lzb247XFxuK1xcdFxcdFxcdHN0cnVjdCBsbGlzdF9oZWFkIGh1Z2V0bGJfaHdwb2lzb247XFxuIFxcdC8qIHByaXZhdGU6IHRoZSB1bmlvbiB3aXRoIHN0cnVjdCBwYWdlIGlzIHRyYW5zaXRpb25hbCAqL1xcbiBcXHRcXHR9O1xcbiBcXHRcXHRzdHJ1Y3QgcGFnZSBfX3BhZ2VfMztcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmggYi9pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaFxcbmluZGV4IDcyMjNmNmY0ZTJiNDAzLi5iMTQ2YzUyMjg3NDFjMCAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaFxcbisrKyBiL2luY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oXFxuQEAgLTg5MywxNCArODkzLDE5IEBAIHN0YXRpYyBpbmxpbmUgaW50IFBhZ2VUcmFuc0NvbXBvdW5kKGNvbnN0IHN0cnVjdCBwYWdlICpwYWdlKVxcbiBURVNUUEFHRUZMQUdfRkFMU0UoVHJhbnNDb21wb3VuZCwgdHJhbnNjb21wb3VuZClcXG4gI2VuZGlmXFxuIFxcbi0jaWYgZGVmaW5lZChDT05GSUdfTUVNT1JZX0ZBSUxVUkUpIFxcdTAwMjZcXHUwMDI2IGRlZmluZWQoQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFKVxcbisjaWYgZGVmaW5lZChDT05GSUdfTUVNT1JZX0ZBSUxVUkUpIFxcdTAwMjZcXHUwMDI2IGRlZmluZWQoQ09ORklHX0xBUkdFX0ZPTElPKVxcbiAvKlxcbi0gKiBQYWdlSGFzSFdQb2lzb25lZCBpbmRpY2F0ZXMgdGhhdCBhdCBsZWFzdCBvbmUgc3VicGFnZSBpcyBod3BvaXNvbmVkIGluIHRoZVxcbi0gKiBjb21wb3VuZCBwYWdlLlxcbisgKiBmb2xpb19oYXNfaHdwb2lzb25lZCBpbmRpY2F0ZXMgdGhhdCBhdCBsZWFzdCBvbmUgcGFnZSBpcyBod3BvaXNvbmVkIGluIHRoZVxcbisgKiBmb2xpby4gIFRoYXQgcGFnZSB3aWxsIHVzdWFsbHkgYWxzbyBoYXZlIHRoZSBIV1BvaXNvbiBmbGFnIHNldCwgYnV0IHRoaXNcXG4rICogaXMgbm90IHBvc3NpYmxlIGZvciBmb2xpb3Mgd2hpY2ggaGF2ZSBIVk8gKHNlZSBtZW1vcnktZmFpbHVyZSBmb3IgdGhlXFxuKyAqIHNjaGVtZSB1c2VkIGluIHRoYXQgY2FzZSkuICBZb3UgcHJvYmFibHkgZG9uJ3Qgd2FudCB0byBjYWxsIHRoaXMgZGlyZWN0bHk7XFxuKyAqIHVzZSBmb2xpb19oYXNfaHdwb2lzb25lZF9wYWdlKCkgaW5zdGVhZC5cXG4gICpcXG4gICogVGhpcyBmbGFnIGlzIHNldCBieSBod3BvaXNvbiBoYW5kbGVyLiAgQ2xlYXJlZCBieSBUSFAgc3BsaXQgb3IgZnJlZSBwYWdlLlxcbiAgKi9cXG4gRk9MSU9fRkxBRyhoYXNfaHdwb2lzb25lZCwgRk9MSU9fU0VDT05EX1BBR0UpXFxuK0ZPTElPX1RFU1RfU0VUX0ZMQUcoaGFzX2h3cG9pc29uZWQsIEZPTElPX1NFQ09ORF9QQUdFKVxcbitGT0xJT19URVNUX0NMRUFSX0ZMQUcoaGFzX2h3cG9pc29uZWQsIEZPTElPX1NFQ09ORF9QQUdFKVxcbiAjZWxzZVxcbiBGT0xJT19GTEFHX0ZBTFNFKGhhc19od3BvaXNvbmVkKVxcbiAjZW5kaWZcXG5AQCAtMTA0MSw4ICsxMDQ2LDI1IEBAIFBBR0VfVFlQRV9PUFMoU2xhYiwgc2xhYiwgc2xhYilcXG4gXFxuICNpZmRlZiBDT05GSUdfSFVHRVRMQl9QQUdFXFxuIEZPTElPX1RZUEVfT1BTKGh1Z2V0bGIsIGh1Z2V0bGIpXFxuK1xcbitzdGF0aWMgaW5saW5lIGJvb2wgZm9saW9fdGVzdF9odWdlX3BvaXNvbihjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbit7XFxuK1xcdHJldHVybiAoUkVBRF9PTkNFKGZvbGlvLVxcdTAwM2VwYWdlLnBhZ2VfdHlwZSkgXFx1MDAzZVxcdTAwM2UgMjMpID09XFxuK1xcdFxcdCgoUEdUWV9odWdldGxiIFxcdTAwM2NcXHUwMDNjIDEpIHwgMSk7XFxuK31cXG4rXFxuK3N0YXRpYyBpbmxpbmUgdm9pZCBmb2xpb19zZXRfaHVnZV9wb2lzb24oc3RydWN0IGZvbGlvICpmb2xpbylcXG4re1xcbitcXHRmb2xpby1cXHUwMDNlcGFnZS5wYWdlX3R5cGUgfD0gKDEgXFx1MDAzY1xcdTAwM2MgMjMpO1xcbit9XFxuK1xcbitzdGF0aWMgaW5saW5lIHZvaWQgZm9saW9fY2xlYXJfaHVnZV9wb2lzb24oc3RydWN0IGZvbGlvICpmb2xpbylcXG4re1xcbitcXHRmb2xpby1cXHUwMDNlcGFnZS5wYWdlX3R5cGUgXFx1MDAyNj0gfigxIFxcdTAwM2NcXHUwMDNjIDIzKTtcXG4rfVxcbiAjZWxzZVxcbiBGT0xJT19URVNUX0ZMQUdfRkFMU0UoaHVnZXRsYilcXG4rRk9MSU9fVEVTVF9GTEFHX0ZBTFNFKGh1Z2VfcG9pc29uKVxcbiAjZW5kaWZcXG4gXFxuIFBBR0VfVFlQRV9PUFMoWnNtYWxsb2MsIHpzbWFsbG9jLCB6c21hbGxvYylcXG5AQCAtMTA2OCwxMCArMTA5MCwxNCBAQCBzdGF0aWMgaW5saW5lIGJvb2wgUGFnZUh1Z2UoY29uc3Qgc3RydWN0IHBhZ2UgKnBhZ2UpXFxuIFxcdHJldHVybiBmb2xpb190ZXN0X2h1Z2V0bGIocGFnZV9mb2xpbyhwYWdlKSk7XFxuIH1cXG4gXFxuK2Jvb2wgaHVnZXRsYl9wYWdlX2h3cG9pc29uKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8sIGNvbnN0IHN0cnVjdCBwYWdlICpwYWdlKTtcXG4rYm9vbCBodWdldGxiX3VucmVmX3BhZ2VfaHdwb2lzb24oY29uc3Qgc3RydWN0IHBhZ2UgKnBhZ2UpO1xcbitcXG4gLypcXG4tICogQ2hlY2sgaWYgYSBwYWdlIGlzIGN1cnJlbnRseSBtYXJrZWQgSFdQb2lzb25lZC4gTm90ZSB0aGF0IHRoaXMgY2hlY2sgaXNcXG4tICogYmVzdCBlZmZvcnQgb25seSBhbmQgaW5oZXJlbnRseSByYWN5OiB0aGVyZSBpcyBubyB3YXkgdG8gc3luY2hyb25pemUgd2l0aFxcbi0gKiBmYWlsaW5nIGhhcmR3YXJlLlxcbisgKiBDaGVjayBpZiBhIHBhZ2UgaXMgY3VycmVudGx5IG1hcmtlZCBIV1BvaXNvbmVkLiAgVGhpcyBjaGVjayBpcyBiZXN0XFxuKyAqIGVmZm9ydCBvbmx5IGFuZCBpbmhlcmVudGx5IHJhY3k6IHRoZXJlIGlzIG5vIHdheSB0byBzeW5jaHJvbml6ZSB3aXRoXFxuKyAqIGZhaWxpbmcgaGFyZHdhcmUuICBUaGUgY2FsbGVyIG1heSBub3QgaGF2ZSBhIHJlZmNvdW50IG9uIHRoZSBmb2xpb1xcbisgKiBjb250YWluaW5nIHRoZSBwYWdlLCBzbyB3ZSBtdXN0IGJlIGNhcmVmdWwgdG8gbm90IHRyaXAgYW55IGFzc2VydGlvbnMuXFxuICAqL1xcbiBzdGF0aWMgaW5saW5lIGJvb2wgaXNfcGFnZV9od3BvaXNvbihjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSlcXG4ge1xcbkBAIC0xMDgwLDEzICsxMTA2LDI2IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBpc19wYWdlX2h3cG9pc29uKGNvbnN0IHN0cnVjdCBwYWdlICpwYWdlKVxcbiBcXHRpZiAoUGFnZUhXUG9pc29uKHBhZ2UpKVxcbiBcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4gXFx0Zm9saW8gPSBwYWdlX2ZvbGlvKHBhZ2UpO1xcbi1cXHRyZXR1cm4gZm9saW9fdGVzdF9odWdldGxiKGZvbGlvKSBcXHUwMDI2XFx1MDAyNiBQYWdlSFdQb2lzb24oXFx1MDAyNmZvbGlvLVxcdTAwM2VwYWdlKTtcXG4rXFx0aWYgKGZvbGlvX3Rlc3RfaHVnZV9wb2lzb24oZm9saW8pKVxcbitcXHRcXHRyZXR1cm4gaHVnZXRsYl91bnJlZl9wYWdlX2h3cG9pc29uKHBhZ2UpO1xcbitcXHQvKiBJbiBjYXNlIHdlIHJhY2VkIHdpdGggaHVnZXRsYiB0cmFuc2ZlcnJpbmcgZmxhZ3MgKi9cXG4rXFx0cmV0dXJuIFBhZ2VIV1BvaXNvbihwYWdlKTtcXG4rfVxcbitcXG4rc3RhdGljIGlubGluZSBib29sIGlzX3JlZl9wYWdlX2h3cG9pc29uKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8sXFxuK1xcdFxcdGNvbnN0IHN0cnVjdCBwYWdlICpwYWdlKVxcbit7XFxuK1xcdGlmIChQYWdlSFdQb2lzb24ocGFnZSkpXFxuK1xcdFxcdHJldHVybiB0cnVlO1xcbitcXHRpZiAoZm9saW9fdGVzdF9odWdldGxiKGZvbGlvKSlcXG4rXFx0XFx0cmV0dXJuIGh1Z2V0bGJfcGFnZV9od3BvaXNvbihmb2xpbywgcGFnZSk7XFxuK1xcdHJldHVybiBmYWxzZTtcXG4gfVxcbiBcXG4tc3RhdGljIGlubGluZSBib29sIGZvbGlvX2NvbnRhaW5faHdwb2lzb25lZF9wYWdlKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuK3N0YXRpYyBpbmxpbmUgYm9vbCBmb2xpb19oYXNfaHdwb2lzb25lZF9wYWdlKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuIHtcXG4tXFx0cmV0dXJuIGZvbGlvX3Rlc3RfaHdwb2lzb24oZm9saW8pIHx8XFxuLVxcdCAgICAoZm9saW9fdGVzdF9sYXJnZShmb2xpbykgXFx1MDAyNlxcdTAwMjYgZm9saW9fdGVzdF9oYXNfaHdwb2lzb25lZChmb2xpbykpO1xcbitcXHRyZXR1cm4gUGFnZUhXUG9pc29uKFxcdTAwMjZmb2xpby1cXHUwMDNlcGFnZSkgfHxcXG4rXFx0ICAgICAgIChmb2xpb190ZXN0X2xhcmdlKGZvbGlvKSBcXHUwMDI2XFx1MDAyNiBmb2xpb190ZXN0X2hhc19od3BvaXNvbmVkKGZvbGlvKSk7XFxuIH1cXG4gXFxuIGJvb2wgaXNfZnJlZV9idWRkeV9wYWdlKGNvbnN0IHN0cnVjdCBwYWdlICpwYWdlKTtcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wYWdlbWFwLmggYi9pbmNsdWRlL2xpbnV4L3BhZ2VtYXAuaFxcbmluZGV4IDJjMzcxOGQ1OTJkNmRkLi42ZmRlZTViMDM2MjFiOSAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L3BhZ2VtYXAuaFxcbisrKyBiL2luY2x1ZGUvbGludXgvcGFnZW1hcC5oXFxuQEAgLTIxMCw2ICsyMTAsNyBAQCBlbnVtIG1hcHBpbmdfZmxhZ3Mge1xcbiBcXHRBU19XUklURUJBQ0tfTUFZX0RFQURMT0NLX09OX1JFQ0xBSU0gPSA5LFxcbiBcXHRBU19LRVJORUxfRklMRSA9IDEwLFxcdC8qIG1hcHBpbmcgZm9yIGEgZmFrZSBrZXJuZWwgZmlsZSB0aGF0IHNob3VsZG4ndFxcbiBcXHRcXHRcXHRcXHQgICBhY2NvdW50IHVzYWdlIHRvIHVzZXIgY2dyb3VwcyAqL1xcbitcXHRBU19BVVRIT1JJVEFUSVZFID0gMTEsXFx0LyogSWYgd2UgbWlzcyBpbiB0aGUgcGFnZSBjYWNoZSwgaXQncyBhIGhvbGUgKi9cXG4gXFx0LyogQml0cyAxNi0yNSBhcmUgdXNlZCBmb3IgRk9MSU9fT1JERVIgKi9cXG4gXFx0QVNfRk9MSU9fT1JERVJfQklUUyA9IDUsXFxuIFxcdEFTX0ZPTElPX09SREVSX01JTiA9IDE2LFxcbkBAIC0zNDUsNiArMzQ2LDE2IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBtYXBwaW5nX3dyaXRlYmFja19tYXlfZGVhZGxvY2tfb25fcmVjbGFpbShjb25zdCBzdHJ1Y3QgYWRkcmVzXFxuIFxcdHJldHVybiB0ZXN0X2JpdChBU19XUklURUJBQ0tfTUFZX0RFQURMT0NLX09OX1JFQ0xBSU0sIFxcdTAwMjZtYXBwaW5nLVxcdTAwM2VmbGFncyk7XFxuIH1cXG4gXFxuK3N0YXRpYyBpbmxpbmUgdm9pZCBtYXBwaW5nX3NldF9hdXRob3JpdGF0aXZlKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nKVxcbit7XFxuK1xcdHNldF9iaXQoQVNfQVVUSE9SSVRBVElWRSwgXFx1MDAyNm1hcHBpbmctXFx1MDAzZWZsYWdzKTtcXG4rfVxcbitcXG4rc3RhdGljIGlubGluZSBib29sIG1hcHBpbmdfaXNfYXV0aG9yaXRhdGl2ZShjb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZylcXG4re1xcbitcXHRyZXR1cm4gdGVzdF9iaXQoQVNfQVVUSE9SSVRBVElWRSwgXFx1MDAyNm1hcHBpbmctXFx1MDAzZWZsYWdzKTtcXG4rfVxcbitcXG4gc3RhdGljIGlubGluZSBnZnBfdCBtYXBwaW5nX2dmcF9tYXNrKGNvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nKVxcbiB7XFxuIFxcdHJldHVybiBtYXBwaW5nLVxcdTAwM2VnZnBfbWFzaztcXG5AQCAtMzczLDcgKzM4NCw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBtYXBwaW5nX3NldF9nZnBfbWFzayhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbSwgZ2ZwX3QgbWFzaylcXG4gICogYXNzdW1wdGlvbnMgYWJvdXQgbWF4aW11bSBvcmRlciBpZiBUSFAgYXJlIGRpc2FibGVkLCBidXQgOCBzZWVtcyBsaWtlXFxuICAqIGEgZ29vZCBvcmRlciAodGhhdCdzIDFNQiBpZiB5b3UncmUgdXNpbmcgNGtCIHBhZ2VzKVxcbiAgKi9cXG4tI2lmZGVmIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRVxcbisjaWZkZWYgQ09ORklHX0ZJTEVNQVBfTEFSR0VfRk9MSU9cXG4gI2RlZmluZSBQUkVGRVJSRURfTUFYX1BBR0VDQUNIRV9PUkRFUlxcdEhQQUdFX1BNRF9PUkRFUlxcbiAjZWxzZVxcbiAjZGVmaW5lIFBSRUZFUlJFRF9NQVhfUEFHRUNBQ0hFX09SREVSXFx0OFxcbkBAIC0zOTQsNyArNDA1LDcgQEAgc3RhdGljIGlubGluZSB2b2lkIG1hcHBpbmdfc2V0X2dmcF9tYXNrKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptLCBnZnBfdCBtYXNrKVxcbiAgKi9cXG4gc3RhdGljIGlubGluZSBzaXplX3QgbWFwcGluZ19tYXhfZm9saW9fc2l6ZV9zdXBwb3J0ZWQodm9pZClcXG4ge1xcbi1cXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UpKVxcbitcXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfRklMRU1BUF9MQVJHRV9GT0xJTykpXFxuIFxcdFxcdHJldHVybiAxVSBcXHUwMDNjXFx1MDAzYyAoUEFHRV9TSElGVCArIE1BWF9QQUdFQ0FDSEVfT1JERVIpO1xcbiBcXHRyZXR1cm4gUEFHRV9TSVpFO1xcbiB9XFxuQEAgLTQwNSwyOSArNDE2LDIzIEBAIHN0YXRpYyBpbmxpbmUgc2l6ZV90IG1hcHBpbmdfbWF4X2ZvbGlvX3NpemVfc3VwcG9ydGVkKHZvaWQpXFxuICAqIEBtaW46IE1pbmltdW0gZm9saW8gb3JkZXIgKGJldHdlZW4gMC1NQVhfUEFHRUNBQ0hFX09SREVSIGluY2x1c2l2ZSkuXFxuICAqIEBtYXg6IE1heGltdW0gZm9saW8gb3JkZXIgKGJldHdlZW4gQG1pbi1NQVhfUEFHRUNBQ0hFX09SREVSIGluY2x1c2l2ZSkuXFxuICAqXFxuLSAqIFRoZSBmaWxlc3lzdGVtIHNob3VsZCBjYWxsIHRoaXMgZnVuY3Rpb24gaW4gaXRzIGlub2RlIGNvbnN0cnVjdG9yIHRvXFxuLSAqIGluZGljYXRlIHdoaWNoIGJhc2Ugc2l6ZSAobWluKSBhbmQgbWF4aW11bSBzaXplIChtYXgpIG9mIGZvbGlvIHRoZSBWRlNcXG4tICogY2FuIHVzZSB0byBjYWNoZSB0aGUgY29udGVudHMgb2YgdGhlIGZpbGUuICBUaGlzIHNob3VsZCBvbmx5IGJlIHVzZWRcXG4tICogaWYgdGhlIGZpbGVzeXN0ZW0gbmVlZHMgc3BlY2lhbCBoYW5kbGluZyBvZiBmb2xpbyBzaXplcyAoaWUgdGhlcmUgaXNcXG4tICogc29tZXRoaW5nIHRoZSBjb3JlIGNhbm5vdCBrbm93KS5cXG4rICogVGhlIGZpbGVzeXN0ZW0gc2hvdWxkIGNhbGwgdGhpcyBmdW5jdGlvbiBpbiBpdHMgaW5vZGUgY29uc3RydWN0b3JcXG4rICogdG8gaW5kaWNhdGUgd2hpY2ggc2l6ZSBmb2xpb3MgY2FuIGJlIHVzZWQgdG8gY2FjaGUgdGhlIGNvbnRlbnRzIG9mXFxuKyAqIHRoZSBpbm9kZS4gIFRoaXMgc2hvdWxkIG9ubHkgYmUgdXNlZCBpZiB0aGUgZmlsZXN5c3RlbSBuZWVkcyBzcGVjaWFsXFxuKyAqIGhhbmRsaW5nIG9mIGZvbGlvIHNpemVzIChpZSB0aGVyZSBpcyBzb21ldGhpbmcgdGhlIGNvcmUgY2Fubm90IGtub3cpLlxcbiAgKiBEbyBub3QgdHVuZSBpdCBiYXNlZCBvbiwgZWcsIGlfc2l6ZS5cXG4gICpcXG4rICogaHVnZXRsYiBjYWxscyB0aGlzIHdpdGggb3JkZXJzIGxhcmdlciB0aGFuIE1BWF9QQUdFQ0FDSEVfT1JERVIuXFxuKyAqIE5vcm1hbCBmaWxlc3lzdGVtcyBzaG91bGQgbm90IGRvIHRoaXMuXFxuKyAqXFxuICAqIENvbnRleHQ6IFRoaXMgc2hvdWxkIG5vdCBiZSBjYWxsZWQgd2hpbGUgdGhlIGlub2RlIGlzIGFjdGl2ZSBhcyBpdFxcbiAgKiBpcyBub24tYXRvbWljLlxcbiAgKi9cXG4gc3RhdGljIGlubGluZSB2b2lkIG1hcHBpbmdfc2V0X2ZvbGlvX29yZGVyX3JhbmdlKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxcbi1cXHRcXHRcXHRcXHRcXHRcXHQgdW5zaWduZWQgaW50IG1pbixcXG4tXFx0XFx0XFx0XFx0XFx0XFx0IHVuc2lnbmVkIGludCBtYXgpXFxuK1xcdFxcdHVuc2lnbmVkIGludCBtaW4sIHVuc2lnbmVkIGludCBtYXgpXFxuIHtcXG4tXFx0aWYgKCFJU19FTkFCTEVEKENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSkpXFxuK1xcdGlmICghSVNfRU5BQkxFRChDT05GSUdfRklMRU1BUF9MQVJHRV9GT0xJTykpXFxuIFxcdFxcdHJldHVybjtcXG4tXFxuLVxcdGlmIChtaW4gXFx1MDAzZSBNQVhfUEFHRUNBQ0hFX09SREVSKVxcbi1cXHRcXHRtaW4gPSBNQVhfUEFHRUNBQ0hFX09SREVSO1xcbi1cXG4tXFx0aWYgKG1heCBcXHUwMDNlIE1BWF9QQUdFQ0FDSEVfT1JERVIpXFxuLVxcdFxcdG1heCA9IE1BWF9QQUdFQ0FDSEVfT1JERVI7XFxuLVxcbiBcXHRpZiAobWF4IFxcdTAwM2MgbWluKVxcbiBcXHRcXHRtYXggPSBtaW47XFxuIFxcbkBAIC00NjAsNyArNDY1LDcgQEAgc3RhdGljIGlubGluZSB2b2lkIG1hcHBpbmdfc2V0X2xhcmdlX2ZvbGlvcyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZylcXG4gc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnRcXG4gbWFwcGluZ19tYXhfZm9saW9fb3JkZXIoY29uc3Qgc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcpXFxuIHtcXG4tXFx0aWYgKCFJU19FTkFCTEVEKENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSkpXFxuK1xcdGlmICghSVNfRU5BQkxFRChDT05GSUdfRklMRU1BUF9MQVJHRV9GT0xJTykpXFxuIFxcdFxcdHJldHVybiAwO1xcbiBcXHRyZXR1cm4gKG1hcHBpbmctXFx1MDAzZWZsYWdzIFxcdTAwMjYgQVNfRk9MSU9fT1JERVJfTUFYX01BU0spIFxcdTAwM2VcXHUwMDNlIEFTX0ZPTElPX09SREVSX01BWDtcXG4gfVxcbkBAIC00NjgsNyArNDczLDcgQEAgbWFwcGluZ19tYXhfZm9saW9fb3JkZXIoY29uc3Qgc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcpXFxuIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50XFxuIG1hcHBpbmdfbWluX2ZvbGlvX29yZGVyKGNvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nKVxcbiB7XFxuLVxcdGlmICghSVNfRU5BQkxFRChDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UpKVxcbitcXHRpZiAoIUlTX0VOQUJMRUQoQ09ORklHX0ZJTEVNQVBfTEFSR0VfRk9MSU8pKVxcbiBcXHRcXHRyZXR1cm4gMDtcXG4gXFx0cmV0dXJuIChtYXBwaW5nLVxcdTAwM2VmbGFncyBcXHUwMDI2IEFTX0ZPTElPX09SREVSX01JTl9NQVNLKSBcXHUwMDNlXFx1MDAzZSBBU19GT0xJT19PUkRFUl9NSU47XFxuIH1cXG5AQCAtNTI0LDcgKzUyOSw3IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBtYXBwaW5nX2xhcmdlX2ZvbGlvX3N1cHBvcnQoY29uc3Qgc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpXFxuICAqXFxuICAqIFJldHVybjogVHJ1ZSBpZiBQTUQtc2l6ZWQgZm9saW9zIGFyZSBzdXBwb3J0ZWQsIG90aGVyd2lzZSBmYWxzZS5cXG4gICovXFxuLSNpZmRlZiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VcXG4rI2lmZGVmIENPTkZJR19GSUxFTUFQX0xBUkdFX0ZPTElPXFxuIHN0YXRpYyBpbmxpbmUgYm9vbCBtYXBwaW5nX3BtZF9mb2xpb19zdXBwb3J0KGNvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nKVxcbiB7XFxuIFxcdC8qIEFTX0ZPTElPX09SREVSIGlzIG9ubHkgcmVhc29uYWJsZSBmb3IgcGFnZWNhY2hlIGZvbGlvcyAqL1xcbmRpZmYgLS1naXQgYS9tbS9LY29uZmlnIGIvbW0vS2NvbmZpZ1xcbmluZGV4IDllMGNhNDgyNDkwNTRmLi5lNjY2ZGQxNGNhMGMzZCAxMDA2NDRcXG4tLS0gYS9tbS9LY29uZmlnXFxuKysrIGIvbW0vS2NvbmZpZ1xcbkBAIC04NDMsMTEgKzg0MywxNSBAQCBjb25maWcgUEVSU0lTVEVOVF9IVUdFX1pFUk9fRk9MSU9cXG4gY29uZmlnIE1NX0lEXFxuIFxcdGRlZl9ib29sIG5cXG4gXFxuK2NvbmZpZyBMQVJHRV9GT0xJT1xcbitcXHRkZWZfYm9vbCBuXFxuK1xcdHNlbGVjdCBYQVJSQVlfTVVMVElcXG4rXFxuIG1lbnVjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VcXG4gXFx0Ym9vbCBcXFwiVHJhbnNwYXJlbnQgSHVnZXBhZ2UgU3VwcG9ydFxcXCJcXG4gXFx0ZGVwZW5kcyBvbiBIQVZFX0FSQ0hfVFJBTlNQQVJFTlRfSFVHRVBBR0UgXFx1MDAyNlxcdTAwMjYgIVBSRUVNUFRfUlRcXG4gXFx0c2VsZWN0IENPTVBBQ1RJT05cXG4tXFx0c2VsZWN0IFhBUlJBWV9NVUxUSVxcbitcXHRzZWxlY3QgTEFSR0VfRk9MSU9cXG4gXFx0c2VsZWN0IE1NX0lEXFxuIFxcdGhlbHBcXG4gXFx0ICBUcmFuc3BhcmVudCBIdWdlcGFnZXMgYWxsb3dzIHRoZSBrZXJuZWwgdG8gdXNlIGh1Z2UgcGFnZXMgYW5kXFxuZGlmZiAtLWdpdCBhL21tL2ZpbGVtYXAuYyBiL21tL2ZpbGVtYXAuY1xcbmluZGV4IDU4ZWI5ZDI0MDY0MzQ4Li41YThjYzIwZTYyNGU0ZCAxMDA2NDRcXG4tLS0gYS9tbS9maWxlbWFwLmNcXG4rKysgYi9tbS9maWxlbWFwLmNcXG5AQCAtMjQ4Myw2ICsyNDgzLDggQEAgc3RhdGljIHZvaWQgZmlsZW1hcF9nZXRfcmVhZF9iYXRjaChzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcXG4gXFxuIFxcdFxcdGlmICghZm9saW9fYmF0Y2hfYWRkKGZiYXRjaCwgZm9saW8pKVxcbiBcXHRcXHRcXHRicmVhaztcXG4rXFx0XFx0aWYgKGZvbGlvX2hhc19od3BvaXNvbmVkX3BhZ2UoZm9saW8pKVxcbitcXHRcXHRcXHRicmVhaztcXG4gXFx0XFx0aWYgKCFmb2xpb190ZXN0X3VwdG9kYXRlKGZvbGlvKSlcXG4gXFx0XFx0XFx0YnJlYWs7XFxuIFxcdFxcdGlmIChmb2xpb190ZXN0X3JlYWRhaGVhZChmb2xpbykpXFxuQEAgLTI2OTUsNiArMjY5Nyw4IEBAIHN0YXRpYyBpbnQgZmlsZW1hcF9nZXRfcGFnZXMoc3RydWN0IGtpb2NiICppb2NiLCBzaXplX3QgY291bnQsXFxuIFxcdGlmICghZm9saW9fYmF0Y2hfY291bnQoZmJhdGNoKSkge1xcbiBcXHRcXHRERUZJTkVfUkVBREFIRUFEKHJhY3RsLCBmaWxwLCBcXHUwMDI2ZmlscC1cXHUwMDNlZl9yYSwgbWFwcGluZywgaW5kZXgpO1xcbiBcXG4rXFx0XFx0aWYgKG1hcHBpbmdfaXNfYXV0aG9yaXRhdGl2ZShtYXBwaW5nKSlcXG4rXFx0XFx0XFx0cmV0dXJuIDA7XFxuIFxcdFxcdGlmIChpb2NiLVxcdTAwM2VraV9mbGFncyBcXHUwMDI2IElPQ0JfTk9JTylcXG4gXFx0XFx0XFx0cmV0dXJuIC1FQUdBSU47XFxuIFxcdFxcdGlmIChpb2NiLVxcdTAwM2VraV9mbGFncyBcXHUwMDI2IElPQ0JfTk9XQUlUKVxcbkBAIC0yNzQ5LDYgKzI3NTMsMjkgQEAgc3RhdGljIGlubGluZSBib29sIHBvc19zYW1lX2ZvbGlvKGxvZmZfdCBwb3MxLCBsb2ZmX3QgcG9zMiwgc3RydWN0IGZvbGlvICpmb2xpbylcXG4gXFx0cmV0dXJuIChwb3MxIFxcdTAwM2VcXHUwMDNlIHNoaWZ0ID09IHBvczIgXFx1MDAzZVxcdTAwM2Ugc2hpZnQpO1xcbiB9XFxuIFxcbitzdGF0aWMgc2l6ZV90IGFkanVzdF9yYW5nZV9od3BvaXNvbihjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzaXplX3Qgb2Zmc2V0LFxcbitcXHRcXHRzaXplX3QgYnl0ZXMpXFxuK3tcXG4rXFx0Y29uc3Qgc3RydWN0IHBhZ2UgKnBhZ2UgPSBmb2xpb19wYWdlKGZvbGlvLCBvZmZzZXQgLyBQQUdFX1NJWkUpO1xcbitcXHRzaXplX3Qgc2FmZV9ieXRlcztcXG4rXFxuK1xcdGlmICghZm9saW9faGFzX2h3cG9pc29uZWRfcGFnZShmb2xpbykpXFxuK1xcdFxcdHJldHVybiBieXRlcztcXG4rXFx0aWYgKGlzX3JlZl9wYWdlX2h3cG9pc29uKGZvbGlvLCBwYWdlKSlcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcbitcXHQvKiBTYWZlIHRvIHJlYWQgdGhlIHJlbWFpbmluZyBieXRlcyBpbiB0aGlzIHBhZ2UuICovXFxuK1xcdHNhZmVfYnl0ZXMgPSBQQUdFX1NJWkUgLSAob2Zmc2V0ICUgUEFHRV9TSVpFKTtcXG4rXFx0cGFnZSsrO1xcbitcXG4rXFx0LyogQ2hlY2sgZWFjaCByZW1haW5pbmcgcGFnZSBhcyBsb25nIGFzIHdlIGFyZSBub3QgZG9uZSB5ZXQuICovXFxuK1xcdGZvciAoOyBzYWZlX2J5dGVzIFxcdTAwM2MgYnl0ZXM7IHNhZmVfYnl0ZXMgKz0gUEFHRV9TSVpFLCBwYWdlKyspXFxuK1xcdFxcdGlmIChpc19yZWZfcGFnZV9od3BvaXNvbihmb2xpbywgcGFnZSkpXFxuK1xcdFxcdFxcdGJyZWFrO1xcbitcXG4rXFx0cmV0dXJuIG1pbihzYWZlX2J5dGVzLCBieXRlcyk7XFxuK31cXG4rXFxuIHN0YXRpYyB2b2lkIGZpbGVtYXBfZW5kX2Ryb3BiZWhpbmRfcmVhZChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbiB7XFxuIFxcdGlmICghZm9saW9fdGVzdF9kcm9wYmVoaW5kKGZvbGlvKSlcXG5AQCAtMjgyOCw2ICsyODU1LDIyIEBAIHNzaXplX3QgZmlsZW1hcF9yZWFkKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICppdGVyLFxcbiBcXHRcXHRcXHRnb3RvIHB1dF9mb2xpb3M7XFxuIFxcdFxcdGVuZF9vZmZzZXQgPSBtaW5fdChsb2ZmX3QsIGlzaXplLCBpb2NiLVxcdTAwM2VraV9wb3MgKyBpdGVyLVxcdTAwM2Vjb3VudCk7XFxuIFxcbitcXHRcXHRpZiAoIWZvbGlvX2JhdGNoX2NvdW50KFxcdTAwMjZmYmF0Y2gpKSB7XFxuK1xcdFxcdFxcdHNpemVfdCBmc2l6ZSA9IG1hcHBpbmdfbWluX2ZvbGlvX25yYnl0ZXMobWFwcGluZyk7XFxuK1xcdFxcdFxcdHNpemVfdCBvZmZzZXQgPSBpb2NiLVxcdTAwM2VraV9wb3MgXFx1MDAyNiAoZnNpemUgLSAxKTtcXG4rXFx0XFx0XFx0c2l6ZV90IGJ5dGVzID0gbWluX3QobG9mZl90LCBlbmRfb2Zmc2V0IC0gaW9jYi1cXHUwMDNla2lfcG9zLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgIGZzaXplIC0gb2Zmc2V0KTtcXG4rXFx0XFx0XFx0c2l6ZV90IGNvcGllZCA9IGlvdl9pdGVyX3plcm8oYnl0ZXMsIGl0ZXIpO1xcbitcXG4rXFx0XFx0XFx0YWxyZWFkeV9yZWFkICs9IGNvcGllZDtcXG4rXFx0XFx0XFx0aW9jYi1cXHUwMDNla2lfcG9zICs9IGNvcGllZDtcXG4rXFx0XFx0XFx0bGFzdF9wb3MgPSBpb2NiLVxcdTAwM2VraV9wb3M7XFxuK1xcbitcXHRcXHRcXHRpZiAoY29waWVkIFxcdTAwM2MgYnl0ZXMpXFxuK1xcdFxcdFxcdFxcdGVycm9yID0gLUVGQVVMVDtcXG4rXFx0XFx0XFx0Y29udGludWU7XFxuK1xcdFxcdH1cXG4rXFxuIFxcdFxcdC8qXFxuIFxcdFxcdCAqIE9uY2Ugd2Ugc3RhcnQgY29weWluZyBkYXRhLCB3ZSBkb24ndCB3YW50IHRvIGJlIHRvdWNoaW5nIGFueVxcbiBcXHRcXHQgKiBjYWNoZWxpbmVzIHRoYXQgbWlnaHQgYmUgY29udGVuZGVkOlxcbkBAIC0yODYyLDE0ICsyOTA1LDE4IEBAIHNzaXplX3QgZmlsZW1hcF9yZWFkKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICppdGVyLFxcbiBcXHRcXHRcXHRpZiAod3JpdGFibHlfbWFwcGVkKVxcbiBcXHRcXHRcXHRcXHRmbHVzaF9kY2FjaGVfZm9saW8oZm9saW8pO1xcbiBcXG4tXFx0XFx0XFx0Y29waWVkID0gY29weV9mb2xpb190b19pdGVyKGZvbGlvLCBvZmZzZXQsIGJ5dGVzLCBpdGVyKTtcXG4rXFx0XFx0XFx0Y29waWVkID0gYWRqdXN0X3JhbmdlX2h3cG9pc29uKGZvbGlvLCBvZmZzZXQsIGJ5dGVzKTtcXG4rXFx0XFx0XFx0aWYgKGNvcGllZCBcXHUwMDNjIGJ5dGVzKVxcbitcXHRcXHRcXHRcXHRlcnJvciA9IC1FSU87XFxuK1xcdFxcdFxcdGNvcGllZCA9IGNvcHlfZm9saW9fdG9faXRlcihmb2xpbywgb2Zmc2V0LCBjb3BpZWQsIGl0ZXIpO1xcbiBcXG4gXFx0XFx0XFx0YWxyZWFkeV9yZWFkICs9IGNvcGllZDtcXG4gXFx0XFx0XFx0aW9jYi1cXHUwMDNla2lfcG9zICs9IGNvcGllZDtcXG4gXFx0XFx0XFx0bGFzdF9wb3MgPSBpb2NiLVxcdTAwM2VraV9wb3M7XFxuIFxcbiBcXHRcXHRcXHRpZiAoY29waWVkIFxcdTAwM2MgYnl0ZXMpIHtcXG4tXFx0XFx0XFx0XFx0ZXJyb3IgPSAtRUZBVUxUO1xcbitcXHRcXHRcXHRcXHRpZiAoIWVycm9yKVxcbitcXHRcXHRcXHRcXHRcXHRlcnJvciA9IC1FRkFVTFQ7XFxuIFxcdFxcdFxcdFxcdGJyZWFrO1xcbiBcXHRcXHRcXHR9XFxuIFxcdFxcdH1cXG5kaWZmIC0tZ2l0IGEvbW0vaHVnZV9tZW1vcnkuYyBiL21tL2h1Z2VfbWVtb3J5LmNcXG5pbmRleCAyYmNjYjBhNTNhMGE2MC4uMzUzMzQwMzA5MTA3NGMgMTAwNjQ0XFxuLS0tIGEvbW0vaHVnZV9tZW1vcnkuY1xcbisrKyBiL21tL2h1Z2VfbWVtb3J5LmNcXG5AQCAtNDQxMyw3ICs0NDEzLDcgQEAgc3RhdGljIGJvb2wgdGhwX3VuZGVydXNlZChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbiBcXHRpZiAoa2h1Z2VwYWdlZF9tYXhfcHRlc19ub25lID09IEhQQUdFX1BNRF9OUiAtIDEpXFxuIFxcdFxcdHJldHVybiBmYWxzZTtcXG4gXFxuLVxcdGlmIChmb2xpb19jb250YWluX2h3cG9pc29uZWRfcGFnZShmb2xpbykpXFxuK1xcdGlmIChmb2xpb19oYXNfaHdwb2lzb25lZF9wYWdlKGZvbGlvKSlcXG4gXFx0XFx0cmV0dXJuIGZhbHNlO1xcbiBcXG4gXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIGZvbGlvX25yX3BhZ2VzKGZvbGlvKTsgaSsrKSB7XFxuZGlmZiAtLWdpdCBhL21tL2h1Z2V0bGIuYyBiL21tL2h1Z2V0bGIuY1xcbmluZGV4IDU3MTIxMmI4MDgzNWVjLi5hYWFjNmUyYWY0YzI0YSAxMDA2NDRcXG4tLS0gYS9tbS9odWdldGxiLmNcXG4rKysgYi9tbS9odWdldGxiLmNcXG5AQCAtMTI1NSw3ICsxMjU1LDcgQEAgc3RhdGljIHN0cnVjdCBmb2xpbyAqZGVxdWV1ZV9odWdldGxiX2ZvbGlvX25vZGVfZXhhY3Qoc3RydWN0IGhzdGF0ZSAqaCxcXG4gXFx0XFx0aWYgKHBpbiBcXHUwMDI2XFx1MDAyNiAhZm9saW9faXNfbG9uZ3Rlcm1fcGlubmFibGUoZm9saW8pKVxcbiBcXHRcXHRcXHRjb250aW51ZTtcXG4gXFxuLVxcdFxcdGlmIChmb2xpb190ZXN0X2h3cG9pc29uKGZvbGlvKSlcXG4rXFx0XFx0aWYgKGZvbGlvX3Rlc3RfaGFzX2h3cG9pc29uZWQoZm9saW8pKVxcbiBcXHRcXHRcXHRjb250aW51ZTtcXG4gXFxuIFxcdFxcdGlmIChpc19taWdyYXRlX2lzb2xhdGVfcGFnZShcXHUwMDI2Zm9saW8tXFx1MDAzZXBhZ2UpKVxcbkBAIC0xNDk4LDEwICsxNDk4LDEwIEBAIHN0YXRpYyB2b2lkIF9fdXBkYXRlX2FuZF9mcmVlX2h1Z2V0bGJfZm9saW8oc3RydWN0IGhzdGF0ZSAqaCxcXG4gXFx0fVxcbiBcXG4gXFx0LypcXG4tXFx0ICogTW92ZSBQYWdlSFdQb2lzb24gZmxhZyBmcm9tIGhlYWQgcGFnZSB0byB0aGUgcmF3IGVycm9yIHBhZ2VzLFxcbi1cXHQgKiB3aGljaCBtYWtlcyBhbnkgaGVhbHRoeSBzdWJwYWdlcyByZXVzYWJsZS5cXG4rXFx0ICogTW92ZSBIV1BvaXNvbiBmbGFnIHRvIGVhY2ggZXJyb3IgcGFnZVxcbitcXHQgKiB3aGljaCBtYWtlcyBhbnkgaGVhbHRoeSBwYWdlcyByZXVzYWJsZS5cXG4gXFx0ICovXFxuLVxcdGlmICh1bmxpa2VseShmb2xpb190ZXN0X2h3cG9pc29uKGZvbGlvKSkpXFxuK1xcdGlmICh1bmxpa2VseShmb2xpb190ZXN0X2hhc19od3BvaXNvbmVkKGZvbGlvKSkpXFxuIFxcdFxcdGZvbGlvX2NsZWFyX2h1Z2V0bGJfaHdwb2lzb24oZm9saW8pO1xcbiBcXG4gXFx0Vk1fQlVHX09OX0ZPTElPKGZvbGlvX3JlZl9jb3VudChmb2xpbyksIGZvbGlvKTtcXG5AQCAtMTc3NSw3ICsxNzc1LDcgQEAgdm9pZCBpbml0X25ld19odWdldGxiX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuICAqIHN0YWJsZS4gIER1ZSB0byBsb2NraW5nIG9yZGVyLCB3ZSBjYW4gb25seSB0cnlsb2NrX3dyaXRlLiAgSWYgd2UgY2FuXFxuICAqIG5vdCBnZXQgdGhlIGxvY2ssIHNpbXBseSByZXR1cm4gTlVMTCB0byBjYWxsZXIuXFxuICAqL1xcbi1zdHJ1Y3QgYWRkcmVzc19zcGFjZSAqaHVnZXRsYl9mb2xpb19tYXBwaW5nX2xvY2tfd3JpdGUoc3RydWN0IGZvbGlvICpmb2xpbylcXG4rc3RydWN0IGFkZHJlc3Nfc3BhY2UgKmh1Z2V0bGJfZm9saW9fbWFwcGluZ19sb2NrX3dyaXRlKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuIHtcXG4gXFx0c3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcgPSBmb2xpb19tYXBwaW5nKGZvbGlvKTtcXG4gXFxuQEAgLTM5OTgsNyArMzk5OCw3IEBAIGxvbmcgZGVtb3RlX3Bvb2xfaHVnZV9wYWdlKHN0cnVjdCBoc3RhdGUgKnNyYywgbm9kZW1hc2tfdCAqbm9kZXNfYWxsb3dlZCxcXG4gXFx0XFx0c3RydWN0IGZvbGlvICpmb2xpbywgKm5leHQ7XFxuIFxcbiBcXHRcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoZm9saW8sIG5leHQsIFxcdTAwMjZzcmMtXFx1MDAzZWh1Z2VwYWdlX2ZyZWVsaXN0c1tub2RlXSwgbHJ1KSB7XFxuLVxcdFxcdFxcdGlmIChmb2xpb190ZXN0X2h3cG9pc29uKGZvbGlvKSlcXG4rXFx0XFx0XFx0aWYgKGZvbGlvX3Rlc3RfaGFzX2h3cG9pc29uZWQoZm9saW8pKVxcbiBcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4gXFxuIFxcdFxcdFxcdHJlbW92ZV9odWdldGxiX2ZvbGlvKHNyYywgZm9saW8sIGZhbHNlKTtcXG5AQCAtNTgwOSw3ICs1ODA5LDcgQEAgc3RhdGljIHZtX2ZhdWx0X3QgaHVnZXRsYl9ub19wYWdlKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxcbiBcXHRcXHQgKiBkb24ndCBoYXZlIGh3cG9pc29uZWQgc3dhcCBlbnRyeSBmb3IgZXJyb3JlZCB2aXJ0dWFsIGFkZHJlc3MuXFxuIFxcdFxcdCAqIFNvIHdlIG5lZWQgdG8gYmxvY2sgaHVnZXBhZ2UgZmF1bHQgYnkgUEdfaHdwb2lzb24gYml0IGNoZWNrLlxcbiBcXHRcXHQgKi9cXG4tXFx0XFx0aWYgKHVubGlrZWx5KGZvbGlvX3Rlc3RfaHdwb2lzb24oZm9saW8pKSkge1xcbitcXHRcXHRpZiAodW5saWtlbHkoZm9saW9fdGVzdF9oYXNfaHdwb2lzb25lZChmb2xpbykpKSB7XFxuIFxcdFxcdFxcdHJldCA9IFZNX0ZBVUxUX0hXUE9JU09OX0xBUkdFIHxcXG4gXFx0XFx0XFx0XFx0Vk1fRkFVTFRfU0VUX0hJTkRFWChoc3RhdGVfaW5kZXgoaCkpO1xcbiBcXHRcXHRcXHRnb3RvIGJhY2tvdXRfdW5sb2NrZWQ7XFxuQEAgLTYzMTgsNyArNjMxOCw3IEBAIGludCBodWdldGxiX21maWxsX2F0b21pY19wdGUocHRlX3QgKmRzdF9wdGUsXFxuIFxcdHB0bCA9IGh1Z2VfcHRlX2xvY2soaCwgZHN0X21tLCBkc3RfcHRlKTtcXG4gXFxuIFxcdHJldCA9IC1FSU87XFxuLVxcdGlmIChmb2xpb190ZXN0X2h3cG9pc29uKGZvbGlvKSlcXG4rXFx0aWYgKGZvbGlvX3Rlc3RfaGFzX2h3cG9pc29uZWQoZm9saW8pKVxcbiBcXHRcXHRnb3RvIG91dF9yZWxlYXNlX3VubG9jaztcXG4gXFxuIFxcdHJldCA9IC1FRVhJU1Q7XFxuZGlmZiAtLWdpdCBhL21tL21lbW9yeS1mYWlsdXJlLmMgYi9tbS9tZW1vcnktZmFpbHVyZS5jXFxuaW5kZXggNTE1MDhhNTVjNDA1NWUuLjczZWJiYzkzNTY2MTgyIDEwMDY0NFxcbi0tLSBhL21tL21lbW9yeS1mYWlsdXJlLmNcXG4rKysgYi9tbS9tZW1vcnktZmFpbHVyZS5jXFxuQEAgLTE4MTAsNTAgKzE4MTAsNjUgQEAgRVhQT1JUX1NZTUJPTF9HUEwobWZfZGF4X2tpbGxfcHJvY3MpO1xcbiBcXG4gLypcXG4gICogU3RydWN0IHJhd19od3BfcGFnZSByZXByZXNlbnRzIGluZm9ybWF0aW9uIGFib3V0IFxcXCJyYXcgZXJyb3IgcGFnZVxcXCIsXFxuLSAqIGNvbnN0cnVjdGluZyBzaW5nbHkgbGlua2VkIGxpc3QgZnJvbSAtXFx1MDAzZV9odWdldGxiX2h3cG9pc29uIGZpZWxkIG9mIGZvbGlvLlxcbisgKiBjb25zdHJ1Y3Rpbmcgc2luZ2x5IGxpbmtlZCBsaXN0IGZyb20gZm9saW8tXFx1MDAzZWh1Z2V0bGJfaHdwb2lzb24gZmllbGQuXFxuICAqL1xcbiBzdHJ1Y3QgcmF3X2h3cF9wYWdlIHtcXG4gXFx0c3RydWN0IGxsaXN0X25vZGUgbm9kZTtcXG4gXFx0c3RydWN0IHBhZ2UgKnBhZ2U7XFxuIH07XFxuIFxcbi1zdGF0aWMgaW5saW5lIHN0cnVjdCBsbGlzdF9oZWFkICpyYXdfaHdwX2xpc3RfaGVhZChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbitzdGF0aWMgYm9vbCBwcmVjaXNlX3BhZ2VfcG9pc29uZWQoY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbyxcXG4rXFx0XFx0Y29uc3Qgc3RydWN0IHBhZ2UgKnBhZ2UpXFxuIHtcXG4tXFx0cmV0dXJuIChzdHJ1Y3QgbGxpc3RfaGVhZCAqKVxcdTAwMjZmb2xpby1cXHUwMDNlX2h1Z2V0bGJfaHdwb2lzb247XFxuLX1cXG4tXFxuLWJvb2wgaXNfcmF3X2h3cG9pc29uX3BhZ2VfaW5faHVnZXBhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UpXFxuLXtcXG4tXFx0c3RydWN0IGxsaXN0X2hlYWQgKnJhd19od3BfaGVhZDtcXG4tXFx0c3RydWN0IHJhd19od3BfcGFnZSAqcDtcXG4tXFx0c3RydWN0IGZvbGlvICpmb2xpbyA9IHBhZ2VfZm9saW8ocGFnZSk7XFxuLVxcdGJvb2wgcmV0ID0gZmFsc2U7XFxuLVxcbi1cXHRpZiAoIWZvbGlvX3Rlc3RfaHdwb2lzb24oZm9saW8pKVxcbi1cXHRcXHRyZXR1cm4gZmFsc2U7XFxuLVxcbi1cXHRpZiAoIWZvbGlvX3Rlc3RfaHVnZXRsYihmb2xpbykpXFxuLVxcdFxcdHJldHVybiBQYWdlSFdQb2lzb24ocGFnZSk7XFxuK1xcdGNvbnN0IHN0cnVjdCBsbGlzdF9oZWFkICpsaXN0ID0gXFx1MDAyNmZvbGlvLVxcdTAwM2VodWdldGxiX2h3cG9pc29uO1xcbitcXHRjb25zdCBzdHJ1Y3QgcmF3X2h3cF9wYWdlICpwO1xcbiBcXG4gXFx0LypcXG4tXFx0ICogV2hlbiBSYXdId3BVbnJlbGlhYmxlIGlzIHNldCwga2VybmVsIGxvc3QgdHJhY2sgb2Ygd2hpY2ggc3VicGFnZXNcXG4tXFx0ICogYXJlIEhXUE9JU09OLiBTbyByZXR1cm4gYXMgaWYgQUxMIHN1YnBhZ2VzIGFyZSBIV1BPSVNPTmVkLlxcbitcXHQgKiBXaGVuIFJhd0h3cFVucmVsaWFibGUgaXMgc2V0LCBrZXJuZWwgbG9zdCB0cmFjayBvZiB3aGljaCBwYWdlc1xcbitcXHQgKiBhcmUgSFdQT0lTT04uIFNvIHJldHVybiBhcyBpZiBBTEwgcGFnZXMgYXJlIEhXUE9JU09OZWQuXFxuIFxcdCAqL1xcbiBcXHRpZiAoZm9saW9fdGVzdF9odWdldGxiX3Jhd19od3BfdW5yZWxpYWJsZShmb2xpbykpXFxuIFxcdFxcdHJldHVybiB0cnVlO1xcbiBcXG4tXFx0bXV0ZXhfbG9jayhcXHUwMDI2bWZfbXV0ZXgpO1xcbi1cXG4tXFx0cmF3X2h3cF9oZWFkID0gcmF3X2h3cF9saXN0X2hlYWQoZm9saW8pO1xcbi1cXHRsbGlzdF9mb3JfZWFjaF9lbnRyeShwLCByYXdfaHdwX2hlYWQtXFx1MDAzZWZpcnN0LCBub2RlKSB7XFxuLVxcdFxcdGlmIChwYWdlID09IHAtXFx1MDAzZXBhZ2UpIHtcXG4tXFx0XFx0XFx0cmV0ID0gdHJ1ZTtcXG4tXFx0XFx0XFx0YnJlYWs7XFxuLVxcdFxcdH1cXG4rXFx0bGxpc3RfZm9yX2VhY2hfZW50cnkocCwgUkVBRF9PTkNFKGxpc3QtXFx1MDAzZWZpcnN0KSwgbm9kZSkge1xcbitcXHRcXHRpZiAocGFnZSA9PSBwLVxcdTAwM2VwYWdlKVxcbitcXHRcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4gXFx0fVxcbiBcXG4tXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZtZl9tdXRleCk7XFxuK1xcdHJldHVybiBmYWxzZTtcXG4rfVxcbiBcXG4rLypcXG4rICogQ2hlY2sgaWYgYSBnaXZlbiBAcGFnZSBpbiBhIGh1Z2V0bGIgZm9saW8gaXMgSFdQT0lTT04uXFxuKyAqL1xcbitib29sIGh1Z2V0bGJfcGFnZV9od3BvaXNvbihjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvLCBjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSlcXG4re1xcbitcXHRpZiAoIWZvbGlvX3Rlc3RfaGFzX2h3cG9pc29uZWQoZm9saW8pKVxcbitcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcbitcXHRyZXR1cm4gcHJlY2lzZV9wYWdlX3BvaXNvbmVkKGZvbGlvLCBwYWdlKTtcXG4rfVxcbitcXG4rLypcXG4rICogV2UgaGF2ZSBubyByZWZlcmVuY2Ugb24gdGhlIGZvbGlvIGNvbnRhaW5pbmcgdGhpcyBwYWdlLlxcbisgKiBUaGUgaHVnZXRsYl9sb2NrIGtlZXBzIGh1Z2V0bGIgZm9saW9zIGZyb20gYmVpbmcgZnJlZWQuXFxuKyAqL1xcbitib29sIGh1Z2V0bGJfdW5yZWZfcGFnZV9od3BvaXNvbihjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSlcXG4re1xcbitcXHRjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvO1xcbitcXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xcbitcXHRib29sIHJldDtcXG4rXFxuK1xcdHNwaW5fbG9ja19pcnFzYXZlKFxcdTAwMjZodWdldGxiX2xvY2ssIGZsYWdzKTtcXG4rXFx0Zm9saW8gPSBwYWdlX2ZvbGlvKHBhZ2UpO1xcbitcXHRpZiAoIWZvbGlvX3Rlc3RfaHVnZV9wb2lzb24oZm9saW8pKSB7XFxuK1xcdFxcdHJldCA9IFBhZ2VIV1BvaXNvbihwYWdlKTtcXG4rXFx0XFx0Z290byB1bmxvY2s7XFxuK1xcdH1cXG4rXFxuK1xcdHJldCA9IHByZWNpc2VfcGFnZV9wb2lzb25lZChmb2xpbywgcGFnZSk7XFxuK3VubG9jazpcXG4rXFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcXHUwMDI2aHVnZXRsYl9sb2NrLCBmbGFncyk7XFxuIFxcdHJldHVybiByZXQ7XFxuIH1cXG4gXFxuQEAgLTE4NjMsNyArMTg3OCw3IEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIF9fZm9saW9fZnJlZV9yYXdfaHdwKHN0cnVjdCBmb2xpbyAqZm9saW8sIGJvb2wgbW92ZV9mbGFnKVxcbiBcXHRzdHJ1Y3QgcmF3X2h3cF9wYWdlICpwLCAqbmV4dDtcXG4gXFx0dW5zaWduZWQgbG9uZyBjb3VudCA9IDA7XFxuIFxcbi1cXHRoZWFkID0gbGxpc3RfZGVsX2FsbChyYXdfaHdwX2xpc3RfaGVhZChmb2xpbykpO1xcbitcXHRoZWFkID0gbGxpc3RfZGVsX2FsbChcXHUwMDI2Zm9saW8tXFx1MDAzZWh1Z2V0bGJfaHdwb2lzb24pO1xcbiBcXHRsbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHAsIG5leHQsIGhlYWQsIG5vZGUpIHtcXG4gXFx0XFx0aWYgKG1vdmVfZmxhZylcXG4gXFx0XFx0XFx0U2V0UGFnZUhXUG9pc29uKHAtXFx1MDAzZXBhZ2UpO1xcbkBAIC0xODgxLDI2ICsxODk2LDQxIEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIF9fZm9saW9fZnJlZV9yYXdfaHdwKHN0cnVjdCBmb2xpbyAqZm9saW8sIGJvb2wgbW92ZV9mbGFnKVxcbiAjZGVmaW5lXFx0TUZfSFVHRVRMQl9GT0xJT19QUkVfUE9JU09ORURcXHQzXFx0LyogZm9saW8gYWxyZWFkeSBwb2lzb25lZCAqL1xcbiAjZGVmaW5lXFx0TUZfSFVHRVRMQl9QQUdFX1BSRV9QT0lTT05FRFxcdDRcXHQvKiBleGFjdCBwYWdlIGFscmVhZHkgcG9pc29uZWQgKi9cXG4gI2RlZmluZVxcdE1GX0hVR0VUTEJfUkVUUllcXHRcXHQ1XFx0LyogaHVnZXBhZ2UgaXMgYnVzeSwgcmV0cnkgKi9cXG4rXFxuK3N0YXRpYyBpbmxpbmUgaW50IGh1Z2V0bGJfc2V0X3BvaXNvbihzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbit7XFxuK1xcdGlmIChmb2xpb190ZXN0X3NldF9oYXNfaHdwb2lzb25lZChmb2xpbykpXFxuK1xcdFxcdHJldHVybiBNRl9IVUdFVExCX0ZPTElPX1BSRV9QT0lTT05FRDtcXG4rXFx0Zm9saW9fc2V0X2h1Z2VfcG9pc29uKGZvbGlvKTtcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3N0YXRpYyBpbmxpbmUgaW50IGh1Z2V0bGJfY2xlYXJfcG9pc29uKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuK3tcXG4rXFx0aWYgKCFmb2xpb190ZXN0X2NsZWFyX2hhc19od3BvaXNvbmVkKGZvbGlvKSlcXG4rXFx0XFx0cmV0dXJuIC1FQlVTWTtcXG4rXFx0Zm9saW9fY2xlYXJfaHVnZV9wb2lzb24oZm9saW8pO1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4gLypcXG4gICogU2V0IGh1Z2V0bGIgZm9saW8gYXMgaHdwb2lzb25lZCwgdXBkYXRlIGZvbGlvIHByaXZhdGUgcmF3IGh3cG9pc29uIGxpc3RcXG4gICogdG8ga2VlcCB0cmFjayBvZiB0aGUgcG9pc29uZWQgcGFnZXMuXFxuICAqL1xcbiBzdGF0aWMgaW50IGh1Z2V0bGJfdXBkYXRlX2h3cG9pc29uKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBwYWdlICpwYWdlKVxcbiB7XFxuLVxcdHN0cnVjdCBsbGlzdF9oZWFkICpoZWFkO1xcbiBcXHRzdHJ1Y3QgcmF3X2h3cF9wYWdlICpyYXdfaHdwO1xcbiBcXHRzdHJ1Y3QgcmF3X2h3cF9wYWdlICpwO1xcbi1cXHRpbnQgcmV0ID0gZm9saW9fdGVzdF9zZXRfaHdwb2lzb24oZm9saW8pID8gTUZfSFVHRVRMQl9GT0xJT19QUkVfUE9JU09ORUQgOiAwO1xcbitcXHRpbnQgcmV0ID0gaHVnZXRsYl9zZXRfcG9pc29uKGZvbGlvKTtcXG4gXFxuIFxcdC8qXFxuIFxcdCAqIE9uY2UgdGhlIGh3cG9pc29uIGh1Z2VwYWdlIGhhcyBsb3N0IHJlbGlhYmxlIHJhdyBlcnJvciBpbmZvLFxcbi1cXHQgKiB0aGVyZSBpcyBsaXR0bGUgbWVhbmluZyB0byBrZWVwIGFkZGl0aW9uYWwgZXJyb3IgaW5mbyBwcmVjaXNlbHksXFxuLVxcdCAqIHNvIHNraXAgdG8gYWRkIGFkZGl0aW9uYWwgcmF3IGVycm9yIGluZm8uXFxuK1xcdCAqIHRoZXJlIGlzIG5vIHBvaW50IGluIGtlZXBpbmcgYWRkaXRpb25hbCBlcnJvciBpbmZvIHByZWNpc2VseSxcXG4rXFx0ICogc28gc2tpcCBhZGRpbmcgYWRkaXRpb25hbCByYXcgZXJyb3IgaW5mby5cXG4gXFx0ICovXFxuIFxcdGlmIChmb2xpb190ZXN0X2h1Z2V0bGJfcmF3X2h3cF91bnJlbGlhYmxlKGZvbGlvKSlcXG4gXFx0XFx0cmV0dXJuIE1GX0hVR0VUTEJfRk9MSU9fUFJFX1BPSVNPTkVEO1xcbi1cXHRoZWFkID0gcmF3X2h3cF9saXN0X2hlYWQoZm9saW8pO1xcbi1cXHRsbGlzdF9mb3JfZWFjaF9lbnRyeShwLCBoZWFkLVxcdTAwM2VmaXJzdCwgbm9kZSkge1xcbitcXHRsbGlzdF9mb3JfZWFjaF9lbnRyeShwLCBmb2xpby1cXHUwMDNlaHVnZXRsYl9od3BvaXNvbi5maXJzdCwgbm9kZSkge1xcbiBcXHRcXHRpZiAocC1cXHUwMDNlcGFnZSA9PSBwYWdlKVxcbiBcXHRcXHRcXHRyZXR1cm4gTUZfSFVHRVRMQl9QQUdFX1BSRV9QT0lTT05FRDtcXG4gXFx0fVxcbkBAIC0xOTA4LDcgKzE5MzgsNyBAQCBzdGF0aWMgaW50IGh1Z2V0bGJfdXBkYXRlX2h3cG9pc29uKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBwYWdlICpwYWdlKVxcbiBcXHRyYXdfaHdwID0ga21hbGxvY19vYmooc3RydWN0IHJhd19od3BfcGFnZSwgR0ZQX0FUT01JQyk7XFxuIFxcdGlmIChyYXdfaHdwKSB7XFxuIFxcdFxcdHJhd19od3AtXFx1MDAzZXBhZ2UgPSBwYWdlO1xcbi1cXHRcXHRsbGlzdF9hZGQoXFx1MDAyNnJhd19od3AtXFx1MDAzZW5vZGUsIGhlYWQpO1xcbitcXHRcXHRsbGlzdF9hZGQoXFx1MDAyNnJhd19od3AtXFx1MDAzZW5vZGUsIFxcdTAwMjZmb2xpby1cXHUwMDNlaHVnZXRsYl9od3BvaXNvbik7XFxuIFxcdH0gZWxzZSB7XFxuIFxcdFxcdC8qXFxuIFxcdFxcdCAqIEZhaWxlZCB0byBzYXZlIHJhdyBlcnJvciBpbmZvLiAgV2Ugbm8gbG9uZ2VyIHRyYWNlIGFsbFxcbkBAIC0xOTUwLDggKzE5ODAsOCBAQCB2b2lkIGZvbGlvX2NsZWFyX2h1Z2V0bGJfaHdwb2lzb24oc3RydWN0IGZvbGlvICpmb2xpbylcXG4gXFx0XFx0cmV0dXJuO1xcbiBcXHRpZiAoZm9saW9fdGVzdF9odWdldGxiX3ZtZW1tYXBfb3B0aW1pemVkKGZvbGlvKSlcXG4gXFx0XFx0cmV0dXJuO1xcbi1cXHRmb2xpb19jbGVhcl9od3BvaXNvbihmb2xpbyk7XFxuIFxcdGZvbGlvX2ZyZWVfcmF3X2h3cChmb2xpbywgdHJ1ZSk7XFxuK1xcdGZvbGlvX2NsZWFyX2hhc19od3BvaXNvbmVkKGZvbGlvKTtcXG4gfVxcbiBcXG4gc3RhdGljIGludCBnZXRfaHVnZV9wYWdlX2Zvcl9od3BvaXNvbih1bnNpZ25lZCBsb25nIHBmbiwgaW50IGZsYWdzLFxcbkBAIC0yMTA0LDYgKzIxMzQsMTEgQEAgc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGZvbGlvX2ZyZWVfcmF3X2h3cChzdHJ1Y3QgZm9saW8gKmZvbGlvLCBib29sIGZsYWcpXFxuIHtcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4rXFxuK3N0YXRpYyBpbmxpbmUgaW50IGh1Z2V0bGJfY2xlYXJfcG9pc29uKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuK3tcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4gI2VuZGlmXFx0LyogQ09ORklHX0hVR0VUTEJfUEFHRSAqL1xcbiBcXG4gLyogRHJvcCB0aGUgZXh0cmEgcmVmY291bnQgaW4gY2FzZSB3ZSBjb21lIGZyb20gbWFkdmlzZSgpICovXFxuQEAgLTI2NzcsNyArMjcxMiwxMiBAQCBpbnQgdW5wb2lzb25fbWVtb3J5KHVuc2lnbmVkIGxvbmcgcGZuKVxcbiBcXHRwID0gcGZuX3RvX29ubGluZV9wYWdlKHBmbik7XFxuIFxcdGlmICghcClcXG4gXFx0XFx0cmV0dXJuIC1FSU87XFxuLVxcdGZvbGlvID0gcGFnZV9mb2xpbyhwKTtcXG4rXFxuK1xcdGlmICghaXNfcGFnZV9od3BvaXNvbihwKSkge1xcbitcXHRcXHR1bnBvaXNvbl9wcl9pbmZvKFxcXCIlI2x4OiBwYWdlIGlzIG5vdCBwb2lzb25lZFxcXFxuXFxcIixcXG4rXFx0XFx0XFx0XFx0IHBmbiwgXFx1MDAyNnVucG9pc29uX3JzKTtcXG4rXFx0XFx0cmV0dXJuIC1FQlVTWTtcXG4rXFx0fVxcbiBcXG4gXFx0bXV0ZXhfbG9jayhcXHUwMDI2bWZfbXV0ZXgpO1xcbiBcXG5AQCAtMjY4OCw2ICsyNzI4LDggQEAgaW50IHVucG9pc29uX21lbW9yeSh1bnNpZ25lZCBsb25nIHBmbilcXG4gXFx0XFx0Z290byB1bmxvY2tfbXV0ZXg7XFxuIFxcdH1cXG4gXFxuK1xcdGZvbGlvID0gcGFnZV9mb2xpbyhwKTtcXG4rXFxuIFxcdGlmIChpc19odWdlX3plcm9fZm9saW8oZm9saW8pKSB7XFxuIFxcdFxcdHVucG9pc29uX3ByX2luZm8oXFxcIiUjbHg6IGh1Z2UgemVybyBwYWdlIGlzIG5vdCBzdXBwb3J0ZWRcXFxcblxcXCIsXFxuIFxcdFxcdFxcdFxcdCBwZm4sIFxcdTAwMjZ1bnBvaXNvbl9ycyk7XFxuQEAgLTI2OTUsMTIgKzI3MzcsNiBAQCBpbnQgdW5wb2lzb25fbWVtb3J5KHVuc2lnbmVkIGxvbmcgcGZuKVxcbiBcXHRcXHRnb3RvIHVubG9ja19tdXRleDtcXG4gXFx0fVxcbiBcXG4tXFx0aWYgKCFQYWdlSFdQb2lzb24ocCkpIHtcXG4tXFx0XFx0dW5wb2lzb25fcHJfaW5mbyhcXFwiJSNseDogcGFnZSB3YXMgYWxyZWFkeSB1bnBvaXNvbmVkXFxcXG5cXFwiLFxcbi1cXHRcXHRcXHRcXHQgcGZuLCBcXHUwMDI2dW5wb2lzb25fcnMpO1xcbi1cXHRcXHRnb3RvIHVubG9ja19tdXRleDtcXG4tXFx0fVxcbi1cXG4gXFx0aWYgKGZvbGlvX3JlZl9jb3VudChmb2xpbykgXFx1MDAzZSAxKSB7XFxuIFxcdFxcdHVucG9pc29uX3ByX2luZm8oXFxcIiUjbHg6IHNvbWVvbmUgZ3JhYnMgdGhlIGh3cG9pc29uIHBhZ2VcXFxcblxcXCIsXFxuIFxcdFxcdFxcdFxcdCBwZm4sIFxcdTAwMjZ1bnBvaXNvbl9ycyk7XFxuQEAgLTI3MzAsOCArMjc2Niw4IEBAIGludCB1bnBvaXNvbl9tZW1vcnkodW5zaWduZWQgbG9uZyBwZm4pXFxuIFxcdFxcdFxcdGNvdW50ID0gZm9saW9fZnJlZV9yYXdfaHdwKGZvbGlvLCBmYWxzZSk7XFxuIFxcdFxcdFxcdGlmIChjb3VudCA9PSAwKVxcbiBcXHRcXHRcXHRcXHRnb3RvIHVubG9ja19tdXRleDtcXG4rXFx0XFx0XFx0cmV0ID0gaHVnZXRsYl9jbGVhcl9wb2lzb24oZm9saW8pO1xcbiBcXHRcXHR9XFxuLVxcdFxcdHJldCA9IGZvbGlvX3Rlc3RfY2xlYXJfaHdwb2lzb24oZm9saW8pID8gMCA6IC1FQlVTWTtcXG4gXFx0fSBlbHNlIGlmIChnaHAgXFx1MDAzYyAwKSB7XFxuIFxcdFxcdGlmIChnaHAgPT0gLUVIV1BPSVNPTikge1xcbiBcXHRcXHRcXHRyZXQgPSBwdXRfcGFnZV9iYWNrX2J1ZGR5KHApID8gMCA6IC1FQlVTWTtcXG5AQCAtMjc0MCwxNiArMjc3NiwxOCBAQCBpbnQgdW5wb2lzb25fbWVtb3J5KHVuc2lnbmVkIGxvbmcgcGZuKVxcbiBcXHRcXHRcXHR1bnBvaXNvbl9wcl9pbmZvKFxcXCIlI2x4OiBmYWlsZWQgdG8gZ3JhYiBwYWdlXFxcXG5cXFwiLFxcbiBcXHRcXHRcXHRcXHRcXHQgcGZuLCBcXHUwMDI2dW5wb2lzb25fcnMpO1xcbiBcXHRcXHR9XFxuLVxcdH0gZWxzZSB7XFxuLVxcdFxcdGlmIChmb2xpb190ZXN0X2h1Z2V0bGIoZm9saW8pKSB7XFxuLVxcdFxcdFxcdGh1Z2UgPSB0cnVlO1xcbi1cXHRcXHRcXHRjb3VudCA9IGZvbGlvX2ZyZWVfcmF3X2h3cChmb2xpbywgZmFsc2UpO1xcbi1cXHRcXHRcXHRpZiAoY291bnQgPT0gMCkge1xcbi1cXHRcXHRcXHRcXHRmb2xpb19wdXQoZm9saW8pO1xcbi1cXHRcXHRcXHRcXHRnb3RvIHVubG9ja19tdXRleDtcXG4tXFx0XFx0XFx0fVxcbitcXHR9IGVsc2UgaWYgKGZvbGlvX3Rlc3RfaHVnZXRsYihmb2xpbykpIHtcXG4rXFx0XFx0aHVnZSA9IHRydWU7XFxuK1xcdFxcdGNvdW50ID0gZm9saW9fZnJlZV9yYXdfaHdwKGZvbGlvLCBmYWxzZSk7XFxuK1xcdFxcdGlmIChjb3VudCA9PSAwKSB7XFxuK1xcdFxcdFxcdGZvbGlvX3B1dChmb2xpbyk7XFxuK1xcdFxcdFxcdGdvdG8gdW5sb2NrX211dGV4O1xcbiBcXHRcXHR9XFxuLVxcbitcXHRcXHRmb2xpb19wdXQoZm9saW8pO1xcbitcXHRcXHRyZXQgPSBodWdldGxiX2NsZWFyX3BvaXNvbihmb2xpbyk7XFxuK1xcdFxcdGlmICghcmV0KVxcbitcXHRcXHRcXHRmb2xpb19wdXQoZm9saW8pO1xcbitcXHR9IGVsc2Uge1xcbiBcXHRcXHRmb2xpb19wdXQoZm9saW8pO1xcbiBcXHRcXHRpZiAoVGVzdENsZWFyUGFnZUhXUG9pc29uKHApKSB7XFxuIFxcdFxcdFxcdGZvbGlvX3B1dChmb2xpbyk7XFxuZGlmZiAtLWdpdCBhL21tL21lbW9yeV9ob3RwbHVnLmMgYi9tbS9tZW1vcnlfaG90cGx1Zy5jXFxuaW5kZXggN2FjMTlmYWIyMjYzMjQuLjMzMDA3ZThlNTQ2YTA5IDEwMDY0NFxcbi0tLSBhL21tL21lbW9yeV9ob3RwbHVnLmNcXG4rKysgYi9tbS9tZW1vcnlfaG90cGx1Zy5jXFxuQEAgLTE4MTMsNyArMTgxMyw3IEBAIHN0YXRpYyB2b2lkIGRvX21pZ3JhdGVfcmFuZ2UodW5zaWduZWQgbG9uZyBzdGFydF9wZm4sIHVuc2lnbmVkIGxvbmcgZW5kX3BmbilcXG4gXFx0XFx0aWYgKGZvbGlvX3Rlc3RfbGFyZ2UoZm9saW8pKVxcbiBcXHRcXHRcXHRwZm4gPSBmb2xpb19wZm4oZm9saW8pICsgZm9saW9fbnJfcGFnZXMoZm9saW8pIC0gMTtcXG4gXFxuLVxcdFxcdGlmIChmb2xpb19jb250YWluX2h3cG9pc29uZWRfcGFnZShmb2xpbykpIHtcXG4rXFx0XFx0aWYgKGZvbGlvX2hhc19od3BvaXNvbmVkX3BhZ2UoZm9saW8pKSB7XFxuIFxcdFxcdFxcdC8qXFxuIFxcdFxcdFxcdCAqIHVubWFwX3BvaXNvbmVkX2ZvbGlvKCkgY2Fubm90IGhhbmRsZSBsYXJnZSBmb2xpb3NcXG4gXFx0XFx0XFx0ICogaW4gYWxsIGNhc2VzIHlldC5cXG5kaWZmIC0tZ2l0IGEvbW0vc2htZW0uYyBiL21tL3NobWVtLmNcXG5pbmRleCBiNTFmODNjOTcwYmIzNy4uNDkyYzliZWYzNjIwNzQgMTAwNjQ0XFxuLS0tIGEvbW0vc2htZW0uY1xcbisrKyBiL21tL3NobWVtLmNcXG5AQCAtMzI0MCw3ICszMjQwLDcgQEAgc2htZW1fd3JpdGVfYmVnaW4oY29uc3Qgc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcXG4gXFx0aWYgKHJldClcXG4gXFx0XFx0cmV0dXJuIHJldDtcXG4gXFxuLVxcdGlmIChmb2xpb19jb250YWluX2h3cG9pc29uZWRfcGFnZShmb2xpbykpIHtcXG4rXFx0aWYgKGZvbGlvX2hhc19od3BvaXNvbmVkX3BhZ2UoZm9saW8pKSB7XFxuIFxcdFxcdGZvbGlvX3VubG9jayhmb2xpbyk7XFxuIFxcdFxcdGZvbGlvX3B1dChmb2xpbyk7XFxuIFxcdFxcdHJldHVybiAtRUlPO1xcbmRpZmYgLS1naXQgYS9tbS92bXNjYW4uYyBiL21tL3Ztc2Nhbi5jXFxuaW5kZXggMzVjM2JiMTVhZTk2YTMuLjcwZTU0YWNlMGU3NDFjIDEwMDY0NFxcbi0tLSBhL21tL3Ztc2Nhbi5jXFxuKysrIGIvbW0vdm1zY2FuLmNcXG5AQCAtMTA4Niw3ICsxMDg2LDcgQEAgc3RhdGljIHVuc2lnbmVkIGludCBzaHJpbmtfZm9saW9fbGlzdChzdHJ1Y3QgbGlzdF9oZWFkICpmb2xpb19saXN0LFxcbiBcXHRcXHRpZiAoIWZvbGlvX3RyeWxvY2soZm9saW8pKVxcbiBcXHRcXHRcXHRnb3RvIGtlZXA7XFxuIFxcbi1cXHRcXHRpZiAoZm9saW9fY29udGFpbl9od3BvaXNvbmVkX3BhZ2UoZm9saW8pKSB7XFxuK1xcdFxcdGlmIChmb2xpb19oYXNfaHdwb2lzb25lZF9wYWdlKGZvbGlvKSkge1xcbiBcXHRcXHRcXHQvKlxcbiBcXHRcXHRcXHQgKiB1bm1hcF9wb2lzb25lZF9mb2xpbygpIGNhbid0IGhhbmRsZSBsYXJnZVxcbiBcXHRcXHRcXHQgKiBmb2xpbywganVzdCBza2lwIGl0LiBtZW1vcnlfZmFpbHVyZSgpIHdpbGxcXG5kaWZmIC0tZ2l0IGEvdmlydC9rdm0vZ3Vlc3RfbWVtZmQuYyBiL3ZpcnQva3ZtL2d1ZXN0X21lbWZkLmNcXG5pbmRleCBkYjU3YzU3NjZhYjYwNC4uOTRlZWRjYzdmMWE5ZTAgMTAwNjQ0XFxuLS0tIGEvdmlydC9rdm0vZ3Vlc3RfbWVtZmQuY1xcbisrKyBiL3ZpcnQva3ZtL2d1ZXN0X21lbWZkLmNcXG5AQCAtNzc0LDcgKzc3NCw3IEBAIHN0YXRpYyBzdHJ1Y3QgZm9saW8gKl9fa3ZtX2dtZW1fZ2V0X3BmbihzdHJ1Y3QgZmlsZSAqZmlsZSxcXG4gXFx0aWYgKElTX0VSUihmb2xpbykpXFxuIFxcdFxcdHJldHVybiBmb2xpbztcXG4gXFxuLVxcdGlmIChmb2xpb190ZXN0X2h3cG9pc29uKGZvbGlvKSkge1xcbitcXHRpZiAoZm9saW9faGFzX2h3cG9pc29uZWRfcGFnZShmb2xpbykpIHtcXG4gXFx0XFx0Zm9saW9fdW5sb2NrKGZvbGlvKTtcXG4gXFx0XFx0Zm9saW9fcHV0KGZvbGlvKTtcXG4gXFx0XFx0cmV0dXJuIEVSUl9QVFIoLUVIV1BPSVNPTik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI0VDE4OjQ2OjE5Ljc0ODYxOTkwNVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjkwMTE5MTc5NTcyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk1FTU9SWV9GQUlMVVJFXCIsXG4gICAgXCJIV1BPSVNPTl9JTkpFQ1RcIixcbiAgICBcIkhVR0VUTEJGU1wiLFxuICAgIFwiSFVHRVRMQl9QQUdFXCIsXG4gICAgXCJUUkFOU1BBUkVOVF9IVUdFUEFHRVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImh1Z2V0bGJfcGFnZV9od3BvaXNvblwiLFxuICAgIFwiaHVnZXRsYl91bnJlZl9wYWdlX2h3cG9pc29uXCIsXG4gICAgXCJ1bnBvaXNvbl9tZW1vcnlcIixcbiAgICBcImZvbGlvX2NsZWFyX2h1Z2V0bGJfaHdwb2lzb25cIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBob3cgaGFyZHdhcmUgcG9pc29uZWQgKEhXUE9JU09OKSBwYWdlcyBhcmUgdHJhY2tlZCBhbmQgaGFuZGxlZCB3aXRoaW4gbGFyZ2UgZm9saW9zLCBzcGVjaWZpY2FsbHkgYWZmZWN0aW5nIGh1Z2V0bGJmcyBhbmQgZmlsZW1hcCByZWFkIG9wZXJhdGlvbnMuIEl0IGludHJvZHVjZXMgbmV3IGxvZ2ljIHRvIHRyYWNrIHBvaXNvbmVkIHBhZ2VzIHVzaW5nIGBmb2xpby1cXHUwMDNlaHVnZXRsYl9od3BvaXNvbmAgYW5kIHJlcGxhY2VzIHRoZSBjdXN0b20gYGh1Z2V0bGJmc19yZWFkX2l0ZXJgIHdpdGggYGdlbmVyaWNfZmlsZV9yZWFkX2l0ZXJgLCBoYW5kbGluZyBod3BvaXNvbiBkaXJlY3RseSBpbiBgZmlsZW1hcF9yZWFkYC4gVGhlc2UgYXJlIHJlYWNoYWJsZSwgZnVuY3Rpb25hbCBjaGFuZ2VzIGluIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIGh1Z2V0bGJmcy4gRnV6emluZyBzaG91bGQgZm9jdXMgb24gdGhlIG5ldyBod3BvaXNvbiB0cmFja2luZyBmdW5jdGlvbnMgYW5kIHVucG9pc29uaW5nIGxvZ2ljLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG5ldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0XG4gICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksXG4gICBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDBmZTZkZTZjMmYwNTc2NjQyMTdkOTZhM2RhNzcyYTQ4NjY3ZTU1NjdcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIEp1bCAyNCAxODo0NjoxNiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2ZzL0tjb25maWcgYi9mcy9LY29uZmlnXG5pbmRleCBjZjZhZTY0Nzc2ZTYyYy4uZWRkYWM0ZWQyMTRiMTIgMTAwNjQ0XG4tLS0gYS9mcy9LY29uZmlnXG4rKysgYi9mcy9LY29uZmlnXG5AQCAtMjcyLDcgKzI3Miw3IEBAIGVuZGlmICMgSFVHRVRMQkZTXG4gXG4gY29uZmlnIEhVR0VUTEJfUEFHRVxuIFx0ZGVmX2Jvb2wgSFVHRVRMQkZTXG4tXHRzZWxlY3QgWEFSUkFZX01VTFRJXG4rXHRzZWxlY3QgTEFSR0VfRk9MSU9cbiBcbiBjb25maWcgSFVHRVRMQl9QQUdFX09QVElNSVpFX1ZNRU1NQVBcbiBcdGRlZl9ib29sIEhVR0VUTEJfUEFHRVxuZGlmZiAtLWdpdCBhL2ZzL2h1Z2V0bGJmcy9pbm9kZS5jIGIvZnMvaHVnZXRsYmZzL2lub2RlLmNcbmluZGV4IDIxNmUxYTBkZDBiMjM3Li5jZWY3ZTYxYjgyN2Q3MSAxMDA2NDRcbi0tLSBhL2ZzL2h1Z2V0bGJmcy9pbm9kZS5jXG4rKysgYi9mcy9odWdldGxiZnMvaW5vZGUuY1xuQEAgLTE4NywxMTMgKzE4Nyw2IEBAIGh1Z2V0bGJfZ2V0X3VubWFwcGVkX2FyZWEoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGxvbmcgYWRkcixcbiBcdHJldHVybiBtbV9nZXRfdW5tYXBwZWRfYXJlYV92bWZsYWdzKGZpbGUsIGFkZHIwLCBsZW4sIHBnb2ZmLCBmbGFncywgMCk7XG4gfVxuIFxuLS8qXG4tICogU29tZW9uZSB3YW50cyB0byByZWFkIEBieXRlcyBmcm9tIGEgSFdQT0lTT04gaHVnZXRsYiBAZm9saW8gZnJvbSBAb2Zmc2V0LlxuLSAqIFJldHVybnMgdGhlIG1heGltdW0gbnVtYmVyIG9mIGJ5dGVzIG9uZSBjYW4gcmVhZCB3aXRob3V0IHRvdWNoaW5nIHRoZSAxc3QgcmF3XG4tICogSFdQT0lTT04gcGFnZS5cbi0gKi9cbi1zdGF0aWMgc2l6ZV90IGFkanVzdF9yYW5nZV9od3BvaXNvbihzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzaXplX3Qgb2Zmc2V0LFxuLVx0XHRzaXplX3QgYnl0ZXMpXG4te1xuLVx0c3RydWN0IHBhZ2UgKnBhZ2UgPSBmb2xpb19wYWdlKGZvbGlvLCBvZmZzZXQgLyBQQUdFX1NJWkUpO1xuLVx0c2l6ZV90IHNhZmVfYnl0ZXM7XG4tXG4tXHRpZiAoaXNfcmF3X2h3cG9pc29uX3BhZ2VfaW5faHVnZXBhZ2UocGFnZSkpXG4tXHRcdHJldHVybiAwO1xuLVx0LyogU2FmZSB0byByZWFkIHRoZSByZW1haW5pbmcgYnl0ZXMgaW4gdGhpcyBwYWdlLiAqL1xuLVx0c2FmZV9ieXRlcyA9IFBBR0VfU0laRSAtIChvZmZzZXQgJSBQQUdFX1NJWkUpO1xuLVx0cGFnZSsrO1xuLVxuLVx0LyogQ2hlY2sgZWFjaCByZW1haW5pbmcgcGFnZSBhcyBsb25nIGFzIHdlIGFyZSBub3QgZG9uZSB5ZXQuICovXG4tXHRmb3IgKDsgc2FmZV9ieXRlcyBcdTAwM2MgYnl0ZXM7IHNhZmVfYnl0ZXMgKz0gUEFHRV9TSVpFLCBwYWdlKyspXG4tXHRcdGlmIChpc19yYXdfaHdwb2lzb25fcGFnZV9pbl9odWdlcGFnZShwYWdlKSlcbi1cdFx0XHRicmVhaztcbi1cbi1cdHJldHVybiBtaW4oc2FmZV9ieXRlcywgYnl0ZXMpO1xuLX1cbi1cbi0vKlxuLSAqIFN1cHBvcnQgZm9yIHJlYWQoKSAtIEZpbmQgdGhlIHBhZ2UgYXR0YWNoZWQgdG8gZl9tYXBwaW5nIGFuZCBjb3B5IG91dCB0aGVcbi0gKiBkYXRhLiBUaGlzIHByb3ZpZGVzIGZ1bmN0aW9uYWxpdHkgc2ltaWxhciB0byBmaWxlbWFwX3JlYWQoKS5cbi0gKi9cbi1zdGF0aWMgc3NpemVfdCBodWdldGxiZnNfcmVhZF9pdGVyKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICp0bylcbi17XG4tXHRzdHJ1Y3QgZmlsZSAqZmlsZSA9IGlvY2ItXHUwMDNla2lfZmlscDtcbi1cdHN0cnVjdCBoc3RhdGUgKmggPSBoc3RhdGVfZmlsZShmaWxlKTtcbi1cdHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nID0gZmlsZS1cdTAwM2VmX21hcHBpbmc7XG4tXHRzdHJ1Y3QgaW5vZGUgKmlub2RlID0gbWFwcGluZy1cdTAwM2Vob3N0O1xuLVx0dW5zaWduZWQgbG9uZyBpbmRleCA9IGlvY2ItXHUwMDNla2lfcG9zIFx1MDAzZVx1MDAzZSBodWdlX3BhZ2Vfc2hpZnQoaCk7XG4tXHR1bnNpZ25lZCBsb25nIG9mZnNldCA9IGlvY2ItXHUwMDNla2lfcG9zIFx1MDAyNiB+aHVnZV9wYWdlX21hc2soaCk7XG4tXHR1bnNpZ25lZCBsb25nIGVuZF9pbmRleDtcbi1cdGxvZmZfdCBpc2l6ZTtcbi1cdHNzaXplX3QgcmV0dmFsID0gMDtcbi1cbi1cdHdoaWxlIChpb3ZfaXRlcl9jb3VudCh0bykpIHtcbi1cdFx0c3RydWN0IGZvbGlvICpmb2xpbztcbi1cdFx0c2l6ZV90IG5yLCBjb3BpZWQsIHdhbnQ7XG4tXG4tXHRcdC8qIG5yIGlzIHRoZSBtYXhpbXVtIG51bWJlciBvZiBieXRlcyB0byBjb3B5IGZyb20gdGhpcyBwYWdlICovXG4tXHRcdG5yID0gaHVnZV9wYWdlX3NpemUoaCk7XG4tXHRcdGlzaXplID0gaV9zaXplX3JlYWQoaW5vZGUpO1xuLVx0XHRpZiAoIWlzaXplKVxuLVx0XHRcdGJyZWFrO1xuLVx0XHRlbmRfaW5kZXggPSAoaXNpemUgLSAxKSBcdTAwM2VcdTAwM2UgaHVnZV9wYWdlX3NoaWZ0KGgpO1xuLVx0XHRpZiAoaW5kZXggXHUwMDNlIGVuZF9pbmRleClcbi1cdFx0XHRicmVhaztcbi1cdFx0aWYgKGluZGV4ID09IGVuZF9pbmRleCkge1xuLVx0XHRcdG5yID0gKChpc2l6ZSAtIDEpIFx1MDAyNiB+aHVnZV9wYWdlX21hc2soaCkpICsgMTtcbi1cdFx0XHRpZiAobnIgXHUwMDNjPSBvZmZzZXQpXG4tXHRcdFx0XHRicmVhaztcbi1cdFx0fVxuLVx0XHRuciA9IG5yIC0gb2Zmc2V0O1xuLVxuLVx0XHQvKiBGaW5kIHRoZSBmb2xpbyAqL1xuLVx0XHRmb2xpbyA9IGZpbGVtYXBfbG9ja19odWdldGxiX2ZvbGlvKGgsIG1hcHBpbmcsIGluZGV4KTtcbi1cdFx0aWYgKElTX0VSUihmb2xpbykpIHtcbi1cdFx0XHQvKlxuLVx0XHRcdCAqIFdlIGhhdmUgYSBIT0xFLCB6ZXJvIG91dCB0aGUgdXNlci1idWZmZXIgZm9yIHRoZVxuLVx0XHRcdCAqIGxlbmd0aCBvZiB0aGUgaG9sZSBvciByZXF1ZXN0LlxuLVx0XHRcdCAqL1xuLVx0XHRcdGNvcGllZCA9IGlvdl9pdGVyX3plcm8obnIsIHRvKTtcbi1cdFx0fSBlbHNlIHtcbi1cdFx0XHRmb2xpb191bmxvY2soZm9saW8pO1xuLVxuLVx0XHRcdGlmICghZm9saW9fdGVzdF9od3BvaXNvbihmb2xpbykpXG4tXHRcdFx0XHR3YW50ID0gbnI7XG4tXHRcdFx0ZWxzZSB7XG4tXHRcdFx0XHQvKlxuLVx0XHRcdFx0ICogQWRqdXN0IGhvdyBtYW55IGJ5dGVzIHNhZmUgdG8gcmVhZCB3aXRob3V0XG4tXHRcdFx0XHQgKiB0b3VjaGluZyB0aGUgMXN0IHJhdyBIV1BPSVNPTiBwYWdlIGFmdGVyXG4tXHRcdFx0XHQgKiBvZmZzZXQuXG4tXHRcdFx0XHQgKi9cbi1cdFx0XHRcdHdhbnQgPSBhZGp1c3RfcmFuZ2VfaHdwb2lzb24oZm9saW8sIG9mZnNldCwgbnIpO1xuLVx0XHRcdFx0aWYgKHdhbnQgPT0gMCkge1xuLVx0XHRcdFx0XHRmb2xpb19wdXQoZm9saW8pO1xuLVx0XHRcdFx0XHRyZXR2YWwgPSAtRUlPO1xuLVx0XHRcdFx0XHRicmVhaztcbi1cdFx0XHRcdH1cbi1cdFx0XHR9XG4tXG4tXHRcdFx0Lypcbi1cdFx0XHQgKiBXZSBoYXZlIHRoZSBmb2xpbywgY29weSBpdCB0byB1c2VyIHNwYWNlIGJ1ZmZlci5cbi1cdFx0XHQgKi9cbi1cdFx0XHRjb3BpZWQgPSBjb3B5X2ZvbGlvX3RvX2l0ZXIoZm9saW8sIG9mZnNldCwgd2FudCwgdG8pO1xuLVx0XHRcdGZvbGlvX3B1dChmb2xpbyk7XG4tXHRcdH1cbi1cdFx0b2Zmc2V0ICs9IGNvcGllZDtcbi1cdFx0cmV0dmFsICs9IGNvcGllZDtcbi1cdFx0aWYgKGNvcGllZCAhPSBuciBcdTAwMjZcdTAwMjYgaW92X2l0ZXJfY291bnQodG8pKSB7XG4tXHRcdFx0aWYgKCFyZXR2YWwpXG4tXHRcdFx0XHRyZXR2YWwgPSAtRUZBVUxUO1xuLVx0XHRcdGJyZWFrO1xuLVx0XHR9XG4tXHRcdGluZGV4ICs9IG9mZnNldCBcdTAwM2VcdTAwM2UgaHVnZV9wYWdlX3NoaWZ0KGgpO1xuLVx0XHRvZmZzZXQgXHUwMDI2PSB+aHVnZV9wYWdlX21hc2soaCk7XG4tXHR9XG4tXHRpb2NiLVx1MDAzZWtpX3BvcyA9ICgobG9mZl90KWluZGV4IFx1MDAzY1x1MDAzYyBodWdlX3BhZ2Vfc2hpZnQoaCkpICsgb2Zmc2V0O1xuLVx0cmV0dXJuIHJldHZhbDtcbi19XG4tXG4gc3RhdGljIGludCBodWdldGxiZnNfd3JpdGVfYmVnaW4oY29uc3Qgc3RydWN0IGtpb2NiICppb2NiLFxuIFx0XHRcdHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxuIFx0XHRcdGxvZmZfdCBwb3MsIHVuc2lnbmVkIGxlbixcbkBAIC04ODMsNiArNzc2LDE3IEBAIHN0YXRpYyBzdHJ1Y3QgaW5vZGUgKmh1Z2V0bGJmc19nZXRfcm9vdChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxuIFx0cmV0dXJuIGlub2RlO1xuIH1cbiBcbitzdGF0aWMgdm9pZCBodWdldGxiZnNfaW5pdF9yZWd1bGFyX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4re1xuK1x0c3RydWN0IGhzdGF0ZSAqaHN0YXRlID0gaHN0YXRlX2lub2RlKGlub2RlKTtcbitcdHVuc2lnbmVkIGludCBvcmRlciA9IGh1Z2VfcGFnZV9vcmRlcihoc3RhdGUpO1xuK1xuK1x0aW5vZGUtXHUwMDNlaV9vcCA9IFx1MDAyNmh1Z2V0bGJmc19pbm9kZV9vcGVyYXRpb25zO1xuK1x0aW5vZGUtXHUwMDNlaV9mb3AgPSBcdTAwMjZodWdldGxiZnNfZmlsZV9vcGVyYXRpb25zO1xuK1x0bWFwcGluZ19zZXRfZm9saW9fb3JkZXJfcmFuZ2UoaW5vZGUtXHUwMDNlaV9tYXBwaW5nLCBvcmRlciwgb3JkZXIpO1xuK1x0bWFwcGluZ19zZXRfYXV0aG9yaXRhdGl2ZShpbm9kZS1cdTAwM2VpX21hcHBpbmcpO1xuK31cbitcbiAvKlxuICAqIEh1Z2V0bGJmcyBpcyBub3QgcmVjbGFpbWFibGU7IHRoZXJlZm9yZSBpdHMgaV9tbWFwX3J3c2VtIHdpbGwgbmV2ZXJcbiAgKiBiZSB0YWtlbiBmcm9tIHJlY2xhaW0gLS0gdW5saWtlIHJlZ3VsYXIgZmlsZXN5c3RlbXMuIFRoaXMgbmVlZHMgYW5cbkBAIC05MjYsOCArODMwLDcgQEAgc3RhdGljIHN0cnVjdCBpbm9kZSAqaHVnZXRsYmZzX2dldF9pbm9kZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxuIFx0XHRcdGluaXRfc3BlY2lhbF9pbm9kZShpbm9kZSwgbW9kZSwgZGV2KTtcbiBcdFx0XHRicmVhaztcbiBcdFx0Y2FzZSBTX0lGUkVHOlxuLVx0XHRcdGlub2RlLVx1MDAzZWlfb3AgPSBcdTAwMjZodWdldGxiZnNfaW5vZGVfb3BlcmF0aW9ucztcbi1cdFx0XHRpbm9kZS1cdTAwM2VpX2ZvcCA9IFx1MDAyNmh1Z2V0bGJmc19maWxlX29wZXJhdGlvbnM7XG4rXHRcdFx0aHVnZXRsYmZzX2luaXRfcmVndWxhcl9pbm9kZShpbm9kZSk7XG4gXHRcdFx0YnJlYWs7XG4gXHRcdGNhc2UgU19JRkRJUjpcbiBcdFx0XHRpbm9kZS1cdTAwM2VpX29wID0gXHUwMDI2aHVnZXRsYmZzX2Rpcl9pbm9kZV9vcGVyYXRpb25zO1xuQEAgLTEyMDYsNyArMTEwOSw3IEBAIHN0YXRpYyB2b2lkIGluaXRfb25jZSh2b2lkICpmb28pXG4gfVxuIFxuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGh1Z2V0bGJmc19maWxlX29wZXJhdGlvbnMgPSB7XG4tXHQucmVhZF9pdGVyXHRcdD0gaHVnZXRsYmZzX3JlYWRfaXRlcixcbitcdC5yZWFkX2l0ZXJcdFx0PSBnZW5lcmljX2ZpbGVfcmVhZF9pdGVyLFxuIFx0Lm1tYXBcdFx0XHQ9IGh1Z2V0bGJmc19maWxlX21tYXAsXG4gXHQuZnN5bmNcdFx0XHQ9IG5vb3BfZnN5bmMsXG4gXHQuZ2V0X3VubWFwcGVkX2FyZWFcdD0gaHVnZXRsYl9nZXRfdW5tYXBwZWRfYXJlYSxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaCBiL2luY2x1ZGUvbGludXgvaHVnZXRsYi5oXG5pbmRleCAyYWJhZjk5MzIxZTkwZC4uMTg3ODY0MmU3NWVjNTEgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaFxuKysrIGIvaW5jbHVkZS9saW51eC9odWdldGxiLmhcbkBAIC0xNjUsNyArMTY1LDcgQEAgYm9vbCBodWdldGxiZnNfcGFnZWNhY2hlX3ByZXNlbnQoc3RydWN0IGhzdGF0ZSAqaCxcbiBcdFx0XHRcdCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbiBcdFx0XHRcdCB1bnNpZ25lZCBsb25nIGFkZHJlc3MpO1xuIFxuLXN0cnVjdCBhZGRyZXNzX3NwYWNlICpodWdldGxiX2ZvbGlvX21hcHBpbmdfbG9ja193cml0ZShzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcbitzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqaHVnZXRsYl9mb2xpb19tYXBwaW5nX2xvY2tfd3JpdGUoY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbyk7XG4gXG4gZXh0ZXJuIGludCBtb3ZhYmxlX2dpZ2FudGljX3BhZ2VzIF9fcmVhZF9tb3N0bHk7XG4gZXh0ZXJuIGludCBzeXNjdGxfaHVnZXRsYl9zaG1fZ3JvdXAgX19yZWFkX21vc3RseTtcbkBAIC0yOTIsOCArMjkyLDcgQEAgc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGh1Z2V0bGJfdG90YWxfcGFnZXModm9pZClcbiBcdHJldHVybiAwO1xuIH1cbiBcbi1zdGF0aWMgaW5saW5lIHN0cnVjdCBhZGRyZXNzX3NwYWNlICpodWdldGxiX2ZvbGlvX21hcHBpbmdfbG9ja193cml0ZShcbi1cdFx0XHRcdFx0XHRcdHN0cnVjdCBmb2xpbyAqZm9saW8pXG4rc3RhdGljIGlubGluZSBzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqaHVnZXRsYl9mb2xpb19tYXBwaW5nX2xvY2tfd3JpdGUoY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbylcbiB7XG4gXHRyZXR1cm4gTlVMTDtcbiB9XG5AQCAtNTk1LDggKzU5NCw4IEBAIGVudW0gaHVnZXRsYl9wYWdlX2ZsYWdzIHtcbiAjaWZkZWYgQ09ORklHX0hVR0VUTEJfUEFHRVxuICNkZWZpbmUgVEVTVEhQQUdFRkxBRyh1bmFtZSwgZmxuYW1lKVx0XHRcdFx0XFxcbiBzdGF0aWMgX19hbHdheXNfaW5saW5lXHRcdFx0XHRcdFx0XFxcbi1ib29sIGZvbGlvX3Rlc3RfaHVnZXRsYl8jI2ZsbmFtZShzdHJ1Y3QgZm9saW8gKmZvbGlvKVx0XHRcXFxuLVx0e1x0dm9pZCAqcHJpdmF0ZSA9IFx1MDAyNmZvbGlvLVx1MDAzZXByaXZhdGU7XHRcdFxcXG4rYm9vbCBmb2xpb190ZXN0X2h1Z2V0bGJfIyNmbG5hbWUoY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbylcdFxcXG4rXHR7XHRjb25zdCB2b2lkICpwcml2YXRlID0gXHUwMDI2Zm9saW8tXHUwMDNlcHJpdmF0ZTtcdFx0XFxcbiBcdFx0cmV0dXJuIHRlc3RfYml0KEhQR18jI2ZsbmFtZSwgcHJpdmF0ZSk7XHRcdFxcXG4gXHR9XG4gXG5AQCAtNjE2LDcgKzYxNSw3IEBAIHZvaWQgZm9saW9fY2xlYXJfaHVnZXRsYl8jI2ZsbmFtZShzdHJ1Y3QgZm9saW8gKmZvbGlvKVx0XHRcXFxuICNlbHNlXG4gI2RlZmluZSBURVNUSFBBR0VGTEFHKHVuYW1lLCBmbG5hbWUpXHRcdFx0XHRcXFxuIHN0YXRpYyBpbmxpbmUgYm9vbFx0XHRcdFx0XHRcdFxcXG4tZm9saW9fdGVzdF9odWdldGxiXyMjZmxuYW1lKHN0cnVjdCBmb2xpbyAqZm9saW8pXHRcdFxcXG4rZm9saW9fdGVzdF9odWdldGxiXyMjZmxuYW1lKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8pXHRcdFxcXG4gXHR7IHJldHVybiAwOyB9XG4gXG4gI2RlZmluZSBTRVRIUEFHRUZMQUcodW5hbWUsIGZsbmFtZSlcdFx0XHRcdFxcXG5AQCAtNzI3LDcgKzcyNiw3IEBAIHN0YXRpYyBpbmxpbmUgc3RydWN0IGh1Z2VwYWdlX3N1YnBvb2wgKnN1YnBvb2xfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSlcbiBcdHJldHVybiBIVUdFVExCRlNfU0IoaW5vZGUtXHUwMDNlaV9zYiktXHUwMDNlc3Bvb2w7XG4gfVxuIFxuLXN0YXRpYyBpbmxpbmUgc3RydWN0IGh1Z2VwYWdlX3N1YnBvb2wgKmh1Z2V0bGJfZm9saW9fc3VicG9vbChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuK3N0YXRpYyBpbmxpbmUgc3RydWN0IGh1Z2VwYWdlX3N1YnBvb2wgKmh1Z2V0bGJfZm9saW9fc3VicG9vbChjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIHtcbiBcdHJldHVybiBmb2xpby1cdTAwM2VfaHVnZXRsYl9zdWJwb29sO1xuIH1cbkBAIC04NTcsNyArODU2LDcgQEAgc3RhdGljIGlubGluZSBib29sIGFyY2hfaGFzX2h1Z2VfYm9vdG1lbV9hbGxvYyh2b2lkKVxuIH1cbiAjZW5kaWZcbiBcbi1zdGF0aWMgaW5saW5lIHN0cnVjdCBoc3RhdGUgKmZvbGlvX2hzdGF0ZShzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuK3N0YXRpYyBpbmxpbmUgc3RydWN0IGhzdGF0ZSAqZm9saW9faHN0YXRlKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8pXG4ge1xuIFx0Vk1fQlVHX09OX0ZPTElPKCFmb2xpb190ZXN0X2h1Z2V0bGIoZm9saW8pLCBmb2xpbyk7XG4gXHRyZXR1cm4gc2l6ZV90b19oc3RhdGUoZm9saW9fc2l6ZShmb2xpbykpO1xuQEAgLTEwNzAsMTEgKzEwNjksNiBAQCB2b2lkIGh1Z2V0bGJfcmVnaXN0ZXJfbm9kZShzdHJ1Y3Qgbm9kZSAqbm9kZSk7XG4gdm9pZCBodWdldGxiX3VucmVnaXN0ZXJfbm9kZShzdHJ1Y3Qgbm9kZSAqbm9kZSk7XG4gI2VuZGlmXG4gXG4tLypcbi0gKiBDaGVjayBpZiBhIGdpdmVuIHJhdyBAcGFnZSBpbiBhIGh1Z2VwYWdlIGlzIEhXUE9JU09OLlxuLSAqL1xuLWJvb2wgaXNfcmF3X2h3cG9pc29uX3BhZ2VfaW5faHVnZXBhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UpO1xuLVxuIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBodWdlX3BhZ2VfbWFza19hbGlnbihzdHJ1Y3QgZmlsZSAqZmlsZSlcbiB7XG4gXHRyZXR1cm4gUEFHRV9NQVNLIFx1MDAyNiB+aHVnZV9wYWdlX21hc2soaHN0YXRlX2ZpbGUoZmlsZSkpO1xuQEAgLTEwODgsNyArMTA4Miw3IEBAIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBodWdlX3BhZ2VfbWFza19hbGlnbihzdHJ1Y3QgZmlsZSAqZmlsZSlcbiBcdHJldHVybiAwO1xuIH1cbiBcbi1zdGF0aWMgaW5saW5lIHN0cnVjdCBodWdlcGFnZV9zdWJwb29sICpodWdldGxiX2ZvbGlvX3N1YnBvb2woc3RydWN0IGZvbGlvICpmb2xpbylcbitzdGF0aWMgaW5saW5lIHN0cnVjdCBodWdlcGFnZV9zdWJwb29sICpodWdldGxiX2ZvbGlvX3N1YnBvb2woY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbylcbiB7XG4gXHRyZXR1cm4gTlVMTDtcbiB9XG5AQCAtMTE1Nyw3ICsxMTUxLDcgQEAgc3RhdGljIGlubGluZSBzdHJ1Y3QgaHN0YXRlICpoc3RhdGVfdm1hKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxuIFx0cmV0dXJuIE5VTEw7XG4gfVxuIFxuLXN0YXRpYyBpbmxpbmUgc3RydWN0IGhzdGF0ZSAqZm9saW9faHN0YXRlKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4rc3RhdGljIGlubGluZSBzdHJ1Y3QgaHN0YXRlICpmb2xpb19oc3RhdGUoY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbylcbiB7XG4gXHRyZXR1cm4gTlVMTDtcbiB9XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tbV90eXBlcy5oIGIvaW5jbHVkZS9saW51eC9tbV90eXBlcy5oXG5pbmRleCBiMThjMmIyZTdkMmM2NS4uZDdhOWIwZDhiYmRmYjEgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L21tX3R5cGVzLmhcbisrKyBiL2luY2x1ZGUvbGludXgvbW1fdHlwZXMuaFxuQEAgLTM4Nyw3ICszODcsNyBAQCB0eXBlZGVmIHVuc2lnbmVkIHNob3J0IG1tX2lkX3Q7XG4gICogQF9odWdldGxiX3N1YnBvb2w6IERvIG5vdCB1c2UgZGlyZWN0bHksIHVzZSBhY2Nlc3NvciBpbiBodWdldGxiLmguXG4gICogQF9odWdldGxiX2Nncm91cDogRG8gbm90IHVzZSBkaXJlY3RseSwgdXNlIGFjY2Vzc29yIGluIGh1Z2V0bGJfY2dyb3VwLmguXG4gICogQF9odWdldGxiX2Nncm91cF9yc3ZkOiBEbyBub3QgdXNlIGRpcmVjdGx5LCB1c2UgYWNjZXNzb3IgaW4gaHVnZXRsYl9jZ3JvdXAuaC5cbi0gKiBAX2h1Z2V0bGJfaHdwb2lzb246IERvIG5vdCB1c2UgZGlyZWN0bHksIGNhbGwgcmF3X2h3cF9saXN0X2hlYWQoKS5cbisgKiBAaHVnZXRsYl9od3BvaXNvbjogTGlzdCBvZiBwYWdlcyB3aXRoIGh3cG9pc29uLlxuICAqIEBfZGVmZXJyZWRfbGlzdDogRm9saW9zIHRvIGJlIHNwbGl0IHVuZGVyIG1lbW9yeSBwcmVzc3VyZS5cbiAgKiBAX3VudXNlZF9zbGFiX29ial9leHRzOiBQbGFjZWhvbGRlciB0byBtYXRjaCBvYmpfZXh0cyBpbiBzdHJ1Y3Qgc2xhYi5cbiAgKlxuQEAgLTQ5OSw3ICs0OTksNyBAQCBzdHJ1Y3QgZm9saW8ge1xuIFx0XHRcdHZvaWQgKl9odWdldGxiX3N1YnBvb2w7XG4gXHRcdFx0dm9pZCAqX2h1Z2V0bGJfY2dyb3VwO1xuIFx0XHRcdHZvaWQgKl9odWdldGxiX2Nncm91cF9yc3ZkO1xuLVx0XHRcdHZvaWQgKl9odWdldGxiX2h3cG9pc29uO1xuK1x0XHRcdHN0cnVjdCBsbGlzdF9oZWFkIGh1Z2V0bGJfaHdwb2lzb247XG4gXHQvKiBwcml2YXRlOiB0aGUgdW5pb24gd2l0aCBzdHJ1Y3QgcGFnZSBpcyB0cmFuc2l0aW9uYWwgKi9cbiBcdFx0fTtcbiBcdFx0c3RydWN0IHBhZ2UgX19wYWdlXzM7XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmggYi9pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaFxuaW5kZXggNzIyM2Y2ZjRlMmI0MDMuLmIxNDZjNTIyODc0MWMwIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmhcbisrKyBiL2luY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oXG5AQCAtODkzLDE0ICs4OTMsMTkgQEAgc3RhdGljIGlubGluZSBpbnQgUGFnZVRyYW5zQ29tcG91bmQoY29uc3Qgc3RydWN0IHBhZ2UgKnBhZ2UpXG4gVEVTVFBBR0VGTEFHX0ZBTFNFKFRyYW5zQ29tcG91bmQsIHRyYW5zY29tcG91bmQpXG4gI2VuZGlmXG4gXG4tI2lmIGRlZmluZWQoQ09ORklHX01FTU9SWV9GQUlMVVJFKSBcdTAwMjZcdTAwMjYgZGVmaW5lZChDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UpXG4rI2lmIGRlZmluZWQoQ09ORklHX01FTU9SWV9GQUlMVVJFKSBcdTAwMjZcdTAwMjYgZGVmaW5lZChDT05GSUdfTEFSR0VfRk9MSU8pXG4gLypcbi0gKiBQYWdlSGFzSFdQb2lzb25lZCBpbmRpY2F0ZXMgdGhhdCBhdCBsZWFzdCBvbmUgc3VicGFnZSBpcyBod3BvaXNvbmVkIGluIHRoZVxuLSAqIGNvbXBvdW5kIHBhZ2UuXG4rICogZm9saW9faGFzX2h3cG9pc29uZWQgaW5kaWNhdGVzIHRoYXQgYXQgbGVhc3Qgb25lIHBhZ2UgaXMgaHdwb2lzb25lZCBpbiB0aGVcbisgKiBmb2xpby4gIFRoYXQgcGFnZSB3aWxsIHVzdWFsbHkgYWxzbyBoYXZlIHRoZSBIV1BvaXNvbiBmbGFnIHNldCwgYnV0IHRoaXNcbisgKiBpcyBub3QgcG9zc2libGUgZm9yIGZvbGlvcyB3aGljaCBoYXZlIEhWTyAoc2VlIG1lbW9yeS1mYWlsdXJlIGZvciB0aGVcbisgKiBzY2hlbWUgdXNlZCBpbiB0aGF0IGNhc2UpLiAgWW91IHByb2JhYmx5IGRvbid0IHdhbnQgdG8gY2FsbCB0aGlzIGRpcmVjdGx5O1xuKyAqIHVzZSBmb2xpb19oYXNfaHdwb2lzb25lZF9wYWdlKCkgaW5zdGVhZC5cbiAgKlxuICAqIFRoaXMgZmxhZyBpcyBzZXQgYnkgaHdwb2lzb24gaGFuZGxlci4gIENsZWFyZWQgYnkgVEhQIHNwbGl0IG9yIGZyZWUgcGFnZS5cbiAgKi9cbiBGT0xJT19GTEFHKGhhc19od3BvaXNvbmVkLCBGT0xJT19TRUNPTkRfUEFHRSlcbitGT0xJT19URVNUX1NFVF9GTEFHKGhhc19od3BvaXNvbmVkLCBGT0xJT19TRUNPTkRfUEFHRSlcbitGT0xJT19URVNUX0NMRUFSX0ZMQUcoaGFzX2h3cG9pc29uZWQsIEZPTElPX1NFQ09ORF9QQUdFKVxuICNlbHNlXG4gRk9MSU9fRkxBR19GQUxTRShoYXNfaHdwb2lzb25lZClcbiAjZW5kaWZcbkBAIC0xMDQxLDggKzEwNDYsMjUgQEAgUEFHRV9UWVBFX09QUyhTbGFiLCBzbGFiLCBzbGFiKVxuIFxuICNpZmRlZiBDT05GSUdfSFVHRVRMQl9QQUdFXG4gRk9MSU9fVFlQRV9PUFMoaHVnZXRsYiwgaHVnZXRsYilcbitcbitzdGF0aWMgaW5saW5lIGJvb2wgZm9saW9fdGVzdF9odWdlX3BvaXNvbihjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuK3tcbitcdHJldHVybiAoUkVBRF9PTkNFKGZvbGlvLVx1MDAzZXBhZ2UucGFnZV90eXBlKSBcdTAwM2VcdTAwM2UgMjMpID09XG4rXHRcdCgoUEdUWV9odWdldGxiIFx1MDAzY1x1MDAzYyAxKSB8IDEpO1xuK31cbitcbitzdGF0aWMgaW5saW5lIHZvaWQgZm9saW9fc2V0X2h1Z2VfcG9pc29uKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4re1xuK1x0Zm9saW8tXHUwMDNlcGFnZS5wYWdlX3R5cGUgfD0gKDEgXHUwMDNjXHUwMDNjIDIzKTtcbit9XG4rXG4rc3RhdGljIGlubGluZSB2b2lkIGZvbGlvX2NsZWFyX2h1Z2VfcG9pc29uKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4re1xuK1x0Zm9saW8tXHUwMDNlcGFnZS5wYWdlX3R5cGUgXHUwMDI2PSB+KDEgXHUwMDNjXHUwMDNjIDIzKTtcbit9XG4gI2Vsc2VcbiBGT0xJT19URVNUX0ZMQUdfRkFMU0UoaHVnZXRsYilcbitGT0xJT19URVNUX0ZMQUdfRkFMU0UoaHVnZV9wb2lzb24pXG4gI2VuZGlmXG4gXG4gUEFHRV9UWVBFX09QUyhac21hbGxvYywgenNtYWxsb2MsIHpzbWFsbG9jKVxuQEAgLTEwNjgsMTAgKzEwOTAsMTQgQEAgc3RhdGljIGlubGluZSBib29sIFBhZ2VIdWdlKGNvbnN0IHN0cnVjdCBwYWdlICpwYWdlKVxuIFx0cmV0dXJuIGZvbGlvX3Rlc3RfaHVnZXRsYihwYWdlX2ZvbGlvKHBhZ2UpKTtcbiB9XG4gXG4rYm9vbCBodWdldGxiX3BhZ2VfaHdwb2lzb24oY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbywgY29uc3Qgc3RydWN0IHBhZ2UgKnBhZ2UpO1xuK2Jvb2wgaHVnZXRsYl91bnJlZl9wYWdlX2h3cG9pc29uKGNvbnN0IHN0cnVjdCBwYWdlICpwYWdlKTtcbitcbiAvKlxuLSAqIENoZWNrIGlmIGEgcGFnZSBpcyBjdXJyZW50bHkgbWFya2VkIEhXUG9pc29uZWQuIE5vdGUgdGhhdCB0aGlzIGNoZWNrIGlzXG4tICogYmVzdCBlZmZvcnQgb25seSBhbmQgaW5oZXJlbnRseSByYWN5OiB0aGVyZSBpcyBubyB3YXkgdG8gc3luY2hyb25pemUgd2l0aFxuLSAqIGZhaWxpbmcgaGFyZHdhcmUuXG4rICogQ2hlY2sgaWYgYSBwYWdlIGlzIGN1cnJlbnRseSBtYXJrZWQgSFdQb2lzb25lZC4gIFRoaXMgY2hlY2sgaXMgYmVzdFxuKyAqIGVmZm9ydCBvbmx5IGFuZCBpbmhlcmVudGx5IHJhY3k6IHRoZXJlIGlzIG5vIHdheSB0byBzeW5jaHJvbml6ZSB3aXRoXG4rICogZmFpbGluZyBoYXJkd2FyZS4gIFRoZSBjYWxsZXIgbWF5IG5vdCBoYXZlIGEgcmVmY291bnQgb24gdGhlIGZvbGlvXG4rICogY29udGFpbmluZyB0aGUgcGFnZSwgc28gd2UgbXVzdCBiZSBjYXJlZnVsIHRvIG5vdCB0cmlwIGFueSBhc3NlcnRpb25zLlxuICAqL1xuIHN0YXRpYyBpbmxpbmUgYm9vbCBpc19wYWdlX2h3cG9pc29uKGNvbnN0IHN0cnVjdCBwYWdlICpwYWdlKVxuIHtcbkBAIC0xMDgwLDEzICsxMTA2LDI2IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBpc19wYWdlX2h3cG9pc29uKGNvbnN0IHN0cnVjdCBwYWdlICpwYWdlKVxuIFx0aWYgKFBhZ2VIV1BvaXNvbihwYWdlKSlcbiBcdFx0cmV0dXJuIHRydWU7XG4gXHRmb2xpbyA9IHBhZ2VfZm9saW8ocGFnZSk7XG4tXHRyZXR1cm4gZm9saW9fdGVzdF9odWdldGxiKGZvbGlvKSBcdTAwMjZcdTAwMjYgUGFnZUhXUG9pc29uKFx1MDAyNmZvbGlvLVx1MDAzZXBhZ2UpO1xuK1x0aWYgKGZvbGlvX3Rlc3RfaHVnZV9wb2lzb24oZm9saW8pKVxuK1x0XHRyZXR1cm4gaHVnZXRsYl91bnJlZl9wYWdlX2h3cG9pc29uKHBhZ2UpO1xuK1x0LyogSW4gY2FzZSB3ZSByYWNlZCB3aXRoIGh1Z2V0bGIgdHJhbnNmZXJyaW5nIGZsYWdzICovXG4rXHRyZXR1cm4gUGFnZUhXUG9pc29uKHBhZ2UpO1xuK31cbitcbitzdGF0aWMgaW5saW5lIGJvb2wgaXNfcmVmX3BhZ2VfaHdwb2lzb24oY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbyxcbitcdFx0Y29uc3Qgc3RydWN0IHBhZ2UgKnBhZ2UpXG4re1xuK1x0aWYgKFBhZ2VIV1BvaXNvbihwYWdlKSlcbitcdFx0cmV0dXJuIHRydWU7XG4rXHRpZiAoZm9saW9fdGVzdF9odWdldGxiKGZvbGlvKSlcbitcdFx0cmV0dXJuIGh1Z2V0bGJfcGFnZV9od3BvaXNvbihmb2xpbywgcGFnZSk7XG4rXHRyZXR1cm4gZmFsc2U7XG4gfVxuIFxuLXN0YXRpYyBpbmxpbmUgYm9vbCBmb2xpb19jb250YWluX2h3cG9pc29uZWRfcGFnZShzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuK3N0YXRpYyBpbmxpbmUgYm9vbCBmb2xpb19oYXNfaHdwb2lzb25lZF9wYWdlKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8pXG4ge1xuLVx0cmV0dXJuIGZvbGlvX3Rlc3RfaHdwb2lzb24oZm9saW8pIHx8XG4tXHQgICAgKGZvbGlvX3Rlc3RfbGFyZ2UoZm9saW8pIFx1MDAyNlx1MDAyNiBmb2xpb190ZXN0X2hhc19od3BvaXNvbmVkKGZvbGlvKSk7XG4rXHRyZXR1cm4gUGFnZUhXUG9pc29uKFx1MDAyNmZvbGlvLVx1MDAzZXBhZ2UpIHx8XG4rXHQgICAgICAgKGZvbGlvX3Rlc3RfbGFyZ2UoZm9saW8pIFx1MDAyNlx1MDAyNiBmb2xpb190ZXN0X2hhc19od3BvaXNvbmVkKGZvbGlvKSk7XG4gfVxuIFxuIGJvb2wgaXNfZnJlZV9idWRkeV9wYWdlKGNvbnN0IHN0cnVjdCBwYWdlICpwYWdlKTtcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BhZ2VtYXAuaCBiL2luY2x1ZGUvbGludXgvcGFnZW1hcC5oXG5pbmRleCAyYzM3MThkNTkyZDZkZC4uNmZkZWU1YjAzNjIxYjkgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L3BhZ2VtYXAuaFxuKysrIGIvaW5jbHVkZS9saW51eC9wYWdlbWFwLmhcbkBAIC0yMTAsNiArMjEwLDcgQEAgZW51bSBtYXBwaW5nX2ZsYWdzIHtcbiBcdEFTX1dSSVRFQkFDS19NQVlfREVBRExPQ0tfT05fUkVDTEFJTSA9IDksXG4gXHRBU19LRVJORUxfRklMRSA9IDEwLFx0LyogbWFwcGluZyBmb3IgYSBmYWtlIGtlcm5lbCBmaWxlIHRoYXQgc2hvdWxkbid0XG4gXHRcdFx0XHQgICBhY2NvdW50IHVzYWdlIHRvIHVzZXIgY2dyb3VwcyAqL1xuK1x0QVNfQVVUSE9SSVRBVElWRSA9IDExLFx0LyogSWYgd2UgbWlzcyBpbiB0aGUgcGFnZSBjYWNoZSwgaXQncyBhIGhvbGUgKi9cbiBcdC8qIEJpdHMgMTYtMjUgYXJlIHVzZWQgZm9yIEZPTElPX09SREVSICovXG4gXHRBU19GT0xJT19PUkRFUl9CSVRTID0gNSxcbiBcdEFTX0ZPTElPX09SREVSX01JTiA9IDE2LFxuQEAgLTM0NSw2ICszNDYsMTYgQEAgc3RhdGljIGlubGluZSBib29sIG1hcHBpbmdfd3JpdGViYWNrX21heV9kZWFkbG9ja19vbl9yZWNsYWltKGNvbnN0IHN0cnVjdCBhZGRyZXNcbiBcdHJldHVybiB0ZXN0X2JpdChBU19XUklURUJBQ0tfTUFZX0RFQURMT0NLX09OX1JFQ0xBSU0sIFx1MDAyNm1hcHBpbmctXHUwMDNlZmxhZ3MpO1xuIH1cbiBcbitzdGF0aWMgaW5saW5lIHZvaWQgbWFwcGluZ19zZXRfYXV0aG9yaXRhdGl2ZShzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZylcbit7XG4rXHRzZXRfYml0KEFTX0FVVEhPUklUQVRJVkUsIFx1MDAyNm1hcHBpbmctXHUwMDNlZmxhZ3MpO1xuK31cbitcbitzdGF0aWMgaW5saW5lIGJvb2wgbWFwcGluZ19pc19hdXRob3JpdGF0aXZlKGNvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nKVxuK3tcbitcdHJldHVybiB0ZXN0X2JpdChBU19BVVRIT1JJVEFUSVZFLCBcdTAwMjZtYXBwaW5nLVx1MDAzZWZsYWdzKTtcbit9XG4rXG4gc3RhdGljIGlubGluZSBnZnBfdCBtYXBwaW5nX2dmcF9tYXNrKGNvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nKVxuIHtcbiBcdHJldHVybiBtYXBwaW5nLVx1MDAzZWdmcF9tYXNrO1xuQEAgLTM3Myw3ICszODQsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgbWFwcGluZ19zZXRfZ2ZwX21hc2soc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm0sIGdmcF90IG1hc2spXG4gICogYXNzdW1wdGlvbnMgYWJvdXQgbWF4aW11bSBvcmRlciBpZiBUSFAgYXJlIGRpc2FibGVkLCBidXQgOCBzZWVtcyBsaWtlXG4gICogYSBnb29kIG9yZGVyICh0aGF0J3MgMU1CIGlmIHlvdSdyZSB1c2luZyA0a0IgcGFnZXMpXG4gICovXG4tI2lmZGVmIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRVxuKyNpZmRlZiBDT05GSUdfRklMRU1BUF9MQVJHRV9GT0xJT1xuICNkZWZpbmUgUFJFRkVSUkVEX01BWF9QQUdFQ0FDSEVfT1JERVJcdEhQQUdFX1BNRF9PUkRFUlxuICNlbHNlXG4gI2RlZmluZSBQUkVGRVJSRURfTUFYX1BBR0VDQUNIRV9PUkRFUlx0OFxuQEAgLTM5NCw3ICs0MDUsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgbWFwcGluZ19zZXRfZ2ZwX21hc2soc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm0sIGdmcF90IG1hc2spXG4gICovXG4gc3RhdGljIGlubGluZSBzaXplX3QgbWFwcGluZ19tYXhfZm9saW9fc2l6ZV9zdXBwb3J0ZWQodm9pZClcbiB7XG4tXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UpKVxuK1x0aWYgKElTX0VOQUJMRUQoQ09ORklHX0ZJTEVNQVBfTEFSR0VfRk9MSU8pKVxuIFx0XHRyZXR1cm4gMVUgXHUwMDNjXHUwMDNjIChQQUdFX1NISUZUICsgTUFYX1BBR0VDQUNIRV9PUkRFUik7XG4gXHRyZXR1cm4gUEFHRV9TSVpFO1xuIH1cbkBAIC00MDUsMjkgKzQxNiwyMyBAQCBzdGF0aWMgaW5saW5lIHNpemVfdCBtYXBwaW5nX21heF9mb2xpb19zaXplX3N1cHBvcnRlZCh2b2lkKVxuICAqIEBtaW46IE1pbmltdW0gZm9saW8gb3JkZXIgKGJldHdlZW4gMC1NQVhfUEFHRUNBQ0hFX09SREVSIGluY2x1c2l2ZSkuXG4gICogQG1heDogTWF4aW11bSBmb2xpbyBvcmRlciAoYmV0d2VlbiBAbWluLU1BWF9QQUdFQ0FDSEVfT1JERVIgaW5jbHVzaXZlKS5cbiAgKlxuLSAqIFRoZSBmaWxlc3lzdGVtIHNob3VsZCBjYWxsIHRoaXMgZnVuY3Rpb24gaW4gaXRzIGlub2RlIGNvbnN0cnVjdG9yIHRvXG4tICogaW5kaWNhdGUgd2hpY2ggYmFzZSBzaXplIChtaW4pIGFuZCBtYXhpbXVtIHNpemUgKG1heCkgb2YgZm9saW8gdGhlIFZGU1xuLSAqIGNhbiB1c2UgdG8gY2FjaGUgdGhlIGNvbnRlbnRzIG9mIHRoZSBmaWxlLiAgVGhpcyBzaG91bGQgb25seSBiZSB1c2VkXG4tICogaWYgdGhlIGZpbGVzeXN0ZW0gbmVlZHMgc3BlY2lhbCBoYW5kbGluZyBvZiBmb2xpbyBzaXplcyAoaWUgdGhlcmUgaXNcbi0gKiBzb21ldGhpbmcgdGhlIGNvcmUgY2Fubm90IGtub3cpLlxuKyAqIFRoZSBmaWxlc3lzdGVtIHNob3VsZCBjYWxsIHRoaXMgZnVuY3Rpb24gaW4gaXRzIGlub2RlIGNvbnN0cnVjdG9yXG4rICogdG8gaW5kaWNhdGUgd2hpY2ggc2l6ZSBmb2xpb3MgY2FuIGJlIHVzZWQgdG8gY2FjaGUgdGhlIGNvbnRlbnRzIG9mXG4rICogdGhlIGlub2RlLiAgVGhpcyBzaG91bGQgb25seSBiZSB1c2VkIGlmIHRoZSBmaWxlc3lzdGVtIG5lZWRzIHNwZWNpYWxcbisgKiBoYW5kbGluZyBvZiBmb2xpbyBzaXplcyAoaWUgdGhlcmUgaXMgc29tZXRoaW5nIHRoZSBjb3JlIGNhbm5vdCBrbm93KS5cbiAgKiBEbyBub3QgdHVuZSBpdCBiYXNlZCBvbiwgZWcsIGlfc2l6ZS5cbiAgKlxuKyAqIGh1Z2V0bGIgY2FsbHMgdGhpcyB3aXRoIG9yZGVycyBsYXJnZXIgdGhhbiBNQVhfUEFHRUNBQ0hFX09SREVSLlxuKyAqIE5vcm1hbCBmaWxlc3lzdGVtcyBzaG91bGQgbm90IGRvIHRoaXMuXG4rICpcbiAgKiBDb250ZXh0OiBUaGlzIHNob3VsZCBub3QgYmUgY2FsbGVkIHdoaWxlIHRoZSBpbm9kZSBpcyBhY3RpdmUgYXMgaXRcbiAgKiBpcyBub24tYXRvbWljLlxuICAqL1xuIHN0YXRpYyBpbmxpbmUgdm9pZCBtYXBwaW5nX3NldF9mb2xpb19vcmRlcl9yYW5nZShzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcbi1cdFx0XHRcdFx0XHQgdW5zaWduZWQgaW50IG1pbixcbi1cdFx0XHRcdFx0XHQgdW5zaWduZWQgaW50IG1heClcbitcdFx0dW5zaWduZWQgaW50IG1pbiwgdW5zaWduZWQgaW50IG1heClcbiB7XG4tXHRpZiAoIUlTX0VOQUJMRUQoQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFKSlcbitcdGlmICghSVNfRU5BQkxFRChDT05GSUdfRklMRU1BUF9MQVJHRV9GT0xJTykpXG4gXHRcdHJldHVybjtcbi1cbi1cdGlmIChtaW4gXHUwMDNlIE1BWF9QQUdFQ0FDSEVfT1JERVIpXG4tXHRcdG1pbiA9IE1BWF9QQUdFQ0FDSEVfT1JERVI7XG4tXG4tXHRpZiAobWF4IFx1MDAzZSBNQVhfUEFHRUNBQ0hFX09SREVSKVxuLVx0XHRtYXggPSBNQVhfUEFHRUNBQ0hFX09SREVSO1xuLVxuIFx0aWYgKG1heCBcdTAwM2MgbWluKVxuIFx0XHRtYXggPSBtaW47XG4gXG5AQCAtNDYwLDcgKzQ2NSw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBtYXBwaW5nX3NldF9sYXJnZV9mb2xpb3Moc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcpXG4gc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnRcbiBtYXBwaW5nX21heF9mb2xpb19vcmRlcihjb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZylcbiB7XG4tXHRpZiAoIUlTX0VOQUJMRUQoQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFKSlcbitcdGlmICghSVNfRU5BQkxFRChDT05GSUdfRklMRU1BUF9MQVJHRV9GT0xJTykpXG4gXHRcdHJldHVybiAwO1xuIFx0cmV0dXJuIChtYXBwaW5nLVx1MDAzZWZsYWdzIFx1MDAyNiBBU19GT0xJT19PUkRFUl9NQVhfTUFTSykgXHUwMDNlXHUwMDNlIEFTX0ZPTElPX09SREVSX01BWDtcbiB9XG5AQCAtNDY4LDcgKzQ3Myw3IEBAIG1hcHBpbmdfbWF4X2ZvbGlvX29yZGVyKGNvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nKVxuIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50XG4gbWFwcGluZ19taW5fZm9saW9fb3JkZXIoY29uc3Qgc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcpXG4ge1xuLVx0aWYgKCFJU19FTkFCTEVEKENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSkpXG4rXHRpZiAoIUlTX0VOQUJMRUQoQ09ORklHX0ZJTEVNQVBfTEFSR0VfRk9MSU8pKVxuIFx0XHRyZXR1cm4gMDtcbiBcdHJldHVybiAobWFwcGluZy1cdTAwM2VmbGFncyBcdTAwMjYgQVNfRk9MSU9fT1JERVJfTUlOX01BU0spIFx1MDAzZVx1MDAzZSBBU19GT0xJT19PUkRFUl9NSU47XG4gfVxuQEAgLTUyNCw3ICs1MjksNyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgbWFwcGluZ19sYXJnZV9mb2xpb19zdXBwb3J0KGNvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaVxuICAqXG4gICogUmV0dXJuOiBUcnVlIGlmIFBNRC1zaXplZCBmb2xpb3MgYXJlIHN1cHBvcnRlZCwgb3RoZXJ3aXNlIGZhbHNlLlxuICAqL1xuLSNpZmRlZiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VcbisjaWZkZWYgQ09ORklHX0ZJTEVNQVBfTEFSR0VfRk9MSU9cbiBzdGF0aWMgaW5saW5lIGJvb2wgbWFwcGluZ19wbWRfZm9saW9fc3VwcG9ydChjb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZylcbiB7XG4gXHQvKiBBU19GT0xJT19PUkRFUiBpcyBvbmx5IHJlYXNvbmFibGUgZm9yIHBhZ2VjYWNoZSBmb2xpb3MgKi9cbmRpZmYgLS1naXQgYS9tbS9LY29uZmlnIGIvbW0vS2NvbmZpZ1xuaW5kZXggOWUwY2E0ODI0OTA1NGYuLmU2NjZkZDE0Y2EwYzNkIDEwMDY0NFxuLS0tIGEvbW0vS2NvbmZpZ1xuKysrIGIvbW0vS2NvbmZpZ1xuQEAgLTg0MywxMSArODQzLDE1IEBAIGNvbmZpZyBQRVJTSVNURU5UX0hVR0VfWkVST19GT0xJT1xuIGNvbmZpZyBNTV9JRFxuIFx0ZGVmX2Jvb2wgblxuIFxuK2NvbmZpZyBMQVJHRV9GT0xJT1xuK1x0ZGVmX2Jvb2wgblxuK1x0c2VsZWN0IFhBUlJBWV9NVUxUSVxuK1xuIG1lbnVjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VcbiBcdGJvb2wgXCJUcmFuc3BhcmVudCBIdWdlcGFnZSBTdXBwb3J0XCJcbiBcdGRlcGVuZHMgb24gSEFWRV9BUkNIX1RSQU5TUEFSRU5UX0hVR0VQQUdFIFx1MDAyNlx1MDAyNiAhUFJFRU1QVF9SVFxuIFx0c2VsZWN0IENPTVBBQ1RJT05cbi1cdHNlbGVjdCBYQVJSQVlfTVVMVElcbitcdHNlbGVjdCBMQVJHRV9GT0xJT1xuIFx0c2VsZWN0IE1NX0lEXG4gXHRoZWxwXG4gXHQgIFRyYW5zcGFyZW50IEh1Z2VwYWdlcyBhbGxvd3MgdGhlIGtlcm5lbCB0byB1c2UgaHVnZSBwYWdlcyBhbmRcbmRpZmYgLS1naXQgYS9tbS9maWxlbWFwLmMgYi9tbS9maWxlbWFwLmNcbmluZGV4IDU4ZWI5ZDI0MDY0MzQ4Li41YThjYzIwZTYyNGU0ZCAxMDA2NDRcbi0tLSBhL21tL2ZpbGVtYXAuY1xuKysrIGIvbW0vZmlsZW1hcC5jXG5AQCAtMjQ4Myw2ICsyNDgzLDggQEAgc3RhdGljIHZvaWQgZmlsZW1hcF9nZXRfcmVhZF9iYXRjaChzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcbiBcbiBcdFx0aWYgKCFmb2xpb19iYXRjaF9hZGQoZmJhdGNoLCBmb2xpbykpXG4gXHRcdFx0YnJlYWs7XG4rXHRcdGlmIChmb2xpb19oYXNfaHdwb2lzb25lZF9wYWdlKGZvbGlvKSlcbitcdFx0XHRicmVhaztcbiBcdFx0aWYgKCFmb2xpb190ZXN0X3VwdG9kYXRlKGZvbGlvKSlcbiBcdFx0XHRicmVhaztcbiBcdFx0aWYgKGZvbGlvX3Rlc3RfcmVhZGFoZWFkKGZvbGlvKSlcbkBAIC0yNjk1LDYgKzI2OTcsOCBAQCBzdGF0aWMgaW50IGZpbGVtYXBfZ2V0X3BhZ2VzKHN0cnVjdCBraW9jYiAqaW9jYiwgc2l6ZV90IGNvdW50LFxuIFx0aWYgKCFmb2xpb19iYXRjaF9jb3VudChmYmF0Y2gpKSB7XG4gXHRcdERFRklORV9SRUFEQUhFQUQocmFjdGwsIGZpbHAsIFx1MDAyNmZpbHAtXHUwMDNlZl9yYSwgbWFwcGluZywgaW5kZXgpO1xuIFxuK1x0XHRpZiAobWFwcGluZ19pc19hdXRob3JpdGF0aXZlKG1hcHBpbmcpKVxuK1x0XHRcdHJldHVybiAwO1xuIFx0XHRpZiAoaW9jYi1cdTAwM2VraV9mbGFncyBcdTAwMjYgSU9DQl9OT0lPKVxuIFx0XHRcdHJldHVybiAtRUFHQUlOO1xuIFx0XHRpZiAoaW9jYi1cdTAwM2VraV9mbGFncyBcdTAwMjYgSU9DQl9OT1dBSVQpXG5AQCAtMjc0OSw2ICsyNzUzLDI5IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBwb3Nfc2FtZV9mb2xpbyhsb2ZmX3QgcG9zMSwgbG9mZl90IHBvczIsIHN0cnVjdCBmb2xpbyAqZm9saW8pXG4gXHRyZXR1cm4gKHBvczEgXHUwMDNlXHUwMDNlIHNoaWZ0ID09IHBvczIgXHUwMDNlXHUwMDNlIHNoaWZ0KTtcbiB9XG4gXG4rc3RhdGljIHNpemVfdCBhZGp1c3RfcmFuZ2VfaHdwb2lzb24oY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbywgc2l6ZV90IG9mZnNldCxcbitcdFx0c2l6ZV90IGJ5dGVzKVxuK3tcbitcdGNvbnN0IHN0cnVjdCBwYWdlICpwYWdlID0gZm9saW9fcGFnZShmb2xpbywgb2Zmc2V0IC8gUEFHRV9TSVpFKTtcbitcdHNpemVfdCBzYWZlX2J5dGVzO1xuK1xuK1x0aWYgKCFmb2xpb19oYXNfaHdwb2lzb25lZF9wYWdlKGZvbGlvKSlcbitcdFx0cmV0dXJuIGJ5dGVzO1xuK1x0aWYgKGlzX3JlZl9wYWdlX2h3cG9pc29uKGZvbGlvLCBwYWdlKSlcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHQvKiBTYWZlIHRvIHJlYWQgdGhlIHJlbWFpbmluZyBieXRlcyBpbiB0aGlzIHBhZ2UuICovXG4rXHRzYWZlX2J5dGVzID0gUEFHRV9TSVpFIC0gKG9mZnNldCAlIFBBR0VfU0laRSk7XG4rXHRwYWdlKys7XG4rXG4rXHQvKiBDaGVjayBlYWNoIHJlbWFpbmluZyBwYWdlIGFzIGxvbmcgYXMgd2UgYXJlIG5vdCBkb25lIHlldC4gKi9cbitcdGZvciAoOyBzYWZlX2J5dGVzIFx1MDAzYyBieXRlczsgc2FmZV9ieXRlcyArPSBQQUdFX1NJWkUsIHBhZ2UrKylcbitcdFx0aWYgKGlzX3JlZl9wYWdlX2h3cG9pc29uKGZvbGlvLCBwYWdlKSlcbitcdFx0XHRicmVhaztcbitcbitcdHJldHVybiBtaW4oc2FmZV9ieXRlcywgYnl0ZXMpO1xuK31cbitcbiBzdGF0aWMgdm9pZCBmaWxlbWFwX2VuZF9kcm9wYmVoaW5kX3JlYWQoc3RydWN0IGZvbGlvICpmb2xpbylcbiB7XG4gXHRpZiAoIWZvbGlvX3Rlc3RfZHJvcGJlaGluZChmb2xpbykpXG5AQCAtMjgyOCw2ICsyODU1LDIyIEBAIHNzaXplX3QgZmlsZW1hcF9yZWFkKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICppdGVyLFxuIFx0XHRcdGdvdG8gcHV0X2ZvbGlvcztcbiBcdFx0ZW5kX29mZnNldCA9IG1pbl90KGxvZmZfdCwgaXNpemUsIGlvY2ItXHUwMDNla2lfcG9zICsgaXRlci1cdTAwM2Vjb3VudCk7XG4gXG4rXHRcdGlmICghZm9saW9fYmF0Y2hfY291bnQoXHUwMDI2ZmJhdGNoKSkge1xuK1x0XHRcdHNpemVfdCBmc2l6ZSA9IG1hcHBpbmdfbWluX2ZvbGlvX25yYnl0ZXMobWFwcGluZyk7XG4rXHRcdFx0c2l6ZV90IG9mZnNldCA9IGlvY2ItXHUwMDNla2lfcG9zIFx1MDAyNiAoZnNpemUgLSAxKTtcbitcdFx0XHRzaXplX3QgYnl0ZXMgPSBtaW5fdChsb2ZmX3QsIGVuZF9vZmZzZXQgLSBpb2NiLVx1MDAzZWtpX3BvcyxcbitcdFx0XHRcdFx0ICAgICBmc2l6ZSAtIG9mZnNldCk7XG4rXHRcdFx0c2l6ZV90IGNvcGllZCA9IGlvdl9pdGVyX3plcm8oYnl0ZXMsIGl0ZXIpO1xuK1xuK1x0XHRcdGFscmVhZHlfcmVhZCArPSBjb3BpZWQ7XG4rXHRcdFx0aW9jYi1cdTAwM2VraV9wb3MgKz0gY29waWVkO1xuK1x0XHRcdGxhc3RfcG9zID0gaW9jYi1cdTAwM2VraV9wb3M7XG4rXG4rXHRcdFx0aWYgKGNvcGllZCBcdTAwM2MgYnl0ZXMpXG4rXHRcdFx0XHRlcnJvciA9IC1FRkFVTFQ7XG4rXHRcdFx0Y29udGludWU7XG4rXHRcdH1cbitcbiBcdFx0LypcbiBcdFx0ICogT25jZSB3ZSBzdGFydCBjb3B5aW5nIGRhdGEsIHdlIGRvbid0IHdhbnQgdG8gYmUgdG91Y2hpbmcgYW55XG4gXHRcdCAqIGNhY2hlbGluZXMgdGhhdCBtaWdodCBiZSBjb250ZW5kZWQ6XG5AQCAtMjg2MiwxNCArMjkwNSwxOCBAQCBzc2l6ZV90IGZpbGVtYXBfcmVhZChzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqaXRlcixcbiBcdFx0XHRpZiAod3JpdGFibHlfbWFwcGVkKVxuIFx0XHRcdFx0Zmx1c2hfZGNhY2hlX2ZvbGlvKGZvbGlvKTtcbiBcbi1cdFx0XHRjb3BpZWQgPSBjb3B5X2ZvbGlvX3RvX2l0ZXIoZm9saW8sIG9mZnNldCwgYnl0ZXMsIGl0ZXIpO1xuK1x0XHRcdGNvcGllZCA9IGFkanVzdF9yYW5nZV9od3BvaXNvbihmb2xpbywgb2Zmc2V0LCBieXRlcyk7XG4rXHRcdFx0aWYgKGNvcGllZCBcdTAwM2MgYnl0ZXMpXG4rXHRcdFx0XHRlcnJvciA9IC1FSU87XG4rXHRcdFx0Y29waWVkID0gY29weV9mb2xpb190b19pdGVyKGZvbGlvLCBvZmZzZXQsIGNvcGllZCwgaXRlcik7XG4gXG4gXHRcdFx0YWxyZWFkeV9yZWFkICs9IGNvcGllZDtcbiBcdFx0XHRpb2NiLVx1MDAzZWtpX3BvcyArPSBjb3BpZWQ7XG4gXHRcdFx0bGFzdF9wb3MgPSBpb2NiLVx1MDAzZWtpX3BvcztcbiBcbiBcdFx0XHRpZiAoY29waWVkIFx1MDAzYyBieXRlcykge1xuLVx0XHRcdFx0ZXJyb3IgPSAtRUZBVUxUO1xuK1x0XHRcdFx0aWYgKCFlcnJvcilcbitcdFx0XHRcdFx0ZXJyb3IgPSAtRUZBVUxUO1xuIFx0XHRcdFx0YnJlYWs7XG4gXHRcdFx0fVxuIFx0XHR9XG5kaWZmIC0tZ2l0IGEvbW0vaHVnZV9tZW1vcnkuYyBiL21tL2h1Z2VfbWVtb3J5LmNcbmluZGV4IDJiY2NiMGE1M2EwYTYwLi4zNTMzNDAzMDkxMDc0YyAxMDA2NDRcbi0tLSBhL21tL2h1Z2VfbWVtb3J5LmNcbisrKyBiL21tL2h1Z2VfbWVtb3J5LmNcbkBAIC00NDEzLDcgKzQ0MTMsNyBAQCBzdGF0aWMgYm9vbCB0aHBfdW5kZXJ1c2VkKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4gXHRpZiAoa2h1Z2VwYWdlZF9tYXhfcHRlc19ub25lID09IEhQQUdFX1BNRF9OUiAtIDEpXG4gXHRcdHJldHVybiBmYWxzZTtcbiBcbi1cdGlmIChmb2xpb19jb250YWluX2h3cG9pc29uZWRfcGFnZShmb2xpbykpXG4rXHRpZiAoZm9saW9faGFzX2h3cG9pc29uZWRfcGFnZShmb2xpbykpXG4gXHRcdHJldHVybiBmYWxzZTtcbiBcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGZvbGlvX25yX3BhZ2VzKGZvbGlvKTsgaSsrKSB7XG5kaWZmIC0tZ2l0IGEvbW0vaHVnZXRsYi5jIGIvbW0vaHVnZXRsYi5jXG5pbmRleCA1NzEyMTJiODA4MzVlYy4uYWFhYzZlMmFmNGMyNGEgMTAwNjQ0XG4tLS0gYS9tbS9odWdldGxiLmNcbisrKyBiL21tL2h1Z2V0bGIuY1xuQEAgLTEyNTUsNyArMTI1NSw3IEBAIHN0YXRpYyBzdHJ1Y3QgZm9saW8gKmRlcXVldWVfaHVnZXRsYl9mb2xpb19ub2RlX2V4YWN0KHN0cnVjdCBoc3RhdGUgKmgsXG4gXHRcdGlmIChwaW4gXHUwMDI2XHUwMDI2ICFmb2xpb19pc19sb25ndGVybV9waW5uYWJsZShmb2xpbykpXG4gXHRcdFx0Y29udGludWU7XG4gXG4tXHRcdGlmIChmb2xpb190ZXN0X2h3cG9pc29uKGZvbGlvKSlcbitcdFx0aWYgKGZvbGlvX3Rlc3RfaGFzX2h3cG9pc29uZWQoZm9saW8pKVxuIFx0XHRcdGNvbnRpbnVlO1xuIFxuIFx0XHRpZiAoaXNfbWlncmF0ZV9pc29sYXRlX3BhZ2UoXHUwMDI2Zm9saW8tXHUwMDNlcGFnZSkpXG5AQCAtMTQ5OCwxMCArMTQ5OCwxMCBAQCBzdGF0aWMgdm9pZCBfX3VwZGF0ZV9hbmRfZnJlZV9odWdldGxiX2ZvbGlvKHN0cnVjdCBoc3RhdGUgKmgsXG4gXHR9XG4gXG4gXHQvKlxuLVx0ICogTW92ZSBQYWdlSFdQb2lzb24gZmxhZyBmcm9tIGhlYWQgcGFnZSB0byB0aGUgcmF3IGVycm9yIHBhZ2VzLFxuLVx0ICogd2hpY2ggbWFrZXMgYW55IGhlYWx0aHkgc3VicGFnZXMgcmV1c2FibGUuXG4rXHQgKiBNb3ZlIEhXUG9pc29uIGZsYWcgdG8gZWFjaCBlcnJvciBwYWdlXG4rXHQgKiB3aGljaCBtYWtlcyBhbnkgaGVhbHRoeSBwYWdlcyByZXVzYWJsZS5cbiBcdCAqL1xuLVx0aWYgKHVubGlrZWx5KGZvbGlvX3Rlc3RfaHdwb2lzb24oZm9saW8pKSlcbitcdGlmICh1bmxpa2VseShmb2xpb190ZXN0X2hhc19od3BvaXNvbmVkKGZvbGlvKSkpXG4gXHRcdGZvbGlvX2NsZWFyX2h1Z2V0bGJfaHdwb2lzb24oZm9saW8pO1xuIFxuIFx0Vk1fQlVHX09OX0ZPTElPKGZvbGlvX3JlZl9jb3VudChmb2xpbyksIGZvbGlvKTtcbkBAIC0xNzc1LDcgKzE3NzUsNyBAQCB2b2lkIGluaXRfbmV3X2h1Z2V0bGJfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbylcbiAgKiBzdGFibGUuICBEdWUgdG8gbG9ja2luZyBvcmRlciwgd2UgY2FuIG9ubHkgdHJ5bG9ja193cml0ZS4gIElmIHdlIGNhblxuICAqIG5vdCBnZXQgdGhlIGxvY2ssIHNpbXBseSByZXR1cm4gTlVMTCB0byBjYWxsZXIuXG4gICovXG4tc3RydWN0IGFkZHJlc3Nfc3BhY2UgKmh1Z2V0bGJfZm9saW9fbWFwcGluZ19sb2NrX3dyaXRlKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4rc3RydWN0IGFkZHJlc3Nfc3BhY2UgKmh1Z2V0bGJfZm9saW9fbWFwcGluZ19sb2NrX3dyaXRlKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8pXG4ge1xuIFx0c3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcgPSBmb2xpb19tYXBwaW5nKGZvbGlvKTtcbiBcbkBAIC0zOTk4LDcgKzM5OTgsNyBAQCBsb25nIGRlbW90ZV9wb29sX2h1Z2VfcGFnZShzdHJ1Y3QgaHN0YXRlICpzcmMsIG5vZGVtYXNrX3QgKm5vZGVzX2FsbG93ZWQsXG4gXHRcdHN0cnVjdCBmb2xpbyAqZm9saW8sICpuZXh0O1xuIFxuIFx0XHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoZm9saW8sIG5leHQsIFx1MDAyNnNyYy1cdTAwM2VodWdlcGFnZV9mcmVlbGlzdHNbbm9kZV0sIGxydSkge1xuLVx0XHRcdGlmIChmb2xpb190ZXN0X2h3cG9pc29uKGZvbGlvKSlcbitcdFx0XHRpZiAoZm9saW9fdGVzdF9oYXNfaHdwb2lzb25lZChmb2xpbykpXG4gXHRcdFx0XHRjb250aW51ZTtcbiBcbiBcdFx0XHRyZW1vdmVfaHVnZXRsYl9mb2xpbyhzcmMsIGZvbGlvLCBmYWxzZSk7XG5AQCAtNTgwOSw3ICs1ODA5LDcgQEAgc3RhdGljIHZtX2ZhdWx0X3QgaHVnZXRsYl9ub19wYWdlKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxuIFx0XHQgKiBkb24ndCBoYXZlIGh3cG9pc29uZWQgc3dhcCBlbnRyeSBmb3IgZXJyb3JlZCB2aXJ0dWFsIGFkZHJlc3MuXG4gXHRcdCAqIFNvIHdlIG5lZWQgdG8gYmxvY2sgaHVnZXBhZ2UgZmF1bHQgYnkgUEdfaHdwb2lzb24gYml0IGNoZWNrLlxuIFx0XHQgKi9cbi1cdFx0aWYgKHVubGlrZWx5KGZvbGlvX3Rlc3RfaHdwb2lzb24oZm9saW8pKSkge1xuK1x0XHRpZiAodW5saWtlbHkoZm9saW9fdGVzdF9oYXNfaHdwb2lzb25lZChmb2xpbykpKSB7XG4gXHRcdFx0cmV0ID0gVk1fRkFVTFRfSFdQT0lTT05fTEFSR0UgfFxuIFx0XHRcdFx0Vk1fRkFVTFRfU0VUX0hJTkRFWChoc3RhdGVfaW5kZXgoaCkpO1xuIFx0XHRcdGdvdG8gYmFja291dF91bmxvY2tlZDtcbkBAIC02MzE4LDcgKzYzMTgsNyBAQCBpbnQgaHVnZXRsYl9tZmlsbF9hdG9taWNfcHRlKHB0ZV90ICpkc3RfcHRlLFxuIFx0cHRsID0gaHVnZV9wdGVfbG9jayhoLCBkc3RfbW0sIGRzdF9wdGUpO1xuIFxuIFx0cmV0ID0gLUVJTztcbi1cdGlmIChmb2xpb190ZXN0X2h3cG9pc29uKGZvbGlvKSlcbitcdGlmIChmb2xpb190ZXN0X2hhc19od3BvaXNvbmVkKGZvbGlvKSlcbiBcdFx0Z290byBvdXRfcmVsZWFzZV91bmxvY2s7XG4gXG4gXHRyZXQgPSAtRUVYSVNUO1xuZGlmZiAtLWdpdCBhL21tL21lbW9yeS1mYWlsdXJlLmMgYi9tbS9tZW1vcnktZmFpbHVyZS5jXG5pbmRleCA1MTUwOGE1NWM0MDU1ZS4uNzNlYmJjOTM1NjYxODIgMTAwNjQ0XG4tLS0gYS9tbS9tZW1vcnktZmFpbHVyZS5jXG4rKysgYi9tbS9tZW1vcnktZmFpbHVyZS5jXG5AQCAtMTgxMCw1MCArMTgxMCw2NSBAQCBFWFBPUlRfU1lNQk9MX0dQTChtZl9kYXhfa2lsbF9wcm9jcyk7XG4gXG4gLypcbiAgKiBTdHJ1Y3QgcmF3X2h3cF9wYWdlIHJlcHJlc2VudHMgaW5mb3JtYXRpb24gYWJvdXQgXCJyYXcgZXJyb3IgcGFnZVwiLFxuLSAqIGNvbnN0cnVjdGluZyBzaW5nbHkgbGlua2VkIGxpc3QgZnJvbSAtXHUwMDNlX2h1Z2V0bGJfaHdwb2lzb24gZmllbGQgb2YgZm9saW8uXG4rICogY29uc3RydWN0aW5nIHNpbmdseSBsaW5rZWQgbGlzdCBmcm9tIGZvbGlvLVx1MDAzZWh1Z2V0bGJfaHdwb2lzb24gZmllbGQuXG4gICovXG4gc3RydWN0IHJhd19od3BfcGFnZSB7XG4gXHRzdHJ1Y3QgbGxpc3Rfbm9kZSBub2RlO1xuIFx0c3RydWN0IHBhZ2UgKnBhZ2U7XG4gfTtcbiBcbi1zdGF0aWMgaW5saW5lIHN0cnVjdCBsbGlzdF9oZWFkICpyYXdfaHdwX2xpc3RfaGVhZChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuK3N0YXRpYyBib29sIHByZWNpc2VfcGFnZV9wb2lzb25lZChjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuK1x0XHRjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSlcbiB7XG4tXHRyZXR1cm4gKHN0cnVjdCBsbGlzdF9oZWFkICopXHUwMDI2Zm9saW8tXHUwMDNlX2h1Z2V0bGJfaHdwb2lzb247XG4tfVxuLVxuLWJvb2wgaXNfcmF3X2h3cG9pc29uX3BhZ2VfaW5faHVnZXBhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UpXG4te1xuLVx0c3RydWN0IGxsaXN0X2hlYWQgKnJhd19od3BfaGVhZDtcbi1cdHN0cnVjdCByYXdfaHdwX3BhZ2UgKnA7XG4tXHRzdHJ1Y3QgZm9saW8gKmZvbGlvID0gcGFnZV9mb2xpbyhwYWdlKTtcbi1cdGJvb2wgcmV0ID0gZmFsc2U7XG4tXG4tXHRpZiAoIWZvbGlvX3Rlc3RfaHdwb2lzb24oZm9saW8pKVxuLVx0XHRyZXR1cm4gZmFsc2U7XG4tXG4tXHRpZiAoIWZvbGlvX3Rlc3RfaHVnZXRsYihmb2xpbykpXG4tXHRcdHJldHVybiBQYWdlSFdQb2lzb24ocGFnZSk7XG4rXHRjb25zdCBzdHJ1Y3QgbGxpc3RfaGVhZCAqbGlzdCA9IFx1MDAyNmZvbGlvLVx1MDAzZWh1Z2V0bGJfaHdwb2lzb247XG4rXHRjb25zdCBzdHJ1Y3QgcmF3X2h3cF9wYWdlICpwO1xuIFxuIFx0Lypcbi1cdCAqIFdoZW4gUmF3SHdwVW5yZWxpYWJsZSBpcyBzZXQsIGtlcm5lbCBsb3N0IHRyYWNrIG9mIHdoaWNoIHN1YnBhZ2VzXG4tXHQgKiBhcmUgSFdQT0lTT04uIFNvIHJldHVybiBhcyBpZiBBTEwgc3VicGFnZXMgYXJlIEhXUE9JU09OZWQuXG4rXHQgKiBXaGVuIFJhd0h3cFVucmVsaWFibGUgaXMgc2V0LCBrZXJuZWwgbG9zdCB0cmFjayBvZiB3aGljaCBwYWdlc1xuK1x0ICogYXJlIEhXUE9JU09OLiBTbyByZXR1cm4gYXMgaWYgQUxMIHBhZ2VzIGFyZSBIV1BPSVNPTmVkLlxuIFx0ICovXG4gXHRpZiAoZm9saW9fdGVzdF9odWdldGxiX3Jhd19od3BfdW5yZWxpYWJsZShmb2xpbykpXG4gXHRcdHJldHVybiB0cnVlO1xuIFxuLVx0bXV0ZXhfbG9jayhcdTAwMjZtZl9tdXRleCk7XG4tXG4tXHRyYXdfaHdwX2hlYWQgPSByYXdfaHdwX2xpc3RfaGVhZChmb2xpbyk7XG4tXHRsbGlzdF9mb3JfZWFjaF9lbnRyeShwLCByYXdfaHdwX2hlYWQtXHUwMDNlZmlyc3QsIG5vZGUpIHtcbi1cdFx0aWYgKHBhZ2UgPT0gcC1cdTAwM2VwYWdlKSB7XG4tXHRcdFx0cmV0ID0gdHJ1ZTtcbi1cdFx0XHRicmVhaztcbi1cdFx0fVxuK1x0bGxpc3RfZm9yX2VhY2hfZW50cnkocCwgUkVBRF9PTkNFKGxpc3QtXHUwMDNlZmlyc3QpLCBub2RlKSB7XG4rXHRcdGlmIChwYWdlID09IHAtXHUwMDNlcGFnZSlcbitcdFx0XHRyZXR1cm4gdHJ1ZTtcbiBcdH1cbiBcbi1cdG11dGV4X3VubG9jayhcdTAwMjZtZl9tdXRleCk7XG4rXHRyZXR1cm4gZmFsc2U7XG4rfVxuIFxuKy8qXG4rICogQ2hlY2sgaWYgYSBnaXZlbiBAcGFnZSBpbiBhIGh1Z2V0bGIgZm9saW8gaXMgSFdQT0lTT04uXG4rICovXG4rYm9vbCBodWdldGxiX3BhZ2VfaHdwb2lzb24oY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbywgY29uc3Qgc3RydWN0IHBhZ2UgKnBhZ2UpXG4re1xuK1x0aWYgKCFmb2xpb190ZXN0X2hhc19od3BvaXNvbmVkKGZvbGlvKSlcbitcdFx0cmV0dXJuIGZhbHNlO1xuK1xuK1x0cmV0dXJuIHByZWNpc2VfcGFnZV9wb2lzb25lZChmb2xpbywgcGFnZSk7XG4rfVxuK1xuKy8qXG4rICogV2UgaGF2ZSBubyByZWZlcmVuY2Ugb24gdGhlIGZvbGlvIGNvbnRhaW5pbmcgdGhpcyBwYWdlLlxuKyAqIFRoZSBodWdldGxiX2xvY2sga2VlcHMgaHVnZXRsYiBmb2xpb3MgZnJvbSBiZWluZyBmcmVlZC5cbisgKi9cbitib29sIGh1Z2V0bGJfdW5yZWZfcGFnZV9od3BvaXNvbihjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSlcbit7XG4rXHRjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvO1xuK1x0dW5zaWduZWQgbG9uZyBmbGFncztcbitcdGJvb2wgcmV0O1xuK1xuK1x0c3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2aHVnZXRsYl9sb2NrLCBmbGFncyk7XG4rXHRmb2xpbyA9IHBhZ2VfZm9saW8ocGFnZSk7XG4rXHRpZiAoIWZvbGlvX3Rlc3RfaHVnZV9wb2lzb24oZm9saW8pKSB7XG4rXHRcdHJldCA9IFBhZ2VIV1BvaXNvbihwYWdlKTtcbitcdFx0Z290byB1bmxvY2s7XG4rXHR9XG4rXG4rXHRyZXQgPSBwcmVjaXNlX3BhZ2VfcG9pc29uZWQoZm9saW8sIHBhZ2UpO1xuK3VubG9jazpcbitcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2aHVnZXRsYl9sb2NrLCBmbGFncyk7XG4gXHRyZXR1cm4gcmV0O1xuIH1cbiBcbkBAIC0xODYzLDcgKzE4NzgsNyBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBfX2ZvbGlvX2ZyZWVfcmF3X2h3cChzdHJ1Y3QgZm9saW8gKmZvbGlvLCBib29sIG1vdmVfZmxhZylcbiBcdHN0cnVjdCByYXdfaHdwX3BhZ2UgKnAsICpuZXh0O1xuIFx0dW5zaWduZWQgbG9uZyBjb3VudCA9IDA7XG4gXG4tXHRoZWFkID0gbGxpc3RfZGVsX2FsbChyYXdfaHdwX2xpc3RfaGVhZChmb2xpbykpO1xuK1x0aGVhZCA9IGxsaXN0X2RlbF9hbGwoXHUwMDI2Zm9saW8tXHUwMDNlaHVnZXRsYl9od3BvaXNvbik7XG4gXHRsbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHAsIG5leHQsIGhlYWQsIG5vZGUpIHtcbiBcdFx0aWYgKG1vdmVfZmxhZylcbiBcdFx0XHRTZXRQYWdlSFdQb2lzb24ocC1cdTAwM2VwYWdlKTtcbkBAIC0xODgxLDI2ICsxODk2LDQxIEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIF9fZm9saW9fZnJlZV9yYXdfaHdwKHN0cnVjdCBmb2xpbyAqZm9saW8sIGJvb2wgbW92ZV9mbGFnKVxuICNkZWZpbmVcdE1GX0hVR0VUTEJfRk9MSU9fUFJFX1BPSVNPTkVEXHQzXHQvKiBmb2xpbyBhbHJlYWR5IHBvaXNvbmVkICovXG4gI2RlZmluZVx0TUZfSFVHRVRMQl9QQUdFX1BSRV9QT0lTT05FRFx0NFx0LyogZXhhY3QgcGFnZSBhbHJlYWR5IHBvaXNvbmVkICovXG4gI2RlZmluZVx0TUZfSFVHRVRMQl9SRVRSWVx0XHQ1XHQvKiBodWdlcGFnZSBpcyBidXN5LCByZXRyeSAqL1xuK1xuK3N0YXRpYyBpbmxpbmUgaW50IGh1Z2V0bGJfc2V0X3BvaXNvbihzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuK3tcbitcdGlmIChmb2xpb190ZXN0X3NldF9oYXNfaHdwb2lzb25lZChmb2xpbykpXG4rXHRcdHJldHVybiBNRl9IVUdFVExCX0ZPTElPX1BSRV9QT0lTT05FRDtcbitcdGZvbGlvX3NldF9odWdlX3BvaXNvbihmb2xpbyk7XG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rc3RhdGljIGlubGluZSBpbnQgaHVnZXRsYl9jbGVhcl9wb2lzb24oc3RydWN0IGZvbGlvICpmb2xpbylcbit7XG4rXHRpZiAoIWZvbGlvX3Rlc3RfY2xlYXJfaGFzX2h3cG9pc29uZWQoZm9saW8pKVxuK1x0XHRyZXR1cm4gLUVCVVNZO1xuK1x0Zm9saW9fY2xlYXJfaHVnZV9wb2lzb24oZm9saW8pO1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuIC8qXG4gICogU2V0IGh1Z2V0bGIgZm9saW8gYXMgaHdwb2lzb25lZCwgdXBkYXRlIGZvbGlvIHByaXZhdGUgcmF3IGh3cG9pc29uIGxpc3RcbiAgKiB0byBrZWVwIHRyYWNrIG9mIHRoZSBwb2lzb25lZCBwYWdlcy5cbiAgKi9cbiBzdGF0aWMgaW50IGh1Z2V0bGJfdXBkYXRlX2h3cG9pc29uKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBwYWdlICpwYWdlKVxuIHtcbi1cdHN0cnVjdCBsbGlzdF9oZWFkICpoZWFkO1xuIFx0c3RydWN0IHJhd19od3BfcGFnZSAqcmF3X2h3cDtcbiBcdHN0cnVjdCByYXdfaHdwX3BhZ2UgKnA7XG4tXHRpbnQgcmV0ID0gZm9saW9fdGVzdF9zZXRfaHdwb2lzb24oZm9saW8pID8gTUZfSFVHRVRMQl9GT0xJT19QUkVfUE9JU09ORUQgOiAwO1xuK1x0aW50IHJldCA9IGh1Z2V0bGJfc2V0X3BvaXNvbihmb2xpbyk7XG4gXG4gXHQvKlxuIFx0ICogT25jZSB0aGUgaHdwb2lzb24gaHVnZXBhZ2UgaGFzIGxvc3QgcmVsaWFibGUgcmF3IGVycm9yIGluZm8sXG4tXHQgKiB0aGVyZSBpcyBsaXR0bGUgbWVhbmluZyB0byBrZWVwIGFkZGl0aW9uYWwgZXJyb3IgaW5mbyBwcmVjaXNlbHksXG4tXHQgKiBzbyBza2lwIHRvIGFkZCBhZGRpdGlvbmFsIHJhdyBlcnJvciBpbmZvLlxuK1x0ICogdGhlcmUgaXMgbm8gcG9pbnQgaW4ga2VlcGluZyBhZGRpdGlvbmFsIGVycm9yIGluZm8gcHJlY2lzZWx5LFxuK1x0ICogc28gc2tpcCBhZGRpbmcgYWRkaXRpb25hbCByYXcgZXJyb3IgaW5mby5cbiBcdCAqL1xuIFx0aWYgKGZvbGlvX3Rlc3RfaHVnZXRsYl9yYXdfaHdwX3VucmVsaWFibGUoZm9saW8pKVxuIFx0XHRyZXR1cm4gTUZfSFVHRVRMQl9GT0xJT19QUkVfUE9JU09ORUQ7XG4tXHRoZWFkID0gcmF3X2h3cF9saXN0X2hlYWQoZm9saW8pO1xuLVx0bGxpc3RfZm9yX2VhY2hfZW50cnkocCwgaGVhZC1cdTAwM2VmaXJzdCwgbm9kZSkge1xuK1x0bGxpc3RfZm9yX2VhY2hfZW50cnkocCwgZm9saW8tXHUwMDNlaHVnZXRsYl9od3BvaXNvbi5maXJzdCwgbm9kZSkge1xuIFx0XHRpZiAocC1cdTAwM2VwYWdlID09IHBhZ2UpXG4gXHRcdFx0cmV0dXJuIE1GX0hVR0VUTEJfUEFHRV9QUkVfUE9JU09ORUQ7XG4gXHR9XG5AQCAtMTkwOCw3ICsxOTM4LDcgQEAgc3RhdGljIGludCBodWdldGxiX3VwZGF0ZV9od3BvaXNvbihzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgcGFnZSAqcGFnZSlcbiBcdHJhd19od3AgPSBrbWFsbG9jX29iaihzdHJ1Y3QgcmF3X2h3cF9wYWdlLCBHRlBfQVRPTUlDKTtcbiBcdGlmIChyYXdfaHdwKSB7XG4gXHRcdHJhd19od3AtXHUwMDNlcGFnZSA9IHBhZ2U7XG4tXHRcdGxsaXN0X2FkZChcdTAwMjZyYXdfaHdwLVx1MDAzZW5vZGUsIGhlYWQpO1xuK1x0XHRsbGlzdF9hZGQoXHUwMDI2cmF3X2h3cC1cdTAwM2Vub2RlLCBcdTAwMjZmb2xpby1cdTAwM2VodWdldGxiX2h3cG9pc29uKTtcbiBcdH0gZWxzZSB7XG4gXHRcdC8qXG4gXHRcdCAqIEZhaWxlZCB0byBzYXZlIHJhdyBlcnJvciBpbmZvLiAgV2Ugbm8gbG9uZ2VyIHRyYWNlIGFsbFxuQEAgLTE5NTAsOCArMTk4MCw4IEBAIHZvaWQgZm9saW9fY2xlYXJfaHVnZXRsYl9od3BvaXNvbihzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIFx0XHRyZXR1cm47XG4gXHRpZiAoZm9saW9fdGVzdF9odWdldGxiX3ZtZW1tYXBfb3B0aW1pemVkKGZvbGlvKSlcbiBcdFx0cmV0dXJuO1xuLVx0Zm9saW9fY2xlYXJfaHdwb2lzb24oZm9saW8pO1xuIFx0Zm9saW9fZnJlZV9yYXdfaHdwKGZvbGlvLCB0cnVlKTtcbitcdGZvbGlvX2NsZWFyX2hhc19od3BvaXNvbmVkKGZvbGlvKTtcbiB9XG4gXG4gc3RhdGljIGludCBnZXRfaHVnZV9wYWdlX2Zvcl9od3BvaXNvbih1bnNpZ25lZCBsb25nIHBmbiwgaW50IGZsYWdzLFxuQEAgLTIxMDQsNiArMjEzNCwxMSBAQCBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgZm9saW9fZnJlZV9yYXdfaHdwKHN0cnVjdCBmb2xpbyAqZm9saW8sIGJvb2wgZmxhZylcbiB7XG4gXHRyZXR1cm4gMDtcbiB9XG4rXG4rc3RhdGljIGlubGluZSBpbnQgaHVnZXRsYl9jbGVhcl9wb2lzb24oc3RydWN0IGZvbGlvICpmb2xpbylcbit7XG4rXHRyZXR1cm4gMDtcbit9XG4gI2VuZGlmXHQvKiBDT05GSUdfSFVHRVRMQl9QQUdFICovXG4gXG4gLyogRHJvcCB0aGUgZXh0cmEgcmVmY291bnQgaW4gY2FzZSB3ZSBjb21lIGZyb20gbWFkdmlzZSgpICovXG5AQCAtMjY3Nyw3ICsyNzEyLDEyIEBAIGludCB1bnBvaXNvbl9tZW1vcnkodW5zaWduZWQgbG9uZyBwZm4pXG4gXHRwID0gcGZuX3RvX29ubGluZV9wYWdlKHBmbik7XG4gXHRpZiAoIXApXG4gXHRcdHJldHVybiAtRUlPO1xuLVx0Zm9saW8gPSBwYWdlX2ZvbGlvKHApO1xuK1xuK1x0aWYgKCFpc19wYWdlX2h3cG9pc29uKHApKSB7XG4rXHRcdHVucG9pc29uX3ByX2luZm8oXCIlI2x4OiBwYWdlIGlzIG5vdCBwb2lzb25lZFxcblwiLFxuK1x0XHRcdFx0IHBmbiwgXHUwMDI2dW5wb2lzb25fcnMpO1xuK1x0XHRyZXR1cm4gLUVCVVNZO1xuK1x0fVxuIFxuIFx0bXV0ZXhfbG9jayhcdTAwMjZtZl9tdXRleCk7XG4gXG5AQCAtMjY4OCw2ICsyNzI4LDggQEAgaW50IHVucG9pc29uX21lbW9yeSh1bnNpZ25lZCBsb25nIHBmbilcbiBcdFx0Z290byB1bmxvY2tfbXV0ZXg7XG4gXHR9XG4gXG4rXHRmb2xpbyA9IHBhZ2VfZm9saW8ocCk7XG4rXG4gXHRpZiAoaXNfaHVnZV96ZXJvX2ZvbGlvKGZvbGlvKSkge1xuIFx0XHR1bnBvaXNvbl9wcl9pbmZvKFwiJSNseDogaHVnZSB6ZXJvIHBhZ2UgaXMgbm90IHN1cHBvcnRlZFxcblwiLFxuIFx0XHRcdFx0IHBmbiwgXHUwMDI2dW5wb2lzb25fcnMpO1xuQEAgLTI2OTUsMTIgKzI3MzcsNiBAQCBpbnQgdW5wb2lzb25fbWVtb3J5KHVuc2lnbmVkIGxvbmcgcGZuKVxuIFx0XHRnb3RvIHVubG9ja19tdXRleDtcbiBcdH1cbiBcbi1cdGlmICghUGFnZUhXUG9pc29uKHApKSB7XG4tXHRcdHVucG9pc29uX3ByX2luZm8oXCIlI2x4OiBwYWdlIHdhcyBhbHJlYWR5IHVucG9pc29uZWRcXG5cIixcbi1cdFx0XHRcdCBwZm4sIFx1MDAyNnVucG9pc29uX3JzKTtcbi1cdFx0Z290byB1bmxvY2tfbXV0ZXg7XG4tXHR9XG4tXG4gXHRpZiAoZm9saW9fcmVmX2NvdW50KGZvbGlvKSBcdTAwM2UgMSkge1xuIFx0XHR1bnBvaXNvbl9wcl9pbmZvKFwiJSNseDogc29tZW9uZSBncmFicyB0aGUgaHdwb2lzb24gcGFnZVxcblwiLFxuIFx0XHRcdFx0IHBmbiwgXHUwMDI2dW5wb2lzb25fcnMpO1xuQEAgLTI3MzAsOCArMjc2Niw4IEBAIGludCB1bnBvaXNvbl9tZW1vcnkodW5zaWduZWQgbG9uZyBwZm4pXG4gXHRcdFx0Y291bnQgPSBmb2xpb19mcmVlX3Jhd19od3AoZm9saW8sIGZhbHNlKTtcbiBcdFx0XHRpZiAoY291bnQgPT0gMClcbiBcdFx0XHRcdGdvdG8gdW5sb2NrX211dGV4O1xuK1x0XHRcdHJldCA9IGh1Z2V0bGJfY2xlYXJfcG9pc29uKGZvbGlvKTtcbiBcdFx0fVxuLVx0XHRyZXQgPSBmb2xpb190ZXN0X2NsZWFyX2h3cG9pc29uKGZvbGlvKSA/IDAgOiAtRUJVU1k7XG4gXHR9IGVsc2UgaWYgKGdocCBcdTAwM2MgMCkge1xuIFx0XHRpZiAoZ2hwID09IC1FSFdQT0lTT04pIHtcbiBcdFx0XHRyZXQgPSBwdXRfcGFnZV9iYWNrX2J1ZGR5KHApID8gMCA6IC1FQlVTWTtcbkBAIC0yNzQwLDE2ICsyNzc2LDE4IEBAIGludCB1bnBvaXNvbl9tZW1vcnkodW5zaWduZWQgbG9uZyBwZm4pXG4gXHRcdFx0dW5wb2lzb25fcHJfaW5mbyhcIiUjbHg6IGZhaWxlZCB0byBncmFiIHBhZ2VcXG5cIixcbiBcdFx0XHRcdFx0IHBmbiwgXHUwMDI2dW5wb2lzb25fcnMpO1xuIFx0XHR9XG4tXHR9IGVsc2Uge1xuLVx0XHRpZiAoZm9saW9fdGVzdF9odWdldGxiKGZvbGlvKSkge1xuLVx0XHRcdGh1Z2UgPSB0cnVlO1xuLVx0XHRcdGNvdW50ID0gZm9saW9fZnJlZV9yYXdfaHdwKGZvbGlvLCBmYWxzZSk7XG4tXHRcdFx0aWYgKGNvdW50ID09IDApIHtcbi1cdFx0XHRcdGZvbGlvX3B1dChmb2xpbyk7XG4tXHRcdFx0XHRnb3RvIHVubG9ja19tdXRleDtcbi1cdFx0XHR9XG4rXHR9IGVsc2UgaWYgKGZvbGlvX3Rlc3RfaHVnZXRsYihmb2xpbykpIHtcbitcdFx0aHVnZSA9IHRydWU7XG4rXHRcdGNvdW50ID0gZm9saW9fZnJlZV9yYXdfaHdwKGZvbGlvLCBmYWxzZSk7XG4rXHRcdGlmIChjb3VudCA9PSAwKSB7XG4rXHRcdFx0Zm9saW9fcHV0KGZvbGlvKTtcbitcdFx0XHRnb3RvIHVubG9ja19tdXRleDtcbiBcdFx0fVxuLVxuK1x0XHRmb2xpb19wdXQoZm9saW8pO1xuK1x0XHRyZXQgPSBodWdldGxiX2NsZWFyX3BvaXNvbihmb2xpbyk7XG4rXHRcdGlmICghcmV0KVxuK1x0XHRcdGZvbGlvX3B1dChmb2xpbyk7XG4rXHR9IGVsc2Uge1xuIFx0XHRmb2xpb19wdXQoZm9saW8pO1xuIFx0XHRpZiAoVGVzdENsZWFyUGFnZUhXUG9pc29uKHApKSB7XG4gXHRcdFx0Zm9saW9fcHV0KGZvbGlvKTtcbmRpZmYgLS1naXQgYS9tbS9tZW1vcnlfaG90cGx1Zy5jIGIvbW0vbWVtb3J5X2hvdHBsdWcuY1xuaW5kZXggN2FjMTlmYWIyMjYzMjQuLjMzMDA3ZThlNTQ2YTA5IDEwMDY0NFxuLS0tIGEvbW0vbWVtb3J5X2hvdHBsdWcuY1xuKysrIGIvbW0vbWVtb3J5X2hvdHBsdWcuY1xuQEAgLTE4MTMsNyArMTgxMyw3IEBAIHN0YXRpYyB2b2lkIGRvX21pZ3JhdGVfcmFuZ2UodW5zaWduZWQgbG9uZyBzdGFydF9wZm4sIHVuc2lnbmVkIGxvbmcgZW5kX3BmbilcbiBcdFx0aWYgKGZvbGlvX3Rlc3RfbGFyZ2UoZm9saW8pKVxuIFx0XHRcdHBmbiA9IGZvbGlvX3Bmbihmb2xpbykgKyBmb2xpb19ucl9wYWdlcyhmb2xpbykgLSAxO1xuIFxuLVx0XHRpZiAoZm9saW9fY29udGFpbl9od3BvaXNvbmVkX3BhZ2UoZm9saW8pKSB7XG4rXHRcdGlmIChmb2xpb19oYXNfaHdwb2lzb25lZF9wYWdlKGZvbGlvKSkge1xuIFx0XHRcdC8qXG4gXHRcdFx0ICogdW5tYXBfcG9pc29uZWRfZm9saW8oKSBjYW5ub3QgaGFuZGxlIGxhcmdlIGZvbGlvc1xuIFx0XHRcdCAqIGluIGFsbCBjYXNlcyB5ZXQuXG5kaWZmIC0tZ2l0IGEvbW0vc2htZW0uYyBiL21tL3NobWVtLmNcbmluZGV4IGI1MWY4M2M5NzBiYjM3Li40OTJjOWJlZjM2MjA3NCAxMDA2NDRcbi0tLSBhL21tL3NobWVtLmNcbisrKyBiL21tL3NobWVtLmNcbkBAIC0zMjQwLDcgKzMyNDAsNyBAQCBzaG1lbV93cml0ZV9iZWdpbihjb25zdCBzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxuIFx0aWYgKHJldClcbiBcdFx0cmV0dXJuIHJldDtcbiBcbi1cdGlmIChmb2xpb19jb250YWluX2h3cG9pc29uZWRfcGFnZShmb2xpbykpIHtcbitcdGlmIChmb2xpb19oYXNfaHdwb2lzb25lZF9wYWdlKGZvbGlvKSkge1xuIFx0XHRmb2xpb191bmxvY2soZm9saW8pO1xuIFx0XHRmb2xpb19wdXQoZm9saW8pO1xuIFx0XHRyZXR1cm4gLUVJTztcbmRpZmYgLS1naXQgYS9tbS92bXNjYW4uYyBiL21tL3Ztc2Nhbi5jXG5pbmRleCAzNWMzYmIxNWFlOTZhMy4uNzBlNTRhY2UwZTc0MWMgMTAwNjQ0XG4tLS0gYS9tbS92bXNjYW4uY1xuKysrIGIvbW0vdm1zY2FuLmNcbkBAIC0xMDg2LDcgKzEwODYsNyBAQCBzdGF0aWMgdW5zaWduZWQgaW50IHNocmlua19mb2xpb19saXN0KHN0cnVjdCBsaXN0X2hlYWQgKmZvbGlvX2xpc3QsXG4gXHRcdGlmICghZm9saW9fdHJ5bG9jayhmb2xpbykpXG4gXHRcdFx0Z290byBrZWVwO1xuIFxuLVx0XHRpZiAoZm9saW9fY29udGFpbl9od3BvaXNvbmVkX3BhZ2UoZm9saW8pKSB7XG4rXHRcdGlmIChmb2xpb19oYXNfaHdwb2lzb25lZF9wYWdlKGZvbGlvKSkge1xuIFx0XHRcdC8qXG4gXHRcdFx0ICogdW5tYXBfcG9pc29uZWRfZm9saW8oKSBjYW4ndCBoYW5kbGUgbGFyZ2VcbiBcdFx0XHQgKiBmb2xpbywganVzdCBza2lwIGl0LiBtZW1vcnlfZmFpbHVyZSgpIHdpbGxcbmRpZmYgLS1naXQgYS92aXJ0L2t2bS9ndWVzdF9tZW1mZC5jIGIvdmlydC9rdm0vZ3Vlc3RfbWVtZmQuY1xuaW5kZXggZGI1N2M1NzY2YWI2MDQuLjk0ZWVkY2M3ZjFhOWUwIDEwMDY0NFxuLS0tIGEvdmlydC9rdm0vZ3Vlc3RfbWVtZmQuY1xuKysrIGIvdmlydC9rdm0vZ3Vlc3RfbWVtZmQuY1xuQEAgLTc3NCw3ICs3NzQsNyBAQCBzdGF0aWMgc3RydWN0IGZvbGlvICpfX2t2bV9nbWVtX2dldF9wZm4oc3RydWN0IGZpbGUgKmZpbGUsXG4gXHRpZiAoSVNfRVJSKGZvbGlvKSlcbiBcdFx0cmV0dXJuIGZvbGlvO1xuIFxuLVx0aWYgKGZvbGlvX3Rlc3RfaHdwb2lzb24oZm9saW8pKSB7XG4rXHRpZiAoZm9saW9faGFzX2h3cG9pc29uZWRfcGFnZShmb2xpbykpIHtcbiBcdFx0Zm9saW9fdW5sb2NrKGZvbGlvKTtcbiBcdFx0Zm9saW9fcHV0KGZvbGlvKTtcbiBcdFx0cmV0dXJuIEVSUl9QVFIoLUVIV1BPSVNPTik7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNFQxODo0NjoxOS43NDg2MjE3MTVaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMDY4NDYzNzk2MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIFN0cmF0ZWd5IGZvciBUaGlzIEtlcm5lbCBQYXRjaCoqXG5cbk9rYXksIHNvIEkndmUgZ290IHRoaXMgcGF0Y2ggc2VyaWVzIGluIGZyb250IG9mIG1lLCBhbmQgbXkgaW1tZWRpYXRlIGNvbmNlcm4gaXMgd2hldGhlciBpdCBpbnRyb2R1Y2VzIG5ldyBmdW5jdGlvbmFsaXR5IG9yIG1vZGlmaWVzIGV4aXN0aW5nIGNvZGUgaW4gYSB3YXkgdGhhdCB3YXJyYW50cyB0YXJnZXRlZCBmdXp6aW5nLiBJdCdzIGNsZWFybHkgdG91Y2hpbmcgYSBzaWduaWZpY2FudCBjaHVuayBvZiB0aGUga2VybmVsOiBgZnMvaHVnZXRsYmZzL2lub2RlLmNgLCB2YXJpb3VzIGluY2x1ZGUgZmlsZXMgcmVsYXRlZCB0byBtZW1vcnkgbWFuYWdlbWVudCwgYW5kIHNldmVyYWwgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBmaWxlcyAoYG1tL0tjb25maWdgLCBgbW0vZmlsZW1hcC5jYCwgZXRjLikuIExvb2tzIGxpa2UgdGhlIG1haW4gZm9jdXMgaXMgYXJvdW5kIGhhbmRsaW5nIEhXUE9JU09OIChoYXJkd2FyZS1pbmplY3RlZCBwb2lzb24pIHdpdGhpbiBsYXJnZSBmb2xpb3MsIHNwZWNpZmljYWxseSBpbiBodWdldGxiZnMgYW5kIGZpbGVtYXAuXG5cblRoZSBtYWpvciBjaGFuZ2VzIGFyZSByZXBsYWNpbmcgYGh1Z2V0bGJmc19yZWFkX2l0ZXJgIHdpdGggYGdlbmVyaWNfZmlsZV9yZWFkX2l0ZXJgLCBtb2RpZnlpbmcgYGZpbGVtYXBfcmVhZGAgdG8gYWNjb3VudCBmb3IgaHdwb2lzb25lZCBwYWdlcyBieSBhZGRpbmcgYGFkanVzdF9yYW5nZV9od3BvaXNvbmAsIGFuZCBjaGFuZ2luZyBob3cgSFdQT0lTT04gaXMgdHJhY2tlZCB3aXRoaW4gZm9saW9zIHVzaW5nIGBmb2xpby1cdTAwM2VodWdldGxiX2h3cG9pc29uYC4gVGhlcmUgYXJlIGFsc28gc29tZSBuZXcgZnVuY3Rpb25zIGludHJvZHVjZWQ6IGBmb2xpb19oYXNfaHdwb2lzb25lZF9wYWdlYCBhbmQgYGlzX3JlZl9wYWdlX2h3cG9pc29uYC5cblxuTm93LCB0aGUgY3J1Y2lhbCBxdWVzdGlvbiBpcywgaXMgdGhpcyBjb2RlIHJlYWNoYWJsZSBhbmQgZnVuY3Rpb25hbD8gWWVzLCBpdCdzIG1vZGlmeWluZyBmdW5kYW1lbnRhbCBtZW1vcnkgbWFuYWdlbWVudCBhbmQgaG93IGh1Z2V0bGJmcyByZWFkIG9wZXJhdGlvbnMgd29yaywgc28gd2UgbmVlZCB0byB0ZXN0IHRoaXMuIEFuZCB3aGF0IGFib3V0IHZpcnR1YWxpemF0aW9uPyBXZSBjYW4gdHJpZ2dlciBIV1BPSVNPTiB2aWEgYG1hZHZpc2UoTUFEVl9IV1BPSVNPTilgIG9yIHRocm91Z2ggZGVidWdmcywgc28gd2UgY2FuIHRlc3QgaXQgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudC5cblxuTm93LCBsZXQncyBuYWlsIGRvd24gd2hhdCBmdW5jdGlvbnMgdG8gZm9jdXMgb24gZm9yIGZ1enppbmcuIGBmaWxlbWFwX3JlYWRgIGlzIGEgaG90LXBhdGggZnVuY3Rpb24sIHNvIGl0J3MgYSBnb29kIGNhbmRpZGF0ZSwgYnV0IGBhZGp1c3RfcmFuZ2VfaHdwb2lzb25gIGlzIG5ldyBhbmQgc3BlY2lmaWMgdG8gdGhpcyBwYXRjaC4gV2FpdCBhIHNlY29uZCwgaXQncyBhIHN0YXRpYyBmdW5jdGlvbiBpbiBgbW0vZmlsZW1hcC5jYC4gVGhhdCBsaW1pdHMgaXRzIGRpcmVjdCBjYWxsIHNpdGVzLiBTbywgd2UncmUgYmV0dGVyIG9mZiBmb2N1c2luZyBvbiB0aGUgZW50cnkgcG9pbnRzOiBgaHVnZXRsYl91cGRhdGVfaHdwb2lzb25gLCBgaHVnZXRsYl9wYWdlX2h3cG9pc29uYCwgYGh1Z2V0bGJfdW5yZWZfcGFnZV9od3BvaXNvbmAsIGB1bnBvaXNvbl9tZW1vcnlgLCBhbmQgYGZvbGlvX2NsZWFyX2h1Z2V0bGJfaHdwb2lzb25gLiBBbHRob3VnaCBgZmlsZW1hcF9nZXRfcmVhZF9iYXRjaGAgYW5kIGBmaWxlbWFwX2dldF9wYWdlc2AgYXJlIGFsc28gbW9kaWZpZWQsIHRoZXNlIGFyZSBob3QgcGF0aHMsIHNvIG5vdCBoaWdoIHByaW9yaXR5LlxuXG5TaW5jZSBgYWRqdXN0X3JhbmdlX2h3cG9pc29uYCBpcyBzdGF0aWMsIGxldCdzIGNvbmZpcm0gdGhpcyBieSBjaGVja2luZyB0aGUgY29kZS4gWWVzLCBpdCBpcyBzdGF0aWMuIE9rYXksIGxldCdzIG1vdmUgYmFjayB0byB0aGUgcHJldmlvdXNseSBtZW50aW9uZWQgZnVuY3Rpb25zOiBgaHVnZXRsYl91cGRhdGVfaHdwb2lzb25gLCBgaHVnZXRsYl9wYWdlX2h3cG9pc29uYCwgYGh1Z2V0bGJfdW5yZWZfcGFnZV9od3BvaXNvbmAsIGFuZCBgdW5wb2lzb25fbWVtb3J5YC4gV2Ugc2hvdWxkIGFsc28gaW5jbHVkZSB0aGUgYGZvbGlvX2NsZWFyX2h1Z2V0bGJfaHdwb2lzb25gIGZ1bmN0aW9uLlxuXG5GaW5hbGx5LCB3ZSBuZWVkIHRvIHRoaW5rIGFib3V0IGNvbmZpZ3VyYXRpb25zLiBgQ09ORklHX01FTU9SWV9GQUlMVVJFYCBpcyBjbGVhcmx5IHJlcXVpcmVkIGZvciBIV1BPSVNPTi4gYENPTkZJR19IVUdFVExCRlNgIGFuZCBgQ09ORklHX0hVR0VUTEJfUEFHRWAgYXJlIG5lY2Vzc2FyeSBmb3IgdGhlIGh1Z2V0bGJmcyBiaXRzLiBgQ09ORklHX0xBUkdFX0ZPTElPYCBpcyBhIGdpdmVuLCBhcyBpdCdzIHNlbGVjdGVkIGJ5IGBIVUdFVExCX1BBR0VgIGFuZCBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgLiBBaCwgYnV0IEkgbmVlZCB0byBiZSBzdXJlIGFib3V0IGBDT05GSUdfRklMRU1BUF9MQVJHRV9GT0xJT2AuIEl0J3MgdXNlZCBpbnN0ZWFkIG9mIGBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VgLCBhbmQgdGhhdCdzIGNyaXRpY2FsLiBMZXQgbWUgY2hlY2sgdGhlIGtlcm5lbCBjb25maWcgZm9yIGBDT05GSUdfRklMRU1BUF9MQVJHRV9GT0xJT2AuIEknbGwgZ3JlcCBmb3IgdGhhdCBxdWlja2x5IHRvIG1ha2Ugc3VyZSBpdCBleGlzdHMgYW5kIHRoYXQgSSB1bmRlcnN0YW5kIHdoZXJlIGl0J3MgZGVmaW5lZC5cblxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDczNCwiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjgwMCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI0VDE4OjQ2OjMwLjQzMzI2MjYyNVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNzM5MDExMjQyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkZJTEVNQVBfTEFSR0VfRk9MSU9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9wYWdlbWFwLmg9Mzc1PXN0YXRpYyBpbmxpbmUgdm9pZCBtYXBwaW5nX3NldF9nZnBfbWFzayhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbSwgZ2ZwX3QgbWFzaylcXG4tLVxcbmluY2x1ZGUvbGludXgvcGFnZW1hcC5oLTM4Ni0gKi9cXG5pbmNsdWRlL2xpbnV4L3BhZ2VtYXAuaDozODc6I2lmZGVmIENPTkZJR19GSUxFTUFQX0xBUkdFX0ZPTElPXFxuaW5jbHVkZS9saW51eC9wYWdlbWFwLmgtMzg4LSNkZWZpbmUgUFJFRkVSUkVEX01BWF9QQUdFQ0FDSEVfT1JERVJcXHRIUEFHRV9QTURfT1JERVJcXG4tLVxcbmluY2x1ZGUvbGludXgvcGFnZW1hcC5oPTQwNj1zdGF0aWMgaW5saW5lIHNpemVfdCBtYXBwaW5nX21heF9mb2xpb19zaXplX3N1cHBvcnRlZCh2b2lkKVxcbmluY2x1ZGUvbGludXgvcGFnZW1hcC5oLTQwNy17XFxuaW5jbHVkZS9saW51eC9wYWdlbWFwLmg6NDA4OlxcdGlmIChJU19FTkFCTEVEKENPTkZJR19GSUxFTUFQX0xBUkdFX0ZPTElPKSlcXG5pbmNsdWRlL2xpbnV4L3BhZ2VtYXAuaC00MDktXFx0XFx0cmV0dXJuIDFVIFxcdTAwM2NcXHUwMDNjIChQQUdFX1NISUZUICsgTUFYX1BBR0VDQUNIRV9PUkRFUik7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L3BhZ2VtYXAuaD00MzE9c3RhdGljIGlubGluZSB2b2lkIG1hcHBpbmdfc2V0X2ZvbGlvX29yZGVyX3JhbmdlKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxcbi0tXFxuaW5jbHVkZS9saW51eC9wYWdlbWFwLmgtNDMzLXtcXG5pbmNsdWRlL2xpbnV4L3BhZ2VtYXAuaDo0MzQ6XFx0aWYgKCFJU19FTkFCTEVEKENPTkZJR19GSUxFTUFQX0xBUkdFX0ZPTElPKSlcXG5pbmNsdWRlL2xpbnV4L3BhZ2VtYXAuaC00MzUtXFx0XFx0cmV0dXJuO1xcbi0tXFxuaW5jbHVkZS9saW51eC9wYWdlbWFwLmg9NDY2PW1hcHBpbmdfbWF4X2ZvbGlvX29yZGVyKGNvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nKVxcbmluY2x1ZGUvbGludXgvcGFnZW1hcC5oLTQ2Ny17XFxuaW5jbHVkZS9saW51eC9wYWdlbWFwLmg6NDY4OlxcdGlmICghSVNfRU5BQkxFRChDT05GSUdfRklMRU1BUF9MQVJHRV9GT0xJTykpXFxuaW5jbHVkZS9saW51eC9wYWdlbWFwLmgtNDY5LVxcdFxcdHJldHVybiAwO1xcbi0tXFxuaW5jbHVkZS9saW51eC9wYWdlbWFwLmg9NDc0PW1hcHBpbmdfbWluX2ZvbGlvX29yZGVyKGNvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nKVxcbmluY2x1ZGUvbGludXgvcGFnZW1hcC5oLTQ3NS17XFxuaW5jbHVkZS9saW51eC9wYWdlbWFwLmg6NDc2OlxcdGlmICghSVNfRU5BQkxFRChDT05GSUdfRklMRU1BUF9MQVJHRV9GT0xJTykpXFxuaW5jbHVkZS9saW51eC9wYWdlbWFwLmgtNDc3LVxcdFxcdHJldHVybiAwO1xcbi0tXFxuaW5jbHVkZS9saW51eC9wYWdlbWFwLmg9NTEyPXN0YXRpYyBpbmxpbmUgYm9vbCBtYXBwaW5nX2xhcmdlX2ZvbGlvX3N1cHBvcnQoY29uc3Qgc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3BhZ2VtYXAuaC01MzEtICovXFxuaW5jbHVkZS9saW51eC9wYWdlbWFwLmg6NTMyOiNpZmRlZiBDT05GSUdfRklMRU1BUF9MQVJHRV9GT0xJT1xcbmluY2x1ZGUvbGludXgvcGFnZW1hcC5oLTUzMy1zdGF0aWMgaW5saW5lIGJvb2wgbWFwcGluZ19wbWRfZm9saW9fc3VwcG9ydChjb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZylcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjRUMTg6NDY6MzMuMTcyMjc5NjY3WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzE3NTA2OTM2MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3M6XG5cbioqSW52ZXN0aWdhdGluZyB0aGUgTWlzc2luZyBEZWZpbml0aW9uKipcblxuSG1tLCBgQ09ORklHX0ZJTEVNQVBfTEFSR0VfRk9MSU9gLi4uIEl0J3MgbG9va2luZyBsaWtlIHRoaXMgc3ltYm9sIGlzbid0IGRlZmluZWQgd2hlcmUgSSBleHBlY3RlZCBpdCB0byBiZSwgb3IgcGVyaGFwcyBpdCdzIHNpbXBseSBub3QgcHJlc2VudCBpbiB0aGlzIHBhcnRpY3VsYXIgcGF0Y2guIEJlZm9yZSBJIGp1bXAgdG8gY29uY2x1c2lvbnMsIEkgbmVlZCB0byB2ZXJpZnkgaXRzIGF2YWlsYWJpbGl0eS4gUmlnaHQsIHRoZSBzdGFuZGFyZCBwbGFjZXMgdG8gY2hlY2sgZm9yIHRoZXNlIHNvcnRzIG9mIGNvbmZpZ3VyYXRpb25zIGFyZSB0aGUga2VybmVsJ3MgS2NvbmZpZyBmaWxlcy4gU3BlY2lmaWNhbGx5LCBJIHNob3VsZCBsb29rIGluIGBtbS9LY29uZmlnYCwgYXMgaXQgc2VlbXMgbWVtb3J5IG1hbmFnZW1lbnQgcmVsYXRlZCwgYW5kIGFsc28gY29uc2lkZXIgYGZzL0tjb25maWdgIHNpbmNlIGl0J3MgYWJvdXQgZmlsZSBzeXN0ZW1zLiBMZXQncyBzdGFydCB0aGVyZSBhbmQgc2VlIGlmIEkgY2FuIGZpbmQgd2hlcmUgYEZJTEVNQVBfTEFSR0VfRk9MSU9gIGlzIGNvbnRyb2xsZWQuIEkgbmVlZCB0byBrbm93ICp3aHkqIGl0IGlzIG9yIGlzbid0IGF2YWlsYWJsZSBiZWZvcmUgSSBjYW4gcHJvY2VlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTY5ODksIk91dHB1dFRva2VucyI6MjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNFQxODo0NjozNi4zNDczNTEyNjlaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjExODU0MDU3NywiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEZJTEVNQVBfTEFSR0VfRk9MSU9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI0VDE4OjQ2OjM4LjQ2NTkwMTQyN1oiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI5OTE1Mjc0MzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIHNlZS4uLlxuXG4qKkNoZWNraW5nIHRoZSBLY29uZmlnIGZvciBgTEFSR0VfRk9MSU9gKipcblxuQWxyaWdodCwgbXkgZmlyc3QgdGhvdWdodCBpcyB0byBkaWcgaW50byB0aGUgYG1tL0tjb25maWdgIGZpbGUuIEknbSBnb2luZyB0byBxdWlja2x5IGNoZWNrIGlmIGBMQVJHRV9GT0xJT2AgaXMgZGVmaW5lZCB0aGVyZS4gVGhhdCdzIHRoZSBsb2dpY2FsIHN0YXJ0aW5nIHBvaW50IGZvciB1bmRlcnN0YW5kaW5nIGhvdyB0aGlzIGZlYXR1cmUgaXMgY29uZmlndXJlZCB3aXRoaW4gdGhlIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbS4gSSBuZWVkIHRvIHNlZSB0aGUgZGVwZW5kZW5jaWVzLCBoZWxwIHRleHQsIGFuZCBkZWZhdWx0IHNldHRpbmdzIC0gYWxsIHRoZSB1c3VhbCBLY29uZmlnIGdvb2RpZXMuIFRoaXMgaW5pdGlhbCBjaGVjayB3aWxsIGdpdmUgbWUgYSBnb29kIGxheSBvZiB0aGUgbGFuZCBhbmQgcG9pbnQgbWUgaW4gdGhlIHJpZ2h0IGRpcmVjdGlvbi4gTm8gcG9pbnQgaW4gd2FuZGVyaW5nIGFpbWxlc3NseTsgbGV0J3MgZ2V0IGEgYmFzZWxpbmUgdW5kZXJzdGFuZGluZyBvZiBgTEFSR0VfRk9MSU9gIGZyb20gdGhlIHNvdXJjZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTcyNjYsIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNFQxODo0Njo0MS40NTc0MzEwNjVaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTkwNzMwMzg5NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTEFSR0VfRk9MSU9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vS2NvbmZpZz04NDM9Y29uZmlnIE1NX0lEXFxuLS1cXG5tbS9LY29uZmlnLTg0NS1cXG5tbS9LY29uZmlnOjg0Njpjb25maWcgTEFSR0VfRk9MSU9cXG5tbS9LY29uZmlnLTg0Ny1cXHRkZWZfYm9vbCBuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI0VDE4OjQ2OjQzLjM2NDc0MTk1MloiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyMTcwNTQzNzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIGRlbGl2ZXJlZCBhcyBhIGZpcnN0LXBlcnNvbiBzdW1tYXJ5OlxuXG4qKktlcm5lbCBNZW1vcnkgTWFuYWdlbWVudCBDb25zaWRlcmF0aW9ucyoqXG5cbk9rYXksIHNvIEkgc2VlIHRoYXQgdGhlIGBMQVJHRV9GT0xJT2Agb3B0aW9uIGhhcyBiZWVuIGludHJvZHVjZWQgd2l0aGluIHRoZSBgbW0vS2NvbmZpZ2AgZmlsZS4gVGhhdCdzIGdvb2QsIHRoYXQncyB3aGF0IEkgd2FzIGV4cGVjdGluZyB0byBmaW5kLiBCdXQgd2FpdCwgYSBsaXR0bGUgZmxhZyBqdXN0IHdlbnQgb2ZmIGluIG15IGhlYWQuIFdoZW5ldmVyIEkgc2VlIHRoZXNlIG1lbW9yeSBtYW5hZ2VtZW50IGFkZGl0aW9ucywgbXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgKmFsd2F5cyogYWJvdXQgaG93IGl0IGludGVyYWN0cyB3aXRoIGVycm9yIGhhbmRsaW5nLiBTcGVjaWZpY2FsbHksIGhvdyBkb2VzIHRoaXMgaW50ZXJwbGF5IHdpdGggYE1FTU9SWV9GQUlMVVJFYD8gSXQncyBhIGNyaXRpY2FsIGNvbXBvbmVudCBpbiBlbnN1cmluZyBzeXN0ZW0gc3RhYmlsaXR5IHdoZW4gdGhpbmdzIGdvIHNpZGV3YXlzIHdpdGggbWVtb3J5IGFsbG9jYXRpb24sIGFuZCBJIG5lZWQgdG8gY29uc2lkZXIgaG93IHRoaXMgbmV3IGZlYXR1cmUgaW50ZWdyYXRlcyB3aXRoIHRob3NlIGV4aXN0aW5nIHNhZmVndWFyZHMuIElzIHRoZXJlIGV4cGxpY2l0IGhhbmRsaW5nIG9mIGBMQVJHRV9GT0xJT2AgYWxsb2NhdGlvbiBmYWlsdXJlcywgb3IgZG9lcyBpdCBmYWxsIGJhY2sgdG8gc29tZSBnZW5lcmljIHN0cmF0ZWd5PyBJIG5lZWQgdG8gY2hlY2sgdGhlIEtjb25maWcncyBzdXJyb3VuZGluZyBjb2RlIGFuZCB0aGUgdXNhZ2UgcGF0dGVybnMgdG8gbWFrZSBzdXJlIHRoaXMgZG9lc24ndCBpbnRyb2R1Y2UgYW55IHN1YnRsZSByZWdyZXNzaW9ucyBvciBibGluZCBzcG90cyBpbiB0aGUgbWVtb3J5IGZhaWx1cmUgaGFuZGxpbmcgcGF0aC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTc1MTUsIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNFQxODo0Njo0Ni41ODE3OTkwM1oiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTg3MjY3OTczMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTUVNT1JZX0ZBSUxVUkVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vS2NvbmZpZz03NzQ9Y29uZmlnIEFSQ0hfU1VQUE9SVFNfTUVNT1JZX0ZBSUxVUkVcXG4tLVxcbm1tL0tjb25maWctNzc2LVxcbm1tL0tjb25maWc6Nzc3OmNvbmZpZyBNRU1PUllfRkFJTFVSRVxcbm1tL0tjb25maWctNzc4LVxcdGRlcGVuZHMgb24gTU1VXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI0VDE4OjQ2OjQ4LjQ1NDQ4OTA3WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM1NzY1MjgwMDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgcHJlc2VudGVkIGFzIG15IG93biBtZW50YWwgcHJvY2VzcywgZ2l2ZW4gbXkgZXhwZXJ0aXNlOlxuXG4qKkNoZWNraW5nIEhhcmR3YXJlIFBvaXNvbiBDb25maWd1cmF0aW9uKipcblxuQWxyaWdodCwgbGV0IG1lIHF1aWNrbHkgcGFyc2UgdGhpcy4gYE1FTU9SWV9GQUlMVVJFYCAtIGFoIHllcywgdGhhdCdzIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbiB3ZSB1c2UgdG8gZW5hYmxlIGhhcmR3YXJlIHBvaXNvbiBoYW5kbGluZy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGUgc3lzdGVtIGlzIGJlaGF2aW5nIGFzIGV4cGVjdGVkIHdpdGggcmVzcGVjdCB0byB0aGF0LiBNeSBuZXh0IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIGNoZWNrIHJlbGF0ZWQgbWVtb3J5IGZlYXR1cmVzLiBNeSBleHBlcnRpc2UgaXMgdGhhdCB0aGUgc3lzdGVtJ3MgcmVhY3Rpb24gdG8gaGFyZHdhcmUgZXJyb3JzIGlzIGltcGFjdGVkIGJ5IHNldmVyYWwgY29uZmlndXJhdGlvbiBhbmQgcnVudGltZSBvcHRpb25zLiBUaHVzIEknbGwgbm93IHF1aWNrbHkgZHJpbGwgZG93biBvbiBgSFVHRVRMQkZTYCBhbmQgYEhVR0VUTEJfUEFHRWAuIEkgd2FudCB0byBpbW1lZGlhdGVseSB1bmRlcnN0YW5kIHRoZSBpbnRlcmFjdGlvbiBiZXR3ZWVuIHRob3NlIHNldHRpbmdzIGFuZCBob3cgaGFyZHdhcmUgZXJyb3JzIGFyZSBoYW5kbGVkIGluIHRoaXMgcGFydGljdWxhciBjb25maWd1cmF0aW9uLiBFc3NlbnRpYWxseSwgSSdtIHRyeWluZyB0byBxdWlja2x5IGVzdGFibGlzaCBhIGJhc2VsaW5lIG9yIHBpbnBvaW50IGFueSBwb3RlbnRpYWwgY29uZmxpY3RzIG9yIGFyZWFzIHRoYXQgcmVxdWlyZSBzcGVjaWFsIGF0dGVudGlvbiByZWxhdGVkIHRvIGhvdyBsYXJnZSBwYWdlcywgYW5kIHRoZSBsYXJnZSBwYWdlIGZpbGUgc3lzdGVtLCBhcmUgaW52b2x2ZWQgaW4gbWVtb3J5IGVycm9yIGhhbmRsaW5nLiBUaGUgZmlyc3Qgc3RlcCB3aWxsIGJlIGNoZWNraW5nIHRoZWlyIHN0YXRlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTc4NTQsIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNFQxODo0Njo1Mi4wMzEwMTk3MjVaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzOTI1NDA5NTMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEhVR0VUTEJGU1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9LY29uZmlnPTI0Nz1jb25maWcgQVJDSF9TVVBQT1JUU19IVUdFVExCRlNcXG4tLVxcbmZzL0tjb25maWctMjQ5LVxcbmZzL0tjb25maWc6MjUwOm1lbnVjb25maWcgSFVHRVRMQkZTXFxuZnMvS2NvbmZpZy0yNTEtXFx0Ym9vbCBcXFwiSHVnZVRMQiBmaWxlIHN5c3RlbSBzdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNFQxODo0Njo1NC40MjM1NzM0MDhaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTEwNTY0ODAzNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgSHVnZSBQYWdlIFBvaXNvbmluZyBpbiB0aGUgS2VybmVsKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgbWVtb3J5IGZhaWx1cmUgc2NlbmFyaW9zIHJlbGF0ZWQgdG8gaHVnZSBwYWdlcy4gTXkgaW5pdGlhbCBmb2N1cyBpcyBvbiB0aGUgY29uZmlndXJhdGlvbnM6IGBNRU1PUllfRkFJTFVSRWAsIGBIVUdFVExCRlNgLCBhbmQgYEhVR0VUTEJfUEFHRWAuIFJpZ2h0LCBhbmQgSSBzZWUgYExBUkdFX0ZPTElPYCBpcyBiZWluZyBzZWxlY3RlZCBieSBib3RoIGBIVUdFVExCX1BBR0VgIGFuZCBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgLCB3aGljaCBzZWVtcyBjb3JyZWN0LlxuXG5Ob3csIEkgbmVlZCB0byBwaW5wb2ludCB0aGUgcmVsZXZhbnQgc3ltYm9scy4gTGV0J3Mgc2VlLi4uIEkgaGF2ZSBgaHVnZXRsYl91cGRhdGVfaHdwb2lzb25gLCBgaHVnZXRsYl9wYWdlX2h3cG9pc29uYCwgYGh1Z2V0bGJfdW5yZWZfcGFnZV9od3BvaXNvbmAsIGB1bnBvaXNvbl9tZW1vcnlgLCBhbmQgYGZvbGlvX2NsZWFyX2h1Z2V0bGJfaHdwb2lzb25gLiBUaG9zZSBzZWVtIGxpa2UgdGhleSdyZSBkaXJlY3RseSByZWxhdGVkIHRvIHRoZSBoYXJkd2FyZSBwb2lzb25pbmcgYXNwZWN0IG9mIGh1Z2UgcGFnZXMuIEknbSBhbHNvIG5vdGluZyBgYWRqdXN0X3JhbmdlX2h3cG9pc29uYCwgd2hpY2ggaXMgc3RhdGljLCBzbyB0aGF0J3MgcHJvYmFibHkgbm90IGEgZ29vZCBzdGFydGluZyBwb2ludCwgYWx0aG91Z2ggaXQncyByZWxhdGVkLiBJIGNvbnNpZGVyZWQgYGZpbGVtYXBfcmVhZGAsIHNpbmNlIHRoYXQncyBhIGhvdCBwYXRoLCBidXQgaXQncyBwcm9iYWJseSB0b28gZ2VuZXJhbC4gTWF5YmUgYGh1Z2V0bGJmc19pbml0X3JlZ3VsYXJfaW5vZGVgPyBUaGF0J3MgYWxzbyBzdGF0aWMsIHNvIHByb2JhYmx5IG5vdCB0aGUgYmVzdCBzcG90IHRvIHN0YXJ0IGVpdGhlci4gTGV0IG1lIGNvbnNpZGVyIGBodWdldGxiX2ZvbGlvX21hcHBpbmdfbG9ja193cml0ZWAuIFRoYXQgc291bmRzIGxpa2UgaXQgY291bGQgYmUgcmVsZXZhbnQsIHNpbmNlIHdlIGFyZSB0YWxraW5nIGFib3V0IG1lbW9yeSBmYWlsdXJlcy5cblxuQWxyaWdodCwgdGhlIG5leHQgdGhpbmcgaXMgdG8gZGl2ZSBpbnRvIGBtbS9tZW1vcnktZmFpbHVyZS5jYCB0byBzZWUgaWYgdGhlcmUgYXJlIGFueSB1c2VmdWwgZXhwb3J0ZWQgb3Igbm9uLXN0YXRpYyBmdW5jdGlvbnMgd2l0aGluIHRoYXQgZmlsZS4gVGhhdCBzaG91bGQgZ2l2ZSBtZSBhIGJldHRlciB2aWV3IG9mIHdoZXJlIEkgY2FuIG1ha2UgYW4gaW1wYWN0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODE5MCwiT3V0cHV0VG9rZW5zIjo0NiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNFQxODo0Njo1OS41MjkyMjQ3ODVaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2Mzg2MzE1NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJeKFthLXpfXSsgKStodWdldGxiX1thLXpfXStcXFxcKFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9tZW1vcnktZmFpbHVyZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL21lbW9yeS1mYWlsdXJlLmM9MTgyMD1zdGF0aWMgYm9vbCBwcmVjaXNlX3BhZ2VfcG9pc29uZWQoY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbyxcXG4tLVxcbm1tL21lbW9yeS1mYWlsdXJlLmMtMTg0My0gKi9cXG5tbS9tZW1vcnktZmFpbHVyZS5jOjE4NDQ6Ym9vbCBodWdldGxiX3BhZ2VfaHdwb2lzb24oY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbywgY29uc3Qgc3RydWN0IHBhZ2UgKnBhZ2UpXFxubW0vbWVtb3J5LWZhaWx1cmUuYy0xODQ1LXtcXG4tLVxcbm1tL21lbW9yeS1mYWlsdXJlLmMtMTg1NS0gKi9cXG5tbS9tZW1vcnktZmFpbHVyZS5jOjE4NTY6Ym9vbCBodWdldGxiX3VucmVmX3BhZ2VfaHdwb2lzb24oY29uc3Qgc3RydWN0IHBhZ2UgKnBhZ2UpXFxubW0vbWVtb3J5LWZhaWx1cmUuYy0xODU3LXtcXG4tLVxcbm1tL21lbW9yeS1mYWlsdXJlLmM9MTg3NT1zdGF0aWMgdW5zaWduZWQgbG9uZyBfX2ZvbGlvX2ZyZWVfcmF3X2h3cChzdHJ1Y3QgZm9saW8gKmZvbGlvLCBib29sIG1vdmVfZmxhZylcXG4tLVxcbm1tL21lbW9yeS1mYWlsdXJlLmMtMTg5OS1cXG5tbS9tZW1vcnktZmFpbHVyZS5jOjE5MDA6c3RhdGljIGlubGluZSBpbnQgaHVnZXRsYl9zZXRfcG9pc29uKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxubW0vbWVtb3J5LWZhaWx1cmUuYy0xOTAxLXtcXG4tLVxcbm1tL21lbW9yeS1mYWlsdXJlLmMtMTkwNy1cXG5tbS9tZW1vcnktZmFpbHVyZS5jOjE5MDg6c3RhdGljIGlubGluZSBpbnQgaHVnZXRsYl9jbGVhcl9wb2lzb24oc3RydWN0IGZvbGlvICpmb2xpbylcXG5tbS9tZW1vcnktZmFpbHVyZS5jLTE5MDkte1xcbi0tXFxubW0vbWVtb3J5LWZhaWx1cmUuYy0xOTE5LSAqL1xcbm1tL21lbW9yeS1mYWlsdXJlLmM6MTkyMDpzdGF0aWMgaW50IGh1Z2V0bGJfdXBkYXRlX2h3cG9pc29uKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBwYWdlICpwYWdlKVxcbm1tL21lbW9yeS1mYWlsdXJlLmMtMTkyMS17XFxuLS1cXG5tbS9tZW1vcnktZmFpbHVyZS5jPTIxMzM9c3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGZvbGlvX2ZyZWVfcmF3X2h3cChzdHJ1Y3QgZm9saW8gKmZvbGlvLCBib29sIGZsYWcpXFxuLS1cXG5tbS9tZW1vcnktZmFpbHVyZS5jLTIxMzctXFxubW0vbWVtb3J5LWZhaWx1cmUuYzoyMTM4OnN0YXRpYyBpbmxpbmUgaW50IGh1Z2V0bGJfY2xlYXJfcG9pc29uKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxubW0vbWVtb3J5LWZhaWx1cmUuYy0yMTM5LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjRUMTg6NDY6NTkuOTkzMTE1NDAyWiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM4MzQ0NTYwNDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSBjaGFuZ2VzIEknbSBzZWVpbmc6XG5cbioqQW5hbHl6aW5nIFJlY2VudCBDb2RlIE1vZGlmaWNhdGlvbnMgaW4gdGhlIEh1Z2VUTEIgU3Vic3lzdGVtKipcblxuQWxyaWdodCwgbGV0J3MgYnJlYWsgZG93biB0aGVzZSBjb2RlIGNoYW5nZXMuIEZpcnN0LCBpdCBsb29rcyBsaWtlIGBodWdldGxiX3BhZ2VfaHdwb2lzb25gIGFuZCBgaHVnZXRsYl91bnJlZl9wYWdlX2h3cG9pc29uYCBhcmUgbm93IGV4cG9zZWQgYmV5b25kIHRoZWlyIHByZXZpb3VzIHNjb3BlIOKAkyB0aGV5J3JlIG5vdCBzdGF0aWMgYW55bW9yZS4gVGhhdCdzIGEgc2lnbmlmaWNhbnQgc2hpZnQuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCB3aGF0IGFyZSB0aGUgaW1wbGljYXRpb25zIGZvciBob3cgb3RoZXIgbW9kdWxlcyBvciBmdW5jdGlvbnMgd2lsbCBpbnRlcmFjdCB3aXRoIHRoZW0/IEFyZSB3ZSBzZWVpbmcgYSBtb3ZlIHRvd2FyZHMgYSBtb3JlIGdlbmVyYWwgaGFyZHdhcmUgcG9pc29uIGhhbmRsaW5nIHN0cmF0ZWd5LCBvciBhcmUgdGhlc2UgZnVuY3Rpb25zIGJlaW5nIHJlcHVycG9zZWQgZm9yIHNvbWV0aGluZyBzcGVjaWZpYyB3aXRoaW4gdGhlIE5VTUEgYXJjaGl0ZWN0dXJlIG9mIHRoZSBIdWdlVExCIHN5c3RlbT8gSSBuZWVkIHRvIGRpZyBpbnRvIHRoZSBjYWxsIHNpdGVzIHRvIHVuZGVyc3RhbmQgdGhlIG5ldyBkZXBlbmRlbmNpZXMgdGhhdCBhcmUgYmVpbmcgaW50cm9kdWNlZC5cblxuQWxzbywgYHVucG9pc29uX21lbW9yeWAgaGFzIGFsc28gYmVlbiB0b3VjaGVkLiBUaGlzIGlzIGludGVyZXN0aW5nLiBXaGF0J3MgdGhlIG5hdHVyZSBvZiB0aGUgbW9kaWZpY2F0aW9uPyBJcyBpdCBhIGNoYW5nZSB0byB0aGUgdW5wb2lzb25pbmcgYWxnb3JpdGhtIGl0c2VsZiwgYW4gZXhwYW5zaW9uIG9mIGl0cyBjYXBhYmlsaXRpZXMsIG9yIHBlcmhhcHMgYSBtb2RpZmljYXRpb24gb2YgdGhlIGVycm9yIHJlcG9ydGluZyBvciBsb2dnaW5nPyBJJ2xsIG5lZWQgdG8gY2FyZWZ1bGx5IHJldmlldyB0aGUgZGlmZiB0byB1bmRlcnN0YW5kIHdoYXQgdGhlIGludGVudCBvZiB0aGUgY2hhbmdlIGlzLiBJIG5lZWQgdG8ga2VlcCBpbiBtaW5kLCBzcGVjaWZpY2FsbHksIHRoYXQgdW5wb2lzb25pbmcgaXMgYSBwZXJmb3JtYW5jZS1jcml0aWNhbCBmdW5jdGlvbiBhbmQgYW55IGNoYW5nZXMgdG8gaXQgY291bGQgaGF2ZSBzaWduaWZpY2FudCByYW1pZmljYXRpb25zIG9uIHRoZSBvdmVyYWxsIHN5c3RlbSdzIHN0YWJpbGl0eSwgZXNwZWNpYWxseSBpZiBpdCBpcyBjaGFuZ2VkIGluIGEgbm9uLW9idmlvdXMgd2F5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTI5OSwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI0VDE4OjQ3OjAzLjgyNzU3NDU2NVoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTAwODgxNTIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiXmludCB1bnBvaXNvbl9tZW1vcnlcXFxcKFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9tZW1vcnktZmFpbHVyZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL21lbW9yeS1mYWlsdXJlLmM9MjY4MD1jb3JlX2luaXRjYWxsKG1lbW9yeV9mYWlsdXJlX2luaXQpO1xcbi0tXFxubW0vbWVtb3J5LWZhaWx1cmUuYy0yNzAxLSAqL1xcbm1tL21lbW9yeS1mYWlsdXJlLmM6MjcwMjppbnQgdW5wb2lzb25fbWVtb3J5KHVuc2lnbmVkIGxvbmcgcGZuKVxcbm1tL21lbW9yeS1mYWlsdXJlLmMtMjcwMy17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI0VDE4OjQ3OjAzLjkxNzY2ODU3N1oiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMDM5ODA1NzI1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byBtbS9odWdldGxiLmMgZm9yIENsdWVzKipcblxuT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCdzIGJlZW4gY2hhbmdlZCBpbiB0aGUgaHVnZSBwYWdlcyBjb2RlLiBNeSBmaXJzdCBpbnN0aW5jdCBpcyB0byBkaXZlIGRpcmVjdGx5IGludG8gYG1tL2h1Z2V0bGIuY2AuIEl0J3MgdGhlIGNlbnRyYWwgaHViIGZvciBoYW5kbGluZyBodWdlIHBhZ2UgbWFuYWdlbWVudCwgc28gYW55IG1vZGlmaWNhdGlvbnMgcmVsYXRlZCB0byBwZXJmb3JtYW5jZSBvciBuZXcgZmVhdHVyZXMgYXJlIGxpa2VseSB0byBiZSByZWZsZWN0ZWQgdGhlcmUuIEknbSBnb2luZyB0byBsb29rIGZvciB0aGUga2V5IGZ1bmN0aW9ucyB0aGF0IGhhdmUgYmVlbiB0b3VjaGVkIHNpbmNlIHdoYXRldmVyIHRoZSBiYXNlbGluZSBpcyDigJMgcHJvYmFibHkgYSBwcmV2aW91cyBrZXJuZWwgdmVyc2lvbiBvciBhIHNwZWNpZmljIGNvbW1pdC4gVGhpcyB3aWxsIGxldCBtZSBxdWlja2x5IHBpbnBvaW50IHRoZSBjb2RlIHJlc3BvbnNpYmxlIGZvciB0aGUgYmVoYXZpb3IgSSdtIGludmVzdGlnYXRpbmcuIEkgZXhwZWN0IHRvIGJlIGxvb2tpbmcgYXQgdGhpbmdzIGxpa2UgcGFnZSBhbGxvY2F0aW9uLCBkZWFsbG9jYXRpb24sIG1hcHBpbmcsIHVubWFwcGluZywgYW5kIGFueSByZWxhdGVkIGxvY2tpbmcgb3IgTlVNQS1hd2FyZW5lc3MgbWVjaGFuaXNtcy4gVGhlIGRpZmZzIHdpbGwgYmUgdGhlIGNydWNpYWwgcGFydCwgb2YgY291cnNlLiBMZXQncyBzZWUgd2hhdCdzIGNoYW5nZWQgYW5kIHdoYXQgaXQgdGVsbHMgdXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5NzU0LCJPdXRwdXRUb2tlbnMiOjQ2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjRUMTg6NDc6MDYuOTU3NDc3MjUxWiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4NzE3ODI0MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJeKFthLXpfXSsgKStodWdldGxiX1thLXpfXStcXFxcKFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9odWdldGxiLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vaHVnZXRsYi5jPTkyPXN0YXRpYyBpbnQgaHVnZXRsYl9wYXJhbV9pbmRleCBfX2luaXRkYXRhO1xcbm1tL2h1Z2V0bGIuYzo5MzpzdGF0aWMgX19pbml0IGludCBodWdldGxiX2FkZF9wYXJhbShjaGFyICpzLCBpbnQgKCpzZXR1cCkoY2hhciAqdmFsKSk7XFxubW0vaHVnZXRsYi5jOjk0OnN0YXRpYyBfX2luaXQgdm9pZCBodWdldGxiX3BhcnNlX3BhcmFtcyh2b2lkKTtcXG5tbS9odWdldGxiLmMtOTUtXFxuLS1cXG5tbS9odWdldGxiLmM9MTE0PXN0cnVjdCBtdXRleCAqaHVnZXRsYl9mYXVsdF9tdXRleF90YWJsZSBfX3JvX2FmdGVyX2luaXQ7XFxuLS1cXG5tbS9odWdldGxiLmMtMTE2LS8qIEZvcndhcmQgZGVjbGFyYXRpb24gKi9cXG5tbS9odWdldGxiLmM6MTE3OnN0YXRpYyBpbnQgaHVnZXRsYl9hY2N0X21lbW9yeShzdHJ1Y3QgaHN0YXRlICpoLCBsb25nIGRlbHRhKTtcXG5tbS9odWdldGxiLmM6MTE4OnN0YXRpYyB2b2lkIGh1Z2V0bGJfdm1hX2xvY2tfZnJlZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSk7XFxubW0vaHVnZXRsYi5jOjExOTpzdGF0aWMgdm9pZCBodWdldGxiX3ZtYV9sb2NrX2FsbG9jKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKTtcXG5tbS9odWdldGxiLmMtMTIwLXN0YXRpYyB2b2lkIF9faHVnZXRsYl92bWFfdW5sb2NrX3dyaXRlX2ZyZWUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpO1xcbm1tL2h1Z2V0bGIuYz0xMjE9c3RhdGljIGludCBfX2h1Z2VfcG1kX3Vuc2hhcmUoc3RydWN0IG1tdV9nYXRoZXIgKnRsYixcXG4tLVxcbm1tL2h1Z2V0bGIuYy0xMjMtXFx0XFx0Ym9vbCBjaGVja19sb2Nrcyk7XFxubW0vaHVnZXRsYi5jOjEyNDpzdGF0aWMgdm9pZCBodWdldGxiX3Vuc2hhcmVfcG1kcyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG5tbS9odWdldGxiLmMtMTI1LVxcdFxcdHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLCBib29sIHRha2VfbG9ja3MpO1xcbi0tXFxubW0vaHVnZXRsYi5jPTI3OD1zdGF0aWMgaW5saW5lIHN0cnVjdCBodWdlcGFnZV9zdWJwb29sICpzdWJwb29sX3ZtYShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcXG4tLVxcbm1tL2h1Z2V0bGIuYy0yODUtICovXFxubW0vaHVnZXRsYi5jOjI4Njp2b2lkIGh1Z2V0bGJfdm1hX2xvY2tfcmVhZChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcXG5tbS9odWdldGxiLmMtMjg3LXtcXG4tLVxcbm1tL2h1Z2V0bGIuYy0yOTgtXFxubW0vaHVnZXRsYi5jOjI5OTp2b2lkIGh1Z2V0bGJfdm1hX3VubG9ja19yZWFkKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxcbm1tL2h1Z2V0bGIuYy0zMDAte1xcbi0tXFxubW0vaHVnZXRsYi5jLTMxMS1cXG5tbS9odWdldGxiLmM6MzEyOnZvaWQgaHVnZXRsYl92bWFfbG9ja193cml0ZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcXG5tbS9odWdldGxiLmMtMzEzLXtcXG4tLVxcbm1tL2h1Z2V0bGIuYy0zMjQtXFxubW0vaHVnZXRsYi5jOjMyNTp2b2lkIGh1Z2V0bGJfdm1hX3VubG9ja193cml0ZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcXG5tbS9odWdldGxiLmMtMzI2LXtcXG4tLVxcbm1tL2h1Z2V0bGIuYy0zMzctXFxubW0vaHVnZXRsYi5jOjMzODppbnQgaHVnZXRsYl92bWFfdHJ5bG9ja193cml0ZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcXG5tbS9odWdldGxiLmMtMzM5LXtcXG4tLVxcbm1tL2h1Z2V0bGIuYy0zNTMtXFxubW0vaHVnZXRsYi5jOjM1NDp2b2lkIGh1Z2V0bGJfdm1hX2Fzc2VydF9sb2NrZWQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXFxubW0vaHVnZXRsYi5jLTM1NS17XFxuLS1cXG5tbS9odWdldGxiLmMtMzY2LVxcbm1tL2h1Z2V0bGIuYzozNjc6dm9pZCBodWdldGxiX3ZtYV9sb2NrX3JlbGVhc2Uoc3RydWN0IGtyZWYgKmtyZWYpXFxubW0vaHVnZXRsYi5jLTM2OC17XFxuLS1cXG5tbS9odWdldGxiLmM9MzkwPXN0YXRpYyB2b2lkIF9faHVnZXRsYl92bWFfdW5sb2NrX3dyaXRlX2ZyZWUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXFxuLS1cXG5tbS9odWdldGxiLmMtNDAzLVxcbm1tL2h1Z2V0bGIuYzo0MDQ6c3RhdGljIHZvaWQgaHVnZXRsYl92bWFfbG9ja19mcmVlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxcbm1tL2h1Z2V0bGIuYy00MDUte1xcbi0tXFxubW0vaHVnZXRsYi5jLTQxOS1cXG5tbS9odWdldGxiLmM6NDIwOnN0YXRpYyB2b2lkIGh1Z2V0bGJfdm1hX2xvY2tfYWxsb2Moc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXFxubW0vaHVnZXRsYi5jLTQyMS17XFxuLS1cXG5tbS9odWdldGxiLmM9ODUzPXN0YXRpYyBsb25nIHJlZ2lvbl9kZWwoc3RydWN0IHJlc3ZfbWFwICpyZXN2LCBsb25nIGYsIGxvbmcgdClcXG4tLVxcbm1tL2h1Z2V0bGIuYy05NTUtICovXFxubW0vaHVnZXRsYi5jOjk1Njp2b2lkIGh1Z2V0bGJfZml4X3Jlc2VydmVfY291bnRzKHN0cnVjdCBpbm9kZSAqaW5vZGUpXFxubW0vaHVnZXRsYi5jLTk1Ny17XFxuLS1cXG5tbS9odWdldGxiLmM9MTE3MT1ib29sIF9fdm1hX3ByaXZhdGVfbG9jayhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcXG4tLVxcbm1tL2h1Z2V0bGIuYy0xMTc3LVxcbm1tL2h1Z2V0bGIuYzoxMTc4OnZvaWQgaHVnZXRsYl9kdXBfdm1hX3ByaXZhdGUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXFxubW0vaHVnZXRsYi5jLTExNzkte1xcbi0tXFxubW0vaHVnZXRsYi5jPTMwODA9aW50IF9fYWxsb2NfYm9vdG1lbV9odWdlX3BhZ2Uoc3RydWN0IGhzdGF0ZSAqaCwgaW50IG5pZClcXG4tLVxcbm1tL2h1Z2V0bGIuYy0zMTE3LS8qIEluaXRpYWxpemUgW3N0YXJ0X3BhZ2U6ZW5kX3BhZ2VfbnVtYmVyXSB0YWlsIHN0cnVjdCBwYWdlcyBvZiBhIGh1Z2VwYWdlICovXFxubW0vaHVnZXRsYi5jOjMxMTg6c3RhdGljIHZvaWQgX19pbml0IGh1Z2V0bGJfZm9saW9faW5pdF90YWlsX3ZtZW1tYXAoc3RydWN0IGZvbGlvICpmb2xpbyxcXG5tbS9odWdldGxiLmMtMzExOS1cXHRcXHRcXHRcXHRcXHRzdHJ1Y3QgaHN0YXRlICpoLFxcbi0tXFxubW0vaHVnZXRsYi5jLTMxNDAtXFxubW0vaHVnZXRsYi5jOjMxNDE6c3RhdGljIHZvaWQgX19pbml0IGh1Z2V0bGJfZm9saW9faW5pdF92bWVtbWFwKHN0cnVjdCBmb2xpbyAqZm9saW8sXFxubW0vaHVnZXRsYi5jLTMxNDItXFx0XFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IGhzdGF0ZSAqaCxcXG4tLVxcbm1tL2h1Z2V0bGIuYy0zMTU5LVxcbm1tL2h1Z2V0bGIuYzozMTYwOnN0YXRpYyBib29sIF9faW5pdCBodWdldGxiX2Jvb3RtZW1fcGFnZV9wcmVodm8oc3RydWN0IGh1Z2VfYm9vdG1lbV9wYWdlICptKVxcbm1tL2h1Z2V0bGIuYy0zMTYxLXtcXG4tLVxcbm1tL2h1Z2V0bGIuYy0zMTY0LVxcbm1tL2h1Z2V0bGIuYzozMTY1OnN0YXRpYyBib29sIF9faW5pdCBodWdldGxiX2Jvb3RtZW1fcGFnZV9lYXJseWNtYShzdHJ1Y3QgaHVnZV9ib290bWVtX3BhZ2UgKm0pXFxubW0vaHVnZXRsYi5jLTMxNjYte1xcbi0tXFxubW0vaHVnZXRsYi5jLTMxNzktICovXFxubW0vaHVnZXRsYi5jOjMxODA6c3RhdGljIHZvaWQgX19pbml0IGh1Z2V0bGJfYm9vdG1lbV9pbml0X21pZ3JhdGV0eXBlKHN0cnVjdCBmb2xpbyAqZm9saW8sXFxubW0vaHVnZXRsYi5jLTMxODEtXFx0XFx0XFx0XFx0XFx0XFx0XFx0ICBzdHJ1Y3QgaHN0YXRlICpoKVxcbi0tXFxubW0vaHVnZXRsYi5jPTMxOTY9c3RhdGljIHZvaWQgX19pbml0IHByZXBfYW5kX2FkZF9ib290bWVtX2ZvbGlvcyhzdHJ1Y3QgaHN0YXRlICpoLFxcbi0tXFxubW0vaHVnZXRsYi5jLTMyMjUtXFxubW0vaHVnZXRsYi5jOjMyMjY6Ym9vbCBfX2luaXQgaHVnZXRsYl9ib290bWVtX3BhZ2Vfem9uZXNfdmFsaWQoaW50IG5pZCxcXG5tbS9odWdldGxiLmMtMzIyNy1cXHRcXHRcXHRcXHRcXHQgICAgIHN0cnVjdCBodWdlX2Jvb3RtZW1fcGFnZSAqbSlcXG4tLVxcbm1tL2h1Z2V0bGIuYy0zMjYyLSAqL1xcbm1tL2h1Z2V0bGIuYzozMjYzOnN0YXRpYyB2b2lkIF9faW5pdCBodWdldGxiX2Jvb3RtZW1fZnJlZV9pbnZhbGlkX3BhZ2UoaW50IG5pZCwgc3RydWN0IHBhZ2UgKnBhZ2UsXFxubW0vaHVnZXRsYi5jLTMyNjQtXFx0XFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3QgaHN0YXRlICpoKVxcbi0tXFxubW0vaHVnZXRsYi5jPTMzNTY9c3RhdGljIHZvaWQgX19pbml0IGdhdGhlcl9ib290bWVtX3ByZWFsbG9jKHZvaWQpXFxuLS1cXG5tbS9odWdldGxiLmMtMzM3MS1cXG5tbS9odWdldGxiLmM6MzM3MjpzdGF0aWMgdm9pZCBfX2luaXQgaHVnZXRsYl9oc3RhdGVfYWxsb2NfcGFnZXNfb25lbm9kZShzdHJ1Y3QgaHN0YXRlICpoLCBpbnQgbmlkKVxcbm1tL2h1Z2V0bGIuYy0zMzczLXtcXG4tLVxcbm1tL2h1Z2V0bGIuYy0zNDE0LVxcbm1tL2h1Z2V0bGIuYzozNDE1OnN0YXRpYyBib29sIF9faW5pdCBodWdldGxiX2hzdGF0ZV9hbGxvY19wYWdlc19zcGVjaWZpY19ub2RlcyhzdHJ1Y3QgaHN0YXRlICpoKVxcbm1tL2h1Z2V0bGIuYy0zNDE2LXtcXG4tLVxcbm1tL2h1Z2V0bGIuYy0zNDI5LVxcbm1tL2h1Z2V0bGIuYzozNDMwOnN0YXRpYyB2b2lkIF9faW5pdCBodWdldGxiX2hzdGF0ZV9hbGxvY19wYWdlc19lcnJjaGVjayh1bnNpZ25lZCBsb25nIGFsbG9jYXRlZCwgc3RydWN0IGhzdGF0ZSAqaClcXG5tbS9odWdldGxiLmMtMzQzMS17XFxuLS1cXG5tbS9odWdldGxiLmMtMzQ0MS1cXG5tbS9odWdldGxiLmM6MzQ0MjpzdGF0aWMgdm9pZCBfX2luaXQgaHVnZXRsYl9wYWdlc19hbGxvY19ib290X25vZGUodW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsIHZvaWQgKmFyZylcXG5tbS9odWdldGxiLmMtMzQ0My17XFxuLS1cXG5tbS9odWdldGxiLmMtMzQ3Mi1cXG5tbS9odWdldGxiLmM6MzQ3MzpzdGF0aWMgdW5zaWduZWQgbG9uZyBfX2luaXQgaHVnZXRsYl9naWdhbnRpY19wYWdlc19hbGxvY19ib290KHN0cnVjdCBoc3RhdGUgKmgpXFxubW0vaHVnZXRsYi5jLTM0NzQte1xcbi0tXFxubW0vaHVnZXRsYi5jLTM0ODUtXFxubW0vaHVnZXRsYi5jOjM0ODY6c3RhdGljIHVuc2lnbmVkIGxvbmcgX19pbml0IGh1Z2V0bGJfcGFnZXNfYWxsb2NfYm9vdChzdHJ1Y3QgaHN0YXRlICpoKVxcbm1tL2h1Z2V0bGIuYy0zNDg3LXtcXG4tLVxcbm1tL2h1Z2V0bGIuYy0zNTY0LSAqL1xcbm1tL2h1Z2V0bGIuYzozNTY1OnN0YXRpYyB2b2lkIF9faW5pdCBodWdldGxiX2hzdGF0ZV9hbGxvY19wYWdlcyhzdHJ1Y3QgaHN0YXRlICpoKVxcbm1tL2h1Z2V0bGIuYy0zNTY2LXtcXG4tLVxcbm1tL2h1Z2V0bGIuYy0zNTk0LVxcbm1tL2h1Z2V0bGIuYzozNTk1OnN0YXRpYyB2b2lkIF9faW5pdCBodWdldGxiX2luaXRfaHN0YXRlcyh2b2lkKVxcbm1tL2h1Z2V0bGIuYy0zNTk2LXtcXG4tLVxcbm1tL2h1Z2V0bGIuYz00MDQ3PXNzaXplX3QgX19ucl9odWdlcGFnZXNfc3RvcmVfY29tbW9uKGJvb2wgb2JleV9tZW1wb2xpY3ksXFxuLS1cXG5tbS9odWdldGxiLmMtNDA3OS1cXG5tbS9odWdldGxiLmM6NDA4MDpzdGF0aWMgaW50IF9faW5pdCBodWdldGxiX2luaXQodm9pZClcXG5tbS9odWdldGxiLmMtNDA4MS17XFxuLS1cXG5tbS9odWdldGxiLmM9NDE1Mz1ib29sIF9faW5pdCBfX2F0dHJpYnV0ZSgod2VhaykpIGFyY2hfaHVnZXRsYl92YWxpZF9zaXplKHVuc2lnbmVkIGxvbmcgc2l6ZSlcXG4tLVxcbm1tL2h1Z2V0bGIuYy00MTU3LVxcbm1tL2h1Z2V0bGIuYzo0MTU4OnZvaWQgX19pbml0IGh1Z2V0bGJfYWRkX2hzdGF0ZSh1bnNpZ25lZCBpbnQgb3JkZXIpXFxubW0vaHVnZXRsYi5jLTQxNTkte1xcbi0tXFxubW0vaHVnZXRsYi5jLTQxODEtXFxubW0vaHVnZXRsYi5jOjQxODI6Ym9vbCBfX2luaXQgX193ZWFrIGh1Z2V0bGJfbm9kZV9hbGxvY19zdXBwb3J0ZWQodm9pZClcXG5tbS9odWdldGxiLmMtNDE4My17XFxuLS1cXG5tbS9odWdldGxiLmM9NDE4Nz1zdGF0aWMgdm9pZCBfX2luaXQgaHVnZXBhZ2VzX2NsZWFyX3BhZ2VzX2luX25vZGUodm9pZClcXG4tLVxcbm1tL2h1Z2V0bGIuYy00MTk5LVxcbm1tL2h1Z2V0bGIuYzo0MjAwOnN0YXRpYyBfX2luaXQgaW50IGh1Z2V0bGJfYWRkX3BhcmFtKGNoYXIgKnMsIGludCAoKnNldHVwKShjaGFyICopKVxcbm1tL2h1Z2V0bGIuYy00MjAxLXtcXG4tLVxcbm1tL2h1Z2V0bGIuYy00MjI2LVxcbm1tL2h1Z2V0bGIuYzo0MjI3OnN0YXRpYyBfX2luaXQgdm9pZCBodWdldGxiX3BhcnNlX3BhcmFtcyh2b2lkKVxcbm1tL2h1Z2V0bGIuYy00MjI4LXtcXG4tLVxcbm1tL2h1Z2V0bGIuYz00NDQyPWh1Z2V0bGJfZWFybHlfcGFyYW0oXFxcImRlZmF1bHRfaHVnZXBhZ2VzelxcXCIsIGRlZmF1bHRfaHVnZXBhZ2Vzel9zZXR1cCk7XFxubW0vaHVnZXRsYi5jLTQ0NDMtXFxubW0vaHVnZXRsYi5jOjQ0NDQ6dm9pZCBfX2luaXQgaHVnZXRsYl9ib290bWVtX3NldF9ub2Rlcyh2b2lkKVxcbm1tL2h1Z2V0bGIuYy00NDQ1LXtcXG4tLVxcbm1tL2h1Z2V0bGIuYy00NDU3LVxcbm1tL2h1Z2V0bGIuYzo0NDU4OnZvaWQgX19pbml0IGh1Z2V0bGJfYm9vdG1lbV9hbGxvYyh2b2lkKVxcbm1tL2h1Z2V0bGIuYy00NDU5LXtcXG4tLVxcbm1tL2h1Z2V0bGIuYz00NTAwPXN0YXRpYyB1bnNpZ25lZCBpbnQgYWxsb3dlZF9tZW1zX25yKHN0cnVjdCBoc3RhdGUgKmgpXFxuLS1cXG5tbS9odWdldGxiLmMtNDUxNi1cXG5tbS9odWdldGxiLmM6NDUxNzp2b2lkIGh1Z2V0bGJfcmVwb3J0X21lbWluZm8oc3RydWN0IHNlcV9maWxlICptKVxcbm1tL2h1Z2V0bGIuYy00NTE4LXtcXG4tLVxcbm1tL2h1Z2V0bGIuYy00NTQ2LVxcbm1tL2h1Z2V0bGIuYzo0NTQ3OmludCBodWdldGxiX3JlcG9ydF9ub2RlX21lbWluZm8oY2hhciAqYnVmLCBpbnQgbGVuLCBpbnQgbmlkKVxcbm1tL2h1Z2V0bGIuYy00NTQ4LXtcXG4tLVxcbm1tL2h1Z2V0bGIuYy00NTYyLVxcbm1tL2h1Z2V0bGIuYzo0NTYzOnZvaWQgaHVnZXRsYl9zaG93X21lbWluZm9fbm9kZShpbnQgbmlkKVxcbm1tL2h1Z2V0bGIuYy00NTY0LXtcXG4tLVxcbm1tL2h1Z2V0bGIuYy00NTc4LVxcbm1tL2h1Z2V0bGIuYzo0NTc5OnZvaWQgaHVnZXRsYl9yZXBvcnRfdXNhZ2Uoc3RydWN0IHNlcV9maWxlICptLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSlcXG5tbS9odWdldGxiLmMtNDU4MC17XFxuLS1cXG5tbS9odWdldGxiLmMtNDU4NS0vKiBSZXR1cm4gdGhlIG51bWJlciBwYWdlcyBvZiBtZW1vcnkgd2UgcGh5c2ljYWxseSBoYXZlLCBpbiBQQUdFX1NJWkUgdW5pdHMuICovXFxubW0vaHVnZXRsYi5jOjQ1ODY6dW5zaWduZWQgbG9uZyBodWdldGxiX3RvdGFsX3BhZ2VzKHZvaWQpXFxubW0vaHVnZXRsYi5jLTQ1ODcte1xcbi0tXFxubW0vaHVnZXRsYi5jLTQ1OTUtXFxubW0vaHVnZXRsYi5jOjQ1OTY6c3RhdGljIGludCBodWdldGxiX2FjY3RfbWVtb3J5KHN0cnVjdCBoc3RhdGUgKmgsIGxvbmcgZGVsdGEpXFxubW0vaHVnZXRsYi5jLTQ1OTcte1xcbi0tXFxubW0vaHVnZXRsYi5jLTQ2NDUtXFxubW0vaHVnZXRsYi5jOjQ2NDY6c3RhdGljIHZvaWQgaHVnZXRsYl92bV9vcF9vcGVuKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxcbm1tL2h1Z2V0bGIuYy00NjQ3LXtcXG4tLVxcbm1tL2h1Z2V0bGIuYy00Njg1LVxcbm1tL2h1Z2V0bGIuYzo0Njg2OnN0YXRpYyB2b2lkIGh1Z2V0bGJfdm1fb3BfY2xvc2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXFxubW0vaHVnZXRsYi5jLTQ2ODcte1xcbi0tXFxubW0vaHVnZXRsYi5jLTQ3MTYtXFxubW0vaHVnZXRsYi5jOjQ3MTc6c3RhdGljIGludCBodWdldGxiX3ZtX29wX3NwbGl0KHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIpXFxubW0vaHVnZXRsYi5jLTQ3MTgte1xcbi0tXFxubW0vaHVnZXRsYi5jLTQ3MjMtXFxubW0vaHVnZXRsYi5jOjQ3MjQ6dm9pZCBodWdldGxiX3NwbGl0KHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIpXFxubW0vaHVnZXRsYi5jLTQ3MjUte1xcbi0tXFxubW0vaHVnZXRsYi5jLTQ3NTYtXFxubW0vaHVnZXRsYi5jOjQ3NTc6c3RhdGljIHVuc2lnbmVkIGxvbmcgaHVnZXRsYl92bV9vcF9wYWdlc2l6ZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcXG5tbS9odWdldGxiLmMtNDc1OC17XFxuLS1cXG5tbS9odWdldGxiLmMtNDc2Ny0gKi9cXG5tbS9odWdldGxiLmM6NDc2ODpzdGF0aWMgdm1fZmF1bHRfdCBodWdldGxiX3ZtX29wX2ZhdWx0KHN0cnVjdCB2bV9mYXVsdCAqdm1mKVxcbm1tL2h1Z2V0bGIuYy00NzY5LXtcXG4tLVxcbm1tL2h1Z2V0bGIuYy00Nzc0LSNpZmRlZiBDT05GSUdfVVNFUkZBVUxURkRcXG5tbS9odWdldGxiLmM6NDc3NTpzdGF0aWMgYm9vbCBodWdldGxiX2Nhbl91c2VyZmF1bHQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxubW0vaHVnZXRsYi5jLTQ3NzYtXFx0XFx0XFx0XFx0ICB2bV9mbGFnc190IHZtX2ZsYWdzKVxcbi0tXFxubW0vaHVnZXRsYi5jPTUzNjI9c3RhdGljIHZvaWQgdW5tYXBfcmVmX3ByaXZhdGUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbi0tXFxubW0vaHVnZXRsYi5jLTU0MTgtICovXFxubW0vaHVnZXRsYi5jOjU0MTk6c3RhdGljIHZtX2ZhdWx0X3QgaHVnZXRsYl93cChzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcXG5tbS9odWdldGxiLmMtNTQyMC17XFxuLS1cXG5tbS9odWdldGxiLmM9NTYxND1ib29sIGh1Z2V0bGJmc19wYWdlY2FjaGVfcHJlc2VudChzdHJ1Y3QgaHN0YXRlICpoLFxcbi0tXFxubW0vaHVnZXRsYi5jLTU2MjctXFxubW0vaHVnZXRsYi5jOjU2Mjg6aW50IGh1Z2V0bGJfYWRkX3RvX3BhZ2VfY2FjaGUoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXFxubW0vaHVnZXRsYi5jLTU2MjktXFx0XFx0XFx0ICAgcGdvZmZfdCBpZHgpXFxuLS1cXG5tbS9odWdldGxiLmMtNTY1Ni1cXG5tbS9odWdldGxiLmM6NTY1NzpzdGF0aWMgaW5saW5lIHZtX2ZhdWx0X3QgaHVnZXRsYl9oYW5kbGVfdXNlcmZhdWx0KHN0cnVjdCB2bV9mYXVsdCAqdm1mLFxcbm1tL2h1Z2V0bGIuYy01NjU4LVxcdFxcdFxcdFxcdFxcdFxcdCAgc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXFxuLS1cXG5tbS9odWdldGxiLmMtNTY3Ny0gKi9cXG5tbS9odWdldGxiLmM6NTY3ODpzdGF0aWMgYm9vbCBodWdldGxiX3B0ZV9zdGFibGUoc3RydWN0IGhzdGF0ZSAqaCwgc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcixcXG5tbS9odWdldGxiLmMtNTY3OS1cXHRcXHRcXHQgICAgICAgcHRlX3QgKnB0ZXAsIHB0ZV90IG9sZF9wdGUpXFxuLS1cXG5tbS9odWdldGxiLmMtNTY5MC1cXG5tbS9odWdldGxiLmM6NTY5MTpzdGF0aWMgdm1fZmF1bHRfdCBodWdldGxiX25vX3BhZ2Uoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXFxubW0vaHVnZXRsYi5jLTU2OTItXFx0XFx0XFx0c3RydWN0IHZtX2ZhdWx0ICp2bWYpXFxuLS1cXG5tbS9odWdldGxiLmM9NTkzNT11MzIgaHVnZXRsYl9mYXVsdF9tdXRleF9oYXNoKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBwZ29mZl90IGlkeClcXG4tLVxcbm1tL2h1Z2V0bGIuYy01OTQwLVxcbm1tL2h1Z2V0bGIuYzo1OTQxOnZtX2ZhdWx0X3QgaHVnZXRsYl9mYXVsdChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxubW0vaHVnZXRsYi5jLTU5NDItXFx0XFx0XFx0dW5zaWduZWQgbG9uZyBhZGRyZXNzLCB1bnNpZ25lZCBpbnQgZmxhZ3MpXFxuLS1cXG5tbS9odWdldGxiLmM9NjEzNj1zdGF0aWMgc3RydWN0IGZvbGlvICphbGxvY19odWdldGxiX2ZvbGlvX3ZtYShzdHJ1Y3QgaHN0YXRlICpoLFxcbi0tXFxubW0vaHVnZXRsYi5jLTYxNjItICovXFxubW0vaHVnZXRsYi5jOjYxNjM6aW50IGh1Z2V0bGJfbWZpbGxfYXRvbWljX3B0ZShwdGVfdCAqZHN0X3B0ZSxcXG5tbS9odWdldGxiLmMtNjE2NC1cXHRcXHRcXHQgICAgIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqZHN0X3ZtYSxcXG4tLVxcbm1tL2h1Z2V0bGIuYy02MzgzLVxcbm1tL2h1Z2V0bGIuYzo2Mzg0OmxvbmcgaHVnZXRsYl9jaGFuZ2VfcHJvdGVjdGlvbihzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG5tbS9odWdldGxiLmMtNjM4NS1cXHRcXHR1bnNpZ25lZCBsb25nIGFkZHJlc3MsIHVuc2lnbmVkIGxvbmcgZW5kLFxcbi0tXFxubW0vaHVnZXRsYi5jLTY1MzktXFxubW0vaHVnZXRsYi5jOjY1NDA6bG9uZyBodWdldGxiX3Jlc2VydmVfcGFnZXMoc3RydWN0IGlub2RlICppbm9kZSxcXG5tbS9odWdldGxiLmMtNjU0MS1cXHRcXHRsb25nIGZyb20sIGxvbmcgdG8sXFxuLS1cXG5tbS9odWdldGxiLmMtNjcyNy1cXG5tbS9odWdldGxiLmM6NjcyODpsb25nIGh1Z2V0bGJfdW5yZXNlcnZlX3BhZ2VzKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvbmcgc3RhcnQsIGxvbmcgZW5kLFxcbm1tL2h1Z2V0bGIuYy02NzI5LVxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdGxvbmcgZnJlZWQpXFxuLS1cXG5tbS9odWdldGxiLmM9NzA1MD1wdGVfdCAqaHVnZV9wdGVfb2Zmc2V0KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxcbi0tXFxubW0vaHVnZXRsYi5jLTcwODQtICovXFxubW0vaHVnZXRsYi5jOjcwODU6dW5zaWduZWQgbG9uZyBodWdldGxiX21hc2tfbGFzdF9wYWdlKHN0cnVjdCBoc3RhdGUgKmgpXFxubW0vaHVnZXRsYi5jLTcwODYte1xcbi0tXFxubW0vaHVnZXRsYi5jLTcwOTktLyogU2VlIGRlc2NyaXB0aW9uIGFib3ZlLiAgQXJjaGl0ZWN0dXJlcyBjYW4gcHJvdmlkZSB0aGVpciBvd24gdmVyc2lvbi4gKi9cXG5tbS9odWdldGxiLmM6NzEwMDpfX3dlYWsgdW5zaWduZWQgbG9uZyBodWdldGxiX21hc2tfbGFzdF9wYWdlKHN0cnVjdCBoc3RhdGUgKmgpXFxubW0vaHVnZXRsYi5jLTcxMDEte1xcbi0tXFxubW0vaHVnZXRsYi5jPTcxODU9dm9pZCBtb3ZlX2h1Z2V0bGJfc3RhdGUoc3RydWN0IGZvbGlvICpvbGRfZm9saW8sIHN0cnVjdCBmb2xpbyAqbmV3X2ZvbGlvLCBpbnQgcmVhc29uKVxcbi0tXFxubW0vaHVnZXRsYi5jLTcyNDAtICovXFxubW0vaHVnZXRsYi5jOjcyNDE6c3RhdGljIHZvaWQgaHVnZXRsYl91bnNoYXJlX3BtZHMoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxubW0vaHVnZXRsYi5jLTcyNDItXFx0XFx0XFx0XFx0ICAgdW5zaWduZWQgbG9uZyBzdGFydCxcXG4tLVxcbm1tL2h1Z2V0bGIuYy03MzAxLSAqL1xcbm1tL2h1Z2V0bGIuYzo3MzAyOnZvaWQgaHVnZXRsYl91bnNoYXJlX2FsbF9wbWRzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxcbm1tL2h1Z2V0bGIuYy03MzAzLXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjRUMTg6NDc6MDcuMDQ0NjYzMjYzWiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU4NjIyNDUyNDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIE1lbW9yeSBQb2lzb25pbmcgaW4gdGhlIEh1Z2VUTEIgYW5kIEZpbGUgU3lzdGVtcyoqXG5cbk9rYXksIHNvIEknbSBkaWdnaW5nIGludG8gaG93IG1lbW9yeSBwb2lzb25pbmcgaXMgaGFuZGxlZCwgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUgY29udGV4dCBvZiBIdWdlVExCIGFuZCBmaWxlIHN5c3RlbXMuIFRoZSBmdW5jdGlvbnMgb2YgaW50ZXJlc3Qg4oCTIGBodWdldGxiX3VwZGF0ZV9od3BvaXNvbmAsIGBodWdldGxiX3BhZ2VfaHdwb2lzb25gLCBgaHVnZXRsYl91bnJlZl9wYWdlX2h3cG9pc29uYCwgYW5kIGB1bnBvaXNvbl9tZW1vcnlgIOKAkyByZXNpZGUgaW4gYG1tL21lbW9yeS1mYWlsdXJlLmNgLiBJbnRlcmVzdGluZ+KApiBJIHNlZSB0aGF0IGBodWdldGxiX3VwZGF0ZV9od3BvaXNvbmAgaXMgc3RhdGljLCB3aGljaCBsaW1pdHMgaXRzIGRpcmVjdCBhY2Nlc3NpYmlsaXR5IGZyb20gZWxzZXdoZXJlLiBUaGUgb3RoZXJzLCBgaHVnZXRsYl9wYWdlX2h3cG9pc29uYCwgYGh1Z2V0bGJfdW5yZWZfcGFnZV9od3BvaXNvbmAsIGFuZCBgdW5wb2lzb25fbWVtb3J5YCwgYXJlLCBmb3J0dW5hdGVseSwgbm9uLXN0YXRpYyAoZXhwb3J0ZWQpLCBtYWtpbmcgdGhlbSBhdmFpbGFibGUgZm9yIGV4dGVybmFsIHVzZS5cblxuTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2UgYXJlICp1c2VkKi4gSSdkIG5vcm1hbGx5IGNoZWNrIGBtbS9maWxlbWFwLmNgIGZvciBjYWxscyByZWxhdGVkIHRvIGZpbGUgSS9PLCBwZXJoYXBzIGBmaWxlbWFwX3JlYWRgLCBgZmlsZW1hcF9nZXRfcmVhZF9iYXRjaGAsIG9yIGBmaWxlbWFwX2dldF9wYWdlc2AuIEhvbGQgb24sIGBmaWxlbWFwX3JlYWRgIGlzIGEga25vd24gaG90IHBhdGg7IHdlIHdhbnQgdG8gYXZvaWQgcG90ZW50aWFsbHkgZGlzcnVwdGluZyB0aGF0IGlmIHBvc3NpYmxlLiBMZXQncyBzdGVwIGJhY2suLi4gaG1tLCB3YXNuJ3QgdGhlcmUgc29tZXRoaW5nIGFib3V0IGBodWdldGxiZnNfcmVhZF9pdGVyYD8gQWggeWVzLCB0aGF0IHdhcyByZW1vdmVkIOKAkyBzbyBubyBqb3kgdGhlcmUuIFdoYXQgYWJvdXQgYGFkanVzdF9yYW5nZV9od3BvaXNvbmA/IE5vcGUsIGl0J3Mgc3RhdGljIGFnYWluLCBzbyBhbHNvIG5vdCB0aGUgZGlyZWN0IGFuc3dlciBJJ20gc2Vla2luZy5cblxuT2theSwgbGV0J3MgY2FzdCBhIHdpZGVyIG5ldC4gV2hhdCBhYm91dCBgaHVnZXRsYl9mb2xpb19tYXBwaW5nX2xvY2tfd3JpdGVgIGluIGBtbS9odWdldGxiLmNgPyBUaGF0IG1pZ2h0IGJlIHJlbGV2YW50IGFzIHdlIGFyZSBkZWFsaW5nIHdpdGggSHVnZVRMQiBzcGVjaWZpY2FsbHkuIEFuZCBhbHNvLCBwZXJoYXBzLCBgaHVnZXRsYmZzX2luaXRfcmVndWxhcl9pbm9kZWAgaW4gYGZzL2h1Z2V0bGJmcy9pbm9kZS5jYC4uLiBJdCBsb29rcyBsaWtlIGEgZ29vZCBwbGFjZSB0byBzdGFydCwgc28gSSdsbCBkaXZlIGludG8gYGZzL2h1Z2V0bGJmcy9pbm9kZS5jYCBub3cgdG8gaW52ZXN0aWdhdGUgdGhhdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjUxOTYsIk91dHB1dFRva2VucyI6NDQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOTEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjRUMTg6NDc6MTIuOTA2OTEyMDYxWiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDgzNDQ1NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiXnN0YXRpYyB2b2lkIGh1Z2V0bGJmc19pbml0X3JlZ3VsYXJfaW5vZGVcXFxcKFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9odWdldGxiZnMvaW5vZGUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9odWdldGxiZnMvaW5vZGUuYz03NTc9c3RhdGljIHN0cnVjdCBpbm9kZSAqaHVnZXRsYmZzX2dldF9yb290KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsXFxuLS1cXG5mcy9odWdldGxiZnMvaW5vZGUuYy03NzgtXFxuZnMvaHVnZXRsYmZzL2lub2RlLmM6Nzc5OnN0YXRpYyB2b2lkIGh1Z2V0bGJmc19pbml0X3JlZ3VsYXJfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSlcXG5mcy9odWdldGxiZnMvaW5vZGUuYy03ODAte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNFQxODo0NzoxMy4zNTUyNjM0NzFaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTU2ODY2NTY2ODYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRm9jdXNpbmcgb24gSGFyZHdhcmUgUG9pc29uaW5nIGluIEh1Z2VUTEIgUGFnZXMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBgaHVnZXRsYmZzX2luaXRfcmVndWxhcl9pbm9kZWAgYW5kIGltbWVkaWF0ZWx5IG5vdGljZSBpdCdzIHN0YXRpYywgd2hpY2gsIHdoaWxlIHBvdGVudGlhbGx5IHJlbGV2YW50LCBpc24ndCB3aGVyZSBJIG5lZWQgdG8gZm9jdXMgcmlnaHQgbm93LiBMZXQncyBkcmlsbCBkb3duIG9uIHRoZSBjb3JlIGhhcmR3YXJlIHBvaXNvbmluZyBmdW5jdGlvbnMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgcG9pc29uIGhhbmRsaW5nIHdvcmtzIGluIHRoZSBjb250ZXh0IG9mIEh1Z2VUTEIgcGFnZXMuIFNwZWNpZmljYWxseSwgSSdtIHRoaW5raW5nIGFib3V0IGBodWdldGxiX3BhZ2VfaHdwb2lzb25gLCBgaHVnZXRsYl91bnJlZl9wYWdlX2h3cG9pc29uYCwgYW5kIGB1bnBvaXNvbl9tZW1vcnlgLiBUaG9zZSBzZWVtIHRvIGJlIHRoZSBrZXkgcGxheWVycyBpbiBkZXRlY3RpbmcsIHJlcG9ydGluZywgYW5kIGhvcGVmdWxseSwgcmVjb3ZlcmluZyBmcm9tIGhhcmR3YXJlIGVycm9ycy5cblxuSSdtIGFsc28gc2VlaW5nIGBodWdldGxiX3NldF9wb2lzb25gIGFuZCBgaHVnZXRsYl9jbGVhcl9wb2lzb25gLCB3aGljaCBhcmUgc3RhdGljIGlubGluZSBmdW5jdGlvbnMuIFRoYXQncyBnb29kLCB0aGV5J3JlIHByb2JhYmx5IG9wdGltaXplZCBmb3IgdGhlaXIgc3BlY2lmaWMgdXNlIHdpdGhpbiB0aGUgSHVnZVRMQiBjb250ZXh0LlxuXG5XYWl0IGEgbWludXRlLCB3aGF0J3MgdGhpcz8gYGZvbGlvX2NsZWFyX2h1Z2V0bGJfaHdwb2lzb25gIGluIGBtbS9tZW1vcnktZmFpbHVyZS5jYCBpcyBub24tc3RhdGljLiBUaGF0J3MgaW50ZXJlc3RpbmcsIGl0IG9wZW5zIHVwIHRoZSBwb3NzaWJpbGl0eSBvZiBleHRlcm5hbCB1c2UsIHdoaWNoIHdhcnJhbnRzIGZ1cnRoZXIgaW52ZXN0aWdhdGlvbi4gSSdsbCBuZWVkIHRvIHJlbWVtYmVyIHRoYXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI2MDg5LCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTExLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI0VDE4OjQ3OjI5LjA0MTkyMzEyN1oiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODk3ODY5MDIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiXnZvaWQgZm9saW9fY2xlYXJfaHVnZXRsYl9od3BvaXNvblxcXFwoXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL21lbW9yeS1mYWlsdXJlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vbWVtb3J5LWZhaWx1cmUuYz0xOTU4PXN0YXRpYyB1bnNpZ25lZCBsb25nIGZvbGlvX2ZyZWVfcmF3X2h3cChzdHJ1Y3QgZm9saW8gKmZvbGlvLCBib29sIG1vdmVfZmxhZylcXG4tLVxcbm1tL21lbW9yeS1mYWlsdXJlLmMtMTk3Ni1cXG5tbS9tZW1vcnktZmFpbHVyZS5jOjE5Nzc6dm9pZCBmb2xpb19jbGVhcl9odWdldGxiX2h3cG9pc29uKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxubW0vbWVtb3J5LWZhaWx1cmUuYy0xOTc4LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjRUMTg6NDc6MjkuMTMxNzI4ODg5WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEwODA0NDY1Nzk5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBQYXRjaCBmb3IgSFdQb2lzb24gVHJhY2tpbmcgaW4gTGFyZ2UgRm9saW9zKipcblxuT2theSwgZmlyc3QgdGhpbmdzIGZpcnN0LCBgZm9saW9fY2xlYXJfaHVnZXRsYl9od3BvaXNvbmAgaXMgY29uZmlybWVkIHRvIGJlIG5vbi1zdGF0aWMuIEdvb2QuIE5vdywgbGV0J3Mgc2VlIHdoYXQgZWxzZSB0aGlzIHBhdGNoIHRvdWNoZXMuIFNjYW5uaW5nIHRoZSBjb2RlLCBJIHNlZSBtb2RpZmljYXRpb25zIGluIGBtbS9maWxlbWFwLmNgIChzcGVjaWZpY2FsbHkgYGZpbGVtYXBfcmVhZGApLCBgbW0vaHVnZV9tZW1vcnkuY2AgKHNwZWNpZmljYWxseSBgdGhwX3VuZGVydXNlZGApLCBgbW0vc2htZW0uY2AgKHNwZWNpZmljYWxseSBgc2htZW1fd3JpdGVfYmVnaW5gKSwgYG1tL3Ztc2Nhbi5jYCAoc3BlY2lmaWNhbGx5IGBzaHJpbmtfZm9saW9fbGlzdGApLCBhbmQgYHZpcnQva3ZtL2d1ZXN0X21lbWZkLmNgIChzcGVjaWZpY2FsbHkgYF9fa3ZtX2dtZW1fZ2V0X3BmbmApLiBUaGlzIG1lYW5zIGl0J3MgcHJldHR5IHdpZGVzcHJlYWQuXG5cbkVzc2VudGlhbGx5LCB0aGlzIHBhdGNoIGlzIGEgZnVuY3Rpb25hbCBzaGlmdCBpbiBob3cgaHdwb2lzb24gaXMgaGFuZGxlZCBmb3IgbGFyZ2UgZm9saW9zLiBXZSdyZSBtb3ZpbmcgZnJvbSBhIGN1c3RvbSBsaXN0IChgZm9saW8tXHUwMDNlX2h1Z2V0bGJfaHdwb2lzb25gKSB0byBhIHNpbmdsZSBmbGFnIChgZm9saW8tXHUwMDNlaHVnZXRsYl9od3BvaXNvbmApIGFuZCB1c2luZyBgZm9saW9faGFzX2h3cG9pc29uZWRfcGFnZWAgaW5zdGVhZCBvZiB0aGUgb2xkIGBmb2xpb19jb250YWluX2h3cG9pc29uZWRfcGFnZWAuIEl0IGFsc28gcmVtb3ZlcyB0aGUgY3VzdG9tIGBodWdldGxiZnNfcmVhZF9pdGVyYCBhbmQgdXNlcyBgZ2VuZXJpY19maWxlX3JlYWRfaXRlcmAsIGludGVncmF0aW5nIGh3cG9pc29uIGhhbmRsaW5nIHdpdGhpbiBgZmlsZW1hcF9yZWFkYC4gVGhpcyBpcyBzaWduaWZpY2FudDsgdGhlIGNoYW5nZSBpbiB0aGUgcmVhZCBwYXRoIGlzIGEgZ29vZCBpbmRpY2F0b3Igb2Ygd2hlcmUgd2Ugc2hvdWxkIGZvY3VzLlxuXG5HaXZlbiB0aGUgZnVuY3Rpb25hbCBuYXR1cmUgb2YgdGhpcyBjaGFuZ2UsIGZ1enppbmcgaXMgZGVmaW5pdGVseSB3YXJyYW50ZWQuIE15IHByaW1hcnkgZm9jdXMgc3ltYm9scyB3aWxsIGJlOlxuXG4qICAgYGh1Z2V0bGJfcGFnZV9od3BvaXNvbmBcbiogICBgaHVnZXRsYl91bnJlZl9wYWdlX2h3cG9pc29uYFxuKiAgIGB1bnBvaXNvbl9tZW1vcnlgXG4qICAgYGZvbGlvX2NsZWFyX2h1Z2V0bGJfaHdwb2lzb25gXG5cbk5vdywgbGV0J3MgY29uc2lkZXIgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zLiBUaGUgY3JpdGljYWwgb25lcyBmb3IgdGhpcyBhcmVhIGFyZTpcblxuKiAgIGBNRU1PUllfRkFJTFVSRWAgLSBUaGlzIGlzIG5vbi1uZWdvdGlhYmxlIGZvciBod3BvaXNvbi5cbiogICBgSFVHRVRMQkZTYCAtIFByZXR0eSBvYnZpb3VzLCBnaXZlbiB0aGUgbmFtZXMuXG4qICAgYEhVR0VUTEJfUEFHRWAgLSBBbHNvIGV4cGVjdGVkLlxuKiAgIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAgLSBBbHNvLCBhZGRlZC5cbiogICBgS1ZNYCAtIFRoaXMgb25lIGlzIGltcG9ydGFudCBmb3IgYHZpcnQva3ZtL2d1ZXN0X21lbWZkLmNgLlxuXG5BSEEhIFRoZSBgTEFSR0VfRk9MSU9gIGNvbmZpZyAqaXMqIG5ldywgYnV0IGl0J3Mgc2VsZWN0ZWQgYnkgYEhVR0VUTEJfUEFHRWAgYW5kIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAuIFNvLCBpbmNsdWRpbmcgaXQgaXMgaW1wb3J0YW50IHRvIGluY2x1ZGUuXG5cbkRvdWJsZS1jaGVja2luZyBteSBjb25maWcgYXNzdW1wdGlvbnMsIGBNRU1PUllfRkFJTFVSRWAgc2VlbXMgdG8gYmUgdGhlIG9ubHkgKnJlcXVpcmVkKiBvbmUgZm9yIHRoZSBjb3JlIGh3cG9pc29uIGxvZ2ljLlxuXG5RdWljayBzaWRlLW5vdGUuIEV2ZW4gdGhvdWdoIGBzaG1lbV93cml0ZV9iZWdpbmAgYW5kIGBzaHJpbmtfZm9saW9fbGlzdGAgYXJlIG1vZGlmaWVkLCB0aGV5IGFyZSBob3QgcGF0aHMuIFdlIHNob3VsZCBkZS1wcmlvcml0aXplIHRoZW0gZm9yIG5vdy5cblxuV2FpdC4uLiBgdW5wb2lzb25fbWVtb3J5YCBpcyBleHBvcnRlZC4gVGhhdCdzIGludGVyZXN0aW5nLiBJIGtub3cgaXQgY2FuIGJlIGNhbGxlZCB0aHJvdWdoIGRlYnVnZnMgb3IgbWFkdmlzZS4gQnV0LCBhaC1oYSEgSXQncyBjYWxsZWQgZnJvbSBgaHdwb2lzb25fdW5wb2lzb25gIGluIGBtbS9od3BvaXNvbi1pbmplY3QuY2AuIEkgbmVlZCB0byBlbnN1cmUgdGhhdCBgSFdQT0lTT05fSU5KRUNUYCBpcyBlbmFibGVkIGZvciB0aGlzIGZ1enppbmcgZWZmb3J0IHRvIGNvdmVyIHRoYXQgY29kZSBwYXRoLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNjYxMiwiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc1MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNFQxODo0NzozOS45MzYxOTkzMDlaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyNDY3NTY0MTYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEhXUE9JU09OX0lOSkVDVFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9LY29uZmlnPTc3Nz1jb25maWcgTUVNT1JZX0ZBSUxVUkVcXG4tLVxcbm1tL0tjb25maWctNzg3LVxcbm1tL0tjb25maWc6Nzg4OmNvbmZpZyBIV1BPSVNPTl9JTkpFQ1RcXG5tbS9LY29uZmlnLTc4OS1cXHR0cmlzdGF0ZSBcXFwiSFdQb2lzb24gcGFnZXMgaW5qZWN0b3JcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI0VDE4OjQ3OjQyLjE4Mjk2NTExNFoiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3NjEwNzc3NzgwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIEhXUE9JU09OIEZ1enppbmcgUG90ZW50aWFsKipcblxuT2theSwgc28gSSdtIHRoaW5raW5nIGFib3V0IGhvdyB0byBiZXN0IGZ1enogdGhlIGBod3BvaXNvbmAgZnVuY3Rpb25hbGl0eS4gWWVzLCB1c2luZyBgSFdQT0lTT05fSU5KRUNUYCBpcyBkZWZpbml0ZWx5IGEgZ29vZCBzdGFydGluZyBwb2ludCBmb3IgdGhhdC4gXG5cblRoZSBmaXJzdCB0aGluZyBJIG5lZWQgdG8gY29uZmlybSBpcyB0aGF0IGBNQURWX0hXUE9JU09OYCBpcyBldmVuIGF2YWlsYWJsZSBpbiB0aGUgY3VycmVudCBjb25maWd1cmF0aW9uLiBBaCwgeWVzLCBpdCdzIHRpZWQgdG8gYENPTkZJR19NRU1PUllfRkFJTFVSRWAsIHNvIHRoYXQncyB0aGUga2V5LiAgTm93LCB3aGF0IG90aGVyIGNvbmZpZyBvcHRpb25zIGFyZSBsaWtlbHkgcmVsZXZhbnQgaGVyZT8gIExldCBtZSBzZWU6XG5cbiogICBgTUVNT1JZX0ZBSUxVUkVgIC0gb2J2aW91c2x5LlxuKiAgIGBIV1BPSVNPTl9JTkpFQ1RgIC0gZm9yIGluamVjdGlvbiwgb2YgY291cnNlLlxuKiAgIGBIVUdFVExCRlNgIC0gYmVjYXVzZSB3ZSBhcmUgdGhpbmtpbmcgYWJvdXQgaHVnZXRsYiBwYWdlcy5cbiogICBgSFVHRVRMQl9QQUdFYCAtIGFnYWluLCBmb3IgdGhlIHBhZ2VzIHRoZW1zZWx2ZXMuXG4qICAgYFRSQU5TUEFSRU5UX0hVR0VQQUdFYCAtIG1pZ2h0IG9wZW4gdXAgc29tZSBpbnRlcmVzdGluZyBmdXp6aW5nIHZlY3RvcnMuXG5cbk5vdywgbGV0J3MgcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGNyaXRpY2FsIHN5bWJvbHMgSSBzaG91bGQgYmUgZm9jdXNpbmcgb24uIFdlIGhhdmU6XG5cbiogICBgaHVnZXRsYl9wYWdlX2h3cG9pc29uYFxuKiAgIGBodWdldGxiX3VucmVmX3BhZ2VfaHdwb2lzb25gXG4qICAgYHVucG9pc29uX21lbW9yeWBcbiogICBgZm9saW9fY2xlYXJfaHVnZXRsYl9od3BvaXNvbmBcblxuQXJlIHRoZXJlIGFueSBvdGhlciBmdW5jdGlvbnMgdGhhdCBtaWdodCBiZSB1c2VmdWwgdGFyZ2V0cz8gTGV0J3MgZGlnIGRlZXBlci4gT2ssIGxvb2tpbmcgaW50byBgbW0vaHVnZXRsYi5jYCwgSSBzZWUgYGh1Z2V0bGJfZm9saW9fbWFwcGluZ19sb2NrX3dyaXRlYCBoYXMgYmVlbiBtb2RpZmllZCBpbiB0aGUgY29tbWl0LiBBbmQgaW4gYG1tL21lbW9yeS1mYWlsdXJlLmNgLCB0aGVyZSBhcmUgcXVpdGUgYSBmZXcgc3RhdGljIGZ1bmN0aW9ucyB0aGF0IHdpbGwgbm90IGJlIHVzZWZ1bCBmb3IgdXM6XG5cbiogICBgcHJlY2lzZV9wYWdlX3BvaXNvbmVkYCAoc3RhdGljKVxuKiAgIGBodWdldGxiX3NldF9wb2lzb25gIChzdGF0aWMpXG4qICAgYGh1Z2V0bGJfY2xlYXJfcG9pc29uYCAoc3RhdGljKVxuKiAgIGBodWdldGxiX3VwZGF0ZV9od3BvaXNvbmAgKHN0YXRpYylcblxuU2luY2Ugd2UgYXJlIGxvb2tpbmcgZm9yIGZ1bmN0aW9ucyB3ZSBjYW4gZGlyZWN0bHkgdGFyZ2V0IGZvciBmdXp6aW5nLCBJIHNob3VsZCBvbmx5IGNvbmNlcm4gbXlzZWxmIHdpdGggZnVuY3Rpb25zIHRoYXQgYXJlIGV4cG9ydGVkIG9yIGFyZSBub24tc3RhdGljLiBUaG9zZSA0IGZ1bmN0aW9ucyBJIG1lbnRpb25lZCBpbml0aWFsbHkgYXJlIHRoZSBvbmVzLlxuXG5BbHJpZ2h0LCB0aGF0J3MgYSBnb29kIG92ZXJ2aWV3LiBMZXQncyBjYWxsIHRoZSBgc2V0LXJlc3VsdHNgIGZ1bmN0aW9uIHRvIHN1bW1hcml6ZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjgxNjMsIk91dHB1dFRva2VucyI6MjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mjg4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI0VDE4OjQ3OjQ5Ljc5Mzc0NTk2NFoiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc0MDQ5NDYzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJNRU1PUllfRkFJTFVSRVwiLFxuICAgIFwiSFdQT0lTT05fSU5KRUNUXCIsXG4gICAgXCJIVUdFVExCRlNcIixcbiAgICBcIkhVR0VUTEJfUEFHRVwiLFxuICAgIFwiVFJBTlNQQVJFTlRfSFVHRVBBR0VcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJodWdldGxiX3BhZ2VfaHdwb2lzb25cIixcbiAgICBcImh1Z2V0bGJfdW5yZWZfcGFnZV9od3BvaXNvblwiLFxuICAgIFwidW5wb2lzb25fbWVtb3J5XCIsXG4gICAgXCJmb2xpb19jbGVhcl9odWdldGxiX2h3cG9pc29uXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgaG93IGhhcmR3YXJlIHBvaXNvbmVkIChIV1BPSVNPTikgcGFnZXMgYXJlIHRyYWNrZWQgYW5kIGhhbmRsZWQgd2l0aGluIGxhcmdlIGZvbGlvcywgc3BlY2lmaWNhbGx5IGFmZmVjdGluZyBodWdldGxiZnMgYW5kIGZpbGVtYXAgcmVhZCBvcGVyYXRpb25zLiBJdCBpbnRyb2R1Y2VzIG5ldyBsb2dpYyB0byB0cmFjayBwb2lzb25lZCBwYWdlcyB1c2luZyBgZm9saW8tXFx1MDAzZWh1Z2V0bGJfaHdwb2lzb25gIGFuZCByZXBsYWNlcyB0aGUgY3VzdG9tIGBodWdldGxiZnNfcmVhZF9pdGVyYCB3aXRoIGBnZW5lcmljX2ZpbGVfcmVhZF9pdGVyYCwgaGFuZGxpbmcgaHdwb2lzb24gZGlyZWN0bHkgaW4gYGZpbGVtYXBfcmVhZGAuIFRoZXNlIGFyZSByZWFjaGFibGUsIGZ1bmN0aW9uYWwgY2hhbmdlcyBpbiBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBodWdldGxiZnMuIEZ1enppbmcgc2hvdWxkIGZvY3VzIG9uIHRoZSBuZXcgaHdwb2lzb24gdHJhY2tpbmcgZnVuY3Rpb25zIGFuZCB1bnBvaXNvbmluZyBsb2dpYy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJNRU1PUllfRkFJTFVSRVwiLFxuICAgIFwiSFdQT0lTT05fSU5KRUNUXCIsXG4gICAgXCJIVUdFVExCRlNcIixcbiAgICBcIkhVR0VUTEJfUEFHRVwiLFxuICAgIFwiVFJBTlNQQVJFTlRfSFVHRVBBR0VcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJodWdldGxiX3BhZ2VfaHdwb2lzb25cIixcbiAgICBcImh1Z2V0bGJfdW5yZWZfcGFnZV9od3BvaXNvblwiLFxuICAgIFwidW5wb2lzb25fbWVtb3J5XCIsXG4gICAgXCJmb2xpb19jbGVhcl9odWdldGxiX2h3cG9pc29uXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgaG93IGhhcmR3YXJlIHBvaXNvbmVkIChIV1BPSVNPTikgcGFnZXMgYXJlIHRyYWNrZWQgYW5kIGhhbmRsZWQgd2l0aGluIGxhcmdlIGZvbGlvcywgc3BlY2lmaWNhbGx5IGFmZmVjdGluZyBodWdldGxiZnMgYW5kIGZpbGVtYXAgcmVhZCBvcGVyYXRpb25zLiBJdCBpbnRyb2R1Y2VzIG5ldyBsb2dpYyB0byB0cmFjayBwb2lzb25lZCBwYWdlcyB1c2luZyBgZm9saW8tXFx1MDAzZWh1Z2V0bGJfaHdwb2lzb25gIGFuZCByZXBsYWNlcyB0aGUgY3VzdG9tIGBodWdldGxiZnNfcmVhZF9pdGVyYCB3aXRoIGBnZW5lcmljX2ZpbGVfcmVhZF9pdGVyYCwgaGFuZGxpbmcgaHdwb2lzb24gZGlyZWN0bHkgaW4gYGZpbGVtYXBfcmVhZGAuIFRoZXNlIGFyZSByZWFjaGFibGUsIGZ1bmN0aW9uYWwgY2hhbmdlcyBpbiBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBodWdldGxiZnMuIEZ1enppbmcgc2hvdWxkIGZvY3VzIG9uIHRoZSBuZXcgaHdwb2lzb24gdHJhY2tpbmcgZnVuY3Rpb25zIGFuZCB1bnBvaXNvbmluZyBsb2dpYy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },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-workflowsdptw[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-24 18:19:23 +0000 UTC FinishedAt: 2026-07-24 18:47:51 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "1590cf0329716306e948a8fc29f1d3ee87d3989f", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MEMORY_FAILURE", "HWPOISON_INJECT", "HUGETLBFS", "HUGETLB_PAGE", "TRANSPARENT_HUGEPAGE" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "1590cf0329716306e948a8fc29f1d3ee87d3989f", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MEMORY_FAILURE", "HWPOISON_INJECT", "HUGETLBFS", "HUGETLB_PAGE", "TRANSPARENT_HUGEPAGE" ], "series_id": "4b3a4f52-06f4-4a41-872f-dde0771be8ef" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "hugetlb_page_hwpoison", "hugetlb_unref_page_hwpoison", "unpoison_memory", "folio_clear_hugetlb_hwpoison" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db", "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": { "findings": [ "7a0cb565-4340-4daf-8de2-06f5b1d2af93", "a77d3cb3-6a99-45a3-bd83-722c3f7fcd2c" ] } } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI0IDE4OjQ2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01FTU9SWV9GQUlMVVJFJiMzNDssCiAgICAmIzM0O0hXUE9JU09OX0lOSkVDVCYjMzQ7LAogICAgJiMzNDtIVUdFVExCRlMmIzM0OywKICAgICYjMzQ7SFVHRVRMQl9QQUdFJiMzNDssCiAgICAmIzM0O1RSQU5TUEFSRU5UX0hVR0VQQUdFJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aHVnZXRsYl9wYWdlX2h3cG9pc29uJiMzNDssCiAgICAmIzM0O2h1Z2V0bGJfdW5yZWZfcGFnZV9od3BvaXNvbiYjMzQ7LAogICAgJiMzNDt1bnBvaXNvbl9tZW1vcnkmIzM0OywKICAgICYjMzQ7Zm9saW9fY2xlYXJfaHVnZXRsYl9od3BvaXNvbiYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBob3cgaGFyZHdhcmUgcG9pc29uZWQgKEhXUE9JU09OKSBwYWdlcyBhcmUgdHJhY2tlZCBhbmQgaGFuZGxlZCB3aXRoaW4gbGFyZ2UgZm9saW9zLCBzcGVjaWZpY2FsbHkgYWZmZWN0aW5nIGh1Z2V0bGJmcyBhbmQgZmlsZW1hcCByZWFkIG9wZXJhdGlvbnMuIEl0IGludHJvZHVjZXMgbmV3IGxvZ2ljIHRvIHRyYWNrIHBvaXNvbmVkIHBhZ2VzIHVzaW5nIGBmb2xpby1cdTAwM2VodWdldGxiX2h3cG9pc29uYCBhbmQgcmVwbGFjZXMgdGhlIGN1c3RvbSBgaHVnZXRsYmZzX3JlYWRfaXRlcmAgd2l0aCBgZ2VuZXJpY19maWxlX3JlYWRfaXRlcmAsIGhhbmRsaW5nIGh3cG9pc29uIGRpcmVjdGx5IGluIGBmaWxlbWFwX3JlYWRgLiBUaGVzZSBhcmUgcmVhY2hhYmxlLCBmdW5jdGlvbmFsIGNoYW5nZXMgaW4gY29yZSBtZW1vcnkgbWFuYWdlbWVudCBhbmQgaHVnZXRsYmZzLiBGdXp6aW5nIHNob3VsZCBmb2N1cyBvbiB0aGUgbmV3IGh3cG9pc29uIHRyYWNraW5nIGZ1bmN0aW9ucyBhbmQgdW5wb2lzb25pbmcgbG9naWMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjQgMTg6NDY8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCAwZmU2ZGU2YzJmMDU3NjY0MjE3ZDk2YTNkYTc3MmE0ODY2N2U1NTY3XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBKdWwgMjQgMTg6NDY6MTYgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZnMvS2NvbmZpZyBiL2ZzL0tjb25maWdcbmluZGV4IGNmNmFlNjQ3NzZlNjJjLi5lZGRhYzRlZDIxNGIxMiAxMDA2NDRcbi0tLSBhL2ZzL0tjb25maWdcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL0tjb25maWdcbkBAIC0yNzIsNyAmIzQzOzI3Miw3IEBAIGVuZGlmICMgSFVHRVRMQkZTXG4gXG4gY29uZmlnIEhVR0VUTEJfUEFHRVxuIFx0ZGVmX2Jvb2wgSFVHRVRMQkZTXG4tXHRzZWxlY3QgWEFSUkFZX01VTFRJXG4mIzQzO1x0c2VsZWN0IExBUkdFX0ZPTElPXG4gXG4gY29uZmlnIEhVR0VUTEJfUEFHRV9PUFRJTUlaRV9WTUVNTUFQXG4gXHRkZWZfYm9vbCBIVUdFVExCX1BBR0VcbmRpZmYgLS1naXQgYS9mcy9odWdldGxiZnMvaW5vZGUuYyBiL2ZzL2h1Z2V0bGJmcy9pbm9kZS5jXG5pbmRleCAyMTZlMWEwZGQwYjIzNy4uY2VmN2U2MWI4MjdkNzEgMTAwNjQ0XG4tLS0gYS9mcy9odWdldGxiZnMvaW5vZGUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMvaHVnZXRsYmZzL2lub2RlLmNcbkBAIC0xODcsMTEzICYjNDM7MTg3LDYgQEAgaHVnZXRsYl9nZXRfdW5tYXBwZWRfYXJlYShzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgbG9uZyBhZGRyLFxuIFx0cmV0dXJuIG1tX2dldF91bm1hcHBlZF9hcmVhX3ZtZmxhZ3MoZmlsZSwgYWRkcjAsIGxlbiwgcGdvZmYsIGZsYWdzLCAwKTtcbiB9XG4gXG4tLypcbi0gKiBTb21lb25lIHdhbnRzIHRvIHJlYWQgQGJ5dGVzIGZyb20gYSBIV1BPSVNPTiBodWdldGxiIEBmb2xpbyBmcm9tIEBvZmZzZXQuXG4tICogUmV0dXJucyB0aGUgbWF4aW11bSBudW1iZXIgb2YgYnl0ZXMgb25lIGNhbiByZWFkIHdpdGhvdXQgdG91Y2hpbmcgdGhlIDFzdCByYXdcbi0gKiBIV1BPSVNPTiBwYWdlLlxuLSAqL1xuLXN0YXRpYyBzaXplX3QgYWRqdXN0X3JhbmdlX2h3cG9pc29uKHN0cnVjdCBmb2xpbyAqZm9saW8sIHNpemVfdCBvZmZzZXQsXG4tXHRcdHNpemVfdCBieXRlcylcbi17XG4tXHRzdHJ1Y3QgcGFnZSAqcGFnZSA9IGZvbGlvX3BhZ2UoZm9saW8sIG9mZnNldCAvIFBBR0VfU0laRSk7XG4tXHRzaXplX3Qgc2FmZV9ieXRlcztcbi1cbi1cdGlmIChpc19yYXdfaHdwb2lzb25fcGFnZV9pbl9odWdlcGFnZShwYWdlKSlcbi1cdFx0cmV0dXJuIDA7XG4tXHQvKiBTYWZlIHRvIHJlYWQgdGhlIHJlbWFpbmluZyBieXRlcyBpbiB0aGlzIHBhZ2UuICovXG4tXHRzYWZlX2J5dGVzID0gUEFHRV9TSVpFIC0gKG9mZnNldCAlIFBBR0VfU0laRSk7XG4tXHRwYWdlJiM0MzsmIzQzOztcbi1cbi1cdC8qIENoZWNrIGVhY2ggcmVtYWluaW5nIHBhZ2UgYXMgbG9uZyBhcyB3ZSBhcmUgbm90IGRvbmUgeWV0LiAqL1xuLVx0Zm9yICg7IHNhZmVfYnl0ZXMgXHUwMDNjIGJ5dGVzOyBzYWZlX2J5dGVzICYjNDM7PSBQQUdFX1NJWkUsIHBhZ2UmIzQzOyYjNDM7KVxuLVx0XHRpZiAoaXNfcmF3X2h3cG9pc29uX3BhZ2VfaW5faHVnZXBhZ2UocGFnZSkpXG4tXHRcdFx0YnJlYWs7XG4tXG4tXHRyZXR1cm4gbWluKHNhZmVfYnl0ZXMsIGJ5dGVzKTtcbi19XG4tXG4tLypcbi0gKiBTdXBwb3J0IGZvciByZWFkKCkgLSBGaW5kIHRoZSBwYWdlIGF0dGFjaGVkIHRvIGZfbWFwcGluZyBhbmQgY29weSBvdXQgdGhlXG4tICogZGF0YS4gVGhpcyBwcm92aWRlcyBmdW5jdGlvbmFsaXR5IHNpbWlsYXIgdG8gZmlsZW1hcF9yZWFkKCkuXG4tICovXG4tc3RhdGljIHNzaXplX3QgaHVnZXRsYmZzX3JlYWRfaXRlcihzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqdG8pXG4te1xuLVx0c3RydWN0IGZpbGUgKmZpbGUgPSBpb2NiLVx1MDAzZWtpX2ZpbHA7XG4tXHRzdHJ1Y3QgaHN0YXRlICpoID0gaHN0YXRlX2ZpbGUoZmlsZSk7XG4tXHRzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyA9IGZpbGUtXHUwMDNlZl9tYXBwaW5nO1xuLVx0c3RydWN0IGlub2RlICppbm9kZSA9IG1hcHBpbmctXHUwMDNlaG9zdDtcbi1cdHVuc2lnbmVkIGxvbmcgaW5kZXggPSBpb2NiLVx1MDAzZWtpX3BvcyBcdTAwM2VcdTAwM2UgaHVnZV9wYWdlX3NoaWZ0KGgpO1xuLVx0dW5zaWduZWQgbG9uZyBvZmZzZXQgPSBpb2NiLVx1MDAzZWtpX3BvcyBcdTAwMjYgfmh1Z2VfcGFnZV9tYXNrKGgpO1xuLVx0dW5zaWduZWQgbG9uZyBlbmRfaW5kZXg7XG4tXHRsb2ZmX3QgaXNpemU7XG4tXHRzc2l6ZV90IHJldHZhbCA9IDA7XG4tXG4tXHR3aGlsZSAoaW92X2l0ZXJfY291bnQodG8pKSB7XG4tXHRcdHN0cnVjdCBmb2xpbyAqZm9saW87XG4tXHRcdHNpemVfdCBuciwgY29waWVkLCB3YW50O1xuLVxuLVx0XHQvKiBuciBpcyB0aGUgbWF4aW11bSBudW1iZXIgb2YgYnl0ZXMgdG8gY29weSBmcm9tIHRoaXMgcGFnZSAqL1xuLVx0XHRuciA9IGh1Z2VfcGFnZV9zaXplKGgpO1xuLVx0XHRpc2l6ZSA9IGlfc2l6ZV9yZWFkKGlub2RlKTtcbi1cdFx0aWYgKCFpc2l6ZSlcbi1cdFx0XHRicmVhaztcbi1cdFx0ZW5kX2luZGV4ID0gKGlzaXplIC0gMSkgXHUwMDNlXHUwMDNlIGh1Z2VfcGFnZV9zaGlmdChoKTtcbi1cdFx0aWYgKGluZGV4IFx1MDAzZSBlbmRfaW5kZXgpXG4tXHRcdFx0YnJlYWs7XG4tXHRcdGlmIChpbmRleCA9PSBlbmRfaW5kZXgpIHtcbi1cdFx0XHRuciA9ICgoaXNpemUgLSAxKSBcdTAwMjYgfmh1Z2VfcGFnZV9tYXNrKGgpKSAmIzQzOyAxO1xuLVx0XHRcdGlmIChuciBcdTAwM2M9IG9mZnNldClcbi1cdFx0XHRcdGJyZWFrO1xuLVx0XHR9XG4tXHRcdG5yID0gbnIgLSBvZmZzZXQ7XG4tXG4tXHRcdC8qIEZpbmQgdGhlIGZvbGlvICovXG4tXHRcdGZvbGlvID0gZmlsZW1hcF9sb2NrX2h1Z2V0bGJfZm9saW8oaCwgbWFwcGluZywgaW5kZXgpO1xuLVx0XHRpZiAoSVNfRVJSKGZvbGlvKSkge1xuLVx0XHRcdC8qXG4tXHRcdFx0ICogV2UgaGF2ZSBhIEhPTEUsIHplcm8gb3V0IHRoZSB1c2VyLWJ1ZmZlciBmb3IgdGhlXG4tXHRcdFx0ICogbGVuZ3RoIG9mIHRoZSBob2xlIG9yIHJlcXVlc3QuXG4tXHRcdFx0ICovXG4tXHRcdFx0Y29waWVkID0gaW92X2l0ZXJfemVybyhuciwgdG8pO1xuLVx0XHR9IGVsc2Uge1xuLVx0XHRcdGZvbGlvX3VubG9jayhmb2xpbyk7XG4tXG4tXHRcdFx0aWYgKCFmb2xpb190ZXN0X2h3cG9pc29uKGZvbGlvKSlcbi1cdFx0XHRcdHdhbnQgPSBucjtcbi1cdFx0XHRlbHNlIHtcbi1cdFx0XHRcdC8qXG4tXHRcdFx0XHQgKiBBZGp1c3QgaG93IG1hbnkgYnl0ZXMgc2FmZSB0byByZWFkIHdpdGhvdXRcbi1cdFx0XHRcdCAqIHRvdWNoaW5nIHRoZSAxc3QgcmF3IEhXUE9JU09OIHBhZ2UgYWZ0ZXJcbi1cdFx0XHRcdCAqIG9mZnNldC5cbi1cdFx0XHRcdCAqL1xuLVx0XHRcdFx0d2FudCA9IGFkanVzdF9yYW5nZV9od3BvaXNvbihmb2xpbywgb2Zmc2V0LCBucik7XG4tXHRcdFx0XHRpZiAod2FudCA9PSAwKSB7XG4tXHRcdFx0XHRcdGZvbGlvX3B1dChmb2xpbyk7XG4tXHRcdFx0XHRcdHJldHZhbCA9IC1FSU87XG4tXHRcdFx0XHRcdGJyZWFrO1xuLVx0XHRcdFx0fVxuLVx0XHRcdH1cbi1cbi1cdFx0XHQvKlxuLVx0XHRcdCAqIFdlIGhhdmUgdGhlIGZvbGlvLCBjb3B5IGl0IHRvIHVzZXIgc3BhY2UgYnVmZmVyLlxuLVx0XHRcdCAqL1xuLVx0XHRcdGNvcGllZCA9IGNvcHlfZm9saW9fdG9faXRlcihmb2xpbywgb2Zmc2V0LCB3YW50LCB0byk7XG4tXHRcdFx0Zm9saW9fcHV0KGZvbGlvKTtcbi1cdFx0fVxuLVx0XHRvZmZzZXQgJiM0Mzs9IGNvcGllZDtcbi1cdFx0cmV0dmFsICYjNDM7PSBjb3BpZWQ7XG4tXHRcdGlmIChjb3BpZWQgIT0gbnIgXHUwMDI2XHUwMDI2IGlvdl9pdGVyX2NvdW50KHRvKSkge1xuLVx0XHRcdGlmICghcmV0dmFsKVxuLVx0XHRcdFx0cmV0dmFsID0gLUVGQVVMVDtcbi1cdFx0XHRicmVhaztcbi1cdFx0fVxuLVx0XHRpbmRleCAmIzQzOz0gb2Zmc2V0IFx1MDAzZVx1MDAzZSBodWdlX3BhZ2Vfc2hpZnQoaCk7XG4tXHRcdG9mZnNldCBcdTAwMjY9IH5odWdlX3BhZ2VfbWFzayhoKTtcbi1cdH1cbi1cdGlvY2ItXHUwMDNla2lfcG9zID0gKChsb2ZmX3QpaW5kZXggXHUwMDNjXHUwMDNjIGh1Z2VfcGFnZV9zaGlmdChoKSkgJiM0Mzsgb2Zmc2V0O1xuLVx0cmV0dXJuIHJldHZhbDtcbi19XG4tXG4gc3RhdGljIGludCBodWdldGxiZnNfd3JpdGVfYmVnaW4oY29uc3Qgc3RydWN0IGtpb2NiICppb2NiLFxuIFx0XHRcdHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxuIFx0XHRcdGxvZmZfdCBwb3MsIHVuc2lnbmVkIGxlbixcbkBAIC04ODMsNiAmIzQzOzc3NiwxNyBAQCBzdGF0aWMgc3RydWN0IGlub2RlICpodWdldGxiZnNfZ2V0X3Jvb3Qoc3RydWN0IHN1cGVyX2Jsb2NrICpzYixcbiBcdHJldHVybiBpbm9kZTtcbiB9XG4gXG4mIzQzO3N0YXRpYyB2b2lkIGh1Z2V0bGJmc19pbml0X3JlZ3VsYXJfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBoc3RhdGUgKmhzdGF0ZSA9IGhzdGF0ZV9pbm9kZShpbm9kZSk7XG4mIzQzO1x0dW5zaWduZWQgaW50IG9yZGVyID0gaHVnZV9wYWdlX29yZGVyKGhzdGF0ZSk7XG4mIzQzO1xuJiM0MztcdGlub2RlLVx1MDAzZWlfb3AgPSBcdTAwMjZodWdldGxiZnNfaW5vZGVfb3BlcmF0aW9ucztcbiYjNDM7XHRpbm9kZS1cdTAwM2VpX2ZvcCA9IFx1MDAyNmh1Z2V0bGJmc19maWxlX29wZXJhdGlvbnM7XG4mIzQzO1x0bWFwcGluZ19zZXRfZm9saW9fb3JkZXJfcmFuZ2UoaW5vZGUtXHUwMDNlaV9tYXBwaW5nLCBvcmRlciwgb3JkZXIpO1xuJiM0MztcdG1hcHBpbmdfc2V0X2F1dGhvcml0YXRpdmUoaW5vZGUtXHUwMDNlaV9tYXBwaW5nKTtcbiYjNDM7fVxuJiM0MztcbiAvKlxuICAqIEh1Z2V0bGJmcyBpcyBub3QgcmVjbGFpbWFibGU7IHRoZXJlZm9yZSBpdHMgaV9tbWFwX3J3c2VtIHdpbGwgbmV2ZXJcbiAgKiBiZSB0YWtlbiBmcm9tIHJlY2xhaW0gLS0gdW5saWtlIHJlZ3VsYXIgZmlsZXN5c3RlbXMuIFRoaXMgbmVlZHMgYW5cbkBAIC05MjYsOCAmIzQzOzgzMCw3IEBAIHN0YXRpYyBzdHJ1Y3QgaW5vZGUgKmh1Z2V0bGJmc19nZXRfaW5vZGUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYixcbiBcdFx0XHRpbml0X3NwZWNpYWxfaW5vZGUoaW5vZGUsIG1vZGUsIGRldik7XG4gXHRcdFx0YnJlYWs7XG4gXHRcdGNhc2UgU19JRlJFRzpcbi1cdFx0XHRpbm9kZS1cdTAwM2VpX29wID0gXHUwMDI2aHVnZXRsYmZzX2lub2RlX29wZXJhdGlvbnM7XG4tXHRcdFx0aW5vZGUtXHUwMDNlaV9mb3AgPSBcdTAwMjZodWdldGxiZnNfZmlsZV9vcGVyYXRpb25zO1xuJiM0MztcdFx0XHRodWdldGxiZnNfaW5pdF9yZWd1bGFyX2lub2RlKGlub2RlKTtcbiBcdFx0XHRicmVhaztcbiBcdFx0Y2FzZSBTX0lGRElSOlxuIFx0XHRcdGlub2RlLVx1MDAzZWlfb3AgPSBcdTAwMjZodWdldGxiZnNfZGlyX2lub2RlX29wZXJhdGlvbnM7XG5AQCAtMTIwNiw3ICYjNDM7MTEwOSw3IEBAIHN0YXRpYyB2b2lkIGluaXRfb25jZSh2b2lkICpmb28pXG4gfVxuIFxuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGh1Z2V0bGJmc19maWxlX29wZXJhdGlvbnMgPSB7XG4tXHQucmVhZF9pdGVyXHRcdD0gaHVnZXRsYmZzX3JlYWRfaXRlcixcbiYjNDM7XHQucmVhZF9pdGVyXHRcdD0gZ2VuZXJpY19maWxlX3JlYWRfaXRlcixcbiBcdC5tbWFwXHRcdFx0PSBodWdldGxiZnNfZmlsZV9tbWFwLFxuIFx0LmZzeW5jXHRcdFx0PSBub29wX2ZzeW5jLFxuIFx0LmdldF91bm1hcHBlZF9hcmVhXHQ9IGh1Z2V0bGJfZ2V0X3VubWFwcGVkX2FyZWEsXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9odWdldGxiLmggYi9pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaFxuaW5kZXggMmFiYWY5OTMyMWU5MGQuLjE4Nzg2NDJlNzVlYzUxIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9odWdldGxiLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvaHVnZXRsYi5oXG5AQCAtMTY1LDcgJiM0MzsxNjUsNyBAQCBib29sIGh1Z2V0bGJmc19wYWdlY2FjaGVfcHJlc2VudChzdHJ1Y3QgaHN0YXRlICpoLFxuIFx0XHRcdFx0IHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuIFx0XHRcdFx0IHVuc2lnbmVkIGxvbmcgYWRkcmVzcyk7XG4gXG4tc3RydWN0IGFkZHJlc3Nfc3BhY2UgKmh1Z2V0bGJfZm9saW9fbWFwcGluZ19sb2NrX3dyaXRlKHN0cnVjdCBmb2xpbyAqZm9saW8pO1xuJiM0MztzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqaHVnZXRsYl9mb2xpb19tYXBwaW5nX2xvY2tfd3JpdGUoY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbyk7XG4gXG4gZXh0ZXJuIGludCBtb3ZhYmxlX2dpZ2FudGljX3BhZ2VzIF9fcmVhZF9tb3N0bHk7XG4gZXh0ZXJuIGludCBzeXNjdGxfaHVnZXRsYl9zaG1fZ3JvdXAgX19yZWFkX21vc3RseTtcbkBAIC0yOTIsOCAmIzQzOzI5Miw3IEBAIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBodWdldGxiX3RvdGFsX3BhZ2VzKHZvaWQpXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4tc3RhdGljIGlubGluZSBzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqaHVnZXRsYl9mb2xpb19tYXBwaW5nX2xvY2tfd3JpdGUoXG4tXHRcdFx0XHRcdFx0XHRzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuJiM0MztzdGF0aWMgaW5saW5lIHN0cnVjdCBhZGRyZXNzX3NwYWNlICpodWdldGxiX2ZvbGlvX21hcHBpbmdfbG9ja193cml0ZShjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIHtcbiBcdHJldHVybiBOVUxMO1xuIH1cbkBAIC01OTUsOCAmIzQzOzU5NCw4IEBAIGVudW0gaHVnZXRsYl9wYWdlX2ZsYWdzIHtcbiAjaWZkZWYgQ09ORklHX0hVR0VUTEJfUEFHRVxuICNkZWZpbmUgVEVTVEhQQUdFRkxBRyh1bmFtZSwgZmxuYW1lKVx0XHRcdFx0XFxcbiBzdGF0aWMgX19hbHdheXNfaW5saW5lXHRcdFx0XHRcdFx0XFxcbi1ib29sIGZvbGlvX3Rlc3RfaHVnZXRsYl8jI2ZsbmFtZShzdHJ1Y3QgZm9saW8gKmZvbGlvKVx0XHRcXFxuLVx0e1x0dm9pZCAqcHJpdmF0ZSA9IFx1MDAyNmZvbGlvLVx1MDAzZXByaXZhdGU7XHRcdFxcXG4mIzQzO2Jvb2wgZm9saW9fdGVzdF9odWdldGxiXyMjZmxuYW1lKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8pXHRcXFxuJiM0MztcdHtcdGNvbnN0IHZvaWQgKnByaXZhdGUgPSBcdTAwMjZmb2xpby1cdTAwM2Vwcml2YXRlO1x0XHRcXFxuIFx0XHRyZXR1cm4gdGVzdF9iaXQoSFBHXyMjZmxuYW1lLCBwcml2YXRlKTtcdFx0XFxcbiBcdH1cbiBcbkBAIC02MTYsNyAmIzQzOzYxNSw3IEBAIHZvaWQgZm9saW9fY2xlYXJfaHVnZXRsYl8jI2ZsbmFtZShzdHJ1Y3QgZm9saW8gKmZvbGlvKVx0XHRcXFxuICNlbHNlXG4gI2RlZmluZSBURVNUSFBBR0VGTEFHKHVuYW1lLCBmbG5hbWUpXHRcdFx0XHRcXFxuIHN0YXRpYyBpbmxpbmUgYm9vbFx0XHRcdFx0XHRcdFxcXG4tZm9saW9fdGVzdF9odWdldGxiXyMjZmxuYW1lKHN0cnVjdCBmb2xpbyAqZm9saW8pXHRcdFxcXG4mIzQzO2ZvbGlvX3Rlc3RfaHVnZXRsYl8jI2ZsbmFtZShjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVx0XHRcXFxuIFx0eyByZXR1cm4gMDsgfVxuIFxuICNkZWZpbmUgU0VUSFBBR0VGTEFHKHVuYW1lLCBmbG5hbWUpXHRcdFx0XHRcXFxuQEAgLTcyNyw3ICYjNDM7NzI2LDcgQEAgc3RhdGljIGlubGluZSBzdHJ1Y3QgaHVnZXBhZ2Vfc3VicG9vbCAqc3VicG9vbF9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuIFx0cmV0dXJuIEhVR0VUTEJGU19TQihpbm9kZS1cdTAwM2VpX3NiKS1cdTAwM2VzcG9vbDtcbiB9XG4gXG4tc3RhdGljIGlubGluZSBzdHJ1Y3QgaHVnZXBhZ2Vfc3VicG9vbCAqaHVnZXRsYl9mb2xpb19zdWJwb29sKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4mIzQzO3N0YXRpYyBpbmxpbmUgc3RydWN0IGh1Z2VwYWdlX3N1YnBvb2wgKmh1Z2V0bGJfZm9saW9fc3VicG9vbChjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIHtcbiBcdHJldHVybiBmb2xpby1cdTAwM2VfaHVnZXRsYl9zdWJwb29sO1xuIH1cbkBAIC04NTcsNyAmIzQzOzg1Niw3IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBhcmNoX2hhc19odWdlX2Jvb3RtZW1fYWxsb2Modm9pZClcbiB9XG4gI2VuZGlmXG4gXG4tc3RhdGljIGlubGluZSBzdHJ1Y3QgaHN0YXRlICpmb2xpb19oc3RhdGUoc3RydWN0IGZvbGlvICpmb2xpbylcbiYjNDM7c3RhdGljIGlubGluZSBzdHJ1Y3QgaHN0YXRlICpmb2xpb19oc3RhdGUoY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbylcbiB7XG4gXHRWTV9CVUdfT05fRk9MSU8oIWZvbGlvX3Rlc3RfaHVnZXRsYihmb2xpbyksIGZvbGlvKTtcbiBcdHJldHVybiBzaXplX3RvX2hzdGF0ZShmb2xpb19zaXplKGZvbGlvKSk7XG5AQCAtMTA3MCwxMSAmIzQzOzEwNjksNiBAQCB2b2lkIGh1Z2V0bGJfcmVnaXN0ZXJfbm9kZShzdHJ1Y3Qgbm9kZSAqbm9kZSk7XG4gdm9pZCBodWdldGxiX3VucmVnaXN0ZXJfbm9kZShzdHJ1Y3Qgbm9kZSAqbm9kZSk7XG4gI2VuZGlmXG4gXG4tLypcbi0gKiBDaGVjayBpZiBhIGdpdmVuIHJhdyBAcGFnZSBpbiBhIGh1Z2VwYWdlIGlzIEhXUE9JU09OLlxuLSAqL1xuLWJvb2wgaXNfcmF3X2h3cG9pc29uX3BhZ2VfaW5faHVnZXBhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UpO1xuLVxuIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBodWdlX3BhZ2VfbWFza19hbGlnbihzdHJ1Y3QgZmlsZSAqZmlsZSlcbiB7XG4gXHRyZXR1cm4gUEFHRV9NQVNLIFx1MDAyNiB+aHVnZV9wYWdlX21hc2soaHN0YXRlX2ZpbGUoZmlsZSkpO1xuQEAgLTEwODgsNyAmIzQzOzEwODIsNyBAQCBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgaHVnZV9wYWdlX21hc2tfYWxpZ24oc3RydWN0IGZpbGUgKmZpbGUpXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4tc3RhdGljIGlubGluZSBzdHJ1Y3QgaHVnZXBhZ2Vfc3VicG9vbCAqaHVnZXRsYl9mb2xpb19zdWJwb29sKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4mIzQzO3N0YXRpYyBpbmxpbmUgc3RydWN0IGh1Z2VwYWdlX3N1YnBvb2wgKmh1Z2V0bGJfZm9saW9fc3VicG9vbChjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIHtcbiBcdHJldHVybiBOVUxMO1xuIH1cbkBAIC0xMTU3LDcgJiM0MzsxMTUxLDcgQEAgc3RhdGljIGlubGluZSBzdHJ1Y3QgaHN0YXRlICpoc3RhdGVfdm1hKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxuIFx0cmV0dXJuIE5VTEw7XG4gfVxuIFxuLXN0YXRpYyBpbmxpbmUgc3RydWN0IGhzdGF0ZSAqZm9saW9faHN0YXRlKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4mIzQzO3N0YXRpYyBpbmxpbmUgc3RydWN0IGhzdGF0ZSAqZm9saW9faHN0YXRlKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8pXG4ge1xuIFx0cmV0dXJuIE5VTEw7XG4gfVxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbW1fdHlwZXMuaCBiL2luY2x1ZGUvbGludXgvbW1fdHlwZXMuaFxuaW5kZXggYjE4YzJiMmU3ZDJjNjUuLmQ3YTliMGQ4YmJkZmIxIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9tbV90eXBlcy5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L21tX3R5cGVzLmhcbkBAIC0zODcsNyAmIzQzOzM4Nyw3IEBAIHR5cGVkZWYgdW5zaWduZWQgc2hvcnQgbW1faWRfdDtcbiAgKiBAX2h1Z2V0bGJfc3VicG9vbDogRG8gbm90IHVzZSBkaXJlY3RseSwgdXNlIGFjY2Vzc29yIGluIGh1Z2V0bGIuaC5cbiAgKiBAX2h1Z2V0bGJfY2dyb3VwOiBEbyBub3QgdXNlIGRpcmVjdGx5LCB1c2UgYWNjZXNzb3IgaW4gaHVnZXRsYl9jZ3JvdXAuaC5cbiAgKiBAX2h1Z2V0bGJfY2dyb3VwX3JzdmQ6IERvIG5vdCB1c2UgZGlyZWN0bHksIHVzZSBhY2Nlc3NvciBpbiBodWdldGxiX2Nncm91cC5oLlxuLSAqIEBfaHVnZXRsYl9od3BvaXNvbjogRG8gbm90IHVzZSBkaXJlY3RseSwgY2FsbCByYXdfaHdwX2xpc3RfaGVhZCgpLlxuJiM0MzsgKiBAaHVnZXRsYl9od3BvaXNvbjogTGlzdCBvZiBwYWdlcyB3aXRoIGh3cG9pc29uLlxuICAqIEBfZGVmZXJyZWRfbGlzdDogRm9saW9zIHRvIGJlIHNwbGl0IHVuZGVyIG1lbW9yeSBwcmVzc3VyZS5cbiAgKiBAX3VudXNlZF9zbGFiX29ial9leHRzOiBQbGFjZWhvbGRlciB0byBtYXRjaCBvYmpfZXh0cyBpbiBzdHJ1Y3Qgc2xhYi5cbiAgKlxuQEAgLTQ5OSw3ICYjNDM7NDk5LDcgQEAgc3RydWN0IGZvbGlvIHtcbiBcdFx0XHR2b2lkICpfaHVnZXRsYl9zdWJwb29sO1xuIFx0XHRcdHZvaWQgKl9odWdldGxiX2Nncm91cDtcbiBcdFx0XHR2b2lkICpfaHVnZXRsYl9jZ3JvdXBfcnN2ZDtcbi1cdFx0XHR2b2lkICpfaHVnZXRsYl9od3BvaXNvbjtcbiYjNDM7XHRcdFx0c3RydWN0IGxsaXN0X2hlYWQgaHVnZXRsYl9od3BvaXNvbjtcbiBcdC8qIHByaXZhdGU6IHRoZSB1bmlvbiB3aXRoIHN0cnVjdCBwYWdlIGlzIHRyYW5zaXRpb25hbCAqL1xuIFx0XHR9O1xuIFx0XHRzdHJ1Y3QgcGFnZSBfX3BhZ2VfMztcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaCBiL2luY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oXG5pbmRleCA3MjIzZjZmNGUyYjQwMy4uYjE0NmM1MjI4NzQxYzAgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmhcbkBAIC04OTMsMTQgJiM0Mzs4OTMsMTkgQEAgc3RhdGljIGlubGluZSBpbnQgUGFnZVRyYW5zQ29tcG91bmQoY29uc3Qgc3RydWN0IHBhZ2UgKnBhZ2UpXG4gVEVTVFBBR0VGTEFHX0ZBTFNFKFRyYW5zQ29tcG91bmQsIHRyYW5zY29tcG91bmQpXG4gI2VuZGlmXG4gXG4tI2lmIGRlZmluZWQoQ09ORklHX01FTU9SWV9GQUlMVVJFKSBcdTAwMjZcdTAwMjYgZGVmaW5lZChDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UpXG4mIzQzOyNpZiBkZWZpbmVkKENPTkZJR19NRU1PUllfRkFJTFVSRSkgXHUwMDI2XHUwMDI2IGRlZmluZWQoQ09ORklHX0xBUkdFX0ZPTElPKVxuIC8qXG4tICogUGFnZUhhc0hXUG9pc29uZWQgaW5kaWNhdGVzIHRoYXQgYXQgbGVhc3Qgb25lIHN1YnBhZ2UgaXMgaHdwb2lzb25lZCBpbiB0aGVcbi0gKiBjb21wb3VuZCBwYWdlLlxuJiM0MzsgKiBmb2xpb19oYXNfaHdwb2lzb25lZCBpbmRpY2F0ZXMgdGhhdCBhdCBsZWFzdCBvbmUgcGFnZSBpcyBod3BvaXNvbmVkIGluIHRoZVxuJiM0MzsgKiBmb2xpby4gIFRoYXQgcGFnZSB3aWxsIHVzdWFsbHkgYWxzbyBoYXZlIHRoZSBIV1BvaXNvbiBmbGFnIHNldCwgYnV0IHRoaXNcbiYjNDM7ICogaXMgbm90IHBvc3NpYmxlIGZvciBmb2xpb3Mgd2hpY2ggaGF2ZSBIVk8gKHNlZSBtZW1vcnktZmFpbHVyZSBmb3IgdGhlXG4mIzQzOyAqIHNjaGVtZSB1c2VkIGluIHRoYXQgY2FzZSkuICBZb3UgcHJvYmFibHkgZG9uJiMzOTt0IHdhbnQgdG8gY2FsbCB0aGlzIGRpcmVjdGx5O1xuJiM0MzsgKiB1c2UgZm9saW9faGFzX2h3cG9pc29uZWRfcGFnZSgpIGluc3RlYWQuXG4gICpcbiAgKiBUaGlzIGZsYWcgaXMgc2V0IGJ5IGh3cG9pc29uIGhhbmRsZXIuICBDbGVhcmVkIGJ5IFRIUCBzcGxpdCBvciBmcmVlIHBhZ2UuXG4gICovXG4gRk9MSU9fRkxBRyhoYXNfaHdwb2lzb25lZCwgRk9MSU9fU0VDT05EX1BBR0UpXG4mIzQzO0ZPTElPX1RFU1RfU0VUX0ZMQUcoaGFzX2h3cG9pc29uZWQsIEZPTElPX1NFQ09ORF9QQUdFKVxuJiM0MztGT0xJT19URVNUX0NMRUFSX0ZMQUcoaGFzX2h3cG9pc29uZWQsIEZPTElPX1NFQ09ORF9QQUdFKVxuICNlbHNlXG4gRk9MSU9fRkxBR19GQUxTRShoYXNfaHdwb2lzb25lZClcbiAjZW5kaWZcbkBAIC0xMDQxLDggJiM0MzsxMDQ2LDI1IEBAIFBBR0VfVFlQRV9PUFMoU2xhYiwgc2xhYiwgc2xhYilcbiBcbiAjaWZkZWYgQ09ORklHX0hVR0VUTEJfUEFHRVxuIEZPTElPX1RZUEVfT1BTKGh1Z2V0bGIsIGh1Z2V0bGIpXG4mIzQzO1xuJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgZm9saW9fdGVzdF9odWdlX3BvaXNvbihjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIChSRUFEX09OQ0UoZm9saW8tXHUwMDNlcGFnZS5wYWdlX3R5cGUpIFx1MDAzZVx1MDAzZSAyMykgPT1cbiYjNDM7XHRcdCgoUEdUWV9odWdldGxiIFx1MDAzY1x1MDAzYyAxKSB8IDEpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgZm9saW9fc2V0X2h1Z2VfcG9pc29uKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4mIzQzO3tcbiYjNDM7XHRmb2xpby1cdTAwM2VwYWdlLnBhZ2VfdHlwZSB8PSAoMSBcdTAwM2NcdTAwM2MgMjMpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgZm9saW9fY2xlYXJfaHVnZV9wb2lzb24oc3RydWN0IGZvbGlvICpmb2xpbylcbiYjNDM7e1xuJiM0MztcdGZvbGlvLVx1MDAzZXBhZ2UucGFnZV90eXBlIFx1MDAyNj0gfigxIFx1MDAzY1x1MDAzYyAyMyk7XG4mIzQzO31cbiAjZWxzZVxuIEZPTElPX1RFU1RfRkxBR19GQUxTRShodWdldGxiKVxuJiM0MztGT0xJT19URVNUX0ZMQUdfRkFMU0UoaHVnZV9wb2lzb24pXG4gI2VuZGlmXG4gXG4gUEFHRV9UWVBFX09QUyhac21hbGxvYywgenNtYWxsb2MsIHpzbWFsbG9jKVxuQEAgLTEwNjgsMTAgJiM0MzsxMDkwLDE0IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBQYWdlSHVnZShjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSlcbiBcdHJldHVybiBmb2xpb190ZXN0X2h1Z2V0bGIocGFnZV9mb2xpbyhwYWdlKSk7XG4gfVxuIFxuJiM0Mztib29sIGh1Z2V0bGJfcGFnZV9od3BvaXNvbihjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvLCBjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSk7XG4mIzQzO2Jvb2wgaHVnZXRsYl91bnJlZl9wYWdlX2h3cG9pc29uKGNvbnN0IHN0cnVjdCBwYWdlICpwYWdlKTtcbiYjNDM7XG4gLypcbi0gKiBDaGVjayBpZiBhIHBhZ2UgaXMgY3VycmVudGx5IG1hcmtlZCBIV1BvaXNvbmVkLiBOb3RlIHRoYXQgdGhpcyBjaGVjayBpc1xuLSAqIGJlc3QgZWZmb3J0IG9ubHkgYW5kIGluaGVyZW50bHkgcmFjeTogdGhlcmUgaXMgbm8gd2F5IHRvIHN5bmNocm9uaXplIHdpdGhcbi0gKiBmYWlsaW5nIGhhcmR3YXJlLlxuJiM0MzsgKiBDaGVjayBpZiBhIHBhZ2UgaXMgY3VycmVudGx5IG1hcmtlZCBIV1BvaXNvbmVkLiAgVGhpcyBjaGVjayBpcyBiZXN0XG4mIzQzOyAqIGVmZm9ydCBvbmx5IGFuZCBpbmhlcmVudGx5IHJhY3k6IHRoZXJlIGlzIG5vIHdheSB0byBzeW5jaHJvbml6ZSB3aXRoXG4mIzQzOyAqIGZhaWxpbmcgaGFyZHdhcmUuICBUaGUgY2FsbGVyIG1heSBub3QgaGF2ZSBhIHJlZmNvdW50IG9uIHRoZSBmb2xpb1xuJiM0MzsgKiBjb250YWluaW5nIHRoZSBwYWdlLCBzbyB3ZSBtdXN0IGJlIGNhcmVmdWwgdG8gbm90IHRyaXAgYW55IGFzc2VydGlvbnMuXG4gICovXG4gc3RhdGljIGlubGluZSBib29sIGlzX3BhZ2VfaHdwb2lzb24oY29uc3Qgc3RydWN0IHBhZ2UgKnBhZ2UpXG4ge1xuQEAgLTEwODAsMTMgJiM0MzsxMTA2LDI2IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBpc19wYWdlX2h3cG9pc29uKGNvbnN0IHN0cnVjdCBwYWdlICpwYWdlKVxuIFx0aWYgKFBhZ2VIV1BvaXNvbihwYWdlKSlcbiBcdFx0cmV0dXJuIHRydWU7XG4gXHRmb2xpbyA9IHBhZ2VfZm9saW8ocGFnZSk7XG4tXHRyZXR1cm4gZm9saW9fdGVzdF9odWdldGxiKGZvbGlvKSBcdTAwMjZcdTAwMjYgUGFnZUhXUG9pc29uKFx1MDAyNmZvbGlvLVx1MDAzZXBhZ2UpO1xuJiM0MztcdGlmIChmb2xpb190ZXN0X2h1Z2VfcG9pc29uKGZvbGlvKSlcbiYjNDM7XHRcdHJldHVybiBodWdldGxiX3VucmVmX3BhZ2VfaHdwb2lzb24ocGFnZSk7XG4mIzQzO1x0LyogSW4gY2FzZSB3ZSByYWNlZCB3aXRoIGh1Z2V0bGIgdHJhbnNmZXJyaW5nIGZsYWdzICovXG4mIzQzO1x0cmV0dXJuIFBhZ2VIV1BvaXNvbihwYWdlKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGlubGluZSBib29sIGlzX3JlZl9wYWdlX2h3cG9pc29uKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8sXG4mIzQzO1x0XHRjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSlcbiYjNDM7e1xuJiM0MztcdGlmIChQYWdlSFdQb2lzb24ocGFnZSkpXG4mIzQzO1x0XHRyZXR1cm4gdHJ1ZTtcbiYjNDM7XHRpZiAoZm9saW9fdGVzdF9odWdldGxiKGZvbGlvKSlcbiYjNDM7XHRcdHJldHVybiBodWdldGxiX3BhZ2VfaHdwb2lzb24oZm9saW8sIHBhZ2UpO1xuJiM0MztcdHJldHVybiBmYWxzZTtcbiB9XG4gXG4tc3RhdGljIGlubGluZSBib29sIGZvbGlvX2NvbnRhaW5faHdwb2lzb25lZF9wYWdlKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4mIzQzO3N0YXRpYyBpbmxpbmUgYm9vbCBmb2xpb19oYXNfaHdwb2lzb25lZF9wYWdlKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8pXG4ge1xuLVx0cmV0dXJuIGZvbGlvX3Rlc3RfaHdwb2lzb24oZm9saW8pIHx8XG4tXHQgICAgKGZvbGlvX3Rlc3RfbGFyZ2UoZm9saW8pIFx1MDAyNlx1MDAyNiBmb2xpb190ZXN0X2hhc19od3BvaXNvbmVkKGZvbGlvKSk7XG4mIzQzO1x0cmV0dXJuIFBhZ2VIV1BvaXNvbihcdTAwMjZmb2xpby1cdTAwM2VwYWdlKSB8fFxuJiM0MztcdCAgICAgICAoZm9saW9fdGVzdF9sYXJnZShmb2xpbykgXHUwMDI2XHUwMDI2IGZvbGlvX3Rlc3RfaGFzX2h3cG9pc29uZWQoZm9saW8pKTtcbiB9XG4gXG4gYm9vbCBpc19mcmVlX2J1ZGR5X3BhZ2UoY29uc3Qgc3RydWN0IHBhZ2UgKnBhZ2UpO1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGFnZW1hcC5oIGIvaW5jbHVkZS9saW51eC9wYWdlbWFwLmhcbmluZGV4IDJjMzcxOGQ1OTJkNmRkLi42ZmRlZTViMDM2MjFiOSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvcGFnZW1hcC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L3BhZ2VtYXAuaFxuQEAgLTIxMCw2ICYjNDM7MjEwLDcgQEAgZW51bSBtYXBwaW5nX2ZsYWdzIHtcbiBcdEFTX1dSSVRFQkFDS19NQVlfREVBRExPQ0tfT05fUkVDTEFJTSA9IDksXG4gXHRBU19LRVJORUxfRklMRSA9IDEwLFx0LyogbWFwcGluZyBmb3IgYSBmYWtlIGtlcm5lbCBmaWxlIHRoYXQgc2hvdWxkbiYjMzk7dFxuIFx0XHRcdFx0ICAgYWNjb3VudCB1c2FnZSB0byB1c2VyIGNncm91cHMgKi9cbiYjNDM7XHRBU19BVVRIT1JJVEFUSVZFID0gMTEsXHQvKiBJZiB3ZSBtaXNzIGluIHRoZSBwYWdlIGNhY2hlLCBpdCYjMzk7cyBhIGhvbGUgKi9cbiBcdC8qIEJpdHMgMTYtMjUgYXJlIHVzZWQgZm9yIEZPTElPX09SREVSICovXG4gXHRBU19GT0xJT19PUkRFUl9CSVRTID0gNSxcbiBcdEFTX0ZPTElPX09SREVSX01JTiA9IDE2LFxuQEAgLTM0NSw2ICYjNDM7MzQ2LDE2IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBtYXBwaW5nX3dyaXRlYmFja19tYXlfZGVhZGxvY2tfb25fcmVjbGFpbShjb25zdCBzdHJ1Y3QgYWRkcmVzXG4gXHRyZXR1cm4gdGVzdF9iaXQoQVNfV1JJVEVCQUNLX01BWV9ERUFETE9DS19PTl9SRUNMQUlNLCBcdTAwMjZtYXBwaW5nLVx1MDAzZWZsYWdzKTtcbiB9XG4gXG4mIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBtYXBwaW5nX3NldF9hdXRob3JpdGF0aXZlKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nKVxuJiM0Mzt7XG4mIzQzO1x0c2V0X2JpdChBU19BVVRIT1JJVEFUSVZFLCBcdTAwMjZtYXBwaW5nLVx1MDAzZWZsYWdzKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGlubGluZSBib29sIG1hcHBpbmdfaXNfYXV0aG9yaXRhdGl2ZShjb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZylcbiYjNDM7e1xuJiM0MztcdHJldHVybiB0ZXN0X2JpdChBU19BVVRIT1JJVEFUSVZFLCBcdTAwMjZtYXBwaW5nLVx1MDAzZWZsYWdzKTtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgaW5saW5lIGdmcF90IG1hcHBpbmdfZ2ZwX21hc2soY29uc3Qgc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcpXG4ge1xuIFx0cmV0dXJuIG1hcHBpbmctXHUwMDNlZ2ZwX21hc2s7XG5AQCAtMzczLDcgJiM0MzszODQsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgbWFwcGluZ19zZXRfZ2ZwX21hc2soc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm0sIGdmcF90IG1hc2spXG4gICogYXNzdW1wdGlvbnMgYWJvdXQgbWF4aW11bSBvcmRlciBpZiBUSFAgYXJlIGRpc2FibGVkLCBidXQgOCBzZWVtcyBsaWtlXG4gICogYSBnb29kIG9yZGVyICh0aGF0JiMzOTtzIDFNQiBpZiB5b3UmIzM5O3JlIHVzaW5nIDRrQiBwYWdlcylcbiAgKi9cbi0jaWZkZWYgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFXG4mIzQzOyNpZmRlZiBDT05GSUdfRklMRU1BUF9MQVJHRV9GT0xJT1xuICNkZWZpbmUgUFJFRkVSUkVEX01BWF9QQUdFQ0FDSEVfT1JERVJcdEhQQUdFX1BNRF9PUkRFUlxuICNlbHNlXG4gI2RlZmluZSBQUkVGRVJSRURfTUFYX1BBR0VDQUNIRV9PUkRFUlx0OFxuQEAgLTM5NCw3ICYjNDM7NDA1LDcgQEAgc3RhdGljIGlubGluZSB2b2lkIG1hcHBpbmdfc2V0X2dmcF9tYXNrKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptLCBnZnBfdCBtYXNrKVxuICAqL1xuIHN0YXRpYyBpbmxpbmUgc2l6ZV90IG1hcHBpbmdfbWF4X2ZvbGlvX3NpemVfc3VwcG9ydGVkKHZvaWQpXG4ge1xuLVx0aWYgKElTX0VOQUJMRUQoQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFKSlcbiYjNDM7XHRpZiAoSVNfRU5BQkxFRChDT05GSUdfRklMRU1BUF9MQVJHRV9GT0xJTykpXG4gXHRcdHJldHVybiAxVSBcdTAwM2NcdTAwM2MgKFBBR0VfU0hJRlQgJiM0MzsgTUFYX1BBR0VDQUNIRV9PUkRFUik7XG4gXHRyZXR1cm4gUEFHRV9TSVpFO1xuIH1cbkBAIC00MDUsMjkgJiM0Mzs0MTYsMjMgQEAgc3RhdGljIGlubGluZSBzaXplX3QgbWFwcGluZ19tYXhfZm9saW9fc2l6ZV9zdXBwb3J0ZWQodm9pZClcbiAgKiBAbWluOiBNaW5pbXVtIGZvbGlvIG9yZGVyIChiZXR3ZWVuIDAtTUFYX1BBR0VDQUNIRV9PUkRFUiBpbmNsdXNpdmUpLlxuICAqIEBtYXg6IE1heGltdW0gZm9saW8gb3JkZXIgKGJldHdlZW4gQG1pbi1NQVhfUEFHRUNBQ0hFX09SREVSIGluY2x1c2l2ZSkuXG4gICpcbi0gKiBUaGUgZmlsZXN5c3RlbSBzaG91bGQgY2FsbCB0aGlzIGZ1bmN0aW9uIGluIGl0cyBpbm9kZSBjb25zdHJ1Y3RvciB0b1xuLSAqIGluZGljYXRlIHdoaWNoIGJhc2Ugc2l6ZSAobWluKSBhbmQgbWF4aW11bSBzaXplIChtYXgpIG9mIGZvbGlvIHRoZSBWRlNcbi0gKiBjYW4gdXNlIHRvIGNhY2hlIHRoZSBjb250ZW50cyBvZiB0aGUgZmlsZS4gIFRoaXMgc2hvdWxkIG9ubHkgYmUgdXNlZFxuLSAqIGlmIHRoZSBmaWxlc3lzdGVtIG5lZWRzIHNwZWNpYWwgaGFuZGxpbmcgb2YgZm9saW8gc2l6ZXMgKGllIHRoZXJlIGlzXG4tICogc29tZXRoaW5nIHRoZSBjb3JlIGNhbm5vdCBrbm93KS5cbiYjNDM7ICogVGhlIGZpbGVzeXN0ZW0gc2hvdWxkIGNhbGwgdGhpcyBmdW5jdGlvbiBpbiBpdHMgaW5vZGUgY29uc3RydWN0b3JcbiYjNDM7ICogdG8gaW5kaWNhdGUgd2hpY2ggc2l6ZSBmb2xpb3MgY2FuIGJlIHVzZWQgdG8gY2FjaGUgdGhlIGNvbnRlbnRzIG9mXG4mIzQzOyAqIHRoZSBpbm9kZS4gIFRoaXMgc2hvdWxkIG9ubHkgYmUgdXNlZCBpZiB0aGUgZmlsZXN5c3RlbSBuZWVkcyBzcGVjaWFsXG4mIzQzOyAqIGhhbmRsaW5nIG9mIGZvbGlvIHNpemVzIChpZSB0aGVyZSBpcyBzb21ldGhpbmcgdGhlIGNvcmUgY2Fubm90IGtub3cpLlxuICAqIERvIG5vdCB0dW5lIGl0IGJhc2VkIG9uLCBlZywgaV9zaXplLlxuICAqXG4mIzQzOyAqIGh1Z2V0bGIgY2FsbHMgdGhpcyB3aXRoIG9yZGVycyBsYXJnZXIgdGhhbiBNQVhfUEFHRUNBQ0hFX09SREVSLlxuJiM0MzsgKiBOb3JtYWwgZmlsZXN5c3RlbXMgc2hvdWxkIG5vdCBkbyB0aGlzLlxuJiM0MzsgKlxuICAqIENvbnRleHQ6IFRoaXMgc2hvdWxkIG5vdCBiZSBjYWxsZWQgd2hpbGUgdGhlIGlub2RlIGlzIGFjdGl2ZSBhcyBpdFxuICAqIGlzIG5vbi1hdG9taWMuXG4gICovXG4gc3RhdGljIGlubGluZSB2b2lkIG1hcHBpbmdfc2V0X2ZvbGlvX29yZGVyX3JhbmdlKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxuLVx0XHRcdFx0XHRcdCB1bnNpZ25lZCBpbnQgbWluLFxuLVx0XHRcdFx0XHRcdCB1bnNpZ25lZCBpbnQgbWF4KVxuJiM0MztcdFx0dW5zaWduZWQgaW50IG1pbiwgdW5zaWduZWQgaW50IG1heClcbiB7XG4tXHRpZiAoIUlTX0VOQUJMRUQoQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFKSlcbiYjNDM7XHRpZiAoIUlTX0VOQUJMRUQoQ09ORklHX0ZJTEVNQVBfTEFSR0VfRk9MSU8pKVxuIFx0XHRyZXR1cm47XG4tXG4tXHRpZiAobWluIFx1MDAzZSBNQVhfUEFHRUNBQ0hFX09SREVSKVxuLVx0XHRtaW4gPSBNQVhfUEFHRUNBQ0hFX09SREVSO1xuLVxuLVx0aWYgKG1heCBcdTAwM2UgTUFYX1BBR0VDQUNIRV9PUkRFUilcbi1cdFx0bWF4ID0gTUFYX1BBR0VDQUNIRV9PUkRFUjtcbi1cbiBcdGlmIChtYXggXHUwMDNjIG1pbilcbiBcdFx0bWF4ID0gbWluO1xuIFxuQEAgLTQ2MCw3ICYjNDM7NDY1LDcgQEAgc3RhdGljIGlubGluZSB2b2lkIG1hcHBpbmdfc2V0X2xhcmdlX2ZvbGlvcyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZylcbiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludFxuIG1hcHBpbmdfbWF4X2ZvbGlvX29yZGVyKGNvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nKVxuIHtcbi1cdGlmICghSVNfRU5BQkxFRChDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UpKVxuJiM0MztcdGlmICghSVNfRU5BQkxFRChDT05GSUdfRklMRU1BUF9MQVJHRV9GT0xJTykpXG4gXHRcdHJldHVybiAwO1xuIFx0cmV0dXJuIChtYXBwaW5nLVx1MDAzZWZsYWdzIFx1MDAyNiBBU19GT0xJT19PUkRFUl9NQVhfTUFTSykgXHUwMDNlXHUwMDNlIEFTX0ZPTElPX09SREVSX01BWDtcbiB9XG5AQCAtNDY4LDcgJiM0Mzs0NzMsNyBAQCBtYXBwaW5nX21heF9mb2xpb19vcmRlcihjb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZylcbiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludFxuIG1hcHBpbmdfbWluX2ZvbGlvX29yZGVyKGNvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nKVxuIHtcbi1cdGlmICghSVNfRU5BQkxFRChDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UpKVxuJiM0MztcdGlmICghSVNfRU5BQkxFRChDT05GSUdfRklMRU1BUF9MQVJHRV9GT0xJTykpXG4gXHRcdHJldHVybiAwO1xuIFx0cmV0dXJuIChtYXBwaW5nLVx1MDAzZWZsYWdzIFx1MDAyNiBBU19GT0xJT19PUkRFUl9NSU5fTUFTSykgXHUwMDNlXHUwMDNlIEFTX0ZPTElPX09SREVSX01JTjtcbiB9XG5AQCAtNTI0LDcgJiM0Mzs1MjksNyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgbWFwcGluZ19sYXJnZV9mb2xpb19zdXBwb3J0KGNvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaVxuICAqXG4gICogUmV0dXJuOiBUcnVlIGlmIFBNRC1zaXplZCBmb2xpb3MgYXJlIHN1cHBvcnRlZCwgb3RoZXJ3aXNlIGZhbHNlLlxuICAqL1xuLSNpZmRlZiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VcbiYjNDM7I2lmZGVmIENPTkZJR19GSUxFTUFQX0xBUkdFX0ZPTElPXG4gc3RhdGljIGlubGluZSBib29sIG1hcHBpbmdfcG1kX2ZvbGlvX3N1cHBvcnQoY29uc3Qgc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcpXG4ge1xuIFx0LyogQVNfRk9MSU9fT1JERVIgaXMgb25seSByZWFzb25hYmxlIGZvciBwYWdlY2FjaGUgZm9saW9zICovXG5kaWZmIC0tZ2l0IGEvbW0vS2NvbmZpZyBiL21tL0tjb25maWdcbmluZGV4IDllMGNhNDgyNDkwNTRmLi5lNjY2ZGQxNGNhMGMzZCAxMDA2NDRcbi0tLSBhL21tL0tjb25maWdcbiYjNDM7JiM0MzsmIzQzOyBiL21tL0tjb25maWdcbkBAIC04NDMsMTEgJiM0Mzs4NDMsMTUgQEAgY29uZmlnIFBFUlNJU1RFTlRfSFVHRV9aRVJPX0ZPTElPXG4gY29uZmlnIE1NX0lEXG4gXHRkZWZfYm9vbCBuXG4gXG4mIzQzO2NvbmZpZyBMQVJHRV9GT0xJT1xuJiM0MztcdGRlZl9ib29sIG5cbiYjNDM7XHRzZWxlY3QgWEFSUkFZX01VTFRJXG4mIzQzO1xuIG1lbnVjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VcbiBcdGJvb2wgXCYjMzQ7VHJhbnNwYXJlbnQgSHVnZXBhZ2UgU3VwcG9ydFwmIzM0O1xuIFx0ZGVwZW5kcyBvbiBIQVZFX0FSQ0hfVFJBTlNQQVJFTlRfSFVHRVBBR0UgXHUwMDI2XHUwMDI2ICFQUkVFTVBUX1JUXG4gXHRzZWxlY3QgQ09NUEFDVElPTlxuLVx0c2VsZWN0IFhBUlJBWV9NVUxUSVxuJiM0MztcdHNlbGVjdCBMQVJHRV9GT0xJT1xuIFx0c2VsZWN0IE1NX0lEXG4gXHRoZWxwXG4gXHQgIFRyYW5zcGFyZW50IEh1Z2VwYWdlcyBhbGxvd3MgdGhlIGtlcm5lbCB0byB1c2UgaHVnZSBwYWdlcyBhbmRcbmRpZmYgLS1naXQgYS9tbS9maWxlbWFwLmMgYi9tbS9maWxlbWFwLmNcbmluZGV4IDU4ZWI5ZDI0MDY0MzQ4Li41YThjYzIwZTYyNGU0ZCAxMDA2NDRcbi0tLSBhL21tL2ZpbGVtYXAuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vZmlsZW1hcC5jXG5AQCAtMjQ4Myw2ICYjNDM7MjQ4Myw4IEBAIHN0YXRpYyB2b2lkIGZpbGVtYXBfZ2V0X3JlYWRfYmF0Y2goc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXG4gXG4gXHRcdGlmICghZm9saW9fYmF0Y2hfYWRkKGZiYXRjaCwgZm9saW8pKVxuIFx0XHRcdGJyZWFrO1xuJiM0MztcdFx0aWYgKGZvbGlvX2hhc19od3BvaXNvbmVkX3BhZ2UoZm9saW8pKVxuJiM0MztcdFx0XHRicmVhaztcbiBcdFx0aWYgKCFmb2xpb190ZXN0X3VwdG9kYXRlKGZvbGlvKSlcbiBcdFx0XHRicmVhaztcbiBcdFx0aWYgKGZvbGlvX3Rlc3RfcmVhZGFoZWFkKGZvbGlvKSlcbkBAIC0yNjk1LDYgJiM0MzsyNjk3LDggQEAgc3RhdGljIGludCBmaWxlbWFwX2dldF9wYWdlcyhzdHJ1Y3Qga2lvY2IgKmlvY2IsIHNpemVfdCBjb3VudCxcbiBcdGlmICghZm9saW9fYmF0Y2hfY291bnQoZmJhdGNoKSkge1xuIFx0XHRERUZJTkVfUkVBREFIRUFEKHJhY3RsLCBmaWxwLCBcdTAwMjZmaWxwLVx1MDAzZWZfcmEsIG1hcHBpbmcsIGluZGV4KTtcbiBcbiYjNDM7XHRcdGlmIChtYXBwaW5nX2lzX2F1dGhvcml0YXRpdmUobWFwcGluZykpXG4mIzQzO1x0XHRcdHJldHVybiAwO1xuIFx0XHRpZiAoaW9jYi1cdTAwM2VraV9mbGFncyBcdTAwMjYgSU9DQl9OT0lPKVxuIFx0XHRcdHJldHVybiAtRUFHQUlOO1xuIFx0XHRpZiAoaW9jYi1cdTAwM2VraV9mbGFncyBcdTAwMjYgSU9DQl9OT1dBSVQpXG5AQCAtMjc0OSw2ICYjNDM7Mjc1MywyOSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgcG9zX3NhbWVfZm9saW8obG9mZl90IHBvczEsIGxvZmZfdCBwb3MyLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIFx0cmV0dXJuIChwb3MxIFx1MDAzZVx1MDAzZSBzaGlmdCA9PSBwb3MyIFx1MDAzZVx1MDAzZSBzaGlmdCk7XG4gfVxuIFxuJiM0MztzdGF0aWMgc2l6ZV90IGFkanVzdF9yYW5nZV9od3BvaXNvbihjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzaXplX3Qgb2Zmc2V0LFxuJiM0MztcdFx0c2l6ZV90IGJ5dGVzKVxuJiM0Mzt7XG4mIzQzO1x0Y29uc3Qgc3RydWN0IHBhZ2UgKnBhZ2UgPSBmb2xpb19wYWdlKGZvbGlvLCBvZmZzZXQgLyBQQUdFX1NJWkUpO1xuJiM0MztcdHNpemVfdCBzYWZlX2J5dGVzO1xuJiM0MztcbiYjNDM7XHRpZiAoIWZvbGlvX2hhc19od3BvaXNvbmVkX3BhZ2UoZm9saW8pKVxuJiM0MztcdFx0cmV0dXJuIGJ5dGVzO1xuJiM0MztcdGlmIChpc19yZWZfcGFnZV9od3BvaXNvbihmb2xpbywgcGFnZSkpXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO1x0LyogU2FmZSB0byByZWFkIHRoZSByZW1haW5pbmcgYnl0ZXMgaW4gdGhpcyBwYWdlLiAqL1xuJiM0MztcdHNhZmVfYnl0ZXMgPSBQQUdFX1NJWkUgLSAob2Zmc2V0ICUgUEFHRV9TSVpFKTtcbiYjNDM7XHRwYWdlJiM0MzsmIzQzOztcbiYjNDM7XG4mIzQzO1x0LyogQ2hlY2sgZWFjaCByZW1haW5pbmcgcGFnZSBhcyBsb25nIGFzIHdlIGFyZSBub3QgZG9uZSB5ZXQuICovXG4mIzQzO1x0Zm9yICg7IHNhZmVfYnl0ZXMgXHUwMDNjIGJ5dGVzOyBzYWZlX2J5dGVzICYjNDM7PSBQQUdFX1NJWkUsIHBhZ2UmIzQzOyYjNDM7KVxuJiM0MztcdFx0aWYgKGlzX3JlZl9wYWdlX2h3cG9pc29uKGZvbGlvLCBwYWdlKSlcbiYjNDM7XHRcdFx0YnJlYWs7XG4mIzQzO1xuJiM0MztcdHJldHVybiBtaW4oc2FmZV9ieXRlcywgYnl0ZXMpO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyB2b2lkIGZpbGVtYXBfZW5kX2Ryb3BiZWhpbmRfcmVhZChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIHtcbiBcdGlmICghZm9saW9fdGVzdF9kcm9wYmVoaW5kKGZvbGlvKSlcbkBAIC0yODI4LDYgJiM0MzsyODU1LDIyIEBAIHNzaXplX3QgZmlsZW1hcF9yZWFkKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICppdGVyLFxuIFx0XHRcdGdvdG8gcHV0X2ZvbGlvcztcbiBcdFx0ZW5kX29mZnNldCA9IG1pbl90KGxvZmZfdCwgaXNpemUsIGlvY2ItXHUwMDNla2lfcG9zICYjNDM7IGl0ZXItXHUwMDNlY291bnQpO1xuIFxuJiM0MztcdFx0aWYgKCFmb2xpb19iYXRjaF9jb3VudChcdTAwMjZmYmF0Y2gpKSB7XG4mIzQzO1x0XHRcdHNpemVfdCBmc2l6ZSA9IG1hcHBpbmdfbWluX2ZvbGlvX25yYnl0ZXMobWFwcGluZyk7XG4mIzQzO1x0XHRcdHNpemVfdCBvZmZzZXQgPSBpb2NiLVx1MDAzZWtpX3BvcyBcdTAwMjYgKGZzaXplIC0gMSk7XG4mIzQzO1x0XHRcdHNpemVfdCBieXRlcyA9IG1pbl90KGxvZmZfdCwgZW5kX29mZnNldCAtIGlvY2ItXHUwMDNla2lfcG9zLFxuJiM0MztcdFx0XHRcdFx0ICAgICBmc2l6ZSAtIG9mZnNldCk7XG4mIzQzO1x0XHRcdHNpemVfdCBjb3BpZWQgPSBpb3ZfaXRlcl96ZXJvKGJ5dGVzLCBpdGVyKTtcbiYjNDM7XG4mIzQzO1x0XHRcdGFscmVhZHlfcmVhZCAmIzQzOz0gY29waWVkO1xuJiM0MztcdFx0XHRpb2NiLVx1MDAzZWtpX3BvcyAmIzQzOz0gY29waWVkO1xuJiM0MztcdFx0XHRsYXN0X3BvcyA9IGlvY2ItXHUwMDNla2lfcG9zO1xuJiM0MztcbiYjNDM7XHRcdFx0aWYgKGNvcGllZCBcdTAwM2MgYnl0ZXMpXG4mIzQzO1x0XHRcdFx0ZXJyb3IgPSAtRUZBVUxUO1xuJiM0MztcdFx0XHRjb250aW51ZTtcbiYjNDM7XHRcdH1cbiYjNDM7XG4gXHRcdC8qXG4gXHRcdCAqIE9uY2Ugd2Ugc3RhcnQgY29weWluZyBkYXRhLCB3ZSBkb24mIzM5O3Qgd2FudCB0byBiZSB0b3VjaGluZyBhbnlcbiBcdFx0ICogY2FjaGVsaW5lcyB0aGF0IG1pZ2h0IGJlIGNvbnRlbmRlZDpcbkBAIC0yODYyLDE0ICYjNDM7MjkwNSwxOCBAQCBzc2l6ZV90IGZpbGVtYXBfcmVhZChzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqaXRlcixcbiBcdFx0XHRpZiAod3JpdGFibHlfbWFwcGVkKVxuIFx0XHRcdFx0Zmx1c2hfZGNhY2hlX2ZvbGlvKGZvbGlvKTtcbiBcbi1cdFx0XHRjb3BpZWQgPSBjb3B5X2ZvbGlvX3RvX2l0ZXIoZm9saW8sIG9mZnNldCwgYnl0ZXMsIGl0ZXIpO1xuJiM0MztcdFx0XHRjb3BpZWQgPSBhZGp1c3RfcmFuZ2VfaHdwb2lzb24oZm9saW8sIG9mZnNldCwgYnl0ZXMpO1xuJiM0MztcdFx0XHRpZiAoY29waWVkIFx1MDAzYyBieXRlcylcbiYjNDM7XHRcdFx0XHRlcnJvciA9IC1FSU87XG4mIzQzO1x0XHRcdGNvcGllZCA9IGNvcHlfZm9saW9fdG9faXRlcihmb2xpbywgb2Zmc2V0LCBjb3BpZWQsIGl0ZXIpO1xuIFxuIFx0XHRcdGFscmVhZHlfcmVhZCAmIzQzOz0gY29waWVkO1xuIFx0XHRcdGlvY2ItXHUwMDNla2lfcG9zICYjNDM7PSBjb3BpZWQ7XG4gXHRcdFx0bGFzdF9wb3MgPSBpb2NiLVx1MDAzZWtpX3BvcztcbiBcbiBcdFx0XHRpZiAoY29waWVkIFx1MDAzYyBieXRlcykge1xuLVx0XHRcdFx0ZXJyb3IgPSAtRUZBVUxUO1xuJiM0MztcdFx0XHRcdGlmICghZXJyb3IpXG4mIzQzO1x0XHRcdFx0XHRlcnJvciA9IC1FRkFVTFQ7XG4gXHRcdFx0XHRicmVhaztcbiBcdFx0XHR9XG4gXHRcdH1cbmRpZmYgLS1naXQgYS9tbS9odWdlX21lbW9yeS5jIGIvbW0vaHVnZV9tZW1vcnkuY1xuaW5kZXggMmJjY2IwYTUzYTBhNjAuLjM1MzM0MDMwOTEwNzRjIDEwMDY0NFxuLS0tIGEvbW0vaHVnZV9tZW1vcnkuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vaHVnZV9tZW1vcnkuY1xuQEAgLTQ0MTMsNyAmIzQzOzQ0MTMsNyBAQCBzdGF0aWMgYm9vbCB0aHBfdW5kZXJ1c2VkKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4gXHRpZiAoa2h1Z2VwYWdlZF9tYXhfcHRlc19ub25lID09IEhQQUdFX1BNRF9OUiAtIDEpXG4gXHRcdHJldHVybiBmYWxzZTtcbiBcbi1cdGlmIChmb2xpb19jb250YWluX2h3cG9pc29uZWRfcGFnZShmb2xpbykpXG4mIzQzO1x0aWYgKGZvbGlvX2hhc19od3BvaXNvbmVkX3BhZ2UoZm9saW8pKVxuIFx0XHRyZXR1cm4gZmFsc2U7XG4gXG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBmb2xpb19ucl9wYWdlcyhmb2xpbyk7IGkmIzQzOyYjNDM7KSB7XG5kaWZmIC0tZ2l0IGEvbW0vaHVnZXRsYi5jIGIvbW0vaHVnZXRsYi5jXG5pbmRleCA1NzEyMTJiODA4MzVlYy4uYWFhYzZlMmFmNGMyNGEgMTAwNjQ0XG4tLS0gYS9tbS9odWdldGxiLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL2h1Z2V0bGIuY1xuQEAgLTEyNTUsNyAmIzQzOzEyNTUsNyBAQCBzdGF0aWMgc3RydWN0IGZvbGlvICpkZXF1ZXVlX2h1Z2V0bGJfZm9saW9fbm9kZV9leGFjdChzdHJ1Y3QgaHN0YXRlICpoLFxuIFx0XHRpZiAocGluIFx1MDAyNlx1MDAyNiAhZm9saW9faXNfbG9uZ3Rlcm1fcGlubmFibGUoZm9saW8pKVxuIFx0XHRcdGNvbnRpbnVlO1xuIFxuLVx0XHRpZiAoZm9saW9fdGVzdF9od3BvaXNvbihmb2xpbykpXG4mIzQzO1x0XHRpZiAoZm9saW9fdGVzdF9oYXNfaHdwb2lzb25lZChmb2xpbykpXG4gXHRcdFx0Y29udGludWU7XG4gXG4gXHRcdGlmIChpc19taWdyYXRlX2lzb2xhdGVfcGFnZShcdTAwMjZmb2xpby1cdTAwM2VwYWdlKSlcbkBAIC0xNDk4LDEwICYjNDM7MTQ5OCwxMCBAQCBzdGF0aWMgdm9pZCBfX3VwZGF0ZV9hbmRfZnJlZV9odWdldGxiX2ZvbGlvKHN0cnVjdCBoc3RhdGUgKmgsXG4gXHR9XG4gXG4gXHQvKlxuLVx0ICogTW92ZSBQYWdlSFdQb2lzb24gZmxhZyBmcm9tIGhlYWQgcGFnZSB0byB0aGUgcmF3IGVycm9yIHBhZ2VzLFxuLVx0ICogd2hpY2ggbWFrZXMgYW55IGhlYWx0aHkgc3VicGFnZXMgcmV1c2FibGUuXG4mIzQzO1x0ICogTW92ZSBIV1BvaXNvbiBmbGFnIHRvIGVhY2ggZXJyb3IgcGFnZVxuJiM0MztcdCAqIHdoaWNoIG1ha2VzIGFueSBoZWFsdGh5IHBhZ2VzIHJldXNhYmxlLlxuIFx0ICovXG4tXHRpZiAodW5saWtlbHkoZm9saW9fdGVzdF9od3BvaXNvbihmb2xpbykpKVxuJiM0MztcdGlmICh1bmxpa2VseShmb2xpb190ZXN0X2hhc19od3BvaXNvbmVkKGZvbGlvKSkpXG4gXHRcdGZvbGlvX2NsZWFyX2h1Z2V0bGJfaHdwb2lzb24oZm9saW8pO1xuIFxuIFx0Vk1fQlVHX09OX0ZPTElPKGZvbGlvX3JlZl9jb3VudChmb2xpbyksIGZvbGlvKTtcbkBAIC0xNzc1LDcgJiM0MzsxNzc1LDcgQEAgdm9pZCBpbml0X25ld19odWdldGxiX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4gICogc3RhYmxlLiAgRHVlIHRvIGxvY2tpbmcgb3JkZXIsIHdlIGNhbiBvbmx5IHRyeWxvY2tfd3JpdGUuICBJZiB3ZSBjYW5cbiAgKiBub3QgZ2V0IHRoZSBsb2NrLCBzaW1wbHkgcmV0dXJuIE5VTEwgdG8gY2FsbGVyLlxuICAqL1xuLXN0cnVjdCBhZGRyZXNzX3NwYWNlICpodWdldGxiX2ZvbGlvX21hcHBpbmdfbG9ja193cml0ZShzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuJiM0MztzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqaHVnZXRsYl9mb2xpb19tYXBwaW5nX2xvY2tfd3JpdGUoY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbylcbiB7XG4gXHRzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyA9IGZvbGlvX21hcHBpbmcoZm9saW8pO1xuIFxuQEAgLTM5OTgsNyAmIzQzOzM5OTgsNyBAQCBsb25nIGRlbW90ZV9wb29sX2h1Z2VfcGFnZShzdHJ1Y3QgaHN0YXRlICpzcmMsIG5vZGVtYXNrX3QgKm5vZGVzX2FsbG93ZWQsXG4gXHRcdHN0cnVjdCBmb2xpbyAqZm9saW8sICpuZXh0O1xuIFxuIFx0XHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoZm9saW8sIG5leHQsIFx1MDAyNnNyYy1cdTAwM2VodWdlcGFnZV9mcmVlbGlzdHNbbm9kZV0sIGxydSkge1xuLVx0XHRcdGlmIChmb2xpb190ZXN0X2h3cG9pc29uKGZvbGlvKSlcbiYjNDM7XHRcdFx0aWYgKGZvbGlvX3Rlc3RfaGFzX2h3cG9pc29uZWQoZm9saW8pKVxuIFx0XHRcdFx0Y29udGludWU7XG4gXG4gXHRcdFx0cmVtb3ZlX2h1Z2V0bGJfZm9saW8oc3JjLCBmb2xpbywgZmFsc2UpO1xuQEAgLTU4MDksNyAmIzQzOzU4MDksNyBAQCBzdGF0aWMgdm1fZmF1bHRfdCBodWdldGxiX25vX3BhZ2Uoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXG4gXHRcdCAqIGRvbiYjMzk7dCBoYXZlIGh3cG9pc29uZWQgc3dhcCBlbnRyeSBmb3IgZXJyb3JlZCB2aXJ0dWFsIGFkZHJlc3MuXG4gXHRcdCAqIFNvIHdlIG5lZWQgdG8gYmxvY2sgaHVnZXBhZ2UgZmF1bHQgYnkgUEdfaHdwb2lzb24gYml0IGNoZWNrLlxuIFx0XHQgKi9cbi1cdFx0aWYgKHVubGlrZWx5KGZvbGlvX3Rlc3RfaHdwb2lzb24oZm9saW8pKSkge1xuJiM0MztcdFx0aWYgKHVubGlrZWx5KGZvbGlvX3Rlc3RfaGFzX2h3cG9pc29uZWQoZm9saW8pKSkge1xuIFx0XHRcdHJldCA9IFZNX0ZBVUxUX0hXUE9JU09OX0xBUkdFIHxcbiBcdFx0XHRcdFZNX0ZBVUxUX1NFVF9ISU5ERVgoaHN0YXRlX2luZGV4KGgpKTtcbiBcdFx0XHRnb3RvIGJhY2tvdXRfdW5sb2NrZWQ7XG5AQCAtNjMxOCw3ICYjNDM7NjMxOCw3IEBAIGludCBodWdldGxiX21maWxsX2F0b21pY19wdGUocHRlX3QgKmRzdF9wdGUsXG4gXHRwdGwgPSBodWdlX3B0ZV9sb2NrKGgsIGRzdF9tbSwgZHN0X3B0ZSk7XG4gXG4gXHRyZXQgPSAtRUlPO1xuLVx0aWYgKGZvbGlvX3Rlc3RfaHdwb2lzb24oZm9saW8pKVxuJiM0MztcdGlmIChmb2xpb190ZXN0X2hhc19od3BvaXNvbmVkKGZvbGlvKSlcbiBcdFx0Z290byBvdXRfcmVsZWFzZV91bmxvY2s7XG4gXG4gXHRyZXQgPSAtRUVYSVNUO1xuZGlmZiAtLWdpdCBhL21tL21lbW9yeS1mYWlsdXJlLmMgYi9tbS9tZW1vcnktZmFpbHVyZS5jXG5pbmRleCA1MTUwOGE1NWM0MDU1ZS4uNzNlYmJjOTM1NjYxODIgMTAwNjQ0XG4tLS0gYS9tbS9tZW1vcnktZmFpbHVyZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9tZW1vcnktZmFpbHVyZS5jXG5AQCAtMTgxMCw1MCAmIzQzOzE4MTAsNjUgQEAgRVhQT1JUX1NZTUJPTF9HUEwobWZfZGF4X2tpbGxfcHJvY3MpO1xuIFxuIC8qXG4gICogU3RydWN0IHJhd19od3BfcGFnZSByZXByZXNlbnRzIGluZm9ybWF0aW9uIGFib3V0IFwmIzM0O3JhdyBlcnJvciBwYWdlXCYjMzQ7LFxuLSAqIGNvbnN0cnVjdGluZyBzaW5nbHkgbGlua2VkIGxpc3QgZnJvbSAtXHUwMDNlX2h1Z2V0bGJfaHdwb2lzb24gZmllbGQgb2YgZm9saW8uXG4mIzQzOyAqIGNvbnN0cnVjdGluZyBzaW5nbHkgbGlua2VkIGxpc3QgZnJvbSBmb2xpby1cdTAwM2VodWdldGxiX2h3cG9pc29uIGZpZWxkLlxuICAqL1xuIHN0cnVjdCByYXdfaHdwX3BhZ2Uge1xuIFx0c3RydWN0IGxsaXN0X25vZGUgbm9kZTtcbiBcdHN0cnVjdCBwYWdlICpwYWdlO1xuIH07XG4gXG4tc3RhdGljIGlubGluZSBzdHJ1Y3QgbGxpc3RfaGVhZCAqcmF3X2h3cF9saXN0X2hlYWQoc3RydWN0IGZvbGlvICpmb2xpbylcbiYjNDM7c3RhdGljIGJvb2wgcHJlY2lzZV9wYWdlX3BvaXNvbmVkKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8sXG4mIzQzO1x0XHRjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSlcbiB7XG4tXHRyZXR1cm4gKHN0cnVjdCBsbGlzdF9oZWFkICopXHUwMDI2Zm9saW8tXHUwMDNlX2h1Z2V0bGJfaHdwb2lzb247XG4tfVxuLVxuLWJvb2wgaXNfcmF3X2h3cG9pc29uX3BhZ2VfaW5faHVnZXBhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UpXG4te1xuLVx0c3RydWN0IGxsaXN0X2hlYWQgKnJhd19od3BfaGVhZDtcbi1cdHN0cnVjdCByYXdfaHdwX3BhZ2UgKnA7XG4tXHRzdHJ1Y3QgZm9saW8gKmZvbGlvID0gcGFnZV9mb2xpbyhwYWdlKTtcbi1cdGJvb2wgcmV0ID0gZmFsc2U7XG4tXG4tXHRpZiAoIWZvbGlvX3Rlc3RfaHdwb2lzb24oZm9saW8pKVxuLVx0XHRyZXR1cm4gZmFsc2U7XG4tXG4tXHRpZiAoIWZvbGlvX3Rlc3RfaHVnZXRsYihmb2xpbykpXG4tXHRcdHJldHVybiBQYWdlSFdQb2lzb24ocGFnZSk7XG4mIzQzO1x0Y29uc3Qgc3RydWN0IGxsaXN0X2hlYWQgKmxpc3QgPSBcdTAwMjZmb2xpby1cdTAwM2VodWdldGxiX2h3cG9pc29uO1xuJiM0MztcdGNvbnN0IHN0cnVjdCByYXdfaHdwX3BhZ2UgKnA7XG4gXG4gXHQvKlxuLVx0ICogV2hlbiBSYXdId3BVbnJlbGlhYmxlIGlzIHNldCwga2VybmVsIGxvc3QgdHJhY2sgb2Ygd2hpY2ggc3VicGFnZXNcbi1cdCAqIGFyZSBIV1BPSVNPTi4gU28gcmV0dXJuIGFzIGlmIEFMTCBzdWJwYWdlcyBhcmUgSFdQT0lTT05lZC5cbiYjNDM7XHQgKiBXaGVuIFJhd0h3cFVucmVsaWFibGUgaXMgc2V0LCBrZXJuZWwgbG9zdCB0cmFjayBvZiB3aGljaCBwYWdlc1xuJiM0MztcdCAqIGFyZSBIV1BPSVNPTi4gU28gcmV0dXJuIGFzIGlmIEFMTCBwYWdlcyBhcmUgSFdQT0lTT05lZC5cbiBcdCAqL1xuIFx0aWYgKGZvbGlvX3Rlc3RfaHVnZXRsYl9yYXdfaHdwX3VucmVsaWFibGUoZm9saW8pKVxuIFx0XHRyZXR1cm4gdHJ1ZTtcbiBcbi1cdG11dGV4X2xvY2soXHUwMDI2bWZfbXV0ZXgpO1xuLVxuLVx0cmF3X2h3cF9oZWFkID0gcmF3X2h3cF9saXN0X2hlYWQoZm9saW8pO1xuLVx0bGxpc3RfZm9yX2VhY2hfZW50cnkocCwgcmF3X2h3cF9oZWFkLVx1MDAzZWZpcnN0LCBub2RlKSB7XG4tXHRcdGlmIChwYWdlID09IHAtXHUwMDNlcGFnZSkge1xuLVx0XHRcdHJldCA9IHRydWU7XG4tXHRcdFx0YnJlYWs7XG4tXHRcdH1cbiYjNDM7XHRsbGlzdF9mb3JfZWFjaF9lbnRyeShwLCBSRUFEX09OQ0UobGlzdC1cdTAwM2VmaXJzdCksIG5vZGUpIHtcbiYjNDM7XHRcdGlmIChwYWdlID09IHAtXHUwMDNlcGFnZSlcbiYjNDM7XHRcdFx0cmV0dXJuIHRydWU7XG4gXHR9XG4gXG4tXHRtdXRleF91bmxvY2soXHUwMDI2bWZfbXV0ZXgpO1xuJiM0MztcdHJldHVybiBmYWxzZTtcbiYjNDM7fVxuIFxuJiM0MzsvKlxuJiM0MzsgKiBDaGVjayBpZiBhIGdpdmVuIEBwYWdlIGluIGEgaHVnZXRsYiBmb2xpbyBpcyBIV1BPSVNPTi5cbiYjNDM7ICovXG4mIzQzO2Jvb2wgaHVnZXRsYl9wYWdlX2h3cG9pc29uKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8sIGNvbnN0IHN0cnVjdCBwYWdlICpwYWdlKVxuJiM0Mzt7XG4mIzQzO1x0aWYgKCFmb2xpb190ZXN0X2hhc19od3BvaXNvbmVkKGZvbGlvKSlcbiYjNDM7XHRcdHJldHVybiBmYWxzZTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHByZWNpc2VfcGFnZV9wb2lzb25lZChmb2xpbywgcGFnZSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qXG4mIzQzOyAqIFdlIGhhdmUgbm8gcmVmZXJlbmNlIG9uIHRoZSBmb2xpbyBjb250YWluaW5nIHRoaXMgcGFnZS5cbiYjNDM7ICogVGhlIGh1Z2V0bGJfbG9jayBrZWVwcyBodWdldGxiIGZvbGlvcyBmcm9tIGJlaW5nIGZyZWVkLlxuJiM0MzsgKi9cbiYjNDM7Ym9vbCBodWdldGxiX3VucmVmX3BhZ2VfaHdwb2lzb24oY29uc3Qgc3RydWN0IHBhZ2UgKnBhZ2UpXG4mIzQzO3tcbiYjNDM7XHRjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvO1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4mIzQzO1x0Ym9vbCByZXQ7XG4mIzQzO1xuJiM0MztcdHNwaW5fbG9ja19pcnFzYXZlKFx1MDAyNmh1Z2V0bGJfbG9jaywgZmxhZ3MpO1xuJiM0MztcdGZvbGlvID0gcGFnZV9mb2xpbyhwYWdlKTtcbiYjNDM7XHRpZiAoIWZvbGlvX3Rlc3RfaHVnZV9wb2lzb24oZm9saW8pKSB7XG4mIzQzO1x0XHRyZXQgPSBQYWdlSFdQb2lzb24ocGFnZSk7XG4mIzQzO1x0XHRnb3RvIHVubG9jaztcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldCA9IHByZWNpc2VfcGFnZV9wb2lzb25lZChmb2xpbywgcGFnZSk7XG4mIzQzO3VubG9jazpcbiYjNDM7XHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNmh1Z2V0bGJfbG9jaywgZmxhZ3MpO1xuIFx0cmV0dXJuIHJldDtcbiB9XG4gXG5AQCAtMTg2Myw3ICYjNDM7MTg3OCw3IEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIF9fZm9saW9fZnJlZV9yYXdfaHdwKHN0cnVjdCBmb2xpbyAqZm9saW8sIGJvb2wgbW92ZV9mbGFnKVxuIFx0c3RydWN0IHJhd19od3BfcGFnZSAqcCwgKm5leHQ7XG4gXHR1bnNpZ25lZCBsb25nIGNvdW50ID0gMDtcbiBcbi1cdGhlYWQgPSBsbGlzdF9kZWxfYWxsKHJhd19od3BfbGlzdF9oZWFkKGZvbGlvKSk7XG4mIzQzO1x0aGVhZCA9IGxsaXN0X2RlbF9hbGwoXHUwMDI2Zm9saW8tXHUwMDNlaHVnZXRsYl9od3BvaXNvbik7XG4gXHRsbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHAsIG5leHQsIGhlYWQsIG5vZGUpIHtcbiBcdFx0aWYgKG1vdmVfZmxhZylcbiBcdFx0XHRTZXRQYWdlSFdQb2lzb24ocC1cdTAwM2VwYWdlKTtcbkBAIC0xODgxLDI2ICYjNDM7MTg5Niw0MSBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBfX2ZvbGlvX2ZyZWVfcmF3X2h3cChzdHJ1Y3QgZm9saW8gKmZvbGlvLCBib29sIG1vdmVfZmxhZylcbiAjZGVmaW5lXHRNRl9IVUdFVExCX0ZPTElPX1BSRV9QT0lTT05FRFx0M1x0LyogZm9saW8gYWxyZWFkeSBwb2lzb25lZCAqL1xuICNkZWZpbmVcdE1GX0hVR0VUTEJfUEFHRV9QUkVfUE9JU09ORURcdDRcdC8qIGV4YWN0IHBhZ2UgYWxyZWFkeSBwb2lzb25lZCAqL1xuICNkZWZpbmVcdE1GX0hVR0VUTEJfUkVUUllcdFx0NVx0LyogaHVnZXBhZ2UgaXMgYnVzeSwgcmV0cnkgKi9cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbmxpbmUgaW50IGh1Z2V0bGJfc2V0X3BvaXNvbihzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuJiM0Mzt7XG4mIzQzO1x0aWYgKGZvbGlvX3Rlc3Rfc2V0X2hhc19od3BvaXNvbmVkKGZvbGlvKSlcbiYjNDM7XHRcdHJldHVybiBNRl9IVUdFVExCX0ZPTElPX1BSRV9QT0lTT05FRDtcbiYjNDM7XHRmb2xpb19zZXRfaHVnZV9wb2lzb24oZm9saW8pO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW5saW5lIGludCBodWdldGxiX2NsZWFyX3BvaXNvbihzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuJiM0Mzt7XG4mIzQzO1x0aWYgKCFmb2xpb190ZXN0X2NsZWFyX2hhc19od3BvaXNvbmVkKGZvbGlvKSlcbiYjNDM7XHRcdHJldHVybiAtRUJVU1k7XG4mIzQzO1x0Zm9saW9fY2xlYXJfaHVnZV9wb2lzb24oZm9saW8pO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuIC8qXG4gICogU2V0IGh1Z2V0bGIgZm9saW8gYXMgaHdwb2lzb25lZCwgdXBkYXRlIGZvbGlvIHByaXZhdGUgcmF3IGh3cG9pc29uIGxpc3RcbiAgKiB0byBrZWVwIHRyYWNrIG9mIHRoZSBwb2lzb25lZCBwYWdlcy5cbiAgKi9cbiBzdGF0aWMgaW50IGh1Z2V0bGJfdXBkYXRlX2h3cG9pc29uKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBwYWdlICpwYWdlKVxuIHtcbi1cdHN0cnVjdCBsbGlzdF9oZWFkICpoZWFkO1xuIFx0c3RydWN0IHJhd19od3BfcGFnZSAqcmF3X2h3cDtcbiBcdHN0cnVjdCByYXdfaHdwX3BhZ2UgKnA7XG4tXHRpbnQgcmV0ID0gZm9saW9fdGVzdF9zZXRfaHdwb2lzb24oZm9saW8pID8gTUZfSFVHRVRMQl9GT0xJT19QUkVfUE9JU09ORUQgOiAwO1xuJiM0MztcdGludCByZXQgPSBodWdldGxiX3NldF9wb2lzb24oZm9saW8pO1xuIFxuIFx0LypcbiBcdCAqIE9uY2UgdGhlIGh3cG9pc29uIGh1Z2VwYWdlIGhhcyBsb3N0IHJlbGlhYmxlIHJhdyBlcnJvciBpbmZvLFxuLVx0ICogdGhlcmUgaXMgbGl0dGxlIG1lYW5pbmcgdG8ga2VlcCBhZGRpdGlvbmFsIGVycm9yIGluZm8gcHJlY2lzZWx5LFxuLVx0ICogc28gc2tpcCB0byBhZGQgYWRkaXRpb25hbCByYXcgZXJyb3IgaW5mby5cbiYjNDM7XHQgKiB0aGVyZSBpcyBubyBwb2ludCBpbiBrZWVwaW5nIGFkZGl0aW9uYWwgZXJyb3IgaW5mbyBwcmVjaXNlbHksXG4mIzQzO1x0ICogc28gc2tpcCBhZGRpbmcgYWRkaXRpb25hbCByYXcgZXJyb3IgaW5mby5cbiBcdCAqL1xuIFx0aWYgKGZvbGlvX3Rlc3RfaHVnZXRsYl9yYXdfaHdwX3VucmVsaWFibGUoZm9saW8pKVxuIFx0XHRyZXR1cm4gTUZfSFVHRVRMQl9GT0xJT19QUkVfUE9JU09ORUQ7XG4tXHRoZWFkID0gcmF3X2h3cF9saXN0X2hlYWQoZm9saW8pO1xuLVx0bGxpc3RfZm9yX2VhY2hfZW50cnkocCwgaGVhZC1cdTAwM2VmaXJzdCwgbm9kZSkge1xuJiM0MztcdGxsaXN0X2Zvcl9lYWNoX2VudHJ5KHAsIGZvbGlvLVx1MDAzZWh1Z2V0bGJfaHdwb2lzb24uZmlyc3QsIG5vZGUpIHtcbiBcdFx0aWYgKHAtXHUwMDNlcGFnZSA9PSBwYWdlKVxuIFx0XHRcdHJldHVybiBNRl9IVUdFVExCX1BBR0VfUFJFX1BPSVNPTkVEO1xuIFx0fVxuQEAgLTE5MDgsNyAmIzQzOzE5MzgsNyBAQCBzdGF0aWMgaW50IGh1Z2V0bGJfdXBkYXRlX2h3cG9pc29uKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBwYWdlICpwYWdlKVxuIFx0cmF3X2h3cCA9IGttYWxsb2Nfb2JqKHN0cnVjdCByYXdfaHdwX3BhZ2UsIEdGUF9BVE9NSUMpO1xuIFx0aWYgKHJhd19od3ApIHtcbiBcdFx0cmF3X2h3cC1cdTAwM2VwYWdlID0gcGFnZTtcbi1cdFx0bGxpc3RfYWRkKFx1MDAyNnJhd19od3AtXHUwMDNlbm9kZSwgaGVhZCk7XG4mIzQzO1x0XHRsbGlzdF9hZGQoXHUwMDI2cmF3X2h3cC1cdTAwM2Vub2RlLCBcdTAwMjZmb2xpby1cdTAwM2VodWdldGxiX2h3cG9pc29uKTtcbiBcdH0gZWxzZSB7XG4gXHRcdC8qXG4gXHRcdCAqIEZhaWxlZCB0byBzYXZlIHJhdyBlcnJvciBpbmZvLiAgV2Ugbm8gbG9uZ2VyIHRyYWNlIGFsbFxuQEAgLTE5NTAsOCAmIzQzOzE5ODAsOCBAQCB2b2lkIGZvbGlvX2NsZWFyX2h1Z2V0bGJfaHdwb2lzb24oc3RydWN0IGZvbGlvICpmb2xpbylcbiBcdFx0cmV0dXJuO1xuIFx0aWYgKGZvbGlvX3Rlc3RfaHVnZXRsYl92bWVtbWFwX29wdGltaXplZChmb2xpbykpXG4gXHRcdHJldHVybjtcbi1cdGZvbGlvX2NsZWFyX2h3cG9pc29uKGZvbGlvKTtcbiBcdGZvbGlvX2ZyZWVfcmF3X2h3cChmb2xpbywgdHJ1ZSk7XG4mIzQzO1x0Zm9saW9fY2xlYXJfaGFzX2h3cG9pc29uZWQoZm9saW8pO1xuIH1cbiBcbiBzdGF0aWMgaW50IGdldF9odWdlX3BhZ2VfZm9yX2h3cG9pc29uKHVuc2lnbmVkIGxvbmcgcGZuLCBpbnQgZmxhZ3MsXG5AQCAtMjEwNCw2ICYjNDM7MjEzNCwxMSBAQCBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgZm9saW9fZnJlZV9yYXdfaHdwKHN0cnVjdCBmb2xpbyAqZm9saW8sIGJvb2wgZmxhZylcbiB7XG4gXHRyZXR1cm4gMDtcbiB9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW5saW5lIGludCBodWdldGxiX2NsZWFyX3BvaXNvbihzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiAjZW5kaWZcdC8qIENPTkZJR19IVUdFVExCX1BBR0UgKi9cbiBcbiAvKiBEcm9wIHRoZSBleHRyYSByZWZjb3VudCBpbiBjYXNlIHdlIGNvbWUgZnJvbSBtYWR2aXNlKCkgKi9cbkBAIC0yNjc3LDcgJiM0MzsyNzEyLDEyIEBAIGludCB1bnBvaXNvbl9tZW1vcnkodW5zaWduZWQgbG9uZyBwZm4pXG4gXHRwID0gcGZuX3RvX29ubGluZV9wYWdlKHBmbik7XG4gXHRpZiAoIXApXG4gXHRcdHJldHVybiAtRUlPO1xuLVx0Zm9saW8gPSBwYWdlX2ZvbGlvKHApO1xuJiM0MztcbiYjNDM7XHRpZiAoIWlzX3BhZ2VfaHdwb2lzb24ocCkpIHtcbiYjNDM7XHRcdHVucG9pc29uX3ByX2luZm8oXCYjMzQ7JSNseDogcGFnZSBpcyBub3QgcG9pc29uZWRcXG5cJiMzNDssXG4mIzQzO1x0XHRcdFx0IHBmbiwgXHUwMDI2dW5wb2lzb25fcnMpO1xuJiM0MztcdFx0cmV0dXJuIC1FQlVTWTtcbiYjNDM7XHR9XG4gXG4gXHRtdXRleF9sb2NrKFx1MDAyNm1mX211dGV4KTtcbiBcbkBAIC0yNjg4LDYgJiM0MzsyNzI4LDggQEAgaW50IHVucG9pc29uX21lbW9yeSh1bnNpZ25lZCBsb25nIHBmbilcbiBcdFx0Z290byB1bmxvY2tfbXV0ZXg7XG4gXHR9XG4gXG4mIzQzO1x0Zm9saW8gPSBwYWdlX2ZvbGlvKHApO1xuJiM0MztcbiBcdGlmIChpc19odWdlX3plcm9fZm9saW8oZm9saW8pKSB7XG4gXHRcdHVucG9pc29uX3ByX2luZm8oXCYjMzQ7JSNseDogaHVnZSB6ZXJvIHBhZ2UgaXMgbm90IHN1cHBvcnRlZFxcblwmIzM0OyxcbiBcdFx0XHRcdCBwZm4sIFx1MDAyNnVucG9pc29uX3JzKTtcbkBAIC0yNjk1LDEyICYjNDM7MjczNyw2IEBAIGludCB1bnBvaXNvbl9tZW1vcnkodW5zaWduZWQgbG9uZyBwZm4pXG4gXHRcdGdvdG8gdW5sb2NrX211dGV4O1xuIFx0fVxuIFxuLVx0aWYgKCFQYWdlSFdQb2lzb24ocCkpIHtcbi1cdFx0dW5wb2lzb25fcHJfaW5mbyhcJiMzNDslI2x4OiBwYWdlIHdhcyBhbHJlYWR5IHVucG9pc29uZWRcXG5cJiMzNDssXG4tXHRcdFx0XHQgcGZuLCBcdTAwMjZ1bnBvaXNvbl9ycyk7XG4tXHRcdGdvdG8gdW5sb2NrX211dGV4O1xuLVx0fVxuLVxuIFx0aWYgKGZvbGlvX3JlZl9jb3VudChmb2xpbykgXHUwMDNlIDEpIHtcbiBcdFx0dW5wb2lzb25fcHJfaW5mbyhcJiMzNDslI2x4OiBzb21lb25lIGdyYWJzIHRoZSBod3BvaXNvbiBwYWdlXFxuXCYjMzQ7LFxuIFx0XHRcdFx0IHBmbiwgXHUwMDI2dW5wb2lzb25fcnMpO1xuQEAgLTI3MzAsOCAmIzQzOzI3NjYsOCBAQCBpbnQgdW5wb2lzb25fbWVtb3J5KHVuc2lnbmVkIGxvbmcgcGZuKVxuIFx0XHRcdGNvdW50ID0gZm9saW9fZnJlZV9yYXdfaHdwKGZvbGlvLCBmYWxzZSk7XG4gXHRcdFx0aWYgKGNvdW50ID09IDApXG4gXHRcdFx0XHRnb3RvIHVubG9ja19tdXRleDtcbiYjNDM7XHRcdFx0cmV0ID0gaHVnZXRsYl9jbGVhcl9wb2lzb24oZm9saW8pO1xuIFx0XHR9XG4tXHRcdHJldCA9IGZvbGlvX3Rlc3RfY2xlYXJfaHdwb2lzb24oZm9saW8pID8gMCA6IC1FQlVTWTtcbiBcdH0gZWxzZSBpZiAoZ2hwIFx1MDAzYyAwKSB7XG4gXHRcdGlmIChnaHAgPT0gLUVIV1BPSVNPTikge1xuIFx0XHRcdHJldCA9IHB1dF9wYWdlX2JhY2tfYnVkZHkocCkgPyAwIDogLUVCVVNZO1xuQEAgLTI3NDAsMTYgJiM0MzsyNzc2LDE4IEBAIGludCB1bnBvaXNvbl9tZW1vcnkodW5zaWduZWQgbG9uZyBwZm4pXG4gXHRcdFx0dW5wb2lzb25fcHJfaW5mbyhcJiMzNDslI2x4OiBmYWlsZWQgdG8gZ3JhYiBwYWdlXFxuXCYjMzQ7LFxuIFx0XHRcdFx0XHQgcGZuLCBcdTAwMjZ1bnBvaXNvbl9ycyk7XG4gXHRcdH1cbi1cdH0gZWxzZSB7XG4tXHRcdGlmIChmb2xpb190ZXN0X2h1Z2V0bGIoZm9saW8pKSB7XG4tXHRcdFx0aHVnZSA9IHRydWU7XG4tXHRcdFx0Y291bnQgPSBmb2xpb19mcmVlX3Jhd19od3AoZm9saW8sIGZhbHNlKTtcbi1cdFx0XHRpZiAoY291bnQgPT0gMCkge1xuLVx0XHRcdFx0Zm9saW9fcHV0KGZvbGlvKTtcbi1cdFx0XHRcdGdvdG8gdW5sb2NrX211dGV4O1xuLVx0XHRcdH1cbiYjNDM7XHR9IGVsc2UgaWYgKGZvbGlvX3Rlc3RfaHVnZXRsYihmb2xpbykpIHtcbiYjNDM7XHRcdGh1Z2UgPSB0cnVlO1xuJiM0MztcdFx0Y291bnQgPSBmb2xpb19mcmVlX3Jhd19od3AoZm9saW8sIGZhbHNlKTtcbiYjNDM7XHRcdGlmIChjb3VudCA9PSAwKSB7XG4mIzQzO1x0XHRcdGZvbGlvX3B1dChmb2xpbyk7XG4mIzQzO1x0XHRcdGdvdG8gdW5sb2NrX211dGV4O1xuIFx0XHR9XG4tXG4mIzQzO1x0XHRmb2xpb19wdXQoZm9saW8pO1xuJiM0MztcdFx0cmV0ID0gaHVnZXRsYl9jbGVhcl9wb2lzb24oZm9saW8pO1xuJiM0MztcdFx0aWYgKCFyZXQpXG4mIzQzO1x0XHRcdGZvbGlvX3B1dChmb2xpbyk7XG4mIzQzO1x0fSBlbHNlIHtcbiBcdFx0Zm9saW9fcHV0KGZvbGlvKTtcbiBcdFx0aWYgKFRlc3RDbGVhclBhZ2VIV1BvaXNvbihwKSkge1xuIFx0XHRcdGZvbGlvX3B1dChmb2xpbyk7XG5kaWZmIC0tZ2l0IGEvbW0vbWVtb3J5X2hvdHBsdWcuYyBiL21tL21lbW9yeV9ob3RwbHVnLmNcbmluZGV4IDdhYzE5ZmFiMjI2MzI0Li4zMzAwN2U4ZTU0NmEwOSAxMDA2NDRcbi0tLSBhL21tL21lbW9yeV9ob3RwbHVnLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL21lbW9yeV9ob3RwbHVnLmNcbkBAIC0xODEzLDcgJiM0MzsxODEzLDcgQEAgc3RhdGljIHZvaWQgZG9fbWlncmF0ZV9yYW5nZSh1bnNpZ25lZCBsb25nIHN0YXJ0X3BmbiwgdW5zaWduZWQgbG9uZyBlbmRfcGZuKVxuIFx0XHRpZiAoZm9saW9fdGVzdF9sYXJnZShmb2xpbykpXG4gXHRcdFx0cGZuID0gZm9saW9fcGZuKGZvbGlvKSAmIzQzOyBmb2xpb19ucl9wYWdlcyhmb2xpbykgLSAxO1xuIFxuLVx0XHRpZiAoZm9saW9fY29udGFpbl9od3BvaXNvbmVkX3BhZ2UoZm9saW8pKSB7XG4mIzQzO1x0XHRpZiAoZm9saW9faGFzX2h3cG9pc29uZWRfcGFnZShmb2xpbykpIHtcbiBcdFx0XHQvKlxuIFx0XHRcdCAqIHVubWFwX3BvaXNvbmVkX2ZvbGlvKCkgY2Fubm90IGhhbmRsZSBsYXJnZSBmb2xpb3NcbiBcdFx0XHQgKiBpbiBhbGwgY2FzZXMgeWV0LlxuZGlmZiAtLWdpdCBhL21tL3NobWVtLmMgYi9tbS9zaG1lbS5jXG5pbmRleCBiNTFmODNjOTcwYmIzNy4uNDkyYzliZWYzNjIwNzQgMTAwNjQ0XG4tLS0gYS9tbS9zaG1lbS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9zaG1lbS5jXG5AQCAtMzI0MCw3ICYjNDM7MzI0MCw3IEBAIHNobWVtX3dyaXRlX2JlZ2luKGNvbnN0IHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXG4gXHRpZiAocmV0KVxuIFx0XHRyZXR1cm4gcmV0O1xuIFxuLVx0aWYgKGZvbGlvX2NvbnRhaW5faHdwb2lzb25lZF9wYWdlKGZvbGlvKSkge1xuJiM0MztcdGlmIChmb2xpb19oYXNfaHdwb2lzb25lZF9wYWdlKGZvbGlvKSkge1xuIFx0XHRmb2xpb191bmxvY2soZm9saW8pO1xuIFx0XHRmb2xpb19wdXQoZm9saW8pO1xuIFx0XHRyZXR1cm4gLUVJTztcbmRpZmYgLS1naXQgYS9tbS92bXNjYW4uYyBiL21tL3Ztc2Nhbi5jXG5pbmRleCAzNWMzYmIxNWFlOTZhMy4uNzBlNTRhY2UwZTc0MWMgMTAwNjQ0XG4tLS0gYS9tbS92bXNjYW4uY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vdm1zY2FuLmNcbkBAIC0xMDg2LDcgJiM0MzsxMDg2LDcgQEAgc3RhdGljIHVuc2lnbmVkIGludCBzaHJpbmtfZm9saW9fbGlzdChzdHJ1Y3QgbGlzdF9oZWFkICpmb2xpb19saXN0LFxuIFx0XHRpZiAoIWZvbGlvX3RyeWxvY2soZm9saW8pKVxuIFx0XHRcdGdvdG8ga2VlcDtcbiBcbi1cdFx0aWYgKGZvbGlvX2NvbnRhaW5faHdwb2lzb25lZF9wYWdlKGZvbGlvKSkge1xuJiM0MztcdFx0aWYgKGZvbGlvX2hhc19od3BvaXNvbmVkX3BhZ2UoZm9saW8pKSB7XG4gXHRcdFx0LypcbiBcdFx0XHQgKiB1bm1hcF9wb2lzb25lZF9mb2xpbygpIGNhbiYjMzk7dCBoYW5kbGUgbGFyZ2VcbiBcdFx0XHQgKiBmb2xpbywganVzdCBza2lwIGl0LiBtZW1vcnlfZmFpbHVyZSgpIHdpbGxcbmRpZmYgLS1naXQgYS92aXJ0L2t2bS9ndWVzdF9tZW1mZC5jIGIvdmlydC9rdm0vZ3Vlc3RfbWVtZmQuY1xuaW5kZXggZGI1N2M1NzY2YWI2MDQuLjk0ZWVkY2M3ZjFhOWUwIDEwMDY0NFxuLS0tIGEvdmlydC9rdm0vZ3Vlc3RfbWVtZmQuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdmlydC9rdm0vZ3Vlc3RfbWVtZmQuY1xuQEAgLTc3NCw3ICYjNDM7Nzc0LDcgQEAgc3RhdGljIHN0cnVjdCBmb2xpbyAqX19rdm1fZ21lbV9nZXRfcGZuKHN0cnVjdCBmaWxlICpmaWxlLFxuIFx0aWYgKElTX0VSUihmb2xpbykpXG4gXHRcdHJldHVybiBmb2xpbztcbiBcbi1cdGlmIChmb2xpb190ZXN0X2h3cG9pc29uKGZvbGlvKSkge1xuJiM0MztcdGlmIChmb2xpb19oYXNfaHdwb2lzb25lZF9wYWdlKGZvbGlvKSkge1xuIFx0XHRmb2xpb191bmxvY2soZm9saW8pO1xuIFx0XHRmb2xpb19wdXQoZm9saW8pO1xuIFx0XHRyZXR1cm4gRVJSX1BUUigtRUhXUE9JU09OKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNCAxODo0NjwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TUVNT1JZX0ZBSUxVUkUmIzM0OywKICAgICYjMzQ7SFdQT0lTT05fSU5KRUNUJiMzNDssCiAgICAmIzM0O0hVR0VUTEJGUyYjMzQ7LAogICAgJiMzNDtIVUdFVExCX1BBR0UmIzM0OywKICAgICYjMzQ7VFJBTlNQQVJFTlRfSFVHRVBBR0UmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtodWdldGxiX3BhZ2VfaHdwb2lzb24mIzM0OywKICAgICYjMzQ7aHVnZXRsYl91bnJlZl9wYWdlX2h3cG9pc29uJiMzNDssCiAgICAmIzM0O3VucG9pc29uX21lbW9yeSYjMzQ7LAogICAgJiMzNDtmb2xpb19jbGVhcl9odWdldGxiX2h3cG9pc29uJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGhvdyBoYXJkd2FyZSBwb2lzb25lZCAoSFdQT0lTT04pIHBhZ2VzIGFyZSB0cmFja2VkIGFuZCBoYW5kbGVkIHdpdGhpbiBsYXJnZSBmb2xpb3MsIHNwZWNpZmljYWxseSBhZmZlY3RpbmcgaHVnZXRsYmZzIGFuZCBmaWxlbWFwIHJlYWQgb3BlcmF0aW9ucy4gSXQgaW50cm9kdWNlcyBuZXcgbG9naWMgdG8gdHJhY2sgcG9pc29uZWQgcGFnZXMgdXNpbmcgYGZvbGlvLVx1MDAzZWh1Z2V0bGJfaHdwb2lzb25gIGFuZCByZXBsYWNlcyB0aGUgY3VzdG9tIGBodWdldGxiZnNfcmVhZF9pdGVyYCB3aXRoIGBnZW5lcmljX2ZpbGVfcmVhZF9pdGVyYCwgaGFuZGxpbmcgaHdwb2lzb24gZGlyZWN0bHkgaW4gYGZpbGVtYXBfcmVhZGAuIFRoZXNlIGFyZSByZWFjaGFibGUsIGZ1bmN0aW9uYWwgY2hhbmdlcyBpbiBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBodWdldGxiZnMuIEZ1enppbmcgc2hvdWxkIGZvY3VzIG9uIHRoZSBuZXcgaHdwb2lzb24gdHJhY2tpbmcgZnVuY3Rpb25zIGFuZCB1bnBvaXNvbmluZyBsb2dpYy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLApldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXQKICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LAogICBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMGZlNmRlNmMyZjA1NzY2NDIxN2Q5NmEzZGE3NzJhNDg2NjdlNTU2NwpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBGcmkgSnVsIDI0IDE4OjQ2OjE2IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZnMvS2NvbmZpZyBiL2ZzL0tjb25maWcKaW5kZXggY2Y2YWU2NDc3NmU2MmMuLmVkZGFjNGVkMjE0YjEyIDEwMDY0NAotLS0gYS9mcy9LY29uZmlnCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL0tjb25maWcKQEAgLTI3Miw3ICYjNDM7MjcyLDcgQEAgZW5kaWYgIyBIVUdFVExCRlMKIAogY29uZmlnIEhVR0VUTEJfUEFHRQogCWRlZl9ib29sIEhVR0VUTEJGUwotCXNlbGVjdCBYQVJSQVlfTVVMVEkKJiM0MzsJc2VsZWN0IExBUkdFX0ZPTElPCiAKIGNvbmZpZyBIVUdFVExCX1BBR0VfT1BUSU1JWkVfVk1FTU1BUAogCWRlZl9ib29sIEhVR0VUTEJfUEFHRQpkaWZmIC0tZ2l0IGEvZnMvaHVnZXRsYmZzL2lub2RlLmMgYi9mcy9odWdldGxiZnMvaW5vZGUuYwppbmRleCAyMTZlMWEwZGQwYjIzNy4uY2VmN2U2MWI4MjdkNzEgMTAwNjQ0Ci0tLSBhL2ZzL2h1Z2V0bGJmcy9pbm9kZS5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2h1Z2V0bGJmcy9pbm9kZS5jCkBAIC0xODcsMTEzICYjNDM7MTg3LDYgQEAgaHVnZXRsYl9nZXRfdW5tYXBwZWRfYXJlYShzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgbG9uZyBhZGRyLAogCXJldHVybiBtbV9nZXRfdW5tYXBwZWRfYXJlYV92bWZsYWdzKGZpbGUsIGFkZHIwLCBsZW4sIHBnb2ZmLCBmbGFncywgMCk7CiB9CiAKLS8qCi0gKiBTb21lb25lIHdhbnRzIHRvIHJlYWQgQGJ5dGVzIGZyb20gYSBIV1BPSVNPTiBodWdldGxiIEBmb2xpbyBmcm9tIEBvZmZzZXQuCi0gKiBSZXR1cm5zIHRoZSBtYXhpbXVtIG51bWJlciBvZiBieXRlcyBvbmUgY2FuIHJlYWQgd2l0aG91dCB0b3VjaGluZyB0aGUgMXN0IHJhdwotICogSFdQT0lTT04gcGFnZS4KLSAqLwotc3RhdGljIHNpemVfdCBhZGp1c3RfcmFuZ2VfaHdwb2lzb24oc3RydWN0IGZvbGlvICpmb2xpbywgc2l6ZV90IG9mZnNldCwKLQkJc2l6ZV90IGJ5dGVzKQotewotCXN0cnVjdCBwYWdlICpwYWdlID0gZm9saW9fcGFnZShmb2xpbywgb2Zmc2V0IC8gUEFHRV9TSVpFKTsKLQlzaXplX3Qgc2FmZV9ieXRlczsKLQotCWlmIChpc19yYXdfaHdwb2lzb25fcGFnZV9pbl9odWdlcGFnZShwYWdlKSkKLQkJcmV0dXJuIDA7Ci0JLyogU2FmZSB0byByZWFkIHRoZSByZW1haW5pbmcgYnl0ZXMgaW4gdGhpcyBwYWdlLiAqLwotCXNhZmVfYnl0ZXMgPSBQQUdFX1NJWkUgLSAob2Zmc2V0ICUgUEFHRV9TSVpFKTsKLQlwYWdlJiM0MzsmIzQzOzsKLQotCS8qIENoZWNrIGVhY2ggcmVtYWluaW5nIHBhZ2UgYXMgbG9uZyBhcyB3ZSBhcmUgbm90IGRvbmUgeWV0LiAqLwotCWZvciAoOyBzYWZlX2J5dGVzICZsdDsgYnl0ZXM7IHNhZmVfYnl0ZXMgJiM0Mzs9IFBBR0VfU0laRSwgcGFnZSYjNDM7JiM0MzspCi0JCWlmIChpc19yYXdfaHdwb2lzb25fcGFnZV9pbl9odWdlcGFnZShwYWdlKSkKLQkJCWJyZWFrOwotCi0JcmV0dXJuIG1pbihzYWZlX2J5dGVzLCBieXRlcyk7Ci19Ci0KLS8qCi0gKiBTdXBwb3J0IGZvciByZWFkKCkgLSBGaW5kIHRoZSBwYWdlIGF0dGFjaGVkIHRvIGZfbWFwcGluZyBhbmQgY29weSBvdXQgdGhlCi0gKiBkYXRhLiBUaGlzIHByb3ZpZGVzIGZ1bmN0aW9uYWxpdHkgc2ltaWxhciB0byBmaWxlbWFwX3JlYWQoKS4KLSAqLwotc3RhdGljIHNzaXplX3QgaHVnZXRsYmZzX3JlYWRfaXRlcihzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqdG8pCi17Ci0Jc3RydWN0IGZpbGUgKmZpbGUgPSBpb2NiLSZndDtraV9maWxwOwotCXN0cnVjdCBoc3RhdGUgKmggPSBoc3RhdGVfZmlsZShmaWxlKTsKLQlzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyA9IGZpbGUtJmd0O2ZfbWFwcGluZzsKLQlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gbWFwcGluZy0mZ3Q7aG9zdDsKLQl1bnNpZ25lZCBsb25nIGluZGV4ID0gaW9jYi0mZ3Q7a2lfcG9zICZndDsmZ3Q7IGh1Z2VfcGFnZV9zaGlmdChoKTsKLQl1bnNpZ25lZCBsb25nIG9mZnNldCA9IGlvY2ItJmd0O2tpX3BvcyAmYW1wOyB+aHVnZV9wYWdlX21hc2soaCk7Ci0JdW5zaWduZWQgbG9uZyBlbmRfaW5kZXg7Ci0JbG9mZl90IGlzaXplOwotCXNzaXplX3QgcmV0dmFsID0gMDsKLQotCXdoaWxlIChpb3ZfaXRlcl9jb3VudCh0bykpIHsKLQkJc3RydWN0IGZvbGlvICpmb2xpbzsKLQkJc2l6ZV90IG5yLCBjb3BpZWQsIHdhbnQ7Ci0KLQkJLyogbnIgaXMgdGhlIG1heGltdW0gbnVtYmVyIG9mIGJ5dGVzIHRvIGNvcHkgZnJvbSB0aGlzIHBhZ2UgKi8KLQkJbnIgPSBodWdlX3BhZ2Vfc2l6ZShoKTsKLQkJaXNpemUgPSBpX3NpemVfcmVhZChpbm9kZSk7Ci0JCWlmICghaXNpemUpCi0JCQlicmVhazsKLQkJZW5kX2luZGV4ID0gKGlzaXplIC0gMSkgJmd0OyZndDsgaHVnZV9wYWdlX3NoaWZ0KGgpOwotCQlpZiAoaW5kZXggJmd0OyBlbmRfaW5kZXgpCi0JCQlicmVhazsKLQkJaWYgKGluZGV4ID09IGVuZF9pbmRleCkgewotCQkJbnIgPSAoKGlzaXplIC0gMSkgJmFtcDsgfmh1Z2VfcGFnZV9tYXNrKGgpKSAmIzQzOyAxOwotCQkJaWYgKG5yICZsdDs9IG9mZnNldCkKLQkJCQlicmVhazsKLQkJfQotCQluciA9IG5yIC0gb2Zmc2V0OwotCi0JCS8qIEZpbmQgdGhlIGZvbGlvICovCi0JCWZvbGlvID0gZmlsZW1hcF9sb2NrX2h1Z2V0bGJfZm9saW8oaCwgbWFwcGluZywgaW5kZXgpOwotCQlpZiAoSVNfRVJSKGZvbGlvKSkgewotCQkJLyoKLQkJCSAqIFdlIGhhdmUgYSBIT0xFLCB6ZXJvIG91dCB0aGUgdXNlci1idWZmZXIgZm9yIHRoZQotCQkJICogbGVuZ3RoIG9mIHRoZSBob2xlIG9yIHJlcXVlc3QuCi0JCQkgKi8KLQkJCWNvcGllZCA9IGlvdl9pdGVyX3plcm8obnIsIHRvKTsKLQkJfSBlbHNlIHsKLQkJCWZvbGlvX3VubG9jayhmb2xpbyk7Ci0KLQkJCWlmICghZm9saW9fdGVzdF9od3BvaXNvbihmb2xpbykpCi0JCQkJd2FudCA9IG5yOwotCQkJZWxzZSB7Ci0JCQkJLyoKLQkJCQkgKiBBZGp1c3QgaG93IG1hbnkgYnl0ZXMgc2FmZSB0byByZWFkIHdpdGhvdXQKLQkJCQkgKiB0b3VjaGluZyB0aGUgMXN0IHJhdyBIV1BPSVNPTiBwYWdlIGFmdGVyCi0JCQkJICogb2Zmc2V0LgotCQkJCSAqLwotCQkJCXdhbnQgPSBhZGp1c3RfcmFuZ2VfaHdwb2lzb24oZm9saW8sIG9mZnNldCwgbnIpOwotCQkJCWlmICh3YW50ID09IDApIHsKLQkJCQkJZm9saW9fcHV0KGZvbGlvKTsKLQkJCQkJcmV0dmFsID0gLUVJTzsKLQkJCQkJYnJlYWs7Ci0JCQkJfQotCQkJfQotCi0JCQkvKgotCQkJICogV2UgaGF2ZSB0aGUgZm9saW8sIGNvcHkgaXQgdG8gdXNlciBzcGFjZSBidWZmZXIuCi0JCQkgKi8KLQkJCWNvcGllZCA9IGNvcHlfZm9saW9fdG9faXRlcihmb2xpbywgb2Zmc2V0LCB3YW50LCB0byk7Ci0JCQlmb2xpb19wdXQoZm9saW8pOwotCQl9Ci0JCW9mZnNldCAmIzQzOz0gY29waWVkOwotCQlyZXR2YWwgJiM0Mzs9IGNvcGllZDsKLQkJaWYgKGNvcGllZCAhPSBuciAmYW1wOyZhbXA7IGlvdl9pdGVyX2NvdW50KHRvKSkgewotCQkJaWYgKCFyZXR2YWwpCi0JCQkJcmV0dmFsID0gLUVGQVVMVDsKLQkJCWJyZWFrOwotCQl9Ci0JCWluZGV4ICYjNDM7PSBvZmZzZXQgJmd0OyZndDsgaHVnZV9wYWdlX3NoaWZ0KGgpOwotCQlvZmZzZXQgJmFtcDs9IH5odWdlX3BhZ2VfbWFzayhoKTsKLQl9Ci0JaW9jYi0mZ3Q7a2lfcG9zID0gKChsb2ZmX3QpaW5kZXggJmx0OyZsdDsgaHVnZV9wYWdlX3NoaWZ0KGgpKSAmIzQzOyBvZmZzZXQ7Ci0JcmV0dXJuIHJldHZhbDsKLX0KLQogc3RhdGljIGludCBodWdldGxiZnNfd3JpdGVfYmVnaW4oY29uc3Qgc3RydWN0IGtpb2NiICppb2NiLAogCQkJc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsCiAJCQlsb2ZmX3QgcG9zLCB1bnNpZ25lZCBsZW4sCkBAIC04ODMsNiAmIzQzOzc3NiwxNyBAQCBzdGF0aWMgc3RydWN0IGlub2RlICpodWdldGxiZnNfZ2V0X3Jvb3Qoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwKIAlyZXR1cm4gaW5vZGU7CiB9CiAKJiM0MztzdGF0aWMgdm9pZCBodWdldGxiZnNfaW5pdF9yZWd1bGFyX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgaHN0YXRlICpoc3RhdGUgPSBoc3RhdGVfaW5vZGUoaW5vZGUpOwomIzQzOwl1bnNpZ25lZCBpbnQgb3JkZXIgPSBodWdlX3BhZ2Vfb3JkZXIoaHN0YXRlKTsKJiM0MzsKJiM0MzsJaW5vZGUtJmd0O2lfb3AgPSAmYW1wO2h1Z2V0bGJmc19pbm9kZV9vcGVyYXRpb25zOwomIzQzOwlpbm9kZS0mZ3Q7aV9mb3AgPSAmYW1wO2h1Z2V0bGJmc19maWxlX29wZXJhdGlvbnM7CiYjNDM7CW1hcHBpbmdfc2V0X2ZvbGlvX29yZGVyX3JhbmdlKGlub2RlLSZndDtpX21hcHBpbmcsIG9yZGVyLCBvcmRlcik7CiYjNDM7CW1hcHBpbmdfc2V0X2F1dGhvcml0YXRpdmUoaW5vZGUtJmd0O2lfbWFwcGluZyk7CiYjNDM7fQomIzQzOwogLyoKICAqIEh1Z2V0bGJmcyBpcyBub3QgcmVjbGFpbWFibGU7IHRoZXJlZm9yZSBpdHMgaV9tbWFwX3J3c2VtIHdpbGwgbmV2ZXIKICAqIGJlIHRha2VuIGZyb20gcmVjbGFpbSAtLSB1bmxpa2UgcmVndWxhciBmaWxlc3lzdGVtcy4gVGhpcyBuZWVkcyBhbgpAQCAtOTI2LDggJiM0Mzs4MzAsNyBAQCBzdGF0aWMgc3RydWN0IGlub2RlICpodWdldGxiZnNfZ2V0X2lub2RlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsCiAJCQlpbml0X3NwZWNpYWxfaW5vZGUoaW5vZGUsIG1vZGUsIGRldik7CiAJCQlicmVhazsKIAkJY2FzZSBTX0lGUkVHOgotCQkJaW5vZGUtJmd0O2lfb3AgPSAmYW1wO2h1Z2V0bGJmc19pbm9kZV9vcGVyYXRpb25zOwotCQkJaW5vZGUtJmd0O2lfZm9wID0gJmFtcDtodWdldGxiZnNfZmlsZV9vcGVyYXRpb25zOwomIzQzOwkJCWh1Z2V0bGJmc19pbml0X3JlZ3VsYXJfaW5vZGUoaW5vZGUpOwogCQkJYnJlYWs7CiAJCWNhc2UgU19JRkRJUjoKIAkJCWlub2RlLSZndDtpX29wID0gJmFtcDtodWdldGxiZnNfZGlyX2lub2RlX29wZXJhdGlvbnM7CkBAIC0xMjA2LDcgJiM0MzsxMTA5LDcgQEAgc3RhdGljIHZvaWQgaW5pdF9vbmNlKHZvaWQgKmZvbykKIH0KIAogc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgaHVnZXRsYmZzX2ZpbGVfb3BlcmF0aW9ucyA9IHsKLQkucmVhZF9pdGVyCQk9IGh1Z2V0bGJmc19yZWFkX2l0ZXIsCiYjNDM7CS5yZWFkX2l0ZXIJCT0gZ2VuZXJpY19maWxlX3JlYWRfaXRlciwKIAkubW1hcAkJCT0gaHVnZXRsYmZzX2ZpbGVfbW1hcCwKIAkuZnN5bmMJCQk9IG5vb3BfZnN5bmMsCiAJLmdldF91bm1hcHBlZF9hcmVhCT0gaHVnZXRsYl9nZXRfdW5tYXBwZWRfYXJlYSwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaHVnZXRsYi5oIGIvaW5jbHVkZS9saW51eC9odWdldGxiLmgKaW5kZXggMmFiYWY5OTMyMWU5MGQuLjE4Nzg2NDJlNzVlYzUxIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaApAQCAtMTY1LDcgJiM0MzsxNjUsNyBAQCBib29sIGh1Z2V0bGJmc19wYWdlY2FjaGVfcHJlc2VudChzdHJ1Y3QgaHN0YXRlICpoLAogCQkJCSBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKIAkJCQkgdW5zaWduZWQgbG9uZyBhZGRyZXNzKTsKIAotc3RydWN0IGFkZHJlc3Nfc3BhY2UgKmh1Z2V0bGJfZm9saW9fbWFwcGluZ19sb2NrX3dyaXRlKHN0cnVjdCBmb2xpbyAqZm9saW8pOwomIzQzO3N0cnVjdCBhZGRyZXNzX3NwYWNlICpodWdldGxiX2ZvbGlvX21hcHBpbmdfbG9ja193cml0ZShjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKTsKIAogZXh0ZXJuIGludCBtb3ZhYmxlX2dpZ2FudGljX3BhZ2VzIF9fcmVhZF9tb3N0bHk7CiBleHRlcm4gaW50IHN5c2N0bF9odWdldGxiX3NobV9ncm91cCBfX3JlYWRfbW9zdGx5OwpAQCAtMjkyLDggJiM0MzsyOTIsNyBAQCBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgaHVnZXRsYl90b3RhbF9wYWdlcyh2b2lkKQogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW5saW5lIHN0cnVjdCBhZGRyZXNzX3NwYWNlICpodWdldGxiX2ZvbGlvX21hcHBpbmdfbG9ja193cml0ZSgKLQkJCQkJCQlzdHJ1Y3QgZm9saW8gKmZvbGlvKQomIzQzO3N0YXRpYyBpbmxpbmUgc3RydWN0IGFkZHJlc3Nfc3BhY2UgKmh1Z2V0bGJfZm9saW9fbWFwcGluZ19sb2NrX3dyaXRlKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8pCiB7CiAJcmV0dXJuIE5VTEw7CiB9CkBAIC01OTUsOCAmIzQzOzU5NCw4IEBAIGVudW0gaHVnZXRsYl9wYWdlX2ZsYWdzIHsKICNpZmRlZiBDT05GSUdfSFVHRVRMQl9QQUdFCiAjZGVmaW5lIFRFU1RIUEFHRUZMQUcodW5hbWUsIGZsbmFtZSkJCQkJXAogc3RhdGljIF9fYWx3YXlzX2lubGluZQkJCQkJCVwKLWJvb2wgZm9saW9fdGVzdF9odWdldGxiXyMjZmxuYW1lKHN0cnVjdCBmb2xpbyAqZm9saW8pCQlcCi0Jewl2b2lkICpwcml2YXRlID0gJmFtcDtmb2xpby0mZ3Q7cHJpdmF0ZTsJCVwKJiM0Mztib29sIGZvbGlvX3Rlc3RfaHVnZXRsYl8jI2ZsbmFtZShjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKQlcCiYjNDM7CXsJY29uc3Qgdm9pZCAqcHJpdmF0ZSA9ICZhbXA7Zm9saW8tJmd0O3ByaXZhdGU7CQlcCiAJCXJldHVybiB0ZXN0X2JpdChIUEdfIyNmbG5hbWUsIHByaXZhdGUpOwkJXAogCX0KIApAQCAtNjE2LDcgJiM0Mzs2MTUsNyBAQCB2b2lkIGZvbGlvX2NsZWFyX2h1Z2V0bGJfIyNmbG5hbWUoc3RydWN0IGZvbGlvICpmb2xpbykJCVwKICNlbHNlCiAjZGVmaW5lIFRFU1RIUEFHRUZMQUcodW5hbWUsIGZsbmFtZSkJCQkJXAogc3RhdGljIGlubGluZSBib29sCQkJCQkJXAotZm9saW9fdGVzdF9odWdldGxiXyMjZmxuYW1lKHN0cnVjdCBmb2xpbyAqZm9saW8pCQlcCiYjNDM7Zm9saW9fdGVzdF9odWdldGxiXyMjZmxuYW1lKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8pCQlcCiAJeyByZXR1cm4gMDsgfQogCiAjZGVmaW5lIFNFVEhQQUdFRkxBRyh1bmFtZSwgZmxuYW1lKQkJCQlcCkBAIC03MjcsNyAmIzQzOzcyNiw3IEBAIHN0YXRpYyBpbmxpbmUgc3RydWN0IGh1Z2VwYWdlX3N1YnBvb2wgKnN1YnBvb2xfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSkKIAlyZXR1cm4gSFVHRVRMQkZTX1NCKGlub2RlLSZndDtpX3NiKS0mZ3Q7c3Bvb2w7CiB9CiAKLXN0YXRpYyBpbmxpbmUgc3RydWN0IGh1Z2VwYWdlX3N1YnBvb2wgKmh1Z2V0bGJfZm9saW9fc3VicG9vbChzdHJ1Y3QgZm9saW8gKmZvbGlvKQomIzQzO3N0YXRpYyBpbmxpbmUgc3RydWN0IGh1Z2VwYWdlX3N1YnBvb2wgKmh1Z2V0bGJfZm9saW9fc3VicG9vbChjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKQogewogCXJldHVybiBmb2xpby0mZ3Q7X2h1Z2V0bGJfc3VicG9vbDsKIH0KQEAgLTg1Nyw3ICYjNDM7ODU2LDcgQEAgc3RhdGljIGlubGluZSBib29sIGFyY2hfaGFzX2h1Z2VfYm9vdG1lbV9hbGxvYyh2b2lkKQogfQogI2VuZGlmCiAKLXN0YXRpYyBpbmxpbmUgc3RydWN0IGhzdGF0ZSAqZm9saW9faHN0YXRlKHN0cnVjdCBmb2xpbyAqZm9saW8pCiYjNDM7c3RhdGljIGlubGluZSBzdHJ1Y3QgaHN0YXRlICpmb2xpb19oc3RhdGUoY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbykKIHsKIAlWTV9CVUdfT05fRk9MSU8oIWZvbGlvX3Rlc3RfaHVnZXRsYihmb2xpbyksIGZvbGlvKTsKIAlyZXR1cm4gc2l6ZV90b19oc3RhdGUoZm9saW9fc2l6ZShmb2xpbykpOwpAQCAtMTA3MCwxMSAmIzQzOzEwNjksNiBAQCB2b2lkIGh1Z2V0bGJfcmVnaXN0ZXJfbm9kZShzdHJ1Y3Qgbm9kZSAqbm9kZSk7CiB2b2lkIGh1Z2V0bGJfdW5yZWdpc3Rlcl9ub2RlKHN0cnVjdCBub2RlICpub2RlKTsKICNlbmRpZgogCi0vKgotICogQ2hlY2sgaWYgYSBnaXZlbiByYXcgQHBhZ2UgaW4gYSBodWdlcGFnZSBpcyBIV1BPSVNPTi4KLSAqLwotYm9vbCBpc19yYXdfaHdwb2lzb25fcGFnZV9pbl9odWdlcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSk7Ci0KIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBodWdlX3BhZ2VfbWFza19hbGlnbihzdHJ1Y3QgZmlsZSAqZmlsZSkKIHsKIAlyZXR1cm4gUEFHRV9NQVNLICZhbXA7IH5odWdlX3BhZ2VfbWFzayhoc3RhdGVfZmlsZShmaWxlKSk7CkBAIC0xMDg4LDcgJiM0MzsxMDgyLDcgQEAgc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGh1Z2VfcGFnZV9tYXNrX2FsaWduKHN0cnVjdCBmaWxlICpmaWxlKQogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW5saW5lIHN0cnVjdCBodWdlcGFnZV9zdWJwb29sICpodWdldGxiX2ZvbGlvX3N1YnBvb2woc3RydWN0IGZvbGlvICpmb2xpbykKJiM0MztzdGF0aWMgaW5saW5lIHN0cnVjdCBodWdlcGFnZV9zdWJwb29sICpodWdldGxiX2ZvbGlvX3N1YnBvb2woY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbykKIHsKIAlyZXR1cm4gTlVMTDsKIH0KQEAgLTExNTcsNyAmIzQzOzExNTEsNyBAQCBzdGF0aWMgaW5saW5lIHN0cnVjdCBoc3RhdGUgKmhzdGF0ZV92bWEoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpCiAJcmV0dXJuIE5VTEw7CiB9CiAKLXN0YXRpYyBpbmxpbmUgc3RydWN0IGhzdGF0ZSAqZm9saW9faHN0YXRlKHN0cnVjdCBmb2xpbyAqZm9saW8pCiYjNDM7c3RhdGljIGlubGluZSBzdHJ1Y3QgaHN0YXRlICpmb2xpb19oc3RhdGUoY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbykKIHsKIAlyZXR1cm4gTlVMTDsKIH0KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbW1fdHlwZXMuaCBiL2luY2x1ZGUvbGludXgvbW1fdHlwZXMuaAppbmRleCBiMThjMmIyZTdkMmM2NS4uZDdhOWIwZDhiYmRmYjEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbW1fdHlwZXMuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L21tX3R5cGVzLmgKQEAgLTM4Nyw3ICYjNDM7Mzg3LDcgQEAgdHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBtbV9pZF90OwogICogQF9odWdldGxiX3N1YnBvb2w6IERvIG5vdCB1c2UgZGlyZWN0bHksIHVzZSBhY2Nlc3NvciBpbiBodWdldGxiLmguCiAgKiBAX2h1Z2V0bGJfY2dyb3VwOiBEbyBub3QgdXNlIGRpcmVjdGx5LCB1c2UgYWNjZXNzb3IgaW4gaHVnZXRsYl9jZ3JvdXAuaC4KICAqIEBfaHVnZXRsYl9jZ3JvdXBfcnN2ZDogRG8gbm90IHVzZSBkaXJlY3RseSwgdXNlIGFjY2Vzc29yIGluIGh1Z2V0bGJfY2dyb3VwLmguCi0gKiBAX2h1Z2V0bGJfaHdwb2lzb246IERvIG5vdCB1c2UgZGlyZWN0bHksIGNhbGwgcmF3X2h3cF9saXN0X2hlYWQoKS4KJiM0MzsgKiBAaHVnZXRsYl9od3BvaXNvbjogTGlzdCBvZiBwYWdlcyB3aXRoIGh3cG9pc29uLgogICogQF9kZWZlcnJlZF9saXN0OiBGb2xpb3MgdG8gYmUgc3BsaXQgdW5kZXIgbWVtb3J5IHByZXNzdXJlLgogICogQF91bnVzZWRfc2xhYl9vYmpfZXh0czogUGxhY2Vob2xkZXIgdG8gbWF0Y2ggb2JqX2V4dHMgaW4gc3RydWN0IHNsYWIuCiAgKgpAQCAtNDk5LDcgJiM0Mzs0OTksNyBAQCBzdHJ1Y3QgZm9saW8gewogCQkJdm9pZCAqX2h1Z2V0bGJfc3VicG9vbDsKIAkJCXZvaWQgKl9odWdldGxiX2Nncm91cDsKIAkJCXZvaWQgKl9odWdldGxiX2Nncm91cF9yc3ZkOwotCQkJdm9pZCAqX2h1Z2V0bGJfaHdwb2lzb247CiYjNDM7CQkJc3RydWN0IGxsaXN0X2hlYWQgaHVnZXRsYl9od3BvaXNvbjsKIAkvKiBwcml2YXRlOiB0aGUgdW5pb24gd2l0aCBzdHJ1Y3QgcGFnZSBpcyB0cmFuc2l0aW9uYWwgKi8KIAkJfTsKIAkJc3RydWN0IHBhZ2UgX19wYWdlXzM7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaCBiL2luY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oCmluZGV4IDcyMjNmNmY0ZTJiNDAzLi5iMTQ2YzUyMjg3NDFjMCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmgKQEAgLTg5MywxNCAmIzQzOzg5MywxOSBAQCBzdGF0aWMgaW5saW5lIGludCBQYWdlVHJhbnNDb21wb3VuZChjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSkKIFRFU1RQQUdFRkxBR19GQUxTRShUcmFuc0NvbXBvdW5kLCB0cmFuc2NvbXBvdW5kKQogI2VuZGlmCiAKLSNpZiBkZWZpbmVkKENPTkZJR19NRU1PUllfRkFJTFVSRSkgJmFtcDsmYW1wOyBkZWZpbmVkKENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSkKJiM0MzsjaWYgZGVmaW5lZChDT05GSUdfTUVNT1JZX0ZBSUxVUkUpICZhbXA7JmFtcDsgZGVmaW5lZChDT05GSUdfTEFSR0VfRk9MSU8pCiAvKgotICogUGFnZUhhc0hXUG9pc29uZWQgaW5kaWNhdGVzIHRoYXQgYXQgbGVhc3Qgb25lIHN1YnBhZ2UgaXMgaHdwb2lzb25lZCBpbiB0aGUKLSAqIGNvbXBvdW5kIHBhZ2UuCiYjNDM7ICogZm9saW9faGFzX2h3cG9pc29uZWQgaW5kaWNhdGVzIHRoYXQgYXQgbGVhc3Qgb25lIHBhZ2UgaXMgaHdwb2lzb25lZCBpbiB0aGUKJiM0MzsgKiBmb2xpby4gIFRoYXQgcGFnZSB3aWxsIHVzdWFsbHkgYWxzbyBoYXZlIHRoZSBIV1BvaXNvbiBmbGFnIHNldCwgYnV0IHRoaXMKJiM0MzsgKiBpcyBub3QgcG9zc2libGUgZm9yIGZvbGlvcyB3aGljaCBoYXZlIEhWTyAoc2VlIG1lbW9yeS1mYWlsdXJlIGZvciB0aGUKJiM0MzsgKiBzY2hlbWUgdXNlZCBpbiB0aGF0IGNhc2UpLiAgWW91IHByb2JhYmx5IGRvbiYjMzk7dCB3YW50IHRvIGNhbGwgdGhpcyBkaXJlY3RseTsKJiM0MzsgKiB1c2UgZm9saW9faGFzX2h3cG9pc29uZWRfcGFnZSgpIGluc3RlYWQuCiAgKgogICogVGhpcyBmbGFnIGlzIHNldCBieSBod3BvaXNvbiBoYW5kbGVyLiAgQ2xlYXJlZCBieSBUSFAgc3BsaXQgb3IgZnJlZSBwYWdlLgogICovCiBGT0xJT19GTEFHKGhhc19od3BvaXNvbmVkLCBGT0xJT19TRUNPTkRfUEFHRSkKJiM0MztGT0xJT19URVNUX1NFVF9GTEFHKGhhc19od3BvaXNvbmVkLCBGT0xJT19TRUNPTkRfUEFHRSkKJiM0MztGT0xJT19URVNUX0NMRUFSX0ZMQUcoaGFzX2h3cG9pc29uZWQsIEZPTElPX1NFQ09ORF9QQUdFKQogI2Vsc2UKIEZPTElPX0ZMQUdfRkFMU0UoaGFzX2h3cG9pc29uZWQpCiAjZW5kaWYKQEAgLTEwNDEsOCAmIzQzOzEwNDYsMjUgQEAgUEFHRV9UWVBFX09QUyhTbGFiLCBzbGFiLCBzbGFiKQogCiAjaWZkZWYgQ09ORklHX0hVR0VUTEJfUEFHRQogRk9MSU9fVFlQRV9PUFMoaHVnZXRsYiwgaHVnZXRsYikKJiM0MzsKJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgZm9saW9fdGVzdF9odWdlX3BvaXNvbihjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKQomIzQzO3sKJiM0MzsJcmV0dXJuIChSRUFEX09OQ0UoZm9saW8tJmd0O3BhZ2UucGFnZV90eXBlKSAmZ3Q7Jmd0OyAyMykgPT0KJiM0MzsJCSgoUEdUWV9odWdldGxiICZsdDsmbHQ7IDEpIHwgMSk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBmb2xpb19zZXRfaHVnZV9wb2lzb24oc3RydWN0IGZvbGlvICpmb2xpbykKJiM0Mzt7CiYjNDM7CWZvbGlvLSZndDtwYWdlLnBhZ2VfdHlwZSB8PSAoMSAmbHQ7Jmx0OyAyMyk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBmb2xpb19jbGVhcl9odWdlX3BvaXNvbihzdHJ1Y3QgZm9saW8gKmZvbGlvKQomIzQzO3sKJiM0MzsJZm9saW8tJmd0O3BhZ2UucGFnZV90eXBlICZhbXA7PSB+KDEgJmx0OyZsdDsgMjMpOwomIzQzO30KICNlbHNlCiBGT0xJT19URVNUX0ZMQUdfRkFMU0UoaHVnZXRsYikKJiM0MztGT0xJT19URVNUX0ZMQUdfRkFMU0UoaHVnZV9wb2lzb24pCiAjZW5kaWYKIAogUEFHRV9UWVBFX09QUyhac21hbGxvYywgenNtYWxsb2MsIHpzbWFsbG9jKQpAQCAtMTA2OCwxMCAmIzQzOzEwOTAsMTQgQEAgc3RhdGljIGlubGluZSBib29sIFBhZ2VIdWdlKGNvbnN0IHN0cnVjdCBwYWdlICpwYWdlKQogCXJldHVybiBmb2xpb190ZXN0X2h1Z2V0bGIocGFnZV9mb2xpbyhwYWdlKSk7CiB9CiAKJiM0Mztib29sIGh1Z2V0bGJfcGFnZV9od3BvaXNvbihjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvLCBjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSk7CiYjNDM7Ym9vbCBodWdldGxiX3VucmVmX3BhZ2VfaHdwb2lzb24oY29uc3Qgc3RydWN0IHBhZ2UgKnBhZ2UpOwomIzQzOwogLyoKLSAqIENoZWNrIGlmIGEgcGFnZSBpcyBjdXJyZW50bHkgbWFya2VkIEhXUG9pc29uZWQuIE5vdGUgdGhhdCB0aGlzIGNoZWNrIGlzCi0gKiBiZXN0IGVmZm9ydCBvbmx5IGFuZCBpbmhlcmVudGx5IHJhY3k6IHRoZXJlIGlzIG5vIHdheSB0byBzeW5jaHJvbml6ZSB3aXRoCi0gKiBmYWlsaW5nIGhhcmR3YXJlLgomIzQzOyAqIENoZWNrIGlmIGEgcGFnZSBpcyBjdXJyZW50bHkgbWFya2VkIEhXUG9pc29uZWQuICBUaGlzIGNoZWNrIGlzIGJlc3QKJiM0MzsgKiBlZmZvcnQgb25seSBhbmQgaW5oZXJlbnRseSByYWN5OiB0aGVyZSBpcyBubyB3YXkgdG8gc3luY2hyb25pemUgd2l0aAomIzQzOyAqIGZhaWxpbmcgaGFyZHdhcmUuICBUaGUgY2FsbGVyIG1heSBub3QgaGF2ZSBhIHJlZmNvdW50IG9uIHRoZSBmb2xpbwomIzQzOyAqIGNvbnRhaW5pbmcgdGhlIHBhZ2UsIHNvIHdlIG11c3QgYmUgY2FyZWZ1bCB0byBub3QgdHJpcCBhbnkgYXNzZXJ0aW9ucy4KICAqLwogc3RhdGljIGlubGluZSBib29sIGlzX3BhZ2VfaHdwb2lzb24oY29uc3Qgc3RydWN0IHBhZ2UgKnBhZ2UpCiB7CkBAIC0xMDgwLDEzICYjNDM7MTEwNiwyNiBAQCBzdGF0aWMgaW5saW5lIGJvb2wgaXNfcGFnZV9od3BvaXNvbihjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSkKIAlpZiAoUGFnZUhXUG9pc29uKHBhZ2UpKQogCQlyZXR1cm4gdHJ1ZTsKIAlmb2xpbyA9IHBhZ2VfZm9saW8ocGFnZSk7Ci0JcmV0dXJuIGZvbGlvX3Rlc3RfaHVnZXRsYihmb2xpbykgJmFtcDsmYW1wOyBQYWdlSFdQb2lzb24oJmFtcDtmb2xpby0mZ3Q7cGFnZSk7CiYjNDM7CWlmIChmb2xpb190ZXN0X2h1Z2VfcG9pc29uKGZvbGlvKSkKJiM0MzsJCXJldHVybiBodWdldGxiX3VucmVmX3BhZ2VfaHdwb2lzb24ocGFnZSk7CiYjNDM7CS8qIEluIGNhc2Ugd2UgcmFjZWQgd2l0aCBodWdldGxiIHRyYW5zZmVycmluZyBmbGFncyAqLwomIzQzOwlyZXR1cm4gUGFnZUhXUG9pc29uKHBhZ2UpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgaXNfcmVmX3BhZ2VfaHdwb2lzb24oY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbywKJiM0MzsJCWNvbnN0IHN0cnVjdCBwYWdlICpwYWdlKQomIzQzO3sKJiM0MzsJaWYgKFBhZ2VIV1BvaXNvbihwYWdlKSkKJiM0MzsJCXJldHVybiB0cnVlOwomIzQzOwlpZiAoZm9saW9fdGVzdF9odWdldGxiKGZvbGlvKSkKJiM0MzsJCXJldHVybiBodWdldGxiX3BhZ2VfaHdwb2lzb24oZm9saW8sIHBhZ2UpOwomIzQzOwlyZXR1cm4gZmFsc2U7CiB9CiAKLXN0YXRpYyBpbmxpbmUgYm9vbCBmb2xpb19jb250YWluX2h3cG9pc29uZWRfcGFnZShzdHJ1Y3QgZm9saW8gKmZvbGlvKQomIzQzO3N0YXRpYyBpbmxpbmUgYm9vbCBmb2xpb19oYXNfaHdwb2lzb25lZF9wYWdlKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8pCiB7Ci0JcmV0dXJuIGZvbGlvX3Rlc3RfaHdwb2lzb24oZm9saW8pIHx8Ci0JICAgIChmb2xpb190ZXN0X2xhcmdlKGZvbGlvKSAmYW1wOyZhbXA7IGZvbGlvX3Rlc3RfaGFzX2h3cG9pc29uZWQoZm9saW8pKTsKJiM0MzsJcmV0dXJuIFBhZ2VIV1BvaXNvbigmYW1wO2ZvbGlvLSZndDtwYWdlKSB8fAomIzQzOwkgICAgICAgKGZvbGlvX3Rlc3RfbGFyZ2UoZm9saW8pICZhbXA7JmFtcDsgZm9saW9fdGVzdF9oYXNfaHdwb2lzb25lZChmb2xpbykpOwogfQogCiBib29sIGlzX2ZyZWVfYnVkZHlfcGFnZShjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BhZ2VtYXAuaCBiL2luY2x1ZGUvbGludXgvcGFnZW1hcC5oCmluZGV4IDJjMzcxOGQ1OTJkNmRkLi42ZmRlZTViMDM2MjFiOSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9wYWdlbWFwLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9wYWdlbWFwLmgKQEAgLTIxMCw2ICYjNDM7MjEwLDcgQEAgZW51bSBtYXBwaW5nX2ZsYWdzIHsKIAlBU19XUklURUJBQ0tfTUFZX0RFQURMT0NLX09OX1JFQ0xBSU0gPSA5LAogCUFTX0tFUk5FTF9GSUxFID0gMTAsCS8qIG1hcHBpbmcgZm9yIGEgZmFrZSBrZXJuZWwgZmlsZSB0aGF0IHNob3VsZG4mIzM5O3QKIAkJCQkgICBhY2NvdW50IHVzYWdlIHRvIHVzZXIgY2dyb3VwcyAqLwomIzQzOwlBU19BVVRIT1JJVEFUSVZFID0gMTEsCS8qIElmIHdlIG1pc3MgaW4gdGhlIHBhZ2UgY2FjaGUsIGl0JiMzOTtzIGEgaG9sZSAqLwogCS8qIEJpdHMgMTYtMjUgYXJlIHVzZWQgZm9yIEZPTElPX09SREVSICovCiAJQVNfRk9MSU9fT1JERVJfQklUUyA9IDUsCiAJQVNfRk9MSU9fT1JERVJfTUlOID0gMTYsCkBAIC0zNDUsNiAmIzQzOzM0NiwxNiBAQCBzdGF0aWMgaW5saW5lIGJvb2wgbWFwcGluZ193cml0ZWJhY2tfbWF5X2RlYWRsb2NrX29uX3JlY2xhaW0oY29uc3Qgc3RydWN0IGFkZHJlcwogCXJldHVybiB0ZXN0X2JpdChBU19XUklURUJBQ0tfTUFZX0RFQURMT0NLX09OX1JFQ0xBSU0sICZhbXA7bWFwcGluZy0mZ3Q7ZmxhZ3MpOwogfQogCiYjNDM7c3RhdGljIGlubGluZSB2b2lkIG1hcHBpbmdfc2V0X2F1dGhvcml0YXRpdmUoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcpCiYjNDM7ewomIzQzOwlzZXRfYml0KEFTX0FVVEhPUklUQVRJVkUsICZhbXA7bWFwcGluZy0mZ3Q7ZmxhZ3MpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgbWFwcGluZ19pc19hdXRob3JpdGF0aXZlKGNvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nKQomIzQzO3sKJiM0MzsJcmV0dXJuIHRlc3RfYml0KEFTX0FVVEhPUklUQVRJVkUsICZhbXA7bWFwcGluZy0mZ3Q7ZmxhZ3MpOwomIzQzO30KJiM0MzsKIHN0YXRpYyBpbmxpbmUgZ2ZwX3QgbWFwcGluZ19nZnBfbWFzayhjb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZykKIHsKIAlyZXR1cm4gbWFwcGluZy0mZ3Q7Z2ZwX21hc2s7CkBAIC0zNzMsNyAmIzQzOzM4NCw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBtYXBwaW5nX3NldF9nZnBfbWFzayhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbSwgZ2ZwX3QgbWFzaykKICAqIGFzc3VtcHRpb25zIGFib3V0IG1heGltdW0gb3JkZXIgaWYgVEhQIGFyZSBkaXNhYmxlZCwgYnV0IDggc2VlbXMgbGlrZQogICogYSBnb29kIG9yZGVyICh0aGF0JiMzOTtzIDFNQiBpZiB5b3UmIzM5O3JlIHVzaW5nIDRrQiBwYWdlcykKICAqLwotI2lmZGVmIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRQomIzQzOyNpZmRlZiBDT05GSUdfRklMRU1BUF9MQVJHRV9GT0xJTwogI2RlZmluZSBQUkVGRVJSRURfTUFYX1BBR0VDQUNIRV9PUkRFUglIUEFHRV9QTURfT1JERVIKICNlbHNlCiAjZGVmaW5lIFBSRUZFUlJFRF9NQVhfUEFHRUNBQ0hFX09SREVSCTgKQEAgLTM5NCw3ICYjNDM7NDA1LDcgQEAgc3RhdGljIGlubGluZSB2b2lkIG1hcHBpbmdfc2V0X2dmcF9tYXNrKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptLCBnZnBfdCBtYXNrKQogICovCiBzdGF0aWMgaW5saW5lIHNpemVfdCBtYXBwaW5nX21heF9mb2xpb19zaXplX3N1cHBvcnRlZCh2b2lkKQogewotCWlmIChJU19FTkFCTEVEKENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSkpCiYjNDM7CWlmIChJU19FTkFCTEVEKENPTkZJR19GSUxFTUFQX0xBUkdFX0ZPTElPKSkKIAkJcmV0dXJuIDFVICZsdDsmbHQ7IChQQUdFX1NISUZUICYjNDM7IE1BWF9QQUdFQ0FDSEVfT1JERVIpOwogCXJldHVybiBQQUdFX1NJWkU7CiB9CkBAIC00MDUsMjkgJiM0Mzs0MTYsMjMgQEAgc3RhdGljIGlubGluZSBzaXplX3QgbWFwcGluZ19tYXhfZm9saW9fc2l6ZV9zdXBwb3J0ZWQodm9pZCkKICAqIEBtaW46IE1pbmltdW0gZm9saW8gb3JkZXIgKGJldHdlZW4gMC1NQVhfUEFHRUNBQ0hFX09SREVSIGluY2x1c2l2ZSkuCiAgKiBAbWF4OiBNYXhpbXVtIGZvbGlvIG9yZGVyIChiZXR3ZWVuIEBtaW4tTUFYX1BBR0VDQUNIRV9PUkRFUiBpbmNsdXNpdmUpLgogICoKLSAqIFRoZSBmaWxlc3lzdGVtIHNob3VsZCBjYWxsIHRoaXMgZnVuY3Rpb24gaW4gaXRzIGlub2RlIGNvbnN0cnVjdG9yIHRvCi0gKiBpbmRpY2F0ZSB3aGljaCBiYXNlIHNpemUgKG1pbikgYW5kIG1heGltdW0gc2l6ZSAobWF4KSBvZiBmb2xpbyB0aGUgVkZTCi0gKiBjYW4gdXNlIHRvIGNhY2hlIHRoZSBjb250ZW50cyBvZiB0aGUgZmlsZS4gIFRoaXMgc2hvdWxkIG9ubHkgYmUgdXNlZAotICogaWYgdGhlIGZpbGVzeXN0ZW0gbmVlZHMgc3BlY2lhbCBoYW5kbGluZyBvZiBmb2xpbyBzaXplcyAoaWUgdGhlcmUgaXMKLSAqIHNvbWV0aGluZyB0aGUgY29yZSBjYW5ub3Qga25vdykuCiYjNDM7ICogVGhlIGZpbGVzeXN0ZW0gc2hvdWxkIGNhbGwgdGhpcyBmdW5jdGlvbiBpbiBpdHMgaW5vZGUgY29uc3RydWN0b3IKJiM0MzsgKiB0byBpbmRpY2F0ZSB3aGljaCBzaXplIGZvbGlvcyBjYW4gYmUgdXNlZCB0byBjYWNoZSB0aGUgY29udGVudHMgb2YKJiM0MzsgKiB0aGUgaW5vZGUuICBUaGlzIHNob3VsZCBvbmx5IGJlIHVzZWQgaWYgdGhlIGZpbGVzeXN0ZW0gbmVlZHMgc3BlY2lhbAomIzQzOyAqIGhhbmRsaW5nIG9mIGZvbGlvIHNpemVzIChpZSB0aGVyZSBpcyBzb21ldGhpbmcgdGhlIGNvcmUgY2Fubm90IGtub3cpLgogICogRG8gbm90IHR1bmUgaXQgYmFzZWQgb24sIGVnLCBpX3NpemUuCiAgKgomIzQzOyAqIGh1Z2V0bGIgY2FsbHMgdGhpcyB3aXRoIG9yZGVycyBsYXJnZXIgdGhhbiBNQVhfUEFHRUNBQ0hFX09SREVSLgomIzQzOyAqIE5vcm1hbCBmaWxlc3lzdGVtcyBzaG91bGQgbm90IGRvIHRoaXMuCiYjNDM7ICoKICAqIENvbnRleHQ6IFRoaXMgc2hvdWxkIG5vdCBiZSBjYWxsZWQgd2hpbGUgdGhlIGlub2RlIGlzIGFjdGl2ZSBhcyBpdAogICogaXMgbm9uLWF0b21pYy4KICAqLwogc3RhdGljIGlubGluZSB2b2lkIG1hcHBpbmdfc2V0X2ZvbGlvX29yZGVyX3JhbmdlKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLAotCQkJCQkJIHVuc2lnbmVkIGludCBtaW4sCi0JCQkJCQkgdW5zaWduZWQgaW50IG1heCkKJiM0MzsJCXVuc2lnbmVkIGludCBtaW4sIHVuc2lnbmVkIGludCBtYXgpCiB7Ci0JaWYgKCFJU19FTkFCTEVEKENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSkpCiYjNDM7CWlmICghSVNfRU5BQkxFRChDT05GSUdfRklMRU1BUF9MQVJHRV9GT0xJTykpCiAJCXJldHVybjsKLQotCWlmIChtaW4gJmd0OyBNQVhfUEFHRUNBQ0hFX09SREVSKQotCQltaW4gPSBNQVhfUEFHRUNBQ0hFX09SREVSOwotCi0JaWYgKG1heCAmZ3Q7IE1BWF9QQUdFQ0FDSEVfT1JERVIpCi0JCW1heCA9IE1BWF9QQUdFQ0FDSEVfT1JERVI7Ci0KIAlpZiAobWF4ICZsdDsgbWluKQogCQltYXggPSBtaW47CiAKQEAgLTQ2MCw3ICYjNDM7NDY1LDcgQEAgc3RhdGljIGlubGluZSB2b2lkIG1hcHBpbmdfc2V0X2xhcmdlX2ZvbGlvcyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZykKIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50CiBtYXBwaW5nX21heF9mb2xpb19vcmRlcihjb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZykKIHsKLQlpZiAoIUlTX0VOQUJMRUQoQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFKSkKJiM0MzsJaWYgKCFJU19FTkFCTEVEKENPTkZJR19GSUxFTUFQX0xBUkdFX0ZPTElPKSkKIAkJcmV0dXJuIDA7CiAJcmV0dXJuIChtYXBwaW5nLSZndDtmbGFncyAmYW1wOyBBU19GT0xJT19PUkRFUl9NQVhfTUFTSykgJmd0OyZndDsgQVNfRk9MSU9fT1JERVJfTUFYOwogfQpAQCAtNDY4LDcgJiM0Mzs0NzMsNyBAQCBtYXBwaW5nX21heF9mb2xpb19vcmRlcihjb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZykKIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50CiBtYXBwaW5nX21pbl9mb2xpb19vcmRlcihjb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZykKIHsKLQlpZiAoIUlTX0VOQUJMRUQoQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFKSkKJiM0MzsJaWYgKCFJU19FTkFCTEVEKENPTkZJR19GSUxFTUFQX0xBUkdFX0ZPTElPKSkKIAkJcmV0dXJuIDA7CiAJcmV0dXJuIChtYXBwaW5nLSZndDtmbGFncyAmYW1wOyBBU19GT0xJT19PUkRFUl9NSU5fTUFTSykgJmd0OyZndDsgQVNfRk9MSU9fT1JERVJfTUlOOwogfQpAQCAtNTI0LDcgJiM0Mzs1MjksNyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgbWFwcGluZ19sYXJnZV9mb2xpb19zdXBwb3J0KGNvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaQogICoKICAqIFJldHVybjogVHJ1ZSBpZiBQTUQtc2l6ZWQgZm9saW9zIGFyZSBzdXBwb3J0ZWQsIG90aGVyd2lzZSBmYWxzZS4KICAqLwotI2lmZGVmIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRQomIzQzOyNpZmRlZiBDT05GSUdfRklMRU1BUF9MQVJHRV9GT0xJTwogc3RhdGljIGlubGluZSBib29sIG1hcHBpbmdfcG1kX2ZvbGlvX3N1cHBvcnQoY29uc3Qgc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcpCiB7CiAJLyogQVNfRk9MSU9fT1JERVIgaXMgb25seSByZWFzb25hYmxlIGZvciBwYWdlY2FjaGUgZm9saW9zICovCmRpZmYgLS1naXQgYS9tbS9LY29uZmlnIGIvbW0vS2NvbmZpZwppbmRleCA5ZTBjYTQ4MjQ5MDU0Zi4uZTY2NmRkMTRjYTBjM2QgMTAwNjQ0Ci0tLSBhL21tL0tjb25maWcKJiM0MzsmIzQzOyYjNDM7IGIvbW0vS2NvbmZpZwpAQCAtODQzLDExICYjNDM7ODQzLDE1IEBAIGNvbmZpZyBQRVJTSVNURU5UX0hVR0VfWkVST19GT0xJTwogY29uZmlnIE1NX0lECiAJZGVmX2Jvb2wgbgogCiYjNDM7Y29uZmlnIExBUkdFX0ZPTElPCiYjNDM7CWRlZl9ib29sIG4KJiM0MzsJc2VsZWN0IFhBUlJBWV9NVUxUSQomIzQzOwogbWVudWNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRQogCWJvb2wgJiMzNDtUcmFuc3BhcmVudCBIdWdlcGFnZSBTdXBwb3J0JiMzNDsKIAlkZXBlbmRzIG9uIEhBVkVfQVJDSF9UUkFOU1BBUkVOVF9IVUdFUEFHRSAmYW1wOyZhbXA7ICFQUkVFTVBUX1JUCiAJc2VsZWN0IENPTVBBQ1RJT04KLQlzZWxlY3QgWEFSUkFZX01VTFRJCiYjNDM7CXNlbGVjdCBMQVJHRV9GT0xJTwogCXNlbGVjdCBNTV9JRAogCWhlbHAKIAkgIFRyYW5zcGFyZW50IEh1Z2VwYWdlcyBhbGxvd3MgdGhlIGtlcm5lbCB0byB1c2UgaHVnZSBwYWdlcyBhbmQKZGlmZiAtLWdpdCBhL21tL2ZpbGVtYXAuYyBiL21tL2ZpbGVtYXAuYwppbmRleCA1OGViOWQyNDA2NDM0OC4uNWE4Y2MyMGU2MjRlNGQgMTAwNjQ0Ci0tLSBhL21tL2ZpbGVtYXAuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9maWxlbWFwLmMKQEAgLTI0ODMsNiAmIzQzOzI0ODMsOCBAQCBzdGF0aWMgdm9pZCBmaWxlbWFwX2dldF9yZWFkX2JhdGNoKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLAogCiAJCWlmICghZm9saW9fYmF0Y2hfYWRkKGZiYXRjaCwgZm9saW8pKQogCQkJYnJlYWs7CiYjNDM7CQlpZiAoZm9saW9faGFzX2h3cG9pc29uZWRfcGFnZShmb2xpbykpCiYjNDM7CQkJYnJlYWs7CiAJCWlmICghZm9saW9fdGVzdF91cHRvZGF0ZShmb2xpbykpCiAJCQlicmVhazsKIAkJaWYgKGZvbGlvX3Rlc3RfcmVhZGFoZWFkKGZvbGlvKSkKQEAgLTI2OTUsNiAmIzQzOzI2OTcsOCBAQCBzdGF0aWMgaW50IGZpbGVtYXBfZ2V0X3BhZ2VzKHN0cnVjdCBraW9jYiAqaW9jYiwgc2l6ZV90IGNvdW50LAogCWlmICghZm9saW9fYmF0Y2hfY291bnQoZmJhdGNoKSkgewogCQlERUZJTkVfUkVBREFIRUFEKHJhY3RsLCBmaWxwLCAmYW1wO2ZpbHAtJmd0O2ZfcmEsIG1hcHBpbmcsIGluZGV4KTsKIAomIzQzOwkJaWYgKG1hcHBpbmdfaXNfYXV0aG9yaXRhdGl2ZShtYXBwaW5nKSkKJiM0MzsJCQlyZXR1cm4gMDsKIAkJaWYgKGlvY2ItJmd0O2tpX2ZsYWdzICZhbXA7IElPQ0JfTk9JTykKIAkJCXJldHVybiAtRUFHQUlOOwogCQlpZiAoaW9jYi0mZ3Q7a2lfZmxhZ3MgJmFtcDsgSU9DQl9OT1dBSVQpCkBAIC0yNzQ5LDYgJiM0MzsyNzUzLDI5IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBwb3Nfc2FtZV9mb2xpbyhsb2ZmX3QgcG9zMSwgbG9mZl90IHBvczIsIHN0cnVjdCBmb2xpbyAqZm9saW8pCiAJcmV0dXJuIChwb3MxICZndDsmZ3Q7IHNoaWZ0ID09IHBvczIgJmd0OyZndDsgc2hpZnQpOwogfQogCiYjNDM7c3RhdGljIHNpemVfdCBhZGp1c3RfcmFuZ2VfaHdwb2lzb24oY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbywgc2l6ZV90IG9mZnNldCwKJiM0MzsJCXNpemVfdCBieXRlcykKJiM0Mzt7CiYjNDM7CWNvbnN0IHN0cnVjdCBwYWdlICpwYWdlID0gZm9saW9fcGFnZShmb2xpbywgb2Zmc2V0IC8gUEFHRV9TSVpFKTsKJiM0MzsJc2l6ZV90IHNhZmVfYnl0ZXM7CiYjNDM7CiYjNDM7CWlmICghZm9saW9faGFzX2h3cG9pc29uZWRfcGFnZShmb2xpbykpCiYjNDM7CQlyZXR1cm4gYnl0ZXM7CiYjNDM7CWlmIChpc19yZWZfcGFnZV9od3BvaXNvbihmb2xpbywgcGFnZSkpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJLyogU2FmZSB0byByZWFkIHRoZSByZW1haW5pbmcgYnl0ZXMgaW4gdGhpcyBwYWdlLiAqLwomIzQzOwlzYWZlX2J5dGVzID0gUEFHRV9TSVpFIC0gKG9mZnNldCAlIFBBR0VfU0laRSk7CiYjNDM7CXBhZ2UmIzQzOyYjNDM7OwomIzQzOwomIzQzOwkvKiBDaGVjayBlYWNoIHJlbWFpbmluZyBwYWdlIGFzIGxvbmcgYXMgd2UgYXJlIG5vdCBkb25lIHlldC4gKi8KJiM0MzsJZm9yICg7IHNhZmVfYnl0ZXMgJmx0OyBieXRlczsgc2FmZV9ieXRlcyAmIzQzOz0gUEFHRV9TSVpFLCBwYWdlJiM0MzsmIzQzOykKJiM0MzsJCWlmIChpc19yZWZfcGFnZV9od3BvaXNvbihmb2xpbywgcGFnZSkpCiYjNDM7CQkJYnJlYWs7CiYjNDM7CiYjNDM7CXJldHVybiBtaW4oc2FmZV9ieXRlcywgYnl0ZXMpOwomIzQzO30KJiM0MzsKIHN0YXRpYyB2b2lkIGZpbGVtYXBfZW5kX2Ryb3BiZWhpbmRfcmVhZChzdHJ1Y3QgZm9saW8gKmZvbGlvKQogewogCWlmICghZm9saW9fdGVzdF9kcm9wYmVoaW5kKGZvbGlvKSkKQEAgLTI4MjgsNiAmIzQzOzI4NTUsMjIgQEAgc3NpemVfdCBmaWxlbWFwX3JlYWQoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsCiAJCQlnb3RvIHB1dF9mb2xpb3M7CiAJCWVuZF9vZmZzZXQgPSBtaW5fdChsb2ZmX3QsIGlzaXplLCBpb2NiLSZndDtraV9wb3MgJiM0MzsgaXRlci0mZ3Q7Y291bnQpOwogCiYjNDM7CQlpZiAoIWZvbGlvX2JhdGNoX2NvdW50KCZhbXA7ZmJhdGNoKSkgewomIzQzOwkJCXNpemVfdCBmc2l6ZSA9IG1hcHBpbmdfbWluX2ZvbGlvX25yYnl0ZXMobWFwcGluZyk7CiYjNDM7CQkJc2l6ZV90IG9mZnNldCA9IGlvY2ItJmd0O2tpX3BvcyAmYW1wOyAoZnNpemUgLSAxKTsKJiM0MzsJCQlzaXplX3QgYnl0ZXMgPSBtaW5fdChsb2ZmX3QsIGVuZF9vZmZzZXQgLSBpb2NiLSZndDtraV9wb3MsCiYjNDM7CQkJCQkgICAgIGZzaXplIC0gb2Zmc2V0KTsKJiM0MzsJCQlzaXplX3QgY29waWVkID0gaW92X2l0ZXJfemVybyhieXRlcywgaXRlcik7CiYjNDM7CiYjNDM7CQkJYWxyZWFkeV9yZWFkICYjNDM7PSBjb3BpZWQ7CiYjNDM7CQkJaW9jYi0mZ3Q7a2lfcG9zICYjNDM7PSBjb3BpZWQ7CiYjNDM7CQkJbGFzdF9wb3MgPSBpb2NiLSZndDtraV9wb3M7CiYjNDM7CiYjNDM7CQkJaWYgKGNvcGllZCAmbHQ7IGJ5dGVzKQomIzQzOwkJCQllcnJvciA9IC1FRkFVTFQ7CiYjNDM7CQkJY29udGludWU7CiYjNDM7CQl9CiYjNDM7CiAJCS8qCiAJCSAqIE9uY2Ugd2Ugc3RhcnQgY29weWluZyBkYXRhLCB3ZSBkb24mIzM5O3Qgd2FudCB0byBiZSB0b3VjaGluZyBhbnkKIAkJICogY2FjaGVsaW5lcyB0aGF0IG1pZ2h0IGJlIGNvbnRlbmRlZDoKQEAgLTI4NjIsMTQgJiM0MzsyOTA1LDE4IEBAIHNzaXplX3QgZmlsZW1hcF9yZWFkKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICppdGVyLAogCQkJaWYgKHdyaXRhYmx5X21hcHBlZCkKIAkJCQlmbHVzaF9kY2FjaGVfZm9saW8oZm9saW8pOwogCi0JCQljb3BpZWQgPSBjb3B5X2ZvbGlvX3RvX2l0ZXIoZm9saW8sIG9mZnNldCwgYnl0ZXMsIGl0ZXIpOwomIzQzOwkJCWNvcGllZCA9IGFkanVzdF9yYW5nZV9od3BvaXNvbihmb2xpbywgb2Zmc2V0LCBieXRlcyk7CiYjNDM7CQkJaWYgKGNvcGllZCAmbHQ7IGJ5dGVzKQomIzQzOwkJCQllcnJvciA9IC1FSU87CiYjNDM7CQkJY29waWVkID0gY29weV9mb2xpb190b19pdGVyKGZvbGlvLCBvZmZzZXQsIGNvcGllZCwgaXRlcik7CiAKIAkJCWFscmVhZHlfcmVhZCAmIzQzOz0gY29waWVkOwogCQkJaW9jYi0mZ3Q7a2lfcG9zICYjNDM7PSBjb3BpZWQ7CiAJCQlsYXN0X3BvcyA9IGlvY2ItJmd0O2tpX3BvczsKIAogCQkJaWYgKGNvcGllZCAmbHQ7IGJ5dGVzKSB7Ci0JCQkJZXJyb3IgPSAtRUZBVUxUOwomIzQzOwkJCQlpZiAoIWVycm9yKQomIzQzOwkJCQkJZXJyb3IgPSAtRUZBVUxUOwogCQkJCWJyZWFrOwogCQkJfQogCQl9CmRpZmYgLS1naXQgYS9tbS9odWdlX21lbW9yeS5jIGIvbW0vaHVnZV9tZW1vcnkuYwppbmRleCAyYmNjYjBhNTNhMGE2MC4uMzUzMzQwMzA5MTA3NGMgMTAwNjQ0Ci0tLSBhL21tL2h1Z2VfbWVtb3J5LmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vaHVnZV9tZW1vcnkuYwpAQCAtNDQxMyw3ICYjNDM7NDQxMyw3IEBAIHN0YXRpYyBib29sIHRocF91bmRlcnVzZWQoc3RydWN0IGZvbGlvICpmb2xpbykKIAlpZiAoa2h1Z2VwYWdlZF9tYXhfcHRlc19ub25lID09IEhQQUdFX1BNRF9OUiAtIDEpCiAJCXJldHVybiBmYWxzZTsKIAotCWlmIChmb2xpb19jb250YWluX2h3cG9pc29uZWRfcGFnZShmb2xpbykpCiYjNDM7CWlmIChmb2xpb19oYXNfaHdwb2lzb25lZF9wYWdlKGZvbGlvKSkKIAkJcmV0dXJuIGZhbHNlOwogCiAJZm9yIChpID0gMDsgaSAmbHQ7IGZvbGlvX25yX3BhZ2VzKGZvbGlvKTsgaSYjNDM7JiM0MzspIHsKZGlmZiAtLWdpdCBhL21tL2h1Z2V0bGIuYyBiL21tL2h1Z2V0bGIuYwppbmRleCA1NzEyMTJiODA4MzVlYy4uYWFhYzZlMmFmNGMyNGEgMTAwNjQ0Ci0tLSBhL21tL2h1Z2V0bGIuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9odWdldGxiLmMKQEAgLTEyNTUsNyAmIzQzOzEyNTUsNyBAQCBzdGF0aWMgc3RydWN0IGZvbGlvICpkZXF1ZXVlX2h1Z2V0bGJfZm9saW9fbm9kZV9leGFjdChzdHJ1Y3QgaHN0YXRlICpoLAogCQlpZiAocGluICZhbXA7JmFtcDsgIWZvbGlvX2lzX2xvbmd0ZXJtX3Bpbm5hYmxlKGZvbGlvKSkKIAkJCWNvbnRpbnVlOwogCi0JCWlmIChmb2xpb190ZXN0X2h3cG9pc29uKGZvbGlvKSkKJiM0MzsJCWlmIChmb2xpb190ZXN0X2hhc19od3BvaXNvbmVkKGZvbGlvKSkKIAkJCWNvbnRpbnVlOwogCiAJCWlmIChpc19taWdyYXRlX2lzb2xhdGVfcGFnZSgmYW1wO2ZvbGlvLSZndDtwYWdlKSkKQEAgLTE0OTgsMTAgJiM0MzsxNDk4LDEwIEBAIHN0YXRpYyB2b2lkIF9fdXBkYXRlX2FuZF9mcmVlX2h1Z2V0bGJfZm9saW8oc3RydWN0IGhzdGF0ZSAqaCwKIAl9CiAKIAkvKgotCSAqIE1vdmUgUGFnZUhXUG9pc29uIGZsYWcgZnJvbSBoZWFkIHBhZ2UgdG8gdGhlIHJhdyBlcnJvciBwYWdlcywKLQkgKiB3aGljaCBtYWtlcyBhbnkgaGVhbHRoeSBzdWJwYWdlcyByZXVzYWJsZS4KJiM0MzsJICogTW92ZSBIV1BvaXNvbiBmbGFnIHRvIGVhY2ggZXJyb3IgcGFnZQomIzQzOwkgKiB3aGljaCBtYWtlcyBhbnkgaGVhbHRoeSBwYWdlcyByZXVzYWJsZS4KIAkgKi8KLQlpZiAodW5saWtlbHkoZm9saW9fdGVzdF9od3BvaXNvbihmb2xpbykpKQomIzQzOwlpZiAodW5saWtlbHkoZm9saW9fdGVzdF9oYXNfaHdwb2lzb25lZChmb2xpbykpKQogCQlmb2xpb19jbGVhcl9odWdldGxiX2h3cG9pc29uKGZvbGlvKTsKIAogCVZNX0JVR19PTl9GT0xJTyhmb2xpb19yZWZfY291bnQoZm9saW8pLCBmb2xpbyk7CkBAIC0xNzc1LDcgJiM0MzsxNzc1LDcgQEAgdm9pZCBpbml0X25ld19odWdldGxiX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8pCiAgKiBzdGFibGUuICBEdWUgdG8gbG9ja2luZyBvcmRlciwgd2UgY2FuIG9ubHkgdHJ5bG9ja193cml0ZS4gIElmIHdlIGNhbgogICogbm90IGdldCB0aGUgbG9jaywgc2ltcGx5IHJldHVybiBOVUxMIHRvIGNhbGxlci4KICAqLwotc3RydWN0IGFkZHJlc3Nfc3BhY2UgKmh1Z2V0bGJfZm9saW9fbWFwcGluZ19sb2NrX3dyaXRlKHN0cnVjdCBmb2xpbyAqZm9saW8pCiYjNDM7c3RydWN0IGFkZHJlc3Nfc3BhY2UgKmh1Z2V0bGJfZm9saW9fbWFwcGluZ19sb2NrX3dyaXRlKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8pCiB7CiAJc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcgPSBmb2xpb19tYXBwaW5nKGZvbGlvKTsKIApAQCAtMzk5OCw3ICYjNDM7Mzk5OCw3IEBAIGxvbmcgZGVtb3RlX3Bvb2xfaHVnZV9wYWdlKHN0cnVjdCBoc3RhdGUgKnNyYywgbm9kZW1hc2tfdCAqbm9kZXNfYWxsb3dlZCwKIAkJc3RydWN0IGZvbGlvICpmb2xpbywgKm5leHQ7CiAKIAkJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGZvbGlvLCBuZXh0LCAmYW1wO3NyYy0mZ3Q7aHVnZXBhZ2VfZnJlZWxpc3RzW25vZGVdLCBscnUpIHsKLQkJCWlmIChmb2xpb190ZXN0X2h3cG9pc29uKGZvbGlvKSkKJiM0MzsJCQlpZiAoZm9saW9fdGVzdF9oYXNfaHdwb2lzb25lZChmb2xpbykpCiAJCQkJY29udGludWU7CiAKIAkJCXJlbW92ZV9odWdldGxiX2ZvbGlvKHNyYywgZm9saW8sIGZhbHNlKTsKQEAgLTU4MDksNyAmIzQzOzU4MDksNyBAQCBzdGF0aWMgdm1fZmF1bHRfdCBodWdldGxiX25vX3BhZ2Uoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsCiAJCSAqIGRvbiYjMzk7dCBoYXZlIGh3cG9pc29uZWQgc3dhcCBlbnRyeSBmb3IgZXJyb3JlZCB2aXJ0dWFsIGFkZHJlc3MuCiAJCSAqIFNvIHdlIG5lZWQgdG8gYmxvY2sgaHVnZXBhZ2UgZmF1bHQgYnkgUEdfaHdwb2lzb24gYml0IGNoZWNrLgogCQkgKi8KLQkJaWYgKHVubGlrZWx5KGZvbGlvX3Rlc3RfaHdwb2lzb24oZm9saW8pKSkgewomIzQzOwkJaWYgKHVubGlrZWx5KGZvbGlvX3Rlc3RfaGFzX2h3cG9pc29uZWQoZm9saW8pKSkgewogCQkJcmV0ID0gVk1fRkFVTFRfSFdQT0lTT05fTEFSR0UgfAogCQkJCVZNX0ZBVUxUX1NFVF9ISU5ERVgoaHN0YXRlX2luZGV4KGgpKTsKIAkJCWdvdG8gYmFja291dF91bmxvY2tlZDsKQEAgLTYzMTgsNyAmIzQzOzYzMTgsNyBAQCBpbnQgaHVnZXRsYl9tZmlsbF9hdG9taWNfcHRlKHB0ZV90ICpkc3RfcHRlLAogCXB0bCA9IGh1Z2VfcHRlX2xvY2soaCwgZHN0X21tLCBkc3RfcHRlKTsKIAogCXJldCA9IC1FSU87Ci0JaWYgKGZvbGlvX3Rlc3RfaHdwb2lzb24oZm9saW8pKQomIzQzOwlpZiAoZm9saW9fdGVzdF9oYXNfaHdwb2lzb25lZChmb2xpbykpCiAJCWdvdG8gb3V0X3JlbGVhc2VfdW5sb2NrOwogCiAJcmV0ID0gLUVFWElTVDsKZGlmZiAtLWdpdCBhL21tL21lbW9yeS1mYWlsdXJlLmMgYi9tbS9tZW1vcnktZmFpbHVyZS5jCmluZGV4IDUxNTA4YTU1YzQwNTVlLi43M2ViYmM5MzU2NjE4MiAxMDA2NDQKLS0tIGEvbW0vbWVtb3J5LWZhaWx1cmUuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9tZW1vcnktZmFpbHVyZS5jCkBAIC0xODEwLDUwICYjNDM7MTgxMCw2NSBAQCBFWFBPUlRfU1lNQk9MX0dQTChtZl9kYXhfa2lsbF9wcm9jcyk7CiAKIC8qCiAgKiBTdHJ1Y3QgcmF3X2h3cF9wYWdlIHJlcHJlc2VudHMgaW5mb3JtYXRpb24gYWJvdXQgJiMzNDtyYXcgZXJyb3IgcGFnZSYjMzQ7LAotICogY29uc3RydWN0aW5nIHNpbmdseSBsaW5rZWQgbGlzdCBmcm9tIC0mZ3Q7X2h1Z2V0bGJfaHdwb2lzb24gZmllbGQgb2YgZm9saW8uCiYjNDM7ICogY29uc3RydWN0aW5nIHNpbmdseSBsaW5rZWQgbGlzdCBmcm9tIGZvbGlvLSZndDtodWdldGxiX2h3cG9pc29uIGZpZWxkLgogICovCiBzdHJ1Y3QgcmF3X2h3cF9wYWdlIHsKIAlzdHJ1Y3QgbGxpc3Rfbm9kZSBub2RlOwogCXN0cnVjdCBwYWdlICpwYWdlOwogfTsKIAotc3RhdGljIGlubGluZSBzdHJ1Y3QgbGxpc3RfaGVhZCAqcmF3X2h3cF9saXN0X2hlYWQoc3RydWN0IGZvbGlvICpmb2xpbykKJiM0MztzdGF0aWMgYm9vbCBwcmVjaXNlX3BhZ2VfcG9pc29uZWQoY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbywKJiM0MzsJCWNvbnN0IHN0cnVjdCBwYWdlICpwYWdlKQogewotCXJldHVybiAoc3RydWN0IGxsaXN0X2hlYWQgKikmYW1wO2ZvbGlvLSZndDtfaHVnZXRsYl9od3BvaXNvbjsKLX0KLQotYm9vbCBpc19yYXdfaHdwb2lzb25fcGFnZV9pbl9odWdlcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSkKLXsKLQlzdHJ1Y3QgbGxpc3RfaGVhZCAqcmF3X2h3cF9oZWFkOwotCXN0cnVjdCByYXdfaHdwX3BhZ2UgKnA7Ci0Jc3RydWN0IGZvbGlvICpmb2xpbyA9IHBhZ2VfZm9saW8ocGFnZSk7Ci0JYm9vbCByZXQgPSBmYWxzZTsKLQotCWlmICghZm9saW9fdGVzdF9od3BvaXNvbihmb2xpbykpCi0JCXJldHVybiBmYWxzZTsKLQotCWlmICghZm9saW9fdGVzdF9odWdldGxiKGZvbGlvKSkKLQkJcmV0dXJuIFBhZ2VIV1BvaXNvbihwYWdlKTsKJiM0MzsJY29uc3Qgc3RydWN0IGxsaXN0X2hlYWQgKmxpc3QgPSAmYW1wO2ZvbGlvLSZndDtodWdldGxiX2h3cG9pc29uOwomIzQzOwljb25zdCBzdHJ1Y3QgcmF3X2h3cF9wYWdlICpwOwogCiAJLyoKLQkgKiBXaGVuIFJhd0h3cFVucmVsaWFibGUgaXMgc2V0LCBrZXJuZWwgbG9zdCB0cmFjayBvZiB3aGljaCBzdWJwYWdlcwotCSAqIGFyZSBIV1BPSVNPTi4gU28gcmV0dXJuIGFzIGlmIEFMTCBzdWJwYWdlcyBhcmUgSFdQT0lTT05lZC4KJiM0MzsJICogV2hlbiBSYXdId3BVbnJlbGlhYmxlIGlzIHNldCwga2VybmVsIGxvc3QgdHJhY2sgb2Ygd2hpY2ggcGFnZXMKJiM0MzsJICogYXJlIEhXUE9JU09OLiBTbyByZXR1cm4gYXMgaWYgQUxMIHBhZ2VzIGFyZSBIV1BPSVNPTmVkLgogCSAqLwogCWlmIChmb2xpb190ZXN0X2h1Z2V0bGJfcmF3X2h3cF91bnJlbGlhYmxlKGZvbGlvKSkKIAkJcmV0dXJuIHRydWU7CiAKLQltdXRleF9sb2NrKCZhbXA7bWZfbXV0ZXgpOwotCi0JcmF3X2h3cF9oZWFkID0gcmF3X2h3cF9saXN0X2hlYWQoZm9saW8pOwotCWxsaXN0X2Zvcl9lYWNoX2VudHJ5KHAsIHJhd19od3BfaGVhZC0mZ3Q7Zmlyc3QsIG5vZGUpIHsKLQkJaWYgKHBhZ2UgPT0gcC0mZ3Q7cGFnZSkgewotCQkJcmV0ID0gdHJ1ZTsKLQkJCWJyZWFrOwotCQl9CiYjNDM7CWxsaXN0X2Zvcl9lYWNoX2VudHJ5KHAsIFJFQURfT05DRShsaXN0LSZndDtmaXJzdCksIG5vZGUpIHsKJiM0MzsJCWlmIChwYWdlID09IHAtJmd0O3BhZ2UpCiYjNDM7CQkJcmV0dXJuIHRydWU7CiAJfQogCi0JbXV0ZXhfdW5sb2NrKCZhbXA7bWZfbXV0ZXgpOwomIzQzOwlyZXR1cm4gZmFsc2U7CiYjNDM7fQogCiYjNDM7LyoKJiM0MzsgKiBDaGVjayBpZiBhIGdpdmVuIEBwYWdlIGluIGEgaHVnZXRsYiBmb2xpbyBpcyBIV1BPSVNPTi4KJiM0MzsgKi8KJiM0Mztib29sIGh1Z2V0bGJfcGFnZV9od3BvaXNvbihjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvLCBjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSkKJiM0Mzt7CiYjNDM7CWlmICghZm9saW9fdGVzdF9oYXNfaHdwb2lzb25lZChmb2xpbykpCiYjNDM7CQlyZXR1cm4gZmFsc2U7CiYjNDM7CiYjNDM7CXJldHVybiBwcmVjaXNlX3BhZ2VfcG9pc29uZWQoZm9saW8sIHBhZ2UpOwomIzQzO30KJiM0MzsKJiM0MzsvKgomIzQzOyAqIFdlIGhhdmUgbm8gcmVmZXJlbmNlIG9uIHRoZSBmb2xpbyBjb250YWluaW5nIHRoaXMgcGFnZS4KJiM0MzsgKiBUaGUgaHVnZXRsYl9sb2NrIGtlZXBzIGh1Z2V0bGIgZm9saW9zIGZyb20gYmVpbmcgZnJlZWQuCiYjNDM7ICovCiYjNDM7Ym9vbCBodWdldGxiX3VucmVmX3BhZ2VfaHdwb2lzb24oY29uc3Qgc3RydWN0IHBhZ2UgKnBhZ2UpCiYjNDM7ewomIzQzOwljb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvOwomIzQzOwl1bnNpZ25lZCBsb25nIGZsYWdzOwomIzQzOwlib29sIHJldDsKJiM0MzsKJiM0MzsJc3Bpbl9sb2NrX2lycXNhdmUoJmFtcDtodWdldGxiX2xvY2ssIGZsYWdzKTsKJiM0MzsJZm9saW8gPSBwYWdlX2ZvbGlvKHBhZ2UpOwomIzQzOwlpZiAoIWZvbGlvX3Rlc3RfaHVnZV9wb2lzb24oZm9saW8pKSB7CiYjNDM7CQlyZXQgPSBQYWdlSFdQb2lzb24ocGFnZSk7CiYjNDM7CQlnb3RvIHVubG9jazsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXQgPSBwcmVjaXNlX3BhZ2VfcG9pc29uZWQoZm9saW8sIHBhZ2UpOwomIzQzO3VubG9jazoKJiM0MzsJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYW1wO2h1Z2V0bGJfbG9jaywgZmxhZ3MpOwogCXJldHVybiByZXQ7CiB9CiAKQEAgLTE4NjMsNyAmIzQzOzE4NzgsNyBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBfX2ZvbGlvX2ZyZWVfcmF3X2h3cChzdHJ1Y3QgZm9saW8gKmZvbGlvLCBib29sIG1vdmVfZmxhZykKIAlzdHJ1Y3QgcmF3X2h3cF9wYWdlICpwLCAqbmV4dDsKIAl1bnNpZ25lZCBsb25nIGNvdW50ID0gMDsKIAotCWhlYWQgPSBsbGlzdF9kZWxfYWxsKHJhd19od3BfbGlzdF9oZWFkKGZvbGlvKSk7CiYjNDM7CWhlYWQgPSBsbGlzdF9kZWxfYWxsKCZhbXA7Zm9saW8tJmd0O2h1Z2V0bGJfaHdwb2lzb24pOwogCWxsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocCwgbmV4dCwgaGVhZCwgbm9kZSkgewogCQlpZiAobW92ZV9mbGFnKQogCQkJU2V0UGFnZUhXUG9pc29uKHAtJmd0O3BhZ2UpOwpAQCAtMTg4MSwyNiAmIzQzOzE4OTYsNDEgQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgX19mb2xpb19mcmVlX3Jhd19od3Aoc3RydWN0IGZvbGlvICpmb2xpbywgYm9vbCBtb3ZlX2ZsYWcpCiAjZGVmaW5lCU1GX0hVR0VUTEJfRk9MSU9fUFJFX1BPSVNPTkVECTMJLyogZm9saW8gYWxyZWFkeSBwb2lzb25lZCAqLwogI2RlZmluZQlNRl9IVUdFVExCX1BBR0VfUFJFX1BPSVNPTkVECTQJLyogZXhhY3QgcGFnZSBhbHJlYWR5IHBvaXNvbmVkICovCiAjZGVmaW5lCU1GX0hVR0VUTEJfUkVUUlkJCTUJLyogaHVnZXBhZ2UgaXMgYnVzeSwgcmV0cnkgKi8KJiM0MzsKJiM0MztzdGF0aWMgaW5saW5lIGludCBodWdldGxiX3NldF9wb2lzb24oc3RydWN0IGZvbGlvICpmb2xpbykKJiM0Mzt7CiYjNDM7CWlmIChmb2xpb190ZXN0X3NldF9oYXNfaHdwb2lzb25lZChmb2xpbykpCiYjNDM7CQlyZXR1cm4gTUZfSFVHRVRMQl9GT0xJT19QUkVfUE9JU09ORUQ7CiYjNDM7CWZvbGlvX3NldF9odWdlX3BvaXNvbihmb2xpbyk7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW5saW5lIGludCBodWdldGxiX2NsZWFyX3BvaXNvbihzdHJ1Y3QgZm9saW8gKmZvbGlvKQomIzQzO3sKJiM0MzsJaWYgKCFmb2xpb190ZXN0X2NsZWFyX2hhc19od3BvaXNvbmVkKGZvbGlvKSkKJiM0MzsJCXJldHVybiAtRUJVU1k7CiYjNDM7CWZvbGlvX2NsZWFyX2h1Z2VfcG9pc29uKGZvbGlvKTsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwogLyoKICAqIFNldCBodWdldGxiIGZvbGlvIGFzIGh3cG9pc29uZWQsIHVwZGF0ZSBmb2xpbyBwcml2YXRlIHJhdyBod3BvaXNvbiBsaXN0CiAgKiB0byBrZWVwIHRyYWNrIG9mIHRoZSBwb2lzb25lZCBwYWdlcy4KICAqLwogc3RhdGljIGludCBodWdldGxiX3VwZGF0ZV9od3BvaXNvbihzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgcGFnZSAqcGFnZSkKIHsKLQlzdHJ1Y3QgbGxpc3RfaGVhZCAqaGVhZDsKIAlzdHJ1Y3QgcmF3X2h3cF9wYWdlICpyYXdfaHdwOwogCXN0cnVjdCByYXdfaHdwX3BhZ2UgKnA7Ci0JaW50IHJldCA9IGZvbGlvX3Rlc3Rfc2V0X2h3cG9pc29uKGZvbGlvKSA/IE1GX0hVR0VUTEJfRk9MSU9fUFJFX1BPSVNPTkVEIDogMDsKJiM0MzsJaW50IHJldCA9IGh1Z2V0bGJfc2V0X3BvaXNvbihmb2xpbyk7CiAKIAkvKgogCSAqIE9uY2UgdGhlIGh3cG9pc29uIGh1Z2VwYWdlIGhhcyBsb3N0IHJlbGlhYmxlIHJhdyBlcnJvciBpbmZvLAotCSAqIHRoZXJlIGlzIGxpdHRsZSBtZWFuaW5nIHRvIGtlZXAgYWRkaXRpb25hbCBlcnJvciBpbmZvIHByZWNpc2VseSwKLQkgKiBzbyBza2lwIHRvIGFkZCBhZGRpdGlvbmFsIHJhdyBlcnJvciBpbmZvLgomIzQzOwkgKiB0aGVyZSBpcyBubyBwb2ludCBpbiBrZWVwaW5nIGFkZGl0aW9uYWwgZXJyb3IgaW5mbyBwcmVjaXNlbHksCiYjNDM7CSAqIHNvIHNraXAgYWRkaW5nIGFkZGl0aW9uYWwgcmF3IGVycm9yIGluZm8uCiAJICovCiAJaWYgKGZvbGlvX3Rlc3RfaHVnZXRsYl9yYXdfaHdwX3VucmVsaWFibGUoZm9saW8pKQogCQlyZXR1cm4gTUZfSFVHRVRMQl9GT0xJT19QUkVfUE9JU09ORUQ7Ci0JaGVhZCA9IHJhd19od3BfbGlzdF9oZWFkKGZvbGlvKTsKLQlsbGlzdF9mb3JfZWFjaF9lbnRyeShwLCBoZWFkLSZndDtmaXJzdCwgbm9kZSkgewomIzQzOwlsbGlzdF9mb3JfZWFjaF9lbnRyeShwLCBmb2xpby0mZ3Q7aHVnZXRsYl9od3BvaXNvbi5maXJzdCwgbm9kZSkgewogCQlpZiAocC0mZ3Q7cGFnZSA9PSBwYWdlKQogCQkJcmV0dXJuIE1GX0hVR0VUTEJfUEFHRV9QUkVfUE9JU09ORUQ7CiAJfQpAQCAtMTkwOCw3ICYjNDM7MTkzOCw3IEBAIHN0YXRpYyBpbnQgaHVnZXRsYl91cGRhdGVfaHdwb2lzb24oc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHBhZ2UgKnBhZ2UpCiAJcmF3X2h3cCA9IGttYWxsb2Nfb2JqKHN0cnVjdCByYXdfaHdwX3BhZ2UsIEdGUF9BVE9NSUMpOwogCWlmIChyYXdfaHdwKSB7CiAJCXJhd19od3AtJmd0O3BhZ2UgPSBwYWdlOwotCQlsbGlzdF9hZGQoJmFtcDtyYXdfaHdwLSZndDtub2RlLCBoZWFkKTsKJiM0MzsJCWxsaXN0X2FkZCgmYW1wO3Jhd19od3AtJmd0O25vZGUsICZhbXA7Zm9saW8tJmd0O2h1Z2V0bGJfaHdwb2lzb24pOwogCX0gZWxzZSB7CiAJCS8qCiAJCSAqIEZhaWxlZCB0byBzYXZlIHJhdyBlcnJvciBpbmZvLiAgV2Ugbm8gbG9uZ2VyIHRyYWNlIGFsbApAQCAtMTk1MCw4ICYjNDM7MTk4MCw4IEBAIHZvaWQgZm9saW9fY2xlYXJfaHVnZXRsYl9od3BvaXNvbihzdHJ1Y3QgZm9saW8gKmZvbGlvKQogCQlyZXR1cm47CiAJaWYgKGZvbGlvX3Rlc3RfaHVnZXRsYl92bWVtbWFwX29wdGltaXplZChmb2xpbykpCiAJCXJldHVybjsKLQlmb2xpb19jbGVhcl9od3BvaXNvbihmb2xpbyk7CiAJZm9saW9fZnJlZV9yYXdfaHdwKGZvbGlvLCB0cnVlKTsKJiM0MzsJZm9saW9fY2xlYXJfaGFzX2h3cG9pc29uZWQoZm9saW8pOwogfQogCiBzdGF0aWMgaW50IGdldF9odWdlX3BhZ2VfZm9yX2h3cG9pc29uKHVuc2lnbmVkIGxvbmcgcGZuLCBpbnQgZmxhZ3MsCkBAIC0yMTA0LDYgJiM0MzsyMTM0LDExIEBAIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBmb2xpb19mcmVlX3Jhd19od3Aoc3RydWN0IGZvbGlvICpmb2xpbywgYm9vbCBmbGFnKQogewogCXJldHVybiAwOwogfQomIzQzOwomIzQzO3N0YXRpYyBpbmxpbmUgaW50IGh1Z2V0bGJfY2xlYXJfcG9pc29uKHN0cnVjdCBmb2xpbyAqZm9saW8pCiYjNDM7ewomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiAjZW5kaWYJLyogQ09ORklHX0hVR0VUTEJfUEFHRSAqLwogCiAvKiBEcm9wIHRoZSBleHRyYSByZWZjb3VudCBpbiBjYXNlIHdlIGNvbWUgZnJvbSBtYWR2aXNlKCkgKi8KQEAgLTI2NzcsNyAmIzQzOzI3MTIsMTIgQEAgaW50IHVucG9pc29uX21lbW9yeSh1bnNpZ25lZCBsb25nIHBmbikKIAlwID0gcGZuX3RvX29ubGluZV9wYWdlKHBmbik7CiAJaWYgKCFwKQogCQlyZXR1cm4gLUVJTzsKLQlmb2xpbyA9IHBhZ2VfZm9saW8ocCk7CiYjNDM7CiYjNDM7CWlmICghaXNfcGFnZV9od3BvaXNvbihwKSkgewomIzQzOwkJdW5wb2lzb25fcHJfaW5mbygmIzM0OyUjbHg6IHBhZ2UgaXMgbm90IHBvaXNvbmVkXG4mIzM0OywKJiM0MzsJCQkJIHBmbiwgJmFtcDt1bnBvaXNvbl9ycyk7CiYjNDM7CQlyZXR1cm4gLUVCVVNZOwomIzQzOwl9CiAKIAltdXRleF9sb2NrKCZhbXA7bWZfbXV0ZXgpOwogCkBAIC0yNjg4LDYgJiM0MzsyNzI4LDggQEAgaW50IHVucG9pc29uX21lbW9yeSh1bnNpZ25lZCBsb25nIHBmbikKIAkJZ290byB1bmxvY2tfbXV0ZXg7CiAJfQogCiYjNDM7CWZvbGlvID0gcGFnZV9mb2xpbyhwKTsKJiM0MzsKIAlpZiAoaXNfaHVnZV96ZXJvX2ZvbGlvKGZvbGlvKSkgewogCQl1bnBvaXNvbl9wcl9pbmZvKCYjMzQ7JSNseDogaHVnZSB6ZXJvIHBhZ2UgaXMgbm90IHN1cHBvcnRlZFxuJiMzNDssCiAJCQkJIHBmbiwgJmFtcDt1bnBvaXNvbl9ycyk7CkBAIC0yNjk1LDEyICYjNDM7MjczNyw2IEBAIGludCB1bnBvaXNvbl9tZW1vcnkodW5zaWduZWQgbG9uZyBwZm4pCiAJCWdvdG8gdW5sb2NrX211dGV4OwogCX0KIAotCWlmICghUGFnZUhXUG9pc29uKHApKSB7Ci0JCXVucG9pc29uX3ByX2luZm8oJiMzNDslI2x4OiBwYWdlIHdhcyBhbHJlYWR5IHVucG9pc29uZWRcbiYjMzQ7LAotCQkJCSBwZm4sICZhbXA7dW5wb2lzb25fcnMpOwotCQlnb3RvIHVubG9ja19tdXRleDsKLQl9Ci0KIAlpZiAoZm9saW9fcmVmX2NvdW50KGZvbGlvKSAmZ3Q7IDEpIHsKIAkJdW5wb2lzb25fcHJfaW5mbygmIzM0OyUjbHg6IHNvbWVvbmUgZ3JhYnMgdGhlIGh3cG9pc29uIHBhZ2VcbiYjMzQ7LAogCQkJCSBwZm4sICZhbXA7dW5wb2lzb25fcnMpOwpAQCAtMjczMCw4ICYjNDM7Mjc2Niw4IEBAIGludCB1bnBvaXNvbl9tZW1vcnkodW5zaWduZWQgbG9uZyBwZm4pCiAJCQljb3VudCA9IGZvbGlvX2ZyZWVfcmF3X2h3cChmb2xpbywgZmFsc2UpOwogCQkJaWYgKGNvdW50ID09IDApCiAJCQkJZ290byB1bmxvY2tfbXV0ZXg7CiYjNDM7CQkJcmV0ID0gaHVnZXRsYl9jbGVhcl9wb2lzb24oZm9saW8pOwogCQl9Ci0JCXJldCA9IGZvbGlvX3Rlc3RfY2xlYXJfaHdwb2lzb24oZm9saW8pID8gMCA6IC1FQlVTWTsKIAl9IGVsc2UgaWYgKGdocCAmbHQ7IDApIHsKIAkJaWYgKGdocCA9PSAtRUhXUE9JU09OKSB7CiAJCQlyZXQgPSBwdXRfcGFnZV9iYWNrX2J1ZGR5KHApID8gMCA6IC1FQlVTWTsKQEAgLTI3NDAsMTYgJiM0MzsyNzc2LDE4IEBAIGludCB1bnBvaXNvbl9tZW1vcnkodW5zaWduZWQgbG9uZyBwZm4pCiAJCQl1bnBvaXNvbl9wcl9pbmZvKCYjMzQ7JSNseDogZmFpbGVkIHRvIGdyYWIgcGFnZVxuJiMzNDssCiAJCQkJCSBwZm4sICZhbXA7dW5wb2lzb25fcnMpOwogCQl9Ci0JfSBlbHNlIHsKLQkJaWYgKGZvbGlvX3Rlc3RfaHVnZXRsYihmb2xpbykpIHsKLQkJCWh1Z2UgPSB0cnVlOwotCQkJY291bnQgPSBmb2xpb19mcmVlX3Jhd19od3AoZm9saW8sIGZhbHNlKTsKLQkJCWlmIChjb3VudCA9PSAwKSB7Ci0JCQkJZm9saW9fcHV0KGZvbGlvKTsKLQkJCQlnb3RvIHVubG9ja19tdXRleDsKLQkJCX0KJiM0MzsJfSBlbHNlIGlmIChmb2xpb190ZXN0X2h1Z2V0bGIoZm9saW8pKSB7CiYjNDM7CQlodWdlID0gdHJ1ZTsKJiM0MzsJCWNvdW50ID0gZm9saW9fZnJlZV9yYXdfaHdwKGZvbGlvLCBmYWxzZSk7CiYjNDM7CQlpZiAoY291bnQgPT0gMCkgewomIzQzOwkJCWZvbGlvX3B1dChmb2xpbyk7CiYjNDM7CQkJZ290byB1bmxvY2tfbXV0ZXg7CiAJCX0KLQomIzQzOwkJZm9saW9fcHV0KGZvbGlvKTsKJiM0MzsJCXJldCA9IGh1Z2V0bGJfY2xlYXJfcG9pc29uKGZvbGlvKTsKJiM0MzsJCWlmICghcmV0KQomIzQzOwkJCWZvbGlvX3B1dChmb2xpbyk7CiYjNDM7CX0gZWxzZSB7CiAJCWZvbGlvX3B1dChmb2xpbyk7CiAJCWlmIChUZXN0Q2xlYXJQYWdlSFdQb2lzb24ocCkpIHsKIAkJCWZvbGlvX3B1dChmb2xpbyk7CmRpZmYgLS1naXQgYS9tbS9tZW1vcnlfaG90cGx1Zy5jIGIvbW0vbWVtb3J5X2hvdHBsdWcuYwppbmRleCA3YWMxOWZhYjIyNjMyNC4uMzMwMDdlOGU1NDZhMDkgMTAwNjQ0Ci0tLSBhL21tL21lbW9yeV9ob3RwbHVnLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vbWVtb3J5X2hvdHBsdWcuYwpAQCAtMTgxMyw3ICYjNDM7MTgxMyw3IEBAIHN0YXRpYyB2b2lkIGRvX21pZ3JhdGVfcmFuZ2UodW5zaWduZWQgbG9uZyBzdGFydF9wZm4sIHVuc2lnbmVkIGxvbmcgZW5kX3BmbikKIAkJaWYgKGZvbGlvX3Rlc3RfbGFyZ2UoZm9saW8pKQogCQkJcGZuID0gZm9saW9fcGZuKGZvbGlvKSAmIzQzOyBmb2xpb19ucl9wYWdlcyhmb2xpbykgLSAxOwogCi0JCWlmIChmb2xpb19jb250YWluX2h3cG9pc29uZWRfcGFnZShmb2xpbykpIHsKJiM0MzsJCWlmIChmb2xpb19oYXNfaHdwb2lzb25lZF9wYWdlKGZvbGlvKSkgewogCQkJLyoKIAkJCSAqIHVubWFwX3BvaXNvbmVkX2ZvbGlvKCkgY2Fubm90IGhhbmRsZSBsYXJnZSBmb2xpb3MKIAkJCSAqIGluIGFsbCBjYXNlcyB5ZXQuCmRpZmYgLS1naXQgYS9tbS9zaG1lbS5jIGIvbW0vc2htZW0uYwppbmRleCBiNTFmODNjOTcwYmIzNy4uNDkyYzliZWYzNjIwNzQgMTAwNjQ0Ci0tLSBhL21tL3NobWVtLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vc2htZW0uYwpAQCAtMzI0MCw3ICYjNDM7MzI0MCw3IEBAIHNobWVtX3dyaXRlX2JlZ2luKGNvbnN0IHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsCiAJaWYgKHJldCkKIAkJcmV0dXJuIHJldDsKIAotCWlmIChmb2xpb19jb250YWluX2h3cG9pc29uZWRfcGFnZShmb2xpbykpIHsKJiM0MzsJaWYgKGZvbGlvX2hhc19od3BvaXNvbmVkX3BhZ2UoZm9saW8pKSB7CiAJCWZvbGlvX3VubG9jayhmb2xpbyk7CiAJCWZvbGlvX3B1dChmb2xpbyk7CiAJCXJldHVybiAtRUlPOwpkaWZmIC0tZ2l0IGEvbW0vdm1zY2FuLmMgYi9tbS92bXNjYW4uYwppbmRleCAzNWMzYmIxNWFlOTZhMy4uNzBlNTRhY2UwZTc0MWMgMTAwNjQ0Ci0tLSBhL21tL3Ztc2Nhbi5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL3Ztc2Nhbi5jCkBAIC0xMDg2LDcgJiM0MzsxMDg2LDcgQEAgc3RhdGljIHVuc2lnbmVkIGludCBzaHJpbmtfZm9saW9fbGlzdChzdHJ1Y3QgbGlzdF9oZWFkICpmb2xpb19saXN0LAogCQlpZiAoIWZvbGlvX3RyeWxvY2soZm9saW8pKQogCQkJZ290byBrZWVwOwogCi0JCWlmIChmb2xpb19jb250YWluX2h3cG9pc29uZWRfcGFnZShmb2xpbykpIHsKJiM0MzsJCWlmIChmb2xpb19oYXNfaHdwb2lzb25lZF9wYWdlKGZvbGlvKSkgewogCQkJLyoKIAkJCSAqIHVubWFwX3BvaXNvbmVkX2ZvbGlvKCkgY2FuJiMzOTt0IGhhbmRsZSBsYXJnZQogCQkJICogZm9saW8sIGp1c3Qgc2tpcCBpdC4gbWVtb3J5X2ZhaWx1cmUoKSB3aWxsCmRpZmYgLS1naXQgYS92aXJ0L2t2bS9ndWVzdF9tZW1mZC5jIGIvdmlydC9rdm0vZ3Vlc3RfbWVtZmQuYwppbmRleCBkYjU3YzU3NjZhYjYwNC4uOTRlZWRjYzdmMWE5ZTAgMTAwNjQ0Ci0tLSBhL3ZpcnQva3ZtL2d1ZXN0X21lbWZkLmMKJiM0MzsmIzQzOyYjNDM7IGIvdmlydC9rdm0vZ3Vlc3RfbWVtZmQuYwpAQCAtNzc0LDcgJiM0Mzs3NzQsNyBAQCBzdGF0aWMgc3RydWN0IGZvbGlvICpfX2t2bV9nbWVtX2dldF9wZm4oc3RydWN0IGZpbGUgKmZpbGUsCiAJaWYgKElTX0VSUihmb2xpbykpCiAJCXJldHVybiBmb2xpbzsKIAotCWlmIChmb2xpb190ZXN0X2h3cG9pc29uKGZvbGlvKSkgewomIzQzOwlpZiAoZm9saW9faGFzX2h3cG9pc29uZWRfcGFnZShmb2xpbykpIHsKIAkJZm9saW9fdW5sb2NrKGZvbGlvKTsKIAkJZm9saW9fcHV0KGZvbGlvKTsKIAkJcmV0dXJuIEVSUl9QVFIoLUVIV1BPSVNPTik7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI0IDE4OjQ2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0NzM0CgkJCQkJCQlvdXRwdXQ6IDIxCgkJCQkJCQl0aG91Z2h0czogODAwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgU3RyYXRlZ3kgZm9yIFRoaXMgS2VybmVsIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O3ZlIGdvdCB0aGlzIHBhdGNoIHNlcmllcyBpbiBmcm9udCBvZiBtZSwgYW5kIG15IGltbWVkaWF0ZSBjb25jZXJuIGlzIHdoZXRoZXIgaXQgaW50cm9kdWNlcyBuZXcgZnVuY3Rpb25hbGl0eSBvciBtb2RpZmllcyBleGlzdGluZyBjb2RlIGluIGEgd2F5IHRoYXQgd2FycmFudHMgdGFyZ2V0ZWQgZnV6emluZy4gSXQmIzM5O3MgY2xlYXJseSB0b3VjaGluZyBhIHNpZ25pZmljYW50IGNodW5rIG9mIHRoZSBrZXJuZWw6IGBmcy9odWdldGxiZnMvaW5vZGUuY2AsIHZhcmlvdXMgaW5jbHVkZSBmaWxlcyByZWxhdGVkIHRvIG1lbW9yeSBtYW5hZ2VtZW50LCBhbmQgc2V2ZXJhbCBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGZpbGVzIChgbW0vS2NvbmZpZ2AsIGBtbS9maWxlbWFwLmNgLCBldGMuKS4gTG9va3MgbGlrZSB0aGUgbWFpbiBmb2N1cyBpcyBhcm91bmQgaGFuZGxpbmcgSFdQT0lTT04gKGhhcmR3YXJlLWluamVjdGVkIHBvaXNvbikgd2l0aGluIGxhcmdlIGZvbGlvcywgc3BlY2lmaWNhbGx5IGluIGh1Z2V0bGJmcyBhbmQgZmlsZW1hcC4KClRoZSBtYWpvciBjaGFuZ2VzIGFyZSByZXBsYWNpbmcgYGh1Z2V0bGJmc19yZWFkX2l0ZXJgIHdpdGggYGdlbmVyaWNfZmlsZV9yZWFkX2l0ZXJgLCBtb2RpZnlpbmcgYGZpbGVtYXBfcmVhZGAgdG8gYWNjb3VudCBmb3IgaHdwb2lzb25lZCBwYWdlcyBieSBhZGRpbmcgYGFkanVzdF9yYW5nZV9od3BvaXNvbmAsIGFuZCBjaGFuZ2luZyBob3cgSFdQT0lTT04gaXMgdHJhY2tlZCB3aXRoaW4gZm9saW9zIHVzaW5nIGBmb2xpby0mZ3Q7aHVnZXRsYl9od3BvaXNvbmAuIFRoZXJlIGFyZSBhbHNvIHNvbWUgbmV3IGZ1bmN0aW9ucyBpbnRyb2R1Y2VkOiBgZm9saW9faGFzX2h3cG9pc29uZWRfcGFnZWAgYW5kIGBpc19yZWZfcGFnZV9od3BvaXNvbmAuCgpOb3csIHRoZSBjcnVjaWFsIHF1ZXN0aW9uIGlzLCBpcyB0aGlzIGNvZGUgcmVhY2hhYmxlIGFuZCBmdW5jdGlvbmFsPyBZZXMsIGl0JiMzOTtzIG1vZGlmeWluZyBmdW5kYW1lbnRhbCBtZW1vcnkgbWFuYWdlbWVudCBhbmQgaG93IGh1Z2V0bGJmcyByZWFkIG9wZXJhdGlvbnMgd29yaywgc28gd2UgbmVlZCB0byB0ZXN0IHRoaXMuIEFuZCB3aGF0IGFib3V0IHZpcnR1YWxpemF0aW9uPyBXZSBjYW4gdHJpZ2dlciBIV1BPSVNPTiB2aWEgYG1hZHZpc2UoTUFEVl9IV1BPSVNPTilgIG9yIHRocm91Z2ggZGVidWdmcywgc28gd2UgY2FuIHRlc3QgaXQgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudC4KCk5vdywgbGV0JiMzOTtzIG5haWwgZG93biB3aGF0IGZ1bmN0aW9ucyB0byBmb2N1cyBvbiBmb3IgZnV6emluZy4gYGZpbGVtYXBfcmVhZGAgaXMgYSBob3QtcGF0aCBmdW5jdGlvbiwgc28gaXQmIzM5O3MgYSBnb29kIGNhbmRpZGF0ZSwgYnV0IGBhZGp1c3RfcmFuZ2VfaHdwb2lzb25gIGlzIG5ldyBhbmQgc3BlY2lmaWMgdG8gdGhpcyBwYXRjaC4gV2FpdCBhIHNlY29uZCwgaXQmIzM5O3MgYSBzdGF0aWMgZnVuY3Rpb24gaW4gYG1tL2ZpbGVtYXAuY2AuIFRoYXQgbGltaXRzIGl0cyBkaXJlY3QgY2FsbCBzaXRlcy4gU28sIHdlJiMzOTtyZSBiZXR0ZXIgb2ZmIGZvY3VzaW5nIG9uIHRoZSBlbnRyeSBwb2ludHM6IGBodWdldGxiX3VwZGF0ZV9od3BvaXNvbmAsIGBodWdldGxiX3BhZ2VfaHdwb2lzb25gLCBgaHVnZXRsYl91bnJlZl9wYWdlX2h3cG9pc29uYCwgYHVucG9pc29uX21lbW9yeWAsIGFuZCBgZm9saW9fY2xlYXJfaHVnZXRsYl9od3BvaXNvbmAuIEFsdGhvdWdoIGBmaWxlbWFwX2dldF9yZWFkX2JhdGNoYCBhbmQgYGZpbGVtYXBfZ2V0X3BhZ2VzYCBhcmUgYWxzbyBtb2RpZmllZCwgdGhlc2UgYXJlIGhvdCBwYXRocywgc28gbm90IGhpZ2ggcHJpb3JpdHkuCgpTaW5jZSBgYWRqdXN0X3JhbmdlX2h3cG9pc29uYCBpcyBzdGF0aWMsIGxldCYjMzk7cyBjb25maXJtIHRoaXMgYnkgY2hlY2tpbmcgdGhlIGNvZGUuIFllcywgaXQgaXMgc3RhdGljLiBPa2F5LCBsZXQmIzM5O3MgbW92ZSBiYWNrIHRvIHRoZSBwcmV2aW91c2x5IG1lbnRpb25lZCBmdW5jdGlvbnM6IGBodWdldGxiX3VwZGF0ZV9od3BvaXNvbmAsIGBodWdldGxiX3BhZ2VfaHdwb2lzb25gLCBgaHVnZXRsYl91bnJlZl9wYWdlX2h3cG9pc29uYCwgYW5kIGB1bnBvaXNvbl9tZW1vcnlgLiBXZSBzaG91bGQgYWxzbyBpbmNsdWRlIHRoZSBgZm9saW9fY2xlYXJfaHVnZXRsYl9od3BvaXNvbmAgZnVuY3Rpb24uCgpGaW5hbGx5LCB3ZSBuZWVkIHRvIHRoaW5rIGFib3V0IGNvbmZpZ3VyYXRpb25zLiBgQ09ORklHX01FTU9SWV9GQUlMVVJFYCBpcyBjbGVhcmx5IHJlcXVpcmVkIGZvciBIV1BPSVNPTi4gYENPTkZJR19IVUdFVExCRlNgIGFuZCBgQ09ORklHX0hVR0VUTEJfUEFHRWAgYXJlIG5lY2Vzc2FyeSBmb3IgdGhlIGh1Z2V0bGJmcyBiaXRzLiBgQ09ORklHX0xBUkdFX0ZPTElPYCBpcyBhIGdpdmVuLCBhcyBpdCYjMzk7cyBzZWxlY3RlZCBieSBgSFVHRVRMQl9QQUdFYCBhbmQgYFRSQU5TUEFSRU5UX0hVR0VQQUdFYC4gQWgsIGJ1dCBJIG5lZWQgdG8gYmUgc3VyZSBhYm91dCBgQ09ORklHX0ZJTEVNQVBfTEFSR0VfRk9MSU9gLiBJdCYjMzk7cyB1c2VkIGluc3RlYWQgb2YgYENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRWAsIGFuZCB0aGF0JiMzOTtzIGNyaXRpY2FsLiBMZXQgbWUgY2hlY2sgdGhlIGtlcm5lbCBjb25maWcgZm9yIGBDT05GSUdfRklMRU1BUF9MQVJHRV9GT0xJT2AuIEkmIzM5O2xsIGdyZXAgZm9yIHRoYXQgcXVpY2tseSB0byBtYWtlIHN1cmUgaXQgZXhpc3RzIGFuZCB0aGF0IEkgdW5kZXJzdGFuZCB3aGVyZSBpdCYjMzk7cyBkZWZpbmVkLgoKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNCAxODo0NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtGSUxFTUFQX0xBUkdFX0ZPTElPJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvcGFnZW1hcC5oPTM3NT1zdGF0aWMgaW5saW5lIHZvaWQgbWFwcGluZ19zZXRfZ2ZwX21hc2soc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm0sIGdmcF90IG1hc2spXG4tLVxuaW5jbHVkZS9saW51eC9wYWdlbWFwLmgtMzg2LSAqL1xuaW5jbHVkZS9saW51eC9wYWdlbWFwLmg6Mzg3OiNpZmRlZiBDT05GSUdfRklMRU1BUF9MQVJHRV9GT0xJT1xuaW5jbHVkZS9saW51eC9wYWdlbWFwLmgtMzg4LSNkZWZpbmUgUFJFRkVSUkVEX01BWF9QQUdFQ0FDSEVfT1JERVJcdEhQQUdFX1BNRF9PUkRFUlxuLS1cbmluY2x1ZGUvbGludXgvcGFnZW1hcC5oPTQwNj1zdGF0aWMgaW5saW5lIHNpemVfdCBtYXBwaW5nX21heF9mb2xpb19zaXplX3N1cHBvcnRlZCh2b2lkKVxuaW5jbHVkZS9saW51eC9wYWdlbWFwLmgtNDA3LXtcbmluY2x1ZGUvbGludXgvcGFnZW1hcC5oOjQwODpcdGlmIChJU19FTkFCTEVEKENPTkZJR19GSUxFTUFQX0xBUkdFX0ZPTElPKSlcbmluY2x1ZGUvbGludXgvcGFnZW1hcC5oLTQwOS1cdFx0cmV0dXJuIDFVIFx1MDAzY1x1MDAzYyAoUEFHRV9TSElGVCAmIzQzOyBNQVhfUEFHRUNBQ0hFX09SREVSKTtcbi0tXG5pbmNsdWRlL2xpbnV4L3BhZ2VtYXAuaD00MzE9c3RhdGljIGlubGluZSB2b2lkIG1hcHBpbmdfc2V0X2ZvbGlvX29yZGVyX3JhbmdlKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxuLS1cbmluY2x1ZGUvbGludXgvcGFnZW1hcC5oLTQzMy17XG5pbmNsdWRlL2xpbnV4L3BhZ2VtYXAuaDo0MzQ6XHRpZiAoIUlTX0VOQUJMRUQoQ09ORklHX0ZJTEVNQVBfTEFSR0VfRk9MSU8pKVxuaW5jbHVkZS9saW51eC9wYWdlbWFwLmgtNDM1LVx0XHRyZXR1cm47XG4tLVxuaW5jbHVkZS9saW51eC9wYWdlbWFwLmg9NDY2PW1hcHBpbmdfbWF4X2ZvbGlvX29yZGVyKGNvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nKVxuaW5jbHVkZS9saW51eC9wYWdlbWFwLmgtNDY3LXtcbmluY2x1ZGUvbGludXgvcGFnZW1hcC5oOjQ2ODpcdGlmICghSVNfRU5BQkxFRChDT05GSUdfRklMRU1BUF9MQVJHRV9GT0xJTykpXG5pbmNsdWRlL2xpbnV4L3BhZ2VtYXAuaC00NjktXHRcdHJldHVybiAwO1xuLS1cbmluY2x1ZGUvbGludXgvcGFnZW1hcC5oPTQ3ND1tYXBwaW5nX21pbl9mb2xpb19vcmRlcihjb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZylcbmluY2x1ZGUvbGludXgvcGFnZW1hcC5oLTQ3NS17XG5pbmNsdWRlL2xpbnV4L3BhZ2VtYXAuaDo0NzY6XHRpZiAoIUlTX0VOQUJMRUQoQ09ORklHX0ZJTEVNQVBfTEFSR0VfRk9MSU8pKVxuaW5jbHVkZS9saW51eC9wYWdlbWFwLmgtNDc3LVx0XHRyZXR1cm4gMDtcbi0tXG5pbmNsdWRlL2xpbnV4L3BhZ2VtYXAuaD01MTI9c3RhdGljIGlubGluZSBib29sIG1hcHBpbmdfbGFyZ2VfZm9saW9fc3VwcG9ydChjb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZylcbi0tXG5pbmNsdWRlL2xpbnV4L3BhZ2VtYXAuaC01MzEtICovXG5pbmNsdWRlL2xpbnV4L3BhZ2VtYXAuaDo1MzI6I2lmZGVmIENPTkZJR19GSUxFTUFQX0xBUkdFX0ZPTElPXG5pbmNsdWRlL2xpbnV4L3BhZ2VtYXAuaC01MzMtc3RhdGljIGlubGluZSBib29sIG1hcHBpbmdfcG1kX2ZvbGlvX3N1cHBvcnQoY29uc3Qgc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjQgMTg6NDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTY5ODkKCQkJCQkJCW91dHB1dDogMjIKCQkJCQkJCXRob3VnaHRzOiA1NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duIG1lbnRhbCBwcm9jZXNzOgoKKipJbnZlc3RpZ2F0aW5nIHRoZSBNaXNzaW5nIERlZmluaXRpb24qKgoKSG1tLCBgQ09ORklHX0ZJTEVNQVBfTEFSR0VfRk9MSU9gLi4uIEl0JiMzOTtzIGxvb2tpbmcgbGlrZSB0aGlzIHN5bWJvbCBpc24mIzM5O3QgZGVmaW5lZCB3aGVyZSBJIGV4cGVjdGVkIGl0IHRvIGJlLCBvciBwZXJoYXBzIGl0JiMzOTtzIHNpbXBseSBub3QgcHJlc2VudCBpbiB0aGlzIHBhcnRpY3VsYXIgcGF0Y2guIEJlZm9yZSBJIGp1bXAgdG8gY29uY2x1c2lvbnMsIEkgbmVlZCB0byB2ZXJpZnkgaXRzIGF2YWlsYWJpbGl0eS4gUmlnaHQsIHRoZSBzdGFuZGFyZCBwbGFjZXMgdG8gY2hlY2sgZm9yIHRoZXNlIHNvcnRzIG9mIGNvbmZpZ3VyYXRpb25zIGFyZSB0aGUga2VybmVsJiMzOTtzIEtjb25maWcgZmlsZXMuIFNwZWNpZmljYWxseSwgSSBzaG91bGQgbG9vayBpbiBgbW0vS2NvbmZpZ2AsIGFzIGl0IHNlZW1zIG1lbW9yeSBtYW5hZ2VtZW50IHJlbGF0ZWQsIGFuZCBhbHNvIGNvbnNpZGVyIGBmcy9LY29uZmlnYCBzaW5jZSBpdCYjMzk7cyBhYm91dCBmaWxlIHN5c3RlbXMuIExldCYjMzk7cyBzdGFydCB0aGVyZSBhbmQgc2VlIGlmIEkgY2FuIGZpbmQgd2hlcmUgYEZJTEVNQVBfTEFSR0VfRk9MSU9gIGlzIGNvbnRyb2xsZWQuIEkgbmVlZCB0byBrbm93ICp3aHkqIGl0IGlzIG9yIGlzbiYjMzk7dCBhdmFpbGFibGUgYmVmb3JlIEkgY2FuIHByb2NlZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjQgMTg6NDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgRklMRU1BUF9MQVJHRV9GT0xJTyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjQgMTg6NDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTcyNjYKCQkJCQkJCW91dHB1dDogMTkKCQkJCQkJCXRob3VnaHRzOiAxNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIHNlZS4uLgoKKipDaGVja2luZyB0aGUgS2NvbmZpZyBmb3IgYExBUkdFX0ZPTElPYCoqCgpBbHJpZ2h0LCBteSBmaXJzdCB0aG91Z2h0IGlzIHRvIGRpZyBpbnRvIHRoZSBgbW0vS2NvbmZpZ2AgZmlsZS4gSSYjMzk7bSBnb2luZyB0byBxdWlja2x5IGNoZWNrIGlmIGBMQVJHRV9GT0xJT2AgaXMgZGVmaW5lZCB0aGVyZS4gVGhhdCYjMzk7cyB0aGUgbG9naWNhbCBzdGFydGluZyBwb2ludCBmb3IgdW5kZXJzdGFuZGluZyBob3cgdGhpcyBmZWF0dXJlIGlzIGNvbmZpZ3VyZWQgd2l0aGluIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0uIEkgbmVlZCB0byBzZWUgdGhlIGRlcGVuZGVuY2llcywgaGVscCB0ZXh0LCBhbmQgZGVmYXVsdCBzZXR0aW5ncyAtIGFsbCB0aGUgdXN1YWwgS2NvbmZpZyBnb29kaWVzLiBUaGlzIGluaXRpYWwgY2hlY2sgd2lsbCBnaXZlIG1lIGEgZ29vZCBsYXkgb2YgdGhlIGxhbmQgYW5kIHBvaW50IG1lIGluIHRoZSByaWdodCBkaXJlY3Rpb24uIE5vIHBvaW50IGluIHdhbmRlcmluZyBhaW1sZXNzbHk7IGxldCYjMzk7cyBnZXQgYSBiYXNlbGluZSB1bmRlcnN0YW5kaW5nIG9mIGBMQVJHRV9GT0xJT2AgZnJvbSB0aGUgc291cmNlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI0IDE4OjQ2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBMQVJHRV9GT0xJTyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9LY29uZmlnPTg0Mz1jb25maWcgTU1fSURcbi0tXG5tbS9LY29uZmlnLTg0NS1cbm1tL0tjb25maWc6ODQ2OmNvbmZpZyBMQVJHRV9GT0xJT1xubW0vS2NvbmZpZy04NDctXHRkZWZfYm9vbCBuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjQgMTg6NDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTc1MTUKCQkJCQkJCW91dHB1dDogMTkKCQkJCQkJCXRob3VnaHRzOiAyOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIGRlbGl2ZXJlZCBhcyBhIGZpcnN0LXBlcnNvbiBzdW1tYXJ5OgoKKipLZXJuZWwgTWVtb3J5IE1hbmFnZW1lbnQgQ29uc2lkZXJhdGlvbnMqKgoKT2theSwgc28gSSBzZWUgdGhhdCB0aGUgYExBUkdFX0ZPTElPYCBvcHRpb24gaGFzIGJlZW4gaW50cm9kdWNlZCB3aXRoaW4gdGhlIGBtbS9LY29uZmlnYCBmaWxlLiBUaGF0JiMzOTtzIGdvb2QsIHRoYXQmIzM5O3Mgd2hhdCBJIHdhcyBleHBlY3RpbmcgdG8gZmluZC4gQnV0IHdhaXQsIGEgbGl0dGxlIGZsYWcganVzdCB3ZW50IG9mZiBpbiBteSBoZWFkLiBXaGVuZXZlciBJIHNlZSB0aGVzZSBtZW1vcnkgbWFuYWdlbWVudCBhZGRpdGlvbnMsIG15IGltbWVkaWF0ZSB0aG91Z2h0IGlzICphbHdheXMqIGFib3V0IGhvdyBpdCBpbnRlcmFjdHMgd2l0aCBlcnJvciBoYW5kbGluZy4gU3BlY2lmaWNhbGx5LCBob3cgZG9lcyB0aGlzIGludGVycGxheSB3aXRoIGBNRU1PUllfRkFJTFVSRWA/IEl0JiMzOTtzIGEgY3JpdGljYWwgY29tcG9uZW50IGluIGVuc3VyaW5nIHN5c3RlbSBzdGFiaWxpdHkgd2hlbiB0aGluZ3MgZ28gc2lkZXdheXMgd2l0aCBtZW1vcnkgYWxsb2NhdGlvbiwgYW5kIEkgbmVlZCB0byBjb25zaWRlciBob3cgdGhpcyBuZXcgZmVhdHVyZSBpbnRlZ3JhdGVzIHdpdGggdGhvc2UgZXhpc3Rpbmcgc2FmZWd1YXJkcy4gSXMgdGhlcmUgZXhwbGljaXQgaGFuZGxpbmcgb2YgYExBUkdFX0ZPTElPYCBhbGxvY2F0aW9uIGZhaWx1cmVzLCBvciBkb2VzIGl0IGZhbGwgYmFjayB0byBzb21lIGdlbmVyaWMgc3RyYXRlZ3k/IEkgbmVlZCB0byBjaGVjayB0aGUgS2NvbmZpZyYjMzk7cyBzdXJyb3VuZGluZyBjb2RlIGFuZCB0aGUgdXNhZ2UgcGF0dGVybnMgdG8gbWFrZSBzdXJlIHRoaXMgZG9lc24mIzM5O3QgaW50cm9kdWNlIGFueSBzdWJ0bGUgcmVncmVzc2lvbnMgb3IgYmxpbmQgc3BvdHMgaW4gdGhlIG1lbW9yeSBmYWlsdXJlIGhhbmRsaW5nIHBhdGguCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI0IDE4OjQ2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBNRU1PUllfRkFJTFVSRSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9LY29uZmlnPTc3ND1jb25maWcgQVJDSF9TVVBQT1JUU19NRU1PUllfRkFJTFVSRVxuLS1cbm1tL0tjb25maWctNzc2LVxubW0vS2NvbmZpZzo3Nzc6Y29uZmlnIE1FTU9SWV9GQUlMVVJFXG5tbS9LY29uZmlnLTc3OC1cdGRlcGVuZHMgb24gTU1VXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI0IDE4OjQ2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3ODU0CgkJCQkJCQlvdXRwdXQ6IDE5CgkJCQkJCQl0aG91Z2h0czogMzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHByZXNlbnRlZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3MsIGdpdmVuIG15IGV4cGVydGlzZToKCioqQ2hlY2tpbmcgSGFyZHdhcmUgUG9pc29uIENvbmZpZ3VyYXRpb24qKgoKQWxyaWdodCwgbGV0IG1lIHF1aWNrbHkgcGFyc2UgdGhpcy4gYE1FTU9SWV9GQUlMVVJFYCAtIGFoIHllcywgdGhhdCYjMzk7cyB0aGUgY29uZmlndXJhdGlvbiBvcHRpb24gd2UgdXNlIHRvIGVuYWJsZSBoYXJkd2FyZSBwb2lzb24gaGFuZGxpbmcuIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhlIHN5c3RlbSBpcyBiZWhhdmluZyBhcyBleHBlY3RlZCB3aXRoIHJlc3BlY3QgdG8gdGhhdC4gTXkgbmV4dCBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byBjaGVjayByZWxhdGVkIG1lbW9yeSBmZWF0dXJlcy4gTXkgZXhwZXJ0aXNlIGlzIHRoYXQgdGhlIHN5c3RlbSYjMzk7cyByZWFjdGlvbiB0byBoYXJkd2FyZSBlcnJvcnMgaXMgaW1wYWN0ZWQgYnkgc2V2ZXJhbCBjb25maWd1cmF0aW9uIGFuZCBydW50aW1lIG9wdGlvbnMuIFRodXMgSSYjMzk7bGwgbm93IHF1aWNrbHkgZHJpbGwgZG93biBvbiBgSFVHRVRMQkZTYCBhbmQgYEhVR0VUTEJfUEFHRWAuIEkgd2FudCB0byBpbW1lZGlhdGVseSB1bmRlcnN0YW5kIHRoZSBpbnRlcmFjdGlvbiBiZXR3ZWVuIHRob3NlIHNldHRpbmdzIGFuZCBob3cgaGFyZHdhcmUgZXJyb3JzIGFyZSBoYW5kbGVkIGluIHRoaXMgcGFydGljdWxhciBjb25maWd1cmF0aW9uLiBFc3NlbnRpYWxseSwgSSYjMzk7bSB0cnlpbmcgdG8gcXVpY2tseSBlc3RhYmxpc2ggYSBiYXNlbGluZSBvciBwaW5wb2ludCBhbnkgcG90ZW50aWFsIGNvbmZsaWN0cyBvciBhcmVhcyB0aGF0IHJlcXVpcmUgc3BlY2lhbCBhdHRlbnRpb24gcmVsYXRlZCB0byBob3cgbGFyZ2UgcGFnZXMsIGFuZCB0aGUgbGFyZ2UgcGFnZSBmaWxlIHN5c3RlbSwgYXJlIGludm9sdmVkIGluIG1lbW9yeSBlcnJvciBoYW5kbGluZy4gVGhlIGZpcnN0IHN0ZXAgd2lsbCBiZSBjaGVja2luZyB0aGVpciBzdGF0ZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI0IDE4OjQ2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBIVUdFVExCRlMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvS2NvbmZpZz0yNDc9Y29uZmlnIEFSQ0hfU1VQUE9SVFNfSFVHRVRMQkZTXG4tLVxuZnMvS2NvbmZpZy0yNDktXG5mcy9LY29uZmlnOjI1MDptZW51Y29uZmlnIEhVR0VUTEJGU1xuZnMvS2NvbmZpZy0yNTEtXHRib29sIFwmIzM0O0h1Z2VUTEIgZmlsZSBzeXN0ZW0gc3VwcG9ydFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNCAxODo0NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODE5MAoJCQkJCQkJb3V0cHV0OiA0NgoJCQkJCQkJdGhvdWdodHM6IDIxOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgSHVnZSBQYWdlIFBvaXNvbmluZyBpbiB0aGUgS2VybmVsKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBtZW1vcnkgZmFpbHVyZSBzY2VuYXJpb3MgcmVsYXRlZCB0byBodWdlIHBhZ2VzLiBNeSBpbml0aWFsIGZvY3VzIGlzIG9uIHRoZSBjb25maWd1cmF0aW9uczogYE1FTU9SWV9GQUlMVVJFYCwgYEhVR0VUTEJGU2AsIGFuZCBgSFVHRVRMQl9QQUdFYC4gUmlnaHQsIGFuZCBJIHNlZSBgTEFSR0VfRk9MSU9gIGlzIGJlaW5nIHNlbGVjdGVkIGJ5IGJvdGggYEhVR0VUTEJfUEFHRWAgYW5kIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAsIHdoaWNoIHNlZW1zIGNvcnJlY3QuCgpOb3csIEkgbmVlZCB0byBwaW5wb2ludCB0aGUgcmVsZXZhbnQgc3ltYm9scy4gTGV0JiMzOTtzIHNlZS4uLiBJIGhhdmUgYGh1Z2V0bGJfdXBkYXRlX2h3cG9pc29uYCwgYGh1Z2V0bGJfcGFnZV9od3BvaXNvbmAsIGBodWdldGxiX3VucmVmX3BhZ2VfaHdwb2lzb25gLCBgdW5wb2lzb25fbWVtb3J5YCwgYW5kIGBmb2xpb19jbGVhcl9odWdldGxiX2h3cG9pc29uYC4gVGhvc2Ugc2VlbSBsaWtlIHRoZXkmIzM5O3JlIGRpcmVjdGx5IHJlbGF0ZWQgdG8gdGhlIGhhcmR3YXJlIHBvaXNvbmluZyBhc3BlY3Qgb2YgaHVnZSBwYWdlcy4gSSYjMzk7bSBhbHNvIG5vdGluZyBgYWRqdXN0X3JhbmdlX2h3cG9pc29uYCwgd2hpY2ggaXMgc3RhdGljLCBzbyB0aGF0JiMzOTtzIHByb2JhYmx5IG5vdCBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQsIGFsdGhvdWdoIGl0JiMzOTtzIHJlbGF0ZWQuIEkgY29uc2lkZXJlZCBgZmlsZW1hcF9yZWFkYCwgc2luY2UgdGhhdCYjMzk7cyBhIGhvdCBwYXRoLCBidXQgaXQmIzM5O3MgcHJvYmFibHkgdG9vIGdlbmVyYWwuIE1heWJlIGBodWdldGxiZnNfaW5pdF9yZWd1bGFyX2lub2RlYD8gVGhhdCYjMzk7cyBhbHNvIHN0YXRpYywgc28gcHJvYmFibHkgbm90IHRoZSBiZXN0IHNwb3QgdG8gc3RhcnQgZWl0aGVyLiBMZXQgbWUgY29uc2lkZXIgYGh1Z2V0bGJfZm9saW9fbWFwcGluZ19sb2NrX3dyaXRlYC4gVGhhdCBzb3VuZHMgbGlrZSBpdCBjb3VsZCBiZSByZWxldmFudCwgc2luY2Ugd2UgYXJlIHRhbGtpbmcgYWJvdXQgbWVtb3J5IGZhaWx1cmVzLgoKQWxyaWdodCwgdGhlIG5leHQgdGhpbmcgaXMgdG8gZGl2ZSBpbnRvIGBtbS9tZW1vcnktZmFpbHVyZS5jYCB0byBzZWUgaWYgdGhlcmUgYXJlIGFueSB1c2VmdWwgZXhwb3J0ZWQgb3Igbm9uLXN0YXRpYyBmdW5jdGlvbnMgd2l0aGluIHRoYXQgZmlsZS4gVGhhdCBzaG91bGQgZ2l2ZSBtZSBhIGJldHRlciB2aWV3IG9mIHdoZXJlIEkgY2FuIG1ha2UgYW4gaW1wYWN0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNCAxODo0NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDteKFthLXpfXSYjNDM7ICkmIzQzO2h1Z2V0bGJfW2Etel9dJiM0MztcXCgmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9tZW1vcnktZmFpbHVyZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL21lbW9yeS1mYWlsdXJlLmM9MTgyMD1zdGF0aWMgYm9vbCBwcmVjaXNlX3BhZ2VfcG9pc29uZWQoY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbyxcbi0tXG5tbS9tZW1vcnktZmFpbHVyZS5jLTE4NDMtICovXG5tbS9tZW1vcnktZmFpbHVyZS5jOjE4NDQ6Ym9vbCBodWdldGxiX3BhZ2VfaHdwb2lzb24oY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbywgY29uc3Qgc3RydWN0IHBhZ2UgKnBhZ2UpXG5tbS9tZW1vcnktZmFpbHVyZS5jLTE4NDUte1xuLS1cbm1tL21lbW9yeS1mYWlsdXJlLmMtMTg1NS0gKi9cbm1tL21lbW9yeS1mYWlsdXJlLmM6MTg1Njpib29sIGh1Z2V0bGJfdW5yZWZfcGFnZV9od3BvaXNvbihjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSlcbm1tL21lbW9yeS1mYWlsdXJlLmMtMTg1Ny17XG4tLVxubW0vbWVtb3J5LWZhaWx1cmUuYz0xODc1PXN0YXRpYyB1bnNpZ25lZCBsb25nIF9fZm9saW9fZnJlZV9yYXdfaHdwKHN0cnVjdCBmb2xpbyAqZm9saW8sIGJvb2wgbW92ZV9mbGFnKVxuLS1cbm1tL21lbW9yeS1mYWlsdXJlLmMtMTg5OS1cbm1tL21lbW9yeS1mYWlsdXJlLmM6MTkwMDpzdGF0aWMgaW5saW5lIGludCBodWdldGxiX3NldF9wb2lzb24oc3RydWN0IGZvbGlvICpmb2xpbylcbm1tL21lbW9yeS1mYWlsdXJlLmMtMTkwMS17XG4tLVxubW0vbWVtb3J5LWZhaWx1cmUuYy0xOTA3LVxubW0vbWVtb3J5LWZhaWx1cmUuYzoxOTA4OnN0YXRpYyBpbmxpbmUgaW50IGh1Z2V0bGJfY2xlYXJfcG9pc29uKHN0cnVjdCBmb2xpbyAqZm9saW8pXG5tbS9tZW1vcnktZmFpbHVyZS5jLTE5MDkte1xuLS1cbm1tL21lbW9yeS1mYWlsdXJlLmMtMTkxOS0gKi9cbm1tL21lbW9yeS1mYWlsdXJlLmM6MTkyMDpzdGF0aWMgaW50IGh1Z2V0bGJfdXBkYXRlX2h3cG9pc29uKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBwYWdlICpwYWdlKVxubW0vbWVtb3J5LWZhaWx1cmUuYy0xOTIxLXtcbi0tXG5tbS9tZW1vcnktZmFpbHVyZS5jPTIxMzM9c3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGZvbGlvX2ZyZWVfcmF3X2h3cChzdHJ1Y3QgZm9saW8gKmZvbGlvLCBib29sIGZsYWcpXG4tLVxubW0vbWVtb3J5LWZhaWx1cmUuYy0yMTM3LVxubW0vbWVtb3J5LWZhaWx1cmUuYzoyMTM4OnN0YXRpYyBpbmxpbmUgaW50IGh1Z2V0bGJfY2xlYXJfcG9pc29uKHN0cnVjdCBmb2xpbyAqZm9saW8pXG5tbS9tZW1vcnktZmFpbHVyZS5jLTIxMzkte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNCAxODo0NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTI5OQoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDQwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIGNoYW5nZXMgSSYjMzk7bSBzZWVpbmc6CgoqKkFuYWx5emluZyBSZWNlbnQgQ29kZSBNb2RpZmljYXRpb25zIGluIHRoZSBIdWdlVExCIFN1YnN5c3RlbSoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgYnJlYWsgZG93biB0aGVzZSBjb2RlIGNoYW5nZXMuIEZpcnN0LCBpdCBsb29rcyBsaWtlIGBodWdldGxiX3BhZ2VfaHdwb2lzb25gIGFuZCBgaHVnZXRsYl91bnJlZl9wYWdlX2h3cG9pc29uYCBhcmUgbm93IGV4cG9zZWQgYmV5b25kIHRoZWlyIHByZXZpb3VzIHNjb3BlIOKAkyB0aGV5JiMzOTtyZSBub3Qgc3RhdGljIGFueW1vcmUuIFRoYXQmIzM5O3MgYSBzaWduaWZpY2FudCBzaGlmdC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIHdoYXQgYXJlIHRoZSBpbXBsaWNhdGlvbnMgZm9yIGhvdyBvdGhlciBtb2R1bGVzIG9yIGZ1bmN0aW9ucyB3aWxsIGludGVyYWN0IHdpdGggdGhlbT8gQXJlIHdlIHNlZWluZyBhIG1vdmUgdG93YXJkcyBhIG1vcmUgZ2VuZXJhbCBoYXJkd2FyZSBwb2lzb24gaGFuZGxpbmcgc3RyYXRlZ3ksIG9yIGFyZSB0aGVzZSBmdW5jdGlvbnMgYmVpbmcgcmVwdXJwb3NlZCBmb3Igc29tZXRoaW5nIHNwZWNpZmljIHdpdGhpbiB0aGUgTlVNQSBhcmNoaXRlY3R1cmUgb2YgdGhlIEh1Z2VUTEIgc3lzdGVtPyBJIG5lZWQgdG8gZGlnIGludG8gdGhlIGNhbGwgc2l0ZXMgdG8gdW5kZXJzdGFuZCB0aGUgbmV3IGRlcGVuZGVuY2llcyB0aGF0IGFyZSBiZWluZyBpbnRyb2R1Y2VkLgoKQWxzbywgYHVucG9pc29uX21lbW9yeWAgaGFzIGFsc28gYmVlbiB0b3VjaGVkLiBUaGlzIGlzIGludGVyZXN0aW5nLiBXaGF0JiMzOTtzIHRoZSBuYXR1cmUgb2YgdGhlIG1vZGlmaWNhdGlvbj8gSXMgaXQgYSBjaGFuZ2UgdG8gdGhlIHVucG9pc29uaW5nIGFsZ29yaXRobSBpdHNlbGYsIGFuIGV4cGFuc2lvbiBvZiBpdHMgY2FwYWJpbGl0aWVzLCBvciBwZXJoYXBzIGEgbW9kaWZpY2F0aW9uIG9mIHRoZSBlcnJvciByZXBvcnRpbmcgb3IgbG9nZ2luZz8gSSYjMzk7bGwgbmVlZCB0byBjYXJlZnVsbHkgcmV2aWV3IHRoZSBkaWZmIHRvIHVuZGVyc3RhbmQgd2hhdCB0aGUgaW50ZW50IG9mIHRoZSBjaGFuZ2UgaXMuIEkgbmVlZCB0byBrZWVwIGluIG1pbmQsIHNwZWNpZmljYWxseSwgdGhhdCB1bnBvaXNvbmluZyBpcyBhIHBlcmZvcm1hbmNlLWNyaXRpY2FsIGZ1bmN0aW9uIGFuZCBhbnkgY2hhbmdlcyB0byBpdCBjb3VsZCBoYXZlIHNpZ25pZmljYW50IHJhbWlmaWNhdGlvbnMgb24gdGhlIG92ZXJhbGwgc3lzdGVtJiMzOTtzIHN0YWJpbGl0eSwgZXNwZWNpYWxseSBpZiBpdCBpcyBjaGFuZ2VkIGluIGEgbm9uLW9idmlvdXMgd2F5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNCAxODo0NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDteaW50IHVucG9pc29uX21lbW9yeVxcKCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL21lbW9yeS1mYWlsdXJlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vbWVtb3J5LWZhaWx1cmUuYz0yNjgwPWNvcmVfaW5pdGNhbGwobWVtb3J5X2ZhaWx1cmVfaW5pdCk7XG4tLVxubW0vbWVtb3J5LWZhaWx1cmUuYy0yNzAxLSAqL1xubW0vbWVtb3J5LWZhaWx1cmUuYzoyNzAyOmludCB1bnBvaXNvbl9tZW1vcnkodW5zaWduZWQgbG9uZyBwZm4pXG5tbS9tZW1vcnktZmFpbHVyZS5jLTI3MDMte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNCAxODo0NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTc1NAoJCQkJCQkJb3V0cHV0OiA0NgoJCQkJCQkJdGhvdWdodHM6IDE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIG1tL2h1Z2V0bGIuYyBmb3IgQ2x1ZXMqKgoKT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCYjMzk7cyBiZWVuIGNoYW5nZWQgaW4gdGhlIGh1Z2UgcGFnZXMgY29kZS4gTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gZGl2ZSBkaXJlY3RseSBpbnRvIGBtbS9odWdldGxiLmNgLiBJdCYjMzk7cyB0aGUgY2VudHJhbCBodWIgZm9yIGhhbmRsaW5nIGh1Z2UgcGFnZSBtYW5hZ2VtZW50LCBzbyBhbnkgbW9kaWZpY2F0aW9ucyByZWxhdGVkIHRvIHBlcmZvcm1hbmNlIG9yIG5ldyBmZWF0dXJlcyBhcmUgbGlrZWx5IHRvIGJlIHJlZmxlY3RlZCB0aGVyZS4gSSYjMzk7bSBnb2luZyB0byBsb29rIGZvciB0aGUga2V5IGZ1bmN0aW9ucyB0aGF0IGhhdmUgYmVlbiB0b3VjaGVkIHNpbmNlIHdoYXRldmVyIHRoZSBiYXNlbGluZSBpcyDigJMgcHJvYmFibHkgYSBwcmV2aW91cyBrZXJuZWwgdmVyc2lvbiBvciBhIHNwZWNpZmljIGNvbW1pdC4gVGhpcyB3aWxsIGxldCBtZSBxdWlja2x5IHBpbnBvaW50IHRoZSBjb2RlIHJlc3BvbnNpYmxlIGZvciB0aGUgYmVoYXZpb3IgSSYjMzk7bSBpbnZlc3RpZ2F0aW5nLiBJIGV4cGVjdCB0byBiZSBsb29raW5nIGF0IHRoaW5ncyBsaWtlIHBhZ2UgYWxsb2NhdGlvbiwgZGVhbGxvY2F0aW9uLCBtYXBwaW5nLCB1bm1hcHBpbmcsIGFuZCBhbnkgcmVsYXRlZCBsb2NraW5nIG9yIE5VTUEtYXdhcmVuZXNzIG1lY2hhbmlzbXMuIFRoZSBkaWZmcyB3aWxsIGJlIHRoZSBjcnVjaWFsIHBhcnQsIG9mIGNvdXJzZS4gTGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIGNoYW5nZWQgYW5kIHdoYXQgaXQgdGVsbHMgdXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI0IDE4OjQ3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O14oW2Etel9dJiM0MzsgKSYjNDM7aHVnZXRsYl9bYS16X10mIzQzO1xcKCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL2h1Z2V0bGIuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9odWdldGxiLmM9OTI9c3RhdGljIGludCBodWdldGxiX3BhcmFtX2luZGV4IF9faW5pdGRhdGE7XG5tbS9odWdldGxiLmM6OTM6c3RhdGljIF9faW5pdCBpbnQgaHVnZXRsYl9hZGRfcGFyYW0oY2hhciAqcywgaW50ICgqc2V0dXApKGNoYXIgKnZhbCkpO1xubW0vaHVnZXRsYi5jOjk0OnN0YXRpYyBfX2luaXQgdm9pZCBodWdldGxiX3BhcnNlX3BhcmFtcyh2b2lkKTtcbm1tL2h1Z2V0bGIuYy05NS1cbi0tXG5tbS9odWdldGxiLmM9MTE0PXN0cnVjdCBtdXRleCAqaHVnZXRsYl9mYXVsdF9tdXRleF90YWJsZSBfX3JvX2FmdGVyX2luaXQ7XG4tLVxubW0vaHVnZXRsYi5jLTExNi0vKiBGb3J3YXJkIGRlY2xhcmF0aW9uICovXG5tbS9odWdldGxiLmM6MTE3OnN0YXRpYyBpbnQgaHVnZXRsYl9hY2N0X21lbW9yeShzdHJ1Y3QgaHN0YXRlICpoLCBsb25nIGRlbHRhKTtcbm1tL2h1Z2V0bGIuYzoxMTg6c3RhdGljIHZvaWQgaHVnZXRsYl92bWFfbG9ja19mcmVlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKTtcbm1tL2h1Z2V0bGIuYzoxMTk6c3RhdGljIHZvaWQgaHVnZXRsYl92bWFfbG9ja19hbGxvYyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSk7XG5tbS9odWdldGxiLmMtMTIwLXN0YXRpYyB2b2lkIF9faHVnZXRsYl92bWFfdW5sb2NrX3dyaXRlX2ZyZWUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpO1xubW0vaHVnZXRsYi5jPTEyMT1zdGF0aWMgaW50IF9faHVnZV9wbWRfdW5zaGFyZShzdHJ1Y3QgbW11X2dhdGhlciAqdGxiLFxuLS1cbm1tL2h1Z2V0bGIuYy0xMjMtXHRcdGJvb2wgY2hlY2tfbG9ja3MpO1xubW0vaHVnZXRsYi5jOjEyNDpzdGF0aWMgdm9pZCBodWdldGxiX3Vuc2hhcmVfcG1kcyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbm1tL2h1Z2V0bGIuYy0xMjUtXHRcdHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLCBib29sIHRha2VfbG9ja3MpO1xuLS1cbm1tL2h1Z2V0bGIuYz0yNzg9c3RhdGljIGlubGluZSBzdHJ1Y3QgaHVnZXBhZ2Vfc3VicG9vbCAqc3VicG9vbF92bWEoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXG4tLVxubW0vaHVnZXRsYi5jLTI4NS0gKi9cbm1tL2h1Z2V0bGIuYzoyODY6dm9pZCBodWdldGxiX3ZtYV9sb2NrX3JlYWQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXG5tbS9odWdldGxiLmMtMjg3LXtcbi0tXG5tbS9odWdldGxiLmMtMjk4LVxubW0vaHVnZXRsYi5jOjI5OTp2b2lkIGh1Z2V0bGJfdm1hX3VubG9ja19yZWFkKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxubW0vaHVnZXRsYi5jLTMwMC17XG4tLVxubW0vaHVnZXRsYi5jLTMxMS1cbm1tL2h1Z2V0bGIuYzozMTI6dm9pZCBodWdldGxiX3ZtYV9sb2NrX3dyaXRlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxubW0vaHVnZXRsYi5jLTMxMy17XG4tLVxubW0vaHVnZXRsYi5jLTMyNC1cbm1tL2h1Z2V0bGIuYzozMjU6dm9pZCBodWdldGxiX3ZtYV91bmxvY2tfd3JpdGUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXG5tbS9odWdldGxiLmMtMzI2LXtcbi0tXG5tbS9odWdldGxiLmMtMzM3LVxubW0vaHVnZXRsYi5jOjMzODppbnQgaHVnZXRsYl92bWFfdHJ5bG9ja193cml0ZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcbm1tL2h1Z2V0bGIuYy0zMzkte1xuLS1cbm1tL2h1Z2V0bGIuYy0zNTMtXG5tbS9odWdldGxiLmM6MzU0OnZvaWQgaHVnZXRsYl92bWFfYXNzZXJ0X2xvY2tlZChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcbm1tL2h1Z2V0bGIuYy0zNTUte1xuLS1cbm1tL2h1Z2V0bGIuYy0zNjYtXG5tbS9odWdldGxiLmM6MzY3OnZvaWQgaHVnZXRsYl92bWFfbG9ja19yZWxlYXNlKHN0cnVjdCBrcmVmICprcmVmKVxubW0vaHVnZXRsYi5jLTM2OC17XG4tLVxubW0vaHVnZXRsYi5jPTM5MD1zdGF0aWMgdm9pZCBfX2h1Z2V0bGJfdm1hX3VubG9ja193cml0ZV9mcmVlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxuLS1cbm1tL2h1Z2V0bGIuYy00MDMtXG5tbS9odWdldGxiLmM6NDA0OnN0YXRpYyB2b2lkIGh1Z2V0bGJfdm1hX2xvY2tfZnJlZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcbm1tL2h1Z2V0bGIuYy00MDUte1xuLS1cbm1tL2h1Z2V0bGIuYy00MTktXG5tbS9odWdldGxiLmM6NDIwOnN0YXRpYyB2b2lkIGh1Z2V0bGJfdm1hX2xvY2tfYWxsb2Moc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXG5tbS9odWdldGxiLmMtNDIxLXtcbi0tXG5tbS9odWdldGxiLmM9ODUzPXN0YXRpYyBsb25nIHJlZ2lvbl9kZWwoc3RydWN0IHJlc3ZfbWFwICpyZXN2LCBsb25nIGYsIGxvbmcgdClcbi0tXG5tbS9odWdldGxiLmMtOTU1LSAqL1xubW0vaHVnZXRsYi5jOjk1Njp2b2lkIGh1Z2V0bGJfZml4X3Jlc2VydmVfY291bnRzKHN0cnVjdCBpbm9kZSAqaW5vZGUpXG5tbS9odWdldGxiLmMtOTU3LXtcbi0tXG5tbS9odWdldGxiLmM9MTE3MT1ib29sIF9fdm1hX3ByaXZhdGVfbG9jayhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcbi0tXG5tbS9odWdldGxiLmMtMTE3Ny1cbm1tL2h1Z2V0bGIuYzoxMTc4OnZvaWQgaHVnZXRsYl9kdXBfdm1hX3ByaXZhdGUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXG5tbS9odWdldGxiLmMtMTE3OS17XG4tLVxubW0vaHVnZXRsYi5jPTMwODA9aW50IF9fYWxsb2NfYm9vdG1lbV9odWdlX3BhZ2Uoc3RydWN0IGhzdGF0ZSAqaCwgaW50IG5pZClcbi0tXG5tbS9odWdldGxiLmMtMzExNy0vKiBJbml0aWFsaXplIFtzdGFydF9wYWdlOmVuZF9wYWdlX251bWJlcl0gdGFpbCBzdHJ1Y3QgcGFnZXMgb2YgYSBodWdlcGFnZSAqL1xubW0vaHVnZXRsYi5jOjMxMTg6c3RhdGljIHZvaWQgX19pbml0IGh1Z2V0bGJfZm9saW9faW5pdF90YWlsX3ZtZW1tYXAoc3RydWN0IGZvbGlvICpmb2xpbyxcbm1tL2h1Z2V0bGIuYy0zMTE5LVx0XHRcdFx0XHRzdHJ1Y3QgaHN0YXRlICpoLFxuLS1cbm1tL2h1Z2V0bGIuYy0zMTQwLVxubW0vaHVnZXRsYi5jOjMxNDE6c3RhdGljIHZvaWQgX19pbml0IGh1Z2V0bGJfZm9saW9faW5pdF92bWVtbWFwKHN0cnVjdCBmb2xpbyAqZm9saW8sXG5tbS9odWdldGxiLmMtMzE0Mi1cdFx0XHRcdFx0ICAgICAgc3RydWN0IGhzdGF0ZSAqaCxcbi0tXG5tbS9odWdldGxiLmMtMzE1OS1cbm1tL2h1Z2V0bGIuYzozMTYwOnN0YXRpYyBib29sIF9faW5pdCBodWdldGxiX2Jvb3RtZW1fcGFnZV9wcmVodm8oc3RydWN0IGh1Z2VfYm9vdG1lbV9wYWdlICptKVxubW0vaHVnZXRsYi5jLTMxNjEte1xuLS1cbm1tL2h1Z2V0bGIuYy0zMTY0LVxubW0vaHVnZXRsYi5jOjMxNjU6c3RhdGljIGJvb2wgX19pbml0IGh1Z2V0bGJfYm9vdG1lbV9wYWdlX2Vhcmx5Y21hKHN0cnVjdCBodWdlX2Jvb3RtZW1fcGFnZSAqbSlcbm1tL2h1Z2V0bGIuYy0zMTY2LXtcbi0tXG5tbS9odWdldGxiLmMtMzE3OS0gKi9cbm1tL2h1Z2V0bGIuYzozMTgwOnN0YXRpYyB2b2lkIF9faW5pdCBodWdldGxiX2Jvb3RtZW1faW5pdF9taWdyYXRldHlwZShzdHJ1Y3QgZm9saW8gKmZvbGlvLFxubW0vaHVnZXRsYi5jLTMxODEtXHRcdFx0XHRcdFx0XHQgIHN0cnVjdCBoc3RhdGUgKmgpXG4tLVxubW0vaHVnZXRsYi5jPTMxOTY9c3RhdGljIHZvaWQgX19pbml0IHByZXBfYW5kX2FkZF9ib290bWVtX2ZvbGlvcyhzdHJ1Y3QgaHN0YXRlICpoLFxuLS1cbm1tL2h1Z2V0bGIuYy0zMjI1LVxubW0vaHVnZXRsYi5jOjMyMjY6Ym9vbCBfX2luaXQgaHVnZXRsYl9ib290bWVtX3BhZ2Vfem9uZXNfdmFsaWQoaW50IG5pZCxcbm1tL2h1Z2V0bGIuYy0zMjI3LVx0XHRcdFx0XHQgICAgIHN0cnVjdCBodWdlX2Jvb3RtZW1fcGFnZSAqbSlcbi0tXG5tbS9odWdldGxiLmMtMzI2Mi0gKi9cbm1tL2h1Z2V0bGIuYzozMjYzOnN0YXRpYyB2b2lkIF9faW5pdCBodWdldGxiX2Jvb3RtZW1fZnJlZV9pbnZhbGlkX3BhZ2UoaW50IG5pZCwgc3RydWN0IHBhZ2UgKnBhZ2UsXG5tbS9odWdldGxiLmMtMzI2NC1cdFx0XHRcdFx0ICAgICBzdHJ1Y3QgaHN0YXRlICpoKVxuLS1cbm1tL2h1Z2V0bGIuYz0zMzU2PXN0YXRpYyB2b2lkIF9faW5pdCBnYXRoZXJfYm9vdG1lbV9wcmVhbGxvYyh2b2lkKVxuLS1cbm1tL2h1Z2V0bGIuYy0zMzcxLVxubW0vaHVnZXRsYi5jOjMzNzI6c3RhdGljIHZvaWQgX19pbml0IGh1Z2V0bGJfaHN0YXRlX2FsbG9jX3BhZ2VzX29uZW5vZGUoc3RydWN0IGhzdGF0ZSAqaCwgaW50IG5pZClcbm1tL2h1Z2V0bGIuYy0zMzczLXtcbi0tXG5tbS9odWdldGxiLmMtMzQxNC1cbm1tL2h1Z2V0bGIuYzozNDE1OnN0YXRpYyBib29sIF9faW5pdCBodWdldGxiX2hzdGF0ZV9hbGxvY19wYWdlc19zcGVjaWZpY19ub2RlcyhzdHJ1Y3QgaHN0YXRlICpoKVxubW0vaHVnZXRsYi5jLTM0MTYte1xuLS1cbm1tL2h1Z2V0bGIuYy0zNDI5LVxubW0vaHVnZXRsYi5jOjM0MzA6c3RhdGljIHZvaWQgX19pbml0IGh1Z2V0bGJfaHN0YXRlX2FsbG9jX3BhZ2VzX2VycmNoZWNrKHVuc2lnbmVkIGxvbmcgYWxsb2NhdGVkLCBzdHJ1Y3QgaHN0YXRlICpoKVxubW0vaHVnZXRsYi5jLTM0MzEte1xuLS1cbm1tL2h1Z2V0bGIuYy0zNDQxLVxubW0vaHVnZXRsYi5jOjM0NDI6c3RhdGljIHZvaWQgX19pbml0IGh1Z2V0bGJfcGFnZXNfYWxsb2NfYm9vdF9ub2RlKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLCB2b2lkICphcmcpXG5tbS9odWdldGxiLmMtMzQ0My17XG4tLVxubW0vaHVnZXRsYi5jLTM0NzItXG5tbS9odWdldGxiLmM6MzQ3MzpzdGF0aWMgdW5zaWduZWQgbG9uZyBfX2luaXQgaHVnZXRsYl9naWdhbnRpY19wYWdlc19hbGxvY19ib290KHN0cnVjdCBoc3RhdGUgKmgpXG5tbS9odWdldGxiLmMtMzQ3NC17XG4tLVxubW0vaHVnZXRsYi5jLTM0ODUtXG5tbS9odWdldGxiLmM6MzQ4NjpzdGF0aWMgdW5zaWduZWQgbG9uZyBfX2luaXQgaHVnZXRsYl9wYWdlc19hbGxvY19ib290KHN0cnVjdCBoc3RhdGUgKmgpXG5tbS9odWdldGxiLmMtMzQ4Ny17XG4tLVxubW0vaHVnZXRsYi5jLTM1NjQtICovXG5tbS9odWdldGxiLmM6MzU2NTpzdGF0aWMgdm9pZCBfX2luaXQgaHVnZXRsYl9oc3RhdGVfYWxsb2NfcGFnZXMoc3RydWN0IGhzdGF0ZSAqaClcbm1tL2h1Z2V0bGIuYy0zNTY2LXtcbi0tXG5tbS9odWdldGxiLmMtMzU5NC1cbm1tL2h1Z2V0bGIuYzozNTk1OnN0YXRpYyB2b2lkIF9faW5pdCBodWdldGxiX2luaXRfaHN0YXRlcyh2b2lkKVxubW0vaHVnZXRsYi5jLTM1OTYte1xuLS1cbm1tL2h1Z2V0bGIuYz00MDQ3PXNzaXplX3QgX19ucl9odWdlcGFnZXNfc3RvcmVfY29tbW9uKGJvb2wgb2JleV9tZW1wb2xpY3ksXG4tLVxubW0vaHVnZXRsYi5jLTQwNzktXG5tbS9odWdldGxiLmM6NDA4MDpzdGF0aWMgaW50IF9faW5pdCBodWdldGxiX2luaXQodm9pZClcbm1tL2h1Z2V0bGIuYy00MDgxLXtcbi0tXG5tbS9odWdldGxiLmM9NDE1Mz1ib29sIF9faW5pdCBfX2F0dHJpYnV0ZSgod2VhaykpIGFyY2hfaHVnZXRsYl92YWxpZF9zaXplKHVuc2lnbmVkIGxvbmcgc2l6ZSlcbi0tXG5tbS9odWdldGxiLmMtNDE1Ny1cbm1tL2h1Z2V0bGIuYzo0MTU4OnZvaWQgX19pbml0IGh1Z2V0bGJfYWRkX2hzdGF0ZSh1bnNpZ25lZCBpbnQgb3JkZXIpXG5tbS9odWdldGxiLmMtNDE1OS17XG4tLVxubW0vaHVnZXRsYi5jLTQxODEtXG5tbS9odWdldGxiLmM6NDE4Mjpib29sIF9faW5pdCBfX3dlYWsgaHVnZXRsYl9ub2RlX2FsbG9jX3N1cHBvcnRlZCh2b2lkKVxubW0vaHVnZXRsYi5jLTQxODMte1xuLS1cbm1tL2h1Z2V0bGIuYz00MTg3PXN0YXRpYyB2b2lkIF9faW5pdCBodWdlcGFnZXNfY2xlYXJfcGFnZXNfaW5fbm9kZSh2b2lkKVxuLS1cbm1tL2h1Z2V0bGIuYy00MTk5LVxubW0vaHVnZXRsYi5jOjQyMDA6c3RhdGljIF9faW5pdCBpbnQgaHVnZXRsYl9hZGRfcGFyYW0oY2hhciAqcywgaW50ICgqc2V0dXApKGNoYXIgKikpXG5tbS9odWdldGxiLmMtNDIwMS17XG4tLVxubW0vaHVnZXRsYi5jLTQyMjYtXG5tbS9odWdldGxiLmM6NDIyNzpzdGF0aWMgX19pbml0IHZvaWQgaHVnZXRsYl9wYXJzZV9wYXJhbXModm9pZClcbm1tL2h1Z2V0bGIuYy00MjI4LXtcbi0tXG5tbS9odWdldGxiLmM9NDQ0Mj1odWdldGxiX2Vhcmx5X3BhcmFtKFwmIzM0O2RlZmF1bHRfaHVnZXBhZ2VzelwmIzM0OywgZGVmYXVsdF9odWdlcGFnZXN6X3NldHVwKTtcbm1tL2h1Z2V0bGIuYy00NDQzLVxubW0vaHVnZXRsYi5jOjQ0NDQ6dm9pZCBfX2luaXQgaHVnZXRsYl9ib290bWVtX3NldF9ub2Rlcyh2b2lkKVxubW0vaHVnZXRsYi5jLTQ0NDUte1xuLS1cbm1tL2h1Z2V0bGIuYy00NDU3LVxubW0vaHVnZXRsYi5jOjQ0NTg6dm9pZCBfX2luaXQgaHVnZXRsYl9ib290bWVtX2FsbG9jKHZvaWQpXG5tbS9odWdldGxiLmMtNDQ1OS17XG4tLVxubW0vaHVnZXRsYi5jPTQ1MDA9c3RhdGljIHVuc2lnbmVkIGludCBhbGxvd2VkX21lbXNfbnIoc3RydWN0IGhzdGF0ZSAqaClcbi0tXG5tbS9odWdldGxiLmMtNDUxNi1cbm1tL2h1Z2V0bGIuYzo0NTE3OnZvaWQgaHVnZXRsYl9yZXBvcnRfbWVtaW5mbyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0pXG5tbS9odWdldGxiLmMtNDUxOC17XG4tLVxubW0vaHVnZXRsYi5jLTQ1NDYtXG5tbS9odWdldGxiLmM6NDU0NzppbnQgaHVnZXRsYl9yZXBvcnRfbm9kZV9tZW1pbmZvKGNoYXIgKmJ1ZiwgaW50IGxlbiwgaW50IG5pZClcbm1tL2h1Z2V0bGIuYy00NTQ4LXtcbi0tXG5tbS9odWdldGxiLmMtNDU2Mi1cbm1tL2h1Z2V0bGIuYzo0NTYzOnZvaWQgaHVnZXRsYl9zaG93X21lbWluZm9fbm9kZShpbnQgbmlkKVxubW0vaHVnZXRsYi5jLTQ1NjQte1xuLS1cbm1tL2h1Z2V0bGIuYy00NTc4LVxubW0vaHVnZXRsYi5jOjQ1Nzk6dm9pZCBodWdldGxiX3JlcG9ydF91c2FnZShzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxubW0vaHVnZXRsYi5jLTQ1ODAte1xuLS1cbm1tL2h1Z2V0bGIuYy00NTg1LS8qIFJldHVybiB0aGUgbnVtYmVyIHBhZ2VzIG9mIG1lbW9yeSB3ZSBwaHlzaWNhbGx5IGhhdmUsIGluIFBBR0VfU0laRSB1bml0cy4gKi9cbm1tL2h1Z2V0bGIuYzo0NTg2OnVuc2lnbmVkIGxvbmcgaHVnZXRsYl90b3RhbF9wYWdlcyh2b2lkKVxubW0vaHVnZXRsYi5jLTQ1ODcte1xuLS1cbm1tL2h1Z2V0bGIuYy00NTk1LVxubW0vaHVnZXRsYi5jOjQ1OTY6c3RhdGljIGludCBodWdldGxiX2FjY3RfbWVtb3J5KHN0cnVjdCBoc3RhdGUgKmgsIGxvbmcgZGVsdGEpXG5tbS9odWdldGxiLmMtNDU5Ny17XG4tLVxubW0vaHVnZXRsYi5jLTQ2NDUtXG5tbS9odWdldGxiLmM6NDY0NjpzdGF0aWMgdm9pZCBodWdldGxiX3ZtX29wX29wZW4oc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXG5tbS9odWdldGxiLmMtNDY0Ny17XG4tLVxubW0vaHVnZXRsYi5jLTQ2ODUtXG5tbS9odWdldGxiLmM6NDY4NjpzdGF0aWMgdm9pZCBodWdldGxiX3ZtX29wX2Nsb3NlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxubW0vaHVnZXRsYi5jLTQ2ODcte1xuLS1cbm1tL2h1Z2V0bGIuYy00NzE2LVxubW0vaHVnZXRsYi5jOjQ3MTc6c3RhdGljIGludCBodWdldGxiX3ZtX29wX3NwbGl0KHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIpXG5tbS9odWdldGxiLmMtNDcxOC17XG4tLVxubW0vaHVnZXRsYi5jLTQ3MjMtXG5tbS9odWdldGxiLmM6NDcyNDp2b2lkIGh1Z2V0bGJfc3BsaXQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcilcbm1tL2h1Z2V0bGIuYy00NzI1LXtcbi0tXG5tbS9odWdldGxiLmMtNDc1Ni1cbm1tL2h1Z2V0bGIuYzo0NzU3OnN0YXRpYyB1bnNpZ25lZCBsb25nIGh1Z2V0bGJfdm1fb3BfcGFnZXNpemUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXG5tbS9odWdldGxiLmMtNDc1OC17XG4tLVxubW0vaHVnZXRsYi5jLTQ3NjctICovXG5tbS9odWdldGxiLmM6NDc2ODpzdGF0aWMgdm1fZmF1bHRfdCBodWdldGxiX3ZtX29wX2ZhdWx0KHN0cnVjdCB2bV9mYXVsdCAqdm1mKVxubW0vaHVnZXRsYi5jLTQ3Njkte1xuLS1cbm1tL2h1Z2V0bGIuYy00Nzc0LSNpZmRlZiBDT05GSUdfVVNFUkZBVUxURkRcbm1tL2h1Z2V0bGIuYzo0Nzc1OnN0YXRpYyBib29sIGh1Z2V0bGJfY2FuX3VzZXJmYXVsdChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbm1tL2h1Z2V0bGIuYy00Nzc2LVx0XHRcdFx0ICB2bV9mbGFnc190IHZtX2ZsYWdzKVxuLS1cbm1tL2h1Z2V0bGIuYz01MzYyPXN0YXRpYyB2b2lkIHVubWFwX3JlZl9wcml2YXRlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbi0tXG5tbS9odWdldGxiLmMtNTQxOC0gKi9cbm1tL2h1Z2V0bGIuYzo1NDE5OnN0YXRpYyB2bV9mYXVsdF90IGh1Z2V0bGJfd3Aoc3RydWN0IHZtX2ZhdWx0ICp2bWYpXG5tbS9odWdldGxiLmMtNTQyMC17XG4tLVxubW0vaHVnZXRsYi5jPTU2MTQ9Ym9vbCBodWdldGxiZnNfcGFnZWNhY2hlX3ByZXNlbnQoc3RydWN0IGhzdGF0ZSAqaCxcbi0tXG5tbS9odWdldGxiLmMtNTYyNy1cbm1tL2h1Z2V0bGIuYzo1NjI4OmludCBodWdldGxiX2FkZF90b19wYWdlX2NhY2hlKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxubW0vaHVnZXRsYi5jLTU2MjktXHRcdFx0ICAgcGdvZmZfdCBpZHgpXG4tLVxubW0vaHVnZXRsYi5jLTU2NTYtXG5tbS9odWdldGxiLmM6NTY1NzpzdGF0aWMgaW5saW5lIHZtX2ZhdWx0X3QgaHVnZXRsYl9oYW5kbGVfdXNlcmZhdWx0KHN0cnVjdCB2bV9mYXVsdCAqdm1mLFxubW0vaHVnZXRsYi5jLTU2NTgtXHRcdFx0XHRcdFx0ICBzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcbi0tXG5tbS9odWdldGxiLmMtNTY3Ny0gKi9cbm1tL2h1Z2V0bGIuYzo1Njc4OnN0YXRpYyBib29sIGh1Z2V0bGJfcHRlX3N0YWJsZShzdHJ1Y3QgaHN0YXRlICpoLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLFxubW0vaHVnZXRsYi5jLTU2NzktXHRcdFx0ICAgICAgIHB0ZV90ICpwdGVwLCBwdGVfdCBvbGRfcHRlKVxuLS1cbm1tL2h1Z2V0bGIuYy01NjkwLVxubW0vaHVnZXRsYi5jOjU2OTE6c3RhdGljIHZtX2ZhdWx0X3QgaHVnZXRsYl9ub19wYWdlKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxubW0vaHVnZXRsYi5jLTU2OTItXHRcdFx0c3RydWN0IHZtX2ZhdWx0ICp2bWYpXG4tLVxubW0vaHVnZXRsYi5jPTU5MzU9dTMyIGh1Z2V0bGJfZmF1bHRfbXV0ZXhfaGFzaChzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgcGdvZmZfdCBpZHgpXG4tLVxubW0vaHVnZXRsYi5jLTU5NDAtXG5tbS9odWdldGxiLmM6NTk0MTp2bV9mYXVsdF90IGh1Z2V0bGJfZmF1bHQoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxubW0vaHVnZXRsYi5jLTU5NDItXHRcdFx0dW5zaWduZWQgbG9uZyBhZGRyZXNzLCB1bnNpZ25lZCBpbnQgZmxhZ3MpXG4tLVxubW0vaHVnZXRsYi5jPTYxMzY9c3RhdGljIHN0cnVjdCBmb2xpbyAqYWxsb2NfaHVnZXRsYl9mb2xpb192bWEoc3RydWN0IGhzdGF0ZSAqaCxcbi0tXG5tbS9odWdldGxiLmMtNjE2Mi0gKi9cbm1tL2h1Z2V0bGIuYzo2MTYzOmludCBodWdldGxiX21maWxsX2F0b21pY19wdGUocHRlX3QgKmRzdF9wdGUsXG5tbS9odWdldGxiLmMtNjE2NC1cdFx0XHQgICAgIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqZHN0X3ZtYSxcbi0tXG5tbS9odWdldGxiLmMtNjM4My1cbm1tL2h1Z2V0bGIuYzo2Mzg0OmxvbmcgaHVnZXRsYl9jaGFuZ2VfcHJvdGVjdGlvbihzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbm1tL2h1Z2V0bGIuYy02Mzg1LVx0XHR1bnNpZ25lZCBsb25nIGFkZHJlc3MsIHVuc2lnbmVkIGxvbmcgZW5kLFxuLS1cbm1tL2h1Z2V0bGIuYy02NTM5LVxubW0vaHVnZXRsYi5jOjY1NDA6bG9uZyBodWdldGxiX3Jlc2VydmVfcGFnZXMoc3RydWN0IGlub2RlICppbm9kZSxcbm1tL2h1Z2V0bGIuYy02NTQxLVx0XHRsb25nIGZyb20sIGxvbmcgdG8sXG4tLVxubW0vaHVnZXRsYi5jLTY3MjctXG5tbS9odWdldGxiLmM6NjcyODpsb25nIGh1Z2V0bGJfdW5yZXNlcnZlX3BhZ2VzKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvbmcgc3RhcnQsIGxvbmcgZW5kLFxubW0vaHVnZXRsYi5jLTY3MjktXHRcdFx0XHRcdFx0XHRcdGxvbmcgZnJlZWQpXG4tLVxubW0vaHVnZXRsYi5jPTcwNTA9cHRlX3QgKmh1Z2VfcHRlX29mZnNldChzdHJ1Y3QgbW1fc3RydWN0ICptbSxcbi0tXG5tbS9odWdldGxiLmMtNzA4NC0gKi9cbm1tL2h1Z2V0bGIuYzo3MDg1OnVuc2lnbmVkIGxvbmcgaHVnZXRsYl9tYXNrX2xhc3RfcGFnZShzdHJ1Y3QgaHN0YXRlICpoKVxubW0vaHVnZXRsYi5jLTcwODYte1xuLS1cbm1tL2h1Z2V0bGIuYy03MDk5LS8qIFNlZSBkZXNjcmlwdGlvbiBhYm92ZS4gIEFyY2hpdGVjdHVyZXMgY2FuIHByb3ZpZGUgdGhlaXIgb3duIHZlcnNpb24uICovXG5tbS9odWdldGxiLmM6NzEwMDpfX3dlYWsgdW5zaWduZWQgbG9uZyBodWdldGxiX21hc2tfbGFzdF9wYWdlKHN0cnVjdCBoc3RhdGUgKmgpXG5tbS9odWdldGxiLmMtNzEwMS17XG4tLVxubW0vaHVnZXRsYi5jPTcxODU9dm9pZCBtb3ZlX2h1Z2V0bGJfc3RhdGUoc3RydWN0IGZvbGlvICpvbGRfZm9saW8sIHN0cnVjdCBmb2xpbyAqbmV3X2ZvbGlvLCBpbnQgcmVhc29uKVxuLS1cbm1tL2h1Z2V0bGIuYy03MjQwLSAqL1xubW0vaHVnZXRsYi5jOjcyNDE6c3RhdGljIHZvaWQgaHVnZXRsYl91bnNoYXJlX3BtZHMoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG5tbS9odWdldGxiLmMtNzI0Mi1cdFx0XHRcdCAgIHVuc2lnbmVkIGxvbmcgc3RhcnQsXG4tLVxubW0vaHVnZXRsYi5jLTczMDEtICovXG5tbS9odWdldGxiLmM6NzMwMjp2b2lkIGh1Z2V0bGJfdW5zaGFyZV9hbGxfcG1kcyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcbm1tL2h1Z2V0bGIuYy03MzAzLXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjQgMTg6NDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjUxOTYKCQkJCQkJCW91dHB1dDogNDQKCQkJCQkJCXRob3VnaHRzOiAyOTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIE1lbW9yeSBQb2lzb25pbmcgaW4gdGhlIEh1Z2VUTEIgYW5kIEZpbGUgU3lzdGVtcyoqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byBob3cgbWVtb3J5IHBvaXNvbmluZyBpcyBoYW5kbGVkLCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBjb250ZXh0IG9mIEh1Z2VUTEIgYW5kIGZpbGUgc3lzdGVtcy4gVGhlIGZ1bmN0aW9ucyBvZiBpbnRlcmVzdCDigJMgYGh1Z2V0bGJfdXBkYXRlX2h3cG9pc29uYCwgYGh1Z2V0bGJfcGFnZV9od3BvaXNvbmAsIGBodWdldGxiX3VucmVmX3BhZ2VfaHdwb2lzb25gLCBhbmQgYHVucG9pc29uX21lbW9yeWAg4oCTIHJlc2lkZSBpbiBgbW0vbWVtb3J5LWZhaWx1cmUuY2AuIEludGVyZXN0aW5n4oCmIEkgc2VlIHRoYXQgYGh1Z2V0bGJfdXBkYXRlX2h3cG9pc29uYCBpcyBzdGF0aWMsIHdoaWNoIGxpbWl0cyBpdHMgZGlyZWN0IGFjY2Vzc2liaWxpdHkgZnJvbSBlbHNld2hlcmUuIFRoZSBvdGhlcnMsIGBodWdldGxiX3BhZ2VfaHdwb2lzb25gLCBgaHVnZXRsYl91bnJlZl9wYWdlX2h3cG9pc29uYCwgYW5kIGB1bnBvaXNvbl9tZW1vcnlgLCBhcmUsIGZvcnR1bmF0ZWx5LCBub24tc3RhdGljIChleHBvcnRlZCksIG1ha2luZyB0aGVtIGF2YWlsYWJsZSBmb3IgZXh0ZXJuYWwgdXNlLgoKTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2UgYXJlICp1c2VkKi4gSSYjMzk7ZCBub3JtYWxseSBjaGVjayBgbW0vZmlsZW1hcC5jYCBmb3IgY2FsbHMgcmVsYXRlZCB0byBmaWxlIEkvTywgcGVyaGFwcyBgZmlsZW1hcF9yZWFkYCwgYGZpbGVtYXBfZ2V0X3JlYWRfYmF0Y2hgLCBvciBgZmlsZW1hcF9nZXRfcGFnZXNgLiBIb2xkIG9uLCBgZmlsZW1hcF9yZWFkYCBpcyBhIGtub3duIGhvdCBwYXRoOyB3ZSB3YW50IHRvIGF2b2lkIHBvdGVudGlhbGx5IGRpc3J1cHRpbmcgdGhhdCBpZiBwb3NzaWJsZS4gTGV0JiMzOTtzIHN0ZXAgYmFjay4uLiBobW0sIHdhc24mIzM5O3QgdGhlcmUgc29tZXRoaW5nIGFib3V0IGBodWdldGxiZnNfcmVhZF9pdGVyYD8gQWggeWVzLCB0aGF0IHdhcyByZW1vdmVkIOKAkyBzbyBubyBqb3kgdGhlcmUuIFdoYXQgYWJvdXQgYGFkanVzdF9yYW5nZV9od3BvaXNvbmA/IE5vcGUsIGl0JiMzOTtzIHN0YXRpYyBhZ2Fpbiwgc28gYWxzbyBub3QgdGhlIGRpcmVjdCBhbnN3ZXIgSSYjMzk7bSBzZWVraW5nLgoKT2theSwgbGV0JiMzOTtzIGNhc3QgYSB3aWRlciBuZXQuIFdoYXQgYWJvdXQgYGh1Z2V0bGJfZm9saW9fbWFwcGluZ19sb2NrX3dyaXRlYCBpbiBgbW0vaHVnZXRsYi5jYD8gVGhhdCBtaWdodCBiZSByZWxldmFudCBhcyB3ZSBhcmUgZGVhbGluZyB3aXRoIEh1Z2VUTEIgc3BlY2lmaWNhbGx5LiBBbmQgYWxzbywgcGVyaGFwcywgYGh1Z2V0bGJmc19pbml0X3JlZ3VsYXJfaW5vZGVgIGluIGBmcy9odWdldGxiZnMvaW5vZGUuY2AuLi4gSXQgbG9va3MgbGlrZSBhIGdvb2QgcGxhY2UgdG8gc3RhcnQsIHNvIEkmIzM5O2xsIGRpdmUgaW50byBgZnMvaHVnZXRsYmZzL2lub2RlLmNgIG5vdyB0byBpbnZlc3RpZ2F0ZSB0aGF0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNCAxODo0NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtec3RhdGljIHZvaWQgaHVnZXRsYmZzX2luaXRfcmVndWxhcl9pbm9kZVxcKCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL2h1Z2V0bGJmcy9pbm9kZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2h1Z2V0bGJmcy9pbm9kZS5jPTc1Nz1zdGF0aWMgc3RydWN0IGlub2RlICpodWdldGxiZnNfZ2V0X3Jvb3Qoc3RydWN0IHN1cGVyX2Jsb2NrICpzYixcbi0tXG5mcy9odWdldGxiZnMvaW5vZGUuYy03NzgtXG5mcy9odWdldGxiZnMvaW5vZGUuYzo3Nzk6c3RhdGljIHZvaWQgaHVnZXRsYmZzX2luaXRfcmVndWxhcl9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuZnMvaHVnZXRsYmZzL2lub2RlLmMtNzgwLXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjQgMTg6NDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjYwODkKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiAxMTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRm9jdXNpbmcgb24gSGFyZHdhcmUgUG9pc29uaW5nIGluIEh1Z2VUTEIgUGFnZXMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGBodWdldGxiZnNfaW5pdF9yZWd1bGFyX2lub2RlYCBhbmQgaW1tZWRpYXRlbHkgbm90aWNlIGl0JiMzOTtzIHN0YXRpYywgd2hpY2gsIHdoaWxlIHBvdGVudGlhbGx5IHJlbGV2YW50LCBpc24mIzM5O3Qgd2hlcmUgSSBuZWVkIHRvIGZvY3VzIHJpZ2h0IG5vdy4gTGV0JiMzOTtzIGRyaWxsIGRvd24gb24gdGhlIGNvcmUgaGFyZHdhcmUgcG9pc29uaW5nIGZ1bmN0aW9ucy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBwb2lzb24gaGFuZGxpbmcgd29ya3MgaW4gdGhlIGNvbnRleHQgb2YgSHVnZVRMQiBwYWdlcy4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIHRoaW5raW5nIGFib3V0IGBodWdldGxiX3BhZ2VfaHdwb2lzb25gLCBgaHVnZXRsYl91bnJlZl9wYWdlX2h3cG9pc29uYCwgYW5kIGB1bnBvaXNvbl9tZW1vcnlgLiBUaG9zZSBzZWVtIHRvIGJlIHRoZSBrZXkgcGxheWVycyBpbiBkZXRlY3RpbmcsIHJlcG9ydGluZywgYW5kIGhvcGVmdWxseSwgcmVjb3ZlcmluZyBmcm9tIGhhcmR3YXJlIGVycm9ycy4KCkkmIzM5O20gYWxzbyBzZWVpbmcgYGh1Z2V0bGJfc2V0X3BvaXNvbmAgYW5kIGBodWdldGxiX2NsZWFyX3BvaXNvbmAsIHdoaWNoIGFyZSBzdGF0aWMgaW5saW5lIGZ1bmN0aW9ucy4gVGhhdCYjMzk7cyBnb29kLCB0aGV5JiMzOTtyZSBwcm9iYWJseSBvcHRpbWl6ZWQgZm9yIHRoZWlyIHNwZWNpZmljIHVzZSB3aXRoaW4gdGhlIEh1Z2VUTEIgY29udGV4dC4KCldhaXQgYSBtaW51dGUsIHdoYXQmIzM5O3MgdGhpcz8gYGZvbGlvX2NsZWFyX2h1Z2V0bGJfaHdwb2lzb25gIGluIGBtbS9tZW1vcnktZmFpbHVyZS5jYCBpcyBub24tc3RhdGljLiBUaGF0JiMzOTtzIGludGVyZXN0aW5nLCBpdCBvcGVucyB1cCB0aGUgcG9zc2liaWxpdHkgb2YgZXh0ZXJuYWwgdXNlLCB3aGljaCB3YXJyYW50cyBmdXJ0aGVyIGludmVzdGlnYXRpb24uIEkmIzM5O2xsIG5lZWQgdG8gcmVtZW1iZXIgdGhhdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjQgMTg6NDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7XnZvaWQgZm9saW9fY2xlYXJfaHVnZXRsYl9od3BvaXNvblxcKCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL21lbW9yeS1mYWlsdXJlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vbWVtb3J5LWZhaWx1cmUuYz0xOTU4PXN0YXRpYyB1bnNpZ25lZCBsb25nIGZvbGlvX2ZyZWVfcmF3X2h3cChzdHJ1Y3QgZm9saW8gKmZvbGlvLCBib29sIG1vdmVfZmxhZylcbi0tXG5tbS9tZW1vcnktZmFpbHVyZS5jLTE5NzYtXG5tbS9tZW1vcnktZmFpbHVyZS5jOjE5Nzc6dm9pZCBmb2xpb19jbGVhcl9odWdldGxiX2h3cG9pc29uKHN0cnVjdCBmb2xpbyAqZm9saW8pXG5tbS9tZW1vcnktZmFpbHVyZS5jLTE5Nzgte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNCAxODo0NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNjYxMgoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDc1MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgUGF0Y2ggZm9yIEhXUG9pc29uIFRyYWNraW5nIGluIExhcmdlIEZvbGlvcyoqCgpPa2F5LCBmaXJzdCB0aGluZ3MgZmlyc3QsIGBmb2xpb19jbGVhcl9odWdldGxiX2h3cG9pc29uYCBpcyBjb25maXJtZWQgdG8gYmUgbm9uLXN0YXRpYy4gR29vZC4gTm93LCBsZXQmIzM5O3Mgc2VlIHdoYXQgZWxzZSB0aGlzIHBhdGNoIHRvdWNoZXMuIFNjYW5uaW5nIHRoZSBjb2RlLCBJIHNlZSBtb2RpZmljYXRpb25zIGluIGBtbS9maWxlbWFwLmNgIChzcGVjaWZpY2FsbHkgYGZpbGVtYXBfcmVhZGApLCBgbW0vaHVnZV9tZW1vcnkuY2AgKHNwZWNpZmljYWxseSBgdGhwX3VuZGVydXNlZGApLCBgbW0vc2htZW0uY2AgKHNwZWNpZmljYWxseSBgc2htZW1fd3JpdGVfYmVnaW5gKSwgYG1tL3Ztc2Nhbi5jYCAoc3BlY2lmaWNhbGx5IGBzaHJpbmtfZm9saW9fbGlzdGApLCBhbmQgYHZpcnQva3ZtL2d1ZXN0X21lbWZkLmNgIChzcGVjaWZpY2FsbHkgYF9fa3ZtX2dtZW1fZ2V0X3BmbmApLiBUaGlzIG1lYW5zIGl0JiMzOTtzIHByZXR0eSB3aWRlc3ByZWFkLgoKRXNzZW50aWFsbHksIHRoaXMgcGF0Y2ggaXMgYSBmdW5jdGlvbmFsIHNoaWZ0IGluIGhvdyBod3BvaXNvbiBpcyBoYW5kbGVkIGZvciBsYXJnZSBmb2xpb3MuIFdlJiMzOTtyZSBtb3ZpbmcgZnJvbSBhIGN1c3RvbSBsaXN0IChgZm9saW8tJmd0O19odWdldGxiX2h3cG9pc29uYCkgdG8gYSBzaW5nbGUgZmxhZyAoYGZvbGlvLSZndDtodWdldGxiX2h3cG9pc29uYCkgYW5kIHVzaW5nIGBmb2xpb19oYXNfaHdwb2lzb25lZF9wYWdlYCBpbnN0ZWFkIG9mIHRoZSBvbGQgYGZvbGlvX2NvbnRhaW5faHdwb2lzb25lZF9wYWdlYC4gSXQgYWxzbyByZW1vdmVzIHRoZSBjdXN0b20gYGh1Z2V0bGJmc19yZWFkX2l0ZXJgIGFuZCB1c2VzIGBnZW5lcmljX2ZpbGVfcmVhZF9pdGVyYCwgaW50ZWdyYXRpbmcgaHdwb2lzb24gaGFuZGxpbmcgd2l0aGluIGBmaWxlbWFwX3JlYWRgLiBUaGlzIGlzIHNpZ25pZmljYW50OyB0aGUgY2hhbmdlIGluIHRoZSByZWFkIHBhdGggaXMgYSBnb29kIGluZGljYXRvciBvZiB3aGVyZSB3ZSBzaG91bGQgZm9jdXMuCgpHaXZlbiB0aGUgZnVuY3Rpb25hbCBuYXR1cmUgb2YgdGhpcyBjaGFuZ2UsIGZ1enppbmcgaXMgZGVmaW5pdGVseSB3YXJyYW50ZWQuIE15IHByaW1hcnkgZm9jdXMgc3ltYm9scyB3aWxsIGJlOgoKKiAgIGBodWdldGxiX3BhZ2VfaHdwb2lzb25gCiogICBgaHVnZXRsYl91bnJlZl9wYWdlX2h3cG9pc29uYAoqICAgYHVucG9pc29uX21lbW9yeWAKKiAgIGBmb2xpb19jbGVhcl9odWdldGxiX2h3cG9pc29uYAoKTm93LCBsZXQmIzM5O3MgY29uc2lkZXIgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zLiBUaGUgY3JpdGljYWwgb25lcyBmb3IgdGhpcyBhcmVhIGFyZToKCiogICBgTUVNT1JZX0ZBSUxVUkVgIC0gVGhpcyBpcyBub24tbmVnb3RpYWJsZSBmb3IgaHdwb2lzb24uCiogICBgSFVHRVRMQkZTYCAtIFByZXR0eSBvYnZpb3VzLCBnaXZlbiB0aGUgbmFtZXMuCiogICBgSFVHRVRMQl9QQUdFYCAtIEFsc28gZXhwZWN0ZWQuCiogICBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgIC0gQWxzbywgYWRkZWQuCiogICBgS1ZNYCAtIFRoaXMgb25lIGlzIGltcG9ydGFudCBmb3IgYHZpcnQva3ZtL2d1ZXN0X21lbWZkLmNgLgoKQUhBISBUaGUgYExBUkdFX0ZPTElPYCBjb25maWcgKmlzKiBuZXcsIGJ1dCBpdCYjMzk7cyBzZWxlY3RlZCBieSBgSFVHRVRMQl9QQUdFYCBhbmQgYFRSQU5TUEFSRU5UX0hVR0VQQUdFYC4gU28sIGluY2x1ZGluZyBpdCBpcyBpbXBvcnRhbnQgdG8gaW5jbHVkZS4KCkRvdWJsZS1jaGVja2luZyBteSBjb25maWcgYXNzdW1wdGlvbnMsIGBNRU1PUllfRkFJTFVSRWAgc2VlbXMgdG8gYmUgdGhlIG9ubHkgKnJlcXVpcmVkKiBvbmUgZm9yIHRoZSBjb3JlIGh3cG9pc29uIGxvZ2ljLgoKUXVpY2sgc2lkZS1ub3RlLiBFdmVuIHRob3VnaCBgc2htZW1fd3JpdGVfYmVnaW5gIGFuZCBgc2hyaW5rX2ZvbGlvX2xpc3RgIGFyZSBtb2RpZmllZCwgdGhleSBhcmUgaG90IHBhdGhzLiBXZSBzaG91bGQgZGUtcHJpb3JpdGl6ZSB0aGVtIGZvciBub3cuCgpXYWl0Li4uIGB1bnBvaXNvbl9tZW1vcnlgIGlzIGV4cG9ydGVkLiBUaGF0JiMzOTtzIGludGVyZXN0aW5nLiBJIGtub3cgaXQgY2FuIGJlIGNhbGxlZCB0aHJvdWdoIGRlYnVnZnMgb3IgbWFkdmlzZS4gQnV0LCBhaC1oYSEgSXQmIzM5O3MgY2FsbGVkIGZyb20gYGh3cG9pc29uX3VucG9pc29uYCBpbiBgbW0vaHdwb2lzb24taW5qZWN0LmNgLiBJIG5lZWQgdG8gZW5zdXJlIHRoYXQgYEhXUE9JU09OX0lOSkVDVGAgaXMgZW5hYmxlZCBmb3IgdGhpcyBmdXp6aW5nIGVmZm9ydCB0byBjb3ZlciB0aGF0IGNvZGUgcGF0aC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjQgMTg6NDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEhXUE9JU09OX0lOSkVDVCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9LY29uZmlnPTc3Nz1jb25maWcgTUVNT1JZX0ZBSUxVUkVcbi0tXG5tbS9LY29uZmlnLTc4Ny1cbm1tL0tjb25maWc6Nzg4OmNvbmZpZyBIV1BPSVNPTl9JTkpFQ1Rcbm1tL0tjb25maWctNzg5LVx0dHJpc3RhdGUgXCYjMzQ7SFdQb2lzb24gcGFnZXMgaW5qZWN0b3JcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjQgMTg6NDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjgxNjMKCQkJCQkJCW91dHB1dDogMjM2CgkJCQkJCQl0aG91Z2h0czogMjg4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIEhXUE9JU09OIEZ1enppbmcgUG90ZW50aWFsKioKCk9rYXksIHNvIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgaG93IHRvIGJlc3QgZnV6eiB0aGUgYGh3cG9pc29uYCBmdW5jdGlvbmFsaXR5LiBZZXMsIHVzaW5nIGBIV1BPSVNPTl9JTkpFQ1RgIGlzIGRlZmluaXRlbHkgYSBnb29kIHN0YXJ0aW5nIHBvaW50IGZvciB0aGF0LiAKClRoZSBmaXJzdCB0aGluZyBJIG5lZWQgdG8gY29uZmlybSBpcyB0aGF0IGBNQURWX0hXUE9JU09OYCBpcyBldmVuIGF2YWlsYWJsZSBpbiB0aGUgY3VycmVudCBjb25maWd1cmF0aW9uLiBBaCwgeWVzLCBpdCYjMzk7cyB0aWVkIHRvIGBDT05GSUdfTUVNT1JZX0ZBSUxVUkVgLCBzbyB0aGF0JiMzOTtzIHRoZSBrZXkuICBOb3csIHdoYXQgb3RoZXIgY29uZmlnIG9wdGlvbnMgYXJlIGxpa2VseSByZWxldmFudCBoZXJlPyAgTGV0IG1lIHNlZToKCiogICBgTUVNT1JZX0ZBSUxVUkVgIC0gb2J2aW91c2x5LgoqICAgYEhXUE9JU09OX0lOSkVDVGAgLSBmb3IgaW5qZWN0aW9uLCBvZiBjb3Vyc2UuCiogICBgSFVHRVRMQkZTYCAtIGJlY2F1c2Ugd2UgYXJlIHRoaW5raW5nIGFib3V0IGh1Z2V0bGIgcGFnZXMuCiogICBgSFVHRVRMQl9QQUdFYCAtIGFnYWluLCBmb3IgdGhlIHBhZ2VzIHRoZW1zZWx2ZXMuCiogICBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgIC0gbWlnaHQgb3BlbiB1cCBzb21lIGludGVyZXN0aW5nIGZ1enppbmcgdmVjdG9ycy4KCk5vdywgbGV0JiMzOTtzIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBjcml0aWNhbCBzeW1ib2xzIEkgc2hvdWxkIGJlIGZvY3VzaW5nIG9uLiBXZSBoYXZlOgoKKiAgIGBodWdldGxiX3BhZ2VfaHdwb2lzb25gCiogICBgaHVnZXRsYl91bnJlZl9wYWdlX2h3cG9pc29uYAoqICAgYHVucG9pc29uX21lbW9yeWAKKiAgIGBmb2xpb19jbGVhcl9odWdldGxiX2h3cG9pc29uYAoKQXJlIHRoZXJlIGFueSBvdGhlciBmdW5jdGlvbnMgdGhhdCBtaWdodCBiZSB1c2VmdWwgdGFyZ2V0cz8gTGV0JiMzOTtzIGRpZyBkZWVwZXIuIE9rLCBsb29raW5nIGludG8gYG1tL2h1Z2V0bGIuY2AsIEkgc2VlIGBodWdldGxiX2ZvbGlvX21hcHBpbmdfbG9ja193cml0ZWAgaGFzIGJlZW4gbW9kaWZpZWQgaW4gdGhlIGNvbW1pdC4gQW5kIGluIGBtbS9tZW1vcnktZmFpbHVyZS5jYCwgdGhlcmUgYXJlIHF1aXRlIGEgZmV3IHN0YXRpYyBmdW5jdGlvbnMgdGhhdCB3aWxsIG5vdCBiZSB1c2VmdWwgZm9yIHVzOgoKKiAgIGBwcmVjaXNlX3BhZ2VfcG9pc29uZWRgIChzdGF0aWMpCiogICBgaHVnZXRsYl9zZXRfcG9pc29uYCAoc3RhdGljKQoqICAgYGh1Z2V0bGJfY2xlYXJfcG9pc29uYCAoc3RhdGljKQoqICAgYGh1Z2V0bGJfdXBkYXRlX2h3cG9pc29uYCAoc3RhdGljKQoKU2luY2Ugd2UgYXJlIGxvb2tpbmcgZm9yIGZ1bmN0aW9ucyB3ZSBjYW4gZGlyZWN0bHkgdGFyZ2V0IGZvciBmdXp6aW5nLCBJIHNob3VsZCBvbmx5IGNvbmNlcm4gbXlzZWxmIHdpdGggZnVuY3Rpb25zIHRoYXQgYXJlIGV4cG9ydGVkIG9yIGFyZSBub24tc3RhdGljLiBUaG9zZSA0IGZ1bmN0aW9ucyBJIG1lbnRpb25lZCBpbml0aWFsbHkgYXJlIHRoZSBvbmVzLgoKQWxyaWdodCwgdGhhdCYjMzk7cyBhIGdvb2Qgb3ZlcnZpZXcuIExldCYjMzk7cyBjYWxsIHRoZSBgc2V0LXJlc3VsdHNgIGZ1bmN0aW9uIHRvIHN1bW1hcml6ZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjQgMTg6NDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01FTU9SWV9GQUlMVVJFJiMzNDssCiAgICAmIzM0O0hXUE9JU09OX0lOSkVDVCYjMzQ7LAogICAgJiMzNDtIVUdFVExCRlMmIzM0OywKICAgICYjMzQ7SFVHRVRMQl9QQUdFJiMzNDssCiAgICAmIzM0O1RSQU5TUEFSRU5UX0hVR0VQQUdFJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aHVnZXRsYl9wYWdlX2h3cG9pc29uJiMzNDssCiAgICAmIzM0O2h1Z2V0bGJfdW5yZWZfcGFnZV9od3BvaXNvbiYjMzQ7LAogICAgJiMzNDt1bnBvaXNvbl9tZW1vcnkmIzM0OywKICAgICYjMzQ7Zm9saW9fY2xlYXJfaHVnZXRsYl9od3BvaXNvbiYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBob3cgaGFyZHdhcmUgcG9pc29uZWQgKEhXUE9JU09OKSBwYWdlcyBhcmUgdHJhY2tlZCBhbmQgaGFuZGxlZCB3aXRoaW4gbGFyZ2UgZm9saW9zLCBzcGVjaWZpY2FsbHkgYWZmZWN0aW5nIGh1Z2V0bGJmcyBhbmQgZmlsZW1hcCByZWFkIG9wZXJhdGlvbnMuIEl0IGludHJvZHVjZXMgbmV3IGxvZ2ljIHRvIHRyYWNrIHBvaXNvbmVkIHBhZ2VzIHVzaW5nIGBmb2xpby1cdTAwM2VodWdldGxiX2h3cG9pc29uYCBhbmQgcmVwbGFjZXMgdGhlIGN1c3RvbSBgaHVnZXRsYmZzX3JlYWRfaXRlcmAgd2l0aCBgZ2VuZXJpY19maWxlX3JlYWRfaXRlcmAsIGhhbmRsaW5nIGh3cG9pc29uIGRpcmVjdGx5IGluIGBmaWxlbWFwX3JlYWRgLiBUaGVzZSBhcmUgcmVhY2hhYmxlLCBmdW5jdGlvbmFsIGNoYW5nZXMgaW4gY29yZSBtZW1vcnkgbWFuYWdlbWVudCBhbmQgaHVnZXRsYmZzLiBGdXp6aW5nIHNob3VsZCBmb2N1cyBvbiB0aGUgbmV3IGh3cG9pc29uIHRyYWNraW5nIGZ1bmN0aW9ucyBhbmQgdW5wb2lzb25pbmcgbG9naWMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01FTU9SWV9GQUlMVVJFJiMzNDssCiAgICAmIzM0O0hXUE9JU09OX0lOSkVDVCYjMzQ7LAogICAgJiMzNDtIVUdFVExCRlMmIzM0OywKICAgICYjMzQ7SFVHRVRMQl9QQUdFJiMzNDssCiAgICAmIzM0O1RSQU5TUEFSRU5UX0hVR0VQQUdFJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aHVnZXRsYl9wYWdlX2h3cG9pc29uJiMzNDssCiAgICAmIzM0O2h1Z2V0bGJfdW5yZWZfcGFnZV9od3BvaXNvbiYjMzQ7LAogICAgJiMzNDt1bnBvaXNvbl9tZW1vcnkmIzM0OywKICAgICYjMzQ7Zm9saW9fY2xlYXJfaHVnZXRsYl9od3BvaXNvbiYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBob3cgaGFyZHdhcmUgcG9pc29uZWQgKEhXUE9JU09OKSBwYWdlcyBhcmUgdHJhY2tlZCBhbmQgaGFuZGxlZCB3aXRoaW4gbGFyZ2UgZm9saW9zLCBzcGVjaWZpY2FsbHkgYWZmZWN0aW5nIGh1Z2V0bGJmcyBhbmQgZmlsZW1hcCByZWFkIG9wZXJhdGlvbnMuIEl0IGludHJvZHVjZXMgbmV3IGxvZ2ljIHRvIHRyYWNrIHBvaXNvbmVkIHBhZ2VzIHVzaW5nIGBmb2xpby1cdTAwM2VodWdldGxiX2h3cG9pc29uYCBhbmQgcmVwbGFjZXMgdGhlIGN1c3RvbSBgaHVnZXRsYmZzX3JlYWRfaXRlcmAgd2l0aCBgZ2VuZXJpY19maWxlX3JlYWRfaXRlcmAsIGhhbmRsaW5nIGh3cG9pc29uIGRpcmVjdGx5IGluIGBmaWxlbWFwX3JlYWRgLiBUaGVzZSBhcmUgcmVhY2hhYmxlLCBmdW5jdGlvbmFsIGNoYW5nZXMgaW4gY29yZSBtZW1vcnkgbWFuYWdlbWVudCBhbmQgaHVnZXRsYmZzLiBGdXp6aW5nIHNob3VsZCBmb2N1cyBvbiB0aGUgbmV3IGh3cG9pc29uIHRyYWNraW5nIGZ1bmN0aW9ucyBhbmQgdW5wb2lzb25pbmcgbG9naWMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNy0yNFQxODo0NjoxOC40MjU0ODg1MTVaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5MTQ0MjMyOTMzMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJNRU1PUllfRkFJTFVSRVwiLFxuICAgIFwiSFdQT0lTT05fSU5KRUNUXCIsXG4gICAgXCJIVUdFVExCRlNcIixcbiAgICBcIkhVR0VUTEJfUEFHRVwiLFxuICAgIFwiVFJBTlNQQVJFTlRfSFVHRVBBR0VcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJodWdldGxiX3BhZ2VfaHdwb2lzb25cIixcbiAgICBcImh1Z2V0bGJfdW5yZWZfcGFnZV9od3BvaXNvblwiLFxuICAgIFwidW5wb2lzb25fbWVtb3J5XCIsXG4gICAgXCJmb2xpb19jbGVhcl9odWdldGxiX2h3cG9pc29uXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgaG93IGhhcmR3YXJlIHBvaXNvbmVkIChIV1BPSVNPTikgcGFnZXMgYXJlIHRyYWNrZWQgYW5kIGhhbmRsZWQgd2l0aGluIGxhcmdlIGZvbGlvcywgc3BlY2lmaWNhbGx5IGFmZmVjdGluZyBodWdldGxiZnMgYW5kIGZpbGVtYXAgcmVhZCBvcGVyYXRpb25zLiBJdCBpbnRyb2R1Y2VzIG5ldyBsb2dpYyB0byB0cmFjayBwb2lzb25lZCBwYWdlcyB1c2luZyBgZm9saW8tXFx1MDAzZWh1Z2V0bGJfaHdwb2lzb25gIGFuZCByZXBsYWNlcyB0aGUgY3VzdG9tIGBodWdldGxiZnNfcmVhZF9pdGVyYCB3aXRoIGBnZW5lcmljX2ZpbGVfcmVhZF9pdGVyYCwgaGFuZGxpbmcgaHdwb2lzb24gZGlyZWN0bHkgaW4gYGZpbGVtYXBfcmVhZGAuIFRoZXNlIGFyZSByZWFjaGFibGUsIGZ1bmN0aW9uYWwgY2hhbmdlcyBpbiBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBodWdldGxiZnMuIEZ1enppbmcgc2hvdWxkIGZvY3VzIG9uIHRoZSBuZXcgaHdwb2lzb24gdHJhY2tpbmcgZnVuY3Rpb25zIGFuZCB1bnBvaXNvbmluZyBsb2dpYy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjRUMTg6NDY6MTguNDI1NDk4MzM1WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzIyMTg1MjUwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgMGZlNmRlNmMyZjA1NzY2NDIxN2Q5NmEzZGE3NzJhNDg2NjdlNTU2N1xcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgRnJpIEp1bCAyNCAxODo0NjoxNiAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9mcy9LY29uZmlnIGIvZnMvS2NvbmZpZ1xcbmluZGV4IGNmNmFlNjQ3NzZlNjJjLi5lZGRhYzRlZDIxNGIxMiAxMDA2NDRcXG4tLS0gYS9mcy9LY29uZmlnXFxuKysrIGIvZnMvS2NvbmZpZ1xcbkBAIC0yNzIsNyArMjcyLDcgQEAgZW5kaWYgIyBIVUdFVExCRlNcXG4gXFxuIGNvbmZpZyBIVUdFVExCX1BBR0VcXG4gXFx0ZGVmX2Jvb2wgSFVHRVRMQkZTXFxuLVxcdHNlbGVjdCBYQVJSQVlfTVVMVElcXG4rXFx0c2VsZWN0IExBUkdFX0ZPTElPXFxuIFxcbiBjb25maWcgSFVHRVRMQl9QQUdFX09QVElNSVpFX1ZNRU1NQVBcXG4gXFx0ZGVmX2Jvb2wgSFVHRVRMQl9QQUdFXFxuZGlmZiAtLWdpdCBhL2ZzL2h1Z2V0bGJmcy9pbm9kZS5jIGIvZnMvaHVnZXRsYmZzL2lub2RlLmNcXG5pbmRleCAyMTZlMWEwZGQwYjIzNy4uY2VmN2U2MWI4MjdkNzEgMTAwNjQ0XFxuLS0tIGEvZnMvaHVnZXRsYmZzL2lub2RlLmNcXG4rKysgYi9mcy9odWdldGxiZnMvaW5vZGUuY1xcbkBAIC0xODcsMTEzICsxODcsNiBAQCBodWdldGxiX2dldF91bm1hcHBlZF9hcmVhKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBsb25nIGFkZHIsXFxuIFxcdHJldHVybiBtbV9nZXRfdW5tYXBwZWRfYXJlYV92bWZsYWdzKGZpbGUsIGFkZHIwLCBsZW4sIHBnb2ZmLCBmbGFncywgMCk7XFxuIH1cXG4gXFxuLS8qXFxuLSAqIFNvbWVvbmUgd2FudHMgdG8gcmVhZCBAYnl0ZXMgZnJvbSBhIEhXUE9JU09OIGh1Z2V0bGIgQGZvbGlvIGZyb20gQG9mZnNldC5cXG4tICogUmV0dXJucyB0aGUgbWF4aW11bSBudW1iZXIgb2YgYnl0ZXMgb25lIGNhbiByZWFkIHdpdGhvdXQgdG91Y2hpbmcgdGhlIDFzdCByYXdcXG4tICogSFdQT0lTT04gcGFnZS5cXG4tICovXFxuLXN0YXRpYyBzaXplX3QgYWRqdXN0X3JhbmdlX2h3cG9pc29uKHN0cnVjdCBmb2xpbyAqZm9saW8sIHNpemVfdCBvZmZzZXQsXFxuLVxcdFxcdHNpemVfdCBieXRlcylcXG4te1xcbi1cXHRzdHJ1Y3QgcGFnZSAqcGFnZSA9IGZvbGlvX3BhZ2UoZm9saW8sIG9mZnNldCAvIFBBR0VfU0laRSk7XFxuLVxcdHNpemVfdCBzYWZlX2J5dGVzO1xcbi1cXG4tXFx0aWYgKGlzX3Jhd19od3BvaXNvbl9wYWdlX2luX2h1Z2VwYWdlKHBhZ2UpKVxcbi1cXHRcXHRyZXR1cm4gMDtcXG4tXFx0LyogU2FmZSB0byByZWFkIHRoZSByZW1haW5pbmcgYnl0ZXMgaW4gdGhpcyBwYWdlLiAqL1xcbi1cXHRzYWZlX2J5dGVzID0gUEFHRV9TSVpFIC0gKG9mZnNldCAlIFBBR0VfU0laRSk7XFxuLVxcdHBhZ2UrKztcXG4tXFxuLVxcdC8qIENoZWNrIGVhY2ggcmVtYWluaW5nIHBhZ2UgYXMgbG9uZyBhcyB3ZSBhcmUgbm90IGRvbmUgeWV0LiAqL1xcbi1cXHRmb3IgKDsgc2FmZV9ieXRlcyBcXHUwMDNjIGJ5dGVzOyBzYWZlX2J5dGVzICs9IFBBR0VfU0laRSwgcGFnZSsrKVxcbi1cXHRcXHRpZiAoaXNfcmF3X2h3cG9pc29uX3BhZ2VfaW5faHVnZXBhZ2UocGFnZSkpXFxuLVxcdFxcdFxcdGJyZWFrO1xcbi1cXG4tXFx0cmV0dXJuIG1pbihzYWZlX2J5dGVzLCBieXRlcyk7XFxuLX1cXG4tXFxuLS8qXFxuLSAqIFN1cHBvcnQgZm9yIHJlYWQoKSAtIEZpbmQgdGhlIHBhZ2UgYXR0YWNoZWQgdG8gZl9tYXBwaW5nIGFuZCBjb3B5IG91dCB0aGVcXG4tICogZGF0YS4gVGhpcyBwcm92aWRlcyBmdW5jdGlvbmFsaXR5IHNpbWlsYXIgdG8gZmlsZW1hcF9yZWFkKCkuXFxuLSAqL1xcbi1zdGF0aWMgc3NpemVfdCBodWdldGxiZnNfcmVhZF9pdGVyKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICp0bylcXG4te1xcbi1cXHRzdHJ1Y3QgZmlsZSAqZmlsZSA9IGlvY2ItXFx1MDAzZWtpX2ZpbHA7XFxuLVxcdHN0cnVjdCBoc3RhdGUgKmggPSBoc3RhdGVfZmlsZShmaWxlKTtcXG4tXFx0c3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcgPSBmaWxlLVxcdTAwM2VmX21hcHBpbmc7XFxuLVxcdHN0cnVjdCBpbm9kZSAqaW5vZGUgPSBtYXBwaW5nLVxcdTAwM2Vob3N0O1xcbi1cXHR1bnNpZ25lZCBsb25nIGluZGV4ID0gaW9jYi1cXHUwMDNla2lfcG9zIFxcdTAwM2VcXHUwMDNlIGh1Z2VfcGFnZV9zaGlmdChoKTtcXG4tXFx0dW5zaWduZWQgbG9uZyBvZmZzZXQgPSBpb2NiLVxcdTAwM2VraV9wb3MgXFx1MDAyNiB+aHVnZV9wYWdlX21hc2soaCk7XFxuLVxcdHVuc2lnbmVkIGxvbmcgZW5kX2luZGV4O1xcbi1cXHRsb2ZmX3QgaXNpemU7XFxuLVxcdHNzaXplX3QgcmV0dmFsID0gMDtcXG4tXFxuLVxcdHdoaWxlIChpb3ZfaXRlcl9jb3VudCh0bykpIHtcXG4tXFx0XFx0c3RydWN0IGZvbGlvICpmb2xpbztcXG4tXFx0XFx0c2l6ZV90IG5yLCBjb3BpZWQsIHdhbnQ7XFxuLVxcbi1cXHRcXHQvKiBuciBpcyB0aGUgbWF4aW11bSBudW1iZXIgb2YgYnl0ZXMgdG8gY29weSBmcm9tIHRoaXMgcGFnZSAqL1xcbi1cXHRcXHRuciA9IGh1Z2VfcGFnZV9zaXplKGgpO1xcbi1cXHRcXHRpc2l6ZSA9IGlfc2l6ZV9yZWFkKGlub2RlKTtcXG4tXFx0XFx0aWYgKCFpc2l6ZSlcXG4tXFx0XFx0XFx0YnJlYWs7XFxuLVxcdFxcdGVuZF9pbmRleCA9IChpc2l6ZSAtIDEpIFxcdTAwM2VcXHUwMDNlIGh1Z2VfcGFnZV9zaGlmdChoKTtcXG4tXFx0XFx0aWYgKGluZGV4IFxcdTAwM2UgZW5kX2luZGV4KVxcbi1cXHRcXHRcXHRicmVhaztcXG4tXFx0XFx0aWYgKGluZGV4ID09IGVuZF9pbmRleCkge1xcbi1cXHRcXHRcXHRuciA9ICgoaXNpemUgLSAxKSBcXHUwMDI2IH5odWdlX3BhZ2VfbWFzayhoKSkgKyAxO1xcbi1cXHRcXHRcXHRpZiAobnIgXFx1MDAzYz0gb2Zmc2V0KVxcbi1cXHRcXHRcXHRcXHRicmVhaztcXG4tXFx0XFx0fVxcbi1cXHRcXHRuciA9IG5yIC0gb2Zmc2V0O1xcbi1cXG4tXFx0XFx0LyogRmluZCB0aGUgZm9saW8gKi9cXG4tXFx0XFx0Zm9saW8gPSBmaWxlbWFwX2xvY2tfaHVnZXRsYl9mb2xpbyhoLCBtYXBwaW5nLCBpbmRleCk7XFxuLVxcdFxcdGlmIChJU19FUlIoZm9saW8pKSB7XFxuLVxcdFxcdFxcdC8qXFxuLVxcdFxcdFxcdCAqIFdlIGhhdmUgYSBIT0xFLCB6ZXJvIG91dCB0aGUgdXNlci1idWZmZXIgZm9yIHRoZVxcbi1cXHRcXHRcXHQgKiBsZW5ndGggb2YgdGhlIGhvbGUgb3IgcmVxdWVzdC5cXG4tXFx0XFx0XFx0ICovXFxuLVxcdFxcdFxcdGNvcGllZCA9IGlvdl9pdGVyX3plcm8obnIsIHRvKTtcXG4tXFx0XFx0fSBlbHNlIHtcXG4tXFx0XFx0XFx0Zm9saW9fdW5sb2NrKGZvbGlvKTtcXG4tXFxuLVxcdFxcdFxcdGlmICghZm9saW9fdGVzdF9od3BvaXNvbihmb2xpbykpXFxuLVxcdFxcdFxcdFxcdHdhbnQgPSBucjtcXG4tXFx0XFx0XFx0ZWxzZSB7XFxuLVxcdFxcdFxcdFxcdC8qXFxuLVxcdFxcdFxcdFxcdCAqIEFkanVzdCBob3cgbWFueSBieXRlcyBzYWZlIHRvIHJlYWQgd2l0aG91dFxcbi1cXHRcXHRcXHRcXHQgKiB0b3VjaGluZyB0aGUgMXN0IHJhdyBIV1BPSVNPTiBwYWdlIGFmdGVyXFxuLVxcdFxcdFxcdFxcdCAqIG9mZnNldC5cXG4tXFx0XFx0XFx0XFx0ICovXFxuLVxcdFxcdFxcdFxcdHdhbnQgPSBhZGp1c3RfcmFuZ2VfaHdwb2lzb24oZm9saW8sIG9mZnNldCwgbnIpO1xcbi1cXHRcXHRcXHRcXHRpZiAod2FudCA9PSAwKSB7XFxuLVxcdFxcdFxcdFxcdFxcdGZvbGlvX3B1dChmb2xpbyk7XFxuLVxcdFxcdFxcdFxcdFxcdHJldHZhbCA9IC1FSU87XFxuLVxcdFxcdFxcdFxcdFxcdGJyZWFrO1xcbi1cXHRcXHRcXHRcXHR9XFxuLVxcdFxcdFxcdH1cXG4tXFxuLVxcdFxcdFxcdC8qXFxuLVxcdFxcdFxcdCAqIFdlIGhhdmUgdGhlIGZvbGlvLCBjb3B5IGl0IHRvIHVzZXIgc3BhY2UgYnVmZmVyLlxcbi1cXHRcXHRcXHQgKi9cXG4tXFx0XFx0XFx0Y29waWVkID0gY29weV9mb2xpb190b19pdGVyKGZvbGlvLCBvZmZzZXQsIHdhbnQsIHRvKTtcXG4tXFx0XFx0XFx0Zm9saW9fcHV0KGZvbGlvKTtcXG4tXFx0XFx0fVxcbi1cXHRcXHRvZmZzZXQgKz0gY29waWVkO1xcbi1cXHRcXHRyZXR2YWwgKz0gY29waWVkO1xcbi1cXHRcXHRpZiAoY29waWVkICE9IG5yIFxcdTAwMjZcXHUwMDI2IGlvdl9pdGVyX2NvdW50KHRvKSkge1xcbi1cXHRcXHRcXHRpZiAoIXJldHZhbClcXG4tXFx0XFx0XFx0XFx0cmV0dmFsID0gLUVGQVVMVDtcXG4tXFx0XFx0XFx0YnJlYWs7XFxuLVxcdFxcdH1cXG4tXFx0XFx0aW5kZXggKz0gb2Zmc2V0IFxcdTAwM2VcXHUwMDNlIGh1Z2VfcGFnZV9zaGlmdChoKTtcXG4tXFx0XFx0b2Zmc2V0IFxcdTAwMjY9IH5odWdlX3BhZ2VfbWFzayhoKTtcXG4tXFx0fVxcbi1cXHRpb2NiLVxcdTAwM2VraV9wb3MgPSAoKGxvZmZfdClpbmRleCBcXHUwMDNjXFx1MDAzYyBodWdlX3BhZ2Vfc2hpZnQoaCkpICsgb2Zmc2V0O1xcbi1cXHRyZXR1cm4gcmV0dmFsO1xcbi19XFxuLVxcbiBzdGF0aWMgaW50IGh1Z2V0bGJmc193cml0ZV9iZWdpbihjb25zdCBzdHJ1Y3Qga2lvY2IgKmlvY2IsXFxuIFxcdFxcdFxcdHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxcbiBcXHRcXHRcXHRsb2ZmX3QgcG9zLCB1bnNpZ25lZCBsZW4sXFxuQEAgLTg4Myw2ICs3NzYsMTcgQEAgc3RhdGljIHN0cnVjdCBpbm9kZSAqaHVnZXRsYmZzX2dldF9yb290KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsXFxuIFxcdHJldHVybiBpbm9kZTtcXG4gfVxcbiBcXG4rc3RhdGljIHZvaWQgaHVnZXRsYmZzX2luaXRfcmVndWxhcl9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKVxcbit7XFxuK1xcdHN0cnVjdCBoc3RhdGUgKmhzdGF0ZSA9IGhzdGF0ZV9pbm9kZShpbm9kZSk7XFxuK1xcdHVuc2lnbmVkIGludCBvcmRlciA9IGh1Z2VfcGFnZV9vcmRlcihoc3RhdGUpO1xcbitcXG4rXFx0aW5vZGUtXFx1MDAzZWlfb3AgPSBcXHUwMDI2aHVnZXRsYmZzX2lub2RlX29wZXJhdGlvbnM7XFxuK1xcdGlub2RlLVxcdTAwM2VpX2ZvcCA9IFxcdTAwMjZodWdldGxiZnNfZmlsZV9vcGVyYXRpb25zO1xcbitcXHRtYXBwaW5nX3NldF9mb2xpb19vcmRlcl9yYW5nZShpbm9kZS1cXHUwMDNlaV9tYXBwaW5nLCBvcmRlciwgb3JkZXIpO1xcbitcXHRtYXBwaW5nX3NldF9hdXRob3JpdGF0aXZlKGlub2RlLVxcdTAwM2VpX21hcHBpbmcpO1xcbit9XFxuK1xcbiAvKlxcbiAgKiBIdWdldGxiZnMgaXMgbm90IHJlY2xhaW1hYmxlOyB0aGVyZWZvcmUgaXRzIGlfbW1hcF9yd3NlbSB3aWxsIG5ldmVyXFxuICAqIGJlIHRha2VuIGZyb20gcmVjbGFpbSAtLSB1bmxpa2UgcmVndWxhciBmaWxlc3lzdGVtcy4gVGhpcyBuZWVkcyBhblxcbkBAIC05MjYsOCArODMwLDcgQEAgc3RhdGljIHN0cnVjdCBpbm9kZSAqaHVnZXRsYmZzX2dldF9pbm9kZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxcbiBcXHRcXHRcXHRpbml0X3NwZWNpYWxfaW5vZGUoaW5vZGUsIG1vZGUsIGRldik7XFxuIFxcdFxcdFxcdGJyZWFrO1xcbiBcXHRcXHRjYXNlIFNfSUZSRUc6XFxuLVxcdFxcdFxcdGlub2RlLVxcdTAwM2VpX29wID0gXFx1MDAyNmh1Z2V0bGJmc19pbm9kZV9vcGVyYXRpb25zO1xcbi1cXHRcXHRcXHRpbm9kZS1cXHUwMDNlaV9mb3AgPSBcXHUwMDI2aHVnZXRsYmZzX2ZpbGVfb3BlcmF0aW9ucztcXG4rXFx0XFx0XFx0aHVnZXRsYmZzX2luaXRfcmVndWxhcl9pbm9kZShpbm9kZSk7XFxuIFxcdFxcdFxcdGJyZWFrO1xcbiBcXHRcXHRjYXNlIFNfSUZESVI6XFxuIFxcdFxcdFxcdGlub2RlLVxcdTAwM2VpX29wID0gXFx1MDAyNmh1Z2V0bGJmc19kaXJfaW5vZGVfb3BlcmF0aW9ucztcXG5AQCAtMTIwNiw3ICsxMTA5LDcgQEAgc3RhdGljIHZvaWQgaW5pdF9vbmNlKHZvaWQgKmZvbylcXG4gfVxcbiBcXG4gc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgaHVnZXRsYmZzX2ZpbGVfb3BlcmF0aW9ucyA9IHtcXG4tXFx0LnJlYWRfaXRlclxcdFxcdD0gaHVnZXRsYmZzX3JlYWRfaXRlcixcXG4rXFx0LnJlYWRfaXRlclxcdFxcdD0gZ2VuZXJpY19maWxlX3JlYWRfaXRlcixcXG4gXFx0Lm1tYXBcXHRcXHRcXHQ9IGh1Z2V0bGJmc19maWxlX21tYXAsXFxuIFxcdC5mc3luY1xcdFxcdFxcdD0gbm9vcF9mc3luYyxcXG4gXFx0LmdldF91bm1hcHBlZF9hcmVhXFx0PSBodWdldGxiX2dldF91bm1hcHBlZF9hcmVhLFxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaCBiL2luY2x1ZGUvbGludXgvaHVnZXRsYi5oXFxuaW5kZXggMmFiYWY5OTMyMWU5MGQuLjE4Nzg2NDJlNzVlYzUxIDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgvaHVnZXRsYi5oXFxuKysrIGIvaW5jbHVkZS9saW51eC9odWdldGxiLmhcXG5AQCAtMTY1LDcgKzE2NSw3IEBAIGJvb2wgaHVnZXRsYmZzX3BhZ2VjYWNoZV9wcmVzZW50KHN0cnVjdCBoc3RhdGUgKmgsXFxuIFxcdFxcdFxcdFxcdCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4gXFx0XFx0XFx0XFx0IHVuc2lnbmVkIGxvbmcgYWRkcmVzcyk7XFxuIFxcbi1zdHJ1Y3QgYWRkcmVzc19zcGFjZSAqaHVnZXRsYl9mb2xpb19tYXBwaW5nX2xvY2tfd3JpdGUoc3RydWN0IGZvbGlvICpmb2xpbyk7XFxuK3N0cnVjdCBhZGRyZXNzX3NwYWNlICpodWdldGxiX2ZvbGlvX21hcHBpbmdfbG9ja193cml0ZShjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcXG4gXFxuIGV4dGVybiBpbnQgbW92YWJsZV9naWdhbnRpY19wYWdlcyBfX3JlYWRfbW9zdGx5O1xcbiBleHRlcm4gaW50IHN5c2N0bF9odWdldGxiX3NobV9ncm91cCBfX3JlYWRfbW9zdGx5O1xcbkBAIC0yOTIsOCArMjkyLDcgQEAgc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGh1Z2V0bGJfdG90YWxfcGFnZXModm9pZClcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuLXN0YXRpYyBpbmxpbmUgc3RydWN0IGFkZHJlc3Nfc3BhY2UgKmh1Z2V0bGJfZm9saW9fbWFwcGluZ19sb2NrX3dyaXRlKFxcbi1cXHRcXHRcXHRcXHRcXHRcXHRcXHRzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbitzdGF0aWMgaW5saW5lIHN0cnVjdCBhZGRyZXNzX3NwYWNlICpodWdldGxiX2ZvbGlvX21hcHBpbmdfbG9ja193cml0ZShjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbiB7XFxuIFxcdHJldHVybiBOVUxMO1xcbiB9XFxuQEAgLTU5NSw4ICs1OTQsOCBAQCBlbnVtIGh1Z2V0bGJfcGFnZV9mbGFncyB7XFxuICNpZmRlZiBDT05GSUdfSFVHRVRMQl9QQUdFXFxuICNkZWZpbmUgVEVTVEhQQUdFRkxBRyh1bmFtZSwgZmxuYW1lKVxcdFxcdFxcdFxcdFxcXFxcXG4gc3RhdGljIF9fYWx3YXlzX2lubGluZVxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4tYm9vbCBmb2xpb190ZXN0X2h1Z2V0bGJfIyNmbG5hbWUoc3RydWN0IGZvbGlvICpmb2xpbylcXHRcXHRcXFxcXFxuLVxcdHtcXHR2b2lkICpwcml2YXRlID0gXFx1MDAyNmZvbGlvLVxcdTAwM2Vwcml2YXRlO1xcdFxcdFxcXFxcXG4rYm9vbCBmb2xpb190ZXN0X2h1Z2V0bGJfIyNmbG5hbWUoY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbylcXHRcXFxcXFxuK1xcdHtcXHRjb25zdCB2b2lkICpwcml2YXRlID0gXFx1MDAyNmZvbGlvLVxcdTAwM2Vwcml2YXRlO1xcdFxcdFxcXFxcXG4gXFx0XFx0cmV0dXJuIHRlc3RfYml0KEhQR18jI2ZsbmFtZSwgcHJpdmF0ZSk7XFx0XFx0XFxcXFxcbiBcXHR9XFxuIFxcbkBAIC02MTYsNyArNjE1LDcgQEAgdm9pZCBmb2xpb19jbGVhcl9odWdldGxiXyMjZmxuYW1lKHN0cnVjdCBmb2xpbyAqZm9saW8pXFx0XFx0XFxcXFxcbiAjZWxzZVxcbiAjZGVmaW5lIFRFU1RIUEFHRUZMQUcodW5hbWUsIGZsbmFtZSlcXHRcXHRcXHRcXHRcXFxcXFxuIHN0YXRpYyBpbmxpbmUgYm9vbFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4tZm9saW9fdGVzdF9odWdldGxiXyMjZmxuYW1lKHN0cnVjdCBmb2xpbyAqZm9saW8pXFx0XFx0XFxcXFxcbitmb2xpb190ZXN0X2h1Z2V0bGJfIyNmbG5hbWUoY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbylcXHRcXHRcXFxcXFxuIFxcdHsgcmV0dXJuIDA7IH1cXG4gXFxuICNkZWZpbmUgU0VUSFBBR0VGTEFHKHVuYW1lLCBmbG5hbWUpXFx0XFx0XFx0XFx0XFxcXFxcbkBAIC03MjcsNyArNzI2LDcgQEAgc3RhdGljIGlubGluZSBzdHJ1Y3QgaHVnZXBhZ2Vfc3VicG9vbCAqc3VicG9vbF9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKVxcbiBcXHRyZXR1cm4gSFVHRVRMQkZTX1NCKGlub2RlLVxcdTAwM2VpX3NiKS1cXHUwMDNlc3Bvb2w7XFxuIH1cXG4gXFxuLXN0YXRpYyBpbmxpbmUgc3RydWN0IGh1Z2VwYWdlX3N1YnBvb2wgKmh1Z2V0bGJfZm9saW9fc3VicG9vbChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbitzdGF0aWMgaW5saW5lIHN0cnVjdCBodWdlcGFnZV9zdWJwb29sICpodWdldGxiX2ZvbGlvX3N1YnBvb2woY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbylcXG4ge1xcbiBcXHRyZXR1cm4gZm9saW8tXFx1MDAzZV9odWdldGxiX3N1YnBvb2w7XFxuIH1cXG5AQCAtODU3LDcgKzg1Niw3IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBhcmNoX2hhc19odWdlX2Jvb3RtZW1fYWxsb2Modm9pZClcXG4gfVxcbiAjZW5kaWZcXG4gXFxuLXN0YXRpYyBpbmxpbmUgc3RydWN0IGhzdGF0ZSAqZm9saW9faHN0YXRlKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuK3N0YXRpYyBpbmxpbmUgc3RydWN0IGhzdGF0ZSAqZm9saW9faHN0YXRlKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuIHtcXG4gXFx0Vk1fQlVHX09OX0ZPTElPKCFmb2xpb190ZXN0X2h1Z2V0bGIoZm9saW8pLCBmb2xpbyk7XFxuIFxcdHJldHVybiBzaXplX3RvX2hzdGF0ZShmb2xpb19zaXplKGZvbGlvKSk7XFxuQEAgLTEwNzAsMTEgKzEwNjksNiBAQCB2b2lkIGh1Z2V0bGJfcmVnaXN0ZXJfbm9kZShzdHJ1Y3Qgbm9kZSAqbm9kZSk7XFxuIHZvaWQgaHVnZXRsYl91bnJlZ2lzdGVyX25vZGUoc3RydWN0IG5vZGUgKm5vZGUpO1xcbiAjZW5kaWZcXG4gXFxuLS8qXFxuLSAqIENoZWNrIGlmIGEgZ2l2ZW4gcmF3IEBwYWdlIGluIGEgaHVnZXBhZ2UgaXMgSFdQT0lTT04uXFxuLSAqL1xcbi1ib29sIGlzX3Jhd19od3BvaXNvbl9wYWdlX2luX2h1Z2VwYWdlKHN0cnVjdCBwYWdlICpwYWdlKTtcXG4tXFxuIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBodWdlX3BhZ2VfbWFza19hbGlnbihzdHJ1Y3QgZmlsZSAqZmlsZSlcXG4ge1xcbiBcXHRyZXR1cm4gUEFHRV9NQVNLIFxcdTAwMjYgfmh1Z2VfcGFnZV9tYXNrKGhzdGF0ZV9maWxlKGZpbGUpKTtcXG5AQCAtMTA4OCw3ICsxMDgyLDcgQEAgc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGh1Z2VfcGFnZV9tYXNrX2FsaWduKHN0cnVjdCBmaWxlICpmaWxlKVxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4tc3RhdGljIGlubGluZSBzdHJ1Y3QgaHVnZXBhZ2Vfc3VicG9vbCAqaHVnZXRsYl9mb2xpb19zdWJwb29sKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuK3N0YXRpYyBpbmxpbmUgc3RydWN0IGh1Z2VwYWdlX3N1YnBvb2wgKmh1Z2V0bGJfZm9saW9fc3VicG9vbChjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbiB7XFxuIFxcdHJldHVybiBOVUxMO1xcbiB9XFxuQEAgLTExNTcsNyArMTE1MSw3IEBAIHN0YXRpYyBpbmxpbmUgc3RydWN0IGhzdGF0ZSAqaHN0YXRlX3ZtYShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcXG4gXFx0cmV0dXJuIE5VTEw7XFxuIH1cXG4gXFxuLXN0YXRpYyBpbmxpbmUgc3RydWN0IGhzdGF0ZSAqZm9saW9faHN0YXRlKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuK3N0YXRpYyBpbmxpbmUgc3RydWN0IGhzdGF0ZSAqZm9saW9faHN0YXRlKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuIHtcXG4gXFx0cmV0dXJuIE5VTEw7XFxuIH1cXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tbV90eXBlcy5oIGIvaW5jbHVkZS9saW51eC9tbV90eXBlcy5oXFxuaW5kZXggYjE4YzJiMmU3ZDJjNjUuLmQ3YTliMGQ4YmJkZmIxIDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgvbW1fdHlwZXMuaFxcbisrKyBiL2luY2x1ZGUvbGludXgvbW1fdHlwZXMuaFxcbkBAIC0zODcsNyArMzg3LDcgQEAgdHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBtbV9pZF90O1xcbiAgKiBAX2h1Z2V0bGJfc3VicG9vbDogRG8gbm90IHVzZSBkaXJlY3RseSwgdXNlIGFjY2Vzc29yIGluIGh1Z2V0bGIuaC5cXG4gICogQF9odWdldGxiX2Nncm91cDogRG8gbm90IHVzZSBkaXJlY3RseSwgdXNlIGFjY2Vzc29yIGluIGh1Z2V0bGJfY2dyb3VwLmguXFxuICAqIEBfaHVnZXRsYl9jZ3JvdXBfcnN2ZDogRG8gbm90IHVzZSBkaXJlY3RseSwgdXNlIGFjY2Vzc29yIGluIGh1Z2V0bGJfY2dyb3VwLmguXFxuLSAqIEBfaHVnZXRsYl9od3BvaXNvbjogRG8gbm90IHVzZSBkaXJlY3RseSwgY2FsbCByYXdfaHdwX2xpc3RfaGVhZCgpLlxcbisgKiBAaHVnZXRsYl9od3BvaXNvbjogTGlzdCBvZiBwYWdlcyB3aXRoIGh3cG9pc29uLlxcbiAgKiBAX2RlZmVycmVkX2xpc3Q6IEZvbGlvcyB0byBiZSBzcGxpdCB1bmRlciBtZW1vcnkgcHJlc3N1cmUuXFxuICAqIEBfdW51c2VkX3NsYWJfb2JqX2V4dHM6IFBsYWNlaG9sZGVyIHRvIG1hdGNoIG9ial9leHRzIGluIHN0cnVjdCBzbGFiLlxcbiAgKlxcbkBAIC00OTksNyArNDk5LDcgQEAgc3RydWN0IGZvbGlvIHtcXG4gXFx0XFx0XFx0dm9pZCAqX2h1Z2V0bGJfc3VicG9vbDtcXG4gXFx0XFx0XFx0dm9pZCAqX2h1Z2V0bGJfY2dyb3VwO1xcbiBcXHRcXHRcXHR2b2lkICpfaHVnZXRsYl9jZ3JvdXBfcnN2ZDtcXG4tXFx0XFx0XFx0dm9pZCAqX2h1Z2V0bGJfaHdwb2lzb247XFxuK1xcdFxcdFxcdHN0cnVjdCBsbGlzdF9oZWFkIGh1Z2V0bGJfaHdwb2lzb247XFxuIFxcdC8qIHByaXZhdGU6IHRoZSB1bmlvbiB3aXRoIHN0cnVjdCBwYWdlIGlzIHRyYW5zaXRpb25hbCAqL1xcbiBcXHRcXHR9O1xcbiBcXHRcXHRzdHJ1Y3QgcGFnZSBfX3BhZ2VfMztcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmggYi9pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaFxcbmluZGV4IDcyMjNmNmY0ZTJiNDAzLi5iMTQ2YzUyMjg3NDFjMCAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaFxcbisrKyBiL2luY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oXFxuQEAgLTg5MywxNCArODkzLDE5IEBAIHN0YXRpYyBpbmxpbmUgaW50IFBhZ2VUcmFuc0NvbXBvdW5kKGNvbnN0IHN0cnVjdCBwYWdlICpwYWdlKVxcbiBURVNUUEFHRUZMQUdfRkFMU0UoVHJhbnNDb21wb3VuZCwgdHJhbnNjb21wb3VuZClcXG4gI2VuZGlmXFxuIFxcbi0jaWYgZGVmaW5lZChDT05GSUdfTUVNT1JZX0ZBSUxVUkUpIFxcdTAwMjZcXHUwMDI2IGRlZmluZWQoQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFKVxcbisjaWYgZGVmaW5lZChDT05GSUdfTUVNT1JZX0ZBSUxVUkUpIFxcdTAwMjZcXHUwMDI2IGRlZmluZWQoQ09ORklHX0xBUkdFX0ZPTElPKVxcbiAvKlxcbi0gKiBQYWdlSGFzSFdQb2lzb25lZCBpbmRpY2F0ZXMgdGhhdCBhdCBsZWFzdCBvbmUgc3VicGFnZSBpcyBod3BvaXNvbmVkIGluIHRoZVxcbi0gKiBjb21wb3VuZCBwYWdlLlxcbisgKiBmb2xpb19oYXNfaHdwb2lzb25lZCBpbmRpY2F0ZXMgdGhhdCBhdCBsZWFzdCBvbmUgcGFnZSBpcyBod3BvaXNvbmVkIGluIHRoZVxcbisgKiBmb2xpby4gIFRoYXQgcGFnZSB3aWxsIHVzdWFsbHkgYWxzbyBoYXZlIHRoZSBIV1BvaXNvbiBmbGFnIHNldCwgYnV0IHRoaXNcXG4rICogaXMgbm90IHBvc3NpYmxlIGZvciBmb2xpb3Mgd2hpY2ggaGF2ZSBIVk8gKHNlZSBtZW1vcnktZmFpbHVyZSBmb3IgdGhlXFxuKyAqIHNjaGVtZSB1c2VkIGluIHRoYXQgY2FzZSkuICBZb3UgcHJvYmFibHkgZG9uJ3Qgd2FudCB0byBjYWxsIHRoaXMgZGlyZWN0bHk7XFxuKyAqIHVzZSBmb2xpb19oYXNfaHdwb2lzb25lZF9wYWdlKCkgaW5zdGVhZC5cXG4gICpcXG4gICogVGhpcyBmbGFnIGlzIHNldCBieSBod3BvaXNvbiBoYW5kbGVyLiAgQ2xlYXJlZCBieSBUSFAgc3BsaXQgb3IgZnJlZSBwYWdlLlxcbiAgKi9cXG4gRk9MSU9fRkxBRyhoYXNfaHdwb2lzb25lZCwgRk9MSU9fU0VDT05EX1BBR0UpXFxuK0ZPTElPX1RFU1RfU0VUX0ZMQUcoaGFzX2h3cG9pc29uZWQsIEZPTElPX1NFQ09ORF9QQUdFKVxcbitGT0xJT19URVNUX0NMRUFSX0ZMQUcoaGFzX2h3cG9pc29uZWQsIEZPTElPX1NFQ09ORF9QQUdFKVxcbiAjZWxzZVxcbiBGT0xJT19GTEFHX0ZBTFNFKGhhc19od3BvaXNvbmVkKVxcbiAjZW5kaWZcXG5AQCAtMTA0MSw4ICsxMDQ2LDI1IEBAIFBBR0VfVFlQRV9PUFMoU2xhYiwgc2xhYiwgc2xhYilcXG4gXFxuICNpZmRlZiBDT05GSUdfSFVHRVRMQl9QQUdFXFxuIEZPTElPX1RZUEVfT1BTKGh1Z2V0bGIsIGh1Z2V0bGIpXFxuK1xcbitzdGF0aWMgaW5saW5lIGJvb2wgZm9saW9fdGVzdF9odWdlX3BvaXNvbihjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbit7XFxuK1xcdHJldHVybiAoUkVBRF9PTkNFKGZvbGlvLVxcdTAwM2VwYWdlLnBhZ2VfdHlwZSkgXFx1MDAzZVxcdTAwM2UgMjMpID09XFxuK1xcdFxcdCgoUEdUWV9odWdldGxiIFxcdTAwM2NcXHUwMDNjIDEpIHwgMSk7XFxuK31cXG4rXFxuK3N0YXRpYyBpbmxpbmUgdm9pZCBmb2xpb19zZXRfaHVnZV9wb2lzb24oc3RydWN0IGZvbGlvICpmb2xpbylcXG4re1xcbitcXHRmb2xpby1cXHUwMDNlcGFnZS5wYWdlX3R5cGUgfD0gKDEgXFx1MDAzY1xcdTAwM2MgMjMpO1xcbit9XFxuK1xcbitzdGF0aWMgaW5saW5lIHZvaWQgZm9saW9fY2xlYXJfaHVnZV9wb2lzb24oc3RydWN0IGZvbGlvICpmb2xpbylcXG4re1xcbitcXHRmb2xpby1cXHUwMDNlcGFnZS5wYWdlX3R5cGUgXFx1MDAyNj0gfigxIFxcdTAwM2NcXHUwMDNjIDIzKTtcXG4rfVxcbiAjZWxzZVxcbiBGT0xJT19URVNUX0ZMQUdfRkFMU0UoaHVnZXRsYilcXG4rRk9MSU9fVEVTVF9GTEFHX0ZBTFNFKGh1Z2VfcG9pc29uKVxcbiAjZW5kaWZcXG4gXFxuIFBBR0VfVFlQRV9PUFMoWnNtYWxsb2MsIHpzbWFsbG9jLCB6c21hbGxvYylcXG5AQCAtMTA2OCwxMCArMTA5MCwxNCBAQCBzdGF0aWMgaW5saW5lIGJvb2wgUGFnZUh1Z2UoY29uc3Qgc3RydWN0IHBhZ2UgKnBhZ2UpXFxuIFxcdHJldHVybiBmb2xpb190ZXN0X2h1Z2V0bGIocGFnZV9mb2xpbyhwYWdlKSk7XFxuIH1cXG4gXFxuK2Jvb2wgaHVnZXRsYl9wYWdlX2h3cG9pc29uKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8sIGNvbnN0IHN0cnVjdCBwYWdlICpwYWdlKTtcXG4rYm9vbCBodWdldGxiX3VucmVmX3BhZ2VfaHdwb2lzb24oY29uc3Qgc3RydWN0IHBhZ2UgKnBhZ2UpO1xcbitcXG4gLypcXG4tICogQ2hlY2sgaWYgYSBwYWdlIGlzIGN1cnJlbnRseSBtYXJrZWQgSFdQb2lzb25lZC4gTm90ZSB0aGF0IHRoaXMgY2hlY2sgaXNcXG4tICogYmVzdCBlZmZvcnQgb25seSBhbmQgaW5oZXJlbnRseSByYWN5OiB0aGVyZSBpcyBubyB3YXkgdG8gc3luY2hyb25pemUgd2l0aFxcbi0gKiBmYWlsaW5nIGhhcmR3YXJlLlxcbisgKiBDaGVjayBpZiBhIHBhZ2UgaXMgY3VycmVudGx5IG1hcmtlZCBIV1BvaXNvbmVkLiAgVGhpcyBjaGVjayBpcyBiZXN0XFxuKyAqIGVmZm9ydCBvbmx5IGFuZCBpbmhlcmVudGx5IHJhY3k6IHRoZXJlIGlzIG5vIHdheSB0byBzeW5jaHJvbml6ZSB3aXRoXFxuKyAqIGZhaWxpbmcgaGFyZHdhcmUuICBUaGUgY2FsbGVyIG1heSBub3QgaGF2ZSBhIHJlZmNvdW50IG9uIHRoZSBmb2xpb1xcbisgKiBjb250YWluaW5nIHRoZSBwYWdlLCBzbyB3ZSBtdXN0IGJlIGNhcmVmdWwgdG8gbm90IHRyaXAgYW55IGFzc2VydGlvbnMuXFxuICAqL1xcbiBzdGF0aWMgaW5saW5lIGJvb2wgaXNfcGFnZV9od3BvaXNvbihjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSlcXG4ge1xcbkBAIC0xMDgwLDEzICsxMTA2LDI2IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBpc19wYWdlX2h3cG9pc29uKGNvbnN0IHN0cnVjdCBwYWdlICpwYWdlKVxcbiBcXHRpZiAoUGFnZUhXUG9pc29uKHBhZ2UpKVxcbiBcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4gXFx0Zm9saW8gPSBwYWdlX2ZvbGlvKHBhZ2UpO1xcbi1cXHRyZXR1cm4gZm9saW9fdGVzdF9odWdldGxiKGZvbGlvKSBcXHUwMDI2XFx1MDAyNiBQYWdlSFdQb2lzb24oXFx1MDAyNmZvbGlvLVxcdTAwM2VwYWdlKTtcXG4rXFx0aWYgKGZvbGlvX3Rlc3RfaHVnZV9wb2lzb24oZm9saW8pKVxcbitcXHRcXHRyZXR1cm4gaHVnZXRsYl91bnJlZl9wYWdlX2h3cG9pc29uKHBhZ2UpO1xcbitcXHQvKiBJbiBjYXNlIHdlIHJhY2VkIHdpdGggaHVnZXRsYiB0cmFuc2ZlcnJpbmcgZmxhZ3MgKi9cXG4rXFx0cmV0dXJuIFBhZ2VIV1BvaXNvbihwYWdlKTtcXG4rfVxcbitcXG4rc3RhdGljIGlubGluZSBib29sIGlzX3JlZl9wYWdlX2h3cG9pc29uKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8sXFxuK1xcdFxcdGNvbnN0IHN0cnVjdCBwYWdlICpwYWdlKVxcbit7XFxuK1xcdGlmIChQYWdlSFdQb2lzb24ocGFnZSkpXFxuK1xcdFxcdHJldHVybiB0cnVlO1xcbitcXHRpZiAoZm9saW9fdGVzdF9odWdldGxiKGZvbGlvKSlcXG4rXFx0XFx0cmV0dXJuIGh1Z2V0bGJfcGFnZV9od3BvaXNvbihmb2xpbywgcGFnZSk7XFxuK1xcdHJldHVybiBmYWxzZTtcXG4gfVxcbiBcXG4tc3RhdGljIGlubGluZSBib29sIGZvbGlvX2NvbnRhaW5faHdwb2lzb25lZF9wYWdlKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuK3N0YXRpYyBpbmxpbmUgYm9vbCBmb2xpb19oYXNfaHdwb2lzb25lZF9wYWdlKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuIHtcXG4tXFx0cmV0dXJuIGZvbGlvX3Rlc3RfaHdwb2lzb24oZm9saW8pIHx8XFxuLVxcdCAgICAoZm9saW9fdGVzdF9sYXJnZShmb2xpbykgXFx1MDAyNlxcdTAwMjYgZm9saW9fdGVzdF9oYXNfaHdwb2lzb25lZChmb2xpbykpO1xcbitcXHRyZXR1cm4gUGFnZUhXUG9pc29uKFxcdTAwMjZmb2xpby1cXHUwMDNlcGFnZSkgfHxcXG4rXFx0ICAgICAgIChmb2xpb190ZXN0X2xhcmdlKGZvbGlvKSBcXHUwMDI2XFx1MDAyNiBmb2xpb190ZXN0X2hhc19od3BvaXNvbmVkKGZvbGlvKSk7XFxuIH1cXG4gXFxuIGJvb2wgaXNfZnJlZV9idWRkeV9wYWdlKGNvbnN0IHN0cnVjdCBwYWdlICpwYWdlKTtcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wYWdlbWFwLmggYi9pbmNsdWRlL2xpbnV4L3BhZ2VtYXAuaFxcbmluZGV4IDJjMzcxOGQ1OTJkNmRkLi42ZmRlZTViMDM2MjFiOSAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L3BhZ2VtYXAuaFxcbisrKyBiL2luY2x1ZGUvbGludXgvcGFnZW1hcC5oXFxuQEAgLTIxMCw2ICsyMTAsNyBAQCBlbnVtIG1hcHBpbmdfZmxhZ3Mge1xcbiBcXHRBU19XUklURUJBQ0tfTUFZX0RFQURMT0NLX09OX1JFQ0xBSU0gPSA5LFxcbiBcXHRBU19LRVJORUxfRklMRSA9IDEwLFxcdC8qIG1hcHBpbmcgZm9yIGEgZmFrZSBrZXJuZWwgZmlsZSB0aGF0IHNob3VsZG4ndFxcbiBcXHRcXHRcXHRcXHQgICBhY2NvdW50IHVzYWdlIHRvIHVzZXIgY2dyb3VwcyAqL1xcbitcXHRBU19BVVRIT1JJVEFUSVZFID0gMTEsXFx0LyogSWYgd2UgbWlzcyBpbiB0aGUgcGFnZSBjYWNoZSwgaXQncyBhIGhvbGUgKi9cXG4gXFx0LyogQml0cyAxNi0yNSBhcmUgdXNlZCBmb3IgRk9MSU9fT1JERVIgKi9cXG4gXFx0QVNfRk9MSU9fT1JERVJfQklUUyA9IDUsXFxuIFxcdEFTX0ZPTElPX09SREVSX01JTiA9IDE2LFxcbkBAIC0zNDUsNiArMzQ2LDE2IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBtYXBwaW5nX3dyaXRlYmFja19tYXlfZGVhZGxvY2tfb25fcmVjbGFpbShjb25zdCBzdHJ1Y3QgYWRkcmVzXFxuIFxcdHJldHVybiB0ZXN0X2JpdChBU19XUklURUJBQ0tfTUFZX0RFQURMT0NLX09OX1JFQ0xBSU0sIFxcdTAwMjZtYXBwaW5nLVxcdTAwM2VmbGFncyk7XFxuIH1cXG4gXFxuK3N0YXRpYyBpbmxpbmUgdm9pZCBtYXBwaW5nX3NldF9hdXRob3JpdGF0aXZlKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nKVxcbit7XFxuK1xcdHNldF9iaXQoQVNfQVVUSE9SSVRBVElWRSwgXFx1MDAyNm1hcHBpbmctXFx1MDAzZWZsYWdzKTtcXG4rfVxcbitcXG4rc3RhdGljIGlubGluZSBib29sIG1hcHBpbmdfaXNfYXV0aG9yaXRhdGl2ZShjb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZylcXG4re1xcbitcXHRyZXR1cm4gdGVzdF9iaXQoQVNfQVVUSE9SSVRBVElWRSwgXFx1MDAyNm1hcHBpbmctXFx1MDAzZWZsYWdzKTtcXG4rfVxcbitcXG4gc3RhdGljIGlubGluZSBnZnBfdCBtYXBwaW5nX2dmcF9tYXNrKGNvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nKVxcbiB7XFxuIFxcdHJldHVybiBtYXBwaW5nLVxcdTAwM2VnZnBfbWFzaztcXG5AQCAtMzczLDcgKzM4NCw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBtYXBwaW5nX3NldF9nZnBfbWFzayhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbSwgZ2ZwX3QgbWFzaylcXG4gICogYXNzdW1wdGlvbnMgYWJvdXQgbWF4aW11bSBvcmRlciBpZiBUSFAgYXJlIGRpc2FibGVkLCBidXQgOCBzZWVtcyBsaWtlXFxuICAqIGEgZ29vZCBvcmRlciAodGhhdCdzIDFNQiBpZiB5b3UncmUgdXNpbmcgNGtCIHBhZ2VzKVxcbiAgKi9cXG4tI2lmZGVmIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRVxcbisjaWZkZWYgQ09ORklHX0ZJTEVNQVBfTEFSR0VfRk9MSU9cXG4gI2RlZmluZSBQUkVGRVJSRURfTUFYX1BBR0VDQUNIRV9PUkRFUlxcdEhQQUdFX1BNRF9PUkRFUlxcbiAjZWxzZVxcbiAjZGVmaW5lIFBSRUZFUlJFRF9NQVhfUEFHRUNBQ0hFX09SREVSXFx0OFxcbkBAIC0zOTQsNyArNDA1LDcgQEAgc3RhdGljIGlubGluZSB2b2lkIG1hcHBpbmdfc2V0X2dmcF9tYXNrKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptLCBnZnBfdCBtYXNrKVxcbiAgKi9cXG4gc3RhdGljIGlubGluZSBzaXplX3QgbWFwcGluZ19tYXhfZm9saW9fc2l6ZV9zdXBwb3J0ZWQodm9pZClcXG4ge1xcbi1cXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UpKVxcbitcXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfRklMRU1BUF9MQVJHRV9GT0xJTykpXFxuIFxcdFxcdHJldHVybiAxVSBcXHUwMDNjXFx1MDAzYyAoUEFHRV9TSElGVCArIE1BWF9QQUdFQ0FDSEVfT1JERVIpO1xcbiBcXHRyZXR1cm4gUEFHRV9TSVpFO1xcbiB9XFxuQEAgLTQwNSwyOSArNDE2LDIzIEBAIHN0YXRpYyBpbmxpbmUgc2l6ZV90IG1hcHBpbmdfbWF4X2ZvbGlvX3NpemVfc3VwcG9ydGVkKHZvaWQpXFxuICAqIEBtaW46IE1pbmltdW0gZm9saW8gb3JkZXIgKGJldHdlZW4gMC1NQVhfUEFHRUNBQ0hFX09SREVSIGluY2x1c2l2ZSkuXFxuICAqIEBtYXg6IE1heGltdW0gZm9saW8gb3JkZXIgKGJldHdlZW4gQG1pbi1NQVhfUEFHRUNBQ0hFX09SREVSIGluY2x1c2l2ZSkuXFxuICAqXFxuLSAqIFRoZSBmaWxlc3lzdGVtIHNob3VsZCBjYWxsIHRoaXMgZnVuY3Rpb24gaW4gaXRzIGlub2RlIGNvbnN0cnVjdG9yIHRvXFxuLSAqIGluZGljYXRlIHdoaWNoIGJhc2Ugc2l6ZSAobWluKSBhbmQgbWF4aW11bSBzaXplIChtYXgpIG9mIGZvbGlvIHRoZSBWRlNcXG4tICogY2FuIHVzZSB0byBjYWNoZSB0aGUgY29udGVudHMgb2YgdGhlIGZpbGUuICBUaGlzIHNob3VsZCBvbmx5IGJlIHVzZWRcXG4tICogaWYgdGhlIGZpbGVzeXN0ZW0gbmVlZHMgc3BlY2lhbCBoYW5kbGluZyBvZiBmb2xpbyBzaXplcyAoaWUgdGhlcmUgaXNcXG4tICogc29tZXRoaW5nIHRoZSBjb3JlIGNhbm5vdCBrbm93KS5cXG4rICogVGhlIGZpbGVzeXN0ZW0gc2hvdWxkIGNhbGwgdGhpcyBmdW5jdGlvbiBpbiBpdHMgaW5vZGUgY29uc3RydWN0b3JcXG4rICogdG8gaW5kaWNhdGUgd2hpY2ggc2l6ZSBmb2xpb3MgY2FuIGJlIHVzZWQgdG8gY2FjaGUgdGhlIGNvbnRlbnRzIG9mXFxuKyAqIHRoZSBpbm9kZS4gIFRoaXMgc2hvdWxkIG9ubHkgYmUgdXNlZCBpZiB0aGUgZmlsZXN5c3RlbSBuZWVkcyBzcGVjaWFsXFxuKyAqIGhhbmRsaW5nIG9mIGZvbGlvIHNpemVzIChpZSB0aGVyZSBpcyBzb21ldGhpbmcgdGhlIGNvcmUgY2Fubm90IGtub3cpLlxcbiAgKiBEbyBub3QgdHVuZSBpdCBiYXNlZCBvbiwgZWcsIGlfc2l6ZS5cXG4gICpcXG4rICogaHVnZXRsYiBjYWxscyB0aGlzIHdpdGggb3JkZXJzIGxhcmdlciB0aGFuIE1BWF9QQUdFQ0FDSEVfT1JERVIuXFxuKyAqIE5vcm1hbCBmaWxlc3lzdGVtcyBzaG91bGQgbm90IGRvIHRoaXMuXFxuKyAqXFxuICAqIENvbnRleHQ6IFRoaXMgc2hvdWxkIG5vdCBiZSBjYWxsZWQgd2hpbGUgdGhlIGlub2RlIGlzIGFjdGl2ZSBhcyBpdFxcbiAgKiBpcyBub24tYXRvbWljLlxcbiAgKi9cXG4gc3RhdGljIGlubGluZSB2b2lkIG1hcHBpbmdfc2V0X2ZvbGlvX29yZGVyX3JhbmdlKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxcbi1cXHRcXHRcXHRcXHRcXHRcXHQgdW5zaWduZWQgaW50IG1pbixcXG4tXFx0XFx0XFx0XFx0XFx0XFx0IHVuc2lnbmVkIGludCBtYXgpXFxuK1xcdFxcdHVuc2lnbmVkIGludCBtaW4sIHVuc2lnbmVkIGludCBtYXgpXFxuIHtcXG4tXFx0aWYgKCFJU19FTkFCTEVEKENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSkpXFxuK1xcdGlmICghSVNfRU5BQkxFRChDT05GSUdfRklMRU1BUF9MQVJHRV9GT0xJTykpXFxuIFxcdFxcdHJldHVybjtcXG4tXFxuLVxcdGlmIChtaW4gXFx1MDAzZSBNQVhfUEFHRUNBQ0hFX09SREVSKVxcbi1cXHRcXHRtaW4gPSBNQVhfUEFHRUNBQ0hFX09SREVSO1xcbi1cXG4tXFx0aWYgKG1heCBcXHUwMDNlIE1BWF9QQUdFQ0FDSEVfT1JERVIpXFxuLVxcdFxcdG1heCA9IE1BWF9QQUdFQ0FDSEVfT1JERVI7XFxuLVxcbiBcXHRpZiAobWF4IFxcdTAwM2MgbWluKVxcbiBcXHRcXHRtYXggPSBtaW47XFxuIFxcbkBAIC00NjAsNyArNDY1LDcgQEAgc3RhdGljIGlubGluZSB2b2lkIG1hcHBpbmdfc2V0X2xhcmdlX2ZvbGlvcyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZylcXG4gc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnRcXG4gbWFwcGluZ19tYXhfZm9saW9fb3JkZXIoY29uc3Qgc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcpXFxuIHtcXG4tXFx0aWYgKCFJU19FTkFCTEVEKENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSkpXFxuK1xcdGlmICghSVNfRU5BQkxFRChDT05GSUdfRklMRU1BUF9MQVJHRV9GT0xJTykpXFxuIFxcdFxcdHJldHVybiAwO1xcbiBcXHRyZXR1cm4gKG1hcHBpbmctXFx1MDAzZWZsYWdzIFxcdTAwMjYgQVNfRk9MSU9fT1JERVJfTUFYX01BU0spIFxcdTAwM2VcXHUwMDNlIEFTX0ZPTElPX09SREVSX01BWDtcXG4gfVxcbkBAIC00NjgsNyArNDczLDcgQEAgbWFwcGluZ19tYXhfZm9saW9fb3JkZXIoY29uc3Qgc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcpXFxuIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50XFxuIG1hcHBpbmdfbWluX2ZvbGlvX29yZGVyKGNvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nKVxcbiB7XFxuLVxcdGlmICghSVNfRU5BQkxFRChDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UpKVxcbitcXHRpZiAoIUlTX0VOQUJMRUQoQ09ORklHX0ZJTEVNQVBfTEFSR0VfRk9MSU8pKVxcbiBcXHRcXHRyZXR1cm4gMDtcXG4gXFx0cmV0dXJuIChtYXBwaW5nLVxcdTAwM2VmbGFncyBcXHUwMDI2IEFTX0ZPTElPX09SREVSX01JTl9NQVNLKSBcXHUwMDNlXFx1MDAzZSBBU19GT0xJT19PUkRFUl9NSU47XFxuIH1cXG5AQCAtNTI0LDcgKzUyOSw3IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBtYXBwaW5nX2xhcmdlX2ZvbGlvX3N1cHBvcnQoY29uc3Qgc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpXFxuICAqXFxuICAqIFJldHVybjogVHJ1ZSBpZiBQTUQtc2l6ZWQgZm9saW9zIGFyZSBzdXBwb3J0ZWQsIG90aGVyd2lzZSBmYWxzZS5cXG4gICovXFxuLSNpZmRlZiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VcXG4rI2lmZGVmIENPTkZJR19GSUxFTUFQX0xBUkdFX0ZPTElPXFxuIHN0YXRpYyBpbmxpbmUgYm9vbCBtYXBwaW5nX3BtZF9mb2xpb19zdXBwb3J0KGNvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nKVxcbiB7XFxuIFxcdC8qIEFTX0ZPTElPX09SREVSIGlzIG9ubHkgcmVhc29uYWJsZSBmb3IgcGFnZWNhY2hlIGZvbGlvcyAqL1xcbmRpZmYgLS1naXQgYS9tbS9LY29uZmlnIGIvbW0vS2NvbmZpZ1xcbmluZGV4IDllMGNhNDgyNDkwNTRmLi5lNjY2ZGQxNGNhMGMzZCAxMDA2NDRcXG4tLS0gYS9tbS9LY29uZmlnXFxuKysrIGIvbW0vS2NvbmZpZ1xcbkBAIC04NDMsMTEgKzg0MywxNSBAQCBjb25maWcgUEVSU0lTVEVOVF9IVUdFX1pFUk9fRk9MSU9cXG4gY29uZmlnIE1NX0lEXFxuIFxcdGRlZl9ib29sIG5cXG4gXFxuK2NvbmZpZyBMQVJHRV9GT0xJT1xcbitcXHRkZWZfYm9vbCBuXFxuK1xcdHNlbGVjdCBYQVJSQVlfTVVMVElcXG4rXFxuIG1lbnVjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VcXG4gXFx0Ym9vbCBcXFwiVHJhbnNwYXJlbnQgSHVnZXBhZ2UgU3VwcG9ydFxcXCJcXG4gXFx0ZGVwZW5kcyBvbiBIQVZFX0FSQ0hfVFJBTlNQQVJFTlRfSFVHRVBBR0UgXFx1MDAyNlxcdTAwMjYgIVBSRUVNUFRfUlRcXG4gXFx0c2VsZWN0IENPTVBBQ1RJT05cXG4tXFx0c2VsZWN0IFhBUlJBWV9NVUxUSVxcbitcXHRzZWxlY3QgTEFSR0VfRk9MSU9cXG4gXFx0c2VsZWN0IE1NX0lEXFxuIFxcdGhlbHBcXG4gXFx0ICBUcmFuc3BhcmVudCBIdWdlcGFnZXMgYWxsb3dzIHRoZSBrZXJuZWwgdG8gdXNlIGh1Z2UgcGFnZXMgYW5kXFxuZGlmZiAtLWdpdCBhL21tL2ZpbGVtYXAuYyBiL21tL2ZpbGVtYXAuY1xcbmluZGV4IDU4ZWI5ZDI0MDY0MzQ4Li41YThjYzIwZTYyNGU0ZCAxMDA2NDRcXG4tLS0gYS9tbS9maWxlbWFwLmNcXG4rKysgYi9tbS9maWxlbWFwLmNcXG5AQCAtMjQ4Myw2ICsyNDgzLDggQEAgc3RhdGljIHZvaWQgZmlsZW1hcF9nZXRfcmVhZF9iYXRjaChzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcXG4gXFxuIFxcdFxcdGlmICghZm9saW9fYmF0Y2hfYWRkKGZiYXRjaCwgZm9saW8pKVxcbiBcXHRcXHRcXHRicmVhaztcXG4rXFx0XFx0aWYgKGZvbGlvX2hhc19od3BvaXNvbmVkX3BhZ2UoZm9saW8pKVxcbitcXHRcXHRcXHRicmVhaztcXG4gXFx0XFx0aWYgKCFmb2xpb190ZXN0X3VwdG9kYXRlKGZvbGlvKSlcXG4gXFx0XFx0XFx0YnJlYWs7XFxuIFxcdFxcdGlmIChmb2xpb190ZXN0X3JlYWRhaGVhZChmb2xpbykpXFxuQEAgLTI2OTUsNiArMjY5Nyw4IEBAIHN0YXRpYyBpbnQgZmlsZW1hcF9nZXRfcGFnZXMoc3RydWN0IGtpb2NiICppb2NiLCBzaXplX3QgY291bnQsXFxuIFxcdGlmICghZm9saW9fYmF0Y2hfY291bnQoZmJhdGNoKSkge1xcbiBcXHRcXHRERUZJTkVfUkVBREFIRUFEKHJhY3RsLCBmaWxwLCBcXHUwMDI2ZmlscC1cXHUwMDNlZl9yYSwgbWFwcGluZywgaW5kZXgpO1xcbiBcXG4rXFx0XFx0aWYgKG1hcHBpbmdfaXNfYXV0aG9yaXRhdGl2ZShtYXBwaW5nKSlcXG4rXFx0XFx0XFx0cmV0dXJuIDA7XFxuIFxcdFxcdGlmIChpb2NiLVxcdTAwM2VraV9mbGFncyBcXHUwMDI2IElPQ0JfTk9JTylcXG4gXFx0XFx0XFx0cmV0dXJuIC1FQUdBSU47XFxuIFxcdFxcdGlmIChpb2NiLVxcdTAwM2VraV9mbGFncyBcXHUwMDI2IElPQ0JfTk9XQUlUKVxcbkBAIC0yNzQ5LDYgKzI3NTMsMjkgQEAgc3RhdGljIGlubGluZSBib29sIHBvc19zYW1lX2ZvbGlvKGxvZmZfdCBwb3MxLCBsb2ZmX3QgcG9zMiwgc3RydWN0IGZvbGlvICpmb2xpbylcXG4gXFx0cmV0dXJuIChwb3MxIFxcdTAwM2VcXHUwMDNlIHNoaWZ0ID09IHBvczIgXFx1MDAzZVxcdTAwM2Ugc2hpZnQpO1xcbiB9XFxuIFxcbitzdGF0aWMgc2l6ZV90IGFkanVzdF9yYW5nZV9od3BvaXNvbihjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzaXplX3Qgb2Zmc2V0LFxcbitcXHRcXHRzaXplX3QgYnl0ZXMpXFxuK3tcXG4rXFx0Y29uc3Qgc3RydWN0IHBhZ2UgKnBhZ2UgPSBmb2xpb19wYWdlKGZvbGlvLCBvZmZzZXQgLyBQQUdFX1NJWkUpO1xcbitcXHRzaXplX3Qgc2FmZV9ieXRlcztcXG4rXFxuK1xcdGlmICghZm9saW9faGFzX2h3cG9pc29uZWRfcGFnZShmb2xpbykpXFxuK1xcdFxcdHJldHVybiBieXRlcztcXG4rXFx0aWYgKGlzX3JlZl9wYWdlX2h3cG9pc29uKGZvbGlvLCBwYWdlKSlcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcbitcXHQvKiBTYWZlIHRvIHJlYWQgdGhlIHJlbWFpbmluZyBieXRlcyBpbiB0aGlzIHBhZ2UuICovXFxuK1xcdHNhZmVfYnl0ZXMgPSBQQUdFX1NJWkUgLSAob2Zmc2V0ICUgUEFHRV9TSVpFKTtcXG4rXFx0cGFnZSsrO1xcbitcXG4rXFx0LyogQ2hlY2sgZWFjaCByZW1haW5pbmcgcGFnZSBhcyBsb25nIGFzIHdlIGFyZSBub3QgZG9uZSB5ZXQuICovXFxuK1xcdGZvciAoOyBzYWZlX2J5dGVzIFxcdTAwM2MgYnl0ZXM7IHNhZmVfYnl0ZXMgKz0gUEFHRV9TSVpFLCBwYWdlKyspXFxuK1xcdFxcdGlmIChpc19yZWZfcGFnZV9od3BvaXNvbihmb2xpbywgcGFnZSkpXFxuK1xcdFxcdFxcdGJyZWFrO1xcbitcXG4rXFx0cmV0dXJuIG1pbihzYWZlX2J5dGVzLCBieXRlcyk7XFxuK31cXG4rXFxuIHN0YXRpYyB2b2lkIGZpbGVtYXBfZW5kX2Ryb3BiZWhpbmRfcmVhZChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbiB7XFxuIFxcdGlmICghZm9saW9fdGVzdF9kcm9wYmVoaW5kKGZvbGlvKSlcXG5AQCAtMjgyOCw2ICsyODU1LDIyIEBAIHNzaXplX3QgZmlsZW1hcF9yZWFkKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICppdGVyLFxcbiBcXHRcXHRcXHRnb3RvIHB1dF9mb2xpb3M7XFxuIFxcdFxcdGVuZF9vZmZzZXQgPSBtaW5fdChsb2ZmX3QsIGlzaXplLCBpb2NiLVxcdTAwM2VraV9wb3MgKyBpdGVyLVxcdTAwM2Vjb3VudCk7XFxuIFxcbitcXHRcXHRpZiAoIWZvbGlvX2JhdGNoX2NvdW50KFxcdTAwMjZmYmF0Y2gpKSB7XFxuK1xcdFxcdFxcdHNpemVfdCBmc2l6ZSA9IG1hcHBpbmdfbWluX2ZvbGlvX25yYnl0ZXMobWFwcGluZyk7XFxuK1xcdFxcdFxcdHNpemVfdCBvZmZzZXQgPSBpb2NiLVxcdTAwM2VraV9wb3MgXFx1MDAyNiAoZnNpemUgLSAxKTtcXG4rXFx0XFx0XFx0c2l6ZV90IGJ5dGVzID0gbWluX3QobG9mZl90LCBlbmRfb2Zmc2V0IC0gaW9jYi1cXHUwMDNla2lfcG9zLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgIGZzaXplIC0gb2Zmc2V0KTtcXG4rXFx0XFx0XFx0c2l6ZV90IGNvcGllZCA9IGlvdl9pdGVyX3plcm8oYnl0ZXMsIGl0ZXIpO1xcbitcXG4rXFx0XFx0XFx0YWxyZWFkeV9yZWFkICs9IGNvcGllZDtcXG4rXFx0XFx0XFx0aW9jYi1cXHUwMDNla2lfcG9zICs9IGNvcGllZDtcXG4rXFx0XFx0XFx0bGFzdF9wb3MgPSBpb2NiLVxcdTAwM2VraV9wb3M7XFxuK1xcbitcXHRcXHRcXHRpZiAoY29waWVkIFxcdTAwM2MgYnl0ZXMpXFxuK1xcdFxcdFxcdFxcdGVycm9yID0gLUVGQVVMVDtcXG4rXFx0XFx0XFx0Y29udGludWU7XFxuK1xcdFxcdH1cXG4rXFxuIFxcdFxcdC8qXFxuIFxcdFxcdCAqIE9uY2Ugd2Ugc3RhcnQgY29weWluZyBkYXRhLCB3ZSBkb24ndCB3YW50IHRvIGJlIHRvdWNoaW5nIGFueVxcbiBcXHRcXHQgKiBjYWNoZWxpbmVzIHRoYXQgbWlnaHQgYmUgY29udGVuZGVkOlxcbkBAIC0yODYyLDE0ICsyOTA1LDE4IEBAIHNzaXplX3QgZmlsZW1hcF9yZWFkKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICppdGVyLFxcbiBcXHRcXHRcXHRpZiAod3JpdGFibHlfbWFwcGVkKVxcbiBcXHRcXHRcXHRcXHRmbHVzaF9kY2FjaGVfZm9saW8oZm9saW8pO1xcbiBcXG4tXFx0XFx0XFx0Y29waWVkID0gY29weV9mb2xpb190b19pdGVyKGZvbGlvLCBvZmZzZXQsIGJ5dGVzLCBpdGVyKTtcXG4rXFx0XFx0XFx0Y29waWVkID0gYWRqdXN0X3JhbmdlX2h3cG9pc29uKGZvbGlvLCBvZmZzZXQsIGJ5dGVzKTtcXG4rXFx0XFx0XFx0aWYgKGNvcGllZCBcXHUwMDNjIGJ5dGVzKVxcbitcXHRcXHRcXHRcXHRlcnJvciA9IC1FSU87XFxuK1xcdFxcdFxcdGNvcGllZCA9IGNvcHlfZm9saW9fdG9faXRlcihmb2xpbywgb2Zmc2V0LCBjb3BpZWQsIGl0ZXIpO1xcbiBcXG4gXFx0XFx0XFx0YWxyZWFkeV9yZWFkICs9IGNvcGllZDtcXG4gXFx0XFx0XFx0aW9jYi1cXHUwMDNla2lfcG9zICs9IGNvcGllZDtcXG4gXFx0XFx0XFx0bGFzdF9wb3MgPSBpb2NiLVxcdTAwM2VraV9wb3M7XFxuIFxcbiBcXHRcXHRcXHRpZiAoY29waWVkIFxcdTAwM2MgYnl0ZXMpIHtcXG4tXFx0XFx0XFx0XFx0ZXJyb3IgPSAtRUZBVUxUO1xcbitcXHRcXHRcXHRcXHRpZiAoIWVycm9yKVxcbitcXHRcXHRcXHRcXHRcXHRlcnJvciA9IC1FRkFVTFQ7XFxuIFxcdFxcdFxcdFxcdGJyZWFrO1xcbiBcXHRcXHRcXHR9XFxuIFxcdFxcdH1cXG5kaWZmIC0tZ2l0IGEvbW0vaHVnZV9tZW1vcnkuYyBiL21tL2h1Z2VfbWVtb3J5LmNcXG5pbmRleCAyYmNjYjBhNTNhMGE2MC4uMzUzMzQwMzA5MTA3NGMgMTAwNjQ0XFxuLS0tIGEvbW0vaHVnZV9tZW1vcnkuY1xcbisrKyBiL21tL2h1Z2VfbWVtb3J5LmNcXG5AQCAtNDQxMyw3ICs0NDEzLDcgQEAgc3RhdGljIGJvb2wgdGhwX3VuZGVydXNlZChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbiBcXHRpZiAoa2h1Z2VwYWdlZF9tYXhfcHRlc19ub25lID09IEhQQUdFX1BNRF9OUiAtIDEpXFxuIFxcdFxcdHJldHVybiBmYWxzZTtcXG4gXFxuLVxcdGlmIChmb2xpb19jb250YWluX2h3cG9pc29uZWRfcGFnZShmb2xpbykpXFxuK1xcdGlmIChmb2xpb19oYXNfaHdwb2lzb25lZF9wYWdlKGZvbGlvKSlcXG4gXFx0XFx0cmV0dXJuIGZhbHNlO1xcbiBcXG4gXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIGZvbGlvX25yX3BhZ2VzKGZvbGlvKTsgaSsrKSB7XFxuZGlmZiAtLWdpdCBhL21tL2h1Z2V0bGIuYyBiL21tL2h1Z2V0bGIuY1xcbmluZGV4IDU3MTIxMmI4MDgzNWVjLi5hYWFjNmUyYWY0YzI0YSAxMDA2NDRcXG4tLS0gYS9tbS9odWdldGxiLmNcXG4rKysgYi9tbS9odWdldGxiLmNcXG5AQCAtMTI1NSw3ICsxMjU1LDcgQEAgc3RhdGljIHN0cnVjdCBmb2xpbyAqZGVxdWV1ZV9odWdldGxiX2ZvbGlvX25vZGVfZXhhY3Qoc3RydWN0IGhzdGF0ZSAqaCxcXG4gXFx0XFx0aWYgKHBpbiBcXHUwMDI2XFx1MDAyNiAhZm9saW9faXNfbG9uZ3Rlcm1fcGlubmFibGUoZm9saW8pKVxcbiBcXHRcXHRcXHRjb250aW51ZTtcXG4gXFxuLVxcdFxcdGlmIChmb2xpb190ZXN0X2h3cG9pc29uKGZvbGlvKSlcXG4rXFx0XFx0aWYgKGZvbGlvX3Rlc3RfaGFzX2h3cG9pc29uZWQoZm9saW8pKVxcbiBcXHRcXHRcXHRjb250aW51ZTtcXG4gXFxuIFxcdFxcdGlmIChpc19taWdyYXRlX2lzb2xhdGVfcGFnZShcXHUwMDI2Zm9saW8tXFx1MDAzZXBhZ2UpKVxcbkBAIC0xNDk4LDEwICsxNDk4LDEwIEBAIHN0YXRpYyB2b2lkIF9fdXBkYXRlX2FuZF9mcmVlX2h1Z2V0bGJfZm9saW8oc3RydWN0IGhzdGF0ZSAqaCxcXG4gXFx0fVxcbiBcXG4gXFx0LypcXG4tXFx0ICogTW92ZSBQYWdlSFdQb2lzb24gZmxhZyBmcm9tIGhlYWQgcGFnZSB0byB0aGUgcmF3IGVycm9yIHBhZ2VzLFxcbi1cXHQgKiB3aGljaCBtYWtlcyBhbnkgaGVhbHRoeSBzdWJwYWdlcyByZXVzYWJsZS5cXG4rXFx0ICogTW92ZSBIV1BvaXNvbiBmbGFnIHRvIGVhY2ggZXJyb3IgcGFnZVxcbitcXHQgKiB3aGljaCBtYWtlcyBhbnkgaGVhbHRoeSBwYWdlcyByZXVzYWJsZS5cXG4gXFx0ICovXFxuLVxcdGlmICh1bmxpa2VseShmb2xpb190ZXN0X2h3cG9pc29uKGZvbGlvKSkpXFxuK1xcdGlmICh1bmxpa2VseShmb2xpb190ZXN0X2hhc19od3BvaXNvbmVkKGZvbGlvKSkpXFxuIFxcdFxcdGZvbGlvX2NsZWFyX2h1Z2V0bGJfaHdwb2lzb24oZm9saW8pO1xcbiBcXG4gXFx0Vk1fQlVHX09OX0ZPTElPKGZvbGlvX3JlZl9jb3VudChmb2xpbyksIGZvbGlvKTtcXG5AQCAtMTc3NSw3ICsxNzc1LDcgQEAgdm9pZCBpbml0X25ld19odWdldGxiX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuICAqIHN0YWJsZS4gIER1ZSB0byBsb2NraW5nIG9yZGVyLCB3ZSBjYW4gb25seSB0cnlsb2NrX3dyaXRlLiAgSWYgd2UgY2FuXFxuICAqIG5vdCBnZXQgdGhlIGxvY2ssIHNpbXBseSByZXR1cm4gTlVMTCB0byBjYWxsZXIuXFxuICAqL1xcbi1zdHJ1Y3QgYWRkcmVzc19zcGFjZSAqaHVnZXRsYl9mb2xpb19tYXBwaW5nX2xvY2tfd3JpdGUoc3RydWN0IGZvbGlvICpmb2xpbylcXG4rc3RydWN0IGFkZHJlc3Nfc3BhY2UgKmh1Z2V0bGJfZm9saW9fbWFwcGluZ19sb2NrX3dyaXRlKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuIHtcXG4gXFx0c3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcgPSBmb2xpb19tYXBwaW5nKGZvbGlvKTtcXG4gXFxuQEAgLTM5OTgsNyArMzk5OCw3IEBAIGxvbmcgZGVtb3RlX3Bvb2xfaHVnZV9wYWdlKHN0cnVjdCBoc3RhdGUgKnNyYywgbm9kZW1hc2tfdCAqbm9kZXNfYWxsb3dlZCxcXG4gXFx0XFx0c3RydWN0IGZvbGlvICpmb2xpbywgKm5leHQ7XFxuIFxcbiBcXHRcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoZm9saW8sIG5leHQsIFxcdTAwMjZzcmMtXFx1MDAzZWh1Z2VwYWdlX2ZyZWVsaXN0c1tub2RlXSwgbHJ1KSB7XFxuLVxcdFxcdFxcdGlmIChmb2xpb190ZXN0X2h3cG9pc29uKGZvbGlvKSlcXG4rXFx0XFx0XFx0aWYgKGZvbGlvX3Rlc3RfaGFzX2h3cG9pc29uZWQoZm9saW8pKVxcbiBcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4gXFxuIFxcdFxcdFxcdHJlbW92ZV9odWdldGxiX2ZvbGlvKHNyYywgZm9saW8sIGZhbHNlKTtcXG5AQCAtNTgwOSw3ICs1ODA5LDcgQEAgc3RhdGljIHZtX2ZhdWx0X3QgaHVnZXRsYl9ub19wYWdlKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxcbiBcXHRcXHQgKiBkb24ndCBoYXZlIGh3cG9pc29uZWQgc3dhcCBlbnRyeSBmb3IgZXJyb3JlZCB2aXJ0dWFsIGFkZHJlc3MuXFxuIFxcdFxcdCAqIFNvIHdlIG5lZWQgdG8gYmxvY2sgaHVnZXBhZ2UgZmF1bHQgYnkgUEdfaHdwb2lzb24gYml0IGNoZWNrLlxcbiBcXHRcXHQgKi9cXG4tXFx0XFx0aWYgKHVubGlrZWx5KGZvbGlvX3Rlc3RfaHdwb2lzb24oZm9saW8pKSkge1xcbitcXHRcXHRpZiAodW5saWtlbHkoZm9saW9fdGVzdF9oYXNfaHdwb2lzb25lZChmb2xpbykpKSB7XFxuIFxcdFxcdFxcdHJldCA9IFZNX0ZBVUxUX0hXUE9JU09OX0xBUkdFIHxcXG4gXFx0XFx0XFx0XFx0Vk1fRkFVTFRfU0VUX0hJTkRFWChoc3RhdGVfaW5kZXgoaCkpO1xcbiBcXHRcXHRcXHRnb3RvIGJhY2tvdXRfdW5sb2NrZWQ7XFxuQEAgLTYzMTgsNyArNjMxOCw3IEBAIGludCBodWdldGxiX21maWxsX2F0b21pY19wdGUocHRlX3QgKmRzdF9wdGUsXFxuIFxcdHB0bCA9IGh1Z2VfcHRlX2xvY2soaCwgZHN0X21tLCBkc3RfcHRlKTtcXG4gXFxuIFxcdHJldCA9IC1FSU87XFxuLVxcdGlmIChmb2xpb190ZXN0X2h3cG9pc29uKGZvbGlvKSlcXG4rXFx0aWYgKGZvbGlvX3Rlc3RfaGFzX2h3cG9pc29uZWQoZm9saW8pKVxcbiBcXHRcXHRnb3RvIG91dF9yZWxlYXNlX3VubG9jaztcXG4gXFxuIFxcdHJldCA9IC1FRVhJU1Q7XFxuZGlmZiAtLWdpdCBhL21tL21lbW9yeS1mYWlsdXJlLmMgYi9tbS9tZW1vcnktZmFpbHVyZS5jXFxuaW5kZXggNTE1MDhhNTVjNDA1NWUuLjczZWJiYzkzNTY2MTgyIDEwMDY0NFxcbi0tLSBhL21tL21lbW9yeS1mYWlsdXJlLmNcXG4rKysgYi9tbS9tZW1vcnktZmFpbHVyZS5jXFxuQEAgLTE4MTAsNTAgKzE4MTAsNjUgQEAgRVhQT1JUX1NZTUJPTF9HUEwobWZfZGF4X2tpbGxfcHJvY3MpO1xcbiBcXG4gLypcXG4gICogU3RydWN0IHJhd19od3BfcGFnZSByZXByZXNlbnRzIGluZm9ybWF0aW9uIGFib3V0IFxcXCJyYXcgZXJyb3IgcGFnZVxcXCIsXFxuLSAqIGNvbnN0cnVjdGluZyBzaW5nbHkgbGlua2VkIGxpc3QgZnJvbSAtXFx1MDAzZV9odWdldGxiX2h3cG9pc29uIGZpZWxkIG9mIGZvbGlvLlxcbisgKiBjb25zdHJ1Y3Rpbmcgc2luZ2x5IGxpbmtlZCBsaXN0IGZyb20gZm9saW8tXFx1MDAzZWh1Z2V0bGJfaHdwb2lzb24gZmllbGQuXFxuICAqL1xcbiBzdHJ1Y3QgcmF3X2h3cF9wYWdlIHtcXG4gXFx0c3RydWN0IGxsaXN0X25vZGUgbm9kZTtcXG4gXFx0c3RydWN0IHBhZ2UgKnBhZ2U7XFxuIH07XFxuIFxcbi1zdGF0aWMgaW5saW5lIHN0cnVjdCBsbGlzdF9oZWFkICpyYXdfaHdwX2xpc3RfaGVhZChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbitzdGF0aWMgYm9vbCBwcmVjaXNlX3BhZ2VfcG9pc29uZWQoY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbyxcXG4rXFx0XFx0Y29uc3Qgc3RydWN0IHBhZ2UgKnBhZ2UpXFxuIHtcXG4tXFx0cmV0dXJuIChzdHJ1Y3QgbGxpc3RfaGVhZCAqKVxcdTAwMjZmb2xpby1cXHUwMDNlX2h1Z2V0bGJfaHdwb2lzb247XFxuLX1cXG4tXFxuLWJvb2wgaXNfcmF3X2h3cG9pc29uX3BhZ2VfaW5faHVnZXBhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UpXFxuLXtcXG4tXFx0c3RydWN0IGxsaXN0X2hlYWQgKnJhd19od3BfaGVhZDtcXG4tXFx0c3RydWN0IHJhd19od3BfcGFnZSAqcDtcXG4tXFx0c3RydWN0IGZvbGlvICpmb2xpbyA9IHBhZ2VfZm9saW8ocGFnZSk7XFxuLVxcdGJvb2wgcmV0ID0gZmFsc2U7XFxuLVxcbi1cXHRpZiAoIWZvbGlvX3Rlc3RfaHdwb2lzb24oZm9saW8pKVxcbi1cXHRcXHRyZXR1cm4gZmFsc2U7XFxuLVxcbi1cXHRpZiAoIWZvbGlvX3Rlc3RfaHVnZXRsYihmb2xpbykpXFxuLVxcdFxcdHJldHVybiBQYWdlSFdQb2lzb24ocGFnZSk7XFxuK1xcdGNvbnN0IHN0cnVjdCBsbGlzdF9oZWFkICpsaXN0ID0gXFx1MDAyNmZvbGlvLVxcdTAwM2VodWdldGxiX2h3cG9pc29uO1xcbitcXHRjb25zdCBzdHJ1Y3QgcmF3X2h3cF9wYWdlICpwO1xcbiBcXG4gXFx0LypcXG4tXFx0ICogV2hlbiBSYXdId3BVbnJlbGlhYmxlIGlzIHNldCwga2VybmVsIGxvc3QgdHJhY2sgb2Ygd2hpY2ggc3VicGFnZXNcXG4tXFx0ICogYXJlIEhXUE9JU09OLiBTbyByZXR1cm4gYXMgaWYgQUxMIHN1YnBhZ2VzIGFyZSBIV1BPSVNPTmVkLlxcbitcXHQgKiBXaGVuIFJhd0h3cFVucmVsaWFibGUgaXMgc2V0LCBrZXJuZWwgbG9zdCB0cmFjayBvZiB3aGljaCBwYWdlc1xcbitcXHQgKiBhcmUgSFdQT0lTT04uIFNvIHJldHVybiBhcyBpZiBBTEwgcGFnZXMgYXJlIEhXUE9JU09OZWQuXFxuIFxcdCAqL1xcbiBcXHRpZiAoZm9saW9fdGVzdF9odWdldGxiX3Jhd19od3BfdW5yZWxpYWJsZShmb2xpbykpXFxuIFxcdFxcdHJldHVybiB0cnVlO1xcbiBcXG4tXFx0bXV0ZXhfbG9jayhcXHUwMDI2bWZfbXV0ZXgpO1xcbi1cXG4tXFx0cmF3X2h3cF9oZWFkID0gcmF3X2h3cF9saXN0X2hlYWQoZm9saW8pO1xcbi1cXHRsbGlzdF9mb3JfZWFjaF9lbnRyeShwLCByYXdfaHdwX2hlYWQtXFx1MDAzZWZpcnN0LCBub2RlKSB7XFxuLVxcdFxcdGlmIChwYWdlID09IHAtXFx1MDAzZXBhZ2UpIHtcXG4tXFx0XFx0XFx0cmV0ID0gdHJ1ZTtcXG4tXFx0XFx0XFx0YnJlYWs7XFxuLVxcdFxcdH1cXG4rXFx0bGxpc3RfZm9yX2VhY2hfZW50cnkocCwgUkVBRF9PTkNFKGxpc3QtXFx1MDAzZWZpcnN0KSwgbm9kZSkge1xcbitcXHRcXHRpZiAocGFnZSA9PSBwLVxcdTAwM2VwYWdlKVxcbitcXHRcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4gXFx0fVxcbiBcXG4tXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZtZl9tdXRleCk7XFxuK1xcdHJldHVybiBmYWxzZTtcXG4rfVxcbiBcXG4rLypcXG4rICogQ2hlY2sgaWYgYSBnaXZlbiBAcGFnZSBpbiBhIGh1Z2V0bGIgZm9saW8gaXMgSFdQT0lTT04uXFxuKyAqL1xcbitib29sIGh1Z2V0bGJfcGFnZV9od3BvaXNvbihjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvLCBjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSlcXG4re1xcbitcXHRpZiAoIWZvbGlvX3Rlc3RfaGFzX2h3cG9pc29uZWQoZm9saW8pKVxcbitcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcbitcXHRyZXR1cm4gcHJlY2lzZV9wYWdlX3BvaXNvbmVkKGZvbGlvLCBwYWdlKTtcXG4rfVxcbitcXG4rLypcXG4rICogV2UgaGF2ZSBubyByZWZlcmVuY2Ugb24gdGhlIGZvbGlvIGNvbnRhaW5pbmcgdGhpcyBwYWdlLlxcbisgKiBUaGUgaHVnZXRsYl9sb2NrIGtlZXBzIGh1Z2V0bGIgZm9saW9zIGZyb20gYmVpbmcgZnJlZWQuXFxuKyAqL1xcbitib29sIGh1Z2V0bGJfdW5yZWZfcGFnZV9od3BvaXNvbihjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSlcXG4re1xcbitcXHRjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvO1xcbitcXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xcbitcXHRib29sIHJldDtcXG4rXFxuK1xcdHNwaW5fbG9ja19pcnFzYXZlKFxcdTAwMjZodWdldGxiX2xvY2ssIGZsYWdzKTtcXG4rXFx0Zm9saW8gPSBwYWdlX2ZvbGlvKHBhZ2UpO1xcbitcXHRpZiAoIWZvbGlvX3Rlc3RfaHVnZV9wb2lzb24oZm9saW8pKSB7XFxuK1xcdFxcdHJldCA9IFBhZ2VIV1BvaXNvbihwYWdlKTtcXG4rXFx0XFx0Z290byB1bmxvY2s7XFxuK1xcdH1cXG4rXFxuK1xcdHJldCA9IHByZWNpc2VfcGFnZV9wb2lzb25lZChmb2xpbywgcGFnZSk7XFxuK3VubG9jazpcXG4rXFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcXHUwMDI2aHVnZXRsYl9sb2NrLCBmbGFncyk7XFxuIFxcdHJldHVybiByZXQ7XFxuIH1cXG4gXFxuQEAgLTE4NjMsNyArMTg3OCw3IEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIF9fZm9saW9fZnJlZV9yYXdfaHdwKHN0cnVjdCBmb2xpbyAqZm9saW8sIGJvb2wgbW92ZV9mbGFnKVxcbiBcXHRzdHJ1Y3QgcmF3X2h3cF9wYWdlICpwLCAqbmV4dDtcXG4gXFx0dW5zaWduZWQgbG9uZyBjb3VudCA9IDA7XFxuIFxcbi1cXHRoZWFkID0gbGxpc3RfZGVsX2FsbChyYXdfaHdwX2xpc3RfaGVhZChmb2xpbykpO1xcbitcXHRoZWFkID0gbGxpc3RfZGVsX2FsbChcXHUwMDI2Zm9saW8tXFx1MDAzZWh1Z2V0bGJfaHdwb2lzb24pO1xcbiBcXHRsbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHAsIG5leHQsIGhlYWQsIG5vZGUpIHtcXG4gXFx0XFx0aWYgKG1vdmVfZmxhZylcXG4gXFx0XFx0XFx0U2V0UGFnZUhXUG9pc29uKHAtXFx1MDAzZXBhZ2UpO1xcbkBAIC0xODgxLDI2ICsxODk2LDQxIEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIF9fZm9saW9fZnJlZV9yYXdfaHdwKHN0cnVjdCBmb2xpbyAqZm9saW8sIGJvb2wgbW92ZV9mbGFnKVxcbiAjZGVmaW5lXFx0TUZfSFVHRVRMQl9GT0xJT19QUkVfUE9JU09ORURcXHQzXFx0LyogZm9saW8gYWxyZWFkeSBwb2lzb25lZCAqL1xcbiAjZGVmaW5lXFx0TUZfSFVHRVRMQl9QQUdFX1BSRV9QT0lTT05FRFxcdDRcXHQvKiBleGFjdCBwYWdlIGFscmVhZHkgcG9pc29uZWQgKi9cXG4gI2RlZmluZVxcdE1GX0hVR0VUTEJfUkVUUllcXHRcXHQ1XFx0LyogaHVnZXBhZ2UgaXMgYnVzeSwgcmV0cnkgKi9cXG4rXFxuK3N0YXRpYyBpbmxpbmUgaW50IGh1Z2V0bGJfc2V0X3BvaXNvbihzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbit7XFxuK1xcdGlmIChmb2xpb190ZXN0X3NldF9oYXNfaHdwb2lzb25lZChmb2xpbykpXFxuK1xcdFxcdHJldHVybiBNRl9IVUdFVExCX0ZPTElPX1BSRV9QT0lTT05FRDtcXG4rXFx0Zm9saW9fc2V0X2h1Z2VfcG9pc29uKGZvbGlvKTtcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3N0YXRpYyBpbmxpbmUgaW50IGh1Z2V0bGJfY2xlYXJfcG9pc29uKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuK3tcXG4rXFx0aWYgKCFmb2xpb190ZXN0X2NsZWFyX2hhc19od3BvaXNvbmVkKGZvbGlvKSlcXG4rXFx0XFx0cmV0dXJuIC1FQlVTWTtcXG4rXFx0Zm9saW9fY2xlYXJfaHVnZV9wb2lzb24oZm9saW8pO1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4gLypcXG4gICogU2V0IGh1Z2V0bGIgZm9saW8gYXMgaHdwb2lzb25lZCwgdXBkYXRlIGZvbGlvIHByaXZhdGUgcmF3IGh3cG9pc29uIGxpc3RcXG4gICogdG8ga2VlcCB0cmFjayBvZiB0aGUgcG9pc29uZWQgcGFnZXMuXFxuICAqL1xcbiBzdGF0aWMgaW50IGh1Z2V0bGJfdXBkYXRlX2h3cG9pc29uKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBwYWdlICpwYWdlKVxcbiB7XFxuLVxcdHN0cnVjdCBsbGlzdF9oZWFkICpoZWFkO1xcbiBcXHRzdHJ1Y3QgcmF3X2h3cF9wYWdlICpyYXdfaHdwO1xcbiBcXHRzdHJ1Y3QgcmF3X2h3cF9wYWdlICpwO1xcbi1cXHRpbnQgcmV0ID0gZm9saW9fdGVzdF9zZXRfaHdwb2lzb24oZm9saW8pID8gTUZfSFVHRVRMQl9GT0xJT19QUkVfUE9JU09ORUQgOiAwO1xcbitcXHRpbnQgcmV0ID0gaHVnZXRsYl9zZXRfcG9pc29uKGZvbGlvKTtcXG4gXFxuIFxcdC8qXFxuIFxcdCAqIE9uY2UgdGhlIGh3cG9pc29uIGh1Z2VwYWdlIGhhcyBsb3N0IHJlbGlhYmxlIHJhdyBlcnJvciBpbmZvLFxcbi1cXHQgKiB0aGVyZSBpcyBsaXR0bGUgbWVhbmluZyB0byBrZWVwIGFkZGl0aW9uYWwgZXJyb3IgaW5mbyBwcmVjaXNlbHksXFxuLVxcdCAqIHNvIHNraXAgdG8gYWRkIGFkZGl0aW9uYWwgcmF3IGVycm9yIGluZm8uXFxuK1xcdCAqIHRoZXJlIGlzIG5vIHBvaW50IGluIGtlZXBpbmcgYWRkaXRpb25hbCBlcnJvciBpbmZvIHByZWNpc2VseSxcXG4rXFx0ICogc28gc2tpcCBhZGRpbmcgYWRkaXRpb25hbCByYXcgZXJyb3IgaW5mby5cXG4gXFx0ICovXFxuIFxcdGlmIChmb2xpb190ZXN0X2h1Z2V0bGJfcmF3X2h3cF91bnJlbGlhYmxlKGZvbGlvKSlcXG4gXFx0XFx0cmV0dXJuIE1GX0hVR0VUTEJfRk9MSU9fUFJFX1BPSVNPTkVEO1xcbi1cXHRoZWFkID0gcmF3X2h3cF9saXN0X2hlYWQoZm9saW8pO1xcbi1cXHRsbGlzdF9mb3JfZWFjaF9lbnRyeShwLCBoZWFkLVxcdTAwM2VmaXJzdCwgbm9kZSkge1xcbitcXHRsbGlzdF9mb3JfZWFjaF9lbnRyeShwLCBmb2xpby1cXHUwMDNlaHVnZXRsYl9od3BvaXNvbi5maXJzdCwgbm9kZSkge1xcbiBcXHRcXHRpZiAocC1cXHUwMDNlcGFnZSA9PSBwYWdlKVxcbiBcXHRcXHRcXHRyZXR1cm4gTUZfSFVHRVRMQl9QQUdFX1BSRV9QT0lTT05FRDtcXG4gXFx0fVxcbkBAIC0xOTA4LDcgKzE5MzgsNyBAQCBzdGF0aWMgaW50IGh1Z2V0bGJfdXBkYXRlX2h3cG9pc29uKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBwYWdlICpwYWdlKVxcbiBcXHRyYXdfaHdwID0ga21hbGxvY19vYmooc3RydWN0IHJhd19od3BfcGFnZSwgR0ZQX0FUT01JQyk7XFxuIFxcdGlmIChyYXdfaHdwKSB7XFxuIFxcdFxcdHJhd19od3AtXFx1MDAzZXBhZ2UgPSBwYWdlO1xcbi1cXHRcXHRsbGlzdF9hZGQoXFx1MDAyNnJhd19od3AtXFx1MDAzZW5vZGUsIGhlYWQpO1xcbitcXHRcXHRsbGlzdF9hZGQoXFx1MDAyNnJhd19od3AtXFx1MDAzZW5vZGUsIFxcdTAwMjZmb2xpby1cXHUwMDNlaHVnZXRsYl9od3BvaXNvbik7XFxuIFxcdH0gZWxzZSB7XFxuIFxcdFxcdC8qXFxuIFxcdFxcdCAqIEZhaWxlZCB0byBzYXZlIHJhdyBlcnJvciBpbmZvLiAgV2Ugbm8gbG9uZ2VyIHRyYWNlIGFsbFxcbkBAIC0xOTUwLDggKzE5ODAsOCBAQCB2b2lkIGZvbGlvX2NsZWFyX2h1Z2V0bGJfaHdwb2lzb24oc3RydWN0IGZvbGlvICpmb2xpbylcXG4gXFx0XFx0cmV0dXJuO1xcbiBcXHRpZiAoZm9saW9fdGVzdF9odWdldGxiX3ZtZW1tYXBfb3B0aW1pemVkKGZvbGlvKSlcXG4gXFx0XFx0cmV0dXJuO1xcbi1cXHRmb2xpb19jbGVhcl9od3BvaXNvbihmb2xpbyk7XFxuIFxcdGZvbGlvX2ZyZWVfcmF3X2h3cChmb2xpbywgdHJ1ZSk7XFxuK1xcdGZvbGlvX2NsZWFyX2hhc19od3BvaXNvbmVkKGZvbGlvKTtcXG4gfVxcbiBcXG4gc3RhdGljIGludCBnZXRfaHVnZV9wYWdlX2Zvcl9od3BvaXNvbih1bnNpZ25lZCBsb25nIHBmbiwgaW50IGZsYWdzLFxcbkBAIC0yMTA0LDYgKzIxMzQsMTEgQEAgc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGZvbGlvX2ZyZWVfcmF3X2h3cChzdHJ1Y3QgZm9saW8gKmZvbGlvLCBib29sIGZsYWcpXFxuIHtcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4rXFxuK3N0YXRpYyBpbmxpbmUgaW50IGh1Z2V0bGJfY2xlYXJfcG9pc29uKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuK3tcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4gI2VuZGlmXFx0LyogQ09ORklHX0hVR0VUTEJfUEFHRSAqL1xcbiBcXG4gLyogRHJvcCB0aGUgZXh0cmEgcmVmY291bnQgaW4gY2FzZSB3ZSBjb21lIGZyb20gbWFkdmlzZSgpICovXFxuQEAgLTI2NzcsNyArMjcxMiwxMiBAQCBpbnQgdW5wb2lzb25fbWVtb3J5KHVuc2lnbmVkIGxvbmcgcGZuKVxcbiBcXHRwID0gcGZuX3RvX29ubGluZV9wYWdlKHBmbik7XFxuIFxcdGlmICghcClcXG4gXFx0XFx0cmV0dXJuIC1FSU87XFxuLVxcdGZvbGlvID0gcGFnZV9mb2xpbyhwKTtcXG4rXFxuK1xcdGlmICghaXNfcGFnZV9od3BvaXNvbihwKSkge1xcbitcXHRcXHR1bnBvaXNvbl9wcl9pbmZvKFxcXCIlI2x4OiBwYWdlIGlzIG5vdCBwb2lzb25lZFxcXFxuXFxcIixcXG4rXFx0XFx0XFx0XFx0IHBmbiwgXFx1MDAyNnVucG9pc29uX3JzKTtcXG4rXFx0XFx0cmV0dXJuIC1FQlVTWTtcXG4rXFx0fVxcbiBcXG4gXFx0bXV0ZXhfbG9jayhcXHUwMDI2bWZfbXV0ZXgpO1xcbiBcXG5AQCAtMjY4OCw2ICsyNzI4LDggQEAgaW50IHVucG9pc29uX21lbW9yeSh1bnNpZ25lZCBsb25nIHBmbilcXG4gXFx0XFx0Z290byB1bmxvY2tfbXV0ZXg7XFxuIFxcdH1cXG4gXFxuK1xcdGZvbGlvID0gcGFnZV9mb2xpbyhwKTtcXG4rXFxuIFxcdGlmIChpc19odWdlX3plcm9fZm9saW8oZm9saW8pKSB7XFxuIFxcdFxcdHVucG9pc29uX3ByX2luZm8oXFxcIiUjbHg6IGh1Z2UgemVybyBwYWdlIGlzIG5vdCBzdXBwb3J0ZWRcXFxcblxcXCIsXFxuIFxcdFxcdFxcdFxcdCBwZm4sIFxcdTAwMjZ1bnBvaXNvbl9ycyk7XFxuQEAgLTI2OTUsMTIgKzI3MzcsNiBAQCBpbnQgdW5wb2lzb25fbWVtb3J5KHVuc2lnbmVkIGxvbmcgcGZuKVxcbiBcXHRcXHRnb3RvIHVubG9ja19tdXRleDtcXG4gXFx0fVxcbiBcXG4tXFx0aWYgKCFQYWdlSFdQb2lzb24ocCkpIHtcXG4tXFx0XFx0dW5wb2lzb25fcHJfaW5mbyhcXFwiJSNseDogcGFnZSB3YXMgYWxyZWFkeSB1bnBvaXNvbmVkXFxcXG5cXFwiLFxcbi1cXHRcXHRcXHRcXHQgcGZuLCBcXHUwMDI2dW5wb2lzb25fcnMpO1xcbi1cXHRcXHRnb3RvIHVubG9ja19tdXRleDtcXG4tXFx0fVxcbi1cXG4gXFx0aWYgKGZvbGlvX3JlZl9jb3VudChmb2xpbykgXFx1MDAzZSAxKSB7XFxuIFxcdFxcdHVucG9pc29uX3ByX2luZm8oXFxcIiUjbHg6IHNvbWVvbmUgZ3JhYnMgdGhlIGh3cG9pc29uIHBhZ2VcXFxcblxcXCIsXFxuIFxcdFxcdFxcdFxcdCBwZm4sIFxcdTAwMjZ1bnBvaXNvbl9ycyk7XFxuQEAgLTI3MzAsOCArMjc2Niw4IEBAIGludCB1bnBvaXNvbl9tZW1vcnkodW5zaWduZWQgbG9uZyBwZm4pXFxuIFxcdFxcdFxcdGNvdW50ID0gZm9saW9fZnJlZV9yYXdfaHdwKGZvbGlvLCBmYWxzZSk7XFxuIFxcdFxcdFxcdGlmIChjb3VudCA9PSAwKVxcbiBcXHRcXHRcXHRcXHRnb3RvIHVubG9ja19tdXRleDtcXG4rXFx0XFx0XFx0cmV0ID0gaHVnZXRsYl9jbGVhcl9wb2lzb24oZm9saW8pO1xcbiBcXHRcXHR9XFxuLVxcdFxcdHJldCA9IGZvbGlvX3Rlc3RfY2xlYXJfaHdwb2lzb24oZm9saW8pID8gMCA6IC1FQlVTWTtcXG4gXFx0fSBlbHNlIGlmIChnaHAgXFx1MDAzYyAwKSB7XFxuIFxcdFxcdGlmIChnaHAgPT0gLUVIV1BPSVNPTikge1xcbiBcXHRcXHRcXHRyZXQgPSBwdXRfcGFnZV9iYWNrX2J1ZGR5KHApID8gMCA6IC1FQlVTWTtcXG5AQCAtMjc0MCwxNiArMjc3NiwxOCBAQCBpbnQgdW5wb2lzb25fbWVtb3J5KHVuc2lnbmVkIGxvbmcgcGZuKVxcbiBcXHRcXHRcXHR1bnBvaXNvbl9wcl9pbmZvKFxcXCIlI2x4OiBmYWlsZWQgdG8gZ3JhYiBwYWdlXFxcXG5cXFwiLFxcbiBcXHRcXHRcXHRcXHRcXHQgcGZuLCBcXHUwMDI2dW5wb2lzb25fcnMpO1xcbiBcXHRcXHR9XFxuLVxcdH0gZWxzZSB7XFxuLVxcdFxcdGlmIChmb2xpb190ZXN0X2h1Z2V0bGIoZm9saW8pKSB7XFxuLVxcdFxcdFxcdGh1Z2UgPSB0cnVlO1xcbi1cXHRcXHRcXHRjb3VudCA9IGZvbGlvX2ZyZWVfcmF3X2h3cChmb2xpbywgZmFsc2UpO1xcbi1cXHRcXHRcXHRpZiAoY291bnQgPT0gMCkge1xcbi1cXHRcXHRcXHRcXHRmb2xpb19wdXQoZm9saW8pO1xcbi1cXHRcXHRcXHRcXHRnb3RvIHVubG9ja19tdXRleDtcXG4tXFx0XFx0XFx0fVxcbitcXHR9IGVsc2UgaWYgKGZvbGlvX3Rlc3RfaHVnZXRsYihmb2xpbykpIHtcXG4rXFx0XFx0aHVnZSA9IHRydWU7XFxuK1xcdFxcdGNvdW50ID0gZm9saW9fZnJlZV9yYXdfaHdwKGZvbGlvLCBmYWxzZSk7XFxuK1xcdFxcdGlmIChjb3VudCA9PSAwKSB7XFxuK1xcdFxcdFxcdGZvbGlvX3B1dChmb2xpbyk7XFxuK1xcdFxcdFxcdGdvdG8gdW5sb2NrX211dGV4O1xcbiBcXHRcXHR9XFxuLVxcbitcXHRcXHRmb2xpb19wdXQoZm9saW8pO1xcbitcXHRcXHRyZXQgPSBodWdldGxiX2NsZWFyX3BvaXNvbihmb2xpbyk7XFxuK1xcdFxcdGlmICghcmV0KVxcbitcXHRcXHRcXHRmb2xpb19wdXQoZm9saW8pO1xcbitcXHR9IGVsc2Uge1xcbiBcXHRcXHRmb2xpb19wdXQoZm9saW8pO1xcbiBcXHRcXHRpZiAoVGVzdENsZWFyUGFnZUhXUG9pc29uKHApKSB7XFxuIFxcdFxcdFxcdGZvbGlvX3B1dChmb2xpbyk7XFxuZGlmZiAtLWdpdCBhL21tL21lbW9yeV9ob3RwbHVnLmMgYi9tbS9tZW1vcnlfaG90cGx1Zy5jXFxuaW5kZXggN2FjMTlmYWIyMjYzMjQuLjMzMDA3ZThlNTQ2YTA5IDEwMDY0NFxcbi0tLSBhL21tL21lbW9yeV9ob3RwbHVnLmNcXG4rKysgYi9tbS9tZW1vcnlfaG90cGx1Zy5jXFxuQEAgLTE4MTMsNyArMTgxMyw3IEBAIHN0YXRpYyB2b2lkIGRvX21pZ3JhdGVfcmFuZ2UodW5zaWduZWQgbG9uZyBzdGFydF9wZm4sIHVuc2lnbmVkIGxvbmcgZW5kX3BmbilcXG4gXFx0XFx0aWYgKGZvbGlvX3Rlc3RfbGFyZ2UoZm9saW8pKVxcbiBcXHRcXHRcXHRwZm4gPSBmb2xpb19wZm4oZm9saW8pICsgZm9saW9fbnJfcGFnZXMoZm9saW8pIC0gMTtcXG4gXFxuLVxcdFxcdGlmIChmb2xpb19jb250YWluX2h3cG9pc29uZWRfcGFnZShmb2xpbykpIHtcXG4rXFx0XFx0aWYgKGZvbGlvX2hhc19od3BvaXNvbmVkX3BhZ2UoZm9saW8pKSB7XFxuIFxcdFxcdFxcdC8qXFxuIFxcdFxcdFxcdCAqIHVubWFwX3BvaXNvbmVkX2ZvbGlvKCkgY2Fubm90IGhhbmRsZSBsYXJnZSBmb2xpb3NcXG4gXFx0XFx0XFx0ICogaW4gYWxsIGNhc2VzIHlldC5cXG5kaWZmIC0tZ2l0IGEvbW0vc2htZW0uYyBiL21tL3NobWVtLmNcXG5pbmRleCBiNTFmODNjOTcwYmIzNy4uNDkyYzliZWYzNjIwNzQgMTAwNjQ0XFxuLS0tIGEvbW0vc2htZW0uY1xcbisrKyBiL21tL3NobWVtLmNcXG5AQCAtMzI0MCw3ICszMjQwLDcgQEAgc2htZW1fd3JpdGVfYmVnaW4oY29uc3Qgc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcXG4gXFx0aWYgKHJldClcXG4gXFx0XFx0cmV0dXJuIHJldDtcXG4gXFxuLVxcdGlmIChmb2xpb19jb250YWluX2h3cG9pc29uZWRfcGFnZShmb2xpbykpIHtcXG4rXFx0aWYgKGZvbGlvX2hhc19od3BvaXNvbmVkX3BhZ2UoZm9saW8pKSB7XFxuIFxcdFxcdGZvbGlvX3VubG9jayhmb2xpbyk7XFxuIFxcdFxcdGZvbGlvX3B1dChmb2xpbyk7XFxuIFxcdFxcdHJldHVybiAtRUlPO1xcbmRpZmYgLS1naXQgYS9tbS92bXNjYW4uYyBiL21tL3Ztc2Nhbi5jXFxuaW5kZXggMzVjM2JiMTVhZTk2YTMuLjcwZTU0YWNlMGU3NDFjIDEwMDY0NFxcbi0tLSBhL21tL3Ztc2Nhbi5jXFxuKysrIGIvbW0vdm1zY2FuLmNcXG5AQCAtMTA4Niw3ICsxMDg2LDcgQEAgc3RhdGljIHVuc2lnbmVkIGludCBzaHJpbmtfZm9saW9fbGlzdChzdHJ1Y3QgbGlzdF9oZWFkICpmb2xpb19saXN0LFxcbiBcXHRcXHRpZiAoIWZvbGlvX3RyeWxvY2soZm9saW8pKVxcbiBcXHRcXHRcXHRnb3RvIGtlZXA7XFxuIFxcbi1cXHRcXHRpZiAoZm9saW9fY29udGFpbl9od3BvaXNvbmVkX3BhZ2UoZm9saW8pKSB7XFxuK1xcdFxcdGlmIChmb2xpb19oYXNfaHdwb2lzb25lZF9wYWdlKGZvbGlvKSkge1xcbiBcXHRcXHRcXHQvKlxcbiBcXHRcXHRcXHQgKiB1bm1hcF9wb2lzb25lZF9mb2xpbygpIGNhbid0IGhhbmRsZSBsYXJnZVxcbiBcXHRcXHRcXHQgKiBmb2xpbywganVzdCBza2lwIGl0LiBtZW1vcnlfZmFpbHVyZSgpIHdpbGxcXG5kaWZmIC0tZ2l0IGEvdmlydC9rdm0vZ3Vlc3RfbWVtZmQuYyBiL3ZpcnQva3ZtL2d1ZXN0X21lbWZkLmNcXG5pbmRleCBkYjU3YzU3NjZhYjYwNC4uOTRlZWRjYzdmMWE5ZTAgMTAwNjQ0XFxuLS0tIGEvdmlydC9rdm0vZ3Vlc3RfbWVtZmQuY1xcbisrKyBiL3ZpcnQva3ZtL2d1ZXN0X21lbWZkLmNcXG5AQCAtNzc0LDcgKzc3NCw3IEBAIHN0YXRpYyBzdHJ1Y3QgZm9saW8gKl9fa3ZtX2dtZW1fZ2V0X3BmbihzdHJ1Y3QgZmlsZSAqZmlsZSxcXG4gXFx0aWYgKElTX0VSUihmb2xpbykpXFxuIFxcdFxcdHJldHVybiBmb2xpbztcXG4gXFxuLVxcdGlmIChmb2xpb190ZXN0X2h3cG9pc29uKGZvbGlvKSkge1xcbitcXHRpZiAoZm9saW9faGFzX2h3cG9pc29uZWRfcGFnZShmb2xpbykpIHtcXG4gXFx0XFx0Zm9saW9fdW5sb2NrKGZvbGlvKTtcXG4gXFx0XFx0Zm9saW9fcHV0KGZvbGlvKTtcXG4gXFx0XFx0cmV0dXJuIEVSUl9QVFIoLUVIV1BPSVNPTik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI0VDE4OjQ2OjE5Ljc0ODYxOTkwNVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjkwMTE5MTc5NTcyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk1FTU9SWV9GQUlMVVJFXCIsXG4gICAgXCJIV1BPSVNPTl9JTkpFQ1RcIixcbiAgICBcIkhVR0VUTEJGU1wiLFxuICAgIFwiSFVHRVRMQl9QQUdFXCIsXG4gICAgXCJUUkFOU1BBUkVOVF9IVUdFUEFHRVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImh1Z2V0bGJfcGFnZV9od3BvaXNvblwiLFxuICAgIFwiaHVnZXRsYl91bnJlZl9wYWdlX2h3cG9pc29uXCIsXG4gICAgXCJ1bnBvaXNvbl9tZW1vcnlcIixcbiAgICBcImZvbGlvX2NsZWFyX2h1Z2V0bGJfaHdwb2lzb25cIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBob3cgaGFyZHdhcmUgcG9pc29uZWQgKEhXUE9JU09OKSBwYWdlcyBhcmUgdHJhY2tlZCBhbmQgaGFuZGxlZCB3aXRoaW4gbGFyZ2UgZm9saW9zLCBzcGVjaWZpY2FsbHkgYWZmZWN0aW5nIGh1Z2V0bGJmcyBhbmQgZmlsZW1hcCByZWFkIG9wZXJhdGlvbnMuIEl0IGludHJvZHVjZXMgbmV3IGxvZ2ljIHRvIHRyYWNrIHBvaXNvbmVkIHBhZ2VzIHVzaW5nIGBmb2xpby1cXHUwMDNlaHVnZXRsYl9od3BvaXNvbmAgYW5kIHJlcGxhY2VzIHRoZSBjdXN0b20gYGh1Z2V0bGJmc19yZWFkX2l0ZXJgIHdpdGggYGdlbmVyaWNfZmlsZV9yZWFkX2l0ZXJgLCBoYW5kbGluZyBod3BvaXNvbiBkaXJlY3RseSBpbiBgZmlsZW1hcF9yZWFkYC4gVGhlc2UgYXJlIHJlYWNoYWJsZSwgZnVuY3Rpb25hbCBjaGFuZ2VzIGluIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIGh1Z2V0bGJmcy4gRnV6emluZyBzaG91bGQgZm9jdXMgb24gdGhlIG5ldyBod3BvaXNvbiB0cmFja2luZyBmdW5jdGlvbnMgYW5kIHVucG9pc29uaW5nIGxvZ2ljLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG5ldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0XG4gICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksXG4gICBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDBmZTZkZTZjMmYwNTc2NjQyMTdkOTZhM2RhNzcyYTQ4NjY3ZTU1NjdcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIEp1bCAyNCAxODo0NjoxNiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2ZzL0tjb25maWcgYi9mcy9LY29uZmlnXG5pbmRleCBjZjZhZTY0Nzc2ZTYyYy4uZWRkYWM0ZWQyMTRiMTIgMTAwNjQ0XG4tLS0gYS9mcy9LY29uZmlnXG4rKysgYi9mcy9LY29uZmlnXG5AQCAtMjcyLDcgKzI3Miw3IEBAIGVuZGlmICMgSFVHRVRMQkZTXG4gXG4gY29uZmlnIEhVR0VUTEJfUEFHRVxuIFx0ZGVmX2Jvb2wgSFVHRVRMQkZTXG4tXHRzZWxlY3QgWEFSUkFZX01VTFRJXG4rXHRzZWxlY3QgTEFSR0VfRk9MSU9cbiBcbiBjb25maWcgSFVHRVRMQl9QQUdFX09QVElNSVpFX1ZNRU1NQVBcbiBcdGRlZl9ib29sIEhVR0VUTEJfUEFHRVxuZGlmZiAtLWdpdCBhL2ZzL2h1Z2V0bGJmcy9pbm9kZS5jIGIvZnMvaHVnZXRsYmZzL2lub2RlLmNcbmluZGV4IDIxNmUxYTBkZDBiMjM3Li5jZWY3ZTYxYjgyN2Q3MSAxMDA2NDRcbi0tLSBhL2ZzL2h1Z2V0bGJmcy9pbm9kZS5jXG4rKysgYi9mcy9odWdldGxiZnMvaW5vZGUuY1xuQEAgLTE4NywxMTMgKzE4Nyw2IEBAIGh1Z2V0bGJfZ2V0X3VubWFwcGVkX2FyZWEoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGxvbmcgYWRkcixcbiBcdHJldHVybiBtbV9nZXRfdW5tYXBwZWRfYXJlYV92bWZsYWdzKGZpbGUsIGFkZHIwLCBsZW4sIHBnb2ZmLCBmbGFncywgMCk7XG4gfVxuIFxuLS8qXG4tICogU29tZW9uZSB3YW50cyB0byByZWFkIEBieXRlcyBmcm9tIGEgSFdQT0lTT04gaHVnZXRsYiBAZm9saW8gZnJvbSBAb2Zmc2V0LlxuLSAqIFJldHVybnMgdGhlIG1heGltdW0gbnVtYmVyIG9mIGJ5dGVzIG9uZSBjYW4gcmVhZCB3aXRob3V0IHRvdWNoaW5nIHRoZSAxc3QgcmF3XG4tICogSFdQT0lTT04gcGFnZS5cbi0gKi9cbi1zdGF0aWMgc2l6ZV90IGFkanVzdF9yYW5nZV9od3BvaXNvbihzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzaXplX3Qgb2Zmc2V0LFxuLVx0XHRzaXplX3QgYnl0ZXMpXG4te1xuLVx0c3RydWN0IHBhZ2UgKnBhZ2UgPSBmb2xpb19wYWdlKGZvbGlvLCBvZmZzZXQgLyBQQUdFX1NJWkUpO1xuLVx0c2l6ZV90IHNhZmVfYnl0ZXM7XG4tXG4tXHRpZiAoaXNfcmF3X2h3cG9pc29uX3BhZ2VfaW5faHVnZXBhZ2UocGFnZSkpXG4tXHRcdHJldHVybiAwO1xuLVx0LyogU2FmZSB0byByZWFkIHRoZSByZW1haW5pbmcgYnl0ZXMgaW4gdGhpcyBwYWdlLiAqL1xuLVx0c2FmZV9ieXRlcyA9IFBBR0VfU0laRSAtIChvZmZzZXQgJSBQQUdFX1NJWkUpO1xuLVx0cGFnZSsrO1xuLVxuLVx0LyogQ2hlY2sgZWFjaCByZW1haW5pbmcgcGFnZSBhcyBsb25nIGFzIHdlIGFyZSBub3QgZG9uZSB5ZXQuICovXG4tXHRmb3IgKDsgc2FmZV9ieXRlcyBcdTAwM2MgYnl0ZXM7IHNhZmVfYnl0ZXMgKz0gUEFHRV9TSVpFLCBwYWdlKyspXG4tXHRcdGlmIChpc19yYXdfaHdwb2lzb25fcGFnZV9pbl9odWdlcGFnZShwYWdlKSlcbi1cdFx0XHRicmVhaztcbi1cbi1cdHJldHVybiBtaW4oc2FmZV9ieXRlcywgYnl0ZXMpO1xuLX1cbi1cbi0vKlxuLSAqIFN1cHBvcnQgZm9yIHJlYWQoKSAtIEZpbmQgdGhlIHBhZ2UgYXR0YWNoZWQgdG8gZl9tYXBwaW5nIGFuZCBjb3B5IG91dCB0aGVcbi0gKiBkYXRhLiBUaGlzIHByb3ZpZGVzIGZ1bmN0aW9uYWxpdHkgc2ltaWxhciB0byBmaWxlbWFwX3JlYWQoKS5cbi0gKi9cbi1zdGF0aWMgc3NpemVfdCBodWdldGxiZnNfcmVhZF9pdGVyKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICp0bylcbi17XG4tXHRzdHJ1Y3QgZmlsZSAqZmlsZSA9IGlvY2ItXHUwMDNla2lfZmlscDtcbi1cdHN0cnVjdCBoc3RhdGUgKmggPSBoc3RhdGVfZmlsZShmaWxlKTtcbi1cdHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nID0gZmlsZS1cdTAwM2VmX21hcHBpbmc7XG4tXHRzdHJ1Y3QgaW5vZGUgKmlub2RlID0gbWFwcGluZy1cdTAwM2Vob3N0O1xuLVx0dW5zaWduZWQgbG9uZyBpbmRleCA9IGlvY2ItXHUwMDNla2lfcG9zIFx1MDAzZVx1MDAzZSBodWdlX3BhZ2Vfc2hpZnQoaCk7XG4tXHR1bnNpZ25lZCBsb25nIG9mZnNldCA9IGlvY2ItXHUwMDNla2lfcG9zIFx1MDAyNiB+aHVnZV9wYWdlX21hc2soaCk7XG4tXHR1bnNpZ25lZCBsb25nIGVuZF9pbmRleDtcbi1cdGxvZmZfdCBpc2l6ZTtcbi1cdHNzaXplX3QgcmV0dmFsID0gMDtcbi1cbi1cdHdoaWxlIChpb3ZfaXRlcl9jb3VudCh0bykpIHtcbi1cdFx0c3RydWN0IGZvbGlvICpmb2xpbztcbi1cdFx0c2l6ZV90IG5yLCBjb3BpZWQsIHdhbnQ7XG4tXG4tXHRcdC8qIG5yIGlzIHRoZSBtYXhpbXVtIG51bWJlciBvZiBieXRlcyB0byBjb3B5IGZyb20gdGhpcyBwYWdlICovXG4tXHRcdG5yID0gaHVnZV9wYWdlX3NpemUoaCk7XG4tXHRcdGlzaXplID0gaV9zaXplX3JlYWQoaW5vZGUpO1xuLVx0XHRpZiAoIWlzaXplKVxuLVx0XHRcdGJyZWFrO1xuLVx0XHRlbmRfaW5kZXggPSAoaXNpemUgLSAxKSBcdTAwM2VcdTAwM2UgaHVnZV9wYWdlX3NoaWZ0KGgpO1xuLVx0XHRpZiAoaW5kZXggXHUwMDNlIGVuZF9pbmRleClcbi1cdFx0XHRicmVhaztcbi1cdFx0aWYgKGluZGV4ID09IGVuZF9pbmRleCkge1xuLVx0XHRcdG5yID0gKChpc2l6ZSAtIDEpIFx1MDAyNiB+aHVnZV9wYWdlX21hc2soaCkpICsgMTtcbi1cdFx0XHRpZiAobnIgXHUwMDNjPSBvZmZzZXQpXG4tXHRcdFx0XHRicmVhaztcbi1cdFx0fVxuLVx0XHRuciA9IG5yIC0gb2Zmc2V0O1xuLVxuLVx0XHQvKiBGaW5kIHRoZSBmb2xpbyAqL1xuLVx0XHRmb2xpbyA9IGZpbGVtYXBfbG9ja19odWdldGxiX2ZvbGlvKGgsIG1hcHBpbmcsIGluZGV4KTtcbi1cdFx0aWYgKElTX0VSUihmb2xpbykpIHtcbi1cdFx0XHQvKlxuLVx0XHRcdCAqIFdlIGhhdmUgYSBIT0xFLCB6ZXJvIG91dCB0aGUgdXNlci1idWZmZXIgZm9yIHRoZVxuLVx0XHRcdCAqIGxlbmd0aCBvZiB0aGUgaG9sZSBvciByZXF1ZXN0LlxuLVx0XHRcdCAqL1xuLVx0XHRcdGNvcGllZCA9IGlvdl9pdGVyX3plcm8obnIsIHRvKTtcbi1cdFx0fSBlbHNlIHtcbi1cdFx0XHRmb2xpb191bmxvY2soZm9saW8pO1xuLVxuLVx0XHRcdGlmICghZm9saW9fdGVzdF9od3BvaXNvbihmb2xpbykpXG4tXHRcdFx0XHR3YW50ID0gbnI7XG4tXHRcdFx0ZWxzZSB7XG4tXHRcdFx0XHQvKlxuLVx0XHRcdFx0ICogQWRqdXN0IGhvdyBtYW55IGJ5dGVzIHNhZmUgdG8gcmVhZCB3aXRob3V0XG4tXHRcdFx0XHQgKiB0b3VjaGluZyB0aGUgMXN0IHJhdyBIV1BPSVNPTiBwYWdlIGFmdGVyXG4tXHRcdFx0XHQgKiBvZmZzZXQuXG4tXHRcdFx0XHQgKi9cbi1cdFx0XHRcdHdhbnQgPSBhZGp1c3RfcmFuZ2VfaHdwb2lzb24oZm9saW8sIG9mZnNldCwgbnIpO1xuLVx0XHRcdFx0aWYgKHdhbnQgPT0gMCkge1xuLVx0XHRcdFx0XHRmb2xpb19wdXQoZm9saW8pO1xuLVx0XHRcdFx0XHRyZXR2YWwgPSAtRUlPO1xuLVx0XHRcdFx0XHRicmVhaztcbi1cdFx0XHRcdH1cbi1cdFx0XHR9XG4tXG4tXHRcdFx0Lypcbi1cdFx0XHQgKiBXZSBoYXZlIHRoZSBmb2xpbywgY29weSBpdCB0byB1c2VyIHNwYWNlIGJ1ZmZlci5cbi1cdFx0XHQgKi9cbi1cdFx0XHRjb3BpZWQgPSBjb3B5X2ZvbGlvX3RvX2l0ZXIoZm9saW8sIG9mZnNldCwgd2FudCwgdG8pO1xuLVx0XHRcdGZvbGlvX3B1dChmb2xpbyk7XG4tXHRcdH1cbi1cdFx0b2Zmc2V0ICs9IGNvcGllZDtcbi1cdFx0cmV0dmFsICs9IGNvcGllZDtcbi1cdFx0aWYgKGNvcGllZCAhPSBuciBcdTAwMjZcdTAwMjYgaW92X2l0ZXJfY291bnQodG8pKSB7XG4tXHRcdFx0aWYgKCFyZXR2YWwpXG4tXHRcdFx0XHRyZXR2YWwgPSAtRUZBVUxUO1xuLVx0XHRcdGJyZWFrO1xuLVx0XHR9XG4tXHRcdGluZGV4ICs9IG9mZnNldCBcdTAwM2VcdTAwM2UgaHVnZV9wYWdlX3NoaWZ0KGgpO1xuLVx0XHRvZmZzZXQgXHUwMDI2PSB+aHVnZV9wYWdlX21hc2soaCk7XG4tXHR9XG4tXHRpb2NiLVx1MDAzZWtpX3BvcyA9ICgobG9mZl90KWluZGV4IFx1MDAzY1x1MDAzYyBodWdlX3BhZ2Vfc2hpZnQoaCkpICsgb2Zmc2V0O1xuLVx0cmV0dXJuIHJldHZhbDtcbi19XG4tXG4gc3RhdGljIGludCBodWdldGxiZnNfd3JpdGVfYmVnaW4oY29uc3Qgc3RydWN0IGtpb2NiICppb2NiLFxuIFx0XHRcdHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxuIFx0XHRcdGxvZmZfdCBwb3MsIHVuc2lnbmVkIGxlbixcbkBAIC04ODMsNiArNzc2LDE3IEBAIHN0YXRpYyBzdHJ1Y3QgaW5vZGUgKmh1Z2V0bGJmc19nZXRfcm9vdChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxuIFx0cmV0dXJuIGlub2RlO1xuIH1cbiBcbitzdGF0aWMgdm9pZCBodWdldGxiZnNfaW5pdF9yZWd1bGFyX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4re1xuK1x0c3RydWN0IGhzdGF0ZSAqaHN0YXRlID0gaHN0YXRlX2lub2RlKGlub2RlKTtcbitcdHVuc2lnbmVkIGludCBvcmRlciA9IGh1Z2VfcGFnZV9vcmRlcihoc3RhdGUpO1xuK1xuK1x0aW5vZGUtXHUwMDNlaV9vcCA9IFx1MDAyNmh1Z2V0bGJmc19pbm9kZV9vcGVyYXRpb25zO1xuK1x0aW5vZGUtXHUwMDNlaV9mb3AgPSBcdTAwMjZodWdldGxiZnNfZmlsZV9vcGVyYXRpb25zO1xuK1x0bWFwcGluZ19zZXRfZm9saW9fb3JkZXJfcmFuZ2UoaW5vZGUtXHUwMDNlaV9tYXBwaW5nLCBvcmRlciwgb3JkZXIpO1xuK1x0bWFwcGluZ19zZXRfYXV0aG9yaXRhdGl2ZShpbm9kZS1cdTAwM2VpX21hcHBpbmcpO1xuK31cbitcbiAvKlxuICAqIEh1Z2V0bGJmcyBpcyBub3QgcmVjbGFpbWFibGU7IHRoZXJlZm9yZSBpdHMgaV9tbWFwX3J3c2VtIHdpbGwgbmV2ZXJcbiAgKiBiZSB0YWtlbiBmcm9tIHJlY2xhaW0gLS0gdW5saWtlIHJlZ3VsYXIgZmlsZXN5c3RlbXMuIFRoaXMgbmVlZHMgYW5cbkBAIC05MjYsOCArODMwLDcgQEAgc3RhdGljIHN0cnVjdCBpbm9kZSAqaHVnZXRsYmZzX2dldF9pbm9kZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxuIFx0XHRcdGluaXRfc3BlY2lhbF9pbm9kZShpbm9kZSwgbW9kZSwgZGV2KTtcbiBcdFx0XHRicmVhaztcbiBcdFx0Y2FzZSBTX0lGUkVHOlxuLVx0XHRcdGlub2RlLVx1MDAzZWlfb3AgPSBcdTAwMjZodWdldGxiZnNfaW5vZGVfb3BlcmF0aW9ucztcbi1cdFx0XHRpbm9kZS1cdTAwM2VpX2ZvcCA9IFx1MDAyNmh1Z2V0bGJmc19maWxlX29wZXJhdGlvbnM7XG4rXHRcdFx0aHVnZXRsYmZzX2luaXRfcmVndWxhcl9pbm9kZShpbm9kZSk7XG4gXHRcdFx0YnJlYWs7XG4gXHRcdGNhc2UgU19JRkRJUjpcbiBcdFx0XHRpbm9kZS1cdTAwM2VpX29wID0gXHUwMDI2aHVnZXRsYmZzX2Rpcl9pbm9kZV9vcGVyYXRpb25zO1xuQEAgLTEyMDYsNyArMTEwOSw3IEBAIHN0YXRpYyB2b2lkIGluaXRfb25jZSh2b2lkICpmb28pXG4gfVxuIFxuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGh1Z2V0bGJmc19maWxlX29wZXJhdGlvbnMgPSB7XG4tXHQucmVhZF9pdGVyXHRcdD0gaHVnZXRsYmZzX3JlYWRfaXRlcixcbitcdC5yZWFkX2l0ZXJcdFx0PSBnZW5lcmljX2ZpbGVfcmVhZF9pdGVyLFxuIFx0Lm1tYXBcdFx0XHQ9IGh1Z2V0bGJmc19maWxlX21tYXAsXG4gXHQuZnN5bmNcdFx0XHQ9IG5vb3BfZnN5bmMsXG4gXHQuZ2V0X3VubWFwcGVkX2FyZWFcdD0gaHVnZXRsYl9nZXRfdW5tYXBwZWRfYXJlYSxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaCBiL2luY2x1ZGUvbGludXgvaHVnZXRsYi5oXG5pbmRleCAyYWJhZjk5MzIxZTkwZC4uMTg3ODY0MmU3NWVjNTEgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaFxuKysrIGIvaW5jbHVkZS9saW51eC9odWdldGxiLmhcbkBAIC0xNjUsNyArMTY1LDcgQEAgYm9vbCBodWdldGxiZnNfcGFnZWNhY2hlX3ByZXNlbnQoc3RydWN0IGhzdGF0ZSAqaCxcbiBcdFx0XHRcdCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbiBcdFx0XHRcdCB1bnNpZ25lZCBsb25nIGFkZHJlc3MpO1xuIFxuLXN0cnVjdCBhZGRyZXNzX3NwYWNlICpodWdldGxiX2ZvbGlvX21hcHBpbmdfbG9ja193cml0ZShzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcbitzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqaHVnZXRsYl9mb2xpb19tYXBwaW5nX2xvY2tfd3JpdGUoY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbyk7XG4gXG4gZXh0ZXJuIGludCBtb3ZhYmxlX2dpZ2FudGljX3BhZ2VzIF9fcmVhZF9tb3N0bHk7XG4gZXh0ZXJuIGludCBzeXNjdGxfaHVnZXRsYl9zaG1fZ3JvdXAgX19yZWFkX21vc3RseTtcbkBAIC0yOTIsOCArMjkyLDcgQEAgc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGh1Z2V0bGJfdG90YWxfcGFnZXModm9pZClcbiBcdHJldHVybiAwO1xuIH1cbiBcbi1zdGF0aWMgaW5saW5lIHN0cnVjdCBhZGRyZXNzX3NwYWNlICpodWdldGxiX2ZvbGlvX21hcHBpbmdfbG9ja193cml0ZShcbi1cdFx0XHRcdFx0XHRcdHN0cnVjdCBmb2xpbyAqZm9saW8pXG4rc3RhdGljIGlubGluZSBzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqaHVnZXRsYl9mb2xpb19tYXBwaW5nX2xvY2tfd3JpdGUoY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbylcbiB7XG4gXHRyZXR1cm4gTlVMTDtcbiB9XG5AQCAtNTk1LDggKzU5NCw4IEBAIGVudW0gaHVnZXRsYl9wYWdlX2ZsYWdzIHtcbiAjaWZkZWYgQ09ORklHX0hVR0VUTEJfUEFHRVxuICNkZWZpbmUgVEVTVEhQQUdFRkxBRyh1bmFtZSwgZmxuYW1lKVx0XHRcdFx0XFxcbiBzdGF0aWMgX19hbHdheXNfaW5saW5lXHRcdFx0XHRcdFx0XFxcbi1ib29sIGZvbGlvX3Rlc3RfaHVnZXRsYl8jI2ZsbmFtZShzdHJ1Y3QgZm9saW8gKmZvbGlvKVx0XHRcXFxuLVx0e1x0dm9pZCAqcHJpdmF0ZSA9IFx1MDAyNmZvbGlvLVx1MDAzZXByaXZhdGU7XHRcdFxcXG4rYm9vbCBmb2xpb190ZXN0X2h1Z2V0bGJfIyNmbG5hbWUoY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbylcdFxcXG4rXHR7XHRjb25zdCB2b2lkICpwcml2YXRlID0gXHUwMDI2Zm9saW8tXHUwMDNlcHJpdmF0ZTtcdFx0XFxcbiBcdFx0cmV0dXJuIHRlc3RfYml0KEhQR18jI2ZsbmFtZSwgcHJpdmF0ZSk7XHRcdFxcXG4gXHR9XG4gXG5AQCAtNjE2LDcgKzYxNSw3IEBAIHZvaWQgZm9saW9fY2xlYXJfaHVnZXRsYl8jI2ZsbmFtZShzdHJ1Y3QgZm9saW8gKmZvbGlvKVx0XHRcXFxuICNlbHNlXG4gI2RlZmluZSBURVNUSFBBR0VGTEFHKHVuYW1lLCBmbG5hbWUpXHRcdFx0XHRcXFxuIHN0YXRpYyBpbmxpbmUgYm9vbFx0XHRcdFx0XHRcdFxcXG4tZm9saW9fdGVzdF9odWdldGxiXyMjZmxuYW1lKHN0cnVjdCBmb2xpbyAqZm9saW8pXHRcdFxcXG4rZm9saW9fdGVzdF9odWdldGxiXyMjZmxuYW1lKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8pXHRcdFxcXG4gXHR7IHJldHVybiAwOyB9XG4gXG4gI2RlZmluZSBTRVRIUEFHRUZMQUcodW5hbWUsIGZsbmFtZSlcdFx0XHRcdFxcXG5AQCAtNzI3LDcgKzcyNiw3IEBAIHN0YXRpYyBpbmxpbmUgc3RydWN0IGh1Z2VwYWdlX3N1YnBvb2wgKnN1YnBvb2xfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSlcbiBcdHJldHVybiBIVUdFVExCRlNfU0IoaW5vZGUtXHUwMDNlaV9zYiktXHUwMDNlc3Bvb2w7XG4gfVxuIFxuLXN0YXRpYyBpbmxpbmUgc3RydWN0IGh1Z2VwYWdlX3N1YnBvb2wgKmh1Z2V0bGJfZm9saW9fc3VicG9vbChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuK3N0YXRpYyBpbmxpbmUgc3RydWN0IGh1Z2VwYWdlX3N1YnBvb2wgKmh1Z2V0bGJfZm9saW9fc3VicG9vbChjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIHtcbiBcdHJldHVybiBmb2xpby1cdTAwM2VfaHVnZXRsYl9zdWJwb29sO1xuIH1cbkBAIC04NTcsNyArODU2LDcgQEAgc3RhdGljIGlubGluZSBib29sIGFyY2hfaGFzX2h1Z2VfYm9vdG1lbV9hbGxvYyh2b2lkKVxuIH1cbiAjZW5kaWZcbiBcbi1zdGF0aWMgaW5saW5lIHN0cnVjdCBoc3RhdGUgKmZvbGlvX2hzdGF0ZShzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuK3N0YXRpYyBpbmxpbmUgc3RydWN0IGhzdGF0ZSAqZm9saW9faHN0YXRlKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8pXG4ge1xuIFx0Vk1fQlVHX09OX0ZPTElPKCFmb2xpb190ZXN0X2h1Z2V0bGIoZm9saW8pLCBmb2xpbyk7XG4gXHRyZXR1cm4gc2l6ZV90b19oc3RhdGUoZm9saW9fc2l6ZShmb2xpbykpO1xuQEAgLTEwNzAsMTEgKzEwNjksNiBAQCB2b2lkIGh1Z2V0bGJfcmVnaXN0ZXJfbm9kZShzdHJ1Y3Qgbm9kZSAqbm9kZSk7XG4gdm9pZCBodWdldGxiX3VucmVnaXN0ZXJfbm9kZShzdHJ1Y3Qgbm9kZSAqbm9kZSk7XG4gI2VuZGlmXG4gXG4tLypcbi0gKiBDaGVjayBpZiBhIGdpdmVuIHJhdyBAcGFnZSBpbiBhIGh1Z2VwYWdlIGlzIEhXUE9JU09OLlxuLSAqL1xuLWJvb2wgaXNfcmF3X2h3cG9pc29uX3BhZ2VfaW5faHVnZXBhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UpO1xuLVxuIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBodWdlX3BhZ2VfbWFza19hbGlnbihzdHJ1Y3QgZmlsZSAqZmlsZSlcbiB7XG4gXHRyZXR1cm4gUEFHRV9NQVNLIFx1MDAyNiB+aHVnZV9wYWdlX21hc2soaHN0YXRlX2ZpbGUoZmlsZSkpO1xuQEAgLTEwODgsNyArMTA4Miw3IEBAIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBodWdlX3BhZ2VfbWFza19hbGlnbihzdHJ1Y3QgZmlsZSAqZmlsZSlcbiBcdHJldHVybiAwO1xuIH1cbiBcbi1zdGF0aWMgaW5saW5lIHN0cnVjdCBodWdlcGFnZV9zdWJwb29sICpodWdldGxiX2ZvbGlvX3N1YnBvb2woc3RydWN0IGZvbGlvICpmb2xpbylcbitzdGF0aWMgaW5saW5lIHN0cnVjdCBodWdlcGFnZV9zdWJwb29sICpodWdldGxiX2ZvbGlvX3N1YnBvb2woY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbylcbiB7XG4gXHRyZXR1cm4gTlVMTDtcbiB9XG5AQCAtMTE1Nyw3ICsxMTUxLDcgQEAgc3RhdGljIGlubGluZSBzdHJ1Y3QgaHN0YXRlICpoc3RhdGVfdm1hKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxuIFx0cmV0dXJuIE5VTEw7XG4gfVxuIFxuLXN0YXRpYyBpbmxpbmUgc3RydWN0IGhzdGF0ZSAqZm9saW9faHN0YXRlKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4rc3RhdGljIGlubGluZSBzdHJ1Y3QgaHN0YXRlICpmb2xpb19oc3RhdGUoY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbylcbiB7XG4gXHRyZXR1cm4gTlVMTDtcbiB9XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tbV90eXBlcy5oIGIvaW5jbHVkZS9saW51eC9tbV90eXBlcy5oXG5pbmRleCBiMThjMmIyZTdkMmM2NS4uZDdhOWIwZDhiYmRmYjEgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L21tX3R5cGVzLmhcbisrKyBiL2luY2x1ZGUvbGludXgvbW1fdHlwZXMuaFxuQEAgLTM4Nyw3ICszODcsNyBAQCB0eXBlZGVmIHVuc2lnbmVkIHNob3J0IG1tX2lkX3Q7XG4gICogQF9odWdldGxiX3N1YnBvb2w6IERvIG5vdCB1c2UgZGlyZWN0bHksIHVzZSBhY2Nlc3NvciBpbiBodWdldGxiLmguXG4gICogQF9odWdldGxiX2Nncm91cDogRG8gbm90IHVzZSBkaXJlY3RseSwgdXNlIGFjY2Vzc29yIGluIGh1Z2V0bGJfY2dyb3VwLmguXG4gICogQF9odWdldGxiX2Nncm91cF9yc3ZkOiBEbyBub3QgdXNlIGRpcmVjdGx5LCB1c2UgYWNjZXNzb3IgaW4gaHVnZXRsYl9jZ3JvdXAuaC5cbi0gKiBAX2h1Z2V0bGJfaHdwb2lzb246IERvIG5vdCB1c2UgZGlyZWN0bHksIGNhbGwgcmF3X2h3cF9saXN0X2hlYWQoKS5cbisgKiBAaHVnZXRsYl9od3BvaXNvbjogTGlzdCBvZiBwYWdlcyB3aXRoIGh3cG9pc29uLlxuICAqIEBfZGVmZXJyZWRfbGlzdDogRm9saW9zIHRvIGJlIHNwbGl0IHVuZGVyIG1lbW9yeSBwcmVzc3VyZS5cbiAgKiBAX3VudXNlZF9zbGFiX29ial9leHRzOiBQbGFjZWhvbGRlciB0byBtYXRjaCBvYmpfZXh0cyBpbiBzdHJ1Y3Qgc2xhYi5cbiAgKlxuQEAgLTQ5OSw3ICs0OTksNyBAQCBzdHJ1Y3QgZm9saW8ge1xuIFx0XHRcdHZvaWQgKl9odWdldGxiX3N1YnBvb2w7XG4gXHRcdFx0dm9pZCAqX2h1Z2V0bGJfY2dyb3VwO1xuIFx0XHRcdHZvaWQgKl9odWdldGxiX2Nncm91cF9yc3ZkO1xuLVx0XHRcdHZvaWQgKl9odWdldGxiX2h3cG9pc29uO1xuK1x0XHRcdHN0cnVjdCBsbGlzdF9oZWFkIGh1Z2V0bGJfaHdwb2lzb247XG4gXHQvKiBwcml2YXRlOiB0aGUgdW5pb24gd2l0aCBzdHJ1Y3QgcGFnZSBpcyB0cmFuc2l0aW9uYWwgKi9cbiBcdFx0fTtcbiBcdFx0c3RydWN0IHBhZ2UgX19wYWdlXzM7XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmggYi9pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaFxuaW5kZXggNzIyM2Y2ZjRlMmI0MDMuLmIxNDZjNTIyODc0MWMwIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmhcbisrKyBiL2luY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oXG5AQCAtODkzLDE0ICs4OTMsMTkgQEAgc3RhdGljIGlubGluZSBpbnQgUGFnZVRyYW5zQ29tcG91bmQoY29uc3Qgc3RydWN0IHBhZ2UgKnBhZ2UpXG4gVEVTVFBBR0VGTEFHX0ZBTFNFKFRyYW5zQ29tcG91bmQsIHRyYW5zY29tcG91bmQpXG4gI2VuZGlmXG4gXG4tI2lmIGRlZmluZWQoQ09ORklHX01FTU9SWV9GQUlMVVJFKSBcdTAwMjZcdTAwMjYgZGVmaW5lZChDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UpXG4rI2lmIGRlZmluZWQoQ09ORklHX01FTU9SWV9GQUlMVVJFKSBcdTAwMjZcdTAwMjYgZGVmaW5lZChDT05GSUdfTEFSR0VfRk9MSU8pXG4gLypcbi0gKiBQYWdlSGFzSFdQb2lzb25lZCBpbmRpY2F0ZXMgdGhhdCBhdCBsZWFzdCBvbmUgc3VicGFnZSBpcyBod3BvaXNvbmVkIGluIHRoZVxuLSAqIGNvbXBvdW5kIHBhZ2UuXG4rICogZm9saW9faGFzX2h3cG9pc29uZWQgaW5kaWNhdGVzIHRoYXQgYXQgbGVhc3Qgb25lIHBhZ2UgaXMgaHdwb2lzb25lZCBpbiB0aGVcbisgKiBmb2xpby4gIFRoYXQgcGFnZSB3aWxsIHVzdWFsbHkgYWxzbyBoYXZlIHRoZSBIV1BvaXNvbiBmbGFnIHNldCwgYnV0IHRoaXNcbisgKiBpcyBub3QgcG9zc2libGUgZm9yIGZvbGlvcyB3aGljaCBoYXZlIEhWTyAoc2VlIG1lbW9yeS1mYWlsdXJlIGZvciB0aGVcbisgKiBzY2hlbWUgdXNlZCBpbiB0aGF0IGNhc2UpLiAgWW91IHByb2JhYmx5IGRvbid0IHdhbnQgdG8gY2FsbCB0aGlzIGRpcmVjdGx5O1xuKyAqIHVzZSBmb2xpb19oYXNfaHdwb2lzb25lZF9wYWdlKCkgaW5zdGVhZC5cbiAgKlxuICAqIFRoaXMgZmxhZyBpcyBzZXQgYnkgaHdwb2lzb24gaGFuZGxlci4gIENsZWFyZWQgYnkgVEhQIHNwbGl0IG9yIGZyZWUgcGFnZS5cbiAgKi9cbiBGT0xJT19GTEFHKGhhc19od3BvaXNvbmVkLCBGT0xJT19TRUNPTkRfUEFHRSlcbitGT0xJT19URVNUX1NFVF9GTEFHKGhhc19od3BvaXNvbmVkLCBGT0xJT19TRUNPTkRfUEFHRSlcbitGT0xJT19URVNUX0NMRUFSX0ZMQUcoaGFzX2h3cG9pc29uZWQsIEZPTElPX1NFQ09ORF9QQUdFKVxuICNlbHNlXG4gRk9MSU9fRkxBR19GQUxTRShoYXNfaHdwb2lzb25lZClcbiAjZW5kaWZcbkBAIC0xMDQxLDggKzEwNDYsMjUgQEAgUEFHRV9UWVBFX09QUyhTbGFiLCBzbGFiLCBzbGFiKVxuIFxuICNpZmRlZiBDT05GSUdfSFVHRVRMQl9QQUdFXG4gRk9MSU9fVFlQRV9PUFMoaHVnZXRsYiwgaHVnZXRsYilcbitcbitzdGF0aWMgaW5saW5lIGJvb2wgZm9saW9fdGVzdF9odWdlX3BvaXNvbihjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuK3tcbitcdHJldHVybiAoUkVBRF9PTkNFKGZvbGlvLVx1MDAzZXBhZ2UucGFnZV90eXBlKSBcdTAwM2VcdTAwM2UgMjMpID09XG4rXHRcdCgoUEdUWV9odWdldGxiIFx1MDAzY1x1MDAzYyAxKSB8IDEpO1xuK31cbitcbitzdGF0aWMgaW5saW5lIHZvaWQgZm9saW9fc2V0X2h1Z2VfcG9pc29uKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4re1xuK1x0Zm9saW8tXHUwMDNlcGFnZS5wYWdlX3R5cGUgfD0gKDEgXHUwMDNjXHUwMDNjIDIzKTtcbit9XG4rXG4rc3RhdGljIGlubGluZSB2b2lkIGZvbGlvX2NsZWFyX2h1Z2VfcG9pc29uKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4re1xuK1x0Zm9saW8tXHUwMDNlcGFnZS5wYWdlX3R5cGUgXHUwMDI2PSB+KDEgXHUwMDNjXHUwMDNjIDIzKTtcbit9XG4gI2Vsc2VcbiBGT0xJT19URVNUX0ZMQUdfRkFMU0UoaHVnZXRsYilcbitGT0xJT19URVNUX0ZMQUdfRkFMU0UoaHVnZV9wb2lzb24pXG4gI2VuZGlmXG4gXG4gUEFHRV9UWVBFX09QUyhac21hbGxvYywgenNtYWxsb2MsIHpzbWFsbG9jKVxuQEAgLTEwNjgsMTAgKzEwOTAsMTQgQEAgc3RhdGljIGlubGluZSBib29sIFBhZ2VIdWdlKGNvbnN0IHN0cnVjdCBwYWdlICpwYWdlKVxuIFx0cmV0dXJuIGZvbGlvX3Rlc3RfaHVnZXRsYihwYWdlX2ZvbGlvKHBhZ2UpKTtcbiB9XG4gXG4rYm9vbCBodWdldGxiX3BhZ2VfaHdwb2lzb24oY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbywgY29uc3Qgc3RydWN0IHBhZ2UgKnBhZ2UpO1xuK2Jvb2wgaHVnZXRsYl91bnJlZl9wYWdlX2h3cG9pc29uKGNvbnN0IHN0cnVjdCBwYWdlICpwYWdlKTtcbitcbiAvKlxuLSAqIENoZWNrIGlmIGEgcGFnZSBpcyBjdXJyZW50bHkgbWFya2VkIEhXUG9pc29uZWQuIE5vdGUgdGhhdCB0aGlzIGNoZWNrIGlzXG4tICogYmVzdCBlZmZvcnQgb25seSBhbmQgaW5oZXJlbnRseSByYWN5OiB0aGVyZSBpcyBubyB3YXkgdG8gc3luY2hyb25pemUgd2l0aFxuLSAqIGZhaWxpbmcgaGFyZHdhcmUuXG4rICogQ2hlY2sgaWYgYSBwYWdlIGlzIGN1cnJlbnRseSBtYXJrZWQgSFdQb2lzb25lZC4gIFRoaXMgY2hlY2sgaXMgYmVzdFxuKyAqIGVmZm9ydCBvbmx5IGFuZCBpbmhlcmVudGx5IHJhY3k6IHRoZXJlIGlzIG5vIHdheSB0byBzeW5jaHJvbml6ZSB3aXRoXG4rICogZmFpbGluZyBoYXJkd2FyZS4gIFRoZSBjYWxsZXIgbWF5IG5vdCBoYXZlIGEgcmVmY291bnQgb24gdGhlIGZvbGlvXG4rICogY29udGFpbmluZyB0aGUgcGFnZSwgc28gd2UgbXVzdCBiZSBjYXJlZnVsIHRvIG5vdCB0cmlwIGFueSBhc3NlcnRpb25zLlxuICAqL1xuIHN0YXRpYyBpbmxpbmUgYm9vbCBpc19wYWdlX2h3cG9pc29uKGNvbnN0IHN0cnVjdCBwYWdlICpwYWdlKVxuIHtcbkBAIC0xMDgwLDEzICsxMTA2LDI2IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBpc19wYWdlX2h3cG9pc29uKGNvbnN0IHN0cnVjdCBwYWdlICpwYWdlKVxuIFx0aWYgKFBhZ2VIV1BvaXNvbihwYWdlKSlcbiBcdFx0cmV0dXJuIHRydWU7XG4gXHRmb2xpbyA9IHBhZ2VfZm9saW8ocGFnZSk7XG4tXHRyZXR1cm4gZm9saW9fdGVzdF9odWdldGxiKGZvbGlvKSBcdTAwMjZcdTAwMjYgUGFnZUhXUG9pc29uKFx1MDAyNmZvbGlvLVx1MDAzZXBhZ2UpO1xuK1x0aWYgKGZvbGlvX3Rlc3RfaHVnZV9wb2lzb24oZm9saW8pKVxuK1x0XHRyZXR1cm4gaHVnZXRsYl91bnJlZl9wYWdlX2h3cG9pc29uKHBhZ2UpO1xuK1x0LyogSW4gY2FzZSB3ZSByYWNlZCB3aXRoIGh1Z2V0bGIgdHJhbnNmZXJyaW5nIGZsYWdzICovXG4rXHRyZXR1cm4gUGFnZUhXUG9pc29uKHBhZ2UpO1xuK31cbitcbitzdGF0aWMgaW5saW5lIGJvb2wgaXNfcmVmX3BhZ2VfaHdwb2lzb24oY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbyxcbitcdFx0Y29uc3Qgc3RydWN0IHBhZ2UgKnBhZ2UpXG4re1xuK1x0aWYgKFBhZ2VIV1BvaXNvbihwYWdlKSlcbitcdFx0cmV0dXJuIHRydWU7XG4rXHRpZiAoZm9saW9fdGVzdF9odWdldGxiKGZvbGlvKSlcbitcdFx0cmV0dXJuIGh1Z2V0bGJfcGFnZV9od3BvaXNvbihmb2xpbywgcGFnZSk7XG4rXHRyZXR1cm4gZmFsc2U7XG4gfVxuIFxuLXN0YXRpYyBpbmxpbmUgYm9vbCBmb2xpb19jb250YWluX2h3cG9pc29uZWRfcGFnZShzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuK3N0YXRpYyBpbmxpbmUgYm9vbCBmb2xpb19oYXNfaHdwb2lzb25lZF9wYWdlKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8pXG4ge1xuLVx0cmV0dXJuIGZvbGlvX3Rlc3RfaHdwb2lzb24oZm9saW8pIHx8XG4tXHQgICAgKGZvbGlvX3Rlc3RfbGFyZ2UoZm9saW8pIFx1MDAyNlx1MDAyNiBmb2xpb190ZXN0X2hhc19od3BvaXNvbmVkKGZvbGlvKSk7XG4rXHRyZXR1cm4gUGFnZUhXUG9pc29uKFx1MDAyNmZvbGlvLVx1MDAzZXBhZ2UpIHx8XG4rXHQgICAgICAgKGZvbGlvX3Rlc3RfbGFyZ2UoZm9saW8pIFx1MDAyNlx1MDAyNiBmb2xpb190ZXN0X2hhc19od3BvaXNvbmVkKGZvbGlvKSk7XG4gfVxuIFxuIGJvb2wgaXNfZnJlZV9idWRkeV9wYWdlKGNvbnN0IHN0cnVjdCBwYWdlICpwYWdlKTtcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BhZ2VtYXAuaCBiL2luY2x1ZGUvbGludXgvcGFnZW1hcC5oXG5pbmRleCAyYzM3MThkNTkyZDZkZC4uNmZkZWU1YjAzNjIxYjkgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L3BhZ2VtYXAuaFxuKysrIGIvaW5jbHVkZS9saW51eC9wYWdlbWFwLmhcbkBAIC0yMTAsNiArMjEwLDcgQEAgZW51bSBtYXBwaW5nX2ZsYWdzIHtcbiBcdEFTX1dSSVRFQkFDS19NQVlfREVBRExPQ0tfT05fUkVDTEFJTSA9IDksXG4gXHRBU19LRVJORUxfRklMRSA9IDEwLFx0LyogbWFwcGluZyBmb3IgYSBmYWtlIGtlcm5lbCBmaWxlIHRoYXQgc2hvdWxkbid0XG4gXHRcdFx0XHQgICBhY2NvdW50IHVzYWdlIHRvIHVzZXIgY2dyb3VwcyAqL1xuK1x0QVNfQVVUSE9SSVRBVElWRSA9IDExLFx0LyogSWYgd2UgbWlzcyBpbiB0aGUgcGFnZSBjYWNoZSwgaXQncyBhIGhvbGUgKi9cbiBcdC8qIEJpdHMgMTYtMjUgYXJlIHVzZWQgZm9yIEZPTElPX09SREVSICovXG4gXHRBU19GT0xJT19PUkRFUl9CSVRTID0gNSxcbiBcdEFTX0ZPTElPX09SREVSX01JTiA9IDE2LFxuQEAgLTM0NSw2ICszNDYsMTYgQEAgc3RhdGljIGlubGluZSBib29sIG1hcHBpbmdfd3JpdGViYWNrX21heV9kZWFkbG9ja19vbl9yZWNsYWltKGNvbnN0IHN0cnVjdCBhZGRyZXNcbiBcdHJldHVybiB0ZXN0X2JpdChBU19XUklURUJBQ0tfTUFZX0RFQURMT0NLX09OX1JFQ0xBSU0sIFx1MDAyNm1hcHBpbmctXHUwMDNlZmxhZ3MpO1xuIH1cbiBcbitzdGF0aWMgaW5saW5lIHZvaWQgbWFwcGluZ19zZXRfYXV0aG9yaXRhdGl2ZShzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZylcbit7XG4rXHRzZXRfYml0KEFTX0FVVEhPUklUQVRJVkUsIFx1MDAyNm1hcHBpbmctXHUwMDNlZmxhZ3MpO1xuK31cbitcbitzdGF0aWMgaW5saW5lIGJvb2wgbWFwcGluZ19pc19hdXRob3JpdGF0aXZlKGNvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nKVxuK3tcbitcdHJldHVybiB0ZXN0X2JpdChBU19BVVRIT1JJVEFUSVZFLCBcdTAwMjZtYXBwaW5nLVx1MDAzZWZsYWdzKTtcbit9XG4rXG4gc3RhdGljIGlubGluZSBnZnBfdCBtYXBwaW5nX2dmcF9tYXNrKGNvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nKVxuIHtcbiBcdHJldHVybiBtYXBwaW5nLVx1MDAzZWdmcF9tYXNrO1xuQEAgLTM3Myw3ICszODQsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgbWFwcGluZ19zZXRfZ2ZwX21hc2soc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm0sIGdmcF90IG1hc2spXG4gICogYXNzdW1wdGlvbnMgYWJvdXQgbWF4aW11bSBvcmRlciBpZiBUSFAgYXJlIGRpc2FibGVkLCBidXQgOCBzZWVtcyBsaWtlXG4gICogYSBnb29kIG9yZGVyICh0aGF0J3MgMU1CIGlmIHlvdSdyZSB1c2luZyA0a0IgcGFnZXMpXG4gICovXG4tI2lmZGVmIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRVxuKyNpZmRlZiBDT05GSUdfRklMRU1BUF9MQVJHRV9GT0xJT1xuICNkZWZpbmUgUFJFRkVSUkVEX01BWF9QQUdFQ0FDSEVfT1JERVJcdEhQQUdFX1BNRF9PUkRFUlxuICNlbHNlXG4gI2RlZmluZSBQUkVGRVJSRURfTUFYX1BBR0VDQUNIRV9PUkRFUlx0OFxuQEAgLTM5NCw3ICs0MDUsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgbWFwcGluZ19zZXRfZ2ZwX21hc2soc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm0sIGdmcF90IG1hc2spXG4gICovXG4gc3RhdGljIGlubGluZSBzaXplX3QgbWFwcGluZ19tYXhfZm9saW9fc2l6ZV9zdXBwb3J0ZWQodm9pZClcbiB7XG4tXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UpKVxuK1x0aWYgKElTX0VOQUJMRUQoQ09ORklHX0ZJTEVNQVBfTEFSR0VfRk9MSU8pKVxuIFx0XHRyZXR1cm4gMVUgXHUwMDNjXHUwMDNjIChQQUdFX1NISUZUICsgTUFYX1BBR0VDQUNIRV9PUkRFUik7XG4gXHRyZXR1cm4gUEFHRV9TSVpFO1xuIH1cbkBAIC00MDUsMjkgKzQxNiwyMyBAQCBzdGF0aWMgaW5saW5lIHNpemVfdCBtYXBwaW5nX21heF9mb2xpb19zaXplX3N1cHBvcnRlZCh2b2lkKVxuICAqIEBtaW46IE1pbmltdW0gZm9saW8gb3JkZXIgKGJldHdlZW4gMC1NQVhfUEFHRUNBQ0hFX09SREVSIGluY2x1c2l2ZSkuXG4gICogQG1heDogTWF4aW11bSBmb2xpbyBvcmRlciAoYmV0d2VlbiBAbWluLU1BWF9QQUdFQ0FDSEVfT1JERVIgaW5jbHVzaXZlKS5cbiAgKlxuLSAqIFRoZSBmaWxlc3lzdGVtIHNob3VsZCBjYWxsIHRoaXMgZnVuY3Rpb24gaW4gaXRzIGlub2RlIGNvbnN0cnVjdG9yIHRvXG4tICogaW5kaWNhdGUgd2hpY2ggYmFzZSBzaXplIChtaW4pIGFuZCBtYXhpbXVtIHNpemUgKG1heCkgb2YgZm9saW8gdGhlIFZGU1xuLSAqIGNhbiB1c2UgdG8gY2FjaGUgdGhlIGNvbnRlbnRzIG9mIHRoZSBmaWxlLiAgVGhpcyBzaG91bGQgb25seSBiZSB1c2VkXG4tICogaWYgdGhlIGZpbGVzeXN0ZW0gbmVlZHMgc3BlY2lhbCBoYW5kbGluZyBvZiBmb2xpbyBzaXplcyAoaWUgdGhlcmUgaXNcbi0gKiBzb21ldGhpbmcgdGhlIGNvcmUgY2Fubm90IGtub3cpLlxuKyAqIFRoZSBmaWxlc3lzdGVtIHNob3VsZCBjYWxsIHRoaXMgZnVuY3Rpb24gaW4gaXRzIGlub2RlIGNvbnN0cnVjdG9yXG4rICogdG8gaW5kaWNhdGUgd2hpY2ggc2l6ZSBmb2xpb3MgY2FuIGJlIHVzZWQgdG8gY2FjaGUgdGhlIGNvbnRlbnRzIG9mXG4rICogdGhlIGlub2RlLiAgVGhpcyBzaG91bGQgb25seSBiZSB1c2VkIGlmIHRoZSBmaWxlc3lzdGVtIG5lZWRzIHNwZWNpYWxcbisgKiBoYW5kbGluZyBvZiBmb2xpbyBzaXplcyAoaWUgdGhlcmUgaXMgc29tZXRoaW5nIHRoZSBjb3JlIGNhbm5vdCBrbm93KS5cbiAgKiBEbyBub3QgdHVuZSBpdCBiYXNlZCBvbiwgZWcsIGlfc2l6ZS5cbiAgKlxuKyAqIGh1Z2V0bGIgY2FsbHMgdGhpcyB3aXRoIG9yZGVycyBsYXJnZXIgdGhhbiBNQVhfUEFHRUNBQ0hFX09SREVSLlxuKyAqIE5vcm1hbCBmaWxlc3lzdGVtcyBzaG91bGQgbm90IGRvIHRoaXMuXG4rICpcbiAgKiBDb250ZXh0OiBUaGlzIHNob3VsZCBub3QgYmUgY2FsbGVkIHdoaWxlIHRoZSBpbm9kZSBpcyBhY3RpdmUgYXMgaXRcbiAgKiBpcyBub24tYXRvbWljLlxuICAqL1xuIHN0YXRpYyBpbmxpbmUgdm9pZCBtYXBwaW5nX3NldF9mb2xpb19vcmRlcl9yYW5nZShzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcbi1cdFx0XHRcdFx0XHQgdW5zaWduZWQgaW50IG1pbixcbi1cdFx0XHRcdFx0XHQgdW5zaWduZWQgaW50IG1heClcbitcdFx0dW5zaWduZWQgaW50IG1pbiwgdW5zaWduZWQgaW50IG1heClcbiB7XG4tXHRpZiAoIUlTX0VOQUJMRUQoQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFKSlcbitcdGlmICghSVNfRU5BQkxFRChDT05GSUdfRklMRU1BUF9MQVJHRV9GT0xJTykpXG4gXHRcdHJldHVybjtcbi1cbi1cdGlmIChtaW4gXHUwMDNlIE1BWF9QQUdFQ0FDSEVfT1JERVIpXG4tXHRcdG1pbiA9IE1BWF9QQUdFQ0FDSEVfT1JERVI7XG4tXG4tXHRpZiAobWF4IFx1MDAzZSBNQVhfUEFHRUNBQ0hFX09SREVSKVxuLVx0XHRtYXggPSBNQVhfUEFHRUNBQ0hFX09SREVSO1xuLVxuIFx0aWYgKG1heCBcdTAwM2MgbWluKVxuIFx0XHRtYXggPSBtaW47XG4gXG5AQCAtNDYwLDcgKzQ2NSw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBtYXBwaW5nX3NldF9sYXJnZV9mb2xpb3Moc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcpXG4gc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnRcbiBtYXBwaW5nX21heF9mb2xpb19vcmRlcihjb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZylcbiB7XG4tXHRpZiAoIUlTX0VOQUJMRUQoQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFKSlcbitcdGlmICghSVNfRU5BQkxFRChDT05GSUdfRklMRU1BUF9MQVJHRV9GT0xJTykpXG4gXHRcdHJldHVybiAwO1xuIFx0cmV0dXJuIChtYXBwaW5nLVx1MDAzZWZsYWdzIFx1MDAyNiBBU19GT0xJT19PUkRFUl9NQVhfTUFTSykgXHUwMDNlXHUwMDNlIEFTX0ZPTElPX09SREVSX01BWDtcbiB9XG5AQCAtNDY4LDcgKzQ3Myw3IEBAIG1hcHBpbmdfbWF4X2ZvbGlvX29yZGVyKGNvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nKVxuIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50XG4gbWFwcGluZ19taW5fZm9saW9fb3JkZXIoY29uc3Qgc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcpXG4ge1xuLVx0aWYgKCFJU19FTkFCTEVEKENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSkpXG4rXHRpZiAoIUlTX0VOQUJMRUQoQ09ORklHX0ZJTEVNQVBfTEFSR0VfRk9MSU8pKVxuIFx0XHRyZXR1cm4gMDtcbiBcdHJldHVybiAobWFwcGluZy1cdTAwM2VmbGFncyBcdTAwMjYgQVNfRk9MSU9fT1JERVJfTUlOX01BU0spIFx1MDAzZVx1MDAzZSBBU19GT0xJT19PUkRFUl9NSU47XG4gfVxuQEAgLTUyNCw3ICs1MjksNyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgbWFwcGluZ19sYXJnZV9mb2xpb19zdXBwb3J0KGNvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaVxuICAqXG4gICogUmV0dXJuOiBUcnVlIGlmIFBNRC1zaXplZCBmb2xpb3MgYXJlIHN1cHBvcnRlZCwgb3RoZXJ3aXNlIGZhbHNlLlxuICAqL1xuLSNpZmRlZiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VcbisjaWZkZWYgQ09ORklHX0ZJTEVNQVBfTEFSR0VfRk9MSU9cbiBzdGF0aWMgaW5saW5lIGJvb2wgbWFwcGluZ19wbWRfZm9saW9fc3VwcG9ydChjb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZylcbiB7XG4gXHQvKiBBU19GT0xJT19PUkRFUiBpcyBvbmx5IHJlYXNvbmFibGUgZm9yIHBhZ2VjYWNoZSBmb2xpb3MgKi9cbmRpZmYgLS1naXQgYS9tbS9LY29uZmlnIGIvbW0vS2NvbmZpZ1xuaW5kZXggOWUwY2E0ODI0OTA1NGYuLmU2NjZkZDE0Y2EwYzNkIDEwMDY0NFxuLS0tIGEvbW0vS2NvbmZpZ1xuKysrIGIvbW0vS2NvbmZpZ1xuQEAgLTg0MywxMSArODQzLDE1IEBAIGNvbmZpZyBQRVJTSVNURU5UX0hVR0VfWkVST19GT0xJT1xuIGNvbmZpZyBNTV9JRFxuIFx0ZGVmX2Jvb2wgblxuIFxuK2NvbmZpZyBMQVJHRV9GT0xJT1xuK1x0ZGVmX2Jvb2wgblxuK1x0c2VsZWN0IFhBUlJBWV9NVUxUSVxuK1xuIG1lbnVjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VcbiBcdGJvb2wgXCJUcmFuc3BhcmVudCBIdWdlcGFnZSBTdXBwb3J0XCJcbiBcdGRlcGVuZHMgb24gSEFWRV9BUkNIX1RSQU5TUEFSRU5UX0hVR0VQQUdFIFx1MDAyNlx1MDAyNiAhUFJFRU1QVF9SVFxuIFx0c2VsZWN0IENPTVBBQ1RJT05cbi1cdHNlbGVjdCBYQVJSQVlfTVVMVElcbitcdHNlbGVjdCBMQVJHRV9GT0xJT1xuIFx0c2VsZWN0IE1NX0lEXG4gXHRoZWxwXG4gXHQgIFRyYW5zcGFyZW50IEh1Z2VwYWdlcyBhbGxvd3MgdGhlIGtlcm5lbCB0byB1c2UgaHVnZSBwYWdlcyBhbmRcbmRpZmYgLS1naXQgYS9tbS9maWxlbWFwLmMgYi9tbS9maWxlbWFwLmNcbmluZGV4IDU4ZWI5ZDI0MDY0MzQ4Li41YThjYzIwZTYyNGU0ZCAxMDA2NDRcbi0tLSBhL21tL2ZpbGVtYXAuY1xuKysrIGIvbW0vZmlsZW1hcC5jXG5AQCAtMjQ4Myw2ICsyNDgzLDggQEAgc3RhdGljIHZvaWQgZmlsZW1hcF9nZXRfcmVhZF9iYXRjaChzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcbiBcbiBcdFx0aWYgKCFmb2xpb19iYXRjaF9hZGQoZmJhdGNoLCBmb2xpbykpXG4gXHRcdFx0YnJlYWs7XG4rXHRcdGlmIChmb2xpb19oYXNfaHdwb2lzb25lZF9wYWdlKGZvbGlvKSlcbitcdFx0XHRicmVhaztcbiBcdFx0aWYgKCFmb2xpb190ZXN0X3VwdG9kYXRlKGZvbGlvKSlcbiBcdFx0XHRicmVhaztcbiBcdFx0aWYgKGZvbGlvX3Rlc3RfcmVhZGFoZWFkKGZvbGlvKSlcbkBAIC0yNjk1LDYgKzI2OTcsOCBAQCBzdGF0aWMgaW50IGZpbGVtYXBfZ2V0X3BhZ2VzKHN0cnVjdCBraW9jYiAqaW9jYiwgc2l6ZV90IGNvdW50LFxuIFx0aWYgKCFmb2xpb19iYXRjaF9jb3VudChmYmF0Y2gpKSB7XG4gXHRcdERFRklORV9SRUFEQUhFQUQocmFjdGwsIGZpbHAsIFx1MDAyNmZpbHAtXHUwMDNlZl9yYSwgbWFwcGluZywgaW5kZXgpO1xuIFxuK1x0XHRpZiAobWFwcGluZ19pc19hdXRob3JpdGF0aXZlKG1hcHBpbmcpKVxuK1x0XHRcdHJldHVybiAwO1xuIFx0XHRpZiAoaW9jYi1cdTAwM2VraV9mbGFncyBcdTAwMjYgSU9DQl9OT0lPKVxuIFx0XHRcdHJldHVybiAtRUFHQUlOO1xuIFx0XHRpZiAoaW9jYi1cdTAwM2VraV9mbGFncyBcdTAwMjYgSU9DQl9OT1dBSVQpXG5AQCAtMjc0OSw2ICsyNzUzLDI5IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBwb3Nfc2FtZV9mb2xpbyhsb2ZmX3QgcG9zMSwgbG9mZl90IHBvczIsIHN0cnVjdCBmb2xpbyAqZm9saW8pXG4gXHRyZXR1cm4gKHBvczEgXHUwMDNlXHUwMDNlIHNoaWZ0ID09IHBvczIgXHUwMDNlXHUwMDNlIHNoaWZ0KTtcbiB9XG4gXG4rc3RhdGljIHNpemVfdCBhZGp1c3RfcmFuZ2VfaHdwb2lzb24oY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbywgc2l6ZV90IG9mZnNldCxcbitcdFx0c2l6ZV90IGJ5dGVzKVxuK3tcbitcdGNvbnN0IHN0cnVjdCBwYWdlICpwYWdlID0gZm9saW9fcGFnZShmb2xpbywgb2Zmc2V0IC8gUEFHRV9TSVpFKTtcbitcdHNpemVfdCBzYWZlX2J5dGVzO1xuK1xuK1x0aWYgKCFmb2xpb19oYXNfaHdwb2lzb25lZF9wYWdlKGZvbGlvKSlcbitcdFx0cmV0dXJuIGJ5dGVzO1xuK1x0aWYgKGlzX3JlZl9wYWdlX2h3cG9pc29uKGZvbGlvLCBwYWdlKSlcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHQvKiBTYWZlIHRvIHJlYWQgdGhlIHJlbWFpbmluZyBieXRlcyBpbiB0aGlzIHBhZ2UuICovXG4rXHRzYWZlX2J5dGVzID0gUEFHRV9TSVpFIC0gKG9mZnNldCAlIFBBR0VfU0laRSk7XG4rXHRwYWdlKys7XG4rXG4rXHQvKiBDaGVjayBlYWNoIHJlbWFpbmluZyBwYWdlIGFzIGxvbmcgYXMgd2UgYXJlIG5vdCBkb25lIHlldC4gKi9cbitcdGZvciAoOyBzYWZlX2J5dGVzIFx1MDAzYyBieXRlczsgc2FmZV9ieXRlcyArPSBQQUdFX1NJWkUsIHBhZ2UrKylcbitcdFx0aWYgKGlzX3JlZl9wYWdlX2h3cG9pc29uKGZvbGlvLCBwYWdlKSlcbitcdFx0XHRicmVhaztcbitcbitcdHJldHVybiBtaW4oc2FmZV9ieXRlcywgYnl0ZXMpO1xuK31cbitcbiBzdGF0aWMgdm9pZCBmaWxlbWFwX2VuZF9kcm9wYmVoaW5kX3JlYWQoc3RydWN0IGZvbGlvICpmb2xpbylcbiB7XG4gXHRpZiAoIWZvbGlvX3Rlc3RfZHJvcGJlaGluZChmb2xpbykpXG5AQCAtMjgyOCw2ICsyODU1LDIyIEBAIHNzaXplX3QgZmlsZW1hcF9yZWFkKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICppdGVyLFxuIFx0XHRcdGdvdG8gcHV0X2ZvbGlvcztcbiBcdFx0ZW5kX29mZnNldCA9IG1pbl90KGxvZmZfdCwgaXNpemUsIGlvY2ItXHUwMDNla2lfcG9zICsgaXRlci1cdTAwM2Vjb3VudCk7XG4gXG4rXHRcdGlmICghZm9saW9fYmF0Y2hfY291bnQoXHUwMDI2ZmJhdGNoKSkge1xuK1x0XHRcdHNpemVfdCBmc2l6ZSA9IG1hcHBpbmdfbWluX2ZvbGlvX25yYnl0ZXMobWFwcGluZyk7XG4rXHRcdFx0c2l6ZV90IG9mZnNldCA9IGlvY2ItXHUwMDNla2lfcG9zIFx1MDAyNiAoZnNpemUgLSAxKTtcbitcdFx0XHRzaXplX3QgYnl0ZXMgPSBtaW5fdChsb2ZmX3QsIGVuZF9vZmZzZXQgLSBpb2NiLVx1MDAzZWtpX3BvcyxcbitcdFx0XHRcdFx0ICAgICBmc2l6ZSAtIG9mZnNldCk7XG4rXHRcdFx0c2l6ZV90IGNvcGllZCA9IGlvdl9pdGVyX3plcm8oYnl0ZXMsIGl0ZXIpO1xuK1xuK1x0XHRcdGFscmVhZHlfcmVhZCArPSBjb3BpZWQ7XG4rXHRcdFx0aW9jYi1cdTAwM2VraV9wb3MgKz0gY29waWVkO1xuK1x0XHRcdGxhc3RfcG9zID0gaW9jYi1cdTAwM2VraV9wb3M7XG4rXG4rXHRcdFx0aWYgKGNvcGllZCBcdTAwM2MgYnl0ZXMpXG4rXHRcdFx0XHRlcnJvciA9IC1FRkFVTFQ7XG4rXHRcdFx0Y29udGludWU7XG4rXHRcdH1cbitcbiBcdFx0LypcbiBcdFx0ICogT25jZSB3ZSBzdGFydCBjb3B5aW5nIGRhdGEsIHdlIGRvbid0IHdhbnQgdG8gYmUgdG91Y2hpbmcgYW55XG4gXHRcdCAqIGNhY2hlbGluZXMgdGhhdCBtaWdodCBiZSBjb250ZW5kZWQ6XG5AQCAtMjg2MiwxNCArMjkwNSwxOCBAQCBzc2l6ZV90IGZpbGVtYXBfcmVhZChzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqaXRlcixcbiBcdFx0XHRpZiAod3JpdGFibHlfbWFwcGVkKVxuIFx0XHRcdFx0Zmx1c2hfZGNhY2hlX2ZvbGlvKGZvbGlvKTtcbiBcbi1cdFx0XHRjb3BpZWQgPSBjb3B5X2ZvbGlvX3RvX2l0ZXIoZm9saW8sIG9mZnNldCwgYnl0ZXMsIGl0ZXIpO1xuK1x0XHRcdGNvcGllZCA9IGFkanVzdF9yYW5nZV9od3BvaXNvbihmb2xpbywgb2Zmc2V0LCBieXRlcyk7XG4rXHRcdFx0aWYgKGNvcGllZCBcdTAwM2MgYnl0ZXMpXG4rXHRcdFx0XHRlcnJvciA9IC1FSU87XG4rXHRcdFx0Y29waWVkID0gY29weV9mb2xpb190b19pdGVyKGZvbGlvLCBvZmZzZXQsIGNvcGllZCwgaXRlcik7XG4gXG4gXHRcdFx0YWxyZWFkeV9yZWFkICs9IGNvcGllZDtcbiBcdFx0XHRpb2NiLVx1MDAzZWtpX3BvcyArPSBjb3BpZWQ7XG4gXHRcdFx0bGFzdF9wb3MgPSBpb2NiLVx1MDAzZWtpX3BvcztcbiBcbiBcdFx0XHRpZiAoY29waWVkIFx1MDAzYyBieXRlcykge1xuLVx0XHRcdFx0ZXJyb3IgPSAtRUZBVUxUO1xuK1x0XHRcdFx0aWYgKCFlcnJvcilcbitcdFx0XHRcdFx0ZXJyb3IgPSAtRUZBVUxUO1xuIFx0XHRcdFx0YnJlYWs7XG4gXHRcdFx0fVxuIFx0XHR9XG5kaWZmIC0tZ2l0IGEvbW0vaHVnZV9tZW1vcnkuYyBiL21tL2h1Z2VfbWVtb3J5LmNcbmluZGV4IDJiY2NiMGE1M2EwYTYwLi4zNTMzNDAzMDkxMDc0YyAxMDA2NDRcbi0tLSBhL21tL2h1Z2VfbWVtb3J5LmNcbisrKyBiL21tL2h1Z2VfbWVtb3J5LmNcbkBAIC00NDEzLDcgKzQ0MTMsNyBAQCBzdGF0aWMgYm9vbCB0aHBfdW5kZXJ1c2VkKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4gXHRpZiAoa2h1Z2VwYWdlZF9tYXhfcHRlc19ub25lID09IEhQQUdFX1BNRF9OUiAtIDEpXG4gXHRcdHJldHVybiBmYWxzZTtcbiBcbi1cdGlmIChmb2xpb19jb250YWluX2h3cG9pc29uZWRfcGFnZShmb2xpbykpXG4rXHRpZiAoZm9saW9faGFzX2h3cG9pc29uZWRfcGFnZShmb2xpbykpXG4gXHRcdHJldHVybiBmYWxzZTtcbiBcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGZvbGlvX25yX3BhZ2VzKGZvbGlvKTsgaSsrKSB7XG5kaWZmIC0tZ2l0IGEvbW0vaHVnZXRsYi5jIGIvbW0vaHVnZXRsYi5jXG5pbmRleCA1NzEyMTJiODA4MzVlYy4uYWFhYzZlMmFmNGMyNGEgMTAwNjQ0XG4tLS0gYS9tbS9odWdldGxiLmNcbisrKyBiL21tL2h1Z2V0bGIuY1xuQEAgLTEyNTUsNyArMTI1NSw3IEBAIHN0YXRpYyBzdHJ1Y3QgZm9saW8gKmRlcXVldWVfaHVnZXRsYl9mb2xpb19ub2RlX2V4YWN0KHN0cnVjdCBoc3RhdGUgKmgsXG4gXHRcdGlmIChwaW4gXHUwMDI2XHUwMDI2ICFmb2xpb19pc19sb25ndGVybV9waW5uYWJsZShmb2xpbykpXG4gXHRcdFx0Y29udGludWU7XG4gXG4tXHRcdGlmIChmb2xpb190ZXN0X2h3cG9pc29uKGZvbGlvKSlcbitcdFx0aWYgKGZvbGlvX3Rlc3RfaGFzX2h3cG9pc29uZWQoZm9saW8pKVxuIFx0XHRcdGNvbnRpbnVlO1xuIFxuIFx0XHRpZiAoaXNfbWlncmF0ZV9pc29sYXRlX3BhZ2UoXHUwMDI2Zm9saW8tXHUwMDNlcGFnZSkpXG5AQCAtMTQ5OCwxMCArMTQ5OCwxMCBAQCBzdGF0aWMgdm9pZCBfX3VwZGF0ZV9hbmRfZnJlZV9odWdldGxiX2ZvbGlvKHN0cnVjdCBoc3RhdGUgKmgsXG4gXHR9XG4gXG4gXHQvKlxuLVx0ICogTW92ZSBQYWdlSFdQb2lzb24gZmxhZyBmcm9tIGhlYWQgcGFnZSB0byB0aGUgcmF3IGVycm9yIHBhZ2VzLFxuLVx0ICogd2hpY2ggbWFrZXMgYW55IGhlYWx0aHkgc3VicGFnZXMgcmV1c2FibGUuXG4rXHQgKiBNb3ZlIEhXUG9pc29uIGZsYWcgdG8gZWFjaCBlcnJvciBwYWdlXG4rXHQgKiB3aGljaCBtYWtlcyBhbnkgaGVhbHRoeSBwYWdlcyByZXVzYWJsZS5cbiBcdCAqL1xuLVx0aWYgKHVubGlrZWx5KGZvbGlvX3Rlc3RfaHdwb2lzb24oZm9saW8pKSlcbitcdGlmICh1bmxpa2VseShmb2xpb190ZXN0X2hhc19od3BvaXNvbmVkKGZvbGlvKSkpXG4gXHRcdGZvbGlvX2NsZWFyX2h1Z2V0bGJfaHdwb2lzb24oZm9saW8pO1xuIFxuIFx0Vk1fQlVHX09OX0ZPTElPKGZvbGlvX3JlZl9jb3VudChmb2xpbyksIGZvbGlvKTtcbkBAIC0xNzc1LDcgKzE3NzUsNyBAQCB2b2lkIGluaXRfbmV3X2h1Z2V0bGJfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbylcbiAgKiBzdGFibGUuICBEdWUgdG8gbG9ja2luZyBvcmRlciwgd2UgY2FuIG9ubHkgdHJ5bG9ja193cml0ZS4gIElmIHdlIGNhblxuICAqIG5vdCBnZXQgdGhlIGxvY2ssIHNpbXBseSByZXR1cm4gTlVMTCB0byBjYWxsZXIuXG4gICovXG4tc3RydWN0IGFkZHJlc3Nfc3BhY2UgKmh1Z2V0bGJfZm9saW9fbWFwcGluZ19sb2NrX3dyaXRlKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4rc3RydWN0IGFkZHJlc3Nfc3BhY2UgKmh1Z2V0bGJfZm9saW9fbWFwcGluZ19sb2NrX3dyaXRlKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8pXG4ge1xuIFx0c3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcgPSBmb2xpb19tYXBwaW5nKGZvbGlvKTtcbiBcbkBAIC0zOTk4LDcgKzM5OTgsNyBAQCBsb25nIGRlbW90ZV9wb29sX2h1Z2VfcGFnZShzdHJ1Y3QgaHN0YXRlICpzcmMsIG5vZGVtYXNrX3QgKm5vZGVzX2FsbG93ZWQsXG4gXHRcdHN0cnVjdCBmb2xpbyAqZm9saW8sICpuZXh0O1xuIFxuIFx0XHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoZm9saW8sIG5leHQsIFx1MDAyNnNyYy1cdTAwM2VodWdlcGFnZV9mcmVlbGlzdHNbbm9kZV0sIGxydSkge1xuLVx0XHRcdGlmIChmb2xpb190ZXN0X2h3cG9pc29uKGZvbGlvKSlcbitcdFx0XHRpZiAoZm9saW9fdGVzdF9oYXNfaHdwb2lzb25lZChmb2xpbykpXG4gXHRcdFx0XHRjb250aW51ZTtcbiBcbiBcdFx0XHRyZW1vdmVfaHVnZXRsYl9mb2xpbyhzcmMsIGZvbGlvLCBmYWxzZSk7XG5AQCAtNTgwOSw3ICs1ODA5LDcgQEAgc3RhdGljIHZtX2ZhdWx0X3QgaHVnZXRsYl9ub19wYWdlKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxuIFx0XHQgKiBkb24ndCBoYXZlIGh3cG9pc29uZWQgc3dhcCBlbnRyeSBmb3IgZXJyb3JlZCB2aXJ0dWFsIGFkZHJlc3MuXG4gXHRcdCAqIFNvIHdlIG5lZWQgdG8gYmxvY2sgaHVnZXBhZ2UgZmF1bHQgYnkgUEdfaHdwb2lzb24gYml0IGNoZWNrLlxuIFx0XHQgKi9cbi1cdFx0aWYgKHVubGlrZWx5KGZvbGlvX3Rlc3RfaHdwb2lzb24oZm9saW8pKSkge1xuK1x0XHRpZiAodW5saWtlbHkoZm9saW9fdGVzdF9oYXNfaHdwb2lzb25lZChmb2xpbykpKSB7XG4gXHRcdFx0cmV0ID0gVk1fRkFVTFRfSFdQT0lTT05fTEFSR0UgfFxuIFx0XHRcdFx0Vk1fRkFVTFRfU0VUX0hJTkRFWChoc3RhdGVfaW5kZXgoaCkpO1xuIFx0XHRcdGdvdG8gYmFja291dF91bmxvY2tlZDtcbkBAIC02MzE4LDcgKzYzMTgsNyBAQCBpbnQgaHVnZXRsYl9tZmlsbF9hdG9taWNfcHRlKHB0ZV90ICpkc3RfcHRlLFxuIFx0cHRsID0gaHVnZV9wdGVfbG9jayhoLCBkc3RfbW0sIGRzdF9wdGUpO1xuIFxuIFx0cmV0ID0gLUVJTztcbi1cdGlmIChmb2xpb190ZXN0X2h3cG9pc29uKGZvbGlvKSlcbitcdGlmIChmb2xpb190ZXN0X2hhc19od3BvaXNvbmVkKGZvbGlvKSlcbiBcdFx0Z290byBvdXRfcmVsZWFzZV91bmxvY2s7XG4gXG4gXHRyZXQgPSAtRUVYSVNUO1xuZGlmZiAtLWdpdCBhL21tL21lbW9yeS1mYWlsdXJlLmMgYi9tbS9tZW1vcnktZmFpbHVyZS5jXG5pbmRleCA1MTUwOGE1NWM0MDU1ZS4uNzNlYmJjOTM1NjYxODIgMTAwNjQ0XG4tLS0gYS9tbS9tZW1vcnktZmFpbHVyZS5jXG4rKysgYi9tbS9tZW1vcnktZmFpbHVyZS5jXG5AQCAtMTgxMCw1MCArMTgxMCw2NSBAQCBFWFBPUlRfU1lNQk9MX0dQTChtZl9kYXhfa2lsbF9wcm9jcyk7XG4gXG4gLypcbiAgKiBTdHJ1Y3QgcmF3X2h3cF9wYWdlIHJlcHJlc2VudHMgaW5mb3JtYXRpb24gYWJvdXQgXCJyYXcgZXJyb3IgcGFnZVwiLFxuLSAqIGNvbnN0cnVjdGluZyBzaW5nbHkgbGlua2VkIGxpc3QgZnJvbSAtXHUwMDNlX2h1Z2V0bGJfaHdwb2lzb24gZmllbGQgb2YgZm9saW8uXG4rICogY29uc3RydWN0aW5nIHNpbmdseSBsaW5rZWQgbGlzdCBmcm9tIGZvbGlvLVx1MDAzZWh1Z2V0bGJfaHdwb2lzb24gZmllbGQuXG4gICovXG4gc3RydWN0IHJhd19od3BfcGFnZSB7XG4gXHRzdHJ1Y3QgbGxpc3Rfbm9kZSBub2RlO1xuIFx0c3RydWN0IHBhZ2UgKnBhZ2U7XG4gfTtcbiBcbi1zdGF0aWMgaW5saW5lIHN0cnVjdCBsbGlzdF9oZWFkICpyYXdfaHdwX2xpc3RfaGVhZChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuK3N0YXRpYyBib29sIHByZWNpc2VfcGFnZV9wb2lzb25lZChjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuK1x0XHRjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSlcbiB7XG4tXHRyZXR1cm4gKHN0cnVjdCBsbGlzdF9oZWFkICopXHUwMDI2Zm9saW8tXHUwMDNlX2h1Z2V0bGJfaHdwb2lzb247XG4tfVxuLVxuLWJvb2wgaXNfcmF3X2h3cG9pc29uX3BhZ2VfaW5faHVnZXBhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UpXG4te1xuLVx0c3RydWN0IGxsaXN0X2hlYWQgKnJhd19od3BfaGVhZDtcbi1cdHN0cnVjdCByYXdfaHdwX3BhZ2UgKnA7XG4tXHRzdHJ1Y3QgZm9saW8gKmZvbGlvID0gcGFnZV9mb2xpbyhwYWdlKTtcbi1cdGJvb2wgcmV0ID0gZmFsc2U7XG4tXG4tXHRpZiAoIWZvbGlvX3Rlc3RfaHdwb2lzb24oZm9saW8pKVxuLVx0XHRyZXR1cm4gZmFsc2U7XG4tXG4tXHRpZiAoIWZvbGlvX3Rlc3RfaHVnZXRsYihmb2xpbykpXG4tXHRcdHJldHVybiBQYWdlSFdQb2lzb24ocGFnZSk7XG4rXHRjb25zdCBzdHJ1Y3QgbGxpc3RfaGVhZCAqbGlzdCA9IFx1MDAyNmZvbGlvLVx1MDAzZWh1Z2V0bGJfaHdwb2lzb247XG4rXHRjb25zdCBzdHJ1Y3QgcmF3X2h3cF9wYWdlICpwO1xuIFxuIFx0Lypcbi1cdCAqIFdoZW4gUmF3SHdwVW5yZWxpYWJsZSBpcyBzZXQsIGtlcm5lbCBsb3N0IHRyYWNrIG9mIHdoaWNoIHN1YnBhZ2VzXG4tXHQgKiBhcmUgSFdQT0lTT04uIFNvIHJldHVybiBhcyBpZiBBTEwgc3VicGFnZXMgYXJlIEhXUE9JU09OZWQuXG4rXHQgKiBXaGVuIFJhd0h3cFVucmVsaWFibGUgaXMgc2V0LCBrZXJuZWwgbG9zdCB0cmFjayBvZiB3aGljaCBwYWdlc1xuK1x0ICogYXJlIEhXUE9JU09OLiBTbyByZXR1cm4gYXMgaWYgQUxMIHBhZ2VzIGFyZSBIV1BPSVNPTmVkLlxuIFx0ICovXG4gXHRpZiAoZm9saW9fdGVzdF9odWdldGxiX3Jhd19od3BfdW5yZWxpYWJsZShmb2xpbykpXG4gXHRcdHJldHVybiB0cnVlO1xuIFxuLVx0bXV0ZXhfbG9jayhcdTAwMjZtZl9tdXRleCk7XG4tXG4tXHRyYXdfaHdwX2hlYWQgPSByYXdfaHdwX2xpc3RfaGVhZChmb2xpbyk7XG4tXHRsbGlzdF9mb3JfZWFjaF9lbnRyeShwLCByYXdfaHdwX2hlYWQtXHUwMDNlZmlyc3QsIG5vZGUpIHtcbi1cdFx0aWYgKHBhZ2UgPT0gcC1cdTAwM2VwYWdlKSB7XG4tXHRcdFx0cmV0ID0gdHJ1ZTtcbi1cdFx0XHRicmVhaztcbi1cdFx0fVxuK1x0bGxpc3RfZm9yX2VhY2hfZW50cnkocCwgUkVBRF9PTkNFKGxpc3QtXHUwMDNlZmlyc3QpLCBub2RlKSB7XG4rXHRcdGlmIChwYWdlID09IHAtXHUwMDNlcGFnZSlcbitcdFx0XHRyZXR1cm4gdHJ1ZTtcbiBcdH1cbiBcbi1cdG11dGV4X3VubG9jayhcdTAwMjZtZl9tdXRleCk7XG4rXHRyZXR1cm4gZmFsc2U7XG4rfVxuIFxuKy8qXG4rICogQ2hlY2sgaWYgYSBnaXZlbiBAcGFnZSBpbiBhIGh1Z2V0bGIgZm9saW8gaXMgSFdQT0lTT04uXG4rICovXG4rYm9vbCBodWdldGxiX3BhZ2VfaHdwb2lzb24oY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbywgY29uc3Qgc3RydWN0IHBhZ2UgKnBhZ2UpXG4re1xuK1x0aWYgKCFmb2xpb190ZXN0X2hhc19od3BvaXNvbmVkKGZvbGlvKSlcbitcdFx0cmV0dXJuIGZhbHNlO1xuK1xuK1x0cmV0dXJuIHByZWNpc2VfcGFnZV9wb2lzb25lZChmb2xpbywgcGFnZSk7XG4rfVxuK1xuKy8qXG4rICogV2UgaGF2ZSBubyByZWZlcmVuY2Ugb24gdGhlIGZvbGlvIGNvbnRhaW5pbmcgdGhpcyBwYWdlLlxuKyAqIFRoZSBodWdldGxiX2xvY2sga2VlcHMgaHVnZXRsYiBmb2xpb3MgZnJvbSBiZWluZyBmcmVlZC5cbisgKi9cbitib29sIGh1Z2V0bGJfdW5yZWZfcGFnZV9od3BvaXNvbihjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSlcbit7XG4rXHRjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvO1xuK1x0dW5zaWduZWQgbG9uZyBmbGFncztcbitcdGJvb2wgcmV0O1xuK1xuK1x0c3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2aHVnZXRsYl9sb2NrLCBmbGFncyk7XG4rXHRmb2xpbyA9IHBhZ2VfZm9saW8ocGFnZSk7XG4rXHRpZiAoIWZvbGlvX3Rlc3RfaHVnZV9wb2lzb24oZm9saW8pKSB7XG4rXHRcdHJldCA9IFBhZ2VIV1BvaXNvbihwYWdlKTtcbitcdFx0Z290byB1bmxvY2s7XG4rXHR9XG4rXG4rXHRyZXQgPSBwcmVjaXNlX3BhZ2VfcG9pc29uZWQoZm9saW8sIHBhZ2UpO1xuK3VubG9jazpcbitcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2aHVnZXRsYl9sb2NrLCBmbGFncyk7XG4gXHRyZXR1cm4gcmV0O1xuIH1cbiBcbkBAIC0xODYzLDcgKzE4NzgsNyBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBfX2ZvbGlvX2ZyZWVfcmF3X2h3cChzdHJ1Y3QgZm9saW8gKmZvbGlvLCBib29sIG1vdmVfZmxhZylcbiBcdHN0cnVjdCByYXdfaHdwX3BhZ2UgKnAsICpuZXh0O1xuIFx0dW5zaWduZWQgbG9uZyBjb3VudCA9IDA7XG4gXG4tXHRoZWFkID0gbGxpc3RfZGVsX2FsbChyYXdfaHdwX2xpc3RfaGVhZChmb2xpbykpO1xuK1x0aGVhZCA9IGxsaXN0X2RlbF9hbGwoXHUwMDI2Zm9saW8tXHUwMDNlaHVnZXRsYl9od3BvaXNvbik7XG4gXHRsbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHAsIG5leHQsIGhlYWQsIG5vZGUpIHtcbiBcdFx0aWYgKG1vdmVfZmxhZylcbiBcdFx0XHRTZXRQYWdlSFdQb2lzb24ocC1cdTAwM2VwYWdlKTtcbkBAIC0xODgxLDI2ICsxODk2LDQxIEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIF9fZm9saW9fZnJlZV9yYXdfaHdwKHN0cnVjdCBmb2xpbyAqZm9saW8sIGJvb2wgbW92ZV9mbGFnKVxuICNkZWZpbmVcdE1GX0hVR0VUTEJfRk9MSU9fUFJFX1BPSVNPTkVEXHQzXHQvKiBmb2xpbyBhbHJlYWR5IHBvaXNvbmVkICovXG4gI2RlZmluZVx0TUZfSFVHRVRMQl9QQUdFX1BSRV9QT0lTT05FRFx0NFx0LyogZXhhY3QgcGFnZSBhbHJlYWR5IHBvaXNvbmVkICovXG4gI2RlZmluZVx0TUZfSFVHRVRMQl9SRVRSWVx0XHQ1XHQvKiBodWdlcGFnZSBpcyBidXN5LCByZXRyeSAqL1xuK1xuK3N0YXRpYyBpbmxpbmUgaW50IGh1Z2V0bGJfc2V0X3BvaXNvbihzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuK3tcbitcdGlmIChmb2xpb190ZXN0X3NldF9oYXNfaHdwb2lzb25lZChmb2xpbykpXG4rXHRcdHJldHVybiBNRl9IVUdFVExCX0ZPTElPX1BSRV9QT0lTT05FRDtcbitcdGZvbGlvX3NldF9odWdlX3BvaXNvbihmb2xpbyk7XG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rc3RhdGljIGlubGluZSBpbnQgaHVnZXRsYl9jbGVhcl9wb2lzb24oc3RydWN0IGZvbGlvICpmb2xpbylcbit7XG4rXHRpZiAoIWZvbGlvX3Rlc3RfY2xlYXJfaGFzX2h3cG9pc29uZWQoZm9saW8pKVxuK1x0XHRyZXR1cm4gLUVCVVNZO1xuK1x0Zm9saW9fY2xlYXJfaHVnZV9wb2lzb24oZm9saW8pO1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuIC8qXG4gICogU2V0IGh1Z2V0bGIgZm9saW8gYXMgaHdwb2lzb25lZCwgdXBkYXRlIGZvbGlvIHByaXZhdGUgcmF3IGh3cG9pc29uIGxpc3RcbiAgKiB0byBrZWVwIHRyYWNrIG9mIHRoZSBwb2lzb25lZCBwYWdlcy5cbiAgKi9cbiBzdGF0aWMgaW50IGh1Z2V0bGJfdXBkYXRlX2h3cG9pc29uKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBwYWdlICpwYWdlKVxuIHtcbi1cdHN0cnVjdCBsbGlzdF9oZWFkICpoZWFkO1xuIFx0c3RydWN0IHJhd19od3BfcGFnZSAqcmF3X2h3cDtcbiBcdHN0cnVjdCByYXdfaHdwX3BhZ2UgKnA7XG4tXHRpbnQgcmV0ID0gZm9saW9fdGVzdF9zZXRfaHdwb2lzb24oZm9saW8pID8gTUZfSFVHRVRMQl9GT0xJT19QUkVfUE9JU09ORUQgOiAwO1xuK1x0aW50IHJldCA9IGh1Z2V0bGJfc2V0X3BvaXNvbihmb2xpbyk7XG4gXG4gXHQvKlxuIFx0ICogT25jZSB0aGUgaHdwb2lzb24gaHVnZXBhZ2UgaGFzIGxvc3QgcmVsaWFibGUgcmF3IGVycm9yIGluZm8sXG4tXHQgKiB0aGVyZSBpcyBsaXR0bGUgbWVhbmluZyB0byBrZWVwIGFkZGl0aW9uYWwgZXJyb3IgaW5mbyBwcmVjaXNlbHksXG4tXHQgKiBzbyBza2lwIHRvIGFkZCBhZGRpdGlvbmFsIHJhdyBlcnJvciBpbmZvLlxuK1x0ICogdGhlcmUgaXMgbm8gcG9pbnQgaW4ga2VlcGluZyBhZGRpdGlvbmFsIGVycm9yIGluZm8gcHJlY2lzZWx5LFxuK1x0ICogc28gc2tpcCBhZGRpbmcgYWRkaXRpb25hbCByYXcgZXJyb3IgaW5mby5cbiBcdCAqL1xuIFx0aWYgKGZvbGlvX3Rlc3RfaHVnZXRsYl9yYXdfaHdwX3VucmVsaWFibGUoZm9saW8pKVxuIFx0XHRyZXR1cm4gTUZfSFVHRVRMQl9GT0xJT19QUkVfUE9JU09ORUQ7XG4tXHRoZWFkID0gcmF3X2h3cF9saXN0X2hlYWQoZm9saW8pO1xuLVx0bGxpc3RfZm9yX2VhY2hfZW50cnkocCwgaGVhZC1cdTAwM2VmaXJzdCwgbm9kZSkge1xuK1x0bGxpc3RfZm9yX2VhY2hfZW50cnkocCwgZm9saW8tXHUwMDNlaHVnZXRsYl9od3BvaXNvbi5maXJzdCwgbm9kZSkge1xuIFx0XHRpZiAocC1cdTAwM2VwYWdlID09IHBhZ2UpXG4gXHRcdFx0cmV0dXJuIE1GX0hVR0VUTEJfUEFHRV9QUkVfUE9JU09ORUQ7XG4gXHR9XG5AQCAtMTkwOCw3ICsxOTM4LDcgQEAgc3RhdGljIGludCBodWdldGxiX3VwZGF0ZV9od3BvaXNvbihzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgcGFnZSAqcGFnZSlcbiBcdHJhd19od3AgPSBrbWFsbG9jX29iaihzdHJ1Y3QgcmF3X2h3cF9wYWdlLCBHRlBfQVRPTUlDKTtcbiBcdGlmIChyYXdfaHdwKSB7XG4gXHRcdHJhd19od3AtXHUwMDNlcGFnZSA9IHBhZ2U7XG4tXHRcdGxsaXN0X2FkZChcdTAwMjZyYXdfaHdwLVx1MDAzZW5vZGUsIGhlYWQpO1xuK1x0XHRsbGlzdF9hZGQoXHUwMDI2cmF3X2h3cC1cdTAwM2Vub2RlLCBcdTAwMjZmb2xpby1cdTAwM2VodWdldGxiX2h3cG9pc29uKTtcbiBcdH0gZWxzZSB7XG4gXHRcdC8qXG4gXHRcdCAqIEZhaWxlZCB0byBzYXZlIHJhdyBlcnJvciBpbmZvLiAgV2Ugbm8gbG9uZ2VyIHRyYWNlIGFsbFxuQEAgLTE5NTAsOCArMTk4MCw4IEBAIHZvaWQgZm9saW9fY2xlYXJfaHVnZXRsYl9od3BvaXNvbihzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIFx0XHRyZXR1cm47XG4gXHRpZiAoZm9saW9fdGVzdF9odWdldGxiX3ZtZW1tYXBfb3B0aW1pemVkKGZvbGlvKSlcbiBcdFx0cmV0dXJuO1xuLVx0Zm9saW9fY2xlYXJfaHdwb2lzb24oZm9saW8pO1xuIFx0Zm9saW9fZnJlZV9yYXdfaHdwKGZvbGlvLCB0cnVlKTtcbitcdGZvbGlvX2NsZWFyX2hhc19od3BvaXNvbmVkKGZvbGlvKTtcbiB9XG4gXG4gc3RhdGljIGludCBnZXRfaHVnZV9wYWdlX2Zvcl9od3BvaXNvbih1bnNpZ25lZCBsb25nIHBmbiwgaW50IGZsYWdzLFxuQEAgLTIxMDQsNiArMjEzNCwxMSBAQCBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgZm9saW9fZnJlZV9yYXdfaHdwKHN0cnVjdCBmb2xpbyAqZm9saW8sIGJvb2wgZmxhZylcbiB7XG4gXHRyZXR1cm4gMDtcbiB9XG4rXG4rc3RhdGljIGlubGluZSBpbnQgaHVnZXRsYl9jbGVhcl9wb2lzb24oc3RydWN0IGZvbGlvICpmb2xpbylcbit7XG4rXHRyZXR1cm4gMDtcbit9XG4gI2VuZGlmXHQvKiBDT05GSUdfSFVHRVRMQl9QQUdFICovXG4gXG4gLyogRHJvcCB0aGUgZXh0cmEgcmVmY291bnQgaW4gY2FzZSB3ZSBjb21lIGZyb20gbWFkdmlzZSgpICovXG5AQCAtMjY3Nyw3ICsyNzEyLDEyIEBAIGludCB1bnBvaXNvbl9tZW1vcnkodW5zaWduZWQgbG9uZyBwZm4pXG4gXHRwID0gcGZuX3RvX29ubGluZV9wYWdlKHBmbik7XG4gXHRpZiAoIXApXG4gXHRcdHJldHVybiAtRUlPO1xuLVx0Zm9saW8gPSBwYWdlX2ZvbGlvKHApO1xuK1xuK1x0aWYgKCFpc19wYWdlX2h3cG9pc29uKHApKSB7XG4rXHRcdHVucG9pc29uX3ByX2luZm8oXCIlI2x4OiBwYWdlIGlzIG5vdCBwb2lzb25lZFxcblwiLFxuK1x0XHRcdFx0IHBmbiwgXHUwMDI2dW5wb2lzb25fcnMpO1xuK1x0XHRyZXR1cm4gLUVCVVNZO1xuK1x0fVxuIFxuIFx0bXV0ZXhfbG9jayhcdTAwMjZtZl9tdXRleCk7XG4gXG5AQCAtMjY4OCw2ICsyNzI4LDggQEAgaW50IHVucG9pc29uX21lbW9yeSh1bnNpZ25lZCBsb25nIHBmbilcbiBcdFx0Z290byB1bmxvY2tfbXV0ZXg7XG4gXHR9XG4gXG4rXHRmb2xpbyA9IHBhZ2VfZm9saW8ocCk7XG4rXG4gXHRpZiAoaXNfaHVnZV96ZXJvX2ZvbGlvKGZvbGlvKSkge1xuIFx0XHR1bnBvaXNvbl9wcl9pbmZvKFwiJSNseDogaHVnZSB6ZXJvIHBhZ2UgaXMgbm90IHN1cHBvcnRlZFxcblwiLFxuIFx0XHRcdFx0IHBmbiwgXHUwMDI2dW5wb2lzb25fcnMpO1xuQEAgLTI2OTUsMTIgKzI3MzcsNiBAQCBpbnQgdW5wb2lzb25fbWVtb3J5KHVuc2lnbmVkIGxvbmcgcGZuKVxuIFx0XHRnb3RvIHVubG9ja19tdXRleDtcbiBcdH1cbiBcbi1cdGlmICghUGFnZUhXUG9pc29uKHApKSB7XG4tXHRcdHVucG9pc29uX3ByX2luZm8oXCIlI2x4OiBwYWdlIHdhcyBhbHJlYWR5IHVucG9pc29uZWRcXG5cIixcbi1cdFx0XHRcdCBwZm4sIFx1MDAyNnVucG9pc29uX3JzKTtcbi1cdFx0Z290byB1bmxvY2tfbXV0ZXg7XG4tXHR9XG4tXG4gXHRpZiAoZm9saW9fcmVmX2NvdW50KGZvbGlvKSBcdTAwM2UgMSkge1xuIFx0XHR1bnBvaXNvbl9wcl9pbmZvKFwiJSNseDogc29tZW9uZSBncmFicyB0aGUgaHdwb2lzb24gcGFnZVxcblwiLFxuIFx0XHRcdFx0IHBmbiwgXHUwMDI2dW5wb2lzb25fcnMpO1xuQEAgLTI3MzAsOCArMjc2Niw4IEBAIGludCB1bnBvaXNvbl9tZW1vcnkodW5zaWduZWQgbG9uZyBwZm4pXG4gXHRcdFx0Y291bnQgPSBmb2xpb19mcmVlX3Jhd19od3AoZm9saW8sIGZhbHNlKTtcbiBcdFx0XHRpZiAoY291bnQgPT0gMClcbiBcdFx0XHRcdGdvdG8gdW5sb2NrX211dGV4O1xuK1x0XHRcdHJldCA9IGh1Z2V0bGJfY2xlYXJfcG9pc29uKGZvbGlvKTtcbiBcdFx0fVxuLVx0XHRyZXQgPSBmb2xpb190ZXN0X2NsZWFyX2h3cG9pc29uKGZvbGlvKSA/IDAgOiAtRUJVU1k7XG4gXHR9IGVsc2UgaWYgKGdocCBcdTAwM2MgMCkge1xuIFx0XHRpZiAoZ2hwID09IC1FSFdQT0lTT04pIHtcbiBcdFx0XHRyZXQgPSBwdXRfcGFnZV9iYWNrX2J1ZGR5KHApID8gMCA6IC1FQlVTWTtcbkBAIC0yNzQwLDE2ICsyNzc2LDE4IEBAIGludCB1bnBvaXNvbl9tZW1vcnkodW5zaWduZWQgbG9uZyBwZm4pXG4gXHRcdFx0dW5wb2lzb25fcHJfaW5mbyhcIiUjbHg6IGZhaWxlZCB0byBncmFiIHBhZ2VcXG5cIixcbiBcdFx0XHRcdFx0IHBmbiwgXHUwMDI2dW5wb2lzb25fcnMpO1xuIFx0XHR9XG4tXHR9IGVsc2Uge1xuLVx0XHRpZiAoZm9saW9fdGVzdF9odWdldGxiKGZvbGlvKSkge1xuLVx0XHRcdGh1Z2UgPSB0cnVlO1xuLVx0XHRcdGNvdW50ID0gZm9saW9fZnJlZV9yYXdfaHdwKGZvbGlvLCBmYWxzZSk7XG4tXHRcdFx0aWYgKGNvdW50ID09IDApIHtcbi1cdFx0XHRcdGZvbGlvX3B1dChmb2xpbyk7XG4tXHRcdFx0XHRnb3RvIHVubG9ja19tdXRleDtcbi1cdFx0XHR9XG4rXHR9IGVsc2UgaWYgKGZvbGlvX3Rlc3RfaHVnZXRsYihmb2xpbykpIHtcbitcdFx0aHVnZSA9IHRydWU7XG4rXHRcdGNvdW50ID0gZm9saW9fZnJlZV9yYXdfaHdwKGZvbGlvLCBmYWxzZSk7XG4rXHRcdGlmIChjb3VudCA9PSAwKSB7XG4rXHRcdFx0Zm9saW9fcHV0KGZvbGlvKTtcbitcdFx0XHRnb3RvIHVubG9ja19tdXRleDtcbiBcdFx0fVxuLVxuK1x0XHRmb2xpb19wdXQoZm9saW8pO1xuK1x0XHRyZXQgPSBodWdldGxiX2NsZWFyX3BvaXNvbihmb2xpbyk7XG4rXHRcdGlmICghcmV0KVxuK1x0XHRcdGZvbGlvX3B1dChmb2xpbyk7XG4rXHR9IGVsc2Uge1xuIFx0XHRmb2xpb19wdXQoZm9saW8pO1xuIFx0XHRpZiAoVGVzdENsZWFyUGFnZUhXUG9pc29uKHApKSB7XG4gXHRcdFx0Zm9saW9fcHV0KGZvbGlvKTtcbmRpZmYgLS1naXQgYS9tbS9tZW1vcnlfaG90cGx1Zy5jIGIvbW0vbWVtb3J5X2hvdHBsdWcuY1xuaW5kZXggN2FjMTlmYWIyMjYzMjQuLjMzMDA3ZThlNTQ2YTA5IDEwMDY0NFxuLS0tIGEvbW0vbWVtb3J5X2hvdHBsdWcuY1xuKysrIGIvbW0vbWVtb3J5X2hvdHBsdWcuY1xuQEAgLTE4MTMsNyArMTgxMyw3IEBAIHN0YXRpYyB2b2lkIGRvX21pZ3JhdGVfcmFuZ2UodW5zaWduZWQgbG9uZyBzdGFydF9wZm4sIHVuc2lnbmVkIGxvbmcgZW5kX3BmbilcbiBcdFx0aWYgKGZvbGlvX3Rlc3RfbGFyZ2UoZm9saW8pKVxuIFx0XHRcdHBmbiA9IGZvbGlvX3Bmbihmb2xpbykgKyBmb2xpb19ucl9wYWdlcyhmb2xpbykgLSAxO1xuIFxuLVx0XHRpZiAoZm9saW9fY29udGFpbl9od3BvaXNvbmVkX3BhZ2UoZm9saW8pKSB7XG4rXHRcdGlmIChmb2xpb19oYXNfaHdwb2lzb25lZF9wYWdlKGZvbGlvKSkge1xuIFx0XHRcdC8qXG4gXHRcdFx0ICogdW5tYXBfcG9pc29uZWRfZm9saW8oKSBjYW5ub3QgaGFuZGxlIGxhcmdlIGZvbGlvc1xuIFx0XHRcdCAqIGluIGFsbCBjYXNlcyB5ZXQuXG5kaWZmIC0tZ2l0IGEvbW0vc2htZW0uYyBiL21tL3NobWVtLmNcbmluZGV4IGI1MWY4M2M5NzBiYjM3Li40OTJjOWJlZjM2MjA3NCAxMDA2NDRcbi0tLSBhL21tL3NobWVtLmNcbisrKyBiL21tL3NobWVtLmNcbkBAIC0zMjQwLDcgKzMyNDAsNyBAQCBzaG1lbV93cml0ZV9iZWdpbihjb25zdCBzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxuIFx0aWYgKHJldClcbiBcdFx0cmV0dXJuIHJldDtcbiBcbi1cdGlmIChmb2xpb19jb250YWluX2h3cG9pc29uZWRfcGFnZShmb2xpbykpIHtcbitcdGlmIChmb2xpb19oYXNfaHdwb2lzb25lZF9wYWdlKGZvbGlvKSkge1xuIFx0XHRmb2xpb191bmxvY2soZm9saW8pO1xuIFx0XHRmb2xpb19wdXQoZm9saW8pO1xuIFx0XHRyZXR1cm4gLUVJTztcbmRpZmYgLS1naXQgYS9tbS92bXNjYW4uYyBiL21tL3Ztc2Nhbi5jXG5pbmRleCAzNWMzYmIxNWFlOTZhMy4uNzBlNTRhY2UwZTc0MWMgMTAwNjQ0XG4tLS0gYS9tbS92bXNjYW4uY1xuKysrIGIvbW0vdm1zY2FuLmNcbkBAIC0xMDg2LDcgKzEwODYsNyBAQCBzdGF0aWMgdW5zaWduZWQgaW50IHNocmlua19mb2xpb19saXN0KHN0cnVjdCBsaXN0X2hlYWQgKmZvbGlvX2xpc3QsXG4gXHRcdGlmICghZm9saW9fdHJ5bG9jayhmb2xpbykpXG4gXHRcdFx0Z290byBrZWVwO1xuIFxuLVx0XHRpZiAoZm9saW9fY29udGFpbl9od3BvaXNvbmVkX3BhZ2UoZm9saW8pKSB7XG4rXHRcdGlmIChmb2xpb19oYXNfaHdwb2lzb25lZF9wYWdlKGZvbGlvKSkge1xuIFx0XHRcdC8qXG4gXHRcdFx0ICogdW5tYXBfcG9pc29uZWRfZm9saW8oKSBjYW4ndCBoYW5kbGUgbGFyZ2VcbiBcdFx0XHQgKiBmb2xpbywganVzdCBza2lwIGl0LiBtZW1vcnlfZmFpbHVyZSgpIHdpbGxcbmRpZmYgLS1naXQgYS92aXJ0L2t2bS9ndWVzdF9tZW1mZC5jIGIvdmlydC9rdm0vZ3Vlc3RfbWVtZmQuY1xuaW5kZXggZGI1N2M1NzY2YWI2MDQuLjk0ZWVkY2M3ZjFhOWUwIDEwMDY0NFxuLS0tIGEvdmlydC9rdm0vZ3Vlc3RfbWVtZmQuY1xuKysrIGIvdmlydC9rdm0vZ3Vlc3RfbWVtZmQuY1xuQEAgLTc3NCw3ICs3NzQsNyBAQCBzdGF0aWMgc3RydWN0IGZvbGlvICpfX2t2bV9nbWVtX2dldF9wZm4oc3RydWN0IGZpbGUgKmZpbGUsXG4gXHRpZiAoSVNfRVJSKGZvbGlvKSlcbiBcdFx0cmV0dXJuIGZvbGlvO1xuIFxuLVx0aWYgKGZvbGlvX3Rlc3RfaHdwb2lzb24oZm9saW8pKSB7XG4rXHRpZiAoZm9saW9faGFzX2h3cG9pc29uZWRfcGFnZShmb2xpbykpIHtcbiBcdFx0Zm9saW9fdW5sb2NrKGZvbGlvKTtcbiBcdFx0Zm9saW9fcHV0KGZvbGlvKTtcbiBcdFx0cmV0dXJuIEVSUl9QVFIoLUVIV1BPSVNPTik7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNFQxODo0NjoxOS43NDg2MjE3MTVaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMDY4NDYzNzk2MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIFN0cmF0ZWd5IGZvciBUaGlzIEtlcm5lbCBQYXRjaCoqXG5cbk9rYXksIHNvIEkndmUgZ290IHRoaXMgcGF0Y2ggc2VyaWVzIGluIGZyb250IG9mIG1lLCBhbmQgbXkgaW1tZWRpYXRlIGNvbmNlcm4gaXMgd2hldGhlciBpdCBpbnRyb2R1Y2VzIG5ldyBmdW5jdGlvbmFsaXR5IG9yIG1vZGlmaWVzIGV4aXN0aW5nIGNvZGUgaW4gYSB3YXkgdGhhdCB3YXJyYW50cyB0YXJnZXRlZCBmdXp6aW5nLiBJdCdzIGNsZWFybHkgdG91Y2hpbmcgYSBzaWduaWZpY2FudCBjaHVuayBvZiB0aGUga2VybmVsOiBgZnMvaHVnZXRsYmZzL2lub2RlLmNgLCB2YXJpb3VzIGluY2x1ZGUgZmlsZXMgcmVsYXRlZCB0byBtZW1vcnkgbWFuYWdlbWVudCwgYW5kIHNldmVyYWwgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBmaWxlcyAoYG1tL0tjb25maWdgLCBgbW0vZmlsZW1hcC5jYCwgZXRjLikuIExvb2tzIGxpa2UgdGhlIG1haW4gZm9jdXMgaXMgYXJvdW5kIGhhbmRsaW5nIEhXUE9JU09OIChoYXJkd2FyZS1pbmplY3RlZCBwb2lzb24pIHdpdGhpbiBsYXJnZSBmb2xpb3MsIHNwZWNpZmljYWxseSBpbiBodWdldGxiZnMgYW5kIGZpbGVtYXAuXG5cblRoZSBtYWpvciBjaGFuZ2VzIGFyZSByZXBsYWNpbmcgYGh1Z2V0bGJmc19yZWFkX2l0ZXJgIHdpdGggYGdlbmVyaWNfZmlsZV9yZWFkX2l0ZXJgLCBtb2RpZnlpbmcgYGZpbGVtYXBfcmVhZGAgdG8gYWNjb3VudCBmb3IgaHdwb2lzb25lZCBwYWdlcyBieSBhZGRpbmcgYGFkanVzdF9yYW5nZV9od3BvaXNvbmAsIGFuZCBjaGFuZ2luZyBob3cgSFdQT0lTT04gaXMgdHJhY2tlZCB3aXRoaW4gZm9saW9zIHVzaW5nIGBmb2xpby1cdTAwM2VodWdldGxiX2h3cG9pc29uYC4gVGhlcmUgYXJlIGFsc28gc29tZSBuZXcgZnVuY3Rpb25zIGludHJvZHVjZWQ6IGBmb2xpb19oYXNfaHdwb2lzb25lZF9wYWdlYCBhbmQgYGlzX3JlZl9wYWdlX2h3cG9pc29uYC5cblxuTm93LCB0aGUgY3J1Y2lhbCBxdWVzdGlvbiBpcywgaXMgdGhpcyBjb2RlIHJlYWNoYWJsZSBhbmQgZnVuY3Rpb25hbD8gWWVzLCBpdCdzIG1vZGlmeWluZyBmdW5kYW1lbnRhbCBtZW1vcnkgbWFuYWdlbWVudCBhbmQgaG93IGh1Z2V0bGJmcyByZWFkIG9wZXJhdGlvbnMgd29yaywgc28gd2UgbmVlZCB0byB0ZXN0IHRoaXMuIEFuZCB3aGF0IGFib3V0IHZpcnR1YWxpemF0aW9uPyBXZSBjYW4gdHJpZ2dlciBIV1BPSVNPTiB2aWEgYG1hZHZpc2UoTUFEVl9IV1BPSVNPTilgIG9yIHRocm91Z2ggZGVidWdmcywgc28gd2UgY2FuIHRlc3QgaXQgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudC5cblxuTm93LCBsZXQncyBuYWlsIGRvd24gd2hhdCBmdW5jdGlvbnMgdG8gZm9jdXMgb24gZm9yIGZ1enppbmcuIGBmaWxlbWFwX3JlYWRgIGlzIGEgaG90LXBhdGggZnVuY3Rpb24sIHNvIGl0J3MgYSBnb29kIGNhbmRpZGF0ZSwgYnV0IGBhZGp1c3RfcmFuZ2VfaHdwb2lzb25gIGlzIG5ldyBhbmQgc3BlY2lmaWMgdG8gdGhpcyBwYXRjaC4gV2FpdCBhIHNlY29uZCwgaXQncyBhIHN0YXRpYyBmdW5jdGlvbiBpbiBgbW0vZmlsZW1hcC5jYC4gVGhhdCBsaW1pdHMgaXRzIGRpcmVjdCBjYWxsIHNpdGVzLiBTbywgd2UncmUgYmV0dGVyIG9mZiBmb2N1c2luZyBvbiB0aGUgZW50cnkgcG9pbnRzOiBgaHVnZXRsYl91cGRhdGVfaHdwb2lzb25gLCBgaHVnZXRsYl9wYWdlX2h3cG9pc29uYCwgYGh1Z2V0bGJfdW5yZWZfcGFnZV9od3BvaXNvbmAsIGB1bnBvaXNvbl9tZW1vcnlgLCBhbmQgYGZvbGlvX2NsZWFyX2h1Z2V0bGJfaHdwb2lzb25gLiBBbHRob3VnaCBgZmlsZW1hcF9nZXRfcmVhZF9iYXRjaGAgYW5kIGBmaWxlbWFwX2dldF9wYWdlc2AgYXJlIGFsc28gbW9kaWZpZWQsIHRoZXNlIGFyZSBob3QgcGF0aHMsIHNvIG5vdCBoaWdoIHByaW9yaXR5LlxuXG5TaW5jZSBgYWRqdXN0X3JhbmdlX2h3cG9pc29uYCBpcyBzdGF0aWMsIGxldCdzIGNvbmZpcm0gdGhpcyBieSBjaGVja2luZyB0aGUgY29kZS4gWWVzLCBpdCBpcyBzdGF0aWMuIE9rYXksIGxldCdzIG1vdmUgYmFjayB0byB0aGUgcHJldmlvdXNseSBtZW50aW9uZWQgZnVuY3Rpb25zOiBgaHVnZXRsYl91cGRhdGVfaHdwb2lzb25gLCBgaHVnZXRsYl9wYWdlX2h3cG9pc29uYCwgYGh1Z2V0bGJfdW5yZWZfcGFnZV9od3BvaXNvbmAsIGFuZCBgdW5wb2lzb25fbWVtb3J5YC4gV2Ugc2hvdWxkIGFsc28gaW5jbHVkZSB0aGUgYGZvbGlvX2NsZWFyX2h1Z2V0bGJfaHdwb2lzb25gIGZ1bmN0aW9uLlxuXG5GaW5hbGx5LCB3ZSBuZWVkIHRvIHRoaW5rIGFib3V0IGNvbmZpZ3VyYXRpb25zLiBgQ09ORklHX01FTU9SWV9GQUlMVVJFYCBpcyBjbGVhcmx5IHJlcXVpcmVkIGZvciBIV1BPSVNPTi4gYENPTkZJR19IVUdFVExCRlNgIGFuZCBgQ09ORklHX0hVR0VUTEJfUEFHRWAgYXJlIG5lY2Vzc2FyeSBmb3IgdGhlIGh1Z2V0bGJmcyBiaXRzLiBgQ09ORklHX0xBUkdFX0ZPTElPYCBpcyBhIGdpdmVuLCBhcyBpdCdzIHNlbGVjdGVkIGJ5IGBIVUdFVExCX1BBR0VgIGFuZCBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgLiBBaCwgYnV0IEkgbmVlZCB0byBiZSBzdXJlIGFib3V0IGBDT05GSUdfRklMRU1BUF9MQVJHRV9GT0xJT2AuIEl0J3MgdXNlZCBpbnN0ZWFkIG9mIGBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VgLCBhbmQgdGhhdCdzIGNyaXRpY2FsLiBMZXQgbWUgY2hlY2sgdGhlIGtlcm5lbCBjb25maWcgZm9yIGBDT05GSUdfRklMRU1BUF9MQVJHRV9GT0xJT2AuIEknbGwgZ3JlcCBmb3IgdGhhdCBxdWlja2x5IHRvIG1ha2Ugc3VyZSBpdCBleGlzdHMgYW5kIHRoYXQgSSB1bmRlcnN0YW5kIHdoZXJlIGl0J3MgZGVmaW5lZC5cblxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDczNCwiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjgwMCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI0VDE4OjQ2OjMwLjQzMzI2MjYyNVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNzM5MDExMjQyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkZJTEVNQVBfTEFSR0VfRk9MSU9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9wYWdlbWFwLmg9Mzc1PXN0YXRpYyBpbmxpbmUgdm9pZCBtYXBwaW5nX3NldF9nZnBfbWFzayhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbSwgZ2ZwX3QgbWFzaylcXG4tLVxcbmluY2x1ZGUvbGludXgvcGFnZW1hcC5oLTM4Ni0gKi9cXG5pbmNsdWRlL2xpbnV4L3BhZ2VtYXAuaDozODc6I2lmZGVmIENPTkZJR19GSUxFTUFQX0xBUkdFX0ZPTElPXFxuaW5jbHVkZS9saW51eC9wYWdlbWFwLmgtMzg4LSNkZWZpbmUgUFJFRkVSUkVEX01BWF9QQUdFQ0FDSEVfT1JERVJcXHRIUEFHRV9QTURfT1JERVJcXG4tLVxcbmluY2x1ZGUvbGludXgvcGFnZW1hcC5oPTQwNj1zdGF0aWMgaW5saW5lIHNpemVfdCBtYXBwaW5nX21heF9mb2xpb19zaXplX3N1cHBvcnRlZCh2b2lkKVxcbmluY2x1ZGUvbGludXgvcGFnZW1hcC5oLTQwNy17XFxuaW5jbHVkZS9saW51eC9wYWdlbWFwLmg6NDA4OlxcdGlmIChJU19FTkFCTEVEKENPTkZJR19GSUxFTUFQX0xBUkdFX0ZPTElPKSlcXG5pbmNsdWRlL2xpbnV4L3BhZ2VtYXAuaC00MDktXFx0XFx0cmV0dXJuIDFVIFxcdTAwM2NcXHUwMDNjIChQQUdFX1NISUZUICsgTUFYX1BBR0VDQUNIRV9PUkRFUik7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L3BhZ2VtYXAuaD00MzE9c3RhdGljIGlubGluZSB2b2lkIG1hcHBpbmdfc2V0X2ZvbGlvX29yZGVyX3JhbmdlKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxcbi0tXFxuaW5jbHVkZS9saW51eC9wYWdlbWFwLmgtNDMzLXtcXG5pbmNsdWRlL2xpbnV4L3BhZ2VtYXAuaDo0MzQ6XFx0aWYgKCFJU19FTkFCTEVEKENPTkZJR19GSUxFTUFQX0xBUkdFX0ZPTElPKSlcXG5pbmNsdWRlL2xpbnV4L3BhZ2VtYXAuaC00MzUtXFx0XFx0cmV0dXJuO1xcbi0tXFxuaW5jbHVkZS9saW51eC9wYWdlbWFwLmg9NDY2PW1hcHBpbmdfbWF4X2ZvbGlvX29yZGVyKGNvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nKVxcbmluY2x1ZGUvbGludXgvcGFnZW1hcC5oLTQ2Ny17XFxuaW5jbHVkZS9saW51eC9wYWdlbWFwLmg6NDY4OlxcdGlmICghSVNfRU5BQkxFRChDT05GSUdfRklMRU1BUF9MQVJHRV9GT0xJTykpXFxuaW5jbHVkZS9saW51eC9wYWdlbWFwLmgtNDY5LVxcdFxcdHJldHVybiAwO1xcbi0tXFxuaW5jbHVkZS9saW51eC9wYWdlbWFwLmg9NDc0PW1hcHBpbmdfbWluX2ZvbGlvX29yZGVyKGNvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nKVxcbmluY2x1ZGUvbGludXgvcGFnZW1hcC5oLTQ3NS17XFxuaW5jbHVkZS9saW51eC9wYWdlbWFwLmg6NDc2OlxcdGlmICghSVNfRU5BQkxFRChDT05GSUdfRklMRU1BUF9MQVJHRV9GT0xJTykpXFxuaW5jbHVkZS9saW51eC9wYWdlbWFwLmgtNDc3LVxcdFxcdHJldHVybiAwO1xcbi0tXFxuaW5jbHVkZS9saW51eC9wYWdlbWFwLmg9NTEyPXN0YXRpYyBpbmxpbmUgYm9vbCBtYXBwaW5nX2xhcmdlX2ZvbGlvX3N1cHBvcnQoY29uc3Qgc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3BhZ2VtYXAuaC01MzEtICovXFxuaW5jbHVkZS9saW51eC9wYWdlbWFwLmg6NTMyOiNpZmRlZiBDT05GSUdfRklMRU1BUF9MQVJHRV9GT0xJT1xcbmluY2x1ZGUvbGludXgvcGFnZW1hcC5oLTUzMy1zdGF0aWMgaW5saW5lIGJvb2wgbWFwcGluZ19wbWRfZm9saW9fc3VwcG9ydChjb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZylcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjRUMTg6NDY6MzMuMTcyMjc5NjY3WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzE3NTA2OTM2MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3M6XG5cbioqSW52ZXN0aWdhdGluZyB0aGUgTWlzc2luZyBEZWZpbml0aW9uKipcblxuSG1tLCBgQ09ORklHX0ZJTEVNQVBfTEFSR0VfRk9MSU9gLi4uIEl0J3MgbG9va2luZyBsaWtlIHRoaXMgc3ltYm9sIGlzbid0IGRlZmluZWQgd2hlcmUgSSBleHBlY3RlZCBpdCB0byBiZSwgb3IgcGVyaGFwcyBpdCdzIHNpbXBseSBub3QgcHJlc2VudCBpbiB0aGlzIHBhcnRpY3VsYXIgcGF0Y2guIEJlZm9yZSBJIGp1bXAgdG8gY29uY2x1c2lvbnMsIEkgbmVlZCB0byB2ZXJpZnkgaXRzIGF2YWlsYWJpbGl0eS4gUmlnaHQsIHRoZSBzdGFuZGFyZCBwbGFjZXMgdG8gY2hlY2sgZm9yIHRoZXNlIHNvcnRzIG9mIGNvbmZpZ3VyYXRpb25zIGFyZSB0aGUga2VybmVsJ3MgS2NvbmZpZyBmaWxlcy4gU3BlY2lmaWNhbGx5LCBJIHNob3VsZCBsb29rIGluIGBtbS9LY29uZmlnYCwgYXMgaXQgc2VlbXMgbWVtb3J5IG1hbmFnZW1lbnQgcmVsYXRlZCwgYW5kIGFsc28gY29uc2lkZXIgYGZzL0tjb25maWdgIHNpbmNlIGl0J3MgYWJvdXQgZmlsZSBzeXN0ZW1zLiBMZXQncyBzdGFydCB0aGVyZSBhbmQgc2VlIGlmIEkgY2FuIGZpbmQgd2hlcmUgYEZJTEVNQVBfTEFSR0VfRk9MSU9gIGlzIGNvbnRyb2xsZWQuIEkgbmVlZCB0byBrbm93ICp3aHkqIGl0IGlzIG9yIGlzbid0IGF2YWlsYWJsZSBiZWZvcmUgSSBjYW4gcHJvY2VlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTY5ODksIk91dHB1dFRva2VucyI6MjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNFQxODo0NjozNi4zNDczNTEyNjlaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjExODU0MDU3NywiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEZJTEVNQVBfTEFSR0VfRk9MSU9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI0VDE4OjQ2OjM4LjQ2NTkwMTQyN1oiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI5OTE1Mjc0MzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIHNlZS4uLlxuXG4qKkNoZWNraW5nIHRoZSBLY29uZmlnIGZvciBgTEFSR0VfRk9MSU9gKipcblxuQWxyaWdodCwgbXkgZmlyc3QgdGhvdWdodCBpcyB0byBkaWcgaW50byB0aGUgYG1tL0tjb25maWdgIGZpbGUuIEknbSBnb2luZyB0byBxdWlja2x5IGNoZWNrIGlmIGBMQVJHRV9GT0xJT2AgaXMgZGVmaW5lZCB0aGVyZS4gVGhhdCdzIHRoZSBsb2dpY2FsIHN0YXJ0aW5nIHBvaW50IGZvciB1bmRlcnN0YW5kaW5nIGhvdyB0aGlzIGZlYXR1cmUgaXMgY29uZmlndXJlZCB3aXRoaW4gdGhlIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbS4gSSBuZWVkIHRvIHNlZSB0aGUgZGVwZW5kZW5jaWVzLCBoZWxwIHRleHQsIGFuZCBkZWZhdWx0IHNldHRpbmdzIC0gYWxsIHRoZSB1c3VhbCBLY29uZmlnIGdvb2RpZXMuIFRoaXMgaW5pdGlhbCBjaGVjayB3aWxsIGdpdmUgbWUgYSBnb29kIGxheSBvZiB0aGUgbGFuZCBhbmQgcG9pbnQgbWUgaW4gdGhlIHJpZ2h0IGRpcmVjdGlvbi4gTm8gcG9pbnQgaW4gd2FuZGVyaW5nIGFpbWxlc3NseTsgbGV0J3MgZ2V0IGEgYmFzZWxpbmUgdW5kZXJzdGFuZGluZyBvZiBgTEFSR0VfRk9MSU9gIGZyb20gdGhlIHNvdXJjZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTcyNjYsIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNFQxODo0Njo0MS40NTc0MzEwNjVaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTkwNzMwMzg5NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTEFSR0VfRk9MSU9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vS2NvbmZpZz04NDM9Y29uZmlnIE1NX0lEXFxuLS1cXG5tbS9LY29uZmlnLTg0NS1cXG5tbS9LY29uZmlnOjg0Njpjb25maWcgTEFSR0VfRk9MSU9cXG5tbS9LY29uZmlnLTg0Ny1cXHRkZWZfYm9vbCBuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI0VDE4OjQ2OjQzLjM2NDc0MTk1MloiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyMTcwNTQzNzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIGRlbGl2ZXJlZCBhcyBhIGZpcnN0LXBlcnNvbiBzdW1tYXJ5OlxuXG4qKktlcm5lbCBNZW1vcnkgTWFuYWdlbWVudCBDb25zaWRlcmF0aW9ucyoqXG5cbk9rYXksIHNvIEkgc2VlIHRoYXQgdGhlIGBMQVJHRV9GT0xJT2Agb3B0aW9uIGhhcyBiZWVuIGludHJvZHVjZWQgd2l0aGluIHRoZSBgbW0vS2NvbmZpZ2AgZmlsZS4gVGhhdCdzIGdvb2QsIHRoYXQncyB3aGF0IEkgd2FzIGV4cGVjdGluZyB0byBmaW5kLiBCdXQgd2FpdCwgYSBsaXR0bGUgZmxhZyBqdXN0IHdlbnQgb2ZmIGluIG15IGhlYWQuIFdoZW5ldmVyIEkgc2VlIHRoZXNlIG1lbW9yeSBtYW5hZ2VtZW50IGFkZGl0aW9ucywgbXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgKmFsd2F5cyogYWJvdXQgaG93IGl0IGludGVyYWN0cyB3aXRoIGVycm9yIGhhbmRsaW5nLiBTcGVjaWZpY2FsbHksIGhvdyBkb2VzIHRoaXMgaW50ZXJwbGF5IHdpdGggYE1FTU9SWV9GQUlMVVJFYD8gSXQncyBhIGNyaXRpY2FsIGNvbXBvbmVudCBpbiBlbnN1cmluZyBzeXN0ZW0gc3RhYmlsaXR5IHdoZW4gdGhpbmdzIGdvIHNpZGV3YXlzIHdpdGggbWVtb3J5IGFsbG9jYXRpb24sIGFuZCBJIG5lZWQgdG8gY29uc2lkZXIgaG93IHRoaXMgbmV3IGZlYXR1cmUgaW50ZWdyYXRlcyB3aXRoIHRob3NlIGV4aXN0aW5nIHNhZmVndWFyZHMuIElzIHRoZXJlIGV4cGxpY2l0IGhhbmRsaW5nIG9mIGBMQVJHRV9GT0xJT2AgYWxsb2NhdGlvbiBmYWlsdXJlcywgb3IgZG9lcyBpdCBmYWxsIGJhY2sgdG8gc29tZSBnZW5lcmljIHN0cmF0ZWd5PyBJIG5lZWQgdG8gY2hlY2sgdGhlIEtjb25maWcncyBzdXJyb3VuZGluZyBjb2RlIGFuZCB0aGUgdXNhZ2UgcGF0dGVybnMgdG8gbWFrZSBzdXJlIHRoaXMgZG9lc24ndCBpbnRyb2R1Y2UgYW55IHN1YnRsZSByZWdyZXNzaW9ucyBvciBibGluZCBzcG90cyBpbiB0aGUgbWVtb3J5IGZhaWx1cmUgaGFuZGxpbmcgcGF0aC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTc1MTUsIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNFQxODo0Njo0Ni41ODE3OTkwM1oiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTg3MjY3OTczMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTUVNT1JZX0ZBSUxVUkVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vS2NvbmZpZz03NzQ9Y29uZmlnIEFSQ0hfU1VQUE9SVFNfTUVNT1JZX0ZBSUxVUkVcXG4tLVxcbm1tL0tjb25maWctNzc2LVxcbm1tL0tjb25maWc6Nzc3OmNvbmZpZyBNRU1PUllfRkFJTFVSRVxcbm1tL0tjb25maWctNzc4LVxcdGRlcGVuZHMgb24gTU1VXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI0VDE4OjQ2OjQ4LjQ1NDQ4OTA3WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM1NzY1MjgwMDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgcHJlc2VudGVkIGFzIG15IG93biBtZW50YWwgcHJvY2VzcywgZ2l2ZW4gbXkgZXhwZXJ0aXNlOlxuXG4qKkNoZWNraW5nIEhhcmR3YXJlIFBvaXNvbiBDb25maWd1cmF0aW9uKipcblxuQWxyaWdodCwgbGV0IG1lIHF1aWNrbHkgcGFyc2UgdGhpcy4gYE1FTU9SWV9GQUlMVVJFYCAtIGFoIHllcywgdGhhdCdzIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbiB3ZSB1c2UgdG8gZW5hYmxlIGhhcmR3YXJlIHBvaXNvbiBoYW5kbGluZy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGUgc3lzdGVtIGlzIGJlaGF2aW5nIGFzIGV4cGVjdGVkIHdpdGggcmVzcGVjdCB0byB0aGF0LiBNeSBuZXh0IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIGNoZWNrIHJlbGF0ZWQgbWVtb3J5IGZlYXR1cmVzLiBNeSBleHBlcnRpc2UgaXMgdGhhdCB0aGUgc3lzdGVtJ3MgcmVhY3Rpb24gdG8gaGFyZHdhcmUgZXJyb3JzIGlzIGltcGFjdGVkIGJ5IHNldmVyYWwgY29uZmlndXJhdGlvbiBhbmQgcnVudGltZSBvcHRpb25zLiBUaHVzIEknbGwgbm93IHF1aWNrbHkgZHJpbGwgZG93biBvbiBgSFVHRVRMQkZTYCBhbmQgYEhVR0VUTEJfUEFHRWAuIEkgd2FudCB0byBpbW1lZGlhdGVseSB1bmRlcnN0YW5kIHRoZSBpbnRlcmFjdGlvbiBiZXR3ZWVuIHRob3NlIHNldHRpbmdzIGFuZCBob3cgaGFyZHdhcmUgZXJyb3JzIGFyZSBoYW5kbGVkIGluIHRoaXMgcGFydGljdWxhciBjb25maWd1cmF0aW9uLiBFc3NlbnRpYWxseSwgSSdtIHRyeWluZyB0byBxdWlja2x5IGVzdGFibGlzaCBhIGJhc2VsaW5lIG9yIHBpbnBvaW50IGFueSBwb3RlbnRpYWwgY29uZmxpY3RzIG9yIGFyZWFzIHRoYXQgcmVxdWlyZSBzcGVjaWFsIGF0dGVudGlvbiByZWxhdGVkIHRvIGhvdyBsYXJnZSBwYWdlcywgYW5kIHRoZSBsYXJnZSBwYWdlIGZpbGUgc3lzdGVtLCBhcmUgaW52b2x2ZWQgaW4gbWVtb3J5IGVycm9yIGhhbmRsaW5nLiBUaGUgZmlyc3Qgc3RlcCB3aWxsIGJlIGNoZWNraW5nIHRoZWlyIHN0YXRlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTc4NTQsIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNFQxODo0Njo1Mi4wMzEwMTk3MjVaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzOTI1NDA5NTMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEhVR0VUTEJGU1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9LY29uZmlnPTI0Nz1jb25maWcgQVJDSF9TVVBQT1JUU19IVUdFVExCRlNcXG4tLVxcbmZzL0tjb25maWctMjQ5LVxcbmZzL0tjb25maWc6MjUwOm1lbnVjb25maWcgSFVHRVRMQkZTXFxuZnMvS2NvbmZpZy0yNTEtXFx0Ym9vbCBcXFwiSHVnZVRMQiBmaWxlIHN5c3RlbSBzdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNFQxODo0Njo1NC40MjM1NzM0MDhaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTEwNTY0ODAzNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgSHVnZSBQYWdlIFBvaXNvbmluZyBpbiB0aGUgS2VybmVsKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgbWVtb3J5IGZhaWx1cmUgc2NlbmFyaW9zIHJlbGF0ZWQgdG8gaHVnZSBwYWdlcy4gTXkgaW5pdGlhbCBmb2N1cyBpcyBvbiB0aGUgY29uZmlndXJhdGlvbnM6IGBNRU1PUllfRkFJTFVSRWAsIGBIVUdFVExCRlNgLCBhbmQgYEhVR0VUTEJfUEFHRWAuIFJpZ2h0LCBhbmQgSSBzZWUgYExBUkdFX0ZPTElPYCBpcyBiZWluZyBzZWxlY3RlZCBieSBib3RoIGBIVUdFVExCX1BBR0VgIGFuZCBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgLCB3aGljaCBzZWVtcyBjb3JyZWN0LlxuXG5Ob3csIEkgbmVlZCB0byBwaW5wb2ludCB0aGUgcmVsZXZhbnQgc3ltYm9scy4gTGV0J3Mgc2VlLi4uIEkgaGF2ZSBgaHVnZXRsYl91cGRhdGVfaHdwb2lzb25gLCBgaHVnZXRsYl9wYWdlX2h3cG9pc29uYCwgYGh1Z2V0bGJfdW5yZWZfcGFnZV9od3BvaXNvbmAsIGB1bnBvaXNvbl9tZW1vcnlgLCBhbmQgYGZvbGlvX2NsZWFyX2h1Z2V0bGJfaHdwb2lzb25gLiBUaG9zZSBzZWVtIGxpa2UgdGhleSdyZSBkaXJlY3RseSByZWxhdGVkIHRvIHRoZSBoYXJkd2FyZSBwb2lzb25pbmcgYXNwZWN0IG9mIGh1Z2UgcGFnZXMuIEknbSBhbHNvIG5vdGluZyBgYWRqdXN0X3JhbmdlX2h3cG9pc29uYCwgd2hpY2ggaXMgc3RhdGljLCBzbyB0aGF0J3MgcHJvYmFibHkgbm90IGEgZ29vZCBzdGFydGluZyBwb2ludCwgYWx0aG91Z2ggaXQncyByZWxhdGVkLiBJIGNvbnNpZGVyZWQgYGZpbGVtYXBfcmVhZGAsIHNpbmNlIHRoYXQncyBhIGhvdCBwYXRoLCBidXQgaXQncyBwcm9iYWJseSB0b28gZ2VuZXJhbC4gTWF5YmUgYGh1Z2V0bGJmc19pbml0X3JlZ3VsYXJfaW5vZGVgPyBUaGF0J3MgYWxzbyBzdGF0aWMsIHNvIHByb2JhYmx5IG5vdCB0aGUgYmVzdCBzcG90IHRvIHN0YXJ0IGVpdGhlci4gTGV0IG1lIGNvbnNpZGVyIGBodWdldGxiX2ZvbGlvX21hcHBpbmdfbG9ja193cml0ZWAuIFRoYXQgc291bmRzIGxpa2UgaXQgY291bGQgYmUgcmVsZXZhbnQsIHNpbmNlIHdlIGFyZSB0YWxraW5nIGFib3V0IG1lbW9yeSBmYWlsdXJlcy5cblxuQWxyaWdodCwgdGhlIG5leHQgdGhpbmcgaXMgdG8gZGl2ZSBpbnRvIGBtbS9tZW1vcnktZmFpbHVyZS5jYCB0byBzZWUgaWYgdGhlcmUgYXJlIGFueSB1c2VmdWwgZXhwb3J0ZWQgb3Igbm9uLXN0YXRpYyBmdW5jdGlvbnMgd2l0aGluIHRoYXQgZmlsZS4gVGhhdCBzaG91bGQgZ2l2ZSBtZSBhIGJldHRlciB2aWV3IG9mIHdoZXJlIEkgY2FuIG1ha2UgYW4gaW1wYWN0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODE5MCwiT3V0cHV0VG9rZW5zIjo0NiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNFQxODo0Njo1OS41MjkyMjQ3ODVaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2Mzg2MzE1NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJeKFthLXpfXSsgKStodWdldGxiX1thLXpfXStcXFxcKFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9tZW1vcnktZmFpbHVyZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL21lbW9yeS1mYWlsdXJlLmM9MTgyMD1zdGF0aWMgYm9vbCBwcmVjaXNlX3BhZ2VfcG9pc29uZWQoY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbyxcXG4tLVxcbm1tL21lbW9yeS1mYWlsdXJlLmMtMTg0My0gKi9cXG5tbS9tZW1vcnktZmFpbHVyZS5jOjE4NDQ6Ym9vbCBodWdldGxiX3BhZ2VfaHdwb2lzb24oY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbywgY29uc3Qgc3RydWN0IHBhZ2UgKnBhZ2UpXFxubW0vbWVtb3J5LWZhaWx1cmUuYy0xODQ1LXtcXG4tLVxcbm1tL21lbW9yeS1mYWlsdXJlLmMtMTg1NS0gKi9cXG5tbS9tZW1vcnktZmFpbHVyZS5jOjE4NTY6Ym9vbCBodWdldGxiX3VucmVmX3BhZ2VfaHdwb2lzb24oY29uc3Qgc3RydWN0IHBhZ2UgKnBhZ2UpXFxubW0vbWVtb3J5LWZhaWx1cmUuYy0xODU3LXtcXG4tLVxcbm1tL21lbW9yeS1mYWlsdXJlLmM9MTg3NT1zdGF0aWMgdW5zaWduZWQgbG9uZyBfX2ZvbGlvX2ZyZWVfcmF3X2h3cChzdHJ1Y3QgZm9saW8gKmZvbGlvLCBib29sIG1vdmVfZmxhZylcXG4tLVxcbm1tL21lbW9yeS1mYWlsdXJlLmMtMTg5OS1cXG5tbS9tZW1vcnktZmFpbHVyZS5jOjE5MDA6c3RhdGljIGlubGluZSBpbnQgaHVnZXRsYl9zZXRfcG9pc29uKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxubW0vbWVtb3J5LWZhaWx1cmUuYy0xOTAxLXtcXG4tLVxcbm1tL21lbW9yeS1mYWlsdXJlLmMtMTkwNy1cXG5tbS9tZW1vcnktZmFpbHVyZS5jOjE5MDg6c3RhdGljIGlubGluZSBpbnQgaHVnZXRsYl9jbGVhcl9wb2lzb24oc3RydWN0IGZvbGlvICpmb2xpbylcXG5tbS9tZW1vcnktZmFpbHVyZS5jLTE5MDkte1xcbi0tXFxubW0vbWVtb3J5LWZhaWx1cmUuYy0xOTE5LSAqL1xcbm1tL21lbW9yeS1mYWlsdXJlLmM6MTkyMDpzdGF0aWMgaW50IGh1Z2V0bGJfdXBkYXRlX2h3cG9pc29uKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBwYWdlICpwYWdlKVxcbm1tL21lbW9yeS1mYWlsdXJlLmMtMTkyMS17XFxuLS1cXG5tbS9tZW1vcnktZmFpbHVyZS5jPTIxMzM9c3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGZvbGlvX2ZyZWVfcmF3X2h3cChzdHJ1Y3QgZm9saW8gKmZvbGlvLCBib29sIGZsYWcpXFxuLS1cXG5tbS9tZW1vcnktZmFpbHVyZS5jLTIxMzctXFxubW0vbWVtb3J5LWZhaWx1cmUuYzoyMTM4OnN0YXRpYyBpbmxpbmUgaW50IGh1Z2V0bGJfY2xlYXJfcG9pc29uKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxubW0vbWVtb3J5LWZhaWx1cmUuYy0yMTM5LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjRUMTg6NDY6NTkuOTkzMTE1NDAyWiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM4MzQ0NTYwNDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSBjaGFuZ2VzIEknbSBzZWVpbmc6XG5cbioqQW5hbHl6aW5nIFJlY2VudCBDb2RlIE1vZGlmaWNhdGlvbnMgaW4gdGhlIEh1Z2VUTEIgU3Vic3lzdGVtKipcblxuQWxyaWdodCwgbGV0J3MgYnJlYWsgZG93biB0aGVzZSBjb2RlIGNoYW5nZXMuIEZpcnN0LCBpdCBsb29rcyBsaWtlIGBodWdldGxiX3BhZ2VfaHdwb2lzb25gIGFuZCBgaHVnZXRsYl91bnJlZl9wYWdlX2h3cG9pc29uYCBhcmUgbm93IGV4cG9zZWQgYmV5b25kIHRoZWlyIHByZXZpb3VzIHNjb3BlIOKAkyB0aGV5J3JlIG5vdCBzdGF0aWMgYW55bW9yZS4gVGhhdCdzIGEgc2lnbmlmaWNhbnQgc2hpZnQuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCB3aGF0IGFyZSB0aGUgaW1wbGljYXRpb25zIGZvciBob3cgb3RoZXIgbW9kdWxlcyBvciBmdW5jdGlvbnMgd2lsbCBpbnRlcmFjdCB3aXRoIHRoZW0/IEFyZSB3ZSBzZWVpbmcgYSBtb3ZlIHRvd2FyZHMgYSBtb3JlIGdlbmVyYWwgaGFyZHdhcmUgcG9pc29uIGhhbmRsaW5nIHN0cmF0ZWd5LCBvciBhcmUgdGhlc2UgZnVuY3Rpb25zIGJlaW5nIHJlcHVycG9zZWQgZm9yIHNvbWV0aGluZyBzcGVjaWZpYyB3aXRoaW4gdGhlIE5VTUEgYXJjaGl0ZWN0dXJlIG9mIHRoZSBIdWdlVExCIHN5c3RlbT8gSSBuZWVkIHRvIGRpZyBpbnRvIHRoZSBjYWxsIHNpdGVzIHRvIHVuZGVyc3RhbmQgdGhlIG5ldyBkZXBlbmRlbmNpZXMgdGhhdCBhcmUgYmVpbmcgaW50cm9kdWNlZC5cblxuQWxzbywgYHVucG9pc29uX21lbW9yeWAgaGFzIGFsc28gYmVlbiB0b3VjaGVkLiBUaGlzIGlzIGludGVyZXN0aW5nLiBXaGF0J3MgdGhlIG5hdHVyZSBvZiB0aGUgbW9kaWZpY2F0aW9uPyBJcyBpdCBhIGNoYW5nZSB0byB0aGUgdW5wb2lzb25pbmcgYWxnb3JpdGhtIGl0c2VsZiwgYW4gZXhwYW5zaW9uIG9mIGl0cyBjYXBhYmlsaXRpZXMsIG9yIHBlcmhhcHMgYSBtb2RpZmljYXRpb24gb2YgdGhlIGVycm9yIHJlcG9ydGluZyBvciBsb2dnaW5nPyBJJ2xsIG5lZWQgdG8gY2FyZWZ1bGx5IHJldmlldyB0aGUgZGlmZiB0byB1bmRlcnN0YW5kIHdoYXQgdGhlIGludGVudCBvZiB0aGUgY2hhbmdlIGlzLiBJIG5lZWQgdG8ga2VlcCBpbiBtaW5kLCBzcGVjaWZpY2FsbHksIHRoYXQgdW5wb2lzb25pbmcgaXMgYSBwZXJmb3JtYW5jZS1jcml0aWNhbCBmdW5jdGlvbiBhbmQgYW55IGNoYW5nZXMgdG8gaXQgY291bGQgaGF2ZSBzaWduaWZpY2FudCByYW1pZmljYXRpb25zIG9uIHRoZSBvdmVyYWxsIHN5c3RlbSdzIHN0YWJpbGl0eSwgZXNwZWNpYWxseSBpZiBpdCBpcyBjaGFuZ2VkIGluIGEgbm9uLW9idmlvdXMgd2F5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTI5OSwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI0VDE4OjQ3OjAzLjgyNzU3NDU2NVoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTAwODgxNTIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiXmludCB1bnBvaXNvbl9tZW1vcnlcXFxcKFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9tZW1vcnktZmFpbHVyZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL21lbW9yeS1mYWlsdXJlLmM9MjY4MD1jb3JlX2luaXRjYWxsKG1lbW9yeV9mYWlsdXJlX2luaXQpO1xcbi0tXFxubW0vbWVtb3J5LWZhaWx1cmUuYy0yNzAxLSAqL1xcbm1tL21lbW9yeS1mYWlsdXJlLmM6MjcwMjppbnQgdW5wb2lzb25fbWVtb3J5KHVuc2lnbmVkIGxvbmcgcGZuKVxcbm1tL21lbW9yeS1mYWlsdXJlLmMtMjcwMy17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI0VDE4OjQ3OjAzLjkxNzY2ODU3N1oiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMDM5ODA1NzI1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byBtbS9odWdldGxiLmMgZm9yIENsdWVzKipcblxuT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCdzIGJlZW4gY2hhbmdlZCBpbiB0aGUgaHVnZSBwYWdlcyBjb2RlLiBNeSBmaXJzdCBpbnN0aW5jdCBpcyB0byBkaXZlIGRpcmVjdGx5IGludG8gYG1tL2h1Z2V0bGIuY2AuIEl0J3MgdGhlIGNlbnRyYWwgaHViIGZvciBoYW5kbGluZyBodWdlIHBhZ2UgbWFuYWdlbWVudCwgc28gYW55IG1vZGlmaWNhdGlvbnMgcmVsYXRlZCB0byBwZXJmb3JtYW5jZSBvciBuZXcgZmVhdHVyZXMgYXJlIGxpa2VseSB0byBiZSByZWZsZWN0ZWQgdGhlcmUuIEknbSBnb2luZyB0byBsb29rIGZvciB0aGUga2V5IGZ1bmN0aW9ucyB0aGF0IGhhdmUgYmVlbiB0b3VjaGVkIHNpbmNlIHdoYXRldmVyIHRoZSBiYXNlbGluZSBpcyDigJMgcHJvYmFibHkgYSBwcmV2aW91cyBrZXJuZWwgdmVyc2lvbiBvciBhIHNwZWNpZmljIGNvbW1pdC4gVGhpcyB3aWxsIGxldCBtZSBxdWlja2x5IHBpbnBvaW50IHRoZSBjb2RlIHJlc3BvbnNpYmxlIGZvciB0aGUgYmVoYXZpb3IgSSdtIGludmVzdGlnYXRpbmcuIEkgZXhwZWN0IHRvIGJlIGxvb2tpbmcgYXQgdGhpbmdzIGxpa2UgcGFnZSBhbGxvY2F0aW9uLCBkZWFsbG9jYXRpb24sIG1hcHBpbmcsIHVubWFwcGluZywgYW5kIGFueSByZWxhdGVkIGxvY2tpbmcgb3IgTlVNQS1hd2FyZW5lc3MgbWVjaGFuaXNtcy4gVGhlIGRpZmZzIHdpbGwgYmUgdGhlIGNydWNpYWwgcGFydCwgb2YgY291cnNlLiBMZXQncyBzZWUgd2hhdCdzIGNoYW5nZWQgYW5kIHdoYXQgaXQgdGVsbHMgdXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5NzU0LCJPdXRwdXRUb2tlbnMiOjQ2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjRUMTg6NDc6MDYuOTU3NDc3MjUxWiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4NzE3ODI0MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJeKFthLXpfXSsgKStodWdldGxiX1thLXpfXStcXFxcKFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9odWdldGxiLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vaHVnZXRsYi5jPTkyPXN0YXRpYyBpbnQgaHVnZXRsYl9wYXJhbV9pbmRleCBfX2luaXRkYXRhO1xcbm1tL2h1Z2V0bGIuYzo5MzpzdGF0aWMgX19pbml0IGludCBodWdldGxiX2FkZF9wYXJhbShjaGFyICpzLCBpbnQgKCpzZXR1cCkoY2hhciAqdmFsKSk7XFxubW0vaHVnZXRsYi5jOjk0OnN0YXRpYyBfX2luaXQgdm9pZCBodWdldGxiX3BhcnNlX3BhcmFtcyh2b2lkKTtcXG5tbS9odWdldGxiLmMtOTUtXFxuLS1cXG5tbS9odWdldGxiLmM9MTE0PXN0cnVjdCBtdXRleCAqaHVnZXRsYl9mYXVsdF9tdXRleF90YWJsZSBfX3JvX2FmdGVyX2luaXQ7XFxuLS1cXG5tbS9odWdldGxiLmMtMTE2LS8qIEZvcndhcmQgZGVjbGFyYXRpb24gKi9cXG5tbS9odWdldGxiLmM6MTE3OnN0YXRpYyBpbnQgaHVnZXRsYl9hY2N0X21lbW9yeShzdHJ1Y3QgaHN0YXRlICpoLCBsb25nIGRlbHRhKTtcXG5tbS9odWdldGxiLmM6MTE4OnN0YXRpYyB2b2lkIGh1Z2V0bGJfdm1hX2xvY2tfZnJlZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSk7XFxubW0vaHVnZXRsYi5jOjExOTpzdGF0aWMgdm9pZCBodWdldGxiX3ZtYV9sb2NrX2FsbG9jKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKTtcXG5tbS9odWdldGxiLmMtMTIwLXN0YXRpYyB2b2lkIF9faHVnZXRsYl92bWFfdW5sb2NrX3dyaXRlX2ZyZWUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpO1xcbm1tL2h1Z2V0bGIuYz0xMjE9c3RhdGljIGludCBfX2h1Z2VfcG1kX3Vuc2hhcmUoc3RydWN0IG1tdV9nYXRoZXIgKnRsYixcXG4tLVxcbm1tL2h1Z2V0bGIuYy0xMjMtXFx0XFx0Ym9vbCBjaGVja19sb2Nrcyk7XFxubW0vaHVnZXRsYi5jOjEyNDpzdGF0aWMgdm9pZCBodWdldGxiX3Vuc2hhcmVfcG1kcyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG5tbS9odWdldGxiLmMtMTI1LVxcdFxcdHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLCBib29sIHRha2VfbG9ja3MpO1xcbi0tXFxubW0vaHVnZXRsYi5jPTI3OD1zdGF0aWMgaW5saW5lIHN0cnVjdCBodWdlcGFnZV9zdWJwb29sICpzdWJwb29sX3ZtYShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcXG4tLVxcbm1tL2h1Z2V0bGIuYy0yODUtICovXFxubW0vaHVnZXRsYi5jOjI4Njp2b2lkIGh1Z2V0bGJfdm1hX2xvY2tfcmVhZChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcXG5tbS9odWdldGxiLmMtMjg3LXtcXG4tLVxcbm1tL2h1Z2V0bGIuYy0yOTgtXFxubW0vaHVnZXRsYi5jOjI5OTp2b2lkIGh1Z2V0bGJfdm1hX3VubG9ja19yZWFkKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxcbm1tL2h1Z2V0bGIuYy0zMDAte1xcbi0tXFxubW0vaHVnZXRsYi5jLTMxMS1cXG5tbS9odWdldGxiLmM6MzEyOnZvaWQgaHVnZXRsYl92bWFfbG9ja193cml0ZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcXG5tbS9odWdldGxiLmMtMzEzLXtcXG4tLVxcbm1tL2h1Z2V0bGIuYy0zMjQtXFxubW0vaHVnZXRsYi5jOjMyNTp2b2lkIGh1Z2V0bGJfdm1hX3VubG9ja193cml0ZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcXG5tbS9odWdldGxiLmMtMzI2LXtcXG4tLVxcbm1tL2h1Z2V0bGIuYy0zMzctXFxubW0vaHVnZXRsYi5jOjMzODppbnQgaHVnZXRsYl92bWFfdHJ5bG9ja193cml0ZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcXG5tbS9odWdldGxiLmMtMzM5LXtcXG4tLVxcbm1tL2h1Z2V0bGIuYy0zNTMtXFxubW0vaHVnZXRsYi5jOjM1NDp2b2lkIGh1Z2V0bGJfdm1hX2Fzc2VydF9sb2NrZWQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXFxubW0vaHVnZXRsYi5jLTM1NS17XFxuLS1cXG5tbS9odWdldGxiLmMtMzY2LVxcbm1tL2h1Z2V0bGIuYzozNjc6dm9pZCBodWdldGxiX3ZtYV9sb2NrX3JlbGVhc2Uoc3RydWN0IGtyZWYgKmtyZWYpXFxubW0vaHVnZXRsYi5jLTM2OC17XFxuLS1cXG5tbS9odWdldGxiLmM9MzkwPXN0YXRpYyB2b2lkIF9faHVnZXRsYl92bWFfdW5sb2NrX3dyaXRlX2ZyZWUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXFxuLS1cXG5tbS9odWdldGxiLmMtNDAzLVxcbm1tL2h1Z2V0bGIuYzo0MDQ6c3RhdGljIHZvaWQgaHVnZXRsYl92bWFfbG9ja19mcmVlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxcbm1tL2h1Z2V0bGIuYy00MDUte1xcbi0tXFxubW0vaHVnZXRsYi5jLTQxOS1cXG5tbS9odWdldGxiLmM6NDIwOnN0YXRpYyB2b2lkIGh1Z2V0bGJfdm1hX2xvY2tfYWxsb2Moc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXFxubW0vaHVnZXRsYi5jLTQyMS17XFxuLS1cXG5tbS9odWdldGxiLmM9ODUzPXN0YXRpYyBsb25nIHJlZ2lvbl9kZWwoc3RydWN0IHJlc3ZfbWFwICpyZXN2LCBsb25nIGYsIGxvbmcgdClcXG4tLVxcbm1tL2h1Z2V0bGIuYy05NTUtICovXFxubW0vaHVnZXRsYi5jOjk1Njp2b2lkIGh1Z2V0bGJfZml4X3Jlc2VydmVfY291bnRzKHN0cnVjdCBpbm9kZSAqaW5vZGUpXFxubW0vaHVnZXRsYi5jLTk1Ny17XFxuLS1cXG5tbS9odWdldGxiLmM9MTE3MT1ib29sIF9fdm1hX3ByaXZhdGVfbG9jayhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcXG4tLVxcbm1tL2h1Z2V0bGIuYy0xMTc3LVxcbm1tL2h1Z2V0bGIuYzoxMTc4OnZvaWQgaHVnZXRsYl9kdXBfdm1hX3ByaXZhdGUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXFxubW0vaHVnZXRsYi5jLTExNzkte1xcbi0tXFxubW0vaHVnZXRsYi5jPTMwODA9aW50IF9fYWxsb2NfYm9vdG1lbV9odWdlX3BhZ2Uoc3RydWN0IGhzdGF0ZSAqaCwgaW50IG5pZClcXG4tLVxcbm1tL2h1Z2V0bGIuYy0zMTE3LS8qIEluaXRpYWxpemUgW3N0YXJ0X3BhZ2U6ZW5kX3BhZ2VfbnVtYmVyXSB0YWlsIHN0cnVjdCBwYWdlcyBvZiBhIGh1Z2VwYWdlICovXFxubW0vaHVnZXRsYi5jOjMxMTg6c3RhdGljIHZvaWQgX19pbml0IGh1Z2V0bGJfZm9saW9faW5pdF90YWlsX3ZtZW1tYXAoc3RydWN0IGZvbGlvICpmb2xpbyxcXG5tbS9odWdldGxiLmMtMzExOS1cXHRcXHRcXHRcXHRcXHRzdHJ1Y3QgaHN0YXRlICpoLFxcbi0tXFxubW0vaHVnZXRsYi5jLTMxNDAtXFxubW0vaHVnZXRsYi5jOjMxNDE6c3RhdGljIHZvaWQgX19pbml0IGh1Z2V0bGJfZm9saW9faW5pdF92bWVtbWFwKHN0cnVjdCBmb2xpbyAqZm9saW8sXFxubW0vaHVnZXRsYi5jLTMxNDItXFx0XFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IGhzdGF0ZSAqaCxcXG4tLVxcbm1tL2h1Z2V0bGIuYy0zMTU5LVxcbm1tL2h1Z2V0bGIuYzozMTYwOnN0YXRpYyBib29sIF9faW5pdCBodWdldGxiX2Jvb3RtZW1fcGFnZV9wcmVodm8oc3RydWN0IGh1Z2VfYm9vdG1lbV9wYWdlICptKVxcbm1tL2h1Z2V0bGIuYy0zMTYxLXtcXG4tLVxcbm1tL2h1Z2V0bGIuYy0zMTY0LVxcbm1tL2h1Z2V0bGIuYzozMTY1OnN0YXRpYyBib29sIF9faW5pdCBodWdldGxiX2Jvb3RtZW1fcGFnZV9lYXJseWNtYShzdHJ1Y3QgaHVnZV9ib290bWVtX3BhZ2UgKm0pXFxubW0vaHVnZXRsYi5jLTMxNjYte1xcbi0tXFxubW0vaHVnZXRsYi5jLTMxNzktICovXFxubW0vaHVnZXRsYi5jOjMxODA6c3RhdGljIHZvaWQgX19pbml0IGh1Z2V0bGJfYm9vdG1lbV9pbml0X21pZ3JhdGV0eXBlKHN0cnVjdCBmb2xpbyAqZm9saW8sXFxubW0vaHVnZXRsYi5jLTMxODEtXFx0XFx0XFx0XFx0XFx0XFx0XFx0ICBzdHJ1Y3QgaHN0YXRlICpoKVxcbi0tXFxubW0vaHVnZXRsYi5jPTMxOTY9c3RhdGljIHZvaWQgX19pbml0IHByZXBfYW5kX2FkZF9ib290bWVtX2ZvbGlvcyhzdHJ1Y3QgaHN0YXRlICpoLFxcbi0tXFxubW0vaHVnZXRsYi5jLTMyMjUtXFxubW0vaHVnZXRsYi5jOjMyMjY6Ym9vbCBfX2luaXQgaHVnZXRsYl9ib290bWVtX3BhZ2Vfem9uZXNfdmFsaWQoaW50IG5pZCxcXG5tbS9odWdldGxiLmMtMzIyNy1cXHRcXHRcXHRcXHRcXHQgICAgIHN0cnVjdCBodWdlX2Jvb3RtZW1fcGFnZSAqbSlcXG4tLVxcbm1tL2h1Z2V0bGIuYy0zMjYyLSAqL1xcbm1tL2h1Z2V0bGIuYzozMjYzOnN0YXRpYyB2b2lkIF9faW5pdCBodWdldGxiX2Jvb3RtZW1fZnJlZV9pbnZhbGlkX3BhZ2UoaW50IG5pZCwgc3RydWN0IHBhZ2UgKnBhZ2UsXFxubW0vaHVnZXRsYi5jLTMyNjQtXFx0XFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3QgaHN0YXRlICpoKVxcbi0tXFxubW0vaHVnZXRsYi5jPTMzNTY9c3RhdGljIHZvaWQgX19pbml0IGdhdGhlcl9ib290bWVtX3ByZWFsbG9jKHZvaWQpXFxuLS1cXG5tbS9odWdldGxiLmMtMzM3MS1cXG5tbS9odWdldGxiLmM6MzM3MjpzdGF0aWMgdm9pZCBfX2luaXQgaHVnZXRsYl9oc3RhdGVfYWxsb2NfcGFnZXNfb25lbm9kZShzdHJ1Y3QgaHN0YXRlICpoLCBpbnQgbmlkKVxcbm1tL2h1Z2V0bGIuYy0zMzczLXtcXG4tLVxcbm1tL2h1Z2V0bGIuYy0zNDE0LVxcbm1tL2h1Z2V0bGIuYzozNDE1OnN0YXRpYyBib29sIF9faW5pdCBodWdldGxiX2hzdGF0ZV9hbGxvY19wYWdlc19zcGVjaWZpY19ub2RlcyhzdHJ1Y3QgaHN0YXRlICpoKVxcbm1tL2h1Z2V0bGIuYy0zNDE2LXtcXG4tLVxcbm1tL2h1Z2V0bGIuYy0zNDI5LVxcbm1tL2h1Z2V0bGIuYzozNDMwOnN0YXRpYyB2b2lkIF9faW5pdCBodWdldGxiX2hzdGF0ZV9hbGxvY19wYWdlc19lcnJjaGVjayh1bnNpZ25lZCBsb25nIGFsbG9jYXRlZCwgc3RydWN0IGhzdGF0ZSAqaClcXG5tbS9odWdldGxiLmMtMzQzMS17XFxuLS1cXG5tbS9odWdldGxiLmMtMzQ0MS1cXG5tbS9odWdldGxiLmM6MzQ0MjpzdGF0aWMgdm9pZCBfX2luaXQgaHVnZXRsYl9wYWdlc19hbGxvY19ib290X25vZGUodW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsIHZvaWQgKmFyZylcXG5tbS9odWdldGxiLmMtMzQ0My17XFxuLS1cXG5tbS9odWdldGxiLmMtMzQ3Mi1cXG5tbS9odWdldGxiLmM6MzQ3MzpzdGF0aWMgdW5zaWduZWQgbG9uZyBfX2luaXQgaHVnZXRsYl9naWdhbnRpY19wYWdlc19hbGxvY19ib290KHN0cnVjdCBoc3RhdGUgKmgpXFxubW0vaHVnZXRsYi5jLTM0NzQte1xcbi0tXFxubW0vaHVnZXRsYi5jLTM0ODUtXFxubW0vaHVnZXRsYi5jOjM0ODY6c3RhdGljIHVuc2lnbmVkIGxvbmcgX19pbml0IGh1Z2V0bGJfcGFnZXNfYWxsb2NfYm9vdChzdHJ1Y3QgaHN0YXRlICpoKVxcbm1tL2h1Z2V0bGIuYy0zNDg3LXtcXG4tLVxcbm1tL2h1Z2V0bGIuYy0zNTY0LSAqL1xcbm1tL2h1Z2V0bGIuYzozNTY1OnN0YXRpYyB2b2lkIF9faW5pdCBodWdldGxiX2hzdGF0ZV9hbGxvY19wYWdlcyhzdHJ1Y3QgaHN0YXRlICpoKVxcbm1tL2h1Z2V0bGIuYy0zNTY2LXtcXG4tLVxcbm1tL2h1Z2V0bGIuYy0zNTk0LVxcbm1tL2h1Z2V0bGIuYzozNTk1OnN0YXRpYyB2b2lkIF9faW5pdCBodWdldGxiX2luaXRfaHN0YXRlcyh2b2lkKVxcbm1tL2h1Z2V0bGIuYy0zNTk2LXtcXG4tLVxcbm1tL2h1Z2V0bGIuYz00MDQ3PXNzaXplX3QgX19ucl9odWdlcGFnZXNfc3RvcmVfY29tbW9uKGJvb2wgb2JleV9tZW1wb2xpY3ksXFxuLS1cXG5tbS9odWdldGxiLmMtNDA3OS1cXG5tbS9odWdldGxiLmM6NDA4MDpzdGF0aWMgaW50IF9faW5pdCBodWdldGxiX2luaXQodm9pZClcXG5tbS9odWdldGxiLmMtNDA4MS17XFxuLS1cXG5tbS9odWdldGxiLmM9NDE1Mz1ib29sIF9faW5pdCBfX2F0dHJpYnV0ZSgod2VhaykpIGFyY2hfaHVnZXRsYl92YWxpZF9zaXplKHVuc2lnbmVkIGxvbmcgc2l6ZSlcXG4tLVxcbm1tL2h1Z2V0bGIuYy00MTU3LVxcbm1tL2h1Z2V0bGIuYzo0MTU4OnZvaWQgX19pbml0IGh1Z2V0bGJfYWRkX2hzdGF0ZSh1bnNpZ25lZCBpbnQgb3JkZXIpXFxubW0vaHVnZXRsYi5jLTQxNTkte1xcbi0tXFxubW0vaHVnZXRsYi5jLTQxODEtXFxubW0vaHVnZXRsYi5jOjQxODI6Ym9vbCBfX2luaXQgX193ZWFrIGh1Z2V0bGJfbm9kZV9hbGxvY19zdXBwb3J0ZWQodm9pZClcXG5tbS9odWdldGxiLmMtNDE4My17XFxuLS1cXG5tbS9odWdldGxiLmM9NDE4Nz1zdGF0aWMgdm9pZCBfX2luaXQgaHVnZXBhZ2VzX2NsZWFyX3BhZ2VzX2luX25vZGUodm9pZClcXG4tLVxcbm1tL2h1Z2V0bGIuYy00MTk5LVxcbm1tL2h1Z2V0bGIuYzo0MjAwOnN0YXRpYyBfX2luaXQgaW50IGh1Z2V0bGJfYWRkX3BhcmFtKGNoYXIgKnMsIGludCAoKnNldHVwKShjaGFyICopKVxcbm1tL2h1Z2V0bGIuYy00MjAxLXtcXG4tLVxcbm1tL2h1Z2V0bGIuYy00MjI2LVxcbm1tL2h1Z2V0bGIuYzo0MjI3OnN0YXRpYyBfX2luaXQgdm9pZCBodWdldGxiX3BhcnNlX3BhcmFtcyh2b2lkKVxcbm1tL2h1Z2V0bGIuYy00MjI4LXtcXG4tLVxcbm1tL2h1Z2V0bGIuYz00NDQyPWh1Z2V0bGJfZWFybHlfcGFyYW0oXFxcImRlZmF1bHRfaHVnZXBhZ2VzelxcXCIsIGRlZmF1bHRfaHVnZXBhZ2Vzel9zZXR1cCk7XFxubW0vaHVnZXRsYi5jLTQ0NDMtXFxubW0vaHVnZXRsYi5jOjQ0NDQ6dm9pZCBfX2luaXQgaHVnZXRsYl9ib290bWVtX3NldF9ub2Rlcyh2b2lkKVxcbm1tL2h1Z2V0bGIuYy00NDQ1LXtcXG4tLVxcbm1tL2h1Z2V0bGIuYy00NDU3LVxcbm1tL2h1Z2V0bGIuYzo0NDU4OnZvaWQgX19pbml0IGh1Z2V0bGJfYm9vdG1lbV9hbGxvYyh2b2lkKVxcbm1tL2h1Z2V0bGIuYy00NDU5LXtcXG4tLVxcbm1tL2h1Z2V0bGIuYz00NTAwPXN0YXRpYyB1bnNpZ25lZCBpbnQgYWxsb3dlZF9tZW1zX25yKHN0cnVjdCBoc3RhdGUgKmgpXFxuLS1cXG5tbS9odWdldGxiLmMtNDUxNi1cXG5tbS9odWdldGxiLmM6NDUxNzp2b2lkIGh1Z2V0bGJfcmVwb3J0X21lbWluZm8oc3RydWN0IHNlcV9maWxlICptKVxcbm1tL2h1Z2V0bGIuYy00NTE4LXtcXG4tLVxcbm1tL2h1Z2V0bGIuYy00NTQ2LVxcbm1tL2h1Z2V0bGIuYzo0NTQ3OmludCBodWdldGxiX3JlcG9ydF9ub2RlX21lbWluZm8oY2hhciAqYnVmLCBpbnQgbGVuLCBpbnQgbmlkKVxcbm1tL2h1Z2V0bGIuYy00NTQ4LXtcXG4tLVxcbm1tL2h1Z2V0bGIuYy00NTYyLVxcbm1tL2h1Z2V0bGIuYzo0NTYzOnZvaWQgaHVnZXRsYl9zaG93X21lbWluZm9fbm9kZShpbnQgbmlkKVxcbm1tL2h1Z2V0bGIuYy00NTY0LXtcXG4tLVxcbm1tL2h1Z2V0bGIuYy00NTc4LVxcbm1tL2h1Z2V0bGIuYzo0NTc5OnZvaWQgaHVnZXRsYl9yZXBvcnRfdXNhZ2Uoc3RydWN0IHNlcV9maWxlICptLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSlcXG5tbS9odWdldGxiLmMtNDU4MC17XFxuLS1cXG5tbS9odWdldGxiLmMtNDU4NS0vKiBSZXR1cm4gdGhlIG51bWJlciBwYWdlcyBvZiBtZW1vcnkgd2UgcGh5c2ljYWxseSBoYXZlLCBpbiBQQUdFX1NJWkUgdW5pdHMuICovXFxubW0vaHVnZXRsYi5jOjQ1ODY6dW5zaWduZWQgbG9uZyBodWdldGxiX3RvdGFsX3BhZ2VzKHZvaWQpXFxubW0vaHVnZXRsYi5jLTQ1ODcte1xcbi0tXFxubW0vaHVnZXRsYi5jLTQ1OTUtXFxubW0vaHVnZXRsYi5jOjQ1OTY6c3RhdGljIGludCBodWdldGxiX2FjY3RfbWVtb3J5KHN0cnVjdCBoc3RhdGUgKmgsIGxvbmcgZGVsdGEpXFxubW0vaHVnZXRsYi5jLTQ1OTcte1xcbi0tXFxubW0vaHVnZXRsYi5jLTQ2NDUtXFxubW0vaHVnZXRsYi5jOjQ2NDY6c3RhdGljIHZvaWQgaHVnZXRsYl92bV9vcF9vcGVuKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxcbm1tL2h1Z2V0bGIuYy00NjQ3LXtcXG4tLVxcbm1tL2h1Z2V0bGIuYy00Njg1LVxcbm1tL2h1Z2V0bGIuYzo0Njg2OnN0YXRpYyB2b2lkIGh1Z2V0bGJfdm1fb3BfY2xvc2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXFxubW0vaHVnZXRsYi5jLTQ2ODcte1xcbi0tXFxubW0vaHVnZXRsYi5jLTQ3MTYtXFxubW0vaHVnZXRsYi5jOjQ3MTc6c3RhdGljIGludCBodWdldGxiX3ZtX29wX3NwbGl0KHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIpXFxubW0vaHVnZXRsYi5jLTQ3MTgte1xcbi0tXFxubW0vaHVnZXRsYi5jLTQ3MjMtXFxubW0vaHVnZXRsYi5jOjQ3MjQ6dm9pZCBodWdldGxiX3NwbGl0KHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIpXFxubW0vaHVnZXRsYi5jLTQ3MjUte1xcbi0tXFxubW0vaHVnZXRsYi5jLTQ3NTYtXFxubW0vaHVnZXRsYi5jOjQ3NTc6c3RhdGljIHVuc2lnbmVkIGxvbmcgaHVnZXRsYl92bV9vcF9wYWdlc2l6ZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcXG5tbS9odWdldGxiLmMtNDc1OC17XFxuLS1cXG5tbS9odWdldGxiLmMtNDc2Ny0gKi9cXG5tbS9odWdldGxiLmM6NDc2ODpzdGF0aWMgdm1fZmF1bHRfdCBodWdldGxiX3ZtX29wX2ZhdWx0KHN0cnVjdCB2bV9mYXVsdCAqdm1mKVxcbm1tL2h1Z2V0bGIuYy00NzY5LXtcXG4tLVxcbm1tL2h1Z2V0bGIuYy00Nzc0LSNpZmRlZiBDT05GSUdfVVNFUkZBVUxURkRcXG5tbS9odWdldGxiLmM6NDc3NTpzdGF0aWMgYm9vbCBodWdldGxiX2Nhbl91c2VyZmF1bHQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxubW0vaHVnZXRsYi5jLTQ3NzYtXFx0XFx0XFx0XFx0ICB2bV9mbGFnc190IHZtX2ZsYWdzKVxcbi0tXFxubW0vaHVnZXRsYi5jPTUzNjI9c3RhdGljIHZvaWQgdW5tYXBfcmVmX3ByaXZhdGUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbi0tXFxubW0vaHVnZXRsYi5jLTU0MTgtICovXFxubW0vaHVnZXRsYi5jOjU0MTk6c3RhdGljIHZtX2ZhdWx0X3QgaHVnZXRsYl93cChzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcXG5tbS9odWdldGxiLmMtNTQyMC17XFxuLS1cXG5tbS9odWdldGxiLmM9NTYxND1ib29sIGh1Z2V0bGJmc19wYWdlY2FjaGVfcHJlc2VudChzdHJ1Y3QgaHN0YXRlICpoLFxcbi0tXFxubW0vaHVnZXRsYi5jLTU2MjctXFxubW0vaHVnZXRsYi5jOjU2Mjg6aW50IGh1Z2V0bGJfYWRkX3RvX3BhZ2VfY2FjaGUoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXFxubW0vaHVnZXRsYi5jLTU2MjktXFx0XFx0XFx0ICAgcGdvZmZfdCBpZHgpXFxuLS1cXG5tbS9odWdldGxiLmMtNTY1Ni1cXG5tbS9odWdldGxiLmM6NTY1NzpzdGF0aWMgaW5saW5lIHZtX2ZhdWx0X3QgaHVnZXRsYl9oYW5kbGVfdXNlcmZhdWx0KHN0cnVjdCB2bV9mYXVsdCAqdm1mLFxcbm1tL2h1Z2V0bGIuYy01NjU4LVxcdFxcdFxcdFxcdFxcdFxcdCAgc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXFxuLS1cXG5tbS9odWdldGxiLmMtNTY3Ny0gKi9cXG5tbS9odWdldGxiLmM6NTY3ODpzdGF0aWMgYm9vbCBodWdldGxiX3B0ZV9zdGFibGUoc3RydWN0IGhzdGF0ZSAqaCwgc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcixcXG5tbS9odWdldGxiLmMtNTY3OS1cXHRcXHRcXHQgICAgICAgcHRlX3QgKnB0ZXAsIHB0ZV90IG9sZF9wdGUpXFxuLS1cXG5tbS9odWdldGxiLmMtNTY5MC1cXG5tbS9odWdldGxiLmM6NTY5MTpzdGF0aWMgdm1fZmF1bHRfdCBodWdldGxiX25vX3BhZ2Uoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXFxubW0vaHVnZXRsYi5jLTU2OTItXFx0XFx0XFx0c3RydWN0IHZtX2ZhdWx0ICp2bWYpXFxuLS1cXG5tbS9odWdldGxiLmM9NTkzNT11MzIgaHVnZXRsYl9mYXVsdF9tdXRleF9oYXNoKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBwZ29mZl90IGlkeClcXG4tLVxcbm1tL2h1Z2V0bGIuYy01OTQwLVxcbm1tL2h1Z2V0bGIuYzo1OTQxOnZtX2ZhdWx0X3QgaHVnZXRsYl9mYXVsdChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxubW0vaHVnZXRsYi5jLTU5NDItXFx0XFx0XFx0dW5zaWduZWQgbG9uZyBhZGRyZXNzLCB1bnNpZ25lZCBpbnQgZmxhZ3MpXFxuLS1cXG5tbS9odWdldGxiLmM9NjEzNj1zdGF0aWMgc3RydWN0IGZvbGlvICphbGxvY19odWdldGxiX2ZvbGlvX3ZtYShzdHJ1Y3QgaHN0YXRlICpoLFxcbi0tXFxubW0vaHVnZXRsYi5jLTYxNjItICovXFxubW0vaHVnZXRsYi5jOjYxNjM6aW50IGh1Z2V0bGJfbWZpbGxfYXRvbWljX3B0ZShwdGVfdCAqZHN0X3B0ZSxcXG5tbS9odWdldGxiLmMtNjE2NC1cXHRcXHRcXHQgICAgIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqZHN0X3ZtYSxcXG4tLVxcbm1tL2h1Z2V0bGIuYy02MzgzLVxcbm1tL2h1Z2V0bGIuYzo2Mzg0OmxvbmcgaHVnZXRsYl9jaGFuZ2VfcHJvdGVjdGlvbihzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG5tbS9odWdldGxiLmMtNjM4NS1cXHRcXHR1bnNpZ25lZCBsb25nIGFkZHJlc3MsIHVuc2lnbmVkIGxvbmcgZW5kLFxcbi0tXFxubW0vaHVnZXRsYi5jLTY1MzktXFxubW0vaHVnZXRsYi5jOjY1NDA6bG9uZyBodWdldGxiX3Jlc2VydmVfcGFnZXMoc3RydWN0IGlub2RlICppbm9kZSxcXG5tbS9odWdldGxiLmMtNjU0MS1cXHRcXHRsb25nIGZyb20sIGxvbmcgdG8sXFxuLS1cXG5tbS9odWdldGxiLmMtNjcyNy1cXG5tbS9odWdldGxiLmM6NjcyODpsb25nIGh1Z2V0bGJfdW5yZXNlcnZlX3BhZ2VzKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvbmcgc3RhcnQsIGxvbmcgZW5kLFxcbm1tL2h1Z2V0bGIuYy02NzI5LVxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdGxvbmcgZnJlZWQpXFxuLS1cXG5tbS9odWdldGxiLmM9NzA1MD1wdGVfdCAqaHVnZV9wdGVfb2Zmc2V0KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxcbi0tXFxubW0vaHVnZXRsYi5jLTcwODQtICovXFxubW0vaHVnZXRsYi5jOjcwODU6dW5zaWduZWQgbG9uZyBodWdldGxiX21hc2tfbGFzdF9wYWdlKHN0cnVjdCBoc3RhdGUgKmgpXFxubW0vaHVnZXRsYi5jLTcwODYte1xcbi0tXFxubW0vaHVnZXRsYi5jLTcwOTktLyogU2VlIGRlc2NyaXB0aW9uIGFib3ZlLiAgQXJjaGl0ZWN0dXJlcyBjYW4gcHJvdmlkZSB0aGVpciBvd24gdmVyc2lvbi4gKi9cXG5tbS9odWdldGxiLmM6NzEwMDpfX3dlYWsgdW5zaWduZWQgbG9uZyBodWdldGxiX21hc2tfbGFzdF9wYWdlKHN0cnVjdCBoc3RhdGUgKmgpXFxubW0vaHVnZXRsYi5jLTcxMDEte1xcbi0tXFxubW0vaHVnZXRsYi5jPTcxODU9dm9pZCBtb3ZlX2h1Z2V0bGJfc3RhdGUoc3RydWN0IGZvbGlvICpvbGRfZm9saW8sIHN0cnVjdCBmb2xpbyAqbmV3X2ZvbGlvLCBpbnQgcmVhc29uKVxcbi0tXFxubW0vaHVnZXRsYi5jLTcyNDAtICovXFxubW0vaHVnZXRsYi5jOjcyNDE6c3RhdGljIHZvaWQgaHVnZXRsYl91bnNoYXJlX3BtZHMoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxubW0vaHVnZXRsYi5jLTcyNDItXFx0XFx0XFx0XFx0ICAgdW5zaWduZWQgbG9uZyBzdGFydCxcXG4tLVxcbm1tL2h1Z2V0bGIuYy03MzAxLSAqL1xcbm1tL2h1Z2V0bGIuYzo3MzAyOnZvaWQgaHVnZXRsYl91bnNoYXJlX2FsbF9wbWRzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxcbm1tL2h1Z2V0bGIuYy03MzAzLXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjRUMTg6NDc6MDcuMDQ0NjYzMjYzWiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU4NjIyNDUyNDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIE1lbW9yeSBQb2lzb25pbmcgaW4gdGhlIEh1Z2VUTEIgYW5kIEZpbGUgU3lzdGVtcyoqXG5cbk9rYXksIHNvIEknbSBkaWdnaW5nIGludG8gaG93IG1lbW9yeSBwb2lzb25pbmcgaXMgaGFuZGxlZCwgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUgY29udGV4dCBvZiBIdWdlVExCIGFuZCBmaWxlIHN5c3RlbXMuIFRoZSBmdW5jdGlvbnMgb2YgaW50ZXJlc3Qg4oCTIGBodWdldGxiX3VwZGF0ZV9od3BvaXNvbmAsIGBodWdldGxiX3BhZ2VfaHdwb2lzb25gLCBgaHVnZXRsYl91bnJlZl9wYWdlX2h3cG9pc29uYCwgYW5kIGB1bnBvaXNvbl9tZW1vcnlgIOKAkyByZXNpZGUgaW4gYG1tL21lbW9yeS1mYWlsdXJlLmNgLiBJbnRlcmVzdGluZ+KApiBJIHNlZSB0aGF0IGBodWdldGxiX3VwZGF0ZV9od3BvaXNvbmAgaXMgc3RhdGljLCB3aGljaCBsaW1pdHMgaXRzIGRpcmVjdCBhY2Nlc3NpYmlsaXR5IGZyb20gZWxzZXdoZXJlLiBUaGUgb3RoZXJzLCBgaHVnZXRsYl9wYWdlX2h3cG9pc29uYCwgYGh1Z2V0bGJfdW5yZWZfcGFnZV9od3BvaXNvbmAsIGFuZCBgdW5wb2lzb25fbWVtb3J5YCwgYXJlLCBmb3J0dW5hdGVseSwgbm9uLXN0YXRpYyAoZXhwb3J0ZWQpLCBtYWtpbmcgdGhlbSBhdmFpbGFibGUgZm9yIGV4dGVybmFsIHVzZS5cblxuTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2UgYXJlICp1c2VkKi4gSSdkIG5vcm1hbGx5IGNoZWNrIGBtbS9maWxlbWFwLmNgIGZvciBjYWxscyByZWxhdGVkIHRvIGZpbGUgSS9PLCBwZXJoYXBzIGBmaWxlbWFwX3JlYWRgLCBgZmlsZW1hcF9nZXRfcmVhZF9iYXRjaGAsIG9yIGBmaWxlbWFwX2dldF9wYWdlc2AuIEhvbGQgb24sIGBmaWxlbWFwX3JlYWRgIGlzIGEga25vd24gaG90IHBhdGg7IHdlIHdhbnQgdG8gYXZvaWQgcG90ZW50aWFsbHkgZGlzcnVwdGluZyB0aGF0IGlmIHBvc3NpYmxlLiBMZXQncyBzdGVwIGJhY2suLi4gaG1tLCB3YXNuJ3QgdGhlcmUgc29tZXRoaW5nIGFib3V0IGBodWdldGxiZnNfcmVhZF9pdGVyYD8gQWggeWVzLCB0aGF0IHdhcyByZW1vdmVkIOKAkyBzbyBubyBqb3kgdGhlcmUuIFdoYXQgYWJvdXQgYGFkanVzdF9yYW5nZV9od3BvaXNvbmA/IE5vcGUsIGl0J3Mgc3RhdGljIGFnYWluLCBzbyBhbHNvIG5vdCB0aGUgZGlyZWN0IGFuc3dlciBJJ20gc2Vla2luZy5cblxuT2theSwgbGV0J3MgY2FzdCBhIHdpZGVyIG5ldC4gV2hhdCBhYm91dCBgaHVnZXRsYl9mb2xpb19tYXBwaW5nX2xvY2tfd3JpdGVgIGluIGBtbS9odWdldGxiLmNgPyBUaGF0IG1pZ2h0IGJlIHJlbGV2YW50IGFzIHdlIGFyZSBkZWFsaW5nIHdpdGggSHVnZVRMQiBzcGVjaWZpY2FsbHkuIEFuZCBhbHNvLCBwZXJoYXBzLCBgaHVnZXRsYmZzX2luaXRfcmVndWxhcl9pbm9kZWAgaW4gYGZzL2h1Z2V0bGJmcy9pbm9kZS5jYC4uLiBJdCBsb29rcyBsaWtlIGEgZ29vZCBwbGFjZSB0byBzdGFydCwgc28gSSdsbCBkaXZlIGludG8gYGZzL2h1Z2V0bGJmcy9pbm9kZS5jYCBub3cgdG8gaW52ZXN0aWdhdGUgdGhhdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjUxOTYsIk91dHB1dFRva2VucyI6NDQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOTEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjRUMTg6NDc6MTIuOTA2OTEyMDYxWiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDgzNDQ1NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiXnN0YXRpYyB2b2lkIGh1Z2V0bGJmc19pbml0X3JlZ3VsYXJfaW5vZGVcXFxcKFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9odWdldGxiZnMvaW5vZGUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9odWdldGxiZnMvaW5vZGUuYz03NTc9c3RhdGljIHN0cnVjdCBpbm9kZSAqaHVnZXRsYmZzX2dldF9yb290KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsXFxuLS1cXG5mcy9odWdldGxiZnMvaW5vZGUuYy03NzgtXFxuZnMvaHVnZXRsYmZzL2lub2RlLmM6Nzc5OnN0YXRpYyB2b2lkIGh1Z2V0bGJmc19pbml0X3JlZ3VsYXJfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSlcXG5mcy9odWdldGxiZnMvaW5vZGUuYy03ODAte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNFQxODo0NzoxMy4zNTUyNjM0NzFaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTU2ODY2NTY2ODYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRm9jdXNpbmcgb24gSGFyZHdhcmUgUG9pc29uaW5nIGluIEh1Z2VUTEIgUGFnZXMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBgaHVnZXRsYmZzX2luaXRfcmVndWxhcl9pbm9kZWAgYW5kIGltbWVkaWF0ZWx5IG5vdGljZSBpdCdzIHN0YXRpYywgd2hpY2gsIHdoaWxlIHBvdGVudGlhbGx5IHJlbGV2YW50LCBpc24ndCB3aGVyZSBJIG5lZWQgdG8gZm9jdXMgcmlnaHQgbm93LiBMZXQncyBkcmlsbCBkb3duIG9uIHRoZSBjb3JlIGhhcmR3YXJlIHBvaXNvbmluZyBmdW5jdGlvbnMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgcG9pc29uIGhhbmRsaW5nIHdvcmtzIGluIHRoZSBjb250ZXh0IG9mIEh1Z2VUTEIgcGFnZXMuIFNwZWNpZmljYWxseSwgSSdtIHRoaW5raW5nIGFib3V0IGBodWdldGxiX3BhZ2VfaHdwb2lzb25gLCBgaHVnZXRsYl91bnJlZl9wYWdlX2h3cG9pc29uYCwgYW5kIGB1bnBvaXNvbl9tZW1vcnlgLiBUaG9zZSBzZWVtIHRvIGJlIHRoZSBrZXkgcGxheWVycyBpbiBkZXRlY3RpbmcsIHJlcG9ydGluZywgYW5kIGhvcGVmdWxseSwgcmVjb3ZlcmluZyBmcm9tIGhhcmR3YXJlIGVycm9ycy5cblxuSSdtIGFsc28gc2VlaW5nIGBodWdldGxiX3NldF9wb2lzb25gIGFuZCBgaHVnZXRsYl9jbGVhcl9wb2lzb25gLCB3aGljaCBhcmUgc3RhdGljIGlubGluZSBmdW5jdGlvbnMuIFRoYXQncyBnb29kLCB0aGV5J3JlIHByb2JhYmx5IG9wdGltaXplZCBmb3IgdGhlaXIgc3BlY2lmaWMgdXNlIHdpdGhpbiB0aGUgSHVnZVRMQiBjb250ZXh0LlxuXG5XYWl0IGEgbWludXRlLCB3aGF0J3MgdGhpcz8gYGZvbGlvX2NsZWFyX2h1Z2V0bGJfaHdwb2lzb25gIGluIGBtbS9tZW1vcnktZmFpbHVyZS5jYCBpcyBub24tc3RhdGljLiBUaGF0J3MgaW50ZXJlc3RpbmcsIGl0IG9wZW5zIHVwIHRoZSBwb3NzaWJpbGl0eSBvZiBleHRlcm5hbCB1c2UsIHdoaWNoIHdhcnJhbnRzIGZ1cnRoZXIgaW52ZXN0aWdhdGlvbi4gSSdsbCBuZWVkIHRvIHJlbWVtYmVyIHRoYXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI2MDg5LCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTExLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI0VDE4OjQ3OjI5LjA0MTkyMzEyN1oiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODk3ODY5MDIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiXnZvaWQgZm9saW9fY2xlYXJfaHVnZXRsYl9od3BvaXNvblxcXFwoXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL21lbW9yeS1mYWlsdXJlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vbWVtb3J5LWZhaWx1cmUuYz0xOTU4PXN0YXRpYyB1bnNpZ25lZCBsb25nIGZvbGlvX2ZyZWVfcmF3X2h3cChzdHJ1Y3QgZm9saW8gKmZvbGlvLCBib29sIG1vdmVfZmxhZylcXG4tLVxcbm1tL21lbW9yeS1mYWlsdXJlLmMtMTk3Ni1cXG5tbS9tZW1vcnktZmFpbHVyZS5jOjE5Nzc6dm9pZCBmb2xpb19jbGVhcl9odWdldGxiX2h3cG9pc29uKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxubW0vbWVtb3J5LWZhaWx1cmUuYy0xOTc4LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjRUMTg6NDc6MjkuMTMxNzI4ODg5WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEwODA0NDY1Nzk5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBQYXRjaCBmb3IgSFdQb2lzb24gVHJhY2tpbmcgaW4gTGFyZ2UgRm9saW9zKipcblxuT2theSwgZmlyc3QgdGhpbmdzIGZpcnN0LCBgZm9saW9fY2xlYXJfaHVnZXRsYl9od3BvaXNvbmAgaXMgY29uZmlybWVkIHRvIGJlIG5vbi1zdGF0aWMuIEdvb2QuIE5vdywgbGV0J3Mgc2VlIHdoYXQgZWxzZSB0aGlzIHBhdGNoIHRvdWNoZXMuIFNjYW5uaW5nIHRoZSBjb2RlLCBJIHNlZSBtb2RpZmljYXRpb25zIGluIGBtbS9maWxlbWFwLmNgIChzcGVjaWZpY2FsbHkgYGZpbGVtYXBfcmVhZGApLCBgbW0vaHVnZV9tZW1vcnkuY2AgKHNwZWNpZmljYWxseSBgdGhwX3VuZGVydXNlZGApLCBgbW0vc2htZW0uY2AgKHNwZWNpZmljYWxseSBgc2htZW1fd3JpdGVfYmVnaW5gKSwgYG1tL3Ztc2Nhbi5jYCAoc3BlY2lmaWNhbGx5IGBzaHJpbmtfZm9saW9fbGlzdGApLCBhbmQgYHZpcnQva3ZtL2d1ZXN0X21lbWZkLmNgIChzcGVjaWZpY2FsbHkgYF9fa3ZtX2dtZW1fZ2V0X3BmbmApLiBUaGlzIG1lYW5zIGl0J3MgcHJldHR5IHdpZGVzcHJlYWQuXG5cbkVzc2VudGlhbGx5LCB0aGlzIHBhdGNoIGlzIGEgZnVuY3Rpb25hbCBzaGlmdCBpbiBob3cgaHdwb2lzb24gaXMgaGFuZGxlZCBmb3IgbGFyZ2UgZm9saW9zLiBXZSdyZSBtb3ZpbmcgZnJvbSBhIGN1c3RvbSBsaXN0IChgZm9saW8tXHUwMDNlX2h1Z2V0bGJfaHdwb2lzb25gKSB0byBhIHNpbmdsZSBmbGFnIChgZm9saW8tXHUwMDNlaHVnZXRsYl9od3BvaXNvbmApIGFuZCB1c2luZyBgZm9saW9faGFzX2h3cG9pc29uZWRfcGFnZWAgaW5zdGVhZCBvZiB0aGUgb2xkIGBmb2xpb19jb250YWluX2h3cG9pc29uZWRfcGFnZWAuIEl0IGFsc28gcmVtb3ZlcyB0aGUgY3VzdG9tIGBodWdldGxiZnNfcmVhZF9pdGVyYCBhbmQgdXNlcyBgZ2VuZXJpY19maWxlX3JlYWRfaXRlcmAsIGludGVncmF0aW5nIGh3cG9pc29uIGhhbmRsaW5nIHdpdGhpbiBgZmlsZW1hcF9yZWFkYC4gVGhpcyBpcyBzaWduaWZpY2FudDsgdGhlIGNoYW5nZSBpbiB0aGUgcmVhZCBwYXRoIGlzIGEgZ29vZCBpbmRpY2F0b3Igb2Ygd2hlcmUgd2Ugc2hvdWxkIGZvY3VzLlxuXG5HaXZlbiB0aGUgZnVuY3Rpb25hbCBuYXR1cmUgb2YgdGhpcyBjaGFuZ2UsIGZ1enppbmcgaXMgZGVmaW5pdGVseSB3YXJyYW50ZWQuIE15IHByaW1hcnkgZm9jdXMgc3ltYm9scyB3aWxsIGJlOlxuXG4qICAgYGh1Z2V0bGJfcGFnZV9od3BvaXNvbmBcbiogICBgaHVnZXRsYl91bnJlZl9wYWdlX2h3cG9pc29uYFxuKiAgIGB1bnBvaXNvbl9tZW1vcnlgXG4qICAgYGZvbGlvX2NsZWFyX2h1Z2V0bGJfaHdwb2lzb25gXG5cbk5vdywgbGV0J3MgY29uc2lkZXIgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zLiBUaGUgY3JpdGljYWwgb25lcyBmb3IgdGhpcyBhcmVhIGFyZTpcblxuKiAgIGBNRU1PUllfRkFJTFVSRWAgLSBUaGlzIGlzIG5vbi1uZWdvdGlhYmxlIGZvciBod3BvaXNvbi5cbiogICBgSFVHRVRMQkZTYCAtIFByZXR0eSBvYnZpb3VzLCBnaXZlbiB0aGUgbmFtZXMuXG4qICAgYEhVR0VUTEJfUEFHRWAgLSBBbHNvIGV4cGVjdGVkLlxuKiAgIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAgLSBBbHNvLCBhZGRlZC5cbiogICBgS1ZNYCAtIFRoaXMgb25lIGlzIGltcG9ydGFudCBmb3IgYHZpcnQva3ZtL2d1ZXN0X21lbWZkLmNgLlxuXG5BSEEhIFRoZSBgTEFSR0VfRk9MSU9gIGNvbmZpZyAqaXMqIG5ldywgYnV0IGl0J3Mgc2VsZWN0ZWQgYnkgYEhVR0VUTEJfUEFHRWAgYW5kIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAuIFNvLCBpbmNsdWRpbmcgaXQgaXMgaW1wb3J0YW50IHRvIGluY2x1ZGUuXG5cbkRvdWJsZS1jaGVja2luZyBteSBjb25maWcgYXNzdW1wdGlvbnMsIGBNRU1PUllfRkFJTFVSRWAgc2VlbXMgdG8gYmUgdGhlIG9ubHkgKnJlcXVpcmVkKiBvbmUgZm9yIHRoZSBjb3JlIGh3cG9pc29uIGxvZ2ljLlxuXG5RdWljayBzaWRlLW5vdGUuIEV2ZW4gdGhvdWdoIGBzaG1lbV93cml0ZV9iZWdpbmAgYW5kIGBzaHJpbmtfZm9saW9fbGlzdGAgYXJlIG1vZGlmaWVkLCB0aGV5IGFyZSBob3QgcGF0aHMuIFdlIHNob3VsZCBkZS1wcmlvcml0aXplIHRoZW0gZm9yIG5vdy5cblxuV2FpdC4uLiBgdW5wb2lzb25fbWVtb3J5YCBpcyBleHBvcnRlZC4gVGhhdCdzIGludGVyZXN0aW5nLiBJIGtub3cgaXQgY2FuIGJlIGNhbGxlZCB0aHJvdWdoIGRlYnVnZnMgb3IgbWFkdmlzZS4gQnV0LCBhaC1oYSEgSXQncyBjYWxsZWQgZnJvbSBgaHdwb2lzb25fdW5wb2lzb25gIGluIGBtbS9od3BvaXNvbi1pbmplY3QuY2AuIEkgbmVlZCB0byBlbnN1cmUgdGhhdCBgSFdQT0lTT05fSU5KRUNUYCBpcyBlbmFibGVkIGZvciB0aGlzIGZ1enppbmcgZWZmb3J0IHRvIGNvdmVyIHRoYXQgY29kZSBwYXRoLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNjYxMiwiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc1MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNFQxODo0NzozOS45MzYxOTkzMDlaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyNDY3NTY0MTYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEhXUE9JU09OX0lOSkVDVFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9LY29uZmlnPTc3Nz1jb25maWcgTUVNT1JZX0ZBSUxVUkVcXG4tLVxcbm1tL0tjb25maWctNzg3LVxcbm1tL0tjb25maWc6Nzg4OmNvbmZpZyBIV1BPSVNPTl9JTkpFQ1RcXG5tbS9LY29uZmlnLTc4OS1cXHR0cmlzdGF0ZSBcXFwiSFdQb2lzb24gcGFnZXMgaW5qZWN0b3JcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI0VDE4OjQ3OjQyLjE4Mjk2NTExNFoiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3NjEwNzc3NzgwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIEhXUE9JU09OIEZ1enppbmcgUG90ZW50aWFsKipcblxuT2theSwgc28gSSdtIHRoaW5raW5nIGFib3V0IGhvdyB0byBiZXN0IGZ1enogdGhlIGBod3BvaXNvbmAgZnVuY3Rpb25hbGl0eS4gWWVzLCB1c2luZyBgSFdQT0lTT05fSU5KRUNUYCBpcyBkZWZpbml0ZWx5IGEgZ29vZCBzdGFydGluZyBwb2ludCBmb3IgdGhhdC4gXG5cblRoZSBmaXJzdCB0aGluZyBJIG5lZWQgdG8gY29uZmlybSBpcyB0aGF0IGBNQURWX0hXUE9JU09OYCBpcyBldmVuIGF2YWlsYWJsZSBpbiB0aGUgY3VycmVudCBjb25maWd1cmF0aW9uLiBBaCwgeWVzLCBpdCdzIHRpZWQgdG8gYENPTkZJR19NRU1PUllfRkFJTFVSRWAsIHNvIHRoYXQncyB0aGUga2V5LiAgTm93LCB3aGF0IG90aGVyIGNvbmZpZyBvcHRpb25zIGFyZSBsaWtlbHkgcmVsZXZhbnQgaGVyZT8gIExldCBtZSBzZWU6XG5cbiogICBgTUVNT1JZX0ZBSUxVUkVgIC0gb2J2aW91c2x5LlxuKiAgIGBIV1BPSVNPTl9JTkpFQ1RgIC0gZm9yIGluamVjdGlvbiwgb2YgY291cnNlLlxuKiAgIGBIVUdFVExCRlNgIC0gYmVjYXVzZSB3ZSBhcmUgdGhpbmtpbmcgYWJvdXQgaHVnZXRsYiBwYWdlcy5cbiogICBgSFVHRVRMQl9QQUdFYCAtIGFnYWluLCBmb3IgdGhlIHBhZ2VzIHRoZW1zZWx2ZXMuXG4qICAgYFRSQU5TUEFSRU5UX0hVR0VQQUdFYCAtIG1pZ2h0IG9wZW4gdXAgc29tZSBpbnRlcmVzdGluZyBmdXp6aW5nIHZlY3RvcnMuXG5cbk5vdywgbGV0J3MgcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGNyaXRpY2FsIHN5bWJvbHMgSSBzaG91bGQgYmUgZm9jdXNpbmcgb24uIFdlIGhhdmU6XG5cbiogICBgaHVnZXRsYl9wYWdlX2h3cG9pc29uYFxuKiAgIGBodWdldGxiX3VucmVmX3BhZ2VfaHdwb2lzb25gXG4qICAgYHVucG9pc29uX21lbW9yeWBcbiogICBgZm9saW9fY2xlYXJfaHVnZXRsYl9od3BvaXNvbmBcblxuQXJlIHRoZXJlIGFueSBvdGhlciBmdW5jdGlvbnMgdGhhdCBtaWdodCBiZSB1c2VmdWwgdGFyZ2V0cz8gTGV0J3MgZGlnIGRlZXBlci4gT2ssIGxvb2tpbmcgaW50byBgbW0vaHVnZXRsYi5jYCwgSSBzZWUgYGh1Z2V0bGJfZm9saW9fbWFwcGluZ19sb2NrX3dyaXRlYCBoYXMgYmVlbiBtb2RpZmllZCBpbiB0aGUgY29tbWl0LiBBbmQgaW4gYG1tL21lbW9yeS1mYWlsdXJlLmNgLCB0aGVyZSBhcmUgcXVpdGUgYSBmZXcgc3RhdGljIGZ1bmN0aW9ucyB0aGF0IHdpbGwgbm90IGJlIHVzZWZ1bCBmb3IgdXM6XG5cbiogICBgcHJlY2lzZV9wYWdlX3BvaXNvbmVkYCAoc3RhdGljKVxuKiAgIGBodWdldGxiX3NldF9wb2lzb25gIChzdGF0aWMpXG4qICAgYGh1Z2V0bGJfY2xlYXJfcG9pc29uYCAoc3RhdGljKVxuKiAgIGBodWdldGxiX3VwZGF0ZV9od3BvaXNvbmAgKHN0YXRpYylcblxuU2luY2Ugd2UgYXJlIGxvb2tpbmcgZm9yIGZ1bmN0aW9ucyB3ZSBjYW4gZGlyZWN0bHkgdGFyZ2V0IGZvciBmdXp6aW5nLCBJIHNob3VsZCBvbmx5IGNvbmNlcm4gbXlzZWxmIHdpdGggZnVuY3Rpb25zIHRoYXQgYXJlIGV4cG9ydGVkIG9yIGFyZSBub24tc3RhdGljLiBUaG9zZSA0IGZ1bmN0aW9ucyBJIG1lbnRpb25lZCBpbml0aWFsbHkgYXJlIHRoZSBvbmVzLlxuXG5BbHJpZ2h0LCB0aGF0J3MgYSBnb29kIG92ZXJ2aWV3LiBMZXQncyBjYWxsIHRoZSBgc2V0LXJlc3VsdHNgIGZ1bmN0aW9uIHRvIHN1bW1hcml6ZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjgxNjMsIk91dHB1dFRva2VucyI6MjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mjg4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI0VDE4OjQ3OjQ5Ljc5Mzc0NTk2NFoiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc0MDQ5NDYzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJNRU1PUllfRkFJTFVSRVwiLFxuICAgIFwiSFdQT0lTT05fSU5KRUNUXCIsXG4gICAgXCJIVUdFVExCRlNcIixcbiAgICBcIkhVR0VUTEJfUEFHRVwiLFxuICAgIFwiVFJBTlNQQVJFTlRfSFVHRVBBR0VcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJodWdldGxiX3BhZ2VfaHdwb2lzb25cIixcbiAgICBcImh1Z2V0bGJfdW5yZWZfcGFnZV9od3BvaXNvblwiLFxuICAgIFwidW5wb2lzb25fbWVtb3J5XCIsXG4gICAgXCJmb2xpb19jbGVhcl9odWdldGxiX2h3cG9pc29uXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgaG93IGhhcmR3YXJlIHBvaXNvbmVkIChIV1BPSVNPTikgcGFnZXMgYXJlIHRyYWNrZWQgYW5kIGhhbmRsZWQgd2l0aGluIGxhcmdlIGZvbGlvcywgc3BlY2lmaWNhbGx5IGFmZmVjdGluZyBodWdldGxiZnMgYW5kIGZpbGVtYXAgcmVhZCBvcGVyYXRpb25zLiBJdCBpbnRyb2R1Y2VzIG5ldyBsb2dpYyB0byB0cmFjayBwb2lzb25lZCBwYWdlcyB1c2luZyBgZm9saW8tXFx1MDAzZWh1Z2V0bGJfaHdwb2lzb25gIGFuZCByZXBsYWNlcyB0aGUgY3VzdG9tIGBodWdldGxiZnNfcmVhZF9pdGVyYCB3aXRoIGBnZW5lcmljX2ZpbGVfcmVhZF9pdGVyYCwgaGFuZGxpbmcgaHdwb2lzb24gZGlyZWN0bHkgaW4gYGZpbGVtYXBfcmVhZGAuIFRoZXNlIGFyZSByZWFjaGFibGUsIGZ1bmN0aW9uYWwgY2hhbmdlcyBpbiBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBodWdldGxiZnMuIEZ1enppbmcgc2hvdWxkIGZvY3VzIG9uIHRoZSBuZXcgaHdwb2lzb24gdHJhY2tpbmcgZnVuY3Rpb25zIGFuZCB1bnBvaXNvbmluZyBsb2dpYy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJNRU1PUllfRkFJTFVSRVwiLFxuICAgIFwiSFdQT0lTT05fSU5KRUNUXCIsXG4gICAgXCJIVUdFVExCRlNcIixcbiAgICBcIkhVR0VUTEJfUEFHRVwiLFxuICAgIFwiVFJBTlNQQVJFTlRfSFVHRVBBR0VcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJodWdldGxiX3BhZ2VfaHdwb2lzb25cIixcbiAgICBcImh1Z2V0bGJfdW5yZWZfcGFnZV9od3BvaXNvblwiLFxuICAgIFwidW5wb2lzb25fbWVtb3J5XCIsXG4gICAgXCJmb2xpb19jbGVhcl9odWdldGxiX2h3cG9pc29uXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgaG93IGhhcmR3YXJlIHBvaXNvbmVkIChIV1BPSVNPTikgcGFnZXMgYXJlIHRyYWNrZWQgYW5kIGhhbmRsZWQgd2l0aGluIGxhcmdlIGZvbGlvcywgc3BlY2lmaWNhbGx5IGFmZmVjdGluZyBodWdldGxiZnMgYW5kIGZpbGVtYXAgcmVhZCBvcGVyYXRpb25zLiBJdCBpbnRyb2R1Y2VzIG5ldyBsb2dpYyB0byB0cmFjayBwb2lzb25lZCBwYWdlcyB1c2luZyBgZm9saW8tXFx1MDAzZWh1Z2V0bGJfaHdwb2lzb25gIGFuZCByZXBsYWNlcyB0aGUgY3VzdG9tIGBodWdldGxiZnNfcmVhZF9pdGVyYCB3aXRoIGBnZW5lcmljX2ZpbGVfcmVhZF9pdGVyYCwgaGFuZGxpbmcgaHdwb2lzb24gZGlyZWN0bHkgaW4gYGZpbGVtYXBfcmVhZGAuIFRoZXNlIGFyZSByZWFjaGFibGUsIGZ1bmN0aW9uYWwgY2hhbmdlcyBpbiBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBodWdldGxiZnMuIEZ1enppbmcgc2hvdWxkIGZvY3VzIG9uIHRoZSBuZXcgaHdwb2lzb24gdHJhY2tpbmcgZnVuY3Rpb25zIGFuZCB1bnBvaXNvbmluZyBsb2dpYy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },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-workflowsdptw[1] Phase: Succeeded StartedAt: 2026-07-24 18:48:39 +0000 UTC FinishedAt: 2026-07-24 18:48:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsdptw[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-24 18:48:39 +0000 UTC FinishedAt: 2026-07-24 18:48:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsdptw[2] Phase: Succeeded StartedAt: 2026-07-24 18:48:39 +0000 UTC FinishedAt: 2026-07-24 23:34:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsdptw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","HWPOISON_INJECT","HUGETLBFS","HUGETLB_PAGE","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["hugetlb_page_hwpoison","hugetlb_unref_page_hwpoison","unpoison_memory","folio_clear_hugetlb_hwpoison"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","HWPOISON_INJECT","HUGETLBFS","HUGETLB_PAGE","TRANSPARENT_HUGEPAGE"],"series_id":"4b3a4f52-06f4-4a41-872f-dde0771be8ef","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:{"findings":["7a0cb565-4340-4daf-8de2-06f5b1d2af93","a77d3cb3-6a99-45a3-bd83-722c3f7fcd2c"]},track:KASAN) Phase: Succeeded StartedAt: 2026-07-24 18:48:39 +0000 UTC FinishedAt: 2026-07-24 23:34:53 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","HWPOISON_INJECT","HUGETLBFS","HUGETLB_PAGE","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["hugetlb_page_hwpoison","hugetlb_unref_page_hwpoison","unpoison_memory","folio_clear_hugetlb_hwpoison"],"skip_cover_check":true},"patched":{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","HWPOISON_INJECT","HUGETLBFS","HUGETLB_PAGE","TRANSPARENT_HUGEPAGE"],"series_id":"4b3a4f52-06f4-4a41-872f-dde0771be8ef","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},"retest":{"findings":["7a0cb565-4340-4daf-8de2-06f5b1d2af93","a77d3cb3-6a99-45a3-bd83-722c3f7fcd2c"]},"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowsdptw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","HWPOISON_INJECT","HUGETLBFS","HUGETLB_PAGE","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["hugetlb_page_hwpoison","hugetlb_unref_page_hwpoison","unpoison_memory","folio_clear_hugetlb_hwpoison"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","HWPOISON_INJECT","HUGETLBFS","HUGETLB_PAGE","TRANSPARENT_HUGEPAGE"],"series_id":"4b3a4f52-06f4-4a41-872f-dde0771be8ef","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:{"findings":["7a0cb565-4340-4daf-8de2-06f5b1d2af93","a77d3cb3-6a99-45a3-bd83-722c3f7fcd2c"]},track:KASAN)[0] Phase: Succeeded StartedAt: 2026-07-24 18:48:39 +0000 UTC FinishedAt: 2026-07-24 18:48:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsdptw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","HWPOISON_INJECT","HUGETLBFS","HUGETLB_PAGE","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["hugetlb_page_hwpoison","hugetlb_unref_page_hwpoison","unpoison_memory","folio_clear_hugetlb_hwpoison"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","HWPOISON_INJECT","HUGETLBFS","HUGETLB_PAGE","TRANSPARENT_HUGEPAGE"],"series_id":"4b3a4f52-06f4-4a41-872f-dde0771be8ef","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:{"findings":["7a0cb565-4340-4daf-8de2-06f5b1d2af93","a77d3cb3-6a99-45a3-bd83-722c3f7fcd2c"]},track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-07-24 18:48:39 +0000 UTC FinishedAt: 2026-07-24 18:48:48 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","HWPOISON_INJECT","HUGETLBFS","HUGETLB_PAGE","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-workflowsdptw/series-workflowsdptw-convert-artifact-3665916435/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowsdptw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","HWPOISON_INJECT","HUGETLBFS","HUGETLB_PAGE","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["hugetlb_page_hwpoison","hugetlb_unref_page_hwpoison","unpoison_memory","folio_clear_hugetlb_hwpoison"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","HWPOISON_INJECT","HUGETLBFS","HUGETLB_PAGE","TRANSPARENT_HUGEPAGE"],"series_id":"4b3a4f52-06f4-4a41-872f-dde0771be8ef","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:{"findings":["7a0cb565-4340-4daf-8de2-06f5b1d2af93","a77d3cb3-6a99-45a3-bd83-722c3f7fcd2c"]},track:KASAN)[1] Phase: Succeeded StartedAt: 2026-07-24 18:48:59 +0000 UTC FinishedAt: 2026-07-24 19:37:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsdptw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","HWPOISON_INJECT","HUGETLBFS","HUGETLB_PAGE","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["hugetlb_page_hwpoison","hugetlb_unref_page_hwpoison","unpoison_memory","folio_clear_hugetlb_hwpoison"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","HWPOISON_INJECT","HUGETLBFS","HUGETLB_PAGE","TRANSPARENT_HUGEPAGE"],"series_id":"4b3a4f52-06f4-4a41-872f-dde0771be8ef","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:{"findings":["7a0cb565-4340-4daf-8de2-06f5b1d2af93","a77d3cb3-6a99-45a3-bd83-722c3f7fcd2c"]},track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-07-24 18:48:59 +0000 UTC FinishedAt: 2026-07-24 19:37:01 +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:*07bea7eb-6534-44aa-b67a-b18c66b17ab2,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-workflowsdptw/series-workflowsdptw-convert-artifact-3665916435/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": "143a854d-e92e-42dd-992e-7e01b963cbd0", "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-workflowsdptw/series-workflowsdptw-build-action-2815790913/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowsdptw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","HWPOISON_INJECT","HUGETLBFS","HUGETLB_PAGE","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["hugetlb_page_hwpoison","hugetlb_unref_page_hwpoison","unpoison_memory","folio_clear_hugetlb_hwpoison"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","HWPOISON_INJECT","HUGETLBFS","HUGETLB_PAGE","TRANSPARENT_HUGEPAGE"],"series_id":"4b3a4f52-06f4-4a41-872f-dde0771be8ef","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:{"findings":["7a0cb565-4340-4daf-8de2-06f5b1d2af93","a77d3cb3-6a99-45a3-bd83-722c3f7fcd2c"]},track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-07-24 18:48:59 +0000 UTC FinishedAt: 2026-07-24 19:36:51 +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:*07bea7eb-6534-44aa-b67a-b18c66b17ab2,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-workflowsdptw/series-workflowsdptw-convert-artifact-3665916435/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": "143a854d-e92e-42dd-992e-7e01b963cbd0", "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-workflowsdptw/series-workflowsdptw-build-action-2815790913/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowsdptw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","HWPOISON_INJECT","HUGETLBFS","HUGETLB_PAGE","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["hugetlb_page_hwpoison","hugetlb_unref_page_hwpoison","unpoison_memory","folio_clear_hugetlb_hwpoison"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","HWPOISON_INJECT","HUGETLBFS","HUGETLB_PAGE","TRANSPARENT_HUGEPAGE"],"series_id":"4b3a4f52-06f4-4a41-872f-dde0771be8ef","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:{"findings":["7a0cb565-4340-4daf-8de2-06f5b1d2af93","a77d3cb3-6a99-45a3-bd83-722c3f7fcd2c"]},track:KASAN)[2] Phase: Succeeded StartedAt: 2026-07-24 19:37:01 +0000 UTC FinishedAt: 2026-07-24 19:37:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsdptw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","HWPOISON_INJECT","HUGETLBFS","HUGETLB_PAGE","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["hugetlb_page_hwpoison","hugetlb_unref_page_hwpoison","unpoison_memory","folio_clear_hugetlb_hwpoison"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","HWPOISON_INJECT","HUGETLBFS","HUGETLB_PAGE","TRANSPARENT_HUGEPAGE"],"series_id":"4b3a4f52-06f4-4a41-872f-dde0771be8ef","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:{"findings":["7a0cb565-4340-4daf-8de2-06f5b1d2af93","a77d3cb3-6a99-45a3-bd83-722c3f7fcd2c"]},track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-07-24 19:37:01 +0000 UTC FinishedAt: 2026-07-24 19:37:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsdptw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","HWPOISON_INJECT","HUGETLBFS","HUGETLB_PAGE","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["hugetlb_page_hwpoison","hugetlb_unref_page_hwpoison","unpoison_memory","folio_clear_hugetlb_hwpoison"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","HWPOISON_INJECT","HUGETLBFS","HUGETLB_PAGE","TRANSPARENT_HUGEPAGE"],"series_id":"4b3a4f52-06f4-4a41-872f-dde0771be8ef","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:{"findings":["7a0cb565-4340-4daf-8de2-06f5b1d2af93","a77d3cb3-6a99-45a3-bd83-722c3f7fcd2c"]},track:KASAN)[3] Phase: Succeeded StartedAt: 2026-07-24 19:37:01 +0000 UTC FinishedAt: 2026-07-24 19:37:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsdptw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","HWPOISON_INJECT","HUGETLBFS","HUGETLB_PAGE","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["hugetlb_page_hwpoison","hugetlb_unref_page_hwpoison","unpoison_memory","folio_clear_hugetlb_hwpoison"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","HWPOISON_INJECT","HUGETLBFS","HUGETLB_PAGE","TRANSPARENT_HUGEPAGE"],"series_id":"4b3a4f52-06f4-4a41-872f-dde0771be8ef","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:{"findings":["7a0cb565-4340-4daf-8de2-06f5b1d2af93","a77d3cb3-6a99-45a3-bd83-722c3f7fcd2c"]},track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-07-24 19:37:01 +0000 UTC FinishedAt: 2026-07-24 19:37:07 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","HWPOISON_INJECT","HUGETLBFS","HUGETLB_PAGE","TRANSPARENT_HUGEPAGE"],"series_id":"4b3a4f52-06f4-4a41-872f-dde0771be8ef","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-workflowsdptw/series-workflowsdptw-convert-artifact-2238335242/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowsdptw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","HWPOISON_INJECT","HUGETLBFS","HUGETLB_PAGE","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["hugetlb_page_hwpoison","hugetlb_unref_page_hwpoison","unpoison_memory","folio_clear_hugetlb_hwpoison"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","HWPOISON_INJECT","HUGETLBFS","HUGETLB_PAGE","TRANSPARENT_HUGEPAGE"],"series_id":"4b3a4f52-06f4-4a41-872f-dde0771be8ef","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:{"findings":["7a0cb565-4340-4daf-8de2-06f5b1d2af93","a77d3cb3-6a99-45a3-bd83-722c3f7fcd2c"]},track:KASAN)[4] Phase: Succeeded StartedAt: 2026-07-24 19:37:11 +0000 UTC FinishedAt: 2026-07-24 19:39:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsdptw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","HWPOISON_INJECT","HUGETLBFS","HUGETLB_PAGE","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["hugetlb_page_hwpoison","hugetlb_unref_page_hwpoison","unpoison_memory","folio_clear_hugetlb_hwpoison"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","HWPOISON_INJECT","HUGETLBFS","HUGETLB_PAGE","TRANSPARENT_HUGEPAGE"],"series_id":"4b3a4f52-06f4-4a41-872f-dde0771be8ef","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:{"findings":["7a0cb565-4340-4daf-8de2-06f5b1d2af93","a77d3cb3-6a99-45a3-bd83-722c3f7fcd2c"]},track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-07-24 19:37:11 +0000 UTC FinishedAt: 2026-07-24 19:39:07 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*143a854d-e92e-42dd-992e-7e01b963cbd0,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-workflowsdptw/series-workflowsdptw-build-action-2815790913/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-workflowsdptw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","HWPOISON_INJECT","HUGETLBFS","HUGETLB_PAGE","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["hugetlb_page_hwpoison","hugetlb_unref_page_hwpoison","unpoison_memory","folio_clear_hugetlb_hwpoison"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","HWPOISON_INJECT","HUGETLBFS","HUGETLB_PAGE","TRANSPARENT_HUGEPAGE"],"series_id":"4b3a4f52-06f4-4a41-872f-dde0771be8ef","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:{"findings":["7a0cb565-4340-4daf-8de2-06f5b1d2af93","a77d3cb3-6a99-45a3-bd83-722c3f7fcd2c"]},track:KASAN)[5] Phase: Succeeded StartedAt: 2026-07-24 19:39:17 +0000 UTC FinishedAt: 2026-07-24 19:39:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsdptw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","HWPOISON_INJECT","HUGETLBFS","HUGETLB_PAGE","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["hugetlb_page_hwpoison","hugetlb_unref_page_hwpoison","unpoison_memory","folio_clear_hugetlb_hwpoison"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","HWPOISON_INJECT","HUGETLBFS","HUGETLB_PAGE","TRANSPARENT_HUGEPAGE"],"series_id":"4b3a4f52-06f4-4a41-872f-dde0771be8ef","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:{"findings":["7a0cb565-4340-4daf-8de2-06f5b1d2af93","a77d3cb3-6a99-45a3-bd83-722c3f7fcd2c"]},track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-07-24 19:39:17 +0000 UTC FinishedAt: 2026-07-24 19:39:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsdptw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","HWPOISON_INJECT","HUGETLBFS","HUGETLB_PAGE","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["hugetlb_page_hwpoison","hugetlb_unref_page_hwpoison","unpoison_memory","folio_clear_hugetlb_hwpoison"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","HWPOISON_INJECT","HUGETLBFS","HUGETLB_PAGE","TRANSPARENT_HUGEPAGE"],"series_id":"4b3a4f52-06f4-4a41-872f-dde0771be8ef","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:{"findings":["7a0cb565-4340-4daf-8de2-06f5b1d2af93","a77d3cb3-6a99-45a3-bd83-722c3f7fcd2c"]},track:KASAN)[6] Phase: Succeeded StartedAt: 2026-07-24 19:39:17 +0000 UTC FinishedAt: 2026-07-24 20:24:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsdptw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","HWPOISON_INJECT","HUGETLBFS","HUGETLB_PAGE","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["hugetlb_page_hwpoison","hugetlb_unref_page_hwpoison","unpoison_memory","folio_clear_hugetlb_hwpoison"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","HWPOISON_INJECT","HUGETLBFS","HUGETLB_PAGE","TRANSPARENT_HUGEPAGE"],"series_id":"4b3a4f52-06f4-4a41-872f-dde0771be8ef","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:{"findings":["7a0cb565-4340-4daf-8de2-06f5b1d2af93","a77d3cb3-6a99-45a3-bd83-722c3f7fcd2c"]},track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-07-24 19:39:17 +0000 UTC FinishedAt: 2026-07-24 20:24:19 +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:*07bea7eb-6534-44aa-b67a-b18c66b17ab2,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-workflowsdptw/series-workflowsdptw-convert-artifact-2238335242/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": "bb071828-9749-428c-a78c-fc39b0b5caf2", "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-workflowsdptw/series-workflowsdptw-build-action-2427029294/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowsdptw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","HWPOISON_INJECT","HUGETLBFS","HUGETLB_PAGE","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["hugetlb_page_hwpoison","hugetlb_unref_page_hwpoison","unpoison_memory","folio_clear_hugetlb_hwpoison"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","HWPOISON_INJECT","HUGETLBFS","HUGETLB_PAGE","TRANSPARENT_HUGEPAGE"],"series_id":"4b3a4f52-06f4-4a41-872f-dde0771be8ef","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:{"findings":["7a0cb565-4340-4daf-8de2-06f5b1d2af93","a77d3cb3-6a99-45a3-bd83-722c3f7fcd2c"]},track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-07-24 19:39:17 +0000 UTC FinishedAt: 2026-07-24 20:24:09 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*07bea7eb-6534-44aa-b67a-b18c66b17ab2,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-workflowsdptw/series-workflowsdptw-convert-artifact-2238335242/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": "bb071828-9749-428c-a78c-fc39b0b5caf2", "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-workflowsdptw/series-workflowsdptw-build-action-2427029294/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowsdptw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","HWPOISON_INJECT","HUGETLBFS","HUGETLB_PAGE","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["hugetlb_page_hwpoison","hugetlb_unref_page_hwpoison","unpoison_memory","folio_clear_hugetlb_hwpoison"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","HWPOISON_INJECT","HUGETLBFS","HUGETLB_PAGE","TRANSPARENT_HUGEPAGE"],"series_id":"4b3a4f52-06f4-4a41-872f-dde0771be8ef","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:{"findings":["7a0cb565-4340-4daf-8de2-06f5b1d2af93","a77d3cb3-6a99-45a3-bd83-722c3f7fcd2c"]},track:KASAN)[7] Phase: Succeeded StartedAt: 2026-07-24 20:24:19 +0000 UTC FinishedAt: 2026-07-24 20:24:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsdptw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","HWPOISON_INJECT","HUGETLBFS","HUGETLB_PAGE","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["hugetlb_page_hwpoison","hugetlb_unref_page_hwpoison","unpoison_memory","folio_clear_hugetlb_hwpoison"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","HWPOISON_INJECT","HUGETLBFS","HUGETLB_PAGE","TRANSPARENT_HUGEPAGE"],"series_id":"4b3a4f52-06f4-4a41-872f-dde0771be8ef","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:{"findings":["7a0cb565-4340-4daf-8de2-06f5b1d2af93","a77d3cb3-6a99-45a3-bd83-722c3f7fcd2c"]},track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-07-24 20:24:19 +0000 UTC FinishedAt: 2026-07-24 20:24:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsdptw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","HWPOISON_INJECT","HUGETLBFS","HUGETLB_PAGE","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["hugetlb_page_hwpoison","hugetlb_unref_page_hwpoison","unpoison_memory","folio_clear_hugetlb_hwpoison"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","HWPOISON_INJECT","HUGETLBFS","HUGETLB_PAGE","TRANSPARENT_HUGEPAGE"],"series_id":"4b3a4f52-06f4-4a41-872f-dde0771be8ef","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:{"findings":["7a0cb565-4340-4daf-8de2-06f5b1d2af93","a77d3cb3-6a99-45a3-bd83-722c3f7fcd2c"]},track:KASAN)[8] Phase: Succeeded StartedAt: 2026-07-24 20:24:19 +0000 UTC FinishedAt: 2026-07-24 20:26:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsdptw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","HWPOISON_INJECT","HUGETLBFS","HUGETLB_PAGE","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["hugetlb_page_hwpoison","hugetlb_unref_page_hwpoison","unpoison_memory","folio_clear_hugetlb_hwpoison"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","HWPOISON_INJECT","HUGETLBFS","HUGETLB_PAGE","TRANSPARENT_HUGEPAGE"],"series_id":"4b3a4f52-06f4-4a41-872f-dde0771be8ef","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:{"findings":["7a0cb565-4340-4daf-8de2-06f5b1d2af93","a77d3cb3-6a99-45a3-bd83-722c3f7fcd2c"]},track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-07-24 20:24:19 +0000 UTC FinishedAt: 2026-07-24 20:26:22 +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:*bb071828-9749-428c-a78c-fc39b0b5caf2,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-workflowsdptw/series-workflowsdptw-build-action-2427029294/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-workflowsdptw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","HWPOISON_INJECT","HUGETLBFS","HUGETLB_PAGE","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["hugetlb_page_hwpoison","hugetlb_unref_page_hwpoison","unpoison_memory","folio_clear_hugetlb_hwpoison"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","HWPOISON_INJECT","HUGETLBFS","HUGETLB_PAGE","TRANSPARENT_HUGEPAGE"],"series_id":"4b3a4f52-06f4-4a41-872f-dde0771be8ef","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:{"findings":["7a0cb565-4340-4daf-8de2-06f5b1d2af93","a77d3cb3-6a99-45a3-bd83-722c3f7fcd2c"]},track:KASAN)[10] Phase: Succeeded StartedAt: 2026-07-24 20:26:32 +0000 UTC FinishedAt: 2026-07-24 23:34:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsdptw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","HWPOISON_INJECT","HUGETLBFS","HUGETLB_PAGE","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["hugetlb_page_hwpoison","hugetlb_unref_page_hwpoison","unpoison_memory","folio_clear_hugetlb_hwpoison"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","HWPOISON_INJECT","HUGETLBFS","HUGETLB_PAGE","TRANSPARENT_HUGEPAGE"],"series_id":"4b3a4f52-06f4-4a41-872f-dde0771be8ef","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:{"findings":["7a0cb565-4340-4daf-8de2-06f5b1d2af93","a77d3cb3-6a99-45a3-bd83-722c3f7fcd2c"]},track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-07-24 20:26:32 +0000 UTC FinishedAt: 2026-07-24 23:34:53 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["hugetlb_page_hwpoison","hugetlb_unref_page_hwpoison","unpoison_memory","folio_clear_hugetlb_hwpoison"],"skip_cover_check":true},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:track,Default:nil,Value:*KASAN,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:base-build-id,Default:nil,Value:*143a854d-e92e-42dd-992e-7e01b963cbd0,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*bb071828-9749-428c-a78c-fc39b0b5caf2,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-workflowsdptw/series-workflowsdptw-build-action-2815790913/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-workflowsdptw/series-workflowsdptw-build-action-2427029294/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowsdptw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","HWPOISON_INJECT","HUGETLBFS","HUGETLB_PAGE","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["hugetlb_page_hwpoison","hugetlb_unref_page_hwpoison","unpoison_memory","folio_clear_hugetlb_hwpoison"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","HWPOISON_INJECT","HUGETLBFS","HUGETLB_PAGE","TRANSPARENT_HUGEPAGE"],"series_id":"4b3a4f52-06f4-4a41-872f-dde0771be8ef","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:{"findings":["7a0cb565-4340-4daf-8de2-06f5b1d2af93","a77d3cb3-6a99-45a3-bd83-722c3f7fcd2c"]},track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-07-24 20:26:32 +0000 UTC FinishedAt: 2026-07-24 20:26:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsdptw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","HWPOISON_INJECT","HUGETLBFS","HUGETLB_PAGE","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["hugetlb_page_hwpoison","hugetlb_unref_page_hwpoison","unpoison_memory","folio_clear_hugetlb_hwpoison"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","HWPOISON_INJECT","HUGETLBFS","HUGETLB_PAGE","TRANSPARENT_HUGEPAGE"],"series_id":"4b3a4f52-06f4-4a41-872f-dde0771be8ef","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:{"findings":["7a0cb565-4340-4daf-8de2-06f5b1d2af93","a77d3cb3-6a99-45a3-bd83-722c3f7fcd2c"]},track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-07-24 20:26:32 +0000 UTC FinishedAt: 2026-07-24 20:26:38 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["hugetlb_page_hwpoison","hugetlb_unref_page_hwpoison","unpoison_memory","folio_clear_hugetlb_hwpoison"],"skip_cover_check":true},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowsdptw/series-workflowsdptw-convert-artifact-3350513823/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowsdptw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","HWPOISON_INJECT","HUGETLBFS","HUGETLB_PAGE","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["hugetlb_page_hwpoison","hugetlb_unref_page_hwpoison","unpoison_memory","folio_clear_hugetlb_hwpoison"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","HWPOISON_INJECT","HUGETLBFS","HUGETLB_PAGE","TRANSPARENT_HUGEPAGE"],"series_id":"4b3a4f52-06f4-4a41-872f-dde0771be8ef","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:{"findings":["7a0cb565-4340-4daf-8de2-06f5b1d2af93","a77d3cb3-6a99-45a3-bd83-722c3f7fcd2c"]},track:KASAN)[10].run-retest Phase: Succeeded StartedAt: 2026-07-24 20:26:32 +0000 UTC FinishedAt: 2026-07-24 20:52:43 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:retest-data,Default:nil,Value:*{"findings":["7a0cb565-4340-4daf-8de2-06f5b1d2af93","a77d3cb3-6a99-45a3-bd83-722c3f7fcd2c"]},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:base-build-id,Default:nil,Value:*143a854d-e92e-42dd-992e-7e01b963cbd0,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*bb071828-9749-428c-a78c-fc39b0b5caf2,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:track,Default:nil,Value:*KASAN,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:base-kernel,Path:,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowsdptw/series-workflowsdptw-build-action-2815790913/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-workflowsdptw/series-workflowsdptw-build-action-2427029294/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowsdptw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","HWPOISON_INJECT","HUGETLBFS","HUGETLB_PAGE","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["hugetlb_page_hwpoison","hugetlb_unref_page_hwpoison","unpoison_memory","folio_clear_hugetlb_hwpoison"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","HWPOISON_INJECT","HUGETLBFS","HUGETLB_PAGE","TRANSPARENT_HUGEPAGE"],"series_id":"4b3a4f52-06f4-4a41-872f-dde0771be8ef","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:{"findings":["7a0cb565-4340-4daf-8de2-06f5b1d2af93","a77d3cb3-6a99-45a3-bd83-722c3f7fcd2c"]},track:KASAN)[10].run-retest[0] Phase: Succeeded StartedAt: 2026-07-24 20:26:32 +0000 UTC FinishedAt: 2026-07-24 20:26:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsdptw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","HWPOISON_INJECT","HUGETLBFS","HUGETLB_PAGE","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["hugetlb_page_hwpoison","hugetlb_unref_page_hwpoison","unpoison_memory","folio_clear_hugetlb_hwpoison"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","HWPOISON_INJECT","HUGETLBFS","HUGETLB_PAGE","TRANSPARENT_HUGEPAGE"],"series_id":"4b3a4f52-06f4-4a41-872f-dde0771be8ef","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:{"findings":["7a0cb565-4340-4daf-8de2-06f5b1d2af93","a77d3cb3-6a99-45a3-bd83-722c3f7fcd2c"]},track:KASAN)[10].run-retest[0].save-retest-task Phase: Succeeded StartedAt: 2026-07-24 20:26:32 +0000 UTC FinishedAt: 2026-07-24 20:26:37 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"findings":["7a0cb565-4340-4daf-8de2-06f5b1d2af93","a77d3cb3-6a99-45a3-bd83-722c3f7fcd2c"]},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-workflowsdptw/series-workflowsdptw-convert-artifact-3857604968/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowsdptw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","HWPOISON_INJECT","HUGETLBFS","HUGETLB_PAGE","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["hugetlb_page_hwpoison","hugetlb_unref_page_hwpoison","unpoison_memory","folio_clear_hugetlb_hwpoison"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","HWPOISON_INJECT","HUGETLBFS","HUGETLB_PAGE","TRANSPARENT_HUGEPAGE"],"series_id":"4b3a4f52-06f4-4a41-872f-dde0771be8ef","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:{"findings":["7a0cb565-4340-4daf-8de2-06f5b1d2af93","a77d3cb3-6a99-45a3-bd83-722c3f7fcd2c"]},track:KASAN)[9] Phase: Succeeded StartedAt: 2026-07-24 20:26:32 +0000 UTC FinishedAt: 2026-07-24 20:26:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsdptw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","HWPOISON_INJECT","HUGETLBFS","HUGETLB_PAGE","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["hugetlb_page_hwpoison","hugetlb_unref_page_hwpoison","unpoison_memory","folio_clear_hugetlb_hwpoison"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","HWPOISON_INJECT","HUGETLBFS","HUGETLB_PAGE","TRANSPARENT_HUGEPAGE"],"series_id":"4b3a4f52-06f4-4a41-872f-dde0771be8ef","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:{"findings":["7a0cb565-4340-4daf-8de2-06f5b1d2af93","a77d3cb3-6a99-45a3-bd83-722c3f7fcd2c"]},track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-07-24 20:26:32 +0000 UTC FinishedAt: 2026-07-24 20:26:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsdptw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","HWPOISON_INJECT","HUGETLBFS","HUGETLB_PAGE","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["hugetlb_page_hwpoison","hugetlb_unref_page_hwpoison","unpoison_memory","folio_clear_hugetlb_hwpoison"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","HWPOISON_INJECT","HUGETLBFS","HUGETLB_PAGE","TRANSPARENT_HUGEPAGE"],"series_id":"4b3a4f52-06f4-4a41-872f-dde0771be8ef","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:{"findings":["7a0cb565-4340-4daf-8de2-06f5b1d2af93","a77d3cb3-6a99-45a3-bd83-722c3f7fcd2c"]},track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-07-24 20:26:42 +0000 UTC FinishedAt: 2026-07-24 23:34:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsdptw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","HWPOISON_INJECT","HUGETLBFS","HUGETLB_PAGE","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["hugetlb_page_hwpoison","hugetlb_unref_page_hwpoison","unpoison_memory","folio_clear_hugetlb_hwpoison"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","HWPOISON_INJECT","HUGETLBFS","HUGETLB_PAGE","TRANSPARENT_HUGEPAGE"],"series_id":"4b3a4f52-06f4-4a41-872f-dde0771be8ef","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:{"findings":["7a0cb565-4340-4daf-8de2-06f5b1d2af93","a77d3cb3-6a99-45a3-bd83-722c3f7fcd2c"]},track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-07-24 20:26:42 +0000 UTC FinishedAt: 2026-07-24 23:34:31 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*143a854d-e92e-42dd-992e-7e01b963cbd0,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*bb071828-9749-428c-a78c-fc39b0b5caf2,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-workflowsdptw/series-workflowsdptw-build-action-2815790913/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-workflowsdptw/series-workflowsdptw-build-action-2427029294/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-workflowsdptw/series-workflowsdptw-convert-artifact-3350513823/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowsdptw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","HWPOISON_INJECT","HUGETLBFS","HUGETLB_PAGE","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["hugetlb_page_hwpoison","hugetlb_unref_page_hwpoison","unpoison_memory","folio_clear_hugetlb_hwpoison"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","HWPOISON_INJECT","HUGETLBFS","HUGETLB_PAGE","TRANSPARENT_HUGEPAGE"],"series_id":"4b3a4f52-06f4-4a41-872f-dde0771be8ef","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:{"findings":["7a0cb565-4340-4daf-8de2-06f5b1d2af93","a77d3cb3-6a99-45a3-bd83-722c3f7fcd2c"]},track:KASAN)[10].run-retest[1] Phase: Succeeded StartedAt: 2026-07-24 20:26:42 +0000 UTC FinishedAt: 2026-07-24 20:52:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsdptw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","HWPOISON_INJECT","HUGETLBFS","HUGETLB_PAGE","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["hugetlb_page_hwpoison","hugetlb_unref_page_hwpoison","unpoison_memory","folio_clear_hugetlb_hwpoison"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","HWPOISON_INJECT","HUGETLBFS","HUGETLB_PAGE","TRANSPARENT_HUGEPAGE"],"series_id":"4b3a4f52-06f4-4a41-872f-dde0771be8ef","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:{"findings":["7a0cb565-4340-4daf-8de2-06f5b1d2af93","a77d3cb3-6a99-45a3-bd83-722c3f7fcd2c"]},track:KASAN)[10].run-retest[1].retest Phase: Succeeded StartedAt: 2026-07-24 20:26:42 +0000 UTC FinishedAt: 2026-07-24 20:52:33 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*143a854d-e92e-42dd-992e-7e01b963cbd0,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*bb071828-9749-428c-a78c-fc39b0b5caf2,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Previous reproducers,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:base-kernel,Path:/base,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowsdptw/series-workflowsdptw-build-action-2815790913/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-workflowsdptw/series-workflowsdptw-build-action-2427029294/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:retest-task,Path:/data/retest.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowsdptw/series-workflowsdptw-convert-artifact-3857604968/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,}