Name: series-workflowspcrt Phase: Succeeded StartedAt: 2026-08-04 13:58:43 +0000 UTC FinishedAt: 2026-08-04 17:51:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowspcrt[0] Phase: Succeeded StartedAt: 2026-08-04 13:58:43 +0000 UTC FinishedAt: 2026-08-04 14:12:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflowspcrt[0].run-triage Phase: Succeeded StartedAt: 2026-08-04 13:58:43 +0000 UTC FinishedAt: 2026-08-04 14:12:45 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "bpf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git", "commit_hash": "60781269e26c786de2bb93fb1e697a5c32ccee48", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "bpf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git", "commit_hash": "60781269e26c786de2bb93fb1e697a5c32ccee48", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL" ], "series_id": "89768380-1fa3-44a6-b82b-d862d1d779cb" }, "track": "KASAN", "fuzz": { "focus": [ "bpf" ], "focus_symbols": [ "bpf_fixup_kfunc_call", "bpf_iter_num_new", "bpf_iter_num_next", "bpf_iter_num_destroy" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDE0OjAwPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MTFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCUEZfU1lTQ0FMTCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2JwZl9maXh1cF9rZnVuY19jYWxsJiMzNDssCiAgICAmIzM0O2JwZl9pdGVyX251bV9uZXcmIzM0OywKICAgICYjMzQ7YnBmX2l0ZXJfbnVtX25leHQmIzM0OywKICAgICYjMzQ7YnBmX2l0ZXJfbnVtX2Rlc3Ryb3kmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGltcGxlbWVudGF0aW9uIG9mIEJQRiBudW1lcmljIGl0ZXJhdG9ycyAoYGJwZl9pdGVyX251bV9uZXdgLCBgYnBmX2l0ZXJfbnVtX25leHRgLCBgYnBmX2l0ZXJfbnVtX2Rlc3Ryb3lgKSBhbmQgYWRkcyBpbmxpbmluZyBmb3IgdGhlc2Uga2Z1bmNzIGluIHRoZSBCUEYgdmVyaWZpZXIgKGBicGZfZml4dXBfa2Z1bmNfY2FsbGApLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBjb3JlIEJQRiBzdWJzeXN0ZW0gYW5kIHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMTQ6MDA8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBiZTVkZGY2MmJlNmIxOTEzNzhjMWYwNjIwYWJkOTY5OGYyMjgyMjA0XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBBdWcgNCAxNDowMDo0MiAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL2JwZl9pdGVyLmMgYi9rZXJuZWwvYnBmL2JwZl9pdGVyLmNcbmluZGV4IGY1ZWFlYjI0OTNkNGEuLjE0YTVmZGZhMDQyMTQgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvYnBmL2JwZl9pdGVyLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9icGYvYnBmX2l0ZXIuY1xuQEAgLTc4Miw4ICYjNDM7NzgyLDggQEAgX19icGZfa2Z1bmMgaW50IGJwZl9pdGVyX251bV9uZXcoc3RydWN0IGJwZl9pdGVyX251bSAqaXQsIGludCBzdGFydCwgaW50IGVuZClcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHR9XG4gXG4tXHQvKiBhdm9pZCBvdmVyZmxvd3MsIGUuZy4sIGlmIHN0YXJ0ID09IElOVF9NSU4gYW5kIGVuZCA9PSBJTlRfTUFYICovXG4tXHRpZiAoKHM2NCllbmQgLSAoczY0KXN0YXJ0IFx1MDAzZSBCUEZfTUFYX0xPT1BTKSB7XG4mIzQzO1x0Lyogc3RhcnQgXHUwMDNjPSBlbmQgaGVyZSwgc28gZW5kIC0gc3RhcnQgZml0cyBpbiBhIHUzMiB3aXRob3V0IG92ZXJmbG93ICovXG4mIzQzO1x0aWYgKCh1MzIpKGVuZCAtIHN0YXJ0KSBcdTAwM2UgQlBGX01BWF9MT09QUykge1xuIFx0XHRzLVx1MDAzZWN1ciA9IHMtXHUwMDNlZW5kID0gMDtcbiBcdFx0cmV0dXJuIC1FMkJJRztcbiBcdH1cbkBAIC04MDIsMTIgJiM0Mzs4MDIsMTEgQEAgX19icGZfa2Z1bmMgaW50ICpicGZfaXRlcl9udW1fbmV4dChzdHJ1Y3QgYnBmX2l0ZXJfbnVtKiBpdClcbiB7XG4gXHRzdHJ1Y3QgYnBmX2l0ZXJfbnVtX2tlcm4gKnMgPSAodm9pZCAqKWl0O1xuIFxuLVx0LyogY2hlY2sgZmFpbGVkIGluaXRpYWxpemF0aW9uIG9yIGlmIHdlIGFyZSBkb25lIChzYW1lIGJlaGF2aW9yKTtcbi1cdCAqIG5lZWQgdG8gYmUgY2FyZWZ1bCBhYm91dCBvdmVyZmxvdywgc28gY29udmVydCB0byBzNjQgZm9yIGNoZWNrcyxcbi1cdCAqIGUuZy4sIGlmIHMtXHUwMDNlY3VyID09IHMtXHUwMDNlZW5kID09IElOVF9NQVgsIHdlIGNhbiYjMzk7dCBqdXN0IGRvXG4tXHQgKiBzLVx1MDAzZWN1ciAmIzQzOyAxIFx1MDAzZT0gcy1cdTAwM2VlbmRcbiYjNDM7XHQvKlxuJiM0MztcdCAqIHMtXHUwMDNlY3VyIFx1MDAzYyBzLVx1MDAzZWVuZCB3aGlsZSBpdGVyYXRpbmcsIGVsc2Ugcy1cdTAwM2VjdXIgPT0gcy1cdTAwM2VlbmQgPT0gMDsgdGhlIHNpZ25lZFxuJiM0MztcdCAqIHMtXHUwMDNlY3VyICYjNDM7IDEgXHUwMDNlPSBzLVx1MDAzZWVuZCBob2xkcyBldmVuIHdoZW4gcy1cdTAwM2VjdXIgJiM0MzsgMSB3cmFwcyAoc3RhcnQgPT0gSU5UX01JTikuXG4gXHQgKi9cbi1cdGlmICgoczY0KShzLVx1MDAzZWN1ciAmIzQzOyAxKSBcdTAwM2U9IHMtXHUwMDNlZW5kKSB7XG4mIzQzO1x0aWYgKHMtXHUwMDNlY3VyICYjNDM7IDEgXHUwMDNlPSBzLVx1MDAzZWVuZCkge1xuIFx0XHRzLVx1MDAzZWN1ciA9IHMtXHUwMDNlZW5kID0gMDtcbiBcdFx0cmV0dXJuIE5VTEw7XG4gXHR9XG5AQCAtODE5LDkgJiM0Mzs4MTgsNyBAQCBfX2JwZl9rZnVuYyBpbnQgKmJwZl9pdGVyX251bV9uZXh0KHN0cnVjdCBicGZfaXRlcl9udW0qIGl0KVxuIFxuIF9fYnBmX2tmdW5jIHZvaWQgYnBmX2l0ZXJfbnVtX2Rlc3Ryb3koc3RydWN0IGJwZl9pdGVyX251bSAqaXQpXG4ge1xuLVx0c3RydWN0IGJwZl9pdGVyX251bV9rZXJuICpzID0gKHZvaWQgKilpdDtcbi1cbi1cdHMtXHUwMDNlY3VyID0gcy1cdTAwM2VlbmQgPSAwO1xuJiM0MztcdC8qIG5vLW9wICovXG4gfVxuIFxuIF9fYnBmX2tmdW5jX2VuZF9kZWZzKCk7XG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi92ZXJpZmllci5jIGIva2VybmVsL2JwZi92ZXJpZmllci5jXG5pbmRleCBiMjc0MDA0ZmNjZmQ5Li4zZTQ0YjAyMDU3NTZhIDEwMDY0NFxuLS0tIGEva2VybmVsL2JwZi92ZXJpZmllci5jXG4mIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvYnBmL3ZlcmlmaWVyLmNcbkBAIC0yMDAwMSw2ICYjNDM7MjAwMDEsNTEgQEAgaW50IGJwZl9maXh1cF9rZnVuY19jYWxsKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfaW5zbiAqaW5zbixcbiBcdFx0aW5zbl9idWZbNF0gPSBCUEZfQUxVNjRfUkVHKEJQRl9TVUIsIEJQRl9SRUdfMCwgQlBGX1JFR18xKTtcbiBcdFx0aW5zbl9idWZbNV0gPSBCUEZfQUxVNjRfSU1NKEJQRl9ORUcsIEJQRl9SRUdfMCwgMCk7XG4gXHRcdCpjbnQgPSA2O1xuJiM0MztcdH0gZWxzZSBpZiAoZGVzYy1cdTAwM2VmdW5jX2lkID09IHNwZWNpYWxfa2Z1bmNfbGlzdFtLRl9icGZfaXRlcl9udW1fbmV3XSkge1xuJiM0MztcdFx0LyogaW5saW5lIGJwZl9pdGVyX251bV9uZXcoXHUwMDI2aXQsIHN0YXJ0LCBlbmQpOyBSMT1cdTAwMjZpdCwgUjI9c3RhcnQsIFIzPWVuZCAqL1xuJiM0MztcdFx0aW50IGkgPSAwO1xuJiM0MztcbiYjNDM7XHRcdC8qIGlmIChzdGFydCBcdTAwM2UgZW5kKSBnb3RvIGVpbnZhbDsgKi9cbiYjNDM7XHRcdGluc25fYnVmW2kmIzQzOyYjNDM7XSA9IEJQRl9KTVAzMl9SRUcoQlBGX0pTR1QsIEJQRl9SRUdfMiwgQlBGX1JFR18zLCA4KTtcbiYjNDM7XHRcdC8qIHIwID0gKHUzMillbmQgLSAodTMyKXN0YXJ0OyBpZiAocjAgXHUwMDNlIEJQRl9NQVhfTE9PUFMpIGdvdG8gZTJiaWc7ICovXG4mIzQzO1x0XHRpbnNuX2J1ZltpJiM0MzsmIzQzO10gPSBCUEZfTU9WMzJfUkVHKEJQRl9SRUdfMCwgQlBGX1JFR18zKTtcbiYjNDM7XHRcdGluc25fYnVmW2kmIzQzOyYjNDM7XSA9IEJQRl9BTFUzMl9SRUcoQlBGX1NVQiwgQlBGX1JFR18wLCBCUEZfUkVHXzIpO1xuJiM0MztcdFx0aW5zbl9idWZbaSYjNDM7JiM0MztdID0gQlBGX0pNUF9JTU0oQlBGX0pHVCwgQlBGX1JFR18wLCBCUEZfTUFYX0xPT1BTLCA4KTtcbiYjNDM7XHRcdC8qIHMtXHUwMDNlY3VyID0gc3RhcnQgLSAxOyBzLVx1MDAzZWVuZCA9IGVuZDsgcmV0dXJuIDA7ICovXG4mIzQzO1x0XHRpbnNuX2J1ZltpJiM0MzsmIzQzO10gPSBCUEZfQUxVMzJfSU1NKEJQRl9BREQsIEJQRl9SRUdfMiwgLTEpO1xuJiM0MztcdFx0aW5zbl9idWZbaSYjNDM7JiM0MztdID0gQlBGX1NUWF9NRU0oQlBGX1csIEJQRl9SRUdfMSwgQlBGX1JFR18yLCAwKTtcbiYjNDM7XHRcdGluc25fYnVmW2kmIzQzOyYjNDM7XSA9IEJQRl9TVFhfTUVNKEJQRl9XLCBCUEZfUkVHXzEsIEJQRl9SRUdfMywgNCk7XG4mIzQzO1x0XHRpbnNuX2J1ZltpJiM0MzsmIzQzO10gPSBCUEZfTU9WNjRfSU1NKEJQRl9SRUdfMCwgMCk7XG4mIzQzO1x0XHRpbnNuX2J1ZltpJiM0MzsmIzQzO10gPSBCUEZfSk1QX0EoNSk7XG4mIzQzO1x0XHQvKiBlaW52YWw6IHMtXHUwMDNlY3VyID0gcy1cdTAwM2VlbmQgPSAwOyByZXR1cm4gLUVJTlZBTDsgKi9cbiYjNDM7XHRcdGluc25fYnVmW2kmIzQzOyYjNDM7XSA9IEJQRl9TVF9NRU0oQlBGX0RXLCBCUEZfUkVHXzEsIDAsIDApO1xuJiM0MztcdFx0aW5zbl9idWZbaSYjNDM7JiM0MztdID0gQlBGX01PVjY0X0lNTShCUEZfUkVHXzAsIC1FSU5WQUwpO1xuJiM0MztcdFx0aW5zbl9idWZbaSYjNDM7JiM0MztdID0gQlBGX0pNUF9BKDIpO1xuJiM0MztcdFx0LyogZTJiaWc6IHMtXHUwMDNlY3VyID0gcy1cdTAwM2VlbmQgPSAwOyByZXR1cm4gLUUyQklHOyAqL1xuJiM0MztcdFx0aW5zbl9idWZbaSYjNDM7JiM0MztdID0gQlBGX1NUX01FTShCUEZfRFcsIEJQRl9SRUdfMSwgMCwgMCk7XG4mIzQzO1x0XHRpbnNuX2J1ZltpJiM0MzsmIzQzO10gPSBCUEZfTU9WNjRfSU1NKEJQRl9SRUdfMCwgLUUyQklHKTtcbiYjNDM7XHRcdCpjbnQgPSBpO1xuJiM0MztcdH0gZWxzZSBpZiAoZGVzYy1cdTAwM2VmdW5jX2lkID09IHNwZWNpYWxfa2Z1bmNfbGlzdFtLRl9icGZfaXRlcl9udW1fbmV4dF0pIHtcbiYjNDM7XHRcdC8qIGlubGluZSBicGZfaXRlcl9udW1fbmV4dChcdTAwMjZpdCk7IFIxPVx1MDAyNml0LCByZXR1cm5zIFx1MDAyNnMtXHUwMDNlY3VyIG9yIE5VTEwgKi9cbiYjNDM7XHRcdGludCBpID0gMDtcbiYjNDM7XG4mIzQzO1x0XHQvKiByMCA9IHMtXHUwMDNlY3VyICYjNDM7IDE7IGlmICgoczMyKXIwIFx1MDAzZT0gcy1cdTAwM2VlbmQpIGdvdG8gZG9uZTsgKi9cbiYjNDM7XHRcdGluc25fYnVmW2kmIzQzOyYjNDM7XSA9IEJQRl9MRFhfTUVNKEJQRl9XLCBCUEZfUkVHXzAsIEJQRl9SRUdfMSwgMCk7XG4mIzQzO1x0XHRpbnNuX2J1ZltpJiM0MzsmIzQzO10gPSBCUEZfQUxVMzJfSU1NKEJQRl9BREQsIEJQRl9SRUdfMCwgMSk7XG4mIzQzO1x0XHRpbnNuX2J1ZltpJiM0MzsmIzQzO10gPSBCUEZfTERYX01FTShCUEZfVywgQlBGX1JFR18yLCBCUEZfUkVHXzEsIDQpO1xuJiM0MztcdFx0aW5zbl9idWZbaSYjNDM7JiM0MztdID0gQlBGX0pNUDMyX1JFRyhCUEZfSlNHRSwgQlBGX1JFR18wLCBCUEZfUkVHXzIsIDMpO1xuJiM0MztcdFx0Lyogcy1cdTAwM2VjdXIgPSByMDsgcmV0dXJuIFx1MDAyNnMtXHUwMDNlY3VyOyAqL1xuJiM0MztcdFx0aW5zbl9idWZbaSYjNDM7JiM0MztdID0gQlBGX1NUWF9NRU0oQlBGX1csIEJQRl9SRUdfMSwgQlBGX1JFR18wLCAwKTtcbiYjNDM7XHRcdGluc25fYnVmW2kmIzQzOyYjNDM7XSA9IEJQRl9NT1Y2NF9SRUcoQlBGX1JFR18wLCBCUEZfUkVHXzEpO1xuJiM0MztcdFx0aW5zbl9idWZbaSYjNDM7JiM0MztdID0gQlBGX0pNUF9BKDIpO1xuJiM0MztcdFx0LyogZG9uZTogcy1cdTAwM2VjdXIgPSBzLVx1MDAzZWVuZCA9IDA7IHJldHVybiBOVUxMOyAqL1xuJiM0MztcdFx0aW5zbl9idWZbaSYjNDM7JiM0MztdID0gQlBGX1NUX01FTShCUEZfRFcsIEJQRl9SRUdfMSwgMCwgMCk7XG4mIzQzO1x0XHRpbnNuX2J1ZltpJiM0MzsmIzQzO10gPSBCUEZfTU9WNjRfSU1NKEJQRl9SRUdfMCwgMCk7XG4mIzQzO1x0XHQqY250ID0gaTtcbiYjNDM7XHR9IGVsc2UgaWYgKGRlc2MtXHUwMDNlZnVuY19pZCA9PSBzcGVjaWFsX2tmdW5jX2xpc3RbS0ZfYnBmX2l0ZXJfbnVtX2Rlc3Ryb3ldKSB7XG4mIzQzO1x0XHQvKiBicGZfaXRlcl9udW1fZGVzdHJveSgpIGlzIGEgbm8tb3A7IGVtaXQgYSBub3AgdG8gZHJvcCB0aGUgY2FsbCAqL1xuJiM0MztcdFx0aW5zbl9idWZbMF0gPSBCUEZfSk1QX0EoMCk7XG4mIzQzO1x0XHQqY250ID0gMTtcbiBcdH1cbiBcbiBcdGlmIChlbnYtXHUwMDNlaW5zbl9hdXhfZGF0YVtpbnNuX2lkeF0uYXJnX3Byb2cpIHtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvTWFrZWZpbGUgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvTWFrZWZpbGVcbmluZGV4IDU1ZDM5NDQzODcwNWEuLjMxNzRjMmYxOGU3MTUgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvTWFrZWZpbGVcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9NYWtlZmlsZVxuQEAgLTk2NSw2ICYjNDM7OTY1LDcgQEAgJChPVVRQVVQpL2JlbmNoX3JpbmdidWZzLm86ICQoT1VUUFVUKS9yaW5nYnVmX2JlbmNoLnNrZWwuaCBcXFxuIFx0XHRcdCAgICAkKE9VVFBVVCkvcGVyZmJ1Zl9iZW5jaC5za2VsLmhcbiAkKE9VVFBVVCkvYmVuY2hfYmxvb21fZmlsdGVyX21hcC5vOiAkKE9VVFBVVCkvYmxvb21fZmlsdGVyX2JlbmNoLnNrZWwuaFxuICQoT1VUUFVUKS9iZW5jaF9icGZfbG9vcC5vOiAkKE9VVFBVVCkvYnBmX2xvb3BfYmVuY2guc2tlbC5oXG4mIzQzOyQoT1VUUFVUKS9iZW5jaF9icGZfZm9yLm86ICQoT1VUUFVUKS9icGZfZm9yX2JlbmNoLnNrZWwuaFxuICQoT1VUUFVUKS9iZW5jaF9zdHJuY21wLm86ICQoT1VUUFVUKS9zdHJuY21wX2JlbmNoLnNrZWwuaFxuICQoT1VUUFVUKS9iZW5jaF9icGZfaGFzaG1hcF9mdWxsX3VwZGF0ZS5vOiAkKE9VVFBVVCkvYnBmX2hhc2htYXBfZnVsbF91cGRhdGVfYmVuY2guc2tlbC5oXG4gJChPVVRQVVQpL2JlbmNoX2xvY2FsX3N0b3JhZ2UubzogJChPVVRQVVQpL2xvY2FsX3N0b3JhZ2VfYmVuY2guc2tlbC5oXG5AQCAtOTkwLDYgJiM0Mzs5OTEsNyBAQCAkKE9VVFBVVCkvYmVuY2g6ICQoT1VUUFVUKS9iZW5jaC5vIFxcXG4gXHRcdCAkKE9VVFBVVCkvYmVuY2hfcmluZ2J1ZnMubyBcXFxuIFx0XHQgJChPVVRQVVQpL2JlbmNoX2Jsb29tX2ZpbHRlcl9tYXAubyBcXFxuIFx0XHQgJChPVVRQVVQpL2JlbmNoX2JwZl9sb29wLm8gXFxcbiYjNDM7XHRcdCAkKE9VVFBVVCkvYmVuY2hfYnBmX2Zvci5vIFxcXG4gXHRcdCAkKE9VVFBVVCkvYmVuY2hfc3RybmNtcC5vIFxcXG4gXHRcdCAkKE9VVFBVVCkvYmVuY2hfYnBmX2hhc2htYXBfZnVsbF91cGRhdGUubyBcXFxuIFx0XHQgJChPVVRQVVQpL2JlbmNoX2xvY2FsX3N0b3JhZ2UubyBcXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9iZW5jaC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JlbmNoLmNcbmluZGV4IDNkOWQyY2Q3NzY0YmQuLmI4NmI3MzQ1NmQzY2EgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYmVuY2guY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JlbmNoLmNcbkBAIC0yNzYsNiAmIzQzOzI3Niw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYXJncF9vcHRpb24gb3B0c1tdID0ge1xuIGV4dGVybiBzdHJ1Y3QgYXJncCBiZW5jaF9yaW5nYnVmc19hcmdwO1xuIGV4dGVybiBzdHJ1Y3QgYXJncCBiZW5jaF9ibG9vbV9tYXBfYXJncDtcbiBleHRlcm4gc3RydWN0IGFyZ3AgYmVuY2hfYnBmX2xvb3BfYXJncDtcbiYjNDM7ZXh0ZXJuIHN0cnVjdCBhcmdwIGJlbmNoX2JwZl9mb3JfYXJncDtcbiBleHRlcm4gc3RydWN0IGFyZ3AgYmVuY2hfbG9jYWxfc3RvcmFnZV9hcmdwO1xuIGV4dGVybiBzdHJ1Y3QgYXJncCBiZW5jaF9sb2NhbF9zdG9yYWdlX3JjdV90YXNrc190cmFjZV9hcmdwO1xuIGV4dGVybiBzdHJ1Y3QgYXJncCBiZW5jaF9zdHJuY21wX2FyZ3A7XG5AQCAtMjkyLDYgJiM0MzsyOTMsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGFyZ3BfY2hpbGQgYmVuY2hfcGFyc2Vyc1tdID0ge1xuIFx0eyBcdTAwMjZiZW5jaF9yaW5nYnVmc19hcmdwLCAwLCBcJiMzNDtSaW5nIGJ1ZmZlcnMgYmVuY2htYXJrXCYjMzQ7LCAwIH0sXG4gXHR7IFx1MDAyNmJlbmNoX2Jsb29tX21hcF9hcmdwLCAwLCBcJiMzNDtCbG9vbSBmaWx0ZXIgbWFwIGJlbmNobWFya1wmIzM0OywgMCB9LFxuIFx0eyBcdTAwMjZiZW5jaF9icGZfbG9vcF9hcmdwLCAwLCBcJiMzNDticGZfbG9vcCBoZWxwZXIgYmVuY2htYXJrXCYjMzQ7LCAwIH0sXG4mIzQzO1x0eyBcdTAwMjZiZW5jaF9icGZfZm9yX2FyZ3AsIDAsIFwmIzM0O2JwZl9mb3IgbG9vcCBiZW5jaG1hcmtcJiMzNDssIDAgfSxcbiBcdHsgXHUwMDI2YmVuY2hfbG9jYWxfc3RvcmFnZV9hcmdwLCAwLCBcJiMzNDtsb2NhbF9zdG9yYWdlIGJlbmNobWFya1wmIzM0OywgMCB9LFxuIFx0eyBcdTAwMjZiZW5jaF9zdHJuY21wX2FyZ3AsIDAsIFwmIzM0O2JwZl9zdHJuY21wIGhlbHBlciBiZW5jaG1hcmtcJiMzNDssIDAgfSxcbiBcdHsgXHUwMDI2YmVuY2hfbG9jYWxfc3RvcmFnZV9yY3VfdGFza3NfdHJhY2VfYXJncCwgMCxcbkBAIC01NTcsNiAmIzQzOzU1OSw3IEBAIGV4dGVybiBjb25zdCBzdHJ1Y3QgYmVuY2ggYmVuY2hfYmxvb21fZmFsc2VfcG9zaXRpdmU7XG4gZXh0ZXJuIGNvbnN0IHN0cnVjdCBiZW5jaCBiZW5jaF9oYXNobWFwX3dpdGhvdXRfYmxvb207XG4gZXh0ZXJuIGNvbnN0IHN0cnVjdCBiZW5jaCBiZW5jaF9oYXNobWFwX3dpdGhfYmxvb207XG4gZXh0ZXJuIGNvbnN0IHN0cnVjdCBiZW5jaCBiZW5jaF9icGZfbG9vcDtcbiYjNDM7ZXh0ZXJuIGNvbnN0IHN0cnVjdCBiZW5jaCBiZW5jaF9icGZfZm9yO1xuIGV4dGVybiBjb25zdCBzdHJ1Y3QgYmVuY2ggYmVuY2hfc3RybmNtcF9ub19oZWxwZXI7XG4gZXh0ZXJuIGNvbnN0IHN0cnVjdCBiZW5jaCBiZW5jaF9zdHJuY21wX2hlbHBlcjtcbiBleHRlcm4gY29uc3Qgc3RydWN0IGJlbmNoIGJlbmNoX2JwZl9oYXNobWFwX2Z1bGxfdXBkYXRlO1xuQEAgLTY0MCw2ICYjNDM7NjQzLDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBiZW5jaCAqYmVuY2hzW10gPSB7XG4gXHRcdTAwMjZiZW5jaF9oYXNobWFwX3dpdGhvdXRfYmxvb20sXG4gXHRcdTAwMjZiZW5jaF9oYXNobWFwX3dpdGhfYmxvb20sXG4gXHRcdTAwMjZiZW5jaF9icGZfbG9vcCxcbiYjNDM7XHRcdTAwMjZiZW5jaF9icGZfZm9yLFxuIFx0XHUwMDI2YmVuY2hfc3RybmNtcF9ub19oZWxwZXIsXG4gXHRcdTAwMjZiZW5jaF9zdHJuY21wX2hlbHBlcixcbiBcdFx1MDAyNmJlbmNoX2JwZl9oYXNobWFwX2Z1bGxfdXBkYXRlLFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9iZW5jaHMvYmVuY2hfYnBmX2Zvci5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JlbmNocy9iZW5jaF9icGZfZm9yLmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwLi43MzBjNTFhZDJkZWMzXG4tLS0gL2Rldi9udWxsXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYmVuY2hzL2JlbmNoX2JwZl9mb3IuY1xuQEAgLTAsMCAmIzQzOzEsMTA0IEBAXG4mIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4mIzQzOy8qIENvcHlyaWdodCAoYykgMjAyNiBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy4gKi9cbiYjNDM7XG4mIzQzOyNpbmNsdWRlIFx1MDAzY2FyZ3AuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcJiMzNDtiZW5jaC5oXCYjMzQ7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O2JwZl9mb3JfYmVuY2guc2tlbC5oXCYjMzQ7XG4mIzQzO1xuJiM0MzsvKiBCUEYgdHJpZ2dlcmluZyBiZW5jaG1hcmtzICovXG4mIzQzO3N0YXRpYyBzdHJ1Y3QgY3R4IHtcbiYjNDM7XHRzdHJ1Y3QgYnBmX2Zvcl9iZW5jaCAqc2tlbDtcbiYjNDM7fSBjdHg7XG4mIzQzO1xuJiM0MztzdGF0aWMgc3RydWN0IHtcbiYjNDM7XHRfX3UzMiBucl9sb29wcztcbiYjNDM7fSBhcmdzID0ge1xuJiM0MztcdC8qXG4mIzQzO1x0ICogRGVmYXVsdCB0byBhIGxhcmdlIGxvb3AgY291bnQgc28gdGhlIHBlci1pdGVyYXRpb24gYnBmX2l0ZXJfbnVtX25leHQoKSBjb3N0IGRvbWluYXRlc1xuJiM0MztcdCAqIHRoZSBvbmUtdGltZSBicGZfaXRlcl9udW1fbmV3KCkvZGVzdHJveSgpIHNldHVwIGFuZCB0ZWFyZG93bi5cbiYjNDM7XHQgKi9cbiYjNDM7XHQubnJfbG9vcHMgPSAxMDAwLFxuJiM0Mzt9O1xuJiM0MztcbiYjNDM7ZW51bSB7XG4mIzQzO1x0QVJHX05SX0xPT1BTID0gNDAwMCxcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3QgYXJncF9vcHRpb24gb3B0c1tdID0ge1xuJiM0MztcdHsgXCYjMzQ7bnJfbG9vcHNcJiMzNDssIEFSR19OUl9MT09QUywgXCYjMzQ7bnJfbG9vcHNcJiMzNDssIDAsXG4mIzQzO1x0XHRcJiMzNDtTZXQgbnVtYmVyIG9mIGl0ZXJhdGlvbnMgZm9yIHRoZSBicGZfZm9yKCkgbG9vcFwmIzM0O30sXG4mIzQzO1x0e30sXG4mIzQzO307XG4mIzQzO1xuJiM0MztzdGF0aWMgZXJyb3JfdCBwYXJzZV9hcmcoaW50IGtleSwgY2hhciAqYXJnLCBzdHJ1Y3QgYXJncF9zdGF0ZSAqc3RhdGUpXG4mIzQzO3tcbiYjNDM7XHRzd2l0Y2ggKGtleSkge1xuJiM0MztcdGNhc2UgQVJHX05SX0xPT1BTOlxuJiM0MztcdFx0YXJncy5ucl9sb29wcyA9IHN0cnRvbChhcmcsIE5VTEwsIDEwKTtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdGRlZmF1bHQ6XG4mIzQzO1x0XHRyZXR1cm4gQVJHUF9FUlJfVU5LTk9XTjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKiBleHBvcnRlZCBpbnRvIGJlbmNobWFyayBydW5uZXIgKi9cbiYjNDM7Y29uc3Qgc3RydWN0IGFyZ3AgYmVuY2hfYnBmX2Zvcl9hcmdwID0ge1xuJiM0MztcdC5vcHRpb25zID0gb3B0cyxcbiYjNDM7XHQucGFyc2VyID0gcGFyc2VfYXJnLFxuJiM0Mzt9O1xuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgdmFsaWRhdGUodm9pZClcbiYjNDM7e1xuJiM0MztcdGlmIChlbnYuY29uc3VtZXJfY250ICE9IDApIHtcbiYjNDM7XHRcdGZwcmludGYoc3RkZXJyLCBcJiMzNDtiZW5jaG1hcmsgZG9lc24mIzM5O3Qgc3VwcG9ydCBjb25zdW1lciFcXG5cJiMzNDspO1xuJiM0MztcdFx0ZXhpdCgxKTtcbiYjNDM7XHR9XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkICpwcm9kdWNlcih2b2lkICppbnB1dClcbiYjNDM7e1xuJiM0MztcdHdoaWxlICh0cnVlKVxuJiM0MztcdFx0LyogdHJpZ2dlciB0aGUgYnBmIHByb2dyYW0gKi9cbiYjNDM7XHRcdHN5c2NhbGwoX19OUl9nZXRwZ2lkKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIE5VTEw7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIG1lYXN1cmUoc3RydWN0IGJlbmNoX3JlcyAqcmVzKVxuJiM0Mzt7XG4mIzQzO1x0cmVzLVx1MDAzZWhpdHMgPSBhdG9taWNfc3dhcChcdTAwMjZjdHguc2tlbC1cdTAwM2Vic3MtXHUwMDNlaGl0cywgMCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIHNldHVwKHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgYnBmX2xpbmsgKmxpbms7XG4mIzQzO1xuJiM0MztcdHNldHVwX2xpYmJwZigpO1xuJiM0MztcbiYjNDM7XHRjdHguc2tlbCA9IGJwZl9mb3JfYmVuY2hfX29wZW5fYW5kX2xvYWQoKTtcbiYjNDM7XHRpZiAoIWN0eC5za2VsKSB7XG4mIzQzO1x0XHRmcHJpbnRmKHN0ZGVyciwgXCYjMzQ7ZmFpbGVkIHRvIG9wZW4gc2tlbGV0b25cXG5cJiMzNDspO1xuJiM0MztcdFx0ZXhpdCgxKTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGxpbmsgPSBicGZfcHJvZ3JhbV9fYXR0YWNoKGN0eC5za2VsLVx1MDAzZXByb2dzLmJlbmNobWFyayk7XG4mIzQzO1x0aWYgKCFsaW5rKSB7XG4mIzQzO1x0XHRmcHJpbnRmKHN0ZGVyciwgXCYjMzQ7ZmFpbGVkIHRvIGF0dGFjaCBwcm9ncmFtIVxcblwmIzM0Oyk7XG4mIzQzO1x0XHRleGl0KDEpO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0Y3R4LnNrZWwtXHUwMDNlYnNzLVx1MDAzZW5yX2xvb3BzID0gYXJncy5ucl9sb29wcztcbiYjNDM7fVxuJiM0MztcbiYjNDM7Y29uc3Qgc3RydWN0IGJlbmNoIGJlbmNoX2JwZl9mb3IgPSB7XG4mIzQzO1x0Lm5hbWUgPSBcJiMzNDticGYtZm9yXCYjMzQ7LFxuJiM0MztcdC5hcmdwID0gXHUwMDI2YmVuY2hfYnBmX2Zvcl9hcmdwLFxuJiM0MztcdC52YWxpZGF0ZSA9IHZhbGlkYXRlLFxuJiM0MztcdC5zZXR1cCA9IHNldHVwLFxuJiM0MztcdC5wcm9kdWNlcl90aHJlYWQgPSBwcm9kdWNlcixcbiYjNDM7XHQubWVhc3VyZSA9IG1lYXN1cmUsXG4mIzQzO1x0LnJlcG9ydF9wcm9ncmVzcyA9IG9wc19yZXBvcnRfcHJvZ3Jlc3MsXG4mIzQzO1x0LnJlcG9ydF9maW5hbCA9IG9wc19yZXBvcnRfZmluYWwsXG4mIzQzO307XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JlbmNocy9ydW5fYmVuY2hfYnBmX2Zvci5zaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9iZW5jaHMvcnVuX2JlbmNoX2JwZl9mb3Iuc2hcbm5ldyBmaWxlIG1vZGUgMTAwNzU1XG5pbmRleCAwMDAwMDAwMDAwMDAwLi43ZGE2NDUzOTIwZGFiXG4tLS0gL2Rldi9udWxsXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYmVuY2hzL3J1bl9iZW5jaF9icGZfZm9yLnNoXG5AQCAtMCwwICYjNDM7MSwxNSBAQFxuJiM0MzsjIS9iaW4vYmFzaFxuJiM0MzsjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4mIzQzO1xuJiM0Mztzb3VyY2UgLi9iZW5jaHMvcnVuX2NvbW1vbi5zaFxuJiM0MztcbiYjNDM7c2V0IC1ldWZvIHBpcGVmYWlsXG4mIzQzO1xuJiM0Mztmb3IgdCBpbiAxIDQgOCAxMiAxNjsgZG9cbiYjNDM7Zm9yIGkgaW4gMTAgMTAwIDUwMCAxMDAwIDUwMDAgMTAwMDAgNTAwMDAgMTAwMDAwIDUwMDAwMCAxMDAwMDAwOyBkb1xuJiM0MztzdWJ0aXRsZSBcJiMzNDtucl9sb29wczogJGksIG5yX3RocmVhZHM6ICR0XCYjMzQ7XG4mIzQzO1x0c3VtbWFyaXplX29wcyBcJiMzNDticGZfZm9yOiBcJiMzNDsgXFxcbiYjNDM7XHQgICAgXCYjMzQ7JCgkUlVOX0JFTkNIIC1wICR0IC0tbnJfbG9vcHMgJGkgYnBmLWZvcilcJiMzNDtcbiYjNDM7XHRwcmludGYgXCYjMzQ7XFxuXCYjMzQ7XG4mIzQzO2RvbmVcbiYjNDM7ZG9uZVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9icGZfZm9yX2JlbmNoLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYnBmX2Zvcl9iZW5jaC5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uZjljNzIzMDUxZmM3NFxuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2JwZl9mb3JfYmVuY2guY1xuQEAgLTAsMCAmIzQzOzEsMzIgQEBcbiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbiYjNDM7LyogQ29weXJpZ2h0IChjKSAyMDI2IE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLiAqL1xuJiM0MztcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7dm1saW51eC5oXCYjMzQ7XG4mIzQzOyNpbmNsdWRlIFx1MDAzY2JwZi9icGZfaGVscGVycy5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFwmIzM0O2JwZl9taXNjLmhcJiMzNDtcbiYjNDM7XG4mIzQzO2NoYXIgX2xpY2Vuc2VbXSBTRUMoXCYjMzQ7bGljZW5zZVwmIzM0OykgPSBcJiMzNDtHUExcJiMzNDs7XG4mIzQzO1xuJiM0MztpbnQgbnJfbG9vcHM7XG4mIzQzO2xvbmcgaGl0cztcbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgb3V0ZXJfbG9vcChfX3UzMiBpbmRleCwgdm9pZCAqZGF0YSlcbiYjNDM7e1xuJiM0MztcdGludCBpO1xuJiM0MztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIEVtcHR5IGJvZHk6IHRoZSB3b3JrIGJlaW5nIG1lYXN1cmVkIGlzIHRoZSBvcGVuLWNvZGVkIG51bWVyaWMgaXRlcmF0b3IgaXRzZWxmXG4mIzQzO1x0ICogKGJwZl9pdGVyX251bV9uZXcvbmV4dC9kZXN0cm95IGJlaGluZCBicGZfZm9yKCkpLlxuJiM0MztcdCAqL1xuJiM0MztcdGJwZl9mb3IoaSwgMCwgbnJfbG9vcHMpXG4mIzQzO1x0XHQ7XG4mIzQzO1x0X19zeW5jX2FkZF9hbmRfZmV0Y2goXHUwMDI2aGl0cywgbnJfbG9vcHMpO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztTRUMoXCYjMzQ7ZmVudHJ5L1wmIzM0OyBTWVNfUFJFRklYIFwmIzM0O3N5c19nZXRwZ2lkXCYjMzQ7KVxuJiM0MztpbnQgYmVuY2htYXJrKHZvaWQgKmN0eClcbiYjNDM7e1xuJiM0MztcdGJwZl9sb29wKDEwMDAsIG91dGVyX2xvb3AsIE5VTEwsIDApO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2l0ZXJzLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvaXRlcnMuY1xuaW5kZXggMGZhNzBiMTMzZDkzMi4uNjJkN2RmOWU4MGJlYiAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9pdGVycy5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvaXRlcnMuY1xuQEAgLTg4LDYgJiM0Mzs4OCw4OSBAQCBpbnQgaXRlcl9lcnJfdW5zYWZlX2FzbV9sb29wKGNvbnN0IHZvaWQgKmN0eClcbiBcdHJldHVybiAwO1xuIH1cbiBcbiYjNDM7LypcbiYjNDM7ICogTmFrZWQgZnVuY3Rpb24sIHNvIHRoZXJlIGlzIG5vIGNvbXBpbGVyLWdlbmVyYXRlZCBnbHVlIGFuZCB0aGUgd2hvbGUgaW5saW5lZCBwcm9ncmFtIGNhbiBiZVxuJiM0MzsgKiBtYXRjaGVkLiBQaW5uZWQgdG8gYXJjaGVzIHdob3NlIEpJVHMgemVyby1leHRlbmQgMzItYml0IHdyaXRlcyBpbXBsaWNpdGx5XG4mIzQzOyAqIChicGZfaml0X25lZWRzX3pleHQoKSA9PSBmYWxzZSk7IG9uIGFyY2hlcyB0aGF0IG5lZWQgZXhwbGljaXQgemVyby1leHRlbnNpb24gdGhlIHZlcmlmaWVyXG4mIzQzOyAqIGludGVybGVhdmVzIFwmIzM0O3dOID0gd05cJiMzNDsgaW5zbnMgYW5kIHRoZSBmaXhlZCBzaGFwZSBiZWxvdyB3b3VsZCBub3QgbWF0Y2guIFRoZSBpbmxpbmluZyBpdHNlbGYgaXNcbiYjNDM7ICogYXJjaCBpbmRlcGVuZGVudCwgc28gY2hlY2tpbmcgaXQgb24gdGhlc2UgYXJjaGVzIGlzIHN1ZmZpY2llbnQuXG4mIzQzOyAqXG4mIzQzOyAqIGJwZl9pdGVyX251bV9uZXcoKSBlbWl0cyB0aGUgZnVsbCByYW5nZSBjaGVjayAoZGlzdGFuY2UgY29tcHV0YXRpb24gYW5kIGJvdGggdGhlIC1FSU5WQUwgYW5kXG4mIzQzOyAqIC1FMkJJRyBlcnJvciBwYXRocyk7IGJwZl9pdGVyX251bV9uZXh0KCkgYW5kIGJwZl9pdGVyX251bV9kZXN0cm95KCkgYXJlIGlubGluZWQgdG9vLlxuJiM0MzsgKi9cbiYjNDM7U0VDKFwmIzM0O3Jhd190cFwmIzM0OylcbiYjNDM7X19hcmNoX3g4Nl82NFxuJiM0MztfX2FyY2hfYXJtNjRcbiYjNDM7X19zdWNjZXNzXG4mIzQzO19feGxhdGVkKFwmIzM0O3I2ID0gcjEwXCYjMzQ7KVxuJiM0MztfX3hsYXRlZChcJiMzNDtyNiAmIzQzOz0gLThcJiMzNDspXG4mIzQzO19feGxhdGVkKFwmIzM0O2NhbGwgdW5rbm93blwmIzM0OylcbiYjNDM7X194bGF0ZWQoXCYjMzQ7cjMgPSByMFwmIzM0OylcbiYjNDM7X194bGF0ZWQoXCYjMzQ7cjMgXHUwMDI2PSA2NTUzNVwmIzM0OylcbiYjNDM7X194bGF0ZWQoXCYjMzQ7cjEgPSByNlwmIzM0OylcbiYjNDM7X194bGF0ZWQoXCYjMzQ7cjIgPSAwXCYjMzQ7KVxuJiM0MzsvKiBicGZfaXRlcl9udW1fbmV3KFx1MDAyNml0LCAwLCBcdTAwM2Nub24tY29uc3RcdTAwM2UpIHdpdGggdGhlIHJhbmdlIGNoZWNrIGtlcHQgKi9cbiYjNDM7X194bGF0ZWQoXCYjMzQ7aWYgdzIgc1x1MDAzZSB3MyBnb3RvIHBjJiM0Mzs4XCYjMzQ7KVxuJiM0MztfX3hsYXRlZChcJiMzNDt3MCA9IHczXCYjMzQ7KVxuJiM0MztfX3hsYXRlZChcJiMzNDt3MCAtPSB3MlwmIzM0OylcbiYjNDM7X194bGF0ZWQoXCYjMzQ7aWYgcjAgXHUwMDNlIDB4ODAwMDAwIGdvdG8gcGMmIzQzOzhcJiMzNDspXG4mIzQzO19feGxhdGVkKFwmIzM0O3cyICYjNDM7PSAtMVwmIzM0OylcbiYjNDM7X194bGF0ZWQoXCYjMzQ7Kih1MzIgKikocjEgJiM0MzswKSA9IHIyXCYjMzQ7KVxuJiM0MztfX3hsYXRlZChcJiMzNDsqKHUzMiAqKShyMSAmIzQzOzQpID0gcjNcJiMzNDspXG4mIzQzO19feGxhdGVkKFwmIzM0O3IwID0gMFwmIzM0OylcbiYjNDM7X194bGF0ZWQoXCYjMzQ7Z290byBwYyYjNDM7NVwmIzM0OylcbiYjNDM7X194bGF0ZWQoXCYjMzQ7Kih1NjQgKikocjEgJiM0MzswKSA9IDBcJiMzNDspXG4mIzQzO19feGxhdGVkKFwmIzM0O3IwID0gLTIyXCYjMzQ7KVxuJiM0MztfX3hsYXRlZChcJiMzNDtnb3RvIHBjJiM0MzsyXCYjMzQ7KVxuJiM0MztfX3hsYXRlZChcJiMzNDsqKHU2NCAqKShyMSAmIzQzOzApID0gMFwmIzM0OylcbiYjNDM7X194bGF0ZWQoXCYjMzQ7cjAgPSAtN1wmIzM0OylcbiYjNDM7X194bGF0ZWQoXCYjMzQ7cjEgPSByNlwmIzM0OylcbiYjNDM7LyogYnBmX2l0ZXJfbnVtX25leHQoXHUwMDI2aXQpICovXG4mIzQzO19feGxhdGVkKFwmIzM0O3IwID0gKih1MzIgKikocjEgJiM0MzswKVwmIzM0OylcbiYjNDM7X194bGF0ZWQoXCYjMzQ7dzAgJiM0Mzs9IDFcJiMzNDspXG4mIzQzO19feGxhdGVkKFwmIzM0O3IyID0gKih1MzIgKikocjEgJiM0Mzs0KVwmIzM0OylcbiYjNDM7X194bGF0ZWQoXCYjMzQ7aWYgdzAgc1x1MDAzZT0gdzIgZ290byBwYyYjNDM7M1wmIzM0OylcbiYjNDM7X194bGF0ZWQoXCYjMzQ7Kih1MzIgKikocjEgJiM0MzswKSA9IHIwXCYjMzQ7KVxuJiM0MztfX3hsYXRlZChcJiMzNDtyMCA9IHIxXCYjMzQ7KVxuJiM0MztfX3hsYXRlZChcJiMzNDtnb3RvIHBjJiM0MzsyXCYjMzQ7KVxuJiM0MztfX3hsYXRlZChcJiMzNDsqKHU2NCAqKShyMSAmIzQzOzApID0gMFwmIzM0OylcbiYjNDM7X194bGF0ZWQoXCYjMzQ7cjAgPSAwXCYjMzQ7KVxuJiM0MztfX3hsYXRlZChcJiMzNDtpZiByMCAhPSAweDAgZ290byBwYy0xMVwmIzM0OylcbiYjNDM7X194bGF0ZWQoXCYjMzQ7cjEgPSByNlwmIzM0OylcbiYjNDM7LyogYnBmX2l0ZXJfbnVtX2Rlc3Ryb3koXHUwMDI2aXQpIGlzIGlubGluZWQgdG8gYSBub3AgKi9cbiYjNDM7X194bGF0ZWQoXCYjMzQ7Z290byBwYyYjNDM7MFwmIzM0OylcbiYjNDM7X194bGF0ZWQoXCYjMzQ7cjAgPSAwXCYjMzQ7KVxuJiM0MztfX3hsYXRlZChcJiMzNDtleGl0XCYjMzQ7KVxuJiM0MztpbnQgX19uYWtlZCBpdGVyX251bV9uZXdfaW5saW5lZCh2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0YXNtIHZvbGF0aWxlIChcbiYjNDM7XHRcdC8qIHI2IHBvaW50cyB0byBzdHJ1Y3QgYnBmX2l0ZXJfbnVtIG9uIHRoZSBzdGFjayAqL1xuJiM0MztcdFx0XCYjMzQ7cjYgPSByMTA7XCYjMzQ7XG4mIzQzO1x0XHRcJiMzNDtyNiAmIzQzOz0gLTg7XCYjMzQ7XG4mIzQzO1x0XHQvKiBub24tY29uc3RhbnQgZW5kIHNvIHRoZSByYW5nZSBjaGVja3MgYXJlIGtlcHQgKi9cbiYjNDM7XHRcdFwmIzM0O2NhbGwgJVticGZfZ2V0X3ByYW5kb21fdTMyXTtcJiMzNDtcbiYjNDM7XHRcdFwmIzM0O3IzID0gcjA7XCYjMzQ7XG4mIzQzO1x0XHRcJiMzNDtyMyBcdTAwMjY9IDB4ZmZmZjtcJiMzNDtcbiYjNDM7XHRcdFwmIzM0O3IxID0gcjY7XCYjMzQ7XG4mIzQzO1x0XHRcJiMzNDtyMiA9IDA7XCYjMzQ7XG4mIzQzO1x0XHRcJiMzNDtjYWxsICVbYnBmX2l0ZXJfbnVtX25ld107XCYjMzQ7XG4mIzQzO1x0XCYjMzQ7MTpcJiMzNDtcbiYjNDM7XHRcdFwmIzM0O3IxID0gcjY7XCYjMzQ7XG4mIzQzO1x0XHRcJiMzNDtjYWxsICVbYnBmX2l0ZXJfbnVtX25leHRdO1wmIzM0O1xuJiM0MztcdFx0XCYjMzQ7aWYgcjAgIT0gMCBnb3RvIDFiO1wmIzM0O1xuJiM0MztcdFx0XCYjMzQ7cjEgPSByNjtcJiMzNDtcbiYjNDM7XHRcdFwmIzM0O2NhbGwgJVticGZfaXRlcl9udW1fZGVzdHJveV07XCYjMzQ7XG4mIzQzO1x0XHRcJiMzNDtyMCA9IDA7XCYjMzQ7XG4mIzQzO1x0XHRcJiMzNDtleGl0O1wmIzM0O1xuJiM0MztcdFx0OlxuJiM0MztcdFx0OiBfX2ltbShicGZfZ2V0X3ByYW5kb21fdTMyKSxcbiYjNDM7XHRcdCAgX19pbW0oYnBmX2l0ZXJfbnVtX25ldyksXG4mIzQzO1x0XHQgIF9faW1tKGJwZl9pdGVyX251bV9uZXh0KSxcbiYjNDM7XHRcdCAgX19pbW0oYnBmX2l0ZXJfbnVtX2Rlc3Ryb3kpXG4mIzQzO1x0XHQ6IF9fY2xvYmJlcl9jb21tb24sIFwmIzM0O3I2XCYjMzQ7XG4mIzQzO1x0KTtcbiYjNDM7fVxuJiM0MztcbiBTRUMoXCYjMzQ7cmF3X3RwXCYjMzQ7KVxuIF9fc3VjY2Vzc1xuIGludCBpdGVyX3doaWxlX2xvb3AoY29uc3Qgdm9pZCAqY3R4KVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDE0OjAwPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjExbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDticGZfZml4dXBfa2Z1bmNfY2FsbCYjMzQ7LAogICAgJiMzNDticGZfaXRlcl9udW1fbmV3JiMzNDssCiAgICAmIzM0O2JwZl9pdGVyX251bV9uZXh0JiMzNDssCiAgICAmIzM0O2JwZl9pdGVyX251bV9kZXN0cm95JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBCUEYgbnVtZXJpYyBpdGVyYXRvcnMgKGBicGZfaXRlcl9udW1fbmV3YCwgYGJwZl9pdGVyX251bV9uZXh0YCwgYGJwZl9pdGVyX251bV9kZXN0cm95YCkgYW5kIGFkZHMgaW5saW5pbmcgZm9yIHRoZXNlIGtmdW5jcyBpbiB0aGUgQlBGIHZlcmlmaWVyIChgYnBmX2ZpeHVwX2tmdW5jX2NhbGxgKS4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUgY29yZSBCUEYgc3Vic3lzdGVtIGFuZCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgYmU1ZGRmNjJiZTZiMTkxMzc4YzFmMDYyMGFiZDk2OThmMjI4MjIwNApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUdWUgQXVnIDQgMTQ6MDA6NDIgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL2JwZl9pdGVyLmMgYi9rZXJuZWwvYnBmL2JwZl9pdGVyLmMKaW5kZXggZjVlYWViMjQ5M2Q0YS4uMTRhNWZkZmEwNDIxNCAxMDA2NDQKLS0tIGEva2VybmVsL2JwZi9icGZfaXRlci5jCiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9icGYvYnBmX2l0ZXIuYwpAQCAtNzgyLDggJiM0Mzs3ODIsOCBAQCBfX2JwZl9rZnVuYyBpbnQgYnBmX2l0ZXJfbnVtX25ldyhzdHJ1Y3QgYnBmX2l0ZXJfbnVtICppdCwgaW50IHN0YXJ0LCBpbnQgZW5kKQogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKLQkvKiBhdm9pZCBvdmVyZmxvd3MsIGUuZy4sIGlmIHN0YXJ0ID09IElOVF9NSU4gYW5kIGVuZCA9PSBJTlRfTUFYICovCi0JaWYgKChzNjQpZW5kIC0gKHM2NClzdGFydCAmZ3Q7IEJQRl9NQVhfTE9PUFMpIHsKJiM0MzsJLyogc3RhcnQgJmx0Oz0gZW5kIGhlcmUsIHNvIGVuZCAtIHN0YXJ0IGZpdHMgaW4gYSB1MzIgd2l0aG91dCBvdmVyZmxvdyAqLwomIzQzOwlpZiAoKHUzMikoZW5kIC0gc3RhcnQpICZndDsgQlBGX01BWF9MT09QUykgewogCQlzLSZndDtjdXIgPSBzLSZndDtlbmQgPSAwOwogCQlyZXR1cm4gLUUyQklHOwogCX0KQEAgLTgwMiwxMiAmIzQzOzgwMiwxMSBAQCBfX2JwZl9rZnVuYyBpbnQgKmJwZl9pdGVyX251bV9uZXh0KHN0cnVjdCBicGZfaXRlcl9udW0qIGl0KQogewogCXN0cnVjdCBicGZfaXRlcl9udW1fa2VybiAqcyA9ICh2b2lkICopaXQ7CiAKLQkvKiBjaGVjayBmYWlsZWQgaW5pdGlhbGl6YXRpb24gb3IgaWYgd2UgYXJlIGRvbmUgKHNhbWUgYmVoYXZpb3IpOwotCSAqIG5lZWQgdG8gYmUgY2FyZWZ1bCBhYm91dCBvdmVyZmxvdywgc28gY29udmVydCB0byBzNjQgZm9yIGNoZWNrcywKLQkgKiBlLmcuLCBpZiBzLSZndDtjdXIgPT0gcy0mZ3Q7ZW5kID09IElOVF9NQVgsIHdlIGNhbiYjMzk7dCBqdXN0IGRvCi0JICogcy0mZ3Q7Y3VyICYjNDM7IDEgJmd0Oz0gcy0mZ3Q7ZW5kCiYjNDM7CS8qCiYjNDM7CSAqIHMtJmd0O2N1ciAmbHQ7IHMtJmd0O2VuZCB3aGlsZSBpdGVyYXRpbmcsIGVsc2Ugcy0mZ3Q7Y3VyID09IHMtJmd0O2VuZCA9PSAwOyB0aGUgc2lnbmVkCiYjNDM7CSAqIHMtJmd0O2N1ciAmIzQzOyAxICZndDs9IHMtJmd0O2VuZCBob2xkcyBldmVuIHdoZW4gcy0mZ3Q7Y3VyICYjNDM7IDEgd3JhcHMgKHN0YXJ0ID09IElOVF9NSU4pLgogCSAqLwotCWlmICgoczY0KShzLSZndDtjdXIgJiM0MzsgMSkgJmd0Oz0gcy0mZ3Q7ZW5kKSB7CiYjNDM7CWlmIChzLSZndDtjdXIgJiM0MzsgMSAmZ3Q7PSBzLSZndDtlbmQpIHsKIAkJcy0mZ3Q7Y3VyID0gcy0mZ3Q7ZW5kID0gMDsKIAkJcmV0dXJuIE5VTEw7CiAJfQpAQCAtODE5LDkgJiM0Mzs4MTgsNyBAQCBfX2JwZl9rZnVuYyBpbnQgKmJwZl9pdGVyX251bV9uZXh0KHN0cnVjdCBicGZfaXRlcl9udW0qIGl0KQogCiBfX2JwZl9rZnVuYyB2b2lkIGJwZl9pdGVyX251bV9kZXN0cm95KHN0cnVjdCBicGZfaXRlcl9udW0gKml0KQogewotCXN0cnVjdCBicGZfaXRlcl9udW1fa2VybiAqcyA9ICh2b2lkICopaXQ7Ci0KLQlzLSZndDtjdXIgPSBzLSZndDtlbmQgPSAwOwomIzQzOwkvKiBuby1vcCAqLwogfQogCiBfX2JwZl9rZnVuY19lbmRfZGVmcygpOwpkaWZmIC0tZ2l0IGEva2VybmVsL2JwZi92ZXJpZmllci5jIGIva2VybmVsL2JwZi92ZXJpZmllci5jCmluZGV4IGIyNzQwMDRmY2NmZDkuLjNlNDRiMDIwNTc1NmEgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9icGYvdmVyaWZpZXIuYwomIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvYnBmL3ZlcmlmaWVyLmMKQEAgLTIwMDAxLDYgJiM0MzsyMDAwMSw1MSBAQCBpbnQgYnBmX2ZpeHVwX2tmdW5jX2NhbGwoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuLAogCQlpbnNuX2J1Zls0XSA9IEJQRl9BTFU2NF9SRUcoQlBGX1NVQiwgQlBGX1JFR18wLCBCUEZfUkVHXzEpOwogCQlpbnNuX2J1Zls1XSA9IEJQRl9BTFU2NF9JTU0oQlBGX05FRywgQlBGX1JFR18wLCAwKTsKIAkJKmNudCA9IDY7CiYjNDM7CX0gZWxzZSBpZiAoZGVzYy0mZ3Q7ZnVuY19pZCA9PSBzcGVjaWFsX2tmdW5jX2xpc3RbS0ZfYnBmX2l0ZXJfbnVtX25ld10pIHsKJiM0MzsJCS8qIGlubGluZSBicGZfaXRlcl9udW1fbmV3KCZhbXA7aXQsIHN0YXJ0LCBlbmQpOyBSMT0mYW1wO2l0LCBSMj1zdGFydCwgUjM9ZW5kICovCiYjNDM7CQlpbnQgaSA9IDA7CiYjNDM7CiYjNDM7CQkvKiBpZiAoc3RhcnQgJmd0OyBlbmQpIGdvdG8gZWludmFsOyAqLwomIzQzOwkJaW5zbl9idWZbaSYjNDM7JiM0MztdID0gQlBGX0pNUDMyX1JFRyhCUEZfSlNHVCwgQlBGX1JFR18yLCBCUEZfUkVHXzMsIDgpOwomIzQzOwkJLyogcjAgPSAodTMyKWVuZCAtICh1MzIpc3RhcnQ7IGlmIChyMCAmZ3Q7IEJQRl9NQVhfTE9PUFMpIGdvdG8gZTJiaWc7ICovCiYjNDM7CQlpbnNuX2J1ZltpJiM0MzsmIzQzO10gPSBCUEZfTU9WMzJfUkVHKEJQRl9SRUdfMCwgQlBGX1JFR18zKTsKJiM0MzsJCWluc25fYnVmW2kmIzQzOyYjNDM7XSA9IEJQRl9BTFUzMl9SRUcoQlBGX1NVQiwgQlBGX1JFR18wLCBCUEZfUkVHXzIpOwomIzQzOwkJaW5zbl9idWZbaSYjNDM7JiM0MztdID0gQlBGX0pNUF9JTU0oQlBGX0pHVCwgQlBGX1JFR18wLCBCUEZfTUFYX0xPT1BTLCA4KTsKJiM0MzsJCS8qIHMtJmd0O2N1ciA9IHN0YXJ0IC0gMTsgcy0mZ3Q7ZW5kID0gZW5kOyByZXR1cm4gMDsgKi8KJiM0MzsJCWluc25fYnVmW2kmIzQzOyYjNDM7XSA9IEJQRl9BTFUzMl9JTU0oQlBGX0FERCwgQlBGX1JFR18yLCAtMSk7CiYjNDM7CQlpbnNuX2J1ZltpJiM0MzsmIzQzO10gPSBCUEZfU1RYX01FTShCUEZfVywgQlBGX1JFR18xLCBCUEZfUkVHXzIsIDApOwomIzQzOwkJaW5zbl9idWZbaSYjNDM7JiM0MztdID0gQlBGX1NUWF9NRU0oQlBGX1csIEJQRl9SRUdfMSwgQlBGX1JFR18zLCA0KTsKJiM0MzsJCWluc25fYnVmW2kmIzQzOyYjNDM7XSA9IEJQRl9NT1Y2NF9JTU0oQlBGX1JFR18wLCAwKTsKJiM0MzsJCWluc25fYnVmW2kmIzQzOyYjNDM7XSA9IEJQRl9KTVBfQSg1KTsKJiM0MzsJCS8qIGVpbnZhbDogcy0mZ3Q7Y3VyID0gcy0mZ3Q7ZW5kID0gMDsgcmV0dXJuIC1FSU5WQUw7ICovCiYjNDM7CQlpbnNuX2J1ZltpJiM0MzsmIzQzO10gPSBCUEZfU1RfTUVNKEJQRl9EVywgQlBGX1JFR18xLCAwLCAwKTsKJiM0MzsJCWluc25fYnVmW2kmIzQzOyYjNDM7XSA9IEJQRl9NT1Y2NF9JTU0oQlBGX1JFR18wLCAtRUlOVkFMKTsKJiM0MzsJCWluc25fYnVmW2kmIzQzOyYjNDM7XSA9IEJQRl9KTVBfQSgyKTsKJiM0MzsJCS8qIGUyYmlnOiBzLSZndDtjdXIgPSBzLSZndDtlbmQgPSAwOyByZXR1cm4gLUUyQklHOyAqLwomIzQzOwkJaW5zbl9idWZbaSYjNDM7JiM0MztdID0gQlBGX1NUX01FTShCUEZfRFcsIEJQRl9SRUdfMSwgMCwgMCk7CiYjNDM7CQlpbnNuX2J1ZltpJiM0MzsmIzQzO10gPSBCUEZfTU9WNjRfSU1NKEJQRl9SRUdfMCwgLUUyQklHKTsKJiM0MzsJCSpjbnQgPSBpOwomIzQzOwl9IGVsc2UgaWYgKGRlc2MtJmd0O2Z1bmNfaWQgPT0gc3BlY2lhbF9rZnVuY19saXN0W0tGX2JwZl9pdGVyX251bV9uZXh0XSkgewomIzQzOwkJLyogaW5saW5lIGJwZl9pdGVyX251bV9uZXh0KCZhbXA7aXQpOyBSMT0mYW1wO2l0LCByZXR1cm5zICZhbXA7cy0mZ3Q7Y3VyIG9yIE5VTEwgKi8KJiM0MzsJCWludCBpID0gMDsKJiM0MzsKJiM0MzsJCS8qIHIwID0gcy0mZ3Q7Y3VyICYjNDM7IDE7IGlmICgoczMyKXIwICZndDs9IHMtJmd0O2VuZCkgZ290byBkb25lOyAqLwomIzQzOwkJaW5zbl9idWZbaSYjNDM7JiM0MztdID0gQlBGX0xEWF9NRU0oQlBGX1csIEJQRl9SRUdfMCwgQlBGX1JFR18xLCAwKTsKJiM0MzsJCWluc25fYnVmW2kmIzQzOyYjNDM7XSA9IEJQRl9BTFUzMl9JTU0oQlBGX0FERCwgQlBGX1JFR18wLCAxKTsKJiM0MzsJCWluc25fYnVmW2kmIzQzOyYjNDM7XSA9IEJQRl9MRFhfTUVNKEJQRl9XLCBCUEZfUkVHXzIsIEJQRl9SRUdfMSwgNCk7CiYjNDM7CQlpbnNuX2J1ZltpJiM0MzsmIzQzO10gPSBCUEZfSk1QMzJfUkVHKEJQRl9KU0dFLCBCUEZfUkVHXzAsIEJQRl9SRUdfMiwgMyk7CiYjNDM7CQkvKiBzLSZndDtjdXIgPSByMDsgcmV0dXJuICZhbXA7cy0mZ3Q7Y3VyOyAqLwomIzQzOwkJaW5zbl9idWZbaSYjNDM7JiM0MztdID0gQlBGX1NUWF9NRU0oQlBGX1csIEJQRl9SRUdfMSwgQlBGX1JFR18wLCAwKTsKJiM0MzsJCWluc25fYnVmW2kmIzQzOyYjNDM7XSA9IEJQRl9NT1Y2NF9SRUcoQlBGX1JFR18wLCBCUEZfUkVHXzEpOwomIzQzOwkJaW5zbl9idWZbaSYjNDM7JiM0MztdID0gQlBGX0pNUF9BKDIpOwomIzQzOwkJLyogZG9uZTogcy0mZ3Q7Y3VyID0gcy0mZ3Q7ZW5kID0gMDsgcmV0dXJuIE5VTEw7ICovCiYjNDM7CQlpbnNuX2J1ZltpJiM0MzsmIzQzO10gPSBCUEZfU1RfTUVNKEJQRl9EVywgQlBGX1JFR18xLCAwLCAwKTsKJiM0MzsJCWluc25fYnVmW2kmIzQzOyYjNDM7XSA9IEJQRl9NT1Y2NF9JTU0oQlBGX1JFR18wLCAwKTsKJiM0MzsJCSpjbnQgPSBpOwomIzQzOwl9IGVsc2UgaWYgKGRlc2MtJmd0O2Z1bmNfaWQgPT0gc3BlY2lhbF9rZnVuY19saXN0W0tGX2JwZl9pdGVyX251bV9kZXN0cm95XSkgewomIzQzOwkJLyogYnBmX2l0ZXJfbnVtX2Rlc3Ryb3koKSBpcyBhIG5vLW9wOyBlbWl0IGEgbm9wIHRvIGRyb3AgdGhlIGNhbGwgKi8KJiM0MzsJCWluc25fYnVmWzBdID0gQlBGX0pNUF9BKDApOwomIzQzOwkJKmNudCA9IDE7CiAJfQogCiAJaWYgKGVudi0mZ3Q7aW5zbl9hdXhfZGF0YVtpbnNuX2lkeF0uYXJnX3Byb2cpIHsKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9NYWtlZmlsZSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9NYWtlZmlsZQppbmRleCA1NWQzOTQ0Mzg3MDVhLi4zMTc0YzJmMThlNzE1IDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvTWFrZWZpbGUKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL01ha2VmaWxlCkBAIC05NjUsNiAmIzQzOzk2NSw3IEBAICQoT1VUUFVUKS9iZW5jaF9yaW5nYnVmcy5vOiAkKE9VVFBVVCkvcmluZ2J1Zl9iZW5jaC5za2VsLmggXAogCQkJICAgICQoT1VUUFVUKS9wZXJmYnVmX2JlbmNoLnNrZWwuaAogJChPVVRQVVQpL2JlbmNoX2Jsb29tX2ZpbHRlcl9tYXAubzogJChPVVRQVVQpL2Jsb29tX2ZpbHRlcl9iZW5jaC5za2VsLmgKICQoT1VUUFVUKS9iZW5jaF9icGZfbG9vcC5vOiAkKE9VVFBVVCkvYnBmX2xvb3BfYmVuY2guc2tlbC5oCiYjNDM7JChPVVRQVVQpL2JlbmNoX2JwZl9mb3IubzogJChPVVRQVVQpL2JwZl9mb3JfYmVuY2guc2tlbC5oCiAkKE9VVFBVVCkvYmVuY2hfc3RybmNtcC5vOiAkKE9VVFBVVCkvc3RybmNtcF9iZW5jaC5za2VsLmgKICQoT1VUUFVUKS9iZW5jaF9icGZfaGFzaG1hcF9mdWxsX3VwZGF0ZS5vOiAkKE9VVFBVVCkvYnBmX2hhc2htYXBfZnVsbF91cGRhdGVfYmVuY2guc2tlbC5oCiAkKE9VVFBVVCkvYmVuY2hfbG9jYWxfc3RvcmFnZS5vOiAkKE9VVFBVVCkvbG9jYWxfc3RvcmFnZV9iZW5jaC5za2VsLmgKQEAgLTk5MCw2ICYjNDM7OTkxLDcgQEAgJChPVVRQVVQpL2JlbmNoOiAkKE9VVFBVVCkvYmVuY2gubyBcCiAJCSAkKE9VVFBVVCkvYmVuY2hfcmluZ2J1ZnMubyBcCiAJCSAkKE9VVFBVVCkvYmVuY2hfYmxvb21fZmlsdGVyX21hcC5vIFwKIAkJICQoT1VUUFVUKS9iZW5jaF9icGZfbG9vcC5vIFwKJiM0MzsJCSAkKE9VVFBVVCkvYmVuY2hfYnBmX2Zvci5vIFwKIAkJICQoT1VUUFVUKS9iZW5jaF9zdHJuY21wLm8gXAogCQkgJChPVVRQVVQpL2JlbmNoX2JwZl9oYXNobWFwX2Z1bGxfdXBkYXRlLm8gXAogCQkgJChPVVRQVVQpL2JlbmNoX2xvY2FsX3N0b3JhZ2UubyBcCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYmVuY2guYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9iZW5jaC5jCmluZGV4IDNkOWQyY2Q3NzY0YmQuLmI4NmI3MzQ1NmQzY2EgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9iZW5jaC5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9iZW5jaC5jCkBAIC0yNzYsNiAmIzQzOzI3Niw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYXJncF9vcHRpb24gb3B0c1tdID0gewogZXh0ZXJuIHN0cnVjdCBhcmdwIGJlbmNoX3JpbmdidWZzX2FyZ3A7CiBleHRlcm4gc3RydWN0IGFyZ3AgYmVuY2hfYmxvb21fbWFwX2FyZ3A7CiBleHRlcm4gc3RydWN0IGFyZ3AgYmVuY2hfYnBmX2xvb3BfYXJncDsKJiM0MztleHRlcm4gc3RydWN0IGFyZ3AgYmVuY2hfYnBmX2Zvcl9hcmdwOwogZXh0ZXJuIHN0cnVjdCBhcmdwIGJlbmNoX2xvY2FsX3N0b3JhZ2VfYXJncDsKIGV4dGVybiBzdHJ1Y3QgYXJncCBiZW5jaF9sb2NhbF9zdG9yYWdlX3JjdV90YXNrc190cmFjZV9hcmdwOwogZXh0ZXJuIHN0cnVjdCBhcmdwIGJlbmNoX3N0cm5jbXBfYXJncDsKQEAgLTI5Miw2ICYjNDM7MjkzLDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBhcmdwX2NoaWxkIGJlbmNoX3BhcnNlcnNbXSA9IHsKIAl7ICZhbXA7YmVuY2hfcmluZ2J1ZnNfYXJncCwgMCwgJiMzNDtSaW5nIGJ1ZmZlcnMgYmVuY2htYXJrJiMzNDssIDAgfSwKIAl7ICZhbXA7YmVuY2hfYmxvb21fbWFwX2FyZ3AsIDAsICYjMzQ7Qmxvb20gZmlsdGVyIG1hcCBiZW5jaG1hcmsmIzM0OywgMCB9LAogCXsgJmFtcDtiZW5jaF9icGZfbG9vcF9hcmdwLCAwLCAmIzM0O2JwZl9sb29wIGhlbHBlciBiZW5jaG1hcmsmIzM0OywgMCB9LAomIzQzOwl7ICZhbXA7YmVuY2hfYnBmX2Zvcl9hcmdwLCAwLCAmIzM0O2JwZl9mb3IgbG9vcCBiZW5jaG1hcmsmIzM0OywgMCB9LAogCXsgJmFtcDtiZW5jaF9sb2NhbF9zdG9yYWdlX2FyZ3AsIDAsICYjMzQ7bG9jYWxfc3RvcmFnZSBiZW5jaG1hcmsmIzM0OywgMCB9LAogCXsgJmFtcDtiZW5jaF9zdHJuY21wX2FyZ3AsIDAsICYjMzQ7YnBmX3N0cm5jbXAgaGVscGVyIGJlbmNobWFyayYjMzQ7LCAwIH0sCiAJeyAmYW1wO2JlbmNoX2xvY2FsX3N0b3JhZ2VfcmN1X3Rhc2tzX3RyYWNlX2FyZ3AsIDAsCkBAIC01NTcsNiAmIzQzOzU1OSw3IEBAIGV4dGVybiBjb25zdCBzdHJ1Y3QgYmVuY2ggYmVuY2hfYmxvb21fZmFsc2VfcG9zaXRpdmU7CiBleHRlcm4gY29uc3Qgc3RydWN0IGJlbmNoIGJlbmNoX2hhc2htYXBfd2l0aG91dF9ibG9vbTsKIGV4dGVybiBjb25zdCBzdHJ1Y3QgYmVuY2ggYmVuY2hfaGFzaG1hcF93aXRoX2Jsb29tOwogZXh0ZXJuIGNvbnN0IHN0cnVjdCBiZW5jaCBiZW5jaF9icGZfbG9vcDsKJiM0MztleHRlcm4gY29uc3Qgc3RydWN0IGJlbmNoIGJlbmNoX2JwZl9mb3I7CiBleHRlcm4gY29uc3Qgc3RydWN0IGJlbmNoIGJlbmNoX3N0cm5jbXBfbm9faGVscGVyOwogZXh0ZXJuIGNvbnN0IHN0cnVjdCBiZW5jaCBiZW5jaF9zdHJuY21wX2hlbHBlcjsKIGV4dGVybiBjb25zdCBzdHJ1Y3QgYmVuY2ggYmVuY2hfYnBmX2hhc2htYXBfZnVsbF91cGRhdGU7CkBAIC02NDAsNiAmIzQzOzY0Myw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYmVuY2ggKmJlbmNoc1tdID0gewogCSZhbXA7YmVuY2hfaGFzaG1hcF93aXRob3V0X2Jsb29tLAogCSZhbXA7YmVuY2hfaGFzaG1hcF93aXRoX2Jsb29tLAogCSZhbXA7YmVuY2hfYnBmX2xvb3AsCiYjNDM7CSZhbXA7YmVuY2hfYnBmX2ZvciwKIAkmYW1wO2JlbmNoX3N0cm5jbXBfbm9faGVscGVyLAogCSZhbXA7YmVuY2hfc3RybmNtcF9oZWxwZXIsCiAJJmFtcDtiZW5jaF9icGZfaGFzaG1hcF9mdWxsX3VwZGF0ZSwKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9iZW5jaHMvYmVuY2hfYnBmX2Zvci5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JlbmNocy9iZW5jaF9icGZfZm9yLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMC4uNzMwYzUxYWQyZGVjMwotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9iZW5jaHMvYmVuY2hfYnBmX2Zvci5jCkBAIC0wLDAgJiM0MzsxLDEwNCBAQAomIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCiYjNDM7LyogQ29weXJpZ2h0IChjKSAyMDI2IE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLiAqLwomIzQzOwomIzQzOyNpbmNsdWRlICZsdDthcmdwLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJiMzNDtiZW5jaC5oJiMzNDsKJiM0MzsjaW5jbHVkZSAmIzM0O2JwZl9mb3JfYmVuY2guc2tlbC5oJiMzNDsKJiM0MzsKJiM0MzsvKiBCUEYgdHJpZ2dlcmluZyBiZW5jaG1hcmtzICovCiYjNDM7c3RhdGljIHN0cnVjdCBjdHggewomIzQzOwlzdHJ1Y3QgYnBmX2Zvcl9iZW5jaCAqc2tlbDsKJiM0Mzt9IGN0eDsKJiM0MzsKJiM0MztzdGF0aWMgc3RydWN0IHsKJiM0MzsJX191MzIgbnJfbG9vcHM7CiYjNDM7fSBhcmdzID0gewomIzQzOwkvKgomIzQzOwkgKiBEZWZhdWx0IHRvIGEgbGFyZ2UgbG9vcCBjb3VudCBzbyB0aGUgcGVyLWl0ZXJhdGlvbiBicGZfaXRlcl9udW1fbmV4dCgpIGNvc3QgZG9taW5hdGVzCiYjNDM7CSAqIHRoZSBvbmUtdGltZSBicGZfaXRlcl9udW1fbmV3KCkvZGVzdHJveSgpIHNldHVwIGFuZCB0ZWFyZG93bi4KJiM0MzsJICovCiYjNDM7CS5ucl9sb29wcyA9IDEwMDAsCiYjNDM7fTsKJiM0MzsKJiM0MztlbnVtIHsKJiM0MzsJQVJHX05SX0xPT1BTID0gNDAwMCwKJiM0Mzt9OwomIzQzOwomIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3QgYXJncF9vcHRpb24gb3B0c1tdID0gewomIzQzOwl7ICYjMzQ7bnJfbG9vcHMmIzM0OywgQVJHX05SX0xPT1BTLCAmIzM0O25yX2xvb3BzJiMzNDssIDAsCiYjNDM7CQkmIzM0O1NldCBudW1iZXIgb2YgaXRlcmF0aW9ucyBmb3IgdGhlIGJwZl9mb3IoKSBsb29wJiMzNDt9LAomIzQzOwl7fSwKJiM0Mzt9OwomIzQzOwomIzQzO3N0YXRpYyBlcnJvcl90IHBhcnNlX2FyZyhpbnQga2V5LCBjaGFyICphcmcsIHN0cnVjdCBhcmdwX3N0YXRlICpzdGF0ZSkKJiM0Mzt7CiYjNDM7CXN3aXRjaCAoa2V5KSB7CiYjNDM7CWNhc2UgQVJHX05SX0xPT1BTOgomIzQzOwkJYXJncy5ucl9sb29wcyA9IHN0cnRvbChhcmcsIE5VTEwsIDEwKTsKJiM0MzsJCWJyZWFrOwomIzQzOwlkZWZhdWx0OgomIzQzOwkJcmV0dXJuIEFSR1BfRVJSX1VOS05PV047CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzOy8qIGV4cG9ydGVkIGludG8gYmVuY2htYXJrIHJ1bm5lciAqLwomIzQzO2NvbnN0IHN0cnVjdCBhcmdwIGJlbmNoX2JwZl9mb3JfYXJncCA9IHsKJiM0MzsJLm9wdGlvbnMgPSBvcHRzLAomIzQzOwkucGFyc2VyID0gcGFyc2VfYXJnLAomIzQzO307CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgdmFsaWRhdGUodm9pZCkKJiM0Mzt7CiYjNDM7CWlmIChlbnYuY29uc3VtZXJfY250ICE9IDApIHsKJiM0MzsJCWZwcmludGYoc3RkZXJyLCAmIzM0O2JlbmNobWFyayBkb2VzbiYjMzk7dCBzdXBwb3J0IGNvbnN1bWVyIVxuJiMzNDspOwomIzQzOwkJZXhpdCgxKTsKJiM0MzsJfQomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCAqcHJvZHVjZXIodm9pZCAqaW5wdXQpCiYjNDM7ewomIzQzOwl3aGlsZSAodHJ1ZSkKJiM0MzsJCS8qIHRyaWdnZXIgdGhlIGJwZiBwcm9ncmFtICovCiYjNDM7CQlzeXNjYWxsKF9fTlJfZ2V0cGdpZCk7CiYjNDM7CiYjNDM7CXJldHVybiBOVUxMOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBtZWFzdXJlKHN0cnVjdCBiZW5jaF9yZXMgKnJlcykKJiM0Mzt7CiYjNDM7CXJlcy0mZ3Q7aGl0cyA9IGF0b21pY19zd2FwKCZhbXA7Y3R4LnNrZWwtJmd0O2Jzcy0mZ3Q7aGl0cywgMCk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIHNldHVwKHZvaWQpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgYnBmX2xpbmsgKmxpbms7CiYjNDM7CiYjNDM7CXNldHVwX2xpYmJwZigpOwomIzQzOwomIzQzOwljdHguc2tlbCA9IGJwZl9mb3JfYmVuY2hfX29wZW5fYW5kX2xvYWQoKTsKJiM0MzsJaWYgKCFjdHguc2tlbCkgewomIzQzOwkJZnByaW50ZihzdGRlcnIsICYjMzQ7ZmFpbGVkIHRvIG9wZW4gc2tlbGV0b25cbiYjMzQ7KTsKJiM0MzsJCWV4aXQoMSk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJbGluayA9IGJwZl9wcm9ncmFtX19hdHRhY2goY3R4LnNrZWwtJmd0O3Byb2dzLmJlbmNobWFyayk7CiYjNDM7CWlmICghbGluaykgewomIzQzOwkJZnByaW50ZihzdGRlcnIsICYjMzQ7ZmFpbGVkIHRvIGF0dGFjaCBwcm9ncmFtIVxuJiMzNDspOwomIzQzOwkJZXhpdCgxKTsKJiM0MzsJfQomIzQzOwomIzQzOwljdHguc2tlbC0mZ3Q7YnNzLSZndDtucl9sb29wcyA9IGFyZ3MubnJfbG9vcHM7CiYjNDM7fQomIzQzOwomIzQzO2NvbnN0IHN0cnVjdCBiZW5jaCBiZW5jaF9icGZfZm9yID0gewomIzQzOwkubmFtZSA9ICYjMzQ7YnBmLWZvciYjMzQ7LAomIzQzOwkuYXJncCA9ICZhbXA7YmVuY2hfYnBmX2Zvcl9hcmdwLAomIzQzOwkudmFsaWRhdGUgPSB2YWxpZGF0ZSwKJiM0MzsJLnNldHVwID0gc2V0dXAsCiYjNDM7CS5wcm9kdWNlcl90aHJlYWQgPSBwcm9kdWNlciwKJiM0MzsJLm1lYXN1cmUgPSBtZWFzdXJlLAomIzQzOwkucmVwb3J0X3Byb2dyZXNzID0gb3BzX3JlcG9ydF9wcm9ncmVzcywKJiM0MzsJLnJlcG9ydF9maW5hbCA9IG9wc19yZXBvcnRfZmluYWwsCiYjNDM7fTsKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9iZW5jaHMvcnVuX2JlbmNoX2JwZl9mb3Iuc2ggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYmVuY2hzL3J1bl9iZW5jaF9icGZfZm9yLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAwMDAwMDAuLjdkYTY0NTM5MjBkYWIKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYmVuY2hzL3J1bl9iZW5jaF9icGZfZm9yLnNoCkBAIC0wLDAgJiM0MzsxLDE1IEBACiYjNDM7IyEvYmluL2Jhc2gKJiM0MzsjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCiYjNDM7CiYjNDM7c291cmNlIC4vYmVuY2hzL3J1bl9jb21tb24uc2gKJiM0MzsKJiM0MztzZXQgLWV1Zm8gcGlwZWZhaWwKJiM0MzsKJiM0Mztmb3IgdCBpbiAxIDQgOCAxMiAxNjsgZG8KJiM0Mztmb3IgaSBpbiAxMCAxMDAgNTAwIDEwMDAgNTAwMCAxMDAwMCA1MDAwMCAxMDAwMDAgNTAwMDAwIDEwMDAwMDA7IGRvCiYjNDM7c3VidGl0bGUgJiMzNDtucl9sb29wczogJGksIG5yX3RocmVhZHM6ICR0JiMzNDsKJiM0MzsJc3VtbWFyaXplX29wcyAmIzM0O2JwZl9mb3I6ICYjMzQ7IFwKJiM0MzsJICAgICYjMzQ7JCgkUlVOX0JFTkNIIC1wICR0IC0tbnJfbG9vcHMgJGkgYnBmLWZvcikmIzM0OwomIzQzOwlwcmludGYgJiMzNDtcbiYjMzQ7CiYjNDM7ZG9uZQomIzQzO2RvbmUKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9icGZfZm9yX2JlbmNoLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYnBmX2Zvcl9iZW5jaC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAuLmY5YzcyMzA1MWZjNzQKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYnBmX2Zvcl9iZW5jaC5jCkBAIC0wLDAgJiM0MzsxLDMyIEBACiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKJiM0MzsvKiBDb3B5cmlnaHQgKGMpIDIwMjYgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuICovCiYjNDM7CiYjNDM7I2luY2x1ZGUgJiMzNDt2bWxpbnV4LmgmIzM0OwomIzQzOyNpbmNsdWRlICZsdDticGYvYnBmX2hlbHBlcnMuaCZndDsKJiM0MzsjaW5jbHVkZSAmIzM0O2JwZl9taXNjLmgmIzM0OwomIzQzOwomIzQzO2NoYXIgX2xpY2Vuc2VbXSBTRUMoJiMzNDtsaWNlbnNlJiMzNDspID0gJiMzNDtHUEwmIzM0OzsKJiM0MzsKJiM0MztpbnQgbnJfbG9vcHM7CiYjNDM7bG9uZyBoaXRzOwomIzQzOwomIzQzO3N0YXRpYyBpbnQgb3V0ZXJfbG9vcChfX3UzMiBpbmRleCwgdm9pZCAqZGF0YSkKJiM0Mzt7CiYjNDM7CWludCBpOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBFbXB0eSBib2R5OiB0aGUgd29yayBiZWluZyBtZWFzdXJlZCBpcyB0aGUgb3Blbi1jb2RlZCBudW1lcmljIGl0ZXJhdG9yIGl0c2VsZgomIzQzOwkgKiAoYnBmX2l0ZXJfbnVtX25ldy9uZXh0L2Rlc3Ryb3kgYmVoaW5kIGJwZl9mb3IoKSkuCiYjNDM7CSAqLwomIzQzOwlicGZfZm9yKGksIDAsIG5yX2xvb3BzKQomIzQzOwkJOwomIzQzOwlfX3N5bmNfYWRkX2FuZF9mZXRjaCgmYW1wO2hpdHMsIG5yX2xvb3BzKTsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO1NFQygmIzM0O2ZlbnRyeS8mIzM0OyBTWVNfUFJFRklYICYjMzQ7c3lzX2dldHBnaWQmIzM0OykKJiM0MztpbnQgYmVuY2htYXJrKHZvaWQgKmN0eCkKJiM0Mzt7CiYjNDM7CWJwZl9sb29wKDEwMDAsIG91dGVyX2xvb3AsIE5VTEwsIDApOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvaXRlcnMuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9pdGVycy5jCmluZGV4IDBmYTcwYjEzM2Q5MzIuLjYyZDdkZjllODBiZWIgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9pdGVycy5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9pdGVycy5jCkBAIC04OCw2ICYjNDM7ODgsODkgQEAgaW50IGl0ZXJfZXJyX3Vuc2FmZV9hc21fbG9vcChjb25zdCB2b2lkICpjdHgpCiAJcmV0dXJuIDA7CiB9CiAKJiM0MzsvKgomIzQzOyAqIE5ha2VkIGZ1bmN0aW9uLCBzbyB0aGVyZSBpcyBubyBjb21waWxlci1nZW5lcmF0ZWQgZ2x1ZSBhbmQgdGhlIHdob2xlIGlubGluZWQgcHJvZ3JhbSBjYW4gYmUKJiM0MzsgKiBtYXRjaGVkLiBQaW5uZWQgdG8gYXJjaGVzIHdob3NlIEpJVHMgemVyby1leHRlbmQgMzItYml0IHdyaXRlcyBpbXBsaWNpdGx5CiYjNDM7ICogKGJwZl9qaXRfbmVlZHNfemV4dCgpID09IGZhbHNlKTsgb24gYXJjaGVzIHRoYXQgbmVlZCBleHBsaWNpdCB6ZXJvLWV4dGVuc2lvbiB0aGUgdmVyaWZpZXIKJiM0MzsgKiBpbnRlcmxlYXZlcyAmIzM0O3dOID0gd04mIzM0OyBpbnNucyBhbmQgdGhlIGZpeGVkIHNoYXBlIGJlbG93IHdvdWxkIG5vdCBtYXRjaC4gVGhlIGlubGluaW5nIGl0c2VsZiBpcwomIzQzOyAqIGFyY2ggaW5kZXBlbmRlbnQsIHNvIGNoZWNraW5nIGl0IG9uIHRoZXNlIGFyY2hlcyBpcyBzdWZmaWNpZW50LgomIzQzOyAqCiYjNDM7ICogYnBmX2l0ZXJfbnVtX25ldygpIGVtaXRzIHRoZSBmdWxsIHJhbmdlIGNoZWNrIChkaXN0YW5jZSBjb21wdXRhdGlvbiBhbmQgYm90aCB0aGUgLUVJTlZBTCBhbmQKJiM0MzsgKiAtRTJCSUcgZXJyb3IgcGF0aHMpOyBicGZfaXRlcl9udW1fbmV4dCgpIGFuZCBicGZfaXRlcl9udW1fZGVzdHJveSgpIGFyZSBpbmxpbmVkIHRvby4KJiM0MzsgKi8KJiM0MztTRUMoJiMzNDtyYXdfdHAmIzM0OykKJiM0MztfX2FyY2hfeDg2XzY0CiYjNDM7X19hcmNoX2FybTY0CiYjNDM7X19zdWNjZXNzCiYjNDM7X194bGF0ZWQoJiMzNDtyNiA9IHIxMCYjMzQ7KQomIzQzO19feGxhdGVkKCYjMzQ7cjYgJiM0Mzs9IC04JiMzNDspCiYjNDM7X194bGF0ZWQoJiMzNDtjYWxsIHVua25vd24mIzM0OykKJiM0MztfX3hsYXRlZCgmIzM0O3IzID0gcjAmIzM0OykKJiM0MztfX3hsYXRlZCgmIzM0O3IzICZhbXA7PSA2NTUzNSYjMzQ7KQomIzQzO19feGxhdGVkKCYjMzQ7cjEgPSByNiYjMzQ7KQomIzQzO19feGxhdGVkKCYjMzQ7cjIgPSAwJiMzNDspCiYjNDM7LyogYnBmX2l0ZXJfbnVtX25ldygmYW1wO2l0LCAwLCAmbHQ7bm9uLWNvbnN0Jmd0Oykgd2l0aCB0aGUgcmFuZ2UgY2hlY2sga2VwdCAqLwomIzQzO19feGxhdGVkKCYjMzQ7aWYgdzIgcyZndDsgdzMgZ290byBwYyYjNDM7OCYjMzQ7KQomIzQzO19feGxhdGVkKCYjMzQ7dzAgPSB3MyYjMzQ7KQomIzQzO19feGxhdGVkKCYjMzQ7dzAgLT0gdzImIzM0OykKJiM0MztfX3hsYXRlZCgmIzM0O2lmIHIwICZndDsgMHg4MDAwMDAgZ290byBwYyYjNDM7OCYjMzQ7KQomIzQzO19feGxhdGVkKCYjMzQ7dzIgJiM0Mzs9IC0xJiMzNDspCiYjNDM7X194bGF0ZWQoJiMzNDsqKHUzMiAqKShyMSAmIzQzOzApID0gcjImIzM0OykKJiM0MztfX3hsYXRlZCgmIzM0OyoodTMyICopKHIxICYjNDM7NCkgPSByMyYjMzQ7KQomIzQzO19feGxhdGVkKCYjMzQ7cjAgPSAwJiMzNDspCiYjNDM7X194bGF0ZWQoJiMzNDtnb3RvIHBjJiM0Mzs1JiMzNDspCiYjNDM7X194bGF0ZWQoJiMzNDsqKHU2NCAqKShyMSAmIzQzOzApID0gMCYjMzQ7KQomIzQzO19feGxhdGVkKCYjMzQ7cjAgPSAtMjImIzM0OykKJiM0MztfX3hsYXRlZCgmIzM0O2dvdG8gcGMmIzQzOzImIzM0OykKJiM0MztfX3hsYXRlZCgmIzM0OyoodTY0ICopKHIxICYjNDM7MCkgPSAwJiMzNDspCiYjNDM7X194bGF0ZWQoJiMzNDtyMCA9IC03JiMzNDspCiYjNDM7X194bGF0ZWQoJiMzNDtyMSA9IHI2JiMzNDspCiYjNDM7LyogYnBmX2l0ZXJfbnVtX25leHQoJmFtcDtpdCkgKi8KJiM0MztfX3hsYXRlZCgmIzM0O3IwID0gKih1MzIgKikocjEgJiM0MzswKSYjMzQ7KQomIzQzO19feGxhdGVkKCYjMzQ7dzAgJiM0Mzs9IDEmIzM0OykKJiM0MztfX3hsYXRlZCgmIzM0O3IyID0gKih1MzIgKikocjEgJiM0Mzs0KSYjMzQ7KQomIzQzO19feGxhdGVkKCYjMzQ7aWYgdzAgcyZndDs9IHcyIGdvdG8gcGMmIzQzOzMmIzM0OykKJiM0MztfX3hsYXRlZCgmIzM0OyoodTMyICopKHIxICYjNDM7MCkgPSByMCYjMzQ7KQomIzQzO19feGxhdGVkKCYjMzQ7cjAgPSByMSYjMzQ7KQomIzQzO19feGxhdGVkKCYjMzQ7Z290byBwYyYjNDM7MiYjMzQ7KQomIzQzO19feGxhdGVkKCYjMzQ7Kih1NjQgKikocjEgJiM0MzswKSA9IDAmIzM0OykKJiM0MztfX3hsYXRlZCgmIzM0O3IwID0gMCYjMzQ7KQomIzQzO19feGxhdGVkKCYjMzQ7aWYgcjAgIT0gMHgwIGdvdG8gcGMtMTEmIzM0OykKJiM0MztfX3hsYXRlZCgmIzM0O3IxID0gcjYmIzM0OykKJiM0MzsvKiBicGZfaXRlcl9udW1fZGVzdHJveSgmYW1wO2l0KSBpcyBpbmxpbmVkIHRvIGEgbm9wICovCiYjNDM7X194bGF0ZWQoJiMzNDtnb3RvIHBjJiM0MzswJiMzNDspCiYjNDM7X194bGF0ZWQoJiMzNDtyMCA9IDAmIzM0OykKJiM0MztfX3hsYXRlZCgmIzM0O2V4aXQmIzM0OykKJiM0MztpbnQgX19uYWtlZCBpdGVyX251bV9uZXdfaW5saW5lZCh2b2lkKQomIzQzO3sKJiM0MzsJYXNtIHZvbGF0aWxlICgKJiM0MzsJCS8qIHI2IHBvaW50cyB0byBzdHJ1Y3QgYnBmX2l0ZXJfbnVtIG9uIHRoZSBzdGFjayAqLwomIzQzOwkJJiMzNDtyNiA9IHIxMDsmIzM0OwomIzQzOwkJJiMzNDtyNiAmIzQzOz0gLTg7JiMzNDsKJiM0MzsJCS8qIG5vbi1jb25zdGFudCBlbmQgc28gdGhlIHJhbmdlIGNoZWNrcyBhcmUga2VwdCAqLwomIzQzOwkJJiMzNDtjYWxsICVbYnBmX2dldF9wcmFuZG9tX3UzMl07JiMzNDsKJiM0MzsJCSYjMzQ7cjMgPSByMDsmIzM0OwomIzQzOwkJJiMzNDtyMyAmYW1wOz0gMHhmZmZmOyYjMzQ7CiYjNDM7CQkmIzM0O3IxID0gcjY7JiMzNDsKJiM0MzsJCSYjMzQ7cjIgPSAwOyYjMzQ7CiYjNDM7CQkmIzM0O2NhbGwgJVticGZfaXRlcl9udW1fbmV3XTsmIzM0OwomIzQzOwkmIzM0OzE6JiMzNDsKJiM0MzsJCSYjMzQ7cjEgPSByNjsmIzM0OwomIzQzOwkJJiMzNDtjYWxsICVbYnBmX2l0ZXJfbnVtX25leHRdOyYjMzQ7CiYjNDM7CQkmIzM0O2lmIHIwICE9IDAgZ290byAxYjsmIzM0OwomIzQzOwkJJiMzNDtyMSA9IHI2OyYjMzQ7CiYjNDM7CQkmIzM0O2NhbGwgJVticGZfaXRlcl9udW1fZGVzdHJveV07JiMzNDsKJiM0MzsJCSYjMzQ7cjAgPSAwOyYjMzQ7CiYjNDM7CQkmIzM0O2V4aXQ7JiMzNDsKJiM0MzsJCToKJiM0MzsJCTogX19pbW0oYnBmX2dldF9wcmFuZG9tX3UzMiksCiYjNDM7CQkgIF9faW1tKGJwZl9pdGVyX251bV9uZXcpLAomIzQzOwkJICBfX2ltbShicGZfaXRlcl9udW1fbmV4dCksCiYjNDM7CQkgIF9faW1tKGJwZl9pdGVyX251bV9kZXN0cm95KQomIzQzOwkJOiBfX2Nsb2JiZXJfY29tbW9uLCAmIzM0O3I2JiMzNDsKJiM0MzsJKTsKJiM0Mzt9CiYjNDM7CiBTRUMoJiMzNDtyYXdfdHAmIzM0OykKIF9fc3VjY2VzcwogaW50IGl0ZXJfd2hpbGVfbG9vcChjb25zdCB2b2lkICpjdHgpCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDE0OjAwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgyODIKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAxOTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgQlBGIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHRoYXQgdHdlYWtzIGBrZXJuZWwvYnBmL2JwZl9pdGVyLmNgIGFuZCBga2VybmVsL2JwZi92ZXJpZmllci5jYC4gSXQgbG9va3MgbGlrZSB3ZSYjMzk7cmUgY2hhbmdpbmcgdGhlIHdheSBgYnBmX2l0ZXJfbnVtX25ld2AsIGBicGZfaXRlcl9udW1fbmV4dGAsIGFuZCBgYnBmX2l0ZXJfbnVtX2Rlc3Ryb3lgIHdvcmsgd2l0aGluIHRoZSBpdGVyYXRvciBpbXBsZW1lbnRhdGlvbiwgYnV0IHNwZWNpZmljYWxseSwgaXQmIzM5O3MgYWRkaW5nIGlubGluaW5nIG9mIHRoZXNlIGZ1bmN0aW9ucyBpbnRvIHRoZSB2ZXJpZmllciB2aWEgYGJwZl9maXh1cF9rZnVuY19jYWxsYC4gVGhhdCYjMzk7cyBpbnRlcmVzdGluZzsgaW5saW5pbmcgY291bGQgaGF2ZSBwZXJmb3JtYW5jZSBpbXBsaWNhdGlvbnMsIGdvb2Qgb3IgYmFkLCBhbmQgaXQgZGVmaW5pdGVseSBjaGFuZ2VzIHRoZSBjb2RlIHBhdGggdGhlIHZlcmlmaWVyIGhhcyB0byBuYXZpZ2F0ZS4gUGx1cywgdGhlIHBhdGNoIGluY2x1ZGVzIGEgYmVuY2htYXJrIGFuZCBhIHNlbGZ0ZXN0LCB3aGljaCBpcyBncmVhdCB0byBzZWUuCgpUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gdGhlIGNvcmUgQlBGIHZlcmlmaWVyIGFuZCBpdGVyYXRvciwgbm8gZG91YnQgYWJvdXQgdGhhdC4gVGhlIGltcGFjdCBvbiBwcm9ncmFtIGJlaGF2aW9yIGNvdWxkIGJlIHNpZ25pZmljYW50LCBldmVuIGlmIHN1YnRsZS4gR2l2ZW4gdGhlIG5hdHVyZSBvZiB0aGlzIGNoYW5nZSwgYW5kIHRoZSBwb3RlbnRpYWwgZm9yIG9mZi1ieS1vbmUgZXJyb3JzIGFuZCB0aGUgbGlrZSBpbiBpdGVyYXRvcnMsIGl0JiMzOTtzIHNjcmVhbWluZyBmb3Igc29tZSBmdXp6aW5nIHRvIGVuc3VyZSB3ZSBoYXZlbiYjMzk7dCBpbnRyb2R1Y2VkIGFueSByZWdyZXNzaW9ucyBvciB2dWxuZXJhYmlsaXRpZXMuIEl0JiMzOTtzIHRpbWUgdG8gZmlyZSB1cCB0aG9zZSBmdXp6ZXJzIQoKQmVmb3JlIEkgZGl2ZSB0b28gZGVlcCBpbnRvIHRoZSBjb2RlLCBJIG5lZWQgdG8gY2hlY2sgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gQm90aCB0aGUgQlBGIGl0ZXJhdG9yIGFuZCB0aGUgdmVyaWZpZXIgYXJlIGxpa2VseSBnb3Zlcm5lZCBieSBgQ09ORklHX0JQRl9TWVNDQUxMYCwgYW5kIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhpcyBpcyBwcm9wZXJseSBlbmFibGVkIGluIGFueSByZWxldmFudCB0ZXN0IGVudmlyb25tZW50cy4gSSYjMzk7bGwgdGFrZSBhIHF1aWNrIGxvb2sgaW4gYGtlcm5lbC9icGYvTWFrZWZpbGVgIHRvIGNvbmZpcm0gdGhlIGRlcGVuZGVuY2llcyBhbmQgZmxhZ3MuIExldCYjMzk7cyBtYWtlIHN1cmUgb3VyIGJ1aWxkIGVudmlyb25tZW50IGlzIHNldHVwIGNvcnJlY3RseSBiZWZvcmUgd2UgZGl2ZSBpbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAxNDowMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDticGZfaXRlci5vJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9NYWtlZmlsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL01ha2VmaWxlPTk9b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSAmIzQzOz0gc3lzY2FsbC5vIHZlcmlmaWVyLm8gaW5vZGUubyBoZWxwZXJzLm8gdG51bS5vIGNudW0ubyBsb2cubyB0b2tlbi5vIGxpdmVuZXNzLm8gY29uc3RfZm9sZC5vXG5rZXJuZWwvYnBmL01ha2VmaWxlOjEwOm9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IGJwZl9pdGVyLm8gbWFwX2l0ZXIubyB0YXNrX2l0ZXIubyBwcm9nX2l0ZXIubyBsaW5rX2l0ZXIub1xua2VybmVsL2JwZi9NYWtlZmlsZS0xMS1vYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSBoYXNodGFiLm8gYXJyYXltYXAubyBwZXJjcHVfZnJlZWxpc3QubyBicGZfbHJ1X2xpc3QubyBscG1fdHJpZS5vIG1hcF9pbl9tYXAubyBibG9vbV9maWx0ZXIub1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDE0OjAxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDkwNTEKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAxNjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqSW5pdGlhbCBBc3Nlc3NtZW50ICZhbXA7IEZvY3VzaW5nIHRoZSBJbnZlc3RpZ2F0aW9uKioKCk9rYXksIHNvIGl0IGxvb2tzIGxpa2Ugd2UmIzM5O3JlIGdvaW5nIHRvIG5lZWQgYENPTkZJR19CUEZfU1lTQ0FMTGAgZW5hYmxlZCwgdGhhdCYjMzk7cyBzdGVwIG9uZS4gTm93LCBsZXQmIzM5O3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MgYW5kIGZpZ3VyZSBvdXQgd2hlcmUgdGhlIG1lYXQgb2YgdGhpcyBpcy4gRnJvbSB0aGUgY2hhbmdlcywgaXQgc2VlbXMgbGlrZSB3ZSBzaG91bGQgYmUgcGF5aW5nIGNsb3NlIGF0dGVudGlvbiB0byBhIGZldyBzcGVjaWZpYyBmdW5jdGlvbnMuIEkmIzM5O20gc2VlaW5nIG1vZGlmaWNhdGlvbnMgaW4gYHZlcmlmaWVyLmNgIGZvciBgYnBmX2ZpeHVwX2tmdW5jX2NhbGxgLiBUaGF0JiMzOTtzIGEgZGVmaW5pdGUgcG9pbnQgb2YgaW50ZXJlc3QsIHNvIEkmIzM5O2xsIGtlZXAgYW4gZXllIG9uIHRoYXQgb25lLiBUaGVuLCBpbiBgYnBmX2l0ZXIuY2AsIEkgc3BvdCBzb21lIGFkanVzdG1lbnRzIHRvIGBicGZfaXRlcl9udW1fbmV3YCwgYGJwZl9pdGVyX251bV9uZXh0YCwgYW5kIGBicGZfaXRlcl9udW1fZGVzdHJveWAuIFRob3NlIGFsc28gbG9vayBsaWtlIHRoZXkmIzM5O3JlIGdvaW5nIHRvIGJlIGltcG9ydGFudCB0byB1bmRlcnN0YW5kIHRoaXMgY2hhbmdlLiBCYXNlZCBvbiB0aGF0IGluZm9ybWF0aW9uLCBib3RoIGBicGZfZml4dXBfa2Z1bmNfY2FsbGAsIGBicGZfaXRlcl9udW1fbmV3YCwgYGJwZl9pdGVyX251bV9uZXh0YCwgYW5kIGBicGZfaXRlcl9udW1fZGVzdHJveWAgYXJlIGdvaW5nIHRvIGJlIG15IGZvY3VzIHBvaW50cyB0byBkaXZlIGludG8uIE5vdywgSSB3YW50IHRvIHRha2UgYSBsb29rIGFuZCBzZWUgaWYgYGJwZl9maXh1cF9rZnVuY19jYWxsYCBpcyBhIHN0YXRpYyBmdW5jdGlvbi4gVGhhdCBjb3VsZCBpbXBhY3QgaG93IHdlIGNhbiB1c2UgaXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMTQ6MDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YnBmX2ZpeHVwX2tmdW5jX2NhbGwmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvYnBmL3ZlcmlmaWVyLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi92ZXJpZmllci5jPTE5ODU4PXN0YXRpYyB2b2lkIF9fZml4dXBfY29sbGVjdGlvbl9pbnNlcnRfa2Z1bmMoc3RydWN0IGJwZl9pbnNuX2F1eF9kYXRhICppbnNuX2F1eCxcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTk4NzQtXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTk4NzU6aW50IGJwZl9maXh1cF9rZnVuY19jYWxsKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfaW5zbiAqaW5zbixcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xOTg3Ni1cdFx0ICAgICBzdHJ1Y3QgYnBmX2luc24gKmluc25fYnVmLCBpbnQgaW5zbl9pZHgsIGludCAqY250KVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDE0OjAxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk3MDEKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAyMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBzdW1tYXJpemVkIHRob3VnaHQgcHJvY2VzcywgcHJlc2VudGVkIGFzIGlmIEkgd2VyZSB0aGlua2luZyBpdDoKCioqRXZvbHZpbmcgU2l0dWF0aW9uIEFzc2Vzc21lbnQqKgoKVGhpcyBzaXR1YXRpb24gaXNuJiMzOTt0IGZpeGVkOyBpdCYjMzk7cyBkeW5hbWljLiBXZSBuZWVkIHRvIGJlIGNoZWNraW5nIGZvciBtb3ZlbWVudCBhbmQgdXBkYXRlcy4gV2UgY2Fubm90IGFzc3VtZSB0aGF0IGl0IGlzIHN0YXRpYy4gTXkgaW5zdGluY3QgaXMgdGhhdCB0aGVyZSBpcyBhIGtleSBlbGVtZW50IHRoYXQgY2FuIGlsbHVtaW5hdGUgdGhpcyBkeW5hbWljIGNoYXJhY3RlcmlzdGljLiBJIHNob3VsZCByZWFsbHkgY2hlY2sgYGJwZl9pdGVyX251bV9uZXdgLiBUaGlzIHdpbGwgb2ZmZXIgYSBjbGVhciBzdGFydGluZyBwb2ludCBmb3IgbXkgaW52ZXN0aWdhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAxNDowMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDticGZfaXRlcl9udW1fbmV3JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9icGZfaXRlci5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvYnBmX2l0ZXIuYz03Njg9X19icGZfa2Z1bmNfc3RhcnRfZGVmcygpO1xua2VybmVsL2JwZi9icGZfaXRlci5jLTc2OS1cbmtlcm5lbC9icGYvYnBmX2l0ZXIuYzo3NzA6X19icGZfa2Z1bmMgaW50IGJwZl9pdGVyX251bV9uZXcoc3RydWN0IGJwZl9pdGVyX251bSAqaXQsIGludCBzdGFydCwgaW50IGVuZClcbmtlcm5lbC9icGYvYnBmX2l0ZXIuYy03NzEte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDE0OjAyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT43bTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk5ODEKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAyOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqS2VybmVsIEZ1bmN0aW9uIENvbnNpZGVyYXRpb25zKioKCkFscmlnaHQsIHNvIHRoZSBjb3JlIG9mIHdoYXQgSSYjMzk7bSB0aGlua2luZyBhYm91dCByaWdodCBub3cgaGluZ2VzIG9uIHRoZSBuYXR1cmUgb2YgdGhlIGZ1bmN0aW9uIGluIHF1ZXN0aW9uOiBpdCYjMzk7cyBhIGtmdW5jLiBUaGF0IGltbWVkaWF0ZWx5IGluZm9ybXMgYSBsb3Qgb2YgbXkgYXBwcm9hY2guIFRoZSBpbXBsaWNhdGlvbnMgb2YgKm5vdCogYmVpbmcgYSBzdGF0aWMgZnVuY3Rpb24gYXJlIGNvbnNpZGVyYWJsZSBpbiB0aGUgY29udGV4dCBvZiBrZXJuZWwgQlBGIGRldmVsb3BtZW50LiBJJiMzOTttIGFscmVhZHkgbWVudGFsbHkgcnVubmluZyB0aHJvdWdoIHRoZSB2YXJpb3VzIGNvbnRleHRzIHdoZXJlIHRoaXMgY2hhcmFjdGVyaXN0aWMgaW1wYWN0cyB0aGluZ3MgbGlrZSBzeW1ib2wgcmVzb2x1dGlvbiwgaW5saW5pbmcgYmVoYXZpb3IgKG9yIGxhY2sgdGhlcmVvZiwgcGVyaGFwcyksIGFuZCBhbnkgcG90ZW50aWFsIHJlbGlhbmNlIG9uIGdsb2JhbCBzdGF0ZSB3aXRoaW4gdGhlIGtlcm5lbC4KCkdpdmVuIHRoYXQsIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBiZWhhdmlvci4gVGhlIG9idmlvdXMgbmV4dCBzdGVwIGlzIHRvIGV4YW1pbmUgYGJwZl9pdGVyX251bV9uZXh0YC4gVGhhdCBmdW5jdGlvbiBpcyB3aGVyZSBJIHdpbGwgc3RhcnQsIGRpZ2dpbmcgaW50byBpdHMgaW1wbGVtZW50YXRpb24gYW5kIGhvdyBpdCYjMzk7cyBkZXNpZ25lZCB0byBpbnRlcmZhY2UuIElzIGl0IGRlc2lnbmVkIHRvIGJlIGZhc3Q/IFJvYnVzdD8gV2hhdCBzcGVjaWZpYyBhc3BlY3RzIG9mIGl0ZXJhdGl2ZSBwcm9jZXNzZXMgZG9lcyBpdCBoYW5kbGU/IEFyZSB0aGVyZSBhbnkgcG90ZW50aWFsIGdvdGNoYXMgb3IgZWRnZSBjYXNlcyBJIG5lZWQgdG8gY29uc2lkZXI/IEkmIzM5O20gYW50aWNpcGF0aW5nIHRoYXQgaXRzIGludGVybmFsIHdvcmtpbmdzIHdpbGwgcmV2ZWFsIGEgbG90IGFib3V0IHRoZSBleHBlY3RlZCB1c2FnZSBwYXR0ZXJucyBhbmQgdGhlIG92ZXJhbGwgZGVzaWduIG9mIHRoaXMgY29tcG9uZW50LiBUaW1lIHRvIGRpdmUgaW4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDE0OjA5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JwZl9pdGVyX251bV9uZXh0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9icGZfaXRlci5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvYnBmX2l0ZXIuYz03NzA9X19icGZfa2Z1bmMgaW50IGJwZl9pdGVyX251bV9uZXcoc3RydWN0IGJwZl9pdGVyX251bSAqaXQsIGludCBzdGFydCwgaW50IGVuZClcbi0tXG5rZXJuZWwvYnBmL2JwZl9pdGVyLmMtNzc3LVx0Lyogc3RhcnQgPT0gZW5kIGlzIGxlZ2l0LCBpdCYjMzk7cyBhbiBlbXB0eSByYW5nZSBhbmQgd2UmIzM5O2xsIGp1c3QgZ2V0IE5VTExcbmtlcm5lbC9icGYvYnBmX2l0ZXIuYzo3Nzg6XHQgKiBvbiBmaXJzdCAoYW5kIGFueSBzdWJzZXF1ZW50KSBicGZfaXRlcl9udW1fbmV4dCgpIGNhbGxcbmtlcm5lbC9icGYvYnBmX2l0ZXIuYy03NzktXHQgKi9cbi0tXG5rZXJuZWwvYnBmL2JwZl9pdGVyLmMtNzkwLVxua2VybmVsL2JwZi9icGZfaXRlci5jOjc5MTpcdC8qIHVzZXIgd2lsbCBjYWxsIGJwZl9pdGVyX251bV9uZXh0KCkgZmlyc3QsXG5rZXJuZWwvYnBmL2JwZl9pdGVyLmMtNzkyLVx0ICogd2hpY2ggd2lsbCBzZXQgcy1cdTAwM2VjdXIgdG8gZXhhY3RseSBzdGFydCB2YWx1ZTtcbi0tXG5rZXJuZWwvYnBmL2JwZl9pdGVyLmMtODAwLVxua2VybmVsL2JwZi9icGZfaXRlci5jOjgwMTpfX2JwZl9rZnVuYyBpbnQgKmJwZl9pdGVyX251bV9uZXh0KHN0cnVjdCBicGZfaXRlcl9udW0qIGl0KVxua2VybmVsL2JwZi9icGZfaXRlci5jLTgwMi17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDE0OjA5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwNjEwCgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIHRoZSBLZXJuZWwgRnVuY3Rpb24qKgoKQWxyaWdodCwgc28gdGhlIGltbWVkaWF0ZSBjb250ZXh0IHRlbGxzIG1lIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggYSBrZXJuZWwgZnVuY3Rpb24g4oCTIGxpa2VseSBzb21ldGhpbmcgY3J1Y2lhbCB0byB0aGUgQlBGIGluZnJhc3RydWN0dXJlLiBNeSBpbml0aWFsIGluc3RpbmN0IGlzIHRvIGNhdGVnb3JpemUgaXQgYXMgc3VjaCwgYW5kIHRoYXQgZnJhbWV3b3JrIGhlbHBzIG5hcnJvdyBkb3duIHRoZSByZWxldmFudCBhcmVhcyBvZiBpbnZlc3RpZ2F0aW9uLgoKTm93LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoZSBkZXRhaWwgYW5kIHdoYXQgdGhhdCBtZWFucyBmb3IgaXRzIGZ1bmN0aW9uLiBUaGUgbmV4dCBzdGVwIGlzIHRvIGV4YW1pbmUgYGJwZl9pdGVyX251bV9kZXN0cm95YC4gVGhhdCBuYW1lIGFsb25lIGlzIGZhaXJseSBkZXNjcmlwdGl2ZTogJiMzNDticGYsJiMzNDsgJiMzNDtpdGVyLCYjMzQ7IGFuZCAmIzM0O2Rlc3Ryb3kmIzM0OyBnaXZlcyBtZSBhIHNvbGlkIHN0YXJ0aW5nIHBvaW50LiBJJiMzOTttIGFscmVhZHkgbWVudGFsbHkgcnVubmluZyB0aHJvdWdoIHRoZSBwcm9iYWJsZSB1c2UgY2FzZXMuIEkgZXhwZWN0IGl0JiMzOTtzIGFib3V0IGNsZWFuaW5nIHVwIGEgbnVtZXJpYyBpdGVyYXRvciB3aXRoaW4gYSBCUEYgY29udGV4dC4gTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHNwZWNpZmljIG51bWVyaWMgdHlwZSBhbmQgY29udGV4dCB0aGlzIGZ1bmN0aW9uIGFwcGxpZXMgdG8sIHNvIEkgY2FuIGZ1cnRoZXIgZGVkdWNlIGl0cyBzaWduaWZpY2FuY2UuIEkmIzM5O20gZ29pbmcgdG8gc3RhcnQgbWVudGFsbHkgdHJhY2luZyBleGVjdXRpb24gcGF0aHMgdG8gdW5kZXJzdGFuZCB3aGVyZSB0aGlzIGZ1bmN0aW9uIGZpdHMgaW50byB0aGUgb3ZlcmFsbCBCUEYgbGlmZWN5Y2xlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAxNDoxMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDticGZfaXRlcl9udW1fZGVzdHJveSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvYnBmX2l0ZXIuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL2JwZl9pdGVyLmM9ODAxPV9fYnBmX2tmdW5jIGludCAqYnBmX2l0ZXJfbnVtX25leHQoc3RydWN0IGJwZl9pdGVyX251bSogaXQpXG4tLVxua2VybmVsL2JwZi9icGZfaXRlci5jLTgxOC1cbmtlcm5lbC9icGYvYnBmX2l0ZXIuYzo4MTk6X19icGZfa2Z1bmMgdm9pZCBicGZfaXRlcl9udW1fZGVzdHJveShzdHJ1Y3QgYnBmX2l0ZXJfbnVtICppdClcbmtlcm5lbC9icGYvYnBmX2l0ZXIuYy04MjAte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAxNDoxMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTAxNQoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDk0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGJyZWFrZG93biBvZiB3aGF0IEkmIzM5O20gbG9va2luZyBhdDoKCioqS2Z1bmMgRGlzc2VjdGlvbjogQ29yZSBGdW5jdGlvbnMgYW5kIENvbmZpZ3VyYXRpb24qKgoKUmlnaHQsIHNvIHRoaXMgaXMgZGVmaW5pdGVseSBhIGtmdW5jLCB3aGljaCBtZWFucyBJIG5lZWQgdG8gemVybyBpbiBvbiBhIHNwZWNpZmljIHNldCBvZiBmdW5jdGlvbnMuIEkga25vdyB0aGF0OiBgYnBmX2ZpeHVwX2tmdW5jX2NhbGxgIGlzIGdvaW5nIHRvIGJlIGNydWNpYWwgZm9yIHRoZSBpbml0aWFsIHNldHVwLCBhbmQgdGhlbiBJJiMzOTttIGFsc28gbG9va2luZyBhdCB0aGUgaXRlcmF0b3IgZnVuY3Rpb25zOiBgYnBmX2l0ZXJfbnVtX25ld2AsIGBicGZfaXRlcl9udW1fbmV4dGAsIGFuZCBgYnBmX2l0ZXJfbnVtX2Rlc3Ryb3lgLiBUaG9zZSBoYW5kbGUgdGhlIGNyZWF0aW9uLCBwcm9ncmVzc2lvbiwgYW5kIGNsZWFudXAgb2YgdGhlIGl0ZXJhdG9yLCB3aGljaCBpcyBsaWtlbHkgdGhlIGNvcmUgb2YgdGhlIGZ1bmN0aW9uYWxpdHkgaGVyZS4gSSBzaG91bGQgcHJvYmFibHkgcmV2aWV3IGhvdyBpdGVyYXRvcnMgaW50ZXJhY3Qgd2l0aCB0aGVzZSBmdW5jdGlvbnMuCgpJIHNob3VsZCBhbHNvIG1ha2Ugc3VyZSB0aGUgYEJQRl9TWVNDQUxMYCBjb25maWd1cmF0aW9uIG9wdGlvbiBpcyBlbmFibGVkIOKAkyBpdCYjMzk7cyBwcmV0dHkgZXNzZW50aWFsIGZvciB0aGUga2Z1bmMgdG8gYWN0dWFsbHkgZnVuY3Rpb24gcHJvcGVybHkgd2l0aGluIHRoZSBzeXN0ZW0gY2FsbCBjb250ZXh0LCBhbmQgdGhhdCYjMzk7cyB1c3VhbGx5IGltcG9ydGFudCBmb3IgdGhlIGNvbnRleHQga2Z1bmNzIG9wZXJhdGUgaW4uCgpKdXN0IHRvIGJlIHRob3JvdWdoLCBJIHNob3VsZCBzY2FuIGZvciBhbnkgb3RoZXIgY29uZmlndXJhdGlvbiBmbGFncyBvciByZWxldmFudCBrZXJuZWwgb3B0aW9ucyB0aGF0IG1pZ2h0IGJlIHJlbGV2YW50IGhlcmUuIFlvdSBuZXZlciBrbm93IHdoZW4gc29tZSBvYnNjdXJlIGZsYWcgaXMgbHVya2luZyBhbmQgYWZmZWN0aW5nIGJlaGF2aW9yLiBBbHdheXMgZ29vZCB0byBkb3VibGUgY2hlY2suCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDE0OjEwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEJQRl9TWVNDQUxMJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW5pdC9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMTQ6MTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE0MDcKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiAxNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipUcmFjaW5nIERvd24gYEJQRl9TWVNDQUxMYCoqCgpBbHJpZ2h0LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgYEJQRl9TWVNDQUxMYCBpcyBkZWZpbmVkLiBUaGlzIGxpa2VseSBtZWFucyBJJiMzOTttIGxvb2tpbmcgYXQgaG93IHN5c2NhbGxzIGFyZSBiZWluZyBob29rZWQgb3IgcG90ZW50aWFsbHkgZmlsdGVyZWQgd2l0aCBlQlBGLiBJJiMzOTtsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hlcmUgdGhhdCBtYWNybyBpcyBkZWNsYXJlZCwgcHJvYmFibHkgaW4gYSBrZXJuZWwgaGVhZGVyIGZpbGUuIEkmIzM5O20gZ3Vlc3NpbmcgaXQmIzM5O3MgcGFydCBvZiB0aGUgY29yZSBCUEYgaW5mcmFzdHJ1Y3R1cmUsIG1heWJlIHJlbGF0ZWQgdG8gdGhlIHRyYWNpbmcgb3Iga3Byb2JlcyBtb2R1bGVzLiBJJiMzOTtsbCBwcm9iYWJseSBzdGFydCB3aXRoIHRoZSBzdGFuZGFyZCBpbmNsdWRlIGRpcmVjdG9yaWVzLCBzb21ldGhpbmcgbGlrZSBgL3Vzci9zcmMvbGludXgvaW5jbHVkZS9gLCBvciB3aGVyZXZlciB0aGUga2VybmVsIGhlYWRlcnMgcmVzaWRlIG9uIHRoaXMgc3lzdGVtLiBGcm9tIHRoZXJlLCBJJiMzOTtsbCBuZWVkIHRvIHVzZSBzb21lIGNsZXZlciBzZWFyY2hpbmcgdGVjaG5pcXVlcy4gYGdyZXBgIGlzIHByb2JhYmx5IHRoZSBpbW1lZGlhdGUgdG9vbCwgYnV0IEkgbWlnaHQgdXNlIGEgbW9yZSBwcmVjaXNlIGNvbW1hbmQgbGlrZSBgZmluZGAgYW5kIHRoZW4gYGdyZXBgIHRvIG5hcnJvdyBkb3duIHRoZSBzZWFyY2ggaWYgSSBrbm93IHNvbWUgcmVsYXRlZCBrZXl3b3JkcywgbGlrZSAmIzM0O2JwZiYjMzQ7LCAmIzM0O3N5c2NhbGwmIzM0Oywgb3IgJiMzNDtob29rJiMzNDsuIEkmIzM5O20gYW50aWNpcGF0aW5nIGl0JiMzOTtsbCBiZSBhIGZhaXJseSBpbnZvbHZlZCBtYWNybywgcHJvYmFibHkgc29tZXRoaW5nIHRoYXQgZXhwYW5kcyB0byBhIHNwZWNpZmljIGVCUEYgaW5zdHJ1Y3Rpb24gb3IgYSBzZXJpZXMgb2YgaW5zdHJ1Y3Rpb25zIHJlbGF0ZWQgdG8gYSBzeXNjYWxsIGVudHJ5IHBvaW50LiBJJiMzOTtsbCBhbHNvIHdhbnQgdG8gY29uc2lkZXIgd2hhdCBrZXJuZWwgdmVyc2lvbnMgbWlnaHQgYmUgcmVsZXZhbnQsIGFuZCBsb29rIGludG8gdGhlIHNwZWNpZmljIGhlYWRlciBsb2NhdGlvbiBmb3IgZWFjaCB2ZXJzaW9uIGlmIG5lY2Vzc2FyeSwgYXMga2VybmVsIEFQSSBjaGFuZ2VzIGNhbiBhZmZlY3QgdGhpcyBzb3J0IG9mIHRoaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAxNDoxMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgQlBGX1NZU0NBTEwmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9LY29uZmlnPTI1PW1lbnUgXCYjMzQ7QlBGIHN1YnN5c3RlbVwmIzM0O1xua2VybmVsL2JwZi9LY29uZmlnLTI2LVxua2VybmVsL2JwZi9LY29uZmlnOjI3OmNvbmZpZyBCUEZfU1lTQ0FMTFxua2VybmVsL2JwZi9LY29uZmlnLTI4LVx0Ym9vbCBcJiMzNDtFbmFibGUgYnBmKCkgc3lzdGVtIGNhbGxcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMTQ6MTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE4MjUKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAxMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIHN1bW1hcml6ZWQgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRoZSBnaXZlbiBwcm9tcHQ6CgoqKkFuYWx5emluZyB0aGUgS2NvbmZpZyBGaWxlIGZvciBCUEYgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyB0aGUgaW5zdHJ1Y3Rpb24gbWVudGlvbnMgc29tZXRoaW5nIGFib3V0IGV4YW1pbmluZyBga2VybmVsL2JwZi9LY29uZmlnYC4gUmlnaHQsIHRoaXMgaW1tZWRpYXRlbHkgc3VnZ2VzdHMgYSBmb2N1cyBvbiB0aGUga2VybmVsJiMzOTtzIGJ1aWxkIGNvbmZpZ3VyYXRpb24gZm9yIEJQRiAoQmVya2VsZXkgUGFja2V0IEZpbHRlcikgZnVuY3Rpb25hbGl0eS4gR2l2ZW4gbXkgZXhwZXJ0aXNlLCBJIGtub3cgdGhhdCBgS2NvbmZpZ2AgZmlsZXMgYXJlIHRoZSBiYWNrYm9uZSBvZiB0aGUgTGludXgga2VybmVsJiMzOTtzIGNvbmZpZ3VyYXRpb24gc3lzdGVtLCBtYW5hZ2VkIGJ5IGBrYnVpbGRgLiBUaGV5IGRlZmluZSBhbGwgdGhlIG9wdGlvbnMgcHJlc2VudGVkIHRvIHVzZXJzIHRocm91Z2ggdG9vbHMgbGlrZSBgbWVudWNvbmZpZ2AsIGBkZWZjb25maWdgLCBhbmQgb3RoZXJzLCB3aGVuIHRoZXkmIzM5O3JlIGNvbmZpZ3VyaW5nIHRoZWlyIGtlcm5lbC4KCk15IG1pbmQgaW1tZWRpYXRlbHkgYmVnaW5zIHRvIGFudGljaXBhdGUgd2hhdCBJJiMzOTtsbCBmaW5kIHdpdGhpbiB0aGlzIHNwZWNpZmljIEtjb25maWcgZmlsZS4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgdGhpbmdzIGxpa2U6CgoqICAgKipCUEYgZmVhdHVyZSBlbmFibGUvZGlzYWJsZSBmbGFnczoqKiBUaGVyZSBzaG91bGQgYmUgdG9wLWxldmVsIG9wdGlvbnMgZm9yIGVuYWJsaW5nIEJQRiBicm9hZGx5LCB3aGljaCBvZnRlbiB0cmFuc2xhdGUgaW50byBjb21waWxhdGlvbiBmbGFncy4KKiAgICoqU3BlY2lmaWMgQlBGIHN1YnN5c3RlbXM6KiogTGlrZWx5LCB0aGVyZSB3aWxsIGJlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0aGF0IGNvbnRyb2wgdGhlIGluY2x1c2lvbiBvZiBzcGVjaWZpYyBCUEYgaGVscGVyIGZ1bmN0aW9ucywgQlBGIHByb2dyYW0gdHlwZXMgKGUuZy4sIHRyYWNpbmcsIG5ldHdvcmtpbmcsIFhEUCksIGFuZCBCUEYtcmVsYXRlZCBmZWF0dXJlcy4gSSYjMzk7bSB0aGlua2luZyBvZiBlQlBGIGFuZCBpdHMgZGl2ZXJzZSB1c2VzLgoqICAgKipEZXBlbmRlbmNpZXMgYW5kIGNvbnN0cmFpbnRzOioqIFRoZSBLY29uZmlnIGZpbGUgd2lsbCBzcGVjaWZ5IHdoaWNoIGZlYXR1cmVzIGRlcGVuZCBvbiBvdGhlcnMsIGFuZCBhbnkgaGFyZHdhcmUgb3Igc29mdHdhcmUgcmVxdWlyZW1lbnRzLiBUaGlzIGlzIGtleSwgYXMgQlBGIGNhbiBoYXZlIHZlcnkgc3BlY2lmaWMgZGVwZW5kZW5jeSBjaGFpbnMuCiogICAqKkhlbHAgdGV4dDoqKiBUaGUgZmlsZSAqc2hvdWxkKiBjb250YWluIGhlbHBmdWwgZGVzY3JpcHRpb25zIGZvciBlYWNoIG9wdGlvbiwgaWRlYWxseSBleHBsYWluaW5nIHdoYXQgdGhlIG9wdGlvbiBkb2VzLCBhbmQgcHJvdmlkaW5nIGNvbnRleHQgZm9yIGl0cyB1c2UuIEkgd2lsbCBhbHNvIGFzc2VzcyBpdHMgcXVhbGl0eS4KKiAgICoqRGVmYXVsdCB2YWx1ZXM6KiogSXQgd2lsbCBkZWZpbmUgZGVmYXVsdCBjaG9pY2VzIGZvciB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zLgoKSSYjMzk7bSByZWFkeSB0byBkaXZlIGludG8gdGhlIGZpbGUgYW5kIGdldCB0byB3b3JrLiBMZXQmIzM5O3Mgc2VlIHdoYXQgaW50ZXJlc3RpbmcgY29uZmlndXJhdGlvbnMgdGhlIGtlcm5lbCBkZXZzIGhhdmUgY3JlYXRlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMTQ6MTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtrZXJuZWwvYnBmL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyNSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDI1Olx0bWVudSBcJiMzNDtCUEYgc3Vic3lzdGVtXCYjMzQ7XG4gIDI2Olx0XG4gIDI3Olx0Y29uZmlnIEJQRl9TWVNDQUxMXG4gIDI4Olx0XHRib29sIFwmIzM0O0VuYWJsZSBicGYoKSBzeXN0ZW0gY2FsbFwmIzM0O1xuICAyOTpcdFx0c2VsZWN0IEJQRlxuICAzMDpcdFx0c2VsZWN0IElSUV9XT1JLXG4gIDMxOlx0XHRzZWxlY3QgTkVFRF9UQVNLU19SQ1VcbiAgMzI6XHRcdHNlbGVjdCBUQVNLU19UUkFDRV9SQ1VcbiAgMzM6XHRcdHNlbGVjdCBCSU5BUllfUFJJTlRGXG4gIDM0Olx0XHRzZWxlY3QgTkVUX1NPQ0tfTVNHIGlmIE5FVFxuICAzNTpcdFx0c2VsZWN0IE5FVF9YR1JFU1MgaWYgTkVUXG4gIDM2Olx0XHRzZWxlY3QgUEFHRV9QT09MIGlmIE5FVFxuICAzNzpcdFx0ZGVmYXVsdCBuXG4gIDM4Olx0XHRoZWxwXG4gIDM5Olx0XHQgIEVuYWJsZSB0aGUgYnBmKCkgc3lzdGVtIGNhbGwgdGhhdCBhbGxvd3MgdG8gbWFuaXB1bGF0ZSBCUEYgcHJvZ3JhbXNcbiAgNDA6XHRcdCAgYW5kIG1hcHMgdmlhIGZpbGUgZGVzY3JpcHRvcnMuXG4gIDQxOlx0XG4gIDQyOlx0Y29uZmlnIEJQRl9KSVRcbiAgNDM6XHRcdGJvb2wgXCYjMzQ7RW5hYmxlIEJQRiBKdXN0IEluIFRpbWUgY29tcGlsZXJcJiMzNDtcbiAgNDQ6XHRcdGRlcGVuZHMgb24gQlBGXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDE0OjExPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyNTA1CgkJCQkJCQlvdXRwdXQ6IDE2OAoJCQkJCQkJdGhvdWdodHM6IDI3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqTXkgQlBGIFN0cmF0ZWd5KioKCkFscmlnaHQsIHNvIHRoZSBjb3JlIG9mIHRoaXMgaW52ZXN0aWdhdGlvbiwgdGhlIHZlcnkgY3J1eCBvZiB3aGVyZSBJIG5lZWQgdG8gZm9jdXMgbXkgZW5lcmdpZXMsIGlzIGdvaW5nIHRvIGJlIGRyaXZlbiBieSB0aGUgYEJQRl9TWVNDQUxMYCBjb25maWd1cmF0aW9uLiBUaGF0JiMzOTtzIHRoZSBrZXksIHRoZSBlbnRyeSBwb2ludCBmb3IgZXZlcnl0aGluZyBJIG5lZWQgdG8gYW5hbHl6ZS4gSXQmIzM5O3MgdGhlIGx5bmNocGluLCB0aGUgcGxhY2Ugd2hlcmUgSSYjMzk7bGwgaG9vayBpbiB0byBnZXQgdGhlIGRhdGEgSSBuZWVkLgoKQW5kLCBvZiBjb3Vyc2UsIG9uY2UgSSYjMzk7dmUgZ290IHRoYXQgZGF0YSwgb25jZSBJJiMzOTt2ZSBzaWZ0ZWQgdGhyb3VnaCBpdCwgd3J1bmcgaXQgZHJ5IGFuZCBhbmFseXplZCBpdCAtIEkmIzM5O20gZ29pbmcgdG8gcmVwb3J0IHRob3NlIGZpbmRpbmdzIHdpdGggYHNldC1yZXN1bHRzYC4gTm8gc3VycHJpc2VzIHRoZXJlLiBJdCYjMzk7cyB0aGUgbW9zdCBlZmZlY3RpdmUgYW5kIGVmZmljaWVudCB3YXkgdG8gcHJlc2VudCBhbmQgZm9ybWF0IHRoZSBpbmZvcm1hdGlvbiBhZnRlciBhbGwgdGhhdCBpbnRlbnNpdmUgd29yay4gSXTigJlzIHdoYXQgSSYjMzk7bGwgbGV2ZXJhZ2UgdG8gcHJlc2VudCB0aGUgaW5zaWdodHMgdGhhdCBlbWVyZ2UgZnJvbSB0aGUgc3lzY2FsbCBhbmFseXNpcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMTQ6MTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YnBmX2ZpeHVwX2tmdW5jX2NhbGwmIzM0OywKICAgICYjMzQ7YnBmX2l0ZXJfbnVtX25ldyYjMzQ7LAogICAgJiMzNDticGZfaXRlcl9udW1fbmV4dCYjMzQ7LAogICAgJiMzNDticGZfaXRlcl9udW1fZGVzdHJveSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgaW1wbGVtZW50YXRpb24gb2YgQlBGIG51bWVyaWMgaXRlcmF0b3JzIChgYnBmX2l0ZXJfbnVtX25ld2AsIGBicGZfaXRlcl9udW1fbmV4dGAsIGBicGZfaXRlcl9udW1fZGVzdHJveWApIGFuZCBhZGRzIGlubGluaW5nIGZvciB0aGVzZSBrZnVuY3MgaW4gdGhlIEJQRiB2ZXJpZmllciAoYGJwZl9maXh1cF9rZnVuY19jYWxsYCkuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGNvcmUgQlBGIHN1YnN5c3RlbSBhbmQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDticGZfZml4dXBfa2Z1bmNfY2FsbCYjMzQ7LAogICAgJiMzNDticGZfaXRlcl9udW1fbmV3JiMzNDssCiAgICAmIzM0O2JwZl9pdGVyX251bV9uZXh0JiMzNDssCiAgICAmIzM0O2JwZl9pdGVyX251bV9kZXN0cm95JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBCUEYgbnVtZXJpYyBpdGVyYXRvcnMgKGBicGZfaXRlcl9udW1fbmV3YCwgYGJwZl9pdGVyX251bV9uZXh0YCwgYGJwZl9pdGVyX251bV9kZXN0cm95YCkgYW5kIGFkZHMgaW5saW5pbmcgZm9yIHRoZXNlIGtmdW5jcyBpbiB0aGUgQlBGIHZlcmlmaWVyIChgYnBmX2ZpeHVwX2tmdW5jX2NhbGxgKS4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUgY29yZSBCUEYgc3Vic3lzdGVtIGFuZCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMDRUMTQ6MDA6NDMuNTUxMzUwOFoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY5NjYxNzIwODAwMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfU1lTQ0FMTFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJwZl9maXh1cF9rZnVuY19jYWxsXCIsXG4gICAgXCJicGZfaXRlcl9udW1fbmV3XCIsXG4gICAgXCJicGZfaXRlcl9udW1fbmV4dFwiLFxuICAgIFwiYnBmX2l0ZXJfbnVtX2Rlc3Ryb3lcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgaW1wbGVtZW50YXRpb24gb2YgQlBGIG51bWVyaWMgaXRlcmF0b3JzIChgYnBmX2l0ZXJfbnVtX25ld2AsIGBicGZfaXRlcl9udW1fbmV4dGAsIGBicGZfaXRlcl9udW1fZGVzdHJveWApIGFuZCBhZGRzIGlubGluaW5nIGZvciB0aGVzZSBrZnVuY3MgaW4gdGhlIEJQRiB2ZXJpZmllciAoYGJwZl9maXh1cF9rZnVuY19jYWxsYCkuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGNvcmUgQlBGIHN1YnN5c3RlbSBhbmQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMTQ6MDA6NDMuNTUxMzU4NDdaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYxNzA3NDM0NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGJlNWRkZjYyYmU2YjE5MTM3OGMxZjA2MjBhYmQ5Njk4ZjIyODIyMDRcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFR1ZSBBdWcgNCAxNDowMDo0MiAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL2JwZl9pdGVyLmMgYi9rZXJuZWwvYnBmL2JwZl9pdGVyLmNcXG5pbmRleCBmNWVhZWIyNDkzZDRhLi4xNGE1ZmRmYTA0MjE0IDEwMDY0NFxcbi0tLSBhL2tlcm5lbC9icGYvYnBmX2l0ZXIuY1xcbisrKyBiL2tlcm5lbC9icGYvYnBmX2l0ZXIuY1xcbkBAIC03ODIsOCArNzgyLDggQEAgX19icGZfa2Z1bmMgaW50IGJwZl9pdGVyX251bV9uZXcoc3RydWN0IGJwZl9pdGVyX251bSAqaXQsIGludCBzdGFydCwgaW50IGVuZClcXG4gXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIFxcdH1cXG4gXFxuLVxcdC8qIGF2b2lkIG92ZXJmbG93cywgZS5nLiwgaWYgc3RhcnQgPT0gSU5UX01JTiBhbmQgZW5kID09IElOVF9NQVggKi9cXG4tXFx0aWYgKChzNjQpZW5kIC0gKHM2NClzdGFydCBcXHUwMDNlIEJQRl9NQVhfTE9PUFMpIHtcXG4rXFx0Lyogc3RhcnQgXFx1MDAzYz0gZW5kIGhlcmUsIHNvIGVuZCAtIHN0YXJ0IGZpdHMgaW4gYSB1MzIgd2l0aG91dCBvdmVyZmxvdyAqL1xcbitcXHRpZiAoKHUzMikoZW5kIC0gc3RhcnQpIFxcdTAwM2UgQlBGX01BWF9MT09QUykge1xcbiBcXHRcXHRzLVxcdTAwM2VjdXIgPSBzLVxcdTAwM2VlbmQgPSAwO1xcbiBcXHRcXHRyZXR1cm4gLUUyQklHO1xcbiBcXHR9XFxuQEAgLTgwMiwxMiArODAyLDExIEBAIF9fYnBmX2tmdW5jIGludCAqYnBmX2l0ZXJfbnVtX25leHQoc3RydWN0IGJwZl9pdGVyX251bSogaXQpXFxuIHtcXG4gXFx0c3RydWN0IGJwZl9pdGVyX251bV9rZXJuICpzID0gKHZvaWQgKilpdDtcXG4gXFxuLVxcdC8qIGNoZWNrIGZhaWxlZCBpbml0aWFsaXphdGlvbiBvciBpZiB3ZSBhcmUgZG9uZSAoc2FtZSBiZWhhdmlvcik7XFxuLVxcdCAqIG5lZWQgdG8gYmUgY2FyZWZ1bCBhYm91dCBvdmVyZmxvdywgc28gY29udmVydCB0byBzNjQgZm9yIGNoZWNrcyxcXG4tXFx0ICogZS5nLiwgaWYgcy1cXHUwMDNlY3VyID09IHMtXFx1MDAzZWVuZCA9PSBJTlRfTUFYLCB3ZSBjYW4ndCBqdXN0IGRvXFxuLVxcdCAqIHMtXFx1MDAzZWN1ciArIDEgXFx1MDAzZT0gcy1cXHUwMDNlZW5kXFxuK1xcdC8qXFxuK1xcdCAqIHMtXFx1MDAzZWN1ciBcXHUwMDNjIHMtXFx1MDAzZWVuZCB3aGlsZSBpdGVyYXRpbmcsIGVsc2Ugcy1cXHUwMDNlY3VyID09IHMtXFx1MDAzZWVuZCA9PSAwOyB0aGUgc2lnbmVkXFxuK1xcdCAqIHMtXFx1MDAzZWN1ciArIDEgXFx1MDAzZT0gcy1cXHUwMDNlZW5kIGhvbGRzIGV2ZW4gd2hlbiBzLVxcdTAwM2VjdXIgKyAxIHdyYXBzIChzdGFydCA9PSBJTlRfTUlOKS5cXG4gXFx0ICovXFxuLVxcdGlmICgoczY0KShzLVxcdTAwM2VjdXIgKyAxKSBcXHUwMDNlPSBzLVxcdTAwM2VlbmQpIHtcXG4rXFx0aWYgKHMtXFx1MDAzZWN1ciArIDEgXFx1MDAzZT0gcy1cXHUwMDNlZW5kKSB7XFxuIFxcdFxcdHMtXFx1MDAzZWN1ciA9IHMtXFx1MDAzZWVuZCA9IDA7XFxuIFxcdFxcdHJldHVybiBOVUxMO1xcbiBcXHR9XFxuQEAgLTgxOSw5ICs4MTgsNyBAQCBfX2JwZl9rZnVuYyBpbnQgKmJwZl9pdGVyX251bV9uZXh0KHN0cnVjdCBicGZfaXRlcl9udW0qIGl0KVxcbiBcXG4gX19icGZfa2Z1bmMgdm9pZCBicGZfaXRlcl9udW1fZGVzdHJveShzdHJ1Y3QgYnBmX2l0ZXJfbnVtICppdClcXG4ge1xcbi1cXHRzdHJ1Y3QgYnBmX2l0ZXJfbnVtX2tlcm4gKnMgPSAodm9pZCAqKWl0O1xcbi1cXG4tXFx0cy1cXHUwMDNlY3VyID0gcy1cXHUwMDNlZW5kID0gMDtcXG4rXFx0Lyogbm8tb3AgKi9cXG4gfVxcbiBcXG4gX19icGZfa2Z1bmNfZW5kX2RlZnMoKTtcXG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi92ZXJpZmllci5jIGIva2VybmVsL2JwZi92ZXJpZmllci5jXFxuaW5kZXggYjI3NDAwNGZjY2ZkOS4uM2U0NGIwMjA1NzU2YSAxMDA2NDRcXG4tLS0gYS9rZXJuZWwvYnBmL3ZlcmlmaWVyLmNcXG4rKysgYi9rZXJuZWwvYnBmL3ZlcmlmaWVyLmNcXG5AQCAtMjAwMDEsNiArMjAwMDEsNTEgQEAgaW50IGJwZl9maXh1cF9rZnVuY19jYWxsKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfaW5zbiAqaW5zbixcXG4gXFx0XFx0aW5zbl9idWZbNF0gPSBCUEZfQUxVNjRfUkVHKEJQRl9TVUIsIEJQRl9SRUdfMCwgQlBGX1JFR18xKTtcXG4gXFx0XFx0aW5zbl9idWZbNV0gPSBCUEZfQUxVNjRfSU1NKEJQRl9ORUcsIEJQRl9SRUdfMCwgMCk7XFxuIFxcdFxcdCpjbnQgPSA2O1xcbitcXHR9IGVsc2UgaWYgKGRlc2MtXFx1MDAzZWZ1bmNfaWQgPT0gc3BlY2lhbF9rZnVuY19saXN0W0tGX2JwZl9pdGVyX251bV9uZXddKSB7XFxuK1xcdFxcdC8qIGlubGluZSBicGZfaXRlcl9udW1fbmV3KFxcdTAwMjZpdCwgc3RhcnQsIGVuZCk7IFIxPVxcdTAwMjZpdCwgUjI9c3RhcnQsIFIzPWVuZCAqL1xcbitcXHRcXHRpbnQgaSA9IDA7XFxuK1xcbitcXHRcXHQvKiBpZiAoc3RhcnQgXFx1MDAzZSBlbmQpIGdvdG8gZWludmFsOyAqL1xcbitcXHRcXHRpbnNuX2J1ZltpKytdID0gQlBGX0pNUDMyX1JFRyhCUEZfSlNHVCwgQlBGX1JFR18yLCBCUEZfUkVHXzMsIDgpO1xcbitcXHRcXHQvKiByMCA9ICh1MzIpZW5kIC0gKHUzMilzdGFydDsgaWYgKHIwIFxcdTAwM2UgQlBGX01BWF9MT09QUykgZ290byBlMmJpZzsgKi9cXG4rXFx0XFx0aW5zbl9idWZbaSsrXSA9IEJQRl9NT1YzMl9SRUcoQlBGX1JFR18wLCBCUEZfUkVHXzMpO1xcbitcXHRcXHRpbnNuX2J1ZltpKytdID0gQlBGX0FMVTMyX1JFRyhCUEZfU1VCLCBCUEZfUkVHXzAsIEJQRl9SRUdfMik7XFxuK1xcdFxcdGluc25fYnVmW2krK10gPSBCUEZfSk1QX0lNTShCUEZfSkdULCBCUEZfUkVHXzAsIEJQRl9NQVhfTE9PUFMsIDgpO1xcbitcXHRcXHQvKiBzLVxcdTAwM2VjdXIgPSBzdGFydCAtIDE7IHMtXFx1MDAzZWVuZCA9IGVuZDsgcmV0dXJuIDA7ICovXFxuK1xcdFxcdGluc25fYnVmW2krK10gPSBCUEZfQUxVMzJfSU1NKEJQRl9BREQsIEJQRl9SRUdfMiwgLTEpO1xcbitcXHRcXHRpbnNuX2J1ZltpKytdID0gQlBGX1NUWF9NRU0oQlBGX1csIEJQRl9SRUdfMSwgQlBGX1JFR18yLCAwKTtcXG4rXFx0XFx0aW5zbl9idWZbaSsrXSA9IEJQRl9TVFhfTUVNKEJQRl9XLCBCUEZfUkVHXzEsIEJQRl9SRUdfMywgNCk7XFxuK1xcdFxcdGluc25fYnVmW2krK10gPSBCUEZfTU9WNjRfSU1NKEJQRl9SRUdfMCwgMCk7XFxuK1xcdFxcdGluc25fYnVmW2krK10gPSBCUEZfSk1QX0EoNSk7XFxuK1xcdFxcdC8qIGVpbnZhbDogcy1cXHUwMDNlY3VyID0gcy1cXHUwMDNlZW5kID0gMDsgcmV0dXJuIC1FSU5WQUw7ICovXFxuK1xcdFxcdGluc25fYnVmW2krK10gPSBCUEZfU1RfTUVNKEJQRl9EVywgQlBGX1JFR18xLCAwLCAwKTtcXG4rXFx0XFx0aW5zbl9idWZbaSsrXSA9IEJQRl9NT1Y2NF9JTU0oQlBGX1JFR18wLCAtRUlOVkFMKTtcXG4rXFx0XFx0aW5zbl9idWZbaSsrXSA9IEJQRl9KTVBfQSgyKTtcXG4rXFx0XFx0LyogZTJiaWc6IHMtXFx1MDAzZWN1ciA9IHMtXFx1MDAzZWVuZCA9IDA7IHJldHVybiAtRTJCSUc7ICovXFxuK1xcdFxcdGluc25fYnVmW2krK10gPSBCUEZfU1RfTUVNKEJQRl9EVywgQlBGX1JFR18xLCAwLCAwKTtcXG4rXFx0XFx0aW5zbl9idWZbaSsrXSA9IEJQRl9NT1Y2NF9JTU0oQlBGX1JFR18wLCAtRTJCSUcpO1xcbitcXHRcXHQqY250ID0gaTtcXG4rXFx0fSBlbHNlIGlmIChkZXNjLVxcdTAwM2VmdW5jX2lkID09IHNwZWNpYWxfa2Z1bmNfbGlzdFtLRl9icGZfaXRlcl9udW1fbmV4dF0pIHtcXG4rXFx0XFx0LyogaW5saW5lIGJwZl9pdGVyX251bV9uZXh0KFxcdTAwMjZpdCk7IFIxPVxcdTAwMjZpdCwgcmV0dXJucyBcXHUwMDI2cy1cXHUwMDNlY3VyIG9yIE5VTEwgKi9cXG4rXFx0XFx0aW50IGkgPSAwO1xcbitcXG4rXFx0XFx0LyogcjAgPSBzLVxcdTAwM2VjdXIgKyAxOyBpZiAoKHMzMilyMCBcXHUwMDNlPSBzLVxcdTAwM2VlbmQpIGdvdG8gZG9uZTsgKi9cXG4rXFx0XFx0aW5zbl9idWZbaSsrXSA9IEJQRl9MRFhfTUVNKEJQRl9XLCBCUEZfUkVHXzAsIEJQRl9SRUdfMSwgMCk7XFxuK1xcdFxcdGluc25fYnVmW2krK10gPSBCUEZfQUxVMzJfSU1NKEJQRl9BREQsIEJQRl9SRUdfMCwgMSk7XFxuK1xcdFxcdGluc25fYnVmW2krK10gPSBCUEZfTERYX01FTShCUEZfVywgQlBGX1JFR18yLCBCUEZfUkVHXzEsIDQpO1xcbitcXHRcXHRpbnNuX2J1ZltpKytdID0gQlBGX0pNUDMyX1JFRyhCUEZfSlNHRSwgQlBGX1JFR18wLCBCUEZfUkVHXzIsIDMpO1xcbitcXHRcXHQvKiBzLVxcdTAwM2VjdXIgPSByMDsgcmV0dXJuIFxcdTAwMjZzLVxcdTAwM2VjdXI7ICovXFxuK1xcdFxcdGluc25fYnVmW2krK10gPSBCUEZfU1RYX01FTShCUEZfVywgQlBGX1JFR18xLCBCUEZfUkVHXzAsIDApO1xcbitcXHRcXHRpbnNuX2J1ZltpKytdID0gQlBGX01PVjY0X1JFRyhCUEZfUkVHXzAsIEJQRl9SRUdfMSk7XFxuK1xcdFxcdGluc25fYnVmW2krK10gPSBCUEZfSk1QX0EoMik7XFxuK1xcdFxcdC8qIGRvbmU6IHMtXFx1MDAzZWN1ciA9IHMtXFx1MDAzZWVuZCA9IDA7IHJldHVybiBOVUxMOyAqL1xcbitcXHRcXHRpbnNuX2J1ZltpKytdID0gQlBGX1NUX01FTShCUEZfRFcsIEJQRl9SRUdfMSwgMCwgMCk7XFxuK1xcdFxcdGluc25fYnVmW2krK10gPSBCUEZfTU9WNjRfSU1NKEJQRl9SRUdfMCwgMCk7XFxuK1xcdFxcdCpjbnQgPSBpO1xcbitcXHR9IGVsc2UgaWYgKGRlc2MtXFx1MDAzZWZ1bmNfaWQgPT0gc3BlY2lhbF9rZnVuY19saXN0W0tGX2JwZl9pdGVyX251bV9kZXN0cm95XSkge1xcbitcXHRcXHQvKiBicGZfaXRlcl9udW1fZGVzdHJveSgpIGlzIGEgbm8tb3A7IGVtaXQgYSBub3AgdG8gZHJvcCB0aGUgY2FsbCAqL1xcbitcXHRcXHRpbnNuX2J1ZlswXSA9IEJQRl9KTVBfQSgwKTtcXG4rXFx0XFx0KmNudCA9IDE7XFxuIFxcdH1cXG4gXFxuIFxcdGlmIChlbnYtXFx1MDAzZWluc25fYXV4X2RhdGFbaW5zbl9pZHhdLmFyZ19wcm9nKSB7XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9NYWtlZmlsZSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9NYWtlZmlsZVxcbmluZGV4IDU1ZDM5NDQzODcwNWEuLjMxNzRjMmYxOGU3MTUgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL01ha2VmaWxlXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL01ha2VmaWxlXFxuQEAgLTk2NSw2ICs5NjUsNyBAQCAkKE9VVFBVVCkvYmVuY2hfcmluZ2J1ZnMubzogJChPVVRQVVQpL3JpbmdidWZfYmVuY2guc2tlbC5oIFxcXFxcXG4gXFx0XFx0XFx0ICAgICQoT1VUUFVUKS9wZXJmYnVmX2JlbmNoLnNrZWwuaFxcbiAkKE9VVFBVVCkvYmVuY2hfYmxvb21fZmlsdGVyX21hcC5vOiAkKE9VVFBVVCkvYmxvb21fZmlsdGVyX2JlbmNoLnNrZWwuaFxcbiAkKE9VVFBVVCkvYmVuY2hfYnBmX2xvb3AubzogJChPVVRQVVQpL2JwZl9sb29wX2JlbmNoLnNrZWwuaFxcbiskKE9VVFBVVCkvYmVuY2hfYnBmX2Zvci5vOiAkKE9VVFBVVCkvYnBmX2Zvcl9iZW5jaC5za2VsLmhcXG4gJChPVVRQVVQpL2JlbmNoX3N0cm5jbXAubzogJChPVVRQVVQpL3N0cm5jbXBfYmVuY2guc2tlbC5oXFxuICQoT1VUUFVUKS9iZW5jaF9icGZfaGFzaG1hcF9mdWxsX3VwZGF0ZS5vOiAkKE9VVFBVVCkvYnBmX2hhc2htYXBfZnVsbF91cGRhdGVfYmVuY2guc2tlbC5oXFxuICQoT1VUUFVUKS9iZW5jaF9sb2NhbF9zdG9yYWdlLm86ICQoT1VUUFVUKS9sb2NhbF9zdG9yYWdlX2JlbmNoLnNrZWwuaFxcbkBAIC05OTAsNiArOTkxLDcgQEAgJChPVVRQVVQpL2JlbmNoOiAkKE9VVFBVVCkvYmVuY2gubyBcXFxcXFxuIFxcdFxcdCAkKE9VVFBVVCkvYmVuY2hfcmluZ2J1ZnMubyBcXFxcXFxuIFxcdFxcdCAkKE9VVFBVVCkvYmVuY2hfYmxvb21fZmlsdGVyX21hcC5vIFxcXFxcXG4gXFx0XFx0ICQoT1VUUFVUKS9iZW5jaF9icGZfbG9vcC5vIFxcXFxcXG4rXFx0XFx0ICQoT1VUUFVUKS9iZW5jaF9icGZfZm9yLm8gXFxcXFxcbiBcXHRcXHQgJChPVVRQVVQpL2JlbmNoX3N0cm5jbXAubyBcXFxcXFxuIFxcdFxcdCAkKE9VVFBVVCkvYmVuY2hfYnBmX2hhc2htYXBfZnVsbF91cGRhdGUubyBcXFxcXFxuIFxcdFxcdCAkKE9VVFBVVCkvYmVuY2hfbG9jYWxfc3RvcmFnZS5vIFxcXFxcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JlbmNoLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYmVuY2guY1xcbmluZGV4IDNkOWQyY2Q3NzY0YmQuLmI4NmI3MzQ1NmQzY2EgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JlbmNoLmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYmVuY2guY1xcbkBAIC0yNzYsNiArMjc2LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBhcmdwX29wdGlvbiBvcHRzW10gPSB7XFxuIGV4dGVybiBzdHJ1Y3QgYXJncCBiZW5jaF9yaW5nYnVmc19hcmdwO1xcbiBleHRlcm4gc3RydWN0IGFyZ3AgYmVuY2hfYmxvb21fbWFwX2FyZ3A7XFxuIGV4dGVybiBzdHJ1Y3QgYXJncCBiZW5jaF9icGZfbG9vcF9hcmdwO1xcbitleHRlcm4gc3RydWN0IGFyZ3AgYmVuY2hfYnBmX2Zvcl9hcmdwO1xcbiBleHRlcm4gc3RydWN0IGFyZ3AgYmVuY2hfbG9jYWxfc3RvcmFnZV9hcmdwO1xcbiBleHRlcm4gc3RydWN0IGFyZ3AgYmVuY2hfbG9jYWxfc3RvcmFnZV9yY3VfdGFza3NfdHJhY2VfYXJncDtcXG4gZXh0ZXJuIHN0cnVjdCBhcmdwIGJlbmNoX3N0cm5jbXBfYXJncDtcXG5AQCAtMjkyLDYgKzI5Myw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYXJncF9jaGlsZCBiZW5jaF9wYXJzZXJzW10gPSB7XFxuIFxcdHsgXFx1MDAyNmJlbmNoX3JpbmdidWZzX2FyZ3AsIDAsIFxcXCJSaW5nIGJ1ZmZlcnMgYmVuY2htYXJrXFxcIiwgMCB9LFxcbiBcXHR7IFxcdTAwMjZiZW5jaF9ibG9vbV9tYXBfYXJncCwgMCwgXFxcIkJsb29tIGZpbHRlciBtYXAgYmVuY2htYXJrXFxcIiwgMCB9LFxcbiBcXHR7IFxcdTAwMjZiZW5jaF9icGZfbG9vcF9hcmdwLCAwLCBcXFwiYnBmX2xvb3AgaGVscGVyIGJlbmNobWFya1xcXCIsIDAgfSxcXG4rXFx0eyBcXHUwMDI2YmVuY2hfYnBmX2Zvcl9hcmdwLCAwLCBcXFwiYnBmX2ZvciBsb29wIGJlbmNobWFya1xcXCIsIDAgfSxcXG4gXFx0eyBcXHUwMDI2YmVuY2hfbG9jYWxfc3RvcmFnZV9hcmdwLCAwLCBcXFwibG9jYWxfc3RvcmFnZSBiZW5jaG1hcmtcXFwiLCAwIH0sXFxuIFxcdHsgXFx1MDAyNmJlbmNoX3N0cm5jbXBfYXJncCwgMCwgXFxcImJwZl9zdHJuY21wIGhlbHBlciBiZW5jaG1hcmtcXFwiLCAwIH0sXFxuIFxcdHsgXFx1MDAyNmJlbmNoX2xvY2FsX3N0b3JhZ2VfcmN1X3Rhc2tzX3RyYWNlX2FyZ3AsIDAsXFxuQEAgLTU1Nyw2ICs1NTksNyBAQCBleHRlcm4gY29uc3Qgc3RydWN0IGJlbmNoIGJlbmNoX2Jsb29tX2ZhbHNlX3Bvc2l0aXZlO1xcbiBleHRlcm4gY29uc3Qgc3RydWN0IGJlbmNoIGJlbmNoX2hhc2htYXBfd2l0aG91dF9ibG9vbTtcXG4gZXh0ZXJuIGNvbnN0IHN0cnVjdCBiZW5jaCBiZW5jaF9oYXNobWFwX3dpdGhfYmxvb207XFxuIGV4dGVybiBjb25zdCBzdHJ1Y3QgYmVuY2ggYmVuY2hfYnBmX2xvb3A7XFxuK2V4dGVybiBjb25zdCBzdHJ1Y3QgYmVuY2ggYmVuY2hfYnBmX2ZvcjtcXG4gZXh0ZXJuIGNvbnN0IHN0cnVjdCBiZW5jaCBiZW5jaF9zdHJuY21wX25vX2hlbHBlcjtcXG4gZXh0ZXJuIGNvbnN0IHN0cnVjdCBiZW5jaCBiZW5jaF9zdHJuY21wX2hlbHBlcjtcXG4gZXh0ZXJuIGNvbnN0IHN0cnVjdCBiZW5jaCBiZW5jaF9icGZfaGFzaG1hcF9mdWxsX3VwZGF0ZTtcXG5AQCAtNjQwLDYgKzY0Myw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYmVuY2ggKmJlbmNoc1tdID0ge1xcbiBcXHRcXHUwMDI2YmVuY2hfaGFzaG1hcF93aXRob3V0X2Jsb29tLFxcbiBcXHRcXHUwMDI2YmVuY2hfaGFzaG1hcF93aXRoX2Jsb29tLFxcbiBcXHRcXHUwMDI2YmVuY2hfYnBmX2xvb3AsXFxuK1xcdFxcdTAwMjZiZW5jaF9icGZfZm9yLFxcbiBcXHRcXHUwMDI2YmVuY2hfc3RybmNtcF9ub19oZWxwZXIsXFxuIFxcdFxcdTAwMjZiZW5jaF9zdHJuY21wX2hlbHBlcixcXG4gXFx0XFx1MDAyNmJlbmNoX2JwZl9oYXNobWFwX2Z1bGxfdXBkYXRlLFxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYmVuY2hzL2JlbmNoX2JwZl9mb3IuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9iZW5jaHMvYmVuY2hfYnBmX2Zvci5jXFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcXG5pbmRleCAwMDAwMDAwMDAwMDAwLi43MzBjNTFhZDJkZWMzXFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9iZW5jaHMvYmVuY2hfYnBmX2Zvci5jXFxuQEAgLTAsMCArMSwxMDQgQEBcXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG4rLyogQ29weXJpZ2h0IChjKSAyMDI2IE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLiAqL1xcbitcXG4rI2luY2x1ZGUgXFx1MDAzY2FyZ3AuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFxcImJlbmNoLmhcXFwiXFxuKyNpbmNsdWRlIFxcXCJicGZfZm9yX2JlbmNoLnNrZWwuaFxcXCJcXG4rXFxuKy8qIEJQRiB0cmlnZ2VyaW5nIGJlbmNobWFya3MgKi9cXG4rc3RhdGljIHN0cnVjdCBjdHgge1xcbitcXHRzdHJ1Y3QgYnBmX2Zvcl9iZW5jaCAqc2tlbDtcXG4rfSBjdHg7XFxuK1xcbitzdGF0aWMgc3RydWN0IHtcXG4rXFx0X191MzIgbnJfbG9vcHM7XFxuK30gYXJncyA9IHtcXG4rXFx0LypcXG4rXFx0ICogRGVmYXVsdCB0byBhIGxhcmdlIGxvb3AgY291bnQgc28gdGhlIHBlci1pdGVyYXRpb24gYnBmX2l0ZXJfbnVtX25leHQoKSBjb3N0IGRvbWluYXRlc1xcbitcXHQgKiB0aGUgb25lLXRpbWUgYnBmX2l0ZXJfbnVtX25ldygpL2Rlc3Ryb3koKSBzZXR1cCBhbmQgdGVhcmRvd24uXFxuK1xcdCAqL1xcbitcXHQubnJfbG9vcHMgPSAxMDAwLFxcbit9O1xcbitcXG4rZW51bSB7XFxuK1xcdEFSR19OUl9MT09QUyA9IDQwMDAsXFxuK307XFxuK1xcbitzdGF0aWMgY29uc3Qgc3RydWN0IGFyZ3Bfb3B0aW9uIG9wdHNbXSA9IHtcXG4rXFx0eyBcXFwibnJfbG9vcHNcXFwiLCBBUkdfTlJfTE9PUFMsIFxcXCJucl9sb29wc1xcXCIsIDAsXFxuK1xcdFxcdFxcXCJTZXQgbnVtYmVyIG9mIGl0ZXJhdGlvbnMgZm9yIHRoZSBicGZfZm9yKCkgbG9vcFxcXCJ9LFxcbitcXHR7fSxcXG4rfTtcXG4rXFxuK3N0YXRpYyBlcnJvcl90IHBhcnNlX2FyZyhpbnQga2V5LCBjaGFyICphcmcsIHN0cnVjdCBhcmdwX3N0YXRlICpzdGF0ZSlcXG4re1xcbitcXHRzd2l0Y2ggKGtleSkge1xcbitcXHRjYXNlIEFSR19OUl9MT09QUzpcXG4rXFx0XFx0YXJncy5ucl9sb29wcyA9IHN0cnRvbChhcmcsIE5VTEwsIDEwKTtcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdGRlZmF1bHQ6XFxuK1xcdFxcdHJldHVybiBBUkdQX0VSUl9VTktOT1dOO1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rLyogZXhwb3J0ZWQgaW50byBiZW5jaG1hcmsgcnVubmVyICovXFxuK2NvbnN0IHN0cnVjdCBhcmdwIGJlbmNoX2JwZl9mb3JfYXJncCA9IHtcXG4rXFx0Lm9wdGlvbnMgPSBvcHRzLFxcbitcXHQucGFyc2VyID0gcGFyc2VfYXJnLFxcbit9O1xcbitcXG4rc3RhdGljIHZvaWQgdmFsaWRhdGUodm9pZClcXG4re1xcbitcXHRpZiAoZW52LmNvbnN1bWVyX2NudCAhPSAwKSB7XFxuK1xcdFxcdGZwcmludGYoc3RkZXJyLCBcXFwiYmVuY2htYXJrIGRvZXNuJ3Qgc3VwcG9ydCBjb25zdW1lciFcXFxcblxcXCIpO1xcbitcXHRcXHRleGl0KDEpO1xcbitcXHR9XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkICpwcm9kdWNlcih2b2lkICppbnB1dClcXG4re1xcbitcXHR3aGlsZSAodHJ1ZSlcXG4rXFx0XFx0LyogdHJpZ2dlciB0aGUgYnBmIHByb2dyYW0gKi9cXG4rXFx0XFx0c3lzY2FsbChfX05SX2dldHBnaWQpO1xcbitcXG4rXFx0cmV0dXJuIE5VTEw7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIG1lYXN1cmUoc3RydWN0IGJlbmNoX3JlcyAqcmVzKVxcbit7XFxuK1xcdHJlcy1cXHUwMDNlaGl0cyA9IGF0b21pY19zd2FwKFxcdTAwMjZjdHguc2tlbC1cXHUwMDNlYnNzLVxcdTAwM2VoaXRzLCAwKTtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgc2V0dXAodm9pZClcXG4re1xcbitcXHRzdHJ1Y3QgYnBmX2xpbmsgKmxpbms7XFxuK1xcbitcXHRzZXR1cF9saWJicGYoKTtcXG4rXFxuK1xcdGN0eC5za2VsID0gYnBmX2Zvcl9iZW5jaF9fb3Blbl9hbmRfbG9hZCgpO1xcbitcXHRpZiAoIWN0eC5za2VsKSB7XFxuK1xcdFxcdGZwcmludGYoc3RkZXJyLCBcXFwiZmFpbGVkIHRvIG9wZW4gc2tlbGV0b25cXFxcblxcXCIpO1xcbitcXHRcXHRleGl0KDEpO1xcbitcXHR9XFxuK1xcbitcXHRsaW5rID0gYnBmX3Byb2dyYW1fX2F0dGFjaChjdHguc2tlbC1cXHUwMDNlcHJvZ3MuYmVuY2htYXJrKTtcXG4rXFx0aWYgKCFsaW5rKSB7XFxuK1xcdFxcdGZwcmludGYoc3RkZXJyLCBcXFwiZmFpbGVkIHRvIGF0dGFjaCBwcm9ncmFtIVxcXFxuXFxcIik7XFxuK1xcdFxcdGV4aXQoMSk7XFxuK1xcdH1cXG4rXFxuK1xcdGN0eC5za2VsLVxcdTAwM2Vic3MtXFx1MDAzZW5yX2xvb3BzID0gYXJncy5ucl9sb29wcztcXG4rfVxcbitcXG4rY29uc3Qgc3RydWN0IGJlbmNoIGJlbmNoX2JwZl9mb3IgPSB7XFxuK1xcdC5uYW1lID0gXFxcImJwZi1mb3JcXFwiLFxcbitcXHQuYXJncCA9IFxcdTAwMjZiZW5jaF9icGZfZm9yX2FyZ3AsXFxuK1xcdC52YWxpZGF0ZSA9IHZhbGlkYXRlLFxcbitcXHQuc2V0dXAgPSBzZXR1cCxcXG4rXFx0LnByb2R1Y2VyX3RocmVhZCA9IHByb2R1Y2VyLFxcbitcXHQubWVhc3VyZSA9IG1lYXN1cmUsXFxuK1xcdC5yZXBvcnRfcHJvZ3Jlc3MgPSBvcHNfcmVwb3J0X3Byb2dyZXNzLFxcbitcXHQucmVwb3J0X2ZpbmFsID0gb3BzX3JlcG9ydF9maW5hbCxcXG4rfTtcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JlbmNocy9ydW5fYmVuY2hfYnBmX2Zvci5zaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9iZW5jaHMvcnVuX2JlbmNoX2JwZl9mb3Iuc2hcXG5uZXcgZmlsZSBtb2RlIDEwMDc1NVxcbmluZGV4IDAwMDAwMDAwMDAwMDAuLjdkYTY0NTM5MjBkYWJcXG4tLS0gL2Rldi9udWxsXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JlbmNocy9ydW5fYmVuY2hfYnBmX2Zvci5zaFxcbkBAIC0wLDAgKzEsMTUgQEBcXG4rIyEvYmluL2Jhc2hcXG4rIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxcbitcXG4rc291cmNlIC4vYmVuY2hzL3J1bl9jb21tb24uc2hcXG4rXFxuK3NldCAtZXVmbyBwaXBlZmFpbFxcbitcXG4rZm9yIHQgaW4gMSA0IDggMTIgMTY7IGRvXFxuK2ZvciBpIGluIDEwIDEwMCA1MDAgMTAwMCA1MDAwIDEwMDAwIDUwMDAwIDEwMDAwMCA1MDAwMDAgMTAwMDAwMDsgZG9cXG4rc3VidGl0bGUgXFxcIm5yX2xvb3BzOiAkaSwgbnJfdGhyZWFkczogJHRcXFwiXFxuK1xcdHN1bW1hcml6ZV9vcHMgXFxcImJwZl9mb3I6IFxcXCIgXFxcXFxcbitcXHQgICAgXFxcIiQoJFJVTl9CRU5DSCAtcCAkdCAtLW5yX2xvb3BzICRpIGJwZi1mb3IpXFxcIlxcbitcXHRwcmludGYgXFxcIlxcXFxuXFxcIlxcbitkb25lXFxuK2RvbmVcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2JwZl9mb3JfYmVuY2guYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9icGZfZm9yX2JlbmNoLmNcXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxcbmluZGV4IDAwMDAwMDAwMDAwMDAuLmY5YzcyMzA1MWZjNzRcXG4tLS0gL2Rldi9udWxsXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2JwZl9mb3JfYmVuY2guY1xcbkBAIC0wLDAgKzEsMzIgQEBcXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG4rLyogQ29weXJpZ2h0IChjKSAyMDI2IE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLiAqL1xcbitcXG4rI2luY2x1ZGUgXFxcInZtbGludXguaFxcXCJcXG4rI2luY2x1ZGUgXFx1MDAzY2JwZi9icGZfaGVscGVycy5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXFwiYnBmX21pc2MuaFxcXCJcXG4rXFxuK2NoYXIgX2xpY2Vuc2VbXSBTRUMoXFxcImxpY2Vuc2VcXFwiKSA9IFxcXCJHUExcXFwiO1xcbitcXG4raW50IG5yX2xvb3BzO1xcbitsb25nIGhpdHM7XFxuK1xcbitzdGF0aWMgaW50IG91dGVyX2xvb3AoX191MzIgaW5kZXgsIHZvaWQgKmRhdGEpXFxuK3tcXG4rXFx0aW50IGk7XFxuK1xcbitcXHQvKlxcbitcXHQgKiBFbXB0eSBib2R5OiB0aGUgd29yayBiZWluZyBtZWFzdXJlZCBpcyB0aGUgb3Blbi1jb2RlZCBudW1lcmljIGl0ZXJhdG9yIGl0c2VsZlxcbitcXHQgKiAoYnBmX2l0ZXJfbnVtX25ldy9uZXh0L2Rlc3Ryb3kgYmVoaW5kIGJwZl9mb3IoKSkuXFxuK1xcdCAqL1xcbitcXHRicGZfZm9yKGksIDAsIG5yX2xvb3BzKVxcbitcXHRcXHQ7XFxuK1xcdF9fc3luY19hZGRfYW5kX2ZldGNoKFxcdTAwMjZoaXRzLCBucl9sb29wcyk7XFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitTRUMoXFxcImZlbnRyeS9cXFwiIFNZU19QUkVGSVggXFxcInN5c19nZXRwZ2lkXFxcIilcXG4raW50IGJlbmNobWFyayh2b2lkICpjdHgpXFxuK3tcXG4rXFx0YnBmX2xvb3AoMTAwMCwgb3V0ZXJfbG9vcCwgTlVMTCwgMCk7XFxuK1xcdHJldHVybiAwO1xcbit9XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9pdGVycy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2l0ZXJzLmNcXG5pbmRleCAwZmE3MGIxMzNkOTMyLi42MmQ3ZGY5ZTgwYmViIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9pdGVycy5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2l0ZXJzLmNcXG5AQCAtODgsNiArODgsODkgQEAgaW50IGl0ZXJfZXJyX3Vuc2FmZV9hc21fbG9vcChjb25zdCB2b2lkICpjdHgpXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbisvKlxcbisgKiBOYWtlZCBmdW5jdGlvbiwgc28gdGhlcmUgaXMgbm8gY29tcGlsZXItZ2VuZXJhdGVkIGdsdWUgYW5kIHRoZSB3aG9sZSBpbmxpbmVkIHByb2dyYW0gY2FuIGJlXFxuKyAqIG1hdGNoZWQuIFBpbm5lZCB0byBhcmNoZXMgd2hvc2UgSklUcyB6ZXJvLWV4dGVuZCAzMi1iaXQgd3JpdGVzIGltcGxpY2l0bHlcXG4rICogKGJwZl9qaXRfbmVlZHNfemV4dCgpID09IGZhbHNlKTsgb24gYXJjaGVzIHRoYXQgbmVlZCBleHBsaWNpdCB6ZXJvLWV4dGVuc2lvbiB0aGUgdmVyaWZpZXJcXG4rICogaW50ZXJsZWF2ZXMgXFxcIndOID0gd05cXFwiIGluc25zIGFuZCB0aGUgZml4ZWQgc2hhcGUgYmVsb3cgd291bGQgbm90IG1hdGNoLiBUaGUgaW5saW5pbmcgaXRzZWxmIGlzXFxuKyAqIGFyY2ggaW5kZXBlbmRlbnQsIHNvIGNoZWNraW5nIGl0IG9uIHRoZXNlIGFyY2hlcyBpcyBzdWZmaWNpZW50LlxcbisgKlxcbisgKiBicGZfaXRlcl9udW1fbmV3KCkgZW1pdHMgdGhlIGZ1bGwgcmFuZ2UgY2hlY2sgKGRpc3RhbmNlIGNvbXB1dGF0aW9uIGFuZCBib3RoIHRoZSAtRUlOVkFMIGFuZFxcbisgKiAtRTJCSUcgZXJyb3IgcGF0aHMpOyBicGZfaXRlcl9udW1fbmV4dCgpIGFuZCBicGZfaXRlcl9udW1fZGVzdHJveSgpIGFyZSBpbmxpbmVkIHRvby5cXG4rICovXFxuK1NFQyhcXFwicmF3X3RwXFxcIilcXG4rX19hcmNoX3g4Nl82NFxcbitfX2FyY2hfYXJtNjRcXG4rX19zdWNjZXNzXFxuK19feGxhdGVkKFxcXCJyNiA9IHIxMFxcXCIpXFxuK19feGxhdGVkKFxcXCJyNiArPSAtOFxcXCIpXFxuK19feGxhdGVkKFxcXCJjYWxsIHVua25vd25cXFwiKVxcbitfX3hsYXRlZChcXFwicjMgPSByMFxcXCIpXFxuK19feGxhdGVkKFxcXCJyMyBcXHUwMDI2PSA2NTUzNVxcXCIpXFxuK19feGxhdGVkKFxcXCJyMSA9IHI2XFxcIilcXG4rX194bGF0ZWQoXFxcInIyID0gMFxcXCIpXFxuKy8qIGJwZl9pdGVyX251bV9uZXcoXFx1MDAyNml0LCAwLCBcXHUwMDNjbm9uLWNvbnN0XFx1MDAzZSkgd2l0aCB0aGUgcmFuZ2UgY2hlY2sga2VwdCAqL1xcbitfX3hsYXRlZChcXFwiaWYgdzIgc1xcdTAwM2UgdzMgZ290byBwYys4XFxcIilcXG4rX194bGF0ZWQoXFxcIncwID0gdzNcXFwiKVxcbitfX3hsYXRlZChcXFwidzAgLT0gdzJcXFwiKVxcbitfX3hsYXRlZChcXFwiaWYgcjAgXFx1MDAzZSAweDgwMDAwMCBnb3RvIHBjKzhcXFwiKVxcbitfX3hsYXRlZChcXFwidzIgKz0gLTFcXFwiKVxcbitfX3hsYXRlZChcXFwiKih1MzIgKikocjEgKzApID0gcjJcXFwiKVxcbitfX3hsYXRlZChcXFwiKih1MzIgKikocjEgKzQpID0gcjNcXFwiKVxcbitfX3hsYXRlZChcXFwicjAgPSAwXFxcIilcXG4rX194bGF0ZWQoXFxcImdvdG8gcGMrNVxcXCIpXFxuK19feGxhdGVkKFxcXCIqKHU2NCAqKShyMSArMCkgPSAwXFxcIilcXG4rX194bGF0ZWQoXFxcInIwID0gLTIyXFxcIilcXG4rX194bGF0ZWQoXFxcImdvdG8gcGMrMlxcXCIpXFxuK19feGxhdGVkKFxcXCIqKHU2NCAqKShyMSArMCkgPSAwXFxcIilcXG4rX194bGF0ZWQoXFxcInIwID0gLTdcXFwiKVxcbitfX3hsYXRlZChcXFwicjEgPSByNlxcXCIpXFxuKy8qIGJwZl9pdGVyX251bV9uZXh0KFxcdTAwMjZpdCkgKi9cXG4rX194bGF0ZWQoXFxcInIwID0gKih1MzIgKikocjEgKzApXFxcIilcXG4rX194bGF0ZWQoXFxcIncwICs9IDFcXFwiKVxcbitfX3hsYXRlZChcXFwicjIgPSAqKHUzMiAqKShyMSArNClcXFwiKVxcbitfX3hsYXRlZChcXFwiaWYgdzAgc1xcdTAwM2U9IHcyIGdvdG8gcGMrM1xcXCIpXFxuK19feGxhdGVkKFxcXCIqKHUzMiAqKShyMSArMCkgPSByMFxcXCIpXFxuK19feGxhdGVkKFxcXCJyMCA9IHIxXFxcIilcXG4rX194bGF0ZWQoXFxcImdvdG8gcGMrMlxcXCIpXFxuK19feGxhdGVkKFxcXCIqKHU2NCAqKShyMSArMCkgPSAwXFxcIilcXG4rX194bGF0ZWQoXFxcInIwID0gMFxcXCIpXFxuK19feGxhdGVkKFxcXCJpZiByMCAhPSAweDAgZ290byBwYy0xMVxcXCIpXFxuK19feGxhdGVkKFxcXCJyMSA9IHI2XFxcIilcXG4rLyogYnBmX2l0ZXJfbnVtX2Rlc3Ryb3koXFx1MDAyNml0KSBpcyBpbmxpbmVkIHRvIGEgbm9wICovXFxuK19feGxhdGVkKFxcXCJnb3RvIHBjKzBcXFwiKVxcbitfX3hsYXRlZChcXFwicjAgPSAwXFxcIilcXG4rX194bGF0ZWQoXFxcImV4aXRcXFwiKVxcbitpbnQgX19uYWtlZCBpdGVyX251bV9uZXdfaW5saW5lZCh2b2lkKVxcbit7XFxuK1xcdGFzbSB2b2xhdGlsZSAoXFxuK1xcdFxcdC8qIHI2IHBvaW50cyB0byBzdHJ1Y3QgYnBmX2l0ZXJfbnVtIG9uIHRoZSBzdGFjayAqL1xcbitcXHRcXHRcXFwicjYgPSByMTA7XFxcIlxcbitcXHRcXHRcXFwicjYgKz0gLTg7XFxcIlxcbitcXHRcXHQvKiBub24tY29uc3RhbnQgZW5kIHNvIHRoZSByYW5nZSBjaGVja3MgYXJlIGtlcHQgKi9cXG4rXFx0XFx0XFxcImNhbGwgJVticGZfZ2V0X3ByYW5kb21fdTMyXTtcXFwiXFxuK1xcdFxcdFxcXCJyMyA9IHIwO1xcXCJcXG4rXFx0XFx0XFxcInIzIFxcdTAwMjY9IDB4ZmZmZjtcXFwiXFxuK1xcdFxcdFxcXCJyMSA9IHI2O1xcXCJcXG4rXFx0XFx0XFxcInIyID0gMDtcXFwiXFxuK1xcdFxcdFxcXCJjYWxsICVbYnBmX2l0ZXJfbnVtX25ld107XFxcIlxcbitcXHRcXFwiMTpcXFwiXFxuK1xcdFxcdFxcXCJyMSA9IHI2O1xcXCJcXG4rXFx0XFx0XFxcImNhbGwgJVticGZfaXRlcl9udW1fbmV4dF07XFxcIlxcbitcXHRcXHRcXFwiaWYgcjAgIT0gMCBnb3RvIDFiO1xcXCJcXG4rXFx0XFx0XFxcInIxID0gcjY7XFxcIlxcbitcXHRcXHRcXFwiY2FsbCAlW2JwZl9pdGVyX251bV9kZXN0cm95XTtcXFwiXFxuK1xcdFxcdFxcXCJyMCA9IDA7XFxcIlxcbitcXHRcXHRcXFwiZXhpdDtcXFwiXFxuK1xcdFxcdDpcXG4rXFx0XFx0OiBfX2ltbShicGZfZ2V0X3ByYW5kb21fdTMyKSxcXG4rXFx0XFx0ICBfX2ltbShicGZfaXRlcl9udW1fbmV3KSxcXG4rXFx0XFx0ICBfX2ltbShicGZfaXRlcl9udW1fbmV4dCksXFxuK1xcdFxcdCAgX19pbW0oYnBmX2l0ZXJfbnVtX2Rlc3Ryb3kpXFxuK1xcdFxcdDogX19jbG9iYmVyX2NvbW1vbiwgXFxcInI2XFxcIlxcbitcXHQpO1xcbit9XFxuK1xcbiBTRUMoXFxcInJhd190cFxcXCIpXFxuIF9fc3VjY2Vzc1xcbiBpbnQgaXRlcl93aGlsZV9sb29wKGNvbnN0IHZvaWQgKmN0eClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMTQ6MDA6NDQuMTY5NTI0Njk2WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6Njk1OTk5MDIzNDE0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJQRl9TWVNDQUxMXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYnBmX2ZpeHVwX2tmdW5jX2NhbGxcIixcbiAgICBcImJwZl9pdGVyX251bV9uZXdcIixcbiAgICBcImJwZl9pdGVyX251bV9uZXh0XCIsXG4gICAgXCJicGZfaXRlcl9udW1fZGVzdHJveVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBCUEYgbnVtZXJpYyBpdGVyYXRvcnMgKGBicGZfaXRlcl9udW1fbmV3YCwgYGJwZl9pdGVyX251bV9uZXh0YCwgYGJwZl9pdGVyX251bV9kZXN0cm95YCkgYW5kIGFkZHMgaW5saW5pbmcgZm9yIHRoZXNlIGtmdW5jcyBpbiB0aGUgQlBGIHZlcmlmaWVyIChgYnBmX2ZpeHVwX2tmdW5jX2NhbGxgKS4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUgY29yZSBCUEYgc3Vic3lzdGVtIGFuZCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBiZTVkZGY2MmJlNmIxOTEzNzhjMWYwNjIwYWJkOTY5OGYyMjgyMjA0XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBBdWcgNCAxNDowMDo0MiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvYnBmX2l0ZXIuYyBiL2tlcm5lbC9icGYvYnBmX2l0ZXIuY1xuaW5kZXggZjVlYWViMjQ5M2Q0YS4uMTRhNWZkZmEwNDIxNCAxMDA2NDRcbi0tLSBhL2tlcm5lbC9icGYvYnBmX2l0ZXIuY1xuKysrIGIva2VybmVsL2JwZi9icGZfaXRlci5jXG5AQCAtNzgyLDggKzc4Miw4IEBAIF9fYnBmX2tmdW5jIGludCBicGZfaXRlcl9udW1fbmV3KHN0cnVjdCBicGZfaXRlcl9udW0gKml0LCBpbnQgc3RhcnQsIGludCBlbmQpXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFx0fVxuIFxuLVx0LyogYXZvaWQgb3ZlcmZsb3dzLCBlLmcuLCBpZiBzdGFydCA9PSBJTlRfTUlOIGFuZCBlbmQgPT0gSU5UX01BWCAqL1xuLVx0aWYgKChzNjQpZW5kIC0gKHM2NClzdGFydCBcdTAwM2UgQlBGX01BWF9MT09QUykge1xuK1x0Lyogc3RhcnQgXHUwMDNjPSBlbmQgaGVyZSwgc28gZW5kIC0gc3RhcnQgZml0cyBpbiBhIHUzMiB3aXRob3V0IG92ZXJmbG93ICovXG4rXHRpZiAoKHUzMikoZW5kIC0gc3RhcnQpIFx1MDAzZSBCUEZfTUFYX0xPT1BTKSB7XG4gXHRcdHMtXHUwMDNlY3VyID0gcy1cdTAwM2VlbmQgPSAwO1xuIFx0XHRyZXR1cm4gLUUyQklHO1xuIFx0fVxuQEAgLTgwMiwxMiArODAyLDExIEBAIF9fYnBmX2tmdW5jIGludCAqYnBmX2l0ZXJfbnVtX25leHQoc3RydWN0IGJwZl9pdGVyX251bSogaXQpXG4ge1xuIFx0c3RydWN0IGJwZl9pdGVyX251bV9rZXJuICpzID0gKHZvaWQgKilpdDtcbiBcbi1cdC8qIGNoZWNrIGZhaWxlZCBpbml0aWFsaXphdGlvbiBvciBpZiB3ZSBhcmUgZG9uZSAoc2FtZSBiZWhhdmlvcik7XG4tXHQgKiBuZWVkIHRvIGJlIGNhcmVmdWwgYWJvdXQgb3ZlcmZsb3csIHNvIGNvbnZlcnQgdG8gczY0IGZvciBjaGVja3MsXG4tXHQgKiBlLmcuLCBpZiBzLVx1MDAzZWN1ciA9PSBzLVx1MDAzZWVuZCA9PSBJTlRfTUFYLCB3ZSBjYW4ndCBqdXN0IGRvXG4tXHQgKiBzLVx1MDAzZWN1ciArIDEgXHUwMDNlPSBzLVx1MDAzZWVuZFxuK1x0LypcbitcdCAqIHMtXHUwMDNlY3VyIFx1MDAzYyBzLVx1MDAzZWVuZCB3aGlsZSBpdGVyYXRpbmcsIGVsc2Ugcy1cdTAwM2VjdXIgPT0gcy1cdTAwM2VlbmQgPT0gMDsgdGhlIHNpZ25lZFxuK1x0ICogcy1cdTAwM2VjdXIgKyAxIFx1MDAzZT0gcy1cdTAwM2VlbmQgaG9sZHMgZXZlbiB3aGVuIHMtXHUwMDNlY3VyICsgMSB3cmFwcyAoc3RhcnQgPT0gSU5UX01JTikuXG4gXHQgKi9cbi1cdGlmICgoczY0KShzLVx1MDAzZWN1ciArIDEpIFx1MDAzZT0gcy1cdTAwM2VlbmQpIHtcbitcdGlmIChzLVx1MDAzZWN1ciArIDEgXHUwMDNlPSBzLVx1MDAzZWVuZCkge1xuIFx0XHRzLVx1MDAzZWN1ciA9IHMtXHUwMDNlZW5kID0gMDtcbiBcdFx0cmV0dXJuIE5VTEw7XG4gXHR9XG5AQCAtODE5LDkgKzgxOCw3IEBAIF9fYnBmX2tmdW5jIGludCAqYnBmX2l0ZXJfbnVtX25leHQoc3RydWN0IGJwZl9pdGVyX251bSogaXQpXG4gXG4gX19icGZfa2Z1bmMgdm9pZCBicGZfaXRlcl9udW1fZGVzdHJveShzdHJ1Y3QgYnBmX2l0ZXJfbnVtICppdClcbiB7XG4tXHRzdHJ1Y3QgYnBmX2l0ZXJfbnVtX2tlcm4gKnMgPSAodm9pZCAqKWl0O1xuLVxuLVx0cy1cdTAwM2VjdXIgPSBzLVx1MDAzZWVuZCA9IDA7XG4rXHQvKiBuby1vcCAqL1xuIH1cbiBcbiBfX2JwZl9rZnVuY19lbmRfZGVmcygpO1xuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvdmVyaWZpZXIuYyBiL2tlcm5lbC9icGYvdmVyaWZpZXIuY1xuaW5kZXggYjI3NDAwNGZjY2ZkOS4uM2U0NGIwMjA1NzU2YSAxMDA2NDRcbi0tLSBhL2tlcm5lbC9icGYvdmVyaWZpZXIuY1xuKysrIGIva2VybmVsL2JwZi92ZXJpZmllci5jXG5AQCAtMjAwMDEsNiArMjAwMDEsNTEgQEAgaW50IGJwZl9maXh1cF9rZnVuY19jYWxsKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfaW5zbiAqaW5zbixcbiBcdFx0aW5zbl9idWZbNF0gPSBCUEZfQUxVNjRfUkVHKEJQRl9TVUIsIEJQRl9SRUdfMCwgQlBGX1JFR18xKTtcbiBcdFx0aW5zbl9idWZbNV0gPSBCUEZfQUxVNjRfSU1NKEJQRl9ORUcsIEJQRl9SRUdfMCwgMCk7XG4gXHRcdCpjbnQgPSA2O1xuK1x0fSBlbHNlIGlmIChkZXNjLVx1MDAzZWZ1bmNfaWQgPT0gc3BlY2lhbF9rZnVuY19saXN0W0tGX2JwZl9pdGVyX251bV9uZXddKSB7XG4rXHRcdC8qIGlubGluZSBicGZfaXRlcl9udW1fbmV3KFx1MDAyNml0LCBzdGFydCwgZW5kKTsgUjE9XHUwMDI2aXQsIFIyPXN0YXJ0LCBSMz1lbmQgKi9cbitcdFx0aW50IGkgPSAwO1xuK1xuK1x0XHQvKiBpZiAoc3RhcnQgXHUwMDNlIGVuZCkgZ290byBlaW52YWw7ICovXG4rXHRcdGluc25fYnVmW2krK10gPSBCUEZfSk1QMzJfUkVHKEJQRl9KU0dULCBCUEZfUkVHXzIsIEJQRl9SRUdfMywgOCk7XG4rXHRcdC8qIHIwID0gKHUzMillbmQgLSAodTMyKXN0YXJ0OyBpZiAocjAgXHUwMDNlIEJQRl9NQVhfTE9PUFMpIGdvdG8gZTJiaWc7ICovXG4rXHRcdGluc25fYnVmW2krK10gPSBCUEZfTU9WMzJfUkVHKEJQRl9SRUdfMCwgQlBGX1JFR18zKTtcbitcdFx0aW5zbl9idWZbaSsrXSA9IEJQRl9BTFUzMl9SRUcoQlBGX1NVQiwgQlBGX1JFR18wLCBCUEZfUkVHXzIpO1xuK1x0XHRpbnNuX2J1ZltpKytdID0gQlBGX0pNUF9JTU0oQlBGX0pHVCwgQlBGX1JFR18wLCBCUEZfTUFYX0xPT1BTLCA4KTtcbitcdFx0Lyogcy1cdTAwM2VjdXIgPSBzdGFydCAtIDE7IHMtXHUwMDNlZW5kID0gZW5kOyByZXR1cm4gMDsgKi9cbitcdFx0aW5zbl9idWZbaSsrXSA9IEJQRl9BTFUzMl9JTU0oQlBGX0FERCwgQlBGX1JFR18yLCAtMSk7XG4rXHRcdGluc25fYnVmW2krK10gPSBCUEZfU1RYX01FTShCUEZfVywgQlBGX1JFR18xLCBCUEZfUkVHXzIsIDApO1xuK1x0XHRpbnNuX2J1ZltpKytdID0gQlBGX1NUWF9NRU0oQlBGX1csIEJQRl9SRUdfMSwgQlBGX1JFR18zLCA0KTtcbitcdFx0aW5zbl9idWZbaSsrXSA9IEJQRl9NT1Y2NF9JTU0oQlBGX1JFR18wLCAwKTtcbitcdFx0aW5zbl9idWZbaSsrXSA9IEJQRl9KTVBfQSg1KTtcbitcdFx0LyogZWludmFsOiBzLVx1MDAzZWN1ciA9IHMtXHUwMDNlZW5kID0gMDsgcmV0dXJuIC1FSU5WQUw7ICovXG4rXHRcdGluc25fYnVmW2krK10gPSBCUEZfU1RfTUVNKEJQRl9EVywgQlBGX1JFR18xLCAwLCAwKTtcbitcdFx0aW5zbl9idWZbaSsrXSA9IEJQRl9NT1Y2NF9JTU0oQlBGX1JFR18wLCAtRUlOVkFMKTtcbitcdFx0aW5zbl9idWZbaSsrXSA9IEJQRl9KTVBfQSgyKTtcbitcdFx0LyogZTJiaWc6IHMtXHUwMDNlY3VyID0gcy1cdTAwM2VlbmQgPSAwOyByZXR1cm4gLUUyQklHOyAqL1xuK1x0XHRpbnNuX2J1ZltpKytdID0gQlBGX1NUX01FTShCUEZfRFcsIEJQRl9SRUdfMSwgMCwgMCk7XG4rXHRcdGluc25fYnVmW2krK10gPSBCUEZfTU9WNjRfSU1NKEJQRl9SRUdfMCwgLUUyQklHKTtcbitcdFx0KmNudCA9IGk7XG4rXHR9IGVsc2UgaWYgKGRlc2MtXHUwMDNlZnVuY19pZCA9PSBzcGVjaWFsX2tmdW5jX2xpc3RbS0ZfYnBmX2l0ZXJfbnVtX25leHRdKSB7XG4rXHRcdC8qIGlubGluZSBicGZfaXRlcl9udW1fbmV4dChcdTAwMjZpdCk7IFIxPVx1MDAyNml0LCByZXR1cm5zIFx1MDAyNnMtXHUwMDNlY3VyIG9yIE5VTEwgKi9cbitcdFx0aW50IGkgPSAwO1xuK1xuK1x0XHQvKiByMCA9IHMtXHUwMDNlY3VyICsgMTsgaWYgKChzMzIpcjAgXHUwMDNlPSBzLVx1MDAzZWVuZCkgZ290byBkb25lOyAqL1xuK1x0XHRpbnNuX2J1ZltpKytdID0gQlBGX0xEWF9NRU0oQlBGX1csIEJQRl9SRUdfMCwgQlBGX1JFR18xLCAwKTtcbitcdFx0aW5zbl9idWZbaSsrXSA9IEJQRl9BTFUzMl9JTU0oQlBGX0FERCwgQlBGX1JFR18wLCAxKTtcbitcdFx0aW5zbl9idWZbaSsrXSA9IEJQRl9MRFhfTUVNKEJQRl9XLCBCUEZfUkVHXzIsIEJQRl9SRUdfMSwgNCk7XG4rXHRcdGluc25fYnVmW2krK10gPSBCUEZfSk1QMzJfUkVHKEJQRl9KU0dFLCBCUEZfUkVHXzAsIEJQRl9SRUdfMiwgMyk7XG4rXHRcdC8qIHMtXHUwMDNlY3VyID0gcjA7IHJldHVybiBcdTAwMjZzLVx1MDAzZWN1cjsgKi9cbitcdFx0aW5zbl9idWZbaSsrXSA9IEJQRl9TVFhfTUVNKEJQRl9XLCBCUEZfUkVHXzEsIEJQRl9SRUdfMCwgMCk7XG4rXHRcdGluc25fYnVmW2krK10gPSBCUEZfTU9WNjRfUkVHKEJQRl9SRUdfMCwgQlBGX1JFR18xKTtcbitcdFx0aW5zbl9idWZbaSsrXSA9IEJQRl9KTVBfQSgyKTtcbitcdFx0LyogZG9uZTogcy1cdTAwM2VjdXIgPSBzLVx1MDAzZWVuZCA9IDA7IHJldHVybiBOVUxMOyAqL1xuK1x0XHRpbnNuX2J1ZltpKytdID0gQlBGX1NUX01FTShCUEZfRFcsIEJQRl9SRUdfMSwgMCwgMCk7XG4rXHRcdGluc25fYnVmW2krK10gPSBCUEZfTU9WNjRfSU1NKEJQRl9SRUdfMCwgMCk7XG4rXHRcdCpjbnQgPSBpO1xuK1x0fSBlbHNlIGlmIChkZXNjLVx1MDAzZWZ1bmNfaWQgPT0gc3BlY2lhbF9rZnVuY19saXN0W0tGX2JwZl9pdGVyX251bV9kZXN0cm95XSkge1xuK1x0XHQvKiBicGZfaXRlcl9udW1fZGVzdHJveSgpIGlzIGEgbm8tb3A7IGVtaXQgYSBub3AgdG8gZHJvcCB0aGUgY2FsbCAqL1xuK1x0XHRpbnNuX2J1ZlswXSA9IEJQRl9KTVBfQSgwKTtcbitcdFx0KmNudCA9IDE7XG4gXHR9XG4gXG4gXHRpZiAoZW52LVx1MDAzZWluc25fYXV4X2RhdGFbaW5zbl9pZHhdLmFyZ19wcm9nKSB7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL01ha2VmaWxlIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL01ha2VmaWxlXG5pbmRleCA1NWQzOTQ0Mzg3MDVhLi4zMTc0YzJmMThlNzE1IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL01ha2VmaWxlXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvTWFrZWZpbGVcbkBAIC05NjUsNiArOTY1LDcgQEAgJChPVVRQVVQpL2JlbmNoX3JpbmdidWZzLm86ICQoT1VUUFVUKS9yaW5nYnVmX2JlbmNoLnNrZWwuaCBcXFxuIFx0XHRcdCAgICAkKE9VVFBVVCkvcGVyZmJ1Zl9iZW5jaC5za2VsLmhcbiAkKE9VVFBVVCkvYmVuY2hfYmxvb21fZmlsdGVyX21hcC5vOiAkKE9VVFBVVCkvYmxvb21fZmlsdGVyX2JlbmNoLnNrZWwuaFxuICQoT1VUUFVUKS9iZW5jaF9icGZfbG9vcC5vOiAkKE9VVFBVVCkvYnBmX2xvb3BfYmVuY2guc2tlbC5oXG4rJChPVVRQVVQpL2JlbmNoX2JwZl9mb3IubzogJChPVVRQVVQpL2JwZl9mb3JfYmVuY2guc2tlbC5oXG4gJChPVVRQVVQpL2JlbmNoX3N0cm5jbXAubzogJChPVVRQVVQpL3N0cm5jbXBfYmVuY2guc2tlbC5oXG4gJChPVVRQVVQpL2JlbmNoX2JwZl9oYXNobWFwX2Z1bGxfdXBkYXRlLm86ICQoT1VUUFVUKS9icGZfaGFzaG1hcF9mdWxsX3VwZGF0ZV9iZW5jaC5za2VsLmhcbiAkKE9VVFBVVCkvYmVuY2hfbG9jYWxfc3RvcmFnZS5vOiAkKE9VVFBVVCkvbG9jYWxfc3RvcmFnZV9iZW5jaC5za2VsLmhcbkBAIC05OTAsNiArOTkxLDcgQEAgJChPVVRQVVQpL2JlbmNoOiAkKE9VVFBVVCkvYmVuY2gubyBcXFxuIFx0XHQgJChPVVRQVVQpL2JlbmNoX3JpbmdidWZzLm8gXFxcbiBcdFx0ICQoT1VUUFVUKS9iZW5jaF9ibG9vbV9maWx0ZXJfbWFwLm8gXFxcbiBcdFx0ICQoT1VUUFVUKS9iZW5jaF9icGZfbG9vcC5vIFxcXG4rXHRcdCAkKE9VVFBVVCkvYmVuY2hfYnBmX2Zvci5vIFxcXG4gXHRcdCAkKE9VVFBVVCkvYmVuY2hfc3RybmNtcC5vIFxcXG4gXHRcdCAkKE9VVFBVVCkvYmVuY2hfYnBmX2hhc2htYXBfZnVsbF91cGRhdGUubyBcXFxuIFx0XHQgJChPVVRQVVQpL2JlbmNoX2xvY2FsX3N0b3JhZ2UubyBcXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9iZW5jaC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JlbmNoLmNcbmluZGV4IDNkOWQyY2Q3NzY0YmQuLmI4NmI3MzQ1NmQzY2EgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYmVuY2guY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JlbmNoLmNcbkBAIC0yNzYsNiArMjc2LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBhcmdwX29wdGlvbiBvcHRzW10gPSB7XG4gZXh0ZXJuIHN0cnVjdCBhcmdwIGJlbmNoX3JpbmdidWZzX2FyZ3A7XG4gZXh0ZXJuIHN0cnVjdCBhcmdwIGJlbmNoX2Jsb29tX21hcF9hcmdwO1xuIGV4dGVybiBzdHJ1Y3QgYXJncCBiZW5jaF9icGZfbG9vcF9hcmdwO1xuK2V4dGVybiBzdHJ1Y3QgYXJncCBiZW5jaF9icGZfZm9yX2FyZ3A7XG4gZXh0ZXJuIHN0cnVjdCBhcmdwIGJlbmNoX2xvY2FsX3N0b3JhZ2VfYXJncDtcbiBleHRlcm4gc3RydWN0IGFyZ3AgYmVuY2hfbG9jYWxfc3RvcmFnZV9yY3VfdGFza3NfdHJhY2VfYXJncDtcbiBleHRlcm4gc3RydWN0IGFyZ3AgYmVuY2hfc3RybmNtcF9hcmdwO1xuQEAgLTI5Miw2ICsyOTMsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGFyZ3BfY2hpbGQgYmVuY2hfcGFyc2Vyc1tdID0ge1xuIFx0eyBcdTAwMjZiZW5jaF9yaW5nYnVmc19hcmdwLCAwLCBcIlJpbmcgYnVmZmVycyBiZW5jaG1hcmtcIiwgMCB9LFxuIFx0eyBcdTAwMjZiZW5jaF9ibG9vbV9tYXBfYXJncCwgMCwgXCJCbG9vbSBmaWx0ZXIgbWFwIGJlbmNobWFya1wiLCAwIH0sXG4gXHR7IFx1MDAyNmJlbmNoX2JwZl9sb29wX2FyZ3AsIDAsIFwiYnBmX2xvb3AgaGVscGVyIGJlbmNobWFya1wiLCAwIH0sXG4rXHR7IFx1MDAyNmJlbmNoX2JwZl9mb3JfYXJncCwgMCwgXCJicGZfZm9yIGxvb3AgYmVuY2htYXJrXCIsIDAgfSxcbiBcdHsgXHUwMDI2YmVuY2hfbG9jYWxfc3RvcmFnZV9hcmdwLCAwLCBcImxvY2FsX3N0b3JhZ2UgYmVuY2htYXJrXCIsIDAgfSxcbiBcdHsgXHUwMDI2YmVuY2hfc3RybmNtcF9hcmdwLCAwLCBcImJwZl9zdHJuY21wIGhlbHBlciBiZW5jaG1hcmtcIiwgMCB9LFxuIFx0eyBcdTAwMjZiZW5jaF9sb2NhbF9zdG9yYWdlX3JjdV90YXNrc190cmFjZV9hcmdwLCAwLFxuQEAgLTU1Nyw2ICs1NTksNyBAQCBleHRlcm4gY29uc3Qgc3RydWN0IGJlbmNoIGJlbmNoX2Jsb29tX2ZhbHNlX3Bvc2l0aXZlO1xuIGV4dGVybiBjb25zdCBzdHJ1Y3QgYmVuY2ggYmVuY2hfaGFzaG1hcF93aXRob3V0X2Jsb29tO1xuIGV4dGVybiBjb25zdCBzdHJ1Y3QgYmVuY2ggYmVuY2hfaGFzaG1hcF93aXRoX2Jsb29tO1xuIGV4dGVybiBjb25zdCBzdHJ1Y3QgYmVuY2ggYmVuY2hfYnBmX2xvb3A7XG4rZXh0ZXJuIGNvbnN0IHN0cnVjdCBiZW5jaCBiZW5jaF9icGZfZm9yO1xuIGV4dGVybiBjb25zdCBzdHJ1Y3QgYmVuY2ggYmVuY2hfc3RybmNtcF9ub19oZWxwZXI7XG4gZXh0ZXJuIGNvbnN0IHN0cnVjdCBiZW5jaCBiZW5jaF9zdHJuY21wX2hlbHBlcjtcbiBleHRlcm4gY29uc3Qgc3RydWN0IGJlbmNoIGJlbmNoX2JwZl9oYXNobWFwX2Z1bGxfdXBkYXRlO1xuQEAgLTY0MCw2ICs2NDMsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGJlbmNoICpiZW5jaHNbXSA9IHtcbiBcdFx1MDAyNmJlbmNoX2hhc2htYXBfd2l0aG91dF9ibG9vbSxcbiBcdFx1MDAyNmJlbmNoX2hhc2htYXBfd2l0aF9ibG9vbSxcbiBcdFx1MDAyNmJlbmNoX2JwZl9sb29wLFxuK1x0XHUwMDI2YmVuY2hfYnBmX2ZvcixcbiBcdFx1MDAyNmJlbmNoX3N0cm5jbXBfbm9faGVscGVyLFxuIFx0XHUwMDI2YmVuY2hfc3RybmNtcF9oZWxwZXIsXG4gXHRcdTAwMjZiZW5jaF9icGZfaGFzaG1hcF9mdWxsX3VwZGF0ZSxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYmVuY2hzL2JlbmNoX2JwZl9mb3IuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9iZW5jaHMvYmVuY2hfYnBmX2Zvci5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uNzMwYzUxYWQyZGVjM1xuLS0tIC9kZXYvbnVsbFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JlbmNocy9iZW5jaF9icGZfZm9yLmNcbkBAIC0wLDAgKzEsMTA0IEBAXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbisvKiBDb3B5cmlnaHQgKGMpIDIwMjYgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuICovXG4rXG4rI2luY2x1ZGUgXHUwMDNjYXJncC5oXHUwMDNlXG4rI2luY2x1ZGUgXCJiZW5jaC5oXCJcbisjaW5jbHVkZSBcImJwZl9mb3JfYmVuY2guc2tlbC5oXCJcbitcbisvKiBCUEYgdHJpZ2dlcmluZyBiZW5jaG1hcmtzICovXG4rc3RhdGljIHN0cnVjdCBjdHgge1xuK1x0c3RydWN0IGJwZl9mb3JfYmVuY2ggKnNrZWw7XG4rfSBjdHg7XG4rXG4rc3RhdGljIHN0cnVjdCB7XG4rXHRfX3UzMiBucl9sb29wcztcbit9IGFyZ3MgPSB7XG4rXHQvKlxuK1x0ICogRGVmYXVsdCB0byBhIGxhcmdlIGxvb3AgY291bnQgc28gdGhlIHBlci1pdGVyYXRpb24gYnBmX2l0ZXJfbnVtX25leHQoKSBjb3N0IGRvbWluYXRlc1xuK1x0ICogdGhlIG9uZS10aW1lIGJwZl9pdGVyX251bV9uZXcoKS9kZXN0cm95KCkgc2V0dXAgYW5kIHRlYXJkb3duLlxuK1x0ICovXG4rXHQubnJfbG9vcHMgPSAxMDAwLFxuK307XG4rXG4rZW51bSB7XG4rXHRBUkdfTlJfTE9PUFMgPSA0MDAwLFxuK307XG4rXG4rc3RhdGljIGNvbnN0IHN0cnVjdCBhcmdwX29wdGlvbiBvcHRzW10gPSB7XG4rXHR7IFwibnJfbG9vcHNcIiwgQVJHX05SX0xPT1BTLCBcIm5yX2xvb3BzXCIsIDAsXG4rXHRcdFwiU2V0IG51bWJlciBvZiBpdGVyYXRpb25zIGZvciB0aGUgYnBmX2ZvcigpIGxvb3BcIn0sXG4rXHR7fSxcbit9O1xuK1xuK3N0YXRpYyBlcnJvcl90IHBhcnNlX2FyZyhpbnQga2V5LCBjaGFyICphcmcsIHN0cnVjdCBhcmdwX3N0YXRlICpzdGF0ZSlcbit7XG4rXHRzd2l0Y2ggKGtleSkge1xuK1x0Y2FzZSBBUkdfTlJfTE9PUFM6XG4rXHRcdGFyZ3MubnJfbG9vcHMgPSBzdHJ0b2woYXJnLCBOVUxMLCAxMCk7XG4rXHRcdGJyZWFrO1xuK1x0ZGVmYXVsdDpcbitcdFx0cmV0dXJuIEFSR1BfRVJSX1VOS05PV047XG4rXHR9XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rLyogZXhwb3J0ZWQgaW50byBiZW5jaG1hcmsgcnVubmVyICovXG4rY29uc3Qgc3RydWN0IGFyZ3AgYmVuY2hfYnBmX2Zvcl9hcmdwID0ge1xuK1x0Lm9wdGlvbnMgPSBvcHRzLFxuK1x0LnBhcnNlciA9IHBhcnNlX2FyZyxcbit9O1xuK1xuK3N0YXRpYyB2b2lkIHZhbGlkYXRlKHZvaWQpXG4re1xuK1x0aWYgKGVudi5jb25zdW1lcl9jbnQgIT0gMCkge1xuK1x0XHRmcHJpbnRmKHN0ZGVyciwgXCJiZW5jaG1hcmsgZG9lc24ndCBzdXBwb3J0IGNvbnN1bWVyIVxcblwiKTtcbitcdFx0ZXhpdCgxKTtcbitcdH1cbit9XG4rXG4rc3RhdGljIHZvaWQgKnByb2R1Y2VyKHZvaWQgKmlucHV0KVxuK3tcbitcdHdoaWxlICh0cnVlKVxuK1x0XHQvKiB0cmlnZ2VyIHRoZSBicGYgcHJvZ3JhbSAqL1xuK1x0XHRzeXNjYWxsKF9fTlJfZ2V0cGdpZCk7XG4rXG4rXHRyZXR1cm4gTlVMTDtcbit9XG4rXG4rc3RhdGljIHZvaWQgbWVhc3VyZShzdHJ1Y3QgYmVuY2hfcmVzICpyZXMpXG4re1xuK1x0cmVzLVx1MDAzZWhpdHMgPSBhdG9taWNfc3dhcChcdTAwMjZjdHguc2tlbC1cdTAwM2Vic3MtXHUwMDNlaGl0cywgMCk7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIHNldHVwKHZvaWQpXG4re1xuK1x0c3RydWN0IGJwZl9saW5rICpsaW5rO1xuK1xuK1x0c2V0dXBfbGliYnBmKCk7XG4rXG4rXHRjdHguc2tlbCA9IGJwZl9mb3JfYmVuY2hfX29wZW5fYW5kX2xvYWQoKTtcbitcdGlmICghY3R4LnNrZWwpIHtcbitcdFx0ZnByaW50ZihzdGRlcnIsIFwiZmFpbGVkIHRvIG9wZW4gc2tlbGV0b25cXG5cIik7XG4rXHRcdGV4aXQoMSk7XG4rXHR9XG4rXG4rXHRsaW5rID0gYnBmX3Byb2dyYW1fX2F0dGFjaChjdHguc2tlbC1cdTAwM2Vwcm9ncy5iZW5jaG1hcmspO1xuK1x0aWYgKCFsaW5rKSB7XG4rXHRcdGZwcmludGYoc3RkZXJyLCBcImZhaWxlZCB0byBhdHRhY2ggcHJvZ3JhbSFcXG5cIik7XG4rXHRcdGV4aXQoMSk7XG4rXHR9XG4rXG4rXHRjdHguc2tlbC1cdTAwM2Vic3MtXHUwMDNlbnJfbG9vcHMgPSBhcmdzLm5yX2xvb3BzO1xuK31cbitcbitjb25zdCBzdHJ1Y3QgYmVuY2ggYmVuY2hfYnBmX2ZvciA9IHtcbitcdC5uYW1lID0gXCJicGYtZm9yXCIsXG4rXHQuYXJncCA9IFx1MDAyNmJlbmNoX2JwZl9mb3JfYXJncCxcbitcdC52YWxpZGF0ZSA9IHZhbGlkYXRlLFxuK1x0LnNldHVwID0gc2V0dXAsXG4rXHQucHJvZHVjZXJfdGhyZWFkID0gcHJvZHVjZXIsXG4rXHQubWVhc3VyZSA9IG1lYXN1cmUsXG4rXHQucmVwb3J0X3Byb2dyZXNzID0gb3BzX3JlcG9ydF9wcm9ncmVzcyxcbitcdC5yZXBvcnRfZmluYWwgPSBvcHNfcmVwb3J0X2ZpbmFsLFxuK307XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JlbmNocy9ydW5fYmVuY2hfYnBmX2Zvci5zaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9iZW5jaHMvcnVuX2JlbmNoX2JwZl9mb3Iuc2hcbm5ldyBmaWxlIG1vZGUgMTAwNzU1XG5pbmRleCAwMDAwMDAwMDAwMDAwLi43ZGE2NDUzOTIwZGFiXG4tLS0gL2Rldi9udWxsXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYmVuY2hzL3J1bl9iZW5jaF9icGZfZm9yLnNoXG5AQCAtMCwwICsxLDE1IEBAXG4rIyEvYmluL2Jhc2hcbisjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4rXG4rc291cmNlIC4vYmVuY2hzL3J1bl9jb21tb24uc2hcbitcbitzZXQgLWV1Zm8gcGlwZWZhaWxcbitcbitmb3IgdCBpbiAxIDQgOCAxMiAxNjsgZG9cbitmb3IgaSBpbiAxMCAxMDAgNTAwIDEwMDAgNTAwMCAxMDAwMCA1MDAwMCAxMDAwMDAgNTAwMDAwIDEwMDAwMDA7IGRvXG4rc3VidGl0bGUgXCJucl9sb29wczogJGksIG5yX3RocmVhZHM6ICR0XCJcbitcdHN1bW1hcml6ZV9vcHMgXCJicGZfZm9yOiBcIiBcXFxuK1x0ICAgIFwiJCgkUlVOX0JFTkNIIC1wICR0IC0tbnJfbG9vcHMgJGkgYnBmLWZvcilcIlxuK1x0cHJpbnRmIFwiXFxuXCJcbitkb25lXG4rZG9uZVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9icGZfZm9yX2JlbmNoLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYnBmX2Zvcl9iZW5jaC5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uZjljNzIzMDUxZmM3NFxuLS0tIC9kZXYvbnVsbFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2JwZl9mb3JfYmVuY2guY1xuQEAgLTAsMCArMSwzMiBAQFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4rLyogQ29weXJpZ2h0IChjKSAyMDI2IE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLiAqL1xuK1xuKyNpbmNsdWRlIFwidm1saW51eC5oXCJcbisjaW5jbHVkZSBcdTAwM2NicGYvYnBmX2hlbHBlcnMuaFx1MDAzZVxuKyNpbmNsdWRlIFwiYnBmX21pc2MuaFwiXG4rXG4rY2hhciBfbGljZW5zZVtdIFNFQyhcImxpY2Vuc2VcIikgPSBcIkdQTFwiO1xuK1xuK2ludCBucl9sb29wcztcbitsb25nIGhpdHM7XG4rXG4rc3RhdGljIGludCBvdXRlcl9sb29wKF9fdTMyIGluZGV4LCB2b2lkICpkYXRhKVxuK3tcbitcdGludCBpO1xuK1xuK1x0LypcbitcdCAqIEVtcHR5IGJvZHk6IHRoZSB3b3JrIGJlaW5nIG1lYXN1cmVkIGlzIHRoZSBvcGVuLWNvZGVkIG51bWVyaWMgaXRlcmF0b3IgaXRzZWxmXG4rXHQgKiAoYnBmX2l0ZXJfbnVtX25ldy9uZXh0L2Rlc3Ryb3kgYmVoaW5kIGJwZl9mb3IoKSkuXG4rXHQgKi9cbitcdGJwZl9mb3IoaSwgMCwgbnJfbG9vcHMpXG4rXHRcdDtcbitcdF9fc3luY19hZGRfYW5kX2ZldGNoKFx1MDAyNmhpdHMsIG5yX2xvb3BzKTtcbitcdHJldHVybiAwO1xuK31cbitcbitTRUMoXCJmZW50cnkvXCIgU1lTX1BSRUZJWCBcInN5c19nZXRwZ2lkXCIpXG4raW50IGJlbmNobWFyayh2b2lkICpjdHgpXG4re1xuK1x0YnBmX2xvb3AoMTAwMCwgb3V0ZXJfbG9vcCwgTlVMTCwgMCk7XG4rXHRyZXR1cm4gMDtcbit9XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2l0ZXJzLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvaXRlcnMuY1xuaW5kZXggMGZhNzBiMTMzZDkzMi4uNjJkN2RmOWU4MGJlYiAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9pdGVycy5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvaXRlcnMuY1xuQEAgLTg4LDYgKzg4LDg5IEBAIGludCBpdGVyX2Vycl91bnNhZmVfYXNtX2xvb3AoY29uc3Qgdm9pZCAqY3R4KVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuKy8qXG4rICogTmFrZWQgZnVuY3Rpb24sIHNvIHRoZXJlIGlzIG5vIGNvbXBpbGVyLWdlbmVyYXRlZCBnbHVlIGFuZCB0aGUgd2hvbGUgaW5saW5lZCBwcm9ncmFtIGNhbiBiZVxuKyAqIG1hdGNoZWQuIFBpbm5lZCB0byBhcmNoZXMgd2hvc2UgSklUcyB6ZXJvLWV4dGVuZCAzMi1iaXQgd3JpdGVzIGltcGxpY2l0bHlcbisgKiAoYnBmX2ppdF9uZWVkc196ZXh0KCkgPT0gZmFsc2UpOyBvbiBhcmNoZXMgdGhhdCBuZWVkIGV4cGxpY2l0IHplcm8tZXh0ZW5zaW9uIHRoZSB2ZXJpZmllclxuKyAqIGludGVybGVhdmVzIFwid04gPSB3TlwiIGluc25zIGFuZCB0aGUgZml4ZWQgc2hhcGUgYmVsb3cgd291bGQgbm90IG1hdGNoLiBUaGUgaW5saW5pbmcgaXRzZWxmIGlzXG4rICogYXJjaCBpbmRlcGVuZGVudCwgc28gY2hlY2tpbmcgaXQgb24gdGhlc2UgYXJjaGVzIGlzIHN1ZmZpY2llbnQuXG4rICpcbisgKiBicGZfaXRlcl9udW1fbmV3KCkgZW1pdHMgdGhlIGZ1bGwgcmFuZ2UgY2hlY2sgKGRpc3RhbmNlIGNvbXB1dGF0aW9uIGFuZCBib3RoIHRoZSAtRUlOVkFMIGFuZFxuKyAqIC1FMkJJRyBlcnJvciBwYXRocyk7IGJwZl9pdGVyX251bV9uZXh0KCkgYW5kIGJwZl9pdGVyX251bV9kZXN0cm95KCkgYXJlIGlubGluZWQgdG9vLlxuKyAqL1xuK1NFQyhcInJhd190cFwiKVxuK19fYXJjaF94ODZfNjRcbitfX2FyY2hfYXJtNjRcbitfX3N1Y2Nlc3NcbitfX3hsYXRlZChcInI2ID0gcjEwXCIpXG4rX194bGF0ZWQoXCJyNiArPSAtOFwiKVxuK19feGxhdGVkKFwiY2FsbCB1bmtub3duXCIpXG4rX194bGF0ZWQoXCJyMyA9IHIwXCIpXG4rX194bGF0ZWQoXCJyMyBcdTAwMjY9IDY1NTM1XCIpXG4rX194bGF0ZWQoXCJyMSA9IHI2XCIpXG4rX194bGF0ZWQoXCJyMiA9IDBcIilcbisvKiBicGZfaXRlcl9udW1fbmV3KFx1MDAyNml0LCAwLCBcdTAwM2Nub24tY29uc3RcdTAwM2UpIHdpdGggdGhlIHJhbmdlIGNoZWNrIGtlcHQgKi9cbitfX3hsYXRlZChcImlmIHcyIHNcdTAwM2UgdzMgZ290byBwYys4XCIpXG4rX194bGF0ZWQoXCJ3MCA9IHczXCIpXG4rX194bGF0ZWQoXCJ3MCAtPSB3MlwiKVxuK19feGxhdGVkKFwiaWYgcjAgXHUwMDNlIDB4ODAwMDAwIGdvdG8gcGMrOFwiKVxuK19feGxhdGVkKFwidzIgKz0gLTFcIilcbitfX3hsYXRlZChcIioodTMyICopKHIxICswKSA9IHIyXCIpXG4rX194bGF0ZWQoXCIqKHUzMiAqKShyMSArNCkgPSByM1wiKVxuK19feGxhdGVkKFwicjAgPSAwXCIpXG4rX194bGF0ZWQoXCJnb3RvIHBjKzVcIilcbitfX3hsYXRlZChcIioodTY0ICopKHIxICswKSA9IDBcIilcbitfX3hsYXRlZChcInIwID0gLTIyXCIpXG4rX194bGF0ZWQoXCJnb3RvIHBjKzJcIilcbitfX3hsYXRlZChcIioodTY0ICopKHIxICswKSA9IDBcIilcbitfX3hsYXRlZChcInIwID0gLTdcIilcbitfX3hsYXRlZChcInIxID0gcjZcIilcbisvKiBicGZfaXRlcl9udW1fbmV4dChcdTAwMjZpdCkgKi9cbitfX3hsYXRlZChcInIwID0gKih1MzIgKikocjEgKzApXCIpXG4rX194bGF0ZWQoXCJ3MCArPSAxXCIpXG4rX194bGF0ZWQoXCJyMiA9ICoodTMyICopKHIxICs0KVwiKVxuK19feGxhdGVkKFwiaWYgdzAgc1x1MDAzZT0gdzIgZ290byBwYyszXCIpXG4rX194bGF0ZWQoXCIqKHUzMiAqKShyMSArMCkgPSByMFwiKVxuK19feGxhdGVkKFwicjAgPSByMVwiKVxuK19feGxhdGVkKFwiZ290byBwYysyXCIpXG4rX194bGF0ZWQoXCIqKHU2NCAqKShyMSArMCkgPSAwXCIpXG4rX194bGF0ZWQoXCJyMCA9IDBcIilcbitfX3hsYXRlZChcImlmIHIwICE9IDB4MCBnb3RvIHBjLTExXCIpXG4rX194bGF0ZWQoXCJyMSA9IHI2XCIpXG4rLyogYnBmX2l0ZXJfbnVtX2Rlc3Ryb3koXHUwMDI2aXQpIGlzIGlubGluZWQgdG8gYSBub3AgKi9cbitfX3hsYXRlZChcImdvdG8gcGMrMFwiKVxuK19feGxhdGVkKFwicjAgPSAwXCIpXG4rX194bGF0ZWQoXCJleGl0XCIpXG4raW50IF9fbmFrZWQgaXRlcl9udW1fbmV3X2lubGluZWQodm9pZClcbit7XG4rXHRhc20gdm9sYXRpbGUgKFxuK1x0XHQvKiByNiBwb2ludHMgdG8gc3RydWN0IGJwZl9pdGVyX251bSBvbiB0aGUgc3RhY2sgKi9cbitcdFx0XCJyNiA9IHIxMDtcIlxuK1x0XHRcInI2ICs9IC04O1wiXG4rXHRcdC8qIG5vbi1jb25zdGFudCBlbmQgc28gdGhlIHJhbmdlIGNoZWNrcyBhcmUga2VwdCAqL1xuK1x0XHRcImNhbGwgJVticGZfZ2V0X3ByYW5kb21fdTMyXTtcIlxuK1x0XHRcInIzID0gcjA7XCJcbitcdFx0XCJyMyBcdTAwMjY9IDB4ZmZmZjtcIlxuK1x0XHRcInIxID0gcjY7XCJcbitcdFx0XCJyMiA9IDA7XCJcbitcdFx0XCJjYWxsICVbYnBmX2l0ZXJfbnVtX25ld107XCJcbitcdFwiMTpcIlxuK1x0XHRcInIxID0gcjY7XCJcbitcdFx0XCJjYWxsICVbYnBmX2l0ZXJfbnVtX25leHRdO1wiXG4rXHRcdFwiaWYgcjAgIT0gMCBnb3RvIDFiO1wiXG4rXHRcdFwicjEgPSByNjtcIlxuK1x0XHRcImNhbGwgJVticGZfaXRlcl9udW1fZGVzdHJveV07XCJcbitcdFx0XCJyMCA9IDA7XCJcbitcdFx0XCJleGl0O1wiXG4rXHRcdDpcbitcdFx0OiBfX2ltbShicGZfZ2V0X3ByYW5kb21fdTMyKSxcbitcdFx0ICBfX2ltbShicGZfaXRlcl9udW1fbmV3KSxcbitcdFx0ICBfX2ltbShicGZfaXRlcl9udW1fbmV4dCksXG4rXHRcdCAgX19pbW0oYnBmX2l0ZXJfbnVtX2Rlc3Ryb3kpXG4rXHRcdDogX19jbG9iYmVyX2NvbW1vbiwgXCJyNlwiXG4rXHQpO1xuK31cbitcbiBTRUMoXCJyYXdfdHBcIilcbiBfX3N1Y2Nlc3NcbiBpbnQgaXRlcl93aGlsZV9sb29wKGNvbnN0IHZvaWQgKmN0eClcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDE0OjAwOjQ0LjE2OTUyNzE2NloiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI5MTc4NzkxNDQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIEJQRiBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggdGhhdCB0d2Vha3MgYGtlcm5lbC9icGYvYnBmX2l0ZXIuY2AgYW5kIGBrZXJuZWwvYnBmL3ZlcmlmaWVyLmNgLiBJdCBsb29rcyBsaWtlIHdlJ3JlIGNoYW5naW5nIHRoZSB3YXkgYGJwZl9pdGVyX251bV9uZXdgLCBgYnBmX2l0ZXJfbnVtX25leHRgLCBhbmQgYGJwZl9pdGVyX251bV9kZXN0cm95YCB3b3JrIHdpdGhpbiB0aGUgaXRlcmF0b3IgaW1wbGVtZW50YXRpb24sIGJ1dCBzcGVjaWZpY2FsbHksIGl0J3MgYWRkaW5nIGlubGluaW5nIG9mIHRoZXNlIGZ1bmN0aW9ucyBpbnRvIHRoZSB2ZXJpZmllciB2aWEgYGJwZl9maXh1cF9rZnVuY19jYWxsYC4gVGhhdCdzIGludGVyZXN0aW5nOyBpbmxpbmluZyBjb3VsZCBoYXZlIHBlcmZvcm1hbmNlIGltcGxpY2F0aW9ucywgZ29vZCBvciBiYWQsIGFuZCBpdCBkZWZpbml0ZWx5IGNoYW5nZXMgdGhlIGNvZGUgcGF0aCB0aGUgdmVyaWZpZXIgaGFzIHRvIG5hdmlnYXRlLiBQbHVzLCB0aGUgcGF0Y2ggaW5jbHVkZXMgYSBiZW5jaG1hcmsgYW5kIGEgc2VsZnRlc3QsIHdoaWNoIGlzIGdyZWF0IHRvIHNlZS5cblxuVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRvIHRoZSBjb3JlIEJQRiB2ZXJpZmllciBhbmQgaXRlcmF0b3IsIG5vIGRvdWJ0IGFib3V0IHRoYXQuIFRoZSBpbXBhY3Qgb24gcHJvZ3JhbSBiZWhhdmlvciBjb3VsZCBiZSBzaWduaWZpY2FudCwgZXZlbiBpZiBzdWJ0bGUuIEdpdmVuIHRoZSBuYXR1cmUgb2YgdGhpcyBjaGFuZ2UsIGFuZCB0aGUgcG90ZW50aWFsIGZvciBvZmYtYnktb25lIGVycm9ycyBhbmQgdGhlIGxpa2UgaW4gaXRlcmF0b3JzLCBpdCdzIHNjcmVhbWluZyBmb3Igc29tZSBmdXp6aW5nIHRvIGVuc3VyZSB3ZSBoYXZlbid0IGludHJvZHVjZWQgYW55IHJlZ3Jlc3Npb25zIG9yIHZ1bG5lcmFiaWxpdGllcy4gSXQncyB0aW1lIHRvIGZpcmUgdXAgdGhvc2UgZnV6emVycyFcblxuQmVmb3JlIEkgZGl2ZSB0b28gZGVlcCBpbnRvIHRoZSBjb2RlLCBJIG5lZWQgdG8gY2hlY2sgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gQm90aCB0aGUgQlBGIGl0ZXJhdG9yIGFuZCB0aGUgdmVyaWZpZXIgYXJlIGxpa2VseSBnb3Zlcm5lZCBieSBgQ09ORklHX0JQRl9TWVNDQUxMYCwgYW5kIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhpcyBpcyBwcm9wZXJseSBlbmFibGVkIGluIGFueSByZWxldmFudCB0ZXN0IGVudmlyb25tZW50cy4gSSdsbCB0YWtlIGEgcXVpY2sgbG9vayBpbiBga2VybmVsL2JwZi9NYWtlZmlsZWAgdG8gY29uZmlybSB0aGUgZGVwZW5kZW5jaWVzIGFuZCBmbGFncy4gTGV0J3MgbWFrZSBzdXJlIG91ciBidWlsZCBlbnZpcm9ubWVudCBpcyBzZXR1cCBjb3JyZWN0bHkgYmVmb3JlIHdlIGRpdmUgaW4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgyODIsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOTYsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQxNDowMToxMy4zNDgzMjE1MzVaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjU4ODM5NDQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYnBmX2l0ZXIub1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvYnBmL01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvTWFrZWZpbGU9OT1vYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IHN5c2NhbGwubyB2ZXJpZmllci5vIGlub2RlLm8gaGVscGVycy5vIHRudW0ubyBjbnVtLm8gbG9nLm8gdG9rZW4ubyBsaXZlbmVzcy5vIGNvbnN0X2ZvbGQub1xcbmtlcm5lbC9icGYvTWFrZWZpbGU6MTA6b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSBicGZfaXRlci5vIG1hcF9pdGVyLm8gdGFza19pdGVyLm8gcHJvZ19pdGVyLm8gbGlua19pdGVyLm9cXG5rZXJuZWwvYnBmL01ha2VmaWxlLTExLW9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgKz0gaGFzaHRhYi5vIGFycmF5bWFwLm8gcGVyY3B1X2ZyZWVsaXN0Lm8gYnBmX2xydV9saXN0Lm8gbHBtX3RyaWUubyBtYXBfaW5fbWFwLm8gYmxvb21fZmlsdGVyLm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMTQ6MDE6MTMuNDE0MjEwNjg4WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODY0Nzc5ODQzNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipJbml0aWFsIEFzc2Vzc21lbnQgXHUwMDI2IEZvY3VzaW5nIHRoZSBJbnZlc3RpZ2F0aW9uKipcblxuT2theSwgc28gaXQgbG9va3MgbGlrZSB3ZSdyZSBnb2luZyB0byBuZWVkIGBDT05GSUdfQlBGX1NZU0NBTExgIGVuYWJsZWQsIHRoYXQncyBzdGVwIG9uZS4gTm93LCBsZXQncyBnZXQgZG93biB0byBicmFzcyB0YWNrcyBhbmQgZmlndXJlIG91dCB3aGVyZSB0aGUgbWVhdCBvZiB0aGlzIGlzLiBGcm9tIHRoZSBjaGFuZ2VzLCBpdCBzZWVtcyBsaWtlIHdlIHNob3VsZCBiZSBwYXlpbmcgY2xvc2UgYXR0ZW50aW9uIHRvIGEgZmV3IHNwZWNpZmljIGZ1bmN0aW9ucy4gSSdtIHNlZWluZyBtb2RpZmljYXRpb25zIGluIGB2ZXJpZmllci5jYCBmb3IgYGJwZl9maXh1cF9rZnVuY19jYWxsYC4gVGhhdCdzIGEgZGVmaW5pdGUgcG9pbnQgb2YgaW50ZXJlc3QsIHNvIEknbGwga2VlcCBhbiBleWUgb24gdGhhdCBvbmUuIFRoZW4sIGluIGBicGZfaXRlci5jYCwgSSBzcG90IHNvbWUgYWRqdXN0bWVudHMgdG8gYGJwZl9pdGVyX251bV9uZXdgLCBgYnBmX2l0ZXJfbnVtX25leHRgLCBhbmQgYGJwZl9pdGVyX251bV9kZXN0cm95YC4gVGhvc2UgYWxzbyBsb29rIGxpa2UgdGhleSdyZSBnb2luZyB0byBiZSBpbXBvcnRhbnQgdG8gdW5kZXJzdGFuZCB0aGlzIGNoYW5nZS4gQmFzZWQgb24gdGhhdCBpbmZvcm1hdGlvbiwgYm90aCBgYnBmX2ZpeHVwX2tmdW5jX2NhbGxgLCBgYnBmX2l0ZXJfbnVtX25ld2AsIGBicGZfaXRlcl9udW1fbmV4dGAsIGFuZCBgYnBmX2l0ZXJfbnVtX2Rlc3Ryb3lgIGFyZSBnb2luZyB0byBiZSBteSBmb2N1cyBwb2ludHMgdG8gZGl2ZSBpbnRvLiBOb3csIEkgd2FudCB0byB0YWtlIGEgbG9vayBhbmQgc2VlIGlmIGBicGZfZml4dXBfa2Z1bmNfY2FsbGAgaXMgYSBzdGF0aWMgZnVuY3Rpb24uIFRoYXQgY291bGQgaW1wYWN0IGhvdyB3ZSBjYW4gdXNlIGl0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo5MDUxLCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTY1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDE0OjAxOjIyLjA2MjAxMTQzM1oiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MjY1MDczNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJicGZfZml4dXBfa2Z1bmNfY2FsbFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvYnBmL3ZlcmlmaWVyLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi92ZXJpZmllci5jPTE5ODU4PXN0YXRpYyB2b2lkIF9fZml4dXBfY29sbGVjdGlvbl9pbnNlcnRfa2Z1bmMoc3RydWN0IGJwZl9pbnNuX2F1eF9kYXRhICppbnNuX2F1eCxcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xOTg3NC1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTk4NzU6aW50IGJwZl9maXh1cF9rZnVuY19jYWxsKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfaW5zbiAqaW5zbixcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTk4NzYtXFx0XFx0ICAgICBzdHJ1Y3QgYnBmX2luc24gKmluc25fYnVmLCBpbnQgaW5zbl9pZHgsIGludCAqY250KVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQxNDowMToyMi4xMjQ2Njc1OTdaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MzE3MzExMzcwMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHN1bW1hcml6ZWQgdGhvdWdodCBwcm9jZXNzLCBwcmVzZW50ZWQgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIGl0OlxuXG4qKkV2b2x2aW5nIFNpdHVhdGlvbiBBc3Nlc3NtZW50KipcblxuVGhpcyBzaXR1YXRpb24gaXNuJ3QgZml4ZWQ7IGl0J3MgZHluYW1pYy4gV2UgbmVlZCB0byBiZSBjaGVja2luZyBmb3IgbW92ZW1lbnQgYW5kIHVwZGF0ZXMuIFdlIGNhbm5vdCBhc3N1bWUgdGhhdCBpdCBpcyBzdGF0aWMuIE15IGluc3RpbmN0IGlzIHRoYXQgdGhlcmUgaXMgYSBrZXkgZWxlbWVudCB0aGF0IGNhbiBpbGx1bWluYXRlIHRoaXMgZHluYW1pYyBjaGFyYWN0ZXJpc3RpYy4gSSBzaG91bGQgcmVhbGx5IGNoZWNrIGBicGZfaXRlcl9udW1fbmV3YC4gVGhpcyB3aWxsIG9mZmVyIGEgY2xlYXIgc3RhcnRpbmcgcG9pbnQgZm9yIG15IGludmVzdGlnYXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk3MDEsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQxNDowMjowNS4yOTc3ODM3NzhaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTc2Mjc4MTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYnBmX2l0ZXJfbnVtX25ld1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvYnBmL2JwZl9pdGVyLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi9icGZfaXRlci5jPTc2OD1fX2JwZl9rZnVuY19zdGFydF9kZWZzKCk7XFxua2VybmVsL2JwZi9icGZfaXRlci5jLTc2OS1cXG5rZXJuZWwvYnBmL2JwZl9pdGVyLmM6NzcwOl9fYnBmX2tmdW5jIGludCBicGZfaXRlcl9udW1fbmV3KHN0cnVjdCBicGZfaXRlcl9udW0gKml0LCBpbnQgc3RhcnQsIGludCBlbmQpXFxua2VybmVsL2JwZi9icGZfaXRlci5jLTc3MS17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDE0OjAyOjA1LjM5NTQxNjczOFoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ3NDIzMTk2NjU4NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIHByZXNlbnRlZCBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKktlcm5lbCBGdW5jdGlvbiBDb25zaWRlcmF0aW9ucyoqXG5cbkFscmlnaHQsIHNvIHRoZSBjb3JlIG9mIHdoYXQgSSdtIHRoaW5raW5nIGFib3V0IHJpZ2h0IG5vdyBoaW5nZXMgb24gdGhlIG5hdHVyZSBvZiB0aGUgZnVuY3Rpb24gaW4gcXVlc3Rpb246IGl0J3MgYSBrZnVuYy4gVGhhdCBpbW1lZGlhdGVseSBpbmZvcm1zIGEgbG90IG9mIG15IGFwcHJvYWNoLiBUaGUgaW1wbGljYXRpb25zIG9mICpub3QqIGJlaW5nIGEgc3RhdGljIGZ1bmN0aW9uIGFyZSBjb25zaWRlcmFibGUgaW4gdGhlIGNvbnRleHQgb2Yga2VybmVsIEJQRiBkZXZlbG9wbWVudC4gSSdtIGFscmVhZHkgbWVudGFsbHkgcnVubmluZyB0aHJvdWdoIHRoZSB2YXJpb3VzIGNvbnRleHRzIHdoZXJlIHRoaXMgY2hhcmFjdGVyaXN0aWMgaW1wYWN0cyB0aGluZ3MgbGlrZSBzeW1ib2wgcmVzb2x1dGlvbiwgaW5saW5pbmcgYmVoYXZpb3IgKG9yIGxhY2sgdGhlcmVvZiwgcGVyaGFwcyksIGFuZCBhbnkgcG90ZW50aWFsIHJlbGlhbmNlIG9uIGdsb2JhbCBzdGF0ZSB3aXRoaW4gdGhlIGtlcm5lbC5cblxuR2l2ZW4gdGhhdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGJlaGF2aW9yLiBUaGUgb2J2aW91cyBuZXh0IHN0ZXAgaXMgdG8gZXhhbWluZSBgYnBmX2l0ZXJfbnVtX25leHRgLiBUaGF0IGZ1bmN0aW9uIGlzIHdoZXJlIEkgd2lsbCBzdGFydCwgZGlnZ2luZyBpbnRvIGl0cyBpbXBsZW1lbnRhdGlvbiBhbmQgaG93IGl0J3MgZGVzaWduZWQgdG8gaW50ZXJmYWNlLiBJcyBpdCBkZXNpZ25lZCB0byBiZSBmYXN0PyBSb2J1c3Q/IFdoYXQgc3BlY2lmaWMgYXNwZWN0cyBvZiBpdGVyYXRpdmUgcHJvY2Vzc2VzIGRvZXMgaXQgaGFuZGxlPyBBcmUgdGhlcmUgYW55IHBvdGVudGlhbCBnb3RjaGFzIG9yIGVkZ2UgY2FzZXMgSSBuZWVkIHRvIGNvbnNpZGVyPyBJJ20gYW50aWNpcGF0aW5nIHRoYXQgaXRzIGludGVybmFsIHdvcmtpbmdzIHdpbGwgcmV2ZWFsIGEgbG90IGFib3V0IHRoZSBleHBlY3RlZCB1c2FnZSBwYXR0ZXJucyBhbmQgdGhlIG92ZXJhbGwgZGVzaWduIG9mIHRoaXMgY29tcG9uZW50LiBUaW1lIHRvIGRpdmUgaW4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk5ODEsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQxNDowOTo1OS42MjczODc4OTRaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgyNjUyNDIyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJwZl9pdGVyX251bV9uZXh0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9icGYvYnBmX2l0ZXIuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL2JwZl9pdGVyLmM9NzcwPV9fYnBmX2tmdW5jIGludCBicGZfaXRlcl9udW1fbmV3KHN0cnVjdCBicGZfaXRlcl9udW0gKml0LCBpbnQgc3RhcnQsIGludCBlbmQpXFxuLS1cXG5rZXJuZWwvYnBmL2JwZl9pdGVyLmMtNzc3LVxcdC8qIHN0YXJ0ID09IGVuZCBpcyBsZWdpdCwgaXQncyBhbiBlbXB0eSByYW5nZSBhbmQgd2UnbGwganVzdCBnZXQgTlVMTFxcbmtlcm5lbC9icGYvYnBmX2l0ZXIuYzo3Nzg6XFx0ICogb24gZmlyc3QgKGFuZCBhbnkgc3Vic2VxdWVudCkgYnBmX2l0ZXJfbnVtX25leHQoKSBjYWxsXFxua2VybmVsL2JwZi9icGZfaXRlci5jLTc3OS1cXHQgKi9cXG4tLVxcbmtlcm5lbC9icGYvYnBmX2l0ZXIuYy03OTAtXFxua2VybmVsL2JwZi9icGZfaXRlci5jOjc5MTpcXHQvKiB1c2VyIHdpbGwgY2FsbCBicGZfaXRlcl9udW1fbmV4dCgpIGZpcnN0LFxcbmtlcm5lbC9icGYvYnBmX2l0ZXIuYy03OTItXFx0ICogd2hpY2ggd2lsbCBzZXQgcy1cXHUwMDNlY3VyIHRvIGV4YWN0bHkgc3RhcnQgdmFsdWU7XFxuLS1cXG5rZXJuZWwvYnBmL2JwZl9pdGVyLmMtODAwLVxcbmtlcm5lbC9icGYvYnBmX2l0ZXIuYzo4MDE6X19icGZfa2Z1bmMgaW50ICpicGZfaXRlcl9udW1fbmV4dChzdHJ1Y3QgYnBmX2l0ZXJfbnVtKiBpdClcXG5rZXJuZWwvYnBmL2JwZl9pdGVyLmMtODAyLXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMTQ6MDk6NTkuNzEwMDQ4ODY2WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjg5MzA3Nzg0NjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyB0aGUgS2VybmVsIEZ1bmN0aW9uKipcblxuQWxyaWdodCwgc28gdGhlIGltbWVkaWF0ZSBjb250ZXh0IHRlbGxzIG1lIHdlJ3JlIGRlYWxpbmcgd2l0aCBhIGtlcm5lbCBmdW5jdGlvbiDigJMgbGlrZWx5IHNvbWV0aGluZyBjcnVjaWFsIHRvIHRoZSBCUEYgaW5mcmFzdHJ1Y3R1cmUuIE15IGluaXRpYWwgaW5zdGluY3QgaXMgdG8gY2F0ZWdvcml6ZSBpdCBhcyBzdWNoLCBhbmQgdGhhdCBmcmFtZXdvcmsgaGVscHMgbmFycm93IGRvd24gdGhlIHJlbGV2YW50IGFyZWFzIG9mIGludmVzdGlnYXRpb24uXG5cbk5vdywgbGV0J3MgZGl2ZSBpbnRvIHRoZSBkZXRhaWwgYW5kIHdoYXQgdGhhdCBtZWFucyBmb3IgaXRzIGZ1bmN0aW9uLiBUaGUgbmV4dCBzdGVwIGlzIHRvIGV4YW1pbmUgYGJwZl9pdGVyX251bV9kZXN0cm95YC4gVGhhdCBuYW1lIGFsb25lIGlzIGZhaXJseSBkZXNjcmlwdGl2ZTogXCJicGYsXCIgXCJpdGVyLFwiIGFuZCBcImRlc3Ryb3lcIiBnaXZlcyBtZSBhIHNvbGlkIHN0YXJ0aW5nIHBvaW50LiBJJ20gYWxyZWFkeSBtZW50YWxseSBydW5uaW5nIHRocm91Z2ggdGhlIHByb2JhYmxlIHVzZSBjYXNlcy4gSSBleHBlY3QgaXQncyBhYm91dCBjbGVhbmluZyB1cCBhIG51bWVyaWMgaXRlcmF0b3Igd2l0aGluIGEgQlBGIGNvbnRleHQuIE5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBzcGVjaWZpYyBudW1lcmljIHR5cGUgYW5kIGNvbnRleHQgdGhpcyBmdW5jdGlvbiBhcHBsaWVzIHRvLCBzbyBJIGNhbiBmdXJ0aGVyIGRlZHVjZSBpdHMgc2lnbmlmaWNhbmNlLiBJJ20gZ29pbmcgdG8gc3RhcnQgbWVudGFsbHkgdHJhY2luZyBleGVjdXRpb24gcGF0aHMgdG8gdW5kZXJzdGFuZCB3aGVyZSB0aGlzIGZ1bmN0aW9uIGZpdHMgaW50byB0aGUgb3ZlcmFsbCBCUEYgbGlmZWN5Y2xlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDYxMCwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDE0OjEwOjA4LjY0MDgzMTM3M1oiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzAwOTE3MDMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYnBmX2l0ZXJfbnVtX2Rlc3Ryb3lcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2JwZi9icGZfaXRlci5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvYnBmX2l0ZXIuYz04MDE9X19icGZfa2Z1bmMgaW50ICpicGZfaXRlcl9udW1fbmV4dChzdHJ1Y3QgYnBmX2l0ZXJfbnVtKiBpdClcXG4tLVxcbmtlcm5lbC9icGYvYnBmX2l0ZXIuYy04MTgtXFxua2VybmVsL2JwZi9icGZfaXRlci5jOjgxOTpfX2JwZl9rZnVuYyB2b2lkIGJwZl9pdGVyX251bV9kZXN0cm95KHN0cnVjdCBicGZfaXRlcl9udW0gKml0KVxcbmtlcm5lbC9icGYvYnBmX2l0ZXIuYy04MjAte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQxNDoxMDowOC43MTA5MjY4ODZaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTc1MDA5Mjg0MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGJyZWFrZG93biBvZiB3aGF0IEknbSBsb29raW5nIGF0OlxuXG4qKktmdW5jIERpc3NlY3Rpb246IENvcmUgRnVuY3Rpb25zIGFuZCBDb25maWd1cmF0aW9uKipcblxuUmlnaHQsIHNvIHRoaXMgaXMgZGVmaW5pdGVseSBhIGtmdW5jLCB3aGljaCBtZWFucyBJIG5lZWQgdG8gemVybyBpbiBvbiBhIHNwZWNpZmljIHNldCBvZiBmdW5jdGlvbnMuIEkga25vdyB0aGF0OiBgYnBmX2ZpeHVwX2tmdW5jX2NhbGxgIGlzIGdvaW5nIHRvIGJlIGNydWNpYWwgZm9yIHRoZSBpbml0aWFsIHNldHVwLCBhbmQgdGhlbiBJJ20gYWxzbyBsb29raW5nIGF0IHRoZSBpdGVyYXRvciBmdW5jdGlvbnM6IGBicGZfaXRlcl9udW1fbmV3YCwgYGJwZl9pdGVyX251bV9uZXh0YCwgYW5kIGBicGZfaXRlcl9udW1fZGVzdHJveWAuIFRob3NlIGhhbmRsZSB0aGUgY3JlYXRpb24sIHByb2dyZXNzaW9uLCBhbmQgY2xlYW51cCBvZiB0aGUgaXRlcmF0b3IsIHdoaWNoIGlzIGxpa2VseSB0aGUgY29yZSBvZiB0aGUgZnVuY3Rpb25hbGl0eSBoZXJlLiBJIHNob3VsZCBwcm9iYWJseSByZXZpZXcgaG93IGl0ZXJhdG9ycyBpbnRlcmFjdCB3aXRoIHRoZXNlIGZ1bmN0aW9ucy5cblxuSSBzaG91bGQgYWxzbyBtYWtlIHN1cmUgdGhlIGBCUEZfU1lTQ0FMTGAgY29uZmlndXJhdGlvbiBvcHRpb24gaXMgZW5hYmxlZCDigJMgaXQncyBwcmV0dHkgZXNzZW50aWFsIGZvciB0aGUga2Z1bmMgdG8gYWN0dWFsbHkgZnVuY3Rpb24gcHJvcGVybHkgd2l0aGluIHRoZSBzeXN0ZW0gY2FsbCBjb250ZXh0LCBhbmQgdGhhdCdzIHVzdWFsbHkgaW1wb3J0YW50IGZvciB0aGUgY29udGV4dCBrZnVuY3Mgb3BlcmF0ZSBpbi5cblxuSnVzdCB0byBiZSB0aG9yb3VnaCwgSSBzaG91bGQgc2NhbiBmb3IgYW55IG90aGVyIGNvbmZpZ3VyYXRpb24gZmxhZ3Mgb3IgcmVsZXZhbnQga2VybmVsIG9wdGlvbnMgdGhhdCBtaWdodCBiZSByZWxldmFudCBoZXJlLiBZb3UgbmV2ZXIga25vdyB3aGVuIHNvbWUgb2JzY3VyZSBmbGFnIGlzIGx1cmtpbmcgYW5kIGFmZmVjdGluZyBiZWhhdmlvci4gQWx3YXlzIGdvb2QgdG8gZG91YmxlIGNoZWNrLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTAxNSwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjk0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDE0OjEwOjE4LjQ2MTAyMjI4OFoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTY4MzgyMzQsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBCUEZfU1lTQ0FMTFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpbml0L0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDE0OjEwOjE4LjUxNzg2OTg3MloiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNDgxOTI5MzA1OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqVHJhY2luZyBEb3duIGBCUEZfU1lTQ0FMTGAqKlxuXG5BbHJpZ2h0LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgYEJQRl9TWVNDQUxMYCBpcyBkZWZpbmVkLiBUaGlzIGxpa2VseSBtZWFucyBJJ20gbG9va2luZyBhdCBob3cgc3lzY2FsbHMgYXJlIGJlaW5nIGhvb2tlZCBvciBwb3RlbnRpYWxseSBmaWx0ZXJlZCB3aXRoIGVCUEYuIEknbGwgbmVlZCB0byBmaWd1cmUgb3V0IHdoZXJlIHRoYXQgbWFjcm8gaXMgZGVjbGFyZWQsIHByb2JhYmx5IGluIGEga2VybmVsIGhlYWRlciBmaWxlLiBJJ20gZ3Vlc3NpbmcgaXQncyBwYXJ0IG9mIHRoZSBjb3JlIEJQRiBpbmZyYXN0cnVjdHVyZSwgbWF5YmUgcmVsYXRlZCB0byB0aGUgdHJhY2luZyBvciBrcHJvYmVzIG1vZHVsZXMuIEknbGwgcHJvYmFibHkgc3RhcnQgd2l0aCB0aGUgc3RhbmRhcmQgaW5jbHVkZSBkaXJlY3Rvcmllcywgc29tZXRoaW5nIGxpa2UgYC91c3Ivc3JjL2xpbnV4L2luY2x1ZGUvYCwgb3Igd2hlcmV2ZXIgdGhlIGtlcm5lbCBoZWFkZXJzIHJlc2lkZSBvbiB0aGlzIHN5c3RlbS4gRnJvbSB0aGVyZSwgSSdsbCBuZWVkIHRvIHVzZSBzb21lIGNsZXZlciBzZWFyY2hpbmcgdGVjaG5pcXVlcy4gYGdyZXBgIGlzIHByb2JhYmx5IHRoZSBpbW1lZGlhdGUgdG9vbCwgYnV0IEkgbWlnaHQgdXNlIGEgbW9yZSBwcmVjaXNlIGNvbW1hbmQgbGlrZSBgZmluZGAgYW5kIHRoZW4gYGdyZXBgIHRvIG5hcnJvdyBkb3duIHRoZSBzZWFyY2ggaWYgSSBrbm93IHNvbWUgcmVsYXRlZCBrZXl3b3JkcywgbGlrZSBcImJwZlwiLCBcInN5c2NhbGxcIiwgb3IgXCJob29rXCIuIEknbSBhbnRpY2lwYXRpbmcgaXQnbGwgYmUgYSBmYWlybHkgaW52b2x2ZWQgbWFjcm8sIHByb2JhYmx5IHNvbWV0aGluZyB0aGF0IGV4cGFuZHMgdG8gYSBzcGVjaWZpYyBlQlBGIGluc3RydWN0aW9uIG9yIGEgc2VyaWVzIG9mIGluc3RydWN0aW9ucyByZWxhdGVkIHRvIGEgc3lzY2FsbCBlbnRyeSBwb2ludC4gSSdsbCBhbHNvIHdhbnQgdG8gY29uc2lkZXIgd2hhdCBrZXJuZWwgdmVyc2lvbnMgbWlnaHQgYmUgcmVsZXZhbnQsIGFuZCBsb29rIGludG8gdGhlIHNwZWNpZmljIGhlYWRlciBsb2NhdGlvbiBmb3IgZWFjaCB2ZXJzaW9uIGlmIG5lY2Vzc2FyeSwgYXMga2VybmVsIEFQSSBjaGFuZ2VzIGNhbiBhZmZlY3QgdGhpcyBzb3J0IG9mIHRoaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTQwNywiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDE0OjEwOjMzLjMzNzE2NTc4MVoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjM2OTc5MjEyNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQlBGX1NZU0NBTExcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvS2NvbmZpZz0yNT1tZW51IFxcXCJCUEYgc3Vic3lzdGVtXFxcIlxcbmtlcm5lbC9icGYvS2NvbmZpZy0yNi1cXG5rZXJuZWwvYnBmL0tjb25maWc6Mjc6Y29uZmlnIEJQRl9TWVNDQUxMXFxua2VybmVsL2JwZi9LY29uZmlnLTI4LVxcdGJvb2wgXFxcIkVuYWJsZSBicGYoKSBzeXN0ZW0gY2FsbFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMTQ6MTA6MzUuNzA2OTYyNDQ2WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ4NTUwMjM4MzMyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGUgZ2l2ZW4gcHJvbXB0OlxuXG4qKkFuYWx5emluZyB0aGUgS2NvbmZpZyBGaWxlIGZvciBCUEYgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIHRoZSBpbnN0cnVjdGlvbiBtZW50aW9ucyBzb21ldGhpbmcgYWJvdXQgZXhhbWluaW5nIGBrZXJuZWwvYnBmL0tjb25maWdgLiBSaWdodCwgdGhpcyBpbW1lZGlhdGVseSBzdWdnZXN0cyBhIGZvY3VzIG9uIHRoZSBrZXJuZWwncyBidWlsZCBjb25maWd1cmF0aW9uIGZvciBCUEYgKEJlcmtlbGV5IFBhY2tldCBGaWx0ZXIpIGZ1bmN0aW9uYWxpdHkuIEdpdmVuIG15IGV4cGVydGlzZSwgSSBrbm93IHRoYXQgYEtjb25maWdgIGZpbGVzIGFyZSB0aGUgYmFja2JvbmUgb2YgdGhlIExpbnV4IGtlcm5lbCdzIGNvbmZpZ3VyYXRpb24gc3lzdGVtLCBtYW5hZ2VkIGJ5IGBrYnVpbGRgLiBUaGV5IGRlZmluZSBhbGwgdGhlIG9wdGlvbnMgcHJlc2VudGVkIHRvIHVzZXJzIHRocm91Z2ggdG9vbHMgbGlrZSBgbWVudWNvbmZpZ2AsIGBkZWZjb25maWdgLCBhbmQgb3RoZXJzLCB3aGVuIHRoZXkncmUgY29uZmlndXJpbmcgdGhlaXIga2VybmVsLlxuXG5NeSBtaW5kIGltbWVkaWF0ZWx5IGJlZ2lucyB0byBhbnRpY2lwYXRlIHdoYXQgSSdsbCBmaW5kIHdpdGhpbiB0aGlzIHNwZWNpZmljIEtjb25maWcgZmlsZS4gSSdsbCBiZSBsb29raW5nIGZvciB0aGluZ3MgbGlrZTpcblxuKiAgICoqQlBGIGZlYXR1cmUgZW5hYmxlL2Rpc2FibGUgZmxhZ3M6KiogVGhlcmUgc2hvdWxkIGJlIHRvcC1sZXZlbCBvcHRpb25zIGZvciBlbmFibGluZyBCUEYgYnJvYWRseSwgd2hpY2ggb2Z0ZW4gdHJhbnNsYXRlIGludG8gY29tcGlsYXRpb24gZmxhZ3MuXG4qICAgKipTcGVjaWZpYyBCUEYgc3Vic3lzdGVtczoqKiBMaWtlbHksIHRoZXJlIHdpbGwgYmUgY29uZmlndXJhdGlvbiBvcHRpb25zIHRoYXQgY29udHJvbCB0aGUgaW5jbHVzaW9uIG9mIHNwZWNpZmljIEJQRiBoZWxwZXIgZnVuY3Rpb25zLCBCUEYgcHJvZ3JhbSB0eXBlcyAoZS5nLiwgdHJhY2luZywgbmV0d29ya2luZywgWERQKSwgYW5kIEJQRi1yZWxhdGVkIGZlYXR1cmVzLiBJJ20gdGhpbmtpbmcgb2YgZUJQRiBhbmQgaXRzIGRpdmVyc2UgdXNlcy5cbiogICAqKkRlcGVuZGVuY2llcyBhbmQgY29uc3RyYWludHM6KiogVGhlIEtjb25maWcgZmlsZSB3aWxsIHNwZWNpZnkgd2hpY2ggZmVhdHVyZXMgZGVwZW5kIG9uIG90aGVycywgYW5kIGFueSBoYXJkd2FyZSBvciBzb2Z0d2FyZSByZXF1aXJlbWVudHMuIFRoaXMgaXMga2V5LCBhcyBCUEYgY2FuIGhhdmUgdmVyeSBzcGVjaWZpYyBkZXBlbmRlbmN5IGNoYWlucy5cbiogICAqKkhlbHAgdGV4dDoqKiBUaGUgZmlsZSAqc2hvdWxkKiBjb250YWluIGhlbHBmdWwgZGVzY3JpcHRpb25zIGZvciBlYWNoIG9wdGlvbiwgaWRlYWxseSBleHBsYWluaW5nIHdoYXQgdGhlIG9wdGlvbiBkb2VzLCBhbmQgcHJvdmlkaW5nIGNvbnRleHQgZm9yIGl0cyB1c2UuIEkgd2lsbCBhbHNvIGFzc2VzcyBpdHMgcXVhbGl0eS5cbiogICAqKkRlZmF1bHQgdmFsdWVzOioqIEl0IHdpbGwgZGVmaW5lIGRlZmF1bHQgY2hvaWNlcyBmb3IgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy5cblxuSSdtIHJlYWR5IHRvIGRpdmUgaW50byB0aGUgZmlsZSBhbmQgZ2V0IHRvIHdvcmsuIExldCdzIHNlZSB3aGF0IGludGVyZXN0aW5nIGNvbmZpZ3VyYXRpb25zIHRoZSBrZXJuZWwgZGV2cyBoYXZlIGNyZWF0ZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExODI1LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMTQ6MTE6MjQuMjU3MjAzMjQ4WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYyNzgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImtlcm5lbC9icGYvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAyNSxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAyNTpcXHRtZW51IFxcXCJCUEYgc3Vic3lzdGVtXFxcIlxcbiAgMjY6XFx0XFxuICAyNzpcXHRjb25maWcgQlBGX1NZU0NBTExcXG4gIDI4OlxcdFxcdGJvb2wgXFxcIkVuYWJsZSBicGYoKSBzeXN0ZW0gY2FsbFxcXCJcXG4gIDI5OlxcdFxcdHNlbGVjdCBCUEZcXG4gIDMwOlxcdFxcdHNlbGVjdCBJUlFfV09SS1xcbiAgMzE6XFx0XFx0c2VsZWN0IE5FRURfVEFTS1NfUkNVXFxuICAzMjpcXHRcXHRzZWxlY3QgVEFTS1NfVFJBQ0VfUkNVXFxuICAzMzpcXHRcXHRzZWxlY3QgQklOQVJZX1BSSU5URlxcbiAgMzQ6XFx0XFx0c2VsZWN0IE5FVF9TT0NLX01TRyBpZiBORVRcXG4gIDM1OlxcdFxcdHNlbGVjdCBORVRfWEdSRVNTIGlmIE5FVFxcbiAgMzY6XFx0XFx0c2VsZWN0IFBBR0VfUE9PTCBpZiBORVRcXG4gIDM3OlxcdFxcdGRlZmF1bHQgblxcbiAgMzg6XFx0XFx0aGVscFxcbiAgMzk6XFx0XFx0ICBFbmFibGUgdGhlIGJwZigpIHN5c3RlbSBjYWxsIHRoYXQgYWxsb3dzIHRvIG1hbmlwdWxhdGUgQlBGIHByb2dyYW1zXFxuICA0MDpcXHRcXHQgIGFuZCBtYXBzIHZpYSBmaWxlIGRlc2NyaXB0b3JzLlxcbiAgNDE6XFx0XFxuICA0MjpcXHRjb25maWcgQlBGX0pJVFxcbiAgNDM6XFx0XFx0Ym9vbCBcXFwiRW5hYmxlIEJQRiBKdXN0IEluIFRpbWUgY29tcGlsZXJcXFwiXFxuICA0NDpcXHRcXHRkZXBlbmRzIG9uIEJQRlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQxNDoxMToyNC4yNTcyNjc5MDhaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTU4MzM3MjI0NTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgcHJlc2VudGVkIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqTXkgQlBGIFN0cmF0ZWd5KipcblxuQWxyaWdodCwgc28gdGhlIGNvcmUgb2YgdGhpcyBpbnZlc3RpZ2F0aW9uLCB0aGUgdmVyeSBjcnV4IG9mIHdoZXJlIEkgbmVlZCB0byBmb2N1cyBteSBlbmVyZ2llcywgaXMgZ29pbmcgdG8gYmUgZHJpdmVuIGJ5IHRoZSBgQlBGX1NZU0NBTExgIGNvbmZpZ3VyYXRpb24uIFRoYXQncyB0aGUga2V5LCB0aGUgZW50cnkgcG9pbnQgZm9yIGV2ZXJ5dGhpbmcgSSBuZWVkIHRvIGFuYWx5emUuIEl0J3MgdGhlIGx5bmNocGluLCB0aGUgcGxhY2Ugd2hlcmUgSSdsbCBob29rIGluIHRvIGdldCB0aGUgZGF0YSBJIG5lZWQuXG5cbkFuZCwgb2YgY291cnNlLCBvbmNlIEkndmUgZ290IHRoYXQgZGF0YSwgb25jZSBJJ3ZlIHNpZnRlZCB0aHJvdWdoIGl0LCB3cnVuZyBpdCBkcnkgYW5kIGFuYWx5emVkIGl0IC0gSSdtIGdvaW5nIHRvIHJlcG9ydCB0aG9zZSBmaW5kaW5ncyB3aXRoIGBzZXQtcmVzdWx0c2AuIE5vIHN1cnByaXNlcyB0aGVyZS4gSXQncyB0aGUgbW9zdCBlZmZlY3RpdmUgYW5kIGVmZmljaWVudCB3YXkgdG8gcHJlc2VudCBhbmQgZm9ybWF0IHRoZSBpbmZvcm1hdGlvbiBhZnRlciBhbGwgdGhhdCBpbnRlbnNpdmUgd29yay4gSXTigJlzIHdoYXQgSSdsbCBsZXZlcmFnZSB0byBwcmVzZW50IHRoZSBpbnNpZ2h0cyB0aGF0IGVtZXJnZSBmcm9tIHRoZSBzeXNjYWxsIGFuYWx5c2lzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjUwNSwiT3V0cHV0VG9rZW5zIjoxNjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDE0OjEyOjIwLjA5MDk5Mjc1OFoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc3NTUyMzIyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfU1lTQ0FMTFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJwZl9maXh1cF9rZnVuY19jYWxsXCIsXG4gICAgXCJicGZfaXRlcl9udW1fbmV3XCIsXG4gICAgXCJicGZfaXRlcl9udW1fbmV4dFwiLFxuICAgIFwiYnBmX2l0ZXJfbnVtX2Rlc3Ryb3lcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgaW1wbGVtZW50YXRpb24gb2YgQlBGIG51bWVyaWMgaXRlcmF0b3JzIChgYnBmX2l0ZXJfbnVtX25ld2AsIGBicGZfaXRlcl9udW1fbmV4dGAsIGBicGZfaXRlcl9udW1fZGVzdHJveWApIGFuZCBhZGRzIGlubGluaW5nIGZvciB0aGVzZSBrZnVuY3MgaW4gdGhlIEJQRiB2ZXJpZmllciAoYGJwZl9maXh1cF9rZnVuY19jYWxsYCkuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGNvcmUgQlBGIHN1YnN5c3RlbSBhbmQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfU1lTQ0FMTFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJwZl9maXh1cF9rZnVuY19jYWxsXCIsXG4gICAgXCJicGZfaXRlcl9udW1fbmV3XCIsXG4gICAgXCJicGZfaXRlcl9udW1fbmV4dFwiLFxuICAgIFwiYnBmX2l0ZXJfbnVtX2Rlc3Ryb3lcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgaW1wbGVtZW50YXRpb24gb2YgQlBGIG51bWVyaWMgaXRlcmF0b3JzIChgYnBmX2l0ZXJfbnVtX25ld2AsIGBicGZfaXRlcl9udW1fbmV4dGAsIGBicGZfaXRlcl9udW1fZGVzdHJveWApIGFuZCBhZGRzIGlubGluaW5nIGZvciB0aGVzZSBrZnVuY3MgaW4gdGhlIEJQRiB2ZXJpZmllciAoYGJwZl9maXh1cF9rZnVuY19jYWxsYCkuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGNvcmUgQlBGIHN1YnN5c3RlbSBhbmQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowspcrt[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-04 13:58:43 +0000 UTC FinishedAt: 2026-08-04 14:12:21 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "bpf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git", "commit_hash": "60781269e26c786de2bb93fb1e697a5c32ccee48", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "bpf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git", "commit_hash": "60781269e26c786de2bb93fb1e697a5c32ccee48", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL" ], "series_id": "89768380-1fa3-44a6-b82b-d862d1d779cb" }, "track": "KASAN", "fuzz": { "focus": [ "bpf" ], "focus_symbols": [ "bpf_fixup_kfunc_call", "bpf_iter_num_new", "bpf_iter_num_next", "bpf_iter_num_destroy" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDE0OjAwPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MTFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCUEZfU1lTQ0FMTCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2JwZl9maXh1cF9rZnVuY19jYWxsJiMzNDssCiAgICAmIzM0O2JwZl9pdGVyX251bV9uZXcmIzM0OywKICAgICYjMzQ7YnBmX2l0ZXJfbnVtX25leHQmIzM0OywKICAgICYjMzQ7YnBmX2l0ZXJfbnVtX2Rlc3Ryb3kmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGltcGxlbWVudGF0aW9uIG9mIEJQRiBudW1lcmljIGl0ZXJhdG9ycyAoYGJwZl9pdGVyX251bV9uZXdgLCBgYnBmX2l0ZXJfbnVtX25leHRgLCBgYnBmX2l0ZXJfbnVtX2Rlc3Ryb3lgKSBhbmQgYWRkcyBpbmxpbmluZyBmb3IgdGhlc2Uga2Z1bmNzIGluIHRoZSBCUEYgdmVyaWZpZXIgKGBicGZfZml4dXBfa2Z1bmNfY2FsbGApLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBjb3JlIEJQRiBzdWJzeXN0ZW0gYW5kIHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMTQ6MDA8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBiZTVkZGY2MmJlNmIxOTEzNzhjMWYwNjIwYWJkOTY5OGYyMjgyMjA0XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBBdWcgNCAxNDowMDo0MiAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL2JwZl9pdGVyLmMgYi9rZXJuZWwvYnBmL2JwZl9pdGVyLmNcbmluZGV4IGY1ZWFlYjI0OTNkNGEuLjE0YTVmZGZhMDQyMTQgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvYnBmL2JwZl9pdGVyLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9icGYvYnBmX2l0ZXIuY1xuQEAgLTc4Miw4ICYjNDM7NzgyLDggQEAgX19icGZfa2Z1bmMgaW50IGJwZl9pdGVyX251bV9uZXcoc3RydWN0IGJwZl9pdGVyX251bSAqaXQsIGludCBzdGFydCwgaW50IGVuZClcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHR9XG4gXG4tXHQvKiBhdm9pZCBvdmVyZmxvd3MsIGUuZy4sIGlmIHN0YXJ0ID09IElOVF9NSU4gYW5kIGVuZCA9PSBJTlRfTUFYICovXG4tXHRpZiAoKHM2NCllbmQgLSAoczY0KXN0YXJ0IFx1MDAzZSBCUEZfTUFYX0xPT1BTKSB7XG4mIzQzO1x0Lyogc3RhcnQgXHUwMDNjPSBlbmQgaGVyZSwgc28gZW5kIC0gc3RhcnQgZml0cyBpbiBhIHUzMiB3aXRob3V0IG92ZXJmbG93ICovXG4mIzQzO1x0aWYgKCh1MzIpKGVuZCAtIHN0YXJ0KSBcdTAwM2UgQlBGX01BWF9MT09QUykge1xuIFx0XHRzLVx1MDAzZWN1ciA9IHMtXHUwMDNlZW5kID0gMDtcbiBcdFx0cmV0dXJuIC1FMkJJRztcbiBcdH1cbkBAIC04MDIsMTIgJiM0Mzs4MDIsMTEgQEAgX19icGZfa2Z1bmMgaW50ICpicGZfaXRlcl9udW1fbmV4dChzdHJ1Y3QgYnBmX2l0ZXJfbnVtKiBpdClcbiB7XG4gXHRzdHJ1Y3QgYnBmX2l0ZXJfbnVtX2tlcm4gKnMgPSAodm9pZCAqKWl0O1xuIFxuLVx0LyogY2hlY2sgZmFpbGVkIGluaXRpYWxpemF0aW9uIG9yIGlmIHdlIGFyZSBkb25lIChzYW1lIGJlaGF2aW9yKTtcbi1cdCAqIG5lZWQgdG8gYmUgY2FyZWZ1bCBhYm91dCBvdmVyZmxvdywgc28gY29udmVydCB0byBzNjQgZm9yIGNoZWNrcyxcbi1cdCAqIGUuZy4sIGlmIHMtXHUwMDNlY3VyID09IHMtXHUwMDNlZW5kID09IElOVF9NQVgsIHdlIGNhbiYjMzk7dCBqdXN0IGRvXG4tXHQgKiBzLVx1MDAzZWN1ciAmIzQzOyAxIFx1MDAzZT0gcy1cdTAwM2VlbmRcbiYjNDM7XHQvKlxuJiM0MztcdCAqIHMtXHUwMDNlY3VyIFx1MDAzYyBzLVx1MDAzZWVuZCB3aGlsZSBpdGVyYXRpbmcsIGVsc2Ugcy1cdTAwM2VjdXIgPT0gcy1cdTAwM2VlbmQgPT0gMDsgdGhlIHNpZ25lZFxuJiM0MztcdCAqIHMtXHUwMDNlY3VyICYjNDM7IDEgXHUwMDNlPSBzLVx1MDAzZWVuZCBob2xkcyBldmVuIHdoZW4gcy1cdTAwM2VjdXIgJiM0MzsgMSB3cmFwcyAoc3RhcnQgPT0gSU5UX01JTikuXG4gXHQgKi9cbi1cdGlmICgoczY0KShzLVx1MDAzZWN1ciAmIzQzOyAxKSBcdTAwM2U9IHMtXHUwMDNlZW5kKSB7XG4mIzQzO1x0aWYgKHMtXHUwMDNlY3VyICYjNDM7IDEgXHUwMDNlPSBzLVx1MDAzZWVuZCkge1xuIFx0XHRzLVx1MDAzZWN1ciA9IHMtXHUwMDNlZW5kID0gMDtcbiBcdFx0cmV0dXJuIE5VTEw7XG4gXHR9XG5AQCAtODE5LDkgJiM0Mzs4MTgsNyBAQCBfX2JwZl9rZnVuYyBpbnQgKmJwZl9pdGVyX251bV9uZXh0KHN0cnVjdCBicGZfaXRlcl9udW0qIGl0KVxuIFxuIF9fYnBmX2tmdW5jIHZvaWQgYnBmX2l0ZXJfbnVtX2Rlc3Ryb3koc3RydWN0IGJwZl9pdGVyX251bSAqaXQpXG4ge1xuLVx0c3RydWN0IGJwZl9pdGVyX251bV9rZXJuICpzID0gKHZvaWQgKilpdDtcbi1cbi1cdHMtXHUwMDNlY3VyID0gcy1cdTAwM2VlbmQgPSAwO1xuJiM0MztcdC8qIG5vLW9wICovXG4gfVxuIFxuIF9fYnBmX2tmdW5jX2VuZF9kZWZzKCk7XG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi92ZXJpZmllci5jIGIva2VybmVsL2JwZi92ZXJpZmllci5jXG5pbmRleCBiMjc0MDA0ZmNjZmQ5Li4zZTQ0YjAyMDU3NTZhIDEwMDY0NFxuLS0tIGEva2VybmVsL2JwZi92ZXJpZmllci5jXG4mIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvYnBmL3ZlcmlmaWVyLmNcbkBAIC0yMDAwMSw2ICYjNDM7MjAwMDEsNTEgQEAgaW50IGJwZl9maXh1cF9rZnVuY19jYWxsKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfaW5zbiAqaW5zbixcbiBcdFx0aW5zbl9idWZbNF0gPSBCUEZfQUxVNjRfUkVHKEJQRl9TVUIsIEJQRl9SRUdfMCwgQlBGX1JFR18xKTtcbiBcdFx0aW5zbl9idWZbNV0gPSBCUEZfQUxVNjRfSU1NKEJQRl9ORUcsIEJQRl9SRUdfMCwgMCk7XG4gXHRcdCpjbnQgPSA2O1xuJiM0MztcdH0gZWxzZSBpZiAoZGVzYy1cdTAwM2VmdW5jX2lkID09IHNwZWNpYWxfa2Z1bmNfbGlzdFtLRl9icGZfaXRlcl9udW1fbmV3XSkge1xuJiM0MztcdFx0LyogaW5saW5lIGJwZl9pdGVyX251bV9uZXcoXHUwMDI2aXQsIHN0YXJ0LCBlbmQpOyBSMT1cdTAwMjZpdCwgUjI9c3RhcnQsIFIzPWVuZCAqL1xuJiM0MztcdFx0aW50IGkgPSAwO1xuJiM0MztcbiYjNDM7XHRcdC8qIGlmIChzdGFydCBcdTAwM2UgZW5kKSBnb3RvIGVpbnZhbDsgKi9cbiYjNDM7XHRcdGluc25fYnVmW2kmIzQzOyYjNDM7XSA9IEJQRl9KTVAzMl9SRUcoQlBGX0pTR1QsIEJQRl9SRUdfMiwgQlBGX1JFR18zLCA4KTtcbiYjNDM7XHRcdC8qIHIwID0gKHUzMillbmQgLSAodTMyKXN0YXJ0OyBpZiAocjAgXHUwMDNlIEJQRl9NQVhfTE9PUFMpIGdvdG8gZTJiaWc7ICovXG4mIzQzO1x0XHRpbnNuX2J1ZltpJiM0MzsmIzQzO10gPSBCUEZfTU9WMzJfUkVHKEJQRl9SRUdfMCwgQlBGX1JFR18zKTtcbiYjNDM7XHRcdGluc25fYnVmW2kmIzQzOyYjNDM7XSA9IEJQRl9BTFUzMl9SRUcoQlBGX1NVQiwgQlBGX1JFR18wLCBCUEZfUkVHXzIpO1xuJiM0MztcdFx0aW5zbl9idWZbaSYjNDM7JiM0MztdID0gQlBGX0pNUF9JTU0oQlBGX0pHVCwgQlBGX1JFR18wLCBCUEZfTUFYX0xPT1BTLCA4KTtcbiYjNDM7XHRcdC8qIHMtXHUwMDNlY3VyID0gc3RhcnQgLSAxOyBzLVx1MDAzZWVuZCA9IGVuZDsgcmV0dXJuIDA7ICovXG4mIzQzO1x0XHRpbnNuX2J1ZltpJiM0MzsmIzQzO10gPSBCUEZfQUxVMzJfSU1NKEJQRl9BREQsIEJQRl9SRUdfMiwgLTEpO1xuJiM0MztcdFx0aW5zbl9idWZbaSYjNDM7JiM0MztdID0gQlBGX1NUWF9NRU0oQlBGX1csIEJQRl9SRUdfMSwgQlBGX1JFR18yLCAwKTtcbiYjNDM7XHRcdGluc25fYnVmW2kmIzQzOyYjNDM7XSA9IEJQRl9TVFhfTUVNKEJQRl9XLCBCUEZfUkVHXzEsIEJQRl9SRUdfMywgNCk7XG4mIzQzO1x0XHRpbnNuX2J1ZltpJiM0MzsmIzQzO10gPSBCUEZfTU9WNjRfSU1NKEJQRl9SRUdfMCwgMCk7XG4mIzQzO1x0XHRpbnNuX2J1ZltpJiM0MzsmIzQzO10gPSBCUEZfSk1QX0EoNSk7XG4mIzQzO1x0XHQvKiBlaW52YWw6IHMtXHUwMDNlY3VyID0gcy1cdTAwM2VlbmQgPSAwOyByZXR1cm4gLUVJTlZBTDsgKi9cbiYjNDM7XHRcdGluc25fYnVmW2kmIzQzOyYjNDM7XSA9IEJQRl9TVF9NRU0oQlBGX0RXLCBCUEZfUkVHXzEsIDAsIDApO1xuJiM0MztcdFx0aW5zbl9idWZbaSYjNDM7JiM0MztdID0gQlBGX01PVjY0X0lNTShCUEZfUkVHXzAsIC1FSU5WQUwpO1xuJiM0MztcdFx0aW5zbl9idWZbaSYjNDM7JiM0MztdID0gQlBGX0pNUF9BKDIpO1xuJiM0MztcdFx0LyogZTJiaWc6IHMtXHUwMDNlY3VyID0gcy1cdTAwM2VlbmQgPSAwOyByZXR1cm4gLUUyQklHOyAqL1xuJiM0MztcdFx0aW5zbl9idWZbaSYjNDM7JiM0MztdID0gQlBGX1NUX01FTShCUEZfRFcsIEJQRl9SRUdfMSwgMCwgMCk7XG4mIzQzO1x0XHRpbnNuX2J1ZltpJiM0MzsmIzQzO10gPSBCUEZfTU9WNjRfSU1NKEJQRl9SRUdfMCwgLUUyQklHKTtcbiYjNDM7XHRcdCpjbnQgPSBpO1xuJiM0MztcdH0gZWxzZSBpZiAoZGVzYy1cdTAwM2VmdW5jX2lkID09IHNwZWNpYWxfa2Z1bmNfbGlzdFtLRl9icGZfaXRlcl9udW1fbmV4dF0pIHtcbiYjNDM7XHRcdC8qIGlubGluZSBicGZfaXRlcl9udW1fbmV4dChcdTAwMjZpdCk7IFIxPVx1MDAyNml0LCByZXR1cm5zIFx1MDAyNnMtXHUwMDNlY3VyIG9yIE5VTEwgKi9cbiYjNDM7XHRcdGludCBpID0gMDtcbiYjNDM7XG4mIzQzO1x0XHQvKiByMCA9IHMtXHUwMDNlY3VyICYjNDM7IDE7IGlmICgoczMyKXIwIFx1MDAzZT0gcy1cdTAwM2VlbmQpIGdvdG8gZG9uZTsgKi9cbiYjNDM7XHRcdGluc25fYnVmW2kmIzQzOyYjNDM7XSA9IEJQRl9MRFhfTUVNKEJQRl9XLCBCUEZfUkVHXzAsIEJQRl9SRUdfMSwgMCk7XG4mIzQzO1x0XHRpbnNuX2J1ZltpJiM0MzsmIzQzO10gPSBCUEZfQUxVMzJfSU1NKEJQRl9BREQsIEJQRl9SRUdfMCwgMSk7XG4mIzQzO1x0XHRpbnNuX2J1ZltpJiM0MzsmIzQzO10gPSBCUEZfTERYX01FTShCUEZfVywgQlBGX1JFR18yLCBCUEZfUkVHXzEsIDQpO1xuJiM0MztcdFx0aW5zbl9idWZbaSYjNDM7JiM0MztdID0gQlBGX0pNUDMyX1JFRyhCUEZfSlNHRSwgQlBGX1JFR18wLCBCUEZfUkVHXzIsIDMpO1xuJiM0MztcdFx0Lyogcy1cdTAwM2VjdXIgPSByMDsgcmV0dXJuIFx1MDAyNnMtXHUwMDNlY3VyOyAqL1xuJiM0MztcdFx0aW5zbl9idWZbaSYjNDM7JiM0MztdID0gQlBGX1NUWF9NRU0oQlBGX1csIEJQRl9SRUdfMSwgQlBGX1JFR18wLCAwKTtcbiYjNDM7XHRcdGluc25fYnVmW2kmIzQzOyYjNDM7XSA9IEJQRl9NT1Y2NF9SRUcoQlBGX1JFR18wLCBCUEZfUkVHXzEpO1xuJiM0MztcdFx0aW5zbl9idWZbaSYjNDM7JiM0MztdID0gQlBGX0pNUF9BKDIpO1xuJiM0MztcdFx0LyogZG9uZTogcy1cdTAwM2VjdXIgPSBzLVx1MDAzZWVuZCA9IDA7IHJldHVybiBOVUxMOyAqL1xuJiM0MztcdFx0aW5zbl9idWZbaSYjNDM7JiM0MztdID0gQlBGX1NUX01FTShCUEZfRFcsIEJQRl9SRUdfMSwgMCwgMCk7XG4mIzQzO1x0XHRpbnNuX2J1ZltpJiM0MzsmIzQzO10gPSBCUEZfTU9WNjRfSU1NKEJQRl9SRUdfMCwgMCk7XG4mIzQzO1x0XHQqY250ID0gaTtcbiYjNDM7XHR9IGVsc2UgaWYgKGRlc2MtXHUwMDNlZnVuY19pZCA9PSBzcGVjaWFsX2tmdW5jX2xpc3RbS0ZfYnBmX2l0ZXJfbnVtX2Rlc3Ryb3ldKSB7XG4mIzQzO1x0XHQvKiBicGZfaXRlcl9udW1fZGVzdHJveSgpIGlzIGEgbm8tb3A7IGVtaXQgYSBub3AgdG8gZHJvcCB0aGUgY2FsbCAqL1xuJiM0MztcdFx0aW5zbl9idWZbMF0gPSBCUEZfSk1QX0EoMCk7XG4mIzQzO1x0XHQqY250ID0gMTtcbiBcdH1cbiBcbiBcdGlmIChlbnYtXHUwMDNlaW5zbl9hdXhfZGF0YVtpbnNuX2lkeF0uYXJnX3Byb2cpIHtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvTWFrZWZpbGUgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvTWFrZWZpbGVcbmluZGV4IDU1ZDM5NDQzODcwNWEuLjMxNzRjMmYxOGU3MTUgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvTWFrZWZpbGVcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9NYWtlZmlsZVxuQEAgLTk2NSw2ICYjNDM7OTY1LDcgQEAgJChPVVRQVVQpL2JlbmNoX3JpbmdidWZzLm86ICQoT1VUUFVUKS9yaW5nYnVmX2JlbmNoLnNrZWwuaCBcXFxuIFx0XHRcdCAgICAkKE9VVFBVVCkvcGVyZmJ1Zl9iZW5jaC5za2VsLmhcbiAkKE9VVFBVVCkvYmVuY2hfYmxvb21fZmlsdGVyX21hcC5vOiAkKE9VVFBVVCkvYmxvb21fZmlsdGVyX2JlbmNoLnNrZWwuaFxuICQoT1VUUFVUKS9iZW5jaF9icGZfbG9vcC5vOiAkKE9VVFBVVCkvYnBmX2xvb3BfYmVuY2guc2tlbC5oXG4mIzQzOyQoT1VUUFVUKS9iZW5jaF9icGZfZm9yLm86ICQoT1VUUFVUKS9icGZfZm9yX2JlbmNoLnNrZWwuaFxuICQoT1VUUFVUKS9iZW5jaF9zdHJuY21wLm86ICQoT1VUUFVUKS9zdHJuY21wX2JlbmNoLnNrZWwuaFxuICQoT1VUUFVUKS9iZW5jaF9icGZfaGFzaG1hcF9mdWxsX3VwZGF0ZS5vOiAkKE9VVFBVVCkvYnBmX2hhc2htYXBfZnVsbF91cGRhdGVfYmVuY2guc2tlbC5oXG4gJChPVVRQVVQpL2JlbmNoX2xvY2FsX3N0b3JhZ2UubzogJChPVVRQVVQpL2xvY2FsX3N0b3JhZ2VfYmVuY2guc2tlbC5oXG5AQCAtOTkwLDYgJiM0Mzs5OTEsNyBAQCAkKE9VVFBVVCkvYmVuY2g6ICQoT1VUUFVUKS9iZW5jaC5vIFxcXG4gXHRcdCAkKE9VVFBVVCkvYmVuY2hfcmluZ2J1ZnMubyBcXFxuIFx0XHQgJChPVVRQVVQpL2JlbmNoX2Jsb29tX2ZpbHRlcl9tYXAubyBcXFxuIFx0XHQgJChPVVRQVVQpL2JlbmNoX2JwZl9sb29wLm8gXFxcbiYjNDM7XHRcdCAkKE9VVFBVVCkvYmVuY2hfYnBmX2Zvci5vIFxcXG4gXHRcdCAkKE9VVFBVVCkvYmVuY2hfc3RybmNtcC5vIFxcXG4gXHRcdCAkKE9VVFBVVCkvYmVuY2hfYnBmX2hhc2htYXBfZnVsbF91cGRhdGUubyBcXFxuIFx0XHQgJChPVVRQVVQpL2JlbmNoX2xvY2FsX3N0b3JhZ2UubyBcXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9iZW5jaC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JlbmNoLmNcbmluZGV4IDNkOWQyY2Q3NzY0YmQuLmI4NmI3MzQ1NmQzY2EgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYmVuY2guY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JlbmNoLmNcbkBAIC0yNzYsNiAmIzQzOzI3Niw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYXJncF9vcHRpb24gb3B0c1tdID0ge1xuIGV4dGVybiBzdHJ1Y3QgYXJncCBiZW5jaF9yaW5nYnVmc19hcmdwO1xuIGV4dGVybiBzdHJ1Y3QgYXJncCBiZW5jaF9ibG9vbV9tYXBfYXJncDtcbiBleHRlcm4gc3RydWN0IGFyZ3AgYmVuY2hfYnBmX2xvb3BfYXJncDtcbiYjNDM7ZXh0ZXJuIHN0cnVjdCBhcmdwIGJlbmNoX2JwZl9mb3JfYXJncDtcbiBleHRlcm4gc3RydWN0IGFyZ3AgYmVuY2hfbG9jYWxfc3RvcmFnZV9hcmdwO1xuIGV4dGVybiBzdHJ1Y3QgYXJncCBiZW5jaF9sb2NhbF9zdG9yYWdlX3JjdV90YXNrc190cmFjZV9hcmdwO1xuIGV4dGVybiBzdHJ1Y3QgYXJncCBiZW5jaF9zdHJuY21wX2FyZ3A7XG5AQCAtMjkyLDYgJiM0MzsyOTMsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGFyZ3BfY2hpbGQgYmVuY2hfcGFyc2Vyc1tdID0ge1xuIFx0eyBcdTAwMjZiZW5jaF9yaW5nYnVmc19hcmdwLCAwLCBcJiMzNDtSaW5nIGJ1ZmZlcnMgYmVuY2htYXJrXCYjMzQ7LCAwIH0sXG4gXHR7IFx1MDAyNmJlbmNoX2Jsb29tX21hcF9hcmdwLCAwLCBcJiMzNDtCbG9vbSBmaWx0ZXIgbWFwIGJlbmNobWFya1wmIzM0OywgMCB9LFxuIFx0eyBcdTAwMjZiZW5jaF9icGZfbG9vcF9hcmdwLCAwLCBcJiMzNDticGZfbG9vcCBoZWxwZXIgYmVuY2htYXJrXCYjMzQ7LCAwIH0sXG4mIzQzO1x0eyBcdTAwMjZiZW5jaF9icGZfZm9yX2FyZ3AsIDAsIFwmIzM0O2JwZl9mb3IgbG9vcCBiZW5jaG1hcmtcJiMzNDssIDAgfSxcbiBcdHsgXHUwMDI2YmVuY2hfbG9jYWxfc3RvcmFnZV9hcmdwLCAwLCBcJiMzNDtsb2NhbF9zdG9yYWdlIGJlbmNobWFya1wmIzM0OywgMCB9LFxuIFx0eyBcdTAwMjZiZW5jaF9zdHJuY21wX2FyZ3AsIDAsIFwmIzM0O2JwZl9zdHJuY21wIGhlbHBlciBiZW5jaG1hcmtcJiMzNDssIDAgfSxcbiBcdHsgXHUwMDI2YmVuY2hfbG9jYWxfc3RvcmFnZV9yY3VfdGFza3NfdHJhY2VfYXJncCwgMCxcbkBAIC01NTcsNiAmIzQzOzU1OSw3IEBAIGV4dGVybiBjb25zdCBzdHJ1Y3QgYmVuY2ggYmVuY2hfYmxvb21fZmFsc2VfcG9zaXRpdmU7XG4gZXh0ZXJuIGNvbnN0IHN0cnVjdCBiZW5jaCBiZW5jaF9oYXNobWFwX3dpdGhvdXRfYmxvb207XG4gZXh0ZXJuIGNvbnN0IHN0cnVjdCBiZW5jaCBiZW5jaF9oYXNobWFwX3dpdGhfYmxvb207XG4gZXh0ZXJuIGNvbnN0IHN0cnVjdCBiZW5jaCBiZW5jaF9icGZfbG9vcDtcbiYjNDM7ZXh0ZXJuIGNvbnN0IHN0cnVjdCBiZW5jaCBiZW5jaF9icGZfZm9yO1xuIGV4dGVybiBjb25zdCBzdHJ1Y3QgYmVuY2ggYmVuY2hfc3RybmNtcF9ub19oZWxwZXI7XG4gZXh0ZXJuIGNvbnN0IHN0cnVjdCBiZW5jaCBiZW5jaF9zdHJuY21wX2hlbHBlcjtcbiBleHRlcm4gY29uc3Qgc3RydWN0IGJlbmNoIGJlbmNoX2JwZl9oYXNobWFwX2Z1bGxfdXBkYXRlO1xuQEAgLTY0MCw2ICYjNDM7NjQzLDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBiZW5jaCAqYmVuY2hzW10gPSB7XG4gXHRcdTAwMjZiZW5jaF9oYXNobWFwX3dpdGhvdXRfYmxvb20sXG4gXHRcdTAwMjZiZW5jaF9oYXNobWFwX3dpdGhfYmxvb20sXG4gXHRcdTAwMjZiZW5jaF9icGZfbG9vcCxcbiYjNDM7XHRcdTAwMjZiZW5jaF9icGZfZm9yLFxuIFx0XHUwMDI2YmVuY2hfc3RybmNtcF9ub19oZWxwZXIsXG4gXHRcdTAwMjZiZW5jaF9zdHJuY21wX2hlbHBlcixcbiBcdFx1MDAyNmJlbmNoX2JwZl9oYXNobWFwX2Z1bGxfdXBkYXRlLFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9iZW5jaHMvYmVuY2hfYnBmX2Zvci5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JlbmNocy9iZW5jaF9icGZfZm9yLmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwLi43MzBjNTFhZDJkZWMzXG4tLS0gL2Rldi9udWxsXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYmVuY2hzL2JlbmNoX2JwZl9mb3IuY1xuQEAgLTAsMCAmIzQzOzEsMTA0IEBAXG4mIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4mIzQzOy8qIENvcHlyaWdodCAoYykgMjAyNiBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy4gKi9cbiYjNDM7XG4mIzQzOyNpbmNsdWRlIFx1MDAzY2FyZ3AuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcJiMzNDtiZW5jaC5oXCYjMzQ7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O2JwZl9mb3JfYmVuY2guc2tlbC5oXCYjMzQ7XG4mIzQzO1xuJiM0MzsvKiBCUEYgdHJpZ2dlcmluZyBiZW5jaG1hcmtzICovXG4mIzQzO3N0YXRpYyBzdHJ1Y3QgY3R4IHtcbiYjNDM7XHRzdHJ1Y3QgYnBmX2Zvcl9iZW5jaCAqc2tlbDtcbiYjNDM7fSBjdHg7XG4mIzQzO1xuJiM0MztzdGF0aWMgc3RydWN0IHtcbiYjNDM7XHRfX3UzMiBucl9sb29wcztcbiYjNDM7fSBhcmdzID0ge1xuJiM0MztcdC8qXG4mIzQzO1x0ICogRGVmYXVsdCB0byBhIGxhcmdlIGxvb3AgY291bnQgc28gdGhlIHBlci1pdGVyYXRpb24gYnBmX2l0ZXJfbnVtX25leHQoKSBjb3N0IGRvbWluYXRlc1xuJiM0MztcdCAqIHRoZSBvbmUtdGltZSBicGZfaXRlcl9udW1fbmV3KCkvZGVzdHJveSgpIHNldHVwIGFuZCB0ZWFyZG93bi5cbiYjNDM7XHQgKi9cbiYjNDM7XHQubnJfbG9vcHMgPSAxMDAwLFxuJiM0Mzt9O1xuJiM0MztcbiYjNDM7ZW51bSB7XG4mIzQzO1x0QVJHX05SX0xPT1BTID0gNDAwMCxcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3QgYXJncF9vcHRpb24gb3B0c1tdID0ge1xuJiM0MztcdHsgXCYjMzQ7bnJfbG9vcHNcJiMzNDssIEFSR19OUl9MT09QUywgXCYjMzQ7bnJfbG9vcHNcJiMzNDssIDAsXG4mIzQzO1x0XHRcJiMzNDtTZXQgbnVtYmVyIG9mIGl0ZXJhdGlvbnMgZm9yIHRoZSBicGZfZm9yKCkgbG9vcFwmIzM0O30sXG4mIzQzO1x0e30sXG4mIzQzO307XG4mIzQzO1xuJiM0MztzdGF0aWMgZXJyb3JfdCBwYXJzZV9hcmcoaW50IGtleSwgY2hhciAqYXJnLCBzdHJ1Y3QgYXJncF9zdGF0ZSAqc3RhdGUpXG4mIzQzO3tcbiYjNDM7XHRzd2l0Y2ggKGtleSkge1xuJiM0MztcdGNhc2UgQVJHX05SX0xPT1BTOlxuJiM0MztcdFx0YXJncy5ucl9sb29wcyA9IHN0cnRvbChhcmcsIE5VTEwsIDEwKTtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdGRlZmF1bHQ6XG4mIzQzO1x0XHRyZXR1cm4gQVJHUF9FUlJfVU5LTk9XTjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKiBleHBvcnRlZCBpbnRvIGJlbmNobWFyayBydW5uZXIgKi9cbiYjNDM7Y29uc3Qgc3RydWN0IGFyZ3AgYmVuY2hfYnBmX2Zvcl9hcmdwID0ge1xuJiM0MztcdC5vcHRpb25zID0gb3B0cyxcbiYjNDM7XHQucGFyc2VyID0gcGFyc2VfYXJnLFxuJiM0Mzt9O1xuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgdmFsaWRhdGUodm9pZClcbiYjNDM7e1xuJiM0MztcdGlmIChlbnYuY29uc3VtZXJfY250ICE9IDApIHtcbiYjNDM7XHRcdGZwcmludGYoc3RkZXJyLCBcJiMzNDtiZW5jaG1hcmsgZG9lc24mIzM5O3Qgc3VwcG9ydCBjb25zdW1lciFcXG5cJiMzNDspO1xuJiM0MztcdFx0ZXhpdCgxKTtcbiYjNDM7XHR9XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkICpwcm9kdWNlcih2b2lkICppbnB1dClcbiYjNDM7e1xuJiM0MztcdHdoaWxlICh0cnVlKVxuJiM0MztcdFx0LyogdHJpZ2dlciB0aGUgYnBmIHByb2dyYW0gKi9cbiYjNDM7XHRcdHN5c2NhbGwoX19OUl9nZXRwZ2lkKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIE5VTEw7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIG1lYXN1cmUoc3RydWN0IGJlbmNoX3JlcyAqcmVzKVxuJiM0Mzt7XG4mIzQzO1x0cmVzLVx1MDAzZWhpdHMgPSBhdG9taWNfc3dhcChcdTAwMjZjdHguc2tlbC1cdTAwM2Vic3MtXHUwMDNlaGl0cywgMCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIHNldHVwKHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgYnBmX2xpbmsgKmxpbms7XG4mIzQzO1xuJiM0MztcdHNldHVwX2xpYmJwZigpO1xuJiM0MztcbiYjNDM7XHRjdHguc2tlbCA9IGJwZl9mb3JfYmVuY2hfX29wZW5fYW5kX2xvYWQoKTtcbiYjNDM7XHRpZiAoIWN0eC5za2VsKSB7XG4mIzQzO1x0XHRmcHJpbnRmKHN0ZGVyciwgXCYjMzQ7ZmFpbGVkIHRvIG9wZW4gc2tlbGV0b25cXG5cJiMzNDspO1xuJiM0MztcdFx0ZXhpdCgxKTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGxpbmsgPSBicGZfcHJvZ3JhbV9fYXR0YWNoKGN0eC5za2VsLVx1MDAzZXByb2dzLmJlbmNobWFyayk7XG4mIzQzO1x0aWYgKCFsaW5rKSB7XG4mIzQzO1x0XHRmcHJpbnRmKHN0ZGVyciwgXCYjMzQ7ZmFpbGVkIHRvIGF0dGFjaCBwcm9ncmFtIVxcblwmIzM0Oyk7XG4mIzQzO1x0XHRleGl0KDEpO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0Y3R4LnNrZWwtXHUwMDNlYnNzLVx1MDAzZW5yX2xvb3BzID0gYXJncy5ucl9sb29wcztcbiYjNDM7fVxuJiM0MztcbiYjNDM7Y29uc3Qgc3RydWN0IGJlbmNoIGJlbmNoX2JwZl9mb3IgPSB7XG4mIzQzO1x0Lm5hbWUgPSBcJiMzNDticGYtZm9yXCYjMzQ7LFxuJiM0MztcdC5hcmdwID0gXHUwMDI2YmVuY2hfYnBmX2Zvcl9hcmdwLFxuJiM0MztcdC52YWxpZGF0ZSA9IHZhbGlkYXRlLFxuJiM0MztcdC5zZXR1cCA9IHNldHVwLFxuJiM0MztcdC5wcm9kdWNlcl90aHJlYWQgPSBwcm9kdWNlcixcbiYjNDM7XHQubWVhc3VyZSA9IG1lYXN1cmUsXG4mIzQzO1x0LnJlcG9ydF9wcm9ncmVzcyA9IG9wc19yZXBvcnRfcHJvZ3Jlc3MsXG4mIzQzO1x0LnJlcG9ydF9maW5hbCA9IG9wc19yZXBvcnRfZmluYWwsXG4mIzQzO307XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JlbmNocy9ydW5fYmVuY2hfYnBmX2Zvci5zaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9iZW5jaHMvcnVuX2JlbmNoX2JwZl9mb3Iuc2hcbm5ldyBmaWxlIG1vZGUgMTAwNzU1XG5pbmRleCAwMDAwMDAwMDAwMDAwLi43ZGE2NDUzOTIwZGFiXG4tLS0gL2Rldi9udWxsXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYmVuY2hzL3J1bl9iZW5jaF9icGZfZm9yLnNoXG5AQCAtMCwwICYjNDM7MSwxNSBAQFxuJiM0MzsjIS9iaW4vYmFzaFxuJiM0MzsjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4mIzQzO1xuJiM0Mztzb3VyY2UgLi9iZW5jaHMvcnVuX2NvbW1vbi5zaFxuJiM0MztcbiYjNDM7c2V0IC1ldWZvIHBpcGVmYWlsXG4mIzQzO1xuJiM0Mztmb3IgdCBpbiAxIDQgOCAxMiAxNjsgZG9cbiYjNDM7Zm9yIGkgaW4gMTAgMTAwIDUwMCAxMDAwIDUwMDAgMTAwMDAgNTAwMDAgMTAwMDAwIDUwMDAwMCAxMDAwMDAwOyBkb1xuJiM0MztzdWJ0aXRsZSBcJiMzNDtucl9sb29wczogJGksIG5yX3RocmVhZHM6ICR0XCYjMzQ7XG4mIzQzO1x0c3VtbWFyaXplX29wcyBcJiMzNDticGZfZm9yOiBcJiMzNDsgXFxcbiYjNDM7XHQgICAgXCYjMzQ7JCgkUlVOX0JFTkNIIC1wICR0IC0tbnJfbG9vcHMgJGkgYnBmLWZvcilcJiMzNDtcbiYjNDM7XHRwcmludGYgXCYjMzQ7XFxuXCYjMzQ7XG4mIzQzO2RvbmVcbiYjNDM7ZG9uZVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9icGZfZm9yX2JlbmNoLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYnBmX2Zvcl9iZW5jaC5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uZjljNzIzMDUxZmM3NFxuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2JwZl9mb3JfYmVuY2guY1xuQEAgLTAsMCAmIzQzOzEsMzIgQEBcbiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbiYjNDM7LyogQ29weXJpZ2h0IChjKSAyMDI2IE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLiAqL1xuJiM0MztcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7dm1saW51eC5oXCYjMzQ7XG4mIzQzOyNpbmNsdWRlIFx1MDAzY2JwZi9icGZfaGVscGVycy5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFwmIzM0O2JwZl9taXNjLmhcJiMzNDtcbiYjNDM7XG4mIzQzO2NoYXIgX2xpY2Vuc2VbXSBTRUMoXCYjMzQ7bGljZW5zZVwmIzM0OykgPSBcJiMzNDtHUExcJiMzNDs7XG4mIzQzO1xuJiM0MztpbnQgbnJfbG9vcHM7XG4mIzQzO2xvbmcgaGl0cztcbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgb3V0ZXJfbG9vcChfX3UzMiBpbmRleCwgdm9pZCAqZGF0YSlcbiYjNDM7e1xuJiM0MztcdGludCBpO1xuJiM0MztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIEVtcHR5IGJvZHk6IHRoZSB3b3JrIGJlaW5nIG1lYXN1cmVkIGlzIHRoZSBvcGVuLWNvZGVkIG51bWVyaWMgaXRlcmF0b3IgaXRzZWxmXG4mIzQzO1x0ICogKGJwZl9pdGVyX251bV9uZXcvbmV4dC9kZXN0cm95IGJlaGluZCBicGZfZm9yKCkpLlxuJiM0MztcdCAqL1xuJiM0MztcdGJwZl9mb3IoaSwgMCwgbnJfbG9vcHMpXG4mIzQzO1x0XHQ7XG4mIzQzO1x0X19zeW5jX2FkZF9hbmRfZmV0Y2goXHUwMDI2aGl0cywgbnJfbG9vcHMpO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztTRUMoXCYjMzQ7ZmVudHJ5L1wmIzM0OyBTWVNfUFJFRklYIFwmIzM0O3N5c19nZXRwZ2lkXCYjMzQ7KVxuJiM0MztpbnQgYmVuY2htYXJrKHZvaWQgKmN0eClcbiYjNDM7e1xuJiM0MztcdGJwZl9sb29wKDEwMDAsIG91dGVyX2xvb3AsIE5VTEwsIDApO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2l0ZXJzLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvaXRlcnMuY1xuaW5kZXggMGZhNzBiMTMzZDkzMi4uNjJkN2RmOWU4MGJlYiAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9pdGVycy5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvaXRlcnMuY1xuQEAgLTg4LDYgJiM0Mzs4OCw4OSBAQCBpbnQgaXRlcl9lcnJfdW5zYWZlX2FzbV9sb29wKGNvbnN0IHZvaWQgKmN0eClcbiBcdHJldHVybiAwO1xuIH1cbiBcbiYjNDM7LypcbiYjNDM7ICogTmFrZWQgZnVuY3Rpb24sIHNvIHRoZXJlIGlzIG5vIGNvbXBpbGVyLWdlbmVyYXRlZCBnbHVlIGFuZCB0aGUgd2hvbGUgaW5saW5lZCBwcm9ncmFtIGNhbiBiZVxuJiM0MzsgKiBtYXRjaGVkLiBQaW5uZWQgdG8gYXJjaGVzIHdob3NlIEpJVHMgemVyby1leHRlbmQgMzItYml0IHdyaXRlcyBpbXBsaWNpdGx5XG4mIzQzOyAqIChicGZfaml0X25lZWRzX3pleHQoKSA9PSBmYWxzZSk7IG9uIGFyY2hlcyB0aGF0IG5lZWQgZXhwbGljaXQgemVyby1leHRlbnNpb24gdGhlIHZlcmlmaWVyXG4mIzQzOyAqIGludGVybGVhdmVzIFwmIzM0O3dOID0gd05cJiMzNDsgaW5zbnMgYW5kIHRoZSBmaXhlZCBzaGFwZSBiZWxvdyB3b3VsZCBub3QgbWF0Y2guIFRoZSBpbmxpbmluZyBpdHNlbGYgaXNcbiYjNDM7ICogYXJjaCBpbmRlcGVuZGVudCwgc28gY2hlY2tpbmcgaXQgb24gdGhlc2UgYXJjaGVzIGlzIHN1ZmZpY2llbnQuXG4mIzQzOyAqXG4mIzQzOyAqIGJwZl9pdGVyX251bV9uZXcoKSBlbWl0cyB0aGUgZnVsbCByYW5nZSBjaGVjayAoZGlzdGFuY2UgY29tcHV0YXRpb24gYW5kIGJvdGggdGhlIC1FSU5WQUwgYW5kXG4mIzQzOyAqIC1FMkJJRyBlcnJvciBwYXRocyk7IGJwZl9pdGVyX251bV9uZXh0KCkgYW5kIGJwZl9pdGVyX251bV9kZXN0cm95KCkgYXJlIGlubGluZWQgdG9vLlxuJiM0MzsgKi9cbiYjNDM7U0VDKFwmIzM0O3Jhd190cFwmIzM0OylcbiYjNDM7X19hcmNoX3g4Nl82NFxuJiM0MztfX2FyY2hfYXJtNjRcbiYjNDM7X19zdWNjZXNzXG4mIzQzO19feGxhdGVkKFwmIzM0O3I2ID0gcjEwXCYjMzQ7KVxuJiM0MztfX3hsYXRlZChcJiMzNDtyNiAmIzQzOz0gLThcJiMzNDspXG4mIzQzO19feGxhdGVkKFwmIzM0O2NhbGwgdW5rbm93blwmIzM0OylcbiYjNDM7X194bGF0ZWQoXCYjMzQ7cjMgPSByMFwmIzM0OylcbiYjNDM7X194bGF0ZWQoXCYjMzQ7cjMgXHUwMDI2PSA2NTUzNVwmIzM0OylcbiYjNDM7X194bGF0ZWQoXCYjMzQ7cjEgPSByNlwmIzM0OylcbiYjNDM7X194bGF0ZWQoXCYjMzQ7cjIgPSAwXCYjMzQ7KVxuJiM0MzsvKiBicGZfaXRlcl9udW1fbmV3KFx1MDAyNml0LCAwLCBcdTAwM2Nub24tY29uc3RcdTAwM2UpIHdpdGggdGhlIHJhbmdlIGNoZWNrIGtlcHQgKi9cbiYjNDM7X194bGF0ZWQoXCYjMzQ7aWYgdzIgc1x1MDAzZSB3MyBnb3RvIHBjJiM0Mzs4XCYjMzQ7KVxuJiM0MztfX3hsYXRlZChcJiMzNDt3MCA9IHczXCYjMzQ7KVxuJiM0MztfX3hsYXRlZChcJiMzNDt3MCAtPSB3MlwmIzM0OylcbiYjNDM7X194bGF0ZWQoXCYjMzQ7aWYgcjAgXHUwMDNlIDB4ODAwMDAwIGdvdG8gcGMmIzQzOzhcJiMzNDspXG4mIzQzO19feGxhdGVkKFwmIzM0O3cyICYjNDM7PSAtMVwmIzM0OylcbiYjNDM7X194bGF0ZWQoXCYjMzQ7Kih1MzIgKikocjEgJiM0MzswKSA9IHIyXCYjMzQ7KVxuJiM0MztfX3hsYXRlZChcJiMzNDsqKHUzMiAqKShyMSAmIzQzOzQpID0gcjNcJiMzNDspXG4mIzQzO19feGxhdGVkKFwmIzM0O3IwID0gMFwmIzM0OylcbiYjNDM7X194bGF0ZWQoXCYjMzQ7Z290byBwYyYjNDM7NVwmIzM0OylcbiYjNDM7X194bGF0ZWQoXCYjMzQ7Kih1NjQgKikocjEgJiM0MzswKSA9IDBcJiMzNDspXG4mIzQzO19feGxhdGVkKFwmIzM0O3IwID0gLTIyXCYjMzQ7KVxuJiM0MztfX3hsYXRlZChcJiMzNDtnb3RvIHBjJiM0MzsyXCYjMzQ7KVxuJiM0MztfX3hsYXRlZChcJiMzNDsqKHU2NCAqKShyMSAmIzQzOzApID0gMFwmIzM0OylcbiYjNDM7X194bGF0ZWQoXCYjMzQ7cjAgPSAtN1wmIzM0OylcbiYjNDM7X194bGF0ZWQoXCYjMzQ7cjEgPSByNlwmIzM0OylcbiYjNDM7LyogYnBmX2l0ZXJfbnVtX25leHQoXHUwMDI2aXQpICovXG4mIzQzO19feGxhdGVkKFwmIzM0O3IwID0gKih1MzIgKikocjEgJiM0MzswKVwmIzM0OylcbiYjNDM7X194bGF0ZWQoXCYjMzQ7dzAgJiM0Mzs9IDFcJiMzNDspXG4mIzQzO19feGxhdGVkKFwmIzM0O3IyID0gKih1MzIgKikocjEgJiM0Mzs0KVwmIzM0OylcbiYjNDM7X194bGF0ZWQoXCYjMzQ7aWYgdzAgc1x1MDAzZT0gdzIgZ290byBwYyYjNDM7M1wmIzM0OylcbiYjNDM7X194bGF0ZWQoXCYjMzQ7Kih1MzIgKikocjEgJiM0MzswKSA9IHIwXCYjMzQ7KVxuJiM0MztfX3hsYXRlZChcJiMzNDtyMCA9IHIxXCYjMzQ7KVxuJiM0MztfX3hsYXRlZChcJiMzNDtnb3RvIHBjJiM0MzsyXCYjMzQ7KVxuJiM0MztfX3hsYXRlZChcJiMzNDsqKHU2NCAqKShyMSAmIzQzOzApID0gMFwmIzM0OylcbiYjNDM7X194bGF0ZWQoXCYjMzQ7cjAgPSAwXCYjMzQ7KVxuJiM0MztfX3hsYXRlZChcJiMzNDtpZiByMCAhPSAweDAgZ290byBwYy0xMVwmIzM0OylcbiYjNDM7X194bGF0ZWQoXCYjMzQ7cjEgPSByNlwmIzM0OylcbiYjNDM7LyogYnBmX2l0ZXJfbnVtX2Rlc3Ryb3koXHUwMDI2aXQpIGlzIGlubGluZWQgdG8gYSBub3AgKi9cbiYjNDM7X194bGF0ZWQoXCYjMzQ7Z290byBwYyYjNDM7MFwmIzM0OylcbiYjNDM7X194bGF0ZWQoXCYjMzQ7cjAgPSAwXCYjMzQ7KVxuJiM0MztfX3hsYXRlZChcJiMzNDtleGl0XCYjMzQ7KVxuJiM0MztpbnQgX19uYWtlZCBpdGVyX251bV9uZXdfaW5saW5lZCh2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0YXNtIHZvbGF0aWxlIChcbiYjNDM7XHRcdC8qIHI2IHBvaW50cyB0byBzdHJ1Y3QgYnBmX2l0ZXJfbnVtIG9uIHRoZSBzdGFjayAqL1xuJiM0MztcdFx0XCYjMzQ7cjYgPSByMTA7XCYjMzQ7XG4mIzQzO1x0XHRcJiMzNDtyNiAmIzQzOz0gLTg7XCYjMzQ7XG4mIzQzO1x0XHQvKiBub24tY29uc3RhbnQgZW5kIHNvIHRoZSByYW5nZSBjaGVja3MgYXJlIGtlcHQgKi9cbiYjNDM7XHRcdFwmIzM0O2NhbGwgJVticGZfZ2V0X3ByYW5kb21fdTMyXTtcJiMzNDtcbiYjNDM7XHRcdFwmIzM0O3IzID0gcjA7XCYjMzQ7XG4mIzQzO1x0XHRcJiMzNDtyMyBcdTAwMjY9IDB4ZmZmZjtcJiMzNDtcbiYjNDM7XHRcdFwmIzM0O3IxID0gcjY7XCYjMzQ7XG4mIzQzO1x0XHRcJiMzNDtyMiA9IDA7XCYjMzQ7XG4mIzQzO1x0XHRcJiMzNDtjYWxsICVbYnBmX2l0ZXJfbnVtX25ld107XCYjMzQ7XG4mIzQzO1x0XCYjMzQ7MTpcJiMzNDtcbiYjNDM7XHRcdFwmIzM0O3IxID0gcjY7XCYjMzQ7XG4mIzQzO1x0XHRcJiMzNDtjYWxsICVbYnBmX2l0ZXJfbnVtX25leHRdO1wmIzM0O1xuJiM0MztcdFx0XCYjMzQ7aWYgcjAgIT0gMCBnb3RvIDFiO1wmIzM0O1xuJiM0MztcdFx0XCYjMzQ7cjEgPSByNjtcJiMzNDtcbiYjNDM7XHRcdFwmIzM0O2NhbGwgJVticGZfaXRlcl9udW1fZGVzdHJveV07XCYjMzQ7XG4mIzQzO1x0XHRcJiMzNDtyMCA9IDA7XCYjMzQ7XG4mIzQzO1x0XHRcJiMzNDtleGl0O1wmIzM0O1xuJiM0MztcdFx0OlxuJiM0MztcdFx0OiBfX2ltbShicGZfZ2V0X3ByYW5kb21fdTMyKSxcbiYjNDM7XHRcdCAgX19pbW0oYnBmX2l0ZXJfbnVtX25ldyksXG4mIzQzO1x0XHQgIF9faW1tKGJwZl9pdGVyX251bV9uZXh0KSxcbiYjNDM7XHRcdCAgX19pbW0oYnBmX2l0ZXJfbnVtX2Rlc3Ryb3kpXG4mIzQzO1x0XHQ6IF9fY2xvYmJlcl9jb21tb24sIFwmIzM0O3I2XCYjMzQ7XG4mIzQzO1x0KTtcbiYjNDM7fVxuJiM0MztcbiBTRUMoXCYjMzQ7cmF3X3RwXCYjMzQ7KVxuIF9fc3VjY2Vzc1xuIGludCBpdGVyX3doaWxlX2xvb3AoY29uc3Qgdm9pZCAqY3R4KVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDE0OjAwPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjExbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDticGZfZml4dXBfa2Z1bmNfY2FsbCYjMzQ7LAogICAgJiMzNDticGZfaXRlcl9udW1fbmV3JiMzNDssCiAgICAmIzM0O2JwZl9pdGVyX251bV9uZXh0JiMzNDssCiAgICAmIzM0O2JwZl9pdGVyX251bV9kZXN0cm95JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBCUEYgbnVtZXJpYyBpdGVyYXRvcnMgKGBicGZfaXRlcl9udW1fbmV3YCwgYGJwZl9pdGVyX251bV9uZXh0YCwgYGJwZl9pdGVyX251bV9kZXN0cm95YCkgYW5kIGFkZHMgaW5saW5pbmcgZm9yIHRoZXNlIGtmdW5jcyBpbiB0aGUgQlBGIHZlcmlmaWVyIChgYnBmX2ZpeHVwX2tmdW5jX2NhbGxgKS4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUgY29yZSBCUEYgc3Vic3lzdGVtIGFuZCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgYmU1ZGRmNjJiZTZiMTkxMzc4YzFmMDYyMGFiZDk2OThmMjI4MjIwNApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUdWUgQXVnIDQgMTQ6MDA6NDIgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL2JwZl9pdGVyLmMgYi9rZXJuZWwvYnBmL2JwZl9pdGVyLmMKaW5kZXggZjVlYWViMjQ5M2Q0YS4uMTRhNWZkZmEwNDIxNCAxMDA2NDQKLS0tIGEva2VybmVsL2JwZi9icGZfaXRlci5jCiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9icGYvYnBmX2l0ZXIuYwpAQCAtNzgyLDggJiM0Mzs3ODIsOCBAQCBfX2JwZl9rZnVuYyBpbnQgYnBmX2l0ZXJfbnVtX25ldyhzdHJ1Y3QgYnBmX2l0ZXJfbnVtICppdCwgaW50IHN0YXJ0LCBpbnQgZW5kKQogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKLQkvKiBhdm9pZCBvdmVyZmxvd3MsIGUuZy4sIGlmIHN0YXJ0ID09IElOVF9NSU4gYW5kIGVuZCA9PSBJTlRfTUFYICovCi0JaWYgKChzNjQpZW5kIC0gKHM2NClzdGFydCAmZ3Q7IEJQRl9NQVhfTE9PUFMpIHsKJiM0MzsJLyogc3RhcnQgJmx0Oz0gZW5kIGhlcmUsIHNvIGVuZCAtIHN0YXJ0IGZpdHMgaW4gYSB1MzIgd2l0aG91dCBvdmVyZmxvdyAqLwomIzQzOwlpZiAoKHUzMikoZW5kIC0gc3RhcnQpICZndDsgQlBGX01BWF9MT09QUykgewogCQlzLSZndDtjdXIgPSBzLSZndDtlbmQgPSAwOwogCQlyZXR1cm4gLUUyQklHOwogCX0KQEAgLTgwMiwxMiAmIzQzOzgwMiwxMSBAQCBfX2JwZl9rZnVuYyBpbnQgKmJwZl9pdGVyX251bV9uZXh0KHN0cnVjdCBicGZfaXRlcl9udW0qIGl0KQogewogCXN0cnVjdCBicGZfaXRlcl9udW1fa2VybiAqcyA9ICh2b2lkICopaXQ7CiAKLQkvKiBjaGVjayBmYWlsZWQgaW5pdGlhbGl6YXRpb24gb3IgaWYgd2UgYXJlIGRvbmUgKHNhbWUgYmVoYXZpb3IpOwotCSAqIG5lZWQgdG8gYmUgY2FyZWZ1bCBhYm91dCBvdmVyZmxvdywgc28gY29udmVydCB0byBzNjQgZm9yIGNoZWNrcywKLQkgKiBlLmcuLCBpZiBzLSZndDtjdXIgPT0gcy0mZ3Q7ZW5kID09IElOVF9NQVgsIHdlIGNhbiYjMzk7dCBqdXN0IGRvCi0JICogcy0mZ3Q7Y3VyICYjNDM7IDEgJmd0Oz0gcy0mZ3Q7ZW5kCiYjNDM7CS8qCiYjNDM7CSAqIHMtJmd0O2N1ciAmbHQ7IHMtJmd0O2VuZCB3aGlsZSBpdGVyYXRpbmcsIGVsc2Ugcy0mZ3Q7Y3VyID09IHMtJmd0O2VuZCA9PSAwOyB0aGUgc2lnbmVkCiYjNDM7CSAqIHMtJmd0O2N1ciAmIzQzOyAxICZndDs9IHMtJmd0O2VuZCBob2xkcyBldmVuIHdoZW4gcy0mZ3Q7Y3VyICYjNDM7IDEgd3JhcHMgKHN0YXJ0ID09IElOVF9NSU4pLgogCSAqLwotCWlmICgoczY0KShzLSZndDtjdXIgJiM0MzsgMSkgJmd0Oz0gcy0mZ3Q7ZW5kKSB7CiYjNDM7CWlmIChzLSZndDtjdXIgJiM0MzsgMSAmZ3Q7PSBzLSZndDtlbmQpIHsKIAkJcy0mZ3Q7Y3VyID0gcy0mZ3Q7ZW5kID0gMDsKIAkJcmV0dXJuIE5VTEw7CiAJfQpAQCAtODE5LDkgJiM0Mzs4MTgsNyBAQCBfX2JwZl9rZnVuYyBpbnQgKmJwZl9pdGVyX251bV9uZXh0KHN0cnVjdCBicGZfaXRlcl9udW0qIGl0KQogCiBfX2JwZl9rZnVuYyB2b2lkIGJwZl9pdGVyX251bV9kZXN0cm95KHN0cnVjdCBicGZfaXRlcl9udW0gKml0KQogewotCXN0cnVjdCBicGZfaXRlcl9udW1fa2VybiAqcyA9ICh2b2lkICopaXQ7Ci0KLQlzLSZndDtjdXIgPSBzLSZndDtlbmQgPSAwOwomIzQzOwkvKiBuby1vcCAqLwogfQogCiBfX2JwZl9rZnVuY19lbmRfZGVmcygpOwpkaWZmIC0tZ2l0IGEva2VybmVsL2JwZi92ZXJpZmllci5jIGIva2VybmVsL2JwZi92ZXJpZmllci5jCmluZGV4IGIyNzQwMDRmY2NmZDkuLjNlNDRiMDIwNTc1NmEgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9icGYvdmVyaWZpZXIuYwomIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvYnBmL3ZlcmlmaWVyLmMKQEAgLTIwMDAxLDYgJiM0MzsyMDAwMSw1MSBAQCBpbnQgYnBmX2ZpeHVwX2tmdW5jX2NhbGwoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuLAogCQlpbnNuX2J1Zls0XSA9IEJQRl9BTFU2NF9SRUcoQlBGX1NVQiwgQlBGX1JFR18wLCBCUEZfUkVHXzEpOwogCQlpbnNuX2J1Zls1XSA9IEJQRl9BTFU2NF9JTU0oQlBGX05FRywgQlBGX1JFR18wLCAwKTsKIAkJKmNudCA9IDY7CiYjNDM7CX0gZWxzZSBpZiAoZGVzYy0mZ3Q7ZnVuY19pZCA9PSBzcGVjaWFsX2tmdW5jX2xpc3RbS0ZfYnBmX2l0ZXJfbnVtX25ld10pIHsKJiM0MzsJCS8qIGlubGluZSBicGZfaXRlcl9udW1fbmV3KCZhbXA7aXQsIHN0YXJ0LCBlbmQpOyBSMT0mYW1wO2l0LCBSMj1zdGFydCwgUjM9ZW5kICovCiYjNDM7CQlpbnQgaSA9IDA7CiYjNDM7CiYjNDM7CQkvKiBpZiAoc3RhcnQgJmd0OyBlbmQpIGdvdG8gZWludmFsOyAqLwomIzQzOwkJaW5zbl9idWZbaSYjNDM7JiM0MztdID0gQlBGX0pNUDMyX1JFRyhCUEZfSlNHVCwgQlBGX1JFR18yLCBCUEZfUkVHXzMsIDgpOwomIzQzOwkJLyogcjAgPSAodTMyKWVuZCAtICh1MzIpc3RhcnQ7IGlmIChyMCAmZ3Q7IEJQRl9NQVhfTE9PUFMpIGdvdG8gZTJiaWc7ICovCiYjNDM7CQlpbnNuX2J1ZltpJiM0MzsmIzQzO10gPSBCUEZfTU9WMzJfUkVHKEJQRl9SRUdfMCwgQlBGX1JFR18zKTsKJiM0MzsJCWluc25fYnVmW2kmIzQzOyYjNDM7XSA9IEJQRl9BTFUzMl9SRUcoQlBGX1NVQiwgQlBGX1JFR18wLCBCUEZfUkVHXzIpOwomIzQzOwkJaW5zbl9idWZbaSYjNDM7JiM0MztdID0gQlBGX0pNUF9JTU0oQlBGX0pHVCwgQlBGX1JFR18wLCBCUEZfTUFYX0xPT1BTLCA4KTsKJiM0MzsJCS8qIHMtJmd0O2N1ciA9IHN0YXJ0IC0gMTsgcy0mZ3Q7ZW5kID0gZW5kOyByZXR1cm4gMDsgKi8KJiM0MzsJCWluc25fYnVmW2kmIzQzOyYjNDM7XSA9IEJQRl9BTFUzMl9JTU0oQlBGX0FERCwgQlBGX1JFR18yLCAtMSk7CiYjNDM7CQlpbnNuX2J1ZltpJiM0MzsmIzQzO10gPSBCUEZfU1RYX01FTShCUEZfVywgQlBGX1JFR18xLCBCUEZfUkVHXzIsIDApOwomIzQzOwkJaW5zbl9idWZbaSYjNDM7JiM0MztdID0gQlBGX1NUWF9NRU0oQlBGX1csIEJQRl9SRUdfMSwgQlBGX1JFR18zLCA0KTsKJiM0MzsJCWluc25fYnVmW2kmIzQzOyYjNDM7XSA9IEJQRl9NT1Y2NF9JTU0oQlBGX1JFR18wLCAwKTsKJiM0MzsJCWluc25fYnVmW2kmIzQzOyYjNDM7XSA9IEJQRl9KTVBfQSg1KTsKJiM0MzsJCS8qIGVpbnZhbDogcy0mZ3Q7Y3VyID0gcy0mZ3Q7ZW5kID0gMDsgcmV0dXJuIC1FSU5WQUw7ICovCiYjNDM7CQlpbnNuX2J1ZltpJiM0MzsmIzQzO10gPSBCUEZfU1RfTUVNKEJQRl9EVywgQlBGX1JFR18xLCAwLCAwKTsKJiM0MzsJCWluc25fYnVmW2kmIzQzOyYjNDM7XSA9IEJQRl9NT1Y2NF9JTU0oQlBGX1JFR18wLCAtRUlOVkFMKTsKJiM0MzsJCWluc25fYnVmW2kmIzQzOyYjNDM7XSA9IEJQRl9KTVBfQSgyKTsKJiM0MzsJCS8qIGUyYmlnOiBzLSZndDtjdXIgPSBzLSZndDtlbmQgPSAwOyByZXR1cm4gLUUyQklHOyAqLwomIzQzOwkJaW5zbl9idWZbaSYjNDM7JiM0MztdID0gQlBGX1NUX01FTShCUEZfRFcsIEJQRl9SRUdfMSwgMCwgMCk7CiYjNDM7CQlpbnNuX2J1ZltpJiM0MzsmIzQzO10gPSBCUEZfTU9WNjRfSU1NKEJQRl9SRUdfMCwgLUUyQklHKTsKJiM0MzsJCSpjbnQgPSBpOwomIzQzOwl9IGVsc2UgaWYgKGRlc2MtJmd0O2Z1bmNfaWQgPT0gc3BlY2lhbF9rZnVuY19saXN0W0tGX2JwZl9pdGVyX251bV9uZXh0XSkgewomIzQzOwkJLyogaW5saW5lIGJwZl9pdGVyX251bV9uZXh0KCZhbXA7aXQpOyBSMT0mYW1wO2l0LCByZXR1cm5zICZhbXA7cy0mZ3Q7Y3VyIG9yIE5VTEwgKi8KJiM0MzsJCWludCBpID0gMDsKJiM0MzsKJiM0MzsJCS8qIHIwID0gcy0mZ3Q7Y3VyICYjNDM7IDE7IGlmICgoczMyKXIwICZndDs9IHMtJmd0O2VuZCkgZ290byBkb25lOyAqLwomIzQzOwkJaW5zbl9idWZbaSYjNDM7JiM0MztdID0gQlBGX0xEWF9NRU0oQlBGX1csIEJQRl9SRUdfMCwgQlBGX1JFR18xLCAwKTsKJiM0MzsJCWluc25fYnVmW2kmIzQzOyYjNDM7XSA9IEJQRl9BTFUzMl9JTU0oQlBGX0FERCwgQlBGX1JFR18wLCAxKTsKJiM0MzsJCWluc25fYnVmW2kmIzQzOyYjNDM7XSA9IEJQRl9MRFhfTUVNKEJQRl9XLCBCUEZfUkVHXzIsIEJQRl9SRUdfMSwgNCk7CiYjNDM7CQlpbnNuX2J1ZltpJiM0MzsmIzQzO10gPSBCUEZfSk1QMzJfUkVHKEJQRl9KU0dFLCBCUEZfUkVHXzAsIEJQRl9SRUdfMiwgMyk7CiYjNDM7CQkvKiBzLSZndDtjdXIgPSByMDsgcmV0dXJuICZhbXA7cy0mZ3Q7Y3VyOyAqLwomIzQzOwkJaW5zbl9idWZbaSYjNDM7JiM0MztdID0gQlBGX1NUWF9NRU0oQlBGX1csIEJQRl9SRUdfMSwgQlBGX1JFR18wLCAwKTsKJiM0MzsJCWluc25fYnVmW2kmIzQzOyYjNDM7XSA9IEJQRl9NT1Y2NF9SRUcoQlBGX1JFR18wLCBCUEZfUkVHXzEpOwomIzQzOwkJaW5zbl9idWZbaSYjNDM7JiM0MztdID0gQlBGX0pNUF9BKDIpOwomIzQzOwkJLyogZG9uZTogcy0mZ3Q7Y3VyID0gcy0mZ3Q7ZW5kID0gMDsgcmV0dXJuIE5VTEw7ICovCiYjNDM7CQlpbnNuX2J1ZltpJiM0MzsmIzQzO10gPSBCUEZfU1RfTUVNKEJQRl9EVywgQlBGX1JFR18xLCAwLCAwKTsKJiM0MzsJCWluc25fYnVmW2kmIzQzOyYjNDM7XSA9IEJQRl9NT1Y2NF9JTU0oQlBGX1JFR18wLCAwKTsKJiM0MzsJCSpjbnQgPSBpOwomIzQzOwl9IGVsc2UgaWYgKGRlc2MtJmd0O2Z1bmNfaWQgPT0gc3BlY2lhbF9rZnVuY19saXN0W0tGX2JwZl9pdGVyX251bV9kZXN0cm95XSkgewomIzQzOwkJLyogYnBmX2l0ZXJfbnVtX2Rlc3Ryb3koKSBpcyBhIG5vLW9wOyBlbWl0IGEgbm9wIHRvIGRyb3AgdGhlIGNhbGwgKi8KJiM0MzsJCWluc25fYnVmWzBdID0gQlBGX0pNUF9BKDApOwomIzQzOwkJKmNudCA9IDE7CiAJfQogCiAJaWYgKGVudi0mZ3Q7aW5zbl9hdXhfZGF0YVtpbnNuX2lkeF0uYXJnX3Byb2cpIHsKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9NYWtlZmlsZSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9NYWtlZmlsZQppbmRleCA1NWQzOTQ0Mzg3MDVhLi4zMTc0YzJmMThlNzE1IDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvTWFrZWZpbGUKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL01ha2VmaWxlCkBAIC05NjUsNiAmIzQzOzk2NSw3IEBAICQoT1VUUFVUKS9iZW5jaF9yaW5nYnVmcy5vOiAkKE9VVFBVVCkvcmluZ2J1Zl9iZW5jaC5za2VsLmggXAogCQkJICAgICQoT1VUUFVUKS9wZXJmYnVmX2JlbmNoLnNrZWwuaAogJChPVVRQVVQpL2JlbmNoX2Jsb29tX2ZpbHRlcl9tYXAubzogJChPVVRQVVQpL2Jsb29tX2ZpbHRlcl9iZW5jaC5za2VsLmgKICQoT1VUUFVUKS9iZW5jaF9icGZfbG9vcC5vOiAkKE9VVFBVVCkvYnBmX2xvb3BfYmVuY2guc2tlbC5oCiYjNDM7JChPVVRQVVQpL2JlbmNoX2JwZl9mb3IubzogJChPVVRQVVQpL2JwZl9mb3JfYmVuY2guc2tlbC5oCiAkKE9VVFBVVCkvYmVuY2hfc3RybmNtcC5vOiAkKE9VVFBVVCkvc3RybmNtcF9iZW5jaC5za2VsLmgKICQoT1VUUFVUKS9iZW5jaF9icGZfaGFzaG1hcF9mdWxsX3VwZGF0ZS5vOiAkKE9VVFBVVCkvYnBmX2hhc2htYXBfZnVsbF91cGRhdGVfYmVuY2guc2tlbC5oCiAkKE9VVFBVVCkvYmVuY2hfbG9jYWxfc3RvcmFnZS5vOiAkKE9VVFBVVCkvbG9jYWxfc3RvcmFnZV9iZW5jaC5za2VsLmgKQEAgLTk5MCw2ICYjNDM7OTkxLDcgQEAgJChPVVRQVVQpL2JlbmNoOiAkKE9VVFBVVCkvYmVuY2gubyBcCiAJCSAkKE9VVFBVVCkvYmVuY2hfcmluZ2J1ZnMubyBcCiAJCSAkKE9VVFBVVCkvYmVuY2hfYmxvb21fZmlsdGVyX21hcC5vIFwKIAkJICQoT1VUUFVUKS9iZW5jaF9icGZfbG9vcC5vIFwKJiM0MzsJCSAkKE9VVFBVVCkvYmVuY2hfYnBmX2Zvci5vIFwKIAkJICQoT1VUUFVUKS9iZW5jaF9zdHJuY21wLm8gXAogCQkgJChPVVRQVVQpL2JlbmNoX2JwZl9oYXNobWFwX2Z1bGxfdXBkYXRlLm8gXAogCQkgJChPVVRQVVQpL2JlbmNoX2xvY2FsX3N0b3JhZ2UubyBcCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYmVuY2guYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9iZW5jaC5jCmluZGV4IDNkOWQyY2Q3NzY0YmQuLmI4NmI3MzQ1NmQzY2EgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9iZW5jaC5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9iZW5jaC5jCkBAIC0yNzYsNiAmIzQzOzI3Niw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYXJncF9vcHRpb24gb3B0c1tdID0gewogZXh0ZXJuIHN0cnVjdCBhcmdwIGJlbmNoX3JpbmdidWZzX2FyZ3A7CiBleHRlcm4gc3RydWN0IGFyZ3AgYmVuY2hfYmxvb21fbWFwX2FyZ3A7CiBleHRlcm4gc3RydWN0IGFyZ3AgYmVuY2hfYnBmX2xvb3BfYXJncDsKJiM0MztleHRlcm4gc3RydWN0IGFyZ3AgYmVuY2hfYnBmX2Zvcl9hcmdwOwogZXh0ZXJuIHN0cnVjdCBhcmdwIGJlbmNoX2xvY2FsX3N0b3JhZ2VfYXJncDsKIGV4dGVybiBzdHJ1Y3QgYXJncCBiZW5jaF9sb2NhbF9zdG9yYWdlX3JjdV90YXNrc190cmFjZV9hcmdwOwogZXh0ZXJuIHN0cnVjdCBhcmdwIGJlbmNoX3N0cm5jbXBfYXJncDsKQEAgLTI5Miw2ICYjNDM7MjkzLDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBhcmdwX2NoaWxkIGJlbmNoX3BhcnNlcnNbXSA9IHsKIAl7ICZhbXA7YmVuY2hfcmluZ2J1ZnNfYXJncCwgMCwgJiMzNDtSaW5nIGJ1ZmZlcnMgYmVuY2htYXJrJiMzNDssIDAgfSwKIAl7ICZhbXA7YmVuY2hfYmxvb21fbWFwX2FyZ3AsIDAsICYjMzQ7Qmxvb20gZmlsdGVyIG1hcCBiZW5jaG1hcmsmIzM0OywgMCB9LAogCXsgJmFtcDtiZW5jaF9icGZfbG9vcF9hcmdwLCAwLCAmIzM0O2JwZl9sb29wIGhlbHBlciBiZW5jaG1hcmsmIzM0OywgMCB9LAomIzQzOwl7ICZhbXA7YmVuY2hfYnBmX2Zvcl9hcmdwLCAwLCAmIzM0O2JwZl9mb3IgbG9vcCBiZW5jaG1hcmsmIzM0OywgMCB9LAogCXsgJmFtcDtiZW5jaF9sb2NhbF9zdG9yYWdlX2FyZ3AsIDAsICYjMzQ7bG9jYWxfc3RvcmFnZSBiZW5jaG1hcmsmIzM0OywgMCB9LAogCXsgJmFtcDtiZW5jaF9zdHJuY21wX2FyZ3AsIDAsICYjMzQ7YnBmX3N0cm5jbXAgaGVscGVyIGJlbmNobWFyayYjMzQ7LCAwIH0sCiAJeyAmYW1wO2JlbmNoX2xvY2FsX3N0b3JhZ2VfcmN1X3Rhc2tzX3RyYWNlX2FyZ3AsIDAsCkBAIC01NTcsNiAmIzQzOzU1OSw3IEBAIGV4dGVybiBjb25zdCBzdHJ1Y3QgYmVuY2ggYmVuY2hfYmxvb21fZmFsc2VfcG9zaXRpdmU7CiBleHRlcm4gY29uc3Qgc3RydWN0IGJlbmNoIGJlbmNoX2hhc2htYXBfd2l0aG91dF9ibG9vbTsKIGV4dGVybiBjb25zdCBzdHJ1Y3QgYmVuY2ggYmVuY2hfaGFzaG1hcF93aXRoX2Jsb29tOwogZXh0ZXJuIGNvbnN0IHN0cnVjdCBiZW5jaCBiZW5jaF9icGZfbG9vcDsKJiM0MztleHRlcm4gY29uc3Qgc3RydWN0IGJlbmNoIGJlbmNoX2JwZl9mb3I7CiBleHRlcm4gY29uc3Qgc3RydWN0IGJlbmNoIGJlbmNoX3N0cm5jbXBfbm9faGVscGVyOwogZXh0ZXJuIGNvbnN0IHN0cnVjdCBiZW5jaCBiZW5jaF9zdHJuY21wX2hlbHBlcjsKIGV4dGVybiBjb25zdCBzdHJ1Y3QgYmVuY2ggYmVuY2hfYnBmX2hhc2htYXBfZnVsbF91cGRhdGU7CkBAIC02NDAsNiAmIzQzOzY0Myw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYmVuY2ggKmJlbmNoc1tdID0gewogCSZhbXA7YmVuY2hfaGFzaG1hcF93aXRob3V0X2Jsb29tLAogCSZhbXA7YmVuY2hfaGFzaG1hcF93aXRoX2Jsb29tLAogCSZhbXA7YmVuY2hfYnBmX2xvb3AsCiYjNDM7CSZhbXA7YmVuY2hfYnBmX2ZvciwKIAkmYW1wO2JlbmNoX3N0cm5jbXBfbm9faGVscGVyLAogCSZhbXA7YmVuY2hfc3RybmNtcF9oZWxwZXIsCiAJJmFtcDtiZW5jaF9icGZfaGFzaG1hcF9mdWxsX3VwZGF0ZSwKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9iZW5jaHMvYmVuY2hfYnBmX2Zvci5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JlbmNocy9iZW5jaF9icGZfZm9yLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMC4uNzMwYzUxYWQyZGVjMwotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9iZW5jaHMvYmVuY2hfYnBmX2Zvci5jCkBAIC0wLDAgJiM0MzsxLDEwNCBAQAomIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCiYjNDM7LyogQ29weXJpZ2h0IChjKSAyMDI2IE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLiAqLwomIzQzOwomIzQzOyNpbmNsdWRlICZsdDthcmdwLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJiMzNDtiZW5jaC5oJiMzNDsKJiM0MzsjaW5jbHVkZSAmIzM0O2JwZl9mb3JfYmVuY2guc2tlbC5oJiMzNDsKJiM0MzsKJiM0MzsvKiBCUEYgdHJpZ2dlcmluZyBiZW5jaG1hcmtzICovCiYjNDM7c3RhdGljIHN0cnVjdCBjdHggewomIzQzOwlzdHJ1Y3QgYnBmX2Zvcl9iZW5jaCAqc2tlbDsKJiM0Mzt9IGN0eDsKJiM0MzsKJiM0MztzdGF0aWMgc3RydWN0IHsKJiM0MzsJX191MzIgbnJfbG9vcHM7CiYjNDM7fSBhcmdzID0gewomIzQzOwkvKgomIzQzOwkgKiBEZWZhdWx0IHRvIGEgbGFyZ2UgbG9vcCBjb3VudCBzbyB0aGUgcGVyLWl0ZXJhdGlvbiBicGZfaXRlcl9udW1fbmV4dCgpIGNvc3QgZG9taW5hdGVzCiYjNDM7CSAqIHRoZSBvbmUtdGltZSBicGZfaXRlcl9udW1fbmV3KCkvZGVzdHJveSgpIHNldHVwIGFuZCB0ZWFyZG93bi4KJiM0MzsJICovCiYjNDM7CS5ucl9sb29wcyA9IDEwMDAsCiYjNDM7fTsKJiM0MzsKJiM0MztlbnVtIHsKJiM0MzsJQVJHX05SX0xPT1BTID0gNDAwMCwKJiM0Mzt9OwomIzQzOwomIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3QgYXJncF9vcHRpb24gb3B0c1tdID0gewomIzQzOwl7ICYjMzQ7bnJfbG9vcHMmIzM0OywgQVJHX05SX0xPT1BTLCAmIzM0O25yX2xvb3BzJiMzNDssIDAsCiYjNDM7CQkmIzM0O1NldCBudW1iZXIgb2YgaXRlcmF0aW9ucyBmb3IgdGhlIGJwZl9mb3IoKSBsb29wJiMzNDt9LAomIzQzOwl7fSwKJiM0Mzt9OwomIzQzOwomIzQzO3N0YXRpYyBlcnJvcl90IHBhcnNlX2FyZyhpbnQga2V5LCBjaGFyICphcmcsIHN0cnVjdCBhcmdwX3N0YXRlICpzdGF0ZSkKJiM0Mzt7CiYjNDM7CXN3aXRjaCAoa2V5KSB7CiYjNDM7CWNhc2UgQVJHX05SX0xPT1BTOgomIzQzOwkJYXJncy5ucl9sb29wcyA9IHN0cnRvbChhcmcsIE5VTEwsIDEwKTsKJiM0MzsJCWJyZWFrOwomIzQzOwlkZWZhdWx0OgomIzQzOwkJcmV0dXJuIEFSR1BfRVJSX1VOS05PV047CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzOy8qIGV4cG9ydGVkIGludG8gYmVuY2htYXJrIHJ1bm5lciAqLwomIzQzO2NvbnN0IHN0cnVjdCBhcmdwIGJlbmNoX2JwZl9mb3JfYXJncCA9IHsKJiM0MzsJLm9wdGlvbnMgPSBvcHRzLAomIzQzOwkucGFyc2VyID0gcGFyc2VfYXJnLAomIzQzO307CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgdmFsaWRhdGUodm9pZCkKJiM0Mzt7CiYjNDM7CWlmIChlbnYuY29uc3VtZXJfY250ICE9IDApIHsKJiM0MzsJCWZwcmludGYoc3RkZXJyLCAmIzM0O2JlbmNobWFyayBkb2VzbiYjMzk7dCBzdXBwb3J0IGNvbnN1bWVyIVxuJiMzNDspOwomIzQzOwkJZXhpdCgxKTsKJiM0MzsJfQomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCAqcHJvZHVjZXIodm9pZCAqaW5wdXQpCiYjNDM7ewomIzQzOwl3aGlsZSAodHJ1ZSkKJiM0MzsJCS8qIHRyaWdnZXIgdGhlIGJwZiBwcm9ncmFtICovCiYjNDM7CQlzeXNjYWxsKF9fTlJfZ2V0cGdpZCk7CiYjNDM7CiYjNDM7CXJldHVybiBOVUxMOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBtZWFzdXJlKHN0cnVjdCBiZW5jaF9yZXMgKnJlcykKJiM0Mzt7CiYjNDM7CXJlcy0mZ3Q7aGl0cyA9IGF0b21pY19zd2FwKCZhbXA7Y3R4LnNrZWwtJmd0O2Jzcy0mZ3Q7aGl0cywgMCk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIHNldHVwKHZvaWQpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgYnBmX2xpbmsgKmxpbms7CiYjNDM7CiYjNDM7CXNldHVwX2xpYmJwZigpOwomIzQzOwomIzQzOwljdHguc2tlbCA9IGJwZl9mb3JfYmVuY2hfX29wZW5fYW5kX2xvYWQoKTsKJiM0MzsJaWYgKCFjdHguc2tlbCkgewomIzQzOwkJZnByaW50ZihzdGRlcnIsICYjMzQ7ZmFpbGVkIHRvIG9wZW4gc2tlbGV0b25cbiYjMzQ7KTsKJiM0MzsJCWV4aXQoMSk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJbGluayA9IGJwZl9wcm9ncmFtX19hdHRhY2goY3R4LnNrZWwtJmd0O3Byb2dzLmJlbmNobWFyayk7CiYjNDM7CWlmICghbGluaykgewomIzQzOwkJZnByaW50ZihzdGRlcnIsICYjMzQ7ZmFpbGVkIHRvIGF0dGFjaCBwcm9ncmFtIVxuJiMzNDspOwomIzQzOwkJZXhpdCgxKTsKJiM0MzsJfQomIzQzOwomIzQzOwljdHguc2tlbC0mZ3Q7YnNzLSZndDtucl9sb29wcyA9IGFyZ3MubnJfbG9vcHM7CiYjNDM7fQomIzQzOwomIzQzO2NvbnN0IHN0cnVjdCBiZW5jaCBiZW5jaF9icGZfZm9yID0gewomIzQzOwkubmFtZSA9ICYjMzQ7YnBmLWZvciYjMzQ7LAomIzQzOwkuYXJncCA9ICZhbXA7YmVuY2hfYnBmX2Zvcl9hcmdwLAomIzQzOwkudmFsaWRhdGUgPSB2YWxpZGF0ZSwKJiM0MzsJLnNldHVwID0gc2V0dXAsCiYjNDM7CS5wcm9kdWNlcl90aHJlYWQgPSBwcm9kdWNlciwKJiM0MzsJLm1lYXN1cmUgPSBtZWFzdXJlLAomIzQzOwkucmVwb3J0X3Byb2dyZXNzID0gb3BzX3JlcG9ydF9wcm9ncmVzcywKJiM0MzsJLnJlcG9ydF9maW5hbCA9IG9wc19yZXBvcnRfZmluYWwsCiYjNDM7fTsKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9iZW5jaHMvcnVuX2JlbmNoX2JwZl9mb3Iuc2ggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYmVuY2hzL3J1bl9iZW5jaF9icGZfZm9yLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAwMDAwMDAuLjdkYTY0NTM5MjBkYWIKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYmVuY2hzL3J1bl9iZW5jaF9icGZfZm9yLnNoCkBAIC0wLDAgJiM0MzsxLDE1IEBACiYjNDM7IyEvYmluL2Jhc2gKJiM0MzsjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCiYjNDM7CiYjNDM7c291cmNlIC4vYmVuY2hzL3J1bl9jb21tb24uc2gKJiM0MzsKJiM0MztzZXQgLWV1Zm8gcGlwZWZhaWwKJiM0MzsKJiM0Mztmb3IgdCBpbiAxIDQgOCAxMiAxNjsgZG8KJiM0Mztmb3IgaSBpbiAxMCAxMDAgNTAwIDEwMDAgNTAwMCAxMDAwMCA1MDAwMCAxMDAwMDAgNTAwMDAwIDEwMDAwMDA7IGRvCiYjNDM7c3VidGl0bGUgJiMzNDtucl9sb29wczogJGksIG5yX3RocmVhZHM6ICR0JiMzNDsKJiM0MzsJc3VtbWFyaXplX29wcyAmIzM0O2JwZl9mb3I6ICYjMzQ7IFwKJiM0MzsJICAgICYjMzQ7JCgkUlVOX0JFTkNIIC1wICR0IC0tbnJfbG9vcHMgJGkgYnBmLWZvcikmIzM0OwomIzQzOwlwcmludGYgJiMzNDtcbiYjMzQ7CiYjNDM7ZG9uZQomIzQzO2RvbmUKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9icGZfZm9yX2JlbmNoLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYnBmX2Zvcl9iZW5jaC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAuLmY5YzcyMzA1MWZjNzQKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYnBmX2Zvcl9iZW5jaC5jCkBAIC0wLDAgJiM0MzsxLDMyIEBACiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKJiM0MzsvKiBDb3B5cmlnaHQgKGMpIDIwMjYgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuICovCiYjNDM7CiYjNDM7I2luY2x1ZGUgJiMzNDt2bWxpbnV4LmgmIzM0OwomIzQzOyNpbmNsdWRlICZsdDticGYvYnBmX2hlbHBlcnMuaCZndDsKJiM0MzsjaW5jbHVkZSAmIzM0O2JwZl9taXNjLmgmIzM0OwomIzQzOwomIzQzO2NoYXIgX2xpY2Vuc2VbXSBTRUMoJiMzNDtsaWNlbnNlJiMzNDspID0gJiMzNDtHUEwmIzM0OzsKJiM0MzsKJiM0MztpbnQgbnJfbG9vcHM7CiYjNDM7bG9uZyBoaXRzOwomIzQzOwomIzQzO3N0YXRpYyBpbnQgb3V0ZXJfbG9vcChfX3UzMiBpbmRleCwgdm9pZCAqZGF0YSkKJiM0Mzt7CiYjNDM7CWludCBpOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBFbXB0eSBib2R5OiB0aGUgd29yayBiZWluZyBtZWFzdXJlZCBpcyB0aGUgb3Blbi1jb2RlZCBudW1lcmljIGl0ZXJhdG9yIGl0c2VsZgomIzQzOwkgKiAoYnBmX2l0ZXJfbnVtX25ldy9uZXh0L2Rlc3Ryb3kgYmVoaW5kIGJwZl9mb3IoKSkuCiYjNDM7CSAqLwomIzQzOwlicGZfZm9yKGksIDAsIG5yX2xvb3BzKQomIzQzOwkJOwomIzQzOwlfX3N5bmNfYWRkX2FuZF9mZXRjaCgmYW1wO2hpdHMsIG5yX2xvb3BzKTsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO1NFQygmIzM0O2ZlbnRyeS8mIzM0OyBTWVNfUFJFRklYICYjMzQ7c3lzX2dldHBnaWQmIzM0OykKJiM0MztpbnQgYmVuY2htYXJrKHZvaWQgKmN0eCkKJiM0Mzt7CiYjNDM7CWJwZl9sb29wKDEwMDAsIG91dGVyX2xvb3AsIE5VTEwsIDApOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvaXRlcnMuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9pdGVycy5jCmluZGV4IDBmYTcwYjEzM2Q5MzIuLjYyZDdkZjllODBiZWIgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9pdGVycy5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9pdGVycy5jCkBAIC04OCw2ICYjNDM7ODgsODkgQEAgaW50IGl0ZXJfZXJyX3Vuc2FmZV9hc21fbG9vcChjb25zdCB2b2lkICpjdHgpCiAJcmV0dXJuIDA7CiB9CiAKJiM0MzsvKgomIzQzOyAqIE5ha2VkIGZ1bmN0aW9uLCBzbyB0aGVyZSBpcyBubyBjb21waWxlci1nZW5lcmF0ZWQgZ2x1ZSBhbmQgdGhlIHdob2xlIGlubGluZWQgcHJvZ3JhbSBjYW4gYmUKJiM0MzsgKiBtYXRjaGVkLiBQaW5uZWQgdG8gYXJjaGVzIHdob3NlIEpJVHMgemVyby1leHRlbmQgMzItYml0IHdyaXRlcyBpbXBsaWNpdGx5CiYjNDM7ICogKGJwZl9qaXRfbmVlZHNfemV4dCgpID09IGZhbHNlKTsgb24gYXJjaGVzIHRoYXQgbmVlZCBleHBsaWNpdCB6ZXJvLWV4dGVuc2lvbiB0aGUgdmVyaWZpZXIKJiM0MzsgKiBpbnRlcmxlYXZlcyAmIzM0O3dOID0gd04mIzM0OyBpbnNucyBhbmQgdGhlIGZpeGVkIHNoYXBlIGJlbG93IHdvdWxkIG5vdCBtYXRjaC4gVGhlIGlubGluaW5nIGl0c2VsZiBpcwomIzQzOyAqIGFyY2ggaW5kZXBlbmRlbnQsIHNvIGNoZWNraW5nIGl0IG9uIHRoZXNlIGFyY2hlcyBpcyBzdWZmaWNpZW50LgomIzQzOyAqCiYjNDM7ICogYnBmX2l0ZXJfbnVtX25ldygpIGVtaXRzIHRoZSBmdWxsIHJhbmdlIGNoZWNrIChkaXN0YW5jZSBjb21wdXRhdGlvbiBhbmQgYm90aCB0aGUgLUVJTlZBTCBhbmQKJiM0MzsgKiAtRTJCSUcgZXJyb3IgcGF0aHMpOyBicGZfaXRlcl9udW1fbmV4dCgpIGFuZCBicGZfaXRlcl9udW1fZGVzdHJveSgpIGFyZSBpbmxpbmVkIHRvby4KJiM0MzsgKi8KJiM0MztTRUMoJiMzNDtyYXdfdHAmIzM0OykKJiM0MztfX2FyY2hfeDg2XzY0CiYjNDM7X19hcmNoX2FybTY0CiYjNDM7X19zdWNjZXNzCiYjNDM7X194bGF0ZWQoJiMzNDtyNiA9IHIxMCYjMzQ7KQomIzQzO19feGxhdGVkKCYjMzQ7cjYgJiM0Mzs9IC04JiMzNDspCiYjNDM7X194bGF0ZWQoJiMzNDtjYWxsIHVua25vd24mIzM0OykKJiM0MztfX3hsYXRlZCgmIzM0O3IzID0gcjAmIzM0OykKJiM0MztfX3hsYXRlZCgmIzM0O3IzICZhbXA7PSA2NTUzNSYjMzQ7KQomIzQzO19feGxhdGVkKCYjMzQ7cjEgPSByNiYjMzQ7KQomIzQzO19feGxhdGVkKCYjMzQ7cjIgPSAwJiMzNDspCiYjNDM7LyogYnBmX2l0ZXJfbnVtX25ldygmYW1wO2l0LCAwLCAmbHQ7bm9uLWNvbnN0Jmd0Oykgd2l0aCB0aGUgcmFuZ2UgY2hlY2sga2VwdCAqLwomIzQzO19feGxhdGVkKCYjMzQ7aWYgdzIgcyZndDsgdzMgZ290byBwYyYjNDM7OCYjMzQ7KQomIzQzO19feGxhdGVkKCYjMzQ7dzAgPSB3MyYjMzQ7KQomIzQzO19feGxhdGVkKCYjMzQ7dzAgLT0gdzImIzM0OykKJiM0MztfX3hsYXRlZCgmIzM0O2lmIHIwICZndDsgMHg4MDAwMDAgZ290byBwYyYjNDM7OCYjMzQ7KQomIzQzO19feGxhdGVkKCYjMzQ7dzIgJiM0Mzs9IC0xJiMzNDspCiYjNDM7X194bGF0ZWQoJiMzNDsqKHUzMiAqKShyMSAmIzQzOzApID0gcjImIzM0OykKJiM0MztfX3hsYXRlZCgmIzM0OyoodTMyICopKHIxICYjNDM7NCkgPSByMyYjMzQ7KQomIzQzO19feGxhdGVkKCYjMzQ7cjAgPSAwJiMzNDspCiYjNDM7X194bGF0ZWQoJiMzNDtnb3RvIHBjJiM0Mzs1JiMzNDspCiYjNDM7X194bGF0ZWQoJiMzNDsqKHU2NCAqKShyMSAmIzQzOzApID0gMCYjMzQ7KQomIzQzO19feGxhdGVkKCYjMzQ7cjAgPSAtMjImIzM0OykKJiM0MztfX3hsYXRlZCgmIzM0O2dvdG8gcGMmIzQzOzImIzM0OykKJiM0MztfX3hsYXRlZCgmIzM0OyoodTY0ICopKHIxICYjNDM7MCkgPSAwJiMzNDspCiYjNDM7X194bGF0ZWQoJiMzNDtyMCA9IC03JiMzNDspCiYjNDM7X194bGF0ZWQoJiMzNDtyMSA9IHI2JiMzNDspCiYjNDM7LyogYnBmX2l0ZXJfbnVtX25leHQoJmFtcDtpdCkgKi8KJiM0MztfX3hsYXRlZCgmIzM0O3IwID0gKih1MzIgKikocjEgJiM0MzswKSYjMzQ7KQomIzQzO19feGxhdGVkKCYjMzQ7dzAgJiM0Mzs9IDEmIzM0OykKJiM0MztfX3hsYXRlZCgmIzM0O3IyID0gKih1MzIgKikocjEgJiM0Mzs0KSYjMzQ7KQomIzQzO19feGxhdGVkKCYjMzQ7aWYgdzAgcyZndDs9IHcyIGdvdG8gcGMmIzQzOzMmIzM0OykKJiM0MztfX3hsYXRlZCgmIzM0OyoodTMyICopKHIxICYjNDM7MCkgPSByMCYjMzQ7KQomIzQzO19feGxhdGVkKCYjMzQ7cjAgPSByMSYjMzQ7KQomIzQzO19feGxhdGVkKCYjMzQ7Z290byBwYyYjNDM7MiYjMzQ7KQomIzQzO19feGxhdGVkKCYjMzQ7Kih1NjQgKikocjEgJiM0MzswKSA9IDAmIzM0OykKJiM0MztfX3hsYXRlZCgmIzM0O3IwID0gMCYjMzQ7KQomIzQzO19feGxhdGVkKCYjMzQ7aWYgcjAgIT0gMHgwIGdvdG8gcGMtMTEmIzM0OykKJiM0MztfX3hsYXRlZCgmIzM0O3IxID0gcjYmIzM0OykKJiM0MzsvKiBicGZfaXRlcl9udW1fZGVzdHJveSgmYW1wO2l0KSBpcyBpbmxpbmVkIHRvIGEgbm9wICovCiYjNDM7X194bGF0ZWQoJiMzNDtnb3RvIHBjJiM0MzswJiMzNDspCiYjNDM7X194bGF0ZWQoJiMzNDtyMCA9IDAmIzM0OykKJiM0MztfX3hsYXRlZCgmIzM0O2V4aXQmIzM0OykKJiM0MztpbnQgX19uYWtlZCBpdGVyX251bV9uZXdfaW5saW5lZCh2b2lkKQomIzQzO3sKJiM0MzsJYXNtIHZvbGF0aWxlICgKJiM0MzsJCS8qIHI2IHBvaW50cyB0byBzdHJ1Y3QgYnBmX2l0ZXJfbnVtIG9uIHRoZSBzdGFjayAqLwomIzQzOwkJJiMzNDtyNiA9IHIxMDsmIzM0OwomIzQzOwkJJiMzNDtyNiAmIzQzOz0gLTg7JiMzNDsKJiM0MzsJCS8qIG5vbi1jb25zdGFudCBlbmQgc28gdGhlIHJhbmdlIGNoZWNrcyBhcmUga2VwdCAqLwomIzQzOwkJJiMzNDtjYWxsICVbYnBmX2dldF9wcmFuZG9tX3UzMl07JiMzNDsKJiM0MzsJCSYjMzQ7cjMgPSByMDsmIzM0OwomIzQzOwkJJiMzNDtyMyAmYW1wOz0gMHhmZmZmOyYjMzQ7CiYjNDM7CQkmIzM0O3IxID0gcjY7JiMzNDsKJiM0MzsJCSYjMzQ7cjIgPSAwOyYjMzQ7CiYjNDM7CQkmIzM0O2NhbGwgJVticGZfaXRlcl9udW1fbmV3XTsmIzM0OwomIzQzOwkmIzM0OzE6JiMzNDsKJiM0MzsJCSYjMzQ7cjEgPSByNjsmIzM0OwomIzQzOwkJJiMzNDtjYWxsICVbYnBmX2l0ZXJfbnVtX25leHRdOyYjMzQ7CiYjNDM7CQkmIzM0O2lmIHIwICE9IDAgZ290byAxYjsmIzM0OwomIzQzOwkJJiMzNDtyMSA9IHI2OyYjMzQ7CiYjNDM7CQkmIzM0O2NhbGwgJVticGZfaXRlcl9udW1fZGVzdHJveV07JiMzNDsKJiM0MzsJCSYjMzQ7cjAgPSAwOyYjMzQ7CiYjNDM7CQkmIzM0O2V4aXQ7JiMzNDsKJiM0MzsJCToKJiM0MzsJCTogX19pbW0oYnBmX2dldF9wcmFuZG9tX3UzMiksCiYjNDM7CQkgIF9faW1tKGJwZl9pdGVyX251bV9uZXcpLAomIzQzOwkJICBfX2ltbShicGZfaXRlcl9udW1fbmV4dCksCiYjNDM7CQkgIF9faW1tKGJwZl9pdGVyX251bV9kZXN0cm95KQomIzQzOwkJOiBfX2Nsb2JiZXJfY29tbW9uLCAmIzM0O3I2JiMzNDsKJiM0MzsJKTsKJiM0Mzt9CiYjNDM7CiBTRUMoJiMzNDtyYXdfdHAmIzM0OykKIF9fc3VjY2VzcwogaW50IGl0ZXJfd2hpbGVfbG9vcChjb25zdCB2b2lkICpjdHgpCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDE0OjAwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgyODIKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAxOTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgQlBGIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHRoYXQgdHdlYWtzIGBrZXJuZWwvYnBmL2JwZl9pdGVyLmNgIGFuZCBga2VybmVsL2JwZi92ZXJpZmllci5jYC4gSXQgbG9va3MgbGlrZSB3ZSYjMzk7cmUgY2hhbmdpbmcgdGhlIHdheSBgYnBmX2l0ZXJfbnVtX25ld2AsIGBicGZfaXRlcl9udW1fbmV4dGAsIGFuZCBgYnBmX2l0ZXJfbnVtX2Rlc3Ryb3lgIHdvcmsgd2l0aGluIHRoZSBpdGVyYXRvciBpbXBsZW1lbnRhdGlvbiwgYnV0IHNwZWNpZmljYWxseSwgaXQmIzM5O3MgYWRkaW5nIGlubGluaW5nIG9mIHRoZXNlIGZ1bmN0aW9ucyBpbnRvIHRoZSB2ZXJpZmllciB2aWEgYGJwZl9maXh1cF9rZnVuY19jYWxsYC4gVGhhdCYjMzk7cyBpbnRlcmVzdGluZzsgaW5saW5pbmcgY291bGQgaGF2ZSBwZXJmb3JtYW5jZSBpbXBsaWNhdGlvbnMsIGdvb2Qgb3IgYmFkLCBhbmQgaXQgZGVmaW5pdGVseSBjaGFuZ2VzIHRoZSBjb2RlIHBhdGggdGhlIHZlcmlmaWVyIGhhcyB0byBuYXZpZ2F0ZS4gUGx1cywgdGhlIHBhdGNoIGluY2x1ZGVzIGEgYmVuY2htYXJrIGFuZCBhIHNlbGZ0ZXN0LCB3aGljaCBpcyBncmVhdCB0byBzZWUuCgpUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gdGhlIGNvcmUgQlBGIHZlcmlmaWVyIGFuZCBpdGVyYXRvciwgbm8gZG91YnQgYWJvdXQgdGhhdC4gVGhlIGltcGFjdCBvbiBwcm9ncmFtIGJlaGF2aW9yIGNvdWxkIGJlIHNpZ25pZmljYW50LCBldmVuIGlmIHN1YnRsZS4gR2l2ZW4gdGhlIG5hdHVyZSBvZiB0aGlzIGNoYW5nZSwgYW5kIHRoZSBwb3RlbnRpYWwgZm9yIG9mZi1ieS1vbmUgZXJyb3JzIGFuZCB0aGUgbGlrZSBpbiBpdGVyYXRvcnMsIGl0JiMzOTtzIHNjcmVhbWluZyBmb3Igc29tZSBmdXp6aW5nIHRvIGVuc3VyZSB3ZSBoYXZlbiYjMzk7dCBpbnRyb2R1Y2VkIGFueSByZWdyZXNzaW9ucyBvciB2dWxuZXJhYmlsaXRpZXMuIEl0JiMzOTtzIHRpbWUgdG8gZmlyZSB1cCB0aG9zZSBmdXp6ZXJzIQoKQmVmb3JlIEkgZGl2ZSB0b28gZGVlcCBpbnRvIHRoZSBjb2RlLCBJIG5lZWQgdG8gY2hlY2sgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gQm90aCB0aGUgQlBGIGl0ZXJhdG9yIGFuZCB0aGUgdmVyaWZpZXIgYXJlIGxpa2VseSBnb3Zlcm5lZCBieSBgQ09ORklHX0JQRl9TWVNDQUxMYCwgYW5kIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhpcyBpcyBwcm9wZXJseSBlbmFibGVkIGluIGFueSByZWxldmFudCB0ZXN0IGVudmlyb25tZW50cy4gSSYjMzk7bGwgdGFrZSBhIHF1aWNrIGxvb2sgaW4gYGtlcm5lbC9icGYvTWFrZWZpbGVgIHRvIGNvbmZpcm0gdGhlIGRlcGVuZGVuY2llcyBhbmQgZmxhZ3MuIExldCYjMzk7cyBtYWtlIHN1cmUgb3VyIGJ1aWxkIGVudmlyb25tZW50IGlzIHNldHVwIGNvcnJlY3RseSBiZWZvcmUgd2UgZGl2ZSBpbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAxNDowMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDticGZfaXRlci5vJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9NYWtlZmlsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL01ha2VmaWxlPTk9b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSAmIzQzOz0gc3lzY2FsbC5vIHZlcmlmaWVyLm8gaW5vZGUubyBoZWxwZXJzLm8gdG51bS5vIGNudW0ubyBsb2cubyB0b2tlbi5vIGxpdmVuZXNzLm8gY29uc3RfZm9sZC5vXG5rZXJuZWwvYnBmL01ha2VmaWxlOjEwOm9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IGJwZl9pdGVyLm8gbWFwX2l0ZXIubyB0YXNrX2l0ZXIubyBwcm9nX2l0ZXIubyBsaW5rX2l0ZXIub1xua2VybmVsL2JwZi9NYWtlZmlsZS0xMS1vYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSBoYXNodGFiLm8gYXJyYXltYXAubyBwZXJjcHVfZnJlZWxpc3QubyBicGZfbHJ1X2xpc3QubyBscG1fdHJpZS5vIG1hcF9pbl9tYXAubyBibG9vbV9maWx0ZXIub1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDE0OjAxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDkwNTEKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAxNjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqSW5pdGlhbCBBc3Nlc3NtZW50ICZhbXA7IEZvY3VzaW5nIHRoZSBJbnZlc3RpZ2F0aW9uKioKCk9rYXksIHNvIGl0IGxvb2tzIGxpa2Ugd2UmIzM5O3JlIGdvaW5nIHRvIG5lZWQgYENPTkZJR19CUEZfU1lTQ0FMTGAgZW5hYmxlZCwgdGhhdCYjMzk7cyBzdGVwIG9uZS4gTm93LCBsZXQmIzM5O3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MgYW5kIGZpZ3VyZSBvdXQgd2hlcmUgdGhlIG1lYXQgb2YgdGhpcyBpcy4gRnJvbSB0aGUgY2hhbmdlcywgaXQgc2VlbXMgbGlrZSB3ZSBzaG91bGQgYmUgcGF5aW5nIGNsb3NlIGF0dGVudGlvbiB0byBhIGZldyBzcGVjaWZpYyBmdW5jdGlvbnMuIEkmIzM5O20gc2VlaW5nIG1vZGlmaWNhdGlvbnMgaW4gYHZlcmlmaWVyLmNgIGZvciBgYnBmX2ZpeHVwX2tmdW5jX2NhbGxgLiBUaGF0JiMzOTtzIGEgZGVmaW5pdGUgcG9pbnQgb2YgaW50ZXJlc3QsIHNvIEkmIzM5O2xsIGtlZXAgYW4gZXllIG9uIHRoYXQgb25lLiBUaGVuLCBpbiBgYnBmX2l0ZXIuY2AsIEkgc3BvdCBzb21lIGFkanVzdG1lbnRzIHRvIGBicGZfaXRlcl9udW1fbmV3YCwgYGJwZl9pdGVyX251bV9uZXh0YCwgYW5kIGBicGZfaXRlcl9udW1fZGVzdHJveWAuIFRob3NlIGFsc28gbG9vayBsaWtlIHRoZXkmIzM5O3JlIGdvaW5nIHRvIGJlIGltcG9ydGFudCB0byB1bmRlcnN0YW5kIHRoaXMgY2hhbmdlLiBCYXNlZCBvbiB0aGF0IGluZm9ybWF0aW9uLCBib3RoIGBicGZfZml4dXBfa2Z1bmNfY2FsbGAsIGBicGZfaXRlcl9udW1fbmV3YCwgYGJwZl9pdGVyX251bV9uZXh0YCwgYW5kIGBicGZfaXRlcl9udW1fZGVzdHJveWAgYXJlIGdvaW5nIHRvIGJlIG15IGZvY3VzIHBvaW50cyB0byBkaXZlIGludG8uIE5vdywgSSB3YW50IHRvIHRha2UgYSBsb29rIGFuZCBzZWUgaWYgYGJwZl9maXh1cF9rZnVuY19jYWxsYCBpcyBhIHN0YXRpYyBmdW5jdGlvbi4gVGhhdCBjb3VsZCBpbXBhY3QgaG93IHdlIGNhbiB1c2UgaXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMTQ6MDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YnBmX2ZpeHVwX2tmdW5jX2NhbGwmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvYnBmL3ZlcmlmaWVyLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi92ZXJpZmllci5jPTE5ODU4PXN0YXRpYyB2b2lkIF9fZml4dXBfY29sbGVjdGlvbl9pbnNlcnRfa2Z1bmMoc3RydWN0IGJwZl9pbnNuX2F1eF9kYXRhICppbnNuX2F1eCxcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTk4NzQtXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTk4NzU6aW50IGJwZl9maXh1cF9rZnVuY19jYWxsKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfaW5zbiAqaW5zbixcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xOTg3Ni1cdFx0ICAgICBzdHJ1Y3QgYnBmX2luc24gKmluc25fYnVmLCBpbnQgaW5zbl9pZHgsIGludCAqY250KVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDE0OjAxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk3MDEKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAyMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBzdW1tYXJpemVkIHRob3VnaHQgcHJvY2VzcywgcHJlc2VudGVkIGFzIGlmIEkgd2VyZSB0aGlua2luZyBpdDoKCioqRXZvbHZpbmcgU2l0dWF0aW9uIEFzc2Vzc21lbnQqKgoKVGhpcyBzaXR1YXRpb24gaXNuJiMzOTt0IGZpeGVkOyBpdCYjMzk7cyBkeW5hbWljLiBXZSBuZWVkIHRvIGJlIGNoZWNraW5nIGZvciBtb3ZlbWVudCBhbmQgdXBkYXRlcy4gV2UgY2Fubm90IGFzc3VtZSB0aGF0IGl0IGlzIHN0YXRpYy4gTXkgaW5zdGluY3QgaXMgdGhhdCB0aGVyZSBpcyBhIGtleSBlbGVtZW50IHRoYXQgY2FuIGlsbHVtaW5hdGUgdGhpcyBkeW5hbWljIGNoYXJhY3RlcmlzdGljLiBJIHNob3VsZCByZWFsbHkgY2hlY2sgYGJwZl9pdGVyX251bV9uZXdgLiBUaGlzIHdpbGwgb2ZmZXIgYSBjbGVhciBzdGFydGluZyBwb2ludCBmb3IgbXkgaW52ZXN0aWdhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAxNDowMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDticGZfaXRlcl9udW1fbmV3JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9icGZfaXRlci5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvYnBmX2l0ZXIuYz03Njg9X19icGZfa2Z1bmNfc3RhcnRfZGVmcygpO1xua2VybmVsL2JwZi9icGZfaXRlci5jLTc2OS1cbmtlcm5lbC9icGYvYnBmX2l0ZXIuYzo3NzA6X19icGZfa2Z1bmMgaW50IGJwZl9pdGVyX251bV9uZXcoc3RydWN0IGJwZl9pdGVyX251bSAqaXQsIGludCBzdGFydCwgaW50IGVuZClcbmtlcm5lbC9icGYvYnBmX2l0ZXIuYy03NzEte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDE0OjAyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT43bTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk5ODEKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAyOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqS2VybmVsIEZ1bmN0aW9uIENvbnNpZGVyYXRpb25zKioKCkFscmlnaHQsIHNvIHRoZSBjb3JlIG9mIHdoYXQgSSYjMzk7bSB0aGlua2luZyBhYm91dCByaWdodCBub3cgaGluZ2VzIG9uIHRoZSBuYXR1cmUgb2YgdGhlIGZ1bmN0aW9uIGluIHF1ZXN0aW9uOiBpdCYjMzk7cyBhIGtmdW5jLiBUaGF0IGltbWVkaWF0ZWx5IGluZm9ybXMgYSBsb3Qgb2YgbXkgYXBwcm9hY2guIFRoZSBpbXBsaWNhdGlvbnMgb2YgKm5vdCogYmVpbmcgYSBzdGF0aWMgZnVuY3Rpb24gYXJlIGNvbnNpZGVyYWJsZSBpbiB0aGUgY29udGV4dCBvZiBrZXJuZWwgQlBGIGRldmVsb3BtZW50LiBJJiMzOTttIGFscmVhZHkgbWVudGFsbHkgcnVubmluZyB0aHJvdWdoIHRoZSB2YXJpb3VzIGNvbnRleHRzIHdoZXJlIHRoaXMgY2hhcmFjdGVyaXN0aWMgaW1wYWN0cyB0aGluZ3MgbGlrZSBzeW1ib2wgcmVzb2x1dGlvbiwgaW5saW5pbmcgYmVoYXZpb3IgKG9yIGxhY2sgdGhlcmVvZiwgcGVyaGFwcyksIGFuZCBhbnkgcG90ZW50aWFsIHJlbGlhbmNlIG9uIGdsb2JhbCBzdGF0ZSB3aXRoaW4gdGhlIGtlcm5lbC4KCkdpdmVuIHRoYXQsIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBiZWhhdmlvci4gVGhlIG9idmlvdXMgbmV4dCBzdGVwIGlzIHRvIGV4YW1pbmUgYGJwZl9pdGVyX251bV9uZXh0YC4gVGhhdCBmdW5jdGlvbiBpcyB3aGVyZSBJIHdpbGwgc3RhcnQsIGRpZ2dpbmcgaW50byBpdHMgaW1wbGVtZW50YXRpb24gYW5kIGhvdyBpdCYjMzk7cyBkZXNpZ25lZCB0byBpbnRlcmZhY2UuIElzIGl0IGRlc2lnbmVkIHRvIGJlIGZhc3Q/IFJvYnVzdD8gV2hhdCBzcGVjaWZpYyBhc3BlY3RzIG9mIGl0ZXJhdGl2ZSBwcm9jZXNzZXMgZG9lcyBpdCBoYW5kbGU/IEFyZSB0aGVyZSBhbnkgcG90ZW50aWFsIGdvdGNoYXMgb3IgZWRnZSBjYXNlcyBJIG5lZWQgdG8gY29uc2lkZXI/IEkmIzM5O20gYW50aWNpcGF0aW5nIHRoYXQgaXRzIGludGVybmFsIHdvcmtpbmdzIHdpbGwgcmV2ZWFsIGEgbG90IGFib3V0IHRoZSBleHBlY3RlZCB1c2FnZSBwYXR0ZXJucyBhbmQgdGhlIG92ZXJhbGwgZGVzaWduIG9mIHRoaXMgY29tcG9uZW50LiBUaW1lIHRvIGRpdmUgaW4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDE0OjA5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JwZl9pdGVyX251bV9uZXh0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9icGZfaXRlci5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvYnBmX2l0ZXIuYz03NzA9X19icGZfa2Z1bmMgaW50IGJwZl9pdGVyX251bV9uZXcoc3RydWN0IGJwZl9pdGVyX251bSAqaXQsIGludCBzdGFydCwgaW50IGVuZClcbi0tXG5rZXJuZWwvYnBmL2JwZl9pdGVyLmMtNzc3LVx0Lyogc3RhcnQgPT0gZW5kIGlzIGxlZ2l0LCBpdCYjMzk7cyBhbiBlbXB0eSByYW5nZSBhbmQgd2UmIzM5O2xsIGp1c3QgZ2V0IE5VTExcbmtlcm5lbC9icGYvYnBmX2l0ZXIuYzo3Nzg6XHQgKiBvbiBmaXJzdCAoYW5kIGFueSBzdWJzZXF1ZW50KSBicGZfaXRlcl9udW1fbmV4dCgpIGNhbGxcbmtlcm5lbC9icGYvYnBmX2l0ZXIuYy03NzktXHQgKi9cbi0tXG5rZXJuZWwvYnBmL2JwZl9pdGVyLmMtNzkwLVxua2VybmVsL2JwZi9icGZfaXRlci5jOjc5MTpcdC8qIHVzZXIgd2lsbCBjYWxsIGJwZl9pdGVyX251bV9uZXh0KCkgZmlyc3QsXG5rZXJuZWwvYnBmL2JwZl9pdGVyLmMtNzkyLVx0ICogd2hpY2ggd2lsbCBzZXQgcy1cdTAwM2VjdXIgdG8gZXhhY3RseSBzdGFydCB2YWx1ZTtcbi0tXG5rZXJuZWwvYnBmL2JwZl9pdGVyLmMtODAwLVxua2VybmVsL2JwZi9icGZfaXRlci5jOjgwMTpfX2JwZl9rZnVuYyBpbnQgKmJwZl9pdGVyX251bV9uZXh0KHN0cnVjdCBicGZfaXRlcl9udW0qIGl0KVxua2VybmVsL2JwZi9icGZfaXRlci5jLTgwMi17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDE0OjA5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwNjEwCgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIHRoZSBLZXJuZWwgRnVuY3Rpb24qKgoKQWxyaWdodCwgc28gdGhlIGltbWVkaWF0ZSBjb250ZXh0IHRlbGxzIG1lIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggYSBrZXJuZWwgZnVuY3Rpb24g4oCTIGxpa2VseSBzb21ldGhpbmcgY3J1Y2lhbCB0byB0aGUgQlBGIGluZnJhc3RydWN0dXJlLiBNeSBpbml0aWFsIGluc3RpbmN0IGlzIHRvIGNhdGVnb3JpemUgaXQgYXMgc3VjaCwgYW5kIHRoYXQgZnJhbWV3b3JrIGhlbHBzIG5hcnJvdyBkb3duIHRoZSByZWxldmFudCBhcmVhcyBvZiBpbnZlc3RpZ2F0aW9uLgoKTm93LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoZSBkZXRhaWwgYW5kIHdoYXQgdGhhdCBtZWFucyBmb3IgaXRzIGZ1bmN0aW9uLiBUaGUgbmV4dCBzdGVwIGlzIHRvIGV4YW1pbmUgYGJwZl9pdGVyX251bV9kZXN0cm95YC4gVGhhdCBuYW1lIGFsb25lIGlzIGZhaXJseSBkZXNjcmlwdGl2ZTogJiMzNDticGYsJiMzNDsgJiMzNDtpdGVyLCYjMzQ7IGFuZCAmIzM0O2Rlc3Ryb3kmIzM0OyBnaXZlcyBtZSBhIHNvbGlkIHN0YXJ0aW5nIHBvaW50LiBJJiMzOTttIGFscmVhZHkgbWVudGFsbHkgcnVubmluZyB0aHJvdWdoIHRoZSBwcm9iYWJsZSB1c2UgY2FzZXMuIEkgZXhwZWN0IGl0JiMzOTtzIGFib3V0IGNsZWFuaW5nIHVwIGEgbnVtZXJpYyBpdGVyYXRvciB3aXRoaW4gYSBCUEYgY29udGV4dC4gTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHNwZWNpZmljIG51bWVyaWMgdHlwZSBhbmQgY29udGV4dCB0aGlzIGZ1bmN0aW9uIGFwcGxpZXMgdG8sIHNvIEkgY2FuIGZ1cnRoZXIgZGVkdWNlIGl0cyBzaWduaWZpY2FuY2UuIEkmIzM5O20gZ29pbmcgdG8gc3RhcnQgbWVudGFsbHkgdHJhY2luZyBleGVjdXRpb24gcGF0aHMgdG8gdW5kZXJzdGFuZCB3aGVyZSB0aGlzIGZ1bmN0aW9uIGZpdHMgaW50byB0aGUgb3ZlcmFsbCBCUEYgbGlmZWN5Y2xlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAxNDoxMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDticGZfaXRlcl9udW1fZGVzdHJveSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvYnBmX2l0ZXIuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL2JwZl9pdGVyLmM9ODAxPV9fYnBmX2tmdW5jIGludCAqYnBmX2l0ZXJfbnVtX25leHQoc3RydWN0IGJwZl9pdGVyX251bSogaXQpXG4tLVxua2VybmVsL2JwZi9icGZfaXRlci5jLTgxOC1cbmtlcm5lbC9icGYvYnBmX2l0ZXIuYzo4MTk6X19icGZfa2Z1bmMgdm9pZCBicGZfaXRlcl9udW1fZGVzdHJveShzdHJ1Y3QgYnBmX2l0ZXJfbnVtICppdClcbmtlcm5lbC9icGYvYnBmX2l0ZXIuYy04MjAte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAxNDoxMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTAxNQoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDk0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGJyZWFrZG93biBvZiB3aGF0IEkmIzM5O20gbG9va2luZyBhdDoKCioqS2Z1bmMgRGlzc2VjdGlvbjogQ29yZSBGdW5jdGlvbnMgYW5kIENvbmZpZ3VyYXRpb24qKgoKUmlnaHQsIHNvIHRoaXMgaXMgZGVmaW5pdGVseSBhIGtmdW5jLCB3aGljaCBtZWFucyBJIG5lZWQgdG8gemVybyBpbiBvbiBhIHNwZWNpZmljIHNldCBvZiBmdW5jdGlvbnMuIEkga25vdyB0aGF0OiBgYnBmX2ZpeHVwX2tmdW5jX2NhbGxgIGlzIGdvaW5nIHRvIGJlIGNydWNpYWwgZm9yIHRoZSBpbml0aWFsIHNldHVwLCBhbmQgdGhlbiBJJiMzOTttIGFsc28gbG9va2luZyBhdCB0aGUgaXRlcmF0b3IgZnVuY3Rpb25zOiBgYnBmX2l0ZXJfbnVtX25ld2AsIGBicGZfaXRlcl9udW1fbmV4dGAsIGFuZCBgYnBmX2l0ZXJfbnVtX2Rlc3Ryb3lgLiBUaG9zZSBoYW5kbGUgdGhlIGNyZWF0aW9uLCBwcm9ncmVzc2lvbiwgYW5kIGNsZWFudXAgb2YgdGhlIGl0ZXJhdG9yLCB3aGljaCBpcyBsaWtlbHkgdGhlIGNvcmUgb2YgdGhlIGZ1bmN0aW9uYWxpdHkgaGVyZS4gSSBzaG91bGQgcHJvYmFibHkgcmV2aWV3IGhvdyBpdGVyYXRvcnMgaW50ZXJhY3Qgd2l0aCB0aGVzZSBmdW5jdGlvbnMuCgpJIHNob3VsZCBhbHNvIG1ha2Ugc3VyZSB0aGUgYEJQRl9TWVNDQUxMYCBjb25maWd1cmF0aW9uIG9wdGlvbiBpcyBlbmFibGVkIOKAkyBpdCYjMzk7cyBwcmV0dHkgZXNzZW50aWFsIGZvciB0aGUga2Z1bmMgdG8gYWN0dWFsbHkgZnVuY3Rpb24gcHJvcGVybHkgd2l0aGluIHRoZSBzeXN0ZW0gY2FsbCBjb250ZXh0LCBhbmQgdGhhdCYjMzk7cyB1c3VhbGx5IGltcG9ydGFudCBmb3IgdGhlIGNvbnRleHQga2Z1bmNzIG9wZXJhdGUgaW4uCgpKdXN0IHRvIGJlIHRob3JvdWdoLCBJIHNob3VsZCBzY2FuIGZvciBhbnkgb3RoZXIgY29uZmlndXJhdGlvbiBmbGFncyBvciByZWxldmFudCBrZXJuZWwgb3B0aW9ucyB0aGF0IG1pZ2h0IGJlIHJlbGV2YW50IGhlcmUuIFlvdSBuZXZlciBrbm93IHdoZW4gc29tZSBvYnNjdXJlIGZsYWcgaXMgbHVya2luZyBhbmQgYWZmZWN0aW5nIGJlaGF2aW9yLiBBbHdheXMgZ29vZCB0byBkb3VibGUgY2hlY2suCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDE0OjEwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEJQRl9TWVNDQUxMJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW5pdC9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMTQ6MTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE0MDcKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiAxNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipUcmFjaW5nIERvd24gYEJQRl9TWVNDQUxMYCoqCgpBbHJpZ2h0LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgYEJQRl9TWVNDQUxMYCBpcyBkZWZpbmVkLiBUaGlzIGxpa2VseSBtZWFucyBJJiMzOTttIGxvb2tpbmcgYXQgaG93IHN5c2NhbGxzIGFyZSBiZWluZyBob29rZWQgb3IgcG90ZW50aWFsbHkgZmlsdGVyZWQgd2l0aCBlQlBGLiBJJiMzOTtsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hlcmUgdGhhdCBtYWNybyBpcyBkZWNsYXJlZCwgcHJvYmFibHkgaW4gYSBrZXJuZWwgaGVhZGVyIGZpbGUuIEkmIzM5O20gZ3Vlc3NpbmcgaXQmIzM5O3MgcGFydCBvZiB0aGUgY29yZSBCUEYgaW5mcmFzdHJ1Y3R1cmUsIG1heWJlIHJlbGF0ZWQgdG8gdGhlIHRyYWNpbmcgb3Iga3Byb2JlcyBtb2R1bGVzLiBJJiMzOTtsbCBwcm9iYWJseSBzdGFydCB3aXRoIHRoZSBzdGFuZGFyZCBpbmNsdWRlIGRpcmVjdG9yaWVzLCBzb21ldGhpbmcgbGlrZSBgL3Vzci9zcmMvbGludXgvaW5jbHVkZS9gLCBvciB3aGVyZXZlciB0aGUga2VybmVsIGhlYWRlcnMgcmVzaWRlIG9uIHRoaXMgc3lzdGVtLiBGcm9tIHRoZXJlLCBJJiMzOTtsbCBuZWVkIHRvIHVzZSBzb21lIGNsZXZlciBzZWFyY2hpbmcgdGVjaG5pcXVlcy4gYGdyZXBgIGlzIHByb2JhYmx5IHRoZSBpbW1lZGlhdGUgdG9vbCwgYnV0IEkgbWlnaHQgdXNlIGEgbW9yZSBwcmVjaXNlIGNvbW1hbmQgbGlrZSBgZmluZGAgYW5kIHRoZW4gYGdyZXBgIHRvIG5hcnJvdyBkb3duIHRoZSBzZWFyY2ggaWYgSSBrbm93IHNvbWUgcmVsYXRlZCBrZXl3b3JkcywgbGlrZSAmIzM0O2JwZiYjMzQ7LCAmIzM0O3N5c2NhbGwmIzM0Oywgb3IgJiMzNDtob29rJiMzNDsuIEkmIzM5O20gYW50aWNpcGF0aW5nIGl0JiMzOTtsbCBiZSBhIGZhaXJseSBpbnZvbHZlZCBtYWNybywgcHJvYmFibHkgc29tZXRoaW5nIHRoYXQgZXhwYW5kcyB0byBhIHNwZWNpZmljIGVCUEYgaW5zdHJ1Y3Rpb24gb3IgYSBzZXJpZXMgb2YgaW5zdHJ1Y3Rpb25zIHJlbGF0ZWQgdG8gYSBzeXNjYWxsIGVudHJ5IHBvaW50LiBJJiMzOTtsbCBhbHNvIHdhbnQgdG8gY29uc2lkZXIgd2hhdCBrZXJuZWwgdmVyc2lvbnMgbWlnaHQgYmUgcmVsZXZhbnQsIGFuZCBsb29rIGludG8gdGhlIHNwZWNpZmljIGhlYWRlciBsb2NhdGlvbiBmb3IgZWFjaCB2ZXJzaW9uIGlmIG5lY2Vzc2FyeSwgYXMga2VybmVsIEFQSSBjaGFuZ2VzIGNhbiBhZmZlY3QgdGhpcyBzb3J0IG9mIHRoaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAxNDoxMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgQlBGX1NZU0NBTEwmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9LY29uZmlnPTI1PW1lbnUgXCYjMzQ7QlBGIHN1YnN5c3RlbVwmIzM0O1xua2VybmVsL2JwZi9LY29uZmlnLTI2LVxua2VybmVsL2JwZi9LY29uZmlnOjI3OmNvbmZpZyBCUEZfU1lTQ0FMTFxua2VybmVsL2JwZi9LY29uZmlnLTI4LVx0Ym9vbCBcJiMzNDtFbmFibGUgYnBmKCkgc3lzdGVtIGNhbGxcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMTQ6MTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE4MjUKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAxMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIHN1bW1hcml6ZWQgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRoZSBnaXZlbiBwcm9tcHQ6CgoqKkFuYWx5emluZyB0aGUgS2NvbmZpZyBGaWxlIGZvciBCUEYgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyB0aGUgaW5zdHJ1Y3Rpb24gbWVudGlvbnMgc29tZXRoaW5nIGFib3V0IGV4YW1pbmluZyBga2VybmVsL2JwZi9LY29uZmlnYC4gUmlnaHQsIHRoaXMgaW1tZWRpYXRlbHkgc3VnZ2VzdHMgYSBmb2N1cyBvbiB0aGUga2VybmVsJiMzOTtzIGJ1aWxkIGNvbmZpZ3VyYXRpb24gZm9yIEJQRiAoQmVya2VsZXkgUGFja2V0IEZpbHRlcikgZnVuY3Rpb25hbGl0eS4gR2l2ZW4gbXkgZXhwZXJ0aXNlLCBJIGtub3cgdGhhdCBgS2NvbmZpZ2AgZmlsZXMgYXJlIHRoZSBiYWNrYm9uZSBvZiB0aGUgTGludXgga2VybmVsJiMzOTtzIGNvbmZpZ3VyYXRpb24gc3lzdGVtLCBtYW5hZ2VkIGJ5IGBrYnVpbGRgLiBUaGV5IGRlZmluZSBhbGwgdGhlIG9wdGlvbnMgcHJlc2VudGVkIHRvIHVzZXJzIHRocm91Z2ggdG9vbHMgbGlrZSBgbWVudWNvbmZpZ2AsIGBkZWZjb25maWdgLCBhbmQgb3RoZXJzLCB3aGVuIHRoZXkmIzM5O3JlIGNvbmZpZ3VyaW5nIHRoZWlyIGtlcm5lbC4KCk15IG1pbmQgaW1tZWRpYXRlbHkgYmVnaW5zIHRvIGFudGljaXBhdGUgd2hhdCBJJiMzOTtsbCBmaW5kIHdpdGhpbiB0aGlzIHNwZWNpZmljIEtjb25maWcgZmlsZS4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgdGhpbmdzIGxpa2U6CgoqICAgKipCUEYgZmVhdHVyZSBlbmFibGUvZGlzYWJsZSBmbGFnczoqKiBUaGVyZSBzaG91bGQgYmUgdG9wLWxldmVsIG9wdGlvbnMgZm9yIGVuYWJsaW5nIEJQRiBicm9hZGx5LCB3aGljaCBvZnRlbiB0cmFuc2xhdGUgaW50byBjb21waWxhdGlvbiBmbGFncy4KKiAgICoqU3BlY2lmaWMgQlBGIHN1YnN5c3RlbXM6KiogTGlrZWx5LCB0aGVyZSB3aWxsIGJlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0aGF0IGNvbnRyb2wgdGhlIGluY2x1c2lvbiBvZiBzcGVjaWZpYyBCUEYgaGVscGVyIGZ1bmN0aW9ucywgQlBGIHByb2dyYW0gdHlwZXMgKGUuZy4sIHRyYWNpbmcsIG5ldHdvcmtpbmcsIFhEUCksIGFuZCBCUEYtcmVsYXRlZCBmZWF0dXJlcy4gSSYjMzk7bSB0aGlua2luZyBvZiBlQlBGIGFuZCBpdHMgZGl2ZXJzZSB1c2VzLgoqICAgKipEZXBlbmRlbmNpZXMgYW5kIGNvbnN0cmFpbnRzOioqIFRoZSBLY29uZmlnIGZpbGUgd2lsbCBzcGVjaWZ5IHdoaWNoIGZlYXR1cmVzIGRlcGVuZCBvbiBvdGhlcnMsIGFuZCBhbnkgaGFyZHdhcmUgb3Igc29mdHdhcmUgcmVxdWlyZW1lbnRzLiBUaGlzIGlzIGtleSwgYXMgQlBGIGNhbiBoYXZlIHZlcnkgc3BlY2lmaWMgZGVwZW5kZW5jeSBjaGFpbnMuCiogICAqKkhlbHAgdGV4dDoqKiBUaGUgZmlsZSAqc2hvdWxkKiBjb250YWluIGhlbHBmdWwgZGVzY3JpcHRpb25zIGZvciBlYWNoIG9wdGlvbiwgaWRlYWxseSBleHBsYWluaW5nIHdoYXQgdGhlIG9wdGlvbiBkb2VzLCBhbmQgcHJvdmlkaW5nIGNvbnRleHQgZm9yIGl0cyB1c2UuIEkgd2lsbCBhbHNvIGFzc2VzcyBpdHMgcXVhbGl0eS4KKiAgICoqRGVmYXVsdCB2YWx1ZXM6KiogSXQgd2lsbCBkZWZpbmUgZGVmYXVsdCBjaG9pY2VzIGZvciB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zLgoKSSYjMzk7bSByZWFkeSB0byBkaXZlIGludG8gdGhlIGZpbGUgYW5kIGdldCB0byB3b3JrLiBMZXQmIzM5O3Mgc2VlIHdoYXQgaW50ZXJlc3RpbmcgY29uZmlndXJhdGlvbnMgdGhlIGtlcm5lbCBkZXZzIGhhdmUgY3JlYXRlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMTQ6MTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtrZXJuZWwvYnBmL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyNSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDI1Olx0bWVudSBcJiMzNDtCUEYgc3Vic3lzdGVtXCYjMzQ7XG4gIDI2Olx0XG4gIDI3Olx0Y29uZmlnIEJQRl9TWVNDQUxMXG4gIDI4Olx0XHRib29sIFwmIzM0O0VuYWJsZSBicGYoKSBzeXN0ZW0gY2FsbFwmIzM0O1xuICAyOTpcdFx0c2VsZWN0IEJQRlxuICAzMDpcdFx0c2VsZWN0IElSUV9XT1JLXG4gIDMxOlx0XHRzZWxlY3QgTkVFRF9UQVNLU19SQ1VcbiAgMzI6XHRcdHNlbGVjdCBUQVNLU19UUkFDRV9SQ1VcbiAgMzM6XHRcdHNlbGVjdCBCSU5BUllfUFJJTlRGXG4gIDM0Olx0XHRzZWxlY3QgTkVUX1NPQ0tfTVNHIGlmIE5FVFxuICAzNTpcdFx0c2VsZWN0IE5FVF9YR1JFU1MgaWYgTkVUXG4gIDM2Olx0XHRzZWxlY3QgUEFHRV9QT09MIGlmIE5FVFxuICAzNzpcdFx0ZGVmYXVsdCBuXG4gIDM4Olx0XHRoZWxwXG4gIDM5Olx0XHQgIEVuYWJsZSB0aGUgYnBmKCkgc3lzdGVtIGNhbGwgdGhhdCBhbGxvd3MgdG8gbWFuaXB1bGF0ZSBCUEYgcHJvZ3JhbXNcbiAgNDA6XHRcdCAgYW5kIG1hcHMgdmlhIGZpbGUgZGVzY3JpcHRvcnMuXG4gIDQxOlx0XG4gIDQyOlx0Y29uZmlnIEJQRl9KSVRcbiAgNDM6XHRcdGJvb2wgXCYjMzQ7RW5hYmxlIEJQRiBKdXN0IEluIFRpbWUgY29tcGlsZXJcJiMzNDtcbiAgNDQ6XHRcdGRlcGVuZHMgb24gQlBGXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDE0OjExPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyNTA1CgkJCQkJCQlvdXRwdXQ6IDE2OAoJCQkJCQkJdGhvdWdodHM6IDI3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqTXkgQlBGIFN0cmF0ZWd5KioKCkFscmlnaHQsIHNvIHRoZSBjb3JlIG9mIHRoaXMgaW52ZXN0aWdhdGlvbiwgdGhlIHZlcnkgY3J1eCBvZiB3aGVyZSBJIG5lZWQgdG8gZm9jdXMgbXkgZW5lcmdpZXMsIGlzIGdvaW5nIHRvIGJlIGRyaXZlbiBieSB0aGUgYEJQRl9TWVNDQUxMYCBjb25maWd1cmF0aW9uLiBUaGF0JiMzOTtzIHRoZSBrZXksIHRoZSBlbnRyeSBwb2ludCBmb3IgZXZlcnl0aGluZyBJIG5lZWQgdG8gYW5hbHl6ZS4gSXQmIzM5O3MgdGhlIGx5bmNocGluLCB0aGUgcGxhY2Ugd2hlcmUgSSYjMzk7bGwgaG9vayBpbiB0byBnZXQgdGhlIGRhdGEgSSBuZWVkLgoKQW5kLCBvZiBjb3Vyc2UsIG9uY2UgSSYjMzk7dmUgZ290IHRoYXQgZGF0YSwgb25jZSBJJiMzOTt2ZSBzaWZ0ZWQgdGhyb3VnaCBpdCwgd3J1bmcgaXQgZHJ5IGFuZCBhbmFseXplZCBpdCAtIEkmIzM5O20gZ29pbmcgdG8gcmVwb3J0IHRob3NlIGZpbmRpbmdzIHdpdGggYHNldC1yZXN1bHRzYC4gTm8gc3VycHJpc2VzIHRoZXJlLiBJdCYjMzk7cyB0aGUgbW9zdCBlZmZlY3RpdmUgYW5kIGVmZmljaWVudCB3YXkgdG8gcHJlc2VudCBhbmQgZm9ybWF0IHRoZSBpbmZvcm1hdGlvbiBhZnRlciBhbGwgdGhhdCBpbnRlbnNpdmUgd29yay4gSXTigJlzIHdoYXQgSSYjMzk7bGwgbGV2ZXJhZ2UgdG8gcHJlc2VudCB0aGUgaW5zaWdodHMgdGhhdCBlbWVyZ2UgZnJvbSB0aGUgc3lzY2FsbCBhbmFseXNpcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMTQ6MTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YnBmX2ZpeHVwX2tmdW5jX2NhbGwmIzM0OywKICAgICYjMzQ7YnBmX2l0ZXJfbnVtX25ldyYjMzQ7LAogICAgJiMzNDticGZfaXRlcl9udW1fbmV4dCYjMzQ7LAogICAgJiMzNDticGZfaXRlcl9udW1fZGVzdHJveSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgaW1wbGVtZW50YXRpb24gb2YgQlBGIG51bWVyaWMgaXRlcmF0b3JzIChgYnBmX2l0ZXJfbnVtX25ld2AsIGBicGZfaXRlcl9udW1fbmV4dGAsIGBicGZfaXRlcl9udW1fZGVzdHJveWApIGFuZCBhZGRzIGlubGluaW5nIGZvciB0aGVzZSBrZnVuY3MgaW4gdGhlIEJQRiB2ZXJpZmllciAoYGJwZl9maXh1cF9rZnVuY19jYWxsYCkuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGNvcmUgQlBGIHN1YnN5c3RlbSBhbmQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDticGZfZml4dXBfa2Z1bmNfY2FsbCYjMzQ7LAogICAgJiMzNDticGZfaXRlcl9udW1fbmV3JiMzNDssCiAgICAmIzM0O2JwZl9pdGVyX251bV9uZXh0JiMzNDssCiAgICAmIzM0O2JwZl9pdGVyX251bV9kZXN0cm95JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBCUEYgbnVtZXJpYyBpdGVyYXRvcnMgKGBicGZfaXRlcl9udW1fbmV3YCwgYGJwZl9pdGVyX251bV9uZXh0YCwgYGJwZl9pdGVyX251bV9kZXN0cm95YCkgYW5kIGFkZHMgaW5saW5pbmcgZm9yIHRoZXNlIGtmdW5jcyBpbiB0aGUgQlBGIHZlcmlmaWVyIChgYnBmX2ZpeHVwX2tmdW5jX2NhbGxgKS4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUgY29yZSBCUEYgc3Vic3lzdGVtIGFuZCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMDRUMTQ6MDA6NDMuNTUxMzUwOFoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY5NjYxNzIwODAwMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfU1lTQ0FMTFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJwZl9maXh1cF9rZnVuY19jYWxsXCIsXG4gICAgXCJicGZfaXRlcl9udW1fbmV3XCIsXG4gICAgXCJicGZfaXRlcl9udW1fbmV4dFwiLFxuICAgIFwiYnBmX2l0ZXJfbnVtX2Rlc3Ryb3lcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgaW1wbGVtZW50YXRpb24gb2YgQlBGIG51bWVyaWMgaXRlcmF0b3JzIChgYnBmX2l0ZXJfbnVtX25ld2AsIGBicGZfaXRlcl9udW1fbmV4dGAsIGBicGZfaXRlcl9udW1fZGVzdHJveWApIGFuZCBhZGRzIGlubGluaW5nIGZvciB0aGVzZSBrZnVuY3MgaW4gdGhlIEJQRiB2ZXJpZmllciAoYGJwZl9maXh1cF9rZnVuY19jYWxsYCkuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGNvcmUgQlBGIHN1YnN5c3RlbSBhbmQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMTQ6MDA6NDMuNTUxMzU4NDdaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYxNzA3NDM0NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGJlNWRkZjYyYmU2YjE5MTM3OGMxZjA2MjBhYmQ5Njk4ZjIyODIyMDRcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFR1ZSBBdWcgNCAxNDowMDo0MiAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL2JwZl9pdGVyLmMgYi9rZXJuZWwvYnBmL2JwZl9pdGVyLmNcXG5pbmRleCBmNWVhZWIyNDkzZDRhLi4xNGE1ZmRmYTA0MjE0IDEwMDY0NFxcbi0tLSBhL2tlcm5lbC9icGYvYnBmX2l0ZXIuY1xcbisrKyBiL2tlcm5lbC9icGYvYnBmX2l0ZXIuY1xcbkBAIC03ODIsOCArNzgyLDggQEAgX19icGZfa2Z1bmMgaW50IGJwZl9pdGVyX251bV9uZXcoc3RydWN0IGJwZl9pdGVyX251bSAqaXQsIGludCBzdGFydCwgaW50IGVuZClcXG4gXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIFxcdH1cXG4gXFxuLVxcdC8qIGF2b2lkIG92ZXJmbG93cywgZS5nLiwgaWYgc3RhcnQgPT0gSU5UX01JTiBhbmQgZW5kID09IElOVF9NQVggKi9cXG4tXFx0aWYgKChzNjQpZW5kIC0gKHM2NClzdGFydCBcXHUwMDNlIEJQRl9NQVhfTE9PUFMpIHtcXG4rXFx0Lyogc3RhcnQgXFx1MDAzYz0gZW5kIGhlcmUsIHNvIGVuZCAtIHN0YXJ0IGZpdHMgaW4gYSB1MzIgd2l0aG91dCBvdmVyZmxvdyAqL1xcbitcXHRpZiAoKHUzMikoZW5kIC0gc3RhcnQpIFxcdTAwM2UgQlBGX01BWF9MT09QUykge1xcbiBcXHRcXHRzLVxcdTAwM2VjdXIgPSBzLVxcdTAwM2VlbmQgPSAwO1xcbiBcXHRcXHRyZXR1cm4gLUUyQklHO1xcbiBcXHR9XFxuQEAgLTgwMiwxMiArODAyLDExIEBAIF9fYnBmX2tmdW5jIGludCAqYnBmX2l0ZXJfbnVtX25leHQoc3RydWN0IGJwZl9pdGVyX251bSogaXQpXFxuIHtcXG4gXFx0c3RydWN0IGJwZl9pdGVyX251bV9rZXJuICpzID0gKHZvaWQgKilpdDtcXG4gXFxuLVxcdC8qIGNoZWNrIGZhaWxlZCBpbml0aWFsaXphdGlvbiBvciBpZiB3ZSBhcmUgZG9uZSAoc2FtZSBiZWhhdmlvcik7XFxuLVxcdCAqIG5lZWQgdG8gYmUgY2FyZWZ1bCBhYm91dCBvdmVyZmxvdywgc28gY29udmVydCB0byBzNjQgZm9yIGNoZWNrcyxcXG4tXFx0ICogZS5nLiwgaWYgcy1cXHUwMDNlY3VyID09IHMtXFx1MDAzZWVuZCA9PSBJTlRfTUFYLCB3ZSBjYW4ndCBqdXN0IGRvXFxuLVxcdCAqIHMtXFx1MDAzZWN1ciArIDEgXFx1MDAzZT0gcy1cXHUwMDNlZW5kXFxuK1xcdC8qXFxuK1xcdCAqIHMtXFx1MDAzZWN1ciBcXHUwMDNjIHMtXFx1MDAzZWVuZCB3aGlsZSBpdGVyYXRpbmcsIGVsc2Ugcy1cXHUwMDNlY3VyID09IHMtXFx1MDAzZWVuZCA9PSAwOyB0aGUgc2lnbmVkXFxuK1xcdCAqIHMtXFx1MDAzZWN1ciArIDEgXFx1MDAzZT0gcy1cXHUwMDNlZW5kIGhvbGRzIGV2ZW4gd2hlbiBzLVxcdTAwM2VjdXIgKyAxIHdyYXBzIChzdGFydCA9PSBJTlRfTUlOKS5cXG4gXFx0ICovXFxuLVxcdGlmICgoczY0KShzLVxcdTAwM2VjdXIgKyAxKSBcXHUwMDNlPSBzLVxcdTAwM2VlbmQpIHtcXG4rXFx0aWYgKHMtXFx1MDAzZWN1ciArIDEgXFx1MDAzZT0gcy1cXHUwMDNlZW5kKSB7XFxuIFxcdFxcdHMtXFx1MDAzZWN1ciA9IHMtXFx1MDAzZWVuZCA9IDA7XFxuIFxcdFxcdHJldHVybiBOVUxMO1xcbiBcXHR9XFxuQEAgLTgxOSw5ICs4MTgsNyBAQCBfX2JwZl9rZnVuYyBpbnQgKmJwZl9pdGVyX251bV9uZXh0KHN0cnVjdCBicGZfaXRlcl9udW0qIGl0KVxcbiBcXG4gX19icGZfa2Z1bmMgdm9pZCBicGZfaXRlcl9udW1fZGVzdHJveShzdHJ1Y3QgYnBmX2l0ZXJfbnVtICppdClcXG4ge1xcbi1cXHRzdHJ1Y3QgYnBmX2l0ZXJfbnVtX2tlcm4gKnMgPSAodm9pZCAqKWl0O1xcbi1cXG4tXFx0cy1cXHUwMDNlY3VyID0gcy1cXHUwMDNlZW5kID0gMDtcXG4rXFx0Lyogbm8tb3AgKi9cXG4gfVxcbiBcXG4gX19icGZfa2Z1bmNfZW5kX2RlZnMoKTtcXG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi92ZXJpZmllci5jIGIva2VybmVsL2JwZi92ZXJpZmllci5jXFxuaW5kZXggYjI3NDAwNGZjY2ZkOS4uM2U0NGIwMjA1NzU2YSAxMDA2NDRcXG4tLS0gYS9rZXJuZWwvYnBmL3ZlcmlmaWVyLmNcXG4rKysgYi9rZXJuZWwvYnBmL3ZlcmlmaWVyLmNcXG5AQCAtMjAwMDEsNiArMjAwMDEsNTEgQEAgaW50IGJwZl9maXh1cF9rZnVuY19jYWxsKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfaW5zbiAqaW5zbixcXG4gXFx0XFx0aW5zbl9idWZbNF0gPSBCUEZfQUxVNjRfUkVHKEJQRl9TVUIsIEJQRl9SRUdfMCwgQlBGX1JFR18xKTtcXG4gXFx0XFx0aW5zbl9idWZbNV0gPSBCUEZfQUxVNjRfSU1NKEJQRl9ORUcsIEJQRl9SRUdfMCwgMCk7XFxuIFxcdFxcdCpjbnQgPSA2O1xcbitcXHR9IGVsc2UgaWYgKGRlc2MtXFx1MDAzZWZ1bmNfaWQgPT0gc3BlY2lhbF9rZnVuY19saXN0W0tGX2JwZl9pdGVyX251bV9uZXddKSB7XFxuK1xcdFxcdC8qIGlubGluZSBicGZfaXRlcl9udW1fbmV3KFxcdTAwMjZpdCwgc3RhcnQsIGVuZCk7IFIxPVxcdTAwMjZpdCwgUjI9c3RhcnQsIFIzPWVuZCAqL1xcbitcXHRcXHRpbnQgaSA9IDA7XFxuK1xcbitcXHRcXHQvKiBpZiAoc3RhcnQgXFx1MDAzZSBlbmQpIGdvdG8gZWludmFsOyAqL1xcbitcXHRcXHRpbnNuX2J1ZltpKytdID0gQlBGX0pNUDMyX1JFRyhCUEZfSlNHVCwgQlBGX1JFR18yLCBCUEZfUkVHXzMsIDgpO1xcbitcXHRcXHQvKiByMCA9ICh1MzIpZW5kIC0gKHUzMilzdGFydDsgaWYgKHIwIFxcdTAwM2UgQlBGX01BWF9MT09QUykgZ290byBlMmJpZzsgKi9cXG4rXFx0XFx0aW5zbl9idWZbaSsrXSA9IEJQRl9NT1YzMl9SRUcoQlBGX1JFR18wLCBCUEZfUkVHXzMpO1xcbitcXHRcXHRpbnNuX2J1ZltpKytdID0gQlBGX0FMVTMyX1JFRyhCUEZfU1VCLCBCUEZfUkVHXzAsIEJQRl9SRUdfMik7XFxuK1xcdFxcdGluc25fYnVmW2krK10gPSBCUEZfSk1QX0lNTShCUEZfSkdULCBCUEZfUkVHXzAsIEJQRl9NQVhfTE9PUFMsIDgpO1xcbitcXHRcXHQvKiBzLVxcdTAwM2VjdXIgPSBzdGFydCAtIDE7IHMtXFx1MDAzZWVuZCA9IGVuZDsgcmV0dXJuIDA7ICovXFxuK1xcdFxcdGluc25fYnVmW2krK10gPSBCUEZfQUxVMzJfSU1NKEJQRl9BREQsIEJQRl9SRUdfMiwgLTEpO1xcbitcXHRcXHRpbnNuX2J1ZltpKytdID0gQlBGX1NUWF9NRU0oQlBGX1csIEJQRl9SRUdfMSwgQlBGX1JFR18yLCAwKTtcXG4rXFx0XFx0aW5zbl9idWZbaSsrXSA9IEJQRl9TVFhfTUVNKEJQRl9XLCBCUEZfUkVHXzEsIEJQRl9SRUdfMywgNCk7XFxuK1xcdFxcdGluc25fYnVmW2krK10gPSBCUEZfTU9WNjRfSU1NKEJQRl9SRUdfMCwgMCk7XFxuK1xcdFxcdGluc25fYnVmW2krK10gPSBCUEZfSk1QX0EoNSk7XFxuK1xcdFxcdC8qIGVpbnZhbDogcy1cXHUwMDNlY3VyID0gcy1cXHUwMDNlZW5kID0gMDsgcmV0dXJuIC1FSU5WQUw7ICovXFxuK1xcdFxcdGluc25fYnVmW2krK10gPSBCUEZfU1RfTUVNKEJQRl9EVywgQlBGX1JFR18xLCAwLCAwKTtcXG4rXFx0XFx0aW5zbl9idWZbaSsrXSA9IEJQRl9NT1Y2NF9JTU0oQlBGX1JFR18wLCAtRUlOVkFMKTtcXG4rXFx0XFx0aW5zbl9idWZbaSsrXSA9IEJQRl9KTVBfQSgyKTtcXG4rXFx0XFx0LyogZTJiaWc6IHMtXFx1MDAzZWN1ciA9IHMtXFx1MDAzZWVuZCA9IDA7IHJldHVybiAtRTJCSUc7ICovXFxuK1xcdFxcdGluc25fYnVmW2krK10gPSBCUEZfU1RfTUVNKEJQRl9EVywgQlBGX1JFR18xLCAwLCAwKTtcXG4rXFx0XFx0aW5zbl9idWZbaSsrXSA9IEJQRl9NT1Y2NF9JTU0oQlBGX1JFR18wLCAtRTJCSUcpO1xcbitcXHRcXHQqY250ID0gaTtcXG4rXFx0fSBlbHNlIGlmIChkZXNjLVxcdTAwM2VmdW5jX2lkID09IHNwZWNpYWxfa2Z1bmNfbGlzdFtLRl9icGZfaXRlcl9udW1fbmV4dF0pIHtcXG4rXFx0XFx0LyogaW5saW5lIGJwZl9pdGVyX251bV9uZXh0KFxcdTAwMjZpdCk7IFIxPVxcdTAwMjZpdCwgcmV0dXJucyBcXHUwMDI2cy1cXHUwMDNlY3VyIG9yIE5VTEwgKi9cXG4rXFx0XFx0aW50IGkgPSAwO1xcbitcXG4rXFx0XFx0LyogcjAgPSBzLVxcdTAwM2VjdXIgKyAxOyBpZiAoKHMzMilyMCBcXHUwMDNlPSBzLVxcdTAwM2VlbmQpIGdvdG8gZG9uZTsgKi9cXG4rXFx0XFx0aW5zbl9idWZbaSsrXSA9IEJQRl9MRFhfTUVNKEJQRl9XLCBCUEZfUkVHXzAsIEJQRl9SRUdfMSwgMCk7XFxuK1xcdFxcdGluc25fYnVmW2krK10gPSBCUEZfQUxVMzJfSU1NKEJQRl9BREQsIEJQRl9SRUdfMCwgMSk7XFxuK1xcdFxcdGluc25fYnVmW2krK10gPSBCUEZfTERYX01FTShCUEZfVywgQlBGX1JFR18yLCBCUEZfUkVHXzEsIDQpO1xcbitcXHRcXHRpbnNuX2J1ZltpKytdID0gQlBGX0pNUDMyX1JFRyhCUEZfSlNHRSwgQlBGX1JFR18wLCBCUEZfUkVHXzIsIDMpO1xcbitcXHRcXHQvKiBzLVxcdTAwM2VjdXIgPSByMDsgcmV0dXJuIFxcdTAwMjZzLVxcdTAwM2VjdXI7ICovXFxuK1xcdFxcdGluc25fYnVmW2krK10gPSBCUEZfU1RYX01FTShCUEZfVywgQlBGX1JFR18xLCBCUEZfUkVHXzAsIDApO1xcbitcXHRcXHRpbnNuX2J1ZltpKytdID0gQlBGX01PVjY0X1JFRyhCUEZfUkVHXzAsIEJQRl9SRUdfMSk7XFxuK1xcdFxcdGluc25fYnVmW2krK10gPSBCUEZfSk1QX0EoMik7XFxuK1xcdFxcdC8qIGRvbmU6IHMtXFx1MDAzZWN1ciA9IHMtXFx1MDAzZWVuZCA9IDA7IHJldHVybiBOVUxMOyAqL1xcbitcXHRcXHRpbnNuX2J1ZltpKytdID0gQlBGX1NUX01FTShCUEZfRFcsIEJQRl9SRUdfMSwgMCwgMCk7XFxuK1xcdFxcdGluc25fYnVmW2krK10gPSBCUEZfTU9WNjRfSU1NKEJQRl9SRUdfMCwgMCk7XFxuK1xcdFxcdCpjbnQgPSBpO1xcbitcXHR9IGVsc2UgaWYgKGRlc2MtXFx1MDAzZWZ1bmNfaWQgPT0gc3BlY2lhbF9rZnVuY19saXN0W0tGX2JwZl9pdGVyX251bV9kZXN0cm95XSkge1xcbitcXHRcXHQvKiBicGZfaXRlcl9udW1fZGVzdHJveSgpIGlzIGEgbm8tb3A7IGVtaXQgYSBub3AgdG8gZHJvcCB0aGUgY2FsbCAqL1xcbitcXHRcXHRpbnNuX2J1ZlswXSA9IEJQRl9KTVBfQSgwKTtcXG4rXFx0XFx0KmNudCA9IDE7XFxuIFxcdH1cXG4gXFxuIFxcdGlmIChlbnYtXFx1MDAzZWluc25fYXV4X2RhdGFbaW5zbl9pZHhdLmFyZ19wcm9nKSB7XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9NYWtlZmlsZSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9NYWtlZmlsZVxcbmluZGV4IDU1ZDM5NDQzODcwNWEuLjMxNzRjMmYxOGU3MTUgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL01ha2VmaWxlXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL01ha2VmaWxlXFxuQEAgLTk2NSw2ICs5NjUsNyBAQCAkKE9VVFBVVCkvYmVuY2hfcmluZ2J1ZnMubzogJChPVVRQVVQpL3JpbmdidWZfYmVuY2guc2tlbC5oIFxcXFxcXG4gXFx0XFx0XFx0ICAgICQoT1VUUFVUKS9wZXJmYnVmX2JlbmNoLnNrZWwuaFxcbiAkKE9VVFBVVCkvYmVuY2hfYmxvb21fZmlsdGVyX21hcC5vOiAkKE9VVFBVVCkvYmxvb21fZmlsdGVyX2JlbmNoLnNrZWwuaFxcbiAkKE9VVFBVVCkvYmVuY2hfYnBmX2xvb3AubzogJChPVVRQVVQpL2JwZl9sb29wX2JlbmNoLnNrZWwuaFxcbiskKE9VVFBVVCkvYmVuY2hfYnBmX2Zvci5vOiAkKE9VVFBVVCkvYnBmX2Zvcl9iZW5jaC5za2VsLmhcXG4gJChPVVRQVVQpL2JlbmNoX3N0cm5jbXAubzogJChPVVRQVVQpL3N0cm5jbXBfYmVuY2guc2tlbC5oXFxuICQoT1VUUFVUKS9iZW5jaF9icGZfaGFzaG1hcF9mdWxsX3VwZGF0ZS5vOiAkKE9VVFBVVCkvYnBmX2hhc2htYXBfZnVsbF91cGRhdGVfYmVuY2guc2tlbC5oXFxuICQoT1VUUFVUKS9iZW5jaF9sb2NhbF9zdG9yYWdlLm86ICQoT1VUUFVUKS9sb2NhbF9zdG9yYWdlX2JlbmNoLnNrZWwuaFxcbkBAIC05OTAsNiArOTkxLDcgQEAgJChPVVRQVVQpL2JlbmNoOiAkKE9VVFBVVCkvYmVuY2gubyBcXFxcXFxuIFxcdFxcdCAkKE9VVFBVVCkvYmVuY2hfcmluZ2J1ZnMubyBcXFxcXFxuIFxcdFxcdCAkKE9VVFBVVCkvYmVuY2hfYmxvb21fZmlsdGVyX21hcC5vIFxcXFxcXG4gXFx0XFx0ICQoT1VUUFVUKS9iZW5jaF9icGZfbG9vcC5vIFxcXFxcXG4rXFx0XFx0ICQoT1VUUFVUKS9iZW5jaF9icGZfZm9yLm8gXFxcXFxcbiBcXHRcXHQgJChPVVRQVVQpL2JlbmNoX3N0cm5jbXAubyBcXFxcXFxuIFxcdFxcdCAkKE9VVFBVVCkvYmVuY2hfYnBmX2hhc2htYXBfZnVsbF91cGRhdGUubyBcXFxcXFxuIFxcdFxcdCAkKE9VVFBVVCkvYmVuY2hfbG9jYWxfc3RvcmFnZS5vIFxcXFxcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JlbmNoLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYmVuY2guY1xcbmluZGV4IDNkOWQyY2Q3NzY0YmQuLmI4NmI3MzQ1NmQzY2EgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JlbmNoLmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYmVuY2guY1xcbkBAIC0yNzYsNiArMjc2LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBhcmdwX29wdGlvbiBvcHRzW10gPSB7XFxuIGV4dGVybiBzdHJ1Y3QgYXJncCBiZW5jaF9yaW5nYnVmc19hcmdwO1xcbiBleHRlcm4gc3RydWN0IGFyZ3AgYmVuY2hfYmxvb21fbWFwX2FyZ3A7XFxuIGV4dGVybiBzdHJ1Y3QgYXJncCBiZW5jaF9icGZfbG9vcF9hcmdwO1xcbitleHRlcm4gc3RydWN0IGFyZ3AgYmVuY2hfYnBmX2Zvcl9hcmdwO1xcbiBleHRlcm4gc3RydWN0IGFyZ3AgYmVuY2hfbG9jYWxfc3RvcmFnZV9hcmdwO1xcbiBleHRlcm4gc3RydWN0IGFyZ3AgYmVuY2hfbG9jYWxfc3RvcmFnZV9yY3VfdGFza3NfdHJhY2VfYXJncDtcXG4gZXh0ZXJuIHN0cnVjdCBhcmdwIGJlbmNoX3N0cm5jbXBfYXJncDtcXG5AQCAtMjkyLDYgKzI5Myw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYXJncF9jaGlsZCBiZW5jaF9wYXJzZXJzW10gPSB7XFxuIFxcdHsgXFx1MDAyNmJlbmNoX3JpbmdidWZzX2FyZ3AsIDAsIFxcXCJSaW5nIGJ1ZmZlcnMgYmVuY2htYXJrXFxcIiwgMCB9LFxcbiBcXHR7IFxcdTAwMjZiZW5jaF9ibG9vbV9tYXBfYXJncCwgMCwgXFxcIkJsb29tIGZpbHRlciBtYXAgYmVuY2htYXJrXFxcIiwgMCB9LFxcbiBcXHR7IFxcdTAwMjZiZW5jaF9icGZfbG9vcF9hcmdwLCAwLCBcXFwiYnBmX2xvb3AgaGVscGVyIGJlbmNobWFya1xcXCIsIDAgfSxcXG4rXFx0eyBcXHUwMDI2YmVuY2hfYnBmX2Zvcl9hcmdwLCAwLCBcXFwiYnBmX2ZvciBsb29wIGJlbmNobWFya1xcXCIsIDAgfSxcXG4gXFx0eyBcXHUwMDI2YmVuY2hfbG9jYWxfc3RvcmFnZV9hcmdwLCAwLCBcXFwibG9jYWxfc3RvcmFnZSBiZW5jaG1hcmtcXFwiLCAwIH0sXFxuIFxcdHsgXFx1MDAyNmJlbmNoX3N0cm5jbXBfYXJncCwgMCwgXFxcImJwZl9zdHJuY21wIGhlbHBlciBiZW5jaG1hcmtcXFwiLCAwIH0sXFxuIFxcdHsgXFx1MDAyNmJlbmNoX2xvY2FsX3N0b3JhZ2VfcmN1X3Rhc2tzX3RyYWNlX2FyZ3AsIDAsXFxuQEAgLTU1Nyw2ICs1NTksNyBAQCBleHRlcm4gY29uc3Qgc3RydWN0IGJlbmNoIGJlbmNoX2Jsb29tX2ZhbHNlX3Bvc2l0aXZlO1xcbiBleHRlcm4gY29uc3Qgc3RydWN0IGJlbmNoIGJlbmNoX2hhc2htYXBfd2l0aG91dF9ibG9vbTtcXG4gZXh0ZXJuIGNvbnN0IHN0cnVjdCBiZW5jaCBiZW5jaF9oYXNobWFwX3dpdGhfYmxvb207XFxuIGV4dGVybiBjb25zdCBzdHJ1Y3QgYmVuY2ggYmVuY2hfYnBmX2xvb3A7XFxuK2V4dGVybiBjb25zdCBzdHJ1Y3QgYmVuY2ggYmVuY2hfYnBmX2ZvcjtcXG4gZXh0ZXJuIGNvbnN0IHN0cnVjdCBiZW5jaCBiZW5jaF9zdHJuY21wX25vX2hlbHBlcjtcXG4gZXh0ZXJuIGNvbnN0IHN0cnVjdCBiZW5jaCBiZW5jaF9zdHJuY21wX2hlbHBlcjtcXG4gZXh0ZXJuIGNvbnN0IHN0cnVjdCBiZW5jaCBiZW5jaF9icGZfaGFzaG1hcF9mdWxsX3VwZGF0ZTtcXG5AQCAtNjQwLDYgKzY0Myw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYmVuY2ggKmJlbmNoc1tdID0ge1xcbiBcXHRcXHUwMDI2YmVuY2hfaGFzaG1hcF93aXRob3V0X2Jsb29tLFxcbiBcXHRcXHUwMDI2YmVuY2hfaGFzaG1hcF93aXRoX2Jsb29tLFxcbiBcXHRcXHUwMDI2YmVuY2hfYnBmX2xvb3AsXFxuK1xcdFxcdTAwMjZiZW5jaF9icGZfZm9yLFxcbiBcXHRcXHUwMDI2YmVuY2hfc3RybmNtcF9ub19oZWxwZXIsXFxuIFxcdFxcdTAwMjZiZW5jaF9zdHJuY21wX2hlbHBlcixcXG4gXFx0XFx1MDAyNmJlbmNoX2JwZl9oYXNobWFwX2Z1bGxfdXBkYXRlLFxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYmVuY2hzL2JlbmNoX2JwZl9mb3IuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9iZW5jaHMvYmVuY2hfYnBmX2Zvci5jXFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcXG5pbmRleCAwMDAwMDAwMDAwMDAwLi43MzBjNTFhZDJkZWMzXFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9iZW5jaHMvYmVuY2hfYnBmX2Zvci5jXFxuQEAgLTAsMCArMSwxMDQgQEBcXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG4rLyogQ29weXJpZ2h0IChjKSAyMDI2IE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLiAqL1xcbitcXG4rI2luY2x1ZGUgXFx1MDAzY2FyZ3AuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFxcImJlbmNoLmhcXFwiXFxuKyNpbmNsdWRlIFxcXCJicGZfZm9yX2JlbmNoLnNrZWwuaFxcXCJcXG4rXFxuKy8qIEJQRiB0cmlnZ2VyaW5nIGJlbmNobWFya3MgKi9cXG4rc3RhdGljIHN0cnVjdCBjdHgge1xcbitcXHRzdHJ1Y3QgYnBmX2Zvcl9iZW5jaCAqc2tlbDtcXG4rfSBjdHg7XFxuK1xcbitzdGF0aWMgc3RydWN0IHtcXG4rXFx0X191MzIgbnJfbG9vcHM7XFxuK30gYXJncyA9IHtcXG4rXFx0LypcXG4rXFx0ICogRGVmYXVsdCB0byBhIGxhcmdlIGxvb3AgY291bnQgc28gdGhlIHBlci1pdGVyYXRpb24gYnBmX2l0ZXJfbnVtX25leHQoKSBjb3N0IGRvbWluYXRlc1xcbitcXHQgKiB0aGUgb25lLXRpbWUgYnBmX2l0ZXJfbnVtX25ldygpL2Rlc3Ryb3koKSBzZXR1cCBhbmQgdGVhcmRvd24uXFxuK1xcdCAqL1xcbitcXHQubnJfbG9vcHMgPSAxMDAwLFxcbit9O1xcbitcXG4rZW51bSB7XFxuK1xcdEFSR19OUl9MT09QUyA9IDQwMDAsXFxuK307XFxuK1xcbitzdGF0aWMgY29uc3Qgc3RydWN0IGFyZ3Bfb3B0aW9uIG9wdHNbXSA9IHtcXG4rXFx0eyBcXFwibnJfbG9vcHNcXFwiLCBBUkdfTlJfTE9PUFMsIFxcXCJucl9sb29wc1xcXCIsIDAsXFxuK1xcdFxcdFxcXCJTZXQgbnVtYmVyIG9mIGl0ZXJhdGlvbnMgZm9yIHRoZSBicGZfZm9yKCkgbG9vcFxcXCJ9LFxcbitcXHR7fSxcXG4rfTtcXG4rXFxuK3N0YXRpYyBlcnJvcl90IHBhcnNlX2FyZyhpbnQga2V5LCBjaGFyICphcmcsIHN0cnVjdCBhcmdwX3N0YXRlICpzdGF0ZSlcXG4re1xcbitcXHRzd2l0Y2ggKGtleSkge1xcbitcXHRjYXNlIEFSR19OUl9MT09QUzpcXG4rXFx0XFx0YXJncy5ucl9sb29wcyA9IHN0cnRvbChhcmcsIE5VTEwsIDEwKTtcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdGRlZmF1bHQ6XFxuK1xcdFxcdHJldHVybiBBUkdQX0VSUl9VTktOT1dOO1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rLyogZXhwb3J0ZWQgaW50byBiZW5jaG1hcmsgcnVubmVyICovXFxuK2NvbnN0IHN0cnVjdCBhcmdwIGJlbmNoX2JwZl9mb3JfYXJncCA9IHtcXG4rXFx0Lm9wdGlvbnMgPSBvcHRzLFxcbitcXHQucGFyc2VyID0gcGFyc2VfYXJnLFxcbit9O1xcbitcXG4rc3RhdGljIHZvaWQgdmFsaWRhdGUodm9pZClcXG4re1xcbitcXHRpZiAoZW52LmNvbnN1bWVyX2NudCAhPSAwKSB7XFxuK1xcdFxcdGZwcmludGYoc3RkZXJyLCBcXFwiYmVuY2htYXJrIGRvZXNuJ3Qgc3VwcG9ydCBjb25zdW1lciFcXFxcblxcXCIpO1xcbitcXHRcXHRleGl0KDEpO1xcbitcXHR9XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkICpwcm9kdWNlcih2b2lkICppbnB1dClcXG4re1xcbitcXHR3aGlsZSAodHJ1ZSlcXG4rXFx0XFx0LyogdHJpZ2dlciB0aGUgYnBmIHByb2dyYW0gKi9cXG4rXFx0XFx0c3lzY2FsbChfX05SX2dldHBnaWQpO1xcbitcXG4rXFx0cmV0dXJuIE5VTEw7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIG1lYXN1cmUoc3RydWN0IGJlbmNoX3JlcyAqcmVzKVxcbit7XFxuK1xcdHJlcy1cXHUwMDNlaGl0cyA9IGF0b21pY19zd2FwKFxcdTAwMjZjdHguc2tlbC1cXHUwMDNlYnNzLVxcdTAwM2VoaXRzLCAwKTtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgc2V0dXAodm9pZClcXG4re1xcbitcXHRzdHJ1Y3QgYnBmX2xpbmsgKmxpbms7XFxuK1xcbitcXHRzZXR1cF9saWJicGYoKTtcXG4rXFxuK1xcdGN0eC5za2VsID0gYnBmX2Zvcl9iZW5jaF9fb3Blbl9hbmRfbG9hZCgpO1xcbitcXHRpZiAoIWN0eC5za2VsKSB7XFxuK1xcdFxcdGZwcmludGYoc3RkZXJyLCBcXFwiZmFpbGVkIHRvIG9wZW4gc2tlbGV0b25cXFxcblxcXCIpO1xcbitcXHRcXHRleGl0KDEpO1xcbitcXHR9XFxuK1xcbitcXHRsaW5rID0gYnBmX3Byb2dyYW1fX2F0dGFjaChjdHguc2tlbC1cXHUwMDNlcHJvZ3MuYmVuY2htYXJrKTtcXG4rXFx0aWYgKCFsaW5rKSB7XFxuK1xcdFxcdGZwcmludGYoc3RkZXJyLCBcXFwiZmFpbGVkIHRvIGF0dGFjaCBwcm9ncmFtIVxcXFxuXFxcIik7XFxuK1xcdFxcdGV4aXQoMSk7XFxuK1xcdH1cXG4rXFxuK1xcdGN0eC5za2VsLVxcdTAwM2Vic3MtXFx1MDAzZW5yX2xvb3BzID0gYXJncy5ucl9sb29wcztcXG4rfVxcbitcXG4rY29uc3Qgc3RydWN0IGJlbmNoIGJlbmNoX2JwZl9mb3IgPSB7XFxuK1xcdC5uYW1lID0gXFxcImJwZi1mb3JcXFwiLFxcbitcXHQuYXJncCA9IFxcdTAwMjZiZW5jaF9icGZfZm9yX2FyZ3AsXFxuK1xcdC52YWxpZGF0ZSA9IHZhbGlkYXRlLFxcbitcXHQuc2V0dXAgPSBzZXR1cCxcXG4rXFx0LnByb2R1Y2VyX3RocmVhZCA9IHByb2R1Y2VyLFxcbitcXHQubWVhc3VyZSA9IG1lYXN1cmUsXFxuK1xcdC5yZXBvcnRfcHJvZ3Jlc3MgPSBvcHNfcmVwb3J0X3Byb2dyZXNzLFxcbitcXHQucmVwb3J0X2ZpbmFsID0gb3BzX3JlcG9ydF9maW5hbCxcXG4rfTtcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JlbmNocy9ydW5fYmVuY2hfYnBmX2Zvci5zaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9iZW5jaHMvcnVuX2JlbmNoX2JwZl9mb3Iuc2hcXG5uZXcgZmlsZSBtb2RlIDEwMDc1NVxcbmluZGV4IDAwMDAwMDAwMDAwMDAuLjdkYTY0NTM5MjBkYWJcXG4tLS0gL2Rldi9udWxsXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JlbmNocy9ydW5fYmVuY2hfYnBmX2Zvci5zaFxcbkBAIC0wLDAgKzEsMTUgQEBcXG4rIyEvYmluL2Jhc2hcXG4rIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxcbitcXG4rc291cmNlIC4vYmVuY2hzL3J1bl9jb21tb24uc2hcXG4rXFxuK3NldCAtZXVmbyBwaXBlZmFpbFxcbitcXG4rZm9yIHQgaW4gMSA0IDggMTIgMTY7IGRvXFxuK2ZvciBpIGluIDEwIDEwMCA1MDAgMTAwMCA1MDAwIDEwMDAwIDUwMDAwIDEwMDAwMCA1MDAwMDAgMTAwMDAwMDsgZG9cXG4rc3VidGl0bGUgXFxcIm5yX2xvb3BzOiAkaSwgbnJfdGhyZWFkczogJHRcXFwiXFxuK1xcdHN1bW1hcml6ZV9vcHMgXFxcImJwZl9mb3I6IFxcXCIgXFxcXFxcbitcXHQgICAgXFxcIiQoJFJVTl9CRU5DSCAtcCAkdCAtLW5yX2xvb3BzICRpIGJwZi1mb3IpXFxcIlxcbitcXHRwcmludGYgXFxcIlxcXFxuXFxcIlxcbitkb25lXFxuK2RvbmVcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2JwZl9mb3JfYmVuY2guYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9icGZfZm9yX2JlbmNoLmNcXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxcbmluZGV4IDAwMDAwMDAwMDAwMDAuLmY5YzcyMzA1MWZjNzRcXG4tLS0gL2Rldi9udWxsXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2JwZl9mb3JfYmVuY2guY1xcbkBAIC0wLDAgKzEsMzIgQEBcXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG4rLyogQ29weXJpZ2h0IChjKSAyMDI2IE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLiAqL1xcbitcXG4rI2luY2x1ZGUgXFxcInZtbGludXguaFxcXCJcXG4rI2luY2x1ZGUgXFx1MDAzY2JwZi9icGZfaGVscGVycy5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXFwiYnBmX21pc2MuaFxcXCJcXG4rXFxuK2NoYXIgX2xpY2Vuc2VbXSBTRUMoXFxcImxpY2Vuc2VcXFwiKSA9IFxcXCJHUExcXFwiO1xcbitcXG4raW50IG5yX2xvb3BzO1xcbitsb25nIGhpdHM7XFxuK1xcbitzdGF0aWMgaW50IG91dGVyX2xvb3AoX191MzIgaW5kZXgsIHZvaWQgKmRhdGEpXFxuK3tcXG4rXFx0aW50IGk7XFxuK1xcbitcXHQvKlxcbitcXHQgKiBFbXB0eSBib2R5OiB0aGUgd29yayBiZWluZyBtZWFzdXJlZCBpcyB0aGUgb3Blbi1jb2RlZCBudW1lcmljIGl0ZXJhdG9yIGl0c2VsZlxcbitcXHQgKiAoYnBmX2l0ZXJfbnVtX25ldy9uZXh0L2Rlc3Ryb3kgYmVoaW5kIGJwZl9mb3IoKSkuXFxuK1xcdCAqL1xcbitcXHRicGZfZm9yKGksIDAsIG5yX2xvb3BzKVxcbitcXHRcXHQ7XFxuK1xcdF9fc3luY19hZGRfYW5kX2ZldGNoKFxcdTAwMjZoaXRzLCBucl9sb29wcyk7XFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitTRUMoXFxcImZlbnRyeS9cXFwiIFNZU19QUkVGSVggXFxcInN5c19nZXRwZ2lkXFxcIilcXG4raW50IGJlbmNobWFyayh2b2lkICpjdHgpXFxuK3tcXG4rXFx0YnBmX2xvb3AoMTAwMCwgb3V0ZXJfbG9vcCwgTlVMTCwgMCk7XFxuK1xcdHJldHVybiAwO1xcbit9XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9pdGVycy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2l0ZXJzLmNcXG5pbmRleCAwZmE3MGIxMzNkOTMyLi42MmQ3ZGY5ZTgwYmViIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9pdGVycy5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2l0ZXJzLmNcXG5AQCAtODgsNiArODgsODkgQEAgaW50IGl0ZXJfZXJyX3Vuc2FmZV9hc21fbG9vcChjb25zdCB2b2lkICpjdHgpXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbisvKlxcbisgKiBOYWtlZCBmdW5jdGlvbiwgc28gdGhlcmUgaXMgbm8gY29tcGlsZXItZ2VuZXJhdGVkIGdsdWUgYW5kIHRoZSB3aG9sZSBpbmxpbmVkIHByb2dyYW0gY2FuIGJlXFxuKyAqIG1hdGNoZWQuIFBpbm5lZCB0byBhcmNoZXMgd2hvc2UgSklUcyB6ZXJvLWV4dGVuZCAzMi1iaXQgd3JpdGVzIGltcGxpY2l0bHlcXG4rICogKGJwZl9qaXRfbmVlZHNfemV4dCgpID09IGZhbHNlKTsgb24gYXJjaGVzIHRoYXQgbmVlZCBleHBsaWNpdCB6ZXJvLWV4dGVuc2lvbiB0aGUgdmVyaWZpZXJcXG4rICogaW50ZXJsZWF2ZXMgXFxcIndOID0gd05cXFwiIGluc25zIGFuZCB0aGUgZml4ZWQgc2hhcGUgYmVsb3cgd291bGQgbm90IG1hdGNoLiBUaGUgaW5saW5pbmcgaXRzZWxmIGlzXFxuKyAqIGFyY2ggaW5kZXBlbmRlbnQsIHNvIGNoZWNraW5nIGl0IG9uIHRoZXNlIGFyY2hlcyBpcyBzdWZmaWNpZW50LlxcbisgKlxcbisgKiBicGZfaXRlcl9udW1fbmV3KCkgZW1pdHMgdGhlIGZ1bGwgcmFuZ2UgY2hlY2sgKGRpc3RhbmNlIGNvbXB1dGF0aW9uIGFuZCBib3RoIHRoZSAtRUlOVkFMIGFuZFxcbisgKiAtRTJCSUcgZXJyb3IgcGF0aHMpOyBicGZfaXRlcl9udW1fbmV4dCgpIGFuZCBicGZfaXRlcl9udW1fZGVzdHJveSgpIGFyZSBpbmxpbmVkIHRvby5cXG4rICovXFxuK1NFQyhcXFwicmF3X3RwXFxcIilcXG4rX19hcmNoX3g4Nl82NFxcbitfX2FyY2hfYXJtNjRcXG4rX19zdWNjZXNzXFxuK19feGxhdGVkKFxcXCJyNiA9IHIxMFxcXCIpXFxuK19feGxhdGVkKFxcXCJyNiArPSAtOFxcXCIpXFxuK19feGxhdGVkKFxcXCJjYWxsIHVua25vd25cXFwiKVxcbitfX3hsYXRlZChcXFwicjMgPSByMFxcXCIpXFxuK19feGxhdGVkKFxcXCJyMyBcXHUwMDI2PSA2NTUzNVxcXCIpXFxuK19feGxhdGVkKFxcXCJyMSA9IHI2XFxcIilcXG4rX194bGF0ZWQoXFxcInIyID0gMFxcXCIpXFxuKy8qIGJwZl9pdGVyX251bV9uZXcoXFx1MDAyNml0LCAwLCBcXHUwMDNjbm9uLWNvbnN0XFx1MDAzZSkgd2l0aCB0aGUgcmFuZ2UgY2hlY2sga2VwdCAqL1xcbitfX3hsYXRlZChcXFwiaWYgdzIgc1xcdTAwM2UgdzMgZ290byBwYys4XFxcIilcXG4rX194bGF0ZWQoXFxcIncwID0gdzNcXFwiKVxcbitfX3hsYXRlZChcXFwidzAgLT0gdzJcXFwiKVxcbitfX3hsYXRlZChcXFwiaWYgcjAgXFx1MDAzZSAweDgwMDAwMCBnb3RvIHBjKzhcXFwiKVxcbitfX3hsYXRlZChcXFwidzIgKz0gLTFcXFwiKVxcbitfX3hsYXRlZChcXFwiKih1MzIgKikocjEgKzApID0gcjJcXFwiKVxcbitfX3hsYXRlZChcXFwiKih1MzIgKikocjEgKzQpID0gcjNcXFwiKVxcbitfX3hsYXRlZChcXFwicjAgPSAwXFxcIilcXG4rX194bGF0ZWQoXFxcImdvdG8gcGMrNVxcXCIpXFxuK19feGxhdGVkKFxcXCIqKHU2NCAqKShyMSArMCkgPSAwXFxcIilcXG4rX194bGF0ZWQoXFxcInIwID0gLTIyXFxcIilcXG4rX194bGF0ZWQoXFxcImdvdG8gcGMrMlxcXCIpXFxuK19feGxhdGVkKFxcXCIqKHU2NCAqKShyMSArMCkgPSAwXFxcIilcXG4rX194bGF0ZWQoXFxcInIwID0gLTdcXFwiKVxcbitfX3hsYXRlZChcXFwicjEgPSByNlxcXCIpXFxuKy8qIGJwZl9pdGVyX251bV9uZXh0KFxcdTAwMjZpdCkgKi9cXG4rX194bGF0ZWQoXFxcInIwID0gKih1MzIgKikocjEgKzApXFxcIilcXG4rX194bGF0ZWQoXFxcIncwICs9IDFcXFwiKVxcbitfX3hsYXRlZChcXFwicjIgPSAqKHUzMiAqKShyMSArNClcXFwiKVxcbitfX3hsYXRlZChcXFwiaWYgdzAgc1xcdTAwM2U9IHcyIGdvdG8gcGMrM1xcXCIpXFxuK19feGxhdGVkKFxcXCIqKHUzMiAqKShyMSArMCkgPSByMFxcXCIpXFxuK19feGxhdGVkKFxcXCJyMCA9IHIxXFxcIilcXG4rX194bGF0ZWQoXFxcImdvdG8gcGMrMlxcXCIpXFxuK19feGxhdGVkKFxcXCIqKHU2NCAqKShyMSArMCkgPSAwXFxcIilcXG4rX194bGF0ZWQoXFxcInIwID0gMFxcXCIpXFxuK19feGxhdGVkKFxcXCJpZiByMCAhPSAweDAgZ290byBwYy0xMVxcXCIpXFxuK19feGxhdGVkKFxcXCJyMSA9IHI2XFxcIilcXG4rLyogYnBmX2l0ZXJfbnVtX2Rlc3Ryb3koXFx1MDAyNml0KSBpcyBpbmxpbmVkIHRvIGEgbm9wICovXFxuK19feGxhdGVkKFxcXCJnb3RvIHBjKzBcXFwiKVxcbitfX3hsYXRlZChcXFwicjAgPSAwXFxcIilcXG4rX194bGF0ZWQoXFxcImV4aXRcXFwiKVxcbitpbnQgX19uYWtlZCBpdGVyX251bV9uZXdfaW5saW5lZCh2b2lkKVxcbit7XFxuK1xcdGFzbSB2b2xhdGlsZSAoXFxuK1xcdFxcdC8qIHI2IHBvaW50cyB0byBzdHJ1Y3QgYnBmX2l0ZXJfbnVtIG9uIHRoZSBzdGFjayAqL1xcbitcXHRcXHRcXFwicjYgPSByMTA7XFxcIlxcbitcXHRcXHRcXFwicjYgKz0gLTg7XFxcIlxcbitcXHRcXHQvKiBub24tY29uc3RhbnQgZW5kIHNvIHRoZSByYW5nZSBjaGVja3MgYXJlIGtlcHQgKi9cXG4rXFx0XFx0XFxcImNhbGwgJVticGZfZ2V0X3ByYW5kb21fdTMyXTtcXFwiXFxuK1xcdFxcdFxcXCJyMyA9IHIwO1xcXCJcXG4rXFx0XFx0XFxcInIzIFxcdTAwMjY9IDB4ZmZmZjtcXFwiXFxuK1xcdFxcdFxcXCJyMSA9IHI2O1xcXCJcXG4rXFx0XFx0XFxcInIyID0gMDtcXFwiXFxuK1xcdFxcdFxcXCJjYWxsICVbYnBmX2l0ZXJfbnVtX25ld107XFxcIlxcbitcXHRcXFwiMTpcXFwiXFxuK1xcdFxcdFxcXCJyMSA9IHI2O1xcXCJcXG4rXFx0XFx0XFxcImNhbGwgJVticGZfaXRlcl9udW1fbmV4dF07XFxcIlxcbitcXHRcXHRcXFwiaWYgcjAgIT0gMCBnb3RvIDFiO1xcXCJcXG4rXFx0XFx0XFxcInIxID0gcjY7XFxcIlxcbitcXHRcXHRcXFwiY2FsbCAlW2JwZl9pdGVyX251bV9kZXN0cm95XTtcXFwiXFxuK1xcdFxcdFxcXCJyMCA9IDA7XFxcIlxcbitcXHRcXHRcXFwiZXhpdDtcXFwiXFxuK1xcdFxcdDpcXG4rXFx0XFx0OiBfX2ltbShicGZfZ2V0X3ByYW5kb21fdTMyKSxcXG4rXFx0XFx0ICBfX2ltbShicGZfaXRlcl9udW1fbmV3KSxcXG4rXFx0XFx0ICBfX2ltbShicGZfaXRlcl9udW1fbmV4dCksXFxuK1xcdFxcdCAgX19pbW0oYnBmX2l0ZXJfbnVtX2Rlc3Ryb3kpXFxuK1xcdFxcdDogX19jbG9iYmVyX2NvbW1vbiwgXFxcInI2XFxcIlxcbitcXHQpO1xcbit9XFxuK1xcbiBTRUMoXFxcInJhd190cFxcXCIpXFxuIF9fc3VjY2Vzc1xcbiBpbnQgaXRlcl93aGlsZV9sb29wKGNvbnN0IHZvaWQgKmN0eClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMTQ6MDA6NDQuMTY5NTI0Njk2WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6Njk1OTk5MDIzNDE0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJQRl9TWVNDQUxMXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYnBmX2ZpeHVwX2tmdW5jX2NhbGxcIixcbiAgICBcImJwZl9pdGVyX251bV9uZXdcIixcbiAgICBcImJwZl9pdGVyX251bV9uZXh0XCIsXG4gICAgXCJicGZfaXRlcl9udW1fZGVzdHJveVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBCUEYgbnVtZXJpYyBpdGVyYXRvcnMgKGBicGZfaXRlcl9udW1fbmV3YCwgYGJwZl9pdGVyX251bV9uZXh0YCwgYGJwZl9pdGVyX251bV9kZXN0cm95YCkgYW5kIGFkZHMgaW5saW5pbmcgZm9yIHRoZXNlIGtmdW5jcyBpbiB0aGUgQlBGIHZlcmlmaWVyIChgYnBmX2ZpeHVwX2tmdW5jX2NhbGxgKS4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUgY29yZSBCUEYgc3Vic3lzdGVtIGFuZCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBiZTVkZGY2MmJlNmIxOTEzNzhjMWYwNjIwYWJkOTY5OGYyMjgyMjA0XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBBdWcgNCAxNDowMDo0MiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvYnBmX2l0ZXIuYyBiL2tlcm5lbC9icGYvYnBmX2l0ZXIuY1xuaW5kZXggZjVlYWViMjQ5M2Q0YS4uMTRhNWZkZmEwNDIxNCAxMDA2NDRcbi0tLSBhL2tlcm5lbC9icGYvYnBmX2l0ZXIuY1xuKysrIGIva2VybmVsL2JwZi9icGZfaXRlci5jXG5AQCAtNzgyLDggKzc4Miw4IEBAIF9fYnBmX2tmdW5jIGludCBicGZfaXRlcl9udW1fbmV3KHN0cnVjdCBicGZfaXRlcl9udW0gKml0LCBpbnQgc3RhcnQsIGludCBlbmQpXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFx0fVxuIFxuLVx0LyogYXZvaWQgb3ZlcmZsb3dzLCBlLmcuLCBpZiBzdGFydCA9PSBJTlRfTUlOIGFuZCBlbmQgPT0gSU5UX01BWCAqL1xuLVx0aWYgKChzNjQpZW5kIC0gKHM2NClzdGFydCBcdTAwM2UgQlBGX01BWF9MT09QUykge1xuK1x0Lyogc3RhcnQgXHUwMDNjPSBlbmQgaGVyZSwgc28gZW5kIC0gc3RhcnQgZml0cyBpbiBhIHUzMiB3aXRob3V0IG92ZXJmbG93ICovXG4rXHRpZiAoKHUzMikoZW5kIC0gc3RhcnQpIFx1MDAzZSBCUEZfTUFYX0xPT1BTKSB7XG4gXHRcdHMtXHUwMDNlY3VyID0gcy1cdTAwM2VlbmQgPSAwO1xuIFx0XHRyZXR1cm4gLUUyQklHO1xuIFx0fVxuQEAgLTgwMiwxMiArODAyLDExIEBAIF9fYnBmX2tmdW5jIGludCAqYnBmX2l0ZXJfbnVtX25leHQoc3RydWN0IGJwZl9pdGVyX251bSogaXQpXG4ge1xuIFx0c3RydWN0IGJwZl9pdGVyX251bV9rZXJuICpzID0gKHZvaWQgKilpdDtcbiBcbi1cdC8qIGNoZWNrIGZhaWxlZCBpbml0aWFsaXphdGlvbiBvciBpZiB3ZSBhcmUgZG9uZSAoc2FtZSBiZWhhdmlvcik7XG4tXHQgKiBuZWVkIHRvIGJlIGNhcmVmdWwgYWJvdXQgb3ZlcmZsb3csIHNvIGNvbnZlcnQgdG8gczY0IGZvciBjaGVja3MsXG4tXHQgKiBlLmcuLCBpZiBzLVx1MDAzZWN1ciA9PSBzLVx1MDAzZWVuZCA9PSBJTlRfTUFYLCB3ZSBjYW4ndCBqdXN0IGRvXG4tXHQgKiBzLVx1MDAzZWN1ciArIDEgXHUwMDNlPSBzLVx1MDAzZWVuZFxuK1x0LypcbitcdCAqIHMtXHUwMDNlY3VyIFx1MDAzYyBzLVx1MDAzZWVuZCB3aGlsZSBpdGVyYXRpbmcsIGVsc2Ugcy1cdTAwM2VjdXIgPT0gcy1cdTAwM2VlbmQgPT0gMDsgdGhlIHNpZ25lZFxuK1x0ICogcy1cdTAwM2VjdXIgKyAxIFx1MDAzZT0gcy1cdTAwM2VlbmQgaG9sZHMgZXZlbiB3aGVuIHMtXHUwMDNlY3VyICsgMSB3cmFwcyAoc3RhcnQgPT0gSU5UX01JTikuXG4gXHQgKi9cbi1cdGlmICgoczY0KShzLVx1MDAzZWN1ciArIDEpIFx1MDAzZT0gcy1cdTAwM2VlbmQpIHtcbitcdGlmIChzLVx1MDAzZWN1ciArIDEgXHUwMDNlPSBzLVx1MDAzZWVuZCkge1xuIFx0XHRzLVx1MDAzZWN1ciA9IHMtXHUwMDNlZW5kID0gMDtcbiBcdFx0cmV0dXJuIE5VTEw7XG4gXHR9XG5AQCAtODE5LDkgKzgxOCw3IEBAIF9fYnBmX2tmdW5jIGludCAqYnBmX2l0ZXJfbnVtX25leHQoc3RydWN0IGJwZl9pdGVyX251bSogaXQpXG4gXG4gX19icGZfa2Z1bmMgdm9pZCBicGZfaXRlcl9udW1fZGVzdHJveShzdHJ1Y3QgYnBmX2l0ZXJfbnVtICppdClcbiB7XG4tXHRzdHJ1Y3QgYnBmX2l0ZXJfbnVtX2tlcm4gKnMgPSAodm9pZCAqKWl0O1xuLVxuLVx0cy1cdTAwM2VjdXIgPSBzLVx1MDAzZWVuZCA9IDA7XG4rXHQvKiBuby1vcCAqL1xuIH1cbiBcbiBfX2JwZl9rZnVuY19lbmRfZGVmcygpO1xuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvdmVyaWZpZXIuYyBiL2tlcm5lbC9icGYvdmVyaWZpZXIuY1xuaW5kZXggYjI3NDAwNGZjY2ZkOS4uM2U0NGIwMjA1NzU2YSAxMDA2NDRcbi0tLSBhL2tlcm5lbC9icGYvdmVyaWZpZXIuY1xuKysrIGIva2VybmVsL2JwZi92ZXJpZmllci5jXG5AQCAtMjAwMDEsNiArMjAwMDEsNTEgQEAgaW50IGJwZl9maXh1cF9rZnVuY19jYWxsKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfaW5zbiAqaW5zbixcbiBcdFx0aW5zbl9idWZbNF0gPSBCUEZfQUxVNjRfUkVHKEJQRl9TVUIsIEJQRl9SRUdfMCwgQlBGX1JFR18xKTtcbiBcdFx0aW5zbl9idWZbNV0gPSBCUEZfQUxVNjRfSU1NKEJQRl9ORUcsIEJQRl9SRUdfMCwgMCk7XG4gXHRcdCpjbnQgPSA2O1xuK1x0fSBlbHNlIGlmIChkZXNjLVx1MDAzZWZ1bmNfaWQgPT0gc3BlY2lhbF9rZnVuY19saXN0W0tGX2JwZl9pdGVyX251bV9uZXddKSB7XG4rXHRcdC8qIGlubGluZSBicGZfaXRlcl9udW1fbmV3KFx1MDAyNml0LCBzdGFydCwgZW5kKTsgUjE9XHUwMDI2aXQsIFIyPXN0YXJ0LCBSMz1lbmQgKi9cbitcdFx0aW50IGkgPSAwO1xuK1xuK1x0XHQvKiBpZiAoc3RhcnQgXHUwMDNlIGVuZCkgZ290byBlaW52YWw7ICovXG4rXHRcdGluc25fYnVmW2krK10gPSBCUEZfSk1QMzJfUkVHKEJQRl9KU0dULCBCUEZfUkVHXzIsIEJQRl9SRUdfMywgOCk7XG4rXHRcdC8qIHIwID0gKHUzMillbmQgLSAodTMyKXN0YXJ0OyBpZiAocjAgXHUwMDNlIEJQRl9NQVhfTE9PUFMpIGdvdG8gZTJiaWc7ICovXG4rXHRcdGluc25fYnVmW2krK10gPSBCUEZfTU9WMzJfUkVHKEJQRl9SRUdfMCwgQlBGX1JFR18zKTtcbitcdFx0aW5zbl9idWZbaSsrXSA9IEJQRl9BTFUzMl9SRUcoQlBGX1NVQiwgQlBGX1JFR18wLCBCUEZfUkVHXzIpO1xuK1x0XHRpbnNuX2J1ZltpKytdID0gQlBGX0pNUF9JTU0oQlBGX0pHVCwgQlBGX1JFR18wLCBCUEZfTUFYX0xPT1BTLCA4KTtcbitcdFx0Lyogcy1cdTAwM2VjdXIgPSBzdGFydCAtIDE7IHMtXHUwMDNlZW5kID0gZW5kOyByZXR1cm4gMDsgKi9cbitcdFx0aW5zbl9idWZbaSsrXSA9IEJQRl9BTFUzMl9JTU0oQlBGX0FERCwgQlBGX1JFR18yLCAtMSk7XG4rXHRcdGluc25fYnVmW2krK10gPSBCUEZfU1RYX01FTShCUEZfVywgQlBGX1JFR18xLCBCUEZfUkVHXzIsIDApO1xuK1x0XHRpbnNuX2J1ZltpKytdID0gQlBGX1NUWF9NRU0oQlBGX1csIEJQRl9SRUdfMSwgQlBGX1JFR18zLCA0KTtcbitcdFx0aW5zbl9idWZbaSsrXSA9IEJQRl9NT1Y2NF9JTU0oQlBGX1JFR18wLCAwKTtcbitcdFx0aW5zbl9idWZbaSsrXSA9IEJQRl9KTVBfQSg1KTtcbitcdFx0LyogZWludmFsOiBzLVx1MDAzZWN1ciA9IHMtXHUwMDNlZW5kID0gMDsgcmV0dXJuIC1FSU5WQUw7ICovXG4rXHRcdGluc25fYnVmW2krK10gPSBCUEZfU1RfTUVNKEJQRl9EVywgQlBGX1JFR18xLCAwLCAwKTtcbitcdFx0aW5zbl9idWZbaSsrXSA9IEJQRl9NT1Y2NF9JTU0oQlBGX1JFR18wLCAtRUlOVkFMKTtcbitcdFx0aW5zbl9idWZbaSsrXSA9IEJQRl9KTVBfQSgyKTtcbitcdFx0LyogZTJiaWc6IHMtXHUwMDNlY3VyID0gcy1cdTAwM2VlbmQgPSAwOyByZXR1cm4gLUUyQklHOyAqL1xuK1x0XHRpbnNuX2J1ZltpKytdID0gQlBGX1NUX01FTShCUEZfRFcsIEJQRl9SRUdfMSwgMCwgMCk7XG4rXHRcdGluc25fYnVmW2krK10gPSBCUEZfTU9WNjRfSU1NKEJQRl9SRUdfMCwgLUUyQklHKTtcbitcdFx0KmNudCA9IGk7XG4rXHR9IGVsc2UgaWYgKGRlc2MtXHUwMDNlZnVuY19pZCA9PSBzcGVjaWFsX2tmdW5jX2xpc3RbS0ZfYnBmX2l0ZXJfbnVtX25leHRdKSB7XG4rXHRcdC8qIGlubGluZSBicGZfaXRlcl9udW1fbmV4dChcdTAwMjZpdCk7IFIxPVx1MDAyNml0LCByZXR1cm5zIFx1MDAyNnMtXHUwMDNlY3VyIG9yIE5VTEwgKi9cbitcdFx0aW50IGkgPSAwO1xuK1xuK1x0XHQvKiByMCA9IHMtXHUwMDNlY3VyICsgMTsgaWYgKChzMzIpcjAgXHUwMDNlPSBzLVx1MDAzZWVuZCkgZ290byBkb25lOyAqL1xuK1x0XHRpbnNuX2J1ZltpKytdID0gQlBGX0xEWF9NRU0oQlBGX1csIEJQRl9SRUdfMCwgQlBGX1JFR18xLCAwKTtcbitcdFx0aW5zbl9idWZbaSsrXSA9IEJQRl9BTFUzMl9JTU0oQlBGX0FERCwgQlBGX1JFR18wLCAxKTtcbitcdFx0aW5zbl9idWZbaSsrXSA9IEJQRl9MRFhfTUVNKEJQRl9XLCBCUEZfUkVHXzIsIEJQRl9SRUdfMSwgNCk7XG4rXHRcdGluc25fYnVmW2krK10gPSBCUEZfSk1QMzJfUkVHKEJQRl9KU0dFLCBCUEZfUkVHXzAsIEJQRl9SRUdfMiwgMyk7XG4rXHRcdC8qIHMtXHUwMDNlY3VyID0gcjA7IHJldHVybiBcdTAwMjZzLVx1MDAzZWN1cjsgKi9cbitcdFx0aW5zbl9idWZbaSsrXSA9IEJQRl9TVFhfTUVNKEJQRl9XLCBCUEZfUkVHXzEsIEJQRl9SRUdfMCwgMCk7XG4rXHRcdGluc25fYnVmW2krK10gPSBCUEZfTU9WNjRfUkVHKEJQRl9SRUdfMCwgQlBGX1JFR18xKTtcbitcdFx0aW5zbl9idWZbaSsrXSA9IEJQRl9KTVBfQSgyKTtcbitcdFx0LyogZG9uZTogcy1cdTAwM2VjdXIgPSBzLVx1MDAzZWVuZCA9IDA7IHJldHVybiBOVUxMOyAqL1xuK1x0XHRpbnNuX2J1ZltpKytdID0gQlBGX1NUX01FTShCUEZfRFcsIEJQRl9SRUdfMSwgMCwgMCk7XG4rXHRcdGluc25fYnVmW2krK10gPSBCUEZfTU9WNjRfSU1NKEJQRl9SRUdfMCwgMCk7XG4rXHRcdCpjbnQgPSBpO1xuK1x0fSBlbHNlIGlmIChkZXNjLVx1MDAzZWZ1bmNfaWQgPT0gc3BlY2lhbF9rZnVuY19saXN0W0tGX2JwZl9pdGVyX251bV9kZXN0cm95XSkge1xuK1x0XHQvKiBicGZfaXRlcl9udW1fZGVzdHJveSgpIGlzIGEgbm8tb3A7IGVtaXQgYSBub3AgdG8gZHJvcCB0aGUgY2FsbCAqL1xuK1x0XHRpbnNuX2J1ZlswXSA9IEJQRl9KTVBfQSgwKTtcbitcdFx0KmNudCA9IDE7XG4gXHR9XG4gXG4gXHRpZiAoZW52LVx1MDAzZWluc25fYXV4X2RhdGFbaW5zbl9pZHhdLmFyZ19wcm9nKSB7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL01ha2VmaWxlIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL01ha2VmaWxlXG5pbmRleCA1NWQzOTQ0Mzg3MDVhLi4zMTc0YzJmMThlNzE1IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL01ha2VmaWxlXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvTWFrZWZpbGVcbkBAIC05NjUsNiArOTY1LDcgQEAgJChPVVRQVVQpL2JlbmNoX3JpbmdidWZzLm86ICQoT1VUUFVUKS9yaW5nYnVmX2JlbmNoLnNrZWwuaCBcXFxuIFx0XHRcdCAgICAkKE9VVFBVVCkvcGVyZmJ1Zl9iZW5jaC5za2VsLmhcbiAkKE9VVFBVVCkvYmVuY2hfYmxvb21fZmlsdGVyX21hcC5vOiAkKE9VVFBVVCkvYmxvb21fZmlsdGVyX2JlbmNoLnNrZWwuaFxuICQoT1VUUFVUKS9iZW5jaF9icGZfbG9vcC5vOiAkKE9VVFBVVCkvYnBmX2xvb3BfYmVuY2guc2tlbC5oXG4rJChPVVRQVVQpL2JlbmNoX2JwZl9mb3IubzogJChPVVRQVVQpL2JwZl9mb3JfYmVuY2guc2tlbC5oXG4gJChPVVRQVVQpL2JlbmNoX3N0cm5jbXAubzogJChPVVRQVVQpL3N0cm5jbXBfYmVuY2guc2tlbC5oXG4gJChPVVRQVVQpL2JlbmNoX2JwZl9oYXNobWFwX2Z1bGxfdXBkYXRlLm86ICQoT1VUUFVUKS9icGZfaGFzaG1hcF9mdWxsX3VwZGF0ZV9iZW5jaC5za2VsLmhcbiAkKE9VVFBVVCkvYmVuY2hfbG9jYWxfc3RvcmFnZS5vOiAkKE9VVFBVVCkvbG9jYWxfc3RvcmFnZV9iZW5jaC5za2VsLmhcbkBAIC05OTAsNiArOTkxLDcgQEAgJChPVVRQVVQpL2JlbmNoOiAkKE9VVFBVVCkvYmVuY2gubyBcXFxuIFx0XHQgJChPVVRQVVQpL2JlbmNoX3JpbmdidWZzLm8gXFxcbiBcdFx0ICQoT1VUUFVUKS9iZW5jaF9ibG9vbV9maWx0ZXJfbWFwLm8gXFxcbiBcdFx0ICQoT1VUUFVUKS9iZW5jaF9icGZfbG9vcC5vIFxcXG4rXHRcdCAkKE9VVFBVVCkvYmVuY2hfYnBmX2Zvci5vIFxcXG4gXHRcdCAkKE9VVFBVVCkvYmVuY2hfc3RybmNtcC5vIFxcXG4gXHRcdCAkKE9VVFBVVCkvYmVuY2hfYnBmX2hhc2htYXBfZnVsbF91cGRhdGUubyBcXFxuIFx0XHQgJChPVVRQVVQpL2JlbmNoX2xvY2FsX3N0b3JhZ2UubyBcXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9iZW5jaC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JlbmNoLmNcbmluZGV4IDNkOWQyY2Q3NzY0YmQuLmI4NmI3MzQ1NmQzY2EgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYmVuY2guY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JlbmNoLmNcbkBAIC0yNzYsNiArMjc2LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBhcmdwX29wdGlvbiBvcHRzW10gPSB7XG4gZXh0ZXJuIHN0cnVjdCBhcmdwIGJlbmNoX3JpbmdidWZzX2FyZ3A7XG4gZXh0ZXJuIHN0cnVjdCBhcmdwIGJlbmNoX2Jsb29tX21hcF9hcmdwO1xuIGV4dGVybiBzdHJ1Y3QgYXJncCBiZW5jaF9icGZfbG9vcF9hcmdwO1xuK2V4dGVybiBzdHJ1Y3QgYXJncCBiZW5jaF9icGZfZm9yX2FyZ3A7XG4gZXh0ZXJuIHN0cnVjdCBhcmdwIGJlbmNoX2xvY2FsX3N0b3JhZ2VfYXJncDtcbiBleHRlcm4gc3RydWN0IGFyZ3AgYmVuY2hfbG9jYWxfc3RvcmFnZV9yY3VfdGFza3NfdHJhY2VfYXJncDtcbiBleHRlcm4gc3RydWN0IGFyZ3AgYmVuY2hfc3RybmNtcF9hcmdwO1xuQEAgLTI5Miw2ICsyOTMsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGFyZ3BfY2hpbGQgYmVuY2hfcGFyc2Vyc1tdID0ge1xuIFx0eyBcdTAwMjZiZW5jaF9yaW5nYnVmc19hcmdwLCAwLCBcIlJpbmcgYnVmZmVycyBiZW5jaG1hcmtcIiwgMCB9LFxuIFx0eyBcdTAwMjZiZW5jaF9ibG9vbV9tYXBfYXJncCwgMCwgXCJCbG9vbSBmaWx0ZXIgbWFwIGJlbmNobWFya1wiLCAwIH0sXG4gXHR7IFx1MDAyNmJlbmNoX2JwZl9sb29wX2FyZ3AsIDAsIFwiYnBmX2xvb3AgaGVscGVyIGJlbmNobWFya1wiLCAwIH0sXG4rXHR7IFx1MDAyNmJlbmNoX2JwZl9mb3JfYXJncCwgMCwgXCJicGZfZm9yIGxvb3AgYmVuY2htYXJrXCIsIDAgfSxcbiBcdHsgXHUwMDI2YmVuY2hfbG9jYWxfc3RvcmFnZV9hcmdwLCAwLCBcImxvY2FsX3N0b3JhZ2UgYmVuY2htYXJrXCIsIDAgfSxcbiBcdHsgXHUwMDI2YmVuY2hfc3RybmNtcF9hcmdwLCAwLCBcImJwZl9zdHJuY21wIGhlbHBlciBiZW5jaG1hcmtcIiwgMCB9LFxuIFx0eyBcdTAwMjZiZW5jaF9sb2NhbF9zdG9yYWdlX3JjdV90YXNrc190cmFjZV9hcmdwLCAwLFxuQEAgLTU1Nyw2ICs1NTksNyBAQCBleHRlcm4gY29uc3Qgc3RydWN0IGJlbmNoIGJlbmNoX2Jsb29tX2ZhbHNlX3Bvc2l0aXZlO1xuIGV4dGVybiBjb25zdCBzdHJ1Y3QgYmVuY2ggYmVuY2hfaGFzaG1hcF93aXRob3V0X2Jsb29tO1xuIGV4dGVybiBjb25zdCBzdHJ1Y3QgYmVuY2ggYmVuY2hfaGFzaG1hcF93aXRoX2Jsb29tO1xuIGV4dGVybiBjb25zdCBzdHJ1Y3QgYmVuY2ggYmVuY2hfYnBmX2xvb3A7XG4rZXh0ZXJuIGNvbnN0IHN0cnVjdCBiZW5jaCBiZW5jaF9icGZfZm9yO1xuIGV4dGVybiBjb25zdCBzdHJ1Y3QgYmVuY2ggYmVuY2hfc3RybmNtcF9ub19oZWxwZXI7XG4gZXh0ZXJuIGNvbnN0IHN0cnVjdCBiZW5jaCBiZW5jaF9zdHJuY21wX2hlbHBlcjtcbiBleHRlcm4gY29uc3Qgc3RydWN0IGJlbmNoIGJlbmNoX2JwZl9oYXNobWFwX2Z1bGxfdXBkYXRlO1xuQEAgLTY0MCw2ICs2NDMsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGJlbmNoICpiZW5jaHNbXSA9IHtcbiBcdFx1MDAyNmJlbmNoX2hhc2htYXBfd2l0aG91dF9ibG9vbSxcbiBcdFx1MDAyNmJlbmNoX2hhc2htYXBfd2l0aF9ibG9vbSxcbiBcdFx1MDAyNmJlbmNoX2JwZl9sb29wLFxuK1x0XHUwMDI2YmVuY2hfYnBmX2ZvcixcbiBcdFx1MDAyNmJlbmNoX3N0cm5jbXBfbm9faGVscGVyLFxuIFx0XHUwMDI2YmVuY2hfc3RybmNtcF9oZWxwZXIsXG4gXHRcdTAwMjZiZW5jaF9icGZfaGFzaG1hcF9mdWxsX3VwZGF0ZSxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYmVuY2hzL2JlbmNoX2JwZl9mb3IuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9iZW5jaHMvYmVuY2hfYnBmX2Zvci5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uNzMwYzUxYWQyZGVjM1xuLS0tIC9kZXYvbnVsbFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JlbmNocy9iZW5jaF9icGZfZm9yLmNcbkBAIC0wLDAgKzEsMTA0IEBAXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbisvKiBDb3B5cmlnaHQgKGMpIDIwMjYgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuICovXG4rXG4rI2luY2x1ZGUgXHUwMDNjYXJncC5oXHUwMDNlXG4rI2luY2x1ZGUgXCJiZW5jaC5oXCJcbisjaW5jbHVkZSBcImJwZl9mb3JfYmVuY2guc2tlbC5oXCJcbitcbisvKiBCUEYgdHJpZ2dlcmluZyBiZW5jaG1hcmtzICovXG4rc3RhdGljIHN0cnVjdCBjdHgge1xuK1x0c3RydWN0IGJwZl9mb3JfYmVuY2ggKnNrZWw7XG4rfSBjdHg7XG4rXG4rc3RhdGljIHN0cnVjdCB7XG4rXHRfX3UzMiBucl9sb29wcztcbit9IGFyZ3MgPSB7XG4rXHQvKlxuK1x0ICogRGVmYXVsdCB0byBhIGxhcmdlIGxvb3AgY291bnQgc28gdGhlIHBlci1pdGVyYXRpb24gYnBmX2l0ZXJfbnVtX25leHQoKSBjb3N0IGRvbWluYXRlc1xuK1x0ICogdGhlIG9uZS10aW1lIGJwZl9pdGVyX251bV9uZXcoKS9kZXN0cm95KCkgc2V0dXAgYW5kIHRlYXJkb3duLlxuK1x0ICovXG4rXHQubnJfbG9vcHMgPSAxMDAwLFxuK307XG4rXG4rZW51bSB7XG4rXHRBUkdfTlJfTE9PUFMgPSA0MDAwLFxuK307XG4rXG4rc3RhdGljIGNvbnN0IHN0cnVjdCBhcmdwX29wdGlvbiBvcHRzW10gPSB7XG4rXHR7IFwibnJfbG9vcHNcIiwgQVJHX05SX0xPT1BTLCBcIm5yX2xvb3BzXCIsIDAsXG4rXHRcdFwiU2V0IG51bWJlciBvZiBpdGVyYXRpb25zIGZvciB0aGUgYnBmX2ZvcigpIGxvb3BcIn0sXG4rXHR7fSxcbit9O1xuK1xuK3N0YXRpYyBlcnJvcl90IHBhcnNlX2FyZyhpbnQga2V5LCBjaGFyICphcmcsIHN0cnVjdCBhcmdwX3N0YXRlICpzdGF0ZSlcbit7XG4rXHRzd2l0Y2ggKGtleSkge1xuK1x0Y2FzZSBBUkdfTlJfTE9PUFM6XG4rXHRcdGFyZ3MubnJfbG9vcHMgPSBzdHJ0b2woYXJnLCBOVUxMLCAxMCk7XG4rXHRcdGJyZWFrO1xuK1x0ZGVmYXVsdDpcbitcdFx0cmV0dXJuIEFSR1BfRVJSX1VOS05PV047XG4rXHR9XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rLyogZXhwb3J0ZWQgaW50byBiZW5jaG1hcmsgcnVubmVyICovXG4rY29uc3Qgc3RydWN0IGFyZ3AgYmVuY2hfYnBmX2Zvcl9hcmdwID0ge1xuK1x0Lm9wdGlvbnMgPSBvcHRzLFxuK1x0LnBhcnNlciA9IHBhcnNlX2FyZyxcbit9O1xuK1xuK3N0YXRpYyB2b2lkIHZhbGlkYXRlKHZvaWQpXG4re1xuK1x0aWYgKGVudi5jb25zdW1lcl9jbnQgIT0gMCkge1xuK1x0XHRmcHJpbnRmKHN0ZGVyciwgXCJiZW5jaG1hcmsgZG9lc24ndCBzdXBwb3J0IGNvbnN1bWVyIVxcblwiKTtcbitcdFx0ZXhpdCgxKTtcbitcdH1cbit9XG4rXG4rc3RhdGljIHZvaWQgKnByb2R1Y2VyKHZvaWQgKmlucHV0KVxuK3tcbitcdHdoaWxlICh0cnVlKVxuK1x0XHQvKiB0cmlnZ2VyIHRoZSBicGYgcHJvZ3JhbSAqL1xuK1x0XHRzeXNjYWxsKF9fTlJfZ2V0cGdpZCk7XG4rXG4rXHRyZXR1cm4gTlVMTDtcbit9XG4rXG4rc3RhdGljIHZvaWQgbWVhc3VyZShzdHJ1Y3QgYmVuY2hfcmVzICpyZXMpXG4re1xuK1x0cmVzLVx1MDAzZWhpdHMgPSBhdG9taWNfc3dhcChcdTAwMjZjdHguc2tlbC1cdTAwM2Vic3MtXHUwMDNlaGl0cywgMCk7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIHNldHVwKHZvaWQpXG4re1xuK1x0c3RydWN0IGJwZl9saW5rICpsaW5rO1xuK1xuK1x0c2V0dXBfbGliYnBmKCk7XG4rXG4rXHRjdHguc2tlbCA9IGJwZl9mb3JfYmVuY2hfX29wZW5fYW5kX2xvYWQoKTtcbitcdGlmICghY3R4LnNrZWwpIHtcbitcdFx0ZnByaW50ZihzdGRlcnIsIFwiZmFpbGVkIHRvIG9wZW4gc2tlbGV0b25cXG5cIik7XG4rXHRcdGV4aXQoMSk7XG4rXHR9XG4rXG4rXHRsaW5rID0gYnBmX3Byb2dyYW1fX2F0dGFjaChjdHguc2tlbC1cdTAwM2Vwcm9ncy5iZW5jaG1hcmspO1xuK1x0aWYgKCFsaW5rKSB7XG4rXHRcdGZwcmludGYoc3RkZXJyLCBcImZhaWxlZCB0byBhdHRhY2ggcHJvZ3JhbSFcXG5cIik7XG4rXHRcdGV4aXQoMSk7XG4rXHR9XG4rXG4rXHRjdHguc2tlbC1cdTAwM2Vic3MtXHUwMDNlbnJfbG9vcHMgPSBhcmdzLm5yX2xvb3BzO1xuK31cbitcbitjb25zdCBzdHJ1Y3QgYmVuY2ggYmVuY2hfYnBmX2ZvciA9IHtcbitcdC5uYW1lID0gXCJicGYtZm9yXCIsXG4rXHQuYXJncCA9IFx1MDAyNmJlbmNoX2JwZl9mb3JfYXJncCxcbitcdC52YWxpZGF0ZSA9IHZhbGlkYXRlLFxuK1x0LnNldHVwID0gc2V0dXAsXG4rXHQucHJvZHVjZXJfdGhyZWFkID0gcHJvZHVjZXIsXG4rXHQubWVhc3VyZSA9IG1lYXN1cmUsXG4rXHQucmVwb3J0X3Byb2dyZXNzID0gb3BzX3JlcG9ydF9wcm9ncmVzcyxcbitcdC5yZXBvcnRfZmluYWwgPSBvcHNfcmVwb3J0X2ZpbmFsLFxuK307XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JlbmNocy9ydW5fYmVuY2hfYnBmX2Zvci5zaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9iZW5jaHMvcnVuX2JlbmNoX2JwZl9mb3Iuc2hcbm5ldyBmaWxlIG1vZGUgMTAwNzU1XG5pbmRleCAwMDAwMDAwMDAwMDAwLi43ZGE2NDUzOTIwZGFiXG4tLS0gL2Rldi9udWxsXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYmVuY2hzL3J1bl9iZW5jaF9icGZfZm9yLnNoXG5AQCAtMCwwICsxLDE1IEBAXG4rIyEvYmluL2Jhc2hcbisjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4rXG4rc291cmNlIC4vYmVuY2hzL3J1bl9jb21tb24uc2hcbitcbitzZXQgLWV1Zm8gcGlwZWZhaWxcbitcbitmb3IgdCBpbiAxIDQgOCAxMiAxNjsgZG9cbitmb3IgaSBpbiAxMCAxMDAgNTAwIDEwMDAgNTAwMCAxMDAwMCA1MDAwMCAxMDAwMDAgNTAwMDAwIDEwMDAwMDA7IGRvXG4rc3VidGl0bGUgXCJucl9sb29wczogJGksIG5yX3RocmVhZHM6ICR0XCJcbitcdHN1bW1hcml6ZV9vcHMgXCJicGZfZm9yOiBcIiBcXFxuK1x0ICAgIFwiJCgkUlVOX0JFTkNIIC1wICR0IC0tbnJfbG9vcHMgJGkgYnBmLWZvcilcIlxuK1x0cHJpbnRmIFwiXFxuXCJcbitkb25lXG4rZG9uZVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9icGZfZm9yX2JlbmNoLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYnBmX2Zvcl9iZW5jaC5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uZjljNzIzMDUxZmM3NFxuLS0tIC9kZXYvbnVsbFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2JwZl9mb3JfYmVuY2guY1xuQEAgLTAsMCArMSwzMiBAQFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4rLyogQ29weXJpZ2h0IChjKSAyMDI2IE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLiAqL1xuK1xuKyNpbmNsdWRlIFwidm1saW51eC5oXCJcbisjaW5jbHVkZSBcdTAwM2NicGYvYnBmX2hlbHBlcnMuaFx1MDAzZVxuKyNpbmNsdWRlIFwiYnBmX21pc2MuaFwiXG4rXG4rY2hhciBfbGljZW5zZVtdIFNFQyhcImxpY2Vuc2VcIikgPSBcIkdQTFwiO1xuK1xuK2ludCBucl9sb29wcztcbitsb25nIGhpdHM7XG4rXG4rc3RhdGljIGludCBvdXRlcl9sb29wKF9fdTMyIGluZGV4LCB2b2lkICpkYXRhKVxuK3tcbitcdGludCBpO1xuK1xuK1x0LypcbitcdCAqIEVtcHR5IGJvZHk6IHRoZSB3b3JrIGJlaW5nIG1lYXN1cmVkIGlzIHRoZSBvcGVuLWNvZGVkIG51bWVyaWMgaXRlcmF0b3IgaXRzZWxmXG4rXHQgKiAoYnBmX2l0ZXJfbnVtX25ldy9uZXh0L2Rlc3Ryb3kgYmVoaW5kIGJwZl9mb3IoKSkuXG4rXHQgKi9cbitcdGJwZl9mb3IoaSwgMCwgbnJfbG9vcHMpXG4rXHRcdDtcbitcdF9fc3luY19hZGRfYW5kX2ZldGNoKFx1MDAyNmhpdHMsIG5yX2xvb3BzKTtcbitcdHJldHVybiAwO1xuK31cbitcbitTRUMoXCJmZW50cnkvXCIgU1lTX1BSRUZJWCBcInN5c19nZXRwZ2lkXCIpXG4raW50IGJlbmNobWFyayh2b2lkICpjdHgpXG4re1xuK1x0YnBmX2xvb3AoMTAwMCwgb3V0ZXJfbG9vcCwgTlVMTCwgMCk7XG4rXHRyZXR1cm4gMDtcbit9XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2l0ZXJzLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvaXRlcnMuY1xuaW5kZXggMGZhNzBiMTMzZDkzMi4uNjJkN2RmOWU4MGJlYiAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9pdGVycy5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvaXRlcnMuY1xuQEAgLTg4LDYgKzg4LDg5IEBAIGludCBpdGVyX2Vycl91bnNhZmVfYXNtX2xvb3AoY29uc3Qgdm9pZCAqY3R4KVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuKy8qXG4rICogTmFrZWQgZnVuY3Rpb24sIHNvIHRoZXJlIGlzIG5vIGNvbXBpbGVyLWdlbmVyYXRlZCBnbHVlIGFuZCB0aGUgd2hvbGUgaW5saW5lZCBwcm9ncmFtIGNhbiBiZVxuKyAqIG1hdGNoZWQuIFBpbm5lZCB0byBhcmNoZXMgd2hvc2UgSklUcyB6ZXJvLWV4dGVuZCAzMi1iaXQgd3JpdGVzIGltcGxpY2l0bHlcbisgKiAoYnBmX2ppdF9uZWVkc196ZXh0KCkgPT0gZmFsc2UpOyBvbiBhcmNoZXMgdGhhdCBuZWVkIGV4cGxpY2l0IHplcm8tZXh0ZW5zaW9uIHRoZSB2ZXJpZmllclxuKyAqIGludGVybGVhdmVzIFwid04gPSB3TlwiIGluc25zIGFuZCB0aGUgZml4ZWQgc2hhcGUgYmVsb3cgd291bGQgbm90IG1hdGNoLiBUaGUgaW5saW5pbmcgaXRzZWxmIGlzXG4rICogYXJjaCBpbmRlcGVuZGVudCwgc28gY2hlY2tpbmcgaXQgb24gdGhlc2UgYXJjaGVzIGlzIHN1ZmZpY2llbnQuXG4rICpcbisgKiBicGZfaXRlcl9udW1fbmV3KCkgZW1pdHMgdGhlIGZ1bGwgcmFuZ2UgY2hlY2sgKGRpc3RhbmNlIGNvbXB1dGF0aW9uIGFuZCBib3RoIHRoZSAtRUlOVkFMIGFuZFxuKyAqIC1FMkJJRyBlcnJvciBwYXRocyk7IGJwZl9pdGVyX251bV9uZXh0KCkgYW5kIGJwZl9pdGVyX251bV9kZXN0cm95KCkgYXJlIGlubGluZWQgdG9vLlxuKyAqL1xuK1NFQyhcInJhd190cFwiKVxuK19fYXJjaF94ODZfNjRcbitfX2FyY2hfYXJtNjRcbitfX3N1Y2Nlc3NcbitfX3hsYXRlZChcInI2ID0gcjEwXCIpXG4rX194bGF0ZWQoXCJyNiArPSAtOFwiKVxuK19feGxhdGVkKFwiY2FsbCB1bmtub3duXCIpXG4rX194bGF0ZWQoXCJyMyA9IHIwXCIpXG4rX194bGF0ZWQoXCJyMyBcdTAwMjY9IDY1NTM1XCIpXG4rX194bGF0ZWQoXCJyMSA9IHI2XCIpXG4rX194bGF0ZWQoXCJyMiA9IDBcIilcbisvKiBicGZfaXRlcl9udW1fbmV3KFx1MDAyNml0LCAwLCBcdTAwM2Nub24tY29uc3RcdTAwM2UpIHdpdGggdGhlIHJhbmdlIGNoZWNrIGtlcHQgKi9cbitfX3hsYXRlZChcImlmIHcyIHNcdTAwM2UgdzMgZ290byBwYys4XCIpXG4rX194bGF0ZWQoXCJ3MCA9IHczXCIpXG4rX194bGF0ZWQoXCJ3MCAtPSB3MlwiKVxuK19feGxhdGVkKFwiaWYgcjAgXHUwMDNlIDB4ODAwMDAwIGdvdG8gcGMrOFwiKVxuK19feGxhdGVkKFwidzIgKz0gLTFcIilcbitfX3hsYXRlZChcIioodTMyICopKHIxICswKSA9IHIyXCIpXG4rX194bGF0ZWQoXCIqKHUzMiAqKShyMSArNCkgPSByM1wiKVxuK19feGxhdGVkKFwicjAgPSAwXCIpXG4rX194bGF0ZWQoXCJnb3RvIHBjKzVcIilcbitfX3hsYXRlZChcIioodTY0ICopKHIxICswKSA9IDBcIilcbitfX3hsYXRlZChcInIwID0gLTIyXCIpXG4rX194bGF0ZWQoXCJnb3RvIHBjKzJcIilcbitfX3hsYXRlZChcIioodTY0ICopKHIxICswKSA9IDBcIilcbitfX3hsYXRlZChcInIwID0gLTdcIilcbitfX3hsYXRlZChcInIxID0gcjZcIilcbisvKiBicGZfaXRlcl9udW1fbmV4dChcdTAwMjZpdCkgKi9cbitfX3hsYXRlZChcInIwID0gKih1MzIgKikocjEgKzApXCIpXG4rX194bGF0ZWQoXCJ3MCArPSAxXCIpXG4rX194bGF0ZWQoXCJyMiA9ICoodTMyICopKHIxICs0KVwiKVxuK19feGxhdGVkKFwiaWYgdzAgc1x1MDAzZT0gdzIgZ290byBwYyszXCIpXG4rX194bGF0ZWQoXCIqKHUzMiAqKShyMSArMCkgPSByMFwiKVxuK19feGxhdGVkKFwicjAgPSByMVwiKVxuK19feGxhdGVkKFwiZ290byBwYysyXCIpXG4rX194bGF0ZWQoXCIqKHU2NCAqKShyMSArMCkgPSAwXCIpXG4rX194bGF0ZWQoXCJyMCA9IDBcIilcbitfX3hsYXRlZChcImlmIHIwICE9IDB4MCBnb3RvIHBjLTExXCIpXG4rX194bGF0ZWQoXCJyMSA9IHI2XCIpXG4rLyogYnBmX2l0ZXJfbnVtX2Rlc3Ryb3koXHUwMDI2aXQpIGlzIGlubGluZWQgdG8gYSBub3AgKi9cbitfX3hsYXRlZChcImdvdG8gcGMrMFwiKVxuK19feGxhdGVkKFwicjAgPSAwXCIpXG4rX194bGF0ZWQoXCJleGl0XCIpXG4raW50IF9fbmFrZWQgaXRlcl9udW1fbmV3X2lubGluZWQodm9pZClcbit7XG4rXHRhc20gdm9sYXRpbGUgKFxuK1x0XHQvKiByNiBwb2ludHMgdG8gc3RydWN0IGJwZl9pdGVyX251bSBvbiB0aGUgc3RhY2sgKi9cbitcdFx0XCJyNiA9IHIxMDtcIlxuK1x0XHRcInI2ICs9IC04O1wiXG4rXHRcdC8qIG5vbi1jb25zdGFudCBlbmQgc28gdGhlIHJhbmdlIGNoZWNrcyBhcmUga2VwdCAqL1xuK1x0XHRcImNhbGwgJVticGZfZ2V0X3ByYW5kb21fdTMyXTtcIlxuK1x0XHRcInIzID0gcjA7XCJcbitcdFx0XCJyMyBcdTAwMjY9IDB4ZmZmZjtcIlxuK1x0XHRcInIxID0gcjY7XCJcbitcdFx0XCJyMiA9IDA7XCJcbitcdFx0XCJjYWxsICVbYnBmX2l0ZXJfbnVtX25ld107XCJcbitcdFwiMTpcIlxuK1x0XHRcInIxID0gcjY7XCJcbitcdFx0XCJjYWxsICVbYnBmX2l0ZXJfbnVtX25leHRdO1wiXG4rXHRcdFwiaWYgcjAgIT0gMCBnb3RvIDFiO1wiXG4rXHRcdFwicjEgPSByNjtcIlxuK1x0XHRcImNhbGwgJVticGZfaXRlcl9udW1fZGVzdHJveV07XCJcbitcdFx0XCJyMCA9IDA7XCJcbitcdFx0XCJleGl0O1wiXG4rXHRcdDpcbitcdFx0OiBfX2ltbShicGZfZ2V0X3ByYW5kb21fdTMyKSxcbitcdFx0ICBfX2ltbShicGZfaXRlcl9udW1fbmV3KSxcbitcdFx0ICBfX2ltbShicGZfaXRlcl9udW1fbmV4dCksXG4rXHRcdCAgX19pbW0oYnBmX2l0ZXJfbnVtX2Rlc3Ryb3kpXG4rXHRcdDogX19jbG9iYmVyX2NvbW1vbiwgXCJyNlwiXG4rXHQpO1xuK31cbitcbiBTRUMoXCJyYXdfdHBcIilcbiBfX3N1Y2Nlc3NcbiBpbnQgaXRlcl93aGlsZV9sb29wKGNvbnN0IHZvaWQgKmN0eClcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDE0OjAwOjQ0LjE2OTUyNzE2NloiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI5MTc4NzkxNDQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIEJQRiBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggdGhhdCB0d2Vha3MgYGtlcm5lbC9icGYvYnBmX2l0ZXIuY2AgYW5kIGBrZXJuZWwvYnBmL3ZlcmlmaWVyLmNgLiBJdCBsb29rcyBsaWtlIHdlJ3JlIGNoYW5naW5nIHRoZSB3YXkgYGJwZl9pdGVyX251bV9uZXdgLCBgYnBmX2l0ZXJfbnVtX25leHRgLCBhbmQgYGJwZl9pdGVyX251bV9kZXN0cm95YCB3b3JrIHdpdGhpbiB0aGUgaXRlcmF0b3IgaW1wbGVtZW50YXRpb24sIGJ1dCBzcGVjaWZpY2FsbHksIGl0J3MgYWRkaW5nIGlubGluaW5nIG9mIHRoZXNlIGZ1bmN0aW9ucyBpbnRvIHRoZSB2ZXJpZmllciB2aWEgYGJwZl9maXh1cF9rZnVuY19jYWxsYC4gVGhhdCdzIGludGVyZXN0aW5nOyBpbmxpbmluZyBjb3VsZCBoYXZlIHBlcmZvcm1hbmNlIGltcGxpY2F0aW9ucywgZ29vZCBvciBiYWQsIGFuZCBpdCBkZWZpbml0ZWx5IGNoYW5nZXMgdGhlIGNvZGUgcGF0aCB0aGUgdmVyaWZpZXIgaGFzIHRvIG5hdmlnYXRlLiBQbHVzLCB0aGUgcGF0Y2ggaW5jbHVkZXMgYSBiZW5jaG1hcmsgYW5kIGEgc2VsZnRlc3QsIHdoaWNoIGlzIGdyZWF0IHRvIHNlZS5cblxuVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRvIHRoZSBjb3JlIEJQRiB2ZXJpZmllciBhbmQgaXRlcmF0b3IsIG5vIGRvdWJ0IGFib3V0IHRoYXQuIFRoZSBpbXBhY3Qgb24gcHJvZ3JhbSBiZWhhdmlvciBjb3VsZCBiZSBzaWduaWZpY2FudCwgZXZlbiBpZiBzdWJ0bGUuIEdpdmVuIHRoZSBuYXR1cmUgb2YgdGhpcyBjaGFuZ2UsIGFuZCB0aGUgcG90ZW50aWFsIGZvciBvZmYtYnktb25lIGVycm9ycyBhbmQgdGhlIGxpa2UgaW4gaXRlcmF0b3JzLCBpdCdzIHNjcmVhbWluZyBmb3Igc29tZSBmdXp6aW5nIHRvIGVuc3VyZSB3ZSBoYXZlbid0IGludHJvZHVjZWQgYW55IHJlZ3Jlc3Npb25zIG9yIHZ1bG5lcmFiaWxpdGllcy4gSXQncyB0aW1lIHRvIGZpcmUgdXAgdGhvc2UgZnV6emVycyFcblxuQmVmb3JlIEkgZGl2ZSB0b28gZGVlcCBpbnRvIHRoZSBjb2RlLCBJIG5lZWQgdG8gY2hlY2sgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gQm90aCB0aGUgQlBGIGl0ZXJhdG9yIGFuZCB0aGUgdmVyaWZpZXIgYXJlIGxpa2VseSBnb3Zlcm5lZCBieSBgQ09ORklHX0JQRl9TWVNDQUxMYCwgYW5kIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhpcyBpcyBwcm9wZXJseSBlbmFibGVkIGluIGFueSByZWxldmFudCB0ZXN0IGVudmlyb25tZW50cy4gSSdsbCB0YWtlIGEgcXVpY2sgbG9vayBpbiBga2VybmVsL2JwZi9NYWtlZmlsZWAgdG8gY29uZmlybSB0aGUgZGVwZW5kZW5jaWVzIGFuZCBmbGFncy4gTGV0J3MgbWFrZSBzdXJlIG91ciBidWlsZCBlbnZpcm9ubWVudCBpcyBzZXR1cCBjb3JyZWN0bHkgYmVmb3JlIHdlIGRpdmUgaW4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgyODIsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOTYsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQxNDowMToxMy4zNDgzMjE1MzVaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjU4ODM5NDQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYnBmX2l0ZXIub1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvYnBmL01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvTWFrZWZpbGU9OT1vYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IHN5c2NhbGwubyB2ZXJpZmllci5vIGlub2RlLm8gaGVscGVycy5vIHRudW0ubyBjbnVtLm8gbG9nLm8gdG9rZW4ubyBsaXZlbmVzcy5vIGNvbnN0X2ZvbGQub1xcbmtlcm5lbC9icGYvTWFrZWZpbGU6MTA6b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSBicGZfaXRlci5vIG1hcF9pdGVyLm8gdGFza19pdGVyLm8gcHJvZ19pdGVyLm8gbGlua19pdGVyLm9cXG5rZXJuZWwvYnBmL01ha2VmaWxlLTExLW9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgKz0gaGFzaHRhYi5vIGFycmF5bWFwLm8gcGVyY3B1X2ZyZWVsaXN0Lm8gYnBmX2xydV9saXN0Lm8gbHBtX3RyaWUubyBtYXBfaW5fbWFwLm8gYmxvb21fZmlsdGVyLm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMTQ6MDE6MTMuNDE0MjEwNjg4WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODY0Nzc5ODQzNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipJbml0aWFsIEFzc2Vzc21lbnQgXHUwMDI2IEZvY3VzaW5nIHRoZSBJbnZlc3RpZ2F0aW9uKipcblxuT2theSwgc28gaXQgbG9va3MgbGlrZSB3ZSdyZSBnb2luZyB0byBuZWVkIGBDT05GSUdfQlBGX1NZU0NBTExgIGVuYWJsZWQsIHRoYXQncyBzdGVwIG9uZS4gTm93LCBsZXQncyBnZXQgZG93biB0byBicmFzcyB0YWNrcyBhbmQgZmlndXJlIG91dCB3aGVyZSB0aGUgbWVhdCBvZiB0aGlzIGlzLiBGcm9tIHRoZSBjaGFuZ2VzLCBpdCBzZWVtcyBsaWtlIHdlIHNob3VsZCBiZSBwYXlpbmcgY2xvc2UgYXR0ZW50aW9uIHRvIGEgZmV3IHNwZWNpZmljIGZ1bmN0aW9ucy4gSSdtIHNlZWluZyBtb2RpZmljYXRpb25zIGluIGB2ZXJpZmllci5jYCBmb3IgYGJwZl9maXh1cF9rZnVuY19jYWxsYC4gVGhhdCdzIGEgZGVmaW5pdGUgcG9pbnQgb2YgaW50ZXJlc3QsIHNvIEknbGwga2VlcCBhbiBleWUgb24gdGhhdCBvbmUuIFRoZW4sIGluIGBicGZfaXRlci5jYCwgSSBzcG90IHNvbWUgYWRqdXN0bWVudHMgdG8gYGJwZl9pdGVyX251bV9uZXdgLCBgYnBmX2l0ZXJfbnVtX25leHRgLCBhbmQgYGJwZl9pdGVyX251bV9kZXN0cm95YC4gVGhvc2UgYWxzbyBsb29rIGxpa2UgdGhleSdyZSBnb2luZyB0byBiZSBpbXBvcnRhbnQgdG8gdW5kZXJzdGFuZCB0aGlzIGNoYW5nZS4gQmFzZWQgb24gdGhhdCBpbmZvcm1hdGlvbiwgYm90aCBgYnBmX2ZpeHVwX2tmdW5jX2NhbGxgLCBgYnBmX2l0ZXJfbnVtX25ld2AsIGBicGZfaXRlcl9udW1fbmV4dGAsIGFuZCBgYnBmX2l0ZXJfbnVtX2Rlc3Ryb3lgIGFyZSBnb2luZyB0byBiZSBteSBmb2N1cyBwb2ludHMgdG8gZGl2ZSBpbnRvLiBOb3csIEkgd2FudCB0byB0YWtlIGEgbG9vayBhbmQgc2VlIGlmIGBicGZfZml4dXBfa2Z1bmNfY2FsbGAgaXMgYSBzdGF0aWMgZnVuY3Rpb24uIFRoYXQgY291bGQgaW1wYWN0IGhvdyB3ZSBjYW4gdXNlIGl0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo5MDUxLCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTY1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDE0OjAxOjIyLjA2MjAxMTQzM1oiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MjY1MDczNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJicGZfZml4dXBfa2Z1bmNfY2FsbFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvYnBmL3ZlcmlmaWVyLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi92ZXJpZmllci5jPTE5ODU4PXN0YXRpYyB2b2lkIF9fZml4dXBfY29sbGVjdGlvbl9pbnNlcnRfa2Z1bmMoc3RydWN0IGJwZl9pbnNuX2F1eF9kYXRhICppbnNuX2F1eCxcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xOTg3NC1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTk4NzU6aW50IGJwZl9maXh1cF9rZnVuY19jYWxsKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfaW5zbiAqaW5zbixcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTk4NzYtXFx0XFx0ICAgICBzdHJ1Y3QgYnBmX2luc24gKmluc25fYnVmLCBpbnQgaW5zbl9pZHgsIGludCAqY250KVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQxNDowMToyMi4xMjQ2Njc1OTdaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MzE3MzExMzcwMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHN1bW1hcml6ZWQgdGhvdWdodCBwcm9jZXNzLCBwcmVzZW50ZWQgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIGl0OlxuXG4qKkV2b2x2aW5nIFNpdHVhdGlvbiBBc3Nlc3NtZW50KipcblxuVGhpcyBzaXR1YXRpb24gaXNuJ3QgZml4ZWQ7IGl0J3MgZHluYW1pYy4gV2UgbmVlZCB0byBiZSBjaGVja2luZyBmb3IgbW92ZW1lbnQgYW5kIHVwZGF0ZXMuIFdlIGNhbm5vdCBhc3N1bWUgdGhhdCBpdCBpcyBzdGF0aWMuIE15IGluc3RpbmN0IGlzIHRoYXQgdGhlcmUgaXMgYSBrZXkgZWxlbWVudCB0aGF0IGNhbiBpbGx1bWluYXRlIHRoaXMgZHluYW1pYyBjaGFyYWN0ZXJpc3RpYy4gSSBzaG91bGQgcmVhbGx5IGNoZWNrIGBicGZfaXRlcl9udW1fbmV3YC4gVGhpcyB3aWxsIG9mZmVyIGEgY2xlYXIgc3RhcnRpbmcgcG9pbnQgZm9yIG15IGludmVzdGlnYXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk3MDEsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQxNDowMjowNS4yOTc3ODM3NzhaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTc2Mjc4MTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYnBmX2l0ZXJfbnVtX25ld1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvYnBmL2JwZl9pdGVyLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi9icGZfaXRlci5jPTc2OD1fX2JwZl9rZnVuY19zdGFydF9kZWZzKCk7XFxua2VybmVsL2JwZi9icGZfaXRlci5jLTc2OS1cXG5rZXJuZWwvYnBmL2JwZl9pdGVyLmM6NzcwOl9fYnBmX2tmdW5jIGludCBicGZfaXRlcl9udW1fbmV3KHN0cnVjdCBicGZfaXRlcl9udW0gKml0LCBpbnQgc3RhcnQsIGludCBlbmQpXFxua2VybmVsL2JwZi9icGZfaXRlci5jLTc3MS17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDE0OjAyOjA1LjM5NTQxNjczOFoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ3NDIzMTk2NjU4NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIHByZXNlbnRlZCBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKktlcm5lbCBGdW5jdGlvbiBDb25zaWRlcmF0aW9ucyoqXG5cbkFscmlnaHQsIHNvIHRoZSBjb3JlIG9mIHdoYXQgSSdtIHRoaW5raW5nIGFib3V0IHJpZ2h0IG5vdyBoaW5nZXMgb24gdGhlIG5hdHVyZSBvZiB0aGUgZnVuY3Rpb24gaW4gcXVlc3Rpb246IGl0J3MgYSBrZnVuYy4gVGhhdCBpbW1lZGlhdGVseSBpbmZvcm1zIGEgbG90IG9mIG15IGFwcHJvYWNoLiBUaGUgaW1wbGljYXRpb25zIG9mICpub3QqIGJlaW5nIGEgc3RhdGljIGZ1bmN0aW9uIGFyZSBjb25zaWRlcmFibGUgaW4gdGhlIGNvbnRleHQgb2Yga2VybmVsIEJQRiBkZXZlbG9wbWVudC4gSSdtIGFscmVhZHkgbWVudGFsbHkgcnVubmluZyB0aHJvdWdoIHRoZSB2YXJpb3VzIGNvbnRleHRzIHdoZXJlIHRoaXMgY2hhcmFjdGVyaXN0aWMgaW1wYWN0cyB0aGluZ3MgbGlrZSBzeW1ib2wgcmVzb2x1dGlvbiwgaW5saW5pbmcgYmVoYXZpb3IgKG9yIGxhY2sgdGhlcmVvZiwgcGVyaGFwcyksIGFuZCBhbnkgcG90ZW50aWFsIHJlbGlhbmNlIG9uIGdsb2JhbCBzdGF0ZSB3aXRoaW4gdGhlIGtlcm5lbC5cblxuR2l2ZW4gdGhhdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGJlaGF2aW9yLiBUaGUgb2J2aW91cyBuZXh0IHN0ZXAgaXMgdG8gZXhhbWluZSBgYnBmX2l0ZXJfbnVtX25leHRgLiBUaGF0IGZ1bmN0aW9uIGlzIHdoZXJlIEkgd2lsbCBzdGFydCwgZGlnZ2luZyBpbnRvIGl0cyBpbXBsZW1lbnRhdGlvbiBhbmQgaG93IGl0J3MgZGVzaWduZWQgdG8gaW50ZXJmYWNlLiBJcyBpdCBkZXNpZ25lZCB0byBiZSBmYXN0PyBSb2J1c3Q/IFdoYXQgc3BlY2lmaWMgYXNwZWN0cyBvZiBpdGVyYXRpdmUgcHJvY2Vzc2VzIGRvZXMgaXQgaGFuZGxlPyBBcmUgdGhlcmUgYW55IHBvdGVudGlhbCBnb3RjaGFzIG9yIGVkZ2UgY2FzZXMgSSBuZWVkIHRvIGNvbnNpZGVyPyBJJ20gYW50aWNpcGF0aW5nIHRoYXQgaXRzIGludGVybmFsIHdvcmtpbmdzIHdpbGwgcmV2ZWFsIGEgbG90IGFib3V0IHRoZSBleHBlY3RlZCB1c2FnZSBwYXR0ZXJucyBhbmQgdGhlIG92ZXJhbGwgZGVzaWduIG9mIHRoaXMgY29tcG9uZW50LiBUaW1lIHRvIGRpdmUgaW4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk5ODEsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQxNDowOTo1OS42MjczODc4OTRaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgyNjUyNDIyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJwZl9pdGVyX251bV9uZXh0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9icGYvYnBmX2l0ZXIuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL2JwZl9pdGVyLmM9NzcwPV9fYnBmX2tmdW5jIGludCBicGZfaXRlcl9udW1fbmV3KHN0cnVjdCBicGZfaXRlcl9udW0gKml0LCBpbnQgc3RhcnQsIGludCBlbmQpXFxuLS1cXG5rZXJuZWwvYnBmL2JwZl9pdGVyLmMtNzc3LVxcdC8qIHN0YXJ0ID09IGVuZCBpcyBsZWdpdCwgaXQncyBhbiBlbXB0eSByYW5nZSBhbmQgd2UnbGwganVzdCBnZXQgTlVMTFxcbmtlcm5lbC9icGYvYnBmX2l0ZXIuYzo3Nzg6XFx0ICogb24gZmlyc3QgKGFuZCBhbnkgc3Vic2VxdWVudCkgYnBmX2l0ZXJfbnVtX25leHQoKSBjYWxsXFxua2VybmVsL2JwZi9icGZfaXRlci5jLTc3OS1cXHQgKi9cXG4tLVxcbmtlcm5lbC9icGYvYnBmX2l0ZXIuYy03OTAtXFxua2VybmVsL2JwZi9icGZfaXRlci5jOjc5MTpcXHQvKiB1c2VyIHdpbGwgY2FsbCBicGZfaXRlcl9udW1fbmV4dCgpIGZpcnN0LFxcbmtlcm5lbC9icGYvYnBmX2l0ZXIuYy03OTItXFx0ICogd2hpY2ggd2lsbCBzZXQgcy1cXHUwMDNlY3VyIHRvIGV4YWN0bHkgc3RhcnQgdmFsdWU7XFxuLS1cXG5rZXJuZWwvYnBmL2JwZl9pdGVyLmMtODAwLVxcbmtlcm5lbC9icGYvYnBmX2l0ZXIuYzo4MDE6X19icGZfa2Z1bmMgaW50ICpicGZfaXRlcl9udW1fbmV4dChzdHJ1Y3QgYnBmX2l0ZXJfbnVtKiBpdClcXG5rZXJuZWwvYnBmL2JwZl9pdGVyLmMtODAyLXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMTQ6MDk6NTkuNzEwMDQ4ODY2WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjg5MzA3Nzg0NjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyB0aGUgS2VybmVsIEZ1bmN0aW9uKipcblxuQWxyaWdodCwgc28gdGhlIGltbWVkaWF0ZSBjb250ZXh0IHRlbGxzIG1lIHdlJ3JlIGRlYWxpbmcgd2l0aCBhIGtlcm5lbCBmdW5jdGlvbiDigJMgbGlrZWx5IHNvbWV0aGluZyBjcnVjaWFsIHRvIHRoZSBCUEYgaW5mcmFzdHJ1Y3R1cmUuIE15IGluaXRpYWwgaW5zdGluY3QgaXMgdG8gY2F0ZWdvcml6ZSBpdCBhcyBzdWNoLCBhbmQgdGhhdCBmcmFtZXdvcmsgaGVscHMgbmFycm93IGRvd24gdGhlIHJlbGV2YW50IGFyZWFzIG9mIGludmVzdGlnYXRpb24uXG5cbk5vdywgbGV0J3MgZGl2ZSBpbnRvIHRoZSBkZXRhaWwgYW5kIHdoYXQgdGhhdCBtZWFucyBmb3IgaXRzIGZ1bmN0aW9uLiBUaGUgbmV4dCBzdGVwIGlzIHRvIGV4YW1pbmUgYGJwZl9pdGVyX251bV9kZXN0cm95YC4gVGhhdCBuYW1lIGFsb25lIGlzIGZhaXJseSBkZXNjcmlwdGl2ZTogXCJicGYsXCIgXCJpdGVyLFwiIGFuZCBcImRlc3Ryb3lcIiBnaXZlcyBtZSBhIHNvbGlkIHN0YXJ0aW5nIHBvaW50LiBJJ20gYWxyZWFkeSBtZW50YWxseSBydW5uaW5nIHRocm91Z2ggdGhlIHByb2JhYmxlIHVzZSBjYXNlcy4gSSBleHBlY3QgaXQncyBhYm91dCBjbGVhbmluZyB1cCBhIG51bWVyaWMgaXRlcmF0b3Igd2l0aGluIGEgQlBGIGNvbnRleHQuIE5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBzcGVjaWZpYyBudW1lcmljIHR5cGUgYW5kIGNvbnRleHQgdGhpcyBmdW5jdGlvbiBhcHBsaWVzIHRvLCBzbyBJIGNhbiBmdXJ0aGVyIGRlZHVjZSBpdHMgc2lnbmlmaWNhbmNlLiBJJ20gZ29pbmcgdG8gc3RhcnQgbWVudGFsbHkgdHJhY2luZyBleGVjdXRpb24gcGF0aHMgdG8gdW5kZXJzdGFuZCB3aGVyZSB0aGlzIGZ1bmN0aW9uIGZpdHMgaW50byB0aGUgb3ZlcmFsbCBCUEYgbGlmZWN5Y2xlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDYxMCwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDE0OjEwOjA4LjY0MDgzMTM3M1oiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzAwOTE3MDMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYnBmX2l0ZXJfbnVtX2Rlc3Ryb3lcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2JwZi9icGZfaXRlci5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvYnBmX2l0ZXIuYz04MDE9X19icGZfa2Z1bmMgaW50ICpicGZfaXRlcl9udW1fbmV4dChzdHJ1Y3QgYnBmX2l0ZXJfbnVtKiBpdClcXG4tLVxcbmtlcm5lbC9icGYvYnBmX2l0ZXIuYy04MTgtXFxua2VybmVsL2JwZi9icGZfaXRlci5jOjgxOTpfX2JwZl9rZnVuYyB2b2lkIGJwZl9pdGVyX251bV9kZXN0cm95KHN0cnVjdCBicGZfaXRlcl9udW0gKml0KVxcbmtlcm5lbC9icGYvYnBmX2l0ZXIuYy04MjAte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQxNDoxMDowOC43MTA5MjY4ODZaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTc1MDA5Mjg0MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGJyZWFrZG93biBvZiB3aGF0IEknbSBsb29raW5nIGF0OlxuXG4qKktmdW5jIERpc3NlY3Rpb246IENvcmUgRnVuY3Rpb25zIGFuZCBDb25maWd1cmF0aW9uKipcblxuUmlnaHQsIHNvIHRoaXMgaXMgZGVmaW5pdGVseSBhIGtmdW5jLCB3aGljaCBtZWFucyBJIG5lZWQgdG8gemVybyBpbiBvbiBhIHNwZWNpZmljIHNldCBvZiBmdW5jdGlvbnMuIEkga25vdyB0aGF0OiBgYnBmX2ZpeHVwX2tmdW5jX2NhbGxgIGlzIGdvaW5nIHRvIGJlIGNydWNpYWwgZm9yIHRoZSBpbml0aWFsIHNldHVwLCBhbmQgdGhlbiBJJ20gYWxzbyBsb29raW5nIGF0IHRoZSBpdGVyYXRvciBmdW5jdGlvbnM6IGBicGZfaXRlcl9udW1fbmV3YCwgYGJwZl9pdGVyX251bV9uZXh0YCwgYW5kIGBicGZfaXRlcl9udW1fZGVzdHJveWAuIFRob3NlIGhhbmRsZSB0aGUgY3JlYXRpb24sIHByb2dyZXNzaW9uLCBhbmQgY2xlYW51cCBvZiB0aGUgaXRlcmF0b3IsIHdoaWNoIGlzIGxpa2VseSB0aGUgY29yZSBvZiB0aGUgZnVuY3Rpb25hbGl0eSBoZXJlLiBJIHNob3VsZCBwcm9iYWJseSByZXZpZXcgaG93IGl0ZXJhdG9ycyBpbnRlcmFjdCB3aXRoIHRoZXNlIGZ1bmN0aW9ucy5cblxuSSBzaG91bGQgYWxzbyBtYWtlIHN1cmUgdGhlIGBCUEZfU1lTQ0FMTGAgY29uZmlndXJhdGlvbiBvcHRpb24gaXMgZW5hYmxlZCDigJMgaXQncyBwcmV0dHkgZXNzZW50aWFsIGZvciB0aGUga2Z1bmMgdG8gYWN0dWFsbHkgZnVuY3Rpb24gcHJvcGVybHkgd2l0aGluIHRoZSBzeXN0ZW0gY2FsbCBjb250ZXh0LCBhbmQgdGhhdCdzIHVzdWFsbHkgaW1wb3J0YW50IGZvciB0aGUgY29udGV4dCBrZnVuY3Mgb3BlcmF0ZSBpbi5cblxuSnVzdCB0byBiZSB0aG9yb3VnaCwgSSBzaG91bGQgc2NhbiBmb3IgYW55IG90aGVyIGNvbmZpZ3VyYXRpb24gZmxhZ3Mgb3IgcmVsZXZhbnQga2VybmVsIG9wdGlvbnMgdGhhdCBtaWdodCBiZSByZWxldmFudCBoZXJlLiBZb3UgbmV2ZXIga25vdyB3aGVuIHNvbWUgb2JzY3VyZSBmbGFnIGlzIGx1cmtpbmcgYW5kIGFmZmVjdGluZyBiZWhhdmlvci4gQWx3YXlzIGdvb2QgdG8gZG91YmxlIGNoZWNrLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTAxNSwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjk0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDE0OjEwOjE4LjQ2MTAyMjI4OFoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTY4MzgyMzQsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBCUEZfU1lTQ0FMTFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpbml0L0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDE0OjEwOjE4LjUxNzg2OTg3MloiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNDgxOTI5MzA1OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqVHJhY2luZyBEb3duIGBCUEZfU1lTQ0FMTGAqKlxuXG5BbHJpZ2h0LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgYEJQRl9TWVNDQUxMYCBpcyBkZWZpbmVkLiBUaGlzIGxpa2VseSBtZWFucyBJJ20gbG9va2luZyBhdCBob3cgc3lzY2FsbHMgYXJlIGJlaW5nIGhvb2tlZCBvciBwb3RlbnRpYWxseSBmaWx0ZXJlZCB3aXRoIGVCUEYuIEknbGwgbmVlZCB0byBmaWd1cmUgb3V0IHdoZXJlIHRoYXQgbWFjcm8gaXMgZGVjbGFyZWQsIHByb2JhYmx5IGluIGEga2VybmVsIGhlYWRlciBmaWxlLiBJJ20gZ3Vlc3NpbmcgaXQncyBwYXJ0IG9mIHRoZSBjb3JlIEJQRiBpbmZyYXN0cnVjdHVyZSwgbWF5YmUgcmVsYXRlZCB0byB0aGUgdHJhY2luZyBvciBrcHJvYmVzIG1vZHVsZXMuIEknbGwgcHJvYmFibHkgc3RhcnQgd2l0aCB0aGUgc3RhbmRhcmQgaW5jbHVkZSBkaXJlY3Rvcmllcywgc29tZXRoaW5nIGxpa2UgYC91c3Ivc3JjL2xpbnV4L2luY2x1ZGUvYCwgb3Igd2hlcmV2ZXIgdGhlIGtlcm5lbCBoZWFkZXJzIHJlc2lkZSBvbiB0aGlzIHN5c3RlbS4gRnJvbSB0aGVyZSwgSSdsbCBuZWVkIHRvIHVzZSBzb21lIGNsZXZlciBzZWFyY2hpbmcgdGVjaG5pcXVlcy4gYGdyZXBgIGlzIHByb2JhYmx5IHRoZSBpbW1lZGlhdGUgdG9vbCwgYnV0IEkgbWlnaHQgdXNlIGEgbW9yZSBwcmVjaXNlIGNvbW1hbmQgbGlrZSBgZmluZGAgYW5kIHRoZW4gYGdyZXBgIHRvIG5hcnJvdyBkb3duIHRoZSBzZWFyY2ggaWYgSSBrbm93IHNvbWUgcmVsYXRlZCBrZXl3b3JkcywgbGlrZSBcImJwZlwiLCBcInN5c2NhbGxcIiwgb3IgXCJob29rXCIuIEknbSBhbnRpY2lwYXRpbmcgaXQnbGwgYmUgYSBmYWlybHkgaW52b2x2ZWQgbWFjcm8sIHByb2JhYmx5IHNvbWV0aGluZyB0aGF0IGV4cGFuZHMgdG8gYSBzcGVjaWZpYyBlQlBGIGluc3RydWN0aW9uIG9yIGEgc2VyaWVzIG9mIGluc3RydWN0aW9ucyByZWxhdGVkIHRvIGEgc3lzY2FsbCBlbnRyeSBwb2ludC4gSSdsbCBhbHNvIHdhbnQgdG8gY29uc2lkZXIgd2hhdCBrZXJuZWwgdmVyc2lvbnMgbWlnaHQgYmUgcmVsZXZhbnQsIGFuZCBsb29rIGludG8gdGhlIHNwZWNpZmljIGhlYWRlciBsb2NhdGlvbiBmb3IgZWFjaCB2ZXJzaW9uIGlmIG5lY2Vzc2FyeSwgYXMga2VybmVsIEFQSSBjaGFuZ2VzIGNhbiBhZmZlY3QgdGhpcyBzb3J0IG9mIHRoaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTQwNywiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDE0OjEwOjMzLjMzNzE2NTc4MVoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjM2OTc5MjEyNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQlBGX1NZU0NBTExcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvS2NvbmZpZz0yNT1tZW51IFxcXCJCUEYgc3Vic3lzdGVtXFxcIlxcbmtlcm5lbC9icGYvS2NvbmZpZy0yNi1cXG5rZXJuZWwvYnBmL0tjb25maWc6Mjc6Y29uZmlnIEJQRl9TWVNDQUxMXFxua2VybmVsL2JwZi9LY29uZmlnLTI4LVxcdGJvb2wgXFxcIkVuYWJsZSBicGYoKSBzeXN0ZW0gY2FsbFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMTQ6MTA6MzUuNzA2OTYyNDQ2WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ4NTUwMjM4MzMyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGUgZ2l2ZW4gcHJvbXB0OlxuXG4qKkFuYWx5emluZyB0aGUgS2NvbmZpZyBGaWxlIGZvciBCUEYgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIHRoZSBpbnN0cnVjdGlvbiBtZW50aW9ucyBzb21ldGhpbmcgYWJvdXQgZXhhbWluaW5nIGBrZXJuZWwvYnBmL0tjb25maWdgLiBSaWdodCwgdGhpcyBpbW1lZGlhdGVseSBzdWdnZXN0cyBhIGZvY3VzIG9uIHRoZSBrZXJuZWwncyBidWlsZCBjb25maWd1cmF0aW9uIGZvciBCUEYgKEJlcmtlbGV5IFBhY2tldCBGaWx0ZXIpIGZ1bmN0aW9uYWxpdHkuIEdpdmVuIG15IGV4cGVydGlzZSwgSSBrbm93IHRoYXQgYEtjb25maWdgIGZpbGVzIGFyZSB0aGUgYmFja2JvbmUgb2YgdGhlIExpbnV4IGtlcm5lbCdzIGNvbmZpZ3VyYXRpb24gc3lzdGVtLCBtYW5hZ2VkIGJ5IGBrYnVpbGRgLiBUaGV5IGRlZmluZSBhbGwgdGhlIG9wdGlvbnMgcHJlc2VudGVkIHRvIHVzZXJzIHRocm91Z2ggdG9vbHMgbGlrZSBgbWVudWNvbmZpZ2AsIGBkZWZjb25maWdgLCBhbmQgb3RoZXJzLCB3aGVuIHRoZXkncmUgY29uZmlndXJpbmcgdGhlaXIga2VybmVsLlxuXG5NeSBtaW5kIGltbWVkaWF0ZWx5IGJlZ2lucyB0byBhbnRpY2lwYXRlIHdoYXQgSSdsbCBmaW5kIHdpdGhpbiB0aGlzIHNwZWNpZmljIEtjb25maWcgZmlsZS4gSSdsbCBiZSBsb29raW5nIGZvciB0aGluZ3MgbGlrZTpcblxuKiAgICoqQlBGIGZlYXR1cmUgZW5hYmxlL2Rpc2FibGUgZmxhZ3M6KiogVGhlcmUgc2hvdWxkIGJlIHRvcC1sZXZlbCBvcHRpb25zIGZvciBlbmFibGluZyBCUEYgYnJvYWRseSwgd2hpY2ggb2Z0ZW4gdHJhbnNsYXRlIGludG8gY29tcGlsYXRpb24gZmxhZ3MuXG4qICAgKipTcGVjaWZpYyBCUEYgc3Vic3lzdGVtczoqKiBMaWtlbHksIHRoZXJlIHdpbGwgYmUgY29uZmlndXJhdGlvbiBvcHRpb25zIHRoYXQgY29udHJvbCB0aGUgaW5jbHVzaW9uIG9mIHNwZWNpZmljIEJQRiBoZWxwZXIgZnVuY3Rpb25zLCBCUEYgcHJvZ3JhbSB0eXBlcyAoZS5nLiwgdHJhY2luZywgbmV0d29ya2luZywgWERQKSwgYW5kIEJQRi1yZWxhdGVkIGZlYXR1cmVzLiBJJ20gdGhpbmtpbmcgb2YgZUJQRiBhbmQgaXRzIGRpdmVyc2UgdXNlcy5cbiogICAqKkRlcGVuZGVuY2llcyBhbmQgY29uc3RyYWludHM6KiogVGhlIEtjb25maWcgZmlsZSB3aWxsIHNwZWNpZnkgd2hpY2ggZmVhdHVyZXMgZGVwZW5kIG9uIG90aGVycywgYW5kIGFueSBoYXJkd2FyZSBvciBzb2Z0d2FyZSByZXF1aXJlbWVudHMuIFRoaXMgaXMga2V5LCBhcyBCUEYgY2FuIGhhdmUgdmVyeSBzcGVjaWZpYyBkZXBlbmRlbmN5IGNoYWlucy5cbiogICAqKkhlbHAgdGV4dDoqKiBUaGUgZmlsZSAqc2hvdWxkKiBjb250YWluIGhlbHBmdWwgZGVzY3JpcHRpb25zIGZvciBlYWNoIG9wdGlvbiwgaWRlYWxseSBleHBsYWluaW5nIHdoYXQgdGhlIG9wdGlvbiBkb2VzLCBhbmQgcHJvdmlkaW5nIGNvbnRleHQgZm9yIGl0cyB1c2UuIEkgd2lsbCBhbHNvIGFzc2VzcyBpdHMgcXVhbGl0eS5cbiogICAqKkRlZmF1bHQgdmFsdWVzOioqIEl0IHdpbGwgZGVmaW5lIGRlZmF1bHQgY2hvaWNlcyBmb3IgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy5cblxuSSdtIHJlYWR5IHRvIGRpdmUgaW50byB0aGUgZmlsZSBhbmQgZ2V0IHRvIHdvcmsuIExldCdzIHNlZSB3aGF0IGludGVyZXN0aW5nIGNvbmZpZ3VyYXRpb25zIHRoZSBrZXJuZWwgZGV2cyBoYXZlIGNyZWF0ZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExODI1LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMTQ6MTE6MjQuMjU3MjAzMjQ4WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYyNzgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImtlcm5lbC9icGYvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAyNSxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAyNTpcXHRtZW51IFxcXCJCUEYgc3Vic3lzdGVtXFxcIlxcbiAgMjY6XFx0XFxuICAyNzpcXHRjb25maWcgQlBGX1NZU0NBTExcXG4gIDI4OlxcdFxcdGJvb2wgXFxcIkVuYWJsZSBicGYoKSBzeXN0ZW0gY2FsbFxcXCJcXG4gIDI5OlxcdFxcdHNlbGVjdCBCUEZcXG4gIDMwOlxcdFxcdHNlbGVjdCBJUlFfV09SS1xcbiAgMzE6XFx0XFx0c2VsZWN0IE5FRURfVEFTS1NfUkNVXFxuICAzMjpcXHRcXHRzZWxlY3QgVEFTS1NfVFJBQ0VfUkNVXFxuICAzMzpcXHRcXHRzZWxlY3QgQklOQVJZX1BSSU5URlxcbiAgMzQ6XFx0XFx0c2VsZWN0IE5FVF9TT0NLX01TRyBpZiBORVRcXG4gIDM1OlxcdFxcdHNlbGVjdCBORVRfWEdSRVNTIGlmIE5FVFxcbiAgMzY6XFx0XFx0c2VsZWN0IFBBR0VfUE9PTCBpZiBORVRcXG4gIDM3OlxcdFxcdGRlZmF1bHQgblxcbiAgMzg6XFx0XFx0aGVscFxcbiAgMzk6XFx0XFx0ICBFbmFibGUgdGhlIGJwZigpIHN5c3RlbSBjYWxsIHRoYXQgYWxsb3dzIHRvIG1hbmlwdWxhdGUgQlBGIHByb2dyYW1zXFxuICA0MDpcXHRcXHQgIGFuZCBtYXBzIHZpYSBmaWxlIGRlc2NyaXB0b3JzLlxcbiAgNDE6XFx0XFxuICA0MjpcXHRjb25maWcgQlBGX0pJVFxcbiAgNDM6XFx0XFx0Ym9vbCBcXFwiRW5hYmxlIEJQRiBKdXN0IEluIFRpbWUgY29tcGlsZXJcXFwiXFxuICA0NDpcXHRcXHRkZXBlbmRzIG9uIEJQRlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQxNDoxMToyNC4yNTcyNjc5MDhaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTU4MzM3MjI0NTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgcHJlc2VudGVkIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqTXkgQlBGIFN0cmF0ZWd5KipcblxuQWxyaWdodCwgc28gdGhlIGNvcmUgb2YgdGhpcyBpbnZlc3RpZ2F0aW9uLCB0aGUgdmVyeSBjcnV4IG9mIHdoZXJlIEkgbmVlZCB0byBmb2N1cyBteSBlbmVyZ2llcywgaXMgZ29pbmcgdG8gYmUgZHJpdmVuIGJ5IHRoZSBgQlBGX1NZU0NBTExgIGNvbmZpZ3VyYXRpb24uIFRoYXQncyB0aGUga2V5LCB0aGUgZW50cnkgcG9pbnQgZm9yIGV2ZXJ5dGhpbmcgSSBuZWVkIHRvIGFuYWx5emUuIEl0J3MgdGhlIGx5bmNocGluLCB0aGUgcGxhY2Ugd2hlcmUgSSdsbCBob29rIGluIHRvIGdldCB0aGUgZGF0YSBJIG5lZWQuXG5cbkFuZCwgb2YgY291cnNlLCBvbmNlIEkndmUgZ290IHRoYXQgZGF0YSwgb25jZSBJJ3ZlIHNpZnRlZCB0aHJvdWdoIGl0LCB3cnVuZyBpdCBkcnkgYW5kIGFuYWx5emVkIGl0IC0gSSdtIGdvaW5nIHRvIHJlcG9ydCB0aG9zZSBmaW5kaW5ncyB3aXRoIGBzZXQtcmVzdWx0c2AuIE5vIHN1cnByaXNlcyB0aGVyZS4gSXQncyB0aGUgbW9zdCBlZmZlY3RpdmUgYW5kIGVmZmljaWVudCB3YXkgdG8gcHJlc2VudCBhbmQgZm9ybWF0IHRoZSBpbmZvcm1hdGlvbiBhZnRlciBhbGwgdGhhdCBpbnRlbnNpdmUgd29yay4gSXTigJlzIHdoYXQgSSdsbCBsZXZlcmFnZSB0byBwcmVzZW50IHRoZSBpbnNpZ2h0cyB0aGF0IGVtZXJnZSBmcm9tIHRoZSBzeXNjYWxsIGFuYWx5c2lzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjUwNSwiT3V0cHV0VG9rZW5zIjoxNjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDE0OjEyOjIwLjA5MDk5Mjc1OFoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc3NTUyMzIyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfU1lTQ0FMTFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJwZl9maXh1cF9rZnVuY19jYWxsXCIsXG4gICAgXCJicGZfaXRlcl9udW1fbmV3XCIsXG4gICAgXCJicGZfaXRlcl9udW1fbmV4dFwiLFxuICAgIFwiYnBmX2l0ZXJfbnVtX2Rlc3Ryb3lcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgaW1wbGVtZW50YXRpb24gb2YgQlBGIG51bWVyaWMgaXRlcmF0b3JzIChgYnBmX2l0ZXJfbnVtX25ld2AsIGBicGZfaXRlcl9udW1fbmV4dGAsIGBicGZfaXRlcl9udW1fZGVzdHJveWApIGFuZCBhZGRzIGlubGluaW5nIGZvciB0aGVzZSBrZnVuY3MgaW4gdGhlIEJQRiB2ZXJpZmllciAoYGJwZl9maXh1cF9rZnVuY19jYWxsYCkuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGNvcmUgQlBGIHN1YnN5c3RlbSBhbmQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfU1lTQ0FMTFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJwZl9maXh1cF9rZnVuY19jYWxsXCIsXG4gICAgXCJicGZfaXRlcl9udW1fbmV3XCIsXG4gICAgXCJicGZfaXRlcl9udW1fbmV4dFwiLFxuICAgIFwiYnBmX2l0ZXJfbnVtX2Rlc3Ryb3lcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgaW1wbGVtZW50YXRpb24gb2YgQlBGIG51bWVyaWMgaXRlcmF0b3JzIChgYnBmX2l0ZXJfbnVtX25ld2AsIGBicGZfaXRlcl9udW1fbmV4dGAsIGBicGZfaXRlcl9udW1fZGVzdHJveWApIGFuZCBhZGRzIGlubGluaW5nIGZvciB0aGVzZSBrZnVuY3MgaW4gdGhlIEJQRiB2ZXJpZmllciAoYGJwZl9maXh1cF9rZnVuY19jYWxsYCkuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGNvcmUgQlBGIHN1YnN5c3RlbSBhbmQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowspcrt[1] Phase: Succeeded StartedAt: 2026-08-04 14:12:45 +0000 UTC FinishedAt: 2026-08-04 14:12:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflowspcrt[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-04 14:12:45 +0000 UTC FinishedAt: 2026-08-04 14:12:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflowspcrt[2] Phase: Succeeded StartedAt: 2026-08-04 14:12:45 +0000 UTC FinishedAt: 2026-08-04 17:51:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowspcrt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"60781269e26c786de2bb93fb1e697a5c32ccee48","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_fixup_kfunc_call","bpf_iter_num_new","bpf_iter_num_next","bpf_iter_num_destroy"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"60781269e26c786de2bb93fb1e697a5c32ccee48","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"89768380-1fa3-44a6-b82b-d862d1d779cb","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-04 14:12:45 +0000 UTC FinishedAt: 2026-08-04 17:51:47 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"60781269e26c786de2bb93fb1e697a5c32ccee48","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_fixup_kfunc_call","bpf_iter_num_new","bpf_iter_num_next","bpf_iter_num_destroy"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"60781269e26c786de2bb93fb1e697a5c32ccee48","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"89768380-1fa3-44a6-b82b-d862d1d779cb","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowspcrt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"60781269e26c786de2bb93fb1e697a5c32ccee48","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_fixup_kfunc_call","bpf_iter_num_new","bpf_iter_num_next","bpf_iter_num_destroy"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"60781269e26c786de2bb93fb1e697a5c32ccee48","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"89768380-1fa3-44a6-b82b-d862d1d779cb","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-04 14:12:45 +0000 UTC FinishedAt: 2026-08-04 14:12:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowspcrt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"60781269e26c786de2bb93fb1e697a5c32ccee48","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_fixup_kfunc_call","bpf_iter_num_new","bpf_iter_num_next","bpf_iter_num_destroy"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"60781269e26c786de2bb93fb1e697a5c32ccee48","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"89768380-1fa3-44a6-b82b-d862d1d779cb","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-04 14:12:45 +0000 UTC FinishedAt: 2026-08-04 14:12:50 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"60781269e26c786de2bb93fb1e697a5c32ccee48","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowspcrt/series-workflowspcrt-convert-artifact-1787839485/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowspcrt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"60781269e26c786de2bb93fb1e697a5c32ccee48","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_fixup_kfunc_call","bpf_iter_num_new","bpf_iter_num_next","bpf_iter_num_destroy"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"60781269e26c786de2bb93fb1e697a5c32ccee48","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"89768380-1fa3-44a6-b82b-d862d1d779cb","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-04 14:12:55 +0000 UTC FinishedAt: 2026-08-04 14:28:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowspcrt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"60781269e26c786de2bb93fb1e697a5c32ccee48","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_fixup_kfunc_call","bpf_iter_num_new","bpf_iter_num_next","bpf_iter_num_destroy"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"60781269e26c786de2bb93fb1e697a5c32ccee48","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"89768380-1fa3-44a6-b82b-d862d1d779cb","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-04 14:12:55 +0000 UTC FinishedAt: 2026-08-04 14:28:55 +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:*5e537701-ed1e-4493-be29-4b5dce3d22c1,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-workflowspcrt/series-workflowspcrt-convert-artifact-1787839485/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": "ba81bfbc-318f-46a6-ad10-be46e55d8fab", "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-workflowspcrt/series-workflowspcrt-build-action-2509581619/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowspcrt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"60781269e26c786de2bb93fb1e697a5c32ccee48","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_fixup_kfunc_call","bpf_iter_num_new","bpf_iter_num_next","bpf_iter_num_destroy"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"60781269e26c786de2bb93fb1e697a5c32ccee48","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"89768380-1fa3-44a6-b82b-d862d1d779cb","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-04 14:12:55 +0000 UTC FinishedAt: 2026-08-04 14:28:45 +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:*5e537701-ed1e-4493-be29-4b5dce3d22c1,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-workflowspcrt/series-workflowspcrt-convert-artifact-1787839485/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": "ba81bfbc-318f-46a6-ad10-be46e55d8fab", "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-workflowspcrt/series-workflowspcrt-build-action-2509581619/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowspcrt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"60781269e26c786de2bb93fb1e697a5c32ccee48","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_fixup_kfunc_call","bpf_iter_num_new","bpf_iter_num_next","bpf_iter_num_destroy"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"60781269e26c786de2bb93fb1e697a5c32ccee48","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"89768380-1fa3-44a6-b82b-d862d1d779cb","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-04 14:28:55 +0000 UTC FinishedAt: 2026-08-04 14:28:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowspcrt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"60781269e26c786de2bb93fb1e697a5c32ccee48","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_fixup_kfunc_call","bpf_iter_num_new","bpf_iter_num_next","bpf_iter_num_destroy"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"60781269e26c786de2bb93fb1e697a5c32ccee48","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"89768380-1fa3-44a6-b82b-d862d1d779cb","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-04 14:28:55 +0000 UTC FinishedAt: 2026-08-04 14:28:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowspcrt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"60781269e26c786de2bb93fb1e697a5c32ccee48","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_fixup_kfunc_call","bpf_iter_num_new","bpf_iter_num_next","bpf_iter_num_destroy"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"60781269e26c786de2bb93fb1e697a5c32ccee48","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"89768380-1fa3-44a6-b82b-d862d1d779cb","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-04 14:28:55 +0000 UTC FinishedAt: 2026-08-04 14:29:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowspcrt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"60781269e26c786de2bb93fb1e697a5c32ccee48","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_fixup_kfunc_call","bpf_iter_num_new","bpf_iter_num_next","bpf_iter_num_destroy"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"60781269e26c786de2bb93fb1e697a5c32ccee48","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"89768380-1fa3-44a6-b82b-d862d1d779cb","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-04 14:28:55 +0000 UTC FinishedAt: 2026-08-04 14:28:59 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"60781269e26c786de2bb93fb1e697a5c32ccee48","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"89768380-1fa3-44a6-b82b-d862d1d779cb","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowspcrt/series-workflowspcrt-convert-artifact-2320851544/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowspcrt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"60781269e26c786de2bb93fb1e697a5c32ccee48","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_fixup_kfunc_call","bpf_iter_num_new","bpf_iter_num_next","bpf_iter_num_destroy"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"60781269e26c786de2bb93fb1e697a5c32ccee48","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"89768380-1fa3-44a6-b82b-d862d1d779cb","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-04 14:29:05 +0000 UTC FinishedAt: 2026-08-04 14:31:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowspcrt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"60781269e26c786de2bb93fb1e697a5c32ccee48","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_fixup_kfunc_call","bpf_iter_num_new","bpf_iter_num_next","bpf_iter_num_destroy"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"60781269e26c786de2bb93fb1e697a5c32ccee48","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"89768380-1fa3-44a6-b82b-d862d1d779cb","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-04 14:29:05 +0000 UTC FinishedAt: 2026-08-04 14:31:03 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*ba81bfbc-318f-46a6-ad10-be46e55d8fab,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-workflowspcrt/series-workflowspcrt-build-action-2509581619/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-workflowspcrt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"60781269e26c786de2bb93fb1e697a5c32ccee48","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_fixup_kfunc_call","bpf_iter_num_new","bpf_iter_num_next","bpf_iter_num_destroy"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"60781269e26c786de2bb93fb1e697a5c32ccee48","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"89768380-1fa3-44a6-b82b-d862d1d779cb","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-04 14:31:12 +0000 UTC FinishedAt: 2026-08-04 14:31:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowspcrt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"60781269e26c786de2bb93fb1e697a5c32ccee48","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_fixup_kfunc_call","bpf_iter_num_new","bpf_iter_num_next","bpf_iter_num_destroy"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"60781269e26c786de2bb93fb1e697a5c32ccee48","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"89768380-1fa3-44a6-b82b-d862d1d779cb","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-04 14:31:12 +0000 UTC FinishedAt: 2026-08-04 14:31:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowspcrt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"60781269e26c786de2bb93fb1e697a5c32ccee48","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_fixup_kfunc_call","bpf_iter_num_new","bpf_iter_num_next","bpf_iter_num_destroy"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"60781269e26c786de2bb93fb1e697a5c32ccee48","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"89768380-1fa3-44a6-b82b-d862d1d779cb","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-04 14:31:12 +0000 UTC FinishedAt: 2026-08-04 14:47:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowspcrt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"60781269e26c786de2bb93fb1e697a5c32ccee48","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_fixup_kfunc_call","bpf_iter_num_new","bpf_iter_num_next","bpf_iter_num_destroy"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"60781269e26c786de2bb93fb1e697a5c32ccee48","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"89768380-1fa3-44a6-b82b-d862d1d779cb","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-04 14:31:12 +0000 UTC FinishedAt: 2026-08-04 14:47:16 +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:*5e537701-ed1e-4493-be29-4b5dce3d22c1,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-workflowspcrt/series-workflowspcrt-convert-artifact-2320851544/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": "7dc18c49-7a7a-4971-8ff8-54a8a2365d9c", "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-workflowspcrt/series-workflowspcrt-build-action-4076932036/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowspcrt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"60781269e26c786de2bb93fb1e697a5c32ccee48","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_fixup_kfunc_call","bpf_iter_num_new","bpf_iter_num_next","bpf_iter_num_destroy"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"60781269e26c786de2bb93fb1e697a5c32ccee48","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"89768380-1fa3-44a6-b82b-d862d1d779cb","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-04 14:31:12 +0000 UTC FinishedAt: 2026-08-04 14:47:06 +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:*5e537701-ed1e-4493-be29-4b5dce3d22c1,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-workflowspcrt/series-workflowspcrt-convert-artifact-2320851544/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": "7dc18c49-7a7a-4971-8ff8-54a8a2365d9c", "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-workflowspcrt/series-workflowspcrt-build-action-4076932036/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowspcrt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"60781269e26c786de2bb93fb1e697a5c32ccee48","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_fixup_kfunc_call","bpf_iter_num_new","bpf_iter_num_next","bpf_iter_num_destroy"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"60781269e26c786de2bb93fb1e697a5c32ccee48","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"89768380-1fa3-44a6-b82b-d862d1d779cb","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-04 14:47:16 +0000 UTC FinishedAt: 2026-08-04 14:47:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowspcrt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"60781269e26c786de2bb93fb1e697a5c32ccee48","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_fixup_kfunc_call","bpf_iter_num_new","bpf_iter_num_next","bpf_iter_num_destroy"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"60781269e26c786de2bb93fb1e697a5c32ccee48","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"89768380-1fa3-44a6-b82b-d862d1d779cb","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-04 14:47:16 +0000 UTC FinishedAt: 2026-08-04 14:47:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowspcrt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"60781269e26c786de2bb93fb1e697a5c32ccee48","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_fixup_kfunc_call","bpf_iter_num_new","bpf_iter_num_next","bpf_iter_num_destroy"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"60781269e26c786de2bb93fb1e697a5c32ccee48","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"89768380-1fa3-44a6-b82b-d862d1d779cb","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-04 14:47:16 +0000 UTC FinishedAt: 2026-08-04 14:49:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowspcrt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"60781269e26c786de2bb93fb1e697a5c32ccee48","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_fixup_kfunc_call","bpf_iter_num_new","bpf_iter_num_next","bpf_iter_num_destroy"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"60781269e26c786de2bb93fb1e697a5c32ccee48","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"89768380-1fa3-44a6-b82b-d862d1d779cb","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-04 14:47:16 +0000 UTC FinishedAt: 2026-08-04 14:49:10 +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:*7dc18c49-7a7a-4971-8ff8-54a8a2365d9c,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-workflowspcrt/series-workflowspcrt-build-action-4076932036/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-workflowspcrt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"60781269e26c786de2bb93fb1e697a5c32ccee48","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_fixup_kfunc_call","bpf_iter_num_new","bpf_iter_num_next","bpf_iter_num_destroy"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"60781269e26c786de2bb93fb1e697a5c32ccee48","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"89768380-1fa3-44a6-b82b-d862d1d779cb","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-04 14:49:19 +0000 UTC FinishedAt: 2026-08-04 17:51:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowspcrt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"60781269e26c786de2bb93fb1e697a5c32ccee48","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_fixup_kfunc_call","bpf_iter_num_new","bpf_iter_num_next","bpf_iter_num_destroy"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"60781269e26c786de2bb93fb1e697a5c32ccee48","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"89768380-1fa3-44a6-b82b-d862d1d779cb","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-04 14:49:19 +0000 UTC FinishedAt: 2026-08-04 17:51:47 +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-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_fixup_kfunc_call","bpf_iter_num_new","bpf_iter_num_next","bpf_iter_num_destroy"],"skip_cover_check":false},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:*ba81bfbc-318f-46a6-ad10-be46e55d8fab,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*7dc18c49-7a7a-4971-8ff8-54a8a2365d9c,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-workflowspcrt/series-workflowspcrt-build-action-2509581619/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-workflowspcrt/series-workflowspcrt-build-action-4076932036/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowspcrt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"60781269e26c786de2bb93fb1e697a5c32ccee48","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_fixup_kfunc_call","bpf_iter_num_new","bpf_iter_num_next","bpf_iter_num_destroy"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"60781269e26c786de2bb93fb1e697a5c32ccee48","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"89768380-1fa3-44a6-b82b-d862d1d779cb","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-04 14:49:19 +0000 UTC FinishedAt: 2026-08-04 14:49:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowspcrt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"60781269e26c786de2bb93fb1e697a5c32ccee48","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_fixup_kfunc_call","bpf_iter_num_new","bpf_iter_num_next","bpf_iter_num_destroy"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"60781269e26c786de2bb93fb1e697a5c32ccee48","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"89768380-1fa3-44a6-b82b-d862d1d779cb","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-04 14:49:19 +0000 UTC FinishedAt: 2026-08-04 14:49:24 +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-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_fixup_kfunc_call","bpf_iter_num_new","bpf_iter_num_next","bpf_iter_num_destroy"],"skip_cover_check":false},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-workflowspcrt/series-workflowspcrt-convert-artifact-3798431793/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowspcrt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"60781269e26c786de2bb93fb1e697a5c32ccee48","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_fixup_kfunc_call","bpf_iter_num_new","bpf_iter_num_next","bpf_iter_num_destroy"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"60781269e26c786de2bb93fb1e697a5c32ccee48","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"89768380-1fa3-44a6-b82b-d862d1d779cb","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-04 14:49:19 +0000 UTC FinishedAt: 2026-08-04 14:49:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowspcrt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"60781269e26c786de2bb93fb1e697a5c32ccee48","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_fixup_kfunc_call","bpf_iter_num_new","bpf_iter_num_next","bpf_iter_num_destroy"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"60781269e26c786de2bb93fb1e697a5c32ccee48","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"89768380-1fa3-44a6-b82b-d862d1d779cb","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-04 14:49:19 +0000 UTC FinishedAt: 2026-08-04 14:49:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowspcrt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"60781269e26c786de2bb93fb1e697a5c32ccee48","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_fixup_kfunc_call","bpf_iter_num_new","bpf_iter_num_next","bpf_iter_num_destroy"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"60781269e26c786de2bb93fb1e697a5c32ccee48","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"89768380-1fa3-44a6-b82b-d862d1d779cb","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-04 14:49:20 +0000 UTC FinishedAt: 2026-08-04 14:49:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflowspcrt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"60781269e26c786de2bb93fb1e697a5c32ccee48","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_fixup_kfunc_call","bpf_iter_num_new","bpf_iter_num_next","bpf_iter_num_destroy"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"60781269e26c786de2bb93fb1e697a5c32ccee48","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"89768380-1fa3-44a6-b82b-d862d1d779cb","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-04 14:49:30 +0000 UTC FinishedAt: 2026-08-04 17:51:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowspcrt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"60781269e26c786de2bb93fb1e697a5c32ccee48","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_fixup_kfunc_call","bpf_iter_num_new","bpf_iter_num_next","bpf_iter_num_destroy"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"60781269e26c786de2bb93fb1e697a5c32ccee48","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"89768380-1fa3-44a6-b82b-d862d1d779cb","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-04 14:49:30 +0000 UTC FinishedAt: 2026-08-04 17:51:37 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*ba81bfbc-318f-46a6-ad10-be46e55d8fab,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*7dc18c49-7a7a-4971-8ff8-54a8a2365d9c,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-workflowspcrt/series-workflowspcrt-build-action-2509581619/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-workflowspcrt/series-workflowspcrt-build-action-4076932036/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-workflowspcrt/series-workflowspcrt-convert-artifact-3798431793/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,}