Name: series-workflowzrp5v Phase: Succeeded StartedAt: 2026-07-07 19:46:23 +0000 UTC FinishedAt: 2026-07-08 01:07:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzrp5v[0] Phase: Succeeded StartedAt: 2026-07-07 19:46:23 +0000 UTC FinishedAt: 2026-07-07 20:38:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzrp5v[0].run-triage Phase: Succeeded StartedAt: 2026-07-07 19:46:23 +0000 UTC FinishedAt: 2026-07-07 20:38:54 +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": "db6ed2a3d31068ca5577466591b2521dee0508ca", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "HUGETLBFS", "SWAP", "MEMORY_FAILURE", "HWPOISON_INJECT" ], "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": "db6ed2a3d31068ca5577466591b2521dee0508ca", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "HUGETLBFS", "SWAP", "MEMORY_FAILURE", "HWPOISON_INJECT" ], "series_id": "9d0dc17d-dd1b-45cd-a613-7122afb78d86" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "try_to_unmap_hugetlb_one", "ttu_anon_folio", "ttu_anon_lazyfree_folio", "ttu_anon_swapbacked_folio", "try_to_unmap_one" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA3IDIwOjM3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0hVR0VUTEJGUyYjMzQ7LAogICAgJiMzNDtTV0FQJiMzNDssCiAgICAmIzM0O01FTU9SWV9GQUlMVVJFJiMzNDssCiAgICAmIzM0O0hXUE9JU09OX0lOSkVDVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3RyeV90b191bm1hcF9odWdldGxiX29uZSYjMzQ7LAogICAgJiMzNDt0dHVfYW5vbl9mb2xpbyYjMzQ7LAogICAgJiMzNDt0dHVfYW5vbl9sYXp5ZnJlZV9mb2xpbyYjMzQ7LAogICAgJiMzNDt0dHVfYW5vbl9zd2FwYmFja2VkX2ZvbGlvJiMzNDssCiAgICAmIzM0O3RyeV90b191bm1hcF9vbmUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSB1bm1hcHBpbmcgbG9naWMgaW4gbW0vcm1hcC5jIGJ5IGV4dHJhY3RpbmcgaHVnZXRsYiBhbmQgYW5vbnltb3VzIGZvbGlvIHVubWFwcGluZyBpbnRvIHNlcGFyYXRlIGZ1bmN0aW9ucyAodHJ5X3RvX3VubWFwX2h1Z2V0bGJfb25lLCB0dHVfYW5vbl9mb2xpbywgZXRjLikuIEl0IG1vZGlmaWVzIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgbG9naWMgcmVsYXRlZCB0byByZXZlcnNlIG1hcHBpbmcsIGh1Z2UgcGFnZXMsIGFuZCBzd2FwLiBGdXp6aW5nIHNob3VsZCBmb2N1cyBvbiB0aGVzZSBuZXcgZnVuY3Rpb25zIHRvIGVuc3VyZSBubyByZWdyZXNzaW9ucyBvciBidWdzIHdlcmUgaW50cm9kdWNlZCBkdXJpbmcgdGhlIHJlZmFjdG9yaW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA3IDIwOjM3PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgMWU4NGJjMGUwYzIwNmY5MTUwMDhhZDRjNzE5MDVjZWIyNzhiMWM1OFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgSnVsIDcgMjA6Mzc6NDQgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9odWdldGxiLmggYi9pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaFxuaW5kZXggNDExNTA3NmU0OTIyYWUuLmJmN2UxNjNlMzc3OWQ4IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9odWdldGxiLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvaHVnZXRsYi5oXG5AQCAtMTI3MSw2ICYjNDM7MTI3MSw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBodWdldGxiX2NvdW50X3N1Yihsb25nIGwsIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxuIH1cbiBcbiBwdGVfdCBodWdlX3B0ZXBfZ2V0KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsIHB0ZV90ICpwdGVwKTtcbiYjNDM7dW5zaWduZWQgbG9uZyBodWdlX3B0ZV9kaXJ0eShwdGVfdCBwdGUpO1xuIFxuIHN0YXRpYyBpbmxpbmUgcHRlX3QgaHVnZV9wdGVwX2NsZWFyX2ZsdXNoKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuIFx0XHRcdFx0XHQgIHVuc2lnbmVkIGxvbmcgYWRkciwgcHRlX3QgKnB0ZXApXG5kaWZmIC0tZ2l0IGEvbW0vcm1hcC5jIGIvbW0vcm1hcC5jXG5pbmRleCA5OTM5NDAwZTc3Yzc5YS4uZjAyMWVjZDUxYTRhMmUgMTAwNjQ0XG4tLS0gYS9tbS9ybWFwLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL3JtYXAuY1xuQEAgLTE5NzgsNiAmIzQzOzE5NzgsMjMzIEBAIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGZvbGlvX3VubWFwX3B0ZV9iYXRjaChzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuIFx0XHRcdFx0ICAgICBGUEJfUkVTUEVDVF9XUklURSB8IEZQQl9SRVNQRUNUX1NPRlRfRElSVFkpO1xuIH1cbiBcbiYjNDM7c3RhdGljIGJvb2wgdHJ5X3RvX3VubWFwX2h1Z2V0bGJfb25lKHN0cnVjdCBmb2xpbyAqZm9saW8sXG4mIzQzO1x0XHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyZXNzLCB2b2lkICphcmcpXG4mIzQzO3tcbiYjNDM7XHRERUZJTkVfRk9MSU9fVk1BX1dBTEsocHZtdywgZm9saW8sIHZtYSwgYWRkcmVzcywgMCk7XG4mIzQzO1x0c3RydWN0IG1tdV9ub3RpZmllcl9yYW5nZSByYW5nZTtcbiYjNDM7XHRlbnVtIHR0dV9mbGFncyBmbGFncyA9IChlbnVtIHR0dV9mbGFncykobG9uZylhcmc7XG4mIzQzO1x0c3RydWN0IG1tX3N0cnVjdCAqbW0gPSB2bWEtXHUwMDNldm1fbW07XG4mIzQzO1x0Y29uc3QgdW5zaWduZWQgbG9uZyBoc3ogPSBodWdlX3BhZ2Vfc2l6ZShoc3RhdGVfdm1hKHZtYSkpO1xuJiM0MztcdGJvb2wgcmV0ID0gdHJ1ZTtcbiYjNDM7XHRwdGVfdCBwdGV2YWw7XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogVGhlIHRyeV90b191bm1hcCgpIGlzIG9ubHkgcGFzc2VkIGEgaHVnZXRsYiBmb2xpbyBpbiB0aGUgY2FzZVxuJiM0MztcdCAqIHdoZXJlIHRoZSBodWdldGxiIGZvbGlvIGlzIHBvaXNvbmVkLlxuJiM0MztcdCAqL1xuJiM0MztcdFZNX1dBUk5fT05fRk9MSU8oIWZvbGlvX3Rlc3RfaHdwb2lzb24oZm9saW8pLCBmb2xpbyk7XG4mIzQzO1x0Vk1fV0FSTl9PTl9PTkNFKCEoZmxhZ3MgXHUwMDI2IFRUVV9IV1BPSVNPTikpO1xuJiM0MztcbiYjNDM7XHRyYW5nZS5lbmQgPSB2bWFfYWRkcmVzc19lbmQoXHUwMDI2cHZtdyk7XG4mIzQzO1x0bW11X25vdGlmaWVyX3JhbmdlX2luaXQoXHUwMDI2cmFuZ2UsIE1NVV9OT1RJRllfQ0xFQVIsIDAsIHZtYS1cdTAwM2V2bV9tbSxcbiYjNDM7XHRcdFx0XHRhZGRyZXNzLCByYW5nZS5lbmQpO1xuJiM0MztcdGFkanVzdF9yYW5nZV9pZl9wbWRfc2hhcmluZ19wb3NzaWJsZSh2bWEsIFx1MDAyNnJhbmdlLnN0YXJ0LCBcdTAwMjZyYW5nZS5lbmQpO1xuJiM0MztcdG1tdV9ub3RpZmllcl9pbnZhbGlkYXRlX3JhbmdlX3N0YXJ0KFx1MDAyNnJhbmdlKTtcbiYjNDM7XG4mIzQzO1x0LyogVGhlcmUgaXMgb25seSBhIHNpbmdsZSBtYXBwaW5nIGluIGEgVk1BLiAqL1xuJiM0MztcdGlmICghcGFnZV92bWFfbWFwcGVkX3dhbGsoXHUwMDI2cHZtdykpXG4mIzQzO1x0XHRnb3RvIHJhbmdlX2VuZDtcbiYjNDM7XG4mIzQzO1x0YWRkcmVzcyA9IHB2bXcuYWRkcmVzcztcbiYjNDM7XHRwdGV2YWwgPSBodWdlX3B0ZXBfZ2V0KG1tLCBhZGRyZXNzLCBwdm13LnB0ZSk7XG4mIzQzO1x0Vk1fV0FSTl9PTl9PTkNFKCFwdGVfcHJlc2VudChwdGV2YWwpKTtcbiYjNDM7XHRWTV9XQVJOX09OX09OQ0UocHRlX3BmbihwdGV2YWwpICE9IGZvbGlvX3Bmbihmb2xpbykpO1xuJiM0MztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIGh1Z2VfcG1kX3Vuc2hhcmUgbWF5IHVubWFwIGFuIGVudGlyZSBQTUQgcGFnZS4gVGhlcmUgaXMgbm8gd2F5IG9mXG4mIzQzO1x0ICoga25vd2luZyBleGFjdGx5IHdoaWNoIFBNRHMgbWF5IGJlIGNhY2hlZCBmb3IgdGhpcyBtbSwgc28gd2UgbXVzdFxuJiM0MztcdCAqIGZsdXNoIHRoZW0gYWxsLiBzdGFydC9lbmQgd2VyZSBhbHJlYWR5IGFkanVzdGVkIGFib3ZlIHRvIGNvdmVyIHRoaXNcbiYjNDM7XHQgKiByYW5nZS5cbiYjNDM7XHQgKi9cbiYjNDM7XHRmbHVzaF9jYWNoZV9yYW5nZSh2bWEsIHJhbmdlLnN0YXJ0LCByYW5nZS5lbmQpO1xuJiM0MztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIFRvIGNhbGwgaHVnZV9wbWRfdW5zaGFyZSwgaV9tbWFwX3J3c2VtIG11c3QgYmUgaGVsZCBpbiB3cml0ZSBtb2RlLlxuJiM0MztcdCAqIENhbGxlciBuZWVkcyB0byBleHBsaWNpdGx5IGRvIHRoaXMgb3V0c2lkZSBybWFwIHJvdXRpbmVzLlxuJiM0MztcdCAqXG4mIzQzO1x0ICogV2UgYWxzbyBtdXN0IGhvbGQgaHVnZXRsYiB2bWFfbG9jayBpbiB3cml0ZSBtb2RlLiBMb2NrIG9yZGVyIGRpY3RhdGVzXG4mIzQzO1x0ICogYWNxdWlyaW5nIHZtYV9sb2NrIEJFRk9SRSBpX21tYXBfcndzZW0uIFdlIGNhbiBvbmx5IHRyeSBsb2NrIGhlcmUgYW5kXG4mIzQzO1x0ICogZmFpbCBpZiB1bnN1Y2Nlc3NmdWwuXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKCFmb2xpb190ZXN0X2Fub24oZm9saW8pKSB7XG4mIzQzO1x0XHRzdHJ1Y3QgbW11X2dhdGhlciB0bGI7XG4mIzQzO1xuJiM0MztcdFx0Vk1fV0FSTl9PTighKGZsYWdzIFx1MDAyNiBUVFVfUk1BUF9MT0NLRUQpKTtcbiYjNDM7XHRcdGlmICghaHVnZXRsYl92bWFfdHJ5bG9ja193cml0ZSh2bWEpKSB7XG4mIzQzO1x0XHRcdHJldCA9IGZhbHNlO1xuJiM0MztcdFx0XHRnb3RvIHdhbGtfZG9uZTtcbiYjNDM7XHRcdH1cbiYjNDM7XG4mIzQzO1x0XHR0bGJfZ2F0aGVyX21tdV92bWEoXHUwMDI2dGxiLCB2bWEpO1xuJiM0MztcdFx0aWYgKGh1Z2VfcG1kX3Vuc2hhcmUoXHUwMDI2dGxiLCB2bWEsIGFkZHJlc3MsIHB2bXcucHRlKSkge1xuJiM0MztcdFx0XHRodWdldGxiX3ZtYV91bmxvY2tfd3JpdGUodm1hKTtcbiYjNDM7XHRcdFx0aHVnZV9wbWRfdW5zaGFyZV9mbHVzaChcdTAwMjZ0bGIsIHZtYSk7XG4mIzQzO1x0XHRcdHRsYl9maW5pc2hfbW11KFx1MDAyNnRsYik7XG4mIzQzO1x0XHRcdC8qXG4mIzQzO1x0XHRcdCAqIFRoZSBQTUQgdGFibGUgd2FzIHVubWFwcGVkLCBjb25zZXF1ZW50bHkgdW5tYXBwaW5nXG4mIzQzO1x0XHRcdCAqIHRoZSBmb2xpby5cbiYjNDM7XHRcdFx0ICovXG4mIzQzO1x0XHRcdGdvdG8gd2Fsa19kb25lO1xuJiM0MztcdFx0fVxuJiM0MztcdFx0aHVnZXRsYl92bWFfdW5sb2NrX3dyaXRlKHZtYSk7XG4mIzQzO1x0XHR0bGJfZmluaXNoX21tdShcdTAwMjZ0bGIpO1xuJiM0MztcdH1cbiYjNDM7XHRwdGV2YWwgPSBodWdlX3B0ZXBfY2xlYXJfZmx1c2godm1hLCBhZGRyZXNzLCBwdm13LnB0ZSk7XG4mIzQzO1x0aWYgKGh1Z2VfcHRlX2RpcnR5KHB0ZXZhbCkpXG4mIzQzO1x0XHRmb2xpb19tYXJrX2RpcnR5KGZvbGlvKTtcbiYjNDM7XG4mIzQzO1x0cHRldmFsID0gc3dwX2VudHJ5X3RvX3B0ZShtYWtlX2h3cG9pc29uX2VudHJ5KGZvbGlvX3BhZ2UoZm9saW8sIDApKSk7XG4mIzQzO1x0aHVnZXRsYl9jb3VudF9zdWIoZm9saW9fbnJfcGFnZXMoZm9saW8pLCBtbSk7XG4mIzQzO1x0c2V0X2h1Z2VfcHRlX2F0KG1tLCBhZGRyZXNzLCBwdm13LnB0ZSwgcHRldmFsLCBoc3opO1xuJiM0MztcdGh1Z2V0bGJfcmVtb3ZlX3JtYXAoZm9saW8pO1xuJiM0MztcdGZvbGlvX3B1dF9yZWZzKGZvbGlvLCAxKTtcbiYjNDM7XG4mIzQzO3dhbGtfZG9uZTpcbiYjNDM7XHRwYWdlX3ZtYV9tYXBwZWRfd2Fsa19kb25lKFx1MDAyNnB2bXcpO1xuJiM0MztyYW5nZV9lbmQ6XG4mIzQzO1x0bW11X25vdGlmaWVyX2ludmFsaWRhdGVfcmFuZ2VfZW5kKFx1MDAyNnJhbmdlKTtcbiYjNDM7XHRyZXR1cm4gcmV0O1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgdHR1X2Fub25fbGF6eWZyZWVfZm9saW8oc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4mIzQzO1x0XHRzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuJiM0Mzt7XG4mIzQzO1x0aW50IHJlZl9jb3VudCwgbWFwX2NvdW50O1xuJiM0MztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIFN5bmNocm9uaXplIHdpdGggZ3VwX3B0ZV9yYW5nZSgpOlxuJiM0MztcdCAqIC0gY2xlYXIgUFRFOyBiYXJyaWVyOyByZWFkIHJlZmNvdW50XG4mIzQzO1x0ICogLSBpbmMgcmVmY291bnQ7IGJhcnJpZXI7IHJlYWQgUFRFXG4mIzQzO1x0ICovXG4mIzQzO1x0c21wX21iKCk7XG4mIzQzO1xuJiM0MztcdHJlZl9jb3VudCA9IGZvbGlvX3JlZl9jb3VudChmb2xpbyk7XG4mIzQzO1x0bWFwX2NvdW50ID0gZm9saW9fbWFwY291bnQoZm9saW8pO1xuJiM0MztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIE9yZGVyIHJlYWRzIGZvciBwYWdlIHJlZmNvdW50IGFuZCBkaXJ0eSBmbGFnXG4mIzQzO1x0ICogKHNlZSBjb21tZW50cyBpbiBfX3JlbW92ZV9tYXBwaW5nKCkpLlxuJiM0MztcdCAqL1xuJiM0MztcdHNtcF9ybWIoKTtcbiYjNDM7XG4mIzQzO1x0aWYgKGZvbGlvX3Rlc3RfZGlydHkoZm9saW8pIFx1MDAyNlx1MDAyNiAhKHZtYS1cdTAwM2V2bV9mbGFncyBcdTAwMjYgVk1fRFJPUFBBQkxFKSkge1xuJiM0MztcdFx0LypcbiYjNDM7XHRcdCAqIHJlZGlydGllZCBlaXRoZXIgdXNpbmcgdGhlIHBhZ2UgdGFibGUgb3IgYSBwcmV2aW91c2x5XG4mIzQzO1x0XHQgKiBvYnRhaW5lZCBHVVAgcmVmZXJlbmNlLlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRmb2xpb19zZXRfc3dhcGJhY2tlZChmb2xpbyk7XG4mIzQzO1x0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAocmVmX2NvdW50ICE9IDEgJiM0MzsgbWFwX2NvdW50KSB7XG4mIzQzO1x0XHQvKlxuJiM0MztcdFx0ICogQWRkaXRpb25hbCByZWZlcmVuY2UuIENvdWxkIGJlIGEgR1VQIHJlZmVyZW5jZSBvciBhbnlcbiYjNDM7XHRcdCAqIHNwZWN1bGF0aXZlIHJlZmVyZW5jZS4gR1VQIHVzZXJzIG11c3QgbWFyayB0aGUgZm9saW9cbiYjNDM7XHRcdCAqIGRpcnR5IGlmIHRoZXJlIHdhcyBhIG1vZGlmaWNhdGlvbi4gVGhpcyBmb2xpbyBjYW5ub3QgYmVcbiYjNDM7XHRcdCAqIHJlY2xhaW1lZCByaWdodCBub3cgZWl0aGVyIHdheSwgc28gYWN0IGp1c3QgbGlrZSBub3RoaW5nXG4mIzQzO1x0XHQgKiBoYXBwZW5lZC5cbiYjNDM7XHRcdCAqIFdlJiMzOTtsbCBjb21lIGJhY2sgaGVyZSBsYXRlciBhbmQgZGV0ZWN0IGlmIHRoZSBmb2xpbyB3YXNcbiYjNDM7XHRcdCAqIGRpcnRpZWQgd2hlbiB0aGUgYWRkaXRpb25hbCByZWZlcmVuY2UgaXMgZ29uZS5cbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHRydWU7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBzZXRfc3dwX3B0ZV9hdChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyZXNzLFxuJiM0MztcdFx0cHRlX3QgKnB0ZXAsIHN3cF9lbnRyeV90IGVudHJ5LCBwdGVfdCBwdGV2YWwsIGJvb2wgYW5vbl9leGNsdXNpdmUpXG4mIzQzO3tcbiYjNDM7XHRwdGVfdCBzd3BfcHRlID0gc3dwX2VudHJ5X3RvX3B0ZShlbnRyeSk7XG4mIzQzO1xuJiM0MztcdGlmIChhbm9uX2V4Y2x1c2l2ZSlcbiYjNDM7XHRcdHN3cF9wdGUgPSBwdGVfc3dwX21rZXhjbHVzaXZlKHN3cF9wdGUpO1xuJiM0MztcbiYjNDM7XHRpZiAobGlrZWx5KHB0ZV9wcmVzZW50KHB0ZXZhbCkpKSB7XG4mIzQzO1x0XHRpZiAocHRlX3NvZnRfZGlydHkocHRldmFsKSlcbiYjNDM7XHRcdFx0c3dwX3B0ZSA9IHB0ZV9zd3BfbWtzb2Z0X2RpcnR5KHN3cF9wdGUpO1xuJiM0MztcdFx0aWYgKHB0ZV91ZmZkX3dwKHB0ZXZhbCkpXG4mIzQzO1x0XHRcdHN3cF9wdGUgPSBwdGVfc3dwX21rdWZmZF93cChzd3BfcHRlKTtcbiYjNDM7XHR9IGVsc2Uge1xuJiM0MztcdFx0LyogRGV2aWNlLWV4Y2x1c2l2ZSBlbnRyeSAqL1xuJiM0MztcdFx0aWYgKHB0ZV9zd3Bfc29mdF9kaXJ0eShwdGV2YWwpKVxuJiM0MztcdFx0XHRzd3BfcHRlID0gcHRlX3N3cF9ta3NvZnRfZGlydHkoc3dwX3B0ZSk7XG4mIzQzO1x0XHRpZiAocHRlX3N3cF91ZmZkX3dwKHB0ZXZhbCkpXG4mIzQzO1x0XHRcdHN3cF9wdGUgPSBwdGVfc3dwX21rdWZmZF93cChzd3BfcHRlKTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHNldF9wdGVfYXQobW0sIGFkZHJlc3MsIHB0ZXAsIHN3cF9wdGUpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgdHR1X2Fub25fc3dhcGJhY2tlZF9mb2xpbyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgc3RydWN0IGZvbGlvICpmb2xpbyxcbiYjNDM7XHRcdHN0cnVjdCBwYWdlICpzdWJwYWdlLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MsIHB0ZV90ICpwdGVwLFxuJiM0MztcdFx0cHRlX3QgcHRldmFsKVxuJiM0Mzt7XG4mIzQzO1x0Ym9vbCBhbm9uX2V4Y2x1c2l2ZSA9IGZvbGlvX3Rlc3RfYW5vbihmb2xpbykgXHUwMDI2XHUwMDI2IFBhZ2VBbm9uRXhjbHVzaXZlKHN1YnBhZ2UpO1xuJiM0MztcdHN3cF9lbnRyeV90IGVudHJ5ID0gcGFnZV9zd2FwX2VudHJ5KHN1YnBhZ2UpO1xuJiM0MztcdHN0cnVjdCBtbV9zdHJ1Y3QgKm1tID0gdm1hLVx1MDAzZXZtX21tO1xuJiM0MztcbiYjNDM7XHRpZiAoZm9saW9fZHVwX3N3YXAoZm9saW8sIHN1YnBhZ2UpIFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIGFyY2hfdW5tYXBfb25lKCkgaXMgZXhwZWN0ZWQgdG8gYmUgYSBOT1Agb25cbiYjNDM7XHQgKiBhcmNoaXRlY3R1cmVzIHdoZXJlIHdlIGNvdWxkIGhhdmUgUEZOIHN3YXAgUFRFcyxcbiYjNDM7XHQgKiBzbyB3ZSYjMzk7bGwgbm90IGNoZWNrL2NhcmUuXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKGFyY2hfdW5tYXBfb25lKG1tLCB2bWEsIGFkZHJlc3MsIHB0ZXZhbCkgXHUwMDNjIDApIHtcbiYjNDM7XHRcdGZvbGlvX3B1dF9zd2FwKGZvbGlvLCBzdWJwYWdlKTtcbiYjNDM7XHRcdHJldHVybiBmYWxzZTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdC8qIFNlZSBmb2xpb190cnlfc2hhcmVfYW5vbl9ybWFwKCk6IGNsZWFyIFBURSBmaXJzdC4gKi9cbiYjNDM7XHRpZiAoYW5vbl9leGNsdXNpdmUgXHUwMDI2XHUwMDI2IGZvbGlvX3RyeV9zaGFyZV9hbm9uX3JtYXBfcHRlKGZvbGlvLCBzdWJwYWdlKSkge1xuJiM0MztcdFx0Zm9saW9fcHV0X3N3YXAoZm9saW8sIHN1YnBhZ2UpO1xuJiM0MztcdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0bW1fcHJlcGFyZV9mb3Jfc3dhcF9lbnRyaWVzKG1tKTtcbiYjNDM7XHRkZWNfbW1fY291bnRlcihtbSwgTU1fQU5PTlBBR0VTKTtcbiYjNDM7XHRpbmNfbW1fY291bnRlcihtbSwgTU1fU1dBUEVOVFMpO1xuJiM0MztcdHNldF9zd3BfcHRlX2F0KG1tLCBhZGRyZXNzLCBwdGVwLCBlbnRyeSwgcHRldmFsLCBhbm9uX2V4Y2x1c2l2ZSk7XG4mIzQzO1x0cmV0dXJuIHRydWU7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbmxpbmUgYm9vbCB0dHVfYW5vbl9mb2xpbyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgc3RydWN0IGZvbGlvICpmb2xpbyxcbiYjNDM7XHRcdHN0cnVjdCBwYWdlICpzdWJwYWdlLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MsIHB0ZV90ICpwdGVwLFxuJiM0MztcdFx0cHRlX3QgcHRldmFsLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IG1tX3N0cnVjdCAqbW0gPSB2bWEtXHUwMDNldm1fbW07XG4mIzQzO1x0Ym9vbCByZXQ7XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogU3RvcmUgdGhlIHN3YXAgbG9jYXRpb24gaW4gdGhlIHB0ZS5cbiYjNDM7XHQgKiBTZWUgaGFuZGxlX3B0ZV9mYXVsdCgpIC4uLlxuJiM0MztcdCAqL1xuJiM0MztcdGlmICh1bmxpa2VseShmb2xpb190ZXN0X3N3YXBiYWNrZWQoZm9saW8pICE9XG4mIzQzO1x0XHRcdGZvbGlvX3Rlc3Rfc3dhcGNhY2hlKGZvbGlvKSkpIHtcbiYjNDM7XHRcdFdBUk5fT05fT05DRSgxKTtcbiYjNDM7XHRcdHJldHVybiBmYWxzZTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdC8qIE1BRFZfRlJFRSBwYWdlIGNoZWNrICovXG4mIzQzO1x0aWYgKCFmb2xpb190ZXN0X3N3YXBiYWNrZWQoZm9saW8pKSB7XG4mIzQzO1x0XHRyZXQgPSB0dHVfYW5vbl9sYXp5ZnJlZV9mb2xpbyh2bWEsIGZvbGlvKTtcbiYjNDM7XHRcdGlmIChyZXQpXG4mIzQzO1x0XHRcdGFkZF9tbV9jb3VudGVyKG1tLCBNTV9BTk9OUEFHRVMsIC1ucl9wYWdlcyk7XG4mIzQzO1x0fSBlbHNlIHtcbiYjNDM7XHRcdC8qIG5yX3BhZ2VzIFx1MDAzZSAxIG5vdCBzdXBwb3J0ZWQgeWV0ICovXG4mIzQzO1x0XHRyZXQgPSB0dHVfYW5vbl9zd2FwYmFja2VkX2ZvbGlvKHZtYSwgZm9saW8sIHN1YnBhZ2UsIGFkZHJlc3MsXG4mIzQzO1x0XHRcdFx0XHRcdHB0ZXAsIHB0ZXZhbCk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAoIXJldClcbiYjNDM7XHRcdHNldF9wdGVzKG1tLCBhZGRyZXNzLCBwdGVwLCBwdGV2YWwsIG5yX3BhZ2VzKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHJldDtcbiYjNDM7fVxuJiM0MztcbiAvKlxuICAqIEBhcmc6IGVudW0gdHR1X2ZsYWdzIHdpbGwgYmUgcGFzc2VkIHRvIHRoaXMgYXJndW1lbnRcbiAgKi9cbkBAIC0xOTg2LDE0ICYjNDM7MjIxMywxMyBAQCBzdGF0aWMgYm9vbCB0cnlfdG9fdW5tYXBfb25lKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuIHtcbiBcdHN0cnVjdCBtbV9zdHJ1Y3QgKm1tID0gdm1hLVx1MDAzZXZtX21tO1xuIFx0REVGSU5FX0ZPTElPX1ZNQV9XQUxLKHB2bXcsIGZvbGlvLCB2bWEsIGFkZHJlc3MsIDApO1xuLVx0Ym9vbCBhbm9uX2V4Y2x1c2l2ZSwgcmV0ID0gdHJ1ZTtcbiYjNDM7XHRib29sIHJldCA9IHRydWU7XG4gXHRwdGVfdCBwdGV2YWw7XG4gXHRzdHJ1Y3QgcGFnZSAqc3VicGFnZTtcbiBcdHN0cnVjdCBtbXVfbm90aWZpZXJfcmFuZ2UgcmFuZ2U7XG4gXHRlbnVtIHR0dV9mbGFncyBmbGFncyA9IChlbnVtIHR0dV9mbGFncykobG9uZylhcmc7XG4gXHR1bnNpZ25lZCBsb25nIG5yX3BhZ2VzID0gMSwgZW5kX2FkZHI7XG4gXHR1bnNpZ25lZCBsb25nIHBmbjtcbi1cdHVuc2lnbmVkIGxvbmcgaHN6ID0gMDtcbiBcdGludCBwdGVzID0gMDtcbiBcbiBcdC8qXG5AQCAtMjAwNyw4ICYjNDM7MjIzMyw2IEBAIHN0YXRpYyBib29sIHRyeV90b191bm1hcF9vbmUoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4gXG4gXHQvKlxuIFx0ICogRm9yIFRIUCwgd2UgaGF2ZSB0byBhc3N1bWUgdGhlIHdvcnNlIGNhc2UgaWUgcG1kIGZvciBpbnZhbGlkYXRpb24uXG4tXHQgKiBGb3IgaHVnZXRsYiwgaXQgY291bGQgYmUgbXVjaCB3b3JzZSBpZiB3ZSBuZWVkIHRvIGRvIHB1ZFxuLVx0ICogaW52YWxpZGF0aW9uIGluIHRoZSBjYXNlIG9mIHBtZCBzaGFyaW5nLlxuIFx0ICpcbiBcdCAqIE5vdGUgdGhhdCB0aGUgZm9saW8gY2FuIG5vdCBiZSBmcmVlZCBpbiB0aGlzIGZ1bmN0aW9uIGFzIGNhbGwgb2ZcbiBcdCAqIHRyeV90b191bm1hcCgpIG11c3QgaG9sZCBhIHJlZmVyZW5jZSBvbiB0aGUgZm9saW8uXG5AQCAtMjAxNiwxNyAmIzQzOzIyNDAsNiBAQCBzdGF0aWMgYm9vbCB0cnlfdG9fdW5tYXBfb25lKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuIFx0cmFuZ2UuZW5kID0gdm1hX2FkZHJlc3NfZW5kKFx1MDAyNnB2bXcpO1xuIFx0bW11X25vdGlmaWVyX3JhbmdlX2luaXQoXHUwMDI2cmFuZ2UsIE1NVV9OT1RJRllfQ0xFQVIsIDAsIHZtYS1cdTAwM2V2bV9tbSxcbiBcdFx0XHRcdGFkZHJlc3MsIHJhbmdlLmVuZCk7XG4tXHRpZiAoZm9saW9fdGVzdF9odWdldGxiKGZvbGlvKSkge1xuLVx0XHQvKlxuLVx0XHQgKiBJZiBzaGFyaW5nIGlzIHBvc3NpYmxlLCBzdGFydCBhbmQgZW5kIHdpbGwgYmUgYWRqdXN0ZWRcbi1cdFx0ICogYWNjb3JkaW5nbHkuXG4tXHRcdCAqL1xuLVx0XHRhZGp1c3RfcmFuZ2VfaWZfcG1kX3NoYXJpbmdfcG9zc2libGUodm1hLCBcdTAwMjZyYW5nZS5zdGFydCxcbi1cdFx0XHRcdFx0XHQgICAgIFx1MDAyNnJhbmdlLmVuZCk7XG4tXG4tXHRcdC8qIFdlIG5lZWQgdGhlIGh1Z2UgcGFnZSBzaXplIGZvciBzZXRfaHVnZV9wdGVfYXQoKSAqL1xuLVx0XHRoc3ogPSBodWdlX3BhZ2Vfc2l6ZShoc3RhdGVfdm1hKHZtYSkpO1xuLVx0fVxuIFx0bW11X25vdGlmaWVyX2ludmFsaWRhdGVfcmFuZ2Vfc3RhcnQoXHUwMDI2cmFuZ2UpO1xuIFxuIFx0d2hpbGUgKHBhZ2Vfdm1hX21hcHBlZF93YWxrKFx1MDAyNnB2bXcpKSB7XG5AQCAtMjExMSw2NSAmIzQzOzIzMjQsMTEgQEAgc3RhdGljIGJvb2wgdHJ5X3RvX3VubWFwX29uZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbiBcdFx0XHRjb25zdCBzb2Z0bGVhZl90IGVudHJ5ID0gc29mdGxlYWZfZnJvbV9wdGUocHRldmFsKTtcbiBcbiBcdFx0XHRwZm4gPSBzb2Z0bGVhZl90b19wZm4oZW50cnkpO1xuLVx0XHRcdFZNX1dBUk5fT05fRk9MSU8oZm9saW9fdGVzdF9odWdldGxiKGZvbGlvKSwgZm9saW8pO1xuIFx0XHR9XG4gXG4gXHRcdHN1YnBhZ2UgPSBmb2xpb19wYWdlKGZvbGlvLCBwZm4gLSBmb2xpb19wZm4oZm9saW8pKTtcbi1cdFx0YW5vbl9leGNsdXNpdmUgPSBmb2xpb190ZXN0X2Fub24oZm9saW8pIFx1MDAyNlx1MDAyNlxuLVx0XHRcdFx0IFBhZ2VBbm9uRXhjbHVzaXZlKHN1YnBhZ2UpO1xuIFxuLVx0XHRpZiAoZm9saW9fdGVzdF9odWdldGxiKGZvbGlvKSkge1xuLVx0XHRcdGJvb2wgYW5vbiA9IGZvbGlvX3Rlc3RfYW5vbihmb2xpbyk7XG4tXG4tXHRcdFx0Lypcbi1cdFx0XHQgKiBUaGUgdHJ5X3RvX3VubWFwKCkgaXMgb25seSBwYXNzZWQgYSBodWdldGxiIHBhZ2Vcbi1cdFx0XHQgKiBpbiB0aGUgY2FzZSB3aGVyZSB0aGUgaHVnZXRsYiBwYWdlIGlzIHBvaXNvbmVkLlxuLVx0XHRcdCAqL1xuLVx0XHRcdFZNX0JVR19PTl9QQUdFKCFQYWdlSFdQb2lzb24oc3VicGFnZSksIHN1YnBhZ2UpO1xuLVx0XHRcdC8qXG4tXHRcdFx0ICogaHVnZV9wbWRfdW5zaGFyZSBtYXkgdW5tYXAgYW4gZW50aXJlIFBNRCBwYWdlLlxuLVx0XHRcdCAqIFRoZXJlIGlzIG5vIHdheSBvZiBrbm93aW5nIGV4YWN0bHkgd2hpY2ggUE1EcyBtYXlcbi1cdFx0XHQgKiBiZSBjYWNoZWQgZm9yIHRoaXMgbW0sIHNvIHdlIG11c3QgZmx1c2ggdGhlbSBhbGwuXG4tXHRcdFx0ICogc3RhcnQvZW5kIHdlcmUgYWxyZWFkeSBhZGp1c3RlZCBhYm92ZSB0byBjb3ZlciB0aGlzXG4tXHRcdFx0ICogcmFuZ2UuXG4tXHRcdFx0ICovXG4tXHRcdFx0Zmx1c2hfY2FjaGVfcmFuZ2Uodm1hLCByYW5nZS5zdGFydCwgcmFuZ2UuZW5kKTtcbi1cbi1cdFx0XHQvKlxuLVx0XHRcdCAqIFRvIGNhbGwgaHVnZV9wbWRfdW5zaGFyZSwgaV9tbWFwX3J3c2VtIG11c3QgYmVcbi1cdFx0XHQgKiBoZWxkIGluIHdyaXRlIG1vZGUuICBDYWxsZXIgbmVlZHMgdG8gZXhwbGljaXRseVxuLVx0XHRcdCAqIGRvIHRoaXMgb3V0c2lkZSBybWFwIHJvdXRpbmVzLlxuLVx0XHRcdCAqXG4tXHRcdFx0ICogV2UgYWxzbyBtdXN0IGhvbGQgaHVnZXRsYiB2bWFfbG9jayBpbiB3cml0ZSBtb2RlLlxuLVx0XHRcdCAqIExvY2sgb3JkZXIgZGljdGF0ZXMgYWNxdWlyaW5nIHZtYV9sb2NrIEJFRk9SRVxuLVx0XHRcdCAqIGlfbW1hcF9yd3NlbS4gIFdlIGNhbiBvbmx5IHRyeSBsb2NrIGhlcmUgYW5kIGZhaWxcbi1cdFx0XHQgKiBpZiB1bnN1Y2Nlc3NmdWwuXG4tXHRcdFx0ICovXG4tXHRcdFx0aWYgKCFhbm9uKSB7XG4tXHRcdFx0XHRzdHJ1Y3QgbW11X2dhdGhlciB0bGI7XG4tXG4tXHRcdFx0XHRWTV9CVUdfT04oIShmbGFncyBcdTAwMjYgVFRVX1JNQVBfTE9DS0VEKSk7XG4tXHRcdFx0XHRpZiAoIWh1Z2V0bGJfdm1hX3RyeWxvY2tfd3JpdGUodm1hKSlcbi1cdFx0XHRcdFx0Z290byB3YWxrX2Fib3J0O1xuLVxuLVx0XHRcdFx0dGxiX2dhdGhlcl9tbXVfdm1hKFx1MDAyNnRsYiwgdm1hKTtcbi1cdFx0XHRcdGlmIChodWdlX3BtZF91bnNoYXJlKFx1MDAyNnRsYiwgdm1hLCBhZGRyZXNzLCBwdm13LnB0ZSkpIHtcbi1cdFx0XHRcdFx0aHVnZXRsYl92bWFfdW5sb2NrX3dyaXRlKHZtYSk7XG4tXHRcdFx0XHRcdGh1Z2VfcG1kX3Vuc2hhcmVfZmx1c2goXHUwMDI2dGxiLCB2bWEpO1xuLVx0XHRcdFx0XHR0bGJfZmluaXNoX21tdShcdTAwMjZ0bGIpO1xuLVx0XHRcdFx0XHQvKlxuLVx0XHRcdFx0XHQgKiBUaGUgUE1EIHRhYmxlIHdhcyB1bm1hcHBlZCxcbi1cdFx0XHRcdFx0ICogY29uc2VxdWVudGx5IHVubWFwcGluZyB0aGUgZm9saW8uXG4tXHRcdFx0XHRcdCAqL1xuLVx0XHRcdFx0XHRnb3RvIHdhbGtfZG9uZTtcbi1cdFx0XHRcdH1cbi1cdFx0XHRcdGh1Z2V0bGJfdm1hX3VubG9ja193cml0ZSh2bWEpO1xuLVx0XHRcdFx0dGxiX2ZpbmlzaF9tbXUoXHUwMDI2dGxiKTtcbi1cdFx0XHR9XG4tXHRcdFx0cHRldmFsID0gaHVnZV9wdGVwX2NsZWFyX2ZsdXNoKHZtYSwgYWRkcmVzcywgcHZtdy5wdGUpO1xuLVx0XHRcdGlmIChwdGVfZGlydHkocHRldmFsKSlcbi1cdFx0XHRcdGZvbGlvX21hcmtfZGlydHkoZm9saW8pO1xuLVx0XHR9IGVsc2UgaWYgKGxpa2VseShwdGVfcHJlc2VudChwdGV2YWwpKSkge1xuJiM0MztcdFx0aWYgKGxpa2VseShwdGVfcHJlc2VudChwdGV2YWwpKSkge1xuIFx0XHRcdG5yX3BhZ2VzID0gZm9saW9fdW5tYXBfcHRlX2JhdGNoKGZvbGlvLCBcdTAwMjZwdm13LCBmbGFncywgcHRldmFsKTtcbiBcdFx0XHRlbmRfYWRkciA9IGFkZHJlc3MgJiM0MzsgbnJfcGFnZXMgKiBQQUdFX1NJWkU7XG4gXHRcdFx0Zmx1c2hfY2FjaGVfcmFuZ2Uodm1hLCBhZGRyZXNzLCBlbmRfYWRkcik7XG5AQCAtMjIwNCwxNiAmIzQzOzIzNjMsMTQgQEAgc3RhdGljIGJvb2wgdHJ5X3RvX3VubWFwX29uZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbiBcdFx0LyogVXBkYXRlIGhpZ2ggd2F0ZXJtYXJrIGJlZm9yZSB3ZSBsb3dlciByc3MgKi9cbiBcdFx0dXBkYXRlX2hpd2F0ZXJfcnNzKG1tKTtcbiBcbi1cdFx0aWYgKFBhZ2VIV1BvaXNvbihzdWJwYWdlKSBcdTAwMjZcdTAwMjYgKGZsYWdzIFx1MDAyNiBUVFVfSFdQT0lTT04pKSB7XG4mIzQzO1x0XHQvKlxuJiM0MztcdFx0ICogV2l0aCBUVFVfSFdQT0lTT04sIHdlIG9ubHkgZXhwZWN0IHNtYWxsIGZvbGlvcyBvciBodWdldGxiXG4mIzQzO1x0XHQgKiBmb2xpb3MgaGVyZSBmb3Igbm93LlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRpZiAoZm9saW9fdGVzdF9od3BvaXNvbihmb2xpbykgXHUwMDI2XHUwMDI2IChmbGFncyBcdTAwMjYgVFRVX0hXUE9JU09OKSkge1xuIFx0XHRcdHB0ZXZhbCA9IHN3cF9lbnRyeV90b19wdGUobWFrZV9od3BvaXNvbl9lbnRyeShzdWJwYWdlKSk7XG4tXHRcdFx0aWYgKGZvbGlvX3Rlc3RfaHVnZXRsYihmb2xpbykpIHtcbi1cdFx0XHRcdGh1Z2V0bGJfY291bnRfc3ViKGZvbGlvX25yX3BhZ2VzKGZvbGlvKSwgbW0pO1xuLVx0XHRcdFx0c2V0X2h1Z2VfcHRlX2F0KG1tLCBhZGRyZXNzLCBwdm13LnB0ZSwgcHRldmFsLFxuLVx0XHRcdFx0XHRcdGhzeik7XG4tXHRcdFx0fSBlbHNlIHtcbi1cdFx0XHRcdGRlY19tbV9jb3VudGVyKG1tLCBtbV9jb3VudGVyKGZvbGlvKSk7XG4tXHRcdFx0XHRzZXRfcHRlX2F0KG1tLCBhZGRyZXNzLCBwdm13LnB0ZSwgcHRldmFsKTtcbi1cdFx0XHR9XG4mIzQzO1x0XHRcdGRlY19tbV9jb3VudGVyKG1tLCBtbV9jb3VudGVyKGZvbGlvKSk7XG4mIzQzO1x0XHRcdHNldF9wdGVfYXQobW0sIGFkZHJlc3MsIHB2bXcucHRlLCBwdGV2YWwpO1xuIFx0XHR9IGVsc2UgaWYgKGxpa2VseShwdGVfcHJlc2VudChwdGV2YWwpKSBcdTAwMjZcdTAwMjYgcHRlX3VudXNlZChwdGV2YWwpIFx1MDAyNlx1MDAyNlxuIFx0XHRcdCAgICF1c2VyZmF1bHRmZF9hcm1lZCh2bWEpKSB7XG4gXHRcdFx0LypcbkBAIC0yMjI4LDEwNCAmIzQzOzIzODUsMTEgQEAgc3RhdGljIGJvb2wgdHJ5X3RvX3VubWFwX29uZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbiBcdFx0XHQgKi9cbiBcdFx0XHRkZWNfbW1fY291bnRlcihtbSwgbW1fY291bnRlcihmb2xpbykpO1xuIFx0XHR9IGVsc2UgaWYgKGZvbGlvX3Rlc3RfYW5vbihmb2xpbykpIHtcbi1cdFx0XHRzd3BfZW50cnlfdCBlbnRyeSA9IHBhZ2Vfc3dhcF9lbnRyeShzdWJwYWdlKTtcbi1cdFx0XHRwdGVfdCBzd3BfcHRlO1xuLVx0XHRcdC8qXG4tXHRcdFx0ICogU3RvcmUgdGhlIHN3YXAgbG9jYXRpb24gaW4gdGhlIHB0ZS5cbi1cdFx0XHQgKiBTZWUgaGFuZGxlX3B0ZV9mYXVsdCgpIC4uLlxuLVx0XHRcdCAqL1xuLVx0XHRcdGlmICh1bmxpa2VseShmb2xpb190ZXN0X3N3YXBiYWNrZWQoZm9saW8pICE9XG4tXHRcdFx0XHRcdGZvbGlvX3Rlc3Rfc3dhcGNhY2hlKGZvbGlvKSkpIHtcbi1cdFx0XHRcdFdBUk5fT05fT05DRSgxKTtcbiYjNDM7XHRcdFx0aWYgKCF0dHVfYW5vbl9mb2xpbyh2bWEsIGZvbGlvLCBzdWJwYWdlLCBhZGRyZXNzLFxuJiM0MztcdFx0XHRcdFx0ICAgIHB2bXcucHRlLCBwdGV2YWwsIG5yX3BhZ2VzKSlcbiBcdFx0XHRcdGdvdG8gd2Fsa19hYm9ydDtcbi1cdFx0XHR9XG4tXG4tXHRcdFx0LyogTUFEVl9GUkVFIHBhZ2UgY2hlY2sgKi9cbi1cdFx0XHRpZiAoIWZvbGlvX3Rlc3Rfc3dhcGJhY2tlZChmb2xpbykpIHtcbi1cdFx0XHRcdGludCByZWZfY291bnQsIG1hcF9jb3VudDtcbi1cbi1cdFx0XHRcdC8qXG4tXHRcdFx0XHQgKiBTeW5jaHJvbml6ZSB3aXRoIGd1cF9wdGVfcmFuZ2UoKTpcbi1cdFx0XHRcdCAqIC0gY2xlYXIgUFRFOyBiYXJyaWVyOyByZWFkIHJlZmNvdW50XG4tXHRcdFx0XHQgKiAtIGluYyByZWZjb3VudDsgYmFycmllcjsgcmVhZCBQVEVcbi1cdFx0XHRcdCAqL1xuLVx0XHRcdFx0c21wX21iKCk7XG4gXG4tXHRcdFx0XHRyZWZfY291bnQgPSBmb2xpb19yZWZfY291bnQoZm9saW8pO1xuLVx0XHRcdFx0bWFwX2NvdW50ID0gZm9saW9fbWFwY291bnQoZm9saW8pO1xuLVxuLVx0XHRcdFx0Lypcbi1cdFx0XHRcdCAqIE9yZGVyIHJlYWRzIGZvciBwYWdlIHJlZmNvdW50IGFuZCBkaXJ0eSBmbGFnXG4tXHRcdFx0XHQgKiAoc2VlIGNvbW1lbnRzIGluIF9fcmVtb3ZlX21hcHBpbmcoKSkuXG4tXHRcdFx0XHQgKi9cbi1cdFx0XHRcdHNtcF9ybWIoKTtcbi1cbi1cdFx0XHRcdGlmIChmb2xpb190ZXN0X2RpcnR5KGZvbGlvKSBcdTAwMjZcdTAwMjYgISh2bWEtXHUwMDNldm1fZmxhZ3MgXHUwMDI2IFZNX0RST1BQQUJMRSkpIHtcbi1cdFx0XHRcdFx0Lypcbi1cdFx0XHRcdFx0ICogcmVkaXJ0aWVkIGVpdGhlciB1c2luZyB0aGUgcGFnZSB0YWJsZSBvciBhIHByZXZpb3VzbHlcbi1cdFx0XHRcdFx0ICogb2J0YWluZWQgR1VQIHJlZmVyZW5jZS5cbi1cdFx0XHRcdFx0ICovXG4tXHRcdFx0XHRcdHNldF9wdGVzKG1tLCBhZGRyZXNzLCBwdm13LnB0ZSwgcHRldmFsLCBucl9wYWdlcyk7XG4tXHRcdFx0XHRcdGZvbGlvX3NldF9zd2FwYmFja2VkKGZvbGlvKTtcbi1cdFx0XHRcdFx0Z290byB3YWxrX2Fib3J0O1xuLVx0XHRcdFx0fSBlbHNlIGlmIChyZWZfY291bnQgIT0gMSAmIzQzOyBtYXBfY291bnQpIHtcbi1cdFx0XHRcdFx0Lypcbi1cdFx0XHRcdFx0ICogQWRkaXRpb25hbCByZWZlcmVuY2UuIENvdWxkIGJlIGEgR1VQIHJlZmVyZW5jZSBvciBhbnlcbi1cdFx0XHRcdFx0ICogc3BlY3VsYXRpdmUgcmVmZXJlbmNlLiBHVVAgdXNlcnMgbXVzdCBtYXJrIHRoZSBmb2xpb1xuLVx0XHRcdFx0XHQgKiBkaXJ0eSBpZiB0aGVyZSB3YXMgYSBtb2RpZmljYXRpb24uIFRoaXMgZm9saW8gY2Fubm90IGJlXG4tXHRcdFx0XHRcdCAqIHJlY2xhaW1lZCByaWdodCBub3cgZWl0aGVyIHdheSwgc28gYWN0IGp1c3QgbGlrZSBub3RoaW5nXG4tXHRcdFx0XHRcdCAqIGhhcHBlbmVkLlxuLVx0XHRcdFx0XHQgKiBXZSYjMzk7bGwgY29tZSBiYWNrIGhlcmUgbGF0ZXIgYW5kIGRldGVjdCBpZiB0aGUgZm9saW8gd2FzXG4tXHRcdFx0XHRcdCAqIGRpcnRpZWQgd2hlbiB0aGUgYWRkaXRpb25hbCByZWZlcmVuY2UgaXMgZ29uZS5cbi1cdFx0XHRcdFx0ICovXG4tXHRcdFx0XHRcdHNldF9wdGVzKG1tLCBhZGRyZXNzLCBwdm13LnB0ZSwgcHRldmFsLCBucl9wYWdlcyk7XG4tXHRcdFx0XHRcdGdvdG8gd2Fsa19hYm9ydDtcbi1cdFx0XHRcdH1cbi1cdFx0XHRcdGFkZF9tbV9jb3VudGVyKG1tLCBNTV9BTk9OUEFHRVMsIC1ucl9wYWdlcyk7XG4tXHRcdFx0XHRnb3RvIGRpc2NhcmQ7XG4tXHRcdFx0fVxuLVxuLVx0XHRcdGlmIChmb2xpb19kdXBfc3dhcChmb2xpbywgc3VicGFnZSkgXHUwMDNjIDApIHtcbi1cdFx0XHRcdHNldF9wdGVfYXQobW0sIGFkZHJlc3MsIHB2bXcucHRlLCBwdGV2YWwpO1xuLVx0XHRcdFx0Z290byB3YWxrX2Fib3J0O1xuLVx0XHRcdH1cbi1cbi1cdFx0XHQvKlxuLVx0XHRcdCAqIGFyY2hfdW5tYXBfb25lKCkgaXMgZXhwZWN0ZWQgdG8gYmUgYSBOT1Agb25cbi1cdFx0XHQgKiBhcmNoaXRlY3R1cmVzIHdoZXJlIHdlIGNvdWxkIGhhdmUgUEZOIHN3YXAgUFRFcyxcbi1cdFx0XHQgKiBzbyB3ZSYjMzk7bGwgbm90IGNoZWNrL2NhcmUuXG4tXHRcdFx0ICovXG4tXHRcdFx0aWYgKGFyY2hfdW5tYXBfb25lKG1tLCB2bWEsIGFkZHJlc3MsIHB0ZXZhbCkgXHUwMDNjIDApIHtcbi1cdFx0XHRcdGZvbGlvX3B1dF9zd2FwKGZvbGlvLCBzdWJwYWdlKTtcbi1cdFx0XHRcdHNldF9wdGVfYXQobW0sIGFkZHJlc3MsIHB2bXcucHRlLCBwdGV2YWwpO1xuLVx0XHRcdFx0Z290byB3YWxrX2Fib3J0O1xuLVx0XHRcdH1cbi1cbi1cdFx0XHQvKiBTZWUgZm9saW9fdHJ5X3NoYXJlX2Fub25fcm1hcCgpOiBjbGVhciBQVEUgZmlyc3QuICovXG4tXHRcdFx0aWYgKGFub25fZXhjbHVzaXZlIFx1MDAyNlx1MDAyNlxuLVx0XHRcdCAgICBmb2xpb190cnlfc2hhcmVfYW5vbl9ybWFwX3B0ZShmb2xpbywgc3VicGFnZSkpIHtcbi1cdFx0XHRcdGZvbGlvX3B1dF9zd2FwKGZvbGlvLCBzdWJwYWdlKTtcbi1cdFx0XHRcdHNldF9wdGVfYXQobW0sIGFkZHJlc3MsIHB2bXcucHRlLCBwdGV2YWwpO1xuLVx0XHRcdFx0Z290byB3YWxrX2Fib3J0O1xuLVx0XHRcdH1cbi1cdFx0XHRtbV9wcmVwYXJlX2Zvcl9zd2FwX2VudHJpZXMobW0pO1xuLVx0XHRcdGRlY19tbV9jb3VudGVyKG1tLCBNTV9BTk9OUEFHRVMpO1xuLVx0XHRcdGluY19tbV9jb3VudGVyKG1tLCBNTV9TV0FQRU5UUyk7XG4tXHRcdFx0c3dwX3B0ZSA9IHN3cF9lbnRyeV90b19wdGUoZW50cnkpO1xuLVx0XHRcdGlmIChhbm9uX2V4Y2x1c2l2ZSlcbi1cdFx0XHRcdHN3cF9wdGUgPSBwdGVfc3dwX21rZXhjbHVzaXZlKHN3cF9wdGUpO1xuLVx0XHRcdGlmIChsaWtlbHkocHRlX3ByZXNlbnQocHRldmFsKSkpIHtcbi1cdFx0XHRcdGlmIChwdGVfc29mdF9kaXJ0eShwdGV2YWwpKVxuLVx0XHRcdFx0XHRzd3BfcHRlID0gcHRlX3N3cF9ta3NvZnRfZGlydHkoc3dwX3B0ZSk7XG4tXHRcdFx0XHRpZiAocHRlX3VmZmRfd3AocHRldmFsKSlcbi1cdFx0XHRcdFx0c3dwX3B0ZSA9IHB0ZV9zd3BfbWt1ZmZkX3dwKHN3cF9wdGUpO1xuLVx0XHRcdH0gZWxzZSB7XG4tXHRcdFx0XHRpZiAocHRlX3N3cF9zb2Z0X2RpcnR5KHB0ZXZhbCkpXG4tXHRcdFx0XHRcdHN3cF9wdGUgPSBwdGVfc3dwX21rc29mdF9kaXJ0eShzd3BfcHRlKTtcbi1cdFx0XHRcdGlmIChwdGVfc3dwX3VmZmRfd3AocHRldmFsKSlcbi1cdFx0XHRcdFx0c3dwX3B0ZSA9IHB0ZV9zd3BfbWt1ZmZkX3dwKHN3cF9wdGUpO1xuLVx0XHRcdH1cbi1cdFx0XHRzZXRfcHRlX2F0KG1tLCBhZGRyZXNzLCBwdm13LnB0ZSwgc3dwX3B0ZSk7XG4mIzQzO1x0XHRcdGdvdG8gZmluaXNoX3VubWFwO1xuIFx0XHR9IGVsc2Uge1xuIFx0XHRcdC8qXG4gXHRcdFx0ICogVGhpcyBpcyBhIGxvY2tlZCBmaWxlLWJhY2tlZCBmb2xpbyxcbkBAIC0yMzQwLDEyICYjNDM7MjQwNCw4IEBAIHN0YXRpYyBib29sIHRyeV90b191bm1hcF9vbmUoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4gXHRcdFx0ICovXG4gXHRcdFx0YWRkX21tX2NvdW50ZXIobW0sIG1tX2NvdW50ZXJfZmlsZShmb2xpbyksIC1ucl9wYWdlcyk7XG4gXHRcdH1cbi1kaXNjYXJkOlxuLVx0XHRpZiAodW5saWtlbHkoZm9saW9fdGVzdF9odWdldGxiKGZvbGlvKSkpIHtcbi1cdFx0XHRodWdldGxiX3JlbW92ZV9ybWFwKGZvbGlvKTtcbi1cdFx0fSBlbHNlIHtcbi1cdFx0XHRmb2xpb19yZW1vdmVfcm1hcF9wdGVzKGZvbGlvLCBzdWJwYWdlLCBucl9wYWdlcywgdm1hKTtcbi1cdFx0fVxuJiM0MztmaW5pc2hfdW5tYXA6XG4mIzQzO1x0XHRmb2xpb19yZW1vdmVfcm1hcF9wdGVzKGZvbGlvLCBzdWJwYWdlLCBucl9wYWdlcywgdm1hKTtcbiBcdFx0aWYgKHZtYS1cdTAwM2V2bV9mbGFncyBcdTAwMjYgVk1fTE9DS0VEKVxuIFx0XHRcdG1sb2NrX2RyYWluX2xvY2FsKCk7XG4gXHRcdGZvbGlvX3B1dF9yZWZzKGZvbGlvLCBucl9wYWdlcyk7XG5AQCAtMjM5Myw3ICYjNDM7MjQ1Myw4IEBAIHN0YXRpYyBpbnQgZm9saW9fbm90X21hcHBlZChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIHZvaWQgdHJ5X3RvX3VubWFwKHN0cnVjdCBmb2xpbyAqZm9saW8sIGVudW0gdHR1X2ZsYWdzIGZsYWdzKVxuIHtcbiBcdHN0cnVjdCBybWFwX3dhbGtfY29udHJvbCByd2MgPSB7XG4tXHRcdC5ybWFwX29uZSA9IHRyeV90b191bm1hcF9vbmUsXG4mIzQzO1x0XHQucm1hcF9vbmUgPSBmb2xpb190ZXN0X2h1Z2V0bGIoZm9saW8pID9cbiYjNDM7XHRcdFx0XHR0cnlfdG9fdW5tYXBfaHVnZXRsYl9vbmUgOiB0cnlfdG9fdW5tYXBfb25lLFxuIFx0XHQuYXJnID0gKHZvaWQgKilmbGFncyxcbiBcdFx0LmRvbmUgPSBmb2xpb19ub3RfbWFwcGVkLFxuIFx0XHQuYW5vbl9sb2NrID0gZm9saW9fbG9ja19hbm9uX3ZtYV9yZWFkLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA3IDIwOjM3PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0hVR0VUTEJGUyYjMzQ7LAogICAgJiMzNDtTV0FQJiMzNDssCiAgICAmIzM0O01FTU9SWV9GQUlMVVJFJiMzNDssCiAgICAmIzM0O0hXUE9JU09OX0lOSkVDVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3RyeV90b191bm1hcF9odWdldGxiX29uZSYjMzQ7LAogICAgJiMzNDt0dHVfYW5vbl9mb2xpbyYjMzQ7LAogICAgJiMzNDt0dHVfYW5vbl9sYXp5ZnJlZV9mb2xpbyYjMzQ7LAogICAgJiMzNDt0dHVfYW5vbl9zd2FwYmFja2VkX2ZvbGlvJiMzNDssCiAgICAmIzM0O3RyeV90b191bm1hcF9vbmUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSB1bm1hcHBpbmcgbG9naWMgaW4gbW0vcm1hcC5jIGJ5IGV4dHJhY3RpbmcgaHVnZXRsYiBhbmQgYW5vbnltb3VzIGZvbGlvIHVubWFwcGluZyBpbnRvIHNlcGFyYXRlIGZ1bmN0aW9ucyAodHJ5X3RvX3VubWFwX2h1Z2V0bGJfb25lLCB0dHVfYW5vbl9mb2xpbywgZXRjLikuIEl0IG1vZGlmaWVzIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgbG9naWMgcmVsYXRlZCB0byByZXZlcnNlIG1hcHBpbmcsIGh1Z2UgcGFnZXMsIGFuZCBzd2FwLiBGdXp6aW5nIHNob3VsZCBmb2N1cyBvbiB0aGVzZSBuZXcgZnVuY3Rpb25zIHRvIGVuc3VyZSBubyByZWdyZXNzaW9ucyBvciBidWdzIHdlcmUgaW50cm9kdWNlZCBkdXJpbmcgdGhlIHJlZmFjdG9yaW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdAogICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksCiAgIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAxZTg0YmMwZTBjMjA2ZjkxNTAwOGFkNGM3MTkwNWNlYjI3OGIxYzU4CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFR1ZSBKdWwgNyAyMDozNzo0NCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaHVnZXRsYi5oIGIvaW5jbHVkZS9saW51eC9odWdldGxiLmgKaW5kZXggNDExNTA3NmU0OTIyYWUuLmJmN2UxNjNlMzc3OWQ4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaApAQCAtMTI3MSw2ICYjNDM7MTI3MSw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBodWdldGxiX2NvdW50X3N1Yihsb25nIGwsIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKQogfQogCiBwdGVfdCBodWdlX3B0ZXBfZ2V0KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsIHB0ZV90ICpwdGVwKTsKJiM0Mzt1bnNpZ25lZCBsb25nIGh1Z2VfcHRlX2RpcnR5KHB0ZV90IHB0ZSk7CiAKIHN0YXRpYyBpbmxpbmUgcHRlX3QgaHVnZV9wdGVwX2NsZWFyX2ZsdXNoKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAogCQkJCQkgIHVuc2lnbmVkIGxvbmcgYWRkciwgcHRlX3QgKnB0ZXApCmRpZmYgLS1naXQgYS9tbS9ybWFwLmMgYi9tbS9ybWFwLmMKaW5kZXggOTkzOTQwMGU3N2M3OWEuLmYwMjFlY2Q1MWE0YTJlIDEwMDY0NAotLS0gYS9tbS9ybWFwLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vcm1hcC5jCkBAIC0xOTc4LDYgJiM0MzsxOTc4LDIzMyBAQCBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBmb2xpb191bm1hcF9wdGVfYmF0Y2goc3RydWN0IGZvbGlvICpmb2xpbywKIAkJCQkgICAgIEZQQl9SRVNQRUNUX1dSSVRFIHwgRlBCX1JFU1BFQ1RfU09GVF9ESVJUWSk7CiB9CiAKJiM0MztzdGF0aWMgYm9vbCB0cnlfdG9fdW5tYXBfaHVnZXRsYl9vbmUoc3RydWN0IGZvbGlvICpmb2xpbywKJiM0MzsJCXN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MsIHZvaWQgKmFyZykKJiM0Mzt7CiYjNDM7CURFRklORV9GT0xJT19WTUFfV0FMSyhwdm13LCBmb2xpbywgdm1hLCBhZGRyZXNzLCAwKTsKJiM0MzsJc3RydWN0IG1tdV9ub3RpZmllcl9yYW5nZSByYW5nZTsKJiM0MzsJZW51bSB0dHVfZmxhZ3MgZmxhZ3MgPSAoZW51bSB0dHVfZmxhZ3MpKGxvbmcpYXJnOwomIzQzOwlzdHJ1Y3QgbW1fc3RydWN0ICptbSA9IHZtYS0mZ3Q7dm1fbW07CiYjNDM7CWNvbnN0IHVuc2lnbmVkIGxvbmcgaHN6ID0gaHVnZV9wYWdlX3NpemUoaHN0YXRlX3ZtYSh2bWEpKTsKJiM0MzsJYm9vbCByZXQgPSB0cnVlOwomIzQzOwlwdGVfdCBwdGV2YWw7CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIFRoZSB0cnlfdG9fdW5tYXAoKSBpcyBvbmx5IHBhc3NlZCBhIGh1Z2V0bGIgZm9saW8gaW4gdGhlIGNhc2UKJiM0MzsJICogd2hlcmUgdGhlIGh1Z2V0bGIgZm9saW8gaXMgcG9pc29uZWQuCiYjNDM7CSAqLwomIzQzOwlWTV9XQVJOX09OX0ZPTElPKCFmb2xpb190ZXN0X2h3cG9pc29uKGZvbGlvKSwgZm9saW8pOwomIzQzOwlWTV9XQVJOX09OX09OQ0UoIShmbGFncyAmYW1wOyBUVFVfSFdQT0lTT04pKTsKJiM0MzsKJiM0MzsJcmFuZ2UuZW5kID0gdm1hX2FkZHJlc3NfZW5kKCZhbXA7cHZtdyk7CiYjNDM7CW1tdV9ub3RpZmllcl9yYW5nZV9pbml0KCZhbXA7cmFuZ2UsIE1NVV9OT1RJRllfQ0xFQVIsIDAsIHZtYS0mZ3Q7dm1fbW0sCiYjNDM7CQkJCWFkZHJlc3MsIHJhbmdlLmVuZCk7CiYjNDM7CWFkanVzdF9yYW5nZV9pZl9wbWRfc2hhcmluZ19wb3NzaWJsZSh2bWEsICZhbXA7cmFuZ2Uuc3RhcnQsICZhbXA7cmFuZ2UuZW5kKTsKJiM0MzsJbW11X25vdGlmaWVyX2ludmFsaWRhdGVfcmFuZ2Vfc3RhcnQoJmFtcDtyYW5nZSk7CiYjNDM7CiYjNDM7CS8qIFRoZXJlIGlzIG9ubHkgYSBzaW5nbGUgbWFwcGluZyBpbiBhIFZNQS4gKi8KJiM0MzsJaWYgKCFwYWdlX3ZtYV9tYXBwZWRfd2FsaygmYW1wO3B2bXcpKQomIzQzOwkJZ290byByYW5nZV9lbmQ7CiYjNDM7CiYjNDM7CWFkZHJlc3MgPSBwdm13LmFkZHJlc3M7CiYjNDM7CXB0ZXZhbCA9IGh1Z2VfcHRlcF9nZXQobW0sIGFkZHJlc3MsIHB2bXcucHRlKTsKJiM0MzsJVk1fV0FSTl9PTl9PTkNFKCFwdGVfcHJlc2VudChwdGV2YWwpKTsKJiM0MzsJVk1fV0FSTl9PTl9PTkNFKHB0ZV9wZm4ocHRldmFsKSAhPSBmb2xpb19wZm4oZm9saW8pKTsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogaHVnZV9wbWRfdW5zaGFyZSBtYXkgdW5tYXAgYW4gZW50aXJlIFBNRCBwYWdlLiBUaGVyZSBpcyBubyB3YXkgb2YKJiM0MzsJICoga25vd2luZyBleGFjdGx5IHdoaWNoIFBNRHMgbWF5IGJlIGNhY2hlZCBmb3IgdGhpcyBtbSwgc28gd2UgbXVzdAomIzQzOwkgKiBmbHVzaCB0aGVtIGFsbC4gc3RhcnQvZW5kIHdlcmUgYWxyZWFkeSBhZGp1c3RlZCBhYm92ZSB0byBjb3ZlciB0aGlzCiYjNDM7CSAqIHJhbmdlLgomIzQzOwkgKi8KJiM0MzsJZmx1c2hfY2FjaGVfcmFuZ2Uodm1hLCByYW5nZS5zdGFydCwgcmFuZ2UuZW5kKTsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogVG8gY2FsbCBodWdlX3BtZF91bnNoYXJlLCBpX21tYXBfcndzZW0gbXVzdCBiZSBoZWxkIGluIHdyaXRlIG1vZGUuCiYjNDM7CSAqIENhbGxlciBuZWVkcyB0byBleHBsaWNpdGx5IGRvIHRoaXMgb3V0c2lkZSBybWFwIHJvdXRpbmVzLgomIzQzOwkgKgomIzQzOwkgKiBXZSBhbHNvIG11c3QgaG9sZCBodWdldGxiIHZtYV9sb2NrIGluIHdyaXRlIG1vZGUuIExvY2sgb3JkZXIgZGljdGF0ZXMKJiM0MzsJICogYWNxdWlyaW5nIHZtYV9sb2NrIEJFRk9SRSBpX21tYXBfcndzZW0uIFdlIGNhbiBvbmx5IHRyeSBsb2NrIGhlcmUgYW5kCiYjNDM7CSAqIGZhaWwgaWYgdW5zdWNjZXNzZnVsLgomIzQzOwkgKi8KJiM0MzsJaWYgKCFmb2xpb190ZXN0X2Fub24oZm9saW8pKSB7CiYjNDM7CQlzdHJ1Y3QgbW11X2dhdGhlciB0bGI7CiYjNDM7CiYjNDM7CQlWTV9XQVJOX09OKCEoZmxhZ3MgJmFtcDsgVFRVX1JNQVBfTE9DS0VEKSk7CiYjNDM7CQlpZiAoIWh1Z2V0bGJfdm1hX3RyeWxvY2tfd3JpdGUodm1hKSkgewomIzQzOwkJCXJldCA9IGZhbHNlOwomIzQzOwkJCWdvdG8gd2Fsa19kb25lOwomIzQzOwkJfQomIzQzOwomIzQzOwkJdGxiX2dhdGhlcl9tbXVfdm1hKCZhbXA7dGxiLCB2bWEpOwomIzQzOwkJaWYgKGh1Z2VfcG1kX3Vuc2hhcmUoJmFtcDt0bGIsIHZtYSwgYWRkcmVzcywgcHZtdy5wdGUpKSB7CiYjNDM7CQkJaHVnZXRsYl92bWFfdW5sb2NrX3dyaXRlKHZtYSk7CiYjNDM7CQkJaHVnZV9wbWRfdW5zaGFyZV9mbHVzaCgmYW1wO3RsYiwgdm1hKTsKJiM0MzsJCQl0bGJfZmluaXNoX21tdSgmYW1wO3RsYik7CiYjNDM7CQkJLyoKJiM0MzsJCQkgKiBUaGUgUE1EIHRhYmxlIHdhcyB1bm1hcHBlZCwgY29uc2VxdWVudGx5IHVubWFwcGluZwomIzQzOwkJCSAqIHRoZSBmb2xpby4KJiM0MzsJCQkgKi8KJiM0MzsJCQlnb3RvIHdhbGtfZG9uZTsKJiM0MzsJCX0KJiM0MzsJCWh1Z2V0bGJfdm1hX3VubG9ja193cml0ZSh2bWEpOwomIzQzOwkJdGxiX2ZpbmlzaF9tbXUoJmFtcDt0bGIpOwomIzQzOwl9CiYjNDM7CXB0ZXZhbCA9IGh1Z2VfcHRlcF9jbGVhcl9mbHVzaCh2bWEsIGFkZHJlc3MsIHB2bXcucHRlKTsKJiM0MzsJaWYgKGh1Z2VfcHRlX2RpcnR5KHB0ZXZhbCkpCiYjNDM7CQlmb2xpb19tYXJrX2RpcnR5KGZvbGlvKTsKJiM0MzsKJiM0MzsJcHRldmFsID0gc3dwX2VudHJ5X3RvX3B0ZShtYWtlX2h3cG9pc29uX2VudHJ5KGZvbGlvX3BhZ2UoZm9saW8sIDApKSk7CiYjNDM7CWh1Z2V0bGJfY291bnRfc3ViKGZvbGlvX25yX3BhZ2VzKGZvbGlvKSwgbW0pOwomIzQzOwlzZXRfaHVnZV9wdGVfYXQobW0sIGFkZHJlc3MsIHB2bXcucHRlLCBwdGV2YWwsIGhzeik7CiYjNDM7CWh1Z2V0bGJfcmVtb3ZlX3JtYXAoZm9saW8pOwomIzQzOwlmb2xpb19wdXRfcmVmcyhmb2xpbywgMSk7CiYjNDM7CiYjNDM7d2Fsa19kb25lOgomIzQzOwlwYWdlX3ZtYV9tYXBwZWRfd2Fsa19kb25lKCZhbXA7cHZtdyk7CiYjNDM7cmFuZ2VfZW5kOgomIzQzOwltbXVfbm90aWZpZXJfaW52YWxpZGF0ZV9yYW5nZV9lbmQoJmFtcDtyYW5nZSk7CiYjNDM7CXJldHVybiByZXQ7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbmxpbmUgYm9vbCB0dHVfYW5vbl9sYXp5ZnJlZV9mb2xpbyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKJiM0MzsJCXN0cnVjdCBmb2xpbyAqZm9saW8pCiYjNDM7ewomIzQzOwlpbnQgcmVmX2NvdW50LCBtYXBfY291bnQ7CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIFN5bmNocm9uaXplIHdpdGggZ3VwX3B0ZV9yYW5nZSgpOgomIzQzOwkgKiAtIGNsZWFyIFBURTsgYmFycmllcjsgcmVhZCByZWZjb3VudAomIzQzOwkgKiAtIGluYyByZWZjb3VudDsgYmFycmllcjsgcmVhZCBQVEUKJiM0MzsJICovCiYjNDM7CXNtcF9tYigpOwomIzQzOwomIzQzOwlyZWZfY291bnQgPSBmb2xpb19yZWZfY291bnQoZm9saW8pOwomIzQzOwltYXBfY291bnQgPSBmb2xpb19tYXBjb3VudChmb2xpbyk7CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIE9yZGVyIHJlYWRzIGZvciBwYWdlIHJlZmNvdW50IGFuZCBkaXJ0eSBmbGFnCiYjNDM7CSAqIChzZWUgY29tbWVudHMgaW4gX19yZW1vdmVfbWFwcGluZygpKS4KJiM0MzsJICovCiYjNDM7CXNtcF9ybWIoKTsKJiM0MzsKJiM0MzsJaWYgKGZvbGlvX3Rlc3RfZGlydHkoZm9saW8pICZhbXA7JmFtcDsgISh2bWEtJmd0O3ZtX2ZsYWdzICZhbXA7IFZNX0RST1BQQUJMRSkpIHsKJiM0MzsJCS8qCiYjNDM7CQkgKiByZWRpcnRpZWQgZWl0aGVyIHVzaW5nIHRoZSBwYWdlIHRhYmxlIG9yIGEgcHJldmlvdXNseQomIzQzOwkJICogb2J0YWluZWQgR1VQIHJlZmVyZW5jZS4KJiM0MzsJCSAqLwomIzQzOwkJZm9saW9fc2V0X3N3YXBiYWNrZWQoZm9saW8pOwomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmIChyZWZfY291bnQgIT0gMSAmIzQzOyBtYXBfY291bnQpIHsKJiM0MzsJCS8qCiYjNDM7CQkgKiBBZGRpdGlvbmFsIHJlZmVyZW5jZS4gQ291bGQgYmUgYSBHVVAgcmVmZXJlbmNlIG9yIGFueQomIzQzOwkJICogc3BlY3VsYXRpdmUgcmVmZXJlbmNlLiBHVVAgdXNlcnMgbXVzdCBtYXJrIHRoZSBmb2xpbwomIzQzOwkJICogZGlydHkgaWYgdGhlcmUgd2FzIGEgbW9kaWZpY2F0aW9uLiBUaGlzIGZvbGlvIGNhbm5vdCBiZQomIzQzOwkJICogcmVjbGFpbWVkIHJpZ2h0IG5vdyBlaXRoZXIgd2F5LCBzbyBhY3QganVzdCBsaWtlIG5vdGhpbmcKJiM0MzsJCSAqIGhhcHBlbmVkLgomIzQzOwkJICogV2UmIzM5O2xsIGNvbWUgYmFjayBoZXJlIGxhdGVyIGFuZCBkZXRlY3QgaWYgdGhlIGZvbGlvIHdhcwomIzQzOwkJICogZGlydGllZCB3aGVuIHRoZSBhZGRpdGlvbmFsIHJlZmVyZW5jZSBpcyBnb25lLgomIzQzOwkJICovCiYjNDM7CQlyZXR1cm4gZmFsc2U7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIHRydWU7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBzZXRfc3dwX3B0ZV9hdChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyZXNzLAomIzQzOwkJcHRlX3QgKnB0ZXAsIHN3cF9lbnRyeV90IGVudHJ5LCBwdGVfdCBwdGV2YWwsIGJvb2wgYW5vbl9leGNsdXNpdmUpCiYjNDM7ewomIzQzOwlwdGVfdCBzd3BfcHRlID0gc3dwX2VudHJ5X3RvX3B0ZShlbnRyeSk7CiYjNDM7CiYjNDM7CWlmIChhbm9uX2V4Y2x1c2l2ZSkKJiM0MzsJCXN3cF9wdGUgPSBwdGVfc3dwX21rZXhjbHVzaXZlKHN3cF9wdGUpOwomIzQzOwomIzQzOwlpZiAobGlrZWx5KHB0ZV9wcmVzZW50KHB0ZXZhbCkpKSB7CiYjNDM7CQlpZiAocHRlX3NvZnRfZGlydHkocHRldmFsKSkKJiM0MzsJCQlzd3BfcHRlID0gcHRlX3N3cF9ta3NvZnRfZGlydHkoc3dwX3B0ZSk7CiYjNDM7CQlpZiAocHRlX3VmZmRfd3AocHRldmFsKSkKJiM0MzsJCQlzd3BfcHRlID0gcHRlX3N3cF9ta3VmZmRfd3Aoc3dwX3B0ZSk7CiYjNDM7CX0gZWxzZSB7CiYjNDM7CQkvKiBEZXZpY2UtZXhjbHVzaXZlIGVudHJ5ICovCiYjNDM7CQlpZiAocHRlX3N3cF9zb2Z0X2RpcnR5KHB0ZXZhbCkpCiYjNDM7CQkJc3dwX3B0ZSA9IHB0ZV9zd3BfbWtzb2Z0X2RpcnR5KHN3cF9wdGUpOwomIzQzOwkJaWYgKHB0ZV9zd3BfdWZmZF93cChwdGV2YWwpKQomIzQzOwkJCXN3cF9wdGUgPSBwdGVfc3dwX21rdWZmZF93cChzd3BfcHRlKTsKJiM0MzsJfQomIzQzOwomIzQzOwlzZXRfcHRlX2F0KG1tLCBhZGRyZXNzLCBwdGVwLCBzd3BfcHRlKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGlubGluZSBib29sIHR0dV9hbm9uX3N3YXBiYWNrZWRfZm9saW8oc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHN0cnVjdCBmb2xpbyAqZm9saW8sCiYjNDM7CQlzdHJ1Y3QgcGFnZSAqc3VicGFnZSwgdW5zaWduZWQgbG9uZyBhZGRyZXNzLCBwdGVfdCAqcHRlcCwKJiM0MzsJCXB0ZV90IHB0ZXZhbCkKJiM0Mzt7CiYjNDM7CWJvb2wgYW5vbl9leGNsdXNpdmUgPSBmb2xpb190ZXN0X2Fub24oZm9saW8pICZhbXA7JmFtcDsgUGFnZUFub25FeGNsdXNpdmUoc3VicGFnZSk7CiYjNDM7CXN3cF9lbnRyeV90IGVudHJ5ID0gcGFnZV9zd2FwX2VudHJ5KHN1YnBhZ2UpOwomIzQzOwlzdHJ1Y3QgbW1fc3RydWN0ICptbSA9IHZtYS0mZ3Q7dm1fbW07CiYjNDM7CiYjNDM7CWlmIChmb2xpb19kdXBfc3dhcChmb2xpbywgc3VicGFnZSkgJmx0OyAwKQomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBhcmNoX3VubWFwX29uZSgpIGlzIGV4cGVjdGVkIHRvIGJlIGEgTk9QIG9uCiYjNDM7CSAqIGFyY2hpdGVjdHVyZXMgd2hlcmUgd2UgY291bGQgaGF2ZSBQRk4gc3dhcCBQVEVzLAomIzQzOwkgKiBzbyB3ZSYjMzk7bGwgbm90IGNoZWNrL2NhcmUuCiYjNDM7CSAqLwomIzQzOwlpZiAoYXJjaF91bm1hcF9vbmUobW0sIHZtYSwgYWRkcmVzcywgcHRldmFsKSAmbHQ7IDApIHsKJiM0MzsJCWZvbGlvX3B1dF9zd2FwKGZvbGlvLCBzdWJwYWdlKTsKJiM0MzsJCXJldHVybiBmYWxzZTsKJiM0MzsJfQomIzQzOwomIzQzOwkvKiBTZWUgZm9saW9fdHJ5X3NoYXJlX2Fub25fcm1hcCgpOiBjbGVhciBQVEUgZmlyc3QuICovCiYjNDM7CWlmIChhbm9uX2V4Y2x1c2l2ZSAmYW1wOyZhbXA7IGZvbGlvX3RyeV9zaGFyZV9hbm9uX3JtYXBfcHRlKGZvbGlvLCBzdWJwYWdlKSkgewomIzQzOwkJZm9saW9fcHV0X3N3YXAoZm9saW8sIHN1YnBhZ2UpOwomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwl9CiYjNDM7CiYjNDM7CW1tX3ByZXBhcmVfZm9yX3N3YXBfZW50cmllcyhtbSk7CiYjNDM7CWRlY19tbV9jb3VudGVyKG1tLCBNTV9BTk9OUEFHRVMpOwomIzQzOwlpbmNfbW1fY291bnRlcihtbSwgTU1fU1dBUEVOVFMpOwomIzQzOwlzZXRfc3dwX3B0ZV9hdChtbSwgYWRkcmVzcywgcHRlcCwgZW50cnksIHB0ZXZhbCwgYW5vbl9leGNsdXNpdmUpOwomIzQzOwlyZXR1cm4gdHJ1ZTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGlubGluZSBib29sIHR0dV9hbm9uX2ZvbGlvKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLAomIzQzOwkJc3RydWN0IHBhZ2UgKnN1YnBhZ2UsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcywgcHRlX3QgKnB0ZXAsCiYjNDM7CQlwdGVfdCBwdGV2YWwsIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgbW1fc3RydWN0ICptbSA9IHZtYS0mZ3Q7dm1fbW07CiYjNDM7CWJvb2wgcmV0OwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBTdG9yZSB0aGUgc3dhcCBsb2NhdGlvbiBpbiB0aGUgcHRlLgomIzQzOwkgKiBTZWUgaGFuZGxlX3B0ZV9mYXVsdCgpIC4uLgomIzQzOwkgKi8KJiM0MzsJaWYgKHVubGlrZWx5KGZvbGlvX3Rlc3Rfc3dhcGJhY2tlZChmb2xpbykgIT0KJiM0MzsJCQlmb2xpb190ZXN0X3N3YXBjYWNoZShmb2xpbykpKSB7CiYjNDM7CQlXQVJOX09OX09OQ0UoMSk7CiYjNDM7CQlyZXR1cm4gZmFsc2U7CiYjNDM7CX0KJiM0MzsKJiM0MzsJLyogTUFEVl9GUkVFIHBhZ2UgY2hlY2sgKi8KJiM0MzsJaWYgKCFmb2xpb190ZXN0X3N3YXBiYWNrZWQoZm9saW8pKSB7CiYjNDM7CQlyZXQgPSB0dHVfYW5vbl9sYXp5ZnJlZV9mb2xpbyh2bWEsIGZvbGlvKTsKJiM0MzsJCWlmIChyZXQpCiYjNDM7CQkJYWRkX21tX2NvdW50ZXIobW0sIE1NX0FOT05QQUdFUywgLW5yX3BhZ2VzKTsKJiM0MzsJfSBlbHNlIHsKJiM0MzsJCS8qIG5yX3BhZ2VzICZndDsgMSBub3Qgc3VwcG9ydGVkIHlldCAqLwomIzQzOwkJcmV0ID0gdHR1X2Fub25fc3dhcGJhY2tlZF9mb2xpbyh2bWEsIGZvbGlvLCBzdWJwYWdlLCBhZGRyZXNzLAomIzQzOwkJCQkJCXB0ZXAsIHB0ZXZhbCk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKCFyZXQpCiYjNDM7CQlzZXRfcHRlcyhtbSwgYWRkcmVzcywgcHRlcCwgcHRldmFsLCBucl9wYWdlcyk7CiYjNDM7CiYjNDM7CXJldHVybiByZXQ7CiYjNDM7fQomIzQzOwogLyoKICAqIEBhcmc6IGVudW0gdHR1X2ZsYWdzIHdpbGwgYmUgcGFzc2VkIHRvIHRoaXMgYXJndW1lbnQKICAqLwpAQCAtMTk4NiwxNCAmIzQzOzIyMTMsMTMgQEAgc3RhdGljIGJvb2wgdHJ5X3RvX3VubWFwX29uZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKIHsKIAlzdHJ1Y3QgbW1fc3RydWN0ICptbSA9IHZtYS0mZ3Q7dm1fbW07CiAJREVGSU5FX0ZPTElPX1ZNQV9XQUxLKHB2bXcsIGZvbGlvLCB2bWEsIGFkZHJlc3MsIDApOwotCWJvb2wgYW5vbl9leGNsdXNpdmUsIHJldCA9IHRydWU7CiYjNDM7CWJvb2wgcmV0ID0gdHJ1ZTsKIAlwdGVfdCBwdGV2YWw7CiAJc3RydWN0IHBhZ2UgKnN1YnBhZ2U7CiAJc3RydWN0IG1tdV9ub3RpZmllcl9yYW5nZSByYW5nZTsKIAllbnVtIHR0dV9mbGFncyBmbGFncyA9IChlbnVtIHR0dV9mbGFncykobG9uZylhcmc7CiAJdW5zaWduZWQgbG9uZyBucl9wYWdlcyA9IDEsIGVuZF9hZGRyOwogCXVuc2lnbmVkIGxvbmcgcGZuOwotCXVuc2lnbmVkIGxvbmcgaHN6ID0gMDsKIAlpbnQgcHRlcyA9IDA7CiAKIAkvKgpAQCAtMjAwNyw4ICYjNDM7MjIzMyw2IEBAIHN0YXRpYyBib29sIHRyeV90b191bm1hcF9vbmUoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCiAKIAkvKgogCSAqIEZvciBUSFAsIHdlIGhhdmUgdG8gYXNzdW1lIHRoZSB3b3JzZSBjYXNlIGllIHBtZCBmb3IgaW52YWxpZGF0aW9uLgotCSAqIEZvciBodWdldGxiLCBpdCBjb3VsZCBiZSBtdWNoIHdvcnNlIGlmIHdlIG5lZWQgdG8gZG8gcHVkCi0JICogaW52YWxpZGF0aW9uIGluIHRoZSBjYXNlIG9mIHBtZCBzaGFyaW5nLgogCSAqCiAJICogTm90ZSB0aGF0IHRoZSBmb2xpbyBjYW4gbm90IGJlIGZyZWVkIGluIHRoaXMgZnVuY3Rpb24gYXMgY2FsbCBvZgogCSAqIHRyeV90b191bm1hcCgpIG11c3QgaG9sZCBhIHJlZmVyZW5jZSBvbiB0aGUgZm9saW8uCkBAIC0yMDE2LDE3ICYjNDM7MjI0MCw2IEBAIHN0YXRpYyBib29sIHRyeV90b191bm1hcF9vbmUoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCiAJcmFuZ2UuZW5kID0gdm1hX2FkZHJlc3NfZW5kKCZhbXA7cHZtdyk7CiAJbW11X25vdGlmaWVyX3JhbmdlX2luaXQoJmFtcDtyYW5nZSwgTU1VX05PVElGWV9DTEVBUiwgMCwgdm1hLSZndDt2bV9tbSwKIAkJCQlhZGRyZXNzLCByYW5nZS5lbmQpOwotCWlmIChmb2xpb190ZXN0X2h1Z2V0bGIoZm9saW8pKSB7Ci0JCS8qCi0JCSAqIElmIHNoYXJpbmcgaXMgcG9zc2libGUsIHN0YXJ0IGFuZCBlbmQgd2lsbCBiZSBhZGp1c3RlZAotCQkgKiBhY2NvcmRpbmdseS4KLQkJICovCi0JCWFkanVzdF9yYW5nZV9pZl9wbWRfc2hhcmluZ19wb3NzaWJsZSh2bWEsICZhbXA7cmFuZ2Uuc3RhcnQsCi0JCQkJCQkgICAgICZhbXA7cmFuZ2UuZW5kKTsKLQotCQkvKiBXZSBuZWVkIHRoZSBodWdlIHBhZ2Ugc2l6ZSBmb3Igc2V0X2h1Z2VfcHRlX2F0KCkgKi8KLQkJaHN6ID0gaHVnZV9wYWdlX3NpemUoaHN0YXRlX3ZtYSh2bWEpKTsKLQl9CiAJbW11X25vdGlmaWVyX2ludmFsaWRhdGVfcmFuZ2Vfc3RhcnQoJmFtcDtyYW5nZSk7CiAKIAl3aGlsZSAocGFnZV92bWFfbWFwcGVkX3dhbGsoJmFtcDtwdm13KSkgewpAQCAtMjExMSw2NSAmIzQzOzIzMjQsMTEgQEAgc3RhdGljIGJvb2wgdHJ5X3RvX3VubWFwX29uZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKIAkJCWNvbnN0IHNvZnRsZWFmX3QgZW50cnkgPSBzb2Z0bGVhZl9mcm9tX3B0ZShwdGV2YWwpOwogCiAJCQlwZm4gPSBzb2Z0bGVhZl90b19wZm4oZW50cnkpOwotCQkJVk1fV0FSTl9PTl9GT0xJTyhmb2xpb190ZXN0X2h1Z2V0bGIoZm9saW8pLCBmb2xpbyk7CiAJCX0KIAogCQlzdWJwYWdlID0gZm9saW9fcGFnZShmb2xpbywgcGZuIC0gZm9saW9fcGZuKGZvbGlvKSk7Ci0JCWFub25fZXhjbHVzaXZlID0gZm9saW9fdGVzdF9hbm9uKGZvbGlvKSAmYW1wOyZhbXA7Ci0JCQkJIFBhZ2VBbm9uRXhjbHVzaXZlKHN1YnBhZ2UpOwogCi0JCWlmIChmb2xpb190ZXN0X2h1Z2V0bGIoZm9saW8pKSB7Ci0JCQlib29sIGFub24gPSBmb2xpb190ZXN0X2Fub24oZm9saW8pOwotCi0JCQkvKgotCQkJICogVGhlIHRyeV90b191bm1hcCgpIGlzIG9ubHkgcGFzc2VkIGEgaHVnZXRsYiBwYWdlCi0JCQkgKiBpbiB0aGUgY2FzZSB3aGVyZSB0aGUgaHVnZXRsYiBwYWdlIGlzIHBvaXNvbmVkLgotCQkJICovCi0JCQlWTV9CVUdfT05fUEFHRSghUGFnZUhXUG9pc29uKHN1YnBhZ2UpLCBzdWJwYWdlKTsKLQkJCS8qCi0JCQkgKiBodWdlX3BtZF91bnNoYXJlIG1heSB1bm1hcCBhbiBlbnRpcmUgUE1EIHBhZ2UuCi0JCQkgKiBUaGVyZSBpcyBubyB3YXkgb2Yga25vd2luZyBleGFjdGx5IHdoaWNoIFBNRHMgbWF5Ci0JCQkgKiBiZSBjYWNoZWQgZm9yIHRoaXMgbW0sIHNvIHdlIG11c3QgZmx1c2ggdGhlbSBhbGwuCi0JCQkgKiBzdGFydC9lbmQgd2VyZSBhbHJlYWR5IGFkanVzdGVkIGFib3ZlIHRvIGNvdmVyIHRoaXMKLQkJCSAqIHJhbmdlLgotCQkJICovCi0JCQlmbHVzaF9jYWNoZV9yYW5nZSh2bWEsIHJhbmdlLnN0YXJ0LCByYW5nZS5lbmQpOwotCi0JCQkvKgotCQkJICogVG8gY2FsbCBodWdlX3BtZF91bnNoYXJlLCBpX21tYXBfcndzZW0gbXVzdCBiZQotCQkJICogaGVsZCBpbiB3cml0ZSBtb2RlLiAgQ2FsbGVyIG5lZWRzIHRvIGV4cGxpY2l0bHkKLQkJCSAqIGRvIHRoaXMgb3V0c2lkZSBybWFwIHJvdXRpbmVzLgotCQkJICoKLQkJCSAqIFdlIGFsc28gbXVzdCBob2xkIGh1Z2V0bGIgdm1hX2xvY2sgaW4gd3JpdGUgbW9kZS4KLQkJCSAqIExvY2sgb3JkZXIgZGljdGF0ZXMgYWNxdWlyaW5nIHZtYV9sb2NrIEJFRk9SRQotCQkJICogaV9tbWFwX3J3c2VtLiAgV2UgY2FuIG9ubHkgdHJ5IGxvY2sgaGVyZSBhbmQgZmFpbAotCQkJICogaWYgdW5zdWNjZXNzZnVsLgotCQkJICovCi0JCQlpZiAoIWFub24pIHsKLQkJCQlzdHJ1Y3QgbW11X2dhdGhlciB0bGI7Ci0KLQkJCQlWTV9CVUdfT04oIShmbGFncyAmYW1wOyBUVFVfUk1BUF9MT0NLRUQpKTsKLQkJCQlpZiAoIWh1Z2V0bGJfdm1hX3RyeWxvY2tfd3JpdGUodm1hKSkKLQkJCQkJZ290byB3YWxrX2Fib3J0OwotCi0JCQkJdGxiX2dhdGhlcl9tbXVfdm1hKCZhbXA7dGxiLCB2bWEpOwotCQkJCWlmIChodWdlX3BtZF91bnNoYXJlKCZhbXA7dGxiLCB2bWEsIGFkZHJlc3MsIHB2bXcucHRlKSkgewotCQkJCQlodWdldGxiX3ZtYV91bmxvY2tfd3JpdGUodm1hKTsKLQkJCQkJaHVnZV9wbWRfdW5zaGFyZV9mbHVzaCgmYW1wO3RsYiwgdm1hKTsKLQkJCQkJdGxiX2ZpbmlzaF9tbXUoJmFtcDt0bGIpOwotCQkJCQkvKgotCQkJCQkgKiBUaGUgUE1EIHRhYmxlIHdhcyB1bm1hcHBlZCwKLQkJCQkJICogY29uc2VxdWVudGx5IHVubWFwcGluZyB0aGUgZm9saW8uCi0JCQkJCSAqLwotCQkJCQlnb3RvIHdhbGtfZG9uZTsKLQkJCQl9Ci0JCQkJaHVnZXRsYl92bWFfdW5sb2NrX3dyaXRlKHZtYSk7Ci0JCQkJdGxiX2ZpbmlzaF9tbXUoJmFtcDt0bGIpOwotCQkJfQotCQkJcHRldmFsID0gaHVnZV9wdGVwX2NsZWFyX2ZsdXNoKHZtYSwgYWRkcmVzcywgcHZtdy5wdGUpOwotCQkJaWYgKHB0ZV9kaXJ0eShwdGV2YWwpKQotCQkJCWZvbGlvX21hcmtfZGlydHkoZm9saW8pOwotCQl9IGVsc2UgaWYgKGxpa2VseShwdGVfcHJlc2VudChwdGV2YWwpKSkgewomIzQzOwkJaWYgKGxpa2VseShwdGVfcHJlc2VudChwdGV2YWwpKSkgewogCQkJbnJfcGFnZXMgPSBmb2xpb191bm1hcF9wdGVfYmF0Y2goZm9saW8sICZhbXA7cHZtdywgZmxhZ3MsIHB0ZXZhbCk7CiAJCQllbmRfYWRkciA9IGFkZHJlc3MgJiM0MzsgbnJfcGFnZXMgKiBQQUdFX1NJWkU7CiAJCQlmbHVzaF9jYWNoZV9yYW5nZSh2bWEsIGFkZHJlc3MsIGVuZF9hZGRyKTsKQEAgLTIyMDQsMTYgJiM0MzsyMzYzLDE0IEBAIHN0YXRpYyBib29sIHRyeV90b191bm1hcF9vbmUoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCiAJCS8qIFVwZGF0ZSBoaWdoIHdhdGVybWFyayBiZWZvcmUgd2UgbG93ZXIgcnNzICovCiAJCXVwZGF0ZV9oaXdhdGVyX3JzcyhtbSk7CiAKLQkJaWYgKFBhZ2VIV1BvaXNvbihzdWJwYWdlKSAmYW1wOyZhbXA7IChmbGFncyAmYW1wOyBUVFVfSFdQT0lTT04pKSB7CiYjNDM7CQkvKgomIzQzOwkJICogV2l0aCBUVFVfSFdQT0lTT04sIHdlIG9ubHkgZXhwZWN0IHNtYWxsIGZvbGlvcyBvciBodWdldGxiCiYjNDM7CQkgKiBmb2xpb3MgaGVyZSBmb3Igbm93LgomIzQzOwkJICovCiYjNDM7CQlpZiAoZm9saW9fdGVzdF9od3BvaXNvbihmb2xpbykgJmFtcDsmYW1wOyAoZmxhZ3MgJmFtcDsgVFRVX0hXUE9JU09OKSkgewogCQkJcHRldmFsID0gc3dwX2VudHJ5X3RvX3B0ZShtYWtlX2h3cG9pc29uX2VudHJ5KHN1YnBhZ2UpKTsKLQkJCWlmIChmb2xpb190ZXN0X2h1Z2V0bGIoZm9saW8pKSB7Ci0JCQkJaHVnZXRsYl9jb3VudF9zdWIoZm9saW9fbnJfcGFnZXMoZm9saW8pLCBtbSk7Ci0JCQkJc2V0X2h1Z2VfcHRlX2F0KG1tLCBhZGRyZXNzLCBwdm13LnB0ZSwgcHRldmFsLAotCQkJCQkJaHN6KTsKLQkJCX0gZWxzZSB7Ci0JCQkJZGVjX21tX2NvdW50ZXIobW0sIG1tX2NvdW50ZXIoZm9saW8pKTsKLQkJCQlzZXRfcHRlX2F0KG1tLCBhZGRyZXNzLCBwdm13LnB0ZSwgcHRldmFsKTsKLQkJCX0KJiM0MzsJCQlkZWNfbW1fY291bnRlcihtbSwgbW1fY291bnRlcihmb2xpbykpOwomIzQzOwkJCXNldF9wdGVfYXQobW0sIGFkZHJlc3MsIHB2bXcucHRlLCBwdGV2YWwpOwogCQl9IGVsc2UgaWYgKGxpa2VseShwdGVfcHJlc2VudChwdGV2YWwpKSAmYW1wOyZhbXA7IHB0ZV91bnVzZWQocHRldmFsKSAmYW1wOyZhbXA7CiAJCQkgICAhdXNlcmZhdWx0ZmRfYXJtZWQodm1hKSkgewogCQkJLyoKQEAgLTIyMjgsMTA0ICYjNDM7MjM4NSwxMSBAQCBzdGF0aWMgYm9vbCB0cnlfdG9fdW5tYXBfb25lKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAogCQkJICovCiAJCQlkZWNfbW1fY291bnRlcihtbSwgbW1fY291bnRlcihmb2xpbykpOwogCQl9IGVsc2UgaWYgKGZvbGlvX3Rlc3RfYW5vbihmb2xpbykpIHsKLQkJCXN3cF9lbnRyeV90IGVudHJ5ID0gcGFnZV9zd2FwX2VudHJ5KHN1YnBhZ2UpOwotCQkJcHRlX3Qgc3dwX3B0ZTsKLQkJCS8qCi0JCQkgKiBTdG9yZSB0aGUgc3dhcCBsb2NhdGlvbiBpbiB0aGUgcHRlLgotCQkJICogU2VlIGhhbmRsZV9wdGVfZmF1bHQoKSAuLi4KLQkJCSAqLwotCQkJaWYgKHVubGlrZWx5KGZvbGlvX3Rlc3Rfc3dhcGJhY2tlZChmb2xpbykgIT0KLQkJCQkJZm9saW9fdGVzdF9zd2FwY2FjaGUoZm9saW8pKSkgewotCQkJCVdBUk5fT05fT05DRSgxKTsKJiM0MzsJCQlpZiAoIXR0dV9hbm9uX2ZvbGlvKHZtYSwgZm9saW8sIHN1YnBhZ2UsIGFkZHJlc3MsCiYjNDM7CQkJCQkgICAgcHZtdy5wdGUsIHB0ZXZhbCwgbnJfcGFnZXMpKQogCQkJCWdvdG8gd2Fsa19hYm9ydDsKLQkJCX0KLQotCQkJLyogTUFEVl9GUkVFIHBhZ2UgY2hlY2sgKi8KLQkJCWlmICghZm9saW9fdGVzdF9zd2FwYmFja2VkKGZvbGlvKSkgewotCQkJCWludCByZWZfY291bnQsIG1hcF9jb3VudDsKLQotCQkJCS8qCi0JCQkJICogU3luY2hyb25pemUgd2l0aCBndXBfcHRlX3JhbmdlKCk6Ci0JCQkJICogLSBjbGVhciBQVEU7IGJhcnJpZXI7IHJlYWQgcmVmY291bnQKLQkJCQkgKiAtIGluYyByZWZjb3VudDsgYmFycmllcjsgcmVhZCBQVEUKLQkJCQkgKi8KLQkJCQlzbXBfbWIoKTsKIAotCQkJCXJlZl9jb3VudCA9IGZvbGlvX3JlZl9jb3VudChmb2xpbyk7Ci0JCQkJbWFwX2NvdW50ID0gZm9saW9fbWFwY291bnQoZm9saW8pOwotCi0JCQkJLyoKLQkJCQkgKiBPcmRlciByZWFkcyBmb3IgcGFnZSByZWZjb3VudCBhbmQgZGlydHkgZmxhZwotCQkJCSAqIChzZWUgY29tbWVudHMgaW4gX19yZW1vdmVfbWFwcGluZygpKS4KLQkJCQkgKi8KLQkJCQlzbXBfcm1iKCk7Ci0KLQkJCQlpZiAoZm9saW9fdGVzdF9kaXJ0eShmb2xpbykgJmFtcDsmYW1wOyAhKHZtYS0mZ3Q7dm1fZmxhZ3MgJmFtcDsgVk1fRFJPUFBBQkxFKSkgewotCQkJCQkvKgotCQkJCQkgKiByZWRpcnRpZWQgZWl0aGVyIHVzaW5nIHRoZSBwYWdlIHRhYmxlIG9yIGEgcHJldmlvdXNseQotCQkJCQkgKiBvYnRhaW5lZCBHVVAgcmVmZXJlbmNlLgotCQkJCQkgKi8KLQkJCQkJc2V0X3B0ZXMobW0sIGFkZHJlc3MsIHB2bXcucHRlLCBwdGV2YWwsIG5yX3BhZ2VzKTsKLQkJCQkJZm9saW9fc2V0X3N3YXBiYWNrZWQoZm9saW8pOwotCQkJCQlnb3RvIHdhbGtfYWJvcnQ7Ci0JCQkJfSBlbHNlIGlmIChyZWZfY291bnQgIT0gMSAmIzQzOyBtYXBfY291bnQpIHsKLQkJCQkJLyoKLQkJCQkJICogQWRkaXRpb25hbCByZWZlcmVuY2UuIENvdWxkIGJlIGEgR1VQIHJlZmVyZW5jZSBvciBhbnkKLQkJCQkJICogc3BlY3VsYXRpdmUgcmVmZXJlbmNlLiBHVVAgdXNlcnMgbXVzdCBtYXJrIHRoZSBmb2xpbwotCQkJCQkgKiBkaXJ0eSBpZiB0aGVyZSB3YXMgYSBtb2RpZmljYXRpb24uIFRoaXMgZm9saW8gY2Fubm90IGJlCi0JCQkJCSAqIHJlY2xhaW1lZCByaWdodCBub3cgZWl0aGVyIHdheSwgc28gYWN0IGp1c3QgbGlrZSBub3RoaW5nCi0JCQkJCSAqIGhhcHBlbmVkLgotCQkJCQkgKiBXZSYjMzk7bGwgY29tZSBiYWNrIGhlcmUgbGF0ZXIgYW5kIGRldGVjdCBpZiB0aGUgZm9saW8gd2FzCi0JCQkJCSAqIGRpcnRpZWQgd2hlbiB0aGUgYWRkaXRpb25hbCByZWZlcmVuY2UgaXMgZ29uZS4KLQkJCQkJICovCi0JCQkJCXNldF9wdGVzKG1tLCBhZGRyZXNzLCBwdm13LnB0ZSwgcHRldmFsLCBucl9wYWdlcyk7Ci0JCQkJCWdvdG8gd2Fsa19hYm9ydDsKLQkJCQl9Ci0JCQkJYWRkX21tX2NvdW50ZXIobW0sIE1NX0FOT05QQUdFUywgLW5yX3BhZ2VzKTsKLQkJCQlnb3RvIGRpc2NhcmQ7Ci0JCQl9Ci0KLQkJCWlmIChmb2xpb19kdXBfc3dhcChmb2xpbywgc3VicGFnZSkgJmx0OyAwKSB7Ci0JCQkJc2V0X3B0ZV9hdChtbSwgYWRkcmVzcywgcHZtdy5wdGUsIHB0ZXZhbCk7Ci0JCQkJZ290byB3YWxrX2Fib3J0OwotCQkJfQotCi0JCQkvKgotCQkJICogYXJjaF91bm1hcF9vbmUoKSBpcyBleHBlY3RlZCB0byBiZSBhIE5PUCBvbgotCQkJICogYXJjaGl0ZWN0dXJlcyB3aGVyZSB3ZSBjb3VsZCBoYXZlIFBGTiBzd2FwIFBURXMsCi0JCQkgKiBzbyB3ZSYjMzk7bGwgbm90IGNoZWNrL2NhcmUuCi0JCQkgKi8KLQkJCWlmIChhcmNoX3VubWFwX29uZShtbSwgdm1hLCBhZGRyZXNzLCBwdGV2YWwpICZsdDsgMCkgewotCQkJCWZvbGlvX3B1dF9zd2FwKGZvbGlvLCBzdWJwYWdlKTsKLQkJCQlzZXRfcHRlX2F0KG1tLCBhZGRyZXNzLCBwdm13LnB0ZSwgcHRldmFsKTsKLQkJCQlnb3RvIHdhbGtfYWJvcnQ7Ci0JCQl9Ci0KLQkJCS8qIFNlZSBmb2xpb190cnlfc2hhcmVfYW5vbl9ybWFwKCk6IGNsZWFyIFBURSBmaXJzdC4gKi8KLQkJCWlmIChhbm9uX2V4Y2x1c2l2ZSAmYW1wOyZhbXA7Ci0JCQkgICAgZm9saW9fdHJ5X3NoYXJlX2Fub25fcm1hcF9wdGUoZm9saW8sIHN1YnBhZ2UpKSB7Ci0JCQkJZm9saW9fcHV0X3N3YXAoZm9saW8sIHN1YnBhZ2UpOwotCQkJCXNldF9wdGVfYXQobW0sIGFkZHJlc3MsIHB2bXcucHRlLCBwdGV2YWwpOwotCQkJCWdvdG8gd2Fsa19hYm9ydDsKLQkJCX0KLQkJCW1tX3ByZXBhcmVfZm9yX3N3YXBfZW50cmllcyhtbSk7Ci0JCQlkZWNfbW1fY291bnRlcihtbSwgTU1fQU5PTlBBR0VTKTsKLQkJCWluY19tbV9jb3VudGVyKG1tLCBNTV9TV0FQRU5UUyk7Ci0JCQlzd3BfcHRlID0gc3dwX2VudHJ5X3RvX3B0ZShlbnRyeSk7Ci0JCQlpZiAoYW5vbl9leGNsdXNpdmUpCi0JCQkJc3dwX3B0ZSA9IHB0ZV9zd3BfbWtleGNsdXNpdmUoc3dwX3B0ZSk7Ci0JCQlpZiAobGlrZWx5KHB0ZV9wcmVzZW50KHB0ZXZhbCkpKSB7Ci0JCQkJaWYgKHB0ZV9zb2Z0X2RpcnR5KHB0ZXZhbCkpCi0JCQkJCXN3cF9wdGUgPSBwdGVfc3dwX21rc29mdF9kaXJ0eShzd3BfcHRlKTsKLQkJCQlpZiAocHRlX3VmZmRfd3AocHRldmFsKSkKLQkJCQkJc3dwX3B0ZSA9IHB0ZV9zd3BfbWt1ZmZkX3dwKHN3cF9wdGUpOwotCQkJfSBlbHNlIHsKLQkJCQlpZiAocHRlX3N3cF9zb2Z0X2RpcnR5KHB0ZXZhbCkpCi0JCQkJCXN3cF9wdGUgPSBwdGVfc3dwX21rc29mdF9kaXJ0eShzd3BfcHRlKTsKLQkJCQlpZiAocHRlX3N3cF91ZmZkX3dwKHB0ZXZhbCkpCi0JCQkJCXN3cF9wdGUgPSBwdGVfc3dwX21rdWZmZF93cChzd3BfcHRlKTsKLQkJCX0KLQkJCXNldF9wdGVfYXQobW0sIGFkZHJlc3MsIHB2bXcucHRlLCBzd3BfcHRlKTsKJiM0MzsJCQlnb3RvIGZpbmlzaF91bm1hcDsKIAkJfSBlbHNlIHsKIAkJCS8qCiAJCQkgKiBUaGlzIGlzIGEgbG9ja2VkIGZpbGUtYmFja2VkIGZvbGlvLApAQCAtMjM0MCwxMiAmIzQzOzI0MDQsOCBAQCBzdGF0aWMgYm9vbCB0cnlfdG9fdW5tYXBfb25lKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAogCQkJICovCiAJCQlhZGRfbW1fY291bnRlcihtbSwgbW1fY291bnRlcl9maWxlKGZvbGlvKSwgLW5yX3BhZ2VzKTsKIAkJfQotZGlzY2FyZDoKLQkJaWYgKHVubGlrZWx5KGZvbGlvX3Rlc3RfaHVnZXRsYihmb2xpbykpKSB7Ci0JCQlodWdldGxiX3JlbW92ZV9ybWFwKGZvbGlvKTsKLQkJfSBlbHNlIHsKLQkJCWZvbGlvX3JlbW92ZV9ybWFwX3B0ZXMoZm9saW8sIHN1YnBhZ2UsIG5yX3BhZ2VzLCB2bWEpOwotCQl9CiYjNDM7ZmluaXNoX3VubWFwOgomIzQzOwkJZm9saW9fcmVtb3ZlX3JtYXBfcHRlcyhmb2xpbywgc3VicGFnZSwgbnJfcGFnZXMsIHZtYSk7CiAJCWlmICh2bWEtJmd0O3ZtX2ZsYWdzICZhbXA7IFZNX0xPQ0tFRCkKIAkJCW1sb2NrX2RyYWluX2xvY2FsKCk7CiAJCWZvbGlvX3B1dF9yZWZzKGZvbGlvLCBucl9wYWdlcyk7CkBAIC0yMzkzLDcgJiM0MzsyNDUzLDggQEAgc3RhdGljIGludCBmb2xpb19ub3RfbWFwcGVkKHN0cnVjdCBmb2xpbyAqZm9saW8pCiB2b2lkIHRyeV90b191bm1hcChzdHJ1Y3QgZm9saW8gKmZvbGlvLCBlbnVtIHR0dV9mbGFncyBmbGFncykKIHsKIAlzdHJ1Y3Qgcm1hcF93YWxrX2NvbnRyb2wgcndjID0gewotCQkucm1hcF9vbmUgPSB0cnlfdG9fdW5tYXBfb25lLAomIzQzOwkJLnJtYXBfb25lID0gZm9saW9fdGVzdF9odWdldGxiKGZvbGlvKSA/CiYjNDM7CQkJCXRyeV90b191bm1hcF9odWdldGxiX29uZSA6IHRyeV90b191bm1hcF9vbmUsCiAJCS5hcmcgPSAodm9pZCAqKWZsYWdzLAogCQkuZG9uZSA9IGZvbGlvX25vdF9tYXBwZWQsCiAJCS5hbm9uX2xvY2sgPSBmb2xpb19sb2NrX2Fub25fdm1hX3JlYWQsCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA3IDIwOjM3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgzNTIKCQkJCQkJCW91dHB1dDogMjYKCQkJCQkJCXRob3VnaHRzOiAzMTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBgbW0vcm1hcC5jYCBSZWZhY3RvcmluZyBmb3IgUG90ZW50aWFsIFZ1bG5lcmFiaWxpdGllcyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaC4gSXQmIzM5O3MgdG91Y2hpbmcgYG1tL3JtYXAuY2AgYW5kIGBpbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaGAsIHdoaWNoIGltbWVkaWF0ZWx5IGZsYWdzIHNvbWUgc2VyaW91cyBhdHRlbnRpb24uIEl0IGxvb2tzIGxpa2Ugd2UmIzM5O3JlIHJlZmFjdG9yaW5nIGB0cnlfdG9fdW5tYXBfb25lYCB0byBiZSBjbGVhbmVyLCBwdWxsaW5nIG91dCB0aGUgaHVnZXRsYi1zcGVjaWZpYyBzdHVmZiBpbnRvIGB0cnlfdG9fdW5tYXBfaHVnZXRsYl9vbmVgLCBhbmQgdGhlbiBoYW5kbGluZyBhbm9ueW1vdXMgZm9saW8gY2FzZXMgd2l0aCBhIGhhbmRmdWwgb2YgbmV3IGZ1bmN0aW9uczogYHR0dV9hbm9uX2ZvbGlvYCwgYHR0dV9hbm9uX2xhenlmcmVlX2ZvbGlvYCwgYW5kIGB0dHVfYW5vbl9zd2FwYmFja2VkX2ZvbGlvYC4gVGhlIG1haW4gYHRyeV90b191bm1hcGAgZnVuY3Rpb24gaXMgbm93IGNvbmRpdGlvbmFsbHkgY2FsbGluZyBgdHJ5X3RvX3VubWFwX2h1Z2V0bGJfb25lYCBpZiB0aGUgZm9saW8gaXMgYSBodWdldGxiIHBhZ2UuCgpGdW5jdGlvbmFsbHksIHRoaXMgc2VlbXMgbGlrZSBtb3N0bHkgYSByZWZhY3RvcmluZy4gQnV0IGxldCYjMzk7cyBiZSBob25lc3QsIGFueSBjaGFuZ2UgaW4gdGhlc2UgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBhcmVhcyDigJMgcm1hcCwgaHVnZXRsYiwgdW5tYXBwaW5nIOKAkyB3YXJyYW50cyBhICp2ZXJ5KiBjbG9zZSBsb29rLiBUaGVzZSBhcmUgY3JpdGljYWwgcGF0aHMsIGFuZCBzdWJ0bGUgZXJyb3JzIGNhbiBoYXZlIGRldmFzdGF0aW5nIGNvbnNlcXVlbmNlcy4gTXkgcHJpbWFyeSBjb25jZXJuIGhlcmUgaXMgdGhhdCB0aGlzIGtpbmQgb2YgcmVmYWN0b3JpbmcgaXMgcHJvbmUgdG8gaW50cm9kdWNpbmcgb2ZmLWJ5LW9uZSBlcnJvcnMsIGluY29ycmVjdCBsb2NraW5nLCBvciBvdGhlciBzdWJ0bGUgYnVncyBkdWUgdG8gdGhlIGNvbXBsZXhpdHkgaW52b2x2ZWQuCgpTbywgSSBuZWVkIHRvIGZvY3VzIG15IGZ1enppbmcgZWZmb3J0cy4gVGhlIGtleSBmdW5jdGlvbnMgdG8gdGFyZ2V0IGFyZToKCiogICBgdHJ5X3RvX3VubWFwX2h1Z2V0bGJfb25lYCAtIFRoaXMgaXMgbm93IGhhbmRsaW5nIHRoZSBodWdldGxiIHNwZWNpZmljIGxvZ2ljLCB3aGljaCwgZHVlIHRvIHRoZWlyIHNpemUsIGludHJvZHVjZSBjb21wbGV4aXRpZXMgdGhhdCBtYXkgbm90IGJlIGFwcGFyZW50IGluIGdlbmVyYWwgZm9saW8gcGFnZXMuCiogICBgdHR1X2Fub25fZm9saW9gIC0gVGhpcyBpcyBub3cgaGFuZGxpbmcgZ2VuZXJhbCBhbm9ueW1vdXMgZm9saW9zLgoqICAgYHR0dV9hbm9uX2xhenlmcmVlX2ZvbGlvYCAtIFRoaXMgaXMgbm93IGhhbmRsaW5nIGFub255bW91cyBsYXp5LWZyZWUgZm9saW9zLgoqICAgYHR0dV9hbm9uX3N3YXBiYWNrZWRfZm9saW9gIC0gVGhpcyBpcyBub3cgaGFuZGxpbmcgYW5vbnltb3VzIGZvbGlvcyB0aGF0IGhhdmUgc3dhcCBiYWNraW5nLgoqICAgYHRyeV90b191bm1hcGAgLSBUaGUgbWFpbiBlbnRyeSBwb2ludCwgYW5kIHRoZSBmdW5jdGlvbiB3aGVyZSB0aGUgY29udHJvbCBmbG93IGJyYW5jaGVzLgoKQW5kIG9mIGNvdXJzZSwgSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGUgZnV6emluZyBlbnZpcm9ubWVudCBpcyBhcHByb3ByaWF0ZWx5IGNvbmZpZ3VyZWQuIFdlJiMzOTtsbCBuZWVkIHRvIGVuYWJsZSBgSFVHRVRMQl9QQUdFYCwgb2YgY291cnNlLCBmb3IgaHVnZXRsYiB0ZXN0aW5nLiBUaGUgcHJlc2VuY2Ugb2Ygc3dhcC1iYWNrZWQgZm9saW9zIGNhbGxzIGZvciB0aGUgYFNXQVBgIGNvbmZpZyB0byBiZSBlbmFibGVkLiBBbmQgc2luY2UgdGhlcmUmIzM5O3Mgc29tZSBtZW50aW9uIG9mIGBUVFVfSFdQT0lTT05gIGxvZ2ljIHdpdGhpbiwgSSBuZWVkIHRvIGhhdmUgZWl0aGVyIGBIV1BPSVNPTl9JTkpFQ1RgIG9yIGBNRU1PUllfRkFJTFVSRWAgZW5hYmxlZC4KClJpZ2h0LiBUaW1lIHRvIHZlcmlmeSB0aG9zZSBjb25maWdzIGFuZCBzdGFydCBkaWdnaW5nIGludG8gdGhlIGNvZGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDcgMjA6Mzc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dHJ5X3RvX3VubWFwX2h1Z2V0bGJfb25lJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3JtYXAuYz0xOTQ0PXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGZvbGlvX3VubWFwX3B0ZV9iYXRjaChzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuLS1cbm1tL3JtYXAuYy0xOTgwLVxubW0vcm1hcC5jOjE5ODE6c3RhdGljIGJvb2wgdHJ5X3RvX3VubWFwX2h1Z2V0bGJfb25lKHN0cnVjdCBmb2xpbyAqZm9saW8sXG5tbS9ybWFwLmMtMTk4Mi1cdFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcywgdm9pZCAqYXJnKVxuLS1cbm1tL3JtYXAuYz0yNDUzPXZvaWQgdHJ5X3RvX3VubWFwKHN0cnVjdCBmb2xpbyAqZm9saW8sIGVudW0gdHR1X2ZsYWdzIGZsYWdzKVxuLS1cbm1tL3JtYXAuYy0yNDU2LVx0XHQucm1hcF9vbmUgPSBmb2xpb190ZXN0X2h1Z2V0bGIoZm9saW8pID9cbm1tL3JtYXAuYzoyNDU3Olx0XHRcdFx0dHJ5X3RvX3VubWFwX2h1Z2V0bGJfb25lIDogdHJ5X3RvX3VubWFwX29uZSxcbm1tL3JtYXAuYy0yNDU4LVx0XHQuYXJnID0gKHZvaWQgKilmbGFncyxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNyAyMDozNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5NDkxCgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogMTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGFzIHlvdSByZXF1ZXN0ZWQ6CgoqKktjb25maWcgYW5kIEh1Z2UgUGFnZXM6IEEgUXVpY2sgQ2hlY2sqKgoKT2theSwgYmVmb3JlIGRpdmluZyBhbnkgZGVlcGVyLCBJIG5lZWQgdG8gbWFrZSBhYnNvbHV0ZWx5IHN1cmUgdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uIGZvciBIdWdlVExCIHBhZ2VzIGlzIHByb3Blcmx5IHNldC4gSXQmIzM5O3MgZWFzeSB0byBvdmVybG9vaywgYW5kIGEgbWlzY29uZmlndXJhdGlvbiBoZXJlIHdvdWxkIHRocm93IGV2ZXJ5dGhpbmcgb2ZmLiBTbywgSSBuZWVkIHRvIG9wZW4gdGhlIGBLY29uZmlnYCBmaWxlcyBhbmQgc2VhcmNoIGZvciBgSFVHRVRMQl9QQUdFYC4gVGhhdCYjMzk7cyB0aGUgYmFzZWxpbmUuIEkgbmVlZCB0byB2ZXJpZnkgaXRzIHN0YXR1cyAtIGlzIGl0IGVuYWJsZWQsIGRpc2FibGVkLCBvciBzZXQgdG8gc29tZSBzcGVjaWZpYyB2YWx1ZT8gQSBxdWljayBzY2FuIG9mIHRoZSByZWxldmFudCBLY29uZmlnIG9wdGlvbnMgd2lsbCBpbW1lZGlhdGVseSB0ZWxsIG1lIGlmIEkmIzM5O20gZXZlbiAqYWJsZSogdG8gd29yayB3aXRoIGh1Z2V0bGJmcy4gVGhpcyBpcyBqdXN0IGEgc2FuaXR5IGNoZWNrOyBkb24mIzM5O3Qgd2FzdGUgdGltZSBvbiBhbnl0aGluZyBlbHNlIHlldC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNyAyMDozODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgSFVHRVRMQl9QQUdFJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvc2gvbW0vS2NvbmZpZz0xNTg9Y2hvaWNlXG4tLVxuYXJjaC9zaC9tbS9LY29uZmlnLTE2My1cbmFyY2gvc2gvbW0vS2NvbmZpZzoxNjQ6Y29uZmlnIEhVR0VUTEJfUEFHRV9TSVpFXzY0S1xuYXJjaC9zaC9tbS9LY29uZmlnLTE2NS1cdGJvb2wgXCYjMzQ7NjRrQlwmIzM0O1xuLS1cbmFyY2gvc2gvbW0vS2NvbmZpZy0xNjctXG5hcmNoL3NoL21tL0tjb25maWc6MTY4OmNvbmZpZyBIVUdFVExCX1BBR0VfU0laRV8yNTZLXG5hcmNoL3NoL21tL0tjb25maWctMTY5LVx0Ym9vbCBcJiMzNDsyNTZrQlwmIzM0O1xuLS1cbmFyY2gvc2gvbW0vS2NvbmZpZy0xNzEtXG5hcmNoL3NoL21tL0tjb25maWc6MTcyOmNvbmZpZyBIVUdFVExCX1BBR0VfU0laRV8xTUJcbmFyY2gvc2gvbW0vS2NvbmZpZy0xNzMtXHRib29sIFwmIzM0OzFNQlwmIzM0O1xuYXJjaC9zaC9tbS9LY29uZmlnLTE3NC1cbmFyY2gvc2gvbW0vS2NvbmZpZzoxNzU6Y29uZmlnIEhVR0VUTEJfUEFHRV9TSVpFXzRNQlxuYXJjaC9zaC9tbS9LY29uZmlnLTE3Ni1cdGJvb2wgXCYjMzQ7NE1CXCYjMzQ7XG4tLVxuYXJjaC9zaC9tbS9LY29uZmlnLTE3OC1cbmFyY2gvc2gvbW0vS2NvbmZpZzoxNzk6Y29uZmlnIEhVR0VUTEJfUEFHRV9TSVpFXzY0TUJcbmFyY2gvc2gvbW0vS2NvbmZpZy0xODAtXHRib29sIFwmIzM0OzY0TUJcJiMzNDtcbi0tXG5mcy9LY29uZmlnPTI2Mj1pZiBIVUdFVExCRlNcbmZzL0tjb25maWc6MjYzOmNvbmZpZyBIVUdFVExCX1BBR0VfT1BUSU1JWkVfVk1FTU1BUF9ERUZBVUxUX09OXG5mcy9LY29uZmlnLTI2NC1cdGJvb2wgXCYjMzQ7SHVnZVRMQiBWbWVtbWFwIE9wdGltaXphdGlvbiAoSFZPKSBkZWZhdWx0cyB0byBvblwmIzM0O1xuLS1cbmZzL0tjb25maWc9MjcxPWVuZGlmICMgSFVHRVRMQkZTXG5mcy9LY29uZmlnLTI3Mi1cbmZzL0tjb25maWc6MjczOmNvbmZpZyBIVUdFVExCX1BBR0VcbmZzL0tjb25maWctMjc0LVx0ZGVmX2Jvb2wgSFVHRVRMQkZTXG4tLVxuZnMvS2NvbmZpZy0yNzYtXG5mcy9LY29uZmlnOjI3Nzpjb25maWcgSFVHRVRMQl9QQUdFX09QVElNSVpFX1ZNRU1NQVBcbmZzL0tjb25maWctMjc4LVx0ZGVmX2Jvb2wgSFVHRVRMQl9QQUdFXG4tLVxubW0vS2NvbmZpZz03MDY9Y29uZmlnIEFSQ0hfSEFTX1BNRF9TT0ZUTEVBVkVTXG4tLVxubW0vS2NvbmZpZy03MDgtXG5tbS9LY29uZmlnOjcwOTpjb25maWcgSFVHRVRMQl9QQUdFX1NJWkVfVkFSSUFCTEVcbm1tL0tjb25maWctNzEwLVx0ZGVmX2Jvb2wgblxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA3IDIwOjM4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwMjgyCgkJCQkJCQlvdXRwdXQ6IDE5CgkJCQkJCQl0aG91Z2h0czogMzAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHByZXNlbnRlZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3MsIGdpdmVuIG15IGV4cGVydGlzZToKCioqRGl2aW5nIGludG8gdGhlIEh1Z2VUTEIgQ29uZmlndXJhdGlvbioqCgpBbHJpZ2h0LCBzbyBgSFVHRVRMQl9QQUdFYCBpcyB0aGUgdGFyZ2V0IGhlcmUuIFRoYXQmIzM5O3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50IGZvciBpbnZlc3RpZ2F0aW5nIHRoZSBodWdlIHBhZ2Ugc3VwcG9ydC4gQW5kIHRoZSBLY29uZmlnIGVudHJ5IG1lbnRpb25zIGEgZGVwZW5kZW5jeTogYEhVR0VUTEJGU2AuIFJpZ2h0LCBzbyB0aGlzIGNvbmZpcm1zIHRoZSBkZXBlbmRlbmN5LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIGBIVUdFVExCRlNgIGNvbXBvbmVudCB0byBmdWxseSBncmFzcCB0aGUgY2FwYWJpbGl0aWVzIG9mIGBIVUdFVExCX1BBR0VgLiBMZXQgbWUgcXVpY2tseSBzaGlmdCBteSBmb2N1cyBhbmQgc3RhcnQgbG9va2luZyBpbnRvIHRoZSBkZXRhaWxzIG9mIHdoYXQgYEhVR0VUTEJGU2AgYnJpbmdzIHRvIHRoZSB0YWJsZS4gVGltZSB0byBkaWcgZGVlcGVyIGludG8gdGhlIGZpbGUgc3lzdGVtIHNpZGUgb2YgdGhpcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNyAyMDozODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgSFVHRVRMQkZTJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL0tjb25maWc9MjQ3PWNvbmZpZyBBUkNIX1NVUFBPUlRTX0hVR0VUTEJGU1xuLS1cbmZzL0tjb25maWctMjQ5LVxuZnMvS2NvbmZpZzoyNTA6bWVudWNvbmZpZyBIVUdFVExCRlNcbmZzL0tjb25maWctMjUxLVx0Ym9vbCBcJiMzNDtIdWdlVExCIGZpbGUgc3lzdGVtIHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNyAyMDozODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDU2MAoJCQkJCQkJb3V0cHV0OiAxOQoJCQkJCQkJdGhvdWdodHM6IDIzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqS2VybmVsIENvbmZpZ3VyYXRpb24gRGVlcCBEaXZlKioKCkFscmlnaHQsIHNvIEkmIzM5O20gZGl2aW5nIGludG8gdGhpcyBrZXJuZWwgY29uZmlndXJhdGlvbiwgYW5kIHRoZSBrZXkgdGhpbmcgSSYjMzk7bSBpbW1lZGlhdGVseSBob21pbmcgaW4gb24gaXMgYEhVR0VUTEJGU2AuIFRoYXQmIzM5O3MgdGhlIG9uZSBJIG5lZWQgdG8gZW5hYmxlIGZvciB0aGUgdXNlIGNhc2Ugd2UmIzM5O3JlIGNvbnNpZGVyaW5nLCBubyBkb3VidC4gTm93LCBiZWZvcmUgSSBwcm9jZWVkIHdpdGggYW55IG1vcmUgb2YgdGhlc2UgY2hhbmdlcywgbGV0JiMzOTtzIGp1c3QgZG8gYSBxdWljayBkb3VibGUtY2hlY2sgb2Ygc29tZXRoaW5nIHJlbGF0ZWQsIHRvIGVuc3VyZSB3ZSBhcmUgY292ZXJpbmcgdGhlIGJhc2VzLiBMZXQmIzM5O3MgbWFrZSBzdXJlIHRoYXQgYE1FTU9SWV9GQUlMVVJFYCBpcyBzZXQgdG8gdGhlIGNvcnJlY3QgdmFsdWUsIHNpbmNlIHRoYXQgaGFzIGltcGxpY2F0aW9ucyBmb3IgdGhlIG92ZXJhbGwgbWVtb3J5IG1hbmFnZW1lbnQgc3RyYXRlZ3ksIGFuZCBob3cgaXQgd2lsbCBpbnRlcmFjdCB3aXRoIHRoaXMgbmV3IHNldHVwLiBKdXN0IHdhbnQgdG8gbWFrZSBzdXJlIHRoZSBpbnRlcmFjdGlvbnMgYXJlIGFzIGV4cGVjdGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNyAyMDozODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTUVNT1JZX0ZBSUxVUkUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vS2NvbmZpZz03NzQ9Y29uZmlnIEFSQ0hfU1VQUE9SVFNfTUVNT1JZX0ZBSUxVUkVcbi0tXG5tbS9LY29uZmlnLTc3Ni1cbm1tL0tjb25maWc6Nzc3OmNvbmZpZyBNRU1PUllfRkFJTFVSRVxubW0vS2NvbmZpZy03NzgtXHRkZXBlbmRzIG9uIE1NVVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNyAyMDozODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDg0MwoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDEyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIHByZXNlbnRlZCBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipEZWVwIERpdmUgb24gYEhXUE9JU09OX0lOSkVDVGAqKgoKQWxyaWdodCwgdGltZSB0byBjaXJjbGUgYmFjayBhbmQgZ2l2ZSBgSFdQT0lTT05fSU5KRUNUYCBhIHByb3BlciBvbmNlLW92ZXIuIFRoaXMgbGlrZWx5IG1lYW5zIEkmIzM5O20gbG9va2luZyBmb3IgYSBwYXJ0aWN1bGFyIGludGVyYWN0aW9uIG9yIHBvdGVudGlhbCB2dWxuZXJhYmlsaXR5IHJlbGF0ZWQgdG8gaGFyZHdhcmUtYmFzZWQgbWVtb3J5IGNvcnJ1cHRpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgc3BlY2lmaWMgcG9pc29uIHZhbHVlcyBhcmUgYmVpbmcgaW50cm9kdWNlZCwgaG93IHRoZXkgYXJlIGJlaW5nIGluamVjdGVkLCBhbmQgdGhlIGNvbmRpdGlvbnMgdW5kZXIgd2hpY2ggdGhpcyBpbmplY3Rpb24gaXMgb2NjdXJyaW5nLiBJJiMzOTtsbCBuZWVkIHRvIHRoaW5rIHRocm91Z2ggdGhlIHBvc3NpYmxlIGltcGFjdCwgbWF5YmUgY29uc2lkZXJpbmcgaG93IHRoaXMgcmVsYXRlcyB0byBtaXRpZ2F0aW9uIHRlY2huaXF1ZXMgbGlrZSBtZW1vcnkgdGFnZ2luZyBvciBlcnJvci1jb3JyZWN0aW5nIGNvZGVzLCBhbmQgaG93IHRoaXMgZmVhdHVyZSBtaWdodCBpbnRlcmFjdCB3aXRoIG90aGVyIGhhcmR3YXJlIGZlYXR1cmVzIG9yIHNvZnR3YXJlIHN1YnN5c3RlbXMuIEkgbmVlZCB0byBhc3Nlc3MgdGhlIHNjb3BlIG9mIHRoaXMgcG9pc29uaW5nIGFuZCBwb3RlbnRpYWwgaW1wYWN0IG9uIHN5c3RlbSBzdGFiaWxpdHksIHNlY3VyaXR5LCBvciBkYXRhIGludGVncml0eS4gVWx0aW1hdGVseSwgSSYjMzk7bSB0cnlpbmcgdG8gZGV0ZXJtaW5lIGlmIHRoZXJlJiMzOTtzIGFueSBhcmVhIHRoYXQgbmVlZHMgZGVlcGVyIGFuYWx5c2lzIG9yIGltbWVkaWF0ZSBhdHRlbnRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA3IDIwOjM4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBIV1BPSVNPTl9JTkpFQ1QmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vS2NvbmZpZz03Nzc9Y29uZmlnIE1FTU9SWV9GQUlMVVJFXG4tLVxubW0vS2NvbmZpZy03ODctXG5tbS9LY29uZmlnOjc4ODpjb25maWcgSFdQT0lTT05fSU5KRUNUXG5tbS9LY29uZmlnLTc4OS1cdHRyaXN0YXRlIFwmIzM0O0hXUG9pc29uIHBhZ2VzIGluamVjdG9yXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA3IDIwOjM4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExMTUxCgkJCQkJCQlvdXRwdXQ6IDE3CgkJCQkJCQl0aG91Z2h0czogNDYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkmIzM5O20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6CgoqKkVuYWJsaW5nIFJvYnVzdCBIYXJkd2FyZSBQb2lzb24gVGVzdGluZyoqCgpPa2F5LCBzbyBJJiMzOTttIHRoaW5raW5nLCB0byByZWFsbHkgZ2l2ZSB0aGUgaGFyZHdhcmUgcG9pc29uIGxvZ2ljIGEgd29ya291dCwgSSBzaG91bGQgZGVmaW5pdGVseSBlbmFibGUgYm90aCBgTUVNT1JZX0ZBSUxVUkVgIGFuZCBgSFdQT0lTT05fSU5KRUNUYC4gVGhhdCBjb21iaW5hdGlvbiBzaG91bGQgcHJvdmlkZSBhIHNvbGlkIHBsYXRmb3JtIGZvciB0ZXN0aW5nLiBBbmQsIG9mIGNvdXJzZSwgSSYjMzk7bGwgbmVlZCBgU1dBUGAgZW5hYmxlZCwgc2luY2UgdGhlIGB0dHVfYW5vbl9zd2FwYmFja2VkX2ZvbGlvYCB0ZXN0IHJlbGllcyBvbiBpdC4gTWFrZXMgc2Vuc2UuIE5lZWQgdGhlIGJhc2ljcyB0byB3b3JrIG9uIHRoZSBzcGVjaWZpY3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA3IDIwOjM4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBTV0FQJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvbWlwcy9LY29uZmlnPTEyNjM9Y29uZmlnIE1JUFNfU1BSQU1cbi0tXG5hcmNoL21pcHMvS2NvbmZpZy0xMjY1LVxuYXJjaC9taXBzL0tjb25maWc6MTI2Njpjb25maWcgU1dBUF9JT19TUEFDRVxuYXJjaC9taXBzL0tjb25maWctMTI2Ny1cdGJvb2xcbi0tXG5hcmNoL3NoL0tjb25maWc9MTI5PWNvbmZpZyBJT19UUkFQUEVEXG4tLVxuYXJjaC9zaC9LY29uZmlnLTEzMS1cbmFyY2gvc2gvS2NvbmZpZzoxMzI6Y29uZmlnIFNXQVBfSU9fU1BBQ0VcbmFyY2gvc2gvS2NvbmZpZy0xMzMtXHRib29sXG4tLVxubW0vS2NvbmZpZz05PWNvbmZpZyBBUkNIX05PX1NXQVBcbi0tXG5tbS9LY29uZmlnLTExLVxubW0vS2NvbmZpZzoxMjptZW51Y29uZmlnIFNXQVBcbm1tL0tjb25maWctMTMtXHRib29sIFwmIzM0O1N1cHBvcnQgZm9yIHBhZ2luZyBvZiBhbm9ueW1vdXMgbWVtb3J5IChzd2FwKVwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNyAyMDozODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTU0NQoJCQkJCQkJb3V0cHV0OiAyNgoJCQkJCQkJdGhvdWdodHM6IDIyNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgVW5tYXBwaW5nIEZ1bmN0aW9ucyBmb3IgRnV6emluZyBQb3RlbnRpYWwqKgoKT2theSwgc28gdGhlIGBTV0FQYCBtZWNoYW5pc20gbG9va3MgbGlrZSBhIHByb21pc2luZyBhdmVudWUgZm9yIGV4cGxvcmF0aW9uLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gaWRlbnRpZnkgdGhlIGtleSBmdW5jdGlvbnMgcmVsYXRlZCB0byBtZW1vcnkgdW5tYXBwaW5nLCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBjb250ZXh0IG9mIGh1Z2V0bGJmcyBhbmQgYW5vbnltb3VzIHBhZ2VzLCB3aXRoIHRoZSBhaW0gb2YgcG90ZW50aWFsbHkgdGFyZ2V0aW5nIHRoZW0gd2l0aCBmdXp6aW5nLgoKSSBuZWVkIHRvIG5haWwgZG93biB0aGUgY29yZSBmdW5jdGlvbnMuIExldCYjMzk7cyBzZWUuLi4gdGhlIG9uZXMgdGhhdCBjb21lIHRvIG1pbmQgYXJlOiBgdHJ5X3RvX3VubWFwX2h1Z2V0bGJfb25lYCwgYHR0dV9hbm9uX2ZvbGlvYCwgYHR0dV9hbm9uX2xhenlmcmVlX2ZvbGlvYCwgYW5kIGB0dHVfYW5vbl9zd2FwYmFja2VkX2ZvbGlvYC4gQWxsIG9mIHRob3NlIGFyZSBzdGF0aWMgYW5kIG5lc3RsZWQgd2l0aGluIGBtbS9ybWFwLmNgLCBleGNlcHQgZm9yIGB0cnlfdG9fdW5tYXBfaHVnZXRsYl9vbmVgLCBidXQgYSBxdWljayBjaGVjayByZXZlYWxzIHRoYXQgaXQmIzM5O3MgYWxzbyBzdGF0aWMuIEhhbmcgb24sIGlzbiYjMzk7dCBgdHJ5X3RvX3VubWFwYCBleHBvcnRlZD8gWWVzLCBpdCBpcyEKCk5vdywgdGhlIGltcG9ydGFudCBxdWVzdGlvbjogQ2FuIFN5emthbGxlciBlZmZlY3RpdmVseSB0YXJnZXQgKnN0YXRpYyogZnVuY3Rpb25zIGZvciBmdXp6aW5nPyBNeSB1bmRlcnN0YW5kaW5nIGlzIHRoYXQgd2hpbGUgU3l6a2FsbGVyIHByaW1hcmlseSB0YXJnZXRzIHN5c2NhbGxzLCBpdCB1c2VzIGZ1bmN0aW9uIG5hbWVzIGZvciBjb3ZlcmFnZSBndWlkYW5jZSBhbmQgcG90ZW50aWFsIGNvbnRyb2wuIFRoZXNlIHN0YXRpYyBmdW5jdGlvbnMgYXJlIGNhbmRpZGF0ZXMgZm9yIGBGb2N1c1N5bWJvbHNgLCBhY3RpbmcgYXMgdXNlZnVsIGZpbHRlcnMgb3IgZ3VpZGVzIGZvciB0aGUgZnV6emVyLiBJdCBsb29rcyBsaWtlIHN0YXRpYyBmdW5jdGlvbnMgYXJlIHBlcmZlY3RseSBmaW5lIGZvciB0aGlzIGtpbmQgb2YgZ3VpZGFuY2UuCgpJIHNob3VsZCBwcm9iYWJseSBjb25maXJtIGJ5IGV4YW1pbmluZyBgdHJ5X3RvX3VubWFwX2h1Z2V0bGJfb25lYCBpbiBgbW0vcm1hcC5jYCBpdHNlbGYuIEp1c3QgdG8gYmUgc3VyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDcgMjA6Mzg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dHJ5X3RvX3VubWFwX2h1Z2V0bGJfb25lJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3JtYXAuYz0xOTQ0PXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGZvbGlvX3VubWFwX3B0ZV9iYXRjaChzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuLS1cbm1tL3JtYXAuYy0xOTgwLVxubW0vcm1hcC5jOjE5ODE6c3RhdGljIGJvb2wgdHJ5X3RvX3VubWFwX2h1Z2V0bGJfb25lKHN0cnVjdCBmb2xpbyAqZm9saW8sXG5tbS9ybWFwLmMtMTk4Mi1cdFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcywgdm9pZCAqYXJnKVxuLS1cbm1tL3JtYXAuYz0yNDUzPXZvaWQgdHJ5X3RvX3VubWFwKHN0cnVjdCBmb2xpbyAqZm9saW8sIGVudW0gdHR1X2ZsYWdzIGZsYWdzKVxuLS1cbm1tL3JtYXAuYy0yNDU2LVx0XHQucm1hcF9vbmUgPSBmb2xpb190ZXN0X2h1Z2V0bGIoZm9saW8pID9cbm1tL3JtYXAuYzoyNDU3Olx0XHRcdFx0dHJ5X3RvX3VubWFwX2h1Z2V0bGJfb25lIDogdHJ5X3RvX3VubWFwX29uZSxcbm1tL3JtYXAuYy0yNDU4LVx0XHQuYXJnID0gKHZvaWQgKilmbGFncyxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDcgMjA6Mzg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTIzNTIKCQkJCQkJCW91dHB1dDogMTkKCQkJCQkJCXRob3VnaHRzOiAxOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBjb25zaWRlcmluZyBteSBleHBlcnRpc2U6CgoqKk15IEluaXRpYWwgQXNzZXNzbWVudCBhbmQgTmV4dCBTdGVwcyoqCgpSaWdodCwgaW5pdGlhbCBpbXByZXNzaW9uIGlzIHRoYXQgdGhlIHNpdHVhdGlvbiBpcy4uLiB3ZWxsLCAqc3RhdGljKi4gTm90aGluZyYjMzk7cyBtb3ZpbmcsIG5vdGhpbmcmIzM5O3MgZHluYW1pY2FsbHkgY2hhbmdpbmcsIGFuZCB0aGF0JiMzOTtzIG5vdCB3aGF0IEkgd2FzIGV4cGVjdGluZy4gQmFzZWQgb24gdGhpcywgSSBuZWVkIHRvIGludmVzdGlnYXRlIGZ1cnRoZXIuIEl0JiMzOTtzIHRpbWUgdG8gZGl2ZSBpbnRvIHRoZSBkYXRhLiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byBjaGVjayBvdXQgYHR0dV9hbm9uX2ZvbGlvYC4gVGhhdCYjMzk7cyB0aGUgbG9naWNhbCBuZXh0IHBvaW50IG9mIGlucXVpcnksIGdpdmVuIHRoaXMgaW5pdGlhbCBzdGF0aWMgYXNzZXNzbWVudC4gSXQgc2hvdWxkIG9mZmVyIHNvbWUgc3BlY2lmaWMgZGV0YWlscyB0aGF0IGVpdGhlciBjb25maXJtIHRoZSBjdXJyZW50IHN0YXRlLCBvciBoZWxwIHRvIHNlZSB3aGF0IGZhY3RvcnMgYXJlIGNhdXNpbmcgdGhpcyAmIzM0O3N0aWxsJiMzNDsgc3RhdGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA3IDIwOjM4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3R0dV9hbm9uX2ZvbGlvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3JtYXAuYz0yMTQwPXN0YXRpYyBpbmxpbmUgYm9vbCB0dHVfYW5vbl9zd2FwYmFja2VkX2ZvbGlvKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuLS1cbm1tL3JtYXAuYy0yMTczLVxubW0vcm1hcC5jOjIxNzQ6c3RhdGljIGlubGluZSBib29sIHR0dV9hbm9uX2ZvbGlvKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxubW0vcm1hcC5jLTIxNzUtXHRcdHN0cnVjdCBwYWdlICpzdWJwYWdlLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MsIHB0ZV90ICpwdGVwLFxuLS1cbm1tL3JtYXAuYz0yMjExPXN0YXRpYyBib29sIHRyeV90b191bm1hcF9vbmUoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4tLVxubW0vcm1hcC5jLTIzODctXHRcdH0gZWxzZSBpZiAoZm9saW9fdGVzdF9hbm9uKGZvbGlvKSkge1xubW0vcm1hcC5jOjIzODg6XHRcdFx0aWYgKCF0dHVfYW5vbl9mb2xpbyh2bWEsIGZvbGlvLCBzdWJwYWdlLCBhZGRyZXNzLFxubW0vcm1hcC5jLTIzODktXHRcdFx0XHRcdCAgICBwdm13LnB0ZSwgcHRldmFsLCBucl9wYWdlcykpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA3IDIwOjM4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyNzg3CgkJCQkJCQlvdXRwdXQ6IDIwMQoJCQkJCQkJdGhvdWdodHM6IDQyOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFVubWFwcGluZyBMb2dpYyBSZWZhY3RvcioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaXQmIzM5O3MgZGVhbGluZyB3aXRoIHRoZSB1bm1hcHBpbmcgbG9naWMgaW4gYG1tL3JtYXAuY2AuIFRoZSBjb3JlIG9mIGl0IHNlZW1zIHRvIGJlIGV4dHJhY3RpbmcgaHVnZXRsYiBhbmQgYW5vbnltb3VzIGZvbGlvIHVubWFwcGluZyBpbnRvIHNwZWNpZmljIGZ1bmN0aW9ucy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBTeXprYWxsZXIgaXMgZm9jdXNlZCBvbiB0aGUgcmlnaHQgc3ltYm9scyB0byBjYXRjaCBhbnkgcmVncmVzc2lvbnMuCgpSaWdodCwgdGhlIGZ1bmN0aW9ucy4uLiBMZXQmIzM5O3Mgc2VlLiBgdHJ5X3RvX3VubWFwX2h1Z2V0bGJfb25lYCBpcyBub3QgaW5saW5lLCBzbyBpdCAqc2hvdWxkKiBhcHBlYXIgYXMgYSBzeW1ib2wsIGVhc3kuIFRoZW4gYHR0dV9hbm9uX2xhenlmcmVlX2ZvbGlvYCBhbmQgYHR0dV9hbm9uX3N3YXBiYWNrZWRfZm9saW9gIGFyZSBgc3RhdGljIGlubGluZWAuIEl0JiMzOTtzIGZpbmUgdG8gaW5jbHVkZSBzdGF0aWMgaW5saW5lIGZ1bmN0aW9ucywgU3l6a2FsbGVyICpjYW4qIGhhbmRsZSB0aG9zZSBpZiB3ZSBoYXZlIGRlYnVnIGluZm8uIE5vdywgbGV0IG1lIGNoZWNrIHRoZSBub24taW5saW5lIGZ1bmN0aW9ucywgYHRyeV90b191bm1hcGAgaXMgZ2xvYmFsLCB3aGljaCBpcyBhbHNvIGVhc3kuIGB0cnlfdG9fdW5tYXBfb25lYCBpcyBzdGF0aWMuCgpBbHJpZ2h0LCBzbyBteSBsaXN0IG9mIGZ1bmN0aW9ucyB0byBpbmNsdWRlIGluIGBGb2N1c1N5bWJvbHNgIGlzIGdvaW5nIHRvIGJlOgotIGB0cnlfdG9fdW5tYXBfaHVnZXRsYl9vbmVgCi0gYHR0dV9hbm9uX2ZvbGlvYAotIGB0dHVfYW5vbl9sYXp5ZnJlZV9mb2xpb2AKLSBgdHR1X2Fub25fc3dhcGJhY2tlZF9mb2xpb2AKLSBgdHJ5X3RvX3VubWFwX29uZWAKClRoYXQgc2hvdWxkIGNvdmVyIHRoZSBjb3JlIGNoYW5nZXMgcmVsYXRlZCB0byB0aGUgZm9saW8gdW5tYXBwaW5nIGxvZ2ljLiBUaGUgcGF0Y2ggbWVudGlvbnMgcmV2ZXJzZSBtYXBwaW5nLCBodWdlIHBhZ2VzLCBhbmQgc3dhcCwgc28gdGhlIGZ1enppbmcgc2hvdWxkIHRhcmdldCB0aG9zZSBhcmVhcy4KCk5vdywgbGV0JiMzOTtzIGxvb2sgYXQgdGhlIGNvbmZpZ3MgdGhhdCBhcmUgcmVsZXZhbnQuIEkgY2FuIHNlZSB0aGUgcGF0Y2ggdXNlcyBgSFVHRVRMQkZTYCwgYFNXQVBgLCBgTUVNT1JZX0ZBSUxVUkVgLCBhbmQgYEhXUE9JU09OX0lOSkVDVGAuIFRoZSBuZXcgbG9naWMgaW50ZXJhY3RzIHdpdGggbWVtb3J5IGZhaWx1cmUsIGFuZCB0aGUgaHdwb2lzb24gdGVzdGluZywgYW5kIGFub255bW91cyBtZW1vcnkgYW5kIGh1Z2V0bGIuCgpJIG5lZWQgdG8gbWFrZSBzdXJlIEkgZ2V0IHRoZSBtZW1vcnkgZmFpbHVyZSBsb2dpYyBjb3ZlcmVkIGluIHRoZSBmdXp6aW5nLiBUaGUgcGF0Y2ggaXMgYWxzbyB1c2luZyBgZm9saW9fdGVzdF9od3BvaXNvbihmb2xpbylgIHNvIGBUVFVfSFdQT0lTT05gIGlzIGdvaW5nIHRvIGJlIHJlbGV2YW50LiBgZm9saW9fdGVzdF9hbm9uKGZvbGlvKWAgZm9yIGFub255bW91cyBtZW1vcnksIGFuZCBgZm9saW9fdGVzdF9odWdldGxiKGZvbGlvKWAgZm9yIGh1Z2V0bGIuCgpPa2F5LCBJIHRoaW5rIEkmIzM5O3ZlIGdvdCBpdCBhbGwuIFRpbWUgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNyAyMDozODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7SFVHRVRMQkZTJiMzNDssCiAgICAmIzM0O1NXQVAmIzM0OywKICAgICYjMzQ7TUVNT1JZX0ZBSUxVUkUmIzM0OywKICAgICYjMzQ7SFdQT0lTT05fSU5KRUNUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dHJ5X3RvX3VubWFwX2h1Z2V0bGJfb25lJiMzNDssCiAgICAmIzM0O3R0dV9hbm9uX2ZvbGlvJiMzNDssCiAgICAmIzM0O3R0dV9hbm9uX2xhenlmcmVlX2ZvbGlvJiMzNDssCiAgICAmIzM0O3R0dV9hbm9uX3N3YXBiYWNrZWRfZm9saW8mIzM0OywKICAgICYjMzQ7dHJ5X3RvX3VubWFwX29uZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZWZhY3RvcnMgdGhlIHVubWFwcGluZyBsb2dpYyBpbiBtbS9ybWFwLmMgYnkgZXh0cmFjdGluZyBodWdldGxiIGFuZCBhbm9ueW1vdXMgZm9saW8gdW5tYXBwaW5nIGludG8gc2VwYXJhdGUgZnVuY3Rpb25zICh0cnlfdG9fdW5tYXBfaHVnZXRsYl9vbmUsIHR0dV9hbm9uX2ZvbGlvLCBldGMuKS4gSXQgbW9kaWZpZXMgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYyByZWxhdGVkIHRvIHJldmVyc2UgbWFwcGluZywgaHVnZSBwYWdlcywgYW5kIHN3YXAuIEZ1enppbmcgc2hvdWxkIGZvY3VzIG9uIHRoZXNlIG5ldyBmdW5jdGlvbnMgdG8gZW5zdXJlIG5vIHJlZ3Jlc3Npb25zIG9yIGJ1Z3Mgd2VyZSBpbnRyb2R1Y2VkIGR1cmluZyB0aGUgcmVmYWN0b3JpbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0hVR0VUTEJGUyYjMzQ7LAogICAgJiMzNDtTV0FQJiMzNDssCiAgICAmIzM0O01FTU9SWV9GQUlMVVJFJiMzNDssCiAgICAmIzM0O0hXUE9JU09OX0lOSkVDVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3RyeV90b191bm1hcF9odWdldGxiX29uZSYjMzQ7LAogICAgJiMzNDt0dHVfYW5vbl9mb2xpbyYjMzQ7LAogICAgJiMzNDt0dHVfYW5vbl9sYXp5ZnJlZV9mb2xpbyYjMzQ7LAogICAgJiMzNDt0dHVfYW5vbl9zd2FwYmFja2VkX2ZvbGlvJiMzNDssCiAgICAmIzM0O3RyeV90b191bm1hcF9vbmUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSB1bm1hcHBpbmcgbG9naWMgaW4gbW0vcm1hcC5jIGJ5IGV4dHJhY3RpbmcgaHVnZXRsYiBhbmQgYW5vbnltb3VzIGZvbGlvIHVubWFwcGluZyBpbnRvIHNlcGFyYXRlIGZ1bmN0aW9ucyAodHJ5X3RvX3VubWFwX2h1Z2V0bGJfb25lLCB0dHVfYW5vbl9mb2xpbywgZXRjLikuIEl0IG1vZGlmaWVzIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgbG9naWMgcmVsYXRlZCB0byByZXZlcnNlIG1hcHBpbmcsIGh1Z2UgcGFnZXMsIGFuZCBzd2FwLiBGdXp6aW5nIHNob3VsZCBmb2N1cyBvbiB0aGVzZSBuZXcgZnVuY3Rpb25zIHRvIGVuc3VyZSBubyByZWdyZXNzaW9ucyBvciBidWdzIHdlcmUgaW50cm9kdWNlZCBkdXJpbmcgdGhlIHJlZmFjdG9yaW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDctMDdUMjA6Mzc6NDYuMzQ5NDE3MjdaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NjU1MTM2NDkzNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJIVUdFVExCRlNcIixcbiAgICBcIlNXQVBcIixcbiAgICBcIk1FTU9SWV9GQUlMVVJFXCIsXG4gICAgXCJIV1BPSVNPTl9JTkpFQ1RcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ0cnlfdG9fdW5tYXBfaHVnZXRsYl9vbmVcIixcbiAgICBcInR0dV9hbm9uX2ZvbGlvXCIsXG4gICAgXCJ0dHVfYW5vbl9sYXp5ZnJlZV9mb2xpb1wiLFxuICAgIFwidHR1X2Fub25fc3dhcGJhY2tlZF9mb2xpb1wiLFxuICAgIFwidHJ5X3RvX3VubWFwX29uZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlZmFjdG9ycyB0aGUgdW5tYXBwaW5nIGxvZ2ljIGluIG1tL3JtYXAuYyBieSBleHRyYWN0aW5nIGh1Z2V0bGIgYW5kIGFub255bW91cyBmb2xpbyB1bm1hcHBpbmcgaW50byBzZXBhcmF0ZSBmdW5jdGlvbnMgKHRyeV90b191bm1hcF9odWdldGxiX29uZSwgdHR1X2Fub25fZm9saW8sIGV0Yy4pLiBJdCBtb2RpZmllcyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGxvZ2ljIHJlbGF0ZWQgdG8gcmV2ZXJzZSBtYXBwaW5nLCBodWdlIHBhZ2VzLCBhbmQgc3dhcC4gRnV6emluZyBzaG91bGQgZm9jdXMgb24gdGhlc2UgbmV3IGZ1bmN0aW9ucyB0byBlbnN1cmUgbm8gcmVncmVzc2lvbnMgb3IgYnVncyB3ZXJlIGludHJvZHVjZWQgZHVyaW5nIHRoZSByZWZhY3RvcmluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDdUMjA6Mzc6NDYuMzQ5NDIyODFaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUyNzQ0ODM0OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDFlODRiYzBlMGMyMDZmOTE1MDA4YWQ0YzcxOTA1Y2ViMjc4YjFjNThcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFR1ZSBKdWwgNyAyMDozNzo0NCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaCBiL2luY2x1ZGUvbGludXgvaHVnZXRsYi5oXFxuaW5kZXggNDExNTA3NmU0OTIyYWUuLmJmN2UxNjNlMzc3OWQ4IDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgvaHVnZXRsYi5oXFxuKysrIGIvaW5jbHVkZS9saW51eC9odWdldGxiLmhcXG5AQCAtMTI3MSw2ICsxMjcxLDcgQEAgc3RhdGljIGlubGluZSB2b2lkIGh1Z2V0bGJfY291bnRfc3ViKGxvbmcgbCwgc3RydWN0IG1tX3N0cnVjdCAqbW0pXFxuIH1cXG4gXFxuIHB0ZV90IGh1Z2VfcHRlcF9nZXQoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkciwgcHRlX3QgKnB0ZXApO1xcbit1bnNpZ25lZCBsb25nIGh1Z2VfcHRlX2RpcnR5KHB0ZV90IHB0ZSk7XFxuIFxcbiBzdGF0aWMgaW5saW5lIHB0ZV90IGh1Z2VfcHRlcF9jbGVhcl9mbHVzaChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4gXFx0XFx0XFx0XFx0XFx0ICB1bnNpZ25lZCBsb25nIGFkZHIsIHB0ZV90ICpwdGVwKVxcbmRpZmYgLS1naXQgYS9tbS9ybWFwLmMgYi9tbS9ybWFwLmNcXG5pbmRleCA5OTM5NDAwZTc3Yzc5YS4uZjAyMWVjZDUxYTRhMmUgMTAwNjQ0XFxuLS0tIGEvbW0vcm1hcC5jXFxuKysrIGIvbW0vcm1hcC5jXFxuQEAgLTE5NzgsNiArMTk3OCwyMzMgQEAgc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgZm9saW9fdW5tYXBfcHRlX2JhdGNoKHN0cnVjdCBmb2xpbyAqZm9saW8sXFxuIFxcdFxcdFxcdFxcdCAgICAgRlBCX1JFU1BFQ1RfV1JJVEUgfCBGUEJfUkVTUEVDVF9TT0ZUX0RJUlRZKTtcXG4gfVxcbiBcXG4rc3RhdGljIGJvb2wgdHJ5X3RvX3VubWFwX2h1Z2V0bGJfb25lKHN0cnVjdCBmb2xpbyAqZm9saW8sXFxuK1xcdFxcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MsIHZvaWQgKmFyZylcXG4re1xcbitcXHRERUZJTkVfRk9MSU9fVk1BX1dBTEsocHZtdywgZm9saW8sIHZtYSwgYWRkcmVzcywgMCk7XFxuK1xcdHN0cnVjdCBtbXVfbm90aWZpZXJfcmFuZ2UgcmFuZ2U7XFxuK1xcdGVudW0gdHR1X2ZsYWdzIGZsYWdzID0gKGVudW0gdHR1X2ZsYWdzKShsb25nKWFyZztcXG4rXFx0c3RydWN0IG1tX3N0cnVjdCAqbW0gPSB2bWEtXFx1MDAzZXZtX21tO1xcbitcXHRjb25zdCB1bnNpZ25lZCBsb25nIGhzeiA9IGh1Z2VfcGFnZV9zaXplKGhzdGF0ZV92bWEodm1hKSk7XFxuK1xcdGJvb2wgcmV0ID0gdHJ1ZTtcXG4rXFx0cHRlX3QgcHRldmFsO1xcbitcXG4rXFx0LypcXG4rXFx0ICogVGhlIHRyeV90b191bm1hcCgpIGlzIG9ubHkgcGFzc2VkIGEgaHVnZXRsYiBmb2xpbyBpbiB0aGUgY2FzZVxcbitcXHQgKiB3aGVyZSB0aGUgaHVnZXRsYiBmb2xpbyBpcyBwb2lzb25lZC5cXG4rXFx0ICovXFxuK1xcdFZNX1dBUk5fT05fRk9MSU8oIWZvbGlvX3Rlc3RfaHdwb2lzb24oZm9saW8pLCBmb2xpbyk7XFxuK1xcdFZNX1dBUk5fT05fT05DRSghKGZsYWdzIFxcdTAwMjYgVFRVX0hXUE9JU09OKSk7XFxuK1xcbitcXHRyYW5nZS5lbmQgPSB2bWFfYWRkcmVzc19lbmQoXFx1MDAyNnB2bXcpO1xcbitcXHRtbXVfbm90aWZpZXJfcmFuZ2VfaW5pdChcXHUwMDI2cmFuZ2UsIE1NVV9OT1RJRllfQ0xFQVIsIDAsIHZtYS1cXHUwMDNldm1fbW0sXFxuK1xcdFxcdFxcdFxcdGFkZHJlc3MsIHJhbmdlLmVuZCk7XFxuK1xcdGFkanVzdF9yYW5nZV9pZl9wbWRfc2hhcmluZ19wb3NzaWJsZSh2bWEsIFxcdTAwMjZyYW5nZS5zdGFydCwgXFx1MDAyNnJhbmdlLmVuZCk7XFxuK1xcdG1tdV9ub3RpZmllcl9pbnZhbGlkYXRlX3JhbmdlX3N0YXJ0KFxcdTAwMjZyYW5nZSk7XFxuK1xcbitcXHQvKiBUaGVyZSBpcyBvbmx5IGEgc2luZ2xlIG1hcHBpbmcgaW4gYSBWTUEuICovXFxuK1xcdGlmICghcGFnZV92bWFfbWFwcGVkX3dhbGsoXFx1MDAyNnB2bXcpKVxcbitcXHRcXHRnb3RvIHJhbmdlX2VuZDtcXG4rXFxuK1xcdGFkZHJlc3MgPSBwdm13LmFkZHJlc3M7XFxuK1xcdHB0ZXZhbCA9IGh1Z2VfcHRlcF9nZXQobW0sIGFkZHJlc3MsIHB2bXcucHRlKTtcXG4rXFx0Vk1fV0FSTl9PTl9PTkNFKCFwdGVfcHJlc2VudChwdGV2YWwpKTtcXG4rXFx0Vk1fV0FSTl9PTl9PTkNFKHB0ZV9wZm4ocHRldmFsKSAhPSBmb2xpb19wZm4oZm9saW8pKTtcXG4rXFxuK1xcdC8qXFxuK1xcdCAqIGh1Z2VfcG1kX3Vuc2hhcmUgbWF5IHVubWFwIGFuIGVudGlyZSBQTUQgcGFnZS4gVGhlcmUgaXMgbm8gd2F5IG9mXFxuK1xcdCAqIGtub3dpbmcgZXhhY3RseSB3aGljaCBQTURzIG1heSBiZSBjYWNoZWQgZm9yIHRoaXMgbW0sIHNvIHdlIG11c3RcXG4rXFx0ICogZmx1c2ggdGhlbSBhbGwuIHN0YXJ0L2VuZCB3ZXJlIGFscmVhZHkgYWRqdXN0ZWQgYWJvdmUgdG8gY292ZXIgdGhpc1xcbitcXHQgKiByYW5nZS5cXG4rXFx0ICovXFxuK1xcdGZsdXNoX2NhY2hlX3JhbmdlKHZtYSwgcmFuZ2Uuc3RhcnQsIHJhbmdlLmVuZCk7XFxuK1xcbitcXHQvKlxcbitcXHQgKiBUbyBjYWxsIGh1Z2VfcG1kX3Vuc2hhcmUsIGlfbW1hcF9yd3NlbSBtdXN0IGJlIGhlbGQgaW4gd3JpdGUgbW9kZS5cXG4rXFx0ICogQ2FsbGVyIG5lZWRzIHRvIGV4cGxpY2l0bHkgZG8gdGhpcyBvdXRzaWRlIHJtYXAgcm91dGluZXMuXFxuK1xcdCAqXFxuK1xcdCAqIFdlIGFsc28gbXVzdCBob2xkIGh1Z2V0bGIgdm1hX2xvY2sgaW4gd3JpdGUgbW9kZS4gTG9jayBvcmRlciBkaWN0YXRlc1xcbitcXHQgKiBhY3F1aXJpbmcgdm1hX2xvY2sgQkVGT1JFIGlfbW1hcF9yd3NlbS4gV2UgY2FuIG9ubHkgdHJ5IGxvY2sgaGVyZSBhbmRcXG4rXFx0ICogZmFpbCBpZiB1bnN1Y2Nlc3NmdWwuXFxuK1xcdCAqL1xcbitcXHRpZiAoIWZvbGlvX3Rlc3RfYW5vbihmb2xpbykpIHtcXG4rXFx0XFx0c3RydWN0IG1tdV9nYXRoZXIgdGxiO1xcbitcXG4rXFx0XFx0Vk1fV0FSTl9PTighKGZsYWdzIFxcdTAwMjYgVFRVX1JNQVBfTE9DS0VEKSk7XFxuK1xcdFxcdGlmICghaHVnZXRsYl92bWFfdHJ5bG9ja193cml0ZSh2bWEpKSB7XFxuK1xcdFxcdFxcdHJldCA9IGZhbHNlO1xcbitcXHRcXHRcXHRnb3RvIHdhbGtfZG9uZTtcXG4rXFx0XFx0fVxcbitcXG4rXFx0XFx0dGxiX2dhdGhlcl9tbXVfdm1hKFxcdTAwMjZ0bGIsIHZtYSk7XFxuK1xcdFxcdGlmIChodWdlX3BtZF91bnNoYXJlKFxcdTAwMjZ0bGIsIHZtYSwgYWRkcmVzcywgcHZtdy5wdGUpKSB7XFxuK1xcdFxcdFxcdGh1Z2V0bGJfdm1hX3VubG9ja193cml0ZSh2bWEpO1xcbitcXHRcXHRcXHRodWdlX3BtZF91bnNoYXJlX2ZsdXNoKFxcdTAwMjZ0bGIsIHZtYSk7XFxuK1xcdFxcdFxcdHRsYl9maW5pc2hfbW11KFxcdTAwMjZ0bGIpO1xcbitcXHRcXHRcXHQvKlxcbitcXHRcXHRcXHQgKiBUaGUgUE1EIHRhYmxlIHdhcyB1bm1hcHBlZCwgY29uc2VxdWVudGx5IHVubWFwcGluZ1xcbitcXHRcXHRcXHQgKiB0aGUgZm9saW8uXFxuK1xcdFxcdFxcdCAqL1xcbitcXHRcXHRcXHRnb3RvIHdhbGtfZG9uZTtcXG4rXFx0XFx0fVxcbitcXHRcXHRodWdldGxiX3ZtYV91bmxvY2tfd3JpdGUodm1hKTtcXG4rXFx0XFx0dGxiX2ZpbmlzaF9tbXUoXFx1MDAyNnRsYik7XFxuK1xcdH1cXG4rXFx0cHRldmFsID0gaHVnZV9wdGVwX2NsZWFyX2ZsdXNoKHZtYSwgYWRkcmVzcywgcHZtdy5wdGUpO1xcbitcXHRpZiAoaHVnZV9wdGVfZGlydHkocHRldmFsKSlcXG4rXFx0XFx0Zm9saW9fbWFya19kaXJ0eShmb2xpbyk7XFxuK1xcbitcXHRwdGV2YWwgPSBzd3BfZW50cnlfdG9fcHRlKG1ha2VfaHdwb2lzb25fZW50cnkoZm9saW9fcGFnZShmb2xpbywgMCkpKTtcXG4rXFx0aHVnZXRsYl9jb3VudF9zdWIoZm9saW9fbnJfcGFnZXMoZm9saW8pLCBtbSk7XFxuK1xcdHNldF9odWdlX3B0ZV9hdChtbSwgYWRkcmVzcywgcHZtdy5wdGUsIHB0ZXZhbCwgaHN6KTtcXG4rXFx0aHVnZXRsYl9yZW1vdmVfcm1hcChmb2xpbyk7XFxuK1xcdGZvbGlvX3B1dF9yZWZzKGZvbGlvLCAxKTtcXG4rXFxuK3dhbGtfZG9uZTpcXG4rXFx0cGFnZV92bWFfbWFwcGVkX3dhbGtfZG9uZShcXHUwMDI2cHZtdyk7XFxuK3JhbmdlX2VuZDpcXG4rXFx0bW11X25vdGlmaWVyX2ludmFsaWRhdGVfcmFuZ2VfZW5kKFxcdTAwMjZyYW5nZSk7XFxuK1xcdHJldHVybiByZXQ7XFxuK31cXG4rXFxuK3N0YXRpYyBpbmxpbmUgYm9vbCB0dHVfYW5vbl9sYXp5ZnJlZV9mb2xpbyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4rXFx0XFx0c3RydWN0IGZvbGlvICpmb2xpbylcXG4re1xcbitcXHRpbnQgcmVmX2NvdW50LCBtYXBfY291bnQ7XFxuK1xcbitcXHQvKlxcbitcXHQgKiBTeW5jaHJvbml6ZSB3aXRoIGd1cF9wdGVfcmFuZ2UoKTpcXG4rXFx0ICogLSBjbGVhciBQVEU7IGJhcnJpZXI7IHJlYWQgcmVmY291bnRcXG4rXFx0ICogLSBpbmMgcmVmY291bnQ7IGJhcnJpZXI7IHJlYWQgUFRFXFxuK1xcdCAqL1xcbitcXHRzbXBfbWIoKTtcXG4rXFxuK1xcdHJlZl9jb3VudCA9IGZvbGlvX3JlZl9jb3VudChmb2xpbyk7XFxuK1xcdG1hcF9jb3VudCA9IGZvbGlvX21hcGNvdW50KGZvbGlvKTtcXG4rXFxuK1xcdC8qXFxuK1xcdCAqIE9yZGVyIHJlYWRzIGZvciBwYWdlIHJlZmNvdW50IGFuZCBkaXJ0eSBmbGFnXFxuK1xcdCAqIChzZWUgY29tbWVudHMgaW4gX19yZW1vdmVfbWFwcGluZygpKS5cXG4rXFx0ICovXFxuK1xcdHNtcF9ybWIoKTtcXG4rXFxuK1xcdGlmIChmb2xpb190ZXN0X2RpcnR5KGZvbGlvKSBcXHUwMDI2XFx1MDAyNiAhKHZtYS1cXHUwMDNldm1fZmxhZ3MgXFx1MDAyNiBWTV9EUk9QUEFCTEUpKSB7XFxuK1xcdFxcdC8qXFxuK1xcdFxcdCAqIHJlZGlydGllZCBlaXRoZXIgdXNpbmcgdGhlIHBhZ2UgdGFibGUgb3IgYSBwcmV2aW91c2x5XFxuK1xcdFxcdCAqIG9idGFpbmVkIEdVUCByZWZlcmVuY2UuXFxuK1xcdFxcdCAqL1xcbitcXHRcXHRmb2xpb19zZXRfc3dhcGJhY2tlZChmb2xpbyk7XFxuK1xcdFxcdHJldHVybiBmYWxzZTtcXG4rXFx0fVxcbitcXG4rXFx0aWYgKHJlZl9jb3VudCAhPSAxICsgbWFwX2NvdW50KSB7XFxuK1xcdFxcdC8qXFxuK1xcdFxcdCAqIEFkZGl0aW9uYWwgcmVmZXJlbmNlLiBDb3VsZCBiZSBhIEdVUCByZWZlcmVuY2Ugb3IgYW55XFxuK1xcdFxcdCAqIHNwZWN1bGF0aXZlIHJlZmVyZW5jZS4gR1VQIHVzZXJzIG11c3QgbWFyayB0aGUgZm9saW9cXG4rXFx0XFx0ICogZGlydHkgaWYgdGhlcmUgd2FzIGEgbW9kaWZpY2F0aW9uLiBUaGlzIGZvbGlvIGNhbm5vdCBiZVxcbitcXHRcXHQgKiByZWNsYWltZWQgcmlnaHQgbm93IGVpdGhlciB3YXksIHNvIGFjdCBqdXN0IGxpa2Ugbm90aGluZ1xcbitcXHRcXHQgKiBoYXBwZW5lZC5cXG4rXFx0XFx0ICogV2UnbGwgY29tZSBiYWNrIGhlcmUgbGF0ZXIgYW5kIGRldGVjdCBpZiB0aGUgZm9saW8gd2FzXFxuK1xcdFxcdCAqIGRpcnRpZWQgd2hlbiB0aGUgYWRkaXRpb25hbCByZWZlcmVuY2UgaXMgZ29uZS5cXG4rXFx0XFx0ICovXFxuK1xcdFxcdHJldHVybiBmYWxzZTtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIHRydWU7XFxuK31cXG4rXFxuK3N0YXRpYyBpbmxpbmUgdm9pZCBzZXRfc3dwX3B0ZV9hdChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyZXNzLFxcbitcXHRcXHRwdGVfdCAqcHRlcCwgc3dwX2VudHJ5X3QgZW50cnksIHB0ZV90IHB0ZXZhbCwgYm9vbCBhbm9uX2V4Y2x1c2l2ZSlcXG4re1xcbitcXHRwdGVfdCBzd3BfcHRlID0gc3dwX2VudHJ5X3RvX3B0ZShlbnRyeSk7XFxuK1xcbitcXHRpZiAoYW5vbl9leGNsdXNpdmUpXFxuK1xcdFxcdHN3cF9wdGUgPSBwdGVfc3dwX21rZXhjbHVzaXZlKHN3cF9wdGUpO1xcbitcXG4rXFx0aWYgKGxpa2VseShwdGVfcHJlc2VudChwdGV2YWwpKSkge1xcbitcXHRcXHRpZiAocHRlX3NvZnRfZGlydHkocHRldmFsKSlcXG4rXFx0XFx0XFx0c3dwX3B0ZSA9IHB0ZV9zd3BfbWtzb2Z0X2RpcnR5KHN3cF9wdGUpO1xcbitcXHRcXHRpZiAocHRlX3VmZmRfd3AocHRldmFsKSlcXG4rXFx0XFx0XFx0c3dwX3B0ZSA9IHB0ZV9zd3BfbWt1ZmZkX3dwKHN3cF9wdGUpO1xcbitcXHR9IGVsc2Uge1xcbitcXHRcXHQvKiBEZXZpY2UtZXhjbHVzaXZlIGVudHJ5ICovXFxuK1xcdFxcdGlmIChwdGVfc3dwX3NvZnRfZGlydHkocHRldmFsKSlcXG4rXFx0XFx0XFx0c3dwX3B0ZSA9IHB0ZV9zd3BfbWtzb2Z0X2RpcnR5KHN3cF9wdGUpO1xcbitcXHRcXHRpZiAocHRlX3N3cF91ZmZkX3dwKHB0ZXZhbCkpXFxuK1xcdFxcdFxcdHN3cF9wdGUgPSBwdGVfc3dwX21rdWZmZF93cChzd3BfcHRlKTtcXG4rXFx0fVxcbitcXG4rXFx0c2V0X3B0ZV9hdChtbSwgYWRkcmVzcywgcHRlcCwgc3dwX3B0ZSk7XFxuK31cXG4rXFxuK3N0YXRpYyBpbmxpbmUgYm9vbCB0dHVfYW5vbl9zd2FwYmFja2VkX2ZvbGlvKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbitcXHRcXHRzdHJ1Y3QgcGFnZSAqc3VicGFnZSwgdW5zaWduZWQgbG9uZyBhZGRyZXNzLCBwdGVfdCAqcHRlcCxcXG4rXFx0XFx0cHRlX3QgcHRldmFsKVxcbit7XFxuK1xcdGJvb2wgYW5vbl9leGNsdXNpdmUgPSBmb2xpb190ZXN0X2Fub24oZm9saW8pIFxcdTAwMjZcXHUwMDI2IFBhZ2VBbm9uRXhjbHVzaXZlKHN1YnBhZ2UpO1xcbitcXHRzd3BfZW50cnlfdCBlbnRyeSA9IHBhZ2Vfc3dhcF9lbnRyeShzdWJwYWdlKTtcXG4rXFx0c3RydWN0IG1tX3N0cnVjdCAqbW0gPSB2bWEtXFx1MDAzZXZtX21tO1xcbitcXG4rXFx0aWYgKGZvbGlvX2R1cF9zd2FwKGZvbGlvLCBzdWJwYWdlKSBcXHUwMDNjIDApXFxuK1xcdFxcdHJldHVybiBmYWxzZTtcXG4rXFxuK1xcdC8qXFxuK1xcdCAqIGFyY2hfdW5tYXBfb25lKCkgaXMgZXhwZWN0ZWQgdG8gYmUgYSBOT1Agb25cXG4rXFx0ICogYXJjaGl0ZWN0dXJlcyB3aGVyZSB3ZSBjb3VsZCBoYXZlIFBGTiBzd2FwIFBURXMsXFxuK1xcdCAqIHNvIHdlJ2xsIG5vdCBjaGVjay9jYXJlLlxcbitcXHQgKi9cXG4rXFx0aWYgKGFyY2hfdW5tYXBfb25lKG1tLCB2bWEsIGFkZHJlc3MsIHB0ZXZhbCkgXFx1MDAzYyAwKSB7XFxuK1xcdFxcdGZvbGlvX3B1dF9zd2FwKGZvbGlvLCBzdWJwYWdlKTtcXG4rXFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXHR9XFxuK1xcbitcXHQvKiBTZWUgZm9saW9fdHJ5X3NoYXJlX2Fub25fcm1hcCgpOiBjbGVhciBQVEUgZmlyc3QuICovXFxuK1xcdGlmIChhbm9uX2V4Y2x1c2l2ZSBcXHUwMDI2XFx1MDAyNiBmb2xpb190cnlfc2hhcmVfYW5vbl9ybWFwX3B0ZShmb2xpbywgc3VicGFnZSkpIHtcXG4rXFx0XFx0Zm9saW9fcHV0X3N3YXAoZm9saW8sIHN1YnBhZ2UpO1xcbitcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcdH1cXG4rXFxuK1xcdG1tX3ByZXBhcmVfZm9yX3N3YXBfZW50cmllcyhtbSk7XFxuK1xcdGRlY19tbV9jb3VudGVyKG1tLCBNTV9BTk9OUEFHRVMpO1xcbitcXHRpbmNfbW1fY291bnRlcihtbSwgTU1fU1dBUEVOVFMpO1xcbitcXHRzZXRfc3dwX3B0ZV9hdChtbSwgYWRkcmVzcywgcHRlcCwgZW50cnksIHB0ZXZhbCwgYW5vbl9leGNsdXNpdmUpO1xcbitcXHRyZXR1cm4gdHJ1ZTtcXG4rfVxcbitcXG4rc3RhdGljIGlubGluZSBib29sIHR0dV9hbm9uX2ZvbGlvKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbitcXHRcXHRzdHJ1Y3QgcGFnZSAqc3VicGFnZSwgdW5zaWduZWQgbG9uZyBhZGRyZXNzLCBwdGVfdCAqcHRlcCxcXG4rXFx0XFx0cHRlX3QgcHRldmFsLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzKVxcbit7XFxuK1xcdHN0cnVjdCBtbV9zdHJ1Y3QgKm1tID0gdm1hLVxcdTAwM2V2bV9tbTtcXG4rXFx0Ym9vbCByZXQ7XFxuK1xcbitcXHQvKlxcbitcXHQgKiBTdG9yZSB0aGUgc3dhcCBsb2NhdGlvbiBpbiB0aGUgcHRlLlxcbitcXHQgKiBTZWUgaGFuZGxlX3B0ZV9mYXVsdCgpIC4uLlxcbitcXHQgKi9cXG4rXFx0aWYgKHVubGlrZWx5KGZvbGlvX3Rlc3Rfc3dhcGJhY2tlZChmb2xpbykgIT1cXG4rXFx0XFx0XFx0Zm9saW9fdGVzdF9zd2FwY2FjaGUoZm9saW8pKSkge1xcbitcXHRcXHRXQVJOX09OX09OQ0UoMSk7XFxuK1xcdFxcdHJldHVybiBmYWxzZTtcXG4rXFx0fVxcbitcXG4rXFx0LyogTUFEVl9GUkVFIHBhZ2UgY2hlY2sgKi9cXG4rXFx0aWYgKCFmb2xpb190ZXN0X3N3YXBiYWNrZWQoZm9saW8pKSB7XFxuK1xcdFxcdHJldCA9IHR0dV9hbm9uX2xhenlmcmVlX2ZvbGlvKHZtYSwgZm9saW8pO1xcbitcXHRcXHRpZiAocmV0KVxcbitcXHRcXHRcXHRhZGRfbW1fY291bnRlcihtbSwgTU1fQU5PTlBBR0VTLCAtbnJfcGFnZXMpO1xcbitcXHR9IGVsc2Uge1xcbitcXHRcXHQvKiBucl9wYWdlcyBcXHUwMDNlIDEgbm90IHN1cHBvcnRlZCB5ZXQgKi9cXG4rXFx0XFx0cmV0ID0gdHR1X2Fub25fc3dhcGJhY2tlZF9mb2xpbyh2bWEsIGZvbGlvLCBzdWJwYWdlLCBhZGRyZXNzLFxcbitcXHRcXHRcXHRcXHRcXHRcXHRwdGVwLCBwdGV2YWwpO1xcbitcXHR9XFxuK1xcbitcXHRpZiAoIXJldClcXG4rXFx0XFx0c2V0X3B0ZXMobW0sIGFkZHJlc3MsIHB0ZXAsIHB0ZXZhbCwgbnJfcGFnZXMpO1xcbitcXG4rXFx0cmV0dXJuIHJldDtcXG4rfVxcbitcXG4gLypcXG4gICogQGFyZzogZW51bSB0dHVfZmxhZ3Mgd2lsbCBiZSBwYXNzZWQgdG8gdGhpcyBhcmd1bWVudFxcbiAgKi9cXG5AQCAtMTk4NiwxNCArMjIxMywxMyBAQCBzdGF0aWMgYm9vbCB0cnlfdG9fdW5tYXBfb25lKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbiB7XFxuIFxcdHN0cnVjdCBtbV9zdHJ1Y3QgKm1tID0gdm1hLVxcdTAwM2V2bV9tbTtcXG4gXFx0REVGSU5FX0ZPTElPX1ZNQV9XQUxLKHB2bXcsIGZvbGlvLCB2bWEsIGFkZHJlc3MsIDApO1xcbi1cXHRib29sIGFub25fZXhjbHVzaXZlLCByZXQgPSB0cnVlO1xcbitcXHRib29sIHJldCA9IHRydWU7XFxuIFxcdHB0ZV90IHB0ZXZhbDtcXG4gXFx0c3RydWN0IHBhZ2UgKnN1YnBhZ2U7XFxuIFxcdHN0cnVjdCBtbXVfbm90aWZpZXJfcmFuZ2UgcmFuZ2U7XFxuIFxcdGVudW0gdHR1X2ZsYWdzIGZsYWdzID0gKGVudW0gdHR1X2ZsYWdzKShsb25nKWFyZztcXG4gXFx0dW5zaWduZWQgbG9uZyBucl9wYWdlcyA9IDEsIGVuZF9hZGRyO1xcbiBcXHR1bnNpZ25lZCBsb25nIHBmbjtcXG4tXFx0dW5zaWduZWQgbG9uZyBoc3ogPSAwO1xcbiBcXHRpbnQgcHRlcyA9IDA7XFxuIFxcbiBcXHQvKlxcbkBAIC0yMDA3LDggKzIyMzMsNiBAQCBzdGF0aWMgYm9vbCB0cnlfdG9fdW5tYXBfb25lKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbiBcXG4gXFx0LypcXG4gXFx0ICogRm9yIFRIUCwgd2UgaGF2ZSB0byBhc3N1bWUgdGhlIHdvcnNlIGNhc2UgaWUgcG1kIGZvciBpbnZhbGlkYXRpb24uXFxuLVxcdCAqIEZvciBodWdldGxiLCBpdCBjb3VsZCBiZSBtdWNoIHdvcnNlIGlmIHdlIG5lZWQgdG8gZG8gcHVkXFxuLVxcdCAqIGludmFsaWRhdGlvbiBpbiB0aGUgY2FzZSBvZiBwbWQgc2hhcmluZy5cXG4gXFx0ICpcXG4gXFx0ICogTm90ZSB0aGF0IHRoZSBmb2xpbyBjYW4gbm90IGJlIGZyZWVkIGluIHRoaXMgZnVuY3Rpb24gYXMgY2FsbCBvZlxcbiBcXHQgKiB0cnlfdG9fdW5tYXAoKSBtdXN0IGhvbGQgYSByZWZlcmVuY2Ugb24gdGhlIGZvbGlvLlxcbkBAIC0yMDE2LDE3ICsyMjQwLDYgQEAgc3RhdGljIGJvb2wgdHJ5X3RvX3VubWFwX29uZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4gXFx0cmFuZ2UuZW5kID0gdm1hX2FkZHJlc3NfZW5kKFxcdTAwMjZwdm13KTtcXG4gXFx0bW11X25vdGlmaWVyX3JhbmdlX2luaXQoXFx1MDAyNnJhbmdlLCBNTVVfTk9USUZZX0NMRUFSLCAwLCB2bWEtXFx1MDAzZXZtX21tLFxcbiBcXHRcXHRcXHRcXHRhZGRyZXNzLCByYW5nZS5lbmQpO1xcbi1cXHRpZiAoZm9saW9fdGVzdF9odWdldGxiKGZvbGlvKSkge1xcbi1cXHRcXHQvKlxcbi1cXHRcXHQgKiBJZiBzaGFyaW5nIGlzIHBvc3NpYmxlLCBzdGFydCBhbmQgZW5kIHdpbGwgYmUgYWRqdXN0ZWRcXG4tXFx0XFx0ICogYWNjb3JkaW5nbHkuXFxuLVxcdFxcdCAqL1xcbi1cXHRcXHRhZGp1c3RfcmFuZ2VfaWZfcG1kX3NoYXJpbmdfcG9zc2libGUodm1hLCBcXHUwMDI2cmFuZ2Uuc3RhcnQsXFxuLVxcdFxcdFxcdFxcdFxcdFxcdCAgICAgXFx1MDAyNnJhbmdlLmVuZCk7XFxuLVxcbi1cXHRcXHQvKiBXZSBuZWVkIHRoZSBodWdlIHBhZ2Ugc2l6ZSBmb3Igc2V0X2h1Z2VfcHRlX2F0KCkgKi9cXG4tXFx0XFx0aHN6ID0gaHVnZV9wYWdlX3NpemUoaHN0YXRlX3ZtYSh2bWEpKTtcXG4tXFx0fVxcbiBcXHRtbXVfbm90aWZpZXJfaW52YWxpZGF0ZV9yYW5nZV9zdGFydChcXHUwMDI2cmFuZ2UpO1xcbiBcXG4gXFx0d2hpbGUgKHBhZ2Vfdm1hX21hcHBlZF93YWxrKFxcdTAwMjZwdm13KSkge1xcbkBAIC0yMTExLDY1ICsyMzI0LDExIEBAIHN0YXRpYyBib29sIHRyeV90b191bm1hcF9vbmUoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuIFxcdFxcdFxcdGNvbnN0IHNvZnRsZWFmX3QgZW50cnkgPSBzb2Z0bGVhZl9mcm9tX3B0ZShwdGV2YWwpO1xcbiBcXG4gXFx0XFx0XFx0cGZuID0gc29mdGxlYWZfdG9fcGZuKGVudHJ5KTtcXG4tXFx0XFx0XFx0Vk1fV0FSTl9PTl9GT0xJTyhmb2xpb190ZXN0X2h1Z2V0bGIoZm9saW8pLCBmb2xpbyk7XFxuIFxcdFxcdH1cXG4gXFxuIFxcdFxcdHN1YnBhZ2UgPSBmb2xpb19wYWdlKGZvbGlvLCBwZm4gLSBmb2xpb19wZm4oZm9saW8pKTtcXG4tXFx0XFx0YW5vbl9leGNsdXNpdmUgPSBmb2xpb190ZXN0X2Fub24oZm9saW8pIFxcdTAwMjZcXHUwMDI2XFxuLVxcdFxcdFxcdFxcdCBQYWdlQW5vbkV4Y2x1c2l2ZShzdWJwYWdlKTtcXG4gXFxuLVxcdFxcdGlmIChmb2xpb190ZXN0X2h1Z2V0bGIoZm9saW8pKSB7XFxuLVxcdFxcdFxcdGJvb2wgYW5vbiA9IGZvbGlvX3Rlc3RfYW5vbihmb2xpbyk7XFxuLVxcbi1cXHRcXHRcXHQvKlxcbi1cXHRcXHRcXHQgKiBUaGUgdHJ5X3RvX3VubWFwKCkgaXMgb25seSBwYXNzZWQgYSBodWdldGxiIHBhZ2VcXG4tXFx0XFx0XFx0ICogaW4gdGhlIGNhc2Ugd2hlcmUgdGhlIGh1Z2V0bGIgcGFnZSBpcyBwb2lzb25lZC5cXG4tXFx0XFx0XFx0ICovXFxuLVxcdFxcdFxcdFZNX0JVR19PTl9QQUdFKCFQYWdlSFdQb2lzb24oc3VicGFnZSksIHN1YnBhZ2UpO1xcbi1cXHRcXHRcXHQvKlxcbi1cXHRcXHRcXHQgKiBodWdlX3BtZF91bnNoYXJlIG1heSB1bm1hcCBhbiBlbnRpcmUgUE1EIHBhZ2UuXFxuLVxcdFxcdFxcdCAqIFRoZXJlIGlzIG5vIHdheSBvZiBrbm93aW5nIGV4YWN0bHkgd2hpY2ggUE1EcyBtYXlcXG4tXFx0XFx0XFx0ICogYmUgY2FjaGVkIGZvciB0aGlzIG1tLCBzbyB3ZSBtdXN0IGZsdXNoIHRoZW0gYWxsLlxcbi1cXHRcXHRcXHQgKiBzdGFydC9lbmQgd2VyZSBhbHJlYWR5IGFkanVzdGVkIGFib3ZlIHRvIGNvdmVyIHRoaXNcXG4tXFx0XFx0XFx0ICogcmFuZ2UuXFxuLVxcdFxcdFxcdCAqL1xcbi1cXHRcXHRcXHRmbHVzaF9jYWNoZV9yYW5nZSh2bWEsIHJhbmdlLnN0YXJ0LCByYW5nZS5lbmQpO1xcbi1cXG4tXFx0XFx0XFx0LypcXG4tXFx0XFx0XFx0ICogVG8gY2FsbCBodWdlX3BtZF91bnNoYXJlLCBpX21tYXBfcndzZW0gbXVzdCBiZVxcbi1cXHRcXHRcXHQgKiBoZWxkIGluIHdyaXRlIG1vZGUuICBDYWxsZXIgbmVlZHMgdG8gZXhwbGljaXRseVxcbi1cXHRcXHRcXHQgKiBkbyB0aGlzIG91dHNpZGUgcm1hcCByb3V0aW5lcy5cXG4tXFx0XFx0XFx0ICpcXG4tXFx0XFx0XFx0ICogV2UgYWxzbyBtdXN0IGhvbGQgaHVnZXRsYiB2bWFfbG9jayBpbiB3cml0ZSBtb2RlLlxcbi1cXHRcXHRcXHQgKiBMb2NrIG9yZGVyIGRpY3RhdGVzIGFjcXVpcmluZyB2bWFfbG9jayBCRUZPUkVcXG4tXFx0XFx0XFx0ICogaV9tbWFwX3J3c2VtLiAgV2UgY2FuIG9ubHkgdHJ5IGxvY2sgaGVyZSBhbmQgZmFpbFxcbi1cXHRcXHRcXHQgKiBpZiB1bnN1Y2Nlc3NmdWwuXFxuLVxcdFxcdFxcdCAqL1xcbi1cXHRcXHRcXHRpZiAoIWFub24pIHtcXG4tXFx0XFx0XFx0XFx0c3RydWN0IG1tdV9nYXRoZXIgdGxiO1xcbi1cXG4tXFx0XFx0XFx0XFx0Vk1fQlVHX09OKCEoZmxhZ3MgXFx1MDAyNiBUVFVfUk1BUF9MT0NLRUQpKTtcXG4tXFx0XFx0XFx0XFx0aWYgKCFodWdldGxiX3ZtYV90cnlsb2NrX3dyaXRlKHZtYSkpXFxuLVxcdFxcdFxcdFxcdFxcdGdvdG8gd2Fsa19hYm9ydDtcXG4tXFxuLVxcdFxcdFxcdFxcdHRsYl9nYXRoZXJfbW11X3ZtYShcXHUwMDI2dGxiLCB2bWEpO1xcbi1cXHRcXHRcXHRcXHRpZiAoaHVnZV9wbWRfdW5zaGFyZShcXHUwMDI2dGxiLCB2bWEsIGFkZHJlc3MsIHB2bXcucHRlKSkge1xcbi1cXHRcXHRcXHRcXHRcXHRodWdldGxiX3ZtYV91bmxvY2tfd3JpdGUodm1hKTtcXG4tXFx0XFx0XFx0XFx0XFx0aHVnZV9wbWRfdW5zaGFyZV9mbHVzaChcXHUwMDI2dGxiLCB2bWEpO1xcbi1cXHRcXHRcXHRcXHRcXHR0bGJfZmluaXNoX21tdShcXHUwMDI2dGxiKTtcXG4tXFx0XFx0XFx0XFx0XFx0LypcXG4tXFx0XFx0XFx0XFx0XFx0ICogVGhlIFBNRCB0YWJsZSB3YXMgdW5tYXBwZWQsXFxuLVxcdFxcdFxcdFxcdFxcdCAqIGNvbnNlcXVlbnRseSB1bm1hcHBpbmcgdGhlIGZvbGlvLlxcbi1cXHRcXHRcXHRcXHRcXHQgKi9cXG4tXFx0XFx0XFx0XFx0XFx0Z290byB3YWxrX2RvbmU7XFxuLVxcdFxcdFxcdFxcdH1cXG4tXFx0XFx0XFx0XFx0aHVnZXRsYl92bWFfdW5sb2NrX3dyaXRlKHZtYSk7XFxuLVxcdFxcdFxcdFxcdHRsYl9maW5pc2hfbW11KFxcdTAwMjZ0bGIpO1xcbi1cXHRcXHRcXHR9XFxuLVxcdFxcdFxcdHB0ZXZhbCA9IGh1Z2VfcHRlcF9jbGVhcl9mbHVzaCh2bWEsIGFkZHJlc3MsIHB2bXcucHRlKTtcXG4tXFx0XFx0XFx0aWYgKHB0ZV9kaXJ0eShwdGV2YWwpKVxcbi1cXHRcXHRcXHRcXHRmb2xpb19tYXJrX2RpcnR5KGZvbGlvKTtcXG4tXFx0XFx0fSBlbHNlIGlmIChsaWtlbHkocHRlX3ByZXNlbnQocHRldmFsKSkpIHtcXG4rXFx0XFx0aWYgKGxpa2VseShwdGVfcHJlc2VudChwdGV2YWwpKSkge1xcbiBcXHRcXHRcXHRucl9wYWdlcyA9IGZvbGlvX3VubWFwX3B0ZV9iYXRjaChmb2xpbywgXFx1MDAyNnB2bXcsIGZsYWdzLCBwdGV2YWwpO1xcbiBcXHRcXHRcXHRlbmRfYWRkciA9IGFkZHJlc3MgKyBucl9wYWdlcyAqIFBBR0VfU0laRTtcXG4gXFx0XFx0XFx0Zmx1c2hfY2FjaGVfcmFuZ2Uodm1hLCBhZGRyZXNzLCBlbmRfYWRkcik7XFxuQEAgLTIyMDQsMTYgKzIzNjMsMTQgQEAgc3RhdGljIGJvb2wgdHJ5X3RvX3VubWFwX29uZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4gXFx0XFx0LyogVXBkYXRlIGhpZ2ggd2F0ZXJtYXJrIGJlZm9yZSB3ZSBsb3dlciByc3MgKi9cXG4gXFx0XFx0dXBkYXRlX2hpd2F0ZXJfcnNzKG1tKTtcXG4gXFxuLVxcdFxcdGlmIChQYWdlSFdQb2lzb24oc3VicGFnZSkgXFx1MDAyNlxcdTAwMjYgKGZsYWdzIFxcdTAwMjYgVFRVX0hXUE9JU09OKSkge1xcbitcXHRcXHQvKlxcbitcXHRcXHQgKiBXaXRoIFRUVV9IV1BPSVNPTiwgd2Ugb25seSBleHBlY3Qgc21hbGwgZm9saW9zIG9yIGh1Z2V0bGJcXG4rXFx0XFx0ICogZm9saW9zIGhlcmUgZm9yIG5vdy5cXG4rXFx0XFx0ICovXFxuK1xcdFxcdGlmIChmb2xpb190ZXN0X2h3cG9pc29uKGZvbGlvKSBcXHUwMDI2XFx1MDAyNiAoZmxhZ3MgXFx1MDAyNiBUVFVfSFdQT0lTT04pKSB7XFxuIFxcdFxcdFxcdHB0ZXZhbCA9IHN3cF9lbnRyeV90b19wdGUobWFrZV9od3BvaXNvbl9lbnRyeShzdWJwYWdlKSk7XFxuLVxcdFxcdFxcdGlmIChmb2xpb190ZXN0X2h1Z2V0bGIoZm9saW8pKSB7XFxuLVxcdFxcdFxcdFxcdGh1Z2V0bGJfY291bnRfc3ViKGZvbGlvX25yX3BhZ2VzKGZvbGlvKSwgbW0pO1xcbi1cXHRcXHRcXHRcXHRzZXRfaHVnZV9wdGVfYXQobW0sIGFkZHJlc3MsIHB2bXcucHRlLCBwdGV2YWwsXFxuLVxcdFxcdFxcdFxcdFxcdFxcdGhzeik7XFxuLVxcdFxcdFxcdH0gZWxzZSB7XFxuLVxcdFxcdFxcdFxcdGRlY19tbV9jb3VudGVyKG1tLCBtbV9jb3VudGVyKGZvbGlvKSk7XFxuLVxcdFxcdFxcdFxcdHNldF9wdGVfYXQobW0sIGFkZHJlc3MsIHB2bXcucHRlLCBwdGV2YWwpO1xcbi1cXHRcXHRcXHR9XFxuK1xcdFxcdFxcdGRlY19tbV9jb3VudGVyKG1tLCBtbV9jb3VudGVyKGZvbGlvKSk7XFxuK1xcdFxcdFxcdHNldF9wdGVfYXQobW0sIGFkZHJlc3MsIHB2bXcucHRlLCBwdGV2YWwpO1xcbiBcXHRcXHR9IGVsc2UgaWYgKGxpa2VseShwdGVfcHJlc2VudChwdGV2YWwpKSBcXHUwMDI2XFx1MDAyNiBwdGVfdW51c2VkKHB0ZXZhbCkgXFx1MDAyNlxcdTAwMjZcXG4gXFx0XFx0XFx0ICAgIXVzZXJmYXVsdGZkX2FybWVkKHZtYSkpIHtcXG4gXFx0XFx0XFx0LypcXG5AQCAtMjIyOCwxMDQgKzIzODUsMTEgQEAgc3RhdGljIGJvb2wgdHJ5X3RvX3VubWFwX29uZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4gXFx0XFx0XFx0ICovXFxuIFxcdFxcdFxcdGRlY19tbV9jb3VudGVyKG1tLCBtbV9jb3VudGVyKGZvbGlvKSk7XFxuIFxcdFxcdH0gZWxzZSBpZiAoZm9saW9fdGVzdF9hbm9uKGZvbGlvKSkge1xcbi1cXHRcXHRcXHRzd3BfZW50cnlfdCBlbnRyeSA9IHBhZ2Vfc3dhcF9lbnRyeShzdWJwYWdlKTtcXG4tXFx0XFx0XFx0cHRlX3Qgc3dwX3B0ZTtcXG4tXFx0XFx0XFx0LypcXG4tXFx0XFx0XFx0ICogU3RvcmUgdGhlIHN3YXAgbG9jYXRpb24gaW4gdGhlIHB0ZS5cXG4tXFx0XFx0XFx0ICogU2VlIGhhbmRsZV9wdGVfZmF1bHQoKSAuLi5cXG4tXFx0XFx0XFx0ICovXFxuLVxcdFxcdFxcdGlmICh1bmxpa2VseShmb2xpb190ZXN0X3N3YXBiYWNrZWQoZm9saW8pICE9XFxuLVxcdFxcdFxcdFxcdFxcdGZvbGlvX3Rlc3Rfc3dhcGNhY2hlKGZvbGlvKSkpIHtcXG4tXFx0XFx0XFx0XFx0V0FSTl9PTl9PTkNFKDEpO1xcbitcXHRcXHRcXHRpZiAoIXR0dV9hbm9uX2ZvbGlvKHZtYSwgZm9saW8sIHN1YnBhZ2UsIGFkZHJlc3MsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICBwdm13LnB0ZSwgcHRldmFsLCBucl9wYWdlcykpXFxuIFxcdFxcdFxcdFxcdGdvdG8gd2Fsa19hYm9ydDtcXG4tXFx0XFx0XFx0fVxcbi1cXG4tXFx0XFx0XFx0LyogTUFEVl9GUkVFIHBhZ2UgY2hlY2sgKi9cXG4tXFx0XFx0XFx0aWYgKCFmb2xpb190ZXN0X3N3YXBiYWNrZWQoZm9saW8pKSB7XFxuLVxcdFxcdFxcdFxcdGludCByZWZfY291bnQsIG1hcF9jb3VudDtcXG4tXFxuLVxcdFxcdFxcdFxcdC8qXFxuLVxcdFxcdFxcdFxcdCAqIFN5bmNocm9uaXplIHdpdGggZ3VwX3B0ZV9yYW5nZSgpOlxcbi1cXHRcXHRcXHRcXHQgKiAtIGNsZWFyIFBURTsgYmFycmllcjsgcmVhZCByZWZjb3VudFxcbi1cXHRcXHRcXHRcXHQgKiAtIGluYyByZWZjb3VudDsgYmFycmllcjsgcmVhZCBQVEVcXG4tXFx0XFx0XFx0XFx0ICovXFxuLVxcdFxcdFxcdFxcdHNtcF9tYigpO1xcbiBcXG4tXFx0XFx0XFx0XFx0cmVmX2NvdW50ID0gZm9saW9fcmVmX2NvdW50KGZvbGlvKTtcXG4tXFx0XFx0XFx0XFx0bWFwX2NvdW50ID0gZm9saW9fbWFwY291bnQoZm9saW8pO1xcbi1cXG4tXFx0XFx0XFx0XFx0LypcXG4tXFx0XFx0XFx0XFx0ICogT3JkZXIgcmVhZHMgZm9yIHBhZ2UgcmVmY291bnQgYW5kIGRpcnR5IGZsYWdcXG4tXFx0XFx0XFx0XFx0ICogKHNlZSBjb21tZW50cyBpbiBfX3JlbW92ZV9tYXBwaW5nKCkpLlxcbi1cXHRcXHRcXHRcXHQgKi9cXG4tXFx0XFx0XFx0XFx0c21wX3JtYigpO1xcbi1cXG4tXFx0XFx0XFx0XFx0aWYgKGZvbGlvX3Rlc3RfZGlydHkoZm9saW8pIFxcdTAwMjZcXHUwMDI2ICEodm1hLVxcdTAwM2V2bV9mbGFncyBcXHUwMDI2IFZNX0RST1BQQUJMRSkpIHtcXG4tXFx0XFx0XFx0XFx0XFx0LypcXG4tXFx0XFx0XFx0XFx0XFx0ICogcmVkaXJ0aWVkIGVpdGhlciB1c2luZyB0aGUgcGFnZSB0YWJsZSBvciBhIHByZXZpb3VzbHlcXG4tXFx0XFx0XFx0XFx0XFx0ICogb2J0YWluZWQgR1VQIHJlZmVyZW5jZS5cXG4tXFx0XFx0XFx0XFx0XFx0ICovXFxuLVxcdFxcdFxcdFxcdFxcdHNldF9wdGVzKG1tLCBhZGRyZXNzLCBwdm13LnB0ZSwgcHRldmFsLCBucl9wYWdlcyk7XFxuLVxcdFxcdFxcdFxcdFxcdGZvbGlvX3NldF9zd2FwYmFja2VkKGZvbGlvKTtcXG4tXFx0XFx0XFx0XFx0XFx0Z290byB3YWxrX2Fib3J0O1xcbi1cXHRcXHRcXHRcXHR9IGVsc2UgaWYgKHJlZl9jb3VudCAhPSAxICsgbWFwX2NvdW50KSB7XFxuLVxcdFxcdFxcdFxcdFxcdC8qXFxuLVxcdFxcdFxcdFxcdFxcdCAqIEFkZGl0aW9uYWwgcmVmZXJlbmNlLiBDb3VsZCBiZSBhIEdVUCByZWZlcmVuY2Ugb3IgYW55XFxuLVxcdFxcdFxcdFxcdFxcdCAqIHNwZWN1bGF0aXZlIHJlZmVyZW5jZS4gR1VQIHVzZXJzIG11c3QgbWFyayB0aGUgZm9saW9cXG4tXFx0XFx0XFx0XFx0XFx0ICogZGlydHkgaWYgdGhlcmUgd2FzIGEgbW9kaWZpY2F0aW9uLiBUaGlzIGZvbGlvIGNhbm5vdCBiZVxcbi1cXHRcXHRcXHRcXHRcXHQgKiByZWNsYWltZWQgcmlnaHQgbm93IGVpdGhlciB3YXksIHNvIGFjdCBqdXN0IGxpa2Ugbm90aGluZ1xcbi1cXHRcXHRcXHRcXHRcXHQgKiBoYXBwZW5lZC5cXG4tXFx0XFx0XFx0XFx0XFx0ICogV2UnbGwgY29tZSBiYWNrIGhlcmUgbGF0ZXIgYW5kIGRldGVjdCBpZiB0aGUgZm9saW8gd2FzXFxuLVxcdFxcdFxcdFxcdFxcdCAqIGRpcnRpZWQgd2hlbiB0aGUgYWRkaXRpb25hbCByZWZlcmVuY2UgaXMgZ29uZS5cXG4tXFx0XFx0XFx0XFx0XFx0ICovXFxuLVxcdFxcdFxcdFxcdFxcdHNldF9wdGVzKG1tLCBhZGRyZXNzLCBwdm13LnB0ZSwgcHRldmFsLCBucl9wYWdlcyk7XFxuLVxcdFxcdFxcdFxcdFxcdGdvdG8gd2Fsa19hYm9ydDtcXG4tXFx0XFx0XFx0XFx0fVxcbi1cXHRcXHRcXHRcXHRhZGRfbW1fY291bnRlcihtbSwgTU1fQU5PTlBBR0VTLCAtbnJfcGFnZXMpO1xcbi1cXHRcXHRcXHRcXHRnb3RvIGRpc2NhcmQ7XFxuLVxcdFxcdFxcdH1cXG4tXFxuLVxcdFxcdFxcdGlmIChmb2xpb19kdXBfc3dhcChmb2xpbywgc3VicGFnZSkgXFx1MDAzYyAwKSB7XFxuLVxcdFxcdFxcdFxcdHNldF9wdGVfYXQobW0sIGFkZHJlc3MsIHB2bXcucHRlLCBwdGV2YWwpO1xcbi1cXHRcXHRcXHRcXHRnb3RvIHdhbGtfYWJvcnQ7XFxuLVxcdFxcdFxcdH1cXG4tXFxuLVxcdFxcdFxcdC8qXFxuLVxcdFxcdFxcdCAqIGFyY2hfdW5tYXBfb25lKCkgaXMgZXhwZWN0ZWQgdG8gYmUgYSBOT1Agb25cXG4tXFx0XFx0XFx0ICogYXJjaGl0ZWN0dXJlcyB3aGVyZSB3ZSBjb3VsZCBoYXZlIFBGTiBzd2FwIFBURXMsXFxuLVxcdFxcdFxcdCAqIHNvIHdlJ2xsIG5vdCBjaGVjay9jYXJlLlxcbi1cXHRcXHRcXHQgKi9cXG4tXFx0XFx0XFx0aWYgKGFyY2hfdW5tYXBfb25lKG1tLCB2bWEsIGFkZHJlc3MsIHB0ZXZhbCkgXFx1MDAzYyAwKSB7XFxuLVxcdFxcdFxcdFxcdGZvbGlvX3B1dF9zd2FwKGZvbGlvLCBzdWJwYWdlKTtcXG4tXFx0XFx0XFx0XFx0c2V0X3B0ZV9hdChtbSwgYWRkcmVzcywgcHZtdy5wdGUsIHB0ZXZhbCk7XFxuLVxcdFxcdFxcdFxcdGdvdG8gd2Fsa19hYm9ydDtcXG4tXFx0XFx0XFx0fVxcbi1cXG4tXFx0XFx0XFx0LyogU2VlIGZvbGlvX3RyeV9zaGFyZV9hbm9uX3JtYXAoKTogY2xlYXIgUFRFIGZpcnN0LiAqL1xcbi1cXHRcXHRcXHRpZiAoYW5vbl9leGNsdXNpdmUgXFx1MDAyNlxcdTAwMjZcXG4tXFx0XFx0XFx0ICAgIGZvbGlvX3RyeV9zaGFyZV9hbm9uX3JtYXBfcHRlKGZvbGlvLCBzdWJwYWdlKSkge1xcbi1cXHRcXHRcXHRcXHRmb2xpb19wdXRfc3dhcChmb2xpbywgc3VicGFnZSk7XFxuLVxcdFxcdFxcdFxcdHNldF9wdGVfYXQobW0sIGFkZHJlc3MsIHB2bXcucHRlLCBwdGV2YWwpO1xcbi1cXHRcXHRcXHRcXHRnb3RvIHdhbGtfYWJvcnQ7XFxuLVxcdFxcdFxcdH1cXG4tXFx0XFx0XFx0bW1fcHJlcGFyZV9mb3Jfc3dhcF9lbnRyaWVzKG1tKTtcXG4tXFx0XFx0XFx0ZGVjX21tX2NvdW50ZXIobW0sIE1NX0FOT05QQUdFUyk7XFxuLVxcdFxcdFxcdGluY19tbV9jb3VudGVyKG1tLCBNTV9TV0FQRU5UUyk7XFxuLVxcdFxcdFxcdHN3cF9wdGUgPSBzd3BfZW50cnlfdG9fcHRlKGVudHJ5KTtcXG4tXFx0XFx0XFx0aWYgKGFub25fZXhjbHVzaXZlKVxcbi1cXHRcXHRcXHRcXHRzd3BfcHRlID0gcHRlX3N3cF9ta2V4Y2x1c2l2ZShzd3BfcHRlKTtcXG4tXFx0XFx0XFx0aWYgKGxpa2VseShwdGVfcHJlc2VudChwdGV2YWwpKSkge1xcbi1cXHRcXHRcXHRcXHRpZiAocHRlX3NvZnRfZGlydHkocHRldmFsKSlcXG4tXFx0XFx0XFx0XFx0XFx0c3dwX3B0ZSA9IHB0ZV9zd3BfbWtzb2Z0X2RpcnR5KHN3cF9wdGUpO1xcbi1cXHRcXHRcXHRcXHRpZiAocHRlX3VmZmRfd3AocHRldmFsKSlcXG4tXFx0XFx0XFx0XFx0XFx0c3dwX3B0ZSA9IHB0ZV9zd3BfbWt1ZmZkX3dwKHN3cF9wdGUpO1xcbi1cXHRcXHRcXHR9IGVsc2Uge1xcbi1cXHRcXHRcXHRcXHRpZiAocHRlX3N3cF9zb2Z0X2RpcnR5KHB0ZXZhbCkpXFxuLVxcdFxcdFxcdFxcdFxcdHN3cF9wdGUgPSBwdGVfc3dwX21rc29mdF9kaXJ0eShzd3BfcHRlKTtcXG4tXFx0XFx0XFx0XFx0aWYgKHB0ZV9zd3BfdWZmZF93cChwdGV2YWwpKVxcbi1cXHRcXHRcXHRcXHRcXHRzd3BfcHRlID0gcHRlX3N3cF9ta3VmZmRfd3Aoc3dwX3B0ZSk7XFxuLVxcdFxcdFxcdH1cXG4tXFx0XFx0XFx0c2V0X3B0ZV9hdChtbSwgYWRkcmVzcywgcHZtdy5wdGUsIHN3cF9wdGUpO1xcbitcXHRcXHRcXHRnb3RvIGZpbmlzaF91bm1hcDtcXG4gXFx0XFx0fSBlbHNlIHtcXG4gXFx0XFx0XFx0LypcXG4gXFx0XFx0XFx0ICogVGhpcyBpcyBhIGxvY2tlZCBmaWxlLWJhY2tlZCBmb2xpbyxcXG5AQCAtMjM0MCwxMiArMjQwNCw4IEBAIHN0YXRpYyBib29sIHRyeV90b191bm1hcF9vbmUoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuIFxcdFxcdFxcdCAqL1xcbiBcXHRcXHRcXHRhZGRfbW1fY291bnRlcihtbSwgbW1fY291bnRlcl9maWxlKGZvbGlvKSwgLW5yX3BhZ2VzKTtcXG4gXFx0XFx0fVxcbi1kaXNjYXJkOlxcbi1cXHRcXHRpZiAodW5saWtlbHkoZm9saW9fdGVzdF9odWdldGxiKGZvbGlvKSkpIHtcXG4tXFx0XFx0XFx0aHVnZXRsYl9yZW1vdmVfcm1hcChmb2xpbyk7XFxuLVxcdFxcdH0gZWxzZSB7XFxuLVxcdFxcdFxcdGZvbGlvX3JlbW92ZV9ybWFwX3B0ZXMoZm9saW8sIHN1YnBhZ2UsIG5yX3BhZ2VzLCB2bWEpO1xcbi1cXHRcXHR9XFxuK2ZpbmlzaF91bm1hcDpcXG4rXFx0XFx0Zm9saW9fcmVtb3ZlX3JtYXBfcHRlcyhmb2xpbywgc3VicGFnZSwgbnJfcGFnZXMsIHZtYSk7XFxuIFxcdFxcdGlmICh2bWEtXFx1MDAzZXZtX2ZsYWdzIFxcdTAwMjYgVk1fTE9DS0VEKVxcbiBcXHRcXHRcXHRtbG9ja19kcmFpbl9sb2NhbCgpO1xcbiBcXHRcXHRmb2xpb19wdXRfcmVmcyhmb2xpbywgbnJfcGFnZXMpO1xcbkBAIC0yMzkzLDcgKzI0NTMsOCBAQCBzdGF0aWMgaW50IGZvbGlvX25vdF9tYXBwZWQoc3RydWN0IGZvbGlvICpmb2xpbylcXG4gdm9pZCB0cnlfdG9fdW5tYXAoc3RydWN0IGZvbGlvICpmb2xpbywgZW51bSB0dHVfZmxhZ3MgZmxhZ3MpXFxuIHtcXG4gXFx0c3RydWN0IHJtYXBfd2Fsa19jb250cm9sIHJ3YyA9IHtcXG4tXFx0XFx0LnJtYXBfb25lID0gdHJ5X3RvX3VubWFwX29uZSxcXG4rXFx0XFx0LnJtYXBfb25lID0gZm9saW9fdGVzdF9odWdldGxiKGZvbGlvKSA/XFxuK1xcdFxcdFxcdFxcdHRyeV90b191bm1hcF9odWdldGxiX29uZSA6IHRyeV90b191bm1hcF9vbmUsXFxuIFxcdFxcdC5hcmcgPSAodm9pZCAqKWZsYWdzLFxcbiBcXHRcXHQuZG9uZSA9IGZvbGlvX25vdF9tYXBwZWQsXFxuIFxcdFxcdC5hbm9uX2xvY2sgPSBmb2xpb19sb2NrX2Fub25fdm1hX3JlYWQsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA3VDIwOjM3OjQ2Ljg3NzYwOTEyOFoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTYwMjMxNjMyOTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSFVHRVRMQkZTXCIsXG4gICAgXCJTV0FQXCIsXG4gICAgXCJNRU1PUllfRkFJTFVSRVwiLFxuICAgIFwiSFdQT0lTT05fSU5KRUNUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidHJ5X3RvX3VubWFwX2h1Z2V0bGJfb25lXCIsXG4gICAgXCJ0dHVfYW5vbl9mb2xpb1wiLFxuICAgIFwidHR1X2Fub25fbGF6eWZyZWVfZm9saW9cIixcbiAgICBcInR0dV9hbm9uX3N3YXBiYWNrZWRfZm9saW9cIixcbiAgICBcInRyeV90b191bm1hcF9vbmVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZWZhY3RvcnMgdGhlIHVubWFwcGluZyBsb2dpYyBpbiBtbS9ybWFwLmMgYnkgZXh0cmFjdGluZyBodWdldGxiIGFuZCBhbm9ueW1vdXMgZm9saW8gdW5tYXBwaW5nIGludG8gc2VwYXJhdGUgZnVuY3Rpb25zICh0cnlfdG9fdW5tYXBfaHVnZXRsYl9vbmUsIHR0dV9hbm9uX2ZvbGlvLCBldGMuKS4gSXQgbW9kaWZpZXMgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYyByZWxhdGVkIHRvIHJldmVyc2UgbWFwcGluZywgaHVnZSBwYWdlcywgYW5kIHN3YXAuIEZ1enppbmcgc2hvdWxkIGZvY3VzIG9uIHRoZXNlIG5ldyBmdW5jdGlvbnMgdG8gZW5zdXJlIG5vIHJlZ3Jlc3Npb25zIG9yIGJ1Z3Mgd2VyZSBpbnRyb2R1Y2VkIGR1cmluZyB0aGUgcmVmYWN0b3JpbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXRcbiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSxcbiAgIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgMWU4NGJjMGUwYzIwNmY5MTUwMDhhZDRjNzE5MDVjZWIyNzhiMWM1OFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgSnVsIDcgMjA6Mzc6NDQgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaCBiL2luY2x1ZGUvbGludXgvaHVnZXRsYi5oXG5pbmRleCA0MTE1MDc2ZTQ5MjJhZS4uYmY3ZTE2M2UzNzc5ZDggMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaFxuKysrIGIvaW5jbHVkZS9saW51eC9odWdldGxiLmhcbkBAIC0xMjcxLDYgKzEyNzEsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgaHVnZXRsYl9jb3VudF9zdWIobG9uZyBsLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSlcbiB9XG4gXG4gcHRlX3QgaHVnZV9wdGVwX2dldChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLCBwdGVfdCAqcHRlcCk7XG4rdW5zaWduZWQgbG9uZyBodWdlX3B0ZV9kaXJ0eShwdGVfdCBwdGUpO1xuIFxuIHN0YXRpYyBpbmxpbmUgcHRlX3QgaHVnZV9wdGVwX2NsZWFyX2ZsdXNoKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuIFx0XHRcdFx0XHQgIHVuc2lnbmVkIGxvbmcgYWRkciwgcHRlX3QgKnB0ZXApXG5kaWZmIC0tZ2l0IGEvbW0vcm1hcC5jIGIvbW0vcm1hcC5jXG5pbmRleCA5OTM5NDAwZTc3Yzc5YS4uZjAyMWVjZDUxYTRhMmUgMTAwNjQ0XG4tLS0gYS9tbS9ybWFwLmNcbisrKyBiL21tL3JtYXAuY1xuQEAgLTE5NzgsNiArMTk3OCwyMzMgQEAgc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgZm9saW9fdW5tYXBfcHRlX2JhdGNoKHN0cnVjdCBmb2xpbyAqZm9saW8sXG4gXHRcdFx0XHQgICAgIEZQQl9SRVNQRUNUX1dSSVRFIHwgRlBCX1JFU1BFQ1RfU09GVF9ESVJUWSk7XG4gfVxuIFxuK3N0YXRpYyBib29sIHRyeV90b191bm1hcF9odWdldGxiX29uZShzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuK1x0XHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyZXNzLCB2b2lkICphcmcpXG4re1xuK1x0REVGSU5FX0ZPTElPX1ZNQV9XQUxLKHB2bXcsIGZvbGlvLCB2bWEsIGFkZHJlc3MsIDApO1xuK1x0c3RydWN0IG1tdV9ub3RpZmllcl9yYW5nZSByYW5nZTtcbitcdGVudW0gdHR1X2ZsYWdzIGZsYWdzID0gKGVudW0gdHR1X2ZsYWdzKShsb25nKWFyZztcbitcdHN0cnVjdCBtbV9zdHJ1Y3QgKm1tID0gdm1hLVx1MDAzZXZtX21tO1xuK1x0Y29uc3QgdW5zaWduZWQgbG9uZyBoc3ogPSBodWdlX3BhZ2Vfc2l6ZShoc3RhdGVfdm1hKHZtYSkpO1xuK1x0Ym9vbCByZXQgPSB0cnVlO1xuK1x0cHRlX3QgcHRldmFsO1xuK1xuK1x0LypcbitcdCAqIFRoZSB0cnlfdG9fdW5tYXAoKSBpcyBvbmx5IHBhc3NlZCBhIGh1Z2V0bGIgZm9saW8gaW4gdGhlIGNhc2VcbitcdCAqIHdoZXJlIHRoZSBodWdldGxiIGZvbGlvIGlzIHBvaXNvbmVkLlxuK1x0ICovXG4rXHRWTV9XQVJOX09OX0ZPTElPKCFmb2xpb190ZXN0X2h3cG9pc29uKGZvbGlvKSwgZm9saW8pO1xuK1x0Vk1fV0FSTl9PTl9PTkNFKCEoZmxhZ3MgXHUwMDI2IFRUVV9IV1BPSVNPTikpO1xuK1xuK1x0cmFuZ2UuZW5kID0gdm1hX2FkZHJlc3NfZW5kKFx1MDAyNnB2bXcpO1xuK1x0bW11X25vdGlmaWVyX3JhbmdlX2luaXQoXHUwMDI2cmFuZ2UsIE1NVV9OT1RJRllfQ0xFQVIsIDAsIHZtYS1cdTAwM2V2bV9tbSxcbitcdFx0XHRcdGFkZHJlc3MsIHJhbmdlLmVuZCk7XG4rXHRhZGp1c3RfcmFuZ2VfaWZfcG1kX3NoYXJpbmdfcG9zc2libGUodm1hLCBcdTAwMjZyYW5nZS5zdGFydCwgXHUwMDI2cmFuZ2UuZW5kKTtcbitcdG1tdV9ub3RpZmllcl9pbnZhbGlkYXRlX3JhbmdlX3N0YXJ0KFx1MDAyNnJhbmdlKTtcbitcbitcdC8qIFRoZXJlIGlzIG9ubHkgYSBzaW5nbGUgbWFwcGluZyBpbiBhIFZNQS4gKi9cbitcdGlmICghcGFnZV92bWFfbWFwcGVkX3dhbGsoXHUwMDI2cHZtdykpXG4rXHRcdGdvdG8gcmFuZ2VfZW5kO1xuK1xuK1x0YWRkcmVzcyA9IHB2bXcuYWRkcmVzcztcbitcdHB0ZXZhbCA9IGh1Z2VfcHRlcF9nZXQobW0sIGFkZHJlc3MsIHB2bXcucHRlKTtcbitcdFZNX1dBUk5fT05fT05DRSghcHRlX3ByZXNlbnQocHRldmFsKSk7XG4rXHRWTV9XQVJOX09OX09OQ0UocHRlX3BmbihwdGV2YWwpICE9IGZvbGlvX3Bmbihmb2xpbykpO1xuK1xuK1x0LypcbitcdCAqIGh1Z2VfcG1kX3Vuc2hhcmUgbWF5IHVubWFwIGFuIGVudGlyZSBQTUQgcGFnZS4gVGhlcmUgaXMgbm8gd2F5IG9mXG4rXHQgKiBrbm93aW5nIGV4YWN0bHkgd2hpY2ggUE1EcyBtYXkgYmUgY2FjaGVkIGZvciB0aGlzIG1tLCBzbyB3ZSBtdXN0XG4rXHQgKiBmbHVzaCB0aGVtIGFsbC4gc3RhcnQvZW5kIHdlcmUgYWxyZWFkeSBhZGp1c3RlZCBhYm92ZSB0byBjb3ZlciB0aGlzXG4rXHQgKiByYW5nZS5cbitcdCAqL1xuK1x0Zmx1c2hfY2FjaGVfcmFuZ2Uodm1hLCByYW5nZS5zdGFydCwgcmFuZ2UuZW5kKTtcbitcbitcdC8qXG4rXHQgKiBUbyBjYWxsIGh1Z2VfcG1kX3Vuc2hhcmUsIGlfbW1hcF9yd3NlbSBtdXN0IGJlIGhlbGQgaW4gd3JpdGUgbW9kZS5cbitcdCAqIENhbGxlciBuZWVkcyB0byBleHBsaWNpdGx5IGRvIHRoaXMgb3V0c2lkZSBybWFwIHJvdXRpbmVzLlxuK1x0ICpcbitcdCAqIFdlIGFsc28gbXVzdCBob2xkIGh1Z2V0bGIgdm1hX2xvY2sgaW4gd3JpdGUgbW9kZS4gTG9jayBvcmRlciBkaWN0YXRlc1xuK1x0ICogYWNxdWlyaW5nIHZtYV9sb2NrIEJFRk9SRSBpX21tYXBfcndzZW0uIFdlIGNhbiBvbmx5IHRyeSBsb2NrIGhlcmUgYW5kXG4rXHQgKiBmYWlsIGlmIHVuc3VjY2Vzc2Z1bC5cbitcdCAqL1xuK1x0aWYgKCFmb2xpb190ZXN0X2Fub24oZm9saW8pKSB7XG4rXHRcdHN0cnVjdCBtbXVfZ2F0aGVyIHRsYjtcbitcbitcdFx0Vk1fV0FSTl9PTighKGZsYWdzIFx1MDAyNiBUVFVfUk1BUF9MT0NLRUQpKTtcbitcdFx0aWYgKCFodWdldGxiX3ZtYV90cnlsb2NrX3dyaXRlKHZtYSkpIHtcbitcdFx0XHRyZXQgPSBmYWxzZTtcbitcdFx0XHRnb3RvIHdhbGtfZG9uZTtcbitcdFx0fVxuK1xuK1x0XHR0bGJfZ2F0aGVyX21tdV92bWEoXHUwMDI2dGxiLCB2bWEpO1xuK1x0XHRpZiAoaHVnZV9wbWRfdW5zaGFyZShcdTAwMjZ0bGIsIHZtYSwgYWRkcmVzcywgcHZtdy5wdGUpKSB7XG4rXHRcdFx0aHVnZXRsYl92bWFfdW5sb2NrX3dyaXRlKHZtYSk7XG4rXHRcdFx0aHVnZV9wbWRfdW5zaGFyZV9mbHVzaChcdTAwMjZ0bGIsIHZtYSk7XG4rXHRcdFx0dGxiX2ZpbmlzaF9tbXUoXHUwMDI2dGxiKTtcbitcdFx0XHQvKlxuK1x0XHRcdCAqIFRoZSBQTUQgdGFibGUgd2FzIHVubWFwcGVkLCBjb25zZXF1ZW50bHkgdW5tYXBwaW5nXG4rXHRcdFx0ICogdGhlIGZvbGlvLlxuK1x0XHRcdCAqL1xuK1x0XHRcdGdvdG8gd2Fsa19kb25lO1xuK1x0XHR9XG4rXHRcdGh1Z2V0bGJfdm1hX3VubG9ja193cml0ZSh2bWEpO1xuK1x0XHR0bGJfZmluaXNoX21tdShcdTAwMjZ0bGIpO1xuK1x0fVxuK1x0cHRldmFsID0gaHVnZV9wdGVwX2NsZWFyX2ZsdXNoKHZtYSwgYWRkcmVzcywgcHZtdy5wdGUpO1xuK1x0aWYgKGh1Z2VfcHRlX2RpcnR5KHB0ZXZhbCkpXG4rXHRcdGZvbGlvX21hcmtfZGlydHkoZm9saW8pO1xuK1xuK1x0cHRldmFsID0gc3dwX2VudHJ5X3RvX3B0ZShtYWtlX2h3cG9pc29uX2VudHJ5KGZvbGlvX3BhZ2UoZm9saW8sIDApKSk7XG4rXHRodWdldGxiX2NvdW50X3N1Yihmb2xpb19ucl9wYWdlcyhmb2xpbyksIG1tKTtcbitcdHNldF9odWdlX3B0ZV9hdChtbSwgYWRkcmVzcywgcHZtdy5wdGUsIHB0ZXZhbCwgaHN6KTtcbitcdGh1Z2V0bGJfcmVtb3ZlX3JtYXAoZm9saW8pO1xuK1x0Zm9saW9fcHV0X3JlZnMoZm9saW8sIDEpO1xuK1xuK3dhbGtfZG9uZTpcbitcdHBhZ2Vfdm1hX21hcHBlZF93YWxrX2RvbmUoXHUwMDI2cHZtdyk7XG4rcmFuZ2VfZW5kOlxuK1x0bW11X25vdGlmaWVyX2ludmFsaWRhdGVfcmFuZ2VfZW5kKFx1MDAyNnJhbmdlKTtcbitcdHJldHVybiByZXQ7XG4rfVxuK1xuK3N0YXRpYyBpbmxpbmUgYm9vbCB0dHVfYW5vbl9sYXp5ZnJlZV9mb2xpbyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbitcdFx0c3RydWN0IGZvbGlvICpmb2xpbylcbit7XG4rXHRpbnQgcmVmX2NvdW50LCBtYXBfY291bnQ7XG4rXG4rXHQvKlxuK1x0ICogU3luY2hyb25pemUgd2l0aCBndXBfcHRlX3JhbmdlKCk6XG4rXHQgKiAtIGNsZWFyIFBURTsgYmFycmllcjsgcmVhZCByZWZjb3VudFxuK1x0ICogLSBpbmMgcmVmY291bnQ7IGJhcnJpZXI7IHJlYWQgUFRFXG4rXHQgKi9cbitcdHNtcF9tYigpO1xuK1xuK1x0cmVmX2NvdW50ID0gZm9saW9fcmVmX2NvdW50KGZvbGlvKTtcbitcdG1hcF9jb3VudCA9IGZvbGlvX21hcGNvdW50KGZvbGlvKTtcbitcbitcdC8qXG4rXHQgKiBPcmRlciByZWFkcyBmb3IgcGFnZSByZWZjb3VudCBhbmQgZGlydHkgZmxhZ1xuK1x0ICogKHNlZSBjb21tZW50cyBpbiBfX3JlbW92ZV9tYXBwaW5nKCkpLlxuK1x0ICovXG4rXHRzbXBfcm1iKCk7XG4rXG4rXHRpZiAoZm9saW9fdGVzdF9kaXJ0eShmb2xpbykgXHUwMDI2XHUwMDI2ICEodm1hLVx1MDAzZXZtX2ZsYWdzIFx1MDAyNiBWTV9EUk9QUEFCTEUpKSB7XG4rXHRcdC8qXG4rXHRcdCAqIHJlZGlydGllZCBlaXRoZXIgdXNpbmcgdGhlIHBhZ2UgdGFibGUgb3IgYSBwcmV2aW91c2x5XG4rXHRcdCAqIG9idGFpbmVkIEdVUCByZWZlcmVuY2UuXG4rXHRcdCAqL1xuK1x0XHRmb2xpb19zZXRfc3dhcGJhY2tlZChmb2xpbyk7XG4rXHRcdHJldHVybiBmYWxzZTtcbitcdH1cbitcbitcdGlmIChyZWZfY291bnQgIT0gMSArIG1hcF9jb3VudCkge1xuK1x0XHQvKlxuK1x0XHQgKiBBZGRpdGlvbmFsIHJlZmVyZW5jZS4gQ291bGQgYmUgYSBHVVAgcmVmZXJlbmNlIG9yIGFueVxuK1x0XHQgKiBzcGVjdWxhdGl2ZSByZWZlcmVuY2UuIEdVUCB1c2VycyBtdXN0IG1hcmsgdGhlIGZvbGlvXG4rXHRcdCAqIGRpcnR5IGlmIHRoZXJlIHdhcyBhIG1vZGlmaWNhdGlvbi4gVGhpcyBmb2xpbyBjYW5ub3QgYmVcbitcdFx0ICogcmVjbGFpbWVkIHJpZ2h0IG5vdyBlaXRoZXIgd2F5LCBzbyBhY3QganVzdCBsaWtlIG5vdGhpbmdcbitcdFx0ICogaGFwcGVuZWQuXG4rXHRcdCAqIFdlJ2xsIGNvbWUgYmFjayBoZXJlIGxhdGVyIGFuZCBkZXRlY3QgaWYgdGhlIGZvbGlvIHdhc1xuK1x0XHQgKiBkaXJ0aWVkIHdoZW4gdGhlIGFkZGl0aW9uYWwgcmVmZXJlbmNlIGlzIGdvbmUuXG4rXHRcdCAqL1xuK1x0XHRyZXR1cm4gZmFsc2U7XG4rXHR9XG4rXG4rXHRyZXR1cm4gdHJ1ZTtcbit9XG4rXG4rc3RhdGljIGlubGluZSB2b2lkIHNldF9zd3BfcHRlX2F0KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MsXG4rXHRcdHB0ZV90ICpwdGVwLCBzd3BfZW50cnlfdCBlbnRyeSwgcHRlX3QgcHRldmFsLCBib29sIGFub25fZXhjbHVzaXZlKVxuK3tcbitcdHB0ZV90IHN3cF9wdGUgPSBzd3BfZW50cnlfdG9fcHRlKGVudHJ5KTtcbitcbitcdGlmIChhbm9uX2V4Y2x1c2l2ZSlcbitcdFx0c3dwX3B0ZSA9IHB0ZV9zd3BfbWtleGNsdXNpdmUoc3dwX3B0ZSk7XG4rXG4rXHRpZiAobGlrZWx5KHB0ZV9wcmVzZW50KHB0ZXZhbCkpKSB7XG4rXHRcdGlmIChwdGVfc29mdF9kaXJ0eShwdGV2YWwpKVxuK1x0XHRcdHN3cF9wdGUgPSBwdGVfc3dwX21rc29mdF9kaXJ0eShzd3BfcHRlKTtcbitcdFx0aWYgKHB0ZV91ZmZkX3dwKHB0ZXZhbCkpXG4rXHRcdFx0c3dwX3B0ZSA9IHB0ZV9zd3BfbWt1ZmZkX3dwKHN3cF9wdGUpO1xuK1x0fSBlbHNlIHtcbitcdFx0LyogRGV2aWNlLWV4Y2x1c2l2ZSBlbnRyeSAqL1xuK1x0XHRpZiAocHRlX3N3cF9zb2Z0X2RpcnR5KHB0ZXZhbCkpXG4rXHRcdFx0c3dwX3B0ZSA9IHB0ZV9zd3BfbWtzb2Z0X2RpcnR5KHN3cF9wdGUpO1xuK1x0XHRpZiAocHRlX3N3cF91ZmZkX3dwKHB0ZXZhbCkpXG4rXHRcdFx0c3dwX3B0ZSA9IHB0ZV9zd3BfbWt1ZmZkX3dwKHN3cF9wdGUpO1xuK1x0fVxuK1xuK1x0c2V0X3B0ZV9hdChtbSwgYWRkcmVzcywgcHRlcCwgc3dwX3B0ZSk7XG4rfVxuK1xuK3N0YXRpYyBpbmxpbmUgYm9vbCB0dHVfYW5vbl9zd2FwYmFja2VkX2ZvbGlvKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuK1x0XHRzdHJ1Y3QgcGFnZSAqc3VicGFnZSwgdW5zaWduZWQgbG9uZyBhZGRyZXNzLCBwdGVfdCAqcHRlcCxcbitcdFx0cHRlX3QgcHRldmFsKVxuK3tcbitcdGJvb2wgYW5vbl9leGNsdXNpdmUgPSBmb2xpb190ZXN0X2Fub24oZm9saW8pIFx1MDAyNlx1MDAyNiBQYWdlQW5vbkV4Y2x1c2l2ZShzdWJwYWdlKTtcbitcdHN3cF9lbnRyeV90IGVudHJ5ID0gcGFnZV9zd2FwX2VudHJ5KHN1YnBhZ2UpO1xuK1x0c3RydWN0IG1tX3N0cnVjdCAqbW0gPSB2bWEtXHUwMDNldm1fbW07XG4rXG4rXHRpZiAoZm9saW9fZHVwX3N3YXAoZm9saW8sIHN1YnBhZ2UpIFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gZmFsc2U7XG4rXG4rXHQvKlxuK1x0ICogYXJjaF91bm1hcF9vbmUoKSBpcyBleHBlY3RlZCB0byBiZSBhIE5PUCBvblxuK1x0ICogYXJjaGl0ZWN0dXJlcyB3aGVyZSB3ZSBjb3VsZCBoYXZlIFBGTiBzd2FwIFBURXMsXG4rXHQgKiBzbyB3ZSdsbCBub3QgY2hlY2svY2FyZS5cbitcdCAqL1xuK1x0aWYgKGFyY2hfdW5tYXBfb25lKG1tLCB2bWEsIGFkZHJlc3MsIHB0ZXZhbCkgXHUwMDNjIDApIHtcbitcdFx0Zm9saW9fcHV0X3N3YXAoZm9saW8sIHN1YnBhZ2UpO1xuK1x0XHRyZXR1cm4gZmFsc2U7XG4rXHR9XG4rXG4rXHQvKiBTZWUgZm9saW9fdHJ5X3NoYXJlX2Fub25fcm1hcCgpOiBjbGVhciBQVEUgZmlyc3QuICovXG4rXHRpZiAoYW5vbl9leGNsdXNpdmUgXHUwMDI2XHUwMDI2IGZvbGlvX3RyeV9zaGFyZV9hbm9uX3JtYXBfcHRlKGZvbGlvLCBzdWJwYWdlKSkge1xuK1x0XHRmb2xpb19wdXRfc3dhcChmb2xpbywgc3VicGFnZSk7XG4rXHRcdHJldHVybiBmYWxzZTtcbitcdH1cbitcbitcdG1tX3ByZXBhcmVfZm9yX3N3YXBfZW50cmllcyhtbSk7XG4rXHRkZWNfbW1fY291bnRlcihtbSwgTU1fQU5PTlBBR0VTKTtcbitcdGluY19tbV9jb3VudGVyKG1tLCBNTV9TV0FQRU5UUyk7XG4rXHRzZXRfc3dwX3B0ZV9hdChtbSwgYWRkcmVzcywgcHRlcCwgZW50cnksIHB0ZXZhbCwgYW5vbl9leGNsdXNpdmUpO1xuK1x0cmV0dXJuIHRydWU7XG4rfVxuK1xuK3N0YXRpYyBpbmxpbmUgYm9vbCB0dHVfYW5vbl9mb2xpbyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgc3RydWN0IGZvbGlvICpmb2xpbyxcbitcdFx0c3RydWN0IHBhZ2UgKnN1YnBhZ2UsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcywgcHRlX3QgKnB0ZXAsXG4rXHRcdHB0ZV90IHB0ZXZhbCwgdW5zaWduZWQgbG9uZyBucl9wYWdlcylcbit7XG4rXHRzdHJ1Y3QgbW1fc3RydWN0ICptbSA9IHZtYS1cdTAwM2V2bV9tbTtcbitcdGJvb2wgcmV0O1xuK1xuK1x0LypcbitcdCAqIFN0b3JlIHRoZSBzd2FwIGxvY2F0aW9uIGluIHRoZSBwdGUuXG4rXHQgKiBTZWUgaGFuZGxlX3B0ZV9mYXVsdCgpIC4uLlxuK1x0ICovXG4rXHRpZiAodW5saWtlbHkoZm9saW9fdGVzdF9zd2FwYmFja2VkKGZvbGlvKSAhPVxuK1x0XHRcdGZvbGlvX3Rlc3Rfc3dhcGNhY2hlKGZvbGlvKSkpIHtcbitcdFx0V0FSTl9PTl9PTkNFKDEpO1xuK1x0XHRyZXR1cm4gZmFsc2U7XG4rXHR9XG4rXG4rXHQvKiBNQURWX0ZSRUUgcGFnZSBjaGVjayAqL1xuK1x0aWYgKCFmb2xpb190ZXN0X3N3YXBiYWNrZWQoZm9saW8pKSB7XG4rXHRcdHJldCA9IHR0dV9hbm9uX2xhenlmcmVlX2ZvbGlvKHZtYSwgZm9saW8pO1xuK1x0XHRpZiAocmV0KVxuK1x0XHRcdGFkZF9tbV9jb3VudGVyKG1tLCBNTV9BTk9OUEFHRVMsIC1ucl9wYWdlcyk7XG4rXHR9IGVsc2Uge1xuK1x0XHQvKiBucl9wYWdlcyBcdTAwM2UgMSBub3Qgc3VwcG9ydGVkIHlldCAqL1xuK1x0XHRyZXQgPSB0dHVfYW5vbl9zd2FwYmFja2VkX2ZvbGlvKHZtYSwgZm9saW8sIHN1YnBhZ2UsIGFkZHJlc3MsXG4rXHRcdFx0XHRcdFx0cHRlcCwgcHRldmFsKTtcbitcdH1cbitcbitcdGlmICghcmV0KVxuK1x0XHRzZXRfcHRlcyhtbSwgYWRkcmVzcywgcHRlcCwgcHRldmFsLCBucl9wYWdlcyk7XG4rXG4rXHRyZXR1cm4gcmV0O1xuK31cbitcbiAvKlxuICAqIEBhcmc6IGVudW0gdHR1X2ZsYWdzIHdpbGwgYmUgcGFzc2VkIHRvIHRoaXMgYXJndW1lbnRcbiAgKi9cbkBAIC0xOTg2LDE0ICsyMjEzLDEzIEBAIHN0YXRpYyBib29sIHRyeV90b191bm1hcF9vbmUoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4ge1xuIFx0c3RydWN0IG1tX3N0cnVjdCAqbW0gPSB2bWEtXHUwMDNldm1fbW07XG4gXHRERUZJTkVfRk9MSU9fVk1BX1dBTEsocHZtdywgZm9saW8sIHZtYSwgYWRkcmVzcywgMCk7XG4tXHRib29sIGFub25fZXhjbHVzaXZlLCByZXQgPSB0cnVlO1xuK1x0Ym9vbCByZXQgPSB0cnVlO1xuIFx0cHRlX3QgcHRldmFsO1xuIFx0c3RydWN0IHBhZ2UgKnN1YnBhZ2U7XG4gXHRzdHJ1Y3QgbW11X25vdGlmaWVyX3JhbmdlIHJhbmdlO1xuIFx0ZW51bSB0dHVfZmxhZ3MgZmxhZ3MgPSAoZW51bSB0dHVfZmxhZ3MpKGxvbmcpYXJnO1xuIFx0dW5zaWduZWQgbG9uZyBucl9wYWdlcyA9IDEsIGVuZF9hZGRyO1xuIFx0dW5zaWduZWQgbG9uZyBwZm47XG4tXHR1bnNpZ25lZCBsb25nIGhzeiA9IDA7XG4gXHRpbnQgcHRlcyA9IDA7XG4gXG4gXHQvKlxuQEAgLTIwMDcsOCArMjIzMyw2IEBAIHN0YXRpYyBib29sIHRyeV90b191bm1hcF9vbmUoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4gXG4gXHQvKlxuIFx0ICogRm9yIFRIUCwgd2UgaGF2ZSB0byBhc3N1bWUgdGhlIHdvcnNlIGNhc2UgaWUgcG1kIGZvciBpbnZhbGlkYXRpb24uXG4tXHQgKiBGb3IgaHVnZXRsYiwgaXQgY291bGQgYmUgbXVjaCB3b3JzZSBpZiB3ZSBuZWVkIHRvIGRvIHB1ZFxuLVx0ICogaW52YWxpZGF0aW9uIGluIHRoZSBjYXNlIG9mIHBtZCBzaGFyaW5nLlxuIFx0ICpcbiBcdCAqIE5vdGUgdGhhdCB0aGUgZm9saW8gY2FuIG5vdCBiZSBmcmVlZCBpbiB0aGlzIGZ1bmN0aW9uIGFzIGNhbGwgb2ZcbiBcdCAqIHRyeV90b191bm1hcCgpIG11c3QgaG9sZCBhIHJlZmVyZW5jZSBvbiB0aGUgZm9saW8uXG5AQCAtMjAxNiwxNyArMjI0MCw2IEBAIHN0YXRpYyBib29sIHRyeV90b191bm1hcF9vbmUoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4gXHRyYW5nZS5lbmQgPSB2bWFfYWRkcmVzc19lbmQoXHUwMDI2cHZtdyk7XG4gXHRtbXVfbm90aWZpZXJfcmFuZ2VfaW5pdChcdTAwMjZyYW5nZSwgTU1VX05PVElGWV9DTEVBUiwgMCwgdm1hLVx1MDAzZXZtX21tLFxuIFx0XHRcdFx0YWRkcmVzcywgcmFuZ2UuZW5kKTtcbi1cdGlmIChmb2xpb190ZXN0X2h1Z2V0bGIoZm9saW8pKSB7XG4tXHRcdC8qXG4tXHRcdCAqIElmIHNoYXJpbmcgaXMgcG9zc2libGUsIHN0YXJ0IGFuZCBlbmQgd2lsbCBiZSBhZGp1c3RlZFxuLVx0XHQgKiBhY2NvcmRpbmdseS5cbi1cdFx0ICovXG4tXHRcdGFkanVzdF9yYW5nZV9pZl9wbWRfc2hhcmluZ19wb3NzaWJsZSh2bWEsIFx1MDAyNnJhbmdlLnN0YXJ0LFxuLVx0XHRcdFx0XHRcdCAgICAgXHUwMDI2cmFuZ2UuZW5kKTtcbi1cbi1cdFx0LyogV2UgbmVlZCB0aGUgaHVnZSBwYWdlIHNpemUgZm9yIHNldF9odWdlX3B0ZV9hdCgpICovXG4tXHRcdGhzeiA9IGh1Z2VfcGFnZV9zaXplKGhzdGF0ZV92bWEodm1hKSk7XG4tXHR9XG4gXHRtbXVfbm90aWZpZXJfaW52YWxpZGF0ZV9yYW5nZV9zdGFydChcdTAwMjZyYW5nZSk7XG4gXG4gXHR3aGlsZSAocGFnZV92bWFfbWFwcGVkX3dhbGsoXHUwMDI2cHZtdykpIHtcbkBAIC0yMTExLDY1ICsyMzI0LDExIEBAIHN0YXRpYyBib29sIHRyeV90b191bm1hcF9vbmUoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4gXHRcdFx0Y29uc3Qgc29mdGxlYWZfdCBlbnRyeSA9IHNvZnRsZWFmX2Zyb21fcHRlKHB0ZXZhbCk7XG4gXG4gXHRcdFx0cGZuID0gc29mdGxlYWZfdG9fcGZuKGVudHJ5KTtcbi1cdFx0XHRWTV9XQVJOX09OX0ZPTElPKGZvbGlvX3Rlc3RfaHVnZXRsYihmb2xpbyksIGZvbGlvKTtcbiBcdFx0fVxuIFxuIFx0XHRzdWJwYWdlID0gZm9saW9fcGFnZShmb2xpbywgcGZuIC0gZm9saW9fcGZuKGZvbGlvKSk7XG4tXHRcdGFub25fZXhjbHVzaXZlID0gZm9saW9fdGVzdF9hbm9uKGZvbGlvKSBcdTAwMjZcdTAwMjZcbi1cdFx0XHRcdCBQYWdlQW5vbkV4Y2x1c2l2ZShzdWJwYWdlKTtcbiBcbi1cdFx0aWYgKGZvbGlvX3Rlc3RfaHVnZXRsYihmb2xpbykpIHtcbi1cdFx0XHRib29sIGFub24gPSBmb2xpb190ZXN0X2Fub24oZm9saW8pO1xuLVxuLVx0XHRcdC8qXG4tXHRcdFx0ICogVGhlIHRyeV90b191bm1hcCgpIGlzIG9ubHkgcGFzc2VkIGEgaHVnZXRsYiBwYWdlXG4tXHRcdFx0ICogaW4gdGhlIGNhc2Ugd2hlcmUgdGhlIGh1Z2V0bGIgcGFnZSBpcyBwb2lzb25lZC5cbi1cdFx0XHQgKi9cbi1cdFx0XHRWTV9CVUdfT05fUEFHRSghUGFnZUhXUG9pc29uKHN1YnBhZ2UpLCBzdWJwYWdlKTtcbi1cdFx0XHQvKlxuLVx0XHRcdCAqIGh1Z2VfcG1kX3Vuc2hhcmUgbWF5IHVubWFwIGFuIGVudGlyZSBQTUQgcGFnZS5cbi1cdFx0XHQgKiBUaGVyZSBpcyBubyB3YXkgb2Yga25vd2luZyBleGFjdGx5IHdoaWNoIFBNRHMgbWF5XG4tXHRcdFx0ICogYmUgY2FjaGVkIGZvciB0aGlzIG1tLCBzbyB3ZSBtdXN0IGZsdXNoIHRoZW0gYWxsLlxuLVx0XHRcdCAqIHN0YXJ0L2VuZCB3ZXJlIGFscmVhZHkgYWRqdXN0ZWQgYWJvdmUgdG8gY292ZXIgdGhpc1xuLVx0XHRcdCAqIHJhbmdlLlxuLVx0XHRcdCAqL1xuLVx0XHRcdGZsdXNoX2NhY2hlX3JhbmdlKHZtYSwgcmFuZ2Uuc3RhcnQsIHJhbmdlLmVuZCk7XG4tXG4tXHRcdFx0Lypcbi1cdFx0XHQgKiBUbyBjYWxsIGh1Z2VfcG1kX3Vuc2hhcmUsIGlfbW1hcF9yd3NlbSBtdXN0IGJlXG4tXHRcdFx0ICogaGVsZCBpbiB3cml0ZSBtb2RlLiAgQ2FsbGVyIG5lZWRzIHRvIGV4cGxpY2l0bHlcbi1cdFx0XHQgKiBkbyB0aGlzIG91dHNpZGUgcm1hcCByb3V0aW5lcy5cbi1cdFx0XHQgKlxuLVx0XHRcdCAqIFdlIGFsc28gbXVzdCBob2xkIGh1Z2V0bGIgdm1hX2xvY2sgaW4gd3JpdGUgbW9kZS5cbi1cdFx0XHQgKiBMb2NrIG9yZGVyIGRpY3RhdGVzIGFjcXVpcmluZyB2bWFfbG9jayBCRUZPUkVcbi1cdFx0XHQgKiBpX21tYXBfcndzZW0uICBXZSBjYW4gb25seSB0cnkgbG9jayBoZXJlIGFuZCBmYWlsXG4tXHRcdFx0ICogaWYgdW5zdWNjZXNzZnVsLlxuLVx0XHRcdCAqL1xuLVx0XHRcdGlmICghYW5vbikge1xuLVx0XHRcdFx0c3RydWN0IG1tdV9nYXRoZXIgdGxiO1xuLVxuLVx0XHRcdFx0Vk1fQlVHX09OKCEoZmxhZ3MgXHUwMDI2IFRUVV9STUFQX0xPQ0tFRCkpO1xuLVx0XHRcdFx0aWYgKCFodWdldGxiX3ZtYV90cnlsb2NrX3dyaXRlKHZtYSkpXG4tXHRcdFx0XHRcdGdvdG8gd2Fsa19hYm9ydDtcbi1cbi1cdFx0XHRcdHRsYl9nYXRoZXJfbW11X3ZtYShcdTAwMjZ0bGIsIHZtYSk7XG4tXHRcdFx0XHRpZiAoaHVnZV9wbWRfdW5zaGFyZShcdTAwMjZ0bGIsIHZtYSwgYWRkcmVzcywgcHZtdy5wdGUpKSB7XG4tXHRcdFx0XHRcdGh1Z2V0bGJfdm1hX3VubG9ja193cml0ZSh2bWEpO1xuLVx0XHRcdFx0XHRodWdlX3BtZF91bnNoYXJlX2ZsdXNoKFx1MDAyNnRsYiwgdm1hKTtcbi1cdFx0XHRcdFx0dGxiX2ZpbmlzaF9tbXUoXHUwMDI2dGxiKTtcbi1cdFx0XHRcdFx0Lypcbi1cdFx0XHRcdFx0ICogVGhlIFBNRCB0YWJsZSB3YXMgdW5tYXBwZWQsXG4tXHRcdFx0XHRcdCAqIGNvbnNlcXVlbnRseSB1bm1hcHBpbmcgdGhlIGZvbGlvLlxuLVx0XHRcdFx0XHQgKi9cbi1cdFx0XHRcdFx0Z290byB3YWxrX2RvbmU7XG4tXHRcdFx0XHR9XG4tXHRcdFx0XHRodWdldGxiX3ZtYV91bmxvY2tfd3JpdGUodm1hKTtcbi1cdFx0XHRcdHRsYl9maW5pc2hfbW11KFx1MDAyNnRsYik7XG4tXHRcdFx0fVxuLVx0XHRcdHB0ZXZhbCA9IGh1Z2VfcHRlcF9jbGVhcl9mbHVzaCh2bWEsIGFkZHJlc3MsIHB2bXcucHRlKTtcbi1cdFx0XHRpZiAocHRlX2RpcnR5KHB0ZXZhbCkpXG4tXHRcdFx0XHRmb2xpb19tYXJrX2RpcnR5KGZvbGlvKTtcbi1cdFx0fSBlbHNlIGlmIChsaWtlbHkocHRlX3ByZXNlbnQocHRldmFsKSkpIHtcbitcdFx0aWYgKGxpa2VseShwdGVfcHJlc2VudChwdGV2YWwpKSkge1xuIFx0XHRcdG5yX3BhZ2VzID0gZm9saW9fdW5tYXBfcHRlX2JhdGNoKGZvbGlvLCBcdTAwMjZwdm13LCBmbGFncywgcHRldmFsKTtcbiBcdFx0XHRlbmRfYWRkciA9IGFkZHJlc3MgKyBucl9wYWdlcyAqIFBBR0VfU0laRTtcbiBcdFx0XHRmbHVzaF9jYWNoZV9yYW5nZSh2bWEsIGFkZHJlc3MsIGVuZF9hZGRyKTtcbkBAIC0yMjA0LDE2ICsyMzYzLDE0IEBAIHN0YXRpYyBib29sIHRyeV90b191bm1hcF9vbmUoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4gXHRcdC8qIFVwZGF0ZSBoaWdoIHdhdGVybWFyayBiZWZvcmUgd2UgbG93ZXIgcnNzICovXG4gXHRcdHVwZGF0ZV9oaXdhdGVyX3JzcyhtbSk7XG4gXG4tXHRcdGlmIChQYWdlSFdQb2lzb24oc3VicGFnZSkgXHUwMDI2XHUwMDI2IChmbGFncyBcdTAwMjYgVFRVX0hXUE9JU09OKSkge1xuK1x0XHQvKlxuK1x0XHQgKiBXaXRoIFRUVV9IV1BPSVNPTiwgd2Ugb25seSBleHBlY3Qgc21hbGwgZm9saW9zIG9yIGh1Z2V0bGJcbitcdFx0ICogZm9saW9zIGhlcmUgZm9yIG5vdy5cbitcdFx0ICovXG4rXHRcdGlmIChmb2xpb190ZXN0X2h3cG9pc29uKGZvbGlvKSBcdTAwMjZcdTAwMjYgKGZsYWdzIFx1MDAyNiBUVFVfSFdQT0lTT04pKSB7XG4gXHRcdFx0cHRldmFsID0gc3dwX2VudHJ5X3RvX3B0ZShtYWtlX2h3cG9pc29uX2VudHJ5KHN1YnBhZ2UpKTtcbi1cdFx0XHRpZiAoZm9saW9fdGVzdF9odWdldGxiKGZvbGlvKSkge1xuLVx0XHRcdFx0aHVnZXRsYl9jb3VudF9zdWIoZm9saW9fbnJfcGFnZXMoZm9saW8pLCBtbSk7XG4tXHRcdFx0XHRzZXRfaHVnZV9wdGVfYXQobW0sIGFkZHJlc3MsIHB2bXcucHRlLCBwdGV2YWwsXG4tXHRcdFx0XHRcdFx0aHN6KTtcbi1cdFx0XHR9IGVsc2Uge1xuLVx0XHRcdFx0ZGVjX21tX2NvdW50ZXIobW0sIG1tX2NvdW50ZXIoZm9saW8pKTtcbi1cdFx0XHRcdHNldF9wdGVfYXQobW0sIGFkZHJlc3MsIHB2bXcucHRlLCBwdGV2YWwpO1xuLVx0XHRcdH1cbitcdFx0XHRkZWNfbW1fY291bnRlcihtbSwgbW1fY291bnRlcihmb2xpbykpO1xuK1x0XHRcdHNldF9wdGVfYXQobW0sIGFkZHJlc3MsIHB2bXcucHRlLCBwdGV2YWwpO1xuIFx0XHR9IGVsc2UgaWYgKGxpa2VseShwdGVfcHJlc2VudChwdGV2YWwpKSBcdTAwMjZcdTAwMjYgcHRlX3VudXNlZChwdGV2YWwpIFx1MDAyNlx1MDAyNlxuIFx0XHRcdCAgICF1c2VyZmF1bHRmZF9hcm1lZCh2bWEpKSB7XG4gXHRcdFx0LypcbkBAIC0yMjI4LDEwNCArMjM4NSwxMSBAQCBzdGF0aWMgYm9vbCB0cnlfdG9fdW5tYXBfb25lKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuIFx0XHRcdCAqL1xuIFx0XHRcdGRlY19tbV9jb3VudGVyKG1tLCBtbV9jb3VudGVyKGZvbGlvKSk7XG4gXHRcdH0gZWxzZSBpZiAoZm9saW9fdGVzdF9hbm9uKGZvbGlvKSkge1xuLVx0XHRcdHN3cF9lbnRyeV90IGVudHJ5ID0gcGFnZV9zd2FwX2VudHJ5KHN1YnBhZ2UpO1xuLVx0XHRcdHB0ZV90IHN3cF9wdGU7XG4tXHRcdFx0Lypcbi1cdFx0XHQgKiBTdG9yZSB0aGUgc3dhcCBsb2NhdGlvbiBpbiB0aGUgcHRlLlxuLVx0XHRcdCAqIFNlZSBoYW5kbGVfcHRlX2ZhdWx0KCkgLi4uXG4tXHRcdFx0ICovXG4tXHRcdFx0aWYgKHVubGlrZWx5KGZvbGlvX3Rlc3Rfc3dhcGJhY2tlZChmb2xpbykgIT1cbi1cdFx0XHRcdFx0Zm9saW9fdGVzdF9zd2FwY2FjaGUoZm9saW8pKSkge1xuLVx0XHRcdFx0V0FSTl9PTl9PTkNFKDEpO1xuK1x0XHRcdGlmICghdHR1X2Fub25fZm9saW8odm1hLCBmb2xpbywgc3VicGFnZSwgYWRkcmVzcyxcbitcdFx0XHRcdFx0ICAgIHB2bXcucHRlLCBwdGV2YWwsIG5yX3BhZ2VzKSlcbiBcdFx0XHRcdGdvdG8gd2Fsa19hYm9ydDtcbi1cdFx0XHR9XG4tXG4tXHRcdFx0LyogTUFEVl9GUkVFIHBhZ2UgY2hlY2sgKi9cbi1cdFx0XHRpZiAoIWZvbGlvX3Rlc3Rfc3dhcGJhY2tlZChmb2xpbykpIHtcbi1cdFx0XHRcdGludCByZWZfY291bnQsIG1hcF9jb3VudDtcbi1cbi1cdFx0XHRcdC8qXG4tXHRcdFx0XHQgKiBTeW5jaHJvbml6ZSB3aXRoIGd1cF9wdGVfcmFuZ2UoKTpcbi1cdFx0XHRcdCAqIC0gY2xlYXIgUFRFOyBiYXJyaWVyOyByZWFkIHJlZmNvdW50XG4tXHRcdFx0XHQgKiAtIGluYyByZWZjb3VudDsgYmFycmllcjsgcmVhZCBQVEVcbi1cdFx0XHRcdCAqL1xuLVx0XHRcdFx0c21wX21iKCk7XG4gXG4tXHRcdFx0XHRyZWZfY291bnQgPSBmb2xpb19yZWZfY291bnQoZm9saW8pO1xuLVx0XHRcdFx0bWFwX2NvdW50ID0gZm9saW9fbWFwY291bnQoZm9saW8pO1xuLVxuLVx0XHRcdFx0Lypcbi1cdFx0XHRcdCAqIE9yZGVyIHJlYWRzIGZvciBwYWdlIHJlZmNvdW50IGFuZCBkaXJ0eSBmbGFnXG4tXHRcdFx0XHQgKiAoc2VlIGNvbW1lbnRzIGluIF9fcmVtb3ZlX21hcHBpbmcoKSkuXG4tXHRcdFx0XHQgKi9cbi1cdFx0XHRcdHNtcF9ybWIoKTtcbi1cbi1cdFx0XHRcdGlmIChmb2xpb190ZXN0X2RpcnR5KGZvbGlvKSBcdTAwMjZcdTAwMjYgISh2bWEtXHUwMDNldm1fZmxhZ3MgXHUwMDI2IFZNX0RST1BQQUJMRSkpIHtcbi1cdFx0XHRcdFx0Lypcbi1cdFx0XHRcdFx0ICogcmVkaXJ0aWVkIGVpdGhlciB1c2luZyB0aGUgcGFnZSB0YWJsZSBvciBhIHByZXZpb3VzbHlcbi1cdFx0XHRcdFx0ICogb2J0YWluZWQgR1VQIHJlZmVyZW5jZS5cbi1cdFx0XHRcdFx0ICovXG4tXHRcdFx0XHRcdHNldF9wdGVzKG1tLCBhZGRyZXNzLCBwdm13LnB0ZSwgcHRldmFsLCBucl9wYWdlcyk7XG4tXHRcdFx0XHRcdGZvbGlvX3NldF9zd2FwYmFja2VkKGZvbGlvKTtcbi1cdFx0XHRcdFx0Z290byB3YWxrX2Fib3J0O1xuLVx0XHRcdFx0fSBlbHNlIGlmIChyZWZfY291bnQgIT0gMSArIG1hcF9jb3VudCkge1xuLVx0XHRcdFx0XHQvKlxuLVx0XHRcdFx0XHQgKiBBZGRpdGlvbmFsIHJlZmVyZW5jZS4gQ291bGQgYmUgYSBHVVAgcmVmZXJlbmNlIG9yIGFueVxuLVx0XHRcdFx0XHQgKiBzcGVjdWxhdGl2ZSByZWZlcmVuY2UuIEdVUCB1c2VycyBtdXN0IG1hcmsgdGhlIGZvbGlvXG4tXHRcdFx0XHRcdCAqIGRpcnR5IGlmIHRoZXJlIHdhcyBhIG1vZGlmaWNhdGlvbi4gVGhpcyBmb2xpbyBjYW5ub3QgYmVcbi1cdFx0XHRcdFx0ICogcmVjbGFpbWVkIHJpZ2h0IG5vdyBlaXRoZXIgd2F5LCBzbyBhY3QganVzdCBsaWtlIG5vdGhpbmdcbi1cdFx0XHRcdFx0ICogaGFwcGVuZWQuXG4tXHRcdFx0XHRcdCAqIFdlJ2xsIGNvbWUgYmFjayBoZXJlIGxhdGVyIGFuZCBkZXRlY3QgaWYgdGhlIGZvbGlvIHdhc1xuLVx0XHRcdFx0XHQgKiBkaXJ0aWVkIHdoZW4gdGhlIGFkZGl0aW9uYWwgcmVmZXJlbmNlIGlzIGdvbmUuXG4tXHRcdFx0XHRcdCAqL1xuLVx0XHRcdFx0XHRzZXRfcHRlcyhtbSwgYWRkcmVzcywgcHZtdy5wdGUsIHB0ZXZhbCwgbnJfcGFnZXMpO1xuLVx0XHRcdFx0XHRnb3RvIHdhbGtfYWJvcnQ7XG4tXHRcdFx0XHR9XG4tXHRcdFx0XHRhZGRfbW1fY291bnRlcihtbSwgTU1fQU5PTlBBR0VTLCAtbnJfcGFnZXMpO1xuLVx0XHRcdFx0Z290byBkaXNjYXJkO1xuLVx0XHRcdH1cbi1cbi1cdFx0XHRpZiAoZm9saW9fZHVwX3N3YXAoZm9saW8sIHN1YnBhZ2UpIFx1MDAzYyAwKSB7XG4tXHRcdFx0XHRzZXRfcHRlX2F0KG1tLCBhZGRyZXNzLCBwdm13LnB0ZSwgcHRldmFsKTtcbi1cdFx0XHRcdGdvdG8gd2Fsa19hYm9ydDtcbi1cdFx0XHR9XG4tXG4tXHRcdFx0Lypcbi1cdFx0XHQgKiBhcmNoX3VubWFwX29uZSgpIGlzIGV4cGVjdGVkIHRvIGJlIGEgTk9QIG9uXG4tXHRcdFx0ICogYXJjaGl0ZWN0dXJlcyB3aGVyZSB3ZSBjb3VsZCBoYXZlIFBGTiBzd2FwIFBURXMsXG4tXHRcdFx0ICogc28gd2UnbGwgbm90IGNoZWNrL2NhcmUuXG4tXHRcdFx0ICovXG4tXHRcdFx0aWYgKGFyY2hfdW5tYXBfb25lKG1tLCB2bWEsIGFkZHJlc3MsIHB0ZXZhbCkgXHUwMDNjIDApIHtcbi1cdFx0XHRcdGZvbGlvX3B1dF9zd2FwKGZvbGlvLCBzdWJwYWdlKTtcbi1cdFx0XHRcdHNldF9wdGVfYXQobW0sIGFkZHJlc3MsIHB2bXcucHRlLCBwdGV2YWwpO1xuLVx0XHRcdFx0Z290byB3YWxrX2Fib3J0O1xuLVx0XHRcdH1cbi1cbi1cdFx0XHQvKiBTZWUgZm9saW9fdHJ5X3NoYXJlX2Fub25fcm1hcCgpOiBjbGVhciBQVEUgZmlyc3QuICovXG4tXHRcdFx0aWYgKGFub25fZXhjbHVzaXZlIFx1MDAyNlx1MDAyNlxuLVx0XHRcdCAgICBmb2xpb190cnlfc2hhcmVfYW5vbl9ybWFwX3B0ZShmb2xpbywgc3VicGFnZSkpIHtcbi1cdFx0XHRcdGZvbGlvX3B1dF9zd2FwKGZvbGlvLCBzdWJwYWdlKTtcbi1cdFx0XHRcdHNldF9wdGVfYXQobW0sIGFkZHJlc3MsIHB2bXcucHRlLCBwdGV2YWwpO1xuLVx0XHRcdFx0Z290byB3YWxrX2Fib3J0O1xuLVx0XHRcdH1cbi1cdFx0XHRtbV9wcmVwYXJlX2Zvcl9zd2FwX2VudHJpZXMobW0pO1xuLVx0XHRcdGRlY19tbV9jb3VudGVyKG1tLCBNTV9BTk9OUEFHRVMpO1xuLVx0XHRcdGluY19tbV9jb3VudGVyKG1tLCBNTV9TV0FQRU5UUyk7XG4tXHRcdFx0c3dwX3B0ZSA9IHN3cF9lbnRyeV90b19wdGUoZW50cnkpO1xuLVx0XHRcdGlmIChhbm9uX2V4Y2x1c2l2ZSlcbi1cdFx0XHRcdHN3cF9wdGUgPSBwdGVfc3dwX21rZXhjbHVzaXZlKHN3cF9wdGUpO1xuLVx0XHRcdGlmIChsaWtlbHkocHRlX3ByZXNlbnQocHRldmFsKSkpIHtcbi1cdFx0XHRcdGlmIChwdGVfc29mdF9kaXJ0eShwdGV2YWwpKVxuLVx0XHRcdFx0XHRzd3BfcHRlID0gcHRlX3N3cF9ta3NvZnRfZGlydHkoc3dwX3B0ZSk7XG4tXHRcdFx0XHRpZiAocHRlX3VmZmRfd3AocHRldmFsKSlcbi1cdFx0XHRcdFx0c3dwX3B0ZSA9IHB0ZV9zd3BfbWt1ZmZkX3dwKHN3cF9wdGUpO1xuLVx0XHRcdH0gZWxzZSB7XG4tXHRcdFx0XHRpZiAocHRlX3N3cF9zb2Z0X2RpcnR5KHB0ZXZhbCkpXG4tXHRcdFx0XHRcdHN3cF9wdGUgPSBwdGVfc3dwX21rc29mdF9kaXJ0eShzd3BfcHRlKTtcbi1cdFx0XHRcdGlmIChwdGVfc3dwX3VmZmRfd3AocHRldmFsKSlcbi1cdFx0XHRcdFx0c3dwX3B0ZSA9IHB0ZV9zd3BfbWt1ZmZkX3dwKHN3cF9wdGUpO1xuLVx0XHRcdH1cbi1cdFx0XHRzZXRfcHRlX2F0KG1tLCBhZGRyZXNzLCBwdm13LnB0ZSwgc3dwX3B0ZSk7XG4rXHRcdFx0Z290byBmaW5pc2hfdW5tYXA7XG4gXHRcdH0gZWxzZSB7XG4gXHRcdFx0LypcbiBcdFx0XHQgKiBUaGlzIGlzIGEgbG9ja2VkIGZpbGUtYmFja2VkIGZvbGlvLFxuQEAgLTIzNDAsMTIgKzI0MDQsOCBAQCBzdGF0aWMgYm9vbCB0cnlfdG9fdW5tYXBfb25lKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuIFx0XHRcdCAqL1xuIFx0XHRcdGFkZF9tbV9jb3VudGVyKG1tLCBtbV9jb3VudGVyX2ZpbGUoZm9saW8pLCAtbnJfcGFnZXMpO1xuIFx0XHR9XG4tZGlzY2FyZDpcbi1cdFx0aWYgKHVubGlrZWx5KGZvbGlvX3Rlc3RfaHVnZXRsYihmb2xpbykpKSB7XG4tXHRcdFx0aHVnZXRsYl9yZW1vdmVfcm1hcChmb2xpbyk7XG4tXHRcdH0gZWxzZSB7XG4tXHRcdFx0Zm9saW9fcmVtb3ZlX3JtYXBfcHRlcyhmb2xpbywgc3VicGFnZSwgbnJfcGFnZXMsIHZtYSk7XG4tXHRcdH1cbitmaW5pc2hfdW5tYXA6XG4rXHRcdGZvbGlvX3JlbW92ZV9ybWFwX3B0ZXMoZm9saW8sIHN1YnBhZ2UsIG5yX3BhZ2VzLCB2bWEpO1xuIFx0XHRpZiAodm1hLVx1MDAzZXZtX2ZsYWdzIFx1MDAyNiBWTV9MT0NLRUQpXG4gXHRcdFx0bWxvY2tfZHJhaW5fbG9jYWwoKTtcbiBcdFx0Zm9saW9fcHV0X3JlZnMoZm9saW8sIG5yX3BhZ2VzKTtcbkBAIC0yMzkzLDcgKzI0NTMsOCBAQCBzdGF0aWMgaW50IGZvbGlvX25vdF9tYXBwZWQoc3RydWN0IGZvbGlvICpmb2xpbylcbiB2b2lkIHRyeV90b191bm1hcChzdHJ1Y3QgZm9saW8gKmZvbGlvLCBlbnVtIHR0dV9mbGFncyBmbGFncylcbiB7XG4gXHRzdHJ1Y3Qgcm1hcF93YWxrX2NvbnRyb2wgcndjID0ge1xuLVx0XHQucm1hcF9vbmUgPSB0cnlfdG9fdW5tYXBfb25lLFxuK1x0XHQucm1hcF9vbmUgPSBmb2xpb190ZXN0X2h1Z2V0bGIoZm9saW8pID9cbitcdFx0XHRcdHRyeV90b191bm1hcF9odWdldGxiX29uZSA6IHRyeV90b191bm1hcF9vbmUsXG4gXHRcdC5hcmcgPSAodm9pZCAqKWZsYWdzLFxuIFx0XHQuZG9uZSA9IGZvbGlvX25vdF9tYXBwZWQsXG4gXHRcdC5hbm9uX2xvY2sgPSBmb2xpb19sb2NrX2Fub25fdm1hX3JlYWQsXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wN1QyMDozNzo0Ni44Nzc2MTExNTdaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2NjM3Mjc1MjE4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgYG1tL3JtYXAuY2AgUmVmYWN0b3JpbmcgZm9yIFBvdGVudGlhbCBWdWxuZXJhYmlsaXRpZXMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoLiBJdCdzIHRvdWNoaW5nIGBtbS9ybWFwLmNgIGFuZCBgaW5jbHVkZS9saW51eC9odWdldGxiLmhgLCB3aGljaCBpbW1lZGlhdGVseSBmbGFncyBzb21lIHNlcmlvdXMgYXR0ZW50aW9uLiBJdCBsb29rcyBsaWtlIHdlJ3JlIHJlZmFjdG9yaW5nIGB0cnlfdG9fdW5tYXBfb25lYCB0byBiZSBjbGVhbmVyLCBwdWxsaW5nIG91dCB0aGUgaHVnZXRsYi1zcGVjaWZpYyBzdHVmZiBpbnRvIGB0cnlfdG9fdW5tYXBfaHVnZXRsYl9vbmVgLCBhbmQgdGhlbiBoYW5kbGluZyBhbm9ueW1vdXMgZm9saW8gY2FzZXMgd2l0aCBhIGhhbmRmdWwgb2YgbmV3IGZ1bmN0aW9uczogYHR0dV9hbm9uX2ZvbGlvYCwgYHR0dV9hbm9uX2xhenlmcmVlX2ZvbGlvYCwgYW5kIGB0dHVfYW5vbl9zd2FwYmFja2VkX2ZvbGlvYC4gVGhlIG1haW4gYHRyeV90b191bm1hcGAgZnVuY3Rpb24gaXMgbm93IGNvbmRpdGlvbmFsbHkgY2FsbGluZyBgdHJ5X3RvX3VubWFwX2h1Z2V0bGJfb25lYCBpZiB0aGUgZm9saW8gaXMgYSBodWdldGxiIHBhZ2UuXG5cbkZ1bmN0aW9uYWxseSwgdGhpcyBzZWVtcyBsaWtlIG1vc3RseSBhIHJlZmFjdG9yaW5nLiBCdXQgbGV0J3MgYmUgaG9uZXN0LCBhbnkgY2hhbmdlIGluIHRoZXNlIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgYXJlYXMg4oCTIHJtYXAsIGh1Z2V0bGIsIHVubWFwcGluZyDigJMgd2FycmFudHMgYSAqdmVyeSogY2xvc2UgbG9vay4gVGhlc2UgYXJlIGNyaXRpY2FsIHBhdGhzLCBhbmQgc3VidGxlIGVycm9ycyBjYW4gaGF2ZSBkZXZhc3RhdGluZyBjb25zZXF1ZW5jZXMuIE15IHByaW1hcnkgY29uY2VybiBoZXJlIGlzIHRoYXQgdGhpcyBraW5kIG9mIHJlZmFjdG9yaW5nIGlzIHByb25lIHRvIGludHJvZHVjaW5nIG9mZi1ieS1vbmUgZXJyb3JzLCBpbmNvcnJlY3QgbG9ja2luZywgb3Igb3RoZXIgc3VidGxlIGJ1Z3MgZHVlIHRvIHRoZSBjb21wbGV4aXR5IGludm9sdmVkLlxuXG5TbywgSSBuZWVkIHRvIGZvY3VzIG15IGZ1enppbmcgZWZmb3J0cy4gVGhlIGtleSBmdW5jdGlvbnMgdG8gdGFyZ2V0IGFyZTpcblxuKiAgIGB0cnlfdG9fdW5tYXBfaHVnZXRsYl9vbmVgIC0gVGhpcyBpcyBub3cgaGFuZGxpbmcgdGhlIGh1Z2V0bGIgc3BlY2lmaWMgbG9naWMsIHdoaWNoLCBkdWUgdG8gdGhlaXIgc2l6ZSwgaW50cm9kdWNlIGNvbXBsZXhpdGllcyB0aGF0IG1heSBub3QgYmUgYXBwYXJlbnQgaW4gZ2VuZXJhbCBmb2xpbyBwYWdlcy5cbiogICBgdHR1X2Fub25fZm9saW9gIC0gVGhpcyBpcyBub3cgaGFuZGxpbmcgZ2VuZXJhbCBhbm9ueW1vdXMgZm9saW9zLlxuKiAgIGB0dHVfYW5vbl9sYXp5ZnJlZV9mb2xpb2AgLSBUaGlzIGlzIG5vdyBoYW5kbGluZyBhbm9ueW1vdXMgbGF6eS1mcmVlIGZvbGlvcy5cbiogICBgdHR1X2Fub25fc3dhcGJhY2tlZF9mb2xpb2AgLSBUaGlzIGlzIG5vdyBoYW5kbGluZyBhbm9ueW1vdXMgZm9saW9zIHRoYXQgaGF2ZSBzd2FwIGJhY2tpbmcuXG4qICAgYHRyeV90b191bm1hcGAgLSBUaGUgbWFpbiBlbnRyeSBwb2ludCwgYW5kIHRoZSBmdW5jdGlvbiB3aGVyZSB0aGUgY29udHJvbCBmbG93IGJyYW5jaGVzLlxuXG5BbmQgb2YgY291cnNlLCBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoZSBmdXp6aW5nIGVudmlyb25tZW50IGlzIGFwcHJvcHJpYXRlbHkgY29uZmlndXJlZC4gV2UnbGwgbmVlZCB0byBlbmFibGUgYEhVR0VUTEJfUEFHRWAsIG9mIGNvdXJzZSwgZm9yIGh1Z2V0bGIgdGVzdGluZy4gVGhlIHByZXNlbmNlIG9mIHN3YXAtYmFja2VkIGZvbGlvcyBjYWxscyBmb3IgdGhlIGBTV0FQYCBjb25maWcgdG8gYmUgZW5hYmxlZC4gQW5kIHNpbmNlIHRoZXJlJ3Mgc29tZSBtZW50aW9uIG9mIGBUVFVfSFdQT0lTT05gIGxvZ2ljIHdpdGhpbiwgSSBuZWVkIHRvIGhhdmUgZWl0aGVyIGBIV1BPSVNPTl9JTkpFQ1RgIG9yIGBNRU1PUllfRkFJTFVSRWAgZW5hYmxlZC5cblxuUmlnaHQuIFRpbWUgdG8gdmVyaWZ5IHRob3NlIGNvbmZpZ3MgYW5kIHN0YXJ0IGRpZ2dpbmcgaW50byB0aGUgY29kZS5cblxuXG4iLCJJbnB1dFRva2VucyI6ODM1MiwiT3V0cHV0VG9rZW5zIjoyNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMxNCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA3VDIwOjM3OjUzLjUxNDg4ODI5NVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNjA4NjU0OTI3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInRyeV90b191bm1hcF9odWdldGxiX29uZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9ybWFwLmM9MTk0ND1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBmb2xpb191bm1hcF9wdGVfYmF0Y2goc3RydWN0IGZvbGlvICpmb2xpbyxcXG4tLVxcbm1tL3JtYXAuYy0xOTgwLVxcbm1tL3JtYXAuYzoxOTgxOnN0YXRpYyBib29sIHRyeV90b191bm1hcF9odWdldGxiX29uZShzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbm1tL3JtYXAuYy0xOTgyLVxcdFxcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MsIHZvaWQgKmFyZylcXG4tLVxcbm1tL3JtYXAuYz0yNDUzPXZvaWQgdHJ5X3RvX3VubWFwKHN0cnVjdCBmb2xpbyAqZm9saW8sIGVudW0gdHR1X2ZsYWdzIGZsYWdzKVxcbi0tXFxubW0vcm1hcC5jLTI0NTYtXFx0XFx0LnJtYXBfb25lID0gZm9saW9fdGVzdF9odWdldGxiKGZvbGlvKSA/XFxubW0vcm1hcC5jOjI0NTc6XFx0XFx0XFx0XFx0dHJ5X3RvX3VubWFwX2h1Z2V0bGJfb25lIDogdHJ5X3RvX3VubWFwX29uZSxcXG5tbS9ybWFwLmMtMjQ1OC1cXHRcXHQuYXJnID0gKHZvaWQgKilmbGFncyxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDdUMjA6Mzc6NTYuMTIzNTUwNzMyWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDQwMTUwNDM5OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2Vzcywgc3VtbWFyaXplZCBhcyB5b3UgcmVxdWVzdGVkOlxuXG4qKktjb25maWcgYW5kIEh1Z2UgUGFnZXM6IEEgUXVpY2sgQ2hlY2sqKlxuXG5Pa2F5LCBiZWZvcmUgZGl2aW5nIGFueSBkZWVwZXIsIEkgbmVlZCB0byBtYWtlIGFic29sdXRlbHkgc3VyZSB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24gZm9yIEh1Z2VUTEIgcGFnZXMgaXMgcHJvcGVybHkgc2V0LiBJdCdzIGVhc3kgdG8gb3Zlcmxvb2ssIGFuZCBhIG1pc2NvbmZpZ3VyYXRpb24gaGVyZSB3b3VsZCB0aHJvdyBldmVyeXRoaW5nIG9mZi4gU28sIEkgbmVlZCB0byBvcGVuIHRoZSBgS2NvbmZpZ2AgZmlsZXMgYW5kIHNlYXJjaCBmb3IgYEhVR0VUTEJfUEFHRWAuIFRoYXQncyB0aGUgYmFzZWxpbmUuIEkgbmVlZCB0byB2ZXJpZnkgaXRzIHN0YXR1cyAtIGlzIGl0IGVuYWJsZWQsIGRpc2FibGVkLCBvciBzZXQgdG8gc29tZSBzcGVjaWZpYyB2YWx1ZT8gQSBxdWljayBzY2FuIG9mIHRoZSByZWxldmFudCBLY29uZmlnIG9wdGlvbnMgd2lsbCBpbW1lZGlhdGVseSB0ZWxsIG1lIGlmIEknbSBldmVuICphYmxlKiB0byB3b3JrIHdpdGggaHVnZXRsYmZzLiBUaGlzIGlzIGp1c3QgYSBzYW5pdHkgY2hlY2s7IGRvbid0IHdhc3RlIHRpbWUgb24gYW55dGhpbmcgZWxzZSB5ZXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk0OTEsIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wN1QyMDozODowMC41MjUwNTcwNjFaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjE3OTExMzIwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgSFVHRVRMQl9QQUdFXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvc2gvbW0vS2NvbmZpZz0xNTg9Y2hvaWNlXFxuLS1cXG5hcmNoL3NoL21tL0tjb25maWctMTYzLVxcbmFyY2gvc2gvbW0vS2NvbmZpZzoxNjQ6Y29uZmlnIEhVR0VUTEJfUEFHRV9TSVpFXzY0S1xcbmFyY2gvc2gvbW0vS2NvbmZpZy0xNjUtXFx0Ym9vbCBcXFwiNjRrQlxcXCJcXG4tLVxcbmFyY2gvc2gvbW0vS2NvbmZpZy0xNjctXFxuYXJjaC9zaC9tbS9LY29uZmlnOjE2ODpjb25maWcgSFVHRVRMQl9QQUdFX1NJWkVfMjU2S1xcbmFyY2gvc2gvbW0vS2NvbmZpZy0xNjktXFx0Ym9vbCBcXFwiMjU2a0JcXFwiXFxuLS1cXG5hcmNoL3NoL21tL0tjb25maWctMTcxLVxcbmFyY2gvc2gvbW0vS2NvbmZpZzoxNzI6Y29uZmlnIEhVR0VUTEJfUEFHRV9TSVpFXzFNQlxcbmFyY2gvc2gvbW0vS2NvbmZpZy0xNzMtXFx0Ym9vbCBcXFwiMU1CXFxcIlxcbmFyY2gvc2gvbW0vS2NvbmZpZy0xNzQtXFxuYXJjaC9zaC9tbS9LY29uZmlnOjE3NTpjb25maWcgSFVHRVRMQl9QQUdFX1NJWkVfNE1CXFxuYXJjaC9zaC9tbS9LY29uZmlnLTE3Ni1cXHRib29sIFxcXCI0TUJcXFwiXFxuLS1cXG5hcmNoL3NoL21tL0tjb25maWctMTc4LVxcbmFyY2gvc2gvbW0vS2NvbmZpZzoxNzk6Y29uZmlnIEhVR0VUTEJfUEFHRV9TSVpFXzY0TUJcXG5hcmNoL3NoL21tL0tjb25maWctMTgwLVxcdGJvb2wgXFxcIjY0TUJcXFwiXFxuLS1cXG5mcy9LY29uZmlnPTI2Mj1pZiBIVUdFVExCRlNcXG5mcy9LY29uZmlnOjI2Mzpjb25maWcgSFVHRVRMQl9QQUdFX09QVElNSVpFX1ZNRU1NQVBfREVGQVVMVF9PTlxcbmZzL0tjb25maWctMjY0LVxcdGJvb2wgXFxcIkh1Z2VUTEIgVm1lbW1hcCBPcHRpbWl6YXRpb24gKEhWTykgZGVmYXVsdHMgdG8gb25cXFwiXFxuLS1cXG5mcy9LY29uZmlnPTI3MT1lbmRpZiAjIEhVR0VUTEJGU1xcbmZzL0tjb25maWctMjcyLVxcbmZzL0tjb25maWc6MjczOmNvbmZpZyBIVUdFVExCX1BBR0VcXG5mcy9LY29uZmlnLTI3NC1cXHRkZWZfYm9vbCBIVUdFVExCRlNcXG4tLVxcbmZzL0tjb25maWctMjc2LVxcbmZzL0tjb25maWc6Mjc3OmNvbmZpZyBIVUdFVExCX1BBR0VfT1BUSU1JWkVfVk1FTU1BUFxcbmZzL0tjb25maWctMjc4LVxcdGRlZl9ib29sIEhVR0VUTEJfUEFHRVxcbi0tXFxubW0vS2NvbmZpZz03MDY9Y29uZmlnIEFSQ0hfSEFTX1BNRF9TT0ZUTEVBVkVTXFxuLS1cXG5tbS9LY29uZmlnLTcwOC1cXG5tbS9LY29uZmlnOjcwOTpjb25maWcgSFVHRVRMQl9QQUdFX1NJWkVfVkFSSUFCTEVcXG5tbS9LY29uZmlnLTcxMC1cXHRkZWZfYm9vbCBuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA3VDIwOjM4OjAyLjcwNDE3NTYyWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjY0MDY0MjM3NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBwcmVzZW50ZWQgYXMgbXkgb3duIG1lbnRhbCBwcm9jZXNzLCBnaXZlbiBteSBleHBlcnRpc2U6XG5cbioqRGl2aW5nIGludG8gdGhlIEh1Z2VUTEIgQ29uZmlndXJhdGlvbioqXG5cbkFscmlnaHQsIHNvIGBIVUdFVExCX1BBR0VgIGlzIHRoZSB0YXJnZXQgaGVyZS4gVGhhdCdzIGEgZ29vZCBzdGFydGluZyBwb2ludCBmb3IgaW52ZXN0aWdhdGluZyB0aGUgaHVnZSBwYWdlIHN1cHBvcnQuIEFuZCB0aGUgS2NvbmZpZyBlbnRyeSBtZW50aW9ucyBhIGRlcGVuZGVuY3k6IGBIVUdFVExCRlNgLiBSaWdodCwgc28gdGhpcyBjb25maXJtcyB0aGUgZGVwZW5kZW5jeS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBgSFVHRVRMQkZTYCBjb21wb25lbnQgdG8gZnVsbHkgZ3Jhc3AgdGhlIGNhcGFiaWxpdGllcyBvZiBgSFVHRVRMQl9QQUdFYC4gTGV0IG1lIHF1aWNrbHkgc2hpZnQgbXkgZm9jdXMgYW5kIHN0YXJ0IGxvb2tpbmcgaW50byB0aGUgZGV0YWlscyBvZiB3aGF0IGBIVUdFVExCRlNgIGJyaW5ncyB0byB0aGUgdGFibGUuIFRpbWUgdG8gZGlnIGRlZXBlciBpbnRvIHRoZSBmaWxlIHN5c3RlbSBzaWRlIG9mIHRoaXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwMjgyLCJPdXRwdXRUb2tlbnMiOjE5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDdUMjA6Mzg6MDUuMzQ0ODE5NzQ3WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5MTQyNjM4MjEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEhVR0VUTEJGU1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9LY29uZmlnPTI0Nz1jb25maWcgQVJDSF9TVVBQT1JUU19IVUdFVExCRlNcXG4tLVxcbmZzL0tjb25maWctMjQ5LVxcbmZzL0tjb25maWc6MjUwOm1lbnVjb25maWcgSFVHRVRMQkZTXFxuZnMvS2NvbmZpZy0yNTEtXFx0Ym9vbCBcXFwiSHVnZVRMQiBmaWxlIHN5c3RlbSBzdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wN1QyMDozODowNy4yNTkwODg0NThaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMDgxNTIzNzQ1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIHByZXNlbnRlZCBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKktlcm5lbCBDb25maWd1cmF0aW9uIERlZXAgRGl2ZSoqXG5cbkFscmlnaHQsIHNvIEknbSBkaXZpbmcgaW50byB0aGlzIGtlcm5lbCBjb25maWd1cmF0aW9uLCBhbmQgdGhlIGtleSB0aGluZyBJJ20gaW1tZWRpYXRlbHkgaG9taW5nIGluIG9uIGlzIGBIVUdFVExCRlNgLiBUaGF0J3MgdGhlIG9uZSBJIG5lZWQgdG8gZW5hYmxlIGZvciB0aGUgdXNlIGNhc2Ugd2UncmUgY29uc2lkZXJpbmcsIG5vIGRvdWJ0LiBOb3csIGJlZm9yZSBJIHByb2NlZWQgd2l0aCBhbnkgbW9yZSBvZiB0aGVzZSBjaGFuZ2VzLCBsZXQncyBqdXN0IGRvIGEgcXVpY2sgZG91YmxlLWNoZWNrIG9mIHNvbWV0aGluZyByZWxhdGVkLCB0byBlbnN1cmUgd2UgYXJlIGNvdmVyaW5nIHRoZSBiYXNlcy4gTGV0J3MgbWFrZSBzdXJlIHRoYXQgYE1FTU9SWV9GQUlMVVJFYCBpcyBzZXQgdG8gdGhlIGNvcnJlY3QgdmFsdWUsIHNpbmNlIHRoYXQgaGFzIGltcGxpY2F0aW9ucyBmb3IgdGhlIG92ZXJhbGwgbWVtb3J5IG1hbmFnZW1lbnQgc3RyYXRlZ3ksIGFuZCBob3cgaXQgd2lsbCBpbnRlcmFjdCB3aXRoIHRoaXMgbmV3IHNldHVwLiBKdXN0IHdhbnQgdG8gbWFrZSBzdXJlIHRoZSBpbnRlcmFjdGlvbnMgYXJlIGFzIGV4cGVjdGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDU2MCwiT3V0cHV0VG9rZW5zIjoxOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA3VDIwOjM4OjEwLjM0MDYxNDY0M1oiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjI1NDYxMDQyOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTUVNT1JZX0ZBSUxVUkVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vS2NvbmZpZz03NzQ9Y29uZmlnIEFSQ0hfU1VQUE9SVFNfTUVNT1JZX0ZBSUxVUkVcXG4tLVxcbm1tL0tjb25maWctNzc2LVxcbm1tL0tjb25maWc6Nzc3OmNvbmZpZyBNRU1PUllfRkFJTFVSRVxcbm1tL0tjb25maWctNzc4LVxcdGRlcGVuZHMgb24gTU1VXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA3VDIwOjM4OjEyLjU5NTIzMTQ1MloiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyOTA1NjE3MjI2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgcHJlc2VudGVkIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqRGVlcCBEaXZlIG9uIGBIV1BPSVNPTl9JTkpFQ1RgKipcblxuQWxyaWdodCwgdGltZSB0byBjaXJjbGUgYmFjayBhbmQgZ2l2ZSBgSFdQT0lTT05fSU5KRUNUYCBhIHByb3BlciBvbmNlLW92ZXIuIFRoaXMgbGlrZWx5IG1lYW5zIEknbSBsb29raW5nIGZvciBhIHBhcnRpY3VsYXIgaW50ZXJhY3Rpb24gb3IgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdHkgcmVsYXRlZCB0byBoYXJkd2FyZS1iYXNlZCBtZW1vcnkgY29ycnVwdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBzcGVjaWZpYyBwb2lzb24gdmFsdWVzIGFyZSBiZWluZyBpbnRyb2R1Y2VkLCBob3cgdGhleSBhcmUgYmVpbmcgaW5qZWN0ZWQsIGFuZCB0aGUgY29uZGl0aW9ucyB1bmRlciB3aGljaCB0aGlzIGluamVjdGlvbiBpcyBvY2N1cnJpbmcuIEknbGwgbmVlZCB0byB0aGluayB0aHJvdWdoIHRoZSBwb3NzaWJsZSBpbXBhY3QsIG1heWJlIGNvbnNpZGVyaW5nIGhvdyB0aGlzIHJlbGF0ZXMgdG8gbWl0aWdhdGlvbiB0ZWNobmlxdWVzIGxpa2UgbWVtb3J5IHRhZ2dpbmcgb3IgZXJyb3ItY29ycmVjdGluZyBjb2RlcywgYW5kIGhvdyB0aGlzIGZlYXR1cmUgbWlnaHQgaW50ZXJhY3Qgd2l0aCBvdGhlciBoYXJkd2FyZSBmZWF0dXJlcyBvciBzb2Z0d2FyZSBzdWJzeXN0ZW1zLiBJIG5lZWQgdG8gYXNzZXNzIHRoZSBzY29wZSBvZiB0aGlzIHBvaXNvbmluZyBhbmQgcG90ZW50aWFsIGltcGFjdCBvbiBzeXN0ZW0gc3RhYmlsaXR5LCBzZWN1cml0eSwgb3IgZGF0YSBpbnRlZ3JpdHkuIFVsdGltYXRlbHksIEknbSB0cnlpbmcgdG8gZGV0ZXJtaW5lIGlmIHRoZXJlJ3MgYW55IGFyZWEgdGhhdCBuZWVkcyBkZWVwZXIgYW5hbHlzaXMgb3IgaW1tZWRpYXRlIGF0dGVudGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA4NDMsIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wN1QyMDozODoxNS41MDA4NTA5MzdaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5OTY5NjkyNjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEhXUE9JU09OX0lOSkVDVFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9LY29uZmlnPTc3Nz1jb25maWcgTUVNT1JZX0ZBSUxVUkVcXG4tLVxcbm1tL0tjb25maWctNzg3LVxcbm1tL0tjb25maWc6Nzg4OmNvbmZpZyBIV1BPSVNPTl9JTkpFQ1RcXG5tbS9LY29uZmlnLTc4OS1cXHR0cmlzdGF0ZSBcXFwiSFdQb2lzb24gcGFnZXMgaW5qZWN0b3JcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA3VDIwOjM4OjE3LjQ5NzgyNDU5OFoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyNzIyODIxNjA3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczpcblxuKipFbmFibGluZyBSb2J1c3QgSGFyZHdhcmUgUG9pc29uIFRlc3RpbmcqKlxuXG5Pa2F5LCBzbyBJJ20gdGhpbmtpbmcsIHRvIHJlYWxseSBnaXZlIHRoZSBoYXJkd2FyZSBwb2lzb24gbG9naWMgYSB3b3Jrb3V0LCBJIHNob3VsZCBkZWZpbml0ZWx5IGVuYWJsZSBib3RoIGBNRU1PUllfRkFJTFVSRWAgYW5kIGBIV1BPSVNPTl9JTkpFQ1RgLiBUaGF0IGNvbWJpbmF0aW9uIHNob3VsZCBwcm92aWRlIGEgc29saWQgcGxhdGZvcm0gZm9yIHRlc3RpbmcuIEFuZCwgb2YgY291cnNlLCBJJ2xsIG5lZWQgYFNXQVBgIGVuYWJsZWQsIHNpbmNlIHRoZSBgdHR1X2Fub25fc3dhcGJhY2tlZF9mb2xpb2AgdGVzdCByZWxpZXMgb24gaXQuIE1ha2VzIHNlbnNlLiBOZWVkIHRoZSBiYXNpY3MgdG8gd29yayBvbiB0aGUgc3BlY2lmaWNzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTE1MSwiT3V0cHV0VG9rZW5zIjoxNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA3VDIwOjM4OjIwLjIyMDY0ODIxNVoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTkxNTg4Njk0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgU1dBUFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL21pcHMvS2NvbmZpZz0xMjYzPWNvbmZpZyBNSVBTX1NQUkFNXFxuLS1cXG5hcmNoL21pcHMvS2NvbmZpZy0xMjY1LVxcbmFyY2gvbWlwcy9LY29uZmlnOjEyNjY6Y29uZmlnIFNXQVBfSU9fU1BBQ0VcXG5hcmNoL21pcHMvS2NvbmZpZy0xMjY3LVxcdGJvb2xcXG4tLVxcbmFyY2gvc2gvS2NvbmZpZz0xMjk9Y29uZmlnIElPX1RSQVBQRURcXG4tLVxcbmFyY2gvc2gvS2NvbmZpZy0xMzEtXFxuYXJjaC9zaC9LY29uZmlnOjEzMjpjb25maWcgU1dBUF9JT19TUEFDRVxcbmFyY2gvc2gvS2NvbmZpZy0xMzMtXFx0Ym9vbFxcbi0tXFxubW0vS2NvbmZpZz05PWNvbmZpZyBBUkNIX05PX1NXQVBcXG4tLVxcbm1tL0tjb25maWctMTEtXFxubW0vS2NvbmZpZzoxMjptZW51Y29uZmlnIFNXQVBcXG5tbS9LY29uZmlnLTEzLVxcdGJvb2wgXFxcIlN1cHBvcnQgZm9yIHBhZ2luZyBvZiBhbm9ueW1vdXMgbWVtb3J5IChzd2FwKVxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDdUMjA6Mzg6MjIuMTM2NTQwNTk1WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUyNjE3NTgxMzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIFVubWFwcGluZyBGdW5jdGlvbnMgZm9yIEZ1enppbmcgUG90ZW50aWFsKipcblxuT2theSwgc28gdGhlIGBTV0FQYCBtZWNoYW5pc20gbG9va3MgbGlrZSBhIHByb21pc2luZyBhdmVudWUgZm9yIGV4cGxvcmF0aW9uLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gaWRlbnRpZnkgdGhlIGtleSBmdW5jdGlvbnMgcmVsYXRlZCB0byBtZW1vcnkgdW5tYXBwaW5nLCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBjb250ZXh0IG9mIGh1Z2V0bGJmcyBhbmQgYW5vbnltb3VzIHBhZ2VzLCB3aXRoIHRoZSBhaW0gb2YgcG90ZW50aWFsbHkgdGFyZ2V0aW5nIHRoZW0gd2l0aCBmdXp6aW5nLlxuXG5JIG5lZWQgdG8gbmFpbCBkb3duIHRoZSBjb3JlIGZ1bmN0aW9ucy4gTGV0J3Mgc2VlLi4uIHRoZSBvbmVzIHRoYXQgY29tZSB0byBtaW5kIGFyZTogYHRyeV90b191bm1hcF9odWdldGxiX29uZWAsIGB0dHVfYW5vbl9mb2xpb2AsIGB0dHVfYW5vbl9sYXp5ZnJlZV9mb2xpb2AsIGFuZCBgdHR1X2Fub25fc3dhcGJhY2tlZF9mb2xpb2AuIEFsbCBvZiB0aG9zZSBhcmUgc3RhdGljIGFuZCBuZXN0bGVkIHdpdGhpbiBgbW0vcm1hcC5jYCwgZXhjZXB0IGZvciBgdHJ5X3RvX3VubWFwX2h1Z2V0bGJfb25lYCwgYnV0IGEgcXVpY2sgY2hlY2sgcmV2ZWFscyB0aGF0IGl0J3MgYWxzbyBzdGF0aWMuIEhhbmcgb24sIGlzbid0IGB0cnlfdG9fdW5tYXBgIGV4cG9ydGVkPyBZZXMsIGl0IGlzIVxuXG5Ob3csIHRoZSBpbXBvcnRhbnQgcXVlc3Rpb246IENhbiBTeXprYWxsZXIgZWZmZWN0aXZlbHkgdGFyZ2V0ICpzdGF0aWMqIGZ1bmN0aW9ucyBmb3IgZnV6emluZz8gTXkgdW5kZXJzdGFuZGluZyBpcyB0aGF0IHdoaWxlIFN5emthbGxlciBwcmltYXJpbHkgdGFyZ2V0cyBzeXNjYWxscywgaXQgdXNlcyBmdW5jdGlvbiBuYW1lcyBmb3IgY292ZXJhZ2UgZ3VpZGFuY2UgYW5kIHBvdGVudGlhbCBjb250cm9sLiBUaGVzZSBzdGF0aWMgZnVuY3Rpb25zIGFyZSBjYW5kaWRhdGVzIGZvciBgRm9jdXNTeW1ib2xzYCwgYWN0aW5nIGFzIHVzZWZ1bCBmaWx0ZXJzIG9yIGd1aWRlcyBmb3IgdGhlIGZ1enplci4gSXQgbG9va3MgbGlrZSBzdGF0aWMgZnVuY3Rpb25zIGFyZSBwZXJmZWN0bHkgZmluZSBmb3IgdGhpcyBraW5kIG9mIGd1aWRhbmNlLlxuXG5JIHNob3VsZCBwcm9iYWJseSBjb25maXJtIGJ5IGV4YW1pbmluZyBgdHJ5X3RvX3VubWFwX2h1Z2V0bGJfb25lYCBpbiBgbW0vcm1hcC5jYCBpdHNlbGYuIEp1c3QgdG8gYmUgc3VyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE1NDUsIk91dHB1dFRva2VucyI6MjYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMjYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDdUMjA6Mzg6MjcuMzk4MzAyNDNaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5NDI3ODE0NTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidHJ5X3RvX3VubWFwX2h1Z2V0bGJfb25lXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3JtYXAuYz0xOTQ0PXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGZvbGlvX3VubWFwX3B0ZV9iYXRjaChzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbi0tXFxubW0vcm1hcC5jLTE5ODAtXFxubW0vcm1hcC5jOjE5ODE6c3RhdGljIGJvb2wgdHJ5X3RvX3VubWFwX2h1Z2V0bGJfb25lKHN0cnVjdCBmb2xpbyAqZm9saW8sXFxubW0vcm1hcC5jLTE5ODItXFx0XFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcywgdm9pZCAqYXJnKVxcbi0tXFxubW0vcm1hcC5jPTI0NTM9dm9pZCB0cnlfdG9fdW5tYXAoc3RydWN0IGZvbGlvICpmb2xpbywgZW51bSB0dHVfZmxhZ3MgZmxhZ3MpXFxuLS1cXG5tbS9ybWFwLmMtMjQ1Ni1cXHRcXHQucm1hcF9vbmUgPSBmb2xpb190ZXN0X2h1Z2V0bGIoZm9saW8pID9cXG5tbS9ybWFwLmM6MjQ1NzpcXHRcXHRcXHRcXHR0cnlfdG9fdW5tYXBfaHVnZXRsYl9vbmUgOiB0cnlfdG9fdW5tYXBfb25lLFxcbm1tL3JtYXAuYy0yNDU4LVxcdFxcdC5hcmcgPSAodm9pZCAqKWZsYWdzLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wN1QyMDozODoyOS4zNDEwOTA0MloiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyNDg1MTM3NDY4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgc3VtbWFyeSwgY29uc2lkZXJpbmcgbXkgZXhwZXJ0aXNlOlxuXG4qKk15IEluaXRpYWwgQXNzZXNzbWVudCBhbmQgTmV4dCBTdGVwcyoqXG5cblJpZ2h0LCBpbml0aWFsIGltcHJlc3Npb24gaXMgdGhhdCB0aGUgc2l0dWF0aW9uIGlzLi4uIHdlbGwsICpzdGF0aWMqLiBOb3RoaW5nJ3MgbW92aW5nLCBub3RoaW5nJ3MgZHluYW1pY2FsbHkgY2hhbmdpbmcsIGFuZCB0aGF0J3Mgbm90IHdoYXQgSSB3YXMgZXhwZWN0aW5nLiBCYXNlZCBvbiB0aGlzLCBJIG5lZWQgdG8gaW52ZXN0aWdhdGUgZnVydGhlci4gSXQncyB0aW1lIHRvIGRpdmUgaW50byB0aGUgZGF0YS4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gY2hlY2sgb3V0IGB0dHVfYW5vbl9mb2xpb2AuIFRoYXQncyB0aGUgbG9naWNhbCBuZXh0IHBvaW50IG9mIGlucXVpcnksIGdpdmVuIHRoaXMgaW5pdGlhbCBzdGF0aWMgYXNzZXNzbWVudC4gSXQgc2hvdWxkIG9mZmVyIHNvbWUgc3BlY2lmaWMgZGV0YWlscyB0aGF0IGVpdGhlciBjb25maXJtIHRoZSBjdXJyZW50IHN0YXRlLCBvciBoZWxwIHRvIHNlZSB3aGF0IGZhY3RvcnMgYXJlIGNhdXNpbmcgdGhpcyBcInN0aWxsXCIgc3RhdGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyMzUyLCJPdXRwdXRUb2tlbnMiOjE5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDdUMjA6Mzg6MzEuODI2MjMwNjA4WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTIwMzc2ODMxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInR0dV9hbm9uX2ZvbGlvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3JtYXAuYz0yMTQwPXN0YXRpYyBpbmxpbmUgYm9vbCB0dHVfYW5vbl9zd2FwYmFja2VkX2ZvbGlvKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbi0tXFxubW0vcm1hcC5jLTIxNzMtXFxubW0vcm1hcC5jOjIxNzQ6c3RhdGljIGlubGluZSBib29sIHR0dV9hbm9uX2ZvbGlvKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbm1tL3JtYXAuYy0yMTc1LVxcdFxcdHN0cnVjdCBwYWdlICpzdWJwYWdlLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MsIHB0ZV90ICpwdGVwLFxcbi0tXFxubW0vcm1hcC5jPTIyMTE9c3RhdGljIGJvb2wgdHJ5X3RvX3VubWFwX29uZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4tLVxcbm1tL3JtYXAuYy0yMzg3LVxcdFxcdH0gZWxzZSBpZiAoZm9saW9fdGVzdF9hbm9uKGZvbGlvKSkge1xcbm1tL3JtYXAuYzoyMzg4OlxcdFxcdFxcdGlmICghdHR1X2Fub25fZm9saW8odm1hLCBmb2xpbywgc3VicGFnZSwgYWRkcmVzcyxcXG5tbS9ybWFwLmMtMjM4OS1cXHRcXHRcXHRcXHRcXHQgICAgcHZtdy5wdGUsIHB0ZXZhbCwgbnJfcGFnZXMpKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wN1QyMDozODozMy43NDY2MTgzOTlaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTA3Nzg0NzA4NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFVubWFwcGluZyBMb2dpYyBSZWZhY3RvcioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGl0J3MgZGVhbGluZyB3aXRoIHRoZSB1bm1hcHBpbmcgbG9naWMgaW4gYG1tL3JtYXAuY2AuIFRoZSBjb3JlIG9mIGl0IHNlZW1zIHRvIGJlIGV4dHJhY3RpbmcgaHVnZXRsYiBhbmQgYW5vbnltb3VzIGZvbGlvIHVubWFwcGluZyBpbnRvIHNwZWNpZmljIGZ1bmN0aW9ucy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBTeXprYWxsZXIgaXMgZm9jdXNlZCBvbiB0aGUgcmlnaHQgc3ltYm9scyB0byBjYXRjaCBhbnkgcmVncmVzc2lvbnMuXG5cblJpZ2h0LCB0aGUgZnVuY3Rpb25zLi4uIExldCdzIHNlZS4gYHRyeV90b191bm1hcF9odWdldGxiX29uZWAgaXMgbm90IGlubGluZSwgc28gaXQgKnNob3VsZCogYXBwZWFyIGFzIGEgc3ltYm9sLCBlYXN5LiBUaGVuIGB0dHVfYW5vbl9sYXp5ZnJlZV9mb2xpb2AgYW5kIGB0dHVfYW5vbl9zd2FwYmFja2VkX2ZvbGlvYCBhcmUgYHN0YXRpYyBpbmxpbmVgLiBJdCdzIGZpbmUgdG8gaW5jbHVkZSBzdGF0aWMgaW5saW5lIGZ1bmN0aW9ucywgU3l6a2FsbGVyICpjYW4qIGhhbmRsZSB0aG9zZSBpZiB3ZSBoYXZlIGRlYnVnIGluZm8uIE5vdywgbGV0IG1lIGNoZWNrIHRoZSBub24taW5saW5lIGZ1bmN0aW9ucywgYHRyeV90b191bm1hcGAgaXMgZ2xvYmFsLCB3aGljaCBpcyBhbHNvIGVhc3kuIGB0cnlfdG9fdW5tYXBfb25lYCBpcyBzdGF0aWMuXG5cbkFscmlnaHQsIHNvIG15IGxpc3Qgb2YgZnVuY3Rpb25zIHRvIGluY2x1ZGUgaW4gYEZvY3VzU3ltYm9sc2AgaXMgZ29pbmcgdG8gYmU6XG4tIGB0cnlfdG9fdW5tYXBfaHVnZXRsYl9vbmVgXG4tIGB0dHVfYW5vbl9mb2xpb2Bcbi0gYHR0dV9hbm9uX2xhenlmcmVlX2ZvbGlvYFxuLSBgdHR1X2Fub25fc3dhcGJhY2tlZF9mb2xpb2Bcbi0gYHRyeV90b191bm1hcF9vbmVgXG5cblRoYXQgc2hvdWxkIGNvdmVyIHRoZSBjb3JlIGNoYW5nZXMgcmVsYXRlZCB0byB0aGUgZm9saW8gdW5tYXBwaW5nIGxvZ2ljLiBUaGUgcGF0Y2ggbWVudGlvbnMgcmV2ZXJzZSBtYXBwaW5nLCBodWdlIHBhZ2VzLCBhbmQgc3dhcCwgc28gdGhlIGZ1enppbmcgc2hvdWxkIHRhcmdldCB0aG9zZSBhcmVhcy5cblxuTm93LCBsZXQncyBsb29rIGF0IHRoZSBjb25maWdzIHRoYXQgYXJlIHJlbGV2YW50LiBJIGNhbiBzZWUgdGhlIHBhdGNoIHVzZXMgYEhVR0VUTEJGU2AsIGBTV0FQYCwgYE1FTU9SWV9GQUlMVVJFYCwgYW5kIGBIV1BPSVNPTl9JTkpFQ1RgLiBUaGUgbmV3IGxvZ2ljIGludGVyYWN0cyB3aXRoIG1lbW9yeSBmYWlsdXJlLCBhbmQgdGhlIGh3cG9pc29uIHRlc3RpbmcsIGFuZCBhbm9ueW1vdXMgbWVtb3J5IGFuZCBodWdldGxiLlxuXG5JIG5lZWQgdG8gbWFrZSBzdXJlIEkgZ2V0IHRoZSBtZW1vcnkgZmFpbHVyZSBsb2dpYyBjb3ZlcmVkIGluIHRoZSBmdXp6aW5nLiBUaGUgcGF0Y2ggaXMgYWxzbyB1c2luZyBgZm9saW9fdGVzdF9od3BvaXNvbihmb2xpbylgIHNvIGBUVFVfSFdQT0lTT05gIGlzIGdvaW5nIHRvIGJlIHJlbGV2YW50LiBgZm9saW9fdGVzdF9hbm9uKGZvbGlvKWAgZm9yIGFub255bW91cyBtZW1vcnksIGFuZCBgZm9saW9fdGVzdF9odWdldGxiKGZvbGlvKWAgZm9yIGh1Z2V0bGIuXG5cbk9rYXksIEkgdGhpbmsgSSd2ZSBnb3QgaXQgYWxsLiBUaW1lIHRvIGNhbGwgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI3ODcsIk91dHB1dFRva2VucyI6MjAxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDI4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA3VDIwOjM4OjQyLjgyNDQ2OTQ4NFoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc2Mjk3OTk5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJIVUdFVExCRlNcIixcbiAgICBcIlNXQVBcIixcbiAgICBcIk1FTU9SWV9GQUlMVVJFXCIsXG4gICAgXCJIV1BPSVNPTl9JTkpFQ1RcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ0cnlfdG9fdW5tYXBfaHVnZXRsYl9vbmVcIixcbiAgICBcInR0dV9hbm9uX2ZvbGlvXCIsXG4gICAgXCJ0dHVfYW5vbl9sYXp5ZnJlZV9mb2xpb1wiLFxuICAgIFwidHR1X2Fub25fc3dhcGJhY2tlZF9mb2xpb1wiLFxuICAgIFwidHJ5X3RvX3VubWFwX29uZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlZmFjdG9ycyB0aGUgdW5tYXBwaW5nIGxvZ2ljIGluIG1tL3JtYXAuYyBieSBleHRyYWN0aW5nIGh1Z2V0bGIgYW5kIGFub255bW91cyBmb2xpbyB1bm1hcHBpbmcgaW50byBzZXBhcmF0ZSBmdW5jdGlvbnMgKHRyeV90b191bm1hcF9odWdldGxiX29uZSwgdHR1X2Fub25fZm9saW8sIGV0Yy4pLiBJdCBtb2RpZmllcyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGxvZ2ljIHJlbGF0ZWQgdG8gcmV2ZXJzZSBtYXBwaW5nLCBodWdlIHBhZ2VzLCBhbmQgc3dhcC4gRnV6emluZyBzaG91bGQgZm9jdXMgb24gdGhlc2UgbmV3IGZ1bmN0aW9ucyB0byBlbnN1cmUgbm8gcmVncmVzc2lvbnMgb3IgYnVncyB3ZXJlIGludHJvZHVjZWQgZHVyaW5nIHRoZSByZWZhY3RvcmluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJIVUdFVExCRlNcIixcbiAgICBcIlNXQVBcIixcbiAgICBcIk1FTU9SWV9GQUlMVVJFXCIsXG4gICAgXCJIV1BPSVNPTl9JTkpFQ1RcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ0cnlfdG9fdW5tYXBfaHVnZXRsYl9vbmVcIixcbiAgICBcInR0dV9hbm9uX2ZvbGlvXCIsXG4gICAgXCJ0dHVfYW5vbl9sYXp5ZnJlZV9mb2xpb1wiLFxuICAgIFwidHR1X2Fub25fc3dhcGJhY2tlZF9mb2xpb1wiLFxuICAgIFwidHJ5X3RvX3VubWFwX29uZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlZmFjdG9ycyB0aGUgdW5tYXBwaW5nIGxvZ2ljIGluIG1tL3JtYXAuYyBieSBleHRyYWN0aW5nIGh1Z2V0bGIgYW5kIGFub255bW91cyBmb2xpbyB1bm1hcHBpbmcgaW50byBzZXBhcmF0ZSBmdW5jdGlvbnMgKHRyeV90b191bm1hcF9odWdldGxiX29uZSwgdHR1X2Fub25fZm9saW8sIGV0Yy4pLiBJdCBtb2RpZmllcyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGxvZ2ljIHJlbGF0ZWQgdG8gcmV2ZXJzZSBtYXBwaW5nLCBodWdlIHBhZ2VzLCBhbmQgc3dhcC4gRnV6emluZyBzaG91bGQgZm9jdXMgb24gdGhlc2UgbmV3IGZ1bmN0aW9ucyB0byBlbnN1cmUgbm8gcmVncmVzc2lvbnMgb3IgYnVncyB3ZXJlIGludHJvZHVjZWQgZHVyaW5nIHRoZSByZWZhY3RvcmluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflowzrp5v[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-07 19:46:23 +0000 UTC FinishedAt: 2026-07-07 20:38:44 +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": "db6ed2a3d31068ca5577466591b2521dee0508ca", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "HUGETLBFS", "SWAP", "MEMORY_FAILURE", "HWPOISON_INJECT" ], "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": "db6ed2a3d31068ca5577466591b2521dee0508ca", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "HUGETLBFS", "SWAP", "MEMORY_FAILURE", "HWPOISON_INJECT" ], "series_id": "9d0dc17d-dd1b-45cd-a613-7122afb78d86" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "try_to_unmap_hugetlb_one", "ttu_anon_folio", "ttu_anon_lazyfree_folio", "ttu_anon_swapbacked_folio", "try_to_unmap_one" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA3IDIwOjM3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0hVR0VUTEJGUyYjMzQ7LAogICAgJiMzNDtTV0FQJiMzNDssCiAgICAmIzM0O01FTU9SWV9GQUlMVVJFJiMzNDssCiAgICAmIzM0O0hXUE9JU09OX0lOSkVDVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3RyeV90b191bm1hcF9odWdldGxiX29uZSYjMzQ7LAogICAgJiMzNDt0dHVfYW5vbl9mb2xpbyYjMzQ7LAogICAgJiMzNDt0dHVfYW5vbl9sYXp5ZnJlZV9mb2xpbyYjMzQ7LAogICAgJiMzNDt0dHVfYW5vbl9zd2FwYmFja2VkX2ZvbGlvJiMzNDssCiAgICAmIzM0O3RyeV90b191bm1hcF9vbmUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSB1bm1hcHBpbmcgbG9naWMgaW4gbW0vcm1hcC5jIGJ5IGV4dHJhY3RpbmcgaHVnZXRsYiBhbmQgYW5vbnltb3VzIGZvbGlvIHVubWFwcGluZyBpbnRvIHNlcGFyYXRlIGZ1bmN0aW9ucyAodHJ5X3RvX3VubWFwX2h1Z2V0bGJfb25lLCB0dHVfYW5vbl9mb2xpbywgZXRjLikuIEl0IG1vZGlmaWVzIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgbG9naWMgcmVsYXRlZCB0byByZXZlcnNlIG1hcHBpbmcsIGh1Z2UgcGFnZXMsIGFuZCBzd2FwLiBGdXp6aW5nIHNob3VsZCBmb2N1cyBvbiB0aGVzZSBuZXcgZnVuY3Rpb25zIHRvIGVuc3VyZSBubyByZWdyZXNzaW9ucyBvciBidWdzIHdlcmUgaW50cm9kdWNlZCBkdXJpbmcgdGhlIHJlZmFjdG9yaW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA3IDIwOjM3PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgMWU4NGJjMGUwYzIwNmY5MTUwMDhhZDRjNzE5MDVjZWIyNzhiMWM1OFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgSnVsIDcgMjA6Mzc6NDQgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9odWdldGxiLmggYi9pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaFxuaW5kZXggNDExNTA3NmU0OTIyYWUuLmJmN2UxNjNlMzc3OWQ4IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9odWdldGxiLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvaHVnZXRsYi5oXG5AQCAtMTI3MSw2ICYjNDM7MTI3MSw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBodWdldGxiX2NvdW50X3N1Yihsb25nIGwsIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxuIH1cbiBcbiBwdGVfdCBodWdlX3B0ZXBfZ2V0KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsIHB0ZV90ICpwdGVwKTtcbiYjNDM7dW5zaWduZWQgbG9uZyBodWdlX3B0ZV9kaXJ0eShwdGVfdCBwdGUpO1xuIFxuIHN0YXRpYyBpbmxpbmUgcHRlX3QgaHVnZV9wdGVwX2NsZWFyX2ZsdXNoKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuIFx0XHRcdFx0XHQgIHVuc2lnbmVkIGxvbmcgYWRkciwgcHRlX3QgKnB0ZXApXG5kaWZmIC0tZ2l0IGEvbW0vcm1hcC5jIGIvbW0vcm1hcC5jXG5pbmRleCA5OTM5NDAwZTc3Yzc5YS4uZjAyMWVjZDUxYTRhMmUgMTAwNjQ0XG4tLS0gYS9tbS9ybWFwLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL3JtYXAuY1xuQEAgLTE5NzgsNiAmIzQzOzE5NzgsMjMzIEBAIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGZvbGlvX3VubWFwX3B0ZV9iYXRjaChzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuIFx0XHRcdFx0ICAgICBGUEJfUkVTUEVDVF9XUklURSB8IEZQQl9SRVNQRUNUX1NPRlRfRElSVFkpO1xuIH1cbiBcbiYjNDM7c3RhdGljIGJvb2wgdHJ5X3RvX3VubWFwX2h1Z2V0bGJfb25lKHN0cnVjdCBmb2xpbyAqZm9saW8sXG4mIzQzO1x0XHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyZXNzLCB2b2lkICphcmcpXG4mIzQzO3tcbiYjNDM7XHRERUZJTkVfRk9MSU9fVk1BX1dBTEsocHZtdywgZm9saW8sIHZtYSwgYWRkcmVzcywgMCk7XG4mIzQzO1x0c3RydWN0IG1tdV9ub3RpZmllcl9yYW5nZSByYW5nZTtcbiYjNDM7XHRlbnVtIHR0dV9mbGFncyBmbGFncyA9IChlbnVtIHR0dV9mbGFncykobG9uZylhcmc7XG4mIzQzO1x0c3RydWN0IG1tX3N0cnVjdCAqbW0gPSB2bWEtXHUwMDNldm1fbW07XG4mIzQzO1x0Y29uc3QgdW5zaWduZWQgbG9uZyBoc3ogPSBodWdlX3BhZ2Vfc2l6ZShoc3RhdGVfdm1hKHZtYSkpO1xuJiM0MztcdGJvb2wgcmV0ID0gdHJ1ZTtcbiYjNDM7XHRwdGVfdCBwdGV2YWw7XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogVGhlIHRyeV90b191bm1hcCgpIGlzIG9ubHkgcGFzc2VkIGEgaHVnZXRsYiBmb2xpbyBpbiB0aGUgY2FzZVxuJiM0MztcdCAqIHdoZXJlIHRoZSBodWdldGxiIGZvbGlvIGlzIHBvaXNvbmVkLlxuJiM0MztcdCAqL1xuJiM0MztcdFZNX1dBUk5fT05fRk9MSU8oIWZvbGlvX3Rlc3RfaHdwb2lzb24oZm9saW8pLCBmb2xpbyk7XG4mIzQzO1x0Vk1fV0FSTl9PTl9PTkNFKCEoZmxhZ3MgXHUwMDI2IFRUVV9IV1BPSVNPTikpO1xuJiM0MztcbiYjNDM7XHRyYW5nZS5lbmQgPSB2bWFfYWRkcmVzc19lbmQoXHUwMDI2cHZtdyk7XG4mIzQzO1x0bW11X25vdGlmaWVyX3JhbmdlX2luaXQoXHUwMDI2cmFuZ2UsIE1NVV9OT1RJRllfQ0xFQVIsIDAsIHZtYS1cdTAwM2V2bV9tbSxcbiYjNDM7XHRcdFx0XHRhZGRyZXNzLCByYW5nZS5lbmQpO1xuJiM0MztcdGFkanVzdF9yYW5nZV9pZl9wbWRfc2hhcmluZ19wb3NzaWJsZSh2bWEsIFx1MDAyNnJhbmdlLnN0YXJ0LCBcdTAwMjZyYW5nZS5lbmQpO1xuJiM0MztcdG1tdV9ub3RpZmllcl9pbnZhbGlkYXRlX3JhbmdlX3N0YXJ0KFx1MDAyNnJhbmdlKTtcbiYjNDM7XG4mIzQzO1x0LyogVGhlcmUgaXMgb25seSBhIHNpbmdsZSBtYXBwaW5nIGluIGEgVk1BLiAqL1xuJiM0MztcdGlmICghcGFnZV92bWFfbWFwcGVkX3dhbGsoXHUwMDI2cHZtdykpXG4mIzQzO1x0XHRnb3RvIHJhbmdlX2VuZDtcbiYjNDM7XG4mIzQzO1x0YWRkcmVzcyA9IHB2bXcuYWRkcmVzcztcbiYjNDM7XHRwdGV2YWwgPSBodWdlX3B0ZXBfZ2V0KG1tLCBhZGRyZXNzLCBwdm13LnB0ZSk7XG4mIzQzO1x0Vk1fV0FSTl9PTl9PTkNFKCFwdGVfcHJlc2VudChwdGV2YWwpKTtcbiYjNDM7XHRWTV9XQVJOX09OX09OQ0UocHRlX3BmbihwdGV2YWwpICE9IGZvbGlvX3Bmbihmb2xpbykpO1xuJiM0MztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIGh1Z2VfcG1kX3Vuc2hhcmUgbWF5IHVubWFwIGFuIGVudGlyZSBQTUQgcGFnZS4gVGhlcmUgaXMgbm8gd2F5IG9mXG4mIzQzO1x0ICoga25vd2luZyBleGFjdGx5IHdoaWNoIFBNRHMgbWF5IGJlIGNhY2hlZCBmb3IgdGhpcyBtbSwgc28gd2UgbXVzdFxuJiM0MztcdCAqIGZsdXNoIHRoZW0gYWxsLiBzdGFydC9lbmQgd2VyZSBhbHJlYWR5IGFkanVzdGVkIGFib3ZlIHRvIGNvdmVyIHRoaXNcbiYjNDM7XHQgKiByYW5nZS5cbiYjNDM7XHQgKi9cbiYjNDM7XHRmbHVzaF9jYWNoZV9yYW5nZSh2bWEsIHJhbmdlLnN0YXJ0LCByYW5nZS5lbmQpO1xuJiM0MztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIFRvIGNhbGwgaHVnZV9wbWRfdW5zaGFyZSwgaV9tbWFwX3J3c2VtIG11c3QgYmUgaGVsZCBpbiB3cml0ZSBtb2RlLlxuJiM0MztcdCAqIENhbGxlciBuZWVkcyB0byBleHBsaWNpdGx5IGRvIHRoaXMgb3V0c2lkZSBybWFwIHJvdXRpbmVzLlxuJiM0MztcdCAqXG4mIzQzO1x0ICogV2UgYWxzbyBtdXN0IGhvbGQgaHVnZXRsYiB2bWFfbG9jayBpbiB3cml0ZSBtb2RlLiBMb2NrIG9yZGVyIGRpY3RhdGVzXG4mIzQzO1x0ICogYWNxdWlyaW5nIHZtYV9sb2NrIEJFRk9SRSBpX21tYXBfcndzZW0uIFdlIGNhbiBvbmx5IHRyeSBsb2NrIGhlcmUgYW5kXG4mIzQzO1x0ICogZmFpbCBpZiB1bnN1Y2Nlc3NmdWwuXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKCFmb2xpb190ZXN0X2Fub24oZm9saW8pKSB7XG4mIzQzO1x0XHRzdHJ1Y3QgbW11X2dhdGhlciB0bGI7XG4mIzQzO1xuJiM0MztcdFx0Vk1fV0FSTl9PTighKGZsYWdzIFx1MDAyNiBUVFVfUk1BUF9MT0NLRUQpKTtcbiYjNDM7XHRcdGlmICghaHVnZXRsYl92bWFfdHJ5bG9ja193cml0ZSh2bWEpKSB7XG4mIzQzO1x0XHRcdHJldCA9IGZhbHNlO1xuJiM0MztcdFx0XHRnb3RvIHdhbGtfZG9uZTtcbiYjNDM7XHRcdH1cbiYjNDM7XG4mIzQzO1x0XHR0bGJfZ2F0aGVyX21tdV92bWEoXHUwMDI2dGxiLCB2bWEpO1xuJiM0MztcdFx0aWYgKGh1Z2VfcG1kX3Vuc2hhcmUoXHUwMDI2dGxiLCB2bWEsIGFkZHJlc3MsIHB2bXcucHRlKSkge1xuJiM0MztcdFx0XHRodWdldGxiX3ZtYV91bmxvY2tfd3JpdGUodm1hKTtcbiYjNDM7XHRcdFx0aHVnZV9wbWRfdW5zaGFyZV9mbHVzaChcdTAwMjZ0bGIsIHZtYSk7XG4mIzQzO1x0XHRcdHRsYl9maW5pc2hfbW11KFx1MDAyNnRsYik7XG4mIzQzO1x0XHRcdC8qXG4mIzQzO1x0XHRcdCAqIFRoZSBQTUQgdGFibGUgd2FzIHVubWFwcGVkLCBjb25zZXF1ZW50bHkgdW5tYXBwaW5nXG4mIzQzO1x0XHRcdCAqIHRoZSBmb2xpby5cbiYjNDM7XHRcdFx0ICovXG4mIzQzO1x0XHRcdGdvdG8gd2Fsa19kb25lO1xuJiM0MztcdFx0fVxuJiM0MztcdFx0aHVnZXRsYl92bWFfdW5sb2NrX3dyaXRlKHZtYSk7XG4mIzQzO1x0XHR0bGJfZmluaXNoX21tdShcdTAwMjZ0bGIpO1xuJiM0MztcdH1cbiYjNDM7XHRwdGV2YWwgPSBodWdlX3B0ZXBfY2xlYXJfZmx1c2godm1hLCBhZGRyZXNzLCBwdm13LnB0ZSk7XG4mIzQzO1x0aWYgKGh1Z2VfcHRlX2RpcnR5KHB0ZXZhbCkpXG4mIzQzO1x0XHRmb2xpb19tYXJrX2RpcnR5KGZvbGlvKTtcbiYjNDM7XG4mIzQzO1x0cHRldmFsID0gc3dwX2VudHJ5X3RvX3B0ZShtYWtlX2h3cG9pc29uX2VudHJ5KGZvbGlvX3BhZ2UoZm9saW8sIDApKSk7XG4mIzQzO1x0aHVnZXRsYl9jb3VudF9zdWIoZm9saW9fbnJfcGFnZXMoZm9saW8pLCBtbSk7XG4mIzQzO1x0c2V0X2h1Z2VfcHRlX2F0KG1tLCBhZGRyZXNzLCBwdm13LnB0ZSwgcHRldmFsLCBoc3opO1xuJiM0MztcdGh1Z2V0bGJfcmVtb3ZlX3JtYXAoZm9saW8pO1xuJiM0MztcdGZvbGlvX3B1dF9yZWZzKGZvbGlvLCAxKTtcbiYjNDM7XG4mIzQzO3dhbGtfZG9uZTpcbiYjNDM7XHRwYWdlX3ZtYV9tYXBwZWRfd2Fsa19kb25lKFx1MDAyNnB2bXcpO1xuJiM0MztyYW5nZV9lbmQ6XG4mIzQzO1x0bW11X25vdGlmaWVyX2ludmFsaWRhdGVfcmFuZ2VfZW5kKFx1MDAyNnJhbmdlKTtcbiYjNDM7XHRyZXR1cm4gcmV0O1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgdHR1X2Fub25fbGF6eWZyZWVfZm9saW8oc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4mIzQzO1x0XHRzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuJiM0Mzt7XG4mIzQzO1x0aW50IHJlZl9jb3VudCwgbWFwX2NvdW50O1xuJiM0MztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIFN5bmNocm9uaXplIHdpdGggZ3VwX3B0ZV9yYW5nZSgpOlxuJiM0MztcdCAqIC0gY2xlYXIgUFRFOyBiYXJyaWVyOyByZWFkIHJlZmNvdW50XG4mIzQzO1x0ICogLSBpbmMgcmVmY291bnQ7IGJhcnJpZXI7IHJlYWQgUFRFXG4mIzQzO1x0ICovXG4mIzQzO1x0c21wX21iKCk7XG4mIzQzO1xuJiM0MztcdHJlZl9jb3VudCA9IGZvbGlvX3JlZl9jb3VudChmb2xpbyk7XG4mIzQzO1x0bWFwX2NvdW50ID0gZm9saW9fbWFwY291bnQoZm9saW8pO1xuJiM0MztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIE9yZGVyIHJlYWRzIGZvciBwYWdlIHJlZmNvdW50IGFuZCBkaXJ0eSBmbGFnXG4mIzQzO1x0ICogKHNlZSBjb21tZW50cyBpbiBfX3JlbW92ZV9tYXBwaW5nKCkpLlxuJiM0MztcdCAqL1xuJiM0MztcdHNtcF9ybWIoKTtcbiYjNDM7XG4mIzQzO1x0aWYgKGZvbGlvX3Rlc3RfZGlydHkoZm9saW8pIFx1MDAyNlx1MDAyNiAhKHZtYS1cdTAwM2V2bV9mbGFncyBcdTAwMjYgVk1fRFJPUFBBQkxFKSkge1xuJiM0MztcdFx0LypcbiYjNDM7XHRcdCAqIHJlZGlydGllZCBlaXRoZXIgdXNpbmcgdGhlIHBhZ2UgdGFibGUgb3IgYSBwcmV2aW91c2x5XG4mIzQzO1x0XHQgKiBvYnRhaW5lZCBHVVAgcmVmZXJlbmNlLlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRmb2xpb19zZXRfc3dhcGJhY2tlZChmb2xpbyk7XG4mIzQzO1x0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAocmVmX2NvdW50ICE9IDEgJiM0MzsgbWFwX2NvdW50KSB7XG4mIzQzO1x0XHQvKlxuJiM0MztcdFx0ICogQWRkaXRpb25hbCByZWZlcmVuY2UuIENvdWxkIGJlIGEgR1VQIHJlZmVyZW5jZSBvciBhbnlcbiYjNDM7XHRcdCAqIHNwZWN1bGF0aXZlIHJlZmVyZW5jZS4gR1VQIHVzZXJzIG11c3QgbWFyayB0aGUgZm9saW9cbiYjNDM7XHRcdCAqIGRpcnR5IGlmIHRoZXJlIHdhcyBhIG1vZGlmaWNhdGlvbi4gVGhpcyBmb2xpbyBjYW5ub3QgYmVcbiYjNDM7XHRcdCAqIHJlY2xhaW1lZCByaWdodCBub3cgZWl0aGVyIHdheSwgc28gYWN0IGp1c3QgbGlrZSBub3RoaW5nXG4mIzQzO1x0XHQgKiBoYXBwZW5lZC5cbiYjNDM7XHRcdCAqIFdlJiMzOTtsbCBjb21lIGJhY2sgaGVyZSBsYXRlciBhbmQgZGV0ZWN0IGlmIHRoZSBmb2xpbyB3YXNcbiYjNDM7XHRcdCAqIGRpcnRpZWQgd2hlbiB0aGUgYWRkaXRpb25hbCByZWZlcmVuY2UgaXMgZ29uZS5cbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHRydWU7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBzZXRfc3dwX3B0ZV9hdChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyZXNzLFxuJiM0MztcdFx0cHRlX3QgKnB0ZXAsIHN3cF9lbnRyeV90IGVudHJ5LCBwdGVfdCBwdGV2YWwsIGJvb2wgYW5vbl9leGNsdXNpdmUpXG4mIzQzO3tcbiYjNDM7XHRwdGVfdCBzd3BfcHRlID0gc3dwX2VudHJ5X3RvX3B0ZShlbnRyeSk7XG4mIzQzO1xuJiM0MztcdGlmIChhbm9uX2V4Y2x1c2l2ZSlcbiYjNDM7XHRcdHN3cF9wdGUgPSBwdGVfc3dwX21rZXhjbHVzaXZlKHN3cF9wdGUpO1xuJiM0MztcbiYjNDM7XHRpZiAobGlrZWx5KHB0ZV9wcmVzZW50KHB0ZXZhbCkpKSB7XG4mIzQzO1x0XHRpZiAocHRlX3NvZnRfZGlydHkocHRldmFsKSlcbiYjNDM7XHRcdFx0c3dwX3B0ZSA9IHB0ZV9zd3BfbWtzb2Z0X2RpcnR5KHN3cF9wdGUpO1xuJiM0MztcdFx0aWYgKHB0ZV91ZmZkX3dwKHB0ZXZhbCkpXG4mIzQzO1x0XHRcdHN3cF9wdGUgPSBwdGVfc3dwX21rdWZmZF93cChzd3BfcHRlKTtcbiYjNDM7XHR9IGVsc2Uge1xuJiM0MztcdFx0LyogRGV2aWNlLWV4Y2x1c2l2ZSBlbnRyeSAqL1xuJiM0MztcdFx0aWYgKHB0ZV9zd3Bfc29mdF9kaXJ0eShwdGV2YWwpKVxuJiM0MztcdFx0XHRzd3BfcHRlID0gcHRlX3N3cF9ta3NvZnRfZGlydHkoc3dwX3B0ZSk7XG4mIzQzO1x0XHRpZiAocHRlX3N3cF91ZmZkX3dwKHB0ZXZhbCkpXG4mIzQzO1x0XHRcdHN3cF9wdGUgPSBwdGVfc3dwX21rdWZmZF93cChzd3BfcHRlKTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHNldF9wdGVfYXQobW0sIGFkZHJlc3MsIHB0ZXAsIHN3cF9wdGUpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgdHR1X2Fub25fc3dhcGJhY2tlZF9mb2xpbyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgc3RydWN0IGZvbGlvICpmb2xpbyxcbiYjNDM7XHRcdHN0cnVjdCBwYWdlICpzdWJwYWdlLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MsIHB0ZV90ICpwdGVwLFxuJiM0MztcdFx0cHRlX3QgcHRldmFsKVxuJiM0Mzt7XG4mIzQzO1x0Ym9vbCBhbm9uX2V4Y2x1c2l2ZSA9IGZvbGlvX3Rlc3RfYW5vbihmb2xpbykgXHUwMDI2XHUwMDI2IFBhZ2VBbm9uRXhjbHVzaXZlKHN1YnBhZ2UpO1xuJiM0MztcdHN3cF9lbnRyeV90IGVudHJ5ID0gcGFnZV9zd2FwX2VudHJ5KHN1YnBhZ2UpO1xuJiM0MztcdHN0cnVjdCBtbV9zdHJ1Y3QgKm1tID0gdm1hLVx1MDAzZXZtX21tO1xuJiM0MztcbiYjNDM7XHRpZiAoZm9saW9fZHVwX3N3YXAoZm9saW8sIHN1YnBhZ2UpIFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIGFyY2hfdW5tYXBfb25lKCkgaXMgZXhwZWN0ZWQgdG8gYmUgYSBOT1Agb25cbiYjNDM7XHQgKiBhcmNoaXRlY3R1cmVzIHdoZXJlIHdlIGNvdWxkIGhhdmUgUEZOIHN3YXAgUFRFcyxcbiYjNDM7XHQgKiBzbyB3ZSYjMzk7bGwgbm90IGNoZWNrL2NhcmUuXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKGFyY2hfdW5tYXBfb25lKG1tLCB2bWEsIGFkZHJlc3MsIHB0ZXZhbCkgXHUwMDNjIDApIHtcbiYjNDM7XHRcdGZvbGlvX3B1dF9zd2FwKGZvbGlvLCBzdWJwYWdlKTtcbiYjNDM7XHRcdHJldHVybiBmYWxzZTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdC8qIFNlZSBmb2xpb190cnlfc2hhcmVfYW5vbl9ybWFwKCk6IGNsZWFyIFBURSBmaXJzdC4gKi9cbiYjNDM7XHRpZiAoYW5vbl9leGNsdXNpdmUgXHUwMDI2XHUwMDI2IGZvbGlvX3RyeV9zaGFyZV9hbm9uX3JtYXBfcHRlKGZvbGlvLCBzdWJwYWdlKSkge1xuJiM0MztcdFx0Zm9saW9fcHV0X3N3YXAoZm9saW8sIHN1YnBhZ2UpO1xuJiM0MztcdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0bW1fcHJlcGFyZV9mb3Jfc3dhcF9lbnRyaWVzKG1tKTtcbiYjNDM7XHRkZWNfbW1fY291bnRlcihtbSwgTU1fQU5PTlBBR0VTKTtcbiYjNDM7XHRpbmNfbW1fY291bnRlcihtbSwgTU1fU1dBUEVOVFMpO1xuJiM0MztcdHNldF9zd3BfcHRlX2F0KG1tLCBhZGRyZXNzLCBwdGVwLCBlbnRyeSwgcHRldmFsLCBhbm9uX2V4Y2x1c2l2ZSk7XG4mIzQzO1x0cmV0dXJuIHRydWU7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbmxpbmUgYm9vbCB0dHVfYW5vbl9mb2xpbyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgc3RydWN0IGZvbGlvICpmb2xpbyxcbiYjNDM7XHRcdHN0cnVjdCBwYWdlICpzdWJwYWdlLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MsIHB0ZV90ICpwdGVwLFxuJiM0MztcdFx0cHRlX3QgcHRldmFsLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IG1tX3N0cnVjdCAqbW0gPSB2bWEtXHUwMDNldm1fbW07XG4mIzQzO1x0Ym9vbCByZXQ7XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogU3RvcmUgdGhlIHN3YXAgbG9jYXRpb24gaW4gdGhlIHB0ZS5cbiYjNDM7XHQgKiBTZWUgaGFuZGxlX3B0ZV9mYXVsdCgpIC4uLlxuJiM0MztcdCAqL1xuJiM0MztcdGlmICh1bmxpa2VseShmb2xpb190ZXN0X3N3YXBiYWNrZWQoZm9saW8pICE9XG4mIzQzO1x0XHRcdGZvbGlvX3Rlc3Rfc3dhcGNhY2hlKGZvbGlvKSkpIHtcbiYjNDM7XHRcdFdBUk5fT05fT05DRSgxKTtcbiYjNDM7XHRcdHJldHVybiBmYWxzZTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdC8qIE1BRFZfRlJFRSBwYWdlIGNoZWNrICovXG4mIzQzO1x0aWYgKCFmb2xpb190ZXN0X3N3YXBiYWNrZWQoZm9saW8pKSB7XG4mIzQzO1x0XHRyZXQgPSB0dHVfYW5vbl9sYXp5ZnJlZV9mb2xpbyh2bWEsIGZvbGlvKTtcbiYjNDM7XHRcdGlmIChyZXQpXG4mIzQzO1x0XHRcdGFkZF9tbV9jb3VudGVyKG1tLCBNTV9BTk9OUEFHRVMsIC1ucl9wYWdlcyk7XG4mIzQzO1x0fSBlbHNlIHtcbiYjNDM7XHRcdC8qIG5yX3BhZ2VzIFx1MDAzZSAxIG5vdCBzdXBwb3J0ZWQgeWV0ICovXG4mIzQzO1x0XHRyZXQgPSB0dHVfYW5vbl9zd2FwYmFja2VkX2ZvbGlvKHZtYSwgZm9saW8sIHN1YnBhZ2UsIGFkZHJlc3MsXG4mIzQzO1x0XHRcdFx0XHRcdHB0ZXAsIHB0ZXZhbCk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAoIXJldClcbiYjNDM7XHRcdHNldF9wdGVzKG1tLCBhZGRyZXNzLCBwdGVwLCBwdGV2YWwsIG5yX3BhZ2VzKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHJldDtcbiYjNDM7fVxuJiM0MztcbiAvKlxuICAqIEBhcmc6IGVudW0gdHR1X2ZsYWdzIHdpbGwgYmUgcGFzc2VkIHRvIHRoaXMgYXJndW1lbnRcbiAgKi9cbkBAIC0xOTg2LDE0ICYjNDM7MjIxMywxMyBAQCBzdGF0aWMgYm9vbCB0cnlfdG9fdW5tYXBfb25lKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuIHtcbiBcdHN0cnVjdCBtbV9zdHJ1Y3QgKm1tID0gdm1hLVx1MDAzZXZtX21tO1xuIFx0REVGSU5FX0ZPTElPX1ZNQV9XQUxLKHB2bXcsIGZvbGlvLCB2bWEsIGFkZHJlc3MsIDApO1xuLVx0Ym9vbCBhbm9uX2V4Y2x1c2l2ZSwgcmV0ID0gdHJ1ZTtcbiYjNDM7XHRib29sIHJldCA9IHRydWU7XG4gXHRwdGVfdCBwdGV2YWw7XG4gXHRzdHJ1Y3QgcGFnZSAqc3VicGFnZTtcbiBcdHN0cnVjdCBtbXVfbm90aWZpZXJfcmFuZ2UgcmFuZ2U7XG4gXHRlbnVtIHR0dV9mbGFncyBmbGFncyA9IChlbnVtIHR0dV9mbGFncykobG9uZylhcmc7XG4gXHR1bnNpZ25lZCBsb25nIG5yX3BhZ2VzID0gMSwgZW5kX2FkZHI7XG4gXHR1bnNpZ25lZCBsb25nIHBmbjtcbi1cdHVuc2lnbmVkIGxvbmcgaHN6ID0gMDtcbiBcdGludCBwdGVzID0gMDtcbiBcbiBcdC8qXG5AQCAtMjAwNyw4ICYjNDM7MjIzMyw2IEBAIHN0YXRpYyBib29sIHRyeV90b191bm1hcF9vbmUoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4gXG4gXHQvKlxuIFx0ICogRm9yIFRIUCwgd2UgaGF2ZSB0byBhc3N1bWUgdGhlIHdvcnNlIGNhc2UgaWUgcG1kIGZvciBpbnZhbGlkYXRpb24uXG4tXHQgKiBGb3IgaHVnZXRsYiwgaXQgY291bGQgYmUgbXVjaCB3b3JzZSBpZiB3ZSBuZWVkIHRvIGRvIHB1ZFxuLVx0ICogaW52YWxpZGF0aW9uIGluIHRoZSBjYXNlIG9mIHBtZCBzaGFyaW5nLlxuIFx0ICpcbiBcdCAqIE5vdGUgdGhhdCB0aGUgZm9saW8gY2FuIG5vdCBiZSBmcmVlZCBpbiB0aGlzIGZ1bmN0aW9uIGFzIGNhbGwgb2ZcbiBcdCAqIHRyeV90b191bm1hcCgpIG11c3QgaG9sZCBhIHJlZmVyZW5jZSBvbiB0aGUgZm9saW8uXG5AQCAtMjAxNiwxNyAmIzQzOzIyNDAsNiBAQCBzdGF0aWMgYm9vbCB0cnlfdG9fdW5tYXBfb25lKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuIFx0cmFuZ2UuZW5kID0gdm1hX2FkZHJlc3NfZW5kKFx1MDAyNnB2bXcpO1xuIFx0bW11X25vdGlmaWVyX3JhbmdlX2luaXQoXHUwMDI2cmFuZ2UsIE1NVV9OT1RJRllfQ0xFQVIsIDAsIHZtYS1cdTAwM2V2bV9tbSxcbiBcdFx0XHRcdGFkZHJlc3MsIHJhbmdlLmVuZCk7XG4tXHRpZiAoZm9saW9fdGVzdF9odWdldGxiKGZvbGlvKSkge1xuLVx0XHQvKlxuLVx0XHQgKiBJZiBzaGFyaW5nIGlzIHBvc3NpYmxlLCBzdGFydCBhbmQgZW5kIHdpbGwgYmUgYWRqdXN0ZWRcbi1cdFx0ICogYWNjb3JkaW5nbHkuXG4tXHRcdCAqL1xuLVx0XHRhZGp1c3RfcmFuZ2VfaWZfcG1kX3NoYXJpbmdfcG9zc2libGUodm1hLCBcdTAwMjZyYW5nZS5zdGFydCxcbi1cdFx0XHRcdFx0XHQgICAgIFx1MDAyNnJhbmdlLmVuZCk7XG4tXG4tXHRcdC8qIFdlIG5lZWQgdGhlIGh1Z2UgcGFnZSBzaXplIGZvciBzZXRfaHVnZV9wdGVfYXQoKSAqL1xuLVx0XHRoc3ogPSBodWdlX3BhZ2Vfc2l6ZShoc3RhdGVfdm1hKHZtYSkpO1xuLVx0fVxuIFx0bW11X25vdGlmaWVyX2ludmFsaWRhdGVfcmFuZ2Vfc3RhcnQoXHUwMDI2cmFuZ2UpO1xuIFxuIFx0d2hpbGUgKHBhZ2Vfdm1hX21hcHBlZF93YWxrKFx1MDAyNnB2bXcpKSB7XG5AQCAtMjExMSw2NSAmIzQzOzIzMjQsMTEgQEAgc3RhdGljIGJvb2wgdHJ5X3RvX3VubWFwX29uZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbiBcdFx0XHRjb25zdCBzb2Z0bGVhZl90IGVudHJ5ID0gc29mdGxlYWZfZnJvbV9wdGUocHRldmFsKTtcbiBcbiBcdFx0XHRwZm4gPSBzb2Z0bGVhZl90b19wZm4oZW50cnkpO1xuLVx0XHRcdFZNX1dBUk5fT05fRk9MSU8oZm9saW9fdGVzdF9odWdldGxiKGZvbGlvKSwgZm9saW8pO1xuIFx0XHR9XG4gXG4gXHRcdHN1YnBhZ2UgPSBmb2xpb19wYWdlKGZvbGlvLCBwZm4gLSBmb2xpb19wZm4oZm9saW8pKTtcbi1cdFx0YW5vbl9leGNsdXNpdmUgPSBmb2xpb190ZXN0X2Fub24oZm9saW8pIFx1MDAyNlx1MDAyNlxuLVx0XHRcdFx0IFBhZ2VBbm9uRXhjbHVzaXZlKHN1YnBhZ2UpO1xuIFxuLVx0XHRpZiAoZm9saW9fdGVzdF9odWdldGxiKGZvbGlvKSkge1xuLVx0XHRcdGJvb2wgYW5vbiA9IGZvbGlvX3Rlc3RfYW5vbihmb2xpbyk7XG4tXG4tXHRcdFx0Lypcbi1cdFx0XHQgKiBUaGUgdHJ5X3RvX3VubWFwKCkgaXMgb25seSBwYXNzZWQgYSBodWdldGxiIHBhZ2Vcbi1cdFx0XHQgKiBpbiB0aGUgY2FzZSB3aGVyZSB0aGUgaHVnZXRsYiBwYWdlIGlzIHBvaXNvbmVkLlxuLVx0XHRcdCAqL1xuLVx0XHRcdFZNX0JVR19PTl9QQUdFKCFQYWdlSFdQb2lzb24oc3VicGFnZSksIHN1YnBhZ2UpO1xuLVx0XHRcdC8qXG4tXHRcdFx0ICogaHVnZV9wbWRfdW5zaGFyZSBtYXkgdW5tYXAgYW4gZW50aXJlIFBNRCBwYWdlLlxuLVx0XHRcdCAqIFRoZXJlIGlzIG5vIHdheSBvZiBrbm93aW5nIGV4YWN0bHkgd2hpY2ggUE1EcyBtYXlcbi1cdFx0XHQgKiBiZSBjYWNoZWQgZm9yIHRoaXMgbW0sIHNvIHdlIG11c3QgZmx1c2ggdGhlbSBhbGwuXG4tXHRcdFx0ICogc3RhcnQvZW5kIHdlcmUgYWxyZWFkeSBhZGp1c3RlZCBhYm92ZSB0byBjb3ZlciB0aGlzXG4tXHRcdFx0ICogcmFuZ2UuXG4tXHRcdFx0ICovXG4tXHRcdFx0Zmx1c2hfY2FjaGVfcmFuZ2Uodm1hLCByYW5nZS5zdGFydCwgcmFuZ2UuZW5kKTtcbi1cbi1cdFx0XHQvKlxuLVx0XHRcdCAqIFRvIGNhbGwgaHVnZV9wbWRfdW5zaGFyZSwgaV9tbWFwX3J3c2VtIG11c3QgYmVcbi1cdFx0XHQgKiBoZWxkIGluIHdyaXRlIG1vZGUuICBDYWxsZXIgbmVlZHMgdG8gZXhwbGljaXRseVxuLVx0XHRcdCAqIGRvIHRoaXMgb3V0c2lkZSBybWFwIHJvdXRpbmVzLlxuLVx0XHRcdCAqXG4tXHRcdFx0ICogV2UgYWxzbyBtdXN0IGhvbGQgaHVnZXRsYiB2bWFfbG9jayBpbiB3cml0ZSBtb2RlLlxuLVx0XHRcdCAqIExvY2sgb3JkZXIgZGljdGF0ZXMgYWNxdWlyaW5nIHZtYV9sb2NrIEJFRk9SRVxuLVx0XHRcdCAqIGlfbW1hcF9yd3NlbS4gIFdlIGNhbiBvbmx5IHRyeSBsb2NrIGhlcmUgYW5kIGZhaWxcbi1cdFx0XHQgKiBpZiB1bnN1Y2Nlc3NmdWwuXG4tXHRcdFx0ICovXG4tXHRcdFx0aWYgKCFhbm9uKSB7XG4tXHRcdFx0XHRzdHJ1Y3QgbW11X2dhdGhlciB0bGI7XG4tXG4tXHRcdFx0XHRWTV9CVUdfT04oIShmbGFncyBcdTAwMjYgVFRVX1JNQVBfTE9DS0VEKSk7XG4tXHRcdFx0XHRpZiAoIWh1Z2V0bGJfdm1hX3RyeWxvY2tfd3JpdGUodm1hKSlcbi1cdFx0XHRcdFx0Z290byB3YWxrX2Fib3J0O1xuLVxuLVx0XHRcdFx0dGxiX2dhdGhlcl9tbXVfdm1hKFx1MDAyNnRsYiwgdm1hKTtcbi1cdFx0XHRcdGlmIChodWdlX3BtZF91bnNoYXJlKFx1MDAyNnRsYiwgdm1hLCBhZGRyZXNzLCBwdm13LnB0ZSkpIHtcbi1cdFx0XHRcdFx0aHVnZXRsYl92bWFfdW5sb2NrX3dyaXRlKHZtYSk7XG4tXHRcdFx0XHRcdGh1Z2VfcG1kX3Vuc2hhcmVfZmx1c2goXHUwMDI2dGxiLCB2bWEpO1xuLVx0XHRcdFx0XHR0bGJfZmluaXNoX21tdShcdTAwMjZ0bGIpO1xuLVx0XHRcdFx0XHQvKlxuLVx0XHRcdFx0XHQgKiBUaGUgUE1EIHRhYmxlIHdhcyB1bm1hcHBlZCxcbi1cdFx0XHRcdFx0ICogY29uc2VxdWVudGx5IHVubWFwcGluZyB0aGUgZm9saW8uXG4tXHRcdFx0XHRcdCAqL1xuLVx0XHRcdFx0XHRnb3RvIHdhbGtfZG9uZTtcbi1cdFx0XHRcdH1cbi1cdFx0XHRcdGh1Z2V0bGJfdm1hX3VubG9ja193cml0ZSh2bWEpO1xuLVx0XHRcdFx0dGxiX2ZpbmlzaF9tbXUoXHUwMDI2dGxiKTtcbi1cdFx0XHR9XG4tXHRcdFx0cHRldmFsID0gaHVnZV9wdGVwX2NsZWFyX2ZsdXNoKHZtYSwgYWRkcmVzcywgcHZtdy5wdGUpO1xuLVx0XHRcdGlmIChwdGVfZGlydHkocHRldmFsKSlcbi1cdFx0XHRcdGZvbGlvX21hcmtfZGlydHkoZm9saW8pO1xuLVx0XHR9IGVsc2UgaWYgKGxpa2VseShwdGVfcHJlc2VudChwdGV2YWwpKSkge1xuJiM0MztcdFx0aWYgKGxpa2VseShwdGVfcHJlc2VudChwdGV2YWwpKSkge1xuIFx0XHRcdG5yX3BhZ2VzID0gZm9saW9fdW5tYXBfcHRlX2JhdGNoKGZvbGlvLCBcdTAwMjZwdm13LCBmbGFncywgcHRldmFsKTtcbiBcdFx0XHRlbmRfYWRkciA9IGFkZHJlc3MgJiM0MzsgbnJfcGFnZXMgKiBQQUdFX1NJWkU7XG4gXHRcdFx0Zmx1c2hfY2FjaGVfcmFuZ2Uodm1hLCBhZGRyZXNzLCBlbmRfYWRkcik7XG5AQCAtMjIwNCwxNiAmIzQzOzIzNjMsMTQgQEAgc3RhdGljIGJvb2wgdHJ5X3RvX3VubWFwX29uZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbiBcdFx0LyogVXBkYXRlIGhpZ2ggd2F0ZXJtYXJrIGJlZm9yZSB3ZSBsb3dlciByc3MgKi9cbiBcdFx0dXBkYXRlX2hpd2F0ZXJfcnNzKG1tKTtcbiBcbi1cdFx0aWYgKFBhZ2VIV1BvaXNvbihzdWJwYWdlKSBcdTAwMjZcdTAwMjYgKGZsYWdzIFx1MDAyNiBUVFVfSFdQT0lTT04pKSB7XG4mIzQzO1x0XHQvKlxuJiM0MztcdFx0ICogV2l0aCBUVFVfSFdQT0lTT04sIHdlIG9ubHkgZXhwZWN0IHNtYWxsIGZvbGlvcyBvciBodWdldGxiXG4mIzQzO1x0XHQgKiBmb2xpb3MgaGVyZSBmb3Igbm93LlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRpZiAoZm9saW9fdGVzdF9od3BvaXNvbihmb2xpbykgXHUwMDI2XHUwMDI2IChmbGFncyBcdTAwMjYgVFRVX0hXUE9JU09OKSkge1xuIFx0XHRcdHB0ZXZhbCA9IHN3cF9lbnRyeV90b19wdGUobWFrZV9od3BvaXNvbl9lbnRyeShzdWJwYWdlKSk7XG4tXHRcdFx0aWYgKGZvbGlvX3Rlc3RfaHVnZXRsYihmb2xpbykpIHtcbi1cdFx0XHRcdGh1Z2V0bGJfY291bnRfc3ViKGZvbGlvX25yX3BhZ2VzKGZvbGlvKSwgbW0pO1xuLVx0XHRcdFx0c2V0X2h1Z2VfcHRlX2F0KG1tLCBhZGRyZXNzLCBwdm13LnB0ZSwgcHRldmFsLFxuLVx0XHRcdFx0XHRcdGhzeik7XG4tXHRcdFx0fSBlbHNlIHtcbi1cdFx0XHRcdGRlY19tbV9jb3VudGVyKG1tLCBtbV9jb3VudGVyKGZvbGlvKSk7XG4tXHRcdFx0XHRzZXRfcHRlX2F0KG1tLCBhZGRyZXNzLCBwdm13LnB0ZSwgcHRldmFsKTtcbi1cdFx0XHR9XG4mIzQzO1x0XHRcdGRlY19tbV9jb3VudGVyKG1tLCBtbV9jb3VudGVyKGZvbGlvKSk7XG4mIzQzO1x0XHRcdHNldF9wdGVfYXQobW0sIGFkZHJlc3MsIHB2bXcucHRlLCBwdGV2YWwpO1xuIFx0XHR9IGVsc2UgaWYgKGxpa2VseShwdGVfcHJlc2VudChwdGV2YWwpKSBcdTAwMjZcdTAwMjYgcHRlX3VudXNlZChwdGV2YWwpIFx1MDAyNlx1MDAyNlxuIFx0XHRcdCAgICF1c2VyZmF1bHRmZF9hcm1lZCh2bWEpKSB7XG4gXHRcdFx0LypcbkBAIC0yMjI4LDEwNCAmIzQzOzIzODUsMTEgQEAgc3RhdGljIGJvb2wgdHJ5X3RvX3VubWFwX29uZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbiBcdFx0XHQgKi9cbiBcdFx0XHRkZWNfbW1fY291bnRlcihtbSwgbW1fY291bnRlcihmb2xpbykpO1xuIFx0XHR9IGVsc2UgaWYgKGZvbGlvX3Rlc3RfYW5vbihmb2xpbykpIHtcbi1cdFx0XHRzd3BfZW50cnlfdCBlbnRyeSA9IHBhZ2Vfc3dhcF9lbnRyeShzdWJwYWdlKTtcbi1cdFx0XHRwdGVfdCBzd3BfcHRlO1xuLVx0XHRcdC8qXG4tXHRcdFx0ICogU3RvcmUgdGhlIHN3YXAgbG9jYXRpb24gaW4gdGhlIHB0ZS5cbi1cdFx0XHQgKiBTZWUgaGFuZGxlX3B0ZV9mYXVsdCgpIC4uLlxuLVx0XHRcdCAqL1xuLVx0XHRcdGlmICh1bmxpa2VseShmb2xpb190ZXN0X3N3YXBiYWNrZWQoZm9saW8pICE9XG4tXHRcdFx0XHRcdGZvbGlvX3Rlc3Rfc3dhcGNhY2hlKGZvbGlvKSkpIHtcbi1cdFx0XHRcdFdBUk5fT05fT05DRSgxKTtcbiYjNDM7XHRcdFx0aWYgKCF0dHVfYW5vbl9mb2xpbyh2bWEsIGZvbGlvLCBzdWJwYWdlLCBhZGRyZXNzLFxuJiM0MztcdFx0XHRcdFx0ICAgIHB2bXcucHRlLCBwdGV2YWwsIG5yX3BhZ2VzKSlcbiBcdFx0XHRcdGdvdG8gd2Fsa19hYm9ydDtcbi1cdFx0XHR9XG4tXG4tXHRcdFx0LyogTUFEVl9GUkVFIHBhZ2UgY2hlY2sgKi9cbi1cdFx0XHRpZiAoIWZvbGlvX3Rlc3Rfc3dhcGJhY2tlZChmb2xpbykpIHtcbi1cdFx0XHRcdGludCByZWZfY291bnQsIG1hcF9jb3VudDtcbi1cbi1cdFx0XHRcdC8qXG4tXHRcdFx0XHQgKiBTeW5jaHJvbml6ZSB3aXRoIGd1cF9wdGVfcmFuZ2UoKTpcbi1cdFx0XHRcdCAqIC0gY2xlYXIgUFRFOyBiYXJyaWVyOyByZWFkIHJlZmNvdW50XG4tXHRcdFx0XHQgKiAtIGluYyByZWZjb3VudDsgYmFycmllcjsgcmVhZCBQVEVcbi1cdFx0XHRcdCAqL1xuLVx0XHRcdFx0c21wX21iKCk7XG4gXG4tXHRcdFx0XHRyZWZfY291bnQgPSBmb2xpb19yZWZfY291bnQoZm9saW8pO1xuLVx0XHRcdFx0bWFwX2NvdW50ID0gZm9saW9fbWFwY291bnQoZm9saW8pO1xuLVxuLVx0XHRcdFx0Lypcbi1cdFx0XHRcdCAqIE9yZGVyIHJlYWRzIGZvciBwYWdlIHJlZmNvdW50IGFuZCBkaXJ0eSBmbGFnXG4tXHRcdFx0XHQgKiAoc2VlIGNvbW1lbnRzIGluIF9fcmVtb3ZlX21hcHBpbmcoKSkuXG4tXHRcdFx0XHQgKi9cbi1cdFx0XHRcdHNtcF9ybWIoKTtcbi1cbi1cdFx0XHRcdGlmIChmb2xpb190ZXN0X2RpcnR5KGZvbGlvKSBcdTAwMjZcdTAwMjYgISh2bWEtXHUwMDNldm1fZmxhZ3MgXHUwMDI2IFZNX0RST1BQQUJMRSkpIHtcbi1cdFx0XHRcdFx0Lypcbi1cdFx0XHRcdFx0ICogcmVkaXJ0aWVkIGVpdGhlciB1c2luZyB0aGUgcGFnZSB0YWJsZSBvciBhIHByZXZpb3VzbHlcbi1cdFx0XHRcdFx0ICogb2J0YWluZWQgR1VQIHJlZmVyZW5jZS5cbi1cdFx0XHRcdFx0ICovXG4tXHRcdFx0XHRcdHNldF9wdGVzKG1tLCBhZGRyZXNzLCBwdm13LnB0ZSwgcHRldmFsLCBucl9wYWdlcyk7XG4tXHRcdFx0XHRcdGZvbGlvX3NldF9zd2FwYmFja2VkKGZvbGlvKTtcbi1cdFx0XHRcdFx0Z290byB3YWxrX2Fib3J0O1xuLVx0XHRcdFx0fSBlbHNlIGlmIChyZWZfY291bnQgIT0gMSAmIzQzOyBtYXBfY291bnQpIHtcbi1cdFx0XHRcdFx0Lypcbi1cdFx0XHRcdFx0ICogQWRkaXRpb25hbCByZWZlcmVuY2UuIENvdWxkIGJlIGEgR1VQIHJlZmVyZW5jZSBvciBhbnlcbi1cdFx0XHRcdFx0ICogc3BlY3VsYXRpdmUgcmVmZXJlbmNlLiBHVVAgdXNlcnMgbXVzdCBtYXJrIHRoZSBmb2xpb1xuLVx0XHRcdFx0XHQgKiBkaXJ0eSBpZiB0aGVyZSB3YXMgYSBtb2RpZmljYXRpb24uIFRoaXMgZm9saW8gY2Fubm90IGJlXG4tXHRcdFx0XHRcdCAqIHJlY2xhaW1lZCByaWdodCBub3cgZWl0aGVyIHdheSwgc28gYWN0IGp1c3QgbGlrZSBub3RoaW5nXG4tXHRcdFx0XHRcdCAqIGhhcHBlbmVkLlxuLVx0XHRcdFx0XHQgKiBXZSYjMzk7bGwgY29tZSBiYWNrIGhlcmUgbGF0ZXIgYW5kIGRldGVjdCBpZiB0aGUgZm9saW8gd2FzXG4tXHRcdFx0XHRcdCAqIGRpcnRpZWQgd2hlbiB0aGUgYWRkaXRpb25hbCByZWZlcmVuY2UgaXMgZ29uZS5cbi1cdFx0XHRcdFx0ICovXG4tXHRcdFx0XHRcdHNldF9wdGVzKG1tLCBhZGRyZXNzLCBwdm13LnB0ZSwgcHRldmFsLCBucl9wYWdlcyk7XG4tXHRcdFx0XHRcdGdvdG8gd2Fsa19hYm9ydDtcbi1cdFx0XHRcdH1cbi1cdFx0XHRcdGFkZF9tbV9jb3VudGVyKG1tLCBNTV9BTk9OUEFHRVMsIC1ucl9wYWdlcyk7XG4tXHRcdFx0XHRnb3RvIGRpc2NhcmQ7XG4tXHRcdFx0fVxuLVxuLVx0XHRcdGlmIChmb2xpb19kdXBfc3dhcChmb2xpbywgc3VicGFnZSkgXHUwMDNjIDApIHtcbi1cdFx0XHRcdHNldF9wdGVfYXQobW0sIGFkZHJlc3MsIHB2bXcucHRlLCBwdGV2YWwpO1xuLVx0XHRcdFx0Z290byB3YWxrX2Fib3J0O1xuLVx0XHRcdH1cbi1cbi1cdFx0XHQvKlxuLVx0XHRcdCAqIGFyY2hfdW5tYXBfb25lKCkgaXMgZXhwZWN0ZWQgdG8gYmUgYSBOT1Agb25cbi1cdFx0XHQgKiBhcmNoaXRlY3R1cmVzIHdoZXJlIHdlIGNvdWxkIGhhdmUgUEZOIHN3YXAgUFRFcyxcbi1cdFx0XHQgKiBzbyB3ZSYjMzk7bGwgbm90IGNoZWNrL2NhcmUuXG4tXHRcdFx0ICovXG4tXHRcdFx0aWYgKGFyY2hfdW5tYXBfb25lKG1tLCB2bWEsIGFkZHJlc3MsIHB0ZXZhbCkgXHUwMDNjIDApIHtcbi1cdFx0XHRcdGZvbGlvX3B1dF9zd2FwKGZvbGlvLCBzdWJwYWdlKTtcbi1cdFx0XHRcdHNldF9wdGVfYXQobW0sIGFkZHJlc3MsIHB2bXcucHRlLCBwdGV2YWwpO1xuLVx0XHRcdFx0Z290byB3YWxrX2Fib3J0O1xuLVx0XHRcdH1cbi1cbi1cdFx0XHQvKiBTZWUgZm9saW9fdHJ5X3NoYXJlX2Fub25fcm1hcCgpOiBjbGVhciBQVEUgZmlyc3QuICovXG4tXHRcdFx0aWYgKGFub25fZXhjbHVzaXZlIFx1MDAyNlx1MDAyNlxuLVx0XHRcdCAgICBmb2xpb190cnlfc2hhcmVfYW5vbl9ybWFwX3B0ZShmb2xpbywgc3VicGFnZSkpIHtcbi1cdFx0XHRcdGZvbGlvX3B1dF9zd2FwKGZvbGlvLCBzdWJwYWdlKTtcbi1cdFx0XHRcdHNldF9wdGVfYXQobW0sIGFkZHJlc3MsIHB2bXcucHRlLCBwdGV2YWwpO1xuLVx0XHRcdFx0Z290byB3YWxrX2Fib3J0O1xuLVx0XHRcdH1cbi1cdFx0XHRtbV9wcmVwYXJlX2Zvcl9zd2FwX2VudHJpZXMobW0pO1xuLVx0XHRcdGRlY19tbV9jb3VudGVyKG1tLCBNTV9BTk9OUEFHRVMpO1xuLVx0XHRcdGluY19tbV9jb3VudGVyKG1tLCBNTV9TV0FQRU5UUyk7XG4tXHRcdFx0c3dwX3B0ZSA9IHN3cF9lbnRyeV90b19wdGUoZW50cnkpO1xuLVx0XHRcdGlmIChhbm9uX2V4Y2x1c2l2ZSlcbi1cdFx0XHRcdHN3cF9wdGUgPSBwdGVfc3dwX21rZXhjbHVzaXZlKHN3cF9wdGUpO1xuLVx0XHRcdGlmIChsaWtlbHkocHRlX3ByZXNlbnQocHRldmFsKSkpIHtcbi1cdFx0XHRcdGlmIChwdGVfc29mdF9kaXJ0eShwdGV2YWwpKVxuLVx0XHRcdFx0XHRzd3BfcHRlID0gcHRlX3N3cF9ta3NvZnRfZGlydHkoc3dwX3B0ZSk7XG4tXHRcdFx0XHRpZiAocHRlX3VmZmRfd3AocHRldmFsKSlcbi1cdFx0XHRcdFx0c3dwX3B0ZSA9IHB0ZV9zd3BfbWt1ZmZkX3dwKHN3cF9wdGUpO1xuLVx0XHRcdH0gZWxzZSB7XG4tXHRcdFx0XHRpZiAocHRlX3N3cF9zb2Z0X2RpcnR5KHB0ZXZhbCkpXG4tXHRcdFx0XHRcdHN3cF9wdGUgPSBwdGVfc3dwX21rc29mdF9kaXJ0eShzd3BfcHRlKTtcbi1cdFx0XHRcdGlmIChwdGVfc3dwX3VmZmRfd3AocHRldmFsKSlcbi1cdFx0XHRcdFx0c3dwX3B0ZSA9IHB0ZV9zd3BfbWt1ZmZkX3dwKHN3cF9wdGUpO1xuLVx0XHRcdH1cbi1cdFx0XHRzZXRfcHRlX2F0KG1tLCBhZGRyZXNzLCBwdm13LnB0ZSwgc3dwX3B0ZSk7XG4mIzQzO1x0XHRcdGdvdG8gZmluaXNoX3VubWFwO1xuIFx0XHR9IGVsc2Uge1xuIFx0XHRcdC8qXG4gXHRcdFx0ICogVGhpcyBpcyBhIGxvY2tlZCBmaWxlLWJhY2tlZCBmb2xpbyxcbkBAIC0yMzQwLDEyICYjNDM7MjQwNCw4IEBAIHN0YXRpYyBib29sIHRyeV90b191bm1hcF9vbmUoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4gXHRcdFx0ICovXG4gXHRcdFx0YWRkX21tX2NvdW50ZXIobW0sIG1tX2NvdW50ZXJfZmlsZShmb2xpbyksIC1ucl9wYWdlcyk7XG4gXHRcdH1cbi1kaXNjYXJkOlxuLVx0XHRpZiAodW5saWtlbHkoZm9saW9fdGVzdF9odWdldGxiKGZvbGlvKSkpIHtcbi1cdFx0XHRodWdldGxiX3JlbW92ZV9ybWFwKGZvbGlvKTtcbi1cdFx0fSBlbHNlIHtcbi1cdFx0XHRmb2xpb19yZW1vdmVfcm1hcF9wdGVzKGZvbGlvLCBzdWJwYWdlLCBucl9wYWdlcywgdm1hKTtcbi1cdFx0fVxuJiM0MztmaW5pc2hfdW5tYXA6XG4mIzQzO1x0XHRmb2xpb19yZW1vdmVfcm1hcF9wdGVzKGZvbGlvLCBzdWJwYWdlLCBucl9wYWdlcywgdm1hKTtcbiBcdFx0aWYgKHZtYS1cdTAwM2V2bV9mbGFncyBcdTAwMjYgVk1fTE9DS0VEKVxuIFx0XHRcdG1sb2NrX2RyYWluX2xvY2FsKCk7XG4gXHRcdGZvbGlvX3B1dF9yZWZzKGZvbGlvLCBucl9wYWdlcyk7XG5AQCAtMjM5Myw3ICYjNDM7MjQ1Myw4IEBAIHN0YXRpYyBpbnQgZm9saW9fbm90X21hcHBlZChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIHZvaWQgdHJ5X3RvX3VubWFwKHN0cnVjdCBmb2xpbyAqZm9saW8sIGVudW0gdHR1X2ZsYWdzIGZsYWdzKVxuIHtcbiBcdHN0cnVjdCBybWFwX3dhbGtfY29udHJvbCByd2MgPSB7XG4tXHRcdC5ybWFwX29uZSA9IHRyeV90b191bm1hcF9vbmUsXG4mIzQzO1x0XHQucm1hcF9vbmUgPSBmb2xpb190ZXN0X2h1Z2V0bGIoZm9saW8pID9cbiYjNDM7XHRcdFx0XHR0cnlfdG9fdW5tYXBfaHVnZXRsYl9vbmUgOiB0cnlfdG9fdW5tYXBfb25lLFxuIFx0XHQuYXJnID0gKHZvaWQgKilmbGFncyxcbiBcdFx0LmRvbmUgPSBmb2xpb19ub3RfbWFwcGVkLFxuIFx0XHQuYW5vbl9sb2NrID0gZm9saW9fbG9ja19hbm9uX3ZtYV9yZWFkLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA3IDIwOjM3PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0hVR0VUTEJGUyYjMzQ7LAogICAgJiMzNDtTV0FQJiMzNDssCiAgICAmIzM0O01FTU9SWV9GQUlMVVJFJiMzNDssCiAgICAmIzM0O0hXUE9JU09OX0lOSkVDVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3RyeV90b191bm1hcF9odWdldGxiX29uZSYjMzQ7LAogICAgJiMzNDt0dHVfYW5vbl9mb2xpbyYjMzQ7LAogICAgJiMzNDt0dHVfYW5vbl9sYXp5ZnJlZV9mb2xpbyYjMzQ7LAogICAgJiMzNDt0dHVfYW5vbl9zd2FwYmFja2VkX2ZvbGlvJiMzNDssCiAgICAmIzM0O3RyeV90b191bm1hcF9vbmUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSB1bm1hcHBpbmcgbG9naWMgaW4gbW0vcm1hcC5jIGJ5IGV4dHJhY3RpbmcgaHVnZXRsYiBhbmQgYW5vbnltb3VzIGZvbGlvIHVubWFwcGluZyBpbnRvIHNlcGFyYXRlIGZ1bmN0aW9ucyAodHJ5X3RvX3VubWFwX2h1Z2V0bGJfb25lLCB0dHVfYW5vbl9mb2xpbywgZXRjLikuIEl0IG1vZGlmaWVzIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgbG9naWMgcmVsYXRlZCB0byByZXZlcnNlIG1hcHBpbmcsIGh1Z2UgcGFnZXMsIGFuZCBzd2FwLiBGdXp6aW5nIHNob3VsZCBmb2N1cyBvbiB0aGVzZSBuZXcgZnVuY3Rpb25zIHRvIGVuc3VyZSBubyByZWdyZXNzaW9ucyBvciBidWdzIHdlcmUgaW50cm9kdWNlZCBkdXJpbmcgdGhlIHJlZmFjdG9yaW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdAogICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksCiAgIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAxZTg0YmMwZTBjMjA2ZjkxNTAwOGFkNGM3MTkwNWNlYjI3OGIxYzU4CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFR1ZSBKdWwgNyAyMDozNzo0NCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaHVnZXRsYi5oIGIvaW5jbHVkZS9saW51eC9odWdldGxiLmgKaW5kZXggNDExNTA3NmU0OTIyYWUuLmJmN2UxNjNlMzc3OWQ4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaApAQCAtMTI3MSw2ICYjNDM7MTI3MSw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBodWdldGxiX2NvdW50X3N1Yihsb25nIGwsIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKQogfQogCiBwdGVfdCBodWdlX3B0ZXBfZ2V0KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsIHB0ZV90ICpwdGVwKTsKJiM0Mzt1bnNpZ25lZCBsb25nIGh1Z2VfcHRlX2RpcnR5KHB0ZV90IHB0ZSk7CiAKIHN0YXRpYyBpbmxpbmUgcHRlX3QgaHVnZV9wdGVwX2NsZWFyX2ZsdXNoKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAogCQkJCQkgIHVuc2lnbmVkIGxvbmcgYWRkciwgcHRlX3QgKnB0ZXApCmRpZmYgLS1naXQgYS9tbS9ybWFwLmMgYi9tbS9ybWFwLmMKaW5kZXggOTkzOTQwMGU3N2M3OWEuLmYwMjFlY2Q1MWE0YTJlIDEwMDY0NAotLS0gYS9tbS9ybWFwLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vcm1hcC5jCkBAIC0xOTc4LDYgJiM0MzsxOTc4LDIzMyBAQCBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBmb2xpb191bm1hcF9wdGVfYmF0Y2goc3RydWN0IGZvbGlvICpmb2xpbywKIAkJCQkgICAgIEZQQl9SRVNQRUNUX1dSSVRFIHwgRlBCX1JFU1BFQ1RfU09GVF9ESVJUWSk7CiB9CiAKJiM0MztzdGF0aWMgYm9vbCB0cnlfdG9fdW5tYXBfaHVnZXRsYl9vbmUoc3RydWN0IGZvbGlvICpmb2xpbywKJiM0MzsJCXN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MsIHZvaWQgKmFyZykKJiM0Mzt7CiYjNDM7CURFRklORV9GT0xJT19WTUFfV0FMSyhwdm13LCBmb2xpbywgdm1hLCBhZGRyZXNzLCAwKTsKJiM0MzsJc3RydWN0IG1tdV9ub3RpZmllcl9yYW5nZSByYW5nZTsKJiM0MzsJZW51bSB0dHVfZmxhZ3MgZmxhZ3MgPSAoZW51bSB0dHVfZmxhZ3MpKGxvbmcpYXJnOwomIzQzOwlzdHJ1Y3QgbW1fc3RydWN0ICptbSA9IHZtYS0mZ3Q7dm1fbW07CiYjNDM7CWNvbnN0IHVuc2lnbmVkIGxvbmcgaHN6ID0gaHVnZV9wYWdlX3NpemUoaHN0YXRlX3ZtYSh2bWEpKTsKJiM0MzsJYm9vbCByZXQgPSB0cnVlOwomIzQzOwlwdGVfdCBwdGV2YWw7CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIFRoZSB0cnlfdG9fdW5tYXAoKSBpcyBvbmx5IHBhc3NlZCBhIGh1Z2V0bGIgZm9saW8gaW4gdGhlIGNhc2UKJiM0MzsJICogd2hlcmUgdGhlIGh1Z2V0bGIgZm9saW8gaXMgcG9pc29uZWQuCiYjNDM7CSAqLwomIzQzOwlWTV9XQVJOX09OX0ZPTElPKCFmb2xpb190ZXN0X2h3cG9pc29uKGZvbGlvKSwgZm9saW8pOwomIzQzOwlWTV9XQVJOX09OX09OQ0UoIShmbGFncyAmYW1wOyBUVFVfSFdQT0lTT04pKTsKJiM0MzsKJiM0MzsJcmFuZ2UuZW5kID0gdm1hX2FkZHJlc3NfZW5kKCZhbXA7cHZtdyk7CiYjNDM7CW1tdV9ub3RpZmllcl9yYW5nZV9pbml0KCZhbXA7cmFuZ2UsIE1NVV9OT1RJRllfQ0xFQVIsIDAsIHZtYS0mZ3Q7dm1fbW0sCiYjNDM7CQkJCWFkZHJlc3MsIHJhbmdlLmVuZCk7CiYjNDM7CWFkanVzdF9yYW5nZV9pZl9wbWRfc2hhcmluZ19wb3NzaWJsZSh2bWEsICZhbXA7cmFuZ2Uuc3RhcnQsICZhbXA7cmFuZ2UuZW5kKTsKJiM0MzsJbW11X25vdGlmaWVyX2ludmFsaWRhdGVfcmFuZ2Vfc3RhcnQoJmFtcDtyYW5nZSk7CiYjNDM7CiYjNDM7CS8qIFRoZXJlIGlzIG9ubHkgYSBzaW5nbGUgbWFwcGluZyBpbiBhIFZNQS4gKi8KJiM0MzsJaWYgKCFwYWdlX3ZtYV9tYXBwZWRfd2FsaygmYW1wO3B2bXcpKQomIzQzOwkJZ290byByYW5nZV9lbmQ7CiYjNDM7CiYjNDM7CWFkZHJlc3MgPSBwdm13LmFkZHJlc3M7CiYjNDM7CXB0ZXZhbCA9IGh1Z2VfcHRlcF9nZXQobW0sIGFkZHJlc3MsIHB2bXcucHRlKTsKJiM0MzsJVk1fV0FSTl9PTl9PTkNFKCFwdGVfcHJlc2VudChwdGV2YWwpKTsKJiM0MzsJVk1fV0FSTl9PTl9PTkNFKHB0ZV9wZm4ocHRldmFsKSAhPSBmb2xpb19wZm4oZm9saW8pKTsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogaHVnZV9wbWRfdW5zaGFyZSBtYXkgdW5tYXAgYW4gZW50aXJlIFBNRCBwYWdlLiBUaGVyZSBpcyBubyB3YXkgb2YKJiM0MzsJICoga25vd2luZyBleGFjdGx5IHdoaWNoIFBNRHMgbWF5IGJlIGNhY2hlZCBmb3IgdGhpcyBtbSwgc28gd2UgbXVzdAomIzQzOwkgKiBmbHVzaCB0aGVtIGFsbC4gc3RhcnQvZW5kIHdlcmUgYWxyZWFkeSBhZGp1c3RlZCBhYm92ZSB0byBjb3ZlciB0aGlzCiYjNDM7CSAqIHJhbmdlLgomIzQzOwkgKi8KJiM0MzsJZmx1c2hfY2FjaGVfcmFuZ2Uodm1hLCByYW5nZS5zdGFydCwgcmFuZ2UuZW5kKTsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogVG8gY2FsbCBodWdlX3BtZF91bnNoYXJlLCBpX21tYXBfcndzZW0gbXVzdCBiZSBoZWxkIGluIHdyaXRlIG1vZGUuCiYjNDM7CSAqIENhbGxlciBuZWVkcyB0byBleHBsaWNpdGx5IGRvIHRoaXMgb3V0c2lkZSBybWFwIHJvdXRpbmVzLgomIzQzOwkgKgomIzQzOwkgKiBXZSBhbHNvIG11c3QgaG9sZCBodWdldGxiIHZtYV9sb2NrIGluIHdyaXRlIG1vZGUuIExvY2sgb3JkZXIgZGljdGF0ZXMKJiM0MzsJICogYWNxdWlyaW5nIHZtYV9sb2NrIEJFRk9SRSBpX21tYXBfcndzZW0uIFdlIGNhbiBvbmx5IHRyeSBsb2NrIGhlcmUgYW5kCiYjNDM7CSAqIGZhaWwgaWYgdW5zdWNjZXNzZnVsLgomIzQzOwkgKi8KJiM0MzsJaWYgKCFmb2xpb190ZXN0X2Fub24oZm9saW8pKSB7CiYjNDM7CQlzdHJ1Y3QgbW11X2dhdGhlciB0bGI7CiYjNDM7CiYjNDM7CQlWTV9XQVJOX09OKCEoZmxhZ3MgJmFtcDsgVFRVX1JNQVBfTE9DS0VEKSk7CiYjNDM7CQlpZiAoIWh1Z2V0bGJfdm1hX3RyeWxvY2tfd3JpdGUodm1hKSkgewomIzQzOwkJCXJldCA9IGZhbHNlOwomIzQzOwkJCWdvdG8gd2Fsa19kb25lOwomIzQzOwkJfQomIzQzOwomIzQzOwkJdGxiX2dhdGhlcl9tbXVfdm1hKCZhbXA7dGxiLCB2bWEpOwomIzQzOwkJaWYgKGh1Z2VfcG1kX3Vuc2hhcmUoJmFtcDt0bGIsIHZtYSwgYWRkcmVzcywgcHZtdy5wdGUpKSB7CiYjNDM7CQkJaHVnZXRsYl92bWFfdW5sb2NrX3dyaXRlKHZtYSk7CiYjNDM7CQkJaHVnZV9wbWRfdW5zaGFyZV9mbHVzaCgmYW1wO3RsYiwgdm1hKTsKJiM0MzsJCQl0bGJfZmluaXNoX21tdSgmYW1wO3RsYik7CiYjNDM7CQkJLyoKJiM0MzsJCQkgKiBUaGUgUE1EIHRhYmxlIHdhcyB1bm1hcHBlZCwgY29uc2VxdWVudGx5IHVubWFwcGluZwomIzQzOwkJCSAqIHRoZSBmb2xpby4KJiM0MzsJCQkgKi8KJiM0MzsJCQlnb3RvIHdhbGtfZG9uZTsKJiM0MzsJCX0KJiM0MzsJCWh1Z2V0bGJfdm1hX3VubG9ja193cml0ZSh2bWEpOwomIzQzOwkJdGxiX2ZpbmlzaF9tbXUoJmFtcDt0bGIpOwomIzQzOwl9CiYjNDM7CXB0ZXZhbCA9IGh1Z2VfcHRlcF9jbGVhcl9mbHVzaCh2bWEsIGFkZHJlc3MsIHB2bXcucHRlKTsKJiM0MzsJaWYgKGh1Z2VfcHRlX2RpcnR5KHB0ZXZhbCkpCiYjNDM7CQlmb2xpb19tYXJrX2RpcnR5KGZvbGlvKTsKJiM0MzsKJiM0MzsJcHRldmFsID0gc3dwX2VudHJ5X3RvX3B0ZShtYWtlX2h3cG9pc29uX2VudHJ5KGZvbGlvX3BhZ2UoZm9saW8sIDApKSk7CiYjNDM7CWh1Z2V0bGJfY291bnRfc3ViKGZvbGlvX25yX3BhZ2VzKGZvbGlvKSwgbW0pOwomIzQzOwlzZXRfaHVnZV9wdGVfYXQobW0sIGFkZHJlc3MsIHB2bXcucHRlLCBwdGV2YWwsIGhzeik7CiYjNDM7CWh1Z2V0bGJfcmVtb3ZlX3JtYXAoZm9saW8pOwomIzQzOwlmb2xpb19wdXRfcmVmcyhmb2xpbywgMSk7CiYjNDM7CiYjNDM7d2Fsa19kb25lOgomIzQzOwlwYWdlX3ZtYV9tYXBwZWRfd2Fsa19kb25lKCZhbXA7cHZtdyk7CiYjNDM7cmFuZ2VfZW5kOgomIzQzOwltbXVfbm90aWZpZXJfaW52YWxpZGF0ZV9yYW5nZV9lbmQoJmFtcDtyYW5nZSk7CiYjNDM7CXJldHVybiByZXQ7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbmxpbmUgYm9vbCB0dHVfYW5vbl9sYXp5ZnJlZV9mb2xpbyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKJiM0MzsJCXN0cnVjdCBmb2xpbyAqZm9saW8pCiYjNDM7ewomIzQzOwlpbnQgcmVmX2NvdW50LCBtYXBfY291bnQ7CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIFN5bmNocm9uaXplIHdpdGggZ3VwX3B0ZV9yYW5nZSgpOgomIzQzOwkgKiAtIGNsZWFyIFBURTsgYmFycmllcjsgcmVhZCByZWZjb3VudAomIzQzOwkgKiAtIGluYyByZWZjb3VudDsgYmFycmllcjsgcmVhZCBQVEUKJiM0MzsJICovCiYjNDM7CXNtcF9tYigpOwomIzQzOwomIzQzOwlyZWZfY291bnQgPSBmb2xpb19yZWZfY291bnQoZm9saW8pOwomIzQzOwltYXBfY291bnQgPSBmb2xpb19tYXBjb3VudChmb2xpbyk7CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIE9yZGVyIHJlYWRzIGZvciBwYWdlIHJlZmNvdW50IGFuZCBkaXJ0eSBmbGFnCiYjNDM7CSAqIChzZWUgY29tbWVudHMgaW4gX19yZW1vdmVfbWFwcGluZygpKS4KJiM0MzsJICovCiYjNDM7CXNtcF9ybWIoKTsKJiM0MzsKJiM0MzsJaWYgKGZvbGlvX3Rlc3RfZGlydHkoZm9saW8pICZhbXA7JmFtcDsgISh2bWEtJmd0O3ZtX2ZsYWdzICZhbXA7IFZNX0RST1BQQUJMRSkpIHsKJiM0MzsJCS8qCiYjNDM7CQkgKiByZWRpcnRpZWQgZWl0aGVyIHVzaW5nIHRoZSBwYWdlIHRhYmxlIG9yIGEgcHJldmlvdXNseQomIzQzOwkJICogb2J0YWluZWQgR1VQIHJlZmVyZW5jZS4KJiM0MzsJCSAqLwomIzQzOwkJZm9saW9fc2V0X3N3YXBiYWNrZWQoZm9saW8pOwomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmIChyZWZfY291bnQgIT0gMSAmIzQzOyBtYXBfY291bnQpIHsKJiM0MzsJCS8qCiYjNDM7CQkgKiBBZGRpdGlvbmFsIHJlZmVyZW5jZS4gQ291bGQgYmUgYSBHVVAgcmVmZXJlbmNlIG9yIGFueQomIzQzOwkJICogc3BlY3VsYXRpdmUgcmVmZXJlbmNlLiBHVVAgdXNlcnMgbXVzdCBtYXJrIHRoZSBmb2xpbwomIzQzOwkJICogZGlydHkgaWYgdGhlcmUgd2FzIGEgbW9kaWZpY2F0aW9uLiBUaGlzIGZvbGlvIGNhbm5vdCBiZQomIzQzOwkJICogcmVjbGFpbWVkIHJpZ2h0IG5vdyBlaXRoZXIgd2F5LCBzbyBhY3QganVzdCBsaWtlIG5vdGhpbmcKJiM0MzsJCSAqIGhhcHBlbmVkLgomIzQzOwkJICogV2UmIzM5O2xsIGNvbWUgYmFjayBoZXJlIGxhdGVyIGFuZCBkZXRlY3QgaWYgdGhlIGZvbGlvIHdhcwomIzQzOwkJICogZGlydGllZCB3aGVuIHRoZSBhZGRpdGlvbmFsIHJlZmVyZW5jZSBpcyBnb25lLgomIzQzOwkJICovCiYjNDM7CQlyZXR1cm4gZmFsc2U7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIHRydWU7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBzZXRfc3dwX3B0ZV9hdChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyZXNzLAomIzQzOwkJcHRlX3QgKnB0ZXAsIHN3cF9lbnRyeV90IGVudHJ5LCBwdGVfdCBwdGV2YWwsIGJvb2wgYW5vbl9leGNsdXNpdmUpCiYjNDM7ewomIzQzOwlwdGVfdCBzd3BfcHRlID0gc3dwX2VudHJ5X3RvX3B0ZShlbnRyeSk7CiYjNDM7CiYjNDM7CWlmIChhbm9uX2V4Y2x1c2l2ZSkKJiM0MzsJCXN3cF9wdGUgPSBwdGVfc3dwX21rZXhjbHVzaXZlKHN3cF9wdGUpOwomIzQzOwomIzQzOwlpZiAobGlrZWx5KHB0ZV9wcmVzZW50KHB0ZXZhbCkpKSB7CiYjNDM7CQlpZiAocHRlX3NvZnRfZGlydHkocHRldmFsKSkKJiM0MzsJCQlzd3BfcHRlID0gcHRlX3N3cF9ta3NvZnRfZGlydHkoc3dwX3B0ZSk7CiYjNDM7CQlpZiAocHRlX3VmZmRfd3AocHRldmFsKSkKJiM0MzsJCQlzd3BfcHRlID0gcHRlX3N3cF9ta3VmZmRfd3Aoc3dwX3B0ZSk7CiYjNDM7CX0gZWxzZSB7CiYjNDM7CQkvKiBEZXZpY2UtZXhjbHVzaXZlIGVudHJ5ICovCiYjNDM7CQlpZiAocHRlX3N3cF9zb2Z0X2RpcnR5KHB0ZXZhbCkpCiYjNDM7CQkJc3dwX3B0ZSA9IHB0ZV9zd3BfbWtzb2Z0X2RpcnR5KHN3cF9wdGUpOwomIzQzOwkJaWYgKHB0ZV9zd3BfdWZmZF93cChwdGV2YWwpKQomIzQzOwkJCXN3cF9wdGUgPSBwdGVfc3dwX21rdWZmZF93cChzd3BfcHRlKTsKJiM0MzsJfQomIzQzOwomIzQzOwlzZXRfcHRlX2F0KG1tLCBhZGRyZXNzLCBwdGVwLCBzd3BfcHRlKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGlubGluZSBib29sIHR0dV9hbm9uX3N3YXBiYWNrZWRfZm9saW8oc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHN0cnVjdCBmb2xpbyAqZm9saW8sCiYjNDM7CQlzdHJ1Y3QgcGFnZSAqc3VicGFnZSwgdW5zaWduZWQgbG9uZyBhZGRyZXNzLCBwdGVfdCAqcHRlcCwKJiM0MzsJCXB0ZV90IHB0ZXZhbCkKJiM0Mzt7CiYjNDM7CWJvb2wgYW5vbl9leGNsdXNpdmUgPSBmb2xpb190ZXN0X2Fub24oZm9saW8pICZhbXA7JmFtcDsgUGFnZUFub25FeGNsdXNpdmUoc3VicGFnZSk7CiYjNDM7CXN3cF9lbnRyeV90IGVudHJ5ID0gcGFnZV9zd2FwX2VudHJ5KHN1YnBhZ2UpOwomIzQzOwlzdHJ1Y3QgbW1fc3RydWN0ICptbSA9IHZtYS0mZ3Q7dm1fbW07CiYjNDM7CiYjNDM7CWlmIChmb2xpb19kdXBfc3dhcChmb2xpbywgc3VicGFnZSkgJmx0OyAwKQomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBhcmNoX3VubWFwX29uZSgpIGlzIGV4cGVjdGVkIHRvIGJlIGEgTk9QIG9uCiYjNDM7CSAqIGFyY2hpdGVjdHVyZXMgd2hlcmUgd2UgY291bGQgaGF2ZSBQRk4gc3dhcCBQVEVzLAomIzQzOwkgKiBzbyB3ZSYjMzk7bGwgbm90IGNoZWNrL2NhcmUuCiYjNDM7CSAqLwomIzQzOwlpZiAoYXJjaF91bm1hcF9vbmUobW0sIHZtYSwgYWRkcmVzcywgcHRldmFsKSAmbHQ7IDApIHsKJiM0MzsJCWZvbGlvX3B1dF9zd2FwKGZvbGlvLCBzdWJwYWdlKTsKJiM0MzsJCXJldHVybiBmYWxzZTsKJiM0MzsJfQomIzQzOwomIzQzOwkvKiBTZWUgZm9saW9fdHJ5X3NoYXJlX2Fub25fcm1hcCgpOiBjbGVhciBQVEUgZmlyc3QuICovCiYjNDM7CWlmIChhbm9uX2V4Y2x1c2l2ZSAmYW1wOyZhbXA7IGZvbGlvX3RyeV9zaGFyZV9hbm9uX3JtYXBfcHRlKGZvbGlvLCBzdWJwYWdlKSkgewomIzQzOwkJZm9saW9fcHV0X3N3YXAoZm9saW8sIHN1YnBhZ2UpOwomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwl9CiYjNDM7CiYjNDM7CW1tX3ByZXBhcmVfZm9yX3N3YXBfZW50cmllcyhtbSk7CiYjNDM7CWRlY19tbV9jb3VudGVyKG1tLCBNTV9BTk9OUEFHRVMpOwomIzQzOwlpbmNfbW1fY291bnRlcihtbSwgTU1fU1dBUEVOVFMpOwomIzQzOwlzZXRfc3dwX3B0ZV9hdChtbSwgYWRkcmVzcywgcHRlcCwgZW50cnksIHB0ZXZhbCwgYW5vbl9leGNsdXNpdmUpOwomIzQzOwlyZXR1cm4gdHJ1ZTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGlubGluZSBib29sIHR0dV9hbm9uX2ZvbGlvKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLAomIzQzOwkJc3RydWN0IHBhZ2UgKnN1YnBhZ2UsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcywgcHRlX3QgKnB0ZXAsCiYjNDM7CQlwdGVfdCBwdGV2YWwsIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgbW1fc3RydWN0ICptbSA9IHZtYS0mZ3Q7dm1fbW07CiYjNDM7CWJvb2wgcmV0OwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBTdG9yZSB0aGUgc3dhcCBsb2NhdGlvbiBpbiB0aGUgcHRlLgomIzQzOwkgKiBTZWUgaGFuZGxlX3B0ZV9mYXVsdCgpIC4uLgomIzQzOwkgKi8KJiM0MzsJaWYgKHVubGlrZWx5KGZvbGlvX3Rlc3Rfc3dhcGJhY2tlZChmb2xpbykgIT0KJiM0MzsJCQlmb2xpb190ZXN0X3N3YXBjYWNoZShmb2xpbykpKSB7CiYjNDM7CQlXQVJOX09OX09OQ0UoMSk7CiYjNDM7CQlyZXR1cm4gZmFsc2U7CiYjNDM7CX0KJiM0MzsKJiM0MzsJLyogTUFEVl9GUkVFIHBhZ2UgY2hlY2sgKi8KJiM0MzsJaWYgKCFmb2xpb190ZXN0X3N3YXBiYWNrZWQoZm9saW8pKSB7CiYjNDM7CQlyZXQgPSB0dHVfYW5vbl9sYXp5ZnJlZV9mb2xpbyh2bWEsIGZvbGlvKTsKJiM0MzsJCWlmIChyZXQpCiYjNDM7CQkJYWRkX21tX2NvdW50ZXIobW0sIE1NX0FOT05QQUdFUywgLW5yX3BhZ2VzKTsKJiM0MzsJfSBlbHNlIHsKJiM0MzsJCS8qIG5yX3BhZ2VzICZndDsgMSBub3Qgc3VwcG9ydGVkIHlldCAqLwomIzQzOwkJcmV0ID0gdHR1X2Fub25fc3dhcGJhY2tlZF9mb2xpbyh2bWEsIGZvbGlvLCBzdWJwYWdlLCBhZGRyZXNzLAomIzQzOwkJCQkJCXB0ZXAsIHB0ZXZhbCk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKCFyZXQpCiYjNDM7CQlzZXRfcHRlcyhtbSwgYWRkcmVzcywgcHRlcCwgcHRldmFsLCBucl9wYWdlcyk7CiYjNDM7CiYjNDM7CXJldHVybiByZXQ7CiYjNDM7fQomIzQzOwogLyoKICAqIEBhcmc6IGVudW0gdHR1X2ZsYWdzIHdpbGwgYmUgcGFzc2VkIHRvIHRoaXMgYXJndW1lbnQKICAqLwpAQCAtMTk4NiwxNCAmIzQzOzIyMTMsMTMgQEAgc3RhdGljIGJvb2wgdHJ5X3RvX3VubWFwX29uZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKIHsKIAlzdHJ1Y3QgbW1fc3RydWN0ICptbSA9IHZtYS0mZ3Q7dm1fbW07CiAJREVGSU5FX0ZPTElPX1ZNQV9XQUxLKHB2bXcsIGZvbGlvLCB2bWEsIGFkZHJlc3MsIDApOwotCWJvb2wgYW5vbl9leGNsdXNpdmUsIHJldCA9IHRydWU7CiYjNDM7CWJvb2wgcmV0ID0gdHJ1ZTsKIAlwdGVfdCBwdGV2YWw7CiAJc3RydWN0IHBhZ2UgKnN1YnBhZ2U7CiAJc3RydWN0IG1tdV9ub3RpZmllcl9yYW5nZSByYW5nZTsKIAllbnVtIHR0dV9mbGFncyBmbGFncyA9IChlbnVtIHR0dV9mbGFncykobG9uZylhcmc7CiAJdW5zaWduZWQgbG9uZyBucl9wYWdlcyA9IDEsIGVuZF9hZGRyOwogCXVuc2lnbmVkIGxvbmcgcGZuOwotCXVuc2lnbmVkIGxvbmcgaHN6ID0gMDsKIAlpbnQgcHRlcyA9IDA7CiAKIAkvKgpAQCAtMjAwNyw4ICYjNDM7MjIzMyw2IEBAIHN0YXRpYyBib29sIHRyeV90b191bm1hcF9vbmUoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCiAKIAkvKgogCSAqIEZvciBUSFAsIHdlIGhhdmUgdG8gYXNzdW1lIHRoZSB3b3JzZSBjYXNlIGllIHBtZCBmb3IgaW52YWxpZGF0aW9uLgotCSAqIEZvciBodWdldGxiLCBpdCBjb3VsZCBiZSBtdWNoIHdvcnNlIGlmIHdlIG5lZWQgdG8gZG8gcHVkCi0JICogaW52YWxpZGF0aW9uIGluIHRoZSBjYXNlIG9mIHBtZCBzaGFyaW5nLgogCSAqCiAJICogTm90ZSB0aGF0IHRoZSBmb2xpbyBjYW4gbm90IGJlIGZyZWVkIGluIHRoaXMgZnVuY3Rpb24gYXMgY2FsbCBvZgogCSAqIHRyeV90b191bm1hcCgpIG11c3QgaG9sZCBhIHJlZmVyZW5jZSBvbiB0aGUgZm9saW8uCkBAIC0yMDE2LDE3ICYjNDM7MjI0MCw2IEBAIHN0YXRpYyBib29sIHRyeV90b191bm1hcF9vbmUoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCiAJcmFuZ2UuZW5kID0gdm1hX2FkZHJlc3NfZW5kKCZhbXA7cHZtdyk7CiAJbW11X25vdGlmaWVyX3JhbmdlX2luaXQoJmFtcDtyYW5nZSwgTU1VX05PVElGWV9DTEVBUiwgMCwgdm1hLSZndDt2bV9tbSwKIAkJCQlhZGRyZXNzLCByYW5nZS5lbmQpOwotCWlmIChmb2xpb190ZXN0X2h1Z2V0bGIoZm9saW8pKSB7Ci0JCS8qCi0JCSAqIElmIHNoYXJpbmcgaXMgcG9zc2libGUsIHN0YXJ0IGFuZCBlbmQgd2lsbCBiZSBhZGp1c3RlZAotCQkgKiBhY2NvcmRpbmdseS4KLQkJICovCi0JCWFkanVzdF9yYW5nZV9pZl9wbWRfc2hhcmluZ19wb3NzaWJsZSh2bWEsICZhbXA7cmFuZ2Uuc3RhcnQsCi0JCQkJCQkgICAgICZhbXA7cmFuZ2UuZW5kKTsKLQotCQkvKiBXZSBuZWVkIHRoZSBodWdlIHBhZ2Ugc2l6ZSBmb3Igc2V0X2h1Z2VfcHRlX2F0KCkgKi8KLQkJaHN6ID0gaHVnZV9wYWdlX3NpemUoaHN0YXRlX3ZtYSh2bWEpKTsKLQl9CiAJbW11X25vdGlmaWVyX2ludmFsaWRhdGVfcmFuZ2Vfc3RhcnQoJmFtcDtyYW5nZSk7CiAKIAl3aGlsZSAocGFnZV92bWFfbWFwcGVkX3dhbGsoJmFtcDtwdm13KSkgewpAQCAtMjExMSw2NSAmIzQzOzIzMjQsMTEgQEAgc3RhdGljIGJvb2wgdHJ5X3RvX3VubWFwX29uZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKIAkJCWNvbnN0IHNvZnRsZWFmX3QgZW50cnkgPSBzb2Z0bGVhZl9mcm9tX3B0ZShwdGV2YWwpOwogCiAJCQlwZm4gPSBzb2Z0bGVhZl90b19wZm4oZW50cnkpOwotCQkJVk1fV0FSTl9PTl9GT0xJTyhmb2xpb190ZXN0X2h1Z2V0bGIoZm9saW8pLCBmb2xpbyk7CiAJCX0KIAogCQlzdWJwYWdlID0gZm9saW9fcGFnZShmb2xpbywgcGZuIC0gZm9saW9fcGZuKGZvbGlvKSk7Ci0JCWFub25fZXhjbHVzaXZlID0gZm9saW9fdGVzdF9hbm9uKGZvbGlvKSAmYW1wOyZhbXA7Ci0JCQkJIFBhZ2VBbm9uRXhjbHVzaXZlKHN1YnBhZ2UpOwogCi0JCWlmIChmb2xpb190ZXN0X2h1Z2V0bGIoZm9saW8pKSB7Ci0JCQlib29sIGFub24gPSBmb2xpb190ZXN0X2Fub24oZm9saW8pOwotCi0JCQkvKgotCQkJICogVGhlIHRyeV90b191bm1hcCgpIGlzIG9ubHkgcGFzc2VkIGEgaHVnZXRsYiBwYWdlCi0JCQkgKiBpbiB0aGUgY2FzZSB3aGVyZSB0aGUgaHVnZXRsYiBwYWdlIGlzIHBvaXNvbmVkLgotCQkJICovCi0JCQlWTV9CVUdfT05fUEFHRSghUGFnZUhXUG9pc29uKHN1YnBhZ2UpLCBzdWJwYWdlKTsKLQkJCS8qCi0JCQkgKiBodWdlX3BtZF91bnNoYXJlIG1heSB1bm1hcCBhbiBlbnRpcmUgUE1EIHBhZ2UuCi0JCQkgKiBUaGVyZSBpcyBubyB3YXkgb2Yga25vd2luZyBleGFjdGx5IHdoaWNoIFBNRHMgbWF5Ci0JCQkgKiBiZSBjYWNoZWQgZm9yIHRoaXMgbW0sIHNvIHdlIG11c3QgZmx1c2ggdGhlbSBhbGwuCi0JCQkgKiBzdGFydC9lbmQgd2VyZSBhbHJlYWR5IGFkanVzdGVkIGFib3ZlIHRvIGNvdmVyIHRoaXMKLQkJCSAqIHJhbmdlLgotCQkJICovCi0JCQlmbHVzaF9jYWNoZV9yYW5nZSh2bWEsIHJhbmdlLnN0YXJ0LCByYW5nZS5lbmQpOwotCi0JCQkvKgotCQkJICogVG8gY2FsbCBodWdlX3BtZF91bnNoYXJlLCBpX21tYXBfcndzZW0gbXVzdCBiZQotCQkJICogaGVsZCBpbiB3cml0ZSBtb2RlLiAgQ2FsbGVyIG5lZWRzIHRvIGV4cGxpY2l0bHkKLQkJCSAqIGRvIHRoaXMgb3V0c2lkZSBybWFwIHJvdXRpbmVzLgotCQkJICoKLQkJCSAqIFdlIGFsc28gbXVzdCBob2xkIGh1Z2V0bGIgdm1hX2xvY2sgaW4gd3JpdGUgbW9kZS4KLQkJCSAqIExvY2sgb3JkZXIgZGljdGF0ZXMgYWNxdWlyaW5nIHZtYV9sb2NrIEJFRk9SRQotCQkJICogaV9tbWFwX3J3c2VtLiAgV2UgY2FuIG9ubHkgdHJ5IGxvY2sgaGVyZSBhbmQgZmFpbAotCQkJICogaWYgdW5zdWNjZXNzZnVsLgotCQkJICovCi0JCQlpZiAoIWFub24pIHsKLQkJCQlzdHJ1Y3QgbW11X2dhdGhlciB0bGI7Ci0KLQkJCQlWTV9CVUdfT04oIShmbGFncyAmYW1wOyBUVFVfUk1BUF9MT0NLRUQpKTsKLQkJCQlpZiAoIWh1Z2V0bGJfdm1hX3RyeWxvY2tfd3JpdGUodm1hKSkKLQkJCQkJZ290byB3YWxrX2Fib3J0OwotCi0JCQkJdGxiX2dhdGhlcl9tbXVfdm1hKCZhbXA7dGxiLCB2bWEpOwotCQkJCWlmIChodWdlX3BtZF91bnNoYXJlKCZhbXA7dGxiLCB2bWEsIGFkZHJlc3MsIHB2bXcucHRlKSkgewotCQkJCQlodWdldGxiX3ZtYV91bmxvY2tfd3JpdGUodm1hKTsKLQkJCQkJaHVnZV9wbWRfdW5zaGFyZV9mbHVzaCgmYW1wO3RsYiwgdm1hKTsKLQkJCQkJdGxiX2ZpbmlzaF9tbXUoJmFtcDt0bGIpOwotCQkJCQkvKgotCQkJCQkgKiBUaGUgUE1EIHRhYmxlIHdhcyB1bm1hcHBlZCwKLQkJCQkJICogY29uc2VxdWVudGx5IHVubWFwcGluZyB0aGUgZm9saW8uCi0JCQkJCSAqLwotCQkJCQlnb3RvIHdhbGtfZG9uZTsKLQkJCQl9Ci0JCQkJaHVnZXRsYl92bWFfdW5sb2NrX3dyaXRlKHZtYSk7Ci0JCQkJdGxiX2ZpbmlzaF9tbXUoJmFtcDt0bGIpOwotCQkJfQotCQkJcHRldmFsID0gaHVnZV9wdGVwX2NsZWFyX2ZsdXNoKHZtYSwgYWRkcmVzcywgcHZtdy5wdGUpOwotCQkJaWYgKHB0ZV9kaXJ0eShwdGV2YWwpKQotCQkJCWZvbGlvX21hcmtfZGlydHkoZm9saW8pOwotCQl9IGVsc2UgaWYgKGxpa2VseShwdGVfcHJlc2VudChwdGV2YWwpKSkgewomIzQzOwkJaWYgKGxpa2VseShwdGVfcHJlc2VudChwdGV2YWwpKSkgewogCQkJbnJfcGFnZXMgPSBmb2xpb191bm1hcF9wdGVfYmF0Y2goZm9saW8sICZhbXA7cHZtdywgZmxhZ3MsIHB0ZXZhbCk7CiAJCQllbmRfYWRkciA9IGFkZHJlc3MgJiM0MzsgbnJfcGFnZXMgKiBQQUdFX1NJWkU7CiAJCQlmbHVzaF9jYWNoZV9yYW5nZSh2bWEsIGFkZHJlc3MsIGVuZF9hZGRyKTsKQEAgLTIyMDQsMTYgJiM0MzsyMzYzLDE0IEBAIHN0YXRpYyBib29sIHRyeV90b191bm1hcF9vbmUoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCiAJCS8qIFVwZGF0ZSBoaWdoIHdhdGVybWFyayBiZWZvcmUgd2UgbG93ZXIgcnNzICovCiAJCXVwZGF0ZV9oaXdhdGVyX3JzcyhtbSk7CiAKLQkJaWYgKFBhZ2VIV1BvaXNvbihzdWJwYWdlKSAmYW1wOyZhbXA7IChmbGFncyAmYW1wOyBUVFVfSFdQT0lTT04pKSB7CiYjNDM7CQkvKgomIzQzOwkJICogV2l0aCBUVFVfSFdQT0lTT04sIHdlIG9ubHkgZXhwZWN0IHNtYWxsIGZvbGlvcyBvciBodWdldGxiCiYjNDM7CQkgKiBmb2xpb3MgaGVyZSBmb3Igbm93LgomIzQzOwkJICovCiYjNDM7CQlpZiAoZm9saW9fdGVzdF9od3BvaXNvbihmb2xpbykgJmFtcDsmYW1wOyAoZmxhZ3MgJmFtcDsgVFRVX0hXUE9JU09OKSkgewogCQkJcHRldmFsID0gc3dwX2VudHJ5X3RvX3B0ZShtYWtlX2h3cG9pc29uX2VudHJ5KHN1YnBhZ2UpKTsKLQkJCWlmIChmb2xpb190ZXN0X2h1Z2V0bGIoZm9saW8pKSB7Ci0JCQkJaHVnZXRsYl9jb3VudF9zdWIoZm9saW9fbnJfcGFnZXMoZm9saW8pLCBtbSk7Ci0JCQkJc2V0X2h1Z2VfcHRlX2F0KG1tLCBhZGRyZXNzLCBwdm13LnB0ZSwgcHRldmFsLAotCQkJCQkJaHN6KTsKLQkJCX0gZWxzZSB7Ci0JCQkJZGVjX21tX2NvdW50ZXIobW0sIG1tX2NvdW50ZXIoZm9saW8pKTsKLQkJCQlzZXRfcHRlX2F0KG1tLCBhZGRyZXNzLCBwdm13LnB0ZSwgcHRldmFsKTsKLQkJCX0KJiM0MzsJCQlkZWNfbW1fY291bnRlcihtbSwgbW1fY291bnRlcihmb2xpbykpOwomIzQzOwkJCXNldF9wdGVfYXQobW0sIGFkZHJlc3MsIHB2bXcucHRlLCBwdGV2YWwpOwogCQl9IGVsc2UgaWYgKGxpa2VseShwdGVfcHJlc2VudChwdGV2YWwpKSAmYW1wOyZhbXA7IHB0ZV91bnVzZWQocHRldmFsKSAmYW1wOyZhbXA7CiAJCQkgICAhdXNlcmZhdWx0ZmRfYXJtZWQodm1hKSkgewogCQkJLyoKQEAgLTIyMjgsMTA0ICYjNDM7MjM4NSwxMSBAQCBzdGF0aWMgYm9vbCB0cnlfdG9fdW5tYXBfb25lKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAogCQkJICovCiAJCQlkZWNfbW1fY291bnRlcihtbSwgbW1fY291bnRlcihmb2xpbykpOwogCQl9IGVsc2UgaWYgKGZvbGlvX3Rlc3RfYW5vbihmb2xpbykpIHsKLQkJCXN3cF9lbnRyeV90IGVudHJ5ID0gcGFnZV9zd2FwX2VudHJ5KHN1YnBhZ2UpOwotCQkJcHRlX3Qgc3dwX3B0ZTsKLQkJCS8qCi0JCQkgKiBTdG9yZSB0aGUgc3dhcCBsb2NhdGlvbiBpbiB0aGUgcHRlLgotCQkJICogU2VlIGhhbmRsZV9wdGVfZmF1bHQoKSAuLi4KLQkJCSAqLwotCQkJaWYgKHVubGlrZWx5KGZvbGlvX3Rlc3Rfc3dhcGJhY2tlZChmb2xpbykgIT0KLQkJCQkJZm9saW9fdGVzdF9zd2FwY2FjaGUoZm9saW8pKSkgewotCQkJCVdBUk5fT05fT05DRSgxKTsKJiM0MzsJCQlpZiAoIXR0dV9hbm9uX2ZvbGlvKHZtYSwgZm9saW8sIHN1YnBhZ2UsIGFkZHJlc3MsCiYjNDM7CQkJCQkgICAgcHZtdy5wdGUsIHB0ZXZhbCwgbnJfcGFnZXMpKQogCQkJCWdvdG8gd2Fsa19hYm9ydDsKLQkJCX0KLQotCQkJLyogTUFEVl9GUkVFIHBhZ2UgY2hlY2sgKi8KLQkJCWlmICghZm9saW9fdGVzdF9zd2FwYmFja2VkKGZvbGlvKSkgewotCQkJCWludCByZWZfY291bnQsIG1hcF9jb3VudDsKLQotCQkJCS8qCi0JCQkJICogU3luY2hyb25pemUgd2l0aCBndXBfcHRlX3JhbmdlKCk6Ci0JCQkJICogLSBjbGVhciBQVEU7IGJhcnJpZXI7IHJlYWQgcmVmY291bnQKLQkJCQkgKiAtIGluYyByZWZjb3VudDsgYmFycmllcjsgcmVhZCBQVEUKLQkJCQkgKi8KLQkJCQlzbXBfbWIoKTsKIAotCQkJCXJlZl9jb3VudCA9IGZvbGlvX3JlZl9jb3VudChmb2xpbyk7Ci0JCQkJbWFwX2NvdW50ID0gZm9saW9fbWFwY291bnQoZm9saW8pOwotCi0JCQkJLyoKLQkJCQkgKiBPcmRlciByZWFkcyBmb3IgcGFnZSByZWZjb3VudCBhbmQgZGlydHkgZmxhZwotCQkJCSAqIChzZWUgY29tbWVudHMgaW4gX19yZW1vdmVfbWFwcGluZygpKS4KLQkJCQkgKi8KLQkJCQlzbXBfcm1iKCk7Ci0KLQkJCQlpZiAoZm9saW9fdGVzdF9kaXJ0eShmb2xpbykgJmFtcDsmYW1wOyAhKHZtYS0mZ3Q7dm1fZmxhZ3MgJmFtcDsgVk1fRFJPUFBBQkxFKSkgewotCQkJCQkvKgotCQkJCQkgKiByZWRpcnRpZWQgZWl0aGVyIHVzaW5nIHRoZSBwYWdlIHRhYmxlIG9yIGEgcHJldmlvdXNseQotCQkJCQkgKiBvYnRhaW5lZCBHVVAgcmVmZXJlbmNlLgotCQkJCQkgKi8KLQkJCQkJc2V0X3B0ZXMobW0sIGFkZHJlc3MsIHB2bXcucHRlLCBwdGV2YWwsIG5yX3BhZ2VzKTsKLQkJCQkJZm9saW9fc2V0X3N3YXBiYWNrZWQoZm9saW8pOwotCQkJCQlnb3RvIHdhbGtfYWJvcnQ7Ci0JCQkJfSBlbHNlIGlmIChyZWZfY291bnQgIT0gMSAmIzQzOyBtYXBfY291bnQpIHsKLQkJCQkJLyoKLQkJCQkJICogQWRkaXRpb25hbCByZWZlcmVuY2UuIENvdWxkIGJlIGEgR1VQIHJlZmVyZW5jZSBvciBhbnkKLQkJCQkJICogc3BlY3VsYXRpdmUgcmVmZXJlbmNlLiBHVVAgdXNlcnMgbXVzdCBtYXJrIHRoZSBmb2xpbwotCQkJCQkgKiBkaXJ0eSBpZiB0aGVyZSB3YXMgYSBtb2RpZmljYXRpb24uIFRoaXMgZm9saW8gY2Fubm90IGJlCi0JCQkJCSAqIHJlY2xhaW1lZCByaWdodCBub3cgZWl0aGVyIHdheSwgc28gYWN0IGp1c3QgbGlrZSBub3RoaW5nCi0JCQkJCSAqIGhhcHBlbmVkLgotCQkJCQkgKiBXZSYjMzk7bGwgY29tZSBiYWNrIGhlcmUgbGF0ZXIgYW5kIGRldGVjdCBpZiB0aGUgZm9saW8gd2FzCi0JCQkJCSAqIGRpcnRpZWQgd2hlbiB0aGUgYWRkaXRpb25hbCByZWZlcmVuY2UgaXMgZ29uZS4KLQkJCQkJICovCi0JCQkJCXNldF9wdGVzKG1tLCBhZGRyZXNzLCBwdm13LnB0ZSwgcHRldmFsLCBucl9wYWdlcyk7Ci0JCQkJCWdvdG8gd2Fsa19hYm9ydDsKLQkJCQl9Ci0JCQkJYWRkX21tX2NvdW50ZXIobW0sIE1NX0FOT05QQUdFUywgLW5yX3BhZ2VzKTsKLQkJCQlnb3RvIGRpc2NhcmQ7Ci0JCQl9Ci0KLQkJCWlmIChmb2xpb19kdXBfc3dhcChmb2xpbywgc3VicGFnZSkgJmx0OyAwKSB7Ci0JCQkJc2V0X3B0ZV9hdChtbSwgYWRkcmVzcywgcHZtdy5wdGUsIHB0ZXZhbCk7Ci0JCQkJZ290byB3YWxrX2Fib3J0OwotCQkJfQotCi0JCQkvKgotCQkJICogYXJjaF91bm1hcF9vbmUoKSBpcyBleHBlY3RlZCB0byBiZSBhIE5PUCBvbgotCQkJICogYXJjaGl0ZWN0dXJlcyB3aGVyZSB3ZSBjb3VsZCBoYXZlIFBGTiBzd2FwIFBURXMsCi0JCQkgKiBzbyB3ZSYjMzk7bGwgbm90IGNoZWNrL2NhcmUuCi0JCQkgKi8KLQkJCWlmIChhcmNoX3VubWFwX29uZShtbSwgdm1hLCBhZGRyZXNzLCBwdGV2YWwpICZsdDsgMCkgewotCQkJCWZvbGlvX3B1dF9zd2FwKGZvbGlvLCBzdWJwYWdlKTsKLQkJCQlzZXRfcHRlX2F0KG1tLCBhZGRyZXNzLCBwdm13LnB0ZSwgcHRldmFsKTsKLQkJCQlnb3RvIHdhbGtfYWJvcnQ7Ci0JCQl9Ci0KLQkJCS8qIFNlZSBmb2xpb190cnlfc2hhcmVfYW5vbl9ybWFwKCk6IGNsZWFyIFBURSBmaXJzdC4gKi8KLQkJCWlmIChhbm9uX2V4Y2x1c2l2ZSAmYW1wOyZhbXA7Ci0JCQkgICAgZm9saW9fdHJ5X3NoYXJlX2Fub25fcm1hcF9wdGUoZm9saW8sIHN1YnBhZ2UpKSB7Ci0JCQkJZm9saW9fcHV0X3N3YXAoZm9saW8sIHN1YnBhZ2UpOwotCQkJCXNldF9wdGVfYXQobW0sIGFkZHJlc3MsIHB2bXcucHRlLCBwdGV2YWwpOwotCQkJCWdvdG8gd2Fsa19hYm9ydDsKLQkJCX0KLQkJCW1tX3ByZXBhcmVfZm9yX3N3YXBfZW50cmllcyhtbSk7Ci0JCQlkZWNfbW1fY291bnRlcihtbSwgTU1fQU5PTlBBR0VTKTsKLQkJCWluY19tbV9jb3VudGVyKG1tLCBNTV9TV0FQRU5UUyk7Ci0JCQlzd3BfcHRlID0gc3dwX2VudHJ5X3RvX3B0ZShlbnRyeSk7Ci0JCQlpZiAoYW5vbl9leGNsdXNpdmUpCi0JCQkJc3dwX3B0ZSA9IHB0ZV9zd3BfbWtleGNsdXNpdmUoc3dwX3B0ZSk7Ci0JCQlpZiAobGlrZWx5KHB0ZV9wcmVzZW50KHB0ZXZhbCkpKSB7Ci0JCQkJaWYgKHB0ZV9zb2Z0X2RpcnR5KHB0ZXZhbCkpCi0JCQkJCXN3cF9wdGUgPSBwdGVfc3dwX21rc29mdF9kaXJ0eShzd3BfcHRlKTsKLQkJCQlpZiAocHRlX3VmZmRfd3AocHRldmFsKSkKLQkJCQkJc3dwX3B0ZSA9IHB0ZV9zd3BfbWt1ZmZkX3dwKHN3cF9wdGUpOwotCQkJfSBlbHNlIHsKLQkJCQlpZiAocHRlX3N3cF9zb2Z0X2RpcnR5KHB0ZXZhbCkpCi0JCQkJCXN3cF9wdGUgPSBwdGVfc3dwX21rc29mdF9kaXJ0eShzd3BfcHRlKTsKLQkJCQlpZiAocHRlX3N3cF91ZmZkX3dwKHB0ZXZhbCkpCi0JCQkJCXN3cF9wdGUgPSBwdGVfc3dwX21rdWZmZF93cChzd3BfcHRlKTsKLQkJCX0KLQkJCXNldF9wdGVfYXQobW0sIGFkZHJlc3MsIHB2bXcucHRlLCBzd3BfcHRlKTsKJiM0MzsJCQlnb3RvIGZpbmlzaF91bm1hcDsKIAkJfSBlbHNlIHsKIAkJCS8qCiAJCQkgKiBUaGlzIGlzIGEgbG9ja2VkIGZpbGUtYmFja2VkIGZvbGlvLApAQCAtMjM0MCwxMiAmIzQzOzI0MDQsOCBAQCBzdGF0aWMgYm9vbCB0cnlfdG9fdW5tYXBfb25lKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAogCQkJICovCiAJCQlhZGRfbW1fY291bnRlcihtbSwgbW1fY291bnRlcl9maWxlKGZvbGlvKSwgLW5yX3BhZ2VzKTsKIAkJfQotZGlzY2FyZDoKLQkJaWYgKHVubGlrZWx5KGZvbGlvX3Rlc3RfaHVnZXRsYihmb2xpbykpKSB7Ci0JCQlodWdldGxiX3JlbW92ZV9ybWFwKGZvbGlvKTsKLQkJfSBlbHNlIHsKLQkJCWZvbGlvX3JlbW92ZV9ybWFwX3B0ZXMoZm9saW8sIHN1YnBhZ2UsIG5yX3BhZ2VzLCB2bWEpOwotCQl9CiYjNDM7ZmluaXNoX3VubWFwOgomIzQzOwkJZm9saW9fcmVtb3ZlX3JtYXBfcHRlcyhmb2xpbywgc3VicGFnZSwgbnJfcGFnZXMsIHZtYSk7CiAJCWlmICh2bWEtJmd0O3ZtX2ZsYWdzICZhbXA7IFZNX0xPQ0tFRCkKIAkJCW1sb2NrX2RyYWluX2xvY2FsKCk7CiAJCWZvbGlvX3B1dF9yZWZzKGZvbGlvLCBucl9wYWdlcyk7CkBAIC0yMzkzLDcgJiM0MzsyNDUzLDggQEAgc3RhdGljIGludCBmb2xpb19ub3RfbWFwcGVkKHN0cnVjdCBmb2xpbyAqZm9saW8pCiB2b2lkIHRyeV90b191bm1hcChzdHJ1Y3QgZm9saW8gKmZvbGlvLCBlbnVtIHR0dV9mbGFncyBmbGFncykKIHsKIAlzdHJ1Y3Qgcm1hcF93YWxrX2NvbnRyb2wgcndjID0gewotCQkucm1hcF9vbmUgPSB0cnlfdG9fdW5tYXBfb25lLAomIzQzOwkJLnJtYXBfb25lID0gZm9saW9fdGVzdF9odWdldGxiKGZvbGlvKSA/CiYjNDM7CQkJCXRyeV90b191bm1hcF9odWdldGxiX29uZSA6IHRyeV90b191bm1hcF9vbmUsCiAJCS5hcmcgPSAodm9pZCAqKWZsYWdzLAogCQkuZG9uZSA9IGZvbGlvX25vdF9tYXBwZWQsCiAJCS5hbm9uX2xvY2sgPSBmb2xpb19sb2NrX2Fub25fdm1hX3JlYWQsCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA3IDIwOjM3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgzNTIKCQkJCQkJCW91dHB1dDogMjYKCQkJCQkJCXRob3VnaHRzOiAzMTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBgbW0vcm1hcC5jYCBSZWZhY3RvcmluZyBmb3IgUG90ZW50aWFsIFZ1bG5lcmFiaWxpdGllcyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaC4gSXQmIzM5O3MgdG91Y2hpbmcgYG1tL3JtYXAuY2AgYW5kIGBpbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaGAsIHdoaWNoIGltbWVkaWF0ZWx5IGZsYWdzIHNvbWUgc2VyaW91cyBhdHRlbnRpb24uIEl0IGxvb2tzIGxpa2Ugd2UmIzM5O3JlIHJlZmFjdG9yaW5nIGB0cnlfdG9fdW5tYXBfb25lYCB0byBiZSBjbGVhbmVyLCBwdWxsaW5nIG91dCB0aGUgaHVnZXRsYi1zcGVjaWZpYyBzdHVmZiBpbnRvIGB0cnlfdG9fdW5tYXBfaHVnZXRsYl9vbmVgLCBhbmQgdGhlbiBoYW5kbGluZyBhbm9ueW1vdXMgZm9saW8gY2FzZXMgd2l0aCBhIGhhbmRmdWwgb2YgbmV3IGZ1bmN0aW9uczogYHR0dV9hbm9uX2ZvbGlvYCwgYHR0dV9hbm9uX2xhenlmcmVlX2ZvbGlvYCwgYW5kIGB0dHVfYW5vbl9zd2FwYmFja2VkX2ZvbGlvYC4gVGhlIG1haW4gYHRyeV90b191bm1hcGAgZnVuY3Rpb24gaXMgbm93IGNvbmRpdGlvbmFsbHkgY2FsbGluZyBgdHJ5X3RvX3VubWFwX2h1Z2V0bGJfb25lYCBpZiB0aGUgZm9saW8gaXMgYSBodWdldGxiIHBhZ2UuCgpGdW5jdGlvbmFsbHksIHRoaXMgc2VlbXMgbGlrZSBtb3N0bHkgYSByZWZhY3RvcmluZy4gQnV0IGxldCYjMzk7cyBiZSBob25lc3QsIGFueSBjaGFuZ2UgaW4gdGhlc2UgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBhcmVhcyDigJMgcm1hcCwgaHVnZXRsYiwgdW5tYXBwaW5nIOKAkyB3YXJyYW50cyBhICp2ZXJ5KiBjbG9zZSBsb29rLiBUaGVzZSBhcmUgY3JpdGljYWwgcGF0aHMsIGFuZCBzdWJ0bGUgZXJyb3JzIGNhbiBoYXZlIGRldmFzdGF0aW5nIGNvbnNlcXVlbmNlcy4gTXkgcHJpbWFyeSBjb25jZXJuIGhlcmUgaXMgdGhhdCB0aGlzIGtpbmQgb2YgcmVmYWN0b3JpbmcgaXMgcHJvbmUgdG8gaW50cm9kdWNpbmcgb2ZmLWJ5LW9uZSBlcnJvcnMsIGluY29ycmVjdCBsb2NraW5nLCBvciBvdGhlciBzdWJ0bGUgYnVncyBkdWUgdG8gdGhlIGNvbXBsZXhpdHkgaW52b2x2ZWQuCgpTbywgSSBuZWVkIHRvIGZvY3VzIG15IGZ1enppbmcgZWZmb3J0cy4gVGhlIGtleSBmdW5jdGlvbnMgdG8gdGFyZ2V0IGFyZToKCiogICBgdHJ5X3RvX3VubWFwX2h1Z2V0bGJfb25lYCAtIFRoaXMgaXMgbm93IGhhbmRsaW5nIHRoZSBodWdldGxiIHNwZWNpZmljIGxvZ2ljLCB3aGljaCwgZHVlIHRvIHRoZWlyIHNpemUsIGludHJvZHVjZSBjb21wbGV4aXRpZXMgdGhhdCBtYXkgbm90IGJlIGFwcGFyZW50IGluIGdlbmVyYWwgZm9saW8gcGFnZXMuCiogICBgdHR1X2Fub25fZm9saW9gIC0gVGhpcyBpcyBub3cgaGFuZGxpbmcgZ2VuZXJhbCBhbm9ueW1vdXMgZm9saW9zLgoqICAgYHR0dV9hbm9uX2xhenlmcmVlX2ZvbGlvYCAtIFRoaXMgaXMgbm93IGhhbmRsaW5nIGFub255bW91cyBsYXp5LWZyZWUgZm9saW9zLgoqICAgYHR0dV9hbm9uX3N3YXBiYWNrZWRfZm9saW9gIC0gVGhpcyBpcyBub3cgaGFuZGxpbmcgYW5vbnltb3VzIGZvbGlvcyB0aGF0IGhhdmUgc3dhcCBiYWNraW5nLgoqICAgYHRyeV90b191bm1hcGAgLSBUaGUgbWFpbiBlbnRyeSBwb2ludCwgYW5kIHRoZSBmdW5jdGlvbiB3aGVyZSB0aGUgY29udHJvbCBmbG93IGJyYW5jaGVzLgoKQW5kIG9mIGNvdXJzZSwgSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGUgZnV6emluZyBlbnZpcm9ubWVudCBpcyBhcHByb3ByaWF0ZWx5IGNvbmZpZ3VyZWQuIFdlJiMzOTtsbCBuZWVkIHRvIGVuYWJsZSBgSFVHRVRMQl9QQUdFYCwgb2YgY291cnNlLCBmb3IgaHVnZXRsYiB0ZXN0aW5nLiBUaGUgcHJlc2VuY2Ugb2Ygc3dhcC1iYWNrZWQgZm9saW9zIGNhbGxzIGZvciB0aGUgYFNXQVBgIGNvbmZpZyB0byBiZSBlbmFibGVkLiBBbmQgc2luY2UgdGhlcmUmIzM5O3Mgc29tZSBtZW50aW9uIG9mIGBUVFVfSFdQT0lTT05gIGxvZ2ljIHdpdGhpbiwgSSBuZWVkIHRvIGhhdmUgZWl0aGVyIGBIV1BPSVNPTl9JTkpFQ1RgIG9yIGBNRU1PUllfRkFJTFVSRWAgZW5hYmxlZC4KClJpZ2h0LiBUaW1lIHRvIHZlcmlmeSB0aG9zZSBjb25maWdzIGFuZCBzdGFydCBkaWdnaW5nIGludG8gdGhlIGNvZGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDcgMjA6Mzc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dHJ5X3RvX3VubWFwX2h1Z2V0bGJfb25lJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3JtYXAuYz0xOTQ0PXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGZvbGlvX3VubWFwX3B0ZV9iYXRjaChzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuLS1cbm1tL3JtYXAuYy0xOTgwLVxubW0vcm1hcC5jOjE5ODE6c3RhdGljIGJvb2wgdHJ5X3RvX3VubWFwX2h1Z2V0bGJfb25lKHN0cnVjdCBmb2xpbyAqZm9saW8sXG5tbS9ybWFwLmMtMTk4Mi1cdFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcywgdm9pZCAqYXJnKVxuLS1cbm1tL3JtYXAuYz0yNDUzPXZvaWQgdHJ5X3RvX3VubWFwKHN0cnVjdCBmb2xpbyAqZm9saW8sIGVudW0gdHR1X2ZsYWdzIGZsYWdzKVxuLS1cbm1tL3JtYXAuYy0yNDU2LVx0XHQucm1hcF9vbmUgPSBmb2xpb190ZXN0X2h1Z2V0bGIoZm9saW8pID9cbm1tL3JtYXAuYzoyNDU3Olx0XHRcdFx0dHJ5X3RvX3VubWFwX2h1Z2V0bGJfb25lIDogdHJ5X3RvX3VubWFwX29uZSxcbm1tL3JtYXAuYy0yNDU4LVx0XHQuYXJnID0gKHZvaWQgKilmbGFncyxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNyAyMDozNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5NDkxCgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogMTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGFzIHlvdSByZXF1ZXN0ZWQ6CgoqKktjb25maWcgYW5kIEh1Z2UgUGFnZXM6IEEgUXVpY2sgQ2hlY2sqKgoKT2theSwgYmVmb3JlIGRpdmluZyBhbnkgZGVlcGVyLCBJIG5lZWQgdG8gbWFrZSBhYnNvbHV0ZWx5IHN1cmUgdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uIGZvciBIdWdlVExCIHBhZ2VzIGlzIHByb3Blcmx5IHNldC4gSXQmIzM5O3MgZWFzeSB0byBvdmVybG9vaywgYW5kIGEgbWlzY29uZmlndXJhdGlvbiBoZXJlIHdvdWxkIHRocm93IGV2ZXJ5dGhpbmcgb2ZmLiBTbywgSSBuZWVkIHRvIG9wZW4gdGhlIGBLY29uZmlnYCBmaWxlcyBhbmQgc2VhcmNoIGZvciBgSFVHRVRMQl9QQUdFYC4gVGhhdCYjMzk7cyB0aGUgYmFzZWxpbmUuIEkgbmVlZCB0byB2ZXJpZnkgaXRzIHN0YXR1cyAtIGlzIGl0IGVuYWJsZWQsIGRpc2FibGVkLCBvciBzZXQgdG8gc29tZSBzcGVjaWZpYyB2YWx1ZT8gQSBxdWljayBzY2FuIG9mIHRoZSByZWxldmFudCBLY29uZmlnIG9wdGlvbnMgd2lsbCBpbW1lZGlhdGVseSB0ZWxsIG1lIGlmIEkmIzM5O20gZXZlbiAqYWJsZSogdG8gd29yayB3aXRoIGh1Z2V0bGJmcy4gVGhpcyBpcyBqdXN0IGEgc2FuaXR5IGNoZWNrOyBkb24mIzM5O3Qgd2FzdGUgdGltZSBvbiBhbnl0aGluZyBlbHNlIHlldC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNyAyMDozODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgSFVHRVRMQl9QQUdFJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvc2gvbW0vS2NvbmZpZz0xNTg9Y2hvaWNlXG4tLVxuYXJjaC9zaC9tbS9LY29uZmlnLTE2My1cbmFyY2gvc2gvbW0vS2NvbmZpZzoxNjQ6Y29uZmlnIEhVR0VUTEJfUEFHRV9TSVpFXzY0S1xuYXJjaC9zaC9tbS9LY29uZmlnLTE2NS1cdGJvb2wgXCYjMzQ7NjRrQlwmIzM0O1xuLS1cbmFyY2gvc2gvbW0vS2NvbmZpZy0xNjctXG5hcmNoL3NoL21tL0tjb25maWc6MTY4OmNvbmZpZyBIVUdFVExCX1BBR0VfU0laRV8yNTZLXG5hcmNoL3NoL21tL0tjb25maWctMTY5LVx0Ym9vbCBcJiMzNDsyNTZrQlwmIzM0O1xuLS1cbmFyY2gvc2gvbW0vS2NvbmZpZy0xNzEtXG5hcmNoL3NoL21tL0tjb25maWc6MTcyOmNvbmZpZyBIVUdFVExCX1BBR0VfU0laRV8xTUJcbmFyY2gvc2gvbW0vS2NvbmZpZy0xNzMtXHRib29sIFwmIzM0OzFNQlwmIzM0O1xuYXJjaC9zaC9tbS9LY29uZmlnLTE3NC1cbmFyY2gvc2gvbW0vS2NvbmZpZzoxNzU6Y29uZmlnIEhVR0VUTEJfUEFHRV9TSVpFXzRNQlxuYXJjaC9zaC9tbS9LY29uZmlnLTE3Ni1cdGJvb2wgXCYjMzQ7NE1CXCYjMzQ7XG4tLVxuYXJjaC9zaC9tbS9LY29uZmlnLTE3OC1cbmFyY2gvc2gvbW0vS2NvbmZpZzoxNzk6Y29uZmlnIEhVR0VUTEJfUEFHRV9TSVpFXzY0TUJcbmFyY2gvc2gvbW0vS2NvbmZpZy0xODAtXHRib29sIFwmIzM0OzY0TUJcJiMzNDtcbi0tXG5mcy9LY29uZmlnPTI2Mj1pZiBIVUdFVExCRlNcbmZzL0tjb25maWc6MjYzOmNvbmZpZyBIVUdFVExCX1BBR0VfT1BUSU1JWkVfVk1FTU1BUF9ERUZBVUxUX09OXG5mcy9LY29uZmlnLTI2NC1cdGJvb2wgXCYjMzQ7SHVnZVRMQiBWbWVtbWFwIE9wdGltaXphdGlvbiAoSFZPKSBkZWZhdWx0cyB0byBvblwmIzM0O1xuLS1cbmZzL0tjb25maWc9MjcxPWVuZGlmICMgSFVHRVRMQkZTXG5mcy9LY29uZmlnLTI3Mi1cbmZzL0tjb25maWc6MjczOmNvbmZpZyBIVUdFVExCX1BBR0VcbmZzL0tjb25maWctMjc0LVx0ZGVmX2Jvb2wgSFVHRVRMQkZTXG4tLVxuZnMvS2NvbmZpZy0yNzYtXG5mcy9LY29uZmlnOjI3Nzpjb25maWcgSFVHRVRMQl9QQUdFX09QVElNSVpFX1ZNRU1NQVBcbmZzL0tjb25maWctMjc4LVx0ZGVmX2Jvb2wgSFVHRVRMQl9QQUdFXG4tLVxubW0vS2NvbmZpZz03MDY9Y29uZmlnIEFSQ0hfSEFTX1BNRF9TT0ZUTEVBVkVTXG4tLVxubW0vS2NvbmZpZy03MDgtXG5tbS9LY29uZmlnOjcwOTpjb25maWcgSFVHRVRMQl9QQUdFX1NJWkVfVkFSSUFCTEVcbm1tL0tjb25maWctNzEwLVx0ZGVmX2Jvb2wgblxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA3IDIwOjM4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwMjgyCgkJCQkJCQlvdXRwdXQ6IDE5CgkJCQkJCQl0aG91Z2h0czogMzAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHByZXNlbnRlZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3MsIGdpdmVuIG15IGV4cGVydGlzZToKCioqRGl2aW5nIGludG8gdGhlIEh1Z2VUTEIgQ29uZmlndXJhdGlvbioqCgpBbHJpZ2h0LCBzbyBgSFVHRVRMQl9QQUdFYCBpcyB0aGUgdGFyZ2V0IGhlcmUuIFRoYXQmIzM5O3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50IGZvciBpbnZlc3RpZ2F0aW5nIHRoZSBodWdlIHBhZ2Ugc3VwcG9ydC4gQW5kIHRoZSBLY29uZmlnIGVudHJ5IG1lbnRpb25zIGEgZGVwZW5kZW5jeTogYEhVR0VUTEJGU2AuIFJpZ2h0LCBzbyB0aGlzIGNvbmZpcm1zIHRoZSBkZXBlbmRlbmN5LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIGBIVUdFVExCRlNgIGNvbXBvbmVudCB0byBmdWxseSBncmFzcCB0aGUgY2FwYWJpbGl0aWVzIG9mIGBIVUdFVExCX1BBR0VgLiBMZXQgbWUgcXVpY2tseSBzaGlmdCBteSBmb2N1cyBhbmQgc3RhcnQgbG9va2luZyBpbnRvIHRoZSBkZXRhaWxzIG9mIHdoYXQgYEhVR0VUTEJGU2AgYnJpbmdzIHRvIHRoZSB0YWJsZS4gVGltZSB0byBkaWcgZGVlcGVyIGludG8gdGhlIGZpbGUgc3lzdGVtIHNpZGUgb2YgdGhpcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNyAyMDozODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgSFVHRVRMQkZTJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL0tjb25maWc9MjQ3PWNvbmZpZyBBUkNIX1NVUFBPUlRTX0hVR0VUTEJGU1xuLS1cbmZzL0tjb25maWctMjQ5LVxuZnMvS2NvbmZpZzoyNTA6bWVudWNvbmZpZyBIVUdFVExCRlNcbmZzL0tjb25maWctMjUxLVx0Ym9vbCBcJiMzNDtIdWdlVExCIGZpbGUgc3lzdGVtIHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNyAyMDozODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDU2MAoJCQkJCQkJb3V0cHV0OiAxOQoJCQkJCQkJdGhvdWdodHM6IDIzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqS2VybmVsIENvbmZpZ3VyYXRpb24gRGVlcCBEaXZlKioKCkFscmlnaHQsIHNvIEkmIzM5O20gZGl2aW5nIGludG8gdGhpcyBrZXJuZWwgY29uZmlndXJhdGlvbiwgYW5kIHRoZSBrZXkgdGhpbmcgSSYjMzk7bSBpbW1lZGlhdGVseSBob21pbmcgaW4gb24gaXMgYEhVR0VUTEJGU2AuIFRoYXQmIzM5O3MgdGhlIG9uZSBJIG5lZWQgdG8gZW5hYmxlIGZvciB0aGUgdXNlIGNhc2Ugd2UmIzM5O3JlIGNvbnNpZGVyaW5nLCBubyBkb3VidC4gTm93LCBiZWZvcmUgSSBwcm9jZWVkIHdpdGggYW55IG1vcmUgb2YgdGhlc2UgY2hhbmdlcywgbGV0JiMzOTtzIGp1c3QgZG8gYSBxdWljayBkb3VibGUtY2hlY2sgb2Ygc29tZXRoaW5nIHJlbGF0ZWQsIHRvIGVuc3VyZSB3ZSBhcmUgY292ZXJpbmcgdGhlIGJhc2VzLiBMZXQmIzM5O3MgbWFrZSBzdXJlIHRoYXQgYE1FTU9SWV9GQUlMVVJFYCBpcyBzZXQgdG8gdGhlIGNvcnJlY3QgdmFsdWUsIHNpbmNlIHRoYXQgaGFzIGltcGxpY2F0aW9ucyBmb3IgdGhlIG92ZXJhbGwgbWVtb3J5IG1hbmFnZW1lbnQgc3RyYXRlZ3ksIGFuZCBob3cgaXQgd2lsbCBpbnRlcmFjdCB3aXRoIHRoaXMgbmV3IHNldHVwLiBKdXN0IHdhbnQgdG8gbWFrZSBzdXJlIHRoZSBpbnRlcmFjdGlvbnMgYXJlIGFzIGV4cGVjdGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNyAyMDozODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTUVNT1JZX0ZBSUxVUkUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vS2NvbmZpZz03NzQ9Y29uZmlnIEFSQ0hfU1VQUE9SVFNfTUVNT1JZX0ZBSUxVUkVcbi0tXG5tbS9LY29uZmlnLTc3Ni1cbm1tL0tjb25maWc6Nzc3OmNvbmZpZyBNRU1PUllfRkFJTFVSRVxubW0vS2NvbmZpZy03NzgtXHRkZXBlbmRzIG9uIE1NVVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNyAyMDozODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDg0MwoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDEyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIHByZXNlbnRlZCBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipEZWVwIERpdmUgb24gYEhXUE9JU09OX0lOSkVDVGAqKgoKQWxyaWdodCwgdGltZSB0byBjaXJjbGUgYmFjayBhbmQgZ2l2ZSBgSFdQT0lTT05fSU5KRUNUYCBhIHByb3BlciBvbmNlLW92ZXIuIFRoaXMgbGlrZWx5IG1lYW5zIEkmIzM5O20gbG9va2luZyBmb3IgYSBwYXJ0aWN1bGFyIGludGVyYWN0aW9uIG9yIHBvdGVudGlhbCB2dWxuZXJhYmlsaXR5IHJlbGF0ZWQgdG8gaGFyZHdhcmUtYmFzZWQgbWVtb3J5IGNvcnJ1cHRpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgc3BlY2lmaWMgcG9pc29uIHZhbHVlcyBhcmUgYmVpbmcgaW50cm9kdWNlZCwgaG93IHRoZXkgYXJlIGJlaW5nIGluamVjdGVkLCBhbmQgdGhlIGNvbmRpdGlvbnMgdW5kZXIgd2hpY2ggdGhpcyBpbmplY3Rpb24gaXMgb2NjdXJyaW5nLiBJJiMzOTtsbCBuZWVkIHRvIHRoaW5rIHRocm91Z2ggdGhlIHBvc3NpYmxlIGltcGFjdCwgbWF5YmUgY29uc2lkZXJpbmcgaG93IHRoaXMgcmVsYXRlcyB0byBtaXRpZ2F0aW9uIHRlY2huaXF1ZXMgbGlrZSBtZW1vcnkgdGFnZ2luZyBvciBlcnJvci1jb3JyZWN0aW5nIGNvZGVzLCBhbmQgaG93IHRoaXMgZmVhdHVyZSBtaWdodCBpbnRlcmFjdCB3aXRoIG90aGVyIGhhcmR3YXJlIGZlYXR1cmVzIG9yIHNvZnR3YXJlIHN1YnN5c3RlbXMuIEkgbmVlZCB0byBhc3Nlc3MgdGhlIHNjb3BlIG9mIHRoaXMgcG9pc29uaW5nIGFuZCBwb3RlbnRpYWwgaW1wYWN0IG9uIHN5c3RlbSBzdGFiaWxpdHksIHNlY3VyaXR5LCBvciBkYXRhIGludGVncml0eS4gVWx0aW1hdGVseSwgSSYjMzk7bSB0cnlpbmcgdG8gZGV0ZXJtaW5lIGlmIHRoZXJlJiMzOTtzIGFueSBhcmVhIHRoYXQgbmVlZHMgZGVlcGVyIGFuYWx5c2lzIG9yIGltbWVkaWF0ZSBhdHRlbnRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA3IDIwOjM4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBIV1BPSVNPTl9JTkpFQ1QmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vS2NvbmZpZz03Nzc9Y29uZmlnIE1FTU9SWV9GQUlMVVJFXG4tLVxubW0vS2NvbmZpZy03ODctXG5tbS9LY29uZmlnOjc4ODpjb25maWcgSFdQT0lTT05fSU5KRUNUXG5tbS9LY29uZmlnLTc4OS1cdHRyaXN0YXRlIFwmIzM0O0hXUG9pc29uIHBhZ2VzIGluamVjdG9yXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA3IDIwOjM4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExMTUxCgkJCQkJCQlvdXRwdXQ6IDE3CgkJCQkJCQl0aG91Z2h0czogNDYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkmIzM5O20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6CgoqKkVuYWJsaW5nIFJvYnVzdCBIYXJkd2FyZSBQb2lzb24gVGVzdGluZyoqCgpPa2F5LCBzbyBJJiMzOTttIHRoaW5raW5nLCB0byByZWFsbHkgZ2l2ZSB0aGUgaGFyZHdhcmUgcG9pc29uIGxvZ2ljIGEgd29ya291dCwgSSBzaG91bGQgZGVmaW5pdGVseSBlbmFibGUgYm90aCBgTUVNT1JZX0ZBSUxVUkVgIGFuZCBgSFdQT0lTT05fSU5KRUNUYC4gVGhhdCBjb21iaW5hdGlvbiBzaG91bGQgcHJvdmlkZSBhIHNvbGlkIHBsYXRmb3JtIGZvciB0ZXN0aW5nLiBBbmQsIG9mIGNvdXJzZSwgSSYjMzk7bGwgbmVlZCBgU1dBUGAgZW5hYmxlZCwgc2luY2UgdGhlIGB0dHVfYW5vbl9zd2FwYmFja2VkX2ZvbGlvYCB0ZXN0IHJlbGllcyBvbiBpdC4gTWFrZXMgc2Vuc2UuIE5lZWQgdGhlIGJhc2ljcyB0byB3b3JrIG9uIHRoZSBzcGVjaWZpY3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA3IDIwOjM4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBTV0FQJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvbWlwcy9LY29uZmlnPTEyNjM9Y29uZmlnIE1JUFNfU1BSQU1cbi0tXG5hcmNoL21pcHMvS2NvbmZpZy0xMjY1LVxuYXJjaC9taXBzL0tjb25maWc6MTI2Njpjb25maWcgU1dBUF9JT19TUEFDRVxuYXJjaC9taXBzL0tjb25maWctMTI2Ny1cdGJvb2xcbi0tXG5hcmNoL3NoL0tjb25maWc9MTI5PWNvbmZpZyBJT19UUkFQUEVEXG4tLVxuYXJjaC9zaC9LY29uZmlnLTEzMS1cbmFyY2gvc2gvS2NvbmZpZzoxMzI6Y29uZmlnIFNXQVBfSU9fU1BBQ0VcbmFyY2gvc2gvS2NvbmZpZy0xMzMtXHRib29sXG4tLVxubW0vS2NvbmZpZz05PWNvbmZpZyBBUkNIX05PX1NXQVBcbi0tXG5tbS9LY29uZmlnLTExLVxubW0vS2NvbmZpZzoxMjptZW51Y29uZmlnIFNXQVBcbm1tL0tjb25maWctMTMtXHRib29sIFwmIzM0O1N1cHBvcnQgZm9yIHBhZ2luZyBvZiBhbm9ueW1vdXMgbWVtb3J5IChzd2FwKVwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNyAyMDozODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTU0NQoJCQkJCQkJb3V0cHV0OiAyNgoJCQkJCQkJdGhvdWdodHM6IDIyNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgVW5tYXBwaW5nIEZ1bmN0aW9ucyBmb3IgRnV6emluZyBQb3RlbnRpYWwqKgoKT2theSwgc28gdGhlIGBTV0FQYCBtZWNoYW5pc20gbG9va3MgbGlrZSBhIHByb21pc2luZyBhdmVudWUgZm9yIGV4cGxvcmF0aW9uLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gaWRlbnRpZnkgdGhlIGtleSBmdW5jdGlvbnMgcmVsYXRlZCB0byBtZW1vcnkgdW5tYXBwaW5nLCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBjb250ZXh0IG9mIGh1Z2V0bGJmcyBhbmQgYW5vbnltb3VzIHBhZ2VzLCB3aXRoIHRoZSBhaW0gb2YgcG90ZW50aWFsbHkgdGFyZ2V0aW5nIHRoZW0gd2l0aCBmdXp6aW5nLgoKSSBuZWVkIHRvIG5haWwgZG93biB0aGUgY29yZSBmdW5jdGlvbnMuIExldCYjMzk7cyBzZWUuLi4gdGhlIG9uZXMgdGhhdCBjb21lIHRvIG1pbmQgYXJlOiBgdHJ5X3RvX3VubWFwX2h1Z2V0bGJfb25lYCwgYHR0dV9hbm9uX2ZvbGlvYCwgYHR0dV9hbm9uX2xhenlmcmVlX2ZvbGlvYCwgYW5kIGB0dHVfYW5vbl9zd2FwYmFja2VkX2ZvbGlvYC4gQWxsIG9mIHRob3NlIGFyZSBzdGF0aWMgYW5kIG5lc3RsZWQgd2l0aGluIGBtbS9ybWFwLmNgLCBleGNlcHQgZm9yIGB0cnlfdG9fdW5tYXBfaHVnZXRsYl9vbmVgLCBidXQgYSBxdWljayBjaGVjayByZXZlYWxzIHRoYXQgaXQmIzM5O3MgYWxzbyBzdGF0aWMuIEhhbmcgb24sIGlzbiYjMzk7dCBgdHJ5X3RvX3VubWFwYCBleHBvcnRlZD8gWWVzLCBpdCBpcyEKCk5vdywgdGhlIGltcG9ydGFudCBxdWVzdGlvbjogQ2FuIFN5emthbGxlciBlZmZlY3RpdmVseSB0YXJnZXQgKnN0YXRpYyogZnVuY3Rpb25zIGZvciBmdXp6aW5nPyBNeSB1bmRlcnN0YW5kaW5nIGlzIHRoYXQgd2hpbGUgU3l6a2FsbGVyIHByaW1hcmlseSB0YXJnZXRzIHN5c2NhbGxzLCBpdCB1c2VzIGZ1bmN0aW9uIG5hbWVzIGZvciBjb3ZlcmFnZSBndWlkYW5jZSBhbmQgcG90ZW50aWFsIGNvbnRyb2wuIFRoZXNlIHN0YXRpYyBmdW5jdGlvbnMgYXJlIGNhbmRpZGF0ZXMgZm9yIGBGb2N1c1N5bWJvbHNgLCBhY3RpbmcgYXMgdXNlZnVsIGZpbHRlcnMgb3IgZ3VpZGVzIGZvciB0aGUgZnV6emVyLiBJdCBsb29rcyBsaWtlIHN0YXRpYyBmdW5jdGlvbnMgYXJlIHBlcmZlY3RseSBmaW5lIGZvciB0aGlzIGtpbmQgb2YgZ3VpZGFuY2UuCgpJIHNob3VsZCBwcm9iYWJseSBjb25maXJtIGJ5IGV4YW1pbmluZyBgdHJ5X3RvX3VubWFwX2h1Z2V0bGJfb25lYCBpbiBgbW0vcm1hcC5jYCBpdHNlbGYuIEp1c3QgdG8gYmUgc3VyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDcgMjA6Mzg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dHJ5X3RvX3VubWFwX2h1Z2V0bGJfb25lJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3JtYXAuYz0xOTQ0PXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGZvbGlvX3VubWFwX3B0ZV9iYXRjaChzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuLS1cbm1tL3JtYXAuYy0xOTgwLVxubW0vcm1hcC5jOjE5ODE6c3RhdGljIGJvb2wgdHJ5X3RvX3VubWFwX2h1Z2V0bGJfb25lKHN0cnVjdCBmb2xpbyAqZm9saW8sXG5tbS9ybWFwLmMtMTk4Mi1cdFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcywgdm9pZCAqYXJnKVxuLS1cbm1tL3JtYXAuYz0yNDUzPXZvaWQgdHJ5X3RvX3VubWFwKHN0cnVjdCBmb2xpbyAqZm9saW8sIGVudW0gdHR1X2ZsYWdzIGZsYWdzKVxuLS1cbm1tL3JtYXAuYy0yNDU2LVx0XHQucm1hcF9vbmUgPSBmb2xpb190ZXN0X2h1Z2V0bGIoZm9saW8pID9cbm1tL3JtYXAuYzoyNDU3Olx0XHRcdFx0dHJ5X3RvX3VubWFwX2h1Z2V0bGJfb25lIDogdHJ5X3RvX3VubWFwX29uZSxcbm1tL3JtYXAuYy0yNDU4LVx0XHQuYXJnID0gKHZvaWQgKilmbGFncyxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDcgMjA6Mzg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTIzNTIKCQkJCQkJCW91dHB1dDogMTkKCQkJCQkJCXRob3VnaHRzOiAxOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBjb25zaWRlcmluZyBteSBleHBlcnRpc2U6CgoqKk15IEluaXRpYWwgQXNzZXNzbWVudCBhbmQgTmV4dCBTdGVwcyoqCgpSaWdodCwgaW5pdGlhbCBpbXByZXNzaW9uIGlzIHRoYXQgdGhlIHNpdHVhdGlvbiBpcy4uLiB3ZWxsLCAqc3RhdGljKi4gTm90aGluZyYjMzk7cyBtb3ZpbmcsIG5vdGhpbmcmIzM5O3MgZHluYW1pY2FsbHkgY2hhbmdpbmcsIGFuZCB0aGF0JiMzOTtzIG5vdCB3aGF0IEkgd2FzIGV4cGVjdGluZy4gQmFzZWQgb24gdGhpcywgSSBuZWVkIHRvIGludmVzdGlnYXRlIGZ1cnRoZXIuIEl0JiMzOTtzIHRpbWUgdG8gZGl2ZSBpbnRvIHRoZSBkYXRhLiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byBjaGVjayBvdXQgYHR0dV9hbm9uX2ZvbGlvYC4gVGhhdCYjMzk7cyB0aGUgbG9naWNhbCBuZXh0IHBvaW50IG9mIGlucXVpcnksIGdpdmVuIHRoaXMgaW5pdGlhbCBzdGF0aWMgYXNzZXNzbWVudC4gSXQgc2hvdWxkIG9mZmVyIHNvbWUgc3BlY2lmaWMgZGV0YWlscyB0aGF0IGVpdGhlciBjb25maXJtIHRoZSBjdXJyZW50IHN0YXRlLCBvciBoZWxwIHRvIHNlZSB3aGF0IGZhY3RvcnMgYXJlIGNhdXNpbmcgdGhpcyAmIzM0O3N0aWxsJiMzNDsgc3RhdGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA3IDIwOjM4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3R0dV9hbm9uX2ZvbGlvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3JtYXAuYz0yMTQwPXN0YXRpYyBpbmxpbmUgYm9vbCB0dHVfYW5vbl9zd2FwYmFja2VkX2ZvbGlvKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuLS1cbm1tL3JtYXAuYy0yMTczLVxubW0vcm1hcC5jOjIxNzQ6c3RhdGljIGlubGluZSBib29sIHR0dV9hbm9uX2ZvbGlvKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxubW0vcm1hcC5jLTIxNzUtXHRcdHN0cnVjdCBwYWdlICpzdWJwYWdlLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MsIHB0ZV90ICpwdGVwLFxuLS1cbm1tL3JtYXAuYz0yMjExPXN0YXRpYyBib29sIHRyeV90b191bm1hcF9vbmUoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4tLVxubW0vcm1hcC5jLTIzODctXHRcdH0gZWxzZSBpZiAoZm9saW9fdGVzdF9hbm9uKGZvbGlvKSkge1xubW0vcm1hcC5jOjIzODg6XHRcdFx0aWYgKCF0dHVfYW5vbl9mb2xpbyh2bWEsIGZvbGlvLCBzdWJwYWdlLCBhZGRyZXNzLFxubW0vcm1hcC5jLTIzODktXHRcdFx0XHRcdCAgICBwdm13LnB0ZSwgcHRldmFsLCBucl9wYWdlcykpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA3IDIwOjM4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyNzg3CgkJCQkJCQlvdXRwdXQ6IDIwMQoJCQkJCQkJdGhvdWdodHM6IDQyOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFVubWFwcGluZyBMb2dpYyBSZWZhY3RvcioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaXQmIzM5O3MgZGVhbGluZyB3aXRoIHRoZSB1bm1hcHBpbmcgbG9naWMgaW4gYG1tL3JtYXAuY2AuIFRoZSBjb3JlIG9mIGl0IHNlZW1zIHRvIGJlIGV4dHJhY3RpbmcgaHVnZXRsYiBhbmQgYW5vbnltb3VzIGZvbGlvIHVubWFwcGluZyBpbnRvIHNwZWNpZmljIGZ1bmN0aW9ucy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBTeXprYWxsZXIgaXMgZm9jdXNlZCBvbiB0aGUgcmlnaHQgc3ltYm9scyB0byBjYXRjaCBhbnkgcmVncmVzc2lvbnMuCgpSaWdodCwgdGhlIGZ1bmN0aW9ucy4uLiBMZXQmIzM5O3Mgc2VlLiBgdHJ5X3RvX3VubWFwX2h1Z2V0bGJfb25lYCBpcyBub3QgaW5saW5lLCBzbyBpdCAqc2hvdWxkKiBhcHBlYXIgYXMgYSBzeW1ib2wsIGVhc3kuIFRoZW4gYHR0dV9hbm9uX2xhenlmcmVlX2ZvbGlvYCBhbmQgYHR0dV9hbm9uX3N3YXBiYWNrZWRfZm9saW9gIGFyZSBgc3RhdGljIGlubGluZWAuIEl0JiMzOTtzIGZpbmUgdG8gaW5jbHVkZSBzdGF0aWMgaW5saW5lIGZ1bmN0aW9ucywgU3l6a2FsbGVyICpjYW4qIGhhbmRsZSB0aG9zZSBpZiB3ZSBoYXZlIGRlYnVnIGluZm8uIE5vdywgbGV0IG1lIGNoZWNrIHRoZSBub24taW5saW5lIGZ1bmN0aW9ucywgYHRyeV90b191bm1hcGAgaXMgZ2xvYmFsLCB3aGljaCBpcyBhbHNvIGVhc3kuIGB0cnlfdG9fdW5tYXBfb25lYCBpcyBzdGF0aWMuCgpBbHJpZ2h0LCBzbyBteSBsaXN0IG9mIGZ1bmN0aW9ucyB0byBpbmNsdWRlIGluIGBGb2N1c1N5bWJvbHNgIGlzIGdvaW5nIHRvIGJlOgotIGB0cnlfdG9fdW5tYXBfaHVnZXRsYl9vbmVgCi0gYHR0dV9hbm9uX2ZvbGlvYAotIGB0dHVfYW5vbl9sYXp5ZnJlZV9mb2xpb2AKLSBgdHR1X2Fub25fc3dhcGJhY2tlZF9mb2xpb2AKLSBgdHJ5X3RvX3VubWFwX29uZWAKClRoYXQgc2hvdWxkIGNvdmVyIHRoZSBjb3JlIGNoYW5nZXMgcmVsYXRlZCB0byB0aGUgZm9saW8gdW5tYXBwaW5nIGxvZ2ljLiBUaGUgcGF0Y2ggbWVudGlvbnMgcmV2ZXJzZSBtYXBwaW5nLCBodWdlIHBhZ2VzLCBhbmQgc3dhcCwgc28gdGhlIGZ1enppbmcgc2hvdWxkIHRhcmdldCB0aG9zZSBhcmVhcy4KCk5vdywgbGV0JiMzOTtzIGxvb2sgYXQgdGhlIGNvbmZpZ3MgdGhhdCBhcmUgcmVsZXZhbnQuIEkgY2FuIHNlZSB0aGUgcGF0Y2ggdXNlcyBgSFVHRVRMQkZTYCwgYFNXQVBgLCBgTUVNT1JZX0ZBSUxVUkVgLCBhbmQgYEhXUE9JU09OX0lOSkVDVGAuIFRoZSBuZXcgbG9naWMgaW50ZXJhY3RzIHdpdGggbWVtb3J5IGZhaWx1cmUsIGFuZCB0aGUgaHdwb2lzb24gdGVzdGluZywgYW5kIGFub255bW91cyBtZW1vcnkgYW5kIGh1Z2V0bGIuCgpJIG5lZWQgdG8gbWFrZSBzdXJlIEkgZ2V0IHRoZSBtZW1vcnkgZmFpbHVyZSBsb2dpYyBjb3ZlcmVkIGluIHRoZSBmdXp6aW5nLiBUaGUgcGF0Y2ggaXMgYWxzbyB1c2luZyBgZm9saW9fdGVzdF9od3BvaXNvbihmb2xpbylgIHNvIGBUVFVfSFdQT0lTT05gIGlzIGdvaW5nIHRvIGJlIHJlbGV2YW50LiBgZm9saW9fdGVzdF9hbm9uKGZvbGlvKWAgZm9yIGFub255bW91cyBtZW1vcnksIGFuZCBgZm9saW9fdGVzdF9odWdldGxiKGZvbGlvKWAgZm9yIGh1Z2V0bGIuCgpPa2F5LCBJIHRoaW5rIEkmIzM5O3ZlIGdvdCBpdCBhbGwuIFRpbWUgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNyAyMDozODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7SFVHRVRMQkZTJiMzNDssCiAgICAmIzM0O1NXQVAmIzM0OywKICAgICYjMzQ7TUVNT1JZX0ZBSUxVUkUmIzM0OywKICAgICYjMzQ7SFdQT0lTT05fSU5KRUNUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dHJ5X3RvX3VubWFwX2h1Z2V0bGJfb25lJiMzNDssCiAgICAmIzM0O3R0dV9hbm9uX2ZvbGlvJiMzNDssCiAgICAmIzM0O3R0dV9hbm9uX2xhenlmcmVlX2ZvbGlvJiMzNDssCiAgICAmIzM0O3R0dV9hbm9uX3N3YXBiYWNrZWRfZm9saW8mIzM0OywKICAgICYjMzQ7dHJ5X3RvX3VubWFwX29uZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZWZhY3RvcnMgdGhlIHVubWFwcGluZyBsb2dpYyBpbiBtbS9ybWFwLmMgYnkgZXh0cmFjdGluZyBodWdldGxiIGFuZCBhbm9ueW1vdXMgZm9saW8gdW5tYXBwaW5nIGludG8gc2VwYXJhdGUgZnVuY3Rpb25zICh0cnlfdG9fdW5tYXBfaHVnZXRsYl9vbmUsIHR0dV9hbm9uX2ZvbGlvLCBldGMuKS4gSXQgbW9kaWZpZXMgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYyByZWxhdGVkIHRvIHJldmVyc2UgbWFwcGluZywgaHVnZSBwYWdlcywgYW5kIHN3YXAuIEZ1enppbmcgc2hvdWxkIGZvY3VzIG9uIHRoZXNlIG5ldyBmdW5jdGlvbnMgdG8gZW5zdXJlIG5vIHJlZ3Jlc3Npb25zIG9yIGJ1Z3Mgd2VyZSBpbnRyb2R1Y2VkIGR1cmluZyB0aGUgcmVmYWN0b3JpbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0hVR0VUTEJGUyYjMzQ7LAogICAgJiMzNDtTV0FQJiMzNDssCiAgICAmIzM0O01FTU9SWV9GQUlMVVJFJiMzNDssCiAgICAmIzM0O0hXUE9JU09OX0lOSkVDVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3RyeV90b191bm1hcF9odWdldGxiX29uZSYjMzQ7LAogICAgJiMzNDt0dHVfYW5vbl9mb2xpbyYjMzQ7LAogICAgJiMzNDt0dHVfYW5vbl9sYXp5ZnJlZV9mb2xpbyYjMzQ7LAogICAgJiMzNDt0dHVfYW5vbl9zd2FwYmFja2VkX2ZvbGlvJiMzNDssCiAgICAmIzM0O3RyeV90b191bm1hcF9vbmUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSB1bm1hcHBpbmcgbG9naWMgaW4gbW0vcm1hcC5jIGJ5IGV4dHJhY3RpbmcgaHVnZXRsYiBhbmQgYW5vbnltb3VzIGZvbGlvIHVubWFwcGluZyBpbnRvIHNlcGFyYXRlIGZ1bmN0aW9ucyAodHJ5X3RvX3VubWFwX2h1Z2V0bGJfb25lLCB0dHVfYW5vbl9mb2xpbywgZXRjLikuIEl0IG1vZGlmaWVzIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgbG9naWMgcmVsYXRlZCB0byByZXZlcnNlIG1hcHBpbmcsIGh1Z2UgcGFnZXMsIGFuZCBzd2FwLiBGdXp6aW5nIHNob3VsZCBmb2N1cyBvbiB0aGVzZSBuZXcgZnVuY3Rpb25zIHRvIGVuc3VyZSBubyByZWdyZXNzaW9ucyBvciBidWdzIHdlcmUgaW50cm9kdWNlZCBkdXJpbmcgdGhlIHJlZmFjdG9yaW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDctMDdUMjA6Mzc6NDYuMzQ5NDE3MjdaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NjU1MTM2NDkzNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJIVUdFVExCRlNcIixcbiAgICBcIlNXQVBcIixcbiAgICBcIk1FTU9SWV9GQUlMVVJFXCIsXG4gICAgXCJIV1BPSVNPTl9JTkpFQ1RcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ0cnlfdG9fdW5tYXBfaHVnZXRsYl9vbmVcIixcbiAgICBcInR0dV9hbm9uX2ZvbGlvXCIsXG4gICAgXCJ0dHVfYW5vbl9sYXp5ZnJlZV9mb2xpb1wiLFxuICAgIFwidHR1X2Fub25fc3dhcGJhY2tlZF9mb2xpb1wiLFxuICAgIFwidHJ5X3RvX3VubWFwX29uZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlZmFjdG9ycyB0aGUgdW5tYXBwaW5nIGxvZ2ljIGluIG1tL3JtYXAuYyBieSBleHRyYWN0aW5nIGh1Z2V0bGIgYW5kIGFub255bW91cyBmb2xpbyB1bm1hcHBpbmcgaW50byBzZXBhcmF0ZSBmdW5jdGlvbnMgKHRyeV90b191bm1hcF9odWdldGxiX29uZSwgdHR1X2Fub25fZm9saW8sIGV0Yy4pLiBJdCBtb2RpZmllcyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGxvZ2ljIHJlbGF0ZWQgdG8gcmV2ZXJzZSBtYXBwaW5nLCBodWdlIHBhZ2VzLCBhbmQgc3dhcC4gRnV6emluZyBzaG91bGQgZm9jdXMgb24gdGhlc2UgbmV3IGZ1bmN0aW9ucyB0byBlbnN1cmUgbm8gcmVncmVzc2lvbnMgb3IgYnVncyB3ZXJlIGludHJvZHVjZWQgZHVyaW5nIHRoZSByZWZhY3RvcmluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDdUMjA6Mzc6NDYuMzQ5NDIyODFaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUyNzQ0ODM0OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDFlODRiYzBlMGMyMDZmOTE1MDA4YWQ0YzcxOTA1Y2ViMjc4YjFjNThcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFR1ZSBKdWwgNyAyMDozNzo0NCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaCBiL2luY2x1ZGUvbGludXgvaHVnZXRsYi5oXFxuaW5kZXggNDExNTA3NmU0OTIyYWUuLmJmN2UxNjNlMzc3OWQ4IDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgvaHVnZXRsYi5oXFxuKysrIGIvaW5jbHVkZS9saW51eC9odWdldGxiLmhcXG5AQCAtMTI3MSw2ICsxMjcxLDcgQEAgc3RhdGljIGlubGluZSB2b2lkIGh1Z2V0bGJfY291bnRfc3ViKGxvbmcgbCwgc3RydWN0IG1tX3N0cnVjdCAqbW0pXFxuIH1cXG4gXFxuIHB0ZV90IGh1Z2VfcHRlcF9nZXQoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkciwgcHRlX3QgKnB0ZXApO1xcbit1bnNpZ25lZCBsb25nIGh1Z2VfcHRlX2RpcnR5KHB0ZV90IHB0ZSk7XFxuIFxcbiBzdGF0aWMgaW5saW5lIHB0ZV90IGh1Z2VfcHRlcF9jbGVhcl9mbHVzaChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4gXFx0XFx0XFx0XFx0XFx0ICB1bnNpZ25lZCBsb25nIGFkZHIsIHB0ZV90ICpwdGVwKVxcbmRpZmYgLS1naXQgYS9tbS9ybWFwLmMgYi9tbS9ybWFwLmNcXG5pbmRleCA5OTM5NDAwZTc3Yzc5YS4uZjAyMWVjZDUxYTRhMmUgMTAwNjQ0XFxuLS0tIGEvbW0vcm1hcC5jXFxuKysrIGIvbW0vcm1hcC5jXFxuQEAgLTE5NzgsNiArMTk3OCwyMzMgQEAgc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgZm9saW9fdW5tYXBfcHRlX2JhdGNoKHN0cnVjdCBmb2xpbyAqZm9saW8sXFxuIFxcdFxcdFxcdFxcdCAgICAgRlBCX1JFU1BFQ1RfV1JJVEUgfCBGUEJfUkVTUEVDVF9TT0ZUX0RJUlRZKTtcXG4gfVxcbiBcXG4rc3RhdGljIGJvb2wgdHJ5X3RvX3VubWFwX2h1Z2V0bGJfb25lKHN0cnVjdCBmb2xpbyAqZm9saW8sXFxuK1xcdFxcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MsIHZvaWQgKmFyZylcXG4re1xcbitcXHRERUZJTkVfRk9MSU9fVk1BX1dBTEsocHZtdywgZm9saW8sIHZtYSwgYWRkcmVzcywgMCk7XFxuK1xcdHN0cnVjdCBtbXVfbm90aWZpZXJfcmFuZ2UgcmFuZ2U7XFxuK1xcdGVudW0gdHR1X2ZsYWdzIGZsYWdzID0gKGVudW0gdHR1X2ZsYWdzKShsb25nKWFyZztcXG4rXFx0c3RydWN0IG1tX3N0cnVjdCAqbW0gPSB2bWEtXFx1MDAzZXZtX21tO1xcbitcXHRjb25zdCB1bnNpZ25lZCBsb25nIGhzeiA9IGh1Z2VfcGFnZV9zaXplKGhzdGF0ZV92bWEodm1hKSk7XFxuK1xcdGJvb2wgcmV0ID0gdHJ1ZTtcXG4rXFx0cHRlX3QgcHRldmFsO1xcbitcXG4rXFx0LypcXG4rXFx0ICogVGhlIHRyeV90b191bm1hcCgpIGlzIG9ubHkgcGFzc2VkIGEgaHVnZXRsYiBmb2xpbyBpbiB0aGUgY2FzZVxcbitcXHQgKiB3aGVyZSB0aGUgaHVnZXRsYiBmb2xpbyBpcyBwb2lzb25lZC5cXG4rXFx0ICovXFxuK1xcdFZNX1dBUk5fT05fRk9MSU8oIWZvbGlvX3Rlc3RfaHdwb2lzb24oZm9saW8pLCBmb2xpbyk7XFxuK1xcdFZNX1dBUk5fT05fT05DRSghKGZsYWdzIFxcdTAwMjYgVFRVX0hXUE9JU09OKSk7XFxuK1xcbitcXHRyYW5nZS5lbmQgPSB2bWFfYWRkcmVzc19lbmQoXFx1MDAyNnB2bXcpO1xcbitcXHRtbXVfbm90aWZpZXJfcmFuZ2VfaW5pdChcXHUwMDI2cmFuZ2UsIE1NVV9OT1RJRllfQ0xFQVIsIDAsIHZtYS1cXHUwMDNldm1fbW0sXFxuK1xcdFxcdFxcdFxcdGFkZHJlc3MsIHJhbmdlLmVuZCk7XFxuK1xcdGFkanVzdF9yYW5nZV9pZl9wbWRfc2hhcmluZ19wb3NzaWJsZSh2bWEsIFxcdTAwMjZyYW5nZS5zdGFydCwgXFx1MDAyNnJhbmdlLmVuZCk7XFxuK1xcdG1tdV9ub3RpZmllcl9pbnZhbGlkYXRlX3JhbmdlX3N0YXJ0KFxcdTAwMjZyYW5nZSk7XFxuK1xcbitcXHQvKiBUaGVyZSBpcyBvbmx5IGEgc2luZ2xlIG1hcHBpbmcgaW4gYSBWTUEuICovXFxuK1xcdGlmICghcGFnZV92bWFfbWFwcGVkX3dhbGsoXFx1MDAyNnB2bXcpKVxcbitcXHRcXHRnb3RvIHJhbmdlX2VuZDtcXG4rXFxuK1xcdGFkZHJlc3MgPSBwdm13LmFkZHJlc3M7XFxuK1xcdHB0ZXZhbCA9IGh1Z2VfcHRlcF9nZXQobW0sIGFkZHJlc3MsIHB2bXcucHRlKTtcXG4rXFx0Vk1fV0FSTl9PTl9PTkNFKCFwdGVfcHJlc2VudChwdGV2YWwpKTtcXG4rXFx0Vk1fV0FSTl9PTl9PTkNFKHB0ZV9wZm4ocHRldmFsKSAhPSBmb2xpb19wZm4oZm9saW8pKTtcXG4rXFxuK1xcdC8qXFxuK1xcdCAqIGh1Z2VfcG1kX3Vuc2hhcmUgbWF5IHVubWFwIGFuIGVudGlyZSBQTUQgcGFnZS4gVGhlcmUgaXMgbm8gd2F5IG9mXFxuK1xcdCAqIGtub3dpbmcgZXhhY3RseSB3aGljaCBQTURzIG1heSBiZSBjYWNoZWQgZm9yIHRoaXMgbW0sIHNvIHdlIG11c3RcXG4rXFx0ICogZmx1c2ggdGhlbSBhbGwuIHN0YXJ0L2VuZCB3ZXJlIGFscmVhZHkgYWRqdXN0ZWQgYWJvdmUgdG8gY292ZXIgdGhpc1xcbitcXHQgKiByYW5nZS5cXG4rXFx0ICovXFxuK1xcdGZsdXNoX2NhY2hlX3JhbmdlKHZtYSwgcmFuZ2Uuc3RhcnQsIHJhbmdlLmVuZCk7XFxuK1xcbitcXHQvKlxcbitcXHQgKiBUbyBjYWxsIGh1Z2VfcG1kX3Vuc2hhcmUsIGlfbW1hcF9yd3NlbSBtdXN0IGJlIGhlbGQgaW4gd3JpdGUgbW9kZS5cXG4rXFx0ICogQ2FsbGVyIG5lZWRzIHRvIGV4cGxpY2l0bHkgZG8gdGhpcyBvdXRzaWRlIHJtYXAgcm91dGluZXMuXFxuK1xcdCAqXFxuK1xcdCAqIFdlIGFsc28gbXVzdCBob2xkIGh1Z2V0bGIgdm1hX2xvY2sgaW4gd3JpdGUgbW9kZS4gTG9jayBvcmRlciBkaWN0YXRlc1xcbitcXHQgKiBhY3F1aXJpbmcgdm1hX2xvY2sgQkVGT1JFIGlfbW1hcF9yd3NlbS4gV2UgY2FuIG9ubHkgdHJ5IGxvY2sgaGVyZSBhbmRcXG4rXFx0ICogZmFpbCBpZiB1bnN1Y2Nlc3NmdWwuXFxuK1xcdCAqL1xcbitcXHRpZiAoIWZvbGlvX3Rlc3RfYW5vbihmb2xpbykpIHtcXG4rXFx0XFx0c3RydWN0IG1tdV9nYXRoZXIgdGxiO1xcbitcXG4rXFx0XFx0Vk1fV0FSTl9PTighKGZsYWdzIFxcdTAwMjYgVFRVX1JNQVBfTE9DS0VEKSk7XFxuK1xcdFxcdGlmICghaHVnZXRsYl92bWFfdHJ5bG9ja193cml0ZSh2bWEpKSB7XFxuK1xcdFxcdFxcdHJldCA9IGZhbHNlO1xcbitcXHRcXHRcXHRnb3RvIHdhbGtfZG9uZTtcXG4rXFx0XFx0fVxcbitcXG4rXFx0XFx0dGxiX2dhdGhlcl9tbXVfdm1hKFxcdTAwMjZ0bGIsIHZtYSk7XFxuK1xcdFxcdGlmIChodWdlX3BtZF91bnNoYXJlKFxcdTAwMjZ0bGIsIHZtYSwgYWRkcmVzcywgcHZtdy5wdGUpKSB7XFxuK1xcdFxcdFxcdGh1Z2V0bGJfdm1hX3VubG9ja193cml0ZSh2bWEpO1xcbitcXHRcXHRcXHRodWdlX3BtZF91bnNoYXJlX2ZsdXNoKFxcdTAwMjZ0bGIsIHZtYSk7XFxuK1xcdFxcdFxcdHRsYl9maW5pc2hfbW11KFxcdTAwMjZ0bGIpO1xcbitcXHRcXHRcXHQvKlxcbitcXHRcXHRcXHQgKiBUaGUgUE1EIHRhYmxlIHdhcyB1bm1hcHBlZCwgY29uc2VxdWVudGx5IHVubWFwcGluZ1xcbitcXHRcXHRcXHQgKiB0aGUgZm9saW8uXFxuK1xcdFxcdFxcdCAqL1xcbitcXHRcXHRcXHRnb3RvIHdhbGtfZG9uZTtcXG4rXFx0XFx0fVxcbitcXHRcXHRodWdldGxiX3ZtYV91bmxvY2tfd3JpdGUodm1hKTtcXG4rXFx0XFx0dGxiX2ZpbmlzaF9tbXUoXFx1MDAyNnRsYik7XFxuK1xcdH1cXG4rXFx0cHRldmFsID0gaHVnZV9wdGVwX2NsZWFyX2ZsdXNoKHZtYSwgYWRkcmVzcywgcHZtdy5wdGUpO1xcbitcXHRpZiAoaHVnZV9wdGVfZGlydHkocHRldmFsKSlcXG4rXFx0XFx0Zm9saW9fbWFya19kaXJ0eShmb2xpbyk7XFxuK1xcbitcXHRwdGV2YWwgPSBzd3BfZW50cnlfdG9fcHRlKG1ha2VfaHdwb2lzb25fZW50cnkoZm9saW9fcGFnZShmb2xpbywgMCkpKTtcXG4rXFx0aHVnZXRsYl9jb3VudF9zdWIoZm9saW9fbnJfcGFnZXMoZm9saW8pLCBtbSk7XFxuK1xcdHNldF9odWdlX3B0ZV9hdChtbSwgYWRkcmVzcywgcHZtdy5wdGUsIHB0ZXZhbCwgaHN6KTtcXG4rXFx0aHVnZXRsYl9yZW1vdmVfcm1hcChmb2xpbyk7XFxuK1xcdGZvbGlvX3B1dF9yZWZzKGZvbGlvLCAxKTtcXG4rXFxuK3dhbGtfZG9uZTpcXG4rXFx0cGFnZV92bWFfbWFwcGVkX3dhbGtfZG9uZShcXHUwMDI2cHZtdyk7XFxuK3JhbmdlX2VuZDpcXG4rXFx0bW11X25vdGlmaWVyX2ludmFsaWRhdGVfcmFuZ2VfZW5kKFxcdTAwMjZyYW5nZSk7XFxuK1xcdHJldHVybiByZXQ7XFxuK31cXG4rXFxuK3N0YXRpYyBpbmxpbmUgYm9vbCB0dHVfYW5vbl9sYXp5ZnJlZV9mb2xpbyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4rXFx0XFx0c3RydWN0IGZvbGlvICpmb2xpbylcXG4re1xcbitcXHRpbnQgcmVmX2NvdW50LCBtYXBfY291bnQ7XFxuK1xcbitcXHQvKlxcbitcXHQgKiBTeW5jaHJvbml6ZSB3aXRoIGd1cF9wdGVfcmFuZ2UoKTpcXG4rXFx0ICogLSBjbGVhciBQVEU7IGJhcnJpZXI7IHJlYWQgcmVmY291bnRcXG4rXFx0ICogLSBpbmMgcmVmY291bnQ7IGJhcnJpZXI7IHJlYWQgUFRFXFxuK1xcdCAqL1xcbitcXHRzbXBfbWIoKTtcXG4rXFxuK1xcdHJlZl9jb3VudCA9IGZvbGlvX3JlZl9jb3VudChmb2xpbyk7XFxuK1xcdG1hcF9jb3VudCA9IGZvbGlvX21hcGNvdW50KGZvbGlvKTtcXG4rXFxuK1xcdC8qXFxuK1xcdCAqIE9yZGVyIHJlYWRzIGZvciBwYWdlIHJlZmNvdW50IGFuZCBkaXJ0eSBmbGFnXFxuK1xcdCAqIChzZWUgY29tbWVudHMgaW4gX19yZW1vdmVfbWFwcGluZygpKS5cXG4rXFx0ICovXFxuK1xcdHNtcF9ybWIoKTtcXG4rXFxuK1xcdGlmIChmb2xpb190ZXN0X2RpcnR5KGZvbGlvKSBcXHUwMDI2XFx1MDAyNiAhKHZtYS1cXHUwMDNldm1fZmxhZ3MgXFx1MDAyNiBWTV9EUk9QUEFCTEUpKSB7XFxuK1xcdFxcdC8qXFxuK1xcdFxcdCAqIHJlZGlydGllZCBlaXRoZXIgdXNpbmcgdGhlIHBhZ2UgdGFibGUgb3IgYSBwcmV2aW91c2x5XFxuK1xcdFxcdCAqIG9idGFpbmVkIEdVUCByZWZlcmVuY2UuXFxuK1xcdFxcdCAqL1xcbitcXHRcXHRmb2xpb19zZXRfc3dhcGJhY2tlZChmb2xpbyk7XFxuK1xcdFxcdHJldHVybiBmYWxzZTtcXG4rXFx0fVxcbitcXG4rXFx0aWYgKHJlZl9jb3VudCAhPSAxICsgbWFwX2NvdW50KSB7XFxuK1xcdFxcdC8qXFxuK1xcdFxcdCAqIEFkZGl0aW9uYWwgcmVmZXJlbmNlLiBDb3VsZCBiZSBhIEdVUCByZWZlcmVuY2Ugb3IgYW55XFxuK1xcdFxcdCAqIHNwZWN1bGF0aXZlIHJlZmVyZW5jZS4gR1VQIHVzZXJzIG11c3QgbWFyayB0aGUgZm9saW9cXG4rXFx0XFx0ICogZGlydHkgaWYgdGhlcmUgd2FzIGEgbW9kaWZpY2F0aW9uLiBUaGlzIGZvbGlvIGNhbm5vdCBiZVxcbitcXHRcXHQgKiByZWNsYWltZWQgcmlnaHQgbm93IGVpdGhlciB3YXksIHNvIGFjdCBqdXN0IGxpa2Ugbm90aGluZ1xcbitcXHRcXHQgKiBoYXBwZW5lZC5cXG4rXFx0XFx0ICogV2UnbGwgY29tZSBiYWNrIGhlcmUgbGF0ZXIgYW5kIGRldGVjdCBpZiB0aGUgZm9saW8gd2FzXFxuK1xcdFxcdCAqIGRpcnRpZWQgd2hlbiB0aGUgYWRkaXRpb25hbCByZWZlcmVuY2UgaXMgZ29uZS5cXG4rXFx0XFx0ICovXFxuK1xcdFxcdHJldHVybiBmYWxzZTtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIHRydWU7XFxuK31cXG4rXFxuK3N0YXRpYyBpbmxpbmUgdm9pZCBzZXRfc3dwX3B0ZV9hdChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyZXNzLFxcbitcXHRcXHRwdGVfdCAqcHRlcCwgc3dwX2VudHJ5X3QgZW50cnksIHB0ZV90IHB0ZXZhbCwgYm9vbCBhbm9uX2V4Y2x1c2l2ZSlcXG4re1xcbitcXHRwdGVfdCBzd3BfcHRlID0gc3dwX2VudHJ5X3RvX3B0ZShlbnRyeSk7XFxuK1xcbitcXHRpZiAoYW5vbl9leGNsdXNpdmUpXFxuK1xcdFxcdHN3cF9wdGUgPSBwdGVfc3dwX21rZXhjbHVzaXZlKHN3cF9wdGUpO1xcbitcXG4rXFx0aWYgKGxpa2VseShwdGVfcHJlc2VudChwdGV2YWwpKSkge1xcbitcXHRcXHRpZiAocHRlX3NvZnRfZGlydHkocHRldmFsKSlcXG4rXFx0XFx0XFx0c3dwX3B0ZSA9IHB0ZV9zd3BfbWtzb2Z0X2RpcnR5KHN3cF9wdGUpO1xcbitcXHRcXHRpZiAocHRlX3VmZmRfd3AocHRldmFsKSlcXG4rXFx0XFx0XFx0c3dwX3B0ZSA9IHB0ZV9zd3BfbWt1ZmZkX3dwKHN3cF9wdGUpO1xcbitcXHR9IGVsc2Uge1xcbitcXHRcXHQvKiBEZXZpY2UtZXhjbHVzaXZlIGVudHJ5ICovXFxuK1xcdFxcdGlmIChwdGVfc3dwX3NvZnRfZGlydHkocHRldmFsKSlcXG4rXFx0XFx0XFx0c3dwX3B0ZSA9IHB0ZV9zd3BfbWtzb2Z0X2RpcnR5KHN3cF9wdGUpO1xcbitcXHRcXHRpZiAocHRlX3N3cF91ZmZkX3dwKHB0ZXZhbCkpXFxuK1xcdFxcdFxcdHN3cF9wdGUgPSBwdGVfc3dwX21rdWZmZF93cChzd3BfcHRlKTtcXG4rXFx0fVxcbitcXG4rXFx0c2V0X3B0ZV9hdChtbSwgYWRkcmVzcywgcHRlcCwgc3dwX3B0ZSk7XFxuK31cXG4rXFxuK3N0YXRpYyBpbmxpbmUgYm9vbCB0dHVfYW5vbl9zd2FwYmFja2VkX2ZvbGlvKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbitcXHRcXHRzdHJ1Y3QgcGFnZSAqc3VicGFnZSwgdW5zaWduZWQgbG9uZyBhZGRyZXNzLCBwdGVfdCAqcHRlcCxcXG4rXFx0XFx0cHRlX3QgcHRldmFsKVxcbit7XFxuK1xcdGJvb2wgYW5vbl9leGNsdXNpdmUgPSBmb2xpb190ZXN0X2Fub24oZm9saW8pIFxcdTAwMjZcXHUwMDI2IFBhZ2VBbm9uRXhjbHVzaXZlKHN1YnBhZ2UpO1xcbitcXHRzd3BfZW50cnlfdCBlbnRyeSA9IHBhZ2Vfc3dhcF9lbnRyeShzdWJwYWdlKTtcXG4rXFx0c3RydWN0IG1tX3N0cnVjdCAqbW0gPSB2bWEtXFx1MDAzZXZtX21tO1xcbitcXG4rXFx0aWYgKGZvbGlvX2R1cF9zd2FwKGZvbGlvLCBzdWJwYWdlKSBcXHUwMDNjIDApXFxuK1xcdFxcdHJldHVybiBmYWxzZTtcXG4rXFxuK1xcdC8qXFxuK1xcdCAqIGFyY2hfdW5tYXBfb25lKCkgaXMgZXhwZWN0ZWQgdG8gYmUgYSBOT1Agb25cXG4rXFx0ICogYXJjaGl0ZWN0dXJlcyB3aGVyZSB3ZSBjb3VsZCBoYXZlIFBGTiBzd2FwIFBURXMsXFxuK1xcdCAqIHNvIHdlJ2xsIG5vdCBjaGVjay9jYXJlLlxcbitcXHQgKi9cXG4rXFx0aWYgKGFyY2hfdW5tYXBfb25lKG1tLCB2bWEsIGFkZHJlc3MsIHB0ZXZhbCkgXFx1MDAzYyAwKSB7XFxuK1xcdFxcdGZvbGlvX3B1dF9zd2FwKGZvbGlvLCBzdWJwYWdlKTtcXG4rXFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXHR9XFxuK1xcbitcXHQvKiBTZWUgZm9saW9fdHJ5X3NoYXJlX2Fub25fcm1hcCgpOiBjbGVhciBQVEUgZmlyc3QuICovXFxuK1xcdGlmIChhbm9uX2V4Y2x1c2l2ZSBcXHUwMDI2XFx1MDAyNiBmb2xpb190cnlfc2hhcmVfYW5vbl9ybWFwX3B0ZShmb2xpbywgc3VicGFnZSkpIHtcXG4rXFx0XFx0Zm9saW9fcHV0X3N3YXAoZm9saW8sIHN1YnBhZ2UpO1xcbitcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcdH1cXG4rXFxuK1xcdG1tX3ByZXBhcmVfZm9yX3N3YXBfZW50cmllcyhtbSk7XFxuK1xcdGRlY19tbV9jb3VudGVyKG1tLCBNTV9BTk9OUEFHRVMpO1xcbitcXHRpbmNfbW1fY291bnRlcihtbSwgTU1fU1dBUEVOVFMpO1xcbitcXHRzZXRfc3dwX3B0ZV9hdChtbSwgYWRkcmVzcywgcHRlcCwgZW50cnksIHB0ZXZhbCwgYW5vbl9leGNsdXNpdmUpO1xcbitcXHRyZXR1cm4gdHJ1ZTtcXG4rfVxcbitcXG4rc3RhdGljIGlubGluZSBib29sIHR0dV9hbm9uX2ZvbGlvKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbitcXHRcXHRzdHJ1Y3QgcGFnZSAqc3VicGFnZSwgdW5zaWduZWQgbG9uZyBhZGRyZXNzLCBwdGVfdCAqcHRlcCxcXG4rXFx0XFx0cHRlX3QgcHRldmFsLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzKVxcbit7XFxuK1xcdHN0cnVjdCBtbV9zdHJ1Y3QgKm1tID0gdm1hLVxcdTAwM2V2bV9tbTtcXG4rXFx0Ym9vbCByZXQ7XFxuK1xcbitcXHQvKlxcbitcXHQgKiBTdG9yZSB0aGUgc3dhcCBsb2NhdGlvbiBpbiB0aGUgcHRlLlxcbitcXHQgKiBTZWUgaGFuZGxlX3B0ZV9mYXVsdCgpIC4uLlxcbitcXHQgKi9cXG4rXFx0aWYgKHVubGlrZWx5KGZvbGlvX3Rlc3Rfc3dhcGJhY2tlZChmb2xpbykgIT1cXG4rXFx0XFx0XFx0Zm9saW9fdGVzdF9zd2FwY2FjaGUoZm9saW8pKSkge1xcbitcXHRcXHRXQVJOX09OX09OQ0UoMSk7XFxuK1xcdFxcdHJldHVybiBmYWxzZTtcXG4rXFx0fVxcbitcXG4rXFx0LyogTUFEVl9GUkVFIHBhZ2UgY2hlY2sgKi9cXG4rXFx0aWYgKCFmb2xpb190ZXN0X3N3YXBiYWNrZWQoZm9saW8pKSB7XFxuK1xcdFxcdHJldCA9IHR0dV9hbm9uX2xhenlmcmVlX2ZvbGlvKHZtYSwgZm9saW8pO1xcbitcXHRcXHRpZiAocmV0KVxcbitcXHRcXHRcXHRhZGRfbW1fY291bnRlcihtbSwgTU1fQU5PTlBBR0VTLCAtbnJfcGFnZXMpO1xcbitcXHR9IGVsc2Uge1xcbitcXHRcXHQvKiBucl9wYWdlcyBcXHUwMDNlIDEgbm90IHN1cHBvcnRlZCB5ZXQgKi9cXG4rXFx0XFx0cmV0ID0gdHR1X2Fub25fc3dhcGJhY2tlZF9mb2xpbyh2bWEsIGZvbGlvLCBzdWJwYWdlLCBhZGRyZXNzLFxcbitcXHRcXHRcXHRcXHRcXHRcXHRwdGVwLCBwdGV2YWwpO1xcbitcXHR9XFxuK1xcbitcXHRpZiAoIXJldClcXG4rXFx0XFx0c2V0X3B0ZXMobW0sIGFkZHJlc3MsIHB0ZXAsIHB0ZXZhbCwgbnJfcGFnZXMpO1xcbitcXG4rXFx0cmV0dXJuIHJldDtcXG4rfVxcbitcXG4gLypcXG4gICogQGFyZzogZW51bSB0dHVfZmxhZ3Mgd2lsbCBiZSBwYXNzZWQgdG8gdGhpcyBhcmd1bWVudFxcbiAgKi9cXG5AQCAtMTk4NiwxNCArMjIxMywxMyBAQCBzdGF0aWMgYm9vbCB0cnlfdG9fdW5tYXBfb25lKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbiB7XFxuIFxcdHN0cnVjdCBtbV9zdHJ1Y3QgKm1tID0gdm1hLVxcdTAwM2V2bV9tbTtcXG4gXFx0REVGSU5FX0ZPTElPX1ZNQV9XQUxLKHB2bXcsIGZvbGlvLCB2bWEsIGFkZHJlc3MsIDApO1xcbi1cXHRib29sIGFub25fZXhjbHVzaXZlLCByZXQgPSB0cnVlO1xcbitcXHRib29sIHJldCA9IHRydWU7XFxuIFxcdHB0ZV90IHB0ZXZhbDtcXG4gXFx0c3RydWN0IHBhZ2UgKnN1YnBhZ2U7XFxuIFxcdHN0cnVjdCBtbXVfbm90aWZpZXJfcmFuZ2UgcmFuZ2U7XFxuIFxcdGVudW0gdHR1X2ZsYWdzIGZsYWdzID0gKGVudW0gdHR1X2ZsYWdzKShsb25nKWFyZztcXG4gXFx0dW5zaWduZWQgbG9uZyBucl9wYWdlcyA9IDEsIGVuZF9hZGRyO1xcbiBcXHR1bnNpZ25lZCBsb25nIHBmbjtcXG4tXFx0dW5zaWduZWQgbG9uZyBoc3ogPSAwO1xcbiBcXHRpbnQgcHRlcyA9IDA7XFxuIFxcbiBcXHQvKlxcbkBAIC0yMDA3LDggKzIyMzMsNiBAQCBzdGF0aWMgYm9vbCB0cnlfdG9fdW5tYXBfb25lKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbiBcXG4gXFx0LypcXG4gXFx0ICogRm9yIFRIUCwgd2UgaGF2ZSB0byBhc3N1bWUgdGhlIHdvcnNlIGNhc2UgaWUgcG1kIGZvciBpbnZhbGlkYXRpb24uXFxuLVxcdCAqIEZvciBodWdldGxiLCBpdCBjb3VsZCBiZSBtdWNoIHdvcnNlIGlmIHdlIG5lZWQgdG8gZG8gcHVkXFxuLVxcdCAqIGludmFsaWRhdGlvbiBpbiB0aGUgY2FzZSBvZiBwbWQgc2hhcmluZy5cXG4gXFx0ICpcXG4gXFx0ICogTm90ZSB0aGF0IHRoZSBmb2xpbyBjYW4gbm90IGJlIGZyZWVkIGluIHRoaXMgZnVuY3Rpb24gYXMgY2FsbCBvZlxcbiBcXHQgKiB0cnlfdG9fdW5tYXAoKSBtdXN0IGhvbGQgYSByZWZlcmVuY2Ugb24gdGhlIGZvbGlvLlxcbkBAIC0yMDE2LDE3ICsyMjQwLDYgQEAgc3RhdGljIGJvb2wgdHJ5X3RvX3VubWFwX29uZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4gXFx0cmFuZ2UuZW5kID0gdm1hX2FkZHJlc3NfZW5kKFxcdTAwMjZwdm13KTtcXG4gXFx0bW11X25vdGlmaWVyX3JhbmdlX2luaXQoXFx1MDAyNnJhbmdlLCBNTVVfTk9USUZZX0NMRUFSLCAwLCB2bWEtXFx1MDAzZXZtX21tLFxcbiBcXHRcXHRcXHRcXHRhZGRyZXNzLCByYW5nZS5lbmQpO1xcbi1cXHRpZiAoZm9saW9fdGVzdF9odWdldGxiKGZvbGlvKSkge1xcbi1cXHRcXHQvKlxcbi1cXHRcXHQgKiBJZiBzaGFyaW5nIGlzIHBvc3NpYmxlLCBzdGFydCBhbmQgZW5kIHdpbGwgYmUgYWRqdXN0ZWRcXG4tXFx0XFx0ICogYWNjb3JkaW5nbHkuXFxuLVxcdFxcdCAqL1xcbi1cXHRcXHRhZGp1c3RfcmFuZ2VfaWZfcG1kX3NoYXJpbmdfcG9zc2libGUodm1hLCBcXHUwMDI2cmFuZ2Uuc3RhcnQsXFxuLVxcdFxcdFxcdFxcdFxcdFxcdCAgICAgXFx1MDAyNnJhbmdlLmVuZCk7XFxuLVxcbi1cXHRcXHQvKiBXZSBuZWVkIHRoZSBodWdlIHBhZ2Ugc2l6ZSBmb3Igc2V0X2h1Z2VfcHRlX2F0KCkgKi9cXG4tXFx0XFx0aHN6ID0gaHVnZV9wYWdlX3NpemUoaHN0YXRlX3ZtYSh2bWEpKTtcXG4tXFx0fVxcbiBcXHRtbXVfbm90aWZpZXJfaW52YWxpZGF0ZV9yYW5nZV9zdGFydChcXHUwMDI2cmFuZ2UpO1xcbiBcXG4gXFx0d2hpbGUgKHBhZ2Vfdm1hX21hcHBlZF93YWxrKFxcdTAwMjZwdm13KSkge1xcbkBAIC0yMTExLDY1ICsyMzI0LDExIEBAIHN0YXRpYyBib29sIHRyeV90b191bm1hcF9vbmUoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuIFxcdFxcdFxcdGNvbnN0IHNvZnRsZWFmX3QgZW50cnkgPSBzb2Z0bGVhZl9mcm9tX3B0ZShwdGV2YWwpO1xcbiBcXG4gXFx0XFx0XFx0cGZuID0gc29mdGxlYWZfdG9fcGZuKGVudHJ5KTtcXG4tXFx0XFx0XFx0Vk1fV0FSTl9PTl9GT0xJTyhmb2xpb190ZXN0X2h1Z2V0bGIoZm9saW8pLCBmb2xpbyk7XFxuIFxcdFxcdH1cXG4gXFxuIFxcdFxcdHN1YnBhZ2UgPSBmb2xpb19wYWdlKGZvbGlvLCBwZm4gLSBmb2xpb19wZm4oZm9saW8pKTtcXG4tXFx0XFx0YW5vbl9leGNsdXNpdmUgPSBmb2xpb190ZXN0X2Fub24oZm9saW8pIFxcdTAwMjZcXHUwMDI2XFxuLVxcdFxcdFxcdFxcdCBQYWdlQW5vbkV4Y2x1c2l2ZShzdWJwYWdlKTtcXG4gXFxuLVxcdFxcdGlmIChmb2xpb190ZXN0X2h1Z2V0bGIoZm9saW8pKSB7XFxuLVxcdFxcdFxcdGJvb2wgYW5vbiA9IGZvbGlvX3Rlc3RfYW5vbihmb2xpbyk7XFxuLVxcbi1cXHRcXHRcXHQvKlxcbi1cXHRcXHRcXHQgKiBUaGUgdHJ5X3RvX3VubWFwKCkgaXMgb25seSBwYXNzZWQgYSBodWdldGxiIHBhZ2VcXG4tXFx0XFx0XFx0ICogaW4gdGhlIGNhc2Ugd2hlcmUgdGhlIGh1Z2V0bGIgcGFnZSBpcyBwb2lzb25lZC5cXG4tXFx0XFx0XFx0ICovXFxuLVxcdFxcdFxcdFZNX0JVR19PTl9QQUdFKCFQYWdlSFdQb2lzb24oc3VicGFnZSksIHN1YnBhZ2UpO1xcbi1cXHRcXHRcXHQvKlxcbi1cXHRcXHRcXHQgKiBodWdlX3BtZF91bnNoYXJlIG1heSB1bm1hcCBhbiBlbnRpcmUgUE1EIHBhZ2UuXFxuLVxcdFxcdFxcdCAqIFRoZXJlIGlzIG5vIHdheSBvZiBrbm93aW5nIGV4YWN0bHkgd2hpY2ggUE1EcyBtYXlcXG4tXFx0XFx0XFx0ICogYmUgY2FjaGVkIGZvciB0aGlzIG1tLCBzbyB3ZSBtdXN0IGZsdXNoIHRoZW0gYWxsLlxcbi1cXHRcXHRcXHQgKiBzdGFydC9lbmQgd2VyZSBhbHJlYWR5IGFkanVzdGVkIGFib3ZlIHRvIGNvdmVyIHRoaXNcXG4tXFx0XFx0XFx0ICogcmFuZ2UuXFxuLVxcdFxcdFxcdCAqL1xcbi1cXHRcXHRcXHRmbHVzaF9jYWNoZV9yYW5nZSh2bWEsIHJhbmdlLnN0YXJ0LCByYW5nZS5lbmQpO1xcbi1cXG4tXFx0XFx0XFx0LypcXG4tXFx0XFx0XFx0ICogVG8gY2FsbCBodWdlX3BtZF91bnNoYXJlLCBpX21tYXBfcndzZW0gbXVzdCBiZVxcbi1cXHRcXHRcXHQgKiBoZWxkIGluIHdyaXRlIG1vZGUuICBDYWxsZXIgbmVlZHMgdG8gZXhwbGljaXRseVxcbi1cXHRcXHRcXHQgKiBkbyB0aGlzIG91dHNpZGUgcm1hcCByb3V0aW5lcy5cXG4tXFx0XFx0XFx0ICpcXG4tXFx0XFx0XFx0ICogV2UgYWxzbyBtdXN0IGhvbGQgaHVnZXRsYiB2bWFfbG9jayBpbiB3cml0ZSBtb2RlLlxcbi1cXHRcXHRcXHQgKiBMb2NrIG9yZGVyIGRpY3RhdGVzIGFjcXVpcmluZyB2bWFfbG9jayBCRUZPUkVcXG4tXFx0XFx0XFx0ICogaV9tbWFwX3J3c2VtLiAgV2UgY2FuIG9ubHkgdHJ5IGxvY2sgaGVyZSBhbmQgZmFpbFxcbi1cXHRcXHRcXHQgKiBpZiB1bnN1Y2Nlc3NmdWwuXFxuLVxcdFxcdFxcdCAqL1xcbi1cXHRcXHRcXHRpZiAoIWFub24pIHtcXG4tXFx0XFx0XFx0XFx0c3RydWN0IG1tdV9nYXRoZXIgdGxiO1xcbi1cXG4tXFx0XFx0XFx0XFx0Vk1fQlVHX09OKCEoZmxhZ3MgXFx1MDAyNiBUVFVfUk1BUF9MT0NLRUQpKTtcXG4tXFx0XFx0XFx0XFx0aWYgKCFodWdldGxiX3ZtYV90cnlsb2NrX3dyaXRlKHZtYSkpXFxuLVxcdFxcdFxcdFxcdFxcdGdvdG8gd2Fsa19hYm9ydDtcXG4tXFxuLVxcdFxcdFxcdFxcdHRsYl9nYXRoZXJfbW11X3ZtYShcXHUwMDI2dGxiLCB2bWEpO1xcbi1cXHRcXHRcXHRcXHRpZiAoaHVnZV9wbWRfdW5zaGFyZShcXHUwMDI2dGxiLCB2bWEsIGFkZHJlc3MsIHB2bXcucHRlKSkge1xcbi1cXHRcXHRcXHRcXHRcXHRodWdldGxiX3ZtYV91bmxvY2tfd3JpdGUodm1hKTtcXG4tXFx0XFx0XFx0XFx0XFx0aHVnZV9wbWRfdW5zaGFyZV9mbHVzaChcXHUwMDI2dGxiLCB2bWEpO1xcbi1cXHRcXHRcXHRcXHRcXHR0bGJfZmluaXNoX21tdShcXHUwMDI2dGxiKTtcXG4tXFx0XFx0XFx0XFx0XFx0LypcXG4tXFx0XFx0XFx0XFx0XFx0ICogVGhlIFBNRCB0YWJsZSB3YXMgdW5tYXBwZWQsXFxuLVxcdFxcdFxcdFxcdFxcdCAqIGNvbnNlcXVlbnRseSB1bm1hcHBpbmcgdGhlIGZvbGlvLlxcbi1cXHRcXHRcXHRcXHRcXHQgKi9cXG4tXFx0XFx0XFx0XFx0XFx0Z290byB3YWxrX2RvbmU7XFxuLVxcdFxcdFxcdFxcdH1cXG4tXFx0XFx0XFx0XFx0aHVnZXRsYl92bWFfdW5sb2NrX3dyaXRlKHZtYSk7XFxuLVxcdFxcdFxcdFxcdHRsYl9maW5pc2hfbW11KFxcdTAwMjZ0bGIpO1xcbi1cXHRcXHRcXHR9XFxuLVxcdFxcdFxcdHB0ZXZhbCA9IGh1Z2VfcHRlcF9jbGVhcl9mbHVzaCh2bWEsIGFkZHJlc3MsIHB2bXcucHRlKTtcXG4tXFx0XFx0XFx0aWYgKHB0ZV9kaXJ0eShwdGV2YWwpKVxcbi1cXHRcXHRcXHRcXHRmb2xpb19tYXJrX2RpcnR5KGZvbGlvKTtcXG4tXFx0XFx0fSBlbHNlIGlmIChsaWtlbHkocHRlX3ByZXNlbnQocHRldmFsKSkpIHtcXG4rXFx0XFx0aWYgKGxpa2VseShwdGVfcHJlc2VudChwdGV2YWwpKSkge1xcbiBcXHRcXHRcXHRucl9wYWdlcyA9IGZvbGlvX3VubWFwX3B0ZV9iYXRjaChmb2xpbywgXFx1MDAyNnB2bXcsIGZsYWdzLCBwdGV2YWwpO1xcbiBcXHRcXHRcXHRlbmRfYWRkciA9IGFkZHJlc3MgKyBucl9wYWdlcyAqIFBBR0VfU0laRTtcXG4gXFx0XFx0XFx0Zmx1c2hfY2FjaGVfcmFuZ2Uodm1hLCBhZGRyZXNzLCBlbmRfYWRkcik7XFxuQEAgLTIyMDQsMTYgKzIzNjMsMTQgQEAgc3RhdGljIGJvb2wgdHJ5X3RvX3VubWFwX29uZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4gXFx0XFx0LyogVXBkYXRlIGhpZ2ggd2F0ZXJtYXJrIGJlZm9yZSB3ZSBsb3dlciByc3MgKi9cXG4gXFx0XFx0dXBkYXRlX2hpd2F0ZXJfcnNzKG1tKTtcXG4gXFxuLVxcdFxcdGlmIChQYWdlSFdQb2lzb24oc3VicGFnZSkgXFx1MDAyNlxcdTAwMjYgKGZsYWdzIFxcdTAwMjYgVFRVX0hXUE9JU09OKSkge1xcbitcXHRcXHQvKlxcbitcXHRcXHQgKiBXaXRoIFRUVV9IV1BPSVNPTiwgd2Ugb25seSBleHBlY3Qgc21hbGwgZm9saW9zIG9yIGh1Z2V0bGJcXG4rXFx0XFx0ICogZm9saW9zIGhlcmUgZm9yIG5vdy5cXG4rXFx0XFx0ICovXFxuK1xcdFxcdGlmIChmb2xpb190ZXN0X2h3cG9pc29uKGZvbGlvKSBcXHUwMDI2XFx1MDAyNiAoZmxhZ3MgXFx1MDAyNiBUVFVfSFdQT0lTT04pKSB7XFxuIFxcdFxcdFxcdHB0ZXZhbCA9IHN3cF9lbnRyeV90b19wdGUobWFrZV9od3BvaXNvbl9lbnRyeShzdWJwYWdlKSk7XFxuLVxcdFxcdFxcdGlmIChmb2xpb190ZXN0X2h1Z2V0bGIoZm9saW8pKSB7XFxuLVxcdFxcdFxcdFxcdGh1Z2V0bGJfY291bnRfc3ViKGZvbGlvX25yX3BhZ2VzKGZvbGlvKSwgbW0pO1xcbi1cXHRcXHRcXHRcXHRzZXRfaHVnZV9wdGVfYXQobW0sIGFkZHJlc3MsIHB2bXcucHRlLCBwdGV2YWwsXFxuLVxcdFxcdFxcdFxcdFxcdFxcdGhzeik7XFxuLVxcdFxcdFxcdH0gZWxzZSB7XFxuLVxcdFxcdFxcdFxcdGRlY19tbV9jb3VudGVyKG1tLCBtbV9jb3VudGVyKGZvbGlvKSk7XFxuLVxcdFxcdFxcdFxcdHNldF9wdGVfYXQobW0sIGFkZHJlc3MsIHB2bXcucHRlLCBwdGV2YWwpO1xcbi1cXHRcXHRcXHR9XFxuK1xcdFxcdFxcdGRlY19tbV9jb3VudGVyKG1tLCBtbV9jb3VudGVyKGZvbGlvKSk7XFxuK1xcdFxcdFxcdHNldF9wdGVfYXQobW0sIGFkZHJlc3MsIHB2bXcucHRlLCBwdGV2YWwpO1xcbiBcXHRcXHR9IGVsc2UgaWYgKGxpa2VseShwdGVfcHJlc2VudChwdGV2YWwpKSBcXHUwMDI2XFx1MDAyNiBwdGVfdW51c2VkKHB0ZXZhbCkgXFx1MDAyNlxcdTAwMjZcXG4gXFx0XFx0XFx0ICAgIXVzZXJmYXVsdGZkX2FybWVkKHZtYSkpIHtcXG4gXFx0XFx0XFx0LypcXG5AQCAtMjIyOCwxMDQgKzIzODUsMTEgQEAgc3RhdGljIGJvb2wgdHJ5X3RvX3VubWFwX29uZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4gXFx0XFx0XFx0ICovXFxuIFxcdFxcdFxcdGRlY19tbV9jb3VudGVyKG1tLCBtbV9jb3VudGVyKGZvbGlvKSk7XFxuIFxcdFxcdH0gZWxzZSBpZiAoZm9saW9fdGVzdF9hbm9uKGZvbGlvKSkge1xcbi1cXHRcXHRcXHRzd3BfZW50cnlfdCBlbnRyeSA9IHBhZ2Vfc3dhcF9lbnRyeShzdWJwYWdlKTtcXG4tXFx0XFx0XFx0cHRlX3Qgc3dwX3B0ZTtcXG4tXFx0XFx0XFx0LypcXG4tXFx0XFx0XFx0ICogU3RvcmUgdGhlIHN3YXAgbG9jYXRpb24gaW4gdGhlIHB0ZS5cXG4tXFx0XFx0XFx0ICogU2VlIGhhbmRsZV9wdGVfZmF1bHQoKSAuLi5cXG4tXFx0XFx0XFx0ICovXFxuLVxcdFxcdFxcdGlmICh1bmxpa2VseShmb2xpb190ZXN0X3N3YXBiYWNrZWQoZm9saW8pICE9XFxuLVxcdFxcdFxcdFxcdFxcdGZvbGlvX3Rlc3Rfc3dhcGNhY2hlKGZvbGlvKSkpIHtcXG4tXFx0XFx0XFx0XFx0V0FSTl9PTl9PTkNFKDEpO1xcbitcXHRcXHRcXHRpZiAoIXR0dV9hbm9uX2ZvbGlvKHZtYSwgZm9saW8sIHN1YnBhZ2UsIGFkZHJlc3MsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICBwdm13LnB0ZSwgcHRldmFsLCBucl9wYWdlcykpXFxuIFxcdFxcdFxcdFxcdGdvdG8gd2Fsa19hYm9ydDtcXG4tXFx0XFx0XFx0fVxcbi1cXG4tXFx0XFx0XFx0LyogTUFEVl9GUkVFIHBhZ2UgY2hlY2sgKi9cXG4tXFx0XFx0XFx0aWYgKCFmb2xpb190ZXN0X3N3YXBiYWNrZWQoZm9saW8pKSB7XFxuLVxcdFxcdFxcdFxcdGludCByZWZfY291bnQsIG1hcF9jb3VudDtcXG4tXFxuLVxcdFxcdFxcdFxcdC8qXFxuLVxcdFxcdFxcdFxcdCAqIFN5bmNocm9uaXplIHdpdGggZ3VwX3B0ZV9yYW5nZSgpOlxcbi1cXHRcXHRcXHRcXHQgKiAtIGNsZWFyIFBURTsgYmFycmllcjsgcmVhZCByZWZjb3VudFxcbi1cXHRcXHRcXHRcXHQgKiAtIGluYyByZWZjb3VudDsgYmFycmllcjsgcmVhZCBQVEVcXG4tXFx0XFx0XFx0XFx0ICovXFxuLVxcdFxcdFxcdFxcdHNtcF9tYigpO1xcbiBcXG4tXFx0XFx0XFx0XFx0cmVmX2NvdW50ID0gZm9saW9fcmVmX2NvdW50KGZvbGlvKTtcXG4tXFx0XFx0XFx0XFx0bWFwX2NvdW50ID0gZm9saW9fbWFwY291bnQoZm9saW8pO1xcbi1cXG4tXFx0XFx0XFx0XFx0LypcXG4tXFx0XFx0XFx0XFx0ICogT3JkZXIgcmVhZHMgZm9yIHBhZ2UgcmVmY291bnQgYW5kIGRpcnR5IGZsYWdcXG4tXFx0XFx0XFx0XFx0ICogKHNlZSBjb21tZW50cyBpbiBfX3JlbW92ZV9tYXBwaW5nKCkpLlxcbi1cXHRcXHRcXHRcXHQgKi9cXG4tXFx0XFx0XFx0XFx0c21wX3JtYigpO1xcbi1cXG4tXFx0XFx0XFx0XFx0aWYgKGZvbGlvX3Rlc3RfZGlydHkoZm9saW8pIFxcdTAwMjZcXHUwMDI2ICEodm1hLVxcdTAwM2V2bV9mbGFncyBcXHUwMDI2IFZNX0RST1BQQUJMRSkpIHtcXG4tXFx0XFx0XFx0XFx0XFx0LypcXG4tXFx0XFx0XFx0XFx0XFx0ICogcmVkaXJ0aWVkIGVpdGhlciB1c2luZyB0aGUgcGFnZSB0YWJsZSBvciBhIHByZXZpb3VzbHlcXG4tXFx0XFx0XFx0XFx0XFx0ICogb2J0YWluZWQgR1VQIHJlZmVyZW5jZS5cXG4tXFx0XFx0XFx0XFx0XFx0ICovXFxuLVxcdFxcdFxcdFxcdFxcdHNldF9wdGVzKG1tLCBhZGRyZXNzLCBwdm13LnB0ZSwgcHRldmFsLCBucl9wYWdlcyk7XFxuLVxcdFxcdFxcdFxcdFxcdGZvbGlvX3NldF9zd2FwYmFja2VkKGZvbGlvKTtcXG4tXFx0XFx0XFx0XFx0XFx0Z290byB3YWxrX2Fib3J0O1xcbi1cXHRcXHRcXHRcXHR9IGVsc2UgaWYgKHJlZl9jb3VudCAhPSAxICsgbWFwX2NvdW50KSB7XFxuLVxcdFxcdFxcdFxcdFxcdC8qXFxuLVxcdFxcdFxcdFxcdFxcdCAqIEFkZGl0aW9uYWwgcmVmZXJlbmNlLiBDb3VsZCBiZSBhIEdVUCByZWZlcmVuY2Ugb3IgYW55XFxuLVxcdFxcdFxcdFxcdFxcdCAqIHNwZWN1bGF0aXZlIHJlZmVyZW5jZS4gR1VQIHVzZXJzIG11c3QgbWFyayB0aGUgZm9saW9cXG4tXFx0XFx0XFx0XFx0XFx0ICogZGlydHkgaWYgdGhlcmUgd2FzIGEgbW9kaWZpY2F0aW9uLiBUaGlzIGZvbGlvIGNhbm5vdCBiZVxcbi1cXHRcXHRcXHRcXHRcXHQgKiByZWNsYWltZWQgcmlnaHQgbm93IGVpdGhlciB3YXksIHNvIGFjdCBqdXN0IGxpa2Ugbm90aGluZ1xcbi1cXHRcXHRcXHRcXHRcXHQgKiBoYXBwZW5lZC5cXG4tXFx0XFx0XFx0XFx0XFx0ICogV2UnbGwgY29tZSBiYWNrIGhlcmUgbGF0ZXIgYW5kIGRldGVjdCBpZiB0aGUgZm9saW8gd2FzXFxuLVxcdFxcdFxcdFxcdFxcdCAqIGRpcnRpZWQgd2hlbiB0aGUgYWRkaXRpb25hbCByZWZlcmVuY2UgaXMgZ29uZS5cXG4tXFx0XFx0XFx0XFx0XFx0ICovXFxuLVxcdFxcdFxcdFxcdFxcdHNldF9wdGVzKG1tLCBhZGRyZXNzLCBwdm13LnB0ZSwgcHRldmFsLCBucl9wYWdlcyk7XFxuLVxcdFxcdFxcdFxcdFxcdGdvdG8gd2Fsa19hYm9ydDtcXG4tXFx0XFx0XFx0XFx0fVxcbi1cXHRcXHRcXHRcXHRhZGRfbW1fY291bnRlcihtbSwgTU1fQU5PTlBBR0VTLCAtbnJfcGFnZXMpO1xcbi1cXHRcXHRcXHRcXHRnb3RvIGRpc2NhcmQ7XFxuLVxcdFxcdFxcdH1cXG4tXFxuLVxcdFxcdFxcdGlmIChmb2xpb19kdXBfc3dhcChmb2xpbywgc3VicGFnZSkgXFx1MDAzYyAwKSB7XFxuLVxcdFxcdFxcdFxcdHNldF9wdGVfYXQobW0sIGFkZHJlc3MsIHB2bXcucHRlLCBwdGV2YWwpO1xcbi1cXHRcXHRcXHRcXHRnb3RvIHdhbGtfYWJvcnQ7XFxuLVxcdFxcdFxcdH1cXG4tXFxuLVxcdFxcdFxcdC8qXFxuLVxcdFxcdFxcdCAqIGFyY2hfdW5tYXBfb25lKCkgaXMgZXhwZWN0ZWQgdG8gYmUgYSBOT1Agb25cXG4tXFx0XFx0XFx0ICogYXJjaGl0ZWN0dXJlcyB3aGVyZSB3ZSBjb3VsZCBoYXZlIFBGTiBzd2FwIFBURXMsXFxuLVxcdFxcdFxcdCAqIHNvIHdlJ2xsIG5vdCBjaGVjay9jYXJlLlxcbi1cXHRcXHRcXHQgKi9cXG4tXFx0XFx0XFx0aWYgKGFyY2hfdW5tYXBfb25lKG1tLCB2bWEsIGFkZHJlc3MsIHB0ZXZhbCkgXFx1MDAzYyAwKSB7XFxuLVxcdFxcdFxcdFxcdGZvbGlvX3B1dF9zd2FwKGZvbGlvLCBzdWJwYWdlKTtcXG4tXFx0XFx0XFx0XFx0c2V0X3B0ZV9hdChtbSwgYWRkcmVzcywgcHZtdy5wdGUsIHB0ZXZhbCk7XFxuLVxcdFxcdFxcdFxcdGdvdG8gd2Fsa19hYm9ydDtcXG4tXFx0XFx0XFx0fVxcbi1cXG4tXFx0XFx0XFx0LyogU2VlIGZvbGlvX3RyeV9zaGFyZV9hbm9uX3JtYXAoKTogY2xlYXIgUFRFIGZpcnN0LiAqL1xcbi1cXHRcXHRcXHRpZiAoYW5vbl9leGNsdXNpdmUgXFx1MDAyNlxcdTAwMjZcXG4tXFx0XFx0XFx0ICAgIGZvbGlvX3RyeV9zaGFyZV9hbm9uX3JtYXBfcHRlKGZvbGlvLCBzdWJwYWdlKSkge1xcbi1cXHRcXHRcXHRcXHRmb2xpb19wdXRfc3dhcChmb2xpbywgc3VicGFnZSk7XFxuLVxcdFxcdFxcdFxcdHNldF9wdGVfYXQobW0sIGFkZHJlc3MsIHB2bXcucHRlLCBwdGV2YWwpO1xcbi1cXHRcXHRcXHRcXHRnb3RvIHdhbGtfYWJvcnQ7XFxuLVxcdFxcdFxcdH1cXG4tXFx0XFx0XFx0bW1fcHJlcGFyZV9mb3Jfc3dhcF9lbnRyaWVzKG1tKTtcXG4tXFx0XFx0XFx0ZGVjX21tX2NvdW50ZXIobW0sIE1NX0FOT05QQUdFUyk7XFxuLVxcdFxcdFxcdGluY19tbV9jb3VudGVyKG1tLCBNTV9TV0FQRU5UUyk7XFxuLVxcdFxcdFxcdHN3cF9wdGUgPSBzd3BfZW50cnlfdG9fcHRlKGVudHJ5KTtcXG4tXFx0XFx0XFx0aWYgKGFub25fZXhjbHVzaXZlKVxcbi1cXHRcXHRcXHRcXHRzd3BfcHRlID0gcHRlX3N3cF9ta2V4Y2x1c2l2ZShzd3BfcHRlKTtcXG4tXFx0XFx0XFx0aWYgKGxpa2VseShwdGVfcHJlc2VudChwdGV2YWwpKSkge1xcbi1cXHRcXHRcXHRcXHRpZiAocHRlX3NvZnRfZGlydHkocHRldmFsKSlcXG4tXFx0XFx0XFx0XFx0XFx0c3dwX3B0ZSA9IHB0ZV9zd3BfbWtzb2Z0X2RpcnR5KHN3cF9wdGUpO1xcbi1cXHRcXHRcXHRcXHRpZiAocHRlX3VmZmRfd3AocHRldmFsKSlcXG4tXFx0XFx0XFx0XFx0XFx0c3dwX3B0ZSA9IHB0ZV9zd3BfbWt1ZmZkX3dwKHN3cF9wdGUpO1xcbi1cXHRcXHRcXHR9IGVsc2Uge1xcbi1cXHRcXHRcXHRcXHRpZiAocHRlX3N3cF9zb2Z0X2RpcnR5KHB0ZXZhbCkpXFxuLVxcdFxcdFxcdFxcdFxcdHN3cF9wdGUgPSBwdGVfc3dwX21rc29mdF9kaXJ0eShzd3BfcHRlKTtcXG4tXFx0XFx0XFx0XFx0aWYgKHB0ZV9zd3BfdWZmZF93cChwdGV2YWwpKVxcbi1cXHRcXHRcXHRcXHRcXHRzd3BfcHRlID0gcHRlX3N3cF9ta3VmZmRfd3Aoc3dwX3B0ZSk7XFxuLVxcdFxcdFxcdH1cXG4tXFx0XFx0XFx0c2V0X3B0ZV9hdChtbSwgYWRkcmVzcywgcHZtdy5wdGUsIHN3cF9wdGUpO1xcbitcXHRcXHRcXHRnb3RvIGZpbmlzaF91bm1hcDtcXG4gXFx0XFx0fSBlbHNlIHtcXG4gXFx0XFx0XFx0LypcXG4gXFx0XFx0XFx0ICogVGhpcyBpcyBhIGxvY2tlZCBmaWxlLWJhY2tlZCBmb2xpbyxcXG5AQCAtMjM0MCwxMiArMjQwNCw4IEBAIHN0YXRpYyBib29sIHRyeV90b191bm1hcF9vbmUoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuIFxcdFxcdFxcdCAqL1xcbiBcXHRcXHRcXHRhZGRfbW1fY291bnRlcihtbSwgbW1fY291bnRlcl9maWxlKGZvbGlvKSwgLW5yX3BhZ2VzKTtcXG4gXFx0XFx0fVxcbi1kaXNjYXJkOlxcbi1cXHRcXHRpZiAodW5saWtlbHkoZm9saW9fdGVzdF9odWdldGxiKGZvbGlvKSkpIHtcXG4tXFx0XFx0XFx0aHVnZXRsYl9yZW1vdmVfcm1hcChmb2xpbyk7XFxuLVxcdFxcdH0gZWxzZSB7XFxuLVxcdFxcdFxcdGZvbGlvX3JlbW92ZV9ybWFwX3B0ZXMoZm9saW8sIHN1YnBhZ2UsIG5yX3BhZ2VzLCB2bWEpO1xcbi1cXHRcXHR9XFxuK2ZpbmlzaF91bm1hcDpcXG4rXFx0XFx0Zm9saW9fcmVtb3ZlX3JtYXBfcHRlcyhmb2xpbywgc3VicGFnZSwgbnJfcGFnZXMsIHZtYSk7XFxuIFxcdFxcdGlmICh2bWEtXFx1MDAzZXZtX2ZsYWdzIFxcdTAwMjYgVk1fTE9DS0VEKVxcbiBcXHRcXHRcXHRtbG9ja19kcmFpbl9sb2NhbCgpO1xcbiBcXHRcXHRmb2xpb19wdXRfcmVmcyhmb2xpbywgbnJfcGFnZXMpO1xcbkBAIC0yMzkzLDcgKzI0NTMsOCBAQCBzdGF0aWMgaW50IGZvbGlvX25vdF9tYXBwZWQoc3RydWN0IGZvbGlvICpmb2xpbylcXG4gdm9pZCB0cnlfdG9fdW5tYXAoc3RydWN0IGZvbGlvICpmb2xpbywgZW51bSB0dHVfZmxhZ3MgZmxhZ3MpXFxuIHtcXG4gXFx0c3RydWN0IHJtYXBfd2Fsa19jb250cm9sIHJ3YyA9IHtcXG4tXFx0XFx0LnJtYXBfb25lID0gdHJ5X3RvX3VubWFwX29uZSxcXG4rXFx0XFx0LnJtYXBfb25lID0gZm9saW9fdGVzdF9odWdldGxiKGZvbGlvKSA/XFxuK1xcdFxcdFxcdFxcdHRyeV90b191bm1hcF9odWdldGxiX29uZSA6IHRyeV90b191bm1hcF9vbmUsXFxuIFxcdFxcdC5hcmcgPSAodm9pZCAqKWZsYWdzLFxcbiBcXHRcXHQuZG9uZSA9IGZvbGlvX25vdF9tYXBwZWQsXFxuIFxcdFxcdC5hbm9uX2xvY2sgPSBmb2xpb19sb2NrX2Fub25fdm1hX3JlYWQsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA3VDIwOjM3OjQ2Ljg3NzYwOTEyOFoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTYwMjMxNjMyOTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSFVHRVRMQkZTXCIsXG4gICAgXCJTV0FQXCIsXG4gICAgXCJNRU1PUllfRkFJTFVSRVwiLFxuICAgIFwiSFdQT0lTT05fSU5KRUNUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidHJ5X3RvX3VubWFwX2h1Z2V0bGJfb25lXCIsXG4gICAgXCJ0dHVfYW5vbl9mb2xpb1wiLFxuICAgIFwidHR1X2Fub25fbGF6eWZyZWVfZm9saW9cIixcbiAgICBcInR0dV9hbm9uX3N3YXBiYWNrZWRfZm9saW9cIixcbiAgICBcInRyeV90b191bm1hcF9vbmVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZWZhY3RvcnMgdGhlIHVubWFwcGluZyBsb2dpYyBpbiBtbS9ybWFwLmMgYnkgZXh0cmFjdGluZyBodWdldGxiIGFuZCBhbm9ueW1vdXMgZm9saW8gdW5tYXBwaW5nIGludG8gc2VwYXJhdGUgZnVuY3Rpb25zICh0cnlfdG9fdW5tYXBfaHVnZXRsYl9vbmUsIHR0dV9hbm9uX2ZvbGlvLCBldGMuKS4gSXQgbW9kaWZpZXMgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYyByZWxhdGVkIHRvIHJldmVyc2UgbWFwcGluZywgaHVnZSBwYWdlcywgYW5kIHN3YXAuIEZ1enppbmcgc2hvdWxkIGZvY3VzIG9uIHRoZXNlIG5ldyBmdW5jdGlvbnMgdG8gZW5zdXJlIG5vIHJlZ3Jlc3Npb25zIG9yIGJ1Z3Mgd2VyZSBpbnRyb2R1Y2VkIGR1cmluZyB0aGUgcmVmYWN0b3JpbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXRcbiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSxcbiAgIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgMWU4NGJjMGUwYzIwNmY5MTUwMDhhZDRjNzE5MDVjZWIyNzhiMWM1OFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgSnVsIDcgMjA6Mzc6NDQgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaCBiL2luY2x1ZGUvbGludXgvaHVnZXRsYi5oXG5pbmRleCA0MTE1MDc2ZTQ5MjJhZS4uYmY3ZTE2M2UzNzc5ZDggMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaFxuKysrIGIvaW5jbHVkZS9saW51eC9odWdldGxiLmhcbkBAIC0xMjcxLDYgKzEyNzEsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgaHVnZXRsYl9jb3VudF9zdWIobG9uZyBsLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSlcbiB9XG4gXG4gcHRlX3QgaHVnZV9wdGVwX2dldChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLCBwdGVfdCAqcHRlcCk7XG4rdW5zaWduZWQgbG9uZyBodWdlX3B0ZV9kaXJ0eShwdGVfdCBwdGUpO1xuIFxuIHN0YXRpYyBpbmxpbmUgcHRlX3QgaHVnZV9wdGVwX2NsZWFyX2ZsdXNoKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuIFx0XHRcdFx0XHQgIHVuc2lnbmVkIGxvbmcgYWRkciwgcHRlX3QgKnB0ZXApXG5kaWZmIC0tZ2l0IGEvbW0vcm1hcC5jIGIvbW0vcm1hcC5jXG5pbmRleCA5OTM5NDAwZTc3Yzc5YS4uZjAyMWVjZDUxYTRhMmUgMTAwNjQ0XG4tLS0gYS9tbS9ybWFwLmNcbisrKyBiL21tL3JtYXAuY1xuQEAgLTE5NzgsNiArMTk3OCwyMzMgQEAgc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgZm9saW9fdW5tYXBfcHRlX2JhdGNoKHN0cnVjdCBmb2xpbyAqZm9saW8sXG4gXHRcdFx0XHQgICAgIEZQQl9SRVNQRUNUX1dSSVRFIHwgRlBCX1JFU1BFQ1RfU09GVF9ESVJUWSk7XG4gfVxuIFxuK3N0YXRpYyBib29sIHRyeV90b191bm1hcF9odWdldGxiX29uZShzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuK1x0XHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyZXNzLCB2b2lkICphcmcpXG4re1xuK1x0REVGSU5FX0ZPTElPX1ZNQV9XQUxLKHB2bXcsIGZvbGlvLCB2bWEsIGFkZHJlc3MsIDApO1xuK1x0c3RydWN0IG1tdV9ub3RpZmllcl9yYW5nZSByYW5nZTtcbitcdGVudW0gdHR1X2ZsYWdzIGZsYWdzID0gKGVudW0gdHR1X2ZsYWdzKShsb25nKWFyZztcbitcdHN0cnVjdCBtbV9zdHJ1Y3QgKm1tID0gdm1hLVx1MDAzZXZtX21tO1xuK1x0Y29uc3QgdW5zaWduZWQgbG9uZyBoc3ogPSBodWdlX3BhZ2Vfc2l6ZShoc3RhdGVfdm1hKHZtYSkpO1xuK1x0Ym9vbCByZXQgPSB0cnVlO1xuK1x0cHRlX3QgcHRldmFsO1xuK1xuK1x0LypcbitcdCAqIFRoZSB0cnlfdG9fdW5tYXAoKSBpcyBvbmx5IHBhc3NlZCBhIGh1Z2V0bGIgZm9saW8gaW4gdGhlIGNhc2VcbitcdCAqIHdoZXJlIHRoZSBodWdldGxiIGZvbGlvIGlzIHBvaXNvbmVkLlxuK1x0ICovXG4rXHRWTV9XQVJOX09OX0ZPTElPKCFmb2xpb190ZXN0X2h3cG9pc29uKGZvbGlvKSwgZm9saW8pO1xuK1x0Vk1fV0FSTl9PTl9PTkNFKCEoZmxhZ3MgXHUwMDI2IFRUVV9IV1BPSVNPTikpO1xuK1xuK1x0cmFuZ2UuZW5kID0gdm1hX2FkZHJlc3NfZW5kKFx1MDAyNnB2bXcpO1xuK1x0bW11X25vdGlmaWVyX3JhbmdlX2luaXQoXHUwMDI2cmFuZ2UsIE1NVV9OT1RJRllfQ0xFQVIsIDAsIHZtYS1cdTAwM2V2bV9tbSxcbitcdFx0XHRcdGFkZHJlc3MsIHJhbmdlLmVuZCk7XG4rXHRhZGp1c3RfcmFuZ2VfaWZfcG1kX3NoYXJpbmdfcG9zc2libGUodm1hLCBcdTAwMjZyYW5nZS5zdGFydCwgXHUwMDI2cmFuZ2UuZW5kKTtcbitcdG1tdV9ub3RpZmllcl9pbnZhbGlkYXRlX3JhbmdlX3N0YXJ0KFx1MDAyNnJhbmdlKTtcbitcbitcdC8qIFRoZXJlIGlzIG9ubHkgYSBzaW5nbGUgbWFwcGluZyBpbiBhIFZNQS4gKi9cbitcdGlmICghcGFnZV92bWFfbWFwcGVkX3dhbGsoXHUwMDI2cHZtdykpXG4rXHRcdGdvdG8gcmFuZ2VfZW5kO1xuK1xuK1x0YWRkcmVzcyA9IHB2bXcuYWRkcmVzcztcbitcdHB0ZXZhbCA9IGh1Z2VfcHRlcF9nZXQobW0sIGFkZHJlc3MsIHB2bXcucHRlKTtcbitcdFZNX1dBUk5fT05fT05DRSghcHRlX3ByZXNlbnQocHRldmFsKSk7XG4rXHRWTV9XQVJOX09OX09OQ0UocHRlX3BmbihwdGV2YWwpICE9IGZvbGlvX3Bmbihmb2xpbykpO1xuK1xuK1x0LypcbitcdCAqIGh1Z2VfcG1kX3Vuc2hhcmUgbWF5IHVubWFwIGFuIGVudGlyZSBQTUQgcGFnZS4gVGhlcmUgaXMgbm8gd2F5IG9mXG4rXHQgKiBrbm93aW5nIGV4YWN0bHkgd2hpY2ggUE1EcyBtYXkgYmUgY2FjaGVkIGZvciB0aGlzIG1tLCBzbyB3ZSBtdXN0XG4rXHQgKiBmbHVzaCB0aGVtIGFsbC4gc3RhcnQvZW5kIHdlcmUgYWxyZWFkeSBhZGp1c3RlZCBhYm92ZSB0byBjb3ZlciB0aGlzXG4rXHQgKiByYW5nZS5cbitcdCAqL1xuK1x0Zmx1c2hfY2FjaGVfcmFuZ2Uodm1hLCByYW5nZS5zdGFydCwgcmFuZ2UuZW5kKTtcbitcbitcdC8qXG4rXHQgKiBUbyBjYWxsIGh1Z2VfcG1kX3Vuc2hhcmUsIGlfbW1hcF9yd3NlbSBtdXN0IGJlIGhlbGQgaW4gd3JpdGUgbW9kZS5cbitcdCAqIENhbGxlciBuZWVkcyB0byBleHBsaWNpdGx5IGRvIHRoaXMgb3V0c2lkZSBybWFwIHJvdXRpbmVzLlxuK1x0ICpcbitcdCAqIFdlIGFsc28gbXVzdCBob2xkIGh1Z2V0bGIgdm1hX2xvY2sgaW4gd3JpdGUgbW9kZS4gTG9jayBvcmRlciBkaWN0YXRlc1xuK1x0ICogYWNxdWlyaW5nIHZtYV9sb2NrIEJFRk9SRSBpX21tYXBfcndzZW0uIFdlIGNhbiBvbmx5IHRyeSBsb2NrIGhlcmUgYW5kXG4rXHQgKiBmYWlsIGlmIHVuc3VjY2Vzc2Z1bC5cbitcdCAqL1xuK1x0aWYgKCFmb2xpb190ZXN0X2Fub24oZm9saW8pKSB7XG4rXHRcdHN0cnVjdCBtbXVfZ2F0aGVyIHRsYjtcbitcbitcdFx0Vk1fV0FSTl9PTighKGZsYWdzIFx1MDAyNiBUVFVfUk1BUF9MT0NLRUQpKTtcbitcdFx0aWYgKCFodWdldGxiX3ZtYV90cnlsb2NrX3dyaXRlKHZtYSkpIHtcbitcdFx0XHRyZXQgPSBmYWxzZTtcbitcdFx0XHRnb3RvIHdhbGtfZG9uZTtcbitcdFx0fVxuK1xuK1x0XHR0bGJfZ2F0aGVyX21tdV92bWEoXHUwMDI2dGxiLCB2bWEpO1xuK1x0XHRpZiAoaHVnZV9wbWRfdW5zaGFyZShcdTAwMjZ0bGIsIHZtYSwgYWRkcmVzcywgcHZtdy5wdGUpKSB7XG4rXHRcdFx0aHVnZXRsYl92bWFfdW5sb2NrX3dyaXRlKHZtYSk7XG4rXHRcdFx0aHVnZV9wbWRfdW5zaGFyZV9mbHVzaChcdTAwMjZ0bGIsIHZtYSk7XG4rXHRcdFx0dGxiX2ZpbmlzaF9tbXUoXHUwMDI2dGxiKTtcbitcdFx0XHQvKlxuK1x0XHRcdCAqIFRoZSBQTUQgdGFibGUgd2FzIHVubWFwcGVkLCBjb25zZXF1ZW50bHkgdW5tYXBwaW5nXG4rXHRcdFx0ICogdGhlIGZvbGlvLlxuK1x0XHRcdCAqL1xuK1x0XHRcdGdvdG8gd2Fsa19kb25lO1xuK1x0XHR9XG4rXHRcdGh1Z2V0bGJfdm1hX3VubG9ja193cml0ZSh2bWEpO1xuK1x0XHR0bGJfZmluaXNoX21tdShcdTAwMjZ0bGIpO1xuK1x0fVxuK1x0cHRldmFsID0gaHVnZV9wdGVwX2NsZWFyX2ZsdXNoKHZtYSwgYWRkcmVzcywgcHZtdy5wdGUpO1xuK1x0aWYgKGh1Z2VfcHRlX2RpcnR5KHB0ZXZhbCkpXG4rXHRcdGZvbGlvX21hcmtfZGlydHkoZm9saW8pO1xuK1xuK1x0cHRldmFsID0gc3dwX2VudHJ5X3RvX3B0ZShtYWtlX2h3cG9pc29uX2VudHJ5KGZvbGlvX3BhZ2UoZm9saW8sIDApKSk7XG4rXHRodWdldGxiX2NvdW50X3N1Yihmb2xpb19ucl9wYWdlcyhmb2xpbyksIG1tKTtcbitcdHNldF9odWdlX3B0ZV9hdChtbSwgYWRkcmVzcywgcHZtdy5wdGUsIHB0ZXZhbCwgaHN6KTtcbitcdGh1Z2V0bGJfcmVtb3ZlX3JtYXAoZm9saW8pO1xuK1x0Zm9saW9fcHV0X3JlZnMoZm9saW8sIDEpO1xuK1xuK3dhbGtfZG9uZTpcbitcdHBhZ2Vfdm1hX21hcHBlZF93YWxrX2RvbmUoXHUwMDI2cHZtdyk7XG4rcmFuZ2VfZW5kOlxuK1x0bW11X25vdGlmaWVyX2ludmFsaWRhdGVfcmFuZ2VfZW5kKFx1MDAyNnJhbmdlKTtcbitcdHJldHVybiByZXQ7XG4rfVxuK1xuK3N0YXRpYyBpbmxpbmUgYm9vbCB0dHVfYW5vbl9sYXp5ZnJlZV9mb2xpbyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbitcdFx0c3RydWN0IGZvbGlvICpmb2xpbylcbit7XG4rXHRpbnQgcmVmX2NvdW50LCBtYXBfY291bnQ7XG4rXG4rXHQvKlxuK1x0ICogU3luY2hyb25pemUgd2l0aCBndXBfcHRlX3JhbmdlKCk6XG4rXHQgKiAtIGNsZWFyIFBURTsgYmFycmllcjsgcmVhZCByZWZjb3VudFxuK1x0ICogLSBpbmMgcmVmY291bnQ7IGJhcnJpZXI7IHJlYWQgUFRFXG4rXHQgKi9cbitcdHNtcF9tYigpO1xuK1xuK1x0cmVmX2NvdW50ID0gZm9saW9fcmVmX2NvdW50KGZvbGlvKTtcbitcdG1hcF9jb3VudCA9IGZvbGlvX21hcGNvdW50KGZvbGlvKTtcbitcbitcdC8qXG4rXHQgKiBPcmRlciByZWFkcyBmb3IgcGFnZSByZWZjb3VudCBhbmQgZGlydHkgZmxhZ1xuK1x0ICogKHNlZSBjb21tZW50cyBpbiBfX3JlbW92ZV9tYXBwaW5nKCkpLlxuK1x0ICovXG4rXHRzbXBfcm1iKCk7XG4rXG4rXHRpZiAoZm9saW9fdGVzdF9kaXJ0eShmb2xpbykgXHUwMDI2XHUwMDI2ICEodm1hLVx1MDAzZXZtX2ZsYWdzIFx1MDAyNiBWTV9EUk9QUEFCTEUpKSB7XG4rXHRcdC8qXG4rXHRcdCAqIHJlZGlydGllZCBlaXRoZXIgdXNpbmcgdGhlIHBhZ2UgdGFibGUgb3IgYSBwcmV2aW91c2x5XG4rXHRcdCAqIG9idGFpbmVkIEdVUCByZWZlcmVuY2UuXG4rXHRcdCAqL1xuK1x0XHRmb2xpb19zZXRfc3dhcGJhY2tlZChmb2xpbyk7XG4rXHRcdHJldHVybiBmYWxzZTtcbitcdH1cbitcbitcdGlmIChyZWZfY291bnQgIT0gMSArIG1hcF9jb3VudCkge1xuK1x0XHQvKlxuK1x0XHQgKiBBZGRpdGlvbmFsIHJlZmVyZW5jZS4gQ291bGQgYmUgYSBHVVAgcmVmZXJlbmNlIG9yIGFueVxuK1x0XHQgKiBzcGVjdWxhdGl2ZSByZWZlcmVuY2UuIEdVUCB1c2VycyBtdXN0IG1hcmsgdGhlIGZvbGlvXG4rXHRcdCAqIGRpcnR5IGlmIHRoZXJlIHdhcyBhIG1vZGlmaWNhdGlvbi4gVGhpcyBmb2xpbyBjYW5ub3QgYmVcbitcdFx0ICogcmVjbGFpbWVkIHJpZ2h0IG5vdyBlaXRoZXIgd2F5LCBzbyBhY3QganVzdCBsaWtlIG5vdGhpbmdcbitcdFx0ICogaGFwcGVuZWQuXG4rXHRcdCAqIFdlJ2xsIGNvbWUgYmFjayBoZXJlIGxhdGVyIGFuZCBkZXRlY3QgaWYgdGhlIGZvbGlvIHdhc1xuK1x0XHQgKiBkaXJ0aWVkIHdoZW4gdGhlIGFkZGl0aW9uYWwgcmVmZXJlbmNlIGlzIGdvbmUuXG4rXHRcdCAqL1xuK1x0XHRyZXR1cm4gZmFsc2U7XG4rXHR9XG4rXG4rXHRyZXR1cm4gdHJ1ZTtcbit9XG4rXG4rc3RhdGljIGlubGluZSB2b2lkIHNldF9zd3BfcHRlX2F0KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MsXG4rXHRcdHB0ZV90ICpwdGVwLCBzd3BfZW50cnlfdCBlbnRyeSwgcHRlX3QgcHRldmFsLCBib29sIGFub25fZXhjbHVzaXZlKVxuK3tcbitcdHB0ZV90IHN3cF9wdGUgPSBzd3BfZW50cnlfdG9fcHRlKGVudHJ5KTtcbitcbitcdGlmIChhbm9uX2V4Y2x1c2l2ZSlcbitcdFx0c3dwX3B0ZSA9IHB0ZV9zd3BfbWtleGNsdXNpdmUoc3dwX3B0ZSk7XG4rXG4rXHRpZiAobGlrZWx5KHB0ZV9wcmVzZW50KHB0ZXZhbCkpKSB7XG4rXHRcdGlmIChwdGVfc29mdF9kaXJ0eShwdGV2YWwpKVxuK1x0XHRcdHN3cF9wdGUgPSBwdGVfc3dwX21rc29mdF9kaXJ0eShzd3BfcHRlKTtcbitcdFx0aWYgKHB0ZV91ZmZkX3dwKHB0ZXZhbCkpXG4rXHRcdFx0c3dwX3B0ZSA9IHB0ZV9zd3BfbWt1ZmZkX3dwKHN3cF9wdGUpO1xuK1x0fSBlbHNlIHtcbitcdFx0LyogRGV2aWNlLWV4Y2x1c2l2ZSBlbnRyeSAqL1xuK1x0XHRpZiAocHRlX3N3cF9zb2Z0X2RpcnR5KHB0ZXZhbCkpXG4rXHRcdFx0c3dwX3B0ZSA9IHB0ZV9zd3BfbWtzb2Z0X2RpcnR5KHN3cF9wdGUpO1xuK1x0XHRpZiAocHRlX3N3cF91ZmZkX3dwKHB0ZXZhbCkpXG4rXHRcdFx0c3dwX3B0ZSA9IHB0ZV9zd3BfbWt1ZmZkX3dwKHN3cF9wdGUpO1xuK1x0fVxuK1xuK1x0c2V0X3B0ZV9hdChtbSwgYWRkcmVzcywgcHRlcCwgc3dwX3B0ZSk7XG4rfVxuK1xuK3N0YXRpYyBpbmxpbmUgYm9vbCB0dHVfYW5vbl9zd2FwYmFja2VkX2ZvbGlvKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuK1x0XHRzdHJ1Y3QgcGFnZSAqc3VicGFnZSwgdW5zaWduZWQgbG9uZyBhZGRyZXNzLCBwdGVfdCAqcHRlcCxcbitcdFx0cHRlX3QgcHRldmFsKVxuK3tcbitcdGJvb2wgYW5vbl9leGNsdXNpdmUgPSBmb2xpb190ZXN0X2Fub24oZm9saW8pIFx1MDAyNlx1MDAyNiBQYWdlQW5vbkV4Y2x1c2l2ZShzdWJwYWdlKTtcbitcdHN3cF9lbnRyeV90IGVudHJ5ID0gcGFnZV9zd2FwX2VudHJ5KHN1YnBhZ2UpO1xuK1x0c3RydWN0IG1tX3N0cnVjdCAqbW0gPSB2bWEtXHUwMDNldm1fbW07XG4rXG4rXHRpZiAoZm9saW9fZHVwX3N3YXAoZm9saW8sIHN1YnBhZ2UpIFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gZmFsc2U7XG4rXG4rXHQvKlxuK1x0ICogYXJjaF91bm1hcF9vbmUoKSBpcyBleHBlY3RlZCB0byBiZSBhIE5PUCBvblxuK1x0ICogYXJjaGl0ZWN0dXJlcyB3aGVyZSB3ZSBjb3VsZCBoYXZlIFBGTiBzd2FwIFBURXMsXG4rXHQgKiBzbyB3ZSdsbCBub3QgY2hlY2svY2FyZS5cbitcdCAqL1xuK1x0aWYgKGFyY2hfdW5tYXBfb25lKG1tLCB2bWEsIGFkZHJlc3MsIHB0ZXZhbCkgXHUwMDNjIDApIHtcbitcdFx0Zm9saW9fcHV0X3N3YXAoZm9saW8sIHN1YnBhZ2UpO1xuK1x0XHRyZXR1cm4gZmFsc2U7XG4rXHR9XG4rXG4rXHQvKiBTZWUgZm9saW9fdHJ5X3NoYXJlX2Fub25fcm1hcCgpOiBjbGVhciBQVEUgZmlyc3QuICovXG4rXHRpZiAoYW5vbl9leGNsdXNpdmUgXHUwMDI2XHUwMDI2IGZvbGlvX3RyeV9zaGFyZV9hbm9uX3JtYXBfcHRlKGZvbGlvLCBzdWJwYWdlKSkge1xuK1x0XHRmb2xpb19wdXRfc3dhcChmb2xpbywgc3VicGFnZSk7XG4rXHRcdHJldHVybiBmYWxzZTtcbitcdH1cbitcbitcdG1tX3ByZXBhcmVfZm9yX3N3YXBfZW50cmllcyhtbSk7XG4rXHRkZWNfbW1fY291bnRlcihtbSwgTU1fQU5PTlBBR0VTKTtcbitcdGluY19tbV9jb3VudGVyKG1tLCBNTV9TV0FQRU5UUyk7XG4rXHRzZXRfc3dwX3B0ZV9hdChtbSwgYWRkcmVzcywgcHRlcCwgZW50cnksIHB0ZXZhbCwgYW5vbl9leGNsdXNpdmUpO1xuK1x0cmV0dXJuIHRydWU7XG4rfVxuK1xuK3N0YXRpYyBpbmxpbmUgYm9vbCB0dHVfYW5vbl9mb2xpbyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgc3RydWN0IGZvbGlvICpmb2xpbyxcbitcdFx0c3RydWN0IHBhZ2UgKnN1YnBhZ2UsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcywgcHRlX3QgKnB0ZXAsXG4rXHRcdHB0ZV90IHB0ZXZhbCwgdW5zaWduZWQgbG9uZyBucl9wYWdlcylcbit7XG4rXHRzdHJ1Y3QgbW1fc3RydWN0ICptbSA9IHZtYS1cdTAwM2V2bV9tbTtcbitcdGJvb2wgcmV0O1xuK1xuK1x0LypcbitcdCAqIFN0b3JlIHRoZSBzd2FwIGxvY2F0aW9uIGluIHRoZSBwdGUuXG4rXHQgKiBTZWUgaGFuZGxlX3B0ZV9mYXVsdCgpIC4uLlxuK1x0ICovXG4rXHRpZiAodW5saWtlbHkoZm9saW9fdGVzdF9zd2FwYmFja2VkKGZvbGlvKSAhPVxuK1x0XHRcdGZvbGlvX3Rlc3Rfc3dhcGNhY2hlKGZvbGlvKSkpIHtcbitcdFx0V0FSTl9PTl9PTkNFKDEpO1xuK1x0XHRyZXR1cm4gZmFsc2U7XG4rXHR9XG4rXG4rXHQvKiBNQURWX0ZSRUUgcGFnZSBjaGVjayAqL1xuK1x0aWYgKCFmb2xpb190ZXN0X3N3YXBiYWNrZWQoZm9saW8pKSB7XG4rXHRcdHJldCA9IHR0dV9hbm9uX2xhenlmcmVlX2ZvbGlvKHZtYSwgZm9saW8pO1xuK1x0XHRpZiAocmV0KVxuK1x0XHRcdGFkZF9tbV9jb3VudGVyKG1tLCBNTV9BTk9OUEFHRVMsIC1ucl9wYWdlcyk7XG4rXHR9IGVsc2Uge1xuK1x0XHQvKiBucl9wYWdlcyBcdTAwM2UgMSBub3Qgc3VwcG9ydGVkIHlldCAqL1xuK1x0XHRyZXQgPSB0dHVfYW5vbl9zd2FwYmFja2VkX2ZvbGlvKHZtYSwgZm9saW8sIHN1YnBhZ2UsIGFkZHJlc3MsXG4rXHRcdFx0XHRcdFx0cHRlcCwgcHRldmFsKTtcbitcdH1cbitcbitcdGlmICghcmV0KVxuK1x0XHRzZXRfcHRlcyhtbSwgYWRkcmVzcywgcHRlcCwgcHRldmFsLCBucl9wYWdlcyk7XG4rXG4rXHRyZXR1cm4gcmV0O1xuK31cbitcbiAvKlxuICAqIEBhcmc6IGVudW0gdHR1X2ZsYWdzIHdpbGwgYmUgcGFzc2VkIHRvIHRoaXMgYXJndW1lbnRcbiAgKi9cbkBAIC0xOTg2LDE0ICsyMjEzLDEzIEBAIHN0YXRpYyBib29sIHRyeV90b191bm1hcF9vbmUoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4ge1xuIFx0c3RydWN0IG1tX3N0cnVjdCAqbW0gPSB2bWEtXHUwMDNldm1fbW07XG4gXHRERUZJTkVfRk9MSU9fVk1BX1dBTEsocHZtdywgZm9saW8sIHZtYSwgYWRkcmVzcywgMCk7XG4tXHRib29sIGFub25fZXhjbHVzaXZlLCByZXQgPSB0cnVlO1xuK1x0Ym9vbCByZXQgPSB0cnVlO1xuIFx0cHRlX3QgcHRldmFsO1xuIFx0c3RydWN0IHBhZ2UgKnN1YnBhZ2U7XG4gXHRzdHJ1Y3QgbW11X25vdGlmaWVyX3JhbmdlIHJhbmdlO1xuIFx0ZW51bSB0dHVfZmxhZ3MgZmxhZ3MgPSAoZW51bSB0dHVfZmxhZ3MpKGxvbmcpYXJnO1xuIFx0dW5zaWduZWQgbG9uZyBucl9wYWdlcyA9IDEsIGVuZF9hZGRyO1xuIFx0dW5zaWduZWQgbG9uZyBwZm47XG4tXHR1bnNpZ25lZCBsb25nIGhzeiA9IDA7XG4gXHRpbnQgcHRlcyA9IDA7XG4gXG4gXHQvKlxuQEAgLTIwMDcsOCArMjIzMyw2IEBAIHN0YXRpYyBib29sIHRyeV90b191bm1hcF9vbmUoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4gXG4gXHQvKlxuIFx0ICogRm9yIFRIUCwgd2UgaGF2ZSB0byBhc3N1bWUgdGhlIHdvcnNlIGNhc2UgaWUgcG1kIGZvciBpbnZhbGlkYXRpb24uXG4tXHQgKiBGb3IgaHVnZXRsYiwgaXQgY291bGQgYmUgbXVjaCB3b3JzZSBpZiB3ZSBuZWVkIHRvIGRvIHB1ZFxuLVx0ICogaW52YWxpZGF0aW9uIGluIHRoZSBjYXNlIG9mIHBtZCBzaGFyaW5nLlxuIFx0ICpcbiBcdCAqIE5vdGUgdGhhdCB0aGUgZm9saW8gY2FuIG5vdCBiZSBmcmVlZCBpbiB0aGlzIGZ1bmN0aW9uIGFzIGNhbGwgb2ZcbiBcdCAqIHRyeV90b191bm1hcCgpIG11c3QgaG9sZCBhIHJlZmVyZW5jZSBvbiB0aGUgZm9saW8uXG5AQCAtMjAxNiwxNyArMjI0MCw2IEBAIHN0YXRpYyBib29sIHRyeV90b191bm1hcF9vbmUoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4gXHRyYW5nZS5lbmQgPSB2bWFfYWRkcmVzc19lbmQoXHUwMDI2cHZtdyk7XG4gXHRtbXVfbm90aWZpZXJfcmFuZ2VfaW5pdChcdTAwMjZyYW5nZSwgTU1VX05PVElGWV9DTEVBUiwgMCwgdm1hLVx1MDAzZXZtX21tLFxuIFx0XHRcdFx0YWRkcmVzcywgcmFuZ2UuZW5kKTtcbi1cdGlmIChmb2xpb190ZXN0X2h1Z2V0bGIoZm9saW8pKSB7XG4tXHRcdC8qXG4tXHRcdCAqIElmIHNoYXJpbmcgaXMgcG9zc2libGUsIHN0YXJ0IGFuZCBlbmQgd2lsbCBiZSBhZGp1c3RlZFxuLVx0XHQgKiBhY2NvcmRpbmdseS5cbi1cdFx0ICovXG4tXHRcdGFkanVzdF9yYW5nZV9pZl9wbWRfc2hhcmluZ19wb3NzaWJsZSh2bWEsIFx1MDAyNnJhbmdlLnN0YXJ0LFxuLVx0XHRcdFx0XHRcdCAgICAgXHUwMDI2cmFuZ2UuZW5kKTtcbi1cbi1cdFx0LyogV2UgbmVlZCB0aGUgaHVnZSBwYWdlIHNpemUgZm9yIHNldF9odWdlX3B0ZV9hdCgpICovXG4tXHRcdGhzeiA9IGh1Z2VfcGFnZV9zaXplKGhzdGF0ZV92bWEodm1hKSk7XG4tXHR9XG4gXHRtbXVfbm90aWZpZXJfaW52YWxpZGF0ZV9yYW5nZV9zdGFydChcdTAwMjZyYW5nZSk7XG4gXG4gXHR3aGlsZSAocGFnZV92bWFfbWFwcGVkX3dhbGsoXHUwMDI2cHZtdykpIHtcbkBAIC0yMTExLDY1ICsyMzI0LDExIEBAIHN0YXRpYyBib29sIHRyeV90b191bm1hcF9vbmUoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4gXHRcdFx0Y29uc3Qgc29mdGxlYWZfdCBlbnRyeSA9IHNvZnRsZWFmX2Zyb21fcHRlKHB0ZXZhbCk7XG4gXG4gXHRcdFx0cGZuID0gc29mdGxlYWZfdG9fcGZuKGVudHJ5KTtcbi1cdFx0XHRWTV9XQVJOX09OX0ZPTElPKGZvbGlvX3Rlc3RfaHVnZXRsYihmb2xpbyksIGZvbGlvKTtcbiBcdFx0fVxuIFxuIFx0XHRzdWJwYWdlID0gZm9saW9fcGFnZShmb2xpbywgcGZuIC0gZm9saW9fcGZuKGZvbGlvKSk7XG4tXHRcdGFub25fZXhjbHVzaXZlID0gZm9saW9fdGVzdF9hbm9uKGZvbGlvKSBcdTAwMjZcdTAwMjZcbi1cdFx0XHRcdCBQYWdlQW5vbkV4Y2x1c2l2ZShzdWJwYWdlKTtcbiBcbi1cdFx0aWYgKGZvbGlvX3Rlc3RfaHVnZXRsYihmb2xpbykpIHtcbi1cdFx0XHRib29sIGFub24gPSBmb2xpb190ZXN0X2Fub24oZm9saW8pO1xuLVxuLVx0XHRcdC8qXG4tXHRcdFx0ICogVGhlIHRyeV90b191bm1hcCgpIGlzIG9ubHkgcGFzc2VkIGEgaHVnZXRsYiBwYWdlXG4tXHRcdFx0ICogaW4gdGhlIGNhc2Ugd2hlcmUgdGhlIGh1Z2V0bGIgcGFnZSBpcyBwb2lzb25lZC5cbi1cdFx0XHQgKi9cbi1cdFx0XHRWTV9CVUdfT05fUEFHRSghUGFnZUhXUG9pc29uKHN1YnBhZ2UpLCBzdWJwYWdlKTtcbi1cdFx0XHQvKlxuLVx0XHRcdCAqIGh1Z2VfcG1kX3Vuc2hhcmUgbWF5IHVubWFwIGFuIGVudGlyZSBQTUQgcGFnZS5cbi1cdFx0XHQgKiBUaGVyZSBpcyBubyB3YXkgb2Yga25vd2luZyBleGFjdGx5IHdoaWNoIFBNRHMgbWF5XG4tXHRcdFx0ICogYmUgY2FjaGVkIGZvciB0aGlzIG1tLCBzbyB3ZSBtdXN0IGZsdXNoIHRoZW0gYWxsLlxuLVx0XHRcdCAqIHN0YXJ0L2VuZCB3ZXJlIGFscmVhZHkgYWRqdXN0ZWQgYWJvdmUgdG8gY292ZXIgdGhpc1xuLVx0XHRcdCAqIHJhbmdlLlxuLVx0XHRcdCAqL1xuLVx0XHRcdGZsdXNoX2NhY2hlX3JhbmdlKHZtYSwgcmFuZ2Uuc3RhcnQsIHJhbmdlLmVuZCk7XG4tXG4tXHRcdFx0Lypcbi1cdFx0XHQgKiBUbyBjYWxsIGh1Z2VfcG1kX3Vuc2hhcmUsIGlfbW1hcF9yd3NlbSBtdXN0IGJlXG4tXHRcdFx0ICogaGVsZCBpbiB3cml0ZSBtb2RlLiAgQ2FsbGVyIG5lZWRzIHRvIGV4cGxpY2l0bHlcbi1cdFx0XHQgKiBkbyB0aGlzIG91dHNpZGUgcm1hcCByb3V0aW5lcy5cbi1cdFx0XHQgKlxuLVx0XHRcdCAqIFdlIGFsc28gbXVzdCBob2xkIGh1Z2V0bGIgdm1hX2xvY2sgaW4gd3JpdGUgbW9kZS5cbi1cdFx0XHQgKiBMb2NrIG9yZGVyIGRpY3RhdGVzIGFjcXVpcmluZyB2bWFfbG9jayBCRUZPUkVcbi1cdFx0XHQgKiBpX21tYXBfcndzZW0uICBXZSBjYW4gb25seSB0cnkgbG9jayBoZXJlIGFuZCBmYWlsXG4tXHRcdFx0ICogaWYgdW5zdWNjZXNzZnVsLlxuLVx0XHRcdCAqL1xuLVx0XHRcdGlmICghYW5vbikge1xuLVx0XHRcdFx0c3RydWN0IG1tdV9nYXRoZXIgdGxiO1xuLVxuLVx0XHRcdFx0Vk1fQlVHX09OKCEoZmxhZ3MgXHUwMDI2IFRUVV9STUFQX0xPQ0tFRCkpO1xuLVx0XHRcdFx0aWYgKCFodWdldGxiX3ZtYV90cnlsb2NrX3dyaXRlKHZtYSkpXG4tXHRcdFx0XHRcdGdvdG8gd2Fsa19hYm9ydDtcbi1cbi1cdFx0XHRcdHRsYl9nYXRoZXJfbW11X3ZtYShcdTAwMjZ0bGIsIHZtYSk7XG4tXHRcdFx0XHRpZiAoaHVnZV9wbWRfdW5zaGFyZShcdTAwMjZ0bGIsIHZtYSwgYWRkcmVzcywgcHZtdy5wdGUpKSB7XG4tXHRcdFx0XHRcdGh1Z2V0bGJfdm1hX3VubG9ja193cml0ZSh2bWEpO1xuLVx0XHRcdFx0XHRodWdlX3BtZF91bnNoYXJlX2ZsdXNoKFx1MDAyNnRsYiwgdm1hKTtcbi1cdFx0XHRcdFx0dGxiX2ZpbmlzaF9tbXUoXHUwMDI2dGxiKTtcbi1cdFx0XHRcdFx0Lypcbi1cdFx0XHRcdFx0ICogVGhlIFBNRCB0YWJsZSB3YXMgdW5tYXBwZWQsXG4tXHRcdFx0XHRcdCAqIGNvbnNlcXVlbnRseSB1bm1hcHBpbmcgdGhlIGZvbGlvLlxuLVx0XHRcdFx0XHQgKi9cbi1cdFx0XHRcdFx0Z290byB3YWxrX2RvbmU7XG4tXHRcdFx0XHR9XG4tXHRcdFx0XHRodWdldGxiX3ZtYV91bmxvY2tfd3JpdGUodm1hKTtcbi1cdFx0XHRcdHRsYl9maW5pc2hfbW11KFx1MDAyNnRsYik7XG4tXHRcdFx0fVxuLVx0XHRcdHB0ZXZhbCA9IGh1Z2VfcHRlcF9jbGVhcl9mbHVzaCh2bWEsIGFkZHJlc3MsIHB2bXcucHRlKTtcbi1cdFx0XHRpZiAocHRlX2RpcnR5KHB0ZXZhbCkpXG4tXHRcdFx0XHRmb2xpb19tYXJrX2RpcnR5KGZvbGlvKTtcbi1cdFx0fSBlbHNlIGlmIChsaWtlbHkocHRlX3ByZXNlbnQocHRldmFsKSkpIHtcbitcdFx0aWYgKGxpa2VseShwdGVfcHJlc2VudChwdGV2YWwpKSkge1xuIFx0XHRcdG5yX3BhZ2VzID0gZm9saW9fdW5tYXBfcHRlX2JhdGNoKGZvbGlvLCBcdTAwMjZwdm13LCBmbGFncywgcHRldmFsKTtcbiBcdFx0XHRlbmRfYWRkciA9IGFkZHJlc3MgKyBucl9wYWdlcyAqIFBBR0VfU0laRTtcbiBcdFx0XHRmbHVzaF9jYWNoZV9yYW5nZSh2bWEsIGFkZHJlc3MsIGVuZF9hZGRyKTtcbkBAIC0yMjA0LDE2ICsyMzYzLDE0IEBAIHN0YXRpYyBib29sIHRyeV90b191bm1hcF9vbmUoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4gXHRcdC8qIFVwZGF0ZSBoaWdoIHdhdGVybWFyayBiZWZvcmUgd2UgbG93ZXIgcnNzICovXG4gXHRcdHVwZGF0ZV9oaXdhdGVyX3JzcyhtbSk7XG4gXG4tXHRcdGlmIChQYWdlSFdQb2lzb24oc3VicGFnZSkgXHUwMDI2XHUwMDI2IChmbGFncyBcdTAwMjYgVFRVX0hXUE9JU09OKSkge1xuK1x0XHQvKlxuK1x0XHQgKiBXaXRoIFRUVV9IV1BPSVNPTiwgd2Ugb25seSBleHBlY3Qgc21hbGwgZm9saW9zIG9yIGh1Z2V0bGJcbitcdFx0ICogZm9saW9zIGhlcmUgZm9yIG5vdy5cbitcdFx0ICovXG4rXHRcdGlmIChmb2xpb190ZXN0X2h3cG9pc29uKGZvbGlvKSBcdTAwMjZcdTAwMjYgKGZsYWdzIFx1MDAyNiBUVFVfSFdQT0lTT04pKSB7XG4gXHRcdFx0cHRldmFsID0gc3dwX2VudHJ5X3RvX3B0ZShtYWtlX2h3cG9pc29uX2VudHJ5KHN1YnBhZ2UpKTtcbi1cdFx0XHRpZiAoZm9saW9fdGVzdF9odWdldGxiKGZvbGlvKSkge1xuLVx0XHRcdFx0aHVnZXRsYl9jb3VudF9zdWIoZm9saW9fbnJfcGFnZXMoZm9saW8pLCBtbSk7XG4tXHRcdFx0XHRzZXRfaHVnZV9wdGVfYXQobW0sIGFkZHJlc3MsIHB2bXcucHRlLCBwdGV2YWwsXG4tXHRcdFx0XHRcdFx0aHN6KTtcbi1cdFx0XHR9IGVsc2Uge1xuLVx0XHRcdFx0ZGVjX21tX2NvdW50ZXIobW0sIG1tX2NvdW50ZXIoZm9saW8pKTtcbi1cdFx0XHRcdHNldF9wdGVfYXQobW0sIGFkZHJlc3MsIHB2bXcucHRlLCBwdGV2YWwpO1xuLVx0XHRcdH1cbitcdFx0XHRkZWNfbW1fY291bnRlcihtbSwgbW1fY291bnRlcihmb2xpbykpO1xuK1x0XHRcdHNldF9wdGVfYXQobW0sIGFkZHJlc3MsIHB2bXcucHRlLCBwdGV2YWwpO1xuIFx0XHR9IGVsc2UgaWYgKGxpa2VseShwdGVfcHJlc2VudChwdGV2YWwpKSBcdTAwMjZcdTAwMjYgcHRlX3VudXNlZChwdGV2YWwpIFx1MDAyNlx1MDAyNlxuIFx0XHRcdCAgICF1c2VyZmF1bHRmZF9hcm1lZCh2bWEpKSB7XG4gXHRcdFx0LypcbkBAIC0yMjI4LDEwNCArMjM4NSwxMSBAQCBzdGF0aWMgYm9vbCB0cnlfdG9fdW5tYXBfb25lKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuIFx0XHRcdCAqL1xuIFx0XHRcdGRlY19tbV9jb3VudGVyKG1tLCBtbV9jb3VudGVyKGZvbGlvKSk7XG4gXHRcdH0gZWxzZSBpZiAoZm9saW9fdGVzdF9hbm9uKGZvbGlvKSkge1xuLVx0XHRcdHN3cF9lbnRyeV90IGVudHJ5ID0gcGFnZV9zd2FwX2VudHJ5KHN1YnBhZ2UpO1xuLVx0XHRcdHB0ZV90IHN3cF9wdGU7XG4tXHRcdFx0Lypcbi1cdFx0XHQgKiBTdG9yZSB0aGUgc3dhcCBsb2NhdGlvbiBpbiB0aGUgcHRlLlxuLVx0XHRcdCAqIFNlZSBoYW5kbGVfcHRlX2ZhdWx0KCkgLi4uXG4tXHRcdFx0ICovXG4tXHRcdFx0aWYgKHVubGlrZWx5KGZvbGlvX3Rlc3Rfc3dhcGJhY2tlZChmb2xpbykgIT1cbi1cdFx0XHRcdFx0Zm9saW9fdGVzdF9zd2FwY2FjaGUoZm9saW8pKSkge1xuLVx0XHRcdFx0V0FSTl9PTl9PTkNFKDEpO1xuK1x0XHRcdGlmICghdHR1X2Fub25fZm9saW8odm1hLCBmb2xpbywgc3VicGFnZSwgYWRkcmVzcyxcbitcdFx0XHRcdFx0ICAgIHB2bXcucHRlLCBwdGV2YWwsIG5yX3BhZ2VzKSlcbiBcdFx0XHRcdGdvdG8gd2Fsa19hYm9ydDtcbi1cdFx0XHR9XG4tXG4tXHRcdFx0LyogTUFEVl9GUkVFIHBhZ2UgY2hlY2sgKi9cbi1cdFx0XHRpZiAoIWZvbGlvX3Rlc3Rfc3dhcGJhY2tlZChmb2xpbykpIHtcbi1cdFx0XHRcdGludCByZWZfY291bnQsIG1hcF9jb3VudDtcbi1cbi1cdFx0XHRcdC8qXG4tXHRcdFx0XHQgKiBTeW5jaHJvbml6ZSB3aXRoIGd1cF9wdGVfcmFuZ2UoKTpcbi1cdFx0XHRcdCAqIC0gY2xlYXIgUFRFOyBiYXJyaWVyOyByZWFkIHJlZmNvdW50XG4tXHRcdFx0XHQgKiAtIGluYyByZWZjb3VudDsgYmFycmllcjsgcmVhZCBQVEVcbi1cdFx0XHRcdCAqL1xuLVx0XHRcdFx0c21wX21iKCk7XG4gXG4tXHRcdFx0XHRyZWZfY291bnQgPSBmb2xpb19yZWZfY291bnQoZm9saW8pO1xuLVx0XHRcdFx0bWFwX2NvdW50ID0gZm9saW9fbWFwY291bnQoZm9saW8pO1xuLVxuLVx0XHRcdFx0Lypcbi1cdFx0XHRcdCAqIE9yZGVyIHJlYWRzIGZvciBwYWdlIHJlZmNvdW50IGFuZCBkaXJ0eSBmbGFnXG4tXHRcdFx0XHQgKiAoc2VlIGNvbW1lbnRzIGluIF9fcmVtb3ZlX21hcHBpbmcoKSkuXG4tXHRcdFx0XHQgKi9cbi1cdFx0XHRcdHNtcF9ybWIoKTtcbi1cbi1cdFx0XHRcdGlmIChmb2xpb190ZXN0X2RpcnR5KGZvbGlvKSBcdTAwMjZcdTAwMjYgISh2bWEtXHUwMDNldm1fZmxhZ3MgXHUwMDI2IFZNX0RST1BQQUJMRSkpIHtcbi1cdFx0XHRcdFx0Lypcbi1cdFx0XHRcdFx0ICogcmVkaXJ0aWVkIGVpdGhlciB1c2luZyB0aGUgcGFnZSB0YWJsZSBvciBhIHByZXZpb3VzbHlcbi1cdFx0XHRcdFx0ICogb2J0YWluZWQgR1VQIHJlZmVyZW5jZS5cbi1cdFx0XHRcdFx0ICovXG4tXHRcdFx0XHRcdHNldF9wdGVzKG1tLCBhZGRyZXNzLCBwdm13LnB0ZSwgcHRldmFsLCBucl9wYWdlcyk7XG4tXHRcdFx0XHRcdGZvbGlvX3NldF9zd2FwYmFja2VkKGZvbGlvKTtcbi1cdFx0XHRcdFx0Z290byB3YWxrX2Fib3J0O1xuLVx0XHRcdFx0fSBlbHNlIGlmIChyZWZfY291bnQgIT0gMSArIG1hcF9jb3VudCkge1xuLVx0XHRcdFx0XHQvKlxuLVx0XHRcdFx0XHQgKiBBZGRpdGlvbmFsIHJlZmVyZW5jZS4gQ291bGQgYmUgYSBHVVAgcmVmZXJlbmNlIG9yIGFueVxuLVx0XHRcdFx0XHQgKiBzcGVjdWxhdGl2ZSByZWZlcmVuY2UuIEdVUCB1c2VycyBtdXN0IG1hcmsgdGhlIGZvbGlvXG4tXHRcdFx0XHRcdCAqIGRpcnR5IGlmIHRoZXJlIHdhcyBhIG1vZGlmaWNhdGlvbi4gVGhpcyBmb2xpbyBjYW5ub3QgYmVcbi1cdFx0XHRcdFx0ICogcmVjbGFpbWVkIHJpZ2h0IG5vdyBlaXRoZXIgd2F5LCBzbyBhY3QganVzdCBsaWtlIG5vdGhpbmdcbi1cdFx0XHRcdFx0ICogaGFwcGVuZWQuXG4tXHRcdFx0XHRcdCAqIFdlJ2xsIGNvbWUgYmFjayBoZXJlIGxhdGVyIGFuZCBkZXRlY3QgaWYgdGhlIGZvbGlvIHdhc1xuLVx0XHRcdFx0XHQgKiBkaXJ0aWVkIHdoZW4gdGhlIGFkZGl0aW9uYWwgcmVmZXJlbmNlIGlzIGdvbmUuXG4tXHRcdFx0XHRcdCAqL1xuLVx0XHRcdFx0XHRzZXRfcHRlcyhtbSwgYWRkcmVzcywgcHZtdy5wdGUsIHB0ZXZhbCwgbnJfcGFnZXMpO1xuLVx0XHRcdFx0XHRnb3RvIHdhbGtfYWJvcnQ7XG4tXHRcdFx0XHR9XG4tXHRcdFx0XHRhZGRfbW1fY291bnRlcihtbSwgTU1fQU5PTlBBR0VTLCAtbnJfcGFnZXMpO1xuLVx0XHRcdFx0Z290byBkaXNjYXJkO1xuLVx0XHRcdH1cbi1cbi1cdFx0XHRpZiAoZm9saW9fZHVwX3N3YXAoZm9saW8sIHN1YnBhZ2UpIFx1MDAzYyAwKSB7XG4tXHRcdFx0XHRzZXRfcHRlX2F0KG1tLCBhZGRyZXNzLCBwdm13LnB0ZSwgcHRldmFsKTtcbi1cdFx0XHRcdGdvdG8gd2Fsa19hYm9ydDtcbi1cdFx0XHR9XG4tXG4tXHRcdFx0Lypcbi1cdFx0XHQgKiBhcmNoX3VubWFwX29uZSgpIGlzIGV4cGVjdGVkIHRvIGJlIGEgTk9QIG9uXG4tXHRcdFx0ICogYXJjaGl0ZWN0dXJlcyB3aGVyZSB3ZSBjb3VsZCBoYXZlIFBGTiBzd2FwIFBURXMsXG4tXHRcdFx0ICogc28gd2UnbGwgbm90IGNoZWNrL2NhcmUuXG4tXHRcdFx0ICovXG4tXHRcdFx0aWYgKGFyY2hfdW5tYXBfb25lKG1tLCB2bWEsIGFkZHJlc3MsIHB0ZXZhbCkgXHUwMDNjIDApIHtcbi1cdFx0XHRcdGZvbGlvX3B1dF9zd2FwKGZvbGlvLCBzdWJwYWdlKTtcbi1cdFx0XHRcdHNldF9wdGVfYXQobW0sIGFkZHJlc3MsIHB2bXcucHRlLCBwdGV2YWwpO1xuLVx0XHRcdFx0Z290byB3YWxrX2Fib3J0O1xuLVx0XHRcdH1cbi1cbi1cdFx0XHQvKiBTZWUgZm9saW9fdHJ5X3NoYXJlX2Fub25fcm1hcCgpOiBjbGVhciBQVEUgZmlyc3QuICovXG4tXHRcdFx0aWYgKGFub25fZXhjbHVzaXZlIFx1MDAyNlx1MDAyNlxuLVx0XHRcdCAgICBmb2xpb190cnlfc2hhcmVfYW5vbl9ybWFwX3B0ZShmb2xpbywgc3VicGFnZSkpIHtcbi1cdFx0XHRcdGZvbGlvX3B1dF9zd2FwKGZvbGlvLCBzdWJwYWdlKTtcbi1cdFx0XHRcdHNldF9wdGVfYXQobW0sIGFkZHJlc3MsIHB2bXcucHRlLCBwdGV2YWwpO1xuLVx0XHRcdFx0Z290byB3YWxrX2Fib3J0O1xuLVx0XHRcdH1cbi1cdFx0XHRtbV9wcmVwYXJlX2Zvcl9zd2FwX2VudHJpZXMobW0pO1xuLVx0XHRcdGRlY19tbV9jb3VudGVyKG1tLCBNTV9BTk9OUEFHRVMpO1xuLVx0XHRcdGluY19tbV9jb3VudGVyKG1tLCBNTV9TV0FQRU5UUyk7XG4tXHRcdFx0c3dwX3B0ZSA9IHN3cF9lbnRyeV90b19wdGUoZW50cnkpO1xuLVx0XHRcdGlmIChhbm9uX2V4Y2x1c2l2ZSlcbi1cdFx0XHRcdHN3cF9wdGUgPSBwdGVfc3dwX21rZXhjbHVzaXZlKHN3cF9wdGUpO1xuLVx0XHRcdGlmIChsaWtlbHkocHRlX3ByZXNlbnQocHRldmFsKSkpIHtcbi1cdFx0XHRcdGlmIChwdGVfc29mdF9kaXJ0eShwdGV2YWwpKVxuLVx0XHRcdFx0XHRzd3BfcHRlID0gcHRlX3N3cF9ta3NvZnRfZGlydHkoc3dwX3B0ZSk7XG4tXHRcdFx0XHRpZiAocHRlX3VmZmRfd3AocHRldmFsKSlcbi1cdFx0XHRcdFx0c3dwX3B0ZSA9IHB0ZV9zd3BfbWt1ZmZkX3dwKHN3cF9wdGUpO1xuLVx0XHRcdH0gZWxzZSB7XG4tXHRcdFx0XHRpZiAocHRlX3N3cF9zb2Z0X2RpcnR5KHB0ZXZhbCkpXG4tXHRcdFx0XHRcdHN3cF9wdGUgPSBwdGVfc3dwX21rc29mdF9kaXJ0eShzd3BfcHRlKTtcbi1cdFx0XHRcdGlmIChwdGVfc3dwX3VmZmRfd3AocHRldmFsKSlcbi1cdFx0XHRcdFx0c3dwX3B0ZSA9IHB0ZV9zd3BfbWt1ZmZkX3dwKHN3cF9wdGUpO1xuLVx0XHRcdH1cbi1cdFx0XHRzZXRfcHRlX2F0KG1tLCBhZGRyZXNzLCBwdm13LnB0ZSwgc3dwX3B0ZSk7XG4rXHRcdFx0Z290byBmaW5pc2hfdW5tYXA7XG4gXHRcdH0gZWxzZSB7XG4gXHRcdFx0LypcbiBcdFx0XHQgKiBUaGlzIGlzIGEgbG9ja2VkIGZpbGUtYmFja2VkIGZvbGlvLFxuQEAgLTIzNDAsMTIgKzI0MDQsOCBAQCBzdGF0aWMgYm9vbCB0cnlfdG9fdW5tYXBfb25lKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuIFx0XHRcdCAqL1xuIFx0XHRcdGFkZF9tbV9jb3VudGVyKG1tLCBtbV9jb3VudGVyX2ZpbGUoZm9saW8pLCAtbnJfcGFnZXMpO1xuIFx0XHR9XG4tZGlzY2FyZDpcbi1cdFx0aWYgKHVubGlrZWx5KGZvbGlvX3Rlc3RfaHVnZXRsYihmb2xpbykpKSB7XG4tXHRcdFx0aHVnZXRsYl9yZW1vdmVfcm1hcChmb2xpbyk7XG4tXHRcdH0gZWxzZSB7XG4tXHRcdFx0Zm9saW9fcmVtb3ZlX3JtYXBfcHRlcyhmb2xpbywgc3VicGFnZSwgbnJfcGFnZXMsIHZtYSk7XG4tXHRcdH1cbitmaW5pc2hfdW5tYXA6XG4rXHRcdGZvbGlvX3JlbW92ZV9ybWFwX3B0ZXMoZm9saW8sIHN1YnBhZ2UsIG5yX3BhZ2VzLCB2bWEpO1xuIFx0XHRpZiAodm1hLVx1MDAzZXZtX2ZsYWdzIFx1MDAyNiBWTV9MT0NLRUQpXG4gXHRcdFx0bWxvY2tfZHJhaW5fbG9jYWwoKTtcbiBcdFx0Zm9saW9fcHV0X3JlZnMoZm9saW8sIG5yX3BhZ2VzKTtcbkBAIC0yMzkzLDcgKzI0NTMsOCBAQCBzdGF0aWMgaW50IGZvbGlvX25vdF9tYXBwZWQoc3RydWN0IGZvbGlvICpmb2xpbylcbiB2b2lkIHRyeV90b191bm1hcChzdHJ1Y3QgZm9saW8gKmZvbGlvLCBlbnVtIHR0dV9mbGFncyBmbGFncylcbiB7XG4gXHRzdHJ1Y3Qgcm1hcF93YWxrX2NvbnRyb2wgcndjID0ge1xuLVx0XHQucm1hcF9vbmUgPSB0cnlfdG9fdW5tYXBfb25lLFxuK1x0XHQucm1hcF9vbmUgPSBmb2xpb190ZXN0X2h1Z2V0bGIoZm9saW8pID9cbitcdFx0XHRcdHRyeV90b191bm1hcF9odWdldGxiX29uZSA6IHRyeV90b191bm1hcF9vbmUsXG4gXHRcdC5hcmcgPSAodm9pZCAqKWZsYWdzLFxuIFx0XHQuZG9uZSA9IGZvbGlvX25vdF9tYXBwZWQsXG4gXHRcdC5hbm9uX2xvY2sgPSBmb2xpb19sb2NrX2Fub25fdm1hX3JlYWQsXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wN1QyMDozNzo0Ni44Nzc2MTExNTdaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2NjM3Mjc1MjE4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgYG1tL3JtYXAuY2AgUmVmYWN0b3JpbmcgZm9yIFBvdGVudGlhbCBWdWxuZXJhYmlsaXRpZXMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoLiBJdCdzIHRvdWNoaW5nIGBtbS9ybWFwLmNgIGFuZCBgaW5jbHVkZS9saW51eC9odWdldGxiLmhgLCB3aGljaCBpbW1lZGlhdGVseSBmbGFncyBzb21lIHNlcmlvdXMgYXR0ZW50aW9uLiBJdCBsb29rcyBsaWtlIHdlJ3JlIHJlZmFjdG9yaW5nIGB0cnlfdG9fdW5tYXBfb25lYCB0byBiZSBjbGVhbmVyLCBwdWxsaW5nIG91dCB0aGUgaHVnZXRsYi1zcGVjaWZpYyBzdHVmZiBpbnRvIGB0cnlfdG9fdW5tYXBfaHVnZXRsYl9vbmVgLCBhbmQgdGhlbiBoYW5kbGluZyBhbm9ueW1vdXMgZm9saW8gY2FzZXMgd2l0aCBhIGhhbmRmdWwgb2YgbmV3IGZ1bmN0aW9uczogYHR0dV9hbm9uX2ZvbGlvYCwgYHR0dV9hbm9uX2xhenlmcmVlX2ZvbGlvYCwgYW5kIGB0dHVfYW5vbl9zd2FwYmFja2VkX2ZvbGlvYC4gVGhlIG1haW4gYHRyeV90b191bm1hcGAgZnVuY3Rpb24gaXMgbm93IGNvbmRpdGlvbmFsbHkgY2FsbGluZyBgdHJ5X3RvX3VubWFwX2h1Z2V0bGJfb25lYCBpZiB0aGUgZm9saW8gaXMgYSBodWdldGxiIHBhZ2UuXG5cbkZ1bmN0aW9uYWxseSwgdGhpcyBzZWVtcyBsaWtlIG1vc3RseSBhIHJlZmFjdG9yaW5nLiBCdXQgbGV0J3MgYmUgaG9uZXN0LCBhbnkgY2hhbmdlIGluIHRoZXNlIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgYXJlYXMg4oCTIHJtYXAsIGh1Z2V0bGIsIHVubWFwcGluZyDigJMgd2FycmFudHMgYSAqdmVyeSogY2xvc2UgbG9vay4gVGhlc2UgYXJlIGNyaXRpY2FsIHBhdGhzLCBhbmQgc3VidGxlIGVycm9ycyBjYW4gaGF2ZSBkZXZhc3RhdGluZyBjb25zZXF1ZW5jZXMuIE15IHByaW1hcnkgY29uY2VybiBoZXJlIGlzIHRoYXQgdGhpcyBraW5kIG9mIHJlZmFjdG9yaW5nIGlzIHByb25lIHRvIGludHJvZHVjaW5nIG9mZi1ieS1vbmUgZXJyb3JzLCBpbmNvcnJlY3QgbG9ja2luZywgb3Igb3RoZXIgc3VidGxlIGJ1Z3MgZHVlIHRvIHRoZSBjb21wbGV4aXR5IGludm9sdmVkLlxuXG5TbywgSSBuZWVkIHRvIGZvY3VzIG15IGZ1enppbmcgZWZmb3J0cy4gVGhlIGtleSBmdW5jdGlvbnMgdG8gdGFyZ2V0IGFyZTpcblxuKiAgIGB0cnlfdG9fdW5tYXBfaHVnZXRsYl9vbmVgIC0gVGhpcyBpcyBub3cgaGFuZGxpbmcgdGhlIGh1Z2V0bGIgc3BlY2lmaWMgbG9naWMsIHdoaWNoLCBkdWUgdG8gdGhlaXIgc2l6ZSwgaW50cm9kdWNlIGNvbXBsZXhpdGllcyB0aGF0IG1heSBub3QgYmUgYXBwYXJlbnQgaW4gZ2VuZXJhbCBmb2xpbyBwYWdlcy5cbiogICBgdHR1X2Fub25fZm9saW9gIC0gVGhpcyBpcyBub3cgaGFuZGxpbmcgZ2VuZXJhbCBhbm9ueW1vdXMgZm9saW9zLlxuKiAgIGB0dHVfYW5vbl9sYXp5ZnJlZV9mb2xpb2AgLSBUaGlzIGlzIG5vdyBoYW5kbGluZyBhbm9ueW1vdXMgbGF6eS1mcmVlIGZvbGlvcy5cbiogICBgdHR1X2Fub25fc3dhcGJhY2tlZF9mb2xpb2AgLSBUaGlzIGlzIG5vdyBoYW5kbGluZyBhbm9ueW1vdXMgZm9saW9zIHRoYXQgaGF2ZSBzd2FwIGJhY2tpbmcuXG4qICAgYHRyeV90b191bm1hcGAgLSBUaGUgbWFpbiBlbnRyeSBwb2ludCwgYW5kIHRoZSBmdW5jdGlvbiB3aGVyZSB0aGUgY29udHJvbCBmbG93IGJyYW5jaGVzLlxuXG5BbmQgb2YgY291cnNlLCBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoZSBmdXp6aW5nIGVudmlyb25tZW50IGlzIGFwcHJvcHJpYXRlbHkgY29uZmlndXJlZC4gV2UnbGwgbmVlZCB0byBlbmFibGUgYEhVR0VUTEJfUEFHRWAsIG9mIGNvdXJzZSwgZm9yIGh1Z2V0bGIgdGVzdGluZy4gVGhlIHByZXNlbmNlIG9mIHN3YXAtYmFja2VkIGZvbGlvcyBjYWxscyBmb3IgdGhlIGBTV0FQYCBjb25maWcgdG8gYmUgZW5hYmxlZC4gQW5kIHNpbmNlIHRoZXJlJ3Mgc29tZSBtZW50aW9uIG9mIGBUVFVfSFdQT0lTT05gIGxvZ2ljIHdpdGhpbiwgSSBuZWVkIHRvIGhhdmUgZWl0aGVyIGBIV1BPSVNPTl9JTkpFQ1RgIG9yIGBNRU1PUllfRkFJTFVSRWAgZW5hYmxlZC5cblxuUmlnaHQuIFRpbWUgdG8gdmVyaWZ5IHRob3NlIGNvbmZpZ3MgYW5kIHN0YXJ0IGRpZ2dpbmcgaW50byB0aGUgY29kZS5cblxuXG4iLCJJbnB1dFRva2VucyI6ODM1MiwiT3V0cHV0VG9rZW5zIjoyNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMxNCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA3VDIwOjM3OjUzLjUxNDg4ODI5NVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNjA4NjU0OTI3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInRyeV90b191bm1hcF9odWdldGxiX29uZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9ybWFwLmM9MTk0ND1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBmb2xpb191bm1hcF9wdGVfYmF0Y2goc3RydWN0IGZvbGlvICpmb2xpbyxcXG4tLVxcbm1tL3JtYXAuYy0xOTgwLVxcbm1tL3JtYXAuYzoxOTgxOnN0YXRpYyBib29sIHRyeV90b191bm1hcF9odWdldGxiX29uZShzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbm1tL3JtYXAuYy0xOTgyLVxcdFxcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MsIHZvaWQgKmFyZylcXG4tLVxcbm1tL3JtYXAuYz0yNDUzPXZvaWQgdHJ5X3RvX3VubWFwKHN0cnVjdCBmb2xpbyAqZm9saW8sIGVudW0gdHR1X2ZsYWdzIGZsYWdzKVxcbi0tXFxubW0vcm1hcC5jLTI0NTYtXFx0XFx0LnJtYXBfb25lID0gZm9saW9fdGVzdF9odWdldGxiKGZvbGlvKSA/XFxubW0vcm1hcC5jOjI0NTc6XFx0XFx0XFx0XFx0dHJ5X3RvX3VubWFwX2h1Z2V0bGJfb25lIDogdHJ5X3RvX3VubWFwX29uZSxcXG5tbS9ybWFwLmMtMjQ1OC1cXHRcXHQuYXJnID0gKHZvaWQgKilmbGFncyxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDdUMjA6Mzc6NTYuMTIzNTUwNzMyWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDQwMTUwNDM5OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2Vzcywgc3VtbWFyaXplZCBhcyB5b3UgcmVxdWVzdGVkOlxuXG4qKktjb25maWcgYW5kIEh1Z2UgUGFnZXM6IEEgUXVpY2sgQ2hlY2sqKlxuXG5Pa2F5LCBiZWZvcmUgZGl2aW5nIGFueSBkZWVwZXIsIEkgbmVlZCB0byBtYWtlIGFic29sdXRlbHkgc3VyZSB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24gZm9yIEh1Z2VUTEIgcGFnZXMgaXMgcHJvcGVybHkgc2V0LiBJdCdzIGVhc3kgdG8gb3Zlcmxvb2ssIGFuZCBhIG1pc2NvbmZpZ3VyYXRpb24gaGVyZSB3b3VsZCB0aHJvdyBldmVyeXRoaW5nIG9mZi4gU28sIEkgbmVlZCB0byBvcGVuIHRoZSBgS2NvbmZpZ2AgZmlsZXMgYW5kIHNlYXJjaCBmb3IgYEhVR0VUTEJfUEFHRWAuIFRoYXQncyB0aGUgYmFzZWxpbmUuIEkgbmVlZCB0byB2ZXJpZnkgaXRzIHN0YXR1cyAtIGlzIGl0IGVuYWJsZWQsIGRpc2FibGVkLCBvciBzZXQgdG8gc29tZSBzcGVjaWZpYyB2YWx1ZT8gQSBxdWljayBzY2FuIG9mIHRoZSByZWxldmFudCBLY29uZmlnIG9wdGlvbnMgd2lsbCBpbW1lZGlhdGVseSB0ZWxsIG1lIGlmIEknbSBldmVuICphYmxlKiB0byB3b3JrIHdpdGggaHVnZXRsYmZzLiBUaGlzIGlzIGp1c3QgYSBzYW5pdHkgY2hlY2s7IGRvbid0IHdhc3RlIHRpbWUgb24gYW55dGhpbmcgZWxzZSB5ZXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk0OTEsIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wN1QyMDozODowMC41MjUwNTcwNjFaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjE3OTExMzIwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgSFVHRVRMQl9QQUdFXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvc2gvbW0vS2NvbmZpZz0xNTg9Y2hvaWNlXFxuLS1cXG5hcmNoL3NoL21tL0tjb25maWctMTYzLVxcbmFyY2gvc2gvbW0vS2NvbmZpZzoxNjQ6Y29uZmlnIEhVR0VUTEJfUEFHRV9TSVpFXzY0S1xcbmFyY2gvc2gvbW0vS2NvbmZpZy0xNjUtXFx0Ym9vbCBcXFwiNjRrQlxcXCJcXG4tLVxcbmFyY2gvc2gvbW0vS2NvbmZpZy0xNjctXFxuYXJjaC9zaC9tbS9LY29uZmlnOjE2ODpjb25maWcgSFVHRVRMQl9QQUdFX1NJWkVfMjU2S1xcbmFyY2gvc2gvbW0vS2NvbmZpZy0xNjktXFx0Ym9vbCBcXFwiMjU2a0JcXFwiXFxuLS1cXG5hcmNoL3NoL21tL0tjb25maWctMTcxLVxcbmFyY2gvc2gvbW0vS2NvbmZpZzoxNzI6Y29uZmlnIEhVR0VUTEJfUEFHRV9TSVpFXzFNQlxcbmFyY2gvc2gvbW0vS2NvbmZpZy0xNzMtXFx0Ym9vbCBcXFwiMU1CXFxcIlxcbmFyY2gvc2gvbW0vS2NvbmZpZy0xNzQtXFxuYXJjaC9zaC9tbS9LY29uZmlnOjE3NTpjb25maWcgSFVHRVRMQl9QQUdFX1NJWkVfNE1CXFxuYXJjaC9zaC9tbS9LY29uZmlnLTE3Ni1cXHRib29sIFxcXCI0TUJcXFwiXFxuLS1cXG5hcmNoL3NoL21tL0tjb25maWctMTc4LVxcbmFyY2gvc2gvbW0vS2NvbmZpZzoxNzk6Y29uZmlnIEhVR0VUTEJfUEFHRV9TSVpFXzY0TUJcXG5hcmNoL3NoL21tL0tjb25maWctMTgwLVxcdGJvb2wgXFxcIjY0TUJcXFwiXFxuLS1cXG5mcy9LY29uZmlnPTI2Mj1pZiBIVUdFVExCRlNcXG5mcy9LY29uZmlnOjI2Mzpjb25maWcgSFVHRVRMQl9QQUdFX09QVElNSVpFX1ZNRU1NQVBfREVGQVVMVF9PTlxcbmZzL0tjb25maWctMjY0LVxcdGJvb2wgXFxcIkh1Z2VUTEIgVm1lbW1hcCBPcHRpbWl6YXRpb24gKEhWTykgZGVmYXVsdHMgdG8gb25cXFwiXFxuLS1cXG5mcy9LY29uZmlnPTI3MT1lbmRpZiAjIEhVR0VUTEJGU1xcbmZzL0tjb25maWctMjcyLVxcbmZzL0tjb25maWc6MjczOmNvbmZpZyBIVUdFVExCX1BBR0VcXG5mcy9LY29uZmlnLTI3NC1cXHRkZWZfYm9vbCBIVUdFVExCRlNcXG4tLVxcbmZzL0tjb25maWctMjc2LVxcbmZzL0tjb25maWc6Mjc3OmNvbmZpZyBIVUdFVExCX1BBR0VfT1BUSU1JWkVfVk1FTU1BUFxcbmZzL0tjb25maWctMjc4LVxcdGRlZl9ib29sIEhVR0VUTEJfUEFHRVxcbi0tXFxubW0vS2NvbmZpZz03MDY9Y29uZmlnIEFSQ0hfSEFTX1BNRF9TT0ZUTEVBVkVTXFxuLS1cXG5tbS9LY29uZmlnLTcwOC1cXG5tbS9LY29uZmlnOjcwOTpjb25maWcgSFVHRVRMQl9QQUdFX1NJWkVfVkFSSUFCTEVcXG5tbS9LY29uZmlnLTcxMC1cXHRkZWZfYm9vbCBuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA3VDIwOjM4OjAyLjcwNDE3NTYyWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjY0MDY0MjM3NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBwcmVzZW50ZWQgYXMgbXkgb3duIG1lbnRhbCBwcm9jZXNzLCBnaXZlbiBteSBleHBlcnRpc2U6XG5cbioqRGl2aW5nIGludG8gdGhlIEh1Z2VUTEIgQ29uZmlndXJhdGlvbioqXG5cbkFscmlnaHQsIHNvIGBIVUdFVExCX1BBR0VgIGlzIHRoZSB0YXJnZXQgaGVyZS4gVGhhdCdzIGEgZ29vZCBzdGFydGluZyBwb2ludCBmb3IgaW52ZXN0aWdhdGluZyB0aGUgaHVnZSBwYWdlIHN1cHBvcnQuIEFuZCB0aGUgS2NvbmZpZyBlbnRyeSBtZW50aW9ucyBhIGRlcGVuZGVuY3k6IGBIVUdFVExCRlNgLiBSaWdodCwgc28gdGhpcyBjb25maXJtcyB0aGUgZGVwZW5kZW5jeS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBgSFVHRVRMQkZTYCBjb21wb25lbnQgdG8gZnVsbHkgZ3Jhc3AgdGhlIGNhcGFiaWxpdGllcyBvZiBgSFVHRVRMQl9QQUdFYC4gTGV0IG1lIHF1aWNrbHkgc2hpZnQgbXkgZm9jdXMgYW5kIHN0YXJ0IGxvb2tpbmcgaW50byB0aGUgZGV0YWlscyBvZiB3aGF0IGBIVUdFVExCRlNgIGJyaW5ncyB0byB0aGUgdGFibGUuIFRpbWUgdG8gZGlnIGRlZXBlciBpbnRvIHRoZSBmaWxlIHN5c3RlbSBzaWRlIG9mIHRoaXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwMjgyLCJPdXRwdXRUb2tlbnMiOjE5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDdUMjA6Mzg6MDUuMzQ0ODE5NzQ3WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5MTQyNjM4MjEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEhVR0VUTEJGU1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9LY29uZmlnPTI0Nz1jb25maWcgQVJDSF9TVVBQT1JUU19IVUdFVExCRlNcXG4tLVxcbmZzL0tjb25maWctMjQ5LVxcbmZzL0tjb25maWc6MjUwOm1lbnVjb25maWcgSFVHRVRMQkZTXFxuZnMvS2NvbmZpZy0yNTEtXFx0Ym9vbCBcXFwiSHVnZVRMQiBmaWxlIHN5c3RlbSBzdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wN1QyMDozODowNy4yNTkwODg0NThaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMDgxNTIzNzQ1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIHByZXNlbnRlZCBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKktlcm5lbCBDb25maWd1cmF0aW9uIERlZXAgRGl2ZSoqXG5cbkFscmlnaHQsIHNvIEknbSBkaXZpbmcgaW50byB0aGlzIGtlcm5lbCBjb25maWd1cmF0aW9uLCBhbmQgdGhlIGtleSB0aGluZyBJJ20gaW1tZWRpYXRlbHkgaG9taW5nIGluIG9uIGlzIGBIVUdFVExCRlNgLiBUaGF0J3MgdGhlIG9uZSBJIG5lZWQgdG8gZW5hYmxlIGZvciB0aGUgdXNlIGNhc2Ugd2UncmUgY29uc2lkZXJpbmcsIG5vIGRvdWJ0LiBOb3csIGJlZm9yZSBJIHByb2NlZWQgd2l0aCBhbnkgbW9yZSBvZiB0aGVzZSBjaGFuZ2VzLCBsZXQncyBqdXN0IGRvIGEgcXVpY2sgZG91YmxlLWNoZWNrIG9mIHNvbWV0aGluZyByZWxhdGVkLCB0byBlbnN1cmUgd2UgYXJlIGNvdmVyaW5nIHRoZSBiYXNlcy4gTGV0J3MgbWFrZSBzdXJlIHRoYXQgYE1FTU9SWV9GQUlMVVJFYCBpcyBzZXQgdG8gdGhlIGNvcnJlY3QgdmFsdWUsIHNpbmNlIHRoYXQgaGFzIGltcGxpY2F0aW9ucyBmb3IgdGhlIG92ZXJhbGwgbWVtb3J5IG1hbmFnZW1lbnQgc3RyYXRlZ3ksIGFuZCBob3cgaXQgd2lsbCBpbnRlcmFjdCB3aXRoIHRoaXMgbmV3IHNldHVwLiBKdXN0IHdhbnQgdG8gbWFrZSBzdXJlIHRoZSBpbnRlcmFjdGlvbnMgYXJlIGFzIGV4cGVjdGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDU2MCwiT3V0cHV0VG9rZW5zIjoxOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA3VDIwOjM4OjEwLjM0MDYxNDY0M1oiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjI1NDYxMDQyOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTUVNT1JZX0ZBSUxVUkVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vS2NvbmZpZz03NzQ9Y29uZmlnIEFSQ0hfU1VQUE9SVFNfTUVNT1JZX0ZBSUxVUkVcXG4tLVxcbm1tL0tjb25maWctNzc2LVxcbm1tL0tjb25maWc6Nzc3OmNvbmZpZyBNRU1PUllfRkFJTFVSRVxcbm1tL0tjb25maWctNzc4LVxcdGRlcGVuZHMgb24gTU1VXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA3VDIwOjM4OjEyLjU5NTIzMTQ1MloiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyOTA1NjE3MjI2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgcHJlc2VudGVkIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqRGVlcCBEaXZlIG9uIGBIV1BPSVNPTl9JTkpFQ1RgKipcblxuQWxyaWdodCwgdGltZSB0byBjaXJjbGUgYmFjayBhbmQgZ2l2ZSBgSFdQT0lTT05fSU5KRUNUYCBhIHByb3BlciBvbmNlLW92ZXIuIFRoaXMgbGlrZWx5IG1lYW5zIEknbSBsb29raW5nIGZvciBhIHBhcnRpY3VsYXIgaW50ZXJhY3Rpb24gb3IgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdHkgcmVsYXRlZCB0byBoYXJkd2FyZS1iYXNlZCBtZW1vcnkgY29ycnVwdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBzcGVjaWZpYyBwb2lzb24gdmFsdWVzIGFyZSBiZWluZyBpbnRyb2R1Y2VkLCBob3cgdGhleSBhcmUgYmVpbmcgaW5qZWN0ZWQsIGFuZCB0aGUgY29uZGl0aW9ucyB1bmRlciB3aGljaCB0aGlzIGluamVjdGlvbiBpcyBvY2N1cnJpbmcuIEknbGwgbmVlZCB0byB0aGluayB0aHJvdWdoIHRoZSBwb3NzaWJsZSBpbXBhY3QsIG1heWJlIGNvbnNpZGVyaW5nIGhvdyB0aGlzIHJlbGF0ZXMgdG8gbWl0aWdhdGlvbiB0ZWNobmlxdWVzIGxpa2UgbWVtb3J5IHRhZ2dpbmcgb3IgZXJyb3ItY29ycmVjdGluZyBjb2RlcywgYW5kIGhvdyB0aGlzIGZlYXR1cmUgbWlnaHQgaW50ZXJhY3Qgd2l0aCBvdGhlciBoYXJkd2FyZSBmZWF0dXJlcyBvciBzb2Z0d2FyZSBzdWJzeXN0ZW1zLiBJIG5lZWQgdG8gYXNzZXNzIHRoZSBzY29wZSBvZiB0aGlzIHBvaXNvbmluZyBhbmQgcG90ZW50aWFsIGltcGFjdCBvbiBzeXN0ZW0gc3RhYmlsaXR5LCBzZWN1cml0eSwgb3IgZGF0YSBpbnRlZ3JpdHkuIFVsdGltYXRlbHksIEknbSB0cnlpbmcgdG8gZGV0ZXJtaW5lIGlmIHRoZXJlJ3MgYW55IGFyZWEgdGhhdCBuZWVkcyBkZWVwZXIgYW5hbHlzaXMgb3IgaW1tZWRpYXRlIGF0dGVudGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA4NDMsIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wN1QyMDozODoxNS41MDA4NTA5MzdaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5OTY5NjkyNjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEhXUE9JU09OX0lOSkVDVFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9LY29uZmlnPTc3Nz1jb25maWcgTUVNT1JZX0ZBSUxVUkVcXG4tLVxcbm1tL0tjb25maWctNzg3LVxcbm1tL0tjb25maWc6Nzg4OmNvbmZpZyBIV1BPSVNPTl9JTkpFQ1RcXG5tbS9LY29uZmlnLTc4OS1cXHR0cmlzdGF0ZSBcXFwiSFdQb2lzb24gcGFnZXMgaW5qZWN0b3JcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA3VDIwOjM4OjE3LjQ5NzgyNDU5OFoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyNzIyODIxNjA3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczpcblxuKipFbmFibGluZyBSb2J1c3QgSGFyZHdhcmUgUG9pc29uIFRlc3RpbmcqKlxuXG5Pa2F5LCBzbyBJJ20gdGhpbmtpbmcsIHRvIHJlYWxseSBnaXZlIHRoZSBoYXJkd2FyZSBwb2lzb24gbG9naWMgYSB3b3Jrb3V0LCBJIHNob3VsZCBkZWZpbml0ZWx5IGVuYWJsZSBib3RoIGBNRU1PUllfRkFJTFVSRWAgYW5kIGBIV1BPSVNPTl9JTkpFQ1RgLiBUaGF0IGNvbWJpbmF0aW9uIHNob3VsZCBwcm92aWRlIGEgc29saWQgcGxhdGZvcm0gZm9yIHRlc3RpbmcuIEFuZCwgb2YgY291cnNlLCBJJ2xsIG5lZWQgYFNXQVBgIGVuYWJsZWQsIHNpbmNlIHRoZSBgdHR1X2Fub25fc3dhcGJhY2tlZF9mb2xpb2AgdGVzdCByZWxpZXMgb24gaXQuIE1ha2VzIHNlbnNlLiBOZWVkIHRoZSBiYXNpY3MgdG8gd29yayBvbiB0aGUgc3BlY2lmaWNzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTE1MSwiT3V0cHV0VG9rZW5zIjoxNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA3VDIwOjM4OjIwLjIyMDY0ODIxNVoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTkxNTg4Njk0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgU1dBUFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL21pcHMvS2NvbmZpZz0xMjYzPWNvbmZpZyBNSVBTX1NQUkFNXFxuLS1cXG5hcmNoL21pcHMvS2NvbmZpZy0xMjY1LVxcbmFyY2gvbWlwcy9LY29uZmlnOjEyNjY6Y29uZmlnIFNXQVBfSU9fU1BBQ0VcXG5hcmNoL21pcHMvS2NvbmZpZy0xMjY3LVxcdGJvb2xcXG4tLVxcbmFyY2gvc2gvS2NvbmZpZz0xMjk9Y29uZmlnIElPX1RSQVBQRURcXG4tLVxcbmFyY2gvc2gvS2NvbmZpZy0xMzEtXFxuYXJjaC9zaC9LY29uZmlnOjEzMjpjb25maWcgU1dBUF9JT19TUEFDRVxcbmFyY2gvc2gvS2NvbmZpZy0xMzMtXFx0Ym9vbFxcbi0tXFxubW0vS2NvbmZpZz05PWNvbmZpZyBBUkNIX05PX1NXQVBcXG4tLVxcbm1tL0tjb25maWctMTEtXFxubW0vS2NvbmZpZzoxMjptZW51Y29uZmlnIFNXQVBcXG5tbS9LY29uZmlnLTEzLVxcdGJvb2wgXFxcIlN1cHBvcnQgZm9yIHBhZ2luZyBvZiBhbm9ueW1vdXMgbWVtb3J5IChzd2FwKVxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDdUMjA6Mzg6MjIuMTM2NTQwNTk1WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUyNjE3NTgxMzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIFVubWFwcGluZyBGdW5jdGlvbnMgZm9yIEZ1enppbmcgUG90ZW50aWFsKipcblxuT2theSwgc28gdGhlIGBTV0FQYCBtZWNoYW5pc20gbG9va3MgbGlrZSBhIHByb21pc2luZyBhdmVudWUgZm9yIGV4cGxvcmF0aW9uLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gaWRlbnRpZnkgdGhlIGtleSBmdW5jdGlvbnMgcmVsYXRlZCB0byBtZW1vcnkgdW5tYXBwaW5nLCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBjb250ZXh0IG9mIGh1Z2V0bGJmcyBhbmQgYW5vbnltb3VzIHBhZ2VzLCB3aXRoIHRoZSBhaW0gb2YgcG90ZW50aWFsbHkgdGFyZ2V0aW5nIHRoZW0gd2l0aCBmdXp6aW5nLlxuXG5JIG5lZWQgdG8gbmFpbCBkb3duIHRoZSBjb3JlIGZ1bmN0aW9ucy4gTGV0J3Mgc2VlLi4uIHRoZSBvbmVzIHRoYXQgY29tZSB0byBtaW5kIGFyZTogYHRyeV90b191bm1hcF9odWdldGxiX29uZWAsIGB0dHVfYW5vbl9mb2xpb2AsIGB0dHVfYW5vbl9sYXp5ZnJlZV9mb2xpb2AsIGFuZCBgdHR1X2Fub25fc3dhcGJhY2tlZF9mb2xpb2AuIEFsbCBvZiB0aG9zZSBhcmUgc3RhdGljIGFuZCBuZXN0bGVkIHdpdGhpbiBgbW0vcm1hcC5jYCwgZXhjZXB0IGZvciBgdHJ5X3RvX3VubWFwX2h1Z2V0bGJfb25lYCwgYnV0IGEgcXVpY2sgY2hlY2sgcmV2ZWFscyB0aGF0IGl0J3MgYWxzbyBzdGF0aWMuIEhhbmcgb24sIGlzbid0IGB0cnlfdG9fdW5tYXBgIGV4cG9ydGVkPyBZZXMsIGl0IGlzIVxuXG5Ob3csIHRoZSBpbXBvcnRhbnQgcXVlc3Rpb246IENhbiBTeXprYWxsZXIgZWZmZWN0aXZlbHkgdGFyZ2V0ICpzdGF0aWMqIGZ1bmN0aW9ucyBmb3IgZnV6emluZz8gTXkgdW5kZXJzdGFuZGluZyBpcyB0aGF0IHdoaWxlIFN5emthbGxlciBwcmltYXJpbHkgdGFyZ2V0cyBzeXNjYWxscywgaXQgdXNlcyBmdW5jdGlvbiBuYW1lcyBmb3IgY292ZXJhZ2UgZ3VpZGFuY2UgYW5kIHBvdGVudGlhbCBjb250cm9sLiBUaGVzZSBzdGF0aWMgZnVuY3Rpb25zIGFyZSBjYW5kaWRhdGVzIGZvciBgRm9jdXNTeW1ib2xzYCwgYWN0aW5nIGFzIHVzZWZ1bCBmaWx0ZXJzIG9yIGd1aWRlcyBmb3IgdGhlIGZ1enplci4gSXQgbG9va3MgbGlrZSBzdGF0aWMgZnVuY3Rpb25zIGFyZSBwZXJmZWN0bHkgZmluZSBmb3IgdGhpcyBraW5kIG9mIGd1aWRhbmNlLlxuXG5JIHNob3VsZCBwcm9iYWJseSBjb25maXJtIGJ5IGV4YW1pbmluZyBgdHJ5X3RvX3VubWFwX2h1Z2V0bGJfb25lYCBpbiBgbW0vcm1hcC5jYCBpdHNlbGYuIEp1c3QgdG8gYmUgc3VyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE1NDUsIk91dHB1dFRva2VucyI6MjYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMjYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDdUMjA6Mzg6MjcuMzk4MzAyNDNaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5NDI3ODE0NTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidHJ5X3RvX3VubWFwX2h1Z2V0bGJfb25lXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3JtYXAuYz0xOTQ0PXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGZvbGlvX3VubWFwX3B0ZV9iYXRjaChzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbi0tXFxubW0vcm1hcC5jLTE5ODAtXFxubW0vcm1hcC5jOjE5ODE6c3RhdGljIGJvb2wgdHJ5X3RvX3VubWFwX2h1Z2V0bGJfb25lKHN0cnVjdCBmb2xpbyAqZm9saW8sXFxubW0vcm1hcC5jLTE5ODItXFx0XFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcywgdm9pZCAqYXJnKVxcbi0tXFxubW0vcm1hcC5jPTI0NTM9dm9pZCB0cnlfdG9fdW5tYXAoc3RydWN0IGZvbGlvICpmb2xpbywgZW51bSB0dHVfZmxhZ3MgZmxhZ3MpXFxuLS1cXG5tbS9ybWFwLmMtMjQ1Ni1cXHRcXHQucm1hcF9vbmUgPSBmb2xpb190ZXN0X2h1Z2V0bGIoZm9saW8pID9cXG5tbS9ybWFwLmM6MjQ1NzpcXHRcXHRcXHRcXHR0cnlfdG9fdW5tYXBfaHVnZXRsYl9vbmUgOiB0cnlfdG9fdW5tYXBfb25lLFxcbm1tL3JtYXAuYy0yNDU4LVxcdFxcdC5hcmcgPSAodm9pZCAqKWZsYWdzLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wN1QyMDozODoyOS4zNDEwOTA0MloiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyNDg1MTM3NDY4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgc3VtbWFyeSwgY29uc2lkZXJpbmcgbXkgZXhwZXJ0aXNlOlxuXG4qKk15IEluaXRpYWwgQXNzZXNzbWVudCBhbmQgTmV4dCBTdGVwcyoqXG5cblJpZ2h0LCBpbml0aWFsIGltcHJlc3Npb24gaXMgdGhhdCB0aGUgc2l0dWF0aW9uIGlzLi4uIHdlbGwsICpzdGF0aWMqLiBOb3RoaW5nJ3MgbW92aW5nLCBub3RoaW5nJ3MgZHluYW1pY2FsbHkgY2hhbmdpbmcsIGFuZCB0aGF0J3Mgbm90IHdoYXQgSSB3YXMgZXhwZWN0aW5nLiBCYXNlZCBvbiB0aGlzLCBJIG5lZWQgdG8gaW52ZXN0aWdhdGUgZnVydGhlci4gSXQncyB0aW1lIHRvIGRpdmUgaW50byB0aGUgZGF0YS4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gY2hlY2sgb3V0IGB0dHVfYW5vbl9mb2xpb2AuIFRoYXQncyB0aGUgbG9naWNhbCBuZXh0IHBvaW50IG9mIGlucXVpcnksIGdpdmVuIHRoaXMgaW5pdGlhbCBzdGF0aWMgYXNzZXNzbWVudC4gSXQgc2hvdWxkIG9mZmVyIHNvbWUgc3BlY2lmaWMgZGV0YWlscyB0aGF0IGVpdGhlciBjb25maXJtIHRoZSBjdXJyZW50IHN0YXRlLCBvciBoZWxwIHRvIHNlZSB3aGF0IGZhY3RvcnMgYXJlIGNhdXNpbmcgdGhpcyBcInN0aWxsXCIgc3RhdGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyMzUyLCJPdXRwdXRUb2tlbnMiOjE5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDdUMjA6Mzg6MzEuODI2MjMwNjA4WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTIwMzc2ODMxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInR0dV9hbm9uX2ZvbGlvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3JtYXAuYz0yMTQwPXN0YXRpYyBpbmxpbmUgYm9vbCB0dHVfYW5vbl9zd2FwYmFja2VkX2ZvbGlvKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbi0tXFxubW0vcm1hcC5jLTIxNzMtXFxubW0vcm1hcC5jOjIxNzQ6c3RhdGljIGlubGluZSBib29sIHR0dV9hbm9uX2ZvbGlvKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbm1tL3JtYXAuYy0yMTc1LVxcdFxcdHN0cnVjdCBwYWdlICpzdWJwYWdlLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MsIHB0ZV90ICpwdGVwLFxcbi0tXFxubW0vcm1hcC5jPTIyMTE9c3RhdGljIGJvb2wgdHJ5X3RvX3VubWFwX29uZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4tLVxcbm1tL3JtYXAuYy0yMzg3LVxcdFxcdH0gZWxzZSBpZiAoZm9saW9fdGVzdF9hbm9uKGZvbGlvKSkge1xcbm1tL3JtYXAuYzoyMzg4OlxcdFxcdFxcdGlmICghdHR1X2Fub25fZm9saW8odm1hLCBmb2xpbywgc3VicGFnZSwgYWRkcmVzcyxcXG5tbS9ybWFwLmMtMjM4OS1cXHRcXHRcXHRcXHRcXHQgICAgcHZtdy5wdGUsIHB0ZXZhbCwgbnJfcGFnZXMpKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wN1QyMDozODozMy43NDY2MTgzOTlaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTA3Nzg0NzA4NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFVubWFwcGluZyBMb2dpYyBSZWZhY3RvcioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGl0J3MgZGVhbGluZyB3aXRoIHRoZSB1bm1hcHBpbmcgbG9naWMgaW4gYG1tL3JtYXAuY2AuIFRoZSBjb3JlIG9mIGl0IHNlZW1zIHRvIGJlIGV4dHJhY3RpbmcgaHVnZXRsYiBhbmQgYW5vbnltb3VzIGZvbGlvIHVubWFwcGluZyBpbnRvIHNwZWNpZmljIGZ1bmN0aW9ucy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBTeXprYWxsZXIgaXMgZm9jdXNlZCBvbiB0aGUgcmlnaHQgc3ltYm9scyB0byBjYXRjaCBhbnkgcmVncmVzc2lvbnMuXG5cblJpZ2h0LCB0aGUgZnVuY3Rpb25zLi4uIExldCdzIHNlZS4gYHRyeV90b191bm1hcF9odWdldGxiX29uZWAgaXMgbm90IGlubGluZSwgc28gaXQgKnNob3VsZCogYXBwZWFyIGFzIGEgc3ltYm9sLCBlYXN5LiBUaGVuIGB0dHVfYW5vbl9sYXp5ZnJlZV9mb2xpb2AgYW5kIGB0dHVfYW5vbl9zd2FwYmFja2VkX2ZvbGlvYCBhcmUgYHN0YXRpYyBpbmxpbmVgLiBJdCdzIGZpbmUgdG8gaW5jbHVkZSBzdGF0aWMgaW5saW5lIGZ1bmN0aW9ucywgU3l6a2FsbGVyICpjYW4qIGhhbmRsZSB0aG9zZSBpZiB3ZSBoYXZlIGRlYnVnIGluZm8uIE5vdywgbGV0IG1lIGNoZWNrIHRoZSBub24taW5saW5lIGZ1bmN0aW9ucywgYHRyeV90b191bm1hcGAgaXMgZ2xvYmFsLCB3aGljaCBpcyBhbHNvIGVhc3kuIGB0cnlfdG9fdW5tYXBfb25lYCBpcyBzdGF0aWMuXG5cbkFscmlnaHQsIHNvIG15IGxpc3Qgb2YgZnVuY3Rpb25zIHRvIGluY2x1ZGUgaW4gYEZvY3VzU3ltYm9sc2AgaXMgZ29pbmcgdG8gYmU6XG4tIGB0cnlfdG9fdW5tYXBfaHVnZXRsYl9vbmVgXG4tIGB0dHVfYW5vbl9mb2xpb2Bcbi0gYHR0dV9hbm9uX2xhenlmcmVlX2ZvbGlvYFxuLSBgdHR1X2Fub25fc3dhcGJhY2tlZF9mb2xpb2Bcbi0gYHRyeV90b191bm1hcF9vbmVgXG5cblRoYXQgc2hvdWxkIGNvdmVyIHRoZSBjb3JlIGNoYW5nZXMgcmVsYXRlZCB0byB0aGUgZm9saW8gdW5tYXBwaW5nIGxvZ2ljLiBUaGUgcGF0Y2ggbWVudGlvbnMgcmV2ZXJzZSBtYXBwaW5nLCBodWdlIHBhZ2VzLCBhbmQgc3dhcCwgc28gdGhlIGZ1enppbmcgc2hvdWxkIHRhcmdldCB0aG9zZSBhcmVhcy5cblxuTm93LCBsZXQncyBsb29rIGF0IHRoZSBjb25maWdzIHRoYXQgYXJlIHJlbGV2YW50LiBJIGNhbiBzZWUgdGhlIHBhdGNoIHVzZXMgYEhVR0VUTEJGU2AsIGBTV0FQYCwgYE1FTU9SWV9GQUlMVVJFYCwgYW5kIGBIV1BPSVNPTl9JTkpFQ1RgLiBUaGUgbmV3IGxvZ2ljIGludGVyYWN0cyB3aXRoIG1lbW9yeSBmYWlsdXJlLCBhbmQgdGhlIGh3cG9pc29uIHRlc3RpbmcsIGFuZCBhbm9ueW1vdXMgbWVtb3J5IGFuZCBodWdldGxiLlxuXG5JIG5lZWQgdG8gbWFrZSBzdXJlIEkgZ2V0IHRoZSBtZW1vcnkgZmFpbHVyZSBsb2dpYyBjb3ZlcmVkIGluIHRoZSBmdXp6aW5nLiBUaGUgcGF0Y2ggaXMgYWxzbyB1c2luZyBgZm9saW9fdGVzdF9od3BvaXNvbihmb2xpbylgIHNvIGBUVFVfSFdQT0lTT05gIGlzIGdvaW5nIHRvIGJlIHJlbGV2YW50LiBgZm9saW9fdGVzdF9hbm9uKGZvbGlvKWAgZm9yIGFub255bW91cyBtZW1vcnksIGFuZCBgZm9saW9fdGVzdF9odWdldGxiKGZvbGlvKWAgZm9yIGh1Z2V0bGIuXG5cbk9rYXksIEkgdGhpbmsgSSd2ZSBnb3QgaXQgYWxsLiBUaW1lIHRvIGNhbGwgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI3ODcsIk91dHB1dFRva2VucyI6MjAxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDI4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA3VDIwOjM4OjQyLjgyNDQ2OTQ4NFoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc2Mjk3OTk5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJIVUdFVExCRlNcIixcbiAgICBcIlNXQVBcIixcbiAgICBcIk1FTU9SWV9GQUlMVVJFXCIsXG4gICAgXCJIV1BPSVNPTl9JTkpFQ1RcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ0cnlfdG9fdW5tYXBfaHVnZXRsYl9vbmVcIixcbiAgICBcInR0dV9hbm9uX2ZvbGlvXCIsXG4gICAgXCJ0dHVfYW5vbl9sYXp5ZnJlZV9mb2xpb1wiLFxuICAgIFwidHR1X2Fub25fc3dhcGJhY2tlZF9mb2xpb1wiLFxuICAgIFwidHJ5X3RvX3VubWFwX29uZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlZmFjdG9ycyB0aGUgdW5tYXBwaW5nIGxvZ2ljIGluIG1tL3JtYXAuYyBieSBleHRyYWN0aW5nIGh1Z2V0bGIgYW5kIGFub255bW91cyBmb2xpbyB1bm1hcHBpbmcgaW50byBzZXBhcmF0ZSBmdW5jdGlvbnMgKHRyeV90b191bm1hcF9odWdldGxiX29uZSwgdHR1X2Fub25fZm9saW8sIGV0Yy4pLiBJdCBtb2RpZmllcyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGxvZ2ljIHJlbGF0ZWQgdG8gcmV2ZXJzZSBtYXBwaW5nLCBodWdlIHBhZ2VzLCBhbmQgc3dhcC4gRnV6emluZyBzaG91bGQgZm9jdXMgb24gdGhlc2UgbmV3IGZ1bmN0aW9ucyB0byBlbnN1cmUgbm8gcmVncmVzc2lvbnMgb3IgYnVncyB3ZXJlIGludHJvZHVjZWQgZHVyaW5nIHRoZSByZWZhY3RvcmluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJIVUdFVExCRlNcIixcbiAgICBcIlNXQVBcIixcbiAgICBcIk1FTU9SWV9GQUlMVVJFXCIsXG4gICAgXCJIV1BPSVNPTl9JTkpFQ1RcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ0cnlfdG9fdW5tYXBfaHVnZXRsYl9vbmVcIixcbiAgICBcInR0dV9hbm9uX2ZvbGlvXCIsXG4gICAgXCJ0dHVfYW5vbl9sYXp5ZnJlZV9mb2xpb1wiLFxuICAgIFwidHR1X2Fub25fc3dhcGJhY2tlZF9mb2xpb1wiLFxuICAgIFwidHJ5X3RvX3VubWFwX29uZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlZmFjdG9ycyB0aGUgdW5tYXBwaW5nIGxvZ2ljIGluIG1tL3JtYXAuYyBieSBleHRyYWN0aW5nIGh1Z2V0bGIgYW5kIGFub255bW91cyBmb2xpbyB1bm1hcHBpbmcgaW50byBzZXBhcmF0ZSBmdW5jdGlvbnMgKHRyeV90b191bm1hcF9odWdldGxiX29uZSwgdHR1X2Fub25fZm9saW8sIGV0Yy4pLiBJdCBtb2RpZmllcyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGxvZ2ljIHJlbGF0ZWQgdG8gcmV2ZXJzZSBtYXBwaW5nLCBodWdlIHBhZ2VzLCBhbmQgc3dhcC4gRnV6emluZyBzaG91bGQgZm9jdXMgb24gdGhlc2UgbmV3IGZ1bmN0aW9ucyB0byBlbnN1cmUgbm8gcmVncmVzc2lvbnMgb3IgYnVncyB3ZXJlIGludHJvZHVjZWQgZHVyaW5nIHRoZSByZWZhY3RvcmluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflowzrp5v[1] Phase: Succeeded StartedAt: 2026-07-07 20:38:54 +0000 UTC FinishedAt: 2026-07-07 20:38:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzrp5v[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-07 20:38:54 +0000 UTC FinishedAt: 2026-07-07 20:38:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzrp5v[2] Phase: Succeeded StartedAt: 2026-07-07 20:38:54 +0000 UTC FinishedAt: 2026-07-08 01:07:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzrp5v[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db6ed2a3d31068ca5577466591b2521dee0508ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","SWAP","MEMORY_FAILURE","HWPOISON_INJECT"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["try_to_unmap_hugetlb_one","ttu_anon_folio","ttu_anon_lazyfree_folio","ttu_anon_swapbacked_folio","try_to_unmap_one"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"db6ed2a3d31068ca5577466591b2521dee0508ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","SWAP","MEMORY_FAILURE","HWPOISON_INJECT"],"series_id":"9d0dc17d-dd1b-45cd-a613-7122afb78d86","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-07-07 20:38:54 +0000 UTC FinishedAt: 2026-07-08 01:07:14 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"db6ed2a3d31068ca5577466591b2521dee0508ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","SWAP","MEMORY_FAILURE","HWPOISON_INJECT"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["try_to_unmap_hugetlb_one","ttu_anon_folio","ttu_anon_lazyfree_folio","ttu_anon_swapbacked_folio","try_to_unmap_one"],"skip_cover_check":true},"patched":{"arch":"amd64","commit_hash":"db6ed2a3d31068ca5577466591b2521dee0508ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","SWAP","MEMORY_FAILURE","HWPOISON_INJECT"],"series_id":"9d0dc17d-dd1b-45cd-a613-7122afb78d86","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowzrp5v[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db6ed2a3d31068ca5577466591b2521dee0508ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","SWAP","MEMORY_FAILURE","HWPOISON_INJECT"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["try_to_unmap_hugetlb_one","ttu_anon_folio","ttu_anon_lazyfree_folio","ttu_anon_swapbacked_folio","try_to_unmap_one"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"db6ed2a3d31068ca5577466591b2521dee0508ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","SWAP","MEMORY_FAILURE","HWPOISON_INJECT"],"series_id":"9d0dc17d-dd1b-45cd-a613-7122afb78d86","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-07-07 20:38:54 +0000 UTC FinishedAt: 2026-07-07 20:39:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzrp5v[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db6ed2a3d31068ca5577466591b2521dee0508ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","SWAP","MEMORY_FAILURE","HWPOISON_INJECT"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["try_to_unmap_hugetlb_one","ttu_anon_folio","ttu_anon_lazyfree_folio","ttu_anon_swapbacked_folio","try_to_unmap_one"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"db6ed2a3d31068ca5577466591b2521dee0508ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","SWAP","MEMORY_FAILURE","HWPOISON_INJECT"],"series_id":"9d0dc17d-dd1b-45cd-a613-7122afb78d86","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-07-07 20:38:54 +0000 UTC FinishedAt: 2026-07-07 20:38:59 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"db6ed2a3d31068ca5577466591b2521dee0508ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","SWAP","MEMORY_FAILURE","HWPOISON_INJECT"],"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-workflowzrp5v/series-workflowzrp5v-convert-artifact-157557671/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowzrp5v[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db6ed2a3d31068ca5577466591b2521dee0508ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","SWAP","MEMORY_FAILURE","HWPOISON_INJECT"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["try_to_unmap_hugetlb_one","ttu_anon_folio","ttu_anon_lazyfree_folio","ttu_anon_swapbacked_folio","try_to_unmap_one"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"db6ed2a3d31068ca5577466591b2521dee0508ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","SWAP","MEMORY_FAILURE","HWPOISON_INJECT"],"series_id":"9d0dc17d-dd1b-45cd-a613-7122afb78d86","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-07-07 20:39:04 +0000 UTC FinishedAt: 2026-07-07 21:10:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzrp5v[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db6ed2a3d31068ca5577466591b2521dee0508ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","SWAP","MEMORY_FAILURE","HWPOISON_INJECT"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["try_to_unmap_hugetlb_one","ttu_anon_folio","ttu_anon_lazyfree_folio","ttu_anon_swapbacked_folio","try_to_unmap_one"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"db6ed2a3d31068ca5577466591b2521dee0508ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","SWAP","MEMORY_FAILURE","HWPOISON_INJECT"],"series_id":"9d0dc17d-dd1b-45cd-a613-7122afb78d86","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-07-07 20:39:04 +0000 UTC FinishedAt: 2026-07-07 21:10:22 +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:*b39e80dc-cea1-4fa9-afd9-3ab6b19ae246,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-workflowzrp5v/series-workflowzrp5v-convert-artifact-157557671/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": "8122a850-ebae-4654-883c-051d62dc75b1", "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-workflowzrp5v/series-workflowzrp5v-build-action-3629937469/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowzrp5v[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db6ed2a3d31068ca5577466591b2521dee0508ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","SWAP","MEMORY_FAILURE","HWPOISON_INJECT"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["try_to_unmap_hugetlb_one","ttu_anon_folio","ttu_anon_lazyfree_folio","ttu_anon_swapbacked_folio","try_to_unmap_one"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"db6ed2a3d31068ca5577466591b2521dee0508ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","SWAP","MEMORY_FAILURE","HWPOISON_INJECT"],"series_id":"9d0dc17d-dd1b-45cd-a613-7122afb78d86","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-07-07 20:39:04 +0000 UTC FinishedAt: 2026-07-07 21:09:59 +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:*b39e80dc-cea1-4fa9-afd9-3ab6b19ae246,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-workflowzrp5v/series-workflowzrp5v-convert-artifact-157557671/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": "8122a850-ebae-4654-883c-051d62dc75b1", "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-workflowzrp5v/series-workflowzrp5v-build-action-3629937469/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowzrp5v[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db6ed2a3d31068ca5577466591b2521dee0508ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","SWAP","MEMORY_FAILURE","HWPOISON_INJECT"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["try_to_unmap_hugetlb_one","ttu_anon_folio","ttu_anon_lazyfree_folio","ttu_anon_swapbacked_folio","try_to_unmap_one"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"db6ed2a3d31068ca5577466591b2521dee0508ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","SWAP","MEMORY_FAILURE","HWPOISON_INJECT"],"series_id":"9d0dc17d-dd1b-45cd-a613-7122afb78d86","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-07-07 21:10:22 +0000 UTC FinishedAt: 2026-07-07 21:10:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzrp5v[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db6ed2a3d31068ca5577466591b2521dee0508ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","SWAP","MEMORY_FAILURE","HWPOISON_INJECT"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["try_to_unmap_hugetlb_one","ttu_anon_folio","ttu_anon_lazyfree_folio","ttu_anon_swapbacked_folio","try_to_unmap_one"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"db6ed2a3d31068ca5577466591b2521dee0508ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","SWAP","MEMORY_FAILURE","HWPOISON_INJECT"],"series_id":"9d0dc17d-dd1b-45cd-a613-7122afb78d86","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-07-07 21:10:22 +0000 UTC FinishedAt: 2026-07-07 21:10:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzrp5v[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db6ed2a3d31068ca5577466591b2521dee0508ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","SWAP","MEMORY_FAILURE","HWPOISON_INJECT"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["try_to_unmap_hugetlb_one","ttu_anon_folio","ttu_anon_lazyfree_folio","ttu_anon_swapbacked_folio","try_to_unmap_one"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"db6ed2a3d31068ca5577466591b2521dee0508ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","SWAP","MEMORY_FAILURE","HWPOISON_INJECT"],"series_id":"9d0dc17d-dd1b-45cd-a613-7122afb78d86","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-07-07 21:10:22 +0000 UTC FinishedAt: 2026-07-07 21:10:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzrp5v[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db6ed2a3d31068ca5577466591b2521dee0508ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","SWAP","MEMORY_FAILURE","HWPOISON_INJECT"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["try_to_unmap_hugetlb_one","ttu_anon_folio","ttu_anon_lazyfree_folio","ttu_anon_swapbacked_folio","try_to_unmap_one"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"db6ed2a3d31068ca5577466591b2521dee0508ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","SWAP","MEMORY_FAILURE","HWPOISON_INJECT"],"series_id":"9d0dc17d-dd1b-45cd-a613-7122afb78d86","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-07-07 21:10:22 +0000 UTC FinishedAt: 2026-07-07 21:10:31 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"db6ed2a3d31068ca5577466591b2521dee0508ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","SWAP","MEMORY_FAILURE","HWPOISON_INJECT"],"series_id":"9d0dc17d-dd1b-45cd-a613-7122afb78d86","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-workflowzrp5v/series-workflowzrp5v-convert-artifact-3326669910/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowzrp5v[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db6ed2a3d31068ca5577466591b2521dee0508ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","SWAP","MEMORY_FAILURE","HWPOISON_INJECT"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["try_to_unmap_hugetlb_one","ttu_anon_folio","ttu_anon_lazyfree_folio","ttu_anon_swapbacked_folio","try_to_unmap_one"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"db6ed2a3d31068ca5577466591b2521dee0508ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","SWAP","MEMORY_FAILURE","HWPOISON_INJECT"],"series_id":"9d0dc17d-dd1b-45cd-a613-7122afb78d86","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-07-07 21:10:42 +0000 UTC FinishedAt: 2026-07-07 21:12:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzrp5v[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db6ed2a3d31068ca5577466591b2521dee0508ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","SWAP","MEMORY_FAILURE","HWPOISON_INJECT"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["try_to_unmap_hugetlb_one","ttu_anon_folio","ttu_anon_lazyfree_folio","ttu_anon_swapbacked_folio","try_to_unmap_one"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"db6ed2a3d31068ca5577466591b2521dee0508ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","SWAP","MEMORY_FAILURE","HWPOISON_INJECT"],"series_id":"9d0dc17d-dd1b-45cd-a613-7122afb78d86","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-07-07 21:10:42 +0000 UTC FinishedAt: 2026-07-07 21:12:45 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*8122a850-ebae-4654-883c-051d62dc75b1,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-workflowzrp5v/series-workflowzrp5v-build-action-3629937469/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-workflowzrp5v[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db6ed2a3d31068ca5577466591b2521dee0508ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","SWAP","MEMORY_FAILURE","HWPOISON_INJECT"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["try_to_unmap_hugetlb_one","ttu_anon_folio","ttu_anon_lazyfree_folio","ttu_anon_swapbacked_folio","try_to_unmap_one"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"db6ed2a3d31068ca5577466591b2521dee0508ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","SWAP","MEMORY_FAILURE","HWPOISON_INJECT"],"series_id":"9d0dc17d-dd1b-45cd-a613-7122afb78d86","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-07-07 21:12:55 +0000 UTC FinishedAt: 2026-07-07 21:12:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzrp5v[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db6ed2a3d31068ca5577466591b2521dee0508ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","SWAP","MEMORY_FAILURE","HWPOISON_INJECT"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["try_to_unmap_hugetlb_one","ttu_anon_folio","ttu_anon_lazyfree_folio","ttu_anon_swapbacked_folio","try_to_unmap_one"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"db6ed2a3d31068ca5577466591b2521dee0508ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","SWAP","MEMORY_FAILURE","HWPOISON_INJECT"],"series_id":"9d0dc17d-dd1b-45cd-a613-7122afb78d86","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-07-07 21:12:55 +0000 UTC FinishedAt: 2026-07-07 21:12:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzrp5v[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db6ed2a3d31068ca5577466591b2521dee0508ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","SWAP","MEMORY_FAILURE","HWPOISON_INJECT"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["try_to_unmap_hugetlb_one","ttu_anon_folio","ttu_anon_lazyfree_folio","ttu_anon_swapbacked_folio","try_to_unmap_one"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"db6ed2a3d31068ca5577466591b2521dee0508ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","SWAP","MEMORY_FAILURE","HWPOISON_INJECT"],"series_id":"9d0dc17d-dd1b-45cd-a613-7122afb78d86","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-07-07 21:12:55 +0000 UTC FinishedAt: 2026-07-07 22:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzrp5v[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db6ed2a3d31068ca5577466591b2521dee0508ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","SWAP","MEMORY_FAILURE","HWPOISON_INJECT"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["try_to_unmap_hugetlb_one","ttu_anon_folio","ttu_anon_lazyfree_folio","ttu_anon_swapbacked_folio","try_to_unmap_one"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"db6ed2a3d31068ca5577466591b2521dee0508ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","SWAP","MEMORY_FAILURE","HWPOISON_INJECT"],"series_id":"9d0dc17d-dd1b-45cd-a613-7122afb78d86","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-07-07 21:12:55 +0000 UTC FinishedAt: 2026-07-07 22:00:00 +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:*b39e80dc-cea1-4fa9-afd9-3ab6b19ae246,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-workflowzrp5v/series-workflowzrp5v-convert-artifact-3326669910/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": "42817584-8da2-4d9e-8311-2b976ac8939b", "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-workflowzrp5v/series-workflowzrp5v-build-action-4143815258/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowzrp5v[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db6ed2a3d31068ca5577466591b2521dee0508ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","SWAP","MEMORY_FAILURE","HWPOISON_INJECT"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["try_to_unmap_hugetlb_one","ttu_anon_folio","ttu_anon_lazyfree_folio","ttu_anon_swapbacked_folio","try_to_unmap_one"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"db6ed2a3d31068ca5577466591b2521dee0508ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","SWAP","MEMORY_FAILURE","HWPOISON_INJECT"],"series_id":"9d0dc17d-dd1b-45cd-a613-7122afb78d86","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-07-07 21:12:55 +0000 UTC FinishedAt: 2026-07-07 21:59:50 +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:*b39e80dc-cea1-4fa9-afd9-3ab6b19ae246,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-workflowzrp5v/series-workflowzrp5v-convert-artifact-3326669910/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": "42817584-8da2-4d9e-8311-2b976ac8939b", "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-workflowzrp5v/series-workflowzrp5v-build-action-4143815258/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowzrp5v[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db6ed2a3d31068ca5577466591b2521dee0508ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","SWAP","MEMORY_FAILURE","HWPOISON_INJECT"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["try_to_unmap_hugetlb_one","ttu_anon_folio","ttu_anon_lazyfree_folio","ttu_anon_swapbacked_folio","try_to_unmap_one"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"db6ed2a3d31068ca5577466591b2521dee0508ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","SWAP","MEMORY_FAILURE","HWPOISON_INJECT"],"series_id":"9d0dc17d-dd1b-45cd-a613-7122afb78d86","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-07-07 22:00:00 +0000 UTC FinishedAt: 2026-07-07 22:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzrp5v[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db6ed2a3d31068ca5577466591b2521dee0508ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","SWAP","MEMORY_FAILURE","HWPOISON_INJECT"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["try_to_unmap_hugetlb_one","ttu_anon_folio","ttu_anon_lazyfree_folio","ttu_anon_swapbacked_folio","try_to_unmap_one"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"db6ed2a3d31068ca5577466591b2521dee0508ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","SWAP","MEMORY_FAILURE","HWPOISON_INJECT"],"series_id":"9d0dc17d-dd1b-45cd-a613-7122afb78d86","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-07-07 22:00:00 +0000 UTC FinishedAt: 2026-07-07 22:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzrp5v[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db6ed2a3d31068ca5577466591b2521dee0508ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","SWAP","MEMORY_FAILURE","HWPOISON_INJECT"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["try_to_unmap_hugetlb_one","ttu_anon_folio","ttu_anon_lazyfree_folio","ttu_anon_swapbacked_folio","try_to_unmap_one"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"db6ed2a3d31068ca5577466591b2521dee0508ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","SWAP","MEMORY_FAILURE","HWPOISON_INJECT"],"series_id":"9d0dc17d-dd1b-45cd-a613-7122afb78d86","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-07-07 22:00:00 +0000 UTC FinishedAt: 2026-07-07 22:02:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzrp5v[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db6ed2a3d31068ca5577466591b2521dee0508ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","SWAP","MEMORY_FAILURE","HWPOISON_INJECT"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["try_to_unmap_hugetlb_one","ttu_anon_folio","ttu_anon_lazyfree_folio","ttu_anon_swapbacked_folio","try_to_unmap_one"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"db6ed2a3d31068ca5577466591b2521dee0508ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","SWAP","MEMORY_FAILURE","HWPOISON_INJECT"],"series_id":"9d0dc17d-dd1b-45cd-a613-7122afb78d86","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-07-07 22:00:00 +0000 UTC FinishedAt: 2026-07-07 22:02:02 +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:*42817584-8da2-4d9e-8311-2b976ac8939b,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-workflowzrp5v/series-workflowzrp5v-build-action-4143815258/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-workflowzrp5v[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db6ed2a3d31068ca5577466591b2521dee0508ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","SWAP","MEMORY_FAILURE","HWPOISON_INJECT"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["try_to_unmap_hugetlb_one","ttu_anon_folio","ttu_anon_lazyfree_folio","ttu_anon_swapbacked_folio","try_to_unmap_one"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"db6ed2a3d31068ca5577466591b2521dee0508ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","SWAP","MEMORY_FAILURE","HWPOISON_INJECT"],"series_id":"9d0dc17d-dd1b-45cd-a613-7122afb78d86","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-07-07 22:02:13 +0000 UTC FinishedAt: 2026-07-08 01:07:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzrp5v[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db6ed2a3d31068ca5577466591b2521dee0508ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","SWAP","MEMORY_FAILURE","HWPOISON_INJECT"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["try_to_unmap_hugetlb_one","ttu_anon_folio","ttu_anon_lazyfree_folio","ttu_anon_swapbacked_folio","try_to_unmap_one"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"db6ed2a3d31068ca5577466591b2521dee0508ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","SWAP","MEMORY_FAILURE","HWPOISON_INJECT"],"series_id":"9d0dc17d-dd1b-45cd-a613-7122afb78d86","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-07-07 22:02:13 +0000 UTC FinishedAt: 2026-07-08 01:07:14 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["try_to_unmap_hugetlb_one","ttu_anon_folio","ttu_anon_lazyfree_folio","ttu_anon_swapbacked_folio","try_to_unmap_one"],"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:*8122a850-ebae-4654-883c-051d62dc75b1,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*42817584-8da2-4d9e-8311-2b976ac8939b,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-workflowzrp5v/series-workflowzrp5v-build-action-3629937469/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-workflowzrp5v/series-workflowzrp5v-build-action-4143815258/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowzrp5v[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db6ed2a3d31068ca5577466591b2521dee0508ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","SWAP","MEMORY_FAILURE","HWPOISON_INJECT"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["try_to_unmap_hugetlb_one","ttu_anon_folio","ttu_anon_lazyfree_folio","ttu_anon_swapbacked_folio","try_to_unmap_one"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"db6ed2a3d31068ca5577466591b2521dee0508ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","SWAP","MEMORY_FAILURE","HWPOISON_INJECT"],"series_id":"9d0dc17d-dd1b-45cd-a613-7122afb78d86","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-07-07 22:02:13 +0000 UTC FinishedAt: 2026-07-07 22:02:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzrp5v[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db6ed2a3d31068ca5577466591b2521dee0508ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","SWAP","MEMORY_FAILURE","HWPOISON_INJECT"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["try_to_unmap_hugetlb_one","ttu_anon_folio","ttu_anon_lazyfree_folio","ttu_anon_swapbacked_folio","try_to_unmap_one"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"db6ed2a3d31068ca5577466591b2521dee0508ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","SWAP","MEMORY_FAILURE","HWPOISON_INJECT"],"series_id":"9d0dc17d-dd1b-45cd-a613-7122afb78d86","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-07-07 22:02:13 +0000 UTC FinishedAt: 2026-07-07 22:02:21 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["try_to_unmap_hugetlb_one","ttu_anon_folio","ttu_anon_lazyfree_folio","ttu_anon_swapbacked_folio","try_to_unmap_one"],"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-workflowzrp5v/series-workflowzrp5v-convert-artifact-2660092667/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowzrp5v[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db6ed2a3d31068ca5577466591b2521dee0508ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","SWAP","MEMORY_FAILURE","HWPOISON_INJECT"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["try_to_unmap_hugetlb_one","ttu_anon_folio","ttu_anon_lazyfree_folio","ttu_anon_swapbacked_folio","try_to_unmap_one"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"db6ed2a3d31068ca5577466591b2521dee0508ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","SWAP","MEMORY_FAILURE","HWPOISON_INJECT"],"series_id":"9d0dc17d-dd1b-45cd-a613-7122afb78d86","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-07-07 22:02:13 +0000 UTC FinishedAt: 2026-07-07 22:02:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzrp5v[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db6ed2a3d31068ca5577466591b2521dee0508ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","SWAP","MEMORY_FAILURE","HWPOISON_INJECT"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["try_to_unmap_hugetlb_one","ttu_anon_folio","ttu_anon_lazyfree_folio","ttu_anon_swapbacked_folio","try_to_unmap_one"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"db6ed2a3d31068ca5577466591b2521dee0508ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","SWAP","MEMORY_FAILURE","HWPOISON_INJECT"],"series_id":"9d0dc17d-dd1b-45cd-a613-7122afb78d86","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-07-07 22:02:13 +0000 UTC FinishedAt: 2026-07-07 22:02:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzrp5v[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db6ed2a3d31068ca5577466591b2521dee0508ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","SWAP","MEMORY_FAILURE","HWPOISON_INJECT"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["try_to_unmap_hugetlb_one","ttu_anon_folio","ttu_anon_lazyfree_folio","ttu_anon_swapbacked_folio","try_to_unmap_one"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"db6ed2a3d31068ca5577466591b2521dee0508ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","SWAP","MEMORY_FAILURE","HWPOISON_INJECT"],"series_id":"9d0dc17d-dd1b-45cd-a613-7122afb78d86","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-07-07 22:02:13 +0000 UTC FinishedAt: 2026-07-07 22:02:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzrp5v[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db6ed2a3d31068ca5577466591b2521dee0508ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","SWAP","MEMORY_FAILURE","HWPOISON_INJECT"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["try_to_unmap_hugetlb_one","ttu_anon_folio","ttu_anon_lazyfree_folio","ttu_anon_swapbacked_folio","try_to_unmap_one"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"db6ed2a3d31068ca5577466591b2521dee0508ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","SWAP","MEMORY_FAILURE","HWPOISON_INJECT"],"series_id":"9d0dc17d-dd1b-45cd-a613-7122afb78d86","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-07-07 22:02:23 +0000 UTC FinishedAt: 2026-07-08 01:07:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzrp5v[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db6ed2a3d31068ca5577466591b2521dee0508ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","SWAP","MEMORY_FAILURE","HWPOISON_INJECT"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["try_to_unmap_hugetlb_one","ttu_anon_folio","ttu_anon_lazyfree_folio","ttu_anon_swapbacked_folio","try_to_unmap_one"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"db6ed2a3d31068ca5577466591b2521dee0508ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","SWAP","MEMORY_FAILURE","HWPOISON_INJECT"],"series_id":"9d0dc17d-dd1b-45cd-a613-7122afb78d86","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-07-07 22:02:23 +0000 UTC FinishedAt: 2026-07-08 01:07:04 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*8122a850-ebae-4654-883c-051d62dc75b1,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*42817584-8da2-4d9e-8311-2b976ac8939b,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-workflowzrp5v/series-workflowzrp5v-build-action-3629937469/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-workflowzrp5v/series-workflowzrp5v-build-action-4143815258/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-workflowzrp5v/series-workflowzrp5v-convert-artifact-2660092667/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,}