Name: series-workflowtd9d7 Phase: Succeeded StartedAt: 2026-07-21 17:41:08 +0000 UTC FinishedAt: 2026-07-21 23:14:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtd9d7[0] Phase: Succeeded StartedAt: 2026-07-21 17:41:08 +0000 UTC FinishedAt: 2026-07-21 18:09:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtd9d7[0].run-triage Phase: Succeeded StartedAt: 2026-07-21 17:41:08 +0000 UTC FinishedAt: 2026-07-21 18:09:05 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "b95f03f04d475aa6719d15a636ddf32222d55657", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "HUGETLBFS", "MEMCG", "CGROUP_HUGETLB" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "b95f03f04d475aa6719d15a636ddf32222d55657", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "HUGETLBFS", "MEMCG", "CGROUP_HUGETLB" ], "series_id": "ebe23071-1bfc-48cc-b9a5-a087f5517dd5" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "alloc_hugetlb_folio", "hugetlb_reserve_pages", "mem_cgroup_hugetlb_try_charge", "mem_cgroup_hugetlb_commit_charge", "mem_cgroup_hugetlb_cancel_charge", "hugepage_subpool_get_pages", "hugepage_subpool_put_pages", "hugepage_new_subpool", "hugepage_put_subpool" ], "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+CgkJCTx0ZD4yMDI2LzA3LzIxIDE4OjA4PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0hVR0VUTEJGUyYjMzQ7LAogICAgJiMzNDtNRU1DRyYjMzQ7LAogICAgJiMzNDtDR1JPVVBfSFVHRVRMQiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2FsbG9jX2h1Z2V0bGJfZm9saW8mIzM0OywKICAgICYjMzQ7aHVnZXRsYl9yZXNlcnZlX3BhZ2VzJiMzNDssCiAgICAmIzM0O21lbV9jZ3JvdXBfaHVnZXRsYl90cnlfY2hhcmdlJiMzNDssCiAgICAmIzM0O21lbV9jZ3JvdXBfaHVnZXRsYl9jb21taXRfY2hhcmdlJiMzNDssCiAgICAmIzM0O21lbV9jZ3JvdXBfaHVnZXRsYl9jYW5jZWxfY2hhcmdlJiMzNDssCiAgICAmIzM0O2h1Z2VwYWdlX3N1YnBvb2xfZ2V0X3BhZ2VzJiMzNDssCiAgICAmIzM0O2h1Z2VwYWdlX3N1YnBvb2xfcHV0X3BhZ2VzJiMzNDssCiAgICAmIzM0O2h1Z2VwYWdlX25ld19zdWJwb29sJiMzNDssCiAgICAmIzM0O2h1Z2VwYWdlX3B1dF9zdWJwb29sJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHNlcmllcyByZWZhY3RvcnMgdGhlIGh1Z2V0bGIgc3VicG9vbCBsb2dpYyBpbnRvIGEgc2VwYXJhdGUgZmlsZSBhbmQgbW9kaWZpZXMgdGhlIGh1Z2V0bGIgYWxsb2NhdGlvbiBwYXRoIHRvIHVzZSBhIG5ldyB0cnkvY29tbWl0L2NhbmNlbCBjaGFyZ2luZyBtb2RlbCBmb3IgbWVtb3J5IGNncm91cHMuIEl0IGFsc28gbW9kaWZpZXMgdGhlIGh1Z2V0bGJfcmVzZXJ2ZV9wYWdlcyBlcnJvciBwYXRoLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIGNncm91cCBsb2dpYyB0aGF0IGFyZSByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIGh1Z2V0bGJmcyBhbmQgY2dyb3VwZnMsIG1ha2luZyB0aGVtIGhpZ2hseSByZWxldmFudCBmb3IgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMSAxODowODwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDcwMDg1MmNkOWEwMjNhNTEwNWUyMzQxZDI0N2I4NjQwMDJjY2M2ZmNcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIEp1bCAyMSAxODowODoxNSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9jZ3JvdXBfdjJfYWxsb2NhdGlvbl9mYWlsdXJlLmMgYi9jZ3JvdXBfdjJfYWxsb2NhdGlvbl9mYWlsdXJlLmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uOTM4Y2JmMDJhZTZmN2Fcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL2Nncm91cF92Ml9hbGxvY2F0aW9uX2ZhaWx1cmUuY1xuQEAgLTAsMCAmIzQzOzEsMTYwIEBAXG4mIzQzOyNkZWZpbmUgX0dOVV9TT1VSQ0VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjc3RkaW8uaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NzdGRsaWIuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2N1bmlzdGQuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NmY250bC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY3N5cy9tbWFuLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjc3lzL3N0YXQuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NzeXMvdHlwZXMuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NzeXMvd2FpdC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY3N0cmluZy5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2Vycm5vLmhcdTAwM2VcbiYjNDM7XG4mIzQzOyNkZWZpbmUgQ0dST1VQX1BBVEggXCYjMzQ7L3N5cy9mcy9jZ3JvdXBcJiMzNDtcbiYjNDM7I2RlZmluZSBURVNUX0NHUk9VUCBcJiMzNDt0ZXN0X3JlcHJvZHVjZXJcJiMzNDtcbiYjNDM7I2RlZmluZSBURVNUX0NHUk9VUF9QQVRIIENHUk9VUF9QQVRIIFwmIzM0Oy9cJiMzNDsgVEVTVF9DR1JPVVBcbiYjNDM7XG4mIzQzO3ZvaWQgd3JpdGVfZmlsZShjb25zdCBjaGFyICpwYXRoLCBjb25zdCBjaGFyICp2YWwpIHtcbiYjNDM7ICAgIGludCBmZCA9IG9wZW4ocGF0aCwgT19XUk9OTFkpO1xuJiM0MzsgICAgaWYgKGZkIFx1MDAzYyAwKSB7XG4mIzQzOyAgICAgICAgZnByaW50ZihzdGRlcnIsIFwmIzM0O0ZhaWxlZCB0byBvcGVuICVzOiAlc1xcblwmIzM0OywgcGF0aCwgc3RyZXJyb3IoZXJybm8pKTtcbiYjNDM7ICAgICAgICBleGl0KDEpO1xuJiM0MzsgICAgfVxuJiM0MzsgICAgaWYgKHdyaXRlKGZkLCB2YWwsIHN0cmxlbih2YWwpKSBcdTAwM2MgMCkge1xuJiM0MzsgICAgICAgIGZwcmludGYoc3RkZXJyLCBcJiMzNDtGYWlsZWQgdG8gd3JpdGUgJXMgdG8gJXM6ICVzXFxuXCYjMzQ7LCB2YWwsIHBhdGgsIHN0cmVycm9yKGVycm5vKSk7XG4mIzQzOyAgICAgICAgY2xvc2UoZmQpO1xuJiM0MzsgICAgICAgIGV4aXQoMSk7XG4mIzQzOyAgICB9XG4mIzQzOyAgICBjbG9zZShmZCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO2ludCBpc19odWdldGxiX2FjY291bnRpbmdfZW5hYmxlZCgpIHtcbiYjNDM7ICAgIEZJTEUgKmZwID0gZm9wZW4oXCYjMzQ7L3Byb2MvbW91bnRzXCYjMzQ7LCBcJiMzNDtyXCYjMzQ7KTtcbiYjNDM7ICAgIGlmICghZnApIHtcbiYjNDM7ICAgICAgICBwZXJyb3IoXCYjMzQ7Zm9wZW4gL3Byb2MvbW91bnRzXCYjMzQ7KTtcbiYjNDM7ICAgICAgICByZXR1cm4gLTE7XG4mIzQzOyAgICB9XG4mIzQzO1xuJiM0MzsgICAgY2hhciBsaW5lWzEwMjRdO1xuJiM0MzsgICAgaW50IGVuYWJsZWQgPSAwO1xuJiM0MzsgICAgd2hpbGUgKGZnZXRzKGxpbmUsIHNpemVvZihsaW5lKSwgZnApKSB7XG4mIzQzOyAgICAgICAgY2hhciBzcGVjWzI1Nl0sIGZpbGVbMjU2XSwgdHlwZVsyNTZdLCBvcHRzWzUxMl07XG4mIzQzOyAgICAgICAgaWYgKHNzY2FuZihsaW5lLCBcJiMzNDslMjU1cyAlMjU1cyAlMjU1cyAlNTExc1wmIzM0Oywgc3BlYywgZmlsZSwgdHlwZSwgb3B0cykgPT0gNCkge1xuJiM0MzsgICAgICAgICAgICBpZiAoc3RyY21wKGZpbGUsIENHUk9VUF9QQVRIKSA9PSAwIFx1MDAyNlx1MDAyNiBzdHJjbXAodHlwZSwgXCYjMzQ7Y2dyb3VwMlwmIzM0OykgPT0gMCkge1xuJiM0MzsgICAgICAgICAgICAgICAgaWYgKHN0cnN0cihvcHRzLCBcJiMzNDttZW1vcnlfaHVnZXRsYl9hY2NvdW50aW5nXCYjMzQ7KSAhPSBOVUxMKSB7XG4mIzQzOyAgICAgICAgICAgICAgICAgICAgZW5hYmxlZCA9IDE7XG4mIzQzOyAgICAgICAgICAgICAgICB9XG4mIzQzOyAgICAgICAgICAgICAgICBicmVhaztcbiYjNDM7ICAgICAgICAgICAgfVxuJiM0MzsgICAgICAgIH1cbiYjNDM7ICAgIH1cbiYjNDM7ICAgIGZjbG9zZShmcCk7XG4mIzQzOyAgICByZXR1cm4gZW5hYmxlZDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7aW50IGVuYWJsZV9odWdldGxiX2FjY291bnRpbmcoKSB7XG4mIzQzOyAgICBwcmludGYoXCYjMzQ7QXR0ZW1wdGluZyB0byByZW1vdW50IGNncm91cDIgd2l0aCBtZW1vcnlfaHVnZXRsYl9hY2NvdW50aW5nLi4uXFxuXCYjMzQ7KTtcbiYjNDM7ICAgIGludCByZXQgPSBzeXN0ZW0oXCYjMzQ7bW91bnQgLW8gcmVtb3VudCxtZW1vcnlfaHVnZXRsYl9hY2NvdW50aW5nIFwmIzM0OyBDR1JPVVBfUEFUSCk7XG4mIzQzOyAgICBpZiAocmV0ICE9IDApIHtcbiYjNDM7ICAgICAgICBmcHJpbnRmKHN0ZGVyciwgXCYjMzQ7RmFpbGVkIHRvIHJlbW91bnQ6IHN5c3RlbSgpIHJldHVybmVkICVkXFxuXCYjMzQ7LCByZXQpO1xuJiM0MzsgICAgICAgIHJldHVybiAtMTtcbiYjNDM7ICAgIH1cbiYjNDM7ICAgIHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztpbnQgbWFpbigpIHtcbiYjNDM7ICAgIHN0cnVjdCBzdGF0IHN0O1xuJiM0MzsgICAgaWYgKHN0YXQoQ0dST1VQX1BBVEgsIFx1MDAyNnN0KSAhPSAwIHx8ICFTX0lTRElSKHN0LnN0X21vZGUpKSB7XG4mIzQzOyAgICAgICAgZnByaW50ZihzdGRlcnIsIFwmIzM0O2Nncm91cCB2MiBub3QgbW91bnRlZCBhdCAlc1xcblwmIzM0OywgQ0dST1VQX1BBVEgpO1xuJiM0MzsgICAgICAgIHJldHVybiAxO1xuJiM0MzsgICAgfVxuJiM0MztcbiYjNDM7ICAgIGludCBlbmFibGVkID0gaXNfaHVnZXRsYl9hY2NvdW50aW5nX2VuYWJsZWQoKTtcbiYjNDM7ICAgIGlmIChlbmFibGVkIFx1MDAzYyAwKSB7XG4mIzQzOyAgICAgICAgcmV0dXJuIDE7XG4mIzQzOyAgICB9XG4mIzQzOyAgICBpZiAoIWVuYWJsZWQpIHtcbiYjNDM7ICAgICAgICBpZiAoZW5hYmxlX2h1Z2V0bGJfYWNjb3VudGluZygpICE9IDApIHtcbiYjNDM7ICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsIFwmIzM0O0NvdWxkIG5vdCBlbmFibGUgbWVtb3J5X2h1Z2V0bGJfYWNjb3VudGluZ1xcblwmIzM0Oyk7XG4mIzQzOyAgICAgICAgICAgIHJldHVybiAxO1xuJiM0MzsgICAgICAgIH1cbiYjNDM7ICAgICAgICAvLyBSZS1jaGVja1xuJiM0MzsgICAgICAgIGVuYWJsZWQgPSBpc19odWdldGxiX2FjY291bnRpbmdfZW5hYmxlZCgpO1xuJiM0MzsgICAgICAgIGlmIChlbmFibGVkIFx1MDAzYz0gMCkge1xuJiM0MzsgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgXCYjMzQ7RmFpbGVkIHRvIGVuYWJsZSBtZW1vcnlfaHVnZXRsYl9hY2NvdW50aW5nIChyZS1jaGVjayBmYWlsZWQpXFxuXCYjMzQ7KTtcbiYjNDM7ICAgICAgICAgICAgcmV0dXJuIDE7XG4mIzQzOyAgICAgICAgfVxuJiM0MzsgICAgICAgIHByaW50ZihcJiMzNDtTdWNjZXNzZnVsbHkgZW5hYmxlZCBtZW1vcnlfaHVnZXRsYl9hY2NvdW50aW5nXFxuXCYjMzQ7KTtcbiYjNDM7ICAgIH0gZWxzZSB7XG4mIzQzOyAgICAgICAgcHJpbnRmKFwmIzM0O21lbW9yeV9odWdldGxiX2FjY291bnRpbmcgaXMgYWxyZWFkeSBlbmFibGVkXFxuXCYjMzQ7KTtcbiYjNDM7ICAgIH1cbiYjNDM7XG4mIzQzOyAgICAvLyBFbmFibGUgbWVtb3J5IGNvbnRyb2xsZXIgaW4gc3VidHJlZVxuJiM0MzsgICAgaW50IGZkID0gb3BlbihDR1JPVVBfUEFUSCBcJiMzNDsvY2dyb3VwLnN1YnRyZWVfY29udHJvbFwmIzM0OywgT19XUk9OTFkpO1xuJiM0MzsgICAgaWYgKGZkIFx1MDAzZT0gMCkge1xuJiM0MzsgICAgICAgIGlmICh3cml0ZShmZCwgXCYjMzQ7JiM0MzttZW1vcnlcJiMzNDssIDcpIFx1MDAzYyAwKSB7XG4mIzQzOyAgICAgICAgICAgIC8vIE1pZ2h0IGZhaWwgaWYgYWxyZWFkeSBlbmFibGVkIG9yIG5vdCBzdXBwb3J0ZWQsIGlnbm9yZSBmb3Igbm93XG4mIzQzOyAgICAgICAgfVxuJiM0MzsgICAgICAgIGNsb3NlKGZkKTtcbiYjNDM7ICAgIH1cbiYjNDM7XG4mIzQzOyAgICBpZiAobWtkaXIoVEVTVF9DR1JPVVBfUEFUSCwgMDc1NSkgIT0gMCkge1xuJiM0MzsgICAgICAgIGlmIChlcnJubyAhPSBFRVhJU1QpIHtcbiYjNDM7ICAgICAgICAgICAgcGVycm9yKFwmIzM0O21rZGlyIHRlc3RfcmVwcm9kdWNlclwmIzM0Oyk7XG4mIzQzOyAgICAgICAgICAgIHJldHVybiAxO1xuJiM0MzsgICAgICAgIH1cbiYjNDM7ICAgIH1cbiYjNDM7XG4mIzQzOyAgICAvLyBTZXQgbWVtb3J5IGxpbWl0IHRvIDFNQiAobGVzcyB0aGFuIDJNQiBodWdlcGFnZSlcbiYjNDM7ICAgIHdyaXRlX2ZpbGUoVEVTVF9DR1JPVVBfUEFUSCBcJiMzNDsvbWVtb3J5Lm1heFwmIzM0OywgXCYjMzQ7MU1cJiMzNDspO1xuJiM0MztcbiYjNDM7ICAgIHBpZF90IHBpZCA9IGZvcmsoKTtcbiYjNDM7ICAgIGlmIChwaWQgXHUwMDNjIDApIHtcbiYjNDM7ICAgICAgICBwZXJyb3IoXCYjMzQ7Zm9ya1wmIzM0Oyk7XG4mIzQzOyAgICAgICAgcmV0dXJuIDE7XG4mIzQzOyAgICB9XG4mIzQzO1xuJiM0MzsgICAgaWYgKHBpZCA9PSAwKSB7XG4mIzQzOyAgICAgICAgLy8gQ2hpbGRcbiYjNDM7ICAgICAgICAvLyBNb3ZlIHRvIGNncm91cFxuJiM0MzsgICAgICAgIHdyaXRlX2ZpbGUoVEVTVF9DR1JPVVBfUEFUSCBcJiMzNDsvY2dyb3VwLnByb2NzXCYjMzQ7LCBcJiMzNDswXCYjMzQ7KTtcbiYjNDM7XG4mIzQzOyAgICAgICAgcHJpbnRmKFwmIzM0O0NoaWxkOiBBdHRlbXB0aW5nIHRvIGFsbG9jYXRlIGFuZCB0b3VjaCAyTUIgaHVnZXBhZ2UuLi5cXG5cJiMzNDspO1xuJiM0MzsgICAgICAgIC8vIEFsbG9jYXRlIDJNQiBodWdlcGFnZVxuJiM0MzsgICAgICAgIHNpemVfdCBzaXplID0gMiAqIDEwMjQgKiAxMDI0O1xuJiM0MzsgICAgICAgIHZvaWQgKmFkZHIgPSBtbWFwKE5VTEwsIHNpemUsIFBST1RfUkVBRCB8IFBST1RfV1JJVEUsXG4mIzQzOyAgICAgICAgICAgICAgICAgICAgICAgICAgTUFQX1BSSVZBVEUgfCBNQVBfQU5PTllNT1VTIHwgTUFQX0hVR0VUTEIsIC0xLCAwKTtcbiYjNDM7ICAgICAgICBpZiAoYWRkciA9PSBNQVBfRkFJTEVEKSB7XG4mIzQzOyAgICAgICAgICAgIHBlcnJvcihcJiMzNDtDaGlsZDogbW1hcCBNQVBfSFVHRVRMQlwmIzM0Oyk7XG4mIzQzOyAgICAgICAgICAgIGV4aXQoMSk7XG4mIzQzOyAgICAgICAgfVxuJiM0MztcbiYjNDM7ICAgICAgICBwcmludGYoXCYjMzQ7Q2hpbGQ6IG1tYXAgc3VjY2VlZGVkIGF0ICVwLCB0b3VjaGluZyBpdCBub3cgKHNob3VsZCB0cmlnZ2VyIGZhdWx0KS4uLlxcblwmIzM0OywgYWRkcik7XG4mIzQzOyAgICAgICAgLy8gVGhpcyBzaG91bGQgdHJpZ2dlciB0aGUgZmF1bHQgYW5kIGNhbGwgYWxsb2NfaHVnZXRsYl9mb2xpbyAtXHUwMDNlIG1lbV9jZ3JvdXBfY2hhcmdlX2h1Z2V0bGJcbiYjNDM7ICAgICAgICAvLyB3aGljaCBzaG91bGQgZmFpbCBhbmQgdHJpZ2dlciB0aGUgYnVnLlxuJiM0MzsgICAgICAgICoodm9sYXRpbGUgY2hhciAqKWFkZHIgPSAxO1xuJiM0MztcbiYjNDM7ICAgICAgICBwcmludGYoXCYjMzQ7Q2hpbGQ6IFN1Y2Nlc3NmdWxseSB0b3VjaGVkIHBhZ2UgKGJ1ZyBub3QgdHJpZ2dlcmVkPykuXFxuXCYjMzQ7KTtcbiYjNDM7ICAgICAgICBtdW5tYXAoYWRkciwgc2l6ZSk7XG4mIzQzOyAgICAgICAgZXhpdCgwKTtcbiYjNDM7ICAgIH1cbiYjNDM7XG4mIzQzOyAgICAvLyBQYXJlbnRcbiYjNDM7ICAgIGludCBzdGF0dXM7XG4mIzQzOyAgICB3YWl0cGlkKHBpZCwgXHUwMDI2c3RhdHVzLCAwKTtcbiYjNDM7XG4mIzQzOyAgICBwcmludGYoXCYjMzQ7UGFyZW50OiBDaGlsZCBleGl0ZWQuIENsZWFuaW5nIHVwLlxcblwmIzM0Oyk7XG4mIzQzOyAgICBybWRpcihURVNUX0NHUk9VUF9QQVRIKTtcbiYjNDM7XG4mIzQzOyAgICBpZiAoV0lGU0lHTkFMRUQoc3RhdHVzKSkge1xuJiM0MzsgICAgICAgIHByaW50ZihcJiMzNDtQYXJlbnQ6IENoaWxkIGtpbGxlZCBieSBzaWduYWwgJWQgKCVzKVxcblwmIzM0OyxcbiYjNDM7ICAgICAgICAgICAgICAgV1RFUk1TSUcoc3RhdHVzKSwgc3Ryc2lnbmFsKFdURVJNU0lHKHN0YXR1cykpKTtcbiYjNDM7ICAgICAgICBpZiAoV1RFUk1TSUcoc3RhdHVzKSA9PSBTSUdCVVMpIHtcbiYjNDM7ICAgICAgICAgICAgcHJpbnRmKFwmIzM0O1BhcmVudDogQ2hpbGQgZ290IFNJR0JVUyBhcyBleHBlY3RlZCAoaWYga2VybmVsIGRpZG4mIzM5O3QgY3Jhc2gpLlxcblwmIzM0Oyk7XG4mIzQzOyAgICAgICAgfVxuJiM0MzsgICAgfSBlbHNlIGlmIChXSUZFWElURUQoc3RhdHVzKSkge1xuJiM0MzsgICAgICAgIHByaW50ZihcJiMzNDtQYXJlbnQ6IENoaWxkIGV4aXRlZCB3aXRoIHN0YXR1cyAlZFxcblwmIzM0OywgV0VYSVRTVEFUVVMoc3RhdHVzKSk7XG4mIzQzOyAgICB9XG4mIzQzO1xuJiM0MzsgICAgcmV0dXJuIDA7XG4mIzQzO31cbmRpZmYgLS1naXQgYS9mcy9odWdldGxiZnMvaW5vZGUuYyBiL2ZzL2h1Z2V0bGJmcy9pbm9kZS5jXG5pbmRleCAyMTZlMWEwZGQwYjIzNy4uOGFiZTA1NzRiMWM3ZWEgMTAwNjQ0XG4tLS0gYS9mcy9odWdldGxiZnMvaW5vZGUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMvaHVnZXRsYmZzL2lub2RlLmNcbkBAIC0yNSw2ICYjNDM7MjUsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2N0eXBlLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9iYWNraW5nLWRldi5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvaHVnZXRsYi5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFwmIzM0Oy4uLy4uL21tL2h1Z2V0bGJfc3VicG9vbC5oXCYjMzQ7XG4gI2luY2x1ZGUgXHUwMDNjbGludXgvZm9saW9fYmF0Y2guaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2ZzX3BhcnNlci5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbW1hbi5oXHUwMDNlXG5AQCAtMTA1OSw3ICYjNDM7MTA2MCw2IEBAIHN0YXRpYyBpbnQgaHVnZXRsYmZzX3Nob3dfb3B0aW9ucyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHN0cnVjdCBkZW50cnkgKnJvb3QpXG4gXHRzdHJ1Y3QgaHVnZXRsYmZzX3NiX2luZm8gKnNiaW5mbyA9IEhVR0VUTEJGU19TQihyb290LVx1MDAzZWRfc2IpO1xuIFx0c3RydWN0IGh1Z2VwYWdlX3N1YnBvb2wgKnNwb29sID0gc2JpbmZvLVx1MDAzZXNwb29sO1xuIFx0dW5zaWduZWQgbG9uZyBocGFnZV9zaXplID0gaHVnZV9wYWdlX3NpemUoc2JpbmZvLVx1MDAzZWhzdGF0ZSk7XG4tXHR1bnNpZ25lZCBocGFnZV9zaGlmdCA9IGh1Z2VfcGFnZV9zaGlmdChzYmluZm8tXHUwMDNlaHN0YXRlKTtcbiBcdGNoYXIgbW9kO1xuIFxuIFx0aWYgKCF1aWRfZXEoc2JpbmZvLVx1MDAzZXVpZCwgR0xPQkFMX1JPT1RfVUlEKSlcbkBAIC0xMDgxLDEyICYjNDM7MTA4MSwxMyBAQCBzdGF0aWMgaW50IGh1Z2V0bGJmc19zaG93X29wdGlvbnMoc3RydWN0IHNlcV9maWxlICptLCBzdHJ1Y3QgZGVudHJ5ICpyb290KVxuIFx0fVxuIFx0c2VxX3ByaW50ZihtLCBcJiMzNDsscGFnZXNpemU9JWx1JWNcJiMzNDssIGhwYWdlX3NpemUsIG1vZCk7XG4gXHRpZiAoc3Bvb2wpIHtcbi1cdFx0aWYgKHNwb29sLVx1MDAzZW1heF9ocGFnZXMgIT0gLTEpXG4tXHRcdFx0c2VxX3ByaW50ZihtLCBcJiMzNDssc2l6ZT0lbGx1XCYjMzQ7LFxuLVx0XHRcdFx0ICAgKHVuc2lnbmVkIGxvbmcgbG9uZylzcG9vbC1cdTAwM2VtYXhfaHBhZ2VzIFx1MDAzY1x1MDAzYyBocGFnZV9zaGlmdCk7XG4tXHRcdGlmIChzcG9vbC1cdTAwM2VtaW5faHBhZ2VzICE9IC0xKVxuLVx0XHRcdHNlcV9wcmludGYobSwgXCYjMzQ7LG1pbl9zaXplPSVsbHVcJiMzNDssXG4tXHRcdFx0XHQgICAodW5zaWduZWQgbG9uZyBsb25nKXNwb29sLVx1MDAzZW1pbl9ocGFnZXMgXHUwMDNjXHUwMDNjIGhwYWdlX3NoaWZ0KTtcbiYjNDM7XHRcdHVuc2lnbmVkIGxvbmcgbG9uZyBtYXhfc2l6ZSA9IGh1Z2VwYWdlX3N1YnBvb2xfbWF4X3NpemUoc3Bvb2wpO1xuJiM0MztcdFx0dW5zaWduZWQgbG9uZyBsb25nIG1pbl9zaXplID0gaHVnZXBhZ2Vfc3VicG9vbF9taW5fc2l6ZShzcG9vbCk7XG4mIzQzO1xuJiM0MztcdFx0aWYgKG1heF9zaXplICE9IC0xVUxMKVxuJiM0MztcdFx0XHRzZXFfcHJpbnRmKG0sIFwmIzM0OyxzaXplPSVsbHVcJiMzNDssIG1heF9zaXplKTtcbiYjNDM7XHRcdGlmIChtaW5fc2l6ZSAhPSAtMVVMTClcbiYjNDM7XHRcdFx0c2VxX3ByaW50ZihtLCBcJiMzNDssbWluX3NpemU9JWxsdVwmIzM0OywgbWluX3NpemUpO1xuIFx0fVxuIFx0cmV0dXJuIDA7XG4gfVxuQEAgLTExMDUsMTQgJiM0MzsxMTA2LDggQEAgc3RhdGljIGludCBodWdldGxiZnNfc3RhdGZzKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGtzdGF0ZnMgKmJ1ZilcbiBcdFx0LyogSWYgbm8gbGltaXRzIHNldCwganVzdCByZXBvcnQgMCBvciAtMSBmb3IgbWF4L2ZyZWUvdXNlZFxuIFx0XHQgKiBibG9ja3MsIGxpa2Ugc2ltcGxlX3N0YXRmcygpICovXG4gXHRcdGlmIChzYmluZm8tXHUwMDNlc3Bvb2wpIHtcbi1cdFx0XHRsb25nIGZyZWVfcGFnZXM7XG4tXG4tXHRcdFx0c3Bpbl9sb2NrX2lycShcdTAwMjZzYmluZm8tXHUwMDNlc3Bvb2wtXHUwMDNlbG9jayk7XG4tXHRcdFx0YnVmLVx1MDAzZWZfYmxvY2tzID0gc2JpbmZvLVx1MDAzZXNwb29sLVx1MDAzZW1heF9ocGFnZXM7XG4tXHRcdFx0ZnJlZV9wYWdlcyA9IHNiaW5mby1cdTAwM2VzcG9vbC1cdTAwM2VtYXhfaHBhZ2VzXG4tXHRcdFx0XHQtIHNiaW5mby1cdTAwM2VzcG9vbC1cdTAwM2V1c2VkX2hwYWdlcztcbi1cdFx0XHRidWYtXHUwMDNlZl9iYXZhaWwgPSBidWYtXHUwMDNlZl9iZnJlZSA9IGZyZWVfcGFnZXM7XG4tXHRcdFx0c3Bpbl91bmxvY2tfaXJxKFx1MDAyNnNiaW5mby1cdTAwM2VzcG9vbC1cdTAwM2Vsb2NrKTtcbiYjNDM7XHRcdFx0YnVmLVx1MDAzZWZfYmxvY2tzID0gaHVnZXBhZ2Vfc3VicG9vbF9tYXhfaHBhZ2VzKHNiaW5mby1cdTAwM2VzcG9vbCk7XG4mIzQzO1x0XHRcdGJ1Zi1cdTAwM2VmX2JhdmFpbCA9IGJ1Zi1cdTAwM2VmX2JmcmVlID0gaHVnZXBhZ2Vfc3VicG9vbF9mcmVlX2hwYWdlcyhzYmluZm8tXHUwMDNlc3Bvb2wpO1xuIFx0XHRcdGJ1Zi1cdTAwM2VmX2ZpbGVzID0gc2JpbmZvLVx1MDAzZW1heF9pbm9kZXM7XG4gXHRcdFx0YnVmLVx1MDAzZWZfZmZyZWUgPSBzYmluZm8tXHUwMDNlZnJlZV9pbm9kZXM7XG4gXHRcdH1cbmRpZmYgLS1naXQgYS9odWdldGxiX3Jlc2VydmVfcGFnZXNfb3V0X3B1dF9wYWdlcy5jIGIvaHVnZXRsYl9yZXNlcnZlX3BhZ2VzX291dF9wdXRfcGFnZXMuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi45ZTYzZmM4OTk3ZDU3ZFxuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvaHVnZXRsYl9yZXNlcnZlX3BhZ2VzX291dF9wdXRfcGFnZXMuY1xuQEAgLTAsMCAmIzQzOzEsNDkgQEBcbiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbiYjNDM7I2RlZmluZSBfR05VX1NPVVJDRVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NzdGRpby5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY3N0ZGxpYi5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY3VuaXN0ZC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY3N5cy9tbWFuLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjZmNudGwuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NlcnIuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NlcnJuby5oXHUwMDNlXG4mIzQzO1xuJiM0MztpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpXG4mIzQzO3tcbiYjNDM7XHRjb25zdCBjaGFyICpmaWxlX3BhdGg7XG4mIzQzO1x0c2l6ZV90IHNpemU7XG4mIzQzO1x0aW50IGZkO1xuJiM0MztcdHZvaWQgKmFkZHI7XG4mIzQzO1xuJiM0MztcdGlmIChhcmdjIFx1MDAzYyAzKSB7XG4mIzQzO1x0XHRmcHJpbnRmKHN0ZGVyciwgXCYjMzQ7VXNhZ2U6ICVzIFx1MDAzY2h1Z2V0bGJmc19maWxlXHUwMDNlIFx1MDAzY3NpemVfaW5fYnl0ZXNcdTAwM2VcXG5cJiMzNDssXG4mIzQzO1x0XHRcdGFyZ3ZbMF0pO1xuJiM0MztcdFx0cmV0dXJuIDE7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRmaWxlX3BhdGggPSBhcmd2WzFdO1xuJiM0MztcdHNpemUgPSBzdHJ0b3VsbChhcmd2WzJdLCBOVUxMLCAwKTtcbiYjNDM7XG4mIzQzO1x0ZmQgPSBvcGVuKGZpbGVfcGF0aCwgT19DUkVBVCB8IE9fUkRXUiwgMDY2Nik7XG4mIzQzO1x0aWYgKGZkIFx1MDAzYyAwKVxuJiM0MztcdFx0ZXJyKDEsIFwmIzM0O29wZW5cJiMzNDspO1xuJiM0MztcbiYjNDM7XHRwcmludGYoXCYjMzQ7QXR0ZW1wdGluZyB0byBtbWFwICV6dSBieXRlcyBzaGFyZWQgb24gJXMuLi5cXG5cJiMzNDssIHNpemUsXG4mIzQzO1x0ICAgICAgIGZpbGVfcGF0aCk7XG4mIzQzO1x0YWRkciA9IG1tYXAoTlVMTCwgc2l6ZSwgUFJPVF9SRUFEIHwgUFJPVF9XUklURSwgTUFQX1NIQVJFRCwgZmQsIDApO1xuJiM0MztcdGlmIChhZGRyID09IE1BUF9GQUlMRUQpIHtcbiYjNDM7XHRcdGlmIChlcnJubyA9PSBFTk9NRU0pIHtcbiYjNDM7XHRcdFx0cHJpbnRmKFwmIzM0O21tYXAgZmFpbGVkIHdpdGggRU5PTUVNIGFzIGV4cGVjdGVkLlxcblwmIzM0Oyk7XG4mIzQzO1x0XHRcdGNsb3NlKGZkKTtcbiYjNDM7XHRcdFx0cmV0dXJuIDA7XG4mIzQzO1x0XHR9XG4mIzQzO1x0XHRwZXJyb3IoXCYjMzQ7bW1hcCBmYWlsZWQgd2l0aCB1bmV4cGVjdGVkIGVycm9yXCYjMzQ7KTtcbiYjNDM7XHRcdGNsb3NlKGZkKTtcbiYjNDM7XHRcdHJldHVybiAxO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cHJpbnRmKFwmIzM0O0VSUk9SOiBtbWFwIFNVQ0NFRURFRCB1bmV4cGVjdGVkbHkgYXQgJXBcXG5cJiMzNDssIGFkZHIpO1xuJiM0MztcdG11bm1hcChhZGRyLCBzaXplKTtcbiYjNDM7XHRjbG9zZShmZCk7XG4mIzQzO1x0cmV0dXJuIDE7XG4mIzQzO31cbmRpZmYgLS1naXQgYS9odWdldGxiX3Jlc2VydmVfcGFnZXNfb3V0X3B1dF9wYWdlcy5zaCBiL2h1Z2V0bGJfcmVzZXJ2ZV9wYWdlc19vdXRfcHV0X3BhZ2VzLnNoXG5uZXcgZmlsZSBtb2RlIDEwMDc1NVxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLjAzMGUxOTE1NTM5YjRlXG4tLS0gL2Rldi9udWxsXG4mIzQzOyYjNDM7JiM0MzsgYi9odWdldGxiX3Jlc2VydmVfcGFnZXNfb3V0X3B1dF9wYWdlcy5zaFxuQEAgLTAsMCAmIzQzOzEsMTUzIEBAXG4mIzQzOyMhL2Jpbi9iYXNoXG4mIzQzOyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbiYjNDM7c2V0IC1lXG4mIzQzO1xuJiM0MztpZiBbIFwmIzM0OyRFVUlEXCYjMzQ7IC1uZSAwIF07IHRoZW5cbiYjNDM7ICAgIGVjaG8gXCYjMzQ7UGxlYXNlIHJ1biBhcyByb290XCYjMzQ7XG4mIzQzOyAgICBleGl0IDFcbiYjNDM7ZmlcbiYjNDM7XG4mIzQzO1NDUklQVF9ESVI9XCYjMzQ7JChjZCBcJiMzNDskKGRpcm5hbWUgXCYjMzQ7JHtCQVNIX1NPVVJDRVswXX1cJiMzNDspXCYjMzQ7IFx1MDAyNlx1MDAyNiBwd2QpXCYjMzQ7XG4mIzQzO2NkIFwmIzM0OyRTQ1JJUFRfRElSXCYjMzQ7XG4mIzQzO1xuJiM0MzsjIERldGVjdCBkZWZhdWx0IGh1Z2VwYWdlIHNpemUgdG8gc3VwcG9ydCBib3RoIDJNQiBhbmQgMUdCIHBhZ2VzIHJvYnVzdGx5XG4mIzQzO2hwej0kKGdyZXAgLWkgaHVnZXBhZ2VzaXplIC9wcm9jL21lbWluZm8gfCBhd2sgJiMzOTt7cHJpbnQgJDJ9JiMzOTspXG4mIzQzO2tiPSRocHpcbiYjNDM7bWI9JCgoa2IgLyAxMDI0KSlcbiYjNDM7aHBhZ2Vfc2l6ZV9ieXRlcz0kKChrYiAqIDEwMjQpKVxuJiM0MztcbiYjNDM7aHBhZ2VfZGlyPVwmIzM0O2h1Z2VwYWdlcy0ke2tifWtCXCYjMzQ7XG4mIzQzO1NZU0ZTX1BBVEg9XCYjMzQ7L3N5cy9rZXJuZWwvbW0vaHVnZXBhZ2VzLyRocGFnZV9kaXJcJiMzNDtcbiYjNDM7XG4mIzQzO01OVF9QQVRIPVwmIzM0Oy90bXAvbW50X2h1Z2V0bGJfcmVwcm9cJiMzNDtcbiYjNDM7RklMRV9QQVRIPVwmIzM0OyRNTlRfUEFUSC90ZXN0X2ZpbGVcJiMzNDtcbiYjNDM7XG4mIzQzOyMgU2F2ZSBvcmlnaW5hbCB2YWx1ZXMgZm9yIHNhZmUgcmVzdG9yYXRpb25cbiYjNDM7b3JpZ19ucj0kKGNhdCBcJiMzNDskU1lTRlNfUEFUSC9ucl9odWdlcGFnZXNcJiMzNDspXG4mIzQzO29yaWdfb3ZlcmNvbW1pdD0kKGNhdCBcJiMzNDskU1lTRlNfUEFUSC9ucl9vdmVyY29tbWl0X2h1Z2VwYWdlc1wmIzM0OylcbiYjNDM7XG4mIzQzO2NsZWFudXAoKSB7XG4mIzQzOyAgICBlY2hvIFwmIzM0O0NsZWFuaW5nIHVwLi4uXCYjMzQ7XG4mIzQzOyAgICBybSAtZiBcJiMzNDskRklMRV9QQVRIXCYjMzQ7XG4mIzQzOyAgICB1bW91bnQgXCYjMzQ7JE1OVF9QQVRIXCYjMzQ7IDJcdTAwM2UvZGV2L251bGxcbiYjNDM7ICAgIHJtZGlyIFwmIzM0OyRNTlRfUEFUSFwmIzM0OyAyXHUwMDNlL2Rldi9udWxsXG4mIzQzOyAgICBlY2hvIFwmIzM0OyRvcmlnX25yXCYjMzQ7IFx1MDAzZSBcJiMzNDskU1lTRlNfUEFUSC9ucl9odWdlcGFnZXNcJiMzNDtcbiYjNDM7ICAgIGVjaG8gXCYjMzQ7JG9yaWdfb3ZlcmNvbW1pdFwmIzM0OyBcdTAwM2UgXCYjMzQ7JFNZU0ZTX1BBVEgvbnJfb3ZlcmNvbW1pdF9odWdlcGFnZXNcJiMzNDtcbiYjNDM7ICAgIGVjaG8gXCYjMzQ7Q2xlYW51cCBkb25lLlwmIzM0O1xuJiM0Mzt9XG4mIzQzO3RyYXAgY2xlYW51cCBFWElUXG4mIzQzO1xuJiM0MzsjIFZlcmlmeSByZXByb2R1Y2VyIGJpbmFyeSBleGlzdHNcbiYjNDM7aWYgWyAhIC14IC4vaHVnZXRsYl9yZXNlcnZlX3BhZ2VzX291dF9wdXRfcGFnZXMgXTsgdGhlblxuJiM0MzsgICAgZWNobyBcJiMzNDtyZXByb2R1Y2VyIGJpbmFyeSAmIzM5Oy4vaHVnZXRsYl9yZXNlcnZlX3BhZ2VzX291dF9wdXRfcGFnZXMmIzM5OyBub3QgZm91bmQgb3Igbm90IGV4ZWN1dGFibGUuXCYjMzQ7XG4mIzQzOyAgICBlY2hvIFwmIzM0O1BsZWFzZSBjb21waWxlIGl0IGZpcnN0OiBnY2MgLXN0YXRpYyAtbyBodWdldGxiX3Jlc2VydmVfcGFnZXNfb3V0X3B1dF9wYWdlcyBodWdldGxiX3Jlc2VydmVfcGFnZXNfb3V0X3B1dF9wYWdlcy5jXCYjMzQ7XG4mIzQzOyAgICBleGl0IDFcbiYjNDM7ZmlcbiYjNDM7XG4mIzQzOyMgMS4gU2V0IGdsb2JhbCBwb29sIHN1Y2ggdGhhdCBvbmx5IHRoZSBtb3VudC10aW1lIHJlc2VydmF0aW9uIGNhbiBzdWNjZWVkXG4mIzQzO2VjaG8gMSBcdTAwM2UgXCYjMzQ7JFNZU0ZTX1BBVEgvbnJfaHVnZXBhZ2VzXCYjMzQ7XG4mIzQzO2VjaG8gMCBcdTAwM2UgXCYjMzQ7JFNZU0ZTX1BBVEgvbnJfb3ZlcmNvbW1pdF9odWdlcGFnZXNcJiMzNDtcbiYjNDM7XG4mIzQzO2luaXRpYWxfcmVzdj0kKGNhdCBcJiMzNDskU1lTRlNfUEFUSC9yZXN2X2h1Z2VwYWdlc1wmIzM0OylcbiYjNDM7ZWNobyBcJiMzNDtJbml0aWFsIHJlc3ZfaHVnZXBhZ2VzIChiZWZvcmUgbW91bnQpOiAkaW5pdGlhbF9yZXN2XCYjMzQ7XG4mIzQzO1xuJiM0MzsjIDIuIE1vdW50IHdpdGggbWluX3NpemUgPSAxIHBhZ2UsIG1heCBzaXplID0gMiBwYWdlc1xuJiM0MzttaW5fc2l6ZV9zdHI9XCYjMzQ7JHttYn1NXCYjMzQ7XG4mIzQzO21heF9zaXplX3N0cj1cJiMzNDskKChtYiAqIDIpKU1cJiMzNDtcbiYjNDM7bW1hcF9zaXplX2J5dGVzPSQoKGhwYWdlX3NpemVfYnl0ZXMgKiAyKSlcbiYjNDM7XG4mIzQzO21rZGlyIC1wIFwmIzM0OyRNTlRfUEFUSFwmIzM0O1xuJiM0MztlY2hvIFwmIzM0O01vdW50aW5nIGh1Z2V0bGJmcyB3aXRoIHBhZ2VzaXplPSR7bWJ9TSwgbWluX3NpemU9JG1pbl9zaXplX3N0ciwgc2l6ZT0kbWF4X3NpemVfc3RyLi4uXCYjMzQ7XG4mIzQzO2lmICEgbW91bnQgLXQgaHVnZXRsYmZzIC1vIFwmIzM0O3BhZ2VzaXplPSR7bWJ9TSxtaW5fc2l6ZT0kbWluX3NpemVfc3RyLHNpemU9JG1heF9zaXplX3N0clwmIzM0OyBub25lIFwmIzM0OyRNTlRfUEFUSFwmIzM0OzsgdGhlblxuJiM0MzsgICAgZWNobyBcJiMzNDtGYWlsZWQgdG8gbW91bnQgaHVnZXRsYmZzXCYjMzQ7XG4mIzQzOyAgICBleGl0IDFcbiYjNDM7ZmlcbiYjNDM7XG4mIzQzO3Jlc3ZfYWZ0ZXJfbW91bnQ9JChjYXQgXCYjMzQ7JFNZU0ZTX1BBVEgvcmVzdl9odWdlcGFnZXNcJiMzNDspXG4mIzQzO2VjaG8gXCYjMzQ7cmVzdl9odWdlcGFnZXMgYWZ0ZXIgbW91bnQ6ICRyZXN2X2FmdGVyX21vdW50XCYjMzQ7XG4mIzQzO2V4cGVjdGVkX2FmdGVyX21vdW50PSQoKGluaXRpYWxfcmVzdiAmIzQzOyAxKSlcbiYjNDM7aWYgWyBcJiMzNDskcmVzdl9hZnRlcl9tb3VudFwmIzM0OyAhPSBcJiMzNDskZXhwZWN0ZWRfYWZ0ZXJfbW91bnRcJiMzNDsgXTsgdGhlblxuJiM0MzsgICAgZWNobyBcJiMzNDtFUlJPUjogcmVzdl9odWdlcGFnZXMgaXMgbm90ICRleHBlY3RlZF9hZnRlcl9tb3VudCBhZnRlciBtb3VudCAoYWN0dWFsOiAkcmVzdl9hZnRlcl9tb3VudCkhXCYjMzQ7XG4mIzQzOyAgICBleGl0IDFcbiYjNDM7ZmlcbiYjNDM7XG4mIzQzOyMgQ2hlY2sgbW91bnQgc3RhdHMgYWZ0ZXIgbW91bnRcbiYjNDM7ZXhwZWN0ZWRfYnNpemU9JGhwYWdlX3NpemVfYnl0ZXNcbiYjNDM7YnNpemVfUz0kKHN0YXQgLWYgLWMgXCYjMzQ7JVNcJiMzNDsgXCYjMzQ7JE1OVF9QQVRIXCYjMzQ7KVxuJiM0Mztic2l6ZV9zPSQoc3RhdCAtZiAtYyBcJiMzNDslc1wmIzM0OyBcJiMzNDskTU5UX1BBVEhcJiMzNDspXG4mIzQzO2VjaG8gXCYjMzQ7TW91bnQgYmxvY2sgc2l6ZSBhZnRlciBtb3VudDogJGJzaXplX1MgLyAkYnNpemVfcyAoZXhwZWN0ZWQ6ICRleHBlY3RlZF9ic2l6ZSlcJiMzNDtcbiYjNDM7aWYgWyBcJiMzNDskYnNpemVfU1wmIzM0OyAhPSBcJiMzNDskZXhwZWN0ZWRfYnNpemVcJiMzNDsgXSBcdTAwMjZcdTAwMjYgWyBcJiMzNDskYnNpemVfc1wmIzM0OyAhPSBcJiMzNDskZXhwZWN0ZWRfYnNpemVcJiMzNDsgXTsgdGhlblxuJiM0MzsgICAgZWNobyBcJiMzNDtFUlJPUjogVW5leHBlY3RlZCBtb3VudCBibG9jayBzaXplIGFmdGVyIG1vdW50IChhY3R1YWwgUzokYnNpemVfUyBzOiRic2l6ZV9zLCBleHBlY3RlZDogJGV4cGVjdGVkX2JzaXplKVwmIzM0O1xuJiM0MzsgICAgZXhpdCAxXG4mIzQzO2ZpXG4mIzQzO1xuJiM0MzthY3R1YWxfc3RhdHNfbW91bnQ9JChzdGF0IC1mIC1jIFwmIzM0OyViICVmICVhXCYjMzQ7IFwmIzM0OyRNTlRfUEFUSFwmIzM0OylcbiYjNDM7ZXhwZWN0ZWRfc3RhdHNfbW91bnQ9XCYjMzQ7MiAyIDJcJiMzNDtcbiYjNDM7ZWNobyBcJiMzNDtNb3VudCBzdGF0cyBhZnRlciBtb3VudCAodG90YWwgZnJlZSBhdmFpbCk6ICRhY3R1YWxfc3RhdHNfbW91bnQgKGV4cGVjdGVkOiAkZXhwZWN0ZWRfc3RhdHNfbW91bnQpXCYjMzQ7XG4mIzQzO2lmIFsgXCYjMzQ7JGFjdHVhbF9zdGF0c19tb3VudFwmIzM0OyAhPSBcJiMzNDskZXhwZWN0ZWRfc3RhdHNfbW91bnRcJiMzNDsgXTsgdGhlblxuJiM0MzsgICAgZWNobyBcJiMzNDtFUlJPUjogVW5leHBlY3RlZCBtb3VudCBzdGF0cyBhZnRlciBtb3VudDogJGFjdHVhbF9zdGF0c19tb3VudCAoZXhwZWN0ZWQ6ICRleHBlY3RlZF9zdGF0c19tb3VudClcJiMzNDtcbiYjNDM7ICAgIGV4aXQgMVxuJiM0MztmaVxuJiM0MztcbiYjNDM7IyAzLiBSdW4gdGhlIHJlcHJvZHVjZXIgdG8gdHJpZ2dlciB0aGUgb3V0X3B1dF9wYWdlcyBmYWlsdXJlIHBhdGhcbiYjNDM7ZWNobyBcJiMzNDtSdW5uaW5nIHJlcHJvZHVjZXIgKGV4cGVjdGluZyBtbWFwIGZhaWx1cmUgd2l0aCBFTk9NRU0pLi4uXCYjMzQ7XG4mIzQzO2lmIC4vaHVnZXRsYl9yZXNlcnZlX3BhZ2VzX291dF9wdXRfcGFnZXMgXCYjMzQ7JEZJTEVfUEFUSFwmIzM0OyBcJiMzNDskbW1hcF9zaXplX2J5dGVzXCYjMzQ7OyB0aGVuXG4mIzQzOyAgICBlY2hvIFwmIzM0O1JlcHJvZHVjZXIgZmluaXNoZWQgc3VjY2Vzc2Z1bGx5LlwmIzM0O1xuJiM0MzsgICAgcmVzdl9hZnRlcl9tbWFwPSQoY2F0IFwmIzM0OyRTWVNGU19QQVRIL3Jlc3ZfaHVnZXBhZ2VzXCYjMzQ7KVxuJiM0MzsgICAgZWNobyBcJiMzNDtyZXN2X2h1Z2VwYWdlcyBhZnRlciBmYWlsZWQgbW1hcDogJHJlc3ZfYWZ0ZXJfbW1hcFwmIzM0O1xuJiM0MzsgICAgZXhwZWN0ZWRfYWZ0ZXJfbW1hcD0kZXhwZWN0ZWRfYWZ0ZXJfbW91bnRcbiYjNDM7ICAgIGlmIFsgXCYjMzQ7JHJlc3ZfYWZ0ZXJfbW1hcFwmIzM0OyA9IFwmIzM0OyRleHBlY3RlZF9hZnRlcl9tbWFwXCYjMzQ7IF07IHRoZW5cbiYjNDM7ICAgICAgICBlY2hvIFwmIzM0O1JFU1VMVDogb3V0X3B1dF9wYWdlcyBFWEVSQ0lTRUQgKHJlc3ZfaHVnZXBhZ2VzIHByZXNlcnZlZCBhdCAkZXhwZWN0ZWRfYWZ0ZXJfbW1hcCBhcyBleHBlY3RlZClcJiMzNDtcbiYjNDM7XG4mIzQzOyAgICAgICAgIyBDaGVjayBtb3VudCBzdGF0c1xuJiM0MzsgICAgICAgIGV4cGVjdGVkX2JzaXplPSRocGFnZV9zaXplX2J5dGVzXG4mIzQzOyAgICAgICAgYnNpemVfUz0kKHN0YXQgLWYgLWMgXCYjMzQ7JVNcJiMzNDsgXCYjMzQ7JE1OVF9QQVRIXCYjMzQ7KVxuJiM0MzsgICAgICAgIGJzaXplX3M9JChzdGF0IC1mIC1jIFwmIzM0OyVzXCYjMzQ7IFwmIzM0OyRNTlRfUEFUSFwmIzM0OylcbiYjNDM7ICAgICAgICBlY2hvIFwmIzM0O01vdW50IGJsb2NrIHNpemU6ICRic2l6ZV9TIC8gJGJzaXplX3MgKGV4cGVjdGVkOiAkZXhwZWN0ZWRfYnNpemUpXCYjMzQ7XG4mIzQzOyAgICAgICAgaWYgWyBcJiMzNDskYnNpemVfU1wmIzM0OyAhPSBcJiMzNDskZXhwZWN0ZWRfYnNpemVcJiMzNDsgXSBcdTAwMjZcdTAwMjYgWyBcJiMzNDskYnNpemVfc1wmIzM0OyAhPSBcJiMzNDskZXhwZWN0ZWRfYnNpemVcJiMzNDsgXTsgdGhlblxuJiM0MzsgICAgICAgICAgICBlY2hvIFwmIzM0O0VSUk9SOiBVbmV4cGVjdGVkIG1vdW50IGJsb2NrIHNpemUgKGFjdHVhbCBTOiRic2l6ZV9TIHM6JGJzaXplX3MsIGV4cGVjdGVkOiAkZXhwZWN0ZWRfYnNpemUpXCYjMzQ7XG4mIzQzOyAgICAgICAgICAgIGV4aXQgMVxuJiM0MzsgICAgICAgIGZpXG4mIzQzO1xuJiM0MzsgICAgICAgIGFjdHVhbF9zdGF0cz0kKHN0YXQgLWYgLWMgXCYjMzQ7JWIgJWYgJWFcJiMzNDsgXCYjMzQ7JE1OVF9QQVRIXCYjMzQ7KVxuJiM0MzsgICAgICAgIGV4cGVjdGVkX3N0YXRzPVwmIzM0OzIgMiAyXCYjMzQ7XG4mIzQzOyAgICAgICAgZWNobyBcJiMzNDtNb3VudCBzdGF0cyAodG90YWwgZnJlZSBhdmFpbCk6ICRhY3R1YWxfc3RhdHMgKGV4cGVjdGVkOiAkZXhwZWN0ZWRfc3RhdHMpXCYjMzQ7XG4mIzQzOyAgICAgICAgaWYgWyBcJiMzNDskYWN0dWFsX3N0YXRzXCYjMzQ7ICE9IFwmIzM0OyRleHBlY3RlZF9zdGF0c1wmIzM0OyBdOyB0aGVuXG4mIzQzOyAgICAgICAgICAgIGVjaG8gXCYjMzQ7UkVTVUxUOiBVbmV4cGVjdGVkIG1vdW50IHN0YXRzIGFmdGVyIGZhaWxlZCBtbWFwIChGQUlMKVwmIzM0O1xuJiM0MzsgICAgICAgICAgICBleGl0IDFcbiYjNDM7ICAgICAgICBlbHNlXG4mIzQzOyAgICAgICAgICAgIGVjaG8gXCYjMzQ7UkVTVUxUOiBNb3VudCBzdGF0cyByZXN0b3JlZCB0byAkZXhwZWN0ZWRfc3RhdHMgYXMgZXhwZWN0ZWQgKFBBU1MpXCYjMzQ7XG4mIzQzOyAgICAgICAgZmlcbiYjNDM7ICAgIGVsc2VcbiYjNDM7ICAgICAgICBlY2hvIFwmIzM0O1JFU1VMVDogVW5leHBlY3RlZCByZXN2X2h1Z2VwYWdlcyB2YWx1ZTogJHJlc3ZfYWZ0ZXJfbW1hcCAoZXhwZWN0ZWQ6ICRleHBlY3RlZF9hZnRlcl9tbWFwKVwmIzM0O1xuJiM0MzsgICAgICAgIGV4aXQgMVxuJiM0MzsgICAgZmlcbiYjNDM7ZWxzZVxuJiM0MzsgICAgZWNobyBcJiMzNDtGQUlMOiBSZXByb2R1Y2VyIHJldHVybmVkIG5vbi16ZXJvIChtbWFwIGRpZG4mIzM5O3QgZmFpbCB3aXRoIEVOT01FTSlcJiMzNDtcbiYjNDM7ICAgIGV4aXQgMVxuJiM0MztmaVxuJiM0MztcbiYjNDM7IyA0LiBEaXNhYmxlIHRyYXAgYW5kIGRvIG1hbnVhbCBjbGVhbnVwIHRvIGNoZWNrIGZvciBmaW5hbCB1bm1vdW50IHVuZGVyZmxvd1xuJiM0Mzt0cmFwIC0gRVhJVFxuJiM0MztcbiYjNDM7ZWNobyBcJiMzNDtVbm1vdW50aW5nLi4uXCYjMzQ7XG4mIzQzO3Vtb3VudCBcJiMzNDskTU5UX1BBVEhcJiMzNDtcbiYjNDM7cm1kaXIgXCYjMzQ7JE1OVF9QQVRIXCYjMzQ7XG4mIzQzO1xuJiM0MztmaW5hbF9yZXN2PSQoY2F0IFwmIzM0OyRTWVNGU19QQVRIL3Jlc3ZfaHVnZXBhZ2VzXCYjMzQ7KVxuJiM0MztlY2hvIFwmIzM0O0ZpbmFsIHJlc3ZfaHVnZXBhZ2VzIChhZnRlciB1bm1vdW50KTogJGZpbmFsX3Jlc3ZcJiMzNDtcbiYjNDM7XG4mIzQzOyMgUmVzdG9yZSBvcmlnaW5hbCB2YWx1ZXNcbiYjNDM7ZWNobyBcJiMzNDtSZXN0b3Jpbmcgb3JpZ2luYWwgaHVnZXBhZ2Ugc2V0dGluZ3MuLi5cJiMzNDtcbiYjNDM7ZWNobyBcJiMzNDskb3JpZ19uclwmIzM0OyBcdTAwM2UgXCYjMzQ7JFNZU0ZTX1BBVEgvbnJfaHVnZXBhZ2VzXCYjMzQ7XG4mIzQzO2VjaG8gXCYjMzQ7JG9yaWdfb3ZlcmNvbW1pdFwmIzM0OyBcdTAwM2UgXCYjMzQ7JFNZU0ZTX1BBVEgvbnJfb3ZlcmNvbW1pdF9odWdlcGFnZXNcJiMzNDtcbiYjNDM7XG4mIzQzO2lmIFsgXCYjMzQ7JGZpbmFsX3Jlc3ZcJiMzNDsgPSBcJiMzNDskaW5pdGlhbF9yZXN2XCYjMzQ7IF07IHRoZW5cbiYjNDM7ICAgIGVjaG8gXCYjMzQ7UkVTVUxUOiBTdGF0ZSByZXN0b3JlZCB0byAkaW5pdGlhbF9yZXN2IChvciBjbGVhbmVkIHVwIGlmIGZpeGVkKVwmIzM0O1xuJiM0MzsgICAgZWNobyBcJiMzNDtBTEwgRE9ORS5cJiMzNDtcbiYjNDM7ICAgIGV4aXQgMFxuJiM0MztlbHNlXG4mIzQzOyAgICBlY2hvIFwmIzM0O1JFU1VMVDogVW5kZXJmbG93L0xlYWsvSW5jb3JyZWN0IHN0YXRlIGRldGVjdGVkISAoZmluYWxfcmVzdiA9ICRmaW5hbF9yZXN2LCBleHBlY3RlZCA9ICRpbml0aWFsX3Jlc3YpXCYjMzQ7XG4mIzQzOyAgICBlY2hvIFwmIzM0O0FMTCBET05FLlwmIzM0O1xuJiM0MzsgICAgZXhpdCAxXG4mIzQzO2ZpXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9odWdldGxiLmggYi9pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaFxuaW5kZXggMmFiYWY5OTMyMWU5MGQuLjA3NGE0NTkwMzk3M2ViIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9odWdldGxiLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvaHVnZXRsYi5oXG5AQCAtMTgsNiAmIzQzOzE4LDcgQEBcbiBcbiBzdHJ1Y3QgbW11X2dhdGhlcjtcbiBzdHJ1Y3Qgbm9kZTtcbiYjNDM7c3RydWN0IGhzdGF0ZTtcbiBcbiB2b2lkIGZyZWVfaHVnZV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcbiBcbkBAIC0zNCwxNyAmIzQzOzM1LDcgQEAgdm9pZCBmcmVlX2h1Z2VfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbyk7XG4gICovXG4gI2RlZmluZSBfX05SX1VTRURfU1VCUEFHRSAzXG4gXG4tc3RydWN0IGh1Z2VwYWdlX3N1YnBvb2wge1xuLVx0c3BpbmxvY2tfdCBsb2NrO1xuLVx0bG9uZyBjb3VudDtcbi1cdGxvbmcgbWF4X2hwYWdlcztcdC8qIE1heGltdW0gaHVnZSBwYWdlcyBvciAtMSBpZiBubyBtYXhpbXVtLiAqL1xuLVx0bG9uZyB1c2VkX2hwYWdlcztcdC8qIFVzZWQgY291bnQgYWdhaW5zdCBtYXhpbXVtLCBpbmNsdWRlcyAqL1xuLVx0XHRcdFx0LyogYm90aCBhbGxvY2F0ZWQgYW5kIHJlc2VydmVkIHBhZ2VzLiAqL1xuLVx0c3RydWN0IGhzdGF0ZSAqaHN0YXRlO1xuLVx0bG9uZyBtaW5faHBhZ2VzO1x0LyogTWluaW11bSBodWdlIHBhZ2VzIG9yIC0xIGlmIG5vIG1pbmltdW0uICovXG4tXHRsb25nIHJzdl9ocGFnZXM7XHQvKiBQYWdlcyByZXNlcnZlZCBhZ2FpbnN0IGdsb2JhbCBwb29sIHRvICovXG4tXHRcdFx0XHQvKiBzYXRpc2Z5IG1pbmltdW0gc2l6ZS4gKi9cbi19O1xuJiM0MztzdHJ1Y3QgaHVnZXBhZ2Vfc3VicG9vbDtcbiBcbiBzdHJ1Y3QgcmVzdl9tYXAge1xuIFx0c3RydWN0IGtyZWYgcmVmcztcbkBAIC0xMTQsOSAmIzQzOzEwNSw3IEBAIGV4dGVybiBpbnQgaHVnZXRsYl9tYXhfaHN0YXRlIF9fcmVhZF9tb3N0bHk7XG4gI2RlZmluZSBmb3JfZWFjaF9oc3RhdGUoaCkgXFxcbiBcdGZvciAoKGgpID0gaHN0YXRlczsgKGgpIFx1MDAzYyBcdTAwMjZoc3RhdGVzW2h1Z2V0bGJfbWF4X2hzdGF0ZV07IChoKSYjNDM7JiM0MzspXG4gXG4tc3RydWN0IGh1Z2VwYWdlX3N1YnBvb2wgKmh1Z2VwYWdlX25ld19zdWJwb29sKHN0cnVjdCBoc3RhdGUgKmgsIGxvbmcgbWF4X2hwYWdlcyxcbi1cdFx0XHRcdFx0XHRsb25nIG1pbl9ocGFnZXMpO1xuLXZvaWQgaHVnZXBhZ2VfcHV0X3N1YnBvb2woc3RydWN0IGh1Z2VwYWdlX3N1YnBvb2wgKnNwb29sKTtcbiYjNDM7aW50IGh1Z2V0bGJfYWNjdF9tZW1vcnkoc3RydWN0IGhzdGF0ZSAqaCwgbG9uZyBkZWx0YSk7XG4gXG4gdm9pZCBodWdldGxiX2R1cF92bWFfcHJpdmF0ZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSk7XG4gdm9pZCBjbGVhcl92bWFfcmVzdl9odWdlX3BhZ2VzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKTtcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaCBiL2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oXG5pbmRleCBlMWY0NmEwMDE2ZmNmZC4uMjNmYmJiYzhlMTFmMjAgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmhcbkBAIC02NDEsNyAmIzQzOzY0MSwxNSBAQCBzdGF0aWMgaW5saW5lIGludCBtZW1fY2dyb3VwX2NoYXJnZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSxcbiBcdHJldHVybiBfX21lbV9jZ3JvdXBfY2hhcmdlKGZvbGlvLCBtbSwgZ2ZwKTtcbiB9XG4gXG4taW50IG1lbV9jZ3JvdXBfY2hhcmdlX2h1Z2V0bGIoc3RydWN0IGZvbGlvKiBmb2xpbywgZ2ZwX3QgZ2ZwKTtcbiYjNDM7aW50IG1lbV9jZ3JvdXBfaHVnZXRsYl90cnlfY2hhcmdlKHVuc2lnbmVkIGludCBucl9wYWdlcywgZ2ZwX3QgZ2ZwLFxuJiM0MztcdFx0XHRcdCAgc3RydWN0IG1lbV9jZ3JvdXAgKiptZW1jZ19wLFxuJiM0MztcdFx0XHRcdCAgc3RydWN0IG9ial9jZ3JvdXAgKipvYmpjZ19wKTtcbiYjNDM7dm9pZCBtZW1fY2dyb3VwX2h1Z2V0bGJfY29tbWl0X2NoYXJnZShzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuJiM0MztcdFx0XHRcdCAgICAgIHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcbiYjNDM7XHRcdFx0XHQgICAgICBzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2cpO1xuJiM0Mzt2b2lkIG1lbV9jZ3JvdXBfaHVnZXRsYl9jYW5jZWxfY2hhcmdlKHVuc2lnbmVkIGludCBucl9wYWdlcyxcbiYjNDM7XHRcdFx0XHQgICAgICBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXG4mIzQzO1x0XHRcdFx0ICAgICAgc3RydWN0IG9ial9jZ3JvdXAgKm9iamNnKTtcbiBcbiBpbnQgbWVtX2Nncm91cF9zd2FwaW5fY2hhcmdlX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sIHVuc2lnbmVkIHNob3J0IGlkLFxuIFx0XHRcdFx0ICAgc3RydWN0IG1tX3N0cnVjdCAqbW0sIGdmcF90IGdmcCk7XG5AQCAtMTEyOCw5ICYjNDM7MTEzNiwyNSBAQCBzdGF0aWMgaW5saW5lIGludCBtZW1fY2dyb3VwX2NoYXJnZShzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuLXN0YXRpYyBpbmxpbmUgaW50IG1lbV9jZ3JvdXBfY2hhcmdlX2h1Z2V0bGIoc3RydWN0IGZvbGlvKiBmb2xpbywgZ2ZwX3QgZ2ZwKVxuJiM0MztzdGF0aWMgaW5saW5lIGludCBtZW1fY2dyb3VwX2h1Z2V0bGJfdHJ5X2NoYXJnZSh1bnNpZ25lZCBpbnQgbnJfcGFnZXMsIGdmcF90IGdmcCxcbiYjNDM7XHRcdFx0XHRcdFx0c3RydWN0IG1lbV9jZ3JvdXAgKiptZW1jZ19wLFxuJiM0MztcdFx0XHRcdFx0XHRzdHJ1Y3Qgb2JqX2Nncm91cCAqKm9iamNnX3ApXG4mIzQzO3tcbiYjNDM7XHQqbWVtY2dfcCA9IE5VTEw7XG4mIzQzO1x0Km9iamNnX3AgPSBOVUxMO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgbWVtX2Nncm91cF9odWdldGxiX2NvbW1pdF9jaGFyZ2Uoc3RydWN0IGZvbGlvICpmb2xpbyxcbiYjNDM7XHRcdFx0XHRcdFx0ICAgIHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcbiYjNDM7XHRcdFx0XHRcdFx0ICAgIHN0cnVjdCBvYmpfY2dyb3VwICpvYmpjZylcbiYjNDM7e1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgbWVtX2Nncm91cF9odWdldGxiX2NhbmNlbF9jaGFyZ2UodW5zaWduZWQgaW50IG5yX3BhZ2VzLFxuJiM0MztcdFx0XHRcdFx0XHQgICAgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxuJiM0MztcdFx0XHRcdFx0XHQgICAgc3RydWN0IG9ial9jZ3JvdXAgKm9iamNnKVxuIHtcbi0gICAgICAgIHJldHVybiAwO1xuIH1cbiBcbiBzdGF0aWMgaW5saW5lIGludCBtZW1fY2dyb3VwX3N3YXBpbl9jaGFyZ2VfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbyxcbmRpZmYgLS1naXQgYS9tbS9NYWtlZmlsZSBiL21tL01ha2VmaWxlXG5pbmRleCBlZmY5ZjllN2UwNjFjMS4uMzk2NWM5NTllNTA5OTIgMTAwNjQ0XG4tLS0gYS9tbS9NYWtlZmlsZVxuJiM0MzsmIzQzOyYjNDM7IGIvbW0vTWFrZWZpbGVcbkBAIC03OCw3ICYjNDM7NzgsNyBAQCBlbmRpZlxuIG9iai0kKENPTkZJR19TV0FQKVx0JiM0Mzs9IHBhZ2VfaW8ubyBzd2FwX3N0YXRlLm8gc3dhcGZpbGUub1xuIG9iai0kKENPTkZJR19aU1dBUClcdCYjNDM7PSB6c3dhcC5vXG4gb2JqLSQoQ09ORklHX0hBU19ETUEpXHQmIzQzOz0gZG1hcG9vbC5vXG4tb2JqLSQoQ09ORklHX0hVR0VUTEJGUylcdCYjNDM7PSBodWdldGxiLm8gaHVnZXRsYl9zeXNmcy5vIGh1Z2V0bGJfc3lzY3RsLm9cbiYjNDM7b2JqLSQoQ09ORklHX0hVR0VUTEJGUylcdCYjNDM7PSBodWdldGxiLm8gaHVnZXRsYl9zdWJwb29sLm8gaHVnZXRsYl9zeXNmcy5vIGh1Z2V0bGJfc3lzY3RsLm9cbiBpZmRlZiBDT05GSUdfQ01BXG4gb2JqLSQoQ09ORklHX0hVR0VUTEJGUylcdCYjNDM7PSBodWdldGxiX2NtYS5vXG4gZW5kaWZcbmRpZmYgLS1naXQgYS9tbS9odWdldGxiLmMgYi9tbS9odWdldGxiLmNcbmluZGV4IDU3MTIxMmI4MDgzNWVjLi5lODdmMjZhM2UxZjNlNCAxMDA2NDRcbi0tLSBhL21tL2h1Z2V0bGIuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vaHVnZXRsYi5jXG5AQCAtMzgsNiAmIzQzOzM4LDggQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9tbV9pbmxpbmUuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3BhZGF0YS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcGdhbGxvYy5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L21lbWNvbnRyb2wuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcJiMzNDtodWdldGxiX3N1YnBvb2wuaFwmIzM0O1xuIFxuICNpbmNsdWRlIFx1MDAzY2FzbS9wYWdlLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2Nhc20vdGxiLmhcdTAwM2VcbkBAIC0xMTMsOCAmIzQzOzExNSw3IEBAIF9fY2FjaGVsaW5lX2FsaWduZWRfaW5fc21wIERFRklORV9TUElOTE9DSyhodWdldGxiX2xvY2spO1xuIHN0YXRpYyBpbnQgbnVtX2ZhdWx0X211dGV4ZXMgX19yb19hZnRlcl9pbml0O1xuIHN0cnVjdCBtdXRleCAqaHVnZXRsYl9mYXVsdF9tdXRleF90YWJsZSBfX3JvX2FmdGVyX2luaXQ7XG4gXG4tLyogRm9yd2FyZCBkZWNsYXJhdGlvbiAqL1xuLXN0YXRpYyBpbnQgaHVnZXRsYl9hY2N0X21lbW9yeShzdHJ1Y3QgaHN0YXRlICpoLCBsb25nIGRlbHRhKTtcbiYjNDM7LyogRm9yd2FyZCBkZWNsYXJhdGlvbnMgKi9cbiBzdGF0aWMgdm9pZCBodWdldGxiX3ZtYV9sb2NrX2ZyZWUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpO1xuIHN0YXRpYyB2b2lkIGh1Z2V0bGJfdm1hX2xvY2tfYWxsb2Moc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpO1xuIHN0YXRpYyB2b2lkIF9faHVnZXRsYl92bWFfdW5sb2NrX3dyaXRlX2ZyZWUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpO1xuQEAgLTEyNSwxNTYgJiM0MzsxMjYsNiBAQCBzdGF0aWMgdm9pZCBodWdldGxiX3Vuc2hhcmVfcG1kcyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbiBcdFx0dW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsIGJvb2wgdGFrZV9sb2Nrcyk7XG4gc3RhdGljIHN0cnVjdCByZXN2X21hcCAqdm1hX3Jlc3ZfbWFwKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKTtcbiBcbi1zdGF0aWMgaW5saW5lIGJvb2wgc3VicG9vbF9pc19mcmVlKHN0cnVjdCBodWdlcGFnZV9zdWJwb29sICpzcG9vbClcbi17XG4tXHRpZiAoc3Bvb2wtXHUwMDNlY291bnQpXG4tXHRcdHJldHVybiBmYWxzZTtcbi1cdGlmIChzcG9vbC1cdTAwM2VtYXhfaHBhZ2VzICE9IC0xKVxuLVx0XHRyZXR1cm4gc3Bvb2wtXHUwMDNldXNlZF9ocGFnZXMgPT0gMDtcbi1cdGlmIChzcG9vbC1cdTAwM2VtaW5faHBhZ2VzICE9IC0xKVxuLVx0XHRyZXR1cm4gc3Bvb2wtXHUwMDNlcnN2X2hwYWdlcyA9PSBzcG9vbC1cdTAwM2VtaW5faHBhZ2VzO1xuLVxuLVx0cmV0dXJuIHRydWU7XG4tfVxuLVxuLXN0YXRpYyBpbmxpbmUgdm9pZCB1bmxvY2tfb3JfcmVsZWFzZV9zdWJwb29sKHN0cnVjdCBodWdlcGFnZV9zdWJwb29sICpzcG9vbCxcbi1cdFx0XHRcdFx0XHR1bnNpZ25lZCBsb25nIGlycV9mbGFncylcbi17XG4tXHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNnNwb29sLVx1MDAzZWxvY2ssIGlycV9mbGFncyk7XG4tXG4tXHQvKiBJZiBubyBwYWdlcyBhcmUgdXNlZCwgYW5kIG5vIG90aGVyIGhhbmRsZXMgdG8gdGhlIHN1YnBvb2xcbi1cdCAqIHJlbWFpbiwgZ2l2ZSB1cCBhbnkgcmVzZXJ2YXRpb25zIGJhc2VkIG9uIG1pbmltdW0gc2l6ZSBhbmRcbi1cdCAqIGZyZWUgdGhlIHN1YnBvb2wgKi9cbi1cdGlmIChzdWJwb29sX2lzX2ZyZWUoc3Bvb2wpKSB7XG4tXHRcdGlmIChzcG9vbC1cdTAwM2VtaW5faHBhZ2VzICE9IC0xKVxuLVx0XHRcdGh1Z2V0bGJfYWNjdF9tZW1vcnkoc3Bvb2wtXHUwMDNlaHN0YXRlLFxuLVx0XHRcdFx0XHRcdC1zcG9vbC1cdTAwM2VtaW5faHBhZ2VzKTtcbi1cdFx0a2ZyZWUoc3Bvb2wpO1xuLVx0fVxuLX1cbi1cbi1zdHJ1Y3QgaHVnZXBhZ2Vfc3VicG9vbCAqaHVnZXBhZ2VfbmV3X3N1YnBvb2woc3RydWN0IGhzdGF0ZSAqaCwgbG9uZyBtYXhfaHBhZ2VzLFxuLVx0XHRcdFx0XHRcdGxvbmcgbWluX2hwYWdlcylcbi17XG4tXHRzdHJ1Y3QgaHVnZXBhZ2Vfc3VicG9vbCAqc3Bvb2w7XG4tXG4tXHRzcG9vbCA9IGt6YWxsb2Nfb2JqKCpzcG9vbCk7XG4tXHRpZiAoIXNwb29sKVxuLVx0XHRyZXR1cm4gTlVMTDtcbi1cbi1cdHNwaW5fbG9ja19pbml0KFx1MDAyNnNwb29sLVx1MDAzZWxvY2spO1xuLVx0c3Bvb2wtXHUwMDNlY291bnQgPSAxO1xuLVx0c3Bvb2wtXHUwMDNlbWF4X2hwYWdlcyA9IG1heF9ocGFnZXM7XG4tXHRzcG9vbC1cdTAwM2Voc3RhdGUgPSBoO1xuLVx0c3Bvb2wtXHUwMDNlbWluX2hwYWdlcyA9IG1pbl9ocGFnZXM7XG4tXG4tXHRpZiAobWluX2hwYWdlcyAhPSAtMSBcdTAwMjZcdTAwMjYgaHVnZXRsYl9hY2N0X21lbW9yeShoLCBtaW5faHBhZ2VzKSkge1xuLVx0XHRrZnJlZShzcG9vbCk7XG4tXHRcdHJldHVybiBOVUxMO1xuLVx0fVxuLVx0c3Bvb2wtXHUwMDNlcnN2X2hwYWdlcyA9IG1pbl9ocGFnZXM7XG4tXG4tXHRyZXR1cm4gc3Bvb2w7XG4tfVxuLVxuLXZvaWQgaHVnZXBhZ2VfcHV0X3N1YnBvb2woc3RydWN0IGh1Z2VwYWdlX3N1YnBvb2wgKnNwb29sKVxuLXtcbi1cdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4tXG4tXHRzcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZzcG9vbC1cdTAwM2Vsb2NrLCBmbGFncyk7XG4tXHRCVUdfT04oIXNwb29sLVx1MDAzZWNvdW50KTtcbi1cdHNwb29sLVx1MDAzZWNvdW50LS07XG4tXHR1bmxvY2tfb3JfcmVsZWFzZV9zdWJwb29sKHNwb29sLCBmbGFncyk7XG4tfVxuLVxuLS8qXG4tICogU3VicG9vbCBhY2NvdW50aW5nIGZvciBhbGxvY2F0aW5nIGFuZCByZXNlcnZpbmcgcGFnZXMuXG4tICogUmV0dXJuIC1FTk9NRU0gaWYgdGhlcmUgYXJlIG5vdCBlbm91Z2ggcmVzb3VyY2VzIHRvIHNhdGlzZnkgdGhlXG4tICogcmVxdWVzdC4gIE90aGVyd2lzZSwgcmV0dXJuIHRoZSBudW1iZXIgb2YgcGFnZXMgYnkgd2hpY2ggdGhlXG4tICogZ2xvYmFsIHBvb2xzIG11c3QgYmUgYWRqdXN0ZWQgKHVwd2FyZCkuICBUaGUgcmV0dXJuZWQgdmFsdWUgbWF5XG4tICogb25seSBiZSBkaWZmZXJlbnQgdGhhbiB0aGUgcGFzc2VkIHZhbHVlIChkZWx0YSkgaW4gdGhlIGNhc2Ugd2hlcmVcbi0gKiBhIHN1YnBvb2wgbWluaW11bSBzaXplIG11c3QgYmUgbWFpbnRhaW5lZC5cbi0gKi9cbi1zdGF0aWMgbG9uZyBodWdlcGFnZV9zdWJwb29sX2dldF9wYWdlcyhzdHJ1Y3QgaHVnZXBhZ2Vfc3VicG9vbCAqc3Bvb2wsXG4tXHRcdFx0XHQgICAgICBsb25nIGRlbHRhKVxuLXtcbi1cdGxvbmcgcmV0ID0gZGVsdGE7XG4tXG4tXHRpZiAoIXNwb29sKVxuLVx0XHRyZXR1cm4gcmV0O1xuLVxuLVx0c3Bpbl9sb2NrX2lycShcdTAwMjZzcG9vbC1cdTAwM2Vsb2NrKTtcbi1cbi1cdGlmIChzcG9vbC1cdTAwM2VtYXhfaHBhZ2VzICE9IC0xKSB7XHRcdC8qIG1heGltdW0gc2l6ZSBhY2NvdW50aW5nICovXG4tXHRcdGlmICgoc3Bvb2wtXHUwMDNldXNlZF9ocGFnZXMgJiM0MzsgZGVsdGEpIFx1MDAzYz0gc3Bvb2wtXHUwMDNlbWF4X2hwYWdlcylcbi1cdFx0XHRzcG9vbC1cdTAwM2V1c2VkX2hwYWdlcyAmIzQzOz0gZGVsdGE7XG4tXHRcdGVsc2Uge1xuLVx0XHRcdHJldCA9IC1FTk9NRU07XG4tXHRcdFx0Z290byB1bmxvY2tfcmV0O1xuLVx0XHR9XG4tXHR9XG4tXG4tXHQvKiBtaW5pbXVtIHNpemUgYWNjb3VudGluZyAqL1xuLVx0aWYgKHNwb29sLVx1MDAzZW1pbl9ocGFnZXMgIT0gLTEgXHUwMDI2XHUwMDI2IHNwb29sLVx1MDAzZXJzdl9ocGFnZXMpIHtcbi1cdFx0aWYgKGRlbHRhIFx1MDAzZSBzcG9vbC1cdTAwM2Vyc3ZfaHBhZ2VzKSB7XG4tXHRcdFx0Lypcbi1cdFx0XHQgKiBBc2tpbmcgZm9yIG1vcmUgcmVzZXJ2ZXMgdGhhbiB0aG9zZSBhbHJlYWR5IHRha2VuIG9uXG4tXHRcdFx0ICogYmVoYWxmIG9mIHN1YnBvb2wuICBSZXR1cm4gZGlmZmVyZW5jZS5cbi1cdFx0XHQgKi9cbi1cdFx0XHRyZXQgPSBkZWx0YSAtIHNwb29sLVx1MDAzZXJzdl9ocGFnZXM7XG4tXHRcdFx0c3Bvb2wtXHUwMDNlcnN2X2hwYWdlcyA9IDA7XG4tXHRcdH0gZWxzZSB7XG4tXHRcdFx0cmV0ID0gMDtcdC8qIHJlc2VydmVzIGFscmVhZHkgYWNjb3VudGVkIGZvciAqL1xuLVx0XHRcdHNwb29sLVx1MDAzZXJzdl9ocGFnZXMgLT0gZGVsdGE7XG4tXHRcdH1cbi1cdH1cbi1cbi11bmxvY2tfcmV0OlxuLVx0c3Bpbl91bmxvY2tfaXJxKFx1MDAyNnNwb29sLVx1MDAzZWxvY2spO1xuLVx0cmV0dXJuIHJldDtcbi19XG4tXG4tLypcbi0gKiBTdWJwb29sIGFjY291bnRpbmcgZm9yIGZyZWVpbmcgYW5kIHVucmVzZXJ2aW5nIHBhZ2VzLlxuLSAqIFJldHVybiB0aGUgbnVtYmVyIG9mIGdsb2JhbCBwYWdlIHJlc2VydmF0aW9ucyB0aGF0IG11c3QgYmUgZHJvcHBlZC5cbi0gKiBUaGUgcmV0dXJuIHZhbHVlIG1heSBvbmx5IGJlIGRpZmZlcmVudCB0aGFuIHRoZSBwYXNzZWQgdmFsdWUgKGRlbHRhKVxuLSAqIGluIHRoZSBjYXNlIHdoZXJlIGEgc3VicG9vbCBtaW5pbXVtIHNpemUgbXVzdCBiZSBtYWludGFpbmVkLlxuLSAqL1xuLXN0YXRpYyBsb25nIGh1Z2VwYWdlX3N1YnBvb2xfcHV0X3BhZ2VzKHN0cnVjdCBodWdlcGFnZV9zdWJwb29sICpzcG9vbCxcbi1cdFx0XHRcdCAgICAgICBsb25nIGRlbHRhKVxuLXtcbi1cdGxvbmcgcmV0ID0gZGVsdGE7XG4tXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuLVxuLVx0aWYgKCFzcG9vbClcbi1cdFx0cmV0dXJuIGRlbHRhO1xuLVxuLVx0c3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2c3Bvb2wtXHUwMDNlbG9jaywgZmxhZ3MpO1xuLVxuLVx0aWYgKHNwb29sLVx1MDAzZW1heF9ocGFnZXMgIT0gLTEpXHRcdC8qIG1heGltdW0gc2l6ZSBhY2NvdW50aW5nICovXG4tXHRcdHNwb29sLVx1MDAzZXVzZWRfaHBhZ2VzIC09IGRlbHRhO1xuLVxuLVx0IC8qIG1pbmltdW0gc2l6ZSBhY2NvdW50aW5nICovXG4tXHRpZiAoc3Bvb2wtXHUwMDNlbWluX2hwYWdlcyAhPSAtMSBcdTAwMjZcdTAwMjYgc3Bvb2wtXHUwMDNldXNlZF9ocGFnZXMgXHUwMDNjIHNwb29sLVx1MDAzZW1pbl9ocGFnZXMpIHtcbi1cdFx0aWYgKHNwb29sLVx1MDAzZXJzdl9ocGFnZXMgJiM0MzsgZGVsdGEgXHUwMDNjPSBzcG9vbC1cdTAwM2VtaW5faHBhZ2VzKVxuLVx0XHRcdHJldCA9IDA7XG4tXHRcdGVsc2Vcbi1cdFx0XHRyZXQgPSBzcG9vbC1cdTAwM2Vyc3ZfaHBhZ2VzICYjNDM7IGRlbHRhIC0gc3Bvb2wtXHUwMDNlbWluX2hwYWdlcztcbi1cbi1cdFx0c3Bvb2wtXHUwMDNlcnN2X2hwYWdlcyAmIzQzOz0gZGVsdGE7XG4tXHRcdGlmIChzcG9vbC1cdTAwM2Vyc3ZfaHBhZ2VzIFx1MDAzZSBzcG9vbC1cdTAwM2VtaW5faHBhZ2VzKVxuLVx0XHRcdHNwb29sLVx1MDAzZXJzdl9ocGFnZXMgPSBzcG9vbC1cdTAwM2VtaW5faHBhZ2VzO1xuLVx0fVxuLVxuLVx0Lypcbi1cdCAqIElmIGh1Z2V0bGJmc19wdXRfc3VwZXIgY291bGRuJiMzOTt0IGZyZWUgc3Bvb2wgZHVlIHRvIGFuIG91dHN0YW5kaW5nXG4tXHQgKiBxdW90YSByZWZlcmVuY2UsIGZyZWUgaXQgbm93LlxuLVx0ICovXG4tXHR1bmxvY2tfb3JfcmVsZWFzZV9zdWJwb29sKHNwb29sLCBmbGFncyk7XG4tXG4tXHRyZXR1cm4gcmV0O1xuLX1cbi1cbiBzdGF0aWMgaW5saW5lIHN0cnVjdCBodWdlcGFnZV9zdWJwb29sICpzdWJwb29sX3ZtYShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcbiB7XG4gXHRyZXR1cm4gc3VicG9vbF9pbm9kZShmaWxlX2lub2RlKHZtYS1cdTAwM2V2bV9maWxlKSk7XG5AQCAtMjg1OCwxMSAmIzQzOzI3MDksMTMgQEAgc3RydWN0IGZvbGlvICphbGxvY19odWdldGxiX2ZvbGlvKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuIFx0c3RydWN0IGh1Z2VwYWdlX3N1YnBvb2wgKnNwb29sID0gc3VicG9vbF92bWEodm1hKTtcbiBcdHN0cnVjdCBoc3RhdGUgKmggPSBoc3RhdGVfdm1hKHZtYSk7XG4gXHRzdHJ1Y3QgZm9saW8gKmZvbGlvO1xuLVx0bG9uZyByZXR2YWwsIGdibF9jaGcsIGdibF9yZXNlcnZlO1xuJiM0MztcdGxvbmcgcmV0dmFsLCBnYmxfY2hnO1xuIFx0bWFwX2NoZ19zdGF0ZSBtYXBfY2hnO1xuIFx0aW50IHJldCwgaWR4O1xuIFx0c3RydWN0IGh1Z2V0bGJfY2dyb3VwICpoX2NnID0gTlVMTDtcbiBcdHN0cnVjdCBodWdldGxiX2Nncm91cCAqaF9jZ19yc3ZkID0gTlVMTDtcbiYjNDM7XHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtX2NnID0gTlVMTDtcbiYjNDM7XHRzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqX2NnID0gTlVMTDtcbiBcdGdmcF90IGdmcCA9IGh0bGJfYWxsb2NfbWFzayhoKSB8IF9fR0ZQX1JFVFJZX01BWUZBSUw7XG4gXG4gXHRpZHggPSBoc3RhdGVfaW5kZXgoaCk7XG5AQCAtMjkyMiw2ICYjNDM7Mjc3NSwxMSBAQCBzdHJ1Y3QgZm9saW8gKmFsbG9jX2h1Z2V0bGJfZm9saW8oc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4gXHRpZiAocmV0KVxuIFx0XHRnb3RvIG91dF91bmNoYXJnZV9jZ3JvdXBfcmVzZXJ2YXRpb247XG4gXG4mIzQzO1x0cmV0ID0gbWVtX2Nncm91cF9odWdldGxiX3RyeV9jaGFyZ2UocGFnZXNfcGVyX2h1Z2VfcGFnZShoKSwgZ2ZwLFxuJiM0MztcdFx0XHRcdFx0ICAgIFx1MDAyNm1lbV9jZywgXHUwMDI2b2JqX2NnKTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0Z290byBvdXRfdW5jaGFyZ2VfY2dyb3VwO1xuJiM0MztcbiBcdHNwaW5fbG9ja19pcnEoXHUwMDI2aHVnZXRsYl9sb2NrKTtcbiBcdC8qXG4gXHQgKiBnbGJfY2hnIGlzIHBhc3NlZCB0byBpbmRpY2F0ZSB3aGV0aGVyIG9yIG5vdCBhIHBhZ2UgbXVzdCBiZSB0YWtlblxuQEAgLTI5MzMsNyAmIzQzOzI3OTEsNyBAQCBzdHJ1Y3QgZm9saW8gKmFsbG9jX2h1Z2V0bGJfZm9saW8oc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4gXHRcdHNwaW5fdW5sb2NrX2lycShcdTAwMjZodWdldGxiX2xvY2spO1xuIFx0XHRmb2xpbyA9IGFsbG9jX2J1ZGR5X2h1Z2V0bGJfZm9saW9fd2l0aF9tcG9sKGgsIHZtYSwgYWRkcik7XG4gXHRcdGlmICghZm9saW8pXG4tXHRcdFx0Z290byBvdXRfdW5jaGFyZ2VfY2dyb3VwO1xuJiM0MztcdFx0XHRnb3RvIG91dF91bmNoYXJnZV9jZ3JvdXBfbWVtY2c7XG4gXHRcdHNwaW5fbG9ja19pcnEoXHUwMDI2aHVnZXRsYl9sb2NrKTtcbiBcdFx0bGlzdF9hZGQoXHUwMDI2Zm9saW8tXHUwMDNlbHJ1LCBcdTAwMjZoLVx1MDAzZWh1Z2VwYWdlX2FjdGl2ZWxpc3QpO1xuIFx0XHRmb2xpb19yZWZfdW5mcmVlemUoZm9saW8sIDEpO1xuQEAgLTI5NjAsNiAmIzQzOzI4MTgsOSBAQCBzdHJ1Y3QgZm9saW8gKmFsbG9jX2h1Z2V0bGJfZm9saW8oc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4gXG4gXHRzcGluX3VubG9ja19pcnEoXHUwMDI2aHVnZXRsYl9sb2NrKTtcbiBcbiYjNDM7XHRtZW1fY2dyb3VwX2h1Z2V0bGJfY29tbWl0X2NoYXJnZShmb2xpbywgbWVtX2NnLCBvYmpfY2cpO1xuJiM0MztcdGxydXZlY19zdGF0X21vZF9mb2xpbyhmb2xpbywgTlJfSFVHRVRMQiwgcGFnZXNfcGVyX2h1Z2VfcGFnZShoKSk7XG4mIzQzO1xuIFx0aHVnZXRsYl9zZXRfZm9saW9fc3VicG9vbChmb2xpbywgc3Bvb2wpO1xuIFxuIFx0aWYgKG1hcF9jaGcgIT0gTUFQX0NIR19FTkZPUkNFRCkge1xuQEAgLTI5ODcsMjEgJiM0MzsyODQ4LDEwIEBAIHN0cnVjdCBmb2xpbyAqYWxsb2NfaHVnZXRsYl9mb2xpbyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbiBcdFx0fVxuIFx0fVxuIFxuLVx0cmV0ID0gbWVtX2Nncm91cF9jaGFyZ2VfaHVnZXRsYihmb2xpbywgZ2ZwKTtcbi1cdC8qXG4tXHQgKiBVbmNvbmRpdGlvbmFsbHkgaW5jcmVtZW50IE5SX0hVR0VUTEIgaGVyZS4gSWYgaXQgdHVybnMgb3V0IHRoYXRcbi1cdCAqIG1lbV9jZ3JvdXBfY2hhcmdlX2h1Z2V0bGIgZmFpbGVkLCB0aGVuIGltbWVkaWF0ZWx5IGZyZWUgdGhlIHBhZ2UgYW5kXG4tXHQgKiBkZWNyZW1lbnQgTlJfSFVHRVRMQi5cbi1cdCAqL1xuLVx0bHJ1dmVjX3N0YXRfbW9kX2ZvbGlvKGZvbGlvLCBOUl9IVUdFVExCLCBwYWdlc19wZXJfaHVnZV9wYWdlKGgpKTtcbi1cbi1cdGlmIChyZXQgPT0gLUVOT01FTSkge1xuLVx0XHRmcmVlX2h1Z2VfZm9saW8oZm9saW8pO1xuLVx0XHRyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTtcbi1cdH1cbi1cbiBcdHJldHVybiBmb2xpbztcbiBcbiYjNDM7b3V0X3VuY2hhcmdlX2Nncm91cF9tZW1jZzpcbiYjNDM7XHRtZW1fY2dyb3VwX2h1Z2V0bGJfY2FuY2VsX2NoYXJnZShwYWdlc19wZXJfaHVnZV9wYWdlKGgpLCBtZW1fY2csIG9ial9jZyk7XG4gb3V0X3VuY2hhcmdlX2Nncm91cDpcbiBcdGh1Z2V0bGJfY2dyb3VwX3VuY2hhcmdlX2Nncm91cChpZHgsIHBhZ2VzX3Blcl9odWdlX3BhZ2UoaCksIGhfY2cpO1xuIG91dF91bmNoYXJnZV9jZ3JvdXBfcmVzZXJ2YXRpb246XG5AQCAtMzAwOSwxOSAmIzQzOzI4NTksMjggQEAgc3RydWN0IGZvbGlvICphbGxvY19odWdldGxiX2ZvbGlvKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuIFx0XHRodWdldGxiX2Nncm91cF91bmNoYXJnZV9jZ3JvdXBfcnN2ZChpZHgsIHBhZ2VzX3Blcl9odWdlX3BhZ2UoaCksXG4gXHRcdFx0XHRcdFx0ICAgIGhfY2dfcnN2ZCk7XG4gb3V0X3N1YnBvb2xfcHV0OlxuLVx0Lypcbi1cdCAqIHB1dCBwYWdlIHRvIHN1YnBvb2wgaWZmIHRoZSBxdW90YSBvZiBzdWJwb29sJiMzOTtzIHJzdl9ocGFnZXMgaXMgdXNlZFxuLVx0ICogZHVyaW5nIGh1Z2VwYWdlX3N1YnBvb2xfZ2V0X3BhZ2VzLlxuLVx0ICovXG4tXHRpZiAobWFwX2NoZyBcdTAwMjZcdTAwMjYgIWdibF9jaGcpIHtcbi1cdFx0Z2JsX3Jlc2VydmUgPSBodWdlcGFnZV9zdWJwb29sX3B1dF9wYWdlcyhzcG9vbCwgMSk7XG4tXHRcdGh1Z2V0bGJfYWNjdF9tZW1vcnkoaCwgLWdibF9yZXNlcnZlKTtcbiYjNDM7XHRpZiAobWFwX2NoZykge1xuJiM0MztcdFx0bG9uZyBnYmxfcmVzZXJ2ZSA9IGh1Z2VwYWdlX3N1YnBvb2xfcHV0X3BhZ2VzKHNwb29sLCAxKTtcbiYjNDM7XG4mIzQzO1x0XHRpZiAoIWdibF9jaGcpXG4mIzQzO1x0XHRcdGh1Z2V0bGJfYWNjdF9tZW1vcnkoaCwgLWdibF9yZXNlcnZlKTtcbiBcdH1cbiBcbiBcbiBvdXRfZW5kX3Jlc2VydmF0aW9uOlxuIFx0aWYgKG1hcF9jaGcgIT0gTUFQX0NIR19FTkZPUkNFRClcbiBcdFx0dm1hX2VuZF9yZXNlcnZhdGlvbihoLCB2bWEsIGFkZHIpO1xuJiM0MztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIFJldHVybiAtRU5PU1BDIHdoZW4gdGhpcyBmdW5jdGlvbiBmYWlscyB0byBhbGxvY2F0ZSBvclxuJiM0MztcdCAqIGNoYXJnZSBhIGh1Z2UgcGFnZS4gSWYgYSBzdGFuZGFyZCAoUEFHRV9TSVpFKSBwYWdlXG4mIzQzO1x0ICogYWxsb2NhdGlvbiBmYWlscywgdGhlIE9PTSBraWxsZXIgaXMgZ2l2ZW4gYSBjaGFuY2UgdG8gcnVuLFxuJiM0MztcdCAqIHdoaWNoIG1heSByZXNvbHZlIHRoZSBmYWlsdXJlIG9uIHJldHJ5LiBIb3dldmVyLCBmb3JcbiYjNDM7XHQgKiBIdWdlVExCIGFsbG9jYXRpb25zLCB0aGUgT09NIGtpbGxlciBpcyBub3QgdHJpZ2dlcmVkLlxuJiM0MztcdCAqIFJldHVybmluZyAtRU5PTUVNIChvciBhbnl0aGluZyByZXN1bHRpbmcgaW4gVk1fRkFVTFRfT09NKVxuJiM0MztcdCAqIHdvdWxkIGxlYWsgdG8gdGhlICNQRiBoYW5kbGVyLCBjYXVzaW5nIGl0IHRvIGxvb3BcbiYjNDM7XHQgKiBpbmRlZmluaXRlbHkgcmV0cnlpbmcgdGhlIGZhdWx0LlxuJiM0MztcdCAqL1xuIFx0cmV0dXJuIEVSUl9QVFIoLUVOT1NQQyk7XG4gfVxuIFxuQEAgLTQ1OTMsNyAmIzQzOzQ0NTIsNyBAQCB1bnNpZ25lZCBsb25nIGh1Z2V0bGJfdG90YWxfcGFnZXModm9pZClcbiBcdHJldHVybiBucl90b3RhbF9wYWdlcztcbiB9XG4gXG4tc3RhdGljIGludCBodWdldGxiX2FjY3RfbWVtb3J5KHN0cnVjdCBoc3RhdGUgKmgsIGxvbmcgZGVsdGEpXG4mIzQzO2ludCBodWdldGxiX2FjY3RfbWVtb3J5KHN0cnVjdCBoc3RhdGUgKmgsIGxvbmcgZGVsdGEpXG4ge1xuIFx0aW50IHJldCA9IC1FTk9NRU07XG4gXG5AQCAtNjU0Miw3ICYjNDM7NjQwMSw3IEBAIGxvbmcgaHVnZXRsYl9yZXNlcnZlX3BhZ2VzKHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4gXHRcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuIFx0XHR2bWFfZmxhZ3NfdCB2bWFfZmxhZ3MpXG4ge1xuLVx0bG9uZyBjaGcgPSAtMSwgYWRkID0gLTEsIHNwb29sX3Jlc3YsIGdibF9yZXN2O1xuJiM0MztcdGxvbmcgY2hnID0gLTEsIGFkZCA9IC0xLCBnYmxfcmVzdjtcbiBcdHN0cnVjdCBoc3RhdGUgKmggPSBoc3RhdGVfaW5vZGUoaW5vZGUpO1xuIFx0c3RydWN0IGh1Z2VwYWdlX3N1YnBvb2wgKnNwb29sID0gc3VicG9vbF9pbm9kZShpbm9kZSk7XG4gXHRzdHJ1Y3QgcmVzdl9tYXAgKnJlc3ZfbWFwO1xuQEAgLTY2ODcsMjYgJiM0Mzs2NTQ2LDIxIEBAIGxvbmcgaHVnZXRsYl9yZXNlcnZlX3BhZ2VzKHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4gXHR9XG4gXHRyZXR1cm4gY2hnO1xuIFxuLW91dF9wdXRfcGFnZXM6XG4tXHRzcG9vbF9yZXN2ID0gY2hnIC0gZ2JsX3Jlc2VydmU7XG4tXHRpZiAoc3Bvb2xfcmVzdikge1xuLVx0XHQvKiBwdXQgc3ViIHBvb2wmIzM5O3MgcmVzZXJ2YXRpb24gYmFjaywgY2hnIC0gZ2JsX3Jlc2VydmUgKi9cbi1cdFx0Z2JsX3Jlc3YgPSBodWdlcGFnZV9zdWJwb29sX3B1dF9wYWdlcyhzcG9vbCwgc3Bvb2xfcmVzdik7XG4tXHRcdC8qXG4tXHRcdCAqIHN1YnBvb2wmIzM5O3MgcmVzZXJ2ZWQgcGFnZXMgY2FuIG5vdCBiZSBwdXQgYmFjayBkdWUgdG8gcmFjZSxcbi1cdFx0ICogcmV0dXJuIHRvIGhzdGF0ZS5cbi1cdFx0ICovXG4tXHRcdGh1Z2V0bGJfYWNjdF9tZW1vcnkoaCwgLWdibF9yZXN2KTtcbi1cdH1cbi1cdC8qIFJlc3RvcmUgdXNlZF9ocGFnZXMgZm9yIHBhZ2VzIHRoYXQgZmFpbGVkIGdsb2JhbCByZXNlcnZhdGlvbiAqL1xuLVx0aWYgKGdibF9yZXNlcnZlIFx1MDAyNlx1MDAyNiBzcG9vbCkge1xuLVx0XHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuJiM0Mzsgb3V0X3B1dF9wYWdlczpcbiYjNDM7XHQvKlxuJiM0MztcdCAqIFJldHVybiBhbGwgdGhhdCB3YXMgcmVxdWVzdGVkIGZyb20gdGhlIHN1YnBvb2wsIGxldCBzdWJwb29sXG4mIzQzO1x0ICogdGVsbCB1cyB0aGUgbmV3IG51bWJlciBvZiByZXNlcnZhdGlvbnMgdGhhdCBuZWVkIHRvIGJlXG4mIzQzO1x0ICogcmV0dXJuZWQgdG8gdGhlIGdsb2JhbCBwb29sLlxuJiM0MztcdCAqL1xuJiM0MztcdGdibF9yZXN2ID0gaHVnZXBhZ2Vfc3VicG9vbF9wdXRfcGFnZXMoc3Bvb2wsIGNoZyk7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBUaGVyZSBtYXkgYmUgYSBkaWZmZXJlbmNlIGJldHdlZW4gdGhlIG51bWJlciBvZlxuJiM0MztcdCAqIHJlc2VydmF0aW9ucyB0byBjb25zdW1lIGFuZCB0aGUgbnVtYmVyIHRvIHJlc3RvcmUgbm93IGlmXG4mIzQzO1x0ICogdGhlcmUgYXJlIG11bHRpcGxlIHRocmVhZHMgaW50ZXJhY3Rpbmcgd2l0aCB0aGUgc3VicG9vbCAtXG4mIzQzO1x0ICogcmVzdG9yZSB0aGUgZGlmZmVyZW5jZS5cbiYjNDM7XHQgKi9cbiYjNDM7XHRodWdldGxiX2FjY3RfbWVtb3J5KGgsIC0oZ2JsX3Jlc3YgLSBnYmxfcmVzZXJ2ZSkpO1xuIFxuLVx0XHRzcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZzcG9vbC1cdTAwM2Vsb2NrLCBmbGFncyk7XG4tXHRcdGlmIChzcG9vbC1cdTAwM2VtYXhfaHBhZ2VzICE9IC0xKVxuLVx0XHRcdHNwb29sLVx1MDAzZXVzZWRfaHBhZ2VzIC09IGdibF9yZXNlcnZlO1xuLVx0XHR1bmxvY2tfb3JfcmVsZWFzZV9zdWJwb29sKHNwb29sLCBmbGFncyk7XG4tXHR9XG4gb3V0X3VuY2hhcmdlX2Nncm91cDpcbiBcdGh1Z2V0bGJfY2dyb3VwX3VuY2hhcmdlX2Nncm91cF9yc3ZkKGhzdGF0ZV9pbmRleChoKSxcbiBcdFx0XHRcdFx0ICAgIGNoZyAqIHBhZ2VzX3Blcl9odWdlX3BhZ2UoaCksIGhfY2cpO1xuZGlmZiAtLWdpdCBhL21tL2h1Z2V0bGJfc3VicG9vbC5jIGIvbW0vaHVnZXRsYl9zdWJwb29sLmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uZWI1NDcyYmRmMjE5MjRcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL21tL2h1Z2V0bGJfc3VicG9vbC5jXG5AQCAtMCwwICYjNDM7MSwyMjMgQEBcbiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbiYjNDM7LypcbiYjNDM7ICogU3VicG9vbCBhbmQgcmVzZXJ2ZSBhY2NvdW50aW5nIGZvciBIdWdlVExCIGZvbGlvcy5cbiYjNDM7ICogRXh0cmFjdGVkIGZyb20gbW0vaHVnZXRsYi5jXG4mIzQzOyAqL1xuJiM0MztcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvdHlwZXMuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9rZXJuZWwuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9zbGFiLmhcdTAwM2VcbiYjNDM7I2lmZGVmIF9fS0VSTkVMX19cbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvaHVnZXRsYi5oXHUwMDNlXG4mIzQzOyNlbmRpZlxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9zcGlubG9jay5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2J1Zy5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFwmIzM0O2h1Z2V0bGJfc3VicG9vbC5oXCYjMzQ7XG4mIzQzO1xuJiM0MztzdHJ1Y3QgaHVnZXBhZ2Vfc3VicG9vbCB7XG4mIzQzO1x0c3BpbmxvY2tfdCBsb2NrO1xuJiM0MztcdGxvbmcgY291bnQ7XG4mIzQzO1x0bG9uZyBtYXhfaHBhZ2VzO1x0LyogTWF4aW11bSBodWdlIHBhZ2VzIG9yIC0xIGlmIG5vIG1heGltdW0uICovXG4mIzQzO1x0bG9uZyB1c2VkX2hwYWdlcztcdC8qIFVzZWQgcGFnZSBjb3VudCwgaW5jbHVkZXMgYm90aCAqL1xuJiM0MztcdFx0XHRcdC8qIGFsbG9jYXRlZCBhbmQgcmVzZXJ2ZWQgcGFnZXMuICovXG4mIzQzO1x0c3RydWN0IGhzdGF0ZSAqaHN0YXRlO1xuJiM0MztcdGxvbmcgbWluX2hwYWdlcztcdC8qIE1pbmltdW0gaHVnZSBwYWdlcyBvciAtMSBpZiBubyBtaW5pbXVtLiAqL1xuJiM0MztcdGxvbmcgcnN2X2hwYWdlcztcdC8qIFBhZ2VzIHJlc2VydmVkIGFnYWluc3QgZ2xvYmFsIHBvb2wgdG8gKi9cbiYjNDM7XHRcdFx0XHQvKiBzYXRpc2Z5IG1pbmltdW0gc2l6ZS4gKi9cbiYjNDM7fTtcbiYjNDM7XG4mIzQzO3N0YXRpYyBpbmxpbmUgYm9vbCBzdWJwb29sX2lzX2ZyZWUoc3RydWN0IGh1Z2VwYWdlX3N1YnBvb2wgKnNwb29sKVxuJiM0Mzt7XG4mIzQzO1x0aWYgKHNwb29sLVx1MDAzZWNvdW50KVxuJiM0MztcdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gc3Bvb2wtXHUwMDNldXNlZF9ocGFnZXMgPT0gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGlubGluZSB2b2lkIHVubG9ja19vcl9yZWxlYXNlX3N1YnBvb2woc3RydWN0IGh1Z2VwYWdlX3N1YnBvb2wgKnNwb29sLFxuJiM0MztcdFx0XHRcdFx0XHR1bnNpZ25lZCBsb25nIGlycV9mbGFncylcbiYjNDM7e1xuJiM0MztcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2c3Bvb2wtXHUwMDNlbG9jaywgaXJxX2ZsYWdzKTtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBJZiBubyBwYWdlcyBhcmUgdXNlZCwgYW5kIG5vIG90aGVyIGhhbmRsZXMgdG8gdGhlIHN1YnBvb2xcbiYjNDM7XHQgKiByZW1haW4sIGdpdmUgdXAgYW55IHJlc2VydmF0aW9ucyBiYXNlZCBvbiBtaW5pbXVtIHNpemUgYW5kXG4mIzQzO1x0ICogZnJlZSB0aGUgc3VicG9vbC5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAoc3VicG9vbF9pc19mcmVlKHNwb29sKSkge1xuJiM0MztcdFx0aWYgKHNwb29sLVx1MDAzZW1pbl9ocGFnZXMgIT0gLTEpXG4mIzQzO1x0XHRcdGh1Z2V0bGJfYWNjdF9tZW1vcnkoc3Bvb2wtXHUwMDNlaHN0YXRlLFxuJiM0MztcdFx0XHRcdFx0XHQtc3Bvb2wtXHUwMDNlbWluX2hwYWdlcyk7XG4mIzQzO1x0XHRrZnJlZShzcG9vbCk7XG4mIzQzO1x0fVxuJiM0Mzt9XG4mIzQzO1xuJiM0Mztsb25nIGh1Z2VwYWdlX3N1YnBvb2xfZnJlZV9ocGFnZXMoc3RydWN0IGh1Z2VwYWdlX3N1YnBvb2wgKnNwb29sKVxuJiM0Mzt7XG4mIzQzO1x0bG9uZyBmcmVlX3BhZ2VzO1xuJiM0MztcbiYjNDM7XHRzcGluX2xvY2tfaXJxKFx1MDAyNnNwb29sLVx1MDAzZWxvY2spO1xuJiM0MztcdGlmIChzcG9vbC1cdTAwM2VtYXhfaHBhZ2VzID09IC0xKVxuJiM0MztcdFx0ZnJlZV9wYWdlcyA9IC0xO1xuJiM0MztcdGVsc2VcbiYjNDM7XHRcdGZyZWVfcGFnZXMgPSBzcG9vbC1cdTAwM2VtYXhfaHBhZ2VzIC0gc3Bvb2wtXHUwMDNldXNlZF9ocGFnZXM7XG4mIzQzO1x0c3Bpbl91bmxvY2tfaXJxKFx1MDAyNnNwb29sLVx1MDAzZWxvY2spO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gZnJlZV9wYWdlcztcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHVuc2lnbmVkIGludCBodWdlcGFnZV9zdWJwb29sX2hwYWdlX3NoaWZ0KHN0cnVjdCBodWdlcGFnZV9zdWJwb29sICpzcG9vbClcbiYjNDM7e1xuJiM0MztcdHJldHVybiBodWdlX3BhZ2Vfc2hpZnQoc3Bvb2wtXHUwMDNlaHN0YXRlKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7dW5zaWduZWQgbG9uZyBsb25nIGh1Z2VwYWdlX3N1YnBvb2xfbWF4X3NpemUoc3RydWN0IGh1Z2VwYWdlX3N1YnBvb2wgKnNwb29sKVxuJiM0Mzt7XG4mIzQzO1x0aWYgKHNwb29sLVx1MDAzZW1heF9ocGFnZXMgPT0gLTEpXG4mIzQzO1x0XHRyZXR1cm4gLTFVTEw7XG4mIzQzO1x0cmV0dXJuICh1bnNpZ25lZCBsb25nIGxvbmcpc3Bvb2wtXHUwMDNlbWF4X2hwYWdlcyBcdTAwM2NcdTAwM2MgaHVnZXBhZ2Vfc3VicG9vbF9ocGFnZV9zaGlmdChzcG9vbCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3Vuc2lnbmVkIGxvbmcgbG9uZyBodWdlcGFnZV9zdWJwb29sX21pbl9zaXplKHN0cnVjdCBodWdlcGFnZV9zdWJwb29sICpzcG9vbClcbiYjNDM7e1xuJiM0MztcdGlmIChzcG9vbC1cdTAwM2VtaW5faHBhZ2VzID09IC0xKVxuJiM0MztcdFx0cmV0dXJuIC0xVUxMO1xuJiM0MztcdHJldHVybiAodW5zaWduZWQgbG9uZyBsb25nKXNwb29sLVx1MDAzZW1pbl9ocGFnZXMgXHUwMDNjXHUwMDNjIGh1Z2VwYWdlX3N1YnBvb2xfaHBhZ2Vfc2hpZnQoc3Bvb2wpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0Mztsb25nIGh1Z2VwYWdlX3N1YnBvb2xfbWF4X2hwYWdlcyhzdHJ1Y3QgaHVnZXBhZ2Vfc3VicG9vbCAqc3Bvb2wpXG4mIzQzO3tcbiYjNDM7XHRsb25nIG1heF9ocGFnZXM7XG4mIzQzO1xuJiM0MztcdHNwaW5fbG9ja19pcnEoXHUwMDI2c3Bvb2wtXHUwMDNlbG9jayk7XG4mIzQzO1x0bWF4X2hwYWdlcyA9IHNwb29sLVx1MDAzZW1heF9ocGFnZXM7XG4mIzQzO1x0c3Bpbl91bmxvY2tfaXJxKFx1MDAyNnNwb29sLVx1MDAzZWxvY2spO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gbWF4X2hwYWdlcztcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RydWN0IGh1Z2VwYWdlX3N1YnBvb2wgKmh1Z2VwYWdlX25ld19zdWJwb29sKHN0cnVjdCBoc3RhdGUgKmgsIGxvbmcgbWF4X2hwYWdlcyxcbiYjNDM7XHRcdFx0XHRcdFx0bG9uZyBtaW5faHBhZ2VzKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGh1Z2VwYWdlX3N1YnBvb2wgKnNwb29sO1xuJiM0MztcbiYjNDM7XHRzcG9vbCA9IGt6YWxsb2Nfb2JqKCpzcG9vbCk7XG4mIzQzO1x0aWYgKCFzcG9vbClcbiYjNDM7XHRcdHJldHVybiBOVUxMO1xuJiM0MztcbiYjNDM7XHRzcGluX2xvY2tfaW5pdChcdTAwMjZzcG9vbC1cdTAwM2Vsb2NrKTtcbiYjNDM7XHRzcG9vbC1cdTAwM2Vjb3VudCA9IDE7XG4mIzQzO1x0c3Bvb2wtXHUwMDNlbWF4X2hwYWdlcyA9IG1heF9ocGFnZXM7XG4mIzQzO1x0c3Bvb2wtXHUwMDNlaHN0YXRlID0gaDtcbiYjNDM7XHRzcG9vbC1cdTAwM2VtaW5faHBhZ2VzID0gbWluX2hwYWdlcztcbiYjNDM7XG4mIzQzO1x0aWYgKG1pbl9ocGFnZXMgIT0gLTEgXHUwMDI2XHUwMDI2IGh1Z2V0bGJfYWNjdF9tZW1vcnkoaCwgbWluX2hwYWdlcykpIHtcbiYjNDM7XHRcdGtmcmVlKHNwb29sKTtcbiYjNDM7XHRcdHJldHVybiBOVUxMO1xuJiM0MztcdH1cbiYjNDM7XHRzcG9vbC1cdTAwM2Vyc3ZfaHBhZ2VzID0gbWluX2hwYWdlcztcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHNwb29sO1xuJiM0Mzt9XG4mIzQzO1xuJiM0Mzt2b2lkIGh1Z2VwYWdlX3B1dF9zdWJwb29sKHN0cnVjdCBodWdlcGFnZV9zdWJwb29sICpzcG9vbClcbiYjNDM7e1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4mIzQzO1xuJiM0MztcdHNwaW5fbG9ja19pcnFzYXZlKFx1MDAyNnNwb29sLVx1MDAzZWxvY2ssIGZsYWdzKTtcbiYjNDM7XHRCVUdfT04oIXNwb29sLVx1MDAzZWNvdW50KTtcbiYjNDM7XHRzcG9vbC1cdTAwM2Vjb3VudC0tO1xuJiM0MztcdHVubG9ja19vcl9yZWxlYXNlX3N1YnBvb2woc3Bvb2wsIGZsYWdzKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LypcbiYjNDM7ICogU3VicG9vbCBhY2NvdW50aW5nIGZvciBhbGxvY2F0aW5nIGFuZCByZXNlcnZpbmcgcGFnZXMuXG4mIzQzOyAqIFJldHVybiAtRU5PTUVNIGlmIHRoZXJlIGFyZSBub3QgZW5vdWdoIHJlc291cmNlcyB0byBzYXRpc2Z5IHRoZVxuJiM0MzsgKiByZXF1ZXN0LiAgT3RoZXJ3aXNlLCByZXR1cm4gdGhlIG51bWJlciBvZiBwYWdlcyBieSB3aGljaCB0aGVcbiYjNDM7ICogZ2xvYmFsIHBvb2xzIG11c3QgYmUgYWRqdXN0ZWQgKHVwd2FyZCkuICBUaGUgcmV0dXJuZWQgdmFsdWUgbWF5XG4mIzQzOyAqIG9ubHkgYmUgZGlmZmVyZW50IHRoYW4gdGhlIHBhc3NlZCB2YWx1ZSAoZGVsdGEpIGluIHRoZSBjYXNlIHdoZXJlXG4mIzQzOyAqIGEgc3VicG9vbCBtaW5pbXVtIHNpemUgbXVzdCBiZSBtYWludGFpbmVkLlxuJiM0MzsgKi9cbiYjNDM7bG9uZyBodWdlcGFnZV9zdWJwb29sX2dldF9wYWdlcyhzdHJ1Y3QgaHVnZXBhZ2Vfc3VicG9vbCAqc3Bvb2wsXG4mIzQzO1x0XHRcdFx0ICAgICAgbG9uZyBkZWx0YSlcbiYjNDM7e1xuJiM0MztcdGxvbmcgcmV0ID0gZGVsdGE7XG4mIzQzO1xuJiM0MztcdGlmICghc3Bvb2wpXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRzcGluX2xvY2tfaXJxKFx1MDAyNnNwb29sLVx1MDAzZWxvY2spO1xuJiM0MztcbiYjNDM7XHRpZiAoc3Bvb2wtXHUwMDNlbWF4X2hwYWdlcyAhPSAtMSBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAgc3Bvb2wtXHUwMDNldXNlZF9ocGFnZXMgJiM0MzsgZGVsdGEgXHUwMDNlIHNwb29sLVx1MDAzZW1heF9ocGFnZXMpIHtcbiYjNDM7XHRcdHJldCA9IC1FTk9NRU07XG4mIzQzO1x0XHRnb3RvIHVubG9ja19yZXQ7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRzcG9vbC1cdTAwM2V1c2VkX2hwYWdlcyAmIzQzOz0gZGVsdGE7XG4mIzQzO1xuJiM0MztcdC8qIG1pbmltdW0gc2l6ZSBhY2NvdW50aW5nICovXG4mIzQzO1x0aWYgKHNwb29sLVx1MDAzZW1pbl9ocGFnZXMgIT0gLTEgXHUwMDI2XHUwMDI2IHNwb29sLVx1MDAzZXJzdl9ocGFnZXMpIHtcbiYjNDM7XHRcdGlmIChkZWx0YSBcdTAwM2Ugc3Bvb2wtXHUwMDNlcnN2X2hwYWdlcykge1xuJiM0MztcdFx0XHQvKlxuJiM0MztcdFx0XHQgKiBBc2tpbmcgZm9yIG1vcmUgcmVzZXJ2ZXMgdGhhbiB0aG9zZSBhbHJlYWR5IHRha2VuIG9uXG4mIzQzO1x0XHRcdCAqIGJlaGFsZiBvZiBzdWJwb29sLiAgUmV0dXJuIGRpZmZlcmVuY2UuXG4mIzQzO1x0XHRcdCAqL1xuJiM0MztcdFx0XHRyZXQgPSBkZWx0YSAtIHNwb29sLVx1MDAzZXJzdl9ocGFnZXM7XG4mIzQzO1x0XHRcdHNwb29sLVx1MDAzZXJzdl9ocGFnZXMgPSAwO1xuJiM0MztcdFx0fSBlbHNlIHtcbiYjNDM7XHRcdFx0cmV0ID0gMDtcdC8qIHJlc2VydmVzIGFscmVhZHkgYWNjb3VudGVkIGZvciAqL1xuJiM0MztcdFx0XHRzcG9vbC1cdTAwM2Vyc3ZfaHBhZ2VzIC09IGRlbHRhO1xuJiM0MztcdFx0fVxuJiM0MztcdH1cbiYjNDM7XG4mIzQzO3VubG9ja19yZXQ6XG4mIzQzO1x0c3Bpbl91bmxvY2tfaXJxKFx1MDAyNnNwb29sLVx1MDAzZWxvY2spO1xuJiM0MztcdHJldHVybiByZXQ7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qXG4mIzQzOyAqIFN1YnBvb2wgYWNjb3VudGluZyBmb3IgZnJlZWluZyBhbmQgdW5yZXNlcnZpbmcgcGFnZXMuXG4mIzQzOyAqIFJldHVybiB0aGUgbnVtYmVyIG9mIGdsb2JhbCBwYWdlIHJlc2VydmF0aW9ucyB0aGF0IG11c3QgYmUgZHJvcHBlZC5cbiYjNDM7ICogVGhlIHJldHVybiB2YWx1ZSBtYXkgb25seSBiZSBkaWZmZXJlbnQgdGhhbiB0aGUgcGFzc2VkIHZhbHVlIChkZWx0YSlcbiYjNDM7ICogaW4gdGhlIGNhc2Ugd2hlcmUgYSBzdWJwb29sIG1pbmltdW0gc2l6ZSBtdXN0IGJlIG1haW50YWluZWQuXG4mIzQzOyAqL1xuJiM0Mztsb25nIGh1Z2VwYWdlX3N1YnBvb2xfcHV0X3BhZ2VzKHN0cnVjdCBodWdlcGFnZV9zdWJwb29sICpzcG9vbCxcbiYjNDM7XHRcdFx0XHQgICAgICAgbG9uZyBkZWx0YSlcbiYjNDM7e1xuJiM0MztcdGxvbmcgcmV0ID0gZGVsdGE7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBmbGFncztcbiYjNDM7XG4mIzQzO1x0aWYgKCFzcG9vbClcbiYjNDM7XHRcdHJldHVybiBkZWx0YTtcbiYjNDM7XG4mIzQzO1x0c3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2c3Bvb2wtXHUwMDNlbG9jaywgZmxhZ3MpO1xuJiM0MztcbiYjNDM7XHRzcG9vbC1cdTAwM2V1c2VkX2hwYWdlcyAtPSBkZWx0YTtcbiYjNDM7XG4mIzQzO1x0IC8qIG1pbmltdW0gc2l6ZSBhY2NvdW50aW5nICovXG4mIzQzO1x0aWYgKHNwb29sLVx1MDAzZW1pbl9ocGFnZXMgIT0gLTEgXHUwMDI2XHUwMDI2IHNwb29sLVx1MDAzZXVzZWRfaHBhZ2VzIFx1MDAzYyBzcG9vbC1cdTAwM2VtaW5faHBhZ2VzKSB7XG4mIzQzO1x0XHQvKlxuJiM0MztcdFx0ICogbGltaXQgaXMgdGhlIG1heGltdW0gbnVtYmVyIG9mIHJlc2VydmF0aW9ucyB0aGF0XG4mIzQzO1x0XHQgKiBjYW4gYmUgcmVzdG9yZWQgdG8gdGhpcyBzdWJwb29sLlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRsb25nIGxpbWl0ID0gc3Bvb2wtXHUwMDNlbWluX2hwYWdlcyAtIHNwb29sLVx1MDAzZXVzZWRfaHBhZ2VzO1xuJiM0MztcbiYjNDM7XHRcdGlmIChzcG9vbC1cdTAwM2Vyc3ZfaHBhZ2VzICYjNDM7IGRlbHRhIFx1MDAzYz0gbGltaXQpXG4mIzQzO1x0XHRcdHJldCA9IDA7XG4mIzQzO1x0XHRlbHNlXG4mIzQzO1x0XHRcdHJldCA9IHNwb29sLVx1MDAzZXJzdl9ocGFnZXMgJiM0MzsgZGVsdGEgLSBsaW1pdDtcbiYjNDM7XG4mIzQzO1x0XHRzcG9vbC1cdTAwM2Vyc3ZfaHBhZ2VzICYjNDM7PSBkZWx0YTtcbiYjNDM7XHRcdGlmIChzcG9vbC1cdTAwM2Vyc3ZfaHBhZ2VzIFx1MDAzZSBsaW1pdClcbiYjNDM7XHRcdFx0c3Bvb2wtXHUwMDNlcnN2X2hwYWdlcyA9IGxpbWl0O1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBJZiBodWdldGxiZnNfcHV0X3N1cGVyIGNvdWxkbiYjMzk7dCBmcmVlIHNwb29sIGR1ZSB0byBhbiBvdXRzdGFuZGluZ1xuJiM0MztcdCAqIHF1b3RhIHJlZmVyZW5jZSwgZnJlZSBpdCBub3cuXG4mIzQzO1x0ICovXG4mIzQzO1x0dW5sb2NrX29yX3JlbGVhc2Vfc3VicG9vbChzcG9vbCwgZmxhZ3MpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gcmV0O1xuJiM0Mzt9XG5kaWZmIC0tZ2l0IGEvbW0vaHVnZXRsYl9zdWJwb29sLmggYi9tbS9odWdldGxiX3N1YnBvb2wuaFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi40MWQyMjIzOWYyYzNlZFxuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvbW0vaHVnZXRsYl9zdWJwb29sLmhcbkBAIC0wLDAgJiM0MzsxLDIxIEBAXG4mIzQzOy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wICovXG4mIzQzOyNpZm5kZWYgX01NX0hVR0VUTEJfU1VCUE9PTF9IXG4mIzQzOyNkZWZpbmUgX01NX0hVR0VUTEJfU1VCUE9PTF9IXG4mIzQzO1xuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9zcGlubG9jay5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3R5cGVzLmhcdTAwM2VcbiYjNDM7XG4mIzQzO3N0cnVjdCBoc3RhdGU7XG4mIzQzO3N0cnVjdCBodWdlcGFnZV9zdWJwb29sO1xuJiM0MztcbiYjNDM7c3RydWN0IGh1Z2VwYWdlX3N1YnBvb2wgKmh1Z2VwYWdlX25ld19zdWJwb29sKHN0cnVjdCBoc3RhdGUgKmgsIGxvbmcgbWF4X2hwYWdlcyxcbiYjNDM7XHRcdFx0XHRcdFx0bG9uZyBtaW5faHBhZ2VzKTtcbiYjNDM7dm9pZCBodWdlcGFnZV9wdXRfc3VicG9vbChzdHJ1Y3QgaHVnZXBhZ2Vfc3VicG9vbCAqc3Bvb2wpO1xuJiM0Mztsb25nIGh1Z2VwYWdlX3N1YnBvb2xfZ2V0X3BhZ2VzKHN0cnVjdCBodWdlcGFnZV9zdWJwb29sICpzcG9vbCwgbG9uZyBkZWx0YSk7XG4mIzQzO2xvbmcgaHVnZXBhZ2Vfc3VicG9vbF9wdXRfcGFnZXMoc3RydWN0IGh1Z2VwYWdlX3N1YnBvb2wgKnNwb29sLCBsb25nIGRlbHRhKTtcbiYjNDM7bG9uZyBodWdlcGFnZV9zdWJwb29sX2ZyZWVfaHBhZ2VzKHN0cnVjdCBodWdlcGFnZV9zdWJwb29sICpzcG9vbCk7XG4mIzQzO2xvbmcgaHVnZXBhZ2Vfc3VicG9vbF9tYXhfaHBhZ2VzKHN0cnVjdCBodWdlcGFnZV9zdWJwb29sICpzcG9vbCk7XG4mIzQzO3Vuc2lnbmVkIGxvbmcgbG9uZyBodWdlcGFnZV9zdWJwb29sX21heF9zaXplKHN0cnVjdCBodWdlcGFnZV9zdWJwb29sICpzcG9vbCk7XG4mIzQzO3Vuc2lnbmVkIGxvbmcgbG9uZyBodWdlcGFnZV9zdWJwb29sX21pbl9zaXplKHN0cnVjdCBodWdlcGFnZV9zdWJwb29sICpzcG9vbCk7XG4mIzQzO1xuJiM0MzsjZW5kaWYgLyogX01NX0hVR0VUTEJfU1VCUE9PTF9IICovXG5kaWZmIC0tZ2l0IGEvbW0vbWVtY29udHJvbC5jIGIvbW0vbWVtY29udHJvbC5jXG5pbmRleCA2ZGM0ODg4YTkwZjNmZC4uNjc2NGZmMDQxYzE5NjUgMTAwNjQ0XG4tLS0gYS9tbS9tZW1jb250cm9sLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL21lbWNvbnRyb2wuY1xuQEAgLTUxNDcsMzkgJiM0Mzs1MTQ3LDExOSBAQCBpbnQgX19tZW1fY2dyb3VwX2NoYXJnZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSwgZ2ZwX3QgZ2ZwKVxuIH1cbiBcbiAvKipcbi0gKiBtZW1fY2dyb3VwX2NoYXJnZV9odWdldGxiIC0gY2hhcmdlIHRoZSBtZW1jZyBmb3IgYSBodWdldGxiIGZvbGlvXG4tICogQGZvbGlvOiBmb2xpbyBiZWluZyBjaGFyZ2VkXG4mIzQzOyAqIG1lbV9jZ3JvdXBfaHVnZXRsYl90cnlfY2hhcmdlIC0gVHJ5IHRvIGNoYXJnZSB0aGUgbWVtY2cgZm9yIGEgaHVnZXRsYiBmb2xpb1xuJiM0MzsgKiBAbnJfcGFnZXM6IG51bWJlciBvZiBiYXNlIHBhZ2VzIHRvIGNoYXJnZVxuICAqIEBnZnA6IHJlY2xhaW0gbW9kZVxuJiM0MzsgKiBAbWVtY2dfcDogT3V0cHV0IHBvaW50ZXIgdG8gdGhlIGNoYXJnZWQgbWVtX2Nncm91cCAoaWYgc3VjY2Vzc2Z1bCBhbmQgZW5hYmxlZClcbiYjNDM7ICogQG9iamNnX3A6IE91dHB1dCBwb2ludGVyIHRvIHRoZSBjaGFyZ2VkIG9ial9jZ3JvdXAgKGlmIHN1Y2Nlc3NmdWwgYW5kIGVuYWJsZWQpXG4gICpcbi0gKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aGVuIGFsbG9jYXRpbmcgYSBodWdlIHBhZ2UgZm9saW8sIGFmdGVyIHRoZSBwYWdlIGhhc1xuLSAqIGFscmVhZHkgYmVlbiBvYnRhaW5lZCBhbmQgY2hhcmdlZCB0byB0aGUgYXBwcm9wcmlhdGUgaHVnZXRsYiBjZ3JvdXBcbi0gKiBjb250cm9sbGVyIChpZiBpdCBpcyBlbmFibGVkKS5cbiYjNDM7ICogUHJlcGFyZXMgYW5kIHRyaWVzIHRvIHJlc2VydmUgdGhlIG1lbW9yeSBjb3VudGVyIGZvciB0aGUgZm9saW8gZnJvbSB0aGUgY3VycmVudFxuJiM0MzsgKiB0YXNrJiMzOTtzIG1lbWNnLiBJZiBzdWNjZXNzZnVsLCBib3RoICptZW1jZ19wIGFuZCAqb2JqY2dfcCBhcmUgcG9wdWxhdGVkIGFuZCB0aGVpclxuJiM0MzsgKiByZWZlcmVuY2VzIGFyZSBwaW5uZWQgdW50aWwgYSBzdWJzZXF1ZW50IGNhbGwgdG8gbWVtX2Nncm91cF9odWdldGxiX2NvbW1pdF9jaGFyZ2VcbiYjNDM7ICogb3IgbWVtX2Nncm91cF9odWdldGxiX2NhbmNlbF9jaGFyZ2UuXG4gICpcbiAgKiBSZXR1cm5zIEVOT01FTSBpZiB0aGUgbWVtY2cgaXMgYWxyZWFkeSBmdWxsLlxuLSAqIFJldHVybnMgMCBpZiBlaXRoZXIgdGhlIGNoYXJnZSB3YXMgc3VjY2Vzc2Z1bCwgb3IgaWYgd2Ugc2tpcCB0aGUgY2hhcmdpbmcuXG4mIzQzOyAqIFJldHVybnMgMCBpZiBlaXRoZXIgdGhlIGNoYXJnZSB3YXMgc3VjY2Vzc2Z1bCwgb3IgaWYgd2Ugc2tpcCBjaGFyZ2luZy5cbiAgKi9cbi1pbnQgbWVtX2Nncm91cF9jaGFyZ2VfaHVnZXRsYihzdHJ1Y3QgZm9saW8gKmZvbGlvLCBnZnBfdCBnZnApXG4mIzQzO2ludCBtZW1fY2dyb3VwX2h1Z2V0bGJfdHJ5X2NoYXJnZSh1bnNpZ25lZCBpbnQgbnJfcGFnZXMsIGdmcF90IGdmcCxcbiYjNDM7XHRcdFx0XHQgIHN0cnVjdCBtZW1fY2dyb3VwICoqbWVtY2dfcCxcbiYjNDM7XHRcdFx0XHQgIHN0cnVjdCBvYmpfY2dyb3VwICoqb2JqY2dfcClcbiB7XG4tXHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cgPSBnZXRfbWVtX2Nncm91cF9mcm9tX2N1cnJlbnQoKTtcbiYjNDM7XHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2c7XG4mIzQzO1x0c3RydWN0IG9ial9jZ3JvdXAgKm9iamNnO1xuIFx0aW50IHJldCA9IDA7XG4gXG4tXHQvKlxuLVx0ICogRXZlbiBtZW1jZyBkb2VzIG5vdCBhY2NvdW50IGZvciBodWdldGxiLCB3ZSBzdGlsbCB3YW50IHRvIHVwZGF0ZVxuLVx0ICogc3lzdGVtLWxldmVsIHN0YXRzIHZpYSBscnV2ZWNfc3RhdF9tb2RfZm9saW8uIFJldHVybiAwLCBhbmQgc2tpcFxuLVx0ICogY2hhcmdpbmcgdGhlIG1lbWNnLlxuLVx0ICovXG4mIzQzO1x0Km1lbWNnX3AgPSBOVUxMO1xuJiM0MztcdCpvYmpjZ19wID0gTlVMTDtcbiYjNDM7XG4gXHRpZiAobWVtX2Nncm91cF9kaXNhYmxlZCgpIHx8ICFtZW1jZ19hY2NvdW50c19odWdldGxiKCkgfHxcbi1cdFx0IW1lbWNnIHx8ICFjZ3JvdXBfc3Vic3lzX29uX2RmbChtZW1vcnlfY2dycF9zdWJzeXMpKVxuLVx0XHRnb3RvIG91dDtcbiYjNDM7XHQgICAgIWNncm91cF9zdWJzeXNfb25fZGZsKG1lbW9yeV9jZ3JwX3N1YnN5cykpXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiBcbi1cdGlmIChjaGFyZ2VfbWVtY2coZm9saW8sIG1lbWNnLCBnZnApKVxuLVx0XHRyZXQgPSAtRU5PTUVNO1xuJiM0MztcdG1lbWNnID0gZ2V0X21lbV9jZ3JvdXBfZnJvbV9jdXJyZW50KCk7XG4mIzQzO1x0aWYgKCFtZW1jZylcbiYjNDM7XHRcdHJldHVybiAwO1xuIFxuLW91dDpcbiYjNDM7XHRvYmpjZyA9IGdldF9vYmpfY2dyb3VwX2Zyb21fbWVtY2cobWVtY2cpO1xuJiM0MztcdGlmICghb2JqY2cpXG4mIzQzO1x0XHRnb3RvIHB1dF9tZW1jZztcbiYjNDM7XG4mIzQzO1x0aWYgKCFvYmpfY2dyb3VwX2lzX3Jvb3Qob2JqY2cpKSB7XG4mIzQzO1x0XHRyZXQgPSB0cnlfY2hhcmdlX21lbWNnKG1lbWNnLCBnZnAsIG5yX3BhZ2VzKTtcbiYjNDM7XHRcdGlmIChyZXQpXG4mIzQzO1x0XHRcdGdvdG8gcHV0X29iamNnO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0Km1lbWNnX3AgPSBtZW1jZztcbiYjNDM7XHQqb2JqY2dfcCA9IG9iamNnO1xuJiM0MztcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7cHV0X29iamNnOlxuJiM0MztcdG9ial9jZ3JvdXBfcHV0KG9iamNnKTtcbiYjNDM7cHV0X21lbWNnOlxuIFx0bWVtX2Nncm91cF9wdXQobWVtY2cpO1xuIFx0cmV0dXJuIHJldDtcbiB9XG4gXG4mIzQzOy8qKlxuJiM0MzsgKiBtZW1fY2dyb3VwX2h1Z2V0bGJfY29tbWl0X2NoYXJnZSAtIENvbW1pdCB0aGUgbWVtY2cgY2hhcmdlIGZvciBhIGh1Z2V0bGIgZm9saW9cbiYjNDM7ICogQGZvbGlvOiBmb2xpbyBiZWluZyBjaGFyZ2VkXG4mIzQzOyAqIEBtZW1jZzogVGFyZ2V0IG1lbV9jZ3JvdXAgb2J0YWluZWQgZnJvbSBtZW1fY2dyb3VwX2h1Z2V0bGJfdHJ5X2NoYXJnZVxuJiM0MzsgKiBAb2JqY2c6IFRhcmdldCBvYmpfY2dyb3VwIG9idGFpbmVkIGZyb20gbWVtX2Nncm91cF9odWdldGxiX3RyeV9jaGFyZ2VcbiYjNDM7ICpcbiYjNDM7ICogRmluYWxpemVzIHRoZSBtZW1vcnkgYW5kIHN0YXRpc3RpY3MgY2hhcmdpbmcgZm9yIHRoZSBmb2xpbyBpbiB0aGUgc3BlY2lmaWVkIG1lbWNnLlxuJiM0MzsgKiBUcmFuc2ZlcnMgdGhlIHBpbm5lZCBvYmpjZyByZWZlcmVuY2UgdG8gdGhlIGZvbGlvIHN0cnVjdHVyZSAoZm9yIGF1dG9tYXRpY1xuJiM0MzsgKiB1bmNoYXJnaW5nIHVwb24gZnJlZWluZyB2aWEgbWVtX2Nncm91cF91bmNoYXJnZSkuIFJlbGVhc2VzIHRoZSB0cnktY29tbWl0IHJlZmVyZW5jZVxuJiM0MzsgKiBvbiBtZW1jZy5cbiYjNDM7ICovXG4mIzQzO3ZvaWQgbWVtX2Nncm91cF9odWdldGxiX2NvbW1pdF9jaGFyZ2Uoc3RydWN0IGZvbGlvICpmb2xpbyxcbiYjNDM7XHRcdFx0XHQgICAgICBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXG4mIzQzO1x0XHRcdFx0ICAgICAgc3RydWN0IG9ial9jZ3JvdXAgKm9iamNnKVxuJiM0Mzt7XG4mIzQzO1x0aWYgKCFtZW1jZyB8fCAhb2JqY2cpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdGNvbW1pdF9jaGFyZ2UoZm9saW8sIG9iamNnKTtcbiYjNDM7XHRtZW1jZzFfY29tbWl0X2NoYXJnZShmb2xpbywgbWVtY2cpO1xuJiM0MztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIERyb3Agb3VyIHRyeS1jb21taXQtY2FuY2VsIHByb3RvY29sIHJlZmVyZW5jZSBvbiBtZW1jZy5cbiYjNDM7XHQgKiBUaGUgb2JqY2cgcmVmZXJlbmNlIGlzIFRSQU5TRkVSUkVEIHRvIHRoZSBmb2xpbyBieSBjb21taXRfY2hhcmdlLFxuJiM0MztcdCAqIHNvIGl0IHdpbGwgYmUgcHV0IGF1dG9tYXRpY2FsbHkgYnkgX19tZW1fY2dyb3VwX3VuY2hhcmdlKCkgd2hlblxuJiM0MztcdCAqIHRoZSBmb2xpbyBpcyBmcmVlZC5cbiYjNDM7XHQgKi9cbiYjNDM7XHRtZW1fY2dyb3VwX3B1dChtZW1jZyk7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiBtZW1fY2dyb3VwX2h1Z2V0bGJfY2FuY2VsX2NoYXJnZSAtIENhbmNlbCBhbmQgdW5kbyBhIGh1Z2V0bGIgZm9saW8gbWVtY2cgY2hhcmdlXG4mIzQzOyAqIEBucl9wYWdlczogbnVtYmVyIG9mIGJhc2UgcGFnZXMgdG8gdW5jaGFyZ2VcbiYjNDM7ICogQG1lbWNnOiBUYXJnZXQgbWVtX2Nncm91cCBvYnRhaW5lZCBmcm9tIG1lbV9jZ3JvdXBfaHVnZXRsYl90cnlfY2hhcmdlXG4mIzQzOyAqIEBvYmpjZzogVGFyZ2V0IG9ial9jZ3JvdXAgb2J0YWluZWQgZnJvbSBtZW1fY2dyb3VwX2h1Z2V0bGJfdHJ5X2NoYXJnZVxuJiM0MzsgKlxuJiM0MzsgKiBDYW5jZWxzIGFuZCBzYWZlbHkgcm9sbHMgYmFjayB0aGUgcHJlcGFyZWQgbWVtb3J5IGNoYXJnZSBmb3IgdGhlIGZvbGlvIGluIHRoZVxuJiM0MzsgKiBzcGVjaWZpZWQgbWVtY2cuIFJlbGVhc2VzIHRoZSB0cnktY29tbWl0IHBpbm5lZCByZWZlcmVuY2VzIG9uIGJvdGggbWVtY2cgYW5kIG9iamNnLlxuJiM0MzsgKi9cbiYjNDM7dm9pZCBtZW1fY2dyb3VwX2h1Z2V0bGJfY2FuY2VsX2NoYXJnZSh1bnNpZ25lZCBpbnQgbnJfcGFnZXMsXG4mIzQzO1x0XHRcdFx0ICAgICAgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxuJiM0MztcdFx0XHRcdCAgICAgIHN0cnVjdCBvYmpfY2dyb3VwICpvYmpjZylcbiYjNDM7e1xuJiM0MztcdGlmICghbWVtY2cgfHwgIW9iamNnKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHRpZiAoIW9ial9jZ3JvdXBfaXNfcm9vdChvYmpjZykpXG4mIzQzO1x0XHRyZWZpbGxfc3RvY2sobWVtY2csIG5yX3BhZ2VzKTtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBEcm9wIG91ciB0cnktY29tbWl0LWNhbmNlbCBwcm90b2NvbCByZWZlcmVuY2VzIG9uIGJvdGggb2JqY2dcbiYjNDM7XHQgKiBhbmQgbWVtY2csIHNpbmNlIHRoaXMgbWFwcGluZyBhdHRlbXB0IHdhcyBhYm9ydGVkIGFuZCB0aGUgZm9saW9cbiYjNDM7XHQgKiB3YXMgbmV2ZXIgY29tbWl0dGVkLlxuJiM0MztcdCAqL1xuJiM0MztcdG9ial9jZ3JvdXBfcHV0KG9iamNnKTtcbiYjNDM7XHRtZW1fY2dyb3VwX3B1dChtZW1jZyk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO1xuIC8qKlxuICAqIG1lbV9jZ3JvdXBfc3dhcGluX2NoYXJnZV9mb2xpbyAtIENoYXJnZSBhIG5ld2x5IGFsbG9jYXRlZCBmb2xpbyBmb3Igc3dhcGluLlxuICAqIEBmb2xpbzogdGhlIGZvbGlvIHRvIGNoYXJnZVxuZGlmZiAtLWdpdCBhL3N1YnBvb2xfbGVha19tYXhfc2l6ZS5zaCBiL3N1YnBvb2xfbGVha19tYXhfc2l6ZS5zaFxubmV3IGZpbGUgbW9kZSAxMDA3NTVcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi5iZmFmYTFiYTA3NGVhY1xuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvc3VicG9vbF9sZWFrX21heF9zaXplLnNoXG5AQCAtMCwwICYjNDM7MSw3MSBAQFxuJiM0MzsjIS9iaW4vYmFzaFxuJiM0MztcbiYjNDM7aWYgWyBcJiMzNDskRVVJRFwmIzM0OyAtbmUgMCBdOyB0aGVuXG4mIzQzOyAgICBlY2hvIFwmIzM0O1BsZWFzZSBydW4gYXMgcm9vdFwmIzM0O1xuJiM0MzsgICAgZXhpdCAxXG4mIzQzO2ZpXG4mIzQzO1xuJiM0MztNTlRfUEFUSD1cJiMzNDsvdG1wL21udF9odWdldGxiXCYjMzQ7XG4mIzQzO0ZJTEVfUEFUSD1cJiMzNDskTU5UX1BBVEgvdGVzdF9maWxlXCYjMzQ7XG4mIzQzO1xuJiM0MzsjIFNhdmUgb3JpZ2luYWwgdmFsdWVzXG4mIzQzO29yaWdfbnI9JChjYXQgL3N5cy9rZXJuZWwvbW0vaHVnZXBhZ2VzL2h1Z2VwYWdlcy0yMDQ4a0IvbnJfaHVnZXBhZ2VzKVxuJiM0MztvcmlnX292ZXJjb21taXQ9JChjYXQgL3N5cy9rZXJuZWwvbW0vaHVnZXBhZ2VzL2h1Z2VwYWdlcy0yMDQ4a0IvbnJfb3ZlcmNvbW1pdF9odWdlcGFnZXMpXG4mIzQzO1xuJiM0MztjbGVhbnVwKCkge1xuJiM0MzsgICAgZWNobyBcJiMzNDtDbGVhbmluZyB1cC4uLlwmIzM0O1xuJiM0MzsgICAgcm0gLWYgXCYjMzQ7JEZJTEVfUEFUSFwmIzM0O1xuJiM0MzsgICAgdW1vdW50IFwmIzM0OyRNTlRfUEFUSFwmIzM0OyAyXHUwMDNlL2Rldi9udWxsXG4mIzQzOyAgICBybWRpciBcJiMzNDskTU5UX1BBVEhcJiMzNDsgMlx1MDAzZS9kZXYvbnVsbFxuJiM0MzsgICAgZWNobyBcJiMzNDskb3JpZ19uclwmIzM0OyBcdTAwM2UgL3N5cy9rZXJuZWwvbW0vaHVnZXBhZ2VzL2h1Z2VwYWdlcy0yMDQ4a0IvbnJfaHVnZXBhZ2VzXG4mIzQzOyAgICBlY2hvIFwmIzM0OyRvcmlnX292ZXJjb21taXRcJiMzNDsgXHUwMDNlIC9zeXMva2VybmVsL21tL2h1Z2VwYWdlcy9odWdlcGFnZXMtMjA0OGtCL25yX292ZXJjb21taXRfaHVnZXBhZ2VzXG4mIzQzOyAgICBlY2hvIFwmIzM0O0NsZWFudXAgZG9uZS5cJiMzNDtcbiYjNDM7fVxuJiM0Mzt0cmFwIGNsZWFudXAgRVhJVFxuJiM0MztcbiYjNDM7IyAxLiBNb3VudCBodWdldGxiZnMgd2l0aCBzaXplPTJNICgxIHBhZ2UpXG4mIzQzO21rZGlyIC1wIFwmIzM0OyRNTlRfUEFUSFwmIzM0O1xuJiM0MztpZiAhIG1vdW50IC10IGh1Z2V0bGJmcyAtbyBzaXplPTJNIG5vbmUgXCYjMzQ7JE1OVF9QQVRIXCYjMzQ7OyB0aGVuXG4mIzQzOyAgICBlY2hvIFwmIzM0O0ZhaWxlZCB0byBtb3VudCBodWdldGxiZnNcJiMzNDtcbiYjNDM7ICAgIGV4aXQgMVxuJiM0MztmaVxuJiM0MztcbiYjNDM7IyAyLiBTZXQgbnJfaHVnZXBhZ2VzIHRvIDAsIG92ZXJjb21taXQgdG8gMFxuJiM0MztlY2hvIDAgXHUwMDNlIC9zeXMva2VybmVsL21tL2h1Z2VwYWdlcy9odWdlcGFnZXMtMjA0OGtCL25yX2h1Z2VwYWdlc1xuJiM0MztlY2hvIDAgXHUwMDNlIC9zeXMva2VybmVsL21tL2h1Z2VwYWdlcy9odWdlcGFnZXMtMjA0OGtCL25yX292ZXJjb21taXRfaHVnZXBhZ2VzXG4mIzQzO1xuJiM0MzsjIENoZWNrIHN1YnBvb2wgdXNhZ2UgYmVmb3JlIHJ1bm5pbmdcbiYjNDM7cmVhZCB0b3RhbCBmcmVlIFx1MDAzYyBcdTAwM2Moc3RhdCAtZiAtYyBcJiMzNDslYiAlZlwmIzM0OyBcJiMzNDskTU5UX1BBVEhcJiMzNDspXG4mIzQzO3VzZWRfYmVmb3JlPSQoKHRvdGFsIC0gZnJlZSkpXG4mIzQzO2VjaG8gXCYjMzQ7QmVmb3JlIHRlc3QgLSBTdWJwb29sIHRvdGFsIGJsb2NrczogJHRvdGFsXCYjMzQ7XG4mIzQzO2VjaG8gXCYjMzQ7QmVmb3JlIHRlc3QgLSBTdWJwb29sIGZyZWUgYmxvY2tzOiAgJGZyZWVcJiMzNDtcbiYjNDM7ZWNobyBcJiMzNDtCZWZvcmUgdGVzdCAtIFN1YnBvb2wgdXNlZCBibG9ja3M6ICAkdXNlZF9iZWZvcmVcJiMzNDtcbiYjNDM7aWYgWyBcJiMzNDskdXNlZF9iZWZvcmVcJiMzNDsgLW5lIDAgXTsgdGhlblxuJiM0MzsgICAgZWNobyBcJiMzNDtFUlJPUjogU3VicG9vbCBpcyBub3QgY2xlYW4gYmVmb3JlIHRlc3Qgc3RhcnRzIVwmIzM0O1xuJiM0MzsgICAgZXhpdCAxXG4mIzQzO2ZpXG4mIzQzO1xuJiM0MzsjIFJ1biBmYWxsb2NhdGUgKGV4cGVjdGluZyBmYWlsdXJlKVxuJiM0MztlY2hvIFwmIzM0O1J1bm5pbmcgZmFsbG9jYXRlIChleHBlY3RpbmcgZmFpbHVyZSkuLi5cJiMzNDtcbiYjNDM7aWYgZmFsbG9jYXRlIC1sIDJNIFwmIzM0OyRGSUxFX1BBVEhcJiMzNDsgMlx1MDAzZS9kZXYvbnVsbDsgdGhlblxuJiM0MzsgICAgZWNobyBcJiMzNDtFUlJPUjogZmFsbG9jYXRlIHN1Y2NlZWRlZCBidXQgc2hvdWxkIGhhdmUgZmFpbGVkIChucl9odWdlcGFnZXMgaXMgMClcJiMzNDtcbiYjNDM7ICAgIGV4aXQgMVxuJiM0MztmaVxuJiM0MztcbiYjNDM7IyBDaGVjayBzdWJwb29sIHVzYWdlIHZpYSBzdGF0ZnNcbiYjNDM7IyAlYjogVG90YWwgYmxvY2tzXG4mIzQzOyMgJWY6IEZyZWUgYmxvY2tzXG4mIzQzO3JlYWQgdG90YWwgZnJlZSBcdTAwM2MgXHUwMDNjKHN0YXQgLWYgLWMgXCYjMzQ7JWIgJWZcJiMzNDsgXCYjMzQ7JE1OVF9QQVRIXCYjMzQ7KVxuJiM0Mzt1c2VkPSQoKHRvdGFsIC0gZnJlZSkpXG4mIzQzO1xuJiM0MztlY2hvIFwmIzM0O1N1YnBvb2wgdG90YWwgYmxvY2tzOiAkdG90YWxcJiMzNDtcbiYjNDM7ZWNobyBcJiMzNDtTdWJwb29sIGZyZWUgYmxvY2tzOiAgJGZyZWVcJiMzNDtcbiYjNDM7ZWNobyBcJiMzNDtTdWJwb29sIHVzZWQgYmxvY2tzIChsZWFrZWQgaWYgXHUwMDNlIDApOiAkdXNlZFwmIzM0O1xuJiM0MztcbiYjNDM7aWYgWyBcJiMzNDskdXNlZFwmIzM0OyAtZ3QgMCBdOyB0aGVuXG4mIzQzOyAgICBlY2hvIFwmIzM0O1JFU1VMVDogTEVBSyBERVRFQ1RFRCAoRkFJTClcJiMzNDtcbiYjNDM7ICAgIGV4aXQgMVxuJiM0MztlbHNlXG4mIzQzOyAgICBlY2hvIFwmIzM0O1JFU1VMVDogTk8gTEVBSyAoUEFTUylcJiMzNDtcbiYjNDM7ICAgIGV4aXQgMFxuJiM0MztmaVxuZGlmZiAtLWdpdCBhL3N1YnBvb2xfc2hhcmVkX2xlYWsuYyBiL3N1YnBvb2xfc2hhcmVkX2xlYWsuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi41ODExZTE4ZDdmOGJlN1xuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvc3VicG9vbF9zaGFyZWRfbGVhay5jXG5AQCAtMCwwICYjNDM7MSwyOSBAQFxuJiM0MzsjaW5jbHVkZSBcdTAwM2NzdGRpby5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY3N0ZGxpYi5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY3VuaXN0ZC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY3N5cy9tbWFuLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjc3lzL3N0YXQuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NmY250bC5oXHUwMDNlXG4mIzQzO1xuJiM0MzsjZGVmaW5lIEhQQUdFX1NJWkUgKDIgKiAxMDI0ICogMTAyNClcbiYjNDM7XG4mIzQzO2ludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikge1xuJiM0MzsgICAgaWYgKGFyZ2MgXHUwMDNjIDIpIHtcbiYjNDM7ICAgICAgICBmcHJpbnRmKHN0ZGVyciwgXCYjMzQ7VXNhZ2U6ICVzIFx1MDAzY2ZpbGVfcGF0aFx1MDAzZVxcblwmIzM0OywgYXJndlswXSk7XG4mIzQzOyAgICAgICAgcmV0dXJuIDE7XG4mIzQzOyAgICB9XG4mIzQzOyAgICBjb25zdCBjaGFyICpmaWxlX3BhdGggPSBhcmd2WzFdO1xuJiM0MztcbiYjNDM7ICAgIGludCBmZCA9IG9wZW4oZmlsZV9wYXRoLCBPX0NSRUFUIHwgT19SRFdSLCAwNjY2KTtcbiYjNDM7ICAgIGlmIChmZCBcdTAwM2MgMCkgeyBwZXJyb3IoXCYjMzQ7b3BlblwmIzM0Oyk7IHJldHVybiAxOyB9XG4mIzQzO1xuJiM0MzsgICAgdm9pZCAqYWRkciA9IG1tYXAoTlVMTCwgMiAqIEhQQUdFX1NJWkUsIFBST1RfUkVBRCB8IFBST1RfV1JJVEUsIE1BUF9TSEFSRUQsIGZkLCAwKTtcbiYjNDM7ICAgIGlmIChhZGRyID09IE1BUF9GQUlMRUQpIHsgcGVycm9yKFwmIzM0O21tYXBcJiMzNDspOyBjbG9zZShmZCk7IHJldHVybiAxOyB9XG4mIzQzO1xuJiM0MzsgICAgKih2b2xhdGlsZSBjaGFyICopYWRkciA9IDE7IC8vIEFsbG9jYXRlIDFzdCBwYWdlIG9ubHkuIDJuZCBwYWdlIHJlbWFpbnMgdW5hbGxvY2F0ZWQgKGJ1dCByZXNlcnZlZCkuXG4mIzQzO1xuJiM0MzsgICAgbXVubWFwKGFkZHIsIDIgKiBIUEFHRV9TSVpFKTtcbiYjNDM7ICAgIGNsb3NlKGZkKTtcbiYjNDM7XG4mIzQzOyAgICByZXR1cm4gMDtcbiYjNDM7fVxuZGlmZiAtLWdpdCBhL3N1YnBvb2xfc2hhcmVkX2xlYWsuc2ggYi9zdWJwb29sX3NoYXJlZF9sZWFrLnNoXG5uZXcgZmlsZSBtb2RlIDEwMDc1NVxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLjQ2YzYyMmIxODU1OWEwXG4tLS0gL2Rldi9udWxsXG4mIzQzOyYjNDM7JiM0MzsgYi9zdWJwb29sX3NoYXJlZF9sZWFrLnNoXG5AQCAtMCwwICYjNDM7MSw4NiBAQFxuJiM0MzsjIS9iaW4vYmFzaFxuJiM0MztcbiYjNDM7aWYgWyBcJiMzNDskRVVJRFwmIzM0OyAtbmUgMCBdOyB0aGVuXG4mIzQzOyAgICBlY2hvIFwmIzM0O1BsZWFzZSBydW4gYXMgcm9vdFwmIzM0O1xuJiM0MzsgICAgZXhpdCAxXG4mIzQzO2ZpXG4mIzQzO1xuJiM0MztNTlRfUEFUSD1cJiMzNDsvdG1wL21udF9odWdldGxiX3NoYXJlZF9sZWFrXCYjMzQ7XG4mIzQzO0ZJTEVfUEFUSD1cJiMzNDskTU5UX1BBVEgvdGVzdF9maWxlXCYjMzQ7XG4mIzQzO1xuJiM0MzsjIFNhdmUgb3JpZ2luYWwgdmFsdWVzXG4mIzQzO29yaWdfbnI9JChjYXQgL3N5cy9rZXJuZWwvbW0vaHVnZXBhZ2VzL2h1Z2VwYWdlcy0yMDQ4a0IvbnJfaHVnZXBhZ2VzKVxuJiM0MztcbiYjNDM7Y2xlYW51cCgpIHtcbiYjNDM7ICAgIGVjaG8gXCYjMzQ7Q2xlYW5pbmcgdXAuLi5cJiMzNDtcbiYjNDM7ICAgIHJtIC1mIFwmIzM0OyRGSUxFX1BBVEhcJiMzNDtcbiYjNDM7ICAgIHVtb3VudCBcJiMzNDskTU5UX1BBVEhcJiMzNDsgMlx1MDAzZS9kZXYvbnVsbFxuJiM0MzsgICAgcm1kaXIgXCYjMzQ7JE1OVF9QQVRIXCYjMzQ7IDJcdTAwM2UvZGV2L251bGxcbiYjNDM7ICAgIGVjaG8gXCYjMzQ7JG9yaWdfbnJcJiMzNDsgXHUwMDNlIC9zeXMva2VybmVsL21tL2h1Z2VwYWdlcy9odWdlcGFnZXMtMjA0OGtCL25yX2h1Z2VwYWdlc1xuJiM0MzsgICAgZWNobyBcJiMzNDtDbGVhbnVwIGRvbmUuXCYjMzQ7XG4mIzQzO31cbiYjNDM7dHJhcCBjbGVhbnVwIEVYSVRcbiYjNDM7XG4mIzQzOyMgMS4gU2V0IG5yX2h1Z2VwYWdlcyB0byAyXG4mIzQzO2VjaG8gMiBcdTAwM2UgL3N5cy9rZXJuZWwvbW0vaHVnZXBhZ2VzL2h1Z2VwYWdlcy0yMDQ4a0IvbnJfaHVnZXBhZ2VzXG4mIzQzO1xuJiM0MzsjIDIuIE1vdW50IGh1Z2V0bGJmcyB3aXRoIG1pbl9zaXplPTJNICgxIHBhZ2UpXG4mIzQzO21rZGlyIC1wIFwmIzM0OyRNTlRfUEFUSFwmIzM0O1xuJiM0MztpZiAhIG1vdW50IC10IGh1Z2V0bGJmcyAtbyBtaW5fc2l6ZT0yTSBub25lIFwmIzM0OyRNTlRfUEFUSFwmIzM0OzsgdGhlblxuJiM0MzsgICAgZWNobyBcJiMzNDtGYWlsZWQgdG8gbW91bnQgaHVnZXRsYmZzXCYjMzQ7XG4mIzQzOyAgICBleGl0IDFcbiYjNDM7ZmlcbiYjNDM7XG4mIzQzOyMgQ2hlY2sgcmVzdl9odWdlcGFnZXMgYWZ0ZXIgbW91bnQgKHNob3VsZCBiZSAxKVxuJiM0Mztpbml0aWFsX3Jlc3Y9JChjYXQgL3N5cy9rZXJuZWwvbW0vaHVnZXBhZ2VzL2h1Z2VwYWdlcy0yMDQ4a0IvcmVzdl9odWdlcGFnZXMpXG4mIzQzO2VjaG8gXCYjMzQ7SW5pdGlhbCByZXN2X2h1Z2VwYWdlcyAoYWZ0ZXIgbW91bnQpOiAkaW5pdGlhbF9yZXN2XCYjMzQ7XG4mIzQzO2lmIFsgXCYjMzQ7JGluaXRpYWxfcmVzdlwmIzM0OyAtbmUgMSBdOyB0aGVuXG4mIzQzOyAgICBlY2hvIFwmIzM0O0VSUk9SOiBJbml0aWFsIHJlc3ZfaHVnZXBhZ2VzIGlzIG5vdCAxIVwmIzM0O1xuJiM0MzsgICAgZXhpdCAxXG4mIzQzO2ZpXG4mIzQzO1xuJiM0MzsjIFZlcmlmeSByZXByb2R1Y2VyIGJpbmFyeSBleGlzdHNcbiYjNDM7aWYgWyAhIC14IC4vc3VicG9vbF9zaGFyZWRfbGVhayBdOyB0aGVuXG4mIzQzOyAgICBlY2hvIFwmIzM0O3JlcHJvZHVjZXIgYmluYXJ5ICYjMzk7Li9zdWJwb29sX3NoYXJlZF9sZWFrJiMzOTsgbm90IGZvdW5kIG9yIG5vdCBleGVjdXRhYmxlLlwmIzM0O1xuJiM0MzsgICAgZWNobyBcJiMzNDtQbGVhc2UgY29tcGlsZSBpdCBmaXJzdDogZ2NjIC1zdGF0aWMgLW8gc3VicG9vbF9zaGFyZWRfbGVhayBzdWJwb29sX3NoYXJlZF9sZWFrLmNcJiMzNDtcbiYjNDM7ICAgIGV4aXQgMVxuJiM0MztmaVxuJiM0MztcbiYjNDM7IyAzLiBSdW4gaGVscGVyIHRvIG1hcCA0TUIsIGFsbG9jYXRlIDJNQiwgYW5kIGNsb3NlLlxuJiM0MzsjIFRoaXMgY3JlYXRlcyAyIHJlc2VydmF0aW9ucywgY29uc3VtZXMgMSAoYnkgYWxsb2NhdGluZyBQYWdlIDApLlxuJiM0MzsjIFRoZSB1bmFsbG9jYXRlZCBQYWdlIDEgcmVzZXJ2YXRpb24gcmVtYWlucyBhY3RpdmUgaW4gdGhlIGlub2RlJiMzOTtzIHJlc3ZfbWFwLlxuJiM0MztlY2hvIFwmIzM0O1J1bm5pbmcgaGVscGVyLi4uXCYjMzQ7XG4mIzQzOy4vc3VicG9vbF9zaGFyZWRfbGVhayBcJiMzNDskRklMRV9QQVRIXCYjMzQ7XG4mIzQzO1xuJiM0MztyZXN2X2FmdGVyX2hlbHBlcj0kKGNhdCAvc3lzL2tlcm5lbC9tbS9odWdlcGFnZXMvaHVnZXBhZ2VzLTIwNDhrQi9yZXN2X2h1Z2VwYWdlcylcbiYjNDM7ZWNobyBcJiMzNDtyZXN2X2h1Z2VwYWdlcyBhZnRlciBoZWxwZXIgKHNob3VsZCBiZSAxKTogJHJlc3ZfYWZ0ZXJfaGVscGVyXCYjMzQ7XG4mIzQzOyMgUGFnZSAwIGlzIGFsbG9jYXRlZCAobm8gbG9uZ2VyIHJlc2VydmVkKS4gUGFnZSAxIGlzIHJlc2VydmVkLlxuJiM0MzsjIFNvIHJlc3ZfaHVnZXBhZ2VzIHNob3VsZCBiZSAxLlxuJiM0MztpZiBbIFwmIzM0OyRyZXN2X2FmdGVyX2hlbHBlclwmIzM0OyAtbmUgMSBdOyB0aGVuXG4mIzQzOyAgICBlY2hvIFwmIzM0O0VSUk9SOiByZXN2X2h1Z2VwYWdlcyBpcyBub3QgMSBhZnRlciBoZWxwZXIgcnVuIVwmIzM0O1xuJiM0MzsgICAgZXhpdCAxXG4mIzQzO2ZpXG4mIzQzO1xuJiM0MzsjIDQuIFRydW5jYXRlIGZpbGUgdG8gMk1CIChyZWxlYXNlcyBQYWdlIDEgcmVzZXJ2YXRpb24pXG4mIzQzO2VjaG8gXCYjMzQ7VHJ1bmNhdGluZyBmaWxlIHRvIDJNQiAocmVsZWFzaW5nIDEgcGFnZSByZXNlcnZhdGlvbikuLi5cJiMzNDtcbiYjNDM7dHJ1bmNhdGUgLXMgMk0gXCYjMzQ7JEZJTEVfUEFUSFwmIzM0O1xuJiM0MztcbiYjNDM7IyBDaGVjayByZXN2X2h1Z2VwYWdlcyBhZnRlciB0cnVuY2F0ZS5cbiYjNDM7IyBTaW5jZSBQYWdlIDAgaXMgc3RpbGwgYWxsb2NhdGVkIChhbmQgaW4gcGFnZSBjYWNoZSksIGFuZCBzYXRpc2ZpZXMgdGhlXG4mIzQzOyMgbWluX3NpemU9Mk0gZ3VhcmFudGVlLCB3ZSBzaG91bGQgaGF2ZSAwIHJlc2VydmF0aW9ucyByZW1haW5pbmcuXG4mIzQzOyMgSWYgdGhlIGJ1ZyBpcyBwcmVzZW50LCB0aGUgdHJ1bmNhdGUgcGF0aCB3aWxsIGluY29ycmVjdGx5IHJlc3RvcmUgdGhlXG4mIzQzOyMgcmVzZXJ2YXRpb24gdG8gdGhlIHN1YnBvb2wgYW5kIHNraXAgcmVsZWFzaW5nIGl0IGdsb2JhbGx5LCBsZWF2aW5nXG4mIzQzOyMgcmVzdl9odWdlcGFnZXMgYXQgMS5cbiYjNDM7ZmluYWxfcmVzdj0kKGNhdCAvc3lzL2tlcm5lbC9tbS9odWdlcGFnZXMvaHVnZXBhZ2VzLTIwNDhrQi9yZXN2X2h1Z2VwYWdlcylcbiYjNDM7ZWNobyBcJiMzNDtGaW5hbCByZXN2X2h1Z2VwYWdlcyAoYWZ0ZXIgMk1CIHRydW5jYXRlKTogJGZpbmFsX3Jlc3ZcJiMzNDtcbiYjNDM7XG4mIzQzO2lmIFsgXCYjMzQ7JGZpbmFsX3Jlc3ZcJiMzNDsgLWVxIDEgXTsgdGhlblxuJiM0MzsgICAgZWNobyBcJiMzNDtSRVNVTFQ6IExFQUsgREVURUNURUQgKEZBSUwpXCYjMzQ7XG4mIzQzOyAgICBleGl0IDFcbiYjNDM7ZWxpZiBbIFwmIzM0OyRmaW5hbF9yZXN2XCYjMzQ7IC1lcSAwIF07IHRoZW5cbiYjNDM7ICAgIGVjaG8gXCYjMzQ7UkVTVUxUOiBOTyBMRUFLIChQQVNTKVwmIzM0O1xuJiM0MzsgICAgZXhpdCAwXG4mIzQzO2Vsc2VcbiYjNDM7ICAgIGVjaG8gXCYjMzQ7UkVTVUxUOiBVTkVYUEVDVEVEIFNUQVRFICgkZmluYWxfcmVzdilcJiMzNDtcbiYjNDM7ICAgIGV4aXQgMlxuJiM0MztmaVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3RpbmcvaHVnZXRsYl9zdWJwb29sLy5naXRpZ25vcmUgYi90b29scy90ZXN0aW5nL2h1Z2V0bGJfc3VicG9vbC8uZ2l0aWdub3JlXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLjczNDhjMmM3MmYxZTExXG4tLS0gL2Rldi9udWxsXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL2h1Z2V0bGJfc3VicG9vbC8uZ2l0aWdub3JlXG5AQCAtMCwwICYjNDM7MSBAQFxuJiM0Mzt0ZXN0X3N1YnBvb2xcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL2h1Z2V0bGJfc3VicG9vbC9NYWtlZmlsZSBiL3Rvb2xzL3Rlc3RpbmcvaHVnZXRsYl9zdWJwb29sL01ha2VmaWxlXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLjFiZGI3ZTI2MzU2MTQxXG4tLS0gL2Rldi9udWxsXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL2h1Z2V0bGJfc3VicG9vbC9NYWtlZmlsZVxuQEAgLTAsMCAmIzQzOzEsMTggQEBcbiYjNDM7IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuJiM0MzsuUEhPTlk6IGFsbCBjbGVhbiB0ZXN0XG4mIzQzO1xuJiM0MztDQyA9IGdjY1xuJiM0MztDRkxBR1MgPSAtV2FsbCAtTzIgLUkuLi9zaGFyZWQgLUkuIC1JLi4vLi4vaW5jbHVkZSAtSS4uLy4uL2FyY2gveDg2L2luY2x1ZGUgLXB0aHJlYWRcbiYjNDM7S0VSTkVMX1NVQlBPT0xfSCA9IC4uLy4uLy4uL21tL2h1Z2V0bGJfc3VicG9vbC5oXG4mIzQzO0tFUk5FTF9TVUJQT09MX0MgPSAuLi8uLi8uLi9tbS9odWdldGxiX3N1YnBvb2wuY1xuJiM0MztcbiYjNDM7YWxsOiB0ZXN0XG4mIzQzO1xuJiM0Mzt0ZXN0X3N1YnBvb2w6IHRlc3Rfc3VicG9vbC5jICQoS0VSTkVMX1NVQlBPT0xfQykgJChLRVJORUxfU1VCUE9PTF9IKVxuJiM0MztcdCQoQ0MpICQoQ0ZMQUdTKSB0ZXN0X3N1YnBvb2wuYyAtbyB0ZXN0X3N1YnBvb2xcbiYjNDM7XG4mIzQzO3Rlc3Q6IHRlc3Rfc3VicG9vbFxuJiM0MztcdC4vdGVzdF9zdWJwb29sXG4mIzQzO1xuJiM0MztjbGVhbjpcbiYjNDM7XHRybSAtZiB0ZXN0X3N1YnBvb2xcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL2h1Z2V0bGJfc3VicG9vbC90ZXN0X3N1YnBvb2wuYyBiL3Rvb2xzL3Rlc3RpbmcvaHVnZXRsYl9zdWJwb29sL3Rlc3Rfc3VicG9vbC5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLjc4OTAwMjc0Y2MyNjQ3XG4tLS0gL2Rldi9udWxsXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL2h1Z2V0bGJfc3VicG9vbC90ZXN0X3N1YnBvb2wuY1xuQEAgLTAsMCAmIzQzOzEsNDAwIEBAXG4mIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2Fzc2VydC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY3N0ZGxpYi5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3R5cGVzLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvc2xhYi5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2J1Zy5oXHUwMDNlXG4mIzQzO1xuJiM0MzsvKiBNb2NrZWQgVXNlcnNwYWNlIGltcGxlbWVudGF0aW9uIGZvciBLZXJuZWwgU3VicG9vbCBhbGxvY2F0aW9uIGRlcGVuZGVuY2llcyAqL1xuJiM0MztzdHJ1Y3QgaHN0YXRlIHtcbiYjNDM7XHRpbnQgZHVtbXk7XG4mIzQzO307XG4mIzQzO1xuJiM0MzsjdW5kZWYga3phbGxvY19vYmpcbiYjNDM7I3VuZGVmIGt6YWxsb2Nfb2Jqc1xuJiM0MzsjZGVmaW5lIGt6YWxsb2Nfb2JqKFAsIC4uLikgbWFsbG9jKHNpemVvZihQKSlcbiYjNDM7I2RlZmluZSBremFsbG9jX29ianMoUCwgQ09VTlQsIC4uLikgbWFsbG9jKHNpemVvZihQKSAqIChDT1VOVCkpXG4mIzQzO1xuJiM0MzsjZGVmaW5lIGtmcmVlIGZyZWVcbiYjNDM7I2RlZmluZSBrbWFsbG9jIG1hbGxvY1xuJiM0MztcbiYjNDM7I2RlZmluZSBodWdlX3BhZ2Vfc2hpZnQoaCkgKDIxICYjNDM7ICgwICogKCh1bnNpZ25lZCBsb25nKShoKSBcdTAwMjYgMCkpKVxuJiM0MzsjZGVmaW5lIGh1Z2VfcGFnZV9zaXplKGgpICgxVUwgXHUwMDNjXHUwMDNjIGh1Z2VfcGFnZV9zaGlmdChoKSlcbiYjNDM7XG4mIzQzO3N0YXRpYyBib29sIGh1Z2V0bGJfYWNjdF9tZW1vcnlfY2FsbGVkO1xuJiM0MztzdGF0aWMgc3RydWN0IGhzdGF0ZSAqaHVnZXRsYl9hY2N0X21lbW9yeV9oO1xuJiM0MztzdGF0aWMgbG9uZyBodWdldGxiX2FjY3RfbWVtb3J5X2RlbHRhO1xuJiM0MztcbiYjNDM7c3RhdGljIGludCBodWdldGxiX2FjY3RfbWVtb3J5KHN0cnVjdCBoc3RhdGUgKmgsIGxvbmcgZGVsdGEpXG4mIzQzO3tcbiYjNDM7XHRodWdldGxiX2FjY3RfbWVtb3J5X2NhbGxlZCA9IHRydWU7XG4mIzQzO1x0aHVnZXRsYl9hY2N0X21lbW9yeV9oID0gaDtcbiYjNDM7XHRodWdldGxiX2FjY3RfbWVtb3J5X2RlbHRhID0gZGVsdGE7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIHJlc2V0X2h1Z2V0bGJfYWNjdF9tZW1vcnlfbW9jayh2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0aHVnZXRsYl9hY2N0X21lbW9yeV9jYWxsZWQgPSBmYWxzZTtcbiYjNDM7XHRodWdldGxiX2FjY3RfbWVtb3J5X2ggPSBOVUxMO1xuJiM0MztcdGh1Z2V0bGJfYWNjdF9tZW1vcnlfZGVsdGEgPSAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBhc3NlcnRfaHVnZXRsYl9hY2N0X21lbW9yeV9jYWxsZWQoc3RydWN0IGhzdGF0ZSAqaCwgbG9uZyBkZWx0YSlcbiYjNDM7e1xuJiM0MztcdGFzc2VydChodWdldGxiX2FjY3RfbWVtb3J5X2NhbGxlZCk7XG4mIzQzO1x0YXNzZXJ0KGh1Z2V0bGJfYWNjdF9tZW1vcnlfaCA9PSBoKTtcbiYjNDM7XHRhc3NlcnQoaHVnZXRsYl9hY2N0X21lbW9yeV9kZWx0YSA9PSBkZWx0YSk7XG4mIzQzO1xuJiM0MztcdHJlc2V0X2h1Z2V0bGJfYWNjdF9tZW1vcnlfbW9jaygpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBhc3NlcnRfaHVnZXRsYl9hY2N0X21lbW9yeV9ub3RfY2FsbGVkKHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRhc3NlcnQoIWh1Z2V0bGJfYWNjdF9tZW1vcnlfY2FsbGVkKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7Li4vLi4vLi4vbW0vaHVnZXRsYl9zdWJwb29sLmhcJiMzNDtcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7Li4vLi4vLi4vbW0vaHVnZXRsYl9zdWJwb29sLmNcJiMzNDtcbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIHRlc3Rfc3VicG9vbF9uZXdfcHV0X25vX21pbl9saW1pdCh2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGhzdGF0ZSBoO1xuJiM0MztcdHN0cnVjdCBodWdlcGFnZV9zdWJwb29sICpzcG9vbDtcbiYjNDM7XG4mIzQzO1x0c3Bvb2wgPSBodWdlcGFnZV9uZXdfc3VicG9vbChcdTAwMjZoLCAxMCwgLTEpO1xuJiM0MztcdGFzc2VydChzcG9vbCAhPSBOVUxMKTtcbiYjNDM7XHRhc3NlcnQoc3Bvb2wtXHUwMDNlbWF4X2hwYWdlcyA9PSAxMCk7XG4mIzQzO1x0YXNzZXJ0KHNwb29sLVx1MDAzZW1pbl9ocGFnZXMgPT0gLTEpO1xuJiM0MztcdGFzc2VydChzcG9vbC1cdTAwM2Vyc3ZfaHBhZ2VzID09IC0xKTtcbiYjNDM7XHRhc3NlcnQoc3Bvb2wtXHUwMDNlY291bnQgPT0gMSk7XG4mIzQzO1x0YXNzZXJ0X2h1Z2V0bGJfYWNjdF9tZW1vcnlfbm90X2NhbGxlZCgpO1xuJiM0MztcbiYjNDM7XHRodWdlcGFnZV9wdXRfc3VicG9vbChzcG9vbCk7XG4mIzQzO1x0YXNzZXJ0X2h1Z2V0bGJfYWNjdF9tZW1vcnlfbm90X2NhbGxlZCgpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCB0ZXN0X3N1YnBvb2xfbmV3X3B1dF93aXRoX21pbl9saW1pdCh2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGhzdGF0ZSBoO1xuJiM0MztcdHN0cnVjdCBodWdlcGFnZV9zdWJwb29sICpzcG9vbDtcbiYjNDM7XG4mIzQzO1x0c3Bvb2wgPSBodWdlcGFnZV9uZXdfc3VicG9vbChcdTAwMjZoLCAyMCwgNSk7XG4mIzQzO1x0YXNzZXJ0KHNwb29sICE9IE5VTEwpO1xuJiM0MztcdGFzc2VydChzcG9vbC1cdTAwM2VtYXhfaHBhZ2VzID09IDIwKTtcbiYjNDM7XHRhc3NlcnQoc3Bvb2wtXHUwMDNlbWluX2hwYWdlcyA9PSA1KTtcbiYjNDM7XHRhc3NlcnQoc3Bvb2wtXHUwMDNlcnN2X2hwYWdlcyA9PSA1KTtcbiYjNDM7XHRhc3NlcnQoc3Bvb2wtXHUwMDNlY291bnQgPT0gMSk7XG4mIzQzO1x0YXNzZXJ0X2h1Z2V0bGJfYWNjdF9tZW1vcnlfY2FsbGVkKFx1MDAyNmgsIDUpO1xuJiM0MztcbiYjNDM7XHRodWdlcGFnZV9wdXRfc3VicG9vbChzcG9vbCk7XG4mIzQzO1x0YXNzZXJ0X2h1Z2V0bGJfYWNjdF9tZW1vcnlfY2FsbGVkKFx1MDAyNmgsIC01KTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgdGVzdF9zdWJwb29sX2dldF9wYWdlc19iZWxvd19taW4odm9pZClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBoc3RhdGUgaDtcbiYjNDM7XHRzdHJ1Y3QgaHVnZXBhZ2Vfc3VicG9vbCAqc3Bvb2w7XG4mIzQzO1x0bG9uZyByZXQ7XG4mIzQzO1xuJiM0MztcdC8qIExldCYjMzk7cyBpbml0aWFsaXplOiBtaW5faHBhZ2VzID0gMTAsIHVzZWRfaHBhZ2VzID0gOSwgcnN2X2hwYWdlcyA9IDEgKi9cbiYjNDM7XHRzcG9vbCA9IGh1Z2VwYWdlX25ld19zdWJwb29sKFx1MDAyNmgsIC0xLCAxMCk7XG4mIzQzO1x0YXNzZXJ0X2h1Z2V0bGJfYWNjdF9tZW1vcnlfY2FsbGVkKFx1MDAyNmgsIDEwKTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gaHVnZXBhZ2Vfc3VicG9vbF9nZXRfcGFnZXMoc3Bvb2wsIDkpO1xuJiM0MztcdGFzc2VydChyZXQgPT0gMCk7XG4mIzQzO1x0YXNzZXJ0KHNwb29sLVx1MDAzZXVzZWRfaHBhZ2VzID09IDkpO1xuJiM0MztcdGFzc2VydChzcG9vbC1cdTAwM2Vyc3ZfaHBhZ2VzID09IDEpO1xuJiM0MztcbiYjNDM7XHQvKiBJbnZva2UgR2V0IChDb25zdW1lcyB0aGUgcmVtYWluaW5nIDEgc3VicG9vbCByZXNlcnZlISkgKi9cbiYjNDM7XHRyZXQgPSBodWdlcGFnZV9zdWJwb29sX2dldF9wYWdlcyhzcG9vbCwgMSk7XG4mIzQzO1x0YXNzZXJ0KHJldCA9PSAwKTsgLyogQ292ZXJlZCBieSBzdWJwb29sIHJlc2VydmUhICovXG4mIzQzO1x0YXNzZXJ0KHNwb29sLVx1MDAzZXVzZWRfaHBhZ2VzID09IDEwKTtcbiYjNDM7XHRhc3NlcnQoc3Bvb2wtXHUwMDNlcnN2X2hwYWdlcyA9PSAwKTtcbiYjNDM7XG4mIzQzO1x0LyogSW52b2tlIFB1dCAoUmVwbGVuaXNoZXMgdGhlIHN1YnBvb2wgcmVzZXJ2ZSEpICovXG4mIzQzO1x0cmV0ID0gaHVnZXBhZ2Vfc3VicG9vbF9wdXRfcGFnZXMoc3Bvb2wsIDEpO1xuJiM0MztcdGFzc2VydChyZXQgPT0gMCk7IC8qIEtlcHQgYnkgc3VicG9vbCByZXNlcnZlISAqL1xuJiM0MztcdGFzc2VydChzcG9vbC1cdTAwM2V1c2VkX2hwYWdlcyA9PSA5KTtcbiYjNDM7XHRhc3NlcnQoc3Bvb2wtXHUwMDNlcnN2X2hwYWdlcyA9PSAxKTtcbiYjNDM7XG4mIzQzO1x0LyogQ2xlYW51cDogUmV0dXJuIHVzZWRfaHBhZ2VzIHRvIDAgc28gdGhlIHN1YnBvb2wgZnJlZXMgc3ltbWV0cmljYWxseSEgKi9cbiYjNDM7XHRodWdlcGFnZV9zdWJwb29sX3B1dF9wYWdlcyhzcG9vbCwgOSk7XG4mIzQzO1x0aHVnZXBhZ2VfcHV0X3N1YnBvb2woc3Bvb2wpO1xuJiM0MztcdGFzc2VydF9odWdldGxiX2FjY3RfbWVtb3J5X2NhbGxlZChcdTAwMjZoLCAtMTApO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCB0ZXN0X3N1YnBvb2xfZ2V0X3BhZ2VzX2Nyb3NzaW5nX21pbih2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGhzdGF0ZSBoO1xuJiM0MztcdHN0cnVjdCBodWdlcGFnZV9zdWJwb29sICpzcG9vbDtcbiYjNDM7XHRsb25nIHJldDtcbiYjNDM7XG4mIzQzO1x0LyogTGV0JiMzOTtzIGluaXRpYWxpemU6IG1pbl9ocGFnZXMgPSAxMCwgdXNlZF9ocGFnZXMgPSAxMCwgcnN2X2hwYWdlcyA9IDAgKi9cbiYjNDM7XHRzcG9vbCA9IGh1Z2VwYWdlX25ld19zdWJwb29sKFx1MDAyNmgsIC0xLCAxMCk7XG4mIzQzO1x0YXNzZXJ0X2h1Z2V0bGJfYWNjdF9tZW1vcnlfY2FsbGVkKFx1MDAyNmgsIDEwKTtcbiYjNDM7XG4mIzQzO1x0aHVnZXBhZ2Vfc3VicG9vbF9nZXRfcGFnZXMoc3Bvb2wsIDEwKTtcbiYjNDM7XHRhc3NlcnQoc3Bvb2wtXHUwMDNldXNlZF9ocGFnZXMgPT0gMTApO1xuJiM0MztcdGFzc2VydChzcG9vbC1cdTAwM2Vyc3ZfaHBhZ2VzID09IDApO1xuJiM0MztcbiYjNDM7XHQvKiBJbnZva2UgR2V0IChUcmlnZ2VycyBhIHJlcXVlc3QgZm9yIGEgR2xvYmFsIEJ1ZGR5L1N1cnBsdXMgcGFnZSEpICovXG4mIzQzO1x0cmV0ID0gaHVnZXBhZ2Vfc3VicG9vbF9nZXRfcGFnZXMoc3Bvb2wsIDEpO1xuJiM0MztcdGFzc2VydChyZXQgPT0gMSk7IC8qIFJlcXVpcmVzIGdsb2JhbCBwYWdlISAqL1xuJiM0MztcdGFzc2VydChzcG9vbC1cdTAwM2V1c2VkX2hwYWdlcyA9PSAxMSk7XG4mIzQzO1x0YXNzZXJ0KHNwb29sLVx1MDAzZXJzdl9ocGFnZXMgPT0gMCk7XG4mIzQzO1xuJiM0MztcdC8qIEludm9rZSBQdXQgKEFib3ZlIG1pbmltdW0sIHNvIGl0IHJlbGVhc2VzIHRoZSBwYWdlIHRvIHRoZSBHbG9iYWwgUG9vbCEpICovXG4mIzQzO1x0cmV0ID0gaHVnZXBhZ2Vfc3VicG9vbF9wdXRfcGFnZXMoc3Bvb2wsIDEpO1xuJiM0MztcdGFzc2VydChyZXQgPT0gMSk7IC8qIERyb3BwZWQgdG8gZ2xvYmFsIHBvb2whICovXG4mIzQzO1x0YXNzZXJ0KHNwb29sLVx1MDAzZXVzZWRfaHBhZ2VzID09IDEwKTtcbiYjNDM7XHRhc3NlcnQoc3Bvb2wtXHUwMDNlcnN2X2hwYWdlcyA9PSAwKTtcbiYjNDM7XG4mIzQzO1x0LyogQ2xlYW51cCAqL1xuJiM0MztcdGh1Z2VwYWdlX3N1YnBvb2xfcHV0X3BhZ2VzKHNwb29sLCAxMCk7XG4mIzQzO1x0aHVnZXBhZ2VfcHV0X3N1YnBvb2woc3Bvb2wpO1xuJiM0MztcdGFzc2VydF9odWdldGxiX2FjY3RfbWVtb3J5X2NhbGxlZChcdTAwMjZoLCAtMTApO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCB0ZXN0X3N1YnBvb2xfZ2V0X3BhZ2VzX2Nyb3NzaW5nX21pbl9tdWx0aSh2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGhzdGF0ZSBoO1xuJiM0MztcdHN0cnVjdCBodWdlcGFnZV9zdWJwb29sICpzcG9vbDtcbiYjNDM7XHRsb25nIHJldDtcbiYjNDM7XG4mIzQzO1x0LyogU2NlbmFyaW8gMTogQ3Jvc3NpbmcgZW50aXJlbHkgaW50byBzdXJwbHVzIHRlcnJpdG9yeSBieSBhIGRlbHRhIFx1MDAzZSAxICovXG4mIzQzO1x0LyogTGV0JiMzOTtzIGluaXRpYWxpemU6IG1pbl9ocGFnZXMgPSAxMCwgdXNlZF9ocGFnZXMgPSA4LCByc3ZfaHBhZ2VzID0gMiAqL1xuJiM0MztcdHNwb29sID0gaHVnZXBhZ2VfbmV3X3N1YnBvb2woXHUwMDI2aCwgLTEsIDEwKTtcbiYjNDM7XHRhc3NlcnRfaHVnZXRsYl9hY2N0X21lbW9yeV9jYWxsZWQoXHUwMDI2aCwgMTApO1xuJiM0MztcbiYjNDM7XHRyZXQgPSBodWdlcGFnZV9zdWJwb29sX2dldF9wYWdlcyhzcG9vbCwgOCk7XG4mIzQzO1x0YXNzZXJ0KHJldCA9PSAwKTtcbiYjNDM7XHRhc3NlcnQoc3Bvb2wtXHUwMDNldXNlZF9ocGFnZXMgPT0gOCk7XG4mIzQzO1x0YXNzZXJ0KHNwb29sLVx1MDAzZXJzdl9ocGFnZXMgPT0gMik7XG4mIzQzO1xuJiM0MztcdC8qIEludm9rZSBHZXQgd2l0aCBkZWx0YSA9IDUgKENyb3NzZXMgbWluIGxpbWl0IG9mIDEwIHVwIHRvIDEzKSAqL1xuJiM0MztcdHJldCA9IGh1Z2VwYWdlX3N1YnBvb2xfZ2V0X3BhZ2VzKHNwb29sLCA1KTtcbiYjNDM7XHRhc3NlcnQocmV0ID09IDMpOyAvKiAoOCAmIzQzOyA1KSAtIDEwID0gMyBnbG9iYWwgcGFnZXMgcmVxdWlyZWQhICovXG4mIzQzO1x0YXNzZXJ0KHNwb29sLVx1MDAzZXVzZWRfaHBhZ2VzID09IDEzKTtcbiYjNDM7XHRhc3NlcnQoc3Bvb2wtXHUwMDNlcnN2X2hwYWdlcyA9PSAwKTtcbiYjNDM7XG4mIzQzO1x0LyogSW52b2tlIFB1dCB3aXRoIGRlbHRhID0gNSAoRHJvcHMgZnJvbSAxMyBkb3duIHRvIDgpICovXG4mIzQzO1x0cmV0ID0gaHVnZXBhZ2Vfc3VicG9vbF9wdXRfcGFnZXMoc3Bvb2wsIDUpO1xuJiM0MztcdGFzc2VydChyZXQgPT0gMyk7IC8qIDMgc3VycGx1cyBwYWdlcyByZWxlYXNlZCB0byB0aGUgZ2xvYmFsIHBvb2whICovXG4mIzQzO1x0YXNzZXJ0KHNwb29sLVx1MDAzZXVzZWRfaHBhZ2VzID09IDgpO1xuJiM0MztcdGFzc2VydChzcG9vbC1cdTAwM2Vyc3ZfaHBhZ2VzID09IDIpOyAvKiAyIHN1YnBvb2wgcmVzZXJ2ZXMgcGVyZmVjdGx5IHJlc3RvcmVkISAqL1xuJiM0MztcbiYjNDM7XHQvKiBTY2VuYXJpbyAyOiBMYW5kaW5nIGV4YWN0bHkgb24gdGhlIG1pbl9ocGFnZXMgYm91bmRhcnkgd2l0aCBkZWx0YSBcdTAwM2UgMSAqL1xuJiM0MztcdHJldCA9IGh1Z2VwYWdlX3N1YnBvb2xfZ2V0X3BhZ2VzKHNwb29sLCAyKTtcbiYjNDM7XHRhc3NlcnQocmV0ID09IDApOyAvKiBQZXJmZWN0bHkgY292ZXJlZCBieSByZW1haW5pbmcgMiBzdWJwb29sIHJlc2VydmVzISAqL1xuJiM0MztcdGFzc2VydChzcG9vbC1cdTAwM2V1c2VkX2hwYWdlcyA9PSAxMCk7XG4mIzQzO1x0YXNzZXJ0KHNwb29sLVx1MDAzZXJzdl9ocGFnZXMgPT0gMCk7XG4mIzQzO1xuJiM0MztcdHJldCA9IGh1Z2VwYWdlX3N1YnBvb2xfcHV0X3BhZ2VzKHNwb29sLCAyKTtcbiYjNDM7XHRhc3NlcnQocmV0ID09IDApOyAvKiBTd2FsbG93ZWQgcGVyZmVjdGx5IHRvIHJlcGxlbmlzaCB0aGUgMiBzdWJwb29sIHJlc2VydmVzISAqL1xuJiM0MztcdGFzc2VydChzcG9vbC1cdTAwM2V1c2VkX2hwYWdlcyA9PSA4KTtcbiYjNDM7XHRhc3NlcnQoc3Bvb2wtXHUwMDNlcnN2X2hwYWdlcyA9PSAyKTtcbiYjNDM7XG4mIzQzO1x0LyogQ2xlYW51cCAqL1xuJiM0MztcdGh1Z2VwYWdlX3N1YnBvb2xfcHV0X3BhZ2VzKHNwb29sLCA4KTtcbiYjNDM7XHRodWdlcGFnZV9wdXRfc3VicG9vbChzcG9vbCk7XG4mIzQzO1x0YXNzZXJ0X2h1Z2V0bGJfYWNjdF9tZW1vcnlfY2FsbGVkKFx1MDAyNmgsIC0xMCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIHRlc3Rfc3VicG9vbF9nZXRfcGFnZXNfbWF4X2xpbWl0KHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgaHN0YXRlIGg7XG4mIzQzO1x0c3RydWN0IGh1Z2VwYWdlX3N1YnBvb2wgKnNwb29sO1xuJiM0MztcdGxvbmcgcmV0O1xuJiM0MztcbiYjNDM7XHRzcG9vbCA9IGh1Z2VwYWdlX25ld19zdWJwb29sKFx1MDAyNmgsIDUsIC0xKTtcbiYjNDM7XHRhc3NlcnRfaHVnZXRsYl9hY2N0X21lbW9yeV9ub3RfY2FsbGVkKCk7XG4mIzQzO1xuJiM0MztcdHJldCA9IGh1Z2VwYWdlX3N1YnBvb2xfZ2V0X3BhZ2VzKHNwb29sLCA1KTtcbiYjNDM7XHRhc3NlcnQocmV0ID09IDUpO1xuJiM0MztcdGFzc2VydChzcG9vbC1cdTAwM2V1c2VkX2hwYWdlcyA9PSA1KTtcbiYjNDM7XHRhc3NlcnQoc3Bvb2wtXHUwMDNlcnN2X2hwYWdlcyA9PSAtMSk7XG4mIzQzO1xuJiM0MztcdC8qIEludm9rZSBHZXQgKFNob3VsZCB0cmlnZ2VyIC1FTk9NRU0gZHVlIHRvIG1heCBjYXAgbGltaXQgZXhjZWVkZWQhKSAqL1xuJiM0MztcdHJldCA9IGh1Z2VwYWdlX3N1YnBvb2xfZ2V0X3BhZ2VzKHNwb29sLCAxKTtcbiYjNDM7XHRhc3NlcnQocmV0ID09IC1FTk9NRU0pO1xuJiM0MztcdGFzc2VydChzcG9vbC1cdTAwM2V1c2VkX2hwYWdlcyA9PSA1KTsgLyogVW5jaGFuZ2VkICovXG4mIzQzO1xuJiM0MztcdC8qIENsZWFudXAgKi9cbiYjNDM7XHRodWdlcGFnZV9zdWJwb29sX3B1dF9wYWdlcyhzcG9vbCwgNSk7XG4mIzQzO1x0aHVnZXBhZ2VfcHV0X3N1YnBvb2woc3Bvb2wpO1xuJiM0MztcdGFzc2VydF9odWdldGxiX2FjY3RfbWVtb3J5X25vdF9jYWxsZWQoKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgdGVzdF9zdWJwb29sX2dldF9wYWdlc19ub19saW1pdHModm9pZClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBoc3RhdGUgaDtcbiYjNDM7XHRzdHJ1Y3QgaHVnZXBhZ2Vfc3VicG9vbCAqc3Bvb2w7XG4mIzQzO1x0bG9uZyByZXQ7XG4mIzQzO1xuJiM0MztcdHNwb29sID0gaHVnZXBhZ2VfbmV3X3N1YnBvb2woXHUwMDI2aCwgLTEsIC0xKTtcbiYjNDM7XHRhc3NlcnRfaHVnZXRsYl9hY2N0X21lbW9yeV9ub3RfY2FsbGVkKCk7XG4mIzQzO1xuJiM0MztcdGh1Z2VwYWdlX3N1YnBvb2xfZ2V0X3BhZ2VzKHNwb29sLCA1KTtcbiYjNDM7XHRhc3NlcnQoc3Bvb2wtXHUwMDNldXNlZF9ocGFnZXMgPT0gNSk7XG4mIzQzO1xuJiM0MztcdC8qIEludm9rZSBHZXQgKFN1cnBsdXMgR2xvYmFsIFRlcnJpdG9yeSkgKi9cbiYjNDM7XHRyZXQgPSBodWdlcGFnZV9zdWJwb29sX2dldF9wYWdlcyhzcG9vbCwgMik7XG4mIzQzO1x0YXNzZXJ0KHJldCA9PSAyKTtcbiYjNDM7XHRhc3NlcnQoc3Bvb2wtXHUwMDNldXNlZF9ocGFnZXMgPT0gNyk7XG4mIzQzO1xuJiM0MztcdC8qIEludm9rZSBQdXQgKi9cbiYjNDM7XHRyZXQgPSBodWdlcGFnZV9zdWJwb29sX3B1dF9wYWdlcyhzcG9vbCwgMik7XG4mIzQzO1x0YXNzZXJ0KHJldCA9PSAyKTtcbiYjNDM7XHRhc3NlcnQoc3Bvb2wtXHUwMDNldXNlZF9ocGFnZXMgPT0gNSk7XG4mIzQzO1xuJiM0MztcdC8qIENsZWFudXAgKi9cbiYjNDM7XHRodWdlcGFnZV9zdWJwb29sX3B1dF9wYWdlcyhzcG9vbCwgNSk7XG4mIzQzO1x0aHVnZXBhZ2VfcHV0X3N1YnBvb2woc3Bvb2wpO1xuJiM0MztcdGFzc2VydF9odWdldGxiX2FjY3RfbWVtb3J5X25vdF9jYWxsZWQoKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgdGVzdF9zdWJwb29sX2ZyZWVfaHBhZ2VzKHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgaHN0YXRlIGg7XG4mIzQzO1x0c3RydWN0IGh1Z2VwYWdlX3N1YnBvb2wgKnNwb29sO1xuJiM0MztcbiYjNDM7XHQvKiBUZXN0IHRoYXQgZnJlZV9ocGFnZXMgd2l0aCBOTyBtaW5fc2l6ZSB3b3JrcyBwZXJmZWN0bHkgKi9cbiYjNDM7XHRzcG9vbCA9IGh1Z2VwYWdlX25ld19zdWJwb29sKFx1MDAyNmgsIDE1LCAtMSk7XG4mIzQzO1x0aHVnZXBhZ2Vfc3VicG9vbF9nZXRfcGFnZXMoc3Bvb2wsIDMpO1xuJiM0MztcdGFzc2VydChodWdlcGFnZV9zdWJwb29sX2ZyZWVfaHBhZ2VzKHNwb29sKSA9PSAxMik7XG4mIzQzO1x0aHVnZXBhZ2Vfc3VicG9vbF9wdXRfcGFnZXMoc3Bvb2wsIDMpO1xuJiM0MztcdGh1Z2VwYWdlX3B1dF9zdWJwb29sKHNwb29sKTtcbiYjNDM7XG4mIzQzO1x0LyogVGVzdCB0aGF0IGZyZWVfaHBhZ2VzIHdpdGggYSBtaW5fc2l6ZSBjb25maWd1cmVkIGlzIENPTVBMRVRFTFkgVU5BRkZFQ1RFRCBieSBpdCAqL1xuJiM0MztcdHNwb29sID0gaHVnZXBhZ2VfbmV3X3N1YnBvb2woXHUwMDI2aCwgMTUsIDUpO1xuJiM0MztcdGFzc2VydF9odWdldGxiX2FjY3RfbWVtb3J5X2NhbGxlZChcdTAwMjZoLCA1KTtcbiYjNDM7XHRodWdlcGFnZV9zdWJwb29sX2dldF9wYWdlcyhzcG9vbCwgMyk7XG4mIzQzO1x0YXNzZXJ0KGh1Z2VwYWdlX3N1YnBvb2xfZnJlZV9ocGFnZXMoc3Bvb2wpID09IDEyKTsgLyogU2hvdWxkIHN0aWxsIGJlIDE1IC0gMyA9IDEyISAqL1xuJiM0MztcdGh1Z2VwYWdlX3N1YnBvb2xfcHV0X3BhZ2VzKHNwb29sLCAzKTtcbiYjNDM7XHRodWdlcGFnZV9wdXRfc3VicG9vbChzcG9vbCk7XG4mIzQzO1x0YXNzZXJ0X2h1Z2V0bGJfYWNjdF9tZW1vcnlfY2FsbGVkKFx1MDAyNmgsIC01KTtcbiYjNDM7XG4mIzQzO1x0c3Bvb2wgPSBodWdlcGFnZV9uZXdfc3VicG9vbChcdTAwMjZoLCAtMSwgLTEpO1xuJiM0MztcdGh1Z2VwYWdlX3N1YnBvb2xfZ2V0X3BhZ2VzKHNwb29sLCAzKTtcbiYjNDM7XHRhc3NlcnQoaHVnZXBhZ2Vfc3VicG9vbF9mcmVlX2hwYWdlcyhzcG9vbCkgPT0gLTEpO1xuJiM0MztcdGh1Z2VwYWdlX3N1YnBvb2xfcHV0X3BhZ2VzKHNwb29sLCAzKTtcbiYjNDM7XHRodWdlcGFnZV9wdXRfc3VicG9vbChzcG9vbCk7XG4mIzQzO1xuJiM0MztcdC8qIFRlc3QgdGhhdCBmcmVlX2hwYWdlcyB3aXRoIGEgbWluX3NpemUgY29uZmlndXJlZCBhbmQgTk8gbWF4IHNpemUgcmV0dXJucyAtMSAqL1xuJiM0MztcdHNwb29sID0gaHVnZXBhZ2VfbmV3X3N1YnBvb2woXHUwMDI2aCwgLTEsIDUpO1xuJiM0MztcdGFzc2VydF9odWdldGxiX2FjY3RfbWVtb3J5X2NhbGxlZChcdTAwMjZoLCA1KTtcbiYjNDM7XHRodWdlcGFnZV9zdWJwb29sX2dldF9wYWdlcyhzcG9vbCwgMyk7XG4mIzQzO1x0YXNzZXJ0KGh1Z2VwYWdlX3N1YnBvb2xfZnJlZV9ocGFnZXMoc3Bvb2wpID09IC0xKTtcbiYjNDM7XHRodWdlcGFnZV9zdWJwb29sX3B1dF9wYWdlcyhzcG9vbCwgMyk7XG4mIzQzO1x0aHVnZXBhZ2VfcHV0X3N1YnBvb2woc3Bvb2wpO1xuJiM0MztcdGFzc2VydF9odWdldGxiX2FjY3RfbWVtb3J5X2NhbGxlZChcdTAwMjZoLCAtNSk7XG4mIzQzO1xuJiM0MztcdHNwb29sID0gaHVnZXBhZ2VfbmV3X3N1YnBvb2woXHUwMDI2aCwgMywgLTEpO1xuJiM0MztcdGh1Z2VwYWdlX3N1YnBvb2xfZ2V0X3BhZ2VzKHNwb29sLCAzKTtcbiYjNDM7XHRhc3NlcnQoaHVnZXBhZ2Vfc3VicG9vbF9mcmVlX2hwYWdlcyhzcG9vbCkgPT0gMCk7XG4mIzQzO1x0aHVnZXBhZ2Vfc3VicG9vbF9wdXRfcGFnZXMoc3Bvb2wsIDMpO1xuJiM0MztcdGh1Z2VwYWdlX3B1dF9zdWJwb29sKHNwb29sKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgdGVzdF9zdWJwb29sX21heF9ocGFnZXModm9pZClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBoc3RhdGUgaDtcbiYjNDM7XHRzdHJ1Y3QgaHVnZXBhZ2Vfc3VicG9vbCAqc3Bvb2w7XG4mIzQzO1xuJiM0MztcdHNwb29sID0gaHVnZXBhZ2VfbmV3X3N1YnBvb2woXHUwMDI2aCwgMTIzLCAtMSk7XG4mIzQzO1x0YXNzZXJ0KGh1Z2VwYWdlX3N1YnBvb2xfbWF4X2hwYWdlcyhzcG9vbCkgPT0gMTIzKTtcbiYjNDM7XHRodWdlcGFnZV9wdXRfc3VicG9vbChzcG9vbCk7XG4mIzQzO1xuJiM0MztcdC8qIFRlc3QgdGhhdCBtYXhfaHBhZ2VzIHdpdGggYSBtaW5fc2l6ZSBjb25maWd1cmVkIGlzIENPTVBMRVRFTFkgVU5BRkZFQ1RFRCBieSBpdCAqL1xuJiM0MztcdHNwb29sID0gaHVnZXBhZ2VfbmV3X3N1YnBvb2woXHUwMDI2aCwgMTIzLCA1KTtcbiYjNDM7XHRhc3NlcnRfaHVnZXRsYl9hY2N0X21lbW9yeV9jYWxsZWQoXHUwMDI2aCwgNSk7XG4mIzQzO1x0YXNzZXJ0KGh1Z2VwYWdlX3N1YnBvb2xfbWF4X2hwYWdlcyhzcG9vbCkgPT0gMTIzKTtcbiYjNDM7XHRodWdlcGFnZV9wdXRfc3VicG9vbChzcG9vbCk7XG4mIzQzO1x0YXNzZXJ0X2h1Z2V0bGJfYWNjdF9tZW1vcnlfY2FsbGVkKFx1MDAyNmgsIC01KTtcbiYjNDM7XG4mIzQzO1x0c3Bvb2wgPSBodWdlcGFnZV9uZXdfc3VicG9vbChcdTAwMjZoLCAtMSwgLTEpO1xuJiM0MztcdGFzc2VydChodWdlcGFnZV9zdWJwb29sX21heF9ocGFnZXMoc3Bvb2wpID09IC0xKTtcbiYjNDM7XHRodWdlcGFnZV9wdXRfc3VicG9vbChzcG9vbCk7XG4mIzQzO1xuJiM0MztcdHNwb29sID0gaHVnZXBhZ2VfbmV3X3N1YnBvb2woXHUwMDI2aCwgLTEsIDUpO1xuJiM0MztcdGFzc2VydF9odWdldGxiX2FjY3RfbWVtb3J5X2NhbGxlZChcdTAwMjZoLCA1KTtcbiYjNDM7XHRhc3NlcnQoaHVnZXBhZ2Vfc3VicG9vbF9tYXhfaHBhZ2VzKHNwb29sKSA9PSAtMSk7XG4mIzQzO1x0aHVnZXBhZ2VfcHV0X3N1YnBvb2woc3Bvb2wpO1xuJiM0MztcdGFzc2VydF9odWdldGxiX2FjY3RfbWVtb3J5X2NhbGxlZChcdTAwMjZoLCAtNSk7XG4mIzQzO1xuJiM0MztcdHNwb29sID0gaHVnZXBhZ2VfbmV3X3N1YnBvb2woXHUwMDI2aCwgMCwgLTEpO1xuJiM0MztcdGFzc2VydChodWdlcGFnZV9zdWJwb29sX21heF9ocGFnZXMoc3Bvb2wpID09IDApO1xuJiM0MztcdGh1Z2VwYWdlX3B1dF9zdWJwb29sKHNwb29sKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgdGVzdF9zdWJwb29sX21heF9zaXplKHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgaHN0YXRlIGg7XG4mIzQzO1x0c3RydWN0IGh1Z2VwYWdlX3N1YnBvb2wgKnNwb29sO1xuJiM0MztcbiYjNDM7XHRzcG9vbCA9IGh1Z2VwYWdlX25ld19zdWJwb29sKFx1MDAyNmgsIDEwLCAtMSk7XG4mIzQzO1x0YXNzZXJ0KGh1Z2VwYWdlX3N1YnBvb2xfbWF4X3NpemUoc3Bvb2wpID09ICgxMFVMTCBcdTAwM2NcdTAwM2MgMjEpKTtcbiYjNDM7XHRodWdlcGFnZV9wdXRfc3VicG9vbChzcG9vbCk7XG4mIzQzO1xuJiM0MztcdC8qIFRlc3QgdGhhdCBtYXhfc2l6ZSB3aXRoIGEgbWluX3NpemUgY29uZmlndXJlZCBpcyBDT01QTEVURUxZIFVOQUZGRUNURUQgYnkgaXQgKi9cbiYjNDM7XHRzcG9vbCA9IGh1Z2VwYWdlX25ld19zdWJwb29sKFx1MDAyNmgsIDEwLCA1KTtcbiYjNDM7XHRhc3NlcnRfaHVnZXRsYl9hY2N0X21lbW9yeV9jYWxsZWQoXHUwMDI2aCwgNSk7XG4mIzQzO1x0YXNzZXJ0KGh1Z2VwYWdlX3N1YnBvb2xfbWF4X3NpemUoc3Bvb2wpID09ICgxMFVMTCBcdTAwM2NcdTAwM2MgMjEpKTtcbiYjNDM7XHRodWdlcGFnZV9wdXRfc3VicG9vbChzcG9vbCk7XG4mIzQzO1x0YXNzZXJ0X2h1Z2V0bGJfYWNjdF9tZW1vcnlfY2FsbGVkKFx1MDAyNmgsIC01KTtcbiYjNDM7XG4mIzQzO1x0c3Bvb2wgPSBodWdlcGFnZV9uZXdfc3VicG9vbChcdTAwMjZoLCAtMSwgLTEpO1xuJiM0MztcdGFzc2VydChodWdlcGFnZV9zdWJwb29sX21heF9zaXplKHNwb29sKSA9PSAtMVVMTCk7XG4mIzQzO1x0aHVnZXBhZ2VfcHV0X3N1YnBvb2woc3Bvb2wpO1xuJiM0MztcbiYjNDM7XHRzcG9vbCA9IGh1Z2VwYWdlX25ld19zdWJwb29sKFx1MDAyNmgsIDAsIC0xKTtcbiYjNDM7XHRhc3NlcnQoaHVnZXBhZ2Vfc3VicG9vbF9tYXhfc2l6ZShzcG9vbCkgPT0gMFVMTCk7XG4mIzQzO1x0aHVnZXBhZ2VfcHV0X3N1YnBvb2woc3Bvb2wpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCB0ZXN0X3N1YnBvb2xfbWluX3NpemUodm9pZClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBoc3RhdGUgaDtcbiYjNDM7XHRzdHJ1Y3QgaHVnZXBhZ2Vfc3VicG9vbCAqc3Bvb2w7XG4mIzQzO1xuJiM0MztcdHNwb29sID0gaHVnZXBhZ2VfbmV3X3N1YnBvb2woXHUwMDI2aCwgLTEsIDUpO1xuJiM0MztcdGFzc2VydF9odWdldGxiX2FjY3RfbWVtb3J5X2NhbGxlZChcdTAwMjZoLCA1KTtcbiYjNDM7XHRhc3NlcnQoaHVnZXBhZ2Vfc3VicG9vbF9taW5fc2l6ZShzcG9vbCkgPT0gKDVVTEwgXHUwMDNjXHUwMDNjIDIxKSk7XG4mIzQzO1x0aHVnZXBhZ2VfcHV0X3N1YnBvb2woc3Bvb2wpO1xuJiM0MztcdGFzc2VydF9odWdldGxiX2FjY3RfbWVtb3J5X2NhbGxlZChcdTAwMjZoLCAtNSk7XG4mIzQzO1xuJiM0MztcdC8qIFRlc3QgdGhhdCBtaW5fc2l6ZSB3aXRoIGEgbWF4X3NpemUgY29uZmlndXJlZCBpcyBDT01QTEVURUxZIFVOQUZGRUNURUQgYnkgaXQgKi9cbiYjNDM7XHRzcG9vbCA9IGh1Z2VwYWdlX25ld19zdWJwb29sKFx1MDAyNmgsIDIwLCA1KTtcbiYjNDM7XHRhc3NlcnRfaHVnZXRsYl9hY2N0X21lbW9yeV9jYWxsZWQoXHUwMDI2aCwgNSk7XG4mIzQzO1x0YXNzZXJ0KGh1Z2VwYWdlX3N1YnBvb2xfbWluX3NpemUoc3Bvb2wpID09ICg1VUxMIFx1MDAzY1x1MDAzYyAyMSkpO1xuJiM0MztcdGh1Z2VwYWdlX3B1dF9zdWJwb29sKHNwb29sKTtcbiYjNDM7XHRhc3NlcnRfaHVnZXRsYl9hY2N0X21lbW9yeV9jYWxsZWQoXHUwMDI2aCwgLTUpO1xuJiM0MztcbiYjNDM7XHRzcG9vbCA9IGh1Z2VwYWdlX25ld19zdWJwb29sKFx1MDAyNmgsIC0xLCAtMSk7XG4mIzQzO1x0YXNzZXJ0KGh1Z2VwYWdlX3N1YnBvb2xfbWluX3NpemUoc3Bvb2wpID09IC0xVUxMKTtcbiYjNDM7XHRodWdlcGFnZV9wdXRfc3VicG9vbChzcG9vbCk7XG4mIzQzO1xuJiM0MztcdHNwb29sID0gaHVnZXBhZ2VfbmV3X3N1YnBvb2woXHUwMDI2aCwgLTEsIDApO1xuJiM0MztcdGFzc2VydF9odWdldGxiX2FjY3RfbWVtb3J5X2NhbGxlZChcdTAwMjZoLCAwKTtcbiYjNDM7XHRhc3NlcnQoaHVnZXBhZ2Vfc3VicG9vbF9taW5fc2l6ZShzcG9vbCkgPT0gMFVMTCk7XG4mIzQzO1x0aHVnZXBhZ2VfcHV0X3N1YnBvb2woc3Bvb2wpO1xuJiM0MztcdGFzc2VydF9odWdldGxiX2FjY3RfbWVtb3J5X2NhbGxlZChcdTAwMjZoLCAwKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7aW50IG1haW4odm9pZClcbiYjNDM7e1xuJiM0MztcdHRlc3Rfc3VicG9vbF9uZXdfcHV0X25vX21pbl9saW1pdCgpO1xuJiM0MztcdHRlc3Rfc3VicG9vbF9uZXdfcHV0X3dpdGhfbWluX2xpbWl0KCk7XG4mIzQzO1x0dGVzdF9zdWJwb29sX2dldF9wYWdlc19iZWxvd19taW4oKTtcbiYjNDM7XHR0ZXN0X3N1YnBvb2xfZ2V0X3BhZ2VzX2Nyb3NzaW5nX21pbigpO1xuJiM0MztcdHRlc3Rfc3VicG9vbF9nZXRfcGFnZXNfY3Jvc3NpbmdfbWluX211bHRpKCk7XG4mIzQzO1x0dGVzdF9zdWJwb29sX2dldF9wYWdlc19tYXhfbGltaXQoKTtcbiYjNDM7XHR0ZXN0X3N1YnBvb2xfZ2V0X3BhZ2VzX25vX2xpbWl0cygpO1xuJiM0MztcdHRlc3Rfc3VicG9vbF9mcmVlX2hwYWdlcygpO1xuJiM0MztcdHRlc3Rfc3VicG9vbF9tYXhfaHBhZ2VzKCk7XG4mIzQzO1x0dGVzdF9zdWJwb29sX21heF9zaXplKCk7XG4mIzQzO1x0dGVzdF9zdWJwb29sX21pbl9zaXplKCk7XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjEgMTg6MDg8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0hVR0VUTEJGUyYjMzQ7LAogICAgJiMzNDtNRU1DRyYjMzQ7LAogICAgJiMzNDtDR1JPVVBfSFVHRVRMQiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2FsbG9jX2h1Z2V0bGJfZm9saW8mIzM0OywKICAgICYjMzQ7aHVnZXRsYl9yZXNlcnZlX3BhZ2VzJiMzNDssCiAgICAmIzM0O21lbV9jZ3JvdXBfaHVnZXRsYl90cnlfY2hhcmdlJiMzNDssCiAgICAmIzM0O21lbV9jZ3JvdXBfaHVnZXRsYl9jb21taXRfY2hhcmdlJiMzNDssCiAgICAmIzM0O21lbV9jZ3JvdXBfaHVnZXRsYl9jYW5jZWxfY2hhcmdlJiMzNDssCiAgICAmIzM0O2h1Z2VwYWdlX3N1YnBvb2xfZ2V0X3BhZ2VzJiMzNDssCiAgICAmIzM0O2h1Z2VwYWdlX3N1YnBvb2xfcHV0X3BhZ2VzJiMzNDssCiAgICAmIzM0O2h1Z2VwYWdlX25ld19zdWJwb29sJiMzNDssCiAgICAmIzM0O2h1Z2VwYWdlX3B1dF9zdWJwb29sJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHNlcmllcyByZWZhY3RvcnMgdGhlIGh1Z2V0bGIgc3VicG9vbCBsb2dpYyBpbnRvIGEgc2VwYXJhdGUgZmlsZSBhbmQgbW9kaWZpZXMgdGhlIGh1Z2V0bGIgYWxsb2NhdGlvbiBwYXRoIHRvIHVzZSBhIG5ldyB0cnkvY29tbWl0L2NhbmNlbCBjaGFyZ2luZyBtb2RlbCBmb3IgbWVtb3J5IGNncm91cHMuIEl0IGFsc28gbW9kaWZpZXMgdGhlIGh1Z2V0bGJfcmVzZXJ2ZV9wYWdlcyBlcnJvciBwYXRoLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIGNncm91cCBsb2dpYyB0aGF0IGFyZSByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIGh1Z2V0bGJmcyBhbmQgY2dyb3VwZnMsIG1ha2luZyB0aGVtIGhpZ2hseSByZWxldmFudCBmb3IgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLApldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXQKICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LAogICBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNzAwODUyY2Q5YTAyM2E1MTA1ZTIzNDFkMjQ3Yjg2NDAwMmNjYzZmYwpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUdWUgSnVsIDIxIDE4OjA4OjE1IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvY2dyb3VwX3YyX2FsbG9jYXRpb25fZmFpbHVyZS5jIGIvY2dyb3VwX3YyX2FsbG9jYXRpb25fZmFpbHVyZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwLi45MzhjYmYwMmFlNmY3YQotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL2Nncm91cF92Ml9hbGxvY2F0aW9uX2ZhaWx1cmUuYwpAQCAtMCwwICYjNDM7MSwxNjAgQEAKJiM0MzsjZGVmaW5lIF9HTlVfU09VUkNFCiYjNDM7I2luY2x1ZGUgJmx0O3N0ZGlvLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O3N0ZGxpYi5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDt1bmlzdGQuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7ZmNudGwuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7c3lzL21tYW4uaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7c3lzL3N0YXQuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7c3lzL3R5cGVzLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O3N5cy93YWl0LmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O3N0cmluZy5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtlcnJuby5oJmd0OwomIzQzOwomIzQzOyNkZWZpbmUgQ0dST1VQX1BBVEggJiMzNDsvc3lzL2ZzL2Nncm91cCYjMzQ7CiYjNDM7I2RlZmluZSBURVNUX0NHUk9VUCAmIzM0O3Rlc3RfcmVwcm9kdWNlciYjMzQ7CiYjNDM7I2RlZmluZSBURVNUX0NHUk9VUF9QQVRIIENHUk9VUF9QQVRIICYjMzQ7LyYjMzQ7IFRFU1RfQ0dST1VQCiYjNDM7CiYjNDM7dm9pZCB3cml0ZV9maWxlKGNvbnN0IGNoYXIgKnBhdGgsIGNvbnN0IGNoYXIgKnZhbCkgewomIzQzOyAgICBpbnQgZmQgPSBvcGVuKHBhdGgsIE9fV1JPTkxZKTsKJiM0MzsgICAgaWYgKGZkICZsdDsgMCkgewomIzQzOyAgICAgICAgZnByaW50ZihzdGRlcnIsICYjMzQ7RmFpbGVkIHRvIG9wZW4gJXM6ICVzXG4mIzM0OywgcGF0aCwgc3RyZXJyb3IoZXJybm8pKTsKJiM0MzsgICAgICAgIGV4aXQoMSk7CiYjNDM7ICAgIH0KJiM0MzsgICAgaWYgKHdyaXRlKGZkLCB2YWwsIHN0cmxlbih2YWwpKSAmbHQ7IDApIHsKJiM0MzsgICAgICAgIGZwcmludGYoc3RkZXJyLCAmIzM0O0ZhaWxlZCB0byB3cml0ZSAlcyB0byAlczogJXNcbiYjMzQ7LCB2YWwsIHBhdGgsIHN0cmVycm9yKGVycm5vKSk7CiYjNDM7ICAgICAgICBjbG9zZShmZCk7CiYjNDM7ICAgICAgICBleGl0KDEpOwomIzQzOyAgICB9CiYjNDM7ICAgIGNsb3NlKGZkKTsKJiM0Mzt9CiYjNDM7CiYjNDM7aW50IGlzX2h1Z2V0bGJfYWNjb3VudGluZ19lbmFibGVkKCkgewomIzQzOyAgICBGSUxFICpmcCA9IGZvcGVuKCYjMzQ7L3Byb2MvbW91bnRzJiMzNDssICYjMzQ7ciYjMzQ7KTsKJiM0MzsgICAgaWYgKCFmcCkgewomIzQzOyAgICAgICAgcGVycm9yKCYjMzQ7Zm9wZW4gL3Byb2MvbW91bnRzJiMzNDspOwomIzQzOyAgICAgICAgcmV0dXJuIC0xOwomIzQzOyAgICB9CiYjNDM7CiYjNDM7ICAgIGNoYXIgbGluZVsxMDI0XTsKJiM0MzsgICAgaW50IGVuYWJsZWQgPSAwOwomIzQzOyAgICB3aGlsZSAoZmdldHMobGluZSwgc2l6ZW9mKGxpbmUpLCBmcCkpIHsKJiM0MzsgICAgICAgIGNoYXIgc3BlY1syNTZdLCBmaWxlWzI1Nl0sIHR5cGVbMjU2XSwgb3B0c1s1MTJdOwomIzQzOyAgICAgICAgaWYgKHNzY2FuZihsaW5lLCAmIzM0OyUyNTVzICUyNTVzICUyNTVzICU1MTFzJiMzNDssIHNwZWMsIGZpbGUsIHR5cGUsIG9wdHMpID09IDQpIHsKJiM0MzsgICAgICAgICAgICBpZiAoc3RyY21wKGZpbGUsIENHUk9VUF9QQVRIKSA9PSAwICZhbXA7JmFtcDsgc3RyY21wKHR5cGUsICYjMzQ7Y2dyb3VwMiYjMzQ7KSA9PSAwKSB7CiYjNDM7ICAgICAgICAgICAgICAgIGlmIChzdHJzdHIob3B0cywgJiMzNDttZW1vcnlfaHVnZXRsYl9hY2NvdW50aW5nJiMzNDspICE9IE5VTEwpIHsKJiM0MzsgICAgICAgICAgICAgICAgICAgIGVuYWJsZWQgPSAxOwomIzQzOyAgICAgICAgICAgICAgICB9CiYjNDM7ICAgICAgICAgICAgICAgIGJyZWFrOwomIzQzOyAgICAgICAgICAgIH0KJiM0MzsgICAgICAgIH0KJiM0MzsgICAgfQomIzQzOyAgICBmY2xvc2UoZnApOwomIzQzOyAgICByZXR1cm4gZW5hYmxlZDsKJiM0Mzt9CiYjNDM7CiYjNDM7aW50IGVuYWJsZV9odWdldGxiX2FjY291bnRpbmcoKSB7CiYjNDM7ICAgIHByaW50ZigmIzM0O0F0dGVtcHRpbmcgdG8gcmVtb3VudCBjZ3JvdXAyIHdpdGggbWVtb3J5X2h1Z2V0bGJfYWNjb3VudGluZy4uLlxuJiMzNDspOwomIzQzOyAgICBpbnQgcmV0ID0gc3lzdGVtKCYjMzQ7bW91bnQgLW8gcmVtb3VudCxtZW1vcnlfaHVnZXRsYl9hY2NvdW50aW5nICYjMzQ7IENHUk9VUF9QQVRIKTsKJiM0MzsgICAgaWYgKHJldCAhPSAwKSB7CiYjNDM7ICAgICAgICBmcHJpbnRmKHN0ZGVyciwgJiMzNDtGYWlsZWQgdG8gcmVtb3VudDogc3lzdGVtKCkgcmV0dXJuZWQgJWRcbiYjMzQ7LCByZXQpOwomIzQzOyAgICAgICAgcmV0dXJuIC0xOwomIzQzOyAgICB9CiYjNDM7ICAgIHJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztpbnQgbWFpbigpIHsKJiM0MzsgICAgc3RydWN0IHN0YXQgc3Q7CiYjNDM7ICAgIGlmIChzdGF0KENHUk9VUF9QQVRILCAmYW1wO3N0KSAhPSAwIHx8ICFTX0lTRElSKHN0LnN0X21vZGUpKSB7CiYjNDM7ICAgICAgICBmcHJpbnRmKHN0ZGVyciwgJiMzNDtjZ3JvdXAgdjIgbm90IG1vdW50ZWQgYXQgJXNcbiYjMzQ7LCBDR1JPVVBfUEFUSCk7CiYjNDM7ICAgICAgICByZXR1cm4gMTsKJiM0MzsgICAgfQomIzQzOwomIzQzOyAgICBpbnQgZW5hYmxlZCA9IGlzX2h1Z2V0bGJfYWNjb3VudGluZ19lbmFibGVkKCk7CiYjNDM7ICAgIGlmIChlbmFibGVkICZsdDsgMCkgewomIzQzOyAgICAgICAgcmV0dXJuIDE7CiYjNDM7ICAgIH0KJiM0MzsgICAgaWYgKCFlbmFibGVkKSB7CiYjNDM7ICAgICAgICBpZiAoZW5hYmxlX2h1Z2V0bGJfYWNjb3VudGluZygpICE9IDApIHsKJiM0MzsgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgJiMzNDtDb3VsZCBub3QgZW5hYmxlIG1lbW9yeV9odWdldGxiX2FjY291bnRpbmdcbiYjMzQ7KTsKJiM0MzsgICAgICAgICAgICByZXR1cm4gMTsKJiM0MzsgICAgICAgIH0KJiM0MzsgICAgICAgIC8vIFJlLWNoZWNrCiYjNDM7ICAgICAgICBlbmFibGVkID0gaXNfaHVnZXRsYl9hY2NvdW50aW5nX2VuYWJsZWQoKTsKJiM0MzsgICAgICAgIGlmIChlbmFibGVkICZsdDs9IDApIHsKJiM0MzsgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgJiMzNDtGYWlsZWQgdG8gZW5hYmxlIG1lbW9yeV9odWdldGxiX2FjY291bnRpbmcgKHJlLWNoZWNrIGZhaWxlZClcbiYjMzQ7KTsKJiM0MzsgICAgICAgICAgICByZXR1cm4gMTsKJiM0MzsgICAgICAgIH0KJiM0MzsgICAgICAgIHByaW50ZigmIzM0O1N1Y2Nlc3NmdWxseSBlbmFibGVkIG1lbW9yeV9odWdldGxiX2FjY291bnRpbmdcbiYjMzQ7KTsKJiM0MzsgICAgfSBlbHNlIHsKJiM0MzsgICAgICAgIHByaW50ZigmIzM0O21lbW9yeV9odWdldGxiX2FjY291bnRpbmcgaXMgYWxyZWFkeSBlbmFibGVkXG4mIzM0Oyk7CiYjNDM7ICAgIH0KJiM0MzsKJiM0MzsgICAgLy8gRW5hYmxlIG1lbW9yeSBjb250cm9sbGVyIGluIHN1YnRyZWUKJiM0MzsgICAgaW50IGZkID0gb3BlbihDR1JPVVBfUEFUSCAmIzM0Oy9jZ3JvdXAuc3VidHJlZV9jb250cm9sJiMzNDssIE9fV1JPTkxZKTsKJiM0MzsgICAgaWYgKGZkICZndDs9IDApIHsKJiM0MzsgICAgICAgIGlmICh3cml0ZShmZCwgJiMzNDsmIzQzO21lbW9yeSYjMzQ7LCA3KSAmbHQ7IDApIHsKJiM0MzsgICAgICAgICAgICAvLyBNaWdodCBmYWlsIGlmIGFscmVhZHkgZW5hYmxlZCBvciBub3Qgc3VwcG9ydGVkLCBpZ25vcmUgZm9yIG5vdwomIzQzOyAgICAgICAgfQomIzQzOyAgICAgICAgY2xvc2UoZmQpOwomIzQzOyAgICB9CiYjNDM7CiYjNDM7ICAgIGlmIChta2RpcihURVNUX0NHUk9VUF9QQVRILCAwNzU1KSAhPSAwKSB7CiYjNDM7ICAgICAgICBpZiAoZXJybm8gIT0gRUVYSVNUKSB7CiYjNDM7ICAgICAgICAgICAgcGVycm9yKCYjMzQ7bWtkaXIgdGVzdF9yZXByb2R1Y2VyJiMzNDspOwomIzQzOyAgICAgICAgICAgIHJldHVybiAxOwomIzQzOyAgICAgICAgfQomIzQzOyAgICB9CiYjNDM7CiYjNDM7ICAgIC8vIFNldCBtZW1vcnkgbGltaXQgdG8gMU1CIChsZXNzIHRoYW4gMk1CIGh1Z2VwYWdlKQomIzQzOyAgICB3cml0ZV9maWxlKFRFU1RfQ0dST1VQX1BBVEggJiMzNDsvbWVtb3J5Lm1heCYjMzQ7LCAmIzM0OzFNJiMzNDspOwomIzQzOwomIzQzOyAgICBwaWRfdCBwaWQgPSBmb3JrKCk7CiYjNDM7ICAgIGlmIChwaWQgJmx0OyAwKSB7CiYjNDM7ICAgICAgICBwZXJyb3IoJiMzNDtmb3JrJiMzNDspOwomIzQzOyAgICAgICAgcmV0dXJuIDE7CiYjNDM7ICAgIH0KJiM0MzsKJiM0MzsgICAgaWYgKHBpZCA9PSAwKSB7CiYjNDM7ICAgICAgICAvLyBDaGlsZAomIzQzOyAgICAgICAgLy8gTW92ZSB0byBjZ3JvdXAKJiM0MzsgICAgICAgIHdyaXRlX2ZpbGUoVEVTVF9DR1JPVVBfUEFUSCAmIzM0Oy9jZ3JvdXAucHJvY3MmIzM0OywgJiMzNDswJiMzNDspOwomIzQzOwomIzQzOyAgICAgICAgcHJpbnRmKCYjMzQ7Q2hpbGQ6IEF0dGVtcHRpbmcgdG8gYWxsb2NhdGUgYW5kIHRvdWNoIDJNQiBodWdlcGFnZS4uLlxuJiMzNDspOwomIzQzOyAgICAgICAgLy8gQWxsb2NhdGUgMk1CIGh1Z2VwYWdlCiYjNDM7ICAgICAgICBzaXplX3Qgc2l6ZSA9IDIgKiAxMDI0ICogMTAyNDsKJiM0MzsgICAgICAgIHZvaWQgKmFkZHIgPSBtbWFwKE5VTEwsIHNpemUsIFBST1RfUkVBRCB8IFBST1RfV1JJVEUsCiYjNDM7ICAgICAgICAgICAgICAgICAgICAgICAgICBNQVBfUFJJVkFURSB8IE1BUF9BTk9OWU1PVVMgfCBNQVBfSFVHRVRMQiwgLTEsIDApOwomIzQzOyAgICAgICAgaWYgKGFkZHIgPT0gTUFQX0ZBSUxFRCkgewomIzQzOyAgICAgICAgICAgIHBlcnJvcigmIzM0O0NoaWxkOiBtbWFwIE1BUF9IVUdFVExCJiMzNDspOwomIzQzOyAgICAgICAgICAgIGV4aXQoMSk7CiYjNDM7ICAgICAgICB9CiYjNDM7CiYjNDM7ICAgICAgICBwcmludGYoJiMzNDtDaGlsZDogbW1hcCBzdWNjZWVkZWQgYXQgJXAsIHRvdWNoaW5nIGl0IG5vdyAoc2hvdWxkIHRyaWdnZXIgZmF1bHQpLi4uXG4mIzM0OywgYWRkcik7CiYjNDM7ICAgICAgICAvLyBUaGlzIHNob3VsZCB0cmlnZ2VyIHRoZSBmYXVsdCBhbmQgY2FsbCBhbGxvY19odWdldGxiX2ZvbGlvIC0mZ3Q7IG1lbV9jZ3JvdXBfY2hhcmdlX2h1Z2V0bGIKJiM0MzsgICAgICAgIC8vIHdoaWNoIHNob3VsZCBmYWlsIGFuZCB0cmlnZ2VyIHRoZSBidWcuCiYjNDM7ICAgICAgICAqKHZvbGF0aWxlIGNoYXIgKilhZGRyID0gMTsKJiM0MzsKJiM0MzsgICAgICAgIHByaW50ZigmIzM0O0NoaWxkOiBTdWNjZXNzZnVsbHkgdG91Y2hlZCBwYWdlIChidWcgbm90IHRyaWdnZXJlZD8pLlxuJiMzNDspOwomIzQzOyAgICAgICAgbXVubWFwKGFkZHIsIHNpemUpOwomIzQzOyAgICAgICAgZXhpdCgwKTsKJiM0MzsgICAgfQomIzQzOwomIzQzOyAgICAvLyBQYXJlbnQKJiM0MzsgICAgaW50IHN0YXR1czsKJiM0MzsgICAgd2FpdHBpZChwaWQsICZhbXA7c3RhdHVzLCAwKTsKJiM0MzsKJiM0MzsgICAgcHJpbnRmKCYjMzQ7UGFyZW50OiBDaGlsZCBleGl0ZWQuIENsZWFuaW5nIHVwLlxuJiMzNDspOwomIzQzOyAgICBybWRpcihURVNUX0NHUk9VUF9QQVRIKTsKJiM0MzsKJiM0MzsgICAgaWYgKFdJRlNJR05BTEVEKHN0YXR1cykpIHsKJiM0MzsgICAgICAgIHByaW50ZigmIzM0O1BhcmVudDogQ2hpbGQga2lsbGVkIGJ5IHNpZ25hbCAlZCAoJXMpXG4mIzM0OywKJiM0MzsgICAgICAgICAgICAgICBXVEVSTVNJRyhzdGF0dXMpLCBzdHJzaWduYWwoV1RFUk1TSUcoc3RhdHVzKSkpOwomIzQzOyAgICAgICAgaWYgKFdURVJNU0lHKHN0YXR1cykgPT0gU0lHQlVTKSB7CiYjNDM7ICAgICAgICAgICAgcHJpbnRmKCYjMzQ7UGFyZW50OiBDaGlsZCBnb3QgU0lHQlVTIGFzIGV4cGVjdGVkIChpZiBrZXJuZWwgZGlkbiYjMzk7dCBjcmFzaCkuXG4mIzM0Oyk7CiYjNDM7ICAgICAgICB9CiYjNDM7ICAgIH0gZWxzZSBpZiAoV0lGRVhJVEVEKHN0YXR1cykpIHsKJiM0MzsgICAgICAgIHByaW50ZigmIzM0O1BhcmVudDogQ2hpbGQgZXhpdGVkIHdpdGggc3RhdHVzICVkXG4mIzM0OywgV0VYSVRTVEFUVVMoc3RhdHVzKSk7CiYjNDM7ICAgIH0KJiM0MzsKJiM0MzsgICAgcmV0dXJuIDA7CiYjNDM7fQpkaWZmIC0tZ2l0IGEvZnMvaHVnZXRsYmZzL2lub2RlLmMgYi9mcy9odWdldGxiZnMvaW5vZGUuYwppbmRleCAyMTZlMWEwZGQwYjIzNy4uOGFiZTA1NzRiMWM3ZWEgMTAwNjQ0Ci0tLSBhL2ZzL2h1Z2V0bGJmcy9pbm9kZS5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2h1Z2V0bGJmcy9pbm9kZS5jCkBAIC0yNSw2ICYjNDM7MjUsNyBAQAogI2luY2x1ZGUgJmx0O2xpbnV4L2N0eXBlLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvYmFja2luZy1kZXYuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9odWdldGxiLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJiMzNDsuLi8uLi9tbS9odWdldGxiX3N1YnBvb2wuaCYjMzQ7CiAjaW5jbHVkZSAmbHQ7bGludXgvZm9saW9fYmF0Y2guaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9mc19wYXJzZXIuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9tbWFuLmgmZ3Q7CkBAIC0xMDU5LDcgJiM0MzsxMDYwLDYgQEAgc3RhdGljIGludCBodWdldGxiZnNfc2hvd19vcHRpb25zKHN0cnVjdCBzZXFfZmlsZSAqbSwgc3RydWN0IGRlbnRyeSAqcm9vdCkKIAlzdHJ1Y3QgaHVnZXRsYmZzX3NiX2luZm8gKnNiaW5mbyA9IEhVR0VUTEJGU19TQihyb290LSZndDtkX3NiKTsKIAlzdHJ1Y3QgaHVnZXBhZ2Vfc3VicG9vbCAqc3Bvb2wgPSBzYmluZm8tJmd0O3Nwb29sOwogCXVuc2lnbmVkIGxvbmcgaHBhZ2Vfc2l6ZSA9IGh1Z2VfcGFnZV9zaXplKHNiaW5mby0mZ3Q7aHN0YXRlKTsKLQl1bnNpZ25lZCBocGFnZV9zaGlmdCA9IGh1Z2VfcGFnZV9zaGlmdChzYmluZm8tJmd0O2hzdGF0ZSk7CiAJY2hhciBtb2Q7CiAKIAlpZiAoIXVpZF9lcShzYmluZm8tJmd0O3VpZCwgR0xPQkFMX1JPT1RfVUlEKSkKQEAgLTEwODEsMTIgJiM0MzsxMDgxLDEzIEBAIHN0YXRpYyBpbnQgaHVnZXRsYmZzX3Nob3dfb3B0aW9ucyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHN0cnVjdCBkZW50cnkgKnJvb3QpCiAJfQogCXNlcV9wcmludGYobSwgJiMzNDsscGFnZXNpemU9JWx1JWMmIzM0OywgaHBhZ2Vfc2l6ZSwgbW9kKTsKIAlpZiAoc3Bvb2wpIHsKLQkJaWYgKHNwb29sLSZndDttYXhfaHBhZ2VzICE9IC0xKQotCQkJc2VxX3ByaW50ZihtLCAmIzM0OyxzaXplPSVsbHUmIzM0OywKLQkJCQkgICAodW5zaWduZWQgbG9uZyBsb25nKXNwb29sLSZndDttYXhfaHBhZ2VzICZsdDsmbHQ7IGhwYWdlX3NoaWZ0KTsKLQkJaWYgKHNwb29sLSZndDttaW5faHBhZ2VzICE9IC0xKQotCQkJc2VxX3ByaW50ZihtLCAmIzM0OyxtaW5fc2l6ZT0lbGx1JiMzNDssCi0JCQkJICAgKHVuc2lnbmVkIGxvbmcgbG9uZylzcG9vbC0mZ3Q7bWluX2hwYWdlcyAmbHQ7Jmx0OyBocGFnZV9zaGlmdCk7CiYjNDM7CQl1bnNpZ25lZCBsb25nIGxvbmcgbWF4X3NpemUgPSBodWdlcGFnZV9zdWJwb29sX21heF9zaXplKHNwb29sKTsKJiM0MzsJCXVuc2lnbmVkIGxvbmcgbG9uZyBtaW5fc2l6ZSA9IGh1Z2VwYWdlX3N1YnBvb2xfbWluX3NpemUoc3Bvb2wpOwomIzQzOwomIzQzOwkJaWYgKG1heF9zaXplICE9IC0xVUxMKQomIzQzOwkJCXNlcV9wcmludGYobSwgJiMzNDssc2l6ZT0lbGx1JiMzNDssIG1heF9zaXplKTsKJiM0MzsJCWlmIChtaW5fc2l6ZSAhPSAtMVVMTCkKJiM0MzsJCQlzZXFfcHJpbnRmKG0sICYjMzQ7LG1pbl9zaXplPSVsbHUmIzM0OywgbWluX3NpemUpOwogCX0KIAlyZXR1cm4gMDsKIH0KQEAgLTExMDUsMTQgJiM0MzsxMTA2LDggQEAgc3RhdGljIGludCBodWdldGxiZnNfc3RhdGZzKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGtzdGF0ZnMgKmJ1ZikKIAkJLyogSWYgbm8gbGltaXRzIHNldCwganVzdCByZXBvcnQgMCBvciAtMSBmb3IgbWF4L2ZyZWUvdXNlZAogCQkgKiBibG9ja3MsIGxpa2Ugc2ltcGxlX3N0YXRmcygpICovCiAJCWlmIChzYmluZm8tJmd0O3Nwb29sKSB7Ci0JCQlsb25nIGZyZWVfcGFnZXM7Ci0KLQkJCXNwaW5fbG9ja19pcnEoJmFtcDtzYmluZm8tJmd0O3Nwb29sLSZndDtsb2NrKTsKLQkJCWJ1Zi0mZ3Q7Zl9ibG9ja3MgPSBzYmluZm8tJmd0O3Nwb29sLSZndDttYXhfaHBhZ2VzOwotCQkJZnJlZV9wYWdlcyA9IHNiaW5mby0mZ3Q7c3Bvb2wtJmd0O21heF9ocGFnZXMKLQkJCQktIHNiaW5mby0mZ3Q7c3Bvb2wtJmd0O3VzZWRfaHBhZ2VzOwotCQkJYnVmLSZndDtmX2JhdmFpbCA9IGJ1Zi0mZ3Q7Zl9iZnJlZSA9IGZyZWVfcGFnZXM7Ci0JCQlzcGluX3VubG9ja19pcnEoJmFtcDtzYmluZm8tJmd0O3Nwb29sLSZndDtsb2NrKTsKJiM0MzsJCQlidWYtJmd0O2ZfYmxvY2tzID0gaHVnZXBhZ2Vfc3VicG9vbF9tYXhfaHBhZ2VzKHNiaW5mby0mZ3Q7c3Bvb2wpOwomIzQzOwkJCWJ1Zi0mZ3Q7Zl9iYXZhaWwgPSBidWYtJmd0O2ZfYmZyZWUgPSBodWdlcGFnZV9zdWJwb29sX2ZyZWVfaHBhZ2VzKHNiaW5mby0mZ3Q7c3Bvb2wpOwogCQkJYnVmLSZndDtmX2ZpbGVzID0gc2JpbmZvLSZndDttYXhfaW5vZGVzOwogCQkJYnVmLSZndDtmX2ZmcmVlID0gc2JpbmZvLSZndDtmcmVlX2lub2RlczsKIAkJfQpkaWZmIC0tZ2l0IGEvaHVnZXRsYl9yZXNlcnZlX3BhZ2VzX291dF9wdXRfcGFnZXMuYyBiL2h1Z2V0bGJfcmVzZXJ2ZV9wYWdlc19vdXRfcHV0X3BhZ2VzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAuLjllNjNmYzg5OTdkNTdkCi0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvaHVnZXRsYl9yZXNlcnZlX3BhZ2VzX291dF9wdXRfcGFnZXMuYwpAQCAtMCwwICYjNDM7MSw0OSBAQAomIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCiYjNDM7I2RlZmluZSBfR05VX1NPVVJDRQomIzQzOyNpbmNsdWRlICZsdDtzdGRpby5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtzdGRsaWIuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7dW5pc3RkLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O3N5cy9tbWFuLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2ZjbnRsLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2Vyci5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtlcnJuby5oJmd0OwomIzQzOwomIzQzO2ludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKJiM0Mzt7CiYjNDM7CWNvbnN0IGNoYXIgKmZpbGVfcGF0aDsKJiM0MzsJc2l6ZV90IHNpemU7CiYjNDM7CWludCBmZDsKJiM0MzsJdm9pZCAqYWRkcjsKJiM0MzsKJiM0MzsJaWYgKGFyZ2MgJmx0OyAzKSB7CiYjNDM7CQlmcHJpbnRmKHN0ZGVyciwgJiMzNDtVc2FnZTogJXMgJmx0O2h1Z2V0bGJmc19maWxlJmd0OyAmbHQ7c2l6ZV9pbl9ieXRlcyZndDtcbiYjMzQ7LAomIzQzOwkJCWFyZ3ZbMF0pOwomIzQzOwkJcmV0dXJuIDE7CiYjNDM7CX0KJiM0MzsKJiM0MzsJZmlsZV9wYXRoID0gYXJndlsxXTsKJiM0MzsJc2l6ZSA9IHN0cnRvdWxsKGFyZ3ZbMl0sIE5VTEwsIDApOwomIzQzOwomIzQzOwlmZCA9IG9wZW4oZmlsZV9wYXRoLCBPX0NSRUFUIHwgT19SRFdSLCAwNjY2KTsKJiM0MzsJaWYgKGZkICZsdDsgMCkKJiM0MzsJCWVycigxLCAmIzM0O29wZW4mIzM0Oyk7CiYjNDM7CiYjNDM7CXByaW50ZigmIzM0O0F0dGVtcHRpbmcgdG8gbW1hcCAlenUgYnl0ZXMgc2hhcmVkIG9uICVzLi4uXG4mIzM0Oywgc2l6ZSwKJiM0MzsJICAgICAgIGZpbGVfcGF0aCk7CiYjNDM7CWFkZHIgPSBtbWFwKE5VTEwsIHNpemUsIFBST1RfUkVBRCB8IFBST1RfV1JJVEUsIE1BUF9TSEFSRUQsIGZkLCAwKTsKJiM0MzsJaWYgKGFkZHIgPT0gTUFQX0ZBSUxFRCkgewomIzQzOwkJaWYgKGVycm5vID09IEVOT01FTSkgewomIzQzOwkJCXByaW50ZigmIzM0O21tYXAgZmFpbGVkIHdpdGggRU5PTUVNIGFzIGV4cGVjdGVkLlxuJiMzNDspOwomIzQzOwkJCWNsb3NlKGZkKTsKJiM0MzsJCQlyZXR1cm4gMDsKJiM0MzsJCX0KJiM0MzsJCXBlcnJvcigmIzM0O21tYXAgZmFpbGVkIHdpdGggdW5leHBlY3RlZCBlcnJvciYjMzQ7KTsKJiM0MzsJCWNsb3NlKGZkKTsKJiM0MzsJCXJldHVybiAxOwomIzQzOwl9CiYjNDM7CiYjNDM7CXByaW50ZigmIzM0O0VSUk9SOiBtbWFwIFNVQ0NFRURFRCB1bmV4cGVjdGVkbHkgYXQgJXBcbiYjMzQ7LCBhZGRyKTsKJiM0MzsJbXVubWFwKGFkZHIsIHNpemUpOwomIzQzOwljbG9zZShmZCk7CiYjNDM7CXJldHVybiAxOwomIzQzO30KZGlmZiAtLWdpdCBhL2h1Z2V0bGJfcmVzZXJ2ZV9wYWdlc19vdXRfcHV0X3BhZ2VzLnNoIGIvaHVnZXRsYl9yZXNlcnZlX3BhZ2VzX291dF9wdXRfcGFnZXMuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMDAwMDAwMDAuLjAzMGUxOTE1NTM5YjRlCi0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvaHVnZXRsYl9yZXNlcnZlX3BhZ2VzX291dF9wdXRfcGFnZXMuc2gKQEAgLTAsMCAmIzQzOzEsMTUzIEBACiYjNDM7IyEvYmluL2Jhc2gKJiM0MzsjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCiYjNDM7c2V0IC1lCiYjNDM7CiYjNDM7aWYgWyAmIzM0OyRFVUlEJiMzNDsgLW5lIDAgXTsgdGhlbgomIzQzOyAgICBlY2hvICYjMzQ7UGxlYXNlIHJ1biBhcyByb290JiMzNDsKJiM0MzsgICAgZXhpdCAxCiYjNDM7ZmkKJiM0MzsKJiM0MztTQ1JJUFRfRElSPSYjMzQ7JChjZCAmIzM0OyQoZGlybmFtZSAmIzM0OyR7QkFTSF9TT1VSQ0VbMF19JiMzNDspJiMzNDsgJmFtcDsmYW1wOyBwd2QpJiMzNDsKJiM0MztjZCAmIzM0OyRTQ1JJUFRfRElSJiMzNDsKJiM0MzsKJiM0MzsjIERldGVjdCBkZWZhdWx0IGh1Z2VwYWdlIHNpemUgdG8gc3VwcG9ydCBib3RoIDJNQiBhbmQgMUdCIHBhZ2VzIHJvYnVzdGx5CiYjNDM7aHB6PSQoZ3JlcCAtaSBodWdlcGFnZXNpemUgL3Byb2MvbWVtaW5mbyB8IGF3ayAmIzM5O3twcmludCAkMn0mIzM5OykKJiM0MztrYj0kaHB6CiYjNDM7bWI9JCgoa2IgLyAxMDI0KSkKJiM0MztocGFnZV9zaXplX2J5dGVzPSQoKGtiICogMTAyNCkpCiYjNDM7CiYjNDM7aHBhZ2VfZGlyPSYjMzQ7aHVnZXBhZ2VzLSR7a2J9a0ImIzM0OwomIzQzO1NZU0ZTX1BBVEg9JiMzNDsvc3lzL2tlcm5lbC9tbS9odWdlcGFnZXMvJGhwYWdlX2RpciYjMzQ7CiYjNDM7CiYjNDM7TU5UX1BBVEg9JiMzNDsvdG1wL21udF9odWdldGxiX3JlcHJvJiMzNDsKJiM0MztGSUxFX1BBVEg9JiMzNDskTU5UX1BBVEgvdGVzdF9maWxlJiMzNDsKJiM0MzsKJiM0MzsjIFNhdmUgb3JpZ2luYWwgdmFsdWVzIGZvciBzYWZlIHJlc3RvcmF0aW9uCiYjNDM7b3JpZ19ucj0kKGNhdCAmIzM0OyRTWVNGU19QQVRIL25yX2h1Z2VwYWdlcyYjMzQ7KQomIzQzO29yaWdfb3ZlcmNvbW1pdD0kKGNhdCAmIzM0OyRTWVNGU19QQVRIL25yX292ZXJjb21taXRfaHVnZXBhZ2VzJiMzNDspCiYjNDM7CiYjNDM7Y2xlYW51cCgpIHsKJiM0MzsgICAgZWNobyAmIzM0O0NsZWFuaW5nIHVwLi4uJiMzNDsKJiM0MzsgICAgcm0gLWYgJiMzNDskRklMRV9QQVRIJiMzNDsKJiM0MzsgICAgdW1vdW50ICYjMzQ7JE1OVF9QQVRIJiMzNDsgMiZndDsvZGV2L251bGwKJiM0MzsgICAgcm1kaXIgJiMzNDskTU5UX1BBVEgmIzM0OyAyJmd0Oy9kZXYvbnVsbAomIzQzOyAgICBlY2hvICYjMzQ7JG9yaWdfbnImIzM0OyAmZ3Q7ICYjMzQ7JFNZU0ZTX1BBVEgvbnJfaHVnZXBhZ2VzJiMzNDsKJiM0MzsgICAgZWNobyAmIzM0OyRvcmlnX292ZXJjb21taXQmIzM0OyAmZ3Q7ICYjMzQ7JFNZU0ZTX1BBVEgvbnJfb3ZlcmNvbW1pdF9odWdlcGFnZXMmIzM0OwomIzQzOyAgICBlY2hvICYjMzQ7Q2xlYW51cCBkb25lLiYjMzQ7CiYjNDM7fQomIzQzO3RyYXAgY2xlYW51cCBFWElUCiYjNDM7CiYjNDM7IyBWZXJpZnkgcmVwcm9kdWNlciBiaW5hcnkgZXhpc3RzCiYjNDM7aWYgWyAhIC14IC4vaHVnZXRsYl9yZXNlcnZlX3BhZ2VzX291dF9wdXRfcGFnZXMgXTsgdGhlbgomIzQzOyAgICBlY2hvICYjMzQ7cmVwcm9kdWNlciBiaW5hcnkgJiMzOTsuL2h1Z2V0bGJfcmVzZXJ2ZV9wYWdlc19vdXRfcHV0X3BhZ2VzJiMzOTsgbm90IGZvdW5kIG9yIG5vdCBleGVjdXRhYmxlLiYjMzQ7CiYjNDM7ICAgIGVjaG8gJiMzNDtQbGVhc2UgY29tcGlsZSBpdCBmaXJzdDogZ2NjIC1zdGF0aWMgLW8gaHVnZXRsYl9yZXNlcnZlX3BhZ2VzX291dF9wdXRfcGFnZXMgaHVnZXRsYl9yZXNlcnZlX3BhZ2VzX291dF9wdXRfcGFnZXMuYyYjMzQ7CiYjNDM7ICAgIGV4aXQgMQomIzQzO2ZpCiYjNDM7CiYjNDM7IyAxLiBTZXQgZ2xvYmFsIHBvb2wgc3VjaCB0aGF0IG9ubHkgdGhlIG1vdW50LXRpbWUgcmVzZXJ2YXRpb24gY2FuIHN1Y2NlZWQKJiM0MztlY2hvIDEgJmd0OyAmIzM0OyRTWVNGU19QQVRIL25yX2h1Z2VwYWdlcyYjMzQ7CiYjNDM7ZWNobyAwICZndDsgJiMzNDskU1lTRlNfUEFUSC9ucl9vdmVyY29tbWl0X2h1Z2VwYWdlcyYjMzQ7CiYjNDM7CiYjNDM7aW5pdGlhbF9yZXN2PSQoY2F0ICYjMzQ7JFNZU0ZTX1BBVEgvcmVzdl9odWdlcGFnZXMmIzM0OykKJiM0MztlY2hvICYjMzQ7SW5pdGlhbCByZXN2X2h1Z2VwYWdlcyAoYmVmb3JlIG1vdW50KTogJGluaXRpYWxfcmVzdiYjMzQ7CiYjNDM7CiYjNDM7IyAyLiBNb3VudCB3aXRoIG1pbl9zaXplID0gMSBwYWdlLCBtYXggc2l6ZSA9IDIgcGFnZXMKJiM0MzttaW5fc2l6ZV9zdHI9JiMzNDske21ifU0mIzM0OwomIzQzO21heF9zaXplX3N0cj0mIzM0OyQoKG1iICogMikpTSYjMzQ7CiYjNDM7bW1hcF9zaXplX2J5dGVzPSQoKGhwYWdlX3NpemVfYnl0ZXMgKiAyKSkKJiM0MzsKJiM0Mztta2RpciAtcCAmIzM0OyRNTlRfUEFUSCYjMzQ7CiYjNDM7ZWNobyAmIzM0O01vdW50aW5nIGh1Z2V0bGJmcyB3aXRoIHBhZ2VzaXplPSR7bWJ9TSwgbWluX3NpemU9JG1pbl9zaXplX3N0ciwgc2l6ZT0kbWF4X3NpemVfc3RyLi4uJiMzNDsKJiM0MztpZiAhIG1vdW50IC10IGh1Z2V0bGJmcyAtbyAmIzM0O3BhZ2VzaXplPSR7bWJ9TSxtaW5fc2l6ZT0kbWluX3NpemVfc3RyLHNpemU9JG1heF9zaXplX3N0ciYjMzQ7IG5vbmUgJiMzNDskTU5UX1BBVEgmIzM0OzsgdGhlbgomIzQzOyAgICBlY2hvICYjMzQ7RmFpbGVkIHRvIG1vdW50IGh1Z2V0bGJmcyYjMzQ7CiYjNDM7ICAgIGV4aXQgMQomIzQzO2ZpCiYjNDM7CiYjNDM7cmVzdl9hZnRlcl9tb3VudD0kKGNhdCAmIzM0OyRTWVNGU19QQVRIL3Jlc3ZfaHVnZXBhZ2VzJiMzNDspCiYjNDM7ZWNobyAmIzM0O3Jlc3ZfaHVnZXBhZ2VzIGFmdGVyIG1vdW50OiAkcmVzdl9hZnRlcl9tb3VudCYjMzQ7CiYjNDM7ZXhwZWN0ZWRfYWZ0ZXJfbW91bnQ9JCgoaW5pdGlhbF9yZXN2ICYjNDM7IDEpKQomIzQzO2lmIFsgJiMzNDskcmVzdl9hZnRlcl9tb3VudCYjMzQ7ICE9ICYjMzQ7JGV4cGVjdGVkX2FmdGVyX21vdW50JiMzNDsgXTsgdGhlbgomIzQzOyAgICBlY2hvICYjMzQ7RVJST1I6IHJlc3ZfaHVnZXBhZ2VzIGlzIG5vdCAkZXhwZWN0ZWRfYWZ0ZXJfbW91bnQgYWZ0ZXIgbW91bnQgKGFjdHVhbDogJHJlc3ZfYWZ0ZXJfbW91bnQpISYjMzQ7CiYjNDM7ICAgIGV4aXQgMQomIzQzO2ZpCiYjNDM7CiYjNDM7IyBDaGVjayBtb3VudCBzdGF0cyBhZnRlciBtb3VudAomIzQzO2V4cGVjdGVkX2JzaXplPSRocGFnZV9zaXplX2J5dGVzCiYjNDM7YnNpemVfUz0kKHN0YXQgLWYgLWMgJiMzNDslUyYjMzQ7ICYjMzQ7JE1OVF9QQVRIJiMzNDspCiYjNDM7YnNpemVfcz0kKHN0YXQgLWYgLWMgJiMzNDslcyYjMzQ7ICYjMzQ7JE1OVF9QQVRIJiMzNDspCiYjNDM7ZWNobyAmIzM0O01vdW50IGJsb2NrIHNpemUgYWZ0ZXIgbW91bnQ6ICRic2l6ZV9TIC8gJGJzaXplX3MgKGV4cGVjdGVkOiAkZXhwZWN0ZWRfYnNpemUpJiMzNDsKJiM0MztpZiBbICYjMzQ7JGJzaXplX1MmIzM0OyAhPSAmIzM0OyRleHBlY3RlZF9ic2l6ZSYjMzQ7IF0gJmFtcDsmYW1wOyBbICYjMzQ7JGJzaXplX3MmIzM0OyAhPSAmIzM0OyRleHBlY3RlZF9ic2l6ZSYjMzQ7IF07IHRoZW4KJiM0MzsgICAgZWNobyAmIzM0O0VSUk9SOiBVbmV4cGVjdGVkIG1vdW50IGJsb2NrIHNpemUgYWZ0ZXIgbW91bnQgKGFjdHVhbCBTOiRic2l6ZV9TIHM6JGJzaXplX3MsIGV4cGVjdGVkOiAkZXhwZWN0ZWRfYnNpemUpJiMzNDsKJiM0MzsgICAgZXhpdCAxCiYjNDM7ZmkKJiM0MzsKJiM0MzthY3R1YWxfc3RhdHNfbW91bnQ9JChzdGF0IC1mIC1jICYjMzQ7JWIgJWYgJWEmIzM0OyAmIzM0OyRNTlRfUEFUSCYjMzQ7KQomIzQzO2V4cGVjdGVkX3N0YXRzX21vdW50PSYjMzQ7MiAyIDImIzM0OwomIzQzO2VjaG8gJiMzNDtNb3VudCBzdGF0cyBhZnRlciBtb3VudCAodG90YWwgZnJlZSBhdmFpbCk6ICRhY3R1YWxfc3RhdHNfbW91bnQgKGV4cGVjdGVkOiAkZXhwZWN0ZWRfc3RhdHNfbW91bnQpJiMzNDsKJiM0MztpZiBbICYjMzQ7JGFjdHVhbF9zdGF0c19tb3VudCYjMzQ7ICE9ICYjMzQ7JGV4cGVjdGVkX3N0YXRzX21vdW50JiMzNDsgXTsgdGhlbgomIzQzOyAgICBlY2hvICYjMzQ7RVJST1I6IFVuZXhwZWN0ZWQgbW91bnQgc3RhdHMgYWZ0ZXIgbW91bnQ6ICRhY3R1YWxfc3RhdHNfbW91bnQgKGV4cGVjdGVkOiAkZXhwZWN0ZWRfc3RhdHNfbW91bnQpJiMzNDsKJiM0MzsgICAgZXhpdCAxCiYjNDM7ZmkKJiM0MzsKJiM0MzsjIDMuIFJ1biB0aGUgcmVwcm9kdWNlciB0byB0cmlnZ2VyIHRoZSBvdXRfcHV0X3BhZ2VzIGZhaWx1cmUgcGF0aAomIzQzO2VjaG8gJiMzNDtSdW5uaW5nIHJlcHJvZHVjZXIgKGV4cGVjdGluZyBtbWFwIGZhaWx1cmUgd2l0aCBFTk9NRU0pLi4uJiMzNDsKJiM0MztpZiAuL2h1Z2V0bGJfcmVzZXJ2ZV9wYWdlc19vdXRfcHV0X3BhZ2VzICYjMzQ7JEZJTEVfUEFUSCYjMzQ7ICYjMzQ7JG1tYXBfc2l6ZV9ieXRlcyYjMzQ7OyB0aGVuCiYjNDM7ICAgIGVjaG8gJiMzNDtSZXByb2R1Y2VyIGZpbmlzaGVkIHN1Y2Nlc3NmdWxseS4mIzM0OwomIzQzOyAgICByZXN2X2FmdGVyX21tYXA9JChjYXQgJiMzNDskU1lTRlNfUEFUSC9yZXN2X2h1Z2VwYWdlcyYjMzQ7KQomIzQzOyAgICBlY2hvICYjMzQ7cmVzdl9odWdlcGFnZXMgYWZ0ZXIgZmFpbGVkIG1tYXA6ICRyZXN2X2FmdGVyX21tYXAmIzM0OwomIzQzOyAgICBleHBlY3RlZF9hZnRlcl9tbWFwPSRleHBlY3RlZF9hZnRlcl9tb3VudAomIzQzOyAgICBpZiBbICYjMzQ7JHJlc3ZfYWZ0ZXJfbW1hcCYjMzQ7ID0gJiMzNDskZXhwZWN0ZWRfYWZ0ZXJfbW1hcCYjMzQ7IF07IHRoZW4KJiM0MzsgICAgICAgIGVjaG8gJiMzNDtSRVNVTFQ6IG91dF9wdXRfcGFnZXMgRVhFUkNJU0VEIChyZXN2X2h1Z2VwYWdlcyBwcmVzZXJ2ZWQgYXQgJGV4cGVjdGVkX2FmdGVyX21tYXAgYXMgZXhwZWN0ZWQpJiMzNDsKJiM0MzsKJiM0MzsgICAgICAgICMgQ2hlY2sgbW91bnQgc3RhdHMKJiM0MzsgICAgICAgIGV4cGVjdGVkX2JzaXplPSRocGFnZV9zaXplX2J5dGVzCiYjNDM7ICAgICAgICBic2l6ZV9TPSQoc3RhdCAtZiAtYyAmIzM0OyVTJiMzNDsgJiMzNDskTU5UX1BBVEgmIzM0OykKJiM0MzsgICAgICAgIGJzaXplX3M9JChzdGF0IC1mIC1jICYjMzQ7JXMmIzM0OyAmIzM0OyRNTlRfUEFUSCYjMzQ7KQomIzQzOyAgICAgICAgZWNobyAmIzM0O01vdW50IGJsb2NrIHNpemU6ICRic2l6ZV9TIC8gJGJzaXplX3MgKGV4cGVjdGVkOiAkZXhwZWN0ZWRfYnNpemUpJiMzNDsKJiM0MzsgICAgICAgIGlmIFsgJiMzNDskYnNpemVfUyYjMzQ7ICE9ICYjMzQ7JGV4cGVjdGVkX2JzaXplJiMzNDsgXSAmYW1wOyZhbXA7IFsgJiMzNDskYnNpemVfcyYjMzQ7ICE9ICYjMzQ7JGV4cGVjdGVkX2JzaXplJiMzNDsgXTsgdGhlbgomIzQzOyAgICAgICAgICAgIGVjaG8gJiMzNDtFUlJPUjogVW5leHBlY3RlZCBtb3VudCBibG9jayBzaXplIChhY3R1YWwgUzokYnNpemVfUyBzOiRic2l6ZV9zLCBleHBlY3RlZDogJGV4cGVjdGVkX2JzaXplKSYjMzQ7CiYjNDM7ICAgICAgICAgICAgZXhpdCAxCiYjNDM7ICAgICAgICBmaQomIzQzOwomIzQzOyAgICAgICAgYWN0dWFsX3N0YXRzPSQoc3RhdCAtZiAtYyAmIzM0OyViICVmICVhJiMzNDsgJiMzNDskTU5UX1BBVEgmIzM0OykKJiM0MzsgICAgICAgIGV4cGVjdGVkX3N0YXRzPSYjMzQ7MiAyIDImIzM0OwomIzQzOyAgICAgICAgZWNobyAmIzM0O01vdW50IHN0YXRzICh0b3RhbCBmcmVlIGF2YWlsKTogJGFjdHVhbF9zdGF0cyAoZXhwZWN0ZWQ6ICRleHBlY3RlZF9zdGF0cykmIzM0OwomIzQzOyAgICAgICAgaWYgWyAmIzM0OyRhY3R1YWxfc3RhdHMmIzM0OyAhPSAmIzM0OyRleHBlY3RlZF9zdGF0cyYjMzQ7IF07IHRoZW4KJiM0MzsgICAgICAgICAgICBlY2hvICYjMzQ7UkVTVUxUOiBVbmV4cGVjdGVkIG1vdW50IHN0YXRzIGFmdGVyIGZhaWxlZCBtbWFwIChGQUlMKSYjMzQ7CiYjNDM7ICAgICAgICAgICAgZXhpdCAxCiYjNDM7ICAgICAgICBlbHNlCiYjNDM7ICAgICAgICAgICAgZWNobyAmIzM0O1JFU1VMVDogTW91bnQgc3RhdHMgcmVzdG9yZWQgdG8gJGV4cGVjdGVkX3N0YXRzIGFzIGV4cGVjdGVkIChQQVNTKSYjMzQ7CiYjNDM7ICAgICAgICBmaQomIzQzOyAgICBlbHNlCiYjNDM7ICAgICAgICBlY2hvICYjMzQ7UkVTVUxUOiBVbmV4cGVjdGVkIHJlc3ZfaHVnZXBhZ2VzIHZhbHVlOiAkcmVzdl9hZnRlcl9tbWFwIChleHBlY3RlZDogJGV4cGVjdGVkX2FmdGVyX21tYXApJiMzNDsKJiM0MzsgICAgICAgIGV4aXQgMQomIzQzOyAgICBmaQomIzQzO2Vsc2UKJiM0MzsgICAgZWNobyAmIzM0O0ZBSUw6IFJlcHJvZHVjZXIgcmV0dXJuZWQgbm9uLXplcm8gKG1tYXAgZGlkbiYjMzk7dCBmYWlsIHdpdGggRU5PTUVNKSYjMzQ7CiYjNDM7ICAgIGV4aXQgMQomIzQzO2ZpCiYjNDM7CiYjNDM7IyA0LiBEaXNhYmxlIHRyYXAgYW5kIGRvIG1hbnVhbCBjbGVhbnVwIHRvIGNoZWNrIGZvciBmaW5hbCB1bm1vdW50IHVuZGVyZmxvdwomIzQzO3RyYXAgLSBFWElUCiYjNDM7CiYjNDM7ZWNobyAmIzM0O1VubW91bnRpbmcuLi4mIzM0OwomIzQzO3Vtb3VudCAmIzM0OyRNTlRfUEFUSCYjMzQ7CiYjNDM7cm1kaXIgJiMzNDskTU5UX1BBVEgmIzM0OwomIzQzOwomIzQzO2ZpbmFsX3Jlc3Y9JChjYXQgJiMzNDskU1lTRlNfUEFUSC9yZXN2X2h1Z2VwYWdlcyYjMzQ7KQomIzQzO2VjaG8gJiMzNDtGaW5hbCByZXN2X2h1Z2VwYWdlcyAoYWZ0ZXIgdW5tb3VudCk6ICRmaW5hbF9yZXN2JiMzNDsKJiM0MzsKJiM0MzsjIFJlc3RvcmUgb3JpZ2luYWwgdmFsdWVzCiYjNDM7ZWNobyAmIzM0O1Jlc3RvcmluZyBvcmlnaW5hbCBodWdlcGFnZSBzZXR0aW5ncy4uLiYjMzQ7CiYjNDM7ZWNobyAmIzM0OyRvcmlnX25yJiMzNDsgJmd0OyAmIzM0OyRTWVNGU19QQVRIL25yX2h1Z2VwYWdlcyYjMzQ7CiYjNDM7ZWNobyAmIzM0OyRvcmlnX292ZXJjb21taXQmIzM0OyAmZ3Q7ICYjMzQ7JFNZU0ZTX1BBVEgvbnJfb3ZlcmNvbW1pdF9odWdlcGFnZXMmIzM0OwomIzQzOwomIzQzO2lmIFsgJiMzNDskZmluYWxfcmVzdiYjMzQ7ID0gJiMzNDskaW5pdGlhbF9yZXN2JiMzNDsgXTsgdGhlbgomIzQzOyAgICBlY2hvICYjMzQ7UkVTVUxUOiBTdGF0ZSByZXN0b3JlZCB0byAkaW5pdGlhbF9yZXN2IChvciBjbGVhbmVkIHVwIGlmIGZpeGVkKSYjMzQ7CiYjNDM7ICAgIGVjaG8gJiMzNDtBTEwgRE9ORS4mIzM0OwomIzQzOyAgICBleGl0IDAKJiM0MztlbHNlCiYjNDM7ICAgIGVjaG8gJiMzNDtSRVNVTFQ6IFVuZGVyZmxvdy9MZWFrL0luY29ycmVjdCBzdGF0ZSBkZXRlY3RlZCEgKGZpbmFsX3Jlc3YgPSAkZmluYWxfcmVzdiwgZXhwZWN0ZWQgPSAkaW5pdGlhbF9yZXN2KSYjMzQ7CiYjNDM7ICAgIGVjaG8gJiMzNDtBTEwgRE9ORS4mIzM0OwomIzQzOyAgICBleGl0IDEKJiM0MztmaQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9odWdldGxiLmggYi9pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaAppbmRleCAyYWJhZjk5MzIxZTkwZC4uMDc0YTQ1OTAzOTczZWIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvaHVnZXRsYi5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvaHVnZXRsYi5oCkBAIC0xOCw2ICYjNDM7MTgsNyBAQAogCiBzdHJ1Y3QgbW11X2dhdGhlcjsKIHN0cnVjdCBub2RlOwomIzQzO3N0cnVjdCBoc3RhdGU7CiAKIHZvaWQgZnJlZV9odWdlX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8pOwogCkBAIC0zNCwxNyAmIzQzOzM1LDcgQEAgdm9pZCBmcmVlX2h1Z2VfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbyk7CiAgKi8KICNkZWZpbmUgX19OUl9VU0VEX1NVQlBBR0UgMwogCi1zdHJ1Y3QgaHVnZXBhZ2Vfc3VicG9vbCB7Ci0Jc3BpbmxvY2tfdCBsb2NrOwotCWxvbmcgY291bnQ7Ci0JbG9uZyBtYXhfaHBhZ2VzOwkvKiBNYXhpbXVtIGh1Z2UgcGFnZXMgb3IgLTEgaWYgbm8gbWF4aW11bS4gKi8KLQlsb25nIHVzZWRfaHBhZ2VzOwkvKiBVc2VkIGNvdW50IGFnYWluc3QgbWF4aW11bSwgaW5jbHVkZXMgKi8KLQkJCQkvKiBib3RoIGFsbG9jYXRlZCBhbmQgcmVzZXJ2ZWQgcGFnZXMuICovCi0Jc3RydWN0IGhzdGF0ZSAqaHN0YXRlOwotCWxvbmcgbWluX2hwYWdlczsJLyogTWluaW11bSBodWdlIHBhZ2VzIG9yIC0xIGlmIG5vIG1pbmltdW0uICovCi0JbG9uZyByc3ZfaHBhZ2VzOwkvKiBQYWdlcyByZXNlcnZlZCBhZ2FpbnN0IGdsb2JhbCBwb29sIHRvICovCi0JCQkJLyogc2F0aXNmeSBtaW5pbXVtIHNpemUuICovCi19OwomIzQzO3N0cnVjdCBodWdlcGFnZV9zdWJwb29sOwogCiBzdHJ1Y3QgcmVzdl9tYXAgewogCXN0cnVjdCBrcmVmIHJlZnM7CkBAIC0xMTQsOSAmIzQzOzEwNSw3IEBAIGV4dGVybiBpbnQgaHVnZXRsYl9tYXhfaHN0YXRlIF9fcmVhZF9tb3N0bHk7CiAjZGVmaW5lIGZvcl9lYWNoX2hzdGF0ZShoKSBcCiAJZm9yICgoaCkgPSBoc3RhdGVzOyAoaCkgJmx0OyAmYW1wO2hzdGF0ZXNbaHVnZXRsYl9tYXhfaHN0YXRlXTsgKGgpJiM0MzsmIzQzOykKIAotc3RydWN0IGh1Z2VwYWdlX3N1YnBvb2wgKmh1Z2VwYWdlX25ld19zdWJwb29sKHN0cnVjdCBoc3RhdGUgKmgsIGxvbmcgbWF4X2hwYWdlcywKLQkJCQkJCWxvbmcgbWluX2hwYWdlcyk7Ci12b2lkIGh1Z2VwYWdlX3B1dF9zdWJwb29sKHN0cnVjdCBodWdlcGFnZV9zdWJwb29sICpzcG9vbCk7CiYjNDM7aW50IGh1Z2V0bGJfYWNjdF9tZW1vcnkoc3RydWN0IGhzdGF0ZSAqaCwgbG9uZyBkZWx0YSk7CiAKIHZvaWQgaHVnZXRsYl9kdXBfdm1hX3ByaXZhdGUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpOwogdm9pZCBjbGVhcl92bWFfcmVzdl9odWdlX3BhZ2VzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oIGIvaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgKaW5kZXggZTFmNDZhMDAxNmZjZmQuLjIzZmJiYmM4ZTExZjIwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaApAQCAtNjQxLDcgJiM0Mzs2NDEsMTUgQEAgc3RhdGljIGlubGluZSBpbnQgbWVtX2Nncm91cF9jaGFyZ2Uoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IG1tX3N0cnVjdCAqbW0sCiAJcmV0dXJuIF9fbWVtX2Nncm91cF9jaGFyZ2UoZm9saW8sIG1tLCBnZnApOwogfQogCi1pbnQgbWVtX2Nncm91cF9jaGFyZ2VfaHVnZXRsYihzdHJ1Y3QgZm9saW8qIGZvbGlvLCBnZnBfdCBnZnApOwomIzQzO2ludCBtZW1fY2dyb3VwX2h1Z2V0bGJfdHJ5X2NoYXJnZSh1bnNpZ25lZCBpbnQgbnJfcGFnZXMsIGdmcF90IGdmcCwKJiM0MzsJCQkJICBzdHJ1Y3QgbWVtX2Nncm91cCAqKm1lbWNnX3AsCiYjNDM7CQkJCSAgc3RydWN0IG9ial9jZ3JvdXAgKipvYmpjZ19wKTsKJiM0Mzt2b2lkIG1lbV9jZ3JvdXBfaHVnZXRsYl9jb21taXRfY2hhcmdlKHN0cnVjdCBmb2xpbyAqZm9saW8sCiYjNDM7CQkJCSAgICAgIHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywKJiM0MzsJCQkJICAgICAgc3RydWN0IG9ial9jZ3JvdXAgKm9iamNnKTsKJiM0Mzt2b2lkIG1lbV9jZ3JvdXBfaHVnZXRsYl9jYW5jZWxfY2hhcmdlKHVuc2lnbmVkIGludCBucl9wYWdlcywKJiM0MzsJCQkJICAgICAgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLAomIzQzOwkJCQkgICAgICBzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2cpOwogCiBpbnQgbWVtX2Nncm91cF9zd2FwaW5fY2hhcmdlX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sIHVuc2lnbmVkIHNob3J0IGlkLAogCQkJCSAgIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBnZnBfdCBnZnApOwpAQCAtMTEyOCw5ICYjNDM7MTEzNiwyNSBAQCBzdGF0aWMgaW5saW5lIGludCBtZW1fY2dyb3VwX2NoYXJnZShzdHJ1Y3QgZm9saW8gKmZvbGlvLAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW5saW5lIGludCBtZW1fY2dyb3VwX2NoYXJnZV9odWdldGxiKHN0cnVjdCBmb2xpbyogZm9saW8sIGdmcF90IGdmcCkKJiM0MztzdGF0aWMgaW5saW5lIGludCBtZW1fY2dyb3VwX2h1Z2V0bGJfdHJ5X2NoYXJnZSh1bnNpZ25lZCBpbnQgbnJfcGFnZXMsIGdmcF90IGdmcCwKJiM0MzsJCQkJCQlzdHJ1Y3QgbWVtX2Nncm91cCAqKm1lbWNnX3AsCiYjNDM7CQkJCQkJc3RydWN0IG9ial9jZ3JvdXAgKipvYmpjZ19wKQomIzQzO3sKJiM0MzsJKm1lbWNnX3AgPSBOVUxMOwomIzQzOwkqb2JqY2dfcCA9IE5VTEw7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgbWVtX2Nncm91cF9odWdldGxiX2NvbW1pdF9jaGFyZ2Uoc3RydWN0IGZvbGlvICpmb2xpbywKJiM0MzsJCQkJCQkgICAgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLAomIzQzOwkJCQkJCSAgICBzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2cpCiYjNDM7ewomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgbWVtX2Nncm91cF9odWdldGxiX2NhbmNlbF9jaGFyZ2UodW5zaWduZWQgaW50IG5yX3BhZ2VzLAomIzQzOwkJCQkJCSAgICBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csCiYjNDM7CQkJCQkJICAgIHN0cnVjdCBvYmpfY2dyb3VwICpvYmpjZykKIHsKLSAgICAgICAgcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbmxpbmUgaW50IG1lbV9jZ3JvdXBfc3dhcGluX2NoYXJnZV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvLApkaWZmIC0tZ2l0IGEvbW0vTWFrZWZpbGUgYi9tbS9NYWtlZmlsZQppbmRleCBlZmY5ZjllN2UwNjFjMS4uMzk2NWM5NTllNTA5OTIgMTAwNjQ0Ci0tLSBhL21tL01ha2VmaWxlCiYjNDM7JiM0MzsmIzQzOyBiL21tL01ha2VmaWxlCkBAIC03OCw3ICYjNDM7NzgsNyBAQCBlbmRpZgogb2JqLSQoQ09ORklHX1NXQVApCSYjNDM7PSBwYWdlX2lvLm8gc3dhcF9zdGF0ZS5vIHN3YXBmaWxlLm8KIG9iai0kKENPTkZJR19aU1dBUCkJJiM0Mzs9IHpzd2FwLm8KIG9iai0kKENPTkZJR19IQVNfRE1BKQkmIzQzOz0gZG1hcG9vbC5vCi1vYmotJChDT05GSUdfSFVHRVRMQkZTKQkmIzQzOz0gaHVnZXRsYi5vIGh1Z2V0bGJfc3lzZnMubyBodWdldGxiX3N5c2N0bC5vCiYjNDM7b2JqLSQoQ09ORklHX0hVR0VUTEJGUykJJiM0Mzs9IGh1Z2V0bGIubyBodWdldGxiX3N1YnBvb2wubyBodWdldGxiX3N5c2ZzLm8gaHVnZXRsYl9zeXNjdGwubwogaWZkZWYgQ09ORklHX0NNQQogb2JqLSQoQ09ORklHX0hVR0VUTEJGUykJJiM0Mzs9IGh1Z2V0bGJfY21hLm8KIGVuZGlmCmRpZmYgLS1naXQgYS9tbS9odWdldGxiLmMgYi9tbS9odWdldGxiLmMKaW5kZXggNTcxMjEyYjgwODM1ZWMuLmU4N2YyNmEzZTFmM2U0IDEwMDY0NAotLS0gYS9tbS9odWdldGxiLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vaHVnZXRsYi5jCkBAIC0zOCw2ICYjNDM7MzgsOCBAQAogI2luY2x1ZGUgJmx0O2xpbnV4L21tX2lubGluZS5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3BhZGF0YS5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3BnYWxsb2MuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvbWVtY29udHJvbC5oJmd0OwomIzQzOyNpbmNsdWRlICYjMzQ7aHVnZXRsYl9zdWJwb29sLmgmIzM0OwogCiAjaW5jbHVkZSAmbHQ7YXNtL3BhZ2UuaCZndDsKICNpbmNsdWRlICZsdDthc20vdGxiLmgmZ3Q7CkBAIC0xMTMsOCAmIzQzOzExNSw3IEBAIF9fY2FjaGVsaW5lX2FsaWduZWRfaW5fc21wIERFRklORV9TUElOTE9DSyhodWdldGxiX2xvY2spOwogc3RhdGljIGludCBudW1fZmF1bHRfbXV0ZXhlcyBfX3JvX2FmdGVyX2luaXQ7CiBzdHJ1Y3QgbXV0ZXggKmh1Z2V0bGJfZmF1bHRfbXV0ZXhfdGFibGUgX19yb19hZnRlcl9pbml0OwogCi0vKiBGb3J3YXJkIGRlY2xhcmF0aW9uICovCi1zdGF0aWMgaW50IGh1Z2V0bGJfYWNjdF9tZW1vcnkoc3RydWN0IGhzdGF0ZSAqaCwgbG9uZyBkZWx0YSk7CiYjNDM7LyogRm9yd2FyZCBkZWNsYXJhdGlvbnMgKi8KIHN0YXRpYyB2b2lkIGh1Z2V0bGJfdm1hX2xvY2tfZnJlZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSk7CiBzdGF0aWMgdm9pZCBodWdldGxiX3ZtYV9sb2NrX2FsbG9jKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKTsKIHN0YXRpYyB2b2lkIF9faHVnZXRsYl92bWFfdW5sb2NrX3dyaXRlX2ZyZWUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpOwpAQCAtMTI1LDE1NiAmIzQzOzEyNiw2IEBAIHN0YXRpYyB2b2lkIGh1Z2V0bGJfdW5zaGFyZV9wbWRzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAogCQl1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCwgYm9vbCB0YWtlX2xvY2tzKTsKIHN0YXRpYyBzdHJ1Y3QgcmVzdl9tYXAgKnZtYV9yZXN2X21hcChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSk7CiAKLXN0YXRpYyBpbmxpbmUgYm9vbCBzdWJwb29sX2lzX2ZyZWUoc3RydWN0IGh1Z2VwYWdlX3N1YnBvb2wgKnNwb29sKQotewotCWlmIChzcG9vbC0mZ3Q7Y291bnQpCi0JCXJldHVybiBmYWxzZTsKLQlpZiAoc3Bvb2wtJmd0O21heF9ocGFnZXMgIT0gLTEpCi0JCXJldHVybiBzcG9vbC0mZ3Q7dXNlZF9ocGFnZXMgPT0gMDsKLQlpZiAoc3Bvb2wtJmd0O21pbl9ocGFnZXMgIT0gLTEpCi0JCXJldHVybiBzcG9vbC0mZ3Q7cnN2X2hwYWdlcyA9PSBzcG9vbC0mZ3Q7bWluX2hwYWdlczsKLQotCXJldHVybiB0cnVlOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgdW5sb2NrX29yX3JlbGVhc2Vfc3VicG9vbChzdHJ1Y3QgaHVnZXBhZ2Vfc3VicG9vbCAqc3Bvb2wsCi0JCQkJCQl1bnNpZ25lZCBsb25nIGlycV9mbGFncykKLXsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhbXA7c3Bvb2wtJmd0O2xvY2ssIGlycV9mbGFncyk7Ci0KLQkvKiBJZiBubyBwYWdlcyBhcmUgdXNlZCwgYW5kIG5vIG90aGVyIGhhbmRsZXMgdG8gdGhlIHN1YnBvb2wKLQkgKiByZW1haW4sIGdpdmUgdXAgYW55IHJlc2VydmF0aW9ucyBiYXNlZCBvbiBtaW5pbXVtIHNpemUgYW5kCi0JICogZnJlZSB0aGUgc3VicG9vbCAqLwotCWlmIChzdWJwb29sX2lzX2ZyZWUoc3Bvb2wpKSB7Ci0JCWlmIChzcG9vbC0mZ3Q7bWluX2hwYWdlcyAhPSAtMSkKLQkJCWh1Z2V0bGJfYWNjdF9tZW1vcnkoc3Bvb2wtJmd0O2hzdGF0ZSwKLQkJCQkJCS1zcG9vbC0mZ3Q7bWluX2hwYWdlcyk7Ci0JCWtmcmVlKHNwb29sKTsKLQl9Ci19Ci0KLXN0cnVjdCBodWdlcGFnZV9zdWJwb29sICpodWdlcGFnZV9uZXdfc3VicG9vbChzdHJ1Y3QgaHN0YXRlICpoLCBsb25nIG1heF9ocGFnZXMsCi0JCQkJCQlsb25nIG1pbl9ocGFnZXMpCi17Ci0Jc3RydWN0IGh1Z2VwYWdlX3N1YnBvb2wgKnNwb29sOwotCi0Jc3Bvb2wgPSBremFsbG9jX29iaigqc3Bvb2wpOwotCWlmICghc3Bvb2wpCi0JCXJldHVybiBOVUxMOwotCi0Jc3Bpbl9sb2NrX2luaXQoJmFtcDtzcG9vbC0mZ3Q7bG9jayk7Ci0Jc3Bvb2wtJmd0O2NvdW50ID0gMTsKLQlzcG9vbC0mZ3Q7bWF4X2hwYWdlcyA9IG1heF9ocGFnZXM7Ci0Jc3Bvb2wtJmd0O2hzdGF0ZSA9IGg7Ci0Jc3Bvb2wtJmd0O21pbl9ocGFnZXMgPSBtaW5faHBhZ2VzOwotCi0JaWYgKG1pbl9ocGFnZXMgIT0gLTEgJmFtcDsmYW1wOyBodWdldGxiX2FjY3RfbWVtb3J5KGgsIG1pbl9ocGFnZXMpKSB7Ci0JCWtmcmVlKHNwb29sKTsKLQkJcmV0dXJuIE5VTEw7Ci0JfQotCXNwb29sLSZndDtyc3ZfaHBhZ2VzID0gbWluX2hwYWdlczsKLQotCXJldHVybiBzcG9vbDsKLX0KLQotdm9pZCBodWdlcGFnZV9wdXRfc3VicG9vbChzdHJ1Y3QgaHVnZXBhZ2Vfc3VicG9vbCAqc3Bvb2wpCi17Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZhbXA7c3Bvb2wtJmd0O2xvY2ssIGZsYWdzKTsKLQlCVUdfT04oIXNwb29sLSZndDtjb3VudCk7Ci0Jc3Bvb2wtJmd0O2NvdW50LS07Ci0JdW5sb2NrX29yX3JlbGVhc2Vfc3VicG9vbChzcG9vbCwgZmxhZ3MpOwotfQotCi0vKgotICogU3VicG9vbCBhY2NvdW50aW5nIGZvciBhbGxvY2F0aW5nIGFuZCByZXNlcnZpbmcgcGFnZXMuCi0gKiBSZXR1cm4gLUVOT01FTSBpZiB0aGVyZSBhcmUgbm90IGVub3VnaCByZXNvdXJjZXMgdG8gc2F0aXNmeSB0aGUKLSAqIHJlcXVlc3QuICBPdGhlcndpc2UsIHJldHVybiB0aGUgbnVtYmVyIG9mIHBhZ2VzIGJ5IHdoaWNoIHRoZQotICogZ2xvYmFsIHBvb2xzIG11c3QgYmUgYWRqdXN0ZWQgKHVwd2FyZCkuICBUaGUgcmV0dXJuZWQgdmFsdWUgbWF5Ci0gKiBvbmx5IGJlIGRpZmZlcmVudCB0aGFuIHRoZSBwYXNzZWQgdmFsdWUgKGRlbHRhKSBpbiB0aGUgY2FzZSB3aGVyZQotICogYSBzdWJwb29sIG1pbmltdW0gc2l6ZSBtdXN0IGJlIG1haW50YWluZWQuCi0gKi8KLXN0YXRpYyBsb25nIGh1Z2VwYWdlX3N1YnBvb2xfZ2V0X3BhZ2VzKHN0cnVjdCBodWdlcGFnZV9zdWJwb29sICpzcG9vbCwKLQkJCQkgICAgICBsb25nIGRlbHRhKQotewotCWxvbmcgcmV0ID0gZGVsdGE7Ci0KLQlpZiAoIXNwb29sKQotCQlyZXR1cm4gcmV0OwotCi0Jc3Bpbl9sb2NrX2lycSgmYW1wO3Nwb29sLSZndDtsb2NrKTsKLQotCWlmIChzcG9vbC0mZ3Q7bWF4X2hwYWdlcyAhPSAtMSkgewkJLyogbWF4aW11bSBzaXplIGFjY291bnRpbmcgKi8KLQkJaWYgKChzcG9vbC0mZ3Q7dXNlZF9ocGFnZXMgJiM0MzsgZGVsdGEpICZsdDs9IHNwb29sLSZndDttYXhfaHBhZ2VzKQotCQkJc3Bvb2wtJmd0O3VzZWRfaHBhZ2VzICYjNDM7PSBkZWx0YTsKLQkJZWxzZSB7Ci0JCQlyZXQgPSAtRU5PTUVNOwotCQkJZ290byB1bmxvY2tfcmV0OwotCQl9Ci0JfQotCi0JLyogbWluaW11bSBzaXplIGFjY291bnRpbmcgKi8KLQlpZiAoc3Bvb2wtJmd0O21pbl9ocGFnZXMgIT0gLTEgJmFtcDsmYW1wOyBzcG9vbC0mZ3Q7cnN2X2hwYWdlcykgewotCQlpZiAoZGVsdGEgJmd0OyBzcG9vbC0mZ3Q7cnN2X2hwYWdlcykgewotCQkJLyoKLQkJCSAqIEFza2luZyBmb3IgbW9yZSByZXNlcnZlcyB0aGFuIHRob3NlIGFscmVhZHkgdGFrZW4gb24KLQkJCSAqIGJlaGFsZiBvZiBzdWJwb29sLiAgUmV0dXJuIGRpZmZlcmVuY2UuCi0JCQkgKi8KLQkJCXJldCA9IGRlbHRhIC0gc3Bvb2wtJmd0O3Jzdl9ocGFnZXM7Ci0JCQlzcG9vbC0mZ3Q7cnN2X2hwYWdlcyA9IDA7Ci0JCX0gZWxzZSB7Ci0JCQlyZXQgPSAwOwkvKiByZXNlcnZlcyBhbHJlYWR5IGFjY291bnRlZCBmb3IgKi8KLQkJCXNwb29sLSZndDtyc3ZfaHBhZ2VzIC09IGRlbHRhOwotCQl9Ci0JfQotCi11bmxvY2tfcmV0OgotCXNwaW5fdW5sb2NrX2lycSgmYW1wO3Nwb29sLSZndDtsb2NrKTsKLQlyZXR1cm4gcmV0OwotfQotCi0vKgotICogU3VicG9vbCBhY2NvdW50aW5nIGZvciBmcmVlaW5nIGFuZCB1bnJlc2VydmluZyBwYWdlcy4KLSAqIFJldHVybiB0aGUgbnVtYmVyIG9mIGdsb2JhbCBwYWdlIHJlc2VydmF0aW9ucyB0aGF0IG11c3QgYmUgZHJvcHBlZC4KLSAqIFRoZSByZXR1cm4gdmFsdWUgbWF5IG9ubHkgYmUgZGlmZmVyZW50IHRoYW4gdGhlIHBhc3NlZCB2YWx1ZSAoZGVsdGEpCi0gKiBpbiB0aGUgY2FzZSB3aGVyZSBhIHN1YnBvb2wgbWluaW11bSBzaXplIG11c3QgYmUgbWFpbnRhaW5lZC4KLSAqLwotc3RhdGljIGxvbmcgaHVnZXBhZ2Vfc3VicG9vbF9wdXRfcGFnZXMoc3RydWN0IGh1Z2VwYWdlX3N1YnBvb2wgKnNwb29sLAotCQkJCSAgICAgICBsb25nIGRlbHRhKQotewotCWxvbmcgcmV0ID0gZGVsdGE7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCWlmICghc3Bvb2wpCi0JCXJldHVybiBkZWx0YTsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZhbXA7c3Bvb2wtJmd0O2xvY2ssIGZsYWdzKTsKLQotCWlmIChzcG9vbC0mZ3Q7bWF4X2hwYWdlcyAhPSAtMSkJCS8qIG1heGltdW0gc2l6ZSBhY2NvdW50aW5nICovCi0JCXNwb29sLSZndDt1c2VkX2hwYWdlcyAtPSBkZWx0YTsKLQotCSAvKiBtaW5pbXVtIHNpemUgYWNjb3VudGluZyAqLwotCWlmIChzcG9vbC0mZ3Q7bWluX2hwYWdlcyAhPSAtMSAmYW1wOyZhbXA7IHNwb29sLSZndDt1c2VkX2hwYWdlcyAmbHQ7IHNwb29sLSZndDttaW5faHBhZ2VzKSB7Ci0JCWlmIChzcG9vbC0mZ3Q7cnN2X2hwYWdlcyAmIzQzOyBkZWx0YSAmbHQ7PSBzcG9vbC0mZ3Q7bWluX2hwYWdlcykKLQkJCXJldCA9IDA7Ci0JCWVsc2UKLQkJCXJldCA9IHNwb29sLSZndDtyc3ZfaHBhZ2VzICYjNDM7IGRlbHRhIC0gc3Bvb2wtJmd0O21pbl9ocGFnZXM7Ci0KLQkJc3Bvb2wtJmd0O3Jzdl9ocGFnZXMgJiM0Mzs9IGRlbHRhOwotCQlpZiAoc3Bvb2wtJmd0O3Jzdl9ocGFnZXMgJmd0OyBzcG9vbC0mZ3Q7bWluX2hwYWdlcykKLQkJCXNwb29sLSZndDtyc3ZfaHBhZ2VzID0gc3Bvb2wtJmd0O21pbl9ocGFnZXM7Ci0JfQotCi0JLyoKLQkgKiBJZiBodWdldGxiZnNfcHV0X3N1cGVyIGNvdWxkbiYjMzk7dCBmcmVlIHNwb29sIGR1ZSB0byBhbiBvdXRzdGFuZGluZwotCSAqIHF1b3RhIHJlZmVyZW5jZSwgZnJlZSBpdCBub3cuCi0JICovCi0JdW5sb2NrX29yX3JlbGVhc2Vfc3VicG9vbChzcG9vbCwgZmxhZ3MpOwotCi0JcmV0dXJuIHJldDsKLX0KLQogc3RhdGljIGlubGluZSBzdHJ1Y3QgaHVnZXBhZ2Vfc3VicG9vbCAqc3VicG9vbF92bWEoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpCiB7CiAJcmV0dXJuIHN1YnBvb2xfaW5vZGUoZmlsZV9pbm9kZSh2bWEtJmd0O3ZtX2ZpbGUpKTsKQEAgLTI4NTgsMTEgJiM0MzsyNzA5LDEzIEBAIHN0cnVjdCBmb2xpbyAqYWxsb2NfaHVnZXRsYl9mb2xpbyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKIAlzdHJ1Y3QgaHVnZXBhZ2Vfc3VicG9vbCAqc3Bvb2wgPSBzdWJwb29sX3ZtYSh2bWEpOwogCXN0cnVjdCBoc3RhdGUgKmggPSBoc3RhdGVfdm1hKHZtYSk7CiAJc3RydWN0IGZvbGlvICpmb2xpbzsKLQlsb25nIHJldHZhbCwgZ2JsX2NoZywgZ2JsX3Jlc2VydmU7CiYjNDM7CWxvbmcgcmV0dmFsLCBnYmxfY2hnOwogCW1hcF9jaGdfc3RhdGUgbWFwX2NoZzsKIAlpbnQgcmV0LCBpZHg7CiAJc3RydWN0IGh1Z2V0bGJfY2dyb3VwICpoX2NnID0gTlVMTDsKIAlzdHJ1Y3QgaHVnZXRsYl9jZ3JvdXAgKmhfY2dfcnN2ZCA9IE5VTEw7CiYjNDM7CXN0cnVjdCBtZW1fY2dyb3VwICptZW1fY2cgPSBOVUxMOwomIzQzOwlzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqX2NnID0gTlVMTDsKIAlnZnBfdCBnZnAgPSBodGxiX2FsbG9jX21hc2soaCkgfCBfX0dGUF9SRVRSWV9NQVlGQUlMOwogCiAJaWR4ID0gaHN0YXRlX2luZGV4KGgpOwpAQCAtMjkyMiw2ICYjNDM7Mjc3NSwxMSBAQCBzdHJ1Y3QgZm9saW8gKmFsbG9jX2h1Z2V0bGJfZm9saW8oc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCiAJaWYgKHJldCkKIAkJZ290byBvdXRfdW5jaGFyZ2VfY2dyb3VwX3Jlc2VydmF0aW9uOwogCiYjNDM7CXJldCA9IG1lbV9jZ3JvdXBfaHVnZXRsYl90cnlfY2hhcmdlKHBhZ2VzX3Blcl9odWdlX3BhZ2UoaCksIGdmcCwKJiM0MzsJCQkJCSAgICAmYW1wO21lbV9jZywgJmFtcDtvYmpfY2cpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJZ290byBvdXRfdW5jaGFyZ2VfY2dyb3VwOwomIzQzOwogCXNwaW5fbG9ja19pcnEoJmFtcDtodWdldGxiX2xvY2spOwogCS8qCiAJICogZ2xiX2NoZyBpcyBwYXNzZWQgdG8gaW5kaWNhdGUgd2hldGhlciBvciBub3QgYSBwYWdlIG11c3QgYmUgdGFrZW4KQEAgLTI5MzMsNyAmIzQzOzI3OTEsNyBAQCBzdHJ1Y3QgZm9saW8gKmFsbG9jX2h1Z2V0bGJfZm9saW8oc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCiAJCXNwaW5fdW5sb2NrX2lycSgmYW1wO2h1Z2V0bGJfbG9jayk7CiAJCWZvbGlvID0gYWxsb2NfYnVkZHlfaHVnZXRsYl9mb2xpb193aXRoX21wb2woaCwgdm1hLCBhZGRyKTsKIAkJaWYgKCFmb2xpbykKLQkJCWdvdG8gb3V0X3VuY2hhcmdlX2Nncm91cDsKJiM0MzsJCQlnb3RvIG91dF91bmNoYXJnZV9jZ3JvdXBfbWVtY2c7CiAJCXNwaW5fbG9ja19pcnEoJmFtcDtodWdldGxiX2xvY2spOwogCQlsaXN0X2FkZCgmYW1wO2ZvbGlvLSZndDtscnUsICZhbXA7aC0mZ3Q7aHVnZXBhZ2VfYWN0aXZlbGlzdCk7CiAJCWZvbGlvX3JlZl91bmZyZWV6ZShmb2xpbywgMSk7CkBAIC0yOTYwLDYgJiM0MzsyODE4LDkgQEAgc3RydWN0IGZvbGlvICphbGxvY19odWdldGxiX2ZvbGlvKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAogCiAJc3Bpbl91bmxvY2tfaXJxKCZhbXA7aHVnZXRsYl9sb2NrKTsKIAomIzQzOwltZW1fY2dyb3VwX2h1Z2V0bGJfY29tbWl0X2NoYXJnZShmb2xpbywgbWVtX2NnLCBvYmpfY2cpOwomIzQzOwlscnV2ZWNfc3RhdF9tb2RfZm9saW8oZm9saW8sIE5SX0hVR0VUTEIsIHBhZ2VzX3Blcl9odWdlX3BhZ2UoaCkpOwomIzQzOwogCWh1Z2V0bGJfc2V0X2ZvbGlvX3N1YnBvb2woZm9saW8sIHNwb29sKTsKIAogCWlmIChtYXBfY2hnICE9IE1BUF9DSEdfRU5GT1JDRUQpIHsKQEAgLTI5ODcsMjEgJiM0MzsyODQ4LDEwIEBAIHN0cnVjdCBmb2xpbyAqYWxsb2NfaHVnZXRsYl9mb2xpbyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKIAkJfQogCX0KIAotCXJldCA9IG1lbV9jZ3JvdXBfY2hhcmdlX2h1Z2V0bGIoZm9saW8sIGdmcCk7Ci0JLyoKLQkgKiBVbmNvbmRpdGlvbmFsbHkgaW5jcmVtZW50IE5SX0hVR0VUTEIgaGVyZS4gSWYgaXQgdHVybnMgb3V0IHRoYXQKLQkgKiBtZW1fY2dyb3VwX2NoYXJnZV9odWdldGxiIGZhaWxlZCwgdGhlbiBpbW1lZGlhdGVseSBmcmVlIHRoZSBwYWdlIGFuZAotCSAqIGRlY3JlbWVudCBOUl9IVUdFVExCLgotCSAqLwotCWxydXZlY19zdGF0X21vZF9mb2xpbyhmb2xpbywgTlJfSFVHRVRMQiwgcGFnZXNfcGVyX2h1Z2VfcGFnZShoKSk7Ci0KLQlpZiAocmV0ID09IC1FTk9NRU0pIHsKLQkJZnJlZV9odWdlX2ZvbGlvKGZvbGlvKTsKLQkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7Ci0JfQotCiAJcmV0dXJuIGZvbGlvOwogCiYjNDM7b3V0X3VuY2hhcmdlX2Nncm91cF9tZW1jZzoKJiM0MzsJbWVtX2Nncm91cF9odWdldGxiX2NhbmNlbF9jaGFyZ2UocGFnZXNfcGVyX2h1Z2VfcGFnZShoKSwgbWVtX2NnLCBvYmpfY2cpOwogb3V0X3VuY2hhcmdlX2Nncm91cDoKIAlodWdldGxiX2Nncm91cF91bmNoYXJnZV9jZ3JvdXAoaWR4LCBwYWdlc19wZXJfaHVnZV9wYWdlKGgpLCBoX2NnKTsKIG91dF91bmNoYXJnZV9jZ3JvdXBfcmVzZXJ2YXRpb246CkBAIC0zMDA5LDE5ICYjNDM7Mjg1OSwyOCBAQCBzdHJ1Y3QgZm9saW8gKmFsbG9jX2h1Z2V0bGJfZm9saW8oc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCiAJCWh1Z2V0bGJfY2dyb3VwX3VuY2hhcmdlX2Nncm91cF9yc3ZkKGlkeCwgcGFnZXNfcGVyX2h1Z2VfcGFnZShoKSwKIAkJCQkJCSAgICBoX2NnX3JzdmQpOwogb3V0X3N1YnBvb2xfcHV0OgotCS8qCi0JICogcHV0IHBhZ2UgdG8gc3VicG9vbCBpZmYgdGhlIHF1b3RhIG9mIHN1YnBvb2wmIzM5O3MgcnN2X2hwYWdlcyBpcyB1c2VkCi0JICogZHVyaW5nIGh1Z2VwYWdlX3N1YnBvb2xfZ2V0X3BhZ2VzLgotCSAqLwotCWlmIChtYXBfY2hnICZhbXA7JmFtcDsgIWdibF9jaGcpIHsKLQkJZ2JsX3Jlc2VydmUgPSBodWdlcGFnZV9zdWJwb29sX3B1dF9wYWdlcyhzcG9vbCwgMSk7Ci0JCWh1Z2V0bGJfYWNjdF9tZW1vcnkoaCwgLWdibF9yZXNlcnZlKTsKJiM0MzsJaWYgKG1hcF9jaGcpIHsKJiM0MzsJCWxvbmcgZ2JsX3Jlc2VydmUgPSBodWdlcGFnZV9zdWJwb29sX3B1dF9wYWdlcyhzcG9vbCwgMSk7CiYjNDM7CiYjNDM7CQlpZiAoIWdibF9jaGcpCiYjNDM7CQkJaHVnZXRsYl9hY2N0X21lbW9yeShoLCAtZ2JsX3Jlc2VydmUpOwogCX0KIAogCiBvdXRfZW5kX3Jlc2VydmF0aW9uOgogCWlmIChtYXBfY2hnICE9IE1BUF9DSEdfRU5GT1JDRUQpCiAJCXZtYV9lbmRfcmVzZXJ2YXRpb24oaCwgdm1hLCBhZGRyKTsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogUmV0dXJuIC1FTk9TUEMgd2hlbiB0aGlzIGZ1bmN0aW9uIGZhaWxzIHRvIGFsbG9jYXRlIG9yCiYjNDM7CSAqIGNoYXJnZSBhIGh1Z2UgcGFnZS4gSWYgYSBzdGFuZGFyZCAoUEFHRV9TSVpFKSBwYWdlCiYjNDM7CSAqIGFsbG9jYXRpb24gZmFpbHMsIHRoZSBPT00ga2lsbGVyIGlzIGdpdmVuIGEgY2hhbmNlIHRvIHJ1biwKJiM0MzsJICogd2hpY2ggbWF5IHJlc29sdmUgdGhlIGZhaWx1cmUgb24gcmV0cnkuIEhvd2V2ZXIsIGZvcgomIzQzOwkgKiBIdWdlVExCIGFsbG9jYXRpb25zLCB0aGUgT09NIGtpbGxlciBpcyBub3QgdHJpZ2dlcmVkLgomIzQzOwkgKiBSZXR1cm5pbmcgLUVOT01FTSAob3IgYW55dGhpbmcgcmVzdWx0aW5nIGluIFZNX0ZBVUxUX09PTSkKJiM0MzsJICogd291bGQgbGVhayB0byB0aGUgI1BGIGhhbmRsZXIsIGNhdXNpbmcgaXQgdG8gbG9vcAomIzQzOwkgKiBpbmRlZmluaXRlbHkgcmV0cnlpbmcgdGhlIGZhdWx0LgomIzQzOwkgKi8KIAlyZXR1cm4gRVJSX1BUUigtRU5PU1BDKTsKIH0KIApAQCAtNDU5Myw3ICYjNDM7NDQ1Miw3IEBAIHVuc2lnbmVkIGxvbmcgaHVnZXRsYl90b3RhbF9wYWdlcyh2b2lkKQogCXJldHVybiBucl90b3RhbF9wYWdlczsKIH0KIAotc3RhdGljIGludCBodWdldGxiX2FjY3RfbWVtb3J5KHN0cnVjdCBoc3RhdGUgKmgsIGxvbmcgZGVsdGEpCiYjNDM7aW50IGh1Z2V0bGJfYWNjdF9tZW1vcnkoc3RydWN0IGhzdGF0ZSAqaCwgbG9uZyBkZWx0YSkKIHsKIAlpbnQgcmV0ID0gLUVOT01FTTsKIApAQCAtNjU0Miw3ICYjNDM7NjQwMSw3IEBAIGxvbmcgaHVnZXRsYl9yZXNlcnZlX3BhZ2VzKHN0cnVjdCBpbm9kZSAqaW5vZGUsCiAJCXN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAogCQl2bWFfZmxhZ3NfdCB2bWFfZmxhZ3MpCiB7Ci0JbG9uZyBjaGcgPSAtMSwgYWRkID0gLTEsIHNwb29sX3Jlc3YsIGdibF9yZXN2OwomIzQzOwlsb25nIGNoZyA9IC0xLCBhZGQgPSAtMSwgZ2JsX3Jlc3Y7CiAJc3RydWN0IGhzdGF0ZSAqaCA9IGhzdGF0ZV9pbm9kZShpbm9kZSk7CiAJc3RydWN0IGh1Z2VwYWdlX3N1YnBvb2wgKnNwb29sID0gc3VicG9vbF9pbm9kZShpbm9kZSk7CiAJc3RydWN0IHJlc3ZfbWFwICpyZXN2X21hcDsKQEAgLTY2ODcsMjYgJiM0Mzs2NTQ2LDIxIEBAIGxvbmcgaHVnZXRsYl9yZXNlcnZlX3BhZ2VzKHN0cnVjdCBpbm9kZSAqaW5vZGUsCiAJfQogCXJldHVybiBjaGc7CiAKLW91dF9wdXRfcGFnZXM6Ci0Jc3Bvb2xfcmVzdiA9IGNoZyAtIGdibF9yZXNlcnZlOwotCWlmIChzcG9vbF9yZXN2KSB7Ci0JCS8qIHB1dCBzdWIgcG9vbCYjMzk7cyByZXNlcnZhdGlvbiBiYWNrLCBjaGcgLSBnYmxfcmVzZXJ2ZSAqLwotCQlnYmxfcmVzdiA9IGh1Z2VwYWdlX3N1YnBvb2xfcHV0X3BhZ2VzKHNwb29sLCBzcG9vbF9yZXN2KTsKLQkJLyoKLQkJICogc3VicG9vbCYjMzk7cyByZXNlcnZlZCBwYWdlcyBjYW4gbm90IGJlIHB1dCBiYWNrIGR1ZSB0byByYWNlLAotCQkgKiByZXR1cm4gdG8gaHN0YXRlLgotCQkgKi8KLQkJaHVnZXRsYl9hY2N0X21lbW9yeShoLCAtZ2JsX3Jlc3YpOwotCX0KLQkvKiBSZXN0b3JlIHVzZWRfaHBhZ2VzIGZvciBwYWdlcyB0aGF0IGZhaWxlZCBnbG9iYWwgcmVzZXJ2YXRpb24gKi8KLQlpZiAoZ2JsX3Jlc2VydmUgJmFtcDsmYW1wOyBzcG9vbCkgewotCQl1bnNpZ25lZCBsb25nIGZsYWdzOwomIzQzOyBvdXRfcHV0X3BhZ2VzOgomIzQzOwkvKgomIzQzOwkgKiBSZXR1cm4gYWxsIHRoYXQgd2FzIHJlcXVlc3RlZCBmcm9tIHRoZSBzdWJwb29sLCBsZXQgc3VicG9vbAomIzQzOwkgKiB0ZWxsIHVzIHRoZSBuZXcgbnVtYmVyIG9mIHJlc2VydmF0aW9ucyB0aGF0IG5lZWQgdG8gYmUKJiM0MzsJICogcmV0dXJuZWQgdG8gdGhlIGdsb2JhbCBwb29sLgomIzQzOwkgKi8KJiM0MzsJZ2JsX3Jlc3YgPSBodWdlcGFnZV9zdWJwb29sX3B1dF9wYWdlcyhzcG9vbCwgY2hnKTsKJiM0MzsJLyoKJiM0MzsJICogVGhlcmUgbWF5IGJlIGEgZGlmZmVyZW5jZSBiZXR3ZWVuIHRoZSBudW1iZXIgb2YKJiM0MzsJICogcmVzZXJ2YXRpb25zIHRvIGNvbnN1bWUgYW5kIHRoZSBudW1iZXIgdG8gcmVzdG9yZSBub3cgaWYKJiM0MzsJICogdGhlcmUgYXJlIG11bHRpcGxlIHRocmVhZHMgaW50ZXJhY3Rpbmcgd2l0aCB0aGUgc3VicG9vbCAtCiYjNDM7CSAqIHJlc3RvcmUgdGhlIGRpZmZlcmVuY2UuCiYjNDM7CSAqLwomIzQzOwlodWdldGxiX2FjY3RfbWVtb3J5KGgsIC0oZ2JsX3Jlc3YgLSBnYmxfcmVzZXJ2ZSkpOwogCi0JCXNwaW5fbG9ja19pcnFzYXZlKCZhbXA7c3Bvb2wtJmd0O2xvY2ssIGZsYWdzKTsKLQkJaWYgKHNwb29sLSZndDttYXhfaHBhZ2VzICE9IC0xKQotCQkJc3Bvb2wtJmd0O3VzZWRfaHBhZ2VzIC09IGdibF9yZXNlcnZlOwotCQl1bmxvY2tfb3JfcmVsZWFzZV9zdWJwb29sKHNwb29sLCBmbGFncyk7Ci0JfQogb3V0X3VuY2hhcmdlX2Nncm91cDoKIAlodWdldGxiX2Nncm91cF91bmNoYXJnZV9jZ3JvdXBfcnN2ZChoc3RhdGVfaW5kZXgoaCksCiAJCQkJCSAgICBjaGcgKiBwYWdlc19wZXJfaHVnZV9wYWdlKGgpLCBoX2NnKTsKZGlmZiAtLWdpdCBhL21tL2h1Z2V0bGJfc3VicG9vbC5jIGIvbW0vaHVnZXRsYl9zdWJwb29sLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAuLmViNTQ3MmJkZjIxOTI0Ci0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvbW0vaHVnZXRsYl9zdWJwb29sLmMKQEAgLTAsMCAmIzQzOzEsMjIzIEBACiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKJiM0MzsvKgomIzQzOyAqIFN1YnBvb2wgYW5kIHJlc2VydmUgYWNjb3VudGluZyBmb3IgSHVnZVRMQiBmb2xpb3MuCiYjNDM7ICogRXh0cmFjdGVkIGZyb20gbW0vaHVnZXRsYi5jCiYjNDM7ICovCiYjNDM7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3R5cGVzLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2tlcm5lbC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9zbGFiLmgmZ3Q7CiYjNDM7I2lmZGVmIF9fS0VSTkVMX18KJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvaHVnZXRsYi5oJmd0OwomIzQzOyNlbmRpZgomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9zcGlubG9jay5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9idWcuaCZndDsKJiM0MzsjaW5jbHVkZSAmIzM0O2h1Z2V0bGJfc3VicG9vbC5oJiMzNDsKJiM0MzsKJiM0MztzdHJ1Y3QgaHVnZXBhZ2Vfc3VicG9vbCB7CiYjNDM7CXNwaW5sb2NrX3QgbG9jazsKJiM0MzsJbG9uZyBjb3VudDsKJiM0MzsJbG9uZyBtYXhfaHBhZ2VzOwkvKiBNYXhpbXVtIGh1Z2UgcGFnZXMgb3IgLTEgaWYgbm8gbWF4aW11bS4gKi8KJiM0MzsJbG9uZyB1c2VkX2hwYWdlczsJLyogVXNlZCBwYWdlIGNvdW50LCBpbmNsdWRlcyBib3RoICovCiYjNDM7CQkJCS8qIGFsbG9jYXRlZCBhbmQgcmVzZXJ2ZWQgcGFnZXMuICovCiYjNDM7CXN0cnVjdCBoc3RhdGUgKmhzdGF0ZTsKJiM0MzsJbG9uZyBtaW5faHBhZ2VzOwkvKiBNaW5pbXVtIGh1Z2UgcGFnZXMgb3IgLTEgaWYgbm8gbWluaW11bS4gKi8KJiM0MzsJbG9uZyByc3ZfaHBhZ2VzOwkvKiBQYWdlcyByZXNlcnZlZCBhZ2FpbnN0IGdsb2JhbCBwb29sIHRvICovCiYjNDM7CQkJCS8qIHNhdGlzZnkgbWluaW11bSBzaXplLiAqLwomIzQzO307CiYjNDM7CiYjNDM7c3RhdGljIGlubGluZSBib29sIHN1YnBvb2xfaXNfZnJlZShzdHJ1Y3QgaHVnZXBhZ2Vfc3VicG9vbCAqc3Bvb2wpCiYjNDM7ewomIzQzOwlpZiAoc3Bvb2wtJmd0O2NvdW50KQomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwomIzQzOwlyZXR1cm4gc3Bvb2wtJmd0O3VzZWRfaHBhZ2VzID09IDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCB1bmxvY2tfb3JfcmVsZWFzZV9zdWJwb29sKHN0cnVjdCBodWdlcGFnZV9zdWJwb29sICpzcG9vbCwKJiM0MzsJCQkJCQl1bnNpZ25lZCBsb25nIGlycV9mbGFncykKJiM0Mzt7CiYjNDM7CXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFtcDtzcG9vbC0mZ3Q7bG9jaywgaXJxX2ZsYWdzKTsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogSWYgbm8gcGFnZXMgYXJlIHVzZWQsIGFuZCBubyBvdGhlciBoYW5kbGVzIHRvIHRoZSBzdWJwb29sCiYjNDM7CSAqIHJlbWFpbiwgZ2l2ZSB1cCBhbnkgcmVzZXJ2YXRpb25zIGJhc2VkIG9uIG1pbmltdW0gc2l6ZSBhbmQKJiM0MzsJICogZnJlZSB0aGUgc3VicG9vbC4KJiM0MzsJICovCiYjNDM7CWlmIChzdWJwb29sX2lzX2ZyZWUoc3Bvb2wpKSB7CiYjNDM7CQlpZiAoc3Bvb2wtJmd0O21pbl9ocGFnZXMgIT0gLTEpCiYjNDM7CQkJaHVnZXRsYl9hY2N0X21lbW9yeShzcG9vbC0mZ3Q7aHN0YXRlLAomIzQzOwkJCQkJCS1zcG9vbC0mZ3Q7bWluX2hwYWdlcyk7CiYjNDM7CQlrZnJlZShzcG9vbCk7CiYjNDM7CX0KJiM0Mzt9CiYjNDM7CiYjNDM7bG9uZyBodWdlcGFnZV9zdWJwb29sX2ZyZWVfaHBhZ2VzKHN0cnVjdCBodWdlcGFnZV9zdWJwb29sICpzcG9vbCkKJiM0Mzt7CiYjNDM7CWxvbmcgZnJlZV9wYWdlczsKJiM0MzsKJiM0MzsJc3Bpbl9sb2NrX2lycSgmYW1wO3Nwb29sLSZndDtsb2NrKTsKJiM0MzsJaWYgKHNwb29sLSZndDttYXhfaHBhZ2VzID09IC0xKQomIzQzOwkJZnJlZV9wYWdlcyA9IC0xOwomIzQzOwllbHNlCiYjNDM7CQlmcmVlX3BhZ2VzID0gc3Bvb2wtJmd0O21heF9ocGFnZXMgLSBzcG9vbC0mZ3Q7dXNlZF9ocGFnZXM7CiYjNDM7CXNwaW5fdW5sb2NrX2lycSgmYW1wO3Nwb29sLSZndDtsb2NrKTsKJiM0MzsKJiM0MzsJcmV0dXJuIGZyZWVfcGFnZXM7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB1bnNpZ25lZCBpbnQgaHVnZXBhZ2Vfc3VicG9vbF9ocGFnZV9zaGlmdChzdHJ1Y3QgaHVnZXBhZ2Vfc3VicG9vbCAqc3Bvb2wpCiYjNDM7ewomIzQzOwlyZXR1cm4gaHVnZV9wYWdlX3NoaWZ0KHNwb29sLSZndDtoc3RhdGUpOwomIzQzO30KJiM0MzsKJiM0Mzt1bnNpZ25lZCBsb25nIGxvbmcgaHVnZXBhZ2Vfc3VicG9vbF9tYXhfc2l6ZShzdHJ1Y3QgaHVnZXBhZ2Vfc3VicG9vbCAqc3Bvb2wpCiYjNDM7ewomIzQzOwlpZiAoc3Bvb2wtJmd0O21heF9ocGFnZXMgPT0gLTEpCiYjNDM7CQlyZXR1cm4gLTFVTEw7CiYjNDM7CXJldHVybiAodW5zaWduZWQgbG9uZyBsb25nKXNwb29sLSZndDttYXhfaHBhZ2VzICZsdDsmbHQ7IGh1Z2VwYWdlX3N1YnBvb2xfaHBhZ2Vfc2hpZnQoc3Bvb2wpOwomIzQzO30KJiM0MzsKJiM0Mzt1bnNpZ25lZCBsb25nIGxvbmcgaHVnZXBhZ2Vfc3VicG9vbF9taW5fc2l6ZShzdHJ1Y3QgaHVnZXBhZ2Vfc3VicG9vbCAqc3Bvb2wpCiYjNDM7ewomIzQzOwlpZiAoc3Bvb2wtJmd0O21pbl9ocGFnZXMgPT0gLTEpCiYjNDM7CQlyZXR1cm4gLTFVTEw7CiYjNDM7CXJldHVybiAodW5zaWduZWQgbG9uZyBsb25nKXNwb29sLSZndDttaW5faHBhZ2VzICZsdDsmbHQ7IGh1Z2VwYWdlX3N1YnBvb2xfaHBhZ2Vfc2hpZnQoc3Bvb2wpOwomIzQzO30KJiM0MzsKJiM0Mztsb25nIGh1Z2VwYWdlX3N1YnBvb2xfbWF4X2hwYWdlcyhzdHJ1Y3QgaHVnZXBhZ2Vfc3VicG9vbCAqc3Bvb2wpCiYjNDM7ewomIzQzOwlsb25nIG1heF9ocGFnZXM7CiYjNDM7CiYjNDM7CXNwaW5fbG9ja19pcnEoJmFtcDtzcG9vbC0mZ3Q7bG9jayk7CiYjNDM7CW1heF9ocGFnZXMgPSBzcG9vbC0mZ3Q7bWF4X2hwYWdlczsKJiM0MzsJc3Bpbl91bmxvY2tfaXJxKCZhbXA7c3Bvb2wtJmd0O2xvY2spOwomIzQzOwomIzQzOwlyZXR1cm4gbWF4X2hwYWdlczsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RydWN0IGh1Z2VwYWdlX3N1YnBvb2wgKmh1Z2VwYWdlX25ld19zdWJwb29sKHN0cnVjdCBoc3RhdGUgKmgsIGxvbmcgbWF4X2hwYWdlcywKJiM0MzsJCQkJCQlsb25nIG1pbl9ocGFnZXMpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgaHVnZXBhZ2Vfc3VicG9vbCAqc3Bvb2w7CiYjNDM7CiYjNDM7CXNwb29sID0ga3phbGxvY19vYmooKnNwb29sKTsKJiM0MzsJaWYgKCFzcG9vbCkKJiM0MzsJCXJldHVybiBOVUxMOwomIzQzOwomIzQzOwlzcGluX2xvY2tfaW5pdCgmYW1wO3Nwb29sLSZndDtsb2NrKTsKJiM0MzsJc3Bvb2wtJmd0O2NvdW50ID0gMTsKJiM0MzsJc3Bvb2wtJmd0O21heF9ocGFnZXMgPSBtYXhfaHBhZ2VzOwomIzQzOwlzcG9vbC0mZ3Q7aHN0YXRlID0gaDsKJiM0MzsJc3Bvb2wtJmd0O21pbl9ocGFnZXMgPSBtaW5faHBhZ2VzOwomIzQzOwomIzQzOwlpZiAobWluX2hwYWdlcyAhPSAtMSAmYW1wOyZhbXA7IGh1Z2V0bGJfYWNjdF9tZW1vcnkoaCwgbWluX2hwYWdlcykpIHsKJiM0MzsJCWtmcmVlKHNwb29sKTsKJiM0MzsJCXJldHVybiBOVUxMOwomIzQzOwl9CiYjNDM7CXNwb29sLSZndDtyc3ZfaHBhZ2VzID0gbWluX2hwYWdlczsKJiM0MzsKJiM0MzsJcmV0dXJuIHNwb29sOwomIzQzO30KJiM0MzsKJiM0Mzt2b2lkIGh1Z2VwYWdlX3B1dF9zdWJwb29sKHN0cnVjdCBodWdlcGFnZV9zdWJwb29sICpzcG9vbCkKJiM0Mzt7CiYjNDM7CXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiYjNDM7CiYjNDM7CXNwaW5fbG9ja19pcnFzYXZlKCZhbXA7c3Bvb2wtJmd0O2xvY2ssIGZsYWdzKTsKJiM0MzsJQlVHX09OKCFzcG9vbC0mZ3Q7Y291bnQpOwomIzQzOwlzcG9vbC0mZ3Q7Y291bnQtLTsKJiM0MzsJdW5sb2NrX29yX3JlbGVhc2Vfc3VicG9vbChzcG9vbCwgZmxhZ3MpOwomIzQzO30KJiM0MzsKJiM0MzsvKgomIzQzOyAqIFN1YnBvb2wgYWNjb3VudGluZyBmb3IgYWxsb2NhdGluZyBhbmQgcmVzZXJ2aW5nIHBhZ2VzLgomIzQzOyAqIFJldHVybiAtRU5PTUVNIGlmIHRoZXJlIGFyZSBub3QgZW5vdWdoIHJlc291cmNlcyB0byBzYXRpc2Z5IHRoZQomIzQzOyAqIHJlcXVlc3QuICBPdGhlcndpc2UsIHJldHVybiB0aGUgbnVtYmVyIG9mIHBhZ2VzIGJ5IHdoaWNoIHRoZQomIzQzOyAqIGdsb2JhbCBwb29scyBtdXN0IGJlIGFkanVzdGVkICh1cHdhcmQpLiAgVGhlIHJldHVybmVkIHZhbHVlIG1heQomIzQzOyAqIG9ubHkgYmUgZGlmZmVyZW50IHRoYW4gdGhlIHBhc3NlZCB2YWx1ZSAoZGVsdGEpIGluIHRoZSBjYXNlIHdoZXJlCiYjNDM7ICogYSBzdWJwb29sIG1pbmltdW0gc2l6ZSBtdXN0IGJlIG1haW50YWluZWQuCiYjNDM7ICovCiYjNDM7bG9uZyBodWdlcGFnZV9zdWJwb29sX2dldF9wYWdlcyhzdHJ1Y3QgaHVnZXBhZ2Vfc3VicG9vbCAqc3Bvb2wsCiYjNDM7CQkJCSAgICAgIGxvbmcgZGVsdGEpCiYjNDM7ewomIzQzOwlsb25nIHJldCA9IGRlbHRhOwomIzQzOwomIzQzOwlpZiAoIXNwb29sKQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJc3Bpbl9sb2NrX2lycSgmYW1wO3Nwb29sLSZndDtsb2NrKTsKJiM0MzsKJiM0MzsJaWYgKHNwb29sLSZndDttYXhfaHBhZ2VzICE9IC0xICZhbXA7JmFtcDsKJiM0MzsJICAgIHNwb29sLSZndDt1c2VkX2hwYWdlcyAmIzQzOyBkZWx0YSAmZ3Q7IHNwb29sLSZndDttYXhfaHBhZ2VzKSB7CiYjNDM7CQlyZXQgPSAtRU5PTUVNOwomIzQzOwkJZ290byB1bmxvY2tfcmV0OwomIzQzOwl9CiYjNDM7CiYjNDM7CXNwb29sLSZndDt1c2VkX2hwYWdlcyAmIzQzOz0gZGVsdGE7CiYjNDM7CiYjNDM7CS8qIG1pbmltdW0gc2l6ZSBhY2NvdW50aW5nICovCiYjNDM7CWlmIChzcG9vbC0mZ3Q7bWluX2hwYWdlcyAhPSAtMSAmYW1wOyZhbXA7IHNwb29sLSZndDtyc3ZfaHBhZ2VzKSB7CiYjNDM7CQlpZiAoZGVsdGEgJmd0OyBzcG9vbC0mZ3Q7cnN2X2hwYWdlcykgewomIzQzOwkJCS8qCiYjNDM7CQkJICogQXNraW5nIGZvciBtb3JlIHJlc2VydmVzIHRoYW4gdGhvc2UgYWxyZWFkeSB0YWtlbiBvbgomIzQzOwkJCSAqIGJlaGFsZiBvZiBzdWJwb29sLiAgUmV0dXJuIGRpZmZlcmVuY2UuCiYjNDM7CQkJICovCiYjNDM7CQkJcmV0ID0gZGVsdGEgLSBzcG9vbC0mZ3Q7cnN2X2hwYWdlczsKJiM0MzsJCQlzcG9vbC0mZ3Q7cnN2X2hwYWdlcyA9IDA7CiYjNDM7CQl9IGVsc2UgewomIzQzOwkJCXJldCA9IDA7CS8qIHJlc2VydmVzIGFscmVhZHkgYWNjb3VudGVkIGZvciAqLwomIzQzOwkJCXNwb29sLSZndDtyc3ZfaHBhZ2VzIC09IGRlbHRhOwomIzQzOwkJfQomIzQzOwl9CiYjNDM7CiYjNDM7dW5sb2NrX3JldDoKJiM0MzsJc3Bpbl91bmxvY2tfaXJxKCZhbXA7c3Bvb2wtJmd0O2xvY2spOwomIzQzOwlyZXR1cm4gcmV0OwomIzQzO30KJiM0MzsKJiM0MzsvKgomIzQzOyAqIFN1YnBvb2wgYWNjb3VudGluZyBmb3IgZnJlZWluZyBhbmQgdW5yZXNlcnZpbmcgcGFnZXMuCiYjNDM7ICogUmV0dXJuIHRoZSBudW1iZXIgb2YgZ2xvYmFsIHBhZ2UgcmVzZXJ2YXRpb25zIHRoYXQgbXVzdCBiZSBkcm9wcGVkLgomIzQzOyAqIFRoZSByZXR1cm4gdmFsdWUgbWF5IG9ubHkgYmUgZGlmZmVyZW50IHRoYW4gdGhlIHBhc3NlZCB2YWx1ZSAoZGVsdGEpCiYjNDM7ICogaW4gdGhlIGNhc2Ugd2hlcmUgYSBzdWJwb29sIG1pbmltdW0gc2l6ZSBtdXN0IGJlIG1haW50YWluZWQuCiYjNDM7ICovCiYjNDM7bG9uZyBodWdlcGFnZV9zdWJwb29sX3B1dF9wYWdlcyhzdHJ1Y3QgaHVnZXBhZ2Vfc3VicG9vbCAqc3Bvb2wsCiYjNDM7CQkJCSAgICAgICBsb25nIGRlbHRhKQomIzQzO3sKJiM0MzsJbG9uZyByZXQgPSBkZWx0YTsKJiM0MzsJdW5zaWduZWQgbG9uZyBmbGFnczsKJiM0MzsKJiM0MzsJaWYgKCFzcG9vbCkKJiM0MzsJCXJldHVybiBkZWx0YTsKJiM0MzsKJiM0MzsJc3Bpbl9sb2NrX2lycXNhdmUoJmFtcDtzcG9vbC0mZ3Q7bG9jaywgZmxhZ3MpOwomIzQzOwomIzQzOwlzcG9vbC0mZ3Q7dXNlZF9ocGFnZXMgLT0gZGVsdGE7CiYjNDM7CiYjNDM7CSAvKiBtaW5pbXVtIHNpemUgYWNjb3VudGluZyAqLwomIzQzOwlpZiAoc3Bvb2wtJmd0O21pbl9ocGFnZXMgIT0gLTEgJmFtcDsmYW1wOyBzcG9vbC0mZ3Q7dXNlZF9ocGFnZXMgJmx0OyBzcG9vbC0mZ3Q7bWluX2hwYWdlcykgewomIzQzOwkJLyoKJiM0MzsJCSAqIGxpbWl0IGlzIHRoZSBtYXhpbXVtIG51bWJlciBvZiByZXNlcnZhdGlvbnMgdGhhdAomIzQzOwkJICogY2FuIGJlIHJlc3RvcmVkIHRvIHRoaXMgc3VicG9vbC4KJiM0MzsJCSAqLwomIzQzOwkJbG9uZyBsaW1pdCA9IHNwb29sLSZndDttaW5faHBhZ2VzIC0gc3Bvb2wtJmd0O3VzZWRfaHBhZ2VzOwomIzQzOwomIzQzOwkJaWYgKHNwb29sLSZndDtyc3ZfaHBhZ2VzICYjNDM7IGRlbHRhICZsdDs9IGxpbWl0KQomIzQzOwkJCXJldCA9IDA7CiYjNDM7CQllbHNlCiYjNDM7CQkJcmV0ID0gc3Bvb2wtJmd0O3Jzdl9ocGFnZXMgJiM0MzsgZGVsdGEgLSBsaW1pdDsKJiM0MzsKJiM0MzsJCXNwb29sLSZndDtyc3ZfaHBhZ2VzICYjNDM7PSBkZWx0YTsKJiM0MzsJCWlmIChzcG9vbC0mZ3Q7cnN2X2hwYWdlcyAmZ3Q7IGxpbWl0KQomIzQzOwkJCXNwb29sLSZndDtyc3ZfaHBhZ2VzID0gbGltaXQ7CiYjNDM7CX0KJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogSWYgaHVnZXRsYmZzX3B1dF9zdXBlciBjb3VsZG4mIzM5O3QgZnJlZSBzcG9vbCBkdWUgdG8gYW4gb3V0c3RhbmRpbmcKJiM0MzsJICogcXVvdGEgcmVmZXJlbmNlLCBmcmVlIGl0IG5vdy4KJiM0MzsJICovCiYjNDM7CXVubG9ja19vcl9yZWxlYXNlX3N1YnBvb2woc3Bvb2wsIGZsYWdzKTsKJiM0MzsKJiM0MzsJcmV0dXJuIHJldDsKJiM0Mzt9CmRpZmYgLS1naXQgYS9tbS9odWdldGxiX3N1YnBvb2wuaCBiL21tL2h1Z2V0bGJfc3VicG9vbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwLi40MWQyMjIzOWYyYzNlZAotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL21tL2h1Z2V0bGJfc3VicG9vbC5oCkBAIC0wLDAgJiM0MzsxLDIxIEBACiYjNDM7LyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgKi8KJiM0MzsjaWZuZGVmIF9NTV9IVUdFVExCX1NVQlBPT0xfSAomIzQzOyNkZWZpbmUgX01NX0hVR0VUTEJfU1VCUE9PTF9ICiYjNDM7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3NwaW5sb2NrLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3R5cGVzLmgmZ3Q7CiYjNDM7CiYjNDM7c3RydWN0IGhzdGF0ZTsKJiM0MztzdHJ1Y3QgaHVnZXBhZ2Vfc3VicG9vbDsKJiM0MzsKJiM0MztzdHJ1Y3QgaHVnZXBhZ2Vfc3VicG9vbCAqaHVnZXBhZ2VfbmV3X3N1YnBvb2woc3RydWN0IGhzdGF0ZSAqaCwgbG9uZyBtYXhfaHBhZ2VzLAomIzQzOwkJCQkJCWxvbmcgbWluX2hwYWdlcyk7CiYjNDM7dm9pZCBodWdlcGFnZV9wdXRfc3VicG9vbChzdHJ1Y3QgaHVnZXBhZ2Vfc3VicG9vbCAqc3Bvb2wpOwomIzQzO2xvbmcgaHVnZXBhZ2Vfc3VicG9vbF9nZXRfcGFnZXMoc3RydWN0IGh1Z2VwYWdlX3N1YnBvb2wgKnNwb29sLCBsb25nIGRlbHRhKTsKJiM0Mztsb25nIGh1Z2VwYWdlX3N1YnBvb2xfcHV0X3BhZ2VzKHN0cnVjdCBodWdlcGFnZV9zdWJwb29sICpzcG9vbCwgbG9uZyBkZWx0YSk7CiYjNDM7bG9uZyBodWdlcGFnZV9zdWJwb29sX2ZyZWVfaHBhZ2VzKHN0cnVjdCBodWdlcGFnZV9zdWJwb29sICpzcG9vbCk7CiYjNDM7bG9uZyBodWdlcGFnZV9zdWJwb29sX21heF9ocGFnZXMoc3RydWN0IGh1Z2VwYWdlX3N1YnBvb2wgKnNwb29sKTsKJiM0Mzt1bnNpZ25lZCBsb25nIGxvbmcgaHVnZXBhZ2Vfc3VicG9vbF9tYXhfc2l6ZShzdHJ1Y3QgaHVnZXBhZ2Vfc3VicG9vbCAqc3Bvb2wpOwomIzQzO3Vuc2lnbmVkIGxvbmcgbG9uZyBodWdlcGFnZV9zdWJwb29sX21pbl9zaXplKHN0cnVjdCBodWdlcGFnZV9zdWJwb29sICpzcG9vbCk7CiYjNDM7CiYjNDM7I2VuZGlmIC8qIF9NTV9IVUdFVExCX1NVQlBPT0xfSCAqLwpkaWZmIC0tZ2l0IGEvbW0vbWVtY29udHJvbC5jIGIvbW0vbWVtY29udHJvbC5jCmluZGV4IDZkYzQ4ODhhOTBmM2ZkLi42NzY0ZmYwNDFjMTk2NSAxMDA2NDQKLS0tIGEvbW0vbWVtY29udHJvbC5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL21lbWNvbnRyb2wuYwpAQCAtNTE0NywzOSAmIzQzOzUxNDcsMTE5IEBAIGludCBfX21lbV9jZ3JvdXBfY2hhcmdlKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBnZnBfdCBnZnApCiB9CiAKIC8qKgotICogbWVtX2Nncm91cF9jaGFyZ2VfaHVnZXRsYiAtIGNoYXJnZSB0aGUgbWVtY2cgZm9yIGEgaHVnZXRsYiBmb2xpbwotICogQGZvbGlvOiBmb2xpbyBiZWluZyBjaGFyZ2VkCiYjNDM7ICogbWVtX2Nncm91cF9odWdldGxiX3RyeV9jaGFyZ2UgLSBUcnkgdG8gY2hhcmdlIHRoZSBtZW1jZyBmb3IgYSBodWdldGxiIGZvbGlvCiYjNDM7ICogQG5yX3BhZ2VzOiBudW1iZXIgb2YgYmFzZSBwYWdlcyB0byBjaGFyZ2UKICAqIEBnZnA6IHJlY2xhaW0gbW9kZQomIzQzOyAqIEBtZW1jZ19wOiBPdXRwdXQgcG9pbnRlciB0byB0aGUgY2hhcmdlZCBtZW1fY2dyb3VwIChpZiBzdWNjZXNzZnVsIGFuZCBlbmFibGVkKQomIzQzOyAqIEBvYmpjZ19wOiBPdXRwdXQgcG9pbnRlciB0byB0aGUgY2hhcmdlZCBvYmpfY2dyb3VwIChpZiBzdWNjZXNzZnVsIGFuZCBlbmFibGVkKQogICoKLSAqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHdoZW4gYWxsb2NhdGluZyBhIGh1Z2UgcGFnZSBmb2xpbywgYWZ0ZXIgdGhlIHBhZ2UgaGFzCi0gKiBhbHJlYWR5IGJlZW4gb2J0YWluZWQgYW5kIGNoYXJnZWQgdG8gdGhlIGFwcHJvcHJpYXRlIGh1Z2V0bGIgY2dyb3VwCi0gKiBjb250cm9sbGVyIChpZiBpdCBpcyBlbmFibGVkKS4KJiM0MzsgKiBQcmVwYXJlcyBhbmQgdHJpZXMgdG8gcmVzZXJ2ZSB0aGUgbWVtb3J5IGNvdW50ZXIgZm9yIHRoZSBmb2xpbyBmcm9tIHRoZSBjdXJyZW50CiYjNDM7ICogdGFzayYjMzk7cyBtZW1jZy4gSWYgc3VjY2Vzc2Z1bCwgYm90aCAqbWVtY2dfcCBhbmQgKm9iamNnX3AgYXJlIHBvcHVsYXRlZCBhbmQgdGhlaXIKJiM0MzsgKiByZWZlcmVuY2VzIGFyZSBwaW5uZWQgdW50aWwgYSBzdWJzZXF1ZW50IGNhbGwgdG8gbWVtX2Nncm91cF9odWdldGxiX2NvbW1pdF9jaGFyZ2UKJiM0MzsgKiBvciBtZW1fY2dyb3VwX2h1Z2V0bGJfY2FuY2VsX2NoYXJnZS4KICAqCiAgKiBSZXR1cm5zIEVOT01FTSBpZiB0aGUgbWVtY2cgaXMgYWxyZWFkeSBmdWxsLgotICogUmV0dXJucyAwIGlmIGVpdGhlciB0aGUgY2hhcmdlIHdhcyBzdWNjZXNzZnVsLCBvciBpZiB3ZSBza2lwIHRoZSBjaGFyZ2luZy4KJiM0MzsgKiBSZXR1cm5zIDAgaWYgZWl0aGVyIHRoZSBjaGFyZ2Ugd2FzIHN1Y2Nlc3NmdWwsIG9yIGlmIHdlIHNraXAgY2hhcmdpbmcuCiAgKi8KLWludCBtZW1fY2dyb3VwX2NoYXJnZV9odWdldGxiKHN0cnVjdCBmb2xpbyAqZm9saW8sIGdmcF90IGdmcCkKJiM0MztpbnQgbWVtX2Nncm91cF9odWdldGxiX3RyeV9jaGFyZ2UodW5zaWduZWQgaW50IG5yX3BhZ2VzLCBnZnBfdCBnZnAsCiYjNDM7CQkJCSAgc3RydWN0IG1lbV9jZ3JvdXAgKiptZW1jZ19wLAomIzQzOwkJCQkgIHN0cnVjdCBvYmpfY2dyb3VwICoqb2JqY2dfcCkKIHsKLQlzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cgPSBnZXRfbWVtX2Nncm91cF9mcm9tX2N1cnJlbnQoKTsKJiM0MzsJc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnOwomIzQzOwlzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2c7CiAJaW50IHJldCA9IDA7CiAKLQkvKgotCSAqIEV2ZW4gbWVtY2cgZG9lcyBub3QgYWNjb3VudCBmb3IgaHVnZXRsYiwgd2Ugc3RpbGwgd2FudCB0byB1cGRhdGUKLQkgKiBzeXN0ZW0tbGV2ZWwgc3RhdHMgdmlhIGxydXZlY19zdGF0X21vZF9mb2xpby4gUmV0dXJuIDAsIGFuZCBza2lwCi0JICogY2hhcmdpbmcgdGhlIG1lbWNnLgotCSAqLwomIzQzOwkqbWVtY2dfcCA9IE5VTEw7CiYjNDM7CSpvYmpjZ19wID0gTlVMTDsKJiM0MzsKIAlpZiAobWVtX2Nncm91cF9kaXNhYmxlZCgpIHx8ICFtZW1jZ19hY2NvdW50c19odWdldGxiKCkgfHwKLQkJIW1lbWNnIHx8ICFjZ3JvdXBfc3Vic3lzX29uX2RmbChtZW1vcnlfY2dycF9zdWJzeXMpKQotCQlnb3RvIG91dDsKJiM0MzsJICAgICFjZ3JvdXBfc3Vic3lzX29uX2RmbChtZW1vcnlfY2dycF9zdWJzeXMpKQomIzQzOwkJcmV0dXJuIDA7CiAKLQlpZiAoY2hhcmdlX21lbWNnKGZvbGlvLCBtZW1jZywgZ2ZwKSkKLQkJcmV0ID0gLUVOT01FTTsKJiM0MzsJbWVtY2cgPSBnZXRfbWVtX2Nncm91cF9mcm9tX2N1cnJlbnQoKTsKJiM0MzsJaWYgKCFtZW1jZykKJiM0MzsJCXJldHVybiAwOwogCi1vdXQ6CiYjNDM7CW9iamNnID0gZ2V0X29ial9jZ3JvdXBfZnJvbV9tZW1jZyhtZW1jZyk7CiYjNDM7CWlmICghb2JqY2cpCiYjNDM7CQlnb3RvIHB1dF9tZW1jZzsKJiM0MzsKJiM0MzsJaWYgKCFvYmpfY2dyb3VwX2lzX3Jvb3Qob2JqY2cpKSB7CiYjNDM7CQlyZXQgPSB0cnlfY2hhcmdlX21lbWNnKG1lbWNnLCBnZnAsIG5yX3BhZ2VzKTsKJiM0MzsJCWlmIChyZXQpCiYjNDM7CQkJZ290byBwdXRfb2JqY2c7CiYjNDM7CX0KJiM0MzsKJiM0MzsJKm1lbWNnX3AgPSBtZW1jZzsKJiM0MzsJKm9iamNnX3AgPSBvYmpjZzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7CiYjNDM7cHV0X29iamNnOgomIzQzOwlvYmpfY2dyb3VwX3B1dChvYmpjZyk7CiYjNDM7cHV0X21lbWNnOgogCW1lbV9jZ3JvdXBfcHV0KG1lbWNnKTsKIAlyZXR1cm4gcmV0OwogfQogCiYjNDM7LyoqCiYjNDM7ICogbWVtX2Nncm91cF9odWdldGxiX2NvbW1pdF9jaGFyZ2UgLSBDb21taXQgdGhlIG1lbWNnIGNoYXJnZSBmb3IgYSBodWdldGxiIGZvbGlvCiYjNDM7ICogQGZvbGlvOiBmb2xpbyBiZWluZyBjaGFyZ2VkCiYjNDM7ICogQG1lbWNnOiBUYXJnZXQgbWVtX2Nncm91cCBvYnRhaW5lZCBmcm9tIG1lbV9jZ3JvdXBfaHVnZXRsYl90cnlfY2hhcmdlCiYjNDM7ICogQG9iamNnOiBUYXJnZXQgb2JqX2Nncm91cCBvYnRhaW5lZCBmcm9tIG1lbV9jZ3JvdXBfaHVnZXRsYl90cnlfY2hhcmdlCiYjNDM7ICoKJiM0MzsgKiBGaW5hbGl6ZXMgdGhlIG1lbW9yeSBhbmQgc3RhdGlzdGljcyBjaGFyZ2luZyBmb3IgdGhlIGZvbGlvIGluIHRoZSBzcGVjaWZpZWQgbWVtY2cuCiYjNDM7ICogVHJhbnNmZXJzIHRoZSBwaW5uZWQgb2JqY2cgcmVmZXJlbmNlIHRvIHRoZSBmb2xpbyBzdHJ1Y3R1cmUgKGZvciBhdXRvbWF0aWMKJiM0MzsgKiB1bmNoYXJnaW5nIHVwb24gZnJlZWluZyB2aWEgbWVtX2Nncm91cF91bmNoYXJnZSkuIFJlbGVhc2VzIHRoZSB0cnktY29tbWl0IHJlZmVyZW5jZQomIzQzOyAqIG9uIG1lbWNnLgomIzQzOyAqLwomIzQzO3ZvaWQgbWVtX2Nncm91cF9odWdldGxiX2NvbW1pdF9jaGFyZ2Uoc3RydWN0IGZvbGlvICpmb2xpbywKJiM0MzsJCQkJICAgICAgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLAomIzQzOwkJCQkgICAgICBzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2cpCiYjNDM7ewomIzQzOwlpZiAoIW1lbWNnIHx8ICFvYmpjZykKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJY29tbWl0X2NoYXJnZShmb2xpbywgb2JqY2cpOwomIzQzOwltZW1jZzFfY29tbWl0X2NoYXJnZShmb2xpbywgbWVtY2cpOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBEcm9wIG91ciB0cnktY29tbWl0LWNhbmNlbCBwcm90b2NvbCByZWZlcmVuY2Ugb24gbWVtY2cuCiYjNDM7CSAqIFRoZSBvYmpjZyByZWZlcmVuY2UgaXMgVFJBTlNGRVJSRUQgdG8gdGhlIGZvbGlvIGJ5IGNvbW1pdF9jaGFyZ2UsCiYjNDM7CSAqIHNvIGl0IHdpbGwgYmUgcHV0IGF1dG9tYXRpY2FsbHkgYnkgX19tZW1fY2dyb3VwX3VuY2hhcmdlKCkgd2hlbgomIzQzOwkgKiB0aGUgZm9saW8gaXMgZnJlZWQuCiYjNDM7CSAqLwomIzQzOwltZW1fY2dyb3VwX3B1dChtZW1jZyk7CiYjNDM7fQomIzQzOwomIzQzOy8qKgomIzQzOyAqIG1lbV9jZ3JvdXBfaHVnZXRsYl9jYW5jZWxfY2hhcmdlIC0gQ2FuY2VsIGFuZCB1bmRvIGEgaHVnZXRsYiBmb2xpbyBtZW1jZyBjaGFyZ2UKJiM0MzsgKiBAbnJfcGFnZXM6IG51bWJlciBvZiBiYXNlIHBhZ2VzIHRvIHVuY2hhcmdlCiYjNDM7ICogQG1lbWNnOiBUYXJnZXQgbWVtX2Nncm91cCBvYnRhaW5lZCBmcm9tIG1lbV9jZ3JvdXBfaHVnZXRsYl90cnlfY2hhcmdlCiYjNDM7ICogQG9iamNnOiBUYXJnZXQgb2JqX2Nncm91cCBvYnRhaW5lZCBmcm9tIG1lbV9jZ3JvdXBfaHVnZXRsYl90cnlfY2hhcmdlCiYjNDM7ICoKJiM0MzsgKiBDYW5jZWxzIGFuZCBzYWZlbHkgcm9sbHMgYmFjayB0aGUgcHJlcGFyZWQgbWVtb3J5IGNoYXJnZSBmb3IgdGhlIGZvbGlvIGluIHRoZQomIzQzOyAqIHNwZWNpZmllZCBtZW1jZy4gUmVsZWFzZXMgdGhlIHRyeS1jb21taXQgcGlubmVkIHJlZmVyZW5jZXMgb24gYm90aCBtZW1jZyBhbmQgb2JqY2cuCiYjNDM7ICovCiYjNDM7dm9pZCBtZW1fY2dyb3VwX2h1Z2V0bGJfY2FuY2VsX2NoYXJnZSh1bnNpZ25lZCBpbnQgbnJfcGFnZXMsCiYjNDM7CQkJCSAgICAgIHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywKJiM0MzsJCQkJICAgICAgc3RydWN0IG9ial9jZ3JvdXAgKm9iamNnKQomIzQzO3sKJiM0MzsJaWYgKCFtZW1jZyB8fCAhb2JqY2cpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CWlmICghb2JqX2Nncm91cF9pc19yb290KG9iamNnKSkKJiM0MzsJCXJlZmlsbF9zdG9jayhtZW1jZywgbnJfcGFnZXMpOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBEcm9wIG91ciB0cnktY29tbWl0LWNhbmNlbCBwcm90b2NvbCByZWZlcmVuY2VzIG9uIGJvdGggb2JqY2cKJiM0MzsJICogYW5kIG1lbWNnLCBzaW5jZSB0aGlzIG1hcHBpbmcgYXR0ZW1wdCB3YXMgYWJvcnRlZCBhbmQgdGhlIGZvbGlvCiYjNDM7CSAqIHdhcyBuZXZlciBjb21taXR0ZWQuCiYjNDM7CSAqLwomIzQzOwlvYmpfY2dyb3VwX3B1dChvYmpjZyk7CiYjNDM7CW1lbV9jZ3JvdXBfcHV0KG1lbWNnKTsKJiM0Mzt9CiYjNDM7CiYjNDM7CiAvKioKICAqIG1lbV9jZ3JvdXBfc3dhcGluX2NoYXJnZV9mb2xpbyAtIENoYXJnZSBhIG5ld2x5IGFsbG9jYXRlZCBmb2xpbyBmb3Igc3dhcGluLgogICogQGZvbGlvOiB0aGUgZm9saW8gdG8gY2hhcmdlCmRpZmYgLS1naXQgYS9zdWJwb29sX2xlYWtfbWF4X3NpemUuc2ggYi9zdWJwb29sX2xlYWtfbWF4X3NpemUuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMDAwMDAwMDAuLmJmYWZhMWJhMDc0ZWFjCi0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvc3VicG9vbF9sZWFrX21heF9zaXplLnNoCkBAIC0wLDAgJiM0MzsxLDcxIEBACiYjNDM7IyEvYmluL2Jhc2gKJiM0MzsKJiM0MztpZiBbICYjMzQ7JEVVSUQmIzM0OyAtbmUgMCBdOyB0aGVuCiYjNDM7ICAgIGVjaG8gJiMzNDtQbGVhc2UgcnVuIGFzIHJvb3QmIzM0OwomIzQzOyAgICBleGl0IDEKJiM0MztmaQomIzQzOwomIzQzO01OVF9QQVRIPSYjMzQ7L3RtcC9tbnRfaHVnZXRsYiYjMzQ7CiYjNDM7RklMRV9QQVRIPSYjMzQ7JE1OVF9QQVRIL3Rlc3RfZmlsZSYjMzQ7CiYjNDM7CiYjNDM7IyBTYXZlIG9yaWdpbmFsIHZhbHVlcwomIzQzO29yaWdfbnI9JChjYXQgL3N5cy9rZXJuZWwvbW0vaHVnZXBhZ2VzL2h1Z2VwYWdlcy0yMDQ4a0IvbnJfaHVnZXBhZ2VzKQomIzQzO29yaWdfb3ZlcmNvbW1pdD0kKGNhdCAvc3lzL2tlcm5lbC9tbS9odWdlcGFnZXMvaHVnZXBhZ2VzLTIwNDhrQi9ucl9vdmVyY29tbWl0X2h1Z2VwYWdlcykKJiM0MzsKJiM0MztjbGVhbnVwKCkgewomIzQzOyAgICBlY2hvICYjMzQ7Q2xlYW5pbmcgdXAuLi4mIzM0OwomIzQzOyAgICBybSAtZiAmIzM0OyRGSUxFX1BBVEgmIzM0OwomIzQzOyAgICB1bW91bnQgJiMzNDskTU5UX1BBVEgmIzM0OyAyJmd0Oy9kZXYvbnVsbAomIzQzOyAgICBybWRpciAmIzM0OyRNTlRfUEFUSCYjMzQ7IDImZ3Q7L2Rldi9udWxsCiYjNDM7ICAgIGVjaG8gJiMzNDskb3JpZ19uciYjMzQ7ICZndDsgL3N5cy9rZXJuZWwvbW0vaHVnZXBhZ2VzL2h1Z2VwYWdlcy0yMDQ4a0IvbnJfaHVnZXBhZ2VzCiYjNDM7ICAgIGVjaG8gJiMzNDskb3JpZ19vdmVyY29tbWl0JiMzNDsgJmd0OyAvc3lzL2tlcm5lbC9tbS9odWdlcGFnZXMvaHVnZXBhZ2VzLTIwNDhrQi9ucl9vdmVyY29tbWl0X2h1Z2VwYWdlcwomIzQzOyAgICBlY2hvICYjMzQ7Q2xlYW51cCBkb25lLiYjMzQ7CiYjNDM7fQomIzQzO3RyYXAgY2xlYW51cCBFWElUCiYjNDM7CiYjNDM7IyAxLiBNb3VudCBodWdldGxiZnMgd2l0aCBzaXplPTJNICgxIHBhZ2UpCiYjNDM7bWtkaXIgLXAgJiMzNDskTU5UX1BBVEgmIzM0OwomIzQzO2lmICEgbW91bnQgLXQgaHVnZXRsYmZzIC1vIHNpemU9Mk0gbm9uZSAmIzM0OyRNTlRfUEFUSCYjMzQ7OyB0aGVuCiYjNDM7ICAgIGVjaG8gJiMzNDtGYWlsZWQgdG8gbW91bnQgaHVnZXRsYmZzJiMzNDsKJiM0MzsgICAgZXhpdCAxCiYjNDM7ZmkKJiM0MzsKJiM0MzsjIDIuIFNldCBucl9odWdlcGFnZXMgdG8gMCwgb3ZlcmNvbW1pdCB0byAwCiYjNDM7ZWNobyAwICZndDsgL3N5cy9rZXJuZWwvbW0vaHVnZXBhZ2VzL2h1Z2VwYWdlcy0yMDQ4a0IvbnJfaHVnZXBhZ2VzCiYjNDM7ZWNobyAwICZndDsgL3N5cy9rZXJuZWwvbW0vaHVnZXBhZ2VzL2h1Z2VwYWdlcy0yMDQ4a0IvbnJfb3ZlcmNvbW1pdF9odWdlcGFnZXMKJiM0MzsKJiM0MzsjIENoZWNrIHN1YnBvb2wgdXNhZ2UgYmVmb3JlIHJ1bm5pbmcKJiM0MztyZWFkIHRvdGFsIGZyZWUgJmx0OyAmbHQ7KHN0YXQgLWYgLWMgJiMzNDslYiAlZiYjMzQ7ICYjMzQ7JE1OVF9QQVRIJiMzNDspCiYjNDM7dXNlZF9iZWZvcmU9JCgodG90YWwgLSBmcmVlKSkKJiM0MztlY2hvICYjMzQ7QmVmb3JlIHRlc3QgLSBTdWJwb29sIHRvdGFsIGJsb2NrczogJHRvdGFsJiMzNDsKJiM0MztlY2hvICYjMzQ7QmVmb3JlIHRlc3QgLSBTdWJwb29sIGZyZWUgYmxvY2tzOiAgJGZyZWUmIzM0OwomIzQzO2VjaG8gJiMzNDtCZWZvcmUgdGVzdCAtIFN1YnBvb2wgdXNlZCBibG9ja3M6ICAkdXNlZF9iZWZvcmUmIzM0OwomIzQzO2lmIFsgJiMzNDskdXNlZF9iZWZvcmUmIzM0OyAtbmUgMCBdOyB0aGVuCiYjNDM7ICAgIGVjaG8gJiMzNDtFUlJPUjogU3VicG9vbCBpcyBub3QgY2xlYW4gYmVmb3JlIHRlc3Qgc3RhcnRzISYjMzQ7CiYjNDM7ICAgIGV4aXQgMQomIzQzO2ZpCiYjNDM7CiYjNDM7IyBSdW4gZmFsbG9jYXRlIChleHBlY3RpbmcgZmFpbHVyZSkKJiM0MztlY2hvICYjMzQ7UnVubmluZyBmYWxsb2NhdGUgKGV4cGVjdGluZyBmYWlsdXJlKS4uLiYjMzQ7CiYjNDM7aWYgZmFsbG9jYXRlIC1sIDJNICYjMzQ7JEZJTEVfUEFUSCYjMzQ7IDImZ3Q7L2Rldi9udWxsOyB0aGVuCiYjNDM7ICAgIGVjaG8gJiMzNDtFUlJPUjogZmFsbG9jYXRlIHN1Y2NlZWRlZCBidXQgc2hvdWxkIGhhdmUgZmFpbGVkIChucl9odWdlcGFnZXMgaXMgMCkmIzM0OwomIzQzOyAgICBleGl0IDEKJiM0MztmaQomIzQzOwomIzQzOyMgQ2hlY2sgc3VicG9vbCB1c2FnZSB2aWEgc3RhdGZzCiYjNDM7IyAlYjogVG90YWwgYmxvY2tzCiYjNDM7IyAlZjogRnJlZSBibG9ja3MKJiM0MztyZWFkIHRvdGFsIGZyZWUgJmx0OyAmbHQ7KHN0YXQgLWYgLWMgJiMzNDslYiAlZiYjMzQ7ICYjMzQ7JE1OVF9QQVRIJiMzNDspCiYjNDM7dXNlZD0kKCh0b3RhbCAtIGZyZWUpKQomIzQzOwomIzQzO2VjaG8gJiMzNDtTdWJwb29sIHRvdGFsIGJsb2NrczogJHRvdGFsJiMzNDsKJiM0MztlY2hvICYjMzQ7U3VicG9vbCBmcmVlIGJsb2NrczogICRmcmVlJiMzNDsKJiM0MztlY2hvICYjMzQ7U3VicG9vbCB1c2VkIGJsb2NrcyAobGVha2VkIGlmICZndDsgMCk6ICR1c2VkJiMzNDsKJiM0MzsKJiM0MztpZiBbICYjMzQ7JHVzZWQmIzM0OyAtZ3QgMCBdOyB0aGVuCiYjNDM7ICAgIGVjaG8gJiMzNDtSRVNVTFQ6IExFQUsgREVURUNURUQgKEZBSUwpJiMzNDsKJiM0MzsgICAgZXhpdCAxCiYjNDM7ZWxzZQomIzQzOyAgICBlY2hvICYjMzQ7UkVTVUxUOiBOTyBMRUFLIChQQVNTKSYjMzQ7CiYjNDM7ICAgIGV4aXQgMAomIzQzO2ZpCmRpZmYgLS1naXQgYS9zdWJwb29sX3NoYXJlZF9sZWFrLmMgYi9zdWJwb29sX3NoYXJlZF9sZWFrLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAuLjU4MTFlMThkN2Y4YmU3Ci0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvc3VicG9vbF9zaGFyZWRfbGVhay5jCkBAIC0wLDAgJiM0MzsxLDI5IEBACiYjNDM7I2luY2x1ZGUgJmx0O3N0ZGlvLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O3N0ZGxpYi5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDt1bmlzdGQuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7c3lzL21tYW4uaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7c3lzL3N0YXQuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7ZmNudGwuaCZndDsKJiM0MzsKJiM0MzsjZGVmaW5lIEhQQUdFX1NJWkUgKDIgKiAxMDI0ICogMTAyNCkKJiM0MzsKJiM0MztpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpIHsKJiM0MzsgICAgaWYgKGFyZ2MgJmx0OyAyKSB7CiYjNDM7ICAgICAgICBmcHJpbnRmKHN0ZGVyciwgJiMzNDtVc2FnZTogJXMgJmx0O2ZpbGVfcGF0aCZndDtcbiYjMzQ7LCBhcmd2WzBdKTsKJiM0MzsgICAgICAgIHJldHVybiAxOwomIzQzOyAgICB9CiYjNDM7ICAgIGNvbnN0IGNoYXIgKmZpbGVfcGF0aCA9IGFyZ3ZbMV07CiYjNDM7CiYjNDM7ICAgIGludCBmZCA9IG9wZW4oZmlsZV9wYXRoLCBPX0NSRUFUIHwgT19SRFdSLCAwNjY2KTsKJiM0MzsgICAgaWYgKGZkICZsdDsgMCkgeyBwZXJyb3IoJiMzNDtvcGVuJiMzNDspOyByZXR1cm4gMTsgfQomIzQzOwomIzQzOyAgICB2b2lkICphZGRyID0gbW1hcChOVUxMLCAyICogSFBBR0VfU0laRSwgUFJPVF9SRUFEIHwgUFJPVF9XUklURSwgTUFQX1NIQVJFRCwgZmQsIDApOwomIzQzOyAgICBpZiAoYWRkciA9PSBNQVBfRkFJTEVEKSB7IHBlcnJvcigmIzM0O21tYXAmIzM0Oyk7IGNsb3NlKGZkKTsgcmV0dXJuIDE7IH0KJiM0MzsKJiM0MzsgICAgKih2b2xhdGlsZSBjaGFyICopYWRkciA9IDE7IC8vIEFsbG9jYXRlIDFzdCBwYWdlIG9ubHkuIDJuZCBwYWdlIHJlbWFpbnMgdW5hbGxvY2F0ZWQgKGJ1dCByZXNlcnZlZCkuCiYjNDM7CiYjNDM7ICAgIG11bm1hcChhZGRyLCAyICogSFBBR0VfU0laRSk7CiYjNDM7ICAgIGNsb3NlKGZkKTsKJiM0MzsKJiM0MzsgICAgcmV0dXJuIDA7CiYjNDM7fQpkaWZmIC0tZ2l0IGEvc3VicG9vbF9zaGFyZWRfbGVhay5zaCBiL3N1YnBvb2xfc2hhcmVkX2xlYWsuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMDAwMDAwMDAuLjQ2YzYyMmIxODU1OWEwCi0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvc3VicG9vbF9zaGFyZWRfbGVhay5zaApAQCAtMCwwICYjNDM7MSw4NiBAQAomIzQzOyMhL2Jpbi9iYXNoCiYjNDM7CiYjNDM7aWYgWyAmIzM0OyRFVUlEJiMzNDsgLW5lIDAgXTsgdGhlbgomIzQzOyAgICBlY2hvICYjMzQ7UGxlYXNlIHJ1biBhcyByb290JiMzNDsKJiM0MzsgICAgZXhpdCAxCiYjNDM7ZmkKJiM0MzsKJiM0MztNTlRfUEFUSD0mIzM0Oy90bXAvbW50X2h1Z2V0bGJfc2hhcmVkX2xlYWsmIzM0OwomIzQzO0ZJTEVfUEFUSD0mIzM0OyRNTlRfUEFUSC90ZXN0X2ZpbGUmIzM0OwomIzQzOwomIzQzOyMgU2F2ZSBvcmlnaW5hbCB2YWx1ZXMKJiM0MztvcmlnX25yPSQoY2F0IC9zeXMva2VybmVsL21tL2h1Z2VwYWdlcy9odWdlcGFnZXMtMjA0OGtCL25yX2h1Z2VwYWdlcykKJiM0MzsKJiM0MztjbGVhbnVwKCkgewomIzQzOyAgICBlY2hvICYjMzQ7Q2xlYW5pbmcgdXAuLi4mIzM0OwomIzQzOyAgICBybSAtZiAmIzM0OyRGSUxFX1BBVEgmIzM0OwomIzQzOyAgICB1bW91bnQgJiMzNDskTU5UX1BBVEgmIzM0OyAyJmd0Oy9kZXYvbnVsbAomIzQzOyAgICBybWRpciAmIzM0OyRNTlRfUEFUSCYjMzQ7IDImZ3Q7L2Rldi9udWxsCiYjNDM7ICAgIGVjaG8gJiMzNDskb3JpZ19uciYjMzQ7ICZndDsgL3N5cy9rZXJuZWwvbW0vaHVnZXBhZ2VzL2h1Z2VwYWdlcy0yMDQ4a0IvbnJfaHVnZXBhZ2VzCiYjNDM7ICAgIGVjaG8gJiMzNDtDbGVhbnVwIGRvbmUuJiMzNDsKJiM0Mzt9CiYjNDM7dHJhcCBjbGVhbnVwIEVYSVQKJiM0MzsKJiM0MzsjIDEuIFNldCBucl9odWdlcGFnZXMgdG8gMgomIzQzO2VjaG8gMiAmZ3Q7IC9zeXMva2VybmVsL21tL2h1Z2VwYWdlcy9odWdlcGFnZXMtMjA0OGtCL25yX2h1Z2VwYWdlcwomIzQzOwomIzQzOyMgMi4gTW91bnQgaHVnZXRsYmZzIHdpdGggbWluX3NpemU9Mk0gKDEgcGFnZSkKJiM0Mztta2RpciAtcCAmIzM0OyRNTlRfUEFUSCYjMzQ7CiYjNDM7aWYgISBtb3VudCAtdCBodWdldGxiZnMgLW8gbWluX3NpemU9Mk0gbm9uZSAmIzM0OyRNTlRfUEFUSCYjMzQ7OyB0aGVuCiYjNDM7ICAgIGVjaG8gJiMzNDtGYWlsZWQgdG8gbW91bnQgaHVnZXRsYmZzJiMzNDsKJiM0MzsgICAgZXhpdCAxCiYjNDM7ZmkKJiM0MzsKJiM0MzsjIENoZWNrIHJlc3ZfaHVnZXBhZ2VzIGFmdGVyIG1vdW50IChzaG91bGQgYmUgMSkKJiM0Mztpbml0aWFsX3Jlc3Y9JChjYXQgL3N5cy9rZXJuZWwvbW0vaHVnZXBhZ2VzL2h1Z2VwYWdlcy0yMDQ4a0IvcmVzdl9odWdlcGFnZXMpCiYjNDM7ZWNobyAmIzM0O0luaXRpYWwgcmVzdl9odWdlcGFnZXMgKGFmdGVyIG1vdW50KTogJGluaXRpYWxfcmVzdiYjMzQ7CiYjNDM7aWYgWyAmIzM0OyRpbml0aWFsX3Jlc3YmIzM0OyAtbmUgMSBdOyB0aGVuCiYjNDM7ICAgIGVjaG8gJiMzNDtFUlJPUjogSW5pdGlhbCByZXN2X2h1Z2VwYWdlcyBpcyBub3QgMSEmIzM0OwomIzQzOyAgICBleGl0IDEKJiM0MztmaQomIzQzOwomIzQzOyMgVmVyaWZ5IHJlcHJvZHVjZXIgYmluYXJ5IGV4aXN0cwomIzQzO2lmIFsgISAteCAuL3N1YnBvb2xfc2hhcmVkX2xlYWsgXTsgdGhlbgomIzQzOyAgICBlY2hvICYjMzQ7cmVwcm9kdWNlciBiaW5hcnkgJiMzOTsuL3N1YnBvb2xfc2hhcmVkX2xlYWsmIzM5OyBub3QgZm91bmQgb3Igbm90IGV4ZWN1dGFibGUuJiMzNDsKJiM0MzsgICAgZWNobyAmIzM0O1BsZWFzZSBjb21waWxlIGl0IGZpcnN0OiBnY2MgLXN0YXRpYyAtbyBzdWJwb29sX3NoYXJlZF9sZWFrIHN1YnBvb2xfc2hhcmVkX2xlYWsuYyYjMzQ7CiYjNDM7ICAgIGV4aXQgMQomIzQzO2ZpCiYjNDM7CiYjNDM7IyAzLiBSdW4gaGVscGVyIHRvIG1hcCA0TUIsIGFsbG9jYXRlIDJNQiwgYW5kIGNsb3NlLgomIzQzOyMgVGhpcyBjcmVhdGVzIDIgcmVzZXJ2YXRpb25zLCBjb25zdW1lcyAxIChieSBhbGxvY2F0aW5nIFBhZ2UgMCkuCiYjNDM7IyBUaGUgdW5hbGxvY2F0ZWQgUGFnZSAxIHJlc2VydmF0aW9uIHJlbWFpbnMgYWN0aXZlIGluIHRoZSBpbm9kZSYjMzk7cyByZXN2X21hcC4KJiM0MztlY2hvICYjMzQ7UnVubmluZyBoZWxwZXIuLi4mIzM0OwomIzQzOy4vc3VicG9vbF9zaGFyZWRfbGVhayAmIzM0OyRGSUxFX1BBVEgmIzM0OwomIzQzOwomIzQzO3Jlc3ZfYWZ0ZXJfaGVscGVyPSQoY2F0IC9zeXMva2VybmVsL21tL2h1Z2VwYWdlcy9odWdlcGFnZXMtMjA0OGtCL3Jlc3ZfaHVnZXBhZ2VzKQomIzQzO2VjaG8gJiMzNDtyZXN2X2h1Z2VwYWdlcyBhZnRlciBoZWxwZXIgKHNob3VsZCBiZSAxKTogJHJlc3ZfYWZ0ZXJfaGVscGVyJiMzNDsKJiM0MzsjIFBhZ2UgMCBpcyBhbGxvY2F0ZWQgKG5vIGxvbmdlciByZXNlcnZlZCkuIFBhZ2UgMSBpcyByZXNlcnZlZC4KJiM0MzsjIFNvIHJlc3ZfaHVnZXBhZ2VzIHNob3VsZCBiZSAxLgomIzQzO2lmIFsgJiMzNDskcmVzdl9hZnRlcl9oZWxwZXImIzM0OyAtbmUgMSBdOyB0aGVuCiYjNDM7ICAgIGVjaG8gJiMzNDtFUlJPUjogcmVzdl9odWdlcGFnZXMgaXMgbm90IDEgYWZ0ZXIgaGVscGVyIHJ1biEmIzM0OwomIzQzOyAgICBleGl0IDEKJiM0MztmaQomIzQzOwomIzQzOyMgNC4gVHJ1bmNhdGUgZmlsZSB0byAyTUIgKHJlbGVhc2VzIFBhZ2UgMSByZXNlcnZhdGlvbikKJiM0MztlY2hvICYjMzQ7VHJ1bmNhdGluZyBmaWxlIHRvIDJNQiAocmVsZWFzaW5nIDEgcGFnZSByZXNlcnZhdGlvbikuLi4mIzM0OwomIzQzO3RydW5jYXRlIC1zIDJNICYjMzQ7JEZJTEVfUEFUSCYjMzQ7CiYjNDM7CiYjNDM7IyBDaGVjayByZXN2X2h1Z2VwYWdlcyBhZnRlciB0cnVuY2F0ZS4KJiM0MzsjIFNpbmNlIFBhZ2UgMCBpcyBzdGlsbCBhbGxvY2F0ZWQgKGFuZCBpbiBwYWdlIGNhY2hlKSwgYW5kIHNhdGlzZmllcyB0aGUKJiM0MzsjIG1pbl9zaXplPTJNIGd1YXJhbnRlZSwgd2Ugc2hvdWxkIGhhdmUgMCByZXNlcnZhdGlvbnMgcmVtYWluaW5nLgomIzQzOyMgSWYgdGhlIGJ1ZyBpcyBwcmVzZW50LCB0aGUgdHJ1bmNhdGUgcGF0aCB3aWxsIGluY29ycmVjdGx5IHJlc3RvcmUgdGhlCiYjNDM7IyByZXNlcnZhdGlvbiB0byB0aGUgc3VicG9vbCBhbmQgc2tpcCByZWxlYXNpbmcgaXQgZ2xvYmFsbHksIGxlYXZpbmcKJiM0MzsjIHJlc3ZfaHVnZXBhZ2VzIGF0IDEuCiYjNDM7ZmluYWxfcmVzdj0kKGNhdCAvc3lzL2tlcm5lbC9tbS9odWdlcGFnZXMvaHVnZXBhZ2VzLTIwNDhrQi9yZXN2X2h1Z2VwYWdlcykKJiM0MztlY2hvICYjMzQ7RmluYWwgcmVzdl9odWdlcGFnZXMgKGFmdGVyIDJNQiB0cnVuY2F0ZSk6ICRmaW5hbF9yZXN2JiMzNDsKJiM0MzsKJiM0MztpZiBbICYjMzQ7JGZpbmFsX3Jlc3YmIzM0OyAtZXEgMSBdOyB0aGVuCiYjNDM7ICAgIGVjaG8gJiMzNDtSRVNVTFQ6IExFQUsgREVURUNURUQgKEZBSUwpJiMzNDsKJiM0MzsgICAgZXhpdCAxCiYjNDM7ZWxpZiBbICYjMzQ7JGZpbmFsX3Jlc3YmIzM0OyAtZXEgMCBdOyB0aGVuCiYjNDM7ICAgIGVjaG8gJiMzNDtSRVNVTFQ6IE5PIExFQUsgKFBBU1MpJiMzNDsKJiM0MzsgICAgZXhpdCAwCiYjNDM7ZWxzZQomIzQzOyAgICBlY2hvICYjMzQ7UkVTVUxUOiBVTkVYUEVDVEVEIFNUQVRFICgkZmluYWxfcmVzdikmIzM0OwomIzQzOyAgICBleGl0IDIKJiM0MztmaQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9odWdldGxiX3N1YnBvb2wvLmdpdGlnbm9yZSBiL3Rvb2xzL3Rlc3RpbmcvaHVnZXRsYl9zdWJwb29sLy5naXRpZ25vcmUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAuLjczNDhjMmM3MmYxZTExCi0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9odWdldGxiX3N1YnBvb2wvLmdpdGlnbm9yZQpAQCAtMCwwICYjNDM7MSBAQAomIzQzO3Rlc3Rfc3VicG9vbApkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9odWdldGxiX3N1YnBvb2wvTWFrZWZpbGUgYi90b29scy90ZXN0aW5nL2h1Z2V0bGJfc3VicG9vbC9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMC4uMWJkYjdlMjYzNTYxNDEKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL2h1Z2V0bGJfc3VicG9vbC9NYWtlZmlsZQpAQCAtMCwwICYjNDM7MSwxOCBAQAomIzQzOyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKJiM0MzsuUEhPTlk6IGFsbCBjbGVhbiB0ZXN0CiYjNDM7CiYjNDM7Q0MgPSBnY2MKJiM0MztDRkxBR1MgPSAtV2FsbCAtTzIgLUkuLi9zaGFyZWQgLUkuIC1JLi4vLi4vaW5jbHVkZSAtSS4uLy4uL2FyY2gveDg2L2luY2x1ZGUgLXB0aHJlYWQKJiM0MztLRVJORUxfU1VCUE9PTF9IID0gLi4vLi4vLi4vbW0vaHVnZXRsYl9zdWJwb29sLmgKJiM0MztLRVJORUxfU1VCUE9PTF9DID0gLi4vLi4vLi4vbW0vaHVnZXRsYl9zdWJwb29sLmMKJiM0MzsKJiM0MzthbGw6IHRlc3QKJiM0MzsKJiM0Mzt0ZXN0X3N1YnBvb2w6IHRlc3Rfc3VicG9vbC5jICQoS0VSTkVMX1NVQlBPT0xfQykgJChLRVJORUxfU1VCUE9PTF9IKQomIzQzOwkkKENDKSAkKENGTEFHUykgdGVzdF9zdWJwb29sLmMgLW8gdGVzdF9zdWJwb29sCiYjNDM7CiYjNDM7dGVzdDogdGVzdF9zdWJwb29sCiYjNDM7CS4vdGVzdF9zdWJwb29sCiYjNDM7CiYjNDM7Y2xlYW46CiYjNDM7CXJtIC1mIHRlc3Rfc3VicG9vbApkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9odWdldGxiX3N1YnBvb2wvdGVzdF9zdWJwb29sLmMgYi90b29scy90ZXN0aW5nL2h1Z2V0bGJfc3VicG9vbC90ZXN0X3N1YnBvb2wuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMC4uNzg5MDAyNzRjYzI2NDcKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL2h1Z2V0bGJfc3VicG9vbC90ZXN0X3N1YnBvb2wuYwpAQCAtMCwwICYjNDM7MSw0MDAgQEAKJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAomIzQzOyNpbmNsdWRlICZsdDthc3NlcnQuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7c3RkbGliLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3R5cGVzLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3NsYWIuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvYnVnLmgmZ3Q7CiYjNDM7CiYjNDM7LyogTW9ja2VkIFVzZXJzcGFjZSBpbXBsZW1lbnRhdGlvbiBmb3IgS2VybmVsIFN1YnBvb2wgYWxsb2NhdGlvbiBkZXBlbmRlbmNpZXMgKi8KJiM0MztzdHJ1Y3QgaHN0YXRlIHsKJiM0MzsJaW50IGR1bW15OwomIzQzO307CiYjNDM7CiYjNDM7I3VuZGVmIGt6YWxsb2Nfb2JqCiYjNDM7I3VuZGVmIGt6YWxsb2Nfb2JqcwomIzQzOyNkZWZpbmUga3phbGxvY19vYmooUCwgLi4uKSBtYWxsb2Moc2l6ZW9mKFApKQomIzQzOyNkZWZpbmUga3phbGxvY19vYmpzKFAsIENPVU5ULCAuLi4pIG1hbGxvYyhzaXplb2YoUCkgKiAoQ09VTlQpKQomIzQzOwomIzQzOyNkZWZpbmUga2ZyZWUgZnJlZQomIzQzOyNkZWZpbmUga21hbGxvYyBtYWxsb2MKJiM0MzsKJiM0MzsjZGVmaW5lIGh1Z2VfcGFnZV9zaGlmdChoKSAoMjEgJiM0MzsgKDAgKiAoKHVuc2lnbmVkIGxvbmcpKGgpICZhbXA7IDApKSkKJiM0MzsjZGVmaW5lIGh1Z2VfcGFnZV9zaXplKGgpICgxVUwgJmx0OyZsdDsgaHVnZV9wYWdlX3NoaWZ0KGgpKQomIzQzOwomIzQzO3N0YXRpYyBib29sIGh1Z2V0bGJfYWNjdF9tZW1vcnlfY2FsbGVkOwomIzQzO3N0YXRpYyBzdHJ1Y3QgaHN0YXRlICpodWdldGxiX2FjY3RfbWVtb3J5X2g7CiYjNDM7c3RhdGljIGxvbmcgaHVnZXRsYl9hY2N0X21lbW9yeV9kZWx0YTsKJiM0MzsKJiM0MztzdGF0aWMgaW50IGh1Z2V0bGJfYWNjdF9tZW1vcnkoc3RydWN0IGhzdGF0ZSAqaCwgbG9uZyBkZWx0YSkKJiM0Mzt7CiYjNDM7CWh1Z2V0bGJfYWNjdF9tZW1vcnlfY2FsbGVkID0gdHJ1ZTsKJiM0MzsJaHVnZXRsYl9hY2N0X21lbW9yeV9oID0gaDsKJiM0MzsJaHVnZXRsYl9hY2N0X21lbW9yeV9kZWx0YSA9IGRlbHRhOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgcmVzZXRfaHVnZXRsYl9hY2N0X21lbW9yeV9tb2NrKHZvaWQpCiYjNDM7ewomIzQzOwlodWdldGxiX2FjY3RfbWVtb3J5X2NhbGxlZCA9IGZhbHNlOwomIzQzOwlodWdldGxiX2FjY3RfbWVtb3J5X2ggPSBOVUxMOwomIzQzOwlodWdldGxiX2FjY3RfbWVtb3J5X2RlbHRhID0gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgYXNzZXJ0X2h1Z2V0bGJfYWNjdF9tZW1vcnlfY2FsbGVkKHN0cnVjdCBoc3RhdGUgKmgsIGxvbmcgZGVsdGEpCiYjNDM7ewomIzQzOwlhc3NlcnQoaHVnZXRsYl9hY2N0X21lbW9yeV9jYWxsZWQpOwomIzQzOwlhc3NlcnQoaHVnZXRsYl9hY2N0X21lbW9yeV9oID09IGgpOwomIzQzOwlhc3NlcnQoaHVnZXRsYl9hY2N0X21lbW9yeV9kZWx0YSA9PSBkZWx0YSk7CiYjNDM7CiYjNDM7CXJlc2V0X2h1Z2V0bGJfYWNjdF9tZW1vcnlfbW9jaygpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBhc3NlcnRfaHVnZXRsYl9hY2N0X21lbW9yeV9ub3RfY2FsbGVkKHZvaWQpCiYjNDM7ewomIzQzOwlhc3NlcnQoIWh1Z2V0bGJfYWNjdF9tZW1vcnlfY2FsbGVkKTsKJiM0Mzt9CiYjNDM7CiYjNDM7I2luY2x1ZGUgJiMzNDsuLi8uLi8uLi9tbS9odWdldGxiX3N1YnBvb2wuaCYjMzQ7CiYjNDM7I2luY2x1ZGUgJiMzNDsuLi8uLi8uLi9tbS9odWdldGxiX3N1YnBvb2wuYyYjMzQ7CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgdGVzdF9zdWJwb29sX25ld19wdXRfbm9fbWluX2xpbWl0KHZvaWQpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgaHN0YXRlIGg7CiYjNDM7CXN0cnVjdCBodWdlcGFnZV9zdWJwb29sICpzcG9vbDsKJiM0MzsKJiM0MzsJc3Bvb2wgPSBodWdlcGFnZV9uZXdfc3VicG9vbCgmYW1wO2gsIDEwLCAtMSk7CiYjNDM7CWFzc2VydChzcG9vbCAhPSBOVUxMKTsKJiM0MzsJYXNzZXJ0KHNwb29sLSZndDttYXhfaHBhZ2VzID09IDEwKTsKJiM0MzsJYXNzZXJ0KHNwb29sLSZndDttaW5faHBhZ2VzID09IC0xKTsKJiM0MzsJYXNzZXJ0KHNwb29sLSZndDtyc3ZfaHBhZ2VzID09IC0xKTsKJiM0MzsJYXNzZXJ0KHNwb29sLSZndDtjb3VudCA9PSAxKTsKJiM0MzsJYXNzZXJ0X2h1Z2V0bGJfYWNjdF9tZW1vcnlfbm90X2NhbGxlZCgpOwomIzQzOwomIzQzOwlodWdlcGFnZV9wdXRfc3VicG9vbChzcG9vbCk7CiYjNDM7CWFzc2VydF9odWdldGxiX2FjY3RfbWVtb3J5X25vdF9jYWxsZWQoKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgdGVzdF9zdWJwb29sX25ld19wdXRfd2l0aF9taW5fbGltaXQodm9pZCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBoc3RhdGUgaDsKJiM0MzsJc3RydWN0IGh1Z2VwYWdlX3N1YnBvb2wgKnNwb29sOwomIzQzOwomIzQzOwlzcG9vbCA9IGh1Z2VwYWdlX25ld19zdWJwb29sKCZhbXA7aCwgMjAsIDUpOwomIzQzOwlhc3NlcnQoc3Bvb2wgIT0gTlVMTCk7CiYjNDM7CWFzc2VydChzcG9vbC0mZ3Q7bWF4X2hwYWdlcyA9PSAyMCk7CiYjNDM7CWFzc2VydChzcG9vbC0mZ3Q7bWluX2hwYWdlcyA9PSA1KTsKJiM0MzsJYXNzZXJ0KHNwb29sLSZndDtyc3ZfaHBhZ2VzID09IDUpOwomIzQzOwlhc3NlcnQoc3Bvb2wtJmd0O2NvdW50ID09IDEpOwomIzQzOwlhc3NlcnRfaHVnZXRsYl9hY2N0X21lbW9yeV9jYWxsZWQoJmFtcDtoLCA1KTsKJiM0MzsKJiM0MzsJaHVnZXBhZ2VfcHV0X3N1YnBvb2woc3Bvb2wpOwomIzQzOwlhc3NlcnRfaHVnZXRsYl9hY2N0X21lbW9yeV9jYWxsZWQoJmFtcDtoLCAtNSk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIHRlc3Rfc3VicG9vbF9nZXRfcGFnZXNfYmVsb3dfbWluKHZvaWQpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgaHN0YXRlIGg7CiYjNDM7CXN0cnVjdCBodWdlcGFnZV9zdWJwb29sICpzcG9vbDsKJiM0MzsJbG9uZyByZXQ7CiYjNDM7CiYjNDM7CS8qIExldCYjMzk7cyBpbml0aWFsaXplOiBtaW5faHBhZ2VzID0gMTAsIHVzZWRfaHBhZ2VzID0gOSwgcnN2X2hwYWdlcyA9IDEgKi8KJiM0MzsJc3Bvb2wgPSBodWdlcGFnZV9uZXdfc3VicG9vbCgmYW1wO2gsIC0xLCAxMCk7CiYjNDM7CWFzc2VydF9odWdldGxiX2FjY3RfbWVtb3J5X2NhbGxlZCgmYW1wO2gsIDEwKTsKJiM0MzsKJiM0MzsJcmV0ID0gaHVnZXBhZ2Vfc3VicG9vbF9nZXRfcGFnZXMoc3Bvb2wsIDkpOwomIzQzOwlhc3NlcnQocmV0ID09IDApOwomIzQzOwlhc3NlcnQoc3Bvb2wtJmd0O3VzZWRfaHBhZ2VzID09IDkpOwomIzQzOwlhc3NlcnQoc3Bvb2wtJmd0O3Jzdl9ocGFnZXMgPT0gMSk7CiYjNDM7CiYjNDM7CS8qIEludm9rZSBHZXQgKENvbnN1bWVzIHRoZSByZW1haW5pbmcgMSBzdWJwb29sIHJlc2VydmUhKSAqLwomIzQzOwlyZXQgPSBodWdlcGFnZV9zdWJwb29sX2dldF9wYWdlcyhzcG9vbCwgMSk7CiYjNDM7CWFzc2VydChyZXQgPT0gMCk7IC8qIENvdmVyZWQgYnkgc3VicG9vbCByZXNlcnZlISAqLwomIzQzOwlhc3NlcnQoc3Bvb2wtJmd0O3VzZWRfaHBhZ2VzID09IDEwKTsKJiM0MzsJYXNzZXJ0KHNwb29sLSZndDtyc3ZfaHBhZ2VzID09IDApOwomIzQzOwomIzQzOwkvKiBJbnZva2UgUHV0IChSZXBsZW5pc2hlcyB0aGUgc3VicG9vbCByZXNlcnZlISkgKi8KJiM0MzsJcmV0ID0gaHVnZXBhZ2Vfc3VicG9vbF9wdXRfcGFnZXMoc3Bvb2wsIDEpOwomIzQzOwlhc3NlcnQocmV0ID09IDApOyAvKiBLZXB0IGJ5IHN1YnBvb2wgcmVzZXJ2ZSEgKi8KJiM0MzsJYXNzZXJ0KHNwb29sLSZndDt1c2VkX2hwYWdlcyA9PSA5KTsKJiM0MzsJYXNzZXJ0KHNwb29sLSZndDtyc3ZfaHBhZ2VzID09IDEpOwomIzQzOwomIzQzOwkvKiBDbGVhbnVwOiBSZXR1cm4gdXNlZF9ocGFnZXMgdG8gMCBzbyB0aGUgc3VicG9vbCBmcmVlcyBzeW1tZXRyaWNhbGx5ISAqLwomIzQzOwlodWdlcGFnZV9zdWJwb29sX3B1dF9wYWdlcyhzcG9vbCwgOSk7CiYjNDM7CWh1Z2VwYWdlX3B1dF9zdWJwb29sKHNwb29sKTsKJiM0MzsJYXNzZXJ0X2h1Z2V0bGJfYWNjdF9tZW1vcnlfY2FsbGVkKCZhbXA7aCwgLTEwKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgdGVzdF9zdWJwb29sX2dldF9wYWdlc19jcm9zc2luZ19taW4odm9pZCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBoc3RhdGUgaDsKJiM0MzsJc3RydWN0IGh1Z2VwYWdlX3N1YnBvb2wgKnNwb29sOwomIzQzOwlsb25nIHJldDsKJiM0MzsKJiM0MzsJLyogTGV0JiMzOTtzIGluaXRpYWxpemU6IG1pbl9ocGFnZXMgPSAxMCwgdXNlZF9ocGFnZXMgPSAxMCwgcnN2X2hwYWdlcyA9IDAgKi8KJiM0MzsJc3Bvb2wgPSBodWdlcGFnZV9uZXdfc3VicG9vbCgmYW1wO2gsIC0xLCAxMCk7CiYjNDM7CWFzc2VydF9odWdldGxiX2FjY3RfbWVtb3J5X2NhbGxlZCgmYW1wO2gsIDEwKTsKJiM0MzsKJiM0MzsJaHVnZXBhZ2Vfc3VicG9vbF9nZXRfcGFnZXMoc3Bvb2wsIDEwKTsKJiM0MzsJYXNzZXJ0KHNwb29sLSZndDt1c2VkX2hwYWdlcyA9PSAxMCk7CiYjNDM7CWFzc2VydChzcG9vbC0mZ3Q7cnN2X2hwYWdlcyA9PSAwKTsKJiM0MzsKJiM0MzsJLyogSW52b2tlIEdldCAoVHJpZ2dlcnMgYSByZXF1ZXN0IGZvciBhIEdsb2JhbCBCdWRkeS9TdXJwbHVzIHBhZ2UhKSAqLwomIzQzOwlyZXQgPSBodWdlcGFnZV9zdWJwb29sX2dldF9wYWdlcyhzcG9vbCwgMSk7CiYjNDM7CWFzc2VydChyZXQgPT0gMSk7IC8qIFJlcXVpcmVzIGdsb2JhbCBwYWdlISAqLwomIzQzOwlhc3NlcnQoc3Bvb2wtJmd0O3VzZWRfaHBhZ2VzID09IDExKTsKJiM0MzsJYXNzZXJ0KHNwb29sLSZndDtyc3ZfaHBhZ2VzID09IDApOwomIzQzOwomIzQzOwkvKiBJbnZva2UgUHV0IChBYm92ZSBtaW5pbXVtLCBzbyBpdCByZWxlYXNlcyB0aGUgcGFnZSB0byB0aGUgR2xvYmFsIFBvb2whKSAqLwomIzQzOwlyZXQgPSBodWdlcGFnZV9zdWJwb29sX3B1dF9wYWdlcyhzcG9vbCwgMSk7CiYjNDM7CWFzc2VydChyZXQgPT0gMSk7IC8qIERyb3BwZWQgdG8gZ2xvYmFsIHBvb2whICovCiYjNDM7CWFzc2VydChzcG9vbC0mZ3Q7dXNlZF9ocGFnZXMgPT0gMTApOwomIzQzOwlhc3NlcnQoc3Bvb2wtJmd0O3Jzdl9ocGFnZXMgPT0gMCk7CiYjNDM7CiYjNDM7CS8qIENsZWFudXAgKi8KJiM0MzsJaHVnZXBhZ2Vfc3VicG9vbF9wdXRfcGFnZXMoc3Bvb2wsIDEwKTsKJiM0MzsJaHVnZXBhZ2VfcHV0X3N1YnBvb2woc3Bvb2wpOwomIzQzOwlhc3NlcnRfaHVnZXRsYl9hY2N0X21lbW9yeV9jYWxsZWQoJmFtcDtoLCAtMTApOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCB0ZXN0X3N1YnBvb2xfZ2V0X3BhZ2VzX2Nyb3NzaW5nX21pbl9tdWx0aSh2b2lkKQomIzQzO3sKJiM0MzsJc3RydWN0IGhzdGF0ZSBoOwomIzQzOwlzdHJ1Y3QgaHVnZXBhZ2Vfc3VicG9vbCAqc3Bvb2w7CiYjNDM7CWxvbmcgcmV0OwomIzQzOwomIzQzOwkvKiBTY2VuYXJpbyAxOiBDcm9zc2luZyBlbnRpcmVseSBpbnRvIHN1cnBsdXMgdGVycml0b3J5IGJ5IGEgZGVsdGEgJmd0OyAxICovCiYjNDM7CS8qIExldCYjMzk7cyBpbml0aWFsaXplOiBtaW5faHBhZ2VzID0gMTAsIHVzZWRfaHBhZ2VzID0gOCwgcnN2X2hwYWdlcyA9IDIgKi8KJiM0MzsJc3Bvb2wgPSBodWdlcGFnZV9uZXdfc3VicG9vbCgmYW1wO2gsIC0xLCAxMCk7CiYjNDM7CWFzc2VydF9odWdldGxiX2FjY3RfbWVtb3J5X2NhbGxlZCgmYW1wO2gsIDEwKTsKJiM0MzsKJiM0MzsJcmV0ID0gaHVnZXBhZ2Vfc3VicG9vbF9nZXRfcGFnZXMoc3Bvb2wsIDgpOwomIzQzOwlhc3NlcnQocmV0ID09IDApOwomIzQzOwlhc3NlcnQoc3Bvb2wtJmd0O3VzZWRfaHBhZ2VzID09IDgpOwomIzQzOwlhc3NlcnQoc3Bvb2wtJmd0O3Jzdl9ocGFnZXMgPT0gMik7CiYjNDM7CiYjNDM7CS8qIEludm9rZSBHZXQgd2l0aCBkZWx0YSA9IDUgKENyb3NzZXMgbWluIGxpbWl0IG9mIDEwIHVwIHRvIDEzKSAqLwomIzQzOwlyZXQgPSBodWdlcGFnZV9zdWJwb29sX2dldF9wYWdlcyhzcG9vbCwgNSk7CiYjNDM7CWFzc2VydChyZXQgPT0gMyk7IC8qICg4ICYjNDM7IDUpIC0gMTAgPSAzIGdsb2JhbCBwYWdlcyByZXF1aXJlZCEgKi8KJiM0MzsJYXNzZXJ0KHNwb29sLSZndDt1c2VkX2hwYWdlcyA9PSAxMyk7CiYjNDM7CWFzc2VydChzcG9vbC0mZ3Q7cnN2X2hwYWdlcyA9PSAwKTsKJiM0MzsKJiM0MzsJLyogSW52b2tlIFB1dCB3aXRoIGRlbHRhID0gNSAoRHJvcHMgZnJvbSAxMyBkb3duIHRvIDgpICovCiYjNDM7CXJldCA9IGh1Z2VwYWdlX3N1YnBvb2xfcHV0X3BhZ2VzKHNwb29sLCA1KTsKJiM0MzsJYXNzZXJ0KHJldCA9PSAzKTsgLyogMyBzdXJwbHVzIHBhZ2VzIHJlbGVhc2VkIHRvIHRoZSBnbG9iYWwgcG9vbCEgKi8KJiM0MzsJYXNzZXJ0KHNwb29sLSZndDt1c2VkX2hwYWdlcyA9PSA4KTsKJiM0MzsJYXNzZXJ0KHNwb29sLSZndDtyc3ZfaHBhZ2VzID09IDIpOyAvKiAyIHN1YnBvb2wgcmVzZXJ2ZXMgcGVyZmVjdGx5IHJlc3RvcmVkISAqLwomIzQzOwomIzQzOwkvKiBTY2VuYXJpbyAyOiBMYW5kaW5nIGV4YWN0bHkgb24gdGhlIG1pbl9ocGFnZXMgYm91bmRhcnkgd2l0aCBkZWx0YSAmZ3Q7IDEgKi8KJiM0MzsJcmV0ID0gaHVnZXBhZ2Vfc3VicG9vbF9nZXRfcGFnZXMoc3Bvb2wsIDIpOwomIzQzOwlhc3NlcnQocmV0ID09IDApOyAvKiBQZXJmZWN0bHkgY292ZXJlZCBieSByZW1haW5pbmcgMiBzdWJwb29sIHJlc2VydmVzISAqLwomIzQzOwlhc3NlcnQoc3Bvb2wtJmd0O3VzZWRfaHBhZ2VzID09IDEwKTsKJiM0MzsJYXNzZXJ0KHNwb29sLSZndDtyc3ZfaHBhZ2VzID09IDApOwomIzQzOwomIzQzOwlyZXQgPSBodWdlcGFnZV9zdWJwb29sX3B1dF9wYWdlcyhzcG9vbCwgMik7CiYjNDM7CWFzc2VydChyZXQgPT0gMCk7IC8qIFN3YWxsb3dlZCBwZXJmZWN0bHkgdG8gcmVwbGVuaXNoIHRoZSAyIHN1YnBvb2wgcmVzZXJ2ZXMhICovCiYjNDM7CWFzc2VydChzcG9vbC0mZ3Q7dXNlZF9ocGFnZXMgPT0gOCk7CiYjNDM7CWFzc2VydChzcG9vbC0mZ3Q7cnN2X2hwYWdlcyA9PSAyKTsKJiM0MzsKJiM0MzsJLyogQ2xlYW51cCAqLwomIzQzOwlodWdlcGFnZV9zdWJwb29sX3B1dF9wYWdlcyhzcG9vbCwgOCk7CiYjNDM7CWh1Z2VwYWdlX3B1dF9zdWJwb29sKHNwb29sKTsKJiM0MzsJYXNzZXJ0X2h1Z2V0bGJfYWNjdF9tZW1vcnlfY2FsbGVkKCZhbXA7aCwgLTEwKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgdGVzdF9zdWJwb29sX2dldF9wYWdlc19tYXhfbGltaXQodm9pZCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBoc3RhdGUgaDsKJiM0MzsJc3RydWN0IGh1Z2VwYWdlX3N1YnBvb2wgKnNwb29sOwomIzQzOwlsb25nIHJldDsKJiM0MzsKJiM0MzsJc3Bvb2wgPSBodWdlcGFnZV9uZXdfc3VicG9vbCgmYW1wO2gsIDUsIC0xKTsKJiM0MzsJYXNzZXJ0X2h1Z2V0bGJfYWNjdF9tZW1vcnlfbm90X2NhbGxlZCgpOwomIzQzOwomIzQzOwlyZXQgPSBodWdlcGFnZV9zdWJwb29sX2dldF9wYWdlcyhzcG9vbCwgNSk7CiYjNDM7CWFzc2VydChyZXQgPT0gNSk7CiYjNDM7CWFzc2VydChzcG9vbC0mZ3Q7dXNlZF9ocGFnZXMgPT0gNSk7CiYjNDM7CWFzc2VydChzcG9vbC0mZ3Q7cnN2X2hwYWdlcyA9PSAtMSk7CiYjNDM7CiYjNDM7CS8qIEludm9rZSBHZXQgKFNob3VsZCB0cmlnZ2VyIC1FTk9NRU0gZHVlIHRvIG1heCBjYXAgbGltaXQgZXhjZWVkZWQhKSAqLwomIzQzOwlyZXQgPSBodWdlcGFnZV9zdWJwb29sX2dldF9wYWdlcyhzcG9vbCwgMSk7CiYjNDM7CWFzc2VydChyZXQgPT0gLUVOT01FTSk7CiYjNDM7CWFzc2VydChzcG9vbC0mZ3Q7dXNlZF9ocGFnZXMgPT0gNSk7IC8qIFVuY2hhbmdlZCAqLwomIzQzOwomIzQzOwkvKiBDbGVhbnVwICovCiYjNDM7CWh1Z2VwYWdlX3N1YnBvb2xfcHV0X3BhZ2VzKHNwb29sLCA1KTsKJiM0MzsJaHVnZXBhZ2VfcHV0X3N1YnBvb2woc3Bvb2wpOwomIzQzOwlhc3NlcnRfaHVnZXRsYl9hY2N0X21lbW9yeV9ub3RfY2FsbGVkKCk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIHRlc3Rfc3VicG9vbF9nZXRfcGFnZXNfbm9fbGltaXRzKHZvaWQpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgaHN0YXRlIGg7CiYjNDM7CXN0cnVjdCBodWdlcGFnZV9zdWJwb29sICpzcG9vbDsKJiM0MzsJbG9uZyByZXQ7CiYjNDM7CiYjNDM7CXNwb29sID0gaHVnZXBhZ2VfbmV3X3N1YnBvb2woJmFtcDtoLCAtMSwgLTEpOwomIzQzOwlhc3NlcnRfaHVnZXRsYl9hY2N0X21lbW9yeV9ub3RfY2FsbGVkKCk7CiYjNDM7CiYjNDM7CWh1Z2VwYWdlX3N1YnBvb2xfZ2V0X3BhZ2VzKHNwb29sLCA1KTsKJiM0MzsJYXNzZXJ0KHNwb29sLSZndDt1c2VkX2hwYWdlcyA9PSA1KTsKJiM0MzsKJiM0MzsJLyogSW52b2tlIEdldCAoU3VycGx1cyBHbG9iYWwgVGVycml0b3J5KSAqLwomIzQzOwlyZXQgPSBodWdlcGFnZV9zdWJwb29sX2dldF9wYWdlcyhzcG9vbCwgMik7CiYjNDM7CWFzc2VydChyZXQgPT0gMik7CiYjNDM7CWFzc2VydChzcG9vbC0mZ3Q7dXNlZF9ocGFnZXMgPT0gNyk7CiYjNDM7CiYjNDM7CS8qIEludm9rZSBQdXQgKi8KJiM0MzsJcmV0ID0gaHVnZXBhZ2Vfc3VicG9vbF9wdXRfcGFnZXMoc3Bvb2wsIDIpOwomIzQzOwlhc3NlcnQocmV0ID09IDIpOwomIzQzOwlhc3NlcnQoc3Bvb2wtJmd0O3VzZWRfaHBhZ2VzID09IDUpOwomIzQzOwomIzQzOwkvKiBDbGVhbnVwICovCiYjNDM7CWh1Z2VwYWdlX3N1YnBvb2xfcHV0X3BhZ2VzKHNwb29sLCA1KTsKJiM0MzsJaHVnZXBhZ2VfcHV0X3N1YnBvb2woc3Bvb2wpOwomIzQzOwlhc3NlcnRfaHVnZXRsYl9hY2N0X21lbW9yeV9ub3RfY2FsbGVkKCk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIHRlc3Rfc3VicG9vbF9mcmVlX2hwYWdlcyh2b2lkKQomIzQzO3sKJiM0MzsJc3RydWN0IGhzdGF0ZSBoOwomIzQzOwlzdHJ1Y3QgaHVnZXBhZ2Vfc3VicG9vbCAqc3Bvb2w7CiYjNDM7CiYjNDM7CS8qIFRlc3QgdGhhdCBmcmVlX2hwYWdlcyB3aXRoIE5PIG1pbl9zaXplIHdvcmtzIHBlcmZlY3RseSAqLwomIzQzOwlzcG9vbCA9IGh1Z2VwYWdlX25ld19zdWJwb29sKCZhbXA7aCwgMTUsIC0xKTsKJiM0MzsJaHVnZXBhZ2Vfc3VicG9vbF9nZXRfcGFnZXMoc3Bvb2wsIDMpOwomIzQzOwlhc3NlcnQoaHVnZXBhZ2Vfc3VicG9vbF9mcmVlX2hwYWdlcyhzcG9vbCkgPT0gMTIpOwomIzQzOwlodWdlcGFnZV9zdWJwb29sX3B1dF9wYWdlcyhzcG9vbCwgMyk7CiYjNDM7CWh1Z2VwYWdlX3B1dF9zdWJwb29sKHNwb29sKTsKJiM0MzsKJiM0MzsJLyogVGVzdCB0aGF0IGZyZWVfaHBhZ2VzIHdpdGggYSBtaW5fc2l6ZSBjb25maWd1cmVkIGlzIENPTVBMRVRFTFkgVU5BRkZFQ1RFRCBieSBpdCAqLwomIzQzOwlzcG9vbCA9IGh1Z2VwYWdlX25ld19zdWJwb29sKCZhbXA7aCwgMTUsIDUpOwomIzQzOwlhc3NlcnRfaHVnZXRsYl9hY2N0X21lbW9yeV9jYWxsZWQoJmFtcDtoLCA1KTsKJiM0MzsJaHVnZXBhZ2Vfc3VicG9vbF9nZXRfcGFnZXMoc3Bvb2wsIDMpOwomIzQzOwlhc3NlcnQoaHVnZXBhZ2Vfc3VicG9vbF9mcmVlX2hwYWdlcyhzcG9vbCkgPT0gMTIpOyAvKiBTaG91bGQgc3RpbGwgYmUgMTUgLSAzID0gMTIhICovCiYjNDM7CWh1Z2VwYWdlX3N1YnBvb2xfcHV0X3BhZ2VzKHNwb29sLCAzKTsKJiM0MzsJaHVnZXBhZ2VfcHV0X3N1YnBvb2woc3Bvb2wpOwomIzQzOwlhc3NlcnRfaHVnZXRsYl9hY2N0X21lbW9yeV9jYWxsZWQoJmFtcDtoLCAtNSk7CiYjNDM7CiYjNDM7CXNwb29sID0gaHVnZXBhZ2VfbmV3X3N1YnBvb2woJmFtcDtoLCAtMSwgLTEpOwomIzQzOwlodWdlcGFnZV9zdWJwb29sX2dldF9wYWdlcyhzcG9vbCwgMyk7CiYjNDM7CWFzc2VydChodWdlcGFnZV9zdWJwb29sX2ZyZWVfaHBhZ2VzKHNwb29sKSA9PSAtMSk7CiYjNDM7CWh1Z2VwYWdlX3N1YnBvb2xfcHV0X3BhZ2VzKHNwb29sLCAzKTsKJiM0MzsJaHVnZXBhZ2VfcHV0X3N1YnBvb2woc3Bvb2wpOwomIzQzOwomIzQzOwkvKiBUZXN0IHRoYXQgZnJlZV9ocGFnZXMgd2l0aCBhIG1pbl9zaXplIGNvbmZpZ3VyZWQgYW5kIE5PIG1heCBzaXplIHJldHVybnMgLTEgKi8KJiM0MzsJc3Bvb2wgPSBodWdlcGFnZV9uZXdfc3VicG9vbCgmYW1wO2gsIC0xLCA1KTsKJiM0MzsJYXNzZXJ0X2h1Z2V0bGJfYWNjdF9tZW1vcnlfY2FsbGVkKCZhbXA7aCwgNSk7CiYjNDM7CWh1Z2VwYWdlX3N1YnBvb2xfZ2V0X3BhZ2VzKHNwb29sLCAzKTsKJiM0MzsJYXNzZXJ0KGh1Z2VwYWdlX3N1YnBvb2xfZnJlZV9ocGFnZXMoc3Bvb2wpID09IC0xKTsKJiM0MzsJaHVnZXBhZ2Vfc3VicG9vbF9wdXRfcGFnZXMoc3Bvb2wsIDMpOwomIzQzOwlodWdlcGFnZV9wdXRfc3VicG9vbChzcG9vbCk7CiYjNDM7CWFzc2VydF9odWdldGxiX2FjY3RfbWVtb3J5X2NhbGxlZCgmYW1wO2gsIC01KTsKJiM0MzsKJiM0MzsJc3Bvb2wgPSBodWdlcGFnZV9uZXdfc3VicG9vbCgmYW1wO2gsIDMsIC0xKTsKJiM0MzsJaHVnZXBhZ2Vfc3VicG9vbF9nZXRfcGFnZXMoc3Bvb2wsIDMpOwomIzQzOwlhc3NlcnQoaHVnZXBhZ2Vfc3VicG9vbF9mcmVlX2hwYWdlcyhzcG9vbCkgPT0gMCk7CiYjNDM7CWh1Z2VwYWdlX3N1YnBvb2xfcHV0X3BhZ2VzKHNwb29sLCAzKTsKJiM0MzsJaHVnZXBhZ2VfcHV0X3N1YnBvb2woc3Bvb2wpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCB0ZXN0X3N1YnBvb2xfbWF4X2hwYWdlcyh2b2lkKQomIzQzO3sKJiM0MzsJc3RydWN0IGhzdGF0ZSBoOwomIzQzOwlzdHJ1Y3QgaHVnZXBhZ2Vfc3VicG9vbCAqc3Bvb2w7CiYjNDM7CiYjNDM7CXNwb29sID0gaHVnZXBhZ2VfbmV3X3N1YnBvb2woJmFtcDtoLCAxMjMsIC0xKTsKJiM0MzsJYXNzZXJ0KGh1Z2VwYWdlX3N1YnBvb2xfbWF4X2hwYWdlcyhzcG9vbCkgPT0gMTIzKTsKJiM0MzsJaHVnZXBhZ2VfcHV0X3N1YnBvb2woc3Bvb2wpOwomIzQzOwomIzQzOwkvKiBUZXN0IHRoYXQgbWF4X2hwYWdlcyB3aXRoIGEgbWluX3NpemUgY29uZmlndXJlZCBpcyBDT01QTEVURUxZIFVOQUZGRUNURUQgYnkgaXQgKi8KJiM0MzsJc3Bvb2wgPSBodWdlcGFnZV9uZXdfc3VicG9vbCgmYW1wO2gsIDEyMywgNSk7CiYjNDM7CWFzc2VydF9odWdldGxiX2FjY3RfbWVtb3J5X2NhbGxlZCgmYW1wO2gsIDUpOwomIzQzOwlhc3NlcnQoaHVnZXBhZ2Vfc3VicG9vbF9tYXhfaHBhZ2VzKHNwb29sKSA9PSAxMjMpOwomIzQzOwlodWdlcGFnZV9wdXRfc3VicG9vbChzcG9vbCk7CiYjNDM7CWFzc2VydF9odWdldGxiX2FjY3RfbWVtb3J5X2NhbGxlZCgmYW1wO2gsIC01KTsKJiM0MzsKJiM0MzsJc3Bvb2wgPSBodWdlcGFnZV9uZXdfc3VicG9vbCgmYW1wO2gsIC0xLCAtMSk7CiYjNDM7CWFzc2VydChodWdlcGFnZV9zdWJwb29sX21heF9ocGFnZXMoc3Bvb2wpID09IC0xKTsKJiM0MzsJaHVnZXBhZ2VfcHV0X3N1YnBvb2woc3Bvb2wpOwomIzQzOwomIzQzOwlzcG9vbCA9IGh1Z2VwYWdlX25ld19zdWJwb29sKCZhbXA7aCwgLTEsIDUpOwomIzQzOwlhc3NlcnRfaHVnZXRsYl9hY2N0X21lbW9yeV9jYWxsZWQoJmFtcDtoLCA1KTsKJiM0MzsJYXNzZXJ0KGh1Z2VwYWdlX3N1YnBvb2xfbWF4X2hwYWdlcyhzcG9vbCkgPT0gLTEpOwomIzQzOwlodWdlcGFnZV9wdXRfc3VicG9vbChzcG9vbCk7CiYjNDM7CWFzc2VydF9odWdldGxiX2FjY3RfbWVtb3J5X2NhbGxlZCgmYW1wO2gsIC01KTsKJiM0MzsKJiM0MzsJc3Bvb2wgPSBodWdlcGFnZV9uZXdfc3VicG9vbCgmYW1wO2gsIDAsIC0xKTsKJiM0MzsJYXNzZXJ0KGh1Z2VwYWdlX3N1YnBvb2xfbWF4X2hwYWdlcyhzcG9vbCkgPT0gMCk7CiYjNDM7CWh1Z2VwYWdlX3B1dF9zdWJwb29sKHNwb29sKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgdGVzdF9zdWJwb29sX21heF9zaXplKHZvaWQpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgaHN0YXRlIGg7CiYjNDM7CXN0cnVjdCBodWdlcGFnZV9zdWJwb29sICpzcG9vbDsKJiM0MzsKJiM0MzsJc3Bvb2wgPSBodWdlcGFnZV9uZXdfc3VicG9vbCgmYW1wO2gsIDEwLCAtMSk7CiYjNDM7CWFzc2VydChodWdlcGFnZV9zdWJwb29sX21heF9zaXplKHNwb29sKSA9PSAoMTBVTEwgJmx0OyZsdDsgMjEpKTsKJiM0MzsJaHVnZXBhZ2VfcHV0X3N1YnBvb2woc3Bvb2wpOwomIzQzOwomIzQzOwkvKiBUZXN0IHRoYXQgbWF4X3NpemUgd2l0aCBhIG1pbl9zaXplIGNvbmZpZ3VyZWQgaXMgQ09NUExFVEVMWSBVTkFGRkVDVEVEIGJ5IGl0ICovCiYjNDM7CXNwb29sID0gaHVnZXBhZ2VfbmV3X3N1YnBvb2woJmFtcDtoLCAxMCwgNSk7CiYjNDM7CWFzc2VydF9odWdldGxiX2FjY3RfbWVtb3J5X2NhbGxlZCgmYW1wO2gsIDUpOwomIzQzOwlhc3NlcnQoaHVnZXBhZ2Vfc3VicG9vbF9tYXhfc2l6ZShzcG9vbCkgPT0gKDEwVUxMICZsdDsmbHQ7IDIxKSk7CiYjNDM7CWh1Z2VwYWdlX3B1dF9zdWJwb29sKHNwb29sKTsKJiM0MzsJYXNzZXJ0X2h1Z2V0bGJfYWNjdF9tZW1vcnlfY2FsbGVkKCZhbXA7aCwgLTUpOwomIzQzOwomIzQzOwlzcG9vbCA9IGh1Z2VwYWdlX25ld19zdWJwb29sKCZhbXA7aCwgLTEsIC0xKTsKJiM0MzsJYXNzZXJ0KGh1Z2VwYWdlX3N1YnBvb2xfbWF4X3NpemUoc3Bvb2wpID09IC0xVUxMKTsKJiM0MzsJaHVnZXBhZ2VfcHV0X3N1YnBvb2woc3Bvb2wpOwomIzQzOwomIzQzOwlzcG9vbCA9IGh1Z2VwYWdlX25ld19zdWJwb29sKCZhbXA7aCwgMCwgLTEpOwomIzQzOwlhc3NlcnQoaHVnZXBhZ2Vfc3VicG9vbF9tYXhfc2l6ZShzcG9vbCkgPT0gMFVMTCk7CiYjNDM7CWh1Z2VwYWdlX3B1dF9zdWJwb29sKHNwb29sKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgdGVzdF9zdWJwb29sX21pbl9zaXplKHZvaWQpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgaHN0YXRlIGg7CiYjNDM7CXN0cnVjdCBodWdlcGFnZV9zdWJwb29sICpzcG9vbDsKJiM0MzsKJiM0MzsJc3Bvb2wgPSBodWdlcGFnZV9uZXdfc3VicG9vbCgmYW1wO2gsIC0xLCA1KTsKJiM0MzsJYXNzZXJ0X2h1Z2V0bGJfYWNjdF9tZW1vcnlfY2FsbGVkKCZhbXA7aCwgNSk7CiYjNDM7CWFzc2VydChodWdlcGFnZV9zdWJwb29sX21pbl9zaXplKHNwb29sKSA9PSAoNVVMTCAmbHQ7Jmx0OyAyMSkpOwomIzQzOwlodWdlcGFnZV9wdXRfc3VicG9vbChzcG9vbCk7CiYjNDM7CWFzc2VydF9odWdldGxiX2FjY3RfbWVtb3J5X2NhbGxlZCgmYW1wO2gsIC01KTsKJiM0MzsKJiM0MzsJLyogVGVzdCB0aGF0IG1pbl9zaXplIHdpdGggYSBtYXhfc2l6ZSBjb25maWd1cmVkIGlzIENPTVBMRVRFTFkgVU5BRkZFQ1RFRCBieSBpdCAqLwomIzQzOwlzcG9vbCA9IGh1Z2VwYWdlX25ld19zdWJwb29sKCZhbXA7aCwgMjAsIDUpOwomIzQzOwlhc3NlcnRfaHVnZXRsYl9hY2N0X21lbW9yeV9jYWxsZWQoJmFtcDtoLCA1KTsKJiM0MzsJYXNzZXJ0KGh1Z2VwYWdlX3N1YnBvb2xfbWluX3NpemUoc3Bvb2wpID09ICg1VUxMICZsdDsmbHQ7IDIxKSk7CiYjNDM7CWh1Z2VwYWdlX3B1dF9zdWJwb29sKHNwb29sKTsKJiM0MzsJYXNzZXJ0X2h1Z2V0bGJfYWNjdF9tZW1vcnlfY2FsbGVkKCZhbXA7aCwgLTUpOwomIzQzOwomIzQzOwlzcG9vbCA9IGh1Z2VwYWdlX25ld19zdWJwb29sKCZhbXA7aCwgLTEsIC0xKTsKJiM0MzsJYXNzZXJ0KGh1Z2VwYWdlX3N1YnBvb2xfbWluX3NpemUoc3Bvb2wpID09IC0xVUxMKTsKJiM0MzsJaHVnZXBhZ2VfcHV0X3N1YnBvb2woc3Bvb2wpOwomIzQzOwomIzQzOwlzcG9vbCA9IGh1Z2VwYWdlX25ld19zdWJwb29sKCZhbXA7aCwgLTEsIDApOwomIzQzOwlhc3NlcnRfaHVnZXRsYl9hY2N0X21lbW9yeV9jYWxsZWQoJmFtcDtoLCAwKTsKJiM0MzsJYXNzZXJ0KGh1Z2VwYWdlX3N1YnBvb2xfbWluX3NpemUoc3Bvb2wpID09IDBVTEwpOwomIzQzOwlodWdlcGFnZV9wdXRfc3VicG9vbChzcG9vbCk7CiYjNDM7CWFzc2VydF9odWdldGxiX2FjY3RfbWVtb3J5X2NhbGxlZCgmYW1wO2gsIDApOwomIzQzO30KJiM0MzsKJiM0MztpbnQgbWFpbih2b2lkKQomIzQzO3sKJiM0MzsJdGVzdF9zdWJwb29sX25ld19wdXRfbm9fbWluX2xpbWl0KCk7CiYjNDM7CXRlc3Rfc3VicG9vbF9uZXdfcHV0X3dpdGhfbWluX2xpbWl0KCk7CiYjNDM7CXRlc3Rfc3VicG9vbF9nZXRfcGFnZXNfYmVsb3dfbWluKCk7CiYjNDM7CXRlc3Rfc3VicG9vbF9nZXRfcGFnZXNfY3Jvc3NpbmdfbWluKCk7CiYjNDM7CXRlc3Rfc3VicG9vbF9nZXRfcGFnZXNfY3Jvc3NpbmdfbWluX211bHRpKCk7CiYjNDM7CXRlc3Rfc3VicG9vbF9nZXRfcGFnZXNfbWF4X2xpbWl0KCk7CiYjNDM7CXRlc3Rfc3VicG9vbF9nZXRfcGFnZXNfbm9fbGltaXRzKCk7CiYjNDM7CXRlc3Rfc3VicG9vbF9mcmVlX2hwYWdlcygpOwomIzQzOwl0ZXN0X3N1YnBvb2xfbWF4X2hwYWdlcygpOwomIzQzOwl0ZXN0X3N1YnBvb2xfbWF4X3NpemUoKTsKJiM0MzsJdGVzdF9zdWJwb29sX21pbl9zaXplKCk7CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjEgMTg6MDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjU5ODYKCQkJCQkJCW91dHB1dDogMjIKCQkJCQkJCXRob3VnaHRzOiA1MTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBIdWdldGxiZnMgYW5kIE1lbWNnIFBhdGNoIFNlcmllcyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBzZXJpZXMsIGFuZCBpdCYjMzk7cyBtYWtpbmcgc29tZSBwcmV0dHkgc2lnbmlmaWNhbnQgY2hhbmdlcyB0byB0aGUgY29yZSBtZW1vcnkgbWFuYWdlbWVudCwgc3BlY2lmaWNhbGx5IGluIHRoZSByZWFsbXMgb2YgaHVnZXRsYmZzIGFuZCBtZW1jZy4gTXkgaW5pdGlhbCBpbXByZXNzaW9uIGlzIHRoYXQgaXQmIzM5O3MgcmVmYWN0b3Jpbmcgc29tZSBleGlzdGluZyBsb2dpYyBhbmQgaW50cm9kdWNpbmcgbmV3IG1lbWNnIGludGVncmF0aW9uIGZvciBodWdlIHBhZ2VzLgoKU3BlY2lmaWNhbGx5LCBpdCBsb29rcyBsaWtlIGBodWdlcGFnZV9zdWJwb29sYCBsb2dpYyBpcyBiZWluZyBleHRyYWN0ZWQgaW50byBpdHMgb3duIGZpbGUsIGBtbS9odWdldGxiX3N1YnBvb2wuY2AuIFRoaXMgc3VnZ2VzdHMgYW4gZWZmb3J0IHRvIG1vZHVsYXJpemUgdGhlIGNvZGUsIHdoaWNoIGlzIGFsd2F5cyBhIGdvb2Qgc2lnbiBmb3IgbWFpbnRhaW5hYmlsaXR5LiBUaGUgY29yZSBvZiB0aGUgZnVuY3Rpb25hbCBjaGFuZ2Ugc2VlbXMgdG8gcmV2b2x2ZSBhcm91bmQgYGFsbG9jX2h1Z2V0bGJfZm9saW9gLiBUaGlzIGZ1bmN0aW9uIGlzIG5vdyB1c2luZyBgbWVtX2Nncm91cF9odWdldGxiX3RyeV9jaGFyZ2VgLCBgbWVtX2Nncm91cF9odWdldGxiX2NvbW1pdF9jaGFyZ2VgLCBhbmQgYG1lbV9jZ3JvdXBfaHVnZXRsYl9jYW5jZWxfY2hhcmdlYCB0byBtYW5hZ2UgbWVtY2cgYWNjb3VudGluZyBkdXJpbmcgZm9saW8gYWxsb2NhdGlvbi4gU21hcnQuIFRoaXMgaXMgdGhlIGludGVncmF0aW9uIEkgd2FzIGV4cGVjdGluZy4KCkRpdmluZyBkZWVwZXIsIEkgc2VlIHRoYXQgdGhlIGBodWdldGxiX3Jlc2VydmVfcGFnZXNgIGZ1bmN0aW9uIGluIGBtbS9odWdldGxiLmNgIGFsc28gaGFzIGJlZW4gbW9kaWZpZWQsIHBhcnRpY3VsYXJseSBpbiB0aGUgZXJyb3IgcGF0aCBgb3V0X3B1dF9wYWdlc2AuIEl0JiMzOTtzIHdvcnRoIGRpZ2dpbmcgaW50byB0aGUgZGV0YWlscyBvZiAqdGhhdCogY2hhbmdlIHRvIHNlZSBob3cgaXQmIzM5O3MgcGxheWluZyB3aXRoIHRoZSBuZXcgbWVtY2cgYWNjb3VudGluZy4KCk5vdywgbGV0JiMzOTtzIGxvb2sgYXQgdGhlIGBtbS9tZW1jb250cm9sLmNgIGZpbGUuIFRoZSBmdW5jdGlvbnMgbGlrZSBgbWVtX2Nncm91cF9odWdldGxiX3RyeV9jaGFyZ2VgLCBgbWVtX2Nncm91cF9odWdldGxiX2NvbW1pdF9jaGFyZ2VgLCBhbmQgYG1lbV9jZ3JvdXBfaHVnZXRsYl9jYW5jZWxfY2hhcmdlYCBhcmUgYWxsIG5ldywgYXMgZXhwZWN0ZWQuIFRoaXMgY29uZmlybXMgdGhlIGZ1bmN0aW9uYWwgYWRkaXRpb24gb2YgbWVtY2ctYXdhcmUgaHVnZXRsYiBhY2NvdW50aW5nLgoKVGhpcyBzZWVtcyBsaWtlIGEgc29saWQsIGZ1bmN0aW9uYWwgY2hhbmdlIHRvIHRoZSBjb3JlIGtlcm5lbCBsb2dpYy4gSXQgZGVmaW5pdGVseSB3YXJyYW50cyBmdXp6aW5nLgoKTXkgbGlzdCBvZiBmb2N1cyBzeW1ib2xzOgoKKiAgIGBhbGxvY19odWdldGxiX2ZvbGlvYAoqICAgYGh1Z2V0bGJfcmVzZXJ2ZV9wYWdlc2AKKiAgIGBtZW1fY2dyb3VwX2h1Z2V0bGJfdHJ5X2NoYXJnZWAKKiAgIGBtZW1fY2dyb3VwX2h1Z2V0bGJfY29tbWl0X2NoYXJnZWAKKiAgIGBtZW1fY2dyb3VwX2h1Z2V0bGJfY2FuY2VsX2NoYXJnZWAKKiAgIGBodWdlcGFnZV9zdWJwb29sX2dldF9wYWdlc2AKKiAgIGBodWdlcGFnZV9zdWJwb29sX3B1dF9wYWdlc2AKCkFuZCBvZiBjb3Vyc2UsIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhlIHJlbGV2YW50IGtlcm5lbCBjb25maWcgb3B0aW9ucyBhcmUgZW5hYmxlZCBmb3IgdGVzdGluZyB0aGlzLiBMZXQmIzM5O3Mgc2VlLi4uIEkmIzM5O2xsIG5lZWQgYEhVR0VUTEJGU2AsIG9idmlvdXNseS4gQWxzbywgYE1FTUNHYC4gSSB0aGluayBgQ0dST1VQX0hVR0VUTEJgIGlzIHJlbGV2YW50LiBMZXQgbWUgZG91YmxlLWNoZWNrIHRoYXQgbGFzdCBvbmUsIEkgZG9uJiMzOTt0IHF1aXRlIHJlbWVtYmVyIGlmIHRoYXQgaXMgdGhlIGNvcnJlY3QgY29uZmlnLiBMZXQmIzM5O3MgbG9vayBmb3IgYG1lbWNnX2FjY291bnRzX2h1Z2V0bGJgIG9yIGBDR1JPVVBfSFVHRVRMQmAgaW4gYG1tL21lbWNvbnRyb2wuY2Agb3IgYGluaXQvS2NvbmZpZ2AgdG8gYmUgc3VyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMSAxODowODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttZW1jZ19hY2NvdW50c19odWdldGxiJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL21lbWNvbnRyb2wuYz0xNjc0PXVuc2lnbmVkIGxvbmcgbWVtY2dfcGFnZV9zdGF0ZV9sb2NhbF9vdXRwdXQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBpbnQgaXRlbSlcbi0tXG5tbS9tZW1jb250cm9sLmMtMTY4MS0jaWZkZWYgQ09ORklHX0hVR0VUTEJfUEFHRVxubW0vbWVtY29udHJvbC5jOjE2ODI6c3RhdGljIGJvb2wgbWVtY2dfYWNjb3VudHNfaHVnZXRsYih2b2lkKVxubW0vbWVtY29udHJvbC5jLTE2ODMte1xuLS1cbm1tL21lbWNvbnRyb2wuYy0xNjg2LSNlbHNlIC8qIENPTkZJR19IVUdFVExCX1BBR0UgKi9cbm1tL21lbWNvbnRyb2wuYzoxNjg3OnN0YXRpYyBib29sIG1lbWNnX2FjY291bnRzX2h1Z2V0bGIodm9pZClcbm1tL21lbWNvbnRyb2wuYy0xNjg4LXtcbi0tXG5tbS9tZW1jb250cm9sLmM9MTY5Mz1zdGF0aWMgdm9pZCBtZW1jZ19zdGF0X2Zvcm1hdChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHN0cnVjdCBzZXFfYnVmICpzKVxuLS1cbm1tL21lbWNvbnRyb2wuYy0xNzEzLVx0XHRpZiAodW5saWtlbHkobWVtb3J5X3N0YXRzW2ldLmlkeCA9PSBOUl9IVUdFVExCKSBcdTAwMjZcdTAwMjZcbm1tL21lbWNvbnRyb2wuYzoxNzE0Olx0XHRcdCFtZW1jZ19hY2NvdW50c19odWdldGxiKCkpXG5tbS9tZW1jb250cm9sLmMtMTcxNS1cdFx0XHRjb250aW51ZTtcbi0tXG5tbS9tZW1jb250cm9sLmM9NTE2ND1pbnQgbWVtX2Nncm91cF9odWdldGxiX3RyeV9jaGFyZ2UodW5zaWduZWQgaW50IG5yX3BhZ2VzLCBnZnBfdCBnZnAsXG4tLVxubW0vbWVtY29udHJvbC5jLTUxNzQtXG5tbS9tZW1jb250cm9sLmM6NTE3NTpcdGlmIChtZW1fY2dyb3VwX2Rpc2FibGVkKCkgfHwgIW1lbWNnX2FjY291bnRzX2h1Z2V0bGIoKSB8fFxubW0vbWVtY29udHJvbC5jLTUxNzYtXHQgICAgIWNncm91cF9zdWJzeXNfb25fZGZsKG1lbW9yeV9jZ3JwX3N1YnN5cykpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjEgMTg6MDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjc1NzcKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiA2MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipJbnZlc3RpZ2F0aW5nIEh1Z2VUTEIgTWVtb3J5IEFjY291bnRpbmcgaW4gdGhlIEtlcm5lbCoqCgpPa2F5LCBzbyBgbWVtY2dfYWNjb3VudHNfaHVnZXRsYmAgaXMgb25seSBkZWZpbmVkIHdoZW4gYENPTkZJR19IVUdFVExCX1BBR0VgIGlzIGVuYWJsZWQuIFRoYXQgbWFrZXMgc2Vuc2UsIGJ1dCBpdCByYWlzZXMgYSBxdWVzdGlvbjogaG93IGRvZXMgdGhhdCBpbnRlcmFjdCB3aXRoIGBDT05GSUdfQ0dST1VQX0hVR0VUTEJgPyBJcyBgQ09ORklHX0NHUk9VUF9IVUdFVExCYCBhbHNvIGNoZWNrZWQgYW55d2hlcmU/IEkmIzM5O2QgYmV0dGVyIGNvbmZpcm0gd2hldGhlciBvciBub3QgYENPTkZJR19DR1JPVVBfSFVHRVRMQmAgaXMgZXZlbiBkZWZpbmVkLiBHb3R0YSBiZSBwcmVjaXNlIGFib3V0IHRoaXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjEgMTg6MDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Q0dST1VQX0hVR0VUTEImIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9hcm02NC9jb25maWdzL2RlZmNvbmZpZz0yMT1DT05GSUdfQ0dST1VQX0ZSRUVaRVI9eVxuYXJjaC9hcm02NC9jb25maWdzL2RlZmNvbmZpZzoyMjpDT05GSUdfQ0dST1VQX0hVR0VUTEI9eVxuYXJjaC9hcm02NC9jb25maWdzL2RlZmNvbmZpZy0yMy1DT05GSUdfQ1BVU0VUUz15XG4tLVxuYXJjaC9sb29uZ2FyY2gvY29uZmlncy9sb29uZ3NvbjY0X2RlZmNvbmZpZz0zMD1DT05GSUdfQ0dST1VQX0ZSRUVaRVI9eVxuYXJjaC9sb29uZ2FyY2gvY29uZmlncy9sb29uZ3NvbjY0X2RlZmNvbmZpZzozMTpDT05GSUdfQ0dST1VQX0hVR0VUTEI9eVxuYXJjaC9sb29uZ2FyY2gvY29uZmlncy9sb29uZ3NvbjY0X2RlZmNvbmZpZy0zMi1DT05GSUdfQ1BVU0VUUz15XG4tLVxuYXJjaC9wb3dlcnBjL2NvbmZpZ3MvcHBjNjRfZGVmY29uZmlnPTI3PUNPTkZJR19DR1JPVVBfRlJFRVpFUj15XG5hcmNoL3Bvd2VycGMvY29uZmlncy9wcGM2NF9kZWZjb25maWc6Mjg6Q09ORklHX0NHUk9VUF9IVUdFVExCPXlcbmFyY2gvcG93ZXJwYy9jb25maWdzL3BwYzY0X2RlZmNvbmZpZy0yOS1DT05GSUdfQ1BVU0VUUz15XG4tLVxuYXJjaC9yaXNjdi9jb25maWdzL2RlZmNvbmZpZz0xND1DT05GSUdfQ0dST1VQX0ZSRUVaRVI9eVxuYXJjaC9yaXNjdi9jb25maWdzL2RlZmNvbmZpZzoxNTpDT05GSUdfQ0dST1VQX0hVR0VUTEI9eVxuYXJjaC9yaXNjdi9jb25maWdzL2RlZmNvbmZpZy0xNi1DT05GSUdfQ1BVU0VUUz15XG4tLVxuYXJjaC9zMzkwL2NvbmZpZ3MvZGVidWdfZGVmY29uZmlnPTMwPUNPTkZJR19DR1JPVVBfRlJFRVpFUj15XG5hcmNoL3MzOTAvY29uZmlncy9kZWJ1Z19kZWZjb25maWc6MzE6Q09ORklHX0NHUk9VUF9IVUdFVExCPXlcbmFyY2gvczM5MC9jb25maWdzL2RlYnVnX2RlZmNvbmZpZy0zMi1DT05GSUdfQ1BVU0VUUz15XG4tLVxuYXJjaC9zMzkwL2NvbmZpZ3MvZGVmY29uZmlnPTI4PUNPTkZJR19DR1JPVVBfRlJFRVpFUj15XG5hcmNoL3MzOTAvY29uZmlncy9kZWZjb25maWc6Mjk6Q09ORklHX0NHUk9VUF9IVUdFVExCPXlcbmFyY2gvczM5MC9jb25maWdzL2RlZmNvbmZpZy0zMC1DT05GSUdfQ1BVU0VUUz15XG4tLVxuYXJjaC94ODYvY29uZmlncy9pMzg2X2RlZmNvbmZpZz0xOT1DT05GSUdfQ0dST1VQX0ZSRUVaRVI9eVxuYXJjaC94ODYvY29uZmlncy9pMzg2X2RlZmNvbmZpZzoyMDpDT05GSUdfQ0dST1VQX0hVR0VUTEI9eVxuYXJjaC94ODYvY29uZmlncy9pMzg2X2RlZmNvbmZpZy0yMS1DT05GSUdfQ1BVU0VUUz15XG4tLVxuYXJjaC94ODYvY29uZmlncy94ODZfNjRfZGVmY29uZmlnPTE5PUNPTkZJR19DR1JPVVBfRlJFRVpFUj15XG5hcmNoL3g4Ni9jb25maWdzL3g4Nl82NF9kZWZjb25maWc6MjA6Q09ORklHX0NHUk9VUF9IVUdFVExCPXlcbmFyY2gveDg2L2NvbmZpZ3MveDg2XzY0X2RlZmNvbmZpZy0yMS1DT05GSUdfQ1BVU0VUUz15XG4tLVxuaW5jbHVkZS9saW51eC9jZ3JvdXBfc3Vic3lzLmg9NDk9U1VCU1lTKG5ldF9wcmlvKVxuLS1cbmluY2x1ZGUvbGludXgvY2dyb3VwX3N1YnN5cy5oLTUxLVxuaW5jbHVkZS9saW51eC9jZ3JvdXBfc3Vic3lzLmg6NTI6I2lmIElTX0VOQUJMRUQoQ09ORklHX0NHUk9VUF9IVUdFVExCKVxuaW5jbHVkZS9saW51eC9jZ3JvdXBfc3Vic3lzLmgtNTMtU1VCU1lTKGh1Z2V0bGIpXG4tLVxuaW5jbHVkZS9saW51eC9odWdldGxiLmg9NDA9c3RydWN0IHJlc3ZfbWFwIHtcbi0tXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaC00Ny1cdHN0cnVjdCByd19zZW1hcGhvcmUgcndfc2VtYTtcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oOjQ4OiNpZmRlZiBDT05GSUdfQ0dST1VQX0hVR0VUTEJcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oLTQ5LVx0Lypcbi0tXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaD03OT1zdHJ1Y3QgZmlsZV9yZWdpb24ge1xuLS1cbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oLTgyLVx0bG9uZyB0bztcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oOjgzOiNpZmRlZiBDT05GSUdfQ0dST1VQX0hVR0VUTEJcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oLTg0LVx0Lypcbi0tXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGJfY2dyb3VwLmg9MjI9c3RydWN0IGZpbGVfcmVnaW9uO1xuaW5jbHVkZS9saW51eC9odWdldGxiX2Nncm91cC5oLTIzLVxuaW5jbHVkZS9saW51eC9odWdldGxiX2Nncm91cC5oOjI0OiNpZmRlZiBDT05GSUdfQ0dST1VQX0hVR0VUTEJcbmluY2x1ZGUvbGludXgvaHVnZXRsYl9jZ3JvdXAuaC0yNS1lbnVtIGh1Z2V0bGJfbWVtb3J5X2V2ZW50IHtcbi0tXG5pbml0L0tjb25maWc9MTI3MD1jb25maWcgQ0dST1VQX0ZSRUVaRVJcbi0tXG5pbml0L0tjb25maWctMTI4MC1cbmluaXQvS2NvbmZpZzoxMjgxOmNvbmZpZyBDR1JPVVBfSFVHRVRMQlxuaW5pdC9LY29uZmlnLTEyODItXHRib29sIFwmIzM0O0h1Z2VUTEIgY29udHJvbGxlclwmIzM0O1xuLS1cbm1tL01ha2VmaWxlPTEwOD1lbmRpZlxubW0vTWFrZWZpbGU6MTA5Om9iai0kKENPTkZJR19DR1JPVVBfSFVHRVRMQikgJiM0Mzs9IGh1Z2V0bGJfY2dyb3VwLm9cbm1tL01ha2VmaWxlLTExMC1vYmotJChDT05GSUdfR1VQX1RFU1QpICYjNDM7PSBndXBfdGVzdC5vXG4tLVxubW0vaHVnZXRsYi5jPTMyNT1zdGF0aWMgdm9pZCBjb3B5X2h1Z2V0bGJfY2dyb3VwX3VuY2hhcmdlX2luZm8oc3RydWN0IGZpbGVfcmVnaW9uICpucmcsXG4tLVxubW0vaHVnZXRsYi5jLTMyNy17XG5tbS9odWdldGxiLmM6MzI4OiNpZmRlZiBDT05GSUdfQ0dST1VQX0hVR0VUTEJcbm1tL2h1Z2V0bGIuYy0zMjktXHRucmctXHUwMDNlcmVzZXJ2YXRpb25fY291bnRlciA9IHJnLVx1MDAzZXJlc2VydmF0aW9uX2NvdW50ZXI7XG4tLVxubW0vaHVnZXRsYi5jPTMzNz1zdGF0aWMgdm9pZCByZWNvcmRfaHVnZXRsYl9jZ3JvdXBfdW5jaGFyZ2VfaW5mbyhzdHJ1Y3QgaHVnZXRsYl9jZ3JvdXAgKmhfY2csXG4tLVxubW0vaHVnZXRsYi5jLTM0MS17XG5tbS9odWdldGxiLmM6MzQyOiNpZmRlZiBDT05GSUdfQ0dST1VQX0hVR0VUTEJcbm1tL2h1Z2V0bGIuYy0zNDMtXHRpZiAoaF9jZykge1xuLS1cbm1tL2h1Z2V0bGIuYz0zNzE9c3RhdGljIHZvaWQgcHV0X3VuY2hhcmdlX2luZm8oc3RydWN0IGZpbGVfcmVnaW9uICpyZylcbm1tL2h1Z2V0bGIuYy0zNzIte1xubW0vaHVnZXRsYi5jOjM3MzojaWZkZWYgQ09ORklHX0NHUk9VUF9IVUdFVExCXG5tbS9odWdldGxiLmMtMzc0LVx0aWYgKHJnLVx1MDAzZWNzcylcbi0tXG5tbS9odWdldGxiLmM9Mzc5PXN0YXRpYyBib29sIGhhc19zYW1lX3VuY2hhcmdlX2luZm8oc3RydWN0IGZpbGVfcmVnaW9uICpyZyxcbi0tXG5tbS9odWdldGxiLmMtMzgxLXtcbm1tL2h1Z2V0bGIuYzozODI6I2lmZGVmIENPTkZJR19DR1JPVVBfSFVHRVRMQlxubW0vaHVnZXRsYi5jLTM4My1cdHJldHVybiByZy1cdTAwM2VyZXNlcnZhdGlvbl9jb3VudGVyID09IG9yZy1cdTAwM2VyZXNlcnZhdGlvbl9jb3VudGVyIFx1MDAyNlx1MDAyNlxuLS1cbm1tL2h1Z2V0bGIuYz05MDk9cmVzdl9tYXBfc2V0X2h1Z2V0bGJfY2dyb3VwX3VuY2hhcmdlX2luZm8oc3RydWN0IHJlc3ZfbWFwICpyZXN2X21hcCxcbi0tXG5tbS9odWdldGxiLmMtOTEyLXtcbm1tL2h1Z2V0bGIuYzo5MTM6I2lmZGVmIENPTkZJR19DR1JPVVBfSFVHRVRMQlxubW0vaHVnZXRsYi5jLTkxNC1cdGlmICghaF9jZyB8fCAhaCkge1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9jb25maWcuYWFyY2g2ND0yMT1DT05GSUdfQ0dST1VQX0ZSRUVaRVI9eVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2NvbmZpZy5hYXJjaDY0OjIyOkNPTkZJR19DR1JPVVBfSFVHRVRMQj15XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvY29uZmlnLmFhcmNoNjQtMjMtQ09ORklHX0NHUk9VUF9ORVRfQ0xBU1NJRD15XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2NvbmZpZy5wcGM2NGVsPTEyPUNPTkZJR19DR1JPVVBfRlJFRVpFUj15XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvY29uZmlnLnBwYzY0ZWw6MTM6Q09ORklHX0NHUk9VUF9IVUdFVExCPXlcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9jb25maWcucHBjNjRlbC0xNC1DT05GSUdfQ0dST1VQX05FVF9DTEFTU0lEPXlcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvY29uZmlnLnJpc2N2NjQ9MTI9Q09ORklHX0NHUk9VUF9GUkVFWkVSPXlcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9jb25maWcucmlzY3Y2NDoxMzpDT05GSUdfQ0dST1VQX0hVR0VUTEI9eVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2NvbmZpZy5yaXNjdjY0LTE0LUNPTkZJR19DR1JPVVBfTkVUX0NMQVNTSUQ9eVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9jb25maWcuczM5MHg9MTQ9Q09ORklHX0NHUk9VUF9GUkVFWkVSPXlcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9jb25maWcuczM5MHg6MTU6Q09ORklHX0NHUk9VUF9IVUdFVExCPXlcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9jb25maWcuczM5MHgtMTYtQ09ORklHX0NHUk9VUF9ORVRfQ0xBU1NJRD15XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2NvbmZpZy54ODZfNjQ9Mjc9Q09ORklHX0NHUk9VUF9GUkVFWkVSPXlcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9jb25maWcueDg2XzY0OjI4OkNPTkZJR19DR1JPVVBfSFVHRVRMQj15XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvY29uZmlnLng4Nl82NC0yOS1DT05GSUdfQ0dST1VQX1BFUkY9eVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2hpZC9jb25maWcuY29tbW9uPTIyPUNPTkZJR19DR1JPVVBfRlJFRVpFUj15XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9oaWQvY29uZmlnLmNvbW1vbjoyMzpDT05GSUdfQ0dST1VQX0hVR0VUTEI9eVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvaGlkL2NvbmZpZy5jb21tb24tMjQtQ09ORklHX0NHUk9VUF9ORVRfQ0xBU1NJRD15XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjEgMTg6MDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzAwNjIKCQkJCQkJCW91dHB1dDogMTcKCQkJCQkJCXRob3VnaHRzOiAzNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3Mgb24gdGhpczoKCioqSW52ZXN0aWdhdGluZyBNZW1vcnkgQ29udHJvbCBHcm91cHMqKgoKQWxyaWdodCwgc28gYENHUk9VUF9IVUdFVExCYCBpcyBkZWZpbml0ZWx5IGEgdGhpbmcuIE5vdywgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIHJlbGF0aW9uc2hpcCB3aXRoIGBNRU1DR2AuIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIGRlbHZlIGludG8gdGhlIGBpbml0L0tjb25maWdgIGZpbGUuIFRoYXQmIzM5O3MgdGhlIGdvLXRvIHBsYWNlIGZvciB1bmRlcnN0YW5kaW5nIGtlcm5lbCBjb25maWd1cmF0aW9uIG9wdGlvbnMsIHNvIEkmIzM5O2xsIHN0YXJ0IHRoZXJlIHRvIHNlZSBob3cgYE1FTUNHYCBpcyBkZWZpbmVkIGFuZCBpZiB0aGVyZSYjMzk7cyBhbnkgaW1tZWRpYXRlIGNvbm5lY3Rpb24gb3IgZGVwZW5kZW5jeSBsYWlkIG91dCB3aXRoaW4gdGhlIGNvbmZpZ3VyYXRpb24gZnJhbWV3b3JrLiBUaGlzIGlzIHRoZSBsb2dpY2FsIGZpcnN0IHN0ZXAgZm9yIG1lIHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIG1vZHVsZXMgcmVsYXRlIHRvIGVhY2ggb3RoZXIgaW4gdGhlIGtlcm5lbC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMSAxODowODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTUVNQ0cmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5pdC9LY29uZmlnPTEwNjM9Y29uZmlnIENHUk9VUF9GQVZPUl9EWU5NT0RTXG4tLVxuaW5pdC9LY29uZmlnLTEwNzItXG5pbml0L0tjb25maWc6MTA3Mzpjb25maWcgTUVNQ0dcbmluaXQvS2NvbmZpZy0xMDc0LVx0Ym9vbCBcJiMzNDtNZW1vcnkgY29udHJvbGxlclwmIzM0O1xuLS1cbmluaXQvS2NvbmZpZy0xMDgxLVxuaW5pdC9LY29uZmlnOjEwODI6Y29uZmlnIE1FTUNHX05NSV9VTlNBRkVcbmluaXQvS2NvbmZpZy0xMDgzLVx0Ym9vbFxuLS1cbmluaXQvS2NvbmZpZy0xMDg4LVxuaW5pdC9LY29uZmlnOjEwODk6Y29uZmlnIE1FTUNHX05NSV9TQUZFVFlfUkVRVUlSRVNfQVRPTUlDXG5pbml0L0tjb25maWctMTA5MC1cdGJvb2xcbi0tXG5pbml0L0tjb25maWctMTA5NS1cbmluaXQvS2NvbmZpZzoxMDk2OmNvbmZpZyBNRU1DR19WMVxuaW5pdC9LY29uZmlnLTEwOTctXHRib29sIFwmIzM0O0xlZ2FjeSBjZ3JvdXAgdjEgbWVtb3J5IGNvbnRyb2xsZXJcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMSAxODowODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMDQ3OQoJCQkJCQkJb3V0cHV0OiAyMAoJCQkJCQkJdGhvdWdodHM6IDgwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKktlcm5lbCBDb25maWd1cmF0aW9uIFF1YW5kYXJ5KioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGVzZSBrZXJuZWwgY29uZmlndXJhdGlvbnMsIGFuZCBpbW1lZGlhdGVseSBteSBicmFpbiBqdW1wcyB0byBgSFVHRVRMQkZTYCwgYE1FTUNHYCwgYW5kIGBDR1JPVVBfSFVHRVRMQmAuIFRob3NlIGFyZSB0aGUgdXN1YWwgc3VzcGVjdHMuIEJ1dCwgaG9sZCBvbiBhIHNlY29uZC4uLiBpc24mIzM5O3QgYEhVR0VUTEJfUEFHRWAgdGhlICpwcmltYXJ5KiBjb25maWcgZm9yIGVuYWJsaW5nIGh1Z2UgcGFnZXMgaW4gdGhlIGZpcnN0IHBsYWNlPyBJdCBmZWVscyBsaWtlIHRoYXQgc2hvdWxkIGJlIHRoZSBmb3VuZGF0aW9uLiBSaWdodCwgYEhVR0VUTEJGU2AgaXMgcmVsYXRlZCB0byB0aGUgZmlsZXN5c3RlbSBpbXBsZW1lbnRhdGlvbiwgbWFraW5nIHRoYXQgZGlzdGluY3Rpb24gaW4gbXkgbWluZCBub3cuCgpMZXQgbWUganVzdCBkb3VibGUtY2hlY2sgd2hlcmUgYEhVR0VUTEJfUEFHRWAgaXMgYWN0dWFsbHkgZGVmaW5lZC4gSSBzaG91bGQgbG9vayBpbiBlaXRoZXIgYGZzL0tjb25maWdgIG9yIGBtbS9LY29uZmlnYCwgaXQmIzM5O2xsIGxpa2VseSBiZSB0aGVyZS4gR290dGEgcmVmcmVzaCBteSBtZW1vcnkgYW5kIHBpbnBvaW50IHRoYXQgY29uZmlndXJhdGlvbiBkZXBlbmRlbmN5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMSAxODowODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgSFVHRVRMQl9QQUdFJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvc2gvbW0vS2NvbmZpZz0xNTg9Y2hvaWNlXG4tLVxuYXJjaC9zaC9tbS9LY29uZmlnLTE2My1cbmFyY2gvc2gvbW0vS2NvbmZpZzoxNjQ6Y29uZmlnIEhVR0VUTEJfUEFHRV9TSVpFXzY0S1xuYXJjaC9zaC9tbS9LY29uZmlnLTE2NS1cdGJvb2wgXCYjMzQ7NjRrQlwmIzM0O1xuLS1cbmFyY2gvc2gvbW0vS2NvbmZpZy0xNjctXG5hcmNoL3NoL21tL0tjb25maWc6MTY4OmNvbmZpZyBIVUdFVExCX1BBR0VfU0laRV8yNTZLXG5hcmNoL3NoL21tL0tjb25maWctMTY5LVx0Ym9vbCBcJiMzNDsyNTZrQlwmIzM0O1xuLS1cbmFyY2gvc2gvbW0vS2NvbmZpZy0xNzEtXG5hcmNoL3NoL21tL0tjb25maWc6MTcyOmNvbmZpZyBIVUdFVExCX1BBR0VfU0laRV8xTUJcbmFyY2gvc2gvbW0vS2NvbmZpZy0xNzMtXHRib29sIFwmIzM0OzFNQlwmIzM0O1xuYXJjaC9zaC9tbS9LY29uZmlnLTE3NC1cbmFyY2gvc2gvbW0vS2NvbmZpZzoxNzU6Y29uZmlnIEhVR0VUTEJfUEFHRV9TSVpFXzRNQlxuYXJjaC9zaC9tbS9LY29uZmlnLTE3Ni1cdGJvb2wgXCYjMzQ7NE1CXCYjMzQ7XG4tLVxuYXJjaC9zaC9tbS9LY29uZmlnLTE3OC1cbmFyY2gvc2gvbW0vS2NvbmZpZzoxNzk6Y29uZmlnIEhVR0VUTEJfUEFHRV9TSVpFXzY0TUJcbmFyY2gvc2gvbW0vS2NvbmZpZy0xODAtXHRib29sIFwmIzM0OzY0TUJcJiMzNDtcbi0tXG5mcy9LY29uZmlnPTI2Mj1pZiBIVUdFVExCRlNcbmZzL0tjb25maWc6MjYzOmNvbmZpZyBIVUdFVExCX1BBR0VfT1BUSU1JWkVfVk1FTU1BUF9ERUZBVUxUX09OXG5mcy9LY29uZmlnLTI2NC1cdGJvb2wgXCYjMzQ7SHVnZVRMQiBWbWVtbWFwIE9wdGltaXphdGlvbiAoSFZPKSBkZWZhdWx0cyB0byBvblwmIzM0O1xuLS1cbmZzL0tjb25maWc9MjcxPWVuZGlmICMgSFVHRVRMQkZTXG5mcy9LY29uZmlnLTI3Mi1cbmZzL0tjb25maWc6MjczOmNvbmZpZyBIVUdFVExCX1BBR0VcbmZzL0tjb25maWctMjc0LVx0ZGVmX2Jvb2wgSFVHRVRMQkZTXG4tLVxuZnMvS2NvbmZpZy0yNzYtXG5mcy9LY29uZmlnOjI3Nzpjb25maWcgSFVHRVRMQl9QQUdFX09QVElNSVpFX1ZNRU1NQVBcbmZzL0tjb25maWctMjc4LVx0ZGVmX2Jvb2wgSFVHRVRMQl9QQUdFXG4tLVxubW0vS2NvbmZpZz03MDY9Y29uZmlnIEFSQ0hfRU5BQkxFX1RIUF9NSUdSQVRJT05cbi0tXG5tbS9LY29uZmlnLTcwOC1cbm1tL0tjb25maWc6NzA5OmNvbmZpZyBIVUdFVExCX1BBR0VfU0laRV9WQVJJQUJMRVxubW0vS2NvbmZpZy03MTAtXHRkZWZfYm9vbCBuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIxIDE4OjA4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMxMzQ0CgkJCQkJCQlvdXRwdXQ6IDI1MAoJCQkJCQkJdGhvdWdodHM6IDYwNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgSHVnZXRsYiBTdWJwb29sIFJlZmFjdG9yaW5nIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHNlcmllcywgYW5kIGl0JiMzOTtzIGFsbCBhYm91dCByZWZhY3RvcmluZyB0aGUgaHVnZXRsYiBzdWJwb29sIGxvZ2ljLiBSaWdodCBvZmYgdGhlIGJhdCwgSSBzZWUgdGhhdCBgSFVHRVRMQl9QQUdFYCBpcyB0aWVkIHRvIGBIVUdFVExCRlNgLCBzbyB0aGF0JiMzOTtzIHRoZSBrZXkgdGhpbmcgdG8gZW5hYmxlLCBhbmQgSSBuZWVkIHRvIG1ha2Ugc3VyZSBgTUVNQ0dgIGlzIGFsc28gc2V0LiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoYXQgdGhlc2UgYXJlIGFsbCB3b3JraW5nIGluIGhhcm1vbnkgd2l0aCBhbnkgZXhpc3RpbmcgY29uZmlndXJhdGlvbnMuIEkgc2hvdWxkIHByb2JhYmx5IGRvdWJsZS1jaGVjayB0aGUgYG1lbWNnX2FjY291bnRzX2h1Z2V0bGJgIGNvbmZpZy4gSXQmIzM5O3MgZGVmaW5lZCBpZiBgQ09ORklHX0hVR0VUTEJfUEFHRWAgaXMgc2V0LCBhbmQgaXQmIzM5O3MgdXNlZCBpbiBgbWVtX2Nncm91cF9odWdldGxiX3RyeV9jaGFyZ2VgLiBHb3QgaXQuIFNvIHdlJiMzOTtyZSBsb29raW5nIGF0IGBIVUdFVExCRlNgIGFuZCBgTUVNQ0dgIGFzIHRoZSBlc3NlbnRpYWwgY29uZmlncyBoZXJlLCBhcyB3ZWxsIGFzIGBDR1JPVVBfSFVHRVRMQmAuCgpOb3csIGxldCBtZSB6ZXJvIGluIG9uIHRoZSBrZXkgZnVuY3Rpb25zIGJlaW5nIG1vZGlmaWVkLiBJIHNob3VsZCBnaXZlIHRoZXNlIGV4dHJhIGZvY3VzOgoKKiAgIGBhbGxvY19odWdldGxiX2ZvbGlvYAoqICAgYGh1Z2V0bGJfcmVzZXJ2ZV9wYWdlc2AKKiAgIGBtZW1fY2dyb3VwX2h1Z2V0bGJfdHJ5X2NoYXJnZWAKKiAgIGBtZW1fY2dyb3VwX2h1Z2V0bGJfY29tbWl0X2NoYXJnZWAKKiAgIGBtZW1fY2dyb3VwX2h1Z2V0bGJfY2FuY2VsX2NoYXJnZWAKKiAgIGBodWdlcGFnZV9zdWJwb29sX2dldF9wYWdlc2AKKiAgIGBodWdlcGFnZV9zdWJwb29sX3B1dF9wYWdlc2AKKiAgIGBodWdlcGFnZV9uZXdfc3VicG9vbGAKKiAgIGBodWdlcGFnZV9wdXRfc3VicG9vbGAKKiAgIGBodWdlcGFnZV9zdWJwb29sX2ZyZWVfaHBhZ2VzYAoqICAgYGh1Z2VwYWdlX3N1YnBvb2xfbWF4X2hwYWdlc2AKKiAgIGBodWdlcGFnZV9zdWJwb29sX21heF9zaXplYAoqICAgYGh1Z2VwYWdlX3N1YnBvb2xfbWluX3NpemVgCgpBbHJpZ2h0LCBsZXQmIzM5O3MgbWFrZSBzdXJlIEkmIzM5O20gdXNpbmcgdGhlIGV4YWN0IGZ1bmN0aW9uIG5hbWVzIGZyb20gdGhlIGRpZmYgd2hlbiBpdCBjb21lcyB0byBmb2N1cy4KClRoZSBjb3JlIG9mIHRoaXMgcGF0Y2ggc2VyaWVzIGlzIHJlZmFjdG9yaW5nIHRoZSBodWdldGxiIHN1YnBvb2wgbG9naWMgaW50byBpdHMgb3duIGZpbGUsIGBtbS9odWdldGxiX3N1YnBvb2wuY2AuIE1vcmUgaW1wb3J0YW50bHksIGl0IHNlZW1zIHRvIGJlIHVwZGF0aW5nIHRoZSBodWdldGxiIGFsbG9jYXRpb24gcGF0aCAoYGFsbG9jX2h1Z2V0bGJfZm9saW9gKSB0byBlbXBsb3kgYSB0cnkvY29tbWl0L2NhbmNlbCBjaGFyZ2luZyBzY2hlbWUgZm9yIG1lbW9yeSBjZ3JvdXBzIHVzaW5nIGZ1bmN0aW9ucyBsaWtlIGBtZW1fY2dyb3VwX2h1Z2V0bGJfdHJ5X2NoYXJnZWAsIGBtZW1fY2dyb3VwX2h1Z2V0bGJfY29tbWl0X2NoYXJnZWAsIGFuZCBgbWVtX2Nncm91cF9odWdldGxiX2NhbmNlbF9jaGFyZ2VgLiBQbHVzLCB0aGVyZSYjMzk7cyBhIGZpeCBmb3IgYW4gZXJyb3IgcGF0aCBpbiBgaHVnZXRsYl9yZXNlcnZlX3BhZ2VzYC4gVGhlc2UgYXJlIHNpZ25pZmljYW50IGNoYW5nZXMgdG8gY29yZSBtZW1vcnkgbWFuYWdlbWVudCBhbmQgY2dyb3VwIGZ1bmN0aW9uYWxpdHksIGFuZCBzaW5jZSB0aGV5IGNhbiBiZSB0cmlnZ2VyZWQgZnJvbSB1c2Vyc3BhY2UgdmlhIGh1Z2V0bGJmcyBhbmQgY2dyb3VwZnMsIHRoZXkmIzM5O3JlIHByaW1lIGNhbmRpZGF0ZXMgZm9yIGZ1enppbmcuIFRpbWUgdG8gc2V0LXJlc3VsdHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIxIDE4OjA4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtIVUdFVExCRlMmIzM0OywKICAgICYjMzQ7TUVNQ0cmIzM0OywKICAgICYjMzQ7Q0dST1VQX0hVR0VUTEImIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDthbGxvY19odWdldGxiX2ZvbGlvJiMzNDssCiAgICAmIzM0O2h1Z2V0bGJfcmVzZXJ2ZV9wYWdlcyYjMzQ7LAogICAgJiMzNDttZW1fY2dyb3VwX2h1Z2V0bGJfdHJ5X2NoYXJnZSYjMzQ7LAogICAgJiMzNDttZW1fY2dyb3VwX2h1Z2V0bGJfY29tbWl0X2NoYXJnZSYjMzQ7LAogICAgJiMzNDttZW1fY2dyb3VwX2h1Z2V0bGJfY2FuY2VsX2NoYXJnZSYjMzQ7LAogICAgJiMzNDtodWdlcGFnZV9zdWJwb29sX2dldF9wYWdlcyYjMzQ7LAogICAgJiMzNDtodWdlcGFnZV9zdWJwb29sX3B1dF9wYWdlcyYjMzQ7LAogICAgJiMzNDtodWdlcGFnZV9uZXdfc3VicG9vbCYjMzQ7LAogICAgJiMzNDtodWdlcGFnZV9wdXRfc3VicG9vbCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBzZXJpZXMgcmVmYWN0b3JzIHRoZSBodWdldGxiIHN1YnBvb2wgbG9naWMgaW50byBhIHNlcGFyYXRlIGZpbGUgYW5kIG1vZGlmaWVzIHRoZSBodWdldGxiIGFsbG9jYXRpb24gcGF0aCB0byB1c2UgYSBuZXcgdHJ5L2NvbW1pdC9jYW5jZWwgY2hhcmdpbmcgbW9kZWwgZm9yIG1lbW9yeSBjZ3JvdXBzLiBJdCBhbHNvIG1vZGlmaWVzIHRoZSBodWdldGxiX3Jlc2VydmVfcGFnZXMgZXJyb3IgcGF0aC4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBjZ3JvdXAgbG9naWMgdGhhdCBhcmUgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBodWdldGxiZnMgYW5kIGNncm91cGZzLCBtYWtpbmcgdGhlbSBoaWdobHkgcmVsZXZhbnQgZm9yIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0hVR0VUTEJGUyYjMzQ7LAogICAgJiMzNDtNRU1DRyYjMzQ7LAogICAgJiMzNDtDR1JPVVBfSFVHRVRMQiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2FsbG9jX2h1Z2V0bGJfZm9saW8mIzM0OywKICAgICYjMzQ7aHVnZXRsYl9yZXNlcnZlX3BhZ2VzJiMzNDssCiAgICAmIzM0O21lbV9jZ3JvdXBfaHVnZXRsYl90cnlfY2hhcmdlJiMzNDssCiAgICAmIzM0O21lbV9jZ3JvdXBfaHVnZXRsYl9jb21taXRfY2hhcmdlJiMzNDssCiAgICAmIzM0O21lbV9jZ3JvdXBfaHVnZXRsYl9jYW5jZWxfY2hhcmdlJiMzNDssCiAgICAmIzM0O2h1Z2VwYWdlX3N1YnBvb2xfZ2V0X3BhZ2VzJiMzNDssCiAgICAmIzM0O2h1Z2VwYWdlX3N1YnBvb2xfcHV0X3BhZ2VzJiMzNDssCiAgICAmIzM0O2h1Z2VwYWdlX25ld19zdWJwb29sJiMzNDssCiAgICAmIzM0O2h1Z2VwYWdlX3B1dF9zdWJwb29sJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHNlcmllcyByZWZhY3RvcnMgdGhlIGh1Z2V0bGIgc3VicG9vbCBsb2dpYyBpbnRvIGEgc2VwYXJhdGUgZmlsZSBhbmQgbW9kaWZpZXMgdGhlIGh1Z2V0bGIgYWxsb2NhdGlvbiBwYXRoIHRvIHVzZSBhIG5ldyB0cnkvY29tbWl0L2NhbmNlbCBjaGFyZ2luZyBtb2RlbCBmb3IgbWVtb3J5IGNncm91cHMuIEl0IGFsc28gbW9kaWZpZXMgdGhlIGh1Z2V0bGJfcmVzZXJ2ZV9wYWdlcyBlcnJvciBwYXRoLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIGNncm91cCBsb2dpYyB0aGF0IGFyZSByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIGh1Z2V0bGJmcyBhbmQgY2dyb3VwZnMsIG1ha2luZyB0aGVtIGhpZ2hseSByZWxldmFudCBmb3IgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIxVDE4OjA4OjE3LjIzNzU3NDg4MloiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM2Mzc4OTg0NTYyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkhVR0VUTEJGU1wiLFxuICAgIFwiTUVNQ0dcIixcbiAgICBcIkNHUk9VUF9IVUdFVExCXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYWxsb2NfaHVnZXRsYl9mb2xpb1wiLFxuICAgIFwiaHVnZXRsYl9yZXNlcnZlX3BhZ2VzXCIsXG4gICAgXCJtZW1fY2dyb3VwX2h1Z2V0bGJfdHJ5X2NoYXJnZVwiLFxuICAgIFwibWVtX2Nncm91cF9odWdldGxiX2NvbW1pdF9jaGFyZ2VcIixcbiAgICBcIm1lbV9jZ3JvdXBfaHVnZXRsYl9jYW5jZWxfY2hhcmdlXCIsXG4gICAgXCJodWdlcGFnZV9zdWJwb29sX2dldF9wYWdlc1wiLFxuICAgIFwiaHVnZXBhZ2Vfc3VicG9vbF9wdXRfcGFnZXNcIixcbiAgICBcImh1Z2VwYWdlX25ld19zdWJwb29sXCIsXG4gICAgXCJodWdlcGFnZV9wdXRfc3VicG9vbFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHNlcmllcyByZWZhY3RvcnMgdGhlIGh1Z2V0bGIgc3VicG9vbCBsb2dpYyBpbnRvIGEgc2VwYXJhdGUgZmlsZSBhbmQgbW9kaWZpZXMgdGhlIGh1Z2V0bGIgYWxsb2NhdGlvbiBwYXRoIHRvIHVzZSBhIG5ldyB0cnkvY29tbWl0L2NhbmNlbCBjaGFyZ2luZyBtb2RlbCBmb3IgbWVtb3J5IGNncm91cHMuIEl0IGFsc28gbW9kaWZpZXMgdGhlIGh1Z2V0bGJfcmVzZXJ2ZV9wYWdlcyBlcnJvciBwYXRoLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIGNncm91cCBsb2dpYyB0aGF0IGFyZSByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIGh1Z2V0bGJmcyBhbmQgY2dyb3VwZnMsIG1ha2luZyB0aGVtIGhpZ2hseSByZWxldmFudCBmb3IgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjFUMTg6MDg6MTcuMjM3NTgzMzMyWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MTM3MzgwMzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA3MDA4NTJjZDlhMDIzYTUxMDVlMjM0MWQyNDdiODY0MDAyY2NjNmZjXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUdWUgSnVsIDIxIDE4OjA4OjE1IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2Nncm91cF92Ml9hbGxvY2F0aW9uX2ZhaWx1cmUuYyBiL2Nncm91cF92Ml9hbGxvY2F0aW9uX2ZhaWx1cmUuY1xcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLjkzOGNiZjAyYWU2ZjdhXFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL2Nncm91cF92Ml9hbGxvY2F0aW9uX2ZhaWx1cmUuY1xcbkBAIC0wLDAgKzEsMTYwIEBAXFxuKyNkZWZpbmUgX0dOVV9TT1VSQ0VcXG4rI2luY2x1ZGUgXFx1MDAzY3N0ZGlvLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NzdGRsaWIuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY3VuaXN0ZC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjZmNudGwuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY3N5cy9tbWFuLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NzeXMvc3RhdC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjc3lzL3R5cGVzLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NzeXMvd2FpdC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjc3RyaW5nLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NlcnJuby5oXFx1MDAzZVxcbitcXG4rI2RlZmluZSBDR1JPVVBfUEFUSCBcXFwiL3N5cy9mcy9jZ3JvdXBcXFwiXFxuKyNkZWZpbmUgVEVTVF9DR1JPVVAgXFxcInRlc3RfcmVwcm9kdWNlclxcXCJcXG4rI2RlZmluZSBURVNUX0NHUk9VUF9QQVRIIENHUk9VUF9QQVRIIFxcXCIvXFxcIiBURVNUX0NHUk9VUFxcbitcXG4rdm9pZCB3cml0ZV9maWxlKGNvbnN0IGNoYXIgKnBhdGgsIGNvbnN0IGNoYXIgKnZhbCkge1xcbisgICAgaW50IGZkID0gb3BlbihwYXRoLCBPX1dST05MWSk7XFxuKyAgICBpZiAoZmQgXFx1MDAzYyAwKSB7XFxuKyAgICAgICAgZnByaW50ZihzdGRlcnIsIFxcXCJGYWlsZWQgdG8gb3BlbiAlczogJXNcXFxcblxcXCIsIHBhdGgsIHN0cmVycm9yKGVycm5vKSk7XFxuKyAgICAgICAgZXhpdCgxKTtcXG4rICAgIH1cXG4rICAgIGlmICh3cml0ZShmZCwgdmFsLCBzdHJsZW4odmFsKSkgXFx1MDAzYyAwKSB7XFxuKyAgICAgICAgZnByaW50ZihzdGRlcnIsIFxcXCJGYWlsZWQgdG8gd3JpdGUgJXMgdG8gJXM6ICVzXFxcXG5cXFwiLCB2YWwsIHBhdGgsIHN0cmVycm9yKGVycm5vKSk7XFxuKyAgICAgICAgY2xvc2UoZmQpO1xcbisgICAgICAgIGV4aXQoMSk7XFxuKyAgICB9XFxuKyAgICBjbG9zZShmZCk7XFxuK31cXG4rXFxuK2ludCBpc19odWdldGxiX2FjY291bnRpbmdfZW5hYmxlZCgpIHtcXG4rICAgIEZJTEUgKmZwID0gZm9wZW4oXFxcIi9wcm9jL21vdW50c1xcXCIsIFxcXCJyXFxcIik7XFxuKyAgICBpZiAoIWZwKSB7XFxuKyAgICAgICAgcGVycm9yKFxcXCJmb3BlbiAvcHJvYy9tb3VudHNcXFwiKTtcXG4rICAgICAgICByZXR1cm4gLTE7XFxuKyAgICB9XFxuK1xcbisgICAgY2hhciBsaW5lWzEwMjRdO1xcbisgICAgaW50IGVuYWJsZWQgPSAwO1xcbisgICAgd2hpbGUgKGZnZXRzKGxpbmUsIHNpemVvZihsaW5lKSwgZnApKSB7XFxuKyAgICAgICAgY2hhciBzcGVjWzI1Nl0sIGZpbGVbMjU2XSwgdHlwZVsyNTZdLCBvcHRzWzUxMl07XFxuKyAgICAgICAgaWYgKHNzY2FuZihsaW5lLCBcXFwiJTI1NXMgJTI1NXMgJTI1NXMgJTUxMXNcXFwiLCBzcGVjLCBmaWxlLCB0eXBlLCBvcHRzKSA9PSA0KSB7XFxuKyAgICAgICAgICAgIGlmIChzdHJjbXAoZmlsZSwgQ0dST1VQX1BBVEgpID09IDAgXFx1MDAyNlxcdTAwMjYgc3RyY21wKHR5cGUsIFxcXCJjZ3JvdXAyXFxcIikgPT0gMCkge1xcbisgICAgICAgICAgICAgICAgaWYgKHN0cnN0cihvcHRzLCBcXFwibWVtb3J5X2h1Z2V0bGJfYWNjb3VudGluZ1xcXCIpICE9IE5VTEwpIHtcXG4rICAgICAgICAgICAgICAgICAgICBlbmFibGVkID0gMTtcXG4rICAgICAgICAgICAgICAgIH1cXG4rICAgICAgICAgICAgICAgIGJyZWFrO1xcbisgICAgICAgICAgICB9XFxuKyAgICAgICAgfVxcbisgICAgfVxcbisgICAgZmNsb3NlKGZwKTtcXG4rICAgIHJldHVybiBlbmFibGVkO1xcbit9XFxuK1xcbitpbnQgZW5hYmxlX2h1Z2V0bGJfYWNjb3VudGluZygpIHtcXG4rICAgIHByaW50ZihcXFwiQXR0ZW1wdGluZyB0byByZW1vdW50IGNncm91cDIgd2l0aCBtZW1vcnlfaHVnZXRsYl9hY2NvdW50aW5nLi4uXFxcXG5cXFwiKTtcXG4rICAgIGludCByZXQgPSBzeXN0ZW0oXFxcIm1vdW50IC1vIHJlbW91bnQsbWVtb3J5X2h1Z2V0bGJfYWNjb3VudGluZyBcXFwiIENHUk9VUF9QQVRIKTtcXG4rICAgIGlmIChyZXQgIT0gMCkge1xcbisgICAgICAgIGZwcmludGYoc3RkZXJyLCBcXFwiRmFpbGVkIHRvIHJlbW91bnQ6IHN5c3RlbSgpIHJldHVybmVkICVkXFxcXG5cXFwiLCByZXQpO1xcbisgICAgICAgIHJldHVybiAtMTtcXG4rICAgIH1cXG4rICAgIHJldHVybiAwO1xcbit9XFxuK1xcbitpbnQgbWFpbigpIHtcXG4rICAgIHN0cnVjdCBzdGF0IHN0O1xcbisgICAgaWYgKHN0YXQoQ0dST1VQX1BBVEgsIFxcdTAwMjZzdCkgIT0gMCB8fCAhU19JU0RJUihzdC5zdF9tb2RlKSkge1xcbisgICAgICAgIGZwcmludGYoc3RkZXJyLCBcXFwiY2dyb3VwIHYyIG5vdCBtb3VudGVkIGF0ICVzXFxcXG5cXFwiLCBDR1JPVVBfUEFUSCk7XFxuKyAgICAgICAgcmV0dXJuIDE7XFxuKyAgICB9XFxuK1xcbisgICAgaW50IGVuYWJsZWQgPSBpc19odWdldGxiX2FjY291bnRpbmdfZW5hYmxlZCgpO1xcbisgICAgaWYgKGVuYWJsZWQgXFx1MDAzYyAwKSB7XFxuKyAgICAgICAgcmV0dXJuIDE7XFxuKyAgICB9XFxuKyAgICBpZiAoIWVuYWJsZWQpIHtcXG4rICAgICAgICBpZiAoZW5hYmxlX2h1Z2V0bGJfYWNjb3VudGluZygpICE9IDApIHtcXG4rICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsIFxcXCJDb3VsZCBub3QgZW5hYmxlIG1lbW9yeV9odWdldGxiX2FjY291bnRpbmdcXFxcblxcXCIpO1xcbisgICAgICAgICAgICByZXR1cm4gMTtcXG4rICAgICAgICB9XFxuKyAgICAgICAgLy8gUmUtY2hlY2tcXG4rICAgICAgICBlbmFibGVkID0gaXNfaHVnZXRsYl9hY2NvdW50aW5nX2VuYWJsZWQoKTtcXG4rICAgICAgICBpZiAoZW5hYmxlZCBcXHUwMDNjPSAwKSB7XFxuKyAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCBcXFwiRmFpbGVkIHRvIGVuYWJsZSBtZW1vcnlfaHVnZXRsYl9hY2NvdW50aW5nIChyZS1jaGVjayBmYWlsZWQpXFxcXG5cXFwiKTtcXG4rICAgICAgICAgICAgcmV0dXJuIDE7XFxuKyAgICAgICAgfVxcbisgICAgICAgIHByaW50ZihcXFwiU3VjY2Vzc2Z1bGx5IGVuYWJsZWQgbWVtb3J5X2h1Z2V0bGJfYWNjb3VudGluZ1xcXFxuXFxcIik7XFxuKyAgICB9IGVsc2Uge1xcbisgICAgICAgIHByaW50ZihcXFwibWVtb3J5X2h1Z2V0bGJfYWNjb3VudGluZyBpcyBhbHJlYWR5IGVuYWJsZWRcXFxcblxcXCIpO1xcbisgICAgfVxcbitcXG4rICAgIC8vIEVuYWJsZSBtZW1vcnkgY29udHJvbGxlciBpbiBzdWJ0cmVlXFxuKyAgICBpbnQgZmQgPSBvcGVuKENHUk9VUF9QQVRIIFxcXCIvY2dyb3VwLnN1YnRyZWVfY29udHJvbFxcXCIsIE9fV1JPTkxZKTtcXG4rICAgIGlmIChmZCBcXHUwMDNlPSAwKSB7XFxuKyAgICAgICAgaWYgKHdyaXRlKGZkLCBcXFwiK21lbW9yeVxcXCIsIDcpIFxcdTAwM2MgMCkge1xcbisgICAgICAgICAgICAvLyBNaWdodCBmYWlsIGlmIGFscmVhZHkgZW5hYmxlZCBvciBub3Qgc3VwcG9ydGVkLCBpZ25vcmUgZm9yIG5vd1xcbisgICAgICAgIH1cXG4rICAgICAgICBjbG9zZShmZCk7XFxuKyAgICB9XFxuK1xcbisgICAgaWYgKG1rZGlyKFRFU1RfQ0dST1VQX1BBVEgsIDA3NTUpICE9IDApIHtcXG4rICAgICAgICBpZiAoZXJybm8gIT0gRUVYSVNUKSB7XFxuKyAgICAgICAgICAgIHBlcnJvcihcXFwibWtkaXIgdGVzdF9yZXByb2R1Y2VyXFxcIik7XFxuKyAgICAgICAgICAgIHJldHVybiAxO1xcbisgICAgICAgIH1cXG4rICAgIH1cXG4rXFxuKyAgICAvLyBTZXQgbWVtb3J5IGxpbWl0IHRvIDFNQiAobGVzcyB0aGFuIDJNQiBodWdlcGFnZSlcXG4rICAgIHdyaXRlX2ZpbGUoVEVTVF9DR1JPVVBfUEFUSCBcXFwiL21lbW9yeS5tYXhcXFwiLCBcXFwiMU1cXFwiKTtcXG4rXFxuKyAgICBwaWRfdCBwaWQgPSBmb3JrKCk7XFxuKyAgICBpZiAocGlkIFxcdTAwM2MgMCkge1xcbisgICAgICAgIHBlcnJvcihcXFwiZm9ya1xcXCIpO1xcbisgICAgICAgIHJldHVybiAxO1xcbisgICAgfVxcbitcXG4rICAgIGlmIChwaWQgPT0gMCkge1xcbisgICAgICAgIC8vIENoaWxkXFxuKyAgICAgICAgLy8gTW92ZSB0byBjZ3JvdXBcXG4rICAgICAgICB3cml0ZV9maWxlKFRFU1RfQ0dST1VQX1BBVEggXFxcIi9jZ3JvdXAucHJvY3NcXFwiLCBcXFwiMFxcXCIpO1xcbitcXG4rICAgICAgICBwcmludGYoXFxcIkNoaWxkOiBBdHRlbXB0aW5nIHRvIGFsbG9jYXRlIGFuZCB0b3VjaCAyTUIgaHVnZXBhZ2UuLi5cXFxcblxcXCIpO1xcbisgICAgICAgIC8vIEFsbG9jYXRlIDJNQiBodWdlcGFnZVxcbisgICAgICAgIHNpemVfdCBzaXplID0gMiAqIDEwMjQgKiAxMDI0O1xcbisgICAgICAgIHZvaWQgKmFkZHIgPSBtbWFwKE5VTEwsIHNpemUsIFBST1RfUkVBRCB8IFBST1RfV1JJVEUsXFxuKyAgICAgICAgICAgICAgICAgICAgICAgICAgTUFQX1BSSVZBVEUgfCBNQVBfQU5PTllNT1VTIHwgTUFQX0hVR0VUTEIsIC0xLCAwKTtcXG4rICAgICAgICBpZiAoYWRkciA9PSBNQVBfRkFJTEVEKSB7XFxuKyAgICAgICAgICAgIHBlcnJvcihcXFwiQ2hpbGQ6IG1tYXAgTUFQX0hVR0VUTEJcXFwiKTtcXG4rICAgICAgICAgICAgZXhpdCgxKTtcXG4rICAgICAgICB9XFxuK1xcbisgICAgICAgIHByaW50ZihcXFwiQ2hpbGQ6IG1tYXAgc3VjY2VlZGVkIGF0ICVwLCB0b3VjaGluZyBpdCBub3cgKHNob3VsZCB0cmlnZ2VyIGZhdWx0KS4uLlxcXFxuXFxcIiwgYWRkcik7XFxuKyAgICAgICAgLy8gVGhpcyBzaG91bGQgdHJpZ2dlciB0aGUgZmF1bHQgYW5kIGNhbGwgYWxsb2NfaHVnZXRsYl9mb2xpbyAtXFx1MDAzZSBtZW1fY2dyb3VwX2NoYXJnZV9odWdldGxiXFxuKyAgICAgICAgLy8gd2hpY2ggc2hvdWxkIGZhaWwgYW5kIHRyaWdnZXIgdGhlIGJ1Zy5cXG4rICAgICAgICAqKHZvbGF0aWxlIGNoYXIgKilhZGRyID0gMTtcXG4rXFxuKyAgICAgICAgcHJpbnRmKFxcXCJDaGlsZDogU3VjY2Vzc2Z1bGx5IHRvdWNoZWQgcGFnZSAoYnVnIG5vdCB0cmlnZ2VyZWQ/KS5cXFxcblxcXCIpO1xcbisgICAgICAgIG11bm1hcChhZGRyLCBzaXplKTtcXG4rICAgICAgICBleGl0KDApO1xcbisgICAgfVxcbitcXG4rICAgIC8vIFBhcmVudFxcbisgICAgaW50IHN0YXR1cztcXG4rICAgIHdhaXRwaWQocGlkLCBcXHUwMDI2c3RhdHVzLCAwKTtcXG4rXFxuKyAgICBwcmludGYoXFxcIlBhcmVudDogQ2hpbGQgZXhpdGVkLiBDbGVhbmluZyB1cC5cXFxcblxcXCIpO1xcbisgICAgcm1kaXIoVEVTVF9DR1JPVVBfUEFUSCk7XFxuK1xcbisgICAgaWYgKFdJRlNJR05BTEVEKHN0YXR1cykpIHtcXG4rICAgICAgICBwcmludGYoXFxcIlBhcmVudDogQ2hpbGQga2lsbGVkIGJ5IHNpZ25hbCAlZCAoJXMpXFxcXG5cXFwiLFxcbisgICAgICAgICAgICAgICBXVEVSTVNJRyhzdGF0dXMpLCBzdHJzaWduYWwoV1RFUk1TSUcoc3RhdHVzKSkpO1xcbisgICAgICAgIGlmIChXVEVSTVNJRyhzdGF0dXMpID09IFNJR0JVUykge1xcbisgICAgICAgICAgICBwcmludGYoXFxcIlBhcmVudDogQ2hpbGQgZ290IFNJR0JVUyBhcyBleHBlY3RlZCAoaWYga2VybmVsIGRpZG4ndCBjcmFzaCkuXFxcXG5cXFwiKTtcXG4rICAgICAgICB9XFxuKyAgICB9IGVsc2UgaWYgKFdJRkVYSVRFRChzdGF0dXMpKSB7XFxuKyAgICAgICAgcHJpbnRmKFxcXCJQYXJlbnQ6IENoaWxkIGV4aXRlZCB3aXRoIHN0YXR1cyAlZFxcXFxuXFxcIiwgV0VYSVRTVEFUVVMoc3RhdHVzKSk7XFxuKyAgICB9XFxuK1xcbisgICAgcmV0dXJuIDA7XFxuK31cXG5kaWZmIC0tZ2l0IGEvZnMvaHVnZXRsYmZzL2lub2RlLmMgYi9mcy9odWdldGxiZnMvaW5vZGUuY1xcbmluZGV4IDIxNmUxYTBkZDBiMjM3Li44YWJlMDU3NGIxYzdlYSAxMDA2NDRcXG4tLS0gYS9mcy9odWdldGxiZnMvaW5vZGUuY1xcbisrKyBiL2ZzL2h1Z2V0bGJmcy9pbm9kZS5jXFxuQEAgLTI1LDYgKzI1LDcgQEBcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2N0eXBlLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9iYWNraW5nLWRldi5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvaHVnZXRsYi5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXFwiLi4vLi4vbW0vaHVnZXRsYl9zdWJwb29sLmhcXFwiXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9mb2xpb19iYXRjaC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvZnNfcGFyc2VyLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9tbWFuLmhcXHUwMDNlXFxuQEAgLTEwNTksNyArMTA2MCw2IEBAIHN0YXRpYyBpbnQgaHVnZXRsYmZzX3Nob3dfb3B0aW9ucyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHN0cnVjdCBkZW50cnkgKnJvb3QpXFxuIFxcdHN0cnVjdCBodWdldGxiZnNfc2JfaW5mbyAqc2JpbmZvID0gSFVHRVRMQkZTX1NCKHJvb3QtXFx1MDAzZWRfc2IpO1xcbiBcXHRzdHJ1Y3QgaHVnZXBhZ2Vfc3VicG9vbCAqc3Bvb2wgPSBzYmluZm8tXFx1MDAzZXNwb29sO1xcbiBcXHR1bnNpZ25lZCBsb25nIGhwYWdlX3NpemUgPSBodWdlX3BhZ2Vfc2l6ZShzYmluZm8tXFx1MDAzZWhzdGF0ZSk7XFxuLVxcdHVuc2lnbmVkIGhwYWdlX3NoaWZ0ID0gaHVnZV9wYWdlX3NoaWZ0KHNiaW5mby1cXHUwMDNlaHN0YXRlKTtcXG4gXFx0Y2hhciBtb2Q7XFxuIFxcbiBcXHRpZiAoIXVpZF9lcShzYmluZm8tXFx1MDAzZXVpZCwgR0xPQkFMX1JPT1RfVUlEKSlcXG5AQCAtMTA4MSwxMiArMTA4MSwxMyBAQCBzdGF0aWMgaW50IGh1Z2V0bGJmc19zaG93X29wdGlvbnMoc3RydWN0IHNlcV9maWxlICptLCBzdHJ1Y3QgZGVudHJ5ICpyb290KVxcbiBcXHR9XFxuIFxcdHNlcV9wcmludGYobSwgXFxcIixwYWdlc2l6ZT0lbHUlY1xcXCIsIGhwYWdlX3NpemUsIG1vZCk7XFxuIFxcdGlmIChzcG9vbCkge1xcbi1cXHRcXHRpZiAoc3Bvb2wtXFx1MDAzZW1heF9ocGFnZXMgIT0gLTEpXFxuLVxcdFxcdFxcdHNlcV9wcmludGYobSwgXFxcIixzaXplPSVsbHVcXFwiLFxcbi1cXHRcXHRcXHRcXHQgICAodW5zaWduZWQgbG9uZyBsb25nKXNwb29sLVxcdTAwM2VtYXhfaHBhZ2VzIFxcdTAwM2NcXHUwMDNjIGhwYWdlX3NoaWZ0KTtcXG4tXFx0XFx0aWYgKHNwb29sLVxcdTAwM2VtaW5faHBhZ2VzICE9IC0xKVxcbi1cXHRcXHRcXHRzZXFfcHJpbnRmKG0sIFxcXCIsbWluX3NpemU9JWxsdVxcXCIsXFxuLVxcdFxcdFxcdFxcdCAgICh1bnNpZ25lZCBsb25nIGxvbmcpc3Bvb2wtXFx1MDAzZW1pbl9ocGFnZXMgXFx1MDAzY1xcdTAwM2MgaHBhZ2Vfc2hpZnQpO1xcbitcXHRcXHR1bnNpZ25lZCBsb25nIGxvbmcgbWF4X3NpemUgPSBodWdlcGFnZV9zdWJwb29sX21heF9zaXplKHNwb29sKTtcXG4rXFx0XFx0dW5zaWduZWQgbG9uZyBsb25nIG1pbl9zaXplID0gaHVnZXBhZ2Vfc3VicG9vbF9taW5fc2l6ZShzcG9vbCk7XFxuK1xcbitcXHRcXHRpZiAobWF4X3NpemUgIT0gLTFVTEwpXFxuK1xcdFxcdFxcdHNlcV9wcmludGYobSwgXFxcIixzaXplPSVsbHVcXFwiLCBtYXhfc2l6ZSk7XFxuK1xcdFxcdGlmIChtaW5fc2l6ZSAhPSAtMVVMTClcXG4rXFx0XFx0XFx0c2VxX3ByaW50ZihtLCBcXFwiLG1pbl9zaXplPSVsbHVcXFwiLCBtaW5fc2l6ZSk7XFxuIFxcdH1cXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG5AQCAtMTEwNSwxNCArMTEwNiw4IEBAIHN0YXRpYyBpbnQgaHVnZXRsYmZzX3N0YXRmcyhzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBrc3RhdGZzICpidWYpXFxuIFxcdFxcdC8qIElmIG5vIGxpbWl0cyBzZXQsIGp1c3QgcmVwb3J0IDAgb3IgLTEgZm9yIG1heC9mcmVlL3VzZWRcXG4gXFx0XFx0ICogYmxvY2tzLCBsaWtlIHNpbXBsZV9zdGF0ZnMoKSAqL1xcbiBcXHRcXHRpZiAoc2JpbmZvLVxcdTAwM2VzcG9vbCkge1xcbi1cXHRcXHRcXHRsb25nIGZyZWVfcGFnZXM7XFxuLVxcbi1cXHRcXHRcXHRzcGluX2xvY2tfaXJxKFxcdTAwMjZzYmluZm8tXFx1MDAzZXNwb29sLVxcdTAwM2Vsb2NrKTtcXG4tXFx0XFx0XFx0YnVmLVxcdTAwM2VmX2Jsb2NrcyA9IHNiaW5mby1cXHUwMDNlc3Bvb2wtXFx1MDAzZW1heF9ocGFnZXM7XFxuLVxcdFxcdFxcdGZyZWVfcGFnZXMgPSBzYmluZm8tXFx1MDAzZXNwb29sLVxcdTAwM2VtYXhfaHBhZ2VzXFxuLVxcdFxcdFxcdFxcdC0gc2JpbmZvLVxcdTAwM2VzcG9vbC1cXHUwMDNldXNlZF9ocGFnZXM7XFxuLVxcdFxcdFxcdGJ1Zi1cXHUwMDNlZl9iYXZhaWwgPSBidWYtXFx1MDAzZWZfYmZyZWUgPSBmcmVlX3BhZ2VzO1xcbi1cXHRcXHRcXHRzcGluX3VubG9ja19pcnEoXFx1MDAyNnNiaW5mby1cXHUwMDNlc3Bvb2wtXFx1MDAzZWxvY2spO1xcbitcXHRcXHRcXHRidWYtXFx1MDAzZWZfYmxvY2tzID0gaHVnZXBhZ2Vfc3VicG9vbF9tYXhfaHBhZ2VzKHNiaW5mby1cXHUwMDNlc3Bvb2wpO1xcbitcXHRcXHRcXHRidWYtXFx1MDAzZWZfYmF2YWlsID0gYnVmLVxcdTAwM2VmX2JmcmVlID0gaHVnZXBhZ2Vfc3VicG9vbF9mcmVlX2hwYWdlcyhzYmluZm8tXFx1MDAzZXNwb29sKTtcXG4gXFx0XFx0XFx0YnVmLVxcdTAwM2VmX2ZpbGVzID0gc2JpbmZvLVxcdTAwM2VtYXhfaW5vZGVzO1xcbiBcXHRcXHRcXHRidWYtXFx1MDAzZWZfZmZyZWUgPSBzYmluZm8tXFx1MDAzZWZyZWVfaW5vZGVzO1xcbiBcXHRcXHR9XFxuZGlmZiAtLWdpdCBhL2h1Z2V0bGJfcmVzZXJ2ZV9wYWdlc19vdXRfcHV0X3BhZ2VzLmMgYi9odWdldGxiX3Jlc2VydmVfcGFnZXNfb3V0X3B1dF9wYWdlcy5jXFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcXG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uOWU2M2ZjODk5N2Q1N2RcXG4tLS0gL2Rldi9udWxsXFxuKysrIGIvaHVnZXRsYl9yZXNlcnZlX3BhZ2VzX291dF9wdXRfcGFnZXMuY1xcbkBAIC0wLDAgKzEsNDkgQEBcXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG4rI2RlZmluZSBfR05VX1NPVVJDRVxcbisjaW5jbHVkZSBcXHUwMDNjc3RkaW8uaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY3N0ZGxpYi5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjdW5pc3RkLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NzeXMvbW1hbi5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjZmNudGwuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2Vyci5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjZXJybm8uaFxcdTAwM2VcXG4rXFxuK2ludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndilcXG4re1xcbitcXHRjb25zdCBjaGFyICpmaWxlX3BhdGg7XFxuK1xcdHNpemVfdCBzaXplO1xcbitcXHRpbnQgZmQ7XFxuK1xcdHZvaWQgKmFkZHI7XFxuK1xcbitcXHRpZiAoYXJnYyBcXHUwMDNjIDMpIHtcXG4rXFx0XFx0ZnByaW50ZihzdGRlcnIsIFxcXCJVc2FnZTogJXMgXFx1MDAzY2h1Z2V0bGJmc19maWxlXFx1MDAzZSBcXHUwMDNjc2l6ZV9pbl9ieXRlc1xcdTAwM2VcXFxcblxcXCIsXFxuK1xcdFxcdFxcdGFyZ3ZbMF0pO1xcbitcXHRcXHRyZXR1cm4gMTtcXG4rXFx0fVxcbitcXG4rXFx0ZmlsZV9wYXRoID0gYXJndlsxXTtcXG4rXFx0c2l6ZSA9IHN0cnRvdWxsKGFyZ3ZbMl0sIE5VTEwsIDApO1xcbitcXG4rXFx0ZmQgPSBvcGVuKGZpbGVfcGF0aCwgT19DUkVBVCB8IE9fUkRXUiwgMDY2Nik7XFxuK1xcdGlmIChmZCBcXHUwMDNjIDApXFxuK1xcdFxcdGVycigxLCBcXFwib3BlblxcXCIpO1xcbitcXG4rXFx0cHJpbnRmKFxcXCJBdHRlbXB0aW5nIHRvIG1tYXAgJXp1IGJ5dGVzIHNoYXJlZCBvbiAlcy4uLlxcXFxuXFxcIiwgc2l6ZSxcXG4rXFx0ICAgICAgIGZpbGVfcGF0aCk7XFxuK1xcdGFkZHIgPSBtbWFwKE5VTEwsIHNpemUsIFBST1RfUkVBRCB8IFBST1RfV1JJVEUsIE1BUF9TSEFSRUQsIGZkLCAwKTtcXG4rXFx0aWYgKGFkZHIgPT0gTUFQX0ZBSUxFRCkge1xcbitcXHRcXHRpZiAoZXJybm8gPT0gRU5PTUVNKSB7XFxuK1xcdFxcdFxcdHByaW50ZihcXFwibW1hcCBmYWlsZWQgd2l0aCBFTk9NRU0gYXMgZXhwZWN0ZWQuXFxcXG5cXFwiKTtcXG4rXFx0XFx0XFx0Y2xvc2UoZmQpO1xcbitcXHRcXHRcXHRyZXR1cm4gMDtcXG4rXFx0XFx0fVxcbitcXHRcXHRwZXJyb3IoXFxcIm1tYXAgZmFpbGVkIHdpdGggdW5leHBlY3RlZCBlcnJvclxcXCIpO1xcbitcXHRcXHRjbG9zZShmZCk7XFxuK1xcdFxcdHJldHVybiAxO1xcbitcXHR9XFxuK1xcbitcXHRwcmludGYoXFxcIkVSUk9SOiBtbWFwIFNVQ0NFRURFRCB1bmV4cGVjdGVkbHkgYXQgJXBcXFxcblxcXCIsIGFkZHIpO1xcbitcXHRtdW5tYXAoYWRkciwgc2l6ZSk7XFxuK1xcdGNsb3NlKGZkKTtcXG4rXFx0cmV0dXJuIDE7XFxuK31cXG5kaWZmIC0tZ2l0IGEvaHVnZXRsYl9yZXNlcnZlX3BhZ2VzX291dF9wdXRfcGFnZXMuc2ggYi9odWdldGxiX3Jlc2VydmVfcGFnZXNfb3V0X3B1dF9wYWdlcy5zaFxcbm5ldyBmaWxlIG1vZGUgMTAwNzU1XFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLjAzMGUxOTE1NTM5YjRlXFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL2h1Z2V0bGJfcmVzZXJ2ZV9wYWdlc19vdXRfcHV0X3BhZ2VzLnNoXFxuQEAgLTAsMCArMSwxNTMgQEBcXG4rIyEvYmluL2Jhc2hcXG4rIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxcbitzZXQgLWVcXG4rXFxuK2lmIFsgXFxcIiRFVUlEXFxcIiAtbmUgMCBdOyB0aGVuXFxuKyAgICBlY2hvIFxcXCJQbGVhc2UgcnVuIGFzIHJvb3RcXFwiXFxuKyAgICBleGl0IDFcXG4rZmlcXG4rXFxuK1NDUklQVF9ESVI9XFxcIiQoY2QgXFxcIiQoZGlybmFtZSBcXFwiJHtCQVNIX1NPVVJDRVswXX1cXFwiKVxcXCIgXFx1MDAyNlxcdTAwMjYgcHdkKVxcXCJcXG4rY2QgXFxcIiRTQ1JJUFRfRElSXFxcIlxcbitcXG4rIyBEZXRlY3QgZGVmYXVsdCBodWdlcGFnZSBzaXplIHRvIHN1cHBvcnQgYm90aCAyTUIgYW5kIDFHQiBwYWdlcyByb2J1c3RseVxcbitocHo9JChncmVwIC1pIGh1Z2VwYWdlc2l6ZSAvcHJvYy9tZW1pbmZvIHwgYXdrICd7cHJpbnQgJDJ9JylcXG4ra2I9JGhwelxcbittYj0kKChrYiAvIDEwMjQpKVxcbitocGFnZV9zaXplX2J5dGVzPSQoKGtiICogMTAyNCkpXFxuK1xcbitocGFnZV9kaXI9XFxcImh1Z2VwYWdlcy0ke2tifWtCXFxcIlxcbitTWVNGU19QQVRIPVxcXCIvc3lzL2tlcm5lbC9tbS9odWdlcGFnZXMvJGhwYWdlX2RpclxcXCJcXG4rXFxuK01OVF9QQVRIPVxcXCIvdG1wL21udF9odWdldGxiX3JlcHJvXFxcIlxcbitGSUxFX1BBVEg9XFxcIiRNTlRfUEFUSC90ZXN0X2ZpbGVcXFwiXFxuK1xcbisjIFNhdmUgb3JpZ2luYWwgdmFsdWVzIGZvciBzYWZlIHJlc3RvcmF0aW9uXFxuK29yaWdfbnI9JChjYXQgXFxcIiRTWVNGU19QQVRIL25yX2h1Z2VwYWdlc1xcXCIpXFxuK29yaWdfb3ZlcmNvbW1pdD0kKGNhdCBcXFwiJFNZU0ZTX1BBVEgvbnJfb3ZlcmNvbW1pdF9odWdlcGFnZXNcXFwiKVxcbitcXG4rY2xlYW51cCgpIHtcXG4rICAgIGVjaG8gXFxcIkNsZWFuaW5nIHVwLi4uXFxcIlxcbisgICAgcm0gLWYgXFxcIiRGSUxFX1BBVEhcXFwiXFxuKyAgICB1bW91bnQgXFxcIiRNTlRfUEFUSFxcXCIgMlxcdTAwM2UvZGV2L251bGxcXG4rICAgIHJtZGlyIFxcXCIkTU5UX1BBVEhcXFwiIDJcXHUwMDNlL2Rldi9udWxsXFxuKyAgICBlY2hvIFxcXCIkb3JpZ19uclxcXCIgXFx1MDAzZSBcXFwiJFNZU0ZTX1BBVEgvbnJfaHVnZXBhZ2VzXFxcIlxcbisgICAgZWNobyBcXFwiJG9yaWdfb3ZlcmNvbW1pdFxcXCIgXFx1MDAzZSBcXFwiJFNZU0ZTX1BBVEgvbnJfb3ZlcmNvbW1pdF9odWdlcGFnZXNcXFwiXFxuKyAgICBlY2hvIFxcXCJDbGVhbnVwIGRvbmUuXFxcIlxcbit9XFxuK3RyYXAgY2xlYW51cCBFWElUXFxuK1xcbisjIFZlcmlmeSByZXByb2R1Y2VyIGJpbmFyeSBleGlzdHNcXG4raWYgWyAhIC14IC4vaHVnZXRsYl9yZXNlcnZlX3BhZ2VzX291dF9wdXRfcGFnZXMgXTsgdGhlblxcbisgICAgZWNobyBcXFwicmVwcm9kdWNlciBiaW5hcnkgJy4vaHVnZXRsYl9yZXNlcnZlX3BhZ2VzX291dF9wdXRfcGFnZXMnIG5vdCBmb3VuZCBvciBub3QgZXhlY3V0YWJsZS5cXFwiXFxuKyAgICBlY2hvIFxcXCJQbGVhc2UgY29tcGlsZSBpdCBmaXJzdDogZ2NjIC1zdGF0aWMgLW8gaHVnZXRsYl9yZXNlcnZlX3BhZ2VzX291dF9wdXRfcGFnZXMgaHVnZXRsYl9yZXNlcnZlX3BhZ2VzX291dF9wdXRfcGFnZXMuY1xcXCJcXG4rICAgIGV4aXQgMVxcbitmaVxcbitcXG4rIyAxLiBTZXQgZ2xvYmFsIHBvb2wgc3VjaCB0aGF0IG9ubHkgdGhlIG1vdW50LXRpbWUgcmVzZXJ2YXRpb24gY2FuIHN1Y2NlZWRcXG4rZWNobyAxIFxcdTAwM2UgXFxcIiRTWVNGU19QQVRIL25yX2h1Z2VwYWdlc1xcXCJcXG4rZWNobyAwIFxcdTAwM2UgXFxcIiRTWVNGU19QQVRIL25yX292ZXJjb21taXRfaHVnZXBhZ2VzXFxcIlxcbitcXG4raW5pdGlhbF9yZXN2PSQoY2F0IFxcXCIkU1lTRlNfUEFUSC9yZXN2X2h1Z2VwYWdlc1xcXCIpXFxuK2VjaG8gXFxcIkluaXRpYWwgcmVzdl9odWdlcGFnZXMgKGJlZm9yZSBtb3VudCk6ICRpbml0aWFsX3Jlc3ZcXFwiXFxuK1xcbisjIDIuIE1vdW50IHdpdGggbWluX3NpemUgPSAxIHBhZ2UsIG1heCBzaXplID0gMiBwYWdlc1xcbittaW5fc2l6ZV9zdHI9XFxcIiR7bWJ9TVxcXCJcXG4rbWF4X3NpemVfc3RyPVxcXCIkKChtYiAqIDIpKU1cXFwiXFxuK21tYXBfc2l6ZV9ieXRlcz0kKChocGFnZV9zaXplX2J5dGVzICogMikpXFxuK1xcbitta2RpciAtcCBcXFwiJE1OVF9QQVRIXFxcIlxcbitlY2hvIFxcXCJNb3VudGluZyBodWdldGxiZnMgd2l0aCBwYWdlc2l6ZT0ke21ifU0sIG1pbl9zaXplPSRtaW5fc2l6ZV9zdHIsIHNpemU9JG1heF9zaXplX3N0ci4uLlxcXCJcXG4raWYgISBtb3VudCAtdCBodWdldGxiZnMgLW8gXFxcInBhZ2VzaXplPSR7bWJ9TSxtaW5fc2l6ZT0kbWluX3NpemVfc3RyLHNpemU9JG1heF9zaXplX3N0clxcXCIgbm9uZSBcXFwiJE1OVF9QQVRIXFxcIjsgdGhlblxcbisgICAgZWNobyBcXFwiRmFpbGVkIHRvIG1vdW50IGh1Z2V0bGJmc1xcXCJcXG4rICAgIGV4aXQgMVxcbitmaVxcbitcXG4rcmVzdl9hZnRlcl9tb3VudD0kKGNhdCBcXFwiJFNZU0ZTX1BBVEgvcmVzdl9odWdlcGFnZXNcXFwiKVxcbitlY2hvIFxcXCJyZXN2X2h1Z2VwYWdlcyBhZnRlciBtb3VudDogJHJlc3ZfYWZ0ZXJfbW91bnRcXFwiXFxuK2V4cGVjdGVkX2FmdGVyX21vdW50PSQoKGluaXRpYWxfcmVzdiArIDEpKVxcbitpZiBbIFxcXCIkcmVzdl9hZnRlcl9tb3VudFxcXCIgIT0gXFxcIiRleHBlY3RlZF9hZnRlcl9tb3VudFxcXCIgXTsgdGhlblxcbisgICAgZWNobyBcXFwiRVJST1I6IHJlc3ZfaHVnZXBhZ2VzIGlzIG5vdCAkZXhwZWN0ZWRfYWZ0ZXJfbW91bnQgYWZ0ZXIgbW91bnQgKGFjdHVhbDogJHJlc3ZfYWZ0ZXJfbW91bnQpIVxcXCJcXG4rICAgIGV4aXQgMVxcbitmaVxcbitcXG4rIyBDaGVjayBtb3VudCBzdGF0cyBhZnRlciBtb3VudFxcbitleHBlY3RlZF9ic2l6ZT0kaHBhZ2Vfc2l6ZV9ieXRlc1xcbitic2l6ZV9TPSQoc3RhdCAtZiAtYyBcXFwiJVNcXFwiIFxcXCIkTU5UX1BBVEhcXFwiKVxcbitic2l6ZV9zPSQoc3RhdCAtZiAtYyBcXFwiJXNcXFwiIFxcXCIkTU5UX1BBVEhcXFwiKVxcbitlY2hvIFxcXCJNb3VudCBibG9jayBzaXplIGFmdGVyIG1vdW50OiAkYnNpemVfUyAvICRic2l6ZV9zIChleHBlY3RlZDogJGV4cGVjdGVkX2JzaXplKVxcXCJcXG4raWYgWyBcXFwiJGJzaXplX1NcXFwiICE9IFxcXCIkZXhwZWN0ZWRfYnNpemVcXFwiIF0gXFx1MDAyNlxcdTAwMjYgWyBcXFwiJGJzaXplX3NcXFwiICE9IFxcXCIkZXhwZWN0ZWRfYnNpemVcXFwiIF07IHRoZW5cXG4rICAgIGVjaG8gXFxcIkVSUk9SOiBVbmV4cGVjdGVkIG1vdW50IGJsb2NrIHNpemUgYWZ0ZXIgbW91bnQgKGFjdHVhbCBTOiRic2l6ZV9TIHM6JGJzaXplX3MsIGV4cGVjdGVkOiAkZXhwZWN0ZWRfYnNpemUpXFxcIlxcbisgICAgZXhpdCAxXFxuK2ZpXFxuK1xcbithY3R1YWxfc3RhdHNfbW91bnQ9JChzdGF0IC1mIC1jIFxcXCIlYiAlZiAlYVxcXCIgXFxcIiRNTlRfUEFUSFxcXCIpXFxuK2V4cGVjdGVkX3N0YXRzX21vdW50PVxcXCIyIDIgMlxcXCJcXG4rZWNobyBcXFwiTW91bnQgc3RhdHMgYWZ0ZXIgbW91bnQgKHRvdGFsIGZyZWUgYXZhaWwpOiAkYWN0dWFsX3N0YXRzX21vdW50IChleHBlY3RlZDogJGV4cGVjdGVkX3N0YXRzX21vdW50KVxcXCJcXG4raWYgWyBcXFwiJGFjdHVhbF9zdGF0c19tb3VudFxcXCIgIT0gXFxcIiRleHBlY3RlZF9zdGF0c19tb3VudFxcXCIgXTsgdGhlblxcbisgICAgZWNobyBcXFwiRVJST1I6IFVuZXhwZWN0ZWQgbW91bnQgc3RhdHMgYWZ0ZXIgbW91bnQ6ICRhY3R1YWxfc3RhdHNfbW91bnQgKGV4cGVjdGVkOiAkZXhwZWN0ZWRfc3RhdHNfbW91bnQpXFxcIlxcbisgICAgZXhpdCAxXFxuK2ZpXFxuK1xcbisjIDMuIFJ1biB0aGUgcmVwcm9kdWNlciB0byB0cmlnZ2VyIHRoZSBvdXRfcHV0X3BhZ2VzIGZhaWx1cmUgcGF0aFxcbitlY2hvIFxcXCJSdW5uaW5nIHJlcHJvZHVjZXIgKGV4cGVjdGluZyBtbWFwIGZhaWx1cmUgd2l0aCBFTk9NRU0pLi4uXFxcIlxcbitpZiAuL2h1Z2V0bGJfcmVzZXJ2ZV9wYWdlc19vdXRfcHV0X3BhZ2VzIFxcXCIkRklMRV9QQVRIXFxcIiBcXFwiJG1tYXBfc2l6ZV9ieXRlc1xcXCI7IHRoZW5cXG4rICAgIGVjaG8gXFxcIlJlcHJvZHVjZXIgZmluaXNoZWQgc3VjY2Vzc2Z1bGx5LlxcXCJcXG4rICAgIHJlc3ZfYWZ0ZXJfbW1hcD0kKGNhdCBcXFwiJFNZU0ZTX1BBVEgvcmVzdl9odWdlcGFnZXNcXFwiKVxcbisgICAgZWNobyBcXFwicmVzdl9odWdlcGFnZXMgYWZ0ZXIgZmFpbGVkIG1tYXA6ICRyZXN2X2FmdGVyX21tYXBcXFwiXFxuKyAgICBleHBlY3RlZF9hZnRlcl9tbWFwPSRleHBlY3RlZF9hZnRlcl9tb3VudFxcbisgICAgaWYgWyBcXFwiJHJlc3ZfYWZ0ZXJfbW1hcFxcXCIgPSBcXFwiJGV4cGVjdGVkX2FmdGVyX21tYXBcXFwiIF07IHRoZW5cXG4rICAgICAgICBlY2hvIFxcXCJSRVNVTFQ6IG91dF9wdXRfcGFnZXMgRVhFUkNJU0VEIChyZXN2X2h1Z2VwYWdlcyBwcmVzZXJ2ZWQgYXQgJGV4cGVjdGVkX2FmdGVyX21tYXAgYXMgZXhwZWN0ZWQpXFxcIlxcbitcXG4rICAgICAgICAjIENoZWNrIG1vdW50IHN0YXRzXFxuKyAgICAgICAgZXhwZWN0ZWRfYnNpemU9JGhwYWdlX3NpemVfYnl0ZXNcXG4rICAgICAgICBic2l6ZV9TPSQoc3RhdCAtZiAtYyBcXFwiJVNcXFwiIFxcXCIkTU5UX1BBVEhcXFwiKVxcbisgICAgICAgIGJzaXplX3M9JChzdGF0IC1mIC1jIFxcXCIlc1xcXCIgXFxcIiRNTlRfUEFUSFxcXCIpXFxuKyAgICAgICAgZWNobyBcXFwiTW91bnQgYmxvY2sgc2l6ZTogJGJzaXplX1MgLyAkYnNpemVfcyAoZXhwZWN0ZWQ6ICRleHBlY3RlZF9ic2l6ZSlcXFwiXFxuKyAgICAgICAgaWYgWyBcXFwiJGJzaXplX1NcXFwiICE9IFxcXCIkZXhwZWN0ZWRfYnNpemVcXFwiIF0gXFx1MDAyNlxcdTAwMjYgWyBcXFwiJGJzaXplX3NcXFwiICE9IFxcXCIkZXhwZWN0ZWRfYnNpemVcXFwiIF07IHRoZW5cXG4rICAgICAgICAgICAgZWNobyBcXFwiRVJST1I6IFVuZXhwZWN0ZWQgbW91bnQgYmxvY2sgc2l6ZSAoYWN0dWFsIFM6JGJzaXplX1MgczokYnNpemVfcywgZXhwZWN0ZWQ6ICRleHBlY3RlZF9ic2l6ZSlcXFwiXFxuKyAgICAgICAgICAgIGV4aXQgMVxcbisgICAgICAgIGZpXFxuK1xcbisgICAgICAgIGFjdHVhbF9zdGF0cz0kKHN0YXQgLWYgLWMgXFxcIiViICVmICVhXFxcIiBcXFwiJE1OVF9QQVRIXFxcIilcXG4rICAgICAgICBleHBlY3RlZF9zdGF0cz1cXFwiMiAyIDJcXFwiXFxuKyAgICAgICAgZWNobyBcXFwiTW91bnQgc3RhdHMgKHRvdGFsIGZyZWUgYXZhaWwpOiAkYWN0dWFsX3N0YXRzIChleHBlY3RlZDogJGV4cGVjdGVkX3N0YXRzKVxcXCJcXG4rICAgICAgICBpZiBbIFxcXCIkYWN0dWFsX3N0YXRzXFxcIiAhPSBcXFwiJGV4cGVjdGVkX3N0YXRzXFxcIiBdOyB0aGVuXFxuKyAgICAgICAgICAgIGVjaG8gXFxcIlJFU1VMVDogVW5leHBlY3RlZCBtb3VudCBzdGF0cyBhZnRlciBmYWlsZWQgbW1hcCAoRkFJTClcXFwiXFxuKyAgICAgICAgICAgIGV4aXQgMVxcbisgICAgICAgIGVsc2VcXG4rICAgICAgICAgICAgZWNobyBcXFwiUkVTVUxUOiBNb3VudCBzdGF0cyByZXN0b3JlZCB0byAkZXhwZWN0ZWRfc3RhdHMgYXMgZXhwZWN0ZWQgKFBBU1MpXFxcIlxcbisgICAgICAgIGZpXFxuKyAgICBlbHNlXFxuKyAgICAgICAgZWNobyBcXFwiUkVTVUxUOiBVbmV4cGVjdGVkIHJlc3ZfaHVnZXBhZ2VzIHZhbHVlOiAkcmVzdl9hZnRlcl9tbWFwIChleHBlY3RlZDogJGV4cGVjdGVkX2FmdGVyX21tYXApXFxcIlxcbisgICAgICAgIGV4aXQgMVxcbisgICAgZmlcXG4rZWxzZVxcbisgICAgZWNobyBcXFwiRkFJTDogUmVwcm9kdWNlciByZXR1cm5lZCBub24temVybyAobW1hcCBkaWRuJ3QgZmFpbCB3aXRoIEVOT01FTSlcXFwiXFxuKyAgICBleGl0IDFcXG4rZmlcXG4rXFxuKyMgNC4gRGlzYWJsZSB0cmFwIGFuZCBkbyBtYW51YWwgY2xlYW51cCB0byBjaGVjayBmb3IgZmluYWwgdW5tb3VudCB1bmRlcmZsb3dcXG4rdHJhcCAtIEVYSVRcXG4rXFxuK2VjaG8gXFxcIlVubW91bnRpbmcuLi5cXFwiXFxuK3Vtb3VudCBcXFwiJE1OVF9QQVRIXFxcIlxcbitybWRpciBcXFwiJE1OVF9QQVRIXFxcIlxcbitcXG4rZmluYWxfcmVzdj0kKGNhdCBcXFwiJFNZU0ZTX1BBVEgvcmVzdl9odWdlcGFnZXNcXFwiKVxcbitlY2hvIFxcXCJGaW5hbCByZXN2X2h1Z2VwYWdlcyAoYWZ0ZXIgdW5tb3VudCk6ICRmaW5hbF9yZXN2XFxcIlxcbitcXG4rIyBSZXN0b3JlIG9yaWdpbmFsIHZhbHVlc1xcbitlY2hvIFxcXCJSZXN0b3Jpbmcgb3JpZ2luYWwgaHVnZXBhZ2Ugc2V0dGluZ3MuLi5cXFwiXFxuK2VjaG8gXFxcIiRvcmlnX25yXFxcIiBcXHUwMDNlIFxcXCIkU1lTRlNfUEFUSC9ucl9odWdlcGFnZXNcXFwiXFxuK2VjaG8gXFxcIiRvcmlnX292ZXJjb21taXRcXFwiIFxcdTAwM2UgXFxcIiRTWVNGU19QQVRIL25yX292ZXJjb21taXRfaHVnZXBhZ2VzXFxcIlxcbitcXG4raWYgWyBcXFwiJGZpbmFsX3Jlc3ZcXFwiID0gXFxcIiRpbml0aWFsX3Jlc3ZcXFwiIF07IHRoZW5cXG4rICAgIGVjaG8gXFxcIlJFU1VMVDogU3RhdGUgcmVzdG9yZWQgdG8gJGluaXRpYWxfcmVzdiAob3IgY2xlYW5lZCB1cCBpZiBmaXhlZClcXFwiXFxuKyAgICBlY2hvIFxcXCJBTEwgRE9ORS5cXFwiXFxuKyAgICBleGl0IDBcXG4rZWxzZVxcbisgICAgZWNobyBcXFwiUkVTVUxUOiBVbmRlcmZsb3cvTGVhay9JbmNvcnJlY3Qgc3RhdGUgZGV0ZWN0ZWQhIChmaW5hbF9yZXN2ID0gJGZpbmFsX3Jlc3YsIGV4cGVjdGVkID0gJGluaXRpYWxfcmVzdilcXFwiXFxuKyAgICBlY2hvIFxcXCJBTEwgRE9ORS5cXFwiXFxuKyAgICBleGl0IDFcXG4rZmlcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9odWdldGxiLmggYi9pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaFxcbmluZGV4IDJhYmFmOTkzMjFlOTBkLi4wNzRhNDU5MDM5NzNlYiAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaFxcbisrKyBiL2luY2x1ZGUvbGludXgvaHVnZXRsYi5oXFxuQEAgLTE4LDYgKzE4LDcgQEBcXG4gXFxuIHN0cnVjdCBtbXVfZ2F0aGVyO1xcbiBzdHJ1Y3Qgbm9kZTtcXG4rc3RydWN0IGhzdGF0ZTtcXG4gXFxuIHZvaWQgZnJlZV9odWdlX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8pO1xcbiBcXG5AQCAtMzQsMTcgKzM1LDcgQEAgdm9pZCBmcmVlX2h1Z2VfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbyk7XFxuICAqL1xcbiAjZGVmaW5lIF9fTlJfVVNFRF9TVUJQQUdFIDNcXG4gXFxuLXN0cnVjdCBodWdlcGFnZV9zdWJwb29sIHtcXG4tXFx0c3BpbmxvY2tfdCBsb2NrO1xcbi1cXHRsb25nIGNvdW50O1xcbi1cXHRsb25nIG1heF9ocGFnZXM7XFx0LyogTWF4aW11bSBodWdlIHBhZ2VzIG9yIC0xIGlmIG5vIG1heGltdW0uICovXFxuLVxcdGxvbmcgdXNlZF9ocGFnZXM7XFx0LyogVXNlZCBjb3VudCBhZ2FpbnN0IG1heGltdW0sIGluY2x1ZGVzICovXFxuLVxcdFxcdFxcdFxcdC8qIGJvdGggYWxsb2NhdGVkIGFuZCByZXNlcnZlZCBwYWdlcy4gKi9cXG4tXFx0c3RydWN0IGhzdGF0ZSAqaHN0YXRlO1xcbi1cXHRsb25nIG1pbl9ocGFnZXM7XFx0LyogTWluaW11bSBodWdlIHBhZ2VzIG9yIC0xIGlmIG5vIG1pbmltdW0uICovXFxuLVxcdGxvbmcgcnN2X2hwYWdlcztcXHQvKiBQYWdlcyByZXNlcnZlZCBhZ2FpbnN0IGdsb2JhbCBwb29sIHRvICovXFxuLVxcdFxcdFxcdFxcdC8qIHNhdGlzZnkgbWluaW11bSBzaXplLiAqL1xcbi19O1xcbitzdHJ1Y3QgaHVnZXBhZ2Vfc3VicG9vbDtcXG4gXFxuIHN0cnVjdCByZXN2X21hcCB7XFxuIFxcdHN0cnVjdCBrcmVmIHJlZnM7XFxuQEAgLTExNCw5ICsxMDUsNyBAQCBleHRlcm4gaW50IGh1Z2V0bGJfbWF4X2hzdGF0ZSBfX3JlYWRfbW9zdGx5O1xcbiAjZGVmaW5lIGZvcl9lYWNoX2hzdGF0ZShoKSBcXFxcXFxuIFxcdGZvciAoKGgpID0gaHN0YXRlczsgKGgpIFxcdTAwM2MgXFx1MDAyNmhzdGF0ZXNbaHVnZXRsYl9tYXhfaHN0YXRlXTsgKGgpKyspXFxuIFxcbi1zdHJ1Y3QgaHVnZXBhZ2Vfc3VicG9vbCAqaHVnZXBhZ2VfbmV3X3N1YnBvb2woc3RydWN0IGhzdGF0ZSAqaCwgbG9uZyBtYXhfaHBhZ2VzLFxcbi1cXHRcXHRcXHRcXHRcXHRcXHRsb25nIG1pbl9ocGFnZXMpO1xcbi12b2lkIGh1Z2VwYWdlX3B1dF9zdWJwb29sKHN0cnVjdCBodWdlcGFnZV9zdWJwb29sICpzcG9vbCk7XFxuK2ludCBodWdldGxiX2FjY3RfbWVtb3J5KHN0cnVjdCBoc3RhdGUgKmgsIGxvbmcgZGVsdGEpO1xcbiBcXG4gdm9pZCBodWdldGxiX2R1cF92bWFfcHJpdmF0ZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSk7XFxuIHZvaWQgY2xlYXJfdm1hX3Jlc3ZfaHVnZV9wYWdlcyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSk7XFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oIGIvaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmhcXG5pbmRleCBlMWY0NmEwMDE2ZmNmZC4uMjNmYmJiYzhlMTFmMjAgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaFxcbkBAIC02NDEsNyArNjQxLDE1IEBAIHN0YXRpYyBpbmxpbmUgaW50IG1lbV9jZ3JvdXBfY2hhcmdlKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxcbiBcXHRyZXR1cm4gX19tZW1fY2dyb3VwX2NoYXJnZShmb2xpbywgbW0sIGdmcCk7XFxuIH1cXG4gXFxuLWludCBtZW1fY2dyb3VwX2NoYXJnZV9odWdldGxiKHN0cnVjdCBmb2xpbyogZm9saW8sIGdmcF90IGdmcCk7XFxuK2ludCBtZW1fY2dyb3VwX2h1Z2V0bGJfdHJ5X2NoYXJnZSh1bnNpZ25lZCBpbnQgbnJfcGFnZXMsIGdmcF90IGdmcCxcXG4rXFx0XFx0XFx0XFx0ICBzdHJ1Y3QgbWVtX2Nncm91cCAqKm1lbWNnX3AsXFxuK1xcdFxcdFxcdFxcdCAgc3RydWN0IG9ial9jZ3JvdXAgKipvYmpjZ19wKTtcXG4rdm9pZCBtZW1fY2dyb3VwX2h1Z2V0bGJfY29tbWl0X2NoYXJnZShzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbitcXHRcXHRcXHRcXHQgICAgICBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXFxuK1xcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCBvYmpfY2dyb3VwICpvYmpjZyk7XFxuK3ZvaWQgbWVtX2Nncm91cF9odWdldGxiX2NhbmNlbF9jaGFyZ2UodW5zaWduZWQgaW50IG5yX3BhZ2VzLFxcbitcXHRcXHRcXHRcXHQgICAgICBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXFxuK1xcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCBvYmpfY2dyb3VwICpvYmpjZyk7XFxuIFxcbiBpbnQgbWVtX2Nncm91cF9zd2FwaW5fY2hhcmdlX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sIHVuc2lnbmVkIHNob3J0IGlkLFxcbiBcXHRcXHRcXHRcXHQgICBzdHJ1Y3QgbW1fc3RydWN0ICptbSwgZ2ZwX3QgZ2ZwKTtcXG5AQCAtMTEyOCw5ICsxMTM2LDI1IEBAIHN0YXRpYyBpbmxpbmUgaW50IG1lbV9jZ3JvdXBfY2hhcmdlKHN0cnVjdCBmb2xpbyAqZm9saW8sXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbi1zdGF0aWMgaW5saW5lIGludCBtZW1fY2dyb3VwX2NoYXJnZV9odWdldGxiKHN0cnVjdCBmb2xpbyogZm9saW8sIGdmcF90IGdmcClcXG4rc3RhdGljIGlubGluZSBpbnQgbWVtX2Nncm91cF9odWdldGxiX3RyeV9jaGFyZ2UodW5zaWduZWQgaW50IG5yX3BhZ2VzLCBnZnBfdCBnZnAsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdHN0cnVjdCBtZW1fY2dyb3VwICoqbWVtY2dfcCxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0c3RydWN0IG9ial9jZ3JvdXAgKipvYmpjZ19wKVxcbit7XFxuK1xcdCptZW1jZ19wID0gTlVMTDtcXG4rXFx0Km9iamNnX3AgPSBOVUxMO1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rc3RhdGljIGlubGluZSB2b2lkIG1lbV9jZ3JvdXBfaHVnZXRsYl9jb21taXRfY2hhcmdlKHN0cnVjdCBmb2xpbyAqZm9saW8sXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgICBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgICBzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2cpXFxuK3tcXG4rfVxcbitcXG4rc3RhdGljIGlubGluZSB2b2lkIG1lbV9jZ3JvdXBfaHVnZXRsYl9jYW5jZWxfY2hhcmdlKHVuc2lnbmVkIGludCBucl9wYWdlcyxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBvYmpfY2dyb3VwICpvYmpjZylcXG4ge1xcbi0gICAgICAgIHJldHVybiAwO1xcbiB9XFxuIFxcbiBzdGF0aWMgaW5saW5lIGludCBtZW1fY2dyb3VwX3N3YXBpbl9jaGFyZ2VfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbyxcXG5kaWZmIC0tZ2l0IGEvbW0vTWFrZWZpbGUgYi9tbS9NYWtlZmlsZVxcbmluZGV4IGVmZjlmOWU3ZTA2MWMxLi4zOTY1Yzk1OWU1MDk5MiAxMDA2NDRcXG4tLS0gYS9tbS9NYWtlZmlsZVxcbisrKyBiL21tL01ha2VmaWxlXFxuQEAgLTc4LDcgKzc4LDcgQEAgZW5kaWZcXG4gb2JqLSQoQ09ORklHX1NXQVApXFx0Kz0gcGFnZV9pby5vIHN3YXBfc3RhdGUubyBzd2FwZmlsZS5vXFxuIG9iai0kKENPTkZJR19aU1dBUClcXHQrPSB6c3dhcC5vXFxuIG9iai0kKENPTkZJR19IQVNfRE1BKVxcdCs9IGRtYXBvb2wub1xcbi1vYmotJChDT05GSUdfSFVHRVRMQkZTKVxcdCs9IGh1Z2V0bGIubyBodWdldGxiX3N5c2ZzLm8gaHVnZXRsYl9zeXNjdGwub1xcbitvYmotJChDT05GSUdfSFVHRVRMQkZTKVxcdCs9IGh1Z2V0bGIubyBodWdldGxiX3N1YnBvb2wubyBodWdldGxiX3N5c2ZzLm8gaHVnZXRsYl9zeXNjdGwub1xcbiBpZmRlZiBDT05GSUdfQ01BXFxuIG9iai0kKENPTkZJR19IVUdFVExCRlMpXFx0Kz0gaHVnZXRsYl9jbWEub1xcbiBlbmRpZlxcbmRpZmYgLS1naXQgYS9tbS9odWdldGxiLmMgYi9tbS9odWdldGxiLmNcXG5pbmRleCA1NzEyMTJiODA4MzVlYy4uZTg3ZjI2YTNlMWYzZTQgMTAwNjQ0XFxuLS0tIGEvbW0vaHVnZXRsYi5jXFxuKysrIGIvbW0vaHVnZXRsYi5jXFxuQEAgLTM4LDYgKzM4LDggQEBcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L21tX2lubGluZS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvcGFkYXRhLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9wZ2FsbG9jLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9tZW1jb250cm9sLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcXCJodWdldGxiX3N1YnBvb2wuaFxcXCJcXG4gXFxuICNpbmNsdWRlIFxcdTAwM2Nhc20vcGFnZS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjYXNtL3RsYi5oXFx1MDAzZVxcbkBAIC0xMTMsOCArMTE1LDcgQEAgX19jYWNoZWxpbmVfYWxpZ25lZF9pbl9zbXAgREVGSU5FX1NQSU5MT0NLKGh1Z2V0bGJfbG9jayk7XFxuIHN0YXRpYyBpbnQgbnVtX2ZhdWx0X211dGV4ZXMgX19yb19hZnRlcl9pbml0O1xcbiBzdHJ1Y3QgbXV0ZXggKmh1Z2V0bGJfZmF1bHRfbXV0ZXhfdGFibGUgX19yb19hZnRlcl9pbml0O1xcbiBcXG4tLyogRm9yd2FyZCBkZWNsYXJhdGlvbiAqL1xcbi1zdGF0aWMgaW50IGh1Z2V0bGJfYWNjdF9tZW1vcnkoc3RydWN0IGhzdGF0ZSAqaCwgbG9uZyBkZWx0YSk7XFxuKy8qIEZvcndhcmQgZGVjbGFyYXRpb25zICovXFxuIHN0YXRpYyB2b2lkIGh1Z2V0bGJfdm1hX2xvY2tfZnJlZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSk7XFxuIHN0YXRpYyB2b2lkIGh1Z2V0bGJfdm1hX2xvY2tfYWxsb2Moc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpO1xcbiBzdGF0aWMgdm9pZCBfX2h1Z2V0bGJfdm1hX3VubG9ja193cml0ZV9mcmVlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKTtcXG5AQCAtMTI1LDE1NiArMTI2LDYgQEAgc3RhdGljIHZvaWQgaHVnZXRsYl91bnNoYXJlX3BtZHMoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuIFxcdFxcdHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLCBib29sIHRha2VfbG9ja3MpO1xcbiBzdGF0aWMgc3RydWN0IHJlc3ZfbWFwICp2bWFfcmVzdl9tYXAoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpO1xcbiBcXG4tc3RhdGljIGlubGluZSBib29sIHN1YnBvb2xfaXNfZnJlZShzdHJ1Y3QgaHVnZXBhZ2Vfc3VicG9vbCAqc3Bvb2wpXFxuLXtcXG4tXFx0aWYgKHNwb29sLVxcdTAwM2Vjb3VudClcXG4tXFx0XFx0cmV0dXJuIGZhbHNlO1xcbi1cXHRpZiAoc3Bvb2wtXFx1MDAzZW1heF9ocGFnZXMgIT0gLTEpXFxuLVxcdFxcdHJldHVybiBzcG9vbC1cXHUwMDNldXNlZF9ocGFnZXMgPT0gMDtcXG4tXFx0aWYgKHNwb29sLVxcdTAwM2VtaW5faHBhZ2VzICE9IC0xKVxcbi1cXHRcXHRyZXR1cm4gc3Bvb2wtXFx1MDAzZXJzdl9ocGFnZXMgPT0gc3Bvb2wtXFx1MDAzZW1pbl9ocGFnZXM7XFxuLVxcbi1cXHRyZXR1cm4gdHJ1ZTtcXG4tfVxcbi1cXG4tc3RhdGljIGlubGluZSB2b2lkIHVubG9ja19vcl9yZWxlYXNlX3N1YnBvb2woc3RydWN0IGh1Z2VwYWdlX3N1YnBvb2wgKnNwb29sLFxcbi1cXHRcXHRcXHRcXHRcXHRcXHR1bnNpZ25lZCBsb25nIGlycV9mbGFncylcXG4te1xcbi1cXHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFxcdTAwMjZzcG9vbC1cXHUwMDNlbG9jaywgaXJxX2ZsYWdzKTtcXG4tXFxuLVxcdC8qIElmIG5vIHBhZ2VzIGFyZSB1c2VkLCBhbmQgbm8gb3RoZXIgaGFuZGxlcyB0byB0aGUgc3VicG9vbFxcbi1cXHQgKiByZW1haW4sIGdpdmUgdXAgYW55IHJlc2VydmF0aW9ucyBiYXNlZCBvbiBtaW5pbXVtIHNpemUgYW5kXFxuLVxcdCAqIGZyZWUgdGhlIHN1YnBvb2wgKi9cXG4tXFx0aWYgKHN1YnBvb2xfaXNfZnJlZShzcG9vbCkpIHtcXG4tXFx0XFx0aWYgKHNwb29sLVxcdTAwM2VtaW5faHBhZ2VzICE9IC0xKVxcbi1cXHRcXHRcXHRodWdldGxiX2FjY3RfbWVtb3J5KHNwb29sLVxcdTAwM2Voc3RhdGUsXFxuLVxcdFxcdFxcdFxcdFxcdFxcdC1zcG9vbC1cXHUwMDNlbWluX2hwYWdlcyk7XFxuLVxcdFxcdGtmcmVlKHNwb29sKTtcXG4tXFx0fVxcbi19XFxuLVxcbi1zdHJ1Y3QgaHVnZXBhZ2Vfc3VicG9vbCAqaHVnZXBhZ2VfbmV3X3N1YnBvb2woc3RydWN0IGhzdGF0ZSAqaCwgbG9uZyBtYXhfaHBhZ2VzLFxcbi1cXHRcXHRcXHRcXHRcXHRcXHRsb25nIG1pbl9ocGFnZXMpXFxuLXtcXG4tXFx0c3RydWN0IGh1Z2VwYWdlX3N1YnBvb2wgKnNwb29sO1xcbi1cXG4tXFx0c3Bvb2wgPSBremFsbG9jX29iaigqc3Bvb2wpO1xcbi1cXHRpZiAoIXNwb29sKVxcbi1cXHRcXHRyZXR1cm4gTlVMTDtcXG4tXFxuLVxcdHNwaW5fbG9ja19pbml0KFxcdTAwMjZzcG9vbC1cXHUwMDNlbG9jayk7XFxuLVxcdHNwb29sLVxcdTAwM2Vjb3VudCA9IDE7XFxuLVxcdHNwb29sLVxcdTAwM2VtYXhfaHBhZ2VzID0gbWF4X2hwYWdlcztcXG4tXFx0c3Bvb2wtXFx1MDAzZWhzdGF0ZSA9IGg7XFxuLVxcdHNwb29sLVxcdTAwM2VtaW5faHBhZ2VzID0gbWluX2hwYWdlcztcXG4tXFxuLVxcdGlmIChtaW5faHBhZ2VzICE9IC0xIFxcdTAwMjZcXHUwMDI2IGh1Z2V0bGJfYWNjdF9tZW1vcnkoaCwgbWluX2hwYWdlcykpIHtcXG4tXFx0XFx0a2ZyZWUoc3Bvb2wpO1xcbi1cXHRcXHRyZXR1cm4gTlVMTDtcXG4tXFx0fVxcbi1cXHRzcG9vbC1cXHUwMDNlcnN2X2hwYWdlcyA9IG1pbl9ocGFnZXM7XFxuLVxcbi1cXHRyZXR1cm4gc3Bvb2w7XFxuLX1cXG4tXFxuLXZvaWQgaHVnZXBhZ2VfcHV0X3N1YnBvb2woc3RydWN0IGh1Z2VwYWdlX3N1YnBvb2wgKnNwb29sKVxcbi17XFxuLVxcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XFxuLVxcbi1cXHRzcGluX2xvY2tfaXJxc2F2ZShcXHUwMDI2c3Bvb2wtXFx1MDAzZWxvY2ssIGZsYWdzKTtcXG4tXFx0QlVHX09OKCFzcG9vbC1cXHUwMDNlY291bnQpO1xcbi1cXHRzcG9vbC1cXHUwMDNlY291bnQtLTtcXG4tXFx0dW5sb2NrX29yX3JlbGVhc2Vfc3VicG9vbChzcG9vbCwgZmxhZ3MpO1xcbi19XFxuLVxcbi0vKlxcbi0gKiBTdWJwb29sIGFjY291bnRpbmcgZm9yIGFsbG9jYXRpbmcgYW5kIHJlc2VydmluZyBwYWdlcy5cXG4tICogUmV0dXJuIC1FTk9NRU0gaWYgdGhlcmUgYXJlIG5vdCBlbm91Z2ggcmVzb3VyY2VzIHRvIHNhdGlzZnkgdGhlXFxuLSAqIHJlcXVlc3QuICBPdGhlcndpc2UsIHJldHVybiB0aGUgbnVtYmVyIG9mIHBhZ2VzIGJ5IHdoaWNoIHRoZVxcbi0gKiBnbG9iYWwgcG9vbHMgbXVzdCBiZSBhZGp1c3RlZCAodXB3YXJkKS4gIFRoZSByZXR1cm5lZCB2YWx1ZSBtYXlcXG4tICogb25seSBiZSBkaWZmZXJlbnQgdGhhbiB0aGUgcGFzc2VkIHZhbHVlIChkZWx0YSkgaW4gdGhlIGNhc2Ugd2hlcmVcXG4tICogYSBzdWJwb29sIG1pbmltdW0gc2l6ZSBtdXN0IGJlIG1haW50YWluZWQuXFxuLSAqL1xcbi1zdGF0aWMgbG9uZyBodWdlcGFnZV9zdWJwb29sX2dldF9wYWdlcyhzdHJ1Y3QgaHVnZXBhZ2Vfc3VicG9vbCAqc3Bvb2wsXFxuLVxcdFxcdFxcdFxcdCAgICAgIGxvbmcgZGVsdGEpXFxuLXtcXG4tXFx0bG9uZyByZXQgPSBkZWx0YTtcXG4tXFxuLVxcdGlmICghc3Bvb2wpXFxuLVxcdFxcdHJldHVybiByZXQ7XFxuLVxcbi1cXHRzcGluX2xvY2tfaXJxKFxcdTAwMjZzcG9vbC1cXHUwMDNlbG9jayk7XFxuLVxcbi1cXHRpZiAoc3Bvb2wtXFx1MDAzZW1heF9ocGFnZXMgIT0gLTEpIHtcXHRcXHQvKiBtYXhpbXVtIHNpemUgYWNjb3VudGluZyAqL1xcbi1cXHRcXHRpZiAoKHNwb29sLVxcdTAwM2V1c2VkX2hwYWdlcyArIGRlbHRhKSBcXHUwMDNjPSBzcG9vbC1cXHUwMDNlbWF4X2hwYWdlcylcXG4tXFx0XFx0XFx0c3Bvb2wtXFx1MDAzZXVzZWRfaHBhZ2VzICs9IGRlbHRhO1xcbi1cXHRcXHRlbHNlIHtcXG4tXFx0XFx0XFx0cmV0ID0gLUVOT01FTTtcXG4tXFx0XFx0XFx0Z290byB1bmxvY2tfcmV0O1xcbi1cXHRcXHR9XFxuLVxcdH1cXG4tXFxuLVxcdC8qIG1pbmltdW0gc2l6ZSBhY2NvdW50aW5nICovXFxuLVxcdGlmIChzcG9vbC1cXHUwMDNlbWluX2hwYWdlcyAhPSAtMSBcXHUwMDI2XFx1MDAyNiBzcG9vbC1cXHUwMDNlcnN2X2hwYWdlcykge1xcbi1cXHRcXHRpZiAoZGVsdGEgXFx1MDAzZSBzcG9vbC1cXHUwMDNlcnN2X2hwYWdlcykge1xcbi1cXHRcXHRcXHQvKlxcbi1cXHRcXHRcXHQgKiBBc2tpbmcgZm9yIG1vcmUgcmVzZXJ2ZXMgdGhhbiB0aG9zZSBhbHJlYWR5IHRha2VuIG9uXFxuLVxcdFxcdFxcdCAqIGJlaGFsZiBvZiBzdWJwb29sLiAgUmV0dXJuIGRpZmZlcmVuY2UuXFxuLVxcdFxcdFxcdCAqL1xcbi1cXHRcXHRcXHRyZXQgPSBkZWx0YSAtIHNwb29sLVxcdTAwM2Vyc3ZfaHBhZ2VzO1xcbi1cXHRcXHRcXHRzcG9vbC1cXHUwMDNlcnN2X2hwYWdlcyA9IDA7XFxuLVxcdFxcdH0gZWxzZSB7XFxuLVxcdFxcdFxcdHJldCA9IDA7XFx0LyogcmVzZXJ2ZXMgYWxyZWFkeSBhY2NvdW50ZWQgZm9yICovXFxuLVxcdFxcdFxcdHNwb29sLVxcdTAwM2Vyc3ZfaHBhZ2VzIC09IGRlbHRhO1xcbi1cXHRcXHR9XFxuLVxcdH1cXG4tXFxuLXVubG9ja19yZXQ6XFxuLVxcdHNwaW5fdW5sb2NrX2lycShcXHUwMDI2c3Bvb2wtXFx1MDAzZWxvY2spO1xcbi1cXHRyZXR1cm4gcmV0O1xcbi19XFxuLVxcbi0vKlxcbi0gKiBTdWJwb29sIGFjY291bnRpbmcgZm9yIGZyZWVpbmcgYW5kIHVucmVzZXJ2aW5nIHBhZ2VzLlxcbi0gKiBSZXR1cm4gdGhlIG51bWJlciBvZiBnbG9iYWwgcGFnZSByZXNlcnZhdGlvbnMgdGhhdCBtdXN0IGJlIGRyb3BwZWQuXFxuLSAqIFRoZSByZXR1cm4gdmFsdWUgbWF5IG9ubHkgYmUgZGlmZmVyZW50IHRoYW4gdGhlIHBhc3NlZCB2YWx1ZSAoZGVsdGEpXFxuLSAqIGluIHRoZSBjYXNlIHdoZXJlIGEgc3VicG9vbCBtaW5pbXVtIHNpemUgbXVzdCBiZSBtYWludGFpbmVkLlxcbi0gKi9cXG4tc3RhdGljIGxvbmcgaHVnZXBhZ2Vfc3VicG9vbF9wdXRfcGFnZXMoc3RydWN0IGh1Z2VwYWdlX3N1YnBvb2wgKnNwb29sLFxcbi1cXHRcXHRcXHRcXHQgICAgICAgbG9uZyBkZWx0YSlcXG4te1xcbi1cXHRsb25nIHJldCA9IGRlbHRhO1xcbi1cXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xcbi1cXG4tXFx0aWYgKCFzcG9vbClcXG4tXFx0XFx0cmV0dXJuIGRlbHRhO1xcbi1cXG4tXFx0c3Bpbl9sb2NrX2lycXNhdmUoXFx1MDAyNnNwb29sLVxcdTAwM2Vsb2NrLCBmbGFncyk7XFxuLVxcbi1cXHRpZiAoc3Bvb2wtXFx1MDAzZW1heF9ocGFnZXMgIT0gLTEpXFx0XFx0LyogbWF4aW11bSBzaXplIGFjY291bnRpbmcgKi9cXG4tXFx0XFx0c3Bvb2wtXFx1MDAzZXVzZWRfaHBhZ2VzIC09IGRlbHRhO1xcbi1cXG4tXFx0IC8qIG1pbmltdW0gc2l6ZSBhY2NvdW50aW5nICovXFxuLVxcdGlmIChzcG9vbC1cXHUwMDNlbWluX2hwYWdlcyAhPSAtMSBcXHUwMDI2XFx1MDAyNiBzcG9vbC1cXHUwMDNldXNlZF9ocGFnZXMgXFx1MDAzYyBzcG9vbC1cXHUwMDNlbWluX2hwYWdlcykge1xcbi1cXHRcXHRpZiAoc3Bvb2wtXFx1MDAzZXJzdl9ocGFnZXMgKyBkZWx0YSBcXHUwMDNjPSBzcG9vbC1cXHUwMDNlbWluX2hwYWdlcylcXG4tXFx0XFx0XFx0cmV0ID0gMDtcXG4tXFx0XFx0ZWxzZVxcbi1cXHRcXHRcXHRyZXQgPSBzcG9vbC1cXHUwMDNlcnN2X2hwYWdlcyArIGRlbHRhIC0gc3Bvb2wtXFx1MDAzZW1pbl9ocGFnZXM7XFxuLVxcbi1cXHRcXHRzcG9vbC1cXHUwMDNlcnN2X2hwYWdlcyArPSBkZWx0YTtcXG4tXFx0XFx0aWYgKHNwb29sLVxcdTAwM2Vyc3ZfaHBhZ2VzIFxcdTAwM2Ugc3Bvb2wtXFx1MDAzZW1pbl9ocGFnZXMpXFxuLVxcdFxcdFxcdHNwb29sLVxcdTAwM2Vyc3ZfaHBhZ2VzID0gc3Bvb2wtXFx1MDAzZW1pbl9ocGFnZXM7XFxuLVxcdH1cXG4tXFxuLVxcdC8qXFxuLVxcdCAqIElmIGh1Z2V0bGJmc19wdXRfc3VwZXIgY291bGRuJ3QgZnJlZSBzcG9vbCBkdWUgdG8gYW4gb3V0c3RhbmRpbmdcXG4tXFx0ICogcXVvdGEgcmVmZXJlbmNlLCBmcmVlIGl0IG5vdy5cXG4tXFx0ICovXFxuLVxcdHVubG9ja19vcl9yZWxlYXNlX3N1YnBvb2woc3Bvb2wsIGZsYWdzKTtcXG4tXFxuLVxcdHJldHVybiByZXQ7XFxuLX1cXG4tXFxuIHN0YXRpYyBpbmxpbmUgc3RydWN0IGh1Z2VwYWdlX3N1YnBvb2wgKnN1YnBvb2xfdm1hKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxcbiB7XFxuIFxcdHJldHVybiBzdWJwb29sX2lub2RlKGZpbGVfaW5vZGUodm1hLVxcdTAwM2V2bV9maWxlKSk7XFxuQEAgLTI4NTgsMTEgKzI3MDksMTMgQEAgc3RydWN0IGZvbGlvICphbGxvY19odWdldGxiX2ZvbGlvKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbiBcXHRzdHJ1Y3QgaHVnZXBhZ2Vfc3VicG9vbCAqc3Bvb2wgPSBzdWJwb29sX3ZtYSh2bWEpO1xcbiBcXHRzdHJ1Y3QgaHN0YXRlICpoID0gaHN0YXRlX3ZtYSh2bWEpO1xcbiBcXHRzdHJ1Y3QgZm9saW8gKmZvbGlvO1xcbi1cXHRsb25nIHJldHZhbCwgZ2JsX2NoZywgZ2JsX3Jlc2VydmU7XFxuK1xcdGxvbmcgcmV0dmFsLCBnYmxfY2hnO1xcbiBcXHRtYXBfY2hnX3N0YXRlIG1hcF9jaGc7XFxuIFxcdGludCByZXQsIGlkeDtcXG4gXFx0c3RydWN0IGh1Z2V0bGJfY2dyb3VwICpoX2NnID0gTlVMTDtcXG4gXFx0c3RydWN0IGh1Z2V0bGJfY2dyb3VwICpoX2NnX3JzdmQgPSBOVUxMO1xcbitcXHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtX2NnID0gTlVMTDtcXG4rXFx0c3RydWN0IG9ial9jZ3JvdXAgKm9ial9jZyA9IE5VTEw7XFxuIFxcdGdmcF90IGdmcCA9IGh0bGJfYWxsb2NfbWFzayhoKSB8IF9fR0ZQX1JFVFJZX01BWUZBSUw7XFxuIFxcbiBcXHRpZHggPSBoc3RhdGVfaW5kZXgoaCk7XFxuQEAgLTI5MjIsNiArMjc3NSwxMSBAQCBzdHJ1Y3QgZm9saW8gKmFsbG9jX2h1Z2V0bGJfZm9saW8oc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuIFxcdGlmIChyZXQpXFxuIFxcdFxcdGdvdG8gb3V0X3VuY2hhcmdlX2Nncm91cF9yZXNlcnZhdGlvbjtcXG4gXFxuK1xcdHJldCA9IG1lbV9jZ3JvdXBfaHVnZXRsYl90cnlfY2hhcmdlKHBhZ2VzX3Blcl9odWdlX3BhZ2UoaCksIGdmcCxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgIFxcdTAwMjZtZW1fY2csIFxcdTAwMjZvYmpfY2cpO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRnb3RvIG91dF91bmNoYXJnZV9jZ3JvdXA7XFxuK1xcbiBcXHRzcGluX2xvY2tfaXJxKFxcdTAwMjZodWdldGxiX2xvY2spO1xcbiBcXHQvKlxcbiBcXHQgKiBnbGJfY2hnIGlzIHBhc3NlZCB0byBpbmRpY2F0ZSB3aGV0aGVyIG9yIG5vdCBhIHBhZ2UgbXVzdCBiZSB0YWtlblxcbkBAIC0yOTMzLDcgKzI3OTEsNyBAQCBzdHJ1Y3QgZm9saW8gKmFsbG9jX2h1Z2V0bGJfZm9saW8oc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuIFxcdFxcdHNwaW5fdW5sb2NrX2lycShcXHUwMDI2aHVnZXRsYl9sb2NrKTtcXG4gXFx0XFx0Zm9saW8gPSBhbGxvY19idWRkeV9odWdldGxiX2ZvbGlvX3dpdGhfbXBvbChoLCB2bWEsIGFkZHIpO1xcbiBcXHRcXHRpZiAoIWZvbGlvKVxcbi1cXHRcXHRcXHRnb3RvIG91dF91bmNoYXJnZV9jZ3JvdXA7XFxuK1xcdFxcdFxcdGdvdG8gb3V0X3VuY2hhcmdlX2Nncm91cF9tZW1jZztcXG4gXFx0XFx0c3Bpbl9sb2NrX2lycShcXHUwMDI2aHVnZXRsYl9sb2NrKTtcXG4gXFx0XFx0bGlzdF9hZGQoXFx1MDAyNmZvbGlvLVxcdTAwM2VscnUsIFxcdTAwMjZoLVxcdTAwM2VodWdlcGFnZV9hY3RpdmVsaXN0KTtcXG4gXFx0XFx0Zm9saW9fcmVmX3VuZnJlZXplKGZvbGlvLCAxKTtcXG5AQCAtMjk2MCw2ICsyODE4LDkgQEAgc3RydWN0IGZvbGlvICphbGxvY19odWdldGxiX2ZvbGlvKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbiBcXG4gXFx0c3Bpbl91bmxvY2tfaXJxKFxcdTAwMjZodWdldGxiX2xvY2spO1xcbiBcXG4rXFx0bWVtX2Nncm91cF9odWdldGxiX2NvbW1pdF9jaGFyZ2UoZm9saW8sIG1lbV9jZywgb2JqX2NnKTtcXG4rXFx0bHJ1dmVjX3N0YXRfbW9kX2ZvbGlvKGZvbGlvLCBOUl9IVUdFVExCLCBwYWdlc19wZXJfaHVnZV9wYWdlKGgpKTtcXG4rXFxuIFxcdGh1Z2V0bGJfc2V0X2ZvbGlvX3N1YnBvb2woZm9saW8sIHNwb29sKTtcXG4gXFxuIFxcdGlmIChtYXBfY2hnICE9IE1BUF9DSEdfRU5GT1JDRUQpIHtcXG5AQCAtMjk4NywyMSArMjg0OCwxMCBAQCBzdHJ1Y3QgZm9saW8gKmFsbG9jX2h1Z2V0bGJfZm9saW8oc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuIFxcdFxcdH1cXG4gXFx0fVxcbiBcXG4tXFx0cmV0ID0gbWVtX2Nncm91cF9jaGFyZ2VfaHVnZXRsYihmb2xpbywgZ2ZwKTtcXG4tXFx0LypcXG4tXFx0ICogVW5jb25kaXRpb25hbGx5IGluY3JlbWVudCBOUl9IVUdFVExCIGhlcmUuIElmIGl0IHR1cm5zIG91dCB0aGF0XFxuLVxcdCAqIG1lbV9jZ3JvdXBfY2hhcmdlX2h1Z2V0bGIgZmFpbGVkLCB0aGVuIGltbWVkaWF0ZWx5IGZyZWUgdGhlIHBhZ2UgYW5kXFxuLVxcdCAqIGRlY3JlbWVudCBOUl9IVUdFVExCLlxcbi1cXHQgKi9cXG4tXFx0bHJ1dmVjX3N0YXRfbW9kX2ZvbGlvKGZvbGlvLCBOUl9IVUdFVExCLCBwYWdlc19wZXJfaHVnZV9wYWdlKGgpKTtcXG4tXFxuLVxcdGlmIChyZXQgPT0gLUVOT01FTSkge1xcbi1cXHRcXHRmcmVlX2h1Z2VfZm9saW8oZm9saW8pO1xcbi1cXHRcXHRyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTtcXG4tXFx0fVxcbi1cXG4gXFx0cmV0dXJuIGZvbGlvO1xcbiBcXG4rb3V0X3VuY2hhcmdlX2Nncm91cF9tZW1jZzpcXG4rXFx0bWVtX2Nncm91cF9odWdldGxiX2NhbmNlbF9jaGFyZ2UocGFnZXNfcGVyX2h1Z2VfcGFnZShoKSwgbWVtX2NnLCBvYmpfY2cpO1xcbiBvdXRfdW5jaGFyZ2VfY2dyb3VwOlxcbiBcXHRodWdldGxiX2Nncm91cF91bmNoYXJnZV9jZ3JvdXAoaWR4LCBwYWdlc19wZXJfaHVnZV9wYWdlKGgpLCBoX2NnKTtcXG4gb3V0X3VuY2hhcmdlX2Nncm91cF9yZXNlcnZhdGlvbjpcXG5AQCAtMzAwOSwxOSArMjg1OSwyOCBAQCBzdHJ1Y3QgZm9saW8gKmFsbG9jX2h1Z2V0bGJfZm9saW8oc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuIFxcdFxcdGh1Z2V0bGJfY2dyb3VwX3VuY2hhcmdlX2Nncm91cF9yc3ZkKGlkeCwgcGFnZXNfcGVyX2h1Z2VfcGFnZShoKSxcXG4gXFx0XFx0XFx0XFx0XFx0XFx0ICAgIGhfY2dfcnN2ZCk7XFxuIG91dF9zdWJwb29sX3B1dDpcXG4tXFx0LypcXG4tXFx0ICogcHV0IHBhZ2UgdG8gc3VicG9vbCBpZmYgdGhlIHF1b3RhIG9mIHN1YnBvb2wncyByc3ZfaHBhZ2VzIGlzIHVzZWRcXG4tXFx0ICogZHVyaW5nIGh1Z2VwYWdlX3N1YnBvb2xfZ2V0X3BhZ2VzLlxcbi1cXHQgKi9cXG4tXFx0aWYgKG1hcF9jaGcgXFx1MDAyNlxcdTAwMjYgIWdibF9jaGcpIHtcXG4tXFx0XFx0Z2JsX3Jlc2VydmUgPSBodWdlcGFnZV9zdWJwb29sX3B1dF9wYWdlcyhzcG9vbCwgMSk7XFxuLVxcdFxcdGh1Z2V0bGJfYWNjdF9tZW1vcnkoaCwgLWdibF9yZXNlcnZlKTtcXG4rXFx0aWYgKG1hcF9jaGcpIHtcXG4rXFx0XFx0bG9uZyBnYmxfcmVzZXJ2ZSA9IGh1Z2VwYWdlX3N1YnBvb2xfcHV0X3BhZ2VzKHNwb29sLCAxKTtcXG4rXFxuK1xcdFxcdGlmICghZ2JsX2NoZylcXG4rXFx0XFx0XFx0aHVnZXRsYl9hY2N0X21lbW9yeShoLCAtZ2JsX3Jlc2VydmUpO1xcbiBcXHR9XFxuIFxcbiBcXG4gb3V0X2VuZF9yZXNlcnZhdGlvbjpcXG4gXFx0aWYgKG1hcF9jaGcgIT0gTUFQX0NIR19FTkZPUkNFRClcXG4gXFx0XFx0dm1hX2VuZF9yZXNlcnZhdGlvbihoLCB2bWEsIGFkZHIpO1xcbitcXG4rXFx0LypcXG4rXFx0ICogUmV0dXJuIC1FTk9TUEMgd2hlbiB0aGlzIGZ1bmN0aW9uIGZhaWxzIHRvIGFsbG9jYXRlIG9yXFxuK1xcdCAqIGNoYXJnZSBhIGh1Z2UgcGFnZS4gSWYgYSBzdGFuZGFyZCAoUEFHRV9TSVpFKSBwYWdlXFxuK1xcdCAqIGFsbG9jYXRpb24gZmFpbHMsIHRoZSBPT00ga2lsbGVyIGlzIGdpdmVuIGEgY2hhbmNlIHRvIHJ1bixcXG4rXFx0ICogd2hpY2ggbWF5IHJlc29sdmUgdGhlIGZhaWx1cmUgb24gcmV0cnkuIEhvd2V2ZXIsIGZvclxcbitcXHQgKiBIdWdlVExCIGFsbG9jYXRpb25zLCB0aGUgT09NIGtpbGxlciBpcyBub3QgdHJpZ2dlcmVkLlxcbitcXHQgKiBSZXR1cm5pbmcgLUVOT01FTSAob3IgYW55dGhpbmcgcmVzdWx0aW5nIGluIFZNX0ZBVUxUX09PTSlcXG4rXFx0ICogd291bGQgbGVhayB0byB0aGUgI1BGIGhhbmRsZXIsIGNhdXNpbmcgaXQgdG8gbG9vcFxcbitcXHQgKiBpbmRlZmluaXRlbHkgcmV0cnlpbmcgdGhlIGZhdWx0LlxcbitcXHQgKi9cXG4gXFx0cmV0dXJuIEVSUl9QVFIoLUVOT1NQQyk7XFxuIH1cXG4gXFxuQEAgLTQ1OTMsNyArNDQ1Miw3IEBAIHVuc2lnbmVkIGxvbmcgaHVnZXRsYl90b3RhbF9wYWdlcyh2b2lkKVxcbiBcXHRyZXR1cm4gbnJfdG90YWxfcGFnZXM7XFxuIH1cXG4gXFxuLXN0YXRpYyBpbnQgaHVnZXRsYl9hY2N0X21lbW9yeShzdHJ1Y3QgaHN0YXRlICpoLCBsb25nIGRlbHRhKVxcbitpbnQgaHVnZXRsYl9hY2N0X21lbW9yeShzdHJ1Y3QgaHN0YXRlICpoLCBsb25nIGRlbHRhKVxcbiB7XFxuIFxcdGludCByZXQgPSAtRU5PTUVNO1xcbiBcXG5AQCAtNjU0Miw3ICs2NDAxLDcgQEAgbG9uZyBodWdldGxiX3Jlc2VydmVfcGFnZXMoc3RydWN0IGlub2RlICppbm9kZSxcXG4gXFx0XFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuIFxcdFxcdHZtYV9mbGFnc190IHZtYV9mbGFncylcXG4ge1xcbi1cXHRsb25nIGNoZyA9IC0xLCBhZGQgPSAtMSwgc3Bvb2xfcmVzdiwgZ2JsX3Jlc3Y7XFxuK1xcdGxvbmcgY2hnID0gLTEsIGFkZCA9IC0xLCBnYmxfcmVzdjtcXG4gXFx0c3RydWN0IGhzdGF0ZSAqaCA9IGhzdGF0ZV9pbm9kZShpbm9kZSk7XFxuIFxcdHN0cnVjdCBodWdlcGFnZV9zdWJwb29sICpzcG9vbCA9IHN1YnBvb2xfaW5vZGUoaW5vZGUpO1xcbiBcXHRzdHJ1Y3QgcmVzdl9tYXAgKnJlc3ZfbWFwO1xcbkBAIC02Njg3LDI2ICs2NTQ2LDIxIEBAIGxvbmcgaHVnZXRsYl9yZXNlcnZlX3BhZ2VzKHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuIFxcdH1cXG4gXFx0cmV0dXJuIGNoZztcXG4gXFxuLW91dF9wdXRfcGFnZXM6XFxuLVxcdHNwb29sX3Jlc3YgPSBjaGcgLSBnYmxfcmVzZXJ2ZTtcXG4tXFx0aWYgKHNwb29sX3Jlc3YpIHtcXG4tXFx0XFx0LyogcHV0IHN1YiBwb29sJ3MgcmVzZXJ2YXRpb24gYmFjaywgY2hnIC0gZ2JsX3Jlc2VydmUgKi9cXG4tXFx0XFx0Z2JsX3Jlc3YgPSBodWdlcGFnZV9zdWJwb29sX3B1dF9wYWdlcyhzcG9vbCwgc3Bvb2xfcmVzdik7XFxuLVxcdFxcdC8qXFxuLVxcdFxcdCAqIHN1YnBvb2wncyByZXNlcnZlZCBwYWdlcyBjYW4gbm90IGJlIHB1dCBiYWNrIGR1ZSB0byByYWNlLFxcbi1cXHRcXHQgKiByZXR1cm4gdG8gaHN0YXRlLlxcbi1cXHRcXHQgKi9cXG4tXFx0XFx0aHVnZXRsYl9hY2N0X21lbW9yeShoLCAtZ2JsX3Jlc3YpO1xcbi1cXHR9XFxuLVxcdC8qIFJlc3RvcmUgdXNlZF9ocGFnZXMgZm9yIHBhZ2VzIHRoYXQgZmFpbGVkIGdsb2JhbCByZXNlcnZhdGlvbiAqL1xcbi1cXHRpZiAoZ2JsX3Jlc2VydmUgXFx1MDAyNlxcdTAwMjYgc3Bvb2wpIHtcXG4tXFx0XFx0dW5zaWduZWQgbG9uZyBmbGFncztcXG4rIG91dF9wdXRfcGFnZXM6XFxuK1xcdC8qXFxuK1xcdCAqIFJldHVybiBhbGwgdGhhdCB3YXMgcmVxdWVzdGVkIGZyb20gdGhlIHN1YnBvb2wsIGxldCBzdWJwb29sXFxuK1xcdCAqIHRlbGwgdXMgdGhlIG5ldyBudW1iZXIgb2YgcmVzZXJ2YXRpb25zIHRoYXQgbmVlZCB0byBiZVxcbitcXHQgKiByZXR1cm5lZCB0byB0aGUgZ2xvYmFsIHBvb2wuXFxuK1xcdCAqL1xcbitcXHRnYmxfcmVzdiA9IGh1Z2VwYWdlX3N1YnBvb2xfcHV0X3BhZ2VzKHNwb29sLCBjaGcpO1xcbitcXHQvKlxcbitcXHQgKiBUaGVyZSBtYXkgYmUgYSBkaWZmZXJlbmNlIGJldHdlZW4gdGhlIG51bWJlciBvZlxcbitcXHQgKiByZXNlcnZhdGlvbnMgdG8gY29uc3VtZSBhbmQgdGhlIG51bWJlciB0byByZXN0b3JlIG5vdyBpZlxcbitcXHQgKiB0aGVyZSBhcmUgbXVsdGlwbGUgdGhyZWFkcyBpbnRlcmFjdGluZyB3aXRoIHRoZSBzdWJwb29sIC1cXG4rXFx0ICogcmVzdG9yZSB0aGUgZGlmZmVyZW5jZS5cXG4rXFx0ICovXFxuK1xcdGh1Z2V0bGJfYWNjdF9tZW1vcnkoaCwgLShnYmxfcmVzdiAtIGdibF9yZXNlcnZlKSk7XFxuIFxcbi1cXHRcXHRzcGluX2xvY2tfaXJxc2F2ZShcXHUwMDI2c3Bvb2wtXFx1MDAzZWxvY2ssIGZsYWdzKTtcXG4tXFx0XFx0aWYgKHNwb29sLVxcdTAwM2VtYXhfaHBhZ2VzICE9IC0xKVxcbi1cXHRcXHRcXHRzcG9vbC1cXHUwMDNldXNlZF9ocGFnZXMgLT0gZ2JsX3Jlc2VydmU7XFxuLVxcdFxcdHVubG9ja19vcl9yZWxlYXNlX3N1YnBvb2woc3Bvb2wsIGZsYWdzKTtcXG4tXFx0fVxcbiBvdXRfdW5jaGFyZ2VfY2dyb3VwOlxcbiBcXHRodWdldGxiX2Nncm91cF91bmNoYXJnZV9jZ3JvdXBfcnN2ZChoc3RhdGVfaW5kZXgoaCksXFxuIFxcdFxcdFxcdFxcdFxcdCAgICBjaGcgKiBwYWdlc19wZXJfaHVnZV9wYWdlKGgpLCBoX2NnKTtcXG5kaWZmIC0tZ2l0IGEvbW0vaHVnZXRsYl9zdWJwb29sLmMgYi9tbS9odWdldGxiX3N1YnBvb2wuY1xcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLmViNTQ3MmJkZjIxOTI0XFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL21tL2h1Z2V0bGJfc3VicG9vbC5jXFxuQEAgLTAsMCArMSwyMjMgQEBcXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG4rLypcXG4rICogU3VicG9vbCBhbmQgcmVzZXJ2ZSBhY2NvdW50aW5nIGZvciBIdWdlVExCIGZvbGlvcy5cXG4rICogRXh0cmFjdGVkIGZyb20gbW0vaHVnZXRsYi5jXFxuKyAqL1xcbitcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3R5cGVzLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9rZXJuZWwuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3NsYWIuaFxcdTAwM2VcXG4rI2lmZGVmIF9fS0VSTkVMX19cXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2h1Z2V0bGIuaFxcdTAwM2VcXG4rI2VuZGlmXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9zcGlubG9jay5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvYnVnLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcXCJodWdldGxiX3N1YnBvb2wuaFxcXCJcXG4rXFxuK3N0cnVjdCBodWdlcGFnZV9zdWJwb29sIHtcXG4rXFx0c3BpbmxvY2tfdCBsb2NrO1xcbitcXHRsb25nIGNvdW50O1xcbitcXHRsb25nIG1heF9ocGFnZXM7XFx0LyogTWF4aW11bSBodWdlIHBhZ2VzIG9yIC0xIGlmIG5vIG1heGltdW0uICovXFxuK1xcdGxvbmcgdXNlZF9ocGFnZXM7XFx0LyogVXNlZCBwYWdlIGNvdW50LCBpbmNsdWRlcyBib3RoICovXFxuK1xcdFxcdFxcdFxcdC8qIGFsbG9jYXRlZCBhbmQgcmVzZXJ2ZWQgcGFnZXMuICovXFxuK1xcdHN0cnVjdCBoc3RhdGUgKmhzdGF0ZTtcXG4rXFx0bG9uZyBtaW5faHBhZ2VzO1xcdC8qIE1pbmltdW0gaHVnZSBwYWdlcyBvciAtMSBpZiBubyBtaW5pbXVtLiAqL1xcbitcXHRsb25nIHJzdl9ocGFnZXM7XFx0LyogUGFnZXMgcmVzZXJ2ZWQgYWdhaW5zdCBnbG9iYWwgcG9vbCB0byAqL1xcbitcXHRcXHRcXHRcXHQvKiBzYXRpc2Z5IG1pbmltdW0gc2l6ZS4gKi9cXG4rfTtcXG4rXFxuK3N0YXRpYyBpbmxpbmUgYm9vbCBzdWJwb29sX2lzX2ZyZWUoc3RydWN0IGh1Z2VwYWdlX3N1YnBvb2wgKnNwb29sKVxcbit7XFxuK1xcdGlmIChzcG9vbC1cXHUwMDNlY291bnQpXFxuK1xcdFxcdHJldHVybiBmYWxzZTtcXG4rXFxuK1xcdHJldHVybiBzcG9vbC1cXHUwMDNldXNlZF9ocGFnZXMgPT0gMDtcXG4rfVxcbitcXG4rc3RhdGljIGlubGluZSB2b2lkIHVubG9ja19vcl9yZWxlYXNlX3N1YnBvb2woc3RydWN0IGh1Z2VwYWdlX3N1YnBvb2wgKnNwb29sLFxcbitcXHRcXHRcXHRcXHRcXHRcXHR1bnNpZ25lZCBsb25nIGlycV9mbGFncylcXG4re1xcbitcXHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFxcdTAwMjZzcG9vbC1cXHUwMDNlbG9jaywgaXJxX2ZsYWdzKTtcXG4rXFxuK1xcdC8qXFxuK1xcdCAqIElmIG5vIHBhZ2VzIGFyZSB1c2VkLCBhbmQgbm8gb3RoZXIgaGFuZGxlcyB0byB0aGUgc3VicG9vbFxcbitcXHQgKiByZW1haW4sIGdpdmUgdXAgYW55IHJlc2VydmF0aW9ucyBiYXNlZCBvbiBtaW5pbXVtIHNpemUgYW5kXFxuK1xcdCAqIGZyZWUgdGhlIHN1YnBvb2wuXFxuK1xcdCAqL1xcbitcXHRpZiAoc3VicG9vbF9pc19mcmVlKHNwb29sKSkge1xcbitcXHRcXHRpZiAoc3Bvb2wtXFx1MDAzZW1pbl9ocGFnZXMgIT0gLTEpXFxuK1xcdFxcdFxcdGh1Z2V0bGJfYWNjdF9tZW1vcnkoc3Bvb2wtXFx1MDAzZWhzdGF0ZSxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0LXNwb29sLVxcdTAwM2VtaW5faHBhZ2VzKTtcXG4rXFx0XFx0a2ZyZWUoc3Bvb2wpO1xcbitcXHR9XFxuK31cXG4rXFxuK2xvbmcgaHVnZXBhZ2Vfc3VicG9vbF9mcmVlX2hwYWdlcyhzdHJ1Y3QgaHVnZXBhZ2Vfc3VicG9vbCAqc3Bvb2wpXFxuK3tcXG4rXFx0bG9uZyBmcmVlX3BhZ2VzO1xcbitcXG4rXFx0c3Bpbl9sb2NrX2lycShcXHUwMDI2c3Bvb2wtXFx1MDAzZWxvY2spO1xcbitcXHRpZiAoc3Bvb2wtXFx1MDAzZW1heF9ocGFnZXMgPT0gLTEpXFxuK1xcdFxcdGZyZWVfcGFnZXMgPSAtMTtcXG4rXFx0ZWxzZVxcbitcXHRcXHRmcmVlX3BhZ2VzID0gc3Bvb2wtXFx1MDAzZW1heF9ocGFnZXMgLSBzcG9vbC1cXHUwMDNldXNlZF9ocGFnZXM7XFxuK1xcdHNwaW5fdW5sb2NrX2lycShcXHUwMDI2c3Bvb2wtXFx1MDAzZWxvY2spO1xcbitcXG4rXFx0cmV0dXJuIGZyZWVfcGFnZXM7XFxuK31cXG4rXFxuK3N0YXRpYyB1bnNpZ25lZCBpbnQgaHVnZXBhZ2Vfc3VicG9vbF9ocGFnZV9zaGlmdChzdHJ1Y3QgaHVnZXBhZ2Vfc3VicG9vbCAqc3Bvb2wpXFxuK3tcXG4rXFx0cmV0dXJuIGh1Z2VfcGFnZV9zaGlmdChzcG9vbC1cXHUwMDNlaHN0YXRlKTtcXG4rfVxcbitcXG4rdW5zaWduZWQgbG9uZyBsb25nIGh1Z2VwYWdlX3N1YnBvb2xfbWF4X3NpemUoc3RydWN0IGh1Z2VwYWdlX3N1YnBvb2wgKnNwb29sKVxcbit7XFxuK1xcdGlmIChzcG9vbC1cXHUwMDNlbWF4X2hwYWdlcyA9PSAtMSlcXG4rXFx0XFx0cmV0dXJuIC0xVUxMO1xcbitcXHRyZXR1cm4gKHVuc2lnbmVkIGxvbmcgbG9uZylzcG9vbC1cXHUwMDNlbWF4X2hwYWdlcyBcXHUwMDNjXFx1MDAzYyBodWdlcGFnZV9zdWJwb29sX2hwYWdlX3NoaWZ0KHNwb29sKTtcXG4rfVxcbitcXG4rdW5zaWduZWQgbG9uZyBsb25nIGh1Z2VwYWdlX3N1YnBvb2xfbWluX3NpemUoc3RydWN0IGh1Z2VwYWdlX3N1YnBvb2wgKnNwb29sKVxcbit7XFxuK1xcdGlmIChzcG9vbC1cXHUwMDNlbWluX2hwYWdlcyA9PSAtMSlcXG4rXFx0XFx0cmV0dXJuIC0xVUxMO1xcbitcXHRyZXR1cm4gKHVuc2lnbmVkIGxvbmcgbG9uZylzcG9vbC1cXHUwMDNlbWluX2hwYWdlcyBcXHUwMDNjXFx1MDAzYyBodWdlcGFnZV9zdWJwb29sX2hwYWdlX3NoaWZ0KHNwb29sKTtcXG4rfVxcbitcXG4rbG9uZyBodWdlcGFnZV9zdWJwb29sX21heF9ocGFnZXMoc3RydWN0IGh1Z2VwYWdlX3N1YnBvb2wgKnNwb29sKVxcbit7XFxuK1xcdGxvbmcgbWF4X2hwYWdlcztcXG4rXFxuK1xcdHNwaW5fbG9ja19pcnEoXFx1MDAyNnNwb29sLVxcdTAwM2Vsb2NrKTtcXG4rXFx0bWF4X2hwYWdlcyA9IHNwb29sLVxcdTAwM2VtYXhfaHBhZ2VzO1xcbitcXHRzcGluX3VubG9ja19pcnEoXFx1MDAyNnNwb29sLVxcdTAwM2Vsb2NrKTtcXG4rXFxuK1xcdHJldHVybiBtYXhfaHBhZ2VzO1xcbit9XFxuK1xcbitzdHJ1Y3QgaHVnZXBhZ2Vfc3VicG9vbCAqaHVnZXBhZ2VfbmV3X3N1YnBvb2woc3RydWN0IGhzdGF0ZSAqaCwgbG9uZyBtYXhfaHBhZ2VzLFxcbitcXHRcXHRcXHRcXHRcXHRcXHRsb25nIG1pbl9ocGFnZXMpXFxuK3tcXG4rXFx0c3RydWN0IGh1Z2VwYWdlX3N1YnBvb2wgKnNwb29sO1xcbitcXG4rXFx0c3Bvb2wgPSBremFsbG9jX29iaigqc3Bvb2wpO1xcbitcXHRpZiAoIXNwb29sKVxcbitcXHRcXHRyZXR1cm4gTlVMTDtcXG4rXFxuK1xcdHNwaW5fbG9ja19pbml0KFxcdTAwMjZzcG9vbC1cXHUwMDNlbG9jayk7XFxuK1xcdHNwb29sLVxcdTAwM2Vjb3VudCA9IDE7XFxuK1xcdHNwb29sLVxcdTAwM2VtYXhfaHBhZ2VzID0gbWF4X2hwYWdlcztcXG4rXFx0c3Bvb2wtXFx1MDAzZWhzdGF0ZSA9IGg7XFxuK1xcdHNwb29sLVxcdTAwM2VtaW5faHBhZ2VzID0gbWluX2hwYWdlcztcXG4rXFxuK1xcdGlmIChtaW5faHBhZ2VzICE9IC0xIFxcdTAwMjZcXHUwMDI2IGh1Z2V0bGJfYWNjdF9tZW1vcnkoaCwgbWluX2hwYWdlcykpIHtcXG4rXFx0XFx0a2ZyZWUoc3Bvb2wpO1xcbitcXHRcXHRyZXR1cm4gTlVMTDtcXG4rXFx0fVxcbitcXHRzcG9vbC1cXHUwMDNlcnN2X2hwYWdlcyA9IG1pbl9ocGFnZXM7XFxuK1xcbitcXHRyZXR1cm4gc3Bvb2w7XFxuK31cXG4rXFxuK3ZvaWQgaHVnZXBhZ2VfcHV0X3N1YnBvb2woc3RydWN0IGh1Z2VwYWdlX3N1YnBvb2wgKnNwb29sKVxcbit7XFxuK1xcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XFxuK1xcbitcXHRzcGluX2xvY2tfaXJxc2F2ZShcXHUwMDI2c3Bvb2wtXFx1MDAzZWxvY2ssIGZsYWdzKTtcXG4rXFx0QlVHX09OKCFzcG9vbC1cXHUwMDNlY291bnQpO1xcbitcXHRzcG9vbC1cXHUwMDNlY291bnQtLTtcXG4rXFx0dW5sb2NrX29yX3JlbGVhc2Vfc3VicG9vbChzcG9vbCwgZmxhZ3MpO1xcbit9XFxuK1xcbisvKlxcbisgKiBTdWJwb29sIGFjY291bnRpbmcgZm9yIGFsbG9jYXRpbmcgYW5kIHJlc2VydmluZyBwYWdlcy5cXG4rICogUmV0dXJuIC1FTk9NRU0gaWYgdGhlcmUgYXJlIG5vdCBlbm91Z2ggcmVzb3VyY2VzIHRvIHNhdGlzZnkgdGhlXFxuKyAqIHJlcXVlc3QuICBPdGhlcndpc2UsIHJldHVybiB0aGUgbnVtYmVyIG9mIHBhZ2VzIGJ5IHdoaWNoIHRoZVxcbisgKiBnbG9iYWwgcG9vbHMgbXVzdCBiZSBhZGp1c3RlZCAodXB3YXJkKS4gIFRoZSByZXR1cm5lZCB2YWx1ZSBtYXlcXG4rICogb25seSBiZSBkaWZmZXJlbnQgdGhhbiB0aGUgcGFzc2VkIHZhbHVlIChkZWx0YSkgaW4gdGhlIGNhc2Ugd2hlcmVcXG4rICogYSBzdWJwb29sIG1pbmltdW0gc2l6ZSBtdXN0IGJlIG1haW50YWluZWQuXFxuKyAqL1xcbitsb25nIGh1Z2VwYWdlX3N1YnBvb2xfZ2V0X3BhZ2VzKHN0cnVjdCBodWdlcGFnZV9zdWJwb29sICpzcG9vbCxcXG4rXFx0XFx0XFx0XFx0ICAgICAgbG9uZyBkZWx0YSlcXG4re1xcbitcXHRsb25nIHJldCA9IGRlbHRhO1xcbitcXG4rXFx0aWYgKCFzcG9vbClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdHNwaW5fbG9ja19pcnEoXFx1MDAyNnNwb29sLVxcdTAwM2Vsb2NrKTtcXG4rXFxuK1xcdGlmIChzcG9vbC1cXHUwMDNlbWF4X2hwYWdlcyAhPSAtMSBcXHUwMDI2XFx1MDAyNlxcbitcXHQgICAgc3Bvb2wtXFx1MDAzZXVzZWRfaHBhZ2VzICsgZGVsdGEgXFx1MDAzZSBzcG9vbC1cXHUwMDNlbWF4X2hwYWdlcykge1xcbitcXHRcXHRyZXQgPSAtRU5PTUVNO1xcbitcXHRcXHRnb3RvIHVubG9ja19yZXQ7XFxuK1xcdH1cXG4rXFxuK1xcdHNwb29sLVxcdTAwM2V1c2VkX2hwYWdlcyArPSBkZWx0YTtcXG4rXFxuK1xcdC8qIG1pbmltdW0gc2l6ZSBhY2NvdW50aW5nICovXFxuK1xcdGlmIChzcG9vbC1cXHUwMDNlbWluX2hwYWdlcyAhPSAtMSBcXHUwMDI2XFx1MDAyNiBzcG9vbC1cXHUwMDNlcnN2X2hwYWdlcykge1xcbitcXHRcXHRpZiAoZGVsdGEgXFx1MDAzZSBzcG9vbC1cXHUwMDNlcnN2X2hwYWdlcykge1xcbitcXHRcXHRcXHQvKlxcbitcXHRcXHRcXHQgKiBBc2tpbmcgZm9yIG1vcmUgcmVzZXJ2ZXMgdGhhbiB0aG9zZSBhbHJlYWR5IHRha2VuIG9uXFxuK1xcdFxcdFxcdCAqIGJlaGFsZiBvZiBzdWJwb29sLiAgUmV0dXJuIGRpZmZlcmVuY2UuXFxuK1xcdFxcdFxcdCAqL1xcbitcXHRcXHRcXHRyZXQgPSBkZWx0YSAtIHNwb29sLVxcdTAwM2Vyc3ZfaHBhZ2VzO1xcbitcXHRcXHRcXHRzcG9vbC1cXHUwMDNlcnN2X2hwYWdlcyA9IDA7XFxuK1xcdFxcdH0gZWxzZSB7XFxuK1xcdFxcdFxcdHJldCA9IDA7XFx0LyogcmVzZXJ2ZXMgYWxyZWFkeSBhY2NvdW50ZWQgZm9yICovXFxuK1xcdFxcdFxcdHNwb29sLVxcdTAwM2Vyc3ZfaHBhZ2VzIC09IGRlbHRhO1xcbitcXHRcXHR9XFxuK1xcdH1cXG4rXFxuK3VubG9ja19yZXQ6XFxuK1xcdHNwaW5fdW5sb2NrX2lycShcXHUwMDI2c3Bvb2wtXFx1MDAzZWxvY2spO1xcbitcXHRyZXR1cm4gcmV0O1xcbit9XFxuK1xcbisvKlxcbisgKiBTdWJwb29sIGFjY291bnRpbmcgZm9yIGZyZWVpbmcgYW5kIHVucmVzZXJ2aW5nIHBhZ2VzLlxcbisgKiBSZXR1cm4gdGhlIG51bWJlciBvZiBnbG9iYWwgcGFnZSByZXNlcnZhdGlvbnMgdGhhdCBtdXN0IGJlIGRyb3BwZWQuXFxuKyAqIFRoZSByZXR1cm4gdmFsdWUgbWF5IG9ubHkgYmUgZGlmZmVyZW50IHRoYW4gdGhlIHBhc3NlZCB2YWx1ZSAoZGVsdGEpXFxuKyAqIGluIHRoZSBjYXNlIHdoZXJlIGEgc3VicG9vbCBtaW5pbXVtIHNpemUgbXVzdCBiZSBtYWludGFpbmVkLlxcbisgKi9cXG4rbG9uZyBodWdlcGFnZV9zdWJwb29sX3B1dF9wYWdlcyhzdHJ1Y3QgaHVnZXBhZ2Vfc3VicG9vbCAqc3Bvb2wsXFxuK1xcdFxcdFxcdFxcdCAgICAgICBsb25nIGRlbHRhKVxcbit7XFxuK1xcdGxvbmcgcmV0ID0gZGVsdGE7XFxuK1xcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XFxuK1xcbitcXHRpZiAoIXNwb29sKVxcbitcXHRcXHRyZXR1cm4gZGVsdGE7XFxuK1xcbitcXHRzcGluX2xvY2tfaXJxc2F2ZShcXHUwMDI2c3Bvb2wtXFx1MDAzZWxvY2ssIGZsYWdzKTtcXG4rXFxuK1xcdHNwb29sLVxcdTAwM2V1c2VkX2hwYWdlcyAtPSBkZWx0YTtcXG4rXFxuK1xcdCAvKiBtaW5pbXVtIHNpemUgYWNjb3VudGluZyAqL1xcbitcXHRpZiAoc3Bvb2wtXFx1MDAzZW1pbl9ocGFnZXMgIT0gLTEgXFx1MDAyNlxcdTAwMjYgc3Bvb2wtXFx1MDAzZXVzZWRfaHBhZ2VzIFxcdTAwM2Mgc3Bvb2wtXFx1MDAzZW1pbl9ocGFnZXMpIHtcXG4rXFx0XFx0LypcXG4rXFx0XFx0ICogbGltaXQgaXMgdGhlIG1heGltdW0gbnVtYmVyIG9mIHJlc2VydmF0aW9ucyB0aGF0XFxuK1xcdFxcdCAqIGNhbiBiZSByZXN0b3JlZCB0byB0aGlzIHN1YnBvb2wuXFxuK1xcdFxcdCAqL1xcbitcXHRcXHRsb25nIGxpbWl0ID0gc3Bvb2wtXFx1MDAzZW1pbl9ocGFnZXMgLSBzcG9vbC1cXHUwMDNldXNlZF9ocGFnZXM7XFxuK1xcbitcXHRcXHRpZiAoc3Bvb2wtXFx1MDAzZXJzdl9ocGFnZXMgKyBkZWx0YSBcXHUwMDNjPSBsaW1pdClcXG4rXFx0XFx0XFx0cmV0ID0gMDtcXG4rXFx0XFx0ZWxzZVxcbitcXHRcXHRcXHRyZXQgPSBzcG9vbC1cXHUwMDNlcnN2X2hwYWdlcyArIGRlbHRhIC0gbGltaXQ7XFxuK1xcbitcXHRcXHRzcG9vbC1cXHUwMDNlcnN2X2hwYWdlcyArPSBkZWx0YTtcXG4rXFx0XFx0aWYgKHNwb29sLVxcdTAwM2Vyc3ZfaHBhZ2VzIFxcdTAwM2UgbGltaXQpXFxuK1xcdFxcdFxcdHNwb29sLVxcdTAwM2Vyc3ZfaHBhZ2VzID0gbGltaXQ7XFxuK1xcdH1cXG4rXFxuK1xcdC8qXFxuK1xcdCAqIElmIGh1Z2V0bGJmc19wdXRfc3VwZXIgY291bGRuJ3QgZnJlZSBzcG9vbCBkdWUgdG8gYW4gb3V0c3RhbmRpbmdcXG4rXFx0ICogcXVvdGEgcmVmZXJlbmNlLCBmcmVlIGl0IG5vdy5cXG4rXFx0ICovXFxuK1xcdHVubG9ja19vcl9yZWxlYXNlX3N1YnBvb2woc3Bvb2wsIGZsYWdzKTtcXG4rXFxuK1xcdHJldHVybiByZXQ7XFxuK31cXG5kaWZmIC0tZ2l0IGEvbW0vaHVnZXRsYl9zdWJwb29sLmggYi9tbS9odWdldGxiX3N1YnBvb2wuaFxcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLjQxZDIyMjM5ZjJjM2VkXFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL21tL2h1Z2V0bGJfc3VicG9vbC5oXFxuQEAgLTAsMCArMSwyMSBAQFxcbisvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCAqL1xcbisjaWZuZGVmIF9NTV9IVUdFVExCX1NVQlBPT0xfSFxcbisjZGVmaW5lIF9NTV9IVUdFVExCX1NVQlBPT0xfSFxcbitcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3NwaW5sb2NrLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC90eXBlcy5oXFx1MDAzZVxcbitcXG4rc3RydWN0IGhzdGF0ZTtcXG4rc3RydWN0IGh1Z2VwYWdlX3N1YnBvb2w7XFxuK1xcbitzdHJ1Y3QgaHVnZXBhZ2Vfc3VicG9vbCAqaHVnZXBhZ2VfbmV3X3N1YnBvb2woc3RydWN0IGhzdGF0ZSAqaCwgbG9uZyBtYXhfaHBhZ2VzLFxcbitcXHRcXHRcXHRcXHRcXHRcXHRsb25nIG1pbl9ocGFnZXMpO1xcbit2b2lkIGh1Z2VwYWdlX3B1dF9zdWJwb29sKHN0cnVjdCBodWdlcGFnZV9zdWJwb29sICpzcG9vbCk7XFxuK2xvbmcgaHVnZXBhZ2Vfc3VicG9vbF9nZXRfcGFnZXMoc3RydWN0IGh1Z2VwYWdlX3N1YnBvb2wgKnNwb29sLCBsb25nIGRlbHRhKTtcXG4rbG9uZyBodWdlcGFnZV9zdWJwb29sX3B1dF9wYWdlcyhzdHJ1Y3QgaHVnZXBhZ2Vfc3VicG9vbCAqc3Bvb2wsIGxvbmcgZGVsdGEpO1xcbitsb25nIGh1Z2VwYWdlX3N1YnBvb2xfZnJlZV9ocGFnZXMoc3RydWN0IGh1Z2VwYWdlX3N1YnBvb2wgKnNwb29sKTtcXG4rbG9uZyBodWdlcGFnZV9zdWJwb29sX21heF9ocGFnZXMoc3RydWN0IGh1Z2VwYWdlX3N1YnBvb2wgKnNwb29sKTtcXG4rdW5zaWduZWQgbG9uZyBsb25nIGh1Z2VwYWdlX3N1YnBvb2xfbWF4X3NpemUoc3RydWN0IGh1Z2VwYWdlX3N1YnBvb2wgKnNwb29sKTtcXG4rdW5zaWduZWQgbG9uZyBsb25nIGh1Z2VwYWdlX3N1YnBvb2xfbWluX3NpemUoc3RydWN0IGh1Z2VwYWdlX3N1YnBvb2wgKnNwb29sKTtcXG4rXFxuKyNlbmRpZiAvKiBfTU1fSFVHRVRMQl9TVUJQT09MX0ggKi9cXG5kaWZmIC0tZ2l0IGEvbW0vbWVtY29udHJvbC5jIGIvbW0vbWVtY29udHJvbC5jXFxuaW5kZXggNmRjNDg4OGE5MGYzZmQuLjY3NjRmZjA0MWMxOTY1IDEwMDY0NFxcbi0tLSBhL21tL21lbWNvbnRyb2wuY1xcbisrKyBiL21tL21lbWNvbnRyb2wuY1xcbkBAIC01MTQ3LDM5ICs1MTQ3LDExOSBAQCBpbnQgX19tZW1fY2dyb3VwX2NoYXJnZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSwgZ2ZwX3QgZ2ZwKVxcbiB9XFxuIFxcbiAvKipcXG4tICogbWVtX2Nncm91cF9jaGFyZ2VfaHVnZXRsYiAtIGNoYXJnZSB0aGUgbWVtY2cgZm9yIGEgaHVnZXRsYiBmb2xpb1xcbi0gKiBAZm9saW86IGZvbGlvIGJlaW5nIGNoYXJnZWRcXG4rICogbWVtX2Nncm91cF9odWdldGxiX3RyeV9jaGFyZ2UgLSBUcnkgdG8gY2hhcmdlIHRoZSBtZW1jZyBmb3IgYSBodWdldGxiIGZvbGlvXFxuKyAqIEBucl9wYWdlczogbnVtYmVyIG9mIGJhc2UgcGFnZXMgdG8gY2hhcmdlXFxuICAqIEBnZnA6IHJlY2xhaW0gbW9kZVxcbisgKiBAbWVtY2dfcDogT3V0cHV0IHBvaW50ZXIgdG8gdGhlIGNoYXJnZWQgbWVtX2Nncm91cCAoaWYgc3VjY2Vzc2Z1bCBhbmQgZW5hYmxlZClcXG4rICogQG9iamNnX3A6IE91dHB1dCBwb2ludGVyIHRvIHRoZSBjaGFyZ2VkIG9ial9jZ3JvdXAgKGlmIHN1Y2Nlc3NmdWwgYW5kIGVuYWJsZWQpXFxuICAqXFxuLSAqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHdoZW4gYWxsb2NhdGluZyBhIGh1Z2UgcGFnZSBmb2xpbywgYWZ0ZXIgdGhlIHBhZ2UgaGFzXFxuLSAqIGFscmVhZHkgYmVlbiBvYnRhaW5lZCBhbmQgY2hhcmdlZCB0byB0aGUgYXBwcm9wcmlhdGUgaHVnZXRsYiBjZ3JvdXBcXG4tICogY29udHJvbGxlciAoaWYgaXQgaXMgZW5hYmxlZCkuXFxuKyAqIFByZXBhcmVzIGFuZCB0cmllcyB0byByZXNlcnZlIHRoZSBtZW1vcnkgY291bnRlciBmb3IgdGhlIGZvbGlvIGZyb20gdGhlIGN1cnJlbnRcXG4rICogdGFzaydzIG1lbWNnLiBJZiBzdWNjZXNzZnVsLCBib3RoICptZW1jZ19wIGFuZCAqb2JqY2dfcCBhcmUgcG9wdWxhdGVkIGFuZCB0aGVpclxcbisgKiByZWZlcmVuY2VzIGFyZSBwaW5uZWQgdW50aWwgYSBzdWJzZXF1ZW50IGNhbGwgdG8gbWVtX2Nncm91cF9odWdldGxiX2NvbW1pdF9jaGFyZ2VcXG4rICogb3IgbWVtX2Nncm91cF9odWdldGxiX2NhbmNlbF9jaGFyZ2UuXFxuICAqXFxuICAqIFJldHVybnMgRU5PTUVNIGlmIHRoZSBtZW1jZyBpcyBhbHJlYWR5IGZ1bGwuXFxuLSAqIFJldHVybnMgMCBpZiBlaXRoZXIgdGhlIGNoYXJnZSB3YXMgc3VjY2Vzc2Z1bCwgb3IgaWYgd2Ugc2tpcCB0aGUgY2hhcmdpbmcuXFxuKyAqIFJldHVybnMgMCBpZiBlaXRoZXIgdGhlIGNoYXJnZSB3YXMgc3VjY2Vzc2Z1bCwgb3IgaWYgd2Ugc2tpcCBjaGFyZ2luZy5cXG4gICovXFxuLWludCBtZW1fY2dyb3VwX2NoYXJnZV9odWdldGxiKHN0cnVjdCBmb2xpbyAqZm9saW8sIGdmcF90IGdmcClcXG4raW50IG1lbV9jZ3JvdXBfaHVnZXRsYl90cnlfY2hhcmdlKHVuc2lnbmVkIGludCBucl9wYWdlcywgZ2ZwX3QgZ2ZwLFxcbitcXHRcXHRcXHRcXHQgIHN0cnVjdCBtZW1fY2dyb3VwICoqbWVtY2dfcCxcXG4rXFx0XFx0XFx0XFx0ICBzdHJ1Y3Qgb2JqX2Nncm91cCAqKm9iamNnX3ApXFxuIHtcXG4tXFx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnID0gZ2V0X21lbV9jZ3JvdXBfZnJvbV9jdXJyZW50KCk7XFxuK1xcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZztcXG4rXFx0c3RydWN0IG9ial9jZ3JvdXAgKm9iamNnO1xcbiBcXHRpbnQgcmV0ID0gMDtcXG4gXFxuLVxcdC8qXFxuLVxcdCAqIEV2ZW4gbWVtY2cgZG9lcyBub3QgYWNjb3VudCBmb3IgaHVnZXRsYiwgd2Ugc3RpbGwgd2FudCB0byB1cGRhdGVcXG4tXFx0ICogc3lzdGVtLWxldmVsIHN0YXRzIHZpYSBscnV2ZWNfc3RhdF9tb2RfZm9saW8uIFJldHVybiAwLCBhbmQgc2tpcFxcbi1cXHQgKiBjaGFyZ2luZyB0aGUgbWVtY2cuXFxuLVxcdCAqL1xcbitcXHQqbWVtY2dfcCA9IE5VTEw7XFxuK1xcdCpvYmpjZ19wID0gTlVMTDtcXG4rXFxuIFxcdGlmIChtZW1fY2dyb3VwX2Rpc2FibGVkKCkgfHwgIW1lbWNnX2FjY291bnRzX2h1Z2V0bGIoKSB8fFxcbi1cXHRcXHQhbWVtY2cgfHwgIWNncm91cF9zdWJzeXNfb25fZGZsKG1lbW9yeV9jZ3JwX3N1YnN5cykpXFxuLVxcdFxcdGdvdG8gb3V0O1xcbitcXHQgICAgIWNncm91cF9zdWJzeXNfb25fZGZsKG1lbW9yeV9jZ3JwX3N1YnN5cykpXFxuK1xcdFxcdHJldHVybiAwO1xcbiBcXG4tXFx0aWYgKGNoYXJnZV9tZW1jZyhmb2xpbywgbWVtY2csIGdmcCkpXFxuLVxcdFxcdHJldCA9IC1FTk9NRU07XFxuK1xcdG1lbWNnID0gZ2V0X21lbV9jZ3JvdXBfZnJvbV9jdXJyZW50KCk7XFxuK1xcdGlmICghbWVtY2cpXFxuK1xcdFxcdHJldHVybiAwO1xcbiBcXG4tb3V0OlxcbitcXHRvYmpjZyA9IGdldF9vYmpfY2dyb3VwX2Zyb21fbWVtY2cobWVtY2cpO1xcbitcXHRpZiAoIW9iamNnKVxcbitcXHRcXHRnb3RvIHB1dF9tZW1jZztcXG4rXFxuK1xcdGlmICghb2JqX2Nncm91cF9pc19yb290KG9iamNnKSkge1xcbitcXHRcXHRyZXQgPSB0cnlfY2hhcmdlX21lbWNnKG1lbWNnLCBnZnAsIG5yX3BhZ2VzKTtcXG4rXFx0XFx0aWYgKHJldClcXG4rXFx0XFx0XFx0Z290byBwdXRfb2JqY2c7XFxuK1xcdH1cXG4rXFxuK1xcdCptZW1jZ19wID0gbWVtY2c7XFxuK1xcdCpvYmpjZ19wID0gb2JqY2c7XFxuK1xcdHJldHVybiAwO1xcbitcXG4rcHV0X29iamNnOlxcbitcXHRvYmpfY2dyb3VwX3B1dChvYmpjZyk7XFxuK3B1dF9tZW1jZzpcXG4gXFx0bWVtX2Nncm91cF9wdXQobWVtY2cpO1xcbiBcXHRyZXR1cm4gcmV0O1xcbiB9XFxuIFxcbisvKipcXG4rICogbWVtX2Nncm91cF9odWdldGxiX2NvbW1pdF9jaGFyZ2UgLSBDb21taXQgdGhlIG1lbWNnIGNoYXJnZSBmb3IgYSBodWdldGxiIGZvbGlvXFxuKyAqIEBmb2xpbzogZm9saW8gYmVpbmcgY2hhcmdlZFxcbisgKiBAbWVtY2c6IFRhcmdldCBtZW1fY2dyb3VwIG9idGFpbmVkIGZyb20gbWVtX2Nncm91cF9odWdldGxiX3RyeV9jaGFyZ2VcXG4rICogQG9iamNnOiBUYXJnZXQgb2JqX2Nncm91cCBvYnRhaW5lZCBmcm9tIG1lbV9jZ3JvdXBfaHVnZXRsYl90cnlfY2hhcmdlXFxuKyAqXFxuKyAqIEZpbmFsaXplcyB0aGUgbWVtb3J5IGFuZCBzdGF0aXN0aWNzIGNoYXJnaW5nIGZvciB0aGUgZm9saW8gaW4gdGhlIHNwZWNpZmllZCBtZW1jZy5cXG4rICogVHJhbnNmZXJzIHRoZSBwaW5uZWQgb2JqY2cgcmVmZXJlbmNlIHRvIHRoZSBmb2xpbyBzdHJ1Y3R1cmUgKGZvciBhdXRvbWF0aWNcXG4rICogdW5jaGFyZ2luZyB1cG9uIGZyZWVpbmcgdmlhIG1lbV9jZ3JvdXBfdW5jaGFyZ2UpLiBSZWxlYXNlcyB0aGUgdHJ5LWNvbW1pdCByZWZlcmVuY2VcXG4rICogb24gbWVtY2cuXFxuKyAqL1xcbit2b2lkIG1lbV9jZ3JvdXBfaHVnZXRsYl9jb21taXRfY2hhcmdlKHN0cnVjdCBmb2xpbyAqZm9saW8sXFxuK1xcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcXG4rXFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IG9ial9jZ3JvdXAgKm9iamNnKVxcbit7XFxuK1xcdGlmICghbWVtY2cgfHwgIW9iamNnKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHRjb21taXRfY2hhcmdlKGZvbGlvLCBvYmpjZyk7XFxuK1xcdG1lbWNnMV9jb21taXRfY2hhcmdlKGZvbGlvLCBtZW1jZyk7XFxuK1xcbitcXHQvKlxcbitcXHQgKiBEcm9wIG91ciB0cnktY29tbWl0LWNhbmNlbCBwcm90b2NvbCByZWZlcmVuY2Ugb24gbWVtY2cuXFxuK1xcdCAqIFRoZSBvYmpjZyByZWZlcmVuY2UgaXMgVFJBTlNGRVJSRUQgdG8gdGhlIGZvbGlvIGJ5IGNvbW1pdF9jaGFyZ2UsXFxuK1xcdCAqIHNvIGl0IHdpbGwgYmUgcHV0IGF1dG9tYXRpY2FsbHkgYnkgX19tZW1fY2dyb3VwX3VuY2hhcmdlKCkgd2hlblxcbitcXHQgKiB0aGUgZm9saW8gaXMgZnJlZWQuXFxuK1xcdCAqL1xcbitcXHRtZW1fY2dyb3VwX3B1dChtZW1jZyk7XFxuK31cXG4rXFxuKy8qKlxcbisgKiBtZW1fY2dyb3VwX2h1Z2V0bGJfY2FuY2VsX2NoYXJnZSAtIENhbmNlbCBhbmQgdW5kbyBhIGh1Z2V0bGIgZm9saW8gbWVtY2cgY2hhcmdlXFxuKyAqIEBucl9wYWdlczogbnVtYmVyIG9mIGJhc2UgcGFnZXMgdG8gdW5jaGFyZ2VcXG4rICogQG1lbWNnOiBUYXJnZXQgbWVtX2Nncm91cCBvYnRhaW5lZCBmcm9tIG1lbV9jZ3JvdXBfaHVnZXRsYl90cnlfY2hhcmdlXFxuKyAqIEBvYmpjZzogVGFyZ2V0IG9ial9jZ3JvdXAgb2J0YWluZWQgZnJvbSBtZW1fY2dyb3VwX2h1Z2V0bGJfdHJ5X2NoYXJnZVxcbisgKlxcbisgKiBDYW5jZWxzIGFuZCBzYWZlbHkgcm9sbHMgYmFjayB0aGUgcHJlcGFyZWQgbWVtb3J5IGNoYXJnZSBmb3IgdGhlIGZvbGlvIGluIHRoZVxcbisgKiBzcGVjaWZpZWQgbWVtY2cuIFJlbGVhc2VzIHRoZSB0cnktY29tbWl0IHBpbm5lZCByZWZlcmVuY2VzIG9uIGJvdGggbWVtY2cgYW5kIG9iamNnLlxcbisgKi9cXG4rdm9pZCBtZW1fY2dyb3VwX2h1Z2V0bGJfY2FuY2VsX2NoYXJnZSh1bnNpZ25lZCBpbnQgbnJfcGFnZXMsXFxuK1xcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcXG4rXFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IG9ial9jZ3JvdXAgKm9iamNnKVxcbit7XFxuK1xcdGlmICghbWVtY2cgfHwgIW9iamNnKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHRpZiAoIW9ial9jZ3JvdXBfaXNfcm9vdChvYmpjZykpXFxuK1xcdFxcdHJlZmlsbF9zdG9jayhtZW1jZywgbnJfcGFnZXMpO1xcbitcXG4rXFx0LypcXG4rXFx0ICogRHJvcCBvdXIgdHJ5LWNvbW1pdC1jYW5jZWwgcHJvdG9jb2wgcmVmZXJlbmNlcyBvbiBib3RoIG9iamNnXFxuK1xcdCAqIGFuZCBtZW1jZywgc2luY2UgdGhpcyBtYXBwaW5nIGF0dGVtcHQgd2FzIGFib3J0ZWQgYW5kIHRoZSBmb2xpb1xcbitcXHQgKiB3YXMgbmV2ZXIgY29tbWl0dGVkLlxcbitcXHQgKi9cXG4rXFx0b2JqX2Nncm91cF9wdXQob2JqY2cpO1xcbitcXHRtZW1fY2dyb3VwX3B1dChtZW1jZyk7XFxuK31cXG4rXFxuK1xcbiAvKipcXG4gICogbWVtX2Nncm91cF9zd2FwaW5fY2hhcmdlX2ZvbGlvIC0gQ2hhcmdlIGEgbmV3bHkgYWxsb2NhdGVkIGZvbGlvIGZvciBzd2FwaW4uXFxuICAqIEBmb2xpbzogdGhlIGZvbGlvIHRvIGNoYXJnZVxcbmRpZmYgLS1naXQgYS9zdWJwb29sX2xlYWtfbWF4X3NpemUuc2ggYi9zdWJwb29sX2xlYWtfbWF4X3NpemUuc2hcXG5uZXcgZmlsZSBtb2RlIDEwMDc1NVxcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi5iZmFmYTFiYTA3NGVhY1xcbi0tLSAvZGV2L251bGxcXG4rKysgYi9zdWJwb29sX2xlYWtfbWF4X3NpemUuc2hcXG5AQCAtMCwwICsxLDcxIEBAXFxuKyMhL2Jpbi9iYXNoXFxuK1xcbitpZiBbIFxcXCIkRVVJRFxcXCIgLW5lIDAgXTsgdGhlblxcbisgICAgZWNobyBcXFwiUGxlYXNlIHJ1biBhcyByb290XFxcIlxcbisgICAgZXhpdCAxXFxuK2ZpXFxuK1xcbitNTlRfUEFUSD1cXFwiL3RtcC9tbnRfaHVnZXRsYlxcXCJcXG4rRklMRV9QQVRIPVxcXCIkTU5UX1BBVEgvdGVzdF9maWxlXFxcIlxcbitcXG4rIyBTYXZlIG9yaWdpbmFsIHZhbHVlc1xcbitvcmlnX25yPSQoY2F0IC9zeXMva2VybmVsL21tL2h1Z2VwYWdlcy9odWdlcGFnZXMtMjA0OGtCL25yX2h1Z2VwYWdlcylcXG4rb3JpZ19vdmVyY29tbWl0PSQoY2F0IC9zeXMva2VybmVsL21tL2h1Z2VwYWdlcy9odWdlcGFnZXMtMjA0OGtCL25yX292ZXJjb21taXRfaHVnZXBhZ2VzKVxcbitcXG4rY2xlYW51cCgpIHtcXG4rICAgIGVjaG8gXFxcIkNsZWFuaW5nIHVwLi4uXFxcIlxcbisgICAgcm0gLWYgXFxcIiRGSUxFX1BBVEhcXFwiXFxuKyAgICB1bW91bnQgXFxcIiRNTlRfUEFUSFxcXCIgMlxcdTAwM2UvZGV2L251bGxcXG4rICAgIHJtZGlyIFxcXCIkTU5UX1BBVEhcXFwiIDJcXHUwMDNlL2Rldi9udWxsXFxuKyAgICBlY2hvIFxcXCIkb3JpZ19uclxcXCIgXFx1MDAzZSAvc3lzL2tlcm5lbC9tbS9odWdlcGFnZXMvaHVnZXBhZ2VzLTIwNDhrQi9ucl9odWdlcGFnZXNcXG4rICAgIGVjaG8gXFxcIiRvcmlnX292ZXJjb21taXRcXFwiIFxcdTAwM2UgL3N5cy9rZXJuZWwvbW0vaHVnZXBhZ2VzL2h1Z2VwYWdlcy0yMDQ4a0IvbnJfb3ZlcmNvbW1pdF9odWdlcGFnZXNcXG4rICAgIGVjaG8gXFxcIkNsZWFudXAgZG9uZS5cXFwiXFxuK31cXG4rdHJhcCBjbGVhbnVwIEVYSVRcXG4rXFxuKyMgMS4gTW91bnQgaHVnZXRsYmZzIHdpdGggc2l6ZT0yTSAoMSBwYWdlKVxcbitta2RpciAtcCBcXFwiJE1OVF9QQVRIXFxcIlxcbitpZiAhIG1vdW50IC10IGh1Z2V0bGJmcyAtbyBzaXplPTJNIG5vbmUgXFxcIiRNTlRfUEFUSFxcXCI7IHRoZW5cXG4rICAgIGVjaG8gXFxcIkZhaWxlZCB0byBtb3VudCBodWdldGxiZnNcXFwiXFxuKyAgICBleGl0IDFcXG4rZmlcXG4rXFxuKyMgMi4gU2V0IG5yX2h1Z2VwYWdlcyB0byAwLCBvdmVyY29tbWl0IHRvIDBcXG4rZWNobyAwIFxcdTAwM2UgL3N5cy9rZXJuZWwvbW0vaHVnZXBhZ2VzL2h1Z2VwYWdlcy0yMDQ4a0IvbnJfaHVnZXBhZ2VzXFxuK2VjaG8gMCBcXHUwMDNlIC9zeXMva2VybmVsL21tL2h1Z2VwYWdlcy9odWdlcGFnZXMtMjA0OGtCL25yX292ZXJjb21taXRfaHVnZXBhZ2VzXFxuK1xcbisjIENoZWNrIHN1YnBvb2wgdXNhZ2UgYmVmb3JlIHJ1bm5pbmdcXG4rcmVhZCB0b3RhbCBmcmVlIFxcdTAwM2MgXFx1MDAzYyhzdGF0IC1mIC1jIFxcXCIlYiAlZlxcXCIgXFxcIiRNTlRfUEFUSFxcXCIpXFxuK3VzZWRfYmVmb3JlPSQoKHRvdGFsIC0gZnJlZSkpXFxuK2VjaG8gXFxcIkJlZm9yZSB0ZXN0IC0gU3VicG9vbCB0b3RhbCBibG9ja3M6ICR0b3RhbFxcXCJcXG4rZWNobyBcXFwiQmVmb3JlIHRlc3QgLSBTdWJwb29sIGZyZWUgYmxvY2tzOiAgJGZyZWVcXFwiXFxuK2VjaG8gXFxcIkJlZm9yZSB0ZXN0IC0gU3VicG9vbCB1c2VkIGJsb2NrczogICR1c2VkX2JlZm9yZVxcXCJcXG4raWYgWyBcXFwiJHVzZWRfYmVmb3JlXFxcIiAtbmUgMCBdOyB0aGVuXFxuKyAgICBlY2hvIFxcXCJFUlJPUjogU3VicG9vbCBpcyBub3QgY2xlYW4gYmVmb3JlIHRlc3Qgc3RhcnRzIVxcXCJcXG4rICAgIGV4aXQgMVxcbitmaVxcbitcXG4rIyBSdW4gZmFsbG9jYXRlIChleHBlY3RpbmcgZmFpbHVyZSlcXG4rZWNobyBcXFwiUnVubmluZyBmYWxsb2NhdGUgKGV4cGVjdGluZyBmYWlsdXJlKS4uLlxcXCJcXG4raWYgZmFsbG9jYXRlIC1sIDJNIFxcXCIkRklMRV9QQVRIXFxcIiAyXFx1MDAzZS9kZXYvbnVsbDsgdGhlblxcbisgICAgZWNobyBcXFwiRVJST1I6IGZhbGxvY2F0ZSBzdWNjZWVkZWQgYnV0IHNob3VsZCBoYXZlIGZhaWxlZCAobnJfaHVnZXBhZ2VzIGlzIDApXFxcIlxcbisgICAgZXhpdCAxXFxuK2ZpXFxuK1xcbisjIENoZWNrIHN1YnBvb2wgdXNhZ2UgdmlhIHN0YXRmc1xcbisjICViOiBUb3RhbCBibG9ja3NcXG4rIyAlZjogRnJlZSBibG9ja3NcXG4rcmVhZCB0b3RhbCBmcmVlIFxcdTAwM2MgXFx1MDAzYyhzdGF0IC1mIC1jIFxcXCIlYiAlZlxcXCIgXFxcIiRNTlRfUEFUSFxcXCIpXFxuK3VzZWQ9JCgodG90YWwgLSBmcmVlKSlcXG4rXFxuK2VjaG8gXFxcIlN1YnBvb2wgdG90YWwgYmxvY2tzOiAkdG90YWxcXFwiXFxuK2VjaG8gXFxcIlN1YnBvb2wgZnJlZSBibG9ja3M6ICAkZnJlZVxcXCJcXG4rZWNobyBcXFwiU3VicG9vbCB1c2VkIGJsb2NrcyAobGVha2VkIGlmIFxcdTAwM2UgMCk6ICR1c2VkXFxcIlxcbitcXG4raWYgWyBcXFwiJHVzZWRcXFwiIC1ndCAwIF07IHRoZW5cXG4rICAgIGVjaG8gXFxcIlJFU1VMVDogTEVBSyBERVRFQ1RFRCAoRkFJTClcXFwiXFxuKyAgICBleGl0IDFcXG4rZWxzZVxcbisgICAgZWNobyBcXFwiUkVTVUxUOiBOTyBMRUFLIChQQVNTKVxcXCJcXG4rICAgIGV4aXQgMFxcbitmaVxcbmRpZmYgLS1naXQgYS9zdWJwb29sX3NoYXJlZF9sZWFrLmMgYi9zdWJwb29sX3NoYXJlZF9sZWFrLmNcXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi41ODExZTE4ZDdmOGJlN1xcbi0tLSAvZGV2L251bGxcXG4rKysgYi9zdWJwb29sX3NoYXJlZF9sZWFrLmNcXG5AQCAtMCwwICsxLDI5IEBAXFxuKyNpbmNsdWRlIFxcdTAwM2NzdGRpby5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjc3RkbGliLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2N1bmlzdGQuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY3N5cy9tbWFuLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NzeXMvc3RhdC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjZmNudGwuaFxcdTAwM2VcXG4rXFxuKyNkZWZpbmUgSFBBR0VfU0laRSAoMiAqIDEwMjQgKiAxMDI0KVxcbitcXG4raW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KSB7XFxuKyAgICBpZiAoYXJnYyBcXHUwMDNjIDIpIHtcXG4rICAgICAgICBmcHJpbnRmKHN0ZGVyciwgXFxcIlVzYWdlOiAlcyBcXHUwMDNjZmlsZV9wYXRoXFx1MDAzZVxcXFxuXFxcIiwgYXJndlswXSk7XFxuKyAgICAgICAgcmV0dXJuIDE7XFxuKyAgICB9XFxuKyAgICBjb25zdCBjaGFyICpmaWxlX3BhdGggPSBhcmd2WzFdO1xcbitcXG4rICAgIGludCBmZCA9IG9wZW4oZmlsZV9wYXRoLCBPX0NSRUFUIHwgT19SRFdSLCAwNjY2KTtcXG4rICAgIGlmIChmZCBcXHUwMDNjIDApIHsgcGVycm9yKFxcXCJvcGVuXFxcIik7IHJldHVybiAxOyB9XFxuK1xcbisgICAgdm9pZCAqYWRkciA9IG1tYXAoTlVMTCwgMiAqIEhQQUdFX1NJWkUsIFBST1RfUkVBRCB8IFBST1RfV1JJVEUsIE1BUF9TSEFSRUQsIGZkLCAwKTtcXG4rICAgIGlmIChhZGRyID09IE1BUF9GQUlMRUQpIHsgcGVycm9yKFxcXCJtbWFwXFxcIik7IGNsb3NlKGZkKTsgcmV0dXJuIDE7IH1cXG4rXFxuKyAgICAqKHZvbGF0aWxlIGNoYXIgKilhZGRyID0gMTsgLy8gQWxsb2NhdGUgMXN0IHBhZ2Ugb25seS4gMm5kIHBhZ2UgcmVtYWlucyB1bmFsbG9jYXRlZCAoYnV0IHJlc2VydmVkKS5cXG4rXFxuKyAgICBtdW5tYXAoYWRkciwgMiAqIEhQQUdFX1NJWkUpO1xcbisgICAgY2xvc2UoZmQpO1xcbitcXG4rICAgIHJldHVybiAwO1xcbit9XFxuZGlmZiAtLWdpdCBhL3N1YnBvb2xfc2hhcmVkX2xlYWsuc2ggYi9zdWJwb29sX3NoYXJlZF9sZWFrLnNoXFxubmV3IGZpbGUgbW9kZSAxMDA3NTVcXG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uNDZjNjIyYjE4NTU5YTBcXG4tLS0gL2Rldi9udWxsXFxuKysrIGIvc3VicG9vbF9zaGFyZWRfbGVhay5zaFxcbkBAIC0wLDAgKzEsODYgQEBcXG4rIyEvYmluL2Jhc2hcXG4rXFxuK2lmIFsgXFxcIiRFVUlEXFxcIiAtbmUgMCBdOyB0aGVuXFxuKyAgICBlY2hvIFxcXCJQbGVhc2UgcnVuIGFzIHJvb3RcXFwiXFxuKyAgICBleGl0IDFcXG4rZmlcXG4rXFxuK01OVF9QQVRIPVxcXCIvdG1wL21udF9odWdldGxiX3NoYXJlZF9sZWFrXFxcIlxcbitGSUxFX1BBVEg9XFxcIiRNTlRfUEFUSC90ZXN0X2ZpbGVcXFwiXFxuK1xcbisjIFNhdmUgb3JpZ2luYWwgdmFsdWVzXFxuK29yaWdfbnI9JChjYXQgL3N5cy9rZXJuZWwvbW0vaHVnZXBhZ2VzL2h1Z2VwYWdlcy0yMDQ4a0IvbnJfaHVnZXBhZ2VzKVxcbitcXG4rY2xlYW51cCgpIHtcXG4rICAgIGVjaG8gXFxcIkNsZWFuaW5nIHVwLi4uXFxcIlxcbisgICAgcm0gLWYgXFxcIiRGSUxFX1BBVEhcXFwiXFxuKyAgICB1bW91bnQgXFxcIiRNTlRfUEFUSFxcXCIgMlxcdTAwM2UvZGV2L251bGxcXG4rICAgIHJtZGlyIFxcXCIkTU5UX1BBVEhcXFwiIDJcXHUwMDNlL2Rldi9udWxsXFxuKyAgICBlY2hvIFxcXCIkb3JpZ19uclxcXCIgXFx1MDAzZSAvc3lzL2tlcm5lbC9tbS9odWdlcGFnZXMvaHVnZXBhZ2VzLTIwNDhrQi9ucl9odWdlcGFnZXNcXG4rICAgIGVjaG8gXFxcIkNsZWFudXAgZG9uZS5cXFwiXFxuK31cXG4rdHJhcCBjbGVhbnVwIEVYSVRcXG4rXFxuKyMgMS4gU2V0IG5yX2h1Z2VwYWdlcyB0byAyXFxuK2VjaG8gMiBcXHUwMDNlIC9zeXMva2VybmVsL21tL2h1Z2VwYWdlcy9odWdlcGFnZXMtMjA0OGtCL25yX2h1Z2VwYWdlc1xcbitcXG4rIyAyLiBNb3VudCBodWdldGxiZnMgd2l0aCBtaW5fc2l6ZT0yTSAoMSBwYWdlKVxcbitta2RpciAtcCBcXFwiJE1OVF9QQVRIXFxcIlxcbitpZiAhIG1vdW50IC10IGh1Z2V0bGJmcyAtbyBtaW5fc2l6ZT0yTSBub25lIFxcXCIkTU5UX1BBVEhcXFwiOyB0aGVuXFxuKyAgICBlY2hvIFxcXCJGYWlsZWQgdG8gbW91bnQgaHVnZXRsYmZzXFxcIlxcbisgICAgZXhpdCAxXFxuK2ZpXFxuK1xcbisjIENoZWNrIHJlc3ZfaHVnZXBhZ2VzIGFmdGVyIG1vdW50IChzaG91bGQgYmUgMSlcXG4raW5pdGlhbF9yZXN2PSQoY2F0IC9zeXMva2VybmVsL21tL2h1Z2VwYWdlcy9odWdlcGFnZXMtMjA0OGtCL3Jlc3ZfaHVnZXBhZ2VzKVxcbitlY2hvIFxcXCJJbml0aWFsIHJlc3ZfaHVnZXBhZ2VzIChhZnRlciBtb3VudCk6ICRpbml0aWFsX3Jlc3ZcXFwiXFxuK2lmIFsgXFxcIiRpbml0aWFsX3Jlc3ZcXFwiIC1uZSAxIF07IHRoZW5cXG4rICAgIGVjaG8gXFxcIkVSUk9SOiBJbml0aWFsIHJlc3ZfaHVnZXBhZ2VzIGlzIG5vdCAxIVxcXCJcXG4rICAgIGV4aXQgMVxcbitmaVxcbitcXG4rIyBWZXJpZnkgcmVwcm9kdWNlciBiaW5hcnkgZXhpc3RzXFxuK2lmIFsgISAteCAuL3N1YnBvb2xfc2hhcmVkX2xlYWsgXTsgdGhlblxcbisgICAgZWNobyBcXFwicmVwcm9kdWNlciBiaW5hcnkgJy4vc3VicG9vbF9zaGFyZWRfbGVhaycgbm90IGZvdW5kIG9yIG5vdCBleGVjdXRhYmxlLlxcXCJcXG4rICAgIGVjaG8gXFxcIlBsZWFzZSBjb21waWxlIGl0IGZpcnN0OiBnY2MgLXN0YXRpYyAtbyBzdWJwb29sX3NoYXJlZF9sZWFrIHN1YnBvb2xfc2hhcmVkX2xlYWsuY1xcXCJcXG4rICAgIGV4aXQgMVxcbitmaVxcbitcXG4rIyAzLiBSdW4gaGVscGVyIHRvIG1hcCA0TUIsIGFsbG9jYXRlIDJNQiwgYW5kIGNsb3NlLlxcbisjIFRoaXMgY3JlYXRlcyAyIHJlc2VydmF0aW9ucywgY29uc3VtZXMgMSAoYnkgYWxsb2NhdGluZyBQYWdlIDApLlxcbisjIFRoZSB1bmFsbG9jYXRlZCBQYWdlIDEgcmVzZXJ2YXRpb24gcmVtYWlucyBhY3RpdmUgaW4gdGhlIGlub2RlJ3MgcmVzdl9tYXAuXFxuK2VjaG8gXFxcIlJ1bm5pbmcgaGVscGVyLi4uXFxcIlxcbisuL3N1YnBvb2xfc2hhcmVkX2xlYWsgXFxcIiRGSUxFX1BBVEhcXFwiXFxuK1xcbityZXN2X2FmdGVyX2hlbHBlcj0kKGNhdCAvc3lzL2tlcm5lbC9tbS9odWdlcGFnZXMvaHVnZXBhZ2VzLTIwNDhrQi9yZXN2X2h1Z2VwYWdlcylcXG4rZWNobyBcXFwicmVzdl9odWdlcGFnZXMgYWZ0ZXIgaGVscGVyIChzaG91bGQgYmUgMSk6ICRyZXN2X2FmdGVyX2hlbHBlclxcXCJcXG4rIyBQYWdlIDAgaXMgYWxsb2NhdGVkIChubyBsb25nZXIgcmVzZXJ2ZWQpLiBQYWdlIDEgaXMgcmVzZXJ2ZWQuXFxuKyMgU28gcmVzdl9odWdlcGFnZXMgc2hvdWxkIGJlIDEuXFxuK2lmIFsgXFxcIiRyZXN2X2FmdGVyX2hlbHBlclxcXCIgLW5lIDEgXTsgdGhlblxcbisgICAgZWNobyBcXFwiRVJST1I6IHJlc3ZfaHVnZXBhZ2VzIGlzIG5vdCAxIGFmdGVyIGhlbHBlciBydW4hXFxcIlxcbisgICAgZXhpdCAxXFxuK2ZpXFxuK1xcbisjIDQuIFRydW5jYXRlIGZpbGUgdG8gMk1CIChyZWxlYXNlcyBQYWdlIDEgcmVzZXJ2YXRpb24pXFxuK2VjaG8gXFxcIlRydW5jYXRpbmcgZmlsZSB0byAyTUIgKHJlbGVhc2luZyAxIHBhZ2UgcmVzZXJ2YXRpb24pLi4uXFxcIlxcbit0cnVuY2F0ZSAtcyAyTSBcXFwiJEZJTEVfUEFUSFxcXCJcXG4rXFxuKyMgQ2hlY2sgcmVzdl9odWdlcGFnZXMgYWZ0ZXIgdHJ1bmNhdGUuXFxuKyMgU2luY2UgUGFnZSAwIGlzIHN0aWxsIGFsbG9jYXRlZCAoYW5kIGluIHBhZ2UgY2FjaGUpLCBhbmQgc2F0aXNmaWVzIHRoZVxcbisjIG1pbl9zaXplPTJNIGd1YXJhbnRlZSwgd2Ugc2hvdWxkIGhhdmUgMCByZXNlcnZhdGlvbnMgcmVtYWluaW5nLlxcbisjIElmIHRoZSBidWcgaXMgcHJlc2VudCwgdGhlIHRydW5jYXRlIHBhdGggd2lsbCBpbmNvcnJlY3RseSByZXN0b3JlIHRoZVxcbisjIHJlc2VydmF0aW9uIHRvIHRoZSBzdWJwb29sIGFuZCBza2lwIHJlbGVhc2luZyBpdCBnbG9iYWxseSwgbGVhdmluZ1xcbisjIHJlc3ZfaHVnZXBhZ2VzIGF0IDEuXFxuK2ZpbmFsX3Jlc3Y9JChjYXQgL3N5cy9rZXJuZWwvbW0vaHVnZXBhZ2VzL2h1Z2VwYWdlcy0yMDQ4a0IvcmVzdl9odWdlcGFnZXMpXFxuK2VjaG8gXFxcIkZpbmFsIHJlc3ZfaHVnZXBhZ2VzIChhZnRlciAyTUIgdHJ1bmNhdGUpOiAkZmluYWxfcmVzdlxcXCJcXG4rXFxuK2lmIFsgXFxcIiRmaW5hbF9yZXN2XFxcIiAtZXEgMSBdOyB0aGVuXFxuKyAgICBlY2hvIFxcXCJSRVNVTFQ6IExFQUsgREVURUNURUQgKEZBSUwpXFxcIlxcbisgICAgZXhpdCAxXFxuK2VsaWYgWyBcXFwiJGZpbmFsX3Jlc3ZcXFwiIC1lcSAwIF07IHRoZW5cXG4rICAgIGVjaG8gXFxcIlJFU1VMVDogTk8gTEVBSyAoUEFTUylcXFwiXFxuKyAgICBleGl0IDBcXG4rZWxzZVxcbisgICAgZWNobyBcXFwiUkVTVUxUOiBVTkVYUEVDVEVEIFNUQVRFICgkZmluYWxfcmVzdilcXFwiXFxuKyAgICBleGl0IDJcXG4rZmlcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9odWdldGxiX3N1YnBvb2wvLmdpdGlnbm9yZSBiL3Rvb2xzL3Rlc3RpbmcvaHVnZXRsYl9zdWJwb29sLy5naXRpZ25vcmVcXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi43MzQ4YzJjNzJmMWUxMVxcbi0tLSAvZGV2L251bGxcXG4rKysgYi90b29scy90ZXN0aW5nL2h1Z2V0bGJfc3VicG9vbC8uZ2l0aWdub3JlXFxuQEAgLTAsMCArMSBAQFxcbit0ZXN0X3N1YnBvb2xcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9odWdldGxiX3N1YnBvb2wvTWFrZWZpbGUgYi90b29scy90ZXN0aW5nL2h1Z2V0bGJfc3VicG9vbC9NYWtlZmlsZVxcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLjFiZGI3ZTI2MzU2MTQxXFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL3Rvb2xzL3Rlc3RpbmcvaHVnZXRsYl9zdWJwb29sL01ha2VmaWxlXFxuQEAgLTAsMCArMSwxOCBAQFxcbisjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuKy5QSE9OWTogYWxsIGNsZWFuIHRlc3RcXG4rXFxuK0NDID0gZ2NjXFxuK0NGTEFHUyA9IC1XYWxsIC1PMiAtSS4uL3NoYXJlZCAtSS4gLUkuLi8uLi9pbmNsdWRlIC1JLi4vLi4vYXJjaC94ODYvaW5jbHVkZSAtcHRocmVhZFxcbitLRVJORUxfU1VCUE9PTF9IID0gLi4vLi4vLi4vbW0vaHVnZXRsYl9zdWJwb29sLmhcXG4rS0VSTkVMX1NVQlBPT0xfQyA9IC4uLy4uLy4uL21tL2h1Z2V0bGJfc3VicG9vbC5jXFxuK1xcbithbGw6IHRlc3RcXG4rXFxuK3Rlc3Rfc3VicG9vbDogdGVzdF9zdWJwb29sLmMgJChLRVJORUxfU1VCUE9PTF9DKSAkKEtFUk5FTF9TVUJQT09MX0gpXFxuK1xcdCQoQ0MpICQoQ0ZMQUdTKSB0ZXN0X3N1YnBvb2wuYyAtbyB0ZXN0X3N1YnBvb2xcXG4rXFxuK3Rlc3Q6IHRlc3Rfc3VicG9vbFxcbitcXHQuL3Rlc3Rfc3VicG9vbFxcbitcXG4rY2xlYW46XFxuK1xcdHJtIC1mIHRlc3Rfc3VicG9vbFxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL2h1Z2V0bGJfc3VicG9vbC90ZXN0X3N1YnBvb2wuYyBiL3Rvb2xzL3Rlc3RpbmcvaHVnZXRsYl9zdWJwb29sL3Rlc3Rfc3VicG9vbC5jXFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcXG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uNzg5MDAyNzRjYzI2NDdcXG4tLS0gL2Rldi9udWxsXFxuKysrIGIvdG9vbHMvdGVzdGluZy9odWdldGxiX3N1YnBvb2wvdGVzdF9zdWJwb29sLmNcXG5AQCAtMCwwICsxLDQwMCBAQFxcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxcbisjaW5jbHVkZSBcXHUwMDNjYXNzZXJ0LmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NzdGRsaWIuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3R5cGVzLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9zbGFiLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9idWcuaFxcdTAwM2VcXG4rXFxuKy8qIE1vY2tlZCBVc2Vyc3BhY2UgaW1wbGVtZW50YXRpb24gZm9yIEtlcm5lbCBTdWJwb29sIGFsbG9jYXRpb24gZGVwZW5kZW5jaWVzICovXFxuK3N0cnVjdCBoc3RhdGUge1xcbitcXHRpbnQgZHVtbXk7XFxuK307XFxuK1xcbisjdW5kZWYga3phbGxvY19vYmpcXG4rI3VuZGVmIGt6YWxsb2Nfb2Jqc1xcbisjZGVmaW5lIGt6YWxsb2Nfb2JqKFAsIC4uLikgbWFsbG9jKHNpemVvZihQKSlcXG4rI2RlZmluZSBremFsbG9jX29ianMoUCwgQ09VTlQsIC4uLikgbWFsbG9jKHNpemVvZihQKSAqIChDT1VOVCkpXFxuK1xcbisjZGVmaW5lIGtmcmVlIGZyZWVcXG4rI2RlZmluZSBrbWFsbG9jIG1hbGxvY1xcbitcXG4rI2RlZmluZSBodWdlX3BhZ2Vfc2hpZnQoaCkgKDIxICsgKDAgKiAoKHVuc2lnbmVkIGxvbmcpKGgpIFxcdTAwMjYgMCkpKVxcbisjZGVmaW5lIGh1Z2VfcGFnZV9zaXplKGgpICgxVUwgXFx1MDAzY1xcdTAwM2MgaHVnZV9wYWdlX3NoaWZ0KGgpKVxcbitcXG4rc3RhdGljIGJvb2wgaHVnZXRsYl9hY2N0X21lbW9yeV9jYWxsZWQ7XFxuK3N0YXRpYyBzdHJ1Y3QgaHN0YXRlICpodWdldGxiX2FjY3RfbWVtb3J5X2g7XFxuK3N0YXRpYyBsb25nIGh1Z2V0bGJfYWNjdF9tZW1vcnlfZGVsdGE7XFxuK1xcbitzdGF0aWMgaW50IGh1Z2V0bGJfYWNjdF9tZW1vcnkoc3RydWN0IGhzdGF0ZSAqaCwgbG9uZyBkZWx0YSlcXG4re1xcbitcXHRodWdldGxiX2FjY3RfbWVtb3J5X2NhbGxlZCA9IHRydWU7XFxuK1xcdGh1Z2V0bGJfYWNjdF9tZW1vcnlfaCA9IGg7XFxuK1xcdGh1Z2V0bGJfYWNjdF9tZW1vcnlfZGVsdGEgPSBkZWx0YTtcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIHJlc2V0X2h1Z2V0bGJfYWNjdF9tZW1vcnlfbW9jayh2b2lkKVxcbit7XFxuK1xcdGh1Z2V0bGJfYWNjdF9tZW1vcnlfY2FsbGVkID0gZmFsc2U7XFxuK1xcdGh1Z2V0bGJfYWNjdF9tZW1vcnlfaCA9IE5VTEw7XFxuK1xcdGh1Z2V0bGJfYWNjdF9tZW1vcnlfZGVsdGEgPSAwO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBhc3NlcnRfaHVnZXRsYl9hY2N0X21lbW9yeV9jYWxsZWQoc3RydWN0IGhzdGF0ZSAqaCwgbG9uZyBkZWx0YSlcXG4re1xcbitcXHRhc3NlcnQoaHVnZXRsYl9hY2N0X21lbW9yeV9jYWxsZWQpO1xcbitcXHRhc3NlcnQoaHVnZXRsYl9hY2N0X21lbW9yeV9oID09IGgpO1xcbitcXHRhc3NlcnQoaHVnZXRsYl9hY2N0X21lbW9yeV9kZWx0YSA9PSBkZWx0YSk7XFxuK1xcbitcXHRyZXNldF9odWdldGxiX2FjY3RfbWVtb3J5X21vY2soKTtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgYXNzZXJ0X2h1Z2V0bGJfYWNjdF9tZW1vcnlfbm90X2NhbGxlZCh2b2lkKVxcbit7XFxuK1xcdGFzc2VydCghaHVnZXRsYl9hY2N0X21lbW9yeV9jYWxsZWQpO1xcbit9XFxuK1xcbisjaW5jbHVkZSBcXFwiLi4vLi4vLi4vbW0vaHVnZXRsYl9zdWJwb29sLmhcXFwiXFxuKyNpbmNsdWRlIFxcXCIuLi8uLi8uLi9tbS9odWdldGxiX3N1YnBvb2wuY1xcXCJcXG4rXFxuK3N0YXRpYyB2b2lkIHRlc3Rfc3VicG9vbF9uZXdfcHV0X25vX21pbl9saW1pdCh2b2lkKVxcbit7XFxuK1xcdHN0cnVjdCBoc3RhdGUgaDtcXG4rXFx0c3RydWN0IGh1Z2VwYWdlX3N1YnBvb2wgKnNwb29sO1xcbitcXG4rXFx0c3Bvb2wgPSBodWdlcGFnZV9uZXdfc3VicG9vbChcXHUwMDI2aCwgMTAsIC0xKTtcXG4rXFx0YXNzZXJ0KHNwb29sICE9IE5VTEwpO1xcbitcXHRhc3NlcnQoc3Bvb2wtXFx1MDAzZW1heF9ocGFnZXMgPT0gMTApO1xcbitcXHRhc3NlcnQoc3Bvb2wtXFx1MDAzZW1pbl9ocGFnZXMgPT0gLTEpO1xcbitcXHRhc3NlcnQoc3Bvb2wtXFx1MDAzZXJzdl9ocGFnZXMgPT0gLTEpO1xcbitcXHRhc3NlcnQoc3Bvb2wtXFx1MDAzZWNvdW50ID09IDEpO1xcbitcXHRhc3NlcnRfaHVnZXRsYl9hY2N0X21lbW9yeV9ub3RfY2FsbGVkKCk7XFxuK1xcbitcXHRodWdlcGFnZV9wdXRfc3VicG9vbChzcG9vbCk7XFxuK1xcdGFzc2VydF9odWdldGxiX2FjY3RfbWVtb3J5X25vdF9jYWxsZWQoKTtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgdGVzdF9zdWJwb29sX25ld19wdXRfd2l0aF9taW5fbGltaXQodm9pZClcXG4re1xcbitcXHRzdHJ1Y3QgaHN0YXRlIGg7XFxuK1xcdHN0cnVjdCBodWdlcGFnZV9zdWJwb29sICpzcG9vbDtcXG4rXFxuK1xcdHNwb29sID0gaHVnZXBhZ2VfbmV3X3N1YnBvb2woXFx1MDAyNmgsIDIwLCA1KTtcXG4rXFx0YXNzZXJ0KHNwb29sICE9IE5VTEwpO1xcbitcXHRhc3NlcnQoc3Bvb2wtXFx1MDAzZW1heF9ocGFnZXMgPT0gMjApO1xcbitcXHRhc3NlcnQoc3Bvb2wtXFx1MDAzZW1pbl9ocGFnZXMgPT0gNSk7XFxuK1xcdGFzc2VydChzcG9vbC1cXHUwMDNlcnN2X2hwYWdlcyA9PSA1KTtcXG4rXFx0YXNzZXJ0KHNwb29sLVxcdTAwM2Vjb3VudCA9PSAxKTtcXG4rXFx0YXNzZXJ0X2h1Z2V0bGJfYWNjdF9tZW1vcnlfY2FsbGVkKFxcdTAwMjZoLCA1KTtcXG4rXFxuK1xcdGh1Z2VwYWdlX3B1dF9zdWJwb29sKHNwb29sKTtcXG4rXFx0YXNzZXJ0X2h1Z2V0bGJfYWNjdF9tZW1vcnlfY2FsbGVkKFxcdTAwMjZoLCAtNSk7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIHRlc3Rfc3VicG9vbF9nZXRfcGFnZXNfYmVsb3dfbWluKHZvaWQpXFxuK3tcXG4rXFx0c3RydWN0IGhzdGF0ZSBoO1xcbitcXHRzdHJ1Y3QgaHVnZXBhZ2Vfc3VicG9vbCAqc3Bvb2w7XFxuK1xcdGxvbmcgcmV0O1xcbitcXG4rXFx0LyogTGV0J3MgaW5pdGlhbGl6ZTogbWluX2hwYWdlcyA9IDEwLCB1c2VkX2hwYWdlcyA9IDksIHJzdl9ocGFnZXMgPSAxICovXFxuK1xcdHNwb29sID0gaHVnZXBhZ2VfbmV3X3N1YnBvb2woXFx1MDAyNmgsIC0xLCAxMCk7XFxuK1xcdGFzc2VydF9odWdldGxiX2FjY3RfbWVtb3J5X2NhbGxlZChcXHUwMDI2aCwgMTApO1xcbitcXG4rXFx0cmV0ID0gaHVnZXBhZ2Vfc3VicG9vbF9nZXRfcGFnZXMoc3Bvb2wsIDkpO1xcbitcXHRhc3NlcnQocmV0ID09IDApO1xcbitcXHRhc3NlcnQoc3Bvb2wtXFx1MDAzZXVzZWRfaHBhZ2VzID09IDkpO1xcbitcXHRhc3NlcnQoc3Bvb2wtXFx1MDAzZXJzdl9ocGFnZXMgPT0gMSk7XFxuK1xcbitcXHQvKiBJbnZva2UgR2V0IChDb25zdW1lcyB0aGUgcmVtYWluaW5nIDEgc3VicG9vbCByZXNlcnZlISkgKi9cXG4rXFx0cmV0ID0gaHVnZXBhZ2Vfc3VicG9vbF9nZXRfcGFnZXMoc3Bvb2wsIDEpO1xcbitcXHRhc3NlcnQocmV0ID09IDApOyAvKiBDb3ZlcmVkIGJ5IHN1YnBvb2wgcmVzZXJ2ZSEgKi9cXG4rXFx0YXNzZXJ0KHNwb29sLVxcdTAwM2V1c2VkX2hwYWdlcyA9PSAxMCk7XFxuK1xcdGFzc2VydChzcG9vbC1cXHUwMDNlcnN2X2hwYWdlcyA9PSAwKTtcXG4rXFxuK1xcdC8qIEludm9rZSBQdXQgKFJlcGxlbmlzaGVzIHRoZSBzdWJwb29sIHJlc2VydmUhKSAqL1xcbitcXHRyZXQgPSBodWdlcGFnZV9zdWJwb29sX3B1dF9wYWdlcyhzcG9vbCwgMSk7XFxuK1xcdGFzc2VydChyZXQgPT0gMCk7IC8qIEtlcHQgYnkgc3VicG9vbCByZXNlcnZlISAqL1xcbitcXHRhc3NlcnQoc3Bvb2wtXFx1MDAzZXVzZWRfaHBhZ2VzID09IDkpO1xcbitcXHRhc3NlcnQoc3Bvb2wtXFx1MDAzZXJzdl9ocGFnZXMgPT0gMSk7XFxuK1xcbitcXHQvKiBDbGVhbnVwOiBSZXR1cm4gdXNlZF9ocGFnZXMgdG8gMCBzbyB0aGUgc3VicG9vbCBmcmVlcyBzeW1tZXRyaWNhbGx5ISAqL1xcbitcXHRodWdlcGFnZV9zdWJwb29sX3B1dF9wYWdlcyhzcG9vbCwgOSk7XFxuK1xcdGh1Z2VwYWdlX3B1dF9zdWJwb29sKHNwb29sKTtcXG4rXFx0YXNzZXJ0X2h1Z2V0bGJfYWNjdF9tZW1vcnlfY2FsbGVkKFxcdTAwMjZoLCAtMTApO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCB0ZXN0X3N1YnBvb2xfZ2V0X3BhZ2VzX2Nyb3NzaW5nX21pbih2b2lkKVxcbit7XFxuK1xcdHN0cnVjdCBoc3RhdGUgaDtcXG4rXFx0c3RydWN0IGh1Z2VwYWdlX3N1YnBvb2wgKnNwb29sO1xcbitcXHRsb25nIHJldDtcXG4rXFxuK1xcdC8qIExldCdzIGluaXRpYWxpemU6IG1pbl9ocGFnZXMgPSAxMCwgdXNlZF9ocGFnZXMgPSAxMCwgcnN2X2hwYWdlcyA9IDAgKi9cXG4rXFx0c3Bvb2wgPSBodWdlcGFnZV9uZXdfc3VicG9vbChcXHUwMDI2aCwgLTEsIDEwKTtcXG4rXFx0YXNzZXJ0X2h1Z2V0bGJfYWNjdF9tZW1vcnlfY2FsbGVkKFxcdTAwMjZoLCAxMCk7XFxuK1xcbitcXHRodWdlcGFnZV9zdWJwb29sX2dldF9wYWdlcyhzcG9vbCwgMTApO1xcbitcXHRhc3NlcnQoc3Bvb2wtXFx1MDAzZXVzZWRfaHBhZ2VzID09IDEwKTtcXG4rXFx0YXNzZXJ0KHNwb29sLVxcdTAwM2Vyc3ZfaHBhZ2VzID09IDApO1xcbitcXG4rXFx0LyogSW52b2tlIEdldCAoVHJpZ2dlcnMgYSByZXF1ZXN0IGZvciBhIEdsb2JhbCBCdWRkeS9TdXJwbHVzIHBhZ2UhKSAqL1xcbitcXHRyZXQgPSBodWdlcGFnZV9zdWJwb29sX2dldF9wYWdlcyhzcG9vbCwgMSk7XFxuK1xcdGFzc2VydChyZXQgPT0gMSk7IC8qIFJlcXVpcmVzIGdsb2JhbCBwYWdlISAqL1xcbitcXHRhc3NlcnQoc3Bvb2wtXFx1MDAzZXVzZWRfaHBhZ2VzID09IDExKTtcXG4rXFx0YXNzZXJ0KHNwb29sLVxcdTAwM2Vyc3ZfaHBhZ2VzID09IDApO1xcbitcXG4rXFx0LyogSW52b2tlIFB1dCAoQWJvdmUgbWluaW11bSwgc28gaXQgcmVsZWFzZXMgdGhlIHBhZ2UgdG8gdGhlIEdsb2JhbCBQb29sISkgKi9cXG4rXFx0cmV0ID0gaHVnZXBhZ2Vfc3VicG9vbF9wdXRfcGFnZXMoc3Bvb2wsIDEpO1xcbitcXHRhc3NlcnQocmV0ID09IDEpOyAvKiBEcm9wcGVkIHRvIGdsb2JhbCBwb29sISAqL1xcbitcXHRhc3NlcnQoc3Bvb2wtXFx1MDAzZXVzZWRfaHBhZ2VzID09IDEwKTtcXG4rXFx0YXNzZXJ0KHNwb29sLVxcdTAwM2Vyc3ZfaHBhZ2VzID09IDApO1xcbitcXG4rXFx0LyogQ2xlYW51cCAqL1xcbitcXHRodWdlcGFnZV9zdWJwb29sX3B1dF9wYWdlcyhzcG9vbCwgMTApO1xcbitcXHRodWdlcGFnZV9wdXRfc3VicG9vbChzcG9vbCk7XFxuK1xcdGFzc2VydF9odWdldGxiX2FjY3RfbWVtb3J5X2NhbGxlZChcXHUwMDI2aCwgLTEwKTtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgdGVzdF9zdWJwb29sX2dldF9wYWdlc19jcm9zc2luZ19taW5fbXVsdGkodm9pZClcXG4re1xcbitcXHRzdHJ1Y3QgaHN0YXRlIGg7XFxuK1xcdHN0cnVjdCBodWdlcGFnZV9zdWJwb29sICpzcG9vbDtcXG4rXFx0bG9uZyByZXQ7XFxuK1xcbitcXHQvKiBTY2VuYXJpbyAxOiBDcm9zc2luZyBlbnRpcmVseSBpbnRvIHN1cnBsdXMgdGVycml0b3J5IGJ5IGEgZGVsdGEgXFx1MDAzZSAxICovXFxuK1xcdC8qIExldCdzIGluaXRpYWxpemU6IG1pbl9ocGFnZXMgPSAxMCwgdXNlZF9ocGFnZXMgPSA4LCByc3ZfaHBhZ2VzID0gMiAqL1xcbitcXHRzcG9vbCA9IGh1Z2VwYWdlX25ld19zdWJwb29sKFxcdTAwMjZoLCAtMSwgMTApO1xcbitcXHRhc3NlcnRfaHVnZXRsYl9hY2N0X21lbW9yeV9jYWxsZWQoXFx1MDAyNmgsIDEwKTtcXG4rXFxuK1xcdHJldCA9IGh1Z2VwYWdlX3N1YnBvb2xfZ2V0X3BhZ2VzKHNwb29sLCA4KTtcXG4rXFx0YXNzZXJ0KHJldCA9PSAwKTtcXG4rXFx0YXNzZXJ0KHNwb29sLVxcdTAwM2V1c2VkX2hwYWdlcyA9PSA4KTtcXG4rXFx0YXNzZXJ0KHNwb29sLVxcdTAwM2Vyc3ZfaHBhZ2VzID09IDIpO1xcbitcXG4rXFx0LyogSW52b2tlIEdldCB3aXRoIGRlbHRhID0gNSAoQ3Jvc3NlcyBtaW4gbGltaXQgb2YgMTAgdXAgdG8gMTMpICovXFxuK1xcdHJldCA9IGh1Z2VwYWdlX3N1YnBvb2xfZ2V0X3BhZ2VzKHNwb29sLCA1KTtcXG4rXFx0YXNzZXJ0KHJldCA9PSAzKTsgLyogKDggKyA1KSAtIDEwID0gMyBnbG9iYWwgcGFnZXMgcmVxdWlyZWQhICovXFxuK1xcdGFzc2VydChzcG9vbC1cXHUwMDNldXNlZF9ocGFnZXMgPT0gMTMpO1xcbitcXHRhc3NlcnQoc3Bvb2wtXFx1MDAzZXJzdl9ocGFnZXMgPT0gMCk7XFxuK1xcbitcXHQvKiBJbnZva2UgUHV0IHdpdGggZGVsdGEgPSA1IChEcm9wcyBmcm9tIDEzIGRvd24gdG8gOCkgKi9cXG4rXFx0cmV0ID0gaHVnZXBhZ2Vfc3VicG9vbF9wdXRfcGFnZXMoc3Bvb2wsIDUpO1xcbitcXHRhc3NlcnQocmV0ID09IDMpOyAvKiAzIHN1cnBsdXMgcGFnZXMgcmVsZWFzZWQgdG8gdGhlIGdsb2JhbCBwb29sISAqL1xcbitcXHRhc3NlcnQoc3Bvb2wtXFx1MDAzZXVzZWRfaHBhZ2VzID09IDgpO1xcbitcXHRhc3NlcnQoc3Bvb2wtXFx1MDAzZXJzdl9ocGFnZXMgPT0gMik7IC8qIDIgc3VicG9vbCByZXNlcnZlcyBwZXJmZWN0bHkgcmVzdG9yZWQhICovXFxuK1xcbitcXHQvKiBTY2VuYXJpbyAyOiBMYW5kaW5nIGV4YWN0bHkgb24gdGhlIG1pbl9ocGFnZXMgYm91bmRhcnkgd2l0aCBkZWx0YSBcXHUwMDNlIDEgKi9cXG4rXFx0cmV0ID0gaHVnZXBhZ2Vfc3VicG9vbF9nZXRfcGFnZXMoc3Bvb2wsIDIpO1xcbitcXHRhc3NlcnQocmV0ID09IDApOyAvKiBQZXJmZWN0bHkgY292ZXJlZCBieSByZW1haW5pbmcgMiBzdWJwb29sIHJlc2VydmVzISAqL1xcbitcXHRhc3NlcnQoc3Bvb2wtXFx1MDAzZXVzZWRfaHBhZ2VzID09IDEwKTtcXG4rXFx0YXNzZXJ0KHNwb29sLVxcdTAwM2Vyc3ZfaHBhZ2VzID09IDApO1xcbitcXG4rXFx0cmV0ID0gaHVnZXBhZ2Vfc3VicG9vbF9wdXRfcGFnZXMoc3Bvb2wsIDIpO1xcbitcXHRhc3NlcnQocmV0ID09IDApOyAvKiBTd2FsbG93ZWQgcGVyZmVjdGx5IHRvIHJlcGxlbmlzaCB0aGUgMiBzdWJwb29sIHJlc2VydmVzISAqL1xcbitcXHRhc3NlcnQoc3Bvb2wtXFx1MDAzZXVzZWRfaHBhZ2VzID09IDgpO1xcbitcXHRhc3NlcnQoc3Bvb2wtXFx1MDAzZXJzdl9ocGFnZXMgPT0gMik7XFxuK1xcbitcXHQvKiBDbGVhbnVwICovXFxuK1xcdGh1Z2VwYWdlX3N1YnBvb2xfcHV0X3BhZ2VzKHNwb29sLCA4KTtcXG4rXFx0aHVnZXBhZ2VfcHV0X3N1YnBvb2woc3Bvb2wpO1xcbitcXHRhc3NlcnRfaHVnZXRsYl9hY2N0X21lbW9yeV9jYWxsZWQoXFx1MDAyNmgsIC0xMCk7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIHRlc3Rfc3VicG9vbF9nZXRfcGFnZXNfbWF4X2xpbWl0KHZvaWQpXFxuK3tcXG4rXFx0c3RydWN0IGhzdGF0ZSBoO1xcbitcXHRzdHJ1Y3QgaHVnZXBhZ2Vfc3VicG9vbCAqc3Bvb2w7XFxuK1xcdGxvbmcgcmV0O1xcbitcXG4rXFx0c3Bvb2wgPSBodWdlcGFnZV9uZXdfc3VicG9vbChcXHUwMDI2aCwgNSwgLTEpO1xcbitcXHRhc3NlcnRfaHVnZXRsYl9hY2N0X21lbW9yeV9ub3RfY2FsbGVkKCk7XFxuK1xcbitcXHRyZXQgPSBodWdlcGFnZV9zdWJwb29sX2dldF9wYWdlcyhzcG9vbCwgNSk7XFxuK1xcdGFzc2VydChyZXQgPT0gNSk7XFxuK1xcdGFzc2VydChzcG9vbC1cXHUwMDNldXNlZF9ocGFnZXMgPT0gNSk7XFxuK1xcdGFzc2VydChzcG9vbC1cXHUwMDNlcnN2X2hwYWdlcyA9PSAtMSk7XFxuK1xcbitcXHQvKiBJbnZva2UgR2V0IChTaG91bGQgdHJpZ2dlciAtRU5PTUVNIGR1ZSB0byBtYXggY2FwIGxpbWl0IGV4Y2VlZGVkISkgKi9cXG4rXFx0cmV0ID0gaHVnZXBhZ2Vfc3VicG9vbF9nZXRfcGFnZXMoc3Bvb2wsIDEpO1xcbitcXHRhc3NlcnQocmV0ID09IC1FTk9NRU0pO1xcbitcXHRhc3NlcnQoc3Bvb2wtXFx1MDAzZXVzZWRfaHBhZ2VzID09IDUpOyAvKiBVbmNoYW5nZWQgKi9cXG4rXFxuK1xcdC8qIENsZWFudXAgKi9cXG4rXFx0aHVnZXBhZ2Vfc3VicG9vbF9wdXRfcGFnZXMoc3Bvb2wsIDUpO1xcbitcXHRodWdlcGFnZV9wdXRfc3VicG9vbChzcG9vbCk7XFxuK1xcdGFzc2VydF9odWdldGxiX2FjY3RfbWVtb3J5X25vdF9jYWxsZWQoKTtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgdGVzdF9zdWJwb29sX2dldF9wYWdlc19ub19saW1pdHModm9pZClcXG4re1xcbitcXHRzdHJ1Y3QgaHN0YXRlIGg7XFxuK1xcdHN0cnVjdCBodWdlcGFnZV9zdWJwb29sICpzcG9vbDtcXG4rXFx0bG9uZyByZXQ7XFxuK1xcbitcXHRzcG9vbCA9IGh1Z2VwYWdlX25ld19zdWJwb29sKFxcdTAwMjZoLCAtMSwgLTEpO1xcbitcXHRhc3NlcnRfaHVnZXRsYl9hY2N0X21lbW9yeV9ub3RfY2FsbGVkKCk7XFxuK1xcbitcXHRodWdlcGFnZV9zdWJwb29sX2dldF9wYWdlcyhzcG9vbCwgNSk7XFxuK1xcdGFzc2VydChzcG9vbC1cXHUwMDNldXNlZF9ocGFnZXMgPT0gNSk7XFxuK1xcbitcXHQvKiBJbnZva2UgR2V0IChTdXJwbHVzIEdsb2JhbCBUZXJyaXRvcnkpICovXFxuK1xcdHJldCA9IGh1Z2VwYWdlX3N1YnBvb2xfZ2V0X3BhZ2VzKHNwb29sLCAyKTtcXG4rXFx0YXNzZXJ0KHJldCA9PSAyKTtcXG4rXFx0YXNzZXJ0KHNwb29sLVxcdTAwM2V1c2VkX2hwYWdlcyA9PSA3KTtcXG4rXFxuK1xcdC8qIEludm9rZSBQdXQgKi9cXG4rXFx0cmV0ID0gaHVnZXBhZ2Vfc3VicG9vbF9wdXRfcGFnZXMoc3Bvb2wsIDIpO1xcbitcXHRhc3NlcnQocmV0ID09IDIpO1xcbitcXHRhc3NlcnQoc3Bvb2wtXFx1MDAzZXVzZWRfaHBhZ2VzID09IDUpO1xcbitcXG4rXFx0LyogQ2xlYW51cCAqL1xcbitcXHRodWdlcGFnZV9zdWJwb29sX3B1dF9wYWdlcyhzcG9vbCwgNSk7XFxuK1xcdGh1Z2VwYWdlX3B1dF9zdWJwb29sKHNwb29sKTtcXG4rXFx0YXNzZXJ0X2h1Z2V0bGJfYWNjdF9tZW1vcnlfbm90X2NhbGxlZCgpO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCB0ZXN0X3N1YnBvb2xfZnJlZV9ocGFnZXModm9pZClcXG4re1xcbitcXHRzdHJ1Y3QgaHN0YXRlIGg7XFxuK1xcdHN0cnVjdCBodWdlcGFnZV9zdWJwb29sICpzcG9vbDtcXG4rXFxuK1xcdC8qIFRlc3QgdGhhdCBmcmVlX2hwYWdlcyB3aXRoIE5PIG1pbl9zaXplIHdvcmtzIHBlcmZlY3RseSAqL1xcbitcXHRzcG9vbCA9IGh1Z2VwYWdlX25ld19zdWJwb29sKFxcdTAwMjZoLCAxNSwgLTEpO1xcbitcXHRodWdlcGFnZV9zdWJwb29sX2dldF9wYWdlcyhzcG9vbCwgMyk7XFxuK1xcdGFzc2VydChodWdlcGFnZV9zdWJwb29sX2ZyZWVfaHBhZ2VzKHNwb29sKSA9PSAxMik7XFxuK1xcdGh1Z2VwYWdlX3N1YnBvb2xfcHV0X3BhZ2VzKHNwb29sLCAzKTtcXG4rXFx0aHVnZXBhZ2VfcHV0X3N1YnBvb2woc3Bvb2wpO1xcbitcXG4rXFx0LyogVGVzdCB0aGF0IGZyZWVfaHBhZ2VzIHdpdGggYSBtaW5fc2l6ZSBjb25maWd1cmVkIGlzIENPTVBMRVRFTFkgVU5BRkZFQ1RFRCBieSBpdCAqL1xcbitcXHRzcG9vbCA9IGh1Z2VwYWdlX25ld19zdWJwb29sKFxcdTAwMjZoLCAxNSwgNSk7XFxuK1xcdGFzc2VydF9odWdldGxiX2FjY3RfbWVtb3J5X2NhbGxlZChcXHUwMDI2aCwgNSk7XFxuK1xcdGh1Z2VwYWdlX3N1YnBvb2xfZ2V0X3BhZ2VzKHNwb29sLCAzKTtcXG4rXFx0YXNzZXJ0KGh1Z2VwYWdlX3N1YnBvb2xfZnJlZV9ocGFnZXMoc3Bvb2wpID09IDEyKTsgLyogU2hvdWxkIHN0aWxsIGJlIDE1IC0gMyA9IDEyISAqL1xcbitcXHRodWdlcGFnZV9zdWJwb29sX3B1dF9wYWdlcyhzcG9vbCwgMyk7XFxuK1xcdGh1Z2VwYWdlX3B1dF9zdWJwb29sKHNwb29sKTtcXG4rXFx0YXNzZXJ0X2h1Z2V0bGJfYWNjdF9tZW1vcnlfY2FsbGVkKFxcdTAwMjZoLCAtNSk7XFxuK1xcbitcXHRzcG9vbCA9IGh1Z2VwYWdlX25ld19zdWJwb29sKFxcdTAwMjZoLCAtMSwgLTEpO1xcbitcXHRodWdlcGFnZV9zdWJwb29sX2dldF9wYWdlcyhzcG9vbCwgMyk7XFxuK1xcdGFzc2VydChodWdlcGFnZV9zdWJwb29sX2ZyZWVfaHBhZ2VzKHNwb29sKSA9PSAtMSk7XFxuK1xcdGh1Z2VwYWdlX3N1YnBvb2xfcHV0X3BhZ2VzKHNwb29sLCAzKTtcXG4rXFx0aHVnZXBhZ2VfcHV0X3N1YnBvb2woc3Bvb2wpO1xcbitcXG4rXFx0LyogVGVzdCB0aGF0IGZyZWVfaHBhZ2VzIHdpdGggYSBtaW5fc2l6ZSBjb25maWd1cmVkIGFuZCBOTyBtYXggc2l6ZSByZXR1cm5zIC0xICovXFxuK1xcdHNwb29sID0gaHVnZXBhZ2VfbmV3X3N1YnBvb2woXFx1MDAyNmgsIC0xLCA1KTtcXG4rXFx0YXNzZXJ0X2h1Z2V0bGJfYWNjdF9tZW1vcnlfY2FsbGVkKFxcdTAwMjZoLCA1KTtcXG4rXFx0aHVnZXBhZ2Vfc3VicG9vbF9nZXRfcGFnZXMoc3Bvb2wsIDMpO1xcbitcXHRhc3NlcnQoaHVnZXBhZ2Vfc3VicG9vbF9mcmVlX2hwYWdlcyhzcG9vbCkgPT0gLTEpO1xcbitcXHRodWdlcGFnZV9zdWJwb29sX3B1dF9wYWdlcyhzcG9vbCwgMyk7XFxuK1xcdGh1Z2VwYWdlX3B1dF9zdWJwb29sKHNwb29sKTtcXG4rXFx0YXNzZXJ0X2h1Z2V0bGJfYWNjdF9tZW1vcnlfY2FsbGVkKFxcdTAwMjZoLCAtNSk7XFxuK1xcbitcXHRzcG9vbCA9IGh1Z2VwYWdlX25ld19zdWJwb29sKFxcdTAwMjZoLCAzLCAtMSk7XFxuK1xcdGh1Z2VwYWdlX3N1YnBvb2xfZ2V0X3BhZ2VzKHNwb29sLCAzKTtcXG4rXFx0YXNzZXJ0KGh1Z2VwYWdlX3N1YnBvb2xfZnJlZV9ocGFnZXMoc3Bvb2wpID09IDApO1xcbitcXHRodWdlcGFnZV9zdWJwb29sX3B1dF9wYWdlcyhzcG9vbCwgMyk7XFxuK1xcdGh1Z2VwYWdlX3B1dF9zdWJwb29sKHNwb29sKTtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgdGVzdF9zdWJwb29sX21heF9ocGFnZXModm9pZClcXG4re1xcbitcXHRzdHJ1Y3QgaHN0YXRlIGg7XFxuK1xcdHN0cnVjdCBodWdlcGFnZV9zdWJwb29sICpzcG9vbDtcXG4rXFxuK1xcdHNwb29sID0gaHVnZXBhZ2VfbmV3X3N1YnBvb2woXFx1MDAyNmgsIDEyMywgLTEpO1xcbitcXHRhc3NlcnQoaHVnZXBhZ2Vfc3VicG9vbF9tYXhfaHBhZ2VzKHNwb29sKSA9PSAxMjMpO1xcbitcXHRodWdlcGFnZV9wdXRfc3VicG9vbChzcG9vbCk7XFxuK1xcbitcXHQvKiBUZXN0IHRoYXQgbWF4X2hwYWdlcyB3aXRoIGEgbWluX3NpemUgY29uZmlndXJlZCBpcyBDT01QTEVURUxZIFVOQUZGRUNURUQgYnkgaXQgKi9cXG4rXFx0c3Bvb2wgPSBodWdlcGFnZV9uZXdfc3VicG9vbChcXHUwMDI2aCwgMTIzLCA1KTtcXG4rXFx0YXNzZXJ0X2h1Z2V0bGJfYWNjdF9tZW1vcnlfY2FsbGVkKFxcdTAwMjZoLCA1KTtcXG4rXFx0YXNzZXJ0KGh1Z2VwYWdlX3N1YnBvb2xfbWF4X2hwYWdlcyhzcG9vbCkgPT0gMTIzKTtcXG4rXFx0aHVnZXBhZ2VfcHV0X3N1YnBvb2woc3Bvb2wpO1xcbitcXHRhc3NlcnRfaHVnZXRsYl9hY2N0X21lbW9yeV9jYWxsZWQoXFx1MDAyNmgsIC01KTtcXG4rXFxuK1xcdHNwb29sID0gaHVnZXBhZ2VfbmV3X3N1YnBvb2woXFx1MDAyNmgsIC0xLCAtMSk7XFxuK1xcdGFzc2VydChodWdlcGFnZV9zdWJwb29sX21heF9ocGFnZXMoc3Bvb2wpID09IC0xKTtcXG4rXFx0aHVnZXBhZ2VfcHV0X3N1YnBvb2woc3Bvb2wpO1xcbitcXG4rXFx0c3Bvb2wgPSBodWdlcGFnZV9uZXdfc3VicG9vbChcXHUwMDI2aCwgLTEsIDUpO1xcbitcXHRhc3NlcnRfaHVnZXRsYl9hY2N0X21lbW9yeV9jYWxsZWQoXFx1MDAyNmgsIDUpO1xcbitcXHRhc3NlcnQoaHVnZXBhZ2Vfc3VicG9vbF9tYXhfaHBhZ2VzKHNwb29sKSA9PSAtMSk7XFxuK1xcdGh1Z2VwYWdlX3B1dF9zdWJwb29sKHNwb29sKTtcXG4rXFx0YXNzZXJ0X2h1Z2V0bGJfYWNjdF9tZW1vcnlfY2FsbGVkKFxcdTAwMjZoLCAtNSk7XFxuK1xcbitcXHRzcG9vbCA9IGh1Z2VwYWdlX25ld19zdWJwb29sKFxcdTAwMjZoLCAwLCAtMSk7XFxuK1xcdGFzc2VydChodWdlcGFnZV9zdWJwb29sX21heF9ocGFnZXMoc3Bvb2wpID09IDApO1xcbitcXHRodWdlcGFnZV9wdXRfc3VicG9vbChzcG9vbCk7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIHRlc3Rfc3VicG9vbF9tYXhfc2l6ZSh2b2lkKVxcbit7XFxuK1xcdHN0cnVjdCBoc3RhdGUgaDtcXG4rXFx0c3RydWN0IGh1Z2VwYWdlX3N1YnBvb2wgKnNwb29sO1xcbitcXG4rXFx0c3Bvb2wgPSBodWdlcGFnZV9uZXdfc3VicG9vbChcXHUwMDI2aCwgMTAsIC0xKTtcXG4rXFx0YXNzZXJ0KGh1Z2VwYWdlX3N1YnBvb2xfbWF4X3NpemUoc3Bvb2wpID09ICgxMFVMTCBcXHUwMDNjXFx1MDAzYyAyMSkpO1xcbitcXHRodWdlcGFnZV9wdXRfc3VicG9vbChzcG9vbCk7XFxuK1xcbitcXHQvKiBUZXN0IHRoYXQgbWF4X3NpemUgd2l0aCBhIG1pbl9zaXplIGNvbmZpZ3VyZWQgaXMgQ09NUExFVEVMWSBVTkFGRkVDVEVEIGJ5IGl0ICovXFxuK1xcdHNwb29sID0gaHVnZXBhZ2VfbmV3X3N1YnBvb2woXFx1MDAyNmgsIDEwLCA1KTtcXG4rXFx0YXNzZXJ0X2h1Z2V0bGJfYWNjdF9tZW1vcnlfY2FsbGVkKFxcdTAwMjZoLCA1KTtcXG4rXFx0YXNzZXJ0KGh1Z2VwYWdlX3N1YnBvb2xfbWF4X3NpemUoc3Bvb2wpID09ICgxMFVMTCBcXHUwMDNjXFx1MDAzYyAyMSkpO1xcbitcXHRodWdlcGFnZV9wdXRfc3VicG9vbChzcG9vbCk7XFxuK1xcdGFzc2VydF9odWdldGxiX2FjY3RfbWVtb3J5X2NhbGxlZChcXHUwMDI2aCwgLTUpO1xcbitcXG4rXFx0c3Bvb2wgPSBodWdlcGFnZV9uZXdfc3VicG9vbChcXHUwMDI2aCwgLTEsIC0xKTtcXG4rXFx0YXNzZXJ0KGh1Z2VwYWdlX3N1YnBvb2xfbWF4X3NpemUoc3Bvb2wpID09IC0xVUxMKTtcXG4rXFx0aHVnZXBhZ2VfcHV0X3N1YnBvb2woc3Bvb2wpO1xcbitcXG4rXFx0c3Bvb2wgPSBodWdlcGFnZV9uZXdfc3VicG9vbChcXHUwMDI2aCwgMCwgLTEpO1xcbitcXHRhc3NlcnQoaHVnZXBhZ2Vfc3VicG9vbF9tYXhfc2l6ZShzcG9vbCkgPT0gMFVMTCk7XFxuK1xcdGh1Z2VwYWdlX3B1dF9zdWJwb29sKHNwb29sKTtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgdGVzdF9zdWJwb29sX21pbl9zaXplKHZvaWQpXFxuK3tcXG4rXFx0c3RydWN0IGhzdGF0ZSBoO1xcbitcXHRzdHJ1Y3QgaHVnZXBhZ2Vfc3VicG9vbCAqc3Bvb2w7XFxuK1xcbitcXHRzcG9vbCA9IGh1Z2VwYWdlX25ld19zdWJwb29sKFxcdTAwMjZoLCAtMSwgNSk7XFxuK1xcdGFzc2VydF9odWdldGxiX2FjY3RfbWVtb3J5X2NhbGxlZChcXHUwMDI2aCwgNSk7XFxuK1xcdGFzc2VydChodWdlcGFnZV9zdWJwb29sX21pbl9zaXplKHNwb29sKSA9PSAoNVVMTCBcXHUwMDNjXFx1MDAzYyAyMSkpO1xcbitcXHRodWdlcGFnZV9wdXRfc3VicG9vbChzcG9vbCk7XFxuK1xcdGFzc2VydF9odWdldGxiX2FjY3RfbWVtb3J5X2NhbGxlZChcXHUwMDI2aCwgLTUpO1xcbitcXG4rXFx0LyogVGVzdCB0aGF0IG1pbl9zaXplIHdpdGggYSBtYXhfc2l6ZSBjb25maWd1cmVkIGlzIENPTVBMRVRFTFkgVU5BRkZFQ1RFRCBieSBpdCAqL1xcbitcXHRzcG9vbCA9IGh1Z2VwYWdlX25ld19zdWJwb29sKFxcdTAwMjZoLCAyMCwgNSk7XFxuK1xcdGFzc2VydF9odWdldGxiX2FjY3RfbWVtb3J5X2NhbGxlZChcXHUwMDI2aCwgNSk7XFxuK1xcdGFzc2VydChodWdlcGFnZV9zdWJwb29sX21pbl9zaXplKHNwb29sKSA9PSAoNVVMTCBcXHUwMDNjXFx1MDAzYyAyMSkpO1xcbitcXHRodWdlcGFnZV9wdXRfc3VicG9vbChzcG9vbCk7XFxuK1xcdGFzc2VydF9odWdldGxiX2FjY3RfbWVtb3J5X2NhbGxlZChcXHUwMDI2aCwgLTUpO1xcbitcXG4rXFx0c3Bvb2wgPSBodWdlcGFnZV9uZXdfc3VicG9vbChcXHUwMDI2aCwgLTEsIC0xKTtcXG4rXFx0YXNzZXJ0KGh1Z2VwYWdlX3N1YnBvb2xfbWluX3NpemUoc3Bvb2wpID09IC0xVUxMKTtcXG4rXFx0aHVnZXBhZ2VfcHV0X3N1YnBvb2woc3Bvb2wpO1xcbitcXG4rXFx0c3Bvb2wgPSBodWdlcGFnZV9uZXdfc3VicG9vbChcXHUwMDI2aCwgLTEsIDApO1xcbitcXHRhc3NlcnRfaHVnZXRsYl9hY2N0X21lbW9yeV9jYWxsZWQoXFx1MDAyNmgsIDApO1xcbitcXHRhc3NlcnQoaHVnZXBhZ2Vfc3VicG9vbF9taW5fc2l6ZShzcG9vbCkgPT0gMFVMTCk7XFxuK1xcdGh1Z2VwYWdlX3B1dF9zdWJwb29sKHNwb29sKTtcXG4rXFx0YXNzZXJ0X2h1Z2V0bGJfYWNjdF9tZW1vcnlfY2FsbGVkKFxcdTAwMjZoLCAwKTtcXG4rfVxcbitcXG4raW50IG1haW4odm9pZClcXG4re1xcbitcXHR0ZXN0X3N1YnBvb2xfbmV3X3B1dF9ub19taW5fbGltaXQoKTtcXG4rXFx0dGVzdF9zdWJwb29sX25ld19wdXRfd2l0aF9taW5fbGltaXQoKTtcXG4rXFx0dGVzdF9zdWJwb29sX2dldF9wYWdlc19iZWxvd19taW4oKTtcXG4rXFx0dGVzdF9zdWJwb29sX2dldF9wYWdlc19jcm9zc2luZ19taW4oKTtcXG4rXFx0dGVzdF9zdWJwb29sX2dldF9wYWdlc19jcm9zc2luZ19taW5fbXVsdGkoKTtcXG4rXFx0dGVzdF9zdWJwb29sX2dldF9wYWdlc19tYXhfbGltaXQoKTtcXG4rXFx0dGVzdF9zdWJwb29sX2dldF9wYWdlc19ub19saW1pdHMoKTtcXG4rXFx0dGVzdF9zdWJwb29sX2ZyZWVfaHBhZ2VzKCk7XFxuK1xcdHRlc3Rfc3VicG9vbF9tYXhfaHBhZ2VzKCk7XFxuK1xcdHRlc3Rfc3VicG9vbF9tYXhfc2l6ZSgpO1xcbitcXHR0ZXN0X3N1YnBvb2xfbWluX3NpemUoKTtcXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIxVDE4OjA4OjE3Ljg1MjUxNzQ3WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MzU3NjQwMzE2MzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSFVHRVRMQkZTXCIsXG4gICAgXCJNRU1DR1wiLFxuICAgIFwiQ0dST1VQX0hVR0VUTEJcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJhbGxvY19odWdldGxiX2ZvbGlvXCIsXG4gICAgXCJodWdldGxiX3Jlc2VydmVfcGFnZXNcIixcbiAgICBcIm1lbV9jZ3JvdXBfaHVnZXRsYl90cnlfY2hhcmdlXCIsXG4gICAgXCJtZW1fY2dyb3VwX2h1Z2V0bGJfY29tbWl0X2NoYXJnZVwiLFxuICAgIFwibWVtX2Nncm91cF9odWdldGxiX2NhbmNlbF9jaGFyZ2VcIixcbiAgICBcImh1Z2VwYWdlX3N1YnBvb2xfZ2V0X3BhZ2VzXCIsXG4gICAgXCJodWdlcGFnZV9zdWJwb29sX3B1dF9wYWdlc1wiLFxuICAgIFwiaHVnZXBhZ2VfbmV3X3N1YnBvb2xcIixcbiAgICBcImh1Z2VwYWdlX3B1dF9zdWJwb29sXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggc2VyaWVzIHJlZmFjdG9ycyB0aGUgaHVnZXRsYiBzdWJwb29sIGxvZ2ljIGludG8gYSBzZXBhcmF0ZSBmaWxlIGFuZCBtb2RpZmllcyB0aGUgaHVnZXRsYiBhbGxvY2F0aW9uIHBhdGggdG8gdXNlIGEgbmV3IHRyeS9jb21taXQvY2FuY2VsIGNoYXJnaW5nIG1vZGVsIGZvciBtZW1vcnkgY2dyb3Vwcy4gSXQgYWxzbyBtb2RpZmllcyB0aGUgaHVnZXRsYl9yZXNlcnZlX3BhZ2VzIGVycm9yIHBhdGguIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gY29yZSBtZW1vcnkgbWFuYWdlbWVudCBhbmQgY2dyb3VwIGxvZ2ljIHRoYXQgYXJlIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgaHVnZXRsYmZzIGFuZCBjZ3JvdXBmcywgbWFraW5nIHRoZW0gaGlnaGx5IHJlbGV2YW50IGZvciBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG5ldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0XG4gICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksXG4gICBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDcwMDg1MmNkOWEwMjNhNTEwNWUyMzQxZDI0N2I4NjQwMDJjY2M2ZmNcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIEp1bCAyMSAxODowODoxNSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2Nncm91cF92Ml9hbGxvY2F0aW9uX2ZhaWx1cmUuYyBiL2Nncm91cF92Ml9hbGxvY2F0aW9uX2ZhaWx1cmUuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi45MzhjYmYwMmFlNmY3YVxuLS0tIC9kZXYvbnVsbFxuKysrIGIvY2dyb3VwX3YyX2FsbG9jYXRpb25fZmFpbHVyZS5jXG5AQCAtMCwwICsxLDE2MCBAQFxuKyNkZWZpbmUgX0dOVV9TT1VSQ0VcbisjaW5jbHVkZSBcdTAwM2NzdGRpby5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjc3RkbGliLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2N1bmlzdGQuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2ZjbnRsLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NzeXMvbW1hbi5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjc3lzL3N0YXQuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY3N5cy90eXBlcy5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjc3lzL3dhaXQuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY3N0cmluZy5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjZXJybm8uaFx1MDAzZVxuK1xuKyNkZWZpbmUgQ0dST1VQX1BBVEggXCIvc3lzL2ZzL2Nncm91cFwiXG4rI2RlZmluZSBURVNUX0NHUk9VUCBcInRlc3RfcmVwcm9kdWNlclwiXG4rI2RlZmluZSBURVNUX0NHUk9VUF9QQVRIIENHUk9VUF9QQVRIIFwiL1wiIFRFU1RfQ0dST1VQXG4rXG4rdm9pZCB3cml0ZV9maWxlKGNvbnN0IGNoYXIgKnBhdGgsIGNvbnN0IGNoYXIgKnZhbCkge1xuKyAgICBpbnQgZmQgPSBvcGVuKHBhdGgsIE9fV1JPTkxZKTtcbisgICAgaWYgKGZkIFx1MDAzYyAwKSB7XG4rICAgICAgICBmcHJpbnRmKHN0ZGVyciwgXCJGYWlsZWQgdG8gb3BlbiAlczogJXNcXG5cIiwgcGF0aCwgc3RyZXJyb3IoZXJybm8pKTtcbisgICAgICAgIGV4aXQoMSk7XG4rICAgIH1cbisgICAgaWYgKHdyaXRlKGZkLCB2YWwsIHN0cmxlbih2YWwpKSBcdTAwM2MgMCkge1xuKyAgICAgICAgZnByaW50ZihzdGRlcnIsIFwiRmFpbGVkIHRvIHdyaXRlICVzIHRvICVzOiAlc1xcblwiLCB2YWwsIHBhdGgsIHN0cmVycm9yKGVycm5vKSk7XG4rICAgICAgICBjbG9zZShmZCk7XG4rICAgICAgICBleGl0KDEpO1xuKyAgICB9XG4rICAgIGNsb3NlKGZkKTtcbit9XG4rXG4raW50IGlzX2h1Z2V0bGJfYWNjb3VudGluZ19lbmFibGVkKCkge1xuKyAgICBGSUxFICpmcCA9IGZvcGVuKFwiL3Byb2MvbW91bnRzXCIsIFwiclwiKTtcbisgICAgaWYgKCFmcCkge1xuKyAgICAgICAgcGVycm9yKFwiZm9wZW4gL3Byb2MvbW91bnRzXCIpO1xuKyAgICAgICAgcmV0dXJuIC0xO1xuKyAgICB9XG4rXG4rICAgIGNoYXIgbGluZVsxMDI0XTtcbisgICAgaW50IGVuYWJsZWQgPSAwO1xuKyAgICB3aGlsZSAoZmdldHMobGluZSwgc2l6ZW9mKGxpbmUpLCBmcCkpIHtcbisgICAgICAgIGNoYXIgc3BlY1syNTZdLCBmaWxlWzI1Nl0sIHR5cGVbMjU2XSwgb3B0c1s1MTJdO1xuKyAgICAgICAgaWYgKHNzY2FuZihsaW5lLCBcIiUyNTVzICUyNTVzICUyNTVzICU1MTFzXCIsIHNwZWMsIGZpbGUsIHR5cGUsIG9wdHMpID09IDQpIHtcbisgICAgICAgICAgICBpZiAoc3RyY21wKGZpbGUsIENHUk9VUF9QQVRIKSA9PSAwIFx1MDAyNlx1MDAyNiBzdHJjbXAodHlwZSwgXCJjZ3JvdXAyXCIpID09IDApIHtcbisgICAgICAgICAgICAgICAgaWYgKHN0cnN0cihvcHRzLCBcIm1lbW9yeV9odWdldGxiX2FjY291bnRpbmdcIikgIT0gTlVMTCkge1xuKyAgICAgICAgICAgICAgICAgICAgZW5hYmxlZCA9IDE7XG4rICAgICAgICAgICAgICAgIH1cbisgICAgICAgICAgICAgICAgYnJlYWs7XG4rICAgICAgICAgICAgfVxuKyAgICAgICAgfVxuKyAgICB9XG4rICAgIGZjbG9zZShmcCk7XG4rICAgIHJldHVybiBlbmFibGVkO1xuK31cbitcbitpbnQgZW5hYmxlX2h1Z2V0bGJfYWNjb3VudGluZygpIHtcbisgICAgcHJpbnRmKFwiQXR0ZW1wdGluZyB0byByZW1vdW50IGNncm91cDIgd2l0aCBtZW1vcnlfaHVnZXRsYl9hY2NvdW50aW5nLi4uXFxuXCIpO1xuKyAgICBpbnQgcmV0ID0gc3lzdGVtKFwibW91bnQgLW8gcmVtb3VudCxtZW1vcnlfaHVnZXRsYl9hY2NvdW50aW5nIFwiIENHUk9VUF9QQVRIKTtcbisgICAgaWYgKHJldCAhPSAwKSB7XG4rICAgICAgICBmcHJpbnRmKHN0ZGVyciwgXCJGYWlsZWQgdG8gcmVtb3VudDogc3lzdGVtKCkgcmV0dXJuZWQgJWRcXG5cIiwgcmV0KTtcbisgICAgICAgIHJldHVybiAtMTtcbisgICAgfVxuKyAgICByZXR1cm4gMDtcbit9XG4rXG4raW50IG1haW4oKSB7XG4rICAgIHN0cnVjdCBzdGF0IHN0O1xuKyAgICBpZiAoc3RhdChDR1JPVVBfUEFUSCwgXHUwMDI2c3QpICE9IDAgfHwgIVNfSVNESVIoc3Quc3RfbW9kZSkpIHtcbisgICAgICAgIGZwcmludGYoc3RkZXJyLCBcImNncm91cCB2MiBub3QgbW91bnRlZCBhdCAlc1xcblwiLCBDR1JPVVBfUEFUSCk7XG4rICAgICAgICByZXR1cm4gMTtcbisgICAgfVxuK1xuKyAgICBpbnQgZW5hYmxlZCA9IGlzX2h1Z2V0bGJfYWNjb3VudGluZ19lbmFibGVkKCk7XG4rICAgIGlmIChlbmFibGVkIFx1MDAzYyAwKSB7XG4rICAgICAgICByZXR1cm4gMTtcbisgICAgfVxuKyAgICBpZiAoIWVuYWJsZWQpIHtcbisgICAgICAgIGlmIChlbmFibGVfaHVnZXRsYl9hY2NvdW50aW5nKCkgIT0gMCkge1xuKyAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCBcIkNvdWxkIG5vdCBlbmFibGUgbWVtb3J5X2h1Z2V0bGJfYWNjb3VudGluZ1xcblwiKTtcbisgICAgICAgICAgICByZXR1cm4gMTtcbisgICAgICAgIH1cbisgICAgICAgIC8vIFJlLWNoZWNrXG4rICAgICAgICBlbmFibGVkID0gaXNfaHVnZXRsYl9hY2NvdW50aW5nX2VuYWJsZWQoKTtcbisgICAgICAgIGlmIChlbmFibGVkIFx1MDAzYz0gMCkge1xuKyAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCBcIkZhaWxlZCB0byBlbmFibGUgbWVtb3J5X2h1Z2V0bGJfYWNjb3VudGluZyAocmUtY2hlY2sgZmFpbGVkKVxcblwiKTtcbisgICAgICAgICAgICByZXR1cm4gMTtcbisgICAgICAgIH1cbisgICAgICAgIHByaW50ZihcIlN1Y2Nlc3NmdWxseSBlbmFibGVkIG1lbW9yeV9odWdldGxiX2FjY291bnRpbmdcXG5cIik7XG4rICAgIH0gZWxzZSB7XG4rICAgICAgICBwcmludGYoXCJtZW1vcnlfaHVnZXRsYl9hY2NvdW50aW5nIGlzIGFscmVhZHkgZW5hYmxlZFxcblwiKTtcbisgICAgfVxuK1xuKyAgICAvLyBFbmFibGUgbWVtb3J5IGNvbnRyb2xsZXIgaW4gc3VidHJlZVxuKyAgICBpbnQgZmQgPSBvcGVuKENHUk9VUF9QQVRIIFwiL2Nncm91cC5zdWJ0cmVlX2NvbnRyb2xcIiwgT19XUk9OTFkpO1xuKyAgICBpZiAoZmQgXHUwMDNlPSAwKSB7XG4rICAgICAgICBpZiAod3JpdGUoZmQsIFwiK21lbW9yeVwiLCA3KSBcdTAwM2MgMCkge1xuKyAgICAgICAgICAgIC8vIE1pZ2h0IGZhaWwgaWYgYWxyZWFkeSBlbmFibGVkIG9yIG5vdCBzdXBwb3J0ZWQsIGlnbm9yZSBmb3Igbm93XG4rICAgICAgICB9XG4rICAgICAgICBjbG9zZShmZCk7XG4rICAgIH1cbitcbisgICAgaWYgKG1rZGlyKFRFU1RfQ0dST1VQX1BBVEgsIDA3NTUpICE9IDApIHtcbisgICAgICAgIGlmIChlcnJubyAhPSBFRVhJU1QpIHtcbisgICAgICAgICAgICBwZXJyb3IoXCJta2RpciB0ZXN0X3JlcHJvZHVjZXJcIik7XG4rICAgICAgICAgICAgcmV0dXJuIDE7XG4rICAgICAgICB9XG4rICAgIH1cbitcbisgICAgLy8gU2V0IG1lbW9yeSBsaW1pdCB0byAxTUIgKGxlc3MgdGhhbiAyTUIgaHVnZXBhZ2UpXG4rICAgIHdyaXRlX2ZpbGUoVEVTVF9DR1JPVVBfUEFUSCBcIi9tZW1vcnkubWF4XCIsIFwiMU1cIik7XG4rXG4rICAgIHBpZF90IHBpZCA9IGZvcmsoKTtcbisgICAgaWYgKHBpZCBcdTAwM2MgMCkge1xuKyAgICAgICAgcGVycm9yKFwiZm9ya1wiKTtcbisgICAgICAgIHJldHVybiAxO1xuKyAgICB9XG4rXG4rICAgIGlmIChwaWQgPT0gMCkge1xuKyAgICAgICAgLy8gQ2hpbGRcbisgICAgICAgIC8vIE1vdmUgdG8gY2dyb3VwXG4rICAgICAgICB3cml0ZV9maWxlKFRFU1RfQ0dST1VQX1BBVEggXCIvY2dyb3VwLnByb2NzXCIsIFwiMFwiKTtcbitcbisgICAgICAgIHByaW50ZihcIkNoaWxkOiBBdHRlbXB0aW5nIHRvIGFsbG9jYXRlIGFuZCB0b3VjaCAyTUIgaHVnZXBhZ2UuLi5cXG5cIik7XG4rICAgICAgICAvLyBBbGxvY2F0ZSAyTUIgaHVnZXBhZ2VcbisgICAgICAgIHNpemVfdCBzaXplID0gMiAqIDEwMjQgKiAxMDI0O1xuKyAgICAgICAgdm9pZCAqYWRkciA9IG1tYXAoTlVMTCwgc2l6ZSwgUFJPVF9SRUFEIHwgUFJPVF9XUklURSxcbisgICAgICAgICAgICAgICAgICAgICAgICAgIE1BUF9QUklWQVRFIHwgTUFQX0FOT05ZTU9VUyB8IE1BUF9IVUdFVExCLCAtMSwgMCk7XG4rICAgICAgICBpZiAoYWRkciA9PSBNQVBfRkFJTEVEKSB7XG4rICAgICAgICAgICAgcGVycm9yKFwiQ2hpbGQ6IG1tYXAgTUFQX0hVR0VUTEJcIik7XG4rICAgICAgICAgICAgZXhpdCgxKTtcbisgICAgICAgIH1cbitcbisgICAgICAgIHByaW50ZihcIkNoaWxkOiBtbWFwIHN1Y2NlZWRlZCBhdCAlcCwgdG91Y2hpbmcgaXQgbm93IChzaG91bGQgdHJpZ2dlciBmYXVsdCkuLi5cXG5cIiwgYWRkcik7XG4rICAgICAgICAvLyBUaGlzIHNob3VsZCB0cmlnZ2VyIHRoZSBmYXVsdCBhbmQgY2FsbCBhbGxvY19odWdldGxiX2ZvbGlvIC1cdTAwM2UgbWVtX2Nncm91cF9jaGFyZ2VfaHVnZXRsYlxuKyAgICAgICAgLy8gd2hpY2ggc2hvdWxkIGZhaWwgYW5kIHRyaWdnZXIgdGhlIGJ1Zy5cbisgICAgICAgICoodm9sYXRpbGUgY2hhciAqKWFkZHIgPSAxO1xuK1xuKyAgICAgICAgcHJpbnRmKFwiQ2hpbGQ6IFN1Y2Nlc3NmdWxseSB0b3VjaGVkIHBhZ2UgKGJ1ZyBub3QgdHJpZ2dlcmVkPykuXFxuXCIpO1xuKyAgICAgICAgbXVubWFwKGFkZHIsIHNpemUpO1xuKyAgICAgICAgZXhpdCgwKTtcbisgICAgfVxuK1xuKyAgICAvLyBQYXJlbnRcbisgICAgaW50IHN0YXR1cztcbisgICAgd2FpdHBpZChwaWQsIFx1MDAyNnN0YXR1cywgMCk7XG4rXG4rICAgIHByaW50ZihcIlBhcmVudDogQ2hpbGQgZXhpdGVkLiBDbGVhbmluZyB1cC5cXG5cIik7XG4rICAgIHJtZGlyKFRFU1RfQ0dST1VQX1BBVEgpO1xuK1xuKyAgICBpZiAoV0lGU0lHTkFMRUQoc3RhdHVzKSkge1xuKyAgICAgICAgcHJpbnRmKFwiUGFyZW50OiBDaGlsZCBraWxsZWQgYnkgc2lnbmFsICVkICglcylcXG5cIixcbisgICAgICAgICAgICAgICBXVEVSTVNJRyhzdGF0dXMpLCBzdHJzaWduYWwoV1RFUk1TSUcoc3RhdHVzKSkpO1xuKyAgICAgICAgaWYgKFdURVJNU0lHKHN0YXR1cykgPT0gU0lHQlVTKSB7XG4rICAgICAgICAgICAgcHJpbnRmKFwiUGFyZW50OiBDaGlsZCBnb3QgU0lHQlVTIGFzIGV4cGVjdGVkIChpZiBrZXJuZWwgZGlkbid0IGNyYXNoKS5cXG5cIik7XG4rICAgICAgICB9XG4rICAgIH0gZWxzZSBpZiAoV0lGRVhJVEVEKHN0YXR1cykpIHtcbisgICAgICAgIHByaW50ZihcIlBhcmVudDogQ2hpbGQgZXhpdGVkIHdpdGggc3RhdHVzICVkXFxuXCIsIFdFWElUU1RBVFVTKHN0YXR1cykpO1xuKyAgICB9XG4rXG4rICAgIHJldHVybiAwO1xuK31cbmRpZmYgLS1naXQgYS9mcy9odWdldGxiZnMvaW5vZGUuYyBiL2ZzL2h1Z2V0bGJmcy9pbm9kZS5jXG5pbmRleCAyMTZlMWEwZGQwYjIzNy4uOGFiZTA1NzRiMWM3ZWEgMTAwNjQ0XG4tLS0gYS9mcy9odWdldGxiZnMvaW5vZGUuY1xuKysrIGIvZnMvaHVnZXRsYmZzL2lub2RlLmNcbkBAIC0yNSw2ICsyNSw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvY3R5cGUuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2JhY2tpbmctZGV2LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9odWdldGxiLmhcdTAwM2VcbisjaW5jbHVkZSBcIi4uLy4uL21tL2h1Z2V0bGJfc3VicG9vbC5oXCJcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9mb2xpb19iYXRjaC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvZnNfcGFyc2VyLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9tbWFuLmhcdTAwM2VcbkBAIC0xMDU5LDcgKzEwNjAsNiBAQCBzdGF0aWMgaW50IGh1Z2V0bGJmc19zaG93X29wdGlvbnMoc3RydWN0IHNlcV9maWxlICptLCBzdHJ1Y3QgZGVudHJ5ICpyb290KVxuIFx0c3RydWN0IGh1Z2V0bGJmc19zYl9pbmZvICpzYmluZm8gPSBIVUdFVExCRlNfU0Iocm9vdC1cdTAwM2VkX3NiKTtcbiBcdHN0cnVjdCBodWdlcGFnZV9zdWJwb29sICpzcG9vbCA9IHNiaW5mby1cdTAwM2VzcG9vbDtcbiBcdHVuc2lnbmVkIGxvbmcgaHBhZ2Vfc2l6ZSA9IGh1Z2VfcGFnZV9zaXplKHNiaW5mby1cdTAwM2Voc3RhdGUpO1xuLVx0dW5zaWduZWQgaHBhZ2Vfc2hpZnQgPSBodWdlX3BhZ2Vfc2hpZnQoc2JpbmZvLVx1MDAzZWhzdGF0ZSk7XG4gXHRjaGFyIG1vZDtcbiBcbiBcdGlmICghdWlkX2VxKHNiaW5mby1cdTAwM2V1aWQsIEdMT0JBTF9ST09UX1VJRCkpXG5AQCAtMTA4MSwxMiArMTA4MSwxMyBAQCBzdGF0aWMgaW50IGh1Z2V0bGJmc19zaG93X29wdGlvbnMoc3RydWN0IHNlcV9maWxlICptLCBzdHJ1Y3QgZGVudHJ5ICpyb290KVxuIFx0fVxuIFx0c2VxX3ByaW50ZihtLCBcIixwYWdlc2l6ZT0lbHUlY1wiLCBocGFnZV9zaXplLCBtb2QpO1xuIFx0aWYgKHNwb29sKSB7XG4tXHRcdGlmIChzcG9vbC1cdTAwM2VtYXhfaHBhZ2VzICE9IC0xKVxuLVx0XHRcdHNlcV9wcmludGYobSwgXCIsc2l6ZT0lbGx1XCIsXG4tXHRcdFx0XHQgICAodW5zaWduZWQgbG9uZyBsb25nKXNwb29sLVx1MDAzZW1heF9ocGFnZXMgXHUwMDNjXHUwMDNjIGhwYWdlX3NoaWZ0KTtcbi1cdFx0aWYgKHNwb29sLVx1MDAzZW1pbl9ocGFnZXMgIT0gLTEpXG4tXHRcdFx0c2VxX3ByaW50ZihtLCBcIixtaW5fc2l6ZT0lbGx1XCIsXG4tXHRcdFx0XHQgICAodW5zaWduZWQgbG9uZyBsb25nKXNwb29sLVx1MDAzZW1pbl9ocGFnZXMgXHUwMDNjXHUwMDNjIGhwYWdlX3NoaWZ0KTtcbitcdFx0dW5zaWduZWQgbG9uZyBsb25nIG1heF9zaXplID0gaHVnZXBhZ2Vfc3VicG9vbF9tYXhfc2l6ZShzcG9vbCk7XG4rXHRcdHVuc2lnbmVkIGxvbmcgbG9uZyBtaW5fc2l6ZSA9IGh1Z2VwYWdlX3N1YnBvb2xfbWluX3NpemUoc3Bvb2wpO1xuK1xuK1x0XHRpZiAobWF4X3NpemUgIT0gLTFVTEwpXG4rXHRcdFx0c2VxX3ByaW50ZihtLCBcIixzaXplPSVsbHVcIiwgbWF4X3NpemUpO1xuK1x0XHRpZiAobWluX3NpemUgIT0gLTFVTEwpXG4rXHRcdFx0c2VxX3ByaW50ZihtLCBcIixtaW5fc2l6ZT0lbGx1XCIsIG1pbl9zaXplKTtcbiBcdH1cbiBcdHJldHVybiAwO1xuIH1cbkBAIC0xMTA1LDE0ICsxMTA2LDggQEAgc3RhdGljIGludCBodWdldGxiZnNfc3RhdGZzKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGtzdGF0ZnMgKmJ1ZilcbiBcdFx0LyogSWYgbm8gbGltaXRzIHNldCwganVzdCByZXBvcnQgMCBvciAtMSBmb3IgbWF4L2ZyZWUvdXNlZFxuIFx0XHQgKiBibG9ja3MsIGxpa2Ugc2ltcGxlX3N0YXRmcygpICovXG4gXHRcdGlmIChzYmluZm8tXHUwMDNlc3Bvb2wpIHtcbi1cdFx0XHRsb25nIGZyZWVfcGFnZXM7XG4tXG4tXHRcdFx0c3Bpbl9sb2NrX2lycShcdTAwMjZzYmluZm8tXHUwMDNlc3Bvb2wtXHUwMDNlbG9jayk7XG4tXHRcdFx0YnVmLVx1MDAzZWZfYmxvY2tzID0gc2JpbmZvLVx1MDAzZXNwb29sLVx1MDAzZW1heF9ocGFnZXM7XG4tXHRcdFx0ZnJlZV9wYWdlcyA9IHNiaW5mby1cdTAwM2VzcG9vbC1cdTAwM2VtYXhfaHBhZ2VzXG4tXHRcdFx0XHQtIHNiaW5mby1cdTAwM2VzcG9vbC1cdTAwM2V1c2VkX2hwYWdlcztcbi1cdFx0XHRidWYtXHUwMDNlZl9iYXZhaWwgPSBidWYtXHUwMDNlZl9iZnJlZSA9IGZyZWVfcGFnZXM7XG4tXHRcdFx0c3Bpbl91bmxvY2tfaXJxKFx1MDAyNnNiaW5mby1cdTAwM2VzcG9vbC1cdTAwM2Vsb2NrKTtcbitcdFx0XHRidWYtXHUwMDNlZl9ibG9ja3MgPSBodWdlcGFnZV9zdWJwb29sX21heF9ocGFnZXMoc2JpbmZvLVx1MDAzZXNwb29sKTtcbitcdFx0XHRidWYtXHUwMDNlZl9iYXZhaWwgPSBidWYtXHUwMDNlZl9iZnJlZSA9IGh1Z2VwYWdlX3N1YnBvb2xfZnJlZV9ocGFnZXMoc2JpbmZvLVx1MDAzZXNwb29sKTtcbiBcdFx0XHRidWYtXHUwMDNlZl9maWxlcyA9IHNiaW5mby1cdTAwM2VtYXhfaW5vZGVzO1xuIFx0XHRcdGJ1Zi1cdTAwM2VmX2ZmcmVlID0gc2JpbmZvLVx1MDAzZWZyZWVfaW5vZGVzO1xuIFx0XHR9XG5kaWZmIC0tZ2l0IGEvaHVnZXRsYl9yZXNlcnZlX3BhZ2VzX291dF9wdXRfcGFnZXMuYyBiL2h1Z2V0bGJfcmVzZXJ2ZV9wYWdlc19vdXRfcHV0X3BhZ2VzLmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uOWU2M2ZjODk5N2Q1N2Rcbi0tLSAvZGV2L251bGxcbisrKyBiL2h1Z2V0bGJfcmVzZXJ2ZV9wYWdlc19vdXRfcHV0X3BhZ2VzLmNcbkBAIC0wLDAgKzEsNDkgQEBcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuKyNkZWZpbmUgX0dOVV9TT1VSQ0VcbisjaW5jbHVkZSBcdTAwM2NzdGRpby5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjc3RkbGliLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2N1bmlzdGQuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY3N5cy9tbWFuLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NmY250bC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjZXJyLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NlcnJuby5oXHUwMDNlXG4rXG4raW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KVxuK3tcbitcdGNvbnN0IGNoYXIgKmZpbGVfcGF0aDtcbitcdHNpemVfdCBzaXplO1xuK1x0aW50IGZkO1xuK1x0dm9pZCAqYWRkcjtcbitcbitcdGlmIChhcmdjIFx1MDAzYyAzKSB7XG4rXHRcdGZwcmludGYoc3RkZXJyLCBcIlVzYWdlOiAlcyBcdTAwM2NodWdldGxiZnNfZmlsZVx1MDAzZSBcdTAwM2NzaXplX2luX2J5dGVzXHUwMDNlXFxuXCIsXG4rXHRcdFx0YXJndlswXSk7XG4rXHRcdHJldHVybiAxO1xuK1x0fVxuK1xuK1x0ZmlsZV9wYXRoID0gYXJndlsxXTtcbitcdHNpemUgPSBzdHJ0b3VsbChhcmd2WzJdLCBOVUxMLCAwKTtcbitcbitcdGZkID0gb3BlbihmaWxlX3BhdGgsIE9fQ1JFQVQgfCBPX1JEV1IsIDA2NjYpO1xuK1x0aWYgKGZkIFx1MDAzYyAwKVxuK1x0XHRlcnIoMSwgXCJvcGVuXCIpO1xuK1xuK1x0cHJpbnRmKFwiQXR0ZW1wdGluZyB0byBtbWFwICV6dSBieXRlcyBzaGFyZWQgb24gJXMuLi5cXG5cIiwgc2l6ZSxcbitcdCAgICAgICBmaWxlX3BhdGgpO1xuK1x0YWRkciA9IG1tYXAoTlVMTCwgc2l6ZSwgUFJPVF9SRUFEIHwgUFJPVF9XUklURSwgTUFQX1NIQVJFRCwgZmQsIDApO1xuK1x0aWYgKGFkZHIgPT0gTUFQX0ZBSUxFRCkge1xuK1x0XHRpZiAoZXJybm8gPT0gRU5PTUVNKSB7XG4rXHRcdFx0cHJpbnRmKFwibW1hcCBmYWlsZWQgd2l0aCBFTk9NRU0gYXMgZXhwZWN0ZWQuXFxuXCIpO1xuK1x0XHRcdGNsb3NlKGZkKTtcbitcdFx0XHRyZXR1cm4gMDtcbitcdFx0fVxuK1x0XHRwZXJyb3IoXCJtbWFwIGZhaWxlZCB3aXRoIHVuZXhwZWN0ZWQgZXJyb3JcIik7XG4rXHRcdGNsb3NlKGZkKTtcbitcdFx0cmV0dXJuIDE7XG4rXHR9XG4rXG4rXHRwcmludGYoXCJFUlJPUjogbW1hcCBTVUNDRUVERUQgdW5leHBlY3RlZGx5IGF0ICVwXFxuXCIsIGFkZHIpO1xuK1x0bXVubWFwKGFkZHIsIHNpemUpO1xuK1x0Y2xvc2UoZmQpO1xuK1x0cmV0dXJuIDE7XG4rfVxuZGlmZiAtLWdpdCBhL2h1Z2V0bGJfcmVzZXJ2ZV9wYWdlc19vdXRfcHV0X3BhZ2VzLnNoIGIvaHVnZXRsYl9yZXNlcnZlX3BhZ2VzX291dF9wdXRfcGFnZXMuc2hcbm5ldyBmaWxlIG1vZGUgMTAwNzU1XG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uMDMwZTE5MTU1MzliNGVcbi0tLSAvZGV2L251bGxcbisrKyBiL2h1Z2V0bGJfcmVzZXJ2ZV9wYWdlc19vdXRfcHV0X3BhZ2VzLnNoXG5AQCAtMCwwICsxLDE1MyBAQFxuKyMhL2Jpbi9iYXNoXG4rIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuK3NldCAtZVxuK1xuK2lmIFsgXCIkRVVJRFwiIC1uZSAwIF07IHRoZW5cbisgICAgZWNobyBcIlBsZWFzZSBydW4gYXMgcm9vdFwiXG4rICAgIGV4aXQgMVxuK2ZpXG4rXG4rU0NSSVBUX0RJUj1cIiQoY2QgXCIkKGRpcm5hbWUgXCIke0JBU0hfU09VUkNFWzBdfVwiKVwiIFx1MDAyNlx1MDAyNiBwd2QpXCJcbitjZCBcIiRTQ1JJUFRfRElSXCJcbitcbisjIERldGVjdCBkZWZhdWx0IGh1Z2VwYWdlIHNpemUgdG8gc3VwcG9ydCBib3RoIDJNQiBhbmQgMUdCIHBhZ2VzIHJvYnVzdGx5XG4raHB6PSQoZ3JlcCAtaSBodWdlcGFnZXNpemUgL3Byb2MvbWVtaW5mbyB8IGF3ayAne3ByaW50ICQyfScpXG4ra2I9JGhwelxuK21iPSQoKGtiIC8gMTAyNCkpXG4raHBhZ2Vfc2l6ZV9ieXRlcz0kKChrYiAqIDEwMjQpKVxuK1xuK2hwYWdlX2Rpcj1cImh1Z2VwYWdlcy0ke2tifWtCXCJcbitTWVNGU19QQVRIPVwiL3N5cy9rZXJuZWwvbW0vaHVnZXBhZ2VzLyRocGFnZV9kaXJcIlxuK1xuK01OVF9QQVRIPVwiL3RtcC9tbnRfaHVnZXRsYl9yZXByb1wiXG4rRklMRV9QQVRIPVwiJE1OVF9QQVRIL3Rlc3RfZmlsZVwiXG4rXG4rIyBTYXZlIG9yaWdpbmFsIHZhbHVlcyBmb3Igc2FmZSByZXN0b3JhdGlvblxuK29yaWdfbnI9JChjYXQgXCIkU1lTRlNfUEFUSC9ucl9odWdlcGFnZXNcIilcbitvcmlnX292ZXJjb21taXQ9JChjYXQgXCIkU1lTRlNfUEFUSC9ucl9vdmVyY29tbWl0X2h1Z2VwYWdlc1wiKVxuK1xuK2NsZWFudXAoKSB7XG4rICAgIGVjaG8gXCJDbGVhbmluZyB1cC4uLlwiXG4rICAgIHJtIC1mIFwiJEZJTEVfUEFUSFwiXG4rICAgIHVtb3VudCBcIiRNTlRfUEFUSFwiIDJcdTAwM2UvZGV2L251bGxcbisgICAgcm1kaXIgXCIkTU5UX1BBVEhcIiAyXHUwMDNlL2Rldi9udWxsXG4rICAgIGVjaG8gXCIkb3JpZ19uclwiIFx1MDAzZSBcIiRTWVNGU19QQVRIL25yX2h1Z2VwYWdlc1wiXG4rICAgIGVjaG8gXCIkb3JpZ19vdmVyY29tbWl0XCIgXHUwMDNlIFwiJFNZU0ZTX1BBVEgvbnJfb3ZlcmNvbW1pdF9odWdlcGFnZXNcIlxuKyAgICBlY2hvIFwiQ2xlYW51cCBkb25lLlwiXG4rfVxuK3RyYXAgY2xlYW51cCBFWElUXG4rXG4rIyBWZXJpZnkgcmVwcm9kdWNlciBiaW5hcnkgZXhpc3RzXG4raWYgWyAhIC14IC4vaHVnZXRsYl9yZXNlcnZlX3BhZ2VzX291dF9wdXRfcGFnZXMgXTsgdGhlblxuKyAgICBlY2hvIFwicmVwcm9kdWNlciBiaW5hcnkgJy4vaHVnZXRsYl9yZXNlcnZlX3BhZ2VzX291dF9wdXRfcGFnZXMnIG5vdCBmb3VuZCBvciBub3QgZXhlY3V0YWJsZS5cIlxuKyAgICBlY2hvIFwiUGxlYXNlIGNvbXBpbGUgaXQgZmlyc3Q6IGdjYyAtc3RhdGljIC1vIGh1Z2V0bGJfcmVzZXJ2ZV9wYWdlc19vdXRfcHV0X3BhZ2VzIGh1Z2V0bGJfcmVzZXJ2ZV9wYWdlc19vdXRfcHV0X3BhZ2VzLmNcIlxuKyAgICBleGl0IDFcbitmaVxuK1xuKyMgMS4gU2V0IGdsb2JhbCBwb29sIHN1Y2ggdGhhdCBvbmx5IHRoZSBtb3VudC10aW1lIHJlc2VydmF0aW9uIGNhbiBzdWNjZWVkXG4rZWNobyAxIFx1MDAzZSBcIiRTWVNGU19QQVRIL25yX2h1Z2VwYWdlc1wiXG4rZWNobyAwIFx1MDAzZSBcIiRTWVNGU19QQVRIL25yX292ZXJjb21taXRfaHVnZXBhZ2VzXCJcbitcbitpbml0aWFsX3Jlc3Y9JChjYXQgXCIkU1lTRlNfUEFUSC9yZXN2X2h1Z2VwYWdlc1wiKVxuK2VjaG8gXCJJbml0aWFsIHJlc3ZfaHVnZXBhZ2VzIChiZWZvcmUgbW91bnQpOiAkaW5pdGlhbF9yZXN2XCJcbitcbisjIDIuIE1vdW50IHdpdGggbWluX3NpemUgPSAxIHBhZ2UsIG1heCBzaXplID0gMiBwYWdlc1xuK21pbl9zaXplX3N0cj1cIiR7bWJ9TVwiXG4rbWF4X3NpemVfc3RyPVwiJCgobWIgKiAyKSlNXCJcbittbWFwX3NpemVfYnl0ZXM9JCgoaHBhZ2Vfc2l6ZV9ieXRlcyAqIDIpKVxuK1xuK21rZGlyIC1wIFwiJE1OVF9QQVRIXCJcbitlY2hvIFwiTW91bnRpbmcgaHVnZXRsYmZzIHdpdGggcGFnZXNpemU9JHttYn1NLCBtaW5fc2l6ZT0kbWluX3NpemVfc3RyLCBzaXplPSRtYXhfc2l6ZV9zdHIuLi5cIlxuK2lmICEgbW91bnQgLXQgaHVnZXRsYmZzIC1vIFwicGFnZXNpemU9JHttYn1NLG1pbl9zaXplPSRtaW5fc2l6ZV9zdHIsc2l6ZT0kbWF4X3NpemVfc3RyXCIgbm9uZSBcIiRNTlRfUEFUSFwiOyB0aGVuXG4rICAgIGVjaG8gXCJGYWlsZWQgdG8gbW91bnQgaHVnZXRsYmZzXCJcbisgICAgZXhpdCAxXG4rZmlcbitcbityZXN2X2FmdGVyX21vdW50PSQoY2F0IFwiJFNZU0ZTX1BBVEgvcmVzdl9odWdlcGFnZXNcIilcbitlY2hvIFwicmVzdl9odWdlcGFnZXMgYWZ0ZXIgbW91bnQ6ICRyZXN2X2FmdGVyX21vdW50XCJcbitleHBlY3RlZF9hZnRlcl9tb3VudD0kKChpbml0aWFsX3Jlc3YgKyAxKSlcbitpZiBbIFwiJHJlc3ZfYWZ0ZXJfbW91bnRcIiAhPSBcIiRleHBlY3RlZF9hZnRlcl9tb3VudFwiIF07IHRoZW5cbisgICAgZWNobyBcIkVSUk9SOiByZXN2X2h1Z2VwYWdlcyBpcyBub3QgJGV4cGVjdGVkX2FmdGVyX21vdW50IGFmdGVyIG1vdW50IChhY3R1YWw6ICRyZXN2X2FmdGVyX21vdW50KSFcIlxuKyAgICBleGl0IDFcbitmaVxuK1xuKyMgQ2hlY2sgbW91bnQgc3RhdHMgYWZ0ZXIgbW91bnRcbitleHBlY3RlZF9ic2l6ZT0kaHBhZ2Vfc2l6ZV9ieXRlc1xuK2JzaXplX1M9JChzdGF0IC1mIC1jIFwiJVNcIiBcIiRNTlRfUEFUSFwiKVxuK2JzaXplX3M9JChzdGF0IC1mIC1jIFwiJXNcIiBcIiRNTlRfUEFUSFwiKVxuK2VjaG8gXCJNb3VudCBibG9jayBzaXplIGFmdGVyIG1vdW50OiAkYnNpemVfUyAvICRic2l6ZV9zIChleHBlY3RlZDogJGV4cGVjdGVkX2JzaXplKVwiXG4raWYgWyBcIiRic2l6ZV9TXCIgIT0gXCIkZXhwZWN0ZWRfYnNpemVcIiBdIFx1MDAyNlx1MDAyNiBbIFwiJGJzaXplX3NcIiAhPSBcIiRleHBlY3RlZF9ic2l6ZVwiIF07IHRoZW5cbisgICAgZWNobyBcIkVSUk9SOiBVbmV4cGVjdGVkIG1vdW50IGJsb2NrIHNpemUgYWZ0ZXIgbW91bnQgKGFjdHVhbCBTOiRic2l6ZV9TIHM6JGJzaXplX3MsIGV4cGVjdGVkOiAkZXhwZWN0ZWRfYnNpemUpXCJcbisgICAgZXhpdCAxXG4rZmlcbitcbithY3R1YWxfc3RhdHNfbW91bnQ9JChzdGF0IC1mIC1jIFwiJWIgJWYgJWFcIiBcIiRNTlRfUEFUSFwiKVxuK2V4cGVjdGVkX3N0YXRzX21vdW50PVwiMiAyIDJcIlxuK2VjaG8gXCJNb3VudCBzdGF0cyBhZnRlciBtb3VudCAodG90YWwgZnJlZSBhdmFpbCk6ICRhY3R1YWxfc3RhdHNfbW91bnQgKGV4cGVjdGVkOiAkZXhwZWN0ZWRfc3RhdHNfbW91bnQpXCJcbitpZiBbIFwiJGFjdHVhbF9zdGF0c19tb3VudFwiICE9IFwiJGV4cGVjdGVkX3N0YXRzX21vdW50XCIgXTsgdGhlblxuKyAgICBlY2hvIFwiRVJST1I6IFVuZXhwZWN0ZWQgbW91bnQgc3RhdHMgYWZ0ZXIgbW91bnQ6ICRhY3R1YWxfc3RhdHNfbW91bnQgKGV4cGVjdGVkOiAkZXhwZWN0ZWRfc3RhdHNfbW91bnQpXCJcbisgICAgZXhpdCAxXG4rZmlcbitcbisjIDMuIFJ1biB0aGUgcmVwcm9kdWNlciB0byB0cmlnZ2VyIHRoZSBvdXRfcHV0X3BhZ2VzIGZhaWx1cmUgcGF0aFxuK2VjaG8gXCJSdW5uaW5nIHJlcHJvZHVjZXIgKGV4cGVjdGluZyBtbWFwIGZhaWx1cmUgd2l0aCBFTk9NRU0pLi4uXCJcbitpZiAuL2h1Z2V0bGJfcmVzZXJ2ZV9wYWdlc19vdXRfcHV0X3BhZ2VzIFwiJEZJTEVfUEFUSFwiIFwiJG1tYXBfc2l6ZV9ieXRlc1wiOyB0aGVuXG4rICAgIGVjaG8gXCJSZXByb2R1Y2VyIGZpbmlzaGVkIHN1Y2Nlc3NmdWxseS5cIlxuKyAgICByZXN2X2FmdGVyX21tYXA9JChjYXQgXCIkU1lTRlNfUEFUSC9yZXN2X2h1Z2VwYWdlc1wiKVxuKyAgICBlY2hvIFwicmVzdl9odWdlcGFnZXMgYWZ0ZXIgZmFpbGVkIG1tYXA6ICRyZXN2X2FmdGVyX21tYXBcIlxuKyAgICBleHBlY3RlZF9hZnRlcl9tbWFwPSRleHBlY3RlZF9hZnRlcl9tb3VudFxuKyAgICBpZiBbIFwiJHJlc3ZfYWZ0ZXJfbW1hcFwiID0gXCIkZXhwZWN0ZWRfYWZ0ZXJfbW1hcFwiIF07IHRoZW5cbisgICAgICAgIGVjaG8gXCJSRVNVTFQ6IG91dF9wdXRfcGFnZXMgRVhFUkNJU0VEIChyZXN2X2h1Z2VwYWdlcyBwcmVzZXJ2ZWQgYXQgJGV4cGVjdGVkX2FmdGVyX21tYXAgYXMgZXhwZWN0ZWQpXCJcbitcbisgICAgICAgICMgQ2hlY2sgbW91bnQgc3RhdHNcbisgICAgICAgIGV4cGVjdGVkX2JzaXplPSRocGFnZV9zaXplX2J5dGVzXG4rICAgICAgICBic2l6ZV9TPSQoc3RhdCAtZiAtYyBcIiVTXCIgXCIkTU5UX1BBVEhcIilcbisgICAgICAgIGJzaXplX3M9JChzdGF0IC1mIC1jIFwiJXNcIiBcIiRNTlRfUEFUSFwiKVxuKyAgICAgICAgZWNobyBcIk1vdW50IGJsb2NrIHNpemU6ICRic2l6ZV9TIC8gJGJzaXplX3MgKGV4cGVjdGVkOiAkZXhwZWN0ZWRfYnNpemUpXCJcbisgICAgICAgIGlmIFsgXCIkYnNpemVfU1wiICE9IFwiJGV4cGVjdGVkX2JzaXplXCIgXSBcdTAwMjZcdTAwMjYgWyBcIiRic2l6ZV9zXCIgIT0gXCIkZXhwZWN0ZWRfYnNpemVcIiBdOyB0aGVuXG4rICAgICAgICAgICAgZWNobyBcIkVSUk9SOiBVbmV4cGVjdGVkIG1vdW50IGJsb2NrIHNpemUgKGFjdHVhbCBTOiRic2l6ZV9TIHM6JGJzaXplX3MsIGV4cGVjdGVkOiAkZXhwZWN0ZWRfYnNpemUpXCJcbisgICAgICAgICAgICBleGl0IDFcbisgICAgICAgIGZpXG4rXG4rICAgICAgICBhY3R1YWxfc3RhdHM9JChzdGF0IC1mIC1jIFwiJWIgJWYgJWFcIiBcIiRNTlRfUEFUSFwiKVxuKyAgICAgICAgZXhwZWN0ZWRfc3RhdHM9XCIyIDIgMlwiXG4rICAgICAgICBlY2hvIFwiTW91bnQgc3RhdHMgKHRvdGFsIGZyZWUgYXZhaWwpOiAkYWN0dWFsX3N0YXRzIChleHBlY3RlZDogJGV4cGVjdGVkX3N0YXRzKVwiXG4rICAgICAgICBpZiBbIFwiJGFjdHVhbF9zdGF0c1wiICE9IFwiJGV4cGVjdGVkX3N0YXRzXCIgXTsgdGhlblxuKyAgICAgICAgICAgIGVjaG8gXCJSRVNVTFQ6IFVuZXhwZWN0ZWQgbW91bnQgc3RhdHMgYWZ0ZXIgZmFpbGVkIG1tYXAgKEZBSUwpXCJcbisgICAgICAgICAgICBleGl0IDFcbisgICAgICAgIGVsc2VcbisgICAgICAgICAgICBlY2hvIFwiUkVTVUxUOiBNb3VudCBzdGF0cyByZXN0b3JlZCB0byAkZXhwZWN0ZWRfc3RhdHMgYXMgZXhwZWN0ZWQgKFBBU1MpXCJcbisgICAgICAgIGZpXG4rICAgIGVsc2VcbisgICAgICAgIGVjaG8gXCJSRVNVTFQ6IFVuZXhwZWN0ZWQgcmVzdl9odWdlcGFnZXMgdmFsdWU6ICRyZXN2X2FmdGVyX21tYXAgKGV4cGVjdGVkOiAkZXhwZWN0ZWRfYWZ0ZXJfbW1hcClcIlxuKyAgICAgICAgZXhpdCAxXG4rICAgIGZpXG4rZWxzZVxuKyAgICBlY2hvIFwiRkFJTDogUmVwcm9kdWNlciByZXR1cm5lZCBub24temVybyAobW1hcCBkaWRuJ3QgZmFpbCB3aXRoIEVOT01FTSlcIlxuKyAgICBleGl0IDFcbitmaVxuK1xuKyMgNC4gRGlzYWJsZSB0cmFwIGFuZCBkbyBtYW51YWwgY2xlYW51cCB0byBjaGVjayBmb3IgZmluYWwgdW5tb3VudCB1bmRlcmZsb3dcbit0cmFwIC0gRVhJVFxuK1xuK2VjaG8gXCJVbm1vdW50aW5nLi4uXCJcbit1bW91bnQgXCIkTU5UX1BBVEhcIlxuK3JtZGlyIFwiJE1OVF9QQVRIXCJcbitcbitmaW5hbF9yZXN2PSQoY2F0IFwiJFNZU0ZTX1BBVEgvcmVzdl9odWdlcGFnZXNcIilcbitlY2hvIFwiRmluYWwgcmVzdl9odWdlcGFnZXMgKGFmdGVyIHVubW91bnQpOiAkZmluYWxfcmVzdlwiXG4rXG4rIyBSZXN0b3JlIG9yaWdpbmFsIHZhbHVlc1xuK2VjaG8gXCJSZXN0b3Jpbmcgb3JpZ2luYWwgaHVnZXBhZ2Ugc2V0dGluZ3MuLi5cIlxuK2VjaG8gXCIkb3JpZ19uclwiIFx1MDAzZSBcIiRTWVNGU19QQVRIL25yX2h1Z2VwYWdlc1wiXG4rZWNobyBcIiRvcmlnX292ZXJjb21taXRcIiBcdTAwM2UgXCIkU1lTRlNfUEFUSC9ucl9vdmVyY29tbWl0X2h1Z2VwYWdlc1wiXG4rXG4raWYgWyBcIiRmaW5hbF9yZXN2XCIgPSBcIiRpbml0aWFsX3Jlc3ZcIiBdOyB0aGVuXG4rICAgIGVjaG8gXCJSRVNVTFQ6IFN0YXRlIHJlc3RvcmVkIHRvICRpbml0aWFsX3Jlc3YgKG9yIGNsZWFuZWQgdXAgaWYgZml4ZWQpXCJcbisgICAgZWNobyBcIkFMTCBET05FLlwiXG4rICAgIGV4aXQgMFxuK2Vsc2VcbisgICAgZWNobyBcIlJFU1VMVDogVW5kZXJmbG93L0xlYWsvSW5jb3JyZWN0IHN0YXRlIGRldGVjdGVkISAoZmluYWxfcmVzdiA9ICRmaW5hbF9yZXN2LCBleHBlY3RlZCA9ICRpbml0aWFsX3Jlc3YpXCJcbisgICAgZWNobyBcIkFMTCBET05FLlwiXG4rICAgIGV4aXQgMVxuK2ZpXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9odWdldGxiLmggYi9pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaFxuaW5kZXggMmFiYWY5OTMyMWU5MGQuLjA3NGE0NTkwMzk3M2ViIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9odWdldGxiLmhcbisrKyBiL2luY2x1ZGUvbGludXgvaHVnZXRsYi5oXG5AQCAtMTgsNiArMTgsNyBAQFxuIFxuIHN0cnVjdCBtbXVfZ2F0aGVyO1xuIHN0cnVjdCBub2RlO1xuK3N0cnVjdCBoc3RhdGU7XG4gXG4gdm9pZCBmcmVlX2h1Z2VfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbyk7XG4gXG5AQCAtMzQsMTcgKzM1LDcgQEAgdm9pZCBmcmVlX2h1Z2VfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbyk7XG4gICovXG4gI2RlZmluZSBfX05SX1VTRURfU1VCUEFHRSAzXG4gXG4tc3RydWN0IGh1Z2VwYWdlX3N1YnBvb2wge1xuLVx0c3BpbmxvY2tfdCBsb2NrO1xuLVx0bG9uZyBjb3VudDtcbi1cdGxvbmcgbWF4X2hwYWdlcztcdC8qIE1heGltdW0gaHVnZSBwYWdlcyBvciAtMSBpZiBubyBtYXhpbXVtLiAqL1xuLVx0bG9uZyB1c2VkX2hwYWdlcztcdC8qIFVzZWQgY291bnQgYWdhaW5zdCBtYXhpbXVtLCBpbmNsdWRlcyAqL1xuLVx0XHRcdFx0LyogYm90aCBhbGxvY2F0ZWQgYW5kIHJlc2VydmVkIHBhZ2VzLiAqL1xuLVx0c3RydWN0IGhzdGF0ZSAqaHN0YXRlO1xuLVx0bG9uZyBtaW5faHBhZ2VzO1x0LyogTWluaW11bSBodWdlIHBhZ2VzIG9yIC0xIGlmIG5vIG1pbmltdW0uICovXG4tXHRsb25nIHJzdl9ocGFnZXM7XHQvKiBQYWdlcyByZXNlcnZlZCBhZ2FpbnN0IGdsb2JhbCBwb29sIHRvICovXG4tXHRcdFx0XHQvKiBzYXRpc2Z5IG1pbmltdW0gc2l6ZS4gKi9cbi19O1xuK3N0cnVjdCBodWdlcGFnZV9zdWJwb29sO1xuIFxuIHN0cnVjdCByZXN2X21hcCB7XG4gXHRzdHJ1Y3Qga3JlZiByZWZzO1xuQEAgLTExNCw5ICsxMDUsNyBAQCBleHRlcm4gaW50IGh1Z2V0bGJfbWF4X2hzdGF0ZSBfX3JlYWRfbW9zdGx5O1xuICNkZWZpbmUgZm9yX2VhY2hfaHN0YXRlKGgpIFxcXG4gXHRmb3IgKChoKSA9IGhzdGF0ZXM7IChoKSBcdTAwM2MgXHUwMDI2aHN0YXRlc1todWdldGxiX21heF9oc3RhdGVdOyAoaCkrKylcbiBcbi1zdHJ1Y3QgaHVnZXBhZ2Vfc3VicG9vbCAqaHVnZXBhZ2VfbmV3X3N1YnBvb2woc3RydWN0IGhzdGF0ZSAqaCwgbG9uZyBtYXhfaHBhZ2VzLFxuLVx0XHRcdFx0XHRcdGxvbmcgbWluX2hwYWdlcyk7XG4tdm9pZCBodWdlcGFnZV9wdXRfc3VicG9vbChzdHJ1Y3QgaHVnZXBhZ2Vfc3VicG9vbCAqc3Bvb2wpO1xuK2ludCBodWdldGxiX2FjY3RfbWVtb3J5KHN0cnVjdCBoc3RhdGUgKmgsIGxvbmcgZGVsdGEpO1xuIFxuIHZvaWQgaHVnZXRsYl9kdXBfdm1hX3ByaXZhdGUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpO1xuIHZvaWQgY2xlYXJfdm1hX3Jlc3ZfaHVnZV9wYWdlcyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSk7XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmggYi9pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaFxuaW5kZXggZTFmNDZhMDAxNmZjZmQuLjIzZmJiYmM4ZTExZjIwIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmhcbisrKyBiL2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oXG5AQCAtNjQxLDcgKzY0MSwxNSBAQCBzdGF0aWMgaW5saW5lIGludCBtZW1fY2dyb3VwX2NoYXJnZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSxcbiBcdHJldHVybiBfX21lbV9jZ3JvdXBfY2hhcmdlKGZvbGlvLCBtbSwgZ2ZwKTtcbiB9XG4gXG4taW50IG1lbV9jZ3JvdXBfY2hhcmdlX2h1Z2V0bGIoc3RydWN0IGZvbGlvKiBmb2xpbywgZ2ZwX3QgZ2ZwKTtcbitpbnQgbWVtX2Nncm91cF9odWdldGxiX3RyeV9jaGFyZ2UodW5zaWduZWQgaW50IG5yX3BhZ2VzLCBnZnBfdCBnZnAsXG4rXHRcdFx0XHQgIHN0cnVjdCBtZW1fY2dyb3VwICoqbWVtY2dfcCxcbitcdFx0XHRcdCAgc3RydWN0IG9ial9jZ3JvdXAgKipvYmpjZ19wKTtcbit2b2lkIG1lbV9jZ3JvdXBfaHVnZXRsYl9jb21taXRfY2hhcmdlKHN0cnVjdCBmb2xpbyAqZm9saW8sXG4rXHRcdFx0XHQgICAgICBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXG4rXHRcdFx0XHQgICAgICBzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2cpO1xuK3ZvaWQgbWVtX2Nncm91cF9odWdldGxiX2NhbmNlbF9jaGFyZ2UodW5zaWduZWQgaW50IG5yX3BhZ2VzLFxuK1x0XHRcdFx0ICAgICAgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxuK1x0XHRcdFx0ICAgICAgc3RydWN0IG9ial9jZ3JvdXAgKm9iamNnKTtcbiBcbiBpbnQgbWVtX2Nncm91cF9zd2FwaW5fY2hhcmdlX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sIHVuc2lnbmVkIHNob3J0IGlkLFxuIFx0XHRcdFx0ICAgc3RydWN0IG1tX3N0cnVjdCAqbW0sIGdmcF90IGdmcCk7XG5AQCAtMTEyOCw5ICsxMTM2LDI1IEBAIHN0YXRpYyBpbmxpbmUgaW50IG1lbV9jZ3JvdXBfY2hhcmdlKHN0cnVjdCBmb2xpbyAqZm9saW8sXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4tc3RhdGljIGlubGluZSBpbnQgbWVtX2Nncm91cF9jaGFyZ2VfaHVnZXRsYihzdHJ1Y3QgZm9saW8qIGZvbGlvLCBnZnBfdCBnZnApXG4rc3RhdGljIGlubGluZSBpbnQgbWVtX2Nncm91cF9odWdldGxiX3RyeV9jaGFyZ2UodW5zaWduZWQgaW50IG5yX3BhZ2VzLCBnZnBfdCBnZnAsXG4rXHRcdFx0XHRcdFx0c3RydWN0IG1lbV9jZ3JvdXAgKiptZW1jZ19wLFxuK1x0XHRcdFx0XHRcdHN0cnVjdCBvYmpfY2dyb3VwICoqb2JqY2dfcClcbit7XG4rXHQqbWVtY2dfcCA9IE5VTEw7XG4rXHQqb2JqY2dfcCA9IE5VTEw7XG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rc3RhdGljIGlubGluZSB2b2lkIG1lbV9jZ3JvdXBfaHVnZXRsYl9jb21taXRfY2hhcmdlKHN0cnVjdCBmb2xpbyAqZm9saW8sXG4rXHRcdFx0XHRcdFx0ICAgIHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcbitcdFx0XHRcdFx0XHQgICAgc3RydWN0IG9ial9jZ3JvdXAgKm9iamNnKVxuK3tcbit9XG4rXG4rc3RhdGljIGlubGluZSB2b2lkIG1lbV9jZ3JvdXBfaHVnZXRsYl9jYW5jZWxfY2hhcmdlKHVuc2lnbmVkIGludCBucl9wYWdlcyxcbitcdFx0XHRcdFx0XHQgICAgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxuK1x0XHRcdFx0XHRcdCAgICBzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2cpXG4ge1xuLSAgICAgICAgcmV0dXJuIDA7XG4gfVxuIFxuIHN0YXRpYyBpbmxpbmUgaW50IG1lbV9jZ3JvdXBfc3dhcGluX2NoYXJnZV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuZGlmZiAtLWdpdCBhL21tL01ha2VmaWxlIGIvbW0vTWFrZWZpbGVcbmluZGV4IGVmZjlmOWU3ZTA2MWMxLi4zOTY1Yzk1OWU1MDk5MiAxMDA2NDRcbi0tLSBhL21tL01ha2VmaWxlXG4rKysgYi9tbS9NYWtlZmlsZVxuQEAgLTc4LDcgKzc4LDcgQEAgZW5kaWZcbiBvYmotJChDT05GSUdfU1dBUClcdCs9IHBhZ2VfaW8ubyBzd2FwX3N0YXRlLm8gc3dhcGZpbGUub1xuIG9iai0kKENPTkZJR19aU1dBUClcdCs9IHpzd2FwLm9cbiBvYmotJChDT05GSUdfSEFTX0RNQSlcdCs9IGRtYXBvb2wub1xuLW9iai0kKENPTkZJR19IVUdFVExCRlMpXHQrPSBodWdldGxiLm8gaHVnZXRsYl9zeXNmcy5vIGh1Z2V0bGJfc3lzY3RsLm9cbitvYmotJChDT05GSUdfSFVHRVRMQkZTKVx0Kz0gaHVnZXRsYi5vIGh1Z2V0bGJfc3VicG9vbC5vIGh1Z2V0bGJfc3lzZnMubyBodWdldGxiX3N5c2N0bC5vXG4gaWZkZWYgQ09ORklHX0NNQVxuIG9iai0kKENPTkZJR19IVUdFVExCRlMpXHQrPSBodWdldGxiX2NtYS5vXG4gZW5kaWZcbmRpZmYgLS1naXQgYS9tbS9odWdldGxiLmMgYi9tbS9odWdldGxiLmNcbmluZGV4IDU3MTIxMmI4MDgzNWVjLi5lODdmMjZhM2UxZjNlNCAxMDA2NDRcbi0tLSBhL21tL2h1Z2V0bGIuY1xuKysrIGIvbW0vaHVnZXRsYi5jXG5AQCAtMzgsNiArMzgsOCBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L21tX2lubGluZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcGFkYXRhLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9wZ2FsbG9jLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9tZW1jb250cm9sLmhcdTAwM2VcbisjaW5jbHVkZSBcImh1Z2V0bGJfc3VicG9vbC5oXCJcbiBcbiAjaW5jbHVkZSBcdTAwM2Nhc20vcGFnZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjYXNtL3RsYi5oXHUwMDNlXG5AQCAtMTEzLDggKzExNSw3IEBAIF9fY2FjaGVsaW5lX2FsaWduZWRfaW5fc21wIERFRklORV9TUElOTE9DSyhodWdldGxiX2xvY2spO1xuIHN0YXRpYyBpbnQgbnVtX2ZhdWx0X211dGV4ZXMgX19yb19hZnRlcl9pbml0O1xuIHN0cnVjdCBtdXRleCAqaHVnZXRsYl9mYXVsdF9tdXRleF90YWJsZSBfX3JvX2FmdGVyX2luaXQ7XG4gXG4tLyogRm9yd2FyZCBkZWNsYXJhdGlvbiAqL1xuLXN0YXRpYyBpbnQgaHVnZXRsYl9hY2N0X21lbW9yeShzdHJ1Y3QgaHN0YXRlICpoLCBsb25nIGRlbHRhKTtcbisvKiBGb3J3YXJkIGRlY2xhcmF0aW9ucyAqL1xuIHN0YXRpYyB2b2lkIGh1Z2V0bGJfdm1hX2xvY2tfZnJlZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSk7XG4gc3RhdGljIHZvaWQgaHVnZXRsYl92bWFfbG9ja19hbGxvYyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSk7XG4gc3RhdGljIHZvaWQgX19odWdldGxiX3ZtYV91bmxvY2tfd3JpdGVfZnJlZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSk7XG5AQCAtMTI1LDE1NiArMTI2LDYgQEAgc3RhdGljIHZvaWQgaHVnZXRsYl91bnNoYXJlX3BtZHMoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4gXHRcdHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLCBib29sIHRha2VfbG9ja3MpO1xuIHN0YXRpYyBzdHJ1Y3QgcmVzdl9tYXAgKnZtYV9yZXN2X21hcChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSk7XG4gXG4tc3RhdGljIGlubGluZSBib29sIHN1YnBvb2xfaXNfZnJlZShzdHJ1Y3QgaHVnZXBhZ2Vfc3VicG9vbCAqc3Bvb2wpXG4te1xuLVx0aWYgKHNwb29sLVx1MDAzZWNvdW50KVxuLVx0XHRyZXR1cm4gZmFsc2U7XG4tXHRpZiAoc3Bvb2wtXHUwMDNlbWF4X2hwYWdlcyAhPSAtMSlcbi1cdFx0cmV0dXJuIHNwb29sLVx1MDAzZXVzZWRfaHBhZ2VzID09IDA7XG4tXHRpZiAoc3Bvb2wtXHUwMDNlbWluX2hwYWdlcyAhPSAtMSlcbi1cdFx0cmV0dXJuIHNwb29sLVx1MDAzZXJzdl9ocGFnZXMgPT0gc3Bvb2wtXHUwMDNlbWluX2hwYWdlcztcbi1cbi1cdHJldHVybiB0cnVlO1xuLX1cbi1cbi1zdGF0aWMgaW5saW5lIHZvaWQgdW5sb2NrX29yX3JlbGVhc2Vfc3VicG9vbChzdHJ1Y3QgaHVnZXBhZ2Vfc3VicG9vbCAqc3Bvb2wsXG4tXHRcdFx0XHRcdFx0dW5zaWduZWQgbG9uZyBpcnFfZmxhZ3MpXG4te1xuLVx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZzcG9vbC1cdTAwM2Vsb2NrLCBpcnFfZmxhZ3MpO1xuLVxuLVx0LyogSWYgbm8gcGFnZXMgYXJlIHVzZWQsIGFuZCBubyBvdGhlciBoYW5kbGVzIHRvIHRoZSBzdWJwb29sXG4tXHQgKiByZW1haW4sIGdpdmUgdXAgYW55IHJlc2VydmF0aW9ucyBiYXNlZCBvbiBtaW5pbXVtIHNpemUgYW5kXG4tXHQgKiBmcmVlIHRoZSBzdWJwb29sICovXG4tXHRpZiAoc3VicG9vbF9pc19mcmVlKHNwb29sKSkge1xuLVx0XHRpZiAoc3Bvb2wtXHUwMDNlbWluX2hwYWdlcyAhPSAtMSlcbi1cdFx0XHRodWdldGxiX2FjY3RfbWVtb3J5KHNwb29sLVx1MDAzZWhzdGF0ZSxcbi1cdFx0XHRcdFx0XHQtc3Bvb2wtXHUwMDNlbWluX2hwYWdlcyk7XG4tXHRcdGtmcmVlKHNwb29sKTtcbi1cdH1cbi19XG4tXG4tc3RydWN0IGh1Z2VwYWdlX3N1YnBvb2wgKmh1Z2VwYWdlX25ld19zdWJwb29sKHN0cnVjdCBoc3RhdGUgKmgsIGxvbmcgbWF4X2hwYWdlcyxcbi1cdFx0XHRcdFx0XHRsb25nIG1pbl9ocGFnZXMpXG4te1xuLVx0c3RydWN0IGh1Z2VwYWdlX3N1YnBvb2wgKnNwb29sO1xuLVxuLVx0c3Bvb2wgPSBremFsbG9jX29iaigqc3Bvb2wpO1xuLVx0aWYgKCFzcG9vbClcbi1cdFx0cmV0dXJuIE5VTEw7XG4tXG4tXHRzcGluX2xvY2tfaW5pdChcdTAwMjZzcG9vbC1cdTAwM2Vsb2NrKTtcbi1cdHNwb29sLVx1MDAzZWNvdW50ID0gMTtcbi1cdHNwb29sLVx1MDAzZW1heF9ocGFnZXMgPSBtYXhfaHBhZ2VzO1xuLVx0c3Bvb2wtXHUwMDNlaHN0YXRlID0gaDtcbi1cdHNwb29sLVx1MDAzZW1pbl9ocGFnZXMgPSBtaW5faHBhZ2VzO1xuLVxuLVx0aWYgKG1pbl9ocGFnZXMgIT0gLTEgXHUwMDI2XHUwMDI2IGh1Z2V0bGJfYWNjdF9tZW1vcnkoaCwgbWluX2hwYWdlcykpIHtcbi1cdFx0a2ZyZWUoc3Bvb2wpO1xuLVx0XHRyZXR1cm4gTlVMTDtcbi1cdH1cbi1cdHNwb29sLVx1MDAzZXJzdl9ocGFnZXMgPSBtaW5faHBhZ2VzO1xuLVxuLVx0cmV0dXJuIHNwb29sO1xuLX1cbi1cbi12b2lkIGh1Z2VwYWdlX3B1dF9zdWJwb29sKHN0cnVjdCBodWdlcGFnZV9zdWJwb29sICpzcG9vbClcbi17XG4tXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuLVxuLVx0c3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2c3Bvb2wtXHUwMDNlbG9jaywgZmxhZ3MpO1xuLVx0QlVHX09OKCFzcG9vbC1cdTAwM2Vjb3VudCk7XG4tXHRzcG9vbC1cdTAwM2Vjb3VudC0tO1xuLVx0dW5sb2NrX29yX3JlbGVhc2Vfc3VicG9vbChzcG9vbCwgZmxhZ3MpO1xuLX1cbi1cbi0vKlxuLSAqIFN1YnBvb2wgYWNjb3VudGluZyBmb3IgYWxsb2NhdGluZyBhbmQgcmVzZXJ2aW5nIHBhZ2VzLlxuLSAqIFJldHVybiAtRU5PTUVNIGlmIHRoZXJlIGFyZSBub3QgZW5vdWdoIHJlc291cmNlcyB0byBzYXRpc2Z5IHRoZVxuLSAqIHJlcXVlc3QuICBPdGhlcndpc2UsIHJldHVybiB0aGUgbnVtYmVyIG9mIHBhZ2VzIGJ5IHdoaWNoIHRoZVxuLSAqIGdsb2JhbCBwb29scyBtdXN0IGJlIGFkanVzdGVkICh1cHdhcmQpLiAgVGhlIHJldHVybmVkIHZhbHVlIG1heVxuLSAqIG9ubHkgYmUgZGlmZmVyZW50IHRoYW4gdGhlIHBhc3NlZCB2YWx1ZSAoZGVsdGEpIGluIHRoZSBjYXNlIHdoZXJlXG4tICogYSBzdWJwb29sIG1pbmltdW0gc2l6ZSBtdXN0IGJlIG1haW50YWluZWQuXG4tICovXG4tc3RhdGljIGxvbmcgaHVnZXBhZ2Vfc3VicG9vbF9nZXRfcGFnZXMoc3RydWN0IGh1Z2VwYWdlX3N1YnBvb2wgKnNwb29sLFxuLVx0XHRcdFx0ICAgICAgbG9uZyBkZWx0YSlcbi17XG4tXHRsb25nIHJldCA9IGRlbHRhO1xuLVxuLVx0aWYgKCFzcG9vbClcbi1cdFx0cmV0dXJuIHJldDtcbi1cbi1cdHNwaW5fbG9ja19pcnEoXHUwMDI2c3Bvb2wtXHUwMDNlbG9jayk7XG4tXG4tXHRpZiAoc3Bvb2wtXHUwMDNlbWF4X2hwYWdlcyAhPSAtMSkge1x0XHQvKiBtYXhpbXVtIHNpemUgYWNjb3VudGluZyAqL1xuLVx0XHRpZiAoKHNwb29sLVx1MDAzZXVzZWRfaHBhZ2VzICsgZGVsdGEpIFx1MDAzYz0gc3Bvb2wtXHUwMDNlbWF4X2hwYWdlcylcbi1cdFx0XHRzcG9vbC1cdTAwM2V1c2VkX2hwYWdlcyArPSBkZWx0YTtcbi1cdFx0ZWxzZSB7XG4tXHRcdFx0cmV0ID0gLUVOT01FTTtcbi1cdFx0XHRnb3RvIHVubG9ja19yZXQ7XG4tXHRcdH1cbi1cdH1cbi1cbi1cdC8qIG1pbmltdW0gc2l6ZSBhY2NvdW50aW5nICovXG4tXHRpZiAoc3Bvb2wtXHUwMDNlbWluX2hwYWdlcyAhPSAtMSBcdTAwMjZcdTAwMjYgc3Bvb2wtXHUwMDNlcnN2X2hwYWdlcykge1xuLVx0XHRpZiAoZGVsdGEgXHUwMDNlIHNwb29sLVx1MDAzZXJzdl9ocGFnZXMpIHtcbi1cdFx0XHQvKlxuLVx0XHRcdCAqIEFza2luZyBmb3IgbW9yZSByZXNlcnZlcyB0aGFuIHRob3NlIGFscmVhZHkgdGFrZW4gb25cbi1cdFx0XHQgKiBiZWhhbGYgb2Ygc3VicG9vbC4gIFJldHVybiBkaWZmZXJlbmNlLlxuLVx0XHRcdCAqL1xuLVx0XHRcdHJldCA9IGRlbHRhIC0gc3Bvb2wtXHUwMDNlcnN2X2hwYWdlcztcbi1cdFx0XHRzcG9vbC1cdTAwM2Vyc3ZfaHBhZ2VzID0gMDtcbi1cdFx0fSBlbHNlIHtcbi1cdFx0XHRyZXQgPSAwO1x0LyogcmVzZXJ2ZXMgYWxyZWFkeSBhY2NvdW50ZWQgZm9yICovXG4tXHRcdFx0c3Bvb2wtXHUwMDNlcnN2X2hwYWdlcyAtPSBkZWx0YTtcbi1cdFx0fVxuLVx0fVxuLVxuLXVubG9ja19yZXQ6XG4tXHRzcGluX3VubG9ja19pcnEoXHUwMDI2c3Bvb2wtXHUwMDNlbG9jayk7XG4tXHRyZXR1cm4gcmV0O1xuLX1cbi1cbi0vKlxuLSAqIFN1YnBvb2wgYWNjb3VudGluZyBmb3IgZnJlZWluZyBhbmQgdW5yZXNlcnZpbmcgcGFnZXMuXG4tICogUmV0dXJuIHRoZSBudW1iZXIgb2YgZ2xvYmFsIHBhZ2UgcmVzZXJ2YXRpb25zIHRoYXQgbXVzdCBiZSBkcm9wcGVkLlxuLSAqIFRoZSByZXR1cm4gdmFsdWUgbWF5IG9ubHkgYmUgZGlmZmVyZW50IHRoYW4gdGhlIHBhc3NlZCB2YWx1ZSAoZGVsdGEpXG4tICogaW4gdGhlIGNhc2Ugd2hlcmUgYSBzdWJwb29sIG1pbmltdW0gc2l6ZSBtdXN0IGJlIG1haW50YWluZWQuXG4tICovXG4tc3RhdGljIGxvbmcgaHVnZXBhZ2Vfc3VicG9vbF9wdXRfcGFnZXMoc3RydWN0IGh1Z2VwYWdlX3N1YnBvb2wgKnNwb29sLFxuLVx0XHRcdFx0ICAgICAgIGxvbmcgZGVsdGEpXG4te1xuLVx0bG9uZyByZXQgPSBkZWx0YTtcbi1cdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4tXG4tXHRpZiAoIXNwb29sKVxuLVx0XHRyZXR1cm4gZGVsdGE7XG4tXG4tXHRzcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZzcG9vbC1cdTAwM2Vsb2NrLCBmbGFncyk7XG4tXG4tXHRpZiAoc3Bvb2wtXHUwMDNlbWF4X2hwYWdlcyAhPSAtMSlcdFx0LyogbWF4aW11bSBzaXplIGFjY291bnRpbmcgKi9cbi1cdFx0c3Bvb2wtXHUwMDNldXNlZF9ocGFnZXMgLT0gZGVsdGE7XG4tXG4tXHQgLyogbWluaW11bSBzaXplIGFjY291bnRpbmcgKi9cbi1cdGlmIChzcG9vbC1cdTAwM2VtaW5faHBhZ2VzICE9IC0xIFx1MDAyNlx1MDAyNiBzcG9vbC1cdTAwM2V1c2VkX2hwYWdlcyBcdTAwM2Mgc3Bvb2wtXHUwMDNlbWluX2hwYWdlcykge1xuLVx0XHRpZiAoc3Bvb2wtXHUwMDNlcnN2X2hwYWdlcyArIGRlbHRhIFx1MDAzYz0gc3Bvb2wtXHUwMDNlbWluX2hwYWdlcylcbi1cdFx0XHRyZXQgPSAwO1xuLVx0XHRlbHNlXG4tXHRcdFx0cmV0ID0gc3Bvb2wtXHUwMDNlcnN2X2hwYWdlcyArIGRlbHRhIC0gc3Bvb2wtXHUwMDNlbWluX2hwYWdlcztcbi1cbi1cdFx0c3Bvb2wtXHUwMDNlcnN2X2hwYWdlcyArPSBkZWx0YTtcbi1cdFx0aWYgKHNwb29sLVx1MDAzZXJzdl9ocGFnZXMgXHUwMDNlIHNwb29sLVx1MDAzZW1pbl9ocGFnZXMpXG4tXHRcdFx0c3Bvb2wtXHUwMDNlcnN2X2hwYWdlcyA9IHNwb29sLVx1MDAzZW1pbl9ocGFnZXM7XG4tXHR9XG4tXG4tXHQvKlxuLVx0ICogSWYgaHVnZXRsYmZzX3B1dF9zdXBlciBjb3VsZG4ndCBmcmVlIHNwb29sIGR1ZSB0byBhbiBvdXRzdGFuZGluZ1xuLVx0ICogcXVvdGEgcmVmZXJlbmNlLCBmcmVlIGl0IG5vdy5cbi1cdCAqL1xuLVx0dW5sb2NrX29yX3JlbGVhc2Vfc3VicG9vbChzcG9vbCwgZmxhZ3MpO1xuLVxuLVx0cmV0dXJuIHJldDtcbi19XG4tXG4gc3RhdGljIGlubGluZSBzdHJ1Y3QgaHVnZXBhZ2Vfc3VicG9vbCAqc3VicG9vbF92bWEoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXG4ge1xuIFx0cmV0dXJuIHN1YnBvb2xfaW5vZGUoZmlsZV9pbm9kZSh2bWEtXHUwMDNldm1fZmlsZSkpO1xuQEAgLTI4NTgsMTEgKzI3MDksMTMgQEAgc3RydWN0IGZvbGlvICphbGxvY19odWdldGxiX2ZvbGlvKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuIFx0c3RydWN0IGh1Z2VwYWdlX3N1YnBvb2wgKnNwb29sID0gc3VicG9vbF92bWEodm1hKTtcbiBcdHN0cnVjdCBoc3RhdGUgKmggPSBoc3RhdGVfdm1hKHZtYSk7XG4gXHRzdHJ1Y3QgZm9saW8gKmZvbGlvO1xuLVx0bG9uZyByZXR2YWwsIGdibF9jaGcsIGdibF9yZXNlcnZlO1xuK1x0bG9uZyByZXR2YWwsIGdibF9jaGc7XG4gXHRtYXBfY2hnX3N0YXRlIG1hcF9jaGc7XG4gXHRpbnQgcmV0LCBpZHg7XG4gXHRzdHJ1Y3QgaHVnZXRsYl9jZ3JvdXAgKmhfY2cgPSBOVUxMO1xuIFx0c3RydWN0IGh1Z2V0bGJfY2dyb3VwICpoX2NnX3JzdmQgPSBOVUxMO1xuK1x0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbV9jZyA9IE5VTEw7XG4rXHRzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqX2NnID0gTlVMTDtcbiBcdGdmcF90IGdmcCA9IGh0bGJfYWxsb2NfbWFzayhoKSB8IF9fR0ZQX1JFVFJZX01BWUZBSUw7XG4gXG4gXHRpZHggPSBoc3RhdGVfaW5kZXgoaCk7XG5AQCAtMjkyMiw2ICsyNzc1LDExIEBAIHN0cnVjdCBmb2xpbyAqYWxsb2NfaHVnZXRsYl9mb2xpbyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbiBcdGlmIChyZXQpXG4gXHRcdGdvdG8gb3V0X3VuY2hhcmdlX2Nncm91cF9yZXNlcnZhdGlvbjtcbiBcbitcdHJldCA9IG1lbV9jZ3JvdXBfaHVnZXRsYl90cnlfY2hhcmdlKHBhZ2VzX3Blcl9odWdlX3BhZ2UoaCksIGdmcCxcbitcdFx0XHRcdFx0ICAgIFx1MDAyNm1lbV9jZywgXHUwMDI2b2JqX2NnKTtcbitcdGlmIChyZXQpXG4rXHRcdGdvdG8gb3V0X3VuY2hhcmdlX2Nncm91cDtcbitcbiBcdHNwaW5fbG9ja19pcnEoXHUwMDI2aHVnZXRsYl9sb2NrKTtcbiBcdC8qXG4gXHQgKiBnbGJfY2hnIGlzIHBhc3NlZCB0byBpbmRpY2F0ZSB3aGV0aGVyIG9yIG5vdCBhIHBhZ2UgbXVzdCBiZSB0YWtlblxuQEAgLTI5MzMsNyArMjc5MSw3IEBAIHN0cnVjdCBmb2xpbyAqYWxsb2NfaHVnZXRsYl9mb2xpbyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbiBcdFx0c3Bpbl91bmxvY2tfaXJxKFx1MDAyNmh1Z2V0bGJfbG9jayk7XG4gXHRcdGZvbGlvID0gYWxsb2NfYnVkZHlfaHVnZXRsYl9mb2xpb193aXRoX21wb2woaCwgdm1hLCBhZGRyKTtcbiBcdFx0aWYgKCFmb2xpbylcbi1cdFx0XHRnb3RvIG91dF91bmNoYXJnZV9jZ3JvdXA7XG4rXHRcdFx0Z290byBvdXRfdW5jaGFyZ2VfY2dyb3VwX21lbWNnO1xuIFx0XHRzcGluX2xvY2tfaXJxKFx1MDAyNmh1Z2V0bGJfbG9jayk7XG4gXHRcdGxpc3RfYWRkKFx1MDAyNmZvbGlvLVx1MDAzZWxydSwgXHUwMDI2aC1cdTAwM2VodWdlcGFnZV9hY3RpdmVsaXN0KTtcbiBcdFx0Zm9saW9fcmVmX3VuZnJlZXplKGZvbGlvLCAxKTtcbkBAIC0yOTYwLDYgKzI4MTgsOSBAQCBzdHJ1Y3QgZm9saW8gKmFsbG9jX2h1Z2V0bGJfZm9saW8oc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4gXG4gXHRzcGluX3VubG9ja19pcnEoXHUwMDI2aHVnZXRsYl9sb2NrKTtcbiBcbitcdG1lbV9jZ3JvdXBfaHVnZXRsYl9jb21taXRfY2hhcmdlKGZvbGlvLCBtZW1fY2csIG9ial9jZyk7XG4rXHRscnV2ZWNfc3RhdF9tb2RfZm9saW8oZm9saW8sIE5SX0hVR0VUTEIsIHBhZ2VzX3Blcl9odWdlX3BhZ2UoaCkpO1xuK1xuIFx0aHVnZXRsYl9zZXRfZm9saW9fc3VicG9vbChmb2xpbywgc3Bvb2wpO1xuIFxuIFx0aWYgKG1hcF9jaGcgIT0gTUFQX0NIR19FTkZPUkNFRCkge1xuQEAgLTI5ODcsMjEgKzI4NDgsMTAgQEAgc3RydWN0IGZvbGlvICphbGxvY19odWdldGxiX2ZvbGlvKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuIFx0XHR9XG4gXHR9XG4gXG4tXHRyZXQgPSBtZW1fY2dyb3VwX2NoYXJnZV9odWdldGxiKGZvbGlvLCBnZnApO1xuLVx0Lypcbi1cdCAqIFVuY29uZGl0aW9uYWxseSBpbmNyZW1lbnQgTlJfSFVHRVRMQiBoZXJlLiBJZiBpdCB0dXJucyBvdXQgdGhhdFxuLVx0ICogbWVtX2Nncm91cF9jaGFyZ2VfaHVnZXRsYiBmYWlsZWQsIHRoZW4gaW1tZWRpYXRlbHkgZnJlZSB0aGUgcGFnZSBhbmRcbi1cdCAqIGRlY3JlbWVudCBOUl9IVUdFVExCLlxuLVx0ICovXG4tXHRscnV2ZWNfc3RhdF9tb2RfZm9saW8oZm9saW8sIE5SX0hVR0VUTEIsIHBhZ2VzX3Blcl9odWdlX3BhZ2UoaCkpO1xuLVxuLVx0aWYgKHJldCA9PSAtRU5PTUVNKSB7XG4tXHRcdGZyZWVfaHVnZV9mb2xpbyhmb2xpbyk7XG4tXHRcdHJldHVybiBFUlJfUFRSKC1FTk9NRU0pO1xuLVx0fVxuLVxuIFx0cmV0dXJuIGZvbGlvO1xuIFxuK291dF91bmNoYXJnZV9jZ3JvdXBfbWVtY2c6XG4rXHRtZW1fY2dyb3VwX2h1Z2V0bGJfY2FuY2VsX2NoYXJnZShwYWdlc19wZXJfaHVnZV9wYWdlKGgpLCBtZW1fY2csIG9ial9jZyk7XG4gb3V0X3VuY2hhcmdlX2Nncm91cDpcbiBcdGh1Z2V0bGJfY2dyb3VwX3VuY2hhcmdlX2Nncm91cChpZHgsIHBhZ2VzX3Blcl9odWdlX3BhZ2UoaCksIGhfY2cpO1xuIG91dF91bmNoYXJnZV9jZ3JvdXBfcmVzZXJ2YXRpb246XG5AQCAtMzAwOSwxOSArMjg1OSwyOCBAQCBzdHJ1Y3QgZm9saW8gKmFsbG9jX2h1Z2V0bGJfZm9saW8oc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4gXHRcdGh1Z2V0bGJfY2dyb3VwX3VuY2hhcmdlX2Nncm91cF9yc3ZkKGlkeCwgcGFnZXNfcGVyX2h1Z2VfcGFnZShoKSxcbiBcdFx0XHRcdFx0XHQgICAgaF9jZ19yc3ZkKTtcbiBvdXRfc3VicG9vbF9wdXQ6XG4tXHQvKlxuLVx0ICogcHV0IHBhZ2UgdG8gc3VicG9vbCBpZmYgdGhlIHF1b3RhIG9mIHN1YnBvb2wncyByc3ZfaHBhZ2VzIGlzIHVzZWRcbi1cdCAqIGR1cmluZyBodWdlcGFnZV9zdWJwb29sX2dldF9wYWdlcy5cbi1cdCAqL1xuLVx0aWYgKG1hcF9jaGcgXHUwMDI2XHUwMDI2ICFnYmxfY2hnKSB7XG4tXHRcdGdibF9yZXNlcnZlID0gaHVnZXBhZ2Vfc3VicG9vbF9wdXRfcGFnZXMoc3Bvb2wsIDEpO1xuLVx0XHRodWdldGxiX2FjY3RfbWVtb3J5KGgsIC1nYmxfcmVzZXJ2ZSk7XG4rXHRpZiAobWFwX2NoZykge1xuK1x0XHRsb25nIGdibF9yZXNlcnZlID0gaHVnZXBhZ2Vfc3VicG9vbF9wdXRfcGFnZXMoc3Bvb2wsIDEpO1xuK1xuK1x0XHRpZiAoIWdibF9jaGcpXG4rXHRcdFx0aHVnZXRsYl9hY2N0X21lbW9yeShoLCAtZ2JsX3Jlc2VydmUpO1xuIFx0fVxuIFxuIFxuIG91dF9lbmRfcmVzZXJ2YXRpb246XG4gXHRpZiAobWFwX2NoZyAhPSBNQVBfQ0hHX0VORk9SQ0VEKVxuIFx0XHR2bWFfZW5kX3Jlc2VydmF0aW9uKGgsIHZtYSwgYWRkcik7XG4rXG4rXHQvKlxuK1x0ICogUmV0dXJuIC1FTk9TUEMgd2hlbiB0aGlzIGZ1bmN0aW9uIGZhaWxzIHRvIGFsbG9jYXRlIG9yXG4rXHQgKiBjaGFyZ2UgYSBodWdlIHBhZ2UuIElmIGEgc3RhbmRhcmQgKFBBR0VfU0laRSkgcGFnZVxuK1x0ICogYWxsb2NhdGlvbiBmYWlscywgdGhlIE9PTSBraWxsZXIgaXMgZ2l2ZW4gYSBjaGFuY2UgdG8gcnVuLFxuK1x0ICogd2hpY2ggbWF5IHJlc29sdmUgdGhlIGZhaWx1cmUgb24gcmV0cnkuIEhvd2V2ZXIsIGZvclxuK1x0ICogSHVnZVRMQiBhbGxvY2F0aW9ucywgdGhlIE9PTSBraWxsZXIgaXMgbm90IHRyaWdnZXJlZC5cbitcdCAqIFJldHVybmluZyAtRU5PTUVNIChvciBhbnl0aGluZyByZXN1bHRpbmcgaW4gVk1fRkFVTFRfT09NKVxuK1x0ICogd291bGQgbGVhayB0byB0aGUgI1BGIGhhbmRsZXIsIGNhdXNpbmcgaXQgdG8gbG9vcFxuK1x0ICogaW5kZWZpbml0ZWx5IHJldHJ5aW5nIHRoZSBmYXVsdC5cbitcdCAqL1xuIFx0cmV0dXJuIEVSUl9QVFIoLUVOT1NQQyk7XG4gfVxuIFxuQEAgLTQ1OTMsNyArNDQ1Miw3IEBAIHVuc2lnbmVkIGxvbmcgaHVnZXRsYl90b3RhbF9wYWdlcyh2b2lkKVxuIFx0cmV0dXJuIG5yX3RvdGFsX3BhZ2VzO1xuIH1cbiBcbi1zdGF0aWMgaW50IGh1Z2V0bGJfYWNjdF9tZW1vcnkoc3RydWN0IGhzdGF0ZSAqaCwgbG9uZyBkZWx0YSlcbitpbnQgaHVnZXRsYl9hY2N0X21lbW9yeShzdHJ1Y3QgaHN0YXRlICpoLCBsb25nIGRlbHRhKVxuIHtcbiBcdGludCByZXQgPSAtRU5PTUVNO1xuIFxuQEAgLTY1NDIsNyArNjQwMSw3IEBAIGxvbmcgaHVnZXRsYl9yZXNlcnZlX3BhZ2VzKHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4gXHRcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuIFx0XHR2bWFfZmxhZ3NfdCB2bWFfZmxhZ3MpXG4ge1xuLVx0bG9uZyBjaGcgPSAtMSwgYWRkID0gLTEsIHNwb29sX3Jlc3YsIGdibF9yZXN2O1xuK1x0bG9uZyBjaGcgPSAtMSwgYWRkID0gLTEsIGdibF9yZXN2O1xuIFx0c3RydWN0IGhzdGF0ZSAqaCA9IGhzdGF0ZV9pbm9kZShpbm9kZSk7XG4gXHRzdHJ1Y3QgaHVnZXBhZ2Vfc3VicG9vbCAqc3Bvb2wgPSBzdWJwb29sX2lub2RlKGlub2RlKTtcbiBcdHN0cnVjdCByZXN2X21hcCAqcmVzdl9tYXA7XG5AQCAtNjY4NywyNiArNjU0NiwyMSBAQCBsb25nIGh1Z2V0bGJfcmVzZXJ2ZV9wYWdlcyhzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuIFx0fVxuIFx0cmV0dXJuIGNoZztcbiBcbi1vdXRfcHV0X3BhZ2VzOlxuLVx0c3Bvb2xfcmVzdiA9IGNoZyAtIGdibF9yZXNlcnZlO1xuLVx0aWYgKHNwb29sX3Jlc3YpIHtcbi1cdFx0LyogcHV0IHN1YiBwb29sJ3MgcmVzZXJ2YXRpb24gYmFjaywgY2hnIC0gZ2JsX3Jlc2VydmUgKi9cbi1cdFx0Z2JsX3Jlc3YgPSBodWdlcGFnZV9zdWJwb29sX3B1dF9wYWdlcyhzcG9vbCwgc3Bvb2xfcmVzdik7XG4tXHRcdC8qXG4tXHRcdCAqIHN1YnBvb2wncyByZXNlcnZlZCBwYWdlcyBjYW4gbm90IGJlIHB1dCBiYWNrIGR1ZSB0byByYWNlLFxuLVx0XHQgKiByZXR1cm4gdG8gaHN0YXRlLlxuLVx0XHQgKi9cbi1cdFx0aHVnZXRsYl9hY2N0X21lbW9yeShoLCAtZ2JsX3Jlc3YpO1xuLVx0fVxuLVx0LyogUmVzdG9yZSB1c2VkX2hwYWdlcyBmb3IgcGFnZXMgdGhhdCBmYWlsZWQgZ2xvYmFsIHJlc2VydmF0aW9uICovXG4tXHRpZiAoZ2JsX3Jlc2VydmUgXHUwMDI2XHUwMDI2IHNwb29sKSB7XG4tXHRcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4rIG91dF9wdXRfcGFnZXM6XG4rXHQvKlxuK1x0ICogUmV0dXJuIGFsbCB0aGF0IHdhcyByZXF1ZXN0ZWQgZnJvbSB0aGUgc3VicG9vbCwgbGV0IHN1YnBvb2xcbitcdCAqIHRlbGwgdXMgdGhlIG5ldyBudW1iZXIgb2YgcmVzZXJ2YXRpb25zIHRoYXQgbmVlZCB0byBiZVxuK1x0ICogcmV0dXJuZWQgdG8gdGhlIGdsb2JhbCBwb29sLlxuK1x0ICovXG4rXHRnYmxfcmVzdiA9IGh1Z2VwYWdlX3N1YnBvb2xfcHV0X3BhZ2VzKHNwb29sLCBjaGcpO1xuK1x0LypcbitcdCAqIFRoZXJlIG1heSBiZSBhIGRpZmZlcmVuY2UgYmV0d2VlbiB0aGUgbnVtYmVyIG9mXG4rXHQgKiByZXNlcnZhdGlvbnMgdG8gY29uc3VtZSBhbmQgdGhlIG51bWJlciB0byByZXN0b3JlIG5vdyBpZlxuK1x0ICogdGhlcmUgYXJlIG11bHRpcGxlIHRocmVhZHMgaW50ZXJhY3Rpbmcgd2l0aCB0aGUgc3VicG9vbCAtXG4rXHQgKiByZXN0b3JlIHRoZSBkaWZmZXJlbmNlLlxuK1x0ICovXG4rXHRodWdldGxiX2FjY3RfbWVtb3J5KGgsIC0oZ2JsX3Jlc3YgLSBnYmxfcmVzZXJ2ZSkpO1xuIFxuLVx0XHRzcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZzcG9vbC1cdTAwM2Vsb2NrLCBmbGFncyk7XG4tXHRcdGlmIChzcG9vbC1cdTAwM2VtYXhfaHBhZ2VzICE9IC0xKVxuLVx0XHRcdHNwb29sLVx1MDAzZXVzZWRfaHBhZ2VzIC09IGdibF9yZXNlcnZlO1xuLVx0XHR1bmxvY2tfb3JfcmVsZWFzZV9zdWJwb29sKHNwb29sLCBmbGFncyk7XG4tXHR9XG4gb3V0X3VuY2hhcmdlX2Nncm91cDpcbiBcdGh1Z2V0bGJfY2dyb3VwX3VuY2hhcmdlX2Nncm91cF9yc3ZkKGhzdGF0ZV9pbmRleChoKSxcbiBcdFx0XHRcdFx0ICAgIGNoZyAqIHBhZ2VzX3Blcl9odWdlX3BhZ2UoaCksIGhfY2cpO1xuZGlmZiAtLWdpdCBhL21tL2h1Z2V0bGJfc3VicG9vbC5jIGIvbW0vaHVnZXRsYl9zdWJwb29sLmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uZWI1NDcyYmRmMjE5MjRcbi0tLSAvZGV2L251bGxcbisrKyBiL21tL2h1Z2V0bGJfc3VicG9vbC5jXG5AQCAtMCwwICsxLDIyMyBAQFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4rLypcbisgKiBTdWJwb29sIGFuZCByZXNlcnZlIGFjY291bnRpbmcgZm9yIEh1Z2VUTEIgZm9saW9zLlxuKyAqIEV4dHJhY3RlZCBmcm9tIG1tL2h1Z2V0bGIuY1xuKyAqL1xuK1xuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3R5cGVzLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9rZXJuZWwuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3NsYWIuaFx1MDAzZVxuKyNpZmRlZiBfX0tFUk5FTF9fXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvaHVnZXRsYi5oXHUwMDNlXG4rI2VuZGlmXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvc3BpbmxvY2suaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2J1Zy5oXHUwMDNlXG4rI2luY2x1ZGUgXCJodWdldGxiX3N1YnBvb2wuaFwiXG4rXG4rc3RydWN0IGh1Z2VwYWdlX3N1YnBvb2wge1xuK1x0c3BpbmxvY2tfdCBsb2NrO1xuK1x0bG9uZyBjb3VudDtcbitcdGxvbmcgbWF4X2hwYWdlcztcdC8qIE1heGltdW0gaHVnZSBwYWdlcyBvciAtMSBpZiBubyBtYXhpbXVtLiAqL1xuK1x0bG9uZyB1c2VkX2hwYWdlcztcdC8qIFVzZWQgcGFnZSBjb3VudCwgaW5jbHVkZXMgYm90aCAqL1xuK1x0XHRcdFx0LyogYWxsb2NhdGVkIGFuZCByZXNlcnZlZCBwYWdlcy4gKi9cbitcdHN0cnVjdCBoc3RhdGUgKmhzdGF0ZTtcbitcdGxvbmcgbWluX2hwYWdlcztcdC8qIE1pbmltdW0gaHVnZSBwYWdlcyBvciAtMSBpZiBubyBtaW5pbXVtLiAqL1xuK1x0bG9uZyByc3ZfaHBhZ2VzO1x0LyogUGFnZXMgcmVzZXJ2ZWQgYWdhaW5zdCBnbG9iYWwgcG9vbCB0byAqL1xuK1x0XHRcdFx0Lyogc2F0aXNmeSBtaW5pbXVtIHNpemUuICovXG4rfTtcbitcbitzdGF0aWMgaW5saW5lIGJvb2wgc3VicG9vbF9pc19mcmVlKHN0cnVjdCBodWdlcGFnZV9zdWJwb29sICpzcG9vbClcbit7XG4rXHRpZiAoc3Bvb2wtXHUwMDNlY291bnQpXG4rXHRcdHJldHVybiBmYWxzZTtcbitcbitcdHJldHVybiBzcG9vbC1cdTAwM2V1c2VkX2hwYWdlcyA9PSAwO1xuK31cbitcbitzdGF0aWMgaW5saW5lIHZvaWQgdW5sb2NrX29yX3JlbGVhc2Vfc3VicG9vbChzdHJ1Y3QgaHVnZXBhZ2Vfc3VicG9vbCAqc3Bvb2wsXG4rXHRcdFx0XHRcdFx0dW5zaWduZWQgbG9uZyBpcnFfZmxhZ3MpXG4re1xuK1x0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZzcG9vbC1cdTAwM2Vsb2NrLCBpcnFfZmxhZ3MpO1xuK1xuK1x0LypcbitcdCAqIElmIG5vIHBhZ2VzIGFyZSB1c2VkLCBhbmQgbm8gb3RoZXIgaGFuZGxlcyB0byB0aGUgc3VicG9vbFxuK1x0ICogcmVtYWluLCBnaXZlIHVwIGFueSByZXNlcnZhdGlvbnMgYmFzZWQgb24gbWluaW11bSBzaXplIGFuZFxuK1x0ICogZnJlZSB0aGUgc3VicG9vbC5cbitcdCAqL1xuK1x0aWYgKHN1YnBvb2xfaXNfZnJlZShzcG9vbCkpIHtcbitcdFx0aWYgKHNwb29sLVx1MDAzZW1pbl9ocGFnZXMgIT0gLTEpXG4rXHRcdFx0aHVnZXRsYl9hY2N0X21lbW9yeShzcG9vbC1cdTAwM2Voc3RhdGUsXG4rXHRcdFx0XHRcdFx0LXNwb29sLVx1MDAzZW1pbl9ocGFnZXMpO1xuK1x0XHRrZnJlZShzcG9vbCk7XG4rXHR9XG4rfVxuK1xuK2xvbmcgaHVnZXBhZ2Vfc3VicG9vbF9mcmVlX2hwYWdlcyhzdHJ1Y3QgaHVnZXBhZ2Vfc3VicG9vbCAqc3Bvb2wpXG4re1xuK1x0bG9uZyBmcmVlX3BhZ2VzO1xuK1xuK1x0c3Bpbl9sb2NrX2lycShcdTAwMjZzcG9vbC1cdTAwM2Vsb2NrKTtcbitcdGlmIChzcG9vbC1cdTAwM2VtYXhfaHBhZ2VzID09IC0xKVxuK1x0XHRmcmVlX3BhZ2VzID0gLTE7XG4rXHRlbHNlXG4rXHRcdGZyZWVfcGFnZXMgPSBzcG9vbC1cdTAwM2VtYXhfaHBhZ2VzIC0gc3Bvb2wtXHUwMDNldXNlZF9ocGFnZXM7XG4rXHRzcGluX3VubG9ja19pcnEoXHUwMDI2c3Bvb2wtXHUwMDNlbG9jayk7XG4rXG4rXHRyZXR1cm4gZnJlZV9wYWdlcztcbit9XG4rXG4rc3RhdGljIHVuc2lnbmVkIGludCBodWdlcGFnZV9zdWJwb29sX2hwYWdlX3NoaWZ0KHN0cnVjdCBodWdlcGFnZV9zdWJwb29sICpzcG9vbClcbit7XG4rXHRyZXR1cm4gaHVnZV9wYWdlX3NoaWZ0KHNwb29sLVx1MDAzZWhzdGF0ZSk7XG4rfVxuK1xuK3Vuc2lnbmVkIGxvbmcgbG9uZyBodWdlcGFnZV9zdWJwb29sX21heF9zaXplKHN0cnVjdCBodWdlcGFnZV9zdWJwb29sICpzcG9vbClcbit7XG4rXHRpZiAoc3Bvb2wtXHUwMDNlbWF4X2hwYWdlcyA9PSAtMSlcbitcdFx0cmV0dXJuIC0xVUxMO1xuK1x0cmV0dXJuICh1bnNpZ25lZCBsb25nIGxvbmcpc3Bvb2wtXHUwMDNlbWF4X2hwYWdlcyBcdTAwM2NcdTAwM2MgaHVnZXBhZ2Vfc3VicG9vbF9ocGFnZV9zaGlmdChzcG9vbCk7XG4rfVxuK1xuK3Vuc2lnbmVkIGxvbmcgbG9uZyBodWdlcGFnZV9zdWJwb29sX21pbl9zaXplKHN0cnVjdCBodWdlcGFnZV9zdWJwb29sICpzcG9vbClcbit7XG4rXHRpZiAoc3Bvb2wtXHUwMDNlbWluX2hwYWdlcyA9PSAtMSlcbitcdFx0cmV0dXJuIC0xVUxMO1xuK1x0cmV0dXJuICh1bnNpZ25lZCBsb25nIGxvbmcpc3Bvb2wtXHUwMDNlbWluX2hwYWdlcyBcdTAwM2NcdTAwM2MgaHVnZXBhZ2Vfc3VicG9vbF9ocGFnZV9zaGlmdChzcG9vbCk7XG4rfVxuK1xuK2xvbmcgaHVnZXBhZ2Vfc3VicG9vbF9tYXhfaHBhZ2VzKHN0cnVjdCBodWdlcGFnZV9zdWJwb29sICpzcG9vbClcbit7XG4rXHRsb25nIG1heF9ocGFnZXM7XG4rXG4rXHRzcGluX2xvY2tfaXJxKFx1MDAyNnNwb29sLVx1MDAzZWxvY2spO1xuK1x0bWF4X2hwYWdlcyA9IHNwb29sLVx1MDAzZW1heF9ocGFnZXM7XG4rXHRzcGluX3VubG9ja19pcnEoXHUwMDI2c3Bvb2wtXHUwMDNlbG9jayk7XG4rXG4rXHRyZXR1cm4gbWF4X2hwYWdlcztcbit9XG4rXG4rc3RydWN0IGh1Z2VwYWdlX3N1YnBvb2wgKmh1Z2VwYWdlX25ld19zdWJwb29sKHN0cnVjdCBoc3RhdGUgKmgsIGxvbmcgbWF4X2hwYWdlcyxcbitcdFx0XHRcdFx0XHRsb25nIG1pbl9ocGFnZXMpXG4re1xuK1x0c3RydWN0IGh1Z2VwYWdlX3N1YnBvb2wgKnNwb29sO1xuK1xuK1x0c3Bvb2wgPSBremFsbG9jX29iaigqc3Bvb2wpO1xuK1x0aWYgKCFzcG9vbClcbitcdFx0cmV0dXJuIE5VTEw7XG4rXG4rXHRzcGluX2xvY2tfaW5pdChcdTAwMjZzcG9vbC1cdTAwM2Vsb2NrKTtcbitcdHNwb29sLVx1MDAzZWNvdW50ID0gMTtcbitcdHNwb29sLVx1MDAzZW1heF9ocGFnZXMgPSBtYXhfaHBhZ2VzO1xuK1x0c3Bvb2wtXHUwMDNlaHN0YXRlID0gaDtcbitcdHNwb29sLVx1MDAzZW1pbl9ocGFnZXMgPSBtaW5faHBhZ2VzO1xuK1xuK1x0aWYgKG1pbl9ocGFnZXMgIT0gLTEgXHUwMDI2XHUwMDI2IGh1Z2V0bGJfYWNjdF9tZW1vcnkoaCwgbWluX2hwYWdlcykpIHtcbitcdFx0a2ZyZWUoc3Bvb2wpO1xuK1x0XHRyZXR1cm4gTlVMTDtcbitcdH1cbitcdHNwb29sLVx1MDAzZXJzdl9ocGFnZXMgPSBtaW5faHBhZ2VzO1xuK1xuK1x0cmV0dXJuIHNwb29sO1xuK31cbitcbit2b2lkIGh1Z2VwYWdlX3B1dF9zdWJwb29sKHN0cnVjdCBodWdlcGFnZV9zdWJwb29sICpzcG9vbClcbit7XG4rXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuK1xuK1x0c3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2c3Bvb2wtXHUwMDNlbG9jaywgZmxhZ3MpO1xuK1x0QlVHX09OKCFzcG9vbC1cdTAwM2Vjb3VudCk7XG4rXHRzcG9vbC1cdTAwM2Vjb3VudC0tO1xuK1x0dW5sb2NrX29yX3JlbGVhc2Vfc3VicG9vbChzcG9vbCwgZmxhZ3MpO1xuK31cbitcbisvKlxuKyAqIFN1YnBvb2wgYWNjb3VudGluZyBmb3IgYWxsb2NhdGluZyBhbmQgcmVzZXJ2aW5nIHBhZ2VzLlxuKyAqIFJldHVybiAtRU5PTUVNIGlmIHRoZXJlIGFyZSBub3QgZW5vdWdoIHJlc291cmNlcyB0byBzYXRpc2Z5IHRoZVxuKyAqIHJlcXVlc3QuICBPdGhlcndpc2UsIHJldHVybiB0aGUgbnVtYmVyIG9mIHBhZ2VzIGJ5IHdoaWNoIHRoZVxuKyAqIGdsb2JhbCBwb29scyBtdXN0IGJlIGFkanVzdGVkICh1cHdhcmQpLiAgVGhlIHJldHVybmVkIHZhbHVlIG1heVxuKyAqIG9ubHkgYmUgZGlmZmVyZW50IHRoYW4gdGhlIHBhc3NlZCB2YWx1ZSAoZGVsdGEpIGluIHRoZSBjYXNlIHdoZXJlXG4rICogYSBzdWJwb29sIG1pbmltdW0gc2l6ZSBtdXN0IGJlIG1haW50YWluZWQuXG4rICovXG4rbG9uZyBodWdlcGFnZV9zdWJwb29sX2dldF9wYWdlcyhzdHJ1Y3QgaHVnZXBhZ2Vfc3VicG9vbCAqc3Bvb2wsXG4rXHRcdFx0XHQgICAgICBsb25nIGRlbHRhKVxuK3tcbitcdGxvbmcgcmV0ID0gZGVsdGE7XG4rXG4rXHRpZiAoIXNwb29sKVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0c3Bpbl9sb2NrX2lycShcdTAwMjZzcG9vbC1cdTAwM2Vsb2NrKTtcbitcbitcdGlmIChzcG9vbC1cdTAwM2VtYXhfaHBhZ2VzICE9IC0xIFx1MDAyNlx1MDAyNlxuK1x0ICAgIHNwb29sLVx1MDAzZXVzZWRfaHBhZ2VzICsgZGVsdGEgXHUwMDNlIHNwb29sLVx1MDAzZW1heF9ocGFnZXMpIHtcbitcdFx0cmV0ID0gLUVOT01FTTtcbitcdFx0Z290byB1bmxvY2tfcmV0O1xuK1x0fVxuK1xuK1x0c3Bvb2wtXHUwMDNldXNlZF9ocGFnZXMgKz0gZGVsdGE7XG4rXG4rXHQvKiBtaW5pbXVtIHNpemUgYWNjb3VudGluZyAqL1xuK1x0aWYgKHNwb29sLVx1MDAzZW1pbl9ocGFnZXMgIT0gLTEgXHUwMDI2XHUwMDI2IHNwb29sLVx1MDAzZXJzdl9ocGFnZXMpIHtcbitcdFx0aWYgKGRlbHRhIFx1MDAzZSBzcG9vbC1cdTAwM2Vyc3ZfaHBhZ2VzKSB7XG4rXHRcdFx0LypcbitcdFx0XHQgKiBBc2tpbmcgZm9yIG1vcmUgcmVzZXJ2ZXMgdGhhbiB0aG9zZSBhbHJlYWR5IHRha2VuIG9uXG4rXHRcdFx0ICogYmVoYWxmIG9mIHN1YnBvb2wuICBSZXR1cm4gZGlmZmVyZW5jZS5cbitcdFx0XHQgKi9cbitcdFx0XHRyZXQgPSBkZWx0YSAtIHNwb29sLVx1MDAzZXJzdl9ocGFnZXM7XG4rXHRcdFx0c3Bvb2wtXHUwMDNlcnN2X2hwYWdlcyA9IDA7XG4rXHRcdH0gZWxzZSB7XG4rXHRcdFx0cmV0ID0gMDtcdC8qIHJlc2VydmVzIGFscmVhZHkgYWNjb3VudGVkIGZvciAqL1xuK1x0XHRcdHNwb29sLVx1MDAzZXJzdl9ocGFnZXMgLT0gZGVsdGE7XG4rXHRcdH1cbitcdH1cbitcbit1bmxvY2tfcmV0OlxuK1x0c3Bpbl91bmxvY2tfaXJxKFx1MDAyNnNwb29sLVx1MDAzZWxvY2spO1xuK1x0cmV0dXJuIHJldDtcbit9XG4rXG4rLypcbisgKiBTdWJwb29sIGFjY291bnRpbmcgZm9yIGZyZWVpbmcgYW5kIHVucmVzZXJ2aW5nIHBhZ2VzLlxuKyAqIFJldHVybiB0aGUgbnVtYmVyIG9mIGdsb2JhbCBwYWdlIHJlc2VydmF0aW9ucyB0aGF0IG11c3QgYmUgZHJvcHBlZC5cbisgKiBUaGUgcmV0dXJuIHZhbHVlIG1heSBvbmx5IGJlIGRpZmZlcmVudCB0aGFuIHRoZSBwYXNzZWQgdmFsdWUgKGRlbHRhKVxuKyAqIGluIHRoZSBjYXNlIHdoZXJlIGEgc3VicG9vbCBtaW5pbXVtIHNpemUgbXVzdCBiZSBtYWludGFpbmVkLlxuKyAqL1xuK2xvbmcgaHVnZXBhZ2Vfc3VicG9vbF9wdXRfcGFnZXMoc3RydWN0IGh1Z2VwYWdlX3N1YnBvb2wgKnNwb29sLFxuK1x0XHRcdFx0ICAgICAgIGxvbmcgZGVsdGEpXG4re1xuK1x0bG9uZyByZXQgPSBkZWx0YTtcbitcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4rXG4rXHRpZiAoIXNwb29sKVxuK1x0XHRyZXR1cm4gZGVsdGE7XG4rXG4rXHRzcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZzcG9vbC1cdTAwM2Vsb2NrLCBmbGFncyk7XG4rXG4rXHRzcG9vbC1cdTAwM2V1c2VkX2hwYWdlcyAtPSBkZWx0YTtcbitcbitcdCAvKiBtaW5pbXVtIHNpemUgYWNjb3VudGluZyAqL1xuK1x0aWYgKHNwb29sLVx1MDAzZW1pbl9ocGFnZXMgIT0gLTEgXHUwMDI2XHUwMDI2IHNwb29sLVx1MDAzZXVzZWRfaHBhZ2VzIFx1MDAzYyBzcG9vbC1cdTAwM2VtaW5faHBhZ2VzKSB7XG4rXHRcdC8qXG4rXHRcdCAqIGxpbWl0IGlzIHRoZSBtYXhpbXVtIG51bWJlciBvZiByZXNlcnZhdGlvbnMgdGhhdFxuK1x0XHQgKiBjYW4gYmUgcmVzdG9yZWQgdG8gdGhpcyBzdWJwb29sLlxuK1x0XHQgKi9cbitcdFx0bG9uZyBsaW1pdCA9IHNwb29sLVx1MDAzZW1pbl9ocGFnZXMgLSBzcG9vbC1cdTAwM2V1c2VkX2hwYWdlcztcbitcbitcdFx0aWYgKHNwb29sLVx1MDAzZXJzdl9ocGFnZXMgKyBkZWx0YSBcdTAwM2M9IGxpbWl0KVxuK1x0XHRcdHJldCA9IDA7XG4rXHRcdGVsc2VcbitcdFx0XHRyZXQgPSBzcG9vbC1cdTAwM2Vyc3ZfaHBhZ2VzICsgZGVsdGEgLSBsaW1pdDtcbitcbitcdFx0c3Bvb2wtXHUwMDNlcnN2X2hwYWdlcyArPSBkZWx0YTtcbitcdFx0aWYgKHNwb29sLVx1MDAzZXJzdl9ocGFnZXMgXHUwMDNlIGxpbWl0KVxuK1x0XHRcdHNwb29sLVx1MDAzZXJzdl9ocGFnZXMgPSBsaW1pdDtcbitcdH1cbitcbitcdC8qXG4rXHQgKiBJZiBodWdldGxiZnNfcHV0X3N1cGVyIGNvdWxkbid0IGZyZWUgc3Bvb2wgZHVlIHRvIGFuIG91dHN0YW5kaW5nXG4rXHQgKiBxdW90YSByZWZlcmVuY2UsIGZyZWUgaXQgbm93LlxuK1x0ICovXG4rXHR1bmxvY2tfb3JfcmVsZWFzZV9zdWJwb29sKHNwb29sLCBmbGFncyk7XG4rXG4rXHRyZXR1cm4gcmV0O1xuK31cbmRpZmYgLS1naXQgYS9tbS9odWdldGxiX3N1YnBvb2wuaCBiL21tL2h1Z2V0bGJfc3VicG9vbC5oXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLjQxZDIyMjM5ZjJjM2VkXG4tLS0gL2Rldi9udWxsXG4rKysgYi9tbS9odWdldGxiX3N1YnBvb2wuaFxuQEAgLTAsMCArMSwyMSBAQFxuKy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wICovXG4rI2lmbmRlZiBfTU1fSFVHRVRMQl9TVUJQT09MX0hcbisjZGVmaW5lIF9NTV9IVUdFVExCX1NVQlBPT0xfSFxuK1xuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3NwaW5sb2NrLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC90eXBlcy5oXHUwMDNlXG4rXG4rc3RydWN0IGhzdGF0ZTtcbitzdHJ1Y3QgaHVnZXBhZ2Vfc3VicG9vbDtcbitcbitzdHJ1Y3QgaHVnZXBhZ2Vfc3VicG9vbCAqaHVnZXBhZ2VfbmV3X3N1YnBvb2woc3RydWN0IGhzdGF0ZSAqaCwgbG9uZyBtYXhfaHBhZ2VzLFxuK1x0XHRcdFx0XHRcdGxvbmcgbWluX2hwYWdlcyk7XG4rdm9pZCBodWdlcGFnZV9wdXRfc3VicG9vbChzdHJ1Y3QgaHVnZXBhZ2Vfc3VicG9vbCAqc3Bvb2wpO1xuK2xvbmcgaHVnZXBhZ2Vfc3VicG9vbF9nZXRfcGFnZXMoc3RydWN0IGh1Z2VwYWdlX3N1YnBvb2wgKnNwb29sLCBsb25nIGRlbHRhKTtcbitsb25nIGh1Z2VwYWdlX3N1YnBvb2xfcHV0X3BhZ2VzKHN0cnVjdCBodWdlcGFnZV9zdWJwb29sICpzcG9vbCwgbG9uZyBkZWx0YSk7XG4rbG9uZyBodWdlcGFnZV9zdWJwb29sX2ZyZWVfaHBhZ2VzKHN0cnVjdCBodWdlcGFnZV9zdWJwb29sICpzcG9vbCk7XG4rbG9uZyBodWdlcGFnZV9zdWJwb29sX21heF9ocGFnZXMoc3RydWN0IGh1Z2VwYWdlX3N1YnBvb2wgKnNwb29sKTtcbit1bnNpZ25lZCBsb25nIGxvbmcgaHVnZXBhZ2Vfc3VicG9vbF9tYXhfc2l6ZShzdHJ1Y3QgaHVnZXBhZ2Vfc3VicG9vbCAqc3Bvb2wpO1xuK3Vuc2lnbmVkIGxvbmcgbG9uZyBodWdlcGFnZV9zdWJwb29sX21pbl9zaXplKHN0cnVjdCBodWdlcGFnZV9zdWJwb29sICpzcG9vbCk7XG4rXG4rI2VuZGlmIC8qIF9NTV9IVUdFVExCX1NVQlBPT0xfSCAqL1xuZGlmZiAtLWdpdCBhL21tL21lbWNvbnRyb2wuYyBiL21tL21lbWNvbnRyb2wuY1xuaW5kZXggNmRjNDg4OGE5MGYzZmQuLjY3NjRmZjA0MWMxOTY1IDEwMDY0NFxuLS0tIGEvbW0vbWVtY29udHJvbC5jXG4rKysgYi9tbS9tZW1jb250cm9sLmNcbkBAIC01MTQ3LDM5ICs1MTQ3LDExOSBAQCBpbnQgX19tZW1fY2dyb3VwX2NoYXJnZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSwgZ2ZwX3QgZ2ZwKVxuIH1cbiBcbiAvKipcbi0gKiBtZW1fY2dyb3VwX2NoYXJnZV9odWdldGxiIC0gY2hhcmdlIHRoZSBtZW1jZyBmb3IgYSBodWdldGxiIGZvbGlvXG4tICogQGZvbGlvOiBmb2xpbyBiZWluZyBjaGFyZ2VkXG4rICogbWVtX2Nncm91cF9odWdldGxiX3RyeV9jaGFyZ2UgLSBUcnkgdG8gY2hhcmdlIHRoZSBtZW1jZyBmb3IgYSBodWdldGxiIGZvbGlvXG4rICogQG5yX3BhZ2VzOiBudW1iZXIgb2YgYmFzZSBwYWdlcyB0byBjaGFyZ2VcbiAgKiBAZ2ZwOiByZWNsYWltIG1vZGVcbisgKiBAbWVtY2dfcDogT3V0cHV0IHBvaW50ZXIgdG8gdGhlIGNoYXJnZWQgbWVtX2Nncm91cCAoaWYgc3VjY2Vzc2Z1bCBhbmQgZW5hYmxlZClcbisgKiBAb2JqY2dfcDogT3V0cHV0IHBvaW50ZXIgdG8gdGhlIGNoYXJnZWQgb2JqX2Nncm91cCAoaWYgc3VjY2Vzc2Z1bCBhbmQgZW5hYmxlZClcbiAgKlxuLSAqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHdoZW4gYWxsb2NhdGluZyBhIGh1Z2UgcGFnZSBmb2xpbywgYWZ0ZXIgdGhlIHBhZ2UgaGFzXG4tICogYWxyZWFkeSBiZWVuIG9idGFpbmVkIGFuZCBjaGFyZ2VkIHRvIHRoZSBhcHByb3ByaWF0ZSBodWdldGxiIGNncm91cFxuLSAqIGNvbnRyb2xsZXIgKGlmIGl0IGlzIGVuYWJsZWQpLlxuKyAqIFByZXBhcmVzIGFuZCB0cmllcyB0byByZXNlcnZlIHRoZSBtZW1vcnkgY291bnRlciBmb3IgdGhlIGZvbGlvIGZyb20gdGhlIGN1cnJlbnRcbisgKiB0YXNrJ3MgbWVtY2cuIElmIHN1Y2Nlc3NmdWwsIGJvdGggKm1lbWNnX3AgYW5kICpvYmpjZ19wIGFyZSBwb3B1bGF0ZWQgYW5kIHRoZWlyXG4rICogcmVmZXJlbmNlcyBhcmUgcGlubmVkIHVudGlsIGEgc3Vic2VxdWVudCBjYWxsIHRvIG1lbV9jZ3JvdXBfaHVnZXRsYl9jb21taXRfY2hhcmdlXG4rICogb3IgbWVtX2Nncm91cF9odWdldGxiX2NhbmNlbF9jaGFyZ2UuXG4gICpcbiAgKiBSZXR1cm5zIEVOT01FTSBpZiB0aGUgbWVtY2cgaXMgYWxyZWFkeSBmdWxsLlxuLSAqIFJldHVybnMgMCBpZiBlaXRoZXIgdGhlIGNoYXJnZSB3YXMgc3VjY2Vzc2Z1bCwgb3IgaWYgd2Ugc2tpcCB0aGUgY2hhcmdpbmcuXG4rICogUmV0dXJucyAwIGlmIGVpdGhlciB0aGUgY2hhcmdlIHdhcyBzdWNjZXNzZnVsLCBvciBpZiB3ZSBza2lwIGNoYXJnaW5nLlxuICAqL1xuLWludCBtZW1fY2dyb3VwX2NoYXJnZV9odWdldGxiKHN0cnVjdCBmb2xpbyAqZm9saW8sIGdmcF90IGdmcClcbitpbnQgbWVtX2Nncm91cF9odWdldGxiX3RyeV9jaGFyZ2UodW5zaWduZWQgaW50IG5yX3BhZ2VzLCBnZnBfdCBnZnAsXG4rXHRcdFx0XHQgIHN0cnVjdCBtZW1fY2dyb3VwICoqbWVtY2dfcCxcbitcdFx0XHRcdCAgc3RydWN0IG9ial9jZ3JvdXAgKipvYmpjZ19wKVxuIHtcbi1cdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyA9IGdldF9tZW1fY2dyb3VwX2Zyb21fY3VycmVudCgpO1xuK1x0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnO1xuK1x0c3RydWN0IG9ial9jZ3JvdXAgKm9iamNnO1xuIFx0aW50IHJldCA9IDA7XG4gXG4tXHQvKlxuLVx0ICogRXZlbiBtZW1jZyBkb2VzIG5vdCBhY2NvdW50IGZvciBodWdldGxiLCB3ZSBzdGlsbCB3YW50IHRvIHVwZGF0ZVxuLVx0ICogc3lzdGVtLWxldmVsIHN0YXRzIHZpYSBscnV2ZWNfc3RhdF9tb2RfZm9saW8uIFJldHVybiAwLCBhbmQgc2tpcFxuLVx0ICogY2hhcmdpbmcgdGhlIG1lbWNnLlxuLVx0ICovXG4rXHQqbWVtY2dfcCA9IE5VTEw7XG4rXHQqb2JqY2dfcCA9IE5VTEw7XG4rXG4gXHRpZiAobWVtX2Nncm91cF9kaXNhYmxlZCgpIHx8ICFtZW1jZ19hY2NvdW50c19odWdldGxiKCkgfHxcbi1cdFx0IW1lbWNnIHx8ICFjZ3JvdXBfc3Vic3lzX29uX2RmbChtZW1vcnlfY2dycF9zdWJzeXMpKVxuLVx0XHRnb3RvIG91dDtcbitcdCAgICAhY2dyb3VwX3N1YnN5c19vbl9kZmwobWVtb3J5X2NncnBfc3Vic3lzKSlcbitcdFx0cmV0dXJuIDA7XG4gXG4tXHRpZiAoY2hhcmdlX21lbWNnKGZvbGlvLCBtZW1jZywgZ2ZwKSlcbi1cdFx0cmV0ID0gLUVOT01FTTtcbitcdG1lbWNnID0gZ2V0X21lbV9jZ3JvdXBfZnJvbV9jdXJyZW50KCk7XG4rXHRpZiAoIW1lbWNnKVxuK1x0XHRyZXR1cm4gMDtcbiBcbi1vdXQ6XG4rXHRvYmpjZyA9IGdldF9vYmpfY2dyb3VwX2Zyb21fbWVtY2cobWVtY2cpO1xuK1x0aWYgKCFvYmpjZylcbitcdFx0Z290byBwdXRfbWVtY2c7XG4rXG4rXHRpZiAoIW9ial9jZ3JvdXBfaXNfcm9vdChvYmpjZykpIHtcbitcdFx0cmV0ID0gdHJ5X2NoYXJnZV9tZW1jZyhtZW1jZywgZ2ZwLCBucl9wYWdlcyk7XG4rXHRcdGlmIChyZXQpXG4rXHRcdFx0Z290byBwdXRfb2JqY2c7XG4rXHR9XG4rXG4rXHQqbWVtY2dfcCA9IG1lbWNnO1xuK1x0Km9iamNnX3AgPSBvYmpjZztcbitcdHJldHVybiAwO1xuK1xuK3B1dF9vYmpjZzpcbitcdG9ial9jZ3JvdXBfcHV0KG9iamNnKTtcbitwdXRfbWVtY2c6XG4gXHRtZW1fY2dyb3VwX3B1dChtZW1jZyk7XG4gXHRyZXR1cm4gcmV0O1xuIH1cbiBcbisvKipcbisgKiBtZW1fY2dyb3VwX2h1Z2V0bGJfY29tbWl0X2NoYXJnZSAtIENvbW1pdCB0aGUgbWVtY2cgY2hhcmdlIGZvciBhIGh1Z2V0bGIgZm9saW9cbisgKiBAZm9saW86IGZvbGlvIGJlaW5nIGNoYXJnZWRcbisgKiBAbWVtY2c6IFRhcmdldCBtZW1fY2dyb3VwIG9idGFpbmVkIGZyb20gbWVtX2Nncm91cF9odWdldGxiX3RyeV9jaGFyZ2VcbisgKiBAb2JqY2c6IFRhcmdldCBvYmpfY2dyb3VwIG9idGFpbmVkIGZyb20gbWVtX2Nncm91cF9odWdldGxiX3RyeV9jaGFyZ2VcbisgKlxuKyAqIEZpbmFsaXplcyB0aGUgbWVtb3J5IGFuZCBzdGF0aXN0aWNzIGNoYXJnaW5nIGZvciB0aGUgZm9saW8gaW4gdGhlIHNwZWNpZmllZCBtZW1jZy5cbisgKiBUcmFuc2ZlcnMgdGhlIHBpbm5lZCBvYmpjZyByZWZlcmVuY2UgdG8gdGhlIGZvbGlvIHN0cnVjdHVyZSAoZm9yIGF1dG9tYXRpY1xuKyAqIHVuY2hhcmdpbmcgdXBvbiBmcmVlaW5nIHZpYSBtZW1fY2dyb3VwX3VuY2hhcmdlKS4gUmVsZWFzZXMgdGhlIHRyeS1jb21taXQgcmVmZXJlbmNlXG4rICogb24gbWVtY2cuXG4rICovXG4rdm9pZCBtZW1fY2dyb3VwX2h1Z2V0bGJfY29tbWl0X2NoYXJnZShzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuK1x0XHRcdFx0ICAgICAgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxuK1x0XHRcdFx0ICAgICAgc3RydWN0IG9ial9jZ3JvdXAgKm9iamNnKVxuK3tcbitcdGlmICghbWVtY2cgfHwgIW9iamNnKVxuK1x0XHRyZXR1cm47XG4rXG4rXHRjb21taXRfY2hhcmdlKGZvbGlvLCBvYmpjZyk7XG4rXHRtZW1jZzFfY29tbWl0X2NoYXJnZShmb2xpbywgbWVtY2cpO1xuK1xuK1x0LypcbitcdCAqIERyb3Agb3VyIHRyeS1jb21taXQtY2FuY2VsIHByb3RvY29sIHJlZmVyZW5jZSBvbiBtZW1jZy5cbitcdCAqIFRoZSBvYmpjZyByZWZlcmVuY2UgaXMgVFJBTlNGRVJSRUQgdG8gdGhlIGZvbGlvIGJ5IGNvbW1pdF9jaGFyZ2UsXG4rXHQgKiBzbyBpdCB3aWxsIGJlIHB1dCBhdXRvbWF0aWNhbGx5IGJ5IF9fbWVtX2Nncm91cF91bmNoYXJnZSgpIHdoZW5cbitcdCAqIHRoZSBmb2xpbyBpcyBmcmVlZC5cbitcdCAqL1xuK1x0bWVtX2Nncm91cF9wdXQobWVtY2cpO1xuK31cbitcbisvKipcbisgKiBtZW1fY2dyb3VwX2h1Z2V0bGJfY2FuY2VsX2NoYXJnZSAtIENhbmNlbCBhbmQgdW5kbyBhIGh1Z2V0bGIgZm9saW8gbWVtY2cgY2hhcmdlXG4rICogQG5yX3BhZ2VzOiBudW1iZXIgb2YgYmFzZSBwYWdlcyB0byB1bmNoYXJnZVxuKyAqIEBtZW1jZzogVGFyZ2V0IG1lbV9jZ3JvdXAgb2J0YWluZWQgZnJvbSBtZW1fY2dyb3VwX2h1Z2V0bGJfdHJ5X2NoYXJnZVxuKyAqIEBvYmpjZzogVGFyZ2V0IG9ial9jZ3JvdXAgb2J0YWluZWQgZnJvbSBtZW1fY2dyb3VwX2h1Z2V0bGJfdHJ5X2NoYXJnZVxuKyAqXG4rICogQ2FuY2VscyBhbmQgc2FmZWx5IHJvbGxzIGJhY2sgdGhlIHByZXBhcmVkIG1lbW9yeSBjaGFyZ2UgZm9yIHRoZSBmb2xpbyBpbiB0aGVcbisgKiBzcGVjaWZpZWQgbWVtY2cuIFJlbGVhc2VzIHRoZSB0cnktY29tbWl0IHBpbm5lZCByZWZlcmVuY2VzIG9uIGJvdGggbWVtY2cgYW5kIG9iamNnLlxuKyAqL1xuK3ZvaWQgbWVtX2Nncm91cF9odWdldGxiX2NhbmNlbF9jaGFyZ2UodW5zaWduZWQgaW50IG5yX3BhZ2VzLFxuK1x0XHRcdFx0ICAgICAgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxuK1x0XHRcdFx0ICAgICAgc3RydWN0IG9ial9jZ3JvdXAgKm9iamNnKVxuK3tcbitcdGlmICghbWVtY2cgfHwgIW9iamNnKVxuK1x0XHRyZXR1cm47XG4rXG4rXHRpZiAoIW9ial9jZ3JvdXBfaXNfcm9vdChvYmpjZykpXG4rXHRcdHJlZmlsbF9zdG9jayhtZW1jZywgbnJfcGFnZXMpO1xuK1xuK1x0LypcbitcdCAqIERyb3Agb3VyIHRyeS1jb21taXQtY2FuY2VsIHByb3RvY29sIHJlZmVyZW5jZXMgb24gYm90aCBvYmpjZ1xuK1x0ICogYW5kIG1lbWNnLCBzaW5jZSB0aGlzIG1hcHBpbmcgYXR0ZW1wdCB3YXMgYWJvcnRlZCBhbmQgdGhlIGZvbGlvXG4rXHQgKiB3YXMgbmV2ZXIgY29tbWl0dGVkLlxuK1x0ICovXG4rXHRvYmpfY2dyb3VwX3B1dChvYmpjZyk7XG4rXHRtZW1fY2dyb3VwX3B1dChtZW1jZyk7XG4rfVxuK1xuK1xuIC8qKlxuICAqIG1lbV9jZ3JvdXBfc3dhcGluX2NoYXJnZV9mb2xpbyAtIENoYXJnZSBhIG5ld2x5IGFsbG9jYXRlZCBmb2xpbyBmb3Igc3dhcGluLlxuICAqIEBmb2xpbzogdGhlIGZvbGlvIHRvIGNoYXJnZVxuZGlmZiAtLWdpdCBhL3N1YnBvb2xfbGVha19tYXhfc2l6ZS5zaCBiL3N1YnBvb2xfbGVha19tYXhfc2l6ZS5zaFxubmV3IGZpbGUgbW9kZSAxMDA3NTVcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi5iZmFmYTFiYTA3NGVhY1xuLS0tIC9kZXYvbnVsbFxuKysrIGIvc3VicG9vbF9sZWFrX21heF9zaXplLnNoXG5AQCAtMCwwICsxLDcxIEBAXG4rIyEvYmluL2Jhc2hcbitcbitpZiBbIFwiJEVVSURcIiAtbmUgMCBdOyB0aGVuXG4rICAgIGVjaG8gXCJQbGVhc2UgcnVuIGFzIHJvb3RcIlxuKyAgICBleGl0IDFcbitmaVxuK1xuK01OVF9QQVRIPVwiL3RtcC9tbnRfaHVnZXRsYlwiXG4rRklMRV9QQVRIPVwiJE1OVF9QQVRIL3Rlc3RfZmlsZVwiXG4rXG4rIyBTYXZlIG9yaWdpbmFsIHZhbHVlc1xuK29yaWdfbnI9JChjYXQgL3N5cy9rZXJuZWwvbW0vaHVnZXBhZ2VzL2h1Z2VwYWdlcy0yMDQ4a0IvbnJfaHVnZXBhZ2VzKVxuK29yaWdfb3ZlcmNvbW1pdD0kKGNhdCAvc3lzL2tlcm5lbC9tbS9odWdlcGFnZXMvaHVnZXBhZ2VzLTIwNDhrQi9ucl9vdmVyY29tbWl0X2h1Z2VwYWdlcylcbitcbitjbGVhbnVwKCkge1xuKyAgICBlY2hvIFwiQ2xlYW5pbmcgdXAuLi5cIlxuKyAgICBybSAtZiBcIiRGSUxFX1BBVEhcIlxuKyAgICB1bW91bnQgXCIkTU5UX1BBVEhcIiAyXHUwMDNlL2Rldi9udWxsXG4rICAgIHJtZGlyIFwiJE1OVF9QQVRIXCIgMlx1MDAzZS9kZXYvbnVsbFxuKyAgICBlY2hvIFwiJG9yaWdfbnJcIiBcdTAwM2UgL3N5cy9rZXJuZWwvbW0vaHVnZXBhZ2VzL2h1Z2VwYWdlcy0yMDQ4a0IvbnJfaHVnZXBhZ2VzXG4rICAgIGVjaG8gXCIkb3JpZ19vdmVyY29tbWl0XCIgXHUwMDNlIC9zeXMva2VybmVsL21tL2h1Z2VwYWdlcy9odWdlcGFnZXMtMjA0OGtCL25yX292ZXJjb21taXRfaHVnZXBhZ2VzXG4rICAgIGVjaG8gXCJDbGVhbnVwIGRvbmUuXCJcbit9XG4rdHJhcCBjbGVhbnVwIEVYSVRcbitcbisjIDEuIE1vdW50IGh1Z2V0bGJmcyB3aXRoIHNpemU9Mk0gKDEgcGFnZSlcbitta2RpciAtcCBcIiRNTlRfUEFUSFwiXG4raWYgISBtb3VudCAtdCBodWdldGxiZnMgLW8gc2l6ZT0yTSBub25lIFwiJE1OVF9QQVRIXCI7IHRoZW5cbisgICAgZWNobyBcIkZhaWxlZCB0byBtb3VudCBodWdldGxiZnNcIlxuKyAgICBleGl0IDFcbitmaVxuK1xuKyMgMi4gU2V0IG5yX2h1Z2VwYWdlcyB0byAwLCBvdmVyY29tbWl0IHRvIDBcbitlY2hvIDAgXHUwMDNlIC9zeXMva2VybmVsL21tL2h1Z2VwYWdlcy9odWdlcGFnZXMtMjA0OGtCL25yX2h1Z2VwYWdlc1xuK2VjaG8gMCBcdTAwM2UgL3N5cy9rZXJuZWwvbW0vaHVnZXBhZ2VzL2h1Z2VwYWdlcy0yMDQ4a0IvbnJfb3ZlcmNvbW1pdF9odWdlcGFnZXNcbitcbisjIENoZWNrIHN1YnBvb2wgdXNhZ2UgYmVmb3JlIHJ1bm5pbmdcbityZWFkIHRvdGFsIGZyZWUgXHUwMDNjIFx1MDAzYyhzdGF0IC1mIC1jIFwiJWIgJWZcIiBcIiRNTlRfUEFUSFwiKVxuK3VzZWRfYmVmb3JlPSQoKHRvdGFsIC0gZnJlZSkpXG4rZWNobyBcIkJlZm9yZSB0ZXN0IC0gU3VicG9vbCB0b3RhbCBibG9ja3M6ICR0b3RhbFwiXG4rZWNobyBcIkJlZm9yZSB0ZXN0IC0gU3VicG9vbCBmcmVlIGJsb2NrczogICRmcmVlXCJcbitlY2hvIFwiQmVmb3JlIHRlc3QgLSBTdWJwb29sIHVzZWQgYmxvY2tzOiAgJHVzZWRfYmVmb3JlXCJcbitpZiBbIFwiJHVzZWRfYmVmb3JlXCIgLW5lIDAgXTsgdGhlblxuKyAgICBlY2hvIFwiRVJST1I6IFN1YnBvb2wgaXMgbm90IGNsZWFuIGJlZm9yZSB0ZXN0IHN0YXJ0cyFcIlxuKyAgICBleGl0IDFcbitmaVxuK1xuKyMgUnVuIGZhbGxvY2F0ZSAoZXhwZWN0aW5nIGZhaWx1cmUpXG4rZWNobyBcIlJ1bm5pbmcgZmFsbG9jYXRlIChleHBlY3RpbmcgZmFpbHVyZSkuLi5cIlxuK2lmIGZhbGxvY2F0ZSAtbCAyTSBcIiRGSUxFX1BBVEhcIiAyXHUwMDNlL2Rldi9udWxsOyB0aGVuXG4rICAgIGVjaG8gXCJFUlJPUjogZmFsbG9jYXRlIHN1Y2NlZWRlZCBidXQgc2hvdWxkIGhhdmUgZmFpbGVkIChucl9odWdlcGFnZXMgaXMgMClcIlxuKyAgICBleGl0IDFcbitmaVxuK1xuKyMgQ2hlY2sgc3VicG9vbCB1c2FnZSB2aWEgc3RhdGZzXG4rIyAlYjogVG90YWwgYmxvY2tzXG4rIyAlZjogRnJlZSBibG9ja3NcbityZWFkIHRvdGFsIGZyZWUgXHUwMDNjIFx1MDAzYyhzdGF0IC1mIC1jIFwiJWIgJWZcIiBcIiRNTlRfUEFUSFwiKVxuK3VzZWQ9JCgodG90YWwgLSBmcmVlKSlcbitcbitlY2hvIFwiU3VicG9vbCB0b3RhbCBibG9ja3M6ICR0b3RhbFwiXG4rZWNobyBcIlN1YnBvb2wgZnJlZSBibG9ja3M6ICAkZnJlZVwiXG4rZWNobyBcIlN1YnBvb2wgdXNlZCBibG9ja3MgKGxlYWtlZCBpZiBcdTAwM2UgMCk6ICR1c2VkXCJcbitcbitpZiBbIFwiJHVzZWRcIiAtZ3QgMCBdOyB0aGVuXG4rICAgIGVjaG8gXCJSRVNVTFQ6IExFQUsgREVURUNURUQgKEZBSUwpXCJcbisgICAgZXhpdCAxXG4rZWxzZVxuKyAgICBlY2hvIFwiUkVTVUxUOiBOTyBMRUFLIChQQVNTKVwiXG4rICAgIGV4aXQgMFxuK2ZpXG5kaWZmIC0tZ2l0IGEvc3VicG9vbF9zaGFyZWRfbGVhay5jIGIvc3VicG9vbF9zaGFyZWRfbGVhay5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLjU4MTFlMThkN2Y4YmU3XG4tLS0gL2Rldi9udWxsXG4rKysgYi9zdWJwb29sX3NoYXJlZF9sZWFrLmNcbkBAIC0wLDAgKzEsMjkgQEBcbisjaW5jbHVkZSBcdTAwM2NzdGRpby5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjc3RkbGliLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2N1bmlzdGQuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY3N5cy9tbWFuLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NzeXMvc3RhdC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjZmNudGwuaFx1MDAzZVxuK1xuKyNkZWZpbmUgSFBBR0VfU0laRSAoMiAqIDEwMjQgKiAxMDI0KVxuK1xuK2ludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikge1xuKyAgICBpZiAoYXJnYyBcdTAwM2MgMikge1xuKyAgICAgICAgZnByaW50ZihzdGRlcnIsIFwiVXNhZ2U6ICVzIFx1MDAzY2ZpbGVfcGF0aFx1MDAzZVxcblwiLCBhcmd2WzBdKTtcbisgICAgICAgIHJldHVybiAxO1xuKyAgICB9XG4rICAgIGNvbnN0IGNoYXIgKmZpbGVfcGF0aCA9IGFyZ3ZbMV07XG4rXG4rICAgIGludCBmZCA9IG9wZW4oZmlsZV9wYXRoLCBPX0NSRUFUIHwgT19SRFdSLCAwNjY2KTtcbisgICAgaWYgKGZkIFx1MDAzYyAwKSB7IHBlcnJvcihcIm9wZW5cIik7IHJldHVybiAxOyB9XG4rXG4rICAgIHZvaWQgKmFkZHIgPSBtbWFwKE5VTEwsIDIgKiBIUEFHRV9TSVpFLCBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFLCBNQVBfU0hBUkVELCBmZCwgMCk7XG4rICAgIGlmIChhZGRyID09IE1BUF9GQUlMRUQpIHsgcGVycm9yKFwibW1hcFwiKTsgY2xvc2UoZmQpOyByZXR1cm4gMTsgfVxuK1xuKyAgICAqKHZvbGF0aWxlIGNoYXIgKilhZGRyID0gMTsgLy8gQWxsb2NhdGUgMXN0IHBhZ2Ugb25seS4gMm5kIHBhZ2UgcmVtYWlucyB1bmFsbG9jYXRlZCAoYnV0IHJlc2VydmVkKS5cbitcbisgICAgbXVubWFwKGFkZHIsIDIgKiBIUEFHRV9TSVpFKTtcbisgICAgY2xvc2UoZmQpO1xuK1xuKyAgICByZXR1cm4gMDtcbit9XG5kaWZmIC0tZ2l0IGEvc3VicG9vbF9zaGFyZWRfbGVhay5zaCBiL3N1YnBvb2xfc2hhcmVkX2xlYWsuc2hcbm5ldyBmaWxlIG1vZGUgMTAwNzU1XG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uNDZjNjIyYjE4NTU5YTBcbi0tLSAvZGV2L251bGxcbisrKyBiL3N1YnBvb2xfc2hhcmVkX2xlYWsuc2hcbkBAIC0wLDAgKzEsODYgQEBcbisjIS9iaW4vYmFzaFxuK1xuK2lmIFsgXCIkRVVJRFwiIC1uZSAwIF07IHRoZW5cbisgICAgZWNobyBcIlBsZWFzZSBydW4gYXMgcm9vdFwiXG4rICAgIGV4aXQgMVxuK2ZpXG4rXG4rTU5UX1BBVEg9XCIvdG1wL21udF9odWdldGxiX3NoYXJlZF9sZWFrXCJcbitGSUxFX1BBVEg9XCIkTU5UX1BBVEgvdGVzdF9maWxlXCJcbitcbisjIFNhdmUgb3JpZ2luYWwgdmFsdWVzXG4rb3JpZ19ucj0kKGNhdCAvc3lzL2tlcm5lbC9tbS9odWdlcGFnZXMvaHVnZXBhZ2VzLTIwNDhrQi9ucl9odWdlcGFnZXMpXG4rXG4rY2xlYW51cCgpIHtcbisgICAgZWNobyBcIkNsZWFuaW5nIHVwLi4uXCJcbisgICAgcm0gLWYgXCIkRklMRV9QQVRIXCJcbisgICAgdW1vdW50IFwiJE1OVF9QQVRIXCIgMlx1MDAzZS9kZXYvbnVsbFxuKyAgICBybWRpciBcIiRNTlRfUEFUSFwiIDJcdTAwM2UvZGV2L251bGxcbisgICAgZWNobyBcIiRvcmlnX25yXCIgXHUwMDNlIC9zeXMva2VybmVsL21tL2h1Z2VwYWdlcy9odWdlcGFnZXMtMjA0OGtCL25yX2h1Z2VwYWdlc1xuKyAgICBlY2hvIFwiQ2xlYW51cCBkb25lLlwiXG4rfVxuK3RyYXAgY2xlYW51cCBFWElUXG4rXG4rIyAxLiBTZXQgbnJfaHVnZXBhZ2VzIHRvIDJcbitlY2hvIDIgXHUwMDNlIC9zeXMva2VybmVsL21tL2h1Z2VwYWdlcy9odWdlcGFnZXMtMjA0OGtCL25yX2h1Z2VwYWdlc1xuK1xuKyMgMi4gTW91bnQgaHVnZXRsYmZzIHdpdGggbWluX3NpemU9Mk0gKDEgcGFnZSlcbitta2RpciAtcCBcIiRNTlRfUEFUSFwiXG4raWYgISBtb3VudCAtdCBodWdldGxiZnMgLW8gbWluX3NpemU9Mk0gbm9uZSBcIiRNTlRfUEFUSFwiOyB0aGVuXG4rICAgIGVjaG8gXCJGYWlsZWQgdG8gbW91bnQgaHVnZXRsYmZzXCJcbisgICAgZXhpdCAxXG4rZmlcbitcbisjIENoZWNrIHJlc3ZfaHVnZXBhZ2VzIGFmdGVyIG1vdW50IChzaG91bGQgYmUgMSlcbitpbml0aWFsX3Jlc3Y9JChjYXQgL3N5cy9rZXJuZWwvbW0vaHVnZXBhZ2VzL2h1Z2VwYWdlcy0yMDQ4a0IvcmVzdl9odWdlcGFnZXMpXG4rZWNobyBcIkluaXRpYWwgcmVzdl9odWdlcGFnZXMgKGFmdGVyIG1vdW50KTogJGluaXRpYWxfcmVzdlwiXG4raWYgWyBcIiRpbml0aWFsX3Jlc3ZcIiAtbmUgMSBdOyB0aGVuXG4rICAgIGVjaG8gXCJFUlJPUjogSW5pdGlhbCByZXN2X2h1Z2VwYWdlcyBpcyBub3QgMSFcIlxuKyAgICBleGl0IDFcbitmaVxuK1xuKyMgVmVyaWZ5IHJlcHJvZHVjZXIgYmluYXJ5IGV4aXN0c1xuK2lmIFsgISAteCAuL3N1YnBvb2xfc2hhcmVkX2xlYWsgXTsgdGhlblxuKyAgICBlY2hvIFwicmVwcm9kdWNlciBiaW5hcnkgJy4vc3VicG9vbF9zaGFyZWRfbGVhaycgbm90IGZvdW5kIG9yIG5vdCBleGVjdXRhYmxlLlwiXG4rICAgIGVjaG8gXCJQbGVhc2UgY29tcGlsZSBpdCBmaXJzdDogZ2NjIC1zdGF0aWMgLW8gc3VicG9vbF9zaGFyZWRfbGVhayBzdWJwb29sX3NoYXJlZF9sZWFrLmNcIlxuKyAgICBleGl0IDFcbitmaVxuK1xuKyMgMy4gUnVuIGhlbHBlciB0byBtYXAgNE1CLCBhbGxvY2F0ZSAyTUIsIGFuZCBjbG9zZS5cbisjIFRoaXMgY3JlYXRlcyAyIHJlc2VydmF0aW9ucywgY29uc3VtZXMgMSAoYnkgYWxsb2NhdGluZyBQYWdlIDApLlxuKyMgVGhlIHVuYWxsb2NhdGVkIFBhZ2UgMSByZXNlcnZhdGlvbiByZW1haW5zIGFjdGl2ZSBpbiB0aGUgaW5vZGUncyByZXN2X21hcC5cbitlY2hvIFwiUnVubmluZyBoZWxwZXIuLi5cIlxuKy4vc3VicG9vbF9zaGFyZWRfbGVhayBcIiRGSUxFX1BBVEhcIlxuK1xuK3Jlc3ZfYWZ0ZXJfaGVscGVyPSQoY2F0IC9zeXMva2VybmVsL21tL2h1Z2VwYWdlcy9odWdlcGFnZXMtMjA0OGtCL3Jlc3ZfaHVnZXBhZ2VzKVxuK2VjaG8gXCJyZXN2X2h1Z2VwYWdlcyBhZnRlciBoZWxwZXIgKHNob3VsZCBiZSAxKTogJHJlc3ZfYWZ0ZXJfaGVscGVyXCJcbisjIFBhZ2UgMCBpcyBhbGxvY2F0ZWQgKG5vIGxvbmdlciByZXNlcnZlZCkuIFBhZ2UgMSBpcyByZXNlcnZlZC5cbisjIFNvIHJlc3ZfaHVnZXBhZ2VzIHNob3VsZCBiZSAxLlxuK2lmIFsgXCIkcmVzdl9hZnRlcl9oZWxwZXJcIiAtbmUgMSBdOyB0aGVuXG4rICAgIGVjaG8gXCJFUlJPUjogcmVzdl9odWdlcGFnZXMgaXMgbm90IDEgYWZ0ZXIgaGVscGVyIHJ1biFcIlxuKyAgICBleGl0IDFcbitmaVxuK1xuKyMgNC4gVHJ1bmNhdGUgZmlsZSB0byAyTUIgKHJlbGVhc2VzIFBhZ2UgMSByZXNlcnZhdGlvbilcbitlY2hvIFwiVHJ1bmNhdGluZyBmaWxlIHRvIDJNQiAocmVsZWFzaW5nIDEgcGFnZSByZXNlcnZhdGlvbikuLi5cIlxuK3RydW5jYXRlIC1zIDJNIFwiJEZJTEVfUEFUSFwiXG4rXG4rIyBDaGVjayByZXN2X2h1Z2VwYWdlcyBhZnRlciB0cnVuY2F0ZS5cbisjIFNpbmNlIFBhZ2UgMCBpcyBzdGlsbCBhbGxvY2F0ZWQgKGFuZCBpbiBwYWdlIGNhY2hlKSwgYW5kIHNhdGlzZmllcyB0aGVcbisjIG1pbl9zaXplPTJNIGd1YXJhbnRlZSwgd2Ugc2hvdWxkIGhhdmUgMCByZXNlcnZhdGlvbnMgcmVtYWluaW5nLlxuKyMgSWYgdGhlIGJ1ZyBpcyBwcmVzZW50LCB0aGUgdHJ1bmNhdGUgcGF0aCB3aWxsIGluY29ycmVjdGx5IHJlc3RvcmUgdGhlXG4rIyByZXNlcnZhdGlvbiB0byB0aGUgc3VicG9vbCBhbmQgc2tpcCByZWxlYXNpbmcgaXQgZ2xvYmFsbHksIGxlYXZpbmdcbisjIHJlc3ZfaHVnZXBhZ2VzIGF0IDEuXG4rZmluYWxfcmVzdj0kKGNhdCAvc3lzL2tlcm5lbC9tbS9odWdlcGFnZXMvaHVnZXBhZ2VzLTIwNDhrQi9yZXN2X2h1Z2VwYWdlcylcbitlY2hvIFwiRmluYWwgcmVzdl9odWdlcGFnZXMgKGFmdGVyIDJNQiB0cnVuY2F0ZSk6ICRmaW5hbF9yZXN2XCJcbitcbitpZiBbIFwiJGZpbmFsX3Jlc3ZcIiAtZXEgMSBdOyB0aGVuXG4rICAgIGVjaG8gXCJSRVNVTFQ6IExFQUsgREVURUNURUQgKEZBSUwpXCJcbisgICAgZXhpdCAxXG4rZWxpZiBbIFwiJGZpbmFsX3Jlc3ZcIiAtZXEgMCBdOyB0aGVuXG4rICAgIGVjaG8gXCJSRVNVTFQ6IE5PIExFQUsgKFBBU1MpXCJcbisgICAgZXhpdCAwXG4rZWxzZVxuKyAgICBlY2hvIFwiUkVTVUxUOiBVTkVYUEVDVEVEIFNUQVRFICgkZmluYWxfcmVzdilcIlxuKyAgICBleGl0IDJcbitmaVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3RpbmcvaHVnZXRsYl9zdWJwb29sLy5naXRpZ25vcmUgYi90b29scy90ZXN0aW5nL2h1Z2V0bGJfc3VicG9vbC8uZ2l0aWdub3JlXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLjczNDhjMmM3MmYxZTExXG4tLS0gL2Rldi9udWxsXG4rKysgYi90b29scy90ZXN0aW5nL2h1Z2V0bGJfc3VicG9vbC8uZ2l0aWdub3JlXG5AQCAtMCwwICsxIEBAXG4rdGVzdF9zdWJwb29sXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9odWdldGxiX3N1YnBvb2wvTWFrZWZpbGUgYi90b29scy90ZXN0aW5nL2h1Z2V0bGJfc3VicG9vbC9NYWtlZmlsZVxubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi4xYmRiN2UyNjM1NjE0MVxuLS0tIC9kZXYvbnVsbFxuKysrIGIvdG9vbHMvdGVzdGluZy9odWdldGxiX3N1YnBvb2wvTWFrZWZpbGVcbkBAIC0wLDAgKzEsMTggQEBcbisjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4rLlBIT05ZOiBhbGwgY2xlYW4gdGVzdFxuK1xuK0NDID0gZ2NjXG4rQ0ZMQUdTID0gLVdhbGwgLU8yIC1JLi4vc2hhcmVkIC1JLiAtSS4uLy4uL2luY2x1ZGUgLUkuLi8uLi9hcmNoL3g4Ni9pbmNsdWRlIC1wdGhyZWFkXG4rS0VSTkVMX1NVQlBPT0xfSCA9IC4uLy4uLy4uL21tL2h1Z2V0bGJfc3VicG9vbC5oXG4rS0VSTkVMX1NVQlBPT0xfQyA9IC4uLy4uLy4uL21tL2h1Z2V0bGJfc3VicG9vbC5jXG4rXG4rYWxsOiB0ZXN0XG4rXG4rdGVzdF9zdWJwb29sOiB0ZXN0X3N1YnBvb2wuYyAkKEtFUk5FTF9TVUJQT09MX0MpICQoS0VSTkVMX1NVQlBPT0xfSClcbitcdCQoQ0MpICQoQ0ZMQUdTKSB0ZXN0X3N1YnBvb2wuYyAtbyB0ZXN0X3N1YnBvb2xcbitcbit0ZXN0OiB0ZXN0X3N1YnBvb2xcbitcdC4vdGVzdF9zdWJwb29sXG4rXG4rY2xlYW46XG4rXHRybSAtZiB0ZXN0X3N1YnBvb2xcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL2h1Z2V0bGJfc3VicG9vbC90ZXN0X3N1YnBvb2wuYyBiL3Rvb2xzL3Rlc3RpbmcvaHVnZXRsYl9zdWJwb29sL3Rlc3Rfc3VicG9vbC5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLjc4OTAwMjc0Y2MyNjQ3XG4tLS0gL2Rldi9udWxsXG4rKysgYi90b29scy90ZXN0aW5nL2h1Z2V0bGJfc3VicG9vbC90ZXN0X3N1YnBvb2wuY1xuQEAgLTAsMCArMSw0MDAgQEBcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuKyNpbmNsdWRlIFx1MDAzY2Fzc2VydC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjc3RkbGliLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC90eXBlcy5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvc2xhYi5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvYnVnLmhcdTAwM2VcbitcbisvKiBNb2NrZWQgVXNlcnNwYWNlIGltcGxlbWVudGF0aW9uIGZvciBLZXJuZWwgU3VicG9vbCBhbGxvY2F0aW9uIGRlcGVuZGVuY2llcyAqL1xuK3N0cnVjdCBoc3RhdGUge1xuK1x0aW50IGR1bW15O1xuK307XG4rXG4rI3VuZGVmIGt6YWxsb2Nfb2JqXG4rI3VuZGVmIGt6YWxsb2Nfb2Jqc1xuKyNkZWZpbmUga3phbGxvY19vYmooUCwgLi4uKSBtYWxsb2Moc2l6ZW9mKFApKVxuKyNkZWZpbmUga3phbGxvY19vYmpzKFAsIENPVU5ULCAuLi4pIG1hbGxvYyhzaXplb2YoUCkgKiAoQ09VTlQpKVxuK1xuKyNkZWZpbmUga2ZyZWUgZnJlZVxuKyNkZWZpbmUga21hbGxvYyBtYWxsb2NcbitcbisjZGVmaW5lIGh1Z2VfcGFnZV9zaGlmdChoKSAoMjEgKyAoMCAqICgodW5zaWduZWQgbG9uZykoaCkgXHUwMDI2IDApKSlcbisjZGVmaW5lIGh1Z2VfcGFnZV9zaXplKGgpICgxVUwgXHUwMDNjXHUwMDNjIGh1Z2VfcGFnZV9zaGlmdChoKSlcbitcbitzdGF0aWMgYm9vbCBodWdldGxiX2FjY3RfbWVtb3J5X2NhbGxlZDtcbitzdGF0aWMgc3RydWN0IGhzdGF0ZSAqaHVnZXRsYl9hY2N0X21lbW9yeV9oO1xuK3N0YXRpYyBsb25nIGh1Z2V0bGJfYWNjdF9tZW1vcnlfZGVsdGE7XG4rXG4rc3RhdGljIGludCBodWdldGxiX2FjY3RfbWVtb3J5KHN0cnVjdCBoc3RhdGUgKmgsIGxvbmcgZGVsdGEpXG4re1xuK1x0aHVnZXRsYl9hY2N0X21lbW9yeV9jYWxsZWQgPSB0cnVlO1xuK1x0aHVnZXRsYl9hY2N0X21lbW9yeV9oID0gaDtcbitcdGh1Z2V0bGJfYWNjdF9tZW1vcnlfZGVsdGEgPSBkZWx0YTtcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgdm9pZCByZXNldF9odWdldGxiX2FjY3RfbWVtb3J5X21vY2sodm9pZClcbit7XG4rXHRodWdldGxiX2FjY3RfbWVtb3J5X2NhbGxlZCA9IGZhbHNlO1xuK1x0aHVnZXRsYl9hY2N0X21lbW9yeV9oID0gTlVMTDtcbitcdGh1Z2V0bGJfYWNjdF9tZW1vcnlfZGVsdGEgPSAwO1xuK31cbitcbitzdGF0aWMgdm9pZCBhc3NlcnRfaHVnZXRsYl9hY2N0X21lbW9yeV9jYWxsZWQoc3RydWN0IGhzdGF0ZSAqaCwgbG9uZyBkZWx0YSlcbit7XG4rXHRhc3NlcnQoaHVnZXRsYl9hY2N0X21lbW9yeV9jYWxsZWQpO1xuK1x0YXNzZXJ0KGh1Z2V0bGJfYWNjdF9tZW1vcnlfaCA9PSBoKTtcbitcdGFzc2VydChodWdldGxiX2FjY3RfbWVtb3J5X2RlbHRhID09IGRlbHRhKTtcbitcbitcdHJlc2V0X2h1Z2V0bGJfYWNjdF9tZW1vcnlfbW9jaygpO1xuK31cbitcbitzdGF0aWMgdm9pZCBhc3NlcnRfaHVnZXRsYl9hY2N0X21lbW9yeV9ub3RfY2FsbGVkKHZvaWQpXG4re1xuK1x0YXNzZXJ0KCFodWdldGxiX2FjY3RfbWVtb3J5X2NhbGxlZCk7XG4rfVxuK1xuKyNpbmNsdWRlIFwiLi4vLi4vLi4vbW0vaHVnZXRsYl9zdWJwb29sLmhcIlxuKyNpbmNsdWRlIFwiLi4vLi4vLi4vbW0vaHVnZXRsYl9zdWJwb29sLmNcIlxuK1xuK3N0YXRpYyB2b2lkIHRlc3Rfc3VicG9vbF9uZXdfcHV0X25vX21pbl9saW1pdCh2b2lkKVxuK3tcbitcdHN0cnVjdCBoc3RhdGUgaDtcbitcdHN0cnVjdCBodWdlcGFnZV9zdWJwb29sICpzcG9vbDtcbitcbitcdHNwb29sID0gaHVnZXBhZ2VfbmV3X3N1YnBvb2woXHUwMDI2aCwgMTAsIC0xKTtcbitcdGFzc2VydChzcG9vbCAhPSBOVUxMKTtcbitcdGFzc2VydChzcG9vbC1cdTAwM2VtYXhfaHBhZ2VzID09IDEwKTtcbitcdGFzc2VydChzcG9vbC1cdTAwM2VtaW5faHBhZ2VzID09IC0xKTtcbitcdGFzc2VydChzcG9vbC1cdTAwM2Vyc3ZfaHBhZ2VzID09IC0xKTtcbitcdGFzc2VydChzcG9vbC1cdTAwM2Vjb3VudCA9PSAxKTtcbitcdGFzc2VydF9odWdldGxiX2FjY3RfbWVtb3J5X25vdF9jYWxsZWQoKTtcbitcbitcdGh1Z2VwYWdlX3B1dF9zdWJwb29sKHNwb29sKTtcbitcdGFzc2VydF9odWdldGxiX2FjY3RfbWVtb3J5X25vdF9jYWxsZWQoKTtcbit9XG4rXG4rc3RhdGljIHZvaWQgdGVzdF9zdWJwb29sX25ld19wdXRfd2l0aF9taW5fbGltaXQodm9pZClcbit7XG4rXHRzdHJ1Y3QgaHN0YXRlIGg7XG4rXHRzdHJ1Y3QgaHVnZXBhZ2Vfc3VicG9vbCAqc3Bvb2w7XG4rXG4rXHRzcG9vbCA9IGh1Z2VwYWdlX25ld19zdWJwb29sKFx1MDAyNmgsIDIwLCA1KTtcbitcdGFzc2VydChzcG9vbCAhPSBOVUxMKTtcbitcdGFzc2VydChzcG9vbC1cdTAwM2VtYXhfaHBhZ2VzID09IDIwKTtcbitcdGFzc2VydChzcG9vbC1cdTAwM2VtaW5faHBhZ2VzID09IDUpO1xuK1x0YXNzZXJ0KHNwb29sLVx1MDAzZXJzdl9ocGFnZXMgPT0gNSk7XG4rXHRhc3NlcnQoc3Bvb2wtXHUwMDNlY291bnQgPT0gMSk7XG4rXHRhc3NlcnRfaHVnZXRsYl9hY2N0X21lbW9yeV9jYWxsZWQoXHUwMDI2aCwgNSk7XG4rXG4rXHRodWdlcGFnZV9wdXRfc3VicG9vbChzcG9vbCk7XG4rXHRhc3NlcnRfaHVnZXRsYl9hY2N0X21lbW9yeV9jYWxsZWQoXHUwMDI2aCwgLTUpO1xuK31cbitcbitzdGF0aWMgdm9pZCB0ZXN0X3N1YnBvb2xfZ2V0X3BhZ2VzX2JlbG93X21pbih2b2lkKVxuK3tcbitcdHN0cnVjdCBoc3RhdGUgaDtcbitcdHN0cnVjdCBodWdlcGFnZV9zdWJwb29sICpzcG9vbDtcbitcdGxvbmcgcmV0O1xuK1xuK1x0LyogTGV0J3MgaW5pdGlhbGl6ZTogbWluX2hwYWdlcyA9IDEwLCB1c2VkX2hwYWdlcyA9IDksIHJzdl9ocGFnZXMgPSAxICovXG4rXHRzcG9vbCA9IGh1Z2VwYWdlX25ld19zdWJwb29sKFx1MDAyNmgsIC0xLCAxMCk7XG4rXHRhc3NlcnRfaHVnZXRsYl9hY2N0X21lbW9yeV9jYWxsZWQoXHUwMDI2aCwgMTApO1xuK1xuK1x0cmV0ID0gaHVnZXBhZ2Vfc3VicG9vbF9nZXRfcGFnZXMoc3Bvb2wsIDkpO1xuK1x0YXNzZXJ0KHJldCA9PSAwKTtcbitcdGFzc2VydChzcG9vbC1cdTAwM2V1c2VkX2hwYWdlcyA9PSA5KTtcbitcdGFzc2VydChzcG9vbC1cdTAwM2Vyc3ZfaHBhZ2VzID09IDEpO1xuK1xuK1x0LyogSW52b2tlIEdldCAoQ29uc3VtZXMgdGhlIHJlbWFpbmluZyAxIHN1YnBvb2wgcmVzZXJ2ZSEpICovXG4rXHRyZXQgPSBodWdlcGFnZV9zdWJwb29sX2dldF9wYWdlcyhzcG9vbCwgMSk7XG4rXHRhc3NlcnQocmV0ID09IDApOyAvKiBDb3ZlcmVkIGJ5IHN1YnBvb2wgcmVzZXJ2ZSEgKi9cbitcdGFzc2VydChzcG9vbC1cdTAwM2V1c2VkX2hwYWdlcyA9PSAxMCk7XG4rXHRhc3NlcnQoc3Bvb2wtXHUwMDNlcnN2X2hwYWdlcyA9PSAwKTtcbitcbitcdC8qIEludm9rZSBQdXQgKFJlcGxlbmlzaGVzIHRoZSBzdWJwb29sIHJlc2VydmUhKSAqL1xuK1x0cmV0ID0gaHVnZXBhZ2Vfc3VicG9vbF9wdXRfcGFnZXMoc3Bvb2wsIDEpO1xuK1x0YXNzZXJ0KHJldCA9PSAwKTsgLyogS2VwdCBieSBzdWJwb29sIHJlc2VydmUhICovXG4rXHRhc3NlcnQoc3Bvb2wtXHUwMDNldXNlZF9ocGFnZXMgPT0gOSk7XG4rXHRhc3NlcnQoc3Bvb2wtXHUwMDNlcnN2X2hwYWdlcyA9PSAxKTtcbitcbitcdC8qIENsZWFudXA6IFJldHVybiB1c2VkX2hwYWdlcyB0byAwIHNvIHRoZSBzdWJwb29sIGZyZWVzIHN5bW1ldHJpY2FsbHkhICovXG4rXHRodWdlcGFnZV9zdWJwb29sX3B1dF9wYWdlcyhzcG9vbCwgOSk7XG4rXHRodWdlcGFnZV9wdXRfc3VicG9vbChzcG9vbCk7XG4rXHRhc3NlcnRfaHVnZXRsYl9hY2N0X21lbW9yeV9jYWxsZWQoXHUwMDI2aCwgLTEwKTtcbit9XG4rXG4rc3RhdGljIHZvaWQgdGVzdF9zdWJwb29sX2dldF9wYWdlc19jcm9zc2luZ19taW4odm9pZClcbit7XG4rXHRzdHJ1Y3QgaHN0YXRlIGg7XG4rXHRzdHJ1Y3QgaHVnZXBhZ2Vfc3VicG9vbCAqc3Bvb2w7XG4rXHRsb25nIHJldDtcbitcbitcdC8qIExldCdzIGluaXRpYWxpemU6IG1pbl9ocGFnZXMgPSAxMCwgdXNlZF9ocGFnZXMgPSAxMCwgcnN2X2hwYWdlcyA9IDAgKi9cbitcdHNwb29sID0gaHVnZXBhZ2VfbmV3X3N1YnBvb2woXHUwMDI2aCwgLTEsIDEwKTtcbitcdGFzc2VydF9odWdldGxiX2FjY3RfbWVtb3J5X2NhbGxlZChcdTAwMjZoLCAxMCk7XG4rXG4rXHRodWdlcGFnZV9zdWJwb29sX2dldF9wYWdlcyhzcG9vbCwgMTApO1xuK1x0YXNzZXJ0KHNwb29sLVx1MDAzZXVzZWRfaHBhZ2VzID09IDEwKTtcbitcdGFzc2VydChzcG9vbC1cdTAwM2Vyc3ZfaHBhZ2VzID09IDApO1xuK1xuK1x0LyogSW52b2tlIEdldCAoVHJpZ2dlcnMgYSByZXF1ZXN0IGZvciBhIEdsb2JhbCBCdWRkeS9TdXJwbHVzIHBhZ2UhKSAqL1xuK1x0cmV0ID0gaHVnZXBhZ2Vfc3VicG9vbF9nZXRfcGFnZXMoc3Bvb2wsIDEpO1xuK1x0YXNzZXJ0KHJldCA9PSAxKTsgLyogUmVxdWlyZXMgZ2xvYmFsIHBhZ2UhICovXG4rXHRhc3NlcnQoc3Bvb2wtXHUwMDNldXNlZF9ocGFnZXMgPT0gMTEpO1xuK1x0YXNzZXJ0KHNwb29sLVx1MDAzZXJzdl9ocGFnZXMgPT0gMCk7XG4rXG4rXHQvKiBJbnZva2UgUHV0IChBYm92ZSBtaW5pbXVtLCBzbyBpdCByZWxlYXNlcyB0aGUgcGFnZSB0byB0aGUgR2xvYmFsIFBvb2whKSAqL1xuK1x0cmV0ID0gaHVnZXBhZ2Vfc3VicG9vbF9wdXRfcGFnZXMoc3Bvb2wsIDEpO1xuK1x0YXNzZXJ0KHJldCA9PSAxKTsgLyogRHJvcHBlZCB0byBnbG9iYWwgcG9vbCEgKi9cbitcdGFzc2VydChzcG9vbC1cdTAwM2V1c2VkX2hwYWdlcyA9PSAxMCk7XG4rXHRhc3NlcnQoc3Bvb2wtXHUwMDNlcnN2X2hwYWdlcyA9PSAwKTtcbitcbitcdC8qIENsZWFudXAgKi9cbitcdGh1Z2VwYWdlX3N1YnBvb2xfcHV0X3BhZ2VzKHNwb29sLCAxMCk7XG4rXHRodWdlcGFnZV9wdXRfc3VicG9vbChzcG9vbCk7XG4rXHRhc3NlcnRfaHVnZXRsYl9hY2N0X21lbW9yeV9jYWxsZWQoXHUwMDI2aCwgLTEwKTtcbit9XG4rXG4rc3RhdGljIHZvaWQgdGVzdF9zdWJwb29sX2dldF9wYWdlc19jcm9zc2luZ19taW5fbXVsdGkodm9pZClcbit7XG4rXHRzdHJ1Y3QgaHN0YXRlIGg7XG4rXHRzdHJ1Y3QgaHVnZXBhZ2Vfc3VicG9vbCAqc3Bvb2w7XG4rXHRsb25nIHJldDtcbitcbitcdC8qIFNjZW5hcmlvIDE6IENyb3NzaW5nIGVudGlyZWx5IGludG8gc3VycGx1cyB0ZXJyaXRvcnkgYnkgYSBkZWx0YSBcdTAwM2UgMSAqL1xuK1x0LyogTGV0J3MgaW5pdGlhbGl6ZTogbWluX2hwYWdlcyA9IDEwLCB1c2VkX2hwYWdlcyA9IDgsIHJzdl9ocGFnZXMgPSAyICovXG4rXHRzcG9vbCA9IGh1Z2VwYWdlX25ld19zdWJwb29sKFx1MDAyNmgsIC0xLCAxMCk7XG4rXHRhc3NlcnRfaHVnZXRsYl9hY2N0X21lbW9yeV9jYWxsZWQoXHUwMDI2aCwgMTApO1xuK1xuK1x0cmV0ID0gaHVnZXBhZ2Vfc3VicG9vbF9nZXRfcGFnZXMoc3Bvb2wsIDgpO1xuK1x0YXNzZXJ0KHJldCA9PSAwKTtcbitcdGFzc2VydChzcG9vbC1cdTAwM2V1c2VkX2hwYWdlcyA9PSA4KTtcbitcdGFzc2VydChzcG9vbC1cdTAwM2Vyc3ZfaHBhZ2VzID09IDIpO1xuK1xuK1x0LyogSW52b2tlIEdldCB3aXRoIGRlbHRhID0gNSAoQ3Jvc3NlcyBtaW4gbGltaXQgb2YgMTAgdXAgdG8gMTMpICovXG4rXHRyZXQgPSBodWdlcGFnZV9zdWJwb29sX2dldF9wYWdlcyhzcG9vbCwgNSk7XG4rXHRhc3NlcnQocmV0ID09IDMpOyAvKiAoOCArIDUpIC0gMTAgPSAzIGdsb2JhbCBwYWdlcyByZXF1aXJlZCEgKi9cbitcdGFzc2VydChzcG9vbC1cdTAwM2V1c2VkX2hwYWdlcyA9PSAxMyk7XG4rXHRhc3NlcnQoc3Bvb2wtXHUwMDNlcnN2X2hwYWdlcyA9PSAwKTtcbitcbitcdC8qIEludm9rZSBQdXQgd2l0aCBkZWx0YSA9IDUgKERyb3BzIGZyb20gMTMgZG93biB0byA4KSAqL1xuK1x0cmV0ID0gaHVnZXBhZ2Vfc3VicG9vbF9wdXRfcGFnZXMoc3Bvb2wsIDUpO1xuK1x0YXNzZXJ0KHJldCA9PSAzKTsgLyogMyBzdXJwbHVzIHBhZ2VzIHJlbGVhc2VkIHRvIHRoZSBnbG9iYWwgcG9vbCEgKi9cbitcdGFzc2VydChzcG9vbC1cdTAwM2V1c2VkX2hwYWdlcyA9PSA4KTtcbitcdGFzc2VydChzcG9vbC1cdTAwM2Vyc3ZfaHBhZ2VzID09IDIpOyAvKiAyIHN1YnBvb2wgcmVzZXJ2ZXMgcGVyZmVjdGx5IHJlc3RvcmVkISAqL1xuK1xuK1x0LyogU2NlbmFyaW8gMjogTGFuZGluZyBleGFjdGx5IG9uIHRoZSBtaW5faHBhZ2VzIGJvdW5kYXJ5IHdpdGggZGVsdGEgXHUwMDNlIDEgKi9cbitcdHJldCA9IGh1Z2VwYWdlX3N1YnBvb2xfZ2V0X3BhZ2VzKHNwb29sLCAyKTtcbitcdGFzc2VydChyZXQgPT0gMCk7IC8qIFBlcmZlY3RseSBjb3ZlcmVkIGJ5IHJlbWFpbmluZyAyIHN1YnBvb2wgcmVzZXJ2ZXMhICovXG4rXHRhc3NlcnQoc3Bvb2wtXHUwMDNldXNlZF9ocGFnZXMgPT0gMTApO1xuK1x0YXNzZXJ0KHNwb29sLVx1MDAzZXJzdl9ocGFnZXMgPT0gMCk7XG4rXG4rXHRyZXQgPSBodWdlcGFnZV9zdWJwb29sX3B1dF9wYWdlcyhzcG9vbCwgMik7XG4rXHRhc3NlcnQocmV0ID09IDApOyAvKiBTd2FsbG93ZWQgcGVyZmVjdGx5IHRvIHJlcGxlbmlzaCB0aGUgMiBzdWJwb29sIHJlc2VydmVzISAqL1xuK1x0YXNzZXJ0KHNwb29sLVx1MDAzZXVzZWRfaHBhZ2VzID09IDgpO1xuK1x0YXNzZXJ0KHNwb29sLVx1MDAzZXJzdl9ocGFnZXMgPT0gMik7XG4rXG4rXHQvKiBDbGVhbnVwICovXG4rXHRodWdlcGFnZV9zdWJwb29sX3B1dF9wYWdlcyhzcG9vbCwgOCk7XG4rXHRodWdlcGFnZV9wdXRfc3VicG9vbChzcG9vbCk7XG4rXHRhc3NlcnRfaHVnZXRsYl9hY2N0X21lbW9yeV9jYWxsZWQoXHUwMDI2aCwgLTEwKTtcbit9XG4rXG4rc3RhdGljIHZvaWQgdGVzdF9zdWJwb29sX2dldF9wYWdlc19tYXhfbGltaXQodm9pZClcbit7XG4rXHRzdHJ1Y3QgaHN0YXRlIGg7XG4rXHRzdHJ1Y3QgaHVnZXBhZ2Vfc3VicG9vbCAqc3Bvb2w7XG4rXHRsb25nIHJldDtcbitcbitcdHNwb29sID0gaHVnZXBhZ2VfbmV3X3N1YnBvb2woXHUwMDI2aCwgNSwgLTEpO1xuK1x0YXNzZXJ0X2h1Z2V0bGJfYWNjdF9tZW1vcnlfbm90X2NhbGxlZCgpO1xuK1xuK1x0cmV0ID0gaHVnZXBhZ2Vfc3VicG9vbF9nZXRfcGFnZXMoc3Bvb2wsIDUpO1xuK1x0YXNzZXJ0KHJldCA9PSA1KTtcbitcdGFzc2VydChzcG9vbC1cdTAwM2V1c2VkX2hwYWdlcyA9PSA1KTtcbitcdGFzc2VydChzcG9vbC1cdTAwM2Vyc3ZfaHBhZ2VzID09IC0xKTtcbitcbitcdC8qIEludm9rZSBHZXQgKFNob3VsZCB0cmlnZ2VyIC1FTk9NRU0gZHVlIHRvIG1heCBjYXAgbGltaXQgZXhjZWVkZWQhKSAqL1xuK1x0cmV0ID0gaHVnZXBhZ2Vfc3VicG9vbF9nZXRfcGFnZXMoc3Bvb2wsIDEpO1xuK1x0YXNzZXJ0KHJldCA9PSAtRU5PTUVNKTtcbitcdGFzc2VydChzcG9vbC1cdTAwM2V1c2VkX2hwYWdlcyA9PSA1KTsgLyogVW5jaGFuZ2VkICovXG4rXG4rXHQvKiBDbGVhbnVwICovXG4rXHRodWdlcGFnZV9zdWJwb29sX3B1dF9wYWdlcyhzcG9vbCwgNSk7XG4rXHRodWdlcGFnZV9wdXRfc3VicG9vbChzcG9vbCk7XG4rXHRhc3NlcnRfaHVnZXRsYl9hY2N0X21lbW9yeV9ub3RfY2FsbGVkKCk7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIHRlc3Rfc3VicG9vbF9nZXRfcGFnZXNfbm9fbGltaXRzKHZvaWQpXG4re1xuK1x0c3RydWN0IGhzdGF0ZSBoO1xuK1x0c3RydWN0IGh1Z2VwYWdlX3N1YnBvb2wgKnNwb29sO1xuK1x0bG9uZyByZXQ7XG4rXG4rXHRzcG9vbCA9IGh1Z2VwYWdlX25ld19zdWJwb29sKFx1MDAyNmgsIC0xLCAtMSk7XG4rXHRhc3NlcnRfaHVnZXRsYl9hY2N0X21lbW9yeV9ub3RfY2FsbGVkKCk7XG4rXG4rXHRodWdlcGFnZV9zdWJwb29sX2dldF9wYWdlcyhzcG9vbCwgNSk7XG4rXHRhc3NlcnQoc3Bvb2wtXHUwMDNldXNlZF9ocGFnZXMgPT0gNSk7XG4rXG4rXHQvKiBJbnZva2UgR2V0IChTdXJwbHVzIEdsb2JhbCBUZXJyaXRvcnkpICovXG4rXHRyZXQgPSBodWdlcGFnZV9zdWJwb29sX2dldF9wYWdlcyhzcG9vbCwgMik7XG4rXHRhc3NlcnQocmV0ID09IDIpO1xuK1x0YXNzZXJ0KHNwb29sLVx1MDAzZXVzZWRfaHBhZ2VzID09IDcpO1xuK1xuK1x0LyogSW52b2tlIFB1dCAqL1xuK1x0cmV0ID0gaHVnZXBhZ2Vfc3VicG9vbF9wdXRfcGFnZXMoc3Bvb2wsIDIpO1xuK1x0YXNzZXJ0KHJldCA9PSAyKTtcbitcdGFzc2VydChzcG9vbC1cdTAwM2V1c2VkX2hwYWdlcyA9PSA1KTtcbitcbitcdC8qIENsZWFudXAgKi9cbitcdGh1Z2VwYWdlX3N1YnBvb2xfcHV0X3BhZ2VzKHNwb29sLCA1KTtcbitcdGh1Z2VwYWdlX3B1dF9zdWJwb29sKHNwb29sKTtcbitcdGFzc2VydF9odWdldGxiX2FjY3RfbWVtb3J5X25vdF9jYWxsZWQoKTtcbit9XG4rXG4rc3RhdGljIHZvaWQgdGVzdF9zdWJwb29sX2ZyZWVfaHBhZ2VzKHZvaWQpXG4re1xuK1x0c3RydWN0IGhzdGF0ZSBoO1xuK1x0c3RydWN0IGh1Z2VwYWdlX3N1YnBvb2wgKnNwb29sO1xuK1xuK1x0LyogVGVzdCB0aGF0IGZyZWVfaHBhZ2VzIHdpdGggTk8gbWluX3NpemUgd29ya3MgcGVyZmVjdGx5ICovXG4rXHRzcG9vbCA9IGh1Z2VwYWdlX25ld19zdWJwb29sKFx1MDAyNmgsIDE1LCAtMSk7XG4rXHRodWdlcGFnZV9zdWJwb29sX2dldF9wYWdlcyhzcG9vbCwgMyk7XG4rXHRhc3NlcnQoaHVnZXBhZ2Vfc3VicG9vbF9mcmVlX2hwYWdlcyhzcG9vbCkgPT0gMTIpO1xuK1x0aHVnZXBhZ2Vfc3VicG9vbF9wdXRfcGFnZXMoc3Bvb2wsIDMpO1xuK1x0aHVnZXBhZ2VfcHV0X3N1YnBvb2woc3Bvb2wpO1xuK1xuK1x0LyogVGVzdCB0aGF0IGZyZWVfaHBhZ2VzIHdpdGggYSBtaW5fc2l6ZSBjb25maWd1cmVkIGlzIENPTVBMRVRFTFkgVU5BRkZFQ1RFRCBieSBpdCAqL1xuK1x0c3Bvb2wgPSBodWdlcGFnZV9uZXdfc3VicG9vbChcdTAwMjZoLCAxNSwgNSk7XG4rXHRhc3NlcnRfaHVnZXRsYl9hY2N0X21lbW9yeV9jYWxsZWQoXHUwMDI2aCwgNSk7XG4rXHRodWdlcGFnZV9zdWJwb29sX2dldF9wYWdlcyhzcG9vbCwgMyk7XG4rXHRhc3NlcnQoaHVnZXBhZ2Vfc3VicG9vbF9mcmVlX2hwYWdlcyhzcG9vbCkgPT0gMTIpOyAvKiBTaG91bGQgc3RpbGwgYmUgMTUgLSAzID0gMTIhICovXG4rXHRodWdlcGFnZV9zdWJwb29sX3B1dF9wYWdlcyhzcG9vbCwgMyk7XG4rXHRodWdlcGFnZV9wdXRfc3VicG9vbChzcG9vbCk7XG4rXHRhc3NlcnRfaHVnZXRsYl9hY2N0X21lbW9yeV9jYWxsZWQoXHUwMDI2aCwgLTUpO1xuK1xuK1x0c3Bvb2wgPSBodWdlcGFnZV9uZXdfc3VicG9vbChcdTAwMjZoLCAtMSwgLTEpO1xuK1x0aHVnZXBhZ2Vfc3VicG9vbF9nZXRfcGFnZXMoc3Bvb2wsIDMpO1xuK1x0YXNzZXJ0KGh1Z2VwYWdlX3N1YnBvb2xfZnJlZV9ocGFnZXMoc3Bvb2wpID09IC0xKTtcbitcdGh1Z2VwYWdlX3N1YnBvb2xfcHV0X3BhZ2VzKHNwb29sLCAzKTtcbitcdGh1Z2VwYWdlX3B1dF9zdWJwb29sKHNwb29sKTtcbitcbitcdC8qIFRlc3QgdGhhdCBmcmVlX2hwYWdlcyB3aXRoIGEgbWluX3NpemUgY29uZmlndXJlZCBhbmQgTk8gbWF4IHNpemUgcmV0dXJucyAtMSAqL1xuK1x0c3Bvb2wgPSBodWdlcGFnZV9uZXdfc3VicG9vbChcdTAwMjZoLCAtMSwgNSk7XG4rXHRhc3NlcnRfaHVnZXRsYl9hY2N0X21lbW9yeV9jYWxsZWQoXHUwMDI2aCwgNSk7XG4rXHRodWdlcGFnZV9zdWJwb29sX2dldF9wYWdlcyhzcG9vbCwgMyk7XG4rXHRhc3NlcnQoaHVnZXBhZ2Vfc3VicG9vbF9mcmVlX2hwYWdlcyhzcG9vbCkgPT0gLTEpO1xuK1x0aHVnZXBhZ2Vfc3VicG9vbF9wdXRfcGFnZXMoc3Bvb2wsIDMpO1xuK1x0aHVnZXBhZ2VfcHV0X3N1YnBvb2woc3Bvb2wpO1xuK1x0YXNzZXJ0X2h1Z2V0bGJfYWNjdF9tZW1vcnlfY2FsbGVkKFx1MDAyNmgsIC01KTtcbitcbitcdHNwb29sID0gaHVnZXBhZ2VfbmV3X3N1YnBvb2woXHUwMDI2aCwgMywgLTEpO1xuK1x0aHVnZXBhZ2Vfc3VicG9vbF9nZXRfcGFnZXMoc3Bvb2wsIDMpO1xuK1x0YXNzZXJ0KGh1Z2VwYWdlX3N1YnBvb2xfZnJlZV9ocGFnZXMoc3Bvb2wpID09IDApO1xuK1x0aHVnZXBhZ2Vfc3VicG9vbF9wdXRfcGFnZXMoc3Bvb2wsIDMpO1xuK1x0aHVnZXBhZ2VfcHV0X3N1YnBvb2woc3Bvb2wpO1xuK31cbitcbitzdGF0aWMgdm9pZCB0ZXN0X3N1YnBvb2xfbWF4X2hwYWdlcyh2b2lkKVxuK3tcbitcdHN0cnVjdCBoc3RhdGUgaDtcbitcdHN0cnVjdCBodWdlcGFnZV9zdWJwb29sICpzcG9vbDtcbitcbitcdHNwb29sID0gaHVnZXBhZ2VfbmV3X3N1YnBvb2woXHUwMDI2aCwgMTIzLCAtMSk7XG4rXHRhc3NlcnQoaHVnZXBhZ2Vfc3VicG9vbF9tYXhfaHBhZ2VzKHNwb29sKSA9PSAxMjMpO1xuK1x0aHVnZXBhZ2VfcHV0X3N1YnBvb2woc3Bvb2wpO1xuK1xuK1x0LyogVGVzdCB0aGF0IG1heF9ocGFnZXMgd2l0aCBhIG1pbl9zaXplIGNvbmZpZ3VyZWQgaXMgQ09NUExFVEVMWSBVTkFGRkVDVEVEIGJ5IGl0ICovXG4rXHRzcG9vbCA9IGh1Z2VwYWdlX25ld19zdWJwb29sKFx1MDAyNmgsIDEyMywgNSk7XG4rXHRhc3NlcnRfaHVnZXRsYl9hY2N0X21lbW9yeV9jYWxsZWQoXHUwMDI2aCwgNSk7XG4rXHRhc3NlcnQoaHVnZXBhZ2Vfc3VicG9vbF9tYXhfaHBhZ2VzKHNwb29sKSA9PSAxMjMpO1xuK1x0aHVnZXBhZ2VfcHV0X3N1YnBvb2woc3Bvb2wpO1xuK1x0YXNzZXJ0X2h1Z2V0bGJfYWNjdF9tZW1vcnlfY2FsbGVkKFx1MDAyNmgsIC01KTtcbitcbitcdHNwb29sID0gaHVnZXBhZ2VfbmV3X3N1YnBvb2woXHUwMDI2aCwgLTEsIC0xKTtcbitcdGFzc2VydChodWdlcGFnZV9zdWJwb29sX21heF9ocGFnZXMoc3Bvb2wpID09IC0xKTtcbitcdGh1Z2VwYWdlX3B1dF9zdWJwb29sKHNwb29sKTtcbitcbitcdHNwb29sID0gaHVnZXBhZ2VfbmV3X3N1YnBvb2woXHUwMDI2aCwgLTEsIDUpO1xuK1x0YXNzZXJ0X2h1Z2V0bGJfYWNjdF9tZW1vcnlfY2FsbGVkKFx1MDAyNmgsIDUpO1xuK1x0YXNzZXJ0KGh1Z2VwYWdlX3N1YnBvb2xfbWF4X2hwYWdlcyhzcG9vbCkgPT0gLTEpO1xuK1x0aHVnZXBhZ2VfcHV0X3N1YnBvb2woc3Bvb2wpO1xuK1x0YXNzZXJ0X2h1Z2V0bGJfYWNjdF9tZW1vcnlfY2FsbGVkKFx1MDAyNmgsIC01KTtcbitcbitcdHNwb29sID0gaHVnZXBhZ2VfbmV3X3N1YnBvb2woXHUwMDI2aCwgMCwgLTEpO1xuK1x0YXNzZXJ0KGh1Z2VwYWdlX3N1YnBvb2xfbWF4X2hwYWdlcyhzcG9vbCkgPT0gMCk7XG4rXHRodWdlcGFnZV9wdXRfc3VicG9vbChzcG9vbCk7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIHRlc3Rfc3VicG9vbF9tYXhfc2l6ZSh2b2lkKVxuK3tcbitcdHN0cnVjdCBoc3RhdGUgaDtcbitcdHN0cnVjdCBodWdlcGFnZV9zdWJwb29sICpzcG9vbDtcbitcbitcdHNwb29sID0gaHVnZXBhZ2VfbmV3X3N1YnBvb2woXHUwMDI2aCwgMTAsIC0xKTtcbitcdGFzc2VydChodWdlcGFnZV9zdWJwb29sX21heF9zaXplKHNwb29sKSA9PSAoMTBVTEwgXHUwMDNjXHUwMDNjIDIxKSk7XG4rXHRodWdlcGFnZV9wdXRfc3VicG9vbChzcG9vbCk7XG4rXG4rXHQvKiBUZXN0IHRoYXQgbWF4X3NpemUgd2l0aCBhIG1pbl9zaXplIGNvbmZpZ3VyZWQgaXMgQ09NUExFVEVMWSBVTkFGRkVDVEVEIGJ5IGl0ICovXG4rXHRzcG9vbCA9IGh1Z2VwYWdlX25ld19zdWJwb29sKFx1MDAyNmgsIDEwLCA1KTtcbitcdGFzc2VydF9odWdldGxiX2FjY3RfbWVtb3J5X2NhbGxlZChcdTAwMjZoLCA1KTtcbitcdGFzc2VydChodWdlcGFnZV9zdWJwb29sX21heF9zaXplKHNwb29sKSA9PSAoMTBVTEwgXHUwMDNjXHUwMDNjIDIxKSk7XG4rXHRodWdlcGFnZV9wdXRfc3VicG9vbChzcG9vbCk7XG4rXHRhc3NlcnRfaHVnZXRsYl9hY2N0X21lbW9yeV9jYWxsZWQoXHUwMDI2aCwgLTUpO1xuK1xuK1x0c3Bvb2wgPSBodWdlcGFnZV9uZXdfc3VicG9vbChcdTAwMjZoLCAtMSwgLTEpO1xuK1x0YXNzZXJ0KGh1Z2VwYWdlX3N1YnBvb2xfbWF4X3NpemUoc3Bvb2wpID09IC0xVUxMKTtcbitcdGh1Z2VwYWdlX3B1dF9zdWJwb29sKHNwb29sKTtcbitcbitcdHNwb29sID0gaHVnZXBhZ2VfbmV3X3N1YnBvb2woXHUwMDI2aCwgMCwgLTEpO1xuK1x0YXNzZXJ0KGh1Z2VwYWdlX3N1YnBvb2xfbWF4X3NpemUoc3Bvb2wpID09IDBVTEwpO1xuK1x0aHVnZXBhZ2VfcHV0X3N1YnBvb2woc3Bvb2wpO1xuK31cbitcbitzdGF0aWMgdm9pZCB0ZXN0X3N1YnBvb2xfbWluX3NpemUodm9pZClcbit7XG4rXHRzdHJ1Y3QgaHN0YXRlIGg7XG4rXHRzdHJ1Y3QgaHVnZXBhZ2Vfc3VicG9vbCAqc3Bvb2w7XG4rXG4rXHRzcG9vbCA9IGh1Z2VwYWdlX25ld19zdWJwb29sKFx1MDAyNmgsIC0xLCA1KTtcbitcdGFzc2VydF9odWdldGxiX2FjY3RfbWVtb3J5X2NhbGxlZChcdTAwMjZoLCA1KTtcbitcdGFzc2VydChodWdlcGFnZV9zdWJwb29sX21pbl9zaXplKHNwb29sKSA9PSAoNVVMTCBcdTAwM2NcdTAwM2MgMjEpKTtcbitcdGh1Z2VwYWdlX3B1dF9zdWJwb29sKHNwb29sKTtcbitcdGFzc2VydF9odWdldGxiX2FjY3RfbWVtb3J5X2NhbGxlZChcdTAwMjZoLCAtNSk7XG4rXG4rXHQvKiBUZXN0IHRoYXQgbWluX3NpemUgd2l0aCBhIG1heF9zaXplIGNvbmZpZ3VyZWQgaXMgQ09NUExFVEVMWSBVTkFGRkVDVEVEIGJ5IGl0ICovXG4rXHRzcG9vbCA9IGh1Z2VwYWdlX25ld19zdWJwb29sKFx1MDAyNmgsIDIwLCA1KTtcbitcdGFzc2VydF9odWdldGxiX2FjY3RfbWVtb3J5X2NhbGxlZChcdTAwMjZoLCA1KTtcbitcdGFzc2VydChodWdlcGFnZV9zdWJwb29sX21pbl9zaXplKHNwb29sKSA9PSAoNVVMTCBcdTAwM2NcdTAwM2MgMjEpKTtcbitcdGh1Z2VwYWdlX3B1dF9zdWJwb29sKHNwb29sKTtcbitcdGFzc2VydF9odWdldGxiX2FjY3RfbWVtb3J5X2NhbGxlZChcdTAwMjZoLCAtNSk7XG4rXG4rXHRzcG9vbCA9IGh1Z2VwYWdlX25ld19zdWJwb29sKFx1MDAyNmgsIC0xLCAtMSk7XG4rXHRhc3NlcnQoaHVnZXBhZ2Vfc3VicG9vbF9taW5fc2l6ZShzcG9vbCkgPT0gLTFVTEwpO1xuK1x0aHVnZXBhZ2VfcHV0X3N1YnBvb2woc3Bvb2wpO1xuK1xuK1x0c3Bvb2wgPSBodWdlcGFnZV9uZXdfc3VicG9vbChcdTAwMjZoLCAtMSwgMCk7XG4rXHRhc3NlcnRfaHVnZXRsYl9hY2N0X21lbW9yeV9jYWxsZWQoXHUwMDI2aCwgMCk7XG4rXHRhc3NlcnQoaHVnZXBhZ2Vfc3VicG9vbF9taW5fc2l6ZShzcG9vbCkgPT0gMFVMTCk7XG4rXHRodWdlcGFnZV9wdXRfc3VicG9vbChzcG9vbCk7XG4rXHRhc3NlcnRfaHVnZXRsYl9hY2N0X21lbW9yeV9jYWxsZWQoXHUwMDI2aCwgMCk7XG4rfVxuK1xuK2ludCBtYWluKHZvaWQpXG4re1xuK1x0dGVzdF9zdWJwb29sX25ld19wdXRfbm9fbWluX2xpbWl0KCk7XG4rXHR0ZXN0X3N1YnBvb2xfbmV3X3B1dF93aXRoX21pbl9saW1pdCgpO1xuK1x0dGVzdF9zdWJwb29sX2dldF9wYWdlc19iZWxvd19taW4oKTtcbitcdHRlc3Rfc3VicG9vbF9nZXRfcGFnZXNfY3Jvc3NpbmdfbWluKCk7XG4rXHR0ZXN0X3N1YnBvb2xfZ2V0X3BhZ2VzX2Nyb3NzaW5nX21pbl9tdWx0aSgpO1xuK1x0dGVzdF9zdWJwb29sX2dldF9wYWdlc19tYXhfbGltaXQoKTtcbitcdHRlc3Rfc3VicG9vbF9nZXRfcGFnZXNfbm9fbGltaXRzKCk7XG4rXHR0ZXN0X3N1YnBvb2xfZnJlZV9ocGFnZXMoKTtcbitcdHRlc3Rfc3VicG9vbF9tYXhfaHBhZ2VzKCk7XG4rXHR0ZXN0X3N1YnBvb2xfbWF4X3NpemUoKTtcbitcdHRlc3Rfc3VicG9vbF9taW5fc2l6ZSgpO1xuK1xuK1x0cmV0dXJuIDA7XG4rfVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjFUMTg6MDg6MTcuODUyNTE5NTJaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4MzQ3NjE2NTQ1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgSHVnZXRsYmZzIGFuZCBNZW1jZyBQYXRjaCBTZXJpZXMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHNlcmllcywgYW5kIGl0J3MgbWFraW5nIHNvbWUgcHJldHR5IHNpZ25pZmljYW50IGNoYW5nZXMgdG8gdGhlIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQsIHNwZWNpZmljYWxseSBpbiB0aGUgcmVhbG1zIG9mIGh1Z2V0bGJmcyBhbmQgbWVtY2cuIE15IGluaXRpYWwgaW1wcmVzc2lvbiBpcyB0aGF0IGl0J3MgcmVmYWN0b3Jpbmcgc29tZSBleGlzdGluZyBsb2dpYyBhbmQgaW50cm9kdWNpbmcgbmV3IG1lbWNnIGludGVncmF0aW9uIGZvciBodWdlIHBhZ2VzLlxuXG5TcGVjaWZpY2FsbHksIGl0IGxvb2tzIGxpa2UgYGh1Z2VwYWdlX3N1YnBvb2xgIGxvZ2ljIGlzIGJlaW5nIGV4dHJhY3RlZCBpbnRvIGl0cyBvd24gZmlsZSwgYG1tL2h1Z2V0bGJfc3VicG9vbC5jYC4gVGhpcyBzdWdnZXN0cyBhbiBlZmZvcnQgdG8gbW9kdWxhcml6ZSB0aGUgY29kZSwgd2hpY2ggaXMgYWx3YXlzIGEgZ29vZCBzaWduIGZvciBtYWludGFpbmFiaWxpdHkuIFRoZSBjb3JlIG9mIHRoZSBmdW5jdGlvbmFsIGNoYW5nZSBzZWVtcyB0byByZXZvbHZlIGFyb3VuZCBgYWxsb2NfaHVnZXRsYl9mb2xpb2AuIFRoaXMgZnVuY3Rpb24gaXMgbm93IHVzaW5nIGBtZW1fY2dyb3VwX2h1Z2V0bGJfdHJ5X2NoYXJnZWAsIGBtZW1fY2dyb3VwX2h1Z2V0bGJfY29tbWl0X2NoYXJnZWAsIGFuZCBgbWVtX2Nncm91cF9odWdldGxiX2NhbmNlbF9jaGFyZ2VgIHRvIG1hbmFnZSBtZW1jZyBhY2NvdW50aW5nIGR1cmluZyBmb2xpbyBhbGxvY2F0aW9uLiBTbWFydC4gVGhpcyBpcyB0aGUgaW50ZWdyYXRpb24gSSB3YXMgZXhwZWN0aW5nLlxuXG5EaXZpbmcgZGVlcGVyLCBJIHNlZSB0aGF0IHRoZSBgaHVnZXRsYl9yZXNlcnZlX3BhZ2VzYCBmdW5jdGlvbiBpbiBgbW0vaHVnZXRsYi5jYCBhbHNvIGhhcyBiZWVuIG1vZGlmaWVkLCBwYXJ0aWN1bGFybHkgaW4gdGhlIGVycm9yIHBhdGggYG91dF9wdXRfcGFnZXNgLiBJdCdzIHdvcnRoIGRpZ2dpbmcgaW50byB0aGUgZGV0YWlscyBvZiAqdGhhdCogY2hhbmdlIHRvIHNlZSBob3cgaXQncyBwbGF5aW5nIHdpdGggdGhlIG5ldyBtZW1jZyBhY2NvdW50aW5nLlxuXG5Ob3csIGxldCdzIGxvb2sgYXQgdGhlIGBtbS9tZW1jb250cm9sLmNgIGZpbGUuIFRoZSBmdW5jdGlvbnMgbGlrZSBgbWVtX2Nncm91cF9odWdldGxiX3RyeV9jaGFyZ2VgLCBgbWVtX2Nncm91cF9odWdldGxiX2NvbW1pdF9jaGFyZ2VgLCBhbmQgYG1lbV9jZ3JvdXBfaHVnZXRsYl9jYW5jZWxfY2hhcmdlYCBhcmUgYWxsIG5ldywgYXMgZXhwZWN0ZWQuIFRoaXMgY29uZmlybXMgdGhlIGZ1bmN0aW9uYWwgYWRkaXRpb24gb2YgbWVtY2ctYXdhcmUgaHVnZXRsYiBhY2NvdW50aW5nLlxuXG5UaGlzIHNlZW1zIGxpa2UgYSBzb2xpZCwgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gdGhlIGNvcmUga2VybmVsIGxvZ2ljLiBJdCBkZWZpbml0ZWx5IHdhcnJhbnRzIGZ1enppbmcuXG5cbk15IGxpc3Qgb2YgZm9jdXMgc3ltYm9sczpcblxuKiAgIGBhbGxvY19odWdldGxiX2ZvbGlvYFxuKiAgIGBodWdldGxiX3Jlc2VydmVfcGFnZXNgXG4qICAgYG1lbV9jZ3JvdXBfaHVnZXRsYl90cnlfY2hhcmdlYFxuKiAgIGBtZW1fY2dyb3VwX2h1Z2V0bGJfY29tbWl0X2NoYXJnZWBcbiogICBgbWVtX2Nncm91cF9odWdldGxiX2NhbmNlbF9jaGFyZ2VgXG4qICAgYGh1Z2VwYWdlX3N1YnBvb2xfZ2V0X3BhZ2VzYFxuKiAgIGBodWdlcGFnZV9zdWJwb29sX3B1dF9wYWdlc2BcblxuQW5kIG9mIGNvdXJzZSwgSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGUgcmVsZXZhbnQga2VybmVsIGNvbmZpZyBvcHRpb25zIGFyZSBlbmFibGVkIGZvciB0ZXN0aW5nIHRoaXMuIExldCdzIHNlZS4uLiBJJ2xsIG5lZWQgYEhVR0VUTEJGU2AsIG9idmlvdXNseS4gQWxzbywgYE1FTUNHYC4gSSB0aGluayBgQ0dST1VQX0hVR0VUTEJgIGlzIHJlbGV2YW50LiBMZXQgbWUgZG91YmxlLWNoZWNrIHRoYXQgbGFzdCBvbmUsIEkgZG9uJ3QgcXVpdGUgcmVtZW1iZXIgaWYgdGhhdCBpcyB0aGUgY29ycmVjdCBjb25maWcuIExldCdzIGxvb2sgZm9yIGBtZW1jZ19hY2NvdW50c19odWdldGxiYCBvciBgQ0dST1VQX0hVR0VUTEJgIGluIGBtbS9tZW1jb250cm9sLmNgIG9yIGBpbml0L0tjb25maWdgIHRvIGJlIHN1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI1OTg2LCJPdXRwdXRUb2tlbnMiOjIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTE2LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjFUMTg6MDg6MjYuMjAwMTM5MTI1WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwMDYxNzc3NjIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWVtY2dfYWNjb3VudHNfaHVnZXRsYlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9tZW1jb250cm9sLmM9MTY3ND11bnNpZ25lZCBsb25nIG1lbWNnX3BhZ2Vfc3RhdGVfbG9jYWxfb3V0cHV0KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgaW50IGl0ZW0pXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtMTY4MS0jaWZkZWYgQ09ORklHX0hVR0VUTEJfUEFHRVxcbm1tL21lbWNvbnRyb2wuYzoxNjgyOnN0YXRpYyBib29sIG1lbWNnX2FjY291bnRzX2h1Z2V0bGIodm9pZClcXG5tbS9tZW1jb250cm9sLmMtMTY4My17XFxuLS1cXG5tbS9tZW1jb250cm9sLmMtMTY4Ni0jZWxzZSAvKiBDT05GSUdfSFVHRVRMQl9QQUdFICovXFxubW0vbWVtY29udHJvbC5jOjE2ODc6c3RhdGljIGJvb2wgbWVtY2dfYWNjb3VudHNfaHVnZXRsYih2b2lkKVxcbm1tL21lbWNvbnRyb2wuYy0xNjg4LXtcXG4tLVxcbm1tL21lbWNvbnRyb2wuYz0xNjkzPXN0YXRpYyB2b2lkIG1lbWNnX3N0YXRfZm9ybWF0KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgc3RydWN0IHNlcV9idWYgKnMpXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtMTcxMy1cXHRcXHRpZiAodW5saWtlbHkobWVtb3J5X3N0YXRzW2ldLmlkeCA9PSBOUl9IVUdFVExCKSBcXHUwMDI2XFx1MDAyNlxcbm1tL21lbWNvbnRyb2wuYzoxNzE0OlxcdFxcdFxcdCFtZW1jZ19hY2NvdW50c19odWdldGxiKCkpXFxubW0vbWVtY29udHJvbC5jLTE3MTUtXFx0XFx0XFx0Y29udGludWU7XFxuLS1cXG5tbS9tZW1jb250cm9sLmM9NTE2ND1pbnQgbWVtX2Nncm91cF9odWdldGxiX3RyeV9jaGFyZ2UodW5zaWduZWQgaW50IG5yX3BhZ2VzLCBnZnBfdCBnZnAsXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtNTE3NC1cXG5tbS9tZW1jb250cm9sLmM6NTE3NTpcXHRpZiAobWVtX2Nncm91cF9kaXNhYmxlZCgpIHx8ICFtZW1jZ19hY2NvdW50c19odWdldGxiKCkgfHxcXG5tbS9tZW1jb250cm9sLmMtNTE3Ni1cXHQgICAgIWNncm91cF9zdWJzeXNfb25fZGZsKG1lbW9yeV9jZ3JwX3N1YnN5cykpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIxVDE4OjA4OjI4LjIwNjMzMDI0N1oiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI5OTcwNjIyMTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqSW52ZXN0aWdhdGluZyBIdWdlVExCIE1lbW9yeSBBY2NvdW50aW5nIGluIHRoZSBLZXJuZWwqKlxuXG5Pa2F5LCBzbyBgbWVtY2dfYWNjb3VudHNfaHVnZXRsYmAgaXMgb25seSBkZWZpbmVkIHdoZW4gYENPTkZJR19IVUdFVExCX1BBR0VgIGlzIGVuYWJsZWQuIFRoYXQgbWFrZXMgc2Vuc2UsIGJ1dCBpdCByYWlzZXMgYSBxdWVzdGlvbjogaG93IGRvZXMgdGhhdCBpbnRlcmFjdCB3aXRoIGBDT05GSUdfQ0dST1VQX0hVR0VUTEJgPyBJcyBgQ09ORklHX0NHUk9VUF9IVUdFVExCYCBhbHNvIGNoZWNrZWQgYW55d2hlcmU/IEknZCBiZXR0ZXIgY29uZmlybSB3aGV0aGVyIG9yIG5vdCBgQ09ORklHX0NHUk9VUF9IVUdFVExCYCBpcyBldmVuIGRlZmluZWQuIEdvdHRhIGJlIHByZWNpc2UgYWJvdXQgdGhpcy5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjc1NzcsIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yMVQxODowODozMS4yMDMzOTQ4OTRaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTk5OTQzOTg0NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJDR1JPVVBfSFVHRVRMQlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL2FybTY0L2NvbmZpZ3MvZGVmY29uZmlnPTIxPUNPTkZJR19DR1JPVVBfRlJFRVpFUj15XFxuYXJjaC9hcm02NC9jb25maWdzL2RlZmNvbmZpZzoyMjpDT05GSUdfQ0dST1VQX0hVR0VUTEI9eVxcbmFyY2gvYXJtNjQvY29uZmlncy9kZWZjb25maWctMjMtQ09ORklHX0NQVVNFVFM9eVxcbi0tXFxuYXJjaC9sb29uZ2FyY2gvY29uZmlncy9sb29uZ3NvbjY0X2RlZmNvbmZpZz0zMD1DT05GSUdfQ0dST1VQX0ZSRUVaRVI9eVxcbmFyY2gvbG9vbmdhcmNoL2NvbmZpZ3MvbG9vbmdzb242NF9kZWZjb25maWc6MzE6Q09ORklHX0NHUk9VUF9IVUdFVExCPXlcXG5hcmNoL2xvb25nYXJjaC9jb25maWdzL2xvb25nc29uNjRfZGVmY29uZmlnLTMyLUNPTkZJR19DUFVTRVRTPXlcXG4tLVxcbmFyY2gvcG93ZXJwYy9jb25maWdzL3BwYzY0X2RlZmNvbmZpZz0yNz1DT05GSUdfQ0dST1VQX0ZSRUVaRVI9eVxcbmFyY2gvcG93ZXJwYy9jb25maWdzL3BwYzY0X2RlZmNvbmZpZzoyODpDT05GSUdfQ0dST1VQX0hVR0VUTEI9eVxcbmFyY2gvcG93ZXJwYy9jb25maWdzL3BwYzY0X2RlZmNvbmZpZy0yOS1DT05GSUdfQ1BVU0VUUz15XFxuLS1cXG5hcmNoL3Jpc2N2L2NvbmZpZ3MvZGVmY29uZmlnPTE0PUNPTkZJR19DR1JPVVBfRlJFRVpFUj15XFxuYXJjaC9yaXNjdi9jb25maWdzL2RlZmNvbmZpZzoxNTpDT05GSUdfQ0dST1VQX0hVR0VUTEI9eVxcbmFyY2gvcmlzY3YvY29uZmlncy9kZWZjb25maWctMTYtQ09ORklHX0NQVVNFVFM9eVxcbi0tXFxuYXJjaC9zMzkwL2NvbmZpZ3MvZGVidWdfZGVmY29uZmlnPTMwPUNPTkZJR19DR1JPVVBfRlJFRVpFUj15XFxuYXJjaC9zMzkwL2NvbmZpZ3MvZGVidWdfZGVmY29uZmlnOjMxOkNPTkZJR19DR1JPVVBfSFVHRVRMQj15XFxuYXJjaC9zMzkwL2NvbmZpZ3MvZGVidWdfZGVmY29uZmlnLTMyLUNPTkZJR19DUFVTRVRTPXlcXG4tLVxcbmFyY2gvczM5MC9jb25maWdzL2RlZmNvbmZpZz0yOD1DT05GSUdfQ0dST1VQX0ZSRUVaRVI9eVxcbmFyY2gvczM5MC9jb25maWdzL2RlZmNvbmZpZzoyOTpDT05GSUdfQ0dST1VQX0hVR0VUTEI9eVxcbmFyY2gvczM5MC9jb25maWdzL2RlZmNvbmZpZy0zMC1DT05GSUdfQ1BVU0VUUz15XFxuLS1cXG5hcmNoL3g4Ni9jb25maWdzL2kzODZfZGVmY29uZmlnPTE5PUNPTkZJR19DR1JPVVBfRlJFRVpFUj15XFxuYXJjaC94ODYvY29uZmlncy9pMzg2X2RlZmNvbmZpZzoyMDpDT05GSUdfQ0dST1VQX0hVR0VUTEI9eVxcbmFyY2gveDg2L2NvbmZpZ3MvaTM4Nl9kZWZjb25maWctMjEtQ09ORklHX0NQVVNFVFM9eVxcbi0tXFxuYXJjaC94ODYvY29uZmlncy94ODZfNjRfZGVmY29uZmlnPTE5PUNPTkZJR19DR1JPVVBfRlJFRVpFUj15XFxuYXJjaC94ODYvY29uZmlncy94ODZfNjRfZGVmY29uZmlnOjIwOkNPTkZJR19DR1JPVVBfSFVHRVRMQj15XFxuYXJjaC94ODYvY29uZmlncy94ODZfNjRfZGVmY29uZmlnLTIxLUNPTkZJR19DUFVTRVRTPXlcXG4tLVxcbmluY2x1ZGUvbGludXgvY2dyb3VwX3N1YnN5cy5oPTQ5PVNVQlNZUyhuZXRfcHJpbylcXG4tLVxcbmluY2x1ZGUvbGludXgvY2dyb3VwX3N1YnN5cy5oLTUxLVxcbmluY2x1ZGUvbGludXgvY2dyb3VwX3N1YnN5cy5oOjUyOiNpZiBJU19FTkFCTEVEKENPTkZJR19DR1JPVVBfSFVHRVRMQilcXG5pbmNsdWRlL2xpbnV4L2Nncm91cF9zdWJzeXMuaC01My1TVUJTWVMoaHVnZXRsYilcXG4tLVxcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oPTQwPXN0cnVjdCByZXN2X21hcCB7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaC00Ny1cXHRzdHJ1Y3Qgcndfc2VtYXBob3JlIHJ3X3NlbWE7XFxuaW5jbHVkZS9saW51eC9odWdldGxiLmg6NDg6I2lmZGVmIENPTkZJR19DR1JPVVBfSFVHRVRMQlxcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oLTQ5LVxcdC8qXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaD03OT1zdHJ1Y3QgZmlsZV9yZWdpb24ge1xcbi0tXFxuaW5jbHVkZS9saW51eC9odWdldGxiLmgtODItXFx0bG9uZyB0bztcXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaDo4MzojaWZkZWYgQ09ORklHX0NHUk9VUF9IVUdFVExCXFxuaW5jbHVkZS9saW51eC9odWdldGxiLmgtODQtXFx0LypcXG4tLVxcbmluY2x1ZGUvbGludXgvaHVnZXRsYl9jZ3JvdXAuaD0yMj1zdHJ1Y3QgZmlsZV9yZWdpb247XFxuaW5jbHVkZS9saW51eC9odWdldGxiX2Nncm91cC5oLTIzLVxcbmluY2x1ZGUvbGludXgvaHVnZXRsYl9jZ3JvdXAuaDoyNDojaWZkZWYgQ09ORklHX0NHUk9VUF9IVUdFVExCXFxuaW5jbHVkZS9saW51eC9odWdldGxiX2Nncm91cC5oLTI1LWVudW0gaHVnZXRsYl9tZW1vcnlfZXZlbnQge1xcbi0tXFxuaW5pdC9LY29uZmlnPTEyNzA9Y29uZmlnIENHUk9VUF9GUkVFWkVSXFxuLS1cXG5pbml0L0tjb25maWctMTI4MC1cXG5pbml0L0tjb25maWc6MTI4MTpjb25maWcgQ0dST1VQX0hVR0VUTEJcXG5pbml0L0tjb25maWctMTI4Mi1cXHRib29sIFxcXCJIdWdlVExCIGNvbnRyb2xsZXJcXFwiXFxuLS1cXG5tbS9NYWtlZmlsZT0xMDg9ZW5kaWZcXG5tbS9NYWtlZmlsZToxMDk6b2JqLSQoQ09ORklHX0NHUk9VUF9IVUdFVExCKSArPSBodWdldGxiX2Nncm91cC5vXFxubW0vTWFrZWZpbGUtMTEwLW9iai0kKENPTkZJR19HVVBfVEVTVCkgKz0gZ3VwX3Rlc3Qub1xcbi0tXFxubW0vaHVnZXRsYi5jPTMyNT1zdGF0aWMgdm9pZCBjb3B5X2h1Z2V0bGJfY2dyb3VwX3VuY2hhcmdlX2luZm8oc3RydWN0IGZpbGVfcmVnaW9uICpucmcsXFxuLS1cXG5tbS9odWdldGxiLmMtMzI3LXtcXG5tbS9odWdldGxiLmM6MzI4OiNpZmRlZiBDT05GSUdfQ0dST1VQX0hVR0VUTEJcXG5tbS9odWdldGxiLmMtMzI5LVxcdG5yZy1cXHUwMDNlcmVzZXJ2YXRpb25fY291bnRlciA9IHJnLVxcdTAwM2VyZXNlcnZhdGlvbl9jb3VudGVyO1xcbi0tXFxubW0vaHVnZXRsYi5jPTMzNz1zdGF0aWMgdm9pZCByZWNvcmRfaHVnZXRsYl9jZ3JvdXBfdW5jaGFyZ2VfaW5mbyhzdHJ1Y3QgaHVnZXRsYl9jZ3JvdXAgKmhfY2csXFxuLS1cXG5tbS9odWdldGxiLmMtMzQxLXtcXG5tbS9odWdldGxiLmM6MzQyOiNpZmRlZiBDT05GSUdfQ0dST1VQX0hVR0VUTEJcXG5tbS9odWdldGxiLmMtMzQzLVxcdGlmIChoX2NnKSB7XFxuLS1cXG5tbS9odWdldGxiLmM9MzcxPXN0YXRpYyB2b2lkIHB1dF91bmNoYXJnZV9pbmZvKHN0cnVjdCBmaWxlX3JlZ2lvbiAqcmcpXFxubW0vaHVnZXRsYi5jLTM3Mi17XFxubW0vaHVnZXRsYi5jOjM3MzojaWZkZWYgQ09ORklHX0NHUk9VUF9IVUdFVExCXFxubW0vaHVnZXRsYi5jLTM3NC1cXHRpZiAocmctXFx1MDAzZWNzcylcXG4tLVxcbm1tL2h1Z2V0bGIuYz0zNzk9c3RhdGljIGJvb2wgaGFzX3NhbWVfdW5jaGFyZ2VfaW5mbyhzdHJ1Y3QgZmlsZV9yZWdpb24gKnJnLFxcbi0tXFxubW0vaHVnZXRsYi5jLTM4MS17XFxubW0vaHVnZXRsYi5jOjM4MjojaWZkZWYgQ09ORklHX0NHUk9VUF9IVUdFVExCXFxubW0vaHVnZXRsYi5jLTM4My1cXHRyZXR1cm4gcmctXFx1MDAzZXJlc2VydmF0aW9uX2NvdW50ZXIgPT0gb3JnLVxcdTAwM2VyZXNlcnZhdGlvbl9jb3VudGVyIFxcdTAwMjZcXHUwMDI2XFxuLS1cXG5tbS9odWdldGxiLmM9OTA5PXJlc3ZfbWFwX3NldF9odWdldGxiX2Nncm91cF91bmNoYXJnZV9pbmZvKHN0cnVjdCByZXN2X21hcCAqcmVzdl9tYXAsXFxuLS1cXG5tbS9odWdldGxiLmMtOTEyLXtcXG5tbS9odWdldGxiLmM6OTEzOiNpZmRlZiBDT05GSUdfQ0dST1VQX0hVR0VUTEJcXG5tbS9odWdldGxiLmMtOTE0LVxcdGlmICghaF9jZyB8fCAhaCkge1xcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2NvbmZpZy5hYXJjaDY0PTIxPUNPTkZJR19DR1JPVVBfRlJFRVpFUj15XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2NvbmZpZy5hYXJjaDY0OjIyOkNPTkZJR19DR1JPVVBfSFVHRVRMQj15XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2NvbmZpZy5hYXJjaDY0LTIzLUNPTkZJR19DR1JPVVBfTkVUX0NMQVNTSUQ9eVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2NvbmZpZy5wcGM2NGVsPTEyPUNPTkZJR19DR1JPVVBfRlJFRVpFUj15XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2NvbmZpZy5wcGM2NGVsOjEzOkNPTkZJR19DR1JPVVBfSFVHRVRMQj15XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2NvbmZpZy5wcGM2NGVsLTE0LUNPTkZJR19DR1JPVVBfTkVUX0NMQVNTSUQ9eVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2NvbmZpZy5yaXNjdjY0PTEyPUNPTkZJR19DR1JPVVBfRlJFRVpFUj15XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2NvbmZpZy5yaXNjdjY0OjEzOkNPTkZJR19DR1JPVVBfSFVHRVRMQj15XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2NvbmZpZy5yaXNjdjY0LTE0LUNPTkZJR19DR1JPVVBfTkVUX0NMQVNTSUQ9eVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2NvbmZpZy5zMzkweD0xND1DT05GSUdfQ0dST1VQX0ZSRUVaRVI9eVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9jb25maWcuczM5MHg6MTU6Q09ORklHX0NHUk9VUF9IVUdFVExCPXlcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvY29uZmlnLnMzOTB4LTE2LUNPTkZJR19DR1JPVVBfTkVUX0NMQVNTSUQ9eVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2NvbmZpZy54ODZfNjQ9Mjc9Q09ORklHX0NHUk9VUF9GUkVFWkVSPXlcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvY29uZmlnLng4Nl82NDoyODpDT05GSUdfQ0dST1VQX0hVR0VUTEI9eVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9jb25maWcueDg2XzY0LTI5LUNPTkZJR19DR1JPVVBfUEVSRj15XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9oaWQvY29uZmlnLmNvbW1vbj0yMj1DT05GSUdfQ0dST1VQX0ZSRUVaRVI9eVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2hpZC9jb25maWcuY29tbW9uOjIzOkNPTkZJR19DR1JPVVBfSFVHRVRMQj15XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvaGlkL2NvbmZpZy5jb21tb24tMjQtQ09ORklHX0NHUk9VUF9ORVRfQ0xBU1NJRD15XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIxVDE4OjA4OjMzLjIwMjg0MjEyOVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMxOTUxOTI2NTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3Mgb24gdGhpczpcblxuKipJbnZlc3RpZ2F0aW5nIE1lbW9yeSBDb250cm9sIEdyb3VwcyoqXG5cbkFscmlnaHQsIHNvIGBDR1JPVVBfSFVHRVRMQmAgaXMgZGVmaW5pdGVseSBhIHRoaW5nLiBOb3csIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSByZWxhdGlvbnNoaXAgd2l0aCBgTUVNQ0dgLiBNeSBmaXJzdCBpbnN0aW5jdCBpcyB0byBkZWx2ZSBpbnRvIHRoZSBgaW5pdC9LY29uZmlnYCBmaWxlLiBUaGF0J3MgdGhlIGdvLXRvIHBsYWNlIGZvciB1bmRlcnN0YW5kaW5nIGtlcm5lbCBjb25maWd1cmF0aW9uIG9wdGlvbnMsIHNvIEknbGwgc3RhcnQgdGhlcmUgdG8gc2VlIGhvdyBgTUVNQ0dgIGlzIGRlZmluZWQgYW5kIGlmIHRoZXJlJ3MgYW55IGltbWVkaWF0ZSBjb25uZWN0aW9uIG9yIGRlcGVuZGVuY3kgbGFpZCBvdXQgd2l0aGluIHRoZSBjb25maWd1cmF0aW9uIGZyYW1ld29yay4gVGhpcyBpcyB0aGUgbG9naWNhbCBmaXJzdCBzdGVwIGZvciBtZSB0byB1bmRlcnN0YW5kIGhvdyB0aGVzZSBtb2R1bGVzIHJlbGF0ZSB0byBlYWNoIG90aGVyIGluIHRoZSBrZXJuZWwuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMwMDYyLCJPdXRwdXRUb2tlbnMiOjE3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjFUMTg6MDg6MzYuMzk4MDM2OTYyWiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3NDY5NTY5OTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE1FTUNHXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluaXQvS2NvbmZpZz0xMDYzPWNvbmZpZyBDR1JPVVBfRkFWT1JfRFlOTU9EU1xcbi0tXFxuaW5pdC9LY29uZmlnLTEwNzItXFxuaW5pdC9LY29uZmlnOjEwNzM6Y29uZmlnIE1FTUNHXFxuaW5pdC9LY29uZmlnLTEwNzQtXFx0Ym9vbCBcXFwiTWVtb3J5IGNvbnRyb2xsZXJcXFwiXFxuLS1cXG5pbml0L0tjb25maWctMTA4MS1cXG5pbml0L0tjb25maWc6MTA4Mjpjb25maWcgTUVNQ0dfTk1JX1VOU0FGRVxcbmluaXQvS2NvbmZpZy0xMDgzLVxcdGJvb2xcXG4tLVxcbmluaXQvS2NvbmZpZy0xMDg4LVxcbmluaXQvS2NvbmZpZzoxMDg5OmNvbmZpZyBNRU1DR19OTUlfU0FGRVRZX1JFUVVJUkVTX0FUT01JQ1xcbmluaXQvS2NvbmZpZy0xMDkwLVxcdGJvb2xcXG4tLVxcbmluaXQvS2NvbmZpZy0xMDk1LVxcbmluaXQvS2NvbmZpZzoxMDk2OmNvbmZpZyBNRU1DR19WMVxcbmluaXQvS2NvbmZpZy0xMDk3LVxcdGJvb2wgXFxcIkxlZ2FjeSBjZ3JvdXAgdjEgbWVtb3J5IGNvbnRyb2xsZXJcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIxVDE4OjA4OjM4LjE0NTAwMzE1MVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM4MzIxOTUzMTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqS2VybmVsIENvbmZpZ3VyYXRpb24gUXVhbmRhcnkqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGVzZSBrZXJuZWwgY29uZmlndXJhdGlvbnMsIGFuZCBpbW1lZGlhdGVseSBteSBicmFpbiBqdW1wcyB0byBgSFVHRVRMQkZTYCwgYE1FTUNHYCwgYW5kIGBDR1JPVVBfSFVHRVRMQmAuIFRob3NlIGFyZSB0aGUgdXN1YWwgc3VzcGVjdHMuIEJ1dCwgaG9sZCBvbiBhIHNlY29uZC4uLiBpc24ndCBgSFVHRVRMQl9QQUdFYCB0aGUgKnByaW1hcnkqIGNvbmZpZyBmb3IgZW5hYmxpbmcgaHVnZSBwYWdlcyBpbiB0aGUgZmlyc3QgcGxhY2U/IEl0IGZlZWxzIGxpa2UgdGhhdCBzaG91bGQgYmUgdGhlIGZvdW5kYXRpb24uIFJpZ2h0LCBgSFVHRVRMQkZTYCBpcyByZWxhdGVkIHRvIHRoZSBmaWxlc3lzdGVtIGltcGxlbWVudGF0aW9uLCBtYWtpbmcgdGhhdCBkaXN0aW5jdGlvbiBpbiBteSBtaW5kIG5vdy5cblxuTGV0IG1lIGp1c3QgZG91YmxlLWNoZWNrIHdoZXJlIGBIVUdFVExCX1BBR0VgIGlzIGFjdHVhbGx5IGRlZmluZWQuIEkgc2hvdWxkIGxvb2sgaW4gZWl0aGVyIGBmcy9LY29uZmlnYCBvciBgbW0vS2NvbmZpZ2AsIGl0J2xsIGxpa2VseSBiZSB0aGVyZS4gR290dGEgcmVmcmVzaCBteSBtZW1vcnkgYW5kIHBpbnBvaW50IHRoYXQgY29uZmlndXJhdGlvbiBkZXBlbmRlbmN5LlxuXG5cbiIsIklucHV0VG9rZW5zIjozMDQ3OSwiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjgwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIxVDE4OjA4OjQxLjk3NzIwMzU3M1oiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTc2NTMyOTY3MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgSFVHRVRMQl9QQUdFXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvc2gvbW0vS2NvbmZpZz0xNTg9Y2hvaWNlXFxuLS1cXG5hcmNoL3NoL21tL0tjb25maWctMTYzLVxcbmFyY2gvc2gvbW0vS2NvbmZpZzoxNjQ6Y29uZmlnIEhVR0VUTEJfUEFHRV9TSVpFXzY0S1xcbmFyY2gvc2gvbW0vS2NvbmZpZy0xNjUtXFx0Ym9vbCBcXFwiNjRrQlxcXCJcXG4tLVxcbmFyY2gvc2gvbW0vS2NvbmZpZy0xNjctXFxuYXJjaC9zaC9tbS9LY29uZmlnOjE2ODpjb25maWcgSFVHRVRMQl9QQUdFX1NJWkVfMjU2S1xcbmFyY2gvc2gvbW0vS2NvbmZpZy0xNjktXFx0Ym9vbCBcXFwiMjU2a0JcXFwiXFxuLS1cXG5hcmNoL3NoL21tL0tjb25maWctMTcxLVxcbmFyY2gvc2gvbW0vS2NvbmZpZzoxNzI6Y29uZmlnIEhVR0VUTEJfUEFHRV9TSVpFXzFNQlxcbmFyY2gvc2gvbW0vS2NvbmZpZy0xNzMtXFx0Ym9vbCBcXFwiMU1CXFxcIlxcbmFyY2gvc2gvbW0vS2NvbmZpZy0xNzQtXFxuYXJjaC9zaC9tbS9LY29uZmlnOjE3NTpjb25maWcgSFVHRVRMQl9QQUdFX1NJWkVfNE1CXFxuYXJjaC9zaC9tbS9LY29uZmlnLTE3Ni1cXHRib29sIFxcXCI0TUJcXFwiXFxuLS1cXG5hcmNoL3NoL21tL0tjb25maWctMTc4LVxcbmFyY2gvc2gvbW0vS2NvbmZpZzoxNzk6Y29uZmlnIEhVR0VUTEJfUEFHRV9TSVpFXzY0TUJcXG5hcmNoL3NoL21tL0tjb25maWctMTgwLVxcdGJvb2wgXFxcIjY0TUJcXFwiXFxuLS1cXG5mcy9LY29uZmlnPTI2Mj1pZiBIVUdFVExCRlNcXG5mcy9LY29uZmlnOjI2Mzpjb25maWcgSFVHRVRMQl9QQUdFX09QVElNSVpFX1ZNRU1NQVBfREVGQVVMVF9PTlxcbmZzL0tjb25maWctMjY0LVxcdGJvb2wgXFxcIkh1Z2VUTEIgVm1lbW1hcCBPcHRpbWl6YXRpb24gKEhWTykgZGVmYXVsdHMgdG8gb25cXFwiXFxuLS1cXG5mcy9LY29uZmlnPTI3MT1lbmRpZiAjIEhVR0VUTEJGU1xcbmZzL0tjb25maWctMjcyLVxcbmZzL0tjb25maWc6MjczOmNvbmZpZyBIVUdFVExCX1BBR0VcXG5mcy9LY29uZmlnLTI3NC1cXHRkZWZfYm9vbCBIVUdFVExCRlNcXG4tLVxcbmZzL0tjb25maWctMjc2LVxcbmZzL0tjb25maWc6Mjc3OmNvbmZpZyBIVUdFVExCX1BBR0VfT1BUSU1JWkVfVk1FTU1BUFxcbmZzL0tjb25maWctMjc4LVxcdGRlZl9ib29sIEhVR0VUTEJfUEFHRVxcbi0tXFxubW0vS2NvbmZpZz03MDY9Y29uZmlnIEFSQ0hfRU5BQkxFX1RIUF9NSUdSQVRJT05cXG4tLVxcbm1tL0tjb25maWctNzA4LVxcbm1tL0tjb25maWc6NzA5OmNvbmZpZyBIVUdFVExCX1BBR0VfU0laRV9WQVJJQUJMRVxcbm1tL0tjb25maWctNzEwLVxcdGRlZl9ib29sIG5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjFUMTg6MDg6NDMuNzQyNTQzMDc2WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjk3OTc0NTgzNzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIEh1Z2V0bGIgU3VicG9vbCBSZWZhY3RvcmluZyBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggc2VyaWVzLCBhbmQgaXQncyBhbGwgYWJvdXQgcmVmYWN0b3JpbmcgdGhlIGh1Z2V0bGIgc3VicG9vbCBsb2dpYy4gUmlnaHQgb2ZmIHRoZSBiYXQsIEkgc2VlIHRoYXQgYEhVR0VUTEJfUEFHRWAgaXMgdGllZCB0byBgSFVHRVRMQkZTYCwgc28gdGhhdCdzIHRoZSBrZXkgdGhpbmcgdG8gZW5hYmxlLCBhbmQgSSBuZWVkIHRvIG1ha2Ugc3VyZSBgTUVNQ0dgIGlzIGFsc28gc2V0LiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoYXQgdGhlc2UgYXJlIGFsbCB3b3JraW5nIGluIGhhcm1vbnkgd2l0aCBhbnkgZXhpc3RpbmcgY29uZmlndXJhdGlvbnMuIEkgc2hvdWxkIHByb2JhYmx5IGRvdWJsZS1jaGVjayB0aGUgYG1lbWNnX2FjY291bnRzX2h1Z2V0bGJgIGNvbmZpZy4gSXQncyBkZWZpbmVkIGlmIGBDT05GSUdfSFVHRVRMQl9QQUdFYCBpcyBzZXQsIGFuZCBpdCdzIHVzZWQgaW4gYG1lbV9jZ3JvdXBfaHVnZXRsYl90cnlfY2hhcmdlYC4gR290IGl0LiBTbyB3ZSdyZSBsb29raW5nIGF0IGBIVUdFVExCRlNgIGFuZCBgTUVNQ0dgIGFzIHRoZSBlc3NlbnRpYWwgY29uZmlncyBoZXJlLCBhcyB3ZWxsIGFzIGBDR1JPVVBfSFVHRVRMQmAuXG5cbk5vdywgbGV0IG1lIHplcm8gaW4gb24gdGhlIGtleSBmdW5jdGlvbnMgYmVpbmcgbW9kaWZpZWQuIEkgc2hvdWxkIGdpdmUgdGhlc2UgZXh0cmEgZm9jdXM6XG5cbiogICBgYWxsb2NfaHVnZXRsYl9mb2xpb2BcbiogICBgaHVnZXRsYl9yZXNlcnZlX3BhZ2VzYFxuKiAgIGBtZW1fY2dyb3VwX2h1Z2V0bGJfdHJ5X2NoYXJnZWBcbiogICBgbWVtX2Nncm91cF9odWdldGxiX2NvbW1pdF9jaGFyZ2VgXG4qICAgYG1lbV9jZ3JvdXBfaHVnZXRsYl9jYW5jZWxfY2hhcmdlYFxuKiAgIGBodWdlcGFnZV9zdWJwb29sX2dldF9wYWdlc2BcbiogICBgaHVnZXBhZ2Vfc3VicG9vbF9wdXRfcGFnZXNgXG4qICAgYGh1Z2VwYWdlX25ld19zdWJwb29sYFxuKiAgIGBodWdlcGFnZV9wdXRfc3VicG9vbGBcbiogICBgaHVnZXBhZ2Vfc3VicG9vbF9mcmVlX2hwYWdlc2BcbiogICBgaHVnZXBhZ2Vfc3VicG9vbF9tYXhfaHBhZ2VzYFxuKiAgIGBodWdlcGFnZV9zdWJwb29sX21heF9zaXplYFxuKiAgIGBodWdlcGFnZV9zdWJwb29sX21pbl9zaXplYFxuXG5BbHJpZ2h0LCBsZXQncyBtYWtlIHN1cmUgSSdtIHVzaW5nIHRoZSBleGFjdCBmdW5jdGlvbiBuYW1lcyBmcm9tIHRoZSBkaWZmIHdoZW4gaXQgY29tZXMgdG8gZm9jdXMuXG5cblRoZSBjb3JlIG9mIHRoaXMgcGF0Y2ggc2VyaWVzIGlzIHJlZmFjdG9yaW5nIHRoZSBodWdldGxiIHN1YnBvb2wgbG9naWMgaW50byBpdHMgb3duIGZpbGUsIGBtbS9odWdldGxiX3N1YnBvb2wuY2AuIE1vcmUgaW1wb3J0YW50bHksIGl0IHNlZW1zIHRvIGJlIHVwZGF0aW5nIHRoZSBodWdldGxiIGFsbG9jYXRpb24gcGF0aCAoYGFsbG9jX2h1Z2V0bGJfZm9saW9gKSB0byBlbXBsb3kgYSB0cnkvY29tbWl0L2NhbmNlbCBjaGFyZ2luZyBzY2hlbWUgZm9yIG1lbW9yeSBjZ3JvdXBzIHVzaW5nIGZ1bmN0aW9ucyBsaWtlIGBtZW1fY2dyb3VwX2h1Z2V0bGJfdHJ5X2NoYXJnZWAsIGBtZW1fY2dyb3VwX2h1Z2V0bGJfY29tbWl0X2NoYXJnZWAsIGFuZCBgbWVtX2Nncm91cF9odWdldGxiX2NhbmNlbF9jaGFyZ2VgLiBQbHVzLCB0aGVyZSdzIGEgZml4IGZvciBhbiBlcnJvciBwYXRoIGluIGBodWdldGxiX3Jlc2VydmVfcGFnZXNgLiBUaGVzZSBhcmUgc2lnbmlmaWNhbnQgY2hhbmdlcyB0byBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBjZ3JvdXAgZnVuY3Rpb25hbGl0eSwgYW5kIHNpbmNlIHRoZXkgY2FuIGJlIHRyaWdnZXJlZCBmcm9tIHVzZXJzcGFjZSB2aWEgaHVnZXRsYmZzIGFuZCBjZ3JvdXBmcywgdGhleSdyZSBwcmltZSBjYW5kaWRhdGVzIGZvciBmdXp6aW5nLiBUaW1lIHRvIHNldC1yZXN1bHRzLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMTM0NCwiT3V0cHV0VG9rZW5zIjoyNTAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MDQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjFUMTg6MDg6NTMuNTQwMDA0OTMzWiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzY1NDAyODIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkhVR0VUTEJGU1wiLFxuICAgIFwiTUVNQ0dcIixcbiAgICBcIkNHUk9VUF9IVUdFVExCXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYWxsb2NfaHVnZXRsYl9mb2xpb1wiLFxuICAgIFwiaHVnZXRsYl9yZXNlcnZlX3BhZ2VzXCIsXG4gICAgXCJtZW1fY2dyb3VwX2h1Z2V0bGJfdHJ5X2NoYXJnZVwiLFxuICAgIFwibWVtX2Nncm91cF9odWdldGxiX2NvbW1pdF9jaGFyZ2VcIixcbiAgICBcIm1lbV9jZ3JvdXBfaHVnZXRsYl9jYW5jZWxfY2hhcmdlXCIsXG4gICAgXCJodWdlcGFnZV9zdWJwb29sX2dldF9wYWdlc1wiLFxuICAgIFwiaHVnZXBhZ2Vfc3VicG9vbF9wdXRfcGFnZXNcIixcbiAgICBcImh1Z2VwYWdlX25ld19zdWJwb29sXCIsXG4gICAgXCJodWdlcGFnZV9wdXRfc3VicG9vbFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHNlcmllcyByZWZhY3RvcnMgdGhlIGh1Z2V0bGIgc3VicG9vbCBsb2dpYyBpbnRvIGEgc2VwYXJhdGUgZmlsZSBhbmQgbW9kaWZpZXMgdGhlIGh1Z2V0bGIgYWxsb2NhdGlvbiBwYXRoIHRvIHVzZSBhIG5ldyB0cnkvY29tbWl0L2NhbmNlbCBjaGFyZ2luZyBtb2RlbCBmb3IgbWVtb3J5IGNncm91cHMuIEl0IGFsc28gbW9kaWZpZXMgdGhlIGh1Z2V0bGJfcmVzZXJ2ZV9wYWdlcyBlcnJvciBwYXRoLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIGNncm91cCBsb2dpYyB0aGF0IGFyZSByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIGh1Z2V0bGJmcyBhbmQgY2dyb3VwZnMsIG1ha2luZyB0aGVtIGhpZ2hseSByZWxldmFudCBmb3IgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJIVUdFVExCRlNcIixcbiAgICBcIk1FTUNHXCIsXG4gICAgXCJDR1JPVVBfSFVHRVRMQlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImFsbG9jX2h1Z2V0bGJfZm9saW9cIixcbiAgICBcImh1Z2V0bGJfcmVzZXJ2ZV9wYWdlc1wiLFxuICAgIFwibWVtX2Nncm91cF9odWdldGxiX3RyeV9jaGFyZ2VcIixcbiAgICBcIm1lbV9jZ3JvdXBfaHVnZXRsYl9jb21taXRfY2hhcmdlXCIsXG4gICAgXCJtZW1fY2dyb3VwX2h1Z2V0bGJfY2FuY2VsX2NoYXJnZVwiLFxuICAgIFwiaHVnZXBhZ2Vfc3VicG9vbF9nZXRfcGFnZXNcIixcbiAgICBcImh1Z2VwYWdlX3N1YnBvb2xfcHV0X3BhZ2VzXCIsXG4gICAgXCJodWdlcGFnZV9uZXdfc3VicG9vbFwiLFxuICAgIFwiaHVnZXBhZ2VfcHV0X3N1YnBvb2xcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBzZXJpZXMgcmVmYWN0b3JzIHRoZSBodWdldGxiIHN1YnBvb2wgbG9naWMgaW50byBhIHNlcGFyYXRlIGZpbGUgYW5kIG1vZGlmaWVzIHRoZSBodWdldGxiIGFsbG9jYXRpb24gcGF0aCB0byB1c2UgYSBuZXcgdHJ5L2NvbW1pdC9jYW5jZWwgY2hhcmdpbmcgbW9kZWwgZm9yIG1lbW9yeSBjZ3JvdXBzLiBJdCBhbHNvIG1vZGlmaWVzIHRoZSBodWdldGxiX3Jlc2VydmVfcGFnZXMgZXJyb3IgcGF0aC4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBjZ3JvdXAgbG9naWMgdGhhdCBhcmUgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBodWdldGxiZnMgYW5kIGNncm91cGZzLCBtYWtpbmcgdGhlbSBoaWdobHkgcmVsZXZhbnQgZm9yIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowtd9d7[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-21 17:41:08 +0000 UTC FinishedAt: 2026-07-21 18:08:55 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "b95f03f04d475aa6719d15a636ddf32222d55657", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "HUGETLBFS", "MEMCG", "CGROUP_HUGETLB" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "b95f03f04d475aa6719d15a636ddf32222d55657", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "HUGETLBFS", "MEMCG", "CGROUP_HUGETLB" ], "series_id": "ebe23071-1bfc-48cc-b9a5-a087f5517dd5" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "alloc_hugetlb_folio", "hugetlb_reserve_pages", "mem_cgroup_hugetlb_try_charge", "mem_cgroup_hugetlb_commit_charge", "mem_cgroup_hugetlb_cancel_charge", "hugepage_subpool_get_pages", "hugepage_subpool_put_pages", "hugepage_new_subpool", "hugepage_put_subpool" ], "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+CgkJCTx0ZD4yMDI2LzA3LzIxIDE4OjA4PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0hVR0VUTEJGUyYjMzQ7LAogICAgJiMzNDtNRU1DRyYjMzQ7LAogICAgJiMzNDtDR1JPVVBfSFVHRVRMQiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2FsbG9jX2h1Z2V0bGJfZm9saW8mIzM0OywKICAgICYjMzQ7aHVnZXRsYl9yZXNlcnZlX3BhZ2VzJiMzNDssCiAgICAmIzM0O21lbV9jZ3JvdXBfaHVnZXRsYl90cnlfY2hhcmdlJiMzNDssCiAgICAmIzM0O21lbV9jZ3JvdXBfaHVnZXRsYl9jb21taXRfY2hhcmdlJiMzNDssCiAgICAmIzM0O21lbV9jZ3JvdXBfaHVnZXRsYl9jYW5jZWxfY2hhcmdlJiMzNDssCiAgICAmIzM0O2h1Z2VwYWdlX3N1YnBvb2xfZ2V0X3BhZ2VzJiMzNDssCiAgICAmIzM0O2h1Z2VwYWdlX3N1YnBvb2xfcHV0X3BhZ2VzJiMzNDssCiAgICAmIzM0O2h1Z2VwYWdlX25ld19zdWJwb29sJiMzNDssCiAgICAmIzM0O2h1Z2VwYWdlX3B1dF9zdWJwb29sJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHNlcmllcyByZWZhY3RvcnMgdGhlIGh1Z2V0bGIgc3VicG9vbCBsb2dpYyBpbnRvIGEgc2VwYXJhdGUgZmlsZSBhbmQgbW9kaWZpZXMgdGhlIGh1Z2V0bGIgYWxsb2NhdGlvbiBwYXRoIHRvIHVzZSBhIG5ldyB0cnkvY29tbWl0L2NhbmNlbCBjaGFyZ2luZyBtb2RlbCBmb3IgbWVtb3J5IGNncm91cHMuIEl0IGFsc28gbW9kaWZpZXMgdGhlIGh1Z2V0bGJfcmVzZXJ2ZV9wYWdlcyBlcnJvciBwYXRoLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIGNncm91cCBsb2dpYyB0aGF0IGFyZSByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIGh1Z2V0bGJmcyBhbmQgY2dyb3VwZnMsIG1ha2luZyB0aGVtIGhpZ2hseSByZWxldmFudCBmb3IgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMSAxODowODwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDcwMDg1MmNkOWEwMjNhNTEwNWUyMzQxZDI0N2I4NjQwMDJjY2M2ZmNcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIEp1bCAyMSAxODowODoxNSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9jZ3JvdXBfdjJfYWxsb2NhdGlvbl9mYWlsdXJlLmMgYi9jZ3JvdXBfdjJfYWxsb2NhdGlvbl9mYWlsdXJlLmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uOTM4Y2JmMDJhZTZmN2Fcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL2Nncm91cF92Ml9hbGxvY2F0aW9uX2ZhaWx1cmUuY1xuQEAgLTAsMCAmIzQzOzEsMTYwIEBAXG4mIzQzOyNkZWZpbmUgX0dOVV9TT1VSQ0VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjc3RkaW8uaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NzdGRsaWIuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2N1bmlzdGQuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NmY250bC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY3N5cy9tbWFuLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjc3lzL3N0YXQuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NzeXMvdHlwZXMuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NzeXMvd2FpdC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY3N0cmluZy5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2Vycm5vLmhcdTAwM2VcbiYjNDM7XG4mIzQzOyNkZWZpbmUgQ0dST1VQX1BBVEggXCYjMzQ7L3N5cy9mcy9jZ3JvdXBcJiMzNDtcbiYjNDM7I2RlZmluZSBURVNUX0NHUk9VUCBcJiMzNDt0ZXN0X3JlcHJvZHVjZXJcJiMzNDtcbiYjNDM7I2RlZmluZSBURVNUX0NHUk9VUF9QQVRIIENHUk9VUF9QQVRIIFwmIzM0Oy9cJiMzNDsgVEVTVF9DR1JPVVBcbiYjNDM7XG4mIzQzO3ZvaWQgd3JpdGVfZmlsZShjb25zdCBjaGFyICpwYXRoLCBjb25zdCBjaGFyICp2YWwpIHtcbiYjNDM7ICAgIGludCBmZCA9IG9wZW4ocGF0aCwgT19XUk9OTFkpO1xuJiM0MzsgICAgaWYgKGZkIFx1MDAzYyAwKSB7XG4mIzQzOyAgICAgICAgZnByaW50ZihzdGRlcnIsIFwmIzM0O0ZhaWxlZCB0byBvcGVuICVzOiAlc1xcblwmIzM0OywgcGF0aCwgc3RyZXJyb3IoZXJybm8pKTtcbiYjNDM7ICAgICAgICBleGl0KDEpO1xuJiM0MzsgICAgfVxuJiM0MzsgICAgaWYgKHdyaXRlKGZkLCB2YWwsIHN0cmxlbih2YWwpKSBcdTAwM2MgMCkge1xuJiM0MzsgICAgICAgIGZwcmludGYoc3RkZXJyLCBcJiMzNDtGYWlsZWQgdG8gd3JpdGUgJXMgdG8gJXM6ICVzXFxuXCYjMzQ7LCB2YWwsIHBhdGgsIHN0cmVycm9yKGVycm5vKSk7XG4mIzQzOyAgICAgICAgY2xvc2UoZmQpO1xuJiM0MzsgICAgICAgIGV4aXQoMSk7XG4mIzQzOyAgICB9XG4mIzQzOyAgICBjbG9zZShmZCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO2ludCBpc19odWdldGxiX2FjY291bnRpbmdfZW5hYmxlZCgpIHtcbiYjNDM7ICAgIEZJTEUgKmZwID0gZm9wZW4oXCYjMzQ7L3Byb2MvbW91bnRzXCYjMzQ7LCBcJiMzNDtyXCYjMzQ7KTtcbiYjNDM7ICAgIGlmICghZnApIHtcbiYjNDM7ICAgICAgICBwZXJyb3IoXCYjMzQ7Zm9wZW4gL3Byb2MvbW91bnRzXCYjMzQ7KTtcbiYjNDM7ICAgICAgICByZXR1cm4gLTE7XG4mIzQzOyAgICB9XG4mIzQzO1xuJiM0MzsgICAgY2hhciBsaW5lWzEwMjRdO1xuJiM0MzsgICAgaW50IGVuYWJsZWQgPSAwO1xuJiM0MzsgICAgd2hpbGUgKGZnZXRzKGxpbmUsIHNpemVvZihsaW5lKSwgZnApKSB7XG4mIzQzOyAgICAgICAgY2hhciBzcGVjWzI1Nl0sIGZpbGVbMjU2XSwgdHlwZVsyNTZdLCBvcHRzWzUxMl07XG4mIzQzOyAgICAgICAgaWYgKHNzY2FuZihsaW5lLCBcJiMzNDslMjU1cyAlMjU1cyAlMjU1cyAlNTExc1wmIzM0Oywgc3BlYywgZmlsZSwgdHlwZSwgb3B0cykgPT0gNCkge1xuJiM0MzsgICAgICAgICAgICBpZiAoc3RyY21wKGZpbGUsIENHUk9VUF9QQVRIKSA9PSAwIFx1MDAyNlx1MDAyNiBzdHJjbXAodHlwZSwgXCYjMzQ7Y2dyb3VwMlwmIzM0OykgPT0gMCkge1xuJiM0MzsgICAgICAgICAgICAgICAgaWYgKHN0cnN0cihvcHRzLCBcJiMzNDttZW1vcnlfaHVnZXRsYl9hY2NvdW50aW5nXCYjMzQ7KSAhPSBOVUxMKSB7XG4mIzQzOyAgICAgICAgICAgICAgICAgICAgZW5hYmxlZCA9IDE7XG4mIzQzOyAgICAgICAgICAgICAgICB9XG4mIzQzOyAgICAgICAgICAgICAgICBicmVhaztcbiYjNDM7ICAgICAgICAgICAgfVxuJiM0MzsgICAgICAgIH1cbiYjNDM7ICAgIH1cbiYjNDM7ICAgIGZjbG9zZShmcCk7XG4mIzQzOyAgICByZXR1cm4gZW5hYmxlZDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7aW50IGVuYWJsZV9odWdldGxiX2FjY291bnRpbmcoKSB7XG4mIzQzOyAgICBwcmludGYoXCYjMzQ7QXR0ZW1wdGluZyB0byByZW1vdW50IGNncm91cDIgd2l0aCBtZW1vcnlfaHVnZXRsYl9hY2NvdW50aW5nLi4uXFxuXCYjMzQ7KTtcbiYjNDM7ICAgIGludCByZXQgPSBzeXN0ZW0oXCYjMzQ7bW91bnQgLW8gcmVtb3VudCxtZW1vcnlfaHVnZXRsYl9hY2NvdW50aW5nIFwmIzM0OyBDR1JPVVBfUEFUSCk7XG4mIzQzOyAgICBpZiAocmV0ICE9IDApIHtcbiYjNDM7ICAgICAgICBmcHJpbnRmKHN0ZGVyciwgXCYjMzQ7RmFpbGVkIHRvIHJlbW91bnQ6IHN5c3RlbSgpIHJldHVybmVkICVkXFxuXCYjMzQ7LCByZXQpO1xuJiM0MzsgICAgICAgIHJldHVybiAtMTtcbiYjNDM7ICAgIH1cbiYjNDM7ICAgIHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztpbnQgbWFpbigpIHtcbiYjNDM7ICAgIHN0cnVjdCBzdGF0IHN0O1xuJiM0MzsgICAgaWYgKHN0YXQoQ0dST1VQX1BBVEgsIFx1MDAyNnN0KSAhPSAwIHx8ICFTX0lTRElSKHN0LnN0X21vZGUpKSB7XG4mIzQzOyAgICAgICAgZnByaW50ZihzdGRlcnIsIFwmIzM0O2Nncm91cCB2MiBub3QgbW91bnRlZCBhdCAlc1xcblwmIzM0OywgQ0dST1VQX1BBVEgpO1xuJiM0MzsgICAgICAgIHJldHVybiAxO1xuJiM0MzsgICAgfVxuJiM0MztcbiYjNDM7ICAgIGludCBlbmFibGVkID0gaXNfaHVnZXRsYl9hY2NvdW50aW5nX2VuYWJsZWQoKTtcbiYjNDM7ICAgIGlmIChlbmFibGVkIFx1MDAzYyAwKSB7XG4mIzQzOyAgICAgICAgcmV0dXJuIDE7XG4mIzQzOyAgICB9XG4mIzQzOyAgICBpZiAoIWVuYWJsZWQpIHtcbiYjNDM7ICAgICAgICBpZiAoZW5hYmxlX2h1Z2V0bGJfYWNjb3VudGluZygpICE9IDApIHtcbiYjNDM7ICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsIFwmIzM0O0NvdWxkIG5vdCBlbmFibGUgbWVtb3J5X2h1Z2V0bGJfYWNjb3VudGluZ1xcblwmIzM0Oyk7XG4mIzQzOyAgICAgICAgICAgIHJldHVybiAxO1xuJiM0MzsgICAgICAgIH1cbiYjNDM7ICAgICAgICAvLyBSZS1jaGVja1xuJiM0MzsgICAgICAgIGVuYWJsZWQgPSBpc19odWdldGxiX2FjY291bnRpbmdfZW5hYmxlZCgpO1xuJiM0MzsgICAgICAgIGlmIChlbmFibGVkIFx1MDAzYz0gMCkge1xuJiM0MzsgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgXCYjMzQ7RmFpbGVkIHRvIGVuYWJsZSBtZW1vcnlfaHVnZXRsYl9hY2NvdW50aW5nIChyZS1jaGVjayBmYWlsZWQpXFxuXCYjMzQ7KTtcbiYjNDM7ICAgICAgICAgICAgcmV0dXJuIDE7XG4mIzQzOyAgICAgICAgfVxuJiM0MzsgICAgICAgIHByaW50ZihcJiMzNDtTdWNjZXNzZnVsbHkgZW5hYmxlZCBtZW1vcnlfaHVnZXRsYl9hY2NvdW50aW5nXFxuXCYjMzQ7KTtcbiYjNDM7ICAgIH0gZWxzZSB7XG4mIzQzOyAgICAgICAgcHJpbnRmKFwmIzM0O21lbW9yeV9odWdldGxiX2FjY291bnRpbmcgaXMgYWxyZWFkeSBlbmFibGVkXFxuXCYjMzQ7KTtcbiYjNDM7ICAgIH1cbiYjNDM7XG4mIzQzOyAgICAvLyBFbmFibGUgbWVtb3J5IGNvbnRyb2xsZXIgaW4gc3VidHJlZVxuJiM0MzsgICAgaW50IGZkID0gb3BlbihDR1JPVVBfUEFUSCBcJiMzNDsvY2dyb3VwLnN1YnRyZWVfY29udHJvbFwmIzM0OywgT19XUk9OTFkpO1xuJiM0MzsgICAgaWYgKGZkIFx1MDAzZT0gMCkge1xuJiM0MzsgICAgICAgIGlmICh3cml0ZShmZCwgXCYjMzQ7JiM0MzttZW1vcnlcJiMzNDssIDcpIFx1MDAzYyAwKSB7XG4mIzQzOyAgICAgICAgICAgIC8vIE1pZ2h0IGZhaWwgaWYgYWxyZWFkeSBlbmFibGVkIG9yIG5vdCBzdXBwb3J0ZWQsIGlnbm9yZSBmb3Igbm93XG4mIzQzOyAgICAgICAgfVxuJiM0MzsgICAgICAgIGNsb3NlKGZkKTtcbiYjNDM7ICAgIH1cbiYjNDM7XG4mIzQzOyAgICBpZiAobWtkaXIoVEVTVF9DR1JPVVBfUEFUSCwgMDc1NSkgIT0gMCkge1xuJiM0MzsgICAgICAgIGlmIChlcnJubyAhPSBFRVhJU1QpIHtcbiYjNDM7ICAgICAgICAgICAgcGVycm9yKFwmIzM0O21rZGlyIHRlc3RfcmVwcm9kdWNlclwmIzM0Oyk7XG4mIzQzOyAgICAgICAgICAgIHJldHVybiAxO1xuJiM0MzsgICAgICAgIH1cbiYjNDM7ICAgIH1cbiYjNDM7XG4mIzQzOyAgICAvLyBTZXQgbWVtb3J5IGxpbWl0IHRvIDFNQiAobGVzcyB0aGFuIDJNQiBodWdlcGFnZSlcbiYjNDM7ICAgIHdyaXRlX2ZpbGUoVEVTVF9DR1JPVVBfUEFUSCBcJiMzNDsvbWVtb3J5Lm1heFwmIzM0OywgXCYjMzQ7MU1cJiMzNDspO1xuJiM0MztcbiYjNDM7ICAgIHBpZF90IHBpZCA9IGZvcmsoKTtcbiYjNDM7ICAgIGlmIChwaWQgXHUwMDNjIDApIHtcbiYjNDM7ICAgICAgICBwZXJyb3IoXCYjMzQ7Zm9ya1wmIzM0Oyk7XG4mIzQzOyAgICAgICAgcmV0dXJuIDE7XG4mIzQzOyAgICB9XG4mIzQzO1xuJiM0MzsgICAgaWYgKHBpZCA9PSAwKSB7XG4mIzQzOyAgICAgICAgLy8gQ2hpbGRcbiYjNDM7ICAgICAgICAvLyBNb3ZlIHRvIGNncm91cFxuJiM0MzsgICAgICAgIHdyaXRlX2ZpbGUoVEVTVF9DR1JPVVBfUEFUSCBcJiMzNDsvY2dyb3VwLnByb2NzXCYjMzQ7LCBcJiMzNDswXCYjMzQ7KTtcbiYjNDM7XG4mIzQzOyAgICAgICAgcHJpbnRmKFwmIzM0O0NoaWxkOiBBdHRlbXB0aW5nIHRvIGFsbG9jYXRlIGFuZCB0b3VjaCAyTUIgaHVnZXBhZ2UuLi5cXG5cJiMzNDspO1xuJiM0MzsgICAgICAgIC8vIEFsbG9jYXRlIDJNQiBodWdlcGFnZVxuJiM0MzsgICAgICAgIHNpemVfdCBzaXplID0gMiAqIDEwMjQgKiAxMDI0O1xuJiM0MzsgICAgICAgIHZvaWQgKmFkZHIgPSBtbWFwKE5VTEwsIHNpemUsIFBST1RfUkVBRCB8IFBST1RfV1JJVEUsXG4mIzQzOyAgICAgICAgICAgICAgICAgICAgICAgICAgTUFQX1BSSVZBVEUgfCBNQVBfQU5PTllNT1VTIHwgTUFQX0hVR0VUTEIsIC0xLCAwKTtcbiYjNDM7ICAgICAgICBpZiAoYWRkciA9PSBNQVBfRkFJTEVEKSB7XG4mIzQzOyAgICAgICAgICAgIHBlcnJvcihcJiMzNDtDaGlsZDogbW1hcCBNQVBfSFVHRVRMQlwmIzM0Oyk7XG4mIzQzOyAgICAgICAgICAgIGV4aXQoMSk7XG4mIzQzOyAgICAgICAgfVxuJiM0MztcbiYjNDM7ICAgICAgICBwcmludGYoXCYjMzQ7Q2hpbGQ6IG1tYXAgc3VjY2VlZGVkIGF0ICVwLCB0b3VjaGluZyBpdCBub3cgKHNob3VsZCB0cmlnZ2VyIGZhdWx0KS4uLlxcblwmIzM0OywgYWRkcik7XG4mIzQzOyAgICAgICAgLy8gVGhpcyBzaG91bGQgdHJpZ2dlciB0aGUgZmF1bHQgYW5kIGNhbGwgYWxsb2NfaHVnZXRsYl9mb2xpbyAtXHUwMDNlIG1lbV9jZ3JvdXBfY2hhcmdlX2h1Z2V0bGJcbiYjNDM7ICAgICAgICAvLyB3aGljaCBzaG91bGQgZmFpbCBhbmQgdHJpZ2dlciB0aGUgYnVnLlxuJiM0MzsgICAgICAgICoodm9sYXRpbGUgY2hhciAqKWFkZHIgPSAxO1xuJiM0MztcbiYjNDM7ICAgICAgICBwcmludGYoXCYjMzQ7Q2hpbGQ6IFN1Y2Nlc3NmdWxseSB0b3VjaGVkIHBhZ2UgKGJ1ZyBub3QgdHJpZ2dlcmVkPykuXFxuXCYjMzQ7KTtcbiYjNDM7ICAgICAgICBtdW5tYXAoYWRkciwgc2l6ZSk7XG4mIzQzOyAgICAgICAgZXhpdCgwKTtcbiYjNDM7ICAgIH1cbiYjNDM7XG4mIzQzOyAgICAvLyBQYXJlbnRcbiYjNDM7ICAgIGludCBzdGF0dXM7XG4mIzQzOyAgICB3YWl0cGlkKHBpZCwgXHUwMDI2c3RhdHVzLCAwKTtcbiYjNDM7XG4mIzQzOyAgICBwcmludGYoXCYjMzQ7UGFyZW50OiBDaGlsZCBleGl0ZWQuIENsZWFuaW5nIHVwLlxcblwmIzM0Oyk7XG4mIzQzOyAgICBybWRpcihURVNUX0NHUk9VUF9QQVRIKTtcbiYjNDM7XG4mIzQzOyAgICBpZiAoV0lGU0lHTkFMRUQoc3RhdHVzKSkge1xuJiM0MzsgICAgICAgIHByaW50ZihcJiMzNDtQYXJlbnQ6IENoaWxkIGtpbGxlZCBieSBzaWduYWwgJWQgKCVzKVxcblwmIzM0OyxcbiYjNDM7ICAgICAgICAgICAgICAgV1RFUk1TSUcoc3RhdHVzKSwgc3Ryc2lnbmFsKFdURVJNU0lHKHN0YXR1cykpKTtcbiYjNDM7ICAgICAgICBpZiAoV1RFUk1TSUcoc3RhdHVzKSA9PSBTSUdCVVMpIHtcbiYjNDM7ICAgICAgICAgICAgcHJpbnRmKFwmIzM0O1BhcmVudDogQ2hpbGQgZ290IFNJR0JVUyBhcyBleHBlY3RlZCAoaWYga2VybmVsIGRpZG4mIzM5O3QgY3Jhc2gpLlxcblwmIzM0Oyk7XG4mIzQzOyAgICAgICAgfVxuJiM0MzsgICAgfSBlbHNlIGlmIChXSUZFWElURUQoc3RhdHVzKSkge1xuJiM0MzsgICAgICAgIHByaW50ZihcJiMzNDtQYXJlbnQ6IENoaWxkIGV4aXRlZCB3aXRoIHN0YXR1cyAlZFxcblwmIzM0OywgV0VYSVRTVEFUVVMoc3RhdHVzKSk7XG4mIzQzOyAgICB9XG4mIzQzO1xuJiM0MzsgICAgcmV0dXJuIDA7XG4mIzQzO31cbmRpZmYgLS1naXQgYS9mcy9odWdldGxiZnMvaW5vZGUuYyBiL2ZzL2h1Z2V0bGJmcy9pbm9kZS5jXG5pbmRleCAyMTZlMWEwZGQwYjIzNy4uOGFiZTA1NzRiMWM3ZWEgMTAwNjQ0XG4tLS0gYS9mcy9odWdldGxiZnMvaW5vZGUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMvaHVnZXRsYmZzL2lub2RlLmNcbkBAIC0yNSw2ICYjNDM7MjUsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2N0eXBlLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9iYWNraW5nLWRldi5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvaHVnZXRsYi5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFwmIzM0Oy4uLy4uL21tL2h1Z2V0bGJfc3VicG9vbC5oXCYjMzQ7XG4gI2luY2x1ZGUgXHUwMDNjbGludXgvZm9saW9fYmF0Y2guaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2ZzX3BhcnNlci5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbW1hbi5oXHUwMDNlXG5AQCAtMTA1OSw3ICYjNDM7MTA2MCw2IEBAIHN0YXRpYyBpbnQgaHVnZXRsYmZzX3Nob3dfb3B0aW9ucyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHN0cnVjdCBkZW50cnkgKnJvb3QpXG4gXHRzdHJ1Y3QgaHVnZXRsYmZzX3NiX2luZm8gKnNiaW5mbyA9IEhVR0VUTEJGU19TQihyb290LVx1MDAzZWRfc2IpO1xuIFx0c3RydWN0IGh1Z2VwYWdlX3N1YnBvb2wgKnNwb29sID0gc2JpbmZvLVx1MDAzZXNwb29sO1xuIFx0dW5zaWduZWQgbG9uZyBocGFnZV9zaXplID0gaHVnZV9wYWdlX3NpemUoc2JpbmZvLVx1MDAzZWhzdGF0ZSk7XG4tXHR1bnNpZ25lZCBocGFnZV9zaGlmdCA9IGh1Z2VfcGFnZV9zaGlmdChzYmluZm8tXHUwMDNlaHN0YXRlKTtcbiBcdGNoYXIgbW9kO1xuIFxuIFx0aWYgKCF1aWRfZXEoc2JpbmZvLVx1MDAzZXVpZCwgR0xPQkFMX1JPT1RfVUlEKSlcbkBAIC0xMDgxLDEyICYjNDM7MTA4MSwxMyBAQCBzdGF0aWMgaW50IGh1Z2V0bGJmc19zaG93X29wdGlvbnMoc3RydWN0IHNlcV9maWxlICptLCBzdHJ1Y3QgZGVudHJ5ICpyb290KVxuIFx0fVxuIFx0c2VxX3ByaW50ZihtLCBcJiMzNDsscGFnZXNpemU9JWx1JWNcJiMzNDssIGhwYWdlX3NpemUsIG1vZCk7XG4gXHRpZiAoc3Bvb2wpIHtcbi1cdFx0aWYgKHNwb29sLVx1MDAzZW1heF9ocGFnZXMgIT0gLTEpXG4tXHRcdFx0c2VxX3ByaW50ZihtLCBcJiMzNDssc2l6ZT0lbGx1XCYjMzQ7LFxuLVx0XHRcdFx0ICAgKHVuc2lnbmVkIGxvbmcgbG9uZylzcG9vbC1cdTAwM2VtYXhfaHBhZ2VzIFx1MDAzY1x1MDAzYyBocGFnZV9zaGlmdCk7XG4tXHRcdGlmIChzcG9vbC1cdTAwM2VtaW5faHBhZ2VzICE9IC0xKVxuLVx0XHRcdHNlcV9wcmludGYobSwgXCYjMzQ7LG1pbl9zaXplPSVsbHVcJiMzNDssXG4tXHRcdFx0XHQgICAodW5zaWduZWQgbG9uZyBsb25nKXNwb29sLVx1MDAzZW1pbl9ocGFnZXMgXHUwMDNjXHUwMDNjIGhwYWdlX3NoaWZ0KTtcbiYjNDM7XHRcdHVuc2lnbmVkIGxvbmcgbG9uZyBtYXhfc2l6ZSA9IGh1Z2VwYWdlX3N1YnBvb2xfbWF4X3NpemUoc3Bvb2wpO1xuJiM0MztcdFx0dW5zaWduZWQgbG9uZyBsb25nIG1pbl9zaXplID0gaHVnZXBhZ2Vfc3VicG9vbF9taW5fc2l6ZShzcG9vbCk7XG4mIzQzO1xuJiM0MztcdFx0aWYgKG1heF9zaXplICE9IC0xVUxMKVxuJiM0MztcdFx0XHRzZXFfcHJpbnRmKG0sIFwmIzM0OyxzaXplPSVsbHVcJiMzNDssIG1heF9zaXplKTtcbiYjNDM7XHRcdGlmIChtaW5fc2l6ZSAhPSAtMVVMTClcbiYjNDM7XHRcdFx0c2VxX3ByaW50ZihtLCBcJiMzNDssbWluX3NpemU9JWxsdVwmIzM0OywgbWluX3NpemUpO1xuIFx0fVxuIFx0cmV0dXJuIDA7XG4gfVxuQEAgLTExMDUsMTQgJiM0MzsxMTA2LDggQEAgc3RhdGljIGludCBodWdldGxiZnNfc3RhdGZzKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGtzdGF0ZnMgKmJ1ZilcbiBcdFx0LyogSWYgbm8gbGltaXRzIHNldCwganVzdCByZXBvcnQgMCBvciAtMSBmb3IgbWF4L2ZyZWUvdXNlZFxuIFx0XHQgKiBibG9ja3MsIGxpa2Ugc2ltcGxlX3N0YXRmcygpICovXG4gXHRcdGlmIChzYmluZm8tXHUwMDNlc3Bvb2wpIHtcbi1cdFx0XHRsb25nIGZyZWVfcGFnZXM7XG4tXG4tXHRcdFx0c3Bpbl9sb2NrX2lycShcdTAwMjZzYmluZm8tXHUwMDNlc3Bvb2wtXHUwMDNlbG9jayk7XG4tXHRcdFx0YnVmLVx1MDAzZWZfYmxvY2tzID0gc2JpbmZvLVx1MDAzZXNwb29sLVx1MDAzZW1heF9ocGFnZXM7XG4tXHRcdFx0ZnJlZV9wYWdlcyA9IHNiaW5mby1cdTAwM2VzcG9vbC1cdTAwM2VtYXhfaHBhZ2VzXG4tXHRcdFx0XHQtIHNiaW5mby1cdTAwM2VzcG9vbC1cdTAwM2V1c2VkX2hwYWdlcztcbi1cdFx0XHRidWYtXHUwMDNlZl9iYXZhaWwgPSBidWYtXHUwMDNlZl9iZnJlZSA9IGZyZWVfcGFnZXM7XG4tXHRcdFx0c3Bpbl91bmxvY2tfaXJxKFx1MDAyNnNiaW5mby1cdTAwM2VzcG9vbC1cdTAwM2Vsb2NrKTtcbiYjNDM7XHRcdFx0YnVmLVx1MDAzZWZfYmxvY2tzID0gaHVnZXBhZ2Vfc3VicG9vbF9tYXhfaHBhZ2VzKHNiaW5mby1cdTAwM2VzcG9vbCk7XG4mIzQzO1x0XHRcdGJ1Zi1cdTAwM2VmX2JhdmFpbCA9IGJ1Zi1cdTAwM2VmX2JmcmVlID0gaHVnZXBhZ2Vfc3VicG9vbF9mcmVlX2hwYWdlcyhzYmluZm8tXHUwMDNlc3Bvb2wpO1xuIFx0XHRcdGJ1Zi1cdTAwM2VmX2ZpbGVzID0gc2JpbmZvLVx1MDAzZW1heF9pbm9kZXM7XG4gXHRcdFx0YnVmLVx1MDAzZWZfZmZyZWUgPSBzYmluZm8tXHUwMDNlZnJlZV9pbm9kZXM7XG4gXHRcdH1cbmRpZmYgLS1naXQgYS9odWdldGxiX3Jlc2VydmVfcGFnZXNfb3V0X3B1dF9wYWdlcy5jIGIvaHVnZXRsYl9yZXNlcnZlX3BhZ2VzX291dF9wdXRfcGFnZXMuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi45ZTYzZmM4OTk3ZDU3ZFxuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvaHVnZXRsYl9yZXNlcnZlX3BhZ2VzX291dF9wdXRfcGFnZXMuY1xuQEAgLTAsMCAmIzQzOzEsNDkgQEBcbiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbiYjNDM7I2RlZmluZSBfR05VX1NPVVJDRVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NzdGRpby5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY3N0ZGxpYi5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY3VuaXN0ZC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY3N5cy9tbWFuLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjZmNudGwuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NlcnIuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NlcnJuby5oXHUwMDNlXG4mIzQzO1xuJiM0MztpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpXG4mIzQzO3tcbiYjNDM7XHRjb25zdCBjaGFyICpmaWxlX3BhdGg7XG4mIzQzO1x0c2l6ZV90IHNpemU7XG4mIzQzO1x0aW50IGZkO1xuJiM0MztcdHZvaWQgKmFkZHI7XG4mIzQzO1xuJiM0MztcdGlmIChhcmdjIFx1MDAzYyAzKSB7XG4mIzQzO1x0XHRmcHJpbnRmKHN0ZGVyciwgXCYjMzQ7VXNhZ2U6ICVzIFx1MDAzY2h1Z2V0bGJmc19maWxlXHUwMDNlIFx1MDAzY3NpemVfaW5fYnl0ZXNcdTAwM2VcXG5cJiMzNDssXG4mIzQzO1x0XHRcdGFyZ3ZbMF0pO1xuJiM0MztcdFx0cmV0dXJuIDE7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRmaWxlX3BhdGggPSBhcmd2WzFdO1xuJiM0MztcdHNpemUgPSBzdHJ0b3VsbChhcmd2WzJdLCBOVUxMLCAwKTtcbiYjNDM7XG4mIzQzO1x0ZmQgPSBvcGVuKGZpbGVfcGF0aCwgT19DUkVBVCB8IE9fUkRXUiwgMDY2Nik7XG4mIzQzO1x0aWYgKGZkIFx1MDAzYyAwKVxuJiM0MztcdFx0ZXJyKDEsIFwmIzM0O29wZW5cJiMzNDspO1xuJiM0MztcbiYjNDM7XHRwcmludGYoXCYjMzQ7QXR0ZW1wdGluZyB0byBtbWFwICV6dSBieXRlcyBzaGFyZWQgb24gJXMuLi5cXG5cJiMzNDssIHNpemUsXG4mIzQzO1x0ICAgICAgIGZpbGVfcGF0aCk7XG4mIzQzO1x0YWRkciA9IG1tYXAoTlVMTCwgc2l6ZSwgUFJPVF9SRUFEIHwgUFJPVF9XUklURSwgTUFQX1NIQVJFRCwgZmQsIDApO1xuJiM0MztcdGlmIChhZGRyID09IE1BUF9GQUlMRUQpIHtcbiYjNDM7XHRcdGlmIChlcnJubyA9PSBFTk9NRU0pIHtcbiYjNDM7XHRcdFx0cHJpbnRmKFwmIzM0O21tYXAgZmFpbGVkIHdpdGggRU5PTUVNIGFzIGV4cGVjdGVkLlxcblwmIzM0Oyk7XG4mIzQzO1x0XHRcdGNsb3NlKGZkKTtcbiYjNDM7XHRcdFx0cmV0dXJuIDA7XG4mIzQzO1x0XHR9XG4mIzQzO1x0XHRwZXJyb3IoXCYjMzQ7bW1hcCBmYWlsZWQgd2l0aCB1bmV4cGVjdGVkIGVycm9yXCYjMzQ7KTtcbiYjNDM7XHRcdGNsb3NlKGZkKTtcbiYjNDM7XHRcdHJldHVybiAxO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cHJpbnRmKFwmIzM0O0VSUk9SOiBtbWFwIFNVQ0NFRURFRCB1bmV4cGVjdGVkbHkgYXQgJXBcXG5cJiMzNDssIGFkZHIpO1xuJiM0MztcdG11bm1hcChhZGRyLCBzaXplKTtcbiYjNDM7XHRjbG9zZShmZCk7XG4mIzQzO1x0cmV0dXJuIDE7XG4mIzQzO31cbmRpZmYgLS1naXQgYS9odWdldGxiX3Jlc2VydmVfcGFnZXNfb3V0X3B1dF9wYWdlcy5zaCBiL2h1Z2V0bGJfcmVzZXJ2ZV9wYWdlc19vdXRfcHV0X3BhZ2VzLnNoXG5uZXcgZmlsZSBtb2RlIDEwMDc1NVxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLjAzMGUxOTE1NTM5YjRlXG4tLS0gL2Rldi9udWxsXG4mIzQzOyYjNDM7JiM0MzsgYi9odWdldGxiX3Jlc2VydmVfcGFnZXNfb3V0X3B1dF9wYWdlcy5zaFxuQEAgLTAsMCAmIzQzOzEsMTUzIEBAXG4mIzQzOyMhL2Jpbi9iYXNoXG4mIzQzOyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbiYjNDM7c2V0IC1lXG4mIzQzO1xuJiM0MztpZiBbIFwmIzM0OyRFVUlEXCYjMzQ7IC1uZSAwIF07IHRoZW5cbiYjNDM7ICAgIGVjaG8gXCYjMzQ7UGxlYXNlIHJ1biBhcyByb290XCYjMzQ7XG4mIzQzOyAgICBleGl0IDFcbiYjNDM7ZmlcbiYjNDM7XG4mIzQzO1NDUklQVF9ESVI9XCYjMzQ7JChjZCBcJiMzNDskKGRpcm5hbWUgXCYjMzQ7JHtCQVNIX1NPVVJDRVswXX1cJiMzNDspXCYjMzQ7IFx1MDAyNlx1MDAyNiBwd2QpXCYjMzQ7XG4mIzQzO2NkIFwmIzM0OyRTQ1JJUFRfRElSXCYjMzQ7XG4mIzQzO1xuJiM0MzsjIERldGVjdCBkZWZhdWx0IGh1Z2VwYWdlIHNpemUgdG8gc3VwcG9ydCBib3RoIDJNQiBhbmQgMUdCIHBhZ2VzIHJvYnVzdGx5XG4mIzQzO2hwej0kKGdyZXAgLWkgaHVnZXBhZ2VzaXplIC9wcm9jL21lbWluZm8gfCBhd2sgJiMzOTt7cHJpbnQgJDJ9JiMzOTspXG4mIzQzO2tiPSRocHpcbiYjNDM7bWI9JCgoa2IgLyAxMDI0KSlcbiYjNDM7aHBhZ2Vfc2l6ZV9ieXRlcz0kKChrYiAqIDEwMjQpKVxuJiM0MztcbiYjNDM7aHBhZ2VfZGlyPVwmIzM0O2h1Z2VwYWdlcy0ke2tifWtCXCYjMzQ7XG4mIzQzO1NZU0ZTX1BBVEg9XCYjMzQ7L3N5cy9rZXJuZWwvbW0vaHVnZXBhZ2VzLyRocGFnZV9kaXJcJiMzNDtcbiYjNDM7XG4mIzQzO01OVF9QQVRIPVwmIzM0Oy90bXAvbW50X2h1Z2V0bGJfcmVwcm9cJiMzNDtcbiYjNDM7RklMRV9QQVRIPVwmIzM0OyRNTlRfUEFUSC90ZXN0X2ZpbGVcJiMzNDtcbiYjNDM7XG4mIzQzOyMgU2F2ZSBvcmlnaW5hbCB2YWx1ZXMgZm9yIHNhZmUgcmVzdG9yYXRpb25cbiYjNDM7b3JpZ19ucj0kKGNhdCBcJiMzNDskU1lTRlNfUEFUSC9ucl9odWdlcGFnZXNcJiMzNDspXG4mIzQzO29yaWdfb3ZlcmNvbW1pdD0kKGNhdCBcJiMzNDskU1lTRlNfUEFUSC9ucl9vdmVyY29tbWl0X2h1Z2VwYWdlc1wmIzM0OylcbiYjNDM7XG4mIzQzO2NsZWFudXAoKSB7XG4mIzQzOyAgICBlY2hvIFwmIzM0O0NsZWFuaW5nIHVwLi4uXCYjMzQ7XG4mIzQzOyAgICBybSAtZiBcJiMzNDskRklMRV9QQVRIXCYjMzQ7XG4mIzQzOyAgICB1bW91bnQgXCYjMzQ7JE1OVF9QQVRIXCYjMzQ7IDJcdTAwM2UvZGV2L251bGxcbiYjNDM7ICAgIHJtZGlyIFwmIzM0OyRNTlRfUEFUSFwmIzM0OyAyXHUwMDNlL2Rldi9udWxsXG4mIzQzOyAgICBlY2hvIFwmIzM0OyRvcmlnX25yXCYjMzQ7IFx1MDAzZSBcJiMzNDskU1lTRlNfUEFUSC9ucl9odWdlcGFnZXNcJiMzNDtcbiYjNDM7ICAgIGVjaG8gXCYjMzQ7JG9yaWdfb3ZlcmNvbW1pdFwmIzM0OyBcdTAwM2UgXCYjMzQ7JFNZU0ZTX1BBVEgvbnJfb3ZlcmNvbW1pdF9odWdlcGFnZXNcJiMzNDtcbiYjNDM7ICAgIGVjaG8gXCYjMzQ7Q2xlYW51cCBkb25lLlwmIzM0O1xuJiM0Mzt9XG4mIzQzO3RyYXAgY2xlYW51cCBFWElUXG4mIzQzO1xuJiM0MzsjIFZlcmlmeSByZXByb2R1Y2VyIGJpbmFyeSBleGlzdHNcbiYjNDM7aWYgWyAhIC14IC4vaHVnZXRsYl9yZXNlcnZlX3BhZ2VzX291dF9wdXRfcGFnZXMgXTsgdGhlblxuJiM0MzsgICAgZWNobyBcJiMzNDtyZXByb2R1Y2VyIGJpbmFyeSAmIzM5Oy4vaHVnZXRsYl9yZXNlcnZlX3BhZ2VzX291dF9wdXRfcGFnZXMmIzM5OyBub3QgZm91bmQgb3Igbm90IGV4ZWN1dGFibGUuXCYjMzQ7XG4mIzQzOyAgICBlY2hvIFwmIzM0O1BsZWFzZSBjb21waWxlIGl0IGZpcnN0OiBnY2MgLXN0YXRpYyAtbyBodWdldGxiX3Jlc2VydmVfcGFnZXNfb3V0X3B1dF9wYWdlcyBodWdldGxiX3Jlc2VydmVfcGFnZXNfb3V0X3B1dF9wYWdlcy5jXCYjMzQ7XG4mIzQzOyAgICBleGl0IDFcbiYjNDM7ZmlcbiYjNDM7XG4mIzQzOyMgMS4gU2V0IGdsb2JhbCBwb29sIHN1Y2ggdGhhdCBvbmx5IHRoZSBtb3VudC10aW1lIHJlc2VydmF0aW9uIGNhbiBzdWNjZWVkXG4mIzQzO2VjaG8gMSBcdTAwM2UgXCYjMzQ7JFNZU0ZTX1BBVEgvbnJfaHVnZXBhZ2VzXCYjMzQ7XG4mIzQzO2VjaG8gMCBcdTAwM2UgXCYjMzQ7JFNZU0ZTX1BBVEgvbnJfb3ZlcmNvbW1pdF9odWdlcGFnZXNcJiMzNDtcbiYjNDM7XG4mIzQzO2luaXRpYWxfcmVzdj0kKGNhdCBcJiMzNDskU1lTRlNfUEFUSC9yZXN2X2h1Z2VwYWdlc1wmIzM0OylcbiYjNDM7ZWNobyBcJiMzNDtJbml0aWFsIHJlc3ZfaHVnZXBhZ2VzIChiZWZvcmUgbW91bnQpOiAkaW5pdGlhbF9yZXN2XCYjMzQ7XG4mIzQzO1xuJiM0MzsjIDIuIE1vdW50IHdpdGggbWluX3NpemUgPSAxIHBhZ2UsIG1heCBzaXplID0gMiBwYWdlc1xuJiM0MzttaW5fc2l6ZV9zdHI9XCYjMzQ7JHttYn1NXCYjMzQ7XG4mIzQzO21heF9zaXplX3N0cj1cJiMzNDskKChtYiAqIDIpKU1cJiMzNDtcbiYjNDM7bW1hcF9zaXplX2J5dGVzPSQoKGhwYWdlX3NpemVfYnl0ZXMgKiAyKSlcbiYjNDM7XG4mIzQzO21rZGlyIC1wIFwmIzM0OyRNTlRfUEFUSFwmIzM0O1xuJiM0MztlY2hvIFwmIzM0O01vdW50aW5nIGh1Z2V0bGJmcyB3aXRoIHBhZ2VzaXplPSR7bWJ9TSwgbWluX3NpemU9JG1pbl9zaXplX3N0ciwgc2l6ZT0kbWF4X3NpemVfc3RyLi4uXCYjMzQ7XG4mIzQzO2lmICEgbW91bnQgLXQgaHVnZXRsYmZzIC1vIFwmIzM0O3BhZ2VzaXplPSR7bWJ9TSxtaW5fc2l6ZT0kbWluX3NpemVfc3RyLHNpemU9JG1heF9zaXplX3N0clwmIzM0OyBub25lIFwmIzM0OyRNTlRfUEFUSFwmIzM0OzsgdGhlblxuJiM0MzsgICAgZWNobyBcJiMzNDtGYWlsZWQgdG8gbW91bnQgaHVnZXRsYmZzXCYjMzQ7XG4mIzQzOyAgICBleGl0IDFcbiYjNDM7ZmlcbiYjNDM7XG4mIzQzO3Jlc3ZfYWZ0ZXJfbW91bnQ9JChjYXQgXCYjMzQ7JFNZU0ZTX1BBVEgvcmVzdl9odWdlcGFnZXNcJiMzNDspXG4mIzQzO2VjaG8gXCYjMzQ7cmVzdl9odWdlcGFnZXMgYWZ0ZXIgbW91bnQ6ICRyZXN2X2FmdGVyX21vdW50XCYjMzQ7XG4mIzQzO2V4cGVjdGVkX2FmdGVyX21vdW50PSQoKGluaXRpYWxfcmVzdiAmIzQzOyAxKSlcbiYjNDM7aWYgWyBcJiMzNDskcmVzdl9hZnRlcl9tb3VudFwmIzM0OyAhPSBcJiMzNDskZXhwZWN0ZWRfYWZ0ZXJfbW91bnRcJiMzNDsgXTsgdGhlblxuJiM0MzsgICAgZWNobyBcJiMzNDtFUlJPUjogcmVzdl9odWdlcGFnZXMgaXMgbm90ICRleHBlY3RlZF9hZnRlcl9tb3VudCBhZnRlciBtb3VudCAoYWN0dWFsOiAkcmVzdl9hZnRlcl9tb3VudCkhXCYjMzQ7XG4mIzQzOyAgICBleGl0IDFcbiYjNDM7ZmlcbiYjNDM7XG4mIzQzOyMgQ2hlY2sgbW91bnQgc3RhdHMgYWZ0ZXIgbW91bnRcbiYjNDM7ZXhwZWN0ZWRfYnNpemU9JGhwYWdlX3NpemVfYnl0ZXNcbiYjNDM7YnNpemVfUz0kKHN0YXQgLWYgLWMgXCYjMzQ7JVNcJiMzNDsgXCYjMzQ7JE1OVF9QQVRIXCYjMzQ7KVxuJiM0Mztic2l6ZV9zPSQoc3RhdCAtZiAtYyBcJiMzNDslc1wmIzM0OyBcJiMzNDskTU5UX1BBVEhcJiMzNDspXG4mIzQzO2VjaG8gXCYjMzQ7TW91bnQgYmxvY2sgc2l6ZSBhZnRlciBtb3VudDogJGJzaXplX1MgLyAkYnNpemVfcyAoZXhwZWN0ZWQ6ICRleHBlY3RlZF9ic2l6ZSlcJiMzNDtcbiYjNDM7aWYgWyBcJiMzNDskYnNpemVfU1wmIzM0OyAhPSBcJiMzNDskZXhwZWN0ZWRfYnNpemVcJiMzNDsgXSBcdTAwMjZcdTAwMjYgWyBcJiMzNDskYnNpemVfc1wmIzM0OyAhPSBcJiMzNDskZXhwZWN0ZWRfYnNpemVcJiMzNDsgXTsgdGhlblxuJiM0MzsgICAgZWNobyBcJiMzNDtFUlJPUjogVW5leHBlY3RlZCBtb3VudCBibG9jayBzaXplIGFmdGVyIG1vdW50IChhY3R1YWwgUzokYnNpemVfUyBzOiRic2l6ZV9zLCBleHBlY3RlZDogJGV4cGVjdGVkX2JzaXplKVwmIzM0O1xuJiM0MzsgICAgZXhpdCAxXG4mIzQzO2ZpXG4mIzQzO1xuJiM0MzthY3R1YWxfc3RhdHNfbW91bnQ9JChzdGF0IC1mIC1jIFwmIzM0OyViICVmICVhXCYjMzQ7IFwmIzM0OyRNTlRfUEFUSFwmIzM0OylcbiYjNDM7ZXhwZWN0ZWRfc3RhdHNfbW91bnQ9XCYjMzQ7MiAyIDJcJiMzNDtcbiYjNDM7ZWNobyBcJiMzNDtNb3VudCBzdGF0cyBhZnRlciBtb3VudCAodG90YWwgZnJlZSBhdmFpbCk6ICRhY3R1YWxfc3RhdHNfbW91bnQgKGV4cGVjdGVkOiAkZXhwZWN0ZWRfc3RhdHNfbW91bnQpXCYjMzQ7XG4mIzQzO2lmIFsgXCYjMzQ7JGFjdHVhbF9zdGF0c19tb3VudFwmIzM0OyAhPSBcJiMzNDskZXhwZWN0ZWRfc3RhdHNfbW91bnRcJiMzNDsgXTsgdGhlblxuJiM0MzsgICAgZWNobyBcJiMzNDtFUlJPUjogVW5leHBlY3RlZCBtb3VudCBzdGF0cyBhZnRlciBtb3VudDogJGFjdHVhbF9zdGF0c19tb3VudCAoZXhwZWN0ZWQ6ICRleHBlY3RlZF9zdGF0c19tb3VudClcJiMzNDtcbiYjNDM7ICAgIGV4aXQgMVxuJiM0MztmaVxuJiM0MztcbiYjNDM7IyAzLiBSdW4gdGhlIHJlcHJvZHVjZXIgdG8gdHJpZ2dlciB0aGUgb3V0X3B1dF9wYWdlcyBmYWlsdXJlIHBhdGhcbiYjNDM7ZWNobyBcJiMzNDtSdW5uaW5nIHJlcHJvZHVjZXIgKGV4cGVjdGluZyBtbWFwIGZhaWx1cmUgd2l0aCBFTk9NRU0pLi4uXCYjMzQ7XG4mIzQzO2lmIC4vaHVnZXRsYl9yZXNlcnZlX3BhZ2VzX291dF9wdXRfcGFnZXMgXCYjMzQ7JEZJTEVfUEFUSFwmIzM0OyBcJiMzNDskbW1hcF9zaXplX2J5dGVzXCYjMzQ7OyB0aGVuXG4mIzQzOyAgICBlY2hvIFwmIzM0O1JlcHJvZHVjZXIgZmluaXNoZWQgc3VjY2Vzc2Z1bGx5LlwmIzM0O1xuJiM0MzsgICAgcmVzdl9hZnRlcl9tbWFwPSQoY2F0IFwmIzM0OyRTWVNGU19QQVRIL3Jlc3ZfaHVnZXBhZ2VzXCYjMzQ7KVxuJiM0MzsgICAgZWNobyBcJiMzNDtyZXN2X2h1Z2VwYWdlcyBhZnRlciBmYWlsZWQgbW1hcDogJHJlc3ZfYWZ0ZXJfbW1hcFwmIzM0O1xuJiM0MzsgICAgZXhwZWN0ZWRfYWZ0ZXJfbW1hcD0kZXhwZWN0ZWRfYWZ0ZXJfbW91bnRcbiYjNDM7ICAgIGlmIFsgXCYjMzQ7JHJlc3ZfYWZ0ZXJfbW1hcFwmIzM0OyA9IFwmIzM0OyRleHBlY3RlZF9hZnRlcl9tbWFwXCYjMzQ7IF07IHRoZW5cbiYjNDM7ICAgICAgICBlY2hvIFwmIzM0O1JFU1VMVDogb3V0X3B1dF9wYWdlcyBFWEVSQ0lTRUQgKHJlc3ZfaHVnZXBhZ2VzIHByZXNlcnZlZCBhdCAkZXhwZWN0ZWRfYWZ0ZXJfbW1hcCBhcyBleHBlY3RlZClcJiMzNDtcbiYjNDM7XG4mIzQzOyAgICAgICAgIyBDaGVjayBtb3VudCBzdGF0c1xuJiM0MzsgICAgICAgIGV4cGVjdGVkX2JzaXplPSRocGFnZV9zaXplX2J5dGVzXG4mIzQzOyAgICAgICAgYnNpemVfUz0kKHN0YXQgLWYgLWMgXCYjMzQ7JVNcJiMzNDsgXCYjMzQ7JE1OVF9QQVRIXCYjMzQ7KVxuJiM0MzsgICAgICAgIGJzaXplX3M9JChzdGF0IC1mIC1jIFwmIzM0OyVzXCYjMzQ7IFwmIzM0OyRNTlRfUEFUSFwmIzM0OylcbiYjNDM7ICAgICAgICBlY2hvIFwmIzM0O01vdW50IGJsb2NrIHNpemU6ICRic2l6ZV9TIC8gJGJzaXplX3MgKGV4cGVjdGVkOiAkZXhwZWN0ZWRfYnNpemUpXCYjMzQ7XG4mIzQzOyAgICAgICAgaWYgWyBcJiMzNDskYnNpemVfU1wmIzM0OyAhPSBcJiMzNDskZXhwZWN0ZWRfYnNpemVcJiMzNDsgXSBcdTAwMjZcdTAwMjYgWyBcJiMzNDskYnNpemVfc1wmIzM0OyAhPSBcJiMzNDskZXhwZWN0ZWRfYnNpemVcJiMzNDsgXTsgdGhlblxuJiM0MzsgICAgICAgICAgICBlY2hvIFwmIzM0O0VSUk9SOiBVbmV4cGVjdGVkIG1vdW50IGJsb2NrIHNpemUgKGFjdHVhbCBTOiRic2l6ZV9TIHM6JGJzaXplX3MsIGV4cGVjdGVkOiAkZXhwZWN0ZWRfYnNpemUpXCYjMzQ7XG4mIzQzOyAgICAgICAgICAgIGV4aXQgMVxuJiM0MzsgICAgICAgIGZpXG4mIzQzO1xuJiM0MzsgICAgICAgIGFjdHVhbF9zdGF0cz0kKHN0YXQgLWYgLWMgXCYjMzQ7JWIgJWYgJWFcJiMzNDsgXCYjMzQ7JE1OVF9QQVRIXCYjMzQ7KVxuJiM0MzsgICAgICAgIGV4cGVjdGVkX3N0YXRzPVwmIzM0OzIgMiAyXCYjMzQ7XG4mIzQzOyAgICAgICAgZWNobyBcJiMzNDtNb3VudCBzdGF0cyAodG90YWwgZnJlZSBhdmFpbCk6ICRhY3R1YWxfc3RhdHMgKGV4cGVjdGVkOiAkZXhwZWN0ZWRfc3RhdHMpXCYjMzQ7XG4mIzQzOyAgICAgICAgaWYgWyBcJiMzNDskYWN0dWFsX3N0YXRzXCYjMzQ7ICE9IFwmIzM0OyRleHBlY3RlZF9zdGF0c1wmIzM0OyBdOyB0aGVuXG4mIzQzOyAgICAgICAgICAgIGVjaG8gXCYjMzQ7UkVTVUxUOiBVbmV4cGVjdGVkIG1vdW50IHN0YXRzIGFmdGVyIGZhaWxlZCBtbWFwIChGQUlMKVwmIzM0O1xuJiM0MzsgICAgICAgICAgICBleGl0IDFcbiYjNDM7ICAgICAgICBlbHNlXG4mIzQzOyAgICAgICAgICAgIGVjaG8gXCYjMzQ7UkVTVUxUOiBNb3VudCBzdGF0cyByZXN0b3JlZCB0byAkZXhwZWN0ZWRfc3RhdHMgYXMgZXhwZWN0ZWQgKFBBU1MpXCYjMzQ7XG4mIzQzOyAgICAgICAgZmlcbiYjNDM7ICAgIGVsc2VcbiYjNDM7ICAgICAgICBlY2hvIFwmIzM0O1JFU1VMVDogVW5leHBlY3RlZCByZXN2X2h1Z2VwYWdlcyB2YWx1ZTogJHJlc3ZfYWZ0ZXJfbW1hcCAoZXhwZWN0ZWQ6ICRleHBlY3RlZF9hZnRlcl9tbWFwKVwmIzM0O1xuJiM0MzsgICAgICAgIGV4aXQgMVxuJiM0MzsgICAgZmlcbiYjNDM7ZWxzZVxuJiM0MzsgICAgZWNobyBcJiMzNDtGQUlMOiBSZXByb2R1Y2VyIHJldHVybmVkIG5vbi16ZXJvIChtbWFwIGRpZG4mIzM5O3QgZmFpbCB3aXRoIEVOT01FTSlcJiMzNDtcbiYjNDM7ICAgIGV4aXQgMVxuJiM0MztmaVxuJiM0MztcbiYjNDM7IyA0LiBEaXNhYmxlIHRyYXAgYW5kIGRvIG1hbnVhbCBjbGVhbnVwIHRvIGNoZWNrIGZvciBmaW5hbCB1bm1vdW50IHVuZGVyZmxvd1xuJiM0Mzt0cmFwIC0gRVhJVFxuJiM0MztcbiYjNDM7ZWNobyBcJiMzNDtVbm1vdW50aW5nLi4uXCYjMzQ7XG4mIzQzO3Vtb3VudCBcJiMzNDskTU5UX1BBVEhcJiMzNDtcbiYjNDM7cm1kaXIgXCYjMzQ7JE1OVF9QQVRIXCYjMzQ7XG4mIzQzO1xuJiM0MztmaW5hbF9yZXN2PSQoY2F0IFwmIzM0OyRTWVNGU19QQVRIL3Jlc3ZfaHVnZXBhZ2VzXCYjMzQ7KVxuJiM0MztlY2hvIFwmIzM0O0ZpbmFsIHJlc3ZfaHVnZXBhZ2VzIChhZnRlciB1bm1vdW50KTogJGZpbmFsX3Jlc3ZcJiMzNDtcbiYjNDM7XG4mIzQzOyMgUmVzdG9yZSBvcmlnaW5hbCB2YWx1ZXNcbiYjNDM7ZWNobyBcJiMzNDtSZXN0b3Jpbmcgb3JpZ2luYWwgaHVnZXBhZ2Ugc2V0dGluZ3MuLi5cJiMzNDtcbiYjNDM7ZWNobyBcJiMzNDskb3JpZ19uclwmIzM0OyBcdTAwM2UgXCYjMzQ7JFNZU0ZTX1BBVEgvbnJfaHVnZXBhZ2VzXCYjMzQ7XG4mIzQzO2VjaG8gXCYjMzQ7JG9yaWdfb3ZlcmNvbW1pdFwmIzM0OyBcdTAwM2UgXCYjMzQ7JFNZU0ZTX1BBVEgvbnJfb3ZlcmNvbW1pdF9odWdlcGFnZXNcJiMzNDtcbiYjNDM7XG4mIzQzO2lmIFsgXCYjMzQ7JGZpbmFsX3Jlc3ZcJiMzNDsgPSBcJiMzNDskaW5pdGlhbF9yZXN2XCYjMzQ7IF07IHRoZW5cbiYjNDM7ICAgIGVjaG8gXCYjMzQ7UkVTVUxUOiBTdGF0ZSByZXN0b3JlZCB0byAkaW5pdGlhbF9yZXN2IChvciBjbGVhbmVkIHVwIGlmIGZpeGVkKVwmIzM0O1xuJiM0MzsgICAgZWNobyBcJiMzNDtBTEwgRE9ORS5cJiMzNDtcbiYjNDM7ICAgIGV4aXQgMFxuJiM0MztlbHNlXG4mIzQzOyAgICBlY2hvIFwmIzM0O1JFU1VMVDogVW5kZXJmbG93L0xlYWsvSW5jb3JyZWN0IHN0YXRlIGRldGVjdGVkISAoZmluYWxfcmVzdiA9ICRmaW5hbF9yZXN2LCBleHBlY3RlZCA9ICRpbml0aWFsX3Jlc3YpXCYjMzQ7XG4mIzQzOyAgICBlY2hvIFwmIzM0O0FMTCBET05FLlwmIzM0O1xuJiM0MzsgICAgZXhpdCAxXG4mIzQzO2ZpXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9odWdldGxiLmggYi9pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaFxuaW5kZXggMmFiYWY5OTMyMWU5MGQuLjA3NGE0NTkwMzk3M2ViIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9odWdldGxiLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvaHVnZXRsYi5oXG5AQCAtMTgsNiAmIzQzOzE4LDcgQEBcbiBcbiBzdHJ1Y3QgbW11X2dhdGhlcjtcbiBzdHJ1Y3Qgbm9kZTtcbiYjNDM7c3RydWN0IGhzdGF0ZTtcbiBcbiB2b2lkIGZyZWVfaHVnZV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcbiBcbkBAIC0zNCwxNyAmIzQzOzM1LDcgQEAgdm9pZCBmcmVlX2h1Z2VfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbyk7XG4gICovXG4gI2RlZmluZSBfX05SX1VTRURfU1VCUEFHRSAzXG4gXG4tc3RydWN0IGh1Z2VwYWdlX3N1YnBvb2wge1xuLVx0c3BpbmxvY2tfdCBsb2NrO1xuLVx0bG9uZyBjb3VudDtcbi1cdGxvbmcgbWF4X2hwYWdlcztcdC8qIE1heGltdW0gaHVnZSBwYWdlcyBvciAtMSBpZiBubyBtYXhpbXVtLiAqL1xuLVx0bG9uZyB1c2VkX2hwYWdlcztcdC8qIFVzZWQgY291bnQgYWdhaW5zdCBtYXhpbXVtLCBpbmNsdWRlcyAqL1xuLVx0XHRcdFx0LyogYm90aCBhbGxvY2F0ZWQgYW5kIHJlc2VydmVkIHBhZ2VzLiAqL1xuLVx0c3RydWN0IGhzdGF0ZSAqaHN0YXRlO1xuLVx0bG9uZyBtaW5faHBhZ2VzO1x0LyogTWluaW11bSBodWdlIHBhZ2VzIG9yIC0xIGlmIG5vIG1pbmltdW0uICovXG4tXHRsb25nIHJzdl9ocGFnZXM7XHQvKiBQYWdlcyByZXNlcnZlZCBhZ2FpbnN0IGdsb2JhbCBwb29sIHRvICovXG4tXHRcdFx0XHQvKiBzYXRpc2Z5IG1pbmltdW0gc2l6ZS4gKi9cbi19O1xuJiM0MztzdHJ1Y3QgaHVnZXBhZ2Vfc3VicG9vbDtcbiBcbiBzdHJ1Y3QgcmVzdl9tYXAge1xuIFx0c3RydWN0IGtyZWYgcmVmcztcbkBAIC0xMTQsOSAmIzQzOzEwNSw3IEBAIGV4dGVybiBpbnQgaHVnZXRsYl9tYXhfaHN0YXRlIF9fcmVhZF9tb3N0bHk7XG4gI2RlZmluZSBmb3JfZWFjaF9oc3RhdGUoaCkgXFxcbiBcdGZvciAoKGgpID0gaHN0YXRlczsgKGgpIFx1MDAzYyBcdTAwMjZoc3RhdGVzW2h1Z2V0bGJfbWF4X2hzdGF0ZV07IChoKSYjNDM7JiM0MzspXG4gXG4tc3RydWN0IGh1Z2VwYWdlX3N1YnBvb2wgKmh1Z2VwYWdlX25ld19zdWJwb29sKHN0cnVjdCBoc3RhdGUgKmgsIGxvbmcgbWF4X2hwYWdlcyxcbi1cdFx0XHRcdFx0XHRsb25nIG1pbl9ocGFnZXMpO1xuLXZvaWQgaHVnZXBhZ2VfcHV0X3N1YnBvb2woc3RydWN0IGh1Z2VwYWdlX3N1YnBvb2wgKnNwb29sKTtcbiYjNDM7aW50IGh1Z2V0bGJfYWNjdF9tZW1vcnkoc3RydWN0IGhzdGF0ZSAqaCwgbG9uZyBkZWx0YSk7XG4gXG4gdm9pZCBodWdldGxiX2R1cF92bWFfcHJpdmF0ZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSk7XG4gdm9pZCBjbGVhcl92bWFfcmVzdl9odWdlX3BhZ2VzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKTtcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaCBiL2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oXG5pbmRleCBlMWY0NmEwMDE2ZmNmZC4uMjNmYmJiYzhlMTFmMjAgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmhcbkBAIC02NDEsNyAmIzQzOzY0MSwxNSBAQCBzdGF0aWMgaW5saW5lIGludCBtZW1fY2dyb3VwX2NoYXJnZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSxcbiBcdHJldHVybiBfX21lbV9jZ3JvdXBfY2hhcmdlKGZvbGlvLCBtbSwgZ2ZwKTtcbiB9XG4gXG4taW50IG1lbV9jZ3JvdXBfY2hhcmdlX2h1Z2V0bGIoc3RydWN0IGZvbGlvKiBmb2xpbywgZ2ZwX3QgZ2ZwKTtcbiYjNDM7aW50IG1lbV9jZ3JvdXBfaHVnZXRsYl90cnlfY2hhcmdlKHVuc2lnbmVkIGludCBucl9wYWdlcywgZ2ZwX3QgZ2ZwLFxuJiM0MztcdFx0XHRcdCAgc3RydWN0IG1lbV9jZ3JvdXAgKiptZW1jZ19wLFxuJiM0MztcdFx0XHRcdCAgc3RydWN0IG9ial9jZ3JvdXAgKipvYmpjZ19wKTtcbiYjNDM7dm9pZCBtZW1fY2dyb3VwX2h1Z2V0bGJfY29tbWl0X2NoYXJnZShzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuJiM0MztcdFx0XHRcdCAgICAgIHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcbiYjNDM7XHRcdFx0XHQgICAgICBzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2cpO1xuJiM0Mzt2b2lkIG1lbV9jZ3JvdXBfaHVnZXRsYl9jYW5jZWxfY2hhcmdlKHVuc2lnbmVkIGludCBucl9wYWdlcyxcbiYjNDM7XHRcdFx0XHQgICAgICBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXG4mIzQzO1x0XHRcdFx0ICAgICAgc3RydWN0IG9ial9jZ3JvdXAgKm9iamNnKTtcbiBcbiBpbnQgbWVtX2Nncm91cF9zd2FwaW5fY2hhcmdlX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sIHVuc2lnbmVkIHNob3J0IGlkLFxuIFx0XHRcdFx0ICAgc3RydWN0IG1tX3N0cnVjdCAqbW0sIGdmcF90IGdmcCk7XG5AQCAtMTEyOCw5ICYjNDM7MTEzNiwyNSBAQCBzdGF0aWMgaW5saW5lIGludCBtZW1fY2dyb3VwX2NoYXJnZShzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuLXN0YXRpYyBpbmxpbmUgaW50IG1lbV9jZ3JvdXBfY2hhcmdlX2h1Z2V0bGIoc3RydWN0IGZvbGlvKiBmb2xpbywgZ2ZwX3QgZ2ZwKVxuJiM0MztzdGF0aWMgaW5saW5lIGludCBtZW1fY2dyb3VwX2h1Z2V0bGJfdHJ5X2NoYXJnZSh1bnNpZ25lZCBpbnQgbnJfcGFnZXMsIGdmcF90IGdmcCxcbiYjNDM7XHRcdFx0XHRcdFx0c3RydWN0IG1lbV9jZ3JvdXAgKiptZW1jZ19wLFxuJiM0MztcdFx0XHRcdFx0XHRzdHJ1Y3Qgb2JqX2Nncm91cCAqKm9iamNnX3ApXG4mIzQzO3tcbiYjNDM7XHQqbWVtY2dfcCA9IE5VTEw7XG4mIzQzO1x0Km9iamNnX3AgPSBOVUxMO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgbWVtX2Nncm91cF9odWdldGxiX2NvbW1pdF9jaGFyZ2Uoc3RydWN0IGZvbGlvICpmb2xpbyxcbiYjNDM7XHRcdFx0XHRcdFx0ICAgIHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcbiYjNDM7XHRcdFx0XHRcdFx0ICAgIHN0cnVjdCBvYmpfY2dyb3VwICpvYmpjZylcbiYjNDM7e1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgbWVtX2Nncm91cF9odWdldGxiX2NhbmNlbF9jaGFyZ2UodW5zaWduZWQgaW50IG5yX3BhZ2VzLFxuJiM0MztcdFx0XHRcdFx0XHQgICAgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxuJiM0MztcdFx0XHRcdFx0XHQgICAgc3RydWN0IG9ial9jZ3JvdXAgKm9iamNnKVxuIHtcbi0gICAgICAgIHJldHVybiAwO1xuIH1cbiBcbiBzdGF0aWMgaW5saW5lIGludCBtZW1fY2dyb3VwX3N3YXBpbl9jaGFyZ2VfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbyxcbmRpZmYgLS1naXQgYS9tbS9NYWtlZmlsZSBiL21tL01ha2VmaWxlXG5pbmRleCBlZmY5ZjllN2UwNjFjMS4uMzk2NWM5NTllNTA5OTIgMTAwNjQ0XG4tLS0gYS9tbS9NYWtlZmlsZVxuJiM0MzsmIzQzOyYjNDM7IGIvbW0vTWFrZWZpbGVcbkBAIC03OCw3ICYjNDM7NzgsNyBAQCBlbmRpZlxuIG9iai0kKENPTkZJR19TV0FQKVx0JiM0Mzs9IHBhZ2VfaW8ubyBzd2FwX3N0YXRlLm8gc3dhcGZpbGUub1xuIG9iai0kKENPTkZJR19aU1dBUClcdCYjNDM7PSB6c3dhcC5vXG4gb2JqLSQoQ09ORklHX0hBU19ETUEpXHQmIzQzOz0gZG1hcG9vbC5vXG4tb2JqLSQoQ09ORklHX0hVR0VUTEJGUylcdCYjNDM7PSBodWdldGxiLm8gaHVnZXRsYl9zeXNmcy5vIGh1Z2V0bGJfc3lzY3RsLm9cbiYjNDM7b2JqLSQoQ09ORklHX0hVR0VUTEJGUylcdCYjNDM7PSBodWdldGxiLm8gaHVnZXRsYl9zdWJwb29sLm8gaHVnZXRsYl9zeXNmcy5vIGh1Z2V0bGJfc3lzY3RsLm9cbiBpZmRlZiBDT05GSUdfQ01BXG4gb2JqLSQoQ09ORklHX0hVR0VUTEJGUylcdCYjNDM7PSBodWdldGxiX2NtYS5vXG4gZW5kaWZcbmRpZmYgLS1naXQgYS9tbS9odWdldGxiLmMgYi9tbS9odWdldGxiLmNcbmluZGV4IDU3MTIxMmI4MDgzNWVjLi5lODdmMjZhM2UxZjNlNCAxMDA2NDRcbi0tLSBhL21tL2h1Z2V0bGIuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vaHVnZXRsYi5jXG5AQCAtMzgsNiAmIzQzOzM4LDggQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9tbV9pbmxpbmUuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3BhZGF0YS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcGdhbGxvYy5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L21lbWNvbnRyb2wuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcJiMzNDtodWdldGxiX3N1YnBvb2wuaFwmIzM0O1xuIFxuICNpbmNsdWRlIFx1MDAzY2FzbS9wYWdlLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2Nhc20vdGxiLmhcdTAwM2VcbkBAIC0xMTMsOCAmIzQzOzExNSw3IEBAIF9fY2FjaGVsaW5lX2FsaWduZWRfaW5fc21wIERFRklORV9TUElOTE9DSyhodWdldGxiX2xvY2spO1xuIHN0YXRpYyBpbnQgbnVtX2ZhdWx0X211dGV4ZXMgX19yb19hZnRlcl9pbml0O1xuIHN0cnVjdCBtdXRleCAqaHVnZXRsYl9mYXVsdF9tdXRleF90YWJsZSBfX3JvX2FmdGVyX2luaXQ7XG4gXG4tLyogRm9yd2FyZCBkZWNsYXJhdGlvbiAqL1xuLXN0YXRpYyBpbnQgaHVnZXRsYl9hY2N0X21lbW9yeShzdHJ1Y3QgaHN0YXRlICpoLCBsb25nIGRlbHRhKTtcbiYjNDM7LyogRm9yd2FyZCBkZWNsYXJhdGlvbnMgKi9cbiBzdGF0aWMgdm9pZCBodWdldGxiX3ZtYV9sb2NrX2ZyZWUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpO1xuIHN0YXRpYyB2b2lkIGh1Z2V0bGJfdm1hX2xvY2tfYWxsb2Moc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpO1xuIHN0YXRpYyB2b2lkIF9faHVnZXRsYl92bWFfdW5sb2NrX3dyaXRlX2ZyZWUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpO1xuQEAgLTEyNSwxNTYgJiM0MzsxMjYsNiBAQCBzdGF0aWMgdm9pZCBodWdldGxiX3Vuc2hhcmVfcG1kcyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbiBcdFx0dW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsIGJvb2wgdGFrZV9sb2Nrcyk7XG4gc3RhdGljIHN0cnVjdCByZXN2X21hcCAqdm1hX3Jlc3ZfbWFwKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKTtcbiBcbi1zdGF0aWMgaW5saW5lIGJvb2wgc3VicG9vbF9pc19mcmVlKHN0cnVjdCBodWdlcGFnZV9zdWJwb29sICpzcG9vbClcbi17XG4tXHRpZiAoc3Bvb2wtXHUwMDNlY291bnQpXG4tXHRcdHJldHVybiBmYWxzZTtcbi1cdGlmIChzcG9vbC1cdTAwM2VtYXhfaHBhZ2VzICE9IC0xKVxuLVx0XHRyZXR1cm4gc3Bvb2wtXHUwMDNldXNlZF9ocGFnZXMgPT0gMDtcbi1cdGlmIChzcG9vbC1cdTAwM2VtaW5faHBhZ2VzICE9IC0xKVxuLVx0XHRyZXR1cm4gc3Bvb2wtXHUwMDNlcnN2X2hwYWdlcyA9PSBzcG9vbC1cdTAwM2VtaW5faHBhZ2VzO1xuLVxuLVx0cmV0dXJuIHRydWU7XG4tfVxuLVxuLXN0YXRpYyBpbmxpbmUgdm9pZCB1bmxvY2tfb3JfcmVsZWFzZV9zdWJwb29sKHN0cnVjdCBodWdlcGFnZV9zdWJwb29sICpzcG9vbCxcbi1cdFx0XHRcdFx0XHR1bnNpZ25lZCBsb25nIGlycV9mbGFncylcbi17XG4tXHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNnNwb29sLVx1MDAzZWxvY2ssIGlycV9mbGFncyk7XG4tXG4tXHQvKiBJZiBubyBwYWdlcyBhcmUgdXNlZCwgYW5kIG5vIG90aGVyIGhhbmRsZXMgdG8gdGhlIHN1YnBvb2xcbi1cdCAqIHJlbWFpbiwgZ2l2ZSB1cCBhbnkgcmVzZXJ2YXRpb25zIGJhc2VkIG9uIG1pbmltdW0gc2l6ZSBhbmRcbi1cdCAqIGZyZWUgdGhlIHN1YnBvb2wgKi9cbi1cdGlmIChzdWJwb29sX2lzX2ZyZWUoc3Bvb2wpKSB7XG4tXHRcdGlmIChzcG9vbC1cdTAwM2VtaW5faHBhZ2VzICE9IC0xKVxuLVx0XHRcdGh1Z2V0bGJfYWNjdF9tZW1vcnkoc3Bvb2wtXHUwMDNlaHN0YXRlLFxuLVx0XHRcdFx0XHRcdC1zcG9vbC1cdTAwM2VtaW5faHBhZ2VzKTtcbi1cdFx0a2ZyZWUoc3Bvb2wpO1xuLVx0fVxuLX1cbi1cbi1zdHJ1Y3QgaHVnZXBhZ2Vfc3VicG9vbCAqaHVnZXBhZ2VfbmV3X3N1YnBvb2woc3RydWN0IGhzdGF0ZSAqaCwgbG9uZyBtYXhfaHBhZ2VzLFxuLVx0XHRcdFx0XHRcdGxvbmcgbWluX2hwYWdlcylcbi17XG4tXHRzdHJ1Y3QgaHVnZXBhZ2Vfc3VicG9vbCAqc3Bvb2w7XG4tXG4tXHRzcG9vbCA9IGt6YWxsb2Nfb2JqKCpzcG9vbCk7XG4tXHRpZiAoIXNwb29sKVxuLVx0XHRyZXR1cm4gTlVMTDtcbi1cbi1cdHNwaW5fbG9ja19pbml0KFx1MDAyNnNwb29sLVx1MDAzZWxvY2spO1xuLVx0c3Bvb2wtXHUwMDNlY291bnQgPSAxO1xuLVx0c3Bvb2wtXHUwMDNlbWF4X2hwYWdlcyA9IG1heF9ocGFnZXM7XG4tXHRzcG9vbC1cdTAwM2Voc3RhdGUgPSBoO1xuLVx0c3Bvb2wtXHUwMDNlbWluX2hwYWdlcyA9IG1pbl9ocGFnZXM7XG4tXG4tXHRpZiAobWluX2hwYWdlcyAhPSAtMSBcdTAwMjZcdTAwMjYgaHVnZXRsYl9hY2N0X21lbW9yeShoLCBtaW5faHBhZ2VzKSkge1xuLVx0XHRrZnJlZShzcG9vbCk7XG4tXHRcdHJldHVybiBOVUxMO1xuLVx0fVxuLVx0c3Bvb2wtXHUwMDNlcnN2X2hwYWdlcyA9IG1pbl9ocGFnZXM7XG4tXG4tXHRyZXR1cm4gc3Bvb2w7XG4tfVxuLVxuLXZvaWQgaHVnZXBhZ2VfcHV0X3N1YnBvb2woc3RydWN0IGh1Z2VwYWdlX3N1YnBvb2wgKnNwb29sKVxuLXtcbi1cdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4tXG4tXHRzcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZzcG9vbC1cdTAwM2Vsb2NrLCBmbGFncyk7XG4tXHRCVUdfT04oIXNwb29sLVx1MDAzZWNvdW50KTtcbi1cdHNwb29sLVx1MDAzZWNvdW50LS07XG4tXHR1bmxvY2tfb3JfcmVsZWFzZV9zdWJwb29sKHNwb29sLCBmbGFncyk7XG4tfVxuLVxuLS8qXG4tICogU3VicG9vbCBhY2NvdW50aW5nIGZvciBhbGxvY2F0aW5nIGFuZCByZXNlcnZpbmcgcGFnZXMuXG4tICogUmV0dXJuIC1FTk9NRU0gaWYgdGhlcmUgYXJlIG5vdCBlbm91Z2ggcmVzb3VyY2VzIHRvIHNhdGlzZnkgdGhlXG4tICogcmVxdWVzdC4gIE90aGVyd2lzZSwgcmV0dXJuIHRoZSBudW1iZXIgb2YgcGFnZXMgYnkgd2hpY2ggdGhlXG4tICogZ2xvYmFsIHBvb2xzIG11c3QgYmUgYWRqdXN0ZWQgKHVwd2FyZCkuICBUaGUgcmV0dXJuZWQgdmFsdWUgbWF5XG4tICogb25seSBiZSBkaWZmZXJlbnQgdGhhbiB0aGUgcGFzc2VkIHZhbHVlIChkZWx0YSkgaW4gdGhlIGNhc2Ugd2hlcmVcbi0gKiBhIHN1YnBvb2wgbWluaW11bSBzaXplIG11c3QgYmUgbWFpbnRhaW5lZC5cbi0gKi9cbi1zdGF0aWMgbG9uZyBodWdlcGFnZV9zdWJwb29sX2dldF9wYWdlcyhzdHJ1Y3QgaHVnZXBhZ2Vfc3VicG9vbCAqc3Bvb2wsXG4tXHRcdFx0XHQgICAgICBsb25nIGRlbHRhKVxuLXtcbi1cdGxvbmcgcmV0ID0gZGVsdGE7XG4tXG4tXHRpZiAoIXNwb29sKVxuLVx0XHRyZXR1cm4gcmV0O1xuLVxuLVx0c3Bpbl9sb2NrX2lycShcdTAwMjZzcG9vbC1cdTAwM2Vsb2NrKTtcbi1cbi1cdGlmIChzcG9vbC1cdTAwM2VtYXhfaHBhZ2VzICE9IC0xKSB7XHRcdC8qIG1heGltdW0gc2l6ZSBhY2NvdW50aW5nICovXG4tXHRcdGlmICgoc3Bvb2wtXHUwMDNldXNlZF9ocGFnZXMgJiM0MzsgZGVsdGEpIFx1MDAzYz0gc3Bvb2wtXHUwMDNlbWF4X2hwYWdlcylcbi1cdFx0XHRzcG9vbC1cdTAwM2V1c2VkX2hwYWdlcyAmIzQzOz0gZGVsdGE7XG4tXHRcdGVsc2Uge1xuLVx0XHRcdHJldCA9IC1FTk9NRU07XG4tXHRcdFx0Z290byB1bmxvY2tfcmV0O1xuLVx0XHR9XG4tXHR9XG4tXG4tXHQvKiBtaW5pbXVtIHNpemUgYWNjb3VudGluZyAqL1xuLVx0aWYgKHNwb29sLVx1MDAzZW1pbl9ocGFnZXMgIT0gLTEgXHUwMDI2XHUwMDI2IHNwb29sLVx1MDAzZXJzdl9ocGFnZXMpIHtcbi1cdFx0aWYgKGRlbHRhIFx1MDAzZSBzcG9vbC1cdTAwM2Vyc3ZfaHBhZ2VzKSB7XG4tXHRcdFx0Lypcbi1cdFx0XHQgKiBBc2tpbmcgZm9yIG1vcmUgcmVzZXJ2ZXMgdGhhbiB0aG9zZSBhbHJlYWR5IHRha2VuIG9uXG4tXHRcdFx0ICogYmVoYWxmIG9mIHN1YnBvb2wuICBSZXR1cm4gZGlmZmVyZW5jZS5cbi1cdFx0XHQgKi9cbi1cdFx0XHRyZXQgPSBkZWx0YSAtIHNwb29sLVx1MDAzZXJzdl9ocGFnZXM7XG4tXHRcdFx0c3Bvb2wtXHUwMDNlcnN2X2hwYWdlcyA9IDA7XG4tXHRcdH0gZWxzZSB7XG4tXHRcdFx0cmV0ID0gMDtcdC8qIHJlc2VydmVzIGFscmVhZHkgYWNjb3VudGVkIGZvciAqL1xuLVx0XHRcdHNwb29sLVx1MDAzZXJzdl9ocGFnZXMgLT0gZGVsdGE7XG4tXHRcdH1cbi1cdH1cbi1cbi11bmxvY2tfcmV0OlxuLVx0c3Bpbl91bmxvY2tfaXJxKFx1MDAyNnNwb29sLVx1MDAzZWxvY2spO1xuLVx0cmV0dXJuIHJldDtcbi19XG4tXG4tLypcbi0gKiBTdWJwb29sIGFjY291bnRpbmcgZm9yIGZyZWVpbmcgYW5kIHVucmVzZXJ2aW5nIHBhZ2VzLlxuLSAqIFJldHVybiB0aGUgbnVtYmVyIG9mIGdsb2JhbCBwYWdlIHJlc2VydmF0aW9ucyB0aGF0IG11c3QgYmUgZHJvcHBlZC5cbi0gKiBUaGUgcmV0dXJuIHZhbHVlIG1heSBvbmx5IGJlIGRpZmZlcmVudCB0aGFuIHRoZSBwYXNzZWQgdmFsdWUgKGRlbHRhKVxuLSAqIGluIHRoZSBjYXNlIHdoZXJlIGEgc3VicG9vbCBtaW5pbXVtIHNpemUgbXVzdCBiZSBtYWludGFpbmVkLlxuLSAqL1xuLXN0YXRpYyBsb25nIGh1Z2VwYWdlX3N1YnBvb2xfcHV0X3BhZ2VzKHN0cnVjdCBodWdlcGFnZV9zdWJwb29sICpzcG9vbCxcbi1cdFx0XHRcdCAgICAgICBsb25nIGRlbHRhKVxuLXtcbi1cdGxvbmcgcmV0ID0gZGVsdGE7XG4tXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuLVxuLVx0aWYgKCFzcG9vbClcbi1cdFx0cmV0dXJuIGRlbHRhO1xuLVxuLVx0c3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2c3Bvb2wtXHUwMDNlbG9jaywgZmxhZ3MpO1xuLVxuLVx0aWYgKHNwb29sLVx1MDAzZW1heF9ocGFnZXMgIT0gLTEpXHRcdC8qIG1heGltdW0gc2l6ZSBhY2NvdW50aW5nICovXG4tXHRcdHNwb29sLVx1MDAzZXVzZWRfaHBhZ2VzIC09IGRlbHRhO1xuLVxuLVx0IC8qIG1pbmltdW0gc2l6ZSBhY2NvdW50aW5nICovXG4tXHRpZiAoc3Bvb2wtXHUwMDNlbWluX2hwYWdlcyAhPSAtMSBcdTAwMjZcdTAwMjYgc3Bvb2wtXHUwMDNldXNlZF9ocGFnZXMgXHUwMDNjIHNwb29sLVx1MDAzZW1pbl9ocGFnZXMpIHtcbi1cdFx0aWYgKHNwb29sLVx1MDAzZXJzdl9ocGFnZXMgJiM0MzsgZGVsdGEgXHUwMDNjPSBzcG9vbC1cdTAwM2VtaW5faHBhZ2VzKVxuLVx0XHRcdHJldCA9IDA7XG4tXHRcdGVsc2Vcbi1cdFx0XHRyZXQgPSBzcG9vbC1cdTAwM2Vyc3ZfaHBhZ2VzICYjNDM7IGRlbHRhIC0gc3Bvb2wtXHUwMDNlbWluX2hwYWdlcztcbi1cbi1cdFx0c3Bvb2wtXHUwMDNlcnN2X2hwYWdlcyAmIzQzOz0gZGVsdGE7XG4tXHRcdGlmIChzcG9vbC1cdTAwM2Vyc3ZfaHBhZ2VzIFx1MDAzZSBzcG9vbC1cdTAwM2VtaW5faHBhZ2VzKVxuLVx0XHRcdHNwb29sLVx1MDAzZXJzdl9ocGFnZXMgPSBzcG9vbC1cdTAwM2VtaW5faHBhZ2VzO1xuLVx0fVxuLVxuLVx0Lypcbi1cdCAqIElmIGh1Z2V0bGJmc19wdXRfc3VwZXIgY291bGRuJiMzOTt0IGZyZWUgc3Bvb2wgZHVlIHRvIGFuIG91dHN0YW5kaW5nXG4tXHQgKiBxdW90YSByZWZlcmVuY2UsIGZyZWUgaXQgbm93LlxuLVx0ICovXG4tXHR1bmxvY2tfb3JfcmVsZWFzZV9zdWJwb29sKHNwb29sLCBmbGFncyk7XG4tXG4tXHRyZXR1cm4gcmV0O1xuLX1cbi1cbiBzdGF0aWMgaW5saW5lIHN0cnVjdCBodWdlcGFnZV9zdWJwb29sICpzdWJwb29sX3ZtYShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcbiB7XG4gXHRyZXR1cm4gc3VicG9vbF9pbm9kZShmaWxlX2lub2RlKHZtYS1cdTAwM2V2bV9maWxlKSk7XG5AQCAtMjg1OCwxMSAmIzQzOzI3MDksMTMgQEAgc3RydWN0IGZvbGlvICphbGxvY19odWdldGxiX2ZvbGlvKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuIFx0c3RydWN0IGh1Z2VwYWdlX3N1YnBvb2wgKnNwb29sID0gc3VicG9vbF92bWEodm1hKTtcbiBcdHN0cnVjdCBoc3RhdGUgKmggPSBoc3RhdGVfdm1hKHZtYSk7XG4gXHRzdHJ1Y3QgZm9saW8gKmZvbGlvO1xuLVx0bG9uZyByZXR2YWwsIGdibF9jaGcsIGdibF9yZXNlcnZlO1xuJiM0MztcdGxvbmcgcmV0dmFsLCBnYmxfY2hnO1xuIFx0bWFwX2NoZ19zdGF0ZSBtYXBfY2hnO1xuIFx0aW50IHJldCwgaWR4O1xuIFx0c3RydWN0IGh1Z2V0bGJfY2dyb3VwICpoX2NnID0gTlVMTDtcbiBcdHN0cnVjdCBodWdldGxiX2Nncm91cCAqaF9jZ19yc3ZkID0gTlVMTDtcbiYjNDM7XHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtX2NnID0gTlVMTDtcbiYjNDM7XHRzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqX2NnID0gTlVMTDtcbiBcdGdmcF90IGdmcCA9IGh0bGJfYWxsb2NfbWFzayhoKSB8IF9fR0ZQX1JFVFJZX01BWUZBSUw7XG4gXG4gXHRpZHggPSBoc3RhdGVfaW5kZXgoaCk7XG5AQCAtMjkyMiw2ICYjNDM7Mjc3NSwxMSBAQCBzdHJ1Y3QgZm9saW8gKmFsbG9jX2h1Z2V0bGJfZm9saW8oc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4gXHRpZiAocmV0KVxuIFx0XHRnb3RvIG91dF91bmNoYXJnZV9jZ3JvdXBfcmVzZXJ2YXRpb247XG4gXG4mIzQzO1x0cmV0ID0gbWVtX2Nncm91cF9odWdldGxiX3RyeV9jaGFyZ2UocGFnZXNfcGVyX2h1Z2VfcGFnZShoKSwgZ2ZwLFxuJiM0MztcdFx0XHRcdFx0ICAgIFx1MDAyNm1lbV9jZywgXHUwMDI2b2JqX2NnKTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0Z290byBvdXRfdW5jaGFyZ2VfY2dyb3VwO1xuJiM0MztcbiBcdHNwaW5fbG9ja19pcnEoXHUwMDI2aHVnZXRsYl9sb2NrKTtcbiBcdC8qXG4gXHQgKiBnbGJfY2hnIGlzIHBhc3NlZCB0byBpbmRpY2F0ZSB3aGV0aGVyIG9yIG5vdCBhIHBhZ2UgbXVzdCBiZSB0YWtlblxuQEAgLTI5MzMsNyAmIzQzOzI3OTEsNyBAQCBzdHJ1Y3QgZm9saW8gKmFsbG9jX2h1Z2V0bGJfZm9saW8oc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4gXHRcdHNwaW5fdW5sb2NrX2lycShcdTAwMjZodWdldGxiX2xvY2spO1xuIFx0XHRmb2xpbyA9IGFsbG9jX2J1ZGR5X2h1Z2V0bGJfZm9saW9fd2l0aF9tcG9sKGgsIHZtYSwgYWRkcik7XG4gXHRcdGlmICghZm9saW8pXG4tXHRcdFx0Z290byBvdXRfdW5jaGFyZ2VfY2dyb3VwO1xuJiM0MztcdFx0XHRnb3RvIG91dF91bmNoYXJnZV9jZ3JvdXBfbWVtY2c7XG4gXHRcdHNwaW5fbG9ja19pcnEoXHUwMDI2aHVnZXRsYl9sb2NrKTtcbiBcdFx0bGlzdF9hZGQoXHUwMDI2Zm9saW8tXHUwMDNlbHJ1LCBcdTAwMjZoLVx1MDAzZWh1Z2VwYWdlX2FjdGl2ZWxpc3QpO1xuIFx0XHRmb2xpb19yZWZfdW5mcmVlemUoZm9saW8sIDEpO1xuQEAgLTI5NjAsNiAmIzQzOzI4MTgsOSBAQCBzdHJ1Y3QgZm9saW8gKmFsbG9jX2h1Z2V0bGJfZm9saW8oc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4gXG4gXHRzcGluX3VubG9ja19pcnEoXHUwMDI2aHVnZXRsYl9sb2NrKTtcbiBcbiYjNDM7XHRtZW1fY2dyb3VwX2h1Z2V0bGJfY29tbWl0X2NoYXJnZShmb2xpbywgbWVtX2NnLCBvYmpfY2cpO1xuJiM0MztcdGxydXZlY19zdGF0X21vZF9mb2xpbyhmb2xpbywgTlJfSFVHRVRMQiwgcGFnZXNfcGVyX2h1Z2VfcGFnZShoKSk7XG4mIzQzO1xuIFx0aHVnZXRsYl9zZXRfZm9saW9fc3VicG9vbChmb2xpbywgc3Bvb2wpO1xuIFxuIFx0aWYgKG1hcF9jaGcgIT0gTUFQX0NIR19FTkZPUkNFRCkge1xuQEAgLTI5ODcsMjEgJiM0MzsyODQ4LDEwIEBAIHN0cnVjdCBmb2xpbyAqYWxsb2NfaHVnZXRsYl9mb2xpbyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbiBcdFx0fVxuIFx0fVxuIFxuLVx0cmV0ID0gbWVtX2Nncm91cF9jaGFyZ2VfaHVnZXRsYihmb2xpbywgZ2ZwKTtcbi1cdC8qXG4tXHQgKiBVbmNvbmRpdGlvbmFsbHkgaW5jcmVtZW50IE5SX0hVR0VUTEIgaGVyZS4gSWYgaXQgdHVybnMgb3V0IHRoYXRcbi1cdCAqIG1lbV9jZ3JvdXBfY2hhcmdlX2h1Z2V0bGIgZmFpbGVkLCB0aGVuIGltbWVkaWF0ZWx5IGZyZWUgdGhlIHBhZ2UgYW5kXG4tXHQgKiBkZWNyZW1lbnQgTlJfSFVHRVRMQi5cbi1cdCAqL1xuLVx0bHJ1dmVjX3N0YXRfbW9kX2ZvbGlvKGZvbGlvLCBOUl9IVUdFVExCLCBwYWdlc19wZXJfaHVnZV9wYWdlKGgpKTtcbi1cbi1cdGlmIChyZXQgPT0gLUVOT01FTSkge1xuLVx0XHRmcmVlX2h1Z2VfZm9saW8oZm9saW8pO1xuLVx0XHRyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTtcbi1cdH1cbi1cbiBcdHJldHVybiBmb2xpbztcbiBcbiYjNDM7b3V0X3VuY2hhcmdlX2Nncm91cF9tZW1jZzpcbiYjNDM7XHRtZW1fY2dyb3VwX2h1Z2V0bGJfY2FuY2VsX2NoYXJnZShwYWdlc19wZXJfaHVnZV9wYWdlKGgpLCBtZW1fY2csIG9ial9jZyk7XG4gb3V0X3VuY2hhcmdlX2Nncm91cDpcbiBcdGh1Z2V0bGJfY2dyb3VwX3VuY2hhcmdlX2Nncm91cChpZHgsIHBhZ2VzX3Blcl9odWdlX3BhZ2UoaCksIGhfY2cpO1xuIG91dF91bmNoYXJnZV9jZ3JvdXBfcmVzZXJ2YXRpb246XG5AQCAtMzAwOSwxOSAmIzQzOzI4NTksMjggQEAgc3RydWN0IGZvbGlvICphbGxvY19odWdldGxiX2ZvbGlvKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuIFx0XHRodWdldGxiX2Nncm91cF91bmNoYXJnZV9jZ3JvdXBfcnN2ZChpZHgsIHBhZ2VzX3Blcl9odWdlX3BhZ2UoaCksXG4gXHRcdFx0XHRcdFx0ICAgIGhfY2dfcnN2ZCk7XG4gb3V0X3N1YnBvb2xfcHV0OlxuLVx0Lypcbi1cdCAqIHB1dCBwYWdlIHRvIHN1YnBvb2wgaWZmIHRoZSBxdW90YSBvZiBzdWJwb29sJiMzOTtzIHJzdl9ocGFnZXMgaXMgdXNlZFxuLVx0ICogZHVyaW5nIGh1Z2VwYWdlX3N1YnBvb2xfZ2V0X3BhZ2VzLlxuLVx0ICovXG4tXHRpZiAobWFwX2NoZyBcdTAwMjZcdTAwMjYgIWdibF9jaGcpIHtcbi1cdFx0Z2JsX3Jlc2VydmUgPSBodWdlcGFnZV9zdWJwb29sX3B1dF9wYWdlcyhzcG9vbCwgMSk7XG4tXHRcdGh1Z2V0bGJfYWNjdF9tZW1vcnkoaCwgLWdibF9yZXNlcnZlKTtcbiYjNDM7XHRpZiAobWFwX2NoZykge1xuJiM0MztcdFx0bG9uZyBnYmxfcmVzZXJ2ZSA9IGh1Z2VwYWdlX3N1YnBvb2xfcHV0X3BhZ2VzKHNwb29sLCAxKTtcbiYjNDM7XG4mIzQzO1x0XHRpZiAoIWdibF9jaGcpXG4mIzQzO1x0XHRcdGh1Z2V0bGJfYWNjdF9tZW1vcnkoaCwgLWdibF9yZXNlcnZlKTtcbiBcdH1cbiBcbiBcbiBvdXRfZW5kX3Jlc2VydmF0aW9uOlxuIFx0aWYgKG1hcF9jaGcgIT0gTUFQX0NIR19FTkZPUkNFRClcbiBcdFx0dm1hX2VuZF9yZXNlcnZhdGlvbihoLCB2bWEsIGFkZHIpO1xuJiM0MztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIFJldHVybiAtRU5PU1BDIHdoZW4gdGhpcyBmdW5jdGlvbiBmYWlscyB0byBhbGxvY2F0ZSBvclxuJiM0MztcdCAqIGNoYXJnZSBhIGh1Z2UgcGFnZS4gSWYgYSBzdGFuZGFyZCAoUEFHRV9TSVpFKSBwYWdlXG4mIzQzO1x0ICogYWxsb2NhdGlvbiBmYWlscywgdGhlIE9PTSBraWxsZXIgaXMgZ2l2ZW4gYSBjaGFuY2UgdG8gcnVuLFxuJiM0MztcdCAqIHdoaWNoIG1heSByZXNvbHZlIHRoZSBmYWlsdXJlIG9uIHJldHJ5LiBIb3dldmVyLCBmb3JcbiYjNDM7XHQgKiBIdWdlVExCIGFsbG9jYXRpb25zLCB0aGUgT09NIGtpbGxlciBpcyBub3QgdHJpZ2dlcmVkLlxuJiM0MztcdCAqIFJldHVybmluZyAtRU5PTUVNIChvciBhbnl0aGluZyByZXN1bHRpbmcgaW4gVk1fRkFVTFRfT09NKVxuJiM0MztcdCAqIHdvdWxkIGxlYWsgdG8gdGhlICNQRiBoYW5kbGVyLCBjYXVzaW5nIGl0IHRvIGxvb3BcbiYjNDM7XHQgKiBpbmRlZmluaXRlbHkgcmV0cnlpbmcgdGhlIGZhdWx0LlxuJiM0MztcdCAqL1xuIFx0cmV0dXJuIEVSUl9QVFIoLUVOT1NQQyk7XG4gfVxuIFxuQEAgLTQ1OTMsNyAmIzQzOzQ0NTIsNyBAQCB1bnNpZ25lZCBsb25nIGh1Z2V0bGJfdG90YWxfcGFnZXModm9pZClcbiBcdHJldHVybiBucl90b3RhbF9wYWdlcztcbiB9XG4gXG4tc3RhdGljIGludCBodWdldGxiX2FjY3RfbWVtb3J5KHN0cnVjdCBoc3RhdGUgKmgsIGxvbmcgZGVsdGEpXG4mIzQzO2ludCBodWdldGxiX2FjY3RfbWVtb3J5KHN0cnVjdCBoc3RhdGUgKmgsIGxvbmcgZGVsdGEpXG4ge1xuIFx0aW50IHJldCA9IC1FTk9NRU07XG4gXG5AQCAtNjU0Miw3ICYjNDM7NjQwMSw3IEBAIGxvbmcgaHVnZXRsYl9yZXNlcnZlX3BhZ2VzKHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4gXHRcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuIFx0XHR2bWFfZmxhZ3NfdCB2bWFfZmxhZ3MpXG4ge1xuLVx0bG9uZyBjaGcgPSAtMSwgYWRkID0gLTEsIHNwb29sX3Jlc3YsIGdibF9yZXN2O1xuJiM0MztcdGxvbmcgY2hnID0gLTEsIGFkZCA9IC0xLCBnYmxfcmVzdjtcbiBcdHN0cnVjdCBoc3RhdGUgKmggPSBoc3RhdGVfaW5vZGUoaW5vZGUpO1xuIFx0c3RydWN0IGh1Z2VwYWdlX3N1YnBvb2wgKnNwb29sID0gc3VicG9vbF9pbm9kZShpbm9kZSk7XG4gXHRzdHJ1Y3QgcmVzdl9tYXAgKnJlc3ZfbWFwO1xuQEAgLTY2ODcsMjYgJiM0Mzs2NTQ2LDIxIEBAIGxvbmcgaHVnZXRsYl9yZXNlcnZlX3BhZ2VzKHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4gXHR9XG4gXHRyZXR1cm4gY2hnO1xuIFxuLW91dF9wdXRfcGFnZXM6XG4tXHRzcG9vbF9yZXN2ID0gY2hnIC0gZ2JsX3Jlc2VydmU7XG4tXHRpZiAoc3Bvb2xfcmVzdikge1xuLVx0XHQvKiBwdXQgc3ViIHBvb2wmIzM5O3MgcmVzZXJ2YXRpb24gYmFjaywgY2hnIC0gZ2JsX3Jlc2VydmUgKi9cbi1cdFx0Z2JsX3Jlc3YgPSBodWdlcGFnZV9zdWJwb29sX3B1dF9wYWdlcyhzcG9vbCwgc3Bvb2xfcmVzdik7XG4tXHRcdC8qXG4tXHRcdCAqIHN1YnBvb2wmIzM5O3MgcmVzZXJ2ZWQgcGFnZXMgY2FuIG5vdCBiZSBwdXQgYmFjayBkdWUgdG8gcmFjZSxcbi1cdFx0ICogcmV0dXJuIHRvIGhzdGF0ZS5cbi1cdFx0ICovXG4tXHRcdGh1Z2V0bGJfYWNjdF9tZW1vcnkoaCwgLWdibF9yZXN2KTtcbi1cdH1cbi1cdC8qIFJlc3RvcmUgdXNlZF9ocGFnZXMgZm9yIHBhZ2VzIHRoYXQgZmFpbGVkIGdsb2JhbCByZXNlcnZhdGlvbiAqL1xuLVx0aWYgKGdibF9yZXNlcnZlIFx1MDAyNlx1MDAyNiBzcG9vbCkge1xuLVx0XHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuJiM0Mzsgb3V0X3B1dF9wYWdlczpcbiYjNDM7XHQvKlxuJiM0MztcdCAqIFJldHVybiBhbGwgdGhhdCB3YXMgcmVxdWVzdGVkIGZyb20gdGhlIHN1YnBvb2wsIGxldCBzdWJwb29sXG4mIzQzO1x0ICogdGVsbCB1cyB0aGUgbmV3IG51bWJlciBvZiByZXNlcnZhdGlvbnMgdGhhdCBuZWVkIHRvIGJlXG4mIzQzO1x0ICogcmV0dXJuZWQgdG8gdGhlIGdsb2JhbCBwb29sLlxuJiM0MztcdCAqL1xuJiM0MztcdGdibF9yZXN2ID0gaHVnZXBhZ2Vfc3VicG9vbF9wdXRfcGFnZXMoc3Bvb2wsIGNoZyk7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBUaGVyZSBtYXkgYmUgYSBkaWZmZXJlbmNlIGJldHdlZW4gdGhlIG51bWJlciBvZlxuJiM0MztcdCAqIHJlc2VydmF0aW9ucyB0byBjb25zdW1lIGFuZCB0aGUgbnVtYmVyIHRvIHJlc3RvcmUgbm93IGlmXG4mIzQzO1x0ICogdGhlcmUgYXJlIG11bHRpcGxlIHRocmVhZHMgaW50ZXJhY3Rpbmcgd2l0aCB0aGUgc3VicG9vbCAtXG4mIzQzO1x0ICogcmVzdG9yZSB0aGUgZGlmZmVyZW5jZS5cbiYjNDM7XHQgKi9cbiYjNDM7XHRodWdldGxiX2FjY3RfbWVtb3J5KGgsIC0oZ2JsX3Jlc3YgLSBnYmxfcmVzZXJ2ZSkpO1xuIFxuLVx0XHRzcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZzcG9vbC1cdTAwM2Vsb2NrLCBmbGFncyk7XG4tXHRcdGlmIChzcG9vbC1cdTAwM2VtYXhfaHBhZ2VzICE9IC0xKVxuLVx0XHRcdHNwb29sLVx1MDAzZXVzZWRfaHBhZ2VzIC09IGdibF9yZXNlcnZlO1xuLVx0XHR1bmxvY2tfb3JfcmVsZWFzZV9zdWJwb29sKHNwb29sLCBmbGFncyk7XG4tXHR9XG4gb3V0X3VuY2hhcmdlX2Nncm91cDpcbiBcdGh1Z2V0bGJfY2dyb3VwX3VuY2hhcmdlX2Nncm91cF9yc3ZkKGhzdGF0ZV9pbmRleChoKSxcbiBcdFx0XHRcdFx0ICAgIGNoZyAqIHBhZ2VzX3Blcl9odWdlX3BhZ2UoaCksIGhfY2cpO1xuZGlmZiAtLWdpdCBhL21tL2h1Z2V0bGJfc3VicG9vbC5jIGIvbW0vaHVnZXRsYl9zdWJwb29sLmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uZWI1NDcyYmRmMjE5MjRcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL21tL2h1Z2V0bGJfc3VicG9vbC5jXG5AQCAtMCwwICYjNDM7MSwyMjMgQEBcbiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbiYjNDM7LypcbiYjNDM7ICogU3VicG9vbCBhbmQgcmVzZXJ2ZSBhY2NvdW50aW5nIGZvciBIdWdlVExCIGZvbGlvcy5cbiYjNDM7ICogRXh0cmFjdGVkIGZyb20gbW0vaHVnZXRsYi5jXG4mIzQzOyAqL1xuJiM0MztcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvdHlwZXMuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9rZXJuZWwuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9zbGFiLmhcdTAwM2VcbiYjNDM7I2lmZGVmIF9fS0VSTkVMX19cbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvaHVnZXRsYi5oXHUwMDNlXG4mIzQzOyNlbmRpZlxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9zcGlubG9jay5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2J1Zy5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFwmIzM0O2h1Z2V0bGJfc3VicG9vbC5oXCYjMzQ7XG4mIzQzO1xuJiM0MztzdHJ1Y3QgaHVnZXBhZ2Vfc3VicG9vbCB7XG4mIzQzO1x0c3BpbmxvY2tfdCBsb2NrO1xuJiM0MztcdGxvbmcgY291bnQ7XG4mIzQzO1x0bG9uZyBtYXhfaHBhZ2VzO1x0LyogTWF4aW11bSBodWdlIHBhZ2VzIG9yIC0xIGlmIG5vIG1heGltdW0uICovXG4mIzQzO1x0bG9uZyB1c2VkX2hwYWdlcztcdC8qIFVzZWQgcGFnZSBjb3VudCwgaW5jbHVkZXMgYm90aCAqL1xuJiM0MztcdFx0XHRcdC8qIGFsbG9jYXRlZCBhbmQgcmVzZXJ2ZWQgcGFnZXMuICovXG4mIzQzO1x0c3RydWN0IGhzdGF0ZSAqaHN0YXRlO1xuJiM0MztcdGxvbmcgbWluX2hwYWdlcztcdC8qIE1pbmltdW0gaHVnZSBwYWdlcyBvciAtMSBpZiBubyBtaW5pbXVtLiAqL1xuJiM0MztcdGxvbmcgcnN2X2hwYWdlcztcdC8qIFBhZ2VzIHJlc2VydmVkIGFnYWluc3QgZ2xvYmFsIHBvb2wgdG8gKi9cbiYjNDM7XHRcdFx0XHQvKiBzYXRpc2Z5IG1pbmltdW0gc2l6ZS4gKi9cbiYjNDM7fTtcbiYjNDM7XG4mIzQzO3N0YXRpYyBpbmxpbmUgYm9vbCBzdWJwb29sX2lzX2ZyZWUoc3RydWN0IGh1Z2VwYWdlX3N1YnBvb2wgKnNwb29sKVxuJiM0Mzt7XG4mIzQzO1x0aWYgKHNwb29sLVx1MDAzZWNvdW50KVxuJiM0MztcdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gc3Bvb2wtXHUwMDNldXNlZF9ocGFnZXMgPT0gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGlubGluZSB2b2lkIHVubG9ja19vcl9yZWxlYXNlX3N1YnBvb2woc3RydWN0IGh1Z2VwYWdlX3N1YnBvb2wgKnNwb29sLFxuJiM0MztcdFx0XHRcdFx0XHR1bnNpZ25lZCBsb25nIGlycV9mbGFncylcbiYjNDM7e1xuJiM0MztcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2c3Bvb2wtXHUwMDNlbG9jaywgaXJxX2ZsYWdzKTtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBJZiBubyBwYWdlcyBhcmUgdXNlZCwgYW5kIG5vIG90aGVyIGhhbmRsZXMgdG8gdGhlIHN1YnBvb2xcbiYjNDM7XHQgKiByZW1haW4sIGdpdmUgdXAgYW55IHJlc2VydmF0aW9ucyBiYXNlZCBvbiBtaW5pbXVtIHNpemUgYW5kXG4mIzQzO1x0ICogZnJlZSB0aGUgc3VicG9vbC5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAoc3VicG9vbF9pc19mcmVlKHNwb29sKSkge1xuJiM0MztcdFx0aWYgKHNwb29sLVx1MDAzZW1pbl9ocGFnZXMgIT0gLTEpXG4mIzQzO1x0XHRcdGh1Z2V0bGJfYWNjdF9tZW1vcnkoc3Bvb2wtXHUwMDNlaHN0YXRlLFxuJiM0MztcdFx0XHRcdFx0XHQtc3Bvb2wtXHUwMDNlbWluX2hwYWdlcyk7XG4mIzQzO1x0XHRrZnJlZShzcG9vbCk7XG4mIzQzO1x0fVxuJiM0Mzt9XG4mIzQzO1xuJiM0Mztsb25nIGh1Z2VwYWdlX3N1YnBvb2xfZnJlZV9ocGFnZXMoc3RydWN0IGh1Z2VwYWdlX3N1YnBvb2wgKnNwb29sKVxuJiM0Mzt7XG4mIzQzO1x0bG9uZyBmcmVlX3BhZ2VzO1xuJiM0MztcbiYjNDM7XHRzcGluX2xvY2tfaXJxKFx1MDAyNnNwb29sLVx1MDAzZWxvY2spO1xuJiM0MztcdGlmIChzcG9vbC1cdTAwM2VtYXhfaHBhZ2VzID09IC0xKVxuJiM0MztcdFx0ZnJlZV9wYWdlcyA9IC0xO1xuJiM0MztcdGVsc2VcbiYjNDM7XHRcdGZyZWVfcGFnZXMgPSBzcG9vbC1cdTAwM2VtYXhfaHBhZ2VzIC0gc3Bvb2wtXHUwMDNldXNlZF9ocGFnZXM7XG4mIzQzO1x0c3Bpbl91bmxvY2tfaXJxKFx1MDAyNnNwb29sLVx1MDAzZWxvY2spO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gZnJlZV9wYWdlcztcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHVuc2lnbmVkIGludCBodWdlcGFnZV9zdWJwb29sX2hwYWdlX3NoaWZ0KHN0cnVjdCBodWdlcGFnZV9zdWJwb29sICpzcG9vbClcbiYjNDM7e1xuJiM0MztcdHJldHVybiBodWdlX3BhZ2Vfc2hpZnQoc3Bvb2wtXHUwMDNlaHN0YXRlKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7dW5zaWduZWQgbG9uZyBsb25nIGh1Z2VwYWdlX3N1YnBvb2xfbWF4X3NpemUoc3RydWN0IGh1Z2VwYWdlX3N1YnBvb2wgKnNwb29sKVxuJiM0Mzt7XG4mIzQzO1x0aWYgKHNwb29sLVx1MDAzZW1heF9ocGFnZXMgPT0gLTEpXG4mIzQzO1x0XHRyZXR1cm4gLTFVTEw7XG4mIzQzO1x0cmV0dXJuICh1bnNpZ25lZCBsb25nIGxvbmcpc3Bvb2wtXHUwMDNlbWF4X2hwYWdlcyBcdTAwM2NcdTAwM2MgaHVnZXBhZ2Vfc3VicG9vbF9ocGFnZV9zaGlmdChzcG9vbCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3Vuc2lnbmVkIGxvbmcgbG9uZyBodWdlcGFnZV9zdWJwb29sX21pbl9zaXplKHN0cnVjdCBodWdlcGFnZV9zdWJwb29sICpzcG9vbClcbiYjNDM7e1xuJiM0MztcdGlmIChzcG9vbC1cdTAwM2VtaW5faHBhZ2VzID09IC0xKVxuJiM0MztcdFx0cmV0dXJuIC0xVUxMO1xuJiM0MztcdHJldHVybiAodW5zaWduZWQgbG9uZyBsb25nKXNwb29sLVx1MDAzZW1pbl9ocGFnZXMgXHUwMDNjXHUwMDNjIGh1Z2VwYWdlX3N1YnBvb2xfaHBhZ2Vfc2hpZnQoc3Bvb2wpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0Mztsb25nIGh1Z2VwYWdlX3N1YnBvb2xfbWF4X2hwYWdlcyhzdHJ1Y3QgaHVnZXBhZ2Vfc3VicG9vbCAqc3Bvb2wpXG4mIzQzO3tcbiYjNDM7XHRsb25nIG1heF9ocGFnZXM7XG4mIzQzO1xuJiM0MztcdHNwaW5fbG9ja19pcnEoXHUwMDI2c3Bvb2wtXHUwMDNlbG9jayk7XG4mIzQzO1x0bWF4X2hwYWdlcyA9IHNwb29sLVx1MDAzZW1heF9ocGFnZXM7XG4mIzQzO1x0c3Bpbl91bmxvY2tfaXJxKFx1MDAyNnNwb29sLVx1MDAzZWxvY2spO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gbWF4X2hwYWdlcztcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RydWN0IGh1Z2VwYWdlX3N1YnBvb2wgKmh1Z2VwYWdlX25ld19zdWJwb29sKHN0cnVjdCBoc3RhdGUgKmgsIGxvbmcgbWF4X2hwYWdlcyxcbiYjNDM7XHRcdFx0XHRcdFx0bG9uZyBtaW5faHBhZ2VzKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGh1Z2VwYWdlX3N1YnBvb2wgKnNwb29sO1xuJiM0MztcbiYjNDM7XHRzcG9vbCA9IGt6YWxsb2Nfb2JqKCpzcG9vbCk7XG4mIzQzO1x0aWYgKCFzcG9vbClcbiYjNDM7XHRcdHJldHVybiBOVUxMO1xuJiM0MztcbiYjNDM7XHRzcGluX2xvY2tfaW5pdChcdTAwMjZzcG9vbC1cdTAwM2Vsb2NrKTtcbiYjNDM7XHRzcG9vbC1cdTAwM2Vjb3VudCA9IDE7XG4mIzQzO1x0c3Bvb2wtXHUwMDNlbWF4X2hwYWdlcyA9IG1heF9ocGFnZXM7XG4mIzQzO1x0c3Bvb2wtXHUwMDNlaHN0YXRlID0gaDtcbiYjNDM7XHRzcG9vbC1cdTAwM2VtaW5faHBhZ2VzID0gbWluX2hwYWdlcztcbiYjNDM7XG4mIzQzO1x0aWYgKG1pbl9ocGFnZXMgIT0gLTEgXHUwMDI2XHUwMDI2IGh1Z2V0bGJfYWNjdF9tZW1vcnkoaCwgbWluX2hwYWdlcykpIHtcbiYjNDM7XHRcdGtmcmVlKHNwb29sKTtcbiYjNDM7XHRcdHJldHVybiBOVUxMO1xuJiM0MztcdH1cbiYjNDM7XHRzcG9vbC1cdTAwM2Vyc3ZfaHBhZ2VzID0gbWluX2hwYWdlcztcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHNwb29sO1xuJiM0Mzt9XG4mIzQzO1xuJiM0Mzt2b2lkIGh1Z2VwYWdlX3B1dF9zdWJwb29sKHN0cnVjdCBodWdlcGFnZV9zdWJwb29sICpzcG9vbClcbiYjNDM7e1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4mIzQzO1xuJiM0MztcdHNwaW5fbG9ja19pcnFzYXZlKFx1MDAyNnNwb29sLVx1MDAzZWxvY2ssIGZsYWdzKTtcbiYjNDM7XHRCVUdfT04oIXNwb29sLVx1MDAzZWNvdW50KTtcbiYjNDM7XHRzcG9vbC1cdTAwM2Vjb3VudC0tO1xuJiM0MztcdHVubG9ja19vcl9yZWxlYXNlX3N1YnBvb2woc3Bvb2wsIGZsYWdzKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LypcbiYjNDM7ICogU3VicG9vbCBhY2NvdW50aW5nIGZvciBhbGxvY2F0aW5nIGFuZCByZXNlcnZpbmcgcGFnZXMuXG4mIzQzOyAqIFJldHVybiAtRU5PTUVNIGlmIHRoZXJlIGFyZSBub3QgZW5vdWdoIHJlc291cmNlcyB0byBzYXRpc2Z5IHRoZVxuJiM0MzsgKiByZXF1ZXN0LiAgT3RoZXJ3aXNlLCByZXR1cm4gdGhlIG51bWJlciBvZiBwYWdlcyBieSB3aGljaCB0aGVcbiYjNDM7ICogZ2xvYmFsIHBvb2xzIG11c3QgYmUgYWRqdXN0ZWQgKHVwd2FyZCkuICBUaGUgcmV0dXJuZWQgdmFsdWUgbWF5XG4mIzQzOyAqIG9ubHkgYmUgZGlmZmVyZW50IHRoYW4gdGhlIHBhc3NlZCB2YWx1ZSAoZGVsdGEpIGluIHRoZSBjYXNlIHdoZXJlXG4mIzQzOyAqIGEgc3VicG9vbCBtaW5pbXVtIHNpemUgbXVzdCBiZSBtYWludGFpbmVkLlxuJiM0MzsgKi9cbiYjNDM7bG9uZyBodWdlcGFnZV9zdWJwb29sX2dldF9wYWdlcyhzdHJ1Y3QgaHVnZXBhZ2Vfc3VicG9vbCAqc3Bvb2wsXG4mIzQzO1x0XHRcdFx0ICAgICAgbG9uZyBkZWx0YSlcbiYjNDM7e1xuJiM0MztcdGxvbmcgcmV0ID0gZGVsdGE7XG4mIzQzO1xuJiM0MztcdGlmICghc3Bvb2wpXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRzcGluX2xvY2tfaXJxKFx1MDAyNnNwb29sLVx1MDAzZWxvY2spO1xuJiM0MztcbiYjNDM7XHRpZiAoc3Bvb2wtXHUwMDNlbWF4X2hwYWdlcyAhPSAtMSBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAgc3Bvb2wtXHUwMDNldXNlZF9ocGFnZXMgJiM0MzsgZGVsdGEgXHUwMDNlIHNwb29sLVx1MDAzZW1heF9ocGFnZXMpIHtcbiYjNDM7XHRcdHJldCA9IC1FTk9NRU07XG4mIzQzO1x0XHRnb3RvIHVubG9ja19yZXQ7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRzcG9vbC1cdTAwM2V1c2VkX2hwYWdlcyAmIzQzOz0gZGVsdGE7XG4mIzQzO1xuJiM0MztcdC8qIG1pbmltdW0gc2l6ZSBhY2NvdW50aW5nICovXG4mIzQzO1x0aWYgKHNwb29sLVx1MDAzZW1pbl9ocGFnZXMgIT0gLTEgXHUwMDI2XHUwMDI2IHNwb29sLVx1MDAzZXJzdl9ocGFnZXMpIHtcbiYjNDM7XHRcdGlmIChkZWx0YSBcdTAwM2Ugc3Bvb2wtXHUwMDNlcnN2X2hwYWdlcykge1xuJiM0MztcdFx0XHQvKlxuJiM0MztcdFx0XHQgKiBBc2tpbmcgZm9yIG1vcmUgcmVzZXJ2ZXMgdGhhbiB0aG9zZSBhbHJlYWR5IHRha2VuIG9uXG4mIzQzO1x0XHRcdCAqIGJlaGFsZiBvZiBzdWJwb29sLiAgUmV0dXJuIGRpZmZlcmVuY2UuXG4mIzQzO1x0XHRcdCAqL1xuJiM0MztcdFx0XHRyZXQgPSBkZWx0YSAtIHNwb29sLVx1MDAzZXJzdl9ocGFnZXM7XG4mIzQzO1x0XHRcdHNwb29sLVx1MDAzZXJzdl9ocGFnZXMgPSAwO1xuJiM0MztcdFx0fSBlbHNlIHtcbiYjNDM7XHRcdFx0cmV0ID0gMDtcdC8qIHJlc2VydmVzIGFscmVhZHkgYWNjb3VudGVkIGZvciAqL1xuJiM0MztcdFx0XHRzcG9vbC1cdTAwM2Vyc3ZfaHBhZ2VzIC09IGRlbHRhO1xuJiM0MztcdFx0fVxuJiM0MztcdH1cbiYjNDM7XG4mIzQzO3VubG9ja19yZXQ6XG4mIzQzO1x0c3Bpbl91bmxvY2tfaXJxKFx1MDAyNnNwb29sLVx1MDAzZWxvY2spO1xuJiM0MztcdHJldHVybiByZXQ7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qXG4mIzQzOyAqIFN1YnBvb2wgYWNjb3VudGluZyBmb3IgZnJlZWluZyBhbmQgdW5yZXNlcnZpbmcgcGFnZXMuXG4mIzQzOyAqIFJldHVybiB0aGUgbnVtYmVyIG9mIGdsb2JhbCBwYWdlIHJlc2VydmF0aW9ucyB0aGF0IG11c3QgYmUgZHJvcHBlZC5cbiYjNDM7ICogVGhlIHJldHVybiB2YWx1ZSBtYXkgb25seSBiZSBkaWZmZXJlbnQgdGhhbiB0aGUgcGFzc2VkIHZhbHVlIChkZWx0YSlcbiYjNDM7ICogaW4gdGhlIGNhc2Ugd2hlcmUgYSBzdWJwb29sIG1pbmltdW0gc2l6ZSBtdXN0IGJlIG1haW50YWluZWQuXG4mIzQzOyAqL1xuJiM0Mztsb25nIGh1Z2VwYWdlX3N1YnBvb2xfcHV0X3BhZ2VzKHN0cnVjdCBodWdlcGFnZV9zdWJwb29sICpzcG9vbCxcbiYjNDM7XHRcdFx0XHQgICAgICAgbG9uZyBkZWx0YSlcbiYjNDM7e1xuJiM0MztcdGxvbmcgcmV0ID0gZGVsdGE7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBmbGFncztcbiYjNDM7XG4mIzQzO1x0aWYgKCFzcG9vbClcbiYjNDM7XHRcdHJldHVybiBkZWx0YTtcbiYjNDM7XG4mIzQzO1x0c3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2c3Bvb2wtXHUwMDNlbG9jaywgZmxhZ3MpO1xuJiM0MztcbiYjNDM7XHRzcG9vbC1cdTAwM2V1c2VkX2hwYWdlcyAtPSBkZWx0YTtcbiYjNDM7XG4mIzQzO1x0IC8qIG1pbmltdW0gc2l6ZSBhY2NvdW50aW5nICovXG4mIzQzO1x0aWYgKHNwb29sLVx1MDAzZW1pbl9ocGFnZXMgIT0gLTEgXHUwMDI2XHUwMDI2IHNwb29sLVx1MDAzZXVzZWRfaHBhZ2VzIFx1MDAzYyBzcG9vbC1cdTAwM2VtaW5faHBhZ2VzKSB7XG4mIzQzO1x0XHQvKlxuJiM0MztcdFx0ICogbGltaXQgaXMgdGhlIG1heGltdW0gbnVtYmVyIG9mIHJlc2VydmF0aW9ucyB0aGF0XG4mIzQzO1x0XHQgKiBjYW4gYmUgcmVzdG9yZWQgdG8gdGhpcyBzdWJwb29sLlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRsb25nIGxpbWl0ID0gc3Bvb2wtXHUwMDNlbWluX2hwYWdlcyAtIHNwb29sLVx1MDAzZXVzZWRfaHBhZ2VzO1xuJiM0MztcbiYjNDM7XHRcdGlmIChzcG9vbC1cdTAwM2Vyc3ZfaHBhZ2VzICYjNDM7IGRlbHRhIFx1MDAzYz0gbGltaXQpXG4mIzQzO1x0XHRcdHJldCA9IDA7XG4mIzQzO1x0XHRlbHNlXG4mIzQzO1x0XHRcdHJldCA9IHNwb29sLVx1MDAzZXJzdl9ocGFnZXMgJiM0MzsgZGVsdGEgLSBsaW1pdDtcbiYjNDM7XG4mIzQzO1x0XHRzcG9vbC1cdTAwM2Vyc3ZfaHBhZ2VzICYjNDM7PSBkZWx0YTtcbiYjNDM7XHRcdGlmIChzcG9vbC1cdTAwM2Vyc3ZfaHBhZ2VzIFx1MDAzZSBsaW1pdClcbiYjNDM7XHRcdFx0c3Bvb2wtXHUwMDNlcnN2X2hwYWdlcyA9IGxpbWl0O1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBJZiBodWdldGxiZnNfcHV0X3N1cGVyIGNvdWxkbiYjMzk7dCBmcmVlIHNwb29sIGR1ZSB0byBhbiBvdXRzdGFuZGluZ1xuJiM0MztcdCAqIHF1b3RhIHJlZmVyZW5jZSwgZnJlZSBpdCBub3cuXG4mIzQzO1x0ICovXG4mIzQzO1x0dW5sb2NrX29yX3JlbGVhc2Vfc3VicG9vbChzcG9vbCwgZmxhZ3MpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gcmV0O1xuJiM0Mzt9XG5kaWZmIC0tZ2l0IGEvbW0vaHVnZXRsYl9zdWJwb29sLmggYi9tbS9odWdldGxiX3N1YnBvb2wuaFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi40MWQyMjIzOWYyYzNlZFxuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvbW0vaHVnZXRsYl9zdWJwb29sLmhcbkBAIC0wLDAgJiM0MzsxLDIxIEBAXG4mIzQzOy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wICovXG4mIzQzOyNpZm5kZWYgX01NX0hVR0VUTEJfU1VCUE9PTF9IXG4mIzQzOyNkZWZpbmUgX01NX0hVR0VUTEJfU1VCUE9PTF9IXG4mIzQzO1xuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9zcGlubG9jay5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3R5cGVzLmhcdTAwM2VcbiYjNDM7XG4mIzQzO3N0cnVjdCBoc3RhdGU7XG4mIzQzO3N0cnVjdCBodWdlcGFnZV9zdWJwb29sO1xuJiM0MztcbiYjNDM7c3RydWN0IGh1Z2VwYWdlX3N1YnBvb2wgKmh1Z2VwYWdlX25ld19zdWJwb29sKHN0cnVjdCBoc3RhdGUgKmgsIGxvbmcgbWF4X2hwYWdlcyxcbiYjNDM7XHRcdFx0XHRcdFx0bG9uZyBtaW5faHBhZ2VzKTtcbiYjNDM7dm9pZCBodWdlcGFnZV9wdXRfc3VicG9vbChzdHJ1Y3QgaHVnZXBhZ2Vfc3VicG9vbCAqc3Bvb2wpO1xuJiM0Mztsb25nIGh1Z2VwYWdlX3N1YnBvb2xfZ2V0X3BhZ2VzKHN0cnVjdCBodWdlcGFnZV9zdWJwb29sICpzcG9vbCwgbG9uZyBkZWx0YSk7XG4mIzQzO2xvbmcgaHVnZXBhZ2Vfc3VicG9vbF9wdXRfcGFnZXMoc3RydWN0IGh1Z2VwYWdlX3N1YnBvb2wgKnNwb29sLCBsb25nIGRlbHRhKTtcbiYjNDM7bG9uZyBodWdlcGFnZV9zdWJwb29sX2ZyZWVfaHBhZ2VzKHN0cnVjdCBodWdlcGFnZV9zdWJwb29sICpzcG9vbCk7XG4mIzQzO2xvbmcgaHVnZXBhZ2Vfc3VicG9vbF9tYXhfaHBhZ2VzKHN0cnVjdCBodWdlcGFnZV9zdWJwb29sICpzcG9vbCk7XG4mIzQzO3Vuc2lnbmVkIGxvbmcgbG9uZyBodWdlcGFnZV9zdWJwb29sX21heF9zaXplKHN0cnVjdCBodWdlcGFnZV9zdWJwb29sICpzcG9vbCk7XG4mIzQzO3Vuc2lnbmVkIGxvbmcgbG9uZyBodWdlcGFnZV9zdWJwb29sX21pbl9zaXplKHN0cnVjdCBodWdlcGFnZV9zdWJwb29sICpzcG9vbCk7XG4mIzQzO1xuJiM0MzsjZW5kaWYgLyogX01NX0hVR0VUTEJfU1VCUE9PTF9IICovXG5kaWZmIC0tZ2l0IGEvbW0vbWVtY29udHJvbC5jIGIvbW0vbWVtY29udHJvbC5jXG5pbmRleCA2ZGM0ODg4YTkwZjNmZC4uNjc2NGZmMDQxYzE5NjUgMTAwNjQ0XG4tLS0gYS9tbS9tZW1jb250cm9sLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL21lbWNvbnRyb2wuY1xuQEAgLTUxNDcsMzkgJiM0Mzs1MTQ3LDExOSBAQCBpbnQgX19tZW1fY2dyb3VwX2NoYXJnZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSwgZ2ZwX3QgZ2ZwKVxuIH1cbiBcbiAvKipcbi0gKiBtZW1fY2dyb3VwX2NoYXJnZV9odWdldGxiIC0gY2hhcmdlIHRoZSBtZW1jZyBmb3IgYSBodWdldGxiIGZvbGlvXG4tICogQGZvbGlvOiBmb2xpbyBiZWluZyBjaGFyZ2VkXG4mIzQzOyAqIG1lbV9jZ3JvdXBfaHVnZXRsYl90cnlfY2hhcmdlIC0gVHJ5IHRvIGNoYXJnZSB0aGUgbWVtY2cgZm9yIGEgaHVnZXRsYiBmb2xpb1xuJiM0MzsgKiBAbnJfcGFnZXM6IG51bWJlciBvZiBiYXNlIHBhZ2VzIHRvIGNoYXJnZVxuICAqIEBnZnA6IHJlY2xhaW0gbW9kZVxuJiM0MzsgKiBAbWVtY2dfcDogT3V0cHV0IHBvaW50ZXIgdG8gdGhlIGNoYXJnZWQgbWVtX2Nncm91cCAoaWYgc3VjY2Vzc2Z1bCBhbmQgZW5hYmxlZClcbiYjNDM7ICogQG9iamNnX3A6IE91dHB1dCBwb2ludGVyIHRvIHRoZSBjaGFyZ2VkIG9ial9jZ3JvdXAgKGlmIHN1Y2Nlc3NmdWwgYW5kIGVuYWJsZWQpXG4gICpcbi0gKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aGVuIGFsbG9jYXRpbmcgYSBodWdlIHBhZ2UgZm9saW8sIGFmdGVyIHRoZSBwYWdlIGhhc1xuLSAqIGFscmVhZHkgYmVlbiBvYnRhaW5lZCBhbmQgY2hhcmdlZCB0byB0aGUgYXBwcm9wcmlhdGUgaHVnZXRsYiBjZ3JvdXBcbi0gKiBjb250cm9sbGVyIChpZiBpdCBpcyBlbmFibGVkKS5cbiYjNDM7ICogUHJlcGFyZXMgYW5kIHRyaWVzIHRvIHJlc2VydmUgdGhlIG1lbW9yeSBjb3VudGVyIGZvciB0aGUgZm9saW8gZnJvbSB0aGUgY3VycmVudFxuJiM0MzsgKiB0YXNrJiMzOTtzIG1lbWNnLiBJZiBzdWNjZXNzZnVsLCBib3RoICptZW1jZ19wIGFuZCAqb2JqY2dfcCBhcmUgcG9wdWxhdGVkIGFuZCB0aGVpclxuJiM0MzsgKiByZWZlcmVuY2VzIGFyZSBwaW5uZWQgdW50aWwgYSBzdWJzZXF1ZW50IGNhbGwgdG8gbWVtX2Nncm91cF9odWdldGxiX2NvbW1pdF9jaGFyZ2VcbiYjNDM7ICogb3IgbWVtX2Nncm91cF9odWdldGxiX2NhbmNlbF9jaGFyZ2UuXG4gICpcbiAgKiBSZXR1cm5zIEVOT01FTSBpZiB0aGUgbWVtY2cgaXMgYWxyZWFkeSBmdWxsLlxuLSAqIFJldHVybnMgMCBpZiBlaXRoZXIgdGhlIGNoYXJnZSB3YXMgc3VjY2Vzc2Z1bCwgb3IgaWYgd2Ugc2tpcCB0aGUgY2hhcmdpbmcuXG4mIzQzOyAqIFJldHVybnMgMCBpZiBlaXRoZXIgdGhlIGNoYXJnZSB3YXMgc3VjY2Vzc2Z1bCwgb3IgaWYgd2Ugc2tpcCBjaGFyZ2luZy5cbiAgKi9cbi1pbnQgbWVtX2Nncm91cF9jaGFyZ2VfaHVnZXRsYihzdHJ1Y3QgZm9saW8gKmZvbGlvLCBnZnBfdCBnZnApXG4mIzQzO2ludCBtZW1fY2dyb3VwX2h1Z2V0bGJfdHJ5X2NoYXJnZSh1bnNpZ25lZCBpbnQgbnJfcGFnZXMsIGdmcF90IGdmcCxcbiYjNDM7XHRcdFx0XHQgIHN0cnVjdCBtZW1fY2dyb3VwICoqbWVtY2dfcCxcbiYjNDM7XHRcdFx0XHQgIHN0cnVjdCBvYmpfY2dyb3VwICoqb2JqY2dfcClcbiB7XG4tXHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cgPSBnZXRfbWVtX2Nncm91cF9mcm9tX2N1cnJlbnQoKTtcbiYjNDM7XHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2c7XG4mIzQzO1x0c3RydWN0IG9ial9jZ3JvdXAgKm9iamNnO1xuIFx0aW50IHJldCA9IDA7XG4gXG4tXHQvKlxuLVx0ICogRXZlbiBtZW1jZyBkb2VzIG5vdCBhY2NvdW50IGZvciBodWdldGxiLCB3ZSBzdGlsbCB3YW50IHRvIHVwZGF0ZVxuLVx0ICogc3lzdGVtLWxldmVsIHN0YXRzIHZpYSBscnV2ZWNfc3RhdF9tb2RfZm9saW8uIFJldHVybiAwLCBhbmQgc2tpcFxuLVx0ICogY2hhcmdpbmcgdGhlIG1lbWNnLlxuLVx0ICovXG4mIzQzO1x0Km1lbWNnX3AgPSBOVUxMO1xuJiM0MztcdCpvYmpjZ19wID0gTlVMTDtcbiYjNDM7XG4gXHRpZiAobWVtX2Nncm91cF9kaXNhYmxlZCgpIHx8ICFtZW1jZ19hY2NvdW50c19odWdldGxiKCkgfHxcbi1cdFx0IW1lbWNnIHx8ICFjZ3JvdXBfc3Vic3lzX29uX2RmbChtZW1vcnlfY2dycF9zdWJzeXMpKVxuLVx0XHRnb3RvIG91dDtcbiYjNDM7XHQgICAgIWNncm91cF9zdWJzeXNfb25fZGZsKG1lbW9yeV9jZ3JwX3N1YnN5cykpXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiBcbi1cdGlmIChjaGFyZ2VfbWVtY2coZm9saW8sIG1lbWNnLCBnZnApKVxuLVx0XHRyZXQgPSAtRU5PTUVNO1xuJiM0MztcdG1lbWNnID0gZ2V0X21lbV9jZ3JvdXBfZnJvbV9jdXJyZW50KCk7XG4mIzQzO1x0aWYgKCFtZW1jZylcbiYjNDM7XHRcdHJldHVybiAwO1xuIFxuLW91dDpcbiYjNDM7XHRvYmpjZyA9IGdldF9vYmpfY2dyb3VwX2Zyb21fbWVtY2cobWVtY2cpO1xuJiM0MztcdGlmICghb2JqY2cpXG4mIzQzO1x0XHRnb3RvIHB1dF9tZW1jZztcbiYjNDM7XG4mIzQzO1x0aWYgKCFvYmpfY2dyb3VwX2lzX3Jvb3Qob2JqY2cpKSB7XG4mIzQzO1x0XHRyZXQgPSB0cnlfY2hhcmdlX21lbWNnKG1lbWNnLCBnZnAsIG5yX3BhZ2VzKTtcbiYjNDM7XHRcdGlmIChyZXQpXG4mIzQzO1x0XHRcdGdvdG8gcHV0X29iamNnO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0Km1lbWNnX3AgPSBtZW1jZztcbiYjNDM7XHQqb2JqY2dfcCA9IG9iamNnO1xuJiM0MztcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7cHV0X29iamNnOlxuJiM0MztcdG9ial9jZ3JvdXBfcHV0KG9iamNnKTtcbiYjNDM7cHV0X21lbWNnOlxuIFx0bWVtX2Nncm91cF9wdXQobWVtY2cpO1xuIFx0cmV0dXJuIHJldDtcbiB9XG4gXG4mIzQzOy8qKlxuJiM0MzsgKiBtZW1fY2dyb3VwX2h1Z2V0bGJfY29tbWl0X2NoYXJnZSAtIENvbW1pdCB0aGUgbWVtY2cgY2hhcmdlIGZvciBhIGh1Z2V0bGIgZm9saW9cbiYjNDM7ICogQGZvbGlvOiBmb2xpbyBiZWluZyBjaGFyZ2VkXG4mIzQzOyAqIEBtZW1jZzogVGFyZ2V0IG1lbV9jZ3JvdXAgb2J0YWluZWQgZnJvbSBtZW1fY2dyb3VwX2h1Z2V0bGJfdHJ5X2NoYXJnZVxuJiM0MzsgKiBAb2JqY2c6IFRhcmdldCBvYmpfY2dyb3VwIG9idGFpbmVkIGZyb20gbWVtX2Nncm91cF9odWdldGxiX3RyeV9jaGFyZ2VcbiYjNDM7ICpcbiYjNDM7ICogRmluYWxpemVzIHRoZSBtZW1vcnkgYW5kIHN0YXRpc3RpY3MgY2hhcmdpbmcgZm9yIHRoZSBmb2xpbyBpbiB0aGUgc3BlY2lmaWVkIG1lbWNnLlxuJiM0MzsgKiBUcmFuc2ZlcnMgdGhlIHBpbm5lZCBvYmpjZyByZWZlcmVuY2UgdG8gdGhlIGZvbGlvIHN0cnVjdHVyZSAoZm9yIGF1dG9tYXRpY1xuJiM0MzsgKiB1bmNoYXJnaW5nIHVwb24gZnJlZWluZyB2aWEgbWVtX2Nncm91cF91bmNoYXJnZSkuIFJlbGVhc2VzIHRoZSB0cnktY29tbWl0IHJlZmVyZW5jZVxuJiM0MzsgKiBvbiBtZW1jZy5cbiYjNDM7ICovXG4mIzQzO3ZvaWQgbWVtX2Nncm91cF9odWdldGxiX2NvbW1pdF9jaGFyZ2Uoc3RydWN0IGZvbGlvICpmb2xpbyxcbiYjNDM7XHRcdFx0XHQgICAgICBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXG4mIzQzO1x0XHRcdFx0ICAgICAgc3RydWN0IG9ial9jZ3JvdXAgKm9iamNnKVxuJiM0Mzt7XG4mIzQzO1x0aWYgKCFtZW1jZyB8fCAhb2JqY2cpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdGNvbW1pdF9jaGFyZ2UoZm9saW8sIG9iamNnKTtcbiYjNDM7XHRtZW1jZzFfY29tbWl0X2NoYXJnZShmb2xpbywgbWVtY2cpO1xuJiM0MztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIERyb3Agb3VyIHRyeS1jb21taXQtY2FuY2VsIHByb3RvY29sIHJlZmVyZW5jZSBvbiBtZW1jZy5cbiYjNDM7XHQgKiBUaGUgb2JqY2cgcmVmZXJlbmNlIGlzIFRSQU5TRkVSUkVEIHRvIHRoZSBmb2xpbyBieSBjb21taXRfY2hhcmdlLFxuJiM0MztcdCAqIHNvIGl0IHdpbGwgYmUgcHV0IGF1dG9tYXRpY2FsbHkgYnkgX19tZW1fY2dyb3VwX3VuY2hhcmdlKCkgd2hlblxuJiM0MztcdCAqIHRoZSBmb2xpbyBpcyBmcmVlZC5cbiYjNDM7XHQgKi9cbiYjNDM7XHRtZW1fY2dyb3VwX3B1dChtZW1jZyk7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiBtZW1fY2dyb3VwX2h1Z2V0bGJfY2FuY2VsX2NoYXJnZSAtIENhbmNlbCBhbmQgdW5kbyBhIGh1Z2V0bGIgZm9saW8gbWVtY2cgY2hhcmdlXG4mIzQzOyAqIEBucl9wYWdlczogbnVtYmVyIG9mIGJhc2UgcGFnZXMgdG8gdW5jaGFyZ2VcbiYjNDM7ICogQG1lbWNnOiBUYXJnZXQgbWVtX2Nncm91cCBvYnRhaW5lZCBmcm9tIG1lbV9jZ3JvdXBfaHVnZXRsYl90cnlfY2hhcmdlXG4mIzQzOyAqIEBvYmpjZzogVGFyZ2V0IG9ial9jZ3JvdXAgb2J0YWluZWQgZnJvbSBtZW1fY2dyb3VwX2h1Z2V0bGJfdHJ5X2NoYXJnZVxuJiM0MzsgKlxuJiM0MzsgKiBDYW5jZWxzIGFuZCBzYWZlbHkgcm9sbHMgYmFjayB0aGUgcHJlcGFyZWQgbWVtb3J5IGNoYXJnZSBmb3IgdGhlIGZvbGlvIGluIHRoZVxuJiM0MzsgKiBzcGVjaWZpZWQgbWVtY2cuIFJlbGVhc2VzIHRoZSB0cnktY29tbWl0IHBpbm5lZCByZWZlcmVuY2VzIG9uIGJvdGggbWVtY2cgYW5kIG9iamNnLlxuJiM0MzsgKi9cbiYjNDM7dm9pZCBtZW1fY2dyb3VwX2h1Z2V0bGJfY2FuY2VsX2NoYXJnZSh1bnNpZ25lZCBpbnQgbnJfcGFnZXMsXG4mIzQzO1x0XHRcdFx0ICAgICAgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxuJiM0MztcdFx0XHRcdCAgICAgIHN0cnVjdCBvYmpfY2dyb3VwICpvYmpjZylcbiYjNDM7e1xuJiM0MztcdGlmICghbWVtY2cgfHwgIW9iamNnKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHRpZiAoIW9ial9jZ3JvdXBfaXNfcm9vdChvYmpjZykpXG4mIzQzO1x0XHRyZWZpbGxfc3RvY2sobWVtY2csIG5yX3BhZ2VzKTtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBEcm9wIG91ciB0cnktY29tbWl0LWNhbmNlbCBwcm90b2NvbCByZWZlcmVuY2VzIG9uIGJvdGggb2JqY2dcbiYjNDM7XHQgKiBhbmQgbWVtY2csIHNpbmNlIHRoaXMgbWFwcGluZyBhdHRlbXB0IHdhcyBhYm9ydGVkIGFuZCB0aGUgZm9saW9cbiYjNDM7XHQgKiB3YXMgbmV2ZXIgY29tbWl0dGVkLlxuJiM0MztcdCAqL1xuJiM0MztcdG9ial9jZ3JvdXBfcHV0KG9iamNnKTtcbiYjNDM7XHRtZW1fY2dyb3VwX3B1dChtZW1jZyk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO1xuIC8qKlxuICAqIG1lbV9jZ3JvdXBfc3dhcGluX2NoYXJnZV9mb2xpbyAtIENoYXJnZSBhIG5ld2x5IGFsbG9jYXRlZCBmb2xpbyBmb3Igc3dhcGluLlxuICAqIEBmb2xpbzogdGhlIGZvbGlvIHRvIGNoYXJnZVxuZGlmZiAtLWdpdCBhL3N1YnBvb2xfbGVha19tYXhfc2l6ZS5zaCBiL3N1YnBvb2xfbGVha19tYXhfc2l6ZS5zaFxubmV3IGZpbGUgbW9kZSAxMDA3NTVcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi5iZmFmYTFiYTA3NGVhY1xuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvc3VicG9vbF9sZWFrX21heF9zaXplLnNoXG5AQCAtMCwwICYjNDM7MSw3MSBAQFxuJiM0MzsjIS9iaW4vYmFzaFxuJiM0MztcbiYjNDM7aWYgWyBcJiMzNDskRVVJRFwmIzM0OyAtbmUgMCBdOyB0aGVuXG4mIzQzOyAgICBlY2hvIFwmIzM0O1BsZWFzZSBydW4gYXMgcm9vdFwmIzM0O1xuJiM0MzsgICAgZXhpdCAxXG4mIzQzO2ZpXG4mIzQzO1xuJiM0MztNTlRfUEFUSD1cJiMzNDsvdG1wL21udF9odWdldGxiXCYjMzQ7XG4mIzQzO0ZJTEVfUEFUSD1cJiMzNDskTU5UX1BBVEgvdGVzdF9maWxlXCYjMzQ7XG4mIzQzO1xuJiM0MzsjIFNhdmUgb3JpZ2luYWwgdmFsdWVzXG4mIzQzO29yaWdfbnI9JChjYXQgL3N5cy9rZXJuZWwvbW0vaHVnZXBhZ2VzL2h1Z2VwYWdlcy0yMDQ4a0IvbnJfaHVnZXBhZ2VzKVxuJiM0MztvcmlnX292ZXJjb21taXQ9JChjYXQgL3N5cy9rZXJuZWwvbW0vaHVnZXBhZ2VzL2h1Z2VwYWdlcy0yMDQ4a0IvbnJfb3ZlcmNvbW1pdF9odWdlcGFnZXMpXG4mIzQzO1xuJiM0MztjbGVhbnVwKCkge1xuJiM0MzsgICAgZWNobyBcJiMzNDtDbGVhbmluZyB1cC4uLlwmIzM0O1xuJiM0MzsgICAgcm0gLWYgXCYjMzQ7JEZJTEVfUEFUSFwmIzM0O1xuJiM0MzsgICAgdW1vdW50IFwmIzM0OyRNTlRfUEFUSFwmIzM0OyAyXHUwMDNlL2Rldi9udWxsXG4mIzQzOyAgICBybWRpciBcJiMzNDskTU5UX1BBVEhcJiMzNDsgMlx1MDAzZS9kZXYvbnVsbFxuJiM0MzsgICAgZWNobyBcJiMzNDskb3JpZ19uclwmIzM0OyBcdTAwM2UgL3N5cy9rZXJuZWwvbW0vaHVnZXBhZ2VzL2h1Z2VwYWdlcy0yMDQ4a0IvbnJfaHVnZXBhZ2VzXG4mIzQzOyAgICBlY2hvIFwmIzM0OyRvcmlnX292ZXJjb21taXRcJiMzNDsgXHUwMDNlIC9zeXMva2VybmVsL21tL2h1Z2VwYWdlcy9odWdlcGFnZXMtMjA0OGtCL25yX292ZXJjb21taXRfaHVnZXBhZ2VzXG4mIzQzOyAgICBlY2hvIFwmIzM0O0NsZWFudXAgZG9uZS5cJiMzNDtcbiYjNDM7fVxuJiM0Mzt0cmFwIGNsZWFudXAgRVhJVFxuJiM0MztcbiYjNDM7IyAxLiBNb3VudCBodWdldGxiZnMgd2l0aCBzaXplPTJNICgxIHBhZ2UpXG4mIzQzO21rZGlyIC1wIFwmIzM0OyRNTlRfUEFUSFwmIzM0O1xuJiM0MztpZiAhIG1vdW50IC10IGh1Z2V0bGJmcyAtbyBzaXplPTJNIG5vbmUgXCYjMzQ7JE1OVF9QQVRIXCYjMzQ7OyB0aGVuXG4mIzQzOyAgICBlY2hvIFwmIzM0O0ZhaWxlZCB0byBtb3VudCBodWdldGxiZnNcJiMzNDtcbiYjNDM7ICAgIGV4aXQgMVxuJiM0MztmaVxuJiM0MztcbiYjNDM7IyAyLiBTZXQgbnJfaHVnZXBhZ2VzIHRvIDAsIG92ZXJjb21taXQgdG8gMFxuJiM0MztlY2hvIDAgXHUwMDNlIC9zeXMva2VybmVsL21tL2h1Z2VwYWdlcy9odWdlcGFnZXMtMjA0OGtCL25yX2h1Z2VwYWdlc1xuJiM0MztlY2hvIDAgXHUwMDNlIC9zeXMva2VybmVsL21tL2h1Z2VwYWdlcy9odWdlcGFnZXMtMjA0OGtCL25yX292ZXJjb21taXRfaHVnZXBhZ2VzXG4mIzQzO1xuJiM0MzsjIENoZWNrIHN1YnBvb2wgdXNhZ2UgYmVmb3JlIHJ1bm5pbmdcbiYjNDM7cmVhZCB0b3RhbCBmcmVlIFx1MDAzYyBcdTAwM2Moc3RhdCAtZiAtYyBcJiMzNDslYiAlZlwmIzM0OyBcJiMzNDskTU5UX1BBVEhcJiMzNDspXG4mIzQzO3VzZWRfYmVmb3JlPSQoKHRvdGFsIC0gZnJlZSkpXG4mIzQzO2VjaG8gXCYjMzQ7QmVmb3JlIHRlc3QgLSBTdWJwb29sIHRvdGFsIGJsb2NrczogJHRvdGFsXCYjMzQ7XG4mIzQzO2VjaG8gXCYjMzQ7QmVmb3JlIHRlc3QgLSBTdWJwb29sIGZyZWUgYmxvY2tzOiAgJGZyZWVcJiMzNDtcbiYjNDM7ZWNobyBcJiMzNDtCZWZvcmUgdGVzdCAtIFN1YnBvb2wgdXNlZCBibG9ja3M6ICAkdXNlZF9iZWZvcmVcJiMzNDtcbiYjNDM7aWYgWyBcJiMzNDskdXNlZF9iZWZvcmVcJiMzNDsgLW5lIDAgXTsgdGhlblxuJiM0MzsgICAgZWNobyBcJiMzNDtFUlJPUjogU3VicG9vbCBpcyBub3QgY2xlYW4gYmVmb3JlIHRlc3Qgc3RhcnRzIVwmIzM0O1xuJiM0MzsgICAgZXhpdCAxXG4mIzQzO2ZpXG4mIzQzO1xuJiM0MzsjIFJ1biBmYWxsb2NhdGUgKGV4cGVjdGluZyBmYWlsdXJlKVxuJiM0MztlY2hvIFwmIzM0O1J1bm5pbmcgZmFsbG9jYXRlIChleHBlY3RpbmcgZmFpbHVyZSkuLi5cJiMzNDtcbiYjNDM7aWYgZmFsbG9jYXRlIC1sIDJNIFwmIzM0OyRGSUxFX1BBVEhcJiMzNDsgMlx1MDAzZS9kZXYvbnVsbDsgdGhlblxuJiM0MzsgICAgZWNobyBcJiMzNDtFUlJPUjogZmFsbG9jYXRlIHN1Y2NlZWRlZCBidXQgc2hvdWxkIGhhdmUgZmFpbGVkIChucl9odWdlcGFnZXMgaXMgMClcJiMzNDtcbiYjNDM7ICAgIGV4aXQgMVxuJiM0MztmaVxuJiM0MztcbiYjNDM7IyBDaGVjayBzdWJwb29sIHVzYWdlIHZpYSBzdGF0ZnNcbiYjNDM7IyAlYjogVG90YWwgYmxvY2tzXG4mIzQzOyMgJWY6IEZyZWUgYmxvY2tzXG4mIzQzO3JlYWQgdG90YWwgZnJlZSBcdTAwM2MgXHUwMDNjKHN0YXQgLWYgLWMgXCYjMzQ7JWIgJWZcJiMzNDsgXCYjMzQ7JE1OVF9QQVRIXCYjMzQ7KVxuJiM0Mzt1c2VkPSQoKHRvdGFsIC0gZnJlZSkpXG4mIzQzO1xuJiM0MztlY2hvIFwmIzM0O1N1YnBvb2wgdG90YWwgYmxvY2tzOiAkdG90YWxcJiMzNDtcbiYjNDM7ZWNobyBcJiMzNDtTdWJwb29sIGZyZWUgYmxvY2tzOiAgJGZyZWVcJiMzNDtcbiYjNDM7ZWNobyBcJiMzNDtTdWJwb29sIHVzZWQgYmxvY2tzIChsZWFrZWQgaWYgXHUwMDNlIDApOiAkdXNlZFwmIzM0O1xuJiM0MztcbiYjNDM7aWYgWyBcJiMzNDskdXNlZFwmIzM0OyAtZ3QgMCBdOyB0aGVuXG4mIzQzOyAgICBlY2hvIFwmIzM0O1JFU1VMVDogTEVBSyBERVRFQ1RFRCAoRkFJTClcJiMzNDtcbiYjNDM7ICAgIGV4aXQgMVxuJiM0MztlbHNlXG4mIzQzOyAgICBlY2hvIFwmIzM0O1JFU1VMVDogTk8gTEVBSyAoUEFTUylcJiMzNDtcbiYjNDM7ICAgIGV4aXQgMFxuJiM0MztmaVxuZGlmZiAtLWdpdCBhL3N1YnBvb2xfc2hhcmVkX2xlYWsuYyBiL3N1YnBvb2xfc2hhcmVkX2xlYWsuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi41ODExZTE4ZDdmOGJlN1xuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvc3VicG9vbF9zaGFyZWRfbGVhay5jXG5AQCAtMCwwICYjNDM7MSwyOSBAQFxuJiM0MzsjaW5jbHVkZSBcdTAwM2NzdGRpby5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY3N0ZGxpYi5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY3VuaXN0ZC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY3N5cy9tbWFuLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjc3lzL3N0YXQuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NmY250bC5oXHUwMDNlXG4mIzQzO1xuJiM0MzsjZGVmaW5lIEhQQUdFX1NJWkUgKDIgKiAxMDI0ICogMTAyNClcbiYjNDM7XG4mIzQzO2ludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikge1xuJiM0MzsgICAgaWYgKGFyZ2MgXHUwMDNjIDIpIHtcbiYjNDM7ICAgICAgICBmcHJpbnRmKHN0ZGVyciwgXCYjMzQ7VXNhZ2U6ICVzIFx1MDAzY2ZpbGVfcGF0aFx1MDAzZVxcblwmIzM0OywgYXJndlswXSk7XG4mIzQzOyAgICAgICAgcmV0dXJuIDE7XG4mIzQzOyAgICB9XG4mIzQzOyAgICBjb25zdCBjaGFyICpmaWxlX3BhdGggPSBhcmd2WzFdO1xuJiM0MztcbiYjNDM7ICAgIGludCBmZCA9IG9wZW4oZmlsZV9wYXRoLCBPX0NSRUFUIHwgT19SRFdSLCAwNjY2KTtcbiYjNDM7ICAgIGlmIChmZCBcdTAwM2MgMCkgeyBwZXJyb3IoXCYjMzQ7b3BlblwmIzM0Oyk7IHJldHVybiAxOyB9XG4mIzQzO1xuJiM0MzsgICAgdm9pZCAqYWRkciA9IG1tYXAoTlVMTCwgMiAqIEhQQUdFX1NJWkUsIFBST1RfUkVBRCB8IFBST1RfV1JJVEUsIE1BUF9TSEFSRUQsIGZkLCAwKTtcbiYjNDM7ICAgIGlmIChhZGRyID09IE1BUF9GQUlMRUQpIHsgcGVycm9yKFwmIzM0O21tYXBcJiMzNDspOyBjbG9zZShmZCk7IHJldHVybiAxOyB9XG4mIzQzO1xuJiM0MzsgICAgKih2b2xhdGlsZSBjaGFyICopYWRkciA9IDE7IC8vIEFsbG9jYXRlIDFzdCBwYWdlIG9ubHkuIDJuZCBwYWdlIHJlbWFpbnMgdW5hbGxvY2F0ZWQgKGJ1dCByZXNlcnZlZCkuXG4mIzQzO1xuJiM0MzsgICAgbXVubWFwKGFkZHIsIDIgKiBIUEFHRV9TSVpFKTtcbiYjNDM7ICAgIGNsb3NlKGZkKTtcbiYjNDM7XG4mIzQzOyAgICByZXR1cm4gMDtcbiYjNDM7fVxuZGlmZiAtLWdpdCBhL3N1YnBvb2xfc2hhcmVkX2xlYWsuc2ggYi9zdWJwb29sX3NoYXJlZF9sZWFrLnNoXG5uZXcgZmlsZSBtb2RlIDEwMDc1NVxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLjQ2YzYyMmIxODU1OWEwXG4tLS0gL2Rldi9udWxsXG4mIzQzOyYjNDM7JiM0MzsgYi9zdWJwb29sX3NoYXJlZF9sZWFrLnNoXG5AQCAtMCwwICYjNDM7MSw4NiBAQFxuJiM0MzsjIS9iaW4vYmFzaFxuJiM0MztcbiYjNDM7aWYgWyBcJiMzNDskRVVJRFwmIzM0OyAtbmUgMCBdOyB0aGVuXG4mIzQzOyAgICBlY2hvIFwmIzM0O1BsZWFzZSBydW4gYXMgcm9vdFwmIzM0O1xuJiM0MzsgICAgZXhpdCAxXG4mIzQzO2ZpXG4mIzQzO1xuJiM0MztNTlRfUEFUSD1cJiMzNDsvdG1wL21udF9odWdldGxiX3NoYXJlZF9sZWFrXCYjMzQ7XG4mIzQzO0ZJTEVfUEFUSD1cJiMzNDskTU5UX1BBVEgvdGVzdF9maWxlXCYjMzQ7XG4mIzQzO1xuJiM0MzsjIFNhdmUgb3JpZ2luYWwgdmFsdWVzXG4mIzQzO29yaWdfbnI9JChjYXQgL3N5cy9rZXJuZWwvbW0vaHVnZXBhZ2VzL2h1Z2VwYWdlcy0yMDQ4a0IvbnJfaHVnZXBhZ2VzKVxuJiM0MztcbiYjNDM7Y2xlYW51cCgpIHtcbiYjNDM7ICAgIGVjaG8gXCYjMzQ7Q2xlYW5pbmcgdXAuLi5cJiMzNDtcbiYjNDM7ICAgIHJtIC1mIFwmIzM0OyRGSUxFX1BBVEhcJiMzNDtcbiYjNDM7ICAgIHVtb3VudCBcJiMzNDskTU5UX1BBVEhcJiMzNDsgMlx1MDAzZS9kZXYvbnVsbFxuJiM0MzsgICAgcm1kaXIgXCYjMzQ7JE1OVF9QQVRIXCYjMzQ7IDJcdTAwM2UvZGV2L251bGxcbiYjNDM7ICAgIGVjaG8gXCYjMzQ7JG9yaWdfbnJcJiMzNDsgXHUwMDNlIC9zeXMva2VybmVsL21tL2h1Z2VwYWdlcy9odWdlcGFnZXMtMjA0OGtCL25yX2h1Z2VwYWdlc1xuJiM0MzsgICAgZWNobyBcJiMzNDtDbGVhbnVwIGRvbmUuXCYjMzQ7XG4mIzQzO31cbiYjNDM7dHJhcCBjbGVhbnVwIEVYSVRcbiYjNDM7XG4mIzQzOyMgMS4gU2V0IG5yX2h1Z2VwYWdlcyB0byAyXG4mIzQzO2VjaG8gMiBcdTAwM2UgL3N5cy9rZXJuZWwvbW0vaHVnZXBhZ2VzL2h1Z2VwYWdlcy0yMDQ4a0IvbnJfaHVnZXBhZ2VzXG4mIzQzO1xuJiM0MzsjIDIuIE1vdW50IGh1Z2V0bGJmcyB3aXRoIG1pbl9zaXplPTJNICgxIHBhZ2UpXG4mIzQzO21rZGlyIC1wIFwmIzM0OyRNTlRfUEFUSFwmIzM0O1xuJiM0MztpZiAhIG1vdW50IC10IGh1Z2V0bGJmcyAtbyBtaW5fc2l6ZT0yTSBub25lIFwmIzM0OyRNTlRfUEFUSFwmIzM0OzsgdGhlblxuJiM0MzsgICAgZWNobyBcJiMzNDtGYWlsZWQgdG8gbW91bnQgaHVnZXRsYmZzXCYjMzQ7XG4mIzQzOyAgICBleGl0IDFcbiYjNDM7ZmlcbiYjNDM7XG4mIzQzOyMgQ2hlY2sgcmVzdl9odWdlcGFnZXMgYWZ0ZXIgbW91bnQgKHNob3VsZCBiZSAxKVxuJiM0Mztpbml0aWFsX3Jlc3Y9JChjYXQgL3N5cy9rZXJuZWwvbW0vaHVnZXBhZ2VzL2h1Z2VwYWdlcy0yMDQ4a0IvcmVzdl9odWdlcGFnZXMpXG4mIzQzO2VjaG8gXCYjMzQ7SW5pdGlhbCByZXN2X2h1Z2VwYWdlcyAoYWZ0ZXIgbW91bnQpOiAkaW5pdGlhbF9yZXN2XCYjMzQ7XG4mIzQzO2lmIFsgXCYjMzQ7JGluaXRpYWxfcmVzdlwmIzM0OyAtbmUgMSBdOyB0aGVuXG4mIzQzOyAgICBlY2hvIFwmIzM0O0VSUk9SOiBJbml0aWFsIHJlc3ZfaHVnZXBhZ2VzIGlzIG5vdCAxIVwmIzM0O1xuJiM0MzsgICAgZXhpdCAxXG4mIzQzO2ZpXG4mIzQzO1xuJiM0MzsjIFZlcmlmeSByZXByb2R1Y2VyIGJpbmFyeSBleGlzdHNcbiYjNDM7aWYgWyAhIC14IC4vc3VicG9vbF9zaGFyZWRfbGVhayBdOyB0aGVuXG4mIzQzOyAgICBlY2hvIFwmIzM0O3JlcHJvZHVjZXIgYmluYXJ5ICYjMzk7Li9zdWJwb29sX3NoYXJlZF9sZWFrJiMzOTsgbm90IGZvdW5kIG9yIG5vdCBleGVjdXRhYmxlLlwmIzM0O1xuJiM0MzsgICAgZWNobyBcJiMzNDtQbGVhc2UgY29tcGlsZSBpdCBmaXJzdDogZ2NjIC1zdGF0aWMgLW8gc3VicG9vbF9zaGFyZWRfbGVhayBzdWJwb29sX3NoYXJlZF9sZWFrLmNcJiMzNDtcbiYjNDM7ICAgIGV4aXQgMVxuJiM0MztmaVxuJiM0MztcbiYjNDM7IyAzLiBSdW4gaGVscGVyIHRvIG1hcCA0TUIsIGFsbG9jYXRlIDJNQiwgYW5kIGNsb3NlLlxuJiM0MzsjIFRoaXMgY3JlYXRlcyAyIHJlc2VydmF0aW9ucywgY29uc3VtZXMgMSAoYnkgYWxsb2NhdGluZyBQYWdlIDApLlxuJiM0MzsjIFRoZSB1bmFsbG9jYXRlZCBQYWdlIDEgcmVzZXJ2YXRpb24gcmVtYWlucyBhY3RpdmUgaW4gdGhlIGlub2RlJiMzOTtzIHJlc3ZfbWFwLlxuJiM0MztlY2hvIFwmIzM0O1J1bm5pbmcgaGVscGVyLi4uXCYjMzQ7XG4mIzQzOy4vc3VicG9vbF9zaGFyZWRfbGVhayBcJiMzNDskRklMRV9QQVRIXCYjMzQ7XG4mIzQzO1xuJiM0MztyZXN2X2FmdGVyX2hlbHBlcj0kKGNhdCAvc3lzL2tlcm5lbC9tbS9odWdlcGFnZXMvaHVnZXBhZ2VzLTIwNDhrQi9yZXN2X2h1Z2VwYWdlcylcbiYjNDM7ZWNobyBcJiMzNDtyZXN2X2h1Z2VwYWdlcyBhZnRlciBoZWxwZXIgKHNob3VsZCBiZSAxKTogJHJlc3ZfYWZ0ZXJfaGVscGVyXCYjMzQ7XG4mIzQzOyMgUGFnZSAwIGlzIGFsbG9jYXRlZCAobm8gbG9uZ2VyIHJlc2VydmVkKS4gUGFnZSAxIGlzIHJlc2VydmVkLlxuJiM0MzsjIFNvIHJlc3ZfaHVnZXBhZ2VzIHNob3VsZCBiZSAxLlxuJiM0MztpZiBbIFwmIzM0OyRyZXN2X2FmdGVyX2hlbHBlclwmIzM0OyAtbmUgMSBdOyB0aGVuXG4mIzQzOyAgICBlY2hvIFwmIzM0O0VSUk9SOiByZXN2X2h1Z2VwYWdlcyBpcyBub3QgMSBhZnRlciBoZWxwZXIgcnVuIVwmIzM0O1xuJiM0MzsgICAgZXhpdCAxXG4mIzQzO2ZpXG4mIzQzO1xuJiM0MzsjIDQuIFRydW5jYXRlIGZpbGUgdG8gMk1CIChyZWxlYXNlcyBQYWdlIDEgcmVzZXJ2YXRpb24pXG4mIzQzO2VjaG8gXCYjMzQ7VHJ1bmNhdGluZyBmaWxlIHRvIDJNQiAocmVsZWFzaW5nIDEgcGFnZSByZXNlcnZhdGlvbikuLi5cJiMzNDtcbiYjNDM7dHJ1bmNhdGUgLXMgMk0gXCYjMzQ7JEZJTEVfUEFUSFwmIzM0O1xuJiM0MztcbiYjNDM7IyBDaGVjayByZXN2X2h1Z2VwYWdlcyBhZnRlciB0cnVuY2F0ZS5cbiYjNDM7IyBTaW5jZSBQYWdlIDAgaXMgc3RpbGwgYWxsb2NhdGVkIChhbmQgaW4gcGFnZSBjYWNoZSksIGFuZCBzYXRpc2ZpZXMgdGhlXG4mIzQzOyMgbWluX3NpemU9Mk0gZ3VhcmFudGVlLCB3ZSBzaG91bGQgaGF2ZSAwIHJlc2VydmF0aW9ucyByZW1haW5pbmcuXG4mIzQzOyMgSWYgdGhlIGJ1ZyBpcyBwcmVzZW50LCB0aGUgdHJ1bmNhdGUgcGF0aCB3aWxsIGluY29ycmVjdGx5IHJlc3RvcmUgdGhlXG4mIzQzOyMgcmVzZXJ2YXRpb24gdG8gdGhlIHN1YnBvb2wgYW5kIHNraXAgcmVsZWFzaW5nIGl0IGdsb2JhbGx5LCBsZWF2aW5nXG4mIzQzOyMgcmVzdl9odWdlcGFnZXMgYXQgMS5cbiYjNDM7ZmluYWxfcmVzdj0kKGNhdCAvc3lzL2tlcm5lbC9tbS9odWdlcGFnZXMvaHVnZXBhZ2VzLTIwNDhrQi9yZXN2X2h1Z2VwYWdlcylcbiYjNDM7ZWNobyBcJiMzNDtGaW5hbCByZXN2X2h1Z2VwYWdlcyAoYWZ0ZXIgMk1CIHRydW5jYXRlKTogJGZpbmFsX3Jlc3ZcJiMzNDtcbiYjNDM7XG4mIzQzO2lmIFsgXCYjMzQ7JGZpbmFsX3Jlc3ZcJiMzNDsgLWVxIDEgXTsgdGhlblxuJiM0MzsgICAgZWNobyBcJiMzNDtSRVNVTFQ6IExFQUsgREVURUNURUQgKEZBSUwpXCYjMzQ7XG4mIzQzOyAgICBleGl0IDFcbiYjNDM7ZWxpZiBbIFwmIzM0OyRmaW5hbF9yZXN2XCYjMzQ7IC1lcSAwIF07IHRoZW5cbiYjNDM7ICAgIGVjaG8gXCYjMzQ7UkVTVUxUOiBOTyBMRUFLIChQQVNTKVwmIzM0O1xuJiM0MzsgICAgZXhpdCAwXG4mIzQzO2Vsc2VcbiYjNDM7ICAgIGVjaG8gXCYjMzQ7UkVTVUxUOiBVTkVYUEVDVEVEIFNUQVRFICgkZmluYWxfcmVzdilcJiMzNDtcbiYjNDM7ICAgIGV4aXQgMlxuJiM0MztmaVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3RpbmcvaHVnZXRsYl9zdWJwb29sLy5naXRpZ25vcmUgYi90b29scy90ZXN0aW5nL2h1Z2V0bGJfc3VicG9vbC8uZ2l0aWdub3JlXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLjczNDhjMmM3MmYxZTExXG4tLS0gL2Rldi9udWxsXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL2h1Z2V0bGJfc3VicG9vbC8uZ2l0aWdub3JlXG5AQCAtMCwwICYjNDM7MSBAQFxuJiM0Mzt0ZXN0X3N1YnBvb2xcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL2h1Z2V0bGJfc3VicG9vbC9NYWtlZmlsZSBiL3Rvb2xzL3Rlc3RpbmcvaHVnZXRsYl9zdWJwb29sL01ha2VmaWxlXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLjFiZGI3ZTI2MzU2MTQxXG4tLS0gL2Rldi9udWxsXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL2h1Z2V0bGJfc3VicG9vbC9NYWtlZmlsZVxuQEAgLTAsMCAmIzQzOzEsMTggQEBcbiYjNDM7IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuJiM0MzsuUEhPTlk6IGFsbCBjbGVhbiB0ZXN0XG4mIzQzO1xuJiM0MztDQyA9IGdjY1xuJiM0MztDRkxBR1MgPSAtV2FsbCAtTzIgLUkuLi9zaGFyZWQgLUkuIC1JLi4vLi4vaW5jbHVkZSAtSS4uLy4uL2FyY2gveDg2L2luY2x1ZGUgLXB0aHJlYWRcbiYjNDM7S0VSTkVMX1NVQlBPT0xfSCA9IC4uLy4uLy4uL21tL2h1Z2V0bGJfc3VicG9vbC5oXG4mIzQzO0tFUk5FTF9TVUJQT09MX0MgPSAuLi8uLi8uLi9tbS9odWdldGxiX3N1YnBvb2wuY1xuJiM0MztcbiYjNDM7YWxsOiB0ZXN0XG4mIzQzO1xuJiM0Mzt0ZXN0X3N1YnBvb2w6IHRlc3Rfc3VicG9vbC5jICQoS0VSTkVMX1NVQlBPT0xfQykgJChLRVJORUxfU1VCUE9PTF9IKVxuJiM0MztcdCQoQ0MpICQoQ0ZMQUdTKSB0ZXN0X3N1YnBvb2wuYyAtbyB0ZXN0X3N1YnBvb2xcbiYjNDM7XG4mIzQzO3Rlc3Q6IHRlc3Rfc3VicG9vbFxuJiM0MztcdC4vdGVzdF9zdWJwb29sXG4mIzQzO1xuJiM0MztjbGVhbjpcbiYjNDM7XHRybSAtZiB0ZXN0X3N1YnBvb2xcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL2h1Z2V0bGJfc3VicG9vbC90ZXN0X3N1YnBvb2wuYyBiL3Rvb2xzL3Rlc3RpbmcvaHVnZXRsYl9zdWJwb29sL3Rlc3Rfc3VicG9vbC5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLjc4OTAwMjc0Y2MyNjQ3XG4tLS0gL2Rldi9udWxsXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL2h1Z2V0bGJfc3VicG9vbC90ZXN0X3N1YnBvb2wuY1xuQEAgLTAsMCAmIzQzOzEsNDAwIEBAXG4mIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2Fzc2VydC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY3N0ZGxpYi5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3R5cGVzLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvc2xhYi5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2J1Zy5oXHUwMDNlXG4mIzQzO1xuJiM0MzsvKiBNb2NrZWQgVXNlcnNwYWNlIGltcGxlbWVudGF0aW9uIGZvciBLZXJuZWwgU3VicG9vbCBhbGxvY2F0aW9uIGRlcGVuZGVuY2llcyAqL1xuJiM0MztzdHJ1Y3QgaHN0YXRlIHtcbiYjNDM7XHRpbnQgZHVtbXk7XG4mIzQzO307XG4mIzQzO1xuJiM0MzsjdW5kZWYga3phbGxvY19vYmpcbiYjNDM7I3VuZGVmIGt6YWxsb2Nfb2Jqc1xuJiM0MzsjZGVmaW5lIGt6YWxsb2Nfb2JqKFAsIC4uLikgbWFsbG9jKHNpemVvZihQKSlcbiYjNDM7I2RlZmluZSBremFsbG9jX29ianMoUCwgQ09VTlQsIC4uLikgbWFsbG9jKHNpemVvZihQKSAqIChDT1VOVCkpXG4mIzQzO1xuJiM0MzsjZGVmaW5lIGtmcmVlIGZyZWVcbiYjNDM7I2RlZmluZSBrbWFsbG9jIG1hbGxvY1xuJiM0MztcbiYjNDM7I2RlZmluZSBodWdlX3BhZ2Vfc2hpZnQoaCkgKDIxICYjNDM7ICgwICogKCh1bnNpZ25lZCBsb25nKShoKSBcdTAwMjYgMCkpKVxuJiM0MzsjZGVmaW5lIGh1Z2VfcGFnZV9zaXplKGgpICgxVUwgXHUwMDNjXHUwMDNjIGh1Z2VfcGFnZV9zaGlmdChoKSlcbiYjNDM7XG4mIzQzO3N0YXRpYyBib29sIGh1Z2V0bGJfYWNjdF9tZW1vcnlfY2FsbGVkO1xuJiM0MztzdGF0aWMgc3RydWN0IGhzdGF0ZSAqaHVnZXRsYl9hY2N0X21lbW9yeV9oO1xuJiM0MztzdGF0aWMgbG9uZyBodWdldGxiX2FjY3RfbWVtb3J5X2RlbHRhO1xuJiM0MztcbiYjNDM7c3RhdGljIGludCBodWdldGxiX2FjY3RfbWVtb3J5KHN0cnVjdCBoc3RhdGUgKmgsIGxvbmcgZGVsdGEpXG4mIzQzO3tcbiYjNDM7XHRodWdldGxiX2FjY3RfbWVtb3J5X2NhbGxlZCA9IHRydWU7XG4mIzQzO1x0aHVnZXRsYl9hY2N0X21lbW9yeV9oID0gaDtcbiYjNDM7XHRodWdldGxiX2FjY3RfbWVtb3J5X2RlbHRhID0gZGVsdGE7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIHJlc2V0X2h1Z2V0bGJfYWNjdF9tZW1vcnlfbW9jayh2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0aHVnZXRsYl9hY2N0X21lbW9yeV9jYWxsZWQgPSBmYWxzZTtcbiYjNDM7XHRodWdldGxiX2FjY3RfbWVtb3J5X2ggPSBOVUxMO1xuJiM0MztcdGh1Z2V0bGJfYWNjdF9tZW1vcnlfZGVsdGEgPSAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBhc3NlcnRfaHVnZXRsYl9hY2N0X21lbW9yeV9jYWxsZWQoc3RydWN0IGhzdGF0ZSAqaCwgbG9uZyBkZWx0YSlcbiYjNDM7e1xuJiM0MztcdGFzc2VydChodWdldGxiX2FjY3RfbWVtb3J5X2NhbGxlZCk7XG4mIzQzO1x0YXNzZXJ0KGh1Z2V0bGJfYWNjdF9tZW1vcnlfaCA9PSBoKTtcbiYjNDM7XHRhc3NlcnQoaHVnZXRsYl9hY2N0X21lbW9yeV9kZWx0YSA9PSBkZWx0YSk7XG4mIzQzO1xuJiM0MztcdHJlc2V0X2h1Z2V0bGJfYWNjdF9tZW1vcnlfbW9jaygpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBhc3NlcnRfaHVnZXRsYl9hY2N0X21lbW9yeV9ub3RfY2FsbGVkKHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRhc3NlcnQoIWh1Z2V0bGJfYWNjdF9tZW1vcnlfY2FsbGVkKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7Li4vLi4vLi4vbW0vaHVnZXRsYl9zdWJwb29sLmhcJiMzNDtcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7Li4vLi4vLi4vbW0vaHVnZXRsYl9zdWJwb29sLmNcJiMzNDtcbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIHRlc3Rfc3VicG9vbF9uZXdfcHV0X25vX21pbl9saW1pdCh2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGhzdGF0ZSBoO1xuJiM0MztcdHN0cnVjdCBodWdlcGFnZV9zdWJwb29sICpzcG9vbDtcbiYjNDM7XG4mIzQzO1x0c3Bvb2wgPSBodWdlcGFnZV9uZXdfc3VicG9vbChcdTAwMjZoLCAxMCwgLTEpO1xuJiM0MztcdGFzc2VydChzcG9vbCAhPSBOVUxMKTtcbiYjNDM7XHRhc3NlcnQoc3Bvb2wtXHUwMDNlbWF4X2hwYWdlcyA9PSAxMCk7XG4mIzQzO1x0YXNzZXJ0KHNwb29sLVx1MDAzZW1pbl9ocGFnZXMgPT0gLTEpO1xuJiM0MztcdGFzc2VydChzcG9vbC1cdTAwM2Vyc3ZfaHBhZ2VzID09IC0xKTtcbiYjNDM7XHRhc3NlcnQoc3Bvb2wtXHUwMDNlY291bnQgPT0gMSk7XG4mIzQzO1x0YXNzZXJ0X2h1Z2V0bGJfYWNjdF9tZW1vcnlfbm90X2NhbGxlZCgpO1xuJiM0MztcbiYjNDM7XHRodWdlcGFnZV9wdXRfc3VicG9vbChzcG9vbCk7XG4mIzQzO1x0YXNzZXJ0X2h1Z2V0bGJfYWNjdF9tZW1vcnlfbm90X2NhbGxlZCgpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCB0ZXN0X3N1YnBvb2xfbmV3X3B1dF93aXRoX21pbl9saW1pdCh2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGhzdGF0ZSBoO1xuJiM0MztcdHN0cnVjdCBodWdlcGFnZV9zdWJwb29sICpzcG9vbDtcbiYjNDM7XG4mIzQzO1x0c3Bvb2wgPSBodWdlcGFnZV9uZXdfc3VicG9vbChcdTAwMjZoLCAyMCwgNSk7XG4mIzQzO1x0YXNzZXJ0KHNwb29sICE9IE5VTEwpO1xuJiM0MztcdGFzc2VydChzcG9vbC1cdTAwM2VtYXhfaHBhZ2VzID09IDIwKTtcbiYjNDM7XHRhc3NlcnQoc3Bvb2wtXHUwMDNlbWluX2hwYWdlcyA9PSA1KTtcbiYjNDM7XHRhc3NlcnQoc3Bvb2wtXHUwMDNlcnN2X2hwYWdlcyA9PSA1KTtcbiYjNDM7XHRhc3NlcnQoc3Bvb2wtXHUwMDNlY291bnQgPT0gMSk7XG4mIzQzO1x0YXNzZXJ0X2h1Z2V0bGJfYWNjdF9tZW1vcnlfY2FsbGVkKFx1MDAyNmgsIDUpO1xuJiM0MztcbiYjNDM7XHRodWdlcGFnZV9wdXRfc3VicG9vbChzcG9vbCk7XG4mIzQzO1x0YXNzZXJ0X2h1Z2V0bGJfYWNjdF9tZW1vcnlfY2FsbGVkKFx1MDAyNmgsIC01KTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgdGVzdF9zdWJwb29sX2dldF9wYWdlc19iZWxvd19taW4odm9pZClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBoc3RhdGUgaDtcbiYjNDM7XHRzdHJ1Y3QgaHVnZXBhZ2Vfc3VicG9vbCAqc3Bvb2w7XG4mIzQzO1x0bG9uZyByZXQ7XG4mIzQzO1xuJiM0MztcdC8qIExldCYjMzk7cyBpbml0aWFsaXplOiBtaW5faHBhZ2VzID0gMTAsIHVzZWRfaHBhZ2VzID0gOSwgcnN2X2hwYWdlcyA9IDEgKi9cbiYjNDM7XHRzcG9vbCA9IGh1Z2VwYWdlX25ld19zdWJwb29sKFx1MDAyNmgsIC0xLCAxMCk7XG4mIzQzO1x0YXNzZXJ0X2h1Z2V0bGJfYWNjdF9tZW1vcnlfY2FsbGVkKFx1MDAyNmgsIDEwKTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gaHVnZXBhZ2Vfc3VicG9vbF9nZXRfcGFnZXMoc3Bvb2wsIDkpO1xuJiM0MztcdGFzc2VydChyZXQgPT0gMCk7XG4mIzQzO1x0YXNzZXJ0KHNwb29sLVx1MDAzZXVzZWRfaHBhZ2VzID09IDkpO1xuJiM0MztcdGFzc2VydChzcG9vbC1cdTAwM2Vyc3ZfaHBhZ2VzID09IDEpO1xuJiM0MztcbiYjNDM7XHQvKiBJbnZva2UgR2V0IChDb25zdW1lcyB0aGUgcmVtYWluaW5nIDEgc3VicG9vbCByZXNlcnZlISkgKi9cbiYjNDM7XHRyZXQgPSBodWdlcGFnZV9zdWJwb29sX2dldF9wYWdlcyhzcG9vbCwgMSk7XG4mIzQzO1x0YXNzZXJ0KHJldCA9PSAwKTsgLyogQ292ZXJlZCBieSBzdWJwb29sIHJlc2VydmUhICovXG4mIzQzO1x0YXNzZXJ0KHNwb29sLVx1MDAzZXVzZWRfaHBhZ2VzID09IDEwKTtcbiYjNDM7XHRhc3NlcnQoc3Bvb2wtXHUwMDNlcnN2X2hwYWdlcyA9PSAwKTtcbiYjNDM7XG4mIzQzO1x0LyogSW52b2tlIFB1dCAoUmVwbGVuaXNoZXMgdGhlIHN1YnBvb2wgcmVzZXJ2ZSEpICovXG4mIzQzO1x0cmV0ID0gaHVnZXBhZ2Vfc3VicG9vbF9wdXRfcGFnZXMoc3Bvb2wsIDEpO1xuJiM0MztcdGFzc2VydChyZXQgPT0gMCk7IC8qIEtlcHQgYnkgc3VicG9vbCByZXNlcnZlISAqL1xuJiM0MztcdGFzc2VydChzcG9vbC1cdTAwM2V1c2VkX2hwYWdlcyA9PSA5KTtcbiYjNDM7XHRhc3NlcnQoc3Bvb2wtXHUwMDNlcnN2X2hwYWdlcyA9PSAxKTtcbiYjNDM7XG4mIzQzO1x0LyogQ2xlYW51cDogUmV0dXJuIHVzZWRfaHBhZ2VzIHRvIDAgc28gdGhlIHN1YnBvb2wgZnJlZXMgc3ltbWV0cmljYWxseSEgKi9cbiYjNDM7XHRodWdlcGFnZV9zdWJwb29sX3B1dF9wYWdlcyhzcG9vbCwgOSk7XG4mIzQzO1x0aHVnZXBhZ2VfcHV0X3N1YnBvb2woc3Bvb2wpO1xuJiM0MztcdGFzc2VydF9odWdldGxiX2FjY3RfbWVtb3J5X2NhbGxlZChcdTAwMjZoLCAtMTApO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCB0ZXN0X3N1YnBvb2xfZ2V0X3BhZ2VzX2Nyb3NzaW5nX21pbih2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGhzdGF0ZSBoO1xuJiM0MztcdHN0cnVjdCBodWdlcGFnZV9zdWJwb29sICpzcG9vbDtcbiYjNDM7XHRsb25nIHJldDtcbiYjNDM7XG4mIzQzO1x0LyogTGV0JiMzOTtzIGluaXRpYWxpemU6IG1pbl9ocGFnZXMgPSAxMCwgdXNlZF9ocGFnZXMgPSAxMCwgcnN2X2hwYWdlcyA9IDAgKi9cbiYjNDM7XHRzcG9vbCA9IGh1Z2VwYWdlX25ld19zdWJwb29sKFx1MDAyNmgsIC0xLCAxMCk7XG4mIzQzO1x0YXNzZXJ0X2h1Z2V0bGJfYWNjdF9tZW1vcnlfY2FsbGVkKFx1MDAyNmgsIDEwKTtcbiYjNDM7XG4mIzQzO1x0aHVnZXBhZ2Vfc3VicG9vbF9nZXRfcGFnZXMoc3Bvb2wsIDEwKTtcbiYjNDM7XHRhc3NlcnQoc3Bvb2wtXHUwMDNldXNlZF9ocGFnZXMgPT0gMTApO1xuJiM0MztcdGFzc2VydChzcG9vbC1cdTAwM2Vyc3ZfaHBhZ2VzID09IDApO1xuJiM0MztcbiYjNDM7XHQvKiBJbnZva2UgR2V0IChUcmlnZ2VycyBhIHJlcXVlc3QgZm9yIGEgR2xvYmFsIEJ1ZGR5L1N1cnBsdXMgcGFnZSEpICovXG4mIzQzO1x0cmV0ID0gaHVnZXBhZ2Vfc3VicG9vbF9nZXRfcGFnZXMoc3Bvb2wsIDEpO1xuJiM0MztcdGFzc2VydChyZXQgPT0gMSk7IC8qIFJlcXVpcmVzIGdsb2JhbCBwYWdlISAqL1xuJiM0MztcdGFzc2VydChzcG9vbC1cdTAwM2V1c2VkX2hwYWdlcyA9PSAxMSk7XG4mIzQzO1x0YXNzZXJ0KHNwb29sLVx1MDAzZXJzdl9ocGFnZXMgPT0gMCk7XG4mIzQzO1xuJiM0MztcdC8qIEludm9rZSBQdXQgKEFib3ZlIG1pbmltdW0sIHNvIGl0IHJlbGVhc2VzIHRoZSBwYWdlIHRvIHRoZSBHbG9iYWwgUG9vbCEpICovXG4mIzQzO1x0cmV0ID0gaHVnZXBhZ2Vfc3VicG9vbF9wdXRfcGFnZXMoc3Bvb2wsIDEpO1xuJiM0MztcdGFzc2VydChyZXQgPT0gMSk7IC8qIERyb3BwZWQgdG8gZ2xvYmFsIHBvb2whICovXG4mIzQzO1x0YXNzZXJ0KHNwb29sLVx1MDAzZXVzZWRfaHBhZ2VzID09IDEwKTtcbiYjNDM7XHRhc3NlcnQoc3Bvb2wtXHUwMDNlcnN2X2hwYWdlcyA9PSAwKTtcbiYjNDM7XG4mIzQzO1x0LyogQ2xlYW51cCAqL1xuJiM0MztcdGh1Z2VwYWdlX3N1YnBvb2xfcHV0X3BhZ2VzKHNwb29sLCAxMCk7XG4mIzQzO1x0aHVnZXBhZ2VfcHV0X3N1YnBvb2woc3Bvb2wpO1xuJiM0MztcdGFzc2VydF9odWdldGxiX2FjY3RfbWVtb3J5X2NhbGxlZChcdTAwMjZoLCAtMTApO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCB0ZXN0X3N1YnBvb2xfZ2V0X3BhZ2VzX2Nyb3NzaW5nX21pbl9tdWx0aSh2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGhzdGF0ZSBoO1xuJiM0MztcdHN0cnVjdCBodWdlcGFnZV9zdWJwb29sICpzcG9vbDtcbiYjNDM7XHRsb25nIHJldDtcbiYjNDM7XG4mIzQzO1x0LyogU2NlbmFyaW8gMTogQ3Jvc3NpbmcgZW50aXJlbHkgaW50byBzdXJwbHVzIHRlcnJpdG9yeSBieSBhIGRlbHRhIFx1MDAzZSAxICovXG4mIzQzO1x0LyogTGV0JiMzOTtzIGluaXRpYWxpemU6IG1pbl9ocGFnZXMgPSAxMCwgdXNlZF9ocGFnZXMgPSA4LCByc3ZfaHBhZ2VzID0gMiAqL1xuJiM0MztcdHNwb29sID0gaHVnZXBhZ2VfbmV3X3N1YnBvb2woXHUwMDI2aCwgLTEsIDEwKTtcbiYjNDM7XHRhc3NlcnRfaHVnZXRsYl9hY2N0X21lbW9yeV9jYWxsZWQoXHUwMDI2aCwgMTApO1xuJiM0MztcbiYjNDM7XHRyZXQgPSBodWdlcGFnZV9zdWJwb29sX2dldF9wYWdlcyhzcG9vbCwgOCk7XG4mIzQzO1x0YXNzZXJ0KHJldCA9PSAwKTtcbiYjNDM7XHRhc3NlcnQoc3Bvb2wtXHUwMDNldXNlZF9ocGFnZXMgPT0gOCk7XG4mIzQzO1x0YXNzZXJ0KHNwb29sLVx1MDAzZXJzdl9ocGFnZXMgPT0gMik7XG4mIzQzO1xuJiM0MztcdC8qIEludm9rZSBHZXQgd2l0aCBkZWx0YSA9IDUgKENyb3NzZXMgbWluIGxpbWl0IG9mIDEwIHVwIHRvIDEzKSAqL1xuJiM0MztcdHJldCA9IGh1Z2VwYWdlX3N1YnBvb2xfZ2V0X3BhZ2VzKHNwb29sLCA1KTtcbiYjNDM7XHRhc3NlcnQocmV0ID09IDMpOyAvKiAoOCAmIzQzOyA1KSAtIDEwID0gMyBnbG9iYWwgcGFnZXMgcmVxdWlyZWQhICovXG4mIzQzO1x0YXNzZXJ0KHNwb29sLVx1MDAzZXVzZWRfaHBhZ2VzID09IDEzKTtcbiYjNDM7XHRhc3NlcnQoc3Bvb2wtXHUwMDNlcnN2X2hwYWdlcyA9PSAwKTtcbiYjNDM7XG4mIzQzO1x0LyogSW52b2tlIFB1dCB3aXRoIGRlbHRhID0gNSAoRHJvcHMgZnJvbSAxMyBkb3duIHRvIDgpICovXG4mIzQzO1x0cmV0ID0gaHVnZXBhZ2Vfc3VicG9vbF9wdXRfcGFnZXMoc3Bvb2wsIDUpO1xuJiM0MztcdGFzc2VydChyZXQgPT0gMyk7IC8qIDMgc3VycGx1cyBwYWdlcyByZWxlYXNlZCB0byB0aGUgZ2xvYmFsIHBvb2whICovXG4mIzQzO1x0YXNzZXJ0KHNwb29sLVx1MDAzZXVzZWRfaHBhZ2VzID09IDgpO1xuJiM0MztcdGFzc2VydChzcG9vbC1cdTAwM2Vyc3ZfaHBhZ2VzID09IDIpOyAvKiAyIHN1YnBvb2wgcmVzZXJ2ZXMgcGVyZmVjdGx5IHJlc3RvcmVkISAqL1xuJiM0MztcbiYjNDM7XHQvKiBTY2VuYXJpbyAyOiBMYW5kaW5nIGV4YWN0bHkgb24gdGhlIG1pbl9ocGFnZXMgYm91bmRhcnkgd2l0aCBkZWx0YSBcdTAwM2UgMSAqL1xuJiM0MztcdHJldCA9IGh1Z2VwYWdlX3N1YnBvb2xfZ2V0X3BhZ2VzKHNwb29sLCAyKTtcbiYjNDM7XHRhc3NlcnQocmV0ID09IDApOyAvKiBQZXJmZWN0bHkgY292ZXJlZCBieSByZW1haW5pbmcgMiBzdWJwb29sIHJlc2VydmVzISAqL1xuJiM0MztcdGFzc2VydChzcG9vbC1cdTAwM2V1c2VkX2hwYWdlcyA9PSAxMCk7XG4mIzQzO1x0YXNzZXJ0KHNwb29sLVx1MDAzZXJzdl9ocGFnZXMgPT0gMCk7XG4mIzQzO1xuJiM0MztcdHJldCA9IGh1Z2VwYWdlX3N1YnBvb2xfcHV0X3BhZ2VzKHNwb29sLCAyKTtcbiYjNDM7XHRhc3NlcnQocmV0ID09IDApOyAvKiBTd2FsbG93ZWQgcGVyZmVjdGx5IHRvIHJlcGxlbmlzaCB0aGUgMiBzdWJwb29sIHJlc2VydmVzISAqL1xuJiM0MztcdGFzc2VydChzcG9vbC1cdTAwM2V1c2VkX2hwYWdlcyA9PSA4KTtcbiYjNDM7XHRhc3NlcnQoc3Bvb2wtXHUwMDNlcnN2X2hwYWdlcyA9PSAyKTtcbiYjNDM7XG4mIzQzO1x0LyogQ2xlYW51cCAqL1xuJiM0MztcdGh1Z2VwYWdlX3N1YnBvb2xfcHV0X3BhZ2VzKHNwb29sLCA4KTtcbiYjNDM7XHRodWdlcGFnZV9wdXRfc3VicG9vbChzcG9vbCk7XG4mIzQzO1x0YXNzZXJ0X2h1Z2V0bGJfYWNjdF9tZW1vcnlfY2FsbGVkKFx1MDAyNmgsIC0xMCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIHRlc3Rfc3VicG9vbF9nZXRfcGFnZXNfbWF4X2xpbWl0KHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgaHN0YXRlIGg7XG4mIzQzO1x0c3RydWN0IGh1Z2VwYWdlX3N1YnBvb2wgKnNwb29sO1xuJiM0MztcdGxvbmcgcmV0O1xuJiM0MztcbiYjNDM7XHRzcG9vbCA9IGh1Z2VwYWdlX25ld19zdWJwb29sKFx1MDAyNmgsIDUsIC0xKTtcbiYjNDM7XHRhc3NlcnRfaHVnZXRsYl9hY2N0X21lbW9yeV9ub3RfY2FsbGVkKCk7XG4mIzQzO1xuJiM0MztcdHJldCA9IGh1Z2VwYWdlX3N1YnBvb2xfZ2V0X3BhZ2VzKHNwb29sLCA1KTtcbiYjNDM7XHRhc3NlcnQocmV0ID09IDUpO1xuJiM0MztcdGFzc2VydChzcG9vbC1cdTAwM2V1c2VkX2hwYWdlcyA9PSA1KTtcbiYjNDM7XHRhc3NlcnQoc3Bvb2wtXHUwMDNlcnN2X2hwYWdlcyA9PSAtMSk7XG4mIzQzO1xuJiM0MztcdC8qIEludm9rZSBHZXQgKFNob3VsZCB0cmlnZ2VyIC1FTk9NRU0gZHVlIHRvIG1heCBjYXAgbGltaXQgZXhjZWVkZWQhKSAqL1xuJiM0MztcdHJldCA9IGh1Z2VwYWdlX3N1YnBvb2xfZ2V0X3BhZ2VzKHNwb29sLCAxKTtcbiYjNDM7XHRhc3NlcnQocmV0ID09IC1FTk9NRU0pO1xuJiM0MztcdGFzc2VydChzcG9vbC1cdTAwM2V1c2VkX2hwYWdlcyA9PSA1KTsgLyogVW5jaGFuZ2VkICovXG4mIzQzO1xuJiM0MztcdC8qIENsZWFudXAgKi9cbiYjNDM7XHRodWdlcGFnZV9zdWJwb29sX3B1dF9wYWdlcyhzcG9vbCwgNSk7XG4mIzQzO1x0aHVnZXBhZ2VfcHV0X3N1YnBvb2woc3Bvb2wpO1xuJiM0MztcdGFzc2VydF9odWdldGxiX2FjY3RfbWVtb3J5X25vdF9jYWxsZWQoKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgdGVzdF9zdWJwb29sX2dldF9wYWdlc19ub19saW1pdHModm9pZClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBoc3RhdGUgaDtcbiYjNDM7XHRzdHJ1Y3QgaHVnZXBhZ2Vfc3VicG9vbCAqc3Bvb2w7XG4mIzQzO1x0bG9uZyByZXQ7XG4mIzQzO1xuJiM0MztcdHNwb29sID0gaHVnZXBhZ2VfbmV3X3N1YnBvb2woXHUwMDI2aCwgLTEsIC0xKTtcbiYjNDM7XHRhc3NlcnRfaHVnZXRsYl9hY2N0X21lbW9yeV9ub3RfY2FsbGVkKCk7XG4mIzQzO1xuJiM0MztcdGh1Z2VwYWdlX3N1YnBvb2xfZ2V0X3BhZ2VzKHNwb29sLCA1KTtcbiYjNDM7XHRhc3NlcnQoc3Bvb2wtXHUwMDNldXNlZF9ocGFnZXMgPT0gNSk7XG4mIzQzO1xuJiM0MztcdC8qIEludm9rZSBHZXQgKFN1cnBsdXMgR2xvYmFsIFRlcnJpdG9yeSkgKi9cbiYjNDM7XHRyZXQgPSBodWdlcGFnZV9zdWJwb29sX2dldF9wYWdlcyhzcG9vbCwgMik7XG4mIzQzO1x0YXNzZXJ0KHJldCA9PSAyKTtcbiYjNDM7XHRhc3NlcnQoc3Bvb2wtXHUwMDNldXNlZF9ocGFnZXMgPT0gNyk7XG4mIzQzO1xuJiM0MztcdC8qIEludm9rZSBQdXQgKi9cbiYjNDM7XHRyZXQgPSBodWdlcGFnZV9zdWJwb29sX3B1dF9wYWdlcyhzcG9vbCwgMik7XG4mIzQzO1x0YXNzZXJ0KHJldCA9PSAyKTtcbiYjNDM7XHRhc3NlcnQoc3Bvb2wtXHUwMDNldXNlZF9ocGFnZXMgPT0gNSk7XG4mIzQzO1xuJiM0MztcdC8qIENsZWFudXAgKi9cbiYjNDM7XHRodWdlcGFnZV9zdWJwb29sX3B1dF9wYWdlcyhzcG9vbCwgNSk7XG4mIzQzO1x0aHVnZXBhZ2VfcHV0X3N1YnBvb2woc3Bvb2wpO1xuJiM0MztcdGFzc2VydF9odWdldGxiX2FjY3RfbWVtb3J5X25vdF9jYWxsZWQoKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgdGVzdF9zdWJwb29sX2ZyZWVfaHBhZ2VzKHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgaHN0YXRlIGg7XG4mIzQzO1x0c3RydWN0IGh1Z2VwYWdlX3N1YnBvb2wgKnNwb29sO1xuJiM0MztcbiYjNDM7XHQvKiBUZXN0IHRoYXQgZnJlZV9ocGFnZXMgd2l0aCBOTyBtaW5fc2l6ZSB3b3JrcyBwZXJmZWN0bHkgKi9cbiYjNDM7XHRzcG9vbCA9IGh1Z2VwYWdlX25ld19zdWJwb29sKFx1MDAyNmgsIDE1LCAtMSk7XG4mIzQzO1x0aHVnZXBhZ2Vfc3VicG9vbF9nZXRfcGFnZXMoc3Bvb2wsIDMpO1xuJiM0MztcdGFzc2VydChodWdlcGFnZV9zdWJwb29sX2ZyZWVfaHBhZ2VzKHNwb29sKSA9PSAxMik7XG4mIzQzO1x0aHVnZXBhZ2Vfc3VicG9vbF9wdXRfcGFnZXMoc3Bvb2wsIDMpO1xuJiM0MztcdGh1Z2VwYWdlX3B1dF9zdWJwb29sKHNwb29sKTtcbiYjNDM7XG4mIzQzO1x0LyogVGVzdCB0aGF0IGZyZWVfaHBhZ2VzIHdpdGggYSBtaW5fc2l6ZSBjb25maWd1cmVkIGlzIENPTVBMRVRFTFkgVU5BRkZFQ1RFRCBieSBpdCAqL1xuJiM0MztcdHNwb29sID0gaHVnZXBhZ2VfbmV3X3N1YnBvb2woXHUwMDI2aCwgMTUsIDUpO1xuJiM0MztcdGFzc2VydF9odWdldGxiX2FjY3RfbWVtb3J5X2NhbGxlZChcdTAwMjZoLCA1KTtcbiYjNDM7XHRodWdlcGFnZV9zdWJwb29sX2dldF9wYWdlcyhzcG9vbCwgMyk7XG4mIzQzO1x0YXNzZXJ0KGh1Z2VwYWdlX3N1YnBvb2xfZnJlZV9ocGFnZXMoc3Bvb2wpID09IDEyKTsgLyogU2hvdWxkIHN0aWxsIGJlIDE1IC0gMyA9IDEyISAqL1xuJiM0MztcdGh1Z2VwYWdlX3N1YnBvb2xfcHV0X3BhZ2VzKHNwb29sLCAzKTtcbiYjNDM7XHRodWdlcGFnZV9wdXRfc3VicG9vbChzcG9vbCk7XG4mIzQzO1x0YXNzZXJ0X2h1Z2V0bGJfYWNjdF9tZW1vcnlfY2FsbGVkKFx1MDAyNmgsIC01KTtcbiYjNDM7XG4mIzQzO1x0c3Bvb2wgPSBodWdlcGFnZV9uZXdfc3VicG9vbChcdTAwMjZoLCAtMSwgLTEpO1xuJiM0MztcdGh1Z2VwYWdlX3N1YnBvb2xfZ2V0X3BhZ2VzKHNwb29sLCAzKTtcbiYjNDM7XHRhc3NlcnQoaHVnZXBhZ2Vfc3VicG9vbF9mcmVlX2hwYWdlcyhzcG9vbCkgPT0gLTEpO1xuJiM0MztcdGh1Z2VwYWdlX3N1YnBvb2xfcHV0X3BhZ2VzKHNwb29sLCAzKTtcbiYjNDM7XHRodWdlcGFnZV9wdXRfc3VicG9vbChzcG9vbCk7XG4mIzQzO1xuJiM0MztcdC8qIFRlc3QgdGhhdCBmcmVlX2hwYWdlcyB3aXRoIGEgbWluX3NpemUgY29uZmlndXJlZCBhbmQgTk8gbWF4IHNpemUgcmV0dXJucyAtMSAqL1xuJiM0MztcdHNwb29sID0gaHVnZXBhZ2VfbmV3X3N1YnBvb2woXHUwMDI2aCwgLTEsIDUpO1xuJiM0MztcdGFzc2VydF9odWdldGxiX2FjY3RfbWVtb3J5X2NhbGxlZChcdTAwMjZoLCA1KTtcbiYjNDM7XHRodWdlcGFnZV9zdWJwb29sX2dldF9wYWdlcyhzcG9vbCwgMyk7XG4mIzQzO1x0YXNzZXJ0KGh1Z2VwYWdlX3N1YnBvb2xfZnJlZV9ocGFnZXMoc3Bvb2wpID09IC0xKTtcbiYjNDM7XHRodWdlcGFnZV9zdWJwb29sX3B1dF9wYWdlcyhzcG9vbCwgMyk7XG4mIzQzO1x0aHVnZXBhZ2VfcHV0X3N1YnBvb2woc3Bvb2wpO1xuJiM0MztcdGFzc2VydF9odWdldGxiX2FjY3RfbWVtb3J5X2NhbGxlZChcdTAwMjZoLCAtNSk7XG4mIzQzO1xuJiM0MztcdHNwb29sID0gaHVnZXBhZ2VfbmV3X3N1YnBvb2woXHUwMDI2aCwgMywgLTEpO1xuJiM0MztcdGh1Z2VwYWdlX3N1YnBvb2xfZ2V0X3BhZ2VzKHNwb29sLCAzKTtcbiYjNDM7XHRhc3NlcnQoaHVnZXBhZ2Vfc3VicG9vbF9mcmVlX2hwYWdlcyhzcG9vbCkgPT0gMCk7XG4mIzQzO1x0aHVnZXBhZ2Vfc3VicG9vbF9wdXRfcGFnZXMoc3Bvb2wsIDMpO1xuJiM0MztcdGh1Z2VwYWdlX3B1dF9zdWJwb29sKHNwb29sKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgdGVzdF9zdWJwb29sX21heF9ocGFnZXModm9pZClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBoc3RhdGUgaDtcbiYjNDM7XHRzdHJ1Y3QgaHVnZXBhZ2Vfc3VicG9vbCAqc3Bvb2w7XG4mIzQzO1xuJiM0MztcdHNwb29sID0gaHVnZXBhZ2VfbmV3X3N1YnBvb2woXHUwMDI2aCwgMTIzLCAtMSk7XG4mIzQzO1x0YXNzZXJ0KGh1Z2VwYWdlX3N1YnBvb2xfbWF4X2hwYWdlcyhzcG9vbCkgPT0gMTIzKTtcbiYjNDM7XHRodWdlcGFnZV9wdXRfc3VicG9vbChzcG9vbCk7XG4mIzQzO1xuJiM0MztcdC8qIFRlc3QgdGhhdCBtYXhfaHBhZ2VzIHdpdGggYSBtaW5fc2l6ZSBjb25maWd1cmVkIGlzIENPTVBMRVRFTFkgVU5BRkZFQ1RFRCBieSBpdCAqL1xuJiM0MztcdHNwb29sID0gaHVnZXBhZ2VfbmV3X3N1YnBvb2woXHUwMDI2aCwgMTIzLCA1KTtcbiYjNDM7XHRhc3NlcnRfaHVnZXRsYl9hY2N0X21lbW9yeV9jYWxsZWQoXHUwMDI2aCwgNSk7XG4mIzQzO1x0YXNzZXJ0KGh1Z2VwYWdlX3N1YnBvb2xfbWF4X2hwYWdlcyhzcG9vbCkgPT0gMTIzKTtcbiYjNDM7XHRodWdlcGFnZV9wdXRfc3VicG9vbChzcG9vbCk7XG4mIzQzO1x0YXNzZXJ0X2h1Z2V0bGJfYWNjdF9tZW1vcnlfY2FsbGVkKFx1MDAyNmgsIC01KTtcbiYjNDM7XG4mIzQzO1x0c3Bvb2wgPSBodWdlcGFnZV9uZXdfc3VicG9vbChcdTAwMjZoLCAtMSwgLTEpO1xuJiM0MztcdGFzc2VydChodWdlcGFnZV9zdWJwb29sX21heF9ocGFnZXMoc3Bvb2wpID09IC0xKTtcbiYjNDM7XHRodWdlcGFnZV9wdXRfc3VicG9vbChzcG9vbCk7XG4mIzQzO1xuJiM0MztcdHNwb29sID0gaHVnZXBhZ2VfbmV3X3N1YnBvb2woXHUwMDI2aCwgLTEsIDUpO1xuJiM0MztcdGFzc2VydF9odWdldGxiX2FjY3RfbWVtb3J5X2NhbGxlZChcdTAwMjZoLCA1KTtcbiYjNDM7XHRhc3NlcnQoaHVnZXBhZ2Vfc3VicG9vbF9tYXhfaHBhZ2VzKHNwb29sKSA9PSAtMSk7XG4mIzQzO1x0aHVnZXBhZ2VfcHV0X3N1YnBvb2woc3Bvb2wpO1xuJiM0MztcdGFzc2VydF9odWdldGxiX2FjY3RfbWVtb3J5X2NhbGxlZChcdTAwMjZoLCAtNSk7XG4mIzQzO1xuJiM0MztcdHNwb29sID0gaHVnZXBhZ2VfbmV3X3N1YnBvb2woXHUwMDI2aCwgMCwgLTEpO1xuJiM0MztcdGFzc2VydChodWdlcGFnZV9zdWJwb29sX21heF9ocGFnZXMoc3Bvb2wpID09IDApO1xuJiM0MztcdGh1Z2VwYWdlX3B1dF9zdWJwb29sKHNwb29sKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgdGVzdF9zdWJwb29sX21heF9zaXplKHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgaHN0YXRlIGg7XG4mIzQzO1x0c3RydWN0IGh1Z2VwYWdlX3N1YnBvb2wgKnNwb29sO1xuJiM0MztcbiYjNDM7XHRzcG9vbCA9IGh1Z2VwYWdlX25ld19zdWJwb29sKFx1MDAyNmgsIDEwLCAtMSk7XG4mIzQzO1x0YXNzZXJ0KGh1Z2VwYWdlX3N1YnBvb2xfbWF4X3NpemUoc3Bvb2wpID09ICgxMFVMTCBcdTAwM2NcdTAwM2MgMjEpKTtcbiYjNDM7XHRodWdlcGFnZV9wdXRfc3VicG9vbChzcG9vbCk7XG4mIzQzO1xuJiM0MztcdC8qIFRlc3QgdGhhdCBtYXhfc2l6ZSB3aXRoIGEgbWluX3NpemUgY29uZmlndXJlZCBpcyBDT01QTEVURUxZIFVOQUZGRUNURUQgYnkgaXQgKi9cbiYjNDM7XHRzcG9vbCA9IGh1Z2VwYWdlX25ld19zdWJwb29sKFx1MDAyNmgsIDEwLCA1KTtcbiYjNDM7XHRhc3NlcnRfaHVnZXRsYl9hY2N0X21lbW9yeV9jYWxsZWQoXHUwMDI2aCwgNSk7XG4mIzQzO1x0YXNzZXJ0KGh1Z2VwYWdlX3N1YnBvb2xfbWF4X3NpemUoc3Bvb2wpID09ICgxMFVMTCBcdTAwM2NcdTAwM2MgMjEpKTtcbiYjNDM7XHRodWdlcGFnZV9wdXRfc3VicG9vbChzcG9vbCk7XG4mIzQzO1x0YXNzZXJ0X2h1Z2V0bGJfYWNjdF9tZW1vcnlfY2FsbGVkKFx1MDAyNmgsIC01KTtcbiYjNDM7XG4mIzQzO1x0c3Bvb2wgPSBodWdlcGFnZV9uZXdfc3VicG9vbChcdTAwMjZoLCAtMSwgLTEpO1xuJiM0MztcdGFzc2VydChodWdlcGFnZV9zdWJwb29sX21heF9zaXplKHNwb29sKSA9PSAtMVVMTCk7XG4mIzQzO1x0aHVnZXBhZ2VfcHV0X3N1YnBvb2woc3Bvb2wpO1xuJiM0MztcbiYjNDM7XHRzcG9vbCA9IGh1Z2VwYWdlX25ld19zdWJwb29sKFx1MDAyNmgsIDAsIC0xKTtcbiYjNDM7XHRhc3NlcnQoaHVnZXBhZ2Vfc3VicG9vbF9tYXhfc2l6ZShzcG9vbCkgPT0gMFVMTCk7XG4mIzQzO1x0aHVnZXBhZ2VfcHV0X3N1YnBvb2woc3Bvb2wpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCB0ZXN0X3N1YnBvb2xfbWluX3NpemUodm9pZClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBoc3RhdGUgaDtcbiYjNDM7XHRzdHJ1Y3QgaHVnZXBhZ2Vfc3VicG9vbCAqc3Bvb2w7XG4mIzQzO1xuJiM0MztcdHNwb29sID0gaHVnZXBhZ2VfbmV3X3N1YnBvb2woXHUwMDI2aCwgLTEsIDUpO1xuJiM0MztcdGFzc2VydF9odWdldGxiX2FjY3RfbWVtb3J5X2NhbGxlZChcdTAwMjZoLCA1KTtcbiYjNDM7XHRhc3NlcnQoaHVnZXBhZ2Vfc3VicG9vbF9taW5fc2l6ZShzcG9vbCkgPT0gKDVVTEwgXHUwMDNjXHUwMDNjIDIxKSk7XG4mIzQzO1x0aHVnZXBhZ2VfcHV0X3N1YnBvb2woc3Bvb2wpO1xuJiM0MztcdGFzc2VydF9odWdldGxiX2FjY3RfbWVtb3J5X2NhbGxlZChcdTAwMjZoLCAtNSk7XG4mIzQzO1xuJiM0MztcdC8qIFRlc3QgdGhhdCBtaW5fc2l6ZSB3aXRoIGEgbWF4X3NpemUgY29uZmlndXJlZCBpcyBDT01QTEVURUxZIFVOQUZGRUNURUQgYnkgaXQgKi9cbiYjNDM7XHRzcG9vbCA9IGh1Z2VwYWdlX25ld19zdWJwb29sKFx1MDAyNmgsIDIwLCA1KTtcbiYjNDM7XHRhc3NlcnRfaHVnZXRsYl9hY2N0X21lbW9yeV9jYWxsZWQoXHUwMDI2aCwgNSk7XG4mIzQzO1x0YXNzZXJ0KGh1Z2VwYWdlX3N1YnBvb2xfbWluX3NpemUoc3Bvb2wpID09ICg1VUxMIFx1MDAzY1x1MDAzYyAyMSkpO1xuJiM0MztcdGh1Z2VwYWdlX3B1dF9zdWJwb29sKHNwb29sKTtcbiYjNDM7XHRhc3NlcnRfaHVnZXRsYl9hY2N0X21lbW9yeV9jYWxsZWQoXHUwMDI2aCwgLTUpO1xuJiM0MztcbiYjNDM7XHRzcG9vbCA9IGh1Z2VwYWdlX25ld19zdWJwb29sKFx1MDAyNmgsIC0xLCAtMSk7XG4mIzQzO1x0YXNzZXJ0KGh1Z2VwYWdlX3N1YnBvb2xfbWluX3NpemUoc3Bvb2wpID09IC0xVUxMKTtcbiYjNDM7XHRodWdlcGFnZV9wdXRfc3VicG9vbChzcG9vbCk7XG4mIzQzO1xuJiM0MztcdHNwb29sID0gaHVnZXBhZ2VfbmV3X3N1YnBvb2woXHUwMDI2aCwgLTEsIDApO1xuJiM0MztcdGFzc2VydF9odWdldGxiX2FjY3RfbWVtb3J5X2NhbGxlZChcdTAwMjZoLCAwKTtcbiYjNDM7XHRhc3NlcnQoaHVnZXBhZ2Vfc3VicG9vbF9taW5fc2l6ZShzcG9vbCkgPT0gMFVMTCk7XG4mIzQzO1x0aHVnZXBhZ2VfcHV0X3N1YnBvb2woc3Bvb2wpO1xuJiM0MztcdGFzc2VydF9odWdldGxiX2FjY3RfbWVtb3J5X2NhbGxlZChcdTAwMjZoLCAwKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7aW50IG1haW4odm9pZClcbiYjNDM7e1xuJiM0MztcdHRlc3Rfc3VicG9vbF9uZXdfcHV0X25vX21pbl9saW1pdCgpO1xuJiM0MztcdHRlc3Rfc3VicG9vbF9uZXdfcHV0X3dpdGhfbWluX2xpbWl0KCk7XG4mIzQzO1x0dGVzdF9zdWJwb29sX2dldF9wYWdlc19iZWxvd19taW4oKTtcbiYjNDM7XHR0ZXN0X3N1YnBvb2xfZ2V0X3BhZ2VzX2Nyb3NzaW5nX21pbigpO1xuJiM0MztcdHRlc3Rfc3VicG9vbF9nZXRfcGFnZXNfY3Jvc3NpbmdfbWluX211bHRpKCk7XG4mIzQzO1x0dGVzdF9zdWJwb29sX2dldF9wYWdlc19tYXhfbGltaXQoKTtcbiYjNDM7XHR0ZXN0X3N1YnBvb2xfZ2V0X3BhZ2VzX25vX2xpbWl0cygpO1xuJiM0MztcdHRlc3Rfc3VicG9vbF9mcmVlX2hwYWdlcygpO1xuJiM0MztcdHRlc3Rfc3VicG9vbF9tYXhfaHBhZ2VzKCk7XG4mIzQzO1x0dGVzdF9zdWJwb29sX21heF9zaXplKCk7XG4mIzQzO1x0dGVzdF9zdWJwb29sX21pbl9zaXplKCk7XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjEgMTg6MDg8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0hVR0VUTEJGUyYjMzQ7LAogICAgJiMzNDtNRU1DRyYjMzQ7LAogICAgJiMzNDtDR1JPVVBfSFVHRVRMQiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2FsbG9jX2h1Z2V0bGJfZm9saW8mIzM0OywKICAgICYjMzQ7aHVnZXRsYl9yZXNlcnZlX3BhZ2VzJiMzNDssCiAgICAmIzM0O21lbV9jZ3JvdXBfaHVnZXRsYl90cnlfY2hhcmdlJiMzNDssCiAgICAmIzM0O21lbV9jZ3JvdXBfaHVnZXRsYl9jb21taXRfY2hhcmdlJiMzNDssCiAgICAmIzM0O21lbV9jZ3JvdXBfaHVnZXRsYl9jYW5jZWxfY2hhcmdlJiMzNDssCiAgICAmIzM0O2h1Z2VwYWdlX3N1YnBvb2xfZ2V0X3BhZ2VzJiMzNDssCiAgICAmIzM0O2h1Z2VwYWdlX3N1YnBvb2xfcHV0X3BhZ2VzJiMzNDssCiAgICAmIzM0O2h1Z2VwYWdlX25ld19zdWJwb29sJiMzNDssCiAgICAmIzM0O2h1Z2VwYWdlX3B1dF9zdWJwb29sJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHNlcmllcyByZWZhY3RvcnMgdGhlIGh1Z2V0bGIgc3VicG9vbCBsb2dpYyBpbnRvIGEgc2VwYXJhdGUgZmlsZSBhbmQgbW9kaWZpZXMgdGhlIGh1Z2V0bGIgYWxsb2NhdGlvbiBwYXRoIHRvIHVzZSBhIG5ldyB0cnkvY29tbWl0L2NhbmNlbCBjaGFyZ2luZyBtb2RlbCBmb3IgbWVtb3J5IGNncm91cHMuIEl0IGFsc28gbW9kaWZpZXMgdGhlIGh1Z2V0bGJfcmVzZXJ2ZV9wYWdlcyBlcnJvciBwYXRoLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIGNncm91cCBsb2dpYyB0aGF0IGFyZSByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIGh1Z2V0bGJmcyBhbmQgY2dyb3VwZnMsIG1ha2luZyB0aGVtIGhpZ2hseSByZWxldmFudCBmb3IgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLApldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXQKICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LAogICBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNzAwODUyY2Q5YTAyM2E1MTA1ZTIzNDFkMjQ3Yjg2NDAwMmNjYzZmYwpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUdWUgSnVsIDIxIDE4OjA4OjE1IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvY2dyb3VwX3YyX2FsbG9jYXRpb25fZmFpbHVyZS5jIGIvY2dyb3VwX3YyX2FsbG9jYXRpb25fZmFpbHVyZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwLi45MzhjYmYwMmFlNmY3YQotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL2Nncm91cF92Ml9hbGxvY2F0aW9uX2ZhaWx1cmUuYwpAQCAtMCwwICYjNDM7MSwxNjAgQEAKJiM0MzsjZGVmaW5lIF9HTlVfU09VUkNFCiYjNDM7I2luY2x1ZGUgJmx0O3N0ZGlvLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O3N0ZGxpYi5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDt1bmlzdGQuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7ZmNudGwuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7c3lzL21tYW4uaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7c3lzL3N0YXQuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7c3lzL3R5cGVzLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O3N5cy93YWl0LmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O3N0cmluZy5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtlcnJuby5oJmd0OwomIzQzOwomIzQzOyNkZWZpbmUgQ0dST1VQX1BBVEggJiMzNDsvc3lzL2ZzL2Nncm91cCYjMzQ7CiYjNDM7I2RlZmluZSBURVNUX0NHUk9VUCAmIzM0O3Rlc3RfcmVwcm9kdWNlciYjMzQ7CiYjNDM7I2RlZmluZSBURVNUX0NHUk9VUF9QQVRIIENHUk9VUF9QQVRIICYjMzQ7LyYjMzQ7IFRFU1RfQ0dST1VQCiYjNDM7CiYjNDM7dm9pZCB3cml0ZV9maWxlKGNvbnN0IGNoYXIgKnBhdGgsIGNvbnN0IGNoYXIgKnZhbCkgewomIzQzOyAgICBpbnQgZmQgPSBvcGVuKHBhdGgsIE9fV1JPTkxZKTsKJiM0MzsgICAgaWYgKGZkICZsdDsgMCkgewomIzQzOyAgICAgICAgZnByaW50ZihzdGRlcnIsICYjMzQ7RmFpbGVkIHRvIG9wZW4gJXM6ICVzXG4mIzM0OywgcGF0aCwgc3RyZXJyb3IoZXJybm8pKTsKJiM0MzsgICAgICAgIGV4aXQoMSk7CiYjNDM7ICAgIH0KJiM0MzsgICAgaWYgKHdyaXRlKGZkLCB2YWwsIHN0cmxlbih2YWwpKSAmbHQ7IDApIHsKJiM0MzsgICAgICAgIGZwcmludGYoc3RkZXJyLCAmIzM0O0ZhaWxlZCB0byB3cml0ZSAlcyB0byAlczogJXNcbiYjMzQ7LCB2YWwsIHBhdGgsIHN0cmVycm9yKGVycm5vKSk7CiYjNDM7ICAgICAgICBjbG9zZShmZCk7CiYjNDM7ICAgICAgICBleGl0KDEpOwomIzQzOyAgICB9CiYjNDM7ICAgIGNsb3NlKGZkKTsKJiM0Mzt9CiYjNDM7CiYjNDM7aW50IGlzX2h1Z2V0bGJfYWNjb3VudGluZ19lbmFibGVkKCkgewomIzQzOyAgICBGSUxFICpmcCA9IGZvcGVuKCYjMzQ7L3Byb2MvbW91bnRzJiMzNDssICYjMzQ7ciYjMzQ7KTsKJiM0MzsgICAgaWYgKCFmcCkgewomIzQzOyAgICAgICAgcGVycm9yKCYjMzQ7Zm9wZW4gL3Byb2MvbW91bnRzJiMzNDspOwomIzQzOyAgICAgICAgcmV0dXJuIC0xOwomIzQzOyAgICB9CiYjNDM7CiYjNDM7ICAgIGNoYXIgbGluZVsxMDI0XTsKJiM0MzsgICAgaW50IGVuYWJsZWQgPSAwOwomIzQzOyAgICB3aGlsZSAoZmdldHMobGluZSwgc2l6ZW9mKGxpbmUpLCBmcCkpIHsKJiM0MzsgICAgICAgIGNoYXIgc3BlY1syNTZdLCBmaWxlWzI1Nl0sIHR5cGVbMjU2XSwgb3B0c1s1MTJdOwomIzQzOyAgICAgICAgaWYgKHNzY2FuZihsaW5lLCAmIzM0OyUyNTVzICUyNTVzICUyNTVzICU1MTFzJiMzNDssIHNwZWMsIGZpbGUsIHR5cGUsIG9wdHMpID09IDQpIHsKJiM0MzsgICAgICAgICAgICBpZiAoc3RyY21wKGZpbGUsIENHUk9VUF9QQVRIKSA9PSAwICZhbXA7JmFtcDsgc3RyY21wKHR5cGUsICYjMzQ7Y2dyb3VwMiYjMzQ7KSA9PSAwKSB7CiYjNDM7ICAgICAgICAgICAgICAgIGlmIChzdHJzdHIob3B0cywgJiMzNDttZW1vcnlfaHVnZXRsYl9hY2NvdW50aW5nJiMzNDspICE9IE5VTEwpIHsKJiM0MzsgICAgICAgICAgICAgICAgICAgIGVuYWJsZWQgPSAxOwomIzQzOyAgICAgICAgICAgICAgICB9CiYjNDM7ICAgICAgICAgICAgICAgIGJyZWFrOwomIzQzOyAgICAgICAgICAgIH0KJiM0MzsgICAgICAgIH0KJiM0MzsgICAgfQomIzQzOyAgICBmY2xvc2UoZnApOwomIzQzOyAgICByZXR1cm4gZW5hYmxlZDsKJiM0Mzt9CiYjNDM7CiYjNDM7aW50IGVuYWJsZV9odWdldGxiX2FjY291bnRpbmcoKSB7CiYjNDM7ICAgIHByaW50ZigmIzM0O0F0dGVtcHRpbmcgdG8gcmVtb3VudCBjZ3JvdXAyIHdpdGggbWVtb3J5X2h1Z2V0bGJfYWNjb3VudGluZy4uLlxuJiMzNDspOwomIzQzOyAgICBpbnQgcmV0ID0gc3lzdGVtKCYjMzQ7bW91bnQgLW8gcmVtb3VudCxtZW1vcnlfaHVnZXRsYl9hY2NvdW50aW5nICYjMzQ7IENHUk9VUF9QQVRIKTsKJiM0MzsgICAgaWYgKHJldCAhPSAwKSB7CiYjNDM7ICAgICAgICBmcHJpbnRmKHN0ZGVyciwgJiMzNDtGYWlsZWQgdG8gcmVtb3VudDogc3lzdGVtKCkgcmV0dXJuZWQgJWRcbiYjMzQ7LCByZXQpOwomIzQzOyAgICAgICAgcmV0dXJuIC0xOwomIzQzOyAgICB9CiYjNDM7ICAgIHJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztpbnQgbWFpbigpIHsKJiM0MzsgICAgc3RydWN0IHN0YXQgc3Q7CiYjNDM7ICAgIGlmIChzdGF0KENHUk9VUF9QQVRILCAmYW1wO3N0KSAhPSAwIHx8ICFTX0lTRElSKHN0LnN0X21vZGUpKSB7CiYjNDM7ICAgICAgICBmcHJpbnRmKHN0ZGVyciwgJiMzNDtjZ3JvdXAgdjIgbm90IG1vdW50ZWQgYXQgJXNcbiYjMzQ7LCBDR1JPVVBfUEFUSCk7CiYjNDM7ICAgICAgICByZXR1cm4gMTsKJiM0MzsgICAgfQomIzQzOwomIzQzOyAgICBpbnQgZW5hYmxlZCA9IGlzX2h1Z2V0bGJfYWNjb3VudGluZ19lbmFibGVkKCk7CiYjNDM7ICAgIGlmIChlbmFibGVkICZsdDsgMCkgewomIzQzOyAgICAgICAgcmV0dXJuIDE7CiYjNDM7ICAgIH0KJiM0MzsgICAgaWYgKCFlbmFibGVkKSB7CiYjNDM7ICAgICAgICBpZiAoZW5hYmxlX2h1Z2V0bGJfYWNjb3VudGluZygpICE9IDApIHsKJiM0MzsgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgJiMzNDtDb3VsZCBub3QgZW5hYmxlIG1lbW9yeV9odWdldGxiX2FjY291bnRpbmdcbiYjMzQ7KTsKJiM0MzsgICAgICAgICAgICByZXR1cm4gMTsKJiM0MzsgICAgICAgIH0KJiM0MzsgICAgICAgIC8vIFJlLWNoZWNrCiYjNDM7ICAgICAgICBlbmFibGVkID0gaXNfaHVnZXRsYl9hY2NvdW50aW5nX2VuYWJsZWQoKTsKJiM0MzsgICAgICAgIGlmIChlbmFibGVkICZsdDs9IDApIHsKJiM0MzsgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgJiMzNDtGYWlsZWQgdG8gZW5hYmxlIG1lbW9yeV9odWdldGxiX2FjY291bnRpbmcgKHJlLWNoZWNrIGZhaWxlZClcbiYjMzQ7KTsKJiM0MzsgICAgICAgICAgICByZXR1cm4gMTsKJiM0MzsgICAgICAgIH0KJiM0MzsgICAgICAgIHByaW50ZigmIzM0O1N1Y2Nlc3NmdWxseSBlbmFibGVkIG1lbW9yeV9odWdldGxiX2FjY291bnRpbmdcbiYjMzQ7KTsKJiM0MzsgICAgfSBlbHNlIHsKJiM0MzsgICAgICAgIHByaW50ZigmIzM0O21lbW9yeV9odWdldGxiX2FjY291bnRpbmcgaXMgYWxyZWFkeSBlbmFibGVkXG4mIzM0Oyk7CiYjNDM7ICAgIH0KJiM0MzsKJiM0MzsgICAgLy8gRW5hYmxlIG1lbW9yeSBjb250cm9sbGVyIGluIHN1YnRyZWUKJiM0MzsgICAgaW50IGZkID0gb3BlbihDR1JPVVBfUEFUSCAmIzM0Oy9jZ3JvdXAuc3VidHJlZV9jb250cm9sJiMzNDssIE9fV1JPTkxZKTsKJiM0MzsgICAgaWYgKGZkICZndDs9IDApIHsKJiM0MzsgICAgICAgIGlmICh3cml0ZShmZCwgJiMzNDsmIzQzO21lbW9yeSYjMzQ7LCA3KSAmbHQ7IDApIHsKJiM0MzsgICAgICAgICAgICAvLyBNaWdodCBmYWlsIGlmIGFscmVhZHkgZW5hYmxlZCBvciBub3Qgc3VwcG9ydGVkLCBpZ25vcmUgZm9yIG5vdwomIzQzOyAgICAgICAgfQomIzQzOyAgICAgICAgY2xvc2UoZmQpOwomIzQzOyAgICB9CiYjNDM7CiYjNDM7ICAgIGlmIChta2RpcihURVNUX0NHUk9VUF9QQVRILCAwNzU1KSAhPSAwKSB7CiYjNDM7ICAgICAgICBpZiAoZXJybm8gIT0gRUVYSVNUKSB7CiYjNDM7ICAgICAgICAgICAgcGVycm9yKCYjMzQ7bWtkaXIgdGVzdF9yZXByb2R1Y2VyJiMzNDspOwomIzQzOyAgICAgICAgICAgIHJldHVybiAxOwomIzQzOyAgICAgICAgfQomIzQzOyAgICB9CiYjNDM7CiYjNDM7ICAgIC8vIFNldCBtZW1vcnkgbGltaXQgdG8gMU1CIChsZXNzIHRoYW4gMk1CIGh1Z2VwYWdlKQomIzQzOyAgICB3cml0ZV9maWxlKFRFU1RfQ0dST1VQX1BBVEggJiMzNDsvbWVtb3J5Lm1heCYjMzQ7LCAmIzM0OzFNJiMzNDspOwomIzQzOwomIzQzOyAgICBwaWRfdCBwaWQgPSBmb3JrKCk7CiYjNDM7ICAgIGlmIChwaWQgJmx0OyAwKSB7CiYjNDM7ICAgICAgICBwZXJyb3IoJiMzNDtmb3JrJiMzNDspOwomIzQzOyAgICAgICAgcmV0dXJuIDE7CiYjNDM7ICAgIH0KJiM0MzsKJiM0MzsgICAgaWYgKHBpZCA9PSAwKSB7CiYjNDM7ICAgICAgICAvLyBDaGlsZAomIzQzOyAgICAgICAgLy8gTW92ZSB0byBjZ3JvdXAKJiM0MzsgICAgICAgIHdyaXRlX2ZpbGUoVEVTVF9DR1JPVVBfUEFUSCAmIzM0Oy9jZ3JvdXAucHJvY3MmIzM0OywgJiMzNDswJiMzNDspOwomIzQzOwomIzQzOyAgICAgICAgcHJpbnRmKCYjMzQ7Q2hpbGQ6IEF0dGVtcHRpbmcgdG8gYWxsb2NhdGUgYW5kIHRvdWNoIDJNQiBodWdlcGFnZS4uLlxuJiMzNDspOwomIzQzOyAgICAgICAgLy8gQWxsb2NhdGUgMk1CIGh1Z2VwYWdlCiYjNDM7ICAgICAgICBzaXplX3Qgc2l6ZSA9IDIgKiAxMDI0ICogMTAyNDsKJiM0MzsgICAgICAgIHZvaWQgKmFkZHIgPSBtbWFwKE5VTEwsIHNpemUsIFBST1RfUkVBRCB8IFBST1RfV1JJVEUsCiYjNDM7ICAgICAgICAgICAgICAgICAgICAgICAgICBNQVBfUFJJVkFURSB8IE1BUF9BTk9OWU1PVVMgfCBNQVBfSFVHRVRMQiwgLTEsIDApOwomIzQzOyAgICAgICAgaWYgKGFkZHIgPT0gTUFQX0ZBSUxFRCkgewomIzQzOyAgICAgICAgICAgIHBlcnJvcigmIzM0O0NoaWxkOiBtbWFwIE1BUF9IVUdFVExCJiMzNDspOwomIzQzOyAgICAgICAgICAgIGV4aXQoMSk7CiYjNDM7ICAgICAgICB9CiYjNDM7CiYjNDM7ICAgICAgICBwcmludGYoJiMzNDtDaGlsZDogbW1hcCBzdWNjZWVkZWQgYXQgJXAsIHRvdWNoaW5nIGl0IG5vdyAoc2hvdWxkIHRyaWdnZXIgZmF1bHQpLi4uXG4mIzM0OywgYWRkcik7CiYjNDM7ICAgICAgICAvLyBUaGlzIHNob3VsZCB0cmlnZ2VyIHRoZSBmYXVsdCBhbmQgY2FsbCBhbGxvY19odWdldGxiX2ZvbGlvIC0mZ3Q7IG1lbV9jZ3JvdXBfY2hhcmdlX2h1Z2V0bGIKJiM0MzsgICAgICAgIC8vIHdoaWNoIHNob3VsZCBmYWlsIGFuZCB0cmlnZ2VyIHRoZSBidWcuCiYjNDM7ICAgICAgICAqKHZvbGF0aWxlIGNoYXIgKilhZGRyID0gMTsKJiM0MzsKJiM0MzsgICAgICAgIHByaW50ZigmIzM0O0NoaWxkOiBTdWNjZXNzZnVsbHkgdG91Y2hlZCBwYWdlIChidWcgbm90IHRyaWdnZXJlZD8pLlxuJiMzNDspOwomIzQzOyAgICAgICAgbXVubWFwKGFkZHIsIHNpemUpOwomIzQzOyAgICAgICAgZXhpdCgwKTsKJiM0MzsgICAgfQomIzQzOwomIzQzOyAgICAvLyBQYXJlbnQKJiM0MzsgICAgaW50IHN0YXR1czsKJiM0MzsgICAgd2FpdHBpZChwaWQsICZhbXA7c3RhdHVzLCAwKTsKJiM0MzsKJiM0MzsgICAgcHJpbnRmKCYjMzQ7UGFyZW50OiBDaGlsZCBleGl0ZWQuIENsZWFuaW5nIHVwLlxuJiMzNDspOwomIzQzOyAgICBybWRpcihURVNUX0NHUk9VUF9QQVRIKTsKJiM0MzsKJiM0MzsgICAgaWYgKFdJRlNJR05BTEVEKHN0YXR1cykpIHsKJiM0MzsgICAgICAgIHByaW50ZigmIzM0O1BhcmVudDogQ2hpbGQga2lsbGVkIGJ5IHNpZ25hbCAlZCAoJXMpXG4mIzM0OywKJiM0MzsgICAgICAgICAgICAgICBXVEVSTVNJRyhzdGF0dXMpLCBzdHJzaWduYWwoV1RFUk1TSUcoc3RhdHVzKSkpOwomIzQzOyAgICAgICAgaWYgKFdURVJNU0lHKHN0YXR1cykgPT0gU0lHQlVTKSB7CiYjNDM7ICAgICAgICAgICAgcHJpbnRmKCYjMzQ7UGFyZW50OiBDaGlsZCBnb3QgU0lHQlVTIGFzIGV4cGVjdGVkIChpZiBrZXJuZWwgZGlkbiYjMzk7dCBjcmFzaCkuXG4mIzM0Oyk7CiYjNDM7ICAgICAgICB9CiYjNDM7ICAgIH0gZWxzZSBpZiAoV0lGRVhJVEVEKHN0YXR1cykpIHsKJiM0MzsgICAgICAgIHByaW50ZigmIzM0O1BhcmVudDogQ2hpbGQgZXhpdGVkIHdpdGggc3RhdHVzICVkXG4mIzM0OywgV0VYSVRTVEFUVVMoc3RhdHVzKSk7CiYjNDM7ICAgIH0KJiM0MzsKJiM0MzsgICAgcmV0dXJuIDA7CiYjNDM7fQpkaWZmIC0tZ2l0IGEvZnMvaHVnZXRsYmZzL2lub2RlLmMgYi9mcy9odWdldGxiZnMvaW5vZGUuYwppbmRleCAyMTZlMWEwZGQwYjIzNy4uOGFiZTA1NzRiMWM3ZWEgMTAwNjQ0Ci0tLSBhL2ZzL2h1Z2V0bGJmcy9pbm9kZS5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2h1Z2V0bGJmcy9pbm9kZS5jCkBAIC0yNSw2ICYjNDM7MjUsNyBAQAogI2luY2x1ZGUgJmx0O2xpbnV4L2N0eXBlLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvYmFja2luZy1kZXYuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9odWdldGxiLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJiMzNDsuLi8uLi9tbS9odWdldGxiX3N1YnBvb2wuaCYjMzQ7CiAjaW5jbHVkZSAmbHQ7bGludXgvZm9saW9fYmF0Y2guaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9mc19wYXJzZXIuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9tbWFuLmgmZ3Q7CkBAIC0xMDU5LDcgJiM0MzsxMDYwLDYgQEAgc3RhdGljIGludCBodWdldGxiZnNfc2hvd19vcHRpb25zKHN0cnVjdCBzZXFfZmlsZSAqbSwgc3RydWN0IGRlbnRyeSAqcm9vdCkKIAlzdHJ1Y3QgaHVnZXRsYmZzX3NiX2luZm8gKnNiaW5mbyA9IEhVR0VUTEJGU19TQihyb290LSZndDtkX3NiKTsKIAlzdHJ1Y3QgaHVnZXBhZ2Vfc3VicG9vbCAqc3Bvb2wgPSBzYmluZm8tJmd0O3Nwb29sOwogCXVuc2lnbmVkIGxvbmcgaHBhZ2Vfc2l6ZSA9IGh1Z2VfcGFnZV9zaXplKHNiaW5mby0mZ3Q7aHN0YXRlKTsKLQl1bnNpZ25lZCBocGFnZV9zaGlmdCA9IGh1Z2VfcGFnZV9zaGlmdChzYmluZm8tJmd0O2hzdGF0ZSk7CiAJY2hhciBtb2Q7CiAKIAlpZiAoIXVpZF9lcShzYmluZm8tJmd0O3VpZCwgR0xPQkFMX1JPT1RfVUlEKSkKQEAgLTEwODEsMTIgJiM0MzsxMDgxLDEzIEBAIHN0YXRpYyBpbnQgaHVnZXRsYmZzX3Nob3dfb3B0aW9ucyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHN0cnVjdCBkZW50cnkgKnJvb3QpCiAJfQogCXNlcV9wcmludGYobSwgJiMzNDsscGFnZXNpemU9JWx1JWMmIzM0OywgaHBhZ2Vfc2l6ZSwgbW9kKTsKIAlpZiAoc3Bvb2wpIHsKLQkJaWYgKHNwb29sLSZndDttYXhfaHBhZ2VzICE9IC0xKQotCQkJc2VxX3ByaW50ZihtLCAmIzM0OyxzaXplPSVsbHUmIzM0OywKLQkJCQkgICAodW5zaWduZWQgbG9uZyBsb25nKXNwb29sLSZndDttYXhfaHBhZ2VzICZsdDsmbHQ7IGhwYWdlX3NoaWZ0KTsKLQkJaWYgKHNwb29sLSZndDttaW5faHBhZ2VzICE9IC0xKQotCQkJc2VxX3ByaW50ZihtLCAmIzM0OyxtaW5fc2l6ZT0lbGx1JiMzNDssCi0JCQkJICAgKHVuc2lnbmVkIGxvbmcgbG9uZylzcG9vbC0mZ3Q7bWluX2hwYWdlcyAmbHQ7Jmx0OyBocGFnZV9zaGlmdCk7CiYjNDM7CQl1bnNpZ25lZCBsb25nIGxvbmcgbWF4X3NpemUgPSBodWdlcGFnZV9zdWJwb29sX21heF9zaXplKHNwb29sKTsKJiM0MzsJCXVuc2lnbmVkIGxvbmcgbG9uZyBtaW5fc2l6ZSA9IGh1Z2VwYWdlX3N1YnBvb2xfbWluX3NpemUoc3Bvb2wpOwomIzQzOwomIzQzOwkJaWYgKG1heF9zaXplICE9IC0xVUxMKQomIzQzOwkJCXNlcV9wcmludGYobSwgJiMzNDssc2l6ZT0lbGx1JiMzNDssIG1heF9zaXplKTsKJiM0MzsJCWlmIChtaW5fc2l6ZSAhPSAtMVVMTCkKJiM0MzsJCQlzZXFfcHJpbnRmKG0sICYjMzQ7LG1pbl9zaXplPSVsbHUmIzM0OywgbWluX3NpemUpOwogCX0KIAlyZXR1cm4gMDsKIH0KQEAgLTExMDUsMTQgJiM0MzsxMTA2LDggQEAgc3RhdGljIGludCBodWdldGxiZnNfc3RhdGZzKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGtzdGF0ZnMgKmJ1ZikKIAkJLyogSWYgbm8gbGltaXRzIHNldCwganVzdCByZXBvcnQgMCBvciAtMSBmb3IgbWF4L2ZyZWUvdXNlZAogCQkgKiBibG9ja3MsIGxpa2Ugc2ltcGxlX3N0YXRmcygpICovCiAJCWlmIChzYmluZm8tJmd0O3Nwb29sKSB7Ci0JCQlsb25nIGZyZWVfcGFnZXM7Ci0KLQkJCXNwaW5fbG9ja19pcnEoJmFtcDtzYmluZm8tJmd0O3Nwb29sLSZndDtsb2NrKTsKLQkJCWJ1Zi0mZ3Q7Zl9ibG9ja3MgPSBzYmluZm8tJmd0O3Nwb29sLSZndDttYXhfaHBhZ2VzOwotCQkJZnJlZV9wYWdlcyA9IHNiaW5mby0mZ3Q7c3Bvb2wtJmd0O21heF9ocGFnZXMKLQkJCQktIHNiaW5mby0mZ3Q7c3Bvb2wtJmd0O3VzZWRfaHBhZ2VzOwotCQkJYnVmLSZndDtmX2JhdmFpbCA9IGJ1Zi0mZ3Q7Zl9iZnJlZSA9IGZyZWVfcGFnZXM7Ci0JCQlzcGluX3VubG9ja19pcnEoJmFtcDtzYmluZm8tJmd0O3Nwb29sLSZndDtsb2NrKTsKJiM0MzsJCQlidWYtJmd0O2ZfYmxvY2tzID0gaHVnZXBhZ2Vfc3VicG9vbF9tYXhfaHBhZ2VzKHNiaW5mby0mZ3Q7c3Bvb2wpOwomIzQzOwkJCWJ1Zi0mZ3Q7Zl9iYXZhaWwgPSBidWYtJmd0O2ZfYmZyZWUgPSBodWdlcGFnZV9zdWJwb29sX2ZyZWVfaHBhZ2VzKHNiaW5mby0mZ3Q7c3Bvb2wpOwogCQkJYnVmLSZndDtmX2ZpbGVzID0gc2JpbmZvLSZndDttYXhfaW5vZGVzOwogCQkJYnVmLSZndDtmX2ZmcmVlID0gc2JpbmZvLSZndDtmcmVlX2lub2RlczsKIAkJfQpkaWZmIC0tZ2l0IGEvaHVnZXRsYl9yZXNlcnZlX3BhZ2VzX291dF9wdXRfcGFnZXMuYyBiL2h1Z2V0bGJfcmVzZXJ2ZV9wYWdlc19vdXRfcHV0X3BhZ2VzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAuLjllNjNmYzg5OTdkNTdkCi0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvaHVnZXRsYl9yZXNlcnZlX3BhZ2VzX291dF9wdXRfcGFnZXMuYwpAQCAtMCwwICYjNDM7MSw0OSBAQAomIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCiYjNDM7I2RlZmluZSBfR05VX1NPVVJDRQomIzQzOyNpbmNsdWRlICZsdDtzdGRpby5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtzdGRsaWIuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7dW5pc3RkLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O3N5cy9tbWFuLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2ZjbnRsLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2Vyci5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtlcnJuby5oJmd0OwomIzQzOwomIzQzO2ludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKJiM0Mzt7CiYjNDM7CWNvbnN0IGNoYXIgKmZpbGVfcGF0aDsKJiM0MzsJc2l6ZV90IHNpemU7CiYjNDM7CWludCBmZDsKJiM0MzsJdm9pZCAqYWRkcjsKJiM0MzsKJiM0MzsJaWYgKGFyZ2MgJmx0OyAzKSB7CiYjNDM7CQlmcHJpbnRmKHN0ZGVyciwgJiMzNDtVc2FnZTogJXMgJmx0O2h1Z2V0bGJmc19maWxlJmd0OyAmbHQ7c2l6ZV9pbl9ieXRlcyZndDtcbiYjMzQ7LAomIzQzOwkJCWFyZ3ZbMF0pOwomIzQzOwkJcmV0dXJuIDE7CiYjNDM7CX0KJiM0MzsKJiM0MzsJZmlsZV9wYXRoID0gYXJndlsxXTsKJiM0MzsJc2l6ZSA9IHN0cnRvdWxsKGFyZ3ZbMl0sIE5VTEwsIDApOwomIzQzOwomIzQzOwlmZCA9IG9wZW4oZmlsZV9wYXRoLCBPX0NSRUFUIHwgT19SRFdSLCAwNjY2KTsKJiM0MzsJaWYgKGZkICZsdDsgMCkKJiM0MzsJCWVycigxLCAmIzM0O29wZW4mIzM0Oyk7CiYjNDM7CiYjNDM7CXByaW50ZigmIzM0O0F0dGVtcHRpbmcgdG8gbW1hcCAlenUgYnl0ZXMgc2hhcmVkIG9uICVzLi4uXG4mIzM0Oywgc2l6ZSwKJiM0MzsJICAgICAgIGZpbGVfcGF0aCk7CiYjNDM7CWFkZHIgPSBtbWFwKE5VTEwsIHNpemUsIFBST1RfUkVBRCB8IFBST1RfV1JJVEUsIE1BUF9TSEFSRUQsIGZkLCAwKTsKJiM0MzsJaWYgKGFkZHIgPT0gTUFQX0ZBSUxFRCkgewomIzQzOwkJaWYgKGVycm5vID09IEVOT01FTSkgewomIzQzOwkJCXByaW50ZigmIzM0O21tYXAgZmFpbGVkIHdpdGggRU5PTUVNIGFzIGV4cGVjdGVkLlxuJiMzNDspOwomIzQzOwkJCWNsb3NlKGZkKTsKJiM0MzsJCQlyZXR1cm4gMDsKJiM0MzsJCX0KJiM0MzsJCXBlcnJvcigmIzM0O21tYXAgZmFpbGVkIHdpdGggdW5leHBlY3RlZCBlcnJvciYjMzQ7KTsKJiM0MzsJCWNsb3NlKGZkKTsKJiM0MzsJCXJldHVybiAxOwomIzQzOwl9CiYjNDM7CiYjNDM7CXByaW50ZigmIzM0O0VSUk9SOiBtbWFwIFNVQ0NFRURFRCB1bmV4cGVjdGVkbHkgYXQgJXBcbiYjMzQ7LCBhZGRyKTsKJiM0MzsJbXVubWFwKGFkZHIsIHNpemUpOwomIzQzOwljbG9zZShmZCk7CiYjNDM7CXJldHVybiAxOwomIzQzO30KZGlmZiAtLWdpdCBhL2h1Z2V0bGJfcmVzZXJ2ZV9wYWdlc19vdXRfcHV0X3BhZ2VzLnNoIGIvaHVnZXRsYl9yZXNlcnZlX3BhZ2VzX291dF9wdXRfcGFnZXMuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMDAwMDAwMDAuLjAzMGUxOTE1NTM5YjRlCi0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvaHVnZXRsYl9yZXNlcnZlX3BhZ2VzX291dF9wdXRfcGFnZXMuc2gKQEAgLTAsMCAmIzQzOzEsMTUzIEBACiYjNDM7IyEvYmluL2Jhc2gKJiM0MzsjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCiYjNDM7c2V0IC1lCiYjNDM7CiYjNDM7aWYgWyAmIzM0OyRFVUlEJiMzNDsgLW5lIDAgXTsgdGhlbgomIzQzOyAgICBlY2hvICYjMzQ7UGxlYXNlIHJ1biBhcyByb290JiMzNDsKJiM0MzsgICAgZXhpdCAxCiYjNDM7ZmkKJiM0MzsKJiM0MztTQ1JJUFRfRElSPSYjMzQ7JChjZCAmIzM0OyQoZGlybmFtZSAmIzM0OyR7QkFTSF9TT1VSQ0VbMF19JiMzNDspJiMzNDsgJmFtcDsmYW1wOyBwd2QpJiMzNDsKJiM0MztjZCAmIzM0OyRTQ1JJUFRfRElSJiMzNDsKJiM0MzsKJiM0MzsjIERldGVjdCBkZWZhdWx0IGh1Z2VwYWdlIHNpemUgdG8gc3VwcG9ydCBib3RoIDJNQiBhbmQgMUdCIHBhZ2VzIHJvYnVzdGx5CiYjNDM7aHB6PSQoZ3JlcCAtaSBodWdlcGFnZXNpemUgL3Byb2MvbWVtaW5mbyB8IGF3ayAmIzM5O3twcmludCAkMn0mIzM5OykKJiM0MztrYj0kaHB6CiYjNDM7bWI9JCgoa2IgLyAxMDI0KSkKJiM0MztocGFnZV9zaXplX2J5dGVzPSQoKGtiICogMTAyNCkpCiYjNDM7CiYjNDM7aHBhZ2VfZGlyPSYjMzQ7aHVnZXBhZ2VzLSR7a2J9a0ImIzM0OwomIzQzO1NZU0ZTX1BBVEg9JiMzNDsvc3lzL2tlcm5lbC9tbS9odWdlcGFnZXMvJGhwYWdlX2RpciYjMzQ7CiYjNDM7CiYjNDM7TU5UX1BBVEg9JiMzNDsvdG1wL21udF9odWdldGxiX3JlcHJvJiMzNDsKJiM0MztGSUxFX1BBVEg9JiMzNDskTU5UX1BBVEgvdGVzdF9maWxlJiMzNDsKJiM0MzsKJiM0MzsjIFNhdmUgb3JpZ2luYWwgdmFsdWVzIGZvciBzYWZlIHJlc3RvcmF0aW9uCiYjNDM7b3JpZ19ucj0kKGNhdCAmIzM0OyRTWVNGU19QQVRIL25yX2h1Z2VwYWdlcyYjMzQ7KQomIzQzO29yaWdfb3ZlcmNvbW1pdD0kKGNhdCAmIzM0OyRTWVNGU19QQVRIL25yX292ZXJjb21taXRfaHVnZXBhZ2VzJiMzNDspCiYjNDM7CiYjNDM7Y2xlYW51cCgpIHsKJiM0MzsgICAgZWNobyAmIzM0O0NsZWFuaW5nIHVwLi4uJiMzNDsKJiM0MzsgICAgcm0gLWYgJiMzNDskRklMRV9QQVRIJiMzNDsKJiM0MzsgICAgdW1vdW50ICYjMzQ7JE1OVF9QQVRIJiMzNDsgMiZndDsvZGV2L251bGwKJiM0MzsgICAgcm1kaXIgJiMzNDskTU5UX1BBVEgmIzM0OyAyJmd0Oy9kZXYvbnVsbAomIzQzOyAgICBlY2hvICYjMzQ7JG9yaWdfbnImIzM0OyAmZ3Q7ICYjMzQ7JFNZU0ZTX1BBVEgvbnJfaHVnZXBhZ2VzJiMzNDsKJiM0MzsgICAgZWNobyAmIzM0OyRvcmlnX292ZXJjb21taXQmIzM0OyAmZ3Q7ICYjMzQ7JFNZU0ZTX1BBVEgvbnJfb3ZlcmNvbW1pdF9odWdlcGFnZXMmIzM0OwomIzQzOyAgICBlY2hvICYjMzQ7Q2xlYW51cCBkb25lLiYjMzQ7CiYjNDM7fQomIzQzO3RyYXAgY2xlYW51cCBFWElUCiYjNDM7CiYjNDM7IyBWZXJpZnkgcmVwcm9kdWNlciBiaW5hcnkgZXhpc3RzCiYjNDM7aWYgWyAhIC14IC4vaHVnZXRsYl9yZXNlcnZlX3BhZ2VzX291dF9wdXRfcGFnZXMgXTsgdGhlbgomIzQzOyAgICBlY2hvICYjMzQ7cmVwcm9kdWNlciBiaW5hcnkgJiMzOTsuL2h1Z2V0bGJfcmVzZXJ2ZV9wYWdlc19vdXRfcHV0X3BhZ2VzJiMzOTsgbm90IGZvdW5kIG9yIG5vdCBleGVjdXRhYmxlLiYjMzQ7CiYjNDM7ICAgIGVjaG8gJiMzNDtQbGVhc2UgY29tcGlsZSBpdCBmaXJzdDogZ2NjIC1zdGF0aWMgLW8gaHVnZXRsYl9yZXNlcnZlX3BhZ2VzX291dF9wdXRfcGFnZXMgaHVnZXRsYl9yZXNlcnZlX3BhZ2VzX291dF9wdXRfcGFnZXMuYyYjMzQ7CiYjNDM7ICAgIGV4aXQgMQomIzQzO2ZpCiYjNDM7CiYjNDM7IyAxLiBTZXQgZ2xvYmFsIHBvb2wgc3VjaCB0aGF0IG9ubHkgdGhlIG1vdW50LXRpbWUgcmVzZXJ2YXRpb24gY2FuIHN1Y2NlZWQKJiM0MztlY2hvIDEgJmd0OyAmIzM0OyRTWVNGU19QQVRIL25yX2h1Z2VwYWdlcyYjMzQ7CiYjNDM7ZWNobyAwICZndDsgJiMzNDskU1lTRlNfUEFUSC9ucl9vdmVyY29tbWl0X2h1Z2VwYWdlcyYjMzQ7CiYjNDM7CiYjNDM7aW5pdGlhbF9yZXN2PSQoY2F0ICYjMzQ7JFNZU0ZTX1BBVEgvcmVzdl9odWdlcGFnZXMmIzM0OykKJiM0MztlY2hvICYjMzQ7SW5pdGlhbCByZXN2X2h1Z2VwYWdlcyAoYmVmb3JlIG1vdW50KTogJGluaXRpYWxfcmVzdiYjMzQ7CiYjNDM7CiYjNDM7IyAyLiBNb3VudCB3aXRoIG1pbl9zaXplID0gMSBwYWdlLCBtYXggc2l6ZSA9IDIgcGFnZXMKJiM0MzttaW5fc2l6ZV9zdHI9JiMzNDske21ifU0mIzM0OwomIzQzO21heF9zaXplX3N0cj0mIzM0OyQoKG1iICogMikpTSYjMzQ7CiYjNDM7bW1hcF9zaXplX2J5dGVzPSQoKGhwYWdlX3NpemVfYnl0ZXMgKiAyKSkKJiM0MzsKJiM0Mztta2RpciAtcCAmIzM0OyRNTlRfUEFUSCYjMzQ7CiYjNDM7ZWNobyAmIzM0O01vdW50aW5nIGh1Z2V0bGJmcyB3aXRoIHBhZ2VzaXplPSR7bWJ9TSwgbWluX3NpemU9JG1pbl9zaXplX3N0ciwgc2l6ZT0kbWF4X3NpemVfc3RyLi4uJiMzNDsKJiM0MztpZiAhIG1vdW50IC10IGh1Z2V0bGJmcyAtbyAmIzM0O3BhZ2VzaXplPSR7bWJ9TSxtaW5fc2l6ZT0kbWluX3NpemVfc3RyLHNpemU9JG1heF9zaXplX3N0ciYjMzQ7IG5vbmUgJiMzNDskTU5UX1BBVEgmIzM0OzsgdGhlbgomIzQzOyAgICBlY2hvICYjMzQ7RmFpbGVkIHRvIG1vdW50IGh1Z2V0bGJmcyYjMzQ7CiYjNDM7ICAgIGV4aXQgMQomIzQzO2ZpCiYjNDM7CiYjNDM7cmVzdl9hZnRlcl9tb3VudD0kKGNhdCAmIzM0OyRTWVNGU19QQVRIL3Jlc3ZfaHVnZXBhZ2VzJiMzNDspCiYjNDM7ZWNobyAmIzM0O3Jlc3ZfaHVnZXBhZ2VzIGFmdGVyIG1vdW50OiAkcmVzdl9hZnRlcl9tb3VudCYjMzQ7CiYjNDM7ZXhwZWN0ZWRfYWZ0ZXJfbW91bnQ9JCgoaW5pdGlhbF9yZXN2ICYjNDM7IDEpKQomIzQzO2lmIFsgJiMzNDskcmVzdl9hZnRlcl9tb3VudCYjMzQ7ICE9ICYjMzQ7JGV4cGVjdGVkX2FmdGVyX21vdW50JiMzNDsgXTsgdGhlbgomIzQzOyAgICBlY2hvICYjMzQ7RVJST1I6IHJlc3ZfaHVnZXBhZ2VzIGlzIG5vdCAkZXhwZWN0ZWRfYWZ0ZXJfbW91bnQgYWZ0ZXIgbW91bnQgKGFjdHVhbDogJHJlc3ZfYWZ0ZXJfbW91bnQpISYjMzQ7CiYjNDM7ICAgIGV4aXQgMQomIzQzO2ZpCiYjNDM7CiYjNDM7IyBDaGVjayBtb3VudCBzdGF0cyBhZnRlciBtb3VudAomIzQzO2V4cGVjdGVkX2JzaXplPSRocGFnZV9zaXplX2J5dGVzCiYjNDM7YnNpemVfUz0kKHN0YXQgLWYgLWMgJiMzNDslUyYjMzQ7ICYjMzQ7JE1OVF9QQVRIJiMzNDspCiYjNDM7YnNpemVfcz0kKHN0YXQgLWYgLWMgJiMzNDslcyYjMzQ7ICYjMzQ7JE1OVF9QQVRIJiMzNDspCiYjNDM7ZWNobyAmIzM0O01vdW50IGJsb2NrIHNpemUgYWZ0ZXIgbW91bnQ6ICRic2l6ZV9TIC8gJGJzaXplX3MgKGV4cGVjdGVkOiAkZXhwZWN0ZWRfYnNpemUpJiMzNDsKJiM0MztpZiBbICYjMzQ7JGJzaXplX1MmIzM0OyAhPSAmIzM0OyRleHBlY3RlZF9ic2l6ZSYjMzQ7IF0gJmFtcDsmYW1wOyBbICYjMzQ7JGJzaXplX3MmIzM0OyAhPSAmIzM0OyRleHBlY3RlZF9ic2l6ZSYjMzQ7IF07IHRoZW4KJiM0MzsgICAgZWNobyAmIzM0O0VSUk9SOiBVbmV4cGVjdGVkIG1vdW50IGJsb2NrIHNpemUgYWZ0ZXIgbW91bnQgKGFjdHVhbCBTOiRic2l6ZV9TIHM6JGJzaXplX3MsIGV4cGVjdGVkOiAkZXhwZWN0ZWRfYnNpemUpJiMzNDsKJiM0MzsgICAgZXhpdCAxCiYjNDM7ZmkKJiM0MzsKJiM0MzthY3R1YWxfc3RhdHNfbW91bnQ9JChzdGF0IC1mIC1jICYjMzQ7JWIgJWYgJWEmIzM0OyAmIzM0OyRNTlRfUEFUSCYjMzQ7KQomIzQzO2V4cGVjdGVkX3N0YXRzX21vdW50PSYjMzQ7MiAyIDImIzM0OwomIzQzO2VjaG8gJiMzNDtNb3VudCBzdGF0cyBhZnRlciBtb3VudCAodG90YWwgZnJlZSBhdmFpbCk6ICRhY3R1YWxfc3RhdHNfbW91bnQgKGV4cGVjdGVkOiAkZXhwZWN0ZWRfc3RhdHNfbW91bnQpJiMzNDsKJiM0MztpZiBbICYjMzQ7JGFjdHVhbF9zdGF0c19tb3VudCYjMzQ7ICE9ICYjMzQ7JGV4cGVjdGVkX3N0YXRzX21vdW50JiMzNDsgXTsgdGhlbgomIzQzOyAgICBlY2hvICYjMzQ7RVJST1I6IFVuZXhwZWN0ZWQgbW91bnQgc3RhdHMgYWZ0ZXIgbW91bnQ6ICRhY3R1YWxfc3RhdHNfbW91bnQgKGV4cGVjdGVkOiAkZXhwZWN0ZWRfc3RhdHNfbW91bnQpJiMzNDsKJiM0MzsgICAgZXhpdCAxCiYjNDM7ZmkKJiM0MzsKJiM0MzsjIDMuIFJ1biB0aGUgcmVwcm9kdWNlciB0byB0cmlnZ2VyIHRoZSBvdXRfcHV0X3BhZ2VzIGZhaWx1cmUgcGF0aAomIzQzO2VjaG8gJiMzNDtSdW5uaW5nIHJlcHJvZHVjZXIgKGV4cGVjdGluZyBtbWFwIGZhaWx1cmUgd2l0aCBFTk9NRU0pLi4uJiMzNDsKJiM0MztpZiAuL2h1Z2V0bGJfcmVzZXJ2ZV9wYWdlc19vdXRfcHV0X3BhZ2VzICYjMzQ7JEZJTEVfUEFUSCYjMzQ7ICYjMzQ7JG1tYXBfc2l6ZV9ieXRlcyYjMzQ7OyB0aGVuCiYjNDM7ICAgIGVjaG8gJiMzNDtSZXByb2R1Y2VyIGZpbmlzaGVkIHN1Y2Nlc3NmdWxseS4mIzM0OwomIzQzOyAgICByZXN2X2FmdGVyX21tYXA9JChjYXQgJiMzNDskU1lTRlNfUEFUSC9yZXN2X2h1Z2VwYWdlcyYjMzQ7KQomIzQzOyAgICBlY2hvICYjMzQ7cmVzdl9odWdlcGFnZXMgYWZ0ZXIgZmFpbGVkIG1tYXA6ICRyZXN2X2FmdGVyX21tYXAmIzM0OwomIzQzOyAgICBleHBlY3RlZF9hZnRlcl9tbWFwPSRleHBlY3RlZF9hZnRlcl9tb3VudAomIzQzOyAgICBpZiBbICYjMzQ7JHJlc3ZfYWZ0ZXJfbW1hcCYjMzQ7ID0gJiMzNDskZXhwZWN0ZWRfYWZ0ZXJfbW1hcCYjMzQ7IF07IHRoZW4KJiM0MzsgICAgICAgIGVjaG8gJiMzNDtSRVNVTFQ6IG91dF9wdXRfcGFnZXMgRVhFUkNJU0VEIChyZXN2X2h1Z2VwYWdlcyBwcmVzZXJ2ZWQgYXQgJGV4cGVjdGVkX2FmdGVyX21tYXAgYXMgZXhwZWN0ZWQpJiMzNDsKJiM0MzsKJiM0MzsgICAgICAgICMgQ2hlY2sgbW91bnQgc3RhdHMKJiM0MzsgICAgICAgIGV4cGVjdGVkX2JzaXplPSRocGFnZV9zaXplX2J5dGVzCiYjNDM7ICAgICAgICBic2l6ZV9TPSQoc3RhdCAtZiAtYyAmIzM0OyVTJiMzNDsgJiMzNDskTU5UX1BBVEgmIzM0OykKJiM0MzsgICAgICAgIGJzaXplX3M9JChzdGF0IC1mIC1jICYjMzQ7JXMmIzM0OyAmIzM0OyRNTlRfUEFUSCYjMzQ7KQomIzQzOyAgICAgICAgZWNobyAmIzM0O01vdW50IGJsb2NrIHNpemU6ICRic2l6ZV9TIC8gJGJzaXplX3MgKGV4cGVjdGVkOiAkZXhwZWN0ZWRfYnNpemUpJiMzNDsKJiM0MzsgICAgICAgIGlmIFsgJiMzNDskYnNpemVfUyYjMzQ7ICE9ICYjMzQ7JGV4cGVjdGVkX2JzaXplJiMzNDsgXSAmYW1wOyZhbXA7IFsgJiMzNDskYnNpemVfcyYjMzQ7ICE9ICYjMzQ7JGV4cGVjdGVkX2JzaXplJiMzNDsgXTsgdGhlbgomIzQzOyAgICAgICAgICAgIGVjaG8gJiMzNDtFUlJPUjogVW5leHBlY3RlZCBtb3VudCBibG9jayBzaXplIChhY3R1YWwgUzokYnNpemVfUyBzOiRic2l6ZV9zLCBleHBlY3RlZDogJGV4cGVjdGVkX2JzaXplKSYjMzQ7CiYjNDM7ICAgICAgICAgICAgZXhpdCAxCiYjNDM7ICAgICAgICBmaQomIzQzOwomIzQzOyAgICAgICAgYWN0dWFsX3N0YXRzPSQoc3RhdCAtZiAtYyAmIzM0OyViICVmICVhJiMzNDsgJiMzNDskTU5UX1BBVEgmIzM0OykKJiM0MzsgICAgICAgIGV4cGVjdGVkX3N0YXRzPSYjMzQ7MiAyIDImIzM0OwomIzQzOyAgICAgICAgZWNobyAmIzM0O01vdW50IHN0YXRzICh0b3RhbCBmcmVlIGF2YWlsKTogJGFjdHVhbF9zdGF0cyAoZXhwZWN0ZWQ6ICRleHBlY3RlZF9zdGF0cykmIzM0OwomIzQzOyAgICAgICAgaWYgWyAmIzM0OyRhY3R1YWxfc3RhdHMmIzM0OyAhPSAmIzM0OyRleHBlY3RlZF9zdGF0cyYjMzQ7IF07IHRoZW4KJiM0MzsgICAgICAgICAgICBlY2hvICYjMzQ7UkVTVUxUOiBVbmV4cGVjdGVkIG1vdW50IHN0YXRzIGFmdGVyIGZhaWxlZCBtbWFwIChGQUlMKSYjMzQ7CiYjNDM7ICAgICAgICAgICAgZXhpdCAxCiYjNDM7ICAgICAgICBlbHNlCiYjNDM7ICAgICAgICAgICAgZWNobyAmIzM0O1JFU1VMVDogTW91bnQgc3RhdHMgcmVzdG9yZWQgdG8gJGV4cGVjdGVkX3N0YXRzIGFzIGV4cGVjdGVkIChQQVNTKSYjMzQ7CiYjNDM7ICAgICAgICBmaQomIzQzOyAgICBlbHNlCiYjNDM7ICAgICAgICBlY2hvICYjMzQ7UkVTVUxUOiBVbmV4cGVjdGVkIHJlc3ZfaHVnZXBhZ2VzIHZhbHVlOiAkcmVzdl9hZnRlcl9tbWFwIChleHBlY3RlZDogJGV4cGVjdGVkX2FmdGVyX21tYXApJiMzNDsKJiM0MzsgICAgICAgIGV4aXQgMQomIzQzOyAgICBmaQomIzQzO2Vsc2UKJiM0MzsgICAgZWNobyAmIzM0O0ZBSUw6IFJlcHJvZHVjZXIgcmV0dXJuZWQgbm9uLXplcm8gKG1tYXAgZGlkbiYjMzk7dCBmYWlsIHdpdGggRU5PTUVNKSYjMzQ7CiYjNDM7ICAgIGV4aXQgMQomIzQzO2ZpCiYjNDM7CiYjNDM7IyA0LiBEaXNhYmxlIHRyYXAgYW5kIGRvIG1hbnVhbCBjbGVhbnVwIHRvIGNoZWNrIGZvciBmaW5hbCB1bm1vdW50IHVuZGVyZmxvdwomIzQzO3RyYXAgLSBFWElUCiYjNDM7CiYjNDM7ZWNobyAmIzM0O1VubW91bnRpbmcuLi4mIzM0OwomIzQzO3Vtb3VudCAmIzM0OyRNTlRfUEFUSCYjMzQ7CiYjNDM7cm1kaXIgJiMzNDskTU5UX1BBVEgmIzM0OwomIzQzOwomIzQzO2ZpbmFsX3Jlc3Y9JChjYXQgJiMzNDskU1lTRlNfUEFUSC9yZXN2X2h1Z2VwYWdlcyYjMzQ7KQomIzQzO2VjaG8gJiMzNDtGaW5hbCByZXN2X2h1Z2VwYWdlcyAoYWZ0ZXIgdW5tb3VudCk6ICRmaW5hbF9yZXN2JiMzNDsKJiM0MzsKJiM0MzsjIFJlc3RvcmUgb3JpZ2luYWwgdmFsdWVzCiYjNDM7ZWNobyAmIzM0O1Jlc3RvcmluZyBvcmlnaW5hbCBodWdlcGFnZSBzZXR0aW5ncy4uLiYjMzQ7CiYjNDM7ZWNobyAmIzM0OyRvcmlnX25yJiMzNDsgJmd0OyAmIzM0OyRTWVNGU19QQVRIL25yX2h1Z2VwYWdlcyYjMzQ7CiYjNDM7ZWNobyAmIzM0OyRvcmlnX292ZXJjb21taXQmIzM0OyAmZ3Q7ICYjMzQ7JFNZU0ZTX1BBVEgvbnJfb3ZlcmNvbW1pdF9odWdlcGFnZXMmIzM0OwomIzQzOwomIzQzO2lmIFsgJiMzNDskZmluYWxfcmVzdiYjMzQ7ID0gJiMzNDskaW5pdGlhbF9yZXN2JiMzNDsgXTsgdGhlbgomIzQzOyAgICBlY2hvICYjMzQ7UkVTVUxUOiBTdGF0ZSByZXN0b3JlZCB0byAkaW5pdGlhbF9yZXN2IChvciBjbGVhbmVkIHVwIGlmIGZpeGVkKSYjMzQ7CiYjNDM7ICAgIGVjaG8gJiMzNDtBTEwgRE9ORS4mIzM0OwomIzQzOyAgICBleGl0IDAKJiM0MztlbHNlCiYjNDM7ICAgIGVjaG8gJiMzNDtSRVNVTFQ6IFVuZGVyZmxvdy9MZWFrL0luY29ycmVjdCBzdGF0ZSBkZXRlY3RlZCEgKGZpbmFsX3Jlc3YgPSAkZmluYWxfcmVzdiwgZXhwZWN0ZWQgPSAkaW5pdGlhbF9yZXN2KSYjMzQ7CiYjNDM7ICAgIGVjaG8gJiMzNDtBTEwgRE9ORS4mIzM0OwomIzQzOyAgICBleGl0IDEKJiM0MztmaQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9odWdldGxiLmggYi9pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaAppbmRleCAyYWJhZjk5MzIxZTkwZC4uMDc0YTQ1OTAzOTczZWIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvaHVnZXRsYi5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvaHVnZXRsYi5oCkBAIC0xOCw2ICYjNDM7MTgsNyBAQAogCiBzdHJ1Y3QgbW11X2dhdGhlcjsKIHN0cnVjdCBub2RlOwomIzQzO3N0cnVjdCBoc3RhdGU7CiAKIHZvaWQgZnJlZV9odWdlX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8pOwogCkBAIC0zNCwxNyAmIzQzOzM1LDcgQEAgdm9pZCBmcmVlX2h1Z2VfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbyk7CiAgKi8KICNkZWZpbmUgX19OUl9VU0VEX1NVQlBBR0UgMwogCi1zdHJ1Y3QgaHVnZXBhZ2Vfc3VicG9vbCB7Ci0Jc3BpbmxvY2tfdCBsb2NrOwotCWxvbmcgY291bnQ7Ci0JbG9uZyBtYXhfaHBhZ2VzOwkvKiBNYXhpbXVtIGh1Z2UgcGFnZXMgb3IgLTEgaWYgbm8gbWF4aW11bS4gKi8KLQlsb25nIHVzZWRfaHBhZ2VzOwkvKiBVc2VkIGNvdW50IGFnYWluc3QgbWF4aW11bSwgaW5jbHVkZXMgKi8KLQkJCQkvKiBib3RoIGFsbG9jYXRlZCBhbmQgcmVzZXJ2ZWQgcGFnZXMuICovCi0Jc3RydWN0IGhzdGF0ZSAqaHN0YXRlOwotCWxvbmcgbWluX2hwYWdlczsJLyogTWluaW11bSBodWdlIHBhZ2VzIG9yIC0xIGlmIG5vIG1pbmltdW0uICovCi0JbG9uZyByc3ZfaHBhZ2VzOwkvKiBQYWdlcyByZXNlcnZlZCBhZ2FpbnN0IGdsb2JhbCBwb29sIHRvICovCi0JCQkJLyogc2F0aXNmeSBtaW5pbXVtIHNpemUuICovCi19OwomIzQzO3N0cnVjdCBodWdlcGFnZV9zdWJwb29sOwogCiBzdHJ1Y3QgcmVzdl9tYXAgewogCXN0cnVjdCBrcmVmIHJlZnM7CkBAIC0xMTQsOSAmIzQzOzEwNSw3IEBAIGV4dGVybiBpbnQgaHVnZXRsYl9tYXhfaHN0YXRlIF9fcmVhZF9tb3N0bHk7CiAjZGVmaW5lIGZvcl9lYWNoX2hzdGF0ZShoKSBcCiAJZm9yICgoaCkgPSBoc3RhdGVzOyAoaCkgJmx0OyAmYW1wO2hzdGF0ZXNbaHVnZXRsYl9tYXhfaHN0YXRlXTsgKGgpJiM0MzsmIzQzOykKIAotc3RydWN0IGh1Z2VwYWdlX3N1YnBvb2wgKmh1Z2VwYWdlX25ld19zdWJwb29sKHN0cnVjdCBoc3RhdGUgKmgsIGxvbmcgbWF4X2hwYWdlcywKLQkJCQkJCWxvbmcgbWluX2hwYWdlcyk7Ci12b2lkIGh1Z2VwYWdlX3B1dF9zdWJwb29sKHN0cnVjdCBodWdlcGFnZV9zdWJwb29sICpzcG9vbCk7CiYjNDM7aW50IGh1Z2V0bGJfYWNjdF9tZW1vcnkoc3RydWN0IGhzdGF0ZSAqaCwgbG9uZyBkZWx0YSk7CiAKIHZvaWQgaHVnZXRsYl9kdXBfdm1hX3ByaXZhdGUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpOwogdm9pZCBjbGVhcl92bWFfcmVzdl9odWdlX3BhZ2VzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oIGIvaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgKaW5kZXggZTFmNDZhMDAxNmZjZmQuLjIzZmJiYmM4ZTExZjIwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaApAQCAtNjQxLDcgJiM0Mzs2NDEsMTUgQEAgc3RhdGljIGlubGluZSBpbnQgbWVtX2Nncm91cF9jaGFyZ2Uoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IG1tX3N0cnVjdCAqbW0sCiAJcmV0dXJuIF9fbWVtX2Nncm91cF9jaGFyZ2UoZm9saW8sIG1tLCBnZnApOwogfQogCi1pbnQgbWVtX2Nncm91cF9jaGFyZ2VfaHVnZXRsYihzdHJ1Y3QgZm9saW8qIGZvbGlvLCBnZnBfdCBnZnApOwomIzQzO2ludCBtZW1fY2dyb3VwX2h1Z2V0bGJfdHJ5X2NoYXJnZSh1bnNpZ25lZCBpbnQgbnJfcGFnZXMsIGdmcF90IGdmcCwKJiM0MzsJCQkJICBzdHJ1Y3QgbWVtX2Nncm91cCAqKm1lbWNnX3AsCiYjNDM7CQkJCSAgc3RydWN0IG9ial9jZ3JvdXAgKipvYmpjZ19wKTsKJiM0Mzt2b2lkIG1lbV9jZ3JvdXBfaHVnZXRsYl9jb21taXRfY2hhcmdlKHN0cnVjdCBmb2xpbyAqZm9saW8sCiYjNDM7CQkJCSAgICAgIHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywKJiM0MzsJCQkJICAgICAgc3RydWN0IG9ial9jZ3JvdXAgKm9iamNnKTsKJiM0Mzt2b2lkIG1lbV9jZ3JvdXBfaHVnZXRsYl9jYW5jZWxfY2hhcmdlKHVuc2lnbmVkIGludCBucl9wYWdlcywKJiM0MzsJCQkJICAgICAgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLAomIzQzOwkJCQkgICAgICBzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2cpOwogCiBpbnQgbWVtX2Nncm91cF9zd2FwaW5fY2hhcmdlX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sIHVuc2lnbmVkIHNob3J0IGlkLAogCQkJCSAgIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBnZnBfdCBnZnApOwpAQCAtMTEyOCw5ICYjNDM7MTEzNiwyNSBAQCBzdGF0aWMgaW5saW5lIGludCBtZW1fY2dyb3VwX2NoYXJnZShzdHJ1Y3QgZm9saW8gKmZvbGlvLAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW5saW5lIGludCBtZW1fY2dyb3VwX2NoYXJnZV9odWdldGxiKHN0cnVjdCBmb2xpbyogZm9saW8sIGdmcF90IGdmcCkKJiM0MztzdGF0aWMgaW5saW5lIGludCBtZW1fY2dyb3VwX2h1Z2V0bGJfdHJ5X2NoYXJnZSh1bnNpZ25lZCBpbnQgbnJfcGFnZXMsIGdmcF90IGdmcCwKJiM0MzsJCQkJCQlzdHJ1Y3QgbWVtX2Nncm91cCAqKm1lbWNnX3AsCiYjNDM7CQkJCQkJc3RydWN0IG9ial9jZ3JvdXAgKipvYmpjZ19wKQomIzQzO3sKJiM0MzsJKm1lbWNnX3AgPSBOVUxMOwomIzQzOwkqb2JqY2dfcCA9IE5VTEw7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgbWVtX2Nncm91cF9odWdldGxiX2NvbW1pdF9jaGFyZ2Uoc3RydWN0IGZvbGlvICpmb2xpbywKJiM0MzsJCQkJCQkgICAgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLAomIzQzOwkJCQkJCSAgICBzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2cpCiYjNDM7ewomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgbWVtX2Nncm91cF9odWdldGxiX2NhbmNlbF9jaGFyZ2UodW5zaWduZWQgaW50IG5yX3BhZ2VzLAomIzQzOwkJCQkJCSAgICBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csCiYjNDM7CQkJCQkJICAgIHN0cnVjdCBvYmpfY2dyb3VwICpvYmpjZykKIHsKLSAgICAgICAgcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbmxpbmUgaW50IG1lbV9jZ3JvdXBfc3dhcGluX2NoYXJnZV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvLApkaWZmIC0tZ2l0IGEvbW0vTWFrZWZpbGUgYi9tbS9NYWtlZmlsZQppbmRleCBlZmY5ZjllN2UwNjFjMS4uMzk2NWM5NTllNTA5OTIgMTAwNjQ0Ci0tLSBhL21tL01ha2VmaWxlCiYjNDM7JiM0MzsmIzQzOyBiL21tL01ha2VmaWxlCkBAIC03OCw3ICYjNDM7NzgsNyBAQCBlbmRpZgogb2JqLSQoQ09ORklHX1NXQVApCSYjNDM7PSBwYWdlX2lvLm8gc3dhcF9zdGF0ZS5vIHN3YXBmaWxlLm8KIG9iai0kKENPTkZJR19aU1dBUCkJJiM0Mzs9IHpzd2FwLm8KIG9iai0kKENPTkZJR19IQVNfRE1BKQkmIzQzOz0gZG1hcG9vbC5vCi1vYmotJChDT05GSUdfSFVHRVRMQkZTKQkmIzQzOz0gaHVnZXRsYi5vIGh1Z2V0bGJfc3lzZnMubyBodWdldGxiX3N5c2N0bC5vCiYjNDM7b2JqLSQoQ09ORklHX0hVR0VUTEJGUykJJiM0Mzs9IGh1Z2V0bGIubyBodWdldGxiX3N1YnBvb2wubyBodWdldGxiX3N5c2ZzLm8gaHVnZXRsYl9zeXNjdGwubwogaWZkZWYgQ09ORklHX0NNQQogb2JqLSQoQ09ORklHX0hVR0VUTEJGUykJJiM0Mzs9IGh1Z2V0bGJfY21hLm8KIGVuZGlmCmRpZmYgLS1naXQgYS9tbS9odWdldGxiLmMgYi9tbS9odWdldGxiLmMKaW5kZXggNTcxMjEyYjgwODM1ZWMuLmU4N2YyNmEzZTFmM2U0IDEwMDY0NAotLS0gYS9tbS9odWdldGxiLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vaHVnZXRsYi5jCkBAIC0zOCw2ICYjNDM7MzgsOCBAQAogI2luY2x1ZGUgJmx0O2xpbnV4L21tX2lubGluZS5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3BhZGF0YS5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3BnYWxsb2MuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvbWVtY29udHJvbC5oJmd0OwomIzQzOyNpbmNsdWRlICYjMzQ7aHVnZXRsYl9zdWJwb29sLmgmIzM0OwogCiAjaW5jbHVkZSAmbHQ7YXNtL3BhZ2UuaCZndDsKICNpbmNsdWRlICZsdDthc20vdGxiLmgmZ3Q7CkBAIC0xMTMsOCAmIzQzOzExNSw3IEBAIF9fY2FjaGVsaW5lX2FsaWduZWRfaW5fc21wIERFRklORV9TUElOTE9DSyhodWdldGxiX2xvY2spOwogc3RhdGljIGludCBudW1fZmF1bHRfbXV0ZXhlcyBfX3JvX2FmdGVyX2luaXQ7CiBzdHJ1Y3QgbXV0ZXggKmh1Z2V0bGJfZmF1bHRfbXV0ZXhfdGFibGUgX19yb19hZnRlcl9pbml0OwogCi0vKiBGb3J3YXJkIGRlY2xhcmF0aW9uICovCi1zdGF0aWMgaW50IGh1Z2V0bGJfYWNjdF9tZW1vcnkoc3RydWN0IGhzdGF0ZSAqaCwgbG9uZyBkZWx0YSk7CiYjNDM7LyogRm9yd2FyZCBkZWNsYXJhdGlvbnMgKi8KIHN0YXRpYyB2b2lkIGh1Z2V0bGJfdm1hX2xvY2tfZnJlZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSk7CiBzdGF0aWMgdm9pZCBodWdldGxiX3ZtYV9sb2NrX2FsbG9jKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKTsKIHN0YXRpYyB2b2lkIF9faHVnZXRsYl92bWFfdW5sb2NrX3dyaXRlX2ZyZWUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpOwpAQCAtMTI1LDE1NiAmIzQzOzEyNiw2IEBAIHN0YXRpYyB2b2lkIGh1Z2V0bGJfdW5zaGFyZV9wbWRzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAogCQl1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCwgYm9vbCB0YWtlX2xvY2tzKTsKIHN0YXRpYyBzdHJ1Y3QgcmVzdl9tYXAgKnZtYV9yZXN2X21hcChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSk7CiAKLXN0YXRpYyBpbmxpbmUgYm9vbCBzdWJwb29sX2lzX2ZyZWUoc3RydWN0IGh1Z2VwYWdlX3N1YnBvb2wgKnNwb29sKQotewotCWlmIChzcG9vbC0mZ3Q7Y291bnQpCi0JCXJldHVybiBmYWxzZTsKLQlpZiAoc3Bvb2wtJmd0O21heF9ocGFnZXMgIT0gLTEpCi0JCXJldHVybiBzcG9vbC0mZ3Q7dXNlZF9ocGFnZXMgPT0gMDsKLQlpZiAoc3Bvb2wtJmd0O21pbl9ocGFnZXMgIT0gLTEpCi0JCXJldHVybiBzcG9vbC0mZ3Q7cnN2X2hwYWdlcyA9PSBzcG9vbC0mZ3Q7bWluX2hwYWdlczsKLQotCXJldHVybiB0cnVlOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgdW5sb2NrX29yX3JlbGVhc2Vfc3VicG9vbChzdHJ1Y3QgaHVnZXBhZ2Vfc3VicG9vbCAqc3Bvb2wsCi0JCQkJCQl1bnNpZ25lZCBsb25nIGlycV9mbGFncykKLXsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhbXA7c3Bvb2wtJmd0O2xvY2ssIGlycV9mbGFncyk7Ci0KLQkvKiBJZiBubyBwYWdlcyBhcmUgdXNlZCwgYW5kIG5vIG90aGVyIGhhbmRsZXMgdG8gdGhlIHN1YnBvb2wKLQkgKiByZW1haW4sIGdpdmUgdXAgYW55IHJlc2VydmF0aW9ucyBiYXNlZCBvbiBtaW5pbXVtIHNpemUgYW5kCi0JICogZnJlZSB0aGUgc3VicG9vbCAqLwotCWlmIChzdWJwb29sX2lzX2ZyZWUoc3Bvb2wpKSB7Ci0JCWlmIChzcG9vbC0mZ3Q7bWluX2hwYWdlcyAhPSAtMSkKLQkJCWh1Z2V0bGJfYWNjdF9tZW1vcnkoc3Bvb2wtJmd0O2hzdGF0ZSwKLQkJCQkJCS1zcG9vbC0mZ3Q7bWluX2hwYWdlcyk7Ci0JCWtmcmVlKHNwb29sKTsKLQl9Ci19Ci0KLXN0cnVjdCBodWdlcGFnZV9zdWJwb29sICpodWdlcGFnZV9uZXdfc3VicG9vbChzdHJ1Y3QgaHN0YXRlICpoLCBsb25nIG1heF9ocGFnZXMsCi0JCQkJCQlsb25nIG1pbl9ocGFnZXMpCi17Ci0Jc3RydWN0IGh1Z2VwYWdlX3N1YnBvb2wgKnNwb29sOwotCi0Jc3Bvb2wgPSBremFsbG9jX29iaigqc3Bvb2wpOwotCWlmICghc3Bvb2wpCi0JCXJldHVybiBOVUxMOwotCi0Jc3Bpbl9sb2NrX2luaXQoJmFtcDtzcG9vbC0mZ3Q7bG9jayk7Ci0Jc3Bvb2wtJmd0O2NvdW50ID0gMTsKLQlzcG9vbC0mZ3Q7bWF4X2hwYWdlcyA9IG1heF9ocGFnZXM7Ci0Jc3Bvb2wtJmd0O2hzdGF0ZSA9IGg7Ci0Jc3Bvb2wtJmd0O21pbl9ocGFnZXMgPSBtaW5faHBhZ2VzOwotCi0JaWYgKG1pbl9ocGFnZXMgIT0gLTEgJmFtcDsmYW1wOyBodWdldGxiX2FjY3RfbWVtb3J5KGgsIG1pbl9ocGFnZXMpKSB7Ci0JCWtmcmVlKHNwb29sKTsKLQkJcmV0dXJuIE5VTEw7Ci0JfQotCXNwb29sLSZndDtyc3ZfaHBhZ2VzID0gbWluX2hwYWdlczsKLQotCXJldHVybiBzcG9vbDsKLX0KLQotdm9pZCBodWdlcGFnZV9wdXRfc3VicG9vbChzdHJ1Y3QgaHVnZXBhZ2Vfc3VicG9vbCAqc3Bvb2wpCi17Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZhbXA7c3Bvb2wtJmd0O2xvY2ssIGZsYWdzKTsKLQlCVUdfT04oIXNwb29sLSZndDtjb3VudCk7Ci0Jc3Bvb2wtJmd0O2NvdW50LS07Ci0JdW5sb2NrX29yX3JlbGVhc2Vfc3VicG9vbChzcG9vbCwgZmxhZ3MpOwotfQotCi0vKgotICogU3VicG9vbCBhY2NvdW50aW5nIGZvciBhbGxvY2F0aW5nIGFuZCByZXNlcnZpbmcgcGFnZXMuCi0gKiBSZXR1cm4gLUVOT01FTSBpZiB0aGVyZSBhcmUgbm90IGVub3VnaCByZXNvdXJjZXMgdG8gc2F0aXNmeSB0aGUKLSAqIHJlcXVlc3QuICBPdGhlcndpc2UsIHJldHVybiB0aGUgbnVtYmVyIG9mIHBhZ2VzIGJ5IHdoaWNoIHRoZQotICogZ2xvYmFsIHBvb2xzIG11c3QgYmUgYWRqdXN0ZWQgKHVwd2FyZCkuICBUaGUgcmV0dXJuZWQgdmFsdWUgbWF5Ci0gKiBvbmx5IGJlIGRpZmZlcmVudCB0aGFuIHRoZSBwYXNzZWQgdmFsdWUgKGRlbHRhKSBpbiB0aGUgY2FzZSB3aGVyZQotICogYSBzdWJwb29sIG1pbmltdW0gc2l6ZSBtdXN0IGJlIG1haW50YWluZWQuCi0gKi8KLXN0YXRpYyBsb25nIGh1Z2VwYWdlX3N1YnBvb2xfZ2V0X3BhZ2VzKHN0cnVjdCBodWdlcGFnZV9zdWJwb29sICpzcG9vbCwKLQkJCQkgICAgICBsb25nIGRlbHRhKQotewotCWxvbmcgcmV0ID0gZGVsdGE7Ci0KLQlpZiAoIXNwb29sKQotCQlyZXR1cm4gcmV0OwotCi0Jc3Bpbl9sb2NrX2lycSgmYW1wO3Nwb29sLSZndDtsb2NrKTsKLQotCWlmIChzcG9vbC0mZ3Q7bWF4X2hwYWdlcyAhPSAtMSkgewkJLyogbWF4aW11bSBzaXplIGFjY291bnRpbmcgKi8KLQkJaWYgKChzcG9vbC0mZ3Q7dXNlZF9ocGFnZXMgJiM0MzsgZGVsdGEpICZsdDs9IHNwb29sLSZndDttYXhfaHBhZ2VzKQotCQkJc3Bvb2wtJmd0O3VzZWRfaHBhZ2VzICYjNDM7PSBkZWx0YTsKLQkJZWxzZSB7Ci0JCQlyZXQgPSAtRU5PTUVNOwotCQkJZ290byB1bmxvY2tfcmV0OwotCQl9Ci0JfQotCi0JLyogbWluaW11bSBzaXplIGFjY291bnRpbmcgKi8KLQlpZiAoc3Bvb2wtJmd0O21pbl9ocGFnZXMgIT0gLTEgJmFtcDsmYW1wOyBzcG9vbC0mZ3Q7cnN2X2hwYWdlcykgewotCQlpZiAoZGVsdGEgJmd0OyBzcG9vbC0mZ3Q7cnN2X2hwYWdlcykgewotCQkJLyoKLQkJCSAqIEFza2luZyBmb3IgbW9yZSByZXNlcnZlcyB0aGFuIHRob3NlIGFscmVhZHkgdGFrZW4gb24KLQkJCSAqIGJlaGFsZiBvZiBzdWJwb29sLiAgUmV0dXJuIGRpZmZlcmVuY2UuCi0JCQkgKi8KLQkJCXJldCA9IGRlbHRhIC0gc3Bvb2wtJmd0O3Jzdl9ocGFnZXM7Ci0JCQlzcG9vbC0mZ3Q7cnN2X2hwYWdlcyA9IDA7Ci0JCX0gZWxzZSB7Ci0JCQlyZXQgPSAwOwkvKiByZXNlcnZlcyBhbHJlYWR5IGFjY291bnRlZCBmb3IgKi8KLQkJCXNwb29sLSZndDtyc3ZfaHBhZ2VzIC09IGRlbHRhOwotCQl9Ci0JfQotCi11bmxvY2tfcmV0OgotCXNwaW5fdW5sb2NrX2lycSgmYW1wO3Nwb29sLSZndDtsb2NrKTsKLQlyZXR1cm4gcmV0OwotfQotCi0vKgotICogU3VicG9vbCBhY2NvdW50aW5nIGZvciBmcmVlaW5nIGFuZCB1bnJlc2VydmluZyBwYWdlcy4KLSAqIFJldHVybiB0aGUgbnVtYmVyIG9mIGdsb2JhbCBwYWdlIHJlc2VydmF0aW9ucyB0aGF0IG11c3QgYmUgZHJvcHBlZC4KLSAqIFRoZSByZXR1cm4gdmFsdWUgbWF5IG9ubHkgYmUgZGlmZmVyZW50IHRoYW4gdGhlIHBhc3NlZCB2YWx1ZSAoZGVsdGEpCi0gKiBpbiB0aGUgY2FzZSB3aGVyZSBhIHN1YnBvb2wgbWluaW11bSBzaXplIG11c3QgYmUgbWFpbnRhaW5lZC4KLSAqLwotc3RhdGljIGxvbmcgaHVnZXBhZ2Vfc3VicG9vbF9wdXRfcGFnZXMoc3RydWN0IGh1Z2VwYWdlX3N1YnBvb2wgKnNwb29sLAotCQkJCSAgICAgICBsb25nIGRlbHRhKQotewotCWxvbmcgcmV0ID0gZGVsdGE7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCWlmICghc3Bvb2wpCi0JCXJldHVybiBkZWx0YTsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZhbXA7c3Bvb2wtJmd0O2xvY2ssIGZsYWdzKTsKLQotCWlmIChzcG9vbC0mZ3Q7bWF4X2hwYWdlcyAhPSAtMSkJCS8qIG1heGltdW0gc2l6ZSBhY2NvdW50aW5nICovCi0JCXNwb29sLSZndDt1c2VkX2hwYWdlcyAtPSBkZWx0YTsKLQotCSAvKiBtaW5pbXVtIHNpemUgYWNjb3VudGluZyAqLwotCWlmIChzcG9vbC0mZ3Q7bWluX2hwYWdlcyAhPSAtMSAmYW1wOyZhbXA7IHNwb29sLSZndDt1c2VkX2hwYWdlcyAmbHQ7IHNwb29sLSZndDttaW5faHBhZ2VzKSB7Ci0JCWlmIChzcG9vbC0mZ3Q7cnN2X2hwYWdlcyAmIzQzOyBkZWx0YSAmbHQ7PSBzcG9vbC0mZ3Q7bWluX2hwYWdlcykKLQkJCXJldCA9IDA7Ci0JCWVsc2UKLQkJCXJldCA9IHNwb29sLSZndDtyc3ZfaHBhZ2VzICYjNDM7IGRlbHRhIC0gc3Bvb2wtJmd0O21pbl9ocGFnZXM7Ci0KLQkJc3Bvb2wtJmd0O3Jzdl9ocGFnZXMgJiM0Mzs9IGRlbHRhOwotCQlpZiAoc3Bvb2wtJmd0O3Jzdl9ocGFnZXMgJmd0OyBzcG9vbC0mZ3Q7bWluX2hwYWdlcykKLQkJCXNwb29sLSZndDtyc3ZfaHBhZ2VzID0gc3Bvb2wtJmd0O21pbl9ocGFnZXM7Ci0JfQotCi0JLyoKLQkgKiBJZiBodWdldGxiZnNfcHV0X3N1cGVyIGNvdWxkbiYjMzk7dCBmcmVlIHNwb29sIGR1ZSB0byBhbiBvdXRzdGFuZGluZwotCSAqIHF1b3RhIHJlZmVyZW5jZSwgZnJlZSBpdCBub3cuCi0JICovCi0JdW5sb2NrX29yX3JlbGVhc2Vfc3VicG9vbChzcG9vbCwgZmxhZ3MpOwotCi0JcmV0dXJuIHJldDsKLX0KLQogc3RhdGljIGlubGluZSBzdHJ1Y3QgaHVnZXBhZ2Vfc3VicG9vbCAqc3VicG9vbF92bWEoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpCiB7CiAJcmV0dXJuIHN1YnBvb2xfaW5vZGUoZmlsZV9pbm9kZSh2bWEtJmd0O3ZtX2ZpbGUpKTsKQEAgLTI4NTgsMTEgJiM0MzsyNzA5LDEzIEBAIHN0cnVjdCBmb2xpbyAqYWxsb2NfaHVnZXRsYl9mb2xpbyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKIAlzdHJ1Y3QgaHVnZXBhZ2Vfc3VicG9vbCAqc3Bvb2wgPSBzdWJwb29sX3ZtYSh2bWEpOwogCXN0cnVjdCBoc3RhdGUgKmggPSBoc3RhdGVfdm1hKHZtYSk7CiAJc3RydWN0IGZvbGlvICpmb2xpbzsKLQlsb25nIHJldHZhbCwgZ2JsX2NoZywgZ2JsX3Jlc2VydmU7CiYjNDM7CWxvbmcgcmV0dmFsLCBnYmxfY2hnOwogCW1hcF9jaGdfc3RhdGUgbWFwX2NoZzsKIAlpbnQgcmV0LCBpZHg7CiAJc3RydWN0IGh1Z2V0bGJfY2dyb3VwICpoX2NnID0gTlVMTDsKIAlzdHJ1Y3QgaHVnZXRsYl9jZ3JvdXAgKmhfY2dfcnN2ZCA9IE5VTEw7CiYjNDM7CXN0cnVjdCBtZW1fY2dyb3VwICptZW1fY2cgPSBOVUxMOwomIzQzOwlzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqX2NnID0gTlVMTDsKIAlnZnBfdCBnZnAgPSBodGxiX2FsbG9jX21hc2soaCkgfCBfX0dGUF9SRVRSWV9NQVlGQUlMOwogCiAJaWR4ID0gaHN0YXRlX2luZGV4KGgpOwpAQCAtMjkyMiw2ICYjNDM7Mjc3NSwxMSBAQCBzdHJ1Y3QgZm9saW8gKmFsbG9jX2h1Z2V0bGJfZm9saW8oc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCiAJaWYgKHJldCkKIAkJZ290byBvdXRfdW5jaGFyZ2VfY2dyb3VwX3Jlc2VydmF0aW9uOwogCiYjNDM7CXJldCA9IG1lbV9jZ3JvdXBfaHVnZXRsYl90cnlfY2hhcmdlKHBhZ2VzX3Blcl9odWdlX3BhZ2UoaCksIGdmcCwKJiM0MzsJCQkJCSAgICAmYW1wO21lbV9jZywgJmFtcDtvYmpfY2cpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJZ290byBvdXRfdW5jaGFyZ2VfY2dyb3VwOwomIzQzOwogCXNwaW5fbG9ja19pcnEoJmFtcDtodWdldGxiX2xvY2spOwogCS8qCiAJICogZ2xiX2NoZyBpcyBwYXNzZWQgdG8gaW5kaWNhdGUgd2hldGhlciBvciBub3QgYSBwYWdlIG11c3QgYmUgdGFrZW4KQEAgLTI5MzMsNyAmIzQzOzI3OTEsNyBAQCBzdHJ1Y3QgZm9saW8gKmFsbG9jX2h1Z2V0bGJfZm9saW8oc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCiAJCXNwaW5fdW5sb2NrX2lycSgmYW1wO2h1Z2V0bGJfbG9jayk7CiAJCWZvbGlvID0gYWxsb2NfYnVkZHlfaHVnZXRsYl9mb2xpb193aXRoX21wb2woaCwgdm1hLCBhZGRyKTsKIAkJaWYgKCFmb2xpbykKLQkJCWdvdG8gb3V0X3VuY2hhcmdlX2Nncm91cDsKJiM0MzsJCQlnb3RvIG91dF91bmNoYXJnZV9jZ3JvdXBfbWVtY2c7CiAJCXNwaW5fbG9ja19pcnEoJmFtcDtodWdldGxiX2xvY2spOwogCQlsaXN0X2FkZCgmYW1wO2ZvbGlvLSZndDtscnUsICZhbXA7aC0mZ3Q7aHVnZXBhZ2VfYWN0aXZlbGlzdCk7CiAJCWZvbGlvX3JlZl91bmZyZWV6ZShmb2xpbywgMSk7CkBAIC0yOTYwLDYgJiM0MzsyODE4LDkgQEAgc3RydWN0IGZvbGlvICphbGxvY19odWdldGxiX2ZvbGlvKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAogCiAJc3Bpbl91bmxvY2tfaXJxKCZhbXA7aHVnZXRsYl9sb2NrKTsKIAomIzQzOwltZW1fY2dyb3VwX2h1Z2V0bGJfY29tbWl0X2NoYXJnZShmb2xpbywgbWVtX2NnLCBvYmpfY2cpOwomIzQzOwlscnV2ZWNfc3RhdF9tb2RfZm9saW8oZm9saW8sIE5SX0hVR0VUTEIsIHBhZ2VzX3Blcl9odWdlX3BhZ2UoaCkpOwomIzQzOwogCWh1Z2V0bGJfc2V0X2ZvbGlvX3N1YnBvb2woZm9saW8sIHNwb29sKTsKIAogCWlmIChtYXBfY2hnICE9IE1BUF9DSEdfRU5GT1JDRUQpIHsKQEAgLTI5ODcsMjEgJiM0MzsyODQ4LDEwIEBAIHN0cnVjdCBmb2xpbyAqYWxsb2NfaHVnZXRsYl9mb2xpbyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKIAkJfQogCX0KIAotCXJldCA9IG1lbV9jZ3JvdXBfY2hhcmdlX2h1Z2V0bGIoZm9saW8sIGdmcCk7Ci0JLyoKLQkgKiBVbmNvbmRpdGlvbmFsbHkgaW5jcmVtZW50IE5SX0hVR0VUTEIgaGVyZS4gSWYgaXQgdHVybnMgb3V0IHRoYXQKLQkgKiBtZW1fY2dyb3VwX2NoYXJnZV9odWdldGxiIGZhaWxlZCwgdGhlbiBpbW1lZGlhdGVseSBmcmVlIHRoZSBwYWdlIGFuZAotCSAqIGRlY3JlbWVudCBOUl9IVUdFVExCLgotCSAqLwotCWxydXZlY19zdGF0X21vZF9mb2xpbyhmb2xpbywgTlJfSFVHRVRMQiwgcGFnZXNfcGVyX2h1Z2VfcGFnZShoKSk7Ci0KLQlpZiAocmV0ID09IC1FTk9NRU0pIHsKLQkJZnJlZV9odWdlX2ZvbGlvKGZvbGlvKTsKLQkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7Ci0JfQotCiAJcmV0dXJuIGZvbGlvOwogCiYjNDM7b3V0X3VuY2hhcmdlX2Nncm91cF9tZW1jZzoKJiM0MzsJbWVtX2Nncm91cF9odWdldGxiX2NhbmNlbF9jaGFyZ2UocGFnZXNfcGVyX2h1Z2VfcGFnZShoKSwgbWVtX2NnLCBvYmpfY2cpOwogb3V0X3VuY2hhcmdlX2Nncm91cDoKIAlodWdldGxiX2Nncm91cF91bmNoYXJnZV9jZ3JvdXAoaWR4LCBwYWdlc19wZXJfaHVnZV9wYWdlKGgpLCBoX2NnKTsKIG91dF91bmNoYXJnZV9jZ3JvdXBfcmVzZXJ2YXRpb246CkBAIC0zMDA5LDE5ICYjNDM7Mjg1OSwyOCBAQCBzdHJ1Y3QgZm9saW8gKmFsbG9jX2h1Z2V0bGJfZm9saW8oc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCiAJCWh1Z2V0bGJfY2dyb3VwX3VuY2hhcmdlX2Nncm91cF9yc3ZkKGlkeCwgcGFnZXNfcGVyX2h1Z2VfcGFnZShoKSwKIAkJCQkJCSAgICBoX2NnX3JzdmQpOwogb3V0X3N1YnBvb2xfcHV0OgotCS8qCi0JICogcHV0IHBhZ2UgdG8gc3VicG9vbCBpZmYgdGhlIHF1b3RhIG9mIHN1YnBvb2wmIzM5O3MgcnN2X2hwYWdlcyBpcyB1c2VkCi0JICogZHVyaW5nIGh1Z2VwYWdlX3N1YnBvb2xfZ2V0X3BhZ2VzLgotCSAqLwotCWlmIChtYXBfY2hnICZhbXA7JmFtcDsgIWdibF9jaGcpIHsKLQkJZ2JsX3Jlc2VydmUgPSBodWdlcGFnZV9zdWJwb29sX3B1dF9wYWdlcyhzcG9vbCwgMSk7Ci0JCWh1Z2V0bGJfYWNjdF9tZW1vcnkoaCwgLWdibF9yZXNlcnZlKTsKJiM0MzsJaWYgKG1hcF9jaGcpIHsKJiM0MzsJCWxvbmcgZ2JsX3Jlc2VydmUgPSBodWdlcGFnZV9zdWJwb29sX3B1dF9wYWdlcyhzcG9vbCwgMSk7CiYjNDM7CiYjNDM7CQlpZiAoIWdibF9jaGcpCiYjNDM7CQkJaHVnZXRsYl9hY2N0X21lbW9yeShoLCAtZ2JsX3Jlc2VydmUpOwogCX0KIAogCiBvdXRfZW5kX3Jlc2VydmF0aW9uOgogCWlmIChtYXBfY2hnICE9IE1BUF9DSEdfRU5GT1JDRUQpCiAJCXZtYV9lbmRfcmVzZXJ2YXRpb24oaCwgdm1hLCBhZGRyKTsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogUmV0dXJuIC1FTk9TUEMgd2hlbiB0aGlzIGZ1bmN0aW9uIGZhaWxzIHRvIGFsbG9jYXRlIG9yCiYjNDM7CSAqIGNoYXJnZSBhIGh1Z2UgcGFnZS4gSWYgYSBzdGFuZGFyZCAoUEFHRV9TSVpFKSBwYWdlCiYjNDM7CSAqIGFsbG9jYXRpb24gZmFpbHMsIHRoZSBPT00ga2lsbGVyIGlzIGdpdmVuIGEgY2hhbmNlIHRvIHJ1biwKJiM0MzsJICogd2hpY2ggbWF5IHJlc29sdmUgdGhlIGZhaWx1cmUgb24gcmV0cnkuIEhvd2V2ZXIsIGZvcgomIzQzOwkgKiBIdWdlVExCIGFsbG9jYXRpb25zLCB0aGUgT09NIGtpbGxlciBpcyBub3QgdHJpZ2dlcmVkLgomIzQzOwkgKiBSZXR1cm5pbmcgLUVOT01FTSAob3IgYW55dGhpbmcgcmVzdWx0aW5nIGluIFZNX0ZBVUxUX09PTSkKJiM0MzsJICogd291bGQgbGVhayB0byB0aGUgI1BGIGhhbmRsZXIsIGNhdXNpbmcgaXQgdG8gbG9vcAomIzQzOwkgKiBpbmRlZmluaXRlbHkgcmV0cnlpbmcgdGhlIGZhdWx0LgomIzQzOwkgKi8KIAlyZXR1cm4gRVJSX1BUUigtRU5PU1BDKTsKIH0KIApAQCAtNDU5Myw3ICYjNDM7NDQ1Miw3IEBAIHVuc2lnbmVkIGxvbmcgaHVnZXRsYl90b3RhbF9wYWdlcyh2b2lkKQogCXJldHVybiBucl90b3RhbF9wYWdlczsKIH0KIAotc3RhdGljIGludCBodWdldGxiX2FjY3RfbWVtb3J5KHN0cnVjdCBoc3RhdGUgKmgsIGxvbmcgZGVsdGEpCiYjNDM7aW50IGh1Z2V0bGJfYWNjdF9tZW1vcnkoc3RydWN0IGhzdGF0ZSAqaCwgbG9uZyBkZWx0YSkKIHsKIAlpbnQgcmV0ID0gLUVOT01FTTsKIApAQCAtNjU0Miw3ICYjNDM7NjQwMSw3IEBAIGxvbmcgaHVnZXRsYl9yZXNlcnZlX3BhZ2VzKHN0cnVjdCBpbm9kZSAqaW5vZGUsCiAJCXN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAogCQl2bWFfZmxhZ3NfdCB2bWFfZmxhZ3MpCiB7Ci0JbG9uZyBjaGcgPSAtMSwgYWRkID0gLTEsIHNwb29sX3Jlc3YsIGdibF9yZXN2OwomIzQzOwlsb25nIGNoZyA9IC0xLCBhZGQgPSAtMSwgZ2JsX3Jlc3Y7CiAJc3RydWN0IGhzdGF0ZSAqaCA9IGhzdGF0ZV9pbm9kZShpbm9kZSk7CiAJc3RydWN0IGh1Z2VwYWdlX3N1YnBvb2wgKnNwb29sID0gc3VicG9vbF9pbm9kZShpbm9kZSk7CiAJc3RydWN0IHJlc3ZfbWFwICpyZXN2X21hcDsKQEAgLTY2ODcsMjYgJiM0Mzs2NTQ2LDIxIEBAIGxvbmcgaHVnZXRsYl9yZXNlcnZlX3BhZ2VzKHN0cnVjdCBpbm9kZSAqaW5vZGUsCiAJfQogCXJldHVybiBjaGc7CiAKLW91dF9wdXRfcGFnZXM6Ci0Jc3Bvb2xfcmVzdiA9IGNoZyAtIGdibF9yZXNlcnZlOwotCWlmIChzcG9vbF9yZXN2KSB7Ci0JCS8qIHB1dCBzdWIgcG9vbCYjMzk7cyByZXNlcnZhdGlvbiBiYWNrLCBjaGcgLSBnYmxfcmVzZXJ2ZSAqLwotCQlnYmxfcmVzdiA9IGh1Z2VwYWdlX3N1YnBvb2xfcHV0X3BhZ2VzKHNwb29sLCBzcG9vbF9yZXN2KTsKLQkJLyoKLQkJICogc3VicG9vbCYjMzk7cyByZXNlcnZlZCBwYWdlcyBjYW4gbm90IGJlIHB1dCBiYWNrIGR1ZSB0byByYWNlLAotCQkgKiByZXR1cm4gdG8gaHN0YXRlLgotCQkgKi8KLQkJaHVnZXRsYl9hY2N0X21lbW9yeShoLCAtZ2JsX3Jlc3YpOwotCX0KLQkvKiBSZXN0b3JlIHVzZWRfaHBhZ2VzIGZvciBwYWdlcyB0aGF0IGZhaWxlZCBnbG9iYWwgcmVzZXJ2YXRpb24gKi8KLQlpZiAoZ2JsX3Jlc2VydmUgJmFtcDsmYW1wOyBzcG9vbCkgewotCQl1bnNpZ25lZCBsb25nIGZsYWdzOwomIzQzOyBvdXRfcHV0X3BhZ2VzOgomIzQzOwkvKgomIzQzOwkgKiBSZXR1cm4gYWxsIHRoYXQgd2FzIHJlcXVlc3RlZCBmcm9tIHRoZSBzdWJwb29sLCBsZXQgc3VicG9vbAomIzQzOwkgKiB0ZWxsIHVzIHRoZSBuZXcgbnVtYmVyIG9mIHJlc2VydmF0aW9ucyB0aGF0IG5lZWQgdG8gYmUKJiM0MzsJICogcmV0dXJuZWQgdG8gdGhlIGdsb2JhbCBwb29sLgomIzQzOwkgKi8KJiM0MzsJZ2JsX3Jlc3YgPSBodWdlcGFnZV9zdWJwb29sX3B1dF9wYWdlcyhzcG9vbCwgY2hnKTsKJiM0MzsJLyoKJiM0MzsJICogVGhlcmUgbWF5IGJlIGEgZGlmZmVyZW5jZSBiZXR3ZWVuIHRoZSBudW1iZXIgb2YKJiM0MzsJICogcmVzZXJ2YXRpb25zIHRvIGNvbnN1bWUgYW5kIHRoZSBudW1iZXIgdG8gcmVzdG9yZSBub3cgaWYKJiM0MzsJICogdGhlcmUgYXJlIG11bHRpcGxlIHRocmVhZHMgaW50ZXJhY3Rpbmcgd2l0aCB0aGUgc3VicG9vbCAtCiYjNDM7CSAqIHJlc3RvcmUgdGhlIGRpZmZlcmVuY2UuCiYjNDM7CSAqLwomIzQzOwlodWdldGxiX2FjY3RfbWVtb3J5KGgsIC0oZ2JsX3Jlc3YgLSBnYmxfcmVzZXJ2ZSkpOwogCi0JCXNwaW5fbG9ja19pcnFzYXZlKCZhbXA7c3Bvb2wtJmd0O2xvY2ssIGZsYWdzKTsKLQkJaWYgKHNwb29sLSZndDttYXhfaHBhZ2VzICE9IC0xKQotCQkJc3Bvb2wtJmd0O3VzZWRfaHBhZ2VzIC09IGdibF9yZXNlcnZlOwotCQl1bmxvY2tfb3JfcmVsZWFzZV9zdWJwb29sKHNwb29sLCBmbGFncyk7Ci0JfQogb3V0X3VuY2hhcmdlX2Nncm91cDoKIAlodWdldGxiX2Nncm91cF91bmNoYXJnZV9jZ3JvdXBfcnN2ZChoc3RhdGVfaW5kZXgoaCksCiAJCQkJCSAgICBjaGcgKiBwYWdlc19wZXJfaHVnZV9wYWdlKGgpLCBoX2NnKTsKZGlmZiAtLWdpdCBhL21tL2h1Z2V0bGJfc3VicG9vbC5jIGIvbW0vaHVnZXRsYl9zdWJwb29sLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAuLmViNTQ3MmJkZjIxOTI0Ci0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvbW0vaHVnZXRsYl9zdWJwb29sLmMKQEAgLTAsMCAmIzQzOzEsMjIzIEBACiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKJiM0MzsvKgomIzQzOyAqIFN1YnBvb2wgYW5kIHJlc2VydmUgYWNjb3VudGluZyBmb3IgSHVnZVRMQiBmb2xpb3MuCiYjNDM7ICogRXh0cmFjdGVkIGZyb20gbW0vaHVnZXRsYi5jCiYjNDM7ICovCiYjNDM7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3R5cGVzLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2tlcm5lbC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9zbGFiLmgmZ3Q7CiYjNDM7I2lmZGVmIF9fS0VSTkVMX18KJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvaHVnZXRsYi5oJmd0OwomIzQzOyNlbmRpZgomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9zcGlubG9jay5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9idWcuaCZndDsKJiM0MzsjaW5jbHVkZSAmIzM0O2h1Z2V0bGJfc3VicG9vbC5oJiMzNDsKJiM0MzsKJiM0MztzdHJ1Y3QgaHVnZXBhZ2Vfc3VicG9vbCB7CiYjNDM7CXNwaW5sb2NrX3QgbG9jazsKJiM0MzsJbG9uZyBjb3VudDsKJiM0MzsJbG9uZyBtYXhfaHBhZ2VzOwkvKiBNYXhpbXVtIGh1Z2UgcGFnZXMgb3IgLTEgaWYgbm8gbWF4aW11bS4gKi8KJiM0MzsJbG9uZyB1c2VkX2hwYWdlczsJLyogVXNlZCBwYWdlIGNvdW50LCBpbmNsdWRlcyBib3RoICovCiYjNDM7CQkJCS8qIGFsbG9jYXRlZCBhbmQgcmVzZXJ2ZWQgcGFnZXMuICovCiYjNDM7CXN0cnVjdCBoc3RhdGUgKmhzdGF0ZTsKJiM0MzsJbG9uZyBtaW5faHBhZ2VzOwkvKiBNaW5pbXVtIGh1Z2UgcGFnZXMgb3IgLTEgaWYgbm8gbWluaW11bS4gKi8KJiM0MzsJbG9uZyByc3ZfaHBhZ2VzOwkvKiBQYWdlcyByZXNlcnZlZCBhZ2FpbnN0IGdsb2JhbCBwb29sIHRvICovCiYjNDM7CQkJCS8qIHNhdGlzZnkgbWluaW11bSBzaXplLiAqLwomIzQzO307CiYjNDM7CiYjNDM7c3RhdGljIGlubGluZSBib29sIHN1YnBvb2xfaXNfZnJlZShzdHJ1Y3QgaHVnZXBhZ2Vfc3VicG9vbCAqc3Bvb2wpCiYjNDM7ewomIzQzOwlpZiAoc3Bvb2wtJmd0O2NvdW50KQomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwomIzQzOwlyZXR1cm4gc3Bvb2wtJmd0O3VzZWRfaHBhZ2VzID09IDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCB1bmxvY2tfb3JfcmVsZWFzZV9zdWJwb29sKHN0cnVjdCBodWdlcGFnZV9zdWJwb29sICpzcG9vbCwKJiM0MzsJCQkJCQl1bnNpZ25lZCBsb25nIGlycV9mbGFncykKJiM0Mzt7CiYjNDM7CXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFtcDtzcG9vbC0mZ3Q7bG9jaywgaXJxX2ZsYWdzKTsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogSWYgbm8gcGFnZXMgYXJlIHVzZWQsIGFuZCBubyBvdGhlciBoYW5kbGVzIHRvIHRoZSBzdWJwb29sCiYjNDM7CSAqIHJlbWFpbiwgZ2l2ZSB1cCBhbnkgcmVzZXJ2YXRpb25zIGJhc2VkIG9uIG1pbmltdW0gc2l6ZSBhbmQKJiM0MzsJICogZnJlZSB0aGUgc3VicG9vbC4KJiM0MzsJICovCiYjNDM7CWlmIChzdWJwb29sX2lzX2ZyZWUoc3Bvb2wpKSB7CiYjNDM7CQlpZiAoc3Bvb2wtJmd0O21pbl9ocGFnZXMgIT0gLTEpCiYjNDM7CQkJaHVnZXRsYl9hY2N0X21lbW9yeShzcG9vbC0mZ3Q7aHN0YXRlLAomIzQzOwkJCQkJCS1zcG9vbC0mZ3Q7bWluX2hwYWdlcyk7CiYjNDM7CQlrZnJlZShzcG9vbCk7CiYjNDM7CX0KJiM0Mzt9CiYjNDM7CiYjNDM7bG9uZyBodWdlcGFnZV9zdWJwb29sX2ZyZWVfaHBhZ2VzKHN0cnVjdCBodWdlcGFnZV9zdWJwb29sICpzcG9vbCkKJiM0Mzt7CiYjNDM7CWxvbmcgZnJlZV9wYWdlczsKJiM0MzsKJiM0MzsJc3Bpbl9sb2NrX2lycSgmYW1wO3Nwb29sLSZndDtsb2NrKTsKJiM0MzsJaWYgKHNwb29sLSZndDttYXhfaHBhZ2VzID09IC0xKQomIzQzOwkJZnJlZV9wYWdlcyA9IC0xOwomIzQzOwllbHNlCiYjNDM7CQlmcmVlX3BhZ2VzID0gc3Bvb2wtJmd0O21heF9ocGFnZXMgLSBzcG9vbC0mZ3Q7dXNlZF9ocGFnZXM7CiYjNDM7CXNwaW5fdW5sb2NrX2lycSgmYW1wO3Nwb29sLSZndDtsb2NrKTsKJiM0MzsKJiM0MzsJcmV0dXJuIGZyZWVfcGFnZXM7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB1bnNpZ25lZCBpbnQgaHVnZXBhZ2Vfc3VicG9vbF9ocGFnZV9zaGlmdChzdHJ1Y3QgaHVnZXBhZ2Vfc3VicG9vbCAqc3Bvb2wpCiYjNDM7ewomIzQzOwlyZXR1cm4gaHVnZV9wYWdlX3NoaWZ0KHNwb29sLSZndDtoc3RhdGUpOwomIzQzO30KJiM0MzsKJiM0Mzt1bnNpZ25lZCBsb25nIGxvbmcgaHVnZXBhZ2Vfc3VicG9vbF9tYXhfc2l6ZShzdHJ1Y3QgaHVnZXBhZ2Vfc3VicG9vbCAqc3Bvb2wpCiYjNDM7ewomIzQzOwlpZiAoc3Bvb2wtJmd0O21heF9ocGFnZXMgPT0gLTEpCiYjNDM7CQlyZXR1cm4gLTFVTEw7CiYjNDM7CXJldHVybiAodW5zaWduZWQgbG9uZyBsb25nKXNwb29sLSZndDttYXhfaHBhZ2VzICZsdDsmbHQ7IGh1Z2VwYWdlX3N1YnBvb2xfaHBhZ2Vfc2hpZnQoc3Bvb2wpOwomIzQzO30KJiM0MzsKJiM0Mzt1bnNpZ25lZCBsb25nIGxvbmcgaHVnZXBhZ2Vfc3VicG9vbF9taW5fc2l6ZShzdHJ1Y3QgaHVnZXBhZ2Vfc3VicG9vbCAqc3Bvb2wpCiYjNDM7ewomIzQzOwlpZiAoc3Bvb2wtJmd0O21pbl9ocGFnZXMgPT0gLTEpCiYjNDM7CQlyZXR1cm4gLTFVTEw7CiYjNDM7CXJldHVybiAodW5zaWduZWQgbG9uZyBsb25nKXNwb29sLSZndDttaW5faHBhZ2VzICZsdDsmbHQ7IGh1Z2VwYWdlX3N1YnBvb2xfaHBhZ2Vfc2hpZnQoc3Bvb2wpOwomIzQzO30KJiM0MzsKJiM0Mztsb25nIGh1Z2VwYWdlX3N1YnBvb2xfbWF4X2hwYWdlcyhzdHJ1Y3QgaHVnZXBhZ2Vfc3VicG9vbCAqc3Bvb2wpCiYjNDM7ewomIzQzOwlsb25nIG1heF9ocGFnZXM7CiYjNDM7CiYjNDM7CXNwaW5fbG9ja19pcnEoJmFtcDtzcG9vbC0mZ3Q7bG9jayk7CiYjNDM7CW1heF9ocGFnZXMgPSBzcG9vbC0mZ3Q7bWF4X2hwYWdlczsKJiM0MzsJc3Bpbl91bmxvY2tfaXJxKCZhbXA7c3Bvb2wtJmd0O2xvY2spOwomIzQzOwomIzQzOwlyZXR1cm4gbWF4X2hwYWdlczsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RydWN0IGh1Z2VwYWdlX3N1YnBvb2wgKmh1Z2VwYWdlX25ld19zdWJwb29sKHN0cnVjdCBoc3RhdGUgKmgsIGxvbmcgbWF4X2hwYWdlcywKJiM0MzsJCQkJCQlsb25nIG1pbl9ocGFnZXMpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgaHVnZXBhZ2Vfc3VicG9vbCAqc3Bvb2w7CiYjNDM7CiYjNDM7CXNwb29sID0ga3phbGxvY19vYmooKnNwb29sKTsKJiM0MzsJaWYgKCFzcG9vbCkKJiM0MzsJCXJldHVybiBOVUxMOwomIzQzOwomIzQzOwlzcGluX2xvY2tfaW5pdCgmYW1wO3Nwb29sLSZndDtsb2NrKTsKJiM0MzsJc3Bvb2wtJmd0O2NvdW50ID0gMTsKJiM0MzsJc3Bvb2wtJmd0O21heF9ocGFnZXMgPSBtYXhfaHBhZ2VzOwomIzQzOwlzcG9vbC0mZ3Q7aHN0YXRlID0gaDsKJiM0MzsJc3Bvb2wtJmd0O21pbl9ocGFnZXMgPSBtaW5faHBhZ2VzOwomIzQzOwomIzQzOwlpZiAobWluX2hwYWdlcyAhPSAtMSAmYW1wOyZhbXA7IGh1Z2V0bGJfYWNjdF9tZW1vcnkoaCwgbWluX2hwYWdlcykpIHsKJiM0MzsJCWtmcmVlKHNwb29sKTsKJiM0MzsJCXJldHVybiBOVUxMOwomIzQzOwl9CiYjNDM7CXNwb29sLSZndDtyc3ZfaHBhZ2VzID0gbWluX2hwYWdlczsKJiM0MzsKJiM0MzsJcmV0dXJuIHNwb29sOwomIzQzO30KJiM0MzsKJiM0Mzt2b2lkIGh1Z2VwYWdlX3B1dF9zdWJwb29sKHN0cnVjdCBodWdlcGFnZV9zdWJwb29sICpzcG9vbCkKJiM0Mzt7CiYjNDM7CXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiYjNDM7CiYjNDM7CXNwaW5fbG9ja19pcnFzYXZlKCZhbXA7c3Bvb2wtJmd0O2xvY2ssIGZsYWdzKTsKJiM0MzsJQlVHX09OKCFzcG9vbC0mZ3Q7Y291bnQpOwomIzQzOwlzcG9vbC0mZ3Q7Y291bnQtLTsKJiM0MzsJdW5sb2NrX29yX3JlbGVhc2Vfc3VicG9vbChzcG9vbCwgZmxhZ3MpOwomIzQzO30KJiM0MzsKJiM0MzsvKgomIzQzOyAqIFN1YnBvb2wgYWNjb3VudGluZyBmb3IgYWxsb2NhdGluZyBhbmQgcmVzZXJ2aW5nIHBhZ2VzLgomIzQzOyAqIFJldHVybiAtRU5PTUVNIGlmIHRoZXJlIGFyZSBub3QgZW5vdWdoIHJlc291cmNlcyB0byBzYXRpc2Z5IHRoZQomIzQzOyAqIHJlcXVlc3QuICBPdGhlcndpc2UsIHJldHVybiB0aGUgbnVtYmVyIG9mIHBhZ2VzIGJ5IHdoaWNoIHRoZQomIzQzOyAqIGdsb2JhbCBwb29scyBtdXN0IGJlIGFkanVzdGVkICh1cHdhcmQpLiAgVGhlIHJldHVybmVkIHZhbHVlIG1heQomIzQzOyAqIG9ubHkgYmUgZGlmZmVyZW50IHRoYW4gdGhlIHBhc3NlZCB2YWx1ZSAoZGVsdGEpIGluIHRoZSBjYXNlIHdoZXJlCiYjNDM7ICogYSBzdWJwb29sIG1pbmltdW0gc2l6ZSBtdXN0IGJlIG1haW50YWluZWQuCiYjNDM7ICovCiYjNDM7bG9uZyBodWdlcGFnZV9zdWJwb29sX2dldF9wYWdlcyhzdHJ1Y3QgaHVnZXBhZ2Vfc3VicG9vbCAqc3Bvb2wsCiYjNDM7CQkJCSAgICAgIGxvbmcgZGVsdGEpCiYjNDM7ewomIzQzOwlsb25nIHJldCA9IGRlbHRhOwomIzQzOwomIzQzOwlpZiAoIXNwb29sKQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJc3Bpbl9sb2NrX2lycSgmYW1wO3Nwb29sLSZndDtsb2NrKTsKJiM0MzsKJiM0MzsJaWYgKHNwb29sLSZndDttYXhfaHBhZ2VzICE9IC0xICZhbXA7JmFtcDsKJiM0MzsJICAgIHNwb29sLSZndDt1c2VkX2hwYWdlcyAmIzQzOyBkZWx0YSAmZ3Q7IHNwb29sLSZndDttYXhfaHBhZ2VzKSB7CiYjNDM7CQlyZXQgPSAtRU5PTUVNOwomIzQzOwkJZ290byB1bmxvY2tfcmV0OwomIzQzOwl9CiYjNDM7CiYjNDM7CXNwb29sLSZndDt1c2VkX2hwYWdlcyAmIzQzOz0gZGVsdGE7CiYjNDM7CiYjNDM7CS8qIG1pbmltdW0gc2l6ZSBhY2NvdW50aW5nICovCiYjNDM7CWlmIChzcG9vbC0mZ3Q7bWluX2hwYWdlcyAhPSAtMSAmYW1wOyZhbXA7IHNwb29sLSZndDtyc3ZfaHBhZ2VzKSB7CiYjNDM7CQlpZiAoZGVsdGEgJmd0OyBzcG9vbC0mZ3Q7cnN2X2hwYWdlcykgewomIzQzOwkJCS8qCiYjNDM7CQkJICogQXNraW5nIGZvciBtb3JlIHJlc2VydmVzIHRoYW4gdGhvc2UgYWxyZWFkeSB0YWtlbiBvbgomIzQzOwkJCSAqIGJlaGFsZiBvZiBzdWJwb29sLiAgUmV0dXJuIGRpZmZlcmVuY2UuCiYjNDM7CQkJICovCiYjNDM7CQkJcmV0ID0gZGVsdGEgLSBzcG9vbC0mZ3Q7cnN2X2hwYWdlczsKJiM0MzsJCQlzcG9vbC0mZ3Q7cnN2X2hwYWdlcyA9IDA7CiYjNDM7CQl9IGVsc2UgewomIzQzOwkJCXJldCA9IDA7CS8qIHJlc2VydmVzIGFscmVhZHkgYWNjb3VudGVkIGZvciAqLwomIzQzOwkJCXNwb29sLSZndDtyc3ZfaHBhZ2VzIC09IGRlbHRhOwomIzQzOwkJfQomIzQzOwl9CiYjNDM7CiYjNDM7dW5sb2NrX3JldDoKJiM0MzsJc3Bpbl91bmxvY2tfaXJxKCZhbXA7c3Bvb2wtJmd0O2xvY2spOwomIzQzOwlyZXR1cm4gcmV0OwomIzQzO30KJiM0MzsKJiM0MzsvKgomIzQzOyAqIFN1YnBvb2wgYWNjb3VudGluZyBmb3IgZnJlZWluZyBhbmQgdW5yZXNlcnZpbmcgcGFnZXMuCiYjNDM7ICogUmV0dXJuIHRoZSBudW1iZXIgb2YgZ2xvYmFsIHBhZ2UgcmVzZXJ2YXRpb25zIHRoYXQgbXVzdCBiZSBkcm9wcGVkLgomIzQzOyAqIFRoZSByZXR1cm4gdmFsdWUgbWF5IG9ubHkgYmUgZGlmZmVyZW50IHRoYW4gdGhlIHBhc3NlZCB2YWx1ZSAoZGVsdGEpCiYjNDM7ICogaW4gdGhlIGNhc2Ugd2hlcmUgYSBzdWJwb29sIG1pbmltdW0gc2l6ZSBtdXN0IGJlIG1haW50YWluZWQuCiYjNDM7ICovCiYjNDM7bG9uZyBodWdlcGFnZV9zdWJwb29sX3B1dF9wYWdlcyhzdHJ1Y3QgaHVnZXBhZ2Vfc3VicG9vbCAqc3Bvb2wsCiYjNDM7CQkJCSAgICAgICBsb25nIGRlbHRhKQomIzQzO3sKJiM0MzsJbG9uZyByZXQgPSBkZWx0YTsKJiM0MzsJdW5zaWduZWQgbG9uZyBmbGFnczsKJiM0MzsKJiM0MzsJaWYgKCFzcG9vbCkKJiM0MzsJCXJldHVybiBkZWx0YTsKJiM0MzsKJiM0MzsJc3Bpbl9sb2NrX2lycXNhdmUoJmFtcDtzcG9vbC0mZ3Q7bG9jaywgZmxhZ3MpOwomIzQzOwomIzQzOwlzcG9vbC0mZ3Q7dXNlZF9ocGFnZXMgLT0gZGVsdGE7CiYjNDM7CiYjNDM7CSAvKiBtaW5pbXVtIHNpemUgYWNjb3VudGluZyAqLwomIzQzOwlpZiAoc3Bvb2wtJmd0O21pbl9ocGFnZXMgIT0gLTEgJmFtcDsmYW1wOyBzcG9vbC0mZ3Q7dXNlZF9ocGFnZXMgJmx0OyBzcG9vbC0mZ3Q7bWluX2hwYWdlcykgewomIzQzOwkJLyoKJiM0MzsJCSAqIGxpbWl0IGlzIHRoZSBtYXhpbXVtIG51bWJlciBvZiByZXNlcnZhdGlvbnMgdGhhdAomIzQzOwkJICogY2FuIGJlIHJlc3RvcmVkIHRvIHRoaXMgc3VicG9vbC4KJiM0MzsJCSAqLwomIzQzOwkJbG9uZyBsaW1pdCA9IHNwb29sLSZndDttaW5faHBhZ2VzIC0gc3Bvb2wtJmd0O3VzZWRfaHBhZ2VzOwomIzQzOwomIzQzOwkJaWYgKHNwb29sLSZndDtyc3ZfaHBhZ2VzICYjNDM7IGRlbHRhICZsdDs9IGxpbWl0KQomIzQzOwkJCXJldCA9IDA7CiYjNDM7CQllbHNlCiYjNDM7CQkJcmV0ID0gc3Bvb2wtJmd0O3Jzdl9ocGFnZXMgJiM0MzsgZGVsdGEgLSBsaW1pdDsKJiM0MzsKJiM0MzsJCXNwb29sLSZndDtyc3ZfaHBhZ2VzICYjNDM7PSBkZWx0YTsKJiM0MzsJCWlmIChzcG9vbC0mZ3Q7cnN2X2hwYWdlcyAmZ3Q7IGxpbWl0KQomIzQzOwkJCXNwb29sLSZndDtyc3ZfaHBhZ2VzID0gbGltaXQ7CiYjNDM7CX0KJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogSWYgaHVnZXRsYmZzX3B1dF9zdXBlciBjb3VsZG4mIzM5O3QgZnJlZSBzcG9vbCBkdWUgdG8gYW4gb3V0c3RhbmRpbmcKJiM0MzsJICogcXVvdGEgcmVmZXJlbmNlLCBmcmVlIGl0IG5vdy4KJiM0MzsJICovCiYjNDM7CXVubG9ja19vcl9yZWxlYXNlX3N1YnBvb2woc3Bvb2wsIGZsYWdzKTsKJiM0MzsKJiM0MzsJcmV0dXJuIHJldDsKJiM0Mzt9CmRpZmYgLS1naXQgYS9tbS9odWdldGxiX3N1YnBvb2wuaCBiL21tL2h1Z2V0bGJfc3VicG9vbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwLi40MWQyMjIzOWYyYzNlZAotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL21tL2h1Z2V0bGJfc3VicG9vbC5oCkBAIC0wLDAgJiM0MzsxLDIxIEBACiYjNDM7LyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgKi8KJiM0MzsjaWZuZGVmIF9NTV9IVUdFVExCX1NVQlBPT0xfSAomIzQzOyNkZWZpbmUgX01NX0hVR0VUTEJfU1VCUE9PTF9ICiYjNDM7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3NwaW5sb2NrLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3R5cGVzLmgmZ3Q7CiYjNDM7CiYjNDM7c3RydWN0IGhzdGF0ZTsKJiM0MztzdHJ1Y3QgaHVnZXBhZ2Vfc3VicG9vbDsKJiM0MzsKJiM0MztzdHJ1Y3QgaHVnZXBhZ2Vfc3VicG9vbCAqaHVnZXBhZ2VfbmV3X3N1YnBvb2woc3RydWN0IGhzdGF0ZSAqaCwgbG9uZyBtYXhfaHBhZ2VzLAomIzQzOwkJCQkJCWxvbmcgbWluX2hwYWdlcyk7CiYjNDM7dm9pZCBodWdlcGFnZV9wdXRfc3VicG9vbChzdHJ1Y3QgaHVnZXBhZ2Vfc3VicG9vbCAqc3Bvb2wpOwomIzQzO2xvbmcgaHVnZXBhZ2Vfc3VicG9vbF9nZXRfcGFnZXMoc3RydWN0IGh1Z2VwYWdlX3N1YnBvb2wgKnNwb29sLCBsb25nIGRlbHRhKTsKJiM0Mztsb25nIGh1Z2VwYWdlX3N1YnBvb2xfcHV0X3BhZ2VzKHN0cnVjdCBodWdlcGFnZV9zdWJwb29sICpzcG9vbCwgbG9uZyBkZWx0YSk7CiYjNDM7bG9uZyBodWdlcGFnZV9zdWJwb29sX2ZyZWVfaHBhZ2VzKHN0cnVjdCBodWdlcGFnZV9zdWJwb29sICpzcG9vbCk7CiYjNDM7bG9uZyBodWdlcGFnZV9zdWJwb29sX21heF9ocGFnZXMoc3RydWN0IGh1Z2VwYWdlX3N1YnBvb2wgKnNwb29sKTsKJiM0Mzt1bnNpZ25lZCBsb25nIGxvbmcgaHVnZXBhZ2Vfc3VicG9vbF9tYXhfc2l6ZShzdHJ1Y3QgaHVnZXBhZ2Vfc3VicG9vbCAqc3Bvb2wpOwomIzQzO3Vuc2lnbmVkIGxvbmcgbG9uZyBodWdlcGFnZV9zdWJwb29sX21pbl9zaXplKHN0cnVjdCBodWdlcGFnZV9zdWJwb29sICpzcG9vbCk7CiYjNDM7CiYjNDM7I2VuZGlmIC8qIF9NTV9IVUdFVExCX1NVQlBPT0xfSCAqLwpkaWZmIC0tZ2l0IGEvbW0vbWVtY29udHJvbC5jIGIvbW0vbWVtY29udHJvbC5jCmluZGV4IDZkYzQ4ODhhOTBmM2ZkLi42NzY0ZmYwNDFjMTk2NSAxMDA2NDQKLS0tIGEvbW0vbWVtY29udHJvbC5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL21lbWNvbnRyb2wuYwpAQCAtNTE0NywzOSAmIzQzOzUxNDcsMTE5IEBAIGludCBfX21lbV9jZ3JvdXBfY2hhcmdlKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBnZnBfdCBnZnApCiB9CiAKIC8qKgotICogbWVtX2Nncm91cF9jaGFyZ2VfaHVnZXRsYiAtIGNoYXJnZSB0aGUgbWVtY2cgZm9yIGEgaHVnZXRsYiBmb2xpbwotICogQGZvbGlvOiBmb2xpbyBiZWluZyBjaGFyZ2VkCiYjNDM7ICogbWVtX2Nncm91cF9odWdldGxiX3RyeV9jaGFyZ2UgLSBUcnkgdG8gY2hhcmdlIHRoZSBtZW1jZyBmb3IgYSBodWdldGxiIGZvbGlvCiYjNDM7ICogQG5yX3BhZ2VzOiBudW1iZXIgb2YgYmFzZSBwYWdlcyB0byBjaGFyZ2UKICAqIEBnZnA6IHJlY2xhaW0gbW9kZQomIzQzOyAqIEBtZW1jZ19wOiBPdXRwdXQgcG9pbnRlciB0byB0aGUgY2hhcmdlZCBtZW1fY2dyb3VwIChpZiBzdWNjZXNzZnVsIGFuZCBlbmFibGVkKQomIzQzOyAqIEBvYmpjZ19wOiBPdXRwdXQgcG9pbnRlciB0byB0aGUgY2hhcmdlZCBvYmpfY2dyb3VwIChpZiBzdWNjZXNzZnVsIGFuZCBlbmFibGVkKQogICoKLSAqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHdoZW4gYWxsb2NhdGluZyBhIGh1Z2UgcGFnZSBmb2xpbywgYWZ0ZXIgdGhlIHBhZ2UgaGFzCi0gKiBhbHJlYWR5IGJlZW4gb2J0YWluZWQgYW5kIGNoYXJnZWQgdG8gdGhlIGFwcHJvcHJpYXRlIGh1Z2V0bGIgY2dyb3VwCi0gKiBjb250cm9sbGVyIChpZiBpdCBpcyBlbmFibGVkKS4KJiM0MzsgKiBQcmVwYXJlcyBhbmQgdHJpZXMgdG8gcmVzZXJ2ZSB0aGUgbWVtb3J5IGNvdW50ZXIgZm9yIHRoZSBmb2xpbyBmcm9tIHRoZSBjdXJyZW50CiYjNDM7ICogdGFzayYjMzk7cyBtZW1jZy4gSWYgc3VjY2Vzc2Z1bCwgYm90aCAqbWVtY2dfcCBhbmQgKm9iamNnX3AgYXJlIHBvcHVsYXRlZCBhbmQgdGhlaXIKJiM0MzsgKiByZWZlcmVuY2VzIGFyZSBwaW5uZWQgdW50aWwgYSBzdWJzZXF1ZW50IGNhbGwgdG8gbWVtX2Nncm91cF9odWdldGxiX2NvbW1pdF9jaGFyZ2UKJiM0MzsgKiBvciBtZW1fY2dyb3VwX2h1Z2V0bGJfY2FuY2VsX2NoYXJnZS4KICAqCiAgKiBSZXR1cm5zIEVOT01FTSBpZiB0aGUgbWVtY2cgaXMgYWxyZWFkeSBmdWxsLgotICogUmV0dXJucyAwIGlmIGVpdGhlciB0aGUgY2hhcmdlIHdhcyBzdWNjZXNzZnVsLCBvciBpZiB3ZSBza2lwIHRoZSBjaGFyZ2luZy4KJiM0MzsgKiBSZXR1cm5zIDAgaWYgZWl0aGVyIHRoZSBjaGFyZ2Ugd2FzIHN1Y2Nlc3NmdWwsIG9yIGlmIHdlIHNraXAgY2hhcmdpbmcuCiAgKi8KLWludCBtZW1fY2dyb3VwX2NoYXJnZV9odWdldGxiKHN0cnVjdCBmb2xpbyAqZm9saW8sIGdmcF90IGdmcCkKJiM0MztpbnQgbWVtX2Nncm91cF9odWdldGxiX3RyeV9jaGFyZ2UodW5zaWduZWQgaW50IG5yX3BhZ2VzLCBnZnBfdCBnZnAsCiYjNDM7CQkJCSAgc3RydWN0IG1lbV9jZ3JvdXAgKiptZW1jZ19wLAomIzQzOwkJCQkgIHN0cnVjdCBvYmpfY2dyb3VwICoqb2JqY2dfcCkKIHsKLQlzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cgPSBnZXRfbWVtX2Nncm91cF9mcm9tX2N1cnJlbnQoKTsKJiM0MzsJc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnOwomIzQzOwlzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2c7CiAJaW50IHJldCA9IDA7CiAKLQkvKgotCSAqIEV2ZW4gbWVtY2cgZG9lcyBub3QgYWNjb3VudCBmb3IgaHVnZXRsYiwgd2Ugc3RpbGwgd2FudCB0byB1cGRhdGUKLQkgKiBzeXN0ZW0tbGV2ZWwgc3RhdHMgdmlhIGxydXZlY19zdGF0X21vZF9mb2xpby4gUmV0dXJuIDAsIGFuZCBza2lwCi0JICogY2hhcmdpbmcgdGhlIG1lbWNnLgotCSAqLwomIzQzOwkqbWVtY2dfcCA9IE5VTEw7CiYjNDM7CSpvYmpjZ19wID0gTlVMTDsKJiM0MzsKIAlpZiAobWVtX2Nncm91cF9kaXNhYmxlZCgpIHx8ICFtZW1jZ19hY2NvdW50c19odWdldGxiKCkgfHwKLQkJIW1lbWNnIHx8ICFjZ3JvdXBfc3Vic3lzX29uX2RmbChtZW1vcnlfY2dycF9zdWJzeXMpKQotCQlnb3RvIG91dDsKJiM0MzsJICAgICFjZ3JvdXBfc3Vic3lzX29uX2RmbChtZW1vcnlfY2dycF9zdWJzeXMpKQomIzQzOwkJcmV0dXJuIDA7CiAKLQlpZiAoY2hhcmdlX21lbWNnKGZvbGlvLCBtZW1jZywgZ2ZwKSkKLQkJcmV0ID0gLUVOT01FTTsKJiM0MzsJbWVtY2cgPSBnZXRfbWVtX2Nncm91cF9mcm9tX2N1cnJlbnQoKTsKJiM0MzsJaWYgKCFtZW1jZykKJiM0MzsJCXJldHVybiAwOwogCi1vdXQ6CiYjNDM7CW9iamNnID0gZ2V0X29ial9jZ3JvdXBfZnJvbV9tZW1jZyhtZW1jZyk7CiYjNDM7CWlmICghb2JqY2cpCiYjNDM7CQlnb3RvIHB1dF9tZW1jZzsKJiM0MzsKJiM0MzsJaWYgKCFvYmpfY2dyb3VwX2lzX3Jvb3Qob2JqY2cpKSB7CiYjNDM7CQlyZXQgPSB0cnlfY2hhcmdlX21lbWNnKG1lbWNnLCBnZnAsIG5yX3BhZ2VzKTsKJiM0MzsJCWlmIChyZXQpCiYjNDM7CQkJZ290byBwdXRfb2JqY2c7CiYjNDM7CX0KJiM0MzsKJiM0MzsJKm1lbWNnX3AgPSBtZW1jZzsKJiM0MzsJKm9iamNnX3AgPSBvYmpjZzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7CiYjNDM7cHV0X29iamNnOgomIzQzOwlvYmpfY2dyb3VwX3B1dChvYmpjZyk7CiYjNDM7cHV0X21lbWNnOgogCW1lbV9jZ3JvdXBfcHV0KG1lbWNnKTsKIAlyZXR1cm4gcmV0OwogfQogCiYjNDM7LyoqCiYjNDM7ICogbWVtX2Nncm91cF9odWdldGxiX2NvbW1pdF9jaGFyZ2UgLSBDb21taXQgdGhlIG1lbWNnIGNoYXJnZSBmb3IgYSBodWdldGxiIGZvbGlvCiYjNDM7ICogQGZvbGlvOiBmb2xpbyBiZWluZyBjaGFyZ2VkCiYjNDM7ICogQG1lbWNnOiBUYXJnZXQgbWVtX2Nncm91cCBvYnRhaW5lZCBmcm9tIG1lbV9jZ3JvdXBfaHVnZXRsYl90cnlfY2hhcmdlCiYjNDM7ICogQG9iamNnOiBUYXJnZXQgb2JqX2Nncm91cCBvYnRhaW5lZCBmcm9tIG1lbV9jZ3JvdXBfaHVnZXRsYl90cnlfY2hhcmdlCiYjNDM7ICoKJiM0MzsgKiBGaW5hbGl6ZXMgdGhlIG1lbW9yeSBhbmQgc3RhdGlzdGljcyBjaGFyZ2luZyBmb3IgdGhlIGZvbGlvIGluIHRoZSBzcGVjaWZpZWQgbWVtY2cuCiYjNDM7ICogVHJhbnNmZXJzIHRoZSBwaW5uZWQgb2JqY2cgcmVmZXJlbmNlIHRvIHRoZSBmb2xpbyBzdHJ1Y3R1cmUgKGZvciBhdXRvbWF0aWMKJiM0MzsgKiB1bmNoYXJnaW5nIHVwb24gZnJlZWluZyB2aWEgbWVtX2Nncm91cF91bmNoYXJnZSkuIFJlbGVhc2VzIHRoZSB0cnktY29tbWl0IHJlZmVyZW5jZQomIzQzOyAqIG9uIG1lbWNnLgomIzQzOyAqLwomIzQzO3ZvaWQgbWVtX2Nncm91cF9odWdldGxiX2NvbW1pdF9jaGFyZ2Uoc3RydWN0IGZvbGlvICpmb2xpbywKJiM0MzsJCQkJICAgICAgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLAomIzQzOwkJCQkgICAgICBzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2cpCiYjNDM7ewomIzQzOwlpZiAoIW1lbWNnIHx8ICFvYmpjZykKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJY29tbWl0X2NoYXJnZShmb2xpbywgb2JqY2cpOwomIzQzOwltZW1jZzFfY29tbWl0X2NoYXJnZShmb2xpbywgbWVtY2cpOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBEcm9wIG91ciB0cnktY29tbWl0LWNhbmNlbCBwcm90b2NvbCByZWZlcmVuY2Ugb24gbWVtY2cuCiYjNDM7CSAqIFRoZSBvYmpjZyByZWZlcmVuY2UgaXMgVFJBTlNGRVJSRUQgdG8gdGhlIGZvbGlvIGJ5IGNvbW1pdF9jaGFyZ2UsCiYjNDM7CSAqIHNvIGl0IHdpbGwgYmUgcHV0IGF1dG9tYXRpY2FsbHkgYnkgX19tZW1fY2dyb3VwX3VuY2hhcmdlKCkgd2hlbgomIzQzOwkgKiB0aGUgZm9saW8gaXMgZnJlZWQuCiYjNDM7CSAqLwomIzQzOwltZW1fY2dyb3VwX3B1dChtZW1jZyk7CiYjNDM7fQomIzQzOwomIzQzOy8qKgomIzQzOyAqIG1lbV9jZ3JvdXBfaHVnZXRsYl9jYW5jZWxfY2hhcmdlIC0gQ2FuY2VsIGFuZCB1bmRvIGEgaHVnZXRsYiBmb2xpbyBtZW1jZyBjaGFyZ2UKJiM0MzsgKiBAbnJfcGFnZXM6IG51bWJlciBvZiBiYXNlIHBhZ2VzIHRvIHVuY2hhcmdlCiYjNDM7ICogQG1lbWNnOiBUYXJnZXQgbWVtX2Nncm91cCBvYnRhaW5lZCBmcm9tIG1lbV9jZ3JvdXBfaHVnZXRsYl90cnlfY2hhcmdlCiYjNDM7ICogQG9iamNnOiBUYXJnZXQgb2JqX2Nncm91cCBvYnRhaW5lZCBmcm9tIG1lbV9jZ3JvdXBfaHVnZXRsYl90cnlfY2hhcmdlCiYjNDM7ICoKJiM0MzsgKiBDYW5jZWxzIGFuZCBzYWZlbHkgcm9sbHMgYmFjayB0aGUgcHJlcGFyZWQgbWVtb3J5IGNoYXJnZSBmb3IgdGhlIGZvbGlvIGluIHRoZQomIzQzOyAqIHNwZWNpZmllZCBtZW1jZy4gUmVsZWFzZXMgdGhlIHRyeS1jb21taXQgcGlubmVkIHJlZmVyZW5jZXMgb24gYm90aCBtZW1jZyBhbmQgb2JqY2cuCiYjNDM7ICovCiYjNDM7dm9pZCBtZW1fY2dyb3VwX2h1Z2V0bGJfY2FuY2VsX2NoYXJnZSh1bnNpZ25lZCBpbnQgbnJfcGFnZXMsCiYjNDM7CQkJCSAgICAgIHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywKJiM0MzsJCQkJICAgICAgc3RydWN0IG9ial9jZ3JvdXAgKm9iamNnKQomIzQzO3sKJiM0MzsJaWYgKCFtZW1jZyB8fCAhb2JqY2cpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CWlmICghb2JqX2Nncm91cF9pc19yb290KG9iamNnKSkKJiM0MzsJCXJlZmlsbF9zdG9jayhtZW1jZywgbnJfcGFnZXMpOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBEcm9wIG91ciB0cnktY29tbWl0LWNhbmNlbCBwcm90b2NvbCByZWZlcmVuY2VzIG9uIGJvdGggb2JqY2cKJiM0MzsJICogYW5kIG1lbWNnLCBzaW5jZSB0aGlzIG1hcHBpbmcgYXR0ZW1wdCB3YXMgYWJvcnRlZCBhbmQgdGhlIGZvbGlvCiYjNDM7CSAqIHdhcyBuZXZlciBjb21taXR0ZWQuCiYjNDM7CSAqLwomIzQzOwlvYmpfY2dyb3VwX3B1dChvYmpjZyk7CiYjNDM7CW1lbV9jZ3JvdXBfcHV0KG1lbWNnKTsKJiM0Mzt9CiYjNDM7CiYjNDM7CiAvKioKICAqIG1lbV9jZ3JvdXBfc3dhcGluX2NoYXJnZV9mb2xpbyAtIENoYXJnZSBhIG5ld2x5IGFsbG9jYXRlZCBmb2xpbyBmb3Igc3dhcGluLgogICogQGZvbGlvOiB0aGUgZm9saW8gdG8gY2hhcmdlCmRpZmYgLS1naXQgYS9zdWJwb29sX2xlYWtfbWF4X3NpemUuc2ggYi9zdWJwb29sX2xlYWtfbWF4X3NpemUuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMDAwMDAwMDAuLmJmYWZhMWJhMDc0ZWFjCi0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvc3VicG9vbF9sZWFrX21heF9zaXplLnNoCkBAIC0wLDAgJiM0MzsxLDcxIEBACiYjNDM7IyEvYmluL2Jhc2gKJiM0MzsKJiM0MztpZiBbICYjMzQ7JEVVSUQmIzM0OyAtbmUgMCBdOyB0aGVuCiYjNDM7ICAgIGVjaG8gJiMzNDtQbGVhc2UgcnVuIGFzIHJvb3QmIzM0OwomIzQzOyAgICBleGl0IDEKJiM0MztmaQomIzQzOwomIzQzO01OVF9QQVRIPSYjMzQ7L3RtcC9tbnRfaHVnZXRsYiYjMzQ7CiYjNDM7RklMRV9QQVRIPSYjMzQ7JE1OVF9QQVRIL3Rlc3RfZmlsZSYjMzQ7CiYjNDM7CiYjNDM7IyBTYXZlIG9yaWdpbmFsIHZhbHVlcwomIzQzO29yaWdfbnI9JChjYXQgL3N5cy9rZXJuZWwvbW0vaHVnZXBhZ2VzL2h1Z2VwYWdlcy0yMDQ4a0IvbnJfaHVnZXBhZ2VzKQomIzQzO29yaWdfb3ZlcmNvbW1pdD0kKGNhdCAvc3lzL2tlcm5lbC9tbS9odWdlcGFnZXMvaHVnZXBhZ2VzLTIwNDhrQi9ucl9vdmVyY29tbWl0X2h1Z2VwYWdlcykKJiM0MzsKJiM0MztjbGVhbnVwKCkgewomIzQzOyAgICBlY2hvICYjMzQ7Q2xlYW5pbmcgdXAuLi4mIzM0OwomIzQzOyAgICBybSAtZiAmIzM0OyRGSUxFX1BBVEgmIzM0OwomIzQzOyAgICB1bW91bnQgJiMzNDskTU5UX1BBVEgmIzM0OyAyJmd0Oy9kZXYvbnVsbAomIzQzOyAgICBybWRpciAmIzM0OyRNTlRfUEFUSCYjMzQ7IDImZ3Q7L2Rldi9udWxsCiYjNDM7ICAgIGVjaG8gJiMzNDskb3JpZ19uciYjMzQ7ICZndDsgL3N5cy9rZXJuZWwvbW0vaHVnZXBhZ2VzL2h1Z2VwYWdlcy0yMDQ4a0IvbnJfaHVnZXBhZ2VzCiYjNDM7ICAgIGVjaG8gJiMzNDskb3JpZ19vdmVyY29tbWl0JiMzNDsgJmd0OyAvc3lzL2tlcm5lbC9tbS9odWdlcGFnZXMvaHVnZXBhZ2VzLTIwNDhrQi9ucl9vdmVyY29tbWl0X2h1Z2VwYWdlcwomIzQzOyAgICBlY2hvICYjMzQ7Q2xlYW51cCBkb25lLiYjMzQ7CiYjNDM7fQomIzQzO3RyYXAgY2xlYW51cCBFWElUCiYjNDM7CiYjNDM7IyAxLiBNb3VudCBodWdldGxiZnMgd2l0aCBzaXplPTJNICgxIHBhZ2UpCiYjNDM7bWtkaXIgLXAgJiMzNDskTU5UX1BBVEgmIzM0OwomIzQzO2lmICEgbW91bnQgLXQgaHVnZXRsYmZzIC1vIHNpemU9Mk0gbm9uZSAmIzM0OyRNTlRfUEFUSCYjMzQ7OyB0aGVuCiYjNDM7ICAgIGVjaG8gJiMzNDtGYWlsZWQgdG8gbW91bnQgaHVnZXRsYmZzJiMzNDsKJiM0MzsgICAgZXhpdCAxCiYjNDM7ZmkKJiM0MzsKJiM0MzsjIDIuIFNldCBucl9odWdlcGFnZXMgdG8gMCwgb3ZlcmNvbW1pdCB0byAwCiYjNDM7ZWNobyAwICZndDsgL3N5cy9rZXJuZWwvbW0vaHVnZXBhZ2VzL2h1Z2VwYWdlcy0yMDQ4a0IvbnJfaHVnZXBhZ2VzCiYjNDM7ZWNobyAwICZndDsgL3N5cy9rZXJuZWwvbW0vaHVnZXBhZ2VzL2h1Z2VwYWdlcy0yMDQ4a0IvbnJfb3ZlcmNvbW1pdF9odWdlcGFnZXMKJiM0MzsKJiM0MzsjIENoZWNrIHN1YnBvb2wgdXNhZ2UgYmVmb3JlIHJ1bm5pbmcKJiM0MztyZWFkIHRvdGFsIGZyZWUgJmx0OyAmbHQ7KHN0YXQgLWYgLWMgJiMzNDslYiAlZiYjMzQ7ICYjMzQ7JE1OVF9QQVRIJiMzNDspCiYjNDM7dXNlZF9iZWZvcmU9JCgodG90YWwgLSBmcmVlKSkKJiM0MztlY2hvICYjMzQ7QmVmb3JlIHRlc3QgLSBTdWJwb29sIHRvdGFsIGJsb2NrczogJHRvdGFsJiMzNDsKJiM0MztlY2hvICYjMzQ7QmVmb3JlIHRlc3QgLSBTdWJwb29sIGZyZWUgYmxvY2tzOiAgJGZyZWUmIzM0OwomIzQzO2VjaG8gJiMzNDtCZWZvcmUgdGVzdCAtIFN1YnBvb2wgdXNlZCBibG9ja3M6ICAkdXNlZF9iZWZvcmUmIzM0OwomIzQzO2lmIFsgJiMzNDskdXNlZF9iZWZvcmUmIzM0OyAtbmUgMCBdOyB0aGVuCiYjNDM7ICAgIGVjaG8gJiMzNDtFUlJPUjogU3VicG9vbCBpcyBub3QgY2xlYW4gYmVmb3JlIHRlc3Qgc3RhcnRzISYjMzQ7CiYjNDM7ICAgIGV4aXQgMQomIzQzO2ZpCiYjNDM7CiYjNDM7IyBSdW4gZmFsbG9jYXRlIChleHBlY3RpbmcgZmFpbHVyZSkKJiM0MztlY2hvICYjMzQ7UnVubmluZyBmYWxsb2NhdGUgKGV4cGVjdGluZyBmYWlsdXJlKS4uLiYjMzQ7CiYjNDM7aWYgZmFsbG9jYXRlIC1sIDJNICYjMzQ7JEZJTEVfUEFUSCYjMzQ7IDImZ3Q7L2Rldi9udWxsOyB0aGVuCiYjNDM7ICAgIGVjaG8gJiMzNDtFUlJPUjogZmFsbG9jYXRlIHN1Y2NlZWRlZCBidXQgc2hvdWxkIGhhdmUgZmFpbGVkIChucl9odWdlcGFnZXMgaXMgMCkmIzM0OwomIzQzOyAgICBleGl0IDEKJiM0MztmaQomIzQzOwomIzQzOyMgQ2hlY2sgc3VicG9vbCB1c2FnZSB2aWEgc3RhdGZzCiYjNDM7IyAlYjogVG90YWwgYmxvY2tzCiYjNDM7IyAlZjogRnJlZSBibG9ja3MKJiM0MztyZWFkIHRvdGFsIGZyZWUgJmx0OyAmbHQ7KHN0YXQgLWYgLWMgJiMzNDslYiAlZiYjMzQ7ICYjMzQ7JE1OVF9QQVRIJiMzNDspCiYjNDM7dXNlZD0kKCh0b3RhbCAtIGZyZWUpKQomIzQzOwomIzQzO2VjaG8gJiMzNDtTdWJwb29sIHRvdGFsIGJsb2NrczogJHRvdGFsJiMzNDsKJiM0MztlY2hvICYjMzQ7U3VicG9vbCBmcmVlIGJsb2NrczogICRmcmVlJiMzNDsKJiM0MztlY2hvICYjMzQ7U3VicG9vbCB1c2VkIGJsb2NrcyAobGVha2VkIGlmICZndDsgMCk6ICR1c2VkJiMzNDsKJiM0MzsKJiM0MztpZiBbICYjMzQ7JHVzZWQmIzM0OyAtZ3QgMCBdOyB0aGVuCiYjNDM7ICAgIGVjaG8gJiMzNDtSRVNVTFQ6IExFQUsgREVURUNURUQgKEZBSUwpJiMzNDsKJiM0MzsgICAgZXhpdCAxCiYjNDM7ZWxzZQomIzQzOyAgICBlY2hvICYjMzQ7UkVTVUxUOiBOTyBMRUFLIChQQVNTKSYjMzQ7CiYjNDM7ICAgIGV4aXQgMAomIzQzO2ZpCmRpZmYgLS1naXQgYS9zdWJwb29sX3NoYXJlZF9sZWFrLmMgYi9zdWJwb29sX3NoYXJlZF9sZWFrLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAuLjU4MTFlMThkN2Y4YmU3Ci0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvc3VicG9vbF9zaGFyZWRfbGVhay5jCkBAIC0wLDAgJiM0MzsxLDI5IEBACiYjNDM7I2luY2x1ZGUgJmx0O3N0ZGlvLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O3N0ZGxpYi5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDt1bmlzdGQuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7c3lzL21tYW4uaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7c3lzL3N0YXQuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7ZmNudGwuaCZndDsKJiM0MzsKJiM0MzsjZGVmaW5lIEhQQUdFX1NJWkUgKDIgKiAxMDI0ICogMTAyNCkKJiM0MzsKJiM0MztpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpIHsKJiM0MzsgICAgaWYgKGFyZ2MgJmx0OyAyKSB7CiYjNDM7ICAgICAgICBmcHJpbnRmKHN0ZGVyciwgJiMzNDtVc2FnZTogJXMgJmx0O2ZpbGVfcGF0aCZndDtcbiYjMzQ7LCBhcmd2WzBdKTsKJiM0MzsgICAgICAgIHJldHVybiAxOwomIzQzOyAgICB9CiYjNDM7ICAgIGNvbnN0IGNoYXIgKmZpbGVfcGF0aCA9IGFyZ3ZbMV07CiYjNDM7CiYjNDM7ICAgIGludCBmZCA9IG9wZW4oZmlsZV9wYXRoLCBPX0NSRUFUIHwgT19SRFdSLCAwNjY2KTsKJiM0MzsgICAgaWYgKGZkICZsdDsgMCkgeyBwZXJyb3IoJiMzNDtvcGVuJiMzNDspOyByZXR1cm4gMTsgfQomIzQzOwomIzQzOyAgICB2b2lkICphZGRyID0gbW1hcChOVUxMLCAyICogSFBBR0VfU0laRSwgUFJPVF9SRUFEIHwgUFJPVF9XUklURSwgTUFQX1NIQVJFRCwgZmQsIDApOwomIzQzOyAgICBpZiAoYWRkciA9PSBNQVBfRkFJTEVEKSB7IHBlcnJvcigmIzM0O21tYXAmIzM0Oyk7IGNsb3NlKGZkKTsgcmV0dXJuIDE7IH0KJiM0MzsKJiM0MzsgICAgKih2b2xhdGlsZSBjaGFyICopYWRkciA9IDE7IC8vIEFsbG9jYXRlIDFzdCBwYWdlIG9ubHkuIDJuZCBwYWdlIHJlbWFpbnMgdW5hbGxvY2F0ZWQgKGJ1dCByZXNlcnZlZCkuCiYjNDM7CiYjNDM7ICAgIG11bm1hcChhZGRyLCAyICogSFBBR0VfU0laRSk7CiYjNDM7ICAgIGNsb3NlKGZkKTsKJiM0MzsKJiM0MzsgICAgcmV0dXJuIDA7CiYjNDM7fQpkaWZmIC0tZ2l0IGEvc3VicG9vbF9zaGFyZWRfbGVhay5zaCBiL3N1YnBvb2xfc2hhcmVkX2xlYWsuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMDAwMDAwMDAuLjQ2YzYyMmIxODU1OWEwCi0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvc3VicG9vbF9zaGFyZWRfbGVhay5zaApAQCAtMCwwICYjNDM7MSw4NiBAQAomIzQzOyMhL2Jpbi9iYXNoCiYjNDM7CiYjNDM7aWYgWyAmIzM0OyRFVUlEJiMzNDsgLW5lIDAgXTsgdGhlbgomIzQzOyAgICBlY2hvICYjMzQ7UGxlYXNlIHJ1biBhcyByb290JiMzNDsKJiM0MzsgICAgZXhpdCAxCiYjNDM7ZmkKJiM0MzsKJiM0MztNTlRfUEFUSD0mIzM0Oy90bXAvbW50X2h1Z2V0bGJfc2hhcmVkX2xlYWsmIzM0OwomIzQzO0ZJTEVfUEFUSD0mIzM0OyRNTlRfUEFUSC90ZXN0X2ZpbGUmIzM0OwomIzQzOwomIzQzOyMgU2F2ZSBvcmlnaW5hbCB2YWx1ZXMKJiM0MztvcmlnX25yPSQoY2F0IC9zeXMva2VybmVsL21tL2h1Z2VwYWdlcy9odWdlcGFnZXMtMjA0OGtCL25yX2h1Z2VwYWdlcykKJiM0MzsKJiM0MztjbGVhbnVwKCkgewomIzQzOyAgICBlY2hvICYjMzQ7Q2xlYW5pbmcgdXAuLi4mIzM0OwomIzQzOyAgICBybSAtZiAmIzM0OyRGSUxFX1BBVEgmIzM0OwomIzQzOyAgICB1bW91bnQgJiMzNDskTU5UX1BBVEgmIzM0OyAyJmd0Oy9kZXYvbnVsbAomIzQzOyAgICBybWRpciAmIzM0OyRNTlRfUEFUSCYjMzQ7IDImZ3Q7L2Rldi9udWxsCiYjNDM7ICAgIGVjaG8gJiMzNDskb3JpZ19uciYjMzQ7ICZndDsgL3N5cy9rZXJuZWwvbW0vaHVnZXBhZ2VzL2h1Z2VwYWdlcy0yMDQ4a0IvbnJfaHVnZXBhZ2VzCiYjNDM7ICAgIGVjaG8gJiMzNDtDbGVhbnVwIGRvbmUuJiMzNDsKJiM0Mzt9CiYjNDM7dHJhcCBjbGVhbnVwIEVYSVQKJiM0MzsKJiM0MzsjIDEuIFNldCBucl9odWdlcGFnZXMgdG8gMgomIzQzO2VjaG8gMiAmZ3Q7IC9zeXMva2VybmVsL21tL2h1Z2VwYWdlcy9odWdlcGFnZXMtMjA0OGtCL25yX2h1Z2VwYWdlcwomIzQzOwomIzQzOyMgMi4gTW91bnQgaHVnZXRsYmZzIHdpdGggbWluX3NpemU9Mk0gKDEgcGFnZSkKJiM0Mztta2RpciAtcCAmIzM0OyRNTlRfUEFUSCYjMzQ7CiYjNDM7aWYgISBtb3VudCAtdCBodWdldGxiZnMgLW8gbWluX3NpemU9Mk0gbm9uZSAmIzM0OyRNTlRfUEFUSCYjMzQ7OyB0aGVuCiYjNDM7ICAgIGVjaG8gJiMzNDtGYWlsZWQgdG8gbW91bnQgaHVnZXRsYmZzJiMzNDsKJiM0MzsgICAgZXhpdCAxCiYjNDM7ZmkKJiM0MzsKJiM0MzsjIENoZWNrIHJlc3ZfaHVnZXBhZ2VzIGFmdGVyIG1vdW50IChzaG91bGQgYmUgMSkKJiM0Mztpbml0aWFsX3Jlc3Y9JChjYXQgL3N5cy9rZXJuZWwvbW0vaHVnZXBhZ2VzL2h1Z2VwYWdlcy0yMDQ4a0IvcmVzdl9odWdlcGFnZXMpCiYjNDM7ZWNobyAmIzM0O0luaXRpYWwgcmVzdl9odWdlcGFnZXMgKGFmdGVyIG1vdW50KTogJGluaXRpYWxfcmVzdiYjMzQ7CiYjNDM7aWYgWyAmIzM0OyRpbml0aWFsX3Jlc3YmIzM0OyAtbmUgMSBdOyB0aGVuCiYjNDM7ICAgIGVjaG8gJiMzNDtFUlJPUjogSW5pdGlhbCByZXN2X2h1Z2VwYWdlcyBpcyBub3QgMSEmIzM0OwomIzQzOyAgICBleGl0IDEKJiM0MztmaQomIzQzOwomIzQzOyMgVmVyaWZ5IHJlcHJvZHVjZXIgYmluYXJ5IGV4aXN0cwomIzQzO2lmIFsgISAteCAuL3N1YnBvb2xfc2hhcmVkX2xlYWsgXTsgdGhlbgomIzQzOyAgICBlY2hvICYjMzQ7cmVwcm9kdWNlciBiaW5hcnkgJiMzOTsuL3N1YnBvb2xfc2hhcmVkX2xlYWsmIzM5OyBub3QgZm91bmQgb3Igbm90IGV4ZWN1dGFibGUuJiMzNDsKJiM0MzsgICAgZWNobyAmIzM0O1BsZWFzZSBjb21waWxlIGl0IGZpcnN0OiBnY2MgLXN0YXRpYyAtbyBzdWJwb29sX3NoYXJlZF9sZWFrIHN1YnBvb2xfc2hhcmVkX2xlYWsuYyYjMzQ7CiYjNDM7ICAgIGV4aXQgMQomIzQzO2ZpCiYjNDM7CiYjNDM7IyAzLiBSdW4gaGVscGVyIHRvIG1hcCA0TUIsIGFsbG9jYXRlIDJNQiwgYW5kIGNsb3NlLgomIzQzOyMgVGhpcyBjcmVhdGVzIDIgcmVzZXJ2YXRpb25zLCBjb25zdW1lcyAxIChieSBhbGxvY2F0aW5nIFBhZ2UgMCkuCiYjNDM7IyBUaGUgdW5hbGxvY2F0ZWQgUGFnZSAxIHJlc2VydmF0aW9uIHJlbWFpbnMgYWN0aXZlIGluIHRoZSBpbm9kZSYjMzk7cyByZXN2X21hcC4KJiM0MztlY2hvICYjMzQ7UnVubmluZyBoZWxwZXIuLi4mIzM0OwomIzQzOy4vc3VicG9vbF9zaGFyZWRfbGVhayAmIzM0OyRGSUxFX1BBVEgmIzM0OwomIzQzOwomIzQzO3Jlc3ZfYWZ0ZXJfaGVscGVyPSQoY2F0IC9zeXMva2VybmVsL21tL2h1Z2VwYWdlcy9odWdlcGFnZXMtMjA0OGtCL3Jlc3ZfaHVnZXBhZ2VzKQomIzQzO2VjaG8gJiMzNDtyZXN2X2h1Z2VwYWdlcyBhZnRlciBoZWxwZXIgKHNob3VsZCBiZSAxKTogJHJlc3ZfYWZ0ZXJfaGVscGVyJiMzNDsKJiM0MzsjIFBhZ2UgMCBpcyBhbGxvY2F0ZWQgKG5vIGxvbmdlciByZXNlcnZlZCkuIFBhZ2UgMSBpcyByZXNlcnZlZC4KJiM0MzsjIFNvIHJlc3ZfaHVnZXBhZ2VzIHNob3VsZCBiZSAxLgomIzQzO2lmIFsgJiMzNDskcmVzdl9hZnRlcl9oZWxwZXImIzM0OyAtbmUgMSBdOyB0aGVuCiYjNDM7ICAgIGVjaG8gJiMzNDtFUlJPUjogcmVzdl9odWdlcGFnZXMgaXMgbm90IDEgYWZ0ZXIgaGVscGVyIHJ1biEmIzM0OwomIzQzOyAgICBleGl0IDEKJiM0MztmaQomIzQzOwomIzQzOyMgNC4gVHJ1bmNhdGUgZmlsZSB0byAyTUIgKHJlbGVhc2VzIFBhZ2UgMSByZXNlcnZhdGlvbikKJiM0MztlY2hvICYjMzQ7VHJ1bmNhdGluZyBmaWxlIHRvIDJNQiAocmVsZWFzaW5nIDEgcGFnZSByZXNlcnZhdGlvbikuLi4mIzM0OwomIzQzO3RydW5jYXRlIC1zIDJNICYjMzQ7JEZJTEVfUEFUSCYjMzQ7CiYjNDM7CiYjNDM7IyBDaGVjayByZXN2X2h1Z2VwYWdlcyBhZnRlciB0cnVuY2F0ZS4KJiM0MzsjIFNpbmNlIFBhZ2UgMCBpcyBzdGlsbCBhbGxvY2F0ZWQgKGFuZCBpbiBwYWdlIGNhY2hlKSwgYW5kIHNhdGlzZmllcyB0aGUKJiM0MzsjIG1pbl9zaXplPTJNIGd1YXJhbnRlZSwgd2Ugc2hvdWxkIGhhdmUgMCByZXNlcnZhdGlvbnMgcmVtYWluaW5nLgomIzQzOyMgSWYgdGhlIGJ1ZyBpcyBwcmVzZW50LCB0aGUgdHJ1bmNhdGUgcGF0aCB3aWxsIGluY29ycmVjdGx5IHJlc3RvcmUgdGhlCiYjNDM7IyByZXNlcnZhdGlvbiB0byB0aGUgc3VicG9vbCBhbmQgc2tpcCByZWxlYXNpbmcgaXQgZ2xvYmFsbHksIGxlYXZpbmcKJiM0MzsjIHJlc3ZfaHVnZXBhZ2VzIGF0IDEuCiYjNDM7ZmluYWxfcmVzdj0kKGNhdCAvc3lzL2tlcm5lbC9tbS9odWdlcGFnZXMvaHVnZXBhZ2VzLTIwNDhrQi9yZXN2X2h1Z2VwYWdlcykKJiM0MztlY2hvICYjMzQ7RmluYWwgcmVzdl9odWdlcGFnZXMgKGFmdGVyIDJNQiB0cnVuY2F0ZSk6ICRmaW5hbF9yZXN2JiMzNDsKJiM0MzsKJiM0MztpZiBbICYjMzQ7JGZpbmFsX3Jlc3YmIzM0OyAtZXEgMSBdOyB0aGVuCiYjNDM7ICAgIGVjaG8gJiMzNDtSRVNVTFQ6IExFQUsgREVURUNURUQgKEZBSUwpJiMzNDsKJiM0MzsgICAgZXhpdCAxCiYjNDM7ZWxpZiBbICYjMzQ7JGZpbmFsX3Jlc3YmIzM0OyAtZXEgMCBdOyB0aGVuCiYjNDM7ICAgIGVjaG8gJiMzNDtSRVNVTFQ6IE5PIExFQUsgKFBBU1MpJiMzNDsKJiM0MzsgICAgZXhpdCAwCiYjNDM7ZWxzZQomIzQzOyAgICBlY2hvICYjMzQ7UkVTVUxUOiBVTkVYUEVDVEVEIFNUQVRFICgkZmluYWxfcmVzdikmIzM0OwomIzQzOyAgICBleGl0IDIKJiM0MztmaQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9odWdldGxiX3N1YnBvb2wvLmdpdGlnbm9yZSBiL3Rvb2xzL3Rlc3RpbmcvaHVnZXRsYl9zdWJwb29sLy5naXRpZ25vcmUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAuLjczNDhjMmM3MmYxZTExCi0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9odWdldGxiX3N1YnBvb2wvLmdpdGlnbm9yZQpAQCAtMCwwICYjNDM7MSBAQAomIzQzO3Rlc3Rfc3VicG9vbApkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9odWdldGxiX3N1YnBvb2wvTWFrZWZpbGUgYi90b29scy90ZXN0aW5nL2h1Z2V0bGJfc3VicG9vbC9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMC4uMWJkYjdlMjYzNTYxNDEKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL2h1Z2V0bGJfc3VicG9vbC9NYWtlZmlsZQpAQCAtMCwwICYjNDM7MSwxOCBAQAomIzQzOyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKJiM0MzsuUEhPTlk6IGFsbCBjbGVhbiB0ZXN0CiYjNDM7CiYjNDM7Q0MgPSBnY2MKJiM0MztDRkxBR1MgPSAtV2FsbCAtTzIgLUkuLi9zaGFyZWQgLUkuIC1JLi4vLi4vaW5jbHVkZSAtSS4uLy4uL2FyY2gveDg2L2luY2x1ZGUgLXB0aHJlYWQKJiM0MztLRVJORUxfU1VCUE9PTF9IID0gLi4vLi4vLi4vbW0vaHVnZXRsYl9zdWJwb29sLmgKJiM0MztLRVJORUxfU1VCUE9PTF9DID0gLi4vLi4vLi4vbW0vaHVnZXRsYl9zdWJwb29sLmMKJiM0MzsKJiM0MzthbGw6IHRlc3QKJiM0MzsKJiM0Mzt0ZXN0X3N1YnBvb2w6IHRlc3Rfc3VicG9vbC5jICQoS0VSTkVMX1NVQlBPT0xfQykgJChLRVJORUxfU1VCUE9PTF9IKQomIzQzOwkkKENDKSAkKENGTEFHUykgdGVzdF9zdWJwb29sLmMgLW8gdGVzdF9zdWJwb29sCiYjNDM7CiYjNDM7dGVzdDogdGVzdF9zdWJwb29sCiYjNDM7CS4vdGVzdF9zdWJwb29sCiYjNDM7CiYjNDM7Y2xlYW46CiYjNDM7CXJtIC1mIHRlc3Rfc3VicG9vbApkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9odWdldGxiX3N1YnBvb2wvdGVzdF9zdWJwb29sLmMgYi90b29scy90ZXN0aW5nL2h1Z2V0bGJfc3VicG9vbC90ZXN0X3N1YnBvb2wuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMC4uNzg5MDAyNzRjYzI2NDcKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL2h1Z2V0bGJfc3VicG9vbC90ZXN0X3N1YnBvb2wuYwpAQCAtMCwwICYjNDM7MSw0MDAgQEAKJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAomIzQzOyNpbmNsdWRlICZsdDthc3NlcnQuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7c3RkbGliLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3R5cGVzLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3NsYWIuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvYnVnLmgmZ3Q7CiYjNDM7CiYjNDM7LyogTW9ja2VkIFVzZXJzcGFjZSBpbXBsZW1lbnRhdGlvbiBmb3IgS2VybmVsIFN1YnBvb2wgYWxsb2NhdGlvbiBkZXBlbmRlbmNpZXMgKi8KJiM0MztzdHJ1Y3QgaHN0YXRlIHsKJiM0MzsJaW50IGR1bW15OwomIzQzO307CiYjNDM7CiYjNDM7I3VuZGVmIGt6YWxsb2Nfb2JqCiYjNDM7I3VuZGVmIGt6YWxsb2Nfb2JqcwomIzQzOyNkZWZpbmUga3phbGxvY19vYmooUCwgLi4uKSBtYWxsb2Moc2l6ZW9mKFApKQomIzQzOyNkZWZpbmUga3phbGxvY19vYmpzKFAsIENPVU5ULCAuLi4pIG1hbGxvYyhzaXplb2YoUCkgKiAoQ09VTlQpKQomIzQzOwomIzQzOyNkZWZpbmUga2ZyZWUgZnJlZQomIzQzOyNkZWZpbmUga21hbGxvYyBtYWxsb2MKJiM0MzsKJiM0MzsjZGVmaW5lIGh1Z2VfcGFnZV9zaGlmdChoKSAoMjEgJiM0MzsgKDAgKiAoKHVuc2lnbmVkIGxvbmcpKGgpICZhbXA7IDApKSkKJiM0MzsjZGVmaW5lIGh1Z2VfcGFnZV9zaXplKGgpICgxVUwgJmx0OyZsdDsgaHVnZV9wYWdlX3NoaWZ0KGgpKQomIzQzOwomIzQzO3N0YXRpYyBib29sIGh1Z2V0bGJfYWNjdF9tZW1vcnlfY2FsbGVkOwomIzQzO3N0YXRpYyBzdHJ1Y3QgaHN0YXRlICpodWdldGxiX2FjY3RfbWVtb3J5X2g7CiYjNDM7c3RhdGljIGxvbmcgaHVnZXRsYl9hY2N0X21lbW9yeV9kZWx0YTsKJiM0MzsKJiM0MztzdGF0aWMgaW50IGh1Z2V0bGJfYWNjdF9tZW1vcnkoc3RydWN0IGhzdGF0ZSAqaCwgbG9uZyBkZWx0YSkKJiM0Mzt7CiYjNDM7CWh1Z2V0bGJfYWNjdF9tZW1vcnlfY2FsbGVkID0gdHJ1ZTsKJiM0MzsJaHVnZXRsYl9hY2N0X21lbW9yeV9oID0gaDsKJiM0MzsJaHVnZXRsYl9hY2N0X21lbW9yeV9kZWx0YSA9IGRlbHRhOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgcmVzZXRfaHVnZXRsYl9hY2N0X21lbW9yeV9tb2NrKHZvaWQpCiYjNDM7ewomIzQzOwlodWdldGxiX2FjY3RfbWVtb3J5X2NhbGxlZCA9IGZhbHNlOwomIzQzOwlodWdldGxiX2FjY3RfbWVtb3J5X2ggPSBOVUxMOwomIzQzOwlodWdldGxiX2FjY3RfbWVtb3J5X2RlbHRhID0gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgYXNzZXJ0X2h1Z2V0bGJfYWNjdF9tZW1vcnlfY2FsbGVkKHN0cnVjdCBoc3RhdGUgKmgsIGxvbmcgZGVsdGEpCiYjNDM7ewomIzQzOwlhc3NlcnQoaHVnZXRsYl9hY2N0X21lbW9yeV9jYWxsZWQpOwomIzQzOwlhc3NlcnQoaHVnZXRsYl9hY2N0X21lbW9yeV9oID09IGgpOwomIzQzOwlhc3NlcnQoaHVnZXRsYl9hY2N0X21lbW9yeV9kZWx0YSA9PSBkZWx0YSk7CiYjNDM7CiYjNDM7CXJlc2V0X2h1Z2V0bGJfYWNjdF9tZW1vcnlfbW9jaygpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBhc3NlcnRfaHVnZXRsYl9hY2N0X21lbW9yeV9ub3RfY2FsbGVkKHZvaWQpCiYjNDM7ewomIzQzOwlhc3NlcnQoIWh1Z2V0bGJfYWNjdF9tZW1vcnlfY2FsbGVkKTsKJiM0Mzt9CiYjNDM7CiYjNDM7I2luY2x1ZGUgJiMzNDsuLi8uLi8uLi9tbS9odWdldGxiX3N1YnBvb2wuaCYjMzQ7CiYjNDM7I2luY2x1ZGUgJiMzNDsuLi8uLi8uLi9tbS9odWdldGxiX3N1YnBvb2wuYyYjMzQ7CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgdGVzdF9zdWJwb29sX25ld19wdXRfbm9fbWluX2xpbWl0KHZvaWQpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgaHN0YXRlIGg7CiYjNDM7CXN0cnVjdCBodWdlcGFnZV9zdWJwb29sICpzcG9vbDsKJiM0MzsKJiM0MzsJc3Bvb2wgPSBodWdlcGFnZV9uZXdfc3VicG9vbCgmYW1wO2gsIDEwLCAtMSk7CiYjNDM7CWFzc2VydChzcG9vbCAhPSBOVUxMKTsKJiM0MzsJYXNzZXJ0KHNwb29sLSZndDttYXhfaHBhZ2VzID09IDEwKTsKJiM0MzsJYXNzZXJ0KHNwb29sLSZndDttaW5faHBhZ2VzID09IC0xKTsKJiM0MzsJYXNzZXJ0KHNwb29sLSZndDtyc3ZfaHBhZ2VzID09IC0xKTsKJiM0MzsJYXNzZXJ0KHNwb29sLSZndDtjb3VudCA9PSAxKTsKJiM0MzsJYXNzZXJ0X2h1Z2V0bGJfYWNjdF9tZW1vcnlfbm90X2NhbGxlZCgpOwomIzQzOwomIzQzOwlodWdlcGFnZV9wdXRfc3VicG9vbChzcG9vbCk7CiYjNDM7CWFzc2VydF9odWdldGxiX2FjY3RfbWVtb3J5X25vdF9jYWxsZWQoKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgdGVzdF9zdWJwb29sX25ld19wdXRfd2l0aF9taW5fbGltaXQodm9pZCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBoc3RhdGUgaDsKJiM0MzsJc3RydWN0IGh1Z2VwYWdlX3N1YnBvb2wgKnNwb29sOwomIzQzOwomIzQzOwlzcG9vbCA9IGh1Z2VwYWdlX25ld19zdWJwb29sKCZhbXA7aCwgMjAsIDUpOwomIzQzOwlhc3NlcnQoc3Bvb2wgIT0gTlVMTCk7CiYjNDM7CWFzc2VydChzcG9vbC0mZ3Q7bWF4X2hwYWdlcyA9PSAyMCk7CiYjNDM7CWFzc2VydChzcG9vbC0mZ3Q7bWluX2hwYWdlcyA9PSA1KTsKJiM0MzsJYXNzZXJ0KHNwb29sLSZndDtyc3ZfaHBhZ2VzID09IDUpOwomIzQzOwlhc3NlcnQoc3Bvb2wtJmd0O2NvdW50ID09IDEpOwomIzQzOwlhc3NlcnRfaHVnZXRsYl9hY2N0X21lbW9yeV9jYWxsZWQoJmFtcDtoLCA1KTsKJiM0MzsKJiM0MzsJaHVnZXBhZ2VfcHV0X3N1YnBvb2woc3Bvb2wpOwomIzQzOwlhc3NlcnRfaHVnZXRsYl9hY2N0X21lbW9yeV9jYWxsZWQoJmFtcDtoLCAtNSk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIHRlc3Rfc3VicG9vbF9nZXRfcGFnZXNfYmVsb3dfbWluKHZvaWQpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgaHN0YXRlIGg7CiYjNDM7CXN0cnVjdCBodWdlcGFnZV9zdWJwb29sICpzcG9vbDsKJiM0MzsJbG9uZyByZXQ7CiYjNDM7CiYjNDM7CS8qIExldCYjMzk7cyBpbml0aWFsaXplOiBtaW5faHBhZ2VzID0gMTAsIHVzZWRfaHBhZ2VzID0gOSwgcnN2X2hwYWdlcyA9IDEgKi8KJiM0MzsJc3Bvb2wgPSBodWdlcGFnZV9uZXdfc3VicG9vbCgmYW1wO2gsIC0xLCAxMCk7CiYjNDM7CWFzc2VydF9odWdldGxiX2FjY3RfbWVtb3J5X2NhbGxlZCgmYW1wO2gsIDEwKTsKJiM0MzsKJiM0MzsJcmV0ID0gaHVnZXBhZ2Vfc3VicG9vbF9nZXRfcGFnZXMoc3Bvb2wsIDkpOwomIzQzOwlhc3NlcnQocmV0ID09IDApOwomIzQzOwlhc3NlcnQoc3Bvb2wtJmd0O3VzZWRfaHBhZ2VzID09IDkpOwomIzQzOwlhc3NlcnQoc3Bvb2wtJmd0O3Jzdl9ocGFnZXMgPT0gMSk7CiYjNDM7CiYjNDM7CS8qIEludm9rZSBHZXQgKENvbnN1bWVzIHRoZSByZW1haW5pbmcgMSBzdWJwb29sIHJlc2VydmUhKSAqLwomIzQzOwlyZXQgPSBodWdlcGFnZV9zdWJwb29sX2dldF9wYWdlcyhzcG9vbCwgMSk7CiYjNDM7CWFzc2VydChyZXQgPT0gMCk7IC8qIENvdmVyZWQgYnkgc3VicG9vbCByZXNlcnZlISAqLwomIzQzOwlhc3NlcnQoc3Bvb2wtJmd0O3VzZWRfaHBhZ2VzID09IDEwKTsKJiM0MzsJYXNzZXJ0KHNwb29sLSZndDtyc3ZfaHBhZ2VzID09IDApOwomIzQzOwomIzQzOwkvKiBJbnZva2UgUHV0IChSZXBsZW5pc2hlcyB0aGUgc3VicG9vbCByZXNlcnZlISkgKi8KJiM0MzsJcmV0ID0gaHVnZXBhZ2Vfc3VicG9vbF9wdXRfcGFnZXMoc3Bvb2wsIDEpOwomIzQzOwlhc3NlcnQocmV0ID09IDApOyAvKiBLZXB0IGJ5IHN1YnBvb2wgcmVzZXJ2ZSEgKi8KJiM0MzsJYXNzZXJ0KHNwb29sLSZndDt1c2VkX2hwYWdlcyA9PSA5KTsKJiM0MzsJYXNzZXJ0KHNwb29sLSZndDtyc3ZfaHBhZ2VzID09IDEpOwomIzQzOwomIzQzOwkvKiBDbGVhbnVwOiBSZXR1cm4gdXNlZF9ocGFnZXMgdG8gMCBzbyB0aGUgc3VicG9vbCBmcmVlcyBzeW1tZXRyaWNhbGx5ISAqLwomIzQzOwlodWdlcGFnZV9zdWJwb29sX3B1dF9wYWdlcyhzcG9vbCwgOSk7CiYjNDM7CWh1Z2VwYWdlX3B1dF9zdWJwb29sKHNwb29sKTsKJiM0MzsJYXNzZXJ0X2h1Z2V0bGJfYWNjdF9tZW1vcnlfY2FsbGVkKCZhbXA7aCwgLTEwKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgdGVzdF9zdWJwb29sX2dldF9wYWdlc19jcm9zc2luZ19taW4odm9pZCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBoc3RhdGUgaDsKJiM0MzsJc3RydWN0IGh1Z2VwYWdlX3N1YnBvb2wgKnNwb29sOwomIzQzOwlsb25nIHJldDsKJiM0MzsKJiM0MzsJLyogTGV0JiMzOTtzIGluaXRpYWxpemU6IG1pbl9ocGFnZXMgPSAxMCwgdXNlZF9ocGFnZXMgPSAxMCwgcnN2X2hwYWdlcyA9IDAgKi8KJiM0MzsJc3Bvb2wgPSBodWdlcGFnZV9uZXdfc3VicG9vbCgmYW1wO2gsIC0xLCAxMCk7CiYjNDM7CWFzc2VydF9odWdldGxiX2FjY3RfbWVtb3J5X2NhbGxlZCgmYW1wO2gsIDEwKTsKJiM0MzsKJiM0MzsJaHVnZXBhZ2Vfc3VicG9vbF9nZXRfcGFnZXMoc3Bvb2wsIDEwKTsKJiM0MzsJYXNzZXJ0KHNwb29sLSZndDt1c2VkX2hwYWdlcyA9PSAxMCk7CiYjNDM7CWFzc2VydChzcG9vbC0mZ3Q7cnN2X2hwYWdlcyA9PSAwKTsKJiM0MzsKJiM0MzsJLyogSW52b2tlIEdldCAoVHJpZ2dlcnMgYSByZXF1ZXN0IGZvciBhIEdsb2JhbCBCdWRkeS9TdXJwbHVzIHBhZ2UhKSAqLwomIzQzOwlyZXQgPSBodWdlcGFnZV9zdWJwb29sX2dldF9wYWdlcyhzcG9vbCwgMSk7CiYjNDM7CWFzc2VydChyZXQgPT0gMSk7IC8qIFJlcXVpcmVzIGdsb2JhbCBwYWdlISAqLwomIzQzOwlhc3NlcnQoc3Bvb2wtJmd0O3VzZWRfaHBhZ2VzID09IDExKTsKJiM0MzsJYXNzZXJ0KHNwb29sLSZndDtyc3ZfaHBhZ2VzID09IDApOwomIzQzOwomIzQzOwkvKiBJbnZva2UgUHV0IChBYm92ZSBtaW5pbXVtLCBzbyBpdCByZWxlYXNlcyB0aGUgcGFnZSB0byB0aGUgR2xvYmFsIFBvb2whKSAqLwomIzQzOwlyZXQgPSBodWdlcGFnZV9zdWJwb29sX3B1dF9wYWdlcyhzcG9vbCwgMSk7CiYjNDM7CWFzc2VydChyZXQgPT0gMSk7IC8qIERyb3BwZWQgdG8gZ2xvYmFsIHBvb2whICovCiYjNDM7CWFzc2VydChzcG9vbC0mZ3Q7dXNlZF9ocGFnZXMgPT0gMTApOwomIzQzOwlhc3NlcnQoc3Bvb2wtJmd0O3Jzdl9ocGFnZXMgPT0gMCk7CiYjNDM7CiYjNDM7CS8qIENsZWFudXAgKi8KJiM0MzsJaHVnZXBhZ2Vfc3VicG9vbF9wdXRfcGFnZXMoc3Bvb2wsIDEwKTsKJiM0MzsJaHVnZXBhZ2VfcHV0X3N1YnBvb2woc3Bvb2wpOwomIzQzOwlhc3NlcnRfaHVnZXRsYl9hY2N0X21lbW9yeV9jYWxsZWQoJmFtcDtoLCAtMTApOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCB0ZXN0X3N1YnBvb2xfZ2V0X3BhZ2VzX2Nyb3NzaW5nX21pbl9tdWx0aSh2b2lkKQomIzQzO3sKJiM0MzsJc3RydWN0IGhzdGF0ZSBoOwomIzQzOwlzdHJ1Y3QgaHVnZXBhZ2Vfc3VicG9vbCAqc3Bvb2w7CiYjNDM7CWxvbmcgcmV0OwomIzQzOwomIzQzOwkvKiBTY2VuYXJpbyAxOiBDcm9zc2luZyBlbnRpcmVseSBpbnRvIHN1cnBsdXMgdGVycml0b3J5IGJ5IGEgZGVsdGEgJmd0OyAxICovCiYjNDM7CS8qIExldCYjMzk7cyBpbml0aWFsaXplOiBtaW5faHBhZ2VzID0gMTAsIHVzZWRfaHBhZ2VzID0gOCwgcnN2X2hwYWdlcyA9IDIgKi8KJiM0MzsJc3Bvb2wgPSBodWdlcGFnZV9uZXdfc3VicG9vbCgmYW1wO2gsIC0xLCAxMCk7CiYjNDM7CWFzc2VydF9odWdldGxiX2FjY3RfbWVtb3J5X2NhbGxlZCgmYW1wO2gsIDEwKTsKJiM0MzsKJiM0MzsJcmV0ID0gaHVnZXBhZ2Vfc3VicG9vbF9nZXRfcGFnZXMoc3Bvb2wsIDgpOwomIzQzOwlhc3NlcnQocmV0ID09IDApOwomIzQzOwlhc3NlcnQoc3Bvb2wtJmd0O3VzZWRfaHBhZ2VzID09IDgpOwomIzQzOwlhc3NlcnQoc3Bvb2wtJmd0O3Jzdl9ocGFnZXMgPT0gMik7CiYjNDM7CiYjNDM7CS8qIEludm9rZSBHZXQgd2l0aCBkZWx0YSA9IDUgKENyb3NzZXMgbWluIGxpbWl0IG9mIDEwIHVwIHRvIDEzKSAqLwomIzQzOwlyZXQgPSBodWdlcGFnZV9zdWJwb29sX2dldF9wYWdlcyhzcG9vbCwgNSk7CiYjNDM7CWFzc2VydChyZXQgPT0gMyk7IC8qICg4ICYjNDM7IDUpIC0gMTAgPSAzIGdsb2JhbCBwYWdlcyByZXF1aXJlZCEgKi8KJiM0MzsJYXNzZXJ0KHNwb29sLSZndDt1c2VkX2hwYWdlcyA9PSAxMyk7CiYjNDM7CWFzc2VydChzcG9vbC0mZ3Q7cnN2X2hwYWdlcyA9PSAwKTsKJiM0MzsKJiM0MzsJLyogSW52b2tlIFB1dCB3aXRoIGRlbHRhID0gNSAoRHJvcHMgZnJvbSAxMyBkb3duIHRvIDgpICovCiYjNDM7CXJldCA9IGh1Z2VwYWdlX3N1YnBvb2xfcHV0X3BhZ2VzKHNwb29sLCA1KTsKJiM0MzsJYXNzZXJ0KHJldCA9PSAzKTsgLyogMyBzdXJwbHVzIHBhZ2VzIHJlbGVhc2VkIHRvIHRoZSBnbG9iYWwgcG9vbCEgKi8KJiM0MzsJYXNzZXJ0KHNwb29sLSZndDt1c2VkX2hwYWdlcyA9PSA4KTsKJiM0MzsJYXNzZXJ0KHNwb29sLSZndDtyc3ZfaHBhZ2VzID09IDIpOyAvKiAyIHN1YnBvb2wgcmVzZXJ2ZXMgcGVyZmVjdGx5IHJlc3RvcmVkISAqLwomIzQzOwomIzQzOwkvKiBTY2VuYXJpbyAyOiBMYW5kaW5nIGV4YWN0bHkgb24gdGhlIG1pbl9ocGFnZXMgYm91bmRhcnkgd2l0aCBkZWx0YSAmZ3Q7IDEgKi8KJiM0MzsJcmV0ID0gaHVnZXBhZ2Vfc3VicG9vbF9nZXRfcGFnZXMoc3Bvb2wsIDIpOwomIzQzOwlhc3NlcnQocmV0ID09IDApOyAvKiBQZXJmZWN0bHkgY292ZXJlZCBieSByZW1haW5pbmcgMiBzdWJwb29sIHJlc2VydmVzISAqLwomIzQzOwlhc3NlcnQoc3Bvb2wtJmd0O3VzZWRfaHBhZ2VzID09IDEwKTsKJiM0MzsJYXNzZXJ0KHNwb29sLSZndDtyc3ZfaHBhZ2VzID09IDApOwomIzQzOwomIzQzOwlyZXQgPSBodWdlcGFnZV9zdWJwb29sX3B1dF9wYWdlcyhzcG9vbCwgMik7CiYjNDM7CWFzc2VydChyZXQgPT0gMCk7IC8qIFN3YWxsb3dlZCBwZXJmZWN0bHkgdG8gcmVwbGVuaXNoIHRoZSAyIHN1YnBvb2wgcmVzZXJ2ZXMhICovCiYjNDM7CWFzc2VydChzcG9vbC0mZ3Q7dXNlZF9ocGFnZXMgPT0gOCk7CiYjNDM7CWFzc2VydChzcG9vbC0mZ3Q7cnN2X2hwYWdlcyA9PSAyKTsKJiM0MzsKJiM0MzsJLyogQ2xlYW51cCAqLwomIzQzOwlodWdlcGFnZV9zdWJwb29sX3B1dF9wYWdlcyhzcG9vbCwgOCk7CiYjNDM7CWh1Z2VwYWdlX3B1dF9zdWJwb29sKHNwb29sKTsKJiM0MzsJYXNzZXJ0X2h1Z2V0bGJfYWNjdF9tZW1vcnlfY2FsbGVkKCZhbXA7aCwgLTEwKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgdGVzdF9zdWJwb29sX2dldF9wYWdlc19tYXhfbGltaXQodm9pZCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBoc3RhdGUgaDsKJiM0MzsJc3RydWN0IGh1Z2VwYWdlX3N1YnBvb2wgKnNwb29sOwomIzQzOwlsb25nIHJldDsKJiM0MzsKJiM0MzsJc3Bvb2wgPSBodWdlcGFnZV9uZXdfc3VicG9vbCgmYW1wO2gsIDUsIC0xKTsKJiM0MzsJYXNzZXJ0X2h1Z2V0bGJfYWNjdF9tZW1vcnlfbm90X2NhbGxlZCgpOwomIzQzOwomIzQzOwlyZXQgPSBodWdlcGFnZV9zdWJwb29sX2dldF9wYWdlcyhzcG9vbCwgNSk7CiYjNDM7CWFzc2VydChyZXQgPT0gNSk7CiYjNDM7CWFzc2VydChzcG9vbC0mZ3Q7dXNlZF9ocGFnZXMgPT0gNSk7CiYjNDM7CWFzc2VydChzcG9vbC0mZ3Q7cnN2X2hwYWdlcyA9PSAtMSk7CiYjNDM7CiYjNDM7CS8qIEludm9rZSBHZXQgKFNob3VsZCB0cmlnZ2VyIC1FTk9NRU0gZHVlIHRvIG1heCBjYXAgbGltaXQgZXhjZWVkZWQhKSAqLwomIzQzOwlyZXQgPSBodWdlcGFnZV9zdWJwb29sX2dldF9wYWdlcyhzcG9vbCwgMSk7CiYjNDM7CWFzc2VydChyZXQgPT0gLUVOT01FTSk7CiYjNDM7CWFzc2VydChzcG9vbC0mZ3Q7dXNlZF9ocGFnZXMgPT0gNSk7IC8qIFVuY2hhbmdlZCAqLwomIzQzOwomIzQzOwkvKiBDbGVhbnVwICovCiYjNDM7CWh1Z2VwYWdlX3N1YnBvb2xfcHV0X3BhZ2VzKHNwb29sLCA1KTsKJiM0MzsJaHVnZXBhZ2VfcHV0X3N1YnBvb2woc3Bvb2wpOwomIzQzOwlhc3NlcnRfaHVnZXRsYl9hY2N0X21lbW9yeV9ub3RfY2FsbGVkKCk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIHRlc3Rfc3VicG9vbF9nZXRfcGFnZXNfbm9fbGltaXRzKHZvaWQpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgaHN0YXRlIGg7CiYjNDM7CXN0cnVjdCBodWdlcGFnZV9zdWJwb29sICpzcG9vbDsKJiM0MzsJbG9uZyByZXQ7CiYjNDM7CiYjNDM7CXNwb29sID0gaHVnZXBhZ2VfbmV3X3N1YnBvb2woJmFtcDtoLCAtMSwgLTEpOwomIzQzOwlhc3NlcnRfaHVnZXRsYl9hY2N0X21lbW9yeV9ub3RfY2FsbGVkKCk7CiYjNDM7CiYjNDM7CWh1Z2VwYWdlX3N1YnBvb2xfZ2V0X3BhZ2VzKHNwb29sLCA1KTsKJiM0MzsJYXNzZXJ0KHNwb29sLSZndDt1c2VkX2hwYWdlcyA9PSA1KTsKJiM0MzsKJiM0MzsJLyogSW52b2tlIEdldCAoU3VycGx1cyBHbG9iYWwgVGVycml0b3J5KSAqLwomIzQzOwlyZXQgPSBodWdlcGFnZV9zdWJwb29sX2dldF9wYWdlcyhzcG9vbCwgMik7CiYjNDM7CWFzc2VydChyZXQgPT0gMik7CiYjNDM7CWFzc2VydChzcG9vbC0mZ3Q7dXNlZF9ocGFnZXMgPT0gNyk7CiYjNDM7CiYjNDM7CS8qIEludm9rZSBQdXQgKi8KJiM0MzsJcmV0ID0gaHVnZXBhZ2Vfc3VicG9vbF9wdXRfcGFnZXMoc3Bvb2wsIDIpOwomIzQzOwlhc3NlcnQocmV0ID09IDIpOwomIzQzOwlhc3NlcnQoc3Bvb2wtJmd0O3VzZWRfaHBhZ2VzID09IDUpOwomIzQzOwomIzQzOwkvKiBDbGVhbnVwICovCiYjNDM7CWh1Z2VwYWdlX3N1YnBvb2xfcHV0X3BhZ2VzKHNwb29sLCA1KTsKJiM0MzsJaHVnZXBhZ2VfcHV0X3N1YnBvb2woc3Bvb2wpOwomIzQzOwlhc3NlcnRfaHVnZXRsYl9hY2N0X21lbW9yeV9ub3RfY2FsbGVkKCk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIHRlc3Rfc3VicG9vbF9mcmVlX2hwYWdlcyh2b2lkKQomIzQzO3sKJiM0MzsJc3RydWN0IGhzdGF0ZSBoOwomIzQzOwlzdHJ1Y3QgaHVnZXBhZ2Vfc3VicG9vbCAqc3Bvb2w7CiYjNDM7CiYjNDM7CS8qIFRlc3QgdGhhdCBmcmVlX2hwYWdlcyB3aXRoIE5PIG1pbl9zaXplIHdvcmtzIHBlcmZlY3RseSAqLwomIzQzOwlzcG9vbCA9IGh1Z2VwYWdlX25ld19zdWJwb29sKCZhbXA7aCwgMTUsIC0xKTsKJiM0MzsJaHVnZXBhZ2Vfc3VicG9vbF9nZXRfcGFnZXMoc3Bvb2wsIDMpOwomIzQzOwlhc3NlcnQoaHVnZXBhZ2Vfc3VicG9vbF9mcmVlX2hwYWdlcyhzcG9vbCkgPT0gMTIpOwomIzQzOwlodWdlcGFnZV9zdWJwb29sX3B1dF9wYWdlcyhzcG9vbCwgMyk7CiYjNDM7CWh1Z2VwYWdlX3B1dF9zdWJwb29sKHNwb29sKTsKJiM0MzsKJiM0MzsJLyogVGVzdCB0aGF0IGZyZWVfaHBhZ2VzIHdpdGggYSBtaW5fc2l6ZSBjb25maWd1cmVkIGlzIENPTVBMRVRFTFkgVU5BRkZFQ1RFRCBieSBpdCAqLwomIzQzOwlzcG9vbCA9IGh1Z2VwYWdlX25ld19zdWJwb29sKCZhbXA7aCwgMTUsIDUpOwomIzQzOwlhc3NlcnRfaHVnZXRsYl9hY2N0X21lbW9yeV9jYWxsZWQoJmFtcDtoLCA1KTsKJiM0MzsJaHVnZXBhZ2Vfc3VicG9vbF9nZXRfcGFnZXMoc3Bvb2wsIDMpOwomIzQzOwlhc3NlcnQoaHVnZXBhZ2Vfc3VicG9vbF9mcmVlX2hwYWdlcyhzcG9vbCkgPT0gMTIpOyAvKiBTaG91bGQgc3RpbGwgYmUgMTUgLSAzID0gMTIhICovCiYjNDM7CWh1Z2VwYWdlX3N1YnBvb2xfcHV0X3BhZ2VzKHNwb29sLCAzKTsKJiM0MzsJaHVnZXBhZ2VfcHV0X3N1YnBvb2woc3Bvb2wpOwomIzQzOwlhc3NlcnRfaHVnZXRsYl9hY2N0X21lbW9yeV9jYWxsZWQoJmFtcDtoLCAtNSk7CiYjNDM7CiYjNDM7CXNwb29sID0gaHVnZXBhZ2VfbmV3X3N1YnBvb2woJmFtcDtoLCAtMSwgLTEpOwomIzQzOwlodWdlcGFnZV9zdWJwb29sX2dldF9wYWdlcyhzcG9vbCwgMyk7CiYjNDM7CWFzc2VydChodWdlcGFnZV9zdWJwb29sX2ZyZWVfaHBhZ2VzKHNwb29sKSA9PSAtMSk7CiYjNDM7CWh1Z2VwYWdlX3N1YnBvb2xfcHV0X3BhZ2VzKHNwb29sLCAzKTsKJiM0MzsJaHVnZXBhZ2VfcHV0X3N1YnBvb2woc3Bvb2wpOwomIzQzOwomIzQzOwkvKiBUZXN0IHRoYXQgZnJlZV9ocGFnZXMgd2l0aCBhIG1pbl9zaXplIGNvbmZpZ3VyZWQgYW5kIE5PIG1heCBzaXplIHJldHVybnMgLTEgKi8KJiM0MzsJc3Bvb2wgPSBodWdlcGFnZV9uZXdfc3VicG9vbCgmYW1wO2gsIC0xLCA1KTsKJiM0MzsJYXNzZXJ0X2h1Z2V0bGJfYWNjdF9tZW1vcnlfY2FsbGVkKCZhbXA7aCwgNSk7CiYjNDM7CWh1Z2VwYWdlX3N1YnBvb2xfZ2V0X3BhZ2VzKHNwb29sLCAzKTsKJiM0MzsJYXNzZXJ0KGh1Z2VwYWdlX3N1YnBvb2xfZnJlZV9ocGFnZXMoc3Bvb2wpID09IC0xKTsKJiM0MzsJaHVnZXBhZ2Vfc3VicG9vbF9wdXRfcGFnZXMoc3Bvb2wsIDMpOwomIzQzOwlodWdlcGFnZV9wdXRfc3VicG9vbChzcG9vbCk7CiYjNDM7CWFzc2VydF9odWdldGxiX2FjY3RfbWVtb3J5X2NhbGxlZCgmYW1wO2gsIC01KTsKJiM0MzsKJiM0MzsJc3Bvb2wgPSBodWdlcGFnZV9uZXdfc3VicG9vbCgmYW1wO2gsIDMsIC0xKTsKJiM0MzsJaHVnZXBhZ2Vfc3VicG9vbF9nZXRfcGFnZXMoc3Bvb2wsIDMpOwomIzQzOwlhc3NlcnQoaHVnZXBhZ2Vfc3VicG9vbF9mcmVlX2hwYWdlcyhzcG9vbCkgPT0gMCk7CiYjNDM7CWh1Z2VwYWdlX3N1YnBvb2xfcHV0X3BhZ2VzKHNwb29sLCAzKTsKJiM0MzsJaHVnZXBhZ2VfcHV0X3N1YnBvb2woc3Bvb2wpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCB0ZXN0X3N1YnBvb2xfbWF4X2hwYWdlcyh2b2lkKQomIzQzO3sKJiM0MzsJc3RydWN0IGhzdGF0ZSBoOwomIzQzOwlzdHJ1Y3QgaHVnZXBhZ2Vfc3VicG9vbCAqc3Bvb2w7CiYjNDM7CiYjNDM7CXNwb29sID0gaHVnZXBhZ2VfbmV3X3N1YnBvb2woJmFtcDtoLCAxMjMsIC0xKTsKJiM0MzsJYXNzZXJ0KGh1Z2VwYWdlX3N1YnBvb2xfbWF4X2hwYWdlcyhzcG9vbCkgPT0gMTIzKTsKJiM0MzsJaHVnZXBhZ2VfcHV0X3N1YnBvb2woc3Bvb2wpOwomIzQzOwomIzQzOwkvKiBUZXN0IHRoYXQgbWF4X2hwYWdlcyB3aXRoIGEgbWluX3NpemUgY29uZmlndXJlZCBpcyBDT01QTEVURUxZIFVOQUZGRUNURUQgYnkgaXQgKi8KJiM0MzsJc3Bvb2wgPSBodWdlcGFnZV9uZXdfc3VicG9vbCgmYW1wO2gsIDEyMywgNSk7CiYjNDM7CWFzc2VydF9odWdldGxiX2FjY3RfbWVtb3J5X2NhbGxlZCgmYW1wO2gsIDUpOwomIzQzOwlhc3NlcnQoaHVnZXBhZ2Vfc3VicG9vbF9tYXhfaHBhZ2VzKHNwb29sKSA9PSAxMjMpOwomIzQzOwlodWdlcGFnZV9wdXRfc3VicG9vbChzcG9vbCk7CiYjNDM7CWFzc2VydF9odWdldGxiX2FjY3RfbWVtb3J5X2NhbGxlZCgmYW1wO2gsIC01KTsKJiM0MzsKJiM0MzsJc3Bvb2wgPSBodWdlcGFnZV9uZXdfc3VicG9vbCgmYW1wO2gsIC0xLCAtMSk7CiYjNDM7CWFzc2VydChodWdlcGFnZV9zdWJwb29sX21heF9ocGFnZXMoc3Bvb2wpID09IC0xKTsKJiM0MzsJaHVnZXBhZ2VfcHV0X3N1YnBvb2woc3Bvb2wpOwomIzQzOwomIzQzOwlzcG9vbCA9IGh1Z2VwYWdlX25ld19zdWJwb29sKCZhbXA7aCwgLTEsIDUpOwomIzQzOwlhc3NlcnRfaHVnZXRsYl9hY2N0X21lbW9yeV9jYWxsZWQoJmFtcDtoLCA1KTsKJiM0MzsJYXNzZXJ0KGh1Z2VwYWdlX3N1YnBvb2xfbWF4X2hwYWdlcyhzcG9vbCkgPT0gLTEpOwomIzQzOwlodWdlcGFnZV9wdXRfc3VicG9vbChzcG9vbCk7CiYjNDM7CWFzc2VydF9odWdldGxiX2FjY3RfbWVtb3J5X2NhbGxlZCgmYW1wO2gsIC01KTsKJiM0MzsKJiM0MzsJc3Bvb2wgPSBodWdlcGFnZV9uZXdfc3VicG9vbCgmYW1wO2gsIDAsIC0xKTsKJiM0MzsJYXNzZXJ0KGh1Z2VwYWdlX3N1YnBvb2xfbWF4X2hwYWdlcyhzcG9vbCkgPT0gMCk7CiYjNDM7CWh1Z2VwYWdlX3B1dF9zdWJwb29sKHNwb29sKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgdGVzdF9zdWJwb29sX21heF9zaXplKHZvaWQpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgaHN0YXRlIGg7CiYjNDM7CXN0cnVjdCBodWdlcGFnZV9zdWJwb29sICpzcG9vbDsKJiM0MzsKJiM0MzsJc3Bvb2wgPSBodWdlcGFnZV9uZXdfc3VicG9vbCgmYW1wO2gsIDEwLCAtMSk7CiYjNDM7CWFzc2VydChodWdlcGFnZV9zdWJwb29sX21heF9zaXplKHNwb29sKSA9PSAoMTBVTEwgJmx0OyZsdDsgMjEpKTsKJiM0MzsJaHVnZXBhZ2VfcHV0X3N1YnBvb2woc3Bvb2wpOwomIzQzOwomIzQzOwkvKiBUZXN0IHRoYXQgbWF4X3NpemUgd2l0aCBhIG1pbl9zaXplIGNvbmZpZ3VyZWQgaXMgQ09NUExFVEVMWSBVTkFGRkVDVEVEIGJ5IGl0ICovCiYjNDM7CXNwb29sID0gaHVnZXBhZ2VfbmV3X3N1YnBvb2woJmFtcDtoLCAxMCwgNSk7CiYjNDM7CWFzc2VydF9odWdldGxiX2FjY3RfbWVtb3J5X2NhbGxlZCgmYW1wO2gsIDUpOwomIzQzOwlhc3NlcnQoaHVnZXBhZ2Vfc3VicG9vbF9tYXhfc2l6ZShzcG9vbCkgPT0gKDEwVUxMICZsdDsmbHQ7IDIxKSk7CiYjNDM7CWh1Z2VwYWdlX3B1dF9zdWJwb29sKHNwb29sKTsKJiM0MzsJYXNzZXJ0X2h1Z2V0bGJfYWNjdF9tZW1vcnlfY2FsbGVkKCZhbXA7aCwgLTUpOwomIzQzOwomIzQzOwlzcG9vbCA9IGh1Z2VwYWdlX25ld19zdWJwb29sKCZhbXA7aCwgLTEsIC0xKTsKJiM0MzsJYXNzZXJ0KGh1Z2VwYWdlX3N1YnBvb2xfbWF4X3NpemUoc3Bvb2wpID09IC0xVUxMKTsKJiM0MzsJaHVnZXBhZ2VfcHV0X3N1YnBvb2woc3Bvb2wpOwomIzQzOwomIzQzOwlzcG9vbCA9IGh1Z2VwYWdlX25ld19zdWJwb29sKCZhbXA7aCwgMCwgLTEpOwomIzQzOwlhc3NlcnQoaHVnZXBhZ2Vfc3VicG9vbF9tYXhfc2l6ZShzcG9vbCkgPT0gMFVMTCk7CiYjNDM7CWh1Z2VwYWdlX3B1dF9zdWJwb29sKHNwb29sKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgdGVzdF9zdWJwb29sX21pbl9zaXplKHZvaWQpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgaHN0YXRlIGg7CiYjNDM7CXN0cnVjdCBodWdlcGFnZV9zdWJwb29sICpzcG9vbDsKJiM0MzsKJiM0MzsJc3Bvb2wgPSBodWdlcGFnZV9uZXdfc3VicG9vbCgmYW1wO2gsIC0xLCA1KTsKJiM0MzsJYXNzZXJ0X2h1Z2V0bGJfYWNjdF9tZW1vcnlfY2FsbGVkKCZhbXA7aCwgNSk7CiYjNDM7CWFzc2VydChodWdlcGFnZV9zdWJwb29sX21pbl9zaXplKHNwb29sKSA9PSAoNVVMTCAmbHQ7Jmx0OyAyMSkpOwomIzQzOwlodWdlcGFnZV9wdXRfc3VicG9vbChzcG9vbCk7CiYjNDM7CWFzc2VydF9odWdldGxiX2FjY3RfbWVtb3J5X2NhbGxlZCgmYW1wO2gsIC01KTsKJiM0MzsKJiM0MzsJLyogVGVzdCB0aGF0IG1pbl9zaXplIHdpdGggYSBtYXhfc2l6ZSBjb25maWd1cmVkIGlzIENPTVBMRVRFTFkgVU5BRkZFQ1RFRCBieSBpdCAqLwomIzQzOwlzcG9vbCA9IGh1Z2VwYWdlX25ld19zdWJwb29sKCZhbXA7aCwgMjAsIDUpOwomIzQzOwlhc3NlcnRfaHVnZXRsYl9hY2N0X21lbW9yeV9jYWxsZWQoJmFtcDtoLCA1KTsKJiM0MzsJYXNzZXJ0KGh1Z2VwYWdlX3N1YnBvb2xfbWluX3NpemUoc3Bvb2wpID09ICg1VUxMICZsdDsmbHQ7IDIxKSk7CiYjNDM7CWh1Z2VwYWdlX3B1dF9zdWJwb29sKHNwb29sKTsKJiM0MzsJYXNzZXJ0X2h1Z2V0bGJfYWNjdF9tZW1vcnlfY2FsbGVkKCZhbXA7aCwgLTUpOwomIzQzOwomIzQzOwlzcG9vbCA9IGh1Z2VwYWdlX25ld19zdWJwb29sKCZhbXA7aCwgLTEsIC0xKTsKJiM0MzsJYXNzZXJ0KGh1Z2VwYWdlX3N1YnBvb2xfbWluX3NpemUoc3Bvb2wpID09IC0xVUxMKTsKJiM0MzsJaHVnZXBhZ2VfcHV0X3N1YnBvb2woc3Bvb2wpOwomIzQzOwomIzQzOwlzcG9vbCA9IGh1Z2VwYWdlX25ld19zdWJwb29sKCZhbXA7aCwgLTEsIDApOwomIzQzOwlhc3NlcnRfaHVnZXRsYl9hY2N0X21lbW9yeV9jYWxsZWQoJmFtcDtoLCAwKTsKJiM0MzsJYXNzZXJ0KGh1Z2VwYWdlX3N1YnBvb2xfbWluX3NpemUoc3Bvb2wpID09IDBVTEwpOwomIzQzOwlodWdlcGFnZV9wdXRfc3VicG9vbChzcG9vbCk7CiYjNDM7CWFzc2VydF9odWdldGxiX2FjY3RfbWVtb3J5X2NhbGxlZCgmYW1wO2gsIDApOwomIzQzO30KJiM0MzsKJiM0MztpbnQgbWFpbih2b2lkKQomIzQzO3sKJiM0MzsJdGVzdF9zdWJwb29sX25ld19wdXRfbm9fbWluX2xpbWl0KCk7CiYjNDM7CXRlc3Rfc3VicG9vbF9uZXdfcHV0X3dpdGhfbWluX2xpbWl0KCk7CiYjNDM7CXRlc3Rfc3VicG9vbF9nZXRfcGFnZXNfYmVsb3dfbWluKCk7CiYjNDM7CXRlc3Rfc3VicG9vbF9nZXRfcGFnZXNfY3Jvc3NpbmdfbWluKCk7CiYjNDM7CXRlc3Rfc3VicG9vbF9nZXRfcGFnZXNfY3Jvc3NpbmdfbWluX211bHRpKCk7CiYjNDM7CXRlc3Rfc3VicG9vbF9nZXRfcGFnZXNfbWF4X2xpbWl0KCk7CiYjNDM7CXRlc3Rfc3VicG9vbF9nZXRfcGFnZXNfbm9fbGltaXRzKCk7CiYjNDM7CXRlc3Rfc3VicG9vbF9mcmVlX2hwYWdlcygpOwomIzQzOwl0ZXN0X3N1YnBvb2xfbWF4X2hwYWdlcygpOwomIzQzOwl0ZXN0X3N1YnBvb2xfbWF4X3NpemUoKTsKJiM0MzsJdGVzdF9zdWJwb29sX21pbl9zaXplKCk7CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjEgMTg6MDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjU5ODYKCQkJCQkJCW91dHB1dDogMjIKCQkJCQkJCXRob3VnaHRzOiA1MTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBIdWdldGxiZnMgYW5kIE1lbWNnIFBhdGNoIFNlcmllcyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBzZXJpZXMsIGFuZCBpdCYjMzk7cyBtYWtpbmcgc29tZSBwcmV0dHkgc2lnbmlmaWNhbnQgY2hhbmdlcyB0byB0aGUgY29yZSBtZW1vcnkgbWFuYWdlbWVudCwgc3BlY2lmaWNhbGx5IGluIHRoZSByZWFsbXMgb2YgaHVnZXRsYmZzIGFuZCBtZW1jZy4gTXkgaW5pdGlhbCBpbXByZXNzaW9uIGlzIHRoYXQgaXQmIzM5O3MgcmVmYWN0b3Jpbmcgc29tZSBleGlzdGluZyBsb2dpYyBhbmQgaW50cm9kdWNpbmcgbmV3IG1lbWNnIGludGVncmF0aW9uIGZvciBodWdlIHBhZ2VzLgoKU3BlY2lmaWNhbGx5LCBpdCBsb29rcyBsaWtlIGBodWdlcGFnZV9zdWJwb29sYCBsb2dpYyBpcyBiZWluZyBleHRyYWN0ZWQgaW50byBpdHMgb3duIGZpbGUsIGBtbS9odWdldGxiX3N1YnBvb2wuY2AuIFRoaXMgc3VnZ2VzdHMgYW4gZWZmb3J0IHRvIG1vZHVsYXJpemUgdGhlIGNvZGUsIHdoaWNoIGlzIGFsd2F5cyBhIGdvb2Qgc2lnbiBmb3IgbWFpbnRhaW5hYmlsaXR5LiBUaGUgY29yZSBvZiB0aGUgZnVuY3Rpb25hbCBjaGFuZ2Ugc2VlbXMgdG8gcmV2b2x2ZSBhcm91bmQgYGFsbG9jX2h1Z2V0bGJfZm9saW9gLiBUaGlzIGZ1bmN0aW9uIGlzIG5vdyB1c2luZyBgbWVtX2Nncm91cF9odWdldGxiX3RyeV9jaGFyZ2VgLCBgbWVtX2Nncm91cF9odWdldGxiX2NvbW1pdF9jaGFyZ2VgLCBhbmQgYG1lbV9jZ3JvdXBfaHVnZXRsYl9jYW5jZWxfY2hhcmdlYCB0byBtYW5hZ2UgbWVtY2cgYWNjb3VudGluZyBkdXJpbmcgZm9saW8gYWxsb2NhdGlvbi4gU21hcnQuIFRoaXMgaXMgdGhlIGludGVncmF0aW9uIEkgd2FzIGV4cGVjdGluZy4KCkRpdmluZyBkZWVwZXIsIEkgc2VlIHRoYXQgdGhlIGBodWdldGxiX3Jlc2VydmVfcGFnZXNgIGZ1bmN0aW9uIGluIGBtbS9odWdldGxiLmNgIGFsc28gaGFzIGJlZW4gbW9kaWZpZWQsIHBhcnRpY3VsYXJseSBpbiB0aGUgZXJyb3IgcGF0aCBgb3V0X3B1dF9wYWdlc2AuIEl0JiMzOTtzIHdvcnRoIGRpZ2dpbmcgaW50byB0aGUgZGV0YWlscyBvZiAqdGhhdCogY2hhbmdlIHRvIHNlZSBob3cgaXQmIzM5O3MgcGxheWluZyB3aXRoIHRoZSBuZXcgbWVtY2cgYWNjb3VudGluZy4KCk5vdywgbGV0JiMzOTtzIGxvb2sgYXQgdGhlIGBtbS9tZW1jb250cm9sLmNgIGZpbGUuIFRoZSBmdW5jdGlvbnMgbGlrZSBgbWVtX2Nncm91cF9odWdldGxiX3RyeV9jaGFyZ2VgLCBgbWVtX2Nncm91cF9odWdldGxiX2NvbW1pdF9jaGFyZ2VgLCBhbmQgYG1lbV9jZ3JvdXBfaHVnZXRsYl9jYW5jZWxfY2hhcmdlYCBhcmUgYWxsIG5ldywgYXMgZXhwZWN0ZWQuIFRoaXMgY29uZmlybXMgdGhlIGZ1bmN0aW9uYWwgYWRkaXRpb24gb2YgbWVtY2ctYXdhcmUgaHVnZXRsYiBhY2NvdW50aW5nLgoKVGhpcyBzZWVtcyBsaWtlIGEgc29saWQsIGZ1bmN0aW9uYWwgY2hhbmdlIHRvIHRoZSBjb3JlIGtlcm5lbCBsb2dpYy4gSXQgZGVmaW5pdGVseSB3YXJyYW50cyBmdXp6aW5nLgoKTXkgbGlzdCBvZiBmb2N1cyBzeW1ib2xzOgoKKiAgIGBhbGxvY19odWdldGxiX2ZvbGlvYAoqICAgYGh1Z2V0bGJfcmVzZXJ2ZV9wYWdlc2AKKiAgIGBtZW1fY2dyb3VwX2h1Z2V0bGJfdHJ5X2NoYXJnZWAKKiAgIGBtZW1fY2dyb3VwX2h1Z2V0bGJfY29tbWl0X2NoYXJnZWAKKiAgIGBtZW1fY2dyb3VwX2h1Z2V0bGJfY2FuY2VsX2NoYXJnZWAKKiAgIGBodWdlcGFnZV9zdWJwb29sX2dldF9wYWdlc2AKKiAgIGBodWdlcGFnZV9zdWJwb29sX3B1dF9wYWdlc2AKCkFuZCBvZiBjb3Vyc2UsIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhlIHJlbGV2YW50IGtlcm5lbCBjb25maWcgb3B0aW9ucyBhcmUgZW5hYmxlZCBmb3IgdGVzdGluZyB0aGlzLiBMZXQmIzM5O3Mgc2VlLi4uIEkmIzM5O2xsIG5lZWQgYEhVR0VUTEJGU2AsIG9idmlvdXNseS4gQWxzbywgYE1FTUNHYC4gSSB0aGluayBgQ0dST1VQX0hVR0VUTEJgIGlzIHJlbGV2YW50LiBMZXQgbWUgZG91YmxlLWNoZWNrIHRoYXQgbGFzdCBvbmUsIEkgZG9uJiMzOTt0IHF1aXRlIHJlbWVtYmVyIGlmIHRoYXQgaXMgdGhlIGNvcnJlY3QgY29uZmlnLiBMZXQmIzM5O3MgbG9vayBmb3IgYG1lbWNnX2FjY291bnRzX2h1Z2V0bGJgIG9yIGBDR1JPVVBfSFVHRVRMQmAgaW4gYG1tL21lbWNvbnRyb2wuY2Agb3IgYGluaXQvS2NvbmZpZ2AgdG8gYmUgc3VyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMSAxODowODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttZW1jZ19hY2NvdW50c19odWdldGxiJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL21lbWNvbnRyb2wuYz0xNjc0PXVuc2lnbmVkIGxvbmcgbWVtY2dfcGFnZV9zdGF0ZV9sb2NhbF9vdXRwdXQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBpbnQgaXRlbSlcbi0tXG5tbS9tZW1jb250cm9sLmMtMTY4MS0jaWZkZWYgQ09ORklHX0hVR0VUTEJfUEFHRVxubW0vbWVtY29udHJvbC5jOjE2ODI6c3RhdGljIGJvb2wgbWVtY2dfYWNjb3VudHNfaHVnZXRsYih2b2lkKVxubW0vbWVtY29udHJvbC5jLTE2ODMte1xuLS1cbm1tL21lbWNvbnRyb2wuYy0xNjg2LSNlbHNlIC8qIENPTkZJR19IVUdFVExCX1BBR0UgKi9cbm1tL21lbWNvbnRyb2wuYzoxNjg3OnN0YXRpYyBib29sIG1lbWNnX2FjY291bnRzX2h1Z2V0bGIodm9pZClcbm1tL21lbWNvbnRyb2wuYy0xNjg4LXtcbi0tXG5tbS9tZW1jb250cm9sLmM9MTY5Mz1zdGF0aWMgdm9pZCBtZW1jZ19zdGF0X2Zvcm1hdChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHN0cnVjdCBzZXFfYnVmICpzKVxuLS1cbm1tL21lbWNvbnRyb2wuYy0xNzEzLVx0XHRpZiAodW5saWtlbHkobWVtb3J5X3N0YXRzW2ldLmlkeCA9PSBOUl9IVUdFVExCKSBcdTAwMjZcdTAwMjZcbm1tL21lbWNvbnRyb2wuYzoxNzE0Olx0XHRcdCFtZW1jZ19hY2NvdW50c19odWdldGxiKCkpXG5tbS9tZW1jb250cm9sLmMtMTcxNS1cdFx0XHRjb250aW51ZTtcbi0tXG5tbS9tZW1jb250cm9sLmM9NTE2ND1pbnQgbWVtX2Nncm91cF9odWdldGxiX3RyeV9jaGFyZ2UodW5zaWduZWQgaW50IG5yX3BhZ2VzLCBnZnBfdCBnZnAsXG4tLVxubW0vbWVtY29udHJvbC5jLTUxNzQtXG5tbS9tZW1jb250cm9sLmM6NTE3NTpcdGlmIChtZW1fY2dyb3VwX2Rpc2FibGVkKCkgfHwgIW1lbWNnX2FjY291bnRzX2h1Z2V0bGIoKSB8fFxubW0vbWVtY29udHJvbC5jLTUxNzYtXHQgICAgIWNncm91cF9zdWJzeXNfb25fZGZsKG1lbW9yeV9jZ3JwX3N1YnN5cykpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjEgMTg6MDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjc1NzcKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiA2MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipJbnZlc3RpZ2F0aW5nIEh1Z2VUTEIgTWVtb3J5IEFjY291bnRpbmcgaW4gdGhlIEtlcm5lbCoqCgpPa2F5LCBzbyBgbWVtY2dfYWNjb3VudHNfaHVnZXRsYmAgaXMgb25seSBkZWZpbmVkIHdoZW4gYENPTkZJR19IVUdFVExCX1BBR0VgIGlzIGVuYWJsZWQuIFRoYXQgbWFrZXMgc2Vuc2UsIGJ1dCBpdCByYWlzZXMgYSBxdWVzdGlvbjogaG93IGRvZXMgdGhhdCBpbnRlcmFjdCB3aXRoIGBDT05GSUdfQ0dST1VQX0hVR0VUTEJgPyBJcyBgQ09ORklHX0NHUk9VUF9IVUdFVExCYCBhbHNvIGNoZWNrZWQgYW55d2hlcmU/IEkmIzM5O2QgYmV0dGVyIGNvbmZpcm0gd2hldGhlciBvciBub3QgYENPTkZJR19DR1JPVVBfSFVHRVRMQmAgaXMgZXZlbiBkZWZpbmVkLiBHb3R0YSBiZSBwcmVjaXNlIGFib3V0IHRoaXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjEgMTg6MDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Q0dST1VQX0hVR0VUTEImIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9hcm02NC9jb25maWdzL2RlZmNvbmZpZz0yMT1DT05GSUdfQ0dST1VQX0ZSRUVaRVI9eVxuYXJjaC9hcm02NC9jb25maWdzL2RlZmNvbmZpZzoyMjpDT05GSUdfQ0dST1VQX0hVR0VUTEI9eVxuYXJjaC9hcm02NC9jb25maWdzL2RlZmNvbmZpZy0yMy1DT05GSUdfQ1BVU0VUUz15XG4tLVxuYXJjaC9sb29uZ2FyY2gvY29uZmlncy9sb29uZ3NvbjY0X2RlZmNvbmZpZz0zMD1DT05GSUdfQ0dST1VQX0ZSRUVaRVI9eVxuYXJjaC9sb29uZ2FyY2gvY29uZmlncy9sb29uZ3NvbjY0X2RlZmNvbmZpZzozMTpDT05GSUdfQ0dST1VQX0hVR0VUTEI9eVxuYXJjaC9sb29uZ2FyY2gvY29uZmlncy9sb29uZ3NvbjY0X2RlZmNvbmZpZy0zMi1DT05GSUdfQ1BVU0VUUz15XG4tLVxuYXJjaC9wb3dlcnBjL2NvbmZpZ3MvcHBjNjRfZGVmY29uZmlnPTI3PUNPTkZJR19DR1JPVVBfRlJFRVpFUj15XG5hcmNoL3Bvd2VycGMvY29uZmlncy9wcGM2NF9kZWZjb25maWc6Mjg6Q09ORklHX0NHUk9VUF9IVUdFVExCPXlcbmFyY2gvcG93ZXJwYy9jb25maWdzL3BwYzY0X2RlZmNvbmZpZy0yOS1DT05GSUdfQ1BVU0VUUz15XG4tLVxuYXJjaC9yaXNjdi9jb25maWdzL2RlZmNvbmZpZz0xND1DT05GSUdfQ0dST1VQX0ZSRUVaRVI9eVxuYXJjaC9yaXNjdi9jb25maWdzL2RlZmNvbmZpZzoxNTpDT05GSUdfQ0dST1VQX0hVR0VUTEI9eVxuYXJjaC9yaXNjdi9jb25maWdzL2RlZmNvbmZpZy0xNi1DT05GSUdfQ1BVU0VUUz15XG4tLVxuYXJjaC9zMzkwL2NvbmZpZ3MvZGVidWdfZGVmY29uZmlnPTMwPUNPTkZJR19DR1JPVVBfRlJFRVpFUj15XG5hcmNoL3MzOTAvY29uZmlncy9kZWJ1Z19kZWZjb25maWc6MzE6Q09ORklHX0NHUk9VUF9IVUdFVExCPXlcbmFyY2gvczM5MC9jb25maWdzL2RlYnVnX2RlZmNvbmZpZy0zMi1DT05GSUdfQ1BVU0VUUz15XG4tLVxuYXJjaC9zMzkwL2NvbmZpZ3MvZGVmY29uZmlnPTI4PUNPTkZJR19DR1JPVVBfRlJFRVpFUj15XG5hcmNoL3MzOTAvY29uZmlncy9kZWZjb25maWc6Mjk6Q09ORklHX0NHUk9VUF9IVUdFVExCPXlcbmFyY2gvczM5MC9jb25maWdzL2RlZmNvbmZpZy0zMC1DT05GSUdfQ1BVU0VUUz15XG4tLVxuYXJjaC94ODYvY29uZmlncy9pMzg2X2RlZmNvbmZpZz0xOT1DT05GSUdfQ0dST1VQX0ZSRUVaRVI9eVxuYXJjaC94ODYvY29uZmlncy9pMzg2X2RlZmNvbmZpZzoyMDpDT05GSUdfQ0dST1VQX0hVR0VUTEI9eVxuYXJjaC94ODYvY29uZmlncy9pMzg2X2RlZmNvbmZpZy0yMS1DT05GSUdfQ1BVU0VUUz15XG4tLVxuYXJjaC94ODYvY29uZmlncy94ODZfNjRfZGVmY29uZmlnPTE5PUNPTkZJR19DR1JPVVBfRlJFRVpFUj15XG5hcmNoL3g4Ni9jb25maWdzL3g4Nl82NF9kZWZjb25maWc6MjA6Q09ORklHX0NHUk9VUF9IVUdFVExCPXlcbmFyY2gveDg2L2NvbmZpZ3MveDg2XzY0X2RlZmNvbmZpZy0yMS1DT05GSUdfQ1BVU0VUUz15XG4tLVxuaW5jbHVkZS9saW51eC9jZ3JvdXBfc3Vic3lzLmg9NDk9U1VCU1lTKG5ldF9wcmlvKVxuLS1cbmluY2x1ZGUvbGludXgvY2dyb3VwX3N1YnN5cy5oLTUxLVxuaW5jbHVkZS9saW51eC9jZ3JvdXBfc3Vic3lzLmg6NTI6I2lmIElTX0VOQUJMRUQoQ09ORklHX0NHUk9VUF9IVUdFVExCKVxuaW5jbHVkZS9saW51eC9jZ3JvdXBfc3Vic3lzLmgtNTMtU1VCU1lTKGh1Z2V0bGIpXG4tLVxuaW5jbHVkZS9saW51eC9odWdldGxiLmg9NDA9c3RydWN0IHJlc3ZfbWFwIHtcbi0tXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaC00Ny1cdHN0cnVjdCByd19zZW1hcGhvcmUgcndfc2VtYTtcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oOjQ4OiNpZmRlZiBDT05GSUdfQ0dST1VQX0hVR0VUTEJcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oLTQ5LVx0Lypcbi0tXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaD03OT1zdHJ1Y3QgZmlsZV9yZWdpb24ge1xuLS1cbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oLTgyLVx0bG9uZyB0bztcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oOjgzOiNpZmRlZiBDT05GSUdfQ0dST1VQX0hVR0VUTEJcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oLTg0LVx0Lypcbi0tXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGJfY2dyb3VwLmg9MjI9c3RydWN0IGZpbGVfcmVnaW9uO1xuaW5jbHVkZS9saW51eC9odWdldGxiX2Nncm91cC5oLTIzLVxuaW5jbHVkZS9saW51eC9odWdldGxiX2Nncm91cC5oOjI0OiNpZmRlZiBDT05GSUdfQ0dST1VQX0hVR0VUTEJcbmluY2x1ZGUvbGludXgvaHVnZXRsYl9jZ3JvdXAuaC0yNS1lbnVtIGh1Z2V0bGJfbWVtb3J5X2V2ZW50IHtcbi0tXG5pbml0L0tjb25maWc9MTI3MD1jb25maWcgQ0dST1VQX0ZSRUVaRVJcbi0tXG5pbml0L0tjb25maWctMTI4MC1cbmluaXQvS2NvbmZpZzoxMjgxOmNvbmZpZyBDR1JPVVBfSFVHRVRMQlxuaW5pdC9LY29uZmlnLTEyODItXHRib29sIFwmIzM0O0h1Z2VUTEIgY29udHJvbGxlclwmIzM0O1xuLS1cbm1tL01ha2VmaWxlPTEwOD1lbmRpZlxubW0vTWFrZWZpbGU6MTA5Om9iai0kKENPTkZJR19DR1JPVVBfSFVHRVRMQikgJiM0Mzs9IGh1Z2V0bGJfY2dyb3VwLm9cbm1tL01ha2VmaWxlLTExMC1vYmotJChDT05GSUdfR1VQX1RFU1QpICYjNDM7PSBndXBfdGVzdC5vXG4tLVxubW0vaHVnZXRsYi5jPTMyNT1zdGF0aWMgdm9pZCBjb3B5X2h1Z2V0bGJfY2dyb3VwX3VuY2hhcmdlX2luZm8oc3RydWN0IGZpbGVfcmVnaW9uICpucmcsXG4tLVxubW0vaHVnZXRsYi5jLTMyNy17XG5tbS9odWdldGxiLmM6MzI4OiNpZmRlZiBDT05GSUdfQ0dST1VQX0hVR0VUTEJcbm1tL2h1Z2V0bGIuYy0zMjktXHRucmctXHUwMDNlcmVzZXJ2YXRpb25fY291bnRlciA9IHJnLVx1MDAzZXJlc2VydmF0aW9uX2NvdW50ZXI7XG4tLVxubW0vaHVnZXRsYi5jPTMzNz1zdGF0aWMgdm9pZCByZWNvcmRfaHVnZXRsYl9jZ3JvdXBfdW5jaGFyZ2VfaW5mbyhzdHJ1Y3QgaHVnZXRsYl9jZ3JvdXAgKmhfY2csXG4tLVxubW0vaHVnZXRsYi5jLTM0MS17XG5tbS9odWdldGxiLmM6MzQyOiNpZmRlZiBDT05GSUdfQ0dST1VQX0hVR0VUTEJcbm1tL2h1Z2V0bGIuYy0zNDMtXHRpZiAoaF9jZykge1xuLS1cbm1tL2h1Z2V0bGIuYz0zNzE9c3RhdGljIHZvaWQgcHV0X3VuY2hhcmdlX2luZm8oc3RydWN0IGZpbGVfcmVnaW9uICpyZylcbm1tL2h1Z2V0bGIuYy0zNzIte1xubW0vaHVnZXRsYi5jOjM3MzojaWZkZWYgQ09ORklHX0NHUk9VUF9IVUdFVExCXG5tbS9odWdldGxiLmMtMzc0LVx0aWYgKHJnLVx1MDAzZWNzcylcbi0tXG5tbS9odWdldGxiLmM9Mzc5PXN0YXRpYyBib29sIGhhc19zYW1lX3VuY2hhcmdlX2luZm8oc3RydWN0IGZpbGVfcmVnaW9uICpyZyxcbi0tXG5tbS9odWdldGxiLmMtMzgxLXtcbm1tL2h1Z2V0bGIuYzozODI6I2lmZGVmIENPTkZJR19DR1JPVVBfSFVHRVRMQlxubW0vaHVnZXRsYi5jLTM4My1cdHJldHVybiByZy1cdTAwM2VyZXNlcnZhdGlvbl9jb3VudGVyID09IG9yZy1cdTAwM2VyZXNlcnZhdGlvbl9jb3VudGVyIFx1MDAyNlx1MDAyNlxuLS1cbm1tL2h1Z2V0bGIuYz05MDk9cmVzdl9tYXBfc2V0X2h1Z2V0bGJfY2dyb3VwX3VuY2hhcmdlX2luZm8oc3RydWN0IHJlc3ZfbWFwICpyZXN2X21hcCxcbi0tXG5tbS9odWdldGxiLmMtOTEyLXtcbm1tL2h1Z2V0bGIuYzo5MTM6I2lmZGVmIENPTkZJR19DR1JPVVBfSFVHRVRMQlxubW0vaHVnZXRsYi5jLTkxNC1cdGlmICghaF9jZyB8fCAhaCkge1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9jb25maWcuYWFyY2g2ND0yMT1DT05GSUdfQ0dST1VQX0ZSRUVaRVI9eVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2NvbmZpZy5hYXJjaDY0OjIyOkNPTkZJR19DR1JPVVBfSFVHRVRMQj15XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvY29uZmlnLmFhcmNoNjQtMjMtQ09ORklHX0NHUk9VUF9ORVRfQ0xBU1NJRD15XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2NvbmZpZy5wcGM2NGVsPTEyPUNPTkZJR19DR1JPVVBfRlJFRVpFUj15XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvY29uZmlnLnBwYzY0ZWw6MTM6Q09ORklHX0NHUk9VUF9IVUdFVExCPXlcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9jb25maWcucHBjNjRlbC0xNC1DT05GSUdfQ0dST1VQX05FVF9DTEFTU0lEPXlcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvY29uZmlnLnJpc2N2NjQ9MTI9Q09ORklHX0NHUk9VUF9GUkVFWkVSPXlcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9jb25maWcucmlzY3Y2NDoxMzpDT05GSUdfQ0dST1VQX0hVR0VUTEI9eVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2NvbmZpZy5yaXNjdjY0LTE0LUNPTkZJR19DR1JPVVBfTkVUX0NMQVNTSUQ9eVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9jb25maWcuczM5MHg9MTQ9Q09ORklHX0NHUk9VUF9GUkVFWkVSPXlcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9jb25maWcuczM5MHg6MTU6Q09ORklHX0NHUk9VUF9IVUdFVExCPXlcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9jb25maWcuczM5MHgtMTYtQ09ORklHX0NHUk9VUF9ORVRfQ0xBU1NJRD15XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2NvbmZpZy54ODZfNjQ9Mjc9Q09ORklHX0NHUk9VUF9GUkVFWkVSPXlcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9jb25maWcueDg2XzY0OjI4OkNPTkZJR19DR1JPVVBfSFVHRVRMQj15XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvY29uZmlnLng4Nl82NC0yOS1DT05GSUdfQ0dST1VQX1BFUkY9eVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2hpZC9jb25maWcuY29tbW9uPTIyPUNPTkZJR19DR1JPVVBfRlJFRVpFUj15XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9oaWQvY29uZmlnLmNvbW1vbjoyMzpDT05GSUdfQ0dST1VQX0hVR0VUTEI9eVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvaGlkL2NvbmZpZy5jb21tb24tMjQtQ09ORklHX0NHUk9VUF9ORVRfQ0xBU1NJRD15XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjEgMTg6MDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzAwNjIKCQkJCQkJCW91dHB1dDogMTcKCQkJCQkJCXRob3VnaHRzOiAzNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3Mgb24gdGhpczoKCioqSW52ZXN0aWdhdGluZyBNZW1vcnkgQ29udHJvbCBHcm91cHMqKgoKQWxyaWdodCwgc28gYENHUk9VUF9IVUdFVExCYCBpcyBkZWZpbml0ZWx5IGEgdGhpbmcuIE5vdywgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIHJlbGF0aW9uc2hpcCB3aXRoIGBNRU1DR2AuIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIGRlbHZlIGludG8gdGhlIGBpbml0L0tjb25maWdgIGZpbGUuIFRoYXQmIzM5O3MgdGhlIGdvLXRvIHBsYWNlIGZvciB1bmRlcnN0YW5kaW5nIGtlcm5lbCBjb25maWd1cmF0aW9uIG9wdGlvbnMsIHNvIEkmIzM5O2xsIHN0YXJ0IHRoZXJlIHRvIHNlZSBob3cgYE1FTUNHYCBpcyBkZWZpbmVkIGFuZCBpZiB0aGVyZSYjMzk7cyBhbnkgaW1tZWRpYXRlIGNvbm5lY3Rpb24gb3IgZGVwZW5kZW5jeSBsYWlkIG91dCB3aXRoaW4gdGhlIGNvbmZpZ3VyYXRpb24gZnJhbWV3b3JrLiBUaGlzIGlzIHRoZSBsb2dpY2FsIGZpcnN0IHN0ZXAgZm9yIG1lIHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIG1vZHVsZXMgcmVsYXRlIHRvIGVhY2ggb3RoZXIgaW4gdGhlIGtlcm5lbC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMSAxODowODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTUVNQ0cmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5pdC9LY29uZmlnPTEwNjM9Y29uZmlnIENHUk9VUF9GQVZPUl9EWU5NT0RTXG4tLVxuaW5pdC9LY29uZmlnLTEwNzItXG5pbml0L0tjb25maWc6MTA3Mzpjb25maWcgTUVNQ0dcbmluaXQvS2NvbmZpZy0xMDc0LVx0Ym9vbCBcJiMzNDtNZW1vcnkgY29udHJvbGxlclwmIzM0O1xuLS1cbmluaXQvS2NvbmZpZy0xMDgxLVxuaW5pdC9LY29uZmlnOjEwODI6Y29uZmlnIE1FTUNHX05NSV9VTlNBRkVcbmluaXQvS2NvbmZpZy0xMDgzLVx0Ym9vbFxuLS1cbmluaXQvS2NvbmZpZy0xMDg4LVxuaW5pdC9LY29uZmlnOjEwODk6Y29uZmlnIE1FTUNHX05NSV9TQUZFVFlfUkVRVUlSRVNfQVRPTUlDXG5pbml0L0tjb25maWctMTA5MC1cdGJvb2xcbi0tXG5pbml0L0tjb25maWctMTA5NS1cbmluaXQvS2NvbmZpZzoxMDk2OmNvbmZpZyBNRU1DR19WMVxuaW5pdC9LY29uZmlnLTEwOTctXHRib29sIFwmIzM0O0xlZ2FjeSBjZ3JvdXAgdjEgbWVtb3J5IGNvbnRyb2xsZXJcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMSAxODowODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMDQ3OQoJCQkJCQkJb3V0cHV0OiAyMAoJCQkJCQkJdGhvdWdodHM6IDgwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKktlcm5lbCBDb25maWd1cmF0aW9uIFF1YW5kYXJ5KioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGVzZSBrZXJuZWwgY29uZmlndXJhdGlvbnMsIGFuZCBpbW1lZGlhdGVseSBteSBicmFpbiBqdW1wcyB0byBgSFVHRVRMQkZTYCwgYE1FTUNHYCwgYW5kIGBDR1JPVVBfSFVHRVRMQmAuIFRob3NlIGFyZSB0aGUgdXN1YWwgc3VzcGVjdHMuIEJ1dCwgaG9sZCBvbiBhIHNlY29uZC4uLiBpc24mIzM5O3QgYEhVR0VUTEJfUEFHRWAgdGhlICpwcmltYXJ5KiBjb25maWcgZm9yIGVuYWJsaW5nIGh1Z2UgcGFnZXMgaW4gdGhlIGZpcnN0IHBsYWNlPyBJdCBmZWVscyBsaWtlIHRoYXQgc2hvdWxkIGJlIHRoZSBmb3VuZGF0aW9uLiBSaWdodCwgYEhVR0VUTEJGU2AgaXMgcmVsYXRlZCB0byB0aGUgZmlsZXN5c3RlbSBpbXBsZW1lbnRhdGlvbiwgbWFraW5nIHRoYXQgZGlzdGluY3Rpb24gaW4gbXkgbWluZCBub3cuCgpMZXQgbWUganVzdCBkb3VibGUtY2hlY2sgd2hlcmUgYEhVR0VUTEJfUEFHRWAgaXMgYWN0dWFsbHkgZGVmaW5lZC4gSSBzaG91bGQgbG9vayBpbiBlaXRoZXIgYGZzL0tjb25maWdgIG9yIGBtbS9LY29uZmlnYCwgaXQmIzM5O2xsIGxpa2VseSBiZSB0aGVyZS4gR290dGEgcmVmcmVzaCBteSBtZW1vcnkgYW5kIHBpbnBvaW50IHRoYXQgY29uZmlndXJhdGlvbiBkZXBlbmRlbmN5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMSAxODowODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgSFVHRVRMQl9QQUdFJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvc2gvbW0vS2NvbmZpZz0xNTg9Y2hvaWNlXG4tLVxuYXJjaC9zaC9tbS9LY29uZmlnLTE2My1cbmFyY2gvc2gvbW0vS2NvbmZpZzoxNjQ6Y29uZmlnIEhVR0VUTEJfUEFHRV9TSVpFXzY0S1xuYXJjaC9zaC9tbS9LY29uZmlnLTE2NS1cdGJvb2wgXCYjMzQ7NjRrQlwmIzM0O1xuLS1cbmFyY2gvc2gvbW0vS2NvbmZpZy0xNjctXG5hcmNoL3NoL21tL0tjb25maWc6MTY4OmNvbmZpZyBIVUdFVExCX1BBR0VfU0laRV8yNTZLXG5hcmNoL3NoL21tL0tjb25maWctMTY5LVx0Ym9vbCBcJiMzNDsyNTZrQlwmIzM0O1xuLS1cbmFyY2gvc2gvbW0vS2NvbmZpZy0xNzEtXG5hcmNoL3NoL21tL0tjb25maWc6MTcyOmNvbmZpZyBIVUdFVExCX1BBR0VfU0laRV8xTUJcbmFyY2gvc2gvbW0vS2NvbmZpZy0xNzMtXHRib29sIFwmIzM0OzFNQlwmIzM0O1xuYXJjaC9zaC9tbS9LY29uZmlnLTE3NC1cbmFyY2gvc2gvbW0vS2NvbmZpZzoxNzU6Y29uZmlnIEhVR0VUTEJfUEFHRV9TSVpFXzRNQlxuYXJjaC9zaC9tbS9LY29uZmlnLTE3Ni1cdGJvb2wgXCYjMzQ7NE1CXCYjMzQ7XG4tLVxuYXJjaC9zaC9tbS9LY29uZmlnLTE3OC1cbmFyY2gvc2gvbW0vS2NvbmZpZzoxNzk6Y29uZmlnIEhVR0VUTEJfUEFHRV9TSVpFXzY0TUJcbmFyY2gvc2gvbW0vS2NvbmZpZy0xODAtXHRib29sIFwmIzM0OzY0TUJcJiMzNDtcbi0tXG5mcy9LY29uZmlnPTI2Mj1pZiBIVUdFVExCRlNcbmZzL0tjb25maWc6MjYzOmNvbmZpZyBIVUdFVExCX1BBR0VfT1BUSU1JWkVfVk1FTU1BUF9ERUZBVUxUX09OXG5mcy9LY29uZmlnLTI2NC1cdGJvb2wgXCYjMzQ7SHVnZVRMQiBWbWVtbWFwIE9wdGltaXphdGlvbiAoSFZPKSBkZWZhdWx0cyB0byBvblwmIzM0O1xuLS1cbmZzL0tjb25maWc9MjcxPWVuZGlmICMgSFVHRVRMQkZTXG5mcy9LY29uZmlnLTI3Mi1cbmZzL0tjb25maWc6MjczOmNvbmZpZyBIVUdFVExCX1BBR0VcbmZzL0tjb25maWctMjc0LVx0ZGVmX2Jvb2wgSFVHRVRMQkZTXG4tLVxuZnMvS2NvbmZpZy0yNzYtXG5mcy9LY29uZmlnOjI3Nzpjb25maWcgSFVHRVRMQl9QQUdFX09QVElNSVpFX1ZNRU1NQVBcbmZzL0tjb25maWctMjc4LVx0ZGVmX2Jvb2wgSFVHRVRMQl9QQUdFXG4tLVxubW0vS2NvbmZpZz03MDY9Y29uZmlnIEFSQ0hfRU5BQkxFX1RIUF9NSUdSQVRJT05cbi0tXG5tbS9LY29uZmlnLTcwOC1cbm1tL0tjb25maWc6NzA5OmNvbmZpZyBIVUdFVExCX1BBR0VfU0laRV9WQVJJQUJMRVxubW0vS2NvbmZpZy03MTAtXHRkZWZfYm9vbCBuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIxIDE4OjA4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMxMzQ0CgkJCQkJCQlvdXRwdXQ6IDI1MAoJCQkJCQkJdGhvdWdodHM6IDYwNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgSHVnZXRsYiBTdWJwb29sIFJlZmFjdG9yaW5nIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHNlcmllcywgYW5kIGl0JiMzOTtzIGFsbCBhYm91dCByZWZhY3RvcmluZyB0aGUgaHVnZXRsYiBzdWJwb29sIGxvZ2ljLiBSaWdodCBvZmYgdGhlIGJhdCwgSSBzZWUgdGhhdCBgSFVHRVRMQl9QQUdFYCBpcyB0aWVkIHRvIGBIVUdFVExCRlNgLCBzbyB0aGF0JiMzOTtzIHRoZSBrZXkgdGhpbmcgdG8gZW5hYmxlLCBhbmQgSSBuZWVkIHRvIG1ha2Ugc3VyZSBgTUVNQ0dgIGlzIGFsc28gc2V0LiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoYXQgdGhlc2UgYXJlIGFsbCB3b3JraW5nIGluIGhhcm1vbnkgd2l0aCBhbnkgZXhpc3RpbmcgY29uZmlndXJhdGlvbnMuIEkgc2hvdWxkIHByb2JhYmx5IGRvdWJsZS1jaGVjayB0aGUgYG1lbWNnX2FjY291bnRzX2h1Z2V0bGJgIGNvbmZpZy4gSXQmIzM5O3MgZGVmaW5lZCBpZiBgQ09ORklHX0hVR0VUTEJfUEFHRWAgaXMgc2V0LCBhbmQgaXQmIzM5O3MgdXNlZCBpbiBgbWVtX2Nncm91cF9odWdldGxiX3RyeV9jaGFyZ2VgLiBHb3QgaXQuIFNvIHdlJiMzOTtyZSBsb29raW5nIGF0IGBIVUdFVExCRlNgIGFuZCBgTUVNQ0dgIGFzIHRoZSBlc3NlbnRpYWwgY29uZmlncyBoZXJlLCBhcyB3ZWxsIGFzIGBDR1JPVVBfSFVHRVRMQmAuCgpOb3csIGxldCBtZSB6ZXJvIGluIG9uIHRoZSBrZXkgZnVuY3Rpb25zIGJlaW5nIG1vZGlmaWVkLiBJIHNob3VsZCBnaXZlIHRoZXNlIGV4dHJhIGZvY3VzOgoKKiAgIGBhbGxvY19odWdldGxiX2ZvbGlvYAoqICAgYGh1Z2V0bGJfcmVzZXJ2ZV9wYWdlc2AKKiAgIGBtZW1fY2dyb3VwX2h1Z2V0bGJfdHJ5X2NoYXJnZWAKKiAgIGBtZW1fY2dyb3VwX2h1Z2V0bGJfY29tbWl0X2NoYXJnZWAKKiAgIGBtZW1fY2dyb3VwX2h1Z2V0bGJfY2FuY2VsX2NoYXJnZWAKKiAgIGBodWdlcGFnZV9zdWJwb29sX2dldF9wYWdlc2AKKiAgIGBodWdlcGFnZV9zdWJwb29sX3B1dF9wYWdlc2AKKiAgIGBodWdlcGFnZV9uZXdfc3VicG9vbGAKKiAgIGBodWdlcGFnZV9wdXRfc3VicG9vbGAKKiAgIGBodWdlcGFnZV9zdWJwb29sX2ZyZWVfaHBhZ2VzYAoqICAgYGh1Z2VwYWdlX3N1YnBvb2xfbWF4X2hwYWdlc2AKKiAgIGBodWdlcGFnZV9zdWJwb29sX21heF9zaXplYAoqICAgYGh1Z2VwYWdlX3N1YnBvb2xfbWluX3NpemVgCgpBbHJpZ2h0LCBsZXQmIzM5O3MgbWFrZSBzdXJlIEkmIzM5O20gdXNpbmcgdGhlIGV4YWN0IGZ1bmN0aW9uIG5hbWVzIGZyb20gdGhlIGRpZmYgd2hlbiBpdCBjb21lcyB0byBmb2N1cy4KClRoZSBjb3JlIG9mIHRoaXMgcGF0Y2ggc2VyaWVzIGlzIHJlZmFjdG9yaW5nIHRoZSBodWdldGxiIHN1YnBvb2wgbG9naWMgaW50byBpdHMgb3duIGZpbGUsIGBtbS9odWdldGxiX3N1YnBvb2wuY2AuIE1vcmUgaW1wb3J0YW50bHksIGl0IHNlZW1zIHRvIGJlIHVwZGF0aW5nIHRoZSBodWdldGxiIGFsbG9jYXRpb24gcGF0aCAoYGFsbG9jX2h1Z2V0bGJfZm9saW9gKSB0byBlbXBsb3kgYSB0cnkvY29tbWl0L2NhbmNlbCBjaGFyZ2luZyBzY2hlbWUgZm9yIG1lbW9yeSBjZ3JvdXBzIHVzaW5nIGZ1bmN0aW9ucyBsaWtlIGBtZW1fY2dyb3VwX2h1Z2V0bGJfdHJ5X2NoYXJnZWAsIGBtZW1fY2dyb3VwX2h1Z2V0bGJfY29tbWl0X2NoYXJnZWAsIGFuZCBgbWVtX2Nncm91cF9odWdldGxiX2NhbmNlbF9jaGFyZ2VgLiBQbHVzLCB0aGVyZSYjMzk7cyBhIGZpeCBmb3IgYW4gZXJyb3IgcGF0aCBpbiBgaHVnZXRsYl9yZXNlcnZlX3BhZ2VzYC4gVGhlc2UgYXJlIHNpZ25pZmljYW50IGNoYW5nZXMgdG8gY29yZSBtZW1vcnkgbWFuYWdlbWVudCBhbmQgY2dyb3VwIGZ1bmN0aW9uYWxpdHksIGFuZCBzaW5jZSB0aGV5IGNhbiBiZSB0cmlnZ2VyZWQgZnJvbSB1c2Vyc3BhY2UgdmlhIGh1Z2V0bGJmcyBhbmQgY2dyb3VwZnMsIHRoZXkmIzM5O3JlIHByaW1lIGNhbmRpZGF0ZXMgZm9yIGZ1enppbmcuIFRpbWUgdG8gc2V0LXJlc3VsdHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIxIDE4OjA4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtIVUdFVExCRlMmIzM0OywKICAgICYjMzQ7TUVNQ0cmIzM0OywKICAgICYjMzQ7Q0dST1VQX0hVR0VUTEImIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDthbGxvY19odWdldGxiX2ZvbGlvJiMzNDssCiAgICAmIzM0O2h1Z2V0bGJfcmVzZXJ2ZV9wYWdlcyYjMzQ7LAogICAgJiMzNDttZW1fY2dyb3VwX2h1Z2V0bGJfdHJ5X2NoYXJnZSYjMzQ7LAogICAgJiMzNDttZW1fY2dyb3VwX2h1Z2V0bGJfY29tbWl0X2NoYXJnZSYjMzQ7LAogICAgJiMzNDttZW1fY2dyb3VwX2h1Z2V0bGJfY2FuY2VsX2NoYXJnZSYjMzQ7LAogICAgJiMzNDtodWdlcGFnZV9zdWJwb29sX2dldF9wYWdlcyYjMzQ7LAogICAgJiMzNDtodWdlcGFnZV9zdWJwb29sX3B1dF9wYWdlcyYjMzQ7LAogICAgJiMzNDtodWdlcGFnZV9uZXdfc3VicG9vbCYjMzQ7LAogICAgJiMzNDtodWdlcGFnZV9wdXRfc3VicG9vbCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBzZXJpZXMgcmVmYWN0b3JzIHRoZSBodWdldGxiIHN1YnBvb2wgbG9naWMgaW50byBhIHNlcGFyYXRlIGZpbGUgYW5kIG1vZGlmaWVzIHRoZSBodWdldGxiIGFsbG9jYXRpb24gcGF0aCB0byB1c2UgYSBuZXcgdHJ5L2NvbW1pdC9jYW5jZWwgY2hhcmdpbmcgbW9kZWwgZm9yIG1lbW9yeSBjZ3JvdXBzLiBJdCBhbHNvIG1vZGlmaWVzIHRoZSBodWdldGxiX3Jlc2VydmVfcGFnZXMgZXJyb3IgcGF0aC4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBjZ3JvdXAgbG9naWMgdGhhdCBhcmUgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBodWdldGxiZnMgYW5kIGNncm91cGZzLCBtYWtpbmcgdGhlbSBoaWdobHkgcmVsZXZhbnQgZm9yIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0hVR0VUTEJGUyYjMzQ7LAogICAgJiMzNDtNRU1DRyYjMzQ7LAogICAgJiMzNDtDR1JPVVBfSFVHRVRMQiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2FsbG9jX2h1Z2V0bGJfZm9saW8mIzM0OywKICAgICYjMzQ7aHVnZXRsYl9yZXNlcnZlX3BhZ2VzJiMzNDssCiAgICAmIzM0O21lbV9jZ3JvdXBfaHVnZXRsYl90cnlfY2hhcmdlJiMzNDssCiAgICAmIzM0O21lbV9jZ3JvdXBfaHVnZXRsYl9jb21taXRfY2hhcmdlJiMzNDssCiAgICAmIzM0O21lbV9jZ3JvdXBfaHVnZXRsYl9jYW5jZWxfY2hhcmdlJiMzNDssCiAgICAmIzM0O2h1Z2VwYWdlX3N1YnBvb2xfZ2V0X3BhZ2VzJiMzNDssCiAgICAmIzM0O2h1Z2VwYWdlX3N1YnBvb2xfcHV0X3BhZ2VzJiMzNDssCiAgICAmIzM0O2h1Z2VwYWdlX25ld19zdWJwb29sJiMzNDssCiAgICAmIzM0O2h1Z2VwYWdlX3B1dF9zdWJwb29sJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHNlcmllcyByZWZhY3RvcnMgdGhlIGh1Z2V0bGIgc3VicG9vbCBsb2dpYyBpbnRvIGEgc2VwYXJhdGUgZmlsZSBhbmQgbW9kaWZpZXMgdGhlIGh1Z2V0bGIgYWxsb2NhdGlvbiBwYXRoIHRvIHVzZSBhIG5ldyB0cnkvY29tbWl0L2NhbmNlbCBjaGFyZ2luZyBtb2RlbCBmb3IgbWVtb3J5IGNncm91cHMuIEl0IGFsc28gbW9kaWZpZXMgdGhlIGh1Z2V0bGJfcmVzZXJ2ZV9wYWdlcyBlcnJvciBwYXRoLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIGNncm91cCBsb2dpYyB0aGF0IGFyZSByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIGh1Z2V0bGJmcyBhbmQgY2dyb3VwZnMsIG1ha2luZyB0aGVtIGhpZ2hseSByZWxldmFudCBmb3IgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIxVDE4OjA4OjE3LjIzNzU3NDg4MloiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM2Mzc4OTg0NTYyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkhVR0VUTEJGU1wiLFxuICAgIFwiTUVNQ0dcIixcbiAgICBcIkNHUk9VUF9IVUdFVExCXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYWxsb2NfaHVnZXRsYl9mb2xpb1wiLFxuICAgIFwiaHVnZXRsYl9yZXNlcnZlX3BhZ2VzXCIsXG4gICAgXCJtZW1fY2dyb3VwX2h1Z2V0bGJfdHJ5X2NoYXJnZVwiLFxuICAgIFwibWVtX2Nncm91cF9odWdldGxiX2NvbW1pdF9jaGFyZ2VcIixcbiAgICBcIm1lbV9jZ3JvdXBfaHVnZXRsYl9jYW5jZWxfY2hhcmdlXCIsXG4gICAgXCJodWdlcGFnZV9zdWJwb29sX2dldF9wYWdlc1wiLFxuICAgIFwiaHVnZXBhZ2Vfc3VicG9vbF9wdXRfcGFnZXNcIixcbiAgICBcImh1Z2VwYWdlX25ld19zdWJwb29sXCIsXG4gICAgXCJodWdlcGFnZV9wdXRfc3VicG9vbFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHNlcmllcyByZWZhY3RvcnMgdGhlIGh1Z2V0bGIgc3VicG9vbCBsb2dpYyBpbnRvIGEgc2VwYXJhdGUgZmlsZSBhbmQgbW9kaWZpZXMgdGhlIGh1Z2V0bGIgYWxsb2NhdGlvbiBwYXRoIHRvIHVzZSBhIG5ldyB0cnkvY29tbWl0L2NhbmNlbCBjaGFyZ2luZyBtb2RlbCBmb3IgbWVtb3J5IGNncm91cHMuIEl0IGFsc28gbW9kaWZpZXMgdGhlIGh1Z2V0bGJfcmVzZXJ2ZV9wYWdlcyBlcnJvciBwYXRoLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIGNncm91cCBsb2dpYyB0aGF0IGFyZSByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIGh1Z2V0bGJmcyBhbmQgY2dyb3VwZnMsIG1ha2luZyB0aGVtIGhpZ2hseSByZWxldmFudCBmb3IgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjFUMTg6MDg6MTcuMjM3NTgzMzMyWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MTM3MzgwMzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA3MDA4NTJjZDlhMDIzYTUxMDVlMjM0MWQyNDdiODY0MDAyY2NjNmZjXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUdWUgSnVsIDIxIDE4OjA4OjE1IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2Nncm91cF92Ml9hbGxvY2F0aW9uX2ZhaWx1cmUuYyBiL2Nncm91cF92Ml9hbGxvY2F0aW9uX2ZhaWx1cmUuY1xcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLjkzOGNiZjAyYWU2ZjdhXFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL2Nncm91cF92Ml9hbGxvY2F0aW9uX2ZhaWx1cmUuY1xcbkBAIC0wLDAgKzEsMTYwIEBAXFxuKyNkZWZpbmUgX0dOVV9TT1VSQ0VcXG4rI2luY2x1ZGUgXFx1MDAzY3N0ZGlvLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NzdGRsaWIuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY3VuaXN0ZC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjZmNudGwuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY3N5cy9tbWFuLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NzeXMvc3RhdC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjc3lzL3R5cGVzLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NzeXMvd2FpdC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjc3RyaW5nLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NlcnJuby5oXFx1MDAzZVxcbitcXG4rI2RlZmluZSBDR1JPVVBfUEFUSCBcXFwiL3N5cy9mcy9jZ3JvdXBcXFwiXFxuKyNkZWZpbmUgVEVTVF9DR1JPVVAgXFxcInRlc3RfcmVwcm9kdWNlclxcXCJcXG4rI2RlZmluZSBURVNUX0NHUk9VUF9QQVRIIENHUk9VUF9QQVRIIFxcXCIvXFxcIiBURVNUX0NHUk9VUFxcbitcXG4rdm9pZCB3cml0ZV9maWxlKGNvbnN0IGNoYXIgKnBhdGgsIGNvbnN0IGNoYXIgKnZhbCkge1xcbisgICAgaW50IGZkID0gb3BlbihwYXRoLCBPX1dST05MWSk7XFxuKyAgICBpZiAoZmQgXFx1MDAzYyAwKSB7XFxuKyAgICAgICAgZnByaW50ZihzdGRlcnIsIFxcXCJGYWlsZWQgdG8gb3BlbiAlczogJXNcXFxcblxcXCIsIHBhdGgsIHN0cmVycm9yKGVycm5vKSk7XFxuKyAgICAgICAgZXhpdCgxKTtcXG4rICAgIH1cXG4rICAgIGlmICh3cml0ZShmZCwgdmFsLCBzdHJsZW4odmFsKSkgXFx1MDAzYyAwKSB7XFxuKyAgICAgICAgZnByaW50ZihzdGRlcnIsIFxcXCJGYWlsZWQgdG8gd3JpdGUgJXMgdG8gJXM6ICVzXFxcXG5cXFwiLCB2YWwsIHBhdGgsIHN0cmVycm9yKGVycm5vKSk7XFxuKyAgICAgICAgY2xvc2UoZmQpO1xcbisgICAgICAgIGV4aXQoMSk7XFxuKyAgICB9XFxuKyAgICBjbG9zZShmZCk7XFxuK31cXG4rXFxuK2ludCBpc19odWdldGxiX2FjY291bnRpbmdfZW5hYmxlZCgpIHtcXG4rICAgIEZJTEUgKmZwID0gZm9wZW4oXFxcIi9wcm9jL21vdW50c1xcXCIsIFxcXCJyXFxcIik7XFxuKyAgICBpZiAoIWZwKSB7XFxuKyAgICAgICAgcGVycm9yKFxcXCJmb3BlbiAvcHJvYy9tb3VudHNcXFwiKTtcXG4rICAgICAgICByZXR1cm4gLTE7XFxuKyAgICB9XFxuK1xcbisgICAgY2hhciBsaW5lWzEwMjRdO1xcbisgICAgaW50IGVuYWJsZWQgPSAwO1xcbisgICAgd2hpbGUgKGZnZXRzKGxpbmUsIHNpemVvZihsaW5lKSwgZnApKSB7XFxuKyAgICAgICAgY2hhciBzcGVjWzI1Nl0sIGZpbGVbMjU2XSwgdHlwZVsyNTZdLCBvcHRzWzUxMl07XFxuKyAgICAgICAgaWYgKHNzY2FuZihsaW5lLCBcXFwiJTI1NXMgJTI1NXMgJTI1NXMgJTUxMXNcXFwiLCBzcGVjLCBmaWxlLCB0eXBlLCBvcHRzKSA9PSA0KSB7XFxuKyAgICAgICAgICAgIGlmIChzdHJjbXAoZmlsZSwgQ0dST1VQX1BBVEgpID09IDAgXFx1MDAyNlxcdTAwMjYgc3RyY21wKHR5cGUsIFxcXCJjZ3JvdXAyXFxcIikgPT0gMCkge1xcbisgICAgICAgICAgICAgICAgaWYgKHN0cnN0cihvcHRzLCBcXFwibWVtb3J5X2h1Z2V0bGJfYWNjb3VudGluZ1xcXCIpICE9IE5VTEwpIHtcXG4rICAgICAgICAgICAgICAgICAgICBlbmFibGVkID0gMTtcXG4rICAgICAgICAgICAgICAgIH1cXG4rICAgICAgICAgICAgICAgIGJyZWFrO1xcbisgICAgICAgICAgICB9XFxuKyAgICAgICAgfVxcbisgICAgfVxcbisgICAgZmNsb3NlKGZwKTtcXG4rICAgIHJldHVybiBlbmFibGVkO1xcbit9XFxuK1xcbitpbnQgZW5hYmxlX2h1Z2V0bGJfYWNjb3VudGluZygpIHtcXG4rICAgIHByaW50ZihcXFwiQXR0ZW1wdGluZyB0byByZW1vdW50IGNncm91cDIgd2l0aCBtZW1vcnlfaHVnZXRsYl9hY2NvdW50aW5nLi4uXFxcXG5cXFwiKTtcXG4rICAgIGludCByZXQgPSBzeXN0ZW0oXFxcIm1vdW50IC1vIHJlbW91bnQsbWVtb3J5X2h1Z2V0bGJfYWNjb3VudGluZyBcXFwiIENHUk9VUF9QQVRIKTtcXG4rICAgIGlmIChyZXQgIT0gMCkge1xcbisgICAgICAgIGZwcmludGYoc3RkZXJyLCBcXFwiRmFpbGVkIHRvIHJlbW91bnQ6IHN5c3RlbSgpIHJldHVybmVkICVkXFxcXG5cXFwiLCByZXQpO1xcbisgICAgICAgIHJldHVybiAtMTtcXG4rICAgIH1cXG4rICAgIHJldHVybiAwO1xcbit9XFxuK1xcbitpbnQgbWFpbigpIHtcXG4rICAgIHN0cnVjdCBzdGF0IHN0O1xcbisgICAgaWYgKHN0YXQoQ0dST1VQX1BBVEgsIFxcdTAwMjZzdCkgIT0gMCB8fCAhU19JU0RJUihzdC5zdF9tb2RlKSkge1xcbisgICAgICAgIGZwcmludGYoc3RkZXJyLCBcXFwiY2dyb3VwIHYyIG5vdCBtb3VudGVkIGF0ICVzXFxcXG5cXFwiLCBDR1JPVVBfUEFUSCk7XFxuKyAgICAgICAgcmV0dXJuIDE7XFxuKyAgICB9XFxuK1xcbisgICAgaW50IGVuYWJsZWQgPSBpc19odWdldGxiX2FjY291bnRpbmdfZW5hYmxlZCgpO1xcbisgICAgaWYgKGVuYWJsZWQgXFx1MDAzYyAwKSB7XFxuKyAgICAgICAgcmV0dXJuIDE7XFxuKyAgICB9XFxuKyAgICBpZiAoIWVuYWJsZWQpIHtcXG4rICAgICAgICBpZiAoZW5hYmxlX2h1Z2V0bGJfYWNjb3VudGluZygpICE9IDApIHtcXG4rICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsIFxcXCJDb3VsZCBub3QgZW5hYmxlIG1lbW9yeV9odWdldGxiX2FjY291bnRpbmdcXFxcblxcXCIpO1xcbisgICAgICAgICAgICByZXR1cm4gMTtcXG4rICAgICAgICB9XFxuKyAgICAgICAgLy8gUmUtY2hlY2tcXG4rICAgICAgICBlbmFibGVkID0gaXNfaHVnZXRsYl9hY2NvdW50aW5nX2VuYWJsZWQoKTtcXG4rICAgICAgICBpZiAoZW5hYmxlZCBcXHUwMDNjPSAwKSB7XFxuKyAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCBcXFwiRmFpbGVkIHRvIGVuYWJsZSBtZW1vcnlfaHVnZXRsYl9hY2NvdW50aW5nIChyZS1jaGVjayBmYWlsZWQpXFxcXG5cXFwiKTtcXG4rICAgICAgICAgICAgcmV0dXJuIDE7XFxuKyAgICAgICAgfVxcbisgICAgICAgIHByaW50ZihcXFwiU3VjY2Vzc2Z1bGx5IGVuYWJsZWQgbWVtb3J5X2h1Z2V0bGJfYWNjb3VudGluZ1xcXFxuXFxcIik7XFxuKyAgICB9IGVsc2Uge1xcbisgICAgICAgIHByaW50ZihcXFwibWVtb3J5X2h1Z2V0bGJfYWNjb3VudGluZyBpcyBhbHJlYWR5IGVuYWJsZWRcXFxcblxcXCIpO1xcbisgICAgfVxcbitcXG4rICAgIC8vIEVuYWJsZSBtZW1vcnkgY29udHJvbGxlciBpbiBzdWJ0cmVlXFxuKyAgICBpbnQgZmQgPSBvcGVuKENHUk9VUF9QQVRIIFxcXCIvY2dyb3VwLnN1YnRyZWVfY29udHJvbFxcXCIsIE9fV1JPTkxZKTtcXG4rICAgIGlmIChmZCBcXHUwMDNlPSAwKSB7XFxuKyAgICAgICAgaWYgKHdyaXRlKGZkLCBcXFwiK21lbW9yeVxcXCIsIDcpIFxcdTAwM2MgMCkge1xcbisgICAgICAgICAgICAvLyBNaWdodCBmYWlsIGlmIGFscmVhZHkgZW5hYmxlZCBvciBub3Qgc3VwcG9ydGVkLCBpZ25vcmUgZm9yIG5vd1xcbisgICAgICAgIH1cXG4rICAgICAgICBjbG9zZShmZCk7XFxuKyAgICB9XFxuK1xcbisgICAgaWYgKG1rZGlyKFRFU1RfQ0dST1VQX1BBVEgsIDA3NTUpICE9IDApIHtcXG4rICAgICAgICBpZiAoZXJybm8gIT0gRUVYSVNUKSB7XFxuKyAgICAgICAgICAgIHBlcnJvcihcXFwibWtkaXIgdGVzdF9yZXByb2R1Y2VyXFxcIik7XFxuKyAgICAgICAgICAgIHJldHVybiAxO1xcbisgICAgICAgIH1cXG4rICAgIH1cXG4rXFxuKyAgICAvLyBTZXQgbWVtb3J5IGxpbWl0IHRvIDFNQiAobGVzcyB0aGFuIDJNQiBodWdlcGFnZSlcXG4rICAgIHdyaXRlX2ZpbGUoVEVTVF9DR1JPVVBfUEFUSCBcXFwiL21lbW9yeS5tYXhcXFwiLCBcXFwiMU1cXFwiKTtcXG4rXFxuKyAgICBwaWRfdCBwaWQgPSBmb3JrKCk7XFxuKyAgICBpZiAocGlkIFxcdTAwM2MgMCkge1xcbisgICAgICAgIHBlcnJvcihcXFwiZm9ya1xcXCIpO1xcbisgICAgICAgIHJldHVybiAxO1xcbisgICAgfVxcbitcXG4rICAgIGlmIChwaWQgPT0gMCkge1xcbisgICAgICAgIC8vIENoaWxkXFxuKyAgICAgICAgLy8gTW92ZSB0byBjZ3JvdXBcXG4rICAgICAgICB3cml0ZV9maWxlKFRFU1RfQ0dST1VQX1BBVEggXFxcIi9jZ3JvdXAucHJvY3NcXFwiLCBcXFwiMFxcXCIpO1xcbitcXG4rICAgICAgICBwcmludGYoXFxcIkNoaWxkOiBBdHRlbXB0aW5nIHRvIGFsbG9jYXRlIGFuZCB0b3VjaCAyTUIgaHVnZXBhZ2UuLi5cXFxcblxcXCIpO1xcbisgICAgICAgIC8vIEFsbG9jYXRlIDJNQiBodWdlcGFnZVxcbisgICAgICAgIHNpemVfdCBzaXplID0gMiAqIDEwMjQgKiAxMDI0O1xcbisgICAgICAgIHZvaWQgKmFkZHIgPSBtbWFwKE5VTEwsIHNpemUsIFBST1RfUkVBRCB8IFBST1RfV1JJVEUsXFxuKyAgICAgICAgICAgICAgICAgICAgICAgICAgTUFQX1BSSVZBVEUgfCBNQVBfQU5PTllNT1VTIHwgTUFQX0hVR0VUTEIsIC0xLCAwKTtcXG4rICAgICAgICBpZiAoYWRkciA9PSBNQVBfRkFJTEVEKSB7XFxuKyAgICAgICAgICAgIHBlcnJvcihcXFwiQ2hpbGQ6IG1tYXAgTUFQX0hVR0VUTEJcXFwiKTtcXG4rICAgICAgICAgICAgZXhpdCgxKTtcXG4rICAgICAgICB9XFxuK1xcbisgICAgICAgIHByaW50ZihcXFwiQ2hpbGQ6IG1tYXAgc3VjY2VlZGVkIGF0ICVwLCB0b3VjaGluZyBpdCBub3cgKHNob3VsZCB0cmlnZ2VyIGZhdWx0KS4uLlxcXFxuXFxcIiwgYWRkcik7XFxuKyAgICAgICAgLy8gVGhpcyBzaG91bGQgdHJpZ2dlciB0aGUgZmF1bHQgYW5kIGNhbGwgYWxsb2NfaHVnZXRsYl9mb2xpbyAtXFx1MDAzZSBtZW1fY2dyb3VwX2NoYXJnZV9odWdldGxiXFxuKyAgICAgICAgLy8gd2hpY2ggc2hvdWxkIGZhaWwgYW5kIHRyaWdnZXIgdGhlIGJ1Zy5cXG4rICAgICAgICAqKHZvbGF0aWxlIGNoYXIgKilhZGRyID0gMTtcXG4rXFxuKyAgICAgICAgcHJpbnRmKFxcXCJDaGlsZDogU3VjY2Vzc2Z1bGx5IHRvdWNoZWQgcGFnZSAoYnVnIG5vdCB0cmlnZ2VyZWQ/KS5cXFxcblxcXCIpO1xcbisgICAgICAgIG11bm1hcChhZGRyLCBzaXplKTtcXG4rICAgICAgICBleGl0KDApO1xcbisgICAgfVxcbitcXG4rICAgIC8vIFBhcmVudFxcbisgICAgaW50IHN0YXR1cztcXG4rICAgIHdhaXRwaWQocGlkLCBcXHUwMDI2c3RhdHVzLCAwKTtcXG4rXFxuKyAgICBwcmludGYoXFxcIlBhcmVudDogQ2hpbGQgZXhpdGVkLiBDbGVhbmluZyB1cC5cXFxcblxcXCIpO1xcbisgICAgcm1kaXIoVEVTVF9DR1JPVVBfUEFUSCk7XFxuK1xcbisgICAgaWYgKFdJRlNJR05BTEVEKHN0YXR1cykpIHtcXG4rICAgICAgICBwcmludGYoXFxcIlBhcmVudDogQ2hpbGQga2lsbGVkIGJ5IHNpZ25hbCAlZCAoJXMpXFxcXG5cXFwiLFxcbisgICAgICAgICAgICAgICBXVEVSTVNJRyhzdGF0dXMpLCBzdHJzaWduYWwoV1RFUk1TSUcoc3RhdHVzKSkpO1xcbisgICAgICAgIGlmIChXVEVSTVNJRyhzdGF0dXMpID09IFNJR0JVUykge1xcbisgICAgICAgICAgICBwcmludGYoXFxcIlBhcmVudDogQ2hpbGQgZ290IFNJR0JVUyBhcyBleHBlY3RlZCAoaWYga2VybmVsIGRpZG4ndCBjcmFzaCkuXFxcXG5cXFwiKTtcXG4rICAgICAgICB9XFxuKyAgICB9IGVsc2UgaWYgKFdJRkVYSVRFRChzdGF0dXMpKSB7XFxuKyAgICAgICAgcHJpbnRmKFxcXCJQYXJlbnQ6IENoaWxkIGV4aXRlZCB3aXRoIHN0YXR1cyAlZFxcXFxuXFxcIiwgV0VYSVRTVEFUVVMoc3RhdHVzKSk7XFxuKyAgICB9XFxuK1xcbisgICAgcmV0dXJuIDA7XFxuK31cXG5kaWZmIC0tZ2l0IGEvZnMvaHVnZXRsYmZzL2lub2RlLmMgYi9mcy9odWdldGxiZnMvaW5vZGUuY1xcbmluZGV4IDIxNmUxYTBkZDBiMjM3Li44YWJlMDU3NGIxYzdlYSAxMDA2NDRcXG4tLS0gYS9mcy9odWdldGxiZnMvaW5vZGUuY1xcbisrKyBiL2ZzL2h1Z2V0bGJmcy9pbm9kZS5jXFxuQEAgLTI1LDYgKzI1LDcgQEBcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2N0eXBlLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9iYWNraW5nLWRldi5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvaHVnZXRsYi5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXFwiLi4vLi4vbW0vaHVnZXRsYl9zdWJwb29sLmhcXFwiXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9mb2xpb19iYXRjaC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvZnNfcGFyc2VyLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9tbWFuLmhcXHUwMDNlXFxuQEAgLTEwNTksNyArMTA2MCw2IEBAIHN0YXRpYyBpbnQgaHVnZXRsYmZzX3Nob3dfb3B0aW9ucyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHN0cnVjdCBkZW50cnkgKnJvb3QpXFxuIFxcdHN0cnVjdCBodWdldGxiZnNfc2JfaW5mbyAqc2JpbmZvID0gSFVHRVRMQkZTX1NCKHJvb3QtXFx1MDAzZWRfc2IpO1xcbiBcXHRzdHJ1Y3QgaHVnZXBhZ2Vfc3VicG9vbCAqc3Bvb2wgPSBzYmluZm8tXFx1MDAzZXNwb29sO1xcbiBcXHR1bnNpZ25lZCBsb25nIGhwYWdlX3NpemUgPSBodWdlX3BhZ2Vfc2l6ZShzYmluZm8tXFx1MDAzZWhzdGF0ZSk7XFxuLVxcdHVuc2lnbmVkIGhwYWdlX3NoaWZ0ID0gaHVnZV9wYWdlX3NoaWZ0KHNiaW5mby1cXHUwMDNlaHN0YXRlKTtcXG4gXFx0Y2hhciBtb2Q7XFxuIFxcbiBcXHRpZiAoIXVpZF9lcShzYmluZm8tXFx1MDAzZXVpZCwgR0xPQkFMX1JPT1RfVUlEKSlcXG5AQCAtMTA4MSwxMiArMTA4MSwxMyBAQCBzdGF0aWMgaW50IGh1Z2V0bGJmc19zaG93X29wdGlvbnMoc3RydWN0IHNlcV9maWxlICptLCBzdHJ1Y3QgZGVudHJ5ICpyb290KVxcbiBcXHR9XFxuIFxcdHNlcV9wcmludGYobSwgXFxcIixwYWdlc2l6ZT0lbHUlY1xcXCIsIGhwYWdlX3NpemUsIG1vZCk7XFxuIFxcdGlmIChzcG9vbCkge1xcbi1cXHRcXHRpZiAoc3Bvb2wtXFx1MDAzZW1heF9ocGFnZXMgIT0gLTEpXFxuLVxcdFxcdFxcdHNlcV9wcmludGYobSwgXFxcIixzaXplPSVsbHVcXFwiLFxcbi1cXHRcXHRcXHRcXHQgICAodW5zaWduZWQgbG9uZyBsb25nKXNwb29sLVxcdTAwM2VtYXhfaHBhZ2VzIFxcdTAwM2NcXHUwMDNjIGhwYWdlX3NoaWZ0KTtcXG4tXFx0XFx0aWYgKHNwb29sLVxcdTAwM2VtaW5faHBhZ2VzICE9IC0xKVxcbi1cXHRcXHRcXHRzZXFfcHJpbnRmKG0sIFxcXCIsbWluX3NpemU9JWxsdVxcXCIsXFxuLVxcdFxcdFxcdFxcdCAgICh1bnNpZ25lZCBsb25nIGxvbmcpc3Bvb2wtXFx1MDAzZW1pbl9ocGFnZXMgXFx1MDAzY1xcdTAwM2MgaHBhZ2Vfc2hpZnQpO1xcbitcXHRcXHR1bnNpZ25lZCBsb25nIGxvbmcgbWF4X3NpemUgPSBodWdlcGFnZV9zdWJwb29sX21heF9zaXplKHNwb29sKTtcXG4rXFx0XFx0dW5zaWduZWQgbG9uZyBsb25nIG1pbl9zaXplID0gaHVnZXBhZ2Vfc3VicG9vbF9taW5fc2l6ZShzcG9vbCk7XFxuK1xcbitcXHRcXHRpZiAobWF4X3NpemUgIT0gLTFVTEwpXFxuK1xcdFxcdFxcdHNlcV9wcmludGYobSwgXFxcIixzaXplPSVsbHVcXFwiLCBtYXhfc2l6ZSk7XFxuK1xcdFxcdGlmIChtaW5fc2l6ZSAhPSAtMVVMTClcXG4rXFx0XFx0XFx0c2VxX3ByaW50ZihtLCBcXFwiLG1pbl9zaXplPSVsbHVcXFwiLCBtaW5fc2l6ZSk7XFxuIFxcdH1cXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG5AQCAtMTEwNSwxNCArMTEwNiw4IEBAIHN0YXRpYyBpbnQgaHVnZXRsYmZzX3N0YXRmcyhzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBrc3RhdGZzICpidWYpXFxuIFxcdFxcdC8qIElmIG5vIGxpbWl0cyBzZXQsIGp1c3QgcmVwb3J0IDAgb3IgLTEgZm9yIG1heC9mcmVlL3VzZWRcXG4gXFx0XFx0ICogYmxvY2tzLCBsaWtlIHNpbXBsZV9zdGF0ZnMoKSAqL1xcbiBcXHRcXHRpZiAoc2JpbmZvLVxcdTAwM2VzcG9vbCkge1xcbi1cXHRcXHRcXHRsb25nIGZyZWVfcGFnZXM7XFxuLVxcbi1cXHRcXHRcXHRzcGluX2xvY2tfaXJxKFxcdTAwMjZzYmluZm8tXFx1MDAzZXNwb29sLVxcdTAwM2Vsb2NrKTtcXG4tXFx0XFx0XFx0YnVmLVxcdTAwM2VmX2Jsb2NrcyA9IHNiaW5mby1cXHUwMDNlc3Bvb2wtXFx1MDAzZW1heF9ocGFnZXM7XFxuLVxcdFxcdFxcdGZyZWVfcGFnZXMgPSBzYmluZm8tXFx1MDAzZXNwb29sLVxcdTAwM2VtYXhfaHBhZ2VzXFxuLVxcdFxcdFxcdFxcdC0gc2JpbmZvLVxcdTAwM2VzcG9vbC1cXHUwMDNldXNlZF9ocGFnZXM7XFxuLVxcdFxcdFxcdGJ1Zi1cXHUwMDNlZl9iYXZhaWwgPSBidWYtXFx1MDAzZWZfYmZyZWUgPSBmcmVlX3BhZ2VzO1xcbi1cXHRcXHRcXHRzcGluX3VubG9ja19pcnEoXFx1MDAyNnNiaW5mby1cXHUwMDNlc3Bvb2wtXFx1MDAzZWxvY2spO1xcbitcXHRcXHRcXHRidWYtXFx1MDAzZWZfYmxvY2tzID0gaHVnZXBhZ2Vfc3VicG9vbF9tYXhfaHBhZ2VzKHNiaW5mby1cXHUwMDNlc3Bvb2wpO1xcbitcXHRcXHRcXHRidWYtXFx1MDAzZWZfYmF2YWlsID0gYnVmLVxcdTAwM2VmX2JmcmVlID0gaHVnZXBhZ2Vfc3VicG9vbF9mcmVlX2hwYWdlcyhzYmluZm8tXFx1MDAzZXNwb29sKTtcXG4gXFx0XFx0XFx0YnVmLVxcdTAwM2VmX2ZpbGVzID0gc2JpbmZvLVxcdTAwM2VtYXhfaW5vZGVzO1xcbiBcXHRcXHRcXHRidWYtXFx1MDAzZWZfZmZyZWUgPSBzYmluZm8tXFx1MDAzZWZyZWVfaW5vZGVzO1xcbiBcXHRcXHR9XFxuZGlmZiAtLWdpdCBhL2h1Z2V0bGJfcmVzZXJ2ZV9wYWdlc19vdXRfcHV0X3BhZ2VzLmMgYi9odWdldGxiX3Jlc2VydmVfcGFnZXNfb3V0X3B1dF9wYWdlcy5jXFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcXG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uOWU2M2ZjODk5N2Q1N2RcXG4tLS0gL2Rldi9udWxsXFxuKysrIGIvaHVnZXRsYl9yZXNlcnZlX3BhZ2VzX291dF9wdXRfcGFnZXMuY1xcbkBAIC0wLDAgKzEsNDkgQEBcXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG4rI2RlZmluZSBfR05VX1NPVVJDRVxcbisjaW5jbHVkZSBcXHUwMDNjc3RkaW8uaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY3N0ZGxpYi5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjdW5pc3RkLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NzeXMvbW1hbi5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjZmNudGwuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2Vyci5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjZXJybm8uaFxcdTAwM2VcXG4rXFxuK2ludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndilcXG4re1xcbitcXHRjb25zdCBjaGFyICpmaWxlX3BhdGg7XFxuK1xcdHNpemVfdCBzaXplO1xcbitcXHRpbnQgZmQ7XFxuK1xcdHZvaWQgKmFkZHI7XFxuK1xcbitcXHRpZiAoYXJnYyBcXHUwMDNjIDMpIHtcXG4rXFx0XFx0ZnByaW50ZihzdGRlcnIsIFxcXCJVc2FnZTogJXMgXFx1MDAzY2h1Z2V0bGJmc19maWxlXFx1MDAzZSBcXHUwMDNjc2l6ZV9pbl9ieXRlc1xcdTAwM2VcXFxcblxcXCIsXFxuK1xcdFxcdFxcdGFyZ3ZbMF0pO1xcbitcXHRcXHRyZXR1cm4gMTtcXG4rXFx0fVxcbitcXG4rXFx0ZmlsZV9wYXRoID0gYXJndlsxXTtcXG4rXFx0c2l6ZSA9IHN0cnRvdWxsKGFyZ3ZbMl0sIE5VTEwsIDApO1xcbitcXG4rXFx0ZmQgPSBvcGVuKGZpbGVfcGF0aCwgT19DUkVBVCB8IE9fUkRXUiwgMDY2Nik7XFxuK1xcdGlmIChmZCBcXHUwMDNjIDApXFxuK1xcdFxcdGVycigxLCBcXFwib3BlblxcXCIpO1xcbitcXG4rXFx0cHJpbnRmKFxcXCJBdHRlbXB0aW5nIHRvIG1tYXAgJXp1IGJ5dGVzIHNoYXJlZCBvbiAlcy4uLlxcXFxuXFxcIiwgc2l6ZSxcXG4rXFx0ICAgICAgIGZpbGVfcGF0aCk7XFxuK1xcdGFkZHIgPSBtbWFwKE5VTEwsIHNpemUsIFBST1RfUkVBRCB8IFBST1RfV1JJVEUsIE1BUF9TSEFSRUQsIGZkLCAwKTtcXG4rXFx0aWYgKGFkZHIgPT0gTUFQX0ZBSUxFRCkge1xcbitcXHRcXHRpZiAoZXJybm8gPT0gRU5PTUVNKSB7XFxuK1xcdFxcdFxcdHByaW50ZihcXFwibW1hcCBmYWlsZWQgd2l0aCBFTk9NRU0gYXMgZXhwZWN0ZWQuXFxcXG5cXFwiKTtcXG4rXFx0XFx0XFx0Y2xvc2UoZmQpO1xcbitcXHRcXHRcXHRyZXR1cm4gMDtcXG4rXFx0XFx0fVxcbitcXHRcXHRwZXJyb3IoXFxcIm1tYXAgZmFpbGVkIHdpdGggdW5leHBlY3RlZCBlcnJvclxcXCIpO1xcbitcXHRcXHRjbG9zZShmZCk7XFxuK1xcdFxcdHJldHVybiAxO1xcbitcXHR9XFxuK1xcbitcXHRwcmludGYoXFxcIkVSUk9SOiBtbWFwIFNVQ0NFRURFRCB1bmV4cGVjdGVkbHkgYXQgJXBcXFxcblxcXCIsIGFkZHIpO1xcbitcXHRtdW5tYXAoYWRkciwgc2l6ZSk7XFxuK1xcdGNsb3NlKGZkKTtcXG4rXFx0cmV0dXJuIDE7XFxuK31cXG5kaWZmIC0tZ2l0IGEvaHVnZXRsYl9yZXNlcnZlX3BhZ2VzX291dF9wdXRfcGFnZXMuc2ggYi9odWdldGxiX3Jlc2VydmVfcGFnZXNfb3V0X3B1dF9wYWdlcy5zaFxcbm5ldyBmaWxlIG1vZGUgMTAwNzU1XFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLjAzMGUxOTE1NTM5YjRlXFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL2h1Z2V0bGJfcmVzZXJ2ZV9wYWdlc19vdXRfcHV0X3BhZ2VzLnNoXFxuQEAgLTAsMCArMSwxNTMgQEBcXG4rIyEvYmluL2Jhc2hcXG4rIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxcbitzZXQgLWVcXG4rXFxuK2lmIFsgXFxcIiRFVUlEXFxcIiAtbmUgMCBdOyB0aGVuXFxuKyAgICBlY2hvIFxcXCJQbGVhc2UgcnVuIGFzIHJvb3RcXFwiXFxuKyAgICBleGl0IDFcXG4rZmlcXG4rXFxuK1NDUklQVF9ESVI9XFxcIiQoY2QgXFxcIiQoZGlybmFtZSBcXFwiJHtCQVNIX1NPVVJDRVswXX1cXFwiKVxcXCIgXFx1MDAyNlxcdTAwMjYgcHdkKVxcXCJcXG4rY2QgXFxcIiRTQ1JJUFRfRElSXFxcIlxcbitcXG4rIyBEZXRlY3QgZGVmYXVsdCBodWdlcGFnZSBzaXplIHRvIHN1cHBvcnQgYm90aCAyTUIgYW5kIDFHQiBwYWdlcyByb2J1c3RseVxcbitocHo9JChncmVwIC1pIGh1Z2VwYWdlc2l6ZSAvcHJvYy9tZW1pbmZvIHwgYXdrICd7cHJpbnQgJDJ9JylcXG4ra2I9JGhwelxcbittYj0kKChrYiAvIDEwMjQpKVxcbitocGFnZV9zaXplX2J5dGVzPSQoKGtiICogMTAyNCkpXFxuK1xcbitocGFnZV9kaXI9XFxcImh1Z2VwYWdlcy0ke2tifWtCXFxcIlxcbitTWVNGU19QQVRIPVxcXCIvc3lzL2tlcm5lbC9tbS9odWdlcGFnZXMvJGhwYWdlX2RpclxcXCJcXG4rXFxuK01OVF9QQVRIPVxcXCIvdG1wL21udF9odWdldGxiX3JlcHJvXFxcIlxcbitGSUxFX1BBVEg9XFxcIiRNTlRfUEFUSC90ZXN0X2ZpbGVcXFwiXFxuK1xcbisjIFNhdmUgb3JpZ2luYWwgdmFsdWVzIGZvciBzYWZlIHJlc3RvcmF0aW9uXFxuK29yaWdfbnI9JChjYXQgXFxcIiRTWVNGU19QQVRIL25yX2h1Z2VwYWdlc1xcXCIpXFxuK29yaWdfb3ZlcmNvbW1pdD0kKGNhdCBcXFwiJFNZU0ZTX1BBVEgvbnJfb3ZlcmNvbW1pdF9odWdlcGFnZXNcXFwiKVxcbitcXG4rY2xlYW51cCgpIHtcXG4rICAgIGVjaG8gXFxcIkNsZWFuaW5nIHVwLi4uXFxcIlxcbisgICAgcm0gLWYgXFxcIiRGSUxFX1BBVEhcXFwiXFxuKyAgICB1bW91bnQgXFxcIiRNTlRfUEFUSFxcXCIgMlxcdTAwM2UvZGV2L251bGxcXG4rICAgIHJtZGlyIFxcXCIkTU5UX1BBVEhcXFwiIDJcXHUwMDNlL2Rldi9udWxsXFxuKyAgICBlY2hvIFxcXCIkb3JpZ19uclxcXCIgXFx1MDAzZSBcXFwiJFNZU0ZTX1BBVEgvbnJfaHVnZXBhZ2VzXFxcIlxcbisgICAgZWNobyBcXFwiJG9yaWdfb3ZlcmNvbW1pdFxcXCIgXFx1MDAzZSBcXFwiJFNZU0ZTX1BBVEgvbnJfb3ZlcmNvbW1pdF9odWdlcGFnZXNcXFwiXFxuKyAgICBlY2hvIFxcXCJDbGVhbnVwIGRvbmUuXFxcIlxcbit9XFxuK3RyYXAgY2xlYW51cCBFWElUXFxuK1xcbisjIFZlcmlmeSByZXByb2R1Y2VyIGJpbmFyeSBleGlzdHNcXG4raWYgWyAhIC14IC4vaHVnZXRsYl9yZXNlcnZlX3BhZ2VzX291dF9wdXRfcGFnZXMgXTsgdGhlblxcbisgICAgZWNobyBcXFwicmVwcm9kdWNlciBiaW5hcnkgJy4vaHVnZXRsYl9yZXNlcnZlX3BhZ2VzX291dF9wdXRfcGFnZXMnIG5vdCBmb3VuZCBvciBub3QgZXhlY3V0YWJsZS5cXFwiXFxuKyAgICBlY2hvIFxcXCJQbGVhc2UgY29tcGlsZSBpdCBmaXJzdDogZ2NjIC1zdGF0aWMgLW8gaHVnZXRsYl9yZXNlcnZlX3BhZ2VzX291dF9wdXRfcGFnZXMgaHVnZXRsYl9yZXNlcnZlX3BhZ2VzX291dF9wdXRfcGFnZXMuY1xcXCJcXG4rICAgIGV4aXQgMVxcbitmaVxcbitcXG4rIyAxLiBTZXQgZ2xvYmFsIHBvb2wgc3VjaCB0aGF0IG9ubHkgdGhlIG1vdW50LXRpbWUgcmVzZXJ2YXRpb24gY2FuIHN1Y2NlZWRcXG4rZWNobyAxIFxcdTAwM2UgXFxcIiRTWVNGU19QQVRIL25yX2h1Z2VwYWdlc1xcXCJcXG4rZWNobyAwIFxcdTAwM2UgXFxcIiRTWVNGU19QQVRIL25yX292ZXJjb21taXRfaHVnZXBhZ2VzXFxcIlxcbitcXG4raW5pdGlhbF9yZXN2PSQoY2F0IFxcXCIkU1lTRlNfUEFUSC9yZXN2X2h1Z2VwYWdlc1xcXCIpXFxuK2VjaG8gXFxcIkluaXRpYWwgcmVzdl9odWdlcGFnZXMgKGJlZm9yZSBtb3VudCk6ICRpbml0aWFsX3Jlc3ZcXFwiXFxuK1xcbisjIDIuIE1vdW50IHdpdGggbWluX3NpemUgPSAxIHBhZ2UsIG1heCBzaXplID0gMiBwYWdlc1xcbittaW5fc2l6ZV9zdHI9XFxcIiR7bWJ9TVxcXCJcXG4rbWF4X3NpemVfc3RyPVxcXCIkKChtYiAqIDIpKU1cXFwiXFxuK21tYXBfc2l6ZV9ieXRlcz0kKChocGFnZV9zaXplX2J5dGVzICogMikpXFxuK1xcbitta2RpciAtcCBcXFwiJE1OVF9QQVRIXFxcIlxcbitlY2hvIFxcXCJNb3VudGluZyBodWdldGxiZnMgd2l0aCBwYWdlc2l6ZT0ke21ifU0sIG1pbl9zaXplPSRtaW5fc2l6ZV9zdHIsIHNpemU9JG1heF9zaXplX3N0ci4uLlxcXCJcXG4raWYgISBtb3VudCAtdCBodWdldGxiZnMgLW8gXFxcInBhZ2VzaXplPSR7bWJ9TSxtaW5fc2l6ZT0kbWluX3NpemVfc3RyLHNpemU9JG1heF9zaXplX3N0clxcXCIgbm9uZSBcXFwiJE1OVF9QQVRIXFxcIjsgdGhlblxcbisgICAgZWNobyBcXFwiRmFpbGVkIHRvIG1vdW50IGh1Z2V0bGJmc1xcXCJcXG4rICAgIGV4aXQgMVxcbitmaVxcbitcXG4rcmVzdl9hZnRlcl9tb3VudD0kKGNhdCBcXFwiJFNZU0ZTX1BBVEgvcmVzdl9odWdlcGFnZXNcXFwiKVxcbitlY2hvIFxcXCJyZXN2X2h1Z2VwYWdlcyBhZnRlciBtb3VudDogJHJlc3ZfYWZ0ZXJfbW91bnRcXFwiXFxuK2V4cGVjdGVkX2FmdGVyX21vdW50PSQoKGluaXRpYWxfcmVzdiArIDEpKVxcbitpZiBbIFxcXCIkcmVzdl9hZnRlcl9tb3VudFxcXCIgIT0gXFxcIiRleHBlY3RlZF9hZnRlcl9tb3VudFxcXCIgXTsgdGhlblxcbisgICAgZWNobyBcXFwiRVJST1I6IHJlc3ZfaHVnZXBhZ2VzIGlzIG5vdCAkZXhwZWN0ZWRfYWZ0ZXJfbW91bnQgYWZ0ZXIgbW91bnQgKGFjdHVhbDogJHJlc3ZfYWZ0ZXJfbW91bnQpIVxcXCJcXG4rICAgIGV4aXQgMVxcbitmaVxcbitcXG4rIyBDaGVjayBtb3VudCBzdGF0cyBhZnRlciBtb3VudFxcbitleHBlY3RlZF9ic2l6ZT0kaHBhZ2Vfc2l6ZV9ieXRlc1xcbitic2l6ZV9TPSQoc3RhdCAtZiAtYyBcXFwiJVNcXFwiIFxcXCIkTU5UX1BBVEhcXFwiKVxcbitic2l6ZV9zPSQoc3RhdCAtZiAtYyBcXFwiJXNcXFwiIFxcXCIkTU5UX1BBVEhcXFwiKVxcbitlY2hvIFxcXCJNb3VudCBibG9jayBzaXplIGFmdGVyIG1vdW50OiAkYnNpemVfUyAvICRic2l6ZV9zIChleHBlY3RlZDogJGV4cGVjdGVkX2JzaXplKVxcXCJcXG4raWYgWyBcXFwiJGJzaXplX1NcXFwiICE9IFxcXCIkZXhwZWN0ZWRfYnNpemVcXFwiIF0gXFx1MDAyNlxcdTAwMjYgWyBcXFwiJGJzaXplX3NcXFwiICE9IFxcXCIkZXhwZWN0ZWRfYnNpemVcXFwiIF07IHRoZW5cXG4rICAgIGVjaG8gXFxcIkVSUk9SOiBVbmV4cGVjdGVkIG1vdW50IGJsb2NrIHNpemUgYWZ0ZXIgbW91bnQgKGFjdHVhbCBTOiRic2l6ZV9TIHM6JGJzaXplX3MsIGV4cGVjdGVkOiAkZXhwZWN0ZWRfYnNpemUpXFxcIlxcbisgICAgZXhpdCAxXFxuK2ZpXFxuK1xcbithY3R1YWxfc3RhdHNfbW91bnQ9JChzdGF0IC1mIC1jIFxcXCIlYiAlZiAlYVxcXCIgXFxcIiRNTlRfUEFUSFxcXCIpXFxuK2V4cGVjdGVkX3N0YXRzX21vdW50PVxcXCIyIDIgMlxcXCJcXG4rZWNobyBcXFwiTW91bnQgc3RhdHMgYWZ0ZXIgbW91bnQgKHRvdGFsIGZyZWUgYXZhaWwpOiAkYWN0dWFsX3N0YXRzX21vdW50IChleHBlY3RlZDogJGV4cGVjdGVkX3N0YXRzX21vdW50KVxcXCJcXG4raWYgWyBcXFwiJGFjdHVhbF9zdGF0c19tb3VudFxcXCIgIT0gXFxcIiRleHBlY3RlZF9zdGF0c19tb3VudFxcXCIgXTsgdGhlblxcbisgICAgZWNobyBcXFwiRVJST1I6IFVuZXhwZWN0ZWQgbW91bnQgc3RhdHMgYWZ0ZXIgbW91bnQ6ICRhY3R1YWxfc3RhdHNfbW91bnQgKGV4cGVjdGVkOiAkZXhwZWN0ZWRfc3RhdHNfbW91bnQpXFxcIlxcbisgICAgZXhpdCAxXFxuK2ZpXFxuK1xcbisjIDMuIFJ1biB0aGUgcmVwcm9kdWNlciB0byB0cmlnZ2VyIHRoZSBvdXRfcHV0X3BhZ2VzIGZhaWx1cmUgcGF0aFxcbitlY2hvIFxcXCJSdW5uaW5nIHJlcHJvZHVjZXIgKGV4cGVjdGluZyBtbWFwIGZhaWx1cmUgd2l0aCBFTk9NRU0pLi4uXFxcIlxcbitpZiAuL2h1Z2V0bGJfcmVzZXJ2ZV9wYWdlc19vdXRfcHV0X3BhZ2VzIFxcXCIkRklMRV9QQVRIXFxcIiBcXFwiJG1tYXBfc2l6ZV9ieXRlc1xcXCI7IHRoZW5cXG4rICAgIGVjaG8gXFxcIlJlcHJvZHVjZXIgZmluaXNoZWQgc3VjY2Vzc2Z1bGx5LlxcXCJcXG4rICAgIHJlc3ZfYWZ0ZXJfbW1hcD0kKGNhdCBcXFwiJFNZU0ZTX1BBVEgvcmVzdl9odWdlcGFnZXNcXFwiKVxcbisgICAgZWNobyBcXFwicmVzdl9odWdlcGFnZXMgYWZ0ZXIgZmFpbGVkIG1tYXA6ICRyZXN2X2FmdGVyX21tYXBcXFwiXFxuKyAgICBleHBlY3RlZF9hZnRlcl9tbWFwPSRleHBlY3RlZF9hZnRlcl9tb3VudFxcbisgICAgaWYgWyBcXFwiJHJlc3ZfYWZ0ZXJfbW1hcFxcXCIgPSBcXFwiJGV4cGVjdGVkX2FmdGVyX21tYXBcXFwiIF07IHRoZW5cXG4rICAgICAgICBlY2hvIFxcXCJSRVNVTFQ6IG91dF9wdXRfcGFnZXMgRVhFUkNJU0VEIChyZXN2X2h1Z2VwYWdlcyBwcmVzZXJ2ZWQgYXQgJGV4cGVjdGVkX2FmdGVyX21tYXAgYXMgZXhwZWN0ZWQpXFxcIlxcbitcXG4rICAgICAgICAjIENoZWNrIG1vdW50IHN0YXRzXFxuKyAgICAgICAgZXhwZWN0ZWRfYnNpemU9JGhwYWdlX3NpemVfYnl0ZXNcXG4rICAgICAgICBic2l6ZV9TPSQoc3RhdCAtZiAtYyBcXFwiJVNcXFwiIFxcXCIkTU5UX1BBVEhcXFwiKVxcbisgICAgICAgIGJzaXplX3M9JChzdGF0IC1mIC1jIFxcXCIlc1xcXCIgXFxcIiRNTlRfUEFUSFxcXCIpXFxuKyAgICAgICAgZWNobyBcXFwiTW91bnQgYmxvY2sgc2l6ZTogJGJzaXplX1MgLyAkYnNpemVfcyAoZXhwZWN0ZWQ6ICRleHBlY3RlZF9ic2l6ZSlcXFwiXFxuKyAgICAgICAgaWYgWyBcXFwiJGJzaXplX1NcXFwiICE9IFxcXCIkZXhwZWN0ZWRfYnNpemVcXFwiIF0gXFx1MDAyNlxcdTAwMjYgWyBcXFwiJGJzaXplX3NcXFwiICE9IFxcXCIkZXhwZWN0ZWRfYnNpemVcXFwiIF07IHRoZW5cXG4rICAgICAgICAgICAgZWNobyBcXFwiRVJST1I6IFVuZXhwZWN0ZWQgbW91bnQgYmxvY2sgc2l6ZSAoYWN0dWFsIFM6JGJzaXplX1MgczokYnNpemVfcywgZXhwZWN0ZWQ6ICRleHBlY3RlZF9ic2l6ZSlcXFwiXFxuKyAgICAgICAgICAgIGV4aXQgMVxcbisgICAgICAgIGZpXFxuK1xcbisgICAgICAgIGFjdHVhbF9zdGF0cz0kKHN0YXQgLWYgLWMgXFxcIiViICVmICVhXFxcIiBcXFwiJE1OVF9QQVRIXFxcIilcXG4rICAgICAgICBleHBlY3RlZF9zdGF0cz1cXFwiMiAyIDJcXFwiXFxuKyAgICAgICAgZWNobyBcXFwiTW91bnQgc3RhdHMgKHRvdGFsIGZyZWUgYXZhaWwpOiAkYWN0dWFsX3N0YXRzIChleHBlY3RlZDogJGV4cGVjdGVkX3N0YXRzKVxcXCJcXG4rICAgICAgICBpZiBbIFxcXCIkYWN0dWFsX3N0YXRzXFxcIiAhPSBcXFwiJGV4cGVjdGVkX3N0YXRzXFxcIiBdOyB0aGVuXFxuKyAgICAgICAgICAgIGVjaG8gXFxcIlJFU1VMVDogVW5leHBlY3RlZCBtb3VudCBzdGF0cyBhZnRlciBmYWlsZWQgbW1hcCAoRkFJTClcXFwiXFxuKyAgICAgICAgICAgIGV4aXQgMVxcbisgICAgICAgIGVsc2VcXG4rICAgICAgICAgICAgZWNobyBcXFwiUkVTVUxUOiBNb3VudCBzdGF0cyByZXN0b3JlZCB0byAkZXhwZWN0ZWRfc3RhdHMgYXMgZXhwZWN0ZWQgKFBBU1MpXFxcIlxcbisgICAgICAgIGZpXFxuKyAgICBlbHNlXFxuKyAgICAgICAgZWNobyBcXFwiUkVTVUxUOiBVbmV4cGVjdGVkIHJlc3ZfaHVnZXBhZ2VzIHZhbHVlOiAkcmVzdl9hZnRlcl9tbWFwIChleHBlY3RlZDogJGV4cGVjdGVkX2FmdGVyX21tYXApXFxcIlxcbisgICAgICAgIGV4aXQgMVxcbisgICAgZmlcXG4rZWxzZVxcbisgICAgZWNobyBcXFwiRkFJTDogUmVwcm9kdWNlciByZXR1cm5lZCBub24temVybyAobW1hcCBkaWRuJ3QgZmFpbCB3aXRoIEVOT01FTSlcXFwiXFxuKyAgICBleGl0IDFcXG4rZmlcXG4rXFxuKyMgNC4gRGlzYWJsZSB0cmFwIGFuZCBkbyBtYW51YWwgY2xlYW51cCB0byBjaGVjayBmb3IgZmluYWwgdW5tb3VudCB1bmRlcmZsb3dcXG4rdHJhcCAtIEVYSVRcXG4rXFxuK2VjaG8gXFxcIlVubW91bnRpbmcuLi5cXFwiXFxuK3Vtb3VudCBcXFwiJE1OVF9QQVRIXFxcIlxcbitybWRpciBcXFwiJE1OVF9QQVRIXFxcIlxcbitcXG4rZmluYWxfcmVzdj0kKGNhdCBcXFwiJFNZU0ZTX1BBVEgvcmVzdl9odWdlcGFnZXNcXFwiKVxcbitlY2hvIFxcXCJGaW5hbCByZXN2X2h1Z2VwYWdlcyAoYWZ0ZXIgdW5tb3VudCk6ICRmaW5hbF9yZXN2XFxcIlxcbitcXG4rIyBSZXN0b3JlIG9yaWdpbmFsIHZhbHVlc1xcbitlY2hvIFxcXCJSZXN0b3Jpbmcgb3JpZ2luYWwgaHVnZXBhZ2Ugc2V0dGluZ3MuLi5cXFwiXFxuK2VjaG8gXFxcIiRvcmlnX25yXFxcIiBcXHUwMDNlIFxcXCIkU1lTRlNfUEFUSC9ucl9odWdlcGFnZXNcXFwiXFxuK2VjaG8gXFxcIiRvcmlnX292ZXJjb21taXRcXFwiIFxcdTAwM2UgXFxcIiRTWVNGU19QQVRIL25yX292ZXJjb21taXRfaHVnZXBhZ2VzXFxcIlxcbitcXG4raWYgWyBcXFwiJGZpbmFsX3Jlc3ZcXFwiID0gXFxcIiRpbml0aWFsX3Jlc3ZcXFwiIF07IHRoZW5cXG4rICAgIGVjaG8gXFxcIlJFU1VMVDogU3RhdGUgcmVzdG9yZWQgdG8gJGluaXRpYWxfcmVzdiAob3IgY2xlYW5lZCB1cCBpZiBmaXhlZClcXFwiXFxuKyAgICBlY2hvIFxcXCJBTEwgRE9ORS5cXFwiXFxuKyAgICBleGl0IDBcXG4rZWxzZVxcbisgICAgZWNobyBcXFwiUkVTVUxUOiBVbmRlcmZsb3cvTGVhay9JbmNvcnJlY3Qgc3RhdGUgZGV0ZWN0ZWQhIChmaW5hbF9yZXN2ID0gJGZpbmFsX3Jlc3YsIGV4cGVjdGVkID0gJGluaXRpYWxfcmVzdilcXFwiXFxuKyAgICBlY2hvIFxcXCJBTEwgRE9ORS5cXFwiXFxuKyAgICBleGl0IDFcXG4rZmlcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9odWdldGxiLmggYi9pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaFxcbmluZGV4IDJhYmFmOTkzMjFlOTBkLi4wNzRhNDU5MDM5NzNlYiAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaFxcbisrKyBiL2luY2x1ZGUvbGludXgvaHVnZXRsYi5oXFxuQEAgLTE4LDYgKzE4LDcgQEBcXG4gXFxuIHN0cnVjdCBtbXVfZ2F0aGVyO1xcbiBzdHJ1Y3Qgbm9kZTtcXG4rc3RydWN0IGhzdGF0ZTtcXG4gXFxuIHZvaWQgZnJlZV9odWdlX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8pO1xcbiBcXG5AQCAtMzQsMTcgKzM1LDcgQEAgdm9pZCBmcmVlX2h1Z2VfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbyk7XFxuICAqL1xcbiAjZGVmaW5lIF9fTlJfVVNFRF9TVUJQQUdFIDNcXG4gXFxuLXN0cnVjdCBodWdlcGFnZV9zdWJwb29sIHtcXG4tXFx0c3BpbmxvY2tfdCBsb2NrO1xcbi1cXHRsb25nIGNvdW50O1xcbi1cXHRsb25nIG1heF9ocGFnZXM7XFx0LyogTWF4aW11bSBodWdlIHBhZ2VzIG9yIC0xIGlmIG5vIG1heGltdW0uICovXFxuLVxcdGxvbmcgdXNlZF9ocGFnZXM7XFx0LyogVXNlZCBjb3VudCBhZ2FpbnN0IG1heGltdW0sIGluY2x1ZGVzICovXFxuLVxcdFxcdFxcdFxcdC8qIGJvdGggYWxsb2NhdGVkIGFuZCByZXNlcnZlZCBwYWdlcy4gKi9cXG4tXFx0c3RydWN0IGhzdGF0ZSAqaHN0YXRlO1xcbi1cXHRsb25nIG1pbl9ocGFnZXM7XFx0LyogTWluaW11bSBodWdlIHBhZ2VzIG9yIC0xIGlmIG5vIG1pbmltdW0uICovXFxuLVxcdGxvbmcgcnN2X2hwYWdlcztcXHQvKiBQYWdlcyByZXNlcnZlZCBhZ2FpbnN0IGdsb2JhbCBwb29sIHRvICovXFxuLVxcdFxcdFxcdFxcdC8qIHNhdGlzZnkgbWluaW11bSBzaXplLiAqL1xcbi19O1xcbitzdHJ1Y3QgaHVnZXBhZ2Vfc3VicG9vbDtcXG4gXFxuIHN0cnVjdCByZXN2X21hcCB7XFxuIFxcdHN0cnVjdCBrcmVmIHJlZnM7XFxuQEAgLTExNCw5ICsxMDUsNyBAQCBleHRlcm4gaW50IGh1Z2V0bGJfbWF4X2hzdGF0ZSBfX3JlYWRfbW9zdGx5O1xcbiAjZGVmaW5lIGZvcl9lYWNoX2hzdGF0ZShoKSBcXFxcXFxuIFxcdGZvciAoKGgpID0gaHN0YXRlczsgKGgpIFxcdTAwM2MgXFx1MDAyNmhzdGF0ZXNbaHVnZXRsYl9tYXhfaHN0YXRlXTsgKGgpKyspXFxuIFxcbi1zdHJ1Y3QgaHVnZXBhZ2Vfc3VicG9vbCAqaHVnZXBhZ2VfbmV3X3N1YnBvb2woc3RydWN0IGhzdGF0ZSAqaCwgbG9uZyBtYXhfaHBhZ2VzLFxcbi1cXHRcXHRcXHRcXHRcXHRcXHRsb25nIG1pbl9ocGFnZXMpO1xcbi12b2lkIGh1Z2VwYWdlX3B1dF9zdWJwb29sKHN0cnVjdCBodWdlcGFnZV9zdWJwb29sICpzcG9vbCk7XFxuK2ludCBodWdldGxiX2FjY3RfbWVtb3J5KHN0cnVjdCBoc3RhdGUgKmgsIGxvbmcgZGVsdGEpO1xcbiBcXG4gdm9pZCBodWdldGxiX2R1cF92bWFfcHJpdmF0ZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSk7XFxuIHZvaWQgY2xlYXJfdm1hX3Jlc3ZfaHVnZV9wYWdlcyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSk7XFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oIGIvaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmhcXG5pbmRleCBlMWY0NmEwMDE2ZmNmZC4uMjNmYmJiYzhlMTFmMjAgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaFxcbkBAIC02NDEsNyArNjQxLDE1IEBAIHN0YXRpYyBpbmxpbmUgaW50IG1lbV9jZ3JvdXBfY2hhcmdlKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxcbiBcXHRyZXR1cm4gX19tZW1fY2dyb3VwX2NoYXJnZShmb2xpbywgbW0sIGdmcCk7XFxuIH1cXG4gXFxuLWludCBtZW1fY2dyb3VwX2NoYXJnZV9odWdldGxiKHN0cnVjdCBmb2xpbyogZm9saW8sIGdmcF90IGdmcCk7XFxuK2ludCBtZW1fY2dyb3VwX2h1Z2V0bGJfdHJ5X2NoYXJnZSh1bnNpZ25lZCBpbnQgbnJfcGFnZXMsIGdmcF90IGdmcCxcXG4rXFx0XFx0XFx0XFx0ICBzdHJ1Y3QgbWVtX2Nncm91cCAqKm1lbWNnX3AsXFxuK1xcdFxcdFxcdFxcdCAgc3RydWN0IG9ial9jZ3JvdXAgKipvYmpjZ19wKTtcXG4rdm9pZCBtZW1fY2dyb3VwX2h1Z2V0bGJfY29tbWl0X2NoYXJnZShzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbitcXHRcXHRcXHRcXHQgICAgICBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXFxuK1xcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCBvYmpfY2dyb3VwICpvYmpjZyk7XFxuK3ZvaWQgbWVtX2Nncm91cF9odWdldGxiX2NhbmNlbF9jaGFyZ2UodW5zaWduZWQgaW50IG5yX3BhZ2VzLFxcbitcXHRcXHRcXHRcXHQgICAgICBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXFxuK1xcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCBvYmpfY2dyb3VwICpvYmpjZyk7XFxuIFxcbiBpbnQgbWVtX2Nncm91cF9zd2FwaW5fY2hhcmdlX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sIHVuc2lnbmVkIHNob3J0IGlkLFxcbiBcXHRcXHRcXHRcXHQgICBzdHJ1Y3QgbW1fc3RydWN0ICptbSwgZ2ZwX3QgZ2ZwKTtcXG5AQCAtMTEyOCw5ICsxMTM2LDI1IEBAIHN0YXRpYyBpbmxpbmUgaW50IG1lbV9jZ3JvdXBfY2hhcmdlKHN0cnVjdCBmb2xpbyAqZm9saW8sXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbi1zdGF0aWMgaW5saW5lIGludCBtZW1fY2dyb3VwX2NoYXJnZV9odWdldGxiKHN0cnVjdCBmb2xpbyogZm9saW8sIGdmcF90IGdmcClcXG4rc3RhdGljIGlubGluZSBpbnQgbWVtX2Nncm91cF9odWdldGxiX3RyeV9jaGFyZ2UodW5zaWduZWQgaW50IG5yX3BhZ2VzLCBnZnBfdCBnZnAsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdHN0cnVjdCBtZW1fY2dyb3VwICoqbWVtY2dfcCxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0c3RydWN0IG9ial9jZ3JvdXAgKipvYmpjZ19wKVxcbit7XFxuK1xcdCptZW1jZ19wID0gTlVMTDtcXG4rXFx0Km9iamNnX3AgPSBOVUxMO1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rc3RhdGljIGlubGluZSB2b2lkIG1lbV9jZ3JvdXBfaHVnZXRsYl9jb21taXRfY2hhcmdlKHN0cnVjdCBmb2xpbyAqZm9saW8sXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgICBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgICBzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2cpXFxuK3tcXG4rfVxcbitcXG4rc3RhdGljIGlubGluZSB2b2lkIG1lbV9jZ3JvdXBfaHVnZXRsYl9jYW5jZWxfY2hhcmdlKHVuc2lnbmVkIGludCBucl9wYWdlcyxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBvYmpfY2dyb3VwICpvYmpjZylcXG4ge1xcbi0gICAgICAgIHJldHVybiAwO1xcbiB9XFxuIFxcbiBzdGF0aWMgaW5saW5lIGludCBtZW1fY2dyb3VwX3N3YXBpbl9jaGFyZ2VfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbyxcXG5kaWZmIC0tZ2l0IGEvbW0vTWFrZWZpbGUgYi9tbS9NYWtlZmlsZVxcbmluZGV4IGVmZjlmOWU3ZTA2MWMxLi4zOTY1Yzk1OWU1MDk5MiAxMDA2NDRcXG4tLS0gYS9tbS9NYWtlZmlsZVxcbisrKyBiL21tL01ha2VmaWxlXFxuQEAgLTc4LDcgKzc4LDcgQEAgZW5kaWZcXG4gb2JqLSQoQ09ORklHX1NXQVApXFx0Kz0gcGFnZV9pby5vIHN3YXBfc3RhdGUubyBzd2FwZmlsZS5vXFxuIG9iai0kKENPTkZJR19aU1dBUClcXHQrPSB6c3dhcC5vXFxuIG9iai0kKENPTkZJR19IQVNfRE1BKVxcdCs9IGRtYXBvb2wub1xcbi1vYmotJChDT05GSUdfSFVHRVRMQkZTKVxcdCs9IGh1Z2V0bGIubyBodWdldGxiX3N5c2ZzLm8gaHVnZXRsYl9zeXNjdGwub1xcbitvYmotJChDT05GSUdfSFVHRVRMQkZTKVxcdCs9IGh1Z2V0bGIubyBodWdldGxiX3N1YnBvb2wubyBodWdldGxiX3N5c2ZzLm8gaHVnZXRsYl9zeXNjdGwub1xcbiBpZmRlZiBDT05GSUdfQ01BXFxuIG9iai0kKENPTkZJR19IVUdFVExCRlMpXFx0Kz0gaHVnZXRsYl9jbWEub1xcbiBlbmRpZlxcbmRpZmYgLS1naXQgYS9tbS9odWdldGxiLmMgYi9tbS9odWdldGxiLmNcXG5pbmRleCA1NzEyMTJiODA4MzVlYy4uZTg3ZjI2YTNlMWYzZTQgMTAwNjQ0XFxuLS0tIGEvbW0vaHVnZXRsYi5jXFxuKysrIGIvbW0vaHVnZXRsYi5jXFxuQEAgLTM4LDYgKzM4LDggQEBcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L21tX2lubGluZS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvcGFkYXRhLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9wZ2FsbG9jLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9tZW1jb250cm9sLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcXCJodWdldGxiX3N1YnBvb2wuaFxcXCJcXG4gXFxuICNpbmNsdWRlIFxcdTAwM2Nhc20vcGFnZS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjYXNtL3RsYi5oXFx1MDAzZVxcbkBAIC0xMTMsOCArMTE1LDcgQEAgX19jYWNoZWxpbmVfYWxpZ25lZF9pbl9zbXAgREVGSU5FX1NQSU5MT0NLKGh1Z2V0bGJfbG9jayk7XFxuIHN0YXRpYyBpbnQgbnVtX2ZhdWx0X211dGV4ZXMgX19yb19hZnRlcl9pbml0O1xcbiBzdHJ1Y3QgbXV0ZXggKmh1Z2V0bGJfZmF1bHRfbXV0ZXhfdGFibGUgX19yb19hZnRlcl9pbml0O1xcbiBcXG4tLyogRm9yd2FyZCBkZWNsYXJhdGlvbiAqL1xcbi1zdGF0aWMgaW50IGh1Z2V0bGJfYWNjdF9tZW1vcnkoc3RydWN0IGhzdGF0ZSAqaCwgbG9uZyBkZWx0YSk7XFxuKy8qIEZvcndhcmQgZGVjbGFyYXRpb25zICovXFxuIHN0YXRpYyB2b2lkIGh1Z2V0bGJfdm1hX2xvY2tfZnJlZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSk7XFxuIHN0YXRpYyB2b2lkIGh1Z2V0bGJfdm1hX2xvY2tfYWxsb2Moc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpO1xcbiBzdGF0aWMgdm9pZCBfX2h1Z2V0bGJfdm1hX3VubG9ja193cml0ZV9mcmVlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKTtcXG5AQCAtMTI1LDE1NiArMTI2LDYgQEAgc3RhdGljIHZvaWQgaHVnZXRsYl91bnNoYXJlX3BtZHMoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuIFxcdFxcdHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLCBib29sIHRha2VfbG9ja3MpO1xcbiBzdGF0aWMgc3RydWN0IHJlc3ZfbWFwICp2bWFfcmVzdl9tYXAoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpO1xcbiBcXG4tc3RhdGljIGlubGluZSBib29sIHN1YnBvb2xfaXNfZnJlZShzdHJ1Y3QgaHVnZXBhZ2Vfc3VicG9vbCAqc3Bvb2wpXFxuLXtcXG4tXFx0aWYgKHNwb29sLVxcdTAwM2Vjb3VudClcXG4tXFx0XFx0cmV0dXJuIGZhbHNlO1xcbi1cXHRpZiAoc3Bvb2wtXFx1MDAzZW1heF9ocGFnZXMgIT0gLTEpXFxuLVxcdFxcdHJldHVybiBzcG9vbC1cXHUwMDNldXNlZF9ocGFnZXMgPT0gMDtcXG4tXFx0aWYgKHNwb29sLVxcdTAwM2VtaW5faHBhZ2VzICE9IC0xKVxcbi1cXHRcXHRyZXR1cm4gc3Bvb2wtXFx1MDAzZXJzdl9ocGFnZXMgPT0gc3Bvb2wtXFx1MDAzZW1pbl9ocGFnZXM7XFxuLVxcbi1cXHRyZXR1cm4gdHJ1ZTtcXG4tfVxcbi1cXG4tc3RhdGljIGlubGluZSB2b2lkIHVubG9ja19vcl9yZWxlYXNlX3N1YnBvb2woc3RydWN0IGh1Z2VwYWdlX3N1YnBvb2wgKnNwb29sLFxcbi1cXHRcXHRcXHRcXHRcXHRcXHR1bnNpZ25lZCBsb25nIGlycV9mbGFncylcXG4te1xcbi1cXHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFxcdTAwMjZzcG9vbC1cXHUwMDNlbG9jaywgaXJxX2ZsYWdzKTtcXG4tXFxuLVxcdC8qIElmIG5vIHBhZ2VzIGFyZSB1c2VkLCBhbmQgbm8gb3RoZXIgaGFuZGxlcyB0byB0aGUgc3VicG9vbFxcbi1cXHQgKiByZW1haW4sIGdpdmUgdXAgYW55IHJlc2VydmF0aW9ucyBiYXNlZCBvbiBtaW5pbXVtIHNpemUgYW5kXFxuLVxcdCAqIGZyZWUgdGhlIHN1YnBvb2wgKi9cXG4tXFx0aWYgKHN1YnBvb2xfaXNfZnJlZShzcG9vbCkpIHtcXG4tXFx0XFx0aWYgKHNwb29sLVxcdTAwM2VtaW5faHBhZ2VzICE9IC0xKVxcbi1cXHRcXHRcXHRodWdldGxiX2FjY3RfbWVtb3J5KHNwb29sLVxcdTAwM2Voc3RhdGUsXFxuLVxcdFxcdFxcdFxcdFxcdFxcdC1zcG9vbC1cXHUwMDNlbWluX2hwYWdlcyk7XFxuLVxcdFxcdGtmcmVlKHNwb29sKTtcXG4tXFx0fVxcbi19XFxuLVxcbi1zdHJ1Y3QgaHVnZXBhZ2Vfc3VicG9vbCAqaHVnZXBhZ2VfbmV3X3N1YnBvb2woc3RydWN0IGhzdGF0ZSAqaCwgbG9uZyBtYXhfaHBhZ2VzLFxcbi1cXHRcXHRcXHRcXHRcXHRcXHRsb25nIG1pbl9ocGFnZXMpXFxuLXtcXG4tXFx0c3RydWN0IGh1Z2VwYWdlX3N1YnBvb2wgKnNwb29sO1xcbi1cXG4tXFx0c3Bvb2wgPSBremFsbG9jX29iaigqc3Bvb2wpO1xcbi1cXHRpZiAoIXNwb29sKVxcbi1cXHRcXHRyZXR1cm4gTlVMTDtcXG4tXFxuLVxcdHNwaW5fbG9ja19pbml0KFxcdTAwMjZzcG9vbC1cXHUwMDNlbG9jayk7XFxuLVxcdHNwb29sLVxcdTAwM2Vjb3VudCA9IDE7XFxuLVxcdHNwb29sLVxcdTAwM2VtYXhfaHBhZ2VzID0gbWF4X2hwYWdlcztcXG4tXFx0c3Bvb2wtXFx1MDAzZWhzdGF0ZSA9IGg7XFxuLVxcdHNwb29sLVxcdTAwM2VtaW5faHBhZ2VzID0gbWluX2hwYWdlcztcXG4tXFxuLVxcdGlmIChtaW5faHBhZ2VzICE9IC0xIFxcdTAwMjZcXHUwMDI2IGh1Z2V0bGJfYWNjdF9tZW1vcnkoaCwgbWluX2hwYWdlcykpIHtcXG4tXFx0XFx0a2ZyZWUoc3Bvb2wpO1xcbi1cXHRcXHRyZXR1cm4gTlVMTDtcXG4tXFx0fVxcbi1cXHRzcG9vbC1cXHUwMDNlcnN2X2hwYWdlcyA9IG1pbl9ocGFnZXM7XFxuLVxcbi1cXHRyZXR1cm4gc3Bvb2w7XFxuLX1cXG4tXFxuLXZvaWQgaHVnZXBhZ2VfcHV0X3N1YnBvb2woc3RydWN0IGh1Z2VwYWdlX3N1YnBvb2wgKnNwb29sKVxcbi17XFxuLVxcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XFxuLVxcbi1cXHRzcGluX2xvY2tfaXJxc2F2ZShcXHUwMDI2c3Bvb2wtXFx1MDAzZWxvY2ssIGZsYWdzKTtcXG4tXFx0QlVHX09OKCFzcG9vbC1cXHUwMDNlY291bnQpO1xcbi1cXHRzcG9vbC1cXHUwMDNlY291bnQtLTtcXG4tXFx0dW5sb2NrX29yX3JlbGVhc2Vfc3VicG9vbChzcG9vbCwgZmxhZ3MpO1xcbi19XFxuLVxcbi0vKlxcbi0gKiBTdWJwb29sIGFjY291bnRpbmcgZm9yIGFsbG9jYXRpbmcgYW5kIHJlc2VydmluZyBwYWdlcy5cXG4tICogUmV0dXJuIC1FTk9NRU0gaWYgdGhlcmUgYXJlIG5vdCBlbm91Z2ggcmVzb3VyY2VzIHRvIHNhdGlzZnkgdGhlXFxuLSAqIHJlcXVlc3QuICBPdGhlcndpc2UsIHJldHVybiB0aGUgbnVtYmVyIG9mIHBhZ2VzIGJ5IHdoaWNoIHRoZVxcbi0gKiBnbG9iYWwgcG9vbHMgbXVzdCBiZSBhZGp1c3RlZCAodXB3YXJkKS4gIFRoZSByZXR1cm5lZCB2YWx1ZSBtYXlcXG4tICogb25seSBiZSBkaWZmZXJlbnQgdGhhbiB0aGUgcGFzc2VkIHZhbHVlIChkZWx0YSkgaW4gdGhlIGNhc2Ugd2hlcmVcXG4tICogYSBzdWJwb29sIG1pbmltdW0gc2l6ZSBtdXN0IGJlIG1haW50YWluZWQuXFxuLSAqL1xcbi1zdGF0aWMgbG9uZyBodWdlcGFnZV9zdWJwb29sX2dldF9wYWdlcyhzdHJ1Y3QgaHVnZXBhZ2Vfc3VicG9vbCAqc3Bvb2wsXFxuLVxcdFxcdFxcdFxcdCAgICAgIGxvbmcgZGVsdGEpXFxuLXtcXG4tXFx0bG9uZyByZXQgPSBkZWx0YTtcXG4tXFxuLVxcdGlmICghc3Bvb2wpXFxuLVxcdFxcdHJldHVybiByZXQ7XFxuLVxcbi1cXHRzcGluX2xvY2tfaXJxKFxcdTAwMjZzcG9vbC1cXHUwMDNlbG9jayk7XFxuLVxcbi1cXHRpZiAoc3Bvb2wtXFx1MDAzZW1heF9ocGFnZXMgIT0gLTEpIHtcXHRcXHQvKiBtYXhpbXVtIHNpemUgYWNjb3VudGluZyAqL1xcbi1cXHRcXHRpZiAoKHNwb29sLVxcdTAwM2V1c2VkX2hwYWdlcyArIGRlbHRhKSBcXHUwMDNjPSBzcG9vbC1cXHUwMDNlbWF4X2hwYWdlcylcXG4tXFx0XFx0XFx0c3Bvb2wtXFx1MDAzZXVzZWRfaHBhZ2VzICs9IGRlbHRhO1xcbi1cXHRcXHRlbHNlIHtcXG4tXFx0XFx0XFx0cmV0ID0gLUVOT01FTTtcXG4tXFx0XFx0XFx0Z290byB1bmxvY2tfcmV0O1xcbi1cXHRcXHR9XFxuLVxcdH1cXG4tXFxuLVxcdC8qIG1pbmltdW0gc2l6ZSBhY2NvdW50aW5nICovXFxuLVxcdGlmIChzcG9vbC1cXHUwMDNlbWluX2hwYWdlcyAhPSAtMSBcXHUwMDI2XFx1MDAyNiBzcG9vbC1cXHUwMDNlcnN2X2hwYWdlcykge1xcbi1cXHRcXHRpZiAoZGVsdGEgXFx1MDAzZSBzcG9vbC1cXHUwMDNlcnN2X2hwYWdlcykge1xcbi1cXHRcXHRcXHQvKlxcbi1cXHRcXHRcXHQgKiBBc2tpbmcgZm9yIG1vcmUgcmVzZXJ2ZXMgdGhhbiB0aG9zZSBhbHJlYWR5IHRha2VuIG9uXFxuLVxcdFxcdFxcdCAqIGJlaGFsZiBvZiBzdWJwb29sLiAgUmV0dXJuIGRpZmZlcmVuY2UuXFxuLVxcdFxcdFxcdCAqL1xcbi1cXHRcXHRcXHRyZXQgPSBkZWx0YSAtIHNwb29sLVxcdTAwM2Vyc3ZfaHBhZ2VzO1xcbi1cXHRcXHRcXHRzcG9vbC1cXHUwMDNlcnN2X2hwYWdlcyA9IDA7XFxuLVxcdFxcdH0gZWxzZSB7XFxuLVxcdFxcdFxcdHJldCA9IDA7XFx0LyogcmVzZXJ2ZXMgYWxyZWFkeSBhY2NvdW50ZWQgZm9yICovXFxuLVxcdFxcdFxcdHNwb29sLVxcdTAwM2Vyc3ZfaHBhZ2VzIC09IGRlbHRhO1xcbi1cXHRcXHR9XFxuLVxcdH1cXG4tXFxuLXVubG9ja19yZXQ6XFxuLVxcdHNwaW5fdW5sb2NrX2lycShcXHUwMDI2c3Bvb2wtXFx1MDAzZWxvY2spO1xcbi1cXHRyZXR1cm4gcmV0O1xcbi19XFxuLVxcbi0vKlxcbi0gKiBTdWJwb29sIGFjY291bnRpbmcgZm9yIGZyZWVpbmcgYW5kIHVucmVzZXJ2aW5nIHBhZ2VzLlxcbi0gKiBSZXR1cm4gdGhlIG51bWJlciBvZiBnbG9iYWwgcGFnZSByZXNlcnZhdGlvbnMgdGhhdCBtdXN0IGJlIGRyb3BwZWQuXFxuLSAqIFRoZSByZXR1cm4gdmFsdWUgbWF5IG9ubHkgYmUgZGlmZmVyZW50IHRoYW4gdGhlIHBhc3NlZCB2YWx1ZSAoZGVsdGEpXFxuLSAqIGluIHRoZSBjYXNlIHdoZXJlIGEgc3VicG9vbCBtaW5pbXVtIHNpemUgbXVzdCBiZSBtYWludGFpbmVkLlxcbi0gKi9cXG4tc3RhdGljIGxvbmcgaHVnZXBhZ2Vfc3VicG9vbF9wdXRfcGFnZXMoc3RydWN0IGh1Z2VwYWdlX3N1YnBvb2wgKnNwb29sLFxcbi1cXHRcXHRcXHRcXHQgICAgICAgbG9uZyBkZWx0YSlcXG4te1xcbi1cXHRsb25nIHJldCA9IGRlbHRhO1xcbi1cXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xcbi1cXG4tXFx0aWYgKCFzcG9vbClcXG4tXFx0XFx0cmV0dXJuIGRlbHRhO1xcbi1cXG4tXFx0c3Bpbl9sb2NrX2lycXNhdmUoXFx1MDAyNnNwb29sLVxcdTAwM2Vsb2NrLCBmbGFncyk7XFxuLVxcbi1cXHRpZiAoc3Bvb2wtXFx1MDAzZW1heF9ocGFnZXMgIT0gLTEpXFx0XFx0LyogbWF4aW11bSBzaXplIGFjY291bnRpbmcgKi9cXG4tXFx0XFx0c3Bvb2wtXFx1MDAzZXVzZWRfaHBhZ2VzIC09IGRlbHRhO1xcbi1cXG4tXFx0IC8qIG1pbmltdW0gc2l6ZSBhY2NvdW50aW5nICovXFxuLVxcdGlmIChzcG9vbC1cXHUwMDNlbWluX2hwYWdlcyAhPSAtMSBcXHUwMDI2XFx1MDAyNiBzcG9vbC1cXHUwMDNldXNlZF9ocGFnZXMgXFx1MDAzYyBzcG9vbC1cXHUwMDNlbWluX2hwYWdlcykge1xcbi1cXHRcXHRpZiAoc3Bvb2wtXFx1MDAzZXJzdl9ocGFnZXMgKyBkZWx0YSBcXHUwMDNjPSBzcG9vbC1cXHUwMDNlbWluX2hwYWdlcylcXG4tXFx0XFx0XFx0cmV0ID0gMDtcXG4tXFx0XFx0ZWxzZVxcbi1cXHRcXHRcXHRyZXQgPSBzcG9vbC1cXHUwMDNlcnN2X2hwYWdlcyArIGRlbHRhIC0gc3Bvb2wtXFx1MDAzZW1pbl9ocGFnZXM7XFxuLVxcbi1cXHRcXHRzcG9vbC1cXHUwMDNlcnN2X2hwYWdlcyArPSBkZWx0YTtcXG4tXFx0XFx0aWYgKHNwb29sLVxcdTAwM2Vyc3ZfaHBhZ2VzIFxcdTAwM2Ugc3Bvb2wtXFx1MDAzZW1pbl9ocGFnZXMpXFxuLVxcdFxcdFxcdHNwb29sLVxcdTAwM2Vyc3ZfaHBhZ2VzID0gc3Bvb2wtXFx1MDAzZW1pbl9ocGFnZXM7XFxuLVxcdH1cXG4tXFxuLVxcdC8qXFxuLVxcdCAqIElmIGh1Z2V0bGJmc19wdXRfc3VwZXIgY291bGRuJ3QgZnJlZSBzcG9vbCBkdWUgdG8gYW4gb3V0c3RhbmRpbmdcXG4tXFx0ICogcXVvdGEgcmVmZXJlbmNlLCBmcmVlIGl0IG5vdy5cXG4tXFx0ICovXFxuLVxcdHVubG9ja19vcl9yZWxlYXNlX3N1YnBvb2woc3Bvb2wsIGZsYWdzKTtcXG4tXFxuLVxcdHJldHVybiByZXQ7XFxuLX1cXG4tXFxuIHN0YXRpYyBpbmxpbmUgc3RydWN0IGh1Z2VwYWdlX3N1YnBvb2wgKnN1YnBvb2xfdm1hKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxcbiB7XFxuIFxcdHJldHVybiBzdWJwb29sX2lub2RlKGZpbGVfaW5vZGUodm1hLVxcdTAwM2V2bV9maWxlKSk7XFxuQEAgLTI4NTgsMTEgKzI3MDksMTMgQEAgc3RydWN0IGZvbGlvICphbGxvY19odWdldGxiX2ZvbGlvKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbiBcXHRzdHJ1Y3QgaHVnZXBhZ2Vfc3VicG9vbCAqc3Bvb2wgPSBzdWJwb29sX3ZtYSh2bWEpO1xcbiBcXHRzdHJ1Y3QgaHN0YXRlICpoID0gaHN0YXRlX3ZtYSh2bWEpO1xcbiBcXHRzdHJ1Y3QgZm9saW8gKmZvbGlvO1xcbi1cXHRsb25nIHJldHZhbCwgZ2JsX2NoZywgZ2JsX3Jlc2VydmU7XFxuK1xcdGxvbmcgcmV0dmFsLCBnYmxfY2hnO1xcbiBcXHRtYXBfY2hnX3N0YXRlIG1hcF9jaGc7XFxuIFxcdGludCByZXQsIGlkeDtcXG4gXFx0c3RydWN0IGh1Z2V0bGJfY2dyb3VwICpoX2NnID0gTlVMTDtcXG4gXFx0c3RydWN0IGh1Z2V0bGJfY2dyb3VwICpoX2NnX3JzdmQgPSBOVUxMO1xcbitcXHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtX2NnID0gTlVMTDtcXG4rXFx0c3RydWN0IG9ial9jZ3JvdXAgKm9ial9jZyA9IE5VTEw7XFxuIFxcdGdmcF90IGdmcCA9IGh0bGJfYWxsb2NfbWFzayhoKSB8IF9fR0ZQX1JFVFJZX01BWUZBSUw7XFxuIFxcbiBcXHRpZHggPSBoc3RhdGVfaW5kZXgoaCk7XFxuQEAgLTI5MjIsNiArMjc3NSwxMSBAQCBzdHJ1Y3QgZm9saW8gKmFsbG9jX2h1Z2V0bGJfZm9saW8oc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuIFxcdGlmIChyZXQpXFxuIFxcdFxcdGdvdG8gb3V0X3VuY2hhcmdlX2Nncm91cF9yZXNlcnZhdGlvbjtcXG4gXFxuK1xcdHJldCA9IG1lbV9jZ3JvdXBfaHVnZXRsYl90cnlfY2hhcmdlKHBhZ2VzX3Blcl9odWdlX3BhZ2UoaCksIGdmcCxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgIFxcdTAwMjZtZW1fY2csIFxcdTAwMjZvYmpfY2cpO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRnb3RvIG91dF91bmNoYXJnZV9jZ3JvdXA7XFxuK1xcbiBcXHRzcGluX2xvY2tfaXJxKFxcdTAwMjZodWdldGxiX2xvY2spO1xcbiBcXHQvKlxcbiBcXHQgKiBnbGJfY2hnIGlzIHBhc3NlZCB0byBpbmRpY2F0ZSB3aGV0aGVyIG9yIG5vdCBhIHBhZ2UgbXVzdCBiZSB0YWtlblxcbkBAIC0yOTMzLDcgKzI3OTEsNyBAQCBzdHJ1Y3QgZm9saW8gKmFsbG9jX2h1Z2V0bGJfZm9saW8oc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuIFxcdFxcdHNwaW5fdW5sb2NrX2lycShcXHUwMDI2aHVnZXRsYl9sb2NrKTtcXG4gXFx0XFx0Zm9saW8gPSBhbGxvY19idWRkeV9odWdldGxiX2ZvbGlvX3dpdGhfbXBvbChoLCB2bWEsIGFkZHIpO1xcbiBcXHRcXHRpZiAoIWZvbGlvKVxcbi1cXHRcXHRcXHRnb3RvIG91dF91bmNoYXJnZV9jZ3JvdXA7XFxuK1xcdFxcdFxcdGdvdG8gb3V0X3VuY2hhcmdlX2Nncm91cF9tZW1jZztcXG4gXFx0XFx0c3Bpbl9sb2NrX2lycShcXHUwMDI2aHVnZXRsYl9sb2NrKTtcXG4gXFx0XFx0bGlzdF9hZGQoXFx1MDAyNmZvbGlvLVxcdTAwM2VscnUsIFxcdTAwMjZoLVxcdTAwM2VodWdlcGFnZV9hY3RpdmVsaXN0KTtcXG4gXFx0XFx0Zm9saW9fcmVmX3VuZnJlZXplKGZvbGlvLCAxKTtcXG5AQCAtMjk2MCw2ICsyODE4LDkgQEAgc3RydWN0IGZvbGlvICphbGxvY19odWdldGxiX2ZvbGlvKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbiBcXG4gXFx0c3Bpbl91bmxvY2tfaXJxKFxcdTAwMjZodWdldGxiX2xvY2spO1xcbiBcXG4rXFx0bWVtX2Nncm91cF9odWdldGxiX2NvbW1pdF9jaGFyZ2UoZm9saW8sIG1lbV9jZywgb2JqX2NnKTtcXG4rXFx0bHJ1dmVjX3N0YXRfbW9kX2ZvbGlvKGZvbGlvLCBOUl9IVUdFVExCLCBwYWdlc19wZXJfaHVnZV9wYWdlKGgpKTtcXG4rXFxuIFxcdGh1Z2V0bGJfc2V0X2ZvbGlvX3N1YnBvb2woZm9saW8sIHNwb29sKTtcXG4gXFxuIFxcdGlmIChtYXBfY2hnICE9IE1BUF9DSEdfRU5GT1JDRUQpIHtcXG5AQCAtMjk4NywyMSArMjg0OCwxMCBAQCBzdHJ1Y3QgZm9saW8gKmFsbG9jX2h1Z2V0bGJfZm9saW8oc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuIFxcdFxcdH1cXG4gXFx0fVxcbiBcXG4tXFx0cmV0ID0gbWVtX2Nncm91cF9jaGFyZ2VfaHVnZXRsYihmb2xpbywgZ2ZwKTtcXG4tXFx0LypcXG4tXFx0ICogVW5jb25kaXRpb25hbGx5IGluY3JlbWVudCBOUl9IVUdFVExCIGhlcmUuIElmIGl0IHR1cm5zIG91dCB0aGF0XFxuLVxcdCAqIG1lbV9jZ3JvdXBfY2hhcmdlX2h1Z2V0bGIgZmFpbGVkLCB0aGVuIGltbWVkaWF0ZWx5IGZyZWUgdGhlIHBhZ2UgYW5kXFxuLVxcdCAqIGRlY3JlbWVudCBOUl9IVUdFVExCLlxcbi1cXHQgKi9cXG4tXFx0bHJ1dmVjX3N0YXRfbW9kX2ZvbGlvKGZvbGlvLCBOUl9IVUdFVExCLCBwYWdlc19wZXJfaHVnZV9wYWdlKGgpKTtcXG4tXFxuLVxcdGlmIChyZXQgPT0gLUVOT01FTSkge1xcbi1cXHRcXHRmcmVlX2h1Z2VfZm9saW8oZm9saW8pO1xcbi1cXHRcXHRyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTtcXG4tXFx0fVxcbi1cXG4gXFx0cmV0dXJuIGZvbGlvO1xcbiBcXG4rb3V0X3VuY2hhcmdlX2Nncm91cF9tZW1jZzpcXG4rXFx0bWVtX2Nncm91cF9odWdldGxiX2NhbmNlbF9jaGFyZ2UocGFnZXNfcGVyX2h1Z2VfcGFnZShoKSwgbWVtX2NnLCBvYmpfY2cpO1xcbiBvdXRfdW5jaGFyZ2VfY2dyb3VwOlxcbiBcXHRodWdldGxiX2Nncm91cF91bmNoYXJnZV9jZ3JvdXAoaWR4LCBwYWdlc19wZXJfaHVnZV9wYWdlKGgpLCBoX2NnKTtcXG4gb3V0X3VuY2hhcmdlX2Nncm91cF9yZXNlcnZhdGlvbjpcXG5AQCAtMzAwOSwxOSArMjg1OSwyOCBAQCBzdHJ1Y3QgZm9saW8gKmFsbG9jX2h1Z2V0bGJfZm9saW8oc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuIFxcdFxcdGh1Z2V0bGJfY2dyb3VwX3VuY2hhcmdlX2Nncm91cF9yc3ZkKGlkeCwgcGFnZXNfcGVyX2h1Z2VfcGFnZShoKSxcXG4gXFx0XFx0XFx0XFx0XFx0XFx0ICAgIGhfY2dfcnN2ZCk7XFxuIG91dF9zdWJwb29sX3B1dDpcXG4tXFx0LypcXG4tXFx0ICogcHV0IHBhZ2UgdG8gc3VicG9vbCBpZmYgdGhlIHF1b3RhIG9mIHN1YnBvb2wncyByc3ZfaHBhZ2VzIGlzIHVzZWRcXG4tXFx0ICogZHVyaW5nIGh1Z2VwYWdlX3N1YnBvb2xfZ2V0X3BhZ2VzLlxcbi1cXHQgKi9cXG4tXFx0aWYgKG1hcF9jaGcgXFx1MDAyNlxcdTAwMjYgIWdibF9jaGcpIHtcXG4tXFx0XFx0Z2JsX3Jlc2VydmUgPSBodWdlcGFnZV9zdWJwb29sX3B1dF9wYWdlcyhzcG9vbCwgMSk7XFxuLVxcdFxcdGh1Z2V0bGJfYWNjdF9tZW1vcnkoaCwgLWdibF9yZXNlcnZlKTtcXG4rXFx0aWYgKG1hcF9jaGcpIHtcXG4rXFx0XFx0bG9uZyBnYmxfcmVzZXJ2ZSA9IGh1Z2VwYWdlX3N1YnBvb2xfcHV0X3BhZ2VzKHNwb29sLCAxKTtcXG4rXFxuK1xcdFxcdGlmICghZ2JsX2NoZylcXG4rXFx0XFx0XFx0aHVnZXRsYl9hY2N0X21lbW9yeShoLCAtZ2JsX3Jlc2VydmUpO1xcbiBcXHR9XFxuIFxcbiBcXG4gb3V0X2VuZF9yZXNlcnZhdGlvbjpcXG4gXFx0aWYgKG1hcF9jaGcgIT0gTUFQX0NIR19FTkZPUkNFRClcXG4gXFx0XFx0dm1hX2VuZF9yZXNlcnZhdGlvbihoLCB2bWEsIGFkZHIpO1xcbitcXG4rXFx0LypcXG4rXFx0ICogUmV0dXJuIC1FTk9TUEMgd2hlbiB0aGlzIGZ1bmN0aW9uIGZhaWxzIHRvIGFsbG9jYXRlIG9yXFxuK1xcdCAqIGNoYXJnZSBhIGh1Z2UgcGFnZS4gSWYgYSBzdGFuZGFyZCAoUEFHRV9TSVpFKSBwYWdlXFxuK1xcdCAqIGFsbG9jYXRpb24gZmFpbHMsIHRoZSBPT00ga2lsbGVyIGlzIGdpdmVuIGEgY2hhbmNlIHRvIHJ1bixcXG4rXFx0ICogd2hpY2ggbWF5IHJlc29sdmUgdGhlIGZhaWx1cmUgb24gcmV0cnkuIEhvd2V2ZXIsIGZvclxcbitcXHQgKiBIdWdlVExCIGFsbG9jYXRpb25zLCB0aGUgT09NIGtpbGxlciBpcyBub3QgdHJpZ2dlcmVkLlxcbitcXHQgKiBSZXR1cm5pbmcgLUVOT01FTSAob3IgYW55dGhpbmcgcmVzdWx0aW5nIGluIFZNX0ZBVUxUX09PTSlcXG4rXFx0ICogd291bGQgbGVhayB0byB0aGUgI1BGIGhhbmRsZXIsIGNhdXNpbmcgaXQgdG8gbG9vcFxcbitcXHQgKiBpbmRlZmluaXRlbHkgcmV0cnlpbmcgdGhlIGZhdWx0LlxcbitcXHQgKi9cXG4gXFx0cmV0dXJuIEVSUl9QVFIoLUVOT1NQQyk7XFxuIH1cXG4gXFxuQEAgLTQ1OTMsNyArNDQ1Miw3IEBAIHVuc2lnbmVkIGxvbmcgaHVnZXRsYl90b3RhbF9wYWdlcyh2b2lkKVxcbiBcXHRyZXR1cm4gbnJfdG90YWxfcGFnZXM7XFxuIH1cXG4gXFxuLXN0YXRpYyBpbnQgaHVnZXRsYl9hY2N0X21lbW9yeShzdHJ1Y3QgaHN0YXRlICpoLCBsb25nIGRlbHRhKVxcbitpbnQgaHVnZXRsYl9hY2N0X21lbW9yeShzdHJ1Y3QgaHN0YXRlICpoLCBsb25nIGRlbHRhKVxcbiB7XFxuIFxcdGludCByZXQgPSAtRU5PTUVNO1xcbiBcXG5AQCAtNjU0Miw3ICs2NDAxLDcgQEAgbG9uZyBodWdldGxiX3Jlc2VydmVfcGFnZXMoc3RydWN0IGlub2RlICppbm9kZSxcXG4gXFx0XFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuIFxcdFxcdHZtYV9mbGFnc190IHZtYV9mbGFncylcXG4ge1xcbi1cXHRsb25nIGNoZyA9IC0xLCBhZGQgPSAtMSwgc3Bvb2xfcmVzdiwgZ2JsX3Jlc3Y7XFxuK1xcdGxvbmcgY2hnID0gLTEsIGFkZCA9IC0xLCBnYmxfcmVzdjtcXG4gXFx0c3RydWN0IGhzdGF0ZSAqaCA9IGhzdGF0ZV9pbm9kZShpbm9kZSk7XFxuIFxcdHN0cnVjdCBodWdlcGFnZV9zdWJwb29sICpzcG9vbCA9IHN1YnBvb2xfaW5vZGUoaW5vZGUpO1xcbiBcXHRzdHJ1Y3QgcmVzdl9tYXAgKnJlc3ZfbWFwO1xcbkBAIC02Njg3LDI2ICs2NTQ2LDIxIEBAIGxvbmcgaHVnZXRsYl9yZXNlcnZlX3BhZ2VzKHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuIFxcdH1cXG4gXFx0cmV0dXJuIGNoZztcXG4gXFxuLW91dF9wdXRfcGFnZXM6XFxuLVxcdHNwb29sX3Jlc3YgPSBjaGcgLSBnYmxfcmVzZXJ2ZTtcXG4tXFx0aWYgKHNwb29sX3Jlc3YpIHtcXG4tXFx0XFx0LyogcHV0IHN1YiBwb29sJ3MgcmVzZXJ2YXRpb24gYmFjaywgY2hnIC0gZ2JsX3Jlc2VydmUgKi9cXG4tXFx0XFx0Z2JsX3Jlc3YgPSBodWdlcGFnZV9zdWJwb29sX3B1dF9wYWdlcyhzcG9vbCwgc3Bvb2xfcmVzdik7XFxuLVxcdFxcdC8qXFxuLVxcdFxcdCAqIHN1YnBvb2wncyByZXNlcnZlZCBwYWdlcyBjYW4gbm90IGJlIHB1dCBiYWNrIGR1ZSB0byByYWNlLFxcbi1cXHRcXHQgKiByZXR1cm4gdG8gaHN0YXRlLlxcbi1cXHRcXHQgKi9cXG4tXFx0XFx0aHVnZXRsYl9hY2N0X21lbW9yeShoLCAtZ2JsX3Jlc3YpO1xcbi1cXHR9XFxuLVxcdC8qIFJlc3RvcmUgdXNlZF9ocGFnZXMgZm9yIHBhZ2VzIHRoYXQgZmFpbGVkIGdsb2JhbCByZXNlcnZhdGlvbiAqL1xcbi1cXHRpZiAoZ2JsX3Jlc2VydmUgXFx1MDAyNlxcdTAwMjYgc3Bvb2wpIHtcXG4tXFx0XFx0dW5zaWduZWQgbG9uZyBmbGFncztcXG4rIG91dF9wdXRfcGFnZXM6XFxuK1xcdC8qXFxuK1xcdCAqIFJldHVybiBhbGwgdGhhdCB3YXMgcmVxdWVzdGVkIGZyb20gdGhlIHN1YnBvb2wsIGxldCBzdWJwb29sXFxuK1xcdCAqIHRlbGwgdXMgdGhlIG5ldyBudW1iZXIgb2YgcmVzZXJ2YXRpb25zIHRoYXQgbmVlZCB0byBiZVxcbitcXHQgKiByZXR1cm5lZCB0byB0aGUgZ2xvYmFsIHBvb2wuXFxuK1xcdCAqL1xcbitcXHRnYmxfcmVzdiA9IGh1Z2VwYWdlX3N1YnBvb2xfcHV0X3BhZ2VzKHNwb29sLCBjaGcpO1xcbitcXHQvKlxcbitcXHQgKiBUaGVyZSBtYXkgYmUgYSBkaWZmZXJlbmNlIGJldHdlZW4gdGhlIG51bWJlciBvZlxcbitcXHQgKiByZXNlcnZhdGlvbnMgdG8gY29uc3VtZSBhbmQgdGhlIG51bWJlciB0byByZXN0b3JlIG5vdyBpZlxcbitcXHQgKiB0aGVyZSBhcmUgbXVsdGlwbGUgdGhyZWFkcyBpbnRlcmFjdGluZyB3aXRoIHRoZSBzdWJwb29sIC1cXG4rXFx0ICogcmVzdG9yZSB0aGUgZGlmZmVyZW5jZS5cXG4rXFx0ICovXFxuK1xcdGh1Z2V0bGJfYWNjdF9tZW1vcnkoaCwgLShnYmxfcmVzdiAtIGdibF9yZXNlcnZlKSk7XFxuIFxcbi1cXHRcXHRzcGluX2xvY2tfaXJxc2F2ZShcXHUwMDI2c3Bvb2wtXFx1MDAzZWxvY2ssIGZsYWdzKTtcXG4tXFx0XFx0aWYgKHNwb29sLVxcdTAwM2VtYXhfaHBhZ2VzICE9IC0xKVxcbi1cXHRcXHRcXHRzcG9vbC1cXHUwMDNldXNlZF9ocGFnZXMgLT0gZ2JsX3Jlc2VydmU7XFxuLVxcdFxcdHVubG9ja19vcl9yZWxlYXNlX3N1YnBvb2woc3Bvb2wsIGZsYWdzKTtcXG4tXFx0fVxcbiBvdXRfdW5jaGFyZ2VfY2dyb3VwOlxcbiBcXHRodWdldGxiX2Nncm91cF91bmNoYXJnZV9jZ3JvdXBfcnN2ZChoc3RhdGVfaW5kZXgoaCksXFxuIFxcdFxcdFxcdFxcdFxcdCAgICBjaGcgKiBwYWdlc19wZXJfaHVnZV9wYWdlKGgpLCBoX2NnKTtcXG5kaWZmIC0tZ2l0IGEvbW0vaHVnZXRsYl9zdWJwb29sLmMgYi9tbS9odWdldGxiX3N1YnBvb2wuY1xcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLmViNTQ3MmJkZjIxOTI0XFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL21tL2h1Z2V0bGJfc3VicG9vbC5jXFxuQEAgLTAsMCArMSwyMjMgQEBcXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG4rLypcXG4rICogU3VicG9vbCBhbmQgcmVzZXJ2ZSBhY2NvdW50aW5nIGZvciBIdWdlVExCIGZvbGlvcy5cXG4rICogRXh0cmFjdGVkIGZyb20gbW0vaHVnZXRsYi5jXFxuKyAqL1xcbitcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3R5cGVzLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9rZXJuZWwuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3NsYWIuaFxcdTAwM2VcXG4rI2lmZGVmIF9fS0VSTkVMX19cXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2h1Z2V0bGIuaFxcdTAwM2VcXG4rI2VuZGlmXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9zcGlubG9jay5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvYnVnLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcXCJodWdldGxiX3N1YnBvb2wuaFxcXCJcXG4rXFxuK3N0cnVjdCBodWdlcGFnZV9zdWJwb29sIHtcXG4rXFx0c3BpbmxvY2tfdCBsb2NrO1xcbitcXHRsb25nIGNvdW50O1xcbitcXHRsb25nIG1heF9ocGFnZXM7XFx0LyogTWF4aW11bSBodWdlIHBhZ2VzIG9yIC0xIGlmIG5vIG1heGltdW0uICovXFxuK1xcdGxvbmcgdXNlZF9ocGFnZXM7XFx0LyogVXNlZCBwYWdlIGNvdW50LCBpbmNsdWRlcyBib3RoICovXFxuK1xcdFxcdFxcdFxcdC8qIGFsbG9jYXRlZCBhbmQgcmVzZXJ2ZWQgcGFnZXMuICovXFxuK1xcdHN0cnVjdCBoc3RhdGUgKmhzdGF0ZTtcXG4rXFx0bG9uZyBtaW5faHBhZ2VzO1xcdC8qIE1pbmltdW0gaHVnZSBwYWdlcyBvciAtMSBpZiBubyBtaW5pbXVtLiAqL1xcbitcXHRsb25nIHJzdl9ocGFnZXM7XFx0LyogUGFnZXMgcmVzZXJ2ZWQgYWdhaW5zdCBnbG9iYWwgcG9vbCB0byAqL1xcbitcXHRcXHRcXHRcXHQvKiBzYXRpc2Z5IG1pbmltdW0gc2l6ZS4gKi9cXG4rfTtcXG4rXFxuK3N0YXRpYyBpbmxpbmUgYm9vbCBzdWJwb29sX2lzX2ZyZWUoc3RydWN0IGh1Z2VwYWdlX3N1YnBvb2wgKnNwb29sKVxcbit7XFxuK1xcdGlmIChzcG9vbC1cXHUwMDNlY291bnQpXFxuK1xcdFxcdHJldHVybiBmYWxzZTtcXG4rXFxuK1xcdHJldHVybiBzcG9vbC1cXHUwMDNldXNlZF9ocGFnZXMgPT0gMDtcXG4rfVxcbitcXG4rc3RhdGljIGlubGluZSB2b2lkIHVubG9ja19vcl9yZWxlYXNlX3N1YnBvb2woc3RydWN0IGh1Z2VwYWdlX3N1YnBvb2wgKnNwb29sLFxcbitcXHRcXHRcXHRcXHRcXHRcXHR1bnNpZ25lZCBsb25nIGlycV9mbGFncylcXG4re1xcbitcXHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFxcdTAwMjZzcG9vbC1cXHUwMDNlbG9jaywgaXJxX2ZsYWdzKTtcXG4rXFxuK1xcdC8qXFxuK1xcdCAqIElmIG5vIHBhZ2VzIGFyZSB1c2VkLCBhbmQgbm8gb3RoZXIgaGFuZGxlcyB0byB0aGUgc3VicG9vbFxcbitcXHQgKiByZW1haW4sIGdpdmUgdXAgYW55IHJlc2VydmF0aW9ucyBiYXNlZCBvbiBtaW5pbXVtIHNpemUgYW5kXFxuK1xcdCAqIGZyZWUgdGhlIHN1YnBvb2wuXFxuK1xcdCAqL1xcbitcXHRpZiAoc3VicG9vbF9pc19mcmVlKHNwb29sKSkge1xcbitcXHRcXHRpZiAoc3Bvb2wtXFx1MDAzZW1pbl9ocGFnZXMgIT0gLTEpXFxuK1xcdFxcdFxcdGh1Z2V0bGJfYWNjdF9tZW1vcnkoc3Bvb2wtXFx1MDAzZWhzdGF0ZSxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0LXNwb29sLVxcdTAwM2VtaW5faHBhZ2VzKTtcXG4rXFx0XFx0a2ZyZWUoc3Bvb2wpO1xcbitcXHR9XFxuK31cXG4rXFxuK2xvbmcgaHVnZXBhZ2Vfc3VicG9vbF9mcmVlX2hwYWdlcyhzdHJ1Y3QgaHVnZXBhZ2Vfc3VicG9vbCAqc3Bvb2wpXFxuK3tcXG4rXFx0bG9uZyBmcmVlX3BhZ2VzO1xcbitcXG4rXFx0c3Bpbl9sb2NrX2lycShcXHUwMDI2c3Bvb2wtXFx1MDAzZWxvY2spO1xcbitcXHRpZiAoc3Bvb2wtXFx1MDAzZW1heF9ocGFnZXMgPT0gLTEpXFxuK1xcdFxcdGZyZWVfcGFnZXMgPSAtMTtcXG4rXFx0ZWxzZVxcbitcXHRcXHRmcmVlX3BhZ2VzID0gc3Bvb2wtXFx1MDAzZW1heF9ocGFnZXMgLSBzcG9vbC1cXHUwMDNldXNlZF9ocGFnZXM7XFxuK1xcdHNwaW5fdW5sb2NrX2lycShcXHUwMDI2c3Bvb2wtXFx1MDAzZWxvY2spO1xcbitcXG4rXFx0cmV0dXJuIGZyZWVfcGFnZXM7XFxuK31cXG4rXFxuK3N0YXRpYyB1bnNpZ25lZCBpbnQgaHVnZXBhZ2Vfc3VicG9vbF9ocGFnZV9zaGlmdChzdHJ1Y3QgaHVnZXBhZ2Vfc3VicG9vbCAqc3Bvb2wpXFxuK3tcXG4rXFx0cmV0dXJuIGh1Z2VfcGFnZV9zaGlmdChzcG9vbC1cXHUwMDNlaHN0YXRlKTtcXG4rfVxcbitcXG4rdW5zaWduZWQgbG9uZyBsb25nIGh1Z2VwYWdlX3N1YnBvb2xfbWF4X3NpemUoc3RydWN0IGh1Z2VwYWdlX3N1YnBvb2wgKnNwb29sKVxcbit7XFxuK1xcdGlmIChzcG9vbC1cXHUwMDNlbWF4X2hwYWdlcyA9PSAtMSlcXG4rXFx0XFx0cmV0dXJuIC0xVUxMO1xcbitcXHRyZXR1cm4gKHVuc2lnbmVkIGxvbmcgbG9uZylzcG9vbC1cXHUwMDNlbWF4X2hwYWdlcyBcXHUwMDNjXFx1MDAzYyBodWdlcGFnZV9zdWJwb29sX2hwYWdlX3NoaWZ0KHNwb29sKTtcXG4rfVxcbitcXG4rdW5zaWduZWQgbG9uZyBsb25nIGh1Z2VwYWdlX3N1YnBvb2xfbWluX3NpemUoc3RydWN0IGh1Z2VwYWdlX3N1YnBvb2wgKnNwb29sKVxcbit7XFxuK1xcdGlmIChzcG9vbC1cXHUwMDNlbWluX2hwYWdlcyA9PSAtMSlcXG4rXFx0XFx0cmV0dXJuIC0xVUxMO1xcbitcXHRyZXR1cm4gKHVuc2lnbmVkIGxvbmcgbG9uZylzcG9vbC1cXHUwMDNlbWluX2hwYWdlcyBcXHUwMDNjXFx1MDAzYyBodWdlcGFnZV9zdWJwb29sX2hwYWdlX3NoaWZ0KHNwb29sKTtcXG4rfVxcbitcXG4rbG9uZyBodWdlcGFnZV9zdWJwb29sX21heF9ocGFnZXMoc3RydWN0IGh1Z2VwYWdlX3N1YnBvb2wgKnNwb29sKVxcbit7XFxuK1xcdGxvbmcgbWF4X2hwYWdlcztcXG4rXFxuK1xcdHNwaW5fbG9ja19pcnEoXFx1MDAyNnNwb29sLVxcdTAwM2Vsb2NrKTtcXG4rXFx0bWF4X2hwYWdlcyA9IHNwb29sLVxcdTAwM2VtYXhfaHBhZ2VzO1xcbitcXHRzcGluX3VubG9ja19pcnEoXFx1MDAyNnNwb29sLVxcdTAwM2Vsb2NrKTtcXG4rXFxuK1xcdHJldHVybiBtYXhfaHBhZ2VzO1xcbit9XFxuK1xcbitzdHJ1Y3QgaHVnZXBhZ2Vfc3VicG9vbCAqaHVnZXBhZ2VfbmV3X3N1YnBvb2woc3RydWN0IGhzdGF0ZSAqaCwgbG9uZyBtYXhfaHBhZ2VzLFxcbitcXHRcXHRcXHRcXHRcXHRcXHRsb25nIG1pbl9ocGFnZXMpXFxuK3tcXG4rXFx0c3RydWN0IGh1Z2VwYWdlX3N1YnBvb2wgKnNwb29sO1xcbitcXG4rXFx0c3Bvb2wgPSBremFsbG9jX29iaigqc3Bvb2wpO1xcbitcXHRpZiAoIXNwb29sKVxcbitcXHRcXHRyZXR1cm4gTlVMTDtcXG4rXFxuK1xcdHNwaW5fbG9ja19pbml0KFxcdTAwMjZzcG9vbC1cXHUwMDNlbG9jayk7XFxuK1xcdHNwb29sLVxcdTAwM2Vjb3VudCA9IDE7XFxuK1xcdHNwb29sLVxcdTAwM2VtYXhfaHBhZ2VzID0gbWF4X2hwYWdlcztcXG4rXFx0c3Bvb2wtXFx1MDAzZWhzdGF0ZSA9IGg7XFxuK1xcdHNwb29sLVxcdTAwM2VtaW5faHBhZ2VzID0gbWluX2hwYWdlcztcXG4rXFxuK1xcdGlmIChtaW5faHBhZ2VzICE9IC0xIFxcdTAwMjZcXHUwMDI2IGh1Z2V0bGJfYWNjdF9tZW1vcnkoaCwgbWluX2hwYWdlcykpIHtcXG4rXFx0XFx0a2ZyZWUoc3Bvb2wpO1xcbitcXHRcXHRyZXR1cm4gTlVMTDtcXG4rXFx0fVxcbitcXHRzcG9vbC1cXHUwMDNlcnN2X2hwYWdlcyA9IG1pbl9ocGFnZXM7XFxuK1xcbitcXHRyZXR1cm4gc3Bvb2w7XFxuK31cXG4rXFxuK3ZvaWQgaHVnZXBhZ2VfcHV0X3N1YnBvb2woc3RydWN0IGh1Z2VwYWdlX3N1YnBvb2wgKnNwb29sKVxcbit7XFxuK1xcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XFxuK1xcbitcXHRzcGluX2xvY2tfaXJxc2F2ZShcXHUwMDI2c3Bvb2wtXFx1MDAzZWxvY2ssIGZsYWdzKTtcXG4rXFx0QlVHX09OKCFzcG9vbC1cXHUwMDNlY291bnQpO1xcbitcXHRzcG9vbC1cXHUwMDNlY291bnQtLTtcXG4rXFx0dW5sb2NrX29yX3JlbGVhc2Vfc3VicG9vbChzcG9vbCwgZmxhZ3MpO1xcbit9XFxuK1xcbisvKlxcbisgKiBTdWJwb29sIGFjY291bnRpbmcgZm9yIGFsbG9jYXRpbmcgYW5kIHJlc2VydmluZyBwYWdlcy5cXG4rICogUmV0dXJuIC1FTk9NRU0gaWYgdGhlcmUgYXJlIG5vdCBlbm91Z2ggcmVzb3VyY2VzIHRvIHNhdGlzZnkgdGhlXFxuKyAqIHJlcXVlc3QuICBPdGhlcndpc2UsIHJldHVybiB0aGUgbnVtYmVyIG9mIHBhZ2VzIGJ5IHdoaWNoIHRoZVxcbisgKiBnbG9iYWwgcG9vbHMgbXVzdCBiZSBhZGp1c3RlZCAodXB3YXJkKS4gIFRoZSByZXR1cm5lZCB2YWx1ZSBtYXlcXG4rICogb25seSBiZSBkaWZmZXJlbnQgdGhhbiB0aGUgcGFzc2VkIHZhbHVlIChkZWx0YSkgaW4gdGhlIGNhc2Ugd2hlcmVcXG4rICogYSBzdWJwb29sIG1pbmltdW0gc2l6ZSBtdXN0IGJlIG1haW50YWluZWQuXFxuKyAqL1xcbitsb25nIGh1Z2VwYWdlX3N1YnBvb2xfZ2V0X3BhZ2VzKHN0cnVjdCBodWdlcGFnZV9zdWJwb29sICpzcG9vbCxcXG4rXFx0XFx0XFx0XFx0ICAgICAgbG9uZyBkZWx0YSlcXG4re1xcbitcXHRsb25nIHJldCA9IGRlbHRhO1xcbitcXG4rXFx0aWYgKCFzcG9vbClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdHNwaW5fbG9ja19pcnEoXFx1MDAyNnNwb29sLVxcdTAwM2Vsb2NrKTtcXG4rXFxuK1xcdGlmIChzcG9vbC1cXHUwMDNlbWF4X2hwYWdlcyAhPSAtMSBcXHUwMDI2XFx1MDAyNlxcbitcXHQgICAgc3Bvb2wtXFx1MDAzZXVzZWRfaHBhZ2VzICsgZGVsdGEgXFx1MDAzZSBzcG9vbC1cXHUwMDNlbWF4X2hwYWdlcykge1xcbitcXHRcXHRyZXQgPSAtRU5PTUVNO1xcbitcXHRcXHRnb3RvIHVubG9ja19yZXQ7XFxuK1xcdH1cXG4rXFxuK1xcdHNwb29sLVxcdTAwM2V1c2VkX2hwYWdlcyArPSBkZWx0YTtcXG4rXFxuK1xcdC8qIG1pbmltdW0gc2l6ZSBhY2NvdW50aW5nICovXFxuK1xcdGlmIChzcG9vbC1cXHUwMDNlbWluX2hwYWdlcyAhPSAtMSBcXHUwMDI2XFx1MDAyNiBzcG9vbC1cXHUwMDNlcnN2X2hwYWdlcykge1xcbitcXHRcXHRpZiAoZGVsdGEgXFx1MDAzZSBzcG9vbC1cXHUwMDNlcnN2X2hwYWdlcykge1xcbitcXHRcXHRcXHQvKlxcbitcXHRcXHRcXHQgKiBBc2tpbmcgZm9yIG1vcmUgcmVzZXJ2ZXMgdGhhbiB0aG9zZSBhbHJlYWR5IHRha2VuIG9uXFxuK1xcdFxcdFxcdCAqIGJlaGFsZiBvZiBzdWJwb29sLiAgUmV0dXJuIGRpZmZlcmVuY2UuXFxuK1xcdFxcdFxcdCAqL1xcbitcXHRcXHRcXHRyZXQgPSBkZWx0YSAtIHNwb29sLVxcdTAwM2Vyc3ZfaHBhZ2VzO1xcbitcXHRcXHRcXHRzcG9vbC1cXHUwMDNlcnN2X2hwYWdlcyA9IDA7XFxuK1xcdFxcdH0gZWxzZSB7XFxuK1xcdFxcdFxcdHJldCA9IDA7XFx0LyogcmVzZXJ2ZXMgYWxyZWFkeSBhY2NvdW50ZWQgZm9yICovXFxuK1xcdFxcdFxcdHNwb29sLVxcdTAwM2Vyc3ZfaHBhZ2VzIC09IGRlbHRhO1xcbitcXHRcXHR9XFxuK1xcdH1cXG4rXFxuK3VubG9ja19yZXQ6XFxuK1xcdHNwaW5fdW5sb2NrX2lycShcXHUwMDI2c3Bvb2wtXFx1MDAzZWxvY2spO1xcbitcXHRyZXR1cm4gcmV0O1xcbit9XFxuK1xcbisvKlxcbisgKiBTdWJwb29sIGFjY291bnRpbmcgZm9yIGZyZWVpbmcgYW5kIHVucmVzZXJ2aW5nIHBhZ2VzLlxcbisgKiBSZXR1cm4gdGhlIG51bWJlciBvZiBnbG9iYWwgcGFnZSByZXNlcnZhdGlvbnMgdGhhdCBtdXN0IGJlIGRyb3BwZWQuXFxuKyAqIFRoZSByZXR1cm4gdmFsdWUgbWF5IG9ubHkgYmUgZGlmZmVyZW50IHRoYW4gdGhlIHBhc3NlZCB2YWx1ZSAoZGVsdGEpXFxuKyAqIGluIHRoZSBjYXNlIHdoZXJlIGEgc3VicG9vbCBtaW5pbXVtIHNpemUgbXVzdCBiZSBtYWludGFpbmVkLlxcbisgKi9cXG4rbG9uZyBodWdlcGFnZV9zdWJwb29sX3B1dF9wYWdlcyhzdHJ1Y3QgaHVnZXBhZ2Vfc3VicG9vbCAqc3Bvb2wsXFxuK1xcdFxcdFxcdFxcdCAgICAgICBsb25nIGRlbHRhKVxcbit7XFxuK1xcdGxvbmcgcmV0ID0gZGVsdGE7XFxuK1xcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XFxuK1xcbitcXHRpZiAoIXNwb29sKVxcbitcXHRcXHRyZXR1cm4gZGVsdGE7XFxuK1xcbitcXHRzcGluX2xvY2tfaXJxc2F2ZShcXHUwMDI2c3Bvb2wtXFx1MDAzZWxvY2ssIGZsYWdzKTtcXG4rXFxuK1xcdHNwb29sLVxcdTAwM2V1c2VkX2hwYWdlcyAtPSBkZWx0YTtcXG4rXFxuK1xcdCAvKiBtaW5pbXVtIHNpemUgYWNjb3VudGluZyAqL1xcbitcXHRpZiAoc3Bvb2wtXFx1MDAzZW1pbl9ocGFnZXMgIT0gLTEgXFx1MDAyNlxcdTAwMjYgc3Bvb2wtXFx1MDAzZXVzZWRfaHBhZ2VzIFxcdTAwM2Mgc3Bvb2wtXFx1MDAzZW1pbl9ocGFnZXMpIHtcXG4rXFx0XFx0LypcXG4rXFx0XFx0ICogbGltaXQgaXMgdGhlIG1heGltdW0gbnVtYmVyIG9mIHJlc2VydmF0aW9ucyB0aGF0XFxuK1xcdFxcdCAqIGNhbiBiZSByZXN0b3JlZCB0byB0aGlzIHN1YnBvb2wuXFxuK1xcdFxcdCAqL1xcbitcXHRcXHRsb25nIGxpbWl0ID0gc3Bvb2wtXFx1MDAzZW1pbl9ocGFnZXMgLSBzcG9vbC1cXHUwMDNldXNlZF9ocGFnZXM7XFxuK1xcbitcXHRcXHRpZiAoc3Bvb2wtXFx1MDAzZXJzdl9ocGFnZXMgKyBkZWx0YSBcXHUwMDNjPSBsaW1pdClcXG4rXFx0XFx0XFx0cmV0ID0gMDtcXG4rXFx0XFx0ZWxzZVxcbitcXHRcXHRcXHRyZXQgPSBzcG9vbC1cXHUwMDNlcnN2X2hwYWdlcyArIGRlbHRhIC0gbGltaXQ7XFxuK1xcbitcXHRcXHRzcG9vbC1cXHUwMDNlcnN2X2hwYWdlcyArPSBkZWx0YTtcXG4rXFx0XFx0aWYgKHNwb29sLVxcdTAwM2Vyc3ZfaHBhZ2VzIFxcdTAwM2UgbGltaXQpXFxuK1xcdFxcdFxcdHNwb29sLVxcdTAwM2Vyc3ZfaHBhZ2VzID0gbGltaXQ7XFxuK1xcdH1cXG4rXFxuK1xcdC8qXFxuK1xcdCAqIElmIGh1Z2V0bGJmc19wdXRfc3VwZXIgY291bGRuJ3QgZnJlZSBzcG9vbCBkdWUgdG8gYW4gb3V0c3RhbmRpbmdcXG4rXFx0ICogcXVvdGEgcmVmZXJlbmNlLCBmcmVlIGl0IG5vdy5cXG4rXFx0ICovXFxuK1xcdHVubG9ja19vcl9yZWxlYXNlX3N1YnBvb2woc3Bvb2wsIGZsYWdzKTtcXG4rXFxuK1xcdHJldHVybiByZXQ7XFxuK31cXG5kaWZmIC0tZ2l0IGEvbW0vaHVnZXRsYl9zdWJwb29sLmggYi9tbS9odWdldGxiX3N1YnBvb2wuaFxcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLjQxZDIyMjM5ZjJjM2VkXFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL21tL2h1Z2V0bGJfc3VicG9vbC5oXFxuQEAgLTAsMCArMSwyMSBAQFxcbisvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCAqL1xcbisjaWZuZGVmIF9NTV9IVUdFVExCX1NVQlBPT0xfSFxcbisjZGVmaW5lIF9NTV9IVUdFVExCX1NVQlBPT0xfSFxcbitcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3NwaW5sb2NrLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC90eXBlcy5oXFx1MDAzZVxcbitcXG4rc3RydWN0IGhzdGF0ZTtcXG4rc3RydWN0IGh1Z2VwYWdlX3N1YnBvb2w7XFxuK1xcbitzdHJ1Y3QgaHVnZXBhZ2Vfc3VicG9vbCAqaHVnZXBhZ2VfbmV3X3N1YnBvb2woc3RydWN0IGhzdGF0ZSAqaCwgbG9uZyBtYXhfaHBhZ2VzLFxcbitcXHRcXHRcXHRcXHRcXHRcXHRsb25nIG1pbl9ocGFnZXMpO1xcbit2b2lkIGh1Z2VwYWdlX3B1dF9zdWJwb29sKHN0cnVjdCBodWdlcGFnZV9zdWJwb29sICpzcG9vbCk7XFxuK2xvbmcgaHVnZXBhZ2Vfc3VicG9vbF9nZXRfcGFnZXMoc3RydWN0IGh1Z2VwYWdlX3N1YnBvb2wgKnNwb29sLCBsb25nIGRlbHRhKTtcXG4rbG9uZyBodWdlcGFnZV9zdWJwb29sX3B1dF9wYWdlcyhzdHJ1Y3QgaHVnZXBhZ2Vfc3VicG9vbCAqc3Bvb2wsIGxvbmcgZGVsdGEpO1xcbitsb25nIGh1Z2VwYWdlX3N1YnBvb2xfZnJlZV9ocGFnZXMoc3RydWN0IGh1Z2VwYWdlX3N1YnBvb2wgKnNwb29sKTtcXG4rbG9uZyBodWdlcGFnZV9zdWJwb29sX21heF9ocGFnZXMoc3RydWN0IGh1Z2VwYWdlX3N1YnBvb2wgKnNwb29sKTtcXG4rdW5zaWduZWQgbG9uZyBsb25nIGh1Z2VwYWdlX3N1YnBvb2xfbWF4X3NpemUoc3RydWN0IGh1Z2VwYWdlX3N1YnBvb2wgKnNwb29sKTtcXG4rdW5zaWduZWQgbG9uZyBsb25nIGh1Z2VwYWdlX3N1YnBvb2xfbWluX3NpemUoc3RydWN0IGh1Z2VwYWdlX3N1YnBvb2wgKnNwb29sKTtcXG4rXFxuKyNlbmRpZiAvKiBfTU1fSFVHRVRMQl9TVUJQT09MX0ggKi9cXG5kaWZmIC0tZ2l0IGEvbW0vbWVtY29udHJvbC5jIGIvbW0vbWVtY29udHJvbC5jXFxuaW5kZXggNmRjNDg4OGE5MGYzZmQuLjY3NjRmZjA0MWMxOTY1IDEwMDY0NFxcbi0tLSBhL21tL21lbWNvbnRyb2wuY1xcbisrKyBiL21tL21lbWNvbnRyb2wuY1xcbkBAIC01MTQ3LDM5ICs1MTQ3LDExOSBAQCBpbnQgX19tZW1fY2dyb3VwX2NoYXJnZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSwgZ2ZwX3QgZ2ZwKVxcbiB9XFxuIFxcbiAvKipcXG4tICogbWVtX2Nncm91cF9jaGFyZ2VfaHVnZXRsYiAtIGNoYXJnZSB0aGUgbWVtY2cgZm9yIGEgaHVnZXRsYiBmb2xpb1xcbi0gKiBAZm9saW86IGZvbGlvIGJlaW5nIGNoYXJnZWRcXG4rICogbWVtX2Nncm91cF9odWdldGxiX3RyeV9jaGFyZ2UgLSBUcnkgdG8gY2hhcmdlIHRoZSBtZW1jZyBmb3IgYSBodWdldGxiIGZvbGlvXFxuKyAqIEBucl9wYWdlczogbnVtYmVyIG9mIGJhc2UgcGFnZXMgdG8gY2hhcmdlXFxuICAqIEBnZnA6IHJlY2xhaW0gbW9kZVxcbisgKiBAbWVtY2dfcDogT3V0cHV0IHBvaW50ZXIgdG8gdGhlIGNoYXJnZWQgbWVtX2Nncm91cCAoaWYgc3VjY2Vzc2Z1bCBhbmQgZW5hYmxlZClcXG4rICogQG9iamNnX3A6IE91dHB1dCBwb2ludGVyIHRvIHRoZSBjaGFyZ2VkIG9ial9jZ3JvdXAgKGlmIHN1Y2Nlc3NmdWwgYW5kIGVuYWJsZWQpXFxuICAqXFxuLSAqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHdoZW4gYWxsb2NhdGluZyBhIGh1Z2UgcGFnZSBmb2xpbywgYWZ0ZXIgdGhlIHBhZ2UgaGFzXFxuLSAqIGFscmVhZHkgYmVlbiBvYnRhaW5lZCBhbmQgY2hhcmdlZCB0byB0aGUgYXBwcm9wcmlhdGUgaHVnZXRsYiBjZ3JvdXBcXG4tICogY29udHJvbGxlciAoaWYgaXQgaXMgZW5hYmxlZCkuXFxuKyAqIFByZXBhcmVzIGFuZCB0cmllcyB0byByZXNlcnZlIHRoZSBtZW1vcnkgY291bnRlciBmb3IgdGhlIGZvbGlvIGZyb20gdGhlIGN1cnJlbnRcXG4rICogdGFzaydzIG1lbWNnLiBJZiBzdWNjZXNzZnVsLCBib3RoICptZW1jZ19wIGFuZCAqb2JqY2dfcCBhcmUgcG9wdWxhdGVkIGFuZCB0aGVpclxcbisgKiByZWZlcmVuY2VzIGFyZSBwaW5uZWQgdW50aWwgYSBzdWJzZXF1ZW50IGNhbGwgdG8gbWVtX2Nncm91cF9odWdldGxiX2NvbW1pdF9jaGFyZ2VcXG4rICogb3IgbWVtX2Nncm91cF9odWdldGxiX2NhbmNlbF9jaGFyZ2UuXFxuICAqXFxuICAqIFJldHVybnMgRU5PTUVNIGlmIHRoZSBtZW1jZyBpcyBhbHJlYWR5IGZ1bGwuXFxuLSAqIFJldHVybnMgMCBpZiBlaXRoZXIgdGhlIGNoYXJnZSB3YXMgc3VjY2Vzc2Z1bCwgb3IgaWYgd2Ugc2tpcCB0aGUgY2hhcmdpbmcuXFxuKyAqIFJldHVybnMgMCBpZiBlaXRoZXIgdGhlIGNoYXJnZSB3YXMgc3VjY2Vzc2Z1bCwgb3IgaWYgd2Ugc2tpcCBjaGFyZ2luZy5cXG4gICovXFxuLWludCBtZW1fY2dyb3VwX2NoYXJnZV9odWdldGxiKHN0cnVjdCBmb2xpbyAqZm9saW8sIGdmcF90IGdmcClcXG4raW50IG1lbV9jZ3JvdXBfaHVnZXRsYl90cnlfY2hhcmdlKHVuc2lnbmVkIGludCBucl9wYWdlcywgZ2ZwX3QgZ2ZwLFxcbitcXHRcXHRcXHRcXHQgIHN0cnVjdCBtZW1fY2dyb3VwICoqbWVtY2dfcCxcXG4rXFx0XFx0XFx0XFx0ICBzdHJ1Y3Qgb2JqX2Nncm91cCAqKm9iamNnX3ApXFxuIHtcXG4tXFx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnID0gZ2V0X21lbV9jZ3JvdXBfZnJvbV9jdXJyZW50KCk7XFxuK1xcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZztcXG4rXFx0c3RydWN0IG9ial9jZ3JvdXAgKm9iamNnO1xcbiBcXHRpbnQgcmV0ID0gMDtcXG4gXFxuLVxcdC8qXFxuLVxcdCAqIEV2ZW4gbWVtY2cgZG9lcyBub3QgYWNjb3VudCBmb3IgaHVnZXRsYiwgd2Ugc3RpbGwgd2FudCB0byB1cGRhdGVcXG4tXFx0ICogc3lzdGVtLWxldmVsIHN0YXRzIHZpYSBscnV2ZWNfc3RhdF9tb2RfZm9saW8uIFJldHVybiAwLCBhbmQgc2tpcFxcbi1cXHQgKiBjaGFyZ2luZyB0aGUgbWVtY2cuXFxuLVxcdCAqL1xcbitcXHQqbWVtY2dfcCA9IE5VTEw7XFxuK1xcdCpvYmpjZ19wID0gTlVMTDtcXG4rXFxuIFxcdGlmIChtZW1fY2dyb3VwX2Rpc2FibGVkKCkgfHwgIW1lbWNnX2FjY291bnRzX2h1Z2V0bGIoKSB8fFxcbi1cXHRcXHQhbWVtY2cgfHwgIWNncm91cF9zdWJzeXNfb25fZGZsKG1lbW9yeV9jZ3JwX3N1YnN5cykpXFxuLVxcdFxcdGdvdG8gb3V0O1xcbitcXHQgICAgIWNncm91cF9zdWJzeXNfb25fZGZsKG1lbW9yeV9jZ3JwX3N1YnN5cykpXFxuK1xcdFxcdHJldHVybiAwO1xcbiBcXG4tXFx0aWYgKGNoYXJnZV9tZW1jZyhmb2xpbywgbWVtY2csIGdmcCkpXFxuLVxcdFxcdHJldCA9IC1FTk9NRU07XFxuK1xcdG1lbWNnID0gZ2V0X21lbV9jZ3JvdXBfZnJvbV9jdXJyZW50KCk7XFxuK1xcdGlmICghbWVtY2cpXFxuK1xcdFxcdHJldHVybiAwO1xcbiBcXG4tb3V0OlxcbitcXHRvYmpjZyA9IGdldF9vYmpfY2dyb3VwX2Zyb21fbWVtY2cobWVtY2cpO1xcbitcXHRpZiAoIW9iamNnKVxcbitcXHRcXHRnb3RvIHB1dF9tZW1jZztcXG4rXFxuK1xcdGlmICghb2JqX2Nncm91cF9pc19yb290KG9iamNnKSkge1xcbitcXHRcXHRyZXQgPSB0cnlfY2hhcmdlX21lbWNnKG1lbWNnLCBnZnAsIG5yX3BhZ2VzKTtcXG4rXFx0XFx0aWYgKHJldClcXG4rXFx0XFx0XFx0Z290byBwdXRfb2JqY2c7XFxuK1xcdH1cXG4rXFxuK1xcdCptZW1jZ19wID0gbWVtY2c7XFxuK1xcdCpvYmpjZ19wID0gb2JqY2c7XFxuK1xcdHJldHVybiAwO1xcbitcXG4rcHV0X29iamNnOlxcbitcXHRvYmpfY2dyb3VwX3B1dChvYmpjZyk7XFxuK3B1dF9tZW1jZzpcXG4gXFx0bWVtX2Nncm91cF9wdXQobWVtY2cpO1xcbiBcXHRyZXR1cm4gcmV0O1xcbiB9XFxuIFxcbisvKipcXG4rICogbWVtX2Nncm91cF9odWdldGxiX2NvbW1pdF9jaGFyZ2UgLSBDb21taXQgdGhlIG1lbWNnIGNoYXJnZSBmb3IgYSBodWdldGxiIGZvbGlvXFxuKyAqIEBmb2xpbzogZm9saW8gYmVpbmcgY2hhcmdlZFxcbisgKiBAbWVtY2c6IFRhcmdldCBtZW1fY2dyb3VwIG9idGFpbmVkIGZyb20gbWVtX2Nncm91cF9odWdldGxiX3RyeV9jaGFyZ2VcXG4rICogQG9iamNnOiBUYXJnZXQgb2JqX2Nncm91cCBvYnRhaW5lZCBmcm9tIG1lbV9jZ3JvdXBfaHVnZXRsYl90cnlfY2hhcmdlXFxuKyAqXFxuKyAqIEZpbmFsaXplcyB0aGUgbWVtb3J5IGFuZCBzdGF0aXN0aWNzIGNoYXJnaW5nIGZvciB0aGUgZm9saW8gaW4gdGhlIHNwZWNpZmllZCBtZW1jZy5cXG4rICogVHJhbnNmZXJzIHRoZSBwaW5uZWQgb2JqY2cgcmVmZXJlbmNlIHRvIHRoZSBmb2xpbyBzdHJ1Y3R1cmUgKGZvciBhdXRvbWF0aWNcXG4rICogdW5jaGFyZ2luZyB1cG9uIGZyZWVpbmcgdmlhIG1lbV9jZ3JvdXBfdW5jaGFyZ2UpLiBSZWxlYXNlcyB0aGUgdHJ5LWNvbW1pdCByZWZlcmVuY2VcXG4rICogb24gbWVtY2cuXFxuKyAqL1xcbit2b2lkIG1lbV9jZ3JvdXBfaHVnZXRsYl9jb21taXRfY2hhcmdlKHN0cnVjdCBmb2xpbyAqZm9saW8sXFxuK1xcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcXG4rXFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IG9ial9jZ3JvdXAgKm9iamNnKVxcbit7XFxuK1xcdGlmICghbWVtY2cgfHwgIW9iamNnKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHRjb21taXRfY2hhcmdlKGZvbGlvLCBvYmpjZyk7XFxuK1xcdG1lbWNnMV9jb21taXRfY2hhcmdlKGZvbGlvLCBtZW1jZyk7XFxuK1xcbitcXHQvKlxcbitcXHQgKiBEcm9wIG91ciB0cnktY29tbWl0LWNhbmNlbCBwcm90b2NvbCByZWZlcmVuY2Ugb24gbWVtY2cuXFxuK1xcdCAqIFRoZSBvYmpjZyByZWZlcmVuY2UgaXMgVFJBTlNGRVJSRUQgdG8gdGhlIGZvbGlvIGJ5IGNvbW1pdF9jaGFyZ2UsXFxuK1xcdCAqIHNvIGl0IHdpbGwgYmUgcHV0IGF1dG9tYXRpY2FsbHkgYnkgX19tZW1fY2dyb3VwX3VuY2hhcmdlKCkgd2hlblxcbitcXHQgKiB0aGUgZm9saW8gaXMgZnJlZWQuXFxuK1xcdCAqL1xcbitcXHRtZW1fY2dyb3VwX3B1dChtZW1jZyk7XFxuK31cXG4rXFxuKy8qKlxcbisgKiBtZW1fY2dyb3VwX2h1Z2V0bGJfY2FuY2VsX2NoYXJnZSAtIENhbmNlbCBhbmQgdW5kbyBhIGh1Z2V0bGIgZm9saW8gbWVtY2cgY2hhcmdlXFxuKyAqIEBucl9wYWdlczogbnVtYmVyIG9mIGJhc2UgcGFnZXMgdG8gdW5jaGFyZ2VcXG4rICogQG1lbWNnOiBUYXJnZXQgbWVtX2Nncm91cCBvYnRhaW5lZCBmcm9tIG1lbV9jZ3JvdXBfaHVnZXRsYl90cnlfY2hhcmdlXFxuKyAqIEBvYmpjZzogVGFyZ2V0IG9ial9jZ3JvdXAgb2J0YWluZWQgZnJvbSBtZW1fY2dyb3VwX2h1Z2V0bGJfdHJ5X2NoYXJnZVxcbisgKlxcbisgKiBDYW5jZWxzIGFuZCBzYWZlbHkgcm9sbHMgYmFjayB0aGUgcHJlcGFyZWQgbWVtb3J5IGNoYXJnZSBmb3IgdGhlIGZvbGlvIGluIHRoZVxcbisgKiBzcGVjaWZpZWQgbWVtY2cuIFJlbGVhc2VzIHRoZSB0cnktY29tbWl0IHBpbm5lZCByZWZlcmVuY2VzIG9uIGJvdGggbWVtY2cgYW5kIG9iamNnLlxcbisgKi9cXG4rdm9pZCBtZW1fY2dyb3VwX2h1Z2V0bGJfY2FuY2VsX2NoYXJnZSh1bnNpZ25lZCBpbnQgbnJfcGFnZXMsXFxuK1xcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcXG4rXFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IG9ial9jZ3JvdXAgKm9iamNnKVxcbit7XFxuK1xcdGlmICghbWVtY2cgfHwgIW9iamNnKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHRpZiAoIW9ial9jZ3JvdXBfaXNfcm9vdChvYmpjZykpXFxuK1xcdFxcdHJlZmlsbF9zdG9jayhtZW1jZywgbnJfcGFnZXMpO1xcbitcXG4rXFx0LypcXG4rXFx0ICogRHJvcCBvdXIgdHJ5LWNvbW1pdC1jYW5jZWwgcHJvdG9jb2wgcmVmZXJlbmNlcyBvbiBib3RoIG9iamNnXFxuK1xcdCAqIGFuZCBtZW1jZywgc2luY2UgdGhpcyBtYXBwaW5nIGF0dGVtcHQgd2FzIGFib3J0ZWQgYW5kIHRoZSBmb2xpb1xcbitcXHQgKiB3YXMgbmV2ZXIgY29tbWl0dGVkLlxcbitcXHQgKi9cXG4rXFx0b2JqX2Nncm91cF9wdXQob2JqY2cpO1xcbitcXHRtZW1fY2dyb3VwX3B1dChtZW1jZyk7XFxuK31cXG4rXFxuK1xcbiAvKipcXG4gICogbWVtX2Nncm91cF9zd2FwaW5fY2hhcmdlX2ZvbGlvIC0gQ2hhcmdlIGEgbmV3bHkgYWxsb2NhdGVkIGZvbGlvIGZvciBzd2FwaW4uXFxuICAqIEBmb2xpbzogdGhlIGZvbGlvIHRvIGNoYXJnZVxcbmRpZmYgLS1naXQgYS9zdWJwb29sX2xlYWtfbWF4X3NpemUuc2ggYi9zdWJwb29sX2xlYWtfbWF4X3NpemUuc2hcXG5uZXcgZmlsZSBtb2RlIDEwMDc1NVxcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi5iZmFmYTFiYTA3NGVhY1xcbi0tLSAvZGV2L251bGxcXG4rKysgYi9zdWJwb29sX2xlYWtfbWF4X3NpemUuc2hcXG5AQCAtMCwwICsxLDcxIEBAXFxuKyMhL2Jpbi9iYXNoXFxuK1xcbitpZiBbIFxcXCIkRVVJRFxcXCIgLW5lIDAgXTsgdGhlblxcbisgICAgZWNobyBcXFwiUGxlYXNlIHJ1biBhcyByb290XFxcIlxcbisgICAgZXhpdCAxXFxuK2ZpXFxuK1xcbitNTlRfUEFUSD1cXFwiL3RtcC9tbnRfaHVnZXRsYlxcXCJcXG4rRklMRV9QQVRIPVxcXCIkTU5UX1BBVEgvdGVzdF9maWxlXFxcIlxcbitcXG4rIyBTYXZlIG9yaWdpbmFsIHZhbHVlc1xcbitvcmlnX25yPSQoY2F0IC9zeXMva2VybmVsL21tL2h1Z2VwYWdlcy9odWdlcGFnZXMtMjA0OGtCL25yX2h1Z2VwYWdlcylcXG4rb3JpZ19vdmVyY29tbWl0PSQoY2F0IC9zeXMva2VybmVsL21tL2h1Z2VwYWdlcy9odWdlcGFnZXMtMjA0OGtCL25yX292ZXJjb21taXRfaHVnZXBhZ2VzKVxcbitcXG4rY2xlYW51cCgpIHtcXG4rICAgIGVjaG8gXFxcIkNsZWFuaW5nIHVwLi4uXFxcIlxcbisgICAgcm0gLWYgXFxcIiRGSUxFX1BBVEhcXFwiXFxuKyAgICB1bW91bnQgXFxcIiRNTlRfUEFUSFxcXCIgMlxcdTAwM2UvZGV2L251bGxcXG4rICAgIHJtZGlyIFxcXCIkTU5UX1BBVEhcXFwiIDJcXHUwMDNlL2Rldi9udWxsXFxuKyAgICBlY2hvIFxcXCIkb3JpZ19uclxcXCIgXFx1MDAzZSAvc3lzL2tlcm5lbC9tbS9odWdlcGFnZXMvaHVnZXBhZ2VzLTIwNDhrQi9ucl9odWdlcGFnZXNcXG4rICAgIGVjaG8gXFxcIiRvcmlnX292ZXJjb21taXRcXFwiIFxcdTAwM2UgL3N5cy9rZXJuZWwvbW0vaHVnZXBhZ2VzL2h1Z2VwYWdlcy0yMDQ4a0IvbnJfb3ZlcmNvbW1pdF9odWdlcGFnZXNcXG4rICAgIGVjaG8gXFxcIkNsZWFudXAgZG9uZS5cXFwiXFxuK31cXG4rdHJhcCBjbGVhbnVwIEVYSVRcXG4rXFxuKyMgMS4gTW91bnQgaHVnZXRsYmZzIHdpdGggc2l6ZT0yTSAoMSBwYWdlKVxcbitta2RpciAtcCBcXFwiJE1OVF9QQVRIXFxcIlxcbitpZiAhIG1vdW50IC10IGh1Z2V0bGJmcyAtbyBzaXplPTJNIG5vbmUgXFxcIiRNTlRfUEFUSFxcXCI7IHRoZW5cXG4rICAgIGVjaG8gXFxcIkZhaWxlZCB0byBtb3VudCBodWdldGxiZnNcXFwiXFxuKyAgICBleGl0IDFcXG4rZmlcXG4rXFxuKyMgMi4gU2V0IG5yX2h1Z2VwYWdlcyB0byAwLCBvdmVyY29tbWl0IHRvIDBcXG4rZWNobyAwIFxcdTAwM2UgL3N5cy9rZXJuZWwvbW0vaHVnZXBhZ2VzL2h1Z2VwYWdlcy0yMDQ4a0IvbnJfaHVnZXBhZ2VzXFxuK2VjaG8gMCBcXHUwMDNlIC9zeXMva2VybmVsL21tL2h1Z2VwYWdlcy9odWdlcGFnZXMtMjA0OGtCL25yX292ZXJjb21taXRfaHVnZXBhZ2VzXFxuK1xcbisjIENoZWNrIHN1YnBvb2wgdXNhZ2UgYmVmb3JlIHJ1bm5pbmdcXG4rcmVhZCB0b3RhbCBmcmVlIFxcdTAwM2MgXFx1MDAzYyhzdGF0IC1mIC1jIFxcXCIlYiAlZlxcXCIgXFxcIiRNTlRfUEFUSFxcXCIpXFxuK3VzZWRfYmVmb3JlPSQoKHRvdGFsIC0gZnJlZSkpXFxuK2VjaG8gXFxcIkJlZm9yZSB0ZXN0IC0gU3VicG9vbCB0b3RhbCBibG9ja3M6ICR0b3RhbFxcXCJcXG4rZWNobyBcXFwiQmVmb3JlIHRlc3QgLSBTdWJwb29sIGZyZWUgYmxvY2tzOiAgJGZyZWVcXFwiXFxuK2VjaG8gXFxcIkJlZm9yZSB0ZXN0IC0gU3VicG9vbCB1c2VkIGJsb2NrczogICR1c2VkX2JlZm9yZVxcXCJcXG4raWYgWyBcXFwiJHVzZWRfYmVmb3JlXFxcIiAtbmUgMCBdOyB0aGVuXFxuKyAgICBlY2hvIFxcXCJFUlJPUjogU3VicG9vbCBpcyBub3QgY2xlYW4gYmVmb3JlIHRlc3Qgc3RhcnRzIVxcXCJcXG4rICAgIGV4aXQgMVxcbitmaVxcbitcXG4rIyBSdW4gZmFsbG9jYXRlIChleHBlY3RpbmcgZmFpbHVyZSlcXG4rZWNobyBcXFwiUnVubmluZyBmYWxsb2NhdGUgKGV4cGVjdGluZyBmYWlsdXJlKS4uLlxcXCJcXG4raWYgZmFsbG9jYXRlIC1sIDJNIFxcXCIkRklMRV9QQVRIXFxcIiAyXFx1MDAzZS9kZXYvbnVsbDsgdGhlblxcbisgICAgZWNobyBcXFwiRVJST1I6IGZhbGxvY2F0ZSBzdWNjZWVkZWQgYnV0IHNob3VsZCBoYXZlIGZhaWxlZCAobnJfaHVnZXBhZ2VzIGlzIDApXFxcIlxcbisgICAgZXhpdCAxXFxuK2ZpXFxuK1xcbisjIENoZWNrIHN1YnBvb2wgdXNhZ2UgdmlhIHN0YXRmc1xcbisjICViOiBUb3RhbCBibG9ja3NcXG4rIyAlZjogRnJlZSBibG9ja3NcXG4rcmVhZCB0b3RhbCBmcmVlIFxcdTAwM2MgXFx1MDAzYyhzdGF0IC1mIC1jIFxcXCIlYiAlZlxcXCIgXFxcIiRNTlRfUEFUSFxcXCIpXFxuK3VzZWQ9JCgodG90YWwgLSBmcmVlKSlcXG4rXFxuK2VjaG8gXFxcIlN1YnBvb2wgdG90YWwgYmxvY2tzOiAkdG90YWxcXFwiXFxuK2VjaG8gXFxcIlN1YnBvb2wgZnJlZSBibG9ja3M6ICAkZnJlZVxcXCJcXG4rZWNobyBcXFwiU3VicG9vbCB1c2VkIGJsb2NrcyAobGVha2VkIGlmIFxcdTAwM2UgMCk6ICR1c2VkXFxcIlxcbitcXG4raWYgWyBcXFwiJHVzZWRcXFwiIC1ndCAwIF07IHRoZW5cXG4rICAgIGVjaG8gXFxcIlJFU1VMVDogTEVBSyBERVRFQ1RFRCAoRkFJTClcXFwiXFxuKyAgICBleGl0IDFcXG4rZWxzZVxcbisgICAgZWNobyBcXFwiUkVTVUxUOiBOTyBMRUFLIChQQVNTKVxcXCJcXG4rICAgIGV4aXQgMFxcbitmaVxcbmRpZmYgLS1naXQgYS9zdWJwb29sX3NoYXJlZF9sZWFrLmMgYi9zdWJwb29sX3NoYXJlZF9sZWFrLmNcXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi41ODExZTE4ZDdmOGJlN1xcbi0tLSAvZGV2L251bGxcXG4rKysgYi9zdWJwb29sX3NoYXJlZF9sZWFrLmNcXG5AQCAtMCwwICsxLDI5IEBAXFxuKyNpbmNsdWRlIFxcdTAwM2NzdGRpby5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjc3RkbGliLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2N1bmlzdGQuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY3N5cy9tbWFuLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NzeXMvc3RhdC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjZmNudGwuaFxcdTAwM2VcXG4rXFxuKyNkZWZpbmUgSFBBR0VfU0laRSAoMiAqIDEwMjQgKiAxMDI0KVxcbitcXG4raW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KSB7XFxuKyAgICBpZiAoYXJnYyBcXHUwMDNjIDIpIHtcXG4rICAgICAgICBmcHJpbnRmKHN0ZGVyciwgXFxcIlVzYWdlOiAlcyBcXHUwMDNjZmlsZV9wYXRoXFx1MDAzZVxcXFxuXFxcIiwgYXJndlswXSk7XFxuKyAgICAgICAgcmV0dXJuIDE7XFxuKyAgICB9XFxuKyAgICBjb25zdCBjaGFyICpmaWxlX3BhdGggPSBhcmd2WzFdO1xcbitcXG4rICAgIGludCBmZCA9IG9wZW4oZmlsZV9wYXRoLCBPX0NSRUFUIHwgT19SRFdSLCAwNjY2KTtcXG4rICAgIGlmIChmZCBcXHUwMDNjIDApIHsgcGVycm9yKFxcXCJvcGVuXFxcIik7IHJldHVybiAxOyB9XFxuK1xcbisgICAgdm9pZCAqYWRkciA9IG1tYXAoTlVMTCwgMiAqIEhQQUdFX1NJWkUsIFBST1RfUkVBRCB8IFBST1RfV1JJVEUsIE1BUF9TSEFSRUQsIGZkLCAwKTtcXG4rICAgIGlmIChhZGRyID09IE1BUF9GQUlMRUQpIHsgcGVycm9yKFxcXCJtbWFwXFxcIik7IGNsb3NlKGZkKTsgcmV0dXJuIDE7IH1cXG4rXFxuKyAgICAqKHZvbGF0aWxlIGNoYXIgKilhZGRyID0gMTsgLy8gQWxsb2NhdGUgMXN0IHBhZ2Ugb25seS4gMm5kIHBhZ2UgcmVtYWlucyB1bmFsbG9jYXRlZCAoYnV0IHJlc2VydmVkKS5cXG4rXFxuKyAgICBtdW5tYXAoYWRkciwgMiAqIEhQQUdFX1NJWkUpO1xcbisgICAgY2xvc2UoZmQpO1xcbitcXG4rICAgIHJldHVybiAwO1xcbit9XFxuZGlmZiAtLWdpdCBhL3N1YnBvb2xfc2hhcmVkX2xlYWsuc2ggYi9zdWJwb29sX3NoYXJlZF9sZWFrLnNoXFxubmV3IGZpbGUgbW9kZSAxMDA3NTVcXG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uNDZjNjIyYjE4NTU5YTBcXG4tLS0gL2Rldi9udWxsXFxuKysrIGIvc3VicG9vbF9zaGFyZWRfbGVhay5zaFxcbkBAIC0wLDAgKzEsODYgQEBcXG4rIyEvYmluL2Jhc2hcXG4rXFxuK2lmIFsgXFxcIiRFVUlEXFxcIiAtbmUgMCBdOyB0aGVuXFxuKyAgICBlY2hvIFxcXCJQbGVhc2UgcnVuIGFzIHJvb3RcXFwiXFxuKyAgICBleGl0IDFcXG4rZmlcXG4rXFxuK01OVF9QQVRIPVxcXCIvdG1wL21udF9odWdldGxiX3NoYXJlZF9sZWFrXFxcIlxcbitGSUxFX1BBVEg9XFxcIiRNTlRfUEFUSC90ZXN0X2ZpbGVcXFwiXFxuK1xcbisjIFNhdmUgb3JpZ2luYWwgdmFsdWVzXFxuK29yaWdfbnI9JChjYXQgL3N5cy9rZXJuZWwvbW0vaHVnZXBhZ2VzL2h1Z2VwYWdlcy0yMDQ4a0IvbnJfaHVnZXBhZ2VzKVxcbitcXG4rY2xlYW51cCgpIHtcXG4rICAgIGVjaG8gXFxcIkNsZWFuaW5nIHVwLi4uXFxcIlxcbisgICAgcm0gLWYgXFxcIiRGSUxFX1BBVEhcXFwiXFxuKyAgICB1bW91bnQgXFxcIiRNTlRfUEFUSFxcXCIgMlxcdTAwM2UvZGV2L251bGxcXG4rICAgIHJtZGlyIFxcXCIkTU5UX1BBVEhcXFwiIDJcXHUwMDNlL2Rldi9udWxsXFxuKyAgICBlY2hvIFxcXCIkb3JpZ19uclxcXCIgXFx1MDAzZSAvc3lzL2tlcm5lbC9tbS9odWdlcGFnZXMvaHVnZXBhZ2VzLTIwNDhrQi9ucl9odWdlcGFnZXNcXG4rICAgIGVjaG8gXFxcIkNsZWFudXAgZG9uZS5cXFwiXFxuK31cXG4rdHJhcCBjbGVhbnVwIEVYSVRcXG4rXFxuKyMgMS4gU2V0IG5yX2h1Z2VwYWdlcyB0byAyXFxuK2VjaG8gMiBcXHUwMDNlIC9zeXMva2VybmVsL21tL2h1Z2VwYWdlcy9odWdlcGFnZXMtMjA0OGtCL25yX2h1Z2VwYWdlc1xcbitcXG4rIyAyLiBNb3VudCBodWdldGxiZnMgd2l0aCBtaW5fc2l6ZT0yTSAoMSBwYWdlKVxcbitta2RpciAtcCBcXFwiJE1OVF9QQVRIXFxcIlxcbitpZiAhIG1vdW50IC10IGh1Z2V0bGJmcyAtbyBtaW5fc2l6ZT0yTSBub25lIFxcXCIkTU5UX1BBVEhcXFwiOyB0aGVuXFxuKyAgICBlY2hvIFxcXCJGYWlsZWQgdG8gbW91bnQgaHVnZXRsYmZzXFxcIlxcbisgICAgZXhpdCAxXFxuK2ZpXFxuK1xcbisjIENoZWNrIHJlc3ZfaHVnZXBhZ2VzIGFmdGVyIG1vdW50IChzaG91bGQgYmUgMSlcXG4raW5pdGlhbF9yZXN2PSQoY2F0IC9zeXMva2VybmVsL21tL2h1Z2VwYWdlcy9odWdlcGFnZXMtMjA0OGtCL3Jlc3ZfaHVnZXBhZ2VzKVxcbitlY2hvIFxcXCJJbml0aWFsIHJlc3ZfaHVnZXBhZ2VzIChhZnRlciBtb3VudCk6ICRpbml0aWFsX3Jlc3ZcXFwiXFxuK2lmIFsgXFxcIiRpbml0aWFsX3Jlc3ZcXFwiIC1uZSAxIF07IHRoZW5cXG4rICAgIGVjaG8gXFxcIkVSUk9SOiBJbml0aWFsIHJlc3ZfaHVnZXBhZ2VzIGlzIG5vdCAxIVxcXCJcXG4rICAgIGV4aXQgMVxcbitmaVxcbitcXG4rIyBWZXJpZnkgcmVwcm9kdWNlciBiaW5hcnkgZXhpc3RzXFxuK2lmIFsgISAteCAuL3N1YnBvb2xfc2hhcmVkX2xlYWsgXTsgdGhlblxcbisgICAgZWNobyBcXFwicmVwcm9kdWNlciBiaW5hcnkgJy4vc3VicG9vbF9zaGFyZWRfbGVhaycgbm90IGZvdW5kIG9yIG5vdCBleGVjdXRhYmxlLlxcXCJcXG4rICAgIGVjaG8gXFxcIlBsZWFzZSBjb21waWxlIGl0IGZpcnN0OiBnY2MgLXN0YXRpYyAtbyBzdWJwb29sX3NoYXJlZF9sZWFrIHN1YnBvb2xfc2hhcmVkX2xlYWsuY1xcXCJcXG4rICAgIGV4aXQgMVxcbitmaVxcbitcXG4rIyAzLiBSdW4gaGVscGVyIHRvIG1hcCA0TUIsIGFsbG9jYXRlIDJNQiwgYW5kIGNsb3NlLlxcbisjIFRoaXMgY3JlYXRlcyAyIHJlc2VydmF0aW9ucywgY29uc3VtZXMgMSAoYnkgYWxsb2NhdGluZyBQYWdlIDApLlxcbisjIFRoZSB1bmFsbG9jYXRlZCBQYWdlIDEgcmVzZXJ2YXRpb24gcmVtYWlucyBhY3RpdmUgaW4gdGhlIGlub2RlJ3MgcmVzdl9tYXAuXFxuK2VjaG8gXFxcIlJ1bm5pbmcgaGVscGVyLi4uXFxcIlxcbisuL3N1YnBvb2xfc2hhcmVkX2xlYWsgXFxcIiRGSUxFX1BBVEhcXFwiXFxuK1xcbityZXN2X2FmdGVyX2hlbHBlcj0kKGNhdCAvc3lzL2tlcm5lbC9tbS9odWdlcGFnZXMvaHVnZXBhZ2VzLTIwNDhrQi9yZXN2X2h1Z2VwYWdlcylcXG4rZWNobyBcXFwicmVzdl9odWdlcGFnZXMgYWZ0ZXIgaGVscGVyIChzaG91bGQgYmUgMSk6ICRyZXN2X2FmdGVyX2hlbHBlclxcXCJcXG4rIyBQYWdlIDAgaXMgYWxsb2NhdGVkIChubyBsb25nZXIgcmVzZXJ2ZWQpLiBQYWdlIDEgaXMgcmVzZXJ2ZWQuXFxuKyMgU28gcmVzdl9odWdlcGFnZXMgc2hvdWxkIGJlIDEuXFxuK2lmIFsgXFxcIiRyZXN2X2FmdGVyX2hlbHBlclxcXCIgLW5lIDEgXTsgdGhlblxcbisgICAgZWNobyBcXFwiRVJST1I6IHJlc3ZfaHVnZXBhZ2VzIGlzIG5vdCAxIGFmdGVyIGhlbHBlciBydW4hXFxcIlxcbisgICAgZXhpdCAxXFxuK2ZpXFxuK1xcbisjIDQuIFRydW5jYXRlIGZpbGUgdG8gMk1CIChyZWxlYXNlcyBQYWdlIDEgcmVzZXJ2YXRpb24pXFxuK2VjaG8gXFxcIlRydW5jYXRpbmcgZmlsZSB0byAyTUIgKHJlbGVhc2luZyAxIHBhZ2UgcmVzZXJ2YXRpb24pLi4uXFxcIlxcbit0cnVuY2F0ZSAtcyAyTSBcXFwiJEZJTEVfUEFUSFxcXCJcXG4rXFxuKyMgQ2hlY2sgcmVzdl9odWdlcGFnZXMgYWZ0ZXIgdHJ1bmNhdGUuXFxuKyMgU2luY2UgUGFnZSAwIGlzIHN0aWxsIGFsbG9jYXRlZCAoYW5kIGluIHBhZ2UgY2FjaGUpLCBhbmQgc2F0aXNmaWVzIHRoZVxcbisjIG1pbl9zaXplPTJNIGd1YXJhbnRlZSwgd2Ugc2hvdWxkIGhhdmUgMCByZXNlcnZhdGlvbnMgcmVtYWluaW5nLlxcbisjIElmIHRoZSBidWcgaXMgcHJlc2VudCwgdGhlIHRydW5jYXRlIHBhdGggd2lsbCBpbmNvcnJlY3RseSByZXN0b3JlIHRoZVxcbisjIHJlc2VydmF0aW9uIHRvIHRoZSBzdWJwb29sIGFuZCBza2lwIHJlbGVhc2luZyBpdCBnbG9iYWxseSwgbGVhdmluZ1xcbisjIHJlc3ZfaHVnZXBhZ2VzIGF0IDEuXFxuK2ZpbmFsX3Jlc3Y9JChjYXQgL3N5cy9rZXJuZWwvbW0vaHVnZXBhZ2VzL2h1Z2VwYWdlcy0yMDQ4a0IvcmVzdl9odWdlcGFnZXMpXFxuK2VjaG8gXFxcIkZpbmFsIHJlc3ZfaHVnZXBhZ2VzIChhZnRlciAyTUIgdHJ1bmNhdGUpOiAkZmluYWxfcmVzdlxcXCJcXG4rXFxuK2lmIFsgXFxcIiRmaW5hbF9yZXN2XFxcIiAtZXEgMSBdOyB0aGVuXFxuKyAgICBlY2hvIFxcXCJSRVNVTFQ6IExFQUsgREVURUNURUQgKEZBSUwpXFxcIlxcbisgICAgZXhpdCAxXFxuK2VsaWYgWyBcXFwiJGZpbmFsX3Jlc3ZcXFwiIC1lcSAwIF07IHRoZW5cXG4rICAgIGVjaG8gXFxcIlJFU1VMVDogTk8gTEVBSyAoUEFTUylcXFwiXFxuKyAgICBleGl0IDBcXG4rZWxzZVxcbisgICAgZWNobyBcXFwiUkVTVUxUOiBVTkVYUEVDVEVEIFNUQVRFICgkZmluYWxfcmVzdilcXFwiXFxuKyAgICBleGl0IDJcXG4rZmlcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9odWdldGxiX3N1YnBvb2wvLmdpdGlnbm9yZSBiL3Rvb2xzL3Rlc3RpbmcvaHVnZXRsYl9zdWJwb29sLy5naXRpZ25vcmVcXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi43MzQ4YzJjNzJmMWUxMVxcbi0tLSAvZGV2L251bGxcXG4rKysgYi90b29scy90ZXN0aW5nL2h1Z2V0bGJfc3VicG9vbC8uZ2l0aWdub3JlXFxuQEAgLTAsMCArMSBAQFxcbit0ZXN0X3N1YnBvb2xcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9odWdldGxiX3N1YnBvb2wvTWFrZWZpbGUgYi90b29scy90ZXN0aW5nL2h1Z2V0bGJfc3VicG9vbC9NYWtlZmlsZVxcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLjFiZGI3ZTI2MzU2MTQxXFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL3Rvb2xzL3Rlc3RpbmcvaHVnZXRsYl9zdWJwb29sL01ha2VmaWxlXFxuQEAgLTAsMCArMSwxOCBAQFxcbisjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuKy5QSE9OWTogYWxsIGNsZWFuIHRlc3RcXG4rXFxuK0NDID0gZ2NjXFxuK0NGTEFHUyA9IC1XYWxsIC1PMiAtSS4uL3NoYXJlZCAtSS4gLUkuLi8uLi9pbmNsdWRlIC1JLi4vLi4vYXJjaC94ODYvaW5jbHVkZSAtcHRocmVhZFxcbitLRVJORUxfU1VCUE9PTF9IID0gLi4vLi4vLi4vbW0vaHVnZXRsYl9zdWJwb29sLmhcXG4rS0VSTkVMX1NVQlBPT0xfQyA9IC4uLy4uLy4uL21tL2h1Z2V0bGJfc3VicG9vbC5jXFxuK1xcbithbGw6IHRlc3RcXG4rXFxuK3Rlc3Rfc3VicG9vbDogdGVzdF9zdWJwb29sLmMgJChLRVJORUxfU1VCUE9PTF9DKSAkKEtFUk5FTF9TVUJQT09MX0gpXFxuK1xcdCQoQ0MpICQoQ0ZMQUdTKSB0ZXN0X3N1YnBvb2wuYyAtbyB0ZXN0X3N1YnBvb2xcXG4rXFxuK3Rlc3Q6IHRlc3Rfc3VicG9vbFxcbitcXHQuL3Rlc3Rfc3VicG9vbFxcbitcXG4rY2xlYW46XFxuK1xcdHJtIC1mIHRlc3Rfc3VicG9vbFxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL2h1Z2V0bGJfc3VicG9vbC90ZXN0X3N1YnBvb2wuYyBiL3Rvb2xzL3Rlc3RpbmcvaHVnZXRsYl9zdWJwb29sL3Rlc3Rfc3VicG9vbC5jXFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcXG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uNzg5MDAyNzRjYzI2NDdcXG4tLS0gL2Rldi9udWxsXFxuKysrIGIvdG9vbHMvdGVzdGluZy9odWdldGxiX3N1YnBvb2wvdGVzdF9zdWJwb29sLmNcXG5AQCAtMCwwICsxLDQwMCBAQFxcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxcbisjaW5jbHVkZSBcXHUwMDNjYXNzZXJ0LmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NzdGRsaWIuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3R5cGVzLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9zbGFiLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9idWcuaFxcdTAwM2VcXG4rXFxuKy8qIE1vY2tlZCBVc2Vyc3BhY2UgaW1wbGVtZW50YXRpb24gZm9yIEtlcm5lbCBTdWJwb29sIGFsbG9jYXRpb24gZGVwZW5kZW5jaWVzICovXFxuK3N0cnVjdCBoc3RhdGUge1xcbitcXHRpbnQgZHVtbXk7XFxuK307XFxuK1xcbisjdW5kZWYga3phbGxvY19vYmpcXG4rI3VuZGVmIGt6YWxsb2Nfb2Jqc1xcbisjZGVmaW5lIGt6YWxsb2Nfb2JqKFAsIC4uLikgbWFsbG9jKHNpemVvZihQKSlcXG4rI2RlZmluZSBremFsbG9jX29ianMoUCwgQ09VTlQsIC4uLikgbWFsbG9jKHNpemVvZihQKSAqIChDT1VOVCkpXFxuK1xcbisjZGVmaW5lIGtmcmVlIGZyZWVcXG4rI2RlZmluZSBrbWFsbG9jIG1hbGxvY1xcbitcXG4rI2RlZmluZSBodWdlX3BhZ2Vfc2hpZnQoaCkgKDIxICsgKDAgKiAoKHVuc2lnbmVkIGxvbmcpKGgpIFxcdTAwMjYgMCkpKVxcbisjZGVmaW5lIGh1Z2VfcGFnZV9zaXplKGgpICgxVUwgXFx1MDAzY1xcdTAwM2MgaHVnZV9wYWdlX3NoaWZ0KGgpKVxcbitcXG4rc3RhdGljIGJvb2wgaHVnZXRsYl9hY2N0X21lbW9yeV9jYWxsZWQ7XFxuK3N0YXRpYyBzdHJ1Y3QgaHN0YXRlICpodWdldGxiX2FjY3RfbWVtb3J5X2g7XFxuK3N0YXRpYyBsb25nIGh1Z2V0bGJfYWNjdF9tZW1vcnlfZGVsdGE7XFxuK1xcbitzdGF0aWMgaW50IGh1Z2V0bGJfYWNjdF9tZW1vcnkoc3RydWN0IGhzdGF0ZSAqaCwgbG9uZyBkZWx0YSlcXG4re1xcbitcXHRodWdldGxiX2FjY3RfbWVtb3J5X2NhbGxlZCA9IHRydWU7XFxuK1xcdGh1Z2V0bGJfYWNjdF9tZW1vcnlfaCA9IGg7XFxuK1xcdGh1Z2V0bGJfYWNjdF9tZW1vcnlfZGVsdGEgPSBkZWx0YTtcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIHJlc2V0X2h1Z2V0bGJfYWNjdF9tZW1vcnlfbW9jayh2b2lkKVxcbit7XFxuK1xcdGh1Z2V0bGJfYWNjdF9tZW1vcnlfY2FsbGVkID0gZmFsc2U7XFxuK1xcdGh1Z2V0bGJfYWNjdF9tZW1vcnlfaCA9IE5VTEw7XFxuK1xcdGh1Z2V0bGJfYWNjdF9tZW1vcnlfZGVsdGEgPSAwO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBhc3NlcnRfaHVnZXRsYl9hY2N0X21lbW9yeV9jYWxsZWQoc3RydWN0IGhzdGF0ZSAqaCwgbG9uZyBkZWx0YSlcXG4re1xcbitcXHRhc3NlcnQoaHVnZXRsYl9hY2N0X21lbW9yeV9jYWxsZWQpO1xcbitcXHRhc3NlcnQoaHVnZXRsYl9hY2N0X21lbW9yeV9oID09IGgpO1xcbitcXHRhc3NlcnQoaHVnZXRsYl9hY2N0X21lbW9yeV9kZWx0YSA9PSBkZWx0YSk7XFxuK1xcbitcXHRyZXNldF9odWdldGxiX2FjY3RfbWVtb3J5X21vY2soKTtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgYXNzZXJ0X2h1Z2V0bGJfYWNjdF9tZW1vcnlfbm90X2NhbGxlZCh2b2lkKVxcbit7XFxuK1xcdGFzc2VydCghaHVnZXRsYl9hY2N0X21lbW9yeV9jYWxsZWQpO1xcbit9XFxuK1xcbisjaW5jbHVkZSBcXFwiLi4vLi4vLi4vbW0vaHVnZXRsYl9zdWJwb29sLmhcXFwiXFxuKyNpbmNsdWRlIFxcXCIuLi8uLi8uLi9tbS9odWdldGxiX3N1YnBvb2wuY1xcXCJcXG4rXFxuK3N0YXRpYyB2b2lkIHRlc3Rfc3VicG9vbF9uZXdfcHV0X25vX21pbl9saW1pdCh2b2lkKVxcbit7XFxuK1xcdHN0cnVjdCBoc3RhdGUgaDtcXG4rXFx0c3RydWN0IGh1Z2VwYWdlX3N1YnBvb2wgKnNwb29sO1xcbitcXG4rXFx0c3Bvb2wgPSBodWdlcGFnZV9uZXdfc3VicG9vbChcXHUwMDI2aCwgMTAsIC0xKTtcXG4rXFx0YXNzZXJ0KHNwb29sICE9IE5VTEwpO1xcbitcXHRhc3NlcnQoc3Bvb2wtXFx1MDAzZW1heF9ocGFnZXMgPT0gMTApO1xcbitcXHRhc3NlcnQoc3Bvb2wtXFx1MDAzZW1pbl9ocGFnZXMgPT0gLTEpO1xcbitcXHRhc3NlcnQoc3Bvb2wtXFx1MDAzZXJzdl9ocGFnZXMgPT0gLTEpO1xcbitcXHRhc3NlcnQoc3Bvb2wtXFx1MDAzZWNvdW50ID09IDEpO1xcbitcXHRhc3NlcnRfaHVnZXRsYl9hY2N0X21lbW9yeV9ub3RfY2FsbGVkKCk7XFxuK1xcbitcXHRodWdlcGFnZV9wdXRfc3VicG9vbChzcG9vbCk7XFxuK1xcdGFzc2VydF9odWdldGxiX2FjY3RfbWVtb3J5X25vdF9jYWxsZWQoKTtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgdGVzdF9zdWJwb29sX25ld19wdXRfd2l0aF9taW5fbGltaXQodm9pZClcXG4re1xcbitcXHRzdHJ1Y3QgaHN0YXRlIGg7XFxuK1xcdHN0cnVjdCBodWdlcGFnZV9zdWJwb29sICpzcG9vbDtcXG4rXFxuK1xcdHNwb29sID0gaHVnZXBhZ2VfbmV3X3N1YnBvb2woXFx1MDAyNmgsIDIwLCA1KTtcXG4rXFx0YXNzZXJ0KHNwb29sICE9IE5VTEwpO1xcbitcXHRhc3NlcnQoc3Bvb2wtXFx1MDAzZW1heF9ocGFnZXMgPT0gMjApO1xcbitcXHRhc3NlcnQoc3Bvb2wtXFx1MDAzZW1pbl9ocGFnZXMgPT0gNSk7XFxuK1xcdGFzc2VydChzcG9vbC1cXHUwMDNlcnN2X2hwYWdlcyA9PSA1KTtcXG4rXFx0YXNzZXJ0KHNwb29sLVxcdTAwM2Vjb3VudCA9PSAxKTtcXG4rXFx0YXNzZXJ0X2h1Z2V0bGJfYWNjdF9tZW1vcnlfY2FsbGVkKFxcdTAwMjZoLCA1KTtcXG4rXFxuK1xcdGh1Z2VwYWdlX3B1dF9zdWJwb29sKHNwb29sKTtcXG4rXFx0YXNzZXJ0X2h1Z2V0bGJfYWNjdF9tZW1vcnlfY2FsbGVkKFxcdTAwMjZoLCAtNSk7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIHRlc3Rfc3VicG9vbF9nZXRfcGFnZXNfYmVsb3dfbWluKHZvaWQpXFxuK3tcXG4rXFx0c3RydWN0IGhzdGF0ZSBoO1xcbitcXHRzdHJ1Y3QgaHVnZXBhZ2Vfc3VicG9vbCAqc3Bvb2w7XFxuK1xcdGxvbmcgcmV0O1xcbitcXG4rXFx0LyogTGV0J3MgaW5pdGlhbGl6ZTogbWluX2hwYWdlcyA9IDEwLCB1c2VkX2hwYWdlcyA9IDksIHJzdl9ocGFnZXMgPSAxICovXFxuK1xcdHNwb29sID0gaHVnZXBhZ2VfbmV3X3N1YnBvb2woXFx1MDAyNmgsIC0xLCAxMCk7XFxuK1xcdGFzc2VydF9odWdldGxiX2FjY3RfbWVtb3J5X2NhbGxlZChcXHUwMDI2aCwgMTApO1xcbitcXG4rXFx0cmV0ID0gaHVnZXBhZ2Vfc3VicG9vbF9nZXRfcGFnZXMoc3Bvb2wsIDkpO1xcbitcXHRhc3NlcnQocmV0ID09IDApO1xcbitcXHRhc3NlcnQoc3Bvb2wtXFx1MDAzZXVzZWRfaHBhZ2VzID09IDkpO1xcbitcXHRhc3NlcnQoc3Bvb2wtXFx1MDAzZXJzdl9ocGFnZXMgPT0gMSk7XFxuK1xcbitcXHQvKiBJbnZva2UgR2V0IChDb25zdW1lcyB0aGUgcmVtYWluaW5nIDEgc3VicG9vbCByZXNlcnZlISkgKi9cXG4rXFx0cmV0ID0gaHVnZXBhZ2Vfc3VicG9vbF9nZXRfcGFnZXMoc3Bvb2wsIDEpO1xcbitcXHRhc3NlcnQocmV0ID09IDApOyAvKiBDb3ZlcmVkIGJ5IHN1YnBvb2wgcmVzZXJ2ZSEgKi9cXG4rXFx0YXNzZXJ0KHNwb29sLVxcdTAwM2V1c2VkX2hwYWdlcyA9PSAxMCk7XFxuK1xcdGFzc2VydChzcG9vbC1cXHUwMDNlcnN2X2hwYWdlcyA9PSAwKTtcXG4rXFxuK1xcdC8qIEludm9rZSBQdXQgKFJlcGxlbmlzaGVzIHRoZSBzdWJwb29sIHJlc2VydmUhKSAqL1xcbitcXHRyZXQgPSBodWdlcGFnZV9zdWJwb29sX3B1dF9wYWdlcyhzcG9vbCwgMSk7XFxuK1xcdGFzc2VydChyZXQgPT0gMCk7IC8qIEtlcHQgYnkgc3VicG9vbCByZXNlcnZlISAqL1xcbitcXHRhc3NlcnQoc3Bvb2wtXFx1MDAzZXVzZWRfaHBhZ2VzID09IDkpO1xcbitcXHRhc3NlcnQoc3Bvb2wtXFx1MDAzZXJzdl9ocGFnZXMgPT0gMSk7XFxuK1xcbitcXHQvKiBDbGVhbnVwOiBSZXR1cm4gdXNlZF9ocGFnZXMgdG8gMCBzbyB0aGUgc3VicG9vbCBmcmVlcyBzeW1tZXRyaWNhbGx5ISAqL1xcbitcXHRodWdlcGFnZV9zdWJwb29sX3B1dF9wYWdlcyhzcG9vbCwgOSk7XFxuK1xcdGh1Z2VwYWdlX3B1dF9zdWJwb29sKHNwb29sKTtcXG4rXFx0YXNzZXJ0X2h1Z2V0bGJfYWNjdF9tZW1vcnlfY2FsbGVkKFxcdTAwMjZoLCAtMTApO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCB0ZXN0X3N1YnBvb2xfZ2V0X3BhZ2VzX2Nyb3NzaW5nX21pbih2b2lkKVxcbit7XFxuK1xcdHN0cnVjdCBoc3RhdGUgaDtcXG4rXFx0c3RydWN0IGh1Z2VwYWdlX3N1YnBvb2wgKnNwb29sO1xcbitcXHRsb25nIHJldDtcXG4rXFxuK1xcdC8qIExldCdzIGluaXRpYWxpemU6IG1pbl9ocGFnZXMgPSAxMCwgdXNlZF9ocGFnZXMgPSAxMCwgcnN2X2hwYWdlcyA9IDAgKi9cXG4rXFx0c3Bvb2wgPSBodWdlcGFnZV9uZXdfc3VicG9vbChcXHUwMDI2aCwgLTEsIDEwKTtcXG4rXFx0YXNzZXJ0X2h1Z2V0bGJfYWNjdF9tZW1vcnlfY2FsbGVkKFxcdTAwMjZoLCAxMCk7XFxuK1xcbitcXHRodWdlcGFnZV9zdWJwb29sX2dldF9wYWdlcyhzcG9vbCwgMTApO1xcbitcXHRhc3NlcnQoc3Bvb2wtXFx1MDAzZXVzZWRfaHBhZ2VzID09IDEwKTtcXG4rXFx0YXNzZXJ0KHNwb29sLVxcdTAwM2Vyc3ZfaHBhZ2VzID09IDApO1xcbitcXG4rXFx0LyogSW52b2tlIEdldCAoVHJpZ2dlcnMgYSByZXF1ZXN0IGZvciBhIEdsb2JhbCBCdWRkeS9TdXJwbHVzIHBhZ2UhKSAqL1xcbitcXHRyZXQgPSBodWdlcGFnZV9zdWJwb29sX2dldF9wYWdlcyhzcG9vbCwgMSk7XFxuK1xcdGFzc2VydChyZXQgPT0gMSk7IC8qIFJlcXVpcmVzIGdsb2JhbCBwYWdlISAqL1xcbitcXHRhc3NlcnQoc3Bvb2wtXFx1MDAzZXVzZWRfaHBhZ2VzID09IDExKTtcXG4rXFx0YXNzZXJ0KHNwb29sLVxcdTAwM2Vyc3ZfaHBhZ2VzID09IDApO1xcbitcXG4rXFx0LyogSW52b2tlIFB1dCAoQWJvdmUgbWluaW11bSwgc28gaXQgcmVsZWFzZXMgdGhlIHBhZ2UgdG8gdGhlIEdsb2JhbCBQb29sISkgKi9cXG4rXFx0cmV0ID0gaHVnZXBhZ2Vfc3VicG9vbF9wdXRfcGFnZXMoc3Bvb2wsIDEpO1xcbitcXHRhc3NlcnQocmV0ID09IDEpOyAvKiBEcm9wcGVkIHRvIGdsb2JhbCBwb29sISAqL1xcbitcXHRhc3NlcnQoc3Bvb2wtXFx1MDAzZXVzZWRfaHBhZ2VzID09IDEwKTtcXG4rXFx0YXNzZXJ0KHNwb29sLVxcdTAwM2Vyc3ZfaHBhZ2VzID09IDApO1xcbitcXG4rXFx0LyogQ2xlYW51cCAqL1xcbitcXHRodWdlcGFnZV9zdWJwb29sX3B1dF9wYWdlcyhzcG9vbCwgMTApO1xcbitcXHRodWdlcGFnZV9wdXRfc3VicG9vbChzcG9vbCk7XFxuK1xcdGFzc2VydF9odWdldGxiX2FjY3RfbWVtb3J5X2NhbGxlZChcXHUwMDI2aCwgLTEwKTtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgdGVzdF9zdWJwb29sX2dldF9wYWdlc19jcm9zc2luZ19taW5fbXVsdGkodm9pZClcXG4re1xcbitcXHRzdHJ1Y3QgaHN0YXRlIGg7XFxuK1xcdHN0cnVjdCBodWdlcGFnZV9zdWJwb29sICpzcG9vbDtcXG4rXFx0bG9uZyByZXQ7XFxuK1xcbitcXHQvKiBTY2VuYXJpbyAxOiBDcm9zc2luZyBlbnRpcmVseSBpbnRvIHN1cnBsdXMgdGVycml0b3J5IGJ5IGEgZGVsdGEgXFx1MDAzZSAxICovXFxuK1xcdC8qIExldCdzIGluaXRpYWxpemU6IG1pbl9ocGFnZXMgPSAxMCwgdXNlZF9ocGFnZXMgPSA4LCByc3ZfaHBhZ2VzID0gMiAqL1xcbitcXHRzcG9vbCA9IGh1Z2VwYWdlX25ld19zdWJwb29sKFxcdTAwMjZoLCAtMSwgMTApO1xcbitcXHRhc3NlcnRfaHVnZXRsYl9hY2N0X21lbW9yeV9jYWxsZWQoXFx1MDAyNmgsIDEwKTtcXG4rXFxuK1xcdHJldCA9IGh1Z2VwYWdlX3N1YnBvb2xfZ2V0X3BhZ2VzKHNwb29sLCA4KTtcXG4rXFx0YXNzZXJ0KHJldCA9PSAwKTtcXG4rXFx0YXNzZXJ0KHNwb29sLVxcdTAwM2V1c2VkX2hwYWdlcyA9PSA4KTtcXG4rXFx0YXNzZXJ0KHNwb29sLVxcdTAwM2Vyc3ZfaHBhZ2VzID09IDIpO1xcbitcXG4rXFx0LyogSW52b2tlIEdldCB3aXRoIGRlbHRhID0gNSAoQ3Jvc3NlcyBtaW4gbGltaXQgb2YgMTAgdXAgdG8gMTMpICovXFxuK1xcdHJldCA9IGh1Z2VwYWdlX3N1YnBvb2xfZ2V0X3BhZ2VzKHNwb29sLCA1KTtcXG4rXFx0YXNzZXJ0KHJldCA9PSAzKTsgLyogKDggKyA1KSAtIDEwID0gMyBnbG9iYWwgcGFnZXMgcmVxdWlyZWQhICovXFxuK1xcdGFzc2VydChzcG9vbC1cXHUwMDNldXNlZF9ocGFnZXMgPT0gMTMpO1xcbitcXHRhc3NlcnQoc3Bvb2wtXFx1MDAzZXJzdl9ocGFnZXMgPT0gMCk7XFxuK1xcbitcXHQvKiBJbnZva2UgUHV0IHdpdGggZGVsdGEgPSA1IChEcm9wcyBmcm9tIDEzIGRvd24gdG8gOCkgKi9cXG4rXFx0cmV0ID0gaHVnZXBhZ2Vfc3VicG9vbF9wdXRfcGFnZXMoc3Bvb2wsIDUpO1xcbitcXHRhc3NlcnQocmV0ID09IDMpOyAvKiAzIHN1cnBsdXMgcGFnZXMgcmVsZWFzZWQgdG8gdGhlIGdsb2JhbCBwb29sISAqL1xcbitcXHRhc3NlcnQoc3Bvb2wtXFx1MDAzZXVzZWRfaHBhZ2VzID09IDgpO1xcbitcXHRhc3NlcnQoc3Bvb2wtXFx1MDAzZXJzdl9ocGFnZXMgPT0gMik7IC8qIDIgc3VicG9vbCByZXNlcnZlcyBwZXJmZWN0bHkgcmVzdG9yZWQhICovXFxuK1xcbitcXHQvKiBTY2VuYXJpbyAyOiBMYW5kaW5nIGV4YWN0bHkgb24gdGhlIG1pbl9ocGFnZXMgYm91bmRhcnkgd2l0aCBkZWx0YSBcXHUwMDNlIDEgKi9cXG4rXFx0cmV0ID0gaHVnZXBhZ2Vfc3VicG9vbF9nZXRfcGFnZXMoc3Bvb2wsIDIpO1xcbitcXHRhc3NlcnQocmV0ID09IDApOyAvKiBQZXJmZWN0bHkgY292ZXJlZCBieSByZW1haW5pbmcgMiBzdWJwb29sIHJlc2VydmVzISAqL1xcbitcXHRhc3NlcnQoc3Bvb2wtXFx1MDAzZXVzZWRfaHBhZ2VzID09IDEwKTtcXG4rXFx0YXNzZXJ0KHNwb29sLVxcdTAwM2Vyc3ZfaHBhZ2VzID09IDApO1xcbitcXG4rXFx0cmV0ID0gaHVnZXBhZ2Vfc3VicG9vbF9wdXRfcGFnZXMoc3Bvb2wsIDIpO1xcbitcXHRhc3NlcnQocmV0ID09IDApOyAvKiBTd2FsbG93ZWQgcGVyZmVjdGx5IHRvIHJlcGxlbmlzaCB0aGUgMiBzdWJwb29sIHJlc2VydmVzISAqL1xcbitcXHRhc3NlcnQoc3Bvb2wtXFx1MDAzZXVzZWRfaHBhZ2VzID09IDgpO1xcbitcXHRhc3NlcnQoc3Bvb2wtXFx1MDAzZXJzdl9ocGFnZXMgPT0gMik7XFxuK1xcbitcXHQvKiBDbGVhbnVwICovXFxuK1xcdGh1Z2VwYWdlX3N1YnBvb2xfcHV0X3BhZ2VzKHNwb29sLCA4KTtcXG4rXFx0aHVnZXBhZ2VfcHV0X3N1YnBvb2woc3Bvb2wpO1xcbitcXHRhc3NlcnRfaHVnZXRsYl9hY2N0X21lbW9yeV9jYWxsZWQoXFx1MDAyNmgsIC0xMCk7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIHRlc3Rfc3VicG9vbF9nZXRfcGFnZXNfbWF4X2xpbWl0KHZvaWQpXFxuK3tcXG4rXFx0c3RydWN0IGhzdGF0ZSBoO1xcbitcXHRzdHJ1Y3QgaHVnZXBhZ2Vfc3VicG9vbCAqc3Bvb2w7XFxuK1xcdGxvbmcgcmV0O1xcbitcXG4rXFx0c3Bvb2wgPSBodWdlcGFnZV9uZXdfc3VicG9vbChcXHUwMDI2aCwgNSwgLTEpO1xcbitcXHRhc3NlcnRfaHVnZXRsYl9hY2N0X21lbW9yeV9ub3RfY2FsbGVkKCk7XFxuK1xcbitcXHRyZXQgPSBodWdlcGFnZV9zdWJwb29sX2dldF9wYWdlcyhzcG9vbCwgNSk7XFxuK1xcdGFzc2VydChyZXQgPT0gNSk7XFxuK1xcdGFzc2VydChzcG9vbC1cXHUwMDNldXNlZF9ocGFnZXMgPT0gNSk7XFxuK1xcdGFzc2VydChzcG9vbC1cXHUwMDNlcnN2X2hwYWdlcyA9PSAtMSk7XFxuK1xcbitcXHQvKiBJbnZva2UgR2V0IChTaG91bGQgdHJpZ2dlciAtRU5PTUVNIGR1ZSB0byBtYXggY2FwIGxpbWl0IGV4Y2VlZGVkISkgKi9cXG4rXFx0cmV0ID0gaHVnZXBhZ2Vfc3VicG9vbF9nZXRfcGFnZXMoc3Bvb2wsIDEpO1xcbitcXHRhc3NlcnQocmV0ID09IC1FTk9NRU0pO1xcbitcXHRhc3NlcnQoc3Bvb2wtXFx1MDAzZXVzZWRfaHBhZ2VzID09IDUpOyAvKiBVbmNoYW5nZWQgKi9cXG4rXFxuK1xcdC8qIENsZWFudXAgKi9cXG4rXFx0aHVnZXBhZ2Vfc3VicG9vbF9wdXRfcGFnZXMoc3Bvb2wsIDUpO1xcbitcXHRodWdlcGFnZV9wdXRfc3VicG9vbChzcG9vbCk7XFxuK1xcdGFzc2VydF9odWdldGxiX2FjY3RfbWVtb3J5X25vdF9jYWxsZWQoKTtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgdGVzdF9zdWJwb29sX2dldF9wYWdlc19ub19saW1pdHModm9pZClcXG4re1xcbitcXHRzdHJ1Y3QgaHN0YXRlIGg7XFxuK1xcdHN0cnVjdCBodWdlcGFnZV9zdWJwb29sICpzcG9vbDtcXG4rXFx0bG9uZyByZXQ7XFxuK1xcbitcXHRzcG9vbCA9IGh1Z2VwYWdlX25ld19zdWJwb29sKFxcdTAwMjZoLCAtMSwgLTEpO1xcbitcXHRhc3NlcnRfaHVnZXRsYl9hY2N0X21lbW9yeV9ub3RfY2FsbGVkKCk7XFxuK1xcbitcXHRodWdlcGFnZV9zdWJwb29sX2dldF9wYWdlcyhzcG9vbCwgNSk7XFxuK1xcdGFzc2VydChzcG9vbC1cXHUwMDNldXNlZF9ocGFnZXMgPT0gNSk7XFxuK1xcbitcXHQvKiBJbnZva2UgR2V0IChTdXJwbHVzIEdsb2JhbCBUZXJyaXRvcnkpICovXFxuK1xcdHJldCA9IGh1Z2VwYWdlX3N1YnBvb2xfZ2V0X3BhZ2VzKHNwb29sLCAyKTtcXG4rXFx0YXNzZXJ0KHJldCA9PSAyKTtcXG4rXFx0YXNzZXJ0KHNwb29sLVxcdTAwM2V1c2VkX2hwYWdlcyA9PSA3KTtcXG4rXFxuK1xcdC8qIEludm9rZSBQdXQgKi9cXG4rXFx0cmV0ID0gaHVnZXBhZ2Vfc3VicG9vbF9wdXRfcGFnZXMoc3Bvb2wsIDIpO1xcbitcXHRhc3NlcnQocmV0ID09IDIpO1xcbitcXHRhc3NlcnQoc3Bvb2wtXFx1MDAzZXVzZWRfaHBhZ2VzID09IDUpO1xcbitcXG4rXFx0LyogQ2xlYW51cCAqL1xcbitcXHRodWdlcGFnZV9zdWJwb29sX3B1dF9wYWdlcyhzcG9vbCwgNSk7XFxuK1xcdGh1Z2VwYWdlX3B1dF9zdWJwb29sKHNwb29sKTtcXG4rXFx0YXNzZXJ0X2h1Z2V0bGJfYWNjdF9tZW1vcnlfbm90X2NhbGxlZCgpO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCB0ZXN0X3N1YnBvb2xfZnJlZV9ocGFnZXModm9pZClcXG4re1xcbitcXHRzdHJ1Y3QgaHN0YXRlIGg7XFxuK1xcdHN0cnVjdCBodWdlcGFnZV9zdWJwb29sICpzcG9vbDtcXG4rXFxuK1xcdC8qIFRlc3QgdGhhdCBmcmVlX2hwYWdlcyB3aXRoIE5PIG1pbl9zaXplIHdvcmtzIHBlcmZlY3RseSAqL1xcbitcXHRzcG9vbCA9IGh1Z2VwYWdlX25ld19zdWJwb29sKFxcdTAwMjZoLCAxNSwgLTEpO1xcbitcXHRodWdlcGFnZV9zdWJwb29sX2dldF9wYWdlcyhzcG9vbCwgMyk7XFxuK1xcdGFzc2VydChodWdlcGFnZV9zdWJwb29sX2ZyZWVfaHBhZ2VzKHNwb29sKSA9PSAxMik7XFxuK1xcdGh1Z2VwYWdlX3N1YnBvb2xfcHV0X3BhZ2VzKHNwb29sLCAzKTtcXG4rXFx0aHVnZXBhZ2VfcHV0X3N1YnBvb2woc3Bvb2wpO1xcbitcXG4rXFx0LyogVGVzdCB0aGF0IGZyZWVfaHBhZ2VzIHdpdGggYSBtaW5fc2l6ZSBjb25maWd1cmVkIGlzIENPTVBMRVRFTFkgVU5BRkZFQ1RFRCBieSBpdCAqL1xcbitcXHRzcG9vbCA9IGh1Z2VwYWdlX25ld19zdWJwb29sKFxcdTAwMjZoLCAxNSwgNSk7XFxuK1xcdGFzc2VydF9odWdldGxiX2FjY3RfbWVtb3J5X2NhbGxlZChcXHUwMDI2aCwgNSk7XFxuK1xcdGh1Z2VwYWdlX3N1YnBvb2xfZ2V0X3BhZ2VzKHNwb29sLCAzKTtcXG4rXFx0YXNzZXJ0KGh1Z2VwYWdlX3N1YnBvb2xfZnJlZV9ocGFnZXMoc3Bvb2wpID09IDEyKTsgLyogU2hvdWxkIHN0aWxsIGJlIDE1IC0gMyA9IDEyISAqL1xcbitcXHRodWdlcGFnZV9zdWJwb29sX3B1dF9wYWdlcyhzcG9vbCwgMyk7XFxuK1xcdGh1Z2VwYWdlX3B1dF9zdWJwb29sKHNwb29sKTtcXG4rXFx0YXNzZXJ0X2h1Z2V0bGJfYWNjdF9tZW1vcnlfY2FsbGVkKFxcdTAwMjZoLCAtNSk7XFxuK1xcbitcXHRzcG9vbCA9IGh1Z2VwYWdlX25ld19zdWJwb29sKFxcdTAwMjZoLCAtMSwgLTEpO1xcbitcXHRodWdlcGFnZV9zdWJwb29sX2dldF9wYWdlcyhzcG9vbCwgMyk7XFxuK1xcdGFzc2VydChodWdlcGFnZV9zdWJwb29sX2ZyZWVfaHBhZ2VzKHNwb29sKSA9PSAtMSk7XFxuK1xcdGh1Z2VwYWdlX3N1YnBvb2xfcHV0X3BhZ2VzKHNwb29sLCAzKTtcXG4rXFx0aHVnZXBhZ2VfcHV0X3N1YnBvb2woc3Bvb2wpO1xcbitcXG4rXFx0LyogVGVzdCB0aGF0IGZyZWVfaHBhZ2VzIHdpdGggYSBtaW5fc2l6ZSBjb25maWd1cmVkIGFuZCBOTyBtYXggc2l6ZSByZXR1cm5zIC0xICovXFxuK1xcdHNwb29sID0gaHVnZXBhZ2VfbmV3X3N1YnBvb2woXFx1MDAyNmgsIC0xLCA1KTtcXG4rXFx0YXNzZXJ0X2h1Z2V0bGJfYWNjdF9tZW1vcnlfY2FsbGVkKFxcdTAwMjZoLCA1KTtcXG4rXFx0aHVnZXBhZ2Vfc3VicG9vbF9nZXRfcGFnZXMoc3Bvb2wsIDMpO1xcbitcXHRhc3NlcnQoaHVnZXBhZ2Vfc3VicG9vbF9mcmVlX2hwYWdlcyhzcG9vbCkgPT0gLTEpO1xcbitcXHRodWdlcGFnZV9zdWJwb29sX3B1dF9wYWdlcyhzcG9vbCwgMyk7XFxuK1xcdGh1Z2VwYWdlX3B1dF9zdWJwb29sKHNwb29sKTtcXG4rXFx0YXNzZXJ0X2h1Z2V0bGJfYWNjdF9tZW1vcnlfY2FsbGVkKFxcdTAwMjZoLCAtNSk7XFxuK1xcbitcXHRzcG9vbCA9IGh1Z2VwYWdlX25ld19zdWJwb29sKFxcdTAwMjZoLCAzLCAtMSk7XFxuK1xcdGh1Z2VwYWdlX3N1YnBvb2xfZ2V0X3BhZ2VzKHNwb29sLCAzKTtcXG4rXFx0YXNzZXJ0KGh1Z2VwYWdlX3N1YnBvb2xfZnJlZV9ocGFnZXMoc3Bvb2wpID09IDApO1xcbitcXHRodWdlcGFnZV9zdWJwb29sX3B1dF9wYWdlcyhzcG9vbCwgMyk7XFxuK1xcdGh1Z2VwYWdlX3B1dF9zdWJwb29sKHNwb29sKTtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgdGVzdF9zdWJwb29sX21heF9ocGFnZXModm9pZClcXG4re1xcbitcXHRzdHJ1Y3QgaHN0YXRlIGg7XFxuK1xcdHN0cnVjdCBodWdlcGFnZV9zdWJwb29sICpzcG9vbDtcXG4rXFxuK1xcdHNwb29sID0gaHVnZXBhZ2VfbmV3X3N1YnBvb2woXFx1MDAyNmgsIDEyMywgLTEpO1xcbitcXHRhc3NlcnQoaHVnZXBhZ2Vfc3VicG9vbF9tYXhfaHBhZ2VzKHNwb29sKSA9PSAxMjMpO1xcbitcXHRodWdlcGFnZV9wdXRfc3VicG9vbChzcG9vbCk7XFxuK1xcbitcXHQvKiBUZXN0IHRoYXQgbWF4X2hwYWdlcyB3aXRoIGEgbWluX3NpemUgY29uZmlndXJlZCBpcyBDT01QTEVURUxZIFVOQUZGRUNURUQgYnkgaXQgKi9cXG4rXFx0c3Bvb2wgPSBodWdlcGFnZV9uZXdfc3VicG9vbChcXHUwMDI2aCwgMTIzLCA1KTtcXG4rXFx0YXNzZXJ0X2h1Z2V0bGJfYWNjdF9tZW1vcnlfY2FsbGVkKFxcdTAwMjZoLCA1KTtcXG4rXFx0YXNzZXJ0KGh1Z2VwYWdlX3N1YnBvb2xfbWF4X2hwYWdlcyhzcG9vbCkgPT0gMTIzKTtcXG4rXFx0aHVnZXBhZ2VfcHV0X3N1YnBvb2woc3Bvb2wpO1xcbitcXHRhc3NlcnRfaHVnZXRsYl9hY2N0X21lbW9yeV9jYWxsZWQoXFx1MDAyNmgsIC01KTtcXG4rXFxuK1xcdHNwb29sID0gaHVnZXBhZ2VfbmV3X3N1YnBvb2woXFx1MDAyNmgsIC0xLCAtMSk7XFxuK1xcdGFzc2VydChodWdlcGFnZV9zdWJwb29sX21heF9ocGFnZXMoc3Bvb2wpID09IC0xKTtcXG4rXFx0aHVnZXBhZ2VfcHV0X3N1YnBvb2woc3Bvb2wpO1xcbitcXG4rXFx0c3Bvb2wgPSBodWdlcGFnZV9uZXdfc3VicG9vbChcXHUwMDI2aCwgLTEsIDUpO1xcbitcXHRhc3NlcnRfaHVnZXRsYl9hY2N0X21lbW9yeV9jYWxsZWQoXFx1MDAyNmgsIDUpO1xcbitcXHRhc3NlcnQoaHVnZXBhZ2Vfc3VicG9vbF9tYXhfaHBhZ2VzKHNwb29sKSA9PSAtMSk7XFxuK1xcdGh1Z2VwYWdlX3B1dF9zdWJwb29sKHNwb29sKTtcXG4rXFx0YXNzZXJ0X2h1Z2V0bGJfYWNjdF9tZW1vcnlfY2FsbGVkKFxcdTAwMjZoLCAtNSk7XFxuK1xcbitcXHRzcG9vbCA9IGh1Z2VwYWdlX25ld19zdWJwb29sKFxcdTAwMjZoLCAwLCAtMSk7XFxuK1xcdGFzc2VydChodWdlcGFnZV9zdWJwb29sX21heF9ocGFnZXMoc3Bvb2wpID09IDApO1xcbitcXHRodWdlcGFnZV9wdXRfc3VicG9vbChzcG9vbCk7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIHRlc3Rfc3VicG9vbF9tYXhfc2l6ZSh2b2lkKVxcbit7XFxuK1xcdHN0cnVjdCBoc3RhdGUgaDtcXG4rXFx0c3RydWN0IGh1Z2VwYWdlX3N1YnBvb2wgKnNwb29sO1xcbitcXG4rXFx0c3Bvb2wgPSBodWdlcGFnZV9uZXdfc3VicG9vbChcXHUwMDI2aCwgMTAsIC0xKTtcXG4rXFx0YXNzZXJ0KGh1Z2VwYWdlX3N1YnBvb2xfbWF4X3NpemUoc3Bvb2wpID09ICgxMFVMTCBcXHUwMDNjXFx1MDAzYyAyMSkpO1xcbitcXHRodWdlcGFnZV9wdXRfc3VicG9vbChzcG9vbCk7XFxuK1xcbitcXHQvKiBUZXN0IHRoYXQgbWF4X3NpemUgd2l0aCBhIG1pbl9zaXplIGNvbmZpZ3VyZWQgaXMgQ09NUExFVEVMWSBVTkFGRkVDVEVEIGJ5IGl0ICovXFxuK1xcdHNwb29sID0gaHVnZXBhZ2VfbmV3X3N1YnBvb2woXFx1MDAyNmgsIDEwLCA1KTtcXG4rXFx0YXNzZXJ0X2h1Z2V0bGJfYWNjdF9tZW1vcnlfY2FsbGVkKFxcdTAwMjZoLCA1KTtcXG4rXFx0YXNzZXJ0KGh1Z2VwYWdlX3N1YnBvb2xfbWF4X3NpemUoc3Bvb2wpID09ICgxMFVMTCBcXHUwMDNjXFx1MDAzYyAyMSkpO1xcbitcXHRodWdlcGFnZV9wdXRfc3VicG9vbChzcG9vbCk7XFxuK1xcdGFzc2VydF9odWdldGxiX2FjY3RfbWVtb3J5X2NhbGxlZChcXHUwMDI2aCwgLTUpO1xcbitcXG4rXFx0c3Bvb2wgPSBodWdlcGFnZV9uZXdfc3VicG9vbChcXHUwMDI2aCwgLTEsIC0xKTtcXG4rXFx0YXNzZXJ0KGh1Z2VwYWdlX3N1YnBvb2xfbWF4X3NpemUoc3Bvb2wpID09IC0xVUxMKTtcXG4rXFx0aHVnZXBhZ2VfcHV0X3N1YnBvb2woc3Bvb2wpO1xcbitcXG4rXFx0c3Bvb2wgPSBodWdlcGFnZV9uZXdfc3VicG9vbChcXHUwMDI2aCwgMCwgLTEpO1xcbitcXHRhc3NlcnQoaHVnZXBhZ2Vfc3VicG9vbF9tYXhfc2l6ZShzcG9vbCkgPT0gMFVMTCk7XFxuK1xcdGh1Z2VwYWdlX3B1dF9zdWJwb29sKHNwb29sKTtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgdGVzdF9zdWJwb29sX21pbl9zaXplKHZvaWQpXFxuK3tcXG4rXFx0c3RydWN0IGhzdGF0ZSBoO1xcbitcXHRzdHJ1Y3QgaHVnZXBhZ2Vfc3VicG9vbCAqc3Bvb2w7XFxuK1xcbitcXHRzcG9vbCA9IGh1Z2VwYWdlX25ld19zdWJwb29sKFxcdTAwMjZoLCAtMSwgNSk7XFxuK1xcdGFzc2VydF9odWdldGxiX2FjY3RfbWVtb3J5X2NhbGxlZChcXHUwMDI2aCwgNSk7XFxuK1xcdGFzc2VydChodWdlcGFnZV9zdWJwb29sX21pbl9zaXplKHNwb29sKSA9PSAoNVVMTCBcXHUwMDNjXFx1MDAzYyAyMSkpO1xcbitcXHRodWdlcGFnZV9wdXRfc3VicG9vbChzcG9vbCk7XFxuK1xcdGFzc2VydF9odWdldGxiX2FjY3RfbWVtb3J5X2NhbGxlZChcXHUwMDI2aCwgLTUpO1xcbitcXG4rXFx0LyogVGVzdCB0aGF0IG1pbl9zaXplIHdpdGggYSBtYXhfc2l6ZSBjb25maWd1cmVkIGlzIENPTVBMRVRFTFkgVU5BRkZFQ1RFRCBieSBpdCAqL1xcbitcXHRzcG9vbCA9IGh1Z2VwYWdlX25ld19zdWJwb29sKFxcdTAwMjZoLCAyMCwgNSk7XFxuK1xcdGFzc2VydF9odWdldGxiX2FjY3RfbWVtb3J5X2NhbGxlZChcXHUwMDI2aCwgNSk7XFxuK1xcdGFzc2VydChodWdlcGFnZV9zdWJwb29sX21pbl9zaXplKHNwb29sKSA9PSAoNVVMTCBcXHUwMDNjXFx1MDAzYyAyMSkpO1xcbitcXHRodWdlcGFnZV9wdXRfc3VicG9vbChzcG9vbCk7XFxuK1xcdGFzc2VydF9odWdldGxiX2FjY3RfbWVtb3J5X2NhbGxlZChcXHUwMDI2aCwgLTUpO1xcbitcXG4rXFx0c3Bvb2wgPSBodWdlcGFnZV9uZXdfc3VicG9vbChcXHUwMDI2aCwgLTEsIC0xKTtcXG4rXFx0YXNzZXJ0KGh1Z2VwYWdlX3N1YnBvb2xfbWluX3NpemUoc3Bvb2wpID09IC0xVUxMKTtcXG4rXFx0aHVnZXBhZ2VfcHV0X3N1YnBvb2woc3Bvb2wpO1xcbitcXG4rXFx0c3Bvb2wgPSBodWdlcGFnZV9uZXdfc3VicG9vbChcXHUwMDI2aCwgLTEsIDApO1xcbitcXHRhc3NlcnRfaHVnZXRsYl9hY2N0X21lbW9yeV9jYWxsZWQoXFx1MDAyNmgsIDApO1xcbitcXHRhc3NlcnQoaHVnZXBhZ2Vfc3VicG9vbF9taW5fc2l6ZShzcG9vbCkgPT0gMFVMTCk7XFxuK1xcdGh1Z2VwYWdlX3B1dF9zdWJwb29sKHNwb29sKTtcXG4rXFx0YXNzZXJ0X2h1Z2V0bGJfYWNjdF9tZW1vcnlfY2FsbGVkKFxcdTAwMjZoLCAwKTtcXG4rfVxcbitcXG4raW50IG1haW4odm9pZClcXG4re1xcbitcXHR0ZXN0X3N1YnBvb2xfbmV3X3B1dF9ub19taW5fbGltaXQoKTtcXG4rXFx0dGVzdF9zdWJwb29sX25ld19wdXRfd2l0aF9taW5fbGltaXQoKTtcXG4rXFx0dGVzdF9zdWJwb29sX2dldF9wYWdlc19iZWxvd19taW4oKTtcXG4rXFx0dGVzdF9zdWJwb29sX2dldF9wYWdlc19jcm9zc2luZ19taW4oKTtcXG4rXFx0dGVzdF9zdWJwb29sX2dldF9wYWdlc19jcm9zc2luZ19taW5fbXVsdGkoKTtcXG4rXFx0dGVzdF9zdWJwb29sX2dldF9wYWdlc19tYXhfbGltaXQoKTtcXG4rXFx0dGVzdF9zdWJwb29sX2dldF9wYWdlc19ub19saW1pdHMoKTtcXG4rXFx0dGVzdF9zdWJwb29sX2ZyZWVfaHBhZ2VzKCk7XFxuK1xcdHRlc3Rfc3VicG9vbF9tYXhfaHBhZ2VzKCk7XFxuK1xcdHRlc3Rfc3VicG9vbF9tYXhfc2l6ZSgpO1xcbitcXHR0ZXN0X3N1YnBvb2xfbWluX3NpemUoKTtcXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIxVDE4OjA4OjE3Ljg1MjUxNzQ3WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MzU3NjQwMzE2MzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSFVHRVRMQkZTXCIsXG4gICAgXCJNRU1DR1wiLFxuICAgIFwiQ0dST1VQX0hVR0VUTEJcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJhbGxvY19odWdldGxiX2ZvbGlvXCIsXG4gICAgXCJodWdldGxiX3Jlc2VydmVfcGFnZXNcIixcbiAgICBcIm1lbV9jZ3JvdXBfaHVnZXRsYl90cnlfY2hhcmdlXCIsXG4gICAgXCJtZW1fY2dyb3VwX2h1Z2V0bGJfY29tbWl0X2NoYXJnZVwiLFxuICAgIFwibWVtX2Nncm91cF9odWdldGxiX2NhbmNlbF9jaGFyZ2VcIixcbiAgICBcImh1Z2VwYWdlX3N1YnBvb2xfZ2V0X3BhZ2VzXCIsXG4gICAgXCJodWdlcGFnZV9zdWJwb29sX3B1dF9wYWdlc1wiLFxuICAgIFwiaHVnZXBhZ2VfbmV3X3N1YnBvb2xcIixcbiAgICBcImh1Z2VwYWdlX3B1dF9zdWJwb29sXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggc2VyaWVzIHJlZmFjdG9ycyB0aGUgaHVnZXRsYiBzdWJwb29sIGxvZ2ljIGludG8gYSBzZXBhcmF0ZSBmaWxlIGFuZCBtb2RpZmllcyB0aGUgaHVnZXRsYiBhbGxvY2F0aW9uIHBhdGggdG8gdXNlIGEgbmV3IHRyeS9jb21taXQvY2FuY2VsIGNoYXJnaW5nIG1vZGVsIGZvciBtZW1vcnkgY2dyb3Vwcy4gSXQgYWxzbyBtb2RpZmllcyB0aGUgaHVnZXRsYl9yZXNlcnZlX3BhZ2VzIGVycm9yIHBhdGguIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gY29yZSBtZW1vcnkgbWFuYWdlbWVudCBhbmQgY2dyb3VwIGxvZ2ljIHRoYXQgYXJlIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgaHVnZXRsYmZzIGFuZCBjZ3JvdXBmcywgbWFraW5nIHRoZW0gaGlnaGx5IHJlbGV2YW50IGZvciBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG5ldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0XG4gICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksXG4gICBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDcwMDg1MmNkOWEwMjNhNTEwNWUyMzQxZDI0N2I4NjQwMDJjY2M2ZmNcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIEp1bCAyMSAxODowODoxNSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2Nncm91cF92Ml9hbGxvY2F0aW9uX2ZhaWx1cmUuYyBiL2Nncm91cF92Ml9hbGxvY2F0aW9uX2ZhaWx1cmUuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi45MzhjYmYwMmFlNmY3YVxuLS0tIC9kZXYvbnVsbFxuKysrIGIvY2dyb3VwX3YyX2FsbG9jYXRpb25fZmFpbHVyZS5jXG5AQCAtMCwwICsxLDE2MCBAQFxuKyNkZWZpbmUgX0dOVV9TT1VSQ0VcbisjaW5jbHVkZSBcdTAwM2NzdGRpby5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjc3RkbGliLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2N1bmlzdGQuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2ZjbnRsLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NzeXMvbW1hbi5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjc3lzL3N0YXQuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY3N5cy90eXBlcy5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjc3lzL3dhaXQuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY3N0cmluZy5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjZXJybm8uaFx1MDAzZVxuK1xuKyNkZWZpbmUgQ0dST1VQX1BBVEggXCIvc3lzL2ZzL2Nncm91cFwiXG4rI2RlZmluZSBURVNUX0NHUk9VUCBcInRlc3RfcmVwcm9kdWNlclwiXG4rI2RlZmluZSBURVNUX0NHUk9VUF9QQVRIIENHUk9VUF9QQVRIIFwiL1wiIFRFU1RfQ0dST1VQXG4rXG4rdm9pZCB3cml0ZV9maWxlKGNvbnN0IGNoYXIgKnBhdGgsIGNvbnN0IGNoYXIgKnZhbCkge1xuKyAgICBpbnQgZmQgPSBvcGVuKHBhdGgsIE9fV1JPTkxZKTtcbisgICAgaWYgKGZkIFx1MDAzYyAwKSB7XG4rICAgICAgICBmcHJpbnRmKHN0ZGVyciwgXCJGYWlsZWQgdG8gb3BlbiAlczogJXNcXG5cIiwgcGF0aCwgc3RyZXJyb3IoZXJybm8pKTtcbisgICAgICAgIGV4aXQoMSk7XG4rICAgIH1cbisgICAgaWYgKHdyaXRlKGZkLCB2YWwsIHN0cmxlbih2YWwpKSBcdTAwM2MgMCkge1xuKyAgICAgICAgZnByaW50ZihzdGRlcnIsIFwiRmFpbGVkIHRvIHdyaXRlICVzIHRvICVzOiAlc1xcblwiLCB2YWwsIHBhdGgsIHN0cmVycm9yKGVycm5vKSk7XG4rICAgICAgICBjbG9zZShmZCk7XG4rICAgICAgICBleGl0KDEpO1xuKyAgICB9XG4rICAgIGNsb3NlKGZkKTtcbit9XG4rXG4raW50IGlzX2h1Z2V0bGJfYWNjb3VudGluZ19lbmFibGVkKCkge1xuKyAgICBGSUxFICpmcCA9IGZvcGVuKFwiL3Byb2MvbW91bnRzXCIsIFwiclwiKTtcbisgICAgaWYgKCFmcCkge1xuKyAgICAgICAgcGVycm9yKFwiZm9wZW4gL3Byb2MvbW91bnRzXCIpO1xuKyAgICAgICAgcmV0dXJuIC0xO1xuKyAgICB9XG4rXG4rICAgIGNoYXIgbGluZVsxMDI0XTtcbisgICAgaW50IGVuYWJsZWQgPSAwO1xuKyAgICB3aGlsZSAoZmdldHMobGluZSwgc2l6ZW9mKGxpbmUpLCBmcCkpIHtcbisgICAgICAgIGNoYXIgc3BlY1syNTZdLCBmaWxlWzI1Nl0sIHR5cGVbMjU2XSwgb3B0c1s1MTJdO1xuKyAgICAgICAgaWYgKHNzY2FuZihsaW5lLCBcIiUyNTVzICUyNTVzICUyNTVzICU1MTFzXCIsIHNwZWMsIGZpbGUsIHR5cGUsIG9wdHMpID09IDQpIHtcbisgICAgICAgICAgICBpZiAoc3RyY21wKGZpbGUsIENHUk9VUF9QQVRIKSA9PSAwIFx1MDAyNlx1MDAyNiBzdHJjbXAodHlwZSwgXCJjZ3JvdXAyXCIpID09IDApIHtcbisgICAgICAgICAgICAgICAgaWYgKHN0cnN0cihvcHRzLCBcIm1lbW9yeV9odWdldGxiX2FjY291bnRpbmdcIikgIT0gTlVMTCkge1xuKyAgICAgICAgICAgICAgICAgICAgZW5hYmxlZCA9IDE7XG4rICAgICAgICAgICAgICAgIH1cbisgICAgICAgICAgICAgICAgYnJlYWs7XG4rICAgICAgICAgICAgfVxuKyAgICAgICAgfVxuKyAgICB9XG4rICAgIGZjbG9zZShmcCk7XG4rICAgIHJldHVybiBlbmFibGVkO1xuK31cbitcbitpbnQgZW5hYmxlX2h1Z2V0bGJfYWNjb3VudGluZygpIHtcbisgICAgcHJpbnRmKFwiQXR0ZW1wdGluZyB0byByZW1vdW50IGNncm91cDIgd2l0aCBtZW1vcnlfaHVnZXRsYl9hY2NvdW50aW5nLi4uXFxuXCIpO1xuKyAgICBpbnQgcmV0ID0gc3lzdGVtKFwibW91bnQgLW8gcmVtb3VudCxtZW1vcnlfaHVnZXRsYl9hY2NvdW50aW5nIFwiIENHUk9VUF9QQVRIKTtcbisgICAgaWYgKHJldCAhPSAwKSB7XG4rICAgICAgICBmcHJpbnRmKHN0ZGVyciwgXCJGYWlsZWQgdG8gcmVtb3VudDogc3lzdGVtKCkgcmV0dXJuZWQgJWRcXG5cIiwgcmV0KTtcbisgICAgICAgIHJldHVybiAtMTtcbisgICAgfVxuKyAgICByZXR1cm4gMDtcbit9XG4rXG4raW50IG1haW4oKSB7XG4rICAgIHN0cnVjdCBzdGF0IHN0O1xuKyAgICBpZiAoc3RhdChDR1JPVVBfUEFUSCwgXHUwMDI2c3QpICE9IDAgfHwgIVNfSVNESVIoc3Quc3RfbW9kZSkpIHtcbisgICAgICAgIGZwcmludGYoc3RkZXJyLCBcImNncm91cCB2MiBub3QgbW91bnRlZCBhdCAlc1xcblwiLCBDR1JPVVBfUEFUSCk7XG4rICAgICAgICByZXR1cm4gMTtcbisgICAgfVxuK1xuKyAgICBpbnQgZW5hYmxlZCA9IGlzX2h1Z2V0bGJfYWNjb3VudGluZ19lbmFibGVkKCk7XG4rICAgIGlmIChlbmFibGVkIFx1MDAzYyAwKSB7XG4rICAgICAgICByZXR1cm4gMTtcbisgICAgfVxuKyAgICBpZiAoIWVuYWJsZWQpIHtcbisgICAgICAgIGlmIChlbmFibGVfaHVnZXRsYl9hY2NvdW50aW5nKCkgIT0gMCkge1xuKyAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCBcIkNvdWxkIG5vdCBlbmFibGUgbWVtb3J5X2h1Z2V0bGJfYWNjb3VudGluZ1xcblwiKTtcbisgICAgICAgICAgICByZXR1cm4gMTtcbisgICAgICAgIH1cbisgICAgICAgIC8vIFJlLWNoZWNrXG4rICAgICAgICBlbmFibGVkID0gaXNfaHVnZXRsYl9hY2NvdW50aW5nX2VuYWJsZWQoKTtcbisgICAgICAgIGlmIChlbmFibGVkIFx1MDAzYz0gMCkge1xuKyAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCBcIkZhaWxlZCB0byBlbmFibGUgbWVtb3J5X2h1Z2V0bGJfYWNjb3VudGluZyAocmUtY2hlY2sgZmFpbGVkKVxcblwiKTtcbisgICAgICAgICAgICByZXR1cm4gMTtcbisgICAgICAgIH1cbisgICAgICAgIHByaW50ZihcIlN1Y2Nlc3NmdWxseSBlbmFibGVkIG1lbW9yeV9odWdldGxiX2FjY291bnRpbmdcXG5cIik7XG4rICAgIH0gZWxzZSB7XG4rICAgICAgICBwcmludGYoXCJtZW1vcnlfaHVnZXRsYl9hY2NvdW50aW5nIGlzIGFscmVhZHkgZW5hYmxlZFxcblwiKTtcbisgICAgfVxuK1xuKyAgICAvLyBFbmFibGUgbWVtb3J5IGNvbnRyb2xsZXIgaW4gc3VidHJlZVxuKyAgICBpbnQgZmQgPSBvcGVuKENHUk9VUF9QQVRIIFwiL2Nncm91cC5zdWJ0cmVlX2NvbnRyb2xcIiwgT19XUk9OTFkpO1xuKyAgICBpZiAoZmQgXHUwMDNlPSAwKSB7XG4rICAgICAgICBpZiAod3JpdGUoZmQsIFwiK21lbW9yeVwiLCA3KSBcdTAwM2MgMCkge1xuKyAgICAgICAgICAgIC8vIE1pZ2h0IGZhaWwgaWYgYWxyZWFkeSBlbmFibGVkIG9yIG5vdCBzdXBwb3J0ZWQsIGlnbm9yZSBmb3Igbm93XG4rICAgICAgICB9XG4rICAgICAgICBjbG9zZShmZCk7XG4rICAgIH1cbitcbisgICAgaWYgKG1rZGlyKFRFU1RfQ0dST1VQX1BBVEgsIDA3NTUpICE9IDApIHtcbisgICAgICAgIGlmIChlcnJubyAhPSBFRVhJU1QpIHtcbisgICAgICAgICAgICBwZXJyb3IoXCJta2RpciB0ZXN0X3JlcHJvZHVjZXJcIik7XG4rICAgICAgICAgICAgcmV0dXJuIDE7XG4rICAgICAgICB9XG4rICAgIH1cbitcbisgICAgLy8gU2V0IG1lbW9yeSBsaW1pdCB0byAxTUIgKGxlc3MgdGhhbiAyTUIgaHVnZXBhZ2UpXG4rICAgIHdyaXRlX2ZpbGUoVEVTVF9DR1JPVVBfUEFUSCBcIi9tZW1vcnkubWF4XCIsIFwiMU1cIik7XG4rXG4rICAgIHBpZF90IHBpZCA9IGZvcmsoKTtcbisgICAgaWYgKHBpZCBcdTAwM2MgMCkge1xuKyAgICAgICAgcGVycm9yKFwiZm9ya1wiKTtcbisgICAgICAgIHJldHVybiAxO1xuKyAgICB9XG4rXG4rICAgIGlmIChwaWQgPT0gMCkge1xuKyAgICAgICAgLy8gQ2hpbGRcbisgICAgICAgIC8vIE1vdmUgdG8gY2dyb3VwXG4rICAgICAgICB3cml0ZV9maWxlKFRFU1RfQ0dST1VQX1BBVEggXCIvY2dyb3VwLnByb2NzXCIsIFwiMFwiKTtcbitcbisgICAgICAgIHByaW50ZihcIkNoaWxkOiBBdHRlbXB0aW5nIHRvIGFsbG9jYXRlIGFuZCB0b3VjaCAyTUIgaHVnZXBhZ2UuLi5cXG5cIik7XG4rICAgICAgICAvLyBBbGxvY2F0ZSAyTUIgaHVnZXBhZ2VcbisgICAgICAgIHNpemVfdCBzaXplID0gMiAqIDEwMjQgKiAxMDI0O1xuKyAgICAgICAgdm9pZCAqYWRkciA9IG1tYXAoTlVMTCwgc2l6ZSwgUFJPVF9SRUFEIHwgUFJPVF9XUklURSxcbisgICAgICAgICAgICAgICAgICAgICAgICAgIE1BUF9QUklWQVRFIHwgTUFQX0FOT05ZTU9VUyB8IE1BUF9IVUdFVExCLCAtMSwgMCk7XG4rICAgICAgICBpZiAoYWRkciA9PSBNQVBfRkFJTEVEKSB7XG4rICAgICAgICAgICAgcGVycm9yKFwiQ2hpbGQ6IG1tYXAgTUFQX0hVR0VUTEJcIik7XG4rICAgICAgICAgICAgZXhpdCgxKTtcbisgICAgICAgIH1cbitcbisgICAgICAgIHByaW50ZihcIkNoaWxkOiBtbWFwIHN1Y2NlZWRlZCBhdCAlcCwgdG91Y2hpbmcgaXQgbm93IChzaG91bGQgdHJpZ2dlciBmYXVsdCkuLi5cXG5cIiwgYWRkcik7XG4rICAgICAgICAvLyBUaGlzIHNob3VsZCB0cmlnZ2VyIHRoZSBmYXVsdCBhbmQgY2FsbCBhbGxvY19odWdldGxiX2ZvbGlvIC1cdTAwM2UgbWVtX2Nncm91cF9jaGFyZ2VfaHVnZXRsYlxuKyAgICAgICAgLy8gd2hpY2ggc2hvdWxkIGZhaWwgYW5kIHRyaWdnZXIgdGhlIGJ1Zy5cbisgICAgICAgICoodm9sYXRpbGUgY2hhciAqKWFkZHIgPSAxO1xuK1xuKyAgICAgICAgcHJpbnRmKFwiQ2hpbGQ6IFN1Y2Nlc3NmdWxseSB0b3VjaGVkIHBhZ2UgKGJ1ZyBub3QgdHJpZ2dlcmVkPykuXFxuXCIpO1xuKyAgICAgICAgbXVubWFwKGFkZHIsIHNpemUpO1xuKyAgICAgICAgZXhpdCgwKTtcbisgICAgfVxuK1xuKyAgICAvLyBQYXJlbnRcbisgICAgaW50IHN0YXR1cztcbisgICAgd2FpdHBpZChwaWQsIFx1MDAyNnN0YXR1cywgMCk7XG4rXG4rICAgIHByaW50ZihcIlBhcmVudDogQ2hpbGQgZXhpdGVkLiBDbGVhbmluZyB1cC5cXG5cIik7XG4rICAgIHJtZGlyKFRFU1RfQ0dST1VQX1BBVEgpO1xuK1xuKyAgICBpZiAoV0lGU0lHTkFMRUQoc3RhdHVzKSkge1xuKyAgICAgICAgcHJpbnRmKFwiUGFyZW50OiBDaGlsZCBraWxsZWQgYnkgc2lnbmFsICVkICglcylcXG5cIixcbisgICAgICAgICAgICAgICBXVEVSTVNJRyhzdGF0dXMpLCBzdHJzaWduYWwoV1RFUk1TSUcoc3RhdHVzKSkpO1xuKyAgICAgICAgaWYgKFdURVJNU0lHKHN0YXR1cykgPT0gU0lHQlVTKSB7XG4rICAgICAgICAgICAgcHJpbnRmKFwiUGFyZW50OiBDaGlsZCBnb3QgU0lHQlVTIGFzIGV4cGVjdGVkIChpZiBrZXJuZWwgZGlkbid0IGNyYXNoKS5cXG5cIik7XG4rICAgICAgICB9XG4rICAgIH0gZWxzZSBpZiAoV0lGRVhJVEVEKHN0YXR1cykpIHtcbisgICAgICAgIHByaW50ZihcIlBhcmVudDogQ2hpbGQgZXhpdGVkIHdpdGggc3RhdHVzICVkXFxuXCIsIFdFWElUU1RBVFVTKHN0YXR1cykpO1xuKyAgICB9XG4rXG4rICAgIHJldHVybiAwO1xuK31cbmRpZmYgLS1naXQgYS9mcy9odWdldGxiZnMvaW5vZGUuYyBiL2ZzL2h1Z2V0bGJmcy9pbm9kZS5jXG5pbmRleCAyMTZlMWEwZGQwYjIzNy4uOGFiZTA1NzRiMWM3ZWEgMTAwNjQ0XG4tLS0gYS9mcy9odWdldGxiZnMvaW5vZGUuY1xuKysrIGIvZnMvaHVnZXRsYmZzL2lub2RlLmNcbkBAIC0yNSw2ICsyNSw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvY3R5cGUuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2JhY2tpbmctZGV2LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9odWdldGxiLmhcdTAwM2VcbisjaW5jbHVkZSBcIi4uLy4uL21tL2h1Z2V0bGJfc3VicG9vbC5oXCJcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9mb2xpb19iYXRjaC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvZnNfcGFyc2VyLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9tbWFuLmhcdTAwM2VcbkBAIC0xMDU5LDcgKzEwNjAsNiBAQCBzdGF0aWMgaW50IGh1Z2V0bGJmc19zaG93X29wdGlvbnMoc3RydWN0IHNlcV9maWxlICptLCBzdHJ1Y3QgZGVudHJ5ICpyb290KVxuIFx0c3RydWN0IGh1Z2V0bGJmc19zYl9pbmZvICpzYmluZm8gPSBIVUdFVExCRlNfU0Iocm9vdC1cdTAwM2VkX3NiKTtcbiBcdHN0cnVjdCBodWdlcGFnZV9zdWJwb29sICpzcG9vbCA9IHNiaW5mby1cdTAwM2VzcG9vbDtcbiBcdHVuc2lnbmVkIGxvbmcgaHBhZ2Vfc2l6ZSA9IGh1Z2VfcGFnZV9zaXplKHNiaW5mby1cdTAwM2Voc3RhdGUpO1xuLVx0dW5zaWduZWQgaHBhZ2Vfc2hpZnQgPSBodWdlX3BhZ2Vfc2hpZnQoc2JpbmZvLVx1MDAzZWhzdGF0ZSk7XG4gXHRjaGFyIG1vZDtcbiBcbiBcdGlmICghdWlkX2VxKHNiaW5mby1cdTAwM2V1aWQsIEdMT0JBTF9ST09UX1VJRCkpXG5AQCAtMTA4MSwxMiArMTA4MSwxMyBAQCBzdGF0aWMgaW50IGh1Z2V0bGJmc19zaG93X29wdGlvbnMoc3RydWN0IHNlcV9maWxlICptLCBzdHJ1Y3QgZGVudHJ5ICpyb290KVxuIFx0fVxuIFx0c2VxX3ByaW50ZihtLCBcIixwYWdlc2l6ZT0lbHUlY1wiLCBocGFnZV9zaXplLCBtb2QpO1xuIFx0aWYgKHNwb29sKSB7XG4tXHRcdGlmIChzcG9vbC1cdTAwM2VtYXhfaHBhZ2VzICE9IC0xKVxuLVx0XHRcdHNlcV9wcmludGYobSwgXCIsc2l6ZT0lbGx1XCIsXG4tXHRcdFx0XHQgICAodW5zaWduZWQgbG9uZyBsb25nKXNwb29sLVx1MDAzZW1heF9ocGFnZXMgXHUwMDNjXHUwMDNjIGhwYWdlX3NoaWZ0KTtcbi1cdFx0aWYgKHNwb29sLVx1MDAzZW1pbl9ocGFnZXMgIT0gLTEpXG4tXHRcdFx0c2VxX3ByaW50ZihtLCBcIixtaW5fc2l6ZT0lbGx1XCIsXG4tXHRcdFx0XHQgICAodW5zaWduZWQgbG9uZyBsb25nKXNwb29sLVx1MDAzZW1pbl9ocGFnZXMgXHUwMDNjXHUwMDNjIGhwYWdlX3NoaWZ0KTtcbitcdFx0dW5zaWduZWQgbG9uZyBsb25nIG1heF9zaXplID0gaHVnZXBhZ2Vfc3VicG9vbF9tYXhfc2l6ZShzcG9vbCk7XG4rXHRcdHVuc2lnbmVkIGxvbmcgbG9uZyBtaW5fc2l6ZSA9IGh1Z2VwYWdlX3N1YnBvb2xfbWluX3NpemUoc3Bvb2wpO1xuK1xuK1x0XHRpZiAobWF4X3NpemUgIT0gLTFVTEwpXG4rXHRcdFx0c2VxX3ByaW50ZihtLCBcIixzaXplPSVsbHVcIiwgbWF4X3NpemUpO1xuK1x0XHRpZiAobWluX3NpemUgIT0gLTFVTEwpXG4rXHRcdFx0c2VxX3ByaW50ZihtLCBcIixtaW5fc2l6ZT0lbGx1XCIsIG1pbl9zaXplKTtcbiBcdH1cbiBcdHJldHVybiAwO1xuIH1cbkBAIC0xMTA1LDE0ICsxMTA2LDggQEAgc3RhdGljIGludCBodWdldGxiZnNfc3RhdGZzKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGtzdGF0ZnMgKmJ1ZilcbiBcdFx0LyogSWYgbm8gbGltaXRzIHNldCwganVzdCByZXBvcnQgMCBvciAtMSBmb3IgbWF4L2ZyZWUvdXNlZFxuIFx0XHQgKiBibG9ja3MsIGxpa2Ugc2ltcGxlX3N0YXRmcygpICovXG4gXHRcdGlmIChzYmluZm8tXHUwMDNlc3Bvb2wpIHtcbi1cdFx0XHRsb25nIGZyZWVfcGFnZXM7XG4tXG4tXHRcdFx0c3Bpbl9sb2NrX2lycShcdTAwMjZzYmluZm8tXHUwMDNlc3Bvb2wtXHUwMDNlbG9jayk7XG4tXHRcdFx0YnVmLVx1MDAzZWZfYmxvY2tzID0gc2JpbmZvLVx1MDAzZXNwb29sLVx1MDAzZW1heF9ocGFnZXM7XG4tXHRcdFx0ZnJlZV9wYWdlcyA9IHNiaW5mby1cdTAwM2VzcG9vbC1cdTAwM2VtYXhfaHBhZ2VzXG4tXHRcdFx0XHQtIHNiaW5mby1cdTAwM2VzcG9vbC1cdTAwM2V1c2VkX2hwYWdlcztcbi1cdFx0XHRidWYtXHUwMDNlZl9iYXZhaWwgPSBidWYtXHUwMDNlZl9iZnJlZSA9IGZyZWVfcGFnZXM7XG4tXHRcdFx0c3Bpbl91bmxvY2tfaXJxKFx1MDAyNnNiaW5mby1cdTAwM2VzcG9vbC1cdTAwM2Vsb2NrKTtcbitcdFx0XHRidWYtXHUwMDNlZl9ibG9ja3MgPSBodWdlcGFnZV9zdWJwb29sX21heF9ocGFnZXMoc2JpbmZvLVx1MDAzZXNwb29sKTtcbitcdFx0XHRidWYtXHUwMDNlZl9iYXZhaWwgPSBidWYtXHUwMDNlZl9iZnJlZSA9IGh1Z2VwYWdlX3N1YnBvb2xfZnJlZV9ocGFnZXMoc2JpbmZvLVx1MDAzZXNwb29sKTtcbiBcdFx0XHRidWYtXHUwMDNlZl9maWxlcyA9IHNiaW5mby1cdTAwM2VtYXhfaW5vZGVzO1xuIFx0XHRcdGJ1Zi1cdTAwM2VmX2ZmcmVlID0gc2JpbmZvLVx1MDAzZWZyZWVfaW5vZGVzO1xuIFx0XHR9XG5kaWZmIC0tZ2l0IGEvaHVnZXRsYl9yZXNlcnZlX3BhZ2VzX291dF9wdXRfcGFnZXMuYyBiL2h1Z2V0bGJfcmVzZXJ2ZV9wYWdlc19vdXRfcHV0X3BhZ2VzLmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uOWU2M2ZjODk5N2Q1N2Rcbi0tLSAvZGV2L251bGxcbisrKyBiL2h1Z2V0bGJfcmVzZXJ2ZV9wYWdlc19vdXRfcHV0X3BhZ2VzLmNcbkBAIC0wLDAgKzEsNDkgQEBcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuKyNkZWZpbmUgX0dOVV9TT1VSQ0VcbisjaW5jbHVkZSBcdTAwM2NzdGRpby5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjc3RkbGliLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2N1bmlzdGQuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY3N5cy9tbWFuLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NmY250bC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjZXJyLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NlcnJuby5oXHUwMDNlXG4rXG4raW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KVxuK3tcbitcdGNvbnN0IGNoYXIgKmZpbGVfcGF0aDtcbitcdHNpemVfdCBzaXplO1xuK1x0aW50IGZkO1xuK1x0dm9pZCAqYWRkcjtcbitcbitcdGlmIChhcmdjIFx1MDAzYyAzKSB7XG4rXHRcdGZwcmludGYoc3RkZXJyLCBcIlVzYWdlOiAlcyBcdTAwM2NodWdldGxiZnNfZmlsZVx1MDAzZSBcdTAwM2NzaXplX2luX2J5dGVzXHUwMDNlXFxuXCIsXG4rXHRcdFx0YXJndlswXSk7XG4rXHRcdHJldHVybiAxO1xuK1x0fVxuK1xuK1x0ZmlsZV9wYXRoID0gYXJndlsxXTtcbitcdHNpemUgPSBzdHJ0b3VsbChhcmd2WzJdLCBOVUxMLCAwKTtcbitcbitcdGZkID0gb3BlbihmaWxlX3BhdGgsIE9fQ1JFQVQgfCBPX1JEV1IsIDA2NjYpO1xuK1x0aWYgKGZkIFx1MDAzYyAwKVxuK1x0XHRlcnIoMSwgXCJvcGVuXCIpO1xuK1xuK1x0cHJpbnRmKFwiQXR0ZW1wdGluZyB0byBtbWFwICV6dSBieXRlcyBzaGFyZWQgb24gJXMuLi5cXG5cIiwgc2l6ZSxcbitcdCAgICAgICBmaWxlX3BhdGgpO1xuK1x0YWRkciA9IG1tYXAoTlVMTCwgc2l6ZSwgUFJPVF9SRUFEIHwgUFJPVF9XUklURSwgTUFQX1NIQVJFRCwgZmQsIDApO1xuK1x0aWYgKGFkZHIgPT0gTUFQX0ZBSUxFRCkge1xuK1x0XHRpZiAoZXJybm8gPT0gRU5PTUVNKSB7XG4rXHRcdFx0cHJpbnRmKFwibW1hcCBmYWlsZWQgd2l0aCBFTk9NRU0gYXMgZXhwZWN0ZWQuXFxuXCIpO1xuK1x0XHRcdGNsb3NlKGZkKTtcbitcdFx0XHRyZXR1cm4gMDtcbitcdFx0fVxuK1x0XHRwZXJyb3IoXCJtbWFwIGZhaWxlZCB3aXRoIHVuZXhwZWN0ZWQgZXJyb3JcIik7XG4rXHRcdGNsb3NlKGZkKTtcbitcdFx0cmV0dXJuIDE7XG4rXHR9XG4rXG4rXHRwcmludGYoXCJFUlJPUjogbW1hcCBTVUNDRUVERUQgdW5leHBlY3RlZGx5IGF0ICVwXFxuXCIsIGFkZHIpO1xuK1x0bXVubWFwKGFkZHIsIHNpemUpO1xuK1x0Y2xvc2UoZmQpO1xuK1x0cmV0dXJuIDE7XG4rfVxuZGlmZiAtLWdpdCBhL2h1Z2V0bGJfcmVzZXJ2ZV9wYWdlc19vdXRfcHV0X3BhZ2VzLnNoIGIvaHVnZXRsYl9yZXNlcnZlX3BhZ2VzX291dF9wdXRfcGFnZXMuc2hcbm5ldyBmaWxlIG1vZGUgMTAwNzU1XG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uMDMwZTE5MTU1MzliNGVcbi0tLSAvZGV2L251bGxcbisrKyBiL2h1Z2V0bGJfcmVzZXJ2ZV9wYWdlc19vdXRfcHV0X3BhZ2VzLnNoXG5AQCAtMCwwICsxLDE1MyBAQFxuKyMhL2Jpbi9iYXNoXG4rIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuK3NldCAtZVxuK1xuK2lmIFsgXCIkRVVJRFwiIC1uZSAwIF07IHRoZW5cbisgICAgZWNobyBcIlBsZWFzZSBydW4gYXMgcm9vdFwiXG4rICAgIGV4aXQgMVxuK2ZpXG4rXG4rU0NSSVBUX0RJUj1cIiQoY2QgXCIkKGRpcm5hbWUgXCIke0JBU0hfU09VUkNFWzBdfVwiKVwiIFx1MDAyNlx1MDAyNiBwd2QpXCJcbitjZCBcIiRTQ1JJUFRfRElSXCJcbitcbisjIERldGVjdCBkZWZhdWx0IGh1Z2VwYWdlIHNpemUgdG8gc3VwcG9ydCBib3RoIDJNQiBhbmQgMUdCIHBhZ2VzIHJvYnVzdGx5XG4raHB6PSQoZ3JlcCAtaSBodWdlcGFnZXNpemUgL3Byb2MvbWVtaW5mbyB8IGF3ayAne3ByaW50ICQyfScpXG4ra2I9JGhwelxuK21iPSQoKGtiIC8gMTAyNCkpXG4raHBhZ2Vfc2l6ZV9ieXRlcz0kKChrYiAqIDEwMjQpKVxuK1xuK2hwYWdlX2Rpcj1cImh1Z2VwYWdlcy0ke2tifWtCXCJcbitTWVNGU19QQVRIPVwiL3N5cy9rZXJuZWwvbW0vaHVnZXBhZ2VzLyRocGFnZV9kaXJcIlxuK1xuK01OVF9QQVRIPVwiL3RtcC9tbnRfaHVnZXRsYl9yZXByb1wiXG4rRklMRV9QQVRIPVwiJE1OVF9QQVRIL3Rlc3RfZmlsZVwiXG4rXG4rIyBTYXZlIG9yaWdpbmFsIHZhbHVlcyBmb3Igc2FmZSByZXN0b3JhdGlvblxuK29yaWdfbnI9JChjYXQgXCIkU1lTRlNfUEFUSC9ucl9odWdlcGFnZXNcIilcbitvcmlnX292ZXJjb21taXQ9JChjYXQgXCIkU1lTRlNfUEFUSC9ucl9vdmVyY29tbWl0X2h1Z2VwYWdlc1wiKVxuK1xuK2NsZWFudXAoKSB7XG4rICAgIGVjaG8gXCJDbGVhbmluZyB1cC4uLlwiXG4rICAgIHJtIC1mIFwiJEZJTEVfUEFUSFwiXG4rICAgIHVtb3VudCBcIiRNTlRfUEFUSFwiIDJcdTAwM2UvZGV2L251bGxcbisgICAgcm1kaXIgXCIkTU5UX1BBVEhcIiAyXHUwMDNlL2Rldi9udWxsXG4rICAgIGVjaG8gXCIkb3JpZ19uclwiIFx1MDAzZSBcIiRTWVNGU19QQVRIL25yX2h1Z2VwYWdlc1wiXG4rICAgIGVjaG8gXCIkb3JpZ19vdmVyY29tbWl0XCIgXHUwMDNlIFwiJFNZU0ZTX1BBVEgvbnJfb3ZlcmNvbW1pdF9odWdlcGFnZXNcIlxuKyAgICBlY2hvIFwiQ2xlYW51cCBkb25lLlwiXG4rfVxuK3RyYXAgY2xlYW51cCBFWElUXG4rXG4rIyBWZXJpZnkgcmVwcm9kdWNlciBiaW5hcnkgZXhpc3RzXG4raWYgWyAhIC14IC4vaHVnZXRsYl9yZXNlcnZlX3BhZ2VzX291dF9wdXRfcGFnZXMgXTsgdGhlblxuKyAgICBlY2hvIFwicmVwcm9kdWNlciBiaW5hcnkgJy4vaHVnZXRsYl9yZXNlcnZlX3BhZ2VzX291dF9wdXRfcGFnZXMnIG5vdCBmb3VuZCBvciBub3QgZXhlY3V0YWJsZS5cIlxuKyAgICBlY2hvIFwiUGxlYXNlIGNvbXBpbGUgaXQgZmlyc3Q6IGdjYyAtc3RhdGljIC1vIGh1Z2V0bGJfcmVzZXJ2ZV9wYWdlc19vdXRfcHV0X3BhZ2VzIGh1Z2V0bGJfcmVzZXJ2ZV9wYWdlc19vdXRfcHV0X3BhZ2VzLmNcIlxuKyAgICBleGl0IDFcbitmaVxuK1xuKyMgMS4gU2V0IGdsb2JhbCBwb29sIHN1Y2ggdGhhdCBvbmx5IHRoZSBtb3VudC10aW1lIHJlc2VydmF0aW9uIGNhbiBzdWNjZWVkXG4rZWNobyAxIFx1MDAzZSBcIiRTWVNGU19QQVRIL25yX2h1Z2VwYWdlc1wiXG4rZWNobyAwIFx1MDAzZSBcIiRTWVNGU19QQVRIL25yX292ZXJjb21taXRfaHVnZXBhZ2VzXCJcbitcbitpbml0aWFsX3Jlc3Y9JChjYXQgXCIkU1lTRlNfUEFUSC9yZXN2X2h1Z2VwYWdlc1wiKVxuK2VjaG8gXCJJbml0aWFsIHJlc3ZfaHVnZXBhZ2VzIChiZWZvcmUgbW91bnQpOiAkaW5pdGlhbF9yZXN2XCJcbitcbisjIDIuIE1vdW50IHdpdGggbWluX3NpemUgPSAxIHBhZ2UsIG1heCBzaXplID0gMiBwYWdlc1xuK21pbl9zaXplX3N0cj1cIiR7bWJ9TVwiXG4rbWF4X3NpemVfc3RyPVwiJCgobWIgKiAyKSlNXCJcbittbWFwX3NpemVfYnl0ZXM9JCgoaHBhZ2Vfc2l6ZV9ieXRlcyAqIDIpKVxuK1xuK21rZGlyIC1wIFwiJE1OVF9QQVRIXCJcbitlY2hvIFwiTW91bnRpbmcgaHVnZXRsYmZzIHdpdGggcGFnZXNpemU9JHttYn1NLCBtaW5fc2l6ZT0kbWluX3NpemVfc3RyLCBzaXplPSRtYXhfc2l6ZV9zdHIuLi5cIlxuK2lmICEgbW91bnQgLXQgaHVnZXRsYmZzIC1vIFwicGFnZXNpemU9JHttYn1NLG1pbl9zaXplPSRtaW5fc2l6ZV9zdHIsc2l6ZT0kbWF4X3NpemVfc3RyXCIgbm9uZSBcIiRNTlRfUEFUSFwiOyB0aGVuXG4rICAgIGVjaG8gXCJGYWlsZWQgdG8gbW91bnQgaHVnZXRsYmZzXCJcbisgICAgZXhpdCAxXG4rZmlcbitcbityZXN2X2FmdGVyX21vdW50PSQoY2F0IFwiJFNZU0ZTX1BBVEgvcmVzdl9odWdlcGFnZXNcIilcbitlY2hvIFwicmVzdl9odWdlcGFnZXMgYWZ0ZXIgbW91bnQ6ICRyZXN2X2FmdGVyX21vdW50XCJcbitleHBlY3RlZF9hZnRlcl9tb3VudD0kKChpbml0aWFsX3Jlc3YgKyAxKSlcbitpZiBbIFwiJHJlc3ZfYWZ0ZXJfbW91bnRcIiAhPSBcIiRleHBlY3RlZF9hZnRlcl9tb3VudFwiIF07IHRoZW5cbisgICAgZWNobyBcIkVSUk9SOiByZXN2X2h1Z2VwYWdlcyBpcyBub3QgJGV4cGVjdGVkX2FmdGVyX21vdW50IGFmdGVyIG1vdW50IChhY3R1YWw6ICRyZXN2X2FmdGVyX21vdW50KSFcIlxuKyAgICBleGl0IDFcbitmaVxuK1xuKyMgQ2hlY2sgbW91bnQgc3RhdHMgYWZ0ZXIgbW91bnRcbitleHBlY3RlZF9ic2l6ZT0kaHBhZ2Vfc2l6ZV9ieXRlc1xuK2JzaXplX1M9JChzdGF0IC1mIC1jIFwiJVNcIiBcIiRNTlRfUEFUSFwiKVxuK2JzaXplX3M9JChzdGF0IC1mIC1jIFwiJXNcIiBcIiRNTlRfUEFUSFwiKVxuK2VjaG8gXCJNb3VudCBibG9jayBzaXplIGFmdGVyIG1vdW50OiAkYnNpemVfUyAvICRic2l6ZV9zIChleHBlY3RlZDogJGV4cGVjdGVkX2JzaXplKVwiXG4raWYgWyBcIiRic2l6ZV9TXCIgIT0gXCIkZXhwZWN0ZWRfYnNpemVcIiBdIFx1MDAyNlx1MDAyNiBbIFwiJGJzaXplX3NcIiAhPSBcIiRleHBlY3RlZF9ic2l6ZVwiIF07IHRoZW5cbisgICAgZWNobyBcIkVSUk9SOiBVbmV4cGVjdGVkIG1vdW50IGJsb2NrIHNpemUgYWZ0ZXIgbW91bnQgKGFjdHVhbCBTOiRic2l6ZV9TIHM6JGJzaXplX3MsIGV4cGVjdGVkOiAkZXhwZWN0ZWRfYnNpemUpXCJcbisgICAgZXhpdCAxXG4rZmlcbitcbithY3R1YWxfc3RhdHNfbW91bnQ9JChzdGF0IC1mIC1jIFwiJWIgJWYgJWFcIiBcIiRNTlRfUEFUSFwiKVxuK2V4cGVjdGVkX3N0YXRzX21vdW50PVwiMiAyIDJcIlxuK2VjaG8gXCJNb3VudCBzdGF0cyBhZnRlciBtb3VudCAodG90YWwgZnJlZSBhdmFpbCk6ICRhY3R1YWxfc3RhdHNfbW91bnQgKGV4cGVjdGVkOiAkZXhwZWN0ZWRfc3RhdHNfbW91bnQpXCJcbitpZiBbIFwiJGFjdHVhbF9zdGF0c19tb3VudFwiICE9IFwiJGV4cGVjdGVkX3N0YXRzX21vdW50XCIgXTsgdGhlblxuKyAgICBlY2hvIFwiRVJST1I6IFVuZXhwZWN0ZWQgbW91bnQgc3RhdHMgYWZ0ZXIgbW91bnQ6ICRhY3R1YWxfc3RhdHNfbW91bnQgKGV4cGVjdGVkOiAkZXhwZWN0ZWRfc3RhdHNfbW91bnQpXCJcbisgICAgZXhpdCAxXG4rZmlcbitcbisjIDMuIFJ1biB0aGUgcmVwcm9kdWNlciB0byB0cmlnZ2VyIHRoZSBvdXRfcHV0X3BhZ2VzIGZhaWx1cmUgcGF0aFxuK2VjaG8gXCJSdW5uaW5nIHJlcHJvZHVjZXIgKGV4cGVjdGluZyBtbWFwIGZhaWx1cmUgd2l0aCBFTk9NRU0pLi4uXCJcbitpZiAuL2h1Z2V0bGJfcmVzZXJ2ZV9wYWdlc19vdXRfcHV0X3BhZ2VzIFwiJEZJTEVfUEFUSFwiIFwiJG1tYXBfc2l6ZV9ieXRlc1wiOyB0aGVuXG4rICAgIGVjaG8gXCJSZXByb2R1Y2VyIGZpbmlzaGVkIHN1Y2Nlc3NmdWxseS5cIlxuKyAgICByZXN2X2FmdGVyX21tYXA9JChjYXQgXCIkU1lTRlNfUEFUSC9yZXN2X2h1Z2VwYWdlc1wiKVxuKyAgICBlY2hvIFwicmVzdl9odWdlcGFnZXMgYWZ0ZXIgZmFpbGVkIG1tYXA6ICRyZXN2X2FmdGVyX21tYXBcIlxuKyAgICBleHBlY3RlZF9hZnRlcl9tbWFwPSRleHBlY3RlZF9hZnRlcl9tb3VudFxuKyAgICBpZiBbIFwiJHJlc3ZfYWZ0ZXJfbW1hcFwiID0gXCIkZXhwZWN0ZWRfYWZ0ZXJfbW1hcFwiIF07IHRoZW5cbisgICAgICAgIGVjaG8gXCJSRVNVTFQ6IG91dF9wdXRfcGFnZXMgRVhFUkNJU0VEIChyZXN2X2h1Z2VwYWdlcyBwcmVzZXJ2ZWQgYXQgJGV4cGVjdGVkX2FmdGVyX21tYXAgYXMgZXhwZWN0ZWQpXCJcbitcbisgICAgICAgICMgQ2hlY2sgbW91bnQgc3RhdHNcbisgICAgICAgIGV4cGVjdGVkX2JzaXplPSRocGFnZV9zaXplX2J5dGVzXG4rICAgICAgICBic2l6ZV9TPSQoc3RhdCAtZiAtYyBcIiVTXCIgXCIkTU5UX1BBVEhcIilcbisgICAgICAgIGJzaXplX3M9JChzdGF0IC1mIC1jIFwiJXNcIiBcIiRNTlRfUEFUSFwiKVxuKyAgICAgICAgZWNobyBcIk1vdW50IGJsb2NrIHNpemU6ICRic2l6ZV9TIC8gJGJzaXplX3MgKGV4cGVjdGVkOiAkZXhwZWN0ZWRfYnNpemUpXCJcbisgICAgICAgIGlmIFsgXCIkYnNpemVfU1wiICE9IFwiJGV4cGVjdGVkX2JzaXplXCIgXSBcdTAwMjZcdTAwMjYgWyBcIiRic2l6ZV9zXCIgIT0gXCIkZXhwZWN0ZWRfYnNpemVcIiBdOyB0aGVuXG4rICAgICAgICAgICAgZWNobyBcIkVSUk9SOiBVbmV4cGVjdGVkIG1vdW50IGJsb2NrIHNpemUgKGFjdHVhbCBTOiRic2l6ZV9TIHM6JGJzaXplX3MsIGV4cGVjdGVkOiAkZXhwZWN0ZWRfYnNpemUpXCJcbisgICAgICAgICAgICBleGl0IDFcbisgICAgICAgIGZpXG4rXG4rICAgICAgICBhY3R1YWxfc3RhdHM9JChzdGF0IC1mIC1jIFwiJWIgJWYgJWFcIiBcIiRNTlRfUEFUSFwiKVxuKyAgICAgICAgZXhwZWN0ZWRfc3RhdHM9XCIyIDIgMlwiXG4rICAgICAgICBlY2hvIFwiTW91bnQgc3RhdHMgKHRvdGFsIGZyZWUgYXZhaWwpOiAkYWN0dWFsX3N0YXRzIChleHBlY3RlZDogJGV4cGVjdGVkX3N0YXRzKVwiXG4rICAgICAgICBpZiBbIFwiJGFjdHVhbF9zdGF0c1wiICE9IFwiJGV4cGVjdGVkX3N0YXRzXCIgXTsgdGhlblxuKyAgICAgICAgICAgIGVjaG8gXCJSRVNVTFQ6IFVuZXhwZWN0ZWQgbW91bnQgc3RhdHMgYWZ0ZXIgZmFpbGVkIG1tYXAgKEZBSUwpXCJcbisgICAgICAgICAgICBleGl0IDFcbisgICAgICAgIGVsc2VcbisgICAgICAgICAgICBlY2hvIFwiUkVTVUxUOiBNb3VudCBzdGF0cyByZXN0b3JlZCB0byAkZXhwZWN0ZWRfc3RhdHMgYXMgZXhwZWN0ZWQgKFBBU1MpXCJcbisgICAgICAgIGZpXG4rICAgIGVsc2VcbisgICAgICAgIGVjaG8gXCJSRVNVTFQ6IFVuZXhwZWN0ZWQgcmVzdl9odWdlcGFnZXMgdmFsdWU6ICRyZXN2X2FmdGVyX21tYXAgKGV4cGVjdGVkOiAkZXhwZWN0ZWRfYWZ0ZXJfbW1hcClcIlxuKyAgICAgICAgZXhpdCAxXG4rICAgIGZpXG4rZWxzZVxuKyAgICBlY2hvIFwiRkFJTDogUmVwcm9kdWNlciByZXR1cm5lZCBub24temVybyAobW1hcCBkaWRuJ3QgZmFpbCB3aXRoIEVOT01FTSlcIlxuKyAgICBleGl0IDFcbitmaVxuK1xuKyMgNC4gRGlzYWJsZSB0cmFwIGFuZCBkbyBtYW51YWwgY2xlYW51cCB0byBjaGVjayBmb3IgZmluYWwgdW5tb3VudCB1bmRlcmZsb3dcbit0cmFwIC0gRVhJVFxuK1xuK2VjaG8gXCJVbm1vdW50aW5nLi4uXCJcbit1bW91bnQgXCIkTU5UX1BBVEhcIlxuK3JtZGlyIFwiJE1OVF9QQVRIXCJcbitcbitmaW5hbF9yZXN2PSQoY2F0IFwiJFNZU0ZTX1BBVEgvcmVzdl9odWdlcGFnZXNcIilcbitlY2hvIFwiRmluYWwgcmVzdl9odWdlcGFnZXMgKGFmdGVyIHVubW91bnQpOiAkZmluYWxfcmVzdlwiXG4rXG4rIyBSZXN0b3JlIG9yaWdpbmFsIHZhbHVlc1xuK2VjaG8gXCJSZXN0b3Jpbmcgb3JpZ2luYWwgaHVnZXBhZ2Ugc2V0dGluZ3MuLi5cIlxuK2VjaG8gXCIkb3JpZ19uclwiIFx1MDAzZSBcIiRTWVNGU19QQVRIL25yX2h1Z2VwYWdlc1wiXG4rZWNobyBcIiRvcmlnX292ZXJjb21taXRcIiBcdTAwM2UgXCIkU1lTRlNfUEFUSC9ucl9vdmVyY29tbWl0X2h1Z2VwYWdlc1wiXG4rXG4raWYgWyBcIiRmaW5hbF9yZXN2XCIgPSBcIiRpbml0aWFsX3Jlc3ZcIiBdOyB0aGVuXG4rICAgIGVjaG8gXCJSRVNVTFQ6IFN0YXRlIHJlc3RvcmVkIHRvICRpbml0aWFsX3Jlc3YgKG9yIGNsZWFuZWQgdXAgaWYgZml4ZWQpXCJcbisgICAgZWNobyBcIkFMTCBET05FLlwiXG4rICAgIGV4aXQgMFxuK2Vsc2VcbisgICAgZWNobyBcIlJFU1VMVDogVW5kZXJmbG93L0xlYWsvSW5jb3JyZWN0IHN0YXRlIGRldGVjdGVkISAoZmluYWxfcmVzdiA9ICRmaW5hbF9yZXN2LCBleHBlY3RlZCA9ICRpbml0aWFsX3Jlc3YpXCJcbisgICAgZWNobyBcIkFMTCBET05FLlwiXG4rICAgIGV4aXQgMVxuK2ZpXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9odWdldGxiLmggYi9pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaFxuaW5kZXggMmFiYWY5OTMyMWU5MGQuLjA3NGE0NTkwMzk3M2ViIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9odWdldGxiLmhcbisrKyBiL2luY2x1ZGUvbGludXgvaHVnZXRsYi5oXG5AQCAtMTgsNiArMTgsNyBAQFxuIFxuIHN0cnVjdCBtbXVfZ2F0aGVyO1xuIHN0cnVjdCBub2RlO1xuK3N0cnVjdCBoc3RhdGU7XG4gXG4gdm9pZCBmcmVlX2h1Z2VfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbyk7XG4gXG5AQCAtMzQsMTcgKzM1LDcgQEAgdm9pZCBmcmVlX2h1Z2VfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbyk7XG4gICovXG4gI2RlZmluZSBfX05SX1VTRURfU1VCUEFHRSAzXG4gXG4tc3RydWN0IGh1Z2VwYWdlX3N1YnBvb2wge1xuLVx0c3BpbmxvY2tfdCBsb2NrO1xuLVx0bG9uZyBjb3VudDtcbi1cdGxvbmcgbWF4X2hwYWdlcztcdC8qIE1heGltdW0gaHVnZSBwYWdlcyBvciAtMSBpZiBubyBtYXhpbXVtLiAqL1xuLVx0bG9uZyB1c2VkX2hwYWdlcztcdC8qIFVzZWQgY291bnQgYWdhaW5zdCBtYXhpbXVtLCBpbmNsdWRlcyAqL1xuLVx0XHRcdFx0LyogYm90aCBhbGxvY2F0ZWQgYW5kIHJlc2VydmVkIHBhZ2VzLiAqL1xuLVx0c3RydWN0IGhzdGF0ZSAqaHN0YXRlO1xuLVx0bG9uZyBtaW5faHBhZ2VzO1x0LyogTWluaW11bSBodWdlIHBhZ2VzIG9yIC0xIGlmIG5vIG1pbmltdW0uICovXG4tXHRsb25nIHJzdl9ocGFnZXM7XHQvKiBQYWdlcyByZXNlcnZlZCBhZ2FpbnN0IGdsb2JhbCBwb29sIHRvICovXG4tXHRcdFx0XHQvKiBzYXRpc2Z5IG1pbmltdW0gc2l6ZS4gKi9cbi19O1xuK3N0cnVjdCBodWdlcGFnZV9zdWJwb29sO1xuIFxuIHN0cnVjdCByZXN2X21hcCB7XG4gXHRzdHJ1Y3Qga3JlZiByZWZzO1xuQEAgLTExNCw5ICsxMDUsNyBAQCBleHRlcm4gaW50IGh1Z2V0bGJfbWF4X2hzdGF0ZSBfX3JlYWRfbW9zdGx5O1xuICNkZWZpbmUgZm9yX2VhY2hfaHN0YXRlKGgpIFxcXG4gXHRmb3IgKChoKSA9IGhzdGF0ZXM7IChoKSBcdTAwM2MgXHUwMDI2aHN0YXRlc1todWdldGxiX21heF9oc3RhdGVdOyAoaCkrKylcbiBcbi1zdHJ1Y3QgaHVnZXBhZ2Vfc3VicG9vbCAqaHVnZXBhZ2VfbmV3X3N1YnBvb2woc3RydWN0IGhzdGF0ZSAqaCwgbG9uZyBtYXhfaHBhZ2VzLFxuLVx0XHRcdFx0XHRcdGxvbmcgbWluX2hwYWdlcyk7XG4tdm9pZCBodWdlcGFnZV9wdXRfc3VicG9vbChzdHJ1Y3QgaHVnZXBhZ2Vfc3VicG9vbCAqc3Bvb2wpO1xuK2ludCBodWdldGxiX2FjY3RfbWVtb3J5KHN0cnVjdCBoc3RhdGUgKmgsIGxvbmcgZGVsdGEpO1xuIFxuIHZvaWQgaHVnZXRsYl9kdXBfdm1hX3ByaXZhdGUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpO1xuIHZvaWQgY2xlYXJfdm1hX3Jlc3ZfaHVnZV9wYWdlcyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSk7XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmggYi9pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaFxuaW5kZXggZTFmNDZhMDAxNmZjZmQuLjIzZmJiYmM4ZTExZjIwIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmhcbisrKyBiL2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oXG5AQCAtNjQxLDcgKzY0MSwxNSBAQCBzdGF0aWMgaW5saW5lIGludCBtZW1fY2dyb3VwX2NoYXJnZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSxcbiBcdHJldHVybiBfX21lbV9jZ3JvdXBfY2hhcmdlKGZvbGlvLCBtbSwgZ2ZwKTtcbiB9XG4gXG4taW50IG1lbV9jZ3JvdXBfY2hhcmdlX2h1Z2V0bGIoc3RydWN0IGZvbGlvKiBmb2xpbywgZ2ZwX3QgZ2ZwKTtcbitpbnQgbWVtX2Nncm91cF9odWdldGxiX3RyeV9jaGFyZ2UodW5zaWduZWQgaW50IG5yX3BhZ2VzLCBnZnBfdCBnZnAsXG4rXHRcdFx0XHQgIHN0cnVjdCBtZW1fY2dyb3VwICoqbWVtY2dfcCxcbitcdFx0XHRcdCAgc3RydWN0IG9ial9jZ3JvdXAgKipvYmpjZ19wKTtcbit2b2lkIG1lbV9jZ3JvdXBfaHVnZXRsYl9jb21taXRfY2hhcmdlKHN0cnVjdCBmb2xpbyAqZm9saW8sXG4rXHRcdFx0XHQgICAgICBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXG4rXHRcdFx0XHQgICAgICBzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2cpO1xuK3ZvaWQgbWVtX2Nncm91cF9odWdldGxiX2NhbmNlbF9jaGFyZ2UodW5zaWduZWQgaW50IG5yX3BhZ2VzLFxuK1x0XHRcdFx0ICAgICAgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxuK1x0XHRcdFx0ICAgICAgc3RydWN0IG9ial9jZ3JvdXAgKm9iamNnKTtcbiBcbiBpbnQgbWVtX2Nncm91cF9zd2FwaW5fY2hhcmdlX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sIHVuc2lnbmVkIHNob3J0IGlkLFxuIFx0XHRcdFx0ICAgc3RydWN0IG1tX3N0cnVjdCAqbW0sIGdmcF90IGdmcCk7XG5AQCAtMTEyOCw5ICsxMTM2LDI1IEBAIHN0YXRpYyBpbmxpbmUgaW50IG1lbV9jZ3JvdXBfY2hhcmdlKHN0cnVjdCBmb2xpbyAqZm9saW8sXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4tc3RhdGljIGlubGluZSBpbnQgbWVtX2Nncm91cF9jaGFyZ2VfaHVnZXRsYihzdHJ1Y3QgZm9saW8qIGZvbGlvLCBnZnBfdCBnZnApXG4rc3RhdGljIGlubGluZSBpbnQgbWVtX2Nncm91cF9odWdldGxiX3RyeV9jaGFyZ2UodW5zaWduZWQgaW50IG5yX3BhZ2VzLCBnZnBfdCBnZnAsXG4rXHRcdFx0XHRcdFx0c3RydWN0IG1lbV9jZ3JvdXAgKiptZW1jZ19wLFxuK1x0XHRcdFx0XHRcdHN0cnVjdCBvYmpfY2dyb3VwICoqb2JqY2dfcClcbit7XG4rXHQqbWVtY2dfcCA9IE5VTEw7XG4rXHQqb2JqY2dfcCA9IE5VTEw7XG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rc3RhdGljIGlubGluZSB2b2lkIG1lbV9jZ3JvdXBfaHVnZXRsYl9jb21taXRfY2hhcmdlKHN0cnVjdCBmb2xpbyAqZm9saW8sXG4rXHRcdFx0XHRcdFx0ICAgIHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcbitcdFx0XHRcdFx0XHQgICAgc3RydWN0IG9ial9jZ3JvdXAgKm9iamNnKVxuK3tcbit9XG4rXG4rc3RhdGljIGlubGluZSB2b2lkIG1lbV9jZ3JvdXBfaHVnZXRsYl9jYW5jZWxfY2hhcmdlKHVuc2lnbmVkIGludCBucl9wYWdlcyxcbitcdFx0XHRcdFx0XHQgICAgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxuK1x0XHRcdFx0XHRcdCAgICBzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2cpXG4ge1xuLSAgICAgICAgcmV0dXJuIDA7XG4gfVxuIFxuIHN0YXRpYyBpbmxpbmUgaW50IG1lbV9jZ3JvdXBfc3dhcGluX2NoYXJnZV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuZGlmZiAtLWdpdCBhL21tL01ha2VmaWxlIGIvbW0vTWFrZWZpbGVcbmluZGV4IGVmZjlmOWU3ZTA2MWMxLi4zOTY1Yzk1OWU1MDk5MiAxMDA2NDRcbi0tLSBhL21tL01ha2VmaWxlXG4rKysgYi9tbS9NYWtlZmlsZVxuQEAgLTc4LDcgKzc4LDcgQEAgZW5kaWZcbiBvYmotJChDT05GSUdfU1dBUClcdCs9IHBhZ2VfaW8ubyBzd2FwX3N0YXRlLm8gc3dhcGZpbGUub1xuIG9iai0kKENPTkZJR19aU1dBUClcdCs9IHpzd2FwLm9cbiBvYmotJChDT05GSUdfSEFTX0RNQSlcdCs9IGRtYXBvb2wub1xuLW9iai0kKENPTkZJR19IVUdFVExCRlMpXHQrPSBodWdldGxiLm8gaHVnZXRsYl9zeXNmcy5vIGh1Z2V0bGJfc3lzY3RsLm9cbitvYmotJChDT05GSUdfSFVHRVRMQkZTKVx0Kz0gaHVnZXRsYi5vIGh1Z2V0bGJfc3VicG9vbC5vIGh1Z2V0bGJfc3lzZnMubyBodWdldGxiX3N5c2N0bC5vXG4gaWZkZWYgQ09ORklHX0NNQVxuIG9iai0kKENPTkZJR19IVUdFVExCRlMpXHQrPSBodWdldGxiX2NtYS5vXG4gZW5kaWZcbmRpZmYgLS1naXQgYS9tbS9odWdldGxiLmMgYi9tbS9odWdldGxiLmNcbmluZGV4IDU3MTIxMmI4MDgzNWVjLi5lODdmMjZhM2UxZjNlNCAxMDA2NDRcbi0tLSBhL21tL2h1Z2V0bGIuY1xuKysrIGIvbW0vaHVnZXRsYi5jXG5AQCAtMzgsNiArMzgsOCBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L21tX2lubGluZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcGFkYXRhLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9wZ2FsbG9jLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9tZW1jb250cm9sLmhcdTAwM2VcbisjaW5jbHVkZSBcImh1Z2V0bGJfc3VicG9vbC5oXCJcbiBcbiAjaW5jbHVkZSBcdTAwM2Nhc20vcGFnZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjYXNtL3RsYi5oXHUwMDNlXG5AQCAtMTEzLDggKzExNSw3IEBAIF9fY2FjaGVsaW5lX2FsaWduZWRfaW5fc21wIERFRklORV9TUElOTE9DSyhodWdldGxiX2xvY2spO1xuIHN0YXRpYyBpbnQgbnVtX2ZhdWx0X211dGV4ZXMgX19yb19hZnRlcl9pbml0O1xuIHN0cnVjdCBtdXRleCAqaHVnZXRsYl9mYXVsdF9tdXRleF90YWJsZSBfX3JvX2FmdGVyX2luaXQ7XG4gXG4tLyogRm9yd2FyZCBkZWNsYXJhdGlvbiAqL1xuLXN0YXRpYyBpbnQgaHVnZXRsYl9hY2N0X21lbW9yeShzdHJ1Y3QgaHN0YXRlICpoLCBsb25nIGRlbHRhKTtcbisvKiBGb3J3YXJkIGRlY2xhcmF0aW9ucyAqL1xuIHN0YXRpYyB2b2lkIGh1Z2V0bGJfdm1hX2xvY2tfZnJlZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSk7XG4gc3RhdGljIHZvaWQgaHVnZXRsYl92bWFfbG9ja19hbGxvYyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSk7XG4gc3RhdGljIHZvaWQgX19odWdldGxiX3ZtYV91bmxvY2tfd3JpdGVfZnJlZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSk7XG5AQCAtMTI1LDE1NiArMTI2LDYgQEAgc3RhdGljIHZvaWQgaHVnZXRsYl91bnNoYXJlX3BtZHMoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4gXHRcdHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLCBib29sIHRha2VfbG9ja3MpO1xuIHN0YXRpYyBzdHJ1Y3QgcmVzdl9tYXAgKnZtYV9yZXN2X21hcChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSk7XG4gXG4tc3RhdGljIGlubGluZSBib29sIHN1YnBvb2xfaXNfZnJlZShzdHJ1Y3QgaHVnZXBhZ2Vfc3VicG9vbCAqc3Bvb2wpXG4te1xuLVx0aWYgKHNwb29sLVx1MDAzZWNvdW50KVxuLVx0XHRyZXR1cm4gZmFsc2U7XG4tXHRpZiAoc3Bvb2wtXHUwMDNlbWF4X2hwYWdlcyAhPSAtMSlcbi1cdFx0cmV0dXJuIHNwb29sLVx1MDAzZXVzZWRfaHBhZ2VzID09IDA7XG4tXHRpZiAoc3Bvb2wtXHUwMDNlbWluX2hwYWdlcyAhPSAtMSlcbi1cdFx0cmV0dXJuIHNwb29sLVx1MDAzZXJzdl9ocGFnZXMgPT0gc3Bvb2wtXHUwMDNlbWluX2hwYWdlcztcbi1cbi1cdHJldHVybiB0cnVlO1xuLX1cbi1cbi1zdGF0aWMgaW5saW5lIHZvaWQgdW5sb2NrX29yX3JlbGVhc2Vfc3VicG9vbChzdHJ1Y3QgaHVnZXBhZ2Vfc3VicG9vbCAqc3Bvb2wsXG4tXHRcdFx0XHRcdFx0dW5zaWduZWQgbG9uZyBpcnFfZmxhZ3MpXG4te1xuLVx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZzcG9vbC1cdTAwM2Vsb2NrLCBpcnFfZmxhZ3MpO1xuLVxuLVx0LyogSWYgbm8gcGFnZXMgYXJlIHVzZWQsIGFuZCBubyBvdGhlciBoYW5kbGVzIHRvIHRoZSBzdWJwb29sXG4tXHQgKiByZW1haW4sIGdpdmUgdXAgYW55IHJlc2VydmF0aW9ucyBiYXNlZCBvbiBtaW5pbXVtIHNpemUgYW5kXG4tXHQgKiBmcmVlIHRoZSBzdWJwb29sICovXG4tXHRpZiAoc3VicG9vbF9pc19mcmVlKHNwb29sKSkge1xuLVx0XHRpZiAoc3Bvb2wtXHUwMDNlbWluX2hwYWdlcyAhPSAtMSlcbi1cdFx0XHRodWdldGxiX2FjY3RfbWVtb3J5KHNwb29sLVx1MDAzZWhzdGF0ZSxcbi1cdFx0XHRcdFx0XHQtc3Bvb2wtXHUwMDNlbWluX2hwYWdlcyk7XG4tXHRcdGtmcmVlKHNwb29sKTtcbi1cdH1cbi19XG4tXG4tc3RydWN0IGh1Z2VwYWdlX3N1YnBvb2wgKmh1Z2VwYWdlX25ld19zdWJwb29sKHN0cnVjdCBoc3RhdGUgKmgsIGxvbmcgbWF4X2hwYWdlcyxcbi1cdFx0XHRcdFx0XHRsb25nIG1pbl9ocGFnZXMpXG4te1xuLVx0c3RydWN0IGh1Z2VwYWdlX3N1YnBvb2wgKnNwb29sO1xuLVxuLVx0c3Bvb2wgPSBremFsbG9jX29iaigqc3Bvb2wpO1xuLVx0aWYgKCFzcG9vbClcbi1cdFx0cmV0dXJuIE5VTEw7XG4tXG4tXHRzcGluX2xvY2tfaW5pdChcdTAwMjZzcG9vbC1cdTAwM2Vsb2NrKTtcbi1cdHNwb29sLVx1MDAzZWNvdW50ID0gMTtcbi1cdHNwb29sLVx1MDAzZW1heF9ocGFnZXMgPSBtYXhfaHBhZ2VzO1xuLVx0c3Bvb2wtXHUwMDNlaHN0YXRlID0gaDtcbi1cdHNwb29sLVx1MDAzZW1pbl9ocGFnZXMgPSBtaW5faHBhZ2VzO1xuLVxuLVx0aWYgKG1pbl9ocGFnZXMgIT0gLTEgXHUwMDI2XHUwMDI2IGh1Z2V0bGJfYWNjdF9tZW1vcnkoaCwgbWluX2hwYWdlcykpIHtcbi1cdFx0a2ZyZWUoc3Bvb2wpO1xuLVx0XHRyZXR1cm4gTlVMTDtcbi1cdH1cbi1cdHNwb29sLVx1MDAzZXJzdl9ocGFnZXMgPSBtaW5faHBhZ2VzO1xuLVxuLVx0cmV0dXJuIHNwb29sO1xuLX1cbi1cbi12b2lkIGh1Z2VwYWdlX3B1dF9zdWJwb29sKHN0cnVjdCBodWdlcGFnZV9zdWJwb29sICpzcG9vbClcbi17XG4tXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuLVxuLVx0c3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2c3Bvb2wtXHUwMDNlbG9jaywgZmxhZ3MpO1xuLVx0QlVHX09OKCFzcG9vbC1cdTAwM2Vjb3VudCk7XG4tXHRzcG9vbC1cdTAwM2Vjb3VudC0tO1xuLVx0dW5sb2NrX29yX3JlbGVhc2Vfc3VicG9vbChzcG9vbCwgZmxhZ3MpO1xuLX1cbi1cbi0vKlxuLSAqIFN1YnBvb2wgYWNjb3VudGluZyBmb3IgYWxsb2NhdGluZyBhbmQgcmVzZXJ2aW5nIHBhZ2VzLlxuLSAqIFJldHVybiAtRU5PTUVNIGlmIHRoZXJlIGFyZSBub3QgZW5vdWdoIHJlc291cmNlcyB0byBzYXRpc2Z5IHRoZVxuLSAqIHJlcXVlc3QuICBPdGhlcndpc2UsIHJldHVybiB0aGUgbnVtYmVyIG9mIHBhZ2VzIGJ5IHdoaWNoIHRoZVxuLSAqIGdsb2JhbCBwb29scyBtdXN0IGJlIGFkanVzdGVkICh1cHdhcmQpLiAgVGhlIHJldHVybmVkIHZhbHVlIG1heVxuLSAqIG9ubHkgYmUgZGlmZmVyZW50IHRoYW4gdGhlIHBhc3NlZCB2YWx1ZSAoZGVsdGEpIGluIHRoZSBjYXNlIHdoZXJlXG4tICogYSBzdWJwb29sIG1pbmltdW0gc2l6ZSBtdXN0IGJlIG1haW50YWluZWQuXG4tICovXG4tc3RhdGljIGxvbmcgaHVnZXBhZ2Vfc3VicG9vbF9nZXRfcGFnZXMoc3RydWN0IGh1Z2VwYWdlX3N1YnBvb2wgKnNwb29sLFxuLVx0XHRcdFx0ICAgICAgbG9uZyBkZWx0YSlcbi17XG4tXHRsb25nIHJldCA9IGRlbHRhO1xuLVxuLVx0aWYgKCFzcG9vbClcbi1cdFx0cmV0dXJuIHJldDtcbi1cbi1cdHNwaW5fbG9ja19pcnEoXHUwMDI2c3Bvb2wtXHUwMDNlbG9jayk7XG4tXG4tXHRpZiAoc3Bvb2wtXHUwMDNlbWF4X2hwYWdlcyAhPSAtMSkge1x0XHQvKiBtYXhpbXVtIHNpemUgYWNjb3VudGluZyAqL1xuLVx0XHRpZiAoKHNwb29sLVx1MDAzZXVzZWRfaHBhZ2VzICsgZGVsdGEpIFx1MDAzYz0gc3Bvb2wtXHUwMDNlbWF4X2hwYWdlcylcbi1cdFx0XHRzcG9vbC1cdTAwM2V1c2VkX2hwYWdlcyArPSBkZWx0YTtcbi1cdFx0ZWxzZSB7XG4tXHRcdFx0cmV0ID0gLUVOT01FTTtcbi1cdFx0XHRnb3RvIHVubG9ja19yZXQ7XG4tXHRcdH1cbi1cdH1cbi1cbi1cdC8qIG1pbmltdW0gc2l6ZSBhY2NvdW50aW5nICovXG4tXHRpZiAoc3Bvb2wtXHUwMDNlbWluX2hwYWdlcyAhPSAtMSBcdTAwMjZcdTAwMjYgc3Bvb2wtXHUwMDNlcnN2X2hwYWdlcykge1xuLVx0XHRpZiAoZGVsdGEgXHUwMDNlIHNwb29sLVx1MDAzZXJzdl9ocGFnZXMpIHtcbi1cdFx0XHQvKlxuLVx0XHRcdCAqIEFza2luZyBmb3IgbW9yZSByZXNlcnZlcyB0aGFuIHRob3NlIGFscmVhZHkgdGFrZW4gb25cbi1cdFx0XHQgKiBiZWhhbGYgb2Ygc3VicG9vbC4gIFJldHVybiBkaWZmZXJlbmNlLlxuLVx0XHRcdCAqL1xuLVx0XHRcdHJldCA9IGRlbHRhIC0gc3Bvb2wtXHUwMDNlcnN2X2hwYWdlcztcbi1cdFx0XHRzcG9vbC1cdTAwM2Vyc3ZfaHBhZ2VzID0gMDtcbi1cdFx0fSBlbHNlIHtcbi1cdFx0XHRyZXQgPSAwO1x0LyogcmVzZXJ2ZXMgYWxyZWFkeSBhY2NvdW50ZWQgZm9yICovXG4tXHRcdFx0c3Bvb2wtXHUwMDNlcnN2X2hwYWdlcyAtPSBkZWx0YTtcbi1cdFx0fVxuLVx0fVxuLVxuLXVubG9ja19yZXQ6XG4tXHRzcGluX3VubG9ja19pcnEoXHUwMDI2c3Bvb2wtXHUwMDNlbG9jayk7XG4tXHRyZXR1cm4gcmV0O1xuLX1cbi1cbi0vKlxuLSAqIFN1YnBvb2wgYWNjb3VudGluZyBmb3IgZnJlZWluZyBhbmQgdW5yZXNlcnZpbmcgcGFnZXMuXG4tICogUmV0dXJuIHRoZSBudW1iZXIgb2YgZ2xvYmFsIHBhZ2UgcmVzZXJ2YXRpb25zIHRoYXQgbXVzdCBiZSBkcm9wcGVkLlxuLSAqIFRoZSByZXR1cm4gdmFsdWUgbWF5IG9ubHkgYmUgZGlmZmVyZW50IHRoYW4gdGhlIHBhc3NlZCB2YWx1ZSAoZGVsdGEpXG4tICogaW4gdGhlIGNhc2Ugd2hlcmUgYSBzdWJwb29sIG1pbmltdW0gc2l6ZSBtdXN0IGJlIG1haW50YWluZWQuXG4tICovXG4tc3RhdGljIGxvbmcgaHVnZXBhZ2Vfc3VicG9vbF9wdXRfcGFnZXMoc3RydWN0IGh1Z2VwYWdlX3N1YnBvb2wgKnNwb29sLFxuLVx0XHRcdFx0ICAgICAgIGxvbmcgZGVsdGEpXG4te1xuLVx0bG9uZyByZXQgPSBkZWx0YTtcbi1cdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4tXG4tXHRpZiAoIXNwb29sKVxuLVx0XHRyZXR1cm4gZGVsdGE7XG4tXG4tXHRzcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZzcG9vbC1cdTAwM2Vsb2NrLCBmbGFncyk7XG4tXG4tXHRpZiAoc3Bvb2wtXHUwMDNlbWF4X2hwYWdlcyAhPSAtMSlcdFx0LyogbWF4aW11bSBzaXplIGFjY291bnRpbmcgKi9cbi1cdFx0c3Bvb2wtXHUwMDNldXNlZF9ocGFnZXMgLT0gZGVsdGE7XG4tXG4tXHQgLyogbWluaW11bSBzaXplIGFjY291bnRpbmcgKi9cbi1cdGlmIChzcG9vbC1cdTAwM2VtaW5faHBhZ2VzICE9IC0xIFx1MDAyNlx1MDAyNiBzcG9vbC1cdTAwM2V1c2VkX2hwYWdlcyBcdTAwM2Mgc3Bvb2wtXHUwMDNlbWluX2hwYWdlcykge1xuLVx0XHRpZiAoc3Bvb2wtXHUwMDNlcnN2X2hwYWdlcyArIGRlbHRhIFx1MDAzYz0gc3Bvb2wtXHUwMDNlbWluX2hwYWdlcylcbi1cdFx0XHRyZXQgPSAwO1xuLVx0XHRlbHNlXG4tXHRcdFx0cmV0ID0gc3Bvb2wtXHUwMDNlcnN2X2hwYWdlcyArIGRlbHRhIC0gc3Bvb2wtXHUwMDNlbWluX2hwYWdlcztcbi1cbi1cdFx0c3Bvb2wtXHUwMDNlcnN2X2hwYWdlcyArPSBkZWx0YTtcbi1cdFx0aWYgKHNwb29sLVx1MDAzZXJzdl9ocGFnZXMgXHUwMDNlIHNwb29sLVx1MDAzZW1pbl9ocGFnZXMpXG4tXHRcdFx0c3Bvb2wtXHUwMDNlcnN2X2hwYWdlcyA9IHNwb29sLVx1MDAzZW1pbl9ocGFnZXM7XG4tXHR9XG4tXG4tXHQvKlxuLVx0ICogSWYgaHVnZXRsYmZzX3B1dF9zdXBlciBjb3VsZG4ndCBmcmVlIHNwb29sIGR1ZSB0byBhbiBvdXRzdGFuZGluZ1xuLVx0ICogcXVvdGEgcmVmZXJlbmNlLCBmcmVlIGl0IG5vdy5cbi1cdCAqL1xuLVx0dW5sb2NrX29yX3JlbGVhc2Vfc3VicG9vbChzcG9vbCwgZmxhZ3MpO1xuLVxuLVx0cmV0dXJuIHJldDtcbi19XG4tXG4gc3RhdGljIGlubGluZSBzdHJ1Y3QgaHVnZXBhZ2Vfc3VicG9vbCAqc3VicG9vbF92bWEoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXG4ge1xuIFx0cmV0dXJuIHN1YnBvb2xfaW5vZGUoZmlsZV9pbm9kZSh2bWEtXHUwMDNldm1fZmlsZSkpO1xuQEAgLTI4NTgsMTEgKzI3MDksMTMgQEAgc3RydWN0IGZvbGlvICphbGxvY19odWdldGxiX2ZvbGlvKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuIFx0c3RydWN0IGh1Z2VwYWdlX3N1YnBvb2wgKnNwb29sID0gc3VicG9vbF92bWEodm1hKTtcbiBcdHN0cnVjdCBoc3RhdGUgKmggPSBoc3RhdGVfdm1hKHZtYSk7XG4gXHRzdHJ1Y3QgZm9saW8gKmZvbGlvO1xuLVx0bG9uZyByZXR2YWwsIGdibF9jaGcsIGdibF9yZXNlcnZlO1xuK1x0bG9uZyByZXR2YWwsIGdibF9jaGc7XG4gXHRtYXBfY2hnX3N0YXRlIG1hcF9jaGc7XG4gXHRpbnQgcmV0LCBpZHg7XG4gXHRzdHJ1Y3QgaHVnZXRsYl9jZ3JvdXAgKmhfY2cgPSBOVUxMO1xuIFx0c3RydWN0IGh1Z2V0bGJfY2dyb3VwICpoX2NnX3JzdmQgPSBOVUxMO1xuK1x0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbV9jZyA9IE5VTEw7XG4rXHRzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqX2NnID0gTlVMTDtcbiBcdGdmcF90IGdmcCA9IGh0bGJfYWxsb2NfbWFzayhoKSB8IF9fR0ZQX1JFVFJZX01BWUZBSUw7XG4gXG4gXHRpZHggPSBoc3RhdGVfaW5kZXgoaCk7XG5AQCAtMjkyMiw2ICsyNzc1LDExIEBAIHN0cnVjdCBmb2xpbyAqYWxsb2NfaHVnZXRsYl9mb2xpbyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbiBcdGlmIChyZXQpXG4gXHRcdGdvdG8gb3V0X3VuY2hhcmdlX2Nncm91cF9yZXNlcnZhdGlvbjtcbiBcbitcdHJldCA9IG1lbV9jZ3JvdXBfaHVnZXRsYl90cnlfY2hhcmdlKHBhZ2VzX3Blcl9odWdlX3BhZ2UoaCksIGdmcCxcbitcdFx0XHRcdFx0ICAgIFx1MDAyNm1lbV9jZywgXHUwMDI2b2JqX2NnKTtcbitcdGlmIChyZXQpXG4rXHRcdGdvdG8gb3V0X3VuY2hhcmdlX2Nncm91cDtcbitcbiBcdHNwaW5fbG9ja19pcnEoXHUwMDI2aHVnZXRsYl9sb2NrKTtcbiBcdC8qXG4gXHQgKiBnbGJfY2hnIGlzIHBhc3NlZCB0byBpbmRpY2F0ZSB3aGV0aGVyIG9yIG5vdCBhIHBhZ2UgbXVzdCBiZSB0YWtlblxuQEAgLTI5MzMsNyArMjc5MSw3IEBAIHN0cnVjdCBmb2xpbyAqYWxsb2NfaHVnZXRsYl9mb2xpbyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbiBcdFx0c3Bpbl91bmxvY2tfaXJxKFx1MDAyNmh1Z2V0bGJfbG9jayk7XG4gXHRcdGZvbGlvID0gYWxsb2NfYnVkZHlfaHVnZXRsYl9mb2xpb193aXRoX21wb2woaCwgdm1hLCBhZGRyKTtcbiBcdFx0aWYgKCFmb2xpbylcbi1cdFx0XHRnb3RvIG91dF91bmNoYXJnZV9jZ3JvdXA7XG4rXHRcdFx0Z290byBvdXRfdW5jaGFyZ2VfY2dyb3VwX21lbWNnO1xuIFx0XHRzcGluX2xvY2tfaXJxKFx1MDAyNmh1Z2V0bGJfbG9jayk7XG4gXHRcdGxpc3RfYWRkKFx1MDAyNmZvbGlvLVx1MDAzZWxydSwgXHUwMDI2aC1cdTAwM2VodWdlcGFnZV9hY3RpdmVsaXN0KTtcbiBcdFx0Zm9saW9fcmVmX3VuZnJlZXplKGZvbGlvLCAxKTtcbkBAIC0yOTYwLDYgKzI4MTgsOSBAQCBzdHJ1Y3QgZm9saW8gKmFsbG9jX2h1Z2V0bGJfZm9saW8oc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4gXG4gXHRzcGluX3VubG9ja19pcnEoXHUwMDI2aHVnZXRsYl9sb2NrKTtcbiBcbitcdG1lbV9jZ3JvdXBfaHVnZXRsYl9jb21taXRfY2hhcmdlKGZvbGlvLCBtZW1fY2csIG9ial9jZyk7XG4rXHRscnV2ZWNfc3RhdF9tb2RfZm9saW8oZm9saW8sIE5SX0hVR0VUTEIsIHBhZ2VzX3Blcl9odWdlX3BhZ2UoaCkpO1xuK1xuIFx0aHVnZXRsYl9zZXRfZm9saW9fc3VicG9vbChmb2xpbywgc3Bvb2wpO1xuIFxuIFx0aWYgKG1hcF9jaGcgIT0gTUFQX0NIR19FTkZPUkNFRCkge1xuQEAgLTI5ODcsMjEgKzI4NDgsMTAgQEAgc3RydWN0IGZvbGlvICphbGxvY19odWdldGxiX2ZvbGlvKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuIFx0XHR9XG4gXHR9XG4gXG4tXHRyZXQgPSBtZW1fY2dyb3VwX2NoYXJnZV9odWdldGxiKGZvbGlvLCBnZnApO1xuLVx0Lypcbi1cdCAqIFVuY29uZGl0aW9uYWxseSBpbmNyZW1lbnQgTlJfSFVHRVRMQiBoZXJlLiBJZiBpdCB0dXJucyBvdXQgdGhhdFxuLVx0ICogbWVtX2Nncm91cF9jaGFyZ2VfaHVnZXRsYiBmYWlsZWQsIHRoZW4gaW1tZWRpYXRlbHkgZnJlZSB0aGUgcGFnZSBhbmRcbi1cdCAqIGRlY3JlbWVudCBOUl9IVUdFVExCLlxuLVx0ICovXG4tXHRscnV2ZWNfc3RhdF9tb2RfZm9saW8oZm9saW8sIE5SX0hVR0VUTEIsIHBhZ2VzX3Blcl9odWdlX3BhZ2UoaCkpO1xuLVxuLVx0aWYgKHJldCA9PSAtRU5PTUVNKSB7XG4tXHRcdGZyZWVfaHVnZV9mb2xpbyhmb2xpbyk7XG4tXHRcdHJldHVybiBFUlJfUFRSKC1FTk9NRU0pO1xuLVx0fVxuLVxuIFx0cmV0dXJuIGZvbGlvO1xuIFxuK291dF91bmNoYXJnZV9jZ3JvdXBfbWVtY2c6XG4rXHRtZW1fY2dyb3VwX2h1Z2V0bGJfY2FuY2VsX2NoYXJnZShwYWdlc19wZXJfaHVnZV9wYWdlKGgpLCBtZW1fY2csIG9ial9jZyk7XG4gb3V0X3VuY2hhcmdlX2Nncm91cDpcbiBcdGh1Z2V0bGJfY2dyb3VwX3VuY2hhcmdlX2Nncm91cChpZHgsIHBhZ2VzX3Blcl9odWdlX3BhZ2UoaCksIGhfY2cpO1xuIG91dF91bmNoYXJnZV9jZ3JvdXBfcmVzZXJ2YXRpb246XG5AQCAtMzAwOSwxOSArMjg1OSwyOCBAQCBzdHJ1Y3QgZm9saW8gKmFsbG9jX2h1Z2V0bGJfZm9saW8oc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4gXHRcdGh1Z2V0bGJfY2dyb3VwX3VuY2hhcmdlX2Nncm91cF9yc3ZkKGlkeCwgcGFnZXNfcGVyX2h1Z2VfcGFnZShoKSxcbiBcdFx0XHRcdFx0XHQgICAgaF9jZ19yc3ZkKTtcbiBvdXRfc3VicG9vbF9wdXQ6XG4tXHQvKlxuLVx0ICogcHV0IHBhZ2UgdG8gc3VicG9vbCBpZmYgdGhlIHF1b3RhIG9mIHN1YnBvb2wncyByc3ZfaHBhZ2VzIGlzIHVzZWRcbi1cdCAqIGR1cmluZyBodWdlcGFnZV9zdWJwb29sX2dldF9wYWdlcy5cbi1cdCAqL1xuLVx0aWYgKG1hcF9jaGcgXHUwMDI2XHUwMDI2ICFnYmxfY2hnKSB7XG4tXHRcdGdibF9yZXNlcnZlID0gaHVnZXBhZ2Vfc3VicG9vbF9wdXRfcGFnZXMoc3Bvb2wsIDEpO1xuLVx0XHRodWdldGxiX2FjY3RfbWVtb3J5KGgsIC1nYmxfcmVzZXJ2ZSk7XG4rXHRpZiAobWFwX2NoZykge1xuK1x0XHRsb25nIGdibF9yZXNlcnZlID0gaHVnZXBhZ2Vfc3VicG9vbF9wdXRfcGFnZXMoc3Bvb2wsIDEpO1xuK1xuK1x0XHRpZiAoIWdibF9jaGcpXG4rXHRcdFx0aHVnZXRsYl9hY2N0X21lbW9yeShoLCAtZ2JsX3Jlc2VydmUpO1xuIFx0fVxuIFxuIFxuIG91dF9lbmRfcmVzZXJ2YXRpb246XG4gXHRpZiAobWFwX2NoZyAhPSBNQVBfQ0hHX0VORk9SQ0VEKVxuIFx0XHR2bWFfZW5kX3Jlc2VydmF0aW9uKGgsIHZtYSwgYWRkcik7XG4rXG4rXHQvKlxuK1x0ICogUmV0dXJuIC1FTk9TUEMgd2hlbiB0aGlzIGZ1bmN0aW9uIGZhaWxzIHRvIGFsbG9jYXRlIG9yXG4rXHQgKiBjaGFyZ2UgYSBodWdlIHBhZ2UuIElmIGEgc3RhbmRhcmQgKFBBR0VfU0laRSkgcGFnZVxuK1x0ICogYWxsb2NhdGlvbiBmYWlscywgdGhlIE9PTSBraWxsZXIgaXMgZ2l2ZW4gYSBjaGFuY2UgdG8gcnVuLFxuK1x0ICogd2hpY2ggbWF5IHJlc29sdmUgdGhlIGZhaWx1cmUgb24gcmV0cnkuIEhvd2V2ZXIsIGZvclxuK1x0ICogSHVnZVRMQiBhbGxvY2F0aW9ucywgdGhlIE9PTSBraWxsZXIgaXMgbm90IHRyaWdnZXJlZC5cbitcdCAqIFJldHVybmluZyAtRU5PTUVNIChvciBhbnl0aGluZyByZXN1bHRpbmcgaW4gVk1fRkFVTFRfT09NKVxuK1x0ICogd291bGQgbGVhayB0byB0aGUgI1BGIGhhbmRsZXIsIGNhdXNpbmcgaXQgdG8gbG9vcFxuK1x0ICogaW5kZWZpbml0ZWx5IHJldHJ5aW5nIHRoZSBmYXVsdC5cbitcdCAqL1xuIFx0cmV0dXJuIEVSUl9QVFIoLUVOT1NQQyk7XG4gfVxuIFxuQEAgLTQ1OTMsNyArNDQ1Miw3IEBAIHVuc2lnbmVkIGxvbmcgaHVnZXRsYl90b3RhbF9wYWdlcyh2b2lkKVxuIFx0cmV0dXJuIG5yX3RvdGFsX3BhZ2VzO1xuIH1cbiBcbi1zdGF0aWMgaW50IGh1Z2V0bGJfYWNjdF9tZW1vcnkoc3RydWN0IGhzdGF0ZSAqaCwgbG9uZyBkZWx0YSlcbitpbnQgaHVnZXRsYl9hY2N0X21lbW9yeShzdHJ1Y3QgaHN0YXRlICpoLCBsb25nIGRlbHRhKVxuIHtcbiBcdGludCByZXQgPSAtRU5PTUVNO1xuIFxuQEAgLTY1NDIsNyArNjQwMSw3IEBAIGxvbmcgaHVnZXRsYl9yZXNlcnZlX3BhZ2VzKHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4gXHRcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuIFx0XHR2bWFfZmxhZ3NfdCB2bWFfZmxhZ3MpXG4ge1xuLVx0bG9uZyBjaGcgPSAtMSwgYWRkID0gLTEsIHNwb29sX3Jlc3YsIGdibF9yZXN2O1xuK1x0bG9uZyBjaGcgPSAtMSwgYWRkID0gLTEsIGdibF9yZXN2O1xuIFx0c3RydWN0IGhzdGF0ZSAqaCA9IGhzdGF0ZV9pbm9kZShpbm9kZSk7XG4gXHRzdHJ1Y3QgaHVnZXBhZ2Vfc3VicG9vbCAqc3Bvb2wgPSBzdWJwb29sX2lub2RlKGlub2RlKTtcbiBcdHN0cnVjdCByZXN2X21hcCAqcmVzdl9tYXA7XG5AQCAtNjY4NywyNiArNjU0NiwyMSBAQCBsb25nIGh1Z2V0bGJfcmVzZXJ2ZV9wYWdlcyhzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuIFx0fVxuIFx0cmV0dXJuIGNoZztcbiBcbi1vdXRfcHV0X3BhZ2VzOlxuLVx0c3Bvb2xfcmVzdiA9IGNoZyAtIGdibF9yZXNlcnZlO1xuLVx0aWYgKHNwb29sX3Jlc3YpIHtcbi1cdFx0LyogcHV0IHN1YiBwb29sJ3MgcmVzZXJ2YXRpb24gYmFjaywgY2hnIC0gZ2JsX3Jlc2VydmUgKi9cbi1cdFx0Z2JsX3Jlc3YgPSBodWdlcGFnZV9zdWJwb29sX3B1dF9wYWdlcyhzcG9vbCwgc3Bvb2xfcmVzdik7XG4tXHRcdC8qXG4tXHRcdCAqIHN1YnBvb2wncyByZXNlcnZlZCBwYWdlcyBjYW4gbm90IGJlIHB1dCBiYWNrIGR1ZSB0byByYWNlLFxuLVx0XHQgKiByZXR1cm4gdG8gaHN0YXRlLlxuLVx0XHQgKi9cbi1cdFx0aHVnZXRsYl9hY2N0X21lbW9yeShoLCAtZ2JsX3Jlc3YpO1xuLVx0fVxuLVx0LyogUmVzdG9yZSB1c2VkX2hwYWdlcyBmb3IgcGFnZXMgdGhhdCBmYWlsZWQgZ2xvYmFsIHJlc2VydmF0aW9uICovXG4tXHRpZiAoZ2JsX3Jlc2VydmUgXHUwMDI2XHUwMDI2IHNwb29sKSB7XG4tXHRcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4rIG91dF9wdXRfcGFnZXM6XG4rXHQvKlxuK1x0ICogUmV0dXJuIGFsbCB0aGF0IHdhcyByZXF1ZXN0ZWQgZnJvbSB0aGUgc3VicG9vbCwgbGV0IHN1YnBvb2xcbitcdCAqIHRlbGwgdXMgdGhlIG5ldyBudW1iZXIgb2YgcmVzZXJ2YXRpb25zIHRoYXQgbmVlZCB0byBiZVxuK1x0ICogcmV0dXJuZWQgdG8gdGhlIGdsb2JhbCBwb29sLlxuK1x0ICovXG4rXHRnYmxfcmVzdiA9IGh1Z2VwYWdlX3N1YnBvb2xfcHV0X3BhZ2VzKHNwb29sLCBjaGcpO1xuK1x0LypcbitcdCAqIFRoZXJlIG1heSBiZSBhIGRpZmZlcmVuY2UgYmV0d2VlbiB0aGUgbnVtYmVyIG9mXG4rXHQgKiByZXNlcnZhdGlvbnMgdG8gY29uc3VtZSBhbmQgdGhlIG51bWJlciB0byByZXN0b3JlIG5vdyBpZlxuK1x0ICogdGhlcmUgYXJlIG11bHRpcGxlIHRocmVhZHMgaW50ZXJhY3Rpbmcgd2l0aCB0aGUgc3VicG9vbCAtXG4rXHQgKiByZXN0b3JlIHRoZSBkaWZmZXJlbmNlLlxuK1x0ICovXG4rXHRodWdldGxiX2FjY3RfbWVtb3J5KGgsIC0oZ2JsX3Jlc3YgLSBnYmxfcmVzZXJ2ZSkpO1xuIFxuLVx0XHRzcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZzcG9vbC1cdTAwM2Vsb2NrLCBmbGFncyk7XG4tXHRcdGlmIChzcG9vbC1cdTAwM2VtYXhfaHBhZ2VzICE9IC0xKVxuLVx0XHRcdHNwb29sLVx1MDAzZXVzZWRfaHBhZ2VzIC09IGdibF9yZXNlcnZlO1xuLVx0XHR1bmxvY2tfb3JfcmVsZWFzZV9zdWJwb29sKHNwb29sLCBmbGFncyk7XG4tXHR9XG4gb3V0X3VuY2hhcmdlX2Nncm91cDpcbiBcdGh1Z2V0bGJfY2dyb3VwX3VuY2hhcmdlX2Nncm91cF9yc3ZkKGhzdGF0ZV9pbmRleChoKSxcbiBcdFx0XHRcdFx0ICAgIGNoZyAqIHBhZ2VzX3Blcl9odWdlX3BhZ2UoaCksIGhfY2cpO1xuZGlmZiAtLWdpdCBhL21tL2h1Z2V0bGJfc3VicG9vbC5jIGIvbW0vaHVnZXRsYl9zdWJwb29sLmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uZWI1NDcyYmRmMjE5MjRcbi0tLSAvZGV2L251bGxcbisrKyBiL21tL2h1Z2V0bGJfc3VicG9vbC5jXG5AQCAtMCwwICsxLDIyMyBAQFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4rLypcbisgKiBTdWJwb29sIGFuZCByZXNlcnZlIGFjY291bnRpbmcgZm9yIEh1Z2VUTEIgZm9saW9zLlxuKyAqIEV4dHJhY3RlZCBmcm9tIG1tL2h1Z2V0bGIuY1xuKyAqL1xuK1xuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3R5cGVzLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9rZXJuZWwuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3NsYWIuaFx1MDAzZVxuKyNpZmRlZiBfX0tFUk5FTF9fXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvaHVnZXRsYi5oXHUwMDNlXG4rI2VuZGlmXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvc3BpbmxvY2suaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2J1Zy5oXHUwMDNlXG4rI2luY2x1ZGUgXCJodWdldGxiX3N1YnBvb2wuaFwiXG4rXG4rc3RydWN0IGh1Z2VwYWdlX3N1YnBvb2wge1xuK1x0c3BpbmxvY2tfdCBsb2NrO1xuK1x0bG9uZyBjb3VudDtcbitcdGxvbmcgbWF4X2hwYWdlcztcdC8qIE1heGltdW0gaHVnZSBwYWdlcyBvciAtMSBpZiBubyBtYXhpbXVtLiAqL1xuK1x0bG9uZyB1c2VkX2hwYWdlcztcdC8qIFVzZWQgcGFnZSBjb3VudCwgaW5jbHVkZXMgYm90aCAqL1xuK1x0XHRcdFx0LyogYWxsb2NhdGVkIGFuZCByZXNlcnZlZCBwYWdlcy4gKi9cbitcdHN0cnVjdCBoc3RhdGUgKmhzdGF0ZTtcbitcdGxvbmcgbWluX2hwYWdlcztcdC8qIE1pbmltdW0gaHVnZSBwYWdlcyBvciAtMSBpZiBubyBtaW5pbXVtLiAqL1xuK1x0bG9uZyByc3ZfaHBhZ2VzO1x0LyogUGFnZXMgcmVzZXJ2ZWQgYWdhaW5zdCBnbG9iYWwgcG9vbCB0byAqL1xuK1x0XHRcdFx0Lyogc2F0aXNmeSBtaW5pbXVtIHNpemUuICovXG4rfTtcbitcbitzdGF0aWMgaW5saW5lIGJvb2wgc3VicG9vbF9pc19mcmVlKHN0cnVjdCBodWdlcGFnZV9zdWJwb29sICpzcG9vbClcbit7XG4rXHRpZiAoc3Bvb2wtXHUwMDNlY291bnQpXG4rXHRcdHJldHVybiBmYWxzZTtcbitcbitcdHJldHVybiBzcG9vbC1cdTAwM2V1c2VkX2hwYWdlcyA9PSAwO1xuK31cbitcbitzdGF0aWMgaW5saW5lIHZvaWQgdW5sb2NrX29yX3JlbGVhc2Vfc3VicG9vbChzdHJ1Y3QgaHVnZXBhZ2Vfc3VicG9vbCAqc3Bvb2wsXG4rXHRcdFx0XHRcdFx0dW5zaWduZWQgbG9uZyBpcnFfZmxhZ3MpXG4re1xuK1x0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZzcG9vbC1cdTAwM2Vsb2NrLCBpcnFfZmxhZ3MpO1xuK1xuK1x0LypcbitcdCAqIElmIG5vIHBhZ2VzIGFyZSB1c2VkLCBhbmQgbm8gb3RoZXIgaGFuZGxlcyB0byB0aGUgc3VicG9vbFxuK1x0ICogcmVtYWluLCBnaXZlIHVwIGFueSByZXNlcnZhdGlvbnMgYmFzZWQgb24gbWluaW11bSBzaXplIGFuZFxuK1x0ICogZnJlZSB0aGUgc3VicG9vbC5cbitcdCAqL1xuK1x0aWYgKHN1YnBvb2xfaXNfZnJlZShzcG9vbCkpIHtcbitcdFx0aWYgKHNwb29sLVx1MDAzZW1pbl9ocGFnZXMgIT0gLTEpXG4rXHRcdFx0aHVnZXRsYl9hY2N0X21lbW9yeShzcG9vbC1cdTAwM2Voc3RhdGUsXG4rXHRcdFx0XHRcdFx0LXNwb29sLVx1MDAzZW1pbl9ocGFnZXMpO1xuK1x0XHRrZnJlZShzcG9vbCk7XG4rXHR9XG4rfVxuK1xuK2xvbmcgaHVnZXBhZ2Vfc3VicG9vbF9mcmVlX2hwYWdlcyhzdHJ1Y3QgaHVnZXBhZ2Vfc3VicG9vbCAqc3Bvb2wpXG4re1xuK1x0bG9uZyBmcmVlX3BhZ2VzO1xuK1xuK1x0c3Bpbl9sb2NrX2lycShcdTAwMjZzcG9vbC1cdTAwM2Vsb2NrKTtcbitcdGlmIChzcG9vbC1cdTAwM2VtYXhfaHBhZ2VzID09IC0xKVxuK1x0XHRmcmVlX3BhZ2VzID0gLTE7XG4rXHRlbHNlXG4rXHRcdGZyZWVfcGFnZXMgPSBzcG9vbC1cdTAwM2VtYXhfaHBhZ2VzIC0gc3Bvb2wtXHUwMDNldXNlZF9ocGFnZXM7XG4rXHRzcGluX3VubG9ja19pcnEoXHUwMDI2c3Bvb2wtXHUwMDNlbG9jayk7XG4rXG4rXHRyZXR1cm4gZnJlZV9wYWdlcztcbit9XG4rXG4rc3RhdGljIHVuc2lnbmVkIGludCBodWdlcGFnZV9zdWJwb29sX2hwYWdlX3NoaWZ0KHN0cnVjdCBodWdlcGFnZV9zdWJwb29sICpzcG9vbClcbit7XG4rXHRyZXR1cm4gaHVnZV9wYWdlX3NoaWZ0KHNwb29sLVx1MDAzZWhzdGF0ZSk7XG4rfVxuK1xuK3Vuc2lnbmVkIGxvbmcgbG9uZyBodWdlcGFnZV9zdWJwb29sX21heF9zaXplKHN0cnVjdCBodWdlcGFnZV9zdWJwb29sICpzcG9vbClcbit7XG4rXHRpZiAoc3Bvb2wtXHUwMDNlbWF4X2hwYWdlcyA9PSAtMSlcbitcdFx0cmV0dXJuIC0xVUxMO1xuK1x0cmV0dXJuICh1bnNpZ25lZCBsb25nIGxvbmcpc3Bvb2wtXHUwMDNlbWF4X2hwYWdlcyBcdTAwM2NcdTAwM2MgaHVnZXBhZ2Vfc3VicG9vbF9ocGFnZV9zaGlmdChzcG9vbCk7XG4rfVxuK1xuK3Vuc2lnbmVkIGxvbmcgbG9uZyBodWdlcGFnZV9zdWJwb29sX21pbl9zaXplKHN0cnVjdCBodWdlcGFnZV9zdWJwb29sICpzcG9vbClcbit7XG4rXHRpZiAoc3Bvb2wtXHUwMDNlbWluX2hwYWdlcyA9PSAtMSlcbitcdFx0cmV0dXJuIC0xVUxMO1xuK1x0cmV0dXJuICh1bnNpZ25lZCBsb25nIGxvbmcpc3Bvb2wtXHUwMDNlbWluX2hwYWdlcyBcdTAwM2NcdTAwM2MgaHVnZXBhZ2Vfc3VicG9vbF9ocGFnZV9zaGlmdChzcG9vbCk7XG4rfVxuK1xuK2xvbmcgaHVnZXBhZ2Vfc3VicG9vbF9tYXhfaHBhZ2VzKHN0cnVjdCBodWdlcGFnZV9zdWJwb29sICpzcG9vbClcbit7XG4rXHRsb25nIG1heF9ocGFnZXM7XG4rXG4rXHRzcGluX2xvY2tfaXJxKFx1MDAyNnNwb29sLVx1MDAzZWxvY2spO1xuK1x0bWF4X2hwYWdlcyA9IHNwb29sLVx1MDAzZW1heF9ocGFnZXM7XG4rXHRzcGluX3VubG9ja19pcnEoXHUwMDI2c3Bvb2wtXHUwMDNlbG9jayk7XG4rXG4rXHRyZXR1cm4gbWF4X2hwYWdlcztcbit9XG4rXG4rc3RydWN0IGh1Z2VwYWdlX3N1YnBvb2wgKmh1Z2VwYWdlX25ld19zdWJwb29sKHN0cnVjdCBoc3RhdGUgKmgsIGxvbmcgbWF4X2hwYWdlcyxcbitcdFx0XHRcdFx0XHRsb25nIG1pbl9ocGFnZXMpXG4re1xuK1x0c3RydWN0IGh1Z2VwYWdlX3N1YnBvb2wgKnNwb29sO1xuK1xuK1x0c3Bvb2wgPSBremFsbG9jX29iaigqc3Bvb2wpO1xuK1x0aWYgKCFzcG9vbClcbitcdFx0cmV0dXJuIE5VTEw7XG4rXG4rXHRzcGluX2xvY2tfaW5pdChcdTAwMjZzcG9vbC1cdTAwM2Vsb2NrKTtcbitcdHNwb29sLVx1MDAzZWNvdW50ID0gMTtcbitcdHNwb29sLVx1MDAzZW1heF9ocGFnZXMgPSBtYXhfaHBhZ2VzO1xuK1x0c3Bvb2wtXHUwMDNlaHN0YXRlID0gaDtcbitcdHNwb29sLVx1MDAzZW1pbl9ocGFnZXMgPSBtaW5faHBhZ2VzO1xuK1xuK1x0aWYgKG1pbl9ocGFnZXMgIT0gLTEgXHUwMDI2XHUwMDI2IGh1Z2V0bGJfYWNjdF9tZW1vcnkoaCwgbWluX2hwYWdlcykpIHtcbitcdFx0a2ZyZWUoc3Bvb2wpO1xuK1x0XHRyZXR1cm4gTlVMTDtcbitcdH1cbitcdHNwb29sLVx1MDAzZXJzdl9ocGFnZXMgPSBtaW5faHBhZ2VzO1xuK1xuK1x0cmV0dXJuIHNwb29sO1xuK31cbitcbit2b2lkIGh1Z2VwYWdlX3B1dF9zdWJwb29sKHN0cnVjdCBodWdlcGFnZV9zdWJwb29sICpzcG9vbClcbit7XG4rXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuK1xuK1x0c3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2c3Bvb2wtXHUwMDNlbG9jaywgZmxhZ3MpO1xuK1x0QlVHX09OKCFzcG9vbC1cdTAwM2Vjb3VudCk7XG4rXHRzcG9vbC1cdTAwM2Vjb3VudC0tO1xuK1x0dW5sb2NrX29yX3JlbGVhc2Vfc3VicG9vbChzcG9vbCwgZmxhZ3MpO1xuK31cbitcbisvKlxuKyAqIFN1YnBvb2wgYWNjb3VudGluZyBmb3IgYWxsb2NhdGluZyBhbmQgcmVzZXJ2aW5nIHBhZ2VzLlxuKyAqIFJldHVybiAtRU5PTUVNIGlmIHRoZXJlIGFyZSBub3QgZW5vdWdoIHJlc291cmNlcyB0byBzYXRpc2Z5IHRoZVxuKyAqIHJlcXVlc3QuICBPdGhlcndpc2UsIHJldHVybiB0aGUgbnVtYmVyIG9mIHBhZ2VzIGJ5IHdoaWNoIHRoZVxuKyAqIGdsb2JhbCBwb29scyBtdXN0IGJlIGFkanVzdGVkICh1cHdhcmQpLiAgVGhlIHJldHVybmVkIHZhbHVlIG1heVxuKyAqIG9ubHkgYmUgZGlmZmVyZW50IHRoYW4gdGhlIHBhc3NlZCB2YWx1ZSAoZGVsdGEpIGluIHRoZSBjYXNlIHdoZXJlXG4rICogYSBzdWJwb29sIG1pbmltdW0gc2l6ZSBtdXN0IGJlIG1haW50YWluZWQuXG4rICovXG4rbG9uZyBodWdlcGFnZV9zdWJwb29sX2dldF9wYWdlcyhzdHJ1Y3QgaHVnZXBhZ2Vfc3VicG9vbCAqc3Bvb2wsXG4rXHRcdFx0XHQgICAgICBsb25nIGRlbHRhKVxuK3tcbitcdGxvbmcgcmV0ID0gZGVsdGE7XG4rXG4rXHRpZiAoIXNwb29sKVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0c3Bpbl9sb2NrX2lycShcdTAwMjZzcG9vbC1cdTAwM2Vsb2NrKTtcbitcbitcdGlmIChzcG9vbC1cdTAwM2VtYXhfaHBhZ2VzICE9IC0xIFx1MDAyNlx1MDAyNlxuK1x0ICAgIHNwb29sLVx1MDAzZXVzZWRfaHBhZ2VzICsgZGVsdGEgXHUwMDNlIHNwb29sLVx1MDAzZW1heF9ocGFnZXMpIHtcbitcdFx0cmV0ID0gLUVOT01FTTtcbitcdFx0Z290byB1bmxvY2tfcmV0O1xuK1x0fVxuK1xuK1x0c3Bvb2wtXHUwMDNldXNlZF9ocGFnZXMgKz0gZGVsdGE7XG4rXG4rXHQvKiBtaW5pbXVtIHNpemUgYWNjb3VudGluZyAqL1xuK1x0aWYgKHNwb29sLVx1MDAzZW1pbl9ocGFnZXMgIT0gLTEgXHUwMDI2XHUwMDI2IHNwb29sLVx1MDAzZXJzdl9ocGFnZXMpIHtcbitcdFx0aWYgKGRlbHRhIFx1MDAzZSBzcG9vbC1cdTAwM2Vyc3ZfaHBhZ2VzKSB7XG4rXHRcdFx0LypcbitcdFx0XHQgKiBBc2tpbmcgZm9yIG1vcmUgcmVzZXJ2ZXMgdGhhbiB0aG9zZSBhbHJlYWR5IHRha2VuIG9uXG4rXHRcdFx0ICogYmVoYWxmIG9mIHN1YnBvb2wuICBSZXR1cm4gZGlmZmVyZW5jZS5cbitcdFx0XHQgKi9cbitcdFx0XHRyZXQgPSBkZWx0YSAtIHNwb29sLVx1MDAzZXJzdl9ocGFnZXM7XG4rXHRcdFx0c3Bvb2wtXHUwMDNlcnN2X2hwYWdlcyA9IDA7XG4rXHRcdH0gZWxzZSB7XG4rXHRcdFx0cmV0ID0gMDtcdC8qIHJlc2VydmVzIGFscmVhZHkgYWNjb3VudGVkIGZvciAqL1xuK1x0XHRcdHNwb29sLVx1MDAzZXJzdl9ocGFnZXMgLT0gZGVsdGE7XG4rXHRcdH1cbitcdH1cbitcbit1bmxvY2tfcmV0OlxuK1x0c3Bpbl91bmxvY2tfaXJxKFx1MDAyNnNwb29sLVx1MDAzZWxvY2spO1xuK1x0cmV0dXJuIHJldDtcbit9XG4rXG4rLypcbisgKiBTdWJwb29sIGFjY291bnRpbmcgZm9yIGZyZWVpbmcgYW5kIHVucmVzZXJ2aW5nIHBhZ2VzLlxuKyAqIFJldHVybiB0aGUgbnVtYmVyIG9mIGdsb2JhbCBwYWdlIHJlc2VydmF0aW9ucyB0aGF0IG11c3QgYmUgZHJvcHBlZC5cbisgKiBUaGUgcmV0dXJuIHZhbHVlIG1heSBvbmx5IGJlIGRpZmZlcmVudCB0aGFuIHRoZSBwYXNzZWQgdmFsdWUgKGRlbHRhKVxuKyAqIGluIHRoZSBjYXNlIHdoZXJlIGEgc3VicG9vbCBtaW5pbXVtIHNpemUgbXVzdCBiZSBtYWludGFpbmVkLlxuKyAqL1xuK2xvbmcgaHVnZXBhZ2Vfc3VicG9vbF9wdXRfcGFnZXMoc3RydWN0IGh1Z2VwYWdlX3N1YnBvb2wgKnNwb29sLFxuK1x0XHRcdFx0ICAgICAgIGxvbmcgZGVsdGEpXG4re1xuK1x0bG9uZyByZXQgPSBkZWx0YTtcbitcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4rXG4rXHRpZiAoIXNwb29sKVxuK1x0XHRyZXR1cm4gZGVsdGE7XG4rXG4rXHRzcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZzcG9vbC1cdTAwM2Vsb2NrLCBmbGFncyk7XG4rXG4rXHRzcG9vbC1cdTAwM2V1c2VkX2hwYWdlcyAtPSBkZWx0YTtcbitcbitcdCAvKiBtaW5pbXVtIHNpemUgYWNjb3VudGluZyAqL1xuK1x0aWYgKHNwb29sLVx1MDAzZW1pbl9ocGFnZXMgIT0gLTEgXHUwMDI2XHUwMDI2IHNwb29sLVx1MDAzZXVzZWRfaHBhZ2VzIFx1MDAzYyBzcG9vbC1cdTAwM2VtaW5faHBhZ2VzKSB7XG4rXHRcdC8qXG4rXHRcdCAqIGxpbWl0IGlzIHRoZSBtYXhpbXVtIG51bWJlciBvZiByZXNlcnZhdGlvbnMgdGhhdFxuK1x0XHQgKiBjYW4gYmUgcmVzdG9yZWQgdG8gdGhpcyBzdWJwb29sLlxuK1x0XHQgKi9cbitcdFx0bG9uZyBsaW1pdCA9IHNwb29sLVx1MDAzZW1pbl9ocGFnZXMgLSBzcG9vbC1cdTAwM2V1c2VkX2hwYWdlcztcbitcbitcdFx0aWYgKHNwb29sLVx1MDAzZXJzdl9ocGFnZXMgKyBkZWx0YSBcdTAwM2M9IGxpbWl0KVxuK1x0XHRcdHJldCA9IDA7XG4rXHRcdGVsc2VcbitcdFx0XHRyZXQgPSBzcG9vbC1cdTAwM2Vyc3ZfaHBhZ2VzICsgZGVsdGEgLSBsaW1pdDtcbitcbitcdFx0c3Bvb2wtXHUwMDNlcnN2X2hwYWdlcyArPSBkZWx0YTtcbitcdFx0aWYgKHNwb29sLVx1MDAzZXJzdl9ocGFnZXMgXHUwMDNlIGxpbWl0KVxuK1x0XHRcdHNwb29sLVx1MDAzZXJzdl9ocGFnZXMgPSBsaW1pdDtcbitcdH1cbitcbitcdC8qXG4rXHQgKiBJZiBodWdldGxiZnNfcHV0X3N1cGVyIGNvdWxkbid0IGZyZWUgc3Bvb2wgZHVlIHRvIGFuIG91dHN0YW5kaW5nXG4rXHQgKiBxdW90YSByZWZlcmVuY2UsIGZyZWUgaXQgbm93LlxuK1x0ICovXG4rXHR1bmxvY2tfb3JfcmVsZWFzZV9zdWJwb29sKHNwb29sLCBmbGFncyk7XG4rXG4rXHRyZXR1cm4gcmV0O1xuK31cbmRpZmYgLS1naXQgYS9tbS9odWdldGxiX3N1YnBvb2wuaCBiL21tL2h1Z2V0bGJfc3VicG9vbC5oXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLjQxZDIyMjM5ZjJjM2VkXG4tLS0gL2Rldi9udWxsXG4rKysgYi9tbS9odWdldGxiX3N1YnBvb2wuaFxuQEAgLTAsMCArMSwyMSBAQFxuKy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wICovXG4rI2lmbmRlZiBfTU1fSFVHRVRMQl9TVUJQT09MX0hcbisjZGVmaW5lIF9NTV9IVUdFVExCX1NVQlBPT0xfSFxuK1xuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3NwaW5sb2NrLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC90eXBlcy5oXHUwMDNlXG4rXG4rc3RydWN0IGhzdGF0ZTtcbitzdHJ1Y3QgaHVnZXBhZ2Vfc3VicG9vbDtcbitcbitzdHJ1Y3QgaHVnZXBhZ2Vfc3VicG9vbCAqaHVnZXBhZ2VfbmV3X3N1YnBvb2woc3RydWN0IGhzdGF0ZSAqaCwgbG9uZyBtYXhfaHBhZ2VzLFxuK1x0XHRcdFx0XHRcdGxvbmcgbWluX2hwYWdlcyk7XG4rdm9pZCBodWdlcGFnZV9wdXRfc3VicG9vbChzdHJ1Y3QgaHVnZXBhZ2Vfc3VicG9vbCAqc3Bvb2wpO1xuK2xvbmcgaHVnZXBhZ2Vfc3VicG9vbF9nZXRfcGFnZXMoc3RydWN0IGh1Z2VwYWdlX3N1YnBvb2wgKnNwb29sLCBsb25nIGRlbHRhKTtcbitsb25nIGh1Z2VwYWdlX3N1YnBvb2xfcHV0X3BhZ2VzKHN0cnVjdCBodWdlcGFnZV9zdWJwb29sICpzcG9vbCwgbG9uZyBkZWx0YSk7XG4rbG9uZyBodWdlcGFnZV9zdWJwb29sX2ZyZWVfaHBhZ2VzKHN0cnVjdCBodWdlcGFnZV9zdWJwb29sICpzcG9vbCk7XG4rbG9uZyBodWdlcGFnZV9zdWJwb29sX21heF9ocGFnZXMoc3RydWN0IGh1Z2VwYWdlX3N1YnBvb2wgKnNwb29sKTtcbit1bnNpZ25lZCBsb25nIGxvbmcgaHVnZXBhZ2Vfc3VicG9vbF9tYXhfc2l6ZShzdHJ1Y3QgaHVnZXBhZ2Vfc3VicG9vbCAqc3Bvb2wpO1xuK3Vuc2lnbmVkIGxvbmcgbG9uZyBodWdlcGFnZV9zdWJwb29sX21pbl9zaXplKHN0cnVjdCBodWdlcGFnZV9zdWJwb29sICpzcG9vbCk7XG4rXG4rI2VuZGlmIC8qIF9NTV9IVUdFVExCX1NVQlBPT0xfSCAqL1xuZGlmZiAtLWdpdCBhL21tL21lbWNvbnRyb2wuYyBiL21tL21lbWNvbnRyb2wuY1xuaW5kZXggNmRjNDg4OGE5MGYzZmQuLjY3NjRmZjA0MWMxOTY1IDEwMDY0NFxuLS0tIGEvbW0vbWVtY29udHJvbC5jXG4rKysgYi9tbS9tZW1jb250cm9sLmNcbkBAIC01MTQ3LDM5ICs1MTQ3LDExOSBAQCBpbnQgX19tZW1fY2dyb3VwX2NoYXJnZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSwgZ2ZwX3QgZ2ZwKVxuIH1cbiBcbiAvKipcbi0gKiBtZW1fY2dyb3VwX2NoYXJnZV9odWdldGxiIC0gY2hhcmdlIHRoZSBtZW1jZyBmb3IgYSBodWdldGxiIGZvbGlvXG4tICogQGZvbGlvOiBmb2xpbyBiZWluZyBjaGFyZ2VkXG4rICogbWVtX2Nncm91cF9odWdldGxiX3RyeV9jaGFyZ2UgLSBUcnkgdG8gY2hhcmdlIHRoZSBtZW1jZyBmb3IgYSBodWdldGxiIGZvbGlvXG4rICogQG5yX3BhZ2VzOiBudW1iZXIgb2YgYmFzZSBwYWdlcyB0byBjaGFyZ2VcbiAgKiBAZ2ZwOiByZWNsYWltIG1vZGVcbisgKiBAbWVtY2dfcDogT3V0cHV0IHBvaW50ZXIgdG8gdGhlIGNoYXJnZWQgbWVtX2Nncm91cCAoaWYgc3VjY2Vzc2Z1bCBhbmQgZW5hYmxlZClcbisgKiBAb2JqY2dfcDogT3V0cHV0IHBvaW50ZXIgdG8gdGhlIGNoYXJnZWQgb2JqX2Nncm91cCAoaWYgc3VjY2Vzc2Z1bCBhbmQgZW5hYmxlZClcbiAgKlxuLSAqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHdoZW4gYWxsb2NhdGluZyBhIGh1Z2UgcGFnZSBmb2xpbywgYWZ0ZXIgdGhlIHBhZ2UgaGFzXG4tICogYWxyZWFkeSBiZWVuIG9idGFpbmVkIGFuZCBjaGFyZ2VkIHRvIHRoZSBhcHByb3ByaWF0ZSBodWdldGxiIGNncm91cFxuLSAqIGNvbnRyb2xsZXIgKGlmIGl0IGlzIGVuYWJsZWQpLlxuKyAqIFByZXBhcmVzIGFuZCB0cmllcyB0byByZXNlcnZlIHRoZSBtZW1vcnkgY291bnRlciBmb3IgdGhlIGZvbGlvIGZyb20gdGhlIGN1cnJlbnRcbisgKiB0YXNrJ3MgbWVtY2cuIElmIHN1Y2Nlc3NmdWwsIGJvdGggKm1lbWNnX3AgYW5kICpvYmpjZ19wIGFyZSBwb3B1bGF0ZWQgYW5kIHRoZWlyXG4rICogcmVmZXJlbmNlcyBhcmUgcGlubmVkIHVudGlsIGEgc3Vic2VxdWVudCBjYWxsIHRvIG1lbV9jZ3JvdXBfaHVnZXRsYl9jb21taXRfY2hhcmdlXG4rICogb3IgbWVtX2Nncm91cF9odWdldGxiX2NhbmNlbF9jaGFyZ2UuXG4gICpcbiAgKiBSZXR1cm5zIEVOT01FTSBpZiB0aGUgbWVtY2cgaXMgYWxyZWFkeSBmdWxsLlxuLSAqIFJldHVybnMgMCBpZiBlaXRoZXIgdGhlIGNoYXJnZSB3YXMgc3VjY2Vzc2Z1bCwgb3IgaWYgd2Ugc2tpcCB0aGUgY2hhcmdpbmcuXG4rICogUmV0dXJucyAwIGlmIGVpdGhlciB0aGUgY2hhcmdlIHdhcyBzdWNjZXNzZnVsLCBvciBpZiB3ZSBza2lwIGNoYXJnaW5nLlxuICAqL1xuLWludCBtZW1fY2dyb3VwX2NoYXJnZV9odWdldGxiKHN0cnVjdCBmb2xpbyAqZm9saW8sIGdmcF90IGdmcClcbitpbnQgbWVtX2Nncm91cF9odWdldGxiX3RyeV9jaGFyZ2UodW5zaWduZWQgaW50IG5yX3BhZ2VzLCBnZnBfdCBnZnAsXG4rXHRcdFx0XHQgIHN0cnVjdCBtZW1fY2dyb3VwICoqbWVtY2dfcCxcbitcdFx0XHRcdCAgc3RydWN0IG9ial9jZ3JvdXAgKipvYmpjZ19wKVxuIHtcbi1cdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyA9IGdldF9tZW1fY2dyb3VwX2Zyb21fY3VycmVudCgpO1xuK1x0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnO1xuK1x0c3RydWN0IG9ial9jZ3JvdXAgKm9iamNnO1xuIFx0aW50IHJldCA9IDA7XG4gXG4tXHQvKlxuLVx0ICogRXZlbiBtZW1jZyBkb2VzIG5vdCBhY2NvdW50IGZvciBodWdldGxiLCB3ZSBzdGlsbCB3YW50IHRvIHVwZGF0ZVxuLVx0ICogc3lzdGVtLWxldmVsIHN0YXRzIHZpYSBscnV2ZWNfc3RhdF9tb2RfZm9saW8uIFJldHVybiAwLCBhbmQgc2tpcFxuLVx0ICogY2hhcmdpbmcgdGhlIG1lbWNnLlxuLVx0ICovXG4rXHQqbWVtY2dfcCA9IE5VTEw7XG4rXHQqb2JqY2dfcCA9IE5VTEw7XG4rXG4gXHRpZiAobWVtX2Nncm91cF9kaXNhYmxlZCgpIHx8ICFtZW1jZ19hY2NvdW50c19odWdldGxiKCkgfHxcbi1cdFx0IW1lbWNnIHx8ICFjZ3JvdXBfc3Vic3lzX29uX2RmbChtZW1vcnlfY2dycF9zdWJzeXMpKVxuLVx0XHRnb3RvIG91dDtcbitcdCAgICAhY2dyb3VwX3N1YnN5c19vbl9kZmwobWVtb3J5X2NncnBfc3Vic3lzKSlcbitcdFx0cmV0dXJuIDA7XG4gXG4tXHRpZiAoY2hhcmdlX21lbWNnKGZvbGlvLCBtZW1jZywgZ2ZwKSlcbi1cdFx0cmV0ID0gLUVOT01FTTtcbitcdG1lbWNnID0gZ2V0X21lbV9jZ3JvdXBfZnJvbV9jdXJyZW50KCk7XG4rXHRpZiAoIW1lbWNnKVxuK1x0XHRyZXR1cm4gMDtcbiBcbi1vdXQ6XG4rXHRvYmpjZyA9IGdldF9vYmpfY2dyb3VwX2Zyb21fbWVtY2cobWVtY2cpO1xuK1x0aWYgKCFvYmpjZylcbitcdFx0Z290byBwdXRfbWVtY2c7XG4rXG4rXHRpZiAoIW9ial9jZ3JvdXBfaXNfcm9vdChvYmpjZykpIHtcbitcdFx0cmV0ID0gdHJ5X2NoYXJnZV9tZW1jZyhtZW1jZywgZ2ZwLCBucl9wYWdlcyk7XG4rXHRcdGlmIChyZXQpXG4rXHRcdFx0Z290byBwdXRfb2JqY2c7XG4rXHR9XG4rXG4rXHQqbWVtY2dfcCA9IG1lbWNnO1xuK1x0Km9iamNnX3AgPSBvYmpjZztcbitcdHJldHVybiAwO1xuK1xuK3B1dF9vYmpjZzpcbitcdG9ial9jZ3JvdXBfcHV0KG9iamNnKTtcbitwdXRfbWVtY2c6XG4gXHRtZW1fY2dyb3VwX3B1dChtZW1jZyk7XG4gXHRyZXR1cm4gcmV0O1xuIH1cbiBcbisvKipcbisgKiBtZW1fY2dyb3VwX2h1Z2V0bGJfY29tbWl0X2NoYXJnZSAtIENvbW1pdCB0aGUgbWVtY2cgY2hhcmdlIGZvciBhIGh1Z2V0bGIgZm9saW9cbisgKiBAZm9saW86IGZvbGlvIGJlaW5nIGNoYXJnZWRcbisgKiBAbWVtY2c6IFRhcmdldCBtZW1fY2dyb3VwIG9idGFpbmVkIGZyb20gbWVtX2Nncm91cF9odWdldGxiX3RyeV9jaGFyZ2VcbisgKiBAb2JqY2c6IFRhcmdldCBvYmpfY2dyb3VwIG9idGFpbmVkIGZyb20gbWVtX2Nncm91cF9odWdldGxiX3RyeV9jaGFyZ2VcbisgKlxuKyAqIEZpbmFsaXplcyB0aGUgbWVtb3J5IGFuZCBzdGF0aXN0aWNzIGNoYXJnaW5nIGZvciB0aGUgZm9saW8gaW4gdGhlIHNwZWNpZmllZCBtZW1jZy5cbisgKiBUcmFuc2ZlcnMgdGhlIHBpbm5lZCBvYmpjZyByZWZlcmVuY2UgdG8gdGhlIGZvbGlvIHN0cnVjdHVyZSAoZm9yIGF1dG9tYXRpY1xuKyAqIHVuY2hhcmdpbmcgdXBvbiBmcmVlaW5nIHZpYSBtZW1fY2dyb3VwX3VuY2hhcmdlKS4gUmVsZWFzZXMgdGhlIHRyeS1jb21taXQgcmVmZXJlbmNlXG4rICogb24gbWVtY2cuXG4rICovXG4rdm9pZCBtZW1fY2dyb3VwX2h1Z2V0bGJfY29tbWl0X2NoYXJnZShzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuK1x0XHRcdFx0ICAgICAgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxuK1x0XHRcdFx0ICAgICAgc3RydWN0IG9ial9jZ3JvdXAgKm9iamNnKVxuK3tcbitcdGlmICghbWVtY2cgfHwgIW9iamNnKVxuK1x0XHRyZXR1cm47XG4rXG4rXHRjb21taXRfY2hhcmdlKGZvbGlvLCBvYmpjZyk7XG4rXHRtZW1jZzFfY29tbWl0X2NoYXJnZShmb2xpbywgbWVtY2cpO1xuK1xuK1x0LypcbitcdCAqIERyb3Agb3VyIHRyeS1jb21taXQtY2FuY2VsIHByb3RvY29sIHJlZmVyZW5jZSBvbiBtZW1jZy5cbitcdCAqIFRoZSBvYmpjZyByZWZlcmVuY2UgaXMgVFJBTlNGRVJSRUQgdG8gdGhlIGZvbGlvIGJ5IGNvbW1pdF9jaGFyZ2UsXG4rXHQgKiBzbyBpdCB3aWxsIGJlIHB1dCBhdXRvbWF0aWNhbGx5IGJ5IF9fbWVtX2Nncm91cF91bmNoYXJnZSgpIHdoZW5cbitcdCAqIHRoZSBmb2xpbyBpcyBmcmVlZC5cbitcdCAqL1xuK1x0bWVtX2Nncm91cF9wdXQobWVtY2cpO1xuK31cbitcbisvKipcbisgKiBtZW1fY2dyb3VwX2h1Z2V0bGJfY2FuY2VsX2NoYXJnZSAtIENhbmNlbCBhbmQgdW5kbyBhIGh1Z2V0bGIgZm9saW8gbWVtY2cgY2hhcmdlXG4rICogQG5yX3BhZ2VzOiBudW1iZXIgb2YgYmFzZSBwYWdlcyB0byB1bmNoYXJnZVxuKyAqIEBtZW1jZzogVGFyZ2V0IG1lbV9jZ3JvdXAgb2J0YWluZWQgZnJvbSBtZW1fY2dyb3VwX2h1Z2V0bGJfdHJ5X2NoYXJnZVxuKyAqIEBvYmpjZzogVGFyZ2V0IG9ial9jZ3JvdXAgb2J0YWluZWQgZnJvbSBtZW1fY2dyb3VwX2h1Z2V0bGJfdHJ5X2NoYXJnZVxuKyAqXG4rICogQ2FuY2VscyBhbmQgc2FmZWx5IHJvbGxzIGJhY2sgdGhlIHByZXBhcmVkIG1lbW9yeSBjaGFyZ2UgZm9yIHRoZSBmb2xpbyBpbiB0aGVcbisgKiBzcGVjaWZpZWQgbWVtY2cuIFJlbGVhc2VzIHRoZSB0cnktY29tbWl0IHBpbm5lZCByZWZlcmVuY2VzIG9uIGJvdGggbWVtY2cgYW5kIG9iamNnLlxuKyAqL1xuK3ZvaWQgbWVtX2Nncm91cF9odWdldGxiX2NhbmNlbF9jaGFyZ2UodW5zaWduZWQgaW50IG5yX3BhZ2VzLFxuK1x0XHRcdFx0ICAgICAgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxuK1x0XHRcdFx0ICAgICAgc3RydWN0IG9ial9jZ3JvdXAgKm9iamNnKVxuK3tcbitcdGlmICghbWVtY2cgfHwgIW9iamNnKVxuK1x0XHRyZXR1cm47XG4rXG4rXHRpZiAoIW9ial9jZ3JvdXBfaXNfcm9vdChvYmpjZykpXG4rXHRcdHJlZmlsbF9zdG9jayhtZW1jZywgbnJfcGFnZXMpO1xuK1xuK1x0LypcbitcdCAqIERyb3Agb3VyIHRyeS1jb21taXQtY2FuY2VsIHByb3RvY29sIHJlZmVyZW5jZXMgb24gYm90aCBvYmpjZ1xuK1x0ICogYW5kIG1lbWNnLCBzaW5jZSB0aGlzIG1hcHBpbmcgYXR0ZW1wdCB3YXMgYWJvcnRlZCBhbmQgdGhlIGZvbGlvXG4rXHQgKiB3YXMgbmV2ZXIgY29tbWl0dGVkLlxuK1x0ICovXG4rXHRvYmpfY2dyb3VwX3B1dChvYmpjZyk7XG4rXHRtZW1fY2dyb3VwX3B1dChtZW1jZyk7XG4rfVxuK1xuK1xuIC8qKlxuICAqIG1lbV9jZ3JvdXBfc3dhcGluX2NoYXJnZV9mb2xpbyAtIENoYXJnZSBhIG5ld2x5IGFsbG9jYXRlZCBmb2xpbyBmb3Igc3dhcGluLlxuICAqIEBmb2xpbzogdGhlIGZvbGlvIHRvIGNoYXJnZVxuZGlmZiAtLWdpdCBhL3N1YnBvb2xfbGVha19tYXhfc2l6ZS5zaCBiL3N1YnBvb2xfbGVha19tYXhfc2l6ZS5zaFxubmV3IGZpbGUgbW9kZSAxMDA3NTVcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi5iZmFmYTFiYTA3NGVhY1xuLS0tIC9kZXYvbnVsbFxuKysrIGIvc3VicG9vbF9sZWFrX21heF9zaXplLnNoXG5AQCAtMCwwICsxLDcxIEBAXG4rIyEvYmluL2Jhc2hcbitcbitpZiBbIFwiJEVVSURcIiAtbmUgMCBdOyB0aGVuXG4rICAgIGVjaG8gXCJQbGVhc2UgcnVuIGFzIHJvb3RcIlxuKyAgICBleGl0IDFcbitmaVxuK1xuK01OVF9QQVRIPVwiL3RtcC9tbnRfaHVnZXRsYlwiXG4rRklMRV9QQVRIPVwiJE1OVF9QQVRIL3Rlc3RfZmlsZVwiXG4rXG4rIyBTYXZlIG9yaWdpbmFsIHZhbHVlc1xuK29yaWdfbnI9JChjYXQgL3N5cy9rZXJuZWwvbW0vaHVnZXBhZ2VzL2h1Z2VwYWdlcy0yMDQ4a0IvbnJfaHVnZXBhZ2VzKVxuK29yaWdfb3ZlcmNvbW1pdD0kKGNhdCAvc3lzL2tlcm5lbC9tbS9odWdlcGFnZXMvaHVnZXBhZ2VzLTIwNDhrQi9ucl9vdmVyY29tbWl0X2h1Z2VwYWdlcylcbitcbitjbGVhbnVwKCkge1xuKyAgICBlY2hvIFwiQ2xlYW5pbmcgdXAuLi5cIlxuKyAgICBybSAtZiBcIiRGSUxFX1BBVEhcIlxuKyAgICB1bW91bnQgXCIkTU5UX1BBVEhcIiAyXHUwMDNlL2Rldi9udWxsXG4rICAgIHJtZGlyIFwiJE1OVF9QQVRIXCIgMlx1MDAzZS9kZXYvbnVsbFxuKyAgICBlY2hvIFwiJG9yaWdfbnJcIiBcdTAwM2UgL3N5cy9rZXJuZWwvbW0vaHVnZXBhZ2VzL2h1Z2VwYWdlcy0yMDQ4a0IvbnJfaHVnZXBhZ2VzXG4rICAgIGVjaG8gXCIkb3JpZ19vdmVyY29tbWl0XCIgXHUwMDNlIC9zeXMva2VybmVsL21tL2h1Z2VwYWdlcy9odWdlcGFnZXMtMjA0OGtCL25yX292ZXJjb21taXRfaHVnZXBhZ2VzXG4rICAgIGVjaG8gXCJDbGVhbnVwIGRvbmUuXCJcbit9XG4rdHJhcCBjbGVhbnVwIEVYSVRcbitcbisjIDEuIE1vdW50IGh1Z2V0bGJmcyB3aXRoIHNpemU9Mk0gKDEgcGFnZSlcbitta2RpciAtcCBcIiRNTlRfUEFUSFwiXG4raWYgISBtb3VudCAtdCBodWdldGxiZnMgLW8gc2l6ZT0yTSBub25lIFwiJE1OVF9QQVRIXCI7IHRoZW5cbisgICAgZWNobyBcIkZhaWxlZCB0byBtb3VudCBodWdldGxiZnNcIlxuKyAgICBleGl0IDFcbitmaVxuK1xuKyMgMi4gU2V0IG5yX2h1Z2VwYWdlcyB0byAwLCBvdmVyY29tbWl0IHRvIDBcbitlY2hvIDAgXHUwMDNlIC9zeXMva2VybmVsL21tL2h1Z2VwYWdlcy9odWdlcGFnZXMtMjA0OGtCL25yX2h1Z2VwYWdlc1xuK2VjaG8gMCBcdTAwM2UgL3N5cy9rZXJuZWwvbW0vaHVnZXBhZ2VzL2h1Z2VwYWdlcy0yMDQ4a0IvbnJfb3ZlcmNvbW1pdF9odWdlcGFnZXNcbitcbisjIENoZWNrIHN1YnBvb2wgdXNhZ2UgYmVmb3JlIHJ1bm5pbmdcbityZWFkIHRvdGFsIGZyZWUgXHUwMDNjIFx1MDAzYyhzdGF0IC1mIC1jIFwiJWIgJWZcIiBcIiRNTlRfUEFUSFwiKVxuK3VzZWRfYmVmb3JlPSQoKHRvdGFsIC0gZnJlZSkpXG4rZWNobyBcIkJlZm9yZSB0ZXN0IC0gU3VicG9vbCB0b3RhbCBibG9ja3M6ICR0b3RhbFwiXG4rZWNobyBcIkJlZm9yZSB0ZXN0IC0gU3VicG9vbCBmcmVlIGJsb2NrczogICRmcmVlXCJcbitlY2hvIFwiQmVmb3JlIHRlc3QgLSBTdWJwb29sIHVzZWQgYmxvY2tzOiAgJHVzZWRfYmVmb3JlXCJcbitpZiBbIFwiJHVzZWRfYmVmb3JlXCIgLW5lIDAgXTsgdGhlblxuKyAgICBlY2hvIFwiRVJST1I6IFN1YnBvb2wgaXMgbm90IGNsZWFuIGJlZm9yZSB0ZXN0IHN0YXJ0cyFcIlxuKyAgICBleGl0IDFcbitmaVxuK1xuKyMgUnVuIGZhbGxvY2F0ZSAoZXhwZWN0aW5nIGZhaWx1cmUpXG4rZWNobyBcIlJ1bm5pbmcgZmFsbG9jYXRlIChleHBlY3RpbmcgZmFpbHVyZSkuLi5cIlxuK2lmIGZhbGxvY2F0ZSAtbCAyTSBcIiRGSUxFX1BBVEhcIiAyXHUwMDNlL2Rldi9udWxsOyB0aGVuXG4rICAgIGVjaG8gXCJFUlJPUjogZmFsbG9jYXRlIHN1Y2NlZWRlZCBidXQgc2hvdWxkIGhhdmUgZmFpbGVkIChucl9odWdlcGFnZXMgaXMgMClcIlxuKyAgICBleGl0IDFcbitmaVxuK1xuKyMgQ2hlY2sgc3VicG9vbCB1c2FnZSB2aWEgc3RhdGZzXG4rIyAlYjogVG90YWwgYmxvY2tzXG4rIyAlZjogRnJlZSBibG9ja3NcbityZWFkIHRvdGFsIGZyZWUgXHUwMDNjIFx1MDAzYyhzdGF0IC1mIC1jIFwiJWIgJWZcIiBcIiRNTlRfUEFUSFwiKVxuK3VzZWQ9JCgodG90YWwgLSBmcmVlKSlcbitcbitlY2hvIFwiU3VicG9vbCB0b3RhbCBibG9ja3M6ICR0b3RhbFwiXG4rZWNobyBcIlN1YnBvb2wgZnJlZSBibG9ja3M6ICAkZnJlZVwiXG4rZWNobyBcIlN1YnBvb2wgdXNlZCBibG9ja3MgKGxlYWtlZCBpZiBcdTAwM2UgMCk6ICR1c2VkXCJcbitcbitpZiBbIFwiJHVzZWRcIiAtZ3QgMCBdOyB0aGVuXG4rICAgIGVjaG8gXCJSRVNVTFQ6IExFQUsgREVURUNURUQgKEZBSUwpXCJcbisgICAgZXhpdCAxXG4rZWxzZVxuKyAgICBlY2hvIFwiUkVTVUxUOiBOTyBMRUFLIChQQVNTKVwiXG4rICAgIGV4aXQgMFxuK2ZpXG5kaWZmIC0tZ2l0IGEvc3VicG9vbF9zaGFyZWRfbGVhay5jIGIvc3VicG9vbF9zaGFyZWRfbGVhay5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLjU4MTFlMThkN2Y4YmU3XG4tLS0gL2Rldi9udWxsXG4rKysgYi9zdWJwb29sX3NoYXJlZF9sZWFrLmNcbkBAIC0wLDAgKzEsMjkgQEBcbisjaW5jbHVkZSBcdTAwM2NzdGRpby5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjc3RkbGliLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2N1bmlzdGQuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY3N5cy9tbWFuLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NzeXMvc3RhdC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjZmNudGwuaFx1MDAzZVxuK1xuKyNkZWZpbmUgSFBBR0VfU0laRSAoMiAqIDEwMjQgKiAxMDI0KVxuK1xuK2ludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikge1xuKyAgICBpZiAoYXJnYyBcdTAwM2MgMikge1xuKyAgICAgICAgZnByaW50ZihzdGRlcnIsIFwiVXNhZ2U6ICVzIFx1MDAzY2ZpbGVfcGF0aFx1MDAzZVxcblwiLCBhcmd2WzBdKTtcbisgICAgICAgIHJldHVybiAxO1xuKyAgICB9XG4rICAgIGNvbnN0IGNoYXIgKmZpbGVfcGF0aCA9IGFyZ3ZbMV07XG4rXG4rICAgIGludCBmZCA9IG9wZW4oZmlsZV9wYXRoLCBPX0NSRUFUIHwgT19SRFdSLCAwNjY2KTtcbisgICAgaWYgKGZkIFx1MDAzYyAwKSB7IHBlcnJvcihcIm9wZW5cIik7IHJldHVybiAxOyB9XG4rXG4rICAgIHZvaWQgKmFkZHIgPSBtbWFwKE5VTEwsIDIgKiBIUEFHRV9TSVpFLCBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFLCBNQVBfU0hBUkVELCBmZCwgMCk7XG4rICAgIGlmIChhZGRyID09IE1BUF9GQUlMRUQpIHsgcGVycm9yKFwibW1hcFwiKTsgY2xvc2UoZmQpOyByZXR1cm4gMTsgfVxuK1xuKyAgICAqKHZvbGF0aWxlIGNoYXIgKilhZGRyID0gMTsgLy8gQWxsb2NhdGUgMXN0IHBhZ2Ugb25seS4gMm5kIHBhZ2UgcmVtYWlucyB1bmFsbG9jYXRlZCAoYnV0IHJlc2VydmVkKS5cbitcbisgICAgbXVubWFwKGFkZHIsIDIgKiBIUEFHRV9TSVpFKTtcbisgICAgY2xvc2UoZmQpO1xuK1xuKyAgICByZXR1cm4gMDtcbit9XG5kaWZmIC0tZ2l0IGEvc3VicG9vbF9zaGFyZWRfbGVhay5zaCBiL3N1YnBvb2xfc2hhcmVkX2xlYWsuc2hcbm5ldyBmaWxlIG1vZGUgMTAwNzU1XG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uNDZjNjIyYjE4NTU5YTBcbi0tLSAvZGV2L251bGxcbisrKyBiL3N1YnBvb2xfc2hhcmVkX2xlYWsuc2hcbkBAIC0wLDAgKzEsODYgQEBcbisjIS9iaW4vYmFzaFxuK1xuK2lmIFsgXCIkRVVJRFwiIC1uZSAwIF07IHRoZW5cbisgICAgZWNobyBcIlBsZWFzZSBydW4gYXMgcm9vdFwiXG4rICAgIGV4aXQgMVxuK2ZpXG4rXG4rTU5UX1BBVEg9XCIvdG1wL21udF9odWdldGxiX3NoYXJlZF9sZWFrXCJcbitGSUxFX1BBVEg9XCIkTU5UX1BBVEgvdGVzdF9maWxlXCJcbitcbisjIFNhdmUgb3JpZ2luYWwgdmFsdWVzXG4rb3JpZ19ucj0kKGNhdCAvc3lzL2tlcm5lbC9tbS9odWdlcGFnZXMvaHVnZXBhZ2VzLTIwNDhrQi9ucl9odWdlcGFnZXMpXG4rXG4rY2xlYW51cCgpIHtcbisgICAgZWNobyBcIkNsZWFuaW5nIHVwLi4uXCJcbisgICAgcm0gLWYgXCIkRklMRV9QQVRIXCJcbisgICAgdW1vdW50IFwiJE1OVF9QQVRIXCIgMlx1MDAzZS9kZXYvbnVsbFxuKyAgICBybWRpciBcIiRNTlRfUEFUSFwiIDJcdTAwM2UvZGV2L251bGxcbisgICAgZWNobyBcIiRvcmlnX25yXCIgXHUwMDNlIC9zeXMva2VybmVsL21tL2h1Z2VwYWdlcy9odWdlcGFnZXMtMjA0OGtCL25yX2h1Z2VwYWdlc1xuKyAgICBlY2hvIFwiQ2xlYW51cCBkb25lLlwiXG4rfVxuK3RyYXAgY2xlYW51cCBFWElUXG4rXG4rIyAxLiBTZXQgbnJfaHVnZXBhZ2VzIHRvIDJcbitlY2hvIDIgXHUwMDNlIC9zeXMva2VybmVsL21tL2h1Z2VwYWdlcy9odWdlcGFnZXMtMjA0OGtCL25yX2h1Z2VwYWdlc1xuK1xuKyMgMi4gTW91bnQgaHVnZXRsYmZzIHdpdGggbWluX3NpemU9Mk0gKDEgcGFnZSlcbitta2RpciAtcCBcIiRNTlRfUEFUSFwiXG4raWYgISBtb3VudCAtdCBodWdldGxiZnMgLW8gbWluX3NpemU9Mk0gbm9uZSBcIiRNTlRfUEFUSFwiOyB0aGVuXG4rICAgIGVjaG8gXCJGYWlsZWQgdG8gbW91bnQgaHVnZXRsYmZzXCJcbisgICAgZXhpdCAxXG4rZmlcbitcbisjIENoZWNrIHJlc3ZfaHVnZXBhZ2VzIGFmdGVyIG1vdW50IChzaG91bGQgYmUgMSlcbitpbml0aWFsX3Jlc3Y9JChjYXQgL3N5cy9rZXJuZWwvbW0vaHVnZXBhZ2VzL2h1Z2VwYWdlcy0yMDQ4a0IvcmVzdl9odWdlcGFnZXMpXG4rZWNobyBcIkluaXRpYWwgcmVzdl9odWdlcGFnZXMgKGFmdGVyIG1vdW50KTogJGluaXRpYWxfcmVzdlwiXG4raWYgWyBcIiRpbml0aWFsX3Jlc3ZcIiAtbmUgMSBdOyB0aGVuXG4rICAgIGVjaG8gXCJFUlJPUjogSW5pdGlhbCByZXN2X2h1Z2VwYWdlcyBpcyBub3QgMSFcIlxuKyAgICBleGl0IDFcbitmaVxuK1xuKyMgVmVyaWZ5IHJlcHJvZHVjZXIgYmluYXJ5IGV4aXN0c1xuK2lmIFsgISAteCAuL3N1YnBvb2xfc2hhcmVkX2xlYWsgXTsgdGhlblxuKyAgICBlY2hvIFwicmVwcm9kdWNlciBiaW5hcnkgJy4vc3VicG9vbF9zaGFyZWRfbGVhaycgbm90IGZvdW5kIG9yIG5vdCBleGVjdXRhYmxlLlwiXG4rICAgIGVjaG8gXCJQbGVhc2UgY29tcGlsZSBpdCBmaXJzdDogZ2NjIC1zdGF0aWMgLW8gc3VicG9vbF9zaGFyZWRfbGVhayBzdWJwb29sX3NoYXJlZF9sZWFrLmNcIlxuKyAgICBleGl0IDFcbitmaVxuK1xuKyMgMy4gUnVuIGhlbHBlciB0byBtYXAgNE1CLCBhbGxvY2F0ZSAyTUIsIGFuZCBjbG9zZS5cbisjIFRoaXMgY3JlYXRlcyAyIHJlc2VydmF0aW9ucywgY29uc3VtZXMgMSAoYnkgYWxsb2NhdGluZyBQYWdlIDApLlxuKyMgVGhlIHVuYWxsb2NhdGVkIFBhZ2UgMSByZXNlcnZhdGlvbiByZW1haW5zIGFjdGl2ZSBpbiB0aGUgaW5vZGUncyByZXN2X21hcC5cbitlY2hvIFwiUnVubmluZyBoZWxwZXIuLi5cIlxuKy4vc3VicG9vbF9zaGFyZWRfbGVhayBcIiRGSUxFX1BBVEhcIlxuK1xuK3Jlc3ZfYWZ0ZXJfaGVscGVyPSQoY2F0IC9zeXMva2VybmVsL21tL2h1Z2VwYWdlcy9odWdlcGFnZXMtMjA0OGtCL3Jlc3ZfaHVnZXBhZ2VzKVxuK2VjaG8gXCJyZXN2X2h1Z2VwYWdlcyBhZnRlciBoZWxwZXIgKHNob3VsZCBiZSAxKTogJHJlc3ZfYWZ0ZXJfaGVscGVyXCJcbisjIFBhZ2UgMCBpcyBhbGxvY2F0ZWQgKG5vIGxvbmdlciByZXNlcnZlZCkuIFBhZ2UgMSBpcyByZXNlcnZlZC5cbisjIFNvIHJlc3ZfaHVnZXBhZ2VzIHNob3VsZCBiZSAxLlxuK2lmIFsgXCIkcmVzdl9hZnRlcl9oZWxwZXJcIiAtbmUgMSBdOyB0aGVuXG4rICAgIGVjaG8gXCJFUlJPUjogcmVzdl9odWdlcGFnZXMgaXMgbm90IDEgYWZ0ZXIgaGVscGVyIHJ1biFcIlxuKyAgICBleGl0IDFcbitmaVxuK1xuKyMgNC4gVHJ1bmNhdGUgZmlsZSB0byAyTUIgKHJlbGVhc2VzIFBhZ2UgMSByZXNlcnZhdGlvbilcbitlY2hvIFwiVHJ1bmNhdGluZyBmaWxlIHRvIDJNQiAocmVsZWFzaW5nIDEgcGFnZSByZXNlcnZhdGlvbikuLi5cIlxuK3RydW5jYXRlIC1zIDJNIFwiJEZJTEVfUEFUSFwiXG4rXG4rIyBDaGVjayByZXN2X2h1Z2VwYWdlcyBhZnRlciB0cnVuY2F0ZS5cbisjIFNpbmNlIFBhZ2UgMCBpcyBzdGlsbCBhbGxvY2F0ZWQgKGFuZCBpbiBwYWdlIGNhY2hlKSwgYW5kIHNhdGlzZmllcyB0aGVcbisjIG1pbl9zaXplPTJNIGd1YXJhbnRlZSwgd2Ugc2hvdWxkIGhhdmUgMCByZXNlcnZhdGlvbnMgcmVtYWluaW5nLlxuKyMgSWYgdGhlIGJ1ZyBpcyBwcmVzZW50LCB0aGUgdHJ1bmNhdGUgcGF0aCB3aWxsIGluY29ycmVjdGx5IHJlc3RvcmUgdGhlXG4rIyByZXNlcnZhdGlvbiB0byB0aGUgc3VicG9vbCBhbmQgc2tpcCByZWxlYXNpbmcgaXQgZ2xvYmFsbHksIGxlYXZpbmdcbisjIHJlc3ZfaHVnZXBhZ2VzIGF0IDEuXG4rZmluYWxfcmVzdj0kKGNhdCAvc3lzL2tlcm5lbC9tbS9odWdlcGFnZXMvaHVnZXBhZ2VzLTIwNDhrQi9yZXN2X2h1Z2VwYWdlcylcbitlY2hvIFwiRmluYWwgcmVzdl9odWdlcGFnZXMgKGFmdGVyIDJNQiB0cnVuY2F0ZSk6ICRmaW5hbF9yZXN2XCJcbitcbitpZiBbIFwiJGZpbmFsX3Jlc3ZcIiAtZXEgMSBdOyB0aGVuXG4rICAgIGVjaG8gXCJSRVNVTFQ6IExFQUsgREVURUNURUQgKEZBSUwpXCJcbisgICAgZXhpdCAxXG4rZWxpZiBbIFwiJGZpbmFsX3Jlc3ZcIiAtZXEgMCBdOyB0aGVuXG4rICAgIGVjaG8gXCJSRVNVTFQ6IE5PIExFQUsgKFBBU1MpXCJcbisgICAgZXhpdCAwXG4rZWxzZVxuKyAgICBlY2hvIFwiUkVTVUxUOiBVTkVYUEVDVEVEIFNUQVRFICgkZmluYWxfcmVzdilcIlxuKyAgICBleGl0IDJcbitmaVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3RpbmcvaHVnZXRsYl9zdWJwb29sLy5naXRpZ25vcmUgYi90b29scy90ZXN0aW5nL2h1Z2V0bGJfc3VicG9vbC8uZ2l0aWdub3JlXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLjczNDhjMmM3MmYxZTExXG4tLS0gL2Rldi9udWxsXG4rKysgYi90b29scy90ZXN0aW5nL2h1Z2V0bGJfc3VicG9vbC8uZ2l0aWdub3JlXG5AQCAtMCwwICsxIEBAXG4rdGVzdF9zdWJwb29sXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9odWdldGxiX3N1YnBvb2wvTWFrZWZpbGUgYi90b29scy90ZXN0aW5nL2h1Z2V0bGJfc3VicG9vbC9NYWtlZmlsZVxubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi4xYmRiN2UyNjM1NjE0MVxuLS0tIC9kZXYvbnVsbFxuKysrIGIvdG9vbHMvdGVzdGluZy9odWdldGxiX3N1YnBvb2wvTWFrZWZpbGVcbkBAIC0wLDAgKzEsMTggQEBcbisjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4rLlBIT05ZOiBhbGwgY2xlYW4gdGVzdFxuK1xuK0NDID0gZ2NjXG4rQ0ZMQUdTID0gLVdhbGwgLU8yIC1JLi4vc2hhcmVkIC1JLiAtSS4uLy4uL2luY2x1ZGUgLUkuLi8uLi9hcmNoL3g4Ni9pbmNsdWRlIC1wdGhyZWFkXG4rS0VSTkVMX1NVQlBPT0xfSCA9IC4uLy4uLy4uL21tL2h1Z2V0bGJfc3VicG9vbC5oXG4rS0VSTkVMX1NVQlBPT0xfQyA9IC4uLy4uLy4uL21tL2h1Z2V0bGJfc3VicG9vbC5jXG4rXG4rYWxsOiB0ZXN0XG4rXG4rdGVzdF9zdWJwb29sOiB0ZXN0X3N1YnBvb2wuYyAkKEtFUk5FTF9TVUJQT09MX0MpICQoS0VSTkVMX1NVQlBPT0xfSClcbitcdCQoQ0MpICQoQ0ZMQUdTKSB0ZXN0X3N1YnBvb2wuYyAtbyB0ZXN0X3N1YnBvb2xcbitcbit0ZXN0OiB0ZXN0X3N1YnBvb2xcbitcdC4vdGVzdF9zdWJwb29sXG4rXG4rY2xlYW46XG4rXHRybSAtZiB0ZXN0X3N1YnBvb2xcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL2h1Z2V0bGJfc3VicG9vbC90ZXN0X3N1YnBvb2wuYyBiL3Rvb2xzL3Rlc3RpbmcvaHVnZXRsYl9zdWJwb29sL3Rlc3Rfc3VicG9vbC5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLjc4OTAwMjc0Y2MyNjQ3XG4tLS0gL2Rldi9udWxsXG4rKysgYi90b29scy90ZXN0aW5nL2h1Z2V0bGJfc3VicG9vbC90ZXN0X3N1YnBvb2wuY1xuQEAgLTAsMCArMSw0MDAgQEBcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuKyNpbmNsdWRlIFx1MDAzY2Fzc2VydC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjc3RkbGliLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC90eXBlcy5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvc2xhYi5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvYnVnLmhcdTAwM2VcbitcbisvKiBNb2NrZWQgVXNlcnNwYWNlIGltcGxlbWVudGF0aW9uIGZvciBLZXJuZWwgU3VicG9vbCBhbGxvY2F0aW9uIGRlcGVuZGVuY2llcyAqL1xuK3N0cnVjdCBoc3RhdGUge1xuK1x0aW50IGR1bW15O1xuK307XG4rXG4rI3VuZGVmIGt6YWxsb2Nfb2JqXG4rI3VuZGVmIGt6YWxsb2Nfb2Jqc1xuKyNkZWZpbmUga3phbGxvY19vYmooUCwgLi4uKSBtYWxsb2Moc2l6ZW9mKFApKVxuKyNkZWZpbmUga3phbGxvY19vYmpzKFAsIENPVU5ULCAuLi4pIG1hbGxvYyhzaXplb2YoUCkgKiAoQ09VTlQpKVxuK1xuKyNkZWZpbmUga2ZyZWUgZnJlZVxuKyNkZWZpbmUga21hbGxvYyBtYWxsb2NcbitcbisjZGVmaW5lIGh1Z2VfcGFnZV9zaGlmdChoKSAoMjEgKyAoMCAqICgodW5zaWduZWQgbG9uZykoaCkgXHUwMDI2IDApKSlcbisjZGVmaW5lIGh1Z2VfcGFnZV9zaXplKGgpICgxVUwgXHUwMDNjXHUwMDNjIGh1Z2VfcGFnZV9zaGlmdChoKSlcbitcbitzdGF0aWMgYm9vbCBodWdldGxiX2FjY3RfbWVtb3J5X2NhbGxlZDtcbitzdGF0aWMgc3RydWN0IGhzdGF0ZSAqaHVnZXRsYl9hY2N0X21lbW9yeV9oO1xuK3N0YXRpYyBsb25nIGh1Z2V0bGJfYWNjdF9tZW1vcnlfZGVsdGE7XG4rXG4rc3RhdGljIGludCBodWdldGxiX2FjY3RfbWVtb3J5KHN0cnVjdCBoc3RhdGUgKmgsIGxvbmcgZGVsdGEpXG4re1xuK1x0aHVnZXRsYl9hY2N0X21lbW9yeV9jYWxsZWQgPSB0cnVlO1xuK1x0aHVnZXRsYl9hY2N0X21lbW9yeV9oID0gaDtcbitcdGh1Z2V0bGJfYWNjdF9tZW1vcnlfZGVsdGEgPSBkZWx0YTtcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgdm9pZCByZXNldF9odWdldGxiX2FjY3RfbWVtb3J5X21vY2sodm9pZClcbit7XG4rXHRodWdldGxiX2FjY3RfbWVtb3J5X2NhbGxlZCA9IGZhbHNlO1xuK1x0aHVnZXRsYl9hY2N0X21lbW9yeV9oID0gTlVMTDtcbitcdGh1Z2V0bGJfYWNjdF9tZW1vcnlfZGVsdGEgPSAwO1xuK31cbitcbitzdGF0aWMgdm9pZCBhc3NlcnRfaHVnZXRsYl9hY2N0X21lbW9yeV9jYWxsZWQoc3RydWN0IGhzdGF0ZSAqaCwgbG9uZyBkZWx0YSlcbit7XG4rXHRhc3NlcnQoaHVnZXRsYl9hY2N0X21lbW9yeV9jYWxsZWQpO1xuK1x0YXNzZXJ0KGh1Z2V0bGJfYWNjdF9tZW1vcnlfaCA9PSBoKTtcbitcdGFzc2VydChodWdldGxiX2FjY3RfbWVtb3J5X2RlbHRhID09IGRlbHRhKTtcbitcbitcdHJlc2V0X2h1Z2V0bGJfYWNjdF9tZW1vcnlfbW9jaygpO1xuK31cbitcbitzdGF0aWMgdm9pZCBhc3NlcnRfaHVnZXRsYl9hY2N0X21lbW9yeV9ub3RfY2FsbGVkKHZvaWQpXG4re1xuK1x0YXNzZXJ0KCFodWdldGxiX2FjY3RfbWVtb3J5X2NhbGxlZCk7XG4rfVxuK1xuKyNpbmNsdWRlIFwiLi4vLi4vLi4vbW0vaHVnZXRsYl9zdWJwb29sLmhcIlxuKyNpbmNsdWRlIFwiLi4vLi4vLi4vbW0vaHVnZXRsYl9zdWJwb29sLmNcIlxuK1xuK3N0YXRpYyB2b2lkIHRlc3Rfc3VicG9vbF9uZXdfcHV0X25vX21pbl9saW1pdCh2b2lkKVxuK3tcbitcdHN0cnVjdCBoc3RhdGUgaDtcbitcdHN0cnVjdCBodWdlcGFnZV9zdWJwb29sICpzcG9vbDtcbitcbitcdHNwb29sID0gaHVnZXBhZ2VfbmV3X3N1YnBvb2woXHUwMDI2aCwgMTAsIC0xKTtcbitcdGFzc2VydChzcG9vbCAhPSBOVUxMKTtcbitcdGFzc2VydChzcG9vbC1cdTAwM2VtYXhfaHBhZ2VzID09IDEwKTtcbitcdGFzc2VydChzcG9vbC1cdTAwM2VtaW5faHBhZ2VzID09IC0xKTtcbitcdGFzc2VydChzcG9vbC1cdTAwM2Vyc3ZfaHBhZ2VzID09IC0xKTtcbitcdGFzc2VydChzcG9vbC1cdTAwM2Vjb3VudCA9PSAxKTtcbitcdGFzc2VydF9odWdldGxiX2FjY3RfbWVtb3J5X25vdF9jYWxsZWQoKTtcbitcbitcdGh1Z2VwYWdlX3B1dF9zdWJwb29sKHNwb29sKTtcbitcdGFzc2VydF9odWdldGxiX2FjY3RfbWVtb3J5X25vdF9jYWxsZWQoKTtcbit9XG4rXG4rc3RhdGljIHZvaWQgdGVzdF9zdWJwb29sX25ld19wdXRfd2l0aF9taW5fbGltaXQodm9pZClcbit7XG4rXHRzdHJ1Y3QgaHN0YXRlIGg7XG4rXHRzdHJ1Y3QgaHVnZXBhZ2Vfc3VicG9vbCAqc3Bvb2w7XG4rXG4rXHRzcG9vbCA9IGh1Z2VwYWdlX25ld19zdWJwb29sKFx1MDAyNmgsIDIwLCA1KTtcbitcdGFzc2VydChzcG9vbCAhPSBOVUxMKTtcbitcdGFzc2VydChzcG9vbC1cdTAwM2VtYXhfaHBhZ2VzID09IDIwKTtcbitcdGFzc2VydChzcG9vbC1cdTAwM2VtaW5faHBhZ2VzID09IDUpO1xuK1x0YXNzZXJ0KHNwb29sLVx1MDAzZXJzdl9ocGFnZXMgPT0gNSk7XG4rXHRhc3NlcnQoc3Bvb2wtXHUwMDNlY291bnQgPT0gMSk7XG4rXHRhc3NlcnRfaHVnZXRsYl9hY2N0X21lbW9yeV9jYWxsZWQoXHUwMDI2aCwgNSk7XG4rXG4rXHRodWdlcGFnZV9wdXRfc3VicG9vbChzcG9vbCk7XG4rXHRhc3NlcnRfaHVnZXRsYl9hY2N0X21lbW9yeV9jYWxsZWQoXHUwMDI2aCwgLTUpO1xuK31cbitcbitzdGF0aWMgdm9pZCB0ZXN0X3N1YnBvb2xfZ2V0X3BhZ2VzX2JlbG93X21pbih2b2lkKVxuK3tcbitcdHN0cnVjdCBoc3RhdGUgaDtcbitcdHN0cnVjdCBodWdlcGFnZV9zdWJwb29sICpzcG9vbDtcbitcdGxvbmcgcmV0O1xuK1xuK1x0LyogTGV0J3MgaW5pdGlhbGl6ZTogbWluX2hwYWdlcyA9IDEwLCB1c2VkX2hwYWdlcyA9IDksIHJzdl9ocGFnZXMgPSAxICovXG4rXHRzcG9vbCA9IGh1Z2VwYWdlX25ld19zdWJwb29sKFx1MDAyNmgsIC0xLCAxMCk7XG4rXHRhc3NlcnRfaHVnZXRsYl9hY2N0X21lbW9yeV9jYWxsZWQoXHUwMDI2aCwgMTApO1xuK1xuK1x0cmV0ID0gaHVnZXBhZ2Vfc3VicG9vbF9nZXRfcGFnZXMoc3Bvb2wsIDkpO1xuK1x0YXNzZXJ0KHJldCA9PSAwKTtcbitcdGFzc2VydChzcG9vbC1cdTAwM2V1c2VkX2hwYWdlcyA9PSA5KTtcbitcdGFzc2VydChzcG9vbC1cdTAwM2Vyc3ZfaHBhZ2VzID09IDEpO1xuK1xuK1x0LyogSW52b2tlIEdldCAoQ29uc3VtZXMgdGhlIHJlbWFpbmluZyAxIHN1YnBvb2wgcmVzZXJ2ZSEpICovXG4rXHRyZXQgPSBodWdlcGFnZV9zdWJwb29sX2dldF9wYWdlcyhzcG9vbCwgMSk7XG4rXHRhc3NlcnQocmV0ID09IDApOyAvKiBDb3ZlcmVkIGJ5IHN1YnBvb2wgcmVzZXJ2ZSEgKi9cbitcdGFzc2VydChzcG9vbC1cdTAwM2V1c2VkX2hwYWdlcyA9PSAxMCk7XG4rXHRhc3NlcnQoc3Bvb2wtXHUwMDNlcnN2X2hwYWdlcyA9PSAwKTtcbitcbitcdC8qIEludm9rZSBQdXQgKFJlcGxlbmlzaGVzIHRoZSBzdWJwb29sIHJlc2VydmUhKSAqL1xuK1x0cmV0ID0gaHVnZXBhZ2Vfc3VicG9vbF9wdXRfcGFnZXMoc3Bvb2wsIDEpO1xuK1x0YXNzZXJ0KHJldCA9PSAwKTsgLyogS2VwdCBieSBzdWJwb29sIHJlc2VydmUhICovXG4rXHRhc3NlcnQoc3Bvb2wtXHUwMDNldXNlZF9ocGFnZXMgPT0gOSk7XG4rXHRhc3NlcnQoc3Bvb2wtXHUwMDNlcnN2X2hwYWdlcyA9PSAxKTtcbitcbitcdC8qIENsZWFudXA6IFJldHVybiB1c2VkX2hwYWdlcyB0byAwIHNvIHRoZSBzdWJwb29sIGZyZWVzIHN5bW1ldHJpY2FsbHkhICovXG4rXHRodWdlcGFnZV9zdWJwb29sX3B1dF9wYWdlcyhzcG9vbCwgOSk7XG4rXHRodWdlcGFnZV9wdXRfc3VicG9vbChzcG9vbCk7XG4rXHRhc3NlcnRfaHVnZXRsYl9hY2N0X21lbW9yeV9jYWxsZWQoXHUwMDI2aCwgLTEwKTtcbit9XG4rXG4rc3RhdGljIHZvaWQgdGVzdF9zdWJwb29sX2dldF9wYWdlc19jcm9zc2luZ19taW4odm9pZClcbit7XG4rXHRzdHJ1Y3QgaHN0YXRlIGg7XG4rXHRzdHJ1Y3QgaHVnZXBhZ2Vfc3VicG9vbCAqc3Bvb2w7XG4rXHRsb25nIHJldDtcbitcbitcdC8qIExldCdzIGluaXRpYWxpemU6IG1pbl9ocGFnZXMgPSAxMCwgdXNlZF9ocGFnZXMgPSAxMCwgcnN2X2hwYWdlcyA9IDAgKi9cbitcdHNwb29sID0gaHVnZXBhZ2VfbmV3X3N1YnBvb2woXHUwMDI2aCwgLTEsIDEwKTtcbitcdGFzc2VydF9odWdldGxiX2FjY3RfbWVtb3J5X2NhbGxlZChcdTAwMjZoLCAxMCk7XG4rXG4rXHRodWdlcGFnZV9zdWJwb29sX2dldF9wYWdlcyhzcG9vbCwgMTApO1xuK1x0YXNzZXJ0KHNwb29sLVx1MDAzZXVzZWRfaHBhZ2VzID09IDEwKTtcbitcdGFzc2VydChzcG9vbC1cdTAwM2Vyc3ZfaHBhZ2VzID09IDApO1xuK1xuK1x0LyogSW52b2tlIEdldCAoVHJpZ2dlcnMgYSByZXF1ZXN0IGZvciBhIEdsb2JhbCBCdWRkeS9TdXJwbHVzIHBhZ2UhKSAqL1xuK1x0cmV0ID0gaHVnZXBhZ2Vfc3VicG9vbF9nZXRfcGFnZXMoc3Bvb2wsIDEpO1xuK1x0YXNzZXJ0KHJldCA9PSAxKTsgLyogUmVxdWlyZXMgZ2xvYmFsIHBhZ2UhICovXG4rXHRhc3NlcnQoc3Bvb2wtXHUwMDNldXNlZF9ocGFnZXMgPT0gMTEpO1xuK1x0YXNzZXJ0KHNwb29sLVx1MDAzZXJzdl9ocGFnZXMgPT0gMCk7XG4rXG4rXHQvKiBJbnZva2UgUHV0IChBYm92ZSBtaW5pbXVtLCBzbyBpdCByZWxlYXNlcyB0aGUgcGFnZSB0byB0aGUgR2xvYmFsIFBvb2whKSAqL1xuK1x0cmV0ID0gaHVnZXBhZ2Vfc3VicG9vbF9wdXRfcGFnZXMoc3Bvb2wsIDEpO1xuK1x0YXNzZXJ0KHJldCA9PSAxKTsgLyogRHJvcHBlZCB0byBnbG9iYWwgcG9vbCEgKi9cbitcdGFzc2VydChzcG9vbC1cdTAwM2V1c2VkX2hwYWdlcyA9PSAxMCk7XG4rXHRhc3NlcnQoc3Bvb2wtXHUwMDNlcnN2X2hwYWdlcyA9PSAwKTtcbitcbitcdC8qIENsZWFudXAgKi9cbitcdGh1Z2VwYWdlX3N1YnBvb2xfcHV0X3BhZ2VzKHNwb29sLCAxMCk7XG4rXHRodWdlcGFnZV9wdXRfc3VicG9vbChzcG9vbCk7XG4rXHRhc3NlcnRfaHVnZXRsYl9hY2N0X21lbW9yeV9jYWxsZWQoXHUwMDI2aCwgLTEwKTtcbit9XG4rXG4rc3RhdGljIHZvaWQgdGVzdF9zdWJwb29sX2dldF9wYWdlc19jcm9zc2luZ19taW5fbXVsdGkodm9pZClcbit7XG4rXHRzdHJ1Y3QgaHN0YXRlIGg7XG4rXHRzdHJ1Y3QgaHVnZXBhZ2Vfc3VicG9vbCAqc3Bvb2w7XG4rXHRsb25nIHJldDtcbitcbitcdC8qIFNjZW5hcmlvIDE6IENyb3NzaW5nIGVudGlyZWx5IGludG8gc3VycGx1cyB0ZXJyaXRvcnkgYnkgYSBkZWx0YSBcdTAwM2UgMSAqL1xuK1x0LyogTGV0J3MgaW5pdGlhbGl6ZTogbWluX2hwYWdlcyA9IDEwLCB1c2VkX2hwYWdlcyA9IDgsIHJzdl9ocGFnZXMgPSAyICovXG4rXHRzcG9vbCA9IGh1Z2VwYWdlX25ld19zdWJwb29sKFx1MDAyNmgsIC0xLCAxMCk7XG4rXHRhc3NlcnRfaHVnZXRsYl9hY2N0X21lbW9yeV9jYWxsZWQoXHUwMDI2aCwgMTApO1xuK1xuK1x0cmV0ID0gaHVnZXBhZ2Vfc3VicG9vbF9nZXRfcGFnZXMoc3Bvb2wsIDgpO1xuK1x0YXNzZXJ0KHJldCA9PSAwKTtcbitcdGFzc2VydChzcG9vbC1cdTAwM2V1c2VkX2hwYWdlcyA9PSA4KTtcbitcdGFzc2VydChzcG9vbC1cdTAwM2Vyc3ZfaHBhZ2VzID09IDIpO1xuK1xuK1x0LyogSW52b2tlIEdldCB3aXRoIGRlbHRhID0gNSAoQ3Jvc3NlcyBtaW4gbGltaXQgb2YgMTAgdXAgdG8gMTMpICovXG4rXHRyZXQgPSBodWdlcGFnZV9zdWJwb29sX2dldF9wYWdlcyhzcG9vbCwgNSk7XG4rXHRhc3NlcnQocmV0ID09IDMpOyAvKiAoOCArIDUpIC0gMTAgPSAzIGdsb2JhbCBwYWdlcyByZXF1aXJlZCEgKi9cbitcdGFzc2VydChzcG9vbC1cdTAwM2V1c2VkX2hwYWdlcyA9PSAxMyk7XG4rXHRhc3NlcnQoc3Bvb2wtXHUwMDNlcnN2X2hwYWdlcyA9PSAwKTtcbitcbitcdC8qIEludm9rZSBQdXQgd2l0aCBkZWx0YSA9IDUgKERyb3BzIGZyb20gMTMgZG93biB0byA4KSAqL1xuK1x0cmV0ID0gaHVnZXBhZ2Vfc3VicG9vbF9wdXRfcGFnZXMoc3Bvb2wsIDUpO1xuK1x0YXNzZXJ0KHJldCA9PSAzKTsgLyogMyBzdXJwbHVzIHBhZ2VzIHJlbGVhc2VkIHRvIHRoZSBnbG9iYWwgcG9vbCEgKi9cbitcdGFzc2VydChzcG9vbC1cdTAwM2V1c2VkX2hwYWdlcyA9PSA4KTtcbitcdGFzc2VydChzcG9vbC1cdTAwM2Vyc3ZfaHBhZ2VzID09IDIpOyAvKiAyIHN1YnBvb2wgcmVzZXJ2ZXMgcGVyZmVjdGx5IHJlc3RvcmVkISAqL1xuK1xuK1x0LyogU2NlbmFyaW8gMjogTGFuZGluZyBleGFjdGx5IG9uIHRoZSBtaW5faHBhZ2VzIGJvdW5kYXJ5IHdpdGggZGVsdGEgXHUwMDNlIDEgKi9cbitcdHJldCA9IGh1Z2VwYWdlX3N1YnBvb2xfZ2V0X3BhZ2VzKHNwb29sLCAyKTtcbitcdGFzc2VydChyZXQgPT0gMCk7IC8qIFBlcmZlY3RseSBjb3ZlcmVkIGJ5IHJlbWFpbmluZyAyIHN1YnBvb2wgcmVzZXJ2ZXMhICovXG4rXHRhc3NlcnQoc3Bvb2wtXHUwMDNldXNlZF9ocGFnZXMgPT0gMTApO1xuK1x0YXNzZXJ0KHNwb29sLVx1MDAzZXJzdl9ocGFnZXMgPT0gMCk7XG4rXG4rXHRyZXQgPSBodWdlcGFnZV9zdWJwb29sX3B1dF9wYWdlcyhzcG9vbCwgMik7XG4rXHRhc3NlcnQocmV0ID09IDApOyAvKiBTd2FsbG93ZWQgcGVyZmVjdGx5IHRvIHJlcGxlbmlzaCB0aGUgMiBzdWJwb29sIHJlc2VydmVzISAqL1xuK1x0YXNzZXJ0KHNwb29sLVx1MDAzZXVzZWRfaHBhZ2VzID09IDgpO1xuK1x0YXNzZXJ0KHNwb29sLVx1MDAzZXJzdl9ocGFnZXMgPT0gMik7XG4rXG4rXHQvKiBDbGVhbnVwICovXG4rXHRodWdlcGFnZV9zdWJwb29sX3B1dF9wYWdlcyhzcG9vbCwgOCk7XG4rXHRodWdlcGFnZV9wdXRfc3VicG9vbChzcG9vbCk7XG4rXHRhc3NlcnRfaHVnZXRsYl9hY2N0X21lbW9yeV9jYWxsZWQoXHUwMDI2aCwgLTEwKTtcbit9XG4rXG4rc3RhdGljIHZvaWQgdGVzdF9zdWJwb29sX2dldF9wYWdlc19tYXhfbGltaXQodm9pZClcbit7XG4rXHRzdHJ1Y3QgaHN0YXRlIGg7XG4rXHRzdHJ1Y3QgaHVnZXBhZ2Vfc3VicG9vbCAqc3Bvb2w7XG4rXHRsb25nIHJldDtcbitcbitcdHNwb29sID0gaHVnZXBhZ2VfbmV3X3N1YnBvb2woXHUwMDI2aCwgNSwgLTEpO1xuK1x0YXNzZXJ0X2h1Z2V0bGJfYWNjdF9tZW1vcnlfbm90X2NhbGxlZCgpO1xuK1xuK1x0cmV0ID0gaHVnZXBhZ2Vfc3VicG9vbF9nZXRfcGFnZXMoc3Bvb2wsIDUpO1xuK1x0YXNzZXJ0KHJldCA9PSA1KTtcbitcdGFzc2VydChzcG9vbC1cdTAwM2V1c2VkX2hwYWdlcyA9PSA1KTtcbitcdGFzc2VydChzcG9vbC1cdTAwM2Vyc3ZfaHBhZ2VzID09IC0xKTtcbitcbitcdC8qIEludm9rZSBHZXQgKFNob3VsZCB0cmlnZ2VyIC1FTk9NRU0gZHVlIHRvIG1heCBjYXAgbGltaXQgZXhjZWVkZWQhKSAqL1xuK1x0cmV0ID0gaHVnZXBhZ2Vfc3VicG9vbF9nZXRfcGFnZXMoc3Bvb2wsIDEpO1xuK1x0YXNzZXJ0KHJldCA9PSAtRU5PTUVNKTtcbitcdGFzc2VydChzcG9vbC1cdTAwM2V1c2VkX2hwYWdlcyA9PSA1KTsgLyogVW5jaGFuZ2VkICovXG4rXG4rXHQvKiBDbGVhbnVwICovXG4rXHRodWdlcGFnZV9zdWJwb29sX3B1dF9wYWdlcyhzcG9vbCwgNSk7XG4rXHRodWdlcGFnZV9wdXRfc3VicG9vbChzcG9vbCk7XG4rXHRhc3NlcnRfaHVnZXRsYl9hY2N0X21lbW9yeV9ub3RfY2FsbGVkKCk7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIHRlc3Rfc3VicG9vbF9nZXRfcGFnZXNfbm9fbGltaXRzKHZvaWQpXG4re1xuK1x0c3RydWN0IGhzdGF0ZSBoO1xuK1x0c3RydWN0IGh1Z2VwYWdlX3N1YnBvb2wgKnNwb29sO1xuK1x0bG9uZyByZXQ7XG4rXG4rXHRzcG9vbCA9IGh1Z2VwYWdlX25ld19zdWJwb29sKFx1MDAyNmgsIC0xLCAtMSk7XG4rXHRhc3NlcnRfaHVnZXRsYl9hY2N0X21lbW9yeV9ub3RfY2FsbGVkKCk7XG4rXG4rXHRodWdlcGFnZV9zdWJwb29sX2dldF9wYWdlcyhzcG9vbCwgNSk7XG4rXHRhc3NlcnQoc3Bvb2wtXHUwMDNldXNlZF9ocGFnZXMgPT0gNSk7XG4rXG4rXHQvKiBJbnZva2UgR2V0IChTdXJwbHVzIEdsb2JhbCBUZXJyaXRvcnkpICovXG4rXHRyZXQgPSBodWdlcGFnZV9zdWJwb29sX2dldF9wYWdlcyhzcG9vbCwgMik7XG4rXHRhc3NlcnQocmV0ID09IDIpO1xuK1x0YXNzZXJ0KHNwb29sLVx1MDAzZXVzZWRfaHBhZ2VzID09IDcpO1xuK1xuK1x0LyogSW52b2tlIFB1dCAqL1xuK1x0cmV0ID0gaHVnZXBhZ2Vfc3VicG9vbF9wdXRfcGFnZXMoc3Bvb2wsIDIpO1xuK1x0YXNzZXJ0KHJldCA9PSAyKTtcbitcdGFzc2VydChzcG9vbC1cdTAwM2V1c2VkX2hwYWdlcyA9PSA1KTtcbitcbitcdC8qIENsZWFudXAgKi9cbitcdGh1Z2VwYWdlX3N1YnBvb2xfcHV0X3BhZ2VzKHNwb29sLCA1KTtcbitcdGh1Z2VwYWdlX3B1dF9zdWJwb29sKHNwb29sKTtcbitcdGFzc2VydF9odWdldGxiX2FjY3RfbWVtb3J5X25vdF9jYWxsZWQoKTtcbit9XG4rXG4rc3RhdGljIHZvaWQgdGVzdF9zdWJwb29sX2ZyZWVfaHBhZ2VzKHZvaWQpXG4re1xuK1x0c3RydWN0IGhzdGF0ZSBoO1xuK1x0c3RydWN0IGh1Z2VwYWdlX3N1YnBvb2wgKnNwb29sO1xuK1xuK1x0LyogVGVzdCB0aGF0IGZyZWVfaHBhZ2VzIHdpdGggTk8gbWluX3NpemUgd29ya3MgcGVyZmVjdGx5ICovXG4rXHRzcG9vbCA9IGh1Z2VwYWdlX25ld19zdWJwb29sKFx1MDAyNmgsIDE1LCAtMSk7XG4rXHRodWdlcGFnZV9zdWJwb29sX2dldF9wYWdlcyhzcG9vbCwgMyk7XG4rXHRhc3NlcnQoaHVnZXBhZ2Vfc3VicG9vbF9mcmVlX2hwYWdlcyhzcG9vbCkgPT0gMTIpO1xuK1x0aHVnZXBhZ2Vfc3VicG9vbF9wdXRfcGFnZXMoc3Bvb2wsIDMpO1xuK1x0aHVnZXBhZ2VfcHV0X3N1YnBvb2woc3Bvb2wpO1xuK1xuK1x0LyogVGVzdCB0aGF0IGZyZWVfaHBhZ2VzIHdpdGggYSBtaW5fc2l6ZSBjb25maWd1cmVkIGlzIENPTVBMRVRFTFkgVU5BRkZFQ1RFRCBieSBpdCAqL1xuK1x0c3Bvb2wgPSBodWdlcGFnZV9uZXdfc3VicG9vbChcdTAwMjZoLCAxNSwgNSk7XG4rXHRhc3NlcnRfaHVnZXRsYl9hY2N0X21lbW9yeV9jYWxsZWQoXHUwMDI2aCwgNSk7XG4rXHRodWdlcGFnZV9zdWJwb29sX2dldF9wYWdlcyhzcG9vbCwgMyk7XG4rXHRhc3NlcnQoaHVnZXBhZ2Vfc3VicG9vbF9mcmVlX2hwYWdlcyhzcG9vbCkgPT0gMTIpOyAvKiBTaG91bGQgc3RpbGwgYmUgMTUgLSAzID0gMTIhICovXG4rXHRodWdlcGFnZV9zdWJwb29sX3B1dF9wYWdlcyhzcG9vbCwgMyk7XG4rXHRodWdlcGFnZV9wdXRfc3VicG9vbChzcG9vbCk7XG4rXHRhc3NlcnRfaHVnZXRsYl9hY2N0X21lbW9yeV9jYWxsZWQoXHUwMDI2aCwgLTUpO1xuK1xuK1x0c3Bvb2wgPSBodWdlcGFnZV9uZXdfc3VicG9vbChcdTAwMjZoLCAtMSwgLTEpO1xuK1x0aHVnZXBhZ2Vfc3VicG9vbF9nZXRfcGFnZXMoc3Bvb2wsIDMpO1xuK1x0YXNzZXJ0KGh1Z2VwYWdlX3N1YnBvb2xfZnJlZV9ocGFnZXMoc3Bvb2wpID09IC0xKTtcbitcdGh1Z2VwYWdlX3N1YnBvb2xfcHV0X3BhZ2VzKHNwb29sLCAzKTtcbitcdGh1Z2VwYWdlX3B1dF9zdWJwb29sKHNwb29sKTtcbitcbitcdC8qIFRlc3QgdGhhdCBmcmVlX2hwYWdlcyB3aXRoIGEgbWluX3NpemUgY29uZmlndXJlZCBhbmQgTk8gbWF4IHNpemUgcmV0dXJucyAtMSAqL1xuK1x0c3Bvb2wgPSBodWdlcGFnZV9uZXdfc3VicG9vbChcdTAwMjZoLCAtMSwgNSk7XG4rXHRhc3NlcnRfaHVnZXRsYl9hY2N0X21lbW9yeV9jYWxsZWQoXHUwMDI2aCwgNSk7XG4rXHRodWdlcGFnZV9zdWJwb29sX2dldF9wYWdlcyhzcG9vbCwgMyk7XG4rXHRhc3NlcnQoaHVnZXBhZ2Vfc3VicG9vbF9mcmVlX2hwYWdlcyhzcG9vbCkgPT0gLTEpO1xuK1x0aHVnZXBhZ2Vfc3VicG9vbF9wdXRfcGFnZXMoc3Bvb2wsIDMpO1xuK1x0aHVnZXBhZ2VfcHV0X3N1YnBvb2woc3Bvb2wpO1xuK1x0YXNzZXJ0X2h1Z2V0bGJfYWNjdF9tZW1vcnlfY2FsbGVkKFx1MDAyNmgsIC01KTtcbitcbitcdHNwb29sID0gaHVnZXBhZ2VfbmV3X3N1YnBvb2woXHUwMDI2aCwgMywgLTEpO1xuK1x0aHVnZXBhZ2Vfc3VicG9vbF9nZXRfcGFnZXMoc3Bvb2wsIDMpO1xuK1x0YXNzZXJ0KGh1Z2VwYWdlX3N1YnBvb2xfZnJlZV9ocGFnZXMoc3Bvb2wpID09IDApO1xuK1x0aHVnZXBhZ2Vfc3VicG9vbF9wdXRfcGFnZXMoc3Bvb2wsIDMpO1xuK1x0aHVnZXBhZ2VfcHV0X3N1YnBvb2woc3Bvb2wpO1xuK31cbitcbitzdGF0aWMgdm9pZCB0ZXN0X3N1YnBvb2xfbWF4X2hwYWdlcyh2b2lkKVxuK3tcbitcdHN0cnVjdCBoc3RhdGUgaDtcbitcdHN0cnVjdCBodWdlcGFnZV9zdWJwb29sICpzcG9vbDtcbitcbitcdHNwb29sID0gaHVnZXBhZ2VfbmV3X3N1YnBvb2woXHUwMDI2aCwgMTIzLCAtMSk7XG4rXHRhc3NlcnQoaHVnZXBhZ2Vfc3VicG9vbF9tYXhfaHBhZ2VzKHNwb29sKSA9PSAxMjMpO1xuK1x0aHVnZXBhZ2VfcHV0X3N1YnBvb2woc3Bvb2wpO1xuK1xuK1x0LyogVGVzdCB0aGF0IG1heF9ocGFnZXMgd2l0aCBhIG1pbl9zaXplIGNvbmZpZ3VyZWQgaXMgQ09NUExFVEVMWSBVTkFGRkVDVEVEIGJ5IGl0ICovXG4rXHRzcG9vbCA9IGh1Z2VwYWdlX25ld19zdWJwb29sKFx1MDAyNmgsIDEyMywgNSk7XG4rXHRhc3NlcnRfaHVnZXRsYl9hY2N0X21lbW9yeV9jYWxsZWQoXHUwMDI2aCwgNSk7XG4rXHRhc3NlcnQoaHVnZXBhZ2Vfc3VicG9vbF9tYXhfaHBhZ2VzKHNwb29sKSA9PSAxMjMpO1xuK1x0aHVnZXBhZ2VfcHV0X3N1YnBvb2woc3Bvb2wpO1xuK1x0YXNzZXJ0X2h1Z2V0bGJfYWNjdF9tZW1vcnlfY2FsbGVkKFx1MDAyNmgsIC01KTtcbitcbitcdHNwb29sID0gaHVnZXBhZ2VfbmV3X3N1YnBvb2woXHUwMDI2aCwgLTEsIC0xKTtcbitcdGFzc2VydChodWdlcGFnZV9zdWJwb29sX21heF9ocGFnZXMoc3Bvb2wpID09IC0xKTtcbitcdGh1Z2VwYWdlX3B1dF9zdWJwb29sKHNwb29sKTtcbitcbitcdHNwb29sID0gaHVnZXBhZ2VfbmV3X3N1YnBvb2woXHUwMDI2aCwgLTEsIDUpO1xuK1x0YXNzZXJ0X2h1Z2V0bGJfYWNjdF9tZW1vcnlfY2FsbGVkKFx1MDAyNmgsIDUpO1xuK1x0YXNzZXJ0KGh1Z2VwYWdlX3N1YnBvb2xfbWF4X2hwYWdlcyhzcG9vbCkgPT0gLTEpO1xuK1x0aHVnZXBhZ2VfcHV0X3N1YnBvb2woc3Bvb2wpO1xuK1x0YXNzZXJ0X2h1Z2V0bGJfYWNjdF9tZW1vcnlfY2FsbGVkKFx1MDAyNmgsIC01KTtcbitcbitcdHNwb29sID0gaHVnZXBhZ2VfbmV3X3N1YnBvb2woXHUwMDI2aCwgMCwgLTEpO1xuK1x0YXNzZXJ0KGh1Z2VwYWdlX3N1YnBvb2xfbWF4X2hwYWdlcyhzcG9vbCkgPT0gMCk7XG4rXHRodWdlcGFnZV9wdXRfc3VicG9vbChzcG9vbCk7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIHRlc3Rfc3VicG9vbF9tYXhfc2l6ZSh2b2lkKVxuK3tcbitcdHN0cnVjdCBoc3RhdGUgaDtcbitcdHN0cnVjdCBodWdlcGFnZV9zdWJwb29sICpzcG9vbDtcbitcbitcdHNwb29sID0gaHVnZXBhZ2VfbmV3X3N1YnBvb2woXHUwMDI2aCwgMTAsIC0xKTtcbitcdGFzc2VydChodWdlcGFnZV9zdWJwb29sX21heF9zaXplKHNwb29sKSA9PSAoMTBVTEwgXHUwMDNjXHUwMDNjIDIxKSk7XG4rXHRodWdlcGFnZV9wdXRfc3VicG9vbChzcG9vbCk7XG4rXG4rXHQvKiBUZXN0IHRoYXQgbWF4X3NpemUgd2l0aCBhIG1pbl9zaXplIGNvbmZpZ3VyZWQgaXMgQ09NUExFVEVMWSBVTkFGRkVDVEVEIGJ5IGl0ICovXG4rXHRzcG9vbCA9IGh1Z2VwYWdlX25ld19zdWJwb29sKFx1MDAyNmgsIDEwLCA1KTtcbitcdGFzc2VydF9odWdldGxiX2FjY3RfbWVtb3J5X2NhbGxlZChcdTAwMjZoLCA1KTtcbitcdGFzc2VydChodWdlcGFnZV9zdWJwb29sX21heF9zaXplKHNwb29sKSA9PSAoMTBVTEwgXHUwMDNjXHUwMDNjIDIxKSk7XG4rXHRodWdlcGFnZV9wdXRfc3VicG9vbChzcG9vbCk7XG4rXHRhc3NlcnRfaHVnZXRsYl9hY2N0X21lbW9yeV9jYWxsZWQoXHUwMDI2aCwgLTUpO1xuK1xuK1x0c3Bvb2wgPSBodWdlcGFnZV9uZXdfc3VicG9vbChcdTAwMjZoLCAtMSwgLTEpO1xuK1x0YXNzZXJ0KGh1Z2VwYWdlX3N1YnBvb2xfbWF4X3NpemUoc3Bvb2wpID09IC0xVUxMKTtcbitcdGh1Z2VwYWdlX3B1dF9zdWJwb29sKHNwb29sKTtcbitcbitcdHNwb29sID0gaHVnZXBhZ2VfbmV3X3N1YnBvb2woXHUwMDI2aCwgMCwgLTEpO1xuK1x0YXNzZXJ0KGh1Z2VwYWdlX3N1YnBvb2xfbWF4X3NpemUoc3Bvb2wpID09IDBVTEwpO1xuK1x0aHVnZXBhZ2VfcHV0X3N1YnBvb2woc3Bvb2wpO1xuK31cbitcbitzdGF0aWMgdm9pZCB0ZXN0X3N1YnBvb2xfbWluX3NpemUodm9pZClcbit7XG4rXHRzdHJ1Y3QgaHN0YXRlIGg7XG4rXHRzdHJ1Y3QgaHVnZXBhZ2Vfc3VicG9vbCAqc3Bvb2w7XG4rXG4rXHRzcG9vbCA9IGh1Z2VwYWdlX25ld19zdWJwb29sKFx1MDAyNmgsIC0xLCA1KTtcbitcdGFzc2VydF9odWdldGxiX2FjY3RfbWVtb3J5X2NhbGxlZChcdTAwMjZoLCA1KTtcbitcdGFzc2VydChodWdlcGFnZV9zdWJwb29sX21pbl9zaXplKHNwb29sKSA9PSAoNVVMTCBcdTAwM2NcdTAwM2MgMjEpKTtcbitcdGh1Z2VwYWdlX3B1dF9zdWJwb29sKHNwb29sKTtcbitcdGFzc2VydF9odWdldGxiX2FjY3RfbWVtb3J5X2NhbGxlZChcdTAwMjZoLCAtNSk7XG4rXG4rXHQvKiBUZXN0IHRoYXQgbWluX3NpemUgd2l0aCBhIG1heF9zaXplIGNvbmZpZ3VyZWQgaXMgQ09NUExFVEVMWSBVTkFGRkVDVEVEIGJ5IGl0ICovXG4rXHRzcG9vbCA9IGh1Z2VwYWdlX25ld19zdWJwb29sKFx1MDAyNmgsIDIwLCA1KTtcbitcdGFzc2VydF9odWdldGxiX2FjY3RfbWVtb3J5X2NhbGxlZChcdTAwMjZoLCA1KTtcbitcdGFzc2VydChodWdlcGFnZV9zdWJwb29sX21pbl9zaXplKHNwb29sKSA9PSAoNVVMTCBcdTAwM2NcdTAwM2MgMjEpKTtcbitcdGh1Z2VwYWdlX3B1dF9zdWJwb29sKHNwb29sKTtcbitcdGFzc2VydF9odWdldGxiX2FjY3RfbWVtb3J5X2NhbGxlZChcdTAwMjZoLCAtNSk7XG4rXG4rXHRzcG9vbCA9IGh1Z2VwYWdlX25ld19zdWJwb29sKFx1MDAyNmgsIC0xLCAtMSk7XG4rXHRhc3NlcnQoaHVnZXBhZ2Vfc3VicG9vbF9taW5fc2l6ZShzcG9vbCkgPT0gLTFVTEwpO1xuK1x0aHVnZXBhZ2VfcHV0X3N1YnBvb2woc3Bvb2wpO1xuK1xuK1x0c3Bvb2wgPSBodWdlcGFnZV9uZXdfc3VicG9vbChcdTAwMjZoLCAtMSwgMCk7XG4rXHRhc3NlcnRfaHVnZXRsYl9hY2N0X21lbW9yeV9jYWxsZWQoXHUwMDI2aCwgMCk7XG4rXHRhc3NlcnQoaHVnZXBhZ2Vfc3VicG9vbF9taW5fc2l6ZShzcG9vbCkgPT0gMFVMTCk7XG4rXHRodWdlcGFnZV9wdXRfc3VicG9vbChzcG9vbCk7XG4rXHRhc3NlcnRfaHVnZXRsYl9hY2N0X21lbW9yeV9jYWxsZWQoXHUwMDI2aCwgMCk7XG4rfVxuK1xuK2ludCBtYWluKHZvaWQpXG4re1xuK1x0dGVzdF9zdWJwb29sX25ld19wdXRfbm9fbWluX2xpbWl0KCk7XG4rXHR0ZXN0X3N1YnBvb2xfbmV3X3B1dF93aXRoX21pbl9saW1pdCgpO1xuK1x0dGVzdF9zdWJwb29sX2dldF9wYWdlc19iZWxvd19taW4oKTtcbitcdHRlc3Rfc3VicG9vbF9nZXRfcGFnZXNfY3Jvc3NpbmdfbWluKCk7XG4rXHR0ZXN0X3N1YnBvb2xfZ2V0X3BhZ2VzX2Nyb3NzaW5nX21pbl9tdWx0aSgpO1xuK1x0dGVzdF9zdWJwb29sX2dldF9wYWdlc19tYXhfbGltaXQoKTtcbitcdHRlc3Rfc3VicG9vbF9nZXRfcGFnZXNfbm9fbGltaXRzKCk7XG4rXHR0ZXN0X3N1YnBvb2xfZnJlZV9ocGFnZXMoKTtcbitcdHRlc3Rfc3VicG9vbF9tYXhfaHBhZ2VzKCk7XG4rXHR0ZXN0X3N1YnBvb2xfbWF4X3NpemUoKTtcbitcdHRlc3Rfc3VicG9vbF9taW5fc2l6ZSgpO1xuK1xuK1x0cmV0dXJuIDA7XG4rfVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjFUMTg6MDg6MTcuODUyNTE5NTJaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4MzQ3NjE2NTQ1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgSHVnZXRsYmZzIGFuZCBNZW1jZyBQYXRjaCBTZXJpZXMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHNlcmllcywgYW5kIGl0J3MgbWFraW5nIHNvbWUgcHJldHR5IHNpZ25pZmljYW50IGNoYW5nZXMgdG8gdGhlIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQsIHNwZWNpZmljYWxseSBpbiB0aGUgcmVhbG1zIG9mIGh1Z2V0bGJmcyBhbmQgbWVtY2cuIE15IGluaXRpYWwgaW1wcmVzc2lvbiBpcyB0aGF0IGl0J3MgcmVmYWN0b3Jpbmcgc29tZSBleGlzdGluZyBsb2dpYyBhbmQgaW50cm9kdWNpbmcgbmV3IG1lbWNnIGludGVncmF0aW9uIGZvciBodWdlIHBhZ2VzLlxuXG5TcGVjaWZpY2FsbHksIGl0IGxvb2tzIGxpa2UgYGh1Z2VwYWdlX3N1YnBvb2xgIGxvZ2ljIGlzIGJlaW5nIGV4dHJhY3RlZCBpbnRvIGl0cyBvd24gZmlsZSwgYG1tL2h1Z2V0bGJfc3VicG9vbC5jYC4gVGhpcyBzdWdnZXN0cyBhbiBlZmZvcnQgdG8gbW9kdWxhcml6ZSB0aGUgY29kZSwgd2hpY2ggaXMgYWx3YXlzIGEgZ29vZCBzaWduIGZvciBtYWludGFpbmFiaWxpdHkuIFRoZSBjb3JlIG9mIHRoZSBmdW5jdGlvbmFsIGNoYW5nZSBzZWVtcyB0byByZXZvbHZlIGFyb3VuZCBgYWxsb2NfaHVnZXRsYl9mb2xpb2AuIFRoaXMgZnVuY3Rpb24gaXMgbm93IHVzaW5nIGBtZW1fY2dyb3VwX2h1Z2V0bGJfdHJ5X2NoYXJnZWAsIGBtZW1fY2dyb3VwX2h1Z2V0bGJfY29tbWl0X2NoYXJnZWAsIGFuZCBgbWVtX2Nncm91cF9odWdldGxiX2NhbmNlbF9jaGFyZ2VgIHRvIG1hbmFnZSBtZW1jZyBhY2NvdW50aW5nIGR1cmluZyBmb2xpbyBhbGxvY2F0aW9uLiBTbWFydC4gVGhpcyBpcyB0aGUgaW50ZWdyYXRpb24gSSB3YXMgZXhwZWN0aW5nLlxuXG5EaXZpbmcgZGVlcGVyLCBJIHNlZSB0aGF0IHRoZSBgaHVnZXRsYl9yZXNlcnZlX3BhZ2VzYCBmdW5jdGlvbiBpbiBgbW0vaHVnZXRsYi5jYCBhbHNvIGhhcyBiZWVuIG1vZGlmaWVkLCBwYXJ0aWN1bGFybHkgaW4gdGhlIGVycm9yIHBhdGggYG91dF9wdXRfcGFnZXNgLiBJdCdzIHdvcnRoIGRpZ2dpbmcgaW50byB0aGUgZGV0YWlscyBvZiAqdGhhdCogY2hhbmdlIHRvIHNlZSBob3cgaXQncyBwbGF5aW5nIHdpdGggdGhlIG5ldyBtZW1jZyBhY2NvdW50aW5nLlxuXG5Ob3csIGxldCdzIGxvb2sgYXQgdGhlIGBtbS9tZW1jb250cm9sLmNgIGZpbGUuIFRoZSBmdW5jdGlvbnMgbGlrZSBgbWVtX2Nncm91cF9odWdldGxiX3RyeV9jaGFyZ2VgLCBgbWVtX2Nncm91cF9odWdldGxiX2NvbW1pdF9jaGFyZ2VgLCBhbmQgYG1lbV9jZ3JvdXBfaHVnZXRsYl9jYW5jZWxfY2hhcmdlYCBhcmUgYWxsIG5ldywgYXMgZXhwZWN0ZWQuIFRoaXMgY29uZmlybXMgdGhlIGZ1bmN0aW9uYWwgYWRkaXRpb24gb2YgbWVtY2ctYXdhcmUgaHVnZXRsYiBhY2NvdW50aW5nLlxuXG5UaGlzIHNlZW1zIGxpa2UgYSBzb2xpZCwgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gdGhlIGNvcmUga2VybmVsIGxvZ2ljLiBJdCBkZWZpbml0ZWx5IHdhcnJhbnRzIGZ1enppbmcuXG5cbk15IGxpc3Qgb2YgZm9jdXMgc3ltYm9sczpcblxuKiAgIGBhbGxvY19odWdldGxiX2ZvbGlvYFxuKiAgIGBodWdldGxiX3Jlc2VydmVfcGFnZXNgXG4qICAgYG1lbV9jZ3JvdXBfaHVnZXRsYl90cnlfY2hhcmdlYFxuKiAgIGBtZW1fY2dyb3VwX2h1Z2V0bGJfY29tbWl0X2NoYXJnZWBcbiogICBgbWVtX2Nncm91cF9odWdldGxiX2NhbmNlbF9jaGFyZ2VgXG4qICAgYGh1Z2VwYWdlX3N1YnBvb2xfZ2V0X3BhZ2VzYFxuKiAgIGBodWdlcGFnZV9zdWJwb29sX3B1dF9wYWdlc2BcblxuQW5kIG9mIGNvdXJzZSwgSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGUgcmVsZXZhbnQga2VybmVsIGNvbmZpZyBvcHRpb25zIGFyZSBlbmFibGVkIGZvciB0ZXN0aW5nIHRoaXMuIExldCdzIHNlZS4uLiBJJ2xsIG5lZWQgYEhVR0VUTEJGU2AsIG9idmlvdXNseS4gQWxzbywgYE1FTUNHYC4gSSB0aGluayBgQ0dST1VQX0hVR0VUTEJgIGlzIHJlbGV2YW50LiBMZXQgbWUgZG91YmxlLWNoZWNrIHRoYXQgbGFzdCBvbmUsIEkgZG9uJ3QgcXVpdGUgcmVtZW1iZXIgaWYgdGhhdCBpcyB0aGUgY29ycmVjdCBjb25maWcuIExldCdzIGxvb2sgZm9yIGBtZW1jZ19hY2NvdW50c19odWdldGxiYCBvciBgQ0dST1VQX0hVR0VUTEJgIGluIGBtbS9tZW1jb250cm9sLmNgIG9yIGBpbml0L0tjb25maWdgIHRvIGJlIHN1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI1OTg2LCJPdXRwdXRUb2tlbnMiOjIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTE2LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjFUMTg6MDg6MjYuMjAwMTM5MTI1WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwMDYxNzc3NjIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWVtY2dfYWNjb3VudHNfaHVnZXRsYlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9tZW1jb250cm9sLmM9MTY3ND11bnNpZ25lZCBsb25nIG1lbWNnX3BhZ2Vfc3RhdGVfbG9jYWxfb3V0cHV0KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgaW50IGl0ZW0pXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtMTY4MS0jaWZkZWYgQ09ORklHX0hVR0VUTEJfUEFHRVxcbm1tL21lbWNvbnRyb2wuYzoxNjgyOnN0YXRpYyBib29sIG1lbWNnX2FjY291bnRzX2h1Z2V0bGIodm9pZClcXG5tbS9tZW1jb250cm9sLmMtMTY4My17XFxuLS1cXG5tbS9tZW1jb250cm9sLmMtMTY4Ni0jZWxzZSAvKiBDT05GSUdfSFVHRVRMQl9QQUdFICovXFxubW0vbWVtY29udHJvbC5jOjE2ODc6c3RhdGljIGJvb2wgbWVtY2dfYWNjb3VudHNfaHVnZXRsYih2b2lkKVxcbm1tL21lbWNvbnRyb2wuYy0xNjg4LXtcXG4tLVxcbm1tL21lbWNvbnRyb2wuYz0xNjkzPXN0YXRpYyB2b2lkIG1lbWNnX3N0YXRfZm9ybWF0KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgc3RydWN0IHNlcV9idWYgKnMpXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtMTcxMy1cXHRcXHRpZiAodW5saWtlbHkobWVtb3J5X3N0YXRzW2ldLmlkeCA9PSBOUl9IVUdFVExCKSBcXHUwMDI2XFx1MDAyNlxcbm1tL21lbWNvbnRyb2wuYzoxNzE0OlxcdFxcdFxcdCFtZW1jZ19hY2NvdW50c19odWdldGxiKCkpXFxubW0vbWVtY29udHJvbC5jLTE3MTUtXFx0XFx0XFx0Y29udGludWU7XFxuLS1cXG5tbS9tZW1jb250cm9sLmM9NTE2ND1pbnQgbWVtX2Nncm91cF9odWdldGxiX3RyeV9jaGFyZ2UodW5zaWduZWQgaW50IG5yX3BhZ2VzLCBnZnBfdCBnZnAsXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtNTE3NC1cXG5tbS9tZW1jb250cm9sLmM6NTE3NTpcXHRpZiAobWVtX2Nncm91cF9kaXNhYmxlZCgpIHx8ICFtZW1jZ19hY2NvdW50c19odWdldGxiKCkgfHxcXG5tbS9tZW1jb250cm9sLmMtNTE3Ni1cXHQgICAgIWNncm91cF9zdWJzeXNfb25fZGZsKG1lbW9yeV9jZ3JwX3N1YnN5cykpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIxVDE4OjA4OjI4LjIwNjMzMDI0N1oiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI5OTcwNjIyMTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqSW52ZXN0aWdhdGluZyBIdWdlVExCIE1lbW9yeSBBY2NvdW50aW5nIGluIHRoZSBLZXJuZWwqKlxuXG5Pa2F5LCBzbyBgbWVtY2dfYWNjb3VudHNfaHVnZXRsYmAgaXMgb25seSBkZWZpbmVkIHdoZW4gYENPTkZJR19IVUdFVExCX1BBR0VgIGlzIGVuYWJsZWQuIFRoYXQgbWFrZXMgc2Vuc2UsIGJ1dCBpdCByYWlzZXMgYSBxdWVzdGlvbjogaG93IGRvZXMgdGhhdCBpbnRlcmFjdCB3aXRoIGBDT05GSUdfQ0dST1VQX0hVR0VUTEJgPyBJcyBgQ09ORklHX0NHUk9VUF9IVUdFVExCYCBhbHNvIGNoZWNrZWQgYW55d2hlcmU/IEknZCBiZXR0ZXIgY29uZmlybSB3aGV0aGVyIG9yIG5vdCBgQ09ORklHX0NHUk9VUF9IVUdFVExCYCBpcyBldmVuIGRlZmluZWQuIEdvdHRhIGJlIHByZWNpc2UgYWJvdXQgdGhpcy5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjc1NzcsIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yMVQxODowODozMS4yMDMzOTQ4OTRaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTk5OTQzOTg0NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJDR1JPVVBfSFVHRVRMQlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL2FybTY0L2NvbmZpZ3MvZGVmY29uZmlnPTIxPUNPTkZJR19DR1JPVVBfRlJFRVpFUj15XFxuYXJjaC9hcm02NC9jb25maWdzL2RlZmNvbmZpZzoyMjpDT05GSUdfQ0dST1VQX0hVR0VUTEI9eVxcbmFyY2gvYXJtNjQvY29uZmlncy9kZWZjb25maWctMjMtQ09ORklHX0NQVVNFVFM9eVxcbi0tXFxuYXJjaC9sb29uZ2FyY2gvY29uZmlncy9sb29uZ3NvbjY0X2RlZmNvbmZpZz0zMD1DT05GSUdfQ0dST1VQX0ZSRUVaRVI9eVxcbmFyY2gvbG9vbmdhcmNoL2NvbmZpZ3MvbG9vbmdzb242NF9kZWZjb25maWc6MzE6Q09ORklHX0NHUk9VUF9IVUdFVExCPXlcXG5hcmNoL2xvb25nYXJjaC9jb25maWdzL2xvb25nc29uNjRfZGVmY29uZmlnLTMyLUNPTkZJR19DUFVTRVRTPXlcXG4tLVxcbmFyY2gvcG93ZXJwYy9jb25maWdzL3BwYzY0X2RlZmNvbmZpZz0yNz1DT05GSUdfQ0dST1VQX0ZSRUVaRVI9eVxcbmFyY2gvcG93ZXJwYy9jb25maWdzL3BwYzY0X2RlZmNvbmZpZzoyODpDT05GSUdfQ0dST1VQX0hVR0VUTEI9eVxcbmFyY2gvcG93ZXJwYy9jb25maWdzL3BwYzY0X2RlZmNvbmZpZy0yOS1DT05GSUdfQ1BVU0VUUz15XFxuLS1cXG5hcmNoL3Jpc2N2L2NvbmZpZ3MvZGVmY29uZmlnPTE0PUNPTkZJR19DR1JPVVBfRlJFRVpFUj15XFxuYXJjaC9yaXNjdi9jb25maWdzL2RlZmNvbmZpZzoxNTpDT05GSUdfQ0dST1VQX0hVR0VUTEI9eVxcbmFyY2gvcmlzY3YvY29uZmlncy9kZWZjb25maWctMTYtQ09ORklHX0NQVVNFVFM9eVxcbi0tXFxuYXJjaC9zMzkwL2NvbmZpZ3MvZGVidWdfZGVmY29uZmlnPTMwPUNPTkZJR19DR1JPVVBfRlJFRVpFUj15XFxuYXJjaC9zMzkwL2NvbmZpZ3MvZGVidWdfZGVmY29uZmlnOjMxOkNPTkZJR19DR1JPVVBfSFVHRVRMQj15XFxuYXJjaC9zMzkwL2NvbmZpZ3MvZGVidWdfZGVmY29uZmlnLTMyLUNPTkZJR19DUFVTRVRTPXlcXG4tLVxcbmFyY2gvczM5MC9jb25maWdzL2RlZmNvbmZpZz0yOD1DT05GSUdfQ0dST1VQX0ZSRUVaRVI9eVxcbmFyY2gvczM5MC9jb25maWdzL2RlZmNvbmZpZzoyOTpDT05GSUdfQ0dST1VQX0hVR0VUTEI9eVxcbmFyY2gvczM5MC9jb25maWdzL2RlZmNvbmZpZy0zMC1DT05GSUdfQ1BVU0VUUz15XFxuLS1cXG5hcmNoL3g4Ni9jb25maWdzL2kzODZfZGVmY29uZmlnPTE5PUNPTkZJR19DR1JPVVBfRlJFRVpFUj15XFxuYXJjaC94ODYvY29uZmlncy9pMzg2X2RlZmNvbmZpZzoyMDpDT05GSUdfQ0dST1VQX0hVR0VUTEI9eVxcbmFyY2gveDg2L2NvbmZpZ3MvaTM4Nl9kZWZjb25maWctMjEtQ09ORklHX0NQVVNFVFM9eVxcbi0tXFxuYXJjaC94ODYvY29uZmlncy94ODZfNjRfZGVmY29uZmlnPTE5PUNPTkZJR19DR1JPVVBfRlJFRVpFUj15XFxuYXJjaC94ODYvY29uZmlncy94ODZfNjRfZGVmY29uZmlnOjIwOkNPTkZJR19DR1JPVVBfSFVHRVRMQj15XFxuYXJjaC94ODYvY29uZmlncy94ODZfNjRfZGVmY29uZmlnLTIxLUNPTkZJR19DUFVTRVRTPXlcXG4tLVxcbmluY2x1ZGUvbGludXgvY2dyb3VwX3N1YnN5cy5oPTQ5PVNVQlNZUyhuZXRfcHJpbylcXG4tLVxcbmluY2x1ZGUvbGludXgvY2dyb3VwX3N1YnN5cy5oLTUxLVxcbmluY2x1ZGUvbGludXgvY2dyb3VwX3N1YnN5cy5oOjUyOiNpZiBJU19FTkFCTEVEKENPTkZJR19DR1JPVVBfSFVHRVRMQilcXG5pbmNsdWRlL2xpbnV4L2Nncm91cF9zdWJzeXMuaC01My1TVUJTWVMoaHVnZXRsYilcXG4tLVxcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oPTQwPXN0cnVjdCByZXN2X21hcCB7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaC00Ny1cXHRzdHJ1Y3Qgcndfc2VtYXBob3JlIHJ3X3NlbWE7XFxuaW5jbHVkZS9saW51eC9odWdldGxiLmg6NDg6I2lmZGVmIENPTkZJR19DR1JPVVBfSFVHRVRMQlxcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oLTQ5LVxcdC8qXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaD03OT1zdHJ1Y3QgZmlsZV9yZWdpb24ge1xcbi0tXFxuaW5jbHVkZS9saW51eC9odWdldGxiLmgtODItXFx0bG9uZyB0bztcXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaDo4MzojaWZkZWYgQ09ORklHX0NHUk9VUF9IVUdFVExCXFxuaW5jbHVkZS9saW51eC9odWdldGxiLmgtODQtXFx0LypcXG4tLVxcbmluY2x1ZGUvbGludXgvaHVnZXRsYl9jZ3JvdXAuaD0yMj1zdHJ1Y3QgZmlsZV9yZWdpb247XFxuaW5jbHVkZS9saW51eC9odWdldGxiX2Nncm91cC5oLTIzLVxcbmluY2x1ZGUvbGludXgvaHVnZXRsYl9jZ3JvdXAuaDoyNDojaWZkZWYgQ09ORklHX0NHUk9VUF9IVUdFVExCXFxuaW5jbHVkZS9saW51eC9odWdldGxiX2Nncm91cC5oLTI1LWVudW0gaHVnZXRsYl9tZW1vcnlfZXZlbnQge1xcbi0tXFxuaW5pdC9LY29uZmlnPTEyNzA9Y29uZmlnIENHUk9VUF9GUkVFWkVSXFxuLS1cXG5pbml0L0tjb25maWctMTI4MC1cXG5pbml0L0tjb25maWc6MTI4MTpjb25maWcgQ0dST1VQX0hVR0VUTEJcXG5pbml0L0tjb25maWctMTI4Mi1cXHRib29sIFxcXCJIdWdlVExCIGNvbnRyb2xsZXJcXFwiXFxuLS1cXG5tbS9NYWtlZmlsZT0xMDg9ZW5kaWZcXG5tbS9NYWtlZmlsZToxMDk6b2JqLSQoQ09ORklHX0NHUk9VUF9IVUdFVExCKSArPSBodWdldGxiX2Nncm91cC5vXFxubW0vTWFrZWZpbGUtMTEwLW9iai0kKENPTkZJR19HVVBfVEVTVCkgKz0gZ3VwX3Rlc3Qub1xcbi0tXFxubW0vaHVnZXRsYi5jPTMyNT1zdGF0aWMgdm9pZCBjb3B5X2h1Z2V0bGJfY2dyb3VwX3VuY2hhcmdlX2luZm8oc3RydWN0IGZpbGVfcmVnaW9uICpucmcsXFxuLS1cXG5tbS9odWdldGxiLmMtMzI3LXtcXG5tbS9odWdldGxiLmM6MzI4OiNpZmRlZiBDT05GSUdfQ0dST1VQX0hVR0VUTEJcXG5tbS9odWdldGxiLmMtMzI5LVxcdG5yZy1cXHUwMDNlcmVzZXJ2YXRpb25fY291bnRlciA9IHJnLVxcdTAwM2VyZXNlcnZhdGlvbl9jb3VudGVyO1xcbi0tXFxubW0vaHVnZXRsYi5jPTMzNz1zdGF0aWMgdm9pZCByZWNvcmRfaHVnZXRsYl9jZ3JvdXBfdW5jaGFyZ2VfaW5mbyhzdHJ1Y3QgaHVnZXRsYl9jZ3JvdXAgKmhfY2csXFxuLS1cXG5tbS9odWdldGxiLmMtMzQxLXtcXG5tbS9odWdldGxiLmM6MzQyOiNpZmRlZiBDT05GSUdfQ0dST1VQX0hVR0VUTEJcXG5tbS9odWdldGxiLmMtMzQzLVxcdGlmIChoX2NnKSB7XFxuLS1cXG5tbS9odWdldGxiLmM9MzcxPXN0YXRpYyB2b2lkIHB1dF91bmNoYXJnZV9pbmZvKHN0cnVjdCBmaWxlX3JlZ2lvbiAqcmcpXFxubW0vaHVnZXRsYi5jLTM3Mi17XFxubW0vaHVnZXRsYi5jOjM3MzojaWZkZWYgQ09ORklHX0NHUk9VUF9IVUdFVExCXFxubW0vaHVnZXRsYi5jLTM3NC1cXHRpZiAocmctXFx1MDAzZWNzcylcXG4tLVxcbm1tL2h1Z2V0bGIuYz0zNzk9c3RhdGljIGJvb2wgaGFzX3NhbWVfdW5jaGFyZ2VfaW5mbyhzdHJ1Y3QgZmlsZV9yZWdpb24gKnJnLFxcbi0tXFxubW0vaHVnZXRsYi5jLTM4MS17XFxubW0vaHVnZXRsYi5jOjM4MjojaWZkZWYgQ09ORklHX0NHUk9VUF9IVUdFVExCXFxubW0vaHVnZXRsYi5jLTM4My1cXHRyZXR1cm4gcmctXFx1MDAzZXJlc2VydmF0aW9uX2NvdW50ZXIgPT0gb3JnLVxcdTAwM2VyZXNlcnZhdGlvbl9jb3VudGVyIFxcdTAwMjZcXHUwMDI2XFxuLS1cXG5tbS9odWdldGxiLmM9OTA5PXJlc3ZfbWFwX3NldF9odWdldGxiX2Nncm91cF91bmNoYXJnZV9pbmZvKHN0cnVjdCByZXN2X21hcCAqcmVzdl9tYXAsXFxuLS1cXG5tbS9odWdldGxiLmMtOTEyLXtcXG5tbS9odWdldGxiLmM6OTEzOiNpZmRlZiBDT05GSUdfQ0dST1VQX0hVR0VUTEJcXG5tbS9odWdldGxiLmMtOTE0LVxcdGlmICghaF9jZyB8fCAhaCkge1xcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2NvbmZpZy5hYXJjaDY0PTIxPUNPTkZJR19DR1JPVVBfRlJFRVpFUj15XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2NvbmZpZy5hYXJjaDY0OjIyOkNPTkZJR19DR1JPVVBfSFVHRVRMQj15XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2NvbmZpZy5hYXJjaDY0LTIzLUNPTkZJR19DR1JPVVBfTkVUX0NMQVNTSUQ9eVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2NvbmZpZy5wcGM2NGVsPTEyPUNPTkZJR19DR1JPVVBfRlJFRVpFUj15XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2NvbmZpZy5wcGM2NGVsOjEzOkNPTkZJR19DR1JPVVBfSFVHRVRMQj15XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2NvbmZpZy5wcGM2NGVsLTE0LUNPTkZJR19DR1JPVVBfTkVUX0NMQVNTSUQ9eVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2NvbmZpZy5yaXNjdjY0PTEyPUNPTkZJR19DR1JPVVBfRlJFRVpFUj15XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2NvbmZpZy5yaXNjdjY0OjEzOkNPTkZJR19DR1JPVVBfSFVHRVRMQj15XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2NvbmZpZy5yaXNjdjY0LTE0LUNPTkZJR19DR1JPVVBfTkVUX0NMQVNTSUQ9eVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2NvbmZpZy5zMzkweD0xND1DT05GSUdfQ0dST1VQX0ZSRUVaRVI9eVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9jb25maWcuczM5MHg6MTU6Q09ORklHX0NHUk9VUF9IVUdFVExCPXlcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvY29uZmlnLnMzOTB4LTE2LUNPTkZJR19DR1JPVVBfTkVUX0NMQVNTSUQ9eVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2NvbmZpZy54ODZfNjQ9Mjc9Q09ORklHX0NHUk9VUF9GUkVFWkVSPXlcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvY29uZmlnLng4Nl82NDoyODpDT05GSUdfQ0dST1VQX0hVR0VUTEI9eVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9jb25maWcueDg2XzY0LTI5LUNPTkZJR19DR1JPVVBfUEVSRj15XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9oaWQvY29uZmlnLmNvbW1vbj0yMj1DT05GSUdfQ0dST1VQX0ZSRUVaRVI9eVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2hpZC9jb25maWcuY29tbW9uOjIzOkNPTkZJR19DR1JPVVBfSFVHRVRMQj15XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvaGlkL2NvbmZpZy5jb21tb24tMjQtQ09ORklHX0NHUk9VUF9ORVRfQ0xBU1NJRD15XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIxVDE4OjA4OjMzLjIwMjg0MjEyOVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMxOTUxOTI2NTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3Mgb24gdGhpczpcblxuKipJbnZlc3RpZ2F0aW5nIE1lbW9yeSBDb250cm9sIEdyb3VwcyoqXG5cbkFscmlnaHQsIHNvIGBDR1JPVVBfSFVHRVRMQmAgaXMgZGVmaW5pdGVseSBhIHRoaW5nLiBOb3csIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSByZWxhdGlvbnNoaXAgd2l0aCBgTUVNQ0dgLiBNeSBmaXJzdCBpbnN0aW5jdCBpcyB0byBkZWx2ZSBpbnRvIHRoZSBgaW5pdC9LY29uZmlnYCBmaWxlLiBUaGF0J3MgdGhlIGdvLXRvIHBsYWNlIGZvciB1bmRlcnN0YW5kaW5nIGtlcm5lbCBjb25maWd1cmF0aW9uIG9wdGlvbnMsIHNvIEknbGwgc3RhcnQgdGhlcmUgdG8gc2VlIGhvdyBgTUVNQ0dgIGlzIGRlZmluZWQgYW5kIGlmIHRoZXJlJ3MgYW55IGltbWVkaWF0ZSBjb25uZWN0aW9uIG9yIGRlcGVuZGVuY3kgbGFpZCBvdXQgd2l0aGluIHRoZSBjb25maWd1cmF0aW9uIGZyYW1ld29yay4gVGhpcyBpcyB0aGUgbG9naWNhbCBmaXJzdCBzdGVwIGZvciBtZSB0byB1bmRlcnN0YW5kIGhvdyB0aGVzZSBtb2R1bGVzIHJlbGF0ZSB0byBlYWNoIG90aGVyIGluIHRoZSBrZXJuZWwuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMwMDYyLCJPdXRwdXRUb2tlbnMiOjE3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjFUMTg6MDg6MzYuMzk4MDM2OTYyWiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3NDY5NTY5OTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE1FTUNHXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluaXQvS2NvbmZpZz0xMDYzPWNvbmZpZyBDR1JPVVBfRkFWT1JfRFlOTU9EU1xcbi0tXFxuaW5pdC9LY29uZmlnLTEwNzItXFxuaW5pdC9LY29uZmlnOjEwNzM6Y29uZmlnIE1FTUNHXFxuaW5pdC9LY29uZmlnLTEwNzQtXFx0Ym9vbCBcXFwiTWVtb3J5IGNvbnRyb2xsZXJcXFwiXFxuLS1cXG5pbml0L0tjb25maWctMTA4MS1cXG5pbml0L0tjb25maWc6MTA4Mjpjb25maWcgTUVNQ0dfTk1JX1VOU0FGRVxcbmluaXQvS2NvbmZpZy0xMDgzLVxcdGJvb2xcXG4tLVxcbmluaXQvS2NvbmZpZy0xMDg4LVxcbmluaXQvS2NvbmZpZzoxMDg5OmNvbmZpZyBNRU1DR19OTUlfU0FGRVRZX1JFUVVJUkVTX0FUT01JQ1xcbmluaXQvS2NvbmZpZy0xMDkwLVxcdGJvb2xcXG4tLVxcbmluaXQvS2NvbmZpZy0xMDk1LVxcbmluaXQvS2NvbmZpZzoxMDk2OmNvbmZpZyBNRU1DR19WMVxcbmluaXQvS2NvbmZpZy0xMDk3LVxcdGJvb2wgXFxcIkxlZ2FjeSBjZ3JvdXAgdjEgbWVtb3J5IGNvbnRyb2xsZXJcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIxVDE4OjA4OjM4LjE0NTAwMzE1MVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM4MzIxOTUzMTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqS2VybmVsIENvbmZpZ3VyYXRpb24gUXVhbmRhcnkqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGVzZSBrZXJuZWwgY29uZmlndXJhdGlvbnMsIGFuZCBpbW1lZGlhdGVseSBteSBicmFpbiBqdW1wcyB0byBgSFVHRVRMQkZTYCwgYE1FTUNHYCwgYW5kIGBDR1JPVVBfSFVHRVRMQmAuIFRob3NlIGFyZSB0aGUgdXN1YWwgc3VzcGVjdHMuIEJ1dCwgaG9sZCBvbiBhIHNlY29uZC4uLiBpc24ndCBgSFVHRVRMQl9QQUdFYCB0aGUgKnByaW1hcnkqIGNvbmZpZyBmb3IgZW5hYmxpbmcgaHVnZSBwYWdlcyBpbiB0aGUgZmlyc3QgcGxhY2U/IEl0IGZlZWxzIGxpa2UgdGhhdCBzaG91bGQgYmUgdGhlIGZvdW5kYXRpb24uIFJpZ2h0LCBgSFVHRVRMQkZTYCBpcyByZWxhdGVkIHRvIHRoZSBmaWxlc3lzdGVtIGltcGxlbWVudGF0aW9uLCBtYWtpbmcgdGhhdCBkaXN0aW5jdGlvbiBpbiBteSBtaW5kIG5vdy5cblxuTGV0IG1lIGp1c3QgZG91YmxlLWNoZWNrIHdoZXJlIGBIVUdFVExCX1BBR0VgIGlzIGFjdHVhbGx5IGRlZmluZWQuIEkgc2hvdWxkIGxvb2sgaW4gZWl0aGVyIGBmcy9LY29uZmlnYCBvciBgbW0vS2NvbmZpZ2AsIGl0J2xsIGxpa2VseSBiZSB0aGVyZS4gR290dGEgcmVmcmVzaCBteSBtZW1vcnkgYW5kIHBpbnBvaW50IHRoYXQgY29uZmlndXJhdGlvbiBkZXBlbmRlbmN5LlxuXG5cbiIsIklucHV0VG9rZW5zIjozMDQ3OSwiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjgwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIxVDE4OjA4OjQxLjk3NzIwMzU3M1oiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTc2NTMyOTY3MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgSFVHRVRMQl9QQUdFXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvc2gvbW0vS2NvbmZpZz0xNTg9Y2hvaWNlXFxuLS1cXG5hcmNoL3NoL21tL0tjb25maWctMTYzLVxcbmFyY2gvc2gvbW0vS2NvbmZpZzoxNjQ6Y29uZmlnIEhVR0VUTEJfUEFHRV9TSVpFXzY0S1xcbmFyY2gvc2gvbW0vS2NvbmZpZy0xNjUtXFx0Ym9vbCBcXFwiNjRrQlxcXCJcXG4tLVxcbmFyY2gvc2gvbW0vS2NvbmZpZy0xNjctXFxuYXJjaC9zaC9tbS9LY29uZmlnOjE2ODpjb25maWcgSFVHRVRMQl9QQUdFX1NJWkVfMjU2S1xcbmFyY2gvc2gvbW0vS2NvbmZpZy0xNjktXFx0Ym9vbCBcXFwiMjU2a0JcXFwiXFxuLS1cXG5hcmNoL3NoL21tL0tjb25maWctMTcxLVxcbmFyY2gvc2gvbW0vS2NvbmZpZzoxNzI6Y29uZmlnIEhVR0VUTEJfUEFHRV9TSVpFXzFNQlxcbmFyY2gvc2gvbW0vS2NvbmZpZy0xNzMtXFx0Ym9vbCBcXFwiMU1CXFxcIlxcbmFyY2gvc2gvbW0vS2NvbmZpZy0xNzQtXFxuYXJjaC9zaC9tbS9LY29uZmlnOjE3NTpjb25maWcgSFVHRVRMQl9QQUdFX1NJWkVfNE1CXFxuYXJjaC9zaC9tbS9LY29uZmlnLTE3Ni1cXHRib29sIFxcXCI0TUJcXFwiXFxuLS1cXG5hcmNoL3NoL21tL0tjb25maWctMTc4LVxcbmFyY2gvc2gvbW0vS2NvbmZpZzoxNzk6Y29uZmlnIEhVR0VUTEJfUEFHRV9TSVpFXzY0TUJcXG5hcmNoL3NoL21tL0tjb25maWctMTgwLVxcdGJvb2wgXFxcIjY0TUJcXFwiXFxuLS1cXG5mcy9LY29uZmlnPTI2Mj1pZiBIVUdFVExCRlNcXG5mcy9LY29uZmlnOjI2Mzpjb25maWcgSFVHRVRMQl9QQUdFX09QVElNSVpFX1ZNRU1NQVBfREVGQVVMVF9PTlxcbmZzL0tjb25maWctMjY0LVxcdGJvb2wgXFxcIkh1Z2VUTEIgVm1lbW1hcCBPcHRpbWl6YXRpb24gKEhWTykgZGVmYXVsdHMgdG8gb25cXFwiXFxuLS1cXG5mcy9LY29uZmlnPTI3MT1lbmRpZiAjIEhVR0VUTEJGU1xcbmZzL0tjb25maWctMjcyLVxcbmZzL0tjb25maWc6MjczOmNvbmZpZyBIVUdFVExCX1BBR0VcXG5mcy9LY29uZmlnLTI3NC1cXHRkZWZfYm9vbCBIVUdFVExCRlNcXG4tLVxcbmZzL0tjb25maWctMjc2LVxcbmZzL0tjb25maWc6Mjc3OmNvbmZpZyBIVUdFVExCX1BBR0VfT1BUSU1JWkVfVk1FTU1BUFxcbmZzL0tjb25maWctMjc4LVxcdGRlZl9ib29sIEhVR0VUTEJfUEFHRVxcbi0tXFxubW0vS2NvbmZpZz03MDY9Y29uZmlnIEFSQ0hfRU5BQkxFX1RIUF9NSUdSQVRJT05cXG4tLVxcbm1tL0tjb25maWctNzA4LVxcbm1tL0tjb25maWc6NzA5OmNvbmZpZyBIVUdFVExCX1BBR0VfU0laRV9WQVJJQUJMRVxcbm1tL0tjb25maWctNzEwLVxcdGRlZl9ib29sIG5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjFUMTg6MDg6NDMuNzQyNTQzMDc2WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjk3OTc0NTgzNzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIEh1Z2V0bGIgU3VicG9vbCBSZWZhY3RvcmluZyBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggc2VyaWVzLCBhbmQgaXQncyBhbGwgYWJvdXQgcmVmYWN0b3JpbmcgdGhlIGh1Z2V0bGIgc3VicG9vbCBsb2dpYy4gUmlnaHQgb2ZmIHRoZSBiYXQsIEkgc2VlIHRoYXQgYEhVR0VUTEJfUEFHRWAgaXMgdGllZCB0byBgSFVHRVRMQkZTYCwgc28gdGhhdCdzIHRoZSBrZXkgdGhpbmcgdG8gZW5hYmxlLCBhbmQgSSBuZWVkIHRvIG1ha2Ugc3VyZSBgTUVNQ0dgIGlzIGFsc28gc2V0LiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoYXQgdGhlc2UgYXJlIGFsbCB3b3JraW5nIGluIGhhcm1vbnkgd2l0aCBhbnkgZXhpc3RpbmcgY29uZmlndXJhdGlvbnMuIEkgc2hvdWxkIHByb2JhYmx5IGRvdWJsZS1jaGVjayB0aGUgYG1lbWNnX2FjY291bnRzX2h1Z2V0bGJgIGNvbmZpZy4gSXQncyBkZWZpbmVkIGlmIGBDT05GSUdfSFVHRVRMQl9QQUdFYCBpcyBzZXQsIGFuZCBpdCdzIHVzZWQgaW4gYG1lbV9jZ3JvdXBfaHVnZXRsYl90cnlfY2hhcmdlYC4gR290IGl0LiBTbyB3ZSdyZSBsb29raW5nIGF0IGBIVUdFVExCRlNgIGFuZCBgTUVNQ0dgIGFzIHRoZSBlc3NlbnRpYWwgY29uZmlncyBoZXJlLCBhcyB3ZWxsIGFzIGBDR1JPVVBfSFVHRVRMQmAuXG5cbk5vdywgbGV0IG1lIHplcm8gaW4gb24gdGhlIGtleSBmdW5jdGlvbnMgYmVpbmcgbW9kaWZpZWQuIEkgc2hvdWxkIGdpdmUgdGhlc2UgZXh0cmEgZm9jdXM6XG5cbiogICBgYWxsb2NfaHVnZXRsYl9mb2xpb2BcbiogICBgaHVnZXRsYl9yZXNlcnZlX3BhZ2VzYFxuKiAgIGBtZW1fY2dyb3VwX2h1Z2V0bGJfdHJ5X2NoYXJnZWBcbiogICBgbWVtX2Nncm91cF9odWdldGxiX2NvbW1pdF9jaGFyZ2VgXG4qICAgYG1lbV9jZ3JvdXBfaHVnZXRsYl9jYW5jZWxfY2hhcmdlYFxuKiAgIGBodWdlcGFnZV9zdWJwb29sX2dldF9wYWdlc2BcbiogICBgaHVnZXBhZ2Vfc3VicG9vbF9wdXRfcGFnZXNgXG4qICAgYGh1Z2VwYWdlX25ld19zdWJwb29sYFxuKiAgIGBodWdlcGFnZV9wdXRfc3VicG9vbGBcbiogICBgaHVnZXBhZ2Vfc3VicG9vbF9mcmVlX2hwYWdlc2BcbiogICBgaHVnZXBhZ2Vfc3VicG9vbF9tYXhfaHBhZ2VzYFxuKiAgIGBodWdlcGFnZV9zdWJwb29sX21heF9zaXplYFxuKiAgIGBodWdlcGFnZV9zdWJwb29sX21pbl9zaXplYFxuXG5BbHJpZ2h0LCBsZXQncyBtYWtlIHN1cmUgSSdtIHVzaW5nIHRoZSBleGFjdCBmdW5jdGlvbiBuYW1lcyBmcm9tIHRoZSBkaWZmIHdoZW4gaXQgY29tZXMgdG8gZm9jdXMuXG5cblRoZSBjb3JlIG9mIHRoaXMgcGF0Y2ggc2VyaWVzIGlzIHJlZmFjdG9yaW5nIHRoZSBodWdldGxiIHN1YnBvb2wgbG9naWMgaW50byBpdHMgb3duIGZpbGUsIGBtbS9odWdldGxiX3N1YnBvb2wuY2AuIE1vcmUgaW1wb3J0YW50bHksIGl0IHNlZW1zIHRvIGJlIHVwZGF0aW5nIHRoZSBodWdldGxiIGFsbG9jYXRpb24gcGF0aCAoYGFsbG9jX2h1Z2V0bGJfZm9saW9gKSB0byBlbXBsb3kgYSB0cnkvY29tbWl0L2NhbmNlbCBjaGFyZ2luZyBzY2hlbWUgZm9yIG1lbW9yeSBjZ3JvdXBzIHVzaW5nIGZ1bmN0aW9ucyBsaWtlIGBtZW1fY2dyb3VwX2h1Z2V0bGJfdHJ5X2NoYXJnZWAsIGBtZW1fY2dyb3VwX2h1Z2V0bGJfY29tbWl0X2NoYXJnZWAsIGFuZCBgbWVtX2Nncm91cF9odWdldGxiX2NhbmNlbF9jaGFyZ2VgLiBQbHVzLCB0aGVyZSdzIGEgZml4IGZvciBhbiBlcnJvciBwYXRoIGluIGBodWdldGxiX3Jlc2VydmVfcGFnZXNgLiBUaGVzZSBhcmUgc2lnbmlmaWNhbnQgY2hhbmdlcyB0byBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBjZ3JvdXAgZnVuY3Rpb25hbGl0eSwgYW5kIHNpbmNlIHRoZXkgY2FuIGJlIHRyaWdnZXJlZCBmcm9tIHVzZXJzcGFjZSB2aWEgaHVnZXRsYmZzIGFuZCBjZ3JvdXBmcywgdGhleSdyZSBwcmltZSBjYW5kaWRhdGVzIGZvciBmdXp6aW5nLiBUaW1lIHRvIHNldC1yZXN1bHRzLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMTM0NCwiT3V0cHV0VG9rZW5zIjoyNTAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MDQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjFUMTg6MDg6NTMuNTQwMDA0OTMzWiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzY1NDAyODIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkhVR0VUTEJGU1wiLFxuICAgIFwiTUVNQ0dcIixcbiAgICBcIkNHUk9VUF9IVUdFVExCXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYWxsb2NfaHVnZXRsYl9mb2xpb1wiLFxuICAgIFwiaHVnZXRsYl9yZXNlcnZlX3BhZ2VzXCIsXG4gICAgXCJtZW1fY2dyb3VwX2h1Z2V0bGJfdHJ5X2NoYXJnZVwiLFxuICAgIFwibWVtX2Nncm91cF9odWdldGxiX2NvbW1pdF9jaGFyZ2VcIixcbiAgICBcIm1lbV9jZ3JvdXBfaHVnZXRsYl9jYW5jZWxfY2hhcmdlXCIsXG4gICAgXCJodWdlcGFnZV9zdWJwb29sX2dldF9wYWdlc1wiLFxuICAgIFwiaHVnZXBhZ2Vfc3VicG9vbF9wdXRfcGFnZXNcIixcbiAgICBcImh1Z2VwYWdlX25ld19zdWJwb29sXCIsXG4gICAgXCJodWdlcGFnZV9wdXRfc3VicG9vbFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHNlcmllcyByZWZhY3RvcnMgdGhlIGh1Z2V0bGIgc3VicG9vbCBsb2dpYyBpbnRvIGEgc2VwYXJhdGUgZmlsZSBhbmQgbW9kaWZpZXMgdGhlIGh1Z2V0bGIgYWxsb2NhdGlvbiBwYXRoIHRvIHVzZSBhIG5ldyB0cnkvY29tbWl0L2NhbmNlbCBjaGFyZ2luZyBtb2RlbCBmb3IgbWVtb3J5IGNncm91cHMuIEl0IGFsc28gbW9kaWZpZXMgdGhlIGh1Z2V0bGJfcmVzZXJ2ZV9wYWdlcyBlcnJvciBwYXRoLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIGNncm91cCBsb2dpYyB0aGF0IGFyZSByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIGh1Z2V0bGJmcyBhbmQgY2dyb3VwZnMsIG1ha2luZyB0aGVtIGhpZ2hseSByZWxldmFudCBmb3IgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJIVUdFVExCRlNcIixcbiAgICBcIk1FTUNHXCIsXG4gICAgXCJDR1JPVVBfSFVHRVRMQlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImFsbG9jX2h1Z2V0bGJfZm9saW9cIixcbiAgICBcImh1Z2V0bGJfcmVzZXJ2ZV9wYWdlc1wiLFxuICAgIFwibWVtX2Nncm91cF9odWdldGxiX3RyeV9jaGFyZ2VcIixcbiAgICBcIm1lbV9jZ3JvdXBfaHVnZXRsYl9jb21taXRfY2hhcmdlXCIsXG4gICAgXCJtZW1fY2dyb3VwX2h1Z2V0bGJfY2FuY2VsX2NoYXJnZVwiLFxuICAgIFwiaHVnZXBhZ2Vfc3VicG9vbF9nZXRfcGFnZXNcIixcbiAgICBcImh1Z2VwYWdlX3N1YnBvb2xfcHV0X3BhZ2VzXCIsXG4gICAgXCJodWdlcGFnZV9uZXdfc3VicG9vbFwiLFxuICAgIFwiaHVnZXBhZ2VfcHV0X3N1YnBvb2xcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBzZXJpZXMgcmVmYWN0b3JzIHRoZSBodWdldGxiIHN1YnBvb2wgbG9naWMgaW50byBhIHNlcGFyYXRlIGZpbGUgYW5kIG1vZGlmaWVzIHRoZSBodWdldGxiIGFsbG9jYXRpb24gcGF0aCB0byB1c2UgYSBuZXcgdHJ5L2NvbW1pdC9jYW5jZWwgY2hhcmdpbmcgbW9kZWwgZm9yIG1lbW9yeSBjZ3JvdXBzLiBJdCBhbHNvIG1vZGlmaWVzIHRoZSBodWdldGxiX3Jlc2VydmVfcGFnZXMgZXJyb3IgcGF0aC4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBjZ3JvdXAgbG9naWMgdGhhdCBhcmUgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBodWdldGxiZnMgYW5kIGNncm91cGZzLCBtYWtpbmcgdGhlbSBoaWdobHkgcmVsZXZhbnQgZm9yIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowtd9d7[1] Phase: Succeeded StartedAt: 2026-07-21 18:09:05 +0000 UTC FinishedAt: 2026-07-21 18:09:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtd9d7[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-21 18:09:05 +0000 UTC FinishedAt: 2026-07-21 18:09:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtd9d7[2] Phase: Succeeded StartedAt: 2026-07-21 18:09:05 +0000 UTC FinishedAt: 2026-07-21 23:14:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtd9d7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b95f03f04d475aa6719d15a636ddf32222d55657","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMCG","CGROUP_HUGETLB"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_hugetlb_folio","hugetlb_reserve_pages","mem_cgroup_hugetlb_try_charge","mem_cgroup_hugetlb_commit_charge","mem_cgroup_hugetlb_cancel_charge","hugepage_subpool_get_pages","hugepage_subpool_put_pages","hugepage_new_subpool","hugepage_put_subpool"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"b95f03f04d475aa6719d15a636ddf32222d55657","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMCG","CGROUP_HUGETLB"],"series_id":"ebe23071-1bfc-48cc-b9a5-a087f5517dd5","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-07-21 18:09:05 +0000 UTC FinishedAt: 2026-07-21 23:14:32 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"b95f03f04d475aa6719d15a636ddf32222d55657","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMCG","CGROUP_HUGETLB"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_hugetlb_folio","hugetlb_reserve_pages","mem_cgroup_hugetlb_try_charge","mem_cgroup_hugetlb_commit_charge","mem_cgroup_hugetlb_cancel_charge","hugepage_subpool_get_pages","hugepage_subpool_put_pages","hugepage_new_subpool","hugepage_put_subpool"],"skip_cover_check":true},"patched":{"arch":"amd64","commit_hash":"b95f03f04d475aa6719d15a636ddf32222d55657","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMCG","CGROUP_HUGETLB"],"series_id":"ebe23071-1bfc-48cc-b9a5-a087f5517dd5","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowtd9d7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b95f03f04d475aa6719d15a636ddf32222d55657","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMCG","CGROUP_HUGETLB"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_hugetlb_folio","hugetlb_reserve_pages","mem_cgroup_hugetlb_try_charge","mem_cgroup_hugetlb_commit_charge","mem_cgroup_hugetlb_cancel_charge","hugepage_subpool_get_pages","hugepage_subpool_put_pages","hugepage_new_subpool","hugepage_put_subpool"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"b95f03f04d475aa6719d15a636ddf32222d55657","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMCG","CGROUP_HUGETLB"],"series_id":"ebe23071-1bfc-48cc-b9a5-a087f5517dd5","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-07-21 18:09:05 +0000 UTC FinishedAt: 2026-07-21 18:09:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtd9d7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b95f03f04d475aa6719d15a636ddf32222d55657","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMCG","CGROUP_HUGETLB"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_hugetlb_folio","hugetlb_reserve_pages","mem_cgroup_hugetlb_try_charge","mem_cgroup_hugetlb_commit_charge","mem_cgroup_hugetlb_cancel_charge","hugepage_subpool_get_pages","hugepage_subpool_put_pages","hugepage_new_subpool","hugepage_put_subpool"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"b95f03f04d475aa6719d15a636ddf32222d55657","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMCG","CGROUP_HUGETLB"],"series_id":"ebe23071-1bfc-48cc-b9a5-a087f5517dd5","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-07-21 18:09:05 +0000 UTC FinishedAt: 2026-07-21 18:09:12 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"b95f03f04d475aa6719d15a636ddf32222d55657","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMCG","CGROUP_HUGETLB"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},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-workflowtd9d7/series-workflowtd9d7-convert-artifact-2225842400/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowtd9d7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b95f03f04d475aa6719d15a636ddf32222d55657","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMCG","CGROUP_HUGETLB"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_hugetlb_folio","hugetlb_reserve_pages","mem_cgroup_hugetlb_try_charge","mem_cgroup_hugetlb_commit_charge","mem_cgroup_hugetlb_cancel_charge","hugepage_subpool_get_pages","hugepage_subpool_put_pages","hugepage_new_subpool","hugepage_put_subpool"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"b95f03f04d475aa6719d15a636ddf32222d55657","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMCG","CGROUP_HUGETLB"],"series_id":"ebe23071-1bfc-48cc-b9a5-a087f5517dd5","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-07-21 18:09:15 +0000 UTC FinishedAt: 2026-07-21 19:09:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtd9d7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b95f03f04d475aa6719d15a636ddf32222d55657","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMCG","CGROUP_HUGETLB"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_hugetlb_folio","hugetlb_reserve_pages","mem_cgroup_hugetlb_try_charge","mem_cgroup_hugetlb_commit_charge","mem_cgroup_hugetlb_cancel_charge","hugepage_subpool_get_pages","hugepage_subpool_put_pages","hugepage_new_subpool","hugepage_put_subpool"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"b95f03f04d475aa6719d15a636ddf32222d55657","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMCG","CGROUP_HUGETLB"],"series_id":"ebe23071-1bfc-48cc-b9a5-a087f5517dd5","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-07-21 18:09:15 +0000 UTC FinishedAt: 2026-07-21 19:09:08 +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:*3255707b-ee73-4802-a75c-2df514e0ebf6,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-workflowtd9d7/series-workflowtd9d7-convert-artifact-2225842400/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": "265f52cf-7f82-4bb9-9f61-f7b704af40bd", "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-workflowtd9d7/series-workflowtd9d7-build-action-2291406758/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowtd9d7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b95f03f04d475aa6719d15a636ddf32222d55657","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMCG","CGROUP_HUGETLB"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_hugetlb_folio","hugetlb_reserve_pages","mem_cgroup_hugetlb_try_charge","mem_cgroup_hugetlb_commit_charge","mem_cgroup_hugetlb_cancel_charge","hugepage_subpool_get_pages","hugepage_subpool_put_pages","hugepage_new_subpool","hugepage_put_subpool"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"b95f03f04d475aa6719d15a636ddf32222d55657","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMCG","CGROUP_HUGETLB"],"series_id":"ebe23071-1bfc-48cc-b9a5-a087f5517dd5","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-07-21 18:09:15 +0000 UTC FinishedAt: 2026-07-21 19:08:58 +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:*3255707b-ee73-4802-a75c-2df514e0ebf6,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-workflowtd9d7/series-workflowtd9d7-convert-artifact-2225842400/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": "265f52cf-7f82-4bb9-9f61-f7b704af40bd", "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-workflowtd9d7/series-workflowtd9d7-build-action-2291406758/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowtd9d7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b95f03f04d475aa6719d15a636ddf32222d55657","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMCG","CGROUP_HUGETLB"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_hugetlb_folio","hugetlb_reserve_pages","mem_cgroup_hugetlb_try_charge","mem_cgroup_hugetlb_commit_charge","mem_cgroup_hugetlb_cancel_charge","hugepage_subpool_get_pages","hugepage_subpool_put_pages","hugepage_new_subpool","hugepage_put_subpool"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"b95f03f04d475aa6719d15a636ddf32222d55657","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMCG","CGROUP_HUGETLB"],"series_id":"ebe23071-1bfc-48cc-b9a5-a087f5517dd5","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-07-21 19:09:08 +0000 UTC FinishedAt: 2026-07-21 19:09:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtd9d7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b95f03f04d475aa6719d15a636ddf32222d55657","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMCG","CGROUP_HUGETLB"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_hugetlb_folio","hugetlb_reserve_pages","mem_cgroup_hugetlb_try_charge","mem_cgroup_hugetlb_commit_charge","mem_cgroup_hugetlb_cancel_charge","hugepage_subpool_get_pages","hugepage_subpool_put_pages","hugepage_new_subpool","hugepage_put_subpool"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"b95f03f04d475aa6719d15a636ddf32222d55657","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMCG","CGROUP_HUGETLB"],"series_id":"ebe23071-1bfc-48cc-b9a5-a087f5517dd5","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-07-21 19:09:08 +0000 UTC FinishedAt: 2026-07-21 19:09:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtd9d7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b95f03f04d475aa6719d15a636ddf32222d55657","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMCG","CGROUP_HUGETLB"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_hugetlb_folio","hugetlb_reserve_pages","mem_cgroup_hugetlb_try_charge","mem_cgroup_hugetlb_commit_charge","mem_cgroup_hugetlb_cancel_charge","hugepage_subpool_get_pages","hugepage_subpool_put_pages","hugepage_new_subpool","hugepage_put_subpool"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"b95f03f04d475aa6719d15a636ddf32222d55657","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMCG","CGROUP_HUGETLB"],"series_id":"ebe23071-1bfc-48cc-b9a5-a087f5517dd5","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-07-21 19:09:08 +0000 UTC FinishedAt: 2026-07-21 19:09:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtd9d7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b95f03f04d475aa6719d15a636ddf32222d55657","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMCG","CGROUP_HUGETLB"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_hugetlb_folio","hugetlb_reserve_pages","mem_cgroup_hugetlb_try_charge","mem_cgroup_hugetlb_commit_charge","mem_cgroup_hugetlb_cancel_charge","hugepage_subpool_get_pages","hugepage_subpool_put_pages","hugepage_new_subpool","hugepage_put_subpool"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"b95f03f04d475aa6719d15a636ddf32222d55657","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMCG","CGROUP_HUGETLB"],"series_id":"ebe23071-1bfc-48cc-b9a5-a087f5517dd5","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-07-21 19:09:08 +0000 UTC FinishedAt: 2026-07-21 19:09:17 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"b95f03f04d475aa6719d15a636ddf32222d55657","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMCG","CGROUP_HUGETLB"],"series_id":"ebe23071-1bfc-48cc-b9a5-a087f5517dd5","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},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-workflowtd9d7/series-workflowtd9d7-convert-artifact-3546308103/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowtd9d7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b95f03f04d475aa6719d15a636ddf32222d55657","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMCG","CGROUP_HUGETLB"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_hugetlb_folio","hugetlb_reserve_pages","mem_cgroup_hugetlb_try_charge","mem_cgroup_hugetlb_commit_charge","mem_cgroup_hugetlb_cancel_charge","hugepage_subpool_get_pages","hugepage_subpool_put_pages","hugepage_new_subpool","hugepage_put_subpool"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"b95f03f04d475aa6719d15a636ddf32222d55657","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMCG","CGROUP_HUGETLB"],"series_id":"ebe23071-1bfc-48cc-b9a5-a087f5517dd5","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-07-21 19:09:30 +0000 UTC FinishedAt: 2026-07-21 19:11:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtd9d7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b95f03f04d475aa6719d15a636ddf32222d55657","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMCG","CGROUP_HUGETLB"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_hugetlb_folio","hugetlb_reserve_pages","mem_cgroup_hugetlb_try_charge","mem_cgroup_hugetlb_commit_charge","mem_cgroup_hugetlb_cancel_charge","hugepage_subpool_get_pages","hugepage_subpool_put_pages","hugepage_new_subpool","hugepage_put_subpool"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"b95f03f04d475aa6719d15a636ddf32222d55657","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMCG","CGROUP_HUGETLB"],"series_id":"ebe23071-1bfc-48cc-b9a5-a087f5517dd5","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-07-21 19:09:30 +0000 UTC FinishedAt: 2026-07-21 19:11:15 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*265f52cf-7f82-4bb9-9f61-f7b704af40bd,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-workflowtd9d7/series-workflowtd9d7-build-action-2291406758/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-workflowtd9d7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b95f03f04d475aa6719d15a636ddf32222d55657","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMCG","CGROUP_HUGETLB"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_hugetlb_folio","hugetlb_reserve_pages","mem_cgroup_hugetlb_try_charge","mem_cgroup_hugetlb_commit_charge","mem_cgroup_hugetlb_cancel_charge","hugepage_subpool_get_pages","hugepage_subpool_put_pages","hugepage_new_subpool","hugepage_put_subpool"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"b95f03f04d475aa6719d15a636ddf32222d55657","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMCG","CGROUP_HUGETLB"],"series_id":"ebe23071-1bfc-48cc-b9a5-a087f5517dd5","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-07-21 19:11:25 +0000 UTC FinishedAt: 2026-07-21 19:11:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtd9d7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b95f03f04d475aa6719d15a636ddf32222d55657","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMCG","CGROUP_HUGETLB"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_hugetlb_folio","hugetlb_reserve_pages","mem_cgroup_hugetlb_try_charge","mem_cgroup_hugetlb_commit_charge","mem_cgroup_hugetlb_cancel_charge","hugepage_subpool_get_pages","hugepage_subpool_put_pages","hugepage_new_subpool","hugepage_put_subpool"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"b95f03f04d475aa6719d15a636ddf32222d55657","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMCG","CGROUP_HUGETLB"],"series_id":"ebe23071-1bfc-48cc-b9a5-a087f5517dd5","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-07-21 19:11:25 +0000 UTC FinishedAt: 2026-07-21 19:11:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtd9d7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b95f03f04d475aa6719d15a636ddf32222d55657","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMCG","CGROUP_HUGETLB"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_hugetlb_folio","hugetlb_reserve_pages","mem_cgroup_hugetlb_try_charge","mem_cgroup_hugetlb_commit_charge","mem_cgroup_hugetlb_cancel_charge","hugepage_subpool_get_pages","hugepage_subpool_put_pages","hugepage_new_subpool","hugepage_put_subpool"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"b95f03f04d475aa6719d15a636ddf32222d55657","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMCG","CGROUP_HUGETLB"],"series_id":"ebe23071-1bfc-48cc-b9a5-a087f5517dd5","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-07-21 19:11:25 +0000 UTC FinishedAt: 2026-07-21 20:08:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtd9d7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b95f03f04d475aa6719d15a636ddf32222d55657","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMCG","CGROUP_HUGETLB"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_hugetlb_folio","hugetlb_reserve_pages","mem_cgroup_hugetlb_try_charge","mem_cgroup_hugetlb_commit_charge","mem_cgroup_hugetlb_cancel_charge","hugepage_subpool_get_pages","hugepage_subpool_put_pages","hugepage_new_subpool","hugepage_put_subpool"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"b95f03f04d475aa6719d15a636ddf32222d55657","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMCG","CGROUP_HUGETLB"],"series_id":"ebe23071-1bfc-48cc-b9a5-a087f5517dd5","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-07-21 19:11:25 +0000 UTC FinishedAt: 2026-07-21 20:08:31 +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:*3255707b-ee73-4802-a75c-2df514e0ebf6,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-workflowtd9d7/series-workflowtd9d7-convert-artifact-3546308103/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": "f462238f-41ba-4ec8-b256-822603d35fc3", "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-workflowtd9d7/series-workflowtd9d7-build-action-1643794315/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowtd9d7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b95f03f04d475aa6719d15a636ddf32222d55657","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMCG","CGROUP_HUGETLB"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_hugetlb_folio","hugetlb_reserve_pages","mem_cgroup_hugetlb_try_charge","mem_cgroup_hugetlb_commit_charge","mem_cgroup_hugetlb_cancel_charge","hugepage_subpool_get_pages","hugepage_subpool_put_pages","hugepage_new_subpool","hugepage_put_subpool"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"b95f03f04d475aa6719d15a636ddf32222d55657","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMCG","CGROUP_HUGETLB"],"series_id":"ebe23071-1bfc-48cc-b9a5-a087f5517dd5","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-07-21 19:11:25 +0000 UTC FinishedAt: 2026-07-21 20:08:21 +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:*3255707b-ee73-4802-a75c-2df514e0ebf6,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-workflowtd9d7/series-workflowtd9d7-convert-artifact-3546308103/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": "f462238f-41ba-4ec8-b256-822603d35fc3", "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-workflowtd9d7/series-workflowtd9d7-build-action-1643794315/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowtd9d7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b95f03f04d475aa6719d15a636ddf32222d55657","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMCG","CGROUP_HUGETLB"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_hugetlb_folio","hugetlb_reserve_pages","mem_cgroup_hugetlb_try_charge","mem_cgroup_hugetlb_commit_charge","mem_cgroup_hugetlb_cancel_charge","hugepage_subpool_get_pages","hugepage_subpool_put_pages","hugepage_new_subpool","hugepage_put_subpool"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"b95f03f04d475aa6719d15a636ddf32222d55657","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMCG","CGROUP_HUGETLB"],"series_id":"ebe23071-1bfc-48cc-b9a5-a087f5517dd5","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-07-21 20:08:31 +0000 UTC FinishedAt: 2026-07-21 20:08:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtd9d7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b95f03f04d475aa6719d15a636ddf32222d55657","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMCG","CGROUP_HUGETLB"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_hugetlb_folio","hugetlb_reserve_pages","mem_cgroup_hugetlb_try_charge","mem_cgroup_hugetlb_commit_charge","mem_cgroup_hugetlb_cancel_charge","hugepage_subpool_get_pages","hugepage_subpool_put_pages","hugepage_new_subpool","hugepage_put_subpool"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"b95f03f04d475aa6719d15a636ddf32222d55657","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMCG","CGROUP_HUGETLB"],"series_id":"ebe23071-1bfc-48cc-b9a5-a087f5517dd5","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-07-21 20:08:31 +0000 UTC FinishedAt: 2026-07-21 20:08:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtd9d7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b95f03f04d475aa6719d15a636ddf32222d55657","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMCG","CGROUP_HUGETLB"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_hugetlb_folio","hugetlb_reserve_pages","mem_cgroup_hugetlb_try_charge","mem_cgroup_hugetlb_commit_charge","mem_cgroup_hugetlb_cancel_charge","hugepage_subpool_get_pages","hugepage_subpool_put_pages","hugepage_new_subpool","hugepage_put_subpool"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"b95f03f04d475aa6719d15a636ddf32222d55657","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMCG","CGROUP_HUGETLB"],"series_id":"ebe23071-1bfc-48cc-b9a5-a087f5517dd5","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-07-21 20:08:31 +0000 UTC FinishedAt: 2026-07-21 20:10:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtd9d7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b95f03f04d475aa6719d15a636ddf32222d55657","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMCG","CGROUP_HUGETLB"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_hugetlb_folio","hugetlb_reserve_pages","mem_cgroup_hugetlb_try_charge","mem_cgroup_hugetlb_commit_charge","mem_cgroup_hugetlb_cancel_charge","hugepage_subpool_get_pages","hugepage_subpool_put_pages","hugepage_new_subpool","hugepage_put_subpool"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"b95f03f04d475aa6719d15a636ddf32222d55657","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMCG","CGROUP_HUGETLB"],"series_id":"ebe23071-1bfc-48cc-b9a5-a087f5517dd5","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-07-21 20:08:31 +0000 UTC FinishedAt: 2026-07-21 20:09:57 +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:*f462238f-41ba-4ec8-b256-822603d35fc3,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-workflowtd9d7/series-workflowtd9d7-build-action-1643794315/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-workflowtd9d7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b95f03f04d475aa6719d15a636ddf32222d55657","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMCG","CGROUP_HUGETLB"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_hugetlb_folio","hugetlb_reserve_pages","mem_cgroup_hugetlb_try_charge","mem_cgroup_hugetlb_commit_charge","mem_cgroup_hugetlb_cancel_charge","hugepage_subpool_get_pages","hugepage_subpool_put_pages","hugepage_new_subpool","hugepage_put_subpool"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"b95f03f04d475aa6719d15a636ddf32222d55657","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMCG","CGROUP_HUGETLB"],"series_id":"ebe23071-1bfc-48cc-b9a5-a087f5517dd5","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-07-21 20:10:07 +0000 UTC FinishedAt: 2026-07-21 23:14:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtd9d7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b95f03f04d475aa6719d15a636ddf32222d55657","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMCG","CGROUP_HUGETLB"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_hugetlb_folio","hugetlb_reserve_pages","mem_cgroup_hugetlb_try_charge","mem_cgroup_hugetlb_commit_charge","mem_cgroup_hugetlb_cancel_charge","hugepage_subpool_get_pages","hugepage_subpool_put_pages","hugepage_new_subpool","hugepage_put_subpool"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"b95f03f04d475aa6719d15a636ddf32222d55657","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMCG","CGROUP_HUGETLB"],"series_id":"ebe23071-1bfc-48cc-b9a5-a087f5517dd5","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-07-21 20:10:07 +0000 UTC FinishedAt: 2026-07-21 23:14:32 +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":["alloc_hugetlb_folio","hugetlb_reserve_pages","mem_cgroup_hugetlb_try_charge","mem_cgroup_hugetlb_commit_charge","mem_cgroup_hugetlb_cancel_charge","hugepage_subpool_get_pages","hugepage_subpool_put_pages","hugepage_new_subpool","hugepage_put_subpool"],"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:*265f52cf-7f82-4bb9-9f61-f7b704af40bd,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*f462238f-41ba-4ec8-b256-822603d35fc3,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-workflowtd9d7/series-workflowtd9d7-build-action-2291406758/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-workflowtd9d7/series-workflowtd9d7-build-action-1643794315/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowtd9d7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b95f03f04d475aa6719d15a636ddf32222d55657","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMCG","CGROUP_HUGETLB"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_hugetlb_folio","hugetlb_reserve_pages","mem_cgroup_hugetlb_try_charge","mem_cgroup_hugetlb_commit_charge","mem_cgroup_hugetlb_cancel_charge","hugepage_subpool_get_pages","hugepage_subpool_put_pages","hugepage_new_subpool","hugepage_put_subpool"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"b95f03f04d475aa6719d15a636ddf32222d55657","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMCG","CGROUP_HUGETLB"],"series_id":"ebe23071-1bfc-48cc-b9a5-a087f5517dd5","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-07-21 20:10:07 +0000 UTC FinishedAt: 2026-07-21 20:10:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtd9d7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b95f03f04d475aa6719d15a636ddf32222d55657","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMCG","CGROUP_HUGETLB"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_hugetlb_folio","hugetlb_reserve_pages","mem_cgroup_hugetlb_try_charge","mem_cgroup_hugetlb_commit_charge","mem_cgroup_hugetlb_cancel_charge","hugepage_subpool_get_pages","hugepage_subpool_put_pages","hugepage_new_subpool","hugepage_put_subpool"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"b95f03f04d475aa6719d15a636ddf32222d55657","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMCG","CGROUP_HUGETLB"],"series_id":"ebe23071-1bfc-48cc-b9a5-a087f5517dd5","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-07-21 20:10:07 +0000 UTC FinishedAt: 2026-07-21 20:10:48 +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":["alloc_hugetlb_folio","hugetlb_reserve_pages","mem_cgroup_hugetlb_try_charge","mem_cgroup_hugetlb_commit_charge","mem_cgroup_hugetlb_cancel_charge","hugepage_subpool_get_pages","hugepage_subpool_put_pages","hugepage_new_subpool","hugepage_put_subpool"],"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-workflowtd9d7/series-workflowtd9d7-convert-artifact-3275554784/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowtd9d7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b95f03f04d475aa6719d15a636ddf32222d55657","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMCG","CGROUP_HUGETLB"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_hugetlb_folio","hugetlb_reserve_pages","mem_cgroup_hugetlb_try_charge","mem_cgroup_hugetlb_commit_charge","mem_cgroup_hugetlb_cancel_charge","hugepage_subpool_get_pages","hugepage_subpool_put_pages","hugepage_new_subpool","hugepage_put_subpool"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"b95f03f04d475aa6719d15a636ddf32222d55657","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMCG","CGROUP_HUGETLB"],"series_id":"ebe23071-1bfc-48cc-b9a5-a087f5517dd5","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-07-21 20:10:07 +0000 UTC FinishedAt: 2026-07-21 20:10:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtd9d7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b95f03f04d475aa6719d15a636ddf32222d55657","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMCG","CGROUP_HUGETLB"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_hugetlb_folio","hugetlb_reserve_pages","mem_cgroup_hugetlb_try_charge","mem_cgroup_hugetlb_commit_charge","mem_cgroup_hugetlb_cancel_charge","hugepage_subpool_get_pages","hugepage_subpool_put_pages","hugepage_new_subpool","hugepage_put_subpool"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"b95f03f04d475aa6719d15a636ddf32222d55657","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMCG","CGROUP_HUGETLB"],"series_id":"ebe23071-1bfc-48cc-b9a5-a087f5517dd5","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-07-21 20:10:07 +0000 UTC FinishedAt: 2026-07-21 20:10:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtd9d7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b95f03f04d475aa6719d15a636ddf32222d55657","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMCG","CGROUP_HUGETLB"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_hugetlb_folio","hugetlb_reserve_pages","mem_cgroup_hugetlb_try_charge","mem_cgroup_hugetlb_commit_charge","mem_cgroup_hugetlb_cancel_charge","hugepage_subpool_get_pages","hugepage_subpool_put_pages","hugepage_new_subpool","hugepage_put_subpool"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"b95f03f04d475aa6719d15a636ddf32222d55657","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMCG","CGROUP_HUGETLB"],"series_id":"ebe23071-1bfc-48cc-b9a5-a087f5517dd5","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-07-21 20:10:07 +0000 UTC FinishedAt: 2026-07-21 20:10:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtd9d7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b95f03f04d475aa6719d15a636ddf32222d55657","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMCG","CGROUP_HUGETLB"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_hugetlb_folio","hugetlb_reserve_pages","mem_cgroup_hugetlb_try_charge","mem_cgroup_hugetlb_commit_charge","mem_cgroup_hugetlb_cancel_charge","hugepage_subpool_get_pages","hugepage_subpool_put_pages","hugepage_new_subpool","hugepage_put_subpool"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"b95f03f04d475aa6719d15a636ddf32222d55657","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMCG","CGROUP_HUGETLB"],"series_id":"ebe23071-1bfc-48cc-b9a5-a087f5517dd5","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-07-21 20:10:55 +0000 UTC FinishedAt: 2026-07-21 23:14:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtd9d7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b95f03f04d475aa6719d15a636ddf32222d55657","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMCG","CGROUP_HUGETLB"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_hugetlb_folio","hugetlb_reserve_pages","mem_cgroup_hugetlb_try_charge","mem_cgroup_hugetlb_commit_charge","mem_cgroup_hugetlb_cancel_charge","hugepage_subpool_get_pages","hugepage_subpool_put_pages","hugepage_new_subpool","hugepage_put_subpool"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"b95f03f04d475aa6719d15a636ddf32222d55657","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMCG","CGROUP_HUGETLB"],"series_id":"ebe23071-1bfc-48cc-b9a5-a087f5517dd5","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-07-21 20:10:55 +0000 UTC FinishedAt: 2026-07-21 23:14:22 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*265f52cf-7f82-4bb9-9f61-f7b704af40bd,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*f462238f-41ba-4ec8-b256-822603d35fc3,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-workflowtd9d7/series-workflowtd9d7-build-action-2291406758/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-workflowtd9d7/series-workflowtd9d7-build-action-1643794315/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-workflowtd9d7/series-workflowtd9d7-convert-artifact-3275554784/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,}